From a3cf6e8089fc49a37f8afcba83555839264b31b6 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: Thu, 13 Apr 2017 02:25:00 +0300 Subject: [PATCH] 2_3_2_195 --- .../Задание/Forms/ДействиеВыполнить/Form.form | 2 + .../Forms/ДействиеВыполнить/Help/ru.html | 2 +- .../Задание/Forms/ДействиеПроверить/Form.form | 2 + .../Forms/ДействиеПроверить/Help/ru.html | 2 +- .../Forms/ФормаБизнесПроцесса/Help/ru.html | 2 +- .../Forms/ФормаБизнесПроцесса/Module.bsl | 4 + .../BusinessProcesses/Задание/Help/ru.html | 2 +- .../Задание/ManagerModule.bsl | 6 +- .../Задание/ObjectModule.bsl | 10 +- .../ПодборВалютИзКлассификатора/Help/ru.html | 2 +- .../Валюты/Forms/ФормаСписка/Form.form | 2 +- .../Валюты/Forms/ФормаСписка/Module.bsl | 3 +- .../Валюты/Forms/ФормаЭлемента/Form.form | 2 + .../Валюты/Forms/ФормаЭлемента/Help/ru.html | 2 +- SSL/src/Catalogs/Валюты/Help/ru.html | 2 +- SSL/src/Catalogs/Валюты/ManagerModule.bsl | 35 +- SSL/src/Catalogs/Валюты/ObjectModule.bsl | 123 +- .../Template.txt | 1 + .../ВариантыОтветовАнкет/Help/ru.html | 2 +- .../ВариантыОтветовАнкет/ManagerModule.bsl | 6 +- .../Forms/РазмещениеВРазделах/Form.form | 1 + .../Forms/РазмещениеВРазделах/Help/ru.html | 2 +- .../Forms/РазмещениеВРазделах/Module.bsl | 62 +- .../Forms/СбросНастроекРазмещения/Form.form | 4 - .../Forms/СбросНастроекРазмещения/Module.bsl | 24 +- .../СбросПользовательскихНастроек/Module.bsl | 9 +- .../Forms/ФормаСписка/Form.form | 19 +- .../Forms/ФормаСписка/Module.bsl | 146 +- .../Forms/ФормаЭлемента/Form.form | 14 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 38 +- SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html | 2 +- .../ВариантыОтчетов/ManagerModule.bsl | 61 +- .../Catalogs/ВариантыОтчетов/ObjectModule.bsl | 35 +- .../ВариантыОтчетов/ВариантыОтчетов.mdo | 22 + .../ВерсииРасширений/ObjectModule.bsl | 4 + .../ВерсииРасширений/ВерсииРасширений.mdo | 1 + .../ВерсииФайлов/Forms/ВерсииФайла/Form.form | 1 + .../ВерсииФайлов/Forms/ВерсииФайла/Module.bsl | 6 +- .../ВыборСпособаСравненияВерсий/Help/ru.html | 2 +- .../Forms/ФормаВыбора/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- SSL/src/Catalogs/ВерсииФайлов/Help/ru.html | 2 +- .../Catalogs/ВерсииФайлов/ManagerModule.bsl | 6 +- .../Catalogs/ВерсииФайлов/ObjectModule.bsl | 28 +- .../Catalogs/ВерсииФайлов/ВерсииФайлов.mdo | 39 +- .../Forms/ФормаВыбораГруппы/Help/ru.html | 2 +- .../Forms/ФормаСписка/Module.bsl | 4 +- .../Forms/ФормаЭлемента/Form.form | 152 +- .../Forms/ФормаЭлемента/Help/ru.html | 16 +- .../Forms/ФормаЭлемента/Module.bsl | 16 +- .../ВидыКонтактнойИнформации/Help/ru.html | 2 +- .../ManagerModule.bsl | 7 +- .../ВидыКонтактнойИнформации/ObjectModule.bsl | 22 + .../ВидыКонтактнойИнформации.mdo | 38 + .../Commands/ВнешнийДоступ/CommandModule.bsl | 4 +- .../Forms/ФормаСписка/Form.form | 9 + .../Forms/ФормаСписка/Module.bsl | 33 +- .../Forms/ФормаЭлемента/Form.form | 87 +- .../Forms/ФормаЭлемента/Help/ru.html | 6 +- .../Forms/ФормаЭлемента/Module.bsl | 150 +- .../Catalogs/ВнешниеПользователи/Help/ru.html | 4 +- .../ВнешниеПользователи/ManagerModule.bsl | 8 +- .../ВнешниеПользователи/ObjectModule.bsl | 5 + .../ВнешниеПользователи.mdo | 4 + .../ВопросыШаблонаАнкеты/ManagerModule.bsl | 6 +- .../ManagerModule.bsl | 6 +- .../ВстречаПрисоединенныеФайлы.mdo | 37 + .../Forms/ФормаЭлемента/Form.form | 37 + .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 64 +- .../ГруппыВнешнихПользователей/Help/ru.html | 2 +- .../ManagerModule.bsl | 6 +- .../ObjectModule.bsl | 6 +- .../Forms/ФормаВыбораГруппы/Help/ru.html | 2 +- .../Forms/ФормаГруппы/Help/ru.html | 2 +- .../ГруппыДоступа/Forms/ФормаСписка/Form.form | 10 + .../Forms/ФормаСписка/Help/ru.html | 4 +- .../Forms/ФормаСписка/Module.bsl | 17 + .../Forms/ФормаЭлемента/Form.form | 3 + .../Forms/ФормаЭлемента/Help/ru.html | 8 +- .../Forms/ФормаЭлемента/Module.bsl | 8 +- SSL/src/Catalogs/ГруппыДоступа/Help/ru.html | 2 +- .../Catalogs/ГруппыДоступа/ManagerModule.bsl | 16 +- .../Catalogs/ГруппыДоступа/ObjectModule.bsl | 21 +- .../ГруппыИсполнителейЗадач/ManagerModule.bsl | 6 +- .../Forms/ФормаЭлемента/Form.form | 2 + .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Catalogs/ГруппыПользователей/Help/ru.html | 2 +- .../ГруппыПользователей/ObjectModule.bsl | 4 + .../Form.form | 16 +- .../Module.bsl | 2 +- .../Forms/ФормаСписка/Module.bsl | 59 +- .../Forms/ФормаЭлемента/Form.form | 114 +- .../Forms/ФормаЭлемента/Help/ru.html | 8 +- .../Forms/ФормаЭлемента/Module.bsl | 248 +- .../Help/ru.html | 4 +- .../ManagerModule.bsl | 6 +- .../ObjectModule.bsl | 8 +- .../Forms/ФормаЭлемента/Help/ru.html | 4 +- .../ЗакладкиВзаимодействий/Help/ru.html | 4 +- .../ЗакладкиВзаимодействий/ManagerModule.bsl | 6 +- .../Заметки/Forms/ВсеЗаметки/Help/ru.html | 2 +- .../Forms/ЗаметкиПоПредмету/Help/ru.html | 2 +- .../Заметки/Forms/МоиЗаметки/Help/ru.html | 2 +- .../Заметки/Forms/ФормаГруппы/Help/ru.html | 2 +- .../Заметки/Forms/ФормаЭлемента/Form.form | 1 - .../Заметки/Forms/ФормаЭлемента/Help/ru.html | 2 +- SSL/src/Catalogs/Заметки/Help/ru.html | 2 +- SSL/src/Catalogs/Заметки/ManagerModule.bsl | 6 +- .../ManagerModule.bsl | 6 +- ...анноеВзаимодействиеПрисоединенныеФайлы.mdo | 37 + .../Forms/ФормаГруппы/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../ЗначенияСвойствОбъектов/Help/ru.html | 2 +- .../ЗначенияСвойствОбъектов/ManagerModule.bsl | 6 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../ManagerModule.bsl | 6 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../ManagerModule.bsl | 217 +- .../ИдентификаторыОбъектовМетаданных.mdo | 9 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../ManagerModule.bsl | 8 +- .../ИдентификаторыОбъектовРасширений.mdo | 10 +- .../Календари/Forms/ФормаСписка/Form.form | 8 +- .../Календари/Forms/ФормаСписка/Module.bsl | 6 + .../Календари/Forms/ФормаЭлемента/Form.form | 2 + .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Календари/Forms/ФормаЭлемента/Module.bsl | 4 + SSL/src/Catalogs/Календари/Help/ru.html | 2 +- SSL/src/Catalogs/Календари/ManagerModule.bsl | 273 +- SSL/src/Catalogs/Календари/Календари.mdo | 2 +- .../CommandModule.bsl | 0 .../Forms/ЗагрузкаКлассификатора/Form.form | 4 + .../Forms/ЗагрузкаКлассификатора/Help/ru.html | 4 +- .../Forms/ЗагрузкаКлассификатора/Module.bsl | 4 + .../Forms/ФормаВыбора/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Form.form | 150 +- .../Forms/ФормаЭлемента/Help/ru.html | 15 +- .../Forms/ФормаЭлемента/Module.bsl | 1 + .../КлассификаторБанковРФ/Help/ru.html | 8 +- .../КлассификаторБанковРФ/ManagerModule.bsl | 12 +- .../КлассификаторБанковРФ.mdo | 51 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Catalogs/КлючевыеОперации/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Help/ru.html | 8 +- .../ManagerModule.bsl | 6 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 30 +- SSL/src/Catalogs/Организации/Help/ru.html | 2 +- .../Catalogs/Организации/ManagerModule.bsl | 8 +- SSL/src/Catalogs/Организации/Организации.mdo | 21 + .../Forms/ФормаЭлемента/Form.form | 3 + .../Forms/ФормаЭлемента/Form.form | 3 + .../ПапкиФайлов/Forms/ФормаЭлемента/Form.form | 164 + .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 154 +- SSL/src/Catalogs/ПапкиФайлов/Help/ru.html | 2 +- .../Catalogs/ПапкиФайлов/ManagerModule.bsl | 6 +- SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl | 2 +- .../Forms/ФормаВыбора/Help/ru.html | 6 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../ПапкиЭлектронныхПисем/Help/ru.html | 10 +- .../ПапкиЭлектронныхПисем/ManagerModule.bsl | 6 +- .../Help/ru.html | 2 +- .../Help/ru.html | 8 +- .../Пользователи/Forms/ФормаСписка/Form.form | 6 + .../Пользователи/Forms/ФормаСписка/Module.bsl | 18 +- .../Forms/ФормаЭлемента/Form.form | 92 +- .../Forms/ФормаЭлемента/Help/ru.html | 8 +- .../Forms/ФормаЭлемента/Module.bsl | 261 +- SSL/src/Catalogs/Пользователи/Help/ru.html | 4 +- .../Catalogs/Пользователи/ManagerModule.bsl | 6 +- .../Catalogs/Пользователи/ObjectModule.bsl | 4 + .../ManagerModule.bsl | 6 +- .../Forms/ПрименениеПравил/Help/ru.html | 4 +- .../Forms/ПрименениеПравил/Module.bsl | 4 + .../Forms/ФормаЭлемента/Form.form | 8 + .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../ManagerModule.bsl | 6 +- .../ManagerModule.bsl | 6 +- .../ПредопределенныеВариантыОтчетов.mdo | 21 + .../ManagerModule.bsl | 6 +- ...допределенныеВариантыОтчетовРасширений.mdo | 21 + .../Forms/ФормаЭлемента/Form.form | 13 - .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../ManagerModule.bsl | 68 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../ПроизводственныеКалендари/Help/ru.html | 2 +- .../ManagerModule.bsl | 64 +- .../Forms/ФормаВыбораГруппы/Help/ru.html | 2 +- .../Forms/ФормаГруппы/Help/ru.html | 2 +- .../Forms/ФормаСписка/Form.form | 241 +- .../Forms/ФормаСписка/Help/ru.html | 2 +- .../Forms/ФормаСписка/Module.bsl | 86 +- .../Forms/ФормаЭлемента/Form.form | 43 +- .../Forms/ФормаЭлемента/Help/ru.html | 6 +- .../Forms/ФормаЭлемента/Module.bsl | 78 +- .../Catalogs/ПрофилиГруппДоступа/Help/ru.html | 2 +- .../ПрофилиГруппДоступа/ManagerModule.bsl | 192 +- .../ПрофилиГруппДоступа/ObjectModule.bsl | 4 + .../ВыполнитьСейчас/CommandModule.bsl | 2 +- .../Forms/ПараметрыFTP/Help/ru.html | 2 +- .../Forms/ПолучателиРассылки/Form.form | 10 - .../Forms/ПолучателиРассылки/Help/ru.html | 2 +- .../Forms/ФормаВыбораГруппы/Help/ru.html | 2 +- .../Forms/ФормаГруппы/Help/ru.html | 2 +- .../Forms/ФормаСписка/Form.form | 12 +- .../Forms/ФормаСписка/Module.bsl | 4 + .../Forms/ФормаЭлемента/Form.form | 299 +- .../Forms/ФормаЭлемента/Help/ru.html | 6 +- .../Forms/ФормаЭлемента/Module.bsl | 409 +- SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html | 2 +- .../РассылкиОтчетов/ManagerModule.bsl | 6 +- .../Catalogs/РассылкиОтчетов/ObjectModule.bsl | 5 +- .../РассылкиОтчетов/РассылкиОтчетов.mdo | 2 +- .../Forms/ФормаВыбора/Help/ru.html | 2 +- .../Список/ExtInfo/ListSettings.dcss | 24 - .../Forms/ФормаСписка/Form.form | 14 +- .../Forms/ФормаСписка/Module.bsl | 118 + .../Forms/ФормаЭлемента/Form.form | 7 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 8 +- .../Catalogs/РолиИсполнителей/Help/ru.html | 4 +- .../РолиИсполнителей/ManagerModule.bsl | 6 +- .../РолиИсполнителей/ObjectModule.bsl | 2 +- .../Form.form | 5 + .../Module.bsl | 6 +- .../Forms/ДобавлениеСертификата/Form.form | 4 + .../Form.form | 2 + .../Form.form | 97 +- .../Help/ru.html | 2 +- .../Module.bsl | 183 +- .../Form.form | 6 +- .../Forms/ПередачаПараметров/Module.bsl | 4 + .../Help/ru.html | 2 +- .../Forms/ПодписаниеДанных/Form.form | 3 + .../Forms/ПодписаниеДанных/Help/ru.html | 2 +- .../Forms/ПодписаниеДанных/Module.bsl | 19 + .../Forms/ПроверкаСертификата/Form.form | 3 + .../Forms/ПроверкаСертификата/Module.bsl | 4 + .../Forms/ПросмотрДанных/Module.bsl | 4 + .../Forms/РасшифровкаДанных/Form.form | 3 + .../Forms/РасшифровкаДанных/Help/ru.html | 2 +- .../Forms/РасшифровкаДанных/Module.bsl | 4 + .../Forms/ФормаВыбора/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 4 +- .../Forms/ШифрованиеДанных/Form.form | 2 + .../Forms/ШифрованиеДанных/Help/ru.html | 2 +- .../Forms/ШифрованиеДанных/Module.bsl | 4 + .../Help/ru.html | 2 +- .../ManagerModule.bsl | 6 +- .../Templates/КомпонентаXMLDSIG/Template.bin | Bin 0 -> 2918567 bytes ...атыКлючейЭлектроннойПодписиИШифрования.mdo | 8 + .../ManagerModule.bsl | 6 +- .../СообщениеSMSПрисоединенныеФайлы.mdo | 37 + .../СообщенияСистемы/ManagerModule.bsl | 6 +- .../Forms/Классификатор/Help/ru.html | 2 +- SSL/src/Catalogs/СтраныМира/Help/ru.html | 2 +- SSL/src/Catalogs/СтраныМира/ManagerModule.bsl | 632 +- .../Templates/Классификатор/Template.txt | 7 +- .../ManagerModule.bsl | 6 +- .../Forms/ФормаЭлемента/Form.form | 24 + .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 27 +- .../СценарииОбменовДанными/Help/ru.html | 2 +- .../СценарииОбменовДанными/ManagerModule.bsl | 78 +- .../ManagerModule.bsl | 6 +- .../ТелефонныйЗвонокПрисоединенныеФайлы.mdo | 37 + .../Forms/ФормаЭлемента/Form.form | 2 + .../Forms/ФормаЭлемента/Help/ru.html | 10 +- .../Forms/ФормаЭлемента/Module.bsl | 12 +- .../Catalogs/ТомаХраненияФайлов/Help/ru.html | 2 +- .../ТомаХраненияФайлов/ManagerModule.bsl | 6 +- .../Forms/ФормаЭлемента/Form.form | 811 + .../Forms/ФормаЭлемента/Module.bsl | 171 + .../Help/ru.html | 15 + .../УчетныеЗаписиСинхронизацииФайлов.mdo | 185 + .../ПомощникНастройкиУчетнойЗаписи/Form.form | 143 +- .../ПомощникНастройкиУчетнойЗаписи/Module.bsl | 66 +- .../Forms/ФормаВыбора/Form.form | 7 +- .../Forms/ФормаЭлемента/Form.form | 3 + .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 4 + .../Help/ru.html | 2 +- .../ManagerModule.bsl | 65 +- .../УчетныеЗаписиЭлектроннойПочты.mdo | 2 +- .../Forms/ВопросПриИмпортеФайлов/Help/ru.html | 2 +- .../Файлы/Forms/ВыборКодировки/Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../Файлы/Forms/РедактируемыеФайлы/Form.form | 26 +- .../Forms/РедактируемыеФайлы/Help/ru.html | 2 +- .../Файлы/Forms/РедактируемыеФайлы/Module.bsl | 46 + .../Help/ru.html | 2 +- .../Forms/СписокЗанятыхСВопросом/Form.form | 26 +- .../Forms/СписокЗанятыхСВопросом/Help/ru.html | 2 +- .../Forms/СписокЗанятыхСВопросом/Module.bsl | 47 + SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form | 4522 ++-- .../Catalogs/Файлы/Forms/Файлы/Help/ru.html | 2 +- SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl | 295 +- .../Help/ru.html | 2 +- .../Forms/ФормаВозвратаФайла/Help/ru.html | 2 +- .../Файлы/Forms/ФормаВыбора/Help/ru.html | 2 +- .../ФормаВыбораРежимаОткрытия/Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../Forms/ФормаИмпортаПапки/Help/ru.html | 2 +- .../Forms/ФормаИмпортаФайлов/Help/ru.html | 2 +- .../Файлы/Forms/ФормаНового/Help/ru.html | 2 +- .../Файлы/Forms/ФормаОтчета/Help/ru.html | 2 +- .../Forms/ФормаПеретаскивания/Help/ru.html | 2 +- .../Файлы/Forms/ФормаПодбора/Help/ru.html | 2 +- .../Файлы/Forms/ФормаСписка/Form.form | 23 + .../Файлы/Forms/ФормаСписка/Help/ru.html | 2 +- .../Файлы/Forms/ФормаСписка/Module.bsl | 47 +- .../ФормаСпискаПрисоединенныхФайлов/Form.form | 2985 +-- .../Help/ru.html | 2 +- .../Module.bsl | 330 +- .../Forms/ФормаЭкспортаПапки/Help/ru.html | 2 +- .../Файлы/Forms/ФормаЭлемента/Form.form | 198 +- .../Файлы/Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Файлы/Forms/ФормаЭлемента/Module.bsl | 191 +- SSL/src/Catalogs/Файлы/Help/ru.html | 13 +- SSL/src/Catalogs/Файлы/ManagerModule.bsl | 6 +- SSL/src/Catalogs/Файлы/ObjectModule.bsl | 44 +- SSL/src/Catalogs/Файлы/Файлы.mdo | 5 +- .../Forms/ФормаВыбора/Help/ru.html | 2 +- .../ФормаМастераТабличныхВопросов/Form.form | 11 + .../Help/ru.html | 2 +- .../Forms/ФормаПростыхВопросов/Help/ru.html | 2 +- .../ШаблоныАнкет/Forms/ФормаСписка/Module.bsl | 9 +- .../Forms/ФормаЭлемента/Form.form | 2 + .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 4 +- SSL/src/Catalogs/ШаблоныАнкет/Help/ru.html | 2 +- .../Catalogs/ШаблоныАнкет/ManagerModule.bsl | 6 +- .../ManagerModule.bsl | 6 +- ...онноеПисьмоВходящееПрисоединенныеФайлы.mdo | 37 + .../ManagerModule.bsl | 6 +- ...нноеПисьмоИсходящееПрисоединенныеФайлы.mdo | 37 + .../Forms/ФормаВыбора/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Form.form | 4 + .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../ВопросыДляАнкетирования/Help/ru.html | 2 +- .../ВопросыДляАнкетирования/ManagerModule.bsl | 6 +- .../ВопросыДляАнкетирования.mdo | 2 +- .../Forms/ЗависимостьРеквизитов/Module.bsl | 8 +- .../ИзменениеНастройкиСвойства/Form.form | 6 + .../ИзменениеНастройкиСвойства/Module.bsl | 4 + .../Forms/РазблокированиеРеквизитов/Form.form | 6 + .../Forms/ФормаВыбора/Help/ru.html | 2 +- .../ExtInfo/ListSettings.dcss | 0 .../ExtInfo/ListSettings.dcss | 17 + .../Forms/ФормаЭлемента/Form.form | 2051 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 510 +- .../Help/ru.html | 2 +- .../ManagerModule.bsl | 6 +- .../ObjectModule.bsl | 51 + .../ДополнительныеРеквизитыИСведения.mdo | 4 +- .../ОбъектыАдресацииЗадач/Help/ru.html | 2 +- .../ОбъектыАдресацииЗадач/ManagerModule.bsl | 6 +- .../РазделыДатЗапретаИзменения.mdo | 1 - .../ОбластьДанныхВспомогательныеДанные.mdo | 8 + .../ОбластьДанныхОсновныеДанные.mdo | 32 + .../Запустить1СБухфон/Запустить1СБухфон.mdo | 11 +- .../Настройка1СБухфон/Настройка1СБухфон.mdo | 2 +- .../СозданиеНачальногоОбразаСФайлами.mdo | 2 +- .../СтруктураПодчиненности.mdo | 2 +- .../Help/ru.html | 2 +- .../Module.bsl | 51 +- SSL/src/CommonForms/АдреснаяКнига/Form.form | 5 + .../CommonForms/АдреснаяКнига/Help/ru.html | 2 +- .../АутентификацияВСервисе/Form.form | 6 +- .../Form.form | 327 + .../Help/ru.html | 17 + .../Module.bsl | 186 + .../БлокировкаРаботыСВнешнимиРесурсами.mdo | 15 + .../ВводЗначенийСпискомСФлажками/Form.form | 189 +- .../ВводЗначенийСпискомСФлажками/Help/ru.html | 4 +- .../ВводЗначенийСпискомСФлажками/Module.bsl | 35 +- .../ВключениеПроверкиКонтрагентов/Form.form | 306 +- .../ВключениеПроверкиКонтрагентов/Module.bsl | 79 +- SSL/src/CommonForms/Вопрос/Form.form | 1 + SSL/src/CommonForms/Вопрос/Module.bsl | 4 +- .../Help/ru.html | 2 +- .../CommonForms/ВходВОбластьДанных/Module.bsl | 2 +- SSL/src/CommonForms/ВыборДаты/Help/ru.html | 2 +- SSL/src/CommonForms/ВыборДаты/Module.bsl | 4 + .../ВыборИсполнителяБизнесПроцесса/Form.form | 2 + .../Help/ru.html | 2 +- SSL/src/CommonForms/ВыборКонтакта/Form.form | 9 +- .../CommonForms/ВыборКонтакта/Help/ru.html | 2 +- SSL/src/CommonForms/ВыборКонтакта/Module.bsl | 18 +- .../ВыборОбъектовМетаданных/Form.form | 1 - .../ВыборОбъектовМетаданных/Help/ru.html | 2 +- .../ВыборОбъектовМетаданных/Module.bsl | 6 +- .../ConditionalAppearance.dcssca | 22 + .../ВыборПолучателейСообщения/Form.form | 891 + .../ВыборПолучателейСообщения/Module.bsl | 196 + .../ВыборПолучателейСообщения.mdo | 10 + .../ВыборПутиКАрхивуФайловТомов/Help/ru.html | 2 +- .../ВыборТиповПользователей/Help/ru.html | 2 +- .../ВыборУзловПлановОбмена/Help/ru.html | 2 +- .../ВыборФорматаВложений/Help/ru.html | 4 +- .../CommonForms/ГруппыПользователей/Form.form | 2 + .../ГруппыПользователей/Help/ru.html | 2 +- .../CommonForms/ДлительнаяОперация/Form.form | 157 +- .../CommonForms/ДлительнаяОперация/Module.bsl | 178 +- .../Form.form | 3 +- .../Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../Module.bsl | 122 +- .../ДополнительныеОтчетыИОбработки/Form.form | 4 + .../ДополнительныеОтчетыИОбработки/Module.bsl | 59 +- .../Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../Module.bsl | 10 + .../МастерАнкетыПоРазделам/Module.bsl | 12 +- .../НапоминаниеПриРедактировании/Form.form | 2 + .../CommonForms/Настройка1СБухфон/Form.form | 120 +- .../Настройка1СБухфон/Help/ru.html | 18 +- .../CommonForms/Настройка1СБухфон/Module.bsl | 4 +- .../Настройка1СБухфон/Настройка1СБухфон.mdo | 2 +- .../НастройкаДоступаКСервисуMorpher/Form.form | 349 + .../Help/ru.html | 10 + .../Module.bsl | 103 + .../НастройкаДоступаКСервисуMorpher.mdo | 15 + .../НастройкаКомандПечати/Form.form | 4 + .../НастройкаКомандПечати/Help/ru.html | 13 + .../НастройкаКомандПечати/Module.bsl | 15 +- .../НастройкаКомандПечати.mdo | 5 + .../НастройкаМоихОтчетовИОбработок/Form.form | 44 +- .../НастройкаМоихОтчетовИОбработок/Module.bsl | 85 +- .../Help/ru.html | 2 +- .../НастройкаОтправкиSMS/Help/ru.html | 2 +- .../НастройкиВходаПользователей/Form.form | 22 + .../НастройкиВходаПользователей/Help/ru.html | 2 +- .../НастройкиВходаПользователей/Module.bsl | 68 + .../НастройкиПроверкиКонтрагентов/Form.form | 80 +- .../НастройкиПроверкиКонтрагентов/Module.bsl | 10 +- .../Help/ru.html | 2 +- .../Form.form | 42 +- .../Help/ru.html | 2 +- .../Module.bsl | 31 +- SSL/src/CommonForms/НовыйПароль/Form.form | 173 + SSL/src/CommonForms/НовыйПароль/Module.bsl | 29 + .../CommonForms/НовыйПароль/НовыйПароль.mdo | 10 + .../ОписаниеИзмененийПрограммы/Help/ru.html | 2 +- .../ОписаниеИзмененийПрограммы/Module.bsl | 13 +- SSL/src/CommonForms/ОтправкаSMS/Form.form | 28 + SSL/src/CommonForms/ОтправкаSMS/Help/ru.html | 2 +- .../CommonForms/ОтправкаСообщения/Form.form | 113 +- .../ОтправкаСообщения/Help/ru.html | 4 +- .../CommonForms/ОтправкаСообщения/Module.bsl | 241 +- .../Help/ru.html | 2 +- SSL/src/CommonForms/ПанельОтчетов/Form.form | 176 +- .../CommonForms/ПанельОтчетов/Help/ru.html | 4 +- SSL/src/CommonForms/ПанельОтчетов/Module.bsl | 146 +- .../Form.form | 4 + .../Help/ru.html | 2 +- .../ПараметрыПроксиСервера/Help/ru.html | 2 +- .../CommonForms/ПечатьДокументов/Form.form | 126 +- .../CommonForms/ПечатьДокументов/Help/ru.html | 8 +- .../CommonForms/ПечатьДокументов/Module.bsl | 172 +- .../ПодготовкаНовогоПисьма/Module.bsl | 40 +- .../ПоискИсполняемогоФайла1СБухфон/Form.form | 54 +- .../Help/ru.html | 4 +- .../ПоискИсполняемогоФайла1СБухфон.mdo | 2 +- .../ПоказателиВыделенныхЯчеек/Form.form | 16 - .../ПоказателиВыделенныхЯчеек/Help/ru.html | 4 +- .../ПоказателиВыделенныхЯчеек/Module.bsl | 37 +- SSL/src/CommonForms/ПраваДоступа/Form.form | 2 + SSL/src/CommonForms/ПраваДоступа/Help/ru.html | 2 +- SSL/src/CommonForms/ПраваДоступа/Module.bsl | 18 +- .../ПраваДоступаУпрощенно/Help/ru.html | 2 +- .../ПраваДоступаУпрощенно/Module.bsl | 14 +- .../ПредупреждениеБезопасности/Form.form | 1785 ++ .../ПредупреждениеБезопасности/Module.bsl | 156 + .../ПредупреждениеБезопасности.mdo | 10 + .../Module.bsl | 10 +- .../CommonForms/ПрисоединенныеФайлы/Form.form | 3028 +-- .../ПрисоединенныеФайлы/Help/ru.html | 25 +- .../ПрисоединенныеФайлы/Module.bsl | 416 +- .../CommonForms/ПрисоединенныйФайл/Form.form | 192 +- .../ПрисоединенныйФайл/Help/ru.html | 10 +- .../CommonForms/ПрисоединенныйФайл/Module.bsl | 111 +- .../Form.form | 10 +- .../Help/ru.html | 2 +- .../Module.bsl | 18 +- .../Help/ru.html | 6 +- .../Module.bsl | 2 +- .../Сервис1СКонтрагентНеПодключен}/Form.form | 314 +- .../Сервис1СКонтрагентНеПодключен/Module.bsl | 25 + .../Сервис1СКонтрагентНеПодключен.mdo | 10 + SSL/src/CommonForms/Сертификат/Form.form | 4 + SSL/src/CommonForms/Сертификат/Help/ru.html | 2 +- .../CommonForms/СинхронизацияДанных/Form.form | 63 +- .../СинхронизацияДанных/Help/ru.html | 2 +- .../СинхронизацияДанных/Module.bsl | 46 +- SSL/src/CommonForms/Склонения/Form.form | 945 + SSL/src/CommonForms/Склонения/Help/ru.html | 8 + SSL/src/CommonForms/Склонения/Module.bsl | 149 + SSL/src/CommonForms/Склонения/Склонения.mdo | 15 + SSL/src/CommonForms/СменаПароля/Form.form | 63 +- SSL/src/CommonForms/СменаПароля/Help/ru.html | 2 +- SSL/src/CommonForms/СменаПароля/Module.bsl | 263 +- .../Form.form | 23 + .../Help/ru.html | 2 +- .../Module.bsl | 180 +- .../СозданиеРезервнойКопии/Form.form | 9 +- .../СозданиеРезервнойКопии/Module.bsl | 4 + .../Form.form | 18 +- .../Help/ru.html | 2 +- .../Module.bsl | 45 +- .../СохранениеПечатнойФормы/Form.form | 3 +- .../СохранениеПечатнойФормы/Help/ru.html | 2 +- .../СтруктураПодчиненности/Form.form | 8 +- .../СтруктураПодчиненности/Help/ru.html | 6 +- .../СтруктураПодчиненности/Module.bsl | 2 +- .../СтруктураПодчиненности.mdo | 2 +- .../УстановленныеРасширения/Form.form | 2 + .../УстановленныеРасширения/Help/ru.html | 12 +- .../УстановленныеРасширения/Module.bsl | 114 +- .../УточнениеКонтактов/Help/ru.html | 2 +- .../CommonForms/УточнениеКонтактов/Module.bsl | 4 +- SSL/src/CommonForms/ФайлыВТоме/Help/ru.html | 2 +- .../CommonForms/ФормаВариантаОтчета/Form.form | 47 + .../ФормаВариантаОтчета/Module.bsl | 23 +- .../CommonForms/ФормаНастроекОтчета/Form.form | 354 +- .../ФормаНастроекОтчета/Help/ru.html | 13 +- .../ФормаНастроекОтчета/Module.bsl | 905 +- SSL/src/CommonForms/ФормаОтчета/Form.form | 25 +- SSL/src/CommonForms/ФормаОтчета/Help/ru.html | 21 +- SSL/src/CommonForms/ФормаОтчета/Module.bsl | 732 +- SSL/src/CommonForms/ФормаПоиска/Help/ru.html | 23 + SSL/src/CommonForms/ФормаПоиска/Module.bsl | 11 +- .../CommonForms/ФормаПоиска/ФормаПоиска.mdo | 5 + .../CommonForms/ЭлектроннаяПодпись/Form.form | 140 + .../ЭлектроннаяПодпись/Help/ru.html | 2 +- .../Module.bsl | 4 +- .../Module.bsl | 152 +- .../Module.bsl | 21 +- .../АдресныйКлассификатор/Module.bsl | 22 +- .../Module.bsl | 2 +- .../Module.bsl | 8 - .../АдресныйКлассификаторКлиент/Module.bsl | 40 +- .../АдресныйКлассификаторСлужебный/Module.bsl | 1989 +- .../АнализЖурналаРегистрацииКлиент/Module.bsl | 131 + .../АнализЖурналаРегистрацииКлиент.mdo | 10 + .../Module.bsl | 18 +- .../CommonModules/Анкетирование/Module.bsl | 63 +- .../АнкетированиеКлиентСервер/Module.bsl | 10 +- .../БанкиСлужебныйВМоделиСервиса/Module.bsl | 6 +- .../Module.bsl | 597 +- .../БизнесПроцессыИЗадачиКлиент/Module.bsl | 2 +- .../Module.bsl | 4 + .../Module.bsl | 6 +- .../БизнесПроцессыИЗадачиСервер/Module.bsl | 627 +- .../CommonModules/ВариантыОтчетов/Module.bsl | 1629 +- .../ВариантыОтчетовКлиент/Module.bsl | 33 +- .../ВариантыОтчетовКлиентСервер/Module.bsl | 16 +- .../Module.bsl | 103 +- .../ВариантыОтчетовПовтИсп/Module.bsl | 29 +- .../ВерсионированиеОбъектов/Module.bsl | 1396 +- .../Module.bsl | 35 +- .../ВерсионированиеОбъектовСобытия/Module.bsl | 25 +- .../CommonModules/Взаимодействия/Module.bsl | 177 +- .../ВзаимодействияВызовСервера/Module.bsl | 28 +- .../ВзаимодействияКлиент/Module.bsl | 145 +- .../ВзаимодействияКлиентСервер/Module.bsl | 4 +- .../CommonModules/ГрафикиРаботы/Module.bsl | 102 +- .../ДанныеЕдиныхГосРеестров/Module.bsl | 485 +- .../ДатыЗапретаИзменения/Module.bsl | 6 + .../Module.bsl | 3 + .../ДатыЗапретаИзмененияСлужебный/Module.bsl | 185 +- .../ДлительныеОперации/Module.bsl | 582 +- .../ДлительныеОперацииВызовСервера/Module.bsl | 20 + .../ДлительныеОперацииВызовСервера.mdo | 10 + .../ДлительныеОперацииГлобальный/Module.bsl | 161 + .../ДлительныеОперацииГлобальный.mdo | 11 + .../ДлительныеОперацииКлиент/Module.bsl | 201 +- .../Module.bsl | 17 - .../ДополнительныеОтчетыИОбработки/Module.bsl | 623 +- .../Module.bsl | 30 +- .../Module.bsl | 2 +- .../Module.bsl | 4 +- .../Module.bsl | 44 +- .../Module.bsl | 317 +- .../Module.bsl | 2 +- .../ЖурналРегистрации/Module.bsl | 36 +- .../ЖурналРегистрацииКлиент/Module.bsl | 2 +- .../ЗагрузкаДанныхИзФайла/Module.bsl | 68 + .../ЗагрузкаДанныхИзФайла.mdo | 11 + .../ЗагрузкаДанныхИзФайлаКлиент/Module.bsl | 23 +- .../Module.bsl | 80 + .../ЗагрузкаДанныхИзФайлаКлиентСервер.mdo | 12 + .../ЗаметкиПользователяСлужебный/Module.bsl | 7 +- .../ЗащитаПерсональныхДанных/Module.bsl | 65 +- .../ЗащитаПерсональныхДанныхКлиент/Module.bsl | 4 +- .../Интеграция1СБухфон/Module.bsl | 30 +- .../Интеграция1СБухфонВызовСервера/Module.bsl | 4 +- .../Интеграция1СБухфонКлиент/Module.bsl | 16 +- .../ИнтеграцияСтандартныхПодсистем/Module.bsl | 125 +- .../Module.bsl | 2 +- .../ИнформацияПриЗапуске/Module.bsl | 251 +- .../КалендарныеГрафики/Module.bsl | 125 +- .../Module.bsl | 25 +- .../Module.bsl | 29 +- .../Module.bsl | 6 +- .../Module.bsl | 190 +- .../Module.bsl | 90 +- .../ОбменДаннымиXDTOСервер/Module.bsl | 2540 +- .../ОбменДаннымиВнешнееСоединение/Module.bsl | 75 +- .../ОбменДаннымиВызовСервера/Module.bsl | 90 +- .../ОбменДаннымиКлиент/Module.bsl | 148 +- .../ОбменДаннымиКлиентСервер/Module.bsl | 49 +- .../ОбменДаннымиПереопределяемый/Module.bsl | 7 +- .../ОбменДаннымиПовтИсп/Module.bsl | 269 +- .../ОбменДаннымиСервер/Module.bsl | 6808 ++--- .../ОбменДаннымиСлужебный/Module.bsl | 112 +- .../ОбменДаннымиСобытия/Module.bsl | 415 +- .../CommonModules/ОбменСообщениями/Module.bsl | 11 +- .../ОбменСообщениямиВнутренний/Module.bsl | 34 +- .../ОбменСообщениямиКлиент/Module.bsl | 6 +- .../ОбновлениеИнформационнойБазы/Module.bsl | 2837 ++- .../Module.bsl | 2 +- .../Module.bsl | 62 +- .../Module.bsl | 1873 +- .../Module.bsl | 482 +- .../Module.bsl | 4 + .../ОбновлениеКонфигурации/Module.bsl | 18 + .../Module.bsl | 0 .../ОбновлениеКонфигурацииГлобальный.mdo} | 4 +- .../ОбновлениеКонфигурацииКлиент/Module.bsl | 37 +- .../CommonModules/ОбщегоНазначения/Module.bsl | 647 +- .../ОбщегоНазначенияКлиент/Module.bsl | 20 +- .../Module.bsl | 2 + .../ОбщегоНазначенияКлиентСервер/Module.bsl | 82 +- .../Module.bsl | 4 + .../ОбщегоНазначенияПовтИсп/Module.bsl | 17 +- .../ОтправкаSMSКлиент/Module.bsl | 17 +- .../ОтправкаSMSКлиент/ОтправкаSMSКлиент.mdo | 1 + .../ОтправкаSMSКлиентПереопределяемый.mdo | 1 + SSL/src/CommonModules/ОтчетыКлиент/Module.bsl | 139 +- .../ОтчетыКлиентПереопределяемый/Module.bsl | 23 +- .../ОтчетыКлиентСервер/Module.bsl | 1755 +- .../ОтчетыПереопределяемый/Module.bsl | 2 +- SSL/src/CommonModules/ОтчетыСервер/Module.bsl | 465 +- .../Module.bsl | 96 +- .../ОценкаПроизводительности.mdo | 11 + .../Module.bsl | 69 + .../ОценкаПроизводительностиВызовСервера.mdo} | 7 +- .../Module.bsl | 44 - .../Module.bsl | 4 +- .../ОценкаПроизводительностиГлобальный.mdo} | 4 +- .../ОценкаПроизводительностиКлиент/Module.bsl | 7 +- .../Module.bsl | 60 +- .../Module.bsl | 53 + .../ОценкаПроизводительностиПовтИсп.mdo} | 9 +- .../Module.bsl | 156 +- .../CommonModules/ОчередьЗаданий/Module.bsl | 30 +- .../ОчередьЗаданийСлужебный/Module.bsl | 849 +- .../ПерепрефиксацияОбъектов/Module.bsl | 40 +- .../ПоискИУдалениеДублей/Module.bsl | 106 +- .../ПоискИУдалениеДублейКлиент/Module.bsl | 3 +- .../ПолнотекстовыйПоискСервер/Module.bsl | 43 +- .../ПолучениеФайловИзИнтернета/Module.bsl | 6 +- .../Module.bsl | 3 +- .../Module.bsl | 28 +- SSL/src/CommonModules/Пользователи/Module.bsl | 92 +- .../ПользователиКлиентСервер/Module.bsl | 11 +- .../ПользователиПереопределяемый/Module.bsl | 45 + .../ПользователиСлужебный/Module.bsl | 2014 +- .../Module.bsl | 197 +- .../ПользователиСлужебныйКлиент/Module.bsl | 93 +- .../Module.bsl | 2 +- .../ПользователиСлужебныйПовтИсп/Module.bsl | 156 +- .../ПоставляемыеДанные/Module.bsl | 35 +- .../ПрисоединенныеФайлы/Module.bsl | 290 +- .../ПрисоединенныеФайлыКлиент/Module.bsl | 72 +- .../Module.bsl | 25 +- .../ПрисоединенныеФайлыСлужебный/Module.bsl | 309 +- .../Module.bsl | 20 +- .../Module.bsl | 65 +- .../ПроверкаКонтрагентов/Module.bsl | 2592 +- .../Module.bsl | 101 +- .../Module.bsl | 2 +- .../ПроверкаКонтрагентовКлиент/Module.bsl | 406 +- .../Module.bsl | 457 +- .../Module.bsl | 102 +- .../Module.bsl | 1 + .../РаботаВБезопасномРежиме/Module.bsl | 80 +- .../Module.bsl | 246 +- .../РаботаВМоделиСервиса/Module.bsl | 1890 +- .../РаботаВМоделиСервисаКлиент/Module.bsl | 2 +- .../CommonModules/РаботаСБанками/Module.bsl | 494 +- .../Module.bsl | 11 +- .../Module.bsl | 16 +- .../Module.bsl | 180 +- .../РаботаСКурсамиВалют/Module.bsl | 481 +- .../Module.bsl | 6 - .../Module.bsl | 2 +- .../РаботаСПочтовымиСообщениями/Module.bsl | 72 +- .../Module.bsl | 12 +- .../Module.bsl | 17 +- .../Module.bsl | 21 + ...овымиСообщениямиКлиентПереопределяемый.mdo | 10 + .../Module.bsl | 61 + ...аСПочтовымиСообщениямиПереопределяемый.mdo | 11 + .../Module.bsl | 50 +- .../CommonModules/РаботаСФайлами/Module.bsl | 2 +- .../РаботаСФайламиКлиент/Module.bsl | 72 +- .../РаботаСФайламиКлиентСервер/Module.bsl | 100 +- .../РаботаСФайламиПереопределяемый/Module.bsl | 25 +- .../РаботаСФайламиСлужебный/Module.bsl | 201 +- .../Module.bsl | 1223 +- .../РаботаСФайламиСлужебныйКлиент/Module.bsl | 194 +- .../CommonModules/РассылкаОтчетов/Module.bsl | 433 +- .../РассылкаОтчетовВызовСервера/Module.bsl | 7 +- .../РассылкаОтчетовКлиент/Module.bsl | 3 +- .../Module.bsl | 87 + .../РассылкаОтчетовКлиентПереопределяемый.mdo | 10 + .../РегламентныеЗаданияКлиент/Module.bsl | 36 + .../РегламентныеЗаданияКлиент.mdo | 10 + .../Module.bsl | 36 +- .../РегламентныеЗаданияСервер/Module.bsl | 129 +- .../РегламентныеЗаданияСлужебный/Module.bsl | 492 +- .../Module.bsl | 9 +- .../Module.bsl | 0 .../РезервноеКопированиеИБГлобальный.mdo} | 4 +- .../РезервноеКопированиеИБКлиент/Module.bsl | 67 +- .../РезервноеКопированиеИБСервер/Module.bsl | 11 +- .../СклонениеПредставленийОбъектов/Module.bsl | 689 + .../СклонениеПредставленийОбъектов.mdo | 11 + .../Module.bsl | 27 + ...нениеПредставленийОбъектовВызовСервера.mdo | 10 + .../Module.bsl | 90 + .../СклонениеПредставленийОбъектовКлиент.mdo | 10 + .../Module.bsl | 32 + ...нениеПредставленийОбъектовКлиентСервер.mdo | 12 + SSL/src/CommonModules/СоединенияИБ/Module.bsl | 7 +- .../СоединенияИБВызовСервера/Module.bsl | 22 +- .../СоединенияИБГлобальный/Module.bsl | 42 +- .../СоединенияИБКлиент/Module.bsl | 61 +- .../СоединенияИБКлиентСервер/Module.bsl | 8 +- .../СоединенияИБПереопределяемый/Module.bsl | 18 + .../СоединенияИБПереопределяемый.mdo | 11 + .../СообщенияВМоделиСервиса/Module.bsl | 10 +- .../Module.bsl | 64 +- .../Module.bsl | 49 +- .../Module.bsl | 48 +- .../Module.bsl | 6 + .../СтандартныеПодсистемыКлиент/Module.bsl | 367 +- .../Module.bsl | 20 +- .../Module.bsl | 254 +- .../СтандартныеПодсистемыПовтИсп/Module.bsl | 367 +- .../СтандартныеПодсистемыСервер/Module.bsl | 1048 +- .../СтроковыеФункцииКлиентСервер/Module.bsl | 19 +- .../Module.bsl | 4 +- .../ТекущиеДелаПереопределяемый/Module.bsl | 2 +- .../ТекущиеДелаСервер/Module.bsl | 47 + .../ТекущиеДелаСлужебный/Module.bsl | 44 +- .../CommonModules/ТрансляцияXDTO/Module.bsl | 2 +- .../ТрансляцияXDTOСлужебный/Module.bsl | 172 +- .../Module.bsl | 30 + .../УправлениеДоступом/Module.bsl | 13 +- .../УправлениеДоступомСлужебный/Module.bsl | 902 +- .../Module.bsl | 106 +- .../Module.bsl | 31 +- .../Module.bsl | 10 +- .../Module.bsl | 1471 +- .../Module.bsl | 605 +- .../Module.bsl | 287 +- .../Module.bsl | 1055 +- .../Module.bsl | 220 +- .../УправлениеПечатью/Module.bsl | 142 +- .../УправлениеПечатьюMSWordКлиент/Module.bsl | 19 +- .../Module.bsl | 11 +- .../УправлениеПечатьюВызовСервера/Module.bsl | 10 - .../УправлениеПечатьюКлиент/Module.bsl | 33 +- .../Module.bsl | 41 + .../Module.bsl | 5 +- .../УправлениеСвойствами/Module.bsl | 73 +- .../УправлениеСвойствамиКлиент/Module.bsl | 18 +- .../Module.bsl | 8 +- .../УправлениеСвойствамиСлужебный/Module.bsl | 195 +- .../УправлениеЭлектроннойПочтой/Module.bsl | 91 +- .../Module.bsl | 37 - .../CommonModules/ФайловыеФункции/Module.bsl | 25 + .../ФайловыеФункцииСлужебный/Module.bsl | 2507 +- .../Module.bsl | 21 + .../Module.bsl | 17 +- .../ФайловыеФункцииСлужебныйКлиент/Module.bsl | 211 +- .../Module.bsl | 71 - .../Module.bsl | 54 +- .../CommonModules/ЦентрМониторинга/Module.bsl | 6 +- .../Module.bsl | 20 - .../ЦентрМониторингаСлужебный/Module.bsl | 456 +- .../ЭлектроннаяПодпись/Module.bsl | 433 +- .../ЭлектроннаяПодписьКлиент/Module.bsl | 37 +- .../ЭлектроннаяПодписьКлиентСервер/Module.bsl | 39 +- .../ЭлектроннаяПодписьСлужебный/Module.bsl | 371 +- .../Module.bsl | 72 +- .../Module.bsl | 939 +- .../Module.bsl | 131 +- .../Module.bsl | 34 + .../GoogleMaps.mdo} | 6 +- SSL/src/CommonPictures/GoogleMaps/Picture.png | Bin 0 -> 1419 bytes .../ВосклицательныйЗнакКрасный/Picture.png | Bin 0 -> 357 bytes .../ВосклицательныйЗнакКрасный.mdo | 8 + .../ВставитьИзБуфераОбмена/Picture.png | Bin 0 -> 1348 bytes .../ВставитьИзБуфераОбмена.mdo | 8 + .../ДобавитьВложенный/Picture.png | Bin 452 -> 0 bytes .../ДобавитьРодительский/Picture.png | Bin 457 -> 621 bytes .../ДосьеУвеличениеПоказателя/Picture.png | Bin 0 -> 581 bytes .../ДосьеУвеличениеПоказателя.mdo | 8 + .../ДосьеУменьшениеПоказателя/Picture.png | Bin 0 -> 545 bytes .../ДосьеУменьшениеПоказателя.mdo | 8 + .../Запустить1СБухфонТакси/Picture.png | Bin 6170 -> 0 bytes .../Запустить1СБухфонТакси.mdo | 8 - .../ИсторияИзменений/Picture.png | Bin 0 -> 1576 bytes .../ИсторияИзменений.mdo} | 6 +- .../Консультант1СБухфон/Picture.png | Bin 142743 -> 0 bytes .../Логотип1СБухфон/Picture.png | Bin 6081 -> 0 bytes .../ПапкаОблачногоСервиса/Picture.png | Bin 0 -> 15546 bytes .../ПапкаОблачногоСервиса.mdo | 8 + SSL/src/CommonPictures/Папки/Picture.png | Bin 731 -> 1025 bytes .../Сервис1СКонтрагент/Picture.png | Bin 0 -> 1189 bytes .../Сервис1СКонтрагент.mdo} | 6 +- .../СкопироватьВБуферОбмена/Picture.png | Bin 0 -> 1299 bytes .../СкопироватьВБуферОбмена.mdo | 8 + .../CommonPictures/ЯндексКарты/Picture.png | Bin 0 -> 1382 bytes .../ЯндексКарты/ЯндексКарты.mdo | 8 + .../ru.html | 2 +- .../_files/12.png | Bin 0 -> 30639 bytes .../_files/13.png | Bin 0 -> 30104 bytes .../_files/23.png | Bin 0 -> 87832 bytes .../_files/24.png | Bin 0 -> 86009 bytes .../_files/Книга покупок.jpg | Bin 0 -> 165000 bytes .../_files/Книга покупок1.jpg | Bin 0 -> 152589 bytes .../_files/Поступленние товаров и услуг.png | Bin 0 -> 62332 bytes .../_files/Предложение. Полные права.jpg | Bin 0 -> 58675 bytes .../_files/Предложение.png | Bin 0 -> 30120 bytes .../_files/Проверка в документе по кнопке.png | Bin 0 -> 73872 bytes .../_files/Проверка контрагента по кнопке.png | Bin 0 -> 73721 bytes .../ИнструкцияПоПроверкеКонтрагентов/ru.html | 48 +- .../КомпонентаПечатиQRКода/Template.bin | Bin 406605 -> 406732 bytes .../Template.dcs | 150 + SSL/src/Configuration/Configuration.mdo | 125 +- .../ManagedApplicationModule.bsl | 4 + .../OrdinaryApplicationModule.bsl | 4 + .../Configuration/ParentConfigurations.bin | 2 +- .../ДанныеДляОтложенногоОбновления.mdo | 20 + .../ValueManagerModule.bsl | 4 + .../ValueManagerModule.bsl | 24 + .../ValueManagerModule.bsl | 4 + .../ИспользоватьИнтеграцию1СБухфон.mdo | 2 +- .../ValueManagerModule.bsl | 2 +- .../ИспользоватьПроверкуКонтрагентов.mdo | 5 +- .../ИспользоватьСервисСклоненияMorpher.mdo | 20 + .../ЛогинДоступаКСервисуMorpher.mdo | 21 + .../ValueManagerModule.bsl | 4 + ...ОбновлениеВГлавномУзлеЗавершеноУспешно.mdo | 20 + .../ОтложенноеОбновлениеЗавершеноУспешно.mdo | 20 + .../ПараметрыАдресногоКлассификатора.mdo | 20 + ...етрыБлокировкиРаботыСВнешнимиРесурсами.mdo | 19 + .../ValueManagerModule.bsl | 380 +- .../СведенияОБлокируемыхОбъектах.mdo | 19 + .../СинхронизироватьФайлы.mdo | 19 + .../Help/ru.html | 2 +- .../Forms/АктивныеПользователи/Module.bsl | 10 +- .../АктивныеПользователи/Help/ru.html | 2 +- .../Form.form | 4 + .../Module.bsl | 18 +- .../Form.form | 2 + .../Help/ru.html | 2 +- .../Forms/ВводАдреса/Form.form | 701 +- .../Forms/ВводАдреса/Help/ru.html | 21 +- .../Forms/ВводАдреса/Module.bsl | 706 +- .../Forms/ВводТелефона/Form.form | 952 +- .../Forms/ВводТелефона/Help/ru.html | 6 +- .../Forms/ВводТелефона/Module.bsl | 186 +- .../Help/ru.html | 11 +- .../Forms/ВыборАдресаПоУровню/Help/ru.html | 2 +- .../Forms/ВыборАдресаПоУровню/Module.bsl | 4 +- .../Forms/ВыборДома/Form.form | 697 + .../Forms/ВыборДома/Module.bsl | 79 + .../Forms/ВыборУлицы/Form.form | 2 + .../Forms/ВыборУлицы/Help/ru.html | 2 +- .../Forms/ВыборУлицы/Module.bsl | 2 +- .../ИсторияКонтактнойИнформации/Form.form | 1002 + .../ИсторияКонтактнойИнформации/Help/ru.html | 9 + .../ИсторияКонтактнойИнформации/Module.bsl | 312 + .../Forms/НаселенныйПунктАдреса/Form.form | 7 +- .../Forms/НаселенныйПунктАдреса/Help/ru.html | 2 +- .../Forms/НаселенныйПунктАдреса/Module.bsl | 21 +- .../ВводКонтактнойИнформации/Help/ru.html | 6 +- .../ManagerModule.bsl | 15 +- .../ВводКонтактнойИнформации.mdo | 51 +- .../Forms/Форма/Form.form | 34 + .../Forms/Форма/Module.bsl | 69 +- .../ВыполнениеОбменаДанными/ManagerModule.bsl | 6 +- .../Forms/ВыборВидаОбъектов/Module.bsl | 47 +- .../ДополнительныеПараметры/Help/ru.html | 15 +- .../Forms/РедактированиеФормулы/Form.form | 3 + .../Forms/РедактированиеФормулы/Help/ru.html | 21 +- .../Forms/Форма/Form.form | 17 +- .../Forms/Форма/Module.bsl | 124 +- .../ГрупповоеИзменениеРеквизитов/Help/ru.html | 16 +- .../ObjectModule.bsl | 66 +- .../Forms/ЖурналРегистрации/Form.form | 2 + .../Forms/ЖурналРегистрации/Module.bsl | 42 +- .../Forms/РедакторСоставаСвойства/Module.bsl | 19 +- .../ЖурналРегистрации/Forms/Событие/Form.form | 6 + .../Forms/Событие/Help/ru.html | 2 +- .../ЖурналРегистрации/Help/ru.html | 4 +- .../Forms/ЗагрузкаДанныхИзФайла/Form.form | 268 +- .../Forms/ЗагрузкаДанныхИзФайла/Help/ru.html | 40 + .../Forms/ЗагрузкаДанныхИзФайла/Module.bsl | 781 +- .../РазрешенияНеоднозначностей/Module.bsl | 6 +- .../Forms/РасширениеФайла/Form.form | 18 + .../Forms/РасширениеФайла/Module.bsl | 6 +- .../Forms/РедактированиеБланка/Form.form | 105 + .../Forms/РедактированиеБланка/Module.bsl | 22 +- .../ЗагрузкаДанныхИзФайла/Help/ru.html | 6 + .../ЗагрузкаДанныхИзФайла/ManagerModule.bsl | 904 +- .../Templates/ПростойШаблон/Template.mxlx | 51 +- .../ЗагрузкаДанныхИзФайла.mdo | 10 + .../ЗагрузкаКурсовВалют/Forms/Форма/Form.form | 26 +- .../ЗагрузкаКурсовВалют/Help/ru.html | 2 +- .../ЗагрузкаКурсовВалют/ObjectModule.bsl | 37 - .../ObjectModule.bsl | 17 +- .../Forms/ЗаменаЭлементов/Form.form | 4 + .../Forms/ЗаменаЭлементов/Help/ru.html | 2 +- .../Forms/ЗаменаЭлементов/Module.bsl | 27 +- .../МногострочноеПредупреждение/Module.bsl | 44 - .../Forms/ОбъединениеЭлементов/Form.form | 5 + .../Forms/ОбъединениеЭлементов/Help/ru.html | 2 +- .../Forms/ОбъединениеЭлементов/Module.bsl | 23 +- .../ЗаменаИОбъединениеЭлементов.mdo | 9 - .../Forms/Форма/Form.form | 2 + .../Forms/Форма/Module.bsl | 26 +- .../ЗащитаПерсональныхДанных/Help/ru.html | 2 +- .../ИнструментыРазработчика/CommandModule.bsl | 10 + .../Forms/Форма/Form.form | 203 + .../Forms/Форма/Module.bsl | 75 + ...ментыРазработчикаПроверкаКонтрагентов.mdo} | 10 +- .../РедактированиеПериодаИОтбора/Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../Forms/СоставВыгрузки/Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../ObjectModule.bsl | 7 +- .../Forms/Форма/Form.form | 10 +- .../Forms/Форма/Module.bsl | 75 +- .../ИнформацияПриЗапуске/Help/ru.html | 2 +- .../Templates/Описатель/Template.mxlx | 308 +- .../Forms/Форма/Form.form | 5 +- .../КартаМаршрутаБизнесПроцесса/Help/ru.html | 2 +- .../КонвертацияОбъектовXDTO/ObjectModule.bsl | 12 +- .../ObjectModule.bsl | 9764 ++++---- .../ObjectModule.bsl | 27 + .../Form.form | 33 +- .../Module.bsl | 35 +- .../Help/ru.html | 2 +- .../УсловияРаспространенияОбновлений/ru.html | 2 +- .../ЗавершениеЗапросаРазрешений/Module.bsl | 4 + .../ИнициализацияЗапросаРазрешений/Module.bsl | 4 + .../Form.form | 10 + .../Help/ru.html | 2 +- .../Module.bsl | 6 +- .../Form.form | 78 +- .../Help/ru.html | 6 +- .../Module.bsl | 35 +- .../Help/ru.html | 2 +- .../ObjectModule.bsl | 646 +- .../НастройкаРезервногоКопирования/Form.form | 28 +- .../НастройкаРезервногоКопирования/Module.bsl | 10 +- .../Form.form | 2 +- .../Help/ru.html | 6 +- .../Forms/НастройкаБезИнтервалов/Module.bsl | 4 + .../Forms/НастройкаСИнтервалами/Form.form | 1 + .../Forms/НастройкаСИнтервалами/Module.bsl | 4 + .../Forms/ВыборНастроек/Form.form | 5 +- .../Forms/ВыборНастроек/Help/ru.html | 2 +- .../Forms/ВыборПользователей/Form.form | 1 + .../Forms/ВыборПользователей/Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../Forms/НастройкиПользователей/Form.form | 21 +- .../Forms/НастройкиПользователей/Help/ru.html | 2 +- .../Forms/НастройкиПользователей/Module.bsl | 9 + .../ОчисткаНастроекПользователей/Help/ru.html | 2 +- .../НастройкиПользователей/Help/ru.html | 2 +- .../НастройкиПользователей/ManagerModule.bsl | 59 +- .../ru.html | 6 +- .../ПорядокОбновленияДляФайловойБазы/ru.html | 2 +- .../Help/ru.html | 2 +- .../Module.bsl | 18 +- .../Forms/ИсторияВыполнения/Module.bsl | 2 +- .../Forms/Форма/Form.form | 2 + .../Forms/Форма/Module.bsl | 113 +- .../ОценкаПроизводительности/Help/ru.html | 2 +- .../ОценкаПроизводительности/ObjectModule.bsl | 14 +- .../НастройкиПользователейИПрав/Form.form | 44 - .../НастройкиПользователейИПрав/Help/ru.html | 2 +- .../НастройкиПользователейИПрав/Module.bsl | 44 +- .../Forms/НастройкиРаботыСФайлами/Form.form | 326 +- .../НастройкиРаботыСФайлами/Help/ru.html | 6 +- .../Forms/НастройкиРаботыСФайлами/Module.bsl | 71 +- .../НастройкиСинхронизацииДанных/Form.form | 102 +- .../НастройкиСинхронизацииДанных/Help/ru.html | 2 +- .../НастройкиСинхронизацииДанных/Module.bsl | 56 +- .../Forms/ОбщиеНастройки/Form.form | 369 +- .../Forms/ОбщиеНастройки/Help/ru.html | 17 +- .../Forms/ОбщиеНастройки/Module.bsl | 78 +- .../Forms/Органайзер/Form.form | 98 +- .../Forms/Органайзер/Help/ru.html | 2 +- .../Forms/Органайзер/Module.bsl | 57 +- .../ПечатныеФормыОтчетыИОбработки/Form.form | 433 +- .../Help/ru.html | 5 +- .../ПечатныеФормыОтчетыИОбработки/Module.bsl | 38 +- .../Forms/ПоддержкаИОбслуживание/Form.form | 829 +- .../Forms/ПоддержкаИОбслуживание/Help/ru.html | 4 +- .../Forms/ПоддержкаИОбслуживание/Module.bsl | 288 +- .../Forms/ПоискИУстановкаОбновлений/Form.form | 48 - .../ПоискИУстановкаОбновлений/Help/ru.html | 2 +- .../ПоискИУстановкаОбновлений/Module.bsl | 45 +- .../Form.form | 72 - .../Help/ru.html | 2 +- .../Module.bsl | 123 +- .../ПанельАдминистрированияБСП/Help/ru.html | 2 +- .../ПереносФайловВТома/Forms/Форма/Module.bsl | 24 +- .../ПереносФайловВТома/Help/ru.html | 2 +- .../Forms/ОбластьПоискаДублей/Form.form | 21 + .../Forms/ОбластьПоискаДублей/Module.bsl | 22 +- .../Forms/ПоискДублей/Form.form | 96 +- .../Forms/ПоискДублей/Module.bsl | 87 +- .../Forms/ПравилаОтбора/Help/ru.html | 2 +- .../Forms/ПравилаОтбора/Module.bsl | 32 +- .../Forms/ПравилаПоиска/Form.form | 4 - .../Forms/ПравилаПоиска/Module.bsl | 10 +- .../ПоискИУдалениеДублей/Help/ru.html | 2 +- .../ПоискИУдалениеДублей/ObjectModule.bsl | 572 +- .../Forms/НастройкаРасписания/Help/ru.html | 2 +- .../Forms/НастройкаРезервнойКопии/Form.form | 5 + .../НастройкаРезервнойКопии/Help/ru.html | 2 +- .../Forms/Форма/Form.form | 64 +- .../Forms/Форма/Module.bsl | 77 +- .../ПоискИУстановкаОбновлений/Help/ru.html | 2 +- .../Template.txt | 16 +- .../Forms/Настройки/Help/ru.html | 8 + .../Forms/Настройки/Module.bsl | 2 +- .../ПолнотекстовыйПоискВДанных/Help/ru.html | 6 +- .../ПолнотекстовыйПоискВДанных.mdo | 5 + .../Forms/Форма/Form.form | 24 + .../Forms/Форма/Module.bsl | 112 +- .../Help/ru.html | 2 +- .../ManagerModule.bsl | 17 +- .../ObjectModule.bsl | 20 +- .../Forms/Форма/Form.form | 235 +- .../Forms/Форма/Module.bsl | 267 +- .../Help/ru.html | 2 +- .../ManagerModule.bsl | 14 - .../ObjectModule.bsl | 46 +- .../Forms/ВыборОбъектовОтбором/Module.bsl | 1 + .../Forms/Настройки/Module.bsl | 6 +- .../СообщениеОбОбычномИнтерфейсе/Form.oform | Bin 8447 -> 8463 bytes .../Forms/Форма/Form.form | 6 +- .../Forms/Форма/Module.bsl | 6 +- .../Help/ru.html | 2 +- .../ObjectModule.bsl | 9 +- .../Forms/РегламентноеЗадание/Help/ru.html | 2 +- .../Forms/РегламентноеЗадание/Module.bsl | 17 +- .../РегламентныеИФоновыеЗадания/Form.form | 217 +- .../РегламентныеИФоновыеЗадания/Module.bsl | 156 +- .../Forms/ФоновоеЗадание/Help/ru.html | 2 +- .../РегламентныеИФоновыеЗадания/Help/ru.html | 7 +- .../Form.form | 6 + .../Help/ru.html | 4 +- .../Module.bsl | 11 +- .../РезервноеКопированиеДанных/Form.form | 9 + .../РезервноеКопированиеДанных/Help/ru.html | 4 +- .../РезервноеКопированиеДанных/Module.bsl | 27 +- .../Forms/ИндикацияХодаОбновленияИБ/Form.form | 4 + .../ИндикацияХодаОбновленияИБ/Help/ru.html | 2 +- .../ИндикацияХодаОбновленияИБ/Module.bsl | 10 +- .../Form.form | 9 +- .../Help/ru.html | 2 +- .../Module.bsl | 44 +- .../Forms/ОтложенныеОбработчики/Form.form | 303 +- .../Forms/ОтложенныеОбработчики/Help/ru.html | 2 +- .../Forms/ОтложенныеОбработчики/Module.bsl | 206 +- .../ПредупреждениеБезопасности/Form.form | 227 + .../ПредупреждениеБезопасности/Module.bsl | 14 + .../СообщениеОНеудачномОбновлении/Form.form | 22 + .../Help/ru.html | 2 +- .../СообщениеОНеудачномОбновлении/Module.bsl | 29 +- .../Help/ru.html | 2 +- .../РезультатыОбновленияПрограммы.mdo | 9 + .../CommandModule.bsl | 10 - .../Forms/Форма/Form.form | 94 - .../Forms/Форма/Module.bsl | 27 - .../Forms/ОсновнаяФорма/Module.bsl | 106 +- .../СдвигГраницыИтогов/ManagerModule.bsl | 6 +- .../ВыборУстройстваСканирования/Help/ru.html | 2 +- .../Forms/НастройкаСканирования/Help/ru.html | 21 +- .../НастройкаСканированияНаСеанс/Help/ru.html | 18 +- .../Forms/РезультатСканирования/Help/ru.html | 12 +- .../Forms/РезультатСканирования/Module.bsl | 18 +- .../Forms/ВыборПравилОбработки/Form.form | 981 + .../Forms/ВыборПравилОбработки/Module.bsl | 263 + .../Forms/Форма/Form.form | 2597 ++ .../Forms/Форма/Module.bsl | 793 + .../Help/ru.html | 50 + .../ObjectModule.bsl | 1230 + .../Templates/НастройкиБСП/Template.bin | 180 + .../СкрытиеКонфиденциальнойИнформации.mdo | 110 + .../Form.form | 4 + .../Module.bsl | 4 +- .../Forms/Форма/Form.form | 3 + .../Forms/Форма/Module.bsl | 26 +- .../Help/ru.html | 2 +- .../ManagerModule.bsl | 4 +- .../ObjectModule.bsl | 27 +- .../Forms/АрхивАнкет/Help/ru.html | 2 +- .../СписокРеспондента/Forms/Форма/Form.form | 2 + .../СписокРеспондента/Help/ru.html | 2 +- .../Forms/НастройкаТекущихДел/Form.form | 2 + .../ТекущиеДела/Forms/Форма/Form.form | 57 +- .../ТекущиеДела/Forms/Форма/Module.bsl | 150 +- .../DataProcessors/ТекущиеДела/Help/ru.html | 2 +- .../ObjectModule.bsl | 46 +- .../ObjectModule.bsl | 23 +- .../ObjectModule.bsl | 43 +- .../Forms/ОсновнаяФорма/Form.form | 168 +- .../Forms/ОсновнаяФорма/Module.bsl | 100 +- .../УдалениеПомеченныхОбъектов/Help/ru.html | 2 +- .../ManagerModule.bsl | 18 +- .../Forms/УправляемаяФорма/Form.form | 258 +- .../Forms/УправляемаяФорма/Module.bsl | 121 +- .../Form.form | 4 +- .../Module.bsl | 4 +- .../УниверсальныйОбменДаннымиXML/Help/ru.html | 2 +- .../ObjectModule.bsl | 3421 +-- .../УниверсальныйОбменДаннымиXML.mdo | 33 + .../Forms/ОсновнаяФорма/Form.form | 10 +- .../Forms/ОсновнаяФорма/Module.bsl | 12 +- .../Forms/ФормаВыбораПериода/Help/ru.html | 2 +- .../ФормаПараметровПерестроения/Help/ru.html | 2 +- .../УправлениеИтогамиИАгрегатами/Help/ru.html | 2 +- .../ОбъектСклонения/ОбъектСклонения.mdo | 17 + .../Forms/НастройкиРаботыСПочтой/Form.form | 10 +- .../Forms/НастройкиРаботыСПочтой/Help/ru.html | 14 +- .../ПараметрыЭлектронногоПисьма/Help/ru.html | 2 +- .../ПараметрыЭлектронногоПисьма/Module.bsl | 30 +- .../Forms/ФормаСписка/Form.form | 10 +- .../Forms/ФормаСписка/Help/ru.html | 102 +- .../Forms/ФормаСписка/Module.bsl | 60 +- .../ФормаСпискаПараметрическая/Form.form | 2 + .../ФормаСпискаПараметрическая/Help/ru.html | 38 +- .../ФормаСпискаПараметрическая/Module.bsl | 61 +- .../Template.dcs | 4 +- .../Help/ru.html | 2 +- .../Анкета/Forms/ФормаДокумента/Form.form | 4 +- .../Анкета/Forms/ФормаДокумента/Help/ru.html | 2 +- .../Анкета/Forms/ФормаДокумента/Module.bsl | 27 +- .../Анкета/Forms/ФормаСписка/Help/ru.html | 2 +- SSL/src/Documents/Анкета/ManagerModule.bsl | 6 +- .../Встреча/Forms/ФормаВыбора/Help/ru.html | 2 +- .../Встреча/Forms/ФормаДокумента/Form.form | 6 + .../Встреча/Forms/ФормаДокумента/Help/ru.html | 10 +- SSL/src/Documents/Встреча/ManagerModule.bsl | 6 +- SSL/src/Documents/Встреча/ObjectModule.bsl | 1 - .../Forms/ФормаВыбора/Help/ru.html | 2 +- .../Forms/ФормаДокумента/Form.form | 6 + .../Forms/ФормаДокумента/Help/ru.html | 10 +- .../Help/ru.html | 2 +- .../ManagerModule.bsl | 6 +- .../Forms/ФормаВыбора/Help/ru.html | 2 +- .../Forms/ФормаДокумента/Form.form | 2 + .../Forms/ФормаДокумента/Help/ru.html | 2 +- .../Forms/ФормаДокумента/Module.bsl | 2 +- .../ФормаПодбораРеспондентов/Help/ru.html | 2 +- .../Forms/ФормаСписка/Help/ru.html | 2 +- .../НазначениеОпросов/ManagerModule.bsl | 6 +- .../Help/ru.html | 2 +- ...вСогласияНаОбработкуПерсональныхДанных.mdo | 1 + .../Help/ru.html | 2 +- .../ManagerModule.bsl | 8 +- .../СогласиеНаОбработкуПерсональныхДанных.mdo | 2 +- .../Forms/ФормаДокумента/Form.form | 6 + .../Forms/ФормаДокумента/Help/ru.html | 14 +- SSL/src/Documents/СообщениеSMS/Help/ru.html | 2 +- .../Documents/СообщениеSMS/ManagerModule.bsl | 6 +- .../Forms/ФормаДокумента/Form.form | 5 + .../Forms/ФормаДокумента/Help/ru.html | 10 +- .../ТелефонныйЗвонок/ManagerModule.bsl | 6 +- .../ТелефонныйЗвонок/ObjectModule.bsl | 2 +- .../Forms/ФормаВыбора/Help/ru.html | 2 +- .../Forms/ФормаДокумента/Form.form | 5 + .../Forms/ФормаДокумента/Help/ru.html | 22 +- .../Forms/ФормаДокумента/Module.bsl | 4 +- .../Forms/ФормаСписка/Help/ru.html | 2 +- .../ManagerModule.bsl | 6 +- .../ObjectModule.bsl | 2 +- .../Forms/ФормаВыбора/Help/ru.html | 2 +- .../Forms/ФормаДокумента/Form.form | 8 +- .../Forms/ФормаДокумента/Help/ru.html | 34 +- .../Forms/ФормаДокумента/Module.bsl | 111 +- .../Form.form | 2 +- .../ManagerModule.bsl | 6 +- .../ObjectModule.bsl | 2 +- .../СостоянияСуществованияКонтрагента.mdo | 56 + .../ТипыПользователей/ТипыПользователей.mdo | 52 - ...ВариантыОтчетовПриУдаленииПользователя.mdo | 1 + .../ЗаписатьВерсиюПриОбменеДанными.mdo | 20 - ...КонтрольНеразделенныхОбъектовПриЗаписи.mdo | 2 + ...исьюДокументаЗащитаПерсональныхДанных.mdo} | 6 +- ...ПередУдалениемЗащитаПерсональныхДанных.mdo | 14 + .../ОбменСообщениями/ManagerModule.bsl | 7 +- .../ManagerModule.bsl | 80 + .../ОбновлениеИнформационнойБазы.mdo | 112 + .../ИспользоватьДатыЗапретаЗагрузки.mdo | 12 + .../ИспользоватьДатыЗапретаИзменения.mdo | 12 + .../ИспользоватьИнтеграцию1СБухфон.mdo | 2 +- .../ИспользоватьСинхронизациюФайлов.mdo | 13 + ...ОбновлениеВГлавномУзлеЗавершеноУспешно.mdo | 10 + .../ОтложенноеОбновлениеЗавершеноУспешно.mdo | 10 + .../СтандартныеПодсистемыВЛокальномРежиме.mdo | 3 +- .../CommandModule.bsl | 0 .../Form.form | 2 + .../Module.bsl | 4 + .../ЗагрузкаАдресногоКлассификатора/Form.form | 317 +- .../Help/ru.html | 4 +- .../Module.bsl | 242 +- .../ОчисткаАдресногоКлассификатора/Form.form | 3 + .../Help/ru.html | 7 +- .../ОчисткаАдресногоКлассификатора/Module.bsl | 4 + .../АдресныеОбъекты/ManagerModule.bsl | 21 + .../Templates/АдресныеСокращения/Template.txt | 295 + .../КлассификаторСубъектовРФ/Template.txt | 195 +- .../АдресныеОбъекты/АдресныеОбъекты.mdo | 12 +- .../БуферОперацийСтатистики/ManagerModule.bsl | 2 - .../Forms/ВыборХранимыхВерсий/Form.form | 530 +- .../Forms/ВыборХранимыхВерсий/Help/ru.html | 4 +- .../Forms/ВыборХранимыхВерсий/Module.bsl | 289 +- .../Forms/ОтчетПоВерсиямОбъекта/Module.bsl | 151 +- .../Forms/ФормаЗаписи/Help/ru.html | 2 +- .../ВерсииОбъектов/RecordSetModule.bsl | 17 +- .../ВерсииОбъектов/ВерсииОбъектов.mdo | 97 +- .../Forms/ФормаЗаписи/Form.form | 316 + .../Forms/ФормаЗаписи/Module.bsl | 23 + .../Список/ExtInfo/ListSettings.dcss | 17 + .../Forms/ФормаСписка/Form.form | 427 + .../Forms/ФормаСписка/Module.bsl | 23 + .../ВерсииПодсистем/ВерсииПодсистем.mdo | 39 + .../ВерсииПодсистемОбластейДанных.mdo | 19 + .../ГруппыЗначенийДоступа/ManagerModule.bsl | 9 +- .../ДанныеБизнесПроцессов/Help/ru.html | 2 +- .../ManagerModule.bsl | 218 + .../RecordSetModule.bsl | 89 + .../ДанныеОбработанныеВЦентральномУзлеРИБ.mdo | 157 + .../ManagerModule.bsl | 9 +- .../ДанныеОбъектовДляРегистрацииВОбменах.mdo | 4 +- .../Template.txt | 367 +- .../CommandModule.bsl | 5 +- .../CommandModule.bsl | 3 +- .../Forms/ДатыЗапретаИзменения/Form.form | 151 +- .../Forms/ДатыЗапретаИзменения/Module.bsl | 162 +- .../Forms/РедактированиеДатыЗапрета/Form.form | 10 +- .../Forms/ФормаСписка/Module.bsl | 6 +- .../ДатыЗапретаИзменения/Help/ru.html | 2 +- .../ДополнительныеСведения/Help/ru.html | 2 +- .../RecordSetModule.bsl | 25 + .../ДополнительныеСведения.mdo | 3 + .../ЗависимостиПравДоступа.mdo | 9 +- .../ЗамерыВремени/Help/ru.html | 2 +- .../ЗамерыВремени/ManagerModule.bsl | 501 +- .../ЗамерыВремениТехнологические/Help/ru.html | 2 +- .../ManagerModule.bsl | 543 +- .../ManagerModule.bsl | 50 +- .../ManagerModule.bsl | 20 +- .../ИзмененияОбщихДанныхУзлов.mdo | 5 +- .../Forms/ИсполнителиРоли/Help/ru.html | 2 +- .../Forms/ИсполнителиРоли/Module.bsl | 37 +- .../Form.form | 76 +- .../Help/ru.html | 2 +- .../Module.bsl | 157 +- .../Forms/РолиИИсполнителиЗадач/Help/ru.html | 2 +- .../Forms/ФормаЗаписи/Help/ru.html | 2 +- .../Forms/ФормаСписка/Form.form | 4 + .../Forms/ФормаСписка/Module.bsl | 36 +- .../ИсполнителиЗадач/Help/ru.html | 6 +- .../ИсполнителиЗадач/RecordSetModule.bsl | 4 + .../КалендарныеГрафики/Help/ru.html | 2 +- .../ManagerModule.bsl | 3 + .../КомментарииСтатистики/ManagerModule.bsl | 2 +- .../КурсыВалют/Help/ru.html | 2 +- .../КурсыВалют/RecordSetModule.bsl | 4 + .../RecordSetModule.bsl | 8 + .../НаборыЗначенийДоступа.mdo | 8 +- .../Forms/МоиНапоминания/Help/ru.html | 2 +- .../Forms/Напоминание/Form.form | 16 +- .../Forms/Напоминание/Help/ru.html | 2 +- .../Forms/ФормаОповещения/Help/ru.html | 2 +- .../НапоминанияПользователя/Help/ru.html | 2 +- .../ManagerModule.bsl | 24 +- .../ManagerModule.bsl | 2 +- .../НастройкиВариантовОтчетов.mdo | 11 +- .../Forms/ВерсионированиеОбъектов/Module.bsl | 150 +- .../Help/ru.html | 18 +- .../Forms/ФормаЗаписи/Help/ru.html | 2 +- .../Forms/ФормаЗаписи/Module.bsl | 2 +- .../Forms/ФормаСписка/Form.form | 17 + .../Forms/ФормаСписка/Module.bsl | 208 +- .../НастройкиОчисткиФайлов/Help/ru.html | 5 +- .../НастройкиОчисткиФайлов.mdo | 9 +- .../Forms/ФормаЗаписи/Form.form | 24 - .../НастройкиПравОбъектов/ManagerModule.bsl | 2 +- .../Forms/ДобавленияУсловияПоДате/Form.form | 306 + .../Forms/ДобавленияУсловияПоДате/Module.bsl | 36 + .../ConditionalAppearance.dcssca | 67 + .../НастройкиСинхронизацииФайлов/Form.form | 1381 ++ .../НастройкиСинхронизацииФайлов/Module.bsl | 638 + .../ConditionalAppearance.dcssca | 28 + .../ПростаяФормаЗаписиНастройки/Form.form | 240 + .../ПростаяФормаЗаписиНастройки/Help/ru.html | 8 + .../ПростаяФормаЗаписиНастройки/Module.bsl | 27 + .../ConditionalAppearance.dcssca | 28 + .../Forms/ФормаЗаписиНастройки/Form.form | 1037 + .../Forms/ФормаЗаписиНастройки/Help/ru.html | 26 + .../Forms/ФормаЗаписиНастройки/Module.bsl | 372 + .../НастройкиСинхронизацииФайлов/Help/ru.html | 42 + .../ManagerModule.bsl | 155 + .../НастройкиСинхронизацииФайлов.mdo | 237 + .../НастройкаПодключенияКСервису/Form.form | 24 +- .../НастройкаПодключенияКСервису/Module.bsl | 9 +- .../Form.form | 11 +- .../Module.bsl | 39 +- .../Forms/ФормаЗаписи/Form.form | 7 + .../Forms/ФормаЗаписи/Module.bsl | 5 + .../Список/ExtInfo/ListSettings.dcss | 17 + .../Forms/ФормаСписка/Form.form | 289 + .../НастройкиТранспортаОбмена/Help/ru.html | 2 +- .../ManagerModule.bsl | 3 +- .../НастройкиТранспортаОбмена.mdo | 11 + .../Forms/ФормаЗаписи/Form.form | 11 +- .../Forms/ФормаЗаписи/Help/ru.html | 16 +- .../Forms/ФормаЗаписи/Module.bsl | 3 + .../НомераОтсканированныхФайлов/Help/ru.html | 2 +- .../НомераОтсканированныхФайлов.mdo | 9 +- .../ManagerModule.bsl | 88 + .../ОбработчикиСобытийСинхронизацииДанных.mdo | 109 + .../ManagerModule.bsl | 71 +- .../ОбщиеНастройкиУзловИнформационныхБаз.mdo | 1 + .../Forms/ФормаСписка/Form.form | 37 - .../ПакетыДляОтправки/ManagerModule.bsl | 52 +- .../ВыбораРежимаОткрытияМакета/Help/ru.html | 2 +- .../Forms/МакетыПечатныхФорм/Help/ru.html | 2 +- .../Forms/МакетыПечатныхФорм/Module.bsl | 5 + .../Forms/РедактированиеМакета/Form.form | 6 + .../Forms/РедактированиеМакета/Help/ru.html | 4 +- .../ПользовательскиеМакетыПечати/Help/ru.html | 2 +- .../ПраваРолей/Forms/ФормаЗаписи/Form.form | 4 - .../ПраваРолей/ManagerModule.bsl | 2 +- .../Form.form | 1 + .../Help/ru.html | 2 +- .../Module.bsl | 27 +- .../ПравилаКонвертацииОбъектов/Form.form | 2 + .../ПравилаКонвертацииОбъектов/Help/ru.html | 2 +- .../ПравилаКонвертацииОбъектов/Module.bsl | 8 +- .../ПравилаРегистрацииОбъектов/Form.form | 2 + .../ПравилаРегистрацииОбъектов/Help/ru.html | 4 +- .../ПравилаРегистрацииОбъектов/Module.bsl | 6 +- .../СообщениеОНеудачномОбновлении/Module.bsl | 6 +- .../Forms/ФормаСписка/Form.form | 10 + .../Forms/ФормаСписка/Module.bsl | 9 + .../ПравилаДляОбменаДанными/Help/ru.html | 2 +- .../ПравилаДляОбменаДанными/ManagerModule.bsl | 625 +- .../ManagerModule.bsl | 24 +- .../ManagerModule.bsl | 27 +- ...ИдентификаторыСинхронизируемыхОбъектов.mdo | 4 +- .../Forms/Форма/Form.form | 11 +- .../Forms/Форма/Module.bsl | 76 +- .../РезультатыОбменаДанными/Help/ru.html | 2 +- .../РезультатыОбменаДанными.mdo | 6 +- .../СклоненияПредставленийОбъектов.mdo | 186 + .../ManagerModule.bsl | 23 + .../СоответствияОбъектовИнформационныхБаз.mdo | 6 +- .../СостоянияОбменовДанными/ManagerModule.bsl | 21 +- .../СостоянияОбменовДанными.mdo | 2 + .../ManagerModule.bsl | 22 +- .../СостоянияУспешныхОбменовДанными.mdo | 2 + .../Forms/ФормаСписка/Form.form | 10 +- .../Forms/ФормаСписка/Module.bsl | 10 + .../СтатистикаКонфигурации/ManagerModule.bsl | 224 +- ...сыСинхронизацииФайловСОблачнымСервисом.mdo | 188 + .../УдалитьНаборыЗначенийДоступа.mdo | 3 - .../Help/ru.html | 10 +- .../ФайлыВРабочемКаталоге/Help/ru.html | 2 +- .../Reports/АнализВерсийОбъектов/Help/ru.html | 7 +- .../СведенияОРегламентномЗадании/Help/ru.html | 2 +- .../СведенияОРегламентномЗадании/Module.bsl | 34 +- .../Forms/ФормаНастроек/Form.form | 76 - .../Forms/ФормаОтчета/Form.form | 629 - .../Forms/ФормаОтчета/Module.bsl | 282 - .../АнализЖурналаРегистрации/Help/ru.html | 10 +- .../ManagerModule.bsl | 55 +- .../АнализЖурналаРегистрации/ObjectModule.bsl | 79 +- .../Template.mxlx | 8 +- .../АнализЖурналаРегистрации.mdo | 33 +- .../РасшифровкаПростыхОтветов/Module.bsl | 2 +- .../РасшифровкаТабличныхВопросов/Module.bsl | 2 +- SSL/src/Reports/АнализОпроса/Help/ru.html | 2 +- .../Reports/АнализОпроса/ManagerModule.bsl | 24 +- SSL/src/Reports/АнализОпроса/ObjectModule.bsl | 28 +- .../Help/ru.html | 2 +- .../ManagerModule.bsl | 24 +- SSL/src/Reports/БизнесПроцессы/Help/ru.html | 2 +- .../Reports/БизнесПроцессы/ManagerModule.bsl | 24 +- .../ДатыЗапретаЗагрузки/ManagerModule.bsl | 24 +- .../ДатыЗапретаИзменения/ManagerModule.bsl | 24 +- .../ManagerModule.bsl | 31 - .../ДосьеКонтрагента/Forms/Форма/Form.form | 1140 +- .../ДосьеКонтрагента/Forms/Форма/Module.bsl | 480 +- .../ДосьеКонтрагента/ManagerModule.bsl | 3691 ++- .../Templates/АнализОтчетности/Template.mxlx | 1397 ++ .../БухгалтерскаяОтчетность/Template.mxlx | 20543 ++++++++++++++++ .../Templates/Главное/Template.mxlx | 1410 ++ .../Template.mxlx | 3273 +-- .../Templates/ДанныеПрограммы/Template.mxlx | 928 + .../Template.mxlx | 13993 +++++++++++ .../Templates/Проверки/Template.mxlx | 1455 ++ .../Templates/ФинансовыйАнализ/Template.mxlx | 5222 ++++ .../ДосьеКонтрагента/ДосьеКонтрагента.mdo | 55 +- SSL/src/Reports/ЗависшиеЗадачи/Help/ru.html | 2 +- .../Reports/ЗависшиеЗадачи/ManagerModule.bsl | 24 +- SSL/src/Reports/Задания/Help/ru.html | 2 +- SSL/src/Reports/Задания/ManagerModule.bsl | 24 +- SSL/src/Reports/Задачи/Help/ru.html | 2 +- SSL/src/Reports/Задачи/ManagerModule.bsl | 24 +- .../Template.dcs | 17 +- .../ЗадачиИстекающиеНаДату/Help/ru.html | 2 +- .../ЗадачиИстекающиеНаДату/ManagerModule.bsl | 24 +- .../ManagerModule.bsl | 62 +- .../ManagerModule.bsl | 31 - .../МестаИспользованияСсылок/Help/ru.html | 2 +- .../ManagerModule.bsl | 24 +- .../Reports/ОбъемНенужныхФайлов/Help/ru.html | 2 +- .../ОбъемНенужныхФайлов/ManagerModule.bsl | 24 +- .../ОбъемНенужныхФайлов.mdo | 1 - SSL/src/Reports/ПраваДоступа/Help/ru.html | 2 +- .../Reports/ПраваДоступа/ManagerModule.bsl | 24 +- .../Templates/Макет/Template.mxlx | 2 +- .../ПроверкаЦелостностиТома/ManagerModule.bsl | 24 +- .../ManagerModule.bsl | 41 + .../ObjectModule.bsl | 191 + .../Template.dcs | 453 + .../ПрогрессОтложенногоОбновления.mdo | 26 + .../Reports/ПросроченныеЗадачи/Help/ru.html | 2 +- .../ПросроченныеЗадачи/ManagerModule.bsl | 24 +- .../СведенияОПользователях/Help/ru.html | 2 +- .../СведенияОПользователях/ManagerModule.bsl | 24 +- .../Help/ru.html | 2 +- .../ManagerModule.bsl | 41 + .../ObjectModule.bsl | 0 .../Template.dcs | 0 ...бработкуПерсональныхДанныхДействующие.mdo} | 6 +- .../Help/ru.html | 2 +- .../ManagerModule.bsl | 41 + .../ObjectModule.bsl | 0 .../Template.dcs | 0 ...ОбработкуПерсональныхДанныхИстекающие.mdo} | 6 +- .../Forms/ФормаВариантаОтчета}/Form.form | 923 +- .../Forms/ФормаВариантаОтчета}/Module.bsl | 474 +- .../ConditionalAppearance.dcssca | 72 + .../Forms/ФормаНастроекОтчета/Form.form | 10141 ++++++++ .../Forms/ФормаНастроекОтчета/Help/ru.html | 41 + .../Forms/ФормаНастроекОтчета/Module.bsl | 5973 +++++ .../Forms/ФормаОтчета/Form.form | 2545 ++ .../Forms/ФормаОтчета/Help/ru.html | 54 + .../Forms/ФормаОтчета/Module.bsl | 2507 ++ .../Reports/УниверсальныйОтчет/Help/ru.html | 14 + .../УниверсальныйОтчет/ManagerModule.bsl | 924 + .../УниверсальныйОтчет/ObjectModule.bsl | 268 + .../Template.dcs | 150 + .../УниверсальныйОтчет/УниверсальныйОтчет.mdo | 68 + .../Roles/АдминистраторСистемы/Rights.rights | 258 +- SSL/src/Roles/БазовыеПрава/Rights.rights | 216 +- .../Rights.rights | 320 +- .../Rights.rights | 62 +- .../ДобавлениеИзменениеБанков/Rights.rights | 2 +- .../Rights.rights | 529 +- .../Rights.rights | 27 +- .../Rights.rights | 82 + ...ДобавлениеИзменениеДатЗапретаИзменения.mdo | 8 + .../Rights.rights | 19 + .../Rights.rights | 62 +- SSL/src/Roles/ЗапускAutomation/Rights.rights | 62 +- SSL/src/Roles/ЗапускВебКлиента/Rights.rights | 62 +- .../Roles/ЗапускТолстогоКлиента/Rights.rights | 62 +- .../Roles/ЗапускТонкогоКлиента/Rights.rights | 62 +- .../Интеграция1СБухфон/Интеграция1СБухфон.mdo | 2 +- .../Rights.rights | 70 +- .../Rights.rights | 150 +- .../Rights.rights | 2 +- .../Rights.rights | 17 + .../ИспользованиеУниверсальногоОтчета.mdo | 8 + .../Rights.rights | 7 + .../Rights.rights | 714 - .../НастройкаСинхронизацииДанных.mdo | 8 - .../Rights.rights | 132 + .../НастройкаСинхронизацииФайлов.mdo | 8 + SSL/src/Roles/ПолныеПрава/Rights.rights | 1729 +- .../КонтрольАктивностиПользователей.mdo | 1 + .../МониторингЗадач/МониторингЗадач.mdo | 2 +- .../ПроверкаКонтрагентов.mdo | 1 - .../СинхронизацияФайлов/Schedule.schedule | 22 + .../СинхронизацияФайлов.mdo | 13 + .../УведомлениеИсполнителейОНовыхЗадачах.mdo | 2 +- .../ЭкспортОценкиПроизводительности.mdo | 2 +- .../БуферОбмена/БуферОбмена.mdo | 11 + .../ВыполняетсяЗаписьОбъекта.mdo | 11 + .../ПараметрыОбработчикаОбновления.mdo | 11 + .../РаботаСВнешнимиРесурсамиЗаблокирована.mdo | 11 + .../Forms/ВыборВариантаОтчета/Form.form | 2 + .../Forms/ВыборВариантаОтчета/Help/ru.html | 2 +- .../Forms/ВыборВариантаОтчета/Module.bsl | 35 +- .../Forms/ВыборПоляОтчета/Form.form | 4 + .../Forms/ВыборПоляОтчета/Module.bsl | 4 + .../Module.bsl | 17 +- .../Forms/ПанельДругихОтчетов/Form.form | 5 +- .../Forms/ПанельДругихОтчетов/Module.bsl | 6 +- .../Forms/СохранениеВариантаОтчета/Form.form | 32 +- .../СохранениеВариантаОтчета/Help/ru.html | 2 +- .../Forms/СохранениеВариантаОтчета/Module.bsl | 43 +- .../Forms/УсловияОтборовОтчета/Help/ru.html | 2 +- .../Form.form | 4 + .../Help/ru.html | 2 +- .../Module.bsl | 8 +- .../ManagerModule.bsl | 2 +- .../ДосьеВторостепеннаяНадписьЦвет.mdo | 15 + .../ДосьеГиперссылкаЦвет.mdo | 15 + .../ДосьеПанельРазделовЦвет.mdo | 15 + .../ДосьеПлохаяОценкаЦвет.mdo | 15 + .../ДосьеРамкаСтрокиЦвет.mdo | 15 + .../ДосьеРасшифровкаЦвет.mdo | 15 + .../ДосьеТекущийРазделЦвет.mdo | 15 + .../ДосьеХорошаяОценкаЦвет.mdo | 13 + .../Администрирование/CommandInterface.cmi | 22 +- .../Администрирование/Администрирование.mdo | 2 + .../АдресныйКлассификатор.mdo | 2 +- .../АнализЖурналаРегистрации/Help/ru.html | 2 +- .../АнализЖурналаРегистрации.mdo | 1 + .../БазоваяФункциональность.mdo | 9 +- .../БизнесПроцессыИЗадачи/Help/ru.html | 2 +- .../Subsystems/Валюты/Help/ru.html | 2 +- .../ВариантыОтчетов/ВариантыОтчетов.mdo | 3 +- .../ВерсионированиеОбъектов/Help/ru.html | 2 +- .../ВерсионированиеОбъектов.mdo | 2 +- .../ГрупповоеИзменениеОбъектов/Help/ru.html | 2 +- .../ДатыЗапретаИзменения.mdo | 4 +- .../Help/ru.html | 22 +- .../Help/ru.html | 2 +- .../ЗавершениеРаботыПользователей.mdo | 1 + .../ЗагрузкаДанныхИзФайла.mdo | 2 + .../Help/ru.html | 2 +- .../ЗащитаПерсональныхДанных.mdo | 7 +- .../Интеграция1СБухфон/Интеграция1СБухфон.mdo | 3 - .../КалендарныеГрафики/Help/ru.html | 2 +- .../КонтактнаяИнформация/Help/ru.html | 2 +- .../КонтактнаяИнформация.mdo | 3 + .../НастройкаПорядкаЭлементов/Help/ru.html | 10 +- .../Subsystems/ОбменДанными/Help/ru.html | 2 +- .../Subsystems/ОбменДанными/ОбменДанными.mdo | 7 +- .../ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo | 9 + .../ОбновлениеКонфигурации/Help/ru.html | 2 +- .../ОбновлениеКонфигурации.mdo | 2 +- .../ОценкаПроизводительности.mdo | 6 +- .../Subsystems/Печать/Help/ru.html | 8 +- .../ПолнотекстовыйПоиск/Help/ru.html | 2 +- .../ПолучениеФайловИзИнтернета/Help/ru.html | 2 +- .../Subsystems/Пользователи/Help/ru.html | 2 +- .../Subsystems/Пользователи/Пользователи.mdo | 3 +- .../ПрефиксацияОбъектов/Help/ru.html | 2 +- .../РаботаСКонтрагентами.mdo | 14 +- .../РаботаСПочтовымиСообщениями/Help/ru.html | 2 +- .../РаботаСПочтовымиСообщениями.mdo | 3 + .../Subsystems/РаботаСФайлами/Help/ru.html | 2 +- .../РассылкаОтчетов/РассылкаОтчетов.mdo | 1 + .../РегламентныеЗадания/Help/ru.html | 2 +- .../РегламентныеЗадания.mdo | 5 +- .../РезервноеКопированиеИБ.mdo | 2 +- .../Subsystems/Свойства/Help/ru.html | 2 +- .../СклонениеПредставленийОбъектов.mdo | 20 + .../УправлениеДоступом/Help/ru.html | 2 +- .../УправлениеИтогамиИАгрегатами/Help/ru.html | 2 +- .../ФайловыеФункции/ФайловыеФункции.mdo | 8 + .../СтандартныеПодсистемы.mdo | 3 +- .../Forms/Дополнительно/Help/ru.html | 2 +- .../Forms/ЗадачиПоБизнесПроцессу/Help/ru.html | 2 +- .../Forms/ЗадачиПоБизнесПроцессу/Module.bsl | 7 +- .../Forms/ЗадачиПоПредмету/Help/ru.html | 2 +- .../Forms/ЗадачиПоПредмету/Module.bsl | 7 +- .../Forms/МоиЗадачи/Help/ru.html | 2 +- .../Forms/МоиЗадачи/Module.bsl | 16 +- .../Forms/МоиЗадачиДляРабочегоСтола/Form.form | 429 +- .../МоиЗадачиДляРабочегоСтола/Help/ru.html | 2 +- .../МоиЗадачиДляРабочегоСтола/Module.bsl | 34 +- .../Forms/ПеренаправитьЗадачи/Help/ru.html | 2 +- .../Forms/ПеренаправитьЗадачи/Module.bsl | 2 +- .../Forms/ФормаЗадачи/Help/ru.html | 2 +- .../Forms/ФормаЗадачи/Module.bsl | 3 +- .../Forms/ФормаСписка/Form.form | 4 + .../Forms/ФормаСписка/Help/ru.html | 2 +- .../Forms/ФормаСписка/Module.bsl | 44 +- SSL/src/Tasks/ЗадачаИсполнителя/Help/ru.html | 2 +- .../Tasks/ЗадачаИсполнителя/ManagerModule.bsl | 6 +- .../AddressSystem/AddressSystem.mdo | 480 - SSL/src/WebServices/AddressSystem/Module.bsl | 245 - .../EnterpriseDataExchange_1_0_1_1/Module.bsl | 21 +- .../EnterpriseDataUpload_1_0_1_1/Module.bsl | 14 +- SSL/src/WebServices/Exchange/Module.bsl | 4 +- .../WebServices/Exchange_2_0_1_6/Module.bsl | 4 +- .../EnterpriseData_1_0_3.mdo} | 4 +- .../Package.xdto | 29 + .../EnterpriseData_1_1_3.mdo | 9 + .../EnterpriseData_1_1_3/Package.xdto | 4582 ++++ .../EnterpriseData_1_2_1.mdo | 9 + .../EnterpriseData_1_2_1/Package.xdto | 4571 ++++ 1637 files changed, 190310 insertions(+), 54633 deletions(-) rename SSL/src/Catalogs/КлассификаторБанковРФ/Commands/{КлассификаторБанковРФ => ЗагрузкаКлассификатораБанковРФ}/CommandModule.bsl (100%) create mode 100644 SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Module.bsl create mode 100644 SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/КомпонентаXMLDSIG/Template.bin 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 create mode 100644 SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/УчетныеЗаписиСинхронизацииФайлов.mdo rename SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Attributes/{СписокДополнительныхРеквизитов => НаборыСвойств}/ExtInfo/ListSettings.dcss (100%) create mode 100644 SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Attributes/ОбщиеНаборыСвойств/ExtInfo/ListSettings.dcss create mode 100644 SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Form.form create mode 100644 SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Help/ru.html create mode 100644 SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Module.bsl create mode 100644 SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/БлокировкаРаботыСВнешнимиРесурсами.mdo create mode 100644 SSL/src/CommonForms/ВыборПолучателейСообщения/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/CommonForms/НастройкаДоступаКСервисуMorpher/Form.form create mode 100644 SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Help/ru.html create mode 100644 SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Module.bsl create mode 100644 SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/НастройкаДоступаКСервисуMorpher.mdo create mode 100644 SSL/src/CommonForms/НастройкаКомандПечати/Help/ru.html 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 rename SSL/src/{DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/МногострочноеПредупреждение => CommonForms/Сервис1СКонтрагентНеПодключен}/Form.form (51%) create mode 100644 SSL/src/CommonForms/Сервис1СКонтрагентНеПодключен/Module.bsl create mode 100644 SSL/src/CommonForms/Сервис1СКонтрагентНеПодключен/Сервис1СКонтрагентНеПодключен.mdo create mode 100644 SSL/src/CommonForms/Склонения/Form.form create mode 100644 SSL/src/CommonForms/Склонения/Help/ru.html create mode 100644 SSL/src/CommonForms/Склонения/Module.bsl create mode 100644 SSL/src/CommonForms/Склонения/Склонения.mdo create mode 100644 SSL/src/CommonForms/ФормаПоиска/Help/ru.html 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 create mode 100644 SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиентСервер/ЗагрузкаДанныхИзФайлаКлиентСервер.mdo rename SSL/src/CommonModules/{ОбновлениеКонфигурацииКлиентГлобальный => ОбновлениеКонфигурацииГлобальный}/Module.bsl (100%) rename SSL/src/CommonModules/{ОбновлениеКонфигурацииКлиентГлобальный/ОбновлениеКонфигурацииКлиентГлобальный.mdo => ОбновлениеКонфигурацииГлобальный/ОбновлениеКонфигурацииГлобальный.mdo} (66%) rename SSL/src/CommonModules/{ОценкаПроизводительностиВызовСервераПолныеПрава => ОценкаПроизводительности}/Module.bsl (87%) create mode 100644 SSL/src/CommonModules/ОценкаПроизводительности/ОценкаПроизводительности.mdo create mode 100644 SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/Module.bsl rename SSL/src/CommonModules/{ОценкаПроизводительностиВызовСервераПолныеПрава/ОценкаПроизводительностиВызовСервераПолныеПрава.mdo => ОценкаПроизводительностиВызовСервера/ОценкаПроизводительностиВызовСервера.mdo} (64%) rename SSL/src/CommonModules/{ОценкаПроизводительностиКлиентГлобальный => ОценкаПроизводительностиГлобальный}/Module.bsl (99%) rename SSL/src/CommonModules/{ОценкаПроизводительностиКлиентГлобальный/ОценкаПроизводительностиКлиентГлобальный.mdo => ОценкаПроизводительностиГлобальный/ОценкаПроизводительностиГлобальный.mdo} (65%) create mode 100644 SSL/src/CommonModules/ОценкаПроизводительностиПовтИсп/Module.bsl rename SSL/src/CommonModules/{ДлительныеОперацииКлиентПовтИсп/ДлительныеОперацииКлиентПовтИсп.mdo => ОценкаПроизводительностиПовтИсп/ОценкаПроизводительностиПовтИсп.mdo} (51%) create mode 100644 SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиентПереопределяемый/Module.bsl create mode 100644 SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиентПереопределяемый/РаботаСПочтовымиСообщениямиКлиентПереопределяемый.mdo create mode 100644 SSL/src/CommonModules/РаботаСПочтовымиСообщениямиПереопределяемый/Module.bsl create mode 100644 SSL/src/CommonModules/РаботаСПочтовымиСообщениямиПереопределяемый/РаботаСПочтовымиСообщениямиПереопределяемый.mdo create mode 100644 SSL/src/CommonModules/РассылкаОтчетовКлиентПереопределяемый/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 (100%) 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 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/CommonPictures/{Логотип1СБухфон/Логотип1СБухфон.mdo => GoogleMaps/GoogleMaps.mdo} (52%) create mode 100644 SSL/src/CommonPictures/GoogleMaps/Picture.png 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 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/Запустить1СБухфонТакси/Picture.png delete mode 100644 SSL/src/CommonPictures/Запустить1СБухфонТакси/Запустить1СБухфонТакси.mdo create mode 100644 SSL/src/CommonPictures/ИсторияИзменений/Picture.png rename SSL/src/CommonPictures/{ДобавитьВложенный/ДобавитьВложенный.mdo => ИсторияИзменений/ИсторияИзменений.mdo} (51%) delete mode 100644 SSL/src/CommonPictures/Консультант1СБухфон/Picture.png delete mode 100644 SSL/src/CommonPictures/Логотип1СБухфон/Picture.png create mode 100644 SSL/src/CommonPictures/ПапкаОблачногоСервиса/Picture.png create mode 100644 SSL/src/CommonPictures/ПапкаОблачногоСервиса/ПапкаОблачногоСервиса.mdo create mode 100644 SSL/src/CommonPictures/Сервис1СКонтрагент/Picture.png rename SSL/src/CommonPictures/{Консультант1СБухфон/Консультант1СБухфон.mdo => Сервис1СКонтрагент/Сервис1СКонтрагент.mdo} (50%) 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/ИнструкцияПоПроверкеКонтрагентов/_files/12.png create mode 100644 SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/13.png create mode 100644 SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/23.png create mode 100644 SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/24.png create mode 100644 SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/Книга покупок.jpg create mode 100644 SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/Книга покупок1.jpg create mode 100644 SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/Поступленние товаров и услуг.png create mode 100644 SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/Предложение. Полные права.jpg create mode 100644 SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/Предложение.png create mode 100644 SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/Проверка в документе по кнопке.png create mode 100644 SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/Проверка контрагента по кнопке.png create mode 100644 SSL/src/Constants/ДанныеДляОтложенногоОбновления/ДанныеДляОтложенногоОбновления.mdo create mode 100644 SSL/src/Constants/ИспользоватьСервисСклоненияMorpher/ИспользоватьСервисСклоненияMorpher.mdo create mode 100644 SSL/src/Constants/ЛогинДоступаКСервисуMorpher/ЛогинДоступаКСервисуMorpher.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 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/ЗагрузкаДанныхИзФайла/Help/ru.html create mode 100644 SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Help/ru.html delete mode 100644 SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/МногострочноеПредупреждение/Module.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/Форма/Module.bsl rename SSL/src/DataProcessors/{СбросНастроекПроверкиКонтрагентов/СбросНастроекПроверкиКонтрагентов.mdo => ИнструментыРазработчикаПроверкаКонтрагентов/ИнструментыРазработчикаПроверкаКонтрагентов.mdo} (66%) create mode 100644 SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Настройки/Help/ru.html create mode 100644 SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ПредупреждениеБезопасности/Form.form create mode 100644 SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ПредупреждениеБезопасности/Module.bsl delete mode 100644 SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/Commands/СбросНастроекПроверкиКонтрагентов/CommandModule.bsl delete mode 100644 SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/Forms/Форма/Form.form delete mode 100644 SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/Forms/Форма/Module.bsl create mode 100644 SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/ВыборПравилОбработки/Form.form create mode 100644 SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/ВыборПравилОбработки/Module.bsl create mode 100644 SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Form.form create mode 100644 SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Module.bsl create mode 100644 SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Help/ru.html create mode 100644 SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/ObjectModule.bsl create mode 100644 SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Templates/НастройкиБСП/Template.bin create mode 100644 SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/СкрытиеКонфиденциальнойИнформации.mdo create mode 100644 SSL/src/DefinedTypes/ОбъектСклонения/ОбъектСклонения.mdo delete mode 100644 SSL/src/Enums/ТипыПользователей/ТипыПользователей.mdo delete mode 100644 SSL/src/EventSubscriptions/ЗаписатьВерсиюПриОбменеДанными/ЗаписатьВерсиюПриОбменеДанными.mdo rename SSL/src/EventSubscriptions/{ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента/ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента.mdo => ПроверитьДатуЗапретаИзмененияПередЗаписьюДокументаЗащитаПерсональныхДанных/ПроверитьДатуЗапретаИзмененияПередЗаписьюДокументаЗащитаПерсональныхДанных.mdo} (61%) create mode 100644 SSL/src/EventSubscriptions/ПроверитьДатуЗапретаИзмененияПередУдалениемЗащитаПерсональныхДанных/ПроверитьДатуЗапретаИзмененияПередУдалениемЗащитаПерсональныхДанных.mdo create mode 100644 SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ManagerModule.bsl create mode 100644 SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.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 create mode 100644 SSL/src/FunctionalOptions/ОтложенноеОбновлениеЗавершеноУспешно/ОтложенноеОбновлениеЗавершеноУспешно.mdo rename SSL/src/InformationRegisters/АдресныеОбъекты/Commands/{АвторизацияНаСайтеПоддержкиПользователей => АвторизацияНаСайтеПоддержки}/CommandModule.bsl (100%) create mode 100644 SSL/src/InformationRegisters/АдресныеОбъекты/Templates/АдресныеСокращения/Template.txt create mode 100644 SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаЗаписи/Form.form create mode 100644 SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаЗаписи/Module.bsl create mode 100644 SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss create mode 100644 SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаСписка/Form.form create mode 100644 SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаСписка/Module.bsl create mode 100644 SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ManagerModule.bsl create mode 100644 SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/RecordSetModule.bsl create mode 100644 SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ДанныеОбработанныеВЦентральномУзлеРИБ.mdo create mode 100644 SSL/src/InformationRegisters/ДополнительныеСведения/RecordSetModule.bsl create mode 100644 SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Form.form create mode 100644 SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Module.bsl create mode 100644 SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/ConditionalAppearance.dcssca create mode 100644 SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Form.form create mode 100644 SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Module.bsl create mode 100644 SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ПростаяФормаЗаписиНастройки/ConditionalAppearance.dcssca 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 create mode 100644 SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/ConditionalAppearance.dcssca 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 create mode 100644 SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Help/ru.html create mode 100644 SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/ManagerModule.bsl create mode 100644 SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/НастройкиСинхронизацииФайлов.mdo create mode 100644 SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss create mode 100644 SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаСписка/Form.form create mode 100644 SSL/src/InformationRegisters/ОбработчикиСобытийСинхронизацииДанных/ManagerModule.bsl create mode 100644 SSL/src/InformationRegisters/ОбработчикиСобытийСинхронизацииДанных/ОбработчикиСобытийСинхронизацииДанных.mdo create mode 100644 SSL/src/InformationRegisters/СклоненияПредставленийОбъектов/СклоненияПредставленийОбъектов.mdo create mode 100644 SSL/src/InformationRegisters/СтатистикаКонфигурации/Forms/ФормаСписка/Module.bsl create mode 100644 SSL/src/InformationRegisters/СтатусыСинхронизацииФайловСОблачнымСервисом/СтатусыСинхронизацииФайловСОблачнымСервисом.mdo delete mode 100644 SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаНастроек/Form.form delete mode 100644 SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаОтчета/Form.form delete mode 100644 SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаОтчета/Module.bsl delete mode 100644 SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/ManagerModule.bsl create mode 100644 SSL/src/Reports/ДосьеКонтрагента/Templates/АнализОтчетности/Template.mxlx create mode 100644 SSL/src/Reports/ДосьеКонтрагента/Templates/БухгалтерскаяОтчетность/Template.mxlx create mode 100644 SSL/src/Reports/ДосьеКонтрагента/Templates/Главное/Template.mxlx rename SSL/src/Reports/ДосьеКонтрагента/Templates/{Макет => ДанныеГосРеестров}/Template.mxlx (79%) create mode 100644 SSL/src/Reports/ДосьеКонтрагента/Templates/ДанныеПрограммы/Template.mxlx create mode 100644 SSL/src/Reports/ДосьеКонтрагента/Templates/ПредельныеЗначенияРентабельностиИНалоговойНагрузки/Template.mxlx create mode 100644 SSL/src/Reports/ДосьеКонтрагента/Templates/Проверки/Template.mxlx create mode 100644 SSL/src/Reports/ДосьеКонтрагента/Templates/ФинансовыйАнализ/Template.mxlx delete mode 100644 SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/ManagerModule.bsl create mode 100644 SSL/src/Reports/ПрогрессОтложенногоОбновления/ManagerModule.bsl create mode 100644 SSL/src/Reports/ПрогрессОтложенногоОбновления/ObjectModule.bsl create mode 100644 SSL/src/Reports/ПрогрессОтложенногоОбновления/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs create mode 100644 SSL/src/Reports/ПрогрессОтложенногоОбновления/ПрогрессОтложенногоОбновления.mdo rename SSL/src/Reports/{ДействующиеСогласияНаОбработкуПерсональныхДанных => СогласияНаОбработкуПерсональныхДанныхДействующие}/Help/ru.html (95%) create mode 100644 SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхДействующие/ManagerModule.bsl rename SSL/src/Reports/{ДействующиеСогласияНаОбработкуПерсональныхДанных => СогласияНаОбработкуПерсональныхДанныхДействующие}/ObjectModule.bsl (100%) rename SSL/src/Reports/{ДействующиеСогласияНаОбработкуПерсональныхДанных => СогласияНаОбработкуПерсональныхДанныхДействующие}/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs (100%) rename SSL/src/Reports/{ДействующиеСогласияНаОбработкуПерсональныхДанных/ДействующиеСогласияНаОбработкуПерсональныхДанных.mdo => СогласияНаОбработкуПерсональныхДанныхДействующие/СогласияНаОбработкуПерсональныхДанныхДействующие.mdo} (75%) rename SSL/src/Reports/{ИстекающиеСогласияНаОбработкуПерсональныхДанных => СогласияНаОбработкуПерсональныхДанныхИстекающие}/Help/ru.html (97%) create mode 100644 SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхИстекающие/ManagerModule.bsl rename SSL/src/Reports/{ИстекающиеСогласияНаОбработкуПерсональныхДанных => СогласияНаОбработкуПерсональныхДанныхИстекающие}/ObjectModule.bsl (100%) rename SSL/src/Reports/{ИстекающиеСогласияНаОбработкуПерсональныхДанных => СогласияНаОбработкуПерсональныхДанныхИстекающие}/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs (100%) rename SSL/src/Reports/{ИстекающиеСогласияНаОбработкуПерсональныхДанных/ИстекающиеСогласияНаОбработкуПерсональныхДанных.mdo => СогласияНаОбработкуПерсональныхДанныхИстекающие/СогласияНаОбработкуПерсональныхДанныхИстекающие.mdo} (76%) rename SSL/src/Reports/{АнализЖурналаРегистрации/Forms/ФормаВарианта => УниверсальныйОтчет/Forms/ФормаВариантаОтчета}/Form.form (92%) rename SSL/src/Reports/{АнализЖурналаРегистрации/Forms/ФормаВарианта => УниверсальныйОтчет/Forms/ФормаВариантаОтчета}/Module.bsl (80%) create mode 100644 SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаНастроекОтчета/ConditionalAppearance.dcssca create mode 100644 SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаНастроекОтчета/Form.form create mode 100644 SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаНастроекОтчета/Help/ru.html 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/ФормаОтчета/Help/ru.html 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 create mode 100644 SSL/src/Reports/УниверсальныйОтчет/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs create mode 100644 SSL/src/Reports/УниверсальныйОтчет/УниверсальныйОтчет.mdo create mode 100644 SSL/src/Roles/ДобавлениеИзменениеДатЗапретаИзменения/Rights.rights create mode 100644 SSL/src/Roles/ДобавлениеИзменениеДатЗапретаИзменения/ДобавлениеИзменениеДатЗапретаИзменения.mdo 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 create mode 100644 SSL/src/Roles/НастройкаСинхронизацииФайлов/Rights.rights create mode 100644 SSL/src/Roles/НастройкаСинхронизацииФайлов/НастройкаСинхронизацииФайлов.mdo create mode 100644 SSL/src/ScheduledJobs/СинхронизацияФайлов/Schedule.schedule create mode 100644 SSL/src/ScheduledJobs/СинхронизацияФайлов/СинхронизацияФайлов.mdo create mode 100644 SSL/src/SessionParameters/БуферОбмена/БуферОбмена.mdo create mode 100644 SSL/src/SessionParameters/ВыполняетсяЗаписьОбъекта/ВыполняетсяЗаписьОбъекта.mdo create mode 100644 SSL/src/SessionParameters/ПараметрыОбработчикаОбновления/ПараметрыОбработчикаОбновления.mdo create mode 100644 SSL/src/SessionParameters/РаботаСВнешнимиРесурсамиЗаблокирована/РаботаСВнешнимиРесурсамиЗаблокирована.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/Subsystems/СтандартныеПодсистемы/Subsystems/СклонениеПредставленийОбъектов/СклонениеПредставленийОбъектов.mdo delete mode 100644 SSL/src/WebServices/AddressSystem/AddressSystem.mdo delete mode 100644 SSL/src/WebServices/AddressSystem/Module.bsl rename SSL/src/XDTOPackages/{EnterpriseData_1_0_1/EnterpriseData_1_0_1.mdo => EnterpriseData_1_0_3/EnterpriseData_1_0_3.mdo} (79%) rename SSL/src/XDTOPackages/{EnterpriseData_1_0_1 => EnterpriseData_1_0_3}/Package.xdto (99%) create mode 100644 SSL/src/XDTOPackages/EnterpriseData_1_1_3/EnterpriseData_1_1_3.mdo create mode 100644 SSL/src/XDTOPackages/EnterpriseData_1_1_3/Package.xdto create mode 100644 SSL/src/XDTOPackages/EnterpriseData_1_2_1/EnterpriseData_1_2_1.mdo create mode 100644 SSL/src/XDTOPackages/EnterpriseData_1_2_1/Package.xdto diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Form.form b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Form.form index c3e250a89..6d0b70908 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Form.form +++ b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Form.form @@ -798,6 +798,7 @@ Vertical auto + false @@ -875,6 +876,7 @@ Vertical auto + false true diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Help/ru.html b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Help/ru.html index 2ad5f314a..1eea1ccb8 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Help/ru.html +++ b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

Главное

diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Form.form b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Form.form index 3cc2ef598..aef3c6034 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Form.form +++ b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Form.form @@ -800,6 +800,7 @@ Vertical auto + false @@ -877,6 +878,7 @@ Vertical auto + false true diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Help/ru.html b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Help/ru.html index 756653e6f..2dcdff377 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Help/ru.html +++ b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Help/ru.html @@ -1,4 +1,4 @@ - +

Предназначена для проверки выполнения бизнес-процесса Задание.

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

Главное

diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Help/ru.html b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Help/ru.html index 4641a3380..c4916e0b3 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Help/ru.html +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

Сведения о задании

diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl index 42b71d6dc..fd6d21f86 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl @@ -1,3 +1,5 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ОткрытаФормаВыбораИсполнителя; // Признак того, что исполнитель выбирается из формы, а не быстрым вводом. &НаКлиенте @@ -5,6 +7,8 @@ &НаКлиенте Перем КонтекстВыбора; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/BusinessProcesses/Задание/Help/ru.html b/SSL/src/BusinessProcesses/Задание/Help/ru.html index fcd1629b8..c44dc2aed 100644 --- a/SSL/src/BusinessProcesses/Задание/Help/ru.html +++ b/SSL/src/BusinessProcesses/Задание/Help/ru.html @@ -1,4 +1,4 @@ - +

Предназначен для управления бизнес-процессами Задание.

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

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

diff --git a/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl b/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl index 034790645..0fff616a3 100644 --- a/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl +++ b/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl @@ -73,9 +73,11 @@ //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. -// Возвращает список реквизитов, которые не нужно редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl b/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl index 72da26617..9fc1ad5d9 100644 --- a/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl +++ b/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl @@ -9,7 +9,7 @@ // Логика ограничения для // - чтения: Автор ИЛИ Исполнитель (с учетом адресации) ИЛИ Проверяющий (с учетом адресации) ИЛИ Предмет - // - изменения: Автор + // - изменения: Автор. // Если предмет не задан (т.е. бизнес-процесс без основания), // тогда предмет не участвует в логике ограничения. @@ -171,8 +171,12 @@ НаПроверке = Истина; Проверяющий = Пользователи.АвторизованныйПользователь(); Состояние = Перечисления.СостоянияБизнесПроцессов.Активен; - // Для возможности автоподбора в незаполненном поле Исполнитель. - Исполнитель = Справочники.Пользователи.ПустаяСсылка(); + Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Пользователи") Тогда + Исполнитель = ДанныеЗаполнения; + Иначе + // Для возможности автоподбора в незаполненном поле Исполнитель. + Исполнитель = Справочники.Пользователи.ПустаяСсылка(); + КонецЕсли; КонецЕсли; Если ДанныеЗаполнения <> Неопределено И ТипЗнч(ДанныеЗаполнения) <> Тип("Структура") diff --git a/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Help/ru.html b/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Help/ru.html index 1e457ea4c..d712b189d 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Help/ru.html +++ b/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

Особенности настройки поля Адрес электронной почты

-

См. также:

+

Особенности настройки поля Другое

+

См. также:

\ No newline at end of file diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl index 700d17b43..a2b4da9b2 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Module.bsl @@ -28,16 +28,21 @@ КонецЕсли; СсылкаРодителя = Объект.Родитель; - ТекущийУровень = ?(СсылкаРодителя.Пустая(), 0, СсылкаРодителя.Уровень() ); - - Элементы.РазрешитьВводНесколькихЗначений.Доступность = ?(ТекущийУровень = 1, Ложь, Истина); Если Не Объект.МожноИзменятьСпособРедактирования Тогда Элементы.РедактированиеТолькоВДиалоге.Доступность = Ложь; Элементы.РазрешитьВводНесколькихЗначений.Доступность = Ложь; Элементы.ГруппаНаименованиеНастройкиПоТипам.Доступность = Ложь; + Иначе + Если Объект.ХранитьИсториюИзменений ИЛИ СсылкаРодителя.Пустая() ИЛИ СсылкаРодителя.Уровень() > 0 Тогда + Элементы.РазрешитьВводНесколькихЗначений.Доступность = Ложь; + Иначе + Элементы.РазрешитьВводНесколькихЗначений.Доступность = Истина; + КонецЕсли; КонецЕсли; + Элементы.ХранитИсториюИзменений.Видимость = Объект.ХранитьИсториюИзменений; + ПроверятьПоКлассификатору = ?(Объект.ПроверятьПоФИАС, 0, 1); КонецПроцедуры @@ -151,9 +156,12 @@ Или Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Факс") Тогда Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.Телефон; Элементы.РедактированиеТолькоВДиалоге.Доступность = Объект.МожноИзменятьСпособРедактирования; - Иначе + ИначеЕсли Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Другое") Тогда Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.Другое; Элементы.РедактированиеТолькоВДиалоге.Доступность = Ложь; + Иначе + Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.Прочие; + Элементы.РедактированиеТолькоВДиалоге.Доступность = Ложь; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Help/ru.html b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Help/ru.html index 3bc46b83a..6e34ff4df 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 150d1a0e7..bf9061c7e 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ManagerModule.bsl @@ -23,12 +23,11 @@ //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. -// Возвращает список реквизитов, которые не нужно редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые не рекомендуется редактировать +// с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив - содержит строки имен реквизитов. -// +// Массив - список имен реквизитов объекта. Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ObjectModule.bsl b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ObjectModule.bsl index e69de29bb..8fed6aacb 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ObjectModule.bsl @@ -0,0 +1,22 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПередЗаписью(Отказ) + Если ЭтотОбъект.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если НЕ ЭтотОбъект.ЭтоГруппа Тогда + Результат = УправлениеКонтактнойИнформациейСлужебный.ПроверитьПараметрыВидаКонтактнойИнформации(ЭтотОбъект); + Если Результат.ЕстьОшибки Тогда + Отказ = Истина; + ВызватьИсключение Результат.ТекстОшибки; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo index 758f6afc2..83e06921a 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/ВидыКонтактнойИнформации.mdo @@ -529,6 +529,44 @@ Use Use + + МногострочноеПоле + + ru + Многострочное поле + + + Boolean + + + ru + Выводит многострочное поле + + + + + Use + Use + + + ХранитьИсториюИзменений + + ru + Хранить историю изменений + + + Boolean + + + ru + Сохранять историю изменения контактной информации + + + + + Use + Use + ФормаСписка diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Commands/ВнешнийДоступ/CommandModule.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Commands/ВнешнийДоступ/CommandModule.bsl index f06563141..755dc70e1 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Commands/ВнешнийДоступ/CommandModule.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Commands/ВнешнийДоступ/CommandModule.bsl @@ -15,8 +15,8 @@ ПараметрыВыполненияКоманды.Окно); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); - Если Найти(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке), - "ВызватьИсключение ОписаниеОшибкиКакПредупреждения") > 0 Тогда + Если СтрНайти(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке), + "ВызватьИсключение" + " " + "ОписаниеОшибкиКакПредупреждения") > 0 Тогда ПоказатьПредупреждение(, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); Иначе diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form index f0144577f..0b33ffc69 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form @@ -1111,6 +1111,10 @@ OnActivateRow ВнешниеПользователиСписокПриАктивизацииСтроки + + BeforeRowChange + ВнешниеПользователиСписокПередНачаломИзменения + ВнешниеПользователиСписокСтрокаПоиска 179 @@ -2006,6 +2010,9 @@ true + + Items.ГруппыВнешнихПользователей.CurrentData.DeletionMark + Top ГруппыВнешнихПользователейКомментарийРасширеннаяПодсказка @@ -2093,6 +2100,7 @@ Page Vertical + false @@ -2199,6 +2207,7 @@ Page Vertical + false true diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl index eaa9164aa..78e0aa7a2 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl @@ -138,7 +138,7 @@ Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов") Тогда Элементы.ФормаИзменитьВыделенные.Видимость = Ложь; - Элементы.ПользователиСписокКонтекстноеМенюИзменитьВыделенные.Видимость = Ложь; + Элементы.ВнешниеПользователиСписокКонтекстноеМенюИзменитьВыделенные.Видимость = Ложь; КонецЕсли; ОписаниеОбъекта = Новый Структура; @@ -223,7 +223,7 @@ Процедура ВидПользователейНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораНазначения", ЭтотОбъект); - ПользователиСлужебныйКлиент.ВыбратьНазначение(ЭтотОбъект, Нстр("ru = 'Выбор вида пользователей'"), Ложь, Истина, ОписаниеОповещения); + ПользователиСлужебныйКлиент.ВыбратьНазначение(ЭтотОбъект, НСтр("ru = 'Выбор вида пользователей'"), Ложь, Истина, ОписаниеОповещения); КонецПроцедуры @@ -442,6 +442,20 @@ КонецПроцедуры +&НаКлиенте +Процедура ВнешниеПользователиСписокПередНачаломИзменения(Элемент, Отказ) + + Отказ = Истина; + + Если Не ЗначениеЗаполнено(Элемент.ТекущаяСтрока) Тогда + Возврат; + КонецЕсли; + + ПараметрыФормы = Новый Структура("Ключ", Элемент.ТекущаяСтрока); + ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаОбъекта", ПараметрыФормы, Элемент); + +КонецПроцедуры + &НаКлиенте Процедура ВнешниеПользователиСписокПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) @@ -1085,18 +1099,13 @@ НСтр("ru = 'Перемещение пользователей'"), , СообщениеПользователю.Сообщение, БиблиотекаКартинок.Информация32); Иначе + ПараметрыПредупреждения = Новый Структура("Текст", СообщениеПользователю.Сообщение); Если СообщениеПользователю.Пользователи <> Неопределено Тогда - Отчет = НСтр("ru = 'Следующие пользователи не были включены в выбранную группу:'"); - Отчет = Отчет + Символы.ПС + СообщениеПользователю.Пользователи; - - ТекстВопроса = СообщениеПользователю.Сообщение; - - Результат = Новый Структура; - СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(Результат, ТекстВопроса, Отчет); - СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); - Иначе - ПоказатьПредупреждение(,СообщениеПользователю.Сообщение); + Подробно = НСтр("ru = 'Следующие пользователи не были включены в выбранную группу:'"); + Подробно = Подробно + Символы.ПС + СообщениеПользователю.Пользователи; + ПараметрыПредупреждения.Вставить("Подробно", Подробно); КонецЕсли; + СтандартныеПодсистемыКлиент.ВывестиПредупреждение(ЭтотОбъект, ПараметрыПредупреждения); КонецЕсли; diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form index 3a9f0ede2..1a6e07a58 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form @@ -679,6 +679,7 @@ Vertical auto + false @@ -754,6 +755,7 @@ Vertical auto + false true @@ -1846,6 +1848,7 @@ Vertical auto + false @@ -1874,6 +1877,7 @@ Vertical auto + false @@ -1950,6 +1954,7 @@ Vertical auto + false true @@ -2033,22 +2038,6 @@
true
true - - ПользовательИБПароль - - <key>ru</key> - <value>Пользователь ИБПароль</value> - - 3 - - - true - - - true - - true - ПользовательИБЯзык @@ -2390,6 +2379,40 @@ <common>true</common> </edit> </columns> + <columns> + <name>ЭтоНедоступнаяРоль</name> + <title> + <key>ru</key> + <value>Это недоступная роль</value> + + 6 + + Boolean + + + true + + + true + + + + ЭтоНесуществующаяРоль + + <key>ru</key> + <value>Это несуществующая роль</value> + + 7 + + Boolean + + + true + + + true + + ЗапретРедактированияРолей @@ -2736,6 +2759,37 @@ true + + ПользовательИБПароль + + <key>ru</key> + <value>Пользователь ИБПароль</value> + + 38 + + + true + + + true + + true + + + ПользовательИБСтарыйПароль + + <key>ru</key> + <value>Пользователь ИБСтарый пароль</value> + + 39 + + + true + + + true + + ПоказатьТолькоВыбранныеРоли @@ -2860,6 +2914,7 @@ </handler> </action> <functionalOptions>FunctionalOption.ИспользоватьВнешнихПользователей</functionalOptions> + <modifiesStoredData>true</modifiesStoredData> <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Help/ru.html index 83cffca58..12f647f24 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Описание свойств внешнего пользователя.</p> <p>Для <a href="#1">ввода или редактирования</a> сведений о внешнем пользователе необходимы права администрирования или права ответственного за список <a href="Catalog.ВнешниеПользователи/Help">внешних пользователей</a>. </p> <p><a href="#2">Вход в программу</a> разрешает только администратор. </p> @@ -15,7 +15,7 @@ </li><li>цифры </li><li>символы (подчеркивание, скобки и т.д.) </li></ul></li></ul><p>Нежелательно, чтобы пароль совпадал с именем пользователя, полностью состоял из цифр, содержал понятные слова, содержал чередующиеся группы символов. </p> <ul><li>Примеры хороших паролей:<br>“nj7{jhjibq*Gfhjkm, <br>F5”njnGhkmNj;t{HI. -</li><li>Примеры неудачных паролей: <br>Иванов, <br>qwerty, <br>12345678, <br>123123123.</li></ul><h3><a name="#1">Ввод внешнего пользователя</a> (при наличии права)</h3> +</li><li>Примеры неудачных паролей: <br>Иванов, <br>qwerty, <br>12345678, <br>123123123.</li></ul><h3><a name="1">Ввод внешнего пользователя</a> (при наличии права)</h3> <p>Если внешнего пользователя вводит ответственный за список и заполняет имя для входа, тогда администратору будет показана рекомендация проверить настройки для входа. После разрешения входа, рекомендация скрывается, а ответственный более не может изменить настройки для входа, кроме отключения разрешения на вход в программу. Для того чтобы посмотреть всех таких внешних пользователей, которых подготовил ответственный, можно установить отбор в списке по полю <strong>Подготовлен</strong>.</p> <ul><li>Внешний пользователь связан с каким-то объектом программы (например, контрагентом, сотрудником и т.п.), указанным в поле <strong>Объект</strong>. При вводе по кнопке <img src="CommonPicture.СостояниеПользователя08"></img> <strong>Внешний доступ</strong> (рекомендуется) поле <strong>Объект</strong> заполняется автоматически. </li><li>При вводе внешнего пользователя по команде <strong>Создать</strong> из <a href="Catalog.ВнешниеПользователи/Help">списка внешних пользователей</a> необходимо заполнить поле <strong>Объект</strong> вручную. Для этого нажмите кнопку <img src="StdPicture.InputFieldSelect"></img> <strong>Выбрать</strong>, выберите список программы, затем выберите в этом списке нужный объект, с которым связан внешний пользователь. Поле <strong>Объект</strong> будет отображаться в программе в различных списках в качестве полного имени внешнего пользователя.  @@ -33,7 +33,7 @@ </li><li>Для того чтобы быстро отменить свой выбор, нажмите <strong>Исключить из всех групп</strong>.</li></ul><h3>Права доступа внешнего пользователя </h3> <ul><li>Права доступа могут также настраиваться  ответственным за список внешних пользователей, при этом часть прав доступа (административные права) для него закрыта. В зависимости от программы для настройки прав доступа предусмотрена одна из возможностей: <ul><li>Нажмите <strong>Права доступа</strong> на панели навигации, для того чтобы включить внешнего пользователя в одну или несколько <a href="CommonForm.ПраваДоступа/Help">групп доступа</a>. Их необходимо выбрать из <a href="Catalog.ГруппыДоступа/Help">списка</a>. -</li><li>В списке <strong>Разрешенные действия (роли)</strong> можно назначить внешнему пользователю одну или несколько ролей, которые в совокупности образуют его персональные <a href="CommonForm.ПраваДоступаУпрощенно/Help">настройки прав доступа</a>. Роли могут соответствовать как различным должностным обязанностям (или видам деятельности) пользователей, так и более мелким функциям. Выберите нужные роли с помощью флажков.</li></ul></li></ul><h3><a name="#2">Разрешение входа в программу (только для администратора)</a></h3> +</li><li>В списке <strong>Разрешенные действия (роли)</strong> можно назначить внешнему пользователю одну или несколько ролей, которые в совокупности образуют его персональные <a href="CommonForm.ПраваДоступаУпрощенно/Help">настройки прав доступа</a>. Роли могут соответствовать как различным должностным обязанностям (или видам деятельности) пользователей, так и более мелким функциям. Выберите нужные роли с помощью флажков.</li></ul></li></ul><h3><a name="2">Разрешение входа в программу (только для администратора)</a></h3> <ul><li>Для входа внешнего пользователя в программу нужно включить флажок <strong>Вход в программу разрешен</strong>. При этом должны быть заданы необходимые свойства: имя (для входа), пароль и другие параметры авторизации. </li><li> <div>В программе возможно прекращение работы пользователей, которым сняли флажок <strong>Вход в программу разрешен</strong>, интерактивно или программно в связи с окончанием срока действия.</div> diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl index 24231aead..810fd1cac 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl @@ -121,7 +121,9 @@ КонецЕсли; Если ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда - ТолькоПросмотр = Истина; + Элементы.ГруппаШапка.ТолькоПросмотр = Истина; + Элементы.СтраницаДополнительныеРеквизиты.ТолькоПросмотр = Истина; + Элементы.СтраницаКомментарий.ТолькоПросмотр = Истина; КонецЕсли; КонецПроцедуры @@ -245,19 +247,14 @@ Объект.Наименование = ТекущееПредставлениеОбъектаАвторизации; ТекущийОбъект.Наименование = ТекущееПредставлениеОбъектаАвторизации; - Если ТребуетсяЗаписьПользователяИБ(ЭтотОбъект) - Или ПараметрыЗаписи.Свойство("КраткоеИмя") Тогда + Если ТребуетсяЗаписьПользователяИБ(ЭтотОбъект) Тогда ОписаниеПользователяИБ = ОписаниеПользователяИБ(); - Если ПараметрыЗаписи.Свойство("КраткоеИмя") Тогда - ОписаниеПользователяИБ.Вставить("Имя", ПараметрыЗаписи.КраткоеИмя); - КонецЕсли; Если ЗначениеЗаполнено(Объект.ИдентификаторПользователяИБ) Тогда ОписаниеПользователяИБ.Вставить("УникальныйИдентификатор", Объект.ИдентификаторПользователяИБ); КонецЕсли; ОписаниеПользователяИБ.Вставить("Действие", "Записать"); - ОписаниеПользователяИБ.Вставить("ЗаполнитьПароль", Истина); ТекущийОбъект.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ); КонецЕсли; @@ -334,10 +331,6 @@ ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтотОбъект); - Если ПараметрыЗаписи.Свойство("СменитьПарольПослеЗаписи") Тогда - ПодключитьОбработчикОжидания("СменитьПарольНачало", 0.1, Истина); - КонецЕсли; - КонецПроцедуры &НаСервере @@ -371,6 +364,34 @@ КонецЕсли; КонецЕсли; + // Проверка наличия ролей в метаданных. + Если Не Элементы.Роли.ТолькоПросмотр Тогда + Ошибки = Неопределено; + ЭлементыДерева = Роли.ПолучитьЭлементы(); + Для Каждого Строка Из ЭлементыДерева Цикл + Если Не Строка.Пометка Тогда + Продолжить; + КонецЕсли; + Если Строка.ЭтоНесуществующаяРоль Тогда + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "Роли[%1].РолиСиноним", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" не найдена в метаданных.'"), Строка.Синоним), + "Роли", + ЭлементыДерева.Индекс(Строка), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %%1 не найдена в метаданных.'"), Строка.Синоним)); + КонецЕсли; + Если Строка.ЭтоНедоступнаяРоль Тогда + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "Роли[%1].РолиСиноним", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" недоступна для внешних пользователей.'"), Строка.Синоним), + "Роли", + ЭлементыДерева.Индекс(Строка), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %%1 недоступна для внешних пользователей.'"), Строка.Синоним)); + КонецЕсли; + КонецЦикла; + ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки, Отказ); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); МодульУправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты); @@ -565,51 +586,12 @@ &НаКлиенте Процедура СменитьПароль(Команда) - Если Не Модифицированность - И ЗначениеЗаполнено(Объект.Ссылка) - И ПользовательИБСуществует Тогда - - СменитьПарольНачало(); - Возврат; - КонецЕсли; + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ВернутьПарольБезУстановки", Истина); + ДополнительныеПараметры.Вставить("СтарыйПароль", ПользовательИБСтарыйПароль); - Контекст = Новый Структура; - - Если Не ЗначениеЗаполнено(ТекущееПредставлениеОбъектаАвторизации) - Или ЗначениеЗаполнено(Объект.Ссылка) - И ПользовательИБСуществует Тогда - - СменитьПарольПослеПодтвержденияЗаписи("Записать", Контекст); - Возврат; - КонецЕсли; - - // Текст вопроса в стиле 1С:Предприятия. - Если ЗначениеЗаполнено(ПользовательИБИмя) Тогда - ТекстВопроса = НСтр("ru = 'Установка пароля возможна только после записи данных.'"); - Иначе - Контекст.Вставить("КраткоеИмя", - ПользователиСлужебныйКлиентСервер.ПолучитьКраткоеИмяПользователяИБ( - ТекущееПредставлениеОбъектаАвторизации)); - - Если ЗначениеЗаполнено(Объект.Ссылка) Тогда - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Установка пароля возможна только после записи поля - |Имя (для входа), которое будет установлено: ""%1"".'"), - Контекст.КраткоеИмя); - Иначе - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Установка пароля возможна только после записи данных, - |при этом будет установлено Имя (для входа): ""%1"".'"), - Контекст.КраткоеИмя); - КонецЕсли; - КонецЕсли; - - Кнопки = Новый СписокЗначений; - Кнопки.Добавить("Записать", НСтр("ru = 'Записать'")); - Кнопки.Добавить("НеЗаписывать", НСтр("ru = 'Не записывать'")); - - ПоказатьВопрос(Новый ОписаниеОповещения("СменитьПарольПослеПодтвержденияЗаписи", ЭтотОбъект, Контекст), - ТекстВопроса, Кнопки); + ПользователиСлужебныйКлиент.ОткрытьФормуСменыПароля(Объект.Ссылка, Новый ОписаниеОповещения( + "СменитьПарольПослеПолученияПароля", ЭтотОбъект), ДополнительныеПараметры); КонецПроцедуры @@ -700,40 +682,16 @@ // Продолжение процедуры СменитьПароль. &НаКлиенте -Процедура СменитьПарольПослеПодтвержденияЗаписи(Ответ, Контекст) Экспорт - - Если Ответ <> "Записать" Тогда - Возврат; - КонецЕсли; - - ПараметрыЗаписи = Новый Структура("СменитьПарольПослеЗаписи"); - - Если Контекст.Свойство("КраткоеИмя") Тогда - ПараметрыЗаписи.Вставить("КраткоеИмя", Контекст.КраткоеИмя); - КонецЕсли; - - Записать(ПараметрыЗаписи); - -КонецПроцедуры - -// Продолжение процедуры СменитьПароль. -&НаКлиенте -Процедура СменитьПарольНачало() - - ПользователиСлужебныйКлиент.ОткрытьФормуСменыПароля(Объект.Ссылка, Новый ОписаниеОповещения( - "СменитьПарольПослеСменыПароля", ЭтотОбъект)); - -КонецПроцедуры - -// Продолжение процедуры СменитьПароль. -&НаКлиенте -Процедура СменитьПарольПослеСменыПароля(Результат, Контекст) Экспорт +Процедура СменитьПарольПослеПолученияПароля(Результат, Контекст) Экспорт Если Не ЗначениеЗаполнено(Результат) Тогда Возврат; КонецЕсли; - Прочитать(); + ПользовательИБПароль = Результат.НовыйПароль; + ПользовательИБСтарыйПароль = Результат.СтарыйПароль; + + УстановитьНаличиеПароля(ЭтотОбъект, ЗначениеЗаполнено(ПользовательИБПароль)); КонецПроцедуры @@ -779,7 +737,7 @@ ПользователиСлужебный.ПриОпределенииДействийВФорме(Объект.Ссылка, ДействияВФорме); // Проверка имен действий в форме. - Если Найти(", Просмотр, Редактирование,", ", " + ДействияВФорме.Роли + ",") = 0 Тогда + Если СтрНайти(", Просмотр, Редактирование,", ", " + ДействияВФорме.Роли + ",") = 0 Тогда ДействияВФорме.Роли = ""; ИначеЕсли ДействияВФорме.Роли = "Редактирование" @@ -788,21 +746,21 @@ ДействияВФорме.Роли = "Просмотр"; КонецЕсли; - Если Найти(", Просмотр, ПросмотрВсех, Редактирование, РедактированиеСвоих, РедактированиеВсех,", + Если СтрНайти(", Просмотр, ПросмотрВсех, Редактирование, РедактированиеСвоих, РедактированиеВсех,", ", " + ДействияВФорме.СвойстваПользователяИБ + ",") = 0 Тогда ДействияВФорме.СвойстваПользователяИБ = ""; Иначе // Поддержка обратной совместимости. - Если Найти(ДействияВФорме.СвойстваПользователяИБ, "Просмотр") Тогда + Если СтрНайти(ДействияВФорме.СвойстваПользователяИБ, "Просмотр") Тогда ДействияВФорме.СвойстваПользователяИБ = "Просмотр"; - ИначеЕсли Найти(ДействияВФорме.СвойстваПользователяИБ, "Редактирование") Тогда + ИначеЕсли СтрНайти(ДействияВФорме.СвойстваПользователяИБ, "Редактирование") Тогда ДействияВФорме.СвойстваПользователяИБ = "Редактирование"; КонецЕсли; КонецЕсли; - Если Найти(", Просмотр, Редактирование,", ", " + ДействияВФорме.СвойстваЭлемента + ",") = 0 Тогда + Если СтрНайти(", Просмотр, Редактирование,", ", " + ДействияВФорме.СвойстваЭлемента + ",") = 0 Тогда ДействияВФорме.СвойстваЭлемента = ""; КонецЕсли; @@ -848,8 +806,8 @@ Если УровеньДоступа.НастройкиДляВхода Тогда Результат.Вставить("АутентификацияСтандартная", ПользовательИБАутентификацияСтандартная); - Результат.Вставить("Имя", ПользовательИБИмя); Результат.Вставить("Пароль", ПользовательИБПароль); + Результат.Вставить("Имя", ПользовательИБИмя); Результат.Вставить("АутентификацияOpenID", ПользовательИБАутентификацияOpenID); КонецЕсли; КонецЕсли; @@ -1267,8 +1225,7 @@ Или УровеньДоступа.ИзменениеТекущего И Не ПользовательИБЗапрещеноИзменятьПароль); - ОбработатьИнтерфейсРолей( - "УстановитьТолькоПросмотрРолей", + ОбработатьИнтерфейсРолей("УстановитьТолькоПросмотрРолей", ЗапретРедактированияРолей Или ДействияВФорме.Роли <> "Редактирование" Или Не Объект.УстановитьРолиНепосредственно @@ -1353,11 +1310,10 @@ Процедура ОбработатьИнтерфейсРолей(Действие, ОсновнойПараметр = Неопределено) ПараметрыДействия = Новый Структура; - ПараметрыДействия.Вставить("ОсновнойПараметр", ОсновнойПараметр); - ПараметрыДействия.Вставить("Форма", ЭтотОбъект); - ПараметрыДействия.Вставить("КоллекцияРолей", ПользовательИБРоли); - ПараметрыДействия.Вставить("ТипПользователей", Перечисления.ТипыПользователей.ВнешнийПользователь); - ПараметрыДействия.Вставить("СкрытьРольПолныеПрава", Истина); + ПараметрыДействия.Вставить("ОсновнойПараметр", ОсновнойПараметр); + ПараметрыДействия.Вставить("Форма", ЭтотОбъект); + ПараметрыДействия.Вставить("КоллекцияРолей", ПользовательИБРоли); + ПараметрыДействия.Вставить("НазначениеРолей", "ДляВнешнихПользователей"); ПользователиСлужебный.ОбработатьИнтерфейсРолей(Действие, ПараметрыДействия); diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html b/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html index 9bc54667b..a4601a60f 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для ведения пользователей, которые работают с программой "извне". Их доступ, как правило, сильно ограничен. Внешние пользователи не принимают активного участия в процессах учета, работают обособленно, не взаимодействуют между собой. Например, это сотрудники в кадровой базе, покупатели в интернет-магазине, респонденты в базе для анкетирования.</p> <p>Открыть список внешних пользователей можно из раздела <strong>Администрирование - Настройки пользователей и прав</strong>. Также можно его открыть из раздела <strong>Анкетирование</strong> (<strong>Управление доступом</strong>).</p> <p>Внешние пользователи программы разного типа, поэтому информация о них хранится в различных списках программы.</p> @@ -32,7 +32,7 @@ <ul><li> <div>Выберите группу в левой части списка, воспользуйтесь командой контекстного меню по правой кнопке мыши <strong>Переместить в группу</strong>. </div> </li><li> -<div>Выберите группу для перемещения.</div></li></ul><h3><a name="#S">Подбор участников групп</a>ы внешних пользователей</h3> +<div>Выберите группу для перемещения.</div></li></ul><h3><a name="S">Подбор участников групп</a>ы внешних пользователей</h3> <ul><li>В случае если из списка внешних пользователей производится подбор участников группы, он состоит из трех частей.  Слева в верхней части списка отображаются группы, в нижней части внешние пользователи выбранной группы. В правой части списка отображаются выбранные пользователи. </li><li> <div>Для удобства подбора в верхней левой части списка показаны уже имеющиеся группы внешних пользователей. Выбрав нужную группу (или группу <strong>Все внешние пользователи</strong>), можно просмотреть пользователей этой группы в нижней левой части списка.</div> diff --git a/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl b/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl index 622dbc44d..1b155d4e2 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl @@ -2,9 +2,11 @@ #Область ПрограммныйИнтерфейс -// Возвращает список реквизитов, которые не нужно редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые не рекомендуется редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт НеРедактируемыеРеквизиты = Новый Массив; @@ -56,7 +58,7 @@ ОбъектАвторизацииИспользуется = ПользователиСлужебныйВызовСервера.ОбъектАвторизацииИспользуется( Параметры.ОбъектАвторизации, - , + Неопределено, НайденныйВнешнийПользователь, ЕстьПравоДобавленияВнешнегоПользователя); diff --git a/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl b/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl index 4a0981489..da802259d 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl @@ -1,5 +1,7 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ОписаниеПеременных + Перем ПараметрыОбработкиПользователяИБ; // Параметры, заполняемые при обработке пользователя ИБ. // Используются в обработчике события ПриЗаписи. @@ -9,9 +11,12 @@ Перем СтарыйОбъектАвторизации; // Значений объекта авторизации до изменения. // Используются в обработчике события ПриЗаписи. +#КонецОбласти + // *Область ПрограммныйИнтерфейс // // Программный интерфейс объекта реализован через ДополнительныеСвойства: +// // ОписаниеПользователяИБ - Структура, как и в модуле объекта справочника Пользователи. // // *КонецОбласти diff --git a/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo b/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo index 8fcd2f6a0..a81aad5aa 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo +++ b/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo @@ -454,6 +454,10 @@ <comment>Внешний пользователь объекта авторизации</comment> <group>FormCommandBarImportant</group> <representation>Picture</representation> + <toolTip> + <key>ru</key> + <value>Внешний пользователь (для входа в программу)</value> + </toolTip> <picture xsi:type="core:PictureRef"> <picture>CommonPicture.СостояниеПользователя08</picture> </picture> diff --git a/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ManagerModule.bsl b/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ManagerModule.bsl index 2dd1549d7..7ae895054 100644 --- a/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ManagerModule.bsl @@ -5,9 +5,11 @@ //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. -// Возвращает список реквизитов, которые разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ManagerModule.bsl index 6b0f37643..c870ef204 100644 --- a/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ManagerModule.bsl @@ -2,9 +2,11 @@ #Область ПрограммныйИнтерфейс -// Возвращает список реквизитов, которые разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Возврат ПрисоединенныеФайлы.РеквизитыРедактируемыеВГрупповойОбработке(); diff --git a/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ВстречаПрисоединенныеФайлы.mdo b/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ВстречаПрисоединенныеФайлы.mdo index a238f73f8..f32f5ef36 100644 --- a/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ВстречаПрисоединенныеФайлы.mdo +++ b/SSL/src/Catalogs/ВстречаПрисоединенныеФайлы/ВстречаПрисоединенныеФайлы.mdo @@ -656,6 +656,43 @@ <dataHistory>Use</dataHistory> <fullTextSearch>Use</fullTextSearch> </attributes> + <attributes uuid="e72e59c0-391d-497e-9407-063e0edf573e"> + <name>ДатаПроверкиПодписи</name> + <synonym> + <key>ru</key> + <value>Дата проверки подписи</value> + </synonym> + <type> + <types>Date</types> + <dateQualifiers/> + </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> + <attributes uuid="ae8a1e69-ee1c-4efa-8d63-0279b18617f6"> + <name>ПодписьВерна</name> + <synonym> + <key>ru</key> + <value>Подпись верна</value> + </synonym> + <type> + <types>Boolean</types> + </type> + <toolTip> + <key>ru</key> + <value>Результат последней проверки подписи.</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + <fullTextSearch>Use</fullTextSearch> + </attributes> </tabularSections> <tabularSections uuid="a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2"> <producedTypes> diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form index 9db0fb563..8076e5c55 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form @@ -1067,6 +1067,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1517,6 +1518,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1592,6 +1594,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -1843,6 +1846,40 @@ <common>true</common> </edit> </columns> + <columns> + <name>ЭтоНедоступнаяРоль</name> + <title> + <key>ru</key> + <value>Это недоступная роль</value> + + 6 + + Boolean + + + true + + + true + + + + ЭтоНесуществующаяРоль + + <key>ru</key> + <value>Это несуществующая роль</value> + + 7 + + Boolean + + + true + + + true + + ПоказатьПодсистемыРолей diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html index 34bb211fd..3c6e5ed67 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 9c81f8493..ff6192965 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl @@ -18,9 +18,13 @@ // Подготовка вспомогательных данных. Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда + ВсеОбъектыАвторизации = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Родитель, + "ВсеОбъектыАвторизации"); + ВсеОбъектыАвторизации = ?(ВсеОбъектыАвторизации = Неопределено, Ложь, ВсеОбъектыАвторизации); - Если Объект.Родитель = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи - Или ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Родитель, "ВсеОбъектыАвторизации") = Истина Тогда + Если ВсеОбъектыАвторизации + Или Объект.Родитель = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда + Объект.Родитель = Справочники.ГруппыВнешнихПользователей.ПустаяСсылка(); КонецЕсли; @@ -96,7 +100,7 @@ Процедура ПриЧтенииНаСервере(ТекущийОбъект) ОбработатьИнтерфейсРолей("ЗаполнитьРоли", Объект.Роли); - ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриСозданииФормы", Истина); + ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриЧтенииНаСервере", Истина); КонецПроцедуры @@ -133,19 +137,30 @@ // Проверка наличия ролей в метаданных. ПроверенныеРеквизитыОбъекта.Добавить("Роли.Роль"); - - ЭлементыДерева = Роли.ПолучитьЭлементы(); - Для каждого Строка Из ЭлементыДерева Цикл - Если Строка.Пометка И Лев(Строка.Синоним, 1) = "?" Тогда - ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, - "Роли[%1].РолиСиноним", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" не найдена в метаданных.'"), Строка.Синоним), - "Роли", - ЭлементыДерева.Индекс(Строка), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %%1 не найдена в метаданных.'"), Строка.Синоним)); - КонецЕсли; - КонецЦикла; - + Если Не Элементы.Роли.ТолькоПросмотр Тогда + ЭлементыДерева = Роли.ПолучитьЭлементы(); + Для Каждого Строка Из ЭлементыДерева Цикл + Если Не Строка.Пометка Тогда + Продолжить; + КонецЕсли; + Если Строка.ЭтоНесуществующаяРоль Тогда + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "Роли[%1].РолиСиноним", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" не найдена в метаданных.'"), Строка.Синоним), + "Роли", + ЭлементыДерева.Индекс(Строка), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %%1 не найдена в метаданных.'"), Строка.Синоним)); + КонецЕсли; + Если Строка.ЭтоНедоступнаяРоль Тогда + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "Роли[%1].РолиСиноним", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" недоступна для внешних пользователей.'"), Строка.Синоним), + "Роли", + ЭлементыДерева.Индекс(Строка), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %%1 недоступна для внешних пользователей.'"), Строка.Синоним)); + КонецЕсли; + КонецЦикла; + КонецЕсли; ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки, Отказ); НепроверяемыеРеквизиты.Добавить("Объект"); @@ -325,7 +340,7 @@ Процедура ВыбратьНазначение(Команда) ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораНазначения", ЭтотОбъект); - ПользователиСлужебныйКлиент.ВыбратьНазначение(ЭтотОбъект, Нстр("ru = 'Выбор вида пользователей'"), Ложь, Ложь, ОписаниеОповещения); + ПользователиСлужебныйКлиент.ВыбратьНазначение(ЭтотОбъект, НСтр("ru = 'Выбор вида пользователей'"), Ложь, Ложь, ОписаниеОповещения); КонецПроцедуры @@ -464,15 +479,15 @@ ПользователиСлужебный.ПриОпределенииДействийВФорме(Объект.Ссылка, ДействияВФорме); // Проверка имен действий в форме. - Если Найти(", Просмотр, Редактирование,", ", " + ДействияВФорме.Роли + ",") = 0 Тогда + Если СтрНайти(", Просмотр, Редактирование,", ", " + ДействияВФорме.Роли + ",") = 0 Тогда ДействияВФорме.Роли = ""; ИначеЕсли ПользователиСлужебный.ЗапретРедактированияРолей() Тогда ДействияВФорме.Роли = ""; КонецЕсли; - Если Найти(", Просмотр, Редактирование,", ", " + ДействияВФорме.СоставГруппы + ",") = 0 Тогда + Если СтрНайти(", Просмотр, Редактирование,", ", " + ДействияВФорме.СоставГруппы + ",") = 0 Тогда ДействияВФорме.СвойстваПользователяИБ = ""; КонецЕсли; - Если Найти(", Просмотр, Редактирование,", ", " + ДействияВФорме.СвойстваЭлемента + ",") = 0 Тогда + Если СтрНайти(", Просмотр, Редактирование,", ", " + ДействияВФорме.СвойстваЭлемента + ",") = 0 Тогда ДействияВФорме.СвойстваЭлемента = ""; КонецЕсли; @@ -731,11 +746,10 @@ Процедура ОбработатьИнтерфейсРолей(Действие, ОсновнойПараметр = Неопределено) ПараметрыДействия = Новый Структура; - ПараметрыДействия.Вставить("ОсновнойПараметр", ОсновнойПараметр); - ПараметрыДействия.Вставить("Форма", ЭтотОбъект); - ПараметрыДействия.Вставить("КоллекцияРолей", КоллекцияРолей); - ПараметрыДействия.Вставить("ТипПользователей", Перечисления.ТипыПользователей.ВнешнийПользователь); - ПараметрыДействия.Вставить("СкрытьРольПолныеПрава", Истина); + ПараметрыДействия.Вставить("ОсновнойПараметр", ОсновнойПараметр); + ПараметрыДействия.Вставить("Форма", ЭтотОбъект); + ПараметрыДействия.Вставить("КоллекцияРолей", КоллекцияРолей); + ПараметрыДействия.Вставить("НазначениеРолей", "ДляВнешнихПользователей"); ПользователиСлужебный.ОбработатьИнтерфейсРолей(Действие, ПараметрыДействия); diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Help/ru.html b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Help/ru.html index 69edb6e91..68f036fc8 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 bf817c7c5..2d0d1fa2c 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ManagerModule.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ManagerModule.bsl @@ -2,9 +2,11 @@ #Область ПрограммныйИнтерфейс -// Возвращает список реквизитов, которые не нужно редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые не рекомендуется редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт НеРедактируемыеРеквизиты = Новый Массив; diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl index 8bb0c2e7d..95973cf13 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl @@ -1,5 +1,7 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ОписаниеПеременных + Перем СтарыйРодитель; // Значение родителя группы до изменения для использования // в обработчике события ПриЗаписи. @@ -18,6 +20,8 @@ Перем ЭтоНовый; // Показывает, что был записан новый объект. // Используются в обработчике события ПриЗаписи. +#КонецОбласти + #Область ОбработчикиСобытий Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) @@ -139,7 +143,7 @@ Если ОбщегоНазначенияКлиентСервер.СпискиЗначенийИдентичны(НазначениеВсеВнешниеПользователи, МассивНазначения) Тогда ВызватьИсключение - НСтр("ru = 'Невозможно создать группу, совпадающую по назначению с предопределенной группой ""Все внешние пользователи"".'"); + НСтр("ru = 'Невозможно создать группу, совпадающую по назначению с предопределенной группой ""Все внешние пользователи"".'"); КонецЕсли; Запрос = Новый Запрос; diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаВыбораГруппы/Help/ru.html b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаВыбораГруппы/Help/ru.html index 713921871..c74094ad1 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/ФормаГруппы/Help/ru.html b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Help/ru.html index 8919c52c0..ce19b0d0c 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

    diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Form.form index 9a3e90dc0..37072e22d 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Form.form @@ -420,6 +420,10 @@ Drag СписокПеретаскивание + + BeforeRowChange + СписокПередНачаломИзменения + СписокСтрокаПоиска 44 @@ -660,6 +664,9 @@ true + + Items.Список.CurrentData.Описание + Left ОписаниеExtendedTooltip @@ -720,6 +727,9 @@ true + + Список.IsFolder + Список.Ref diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Help/ru.html b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Help/ru.html index 85e00ff3b..75f0bae75 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

    @@ -13,6 +13,6 @@
    Ответственный - в этой колонке выводится пользователь, ответственный за данную группу доступа.

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

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

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

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

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

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

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl index be46042f6..0d666ba7d 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl @@ -157,6 +157,23 @@ КонецПроцедуры +&НаКлиенте +Процедура СписокПередНачаломИзменения(Элемент, Отказ) + + ТекущиеДанные = Элемент.ТекущиеДанные; + + Если ТекущиеДанные = Неопределено + Или ТекущиеДанные.ЭтоГруппа Тогда + Возврат; + КонецЕсли; + + Отказ = Истина; + + ПараметрыФормы = Новый Структура("Ключ", ТекущиеДанные.Ссылка); + ОткрытьФорму("Справочник.ГруппыДоступа.ФормаОбъекта", ПараметрыФормы, Элемент); + +КонецПроцедуры + &НаКлиенте Процедура СписокПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form index 2d7133883..07ec118fa 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Form.form @@ -767,6 +767,7 @@ Vertical auto + false @@ -1509,6 +1510,7 @@ Vertical auto + false @@ -1586,6 +1588,7 @@ Vertical auto + false true diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Help/ru.html index ce304fb47..38bdffcdb 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

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

    +
  • На вкладке Описание можно ввести подробную информацию о группе доступа.
  • Участники

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

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

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

    • На вкладке Ограничения доступа необходимо указать дополнительные настройки прав доступа. В зависимости от настроек профиля, в группе доступа ограничения доступа только уточняются. Иногда ограничения доступа в профиле настроены так, что уточнений не требуется. В таких случаях вкладка Ограничения доступа становится недоступной.
    • Состав видов доступа, перечисленных на этой вкладке, зависит от профиля, выбранного в поле Профиль. Кроме того, профиль также определяет, как именно действует настройка вида доступа: она разрешает только просмотр или также включает возможность редактирования данных.  Например, в случае если профиль групп доступа включает в себя роль для чтения документов Поступление товаров, то пользователи получают возможность просматривать документы по заданным организациям. Если же в профиле содержится роль для добавления и изменения, то появляется возможность редактировать такие документы.
    • С помощью поля Вид доступа можно задать границы области данных, с которой разрешено работать участникам группы доступа. Вид доступа - это некоторое правило, по которому "разрешается" доступ к данным программы. Например, с помощью вида доступа Организации можно разрешить работать пользователям только с документами  по конкретным организациям, или наоборот, скрыть от них документы некоторых организаций. diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl index 48b7efee8..df8b75adb 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl @@ -193,8 +193,8 @@ УстановитьПривилегированныйРежим(Истина); - ПрофильПомеченНаУдаление = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( - Объект.Профиль, "ПометкаУдаления") = Истина; + ПрофильПомеченНаУдаление = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Профиль, "ПометкаУдаления"); + ПрофильПомеченНаУдаление = ?(ПрофильПомеченНаУдаление = Неопределено, Ложь, ПрофильПомеченНаУдаление); УстановитьПривилегированныйРежим(Ложь); @@ -1285,7 +1285,9 @@ ПараметрыФормы.Вставить("Назначение", Назначение.ВыгрузитьЗначения()); - Если СправочникВнешниеПользователиДоступен Тогда + Если Не ИспользоватьВнешнихПользователей Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Ведение внешних пользователей отключено в настройках программы.'")); + ИначеЕсли СправочникВнешниеПользователиДоступен Тогда ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаВыбора", ПараметрыФормы, Элементы.Пользователи); Иначе ПоказатьПредупреждение(, НСтр("ru = 'Недостаточно прав для выбора внешних пользователей.'")); diff --git a/SSL/src/Catalogs/ГруппыДоступа/Help/ru.html b/SSL/src/Catalogs/ГруппыДоступа/Help/ru.html index e962223a1..0102c1750 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 5f2f3ddc0..b36a56252 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/ManagerModule.bsl @@ -2,9 +2,11 @@ #Область ПрограммныйИнтерфейс -// Возвращает список реквизитов, которые не нужно редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые не рекомендуется редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт НеРедактируемыеРеквизиты = Новый Массив; @@ -92,13 +94,13 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | ГруппыДоступа.Ссылка + | ГруппыДоступа.Ссылка КАК Ссылка |ИЗ | Справочник.ГруппыДоступа КАК ГруппыДоступа |ГДЕ - | (ГруппыДоступа.Профиль = &Профиль - | ИЛИ &Профиль = ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) - | И ГруппыДоступа.Ссылка = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.Администраторы))"; + | НЕ(ГруппыДоступа.Профиль <> &Профиль + | И НЕ(&Профиль = ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) + | И ГруппыДоступа.Ссылка = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.Администраторы)))"; Запрос.УстановитьПараметр("Профиль", Профиль.Ссылка); Выборка = Запрос.Выполнить().Выбрать(); @@ -179,7 +181,7 @@ // а функция вернет Неопределено, если родитель не найден. // // Возвращаемое значение: -// СправочникСсылка.ГруппыДоступа +// СправочникСсылка.ГруппыДоступа. // Функция РодительПерсональныхГруппДоступа(Знач НеСоздавать = Ложь, НаименованиеГруппыЭлементов = Неопределено) Экспорт diff --git a/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl index ca8ac0e9d..91ba4403b 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl @@ -1,5 +1,7 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ОписаниеПеременных + Перем СтарыйПрофиль; // Профиль группы доступа до изменения // для использования в обработчике события ПриЗаписи. @@ -9,6 +11,8 @@ Перем СтарыеУчастники; // Участники группы доступа до изменения // для использования в обработчике события ПриЗаписи. +#КонецОбласти + #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) @@ -90,14 +94,15 @@ // При снятии пометки удаления с группы доступа выполняется // снятие пометки удаления с профиля этой группы доступа. - Если НЕ ПометкаУдаления - И СтараяПометкаУдаления = Истина - И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Профиль, "ПометкаУдаления") = Истина Тогда - - ЗаблокироватьДанныеДляРедактирования(Профиль); - ПрофильОбъект = Профиль.ПолучитьОбъект(); - ПрофильОбъект.ПометкаУдаления = Ложь; - ПрофильОбъект.Записать(); + Если НЕ ПометкаУдаления И СтараяПометкаУдаления = Истина Тогда + ПометкаУдаленияПрофиля = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Профиль, "ПометкаУдаления"); + ПометкаУдаленияПрофиля = ?(ПометкаУдаленияПрофиля = Неопределено, Ложь, ПометкаУдаленияПрофиля); + Если ПометкаУдаленияПрофиля Тогда + ЗаблокироватьДанныеДляРедактирования(Профиль); + ПрофильОбъект = Профиль.ПолучитьОбъект(); + ПрофильОбъект.ПометкаУдаления = Ложь; + ПрофильОбъект.Записать(); + КонецЕсли; КонецЕсли; КонецЕсли; diff --git a/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ManagerModule.bsl b/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ManagerModule.bsl index db7c731b7..eaf78fd76 100644 --- a/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ManagerModule.bsl +++ b/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ManagerModule.bsl @@ -2,9 +2,11 @@ #Область ПрограммныйИнтерфейс -// Возвращает список реквизитов, которые не нужно редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые не рекомендуется редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Form.form index 156eea4ee..a5da8b719 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Form.form @@ -854,6 +854,7 @@ Vertical auto + false @@ -930,6 +931,7 @@ Vertical auto + false true diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Help/ru.html index 5035e46d1..e125956f5 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 4c072e5a4..e0b2168b2 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 2cf971619..787e099b0 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl @@ -1,5 +1,7 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ОписаниеПеременных + Перем СтарыйРодитель; // Значение родителя группы до изменения для использования // в обработчике события ПриЗаписи. @@ -10,6 +12,8 @@ Перем ЭтоНовый; // Показывает, что был записан новый объект. // Используются в обработчике события ПриЗаписи. +#КонецОбласти + #Область ОбработчикиСобытий Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Form.form index 90d681338..0806ce435 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Form.form @@ -6,10 +6,6 @@ ВсеПользователи 1 - - <key>ru</key> - <value>Команды нет в быстром доступе у пользователей</value> - true true @@ -417,7 +413,6 @@ Vertical Auto - NormalSeparation true true auto @@ -430,7 +425,7 @@ 13 <key>ru</key> - <value>Команда есть в быстром доступе у пользователей</value> + <value>Пользователи, для которых видна команда</value> true true @@ -772,6 +767,7 @@ OnCreateAtServer ПриСозданииНаСервере + 60 LockOwner true true @@ -875,7 +871,7 @@ УстановитьДоступДляВсехПользователей <key>ru</key> - <value>Добавить все >></value> + <value>>></value> 2 @@ -897,7 +893,7 @@ УстановитьКомандуДляВыделенныхПользователей <key>ru</key> - <value>Добавить ></value> + <value>></value> 3 @@ -919,7 +915,7 @@ УбратьДоступККомандеУВсехПользователей <key>ru</key> - <value><< Удалить все</value> + <value><<</value> 4 @@ -941,7 +937,7 @@ УбратьДоступККомандеУВыделенныхПользователей <key>ru</key> - <value>< Удалить</value> + <value><</value> 5 diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Module.bsl index d84783583..6814c689a 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Module.bsl @@ -6,7 +6,7 @@ Возврат; КонецЕсли; - Заголовок = СтрШаблон(НСтр("ru = 'Быстрый доступ к команде ""%1""'"), Параметры.ПредставлениеКоманды); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Быстрый доступ к команде ""%1""'"), Параметры.ПредставлениеКоманды); ЗаполнитьТаблицы(); diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl index 789a05c2b..25dad4c69 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl @@ -276,36 +276,41 @@ НачатьТранзакцию(); - Объект = ВыделеннаяСтрока.ПолучитьОбъект(); - Если ВариантПубликации = "Используется" Тогда - Объект.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется; - ИначеЕсли ВариантПубликации = "РежимОтладки" Тогда - Объект.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки; - Иначе - Объект.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена; - КонецЕсли; - - Объект.ДополнительныеСвойства.Вставить("ПроверкаСписка"); - Если Не Объект.ПроверитьЗаполнение() Тогда - ОтменитьТранзакцию(); - Элементы.Список.Обновить(); + Попытка + Объект = ВыделеннаяСтрока.ПолучитьОбъект(); + Если ВариантПубликации = "Используется" Тогда + Объект.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется; + ИначеЕсли ВариантПубликации = "РежимОтладки" Тогда + Объект.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки; + Иначе + Объект.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена; + КонецЕсли; - ПредставлениеОшибки = ""; - МассивСообщений = ПолучитьСообщенияПользователю(Истина); - Для Каждого СообщениеПользователю Из МассивСообщений Цикл - ПредставлениеОшибки = ПредставлениеОшибки + СообщениеПользователю.Текст + Символы.ПС; - КонецЦикла; + Объект.ДополнительныеСвойства.Вставить("ПроверкаСписка"); + Если Не Объект.ПроверитьЗаполнение() Тогда + ОтменитьТранзакцию(); + Элементы.Список.Обновить(); + + ПредставлениеОшибки = ""; + МассивСообщений = ПолучитьСообщенияПользователю(Истина); + Для Каждого СообщениеПользователю Из МассивСообщений Цикл + ПредставлениеОшибки = ПредставлениеОшибки + СообщениеПользователю.Текст + Символы.ПС; + КонецЦикла; + + РазблокироватьДанныеДляРедактирования(ВыделеннаяСтрока); + + СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(РезультатВыполнения, ПредставлениеОшибки); + Возврат РезультатВыполнения; + КонецЕсли; + + Объект.Записать(); РазблокироватьДанныеДляРедактирования(ВыделеннаяСтрока); - - СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(РезультатВыполнения, ПредставлениеОшибки); - Возврат РезультатВыполнения; - КонецЕсли; - - Объект.Записать(); - - ЗафиксироватьТранзакцию(); - РазблокироватьДанныеДляРедактирования(ВыделеннаяСтрока); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецЦикла; diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form index fa48c64dd..5a28fdbbd 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form @@ -307,6 +307,7 @@ Vertical auto + false true @@ -716,6 +717,63 @@ Auto + + КоманднаяПанельОбъектКоманды + 402 + + ВыполнитьКоманду + 404 + true + true + + true + + + ВыполнитьКомандуРасширеннаяПодсказка + 405 + Label + true + true + + Left + + + Form.Command.ВыполнитьКоманду + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель объект команды</value> + + + ru + Командная панель объект команды + + + КоманднаяПанельОбъектКомандыРасширеннаяПодсказка + 403 + Label + true + true + + Left + + + CommandBar + + Left + + ОбъектКоманды 147 @@ -1180,6 +1238,7 @@ Vertical auto + false @@ -1287,6 +1346,7 @@ Page auto + false @@ -1836,6 +1896,7 @@ Vertical auto + false true @@ -1890,6 +1951,7 @@ Vertical auto + false @@ -2008,6 +2070,7 @@ Vertical auto + false @@ -2080,6 +2143,7 @@ Vertical auto + false @@ -2151,6 +2215,7 @@ Vertical auto + false true @@ -2291,6 +2356,7 @@ Vertical auto + false @@ -2372,6 +2438,7 @@ Vertical auto + false true @@ -2411,8 +2478,8 @@ <key>ru</key> <value>Для того, чтобы "изолировать" возможность обращения к внешних ресурсам из кода дополнительного отчета -или обработки только вышеперчисленными операциями, требуется<link int://sp-on> включить использование профилей</> <link int://sp-on>безопасности</>. -При этом для дополинтельного отчета или обработки будет создан "персональный" профиль безопасности, содержащий +или обработки только вышеперечисленными операциями, требуется <link int://sp-on>включить использование профилей безопасности</>. +При этом для дополнительного отчета или обработки будет создан "персональный" профиль безопасности, содержащий разрешения только на выполнение явно одобренных операций и подключение дополнительного отчета или обработке к программе без установки безопасного режима больше не будет требоваться.</value> @@ -2483,7 +2550,7 @@ - ДекормацияРазрешенияСмТакже + ДекорацияРазрешенияСмТакже 311 <key>ru</key> @@ -2495,7 +2562,7 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ДекормацияРазрешенияСмТакжеРасширеннаяПодсказка</name> + <name>ДекорацияРазрешенияСмТакжеРасширеннаяПодсказка</name> <id>313</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -2505,7 +2572,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ДекормацияРазрешенияСмТакжеКонтекстноеМеню</name> + <name>ДекорацияРазрешенияСмТакжеКонтекстноеМеню</name> <id>312</id> <autoFill>true</autoFill> </contextMenu> @@ -2539,6 +2606,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -2744,6 +2812,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -3061,6 +3130,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -4133,10 +4203,6 @@ <value>Настроить быстрый доступ...</value> 3 - - ru - - true @@ -4155,10 +4221,6 @@ Настроить расписание... 4 - - ru - - true @@ -4293,6 +4355,32 @@ DontUse Auto + + ВыполнитьКоманду + + <key>ru</key> + <value>Выполнить</value> + + 10 + + ru + Выполнить выбранную команду обработки (отчета). + + + true + + + StdPicture.GenerateReport + + + + ВыполнитьКоманду + + + TextPicture + DontUse + Auto + diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html index 0e8a2e144..f02a033f9 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

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

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

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

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

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

    Режим работы

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

    Режим работы

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

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

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

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

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

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

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

    • Для обработок и отчетов, которые вызываются из командного интерфейса (не прикрепляются к объектам конфигурации), необходимо указать разделы интерфейса, в которых команды обработок будут доступны через команды Дополнительные отчеты и Дополнительные обработки.
      • Размещение - для выбора разделов нажмите ссылку, которая принимает значение Не определено (если ни одного раздела не выбрано) или перечисляет выбранные разделы. С помощью флажков выберите нужные разделы программы, для подтверждения настройки нажмите ОК.
    • Перечень команд и их настройки могут размещаться на отдельной вкладке Команды. На вкладке выводится:
      • Наименование - полное наименование команды; diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl index dd43079ff..1650e6620 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем КлиентскийКэш; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -150,7 +154,7 @@ Запрос = Новый Запрос; Запрос.УстановитьПараметр("Ссылка", ТекущийОбъект.Ссылка); Запрос.Текст = - "ВЫБРАТЬ + "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ДанныеРегистра.ИдентификаторКоманды, | ДанныеРегистра.Пользователь |ИЗ @@ -262,9 +266,9 @@ КонецПроцедуры &НаКлиенте -Процедура ДекорацияВключениеПрофилейБезопасностиНадписьОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) +Процедура ДекорацияВключениеПрофилейБезопасностиНадписьОбработкаНавигационнойСсылки(Элемент, Ссылка, СтандартнаяОбработка) - Если НавигационнаяСсылка = "int://sp-on" Тогда + Если Ссылка = "int://sp-on" Тогда ОткрытьФорму( "Обработка.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.Форма.НастройкиИспользованияПрофилейБезопасности", @@ -429,6 +433,35 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ВыполнитьКоманду(Команда) + СтрокаТаблицыКоманд = Элементы.ОбъектКоманды.ТекущиеДанные; + Если СтрокаТаблицыКоманд = Неопределено Тогда + Возврат; + КонецЕсли; + Если Не СтрокаТаблицыКоманд.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ОткрытиеФормы") + И Не СтрокаТаблицыКоманд.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ВызовКлиентскогоМетода") + И Не СтрокаТаблицыКоманд.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ВызовСерверногоМетода") + И Не СтрокаТаблицыКоманд.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.СценарийВБезопасномРежиме") Тогда + Возврат; + КонецЕсли; + + Контекст = Новый Структура; + Контекст.Вставить("ИдентификаторВыполняемойКоманды", СтрокаТаблицыКоманд.Идентификатор); + Обработчик = Новый ОписаниеОповещения("ВыполнитьКомандуПослеПодтвержденияЗаписи", ЭтотОбъект, Контекст); + + Если Объект.Ссылка.Пустая() Или Модифицированность Тогда + ТекстВопроса = НСтр("ru = 'Для выполнения команды необходимо записать данные.'"); + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("ЗаписатьИПродолжить", НСтр("ru = 'Записать и продолжить'")); + Кнопки.Добавить(КодВозвратаДиалога.Отмена); + ПоказатьВопрос(Обработчик, ТекстВопроса, Кнопки); + Иначе + ВыполнитьОбработкуОповещения(Обработчик, "ПродолжитьБезЗаписи"); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -480,13 +513,10 @@ Если ПараметрыЗаписи.РегистрацияОбработки Тогда ОбновитьПовторноИспользуемыеЗначения(); - Обработчик = Новый ОписаниеОповещения("ЗаписатьНаКлиентеЗавершение", ЭтотОбъект, ПараметрыЗаписи); - ТекстПредупреждения = НСтр("ru = 'Для применения изменений в открытых окнах - |необходимо их закрыть и открыть заново.'"); - ПоказатьПредупреждение(Обработчик, ТекстПредупреждения); - Иначе - ЗаписатьНаКлиентеЗавершение(ПараметрыЗаписи); + ТекстОповещения = НСтр("ru = 'Для применения изменений в открытых окнах необходимо их закрыть и открыть заново.'"); + ПоказатьОповещениеПользователя(, , ТекстОповещения); КонецЕсли; + ЗаписатьНаКлиентеЗавершение(ПараметрыЗаписи); КонецПроцедуры @@ -499,7 +529,7 @@ КонецФункции &НаКлиенте -Процедура ЗаписатьНаКлиентеЗавершение(ПараметрыЗаписи) Экспорт +Процедура ЗаписатьНаКлиентеЗавершение(ПараметрыЗаписи) Если ПараметрыЗаписи.ЗакрытьПослеЗаписи И Открыта() Тогда Закрыть(); КонецЕсли; @@ -507,6 +537,18 @@ &НаКлиенте Процедура ОбновлениеИзФайлаЗапуск() + Оповещение = Новый ОписаниеОповещения("ОбновлениеИзФайлаПослеПодтверждения", ЭтотОбъект); + ПараметрыФормы = Новый Структура("Ключ", "ПередДобавлениемДОИО"); + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение); +КонецПроцедуры + +&НаКлиенте +Процедура ОбновлениеИзФайлаПослеПодтверждения(Ответ, ПараметрыРегистрации) Экспорт + Если Ответ <> "Продолжить" Тогда + ОбновлениеИзФайлаЗавершение(Неопределено, ПараметрыРегистрации); + Возврат; + КонецЕсли; + ПараметрыРегистрации = Новый Структура; ПараметрыРегистрации.Вставить("Успех", Ложь); ПараметрыРегистрации.Вставить("АдресДанныхОбработки", АдресДанныхОбработки); @@ -527,6 +569,7 @@ КонецЕсли; СтандартныеПодсистемыКлиент.ПоказатьПомещениеФайла(Обработчик, УникальныйИдентификатор, Объект.ИмяФайла, ПараметрыДиалога); + КонецПроцедуры &НаКлиенте @@ -555,10 +598,13 @@ ПараметрыРегистрации.ЭтоОтчет = Ложь; Иначе ПараметрыРегистрации.Успех = Ложь; - ВернутьРезультатПослеПоказаПредупреждения( - НСтр("ru = 'Расширение файла не соответствует расширению внешнего отчета (ERF) или обработки (EPF).'"), - Новый ОписаниеОповещения("ОбновлениеИзФайлаЗавершение", ЭтотОбъект, ПараметрыРегистрации), - Неопределено); + ОбработчикРезультата = Новый ОписаниеОповещения("ОбновлениеИзФайлаЗавершение", ЭтотОбъект, ПараметрыРегистрации); + ТекстПредупреждения = НСтр("ru = 'Расширение файла не соответствует расширению внешнего отчета (ERF) или обработки (EPF).'"); + ПараметрыВозврата = Новый Структура; + ПараметрыВозврата.Вставить("Обработчик", ОбработчикРезультата); + ПараметрыВозврата.Вставить("Результат", Неопределено); + ОбработчикПростогоДиалога = Новый ОписаниеОповещения("ВернутьРезультатПослеЗакрытияПростогоДиалога", ЭтотОбъект, ПараметрыВозврата); + ПоказатьПредупреждение(ОбработчикПростогоДиалога, ТекстПредупреждения); Возврат; КонецЕсли; @@ -567,19 +613,8 @@ ОбновлениеИзФайлаМеханикаНаКлиенте(ПараметрыРегистрации); КонецПроцедуры -&НаКлиенте -Процедура ВернутьРезультатПослеПоказаПредупреждения(ТекстПредупреждения, Обработчик, Результат, Заголовок = Неопределено, Таймаут = 0) - // Показывает окно предупреждение, а после его закрытия вызывает обработчик с заданным результатом. - ПараметрыОбработчика = Новый Структура; - ПараметрыОбработчика.Вставить("Обработчик", Обработчик); - ПараметрыОбработчика.Вставить("Результат", Результат); - Обработчик = Новый ОписаниеОповещения("ВернутьРезультатПослеЗакрытияПростогоДиалога", ЭтотОбъект, ПараметрыОбработчика); - ПоказатьПредупреждение(Обработчик, ТекстПредупреждения, Таймаут, Заголовок); -КонецПроцедуры - &НаКлиенте Процедура ВернутьРезультатПослеЗакрытияПростогоДиалога(ПараметрыОбработчика) Экспорт - // Продолжение процедуры (см. выше). Если ТипЗнч(ПараметрыОбработчика.Обработчик) = Тип("ОписаниеОповещения") Тогда ВыполнитьОбработкуОповещения(ПараметрыОбработчика.Обработчик, ПараметрыОбработчика.Результат); КонецЕсли; @@ -618,45 +653,47 @@ Если ПараметрыРегистрации.КоличествоКонфликтующих > 1 Тогда Если ПараметрыРегистрации.ЭтоОтчет Тогда ЗаголовокВопроса = НСтр("ru = 'Конфликты при загрузке внешнего отчета'"); - ТекстВопроса = НСтр("ru = 'Внутреннее имя отчета ""[Name]"" уже занято другими дополнительными отчетами ([Count]): + ТекстВопроса = НСтр("ru = 'Внутреннее имя отчета ""[Name]"" + |уже занято существующими дополнительными отчетами ([Count]): |[List]. | |Выберите: - |1. ""[Continue]"" - выполнить загрузку, отключив публикацию этого отчета. - |2. ""[Disable]"" - выполнить загрузку, отключив публикацию всех других конфликтующих отчетов. - |3. ""[Open]"" - отменить загрузку и открыть список конфликтующих отчетов.'"); + |1. ""[Continue]"" - загрузить новый отчет в режиме отладки. + |2. ""[Disable]"" - загрузить новый отчет, отключив публикацию всех конфликтующих отчетов. + |3. ""[Open]"" - отменить загрузку и показать список конфликтующих отчетов.'"); Иначе ЗаголовокВопроса = НСтр("ru = 'Конфликты при загрузке внешней обработки'"); - ТекстВопроса = НСтр("ru = 'Внутреннее имя обработки ""[Name]"" уже занято другими дополнительными обработками ([Count]): + ТекстВопроса = НСтр("ru = 'Внутреннее имя обработки ""[Name]"" + |уже занято существующими дополнительными обработками ([Count]): |[List]. | |Выберите: - |1. ""[Continue]"" - выполнить загрузку, отключив публикацию этой обработки. - |2. ""[Disable]"" - выполнить загрузку, отключив публикацию всех других конфликтующих обработок. - |3. ""[Open]"" - отменить загрузку и открыть список конфликтующих обработок.'"); + |1. ""[Continue]"" - загрузить новую обработку в режиме отладки. + |2. ""[Disable]"" - загрузить новую обработку, отключив публикацию всех конфликтующих обработок. + |3. ""[Open]"" - отменить загрузку и показать список конфликтующих обработок.'"); КонецЕсли; ПредставлениеКнопкиОтключить = НСтр("ru = 'Отключить конфликтующие'"); ПредставлениеКнопкиОткрыть = НСтр("ru = 'Отменить и показать список'"); Иначе Если ПараметрыРегистрации.ЭтоОтчет Тогда ЗаголовокВопроса = НСтр("ru = 'Конфликт при загрузке внешнего отчета'"); - ТекстВопроса = НСтр("ru = 'Внутреннее имя отчета ""[Name]"" уже занято другим дополнительным отчетом: - |[List]. + ТекстВопроса = НСтр("ru = 'Внутреннее имя отчета ""[Name]"" + |уже занято существующим дополнительным отчетом [List]. | |Выберите: - |1. ""[Continue]"" - выполнить загрузку, отключив публикацию этого отчета. - |2. ""[Disable]"" - выполнить загрузку, отключив публикацию другого отчета. - |3. ""[Open]"" - отменить загрузку и открыть карточку другого отчета.'"); + |1. ""[Continue]"" - загрузить новый отчет в режиме отладки. + |2. ""[Disable]"" - загрузить новый отчет, отключив публикацию конфликтующего отчета. + |3. ""[Open]"" - открыть карточку конфликтующего отчета.'"); ПредставлениеКнопкиОтключить = НСтр("ru = 'Отключить другой отчет'"); Иначе ЗаголовокВопроса = НСтр("ru = 'Конфликт при загрузке внешней обработки'"); - ТекстВопроса = НСтр("ru = 'Внутреннее имя обработки ""[Name]"" уже занято другой дополнительной обработкой: - |[List]. + ТекстВопроса = НСтр("ru = 'Внутреннее имя обработки ""[Name]"" + |уже занято существующей дополнительной обработкой [List]. | |Выберите: - |1. ""[Continue]"" - выполнить загрузку, отключив публикацию этой обработки. - |2. ""[Disable]"" - выполнить загрузку, отключив публикацию другой обработки. - |3. ""[Open]"" - отменить загрузку и открыть карточку другой обработку.'"); + |1. ""[Continue]"" - загрузить новую обработку в режиме отладки. + |2. ""[Disable]"" - загрузить новую обработку, отключив публикацию конфликтующей обработки. + |3. ""[Open]"" - открыть карточку конфликтующей обработки.'"); ПредставлениеКнопкиОтключить = НСтр("ru = 'Отключить другую обработку'"); КонецЕсли; ПредставлениеКнопкиОткрыть = НСтр("ru = 'Отменить и открыть'"); @@ -749,7 +786,8 @@ ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Вариант отчета ""%1"" не зарегистрирован.'"), Вариант.Наименование); ПоказатьПредупреждение(, ТекстОшибки); Иначе - ПоказатьЗначение(, Вариант.Ссылка); + МодульВариантыОтчетовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВариантыОтчетовКлиент"); + МодульВариантыОтчетовКлиент.ПоказатьНастройкиОтчета(Вариант.Ссылка); КонецЕсли; КонецПроцедуры @@ -879,6 +917,86 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ВыполнитьКомандуПослеПодтвержденияЗаписи(Ответ, Контекст) Экспорт + Если Ответ = "ЗаписатьИПродолжить" Тогда + ОчиститьСообщения(); + Если Не Записать() Тогда + Возврат; // Запись не удалась, сообщения о причинах выводит платформа. + КонецЕсли; + ИначеЕсли Ответ <> "ПродолжитьБезЗаписи" Тогда + Возврат; + КонецЕсли; + + Если Объект.Ссылка.Пустая() Или Модифицированность Тогда + Возврат; // Финальная проверка. + КонецЕсли; + + СтрокаТаблицыКоманд = Элементы.ОбъектКоманды.ТекущиеДанные; + Если СтрокаТаблицыКоманд = Неопределено + Или СтрокаТаблицыКоманд.Идентификатор <> Контекст.ИдентификаторВыполняемойКоманды Тогда + Найденные = Объект.Команды.НайтиСтроки(Новый Структура("Идентификатор", Контекст.ИдентификаторВыполняемойКоманды)); + Если Найденные.Количество() = 0 Тогда + Возврат; + КонецЕсли; + СтрокаТаблицыКоманд = Найденные[0]; + КонецЕсли; + + ВыполняемаяКоманда = Новый Структура( + "Ссылка, Представление, + |Идентификатор, ВариантЗапуска, ПоказыватьОповещение, + |Модификатор, ОбъектыНазначения, ЭтоОтчет, Вид"); + ЗаполнитьЗначенияСвойств(ВыполняемаяКоманда, СтрокаТаблицыКоманд); + ВыполняемаяКоманда.Ссылка = Объект.Ссылка; + ВыполняемаяКоманда.Вид = Объект.Вид; + ВыполняемаяКоманда.ЭтоОтчет = (Объект.Вид = ВидДополнительныйОтчет Или Объект.Вид = ВидОтчет); + + Если СтрокаТаблицыКоманд.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ОткрытиеФормы") Тогда + + ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьОткрытиеФормыОбработки(ВыполняемаяКоманда, ЭтотОбъект, ВыполняемаяКоманда.ОбъектыНазначения); + + ИначеЕсли СтрокаТаблицыКоманд.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ВызовКлиентскогоМетода") Тогда + + ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьКлиентскийМетодОбработки(ВыполняемаяКоманда, ЭтотОбъект, ВыполняемаяКоманда.ОбъектыНазначения); + + ИначеЕсли СтрокаТаблицыКоманд.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ВызовСерверногоМетода") + Или СтрокаТаблицыКоманд.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.СценарийВБезопасномРежиме") Тогда + + ЗаголовокСостояния = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выполняется команда ""%1""'"), + СтрокаТаблицыКоманд.Представление); + Состояние(ЗаголовокСостояния + "...", , , БиблиотекаКартинок.ДлительнаяОперация48); + + ДлительнаяОперация = НачатьВыполнениеСервернойКомандыВФоне(ВыполняемаяКоманда, УникальныйИдентификатор); + + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + ПараметрыОжидания.ТекстСообщения = ЗаголовокСостояния; + ПараметрыОжидания.ОповещениеПользователя.Показать = ВыполняемаяКоманда.ПоказыватьОповещение; + ПараметрыОжидания.ВыводитьОкноОжидания = Истина; + + ОповещениеОЗавершении = Новый ОписаниеОповещения("ПослеЗавершенияВыполненияСервернойКомандыВФоне", ЭтотОбъект, ВыполняемаяКоманда); + ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеЗавершенияВыполненияСервернойКомандыВФоне(Задание, ВыполняемаяКоманда) Экспорт + Если Задание.Статус = "Ошибка" Тогда + Результат = Новый Структура; + ВводныйТекст = НСтр("ru = 'Не удалось выполнить команду.'"); + Кратко = ВводныйТекст + Символы.ПС + Задание.КраткоеПредставлениеОшибки; + Подробно = Задание.ПодробноеПредставлениеОшибки; + СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(Результат, Кратко, Подробно); + Иначе + Результат = ПолучитьИзВременногоХранилища(Задание.АдресРезультата); + КонецЕсли; + Если Результат <> Неопределено Тогда + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); + КонецЕсли; +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Клиент, Сервер @@ -908,6 +1026,21 @@ //////////////////////////////////////////////////////////////////////////////// // Вызов сервера, Сервер +&НаСервереБезКонтекста +Функция НачатьВыполнениеСервернойКомандыВФоне(ВыполняемаяКоманда, УникальныйИдентификатор) + ИмяПроцедуры = "ДополнительныеОтчетыИОбработки.ВыполнитьКоманду"; + + ПараметрыПроцедуры = Новый Структура("ДополнительнаяОбработкаСсылка, ИдентификаторКоманды, ОбъектыНазначения"); + ПараметрыПроцедуры.ДополнительнаяОбработкаСсылка = ВыполняемаяКоманда.Ссылка; + ПараметрыПроцедуры.ИдентификаторКоманды = ВыполняемаяКоманда.Идентификатор; + ПараметрыПроцедуры.ОбъектыНазначения = ВыполняемаяКоманда.ОбъектыНазначения; + + НастройкиЗапуска = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + НастройкиЗапуска.НаименованиеФоновогоЗадания = НСтр("ru = 'Дополнительные отчеты и обработки: Выполнение серверного метода обработки'"); + + Возврат ДлительныеОперации.ВыполнитьВФоне(ИмяПроцедуры, ПараметрыПроцедуры, НастройкиЗапуска); +КонецФункции + &НаСервере Процедура ОбновлениеИзФайлаМеханикаНаСервере(ПараметрыРегистрации) ОбъектСправочника = РеквизитФормыВЗначение("Объект"); @@ -926,13 +1059,13 @@ // Представление занявших объектов. ПредставлениеЗанявших = ""; Для Каждого ЭлементСписка Из ПараметрыРегистрации.Конфликтующие Цикл - ПредставлениеЗанявших = ПредставлениеЗанявших - + ?(ПредставлениеЗанявших = "", "", ", ") - + СокрЛП(ЭлементСписка.Представление); Если СтрДлина(ПредставлениеЗанявших) > 80 Тогда - ПредставлениеЗанявших = Лев(ПредставлениеЗанявших, 70) + "... "; + ПредставлениеЗанявших = ПредставлениеЗанявших + "... "; Прервать; КонецЕсли; + ПредставлениеЗанявших = ПредставлениеЗанявших + + ?(ПредставлениеЗанявших = "", "", ", ") + + """" + СокрЛП(ЭлементСписка.Представление) + """"; КонецЦикла; ПараметрыРегистрации.Вставить("ПредставлениеЗанявших", ПредставлениеЗанявших); // Количество занявших объектов. @@ -950,7 +1083,7 @@ ЗаголовокОшибки); КонецЕсли; - УстановитьВидимостьДоступность(Истина); + УстановитьВидимостьДоступность(ПараметрыРегистрации.Успех); КонецПроцедуры &НаСервере @@ -1042,6 +1175,19 @@ Элементы.СтраницаКоманды.Заголовок = НазваниеСтраницыКоманд() + " (" + Формат(КоличествоКоманд, "ЧГ=") + ")"; КонецЕсли; + Элементы.ВыполнитьКоманду.Видимость = Ложь; + Если ЭтоГлобальнаяОбработка И КоличествоКоманд > 0 Тогда + Для Каждого СтрокаТаблицыКоманд Из Объект.Команды Цикл + Если СтрокаТаблицыКоманд.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ОткрытиеФормы") + Или СтрокаТаблицыКоманд.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ВызовКлиентскогоМетода") + Или СтрокаТаблицыКоманд.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ВызовСерверногоМетода") + Или СтрокаТаблицыКоманд.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.СценарийВБезопасномРежиме") Тогда + Элементы.ВыполнитьКоманду.Видимость = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КоличествоРазрешений = ПолучитьТаблицуРазрешений().Количество(); РежимСовместимостиРазрешений = Объект.РежимСовместимостиРазрешений; @@ -1236,8 +1382,10 @@ Свойства = РаботаВБезопасномРежимеСлужебный.СвойстваДляРегистраРазрешений(Объект.Ссылка); + УстановитьПривилегированныйРежим(Истина); ПредставлениеРазрешений_2_2_2 = РаботаВБезопасномРежимеСлужебный.ПредставлениеРазрешенийНаИспользованиеВнешнихРесурсов( Свойства.Тип, Свойства.Идентификатор, Свойства.Тип, Свойства.Идентификатор, Разрешения); + УстановитьПривилегированныйРежим(Ложь); КонецЕсли; @@ -1412,8 +1560,6 @@ КонецФункции -/// - &НаСервере Функция ВыбранныеОбъектыНазначения() Результат = Новый СписокЗначений; diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html index cfbc5211d..38fe00a8b 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

        @@ -35,7 +35,7 @@
      • по полям Вид и Публикация - можно сочетать два вида отбора в больших списках.

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

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

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

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

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

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

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

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

      • Глобальные отчеты и обработки - используются независимо от данных программы, также называются общими. Команды для их использования размещаются в разделах программы. С помощью глобальных отчетов и обработок можно загружать данные в программу, производить обновление или очистку индекса полнотекстового поиска и т.д. Они содержат команды, вызываемые только из разделов командного интерфейса. Команды не зависят от конкретных объектов программы. Список доступных разделов для размещения команд определен разработчиком заранее и включен в файл дополнительного отчета или обработки, его невозможно изменить.
      • Назначаемые дополнительные отчеты и обработки - предназначены для конкретных документов или списков программы, которых может быть несколько, при этом список доступных назначений определен разработчиком заранее и включен в текст дополнительного отчета или обработки, поэтому при настройке дополнительного отчета или обработки можно только выбирать из этого списка. К этому типу относятся несколько видов дополнительных отчетов и обработок: diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ManagerModule.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ManagerModule.bsl index 8823cc5d6..aa7b9ac7c 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ManagerModule.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ManagerModule.bsl @@ -2,7 +2,11 @@ #Область ПрограммныйИнтерфейс -// Реквизиты, которые разрешается изменять сразу для нескольких объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. +// +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl index f05f65a2a..af42658dc 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl @@ -1,7 +1,11 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ОписаниеПеременных + Перем ЭтоГлобальнаяОбработка; +#КонецОбласти + #Область ОбработчикиСобытий Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) @@ -67,7 +71,7 @@ Если Конфликтующие.Количество() > 0 Тогда Отказ = Истина; Если ПроверкаЭлемента Тогда - ТекстОшибки = СтрШаблон( + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Имя ""%1"", используемое данным отчетом (обработкой), уже занято другим опубликованным дополнительным отчетом (обработкой). | |Для продолжения необходимо изменить вид Публикации с ""%2"" на ""%3"" или ""%4"".'"), @@ -76,7 +80,7 @@ Строка(Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки), Строка(Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена)); Иначе - ТекстОшибки = СтрШаблон( + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Имя ""%1"", используемое отчетом (обработкой) ""%2"", уже занято другим опубликованным дополнительным отчетом (обработкой).'"), ИмяОбъекта, ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЭтотОбъект.Ссылка, "Наименование")); diff --git a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Help/ru.html index a60539b01..fd082eddb 100644 --- a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Forms/ФормаЭлемента/Help/ru.html @@ -1,7 +1,7 @@ - +

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

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

        -

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

        +

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

        • Напишите Наименование. Поле является обязательным.
        • Для того чтобы задать новое условие для отбора, нажмите Добавить новый элемент.  Условий может быть несколько.
        • В колонке Поле  выберите поле документа взаимодействий, по которому будет происходить отбор. Для этого в списке укажите нужное поле, затем нажмите Выбрать. Также можно использовать двойной щелчок мыши.  diff --git a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Help/ru.html b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Help/ru.html index dc7278660..e39b65778 100644 --- a/SSL/src/Catalogs/ЗакладкиВзаимодействий/Help/ru.html +++ b/SSL/src/Catalogs/ЗакладкиВзаимодействий/Help/ru.html @@ -1,8 +1,8 @@ - +

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

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

          Ввод закладок

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

            Группировка закладок

            • Закладки можно группировать.
            • Для этого выполните команду контекстного меню панели группировки Создать группу. diff --git a/SSL/src/Catalogs/ЗакладкиВзаимодействий/ManagerModule.bsl b/SSL/src/Catalogs/ЗакладкиВзаимодействий/ManagerModule.bsl index 09a4c8909..82c6d2e85 100644 --- a/SSL/src/Catalogs/ЗакладкиВзаимодействий/ManagerModule.bsl +++ b/SSL/src/Catalogs/ЗакладкиВзаимодействий/ManagerModule.bsl @@ -5,9 +5,11 @@ //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. -// Возвращает список реквизитов, которые не разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые не рекомендуется редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Help/ru.html b/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Help/ru.html index f5938c351..a97a90a69 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/ЗаметкиПоПредмету/Help/ru.html b/SSL/src/Catalogs/Заметки/Forms/ЗаметкиПоПредмету/Help/ru.html index d2803fd2a..6ab559f74 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/МоиЗаметки/Help/ru.html b/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Help/ru.html index 48077500c..71d35478e 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/ФормаГруппы/Help/ru.html b/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Help/ru.html index 29d21fc8b..3b42d5b9b 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Help/ru.html +++ b/SSL/src/Catalogs/Заметки/Forms/ФормаГруппы/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

              Ввод группы заметок

              diff --git a/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Form.form index aacbf7eeb..ec0ed5155 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Form.form @@ -193,7 +193,6 @@ 50 true 10 - true true true diff --git a/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Help/ru.html index dbad152d9..d32f7c8b3 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 18c3f6f6f..ea8f477d0 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 5f077a618..93707e88f 100644 --- a/SSL/src/Catalogs/Заметки/ManagerModule.bsl +++ b/SSL/src/Catalogs/Заметки/ManagerModule.bsl @@ -5,9 +5,11 @@ //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. -// Возвращает список реквизитов, которые не нужно редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ManagerModule.bsl index 6b0f37643..c870ef204 100644 --- a/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ManagerModule.bsl @@ -2,9 +2,11 @@ #Область ПрограммныйИнтерфейс -// Возвращает список реквизитов, которые разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Возврат ПрисоединенныеФайлы.РеквизитыРедактируемыеВГрупповойОбработке(); diff --git a/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ЗапланированноеВзаимодействиеПрисоединенныеФайлы.mdo b/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ЗапланированноеВзаимодействиеПрисоединенныеФайлы.mdo index c5a447512..7cf179756 100644 --- a/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ЗапланированноеВзаимодействиеПрисоединенныеФайлы.mdo +++ b/SSL/src/Catalogs/ЗапланированноеВзаимодействиеПрисоединенныеФайлы/ЗапланированноеВзаимодействиеПрисоединенныеФайлы.mdo @@ -656,6 +656,43 @@ Use Use + + ДатаПроверкиПодписи + + ru + Дата проверки подписи + + + Date + + + + ru + Дата последней проверки подписи. + + + + Use + Use + + + ПодписьВерна + + ru + Подпись верна + + + Boolean + + + ru + Результат последней проверки подписи. + + + + Use + Use + diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Help/ru.html b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Help/ru.html index dfacff322..60151df59 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/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Help/ru.html index 5ad52a3fb..4677b3d28 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 c2ed3623b..9ae1fe9cd 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 e6c5601e2..77bbd4a87 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ManagerModule.bsl @@ -2,9 +2,11 @@ #Область ПрограммныйИнтерфейс -// Возвращает список реквизитов, которые разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт РедактируемыеРеквизиты = Новый Массив; diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Help/ru.html index 0ffb13953..f68bcb12b 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 adf0ce80e..2daf98492 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 e6c5601e2..77bbd4a87 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ManagerModule.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ManagerModule.bsl @@ -2,9 +2,11 @@ #Область ПрограммныйИнтерфейс -// Возвращает список реквизитов, которые разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт РедактируемыеРеквизиты = Новый Массив; diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Help/ru.html index 12d1cb2d0..71edad37a 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 aabbaca73..79ca9eb1f 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 bf7b6269d..8cbd063b2 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl @@ -12,8 +12,8 @@ // значение Истина, если хотя бы один элемент справочника был помечен // на удаление, иначе не изменяется. // -// ТолькоПроверка - Булево (возвращаемое значение) - не производит никаких изменений, -// а лишь выполняет установку флажков ЕстьИзменения, ЕстьУдаленные. +// ТолькоПроверка - Булево - не производить никаких изменений, а лишь выполнить +// установку флажков ЕстьИзменения, ЕстьУдаленные. // Процедура ОбновитьДанныеСправочника(ЕстьИзменения = Ложь, ЕстьУдаленные = Ложь, ТолькоПроверка = Ложь) Экспорт @@ -57,9 +57,11 @@ КонецПроцедуры -// Возвращает список реквизитов, которые разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт РедактируемыеРеквизиты = Новый Массив; @@ -424,9 +426,14 @@ // значение Истина, если хотя бы один элемент справочника был помечен // на удаление, иначе не изменяется. // -// ТолькоПроверка - Булево (возвращаемое значение) - не производит никаких изменений, -// а лишь выполняет установку флажков ЕстьИзменения, ЕстьУдаленные, -// ЕстьКритичныеИзменения. +// РежимОбновления - Строка - возможные значения: +// "Полный" - выполнить обновление, +// "Частичный" - выполнить обновление (когда ОбъектыРасширений = Ложь, +// тогда выполнить обновление, если нет критичных изменений), +// "ТолькоПроверка" - не производить никаких изменений, а лишь выполнить +// установку флажков ЕстьИзменения, ЕстьУдаленные, ЕстьКритичныеИзменения. +// - Булево - если Истина, то режим обновления "ТолькоПроверка", +// если Ложь, то режим обновления "Полный". // // ЕстьКритичныеИзменения - (возвращаемое значение) - в этот параметр возвращается // значение Истина, если найдены критичные изменения, иначе не изменяется. @@ -439,7 +446,7 @@ // объектов метаданных, которые добавлены или требуется добавить, // а также объектов метаданных, полные имена которых изменены или требуется изменить. // -Процедура ВыполнитьОбновлениеДанных(ЕстьИзменения, ЕстьУдаленные, ТолькоПроверка, +Процедура ВыполнитьОбновлениеДанных(ЕстьИзменения, ЕстьУдаленные, РежимОбновления, ЕстьКритичныеИзменения = Ложь, СписокКритичныхИзменений = "", ОбъектыРасширений = Ложь) Экспорт Если ОбъектыРасширений @@ -458,6 +465,11 @@ УстановитьПривилегированныйРежим(Истина); + Если ТипЗнч(РежимОбновления) = Тип("Булево") Тогда + РежимОбновления = ?(РежимОбновления, "ТолькоПроверка", "Полный"); + КонецЕсли; + ТолькоПроверка = (РежимОбновления = "ТолькоПроверка"); + СвойстваРасширений = ПолучитьИзВременногоХранилища(ПараметрыСеанса.АдресСвойствРасширений); Если СвойстваРасширений.ИменаОбъектов.Индексы.Количество() = 0 Тогда СвойстваРасширений.ИменаОбъектов.Индексы.Добавить("ПолноеИмя"); @@ -471,7 +483,7 @@ Если Не ОбъектыРасширений Или Не ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда - ОбновитьДанные(ЕстьТекущиеИзменения, ЕстьУдаленные, ТолькоПроверка, + ОбновитьДанные(ЕстьТекущиеИзменения, ЕстьУдаленные, РежимОбновления, ЕстьКритичныеИзменения, СписокКритичныхИзменений, СвойстваРасширений, ОбъектыРасширений); Если ЕстьТекущиеИзменения Тогда @@ -479,7 +491,9 @@ КонецЕсли; КонецЕсли; - Если Не ТолькоПроверка Или Не ЕстьТекущиеИзменения Тогда + Если Не ТолькоПроверка + И Не (РежимОбновления <> "Полный" И ЕстьКритичныеИзменения) Тогда + Если Не ОбъектыРасширений Тогда СтандартныеПодсистемыСервер.ПодтвердитьОбновлениеПараметраРаботыПрограммы( "ПараметрыБазовойФункциональности", "ИдентификаторыОбъектовМетаданных"); @@ -732,7 +746,7 @@ | ЕСТЬNULL(ВерсииИдентификаторов.ПолноеИмяОбъекта, """") КАК ПолноеИмя, | Идентификаторы.ПометкаУдаления |ИЗ - | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы + | Справочник.ИдентификаторыОбъектовРасширений КАК Идентификаторы | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИдентификаторыОбъектовВерсийРасширений КАК ВерсииИдентификаторов | ПО (ВерсииИдентификаторов.Идентификатор = Идентификаторы.Ссылка) |ГДЕ @@ -777,21 +791,21 @@ ИначеЕсли РезультатПроверки.КлючОбъектаМетаданных = Неопределено Тогда ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Идентификатору ""%1"" - |найденому в справочнике ""%2"", + |найденному в справочнике ""%2"", |соответствует несуществующий объект метаданных |""%3"".'"), Строка(Идентификатор), НазваниеСправочника, Выгрузка[0].ПолноеИмя); Иначе ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Идентификатору ""%1"" - |найденому в справочнике ""%2"", + |найденному в справочнике ""%2"", |соответствует удаленный объект метаданных.'"), Строка(Идентификатор), НазваниеСправочника); КонецЕсли; Иначе ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Идентификатору ""%1"" - |найденому в справочнике ""%2"", + |найденному в справочнике ""%2"", |соответствует объект метаданных ""%3"", |полное имя которого отличается от заданного в идентификаторе.'"), Строка(Идентификатор), НазваниеСправочника, РезультатПроверки.ОбъектМетаданных.ПолноеИмя()); @@ -1312,7 +1326,7 @@ //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. -Процедура ОбновитьДанные(ЕстьИзменения, ЕстьУдаленные, ТолькоПроверка, +Процедура ОбновитьДанные(ЕстьИзменения, ЕстьУдаленные, РежимОбновления, ЕстьКритичныеИзменения, СписокКритичныхИзменений, СвойстваРасширений, ОбъектыРасширений) СвойстваОбъектовМетаданных = СвойстваОбъектовМетаданных(ОбъектыРасширений, СвойстваРасширений.ИменаОбъектов); @@ -1501,7 +1515,7 @@ + Символы.ПС + СписокНовыхОбъектовМетаданных + Символы.ПС; КонецЕсли; - Если Не ТолькоПроверка + Если РежимОбновления = "Полный" И Не МонопольныйРежим() И Не ОбъектыРасширений И ЕстьТекущиеКритичныеИзменения Тогда @@ -1583,7 +1597,8 @@ ЕстьТекущиеИзменения = Истина; ЕстьИзменения = Истина; - Если ТолькоПроверка Тогда + Если РежимОбновления = "ТолькоПроверка" + Или РежимОбновления <> "Полный" И ЕстьКритичныеИзменения Тогда ЗафиксироватьТранзакцию(); Возврат; КонецЕсли; @@ -1615,7 +1630,7 @@ ЕстьКритичныеИзменения = Истина; ЕстьТекущиеИзменения = Истина; ЕстьИзменения = Истина; - Если ТолькоПроверка Тогда + Если РежимОбновления = "ТолькоПроверка" Тогда ЗафиксироватьТранзакцию(); Возврат; КонецЕсли; @@ -2829,10 +2844,15 @@ НайденныеДанные.ЗаполнитьЗначения(Истина, "Включено"); Если НайденныеДанные.Количество() > 0 Тогда + БезОшибок = ВыполнитьЗаменуЭлементов(СтарыеИНовыеСсылки, НайденныеДанные, Истина); + Если Не БезОшибок Тогда + ВызватьИсключение + НСтр("ru = 'Не удалось выполнить замену дублей идентификаторов объектов метаданных. + |Подробнее см. ошибки при замене идентификатора в журнале регистрации.'"); + КонецЕсли; + НачатьТранзакцию(); Попытка - ВыполнитьЗаменуЭлементов(СтарыеИНовыеСсылки, НайденныеДанные, Истина); - // Очистка новых ссылок у дублей идентификаторов. Для каждого ЗаменяемаяСсылка Из ЗаменяемыеСсылки Цикл ОбъектДубля = ЗаменяемаяСсылка.ПолучитьОбъект(); @@ -2865,7 +2885,7 @@ // - удалена работа с формой прогрессора // - удалена процедура ОбработкаПрерыванияПользователя() // - заменено РегистрыСведений[СтрокаТаблицы.Метаданные.Имя] на. -// ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(СтрокаТаблицы.Метаданные.ПолноеИмя()) +// ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(СтрокаТаблицы.Метаданные.ПолноеИмя()). // Функция ВыполнитьЗаменуЭлементов(Знач Заменяемые, Знач ТаблицаСсылок, Знач ОтключатьКонтрольЗаписи = Ложь, Знач ВыполнятьВТранзакции = Ложь, Знач ОбъектыРасширений = Ложь) @@ -2880,7 +2900,7 @@ ОбрабатываемаяСсылка = Неопределено; БылиИсключения = Ложь; - + Если ВыполнятьВТранзакции Тогда НачатьТранзакцию(); КонецЕсли; @@ -2897,18 +2917,26 @@ Если ОбрабатываемаяСсылка <> СтрокаТаблицы.Данные Тогда Если ОбрабатываемаяСсылка <> Неопределено И Параметры.Объект <> Неопределено Тогда - Если ОтключатьКонтрольЗаписи Тогда - Параметры.Объект.ОбменДанными.Загрузка = Истина; - КонецЕсли; - Попытка - Параметры.Объект.Записать(); + Параметры.Объект.ОбменДанными.Загрузка = Истина; + Если ОтключатьКонтрольЗаписи Тогда + Параметры.Объект.ДополнительныеСвойства.Вставить("ПропуститьЗаписьВерсииОбъекта"); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Параметры.Объект, Ложь); + Иначе + Параметры.Объект.Записать(); + КонецЕсли; Исключение БылиИсключения = Истина; + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При записи объекта ""%1"" возникла ошибка: + |%2'"), + ПолучитьНавигационнуюСсылку(Параметры.Объект.Ссылка), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); Если ВыполнятьВТранзакции Тогда - ВызватьИсключение; + ВызватьИсключение ТекстОшибки; КонецЕсли; - СообщитьОбОшибке(ИнформацияОбОшибке(), ОбъектыРасширений); + СообщитьОбОшибке(ТекстОшибки, ОбъектыРасширений); КонецПопытки; Параметры.Объект = Неопределено; КонецЕсли; @@ -3059,17 +3087,26 @@ Если НадоЗаписывать Тогда НаборЗаписей.Загрузить(ТаблицаНабора); - Если ОтключатьКонтрольЗаписи Тогда - НаборЗаписей.ОбменДанными.Загрузка = Истина; - КонецЕсли; Попытка - НаборЗаписей.Записать(); + Если ОтключатьКонтрольЗаписи Тогда + НаборЗаписей.ДополнительныеСвойства.Вставить("ПропуститьЗаписьВерсииОбъекта"); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей, Ложь); + Иначе + НаборЗаписей.Записать(); + КонецЕсли; Исключение БылиИсключения = Истина; + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При записи движений объекта ""%1"" в ""%2"" возникла ошибка: + |%3'"), + ПолучитьНавигационнуюСсылку(Параметры.Объект.Ссылка), + НаборЗаписей.Метаданные().ПолноеИмя(), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); Если ВыполнятьВТранзакции Тогда - ВызватьИсключение; + ВызватьИсключение ТекстОшибки; КонецЕсли; - СообщитьОбОшибке(ИнформацияОбОшибке(), ОбъектыРасширений); + СообщитьОбОшибке(ТекстОшибки, ОбъектыРасширений); КонецПопытки; КонецЕсли; КонецЦикла; @@ -3089,17 +3126,26 @@ КонецЕсли; КонецЦикла; Если НадоЗаписывать Тогда - Если ОтключатьКонтрольЗаписи Тогда - НаборЗаписи.ОбменДанными.Загрузка = Истина; - КонецЕсли; Попытка - НаборЗаписи.Записать(); + Если ОтключатьКонтрольЗаписи Тогда + НаборЗаписи.ДополнительныеСвойства.Вставить("ПропуститьЗаписьВерсииОбъекта"); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписи, Ложь); + Иначе + НаборЗаписи.Записать(); + КонецЕсли; Исключение БылиИсключения = Истина; + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При записи по регистратору ""%1"" в ""%2"" возникла ошибка: + |%3'"), + ПолучитьНавигационнуюСсылку(СтрокаТаблицы.Данные), + НаборЗаписи.Метаданные().ПолноеИмя(), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); Если ВыполнятьВТранзакции Тогда - ВызватьИсключение; + ВызватьИсключение ТекстОшибки; КонецЕсли; - СообщитьОбОшибке(ИнформацияОбОшибке(), ОбъектыРасширений); + СообщитьОбОшибке(ТекстОшибки, ОбъектыРасширений); КонецПопытки; КонецЕсли; КонецЕсли; @@ -3174,10 +3220,11 @@ ИначеЕсли Метаданные.РегистрыСведений.Содержит(СтрокаТаблицы.Метаданные) Тогда СтруктураИзмерений = Новый Структура; - НаборЗаписей = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(СтрокаТаблицы.Метаданные.ПолноеИмя()).СоздатьНаборЗаписей(); + МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(СтрокаТаблицы.Метаданные.ПолноеИмя()); + НаборЗаписей = МенеджерРегистра.СоздатьНаборЗаписей(); Для Каждого Измерение Из СтрокаТаблицы.Метаданные.Измерения Цикл НаборЗаписей.Отбор[Измерение.Имя].Установить(СтрокаТаблицы.Данные[Измерение.Имя]); - СтруктураИзмерений.Вставить(Измерение.Имя); + СтруктураИзмерений.Вставить(Измерение.Имя, СтрокаТаблицы.Данные[Измерение.Имя]); КонецЦикла; Если СтрокаТаблицы.Метаданные.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда НаборЗаписей.Отбор["Период"].Установить(СтрокаТаблицы.Данные.Период); @@ -3191,30 +3238,57 @@ ТаблицаНабора = НаборЗаписей.Выгрузить(); НаборЗаписей.Очистить(); - Если ОтключатьКонтрольЗаписи Тогда - НаборЗаписей.ОбменДанными.Загрузка = Истина; - КонецЕсли; - Если Не ВыполнятьВТранзакции Тогда НачатьТранзакцию(); КонецЕсли; + ТекстОшибки = ""; Попытка - НаборЗаписей.Записать(); + Попытка + Если ОтключатьКонтрольЗаписи Тогда + НаборЗаписей.ДополнительныеСвойства.Вставить("ПропуститьЗаписьВерсииОбъекта"); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей, Ложь); + Иначе + НаборЗаписей.Записать(); + КонецЕсли; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При удалении записи ""%1"" возникла ошибка: + |%2'"), + ПолучитьНавигационнуюСсылку(МенеджерРегистра.СоздатьКлючЗаписи(СтруктураИзмерений)), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + ВызватьИсключение; + КонецПопытки; Для Каждого Колонка Из ТаблицаНабора.Колонки Цикл Если ТаблицаНабора[0][Колонка.Имя] = Ссылка Тогда ТаблицаНабора[0][Колонка.Имя] = ПравильныйЭлемент; Если СтруктураИзмерений.Свойство(Колонка.Имя) Тогда НаборЗаписей.Отбор[Колонка.Имя].Установить(ПравильныйЭлемент); + СтруктураИзмерений[Колонка.Имя] = ПравильныйЭлемент; КонецЕсли; - КонецЕсли; КонецЦикла; НаборЗаписей.Загрузить(ТаблицаНабора); - НаборЗаписей.Записать(); + Попытка + Если ОтключатьКонтрольЗаписи Тогда + НаборЗаписей.ДополнительныеСвойства.Вставить("ПропуститьЗаписьВерсииОбъекта"); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей, Ложь); + Иначе + НаборЗаписей.Записать(); + КонецЕсли; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При добавлении записи ""%1"" возникла ошибка: + |%2'"), + ПолучитьНавигационнуюСсылку(МенеджерРегистра.СоздатьКлючЗаписи(СтруктураИзмерений)), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + ВызватьИсключение; + КонецПопытки; Если Не ВыполнятьВТранзакции Тогда ЗафиксироватьТранзакцию(); @@ -3222,30 +3296,43 @@ Исключение БылиИсключения = Истина; - Если ВыполнятьВТранзакции Тогда + Если Не ВыполнятьВТранзакции Тогда + ОтменитьТранзакцию(); + КонецЕсли; + Если Не ЗначениеЗаполнено(ТекстОшибки) Тогда ВызватьИсключение; КонецЕсли; - ОтменитьТранзакцию(); - СообщитьОбОшибке(ИнформацияОбОшибке(), ОбъектыРасширений); + Если ВыполнятьВТранзакции Тогда + ВызватьИсключение ТекстОшибки; + КонецЕсли; + СообщитьОбОшибке(ТекстОшибки, ОбъектыРасширений); КонецПопытки; Иначе СообщитьОбОшибке(НСтр("ru = 'Значения не заменяются в данных типа'") - + ": " + СтрокаТаблицы.Метаданные, ОбъектыРасширений); + + ": " + Строка(СтрокаТаблицы.Метаданные), ОбъектыРасширений); КонецЕсли; КонецЦикла; Если Параметры.Объект <> Неопределено Тогда - Если ОтключатьКонтрольЗаписи Тогда - Параметры.Объект.ОбменДанными.Загрузка = Истина; - КонецЕсли; Попытка - Параметры.Объект.Записать(); + Если ОтключатьКонтрольЗаписи Тогда + Параметры.Объект.ДополнительныеСвойства.Вставить("ПропуститьЗаписьВерсииОбъекта"); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Параметры.Объект, Ложь); + Иначе + Параметры.Объект.Записать(); + КонецЕсли; Исключение БылиИсключения = Истина; + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При записи объекта ""%1"" возникла ошибка: + |%2'"), + ПолучитьНавигационнуюСсылку(Параметры.Объект.Ссылка), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); Если ВыполнятьВТранзакции Тогда - ВызватьИсключение; + ВызватьИсключение ТекстОшибки; КонецЕсли; - СообщитьОбОшибке(ИнформацияОбОшибке(), ОбъектыРасширений); + СообщитьОбОшибке(ТекстОшибки, ОбъектыРасширений); КонецПопытки; КонецЕсли; @@ -3257,7 +3344,7 @@ Если ВыполнятьВТранзакции Тогда ОтменитьТранзакцию(); КонецЕсли; - СообщитьОбОшибке(ИнформацияОбОшибке(), ОбъектыРасширений); + ВызватьИсключение; КонецПопытки; Возврат Не БылиИсключения; @@ -3270,15 +3357,11 @@ // Процедура СообщитьОбОшибке(Знач Описание, ОбъектыРасширений) - Если ТипЗнч(Описание) = Тип("ИнформацияОбОшибке") Тогда - Описание = ?(Описание.Причина = Неопределено, Описание, Описание.Причина).Описание; - КонецЕсли; - ЗаписьЖурналаРегистрации( ?(ОбъектыРасширений, - НСтр("ru = 'Идентификаторы объектов расширений. Замена идентификатора'", + НСтр("ru = 'Идентификаторы объектов расширений.Замена идентификатора'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - НСтр("ru = 'Идентификаторы объектов метаданных. Замена идентификатора'", + НСтр("ru = 'Идентификаторы объектов метаданных.Замена идентификатора'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())), УровеньЖурналаРегистрации.Ошибка, , diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo index b7c60fc16..ea7f4d77c 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo @@ -284,7 +284,14 @@ Значение пустой ссылки - AnyRef + ExchangePlanRef + BusinessProcessRef + DocumentRef + ChartOfCalculationTypesRef + TaskRef + ChartOfCharacteristicTypesRef + ChartOfAccountsRef + CatalogRef ru diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/Forms/ФормаЭлемента/Help/ru.html index d12256cbc..91abb0117 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 79707ee73..5b7a6a97d 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 6b9c2ca2e..a19062cca 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ManagerModule.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ManagerModule.bsl @@ -22,9 +22,11 @@ КонецПроцедуры -// Возвращает список реквизитов, которые разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Возврат Справочники.ИдентификаторыОбъектовМетаданных.РеквизитыРедактируемыеВГрупповойОбработке(); @@ -38,7 +40,9 @@ // естественный ключ. // Функция ПоляЕстественногоКлюча() Экспорт + Возврат Справочники.ИдентификаторыОбъектовМетаданных.ПоляЕстественногоКлюча(); + КонецФункции #КонецОбласти diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ИдентификаторыОбъектовРасширений.mdo b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ИдентификаторыОбъектовРасширений.mdo index 462cff961..56acdadf4 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ИдентификаторыОбъектовРасширений.mdo +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовРасширений/ИдентификаторыОбъектовРасширений.mdo @@ -135,6 +135,7 @@ String Variable AsDescription + AutoUpdate InDialog BothWays Catalog.ИдентификаторыОбъектовРасширений.Form.ФормаЭлемента @@ -284,7 +285,14 @@ Значение пустой ссылки - AnyRef + ExchangePlanRef + BusinessProcessRef + DocumentRef + ChartOfCalculationTypesRef + TaskRef + ChartOfCharacteristicTypesRef + ChartOfAccountsRef + CatalogRef ru diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form index 442ff15c7..ccc9d8f1e 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form @@ -526,18 +526,18 @@ КОГДА СправочникГрафикиРаботы.ПроизводственныйКалендарь <> ЗНАЧЕНИЕ(Справочник.ПроизводственныеКалендари.ПустаяСсылка) ТОГДА ВЫБОР КОГДА ДанныеПроизводственныхКалендарей.ДатаЗаполненности = ДАТАВРЕМЯ(1, 1, 1) - ТОГДА "Производственный календарь не заполнен" + ТОГДА ВЫРАЗИТЬ(&КалендарьНеЗаполнен КАК СТРОКА(100)) ИНАЧЕ ВЫБОР КОГДА ДанныеПроизводственныхКалендарей.ДатаЗаполненности < ДОБАВИТЬКДАТЕ(&ТекущаяДата, МЕСЯЦ, СправочникГрафикиРаботы.ГоризонтПланирования) - ТОГДА "Производственный календарь не заполнен на очередной календарный год" + ТОГДА ВЫРАЗИТЬ(&КалендарьНеЗаполненНаГод КАК СТРОКА(100)) КОНЕЦ КОНЕЦ ИНАЧЕ ВЫБОР КОГДА СправочникГрафикиРаботы.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1) - ТОГДА "График не был заполнен на очередной календарный год" + ТОГДА ВЫРАЗИТЬ(&ГрафикНеЗаполнен КАК СТРОКА(100)) ИНАЧЕ ВЫБОР КОГДА СправочникГрафикиРаботы.ДатаОкончания < ДОБАВИТЬКДАТЕ(&ТекущаяДата, МЕСЯЦ, СправочникГрафикиРаботы.ГоризонтПланирования) - ТОГДА "Период заполнения графика ограничен (см. поле «Дата окончания»)" + ТОГДА ВЫРАЗИТЬ(&ПериодГрафикаОграничен КАК СТРОКА(100)) КОНЕЦ КОНЕЦ КОНЕЦ diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl index 0cc5bfe57..ecf6d9e8a 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl @@ -14,9 +14,15 @@ Список.Параметры.УстановитьЗначениеПараметра("ТекущаяДата", ТекущаяДатаСеанса()); + Список.Параметры.УстановитьЗначениеПараметра("КалендарьНеЗаполнен", НСтр("ru = 'Производственный календарь не заполнен'")); + Список.Параметры.УстановитьЗначениеПараметра("КалендарьНеЗаполненНаГод", НСтр("ru = 'Производственный календарь не заполнен на очередной календарный год'")); + Список.Параметры.УстановитьЗначениеПараметра("ГрафикНеЗаполнен", НСтр("ru = 'График не был заполнен на очередной календарный год'")); + Список.Параметры.УстановитьЗначениеПараметра("ПериодГрафикаОграничен", НСтр("ru = 'Период заполнения графика ограничен (см. поле «Дата окончания»)'")); + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "ВладелецГрафика", , ВидСравненияКомпоновкиДанных.НеЗаполнено, , , РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form index be0a44070..2db114d55 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form @@ -2063,6 +2063,7 @@ Vertical auto + false @@ -2558,6 +2559,7 @@ Vertical auto + false true diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Help/ru.html index c6f91151e..c501cfd5b 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 59f931469..286a709d6 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем КонтекстВыбора; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Catalogs/Календари/Help/ru.html b/SSL/src/Catalogs/Календари/Help/ru.html index 6034340de..5a85c8e8b 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 88aafc509..c2bd8179e 100644 --- a/SSL/src/Catalogs/Календари/ManagerModule.bsl +++ b/SSL/src/Catalogs/Календари/ManagerModule.bsl @@ -167,110 +167,175 @@ // последовательно обновляем за каждый год. ТекстЗапроса = - "ВЫБРАТЬ - | УсловияОбновления.КодПроизводственногоКалендаря, - | УсловияОбновления.Год, - | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), ГОД, УсловияОбновления.Год - 1) КАК НачалоГода, - | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 12, 31), ГОД, УсловияОбновления.Год - 1) КАК КонецГода - |ПОМЕСТИТЬ УсловияОбновления - |ИЗ - | &УсловияОбновления КАК УсловияОбновления - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | Календари.Ссылка КАК ГрафикРаботы, - | УсловияОбновления.Год, - | Календари.СпособЗаполнения, - | Календари.ПроизводственныйКалендарь, - | ВЫБОР - | КОГДА Календари.ДатаНачала < УсловияОбновления.НачалоГода - | ТОГДА УсловияОбновления.НачалоГода - | ИНАЧЕ Календари.ДатаНачала - | КОНЕЦ КАК ДатаНачала, - | ВЫБОР - | КОГДА Календари.ДатаОкончания > УсловияОбновления.КонецГода - | ИЛИ Календари.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1) - | ТОГДА УсловияОбновления.КонецГода - | ИНАЧЕ Календари.ДатаОкончания - | КОНЕЦ КАК ДатаОкончания, - | Календари.ДатаОтсчета, - | Календари.УчитыватьПраздники - |ПОМЕСТИТЬ ОбновляемыеГрафикиРаботы - |ИЗ - | Справочник.Календари КАК Календари - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПроизводственныеКалендари КАК ПроизводственныеКалендари - | ПО (ПроизводственныеКалендари.Ссылка = Календари.ПроизводственныйКалендарь) - | И (Календари.СпособЗаполнения = ЗНАЧЕНИЕ(Перечисление.СпособыЗаполненияГрафикаРаботы.ПоНеделям) - | ИЛИ Календари.СпособЗаполнения = ЗНАЧЕНИЕ(Перечисление.СпособыЗаполненияГрафикаРаботы.ПоЦикламПроизвольнойДлины) - | И Календари.УчитыватьПраздники) - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ УсловияОбновления КАК УсловияОбновления - | ПО (УсловияОбновления.КодПроизводственногоКалендаря = ПроизводственныеКалендари.Код) - | И Календари.ДатаНачала <= УсловияОбновления.КонецГода - | И (Календари.ДатаОкончания >= УсловияОбновления.НачалоГода - | ИЛИ Календари.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1)) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РучныеИзмененияГрафиковРаботы КАК РучныеИзмененияПоВсемГодам - | ПО (РучныеИзмененияПоВсемГодам.ГрафикРаботы = Календари.Ссылка) - | И (РучныеИзмененияПоВсемГодам.Год = 0) - |ГДЕ - | РучныеИзмененияПоВсемГодам.ГрафикРаботы ЕСТЬ NULL - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ОбновляемыеГрафикиРаботы.ГрафикРаботы, - | ОбновляемыеГрафикиРаботы.Год, - | ОбновляемыеГрафикиРаботы.СпособЗаполнения, - | ОбновляемыеГрафикиРаботы.ПроизводственныйКалендарь, - | ОбновляемыеГрафикиРаботы.ДатаНачала, - | ОбновляемыеГрафикиРаботы.ДатаОкончания, - | ОбновляемыеГрафикиРаботы.ДатаОтсчета, - | ОбновляемыеГрафикиРаботы.УчитыватьПраздники - |ИЗ - | ОбновляемыеГрафикиРаботы КАК ОбновляемыеГрафикиРаботы - | - |УПОРЯДОЧИТЬ ПО - | ОбновляемыеГрафикиРаботы.ГрафикРаботы, - | ОбновляемыеГрафикиРаботы.Год - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ШаблонЗаполнения.Ссылка КАК ГрафикРаботы, - | ШаблонЗаполнения.НомерСтроки КАК НомерСтроки, - | ШаблонЗаполнения.ДеньВключенВГрафик - |ИЗ - | Справочник.Календари.ШаблонЗаполнения КАК ШаблонЗаполнения - |ГДЕ - | ШаблонЗаполнения.Ссылка В - | (ВЫБРАТЬ - | ОбновляемыеГрафикиРаботы.ГрафикРаботы - | ИЗ - | ОбновляемыеГрафикиРаботы) - | - |УПОРЯДОЧИТЬ ПО - | ГрафикРаботы, - | НомерСтроки - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | РасписаниеРаботы.Ссылка КАК ГрафикРаботы, - | РасписаниеРаботы.НомерДня КАК НомерДня, - | РасписаниеРаботы.ВремяНачала, - | РасписаниеРаботы.ВремяОкончания - |ИЗ - | Справочник.Календари.РасписаниеРаботы КАК РасписаниеРаботы - |ГДЕ - | РасписаниеРаботы.Ссылка В - | (ВЫБРАТЬ - | ОбновляемыеГрафикиРаботы.ГрафикРаботы - | ИЗ - | ОбновляемыеГрафикиРаботы) - | - |УПОРЯДОЧИТЬ ПО - | ГрафикРаботы, - | РасписаниеРаботы.НомерДня"; + "ВЫБРАТЬ + | УсловияОбновления.КодПроизводственногоКалендаря, + | УсловияОбновления.Год, + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), ГОД, УсловияОбновления.Год - 1) КАК НачалоГода, + | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 12, 31), ГОД, УсловияОбновления.Год - 1) КАК КонецГода + |ПОМЕСТИТЬ УсловияОбновления + |ИЗ + | &УсловияОбновления КАК УсловияОбновления + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Календари.Ссылка КАК ГрафикРаботы, + | Календари.СпособЗаполнения, + | Календари.ПроизводственныйКалендарь, + | Календари.ДатаОтсчета, + | Календари.УчитыватьПраздники, + | Календари.ДатаНачала, + | Календари.ДатаОкончания + |ПОМЕСТИТЬ ВТГрафикиРаботыЗависимыеОтКалендарей + |ИЗ + | Справочник.Календари КАК Календари + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПроизводственныеКалендари КАК ПроизводственныеКалендари + | ПО (ПроизводственныеКалендари.Ссылка = Календари.ПроизводственныйКалендарь) + | И (Календари.СпособЗаполнения = ЗНАЧЕНИЕ(Перечисление.СпособыЗаполненияГрафикаРаботы.ПоНеделям)) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | Календари.Ссылка, + | Календари.СпособЗаполнения, + | Календари.ПроизводственныйКалендарь, + | Календари.ДатаОтсчета, + | Календари.УчитыватьПраздники, + | Календари.ДатаНачала, + | Календари.ДатаОкончания + |ИЗ + | Справочник.Календари КАК Календари + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПроизводственныеКалендари КАК ПроизводственныеКалендари + | ПО (ПроизводственныеКалендари.Ссылка = Календари.ПроизводственныйКалендарь) + | И (Календари.СпособЗаполнения = ЗНАЧЕНИЕ(Перечисление.СпособыЗаполненияГрафикаРаботы.ПоЦикламПроизвольнойДлины)) + | И (Календари.УчитыватьПраздники) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Календари.ГрафикРаботы, + | УсловияОбновления.Год, + | Календари.СпособЗаполнения, + | Календари.ПроизводственныйКалендарь, + | ВЫБОР + | КОГДА Календари.ДатаНачала < УсловияОбновления.НачалоГода + | ТОГДА УсловияОбновления.НачалоГода + | ИНАЧЕ Календари.ДатаНачала + | КОНЕЦ КАК ДатаНачала, + | ВЫБОР + | КОГДА Календари.ДатаОкончания > УсловияОбновления.КонецГода + | ТОГДА УсловияОбновления.КонецГода + | ИНАЧЕ Календари.ДатаОкончания + | КОНЕЦ КАК ДатаОкончания, + | Календари.ДатаОтсчета, + | Календари.УчитыватьПраздники + |ПОМЕСТИТЬ ВТГрафикиРаботыПоУсловиюОбновления + |ИЗ + | ВТГрафикиРаботыЗависимыеОтКалендарей КАК Календари + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ УсловияОбновления КАК УсловияОбновления + | ПО (УсловияОбновления.КодПроизводственногоКалендаря = Календари.ПроизводственныйКалендарь.Код) + | И Календари.ДатаНачала <= УсловияОбновления.КонецГода + | И Календари.ДатаОкончания >= УсловияОбновления.НачалоГода + | И (Календари.ДатаОкончания <> ДАТАВРЕМЯ(1, 1, 1)) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | Календари.ГрафикРаботы, + | УсловияОбновления.Год, + | Календари.СпособЗаполнения, + | Календари.ПроизводственныйКалендарь, + | ВЫБОР + | КОГДА Календари.ДатаНачала < УсловияОбновления.НачалоГода + | ТОГДА УсловияОбновления.НачалоГода + | ИНАЧЕ Календари.ДатаНачала + | КОНЕЦ, + | УсловияОбновления.КонецГода, + | Календари.ДатаОтсчета, + | Календари.УчитыватьПраздники + |ИЗ + | ВТГрафикиРаботыЗависимыеОтКалендарей КАК Календари + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ УсловияОбновления КАК УсловияОбновления + | ПО (УсловияОбновления.КодПроизводственногоКалендаря = Календари.ПроизводственныйКалендарь.Код) + | И Календари.ДатаНачала <= УсловияОбновления.КонецГода + | И (Календари.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1)) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Календари.ГрафикРаботы, + | Календари.Год, + | Календари.СпособЗаполнения, + | Календари.ПроизводственныйКалендарь, + | Календари.ДатаНачала, + | Календари.ДатаОкончания, + | Календари.ДатаОтсчета, + | Календари.УчитыватьПраздники + |ПОМЕСТИТЬ ВТОбновляемыеГрафикиРаботы + |ИЗ + | ВТГрафикиРаботыПоУсловиюОбновления КАК Календари + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РучныеИзмененияГрафиковРаботы КАК РучныеИзмененияПоВсемГодам + | ПО (РучныеИзмененияПоВсемГодам.ГрафикРаботы = Календари.ГрафикРаботы) + | И (РучныеИзмененияПоВсемГодам.Год = 0) + |ГДЕ + | РучныеИзмененияПоВсемГодам.ГрафикРаботы ЕСТЬ NULL + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ОбновляемыеГрафикиРаботы.ГрафикРаботы, + | ОбновляемыеГрафикиРаботы.Год, + | ОбновляемыеГрафикиРаботы.СпособЗаполнения, + | ОбновляемыеГрафикиРаботы.ПроизводственныйКалендарь, + | ОбновляемыеГрафикиРаботы.ДатаНачала, + | ОбновляемыеГрафикиРаботы.ДатаОкончания, + | ОбновляемыеГрафикиРаботы.ДатаОтсчета, + | ОбновляемыеГрафикиРаботы.УчитыватьПраздники + |ИЗ + | ВТОбновляемыеГрафикиРаботы КАК ОбновляемыеГрафикиРаботы + | + |УПОРЯДОЧИТЬ ПО + | ОбновляемыеГрафикиРаботы.ГрафикРаботы, + | ОбновляемыеГрафикиРаботы.Год + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ШаблонЗаполнения.Ссылка КАК ГрафикРаботы, + | ШаблонЗаполнения.НомерСтроки КАК НомерСтроки, + | ШаблонЗаполнения.ДеньВключенВГрафик + |ИЗ + | Справочник.Календари.ШаблонЗаполнения КАК ШаблонЗаполнения + |ГДЕ + | ШаблонЗаполнения.Ссылка В + | (ВЫБРАТЬ + | ВТОбновляемыеГрафикиРаботы.ГрафикРаботы + | ИЗ + | ВТОбновляемыеГрафикиРаботы) + | + |УПОРЯДОЧИТЬ ПО + | ГрафикРаботы, + | НомерСтроки + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | РасписаниеРаботы.Ссылка КАК ГрафикРаботы, + | РасписаниеРаботы.НомерДня КАК НомерДня, + | РасписаниеРаботы.ВремяНачала, + | РасписаниеРаботы.ВремяОкончания + |ИЗ + | Справочник.Календари.РасписаниеРаботы КАК РасписаниеРаботы + |ГДЕ + | РасписаниеРаботы.Ссылка В + | (ВЫБРАТЬ + | ВТОбновляемыеГрафикиРаботы.ГрафикРаботы + | ИЗ + | ВТОбновляемыеГрафикиРаботы) + | + |УПОРЯДОЧИТЬ ПО + | ГрафикРаботы, + | РасписаниеРаботы.НомерДня"; Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("УсловияОбновления", УсловияОбновления); diff --git a/SSL/src/Catalogs/Календари/Календари.mdo b/SSL/src/Catalogs/Календари/Календари.mdo index 5a417d16b..be43e77ee 100644 --- a/SSL/src/Catalogs/Календари/Календари.mdo +++ b/SSL/src/Catalogs/Календари/Календари.mdo @@ -313,7 +313,7 @@ Владелец графика - AnyRef + CatalogRef ru 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 ebfd3fce5..314613ab0 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Form.form +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Form.form @@ -142,6 +142,7 @@ Vertical auto + false @@ -210,6 +211,7 @@ Vertical auto + false @@ -313,6 +315,7 @@ Page auto + false @@ -386,6 +389,7 @@ Vertical auto + false true diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Help/ru.html b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Help/ru.html index bcd0d125c..32c6b3f22 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Help/ru.html +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Help/ru.html @@ -1,7 +1,7 @@ - +

              Программа позволяет загружать классификатор банков РФ с сайта агентства "РосБизнесКонсалтинг" (www.rbc.ru). При этом программа учитывает недействующие банки (в карточке такого банка включен соответствующий флажок).

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

              -

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

              +

              Производится с помощью кнопки Загрузить классификатор из классификатора банков.

              • С помощью переключателя выберите Вариант загрузки:
                • diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Module.bsl b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Module.bsl index 4f577c866..c8aa27680 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Module.bsl +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ПараметрыОбработчикаОжидания; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Help/ru.html b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Help/ru.html index 3f35c7952..06754b176 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Help/ru.html +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

                  • diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Form.form index 9410fff20..c71437432 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Form.form @@ -35,6 +35,7 @@ Left true + 30 true true true @@ -81,7 +82,6 @@ Left true - 15 true true true @@ -188,6 +188,7 @@ Vertical auto + false @@ -258,6 +259,7 @@ Vertical auto + false true @@ -287,6 +289,131 @@ ГруппаКоррСчетБИК 15 + + Коды + 41 + + Код + 1 + true + true + + true + + + Объект.Code + + + КодExtendedTooltip + 32 + Label + true + true + + Left + + + + КодКонтекстноеМеню + 2 + true + + InputField + Auto + true + Left + true + + 12 + true + true + false + true + true + true + true + Normal + + + + СВИФТКод + 38 + + <key>ru</key> + <value>СВИФТ БИК</value> + + true + true + + true + + + Объект.СВИФТБИК + + + СВИФТКодРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + СВИФТКодКонтекстноеМеню + 39 + true + + InputField + Enter + true + Left + true + + 11 + true + true + false + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Коды</value> + + + ru + Коды + + + КодыРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + КоррСчет 7 @@ -331,19 +458,19 @@ - Код - 1 + ИНН + 45 true true true - Объект.Code + Объект.ИНН - КодExtendedTooltip - 32 + ИННРасширеннаяПодсказка + 47 Label true true @@ -352,12 +479,12 @@ - КодКонтекстноеМеню - 2 + ИННКонтекстноеМеню + 46 true InputField - Auto + Enter true Left true @@ -390,6 +517,7 @@ UsualGroup + Vertical Auto NormalSeparation true @@ -473,9 +601,9 @@ Left true + 30 true true - true true true true @@ -515,9 +643,9 @@ Left true + 20 true true - true true true true diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Help/ru.html index 0c41faabb..8e27ab3cf 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Help/ru.html @@ -1,11 +1,16 @@ - +

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

                    -
                    • Деятельность банка прекращена - программа учитывает недействующие банки и автоматически включает флажок для таких банков. Также можно его включить вручную, если получены сведения о закрытии банка. -
                    • +
                      • Наименование банка - полное наименование банка.
                      • -
                        -
                        Корр. счет - корреспондентский счет.
                        БИК - БИК банка.
                        +
                        Деятельность банка прекращена - программа учитывает недействующие банки и автоматически включает флажок для таких банков. Также можно его включить вручную, если получены сведения о закрытии банка.
                        +
                      • +
                        БИК - БИК банка.
                        +
                      • +
                        СВИФТ БИК.
                        +
                      • Корр. счет - корреспондентский счет. +
                      • +
                        ИНН.
                      • Город - город, в котором находится банк.
                      • diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Module.bsl index f2deb73fd..76fe7d575 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаЭлемента/Module.bsl @@ -14,6 +14,7 @@ Если Объект.ДеятельностьПрекращена Тогда КлючСохраненияПоложенияОкна = "ДеятельностьПрекращена"; + Элементы.НадписьДеятельностьБанкаПрекращена.Заголовок = РаботаСБанками.ПояснениеНедействительногоБанка(Объект.Ссылка); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Help/ru.html b/SSL/src/Catalogs/КлассификаторБанковРФ/Help/ru.html index deb1272bf..8fdc94dbd 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Help/ru.html +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

                        @@ -16,10 +16,12 @@
                        Адрес - полный адрес банка.

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

                      С помощью команды Еще - Изменить форму можно вывести дополнительную информацию:

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

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

                      • Банки в списке сгруппированы по регионам, при входе в список видны только регионы банков. Выберите нужный регион для просмотра банков этого региона.
                        @@ -30,7 +32,7 @@
                        После запуска программы производится проверка актуальности классификатора банков и в случае неактуальности (если классификатор не обновлялся в течение тридцати дней) выводится сообщение с предложением обновить классификатор банков. Перейдите по ссылке Обновить классификатор банков.
                      • -

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

                        +

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

                      • Также можно настроить обновление классификатора с сайта РБК автоматически по расписанию с помощью регламентного задания "Загрузка классификатора банков".
                      • diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/ManagerModule.bsl b/SSL/src/Catalogs/КлассификаторБанковРФ/ManagerModule.bsl index 466d2a7a9..aae5a2104 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/ManagerModule.bsl +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/ManagerModule.bsl @@ -5,9 +5,11 @@ //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. -// Возвращает список реквизитов, которые не нужно редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые не рекомендуется редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; @@ -16,10 +18,6 @@ КонецФункции -#КонецОбласти - -#Область СлужебныйПрограммныйИнтерфейс - // Возвращает реквизиты справочника, которые образуют естественный ключ // для элементов справочника. // @@ -37,5 +35,5 @@ КонецФункции #КонецОбласти - + #КонецЕсли diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/КлассификаторБанковРФ.mdo b/SSL/src/Catalogs/КлассификаторБанковРФ/КлассификаторБанковРФ.mdo index c94ec3197..90f18d65c 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/КлассификаторБанковРФ.mdo +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/КлассификаторБанковРФ.mdo @@ -263,6 +263,51 @@ Use Use + + СВИФТБИК + + ru + СВИФТ БИК + + + String + + 11 + + + + ru + Международный банковский идентификационный код (SWIFT BIC) + + + + + Use + Use + + + ИНН + + ru + ИНН + + + String + + 12 + + + + ru + Идентификационный номер налогоплательщика + + + + + Index + Use + Use + ЗагрузкаКлассификатора @@ -315,12 +360,12 @@ MobileDevice - КлассификаторБанковРФ + ЗагрузкаКлассификатораБанковРФ ru - Классификатор банков РФ + Загрузка классификатора банков РФ - Открывает форму для редактирования + Открывает помощник загрузки классификатора банков РФ ActionsPanelTools Auto diff --git a/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/КлючевыеОперации/Forms/ФормаЭлемента/Help/ru.html index 0283eb463..c6fb590a9 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 c6a1cacf7..37ad28175 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/Help/ru.html +++ b/SSL/src/Catalogs/КлючевыеОперации/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

                        diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Help/ru.html index 6c28bf134..155e5cff2 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 4c2738d6a..4e206ba10 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    • Общий реквизит входит в несколько наборов. Этот вариант подходит для тех случаев, когда общим должен быть не только список значений, но и сам реквизит. В списках и отчетах по элементам различных справочников и документов общие реквизиты группируются и выводятся как один реквизит в одной колонке или поле. Например, с помощью общего реквизита Цвет можно отобрать всю желтую одежду и обувь.
    • Для того чтобы использовать эту возможность, необходимо включить флажок Общие реквизиты и сведения в разделе Администрирование - Общие настройки.
    • diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl index 4bb3ae195..27e3b4488 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ManagerModule.bsl @@ -2,9 +2,11 @@ #Область ПрограммныйИнтерфейс -// Возвращает список реквизитов, которые разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт РедактируемыеРеквизиты = Новый Массив; diff --git a/SSL/src/Catalogs/Организации/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/Организации/Forms/ФормаЭлемента/Help/ru.html index 3a782bc59..445782a30 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 6c4066184..6fd6af299 100644 --- a/SSL/src/Catalogs/Организации/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Организации/Forms/ФормаЭлемента/Module.bsl @@ -76,7 +76,7 @@ Процедура Подключаемый_КонтактнаяИнформацияПриИзменении(Элемент) Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); - МодульУправлениеКонтактнойИнформациейКлиент.ПредставлениеПриИзменении(ЭтотОбъект, Элемент); + МодульУправлениеКонтактнойИнформациейКлиент.ПриИзменении(ЭтотОбъект, Элемент); КонецЕсли; КонецПроцедуры @@ -84,8 +84,15 @@ Процедура Подключаемый_КонтактнаяИнформацияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); - Результат = МодульУправлениеКонтактнойИнформациейКлиент.ПредставлениеНачалоВыбора(ЭтотОбъект, Элемент, , СтандартнаяОбработка); - ОбновитьКонтактнуюИнформацию(Результат); + МодульУправлениеКонтактнойИнформациейКлиент.НачалоВыбора(ЭтотОбъект, Элемент, , СтандартнаяОбработка); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_КонтактнаяИнформацияПриНажатии(Элемент, СтандартнаяОбработка) + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); + МодульУправлениеКонтактнойИнформациейКлиент.НачалоВыбора(ЭтотОбъект, Элемент,, СтандартнаяОбработка); КонецЕсли; КонецПроцедуры @@ -93,8 +100,7 @@ Процедура Подключаемый_КонтактнаяИнформацияОчистка(Элемент, СтандартнаяОбработка) Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); - Результат = МодульУправлениеКонтактнойИнформациейКлиент.ПредставлениеОчистка(ЭтотОбъект, Элемент.Имя); - ОбновитьКонтактнуюИнформацию(Результат); + МодульУправлениеКонтактнойИнформациейКлиент.Очистка(ЭтотОбъект, Элемент.Имя); КонецЕсли; КонецПроцедуры @@ -102,21 +108,17 @@ Процедура Подключаемый_КонтактнаяИнформацияВыполнитьКоманду(Команда) Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); - Результат = МодульУправлениеКонтактнойИнформациейКлиент.ПодключаемаяКоманда(ЭтотОбъект, Команда.Имя); - ОбновитьКонтактнуюИнформацию(Результат); - МодульУправлениеКонтактнойИнформациейКлиент.ОткрытьФормуВводаАдреса(ЭтотОбъект, Результат); + МодульУправлениеКонтактнойИнформациейКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда.Имя); КонецЕсли; КонецПроцедуры &НаСервере -Функция ОбновитьКонтактнуюИнформацию(Результат = Неопределено) +Процедура Подключаемый_ОбновитьКонтактнуюИнформацию(Результат) Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); - Возврат МодульУправлениеКонтактнойИнформацией.ОбновитьКонтактнуюИнформацию(ЭтотОбъект, Объект, Результат); + МодульУправлениеКонтактнойИнформацией.ОбновитьКонтактнуюИнформацию(ЭтотОбъект, Объект, Результат); КонецЕсли; - - Возврат Неопределено; -КонецФункции +КонецПроцедуры // Конец СтандартныеПодсистемы.КонтактнаяИнформация @@ -125,7 +127,7 @@ Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда МодульУправлениеПечатьюКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеПечатьюКлиент"); - МодульУправлениеПечатьюКлиент.ВыполнитьПодключаемуюКомандуПечати(Команда, ЭтаФорма, Объект); + МодульУправлениеПечатьюКлиент.ВыполнитьПодключаемуюКомандуПечати(Команда, ЭтотОбъект, Объект); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/Организации/Help/ru.html b/SSL/src/Catalogs/Организации/Help/ru.html index 8708ef4d8..a9fec0ace 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 19d5b8499..b98077f2c 100644 --- a/SSL/src/Catalogs/Организации/ManagerModule.bsl +++ b/SSL/src/Catalogs/Организации/ManagerModule.bsl @@ -5,9 +5,11 @@ //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. -// Возвращает список реквизитов, которые не нужно редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые не рекомендуется редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; @@ -121,7 +123,7 @@ ПараметрыВида.Вид = "ФактАдресОрганизации"; ПараметрыВида.Подсказка = НСтр("ru='Фактический адрес организации'"); ПараметрыВида.МожноИзменятьСпособРедактирования = Истина; - ПараметрыВида.Порядок = 1; + ПараметрыВида.Порядок = 2; МодульУправлениеКонтактнойИнформацией.УстановитьСвойстваВидаКонтактнойИнформации(ПараметрыВида); ПараметрыВида = МодульУправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации("Телефон"); diff --git a/SSL/src/Catalogs/Организации/Организации.mdo b/SSL/src/Catalogs/Организации/Организации.mdo index 1df2e5423..66e272ac1 100644 --- a/SSL/src/Catalogs/Организации/Организации.mdo +++ b/SSL/src/Catalogs/Организации/Организации.mdo @@ -428,6 +428,27 @@ Use Use + + ДействуетС + + ru + Действует С + + + Date + + Date + + + + ru + Дата актуальности контактная информация + + + + Use + Use + ФормаЭлемента diff --git a/SSL/src/Catalogs/ОчередьЗаданий/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ОчередьЗаданий/Forms/ФормаЭлемента/Form.form index c799e557c..5f20b8ffb 100644 --- a/SSL/src/Catalogs/ОчередьЗаданий/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ОчередьЗаданий/Forms/ФормаЭлемента/Form.form @@ -269,6 +269,7 @@ Vertical auto + false @@ -627,6 +628,7 @@ Vertical auto + false @@ -699,6 +701,7 @@ Vertical auto + false true diff --git a/SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/Forms/ФормаЭлемента/Form.form index 955a8c648..3951e816b 100644 --- a/SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ОчередьЗаданийОбластейДанных/Forms/ФормаЭлемента/Form.form @@ -353,6 +353,7 @@ Vertical auto + false @@ -711,6 +712,7 @@ Vertical auto + false @@ -783,6 +785,7 @@ Vertical auto + false true diff --git a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form index c823a8298..50be3cc1e 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form @@ -1,5 +1,115 @@ + + ГруппаПояснениеОблачногоСервиса + 45 + + ДекорацияКартинкаОблачногоСервиса + 53 + + <key>ru</key> + <value>Декорация картинка облачного сервиса</value> + + true + true + + true + + + ДекорацияКартинкаОблачногоСервисаРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + + ДекорацияКартинкаОблачногоСервисаКонтекстноеМеню + 54 + true + + 5 + true + 2 + true + + + CommonPicture.ПапкаОблачногоСервиса + + + + + ДекорацияПояснение + 50 + + <key>ru</key> + <value>Работа с файлами этой папки ведется в облачном сервисе <link 1>%1</></value> + + true + true + + true + + + ДекорацияПояснениеРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + + ДекорацияПояснениеКонтекстноеМеню + 51 + true + + true + Label + true + true + true + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Группа пояснение облачного сервиса</value> + + + ru + Группа пояснение облачного сервиса + + false + + ГруппаПояснениеОблачногоСервисаРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + Код 2 @@ -394,6 +504,33 @@ ФормаКоманднаяПанель -1 + + ФормаНастроитьСинхронизацию + 43 + true + true + + true + + + ФормаНастроитьСинхронизациюРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + Form.Command.НастроитьСинхронизацию + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + ФормаОбщаяКомандаНастроитьПрава 41 @@ -430,6 +567,10 @@ NotificationProcessing ОбработкаОповещения + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере @@ -521,6 +662,29 @@ DontUse Auto + + НастроитьСинхронизацию + + <key>ru</key> + <value>Синхронизация с облаком ...</value> + + 2 + + ru + Настроить синхронизацию + + + true + + + + НастроитьСинхронизацию + + + FunctionalOption.ИспользоватьСинхронизациюФайлов + DontUse + Auto + diff --git a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Help/ru.html index 1da4c3abd..49e57606c 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 7d4b925e9..b59c34433 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl @@ -25,6 +25,28 @@ ОбновитьПолныйПуть(); + ОбновитьПояснениеОблачногоСервиса(); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + + Если Не МодульУправлениеДоступом.ЕстьРоль("НастройкаСинхронизацииФайлов") Тогда + Элементы.ФормаНастроитьСинхронизацию.Видимость = Ложь; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -35,6 +57,7 @@ МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); Если МодульУправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда ОбновитьЭлементыДополнительныхРеквизитов(); + МодульУправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); КонецЕсли; КонецЕсли; // Конец СтандартныеПодсистемы.Свойства @@ -112,7 +135,7 @@ КонецЕсли; Если Объект.Ссылка.Пустая() Тогда - Если Записать() = Ложь Тогда + Если Записать()= Ложь Тогда Возврат; КонецЕсли; КонецЕсли; @@ -198,6 +221,29 @@ КонецПроцедуры +&НаКлиенте +Процедура НастроитьСинхронизацию(Команда) + + НастройкаСинхронизации = ПараметрыНастройкиСинхронизации(Объект.Ссылка); + + Если ЗначениеЗаполнено(НастройкаСинхронизации.УчетнаяЗапись) Тогда + ТипЗначения = Тип("РегистрСведенийКлючЗаписи.НастройкиСинхронизацииФайлов"); + ПараметрыЗаписи = Новый Массив(1); + ПараметрыЗаписи[0] = НастройкаСинхронизации; + + КлючЗаписи = Новый(ТипЗначения, ПараметрыЗаписи); + + ПараметрыЗаписи = Новый Структура; + ПараметрыЗаписи.Вставить("Ключ", КлючЗаписи); + Иначе + НастройкаСинхронизации.Вставить("ЭтоФайл", Истина); + ПараметрыЗаписи = НастройкаСинхронизации; + КонецЕсли; + + ОткрытьФорму("РегистрСведений.НастройкиСинхронизацииФайлов.Форма.ПростаяФормаЗаписиНастройки", ПараметрыЗаписи, ЭтотОбъект); + +КонецПроцедуры + // СтандартныеПодсистемы.Свойства &НаКлиенте @@ -281,6 +327,112 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбновитьЗависимостиДополнительныхРеквизитов() + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + // Конец СтандартныеПодсистемы.Свойства +&НаСервере +Функция ПараметрыНастройкиСинхронизации(ВладелецФайла) + + ТипВладельцаФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Тип("СправочникСсылка.Файлы")); + + Отбор = Новый Структура( + "ВладелецФайла, ТипВладельцаФайла, УчетнаяЗапись", + ВладелецФайла, + ТипВладельцаФайла, + Справочники.УчетныеЗаписиСинхронизацииФайлов.ПустаяСсылка()); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | НастройкиСинхронизацииФайлов.ВладелецФайла, + | НастройкиСинхронизацииФайлов.ТипВладельцаФайла, + | НастройкиСинхронизацииФайлов.УчетнаяЗапись + |ИЗ + | РегистрСведений.НастройкиСинхронизацииФайлов КАК НастройкиСинхронизацииФайлов + |ГДЕ + | НастройкиСинхронизацииФайлов.ВладелецФайла = &ВладелецФайла + | И НастройкиСинхронизацииФайлов.ТипВладельцаФайла = &ТипВладельцаФайла"; + + Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайла); + Запрос.УстановитьПараметр("ТипВладельцаФайла", ТипВладельцаФайла); + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + Если ВыборкаДетальныеЗаписи.Количество() = 1 Тогда + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Отбор.УчетнаяЗапись = ВыборкаДетальныеЗаписи.УчетнаяЗапись; + КонецЦикла; + КонецЕсли; + + Возврат Отбор; + +КонецФункции + +&НаСервере +Процедура ОбновитьПояснениеОблачногоСервиса() + + ВидимостьПояснения = Ложь; + + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюФайлов") Тогда + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | СтатусыСинхронизацииФайловСОблачнымСервисом.Файл, + | СтатусыСинхронизацииФайловСОблачнымСервисом.Href, + | СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись.Наименование, + | СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись.Сервис КАК Сервис + |ИЗ + | РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом + |ГДЕ + | СтатусыСинхронизацииФайловСОблачнымСервисом.Файл = &ВладелецФайла"; + + Запрос.УстановитьПараметр("ВладелецФайла", Объект.Ссылка); + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + + АдресПапкиВОблачномСервисе = ФайловыеФункцииСлужебныйКлиентСервер.АдресВОблачномСервисе( + ВыборкаДетальныеЗаписи.Сервис, ВыборкаДетальныеЗаписи.Href); + + ВидимостьПояснения = Истина; + + ЧастиСтроки = Новый Массив; + ЧастиСтроки.Добавить(НСтр("ru = 'Работа с файлами ведется в облачном сервисе'")); + ЧастиСтроки.Добавить(" "); + ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока(ВыборкаДетальныеЗаписи.УчетнаяЗаписьНаименование, , , , АдресПапкиВОблачномСервисе)); + Элементы.ДекорацияПояснение.Заголовок = Новый ФорматированнаяСтрока(ЧастиСтроки); + + КонецЦикла; + + КонецЕсли; + + Элементы.ГруппаПояснениеОблачногоСервиса.Видимость = ВидимостьПояснения; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Catalogs/ПапкиФайлов/Help/ru.html b/SSL/src/Catalogs/ПапкиФайлов/Help/ru.html index a87c5ab7b..ac1ca91e1 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 17164c6b2..7b20c593e 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/ManagerModule.bsl @@ -2,9 +2,11 @@ #Область ПрограммныйИнтерфейс -// Возвращает список реквизитов, которые разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт РедактируемыеРеквизиты = Новый Массив; diff --git a/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl b/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl index d0afde2f9..25bb2fe94 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl @@ -47,7 +47,7 @@ Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл - Если Не Выборка.Редактирует.Пустая() Тогда + Если ЗначениеЗаполнено(Выборка.Редактирует) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Папку %1 нельзя удалить, т.к. она содержит файл ""%2"", занятый для редактирования.'"), Строка(Ссылка), diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Help/ru.html b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Help/ru.html index 7fb028880..de9a830d2 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Help/ru.html +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаВыбора/Help/ru.html @@ -1,4 +1,4 @@ - +

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

            Открывается по кнопке выбора, например, из окна папки.

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

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

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

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

        Редактирование папки

        +
        • +
          Выполните команду Еще - Изменить, внесите необходимые изменения.

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

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

        Выбор папки

        • diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Forms/ФормаЭлемента/Help/ru.html index c5ccd6f9e..ac6b873d7 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 603323a29..e8a75b264 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Help/ru.html +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

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

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

          -

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

          -

          См. также:

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

        Редактирование папки

        +
        • +
          Выполните команду Еще - Изменить, внесите изменения.

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

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

        См. также:

        \ No newline at end of file diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ManagerModule.bsl b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ManagerModule.bsl index 7b6287f3c..b00d84102 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ManagerModule.bsl @@ -5,9 +5,11 @@ //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. -// Возвращает список реквизитов, которые не разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые не рекомендуется редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/Пользователи/Forms/ВыборПользователяОперационнойСистемы/Help/ru.html b/SSL/src/Catalogs/Пользователи/Forms/ВыборПользователяОперационнойСистемы/Help/ru.html index 535ea5924..477e43203 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/ПользователиИнформационнойБазы/Help/ru.html b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИнформационнойБазы/Help/ru.html index 8c22eb9e9..4581d0bcc 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИнформационнойБазы/Help/ru.html +++ b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИнформационнойБазы/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

        @@ -28,9 +28,9 @@
      • Изменен в конфигураторе - принимает значение "Да" или остается пустым, если значение поля Ложь;
      • -
        Удален в конфигураторе - принимает значение "Да" или остается пустым, если значение поля Ложь.

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

      +
      Удален в конфигураторе - принимает значение "Да" или остается пустым, если значение поля Ложь.

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

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

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

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

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

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

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

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

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

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

    См. также:

    \ No newline at end of file diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form index 9fb1e665d..37c3ab0c4 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form @@ -1025,6 +1025,10 @@ OnActivateRow ПользователиСписокПриАктивизацииСтроки + + BeforeRowChange + ПользователиСписокПередНачаломИзменения + ПользователиСписокСтрокаПоиска 174 @@ -2018,6 +2022,7 @@ Page Vertical + false @@ -2126,6 +2131,7 @@ Page Vertical + false true diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl index d918fbe36..ece19fad1 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl @@ -376,7 +376,9 @@ &НаКлиенте Процедура ПользователиСписокПриАктивизацииСтроки(Элемент) - Если Элементы.ПользователиСписок.ТекущиеДанные = Неопределено Тогда + Если Элементы.ПользователиСписок.ТекущиеДанные = Неопределено + Или Элементы.ПользователиСписок.ТекущиеДанные.Свойство("ГруппировкаСтроки") Тогда + ВозможноСменитьПароль = Ложь; Иначе ВозможноСменитьПароль = Элементы.ПользователиСписок.ТекущиеДанные.ВозможноСменитьПароль; @@ -418,6 +420,20 @@ КонецПроцедуры +&НаКлиенте +Процедура ПользователиСписокПередНачаломИзменения(Элемент, Отказ) + + Отказ = Истина; + + Если Не ЗначениеЗаполнено(Элемент.ТекущаяСтрока) Тогда + Возврат; + КонецЕсли; + + ПараметрыФормы = Новый Структура("Ключ", Элемент.ТекущаяСтрока); + ОткрытьФорму("Справочник.Пользователи.ФормаОбъекта", ПараметрыФормы, Элемент); + +КонецПроцедуры + &НаКлиенте Процедура ПользователиСписокПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form index 7fb40fe39..fb40ab66b 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form @@ -959,6 +959,7 @@ Vertical auto + false @@ -1034,6 +1035,7 @@ Vertical auto + false true @@ -1572,10 +1574,6 @@ ДекорацияОтступ 203 - - <key>ru</key> - <value> </value> - true true @@ -2327,6 +2325,7 @@ Page auto + false @@ -2355,6 +2354,7 @@ Vertical auto + false @@ -2383,6 +2383,7 @@ Vertical auto + false @@ -2459,6 +2460,7 @@ Vertical auto + false true @@ -2562,22 +2564,6 @@ true
    - - ПользовательИБПароль - - <key>ru</key> - <value>Пользователь ИБ Пароль</value> - - 5 - - - true - - - true - - true - ПользовательИБПоказыватьВСпискеВыбора @@ -2900,6 +2886,40 @@ <common>true</common> </edit> </columns> + <columns> + <name>ЭтоНедоступнаяРоль</name> + <title> + <key>ru</key> + <value>Это недоступная роль</value> + + 6 + + Boolean + + + true + + + true + + + + ЭтоНесуществующаяРоль + + <key>ru</key> + <value>Это несуществующая роль</value> + + 7 + + Boolean + + + true + + + true + + ПользовательИБРоли @@ -3271,6 +3291,37 @@ true + + ПользовательИБПароль + + <key>ru</key> + <value>Пользователь ИБ Пароль</value> + + 40 + + + true + + + true + + true + + + ПользовательИБСтарыйПароль + + <key>ru</key> + <value>Пользователь ИБСтарый пароль</value> + + 41 + + + true + + + true + + ПоказатьТолькоВыбранныеРоли @@ -3417,6 +3468,7 @@ <name>СменитьПароль</name> </handler> </action> + <modifiesStoredData>true</modifiesStoredData> <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html index aafcd750d..abf192dd4 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Описание свойств пользователя.</p> <p>Для <a href="#1">ввода или редактирования</a> сведений о пользователе необходимы права администрирования или ответственного за <a href="Catalog.Пользователи/Help">список пользователей</a>. </p> <p>Вход в программу разрешает только администратор. </p> @@ -23,7 +23,7 @@ </li><li>цифры </li><li>символы (подчеркивание, скобки и т.д.) </li></ul></li></ul><p>Нежелательно, чтобы пароль совпадал с именем пользователя, полностью состоял из цифр, содержал понятные слова, содержал чередующиеся группы символов. </p> <ul><li>Примеры хороших паролей:<br>“nj7{jhjibq*Gfhjkm, <br>F5”njnGhkmNj;t{HI. -</li><li>Примеры неудачных паролей: <br>Иванов, <br>qwerty, <br>12345678, <br>123123123.</li></ul><h3><a name="#1">Ввод пользователя</a> (при наличии права)</h3> +</li><li>Примеры неудачных паролей: <br>Иванов, <br>qwerty, <br>12345678, <br>123123123.</li></ul><h3><a name="1">Ввод пользователя</a> (при наличии права)</h3> <p>Если пользователя вводит ответственный за список и заполняет имя для входа, тогда администратору будет показана рекомендация проверить настройки для входа. После разрешения входа рекомендация скрывается, а ответственный более не может изменить настройки для входа, кроме отключения разрешения на вход в программу. Для того чтобы посмотреть всех таких пользователей, которых подготовил ответственный, можно установить отбор в списке по полю <strong>Подготовлен</strong>. </p> <p>Сведения о пользователе располагаются на двух вкладках: </p> <ul><li><strong>Главное</strong>  @@ -50,14 +50,14 @@ </li><li>В списке <strong>Разрешенные действия (роли)</strong> можно назначить пользователю одну или несколько ролей, которые в совокупности образуют его персональные настройки прав доступа. Роли могут соответствовать как различным должностным обязанностям (или видам деятельности) пользователей, так и более мелким функциям.  <ul><li>Выберите нужные роли с помощью флажков. </li><li>С помощью кнопки <strong>Только выбранные роли</strong> можно ограничить видимость ролей. -</li><li>Для удобства назначения можно упорядочить роли как в алфавитном порядке, так и <strong>По подсистемам</strong>.</li></ul></li></ul><h3><a name="#2">Разрешение входа в программу (только для администратора)</a></h3> +</li><li>Для удобства назначения можно упорядочить роли как в алфавитном порядке, так и <strong>По подсистемам</strong>.</li></ul></li></ul><h3><a name="2">Разрешение входа в программу (только для администратора)</a></h3> <ul><li> <div>Для входа пользователя в программу нужно установить флажок <strong>Вход в программу разрешен.</strong> При этом должны быть заданы необходимые свойства: имя (для входа), пароль и другие параметры авторизации. </div> </li><li> <div>В программе возможно прекращение работы пользователей, которым сняли флажок <strong>Вход в программу разрешен</strong>, интерактивно или программно в связи с окончанием срока действия.</div> </li><li> <div>Открытые сеансы пользователей автоматически завершаются не более чем через 25 минут после того, как вход в программу был запрещен.</div></li></ul><h3>Ограничения на вход</h3> -<p>Перейдите по ссылке, для того чтобы <strong>Установить ограничения</strong>. С помощью переключателя установите ограничение на вход в программу:</p> +<p>Перейдите по ссылке, для того чтобы <strong>Установить ограничение</strong>. С помощью переключателя установите ограничение на вход в программу:</p> <ul><li> <div><strong>Согласно общим настройкам входа</strong> - установлено по умолчанию;</div> </li><li> diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl index 0215b45a5..1f27e85d6 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl @@ -44,7 +44,7 @@ // Заполнение списка выбора режимов запуска. Для каждого РежимЗапуска Из РежимЗапускаКлиентскогоПриложения Цикл ПолноеИмяЗначения = ПолучитьПолноеИмяПредопределенногоЗначения(РежимЗапуска); - ИмяЗначения = Сред(ПолноеИмяЗначения, Найти(ПолноеИмяЗначения, ".") + 1); + ИмяЗначения = Сред(ПолноеИмяЗначения, СтрНайти(ПолноеИмяЗначения, ".") + 1); Элементы.ПользовательИБРежимЗапуска.СписокВыбора.Добавить(ИмяЗначения, Строка(РежимЗапуска)); КонецЦикла; Элементы.ПользовательИБРежимЗапуска.СписокВыбора.СортироватьПоПредставлению(); @@ -127,7 +127,8 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") И ДействияСПользователемСервиса <> Неопределено Тогда МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); - МодульУправлениеКонтактнойИнформацией.УстановитьДоступностьЭлементовКонтактнойИнформации(ЭтотОбъект, ОпределитьДоступностьЭлементовКонтактнойИнформации()); + МодульУправлениеКонтактнойИнформацией.УстановитьДоступностьЭлементовКонтактнойИнформации(ЭтотОбъект, + ОпределитьДоступностьЭлементовКонтактнойИнформации()); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда @@ -148,7 +149,10 @@ КонецЕсли; Если ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда - ТолькоПросмотр = Истина; + Элементы.ГруппаШапка.ТолькоПросмотр = Истина; + Элементы.КонтактнаяИнформация.ТолькоПросмотр = Истина; + Элементы.СтраницаДополнительныеРеквизиты.ТолькоПросмотр = Истина; + Элементы.СтраницаКомментарий.ТолькоПросмотр = Истина; КонецЕсли; КонецПроцедуры @@ -262,21 +266,21 @@ ТекущийОбъект.ДополнительныеСвойства.Вставить("ПарольПользователяСервиса", ПарольПользователяСервиса); ТекущийОбъект.ДополнительныеСвойства.Вставить("СинхронизироватьССервисом", ТребуетсяСинхронизацияССервисом); - Если ТребуетсяЗаписьПользователяИБ(ЭтотОбъект) - Или ПараметрыЗаписи.Свойство("КраткоеИмя") Тогда + Если ТребуетсяЗаписьПользователяИБ(ЭтотОбъект) Тогда ОписаниеПользователяИБ = ОписаниеПользователяИБ(); - Если ПараметрыЗаписи.Свойство("КраткоеИмя") Тогда - ОписаниеПользователяИБ.Вставить("Имя", ПараметрыЗаписи.КраткоеИмя); - КонецЕсли; Если ЗначениеЗаполнено(Объект.ИдентификаторПользователяИБ) Тогда ОписаниеПользователяИБ.Вставить("УникальныйИдентификатор", Объект.ИдентификаторПользователяИБ); КонецЕсли; ОписаниеПользователяИБ.Вставить("Действие", "Записать"); - ОписаниеПользователяИБ.Вставить("ЗаполнитьПароль", Истина); ТекущийОбъект.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ); + + Если ПараметрыЗаписи.Свойство("ССозданиемПервогоАдминистратора") Тогда + ТекущийОбъект.ДополнительныеСвойства.Вставить("СозданиеАдминистратора", + НСтр("ru = 'Первый пользователь информационной базы назначается администратором.'")); + КонецЕсли; КонецЕсли; Если ДействияВФорме.СвойстваЭлемента <> "Редактирование" Тогда @@ -349,10 +353,6 @@ ГруппаНовогоПользователя = Неопределено; КонецЕсли; - Если ПараметрыЗаписи.Свойство("СменитьПарольПослеЗаписи") Тогда - ПодключитьОбработчикОжидания("СменитьПарольНачало", 0.1, Истина); - КонецЕсли; - КонецПроцедуры &НаСервере @@ -372,6 +372,34 @@ НСтр("ru = 'Ограничение должно быть до завтра или более.'"),, "ВходВПрограммуРазрешен",, Отказ); КонецЕсли; + // Проверка наличия ролей в метаданных. + Если Не Элементы.Роли.ТолькоПросмотр Тогда + Ошибки = Неопределено; + ЭлементыДерева = Роли.ПолучитьЭлементы(); + Для Каждого Строка Из ЭлементыДерева Цикл + Если Не Строка.Пометка Тогда + Продолжить; + КонецЕсли; + Если Строка.ЭтоНесуществующаяРоль Тогда + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "Роли[%1].РолиСиноним", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" не найдена в метаданных.'"), Строка.Синоним), + "Роли", + ЭлементыДерева.Индекс(Строка), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %%1 не найдена в метаданных.'"), Строка.Синоним)); + КонецЕсли; + Если Строка.ЭтоНедоступнаяРоль Тогда + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "Роли[%1].РолиСиноним", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" недоступна для пользователей.'"), Строка.Синоним), + "Роли", + ЭлементыДерева.Индекс(Строка), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %%1 недоступна для пользователей.'"), Строка.Синоним)); + КонецЕсли; + КонецЦикла; + ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки, Отказ); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); МодульУправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты); @@ -380,6 +408,9 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); МодульУправлениеКонтактнойИнформацией.ОбработкаПроверкиЗаполненияНаСервере(ЭтотОбъект, Объект, Отказ); + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ПроверитьЗаполнениеEmail(Отказ); + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -602,7 +633,9 @@ МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); - МодульУправлениеКонтактнойИнформациейКлиент.ПредставлениеПриИзменении(ЭтотОбъект, Элемент); + МодульУправлениеКонтактнойИнформациейКлиент.ПриИзменении(ЭтотОбъект, Элемент); + + УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект); Если НЕ Объект.Ссылка.Пустая() Тогда Возврат; @@ -616,6 +649,8 @@ Если ЗначениеЗаполнено(ЭтотОбъект[СтрокаEMail.ИмяРеквизита]) Тогда ПользовательИБПароль = "" + Новый УникальныйИдентификатор + "qQ"; КонецЕсли; + + УстановитьНаличиеПароля(ЭтотОбъект, ЗначениеЗаполнено(ПользовательИБПароль)); УстановитьДоступностьСвойств(ЭтотОбъект); КонецПроцедуры @@ -626,7 +661,7 @@ МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); - МодульУправлениеКонтактнойИнформациейКлиент.ПредставлениеПриИзменении(ЭтотОбъект, Элемент); + МодульУправлениеКонтактнойИнформациейКлиент.ПриИзменении(ЭтотОбъект, Элемент); УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект); @@ -684,8 +719,7 @@ МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); - - МодульУправлениеКонтактнойИнформациейКлиент.ПредставлениеПриИзменении(ЭтотОбъект, Элемент); + МодульУправлениеКонтактнойИнформациейКлиент.ПриИзменении(ЭтотОбъект, Элемент); КонецПроцедуры @@ -694,12 +728,15 @@ МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); + МодульУправлениеКонтактнойИнформациейКлиент.НачалоВыбора(ЭтотОбъект, Элемент,, СтандартнаяОбработка); - Результат = МодульУправлениеКонтактнойИнформациейКлиент.ПредставлениеНачалоВыбора( - ЭтотОбъект, Элемент, , СтандартнаяОбработка); - - ОбновитьКонтактнуюИнформацию(Результат); - +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_КонтактнаяИнформацияПриНажатии(Элемент, СтандартнаяОбработка) + МодульУправлениеКонтактнойИнформациейКлиент = + ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); + МодульУправлениеКонтактнойИнформациейКлиент.НачалоВыбора(ЭтотОбъект, Элемент,, СтандартнаяОбработка); КонецПроцедуры &НаКлиенте @@ -707,11 +744,7 @@ МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); - - Результат = МодульУправлениеКонтактнойИнформациейКлиент.ПредставлениеОчистка( - ЭтотОбъект, Элемент.Имя); - - ОбновитьКонтактнуюИнформацию(Результат); + МодульУправлениеКонтактнойИнформациейКлиент.Очистка(ЭтотОбъект, Элемент.Имя); КонецПроцедуры @@ -720,13 +753,7 @@ МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); - - Результат = МодульУправлениеКонтактнойИнформациейКлиент.ПодключаемаяКоманда( - ЭтотОбъект, Команда.Имя); - - ОбновитьКонтактнуюИнформацию(Результат); - - МодульУправлениеКонтактнойИнформациейКлиент.ОткрытьФормуВводаАдреса(ЭтотОбъект, Результат); + МодульУправлениеКонтактнойИнформациейКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда.Имя); КонецПроцедуры @@ -740,8 +767,16 @@ &НаКлиенте Процедура РолиПометкаПриИзменении(Элемент) - Если Элементы.Роли.ТекущиеДанные <> Неопределено Тогда - Если Элементы.Роли.ТекущиеДанные.Имя = "ПолныеПрава" Тогда + СтрокаТаблицы = Элементы.Роли.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + Если СтрокаТаблицы.Пометка И СтрокаТаблицы.Имя = "ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок" Тогда + Оповещение = Новый ОписаниеОповещения("РолиПометкаПриИзмененииПослеПодтверждения", ЭтотОбъект); + ПараметрыФормы = Новый Структура("Ключ", "ПередВыборомРоли"); + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение); + Иначе + Если СтрокаТаблицы.Имя = "ПолныеПрава" Тогда УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект); КонецЕсли; ОбработатьИнтерфейсРолей("ОбновитьСоставРолей"); @@ -749,6 +784,19 @@ КонецПроцедуры +&НаКлиенте +Процедура РолиПометкаПриИзмененииПослеПодтверждения(Ответ, ПараметрыВыполнения) Экспорт + СтрокаТаблицы = Элементы.Роли.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + Если Ответ = "Продолжить" Тогда + ОбработатьИнтерфейсРолей("ОбновитьСоставРолей"); + Иначе + СтрокаТаблицы.Пометка = Ложь; + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -756,50 +804,12 @@ &НаКлиенте Процедура СменитьПароль(Команда) - Если Не Модифицированность - И ЗначениеЗаполнено(Объект.Ссылка) - И ПользовательИБСуществует Тогда - - СменитьПарольНачало(); - Возврат; - КонецЕсли; + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ВернутьПарольБезУстановки", Истина); + ДополнительныеПараметры.Вставить("СтарыйПароль", ПользовательИБСтарыйПароль); - Контекст = Новый Структура; - - Если Не ЗначениеЗаполнено(Объект.Наименование) - Или ЗначениеЗаполнено(Объект.Ссылка) - И ПользовательИБСуществует Тогда - - СменитьПарольПослеПодтвержденияЗаписи("Записать", Контекст); - Возврат; - КонецЕсли; - - // Текст вопроса в стиле 1С:Предприятия. - Если ЗначениеЗаполнено(ПользовательИБИмя) Тогда - ТекстВопроса = НСтр("ru = 'Установка пароля возможна только после записи данных.'"); - Иначе - Контекст.Вставить("КраткоеИмя", - ПользователиСлужебныйКлиентСервер.ПолучитьКраткоеИмяПользователяИБ(Объект.Наименование)); - - Если ЗначениеЗаполнено(Объект.Ссылка) Тогда - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Установка пароля возможна только после записи поля - |Имя (для входа), которое будет установлено: ""%1"".'"), - Контекст.КраткоеИмя); - Иначе - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Установка пароля возможна только после записи данных, - |при этом будет установлено Имя (для входа): ""%1"".'"), - Контекст.КраткоеИмя); - КонецЕсли; - КонецЕсли; - - Кнопки = Новый СписокЗначений; - Кнопки.Добавить("Записать", НСтр("ru = 'Записать'")); - Кнопки.Добавить("НеЗаписывать", НСтр("ru = 'Не записывать'")); - - ПоказатьВопрос(Новый ОписаниеОповещения("СменитьПарольПослеПодтвержденияЗаписи", ЭтотОбъект, Контекст), - ТекстВопроса, Кнопки); + ПользователиСлужебныйКлиент.ОткрытьФормуСменыПароля(Объект.Ссылка, Новый ОписаниеОповещения( + "СменитьПарольПослеПолученияПароля", ЭтотОбъект), ДополнительныеПараметры); КонецПроцедуры @@ -946,8 +956,7 @@ ОпределитьНесоответствияПользователяСПользователемИБ(ПараметрыЗаписи); - ОбработатьИнтерфейсРолей( - "УстановитьТолькоПросмотрРолей", + ОбработатьИнтерфейсРолей("УстановитьТолькоПросмотрРолей", ПользователиСлужебный.ЗапретРедактированияРолей() Или ДействияВФорме.Роли <> "Редактирование" Или Не УровеньДоступа.НастройкиДляВхода); @@ -1107,40 +1116,22 @@ // Продолжение процедуры СменитьПароль. &НаКлиенте -Процедура СменитьПарольПослеПодтвержденияЗаписи(Ответ, Контекст) Экспорт - - Если Ответ <> "Записать" Тогда - Возврат; - КонецЕсли; - - ПараметрыЗаписи = Новый Структура("СменитьПарольПослеЗаписи"); - - Если Контекст.Свойство("КраткоеИмя") Тогда - ПараметрыЗаписи.Вставить("КраткоеИмя", Контекст.КраткоеИмя); - КонецЕсли; - - Записать(ПараметрыЗаписи); - -КонецПроцедуры - -// Продолжение процедуры СменитьПароль. -&НаКлиенте -Процедура СменитьПарольНачало() - - ПользователиСлужебныйКлиент.ОткрытьФормуСменыПароля(Объект.Ссылка, Новый ОписаниеОповещения( - "СменитьПарольПослеСменыПароля", ЭтотОбъект)); - -КонецПроцедуры - -// Продолжение процедуры СменитьПароль. -&НаКлиенте -Процедура СменитьПарольПослеСменыПароля(Результат, Контекст) Экспорт +Процедура СменитьПарольПослеПолученияПароля(Результат, Контекст) Экспорт Если Не ЗначениеЗаполнено(Результат) Тогда Возврат; КонецЕсли; - Прочитать(); + ПользовательИБПароль = Результат.НовыйПароль; + ПользовательИБСтарыйПароль = Результат.СтарыйПароль; + + Если Результат.СтарыйПароль <> Неопределено Тогда + ПарольПользователяСервиса = Результат.СтарыйПароль; + КонецЕсли; + УстановитьНеобходимостьСинхронизацииССервисом(ЭтотОбъект); + + УстановитьНаличиеПароля(ЭтотОбъект, ЗначениеЗаполнено(ПользовательИБПароль)); + УстановитьДоступностьСвойств(ЭтотОбъект); КонецПроцедуры @@ -1209,7 +1200,7 @@ ПользователиСлужебный.ПриОпределенииДействийВФорме(Объект.Ссылка, ДействияВФорме); // Проверка имен действий в форме. - Если Найти(", Просмотр, Редактирование,", ", " + ДействияВФорме.Роли + ",") = 0 Тогда + Если СтрНайти(", Просмотр, Редактирование,", ", " + ДействияВФорме.Роли + ",") = 0 Тогда ДействияВФорме.Роли = ""; ИначеЕсли ДействияВФорме.Роли = "Редактирование" @@ -1218,25 +1209,25 @@ ДействияВФорме.Роли = "Просмотр"; КонецЕсли; - Если Найти(", Просмотр, Редактирование,", ", " + ДействияВФорме.КонтактнаяИнформация + ",") = 0 Тогда + Если СтрНайти(", Просмотр, Редактирование,", ", " + ДействияВФорме.КонтактнаяИнформация + ",") = 0 Тогда ДействияВФорме.КонтактнаяИнформация = ""; КонецЕсли; - Если Найти(", Просмотр, ПросмотрВсех, Редактирование, РедактированиеСвоих, РедактированиеВсех,", + Если СтрНайти(", Просмотр, ПросмотрВсех, Редактирование, РедактированиеСвоих, РедактированиеВсех,", ", " + ДействияВФорме.СвойстваПользователяИБ + ",") = 0 Тогда ДействияВФорме.СвойстваПользователяИБ = ""; Иначе // Поддержка обратной совместимости. - Если Найти(ДействияВФорме.СвойстваПользователяИБ, "Просмотр") Тогда + Если СтрНайти(ДействияВФорме.СвойстваПользователяИБ, "Просмотр") Тогда ДействияВФорме.СвойстваПользователяИБ = "Просмотр"; - ИначеЕсли Найти(ДействияВФорме.СвойстваПользователяИБ, "Редактирование") Тогда + ИначеЕсли СтрНайти(ДействияВФорме.СвойстваПользователяИБ, "Редактирование") Тогда ДействияВФорме.СвойстваПользователяИБ = "Редактирование"; КонецЕсли; КонецЕсли; - Если Найти(", Просмотр, Редактирование,", ", " + ДействияВФорме.СвойстваЭлемента + ",") = 0 Тогда + Если СтрНайти(", Просмотр, Редактирование,", ", " + ДействияВФорме.СвойстваЭлемента + ",") = 0 Тогда ДействияВФорме.СвойстваЭлемента = ""; КонецЕсли; @@ -1354,8 +1345,7 @@ Функция ТребуетсяСоздатьПервогоАдминистратора(ТекстВопроса = Неопределено) Возврат ПользователиСлужебный.ТребуетсяСоздатьПервогоАдминистратора( - ОписаниеПользователяИБ(Истина), - ТекстВопроса); + ОписаниеПользователяИБ(Истина), ТекстВопроса); КонецФункции @@ -1390,7 +1380,7 @@ // Поддержка контактной информации. &НаСервере -Функция ОбновитьКонтактнуюИнформацию(Результат = Неопределено) +Функция Подключаемый_ОбновитьКонтактнуюИнформацию(Результат) МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); @@ -1412,6 +1402,7 @@ СтрокаEMail = КонтактнаяИнформация.НайтиСтроки(Новый Структура("Вид", Справочники["ВидыКонтактнойИнформации"].EmailПользователя))[0]; ЭлементEMail = Элементы[СтрокаEMail.ИмяРеквизита]; ЭлементEMail.УстановитьДействие("ПриИзменении", "Подключаемый_EMailПриИзменении"); + ЭлементEMail.АвтоОтметкаНезаполненного = Истина; ЭлементEMail.КнопкаВыбора = Истина; ЭлементEMail.УстановитьДействие("НачалоВыбора", "Подключаемый_EMailНачалоВыбора"); @@ -1431,6 +1422,25 @@ КонецФункции +&НаСервере +Процедура ПроверитьЗаполнениеEmail(Отказ) + + ТаблицаКИ = ЭтотОбъект.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; + + СтрокаEMail = ТаблицаКИ.НайтиСтроки(Новый Структура("Вид", + ВидКонтактнойИнформацииEmailПользователя()))[0]; + + Если ЗначениеЗаполнено(ЭтотОбъект[СтрокаEMail.ИмяРеквизита]) Тогда + Возврат; + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Не заполнен адрес электронной почты'"),, + СтрокаEMail.ИмяРеквизита,, Отказ); + +КонецПроцедуры + + //////////////////////////////////////////////////////////////////////////////// // Поддержка дополнительных реквизитов. @@ -1830,11 +1840,9 @@ Продолжить; КонецЕсли; ЭлементКонтактнойИнформации = Элементы[СтрокаКонтактнойИнформации.ИмяРеквизита]; - Если СтрокаКонтактнойИнформации.Вид = ВидКонтактнойИнформацииEmailПользователя() Тогда - Результат.Вставить(СтрокаКонтактнойИнформации.Вид, Объект.Ссылка.Пустая()); - Иначе - Результат.Вставить(СтрокаКонтактнойИнформации.Вид, НЕ (ЭлементКонтактнойИнформации.ТолькоПросмотр ИЛИ НЕ ДействияВидаКонтактнойИнформации.Изменение)); - КонецЕсли; + Результат.Вставить(СтрокаКонтактнойИнформации.Вид, + Не ЭлементКонтактнойИнформации.ТолькоПросмотр + И ДействияВидаКонтактнойИнформации.Изменение); КонецЦикла; Возврат Результат; @@ -1902,10 +1910,7 @@ ПараметрыДействия.Вставить("ЗапретИзмененияАдминистративногоДоступа", ЗапретИзмененияАдминистративногоДоступа); - ТипПользователей = ?(ОбщегоНазначенияПовтИсп.РазделениеВключено(), - Перечисления.ТипыПользователей.ПользовательОбластиДанных, - Перечисления.ТипыПользователей.ПользовательЛокальногоРешения); - ПараметрыДействия.Вставить("ТипПользователей", ТипПользователей); + ПараметрыДействия.Вставить("НазначениеРолей", "ДляАдминистраторов"); БылУстановленАдминистративныйДоступ = ПользовательИБРоли.НайтиСтроки( Новый Структура("Роль", "ПолныеПрава")).Количество() > 0; diff --git a/SSL/src/Catalogs/Пользователи/Help/ru.html b/SSL/src/Catalogs/Пользователи/Help/ru.html index f4c4e3fb3..10a3051f5 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для ведения пользователей, которые работают с программой. </p> <p>Открыть список пользователей можно из раздела <strong>Администрирование - Настройки пользователей и прав</strong> или <strong>Управление доступом</strong> с помощью команды <strong>Пользователи.</strong></p> <p>Ведение списка пользователей может осуществлять как администратор, так и ответственный за список внешних пользователей. </p> @@ -28,7 +28,7 @@ <ul><li> <div>Выберите группу в левой части списка, воспользуйтесь командой контекстного меню по правой кнопке мыши <strong>Переместить в группу</strong>. </div> </li><li> -<div>Выберите группу для перемещения.</div></li></ul><h3><a name="#S">Подбор участников групп</a>ы пользователей</h3> +<div>Выберите группу для перемещения.</div></li></ul><h3><a name="S">Подбор участников групп</a>ы пользователей</h3> <ul><li>В случае если из списка пользователей производится подбор участников группы, он состоит из трех частей.  Слева в верхней части списка отображаются группы, в нижней части пользователи выбранной группы. В правой части списка отображаются выбранные пользователи. </li><li> <div>Для удобства подбора в верхней левой части списка показаны уже имеющиеся группы пользователей. Выбрав нужную группу (или группу <strong>Все пользователи</strong>), можно просмотреть пользователей этой группы в нижней левой части списка.</div> diff --git a/SSL/src/Catalogs/Пользователи/ManagerModule.bsl b/SSL/src/Catalogs/Пользователи/ManagerModule.bsl index 622d4513b..28f00aebf 100644 --- a/SSL/src/Catalogs/Пользователи/ManagerModule.bsl +++ b/SSL/src/Catalogs/Пользователи/ManagerModule.bsl @@ -2,9 +2,11 @@ #Область ПрограммныйИнтерфейс -// Возвращает список реквизитов, которые не нужно редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые не рекомендуется редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт НеРедактируемыеРеквизиты = Новый Массив; diff --git a/SSL/src/Catalogs/Пользователи/ObjectModule.bsl b/SSL/src/Catalogs/Пользователи/ObjectModule.bsl index f48d91100..bf5910f01 100644 --- a/SSL/src/Catalogs/Пользователи/ObjectModule.bsl +++ b/SSL/src/Catalogs/Пользователи/ObjectModule.bsl @@ -1,11 +1,15 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ОписаниеПеременных + Перем ПараметрыОбработкиПользователяИБ; // Параметры, заполняемые при обработке пользователя ИБ. // Используются в обработчике события ПриЗаписи. Перем ЭтоНовый; // Показывает, что был записан новый объект. // Используются в обработчике события ПриЗаписи. +#КонецОбласти + // *Область ПрограммныйИнтерфейс // // Программный интерфейс объекта реализован через ДополнительныеСвойства: diff --git a/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ManagerModule.bsl b/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ManagerModule.bsl index 983baeba5..ef8967dd2 100644 --- a/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПользовательскиеНастройкиОтчетов/ManagerModule.bsl @@ -2,7 +2,11 @@ #Область ПрограммныйИнтерфейс -// Реквизиты, которые разрешается изменять сразу для нескольких объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. +// +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Help/ru.html b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Help/ru.html index f14ddc683..86be613b1 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для применения <a href="Catalog.ПравилаОбработкиЭлектроннойПочты/Help">правил обработки электронной почты</a>.</p> <p>Правила применяются автоматически, но иногда их необходимо применить вручную. Например, когда создано новое правило, и необходимо применить его к уже имеющимся письмам. </p> <p>Открывается по команде <strong>Применить правила</strong> из окна <strong>Правила обработки электронной почты</strong> или из <a href="DocumentJournal.Взаимодействия.Form.ФормаСписка/Help">списка взаимодействий</a> (группировка по папкам) по команде <strong>Применить правила обработки</strong> контекстного меню по правой кнопке мыши в панели группировки.</p> @@ -11,7 +11,7 @@ </li><li>Если включить флажок <strong>Включая подчиненные</strong>, то будут обработаны письма и в дочерних <a href="Catalog.ПапкиЭлектронныхПисем/Help">папках</a>. </li><li>Включите флажки у тех правил, которые должны быть применены. С помощью кнопки <img src="StdPicture.CheckAll"></img> можно выбрать все правила. С помощью кнопки <img src="StdPicture.UncheckAll"></img> можно снять все флажки. </li><li>Настройте порядок применения правил. Первыми будут применяться те правила, которые находятся выше в списке. Изменить порядок можно при помощи кнопок <strong><img src="StdPicture.MoveUp"></img> Вверх</strong> и <img src="StdPicture.MoveDown"></img> <strong>Вниз</strong> в командной панели списка. -</li><li>Выполните команду <b>Применить</b>. Отмеченные в списке флажками правила будут применены к письмам указанной папки. +</li><li>Нажмите <b>Применить</b>. Отмеченные в списке флажками правила будут применены к письмам указанной папки. </li><li>В нижней части окна программа выводит <strong>Сообщения</strong> о выполнении обработки писем.</li></ul><p style="MARGIN-LEFT: 0px"></p> <h3>Пример</h3> <p>Было создано два новых правила обработки входящей корреспонденции. Необходимо применить их к неотсортированным письмам, находящимся в папке <strong>Входящие</strong>.</p> diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Module.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Module.bsl index d6bff543f..66a084f9b 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Module.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Module.bsl @@ -1,10 +1,14 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ПараметрыОбработчикаОжидания; &НаКлиенте Перем ФормаДлительнойОперации; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form index a3b89a61a..584b1190b 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form @@ -44,6 +44,10 @@ <typeDomainEnabled>true</typeDomainEnabled> <textEdit>true</textEdit> <textSize>Normal</textSize> + <inputHint> + <key>ru</key> + <value>После указания отбора из выпадающего списка можно выбрать сформированное наименование</value> + </inputHint> <dropListWidth>70</dropListWidth> </extInfo> </items> @@ -92,6 +96,10 @@ </datapath> </choiceParameterLinks> <textSize>Normal</textSize> + <inputHint> + <key>ru</key> + <value>Папка, в которую будут помещаться письма, соответствующие отбору</value> + </inputHint> </extInfo> </items> <items xsi:type="form:Table"> diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html index df4a73c21..fc54e2a2d 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для создания и хранения условий автоматического распределения <a href="Document.ЭлектронноеПисьмоВходящее.Form.ФормаДокумента/Help">входящей</a> и <a href="Document.ЭлектронноеПисьмоИсходящее.Form.ФормаДокумента/Help">исходящей</a> корреспонденции по <a href="Catalog.ПапкиЭлектронныхПисем/Help">папкам</a>. Правила настраиваются для каждой <a href="Catalog.УчетныеЗаписиЭлектроннойПочты.Form.ФормаЭлемента/Help">Учетной записи электронной почты</a>.</p><a name="70a6370b13ca43baa611bed9691c461119059afee61f135f174b11e300d2cb23d4a2"> <h3 style="MARGIN-LEFT: 0px">Настройка правила</h3></a> <ul style="MARGIN-LEFT: 40px"><li>В поле <strong>Условие</strong> необходимо выбрать наименование созданного правила - текстовое описание условия, по которому будут отбираться письма. diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Help/ru.html b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Help/ru.html index e2aceeb11..2fff6c3b7 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для создания и хранения условий автоматического распределения входящей и исходящей корреспонденции по папкам. Правила настраиваются для <a href="Catalog.УчетныеЗаписиЭлектроннойПочты.Form.ФормаЭлемента/Help">учетной записи электронной почты</a>.</p> <p style="MARGIN-LEFT: 0px">Для писем учетной записи можно задать правила обработки электронной почты, по которым письма будут автоматически размещаться в той или иной папке. Задавать правила обработки имеет смысл, если на учетную запись приходит много корреспонденции.</p> <p style="MARGIN-LEFT: 0px">Открывается соответствующей командой в панели навигации учетной записи электронной почты.</p> diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl index 479461866..17a050c75 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl @@ -146,9 +146,11 @@ //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. -// Возвращает список реквизитов, которые не разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые не рекомендуется редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ManagerModule.bsl b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ManagerModule.bsl index 4ed219f04..78608f7a7 100644 --- a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ManagerModule.bsl @@ -19,7 +19,11 @@ КонецФункции -// Реквизиты, которые разрешается изменять сразу для нескольких объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. +// +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ПредопределенныеВариантыОтчетов.mdo b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ПредопределенныеВариантыОтчетов.mdo index 20ca85047..98b0e9728 100644 --- a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ПредопределенныеВариантыОтчетов.mdo +++ b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетов/ПредопределенныеВариантыОтчетов.mdo @@ -303,6 +303,27 @@ <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> + <attributes uuid="fbaa5b0a-56dc-4bf1-b1b2-e48073f63d13"> + <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="a92acf0e-9132-4456-9a82-1543d98ca453"> <name>КлючЗамеров</name> <synonym> diff --git a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ManagerModule.bsl b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ManagerModule.bsl index 4ed219f04..78608f7a7 100644 --- a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ManagerModule.bsl @@ -19,7 +19,11 @@ КонецФункции -// Реквизиты, которые разрешается изменять сразу для нескольких объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. +// +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ПредопределенныеВариантыОтчетовРасширений.mdo b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ПредопределенныеВариантыОтчетовРасширений.mdo index bd60a600b..8289d843d 100644 --- a/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ПредопределенныеВариантыОтчетовРасширений.mdo +++ b/SSL/src/Catalogs/ПредопределенныеВариантыОтчетовРасширений/ПредопределенныеВариантыОтчетовРасширений.mdo @@ -303,6 +303,27 @@ <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> + <attributes uuid="febb3770-5c11-4ada-9e49-a27950bdaddf"> + <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="d7b57669-e538-4e54-ab1b-8428f0586466"> <name>КлючЗамеров</name> <synonym> diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form index 117b215f2..a9652c1f1 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Form.form @@ -363,19 +363,6 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>ЭтоПодчиненныйУзел</name> - <title> - <key>ru</key> - <value>Это подчиненный узел</value> - - 5 - - Boolean - - - - АлгоритмыПодписиПоставляемые diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Help/ru.html index a09866512..4cebeef4d 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Сведения о программе электронной подписи и шифрования.</p> <p>Открывается по кнопке <strong>Добавить</strong> в списке <a href="CommonForm.НастройкиЭлектроннойПодписиИШифрования/Help">Настройки электронной подписи и шифрования</a> на вкладке <strong>Программы</strong>.</p> <h3>Заполнение сведений о программе</h3> diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Help/ru.html b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/Help/ru.html index fe403701c..0d3e9fcc3 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для выбора программ электронной подписи и шифрования.</p> <p>Выделите <a href="Catalog.ПрограммыЭлектроннойПодписиИШифрования.Form.ФормаЭлемента/Help">программу</a>, нажмите <strong>Выбрать</strong>.</p> <p> </p></body></html> \ No newline at end of file diff --git a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl index 6b51cefe0..a9c72b29c 100644 --- a/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПрограммыЭлектроннойПодписиИШифрования/ManagerModule.bsl @@ -1,9 +1,11 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс -// Возвращает список реквизитов, которые можно редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт РедактируемыеРеквизиты = Новый Массив; @@ -31,7 +33,7 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции -Функция ПоставляемыеНастройкиПрограмм(ТолькоДляНачальногоЗаполнения = Ложь) Экспорт +Функция ПоставляемыеНастройкиПрограмм() Экспорт Настройки = Новый ТаблицаЗначений; Настройки.Колонки.Добавить("Представление"); @@ -42,11 +44,9 @@ Настройки.Колонки.Добавить("АлгоритмШифрования"); Настройки.Колонки.Добавить("Идентификатор"); - Если Не ТолькоДляНачальногоЗаполнения Тогда - Настройки.Колонки.Добавить("АлгоритмыПодписи", Новый ОписаниеТипов("Массив")); - Настройки.Колонки.Добавить("АлгоритмыХеширования", Новый ОписаниеТипов("Массив")); - Настройки.Колонки.Добавить("АлгоритмыШифрования", Новый ОписаниеТипов("Массив")); - КонецЕсли; + Настройки.Колонки.Добавить("АлгоритмыПодписи", Новый ОписаниеТипов("Массив")); + Настройки.Колонки.Добавить("АлгоритмыХеширования", Новый ОписаниеТипов("Массив")); + Настройки.Колонки.Добавить("АлгоритмыШифрования", Новый ОписаниеТипов("Массив")); // ViPNet CSP Настройка = Настройки.Добавить(); @@ -60,15 +60,13 @@ Настройка.АлгоритмШифрования = "GOST 28147-89"; // Один вариант. Настройка.Идентификатор = "VipNet"; - Если Не ТолькоДляНачальногоЗаполнения Тогда - Настройка.АлгоритмыПодписи.Добавить("GOST R 34.10-2001"); - Настройка.АлгоритмыПодписи.Добавить("GOST 34.10-2012 256"); - Настройка.АлгоритмыПодписи.Добавить("GOST 34.10-2012 512"); - Настройка.АлгоритмыХеширования.Добавить("GOST R 34.11-94"); - Настройка.АлгоритмыХеширования.Добавить("GOST 34.11-2012 256"); - Настройка.АлгоритмыХеширования.Добавить("GOST 34.11-2012 512"); - Настройка.АлгоритмыШифрования.Добавить("GOST 28147-89"); - КонецЕсли; + Настройка.АлгоритмыПодписи.Добавить("GOST R 34.10-2001"); + Настройка.АлгоритмыПодписи.Добавить("GOST 34.10-2012 256"); + Настройка.АлгоритмыПодписи.Добавить("GOST 34.10-2012 512"); + Настройка.АлгоритмыХеширования.Добавить("GOST R 34.11-94"); + Настройка.АлгоритмыХеширования.Добавить("GOST 34.11-2012 256"); + Настройка.АлгоритмыХеширования.Добавить("GOST 34.11-2012 512"); + Настройка.АлгоритмыШифрования.Добавить("GOST 28147-89"); // КриптоПро CSP Настройка = Настройки.Добавить(); @@ -80,10 +78,6 @@ Настройка.АлгоритмШифрования = "GOST 28147-89"; Настройка.Идентификатор = "CryptoPro"; - Если ТолькоДляНачальногоЗаполнения Тогда - Возврат Настройки; - КонецЕсли; - Настройка.АлгоритмыПодписи.Добавить("GOST R 34.10-2001"); Настройка.АлгоритмыХеширования.Добавить("GOST R 34.11-94"); Настройка.АлгоритмыШифрования.Добавить("GOST 28147-89"); @@ -159,31 +153,15 @@ Процедура ЗаполнитьНачальныеНастройки() Экспорт - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | Программы.Ссылка КАК Ссылка - |ИЗ - | Справочник.ПрограммыЭлектроннойПодписиИШифрования КАК Программы - |ГДЕ - | Программы.ИмяПрограммы = &ИмяПрограммы - | И Программы.ТипПрограммы = &ТипПрограммы"; + ОписаниеПрограмм = Новый Массив; - ПоставляемыеНастройки = ПоставляемыеНастройкиПрограмм(Истина); - Для каждого ПоставляемаяНастройка Из ПоставляемыеНастройки Цикл - - Запрос.УстановитьПараметр("ИмяПрограммы", ПоставляемаяНастройка.ИмяПрограммы); - Запрос.УстановитьПараметр("ТипПрограммы", ПоставляемаяНастройка.ТипПрограммы); - - Если Не Запрос.Выполнить().Пустой() Тогда - Продолжить; - КонецЕсли; - - ПрограммаОбъект = Справочники.ПрограммыЭлектроннойПодписиИШифрования.СоздатьЭлемент(); - ЗаполнитьЗначенияСвойств(ПрограммаОбъект, ПоставляемаяНастройка); - ПрограммаОбъект.Наименование = ПоставляемаяНастройка.Представление; - ОбновлениеИнформационнойБазы.ЗаписатьДанные(ПрограммаОбъект); - КонецЦикла; + ОписаниеПрограмм.Добавить(ЭлектроннаяПодпись.НовоеОписаниеПрограммы( + "Infotecs Cryptographic Service Provider", 2)); + + ОписаниеПрограмм.Добавить(ЭлектроннаяПодпись.НовоеОписаниеПрограммы( + "Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider", 75)); + + ЭлектроннаяПодпись.ЗаполнитьСписокПрограмм(ОписаниеПрограмм); КонецПроцедуры diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Help/ru.html index 945a9dd6b..d7836c9c5 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Просмотр или формирование производственного календаря.</p> <p>Производственный календарь - это своеобразный классификатор, постоянные сведения, которые не меняются в течение года.  </p> <p>Производственный календарь РФ (который является общегосударственным) входит в поставляемые данные программы и обновляется по мере утверждения календаря и переносов праздников в РФ. </p> diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Help/ru.html b/SSL/src/Catalogs/ПроизводственныеКалендари/Help/ru.html index f0d3857b7..8f5ed592c 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для формирования и хранения производственных календарей.</p> <p>Открывается по соответствующей команде в разделе <strong>Справочники</strong>.</p> <p>Производственный календарь - это своеобразный классификатор, постоянные сведения, которые не меняются в течение года. Их может быть несколько, т.к. в разных регионах предусмотрен разный состав праздничных дней и соответственно переносов. </p> diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl index c34b68716..e9266fdb4 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl @@ -156,7 +156,7 @@ КонецФункции // Функция преобразовывает данные производственных календарей, -// представленные в виде XML +// представленные в виде XML. // // Параметры: // - XML - документ с данными @@ -166,7 +166,7 @@ // - ВидДня // - Год // - Дата -// - ДатаПереноса +// - ДатаПереноса. // Функция ДанныеПроизводственныхКалендарейИзXML(Знач XML) Экспорт @@ -248,36 +248,36 @@ Запрос = Новый Запрос; Запрос.Текст = - "ВЫБРАТЬ - | КлассификаторТаблица.КодПроизводственногоКалендаря КАК КалендарьКод, - | КлассификаторТаблица.Дата, - | КлассификаторТаблица.Год, - | КлассификаторТаблица.ВидДня, - | КлассификаторТаблица.ДатаПереноса - |ПОМЕСТИТЬ КлассификаторТаблица - |ИЗ - | &КлассификаторТаблица КАК КлассификаторТаблица - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ПроизводственныеКалендари.Ссылка КАК ПроизводственныйКалендарь, - | КлассификаторТаблица.Год, - | КлассификаторТаблица.Дата, - | КлассификаторТаблица.ВидДня, - | КлассификаторТаблица.ДатаПереноса - |ИЗ - | КлассификаторТаблица КАК КлассификаторТаблица - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПроизводственныеКалендари КАК ПроизводственныеКалендари - | ПО КлассификаторТаблица.КалендарьКод = ПроизводственныеКалендари.Код - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря - | ПО (ПроизводственныеКалендари.Ссылка = ДанныеПроизводственногоКалендаря.ПроизводственныйКалендарь) - | И КлассификаторТаблица.Год = ДанныеПроизводственногоКалендаря.Год - | И КлассификаторТаблица.Дата = ДанныеПроизводственногоКалендаря.Дата - |ГДЕ - | (ДанныеПроизводственногоКалендаря.ВидДня ЕСТЬ NULL - | ИЛИ КлассификаторТаблица.ВидДня <> ДанныеПроизводственногоКалендаря.ВидДня - | ИЛИ КлассификаторТаблица.ДатаПереноса <> ДанныеПроизводственногоКалендаря.ДатаПереноса)"; + "ВЫБРАТЬ + | КлассификаторТаблица.КодПроизводственногоКалендаря КАК КалендарьКод, + | КлассификаторТаблица.Дата, + | КлассификаторТаблица.Год, + | КлассификаторТаблица.ВидДня, + | КлассификаторТаблица.ДатаПереноса + |ПОМЕСТИТЬ КлассификаторТаблица + |ИЗ + | &КлассификаторТаблица КАК КлассификаторТаблица + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ПроизводственныеКалендари.Ссылка КАК ПроизводственныйКалендарь, + | КлассификаторТаблица.Год, + | КлассификаторТаблица.Дата, + | КлассификаторТаблица.ВидДня, + | КлассификаторТаблица.ДатаПереноса + |ИЗ + | КлассификаторТаблица КАК КлассификаторТаблица + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПроизводственныеКалендари КАК ПроизводственныеКалендари + | ПО КлассификаторТаблица.КалендарьКод = ПроизводственныеКалендари.Код + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря + | ПО (ПроизводственныеКалендари.Ссылка = ДанныеПроизводственногоКалендаря.ПроизводственныйКалендарь) + | И КлассификаторТаблица.Год = ДанныеПроизводственногоКалендаря.Год + | И КлассификаторТаблица.Дата = ДанныеПроизводственногоКалендаря.Дата + | И КлассификаторТаблица.ВидДня = ДанныеПроизводственногоКалендаря.ВидДня + | И КлассификаторТаблица.ДатаПереноса = ДанныеПроизводственногоКалендаря.ДатаПереноса + |ГДЕ + | ДанныеПроизводственногоКалендаря.ВидДня ЕСТЬ NULL "; Запрос.УстановитьПараметр("КлассификаторТаблица", ТаблицаДанных); diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Help/ru.html b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаВыбораГруппы/Help/ru.html index 3deef1275..d67fa9d5e 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Список предназначен для выбора папок <a href="Catalog.ПрофилиГруппДоступа/Help">профилей групп доступа</a>.</p> <p>Т.к. профилей групп доступа может быть очень много и с похожими настройками ограничений прав, предусмотрена возможность создавать папки для упрощения поиска нужного <a href="Catalog.ПрофилиГруппДоступа.Form.ФормаЭлемента/Help">профиля групп доступа</a> и понимания ограничений прав доступа в целом.</p> <p><a href="Catalog.ПрофилиГруппДоступа.Form.ФормаСписка/Help">Профили групп доступа</a> можно сгруппировать по различным признакам.</p> diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Help/ru.html b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаГруппы/Help/ru.html index 616af0e9b..b2bc74bf9 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Сведения о папке <a href="Catalog.ПрофилиГруппДоступа/Help">профилей групп доступа</a>.</p> <p><a href="Catalog.ПрофилиГруппДоступа.Form.ФормаСписка/Help">Профилей групп доступа</a> может быть много и с похожим назначением, поэтому предусмотрена возможность создавать папки (группы) для упрощения поиска нужного <a href="Catalog.ПрофилиГруппДоступа.Form.ФормаЭлемента/Help">профиля</a> и понимания принципов их формирования.</p> <h3>Ввод папки профилей групп доступа</h3> diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Form.form index 20bf39d5c..49794d237 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Form.form @@ -213,6 +213,215 @@ <items xsi:type="form:FormGroup"> <name>КоманднаяПанель</name> <id>22</id> + <items xsi:type="form:Button"> + <name>ФормаСоздать</name> + <id>50</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ФормаСоздатьРасширеннаяПодсказка</name> + <id>51</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.StandardCommand.Create</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> + <items xsi:type="form:Button"> + <name>ФормаСоздатьГруппу</name> + <id>52</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ФормаСоздатьГруппуРасширеннаяПодсказка</name> + <id>53</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.StandardCommand.CreateFolder</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> + <items xsi:type="form:Button"> + <name>ФормаСкопировать</name> + <id>54</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ФормаСкопироватьРасширеннаяПодсказка</name> + <id>55</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.StandardCommand.Copy</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> + <items xsi:type="form:Button"> + <name>ФормаИзменить</name> + <id>56</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ФормаИзменитьРасширеннаяПодсказка</name> + <id>57</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.StandardCommand.Change</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> + <items xsi:type="form:Button"> + <name>ФормаУстановитьПометкуУдаления</name> + <id>58</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <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.StandardCommand.SetDeletionMark</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> + <items xsi:type="form:Button"> + <name>ФормаОбновить</name> + <id>48</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ФормаОбновитьРасширеннаяПодсказка</name> + <id>49</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> + <items xsi:type="form:FormGroup"> + <name>ФормаСтандартныеКоманды</name> + <id>60</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <title> + <key>ru</key> + <value>Форма стандартные команды</value> + + + ФормаСтандартныеКомандыРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + + Form + + + + Справка + 62 + true + true + + true + + + СправкаРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + true true @@ -235,7 +444,6 @@ CommandBar Left - Form @@ -252,6 +460,8 @@ true false None + Delete + Refresh Наименование 4 @@ -471,6 +681,8 @@ OnCreateAtServer ПриСозданииНаСервере + Delete + Refresh DontBlock true true @@ -556,6 +768,33 @@ true + + Обновить + + <key>ru</key> + <value>Обновить</value> + + 1 + + ru + Обновить текущий список + + + true + + F5 + + StdPicture.Refresh + + + + Обновить + + + Text + DontUse + Auto + diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Help/ru.html b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Help/ru.html index bf42af2aa..dd33f907c 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 296ba1803..38f1f7fd0 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl @@ -59,62 +59,80 @@ &НаКлиенте Процедура ПоказатьПрофилиПриИзменении(Элемент) + УстановитьОтбор(); + КонецПроцедуры &НаКлиенте Процедура ВидПользователейНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораНазначения", ЭтотОбъект); - ПользователиСлужебныйКлиент.ВыбратьНазначение(ЭтотОбъект, Нстр("ru = 'Выбор назначения профилей'"), Истина, Истина, ОписаниеОповещения); + + ПользователиСлужебныйКлиент.ВыбратьНазначение(ЭтотОбъект, + НСтр("ru = 'Выбор назначения профилей'"), Истина, Истина, ОписаниеОповещения); + КонецПроцедуры &НаКлиенте Процедура ВидПользователейОчистка(Элемент, СтандартнаяОбработка) ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, "Ссылка.Назначение.ТипПользователей",,,, Ложь); + Список, "Ссылка.Назначение.ТипПользователей", , , , Ложь); КонецПроцедуры #КонецОбласти +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Обновить(Команда) + + ОбновитьНаСервере(); + +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции +&НаСервере +Процедура ОбновитьНаСервере() + + УстановитьОтбор(); + + Элементы.Список.Обновить(); + +КонецПроцедуры + &НаСервере Процедура УстановитьОтбор() - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, - "Ссылка.Роли.Роль.ПометкаУдаления", - Истина, - ВидСравненияКомпоновкиДанных.Равно,, Ложь); - - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, - "Ссылка.ИдентификаторПоставляемыхДанных", - Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"), - ВидСравненияКомпоновкиДанных.Равно,, Ложь); - Если ПоказатьПрофили = "Устаревшие" Тогда - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, - "Ссылка.Роли.Роль.ПометкаУдаления", - Истина, - ВидСравненияКомпоновкиДанных.Равно,, Истина); - - ИначеЕсли ПоказатьПрофили = "Поставляемые" Тогда - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, + "Ссылка", + Справочники.ПрофилиГруппДоступа.НесовместимыеПрофилиГруппДоступа(), + ВидСравненияКомпоновкиДанных.ВСписке, , Истина); + Иначе + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, + "Ссылка", , , , Ложь); + КонецЕсли; + + Если ПоказатьПрофили = "Поставляемые" Тогда + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Ссылка.ИдентификаторПоставляемыхДанных", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"), - ВидСравненияКомпоновкиДанных.НеРавно,, Истина); + ВидСравненияКомпоновкиДанных.НеРавно, , Истина); ИначеЕсли ПоказатьПрофили = "Непоставляемые" Тогда - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Ссылка.ИдентификаторПоставляемыхДанных", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"), - ВидСравненияКомпоновкиДанных.Равно,, Истина); + ВидСравненияКомпоновкиДанных.Равно, , Истина); + Иначе + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, + "Ссылка.ИдентификаторПоставляемыхДанных", , , , Ложь); КонецЕсли; КонецПроцедуры @@ -122,11 +140,15 @@ &НаКлиенте Процедура ПослеВыбораНазначения(МассивТипов, ДополнительныеПараметры) Экспорт - Используется = МассивТипов.Количество() <> 0; - - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - Список, "Ссылка.Назначение.ТипПользователей", - МассивТипов, ВидСравненияКомпоновкиДанных.ВСписке,, Используется); + Если МассивТипов.Количество() <> 0 Тогда + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, + "Ссылка.Назначение.ТипПользователей", + МассивТипов, + ВидСравненияКомпоновкиДанных.ВСписке, , Истина); + Иначе + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( + Список, "Ссылка.Назначение.ТипПользователей", , , , Ложь); + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form index 388244fb1..aca72bc10 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form @@ -591,6 +591,7 @@ Vertical auto + false @@ -1188,6 +1189,7 @@ Page Vertical + false @@ -1250,7 +1252,9 @@
    Page - + + false + true true @@ -1331,6 +1335,7 @@ Vertical auto + false @@ -1522,6 +1527,7 @@ Vertical auto + false @@ -1592,6 +1598,7 @@ Vertical auto + false true @@ -1957,6 +1964,40 @@ true + + ЭтоНедоступнаяРоль + + <key>ru</key> + <value>Это недоступная роль</value> + + 6 + + Boolean + + + true + + + true + + + + ЭтоНесуществующаяРоль + + <key>ru</key> + <value>Это несуществующая роль</value> + + 7 + + Boolean + + + true + + + true + + ПоказатьПодсистемыРолей diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Help/ru.html index 80166576d..7bf48e1ba 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

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

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

    • На вкладке Разрешенные действия (роли) при добавлении нового профиля групп доступа сначала необходимо определить состав его ролей, исходя из потребностей целевой группы пользователей.
    • Роль определяет некоторую совокупность действий над объектами программы, которые может выполнять пользователь. Роли могут соответствовать как различным должностным обязанностям (или видам деятельности) пользователей программы, так и могут соотноситься с более мелкими функциями. Например, роль Бухгалтер предоставляет доступ к функциональному блоку, необходимому для выполнения должностных обязанностей бухгалтера, а для включения отдельной возможности просмотра файлов может быть дополнительно назначена роль Чтение файлов. Зачастую, роли либо разрешают просмотр, либо дают возможность редактирования тех или иных данных в программе. 
    • С помощью флажков выберите одну или несколько ролей. @@ -17,7 +17,7 @@
    • С помощью кнопки  можно отменить выбор всех ролей.
  • С помощью соответствующей кнопки можно показать Только выбранные роли.
  • С помощью кнопки По подсистемам можно показать список ролей одним из способов:
    • в алфавитном порядке; -
    • сгруппировать по подсистемам.
  • Ограничения доступа

    +
  • сгруппировать по подсистемам.
  • Ограничения доступа

    • На вкладке Ограничения доступа необходимо принять решение по поводу состава видов доступа, которые должны быть определены в профиле.
    • Под видом доступа подразумевается некоторое правило, по которому "разрешается" доступ к данным программы. С их помощью можно более точно настраивать границы области данных, с которой разрешено работать участникам тех или иных групп доступа.
    • В простейшем случае, если в профиль не включено ни одного вида доступа, то права доступа к данным определяются только ролями. Например, в случае, если профиль включает в себя роль для чтения документов Поступление товаров, то участники групп доступа получают возможность просмотра всех документов. Но если в дополнение к этой роли в профиль добавить вид доступа Организации, то появляется возможность разрешать пользователям работу с документами только по конкретным организациям; или наоборот, скрывать от них документы некоторых организаций. diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl index 40a1f444d..7f6d5e0b1 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl @@ -64,7 +64,7 @@ КонецЕсли; ОбработатьИнтерфейсРолей("ЗаполнитьРоли", Объект.Роли); - ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриСозданииФормы", Истина); + ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриЧтенииНаСервере", Истина); УправлениеДоступомСлужебный.ПриПовторномЧтенииНаСервереФормыРедактированияРазрешенныхЗначений( ЭтотОбъект, ТекущийОбъект); @@ -167,18 +167,30 @@ // Проверка наличия ролей в метаданных. ПроверенныеРеквизитыОбъекта.Добавить("Роли.Роль"); - - ЭлементыДерева = Роли.ПолучитьЭлементы(); - Для каждого Строка Из ЭлементыДерева Цикл - Если Строка.Пометка И СтрНачинаетсяС(Строка.Синоним, "?") Тогда - ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, - "Роли[%1].РолиСиноним", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" не найдена в метаданных.'"), Строка.Синоним), - "Роли", - ЭлементыДерева.Индекс(Строка), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %%1 не найдена в метаданных.'"), Строка.Синоним)); - КонецЕсли; - КонецЦикла; + Если Не Элементы.Роли.ТолькоПросмотр Тогда + ЭлементыДерева = Роли.ПолучитьЭлементы(); + Для Каждого Строка Из ЭлементыДерева Цикл + Если Не Строка.Пометка Тогда + Продолжить; + КонецЕсли; + Если Строка.ЭтоНесуществующаяРоль Тогда + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "Роли[%1].РолиСиноним", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" не найдена в метаданных.'"), Строка.Синоним), + "Роли", + ЭлементыДерева.Индекс(Строка), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %%1 не найдена в метаданных.'"), Строка.Синоним)); + КонецЕсли; + Если Строка.ЭтоНедоступнаяРоль Тогда + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + "Роли[%1].РолиСиноним", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" недоступна для назначения профиля.'"), Строка.Синоним), + "Роли", + ЭлементыДерева.Индекс(Строка), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %%1 недоступна для назначения профиля.'"), Строка.Синоним)); + КонецЕсли; + КонецЦикла; + КонецЕсли; // Проверка незаполненных и повторяющихся видов и значений доступа. УправлениеДоступомСлужебныйКлиентСервер.ОбработкаПроверкиЗаполненияНаСервереФормыРедактированияРазрешенныхЗначений( @@ -372,12 +384,34 @@ &НаКлиенте Процедура РолиПометкаПриИзменении(Элемент) - Если Элементы.Роли.ТекущиеДанные <> Неопределено Тогда + СтрокаТаблицы = Элементы.Роли.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + Если СтрокаТаблицы.Пометка И СтрокаТаблицы.Имя = "ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок" Тогда + Оповещение = Новый ОписаниеОповещения("РолиПометкаПриИзмененииПослеПодтверждения", ЭтотОбъект); + ПараметрыФормы = Новый Структура("Ключ", "ПередВыборомРоли"); + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение); + Иначе ОбработатьИнтерфейсРолей("ОбновитьСоставРолей"); КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура РолиПометкаПриИзмененииПослеПодтверждения(Ответ, ПараметрыВыполнения) Экспорт + СтрокаТаблицы = Элементы.Роли.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + Если Ответ = "Продолжить" Тогда + ОбработатьИнтерфейсРолей("ОбновитьСоставРолей"); + Иначе + СтрокаТаблицы.Пометка = Ложь; + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -441,7 +475,7 @@ &НаКлиенте Процедура ВыбратьНазначение(Команда) ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораНазначения", ЭтотОбъект); - ПользователиСлужебныйКлиент.ВыбратьНазначение(ЭтотОбъект, Нстр("ru = 'Выбор назначения профиля групп доступа'"),,, ОписаниеОповещения); + ПользователиСлужебныйКлиент.ВыбратьНазначение(ЭтотОбъект, НСтр("ru = 'Выбор назначения профиля групп доступа'"),,, ОписаниеОповещения); КонецПроцедуры #КонецОбласти @@ -566,17 +600,15 @@ Процедура ОбработатьИнтерфейсРолей(Действие, ОсновнойПараметр = Неопределено) ПараметрыДействия = Новый Структура; - ПараметрыДействия.Вставить("ОсновнойПараметр", ОсновнойПараметр); - ПараметрыДействия.Вставить("Форма", ЭтотОбъект); - ПараметрыДействия.Вставить("КоллекцияРолей", КоллекцияРолей); + ПараметрыДействия.Вставить("ОсновнойПараметр", ОсновнойПараметр); + ПараметрыДействия.Вставить("Форма", ЭтотОбъект); + ПараметрыДействия.Вставить("КоллекцияРолей", КоллекцияРолей); ПараметрыДействия.Вставить("СкрытьРольПолныеПрава", Объект.Ссылка <> Справочники.ПрофилиГруппДоступа.Администратор); - ТипПользователей = ?(ОбщегоНазначенияПовтИсп.РазделениеВключено(), - Перечисления.ТипыПользователей.ПользовательОбластиДанных, - Перечисления.ТипыПользователей.ПользовательЛокальногоРешения); - ПараметрыДействия.Вставить("ТипПользователей", ТипПользователей); + ПараметрыДействия.Вставить("НазначениеРолей", + УправлениеДоступомСлужебныйКлиентСервер.НазначениеПрофиля(Объект)); ПользователиСлужебный.ОбработатьИнтерфейсРолей(Действие, ПараметрыДействия); @@ -595,6 +627,8 @@ Если Результат <> Неопределено Тогда Модифицированность = Истина; + ОбработатьИнтерфейсРолей("ОбновитьДеревоРолей"); + ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтотОбъект); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Help/ru.html b/SSL/src/Catalogs/ПрофилиГруппДоступа/Help/ru.html index 6b41b3d5a..144efb8d6 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 6a78c5dd3..8d315d476 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ManagerModule.bsl @@ -2,9 +2,11 @@ #Область ПрограммныйИнтерфейс -// Возвращает список реквизитов, которые не нужно редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые не рекомендуется редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт НеРедактируемыеРеквизиты = Новый Массив; @@ -336,7 +338,7 @@ Для Каждого Раздел Из Разделы Цикл - КоличествоНесовместимыхПрофилейГруппДоступа = КоличествоНесовместимыхПрофилейГруппДоступа(); + КоличествоНесовместимыхПрофилейГруппДоступа = НесовместимыеПрофилиГруппДоступа().Количество(); ИдентификаторПрофиля = "НеСовместимыСТекущейВерсией" + СтрЗаменить(Раздел.ПолноеИмя(), ".", ""); Дело = ТекущиеДела.Добавить(); @@ -367,9 +369,15 @@ // Возвращает строку уникального идентификатора // поставляемого и предопределенного профиля Администратор. // -Функция ИдентификаторПрофиляАдминистратор() Экспорт +Функция ИдентификаторПрофиляАдминистратор(Строка = Истина) Экспорт - Возврат "6c4b0307-43a4-4141-9c35-3dd7e9586d41"; + Идентификатор = "6c4b0307-43a4-4141-9c35-3dd7e9586d41"; + + Если Строка Тогда + Возврат Идентификатор; + КонецЕсли; + + Возврат Новый УникальныйИдентификатор(Идентификатор); КонецФункции @@ -636,6 +644,57 @@ КонецПроцедуры +// Возвращает список ссылок на профили, содержащие недоступные роли или роли помеченные на удаление. +// +// Возвращаемое значение: +// Массив - массив элементов СправочникСсылка.ПрофилиГруппДоступа. +// +Функция НесовместимыеПрофилиГруппДоступа() Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Профили.Ссылка КАК Ссылка, + | Профили.Назначение.( + | ТипПользователей КАК ТипПользователей + | ) КАК Назначение, + | Профили.Роли.( + | ЕСТЬNULL(Профили.Роли.Роль.Имя, """") КАК Имя, + | ЕСТЬNULL(Профили.Роли.Роль.ПометкаУдаления, ИСТИНА) КАК ПометкаУдаления + | ) + |ИЗ + | Справочник.ПрофилиГруппДоступа КАК Профили"; + + Выгрузка = Запрос.Выполнить().Выгрузить(); + + НесовместимыеПрофили = Новый Массив; + НедоступныеРолиПоНазначению = Новый Соответствие; + + Для Каждого ОписаниеПрофиля Из Выгрузка Цикл + НазначениеПрофиля = УправлениеДоступомСлужебныйКлиентСервер.НазначениеПрофиля(ОписаниеПрофиля); + НедоступныеРоли = НедоступныеРолиПоНазначению.Получить(НазначениеПрофиля); + Если НедоступныеРоли = Неопределено Тогда + НедоступныеРоли = ПользователиСлужебныйПовтИсп.НедоступныеРоли(НазначениеПрофиля); + НедоступныеРолиПоНазначению.Вставить(НазначениеПрофиля, НедоступныеРоли); + КонецЕсли; + + Для Каждого Роль Из ОписаниеПрофиля.Роли Цикл + + Если Роль.ПометкаУдаления + Или НедоступныеРоли.Получить(Роль.Имя) <> Неопределено + Или ВРег(Лев(Роль.Имя, СтрДлина("Удалить"))) = ВРег("Удалить") + Или УправлениеДоступомСлужебный.ЭтоПрофильнаяРоль(Роль.Имя) Тогда + + НесовместимыеПрофили.Добавить(ОписаниеПрофиля.Ссылка); + Прервать; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Возврат НесовместимыеПрофили; + +КонецФункции + // Обработчики обновления информационной базы. // Заполняет идентификаторы поставляемых данных по совпадению с идентификатором ссылки. @@ -827,7 +886,9 @@ ОписаниеПрофиляАдминистратор.Имя = "Администратор"; ОписаниеПрофиляАдминистратор.Идентификатор = ИдентификаторПрофиляАдминистратор(); ОписаниеПрофиляАдминистратор.Наименование = НСтр("ru = 'Администратор'"); + ОписаниеПрофиляАдминистратор.Роли.Добавить("АдминистраторСистемы"); ОписаниеПрофиляАдминистратор.Роли.Добавить("ПолныеПрава"); + ОписаниеПрофиляАдминистратор.Описание = НСтр("ru = 'Предназначен для: |- настройки параметров работы и обслуживания информационной системы, @@ -848,7 +909,7 @@ // свойств для хранения и быстрой обработки. СвойстваПрофилей = Новый Соответствие; ОписанияПрофилейМассив = Новый Массив; - Для каждого ОписаниеПрофиля Из ОписанияПрофилей Цикл + Для Каждого ОписаниеПрофиля Из ОписанияПрофилей Цикл // Назначение профиля. Если ОписаниеПрофиля.Назначение.Количество() = 0 Тогда ОписаниеПрофиля.Назначение.Добавить(Тип("СправочникСсылка.Пользователи")); @@ -883,8 +944,13 @@ КонецЦикла; КонецЦикла; ОписаниеПрофиля.Назначение = МассивНазначений; - // Проверка наличия ролей в метаданных. - Для каждого Роль Из ОписаниеПрофиля.Роли Цикл + + // Проверка ролей. + НазначениеПрофиля = УправлениеДоступомСлужебныйКлиентСервер.НазначениеПрофиля(ОписаниеПрофиля); + НедоступныеРоли = ПользователиСлужебныйПовтИсп.НедоступныеРоли(НазначениеПрофиля, Ложь); + + Для Каждого Роль Из ОписаниеПрофиля.Роли Цикл + // Проверка наличия ролей в метаданных. Если ВсеРоли.Получить(Роль) = Неопределено Тогда ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'В описании профиля ""%1 (%2)"" @@ -893,7 +959,7 @@ ОписаниеПрофиля.Идентификатор, Роль); КонецЕсли; - Если ВРег(Лев(Роль, СтрДлина("Профиль"))) = ВРег("Профиль") Тогда + Если УправлениеДоступомСлужебный.ЭтоПрофильнаяРоль(Роль) Тогда ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'В описании профиля ""%1 (%2)"" |указана недопустимая роль ""%3"".'"), @@ -901,7 +967,26 @@ ОписаниеПрофиля.Идентификатор, Роль); КонецЕсли; + // Проверка соответствия назначения ролей и профиля. + Если НедоступныеРоли.Получить(Роль) <> Неопределено Тогда + ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В описании профиля ""%1 (%2)"" + |указана роль ""%3"", + |которая не соответствует назначению профиля: + |""%4"".'"), + ОписаниеПрофиля.Имя, + ОписаниеПрофиля.Идентификатор, + Роль, + ПредставлениеНазначенияПрофиля(НазначениеПрофиля)); + КонецЕсли; КонецЦикла; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + // Заполнение списка недоступных ролей в модели сервиса + // для определения необходимости обновления поставляемых профилей. + ОписаниеПрофиля.Вставить("РолиНедоступныеВСервисе", + РолиПрофиляНедоступныеВСервисе(ОписаниеПрофиля, НазначениеПрофиля)); + КонецЕсли; + Если СвойстваПрофилей.Получить(ОписаниеПрофиля.Идентификатор) <> Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Профиль с идентификатором ""%1"" уже существует.'"), @@ -919,7 +1004,7 @@ КонецЕсли; // Преобразование СпискаЗначений к Соответствию для фиксации. ВидыДоступа = Новый Соответствие; - Для каждого ЭлементСписка Из ОписаниеПрофиля.ВидыДоступа Цикл + Для Каждого ЭлементСписка Из ОписаниеПрофиля.ВидыДоступа Цикл ИмяВидаДоступа = ЭлементСписка.Значение; УточнениеВидаДоступа = ЭлементСписка.Представление; Если СвойстваВидовДоступа.ПоИменам.Получить(ИмяВидаДоступа) = Неопределено Тогда @@ -931,6 +1016,23 @@ ОписаниеПрофиля.Идентификатор), ИмяВидаДоступа); КонецЕсли; + + ВидДоступаСоответствуетНазначениюПрофиля = + УправлениеДоступомСлужебныйКлиентСервер.ВидДоступаСоответствуетНазначениюПрофиля( + ИмяВидаДоступа, НазначениеПрофиля); + + Если Не ВидДоступаСоответствуетНазначениюПрофиля Тогда + ВызватьИсключение ЗаголовокОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В описании профиля ""%1"" + |указан вид доступа ""%2"" + |который не соответствует назначению профиля: + |""%3"".'"), + ?(ЗначениеЗаполнено(ОписаниеПрофиля.Имя), + ОписаниеПрофиля.Имя, + ОписаниеПрофиля.Идентификатор), + ИмяВидаДоступа, + ПредставлениеНазначенияПрофиля(НазначениеПрофиля)); + КонецЕсли; Если УточнениеВидаДоступа <> "" И УточнениеВидаДоступа <> "ВначалеВсеЗапрещены" И УточнениеВидаДоступа <> "Предустановленный" @@ -960,7 +1062,7 @@ ТаблицаЗначенийДоступа.Колонки.Добавить("ВидДоступа", Метаданные.ОпределяемыеТипы.ЗначениеДоступа.Тип); ТаблицаЗначенийДоступа.Колонки.Добавить("ЗначениеДоступа", Метаданные.ОпределяемыеТипы.ЗначениеДоступа.Тип); - Для каждого ЭлементСписка Из ОписаниеПрофиля.ЗначенияДоступа Цикл + Для Каждого ЭлементСписка Из ОписаниеПрофиля.ЗначенияДоступа Цикл Отбор = Новый Структура; Отбор.Вставить("ВидДоступа", ЭлементСписка.Значение); Отбор.Вставить("ЗначениеДоступа", ЭлементСписка.Представление); @@ -1069,6 +1171,20 @@ КонецФункции +// Для процедуры ПоставляемыеПрофили. +Функция ПредставлениеНазначенияПрофиля(НазначениеПрофиля) + + Если НазначениеПрофиля = "СовместноДляПользователейИВнешнихПользователей" Тогда + Возврат НСтр("ru = 'Совместно для пользователей и внешних пользователей'"); + + ИначеЕсли НазначениеПрофиля = "ДляВнешнихПользователей" Тогда + Возврат НСтр("ru = 'Для внешних пользователей'"); + КонецЕсли; + + Возврат НСтр("ru = 'Для пользователей'"); + +КонецФункции + Функция ПредопределенныеПрофилиСовпадают(НовыеПрофили, СтарыеПрофили, ЕстьУдаленные) ПредопределенныеПрофилиСовпадают = @@ -1196,51 +1312,37 @@ Функция ОписаниеРолейПрофиля(ОписаниеПрофиля) - ОписаниеРолейПрофиля = Новый Массив; - РазделениеВключено = ОбщегоНазначенияПовтИсп.РазделениеВключено(); - - Если РазделениеВключено Тогда - // Удаление из описаний профилей ролей, содержащих права, - // недоступные разделенным пользователям. - НедоступныеРоли = ПользователиСлужебный.НедоступныеРолиПоТипуПользователей( - Перечисления.ТипыПользователей.ПользовательОбластиДанных); - - ИначеЕсли ОписаниеПрофиля.Идентификатор = ИдентификаторПрофиляАдминистратор() Тогда - - ИмяРолиАдминистратораСистемы = Пользователи.РольАдминистратораСистемы().Имя; - - Если ОписаниеРолейПрофиля.Найти(ИмяРолиАдминистратораСистемы) = Неопределено Тогда - ОписаниеРолейПрофиля.Добавить(ИмяРолиАдминистратораСистемы); - КонецЕсли; + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат ОписаниеПрофиля.Роли; КонецЕсли; - Для каждого Роль Из ОписаниеПрофиля.Роли Цикл - Если РазделениеВключено Тогда - Если НедоступныеРоли.Получить(Роль) <> Неопределено Тогда - Продолжить; - КонецЕсли; + НазначениеПрофиля = УправлениеДоступомСлужебныйКлиентСервер.НазначениеПрофиля(ОписаниеПрофиля); + НедоступныеРоли = ПользователиСлужебныйПовтИсп.НедоступныеРоли(НазначениеПрофиля); + + ОписаниеРолейПрофиля = Новый Массив; + + Для Каждого Роль Из ОписаниеПрофиля.Роли Цикл + Если НедоступныеРоли.Получить(Роль) = Неопределено Тогда + ОписаниеРолейПрофиля.Добавить(Роль); КонецЕсли; - ОписаниеРолейПрофиля.Добавить(Роль); КонецЦикла; - Возврат ОписаниеРолейПрофиля; + Возврат Новый ФиксированныйМассив(ОписаниеРолейПрофиля); КонецФункции -Функция КоличествоНесовместимыхПрофилейГруппДоступа() +Функция РолиПрофиляНедоступныеВСервисе(ОписаниеПрофиля, НазначениеПрофиля) - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ПрофилиГруппДоступа.Ссылка - |ИЗ - | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа - |ГДЕ - | ПрофилиГруппДоступа.Роли.Роль.ПометкаУдаления = ИСТИНА"; + НедоступныеРоли = ПользователиСлужебныйПовтИсп.НедоступныеРоли(НазначениеПрофиля, Истина); + НедоступныеРолиПрофиля = Новый Соответствие; - Результат = Запрос.Выполнить().Выгрузить(); + Для Каждого Роль Из ОписаниеПрофиля.Роли Цикл + Если НедоступныеРоли.Получить(Роль) <> Неопределено Тогда + НедоступныеРолиПрофиля.Вставить(Роль, Истина); + КонецЕсли; + КонецЦикла; - Возврат Результат.Количество(); + Возврат Новый ФиксированноеСоответствие(НедоступныеРолиПрофиля); КонецФункции diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl index 18a85dc81..1c0dc1602 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl @@ -1,11 +1,15 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ОписаниеПеременных + Перем СтарыеРолиПрофиля; // Роли профиля до изменения для использования // в обработчике события ПриЗаписи. Перем СтараяПометкаУдаления; // Пометка удаления профиля групп доступа до изменения // для использования в обработчике события ПриЗаписи. +#КонецОбласти + #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Commands/ВыполнитьСейчас/CommandModule.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Commands/ВыполнитьСейчас/CommandModule.bsl index 2b0ac23cb..60e06e81f 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Commands/ВыполнитьСейчас/CommandModule.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Commands/ВыполнитьСейчас/CommandModule.bsl @@ -91,7 +91,7 @@ РезультатФоновогоЗадания = ДлительныеОперации.ЗапуститьВыполнениеВФоне( УникальныйИдентификатор, "РассылкаОтчетов.ВыполнитьРассылкиВФоновомЗадании", - ПараметрыВызоваСервера, + ПараметрыВызоваСервера, НСтр("ru = 'Рассылки отчетов: Выполнение рассылок в фоне'")); Если РезультатФоновогоЗадания.ЗаданиеВыполнено Тогда diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Help/ru.html index 020eefee3..b7ee19866 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Help/ru.html +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

      diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Form.form index b55fdc60c..4e04930ca 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Form.form @@ -510,10 +510,6 @@ ru Получатели - - ru - - 20 НастройкаСпискаПолучателейРасширеннаяПодсказка @@ -918,12 +914,6 @@ CatalogRef.ВидыКонтактнойИнформации - - ГруппаКонтакнойИнформацииТипаПолучателей - - CatalogRef.ВидыКонтактнойИнформации - - Получатели diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПолучателиРассылки/Help/ru.html index f9b81b6cf..e0cad2bd4 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/ФормаВыбораГруппы/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Help/ru.html index 16044b98a..1aec359b1 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/ФормаГруппы/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Help/ru.html index df822f1d3..ba6be2860 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Help/ru.html +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Help/ru.html @@ -1,4 +1,4 @@ - +

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

      Сведения о группе

      • Напишите Наименование группы. diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form index 274b7dda0..91ff8fa15 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form @@ -1746,19 +1746,19 @@ ТОГДА 1 КОГДА Состояние.СОшибками ТОГДА 1 - ИНАЧЕ 0 + ИНАЧЕ 2 КОНЕЦ КАК ИндексКартинкиПоследнегоЗапуска, ВЫБОР КОГДА Состояние.ПоследнийЗапуск ЕСТЬ NULL ИЛИ Рассылки.ПометкаУдаления = ИСТИНА - ТОГДА "" + ТОГДА ВЫРАЗИТЬ("" КАК СТРОКА(50)) КОГДА Состояние.ПоследнийЗапуск = &ПустаяДата - ТОГДА "Новая" + ТОГДА &ПредставлениеСостоянияНовая КОГДА НЕ Состояние.Выполнена - ТОГДА "Не выполнена" + ТОГДА &ПредставлениеСостоянияНеВыполнена КОГДА Состояние.СОшибками - ТОГДА "Выполнена с ошибками" - ИНАЧЕ "Выполнена" + ТОГДА &ПредставлениеСостоянияВыполненаСОшибками + ИНАЧЕ &ПредставлениеСостоянияВыполнена КОНЕЦ КАК Состояние ИЗ Справочник.РассылкиОтчетов КАК Рассылки diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl index 4899844c0..2ac44c1bd 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Module.bsl @@ -48,6 +48,10 @@ КонецЕсли; Список.Параметры.УстановитьЗначениеПараметра("ПустаяДата", '00010101'); + Список.Параметры.УстановитьЗначениеПараметра("ПредставлениеСостоянияНовая", НСтр("ru = 'Новая'")); + Список.Параметры.УстановитьЗначениеПараметра("ПредставлениеСостоянияНеВыполнена", НСтр("ru = 'Не выполнена'")); + Список.Параметры.УстановитьЗначениеПараметра("ПредставлениеСостоянияВыполненаСОшибками", НСтр("ru = 'Выполнена с ошибками'")); + Список.Параметры.УстановитьЗначениеПараметра("ПредставлениеСостоянияВыполнена", НСтр("ru = 'Выполнена'")); Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов") Тогда Элементы.ИзменитьВыделенные.Видимость = Ложь; diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form index 09cbbd119..e120a1df7 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form @@ -278,6 +278,7 @@ Vertical auto + false @@ -361,6 +362,7 @@ Vertical auto + false true @@ -905,10 +907,6 @@ НастройкиТекущегоОтчетаИспользование1 660 - - <key>ru</key> - <value> </value> - true true @@ -1179,13 +1177,14 @@ Vertical auto + false СтраницаКомпоновщик 250 - КомпоновщикНастроекПользовательскиеНастройки + ПользовательскиеНастройки 187 true true @@ -1203,7 +1202,7 @@ Tree UseFieldAsValue - КомпоновщикНастроекПользовательскиеНастройкиИспользование + ПользовательскиеНастройкиИспользование 581 true true @@ -1215,7 +1214,7 @@ None - КомпоновщикНастроекПользовательскиеНастройкиИспользованиеExtendedTooltip + ПользовательскиеНастройкиИспользованиеРасширеннаяПодсказка 729 Label true @@ -1225,7 +1224,7 @@ - КомпоновщикНастроекПользовательскиеНастройкиИспользованиеКонтекстноеМеню + ПользовательскиеНастройкиИспользованиеКонтекстноеМеню 582 true @@ -1236,10 +1235,10 @@ - КомпоновщикНастроекПользовательскиеНастройкиГруппаКолонок + ПользовательскиеНастройкиГруппаКолонок 583 - КомпоновщикНастроекПользовательскиеНастройкиКартинкаНастройки + ПользовательскиеНастройкиКартинкаНастройки 584 true true @@ -1250,7 +1249,7 @@ КомпоновщикНастроекКД.UserSettings.SettingPicture - КомпоновщикНастроекПользовательскиеНастройкиКартинкаНастройкиExtendedTooltip + ПользовательскиеНастройкиКартинкаНастройкиРасширеннаяПодсказка 731 Label true @@ -1260,7 +1259,7 @@ - КомпоновщикНастроекПользовательскиеНастройкиКартинкаНастройкиКонтекстноеМеню + ПользовательскиеНастройкиКартинкаНастройкиКонтекстноеМеню 585 true @@ -1279,7 +1278,7 @@ - КомпоновщикНастроекПользовательскиеНастройкиНастройка + ПользовательскиеНастройкиНастройка 586 true true @@ -1290,7 +1289,7 @@ КомпоновщикНастроекКД.UserSettings.Setting - КомпоновщикНастроекПользовательскиеНастройкиНастройкаExtendedTooltip + ПользовательскиеНастройкиНастройкаРасширеннаяПодсказка 732 Label true @@ -1300,7 +1299,7 @@ - КомпоновщикНастроекПользовательскиеНастройкиНастройкаКонтекстноеМеню + ПользовательскиеНастройкиНастройкаКонтекстноеМеню 587 true @@ -1326,8 +1325,16 @@ true + + <key>ru</key> + <value>Пользовательские настройки группа колонок</value> + + + ru + Пользовательские настройки группа колонок + - КомпоновщикНастроекПользовательскиеНастройкиГруппаКолонокExtendedTooltip + ПользовательскиеНастройкиГруппаКолонокРасширеннаяПодсказка 730 Label true @@ -1344,7 +1351,7 @@ - КомпоновщикНастроекПользовательскиеНастройкиВидСравнения + ПользовательскиеНастройкиВидСравнения 588 true true @@ -1355,7 +1362,7 @@ КомпоновщикНастроекКД.UserSettings.ComparisonType - КомпоновщикНастроекПользовательскиеНастройкиВидСравненияExtendedTooltip + ПользовательскиеНастройкиВидСравненияРасширеннаяПодсказка 733 Label true @@ -1365,7 +1372,7 @@ - КомпоновщикНастроекПользовательскиеНастройкиВидСравненияКонтекстноеМеню + ПользовательскиеНастройкиВидСравненияКонтекстноеМеню 589 true @@ -1384,10 +1391,10 @@ - КомпоновщикНастроекПользовательскиеНастройкиГруппаКолонок1 + ПользовательскиеНастройкиГруппаКолонок1 590 - КомпоновщикНастроекПользовательскиеНастройкиКартинкаЗначения + ПользовательскиеНастройкиКартинкаЗначения 591 true true @@ -1398,7 +1405,7 @@ КомпоновщикНастроекКД.UserSettings.ValuePicture - КомпоновщикНастроекПользовательскиеНастройкиКартинкаЗначенияExtendedTooltip + ПользовательскиеНастройкиКартинкаЗначенияРасширеннаяПодсказка 735 Label true @@ -1408,7 +1415,7 @@ - КомпоновщикНастроекПользовательскиеНастройкиКартинкаЗначенияКонтекстноеМеню + ПользовательскиеНастройкиКартинкаЗначенияКонтекстноеМеню 592 true @@ -1427,7 +1434,7 @@ - КомпоновщикНастроекПользовательскиеНастройкиЗначение + ПользовательскиеНастройкиЗначение 593 true true @@ -1439,7 +1446,7 @@ true - КомпоновщикНастроекПользовательскиеНастройкиЗначениеExtendedTooltip + ПользовательскиеНастройкиЗначениеРасширеннаяПодсказка 736 Label true @@ -1449,7 +1456,7 @@ - КомпоновщикНастроекПользовательскиеНастройкиЗначениеКонтекстноеМеню + ПользовательскиеНастройкиЗначениеКонтекстноеМеню 594 true @@ -1459,6 +1466,14 @@ Left true + + StartChoice + ПользовательскиеНастройкиЗначениеНачалоВыбора + + + Clearing + ПользовательскиеНастройкиЗначениеОчистка + 15 true true @@ -1477,7 +1492,7 @@ true - КомпоновщикНастроекПользовательскиеНастройкиГруппаКолонок1ExtendedTooltip + ПользовательскиеНастройкиГруппаКолонок1РасширеннаяПодсказка 734 Label true @@ -1494,16 +1509,15 @@ - КомпоновщикНастроекПользовательскиеНастройкиРедактированиеВФормеОтчета + ПользовательскиеНастройкиРедактированиеВФормеОтчета 595 - true true КомпоновщикНастроекКД.UserSettings.EditInReportForm - КомпоновщикНастроекПользовательскиеНастройкиРедактированиеВФормеОтчетаExtendedTooltip + ПользовательскиеНастройкиРедактированиеВФормеОтчетаРасширеннаяПодсказка 737 Label true @@ -1513,7 +1527,7 @@ - КомпоновщикНастроекПользовательскиеНастройкиРедактированиеВФормеОтчетаКонтекстноеМеню + ПользовательскиеНастройкиРедактированиеВФормеОтчетаКонтекстноеМеню 596 true @@ -1524,10 +1538,10 @@ - КомпоновщикНастроекПользовательскиеНастройкиКоманднаяПанель + ПользовательскиеНастройкиКоманднаяПанель 189 - КомпоновщикНастроекПользовательскиеНастройкиУстановитьФлажки + ПользовательскиеНастройкиУстановитьФлажки 951 true true @@ -1535,7 +1549,7 @@ true - КомпоновщикНастроекПользовательскиеНастройкиУстановитьФлажкиРасширеннаяПодсказка + ПользовательскиеНастройкиУстановитьФлажкиРасширеннаяПодсказка 952 Label true @@ -1544,7 +1558,7 @@ Left - Form.Item.КомпоновщикНастроекПользовательскиеНастройки.StandardCommand.CheckAll + Form.Item.ПользовательскиеНастройки.StandardCommand.CheckAll Normal Auto true @@ -1554,7 +1568,7 @@ InCommandBarAndInAdditionalSubmenu - КомпоновщикНастроекПользовательскиеНастройкиСнятьФлажки + ПользовательскиеНастройкиСнятьФлажки 953 true true @@ -1562,7 +1576,7 @@ true - КомпоновщикНастроекПользовательскиеНастройкиСнятьФлажкиРасширеннаяПодсказка + ПользовательскиеНастройкиСнятьФлажкиРасширеннаяПодсказка 954 Label true @@ -1571,7 +1585,7 @@ Left - Form.Item.КомпоновщикНастроекПользовательскиеНастройки.StandardCommand.UncheckAll + Form.Item.ПользовательскиеНастройки.StandardCommand.UncheckAll Normal Auto true @@ -1609,15 +1623,23 @@ Left true + + Selection + ПользовательскиеНастройкиВыбор + + + OnActivateRow + ПользовательскиеНастройкиПриАктивизацииСтроки + OnChange - КомпоновщикНастроекПользовательскиеНастройкиПриИзменении + ПользовательскиеНастройкиПриИзменении - КомпоновщикНастроекПользовательскиеНастройкиСтрокаПоиска + ПользовательскиеНастройкиСтрокаПоиска 1024 - КомпоновщикНастроекПользовательскиеНастройкиСтрокаПоискаРасширеннаяПодсказка + ПользовательскиеНастройкиСтрокаПоискаРасширеннаяПодсказка 1026 Label true @@ -1627,20 +1649,20 @@ - КомпоновщикНастроекПользовательскиеНастройкиСтрокаПоискаКонтекстноеМеню + ПользовательскиеНастройкиСтрокаПоискаКонтекстноеМеню 1025 true - КомпоновщикНастроекПользовательскиеНастройки + ПользовательскиеНастройки true - КомпоновщикНастроекПользовательскиеНастройкиСостояниеПросмотра + ПользовательскиеНастройкиСостояниеПросмотра 1027 - КомпоновщикНастроекПользовательскиеНастройкиСостояниеПросмотраРасширеннаяПодсказка + ПользовательскиеНастройкиСостояниеПросмотраРасширеннаяПодсказка 1029 Label true @@ -1650,21 +1672,21 @@ - КомпоновщикНастроекПользовательскиеНастройкиСостояниеПросмотраКонтекстноеМеню + ПользовательскиеНастройкиСостояниеПросмотраКонтекстноеМеню 1028 true ViewStatusAddition - КомпоновщикНастроекПользовательскиеНастройки + ПользовательскиеНастройки true - КомпоновщикНастроекПользовательскиеНастройкиУправлениеПоиском + ПользовательскиеНастройкиУправлениеПоиском 1030 - КомпоновщикНастроекПользовательскиеНастройкиУправлениеПоискомРасширеннаяПодсказка + ПользовательскиеНастройкиУправлениеПоискомРасширеннаяПодсказка 1032 Label true @@ -1674,18 +1696,18 @@ - КомпоновщикНастроекПользовательскиеНастройкиУправлениеПоискомКонтекстноеМеню + ПользовательскиеНастройкиУправлениеПоискомКонтекстноеМеню 1031 true SearchControlAddition - КомпоновщикНастроекПользовательскиеНастройки + ПользовательскиеНастройки true - КомпоновщикНастроекПользовательскиеНастройкиExtendedTooltip + ПользовательскиеНастройкиРасширеннаяПодсказка 728 Label true @@ -1695,7 +1717,7 @@ - КомпоновщикНастроекПользовательскиеНастройкиКонтекстноеМеню + ПользовательскиеНастройкиКонтекстноеМеню 188 ИспользоватьПолучателяРассылкиВНастройкеОтчета2 @@ -1777,6 +1799,7 @@ Page auto + false @@ -1810,10 +1833,6 @@ НастройкиТекущегоОтчетаИспользование 245 - - <key>ru</key> - <value> </value> - true true @@ -2143,6 +2162,7 @@ Page auto + false true @@ -2233,6 +2253,7 @@ Vertical auto + false @@ -2416,6 +2437,7 @@ Vertical auto + false @@ -2470,6 +2492,7 @@ Vertical auto + false true @@ -2587,10 +2610,6 @@ ДекорацияПустаяВРасписание 435 - - <key>ru</key> - <value> </value> - true true @@ -2641,6 +2660,7 @@ Vertical auto + false @@ -2823,6 +2843,7 @@ Vertical auto + false @@ -3374,6 +3395,7 @@ Vertical auto + false @@ -3726,10 +3748,6 @@ ru Квартал I - - ru - - ГруппаКвартал1ExtendedTooltip 781 @@ -3877,10 +3895,6 @@ ru Квартал II - - ru - - ГруппаКвартал2ExtendedTooltip 785 @@ -4028,10 +4042,6 @@ ru Квартал III - - ru - - ГруппаКвартал3ExtendedTooltip 792 @@ -4179,10 +4189,6 @@ ru Квартал IV - - ru - - ГруппаКвартал4ExtendedTooltip 796 @@ -4266,10 +4272,6 @@ true - - <key>ru</key> - <value> </value> - ru Группа пометки @@ -4300,14 +4302,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - ГруппаМесяцыРасширеннаяПодсказка 780 @@ -4394,6 +4388,7 @@ Vertical auto + false @@ -4466,6 +4461,7 @@ Vertical auto + false true @@ -4597,6 +4593,7 @@ Vertical auto + false @@ -4806,6 +4803,7 @@ Page auto + false @@ -4949,6 +4947,7 @@ Page auto + false @@ -5023,14 +5022,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - ИспользоватьFTPРесурсExtendedTooltip 818 @@ -5044,6 +5035,7 @@ Page auto + false true @@ -5432,6 +5424,7 @@ Vertical auto + false @@ -5494,6 +5487,7 @@ Vertical auto + false true @@ -6720,7 +6714,6 @@ 1 true 1 - true true true @@ -6753,6 +6746,7 @@ Vertical auto + false @@ -7470,6 +7464,7 @@ Vertical auto + false true @@ -7621,6 +7616,7 @@ Vertical auto + false @@ -8761,6 +8757,7 @@ Vertical auto + false true @@ -8845,10 +8842,35 @@ ОбщиеКоманды 994 + + КомандаВыполнитьСейчас + 1051 + true + true + + true + + + КомандаВыполнитьСейчасРасширеннаяПодсказка + 1052 + Label + true + true + + Left + + + Form.Command.КомандаВыполнитьСейчас + Normal + Auto + true + true + UserCmds + Auto + ВыполнитьСейчас 996 - true true true @@ -8874,10 +8896,35 @@ UserCmds Auto + + КомандаСобытияРассылки + 1053 + true + true + + true + + + КомандаСобытияРассылкиРасширеннаяПодсказка + 1054 + Label + true + true + + Left + + + Form.Command.КомандаСобытияРассылки + Normal + Auto + true + true + UserCmds + Auto + СобытияРассылки 992 - true true true @@ -11243,6 +11290,58 @@ DontUse Auto + + КомандаВыполнитьСейчас + + <key>ru</key> + <value>Выполнить сейчас</value> + + 1 + + ru + Команда выполнить сейчас + + + true + + + StdPicture.BusinessProcessStart + + + + КомандаВыполнитьСейчас + + + TextPicture + DontUse + Auto + + + КомандаСобытияРассылки + + <key>ru</key> + <value>События рассылки...</value> + + 27 + + ru + Перейти в журнал регистрации с отбором по рассылке + + + true + + + StdPicture.EventLog + + + + КомандаСобытияРассылки + + + TextPicture + DontUse + Auto + diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html index dd8e2d727..af018358b 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

        @@ -13,8 +13,8 @@

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

    Отчеты

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

    Расписание

    • Для автоматической отправки отчетов с некоторым интервалом или в некоторые дни недели на вкладке можно описать, по каким дням, и в какое время программа должна отправлять эту рассылку. На основании каждой рассылки отчетов в программе формируются одноименные регламентные задания "Рассылка отчетов".
      diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl index f9d30685d..b533e71a3 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl @@ -53,6 +53,7 @@ КонецЕсли; Если Не ПравоДоступа("ЖурналРегистрации", Метаданные) Тогда + Элементы.КомандаСобытияРассылки.Видимость = Ложь; Элементы.СобытияРассылки.Видимость = Ложь; КонецЕсли; @@ -305,9 +306,12 @@ &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) - Если ПараметрыЗаписи = Неопределено Или Не ПараметрыЗаписи.Свойство("Шаг") Тогда + Если ПараметрыЗаписи = Неопределено Тогда + ПараметрыЗаписи = Новый Структура; + КонецЕсли; + Если Не ПараметрыЗаписи.Свойство("Шаг") Тогда Отказ = Истина; - ЗаписатьНаКлиенте(Истина, Неопределено); + ЗаписатьНаКлиенте(Неопределено, ПараметрыЗаписи); КонецЕсли; КонецПроцедуры @@ -334,7 +338,7 @@ ОбъектСтрокаОтчеты = ТекущийОбъект.Отчеты.Получить(СтрокаОтчеты.НомерСтроки-1); Если СтрокаОтчеты.ВнесеныИзменения Тогда - // И1], [2] и [3] Чтение неинициализированных настроек. + // [1], [2] и [3] Чтение неинициализированных настроек. ПользовательскиеНастройки = ПолучитьИзВременногоХранилища(СтрокаОтчеты.АдресНастроек); // [1] Запись настроек. @@ -350,7 +354,7 @@ Продолжить; КонецЕсли; - // И2] и [3] Чтение неинициализированных настроек. + // [2] и [3] Чтение неинициализированных настроек. Если ЭтоАдресВременногоХранилища(СтрокаОтчеты.АдресНастроек) Тогда ПользовательскиеНастройки = ПолучитьИзВременногоХранилища(СтрокаОтчеты.АдресНастроек); Иначе @@ -359,7 +363,7 @@ КонецЕсли; - // И2] и [3] Инициализация настроек. + // [2] и [3] Инициализация настроек. ПараметрыОтчета = ИнициализироватьОтчет(СтрокаОтчеты, Истина, ПользовательскиеНастройки, Ложь); НастройкиОтчета = ?(СтрокаОтчеты.СКД, ПараметрыОтчета.КомпоновщикНастроекКД, ПользовательскиеНастройки); @@ -368,7 +372,7 @@ ОтчетПерсонализирован = Ложь; КонецЕсли; - // И2] и [3] Анализ СКД отчетов. + // [2] и [3] Анализ СКД отчетов. Если СтрокаОтчеты.СКД Тогда // [2] Заполнение переменных. ЗаполненыВсеОбязательныеНастройки = Истина; @@ -473,7 +477,7 @@ КонецЕсли; // Все операции с регламентными заданиями размещены в модуле объекта. - Если Кэш.Перечисления.Периодичности[Объект.ПериодичностьРасписания] <> "Произвольное" Тогда + Если Объект.ПериодичностьРасписания <> Перечисления.ПериодичностиРасписанийРассылокОтчетов.Произвольное Тогда Расписание.ВремяКонца = Расписание.ВремяНачала + 600; КонецЕсли; ТекущийОбъект.ДополнительныеСвойства.Вставить("Расписание", Расписание); @@ -513,25 +517,6 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики ожидания -&НаКлиенте -Процедура ОбработчикАктивизацииСтрокиТаблицыОтчеты() - СтрокаОтчеты = Элементы.Отчеты.ТекущиеДанные; - Если СтрокаОтчеты = Неопределено Тогда - Элементы.СтраницыНастроекОтчета.ТекущаяСтраница = Элементы.ПустаяСтраница; - Возврат; - КонецЕсли; - - ИдентификаторСтроки = СтрокаОтчеты.ПолучитьИдентификатор(); - Если ИдентификаторСтроки = ИдентификаторТекущейСтрокиТаблицыОтчетов Тогда - Возврат; - КонецЕсли; - - ТекстПредупреждения = ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторСтроки); - Если ТекстПредупреждения <> "" Тогда - ПоказатьПредупреждение(, ТекстПредупреждения); - КонецЕсли; -КонецПроцедуры - &НаКлиенте Процедура Подключаемый_ПроверитьВыполнениеФоновогоЗадания() РассылкаОтчетовКлиент.ПроверитьВыполнениеФоновогоЗадания(ЭтотОбъект); @@ -578,7 +563,7 @@ &НаКлиенте Процедура ПериодичностьРасписанияПриИзменении(Элемент) ВидимостьДоступностьКорректность(ЭтотОбъект, "ПериодичностьРасписания"); - Если Кэш.Перечисления.Периодичности[Объект.ПериодичностьРасписания] = "Произвольное" Тогда + Если Объект.ПериодичностьРасписания = ПредопределенноеЗначение("Перечисление.ПериодичностиРасписанийРассылокОтчетов.Произвольное") Тогда ИзменитьРасписаниеВДиалоге(); КонецЕсли; КонецПроцедуры @@ -867,9 +852,6 @@ // Инициализация добавленных строк отчетов и заполнение структуры выбора. ПроверитьДобавленныеСтрокиОтчетов(СтруктураВыбора); - // Вывод результатов выбора - Результат = Новый Структура; - Если СтруктураВыбора.СОшибками.Количество > 0 Тогда Если СтруктураВыбора.Выбрано.Количество = 1 Тогда @@ -897,10 +879,11 @@ ПредставлениеОтчетовСОшибками); КонецЕсли; - СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(Результат, - ТекстСообщения, - СтруктураВыбора.СОшибками.Текст, - НСтр("ru = 'Ошибки добавления отчетов в рассылку'")); + ПараметрыПредупреждения = Новый Структура("Заголовок, Текст, Подробно"); + ПараметрыПредупреждения.Заголовок = НСтр("ru = 'Ошибки добавления отчетов в рассылку'"); + ПараметрыПредупреждения.Текст = ТекстСообщения; + ПараметрыПредупреждения.Подробно = СтруктураВыбора.СОшибками.Текст; + СтандартныеПодсистемыКлиент.ВывестиПредупреждение(ЭтотОбъект, ПараметрыПредупреждения); Иначе @@ -916,15 +899,14 @@ ТекстОповещения = СтруктураВыбора.Успешно.ПредставлениеОтчетов; КонецЕсли; - СтандартныеПодсистемыКлиентСервер.ВывестиОповещение(Результат, + ПоказатьОповещениеПользователя( ЗаголовокОповещения, + , ТекстОповещения, - БиблиотекаКартинок.ВыполнитьЗадачу); + БиблиотекаКартинок.Успешно32); КонецЕсли; - СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); - ВидимостьДоступностьКорректность(ЭтотОбъект, "Отчеты"); КонецПроцедуры @@ -933,6 +915,25 @@ ПодключитьОбработчикОжидания("ОбработчикАктивизацииСтрокиТаблицыОтчеты", 0.1, Истина); КонецПроцедуры +&НаКлиенте +Процедура ОбработчикАктивизацииСтрокиТаблицыОтчеты() + СтрокаОтчеты = Элементы.Отчеты.ТекущиеДанные; + Если СтрокаОтчеты = Неопределено Тогда + Элементы.СтраницыНастроекОтчета.ТекущаяСтраница = Элементы.ПустаяСтраница; + Возврат; + КонецЕсли; + + ИдентификаторСтроки = СтрокаОтчеты.ПолучитьИдентификатор(); + Если ИдентификаторСтроки = ИдентификаторТекущейСтрокиТаблицыОтчетов Тогда + Возврат; + КонецЕсли; + + ТекстПредупреждения = ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторСтроки); + Если ТекстПредупреждения <> "" Тогда + ПоказатьПредупреждение(, ТекстПредупреждения); + КонецЕсли; +КонецПроцедуры + &НаКлиенте Процедура ОтчетыПередНачаломИзменения(Элемент, Отказ) Отказ = Истина; @@ -950,10 +951,10 @@ #КонецОбласти -#Область ОбработчикиСобытийЭлементовТаблицыФормыКомпоновщикНастроекПользовательскиеНастройки +#Область ОбработчикиСобытийЭлементовТаблицыФормыПользовательскиеНастройки &НаКлиенте -Процедура КомпоновщикНастроекПользовательскиеНастройкиПриИзменении(Элемент) +Процедура ПользовательскиеНастройкиПриИзменении(Элемент) СтрокаОтчеты = Элементы.Отчеты.ТекущиеДанные; Если СтрокаОтчеты = Неопределено Тогда Возврат; @@ -962,6 +963,48 @@ СтрокаОтчеты.ВнесеныИзменения = Истина; КонецПроцедуры +&НаКлиенте +Процедура ПользовательскиеНастройкиПриАктивизацииСтроки(Элемент) + Если Элементы.СтраницыНастроекОтчета.ТекущаяСтраница <> Элементы.СтраницаКомпоновщик Тогда + Возврат; + КонецЕсли; + Отчет = Элементы.Отчеты.ТекущиеДанные; + Если Отчет = Неопределено Или ТипЗнч(Отчет.Отчет) <> Тип("СправочникСсылка.ВариантыОтчетов") Тогда + Возврат; + КонецЕсли; + ИдентификаторКД = Элементы.ПользовательскиеНастройки.ТекущаяСтрока; + ТолькоПросмотрЗначения = Ложь; + ОтчетыКлиент.ПриАктивизацииСтрокиНастройки(Отчет, КомпоновщикНастроекКД, ИдентификаторКД, ТолькоПросмотрЗначения); + РассылкаОтчетовКлиентПереопределяемый.ПриАктивизацииСтрокиНастройки(Отчет, КомпоновщикНастроекКД, ИдентификаторКД, ТолькоПросмотрЗначения); + Если Элементы.ПользовательскиеНастройкиЗначение.ТолькоПросмотр <> ТолькоПросмотрЗначения Тогда + Элементы.ПользовательскиеНастройкиЗначение.ТолькоПросмотр = ТолькоПросмотрЗначения; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПользовательскиеНастройкиЗначениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + НачалоВыбораПользовательскойНастройки(СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура ПользовательскиеНастройкиЗначениеОчистка(Элемент, СтандартнаяОбработка) + Если Элементы.СтраницыНастроекОтчета.ТекущаяСтраница <> Элементы.СтраницаКомпоновщик Тогда + Возврат; + КонецЕсли; + Отчет = Элементы.Отчеты.ТекущиеДанные; + Если Отчет = Неопределено Или ТипЗнч(Отчет.Отчет) <> Тип("СправочникСсылка.ВариантыОтчетов") Тогда + Возврат; + КонецЕсли; + ИдентификаторКД = Элементы.ПользовательскиеНастройки.ТекущаяСтрока; + ОтчетыКлиент.ПриОчисткеНастройки(Отчет, КомпоновщикНастроекКД, ИдентификаторКД, СтандартнаяОбработка); + РассылкаОтчетовКлиентПереопределяемый.ПриОчисткеНастройки(Отчет, КомпоновщикНастроекКД, ИдентификаторКД, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура ПользовательскиеНастройкиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + НачалоВыбораПользовательскойНастройки(СтандартнаяОбработка); +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыНастройкиТекущегоОтчета @@ -1055,7 +1098,9 @@ &НаКлиенте Процедура КомандаЗаписатьИЗакрыть(Команда) - ЗаписатьНаКлиенте(Истина, Неопределено); + ПараметрыЗаписи = Новый Структура; + ПараметрыЗаписи.Вставить("ИмяКоманды", "КомандаЗаписатьИЗакрыть"); + ЗаписатьНаКлиенте(Неопределено, ПараметрыЗаписи); КонецПроцедуры &НаКлиенте @@ -1079,10 +1124,29 @@ ОткрытьФорму("Справочник.РассылкиОтчетов.Форма.ПолучателиРассылки", ПараметрыФормы, , , , , Обработчик); КонецПроцедуры - &НаКлиенте Процедура КомандаЗаписать(Команда) - ЗаписатьНаКлиенте(Ложь, Неопределено); + ПараметрыЗаписи = Новый Структура; + ПараметрыЗаписи.Вставить("ИмяКоманды", "КомандаЗаписать"); + ЗаписатьНаКлиенте(Неопределено, ПараметрыЗаписи); +КонецПроцедуры + +&НаКлиенте +Процедура КомандаВыполнитьСейчас(Команда) + Если Не Объект.Подготовлена Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Рассылка не подготовлена'")); + Возврат; + КонецЕсли; + ПараметрыЗаписи = Новый Структура; + ПараметрыЗаписи.Вставить("ИмяКоманды", "КомандаВыполнитьСейчас"); + ЗаписатьНаКлиенте(Неопределено, ПараметрыЗаписи); +КонецПроцедуры + +&НаКлиенте +Процедура КомандаСобытияРассылки(Команда) + ПараметрыЗаписи = Новый Структура; + ПараметрыЗаписи.Вставить("ИмяКоманды", "КомандаСобытияРассылки"); + ЗаписатьНаКлиенте(Неопределено, ПараметрыЗаписи); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -1240,7 +1304,7 @@ КонецЕсли; Если СКД Тогда - Инициатор = Элементы.КомпоновщикНастроекПользовательскиеНастройки; + Инициатор = Элементы.ПользовательскиеНастройки; Иначе Инициатор = Элементы.НастройкиТекущегоОтчета; КонецЕсли; @@ -1670,7 +1734,36 @@ #Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// -// Обработчики асинхронных диалогов. +// Клиент. + +&НаКлиенте +Процедура НачалоВыбораПользовательскойНастройки(СтандартнаяОбработка) + Если Элементы.СтраницыНастроекОтчета.ТекущаяСтраница <> Элементы.СтраницаКомпоновщик Тогда + Возврат; + КонецЕсли; + Отчет = Элементы.Отчеты.ТекущиеДанные; + Если Отчет = Неопределено Или ТипЗнч(Отчет.Отчет) <> Тип("СправочникСсылка.ВариантыОтчетов") Тогда + Возврат; + КонецЕсли; + ИдентификаторКД = Элементы.ПользовательскиеНастройки.ТекущаяСтрока; + Обработчик = Новый ОписаниеОповещения("ЗавершениеВыбораПользовательскойНастройки", ЭтотОбъект); + ОтчетыКлиент.ПриНачалеВыбораНастройки(Отчет, КомпоновщикНастроекКД, ИдентификаторКД, СтандартнаяОбработка, Обработчик); + РассылкаОтчетовКлиентПереопределяемый.ПриНачалеВыбораНастройки(Отчет, КомпоновщикНастроекКД, ИдентификаторКД, СтандартнаяОбработка, Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура ЗавершениеВыбораПользовательскойНастройки(Результат, ПараметрыВыполнения) Экспорт + Если ТипЗнч(Результат) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда + КомпоновщикНастроекКД.ЗагрузитьПользовательскиеНастройки(Результат); + Иначе + Возврат; + КонецЕсли; + Отчет = Элементы.Отчеты.ТекущиеДанные; + Если Отчет = Неопределено Или ТипЗнч(Отчет.Отчет) <> Тип("СправочникСсылка.ВариантыОтчетов") Тогда + Возврат; + КонецЕсли; + Отчет.ВнесеныИзменения = Истина; +КонецПроцедуры &НаКлиенте Процедура ПолучателиРассылкиНажатиеЗавершение(Результат, Параметр) Экспорт @@ -1798,9 +1891,8 @@ ПараметрыДоставки.Вставить("ДобавлятьСсылки", ""); - Результат = ПроверитьСпособДоставки(Объект.Ссылка, ПараметрыДоставки); - - СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); + РезультатВыполнения = ПроверитьСпособДоставки(Объект.Ссылка, ПараметрыДоставки); + СтандартныеПодсистемыКлиент.ВывестиПредупреждение(ЭтотОбъект, РезультатВыполнения); КонецПроцедуры @@ -2313,7 +2405,16 @@ КонецЕсли; Если Изменения = "" Или Изменения = "ПериодичностьРасписания" Тогда - ИмяПеречисления = Форма.Кэш.Перечисления.Периодичности[Объект.ПериодичностьРасписания]; + + Если Объект.ПериодичностьРасписания = ПредопределенноеЗначение("Перечисление.ПериодичностиРасписанийРассылокОтчетов.Ежедневно") Тогда + ИмяПеречисления = "Ежедневно"; + ИначеЕсли Объект.ПериодичностьРасписания = ПредопределенноеЗначение("Перечисление.ПериодичностиРасписанийРассылокОтчетов.Ежемесячно") Тогда + ИмяПеречисления = "Ежемесячно"; + ИначеЕсли Объект.ПериодичностьРасписания = ПредопределенноеЗначение("Перечисление.ПериодичностиРасписанийРассылокОтчетов.Еженедельно") Тогда + ИмяПеречисления = "Еженедельно"; + Иначе + ИмяПеречисления = "Произвольное"; + КонецЕсли; Элементы.СтраницыПериодичности.ТекущаяСтраница = Элементы["Страница"+ИмяПеречисления]; Если ИмяПеречисления = "Произвольное" Тогда @@ -2662,7 +2763,7 @@ // * МассивСтрок - Массив. // * Количество - Число // * ПредставлениеОтчетов - Строка. - // * Текст - Строка + // * Текст - Строка. МассивОшибок = Новый Массив; @@ -2744,34 +2845,23 @@ Вложения.Вставить(Файл.Имя, Файл.ПолноеИмя); // Доставка - Если ПараметрыДоставки.ИспользоватьПапку Тогда - НачатьТранзакцию(); - КонецЕсли; - Выполнена = РассылкаОтчетов.ВыполнитьДоставку(ПараметрыЖурнала, ПараметрыДоставки, Вложения); - Если ПараметрыДоставки.ИспользоватьПапку Тогда - ОтменитьТранзакцию(); - КонецЕсли; - // Очистка вложений Для Каждого Вложение Из Вложения Цикл УдалитьФайлы(Вложение.Значение); КонецЦикла; + РезультатВыполнения = Новый Структура("Текст, Подробно"); + Если Выполнена Тогда - ТекстСообщения = НСтр("ru = 'Тест способа доставки успешно пройден.'"); + РезультатВыполнения.Текст = НСтр("ru = 'Тест способа доставки успешно пройден.'"); Иначе - ТекстСообщения = НСтр("ru = 'Тест способа доставки не пройден.'"); + РезультатВыполнения.Текст = НСтр("ru = 'Тест способа доставки не пройден.'"); + РезультатВыполнения.Подробно = РассылкаОтчетовКлиентСервер.СтрокаСообщенийПользователю(ПараметрыЖурнала.МассивОшибок, Ложь); КонецЕсли; - Результат = Новый Структура; - - СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(Результат, - ТекстСообщения, - РассылкаОтчетовКлиентСервер.СтрокаСообщенийПользователю(ПараметрыЖурнала.МассивОшибок)); - - Возврат Результат; + Возврат РезультатВыполнения; КонецФункции //////////////////////////////////////////////////////////////////////////////// @@ -2815,33 +2905,22 @@ Месяцы.Вставить("Декабрь", 12); Месяцы = Новый ФиксированноеСоответствие(Месяцы); - // - Периодичности = Новый Соответствие; - Периодичности.Вставить(Перечисления.ПериодичностиРасписанийРассылокОтчетов.ПустаяСсылка(), "НеВыбрано"); - Для Каждого ОбъектМД Из Метаданные.Перечисления.ПериодичностиРасписанийРассылокОтчетов.ЗначенияПеречисления Цикл - Периодичности.Вставить(Перечисления.ПериодичностиРасписанийРассылокОтчетов[ОбъектМД.Имя], ОбъектМД.Имя); - КонецЦикла; - Периодичности = Новый ФиксированноеСоответствие(Периодичности); - - // + // Умолчания для полей, поддерживающих шаблоны заполнения. Шаблоны = Новый ФиксированнаяСтруктура("Тема, Текст, ИмяАрхива", РассылкаОтчетовКлиентСервер.ШаблонТемы(), РассылкаОтчетовКлиентСервер.ШаблонТекста(), РассылкаОтчетовКлиентСервер.ШаблонИмениАрхива()); - // + // Структура кэша. Кэш = Новый Структура; Кэш.Вставить("ПустоеЗначениеОтчета", РассылкаОтчетовПовтИсп.ПустоеЗначениеОтчета()); Кэш.Вставить("ГруппаЛичныхРассылок", Справочники.РассылкиОтчетов.ЛичныеРассылки); Кэш.Вставить("ЗаголовокСистемы", РассылкаОтчетовПовтИсп.ИмяЭтойИнформационнойБазы()); Кэш.Вставить("Соответствия", Новый ФиксированнаяСтруктура("ДниНедели, Месяцы", ДниНедели, Месяцы)); - Кэш.Вставить("Перечисления", Новый ФиксированнаяСтруктура("Периодичности", Периодичности)); Кэш.Вставить("Шаблоны", Шаблоны); Кэш.Вставить("ИсключаемыеОтчеты", РассылкаОтчетовПовтИсп.ИсключаемыеОтчеты()); - Кэш = Новый ФиксированнаяСтруктура(Кэш); - // - Возврат Кэш; + Возврат Новый ФиксированнаяСтруктура(Кэш); КонецФункции &НаСервере @@ -2869,7 +2948,7 @@ Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания); Если Задание <> Неопределено Тогда Расписание = Задание.Расписание; - Если Кэш.Перечисления.Периодичности[Объект.ПериодичностьРасписания] <> "Произвольное" Тогда + Если Объект.ПериодичностьРасписания <> Перечисления.ПериодичностиРасписанийРассылокОтчетов.Произвольное Тогда Расписание.ВремяКонца = '00010101'; КонецЕсли; КонецЕсли; @@ -2973,10 +3052,17 @@ ПараметрыОтчета.Вставить("МассивОшибок", ПараметрыЖурнала.МассивОшибок); ПараметрыОтчета.Ошибки = РассылкаОтчетовКлиентСервер.СтрокаСообщенийПользователю(ПараметрыОтчета.МассивОшибок, ДобавитьДежурнуюФразу); - СтрокаОтчеты.СКД = ПараметрыОтчета.СКД; - СтрокаОтчеты.Инициализирован = ПараметрыОтчета.Инициализирован; - СтрокаОтчеты.ПолноеИмя = ПараметрыОтчета.ПолноеИмя; - СтрокаОтчеты.КлючВарианта = ПараметрыОтчета.КлючВарианта; + Если ПараметрыОтчета.Инициализирован Тогда + СтрокаОтчеты.СКД = ПараметрыОтчета.СКД; + СтрокаОтчеты.Инициализирован = ПараметрыОтчета.Инициализирован; + СтрокаОтчеты.ПолноеИмя = ПараметрыОтчета.ПолноеИмя; + СтрокаОтчеты.КлючВарианта = ПараметрыОтчета.КлючВарианта; + // Поддержка возможности прямого выбора ссылок дополнительных отчетов в рассылках отчетов. + Если ЗначениеЗаполнено(ПараметрыОтчета.СсылкаВарианта) Тогда + СтрокаОтчеты.Отчет = ПараметрыОтчета.СсылкаВарианта; + СтрокаОтчеты.Представление = Строка(СтрокаОтчеты.Отчет); + КонецЕсли; + КонецЕсли; Если Не Интерактивно Тогда Возврат ПараметрыОтчета; @@ -3106,12 +3192,8 @@ &НаКлиенте Процедура ЗаписатьНаКлиенте(Результат, ПараметрыЗаписи) Экспорт // Инициализация параметров. - Если ПараметрыЗаписи = Неопределено Тогда - ПараметрыЗаписи = Новый Структура; - КонецЕсли; Если Не ПараметрыЗаписи.Свойство("Шаг") Тогда ОчиститьСообщения(); // Очистка окна сообщений. - ПараметрыЗаписи.Вставить("ЗакрытьПослеЗаписи", Результат); ПараметрыЗаписи.Вставить("Шаг", 1); КонецЕсли; @@ -3167,8 +3249,16 @@ Если ПараметрыЗаписи.Шаг = 5 Тогда ПараметрыЗаписи.Шаг = 6; Успешно = Записать(ПараметрыЗаписи); - Если Успешно И ПараметрыЗаписи.Свойство("ЗакрытьПослеЗаписи") И ПараметрыЗаписи.ЗакрытьПослеЗаписи Тогда + Если Не Успешно Тогда + Возврат; // Отменить запись. + КонецЕсли; + ИмяКоманды = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаписи, "ИмяКоманды"); + Если ИмяКоманды = "КомандаВыполнитьСейчас" Тогда + ВыполнитьСейчас(); + ИначеЕсли ИмяКоманды = "КомандаЗаписатьИЗакрыть" Тогда Закрыть(); + ИначеЕсли ИмяКоманды = "КомандаСобытияРассылки" Тогда + СобытияРассылки(); КонецЕсли; КонецЕсли; КонецПроцедуры @@ -3240,4 +3330,141 @@ ЗначенияРеквизитовДоИзменения = Новый ФиксированнаяСтруктура(ЗначенияРеквизитовДоИзменения); КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Копия команды "Выполнить сейчас" для поддержки асинхронности. + +&НаКлиенте +Процедура ВыполнитьСейчас() + МассивРассылок = Новый Массив; + МассивРассылок.Добавить(Объект.Ссылка); + + ДополнительныеПараметры = Новый Структура("МассивРассылок, Форма, ЭтоФормаЭлемента"); + ДополнительныеПараметры.МассивРассылок = МассивРассылок; + ДополнительныеПараметры.Форма = ЭтотОбъект; + ДополнительныеПараметры.ЭтоФормаЭлемента = Истина; + Обработчик = Новый ОписаниеОповещения("ВыполнитьСейчасЗавершение", ЭтотОбъект, ДополнительныеПараметры); + Если Объект.ИспользоватьЭлектроннуюПочту Тогда + РассылкаОтчетовКлиент.ВыбратьПолучателя(Обработчик, Объект, Истина, Истина); + Иначе + ВыполнитьОбработкуОповещения(Обработчик, Неопределено); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьСейчасЗавершение(Получатели, ДополнительныеПараметры) Экспорт + // Обработчик результата работы процедуры ВыполнитьСейчас. + + Форма = ДополнительныеПараметры.Форма; + + ПредварительныеНастройки = Неопределено; + + Если ДополнительныеПараметры.ЭтоФормаЭлемента Тогда + Если Форма.Объект.ИспользоватьЭлектроннуюПочту Тогда + Если Получатели = Неопределено Тогда + Возврат; + КонецЕсли; + ПредварительныеНастройки = Новый Структура("Получатели", Получатели); + КонецЕсли; + ТекстСостояния = НСтр("ru = 'Выполняется рассылка отчетов'"); + Иначе + ТекстСостояния = НСтр("ru = 'Выполняются рассылки отчетов'"); + КонецЕсли; + + Состояние(ТекстСостояния, , , ); + + ПараметрыВызоваСервера = Новый Структура; + ПараметрыВызоваСервера.Вставить("МассивРассылок", ДополнительныеПараметры.МассивРассылок); + ПараметрыВызоваСервера.Вставить("ПредварительныеНастройки", ПредварительныеНастройки); + + Результат = ВыполнитьРассылкиВФоновомЗадании(ПараметрыВызоваСервера, Форма.УникальныйИдентификатор); + + Если Результат.Статус = "ВыполненоУспешно" Тогда + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(Форма, Результат.Детали); + ИначеЕсли Результат.Статус = "Исключение" Тогда + ТекстПредупреждения = НСтр("ru = 'Не удалось выполнить рассылку отчетов. + |Подробности см. в журнале регистрации.'"); + ПоказатьПредупреждение(, ТекстПредупреждения); + ИначеЕсли Результат.Статус = "Выполняется" Тогда + ФормаДлительнойОперации = ДлительныеОперацииКлиент.ОткрытьФормуДлительнойОперации(Форма, Результат.Детали.ИдентификаторЗадания); + + ПараметрыОбработчика = Неопределено; + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчика); + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчика); + + Форма.ПараметрыФоновогоЗадания.Очистить(); + Форма.ПараметрыФоновогоЗадания.Добавить(Результат.Детали.ИдентификаторЗадания); + Форма.ПараметрыФоновогоЗадания.Добавить(Результат.Детали.АдресХранилища); + Форма.ПараметрыФоновогоЗадания.Добавить(ПараметрыОбработчика); + Форма.ПараметрыФоновогоЗадания.Добавить(ФормаДлительнойОперации); + + Форма.ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеФоновогоЗадания", ПараметрыОбработчика.ТекущийИнтервал, Истина); + КонецЕсли; +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ВыполнитьРассылкиВФоновомЗадании(ПараметрыВызоваСервера, Знач УникальныйИдентификатор) + // Запускает выполнение рассылок отчетов в фоновом задании. + + Результат = Новый Структура("Статус, Детали"); + + Попытка + РезультатФоновогоЗадания = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификатор, + "РассылкаОтчетов.ВыполнитьРассылкиВФоновомЗадании", + ПараметрыВызоваСервера, + НСтр("ru = 'Рассылки отчетов: Выполнение рассылок в фоне'")); + + Если РезультатФоновогоЗадания.ЗаданиеВыполнено Тогда + Результат.Статус = "ВыполненоУспешно"; // Не локализуется + Результат.Детали = ПолучитьИзВременногоХранилища(РезультатФоновогоЗадания.АдресХранилища); + Иначе + Результат.Статус = "Выполняется"; // Не локализуется + Результат.Детали = Новый Структура("ИдентификаторЗадания, АдресХранилища"); + ЗаполнитьЗначенияСвойств(Результат.Детали, РезультатФоновогоЗадания); + КонецЕсли; + Исключение + Результат.Статус = "Исключение"; // Не локализуется + КонецПопытки; + + Возврат Результат; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Копия команды "События рассылки..." для поддержки асинхронности. + +&НаКлиенте +Процедура СобытияРассылки() + // Получение даты последнего запуска. + Рассылка = Объект.Ссылка; + ПоследнийЗапуск = ПоследнийЗапускРассылки(Рассылка); + + // Параметры формы + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Данные", Рассылка); + Если ПоследнийЗапуск <> Неопределено Тогда + ПараметрыФормы.Вставить("ДатаНачала", ПоследнийЗапуск); + КонецЕсли; + + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", ПараметрыФормы, ЭтотОбъект); +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ПоследнийЗапускРассылки(Рассылка) + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Состояния.ПоследнийЗапуск + |ИЗ + | РегистрСведений.СостоянияРассылокОтчетов КАК Состояния + |ГДЕ + | Состояния.Рассылка = &Рассылка"; + Запрос.УстановитьПараметр("Рассылка", Рассылка); + + УстановитьПривилегированныйРежим(Истина); + Выборка = Запрос.Выполнить().Выбрать(); + УстановитьПривилегированныйРежим(Истина); + Результат = ?(Выборка.Следующий(), Выборка.ПоследнийЗапуск, Неопределено); + Возврат Результат; +КонецФункции + #КонецОбласти diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html index 43cab430f..f5783f844 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 52d290823..3ae489d6a 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/ManagerModule.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/ManagerModule.bsl @@ -2,7 +2,11 @@ #Область ПрограммныйИнтерфейс -// Реквизиты, которые запрещается изменять сразу для нескольких объектов. +// Возвращает реквизиты объекта, которые не рекомендуется редактировать +// с помощью обработки группового изменения реквизитов. +// +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl b/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl index 20515c608..0da1664b8 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl @@ -82,8 +82,9 @@ Если Задание <> Неопределено Тогда ЗаданиеИзменено = Ложь; - Если Задание.Использование <> ВыполнятьПоРасписанию Тогда - Задание.Использование = ВыполнятьПоРасписанию; + ВключитьЗадание = ВыполнятьПоРасписанию И Подготовлена; + Если Задание.Использование <> ВключитьЗадание Тогда + Задание.Использование = ВключитьЗадание; ЗаданиеИзменено = Истина; КонецЕсли; diff --git a/SSL/src/Catalogs/РассылкиОтчетов/РассылкиОтчетов.mdo b/SSL/src/Catalogs/РассылкиОтчетов/РассылкиОтчетов.mdo index dfad42654..9336480c0 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/РассылкиОтчетов.mdo +++ b/SSL/src/Catalogs/РассылкиОтчетов/РассылкиОтчетов.mdo @@ -552,7 +552,7 @@ ru - Если флажок установлен, то рассыла работает в режиме "Свой отчет для каждого получателя". + Если флажок установлен, то рассылка работает в режиме "Свой отчет для каждого получателя". diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Help/ru.html b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Help/ru.html index a5b74474d..89f42bdee 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/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss index d7cf28261..61e6fb4bb 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -9,30 +9,6 @@ 88619765-ccb3-46c6-ac52-38e9c992ebd4 - - - - - AndGroup - - ЕстьИсполнители - Equal - false - - - ВнешняяРоль - Equal - false - - - - - - ЦветТекста - style:РольБезИсполнителей - - - Normal b75fecce-942b-4aed-abc9-e6a02e460fb3 diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Form.form index 2e5acf4c6..2fa1348b3 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Form.form @@ -534,6 +534,14 @@ Left true + + NotificationProcessing + ОбработкаОповещения + + + OnCreateAtServer + ПриСозданииНаСервере + DontBlock true true @@ -588,7 +596,11 @@ СправочникРолиИсполнителей.ВнешняяРоль, СправочникРолиИсполнителей.КраткоеПредставление ИЗ - Справочник.РолиИсполнителей КАК СправочникРолиИсполнителей + Справочник.РолиИсполнителей.Назначение КАК РолиИсполнителейНазначение + ЛЕВОЕ СОЕДИНЕНИЕ Справочник.РолиИсполнителей КАК СправочникРолиИсполнителей + ПО РолиИсполнителейНазначение.Ссылка = СправочникРолиИсполнителей.Ссылка +ГДЕ + РолиИсполнителейНазначение.ТипПользователей = Значение(Справочник.Пользователи.ПустаяСсылка) Catalog.РолиИсполнителей true true diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..680481d6e --- /dev/null +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,118 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + НастроитьОтображениеСпискаРолей(); +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + Если ИмяСобытия = "Запись_НаборКонстант" И Источник = "ИспользоватьВнешнихПользователей" Тогда + НастроитьОтображениеСпискаРолей(); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура НастроитьОтображениеСпискаРолей() + + Если ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей") Тогда + ТекстЗапроса = "ВЫБРАТЬ + | СправочникРолиИсполнителей.Ссылка, + | СправочникРолиИсполнителей.ПометкаУдаления, + | СправочникРолиИсполнителей.Предопределенный, + | СправочникРолиИсполнителей.Код, + | СправочникРолиИсполнителей.Наименование, + | СправочникРолиИсполнителей.ИспользуетсяБезОбъектовАдресации, + | СправочникРолиИсполнителей.ИспользуетсяСОбъектамиАдресации, + | СправочникРолиИсполнителей.ТипыОсновногоОбъектаАдресации, + | СправочникРолиИсполнителей.ТипыДополнительногоОбъектаАдресации, + | СправочникРолиИсполнителей.Комментарий, + | ВЫБОР + | КОГДА СправочникРолиИсполнителей.ИспользуетсяСОбъектамиАдресации + | ТОГДА ИСТИНА + | КОГДА СправочникРолиИсполнителей.Ссылка В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | РегистрСведений.ИсполнителиЗадач.РольИсполнителя.Ссылка + | ИЗ + | РегистрСведений.ИсполнителиЗадач + | ГДЕ + | РегистрСведений.ИсполнителиЗадач.РольИсполнителя = СправочникРолиИсполнителей.Ссылка) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ЕстьИсполнители, + | СправочникРолиИсполнителей.ВнешняяРоль, + | СправочникРолиИсполнителей.КраткоеПредставление + |ИЗ + | Справочник.РолиИсполнителей КАК СправочникРолиИсполнителей"; + Иначе + ТекстЗапроса = "ВЫБРАТЬ + | СправочникРолиИсполнителей.Ссылка, + | СправочникРолиИсполнителей.ПометкаУдаления, + | СправочникРолиИсполнителей.Предопределенный, + | СправочникРолиИсполнителей.Код, + | СправочникРолиИсполнителей.Наименование, + | СправочникРолиИсполнителей.ИспользуетсяБезОбъектовАдресации, + | СправочникРолиИсполнителей.ИспользуетсяСОбъектамиАдресации, + | СправочникРолиИсполнителей.ТипыОсновногоОбъектаАдресации, + | СправочникРолиИсполнителей.ТипыДополнительногоОбъектаАдресации, + | СправочникРолиИсполнителей.Комментарий, + | ВЫБОР + | КОГДА СправочникРолиИсполнителей.ИспользуетсяСОбъектамиАдресации + | ТОГДА ИСТИНА + | КОГДА СправочникРолиИсполнителей.Ссылка В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | РегистрСведений.ИсполнителиЗадач.РольИсполнителя.Ссылка + | ИЗ + | РегистрСведений.ИсполнителиЗадач + | ГДЕ + | РегистрСведений.ИсполнителиЗадач.РольИсполнителя = СправочникРолиИсполнителей.Ссылка) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ЕстьИсполнители, + | СправочникРолиИсполнителей.ВнешняяРоль, + | СправочникРолиИсполнителей.КраткоеПредставление + |ИЗ + | Справочник.РолиИсполнителей.Назначение КАК РолиИсполнителейНазначение + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.РолиИсполнителей КАК СправочникРолиИсполнителей + | ПО РолиИсполнителейНазначение.Ссылка = СправочникРолиИсполнителей.Ссылка + |ГДЕ + | РолиИсполнителейНазначение.ТипПользователей = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)"; + КонецЕсли; + + Список.ТекстЗапроса = ТекстЗапроса; + КонецПроцедуры + +&НаСервере +Процедура УстановитьУсловноеОформление() + + Список.УсловноеОформление.Элементы.Очистить(); + Элемент = Список.УсловноеОформление.Элементы.Добавить(); + + ГруппаЭлементовОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппаЭлементовОтбора .ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ; + + ОтборЭлемента = ГруппаЭлементовОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЕстьИсполнители"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + ОтборЭлемента = ГруппаЭлементовОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВнешняяРоль"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.РольБезИсполнителей); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Form.form index f5bcdcc04..85135ab9b 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Form.form @@ -726,5 +726,10 @@ - + + + AfterWrite + ПослеЗаписи + + diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Help/ru.html index 968daf8f4..f4437a9f2 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 5edd6889b..21faf145a 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Module.bsl @@ -17,6 +17,11 @@ КонецПроцедуры +&НаКлиенте +Процедура ПослеЗаписи(ПараметрыЗаписи) + Оповестить("Запись_РолеваяАдресация", ПараметрыЗаписи, Объект.Ссылка); +КонецПроцедуры + &НаКлиенте Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.ВыборУзловПлановОбмена") Тогда @@ -64,7 +69,7 @@ &НаКлиенте Процедура ВыбратьНазначение(Команда) ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораНазначения", ЭтотОбъект); - ПользователиСлужебныйКлиент.ВыбратьНазначение(ЭтотОбъект, Нстр("ru = 'Выбор назначения роли'"),,, ОписаниеОповещения); + ПользователиСлужебныйКлиент.ВыбратьНазначение(ЭтотОбъект, НСтр("ru = 'Выбор назначения роли'"),,, ОписаниеОповещения); КонецПроцедуры #КонецОбласти @@ -100,4 +105,5 @@ КонецЕсли; КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Catalogs/РолиИсполнителей/Help/ru.html b/SSL/src/Catalogs/РолиИсполнителей/Help/ru.html index c4026fb9b..173f18469 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Help/ru.html +++ b/SSL/src/Catalogs/РолиИсполнителей/Help/ru.html @@ -1,4 +1,4 @@ - +

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

      Открывается по команде Роли исполнителей в разделе Бизнес-процессы и задачи.

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

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

      Пример использования ролей

      - +
      Роль исполнителя
      diff --git a/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl b/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl index b7df6d5c2..4cc5a78a1 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/ManagerModule.bsl @@ -5,9 +5,11 @@ //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. -// Возвращает список реквизитов, которые не нужно редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые не рекомендуется редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl b/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl index 99fa3233a..ac29c4fe3 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl @@ -39,7 +39,7 @@ Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей") Тогда Если ЭтотОбъект.Назначение.Найти(Справочники.Пользователи.ПустаяСсылка(), "ТипПользователей") = Неопределено Тогда - // При отключенных внешних пользователях, роль всегда должна быть назначена пользователям." + // При отключенных внешних пользователях, роль всегда должна быть назначена пользователям.". ЭтотОбъект.Назначение.Добавить().ТипПользователей = Справочники.Пользователи.ПустаяСсылка(); КонецЕсли; КонецЕсли; diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Form.form index a35d9d628..5904c8c48 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Form.form @@ -921,6 +921,7 @@ Vertical auto + false @@ -1683,6 +1684,7 @@ Vertical auto + false @@ -1755,6 +1757,7 @@ Vertical auto + false @@ -1825,6 +1828,7 @@ Vertical auto + false true @@ -2222,6 +2226,7 @@ Vertical auto + false true diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Module.bsl index e87e88a5b..f7b327148 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ВыборСертификатаДляПодписанияИлиРасшифровки/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ВнутренниеДанные, СвойстваПароля; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -678,7 +682,7 @@ Иначе Результат.Вставить("ЗаголовокОшибки", НСтр("ru = 'Не удалось пройти проверку подписания по причине:'")); КонецЕсли; - ВыполнитьОбработкуОповещения(Параметры.Оповещение, Результат); + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); Возврат; КонецЕсли; diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификата/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификата/Form.form index ac097441a..e21422633 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификата/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификата/Form.form @@ -88,6 +88,7 @@ Vertical auto + false @@ -171,6 +172,7 @@ Vertical auto + false @@ -350,6 +352,7 @@ Page auto + false @@ -529,6 +532,7 @@ Page auto + false true diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Form.form index c9d2a9eb3..e4caab57c 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ДобавлениеСертификатаДляШифрования/Form.form @@ -922,6 +922,7 @@ Vertical auto + false @@ -1556,6 +1557,7 @@ Vertical auto + false true diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Form.form index 0bbdb8679..58adfe424 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Form.form @@ -69,6 +69,7 @@ Vertical auto + false @@ -134,6 +135,7 @@ Vertical auto + false @@ -199,6 +201,7 @@ Vertical auto + false @@ -264,6 +267,7 @@ Vertical auto + false @@ -329,6 +333,7 @@ Vertical auto + false @@ -394,6 +399,7 @@ Vertical auto + false @@ -459,6 +465,7 @@ Vertical auto + false @@ -524,6 +531,7 @@ Vertical auto + false true @@ -946,7 +954,6 @@ 50true10 - truetruetrue @@ -1013,6 +1020,7 @@ Vertical auto + false @@ -1095,6 +1103,10 @@ НаименованиеСокращенное + + OnChange + РеквизитПриИзменении + НаименованиеСокращенноеРасширеннаяПодсказка 57 @@ -1138,6 +1150,10 @@ НаименованиеПолное + + OnChange + РеквизитПриИзменении + НаименованиеПолноеРасширеннаяПодсказка 60 @@ -1190,6 +1206,10 @@ ИНН + + OnChange + РеквизитПриИзменении + ИННРасширеннаяПодсказка 63 @@ -1233,6 +1253,10 @@ КПП + + OnChange + РеквизитПриИзменении + КППРасширеннаяПодсказка 66 @@ -1309,6 +1333,10 @@ Основной расчетный счет для заполнения реквизитов стандартного договора. Button + + OnChange + РеквизитПриИзменении + РасчетныйСчетРасширеннаяПодсказка 519 @@ -1350,6 +1378,10 @@ КорреспондентскийСчет + + OnChange + РеквизитПриИзменении + КорреспондентскийСчетРасширеннаяПодсказка 525 @@ -1423,6 +1455,10 @@ ОГРН + + OnChange + РеквизитПриИзменении + ОГРНРасширеннаяПодсказка 69 @@ -1471,6 +1507,10 @@ БИК + + OnChange + РеквизитПриИзменении + БИКРасширеннаяПодсказка 522 @@ -2024,6 +2064,7 @@ Vertical auto + false @@ -2176,6 +2217,10 @@ Должность + + OnChange + РеквизитПриИзменении + ДолжностьРасширеннаяПодсказка 97 @@ -2320,6 +2365,10 @@ фактический адрес которого отличается от фактического адреса организации. Button + + OnChange + РеквизитПриИзменении + ПодразделениеРасширеннаяПодсказка 100 @@ -2423,6 +2472,10 @@ Фамилия + + OnChange + РеквизитПриИзменении + ФамилияРасширеннаяПодсказка 85 @@ -2467,6 +2520,10 @@ Имя + + OnChange + РеквизитПриИзменении + ИмяРасширеннаяПодсказка 88 @@ -2511,6 +2568,10 @@ Отчество + + OnChange + РеквизитПриИзменении + ОтчествоРасширеннаяПодсказка 91 @@ -2726,6 +2787,10 @@ МестоРождения + + OnChange + РеквизитПриИзменении + МестоРожденияРасширеннаяПодсказка 665 @@ -3038,6 +3103,10 @@ ДокументКемВыдан + + OnChange + РеквизитПриИзменении + ДокументКемВыданРасширеннаяПодсказка 120 @@ -3268,6 +3337,10 @@ ЭлектроннаяПочта + + OnChange + РеквизитПриИзменении + ЭлектроннаяПочтаРасширеннаяПодсказка 539 @@ -3383,6 +3456,7 @@ Vertical auto + false @@ -3905,6 +3979,7 @@ Vertical auto + false @@ -4363,6 +4438,10 @@ ДокументыРуководительДолжность + + OnChange + РеквизитПриИзменении + ДокументыРуководительДолжностьРасширеннаяПодсказка 322 @@ -4439,6 +4518,10 @@ ДокументыРуководительОснование + + OnChange + РеквизитПриИзменении + ДокументыРуководительОснованиеРасширеннаяПодсказка 548 @@ -4904,6 +4987,10 @@ ДокументыПартнерИНН + + OnChange + РеквизитПриИзменении + ДокументыПартнерИННРасширеннаяПодсказка 337 @@ -4950,6 +5037,10 @@ ДокументыПартнерКПП + + OnChange + РеквизитПриИзменении + ДокументыПартнерКППРасширеннаяПодсказка 340 @@ -5227,6 +5318,7 @@ Vertical auto + false @@ -5578,6 +5670,7 @@ Vertical auto + false @@ -6094,6 +6187,7 @@ Vertical auto + false @@ -6476,6 +6570,7 @@ Vertical auto + false true diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Help/ru.html b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Help/ru.html index 64487f205..de8dbe8dd 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Help/ru.html +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Help/ru.html @@ -1,4 +1,4 @@ - +

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

      Соглашение

      • На странице прочтите соглашение о присоединении к регламенту удостоверяющего центра (УЦ). По гиперссылке можно перейти к просмотру информации об УЦ. diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Module.bsl index b3807b794..3ba47a0cb 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ЗаявлениеНаВыпускНовогоКвалифицированногоСертификата/Module.bsl @@ -1,8 +1,12 @@ -#Область ОбработчикиСобытийФормы +#Область ОписаниеПеременных &НаКлиенте Перем Криптография, РаботаСДвоичнымиДанными; +#КонецОбласти + +#Область ОбработчикиСобытийФормы + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -110,6 +114,13 @@ КонецПроцедуры +&НаКлиенте +Процедура РеквизитПриИзменении(Элемент) + + ЭтотОбъект[Элемент.Имя] = СокрЛП(ЭтотОбъект[Элемент.Имя]); + +КонецПроцедуры + // Реквизиты организации. &НаКлиенте @@ -380,6 +391,8 @@ ДокументыРуководительСсылка = Неопределено; Элементы.ДокументыРуководитель.КнопкаОткрытия = Неопределено; + ДокументыРуководитель = СокрЛП(ДокументыРуководитель); + КонецПроцедуры &НаКлиенте @@ -457,6 +470,8 @@ ДокументыПартнерСсылка = Неопределено; Элементы.ДокументыПартнер.КнопкаОткрытия = Неопределено; + ДокументыПартнер = СокрЛП(ДокументыПартнер); + КонецПроцедуры &НаКлиенте @@ -1485,8 +1500,9 @@ &НаКлиентеНаСервереБезКонтекста Функция НаселенныйПунктПолностью(АдресСтруктура) - // Район РайонСокращение, Город ГородСокращение, НаселенныйПункт НаселенныйПунктСокращение. - Итог = ""; + // Округ ОкругСокращение, Район РайонСокращение, Город ГородСокращение, + // ВнутригородскойРайон ВнутригородскойРайонСокращение, НаселенныйПункт НаселенныйПунктСокращение. + СписокПолей = ""; Если АдресСтруктура.Свойство("Регион") И АдресСтруктура.Свойство("КодРегиона") @@ -1495,31 +1511,37 @@ Или АдресСтруктура.КодРегиона = "92" Или АдресСтруктура.КодРегиона = "99") Тогда - Итог = СокрЛП(АдресСтруктура.Регион); + СписокПолей = "Регион, КодРегиона, "; КонецЕсли; - Если АдресСтруктура.Свойство("Район") - И ЗначениеЗаполнено(АдресСтруктура.Район) Тогда - - Итог = Итог + ?(ЗначениеЗаполнено(Итог), ", ", ""); - Итог = Итог + СокрЛП(АдресСтруктура.Район); - КонецЕсли; + Возврат ПредставлениеЧастиАдреса(АдресСтруктура, СписокПолей + + "Округ, ОкругСокращение, + |Район, РайонСокращение, + |Город, ГородСокращение, + |ВнутригородскойРайон, ВнутригородскойРайонСокращение, + |НаселенныйПункт, НаселенныйПунктСокращение"); - Если АдресСтруктура.Свойство("Город") - И ЗначениеЗаполнено(АдресСтруктура.Город) Тогда - - Итог = Итог + ?(ЗначениеЗаполнено(Итог), ", ", ""); - Итог = Итог + СокрЛП(АдресСтруктура.Город); - КонецЕсли; +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ПредставлениеЧастиАдреса(АдресСтруктура, СписокПолей) - Если АдресСтруктура.Свойство("НаселенныйПункт") - И ЗначениеЗаполнено(АдресСтруктура.НаселенныйПункт) Тогда - - Итог = Итог + ?(ЗначениеЗаполнено(Итог), ", ", ""); - Итог = Итог + СокрЛП(АдресСтруктура.НаселенныйПункт); - КонецЕсли; + Представление = ""; + СтруктураПолей = Новый Структура(СписокПолей); + ЗаполнитьЗначенияСвойств(СтруктураПолей, АдресСтруктура); - Возврат Итог; +#Если Сервер Тогда + МодульУправлениеКонтактнойИнформациейКлиентСервер = ОбщегоНазначения.ОбщийМодуль( + "УправлениеКонтактнойИнформациейКлиентСервер"); +#Иначе + МодульУправлениеКонтактнойИнформациейКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль( + "УправлениеКонтактнойИнформациейКлиентСервер"); +#КонецЕсли + + МодульУправлениеКонтактнойИнформациейКлиентСервер.СформироватьПредставлениеАдреса( + СтруктураПолей, Представление); + + Возврат Представление; КонецФункции @@ -1888,7 +1910,7 @@ ДокументыРуководительСсылка = ?(ДокументыРуководительТип <> Неопределено, Реквизиты.Руководитель, Неопределено); Элементы.ДокументыРуководитель.КнопкаОткрытия = ЗначениеЗаполнено(ДокументыРуководительСсылка); - ДокументыРуководитель = ?(Реквизиты.Представление <> Неопределено, Реквизиты.Представление, Реквизиты.Руководитель); + ДокументыРуководитель = СокрЛП(?(Реквизиты.Представление <> Неопределено, Реквизиты.Представление, Реквизиты.Руководитель)); ДокументыРуководительДолжность = Реквизиты.Должность; ДокументыРуководительОснование = Реквизиты.Основание; @@ -1955,7 +1977,7 @@ ДокументыПартнерСсылка = ?(ДокументыПартнерТип <> Неопределено, Реквизиты.Партнер, Неопределено); Элементы.ДокументыПартнер.КнопкаОткрытия = ЗначениеЗаполнено(ДокументыПартнерСсылка); - ДокументыПартнер = ?(Реквизиты.Представление <> Неопределено, Реквизиты.Представление, Реквизиты.Партнер); + ДокументыПартнер = СокрЛП(?(Реквизиты.Представление <> Неопределено, Реквизиты.Представление, Реквизиты.Партнер)); ДокументыПартнерЭтоИП = Реквизиты.ЭтоИндивидуальныйПредприниматель; @@ -2186,6 +2208,9 @@ ИначеЕсли ТолькоЦифры Тогда ЭтотОбъект[ИмяРеквизита] = ТолькоЦифры(Реквизиты[ИмяРеквизита]); + + ИначеЕсли ТипЗнч(Реквизиты[ИмяРеквизита]) = Тип("Строка") Тогда + ЭтотОбъект[ИмяРеквизита] = СокрЛП(Реквизиты[ИмяРеквизита]); Иначе ЭтотОбъект[ИмяРеквизита] = Реквизиты[ИмяРеквизита]; КонецЕсли; @@ -2347,25 +2372,8 @@ ОписаниеОшибки = УзелDOM[0].ТекстовоеСодержимое; КонецЕсли; - Если КодРезультата = "202" Тогда - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось проверить договор на ИТС (its.1c.ru) по причине: - |Билет, полученный для пользователя %1, неверный или устарел. - | - |Попробуйте отправить заявление еще раз.'"), - ПараметрыАутентификацииНаСайте.Логин); - - ИначеЕсли КодРезультата = "206" Тогда - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Заявление не принято по причине: - |Пользователь %1 не имеет действующего договора на ИТС (its.1c.ru). - |Для заключения договора обратитесь в обслуживающую организацию. - | - |После заключения договора отправьте заявление еще раз.'"), - ПараметрыАутентификацииНаСайте.Логин); - Иначе - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОписанияОшибки, ОписаниеОшибки); - КонецЕсли; + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОписанияОшибки, + ОписаниеОшибки); Возврат Ложь; @@ -2651,11 +2659,16 @@ ПервыйКорпус = ?(АдресСтруктура.Корпуса.Количество() > 0, АдресСтруктура.Корпуса[0].Номер, ""); ПервоеПомещение = ?(АдресСтруктура.Помещения.Количество() > 0, АдресСтруктура.Помещения[0].Номер, ""); + УлицаПолностью = ПредставлениеЧастиАдреса(АдресСтруктура, + "Улица, УлицаСокращение, + |ДополнительнаяТерритория, ДополнительнаяТерриторияСокращение, + |ЭлементДополнительнойТерритории, ЭлементДополнительнойТерриторииСокращение"); + ЗаписьXML.ЗаписатьНачалоЭлемента(ИмяЭлемента); ЗаписьXML.ЗаписатьАтрибут("КодРегион", АдресСтруктура.КодРегиона); ЗаписьXML.ЗаписатьАтрибут("НаселПункт", НаселенныйПунктПолностью(АдресСтруктура)); - ЗаписьXML.ЗаписатьАтрибут("Улица", АдресСтруктура.Улица); + ЗаписьXML.ЗаписатьАтрибут("Улица", УлицаПолностью); ЗаписьXML.ЗаписатьАтрибут("Дом", АдресСтруктура.Здание.Номер); ЗаписьXML.ЗаписатьАтрибут("Корпус", ПервыйКорпус); ЗаписьXML.ЗаписатьАтрибут("Кварт", ПервоеПомещение); @@ -2668,7 +2681,7 @@ Функция ВебСервисУЦ() ВебСервис = ОбщегоНазначения.WSПрокси("http://regservice.1c.ru/regservice/regservice.asmx?wsdl", - "http://regservice.keydisk.ru/", "RegService", "RegServiceSoap", , , 5, Ложь); + "http://regservice.keydisk.ru/", "RegService", "RegServiceSoap", "", "", 5, Ложь); Возврат ВебСервис; @@ -2855,16 +2868,16 @@ Если Архив.Элементы[Счетчик].Расширение = "xml" Тогда ФайлНайден = Истина; - Архив.Извлечь(Архив1.Элементы[Счетчик], ВременныйКаталог); + Архив.Извлечь(Архив.Элементы[Счетчик], ВременныйКаталог); ЧтениеXML = Новый ЧтениеXML; - ЧтениеXML.ОткрытьФайл(ВременныйКаталог + Архив1.Элементы[Счетчик].Имя); + ЧтениеXML.ОткрытьФайл(ВременныйКаталог + Архив.Элементы[Счетчик].Имя); ПостроительDOM = Новый ПостроительDOM; ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML); ЧтениеXML.Закрыть(); УзелDOM = ДокументDOM.ПолучитьЭлементыПоИмени("Сертификат"); - Если УзелDOM.Количество() <> 2 Тогда + Если УзелDOM.Количество() < 2 Тогда ВызватьИсключение НСтр("ru = 'Неверный формат данных.'"); КонецЕсли; @@ -3138,12 +3151,11 @@ |Путь к контейнеру: ""%2"".'"), КонтейнерКлючаИмя, КонтейнерКлючаПуть); - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Ложь); - Возврат; + Иначе + ОшибкаУстановкиСертификата = ""; КонецЕсли; АктивноеОкно().Активизировать(); - ОшибкаУстановкиСертификата = ""; Криптография.НачатьВызовУстановитьСертификатВКонтейнерИХранилище(Новый ОписаниеОповещения( "УстановитьСертификатПослеВызоваУстановитьСертификатВКонтейнерИХранилище", ЭтотОбъект, Контекст, @@ -3157,7 +3169,13 @@ Процедура УстановитьСертификатПослеОшибкиВызоваУстановитьСертификатВКонтейнерИХранилище(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт СтандартнаяОбработка = Ложь; - ОшибкаУстановкиСертификата = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + + ОшибкаУстановкиСертификата = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось установить личный сертификат в контейнер ключей и хранилище ОС по причине: + |%1'"), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)) + + СокрП(Символы.ПС + Символы.ПС + ОшибкаУстановкиСертификата); УстановитьСертификатПослеВызоваУстановитьСертификатВКонтейнерИХранилище( , , Контекст); @@ -3643,7 +3661,7 @@ &НаКлиентеНаСервереБезКонтекста Функция ПредставлениеРеквизитаДатаРождения(ДатаРождения) - Возврат Формат(ДатаРождения, "ДФ=dd.MM.yyyy"); + Возврат Формат(ДатаРождения, "ДФ=dd.MM.yyyy"); // Не локализуется (формат веб-сервиса). КонецФункции @@ -3664,7 +3682,7 @@ &НаКлиентеНаСервереБезКонтекста Функция ПредставлениеРеквизитаДокументДатаВыдачи(ДокументДатаВыдачи) - Возврат Формат(ДокументДатаВыдачи, "ДФ=dd.MM.yyyy"); + Возврат Формат(ДокументДатаВыдачи, "ДФ=dd.MM.yyyy"); // Не локализуется (формат веб-сервиса). КонецФункции @@ -3947,6 +3965,9 @@ Содержание.Вставить("ЕстьИзменения", ЭтоНовоеСостояние); Если ТекущийОбъект.СостояниеЗаявления = Перечисления.СостоянияЗаявленияНаВыпускСертификата.НеПодготовлено Тогда + Фамилия = СокрЛП(Фамилия); + Имя = СокрЛП(Имя); + Отчество = СокрЛП(Отчество); ТекущийОбъект.Наименование = Фамилия + " " + Имя + " " + Отчество + " (" + НСтр("ru = 'Заявление на новый сертификат'") + ")"; // Организация. ОбновитьЗначение(Содержание, "ЭтоИндивидуальныйПредприниматель"); @@ -4444,7 +4465,7 @@ ОткрытаяЧастьКлючаЭП = ПредставлениеДвоичныхДанных(Контекст.ТекущаяОткрытаяЧастьКлючаЭП); ИдентификаторКлючаСубъекта = ПредставлениеДвоичныхДанных(Контекст.ТекущийИКС); ДокументыПоляСертификата = Контекст.ПоляСертификата; - ДатаЗаявления = Формат(ОбщегоНазначенияКлиент.ДатаСеанса(), "ДФ=dd.MM.yyyy"); + ДатаЗаявления = Формат(ОбщегоНазначенияКлиент.ДатаСеанса(), "ДФ=dd.MM.yyyy"); // Не локализуется (формат веб-сервиса). СоздатьКлючИЗапросНаСертификатЗавершение(Контекст); @@ -4690,27 +4711,28 @@ Если ЭтоИндивидуальныйПредприниматель Тогда Адрес = ЮридическийАдресСтруктура; // Адрес регистрации индивидуального предпринимателя. Иначе - Адрес = ФактическийАдресСтруктура; // Адрес местонахождения юридического лица. + Адрес = ФактическийАдресСтруктура; // Адрес местонахождения юридического лица. КонецЕсли; // Поле CN - общее имя (организация или индивидуальный предприниматель). Если ЭтоИндивидуальныйПредприниматель Тогда - CN = СтрЗаменить(Фамилия, " ", "_") + " " + СтрЗаменить(Имя, " ", "_") + " " + СтрЗаменить(Отчество, " ", "_"); + ПолеОбщееИмя = СтрЗаменить(Фамилия, " ", "_") + " " + СтрЗаменить(Имя, " ", "_") + " " + + СтрЗаменить(Отчество, " ", "_"); Иначе - CN = НаименованиеСокращенное; + ПолеОбщееИмя = НаименованиеСокращенное; КонецЕсли; - Поля.Вставить("CN", Лев(CN, 64)); + Поля.Вставить("CN", Лев(ПолеОбщееИмя, 64)); СписокПараметров.Добавить("2.5.4.3", Поля.CN); // Поле SN - фамилия должностного лица или индивидуального предпринимателя. - SN = СтрЗаменить(Фамилия, " ", "_"); - Поля.Вставить("SN", Лев(SN, 64)); + ПолеФамилия = СтрЗаменить(Фамилия, " ", "_"); + Поля.Вставить("SN", Лев(ПолеФамилия, 64)); СписокПараметров.Добавить("2.5.4.4", Поля.SN); // Поле G - имя и отчество должностного лица или индивидуального предпринимателя. - G = СтрЗаменить(Имя, " ", "_") + " " + СтрЗаменить(Отчество, " ", "_"); - Поля.Вставить("G", Лев(G, 64)); + ПолеОтчество = СтрЗаменить(Имя, " ", "_") + " " + СтрЗаменить(Отчество, " ", "_"); + Поля.Вставить("G", Лев(ПолеОтчество, 64)); СписокПараметров.Добавить("2.5.4.42", Поля.G); // Поле C - страна. @@ -4722,28 +4744,27 @@ // Поле S (ST) - регион (<код региона> <имя региона>) - наименование субъекта РФ для СКПЭП, // например, "77 г. Москва". - S = Адрес.КодРегиона + " " + ИмяРегионаРФПоРекомендациямДляСКПЭП(Адрес.КодРегиона); - Поля.Вставить("S", Лев(S, 128)); + ПолеРегион = Адрес.КодРегиона + " " + ИмяРегионаРФПоРекомендациямДляСКПЭП(Адрес.КодРегиона); + Поля.Вставить("S", Лев(ПолеРегион, 128)); СписокПараметров.Добавить("2.5.4.8", Поля.S); - // Поле L - населенный пункт (<район> и/или <город> и/или <населенный пункт>). - // Например, "Москва г, Зеленоград г, Крюково п", "Москва г, Зеленоград г, Малино п". - L = НаселенныйПунктПолностью(Адрес); - Поля.Вставить("L", Лев(L, 128)); + // Поле L - населенный пункт: + // "<округ> и/или <район> и/или <город> и/или <внутригородской район> и/или <населенный пункт>". + // Например, "<район>, <город>, <населенный пункт>": + // "Москва г, Зеленоград г, Крюково п", "Москва г, Зеленоград г, Малино п". + ПолеНаселенныйПункт = НаселенныйПунктПолностью(Адрес); + Поля.Вставить("L", Лев(ПолеНаселенныйПункт, 128)); СписокПараметров.Добавить("2.5.4.7", Поля.L); // Поле Street - улица, дом, офис. - Улица = ""; - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда - МодульУправлениеКонтактнойИнформациейКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль( - "УправлениеКонтактнойИнформациейКлиентСервер"); - - Структура = Новый Структура("Улица, УлицаСокращение, Здание, Корпуса, Помещения"); - ЗаполнитьЗначенияСвойств(Структура, Адрес); - МодульУправлениеКонтактнойИнформациейКлиентСервер.СформироватьПредставлениеАдреса(Структура, Улица); - - КонецЕсли; - Поля.Вставить("Street", Лев(Улица, 128)); + // Поле Street - улица: + // "<улица> и/или <дополнительная территория> и/или <элемент дополнительной территории>, дом, офис". + ПолеУлица = ПредставлениеЧастиАдреса(Адрес, + "Улица, УлицаСокращение, + |ДополнительнаяТерритория, ДополнительнаяТерриторияСокращение, + |ЭлементДополнительнойТерритории, ЭлементДополнительнойТерриторииСокращение, + |Здание, Корпуса, Помещения"); + Поля.Вставить("Street", Лев(ПолеУлица, 128)); СписокПараметров.Добавить("2.5.4.9", Поля.Street); Если ЭтоИндивидуальныйПредприниматель Тогда diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ОповещениеОбОкончанииСрокаДействия/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ОповещениеОбОкончанииСрокаДействия/Form.form index b3348a418..0ac5366ba 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ОповещениеОбОкончанииСрокаДействия/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ОповещениеОбОкончанииСрокаДействия/Form.form @@ -137,7 +137,7 @@ - ДекорацияСевет + Совет 10 <key>ru</key> @@ -149,7 +149,7 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ДекорацияСеветExtendedTooltip</name> + <name>СоветРасширеннаяПодсказка</name> <id>18</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -159,7 +159,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ДекорацияСеветКонтекстноеМеню</name> + <name>СоветКонтекстноеМеню</name> <id>11</id> <autoFill>true</autoFill> </contextMenu> diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПередачаПараметров/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПередачаПараметров/Module.bsl index 837694f32..a488c0059 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПередачаПараметров/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПередачаПараметров/Module.bsl @@ -1,9 +1,13 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ОбщиеВнутренниеДанные; &НаКлиенте Перем ВременноеХранилищеКонтекстовОпераций; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаКлиенте diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Help/ru.html b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодборСертификатовДляШифрования/Help/ru.html index 86e6ffd59..7fba393ab 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для подбора сертификата электронной подписи.</p> <p>Открывается по кнопке <strong>Подобрать</strong> из окна <a href="Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Form.ШифрованиеДанных/Help">Шифрование данных</a>.</p> <p>В списке выводится:</p> diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Form.form index 4f3f87660..fa4d8e086 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Form.form @@ -409,6 +409,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -481,6 +482,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -551,6 +553,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Help/ru.html b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Help/ru.html index a5118232b..324042782 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для подписания файлов, электронных документов и других данных.</p> <p>Электронная подпись - реквизит электронного документа, с помощью которого можно удостовериться в неизменности электронного документа с момента его подписи. Контроль неизменности электронного документа осуществляется в результате проверки соответствия электронной подписи и документа, а также проверки действительности сертификата. Контроль неизменности электронного документа можно выполнить в любой момент времени.</p> <h3>Подписание данных</h3> diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Module.bsl index 789ce10e6..d3ea5d407 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПодписаниеДанных/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ВнутренниеДанные, СвойстваПароля, ОписаниеДанных, ФормаОбъекта, ОбработкаПослеПредупреждения, ТекущийСписокПредставлений; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -182,6 +186,8 @@ Возврат; КонецЕсли; + Элементы.Подписать.Доступность = Ложь; + ПодписатьДанные(Новый ОписаниеОповещения("ПодписатьЗавершение", ЭтотОбъект)); КонецПроцедуры @@ -190,6 +196,8 @@ &НаКлиенте Процедура ПодписатьЗавершение(Результат, Контекст) Экспорт + Элементы.Подписать.Доступность = Истина; + Если Результат = Истина Тогда Закрыть(Истина); КонецЕсли; @@ -395,11 +403,22 @@ Контекст.ИдентификаторФормы = ФормаОбъекта; КонецЕсли; + ЭлектроннаяПодписьСлужебныйКлиент.ПроверитьСертификат(Новый ОписаниеОповещения( + "ПодписатьДанныеПослеПроверкиСертификата", ЭтотОбъект, Контекст), + СертификатАдрес,,, Ложь); + +КонецПроцедуры + +// Продолжение процедуры ПодписатьДанные. +&НаКлиенте +Процедура ПодписатьДанныеПослеПроверкиСертификата(Результат, Контекст) Экспорт + ПараметрыВыполнения = Новый Структура; ПараметрыВыполнения.Вставить("ОписаниеДанных", ОписаниеДанных); ПараметрыВыполнения.Вставить("Форма", ЭтотОбъект); ПараметрыВыполнения.Вставить("ИдентификаторФормы", Контекст.ИдентификаторФормы); ПараметрыВыполнения.Вставить("ЗначениеПароля", СвойстваПароля.Значение); + ПараметрыВыполнения.Вставить("СертификатВерен", ?(Результат = Неопределено, Результат, Результат = Истина)); Контекст.Вставить("ПараметрыВыполнения", ПараметрыВыполнения); Если ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки().СоздаватьЭлектронныеПодписиНаСервере Тогда diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Form.form index 34f445ac0..2f4af5fcd 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Form.form @@ -1754,6 +1754,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1826,6 +1827,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1896,6 +1898,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl index 71abb76f5..b6aedecca 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПроверкаСертификата/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ВнутренниеДанные, КлиентскиеПараметры, СвойстваПароля; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПросмотрДанных/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПросмотрДанных/Module.bsl index c700f7b8f..8acf35c78 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПросмотрДанных/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ПросмотрДанных/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем СписокПредставленийДанных; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Form.form index fe17a9813..40ba5e273 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Form.form @@ -407,6 +407,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -478,6 +479,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -548,6 +550,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Help/ru.html b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Help/ru.html index 3d8aa5d20..e54166326 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для расшифровки данных. </p> <p>Выводятся сведения:</p> <ul><li>В ссылке в верхней части окна указываются сведения о данных, которые будут расшифрованы. diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl index 4df18b091..d7864a815 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/РасшифровкаДанных/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ВнутренниеДанные, СвойстваПароля, ОписаниеДанных, ФормаОбъекта, ОбработкаПослеПредупреждения, ТекущийСписокПредставлений; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Help/ru.html b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаВыбора/Help/ru.html index b1b667c75..c256c51fc 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для выбора сертификата электронной подписи.</p> <p>В списке выводится:</p> <ul><li><strong>Представление</strong> - полное наименование сертификата; diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Help/ru.html index 5ca33af56..2cf393687 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Сведения о сертификате электронной подписи.</p> <p>В верхней части программа автоматически выводит данные о сертификате:</p> <ul><li><strong>Кому выдан</strong>; diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl index dcf6b8b6d..e3b208561 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ФормаЭлемента/Module.bsl @@ -67,7 +67,7 @@ ИмяРеквизита = КлючИЗначение.Ключ; Свойства = КлючИЗначение.Значение; - Если Не Свойства.ТолькоПросмотр.ПроверкаЗаполнения + Если Не Свойства.ПроверкаЗаполнения Или ЗначениеЗаполнено(Объект[ИмяРеквизита]) Тогда Продолжить; @@ -266,7 +266,7 @@ ИначеЕсли Свойства.ТолькоПросмотр Тогда Элементы[ИмяРеквизита].ТолькоПросмотр = Истина КонецЕсли; - Если Свойства.ТолькоПросмотр.ПроверкаЗаполнения Тогда + Если Свойства.ПроверкаЗаполнения Тогда Элементы[ИмяРеквизита].АвтоОтметкаНезаполненного = Истина; КонецЕсли; КонецЦикла; diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Form.form b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Form.form index 8c828450a..40518f1dc 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Form.form +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Form.form @@ -576,6 +576,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -853,6 +854,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Help/ru.html b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Help/ru.html index c88692bd4..ae795c2b9 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для выбора <a href="Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования/Help">сертификатов</a> при шифровании данных.</p> <h3>Шифрование данных</h3> <ul><li>С помощью ссылки в верхней части окна можно просмотреть объект, который будет подписан. Ссылка принимает значение наименования объекта. diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl index 65614ab12..cca953262 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Forms/ШифрованиеДанных/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ВнутренниеДанные, ОписаниеДанных, ФормаОбъекта, ОбработкаПослеПредупреждения, ТекущийСписокПредставлений; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Help/ru.html b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Help/ru.html index 76e3246e5..3d94ab49b 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для управления <a href="Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Form.ФормаВыбора/Help">сертификатами</a> ключей электронной подписи и шифрования.</p> <p>Электронная подпись - реквизит  любого электронного документа, с помощью которого можно удостовериться в неизменности электронного документа с момента его подписи. Для подписи необходимо иметь <a href="Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования.Form.ФормаЭлемента/Help">сертификат</a> ключа электронной подписи. Сертификат ключа электронной подписи можно получить с помощью криптографических сервисов (провайдеров) или операционной системы.</p> <p>Контроль неизменности электронного документа осуществляется в результате проверки соответствия электронной подписи документа и сертификата ключа электронной подписи. Если электронная подпись соответствует сертификату, то это является гарантией того, что документ не был изменен кем-либо с момента его подписания. Контроль неизменности электронного документа можно выполнить в любой момент времени.</p> diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/ManagerModule.bsl b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/ManagerModule.bsl index 823030c3c..d6908f14e 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/ManagerModule.bsl +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/ManagerModule.bsl @@ -2,9 +2,11 @@ #Область ПрограммныйИнтерфейс -// Возвращает список реквизитов, которые не нужно редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые не рекомендуется редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт НеРедактируемыеРеквизиты = Новый Массив; diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/КомпонентаXMLDSIG/Template.bin b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/Templates/КомпонентаXMLDSIG/Template.bin new file mode 100644 index 0000000000000000000000000000000000000000..25e062c49a55e66144ebf6bf7d88df85a5dfd11f GIT binary patch literal 2918567 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 j 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 wRCaE1D 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%0D1Je+C4hvR43n-8ipt;O%tpp4^H0!qiuKGubY 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�{6Z$; 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�A}&tJr@xCaj>dMT;m+!^c>=hu)(CY~8L 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%0AEAn>+9Y0 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%0Dm7sIW16*AId>gLhF@!tthE$ z(9~uM!<-?l4r6P>!bG&nYBn7<4Jyw-*PHeQ=V62W%1@w+(DW{hpF0s+Zjl@2G<zHa z*lHMZmqTB=@NVj7XezqSG9PlC(;_<tpzFjjra_n8GGFXaOyG6ddA_QC5RE%oprj_q zgs+Q7MGu(%s6Ma!`3f8#c^a{clgSbw*JcB5WyxReMpNd&S0nZmgcCB(VWL?^O_W1? z-MD;PN1+Rb{WW~ue7V<!qecGAmHsIVe4O~E;Xy;MtpjJ-1mHCw1wf03pe)+~x!q+S zCph@JtK~Kqa4u8%I=iPF>KAgQivs}P0Pu4mMmz;DKtA>bkWRE9&vF2giY*G2J|Pn$ z2R!^7fB%tE;3onrR_c;XX`ul|jzJXV0uG9uOx!<?w(aoBLA4$q*uld|oZ3#ndgIPq z>ArK${uO*38}CYQUO&c_9@xZ5z7)Q$S24=HKr0xWfWc-OOqn;Re2go-S7_nuT2}IP zO{H`EIFT7fa55IHO0Wmc?M0RR=L&JQhI$FH+Uhoue0Wc^dh?)q!3v7_Ub*5$?P8bn zKTt)e-(d(Vozu2LxeAyXSn<nXdkJ${h8e4w1m%n;nbDfOg*bwx%sE(rmmZ+5Vd<WA z-^mRT9HVx+n=5{AC$RS3@~*SLL&0P@YLH9_nXP#1O$xGkG9#}`Qk^ND@-W)a3JI2w znG<61#!kjB88p;S^<2BrtnNe(wlBjTP%1=Y^78GRZ67(ZW)PnsRW~N88!dEWpl-w) z802ZH$d#gP4f68QD7>7**>Wx9caVf$Szx6umoN@*%4MW7l#S0&)+lZ_gY4(JB>J03 zf3=*clV*OcmN^7Sn^O(Ap+n&?nNF=UME=8G$XRw7WK1e(e<$OBgl*ux$?|<EY8RBY zB8oCi0mGY1q}9Y=^P>zL6-zB1M<1;C8O@HK7d~aIunxd@)%Nk4hK9C#2TmamDX1+0 zRmS8<Ftzd+SYG@Xo2quvV&>;pmUCDoaeRH{Q6^$dBqO*7Yq+`vw)lGwKtXzKT5Nug zqm6309;B5yB0G{jj-#?81+6>7<`}Dsi?C;Pw`VPh)U3tpXo<)b1{h5rQB#zK_K=qr z0RAf~C?vgBfc8zURtv(##W?Xx<vj*r@+x^MZGuTIY4Mm=d8iL>V7El>Hx5LwmxuSA zs3|ge9rQ89k~mN#4_0?<w#fxnX;2jth;R?GQDN}keqU3feHq7=o70zZ+_o5uM~%f> zkq$c^g7zjZ@m!6qo{yG<H(NHb>HQlyGFQt1QUhCJ@<&R~M=J1Huwx>1j#QDu?p`|} z-#egotr)sqj1rht@^utfBAT4>bTU?bau`5Tn&?9%Z6H`A(eJR6GTBw~LQO&w_N43R zh-#wZ)+*ORZ^w@%*><RA4Q?Dfx3k0!KF^+=!?wwVWEMh*TsjRF$B~KXzn%5aL;ytC zXcmC+OcrJdUT%>dVh!Ty(vsknun3?&VkWB`fc(he`PiR3HC@TEK)QBLz^dbwLK~_H z+I%{d<3sWTRENarbkepCyZGHTk&Y>#32c`mjQGuKX5K*o!EYx6+lF~~Gvkn4Bww79 z7$@USviMS8afU7|D3nhVWc?ztgb%(MAxl6xf_z$Xv4&=IBV^mOgfpmDliiW~ArYWv z24iIdT7C65Wom{aqjHjw>B;z^)LOdW&ka;wqHArW_X|^rM6H=}2En3kLc6fn(FY#n zY<wVn<xtsFB7%94rG_Di2>Z<_i3n%Nm)nJ_iV$m80axkW%oLH=z~RYaizAX5;7<R# zit?gOSsb&HKH?7fS8Rh?#Hkxu5}!4w7Gq<u8KnW}XJm%z_d@X_WN;dl<prFpR7$em zn^G-vR;8lJNY8AUL_~?6)i7H}UKfhW6$4S;dfOO0MI*OVqvQz<FC<s{wk4npfLu?* zU<pXZNA8@OKrTWS9}83ju1ucOE5^8u%TWeV9pZoK^Rf;`qt_AgPN~PznV3p;CBeKq zMq6hC-esvQ$$^liziz)FRfYx#d9KPEQnwq07-E2M6d+fK)7#HW3oV26ZpsD-eGAuV z@0g0?(5dS*sNU^j+RMOW8N^xA)>O_QPE+=hLqLeiOfC3~7Oc#|9ECldM>?)*yWglC zwna0aG%|BC9WuBRQPt_-+D~>K|E#Mh)OgdDxXyN)8hnjD8!wAvfsc5(cRP&Ot*FRU z!1eoSi7YS-?qlumn*j5lb%h!;#TZ=3j5c4$G1e+hH??|zn>g^0S!!j#Wjb&Nh6@C< z^b~M!o>GDTzU;KiBaTHAAoT{AnOzCJ=!fdK4S9K;$*JTT4VB7e5YTyq22G>f@gRiy zPqCF>p|!EfQ-dbdv4n|!{>sSYoC{MKW(7=!*Msr1cqqbuob4<LC$zXcxr3eBXxB_@ zYNyX<r7x$40-P`@<ghY=)y)v@5Yp?H{lTXgeD0Q|Q7lBU<eP&u>f4}5qZq#GS9JVX zIZemZ&Cy4ApjyRm8ej`}nO|785ET!Ec?<DAmoNo(S3d@<wx2wD$!A@iF*~7GLX9yG z-=^e5L(!k6MJaQKhi;jshfW(2%5}!nV5t6W@9Mln`f@OMfIil1<f~e>Dq8uf_fZYj zriKDmfystEI+^y9p9V3Pn|S$2i0owW!6U6B4x{oo%z%xS7{hs0^*FfBg1+{X3-^7i zs^zgZ^;m1RQgp1{c0i*AX0hxz|0dFg)Wu6JR@BzRRn1?11?~{~LXJL0hygyI$=**w zjxYl&w7}uOsQ}mhwc(q^qn(aEpfO`R-Vy0cQcN~AyINf-aBeHv@G-^wcUbpv(3%t> z!JR@%v`~CPBvi`(%okayag9qJE+QOahLd#xA!loaEkqWYX?Ac$??Xj=Xq6fGha3w~ zQpj%=62SL9pv4!roDKPnu-1V88SqOvtTE(gw1B6z0Dxe%fG4y7F68I5fTy$oR5(D9 zv26BtvHfkfOit>uUV}E*IoWLT=^<PsWIxeE*hq+<nDihc2ALtyPhx1$WdR5wFX7uf zZJ`DRnPpD8*<uYfu;7MX%&~Bx1}@@eLk-r5+Zbv{5zOF@TMku=knMFE+0N9+)&gXE z1%h)XWd_!TfnBB4V)QV|c-{M5LO|(7kdy(;#YA&SS%`MRX!4mf?sH{|4*!+Z!YT>6 zN0C}M4?``VC;E@a*tp8$T`FU^hNIO=LCFpZEjj7#l;glJwIj>ZzT8S<@22cevUK;| z$1&8@zTBzcxrUsXB6WR^mCOYGIjIxVbVk$UVj4N~?g$9x(rM~k?j-+cgN2Sh`{gzi zX*&Xd4rOvy!6f})5F8vjz6A%1j(%_$(QyhK3_3oOnYYxlI1o${F$h1(5vJt`2|42I z%CU%DB}F#RQehO0LEL)GiWU9+=m(T5CudBO89y;fU9p&YVvZ1-BTktyNtq;@FKZZs z2nA+|I!%}yky9$fwr4uqFI8eXGo786u3Qlzaw*IR6D8jud^aVLFY<A3H50F<2FMZW znL#~K{aZFaFUn;?@&ao7!V0V<Dc(G&78a>(usiB3fv^HusXT`=b}{BnJc7<6^8lix zctvZ21?IuB-nU`B$;qTUAeipgYez|<TiR?jiK{9%C#J+abBQn>95c`n2acKG5O0=q zl3`E0SkA-s=5l1zm%<*2Ja?A9%8O@C$}F32KAL#)1?1I)q{DVL#8`oK%t#u3N0RVR zdSK|->9-+#F@4Yd!;YQM6Z}(1m&~2kV#%)15NFr>`4CU!zPfBTwrYI_whHzt-L?)- zNsC-=k+TPI&jK9v#w2=G^y5BARt&otGUJEHwARo~NE?|zeUDS$UJ~;|<e4#!oWBZr zeygX3#+3}vGd|eG0PC6(oy&^I{4>;C5#IkR83;a2w`4s8O{El5T>KTXflBRs1x@i5 zB;sR|TUguyZ8!7pWpj#2&gSrFZ@pFi(35-Aev4(}g8R-Tddid1Z<@yf__mocb#vg} zKIuMxqI}cUES_!3w{S8GyR<GPE)!Cw-(p$c<XoCxMDVy<YP5Pvuu4=@mUdFJL%Tja zmI@Auv<UhFF@<N7M?Bfku7l(g=+k1NreV|DJT(*%r>SqRhKR}=DbeIe+kj{mS8j_C z&9(^9Y}1J5a=E-)DsM4}Gpbc#Ds%$bi&^9IJV3#PWX*Tj9nkvn?tq)Ee+{L)JN{Qy zi3Fud_4tyV0XVcb^R=T<lDuqCB|o7x!RPA?o*D!pkDXFgI!<87;nfmhyw*FEK^{+q z7*?q~4TZ;|sYo%YVj2<7P`g;E>h+O6e2k;_uQI4<LRFlN_oy7nu=l3`R+`z<-(f$e zmEsGEz+iuOT2)s@#<XnE$C90nCENFpr6g%{GVH*~t~o#zt(l%0N*4ZM8>JgGlkCvv zwvL*TqctUJ<@PAOWFWm{aMXghx-}*}o81~ib}XfPI<05;>bH#e?yJ?rSC2szQ@w{K zMS5tA-a~vf+O4yfCiB%_ASM%_M)sZ9;d~Y9){yg8LblpaI0a5OQ`qD<%0z|=M-~7b z;g&;;ArqhmI$_MAgfZ*;2_qhggd|;g(4W7!63fJn6xNVhEU)5cH1{5|6?`y|3OzKM z{K|xdRr$o5<nkW-bpDA%w7?wjlqAV_uw~t+U<SF3W67b@sEf!~e~TJuj-)Kf2Lm=K zefrk+;O8_5yof?a6kAU+5o}feb8NZrd}*bHfAkD}7wm|W+Cvb-KyO9l!Bc2Mp%><X z^xPx7^bvwM(N3eMpvQY>uczdoTw<{=?&Y8S4Js2a?&F`tt)jfZQ{E?U8K_o0<z3L@ z{1a5lm)j>VNtQD#UMDLXl*`nO$+FRzhm+OLSp5Y*@k-f2<bv)TysOzj@39wjSNpbq zEIYa+zct5`+vh<YhwZN`m#gB@CWp$XK=C*>4yt0CD)tpoP7Jo?<Xx&+l_nST;MP00 zH&bdz^yKzJ)v+;;+<@vw9Tnxt1|c4Zfcyo|Uy3WrRfG7D96JkQr!PcYt-nv&4lt|L zP05AiYew%cfS(OL{VM+Ko*kWBcY#wXPsKy~LTzFZw*phBY=JHUEN`4Xza&|-MXDUe z%HmmYArUFdm_qKF9VML@^2{BBs;)3X-oJy=DoLQ#^g5E79ZB`~Q>BDPat8XTtm++9 zN@#3$G~(LgBv}etJW3^ZokWY~8eS}914}0lXbrjRTWylbL%}##xd>>nLR0An?0tMW zkZnnlR8QX=6LL`PC5KwQBJ~hu-$M-_T~oOz_l~SC;fl&dOS9lRLu*=olpQW2g;XsI ztwC1*4jcKf1r~Bre>?I%13+zICtY<?@`>piq_!|nn_MuE{=tTayz79gO-^6ZxAori zCE@L*z=&>Rfu)tV#`eMVJ3%gF<-3f1_!P*)oB?Vp&IbUgx!2ST4GI}D#My475AW@L zPyia-9$v9ss6SmWfFuAfK+wOE8-{W+r6!<{aQX-9y`@p{I!d-s`2x1`_uD$;Z|&2z zmB4~lVxi*JC^dTuP>c!N|Ldq_<7Ak1)wy_m<~^2bVr#@b3B{!a;T%fYcyAd9`6I>n zS0)>18#c1(H*Vd%va~j!_4tllpsg18*{cb|V1HaFGxCG1si8Wwd5nBBCnrvlE%By( zCVwfODVDV%&u}Bkt_n~N+Ha&gc6{>6?0v{$+CmQ+WihdEX&&rI^GOjUI%|$FJx9FO z&3Kn^PIW^P@v2B-PFUQE$kSf~7nBr<*)S|-)7McpiSSS+O!XO*Gnj}~c3aBIfF8-7 zdB`T95^oNR$2rddb<Hn^P3#Vwx14xnVd<xj1o2gmU=Xqc)vcRjq-KlhJYDA#t6Cqr z1I6sOywFW=H4B+)8?Y>>-t6VH$(paicWm5D5qUToG8wZ2Mu*4R=aITW$|%JKSqe$} zDG7H@SCH&z8hmvebGa@WvR@Z_<|HYvhs=zSM=puRy{<#YMnir}AEiyyGA|+xe~3JO z&1&!eNQ+<@LeUw;=)9l{uxBq#673`qtK}iwi#fg?@fARB2&?5t&QSKkSwzaToRtNn zHUfGjCfpkFB_nTgKl;GKhs><ou!7$a$O7(3i6Qn|2P2&)2T=Z`b={q};$axcxL#vt zbrwJy*_HF@NWVm939cl6z6`4HJPIQW!5NT{JdXkOG+<i-`6>9+ny2U?1W>27tOBX? z`Rl0AqH;5<9sF>({IA2cYaQniyUAUcs^TdsyB{#5i;2QYX;9q;e2X=G9dZTRZ=vif zz95zeb9t98j+eIfvIgOD+*LcdG839&1`t)~Wr-IUG*t8IAy**zVnelY(1i+h&qin% zpOnJ#Vo35WbT8pq$C2x=LuL}{)i`r_+uoQNX`8OZL0+7R)k?C3V3fX%2znovSNk61 zgTxv3DZ<ps1wX*iI8kQk+LGS9K0cJ0!tmAj`g3S8>k?+zA7uF|v<7Dvlf~_BHBX<j z-=_*kR%MO-L5ny+&p=z8itP_33(M?N#A~H3R@3?)+P5Tbyh2`_4CsU@Yr5=6<=;T_ zmdHHjMJK<d>S0)Hl<5(cKXq6X$;E3-jVVAA5iJ$%f-^PnnCH#mD(nW~=8(Ap`O=tB ztW~^0E@IOgghcOR9B3%irzD7~2dSZ0BLJB>;S6+P$iSe75xxi+Xs}V}pyiB^c*@IC zS^2h9uD=1*mc<O&xPTGoR{4Y<EVzdeuc+!4ruvC>L8eih3W4Jm++z|GB|i(ZYE`#* zKn4m9C??3~QlHeq1Z1_p0VzaCsx?Xt3}p3{<Yyq^k^TmpAcf~$GQKzi5&Iyt0n7M1 zl<}tIH!4*ykNI#OBXeQ-9ZL>fi((*3J)DM+tK~60Fe|-9;K!5O4V%Joc1BD?BRq@Q zJhBN``(l($-=C(-rX%zgPfuv)B7N;w{tkJ64zyN`c&OMiHbxxhl6Rrjbj3%;imwL$ zx=3MNZ!enQ^6V;w!1h=1_w627=i9&V>{tVyUw6Js^`fiS;rqeAuJzsn-?rmz=i2<W z{#5=G{yksiaTZsjPfbUpfK|QhKTu42t5#0?7kW4Zyh;oHqV2o3zt{d93a;%MR*Sao zw(j`G3+qDgUGMhR&LaU*hX)Cv&Lf>i+D``PhXgv_{V`<P@hbj?s{aRmGXzenLu^3% zGDl;&p`L;E){6nh>A*^?4t>mj(M(hR{p46RO%h)5E=9)nNMw9#Aifoai-Dp0#*JN6 z&s8(7lk9QyDRI%@&XO=t4z7{8)KpDwkJrI@bGy(0$=g&{-O}j@yDH1M?MA`WzLskp zc|OqYYacjzyuG!(tG&0K9P_t-*V!JxK~#AH1vk<M+g+Yzspj@Ispi1T1_Ngh%v2>j za5Tp7fG)@n$cx!oco?t{e*{yf5ksV&_%X1cZTH-iY6h<y&%fA`;6I)Ke%512?MO?N z8slH4hj@$GfP7ObH!Kf^1_bm|2~&Go>YV|X%%-{)f_Iur>PitN{`#{n>afsTC?p6Y z<IVtulzO<%L_FAFrA94RCGo;AVWC#m%4o({Vt(R`NXAJtW9j@<A(qHAcd~Y<kj|Ji zKmcG4Fa}sWespRw_#y3c^=NlxL-WxwH$Z^$erHVTD8R%BAkI-6pF29{S_J&LwrXl> zp3L_sLRI$E7)Crkm1QlIH&}}JI?m(Wic7LNN0^f%q~-`ybA(CAo>9@<7PnQI)NH0k zXzzEASK{5{6tkOEjBajao_9$Sumz8QMK37;ubD01%1P&}f>k;<Nl1{+O%=@2YTuwT zUUv98msqJZ($rb9$K&u}QpzLY8$EbK!t1DTlIcOJ<toz}mErZ$Jd*Yftb#Xk#l=FR zwD9>8sCSZ3NG$JBg=vvfuP3Jzlw#!$Py-ZWZ=-hrboCouIQHo0C>%SuF)ADzin@<R zwOlO9Nu#=kqJsB)9ucOI!q11qXfL;oJX-9rUZBDqJOK?Ft-?L=m@aYYLDt@j`%Dgn zv*hOp9j1G$zGg=sR@_Ox>iiz)GK9YN-3W9Sg?=*vz3^Z;;H<t4eg&&`tUN~Yanfei zAf81wNzPz(t)8t9Bjo0X|0$%tUOIY#*!U_7<(hg20X#?!<HE8mmGdsP$hY*^T1X{u zHTBQ`*=P-B9Uu8(0&KZ~zwCCB2_48(asfHFJNSFZAez1l(r04&RdtZwG&+3*tQ)|l zAXpfSIohRzjfg*gGsLfZ9pc})Af7<{rx^bZ7V~U0KDSr$bHN=S535lxfWC&Ho8JJ? z2fK#X2;hU^;nnX0;71U+56iu&Yt(}g2tWIiQSeI<{x-}!@dEha^}Uk9y#jDOpAD~X zVsQ1LK`K1)rv>kfIF|?2gQHpz%z+FnuR;cY)H9%v)?h&-QBv>^hejp(8zy@GkC15N zXQQ9Lh@{_fP*0y2tUVabYJ0>vJJ>k7Dy5h!w+C`f8J??-|5*n{f&U1>TM(tEkB!DZ z_sJ+=BLY8*z>UW)#6RZ$yZxiO;G=9vl7e0E^yvH%zIrtLZxH@PgumxP`2PbX<p<wo zGys4@OYEHucvRJy$4|zfAx0e$Xv8QZphgG~K7{a*kZ%%9AWI^NEGtYh12beYGtLK2 zD68?KZ59Yc%2rg=sAyAVl`36>r8G*E$Y+3n5kngl-3-!hbZJW!q5uE6cV_NP24&f2 zpY1+R=RWWJ-h0k@-}8CTIddnu6X*9Hj3|<W>CZC#xIX1?iyS}MOx(`Iv61C(DDLtn z^ShklPQRgDW7h$@c-o!*8SM5RSM3^#6a1YAH0jPF-N*SzSMYPB+jP8-|2Tisfr#?F z#`H-{@9C4ip$A3uzkvQy)h9Gvx3Uc(aBwditeSNO+7h}lHNn;G(iP@Ne+7+;yZt3c z$vA&n<a98eM!r{Jbh@igd0YI6+VpGL|4d)cvDMlYrG7mJna>G-w|1oS`r4fbyWCe` zx4J9Xe!c$YgG%|f93d0@8;(SjZyoKXvwUTd`B^^U<IVC;mGr!P=)5}No#KcZejp<A zVmev-I-FdiaT2nx4%lmr5@}Sj6-LKClt!WS)57yRygwqp<GH+|UW4f~A4bdX>w{79 zYobviudJn!`R$38-pBOGtkl%V^iM`hU%>ReOdlVazWQLWKK{XnBPye(-6B@z(6O){ z2-%O)*w2f!Z_j~!Guv@pxV`NE18V;tCfof@TI+W9KdtLHZpx1J8E?IQpS17rJEeWA z-y(U+Um}S~S?jNr*FXJj<amnh<FBFp8(d_!?Bn&;O?3#pH*`_GMye;M#%hMw%Dvyn ztMKz|UWJ?hKFa27_YyLA{)6xg)b_&eqJO*6Uc6#n)K14;aL`BxWpq&aK}36P^lvy6 zaXq?%8Czt=y!=NhcDxQNwCTBSXET+M_5Yx6{l7-_`t6bP4b_qRwKe@()-)zNFyH(+ z3$D62b#3dE^G!p?aoWrIs*&nfnyGr_hU3!yt*k(S-=KXj3tZb7n6K)0Ys$+^)-jQX znUr;2X#HlrmNH#4TP>wC+J0pg<8!&vCIsT2O+$Y?+<oqOa_2UIcYhm7ye*E}4r+R8 zTd5^ddx@HXTI0cpa-PhD|86e-o8J%k_o)6o(*JbYS?D2`+C9{YsFhJGqc)4$0&1C& z{#VlfCSC_cLH}pZDgMcw+gkDNkE4gZ)XrfA+txwtG_@{jC#jvF*4-ZAe<c04vVBe+ z4fx-pmVb*ZzmMf=qK7(aPgAR>ww~HrYAdO2pjH>@fA<XdPvN?;I_Q6|>VL2Fzm;|c z?GfwgI@)cgUD?qK^*`5%rA*h({aeb>X#3GwjQ4Oqn-GX^Xh{4FgY*tL-rMns%fDQz z%~TyyEntEXd*y&;=-mii^@EDf_@^4!sq-%^AAW(S=NcL+m>>-ab~ZHBQ%{jDGU?*r zZmPXh^X2s7q<ZC^pt@*}=1NKUOkOFEWdyF2258Nx99(mbgc^bS72j@UzvA2-F^kL( z8kf*`JB<e%iI`6k{K@+x?1nLQ65HuSM`U~F@&0vhNzd#1&xJ29a{rsojRZU3W!12u zSnu!Lr>yHO`y%prlgWG8uPZu&`+-gVruUTkq-x96$nnqgncF!2L+RuEzW3DmUlN}e z_C>58b7|M!%>92yl>JItAV0~0{^orV`@R9RPhh?shojh^X;bWbCG~z^r2V1ku&-eL z>!aB>tM*&kly*vsv|mU2^|UWL+^0X#7Z1KA?}ckGwS_cEqRGu+Cd|jurt#mx{onM! zI7z12S=RLAA!)WsK3+;Q(0O`pRRbSQ<saIn`Cz)TOIaH}ofdHR;WTbe@Y&q|)S*Bb z8j830dv>v&ZT{|EnsRJ_!An8YMw+&>9F>Q{$E$o|g#U<i(d6GJxz_&<DIdY$UnzrH z{15F?T6MW5mz5>wWf`-A8BJzJCT8@PgUl$}=kK&#k)OX~XjR6V?Sxg>9P`;!L@oFg zr%7!Tt@bb~b339M5Vb8uT&C}-zwF$3OUG6Gu5TP~8Sm;h@FShRAowF#yZR+YoF|2y z0EIw$zi*RI^FNvnf7JX*m_xMVL;iYz|J}C(p_bH6p<jB%(l`s3x}H~l6Y+Zjp?EG; zJ!>u;&!wive&Kj76+N?~$6tncPW3%w7%yAGzgTxpKKAU}U)}HOL<^)B!k^a~02v0E z1lj+t{JAY*drK$ohpdOZ1lbPR3pob)5)%8iP7HzE3dw}bgE%28A)6pAkl#Ws->DN< zLxw>nL9!twkb58&$O_1M$Y#h6NE@UB(hWHc(YNYE5@a6o91mtf=0fg)EQR<WD<O@L z&5#|C{g96#UqWKv(TRbOWJnq$A5sZf4p|4;1Zjb^Lq3N50rC|j9_=s$G7^#jDT3Ss zaY71EmNZB*BoPwFHfcebTa>mNC`8?zF`{l8*bIq<ya{<8@*Lz@$P~m6g5VmdyAl!) z=?{s6Jc)34s=FL=1-}V~=po6F>mY+5gCW;LhCptB6bm8$FyRT5Zw=%j$ct)UK8=3; zA>=j4V#qv5E95Ao2XYp&O!=8L`P!YJ(>Lmcz88{tt<blC?T~IrAkDe4LjT2dp?@x0 z=qH*&;XRc?@9_!!pqx-xwAVAf^%W#@ErqOoL?_lR(}l$)C~YZDAnpX>#)%wJA&Nzj z$c2qnED?5*B}_O9p%sce)%SO&8>2Zd6=vZQ%aE=LTAuJ-k`Jr!!206tjKV1`Tu46$ z>Hj-<hHPg;_aNo6i_Y65Y&gWXq$@{=T}%+;#X@*oC{iKgrG%`Ne*5zN1BKJxc{+1r z(*3EQ?wIkX`Ja5z5PNsi%pHIH+;sB&*H#SOv?|`${&itf>T&NaZ_i6fvHsqXy~a|o zX84cB#MBQRJmu3j4#u}WTKw{gvo8#<zIRMRUH|#Nd#*n7<@4Tw6Z(Dc^#@{(kD8I+ zRnTyM=Hz*c3m>h1^~51#y|d`?Gt)j_eph<i_XocH*tsho%YS@8dfl3Z)mQ7DI<sQH z?)5pp9(dx@*6x#qfw9(4h?Xl={YL1qs{T`r-T*yL)z@hBA8Yir8vRj?zD}e6M5Axj zh4f!)^aRBhzl#!lVo{B7W9&K5pJp7PR?cy_@_bfLiOW%CcDseBmVIu=yG{0wwm<T1 z?kt<lQKjnnF0+}OY4*%B+PqRP4d{h-tH)}zS(lr0T+phFwo-GI$Lg@>`9zM(Z1kA( zmYMCIJYTs`&r8iUMyJK$GRrVHDzhNmRO&HSRnPPqT}HbH`6+3YD5t|=E3?*^T|$#y z6IgDvdh#8vi0~Yv%~lDYZjobixTCo0lL!5X$UM}*2p=*u-{y5&)D|sA?akTV#f!}@ zw`?~wT9LKVWpve+Tg>)AVdk1WUY8vy(3m-1mkUj!I&ipVduu9X!4OyESi-gp#ueHZ zJ6ttJHf*pRYilYUHfvRp)m~lBGUu8X8@)D9uFaNfb)gd+E~{CVCC~1yDXn#T%r!+0 zI5oT3H;x*o(Pb|6xUBXiI7gnjaGEc3QO=db%vm{SyJ_R^a+_Uho=Vc$#u`o?qR@@8 zVKs#X7UdKhox$9~>W^kIE-@FHlsu}ca~xi~XVOHOCf}-*K&^XrZGq8lvMED{b-qA6 z+QVxX#b~TDjL~wlNt9W<=o70bHF_9lGS&*lOCpV%3ewpXO)$MnRcR+R*m_-R*es)6 z<eMu+vC$>6oG!3d%tD^Cyf%^LU4pVX#hfaSnC)05a?MptkFi}#8<$k@f^C%rguRtl z9_(fN!H0~8AFtcPdOFc}%GiKU2Q~N&1kry`&%*Ry0x2#YYch?km3~Zkr5K9wGEk|- zOB57Lt*M#nmgA#Tcrg>e2J;44hI1CA9PcK1ZV~(&%6!ZiR+*kFMZk`0h|ET{51lK1 z+`$mVpFJ#0@$J%t1o8=;EBP^1C~OuqyG&~ql`?OmU;|`fJ#(q&wKAPjH_|5Ky;!4! zT&el|t~r=3S(n);`!cpA!mEP*z0zxKFdvsDB#>v7umtn9$~=@j&1yNBuaaKL+l#t- z)OwlK)wc$|&9dA|c^tuWrCiz+fii}NWvT0aiOOOeW92$L7P%|=o75vk7-T#TLolRP zJ%lL0F%{lx@a`6Jh#()k7%lFS`>WU_on8+~f+Rzhq8&z~rX`45j@B5By~Aw5HO2w` zPBAwaUM9-bb&G3$FKoGvmE5S)bM0yZ`IkH5CirJLz-z%qkRNu%P@VodhJ%R=2l<y} zdV@}ny{lLRV*e`I!6Y#AW}Tk@b+{TF%5cyCZWyN1^FL<9aGjq2M$<b&r{|nhaf?pR z`uo7;;Chgc?%D$Kqfj$AS4_e#CKW5@RU#fWGKj_KUx&JPvZH?u=u?N(J<#3gZ>J1# z$#Xk2Qn4|~D}tT^uYmuwp#Ok{S!x_X7U|asdyWE@fZh#qG;(~^$h01$33(3qopK3& znSy&-m%P3M-WA`9-*J$DUn54PQrl#4JI*Z#af6j|M`DLog%IvFv~>^onRE%|^B{)% z9k!=I&Ji9+c=;v={VLa{4}Q$@S~E+l8hM?1<lbBBjr~-Gk!+AxnoH)`x4*_|`YXDB zi}dLHPCrw^{ID%;vaXyH3=n6q4cQlNyesh>NrBHDef^FX6EC4%7s@<X7q-e+*{*>z zgKT4^bkXv=Bbc94&fN5?j3JMlLv1o2*0D;qx+834M2_3>mozRo&zhufgS;NCGAHI> z#e8H8<{Pd2lP@7Zj+Of^F~78L?f1Uk%$hM3ehp2~T#GpfE7Q~=nxAO%&jgIbfR8Ms zSJo(}+V2-Gkw=y(ly8mtNkoY;%070;KIdnXc)9vp<?LXUI|r*A0Uo(S;7r0<!z<@h ztF*0^J)q2WoK<Z>3#Dbp^l6Lnm)MWWNHnWCD={@u`Y@2sgzsoCuKH%V?v~<{agllj zo78+cAJnL=WL4|#mKHT~B-F|)+$(n&${J(Wd|KD~`nGZRztP?X)J7RuZneMN>iTAt zpD~rP2gZd<=A_KD90`jx*L<L6$|wo6(`Z>Ywxv~FF$`E&#v;@PZ?{LCMMCXqjM`Fm zSw`;Vl)aWqmc<ojnJdf09iBDnxC+guR++ov)ha!k)wN$cdn)VS5}A6mOkt8UqEYr~ z;Cc_O*tzmfP8Ql=cGNYaRL0DV8drvPn}ZakQDOsWT(Z^JE;X`ULg@@@J;USkg7G)Q zLp=6+JX?ZyqueLbYP#G5heDOMSM2GnT3&hg;XOm<F-9Ij`U|{@<p^`ham4Y#mYXNr zHLz;rh*3BUeM(paty1P3*q{IXCD1OBM{@8mT*Ofz^xt|s66FX_@u232xyVCn|B&X; zUE~q4HT-=5{4I=tn9y;tudopi6FPJkd4xv5|MZCaj{1MsanV&)>m7c6vGonrJ2E6D zM*a)ngAYCY$Pa$_qxyeYxoUO8njf!yblp$Z|Lad5+wk}kPi}nb>1P_BeeU^9FTD7( zrk}s`^5%bg<<%{}c<uGAzx?+%nzz0AtL?wu@tc;n-rm{z&bzzX-rK!r@4o#9+7BK& z+;QaS`<)*g`>^ZyZ-3YQ(Z`>h`1G^?=<%QY{M7IN@SnY3eEDCe|M;grpZUvIU!VQv z+<6hhUyQi?in#vqS0-F_^)>oy2V6IB(BSVSUO(i9q#JJ<YPfmW@DaD%dRy}CBS)o- z9y2y|-1rF-@0c_>ZOYVX)6+9%WEv~0Oy<Q)EY_vfwi>&`d9Tau@h-d1SG)Wl7yQ#b z3m08D{`)Kb`Ths~uj~K+zWuYZb8_?YXBHIBy0fTw_MDP`m|I$Q*SzwIyXPzIf8qGQ ziT3B6t32!(l<zunv0Ero_8Vrm+qlG>?eLZJesflp$GXg1Znc{n_sM(UMz<PP;&6JM zB5>b(PUTW_l}B^uxm>xY9r!jtIw<w1H|+7^MQBOa>3QGF3G(|IAIR^F>Oel$Xf4Q} zecb@^e~22>mHT5&>B{}FE$Pbrv1X9pLA8MV{-+J(BbeGjKB%J;<c~6Rrz`i-deW8q zXuavmeY7*_%6&AEq0{p_(Kv7r@1ucyWM^WAa(~T`q1<0f&QR{JrDiDi*U~c7`)eSd zELf1C+-EDvQ0}u;WGMI97G)^+*(@2#eKsdJob?7ru-+gad{z(M%KC%1vHsxgtUoxC z^#@0>{$L904~}O2!Lh7AIEnQKC$s)w8tV^EVf{hwID5evtUs8^`p?kmvsiyHhxG?@ zS${B}^#^CN{vf{qOa*7L{@|UgKgj!>1>hXkALKpI3UD6l4{}^s!1=5{$h*Qm@B#VD z#X5Zq2EZer4qOXf25toTAAG#G+7E2P`Q_kN@CvX6j05+A{lT6aFdo28oF{-Mz^lMs z@M`cZcnuhriSYmq1h0)%?&A&sc^~&W(139M7+wlE2uuS9gSlWLSOQ)TE&zvs7Vri> zUkXg(A0~h|f~&!szzyI~a1&?%w}3Z;+reRA8#o;707rn`;4R=O@K*2)cpJ-^h4BFD z!I3O4IEw89rhpT{(O?lc7OVirgC=ky=mhToSAdhidT=th9!vup!71Qoa4OggP6J!P z46q%X0d|4>&F~&D3p@?x@B+@pxB(NvJa7b<52k`M!RcTjSOCrf%fLIqMPLzV180Li za1O@<Si<oD&gFOj=W!f><s1j#e3lP1v;Dwo_B&`}xxfcmt{jXnOdtthEXaHI{CE09 zoc9Mufbn1|m;g=(IpGw5*MVi=KyVQ_7_@;yKp%J`xE4$SH-gi^tzZV&0_K2w!D{dX z%YljNG|RyWD;MPe6TtppA{Y;j029Dea0oaZoCcPG)!-tKj~aG@vET~&0qf}pTu(n> zBmIDz=?844AF!47nD9Di4|dZYJVkr(4DG?#JlKPJa0r+LP6H=`F_;*0!Tw+g7!NLB zdeFl3poi(f)l83xawF4&O-v7NWje5h>A+5=!-Uzxbl_>G;{=+IcrXEs!GxIv_6L)} zcyJ=)!A!;{qdbfU7cd^QFdP%6hv8ry!@<=IPsR1gaBvgD!7U7*i0hN#U>n214u)ew z?dCanis#eOUOWe5XW|?asve97lSoXY$z%b_Nn*LpBr!o2fw3!aoq|I^%S`^_k4~Sh z&f%Qnod~;ET{AgVufTaH*9!0$zncMn!8HQp4~%UF`Rv2L(snh#aaGs(?b=KQW6Cpl z5+|juD3m(E3v0)JBnoI(D|v-vX}yw+4GPjqTK!nNtM%?mmV|*dxWQraqe+|~z<^*} zB8)@T;5LSMI$L5A0*0uq+Zu2{P-m(k%vhazS|_EU-}!lO->ziYo=(<te9rwp_uO;u zJ@>wQuMPv#Q#wb1|C#awrZ*H%0@G#MY2X)u&j9n^f(^P&`l~pLf-(mz1*Si!dL1x5 zwCDwXRp%U<lgi+JjP_W7dvz|OIW7iwyUy)2*AE6|F4+xy56x}BKhim$Y=CjND|ODN zu6igab4?ETLA3$MCO8InP;CLS4Nk!QG@WAtria63f-*OK4EzGkWz}x;Ih|u@Zd+1K zPt%GGK{my8)iQ@osBPhen;zCE1Ac?V0eq0^2TV^+wgP{f>IeK1<qP}@)eHC#@elkj z!25tFshnz=8xH~Js6N2|q&5rLFvsAgXFpB=|B~tf{I66G;Mb@g!1VM-$!%_v?yWBY zK2CEnFuh{F0+`;DUl05q4JE+z$U_Kt3b+~g$D}vFZ_*0{!0*#s3;Yg!3j}_b<O}>3 z@P6Q*strQ6$;53kN9WY`I0AP}Z4t6jUWL0`Z7;ILj>BE6wg&BGO~IX3n~ZF<kKm>k zht2}i6Fm!S+~)ISYXH-i+N**8mTU~*BWg2{t+E>KJ!*T9O;cVYHp8Uae6=-VdrYeh zv<2>r+Gu3Eb-+ze!6s|O_Bf$7;?5eeRmhfFPW7&#@3&&3k?pn@?ugosWJ`|Kh)pxC zHswLMzf0{2yh&|J>Yzt!=-a5+USyk1!ktoEiynhLStH+A$!7W@<p=luYKtyb8;NYQ zGw}Z!$*I<DHmHrZisV%*-)2YEX1p5iF0~oSmRt^ZC&>-?n`#r1%~%e1oa6=kfZAsC zh{hJUzpA#|mq=c4?^YYpOLBwzagrDC4w4fvoq^a3+@!WM+0tWh)3aO$fg4FKzz?fU zO*ZyXxWA#cB-^NP->bGZ+1@8>#a3LZHu!X{*o<d@M|pwbHtBI26PVrsD+L}`+nj85 zFWg(yMyJ1*R|fZ1wMEOQesKQ<^=IJklYRlyIfoeVKDFh^#vg?HPPNI&R^JUbo&6XA z{yVBC@J~o@fa&%395DUez)9fONne0}rfULPE6l*%Y{=M75C41&_si6u>)a;&73&qi z&rtsbeni(0w6<u5n_lDX2L6iL=3k(GTqob;$%ZD|Jq!0kYLk<#KLU4FZF92u_rbkO z*Ce!78Hf8W8kc|*x<;Y3OAhW9wfX72>SJ*4)U^st!6)Eu)3pq(aZbVAs%wSSR8P2{ zAU^Be=H0qhp*2h?+;moE1#lnnRWED4An*rNJ}{lz>j0)_@RPtlBz*%uK>AiMYmmLb zbWSCr=RDf@^oqe>O$^6*iy)uOApf+U^@u2r>iLbBeU3x0#Ove}JqCaIpkKGfmlHn* z@4O3^Gb`IPUpm`Czl7$SP<K+@NsXUU|CHv}t>vVRUd7uL4=~Q~X&QsS&(N=5aSxwF zB6qLKA*$)DdP#XP%_pYrPUUw%>)EZ}1|r6=rW3y6ns3DD)cQp<eV?Z5(RgVM?^Qgc zeC$yEhL!(}%0cq!(sDBD&M5!A+8%LRE)jJnG+oS=cQ1zzam)_>qGc%0Dd<3h;Zyza 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%0DeRrn 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�oll(+WDz<`i_E^xssMl;iC@zHSW0 zLd;peSl4F1x-KP>nWkg${z#|Lm1FF74NY#gY`-D{F_!H=D=!bhBg6{!gRq|s<n<X~ zCf3XR`vsQ1ALLc8Ib(O6tsCJt0@^ta<JzGBL@quV#NVu4hOWtB$}z6J9XisI@M>69 zo>qbl(BGr34-Qw4Cy@4}TqLmKld=)kiwL#&BtR9P!`r2P6NfBH<4Doch*!}A!p~eK z%I|*6FB|{~53@EyG1?U_?uKqL%@HzyoED!=EjAgTdn*pX3oGu%z7jga9=S}h*O<iT zx)8q6{)s4^A~pAqSWSmqcG_MRs(T#TdW~`IO1r~UHxJ&6m9_ay*beO;s_8h(Onc?x zUZv@7&fwuBP=GTGUERSctn9SZ#v56;bVMf$KVw+v>EHzD9htBPKJqyH2+<<}GDJwt zdW`Ep$IMVmR(3{e(L)k@nMp1?13<-X{|`s6=kA8u+LtThGmA;lQM*=-lmP-6S^~m% zfjmFh33M*&MUzvGv(jJn>@bwY%Fcpx1Fd9-!rFjP>?(-73_Wx48T?SwD;Jwm%S?tE zBXni(BK=*D=qxwsa*&32HAvisw_WOt_N(GE|3Q`=6`lXFI-&8%nupObtmBN|0e#8g zHM0?2({>p+BkaIo=&Z7RQa_3TcY1<%V+|dr!|*PZDPdW78wQHtcZgcpK|ut@Lu8a( zZ$tM95inlLR4XJ`TUaVHg>%YGNUZ13{-hskDcv8XQ`mRfqu{Rm7mtGUH08RKP4y&3 z)q3T}crr%qA%lEB!dg-;gQ2uX3hTw~xP=v1)Yp6(rwf5Kis4Y;eh^iop*t|I+i)DO zeT4$^=-DfUVRGK0y3STuo`5?lARPunlI%Fcn$uu04DF@_+s&CAhqAsfr}%80+n>w~ z@N4Zt>U??@xs^(^iN;M~CILhAdYGf90yu~9g7{>@1+h*iDQ4-fX1aV93Qo^iD2UIY zbzuJx0F@*@yMuhbA~d&>ioguGNJ)alZ>m#RBt334OOJ<8%~0wx<Bj>R%v61S?ftB* zyK4$6Y0ohl=2+SN*vi(Vr@e1?n0>gbGu-}J-Bdtej?q5Hx;~2+Qk|gu3attilRfo3 zt3D6@r>EwbB6izRR@<uL>^VwjLYvRdFltA*2jm9ZG^39EZ(d;^OX1wLx46lLwNgbl zL&?|CHcFHIuCjWrHph1>PhP~kiq$%HtgXP7OVgLb@J1#>Shq6iayTp(*lg?&Yn2z+ zGJcGfbPH@V<R!Lg@XUm#weg651W0e&IumQlKBC1kugzlb^xp_yTGx$nv7<0&I&ujR zU0_ScVcrYL7TC<P*H%P_vT0B}L@cmh@=-sx$N;Ola&`=|{VGJ+3Q*gzz-D0uRCYQ{ zep;a<8&ucI&mnDAEFHd^$9Ci_v87WzAO+UkpI(<_Utr5zhxx4lE|XwDTKtNsA*IEi z3H3d+?&gw!={4mRtS%r=nzsOrmu<#$L5#6M<z0sJ5Wgg?8OmA;kd{H51!ByA$9P!7 z+z=?RO=5>#)d_(mwj!m89L^ZK&^MQhWA`2>N-kmtrLYgO-UnD2aaciZA&GfxCt-#B z;5<O=GT`?F!mfa@TL7^IMBH@DgI`tbZ2p@8yZ!6ZU5K6IB4L+-*e$V5P}62$6g*eK z(_+{UP#yw|R=ka>%xOR<DAa?5K;GHgd{Y|_`tA<+ZA(=&%L&U*kYR<W<Ec-E)l+Jr zurN^9E%oW^j(4rZf#YZZ5LWU-WbXMkH)NioW?rED7hU}|VG7pGjw<6QmG_gd7f6q+ zJLUqa{pezpYDkA;P$3&cSh6~0#Ab=j3=|~mIb(oENGG6z4dYe5&p=sG={5oAwuEq> zAV*W7B-!i*oSyzEbwe;7ey6X?gtzp7iMf<;4^eRfmk~=0e4C6pTb(cgSaP6%kvJYG z;_N(-Ygj<P7hr}o&SHy<;6D%>@x~2qa{d`7QhoZ`djd}EM1jmjh7b$Kk^0F?*CaL6 zVG1`kR9Q^th|mKR7^zQzPT(<zwuprO<h*E3oQ7xSXH6@`iHXPW9$_y3`NabTo2F-9 z%svtvrk-r_^^N%ZXX<V?n*;0gTem+6FY~r6NDN6=LUmsP7)R*5m`boJWBMzEpL;#< zAGv8z___Vy<9Q&=xmSvr&F~q<=yUK8Y)aF{6dh%flX%1~h}elcDoqJeNLW81Y-^ly zpJ1lGRz0Yr2dVD!HzD$tpuMrM1u|tq7!P3>1jBv&Y&cpUX{PNex7rrKe)vbgORV{% zV`*ljMiG3}NI{esN%|lwMR(%v$s^2|6qDdH6S63OAf+1miRYt7V)TDw>GeN@^J5aJ zrC^03h{msv&op6LBhZl3$*~C~#>jVG201V3pT1}VrC*7wn{o6h8~XIS2tDyfO##6{ z*1?FtgWSj7eD>Wq`}{Ds#{I|L+z{EE#dMoJ(1?R8Dcrb}WAn&uGmoo(3;*l9LuviO z?T-Wk7?;)TV$H7LxIK8sU8NZR{vC{Q(cO3Dm-%`f+up#fam(Mu89?B>Tj<7_iELbL zQ=K|%rV3r*-;>|=PP9hEH*3buQBQ=9c&9IpyM4bna--f9qd<~$loUwR+@I$0+}FB` zADi>tKV!~Z%2=tqlsCx!8QP_FH(uP3DD{o0O?-O{-Lb~qv3tT(-lzu|@hJbQYIYIO zgur)q3uqoaww#BkoB}chQD~Ca<Ca{ynx8Ea2!x9z1BuDTK=6%3Bw49T3H}AhS!fFU z3}K>5Pd$Dx(N>yC-nosxwADYaQWduao6#V5eU8qXyd%aRWa=Dl9dwaN-n@%vV`A1K zLEiEz<ukF(sInq&#+4;=o7mO{z7sh*@XQwC)9)gDsv!H}k?ON#LZDiw)t?ihwAvK@ z9m0%|VfjZyhKgAG;$+RlsC>Wg8ul%@Jt{Z4y!R~u%4?1^7KQ=>9Wuq(21~-T#eG|V z@7V{H?p~aC^P2~%X-l-nu~1-1RdV{4uoEprp#2A@(e4!LzMNU#eI=pRvTrxf{@a-B zFzz^M?Wf)rLD9ytey1gFz{Hw=cQlls;!)mTz0R!FZZYJ5@>^iSmVE^E=-B(!Lo}-z ziQG+(W{|Tra>=N?I=w%<lN??`6dp{>lRP_sOaRttRt@(7EL7#@#&Kis%`Ai|qR+ao z2OIBOFkdK-sE;8ynDGaMdb}tDY*l9dnpP`qP7`%Ot(Ak>!&mJkzDM3qEV@#+Z*lgC zoblrJ8oF_c8+5fs7<>!SoY*L7w#ns7R(_DL(*={FX8sD(<86(>nj>Fo%7o1J@&0#$ zQ?tW4vubVGC(y~&0;?5oa!E6+CSOX4QbfM5g+i$%(>}}pS$LgANqm@l-*XzPD*C}C zqh>I!e}6?HPh#$8crEg#*_UDGaAg2%s3d>E%-lJmuI6@>4~<UYb;gL0fQXETlyof? zQtUH+O1vt+0@A{5OrsmTB-v>SnChW+vcDaq6Mdl7m;#o1+<z?Sgaqo>8SV6uzQEL| z(-i#)^W;u*^e0T-J1xv<LG1^;3Mqw$dxuEjVctY3Jk;l9HE3k<rs}ZUrCfd}LC1!> z0~Q%FLpH01usLYfN^UD?=M(6f49Is2<U^{y(=TUwH0Pw4oMfCUI6hjrbSx$MGXt|i zn~Y@0;0DbCMS6L7<sjo*PrQF(S}em*_z4Vj;o4LwG^WP1vaP_eGb1C{-sb;%z~mqs zahD$wrH|pIwP4sz_~+QEYdqnbh!?V`_bOMuTAiZvSU<(rFILlCqsS4BY*&vD&_7s; z*N?8j)=QxTUrysi@5g}vwg)BrMxu^=D8GR}c$EAWI?PZm9!!jSyqaZ?_&(mHW^BDy z#=jj-#Pc0~x|678jH&Sqta0Y2syd)jysW=Q_8{~Ea$N>$6&u<4#)JLI)f`W*XX43q z(f6H5;cn%fCslH}mDitC$;DBun9gfjx`Ta&4mrZ!+f__YzMhENX#5wT{1zcgZbcLw zAPYsji?<G|a5%Q8U=&}4h8N+pLf_9nH6GFa%gZo;;9TcKf1Fz4aoVYm!|6y2PUTAQ z3BYLriNNV62&ahtOOC2t6Q1nJr3CNbwWmfbHX9dNIn%`LSpYjf2HXpfBv7b#d6r@h zxp5aHR-TRIL*1TSBb%`&y9ug28s=MAb8%%`g99gAyz*ybD}MqR(lCssXstXI-t<oA zb2qKnTc1!l(^W$QJ;`h(%Itk8vv-2%tqufU!OF~k4H$Avegl8-DEVJ4$c;H|iMrrC zNa<8l-gK>$MIhb5jQAS7^tdXR<;u>-iH;m&_7;-BK26+qw2$_dxM<%wP31JZFJ6KN z=!f#1vHjT>WykaEV`}exoY_8Lw$pwIneB_v>$#`^`$)I5RGOyqE(EIM(-~n^sd8>r ziq2V1j4D;mtRlX_%8)@Zz#=nSY*Kzhw+GXs{{Qan*C0!kUqMFCGJ>%SZ%g6knT2a$ zI@Q$5FP27eB>Yy#H%__idDRBrV6Afs7Y0;ZeSwghI+!H8m7B08UTU4AR>if>x9(9} zCydHB)Xoj$>1D?bZPgeBaQZQz!CHN}XBz?O#LG#J=fl1oK#%a0oo;0kozFebK9dgE z>{kDQNV{F87NET49;82l^^SDbt8KOw*jAIB7*ec&S;J7=l3#A729d_X8vX_5L0a-s z1LAKo!@mNv4wmv}P5kgC6<JL44e>mW?ci6qQ<4nLKz#N;RYme@!R&bzzdeUq;O!)< zXYq!STVU^(D&OZ@C&=stw$-r6|L#<ES#g?@Hb;}XzwVc`LQAUq43qw_nih1VxH80J zg}5%XjN!?^w^Vq8MP8vfvi?&@S=cCr!eYbs$f2=bY}l;ppX__*RQrVh(}R%Ov?OtB z;qkDLZx1Z6nUsuf$l$k`uo4ZJ;fMWUdS0OVe)%X_)Q{rBrl|O2!uQ|<o+5lyc=k~0 zJ&-!Q-de8gem@ap|F;<TGC{CLA<R`Fgx6<yIw;#_y!7Nw59I6djNpBjaueTORUte; z5R6d>$x|W+_&BNAkJ@F0={^%H%&-?`iVbM$#WU#?=DiK_f;3n)X&6PYES@6zYQ%yI zGl+B>M3=`(vFAM`F`i8NMK`J3>G`GXeMP>+_t0X*>rZN87bX4!CN9kE2k^x>fIlFB zHk6he4zDW>7vLeHh0haT;fFnH6)mw47sWx$^Jw&QK_$;z>?eZ9C#x)5LaEbuYAj#I z9rA6qEwn;6@eQnBYN=O4>aJSs?)9kf5&rcff_V>w;U2+!4}`N2G9DGo4?y@Hw4iq& zeDO&9ehu!YH|S#b)9cA<IS$j*zb&zu$ZJ&Xh#iskoiWJl<0x<68Q8uvkU$w)-&F7j zZ{H_;w|KUk!kEdAMC4@~l?PaTbhj!p1}T&#KKr178vcYQq2cdDJdZ(N<9Pw!-ov+D z_|}rZ6^fyayo|qJ!!NJm+ka|bl0AFicQDb@L?!Q8$y@i+c#SE5$vq&!U7N5Y%SUC` zA)a>3|7Zd=W%${FKkuiX3Gnkc{+v%g4Pqm{codA976T!K5w}Mm=uX2=E2cEz+i-ld z;+ueP8TfVudzego>&CZ9`1U2fO~bd7Tw9v0HPH@hK5etJd@JqC=cjveA(0!mu$7M= zPSGty{Q6Am9}U~y@FV#az~|s%&oX?>_jvJ9;Az0eOwSH{+~e7WkGnj3@R8|h$Hz^c z)A+c-(~XZbPcJ@99@FPUP21;4&FY7Vnha_sg%a0K1BUI!5+{950H%FT0CGPk07ah@ z02c?af&knR0brIw#`SjsfOZ7n;aOJmEPkFPm$F=ZNXud&@4B7_iatfrCfp~-9tS<r zYVvo0f9fKAr?pnk7RvDJhtNr0ISjaTGGXb$-AXne$ZK`M0yVY7vxCxomvWnf4|;ad z?{yqnuoOMqm8P@#R#!>m5pU{Z&#UykoW5Iv*`5RR+o|Ti#dDG)b($k}mLt_eiEiRZ zQFrQA(o_`Z3+QF(;08RxFa?}?SHL8*ImUp{&OUG{v$&5DHXl!ow(N#qkR&ighCapQ zVx26{$UX=N-7aM$PZ-zQR!&r1MtXXw0=piB-`i|EWBZvoY8vIGMJc*pJSLcb3*nCt z{siF^gyE|MvkSr|2n`UnL)Z!7RR|Xz7tAA`5X`e6JORN6!4Kiz;F|=`FX8z&2t5$4 zLP&u0DG<yMMnf16;Z_I}AY?<B4q+*TDhMkfJPyGN;b{mzhVZ5uei8GI;nxs$Jsxv^ z$rHaAQFTOps#7bR%Up!XJ?+QG&*xfW`@6MEqN|da8RdNs!0>vn$M_fgu>gJmOYqpH z(8LZ0rqr`SBXL9`gQgic#jC;@_3;TRrE?a>&cUiPBb#NYSh;V)UuZ+(PhGfqr0yN* zAmqX%;%IJ0Tdw6HvW9Nuk97XX;1AnF>Mg?PA9U}4b|qThSufPuOIb2Y-wlgq^l}dK z#`vw3@LD12Ig7tJ;nlug@V8a4<jVNe(R-;?(K2as+v~v1L2sf`i;K#I0==)HcO$*8 zq<7Mv=KiP_n(2LEICi_MvL$B!O7j6mM*SVq+wI)@nes<m_mKMssNG4a#-d}}@t1Ep zbC~x%MDdkk(SAA4BIjA<ybL)nUCy)7ZDdM_J5`E<yhdwIB*?O{M!zeN;4ZdVE#X$? zLLJ)iY#w4YdagVV{hu-&6Sl}3gf_BLUe!`wJt=-yFm+%37sS}J|3lk!RV~$M#aF5M z30GRF721;Yd}pz$C7yp+{*p-f^O#E*P`;p+Z*9|&MT?eyRLMx9K`Pn7D_Iy{$>XYK zO|7*pN$6KezWIg=g}2GqMZ0SG6i+u8R$>XSL@`wYeFaY0!ckSXRzW%^pr$ci$QdKm z2_w8|AeZtqh^yk{#9d9dOSzeQs=zB7Dt?PN=pq%rQa3<P-_m9v==pr(_Us6q>VXcL zm$jm*?Yr7`ee~c1;I&j#RkjSIM>lVc_kI};Q@NZT?K@L+?l>frMk>aPcdlEjVmD#S zp@L-*?#<`i`wp-8Z4vHy&_)eW2I;Fja;KiVx3ET$HS;_vDzd>tlt($4MfgScqwy36 zt?5R}^t07yXgrU%!|8M7g{s78#Ub#;%7r^(%jCdM#l^AJ=(XoN9L{YVjyWDq`(ou+ zad{RikKGwpK`zh5k=o@m7hY|?m18%aV`n5$%|6%|t`h&Hxs8}47a6ZXi6esu^6OlX zYtO_9viKvuTb@J;g$G${V;JDe3yo2E=JRDb%BADh0-Jy=oFA!h9&@3u&|7#V(s?CJ zRN*$AffjJ7x%~Wg@alflzqV=nUf{Lu_=0Ln+ACDwsvpt`FHD1|)?|dX72rGL&xdjS zK835toXb8Tdu=ls(b3=LucPW<$wfH#dJ^VdyVeWl@OnY{!6f1fJ083*qJR@#Z&ZFd zQH#%uU)~;>$o=^q4`wPWXC<Hl%{%b$l%>ENwg4K6X9@fZPhv^o4(7Ejz)KOwU?p@V z3r*+ZeWq&KVpQ(98m(7&Bvj`+5N1HIK`84N@cV%Mickp-Ge>;M>VY<h<uY|d@RqU! zz}2vRKH$1!1K_$wsMaZOr18pkK!xsrk(u*nu~m7uH}b=%RDG@f0L<r^m2U0lVx{p8 zF2(q3haSM*0pT79=^Ntfr)nvIVA0ibn0BmSk}5joT-I;q0x>o!>r=L{R=L*5<q~x= zx#Zl&6W$o@zcHcaQYn(SzdVi5q`&@ilqa49#mW49iq>I8S^@tq%}($okr=eNm7FPD z0y@}Xr5JU@j<LhQ?8$d>zqJ(u_0LTatbL;BKB)YmH^O0Qw!xPY5iqy1>TVAF@Tbc| zK;`0)vNc-72Y0ANM9+M+@x?oeIW2bQgqoq%qsx_xpVM?#uANX-Iheg_9Q9a<rSV9u z*<LcCPOKhXqU`5+aNwUO)3>oKFP#<a=#}%#_-5MCChVY-j%E;ty!5s_vdR!2AN3C) zHq>j@y}cWm)0*S7_?Oc0lYh)UFCRGiPVrMnQJYlo^QiO~6L*aVeWUm7gyc$R|HJ^) z&?GNR$G&u-g*nsZ8C!q~a;>=vk75?0g9Y`}s{eVPyIeW1daA^$QR&q~%9ZBRe1Ga9 z`ouAk87V3Tm|yBmcPn|5(UF=7xpRyiSLS4*zZE(ehFFNIGAa|JasB#BqgtvzrquCR z>ihwve*9Hcr79ZUp>E~=yGSB}B6T;^<r+VQK!tv~%w|;f+^*AMOjYHe`tEAU3H|X! zdJcwfsayFH`y{*{l~ZN)CASswvotJFnSXm6icx>KV^|?t<rrN(1Qv)KbXy^TB`+Eb zcLKcWxUoOF8qg|@BpIqDL3?*!bL$8lFet13#MmN}a`ZMnt0MVQ%PXYvyt&deBZsIT z6yne*#B|l~4nk~*K*ajCe#S`=22#Y-Ifj3eqWixS%H3SuXg@K-%r5f*Ag@dvjqo59 znmOsiEF)Ez=BOGB-VVAAzs&Kx0#aT5pj&xxb_!o{!m@P&EIQx2QQh2nT}?2jUxHWF z1d*}l2jwZMhpn4DO=_lL{W7grGeH#>*r0wVR*Dl3b3LrU0-IU+-6yo$YSsaa11gMz zv*KZ7_lI#_oN#cZ_(bys@k_vSVmrZG$1XvuHMS;C3ar-$?<t`(ia>!ay?UHWSw|qv z^?sX0=e;4Y#AeApm~~9L{9w(nt-|EIElJM$8IyIsuUKnVn-qGm#?qRki<JM`cwT<1 zGaQZlnHmWk>0Bu;8M$ln2v`i>HF6p}*AGX1E9GvA*}rZ!)bT^C<I_`tc335#pUGA| zyn3Xk9dS-~DSw`c6-;kzs(m0ZS6A;BEDw8^7Bx22^#n@*$cO9hK-McQpAFG*G5`(Q z8xPi|kR`IL=HPHLB?d2vr1`;_WU{$D9e*J**szo*sT3>XZ|Go$=GNy-@?NRWndsH$ zWgXg@5Lm3=Qji*MX!2bE=2!wHdiA_xt3D4RFJ~Rf1CrHcl+Z4$TbYWCA&p327SLqt zICV80oHgKl3i^L{b{IH>D@JUYdFWRr7nZ<yp0`2J`^+$hTUaQs&V)f$VEcnNGM80- zwXj^=b4s;0dxuFItUB-C$+@|&tr7+?u5ZA~U=S%qukzU!vrpiq(BG4FB@<4)@m#~+ z=}V?t6(GTzgaqFZcAhB37F(o^@Ov2hm|PC9xfb*d(&@{!xA`)m)I%&EwJe6(TfHL7 zg;(GIY6>q^m6|Eu>?SF!uM(ecs;p3(9H2NykU}H8pRlI{sc(e$h`l7;`<}hT>TSZ7 zXtQ_wGT55T#)})ru#K6G;f*8MoD6$jhHuEF&n}&^U-G|L_oM8lz*81>IVZ_$wqNn? zV6$?iI*Tr_-s0;H%(G;lVCPYBzu1&>zr{Pweokz70B3VPV?MhFl}Z8&E&RLh3wxi~ zh}VPdEj7d0g{<zZ&j9g-zAN^YT4PoVAYJ6U!sb}mQx?E;6i&&2_UmBCUZchO{t5_) z4Mr#dkPsWt<~~qT@0$qp)B7?xE;n&pZcuR<!Eq6{b@t({h!z|U=FmnVT7b4U^C#!# zxfrsN_3!xm#zx|9n}hsCB9rm#Pi)9F;37wCm<CV#A)n@Uf#nG><4hHw-ADSJ^}8Ek z)@f^e0UlUsvGLy^KIgtnG4L0ZlR25>h*^};w<OEUu+Pa58{6qU^V0I(OULbw-Wrp} zZ!Dnpp{QAEE;t{f=+uOQ^KsttF^J4~m`ea@Ky30*f<*q)ca9ua1dWjV9j@Z%wa|y* zIZtKQqyUCwIvl2B*<qBSramcTUjHB<@exPj06f_Kw^iv4-p}Tw%VoV(U<V=xCC%Xl z(of&Hx77j{Ti#CKYeEx!NRl>Y>inabqc{5^>%e>UQcXxFHsB^)&;Zdu(E0X0-(-?| zv0+G<+uyXehz;GyerUI1Ll1Ef8^-@cNs`@U@2e7Dh_(kBI{FO0oAKhpIF^SEdX(C~ z*!PPKy9f&UlRPJd4Zg9chCB*n5Ai@b*&g$KBT3yRlDen3)NSHYN1TgF-F%X|QWUj$ zAiFc@1!Ol5)e)KkYb@*v@Ew}hX!~WcVH_3_X=3of*ClO)_opnfFT_56o0c*e=nv)- zv7rwQ1uPFa*;wgmNP|{XLO?NSX;;NYbiHG5tr1yYRw(Pz4&d}6XlkvsrmR-Ff3}#K zTb_lj;mxg`9R(@a0F3c!vC!PG%JSE0mAB)R;u|Br_-jP`eyn32HMd0w2gscBb-(7u z?^s67?bkjdm^&bxg0Kg|oswYI=@SwJ0fYKyVBvg-UnKD~J1LFcV8EdMB@8zIAIehM zT;uYtU%iJNWORL|E>ygmaIeYdg$3GU($m5S@5ANQ*8c0L<9rrB?ITzRq7y1jmrqsW z6GlY*iJM%?@2u*^hmjSUc+}6eD3d%MCu0?O*QKJRD(1pnWPj5;OR9wmO=C%rcQT0k z2;3Jl_E(NG{Uc>K6<&W8$H+d`lOK{wBKPVQZ!Hig@?^|jwCp5>SS{l{AI7U8;_P_f z-ZWQeB)X1aBFv?qLn$A{78<K$;d`t#oP=wM;iNdXC7gsSy#fCG%H7o_cKI6h|IHCt zA)yi^8Nr1L*h7dyskk7dq7g_Z4b;+WA@cZ<ctmj9uN3|A_B3c4v8=TsW>LxS>$_2| zYa`3O^@w9>xzE9@WRt8McPt%7YHz}B<ee|W9`ZWzQoeUoj?p(FyxJ6AZ&KbKtyeuL z-|4hps6pQ#!S@(c3|6D5xEB!4ndTMqq$a_B$lp_0L9_JA3VvG(d%CK@?wj)kgV>Nl z*A~q<MD>xkDHHCxTtJ>|5=MxPXjctn9Y&;6_*sM*5zOnRpnVKsH|}jy&2P-H`o>~? z*O-*yT7AXFf2S+}-f2JQf0q^Fe(Ho+iJ^9|XrNRSl2inj*xP-sne{*1sq<U*S@{OV zsSa#dd?coo@p@zY%Gk0`;3?mTNr~1Mn&d@BxllmAMu(M5+(8)4AV&CJI9YWUrzVc^ z=Qo!#Zw?zp^d5<tsz7g;zCry|ns+lNA~t(KQ%KWllGPDW6}?sq2+p>5`0O0lG!54a zA4KxSDW$5YdVdZj<7(e1JB64gwBTw?6ACBseSv5biaDtm;J<JJ$M@EMiqg^#{y9oB zbCP^H{ZPud21<OT_9FI#gi{<sPha^*2=T6E!2XizK@u;BR*@lAek7FLzo)Zk?Y!}Q z)kf-n6HYN5UG~9JHXeQA75C(b;&yT?R%pyVBA12Oj4jZZU91wXD{D7UhT1<68}?$$ z*$6mf5+*k@y*=4C23mCZDU;Hb7HK5kBMS;RIM0z<1ORF8@V~|BKcPSUy*1Y)_MJfN z+lbgTj}JoGg8r0EBg)=%S*0ux7G_`(nxdhF8dDx1Y!_=Lv*o>ALtzBoH-$5?0>;M* zja2)Jc%(BnvI2*$`1?qus*L%(IX<(`j!q9nB@a2<4T4w1l5xgGUc#Y8uQMv6&{$Y9 z_OD58$vSP@kv6*fad4!@!IpP5!-@k~2*qU|L?#;L;!uuQOBQ}+YzYWkWJeEnggs<0 z04J&^YKw`T#)!QW;^%uBKW#+6@x;%ODnG}J&^qZNR)z-CI4^sFm(84)1^sy`HvF6q zNQ3ip7IXBtxq~NVDA%eA7Uv}SRUSV*2#*&J&f}SvuEpaJ8Z00-hwP%btqX?Uex%ko z{^;Qt%4!^65*s<de=;ieBmpHVc+*49KZTs1&W0-ULY(bl!$mC35MljVV*S|rf%OJr zJq-A526E9-F_7_T8siTgQfo4x<%V<YwSQ#!Fk0=A$&qdKwVKw0|EOtcWG@+n?03eH zov6#oOtJ+CTxhrZ8{!bq$azDwz8W!;qfycQyaxaj%(^SIaW@sEHk@Pj8l5=yob&hC z&(+L`48|f2#wjl4lm8`w35)i7Yf^WhdVy)T6V{xv-hMBPS0co;30tUERgv)yT44cp zn)X>WcEm#16ASWL736UEY=+MP)1E>OaTY*Cv{i^zm4nPTRD9-;`s8HPEV#FJ{J?tO z%nNZsE&oCTyEajc(Hp>-DC#HNgFQy=Bs}v#;xr8g??_J+UL_apsup$rbD4btP^J)+ ziT2|)cS<!-x0}n^g@JIk#=?<rtco|N!|OAbaLeJi-5P;03Sr>o7$?98CMtE8dNoid zu7%<t`_<PxXa1l~ouBjbniZSS)R!^-q<Jh=pPw{Wa()kl_YjxEx_EfzO{g(!bhRa= zaDaL;6P~WLU5JA@D8E(z)wJC44XJ|Z?((j?U>qq8Pf~8jMK?D$=FKXn-2$Ln2F-^H zjo~S~!)pcQflI1-?1n@n*q7+by=pLj-q%*1_)TjZKDiqSAM9JO=A2Fg>reK!yhE_Y z;aia{1MG2`q_fnCqaj#nnoexMMK!l$_#(WyBYhPfFUU2$Xs%S_*;uF(L<NWQ&I<R} zb*gqHP-8hWz+xSWUm`sX619*^_pHW?8%*}>8Y6aQGj<0PvcqmXv3>4><^eqoh~Dc~ zCSKHNHZ*8}7^mGA^6!W4yiFaM`4jDCM91fn(nx(dPojP66MsSiYG!nJjSZ@*1XS{2 z1|w=OOh%U>^4@aZV=a=V>%8-%O%PMSyRI2-LSPagkQ+f@vC?r~Q-B`sE>+h2uU2;x zdL9B;c3-c*m78Px?-+Y$IG-SDi4EtG?r2MzFIA8MxKz>bLFywlqX_-$fe1o?O*x>W zbGPO4S%Tdy*Yqg!|IF9m4kJ`OT)Qcj^a9qr$t62_l_{xTM^2B-F0THt+Q=_xhVZJS z8}CGJ|BNo?!gA1eqsv86V?WkIBkc|QLP|X~&2+#xHJB3V0f1*cei=v*o{BLpW$#fv zn$c3#^^g@Y1c~<F<Jl-6zLl#?r7B;%2`g9SJ-VcVi+#1FM%RDdN_Hbi+)`GDKT2pn z8rYVD+EN>VceBfBt$I5UzzAzkfh802CCV60Z{0TnGC8F-!G6L2vAT?^tkU+KtF-Z~ z1TWx1v&3l?oyZN4x5zZSZ$Hc<)kFH|o<l_9!rnzJnRY|HPU>-U%iYS>ZcU0NL-*_J zt<55q-3u%$)L3SB02Dy$znHuhSE({wYcLy<oG4v?t^!)dof1arIfUj-%1{5Oda|F) zZBY-_U*O#04u*8Uh3m+rOPBSvCYB3gWLn-8qAfjo{Tq3dH1;o#Zcd=GsWeN+FI7vm zfL^W2seEa+&O3`Rp5|8O{tY>s|2KZgV3xktf+KdW;BqV5`&6|~T>HcC+UW0?Hi4Ye zD88+kZ;?=YsKWN3Hit@T@|A<1pCUVx_~!x4jDWtonKSbmtaQ_?zl5-w4}9GJmBz=J z?B0bNCi40B;Ji!)Ue3|PaD!pt#^WrF%{MAv?M1~aVCnLfYw`2&-fzaw+likyaem$a zo!C&OBNkqXa`W%~xf#dLZ5lr%jh{7<sSxmUCSiWBTiF;yey$Cw{M6N^AwPA%zUTU} zv+kd=^R0Kj9Xt8`ZF99wwLv(HbUn<2v<FR}k}s{jH%PUaI^VEropM8mx@noooS9IU zWOa#8u1tMtC1}gt?NYL-E3{zUORzYM6F-W?4cL!GAGUJdYP=_#=N+s*iK@=SYHpI+ zD`KC!&Wk1|QRRLrbj<302c#MJeI(V^`ziI+F6GQ|J-;$D@cw#Sc`EwjIZQL+5d$=x zlRzz3Lvu?E?5I3i;Pbjn<phz>*yhaC4V;bqpZH_u{Mq!r${#abjgIAyr{muQ^td=e z<<WB|2l8kvjfd74{f1cnEF=D`Sl;sPVE#{wmQlqa^^oxD6=-<Cw7kWo7`Z}`rcY3! zEfJG(H|IX&*D}shmAor7^4`KPcOM7*KGN!!b&QBhnp)x~xQ@DSV0%P*k0xxx>&%Mh z1C`|Ffh4~cJ#VasCJRJeibNfv-1?qM)TPY1G>)idK5PS3%_SvJKl_O&O_jHGlnrJA z>y|1d9fOD*(gPPGz9eoNMBT|sR`*ss1uvj#{(tDzEeG$AJw*_s&FV_a+0tn+s83`? zGqNwz+^qIyCcK939Npp7CgpK0qwi)`+>2YYpF=i2Us=6W`HYxthKV+JO7R-L<r?Gd ztE%+0azqi6(eJAST{?iEgU`=Z1xE3Yar5(Ck8=Yx#sS)k@$!C6_04zo#ldp{yzC~f zw}$t7VFvpzXa^#8(K0wZRj>KUcz8N=`B%(qC-BqJo9c6Ptl66sW2U3Jk6TV5g;sK+ zLzBbO_~>`PN%?=@8&`h)s_6Q~it86)(Dlo;;r%=w-lSFW_@LbpU!;Zu?2ml!>p?L1 zhvnTBUtZH={mN^V7h1nj{S|fpe@`5|)sIE#k&g5*4oVNz`$;0rN8J(N>g0XIKHV7t z{>&a4Iw8#k@kzr4u`U^&`DS=2G~-(azGdK5v=mZ|eF1xuwN~Y?y<B6w(29q3%UfXW z3caqki)$Pf3hDxne{3sEkN#l!>2hH@e=k?&q>+y7PvH^H_L$FTy0L&>B~P;fN}L1X zhiaG@^IipEmHPb}_B?iwQ3ljHn}=Fw4k?uE8^@e@9RGw%d2kV#&xku9ltO~9lpEMs zaE&uWn%CUO77Bcm0Gh<jit<(5tqknY1#Y9`E1I+pJcW$EzYrE1(8oQgruX4~`)^4h z7EtJ>TfnHBEI!-DuL1A+cL6QfVA^--G!g1Ex-B_{?EOJS+6qZ)uIo2^3pcZFIGvb| zg9)?UY4O`il>2z4w1nR!`z_G&(LjvYfVK+Q@UGYB=+@frc$HM!O)L*US!-O_=hOUB zc9J71^mGJCf}8l7jHgSl$)t2IQ99a2_?nanjlsqLA5e=pv~4;7fI~~geG6Pv)z<h7 z3^3}*85NBTi<GY9lcER2Xn+D*p&&V9sZh5Uk(G~gL=zO6!5mH?zDlj`?QtJj*{$xq zX5LDW646pqZ&{@2y*;*#x3Ek>k@?nI`<yf941?PD`~LT@zr&n!_CEWu*4k^YwfEX< z@gpuNlrO$)1V80sr^f`L=2L<%d|FJO+SOCEkj-}qB}}FSirl<`8z`bLL$+YE8oY>~ zM=p?yaOI^KY1zDZBrP#ysQVY=x~zX4Ro1_f%l_pXD8*t9lRm?PJOhqN7hmpVpYr3K z-XhC%#h4!Cd;ShzaOW^c54UljEjbE(>?R>tcTxy4yI2Z0S;P<he}BnhpZW)jy&SGM zxTHVw>ptZd(}V4eX>D(FF&>%lEB>zVA+H$!vMp`I)-Wa^JSypTQ9Ax*>(zAK`S;4> z6}t1W;}gn^4#09oXcL)c__#Qf;bSVM+`AbKAC3OF@J${WM6!Xre)+b9vgD6g!zn8n zvTa6NNX@_3$iGp3{L8*St<S$g$*;9-!AR9Ka^z+-jZ_M#rvmUV+h8alPbq-<gPjpZ zHIP-~73#5c@0;qe^e8fv^u<x$`-Q~4WJuZkPd~cpvu_`tFwd07wm|X9p+nqK|A_tY zi`ArG&p<i%pZ*RWeNl>57FYV6)}tYWe3wY;AA|W=yUcyYyf}g#eig$KSp7-NqZKHq zGjhWzDzPwxKR29JjysZ@ow#<SG+?EYog^c>`%Dkv3Di*i32P3#Y_an^hfi^9^&OPU zKik4)a7R$un^?BxRN!cUf3}s~c}|}LK$jjkLqV1`80mr1*pl8fMa05S@!A1~V-z>Y zCjVaEh&!l)7<q@>z|S9~K>Kck>k+sr;3|ac*`N#4yPOXxw<fp16dA+Iec`m`JvDGd z<RM_e^&9vRk=cB)Nj~VCYB(aYphJB>#&|^JFUoP%gT4ed&PIKE7JiC99MJWM2ri?s zQSCe^XN%w|#<gVj-YI>XU_7KiTk_y4f-48E1wj|4hvE;G&)Lkz&wmJ|AJ07Y9mur? z`*orZ8&XHFL*#>y0G-D!KiA>c_Ldd8x$`7CkL8Bt`<(2VX@q_>R9B|KL*o-{DnSI! z6DeAVzI-C^1Ww?CIDwygStan7Is#SqQAzyp&r01+Hst*EeiVG3iLdvnCz^~Mm96e} zApiA5{xt_)1@r@{WBdXr-li`X34VjiWD0&yWFD~H=l1=$hCB}KliRN88=T07^d$Ny zgP-CtmxQDb{4|mKiPV2u_bxQ>Mz|Ki^#ELx;aVGXVS3l|2>{Cp!P01qs=egD&X3Ck z&R>0XR}b9O<+=;Zb)>wgS=?j8#h(HHFi1+003P;$9E#f|gVbWrY{ccD@tm-69I55I z*pj>S=ewem(_=YyC+ly_et!Ry(okgzkW@|`a5u7uJ9-c8oKmm<$0paOn8m*76%J5V z+hID1q7Ql8-VpmKHuTriHIKq?bBW*9<I%at<UYV$OC?~eme(yP{oqametlQKGpT=0 zEStkwt4dE90lpHYEbVb?TZMrB6-5M;W(5M;7@B~TmFIICE%p^~eFE3paQzvs&x0;Z zSLYvP!)si(2djp@#?OPQbn<qg?p&d2q_Dk+pRM5stMKg85egFA^8`j+Yh~BcZh?*G zGt7U*9|b%DYATb1Yc;REs+#aoF07qG_kq%H_eLuI36+(QrtBF0qxc()(|H<f!`L-` zF{{`FiA^~+$^jCy8Go!MecWF!uIu)tjA$vhb0&9=U<*if$$qDIabi>U2wqPT|GAF; zOyfW4{AWChN=?}l{N$hQ13ta#KoFS!i?rj}5$sP5kX>7zSn!_NM2l@o;p_o;p{@og z3va9d-YI@gIW+QE(sHv&Q&r*%)%B__`YCRMY{>(7v$3zJ(B_EVJww${F}Oyy#T)5e zY-4R3QB04A@pmbm?ZOJQdaT@}2_rkp%j<cE`gkYA$l3A!*)gocPL2>YTS%CuOOnt; z)zBpIH@yByP=CPK!R|$6Pl^kuUt4BDtK~gx=?29Bp%K~#;Pn>92Z*7ko<c@&bB5sc zN3KR1EKlR<^gG(~iv9A~$><0ZyhA-Joyf~SKb|e$cp-IAiBIy$KX9ZtlbiXX);`Iq znx42Hv-FUL$eA{IFHDXxb!24TL!J@~nSS<J;BO?Q?2$9c>b`Wlu&JW;EizU=0zYyl zt^&VVZTIXGU&TO+4M(lQrfr4c4P45}L^gR;5qUCgWY~!Tcs2W=1(ur0=iKc==>TDq z*Zx;5xW)oM^6W%kxI7yvGp;(?(<}~fpEZjQS1dN0q}zo}&Htdy^xO`4f{lD%l7GjA zmOi3IZtx9B+a?Z?C!kkMeAEt^Y%?A*d7S*O$-Jq;rb%XDQ)CfzKy5ue9<hdJb!hTY z9Q3*MO^aQC-<RRn)WtYj_D_VgNpR)Ah3R2ocq#wPntVV<9?(fQM*gsQLH<uIxAWLQ zsEbo<ATusD^gyRwRmbr;!{Q|uErMq&+UK;S#tOB6#{_an#*X~lq3x-v(o>wzWKyO` zaUnl(H?aX@O|ciZ17B1^XlIXrA(oz+9aG*Dk9$UeROB1zWLIn_w-I#QjXnM$efAK( zn~DPsQrMwJdg<Jbn?hE<m=Nb=SNG#p#$czQDgAsF8Sc=#%(%2z;YoBl0bQ0q!2)jk zk&46H47^q4UY<HCkUHeYkOoscUXYwcCUSNRj@s6gg}^h>k<smndjxWp08$r%6GX47 z*9mGCv|p>|zQvOLsVR#Wao=v6*_xla3ZkDJ3kae)@~t-cQ`Wf^x?jLtA8HFW&<NyK zlv=-yQd2+Vz>(StSa0%M5JP*gQg0w|Xmi%doV1j(rSeq#jHUemU8c{k!Mm&u6(I0# zFB_z#_WPk*cyRs0i>KLIFd)qB39+jCdZ!DCi%!Dmi0cD<=9_L9F`O@Q@uXUO&bMF) zz1tI#Fj@ebJ1>B@sRM=D*=7!24B3l|8bWO$+>xDEV38303P?k@Jc$f`<{t<a?2pGe z=VH(D8)VwNo8zGtXnCqtsP(C&y^MYMGs(sdlHMHoTuiBZN!h^^sxW9Ay2(#Im6{~f zu0+dpC4P2ULZV6PL&dzo7Gp7Sr=db9$Z}c}cwQQ$N^}!pRLw}ZPQ08lz-_$P>waPM z_=FVU=|<mBe(Q^aV&l0enIiUtmzL9*Y~^>W8qu#RHYYnRNqBN0h3b_C0S*#LHiYhB zH#4xGX;$IMSUTCIo8J*aZl407$M_A8+4l|Zf)uMsMLr|&(5B_qpm$y81Ag90E~nAb zq1taM_&;Vc;vfCRDyr&SVELOjTkI|;wl6v09uU!naeg}RJn}isF%s^+P}XT3`mD|Z zHWUU%iMfD%l?ubOfW>Z821rK%J06V#Btgl`HWr7Q<S_@|5bXZXQX}55#@MB(_t%1s z;_Jn(c_7?W^F|qflr4p9fef2lf%JSmnH@4jh(wyjBL*7PeUewT@gw_BziqJ(hR*#P zexu=cQqYCz0s9$w8`;HhHjN{SAP90dg6#}|?Q1%2Xz}Kr#MDnI6$VZ%%8&)su})8m z)I;G@K0(+t+uZOiOq-42tzM}kxy6N9`SAxU`kcCMt-PCE+vfMDWpzk1o$T~~H0~tE zJJA&8pWm94RjFYCX#iM$f$v&kUYO@iEl(t*r21lESY8Ds1Y{?R52ubR<lK|v(k?Bl z(!hhe|A9>UqjFtz9NqdyatjPD7)$aA?2l(GA|fn6S)=H19?obZ5R!+<Rvd$q;LzVo z$J8)>7$5%;{|QWOu?j!V_*$FV)P-D}-b%L6l+?Jj+vzRw1wOr{Z`Dn2FTGEnJ-L<W z7xaByVnEwYV$U#)y#ND0N#h>(U8-`AWS)|mWt9ekRtVgImiiJ&SkXqXF6CRF4VO;{ zphDI`j3k2rK#(;gB5OE@77~rRczM%9#hXrO%3>yk5_^XmdHcCAeu(myFeCWC3B!f# zJ1tImj>Rh-_W(ygxWCT)5{G{i=8E)Y9YJ2cMTv|27QXC<H2E?*;Dh$Mq*2NKs`|x= zb#$~N4h=4@+boZ>)}<whW7YFCa@G-9I-Zl(R`xj=DC=$d+5nMP(wu<)kAA0{%k<<W zM+QD5qq0`C1XDk=|4u`(VG5y-P~TskhqloABJ4EdONnX`A3ukzr<E7tGUyPztni=) z0AQqR)UTI^_}VX>REx0%6@y#uC)t_FxT}h*`*=K2s71n;b6aa1mFV`|R>>xUqUw!8 z>uaHwwjmIVCx>sx&{ZG}q4+*Pz7?{*!!E~wF}YvEORwb`kS5?Zt5vqtrCF{Kd(k#{ znViLZ1!(@}s540eF-97Ws5<u7V;wxSl|`P~=CxG2$C^ME8AsC3)5mDB*BePe)Y^bs zURTNH{)^a0G6pnf((oMjc1v2C@Z>{&io0_eU>b6#V+6!V;mP6f76VH&BK-2>WY`-g z&urtH={iLRZBxIOXMPDek{1uG18IowpBS<vmwg8uEC|3F<o(hSWuRv<#ceCbK2_++ z$f7j<ByTGK){~Un;*?GD33q*`S4>E8x!WRzC&pN4XDp!+v=CsxQFKff-Y4?+>G(d= zn%t6>V-;369_wQX_DtLKA3)3P3F*l#0I<|d%H<1JH^2s@#EN~1#zEHLiMzwmLxlE- zr-<3yQ)XOm*#$qv6EExD=g;j4DaUHV`COqjwVb>9oPkZ<M(yGp3>r7g&^X?ONf<@l z$(C<XJ$NJm&kQik)6Z~*DQwX(%(?Fn!<@cFVVFO?!{wAVc}7ACuX3DH<#+2eL9MH| z-<^TPliVNgxIp3|o(Rvl(=$YMSpq4I>v%UHwPu?CbjxKe<BmNMrhKo&=UGRrngSZB zCE~7;i!JR^toqHY5XB~iDQ)IiCh}s(*}0Em=}N7&qu1#`i`#_&+Mg*5#i$%Y6!H9? zG#ecI!i)rPY`>Ypa;3m69!h76P7>M=z)$hxfc9e+oC5T?eSvS>E+8`OLQou`<z|JT z_#;Na_Ls)W+h{%cFx8k&I|s)KAZdz|t==3O^&RUt>SH$RP+$5sq5iJT3hGb4jrQpI z-Wdt$I#8Z?T0`t*eiaics15`YJ3Cc)s)^q{twWFCiBvQ2)aIu{qE)E63i2H*Mc=(Q z{7gVx4nM_P5r|ts1Z8&>f|S@Fg-KOX+^UF@-_8J0ax;mNX<ag@;$*{&fH=9+I3RC? z;aF}}Mk88|lX5)!2*C_wlKYR~1gF>?*X?=VVt;I_#qMmd*q_;EyuO39({K%f^oc>& zO1Q%7E%q(&o8Dl&9)aucaIJ@{YMb#2;m?Z>lz~EG)imXY&1ht4GYOu1&~|_g*`#bb zIa%x`&C`$INiuVxAORh3oR#{!*yrTz#$pIDh&$urRcIy=k6y>k;&8l=DIgDJ3(gof z!Z5uTrbo(+@>jq>!nuXQi?lydb=`*+dx=TjFYjT|d<zX2x9ymRd-ezVkHy99e#!Ok zU<=Z21&Xi79KQQt1T^cOrvlYXx67YFVY^wuFIrJPhg=XV?<q0Se5$@2%352AiYA@_ zD!L*r1P7J~<%D6+VUFwl?6JcX#7)zTKJ$e^+kqVJh6MDJwBad5MN%fHI@bq)Ke(QQ zYZF|%f-X$&vcH5@IVu7{s|SoMG;{yVg6C1VD`0p3jbpGCqX-tTDSy*pF~!UcLPj7K zJEeZOrtlftdI*<aH8BeDG7Rx@701zacz-DmH261utPW#(r5g|_V5Xk(cKI|`3&@P* z$b5+-)6xXUG|Qg?GBY#`*pF3pgUm@}at1kk_Y*P$&rU#QAtKWZty%iBR+Mjy>_lXm zS^iIfmx*l1kA%!J_$e0SLQba%h)n{-rZ3fHme;-{Y})nM{1n$|R(*-sEMP6Gjo1X8 zC1Jb8o(5M5Tp%Uc*9Kjf9ztJI-JFfnMq(<B#C2~eBN6zk!^x`O(%~^o8I50{h#pSd zlDpaNA$Tw>q%64G;awiSYln9^bQ3PlhS~lFEC^L2Yk=MNUd`G4Rd4Co{jxWS-OqVT zVfR+G1?W-iH!gPY3u<5i+rw{=$Uj)6cz;v<(xruq^9!78M2Je)uHu!x@usfQe!S9- zH<e0Py{VjeLMUKqiG1MoYC$K5IKIp+e0)s|s@gd5Okbf*JeQh-#f`Cn#EvfU2J%-Z z(-2TpdLX|NIFkJ2KHx65<4J>dzhq5o5USqb(F@>Vhfwtr*U-p44c4$;m3ER_?iWVq z*oCJXkC9XQcJ!73LrJP?mKK0)EgEvIYV_Sl)r<zzN|v++DHo*>OWF=;JbaJ?AB@9@ zl&F4FEQHbNShOz*S3d`%{4)r$#gnyla5gBr2T3Qsu;dmF-&a2;nZ|(-{{81VZ4_us zvhguL0mu9}em?~7FHhbl?@pa+a~1d{yRdp2tNM>|wa6y#E^t8_n-!E`mve0eE_S_7 zzl<b*cI+~k)(!qBxlP_=ZLFXdX>Q(py*nj5NQ${(1*fn{f6-Cco39gvt^W%*qTmK$ z<h>y!T&Vh<V@GF9vbcw$=0jGouWqwkaX)IzJ!H8O#KH{OC7%7W?z5k)RbyVDWj$@h zCmFKKlkBufYlv-egA&`q!p7H-5s}5D)s|#v9JfVK9&~{rGx(d5UQX7hF0kv{#hyX+ zH)wl3;PtN$j<%NN3Z}Tf$&SMsgt;@phd#pr-xV*t5ih^vA0ul1x{*(yd)cKM2`^!< z^Zi=-_A>ZZ8lY$~)5fEdH0Vr`*7m9TR&<qj0`0$TV^I4qGq&Fm-2PWTJx}`&*J|zm z`8Boucf3aJ&)nEu`)71*|C-v1Z2yz51+{;At)cy8hl1Mg`{#Mue|ez&$y)o@y-MwW z{I%}de@EB$|Fh<N?T7g-MQQ&>uLiaMnHod;-~H0i{uDO6oA%SVF0A3>dj6}rasBx# z)c$R+>c_Rstc>e$&h*DCIx3F6KSuOW9ZKvm5f?FP%vFK(zi_T_TS5wq!`|vR6spl0 z55{2%d)G_jFa_;c_>i4w7af`_!+tupk)gm3SnrO~(P-Q_U(}8JKr;V!(Fc_A5M{ho z$4}IZoNZvE3mbIkQMif5s{%-if3hpmRC<e5@D=w;5Wak}0bjNj74nC0FO$<;>HhQ3 z+$*w1b6Yp4G<Veo!ddhyoaPpztwb*RvYim{QW{HWGg#Xg;F+Uz?GR*z%g!G2_B0(T z(sg*W+@-^seNA6E9gocP!g*YZkkc*P%0^2c$2XcCbh=F%B2Prq<x$)hT}<g!!lsH5 zpU|#&!Y62SW5eS+7Ld8bp6>SEA`}?Q3k3Nv5^@as1pR86bpOos&lJL5D2uF|$;mji zaS5F@m9n4$Xu}+}4aLxgle`U#w}HZaEwGry$=r@$0(oQn8TXLHk7<cd^`_UabQpXc zvyZ;E?ZdC}gZ}h&AO3Yu^=s@#HPrAYxW2}Igz-IYbC?M(WuqJVxkF7i>w9SIrfLr* zcxq|Ogq%9MY1I?qoWRYOBstIGJ`*NB>^{?1ES7tK&=bL7oNhzIH%nh}3ilHp?S9PC zN3_b@;AOOQvz%{9+a}(?O#v>&{e%WWOCK@9-5xDnK?&0L+&(~nti3e*fFS%2=J>yi z&S*=qyj{JiurMsFuM~#)y;E&;R6oJ5$t%jC#Zq|*9)y}r1Xd!u&@ufz+^Qm`^iE;Z zvX}Rh@xxm9amsUJ=!j?(`j~Jp2Drz|+184bc(HHs^IzNTdF<aGX}dXv+*1H~pOrIX z@NXEtCj;}XlvtMyrB=YT60W8D12{p{p=}7dQV&z`G1ZD225*rMLL1)xnU<(+P5@Pg zJQsJJu9vfU!$&~FS0A8;d*DZ&kL}Kq!|2okI!vb10=y|<{4`-$+60?;Ds6|@s#5NE zKzr{}AyuzoA#-BT)|0wDQ0evuO1F>iQo1d@MJ7A|z(T+t-N+{2D#U>w`qvA}83b3K z1Kso$Xkk30%~tX)JkUK%LfY?L!N*rDrw7h35c#=)e2TAKui88D{3D3AL6y$8koV9q zaUi-7?GJRGW)`ENLlJUjEK+oAkbNKj{$~DtO5ppE_<bV({!0FR9CDpFJS*W|2;?6r zH$W4aoF1nYsg*Z_mp7H4){RvL*ial`gZWUpOx{N9fs*=)!y#P?=OcwXaFq_res$!S zyNn#(eyAc9%DNssqJhS;5dL1Rcr?5+?Ur~cl9r7c)Aj-bCXbN4(i%h`_Xhb(a=p&K z$^!0;Zw_aE17PGq+Ykgr7)2^l&OmCT3MO%<oKeUEgz-Dv3*$`EV0mH;v?W<~+BgAT zEl;tqLcV!%NNzw<niwZ%;H1?<-a$9gX?kz)`NhYF6S_1{o@;|<&EkxzA3vj0NW5s8 zJR!z=OCsIh#t{;Q2oc6NxEDZUuHaC+MvhL)u!+OcG83ht>L+m~@hE)4Thg=cJWUBc zpY#X51&R!G9k&)DC!SRlB0B>WNoQrbEd_)IG1ouG;=hLd{y+zxysh301aDJ%8QElI z+vEugFg%2uUgmaGnt)2PZT|E!N+^@l7q}hEOp<RimW6=JFGJ7ow|Mi*ptM4$OSaU_ zZ0zDnu_=8)P_!2vJzmY}aWH4Bm(g6)pAW7cKwUlM^bt77V}lH21N3nvKm9XMHhY0) zL8{2Nu-)rPta$qc?WlSn{~e^UN0-=~>=L({t~kAqMnT0KcnhUvjIXL+Fz|lik@}y7 zZ+Ecq&r!)UwUSGEJK3JcyBvuRS>K-@4^`ia#|`yOFw}S8S*q_p&ujHXJ6Tc4`apiu z){-z>D%1;eIMzG*ah?353T1t;?*7IU5}7fgI`^{9cZ_kt)yaB2uL*==9vvJLCvwd{ z1vUR<cdA)Rku$7B-=^edMT+Q)9+q+ZT7f}i04=sDZoYT;dc&QW?!pCEGp;jy_Y8H` z^t>WlTIJ8!kY-v!S0uUnD$k>D;Ns{P-rSSknH^5~=c*R*a?QsA1^mu!!!z4-<ez=C zgdErDyq=kxGPr9?vQMmzbi|7`M~}G{N6+~dM{g-S+vlr}^Z<O?ap@dVW0h39qqk`D zKo6_4&DoB4iOHSA&*I|T%RFBDG7LJ8!EpWk6Fv+0d$_WA)|W7|@qZ=ZC1E9Ix@Ffm z@l<fSZ<dQJV=|+An6_KeC?Z?=N$#*d9UX1s>EnVt_S<!I_88ubBBu+&_$Ds4poD@G zRE#eISB&iBD-{hw@<_wB7HDG>=EQFLD<Aes9nk423R|4prddrY_C)ebD_?}3V^#>R zZ;7pdy}!h;j57`>Zd^=x-;zrT*h_|_0`}ME{M@F+E486bFs`jGF@8=9(&LcI#`4A4 zN7wUZ+E!fh?ZHf){BbYaw1zD2wmwHMkbpjA|Jtqv$p|6`^nA%Z+_3k`{r;vb!oTWa zNTmnP;HBhdZ*E7bb@434ewEv&+_$r%i#wYa8u&S|Hd<4L_T7aJdRxgPY7Kzi34$Vv zqeXfY40{Gl8DyzV&h5xR>(*>bnzd{_?`}MqURrVW`Jbz)gNL8h11M-d_*9dkM=0!Y z>lzwYFF&hj#+(6Mi3}iSvC2vi$X_G3FfR^pDI}W3oEb#m!rxp_4b9IgoPcwIbaZ`_ zCQr1=eN<cFks#NJhe@t0h97wfZi`ji6fa)FK6nZ=_x>PX;&^`>A85;L%v03D$Y%p1 zzo>BLvEO{?_v5gCq+D%M9F#W-uC&A4#ui1kfR$~?`SHCj@c7GWs%`BvUEyIV?*fk# zWkz`1r-R2G0FM*v4e%I>@EFYD0o4&m%%w5%lmrkSdSm#T`Za2|vpHgfXN=t*{Q>WG zX_<chf<91}>OnZ>{rGMbeZF@+Wh03SJKV@upZT1VtZO~*CrvtW#!d;IAA`6)`h$Yb z#TYur&&NUs1<&)OwrNN=mp&wCqQtH!thXcpC~o6(dlqu4{5%%>01TGN7Tj%t4|~8L z(C2#Ovm@`*@dP?!C^%W=BF$S1UnIC|CBQ3<-+OSQVl=|;`<2xB{p--C(8<nrC@{2h z82Yx+Gy6A((QE6BApU3@2XV}zP~L0|^z*bvKR2Q{G~2=+-5z|(a^rh^%u^fRSV2{$ zuG5neA>&Vvg+#`3?X{D=wAQbdjms|LV|w9WFB3V%99kRHZ1sGdji0KimmbD#A`Hte zPbSeYo;=@EbT$kfRE9&q#n!CV&8K;6(}&8|p_8?IK%c^sCW}nq-`u@ccTC;JKgG)4 zSI7=T4i|fOp<b}afzIZT$l+oy8dGpYCAm{9;&2!H^V4eIdtx+|1(4I%2O0tWR@(aw zw-Df;Wx;1sx{J+zTA4!p^JCeNuI;W{Mc;0~Y?GB);iLM1Sm9#P3xmZ99sUuB=uX7# z4=WcCi$@j&2$VR&IBfq|!wTiQkjIzkWCxzob;-&8xPZDusNBFQvoG&b0r2OiH1~dj z=Sy<YW)Z6P!_8zbdNUDfS8MV~w-t|5DxPkvc!aLvBwq2lr<5(Wq^AO+-FWxS7U^dH zyjXu}EORwr7}r?T6DG&XpLxf{;)q&-7Lw&QrA^B*-Xt{sR$f{ljuCrstGYE_w3QFG zKbIQw?8m!f8IY=n_Y5vdgz+IWuQV_KM##>XnvAfty?oeAD>X9a41|WGCc_LF2o^V% za#&1WV}M0`X#f@poQu?~(JvYwqRk+H{Q)%F1^&E-LTA!uEby~&?o@>Oq!AgZlN6|b zJfGL}&1yqUo8|{<+QPZQ5MC3o)^}D1z<vvYJxc+5{Ci4(C={lnwkZ2@`&eQfm2h;m zPCT}}uK>AdI)L)jd#dHh@%L2V|LZ*t{9*Gs)uNLxd>%Mo&qB2IDsI%T!r#SymiT7? z<jEssR{;Jlb}*2X69WD&_O^sjaj`wC4CDHFDKM`8P)B34_v*m7R=g4-{Ev{416#fd zN3NY4HAvO~3MK;zCdcr~Zc!@xt+BFXU1c}&%AV&N#RV>Q!>WKo%>o#0(j<9)Ea-FZ znoN04bW(EF7KNK&|18P-d=Z2W_FOHM<Xok(l>KbsyYv8(+VsMrna4_$$NlUs<?d7F zd>3)yV!splK%lr$@LVgZkPKlTfV@XNQk;ZLXppipj3&M%wmg<6>ZL)qKYYny7)sJ3 z-EN;;A@c2$8&~SKPu6q#bg$Hpgymt%_Q}#PR01PchBl5~{Ezc&*1S27*Vep3SKA0) zTYp1sSE{weQf+HjgsLrt*|pk2@xOTr|65_?fAe(wua@(_75cjWXjW+MSu(zeTcH|} zj6mDDkKa?GH3D?Sk<gglZ4?XYkw%PI#i77=mvFOYejhccWr{B{XwxZtj%I4m%eW;q z4Q`b4{j;?^-)S39KM5n+p~5C!;k1ZW9*k<oTysv4UHbF0)h%c#S_XPBm*-J98{fpB zjHPNuzc_*_Ng~x}bVKPNsI5VnK#jFUq@y#z$;r*(O~5QBw5K%+lN;q32_uF#<+*Uk zyw$+X^HH}+;>>7IH31y?mui}iXvMKH{+&RON+<;9muq<LGs`tLx1S9PWJBInI46Yu zqZtR}sSM1H6Ueo5bcdRCQ;40`KlF*ACy}3KbAsx*+(1w*vjYV6l}s(3uw0o?zp7Q| z3sCh!PZ-ZCrT(qfP->N~R4*^}r&@(uIoT7nszuPu4)$1y8Q_fjW$2c6dMuD>0sCf? zx;r2YZ<P1v$$MCsM84D9OX5wEMZN@Q5`=P^mr7sFONV@~JPhT{?BJ8e#<#i32^n96 z+oI`(q0S%J)G1?;4&p9W|0u@}0aZ6?*pW@Yq)!YzZB#tUIr-We11Ep*(EulZxSIIy zr+gFH#U8FvX9zrE7jk|Wrj(j#EVZAm)Ju4&6*Y=P=3@P8R9iYw-mMP;gbu<~u>kGk zC&bFxvH5x4+&1>;-?@h`JYyi<fJ-bjn=n9uRc^(g0GYAFcjSeiU<>eNu66kKJUKsB z-c=KGExT_X6p7}9HuoaJPd~!XWE*?t32MtpzE>;nVm)V>O?(!yqh03I4$Kt+w~E)f zuIGPM?0C(p0+TD}kOK4iJHZOf@i({vLvZ-fLv=4u>Q<!ps}PD`KO8_G3j6;;gztGc z7^kX4|4-Qf>_0sm0QM`(sFHq9>SzA_>de2BBrg|R%?kjm%D{$~KEN>`c-AVqE;{Ez z|JT*g747k&P|@CFZbU_U&-w6&*08?2ws~1@FI>12a~$#F4ay4FC`WH`n5S9nS7NT2 z+6$oj<s2F%+p~I^$V_n;+X-)~b9>?GsE9Y?v5;(Ywx?ctr+_Van4@AZ`=yFHF-hk8 z*SpxgI4U`A9{ihz8=T``nH2z%GJaxI4As;58e2FYKNYjOj-POK{M<9^g5xKB7N_)S z)dt{SJu3kGk(|1os@5odc(q=}Y7ISxzI}+7-03xxyyu}n$@`a5$&PAeWbXF{M&`-T zrPe8>zHBUYp{~?&Uh21ArPOk-LKbao?tMrTUhdc$EhkY69E3wnq9aFH$3dp6zT5+; z(Pr&@sGN1ui4(hLi^4D$B&KB@FHg;rvs&?e+!kd>qtoOeCFVSK(`Fpf9loBp+AtCy zK83-Y$6kCCDaV!#6?mV(mE*>QdI!whcpuiXaGtuJoDHulq{y(A1wZ==*+-*;%+2vw zAX%mNW_hE+O%Z66jt;Y58r_{;`qiUUyY$=+*;M>D^n7;>o^P~zS{D3<dR)~X&*Kba zmw!M;u%+<B^C_M?tny52Fyk5QCQvV0rZS!tIOwLfVcJt@j5+lr-pX{_inkSSc4b0= z`B<Du>%yct|LH+K-QE#c01<FDtPQ+(vKOB4Yc8i?N}Q|vhUP`{QkuEGctU$`*l&4& zsw3U;#s@<#x5Pha)En*YlrXUuqBWa4K;aJL`nglXr0C@O)C_AOnv!Q&x$tqcIK+~X zPJjA<@4c9~{`A-4fRYrGmNSB@PS5GyqCX@tQ?5{=SEumk)%|%;>S%rRYTxZVV6`!g z2dws`1iRN5sJc-(a=+gXBYeYB-tHpRok}sCU$i-u2n8<gSA|su@?Av#_CFA+fA2l; zU+kZW_piAssDI01wf>oO{d=J*bpOzK6#4Etg}oeW4(y=0*njTtZaHiJ{oO8S9rPIZ z*@pWA{A^<-4YC1M`pK_eo&4U$$q(co59y7-H|1%u{y7%b^h$@H;#l$M0S|*HQiLwG zt)O$=JbV|3BEBevzX_Wxm*%mZUs~a=m)x4qw!$rZnYLXT3i9GOIkznxKCDPHNe6&` zB%i9bSYeK|I7Uh~3M}D^px60<%?Up4S8Y_4*>y{(4^uqqqK-P#)!)~>eVNs%lF?ta zWz`}qFR(Oul$U$PZCIK-`$mVlG+Ad;m-x`?j0ewUukx=xaCcpt)D|U&-q#%#d*5fU zZoAyA==G?oRz6N8m+0H0^(Thx_f_@WMw_quO@X~ICwuE&!)BJki25QUdO9eHsGwR~ zh^HNf#n9i!l~oG)RvZ?YvKffXK?iYf(EO=naQ_u(W`C<C2LKaC%3d7#JOI^_E6?_{ z)UpG(-&zm66pe`4yv6+d^W!>g>o2bww5`^Ag0-!#{=Njy0mGK_yZ3ar<^1A3!CTJa z6}V_H(8>N>soDkhuB29-s?^y9K7@9G_XkBUKNOLEZC^Wk;%<tf?6Px;7(w=ei93H1 zX55B%njX93eqq#3vZ_qP(9UR2SPJ=P^j2J_P1acrw*OYw(60UMH1zkQ-*(sEw|?7g zf8VZ9`#Y$D?|<p~%YBYQpM|Prrocf&W51W*^=tcm3s>>?&hH1WgS$<^t$)<4R=?5N zljrCl^VQv<>?w8jz6hW7W<7jfySqF1th~Dmd<G+Y2Eq7PqFXUK!wL1@OZ2NY!&LL$ zE6u@X`z1x%B8p%RVcq*!k-ADEczy_F{(Fa-!OsJk0albF6WkD$FYu5Zu)Gn{0WB#C zTG|Q~v`~2T(O;lNGhru1!%m73JBbbR)8W0k&a!R3kt%hk02&E3H|tQN8UpLqX|^F% zPYXrWL+%P`LBZv<6Wp7;5=Ufgwcu$MyqDvtvg#r;3APpdv~G1n!V$+2skC}YSalPB zeTctqb+k(3;kV7vDpWP&yPWW4S$>}99h#Y%-AAK@O^xm&H#Z!O?6spQ%tEi5)EC00 zEWd9!<r56~!g)UQoYCAAM()XvUZKlT*^Z`s^9H$53v`1P$Zc@l?eTL*fqcr{dRDgk zKQo!;{|K3nm`ro6mF?&J@cdOxC8!SmF@C>bn!m54KaBrE<vfu(wZ%A_$UKmJ6_irc z6h@95HZ>IL)}z#kZWTrJ#6384fCWIVj&$4&TIgf*ZH^51y>q_BQ6$|<)+7A=N#*@< zM-u#|&i~p`Bpz{$62Eke6c3W6Mx0};80#1<#yF;ncE?Q7=D10;I?`eO9wrTxw-0ZS zEGXaP<+FY-a7E@ud@hvtB=0MldF*{M$0{<)>uP(~YwfKIYOh^smlfJ$aoltfZ5|12 zzDYa?Z9hOd__dCTd84p>WAYjS=>1BfT;3bm@|g-el{ObWZ*21x9+&l4RG`_=-pb=1 z&6)6rpeo@?`5ABSlQmP9dEYAoNj~`$yXqWGooC|(j|X+^vttF%BDxtZc;?d0bmi#W z*_r(4ocnCL;BnE-Fu^kkZYs|rS(RtI&t{bMaG$+Xs70G)_u0Gg=`o=e4*^u3Md_`~ zT6q@DFBZ?PJbO@i#%O(u@2WhDLC(u!e9q$M6YTZ^*0NiTC@`LvUzP~JllV7({5^a# zqVjB1lF1|{RGz&uiNC)Zeiz5M&lZUSOo+YQXKxa!UPI>Qr=H;nUh3JMX06rvfmU}K zTHP9GwT-u0sQr@O9aP?(qIWy!9ku?lWB-63r2_+Z8)DWfofxll!p1ux)OslmJ0f_> z>E6(phl^XU!qPtaSOv#)pS5P(UJ!leL(@lzx4F-b6mzi4nb743=(3oq)HS$xFMV65 zeS1am5qh(jzwz}-uCF|c(lqFA82m^sU*`6krKn{yuCL4X^{vUOD+u2XvfbD!@;e&d zDrX`2$UDp_?E5oBI-U2HUn3JaAr)1v?)3XX$-D_Zb>^{6&k>=bWCX(U$87qu+$D33 z<pyt7MP(-v`Qj@}qU78s^Vx<wbtgtC`v@hwY8l2|q<E_QlBGoO?Q}vV(6|hSlDn-d zKEus=eEt#wpGQOB^J6_e>jU__<s%KBubc;;wK{x0-W8v76?}H=QgL#ZhEFHrGavDJ z8{#v^O<*;JM(RIy1tWFCu8>HbCFfSuWcN&KSbTM5I|5u-E(4OnoAX`X+zKt|q&Lfh z0>d95$rmnXc@$EJTo#v<?Grc|-01E~2LHyeo8=z);ITz$W|rF_H*L4vXiEMVkj@@j zue#t?<wLtX)tcN)KK?)gOFl)u@b*d8&wt=kMRi!Pon5BS2QNnfJLink4ouU|od)wy zKqc$Z1iA$>!OZF~P?2EnA7r`~C;G%sV0ynT!4BV!aHN(F7B<yqx>?ds!X5i*%Lj#w z>M%vj*y~7|_XXs?J;7da(<rH=I@6q)+^kfKyU<>^AIbFzC~SzkJ*NEfK#99D45jUW z(mwx5D71atI@oTn4ue;p@WP=K8+>oY@*&g7<YwsLeK2EWNvZU1q|}R!c_WB?7RPYO z4E=(yE`zW7L4`HfZOW{f&uXrljj!h&lObP7z*XF25~}ugs(#d??-yMCl>?5@4$zgt zP9KIw?*>5OMqM+Dn1O=X9dxieAWV1XFD(YAly>x|0n>{&s|~$saHn~fRQIfCA0@_B zv?t+ubL#xQC1w|Ea_SW&6-$J$KDn)kEzF;d>(%g0>GdEmD9A#{lKmD`q+-j{ELv+a z&E6>7ZJ-L1=Iub*?SSH@w#t_P61i@W33SFY@W#;YFgobLH!0*#3+o%@?u;qF8Y<0J z5ULkJp|%KKn^M)sh}&Nfx3W-eR<Jv@70?t5<pHMpz<eH2lYyT=2Edb#emSDWKw?z2 zwW1wqIIE2>EL5})m%`H_<;Lm(6=#y>{s!B3Cbbl3ZCj1)nVLITP24okKKMS{tmT?_ z$X(uM0)&D<{m3p2q1W9>2+cz1?v+d9QNAuQ<>N}lx<_HWI!Sxjorfl9CE+Eu5<k1< z4hkP=^pgi-jvR>%9W32blV|o0kfWh5oZ768-q5G`xq@S`*bDmgHTEmgcSy@{31sN! zh@U5vggM!^+f`wvarn;sDQxA_7zhJZmc1An=AI01bYWvf`%q~n)uXOQhpKL9=<3uA zE2#Wyv3y#~jjTv9i2&G0d0Sy)Nw|~U7-$LwZ;j#|{4G{|2_fq|9gNb|H~=#Ag$_oS zgt^$!0>zMo_wTKz$lU-sl~MX9_zIza`~U(~h3Bt?^Y<?*ME_P&`BSj`gIIo)(!Z#x z7TiIw$@`sv@e&hzbQWP+MYDy_e2WW%rfOb@p}8gDE|#D*-Z<V7|A+!3kHO|K4*sKZ zLq$r0*t^66`tKCJg4pOvN0-czEE@fB?ZvgeeS(J^_yI0%lI-d78BG3>yQv_Dy7$Q0 z@vbQ)rlxc>sRs2np4!}7&c{ZtAr2BJ`!CcOIukSaR0S@^hKZM!#5&o;DGK*##5SgB zPa)&66@UG;-R@*-o>KRVx%nuj9H*2;YKru2@kx5~p!ViKaR<F|@i*uU<n+N%@#K+z zo`7-B!%8=0oy0nv-trFi<xe_Wx2Mc1#QLSnXE7asw&f>fvm0~JHplrvQjwY{_AQBW zvW$E^7lz?R`-8!sqBioq?<mMx2^DGgfRGXM4GI~aH5k&Iy7>-w&bQN>d(sy{4}dxq zZIRU`$JK&o3B1KK0i`@u{zTp_FR&?@*p2;o07LHc0Z@%TXte(V20{M=3{m6`asI3} zXyeu5NXH1F>U#JZ8s1H#zmYN4JjNe+QZDa+VqFC#CZr#eUur9f1~Qt2rA9)jIASco z5$Zw!?|KDzz9R*yKeZ0c6Q1hGlfOW)em~jZ&GUle1rie^7?bRU4!{2x#%*^bN_RuA zXg=zuYez`cgO57;aL`G8<>-pkt6|(h6CRkXjJr^<N$0Rp#F;*hQPP0wiDsMuqjB=< z0fi0)S<V*=Y^OIcI(*?ghwkd&<`4?|UCUgf>rWSc!7x54wXyiZ;}w|4bSWJ~Vb1RB z)P7p}@%`(I`Ci;v*l6(YjnYZY)DHOyHs%L1f$ao6*Nm!bCuoB>+qyeJ8~hQq!A?bo z?L_UN6SN0hXLfg@_RtC110DdY>{N8vPSRm#Rdy;mY$xfkGb%e39d-(-3{G}Qy(*)p z^YTH5?NoHwPSRoFnRM9r%1%X1=p;44?(QrC{k0SH*L<$OVv9$sE&ffQ#rc62pE9(V z1zK$5Ef#7I&^txn>E!xOJ-t)(oxiI3j+5QFRnvE#GpW^;r7In<@eT;Jm6S%ESQyla z2T9j)GP_!m<N^d|ldhBN?i?jfaCeRr$6;5;LRUe>>C~w>PImBpql)8X+uskUIGq6% zXCTOYfM;`*yoVJWS210+0~L~};f;9(Y~*sjVsb@yE<<(vnEO|~@Zc3Z1I##R`Mx=f zE2|?_Sc)rMj-i6*3=ZhQJd`wywLZ#N>j7g;Sc+?bj$z_-$7s>zNEZu0y_tL=3g68V zX|cvTvjaIkLaI29c(Q#Zb*=y)F+8vx73too&Yl%1qd89%s_@`jiS-zg1GBCI%DSAi z>Iz4iNgPsbORH!fEnXJFRAgQbW|0ojEQq(n@PQ)=;~PNoSN%-3@%_BVp|xkuDx?2i zE;x?n%bO_^%t93&$#mC;fh5+o)A=gfJz8x^bKE4>09*7zMeL4%Ypv4<k1c>H0D0cL zTlBM8Ne|%evnO#OVK@8Jr65mdt1<-50p^m(l3tMM)=4B>U_P7~l>g?Eo{%=07l4xZ zXbIV0^d%vu*XnNBpT>Vquous9I0#kuhF!!YT_#jHFyG>MIR{;#$~l(QsIr1F>6wD5 ztj`wfA==U%IRWMjbjlH4@6EB)SSrZ3c&SxW=gEyxjwQKy-SBPn(I;(?k^Pbb-{FA` zZw|<d-W*$vtwPSRHjUq5p=moxd$t;$EjxOU!)q;>0(Iz~?Lp5mLC>*4&v8M|<b~ZI zrIXRS0;-2b8Gw>o@jMFx$s!loLO`e&_H^g3htU3P_->^NA@m@t0?B*(4vX4i?~EN* z9dM%lJHWXx?RY*or)^Cd=#j!I$S0Cp^!n6!_*<WfGb5!`?(>THVdL;7&px?LjHDc) z<Ry!z-gksP6hFc7-=U2E8$cbo)-VP!On2Xsu#yNEYmK+4+9v29^ybaLn~?G{OY*BD z>T|Pp-lJ=KY`Xqnd!c2+#8DMz?v-p63(XHokrfNW=8J<W&O9ts)j>h<@=>8`DcyzL zD^!)yu2{T#mtRiDkqDnlQ2;<7z)P`|C=Q*TP=I8oKq566;oit@+oO?h3qWU9r`m`9 z=D=ug3q9Iz9{<0i<*4!Jr)7C+oA#(D=SUs-0j1mi?@3vuAA3Nh6{@BIOmzBum;H1V z|E(HFU3c;LAAqYi!$p{XM+#MUbJQlcz$;;OBge0&S?qx;JdxeVn;QNOA^y(&3j8g} z{NLd(C-Z-Yzli@o_*;9C_)F4gf5WfDp9AqXR;Zf8@yGF&Tn`B#2xj6k<jIPg#t3T~ z0heLk0aYzh4>>X=_M#?~^%_R|T^OSq(*ZL(emzDd{I2ezF)B|zsUg*(N9yeXqymEN z|7UZH0iVk*5})xJK41Nn_#7klt7yMcsG5gN_c8Mrq3XfF$Q+{|nY8vA`Ku7>)estU zVT67;77)|?>k;|~{BFgsAEM#^&xdFzj4tgKqXBt!u!haLi&<2<Tc|4LljkEsRiQR{ z-mV{^G%sEVU9V{9idE6ojcAuN24KGH*W;?q0pG3qm7<;bzarYzT?Cvx$X`{I>EmU2 zZ%>E;#HDJ8+i@|716k+MfW0^1Z!X85g0=Ap_L>aP(7KlwHSB!>*n3yQ-mMqF-rO|6 z!pFZJdpF^CYc%ZLo?yQi^o9L*B=ZZcZy~q|f9|q`7?U_mo*$13^4ZoJ+e)`%hfR#t zEqwMZ@#A>7S-%Za;FM3e<TJ7}UcS?I;q{4%)ajy766s{Or>W|3<9QZLn=<*T?QYy! z51itBT0yE*k9yfm>2+M9-5+Qvi1C(^KEALLJ1*6>kL7B2unK43K=b?>2l5^25|8f- za!qrBJf=)XEtntVL^sXk-b(Of!EF<HBjX{#o5(lWh1VC$?a;N$ahY(K;Mqk-7#Fta z97aD*OYGGqV|#T+S}(W&iEA8*LRBt~scB}~6L5JiX9bJZ9fV$TuC>XGrq;eYXnVoM zZU{;w|0)jJJ#ev0gA!56^j$&Q4=&bGt|SVccgPDJWS}`EtD}khwN;0Q7_Q%s^Iq=z z#+@1^O$qX>5}E9;NV!@}1H$X`HOIQ#CRAN-R*DR}2oOYK34@IVmsp)_Z;H|JG?IoI z&n_r;l#{&}l)EV$#o4NT(yog3o22bP2k^Z&6~R4B8UUgJl3Gz=Q+PO8Kk?Of_Uz{Y z|C}qa*js~&WhLjrx(%WA!`U!3gw{C7)-{CI$B;pddGP3P)oXhEH(f($sq5jmQGQC; z6y>h}y}PZi@C2UX7dBO_y($9Tz$}2DV#ha#*}-La41ku`iYMS3A?pO|&0iuGif5=V z+ZG`W#3Bvg3gr6;01V*SSX@jc9bBZ)$o~L=CW@!^KLCJ3OU-?Id=%C7`0i#m*(3`y zK#%}IqO5`tF%pD?4X}A_!XvP-WETx2_-Ngx)*|je5D3A|LMB5HU)6qV`?b~YS6g3H zEdp9iKw0pCh%YE;v8H(AMvaP^K+OKmId^6sNub((|M=l&%<P@}K976ux#s{FK<B@n z!wooJG)BI!r0=`dQKdM&-t}6g4^bgeL#!7QBZan8AwMsK$mo4QD|B<T5Zau*XpR)x zL4_7*J@I*8Opbhefxb=Q6=F0{@5@?+V|ZdJCLY!j&DwZ<7r$tU)Y3+^blgTQ>>k9O zh?jgxAC>Spt4aI?Jk9Xzh37kXhQVZC4bLs`=#un?q=Y2?&zNLNN=l5%x9M&?o$Dk% zQ_?{k@?WZjCrc}H3-nSEEuQC>dE(WQDWsNsHjkJnH*A?KS>w)w;y9_#fJbY-Q=t>C zoZ}vOd6&E#J$uQ^SzeV@XgEq<$?knG<{0r6oXrkW8UJ-{1T~)GM{_O`)jFaa;a{F6 zN}ltqDBAhWlJ7LRVDG;cN{~HY#t$hUn5ubWAdUf0AnT9B_Ak}b<B7g?up7A8&7OWY zGDK+@ez8l}LjIlv${$*$yv8=7uCPnq(1VeN)%^+Sr2DD4lYyVK0Y3@-9Zy?F*4OH1 zNW=Us2A7-|4XAY-BRKUSHQ~ryJ~0{sj(4{ib{U79%_Yp)TydIR)Xk07kNP*9)(Lo_ z4%l@Ux%P`arPljKE^@LZt5vIPDYa%8z%NI&=FW^BoBojV30VIn5uMGmec$0xC!UUV z`ZsjqA**k!Qqd73ZVdCVS<|_!!MpDYOI^zQVToZ#DXFI>6<7Dsaan$VJpg>XLMlR9 zSoNc6fve~rou=vWZ|>2s=&=5r=YbPr8i%G241}G}s0YNY>WRcAwB7aqnBg5`f6$@C zzt;c6h_^S9c)MZzd8AnfWCmH5#8^!Vz9}2UEq3qOczDK9_`7s?9@(wMtL#C}HJ(RZ zpV~+6P3$B0>Iam2{TtJCKUVf_zlsd0a020_xlAt)9*|!R=91s3g3yQB^f&l>>F)f# zA8KE6h0m-Us%qZ|a;eKh`Jq`1x(a9}1V$rn(4J+^dExir`L-u-Pljy<n)Lt3?a6Pj z+^K#iEC1hsDO3(L;Y4c>e&2RrzWsNUf#GeuYOS6gv23q~+>;|V^mr)NtsU^CB7XsB z{yYLrb^V+GyOyt%V;*IJ5rcP3Q;IU1Epk{wBhav9QS9c$&1naKK_8-frFfIizYZ!i z23j@>(SSQ8bj5Fh8S3CR+=>fkS5_o*PMG2v(+Z6-GfPe?2D#(}v;%cF8xQ0hluKAn zi(K9VOB)6iOwz088O@decN1ln%iENxdc2Xdo8Nnu3yYPKPP@FyC>NIb>x@I?l1^VT z4?J#=4Ioes2L7$Q#~Mp;SqY`N!)uHzb-8w(rV$TUJuY_je7ph7l-FwX?2T-)oW;=z zfk(&@7>wn2{Kls#T+$O7OQB-hltMrY+6Q3EQnH&}x0H@O^VW&d1upjRJT=TTI-FyU z>w$e3a>981xTFIn#17-cID=!*fp6HCj-`@a?B;pgRtUQNKKs(g?Q~(0syHb-jY`D{ zSq$2X5jBJMGQ!Z-*uW!Z_ThEmaL&Qd>%k(kfV+?u4&Pkv-x9W^Un&*p=(-M|d?m~j zKxZ)runPfvh<*0G3g8aH7zFT;cmQ{V5}*!SiMT-og!sjEu@RRRa?t-bZUfy2dbE`~ z$;C2NI%5$OIE*OpI&=cfq+nhM5dbOhBIxP71YsK<uWr}iUj*=fN6FBmd^C+VI~@dn zW|yxa_^(6wGk||l6#heSBHw0>MXFd4N^>C!m@6YF@DwRhvgDGZiX+YAmK|Aa?p%c2 z3FQ!=!;6y%9psWWH#;&152Dj3M4)X!)`nEP^!3|G{B9L)!%B`qaqe)?zo8B0;a%=} zuzL>Av!PAr%fn!p6(WHDq;2o|NlJN|t#zX{T+(TK%eU6nD&;B_u#~3*ESneW*+RNf zW^70Hf-%`(21+Anw+_+H#X=PvWj6HW)dA+Y*+lGTMY@W4ude{iGXec==pp1g4VVC} zpSC3kTOY)DbI+=ELH*Jos9q^Q9W*x5oCB)7$rPvnTTLRlE}e%hTi#<k>zhRDFQKYq z70pfHV4Vn4v+)v~n%gJxja=AvRyu}t0e;R}f$m8O6+#7bWGXRIabzgPjXknM#JBuL zwfRsGeg+*}^Ak<|bI?J!t)O`Y5Kfhd#CKI$gmB(wyKV_{N;@nU8kLgQWdrbuU?C@* zLL!`qMiu>08emcLcZqmUb%^9r<{}pR=5g}iXbBi)^XFQmX*`m^6&Ouq;#Y!LCVnMk z9aKupGG0<_6)IbVYg!`L4kM<BF&?8eec%nqa)ZUzG8*17c*~``-SRT41>IDyL(Se2 z#eu<^mH}?UpB0KD9sZQTw7{QYrAU<5TWK%%xEXH`!pi!P83U(HC{?XE704|wu`Wel z#^^8X=M)NQ1sd2CTjx{M(>Gbu%5b=5n2Q~m5Wn$;!b{4aUsIjUM$zA85w=`qrVwcB zZ6-0NWp~TlM(kV`aE11-X-mKR<U7$MB>UajM~xyKzvN)hvuvnxnZL_~6P+Mg{OheN zbi18z8DZvkA3kgpVIHwP`yITN_TTebvyag4Y@B9HZsN&@<C8<HA??9;<I}E#G_g<G zg54|MH;SRF@KbaMp&ac0d(q$H;J5SL=<i{>cR&|&T4H-B^I-22P~nxHq=kd_B1ldp zB1m+?wht1~V$z&*1PaoU4*+q(a|1k?h-h<g6<i5eCZj8z{mqaKvpCtc->cW|eV3BQ z{IE|1F$b!-0nrMwhEk~3OubqwMb)xEij_R59`WIHa;-4PLEl2xZX!6O!*c7hriBEQ zzvf$W6%2F-s085g+RQ@pjV5FXxB@OWk%wT#*jNCv6AU#s@U1jH;(nOi9YbM?ybSv+ z?r=C!^;3XB1apo9>se;Cdz|4V00J%A_3a7tIg6ZZqi3l}wl{@_n|NyeC1KQaCzTD- z0j1g{0T|4^^U=}0AkX1hvZ)}tSeRscUueiVSHU;gGPR(H0c9bJih{zHR}F;BI{=ws z4pw0BzJpRahI0_MJZT`E&tV(sd=9`LV9g6r9TfN&+2wj`rp|X!k!_hZ1GXjxbgQ}E zng&Y??1#x*+0y=ZJ^`W!Ku}C3SS#Uco%%J0hp`g^#T4w$C<JWq(vBWy{Tq!*LLkdP z#fxE_J`if1p(^O)5-0*>v(ab}0;vX6Px`x)rHdc|I(9~{b*zzhtl>tOg!Yg1RHdHV zU_gd4bn07bMI1#vW_YDJ?6bmt_Gb}A!w#(`p#isD>M-#dG{!%20S{SkMPHf<u&O}I z+9XxjfbOD-E6{)rUwnXM-y&+X<4^X#?S?+iUo;I~7K>=`HucM-Y4MU+REzi9?6}y6 zT#MI^(e7}D0E{?Ez+eoaK{z|`HZ(+m1p}yQDdUQ-GGDo$i9+BNq74g<dJnIm7-{)Q zc!xc{-5Z&c2Xv7+xfE7Sb%ss2fTCd~?mK+eGB#K%;k%ip8YWr@+}TSg*zhPGE7V$a z(&F~t!mC#1Z#QaXW>6WRI?TAys*^5j_rWX7x_hxIv8+u+stVd^#v!{^ry5B>s=pQ_ zwn<3L?ai<cuhF@Y=<F!J0BDdo2!XA78f9*~h^iI<Ag6PQ2k~{{Cp7)viIV{+txN~f z-ge?Form0@Q(l7}+kHc!wM?he?P0&85SVG96nKA{E(cJB$^jvO;6jQb=5h$*^)mZX ziZ+<reg{@K8<=C=Sz3`W7RM;tm%bFtT%&g{4vnH4XX(VIM&`8GzQixWy)90d38)GN zWW}~<OuKaIm~yc;m6!QvLG_c)Qt-=kif;iqV$f1N8=WBpyE;qlU1!2!a-|Mi%$1oS z+=iha`Jqa+8bbP<aA;wqEFc9cjd0oS4CMl~=hM|{-#YSC^alL#y0haH&pce`GIVJn z(j-H#U=o)4Z!_zB<Ndc~0B?cC9e_-`%6Xzvm?0Nr1Pf{T2o`eYI^Qa?H@$d?Qz}9; zt-R^5-T5vwUF$*U(Kt2@*#>Llx_>OlgoERmHB>Rk*6U05u(@t7O1%gD5@Aa)aXPtb z&zVhg=|kbcfs#eOCMUefN}(S)N8qJ*8s$xz-A9yolUcnn8-<!w7rQ<)J`b!#<8w^n z40y`n@xZeko=4z$9-cSh`52y0;W-0O%2bm$3ZB_BOycRQOyZ_#Ch^zsR7{8b@Fc<W zT&_vvahrJXCJNxBi;q!7`y-LxkNZ~nTizP8G*(GaJehJu59$A3;%k9rHmwD1vrzVl z!~-zGR?dw(_(C)8pWb9ogjIiDr~Mnv=#qvU=}ZFQOuAID8!7Y*h?n~H>2=9Yws8)h z>QWKDk@Fxq5q3IMV@VH+o>b{lt<o;6R0yoYogY<vGgkaF51TeK9F|LZcwLb0#`HxV zcHvCbqcl_p3s88qksV)vPKE%4?An>+eh;y5p@sQ>%7td>wC$@pi!#rMTdpFbJP#z3 zDG|7N*kc#Q!_C9;$o;%Ac3Mza86G<?6{+NO4EjPN*o_w7MdYw^Xl%C0kS#&Yb8jzq z(6h+Mf>)8}njQIE$-4hM4Rxf%HRL=;L$9Pn8_L2wrNC5;L|E~)3k`$db8OM36kJh( z$#n{WFTY1Fg7;O-6yKT0U$!Jf>Tspw+^)%^{&(8?kOl95I+TuW;Ah{fz8ZP=n!nee zJqn>ZoTJfTct;e<FXfrF7O5v}X9Br-)!KQRy_+13Z5<w$ZxXZMxpJmSEQ058cv1kd z7r@g3&rR^W1CK75{^<<~MpGibC7IRpmh;d{2d9@C3W;9qg|YNfYC(EYU@PCHlo{pn z(@I&HVlPJ5c7SQ+ow2iUw}$kLC}|I$f-7(eCh{p5$0;cTr{O9`EG3zdmT*g%h)tGv zxn(oGoR-Us^wKFq!}!u6m%&EL+=t*sXl-|J5X|UDaIfSIOmI)+^&_~Nc^biW=EV}+ z(ChJ6ha$1_6Wol^eF^TsegB%^+LGevp!OVe@Ykd$9W03woO=o(?CiXMO>pbt8xqdZ z(2|&jLf@a4;9mbep5R6%MG0;P5u8eHH9Gc0=YRy4IF0(hG4}@%+=O_7n}1${d#xy* z;DESl6C=d6-39B!GI;)AH;K=}Gp4{Ku7l?#cs_vVN+1ZGnf`IQqSvJO^$7K`U*@zZ ze}i?zBQNjCbC`vI88?#ajEWmbt;-*ViAqMPZ64RT{ga~I0qVTu&)++=Ib$z(Jqo)@ z{4E41cu4VHKEpfcOFeuU%)>hS*YC}Mk>Af>Ey#6vemb;93D?{8PYhpo`EpHI{bh4W zTd<@JA?O5P9Af`Ct6mP}2S8VwH0S>LIE&NyEM_ZZJXjVw2CKVRDc;m0V}N1!%FQA8 zJJPS2)GEr}h=#KZW@LE}jNCU2L1%f1t1QnL@wWMC-s;Cj+PcCRj~j8{EuuJo*vMmo z*^Q{@)BC$%gS8MnbLWIv&sCahCg3#6(hPZdr@WS*!a{fQY(m3dapS{o_>)nWa|Ag8 z<g94R8zyX<4Ij1>^SGDx_2nlOqaNL0*)!A#UI}tRar0alpG7V|0W2pFhCL|{d2)I( z>7+AwBo5R{u5xHHev+!<0>S^U*gfPk$kGsZFCbRcrLw9+43AIs+UR@fEcvpl)C;FB zH~ZjX4PKe(<g(->How@cq>1bwNaJCtgIx_n!#u}9{wAl%wN>FTDihP8{M0ZHbz<a} zMjPg<ifl)Od|^s*bsL8%%R5m)UD0M6CTu;0-YL?Ql1|i=ll}lh!XZ4-j)XhY9$LlK z?h7m|3149%qz<i8te*6B^hPQ>cIT7WPovY#9+^rXa8}BXB2O<l9a;VuOJ3fGJ;L<Y z7SsRBIG4wX9MxwcpTQmXhSLdMp#=EjW*_Hh+LsjW+Uz>0764a3sK2U*`JIZQEHsW} z2{i;G0mWgH=^>Br|C^&aL?dkJP_8j5YmJItUfw2eI4PH$2o}&V5zRVqw{3%cCGOO7 z!X8#*M;*RgLdunLmX|7QbH@041$;|u*6~nza>Y@_Xh38uGAkAX1rM|+b25R#OgLV1 z48r-d`XZdZcmRZ(pA+$)huDi`Q_c#YAGl&hCa*6RuGYt3;aS4Mho(fa(37cQ;l+p$ zK!kJ5;i=}Z)XBCM_U%Lz4?8O(cvvwd9uL2n(;p8z5f4RWc^mZDmMUz03z0A-%1WZB zcV8u6dI9yeRuU>H<tKnX&Vzk4omgP>L~`F|of1JofM{(T3U;zYF4!Y=t-GclHZFEU z^^t~11I*sJQmYRtqqCRMgt0Ldqt~;`hsCdG5q<JhmvYPvd)sB!Ec6})TU^{f=iLem z$GyYxoKbOQ%1dBh+%-(tGHy8OzG|yXqEci5d2GHl8wIlY)+|*bgZ;Ha3cm@_h4M9a z2g*gbzwd+wGKGK*>Z#GY*!z#-qA#ktk}}k3)dD6o%rc-l`q$aC?VqZ2LSu;3W^5GN zLdvDL35Z<uW<`0dlvd|r*nQg7hA#+{)+sZg3!C>1h55faep;~`PUwb<P0Z$I90wGK z`Jw{zA{VR8jtQgo8z>kd*&j7})Z@gCer6gU{jo=4M?Y6jqt^=!cC=Ywzq#T+9({Um z?C62b_hP6h7hCZNj(5ft(eWnJcpI;X8Si6D|K0Ka{(Eh_LSWG_WIfo&?0;hb9;gX~ zKk9rE`V!b^(Ybs{><SF#V`6Nr+Fx{!m^zVE2rp0WD|-Hjo`2F4?fHE}|C65owkO*2 z@}a2c6T@pPE@oP%b{SWOrI%5chx{j9o*L8Twjm_&hJE&bzvFFZqaD9zh^pn3hPueV zY^?l>(KR6Xow~ls223vB&^I|j2wZ}4XHiU)6g4hl3dTiL2BW8L7kelx2B?WyG(%rx z@fo7B$>{I0;TYa?PIa**gZql=KVtH}I}@F}N5uaG-cOu~PTO)ZX4<9>JZ&Fr>_2VE zF1C78pH0G#8O>!eqd6x0C!_g$w>BE!SlL2A5mdkl4R~jWjtn>UA`|&$qPB14pMR!( zUO}JVn-~`w(86O$ron>i6JU?Khy}Q6MlLmaT+BQvhW|`jLVCmONTAFVxzB=FYK({! z+7w*cO?qKeT@omc3`S7&-BrHEdb^_FdJ^-@BU$IZafEL56Z;V404=@H72lHg94*}w z(^BzZ0!qLAYboDdT>_tDi_(2~6`slPO*No<A3lBlQJ?LrCmo|>mX4?Xw_MhTCI;w# z51I{j0w$#?r5PA-KD;J9e5-}|=1087J_+~~EHb0{uv(E5bKF&~Sujpv`)?p^_1K^2 zfx~4$6<*z`h^Cr!?IP4LEVc&T%*^>b{3kS1+OHYl3(&Dlr6^4<%2GR@7TfvR(0S_m zt!awKV*6^tbe7M1axeVx+M|6~Vx2%v{GkCfKxV@y5LTtBE#({x9I3lNDavRz?(nzt zAYT5Zz|V}fSJ!{7lx8BKVHfFGqckJuTNt#cj^HtFoe`>{Nx}UM(g8Xcn#rEJo;qW` zAu=uA*e+$GCg(LKkLP`fpCPwe|MPRWMGbX9x{_7$I-k8B>rD4PdMX;lz)}OOV_tGR z&}HcU8Y?395^K70i&t5DlTw&27kDwL&?*<)6kcU<g_i(RDI$_v0yF-aywVFl<=UHA z=+d~ELVn>i0yA0yyvM0>p={(rSOZ?x0lpI1A8CO4)i)ZIAltz@)&oO=O%=Um;l_&I ztSGS3Te@uK#4;jPBPgL^a#yTo2jKq=$wm_rP&U%|8}KqCFM1*+mb%DlNoaTu7axz= ze+J(FfbjHLMLavNGUL%tvk}8DWz(U(4uh+cO~(d25o%7m3(Z^b>@xqbMf#aid>Cyx zu0>mpW#ldy9U`NrVKUyB1LMtVhPiRVZ2GKI*^y5;Pd`9HwLL{!14p2GV<=Z|q@t22 zQPpHbY_m}8#;*71__{7Mysv3%NITPP+>0F+0xg7}X0DnUDg<`KDs3K$RoeV2s<cs} zN}KwK(#BV-Ds0xz)3#pM#|#LK7--vZ`KOxFhGx7bSsPUrj%qv~RVG*3jO0q2p{mlR zC`M_sHx5X?3vd-ujb{kZ?yrfgsEx#AZ5GCUi|YibXwvYth*UJl54etI2yGv(v1)<@ ze9BOqXdPkIHqb|e20UQ)&(QJUO*J~U=YAueWlqRB$csz>jLytU5w@X`%67oL){hLd z6dUzOLR?t`F9zK15(Z`#U=dtg`EpV=2H7#PGIlw3W}z9)xds~N&0j@V352nWJuog3 ze+@YLf*~3-#wkdENP2T|E6kQ~%Rgt>XU$^4`$;2%07EMdToT&m^P|kXB2gOVVkP5Z zq^kq-`Q%}Z&~bHLvZV-H(UupIGq8p~@LbTq1a0LiitKZXB3hP7zvWsM7b_S?AFw0y zVLMqCbI9PcX0SiZ>#K#fXxrK%ZCk6Zq!;uROdMb0Jh@oi#Ze^-1-||sD#hAeY~RJ2 zmZiunlyt@lUP9p2Z%`_+U#!N<#tBCDwbqChIKY~eJcJg!<!Xq6cW(^bB&WfI@dkB3 z17woRx+l{lSygl)6Pb)WgRpG{=~peSCk-U2bph@u#w0|SH}MrXiDJ>mD_w|<!E6N% zN<&oaNg2%-xlks~{z@YTz}P%RU3-x;M=U5{&fmBwB0Ay9sf*xb2I6D}9a{`MrC)y$ zMZE;td0upphI&(>=C=oHsCNlfU4|`K!&CKyai%MyY8cg=V~KUDhI}{9<!cBcU#5#4 z$mF=FX=6aBWjEv!D^Ck0<{X5crg41Ka1nB6*bKtfC(#t*AOQO<tX7;$6Q70e#<?7a z(Hv>Xc`=mFF%-Eoous7y%8WtN>^^8Zfvua)RWUfqFUtC%>|$3xq-AA&YgG4tM#>f2 zf-2O+Ns2X}M|s^SV?^NY{92W$KS5rId{t;Tp{8wn8(y4j<)l8lh5_U~%jcTB$9d@S zPEtPLQ5bN{H}xFV|MV5oN9I_<yiBaqo}mgs4FSDM2J1P$Y`UBCOO7g;g#Hr{{hyAt zzb!P=zQt%h2hW^<_&FiUGt<&lo>|PgFO21xqx$m98J{8IqQ;8P*?*tKzTbd_D7^iA z>r}i5S*gqc!3|B&@~#xNN!X`lK$P9MrXvnnb|^*W@GTP*qal2YHM}x2yfT9=*k<JS z-F$<Pvs&3N?k3LauuWgT9|Z*@;?N|dghdEz(p8(W<PCQkRdP{F=G?9E<f({!OG=3b z@>PEPmoYK?IJY#)k6~C*8km4I@Fz4Ha_i%^5CgN$_E*ku%OM1^zZ-DpNGHw>u16YN zX)joV9*8xXVY{L0+&~7+GzjJxeKY3>@W=^yqOcA3+>v-Ic7mvJy9!YN-PISUptG}C zW6le@jiGqZwRL0n{+Pj~I&2?Wl+o&Lj@cQWdM6vaz0a(EaHlq_`5Lo1Q$jPFtIlj? zM$F89Sfb7BghDxnO~5d1qOkRfnC0%75^cH5Jl}Gc|0`{|Tbx1dW<;Hou`l+X%WO?* zjhL;yy7ydWYtB~HY%M%p(RtrFrJ1W))Ll&E?rHNJ-Az>{v9ru1em=(}emK`8-apSI z&YN!%8_P|idx1$@vCt&0g69N0Hm6CfgXaNw<}WgdCl{N<U%U7-`5KeB6`r{GyItfm z0<Hg(Kqg)@HI%HKCWM8Z^=T{Us9pzuRQW9{YWtjjfXb|XANH$<*tT|lmBc6c4`?>j z5pL?=0DIihbf-^rv!9qF4&`woFCa&4#&{`lf3y`kM7UC|TpC}aS9i#V*y~5QRT-uW zZdN`jdR;gr+6Vt^gLDDu_LXWg+lBW2`(k?K@uj-iktFI;$jlncIiIEcN10qiA=LL# z_9@jS@dkKo@bm&qM#5j6G4fAupg#%m=e6l>yt~o`?5X6mT*6?gVUZge2>S+m*kb`g zFks|Tay9f=jpWq3TO6;`dB`hYCp*P6;qf9c{G%=pOWSPJskbF-FXG{)E~8uazF`Wq zbc8)K6mN%^Wj%)Fs*Kc(rpgJBo+ouklLN<n0`7aSp)2}b;q1_0{5enkxzecUF^Xmv z*E8fvom_bj-=L&X$qtPN{(|E96ih8JqIK*V5m08u^@K7@;g9mAES*LJU=*)B>~+63 z668B*l<H))>nTk+95^ml^eD?aeA5xaIY)qn<gZaVLTx6h)J9`KHXgeeM(bA4Y?kz^ z$RsLya>97qMrgQ~u5I9@%rx7E&JBXU);PqMtaO&b=fTn%rTnz*OQGSHlnZx5BVps} z02mCx{or7!hEk<Z(f)aL+CuDo5#+@(HY#JpuvO{6k;eJE5`2Qc%jiq-cbTztk|em8 zW1Ue)mK;WC%3qhR^F61mPRDxAk}aLk__Z3(Q(0gPm$2r7Fz#r!%mS7J(^t=@uNM9Q zTgQ_gD~Z6si{0i$&d><>lhab8cZLSx4hJuzEmG&pvRa$3={R3gaK5CK(YeZ+pb2s# z0F1$UyflG#u!HsJ#hOCR)LC>OuvYZI%n4f`C;i^)+XzB9A2eShBJ=eH%$M&|$lX3A zOx7#yx1kJo+?VWPJA72CvYOv>AU6T@;Xdty8iEJvz4BU<m;(>l;E@@gP9J%P?<=n} zi4W3uZm$>bpOJiO;Pm3{Vt*Z);hv(m44pK;W&*c!M6`3D4(vjp>^(QNiK2R<$R7E& zHyTXM7<AC}yr3gJh5m^ASC&roee6WQUk7#I#VkZrHlimIUwW=)u2|9&EWr&uFe)ee z_G}~r`Z&ddPN$pcF6g7btLULcZh?gjM{7!Vrc#KiGa2pm+3hbFbjld=bMUshlBB$Z z%MCeUVb{aw@KyE4hl%0gk3uF4nJfez$4}{d3=~0GX!tF84Q0a@n{{dk;TCBwn}9{% zjx1rcI;FCw_uvwS%M%;FNU!tit{<XmqMEn7Omv(5H>BvvcC1Xy35N=mt9C%kH3pm% zr(A0czvm1Oe*u!5^mYQ?JX#-L#(_vZH9GH#v1XC|*LoiOBS>rJubz+Xk+xoD?unXt z>pp?iayrHKjI#NtAbbd5GXx+rraN|FVW0m4S$V8S2fW`?VMZ!?NQ)jUG~AD`<~jau z^O~QAt<8-$ns6V5VZ&~oTSlrN^vVBIVR9=)#cD#wNrdA7!!p=DAWK9EE>ADq+X88J zGLtE!NvoVmrgxZdWwaP@^grx57ktq_DD&?b2)<~E&T@BY@I~*_ZUFF9rwU**0l0L} zKmdMgR|LS0g#!Y3;ZX!|`K<o{z-A4=yKf@^SE&$wcK1LKp0z6q;m+JRtLW+69Y<wO z3-OE0pPIz3pP0n&;h75Wo<0wL*Wk;Y&peIQR#*_!kKk(x!B+zK`hEuREi@ybECAg? zjCWsF77t=y42b8dAigdJ#DxUn1?V>m_f93T*)w?doM?6c_cOcB3+{V%ofF)1cJ>8# z$$~g=FWof|xc{*;0&Y+FfZ$&79)i0n|NjEquhzza`<3Sg0{6n5QE-pTJ14jkye9D| z(BKE~jDUBC`b<&(;`jdkMb9Y5U`w;%G~ONk4&(~p2p2RZHMID|{7Ru=Bebdpy6#lo zjQKW!UrlZ*&=*9$jiPU9xL)VmxhxR(J%_$uPTyzvQq*s!L!;4v2mMOsx$=bu3wN(J zLuf$X(y$V)Q~WIy3Z+Xa$`7>E{j%Bk3L4uxqw5uM=;3>^fZM_19{!>?%D!@r<a`VD z)}i95C>Qp(4yC{>8}CyJEOPOEM*m)e?biJDZOVqz==jIDomR2p?X=YiCFZn*OgSw| zMVGTizu3brxfKMKPCT!m)hWdpSq%f<`pVtx-P=?tRWHqEOTX?7BLYIl=JSsIG`3?P zSIBG9<<c}f#C5V7H$@ze*ciB(d5Mu*ANTRyt@_vb3O4Ny(ri@uXQfJ4^BeH~`~#`Y zmIKmU|5{6;RP0}C4okEAYel`3>tCCulcu0`OiPcyD|yX$w8y`RZ(86F2&O@Y#Y8?{ z`8(du$4d$h_0}9Uz->L(lPwRe)PvRZsR!C`qAQ`ucb@sVNqh;O*ME+82lNK|r;ocY z;8K=T$PUS@`WHo+`VORA;WLmkT<mC3<Pga>T63`S^`F(P6YOGwWO-%8`GM(7^q?ay z0lld#fO)1nvoMmn%%FpO0=U_IJU?LK1Q)w)3N0{lspy}ruNy%p)U~j4g8|kzr@aMZ zME_+34sIVrRLhEZNa(%+f{30#c>GG1dOS*Z;9Du%yApuD82@=k%}|N9CINVag%a7- zFJlMnku3*w>uVPq)&WTK9<*MAqpz?4*1pMRp;~{rS*8ueH2+3XCtbp>E~68$r{Ryc z@sr4TnuJ!4+*w#C)x)m0aP4IRI#H;r$T`mS6&^O%qUnq+%3<YD5j%KQI2`%}8n~Q< zVGG|TEyF`V59=tU#!8?um-pFEVh-CdWcWsa$4DqSTuFc;f|I>L?re;_8=hb(0f3Fb zA(78?HBh2*G!(thy9h=L;vj6gfQza^A;b7ws^Mne_>?#~kQW8Zy57D((c+C$=uwO_ zr?_#W%8YoGsS7bcS%9kM<V9>zXD@AI6XiO*@?MNsG}|ttTQ{jIbd`p9w>_n9tET`; zK?NDHXcJ2s*J_TSlgS~??Wd6@uI_^{-2dBh3)-3i#srS5_~OEU-sj`-g%a6idkJ5n z9=%w5Z`cJ`$)2+F-8`D+o%AprH@nYUBTAL*)<5@Et30pjUb>%xh3<Y@b{72kT)LNc zo{BC#9SHUuk|lGFhc4&wcSb9vIBRKnE7K*QJr6q);<R@hvG1SBs`a9>5bvnZwJpr5 zn=wbG9~PyQUsx{{LrK9>enB0Q(zHA3Amoo!$}J9<AeNN_$hikYGq2+H15daJFm4Q6 zTtb-n82kY_*(<Ub+$6+Ib+K98h%)E6huv-GJ=z!VH5~D&98c$llkDRgtQ2J03{sMe zLd^1gK%?;hM0&@V=a-UH>>I0;V|cN2r7+W`mxe3~OBQ*NkzJtSCDt*3zkEfqK%anF zTtUEh<3F#}76*JvWLYgy-~%qPj!$qa2C#o-RuuLhd6*H6?vr4Ex#`ldylS&F*uz$s z)oU1*&|rj6_NO$1GO%A<eCo<<rCD{k&1K;q4wvD8*uTCq94-pIfH3*6ox|j~?;@I& z(d>mHg39n><QMs|F!3-EH*F;rzTdcddDMT3MGHAf;Wjr|3_cOVbl3CRtJNso{uTqq z=@zl!pTvCfur+2>vvPp|9ZnVb^Nbi7DytxGA(>Tq*i<MGn&4sclj35rkHKU$7W+j; zy7bUQIm{p;v9U?&#RgeA&4zxA@u&8e^jxyPBuu8qq=a6b-ZZ!Yq}SQxW1_3Ry8vTf zTqA5Ag5pf~wfO5cVRHig(&A!Zj7D_O-OxcV)k4F^^fFm!_#3@kBs9E5FLgr00eYDz zG`vJF<N5Vcbi&y11if4)G(1c%mq^n<W+Rt2j@2T$wE5|3bAI-!vH5vxMmISO>Zi5p zr(4t@IX?qgWlDXw&9?%>VpP_5&-S_NyJz?o)py%{^Xt1W^_8Lz<3e;SKC`~t>dUR~ z&hq87v>WTYQ*JfYw`PYD>RYEbmVe)rXch8PZnYS*n=5)6OL}V(LZWec<lR`Khc)gs zwi?FWv_S8G$%VNK1d-WqF#FeK>LjBwEMx!%y3oQN)Db|sO<@(uCZi&|J3&gKGa)IJ zuR8v2L##mN>Km!PeR4QlRaqVJSAoleSNzH-f-LT16u;`yaM*jYi&EB8N(rXaAEOiu z2<2uum~!|Zl+r+XF1i%^W%t_KC~+$#S}<GZah~mIOgVE2R{k}mtQd(Y3{yJ4qm=up z)O(lksvbN_iCxrUD`smsO)0wHVaijOQvU&^JV*t9ODTLTk5h`GR<+{ql-NjpSdH1X ze@H1iDBBH`@)@PHP|9LV$^4d54pWL<txDwcaFh}!VK&_vN@=5%k(hG$B&BpvN)q+z zBT6|<Dc@LmRW1LdL}NQ9o`giN^Ak!DDdiBR)PG7T8I<w@rgVlVC7V+Iq*m3*yK1Mz zdoi1iPqLRL*^epNUr<Uh<++7YR+&Vv6MlQwQ{pmSTbzH94kG>|_w=HIc-IrkaWCJ9 ze%Ic5#-e=H`uW%d6!-kS2B9Gjm(ip@#q8eHUFzE?#eDw9fp)1+<EMun(RQg1ai!CP zv(-&%7oc`Id*+V=ZBl1G8rh^iJ!`;C>hnQzx#M9wFQ@wcy?ttzwokpdhW4o-U8+0P z(SIChr}{sSM8t&}gWKEK9@(O5KiQW>P*aQD$r`UQqaRoJwrgx4v<PR_q?~E}Vr;^h zO=0AEbrtL{kH(E&m0V^&5;--x=h1<>abdI@UaZOEeYrixRcZflArbut2*0~9YLw2G z?B9i2!LYA3XkTI=)i3=<=Qs73h2%o?((B7w<jr~z)@#)yagiEalFu_wV?W=8@F-rs z&wJB}Xjb*VK6z(TUVDFemxt{04fnsO_3=gC#|5%`iBg`fl%y?kh9$N7MQW7G#aOpn zt^4EWu<kObWt9I#a(Mz9J*-Sh32xSgRW(rjQwj&~8`;0@pkoQmMTyzDSR0ZSU{fF4 z_Knnb@egVHJncE5J&Mj#VsX-*%o#V6$+0bdv-1bGsICWUkg;M6GG_AkUQ;&(1B}7j zZ5X;NE*x5VpKxeqHK^FANZ>>sSIpqjqI#V=M^LmwYCN(1ed3AjjPZ8_0%%|P)1_j= zAlOC(j@KqCiO@z;739R-@B&24uRKbf2!dgfV#kHjT&;d}PU>c({-M(~-+^JffIHY) z*OV%W{#qk!eOylV;jW&rGD|rcUL&$UoFp$~K>W7D(AENR(yOw=lF%wUMEv~FNxqGC zq>)Iih8i0ff3Ukk!*k@06xD!FsK+Rr_wl|84QP|+QkIG+TFGSmH5S^KgxkhVVeIef z@y(?>oGy0s1I-jC@iK>~cUXb{trXdiXpiXkl^@aXnOJm<&5JQ7!_(NLJvc-hLF?bo zJHWkv*Q$d}YwUhuQ^x~w@#eMh9YNuh<Eqf`3ZD2au%cdb52e$=j8Y)FJVIcifz+VV zWnS#tA~wEPJ#^YQf>&Vj4F>sQ)c54QESFaWW$SZOBq3aop*XBTdnS)r6fVfbkBda* zOw-tg<ARL$F6+<2ETd2B`i**>bb;DT3+@pXSaDBH*-Q1-mi&4lfQq-Keb$rtCxrk> zrW*~>LQ3C423`ow^Po^?ey3DjzcC?N;F|aX^&fZDpY7z%0Gmn^cwr2K*<5Ip3q)b3 zAnYvF`#(zZpPb$LQDW)=_-TlFPY7i+7be8!6b8z<sXGikT5aCctphYzm9eS&`>^^O zW`30g{|?a!x4({k^y)qp(KW{%{Mf1eIqHr98fnMb2Lf846r@es>+dqIFBWzdCOF}L z2K=8M{%3G{8{QSg=D-cGBzW=es*`ojGy~h=Nlx#h@VO@0&1U0GgqO2JX~>hjnV<4h zx}WfJ8UV36xEav`kI^c_cCm^_gTL@XHF$iX9(oiSb1tYmtWXAKI=mTo2!tLwX|M`~ zch0H~b*;bx>T@rV1U&XbS8pkq-}BRZt6F5VTIBa<H7tZ&509W+)jUFd6_dyCP7(e; z7>EC;&fpt3Um6JMqT;c_PBGd45|M&5v^o;!zF4h9nJc1S&Q;^`H?A2QOrS-i)Cz6c z0m?d_H(kx^e~BnZ2z&@+&~#Db|6Gs$Roeu4F5VRV_GP=!fYDg$djRAAz%|G^X%r1< zF*}6eJUxhuO;ipWE>N)^efBiH%(4CmMTRg$3*I|WK^61!c|pYdTk6*)L<_CJLZyWH zWg;(E-_}*%1K4jSmAH!iXUVHSDw>6zR|-1|^!`&xt)~(Jl~X(6ry=G&L3@X#1Lh$# zm%D$DloJLj2YJnaBo_t~46%8~M!%z>^Qtv`S-N$+zc+amEOjZX7yEk$`O5vhnX7V@ z{Z%UL*|yOf5}SI7#4d+oNMf*B5s8gy-i*@G%y3xHtrp#!w%%kpUFzkLNIed<9+)DS zAH|+FsTBxp!^o;?t}cwA$rv>wj^Bv`!~Y@W=?9>^)ie52o`=2iEl6uyG~xmpj9^(+ zHDFm~1kL_DinpbHUuf+^M_bilP@n7bfX(HVrL7(U<m}|*ocCQ!28_KnNU{PBrbx-* zEl8I@qt&~J!g+&swL$n*o%4pUb8jWPJgyI+XZx(5eb*auMyg06sW^9&+QEYB=ac-@ zWRU-Pm0~s^(h0D^mND*7JiBj2#FwN9JO55ciHOvN^&fT3I3NVtVmUUl`(Pr++3CcG zPZ7sHm58{<`LOz)5SkoJOo+`X#O4f%!9+vs*Rk5y^Wh`9xmRbfH~q)s<7@1pZ@8oN zXgxdCdSK30Dn)2P^0OGcT)*rGq2G7Y`=g(WImnMqb}*4bNAFCk*4ivo+YBa>b`8>6 zKyG@Yl3kV_;jeM=xskbUI*arwY`vR=rQS_vk-RqyR`#`aC0be<6CF7RLzhD;%pRuh z#=2X(ES8g@G)x_$+b|JQEtERc(g_8Wx8FWf|Bu=AuhutS;PAI6uKj${cR;55u|e-j zT&Hxd{=&8PAG_}{lCGiel~AJbLXvzdt2BS0WNl?Y6c;yj*HaMQMNW3Hc7W1oR!@Fo z<U^1DP4vW-m>R5B2i;tx_jipDw%kKASU<Iq&a2Yl4=tvTVkgJCDSkLCrYPQGNm$kR znyTmP_$VUhFQlRMwfg5JOMR{3B`MM0g7O4e*H8(_cOm3MyPb37ed!t`Ov_8?>@{S1 z>2i`z7d_p}Rf#;>Y;zHJ;FH1wUexjq&xb#i)zLmto6!Fkp#SY#$^6CJf$#PF{r>kw zF|-C=dLS`$GrX8X@bVK>%De|J%lvf{^inq3Oi2@Y-^VF)vfxh!a3`hJmuN@!b!Jkl za}gUmf=2^(q|3j<)`7!T^X6-@8B~p=AA^@9c-amq-orSnnQpfE%lKJ!Ta`mG^LoTL z(&J>mC(de)rmL0jSqeR7`=|;dx2#*f@A}OqF>Q-U+z5aF49^Gfw88V<X0%x{BqSJ( zCZjRY6#MTI$bTg~GvRT-vk;!8@LUVe!|*%-&(1BpULE%aqy0-VC#S@n2Pv(<IaMR5 zQ3kRxYZ!`xwSXe}XUIhh&>n7-ZNG1@lfCj%FIT6_D=nH8mVApv5nRd~k$K)FGx5L^ zdTmF89)|Z!Jqn!WK-0(>qoh#{$9+SauGY`EMlTKaw;KF=4GqVoHXu~f=!5=)dVtsD z-HrE)Vv{&y2;@Ejxt;nMi!gVK0SYu6f!r;SyTyM1O%&6VQb6P|qNTnU(b6E7io9*4 zkll7@o8sI5sQP-TzHn@PzOvoRp84VZ8b$RCKr~R>8c|7_w8rAb&6xEt&NWb(T#&|s zui+1%D<w%@nW-d&SEe!l+mME5m@vu8Q505v7VfK}``O-b$gEUY*z9L|!-1ByqXEa# zLL|X2|AMfLBPuPc)5ELN*fgkY5?X)it1^}Mp+W%K#UCJss<8BLOxFnk3;_pq<zih2 z*brV<<XpDTd1E*%iR_8*`y4oG{LVLnA7}%q0C}X>gq>^?&l{zW80z?+&$WJ6#UC<7 z_`mNKen~h+v#mJHeG{_!CS><bn1IIOTq}^cC`?|B6S?8Ro&Vi~eTW+NY5I_w{CLNQ z!@af8XFPN|)S+7B;ZX8xbZ(ZlNmb@qf{qNXXHnHHQ&D3EtqRH}3}zuaa>MjOt4!Q^ z7#%w&=CttmUmmvWo&ijMR-#fBy`QsR-!qU>6@z851$Svm)m>bvI&Wf(CErh2)jb2L z71>=8wc^Zs22v{q?}{<3LyhaSsJ?aH(|D*pC;k7z$nP&pR3pEK(KvIq&bN>~e)m8< zo)+z~a`!+z9v;)<2Sb_))C{{c4;$I5-c<+CCPiJ-EAIszWc(s0f*8cUK8Bh$k<iJ* zD!O8%r+@Z=ADw67Y34}4ggwuOQ2X_AD0)>0&n?^T>Ic)LT?kX?toKgn?8E$8jc+mA zeOK&=UQ&l#1euz5(U9-IYoH-te5ZC>V6_=WeIlf(pe?Xu>ZD4bjWY6F>_x=12Ap@8 z#64ZOxK0Gr4zHdXUTtT~pGBIm@J{a$JK(EjPcHs3?eW4Nth?OIPJJ3TIwXyKJuy+% zOt@uSU>|r@mIb~lmm+n_r55@>Y~-`#h3W8~&?=Xvk@*SKy#4iUCh;%uJPFU+>igfe zMeVs>@2_w3(0)L=0D-Z+1A|6Qk8~Faj4g$kQm!Icyr<FE^F&{$&}4ac_Mxw%f#W<# z3;TQ<l*FG6`#F7uE>-CZMZRCK-tACSt1~%RVj<uSVw>*(*dXj6BRdwGDQUNQvT;3R zX>Rm!BU9~MLl1Q3=XCb*lPGh2l*Z}oc&IF%&Xx{DXRdfUvuJcyzR0Xj08-n&hq((W zpOejs>zZaTabR1-U}8*M1`YKd*%qNTk9SvxW-US98rh%Ds5h|!2USiA^3^9AAFZrL zBLR7>MP4iBCi#-=_4$A(-Eu*CLa?e57E7hIy3ct4vdDYy=m)|GIgQ*FB_|N1VOTfb z5!-8xqP}d7P?Y12frfRsIWjDl_i#sqp7{DS1NI24`8Pe96@rwl910wlhP(E3Kvp(v zOHYJE0PFTFc?uGHH}`}!%Qm!h+t#hwB6T?3axSZTB2u02Z|G9IMM`jm^dOH}NExdf zb+Kz6?+ME#W^x_bXMuFFH`4XoxXXxcuwssa1rP(4o8@XViUK3vMUCvUbRIAaFL}7w z4ZHz)Gp1_BU$N`4bgA2$@tJC?;db*Q4sN5-_&eGT@x`2-Y3^rJQ+o{N)6D9(8g%}a zv>F)Cy)PJ$2l!u{fQzM+${xO4uah_9FNOY(W{uw5&u}Nkmj07l$5Z`5dq(}Q?$`Ne z>7+C-ZW^M-khreDR$~ZHW7Bx`!Ohte>jJgy*}CB7EcKT(rzS1N=07{=$fDSTEmAhM z>16+G<FbomLX2@gbRg)Udr#00?FQ6>34w!k)91+a7kF7Vk40e(C8>EaDb|D}buk-3 zIum1PufNW&i?m_of3(X5{7(j*yE&HfU(5KPO#WvD{n`9D9~8Xph`c?kzDcv<Za3J2 zj{Fop(o58lp8Xi>&*e4d^FMUAzr6>w@-M#3lX7FeNY}+yy7^^l5zmO!s*BXBA3Rsp z!Obs3dfF0s+ois>`>Em6eRFExrO|QCpQewUYV!*HhE80oc4G9u*NNcfj>ubQ<c(=v zJPEQb&!UfOK1k=Jyc05ImscBA7ui9Fg=fA&m4|~4ip0QbFV+K#kvC)bYL+^demK1B z+HpJ?OR=_#_z#Sk%x+YF9Ogq!RuY5uvg{!`(O>6<`VrHn4t?V>dG$>}$I5zJq8N1e zoHG+e-zaths?RyH8-L}A@~=p-Qv9mCz{ig8<{Xf@n2+{AWZbVu-i~T-jwL*yEAmMb z^Mji+^pWX|yuA>4dnfXCSS{h-U*=|exzFL4v%lziPR3FHi}#6@g(|%*<n&g`>8%v$ ztyGOw(U0C9`C6qnWedlSxGln#m;0xc+WTgDUEe=b-^~V@G{+^R_pRpS0PVN+OGDXr z3fs}xmy_;RIq9@5uymEBDM_~0_^O^Ap!$XZ(z5!GW(#M#xHEcx5;w`-;v68`(gD(z z43M^rrwQS!Fv-cLyhCE2vSkJTkct<d#%PJS%)04z;>z@xTK2=j^O>?`Jufm`2@m+W zae(Hx50G~M0BH{lkoI8zwC50~=~#Yd2Z#?k$;386vyg%z(sq{Ub<yayRWTBa+j~^6 ztx?*hW2ko-v8MVDH7RHx<-+~siB)F!|7O~5z~*D^AUEsoQKi?aeHiO>AbA(%h3W3* zHE7;&NxyBfy076nSCtug*u}S!`mQQYyo%@}p`!65NBc6H9c3OT^K)&N%`yL0GJJP9 z^YR;;jg3A7ia2rhq-0N`U0YX!INPb!82#=K>}S;g_M^~1&Oy1n$Axib$q2xAt=ps2 z8k=v?=d{>*SIq}eb1I1cN^sKtw^+h{Weys*EA#K{upN_9DC8~_4-Hbvdu}x~*J5PG zm3rHEt1(U!#zDi(bIf_m?(A5lFVpS;9|#X%J`;Pse}>NQu{%P;XUK>WJkI92G7rO> z;wS-|6~}zJ+-y5=>t%}D39RYjW~1DkcDs_0XOM<{E&MW}`fFjMK`9a|<w6nlj*j`t z2)k|X>cxR0QerTP2RT<3IMr~4FwE4*N*GF66dSv6n0Gx&Yi#rhEx;-&q|LI!sU#(| z$VrNOzU@`t<+it0U)G#|SL-K+NpJD{rp|;n{lO0CO#%FGqh2ZKkqgAR(kYxzhqKut zQ%9REjr6rhgs)-8{K~3`yvVxz{Uksi7tQN#2Z{Pobcn3vvbXwX8%!XR2VrKwO6G*z z*yTnn0WztoUuXCCufLYpe<9ZYfLi}8=c>O}t-o`VTK@y__2>4le;Kd;MJQp~s@6Z` zT=g$g>))=`zcsFY*uK1X`vBV)-!W?A8f=4Z80NAkZ;#uTs5x>YIm*#3?LjG<1!6M} z*|icfs;-sjK!KUC2nObfO^w)d1IzJw6v-0!w$|C~(0hO+t$;|{Mfpp}bj!*AaholA zWp~^aG0sMZWxzJr19M4*v)?#fZKVHtj<eJXy*4c0SD&YgQw`i49^gKMTV-%g-orW2 zLzmV=H6HK~=**O3DmNuHe9n=;w{^pm*Cw59G763Q24FOW1-AFrf4Se7qf_=#p6Wh* z`#1Zil#_j$?MwB@3eR!)UIi*iY%b8_iH_zkqiJOGYQ3=29Ts-(n{-%8Eoe9{g(|6B zrLuQG`!fm{X|cTp2*A&cfEkc+e&C?5%hhCPUaW5#Ib)wR2<z(PXHhusmD+g}TIx%% z|3?)7drTXGo2C<%FSOv-PTRIO849VgY^cm<s-K~gK5Nn!<j;`Cs{K!d{x=Pou~!;g z&~QZRtkkT&_!!jnNDPEGnn>Leot(rfN<gI>T4Pny^dwcm{8XQNeuRZS3l57_^3s)6 z%HHaJ_JQjB@JTr$nMk3GgM!LY<0I_klO*ii@!&X7gsO#|_4qcalSAM`^(xi=s>=TB zjZz^7j%=jLp&dj<TerkV7YGxmt0SPU=FKHFZ#+kH!dyO}<5iV>e)f|Jq`y7p@FsJ^ zL7&i6VVUu&FQutWZ*Mp#ogU~uMZfb>Ac#Z`j;2&kP8h1Ws<b|TtWN3%Dw^1Y5n#v6 zXqAR|Ty8eMS9QSX8`6}jUU>YtnwM5jM1M?s3D{nXZ%(wmS$I9bccrkirD;3PL1RU# zu(LIn-ld_~g<nUyFtn*670u#dq{q+E2W@^hu<6c9?Kc?5Y5f=E#4#1`=Cl>qZLhBX z249Z>+B?|=XEnOz<smDb(B_(b$<20s0aEyPN-O_P_meyzRIDXL_N`iLu2yd%szZmF zWBbU8$&A(=bZPOSFh=yS*b{<Ix3&&jxZZsjaHo6Ti7^L3g|lSwBy_^)e_n#2KYNI0 z&eCaLOU%^~|J<s55p-p3dQKRn3%sjYZ`1jbm9RF^kb0Z${{ft2_?quM0DwbFwS5bG zRK?Z!Zn8->VPO{t5+p#BpizQG5;2eniD8o{CT!TUi$;=Gsolob2H8tOAt81*%4P^f zMf7id(NC?mel03mM6`>f2}tFo1(dHoL2q2t@Gu4lx&L#{%)NVev#9O&|MT;jyK~RH z&di)SbLKoK4AWAMpJC9(31`IK4-L%iMRX*UwiG4;02V;$zkGX{F}_o8M~Z5aY0%DN z?<m~9=2H?)*=i^=Bsk=4v(1Kh$%aGr%4}>j<V+KdCf<UmrU`!_-5f&kcXh<`zSCN3 zqUf!Kawb5-aY&I`rRNX#rXW9}<_FXQ>$I@@MkoYJA1dT8;qvFnMSLPf^Rr_6n8>C1 z=}7n5D^ja4{#e$RBu?#|eT`y3MwqYV*!=ayJpWigMk*A6*}IQ@U-s~Np4et<In%O4 zrQyAA7I|&2B15+^!@t*?QoL7|z9qUv(=f(*OJR1)w})!R!nAL@0E-$$MLB?|yX00H zX-f?+c;sd*_=OC>zki?CT(q~F%I2UqYoOuwxyYrd*tObh{{7zh%jN*hY56$Va=JzO zyzQ-)k3VWT{gHH4TX~#F+>ePpEvI{=(Ji0!&DbYxYb%cz-(K+rO`##aV0;K~Rzt?3 zHd`s|7JrIKPhiCP1<HP_e*~SftbP=Qu$ex^XkD$40z?X`@t{1#r^H!Thj6F3PU!P| zK+ZBJ;mI0x*`6k#c<bs;0uuT?uW}%i(-ihdH~SQmbu~iX{V@tKP~GPt0vGB&Z8~+I z6x4f+P|&<ir=WRVy!u|twxN7dsQ!pt)>yez$T&UZgvhV8TzQ7xVVh3mry`+EFlc_{ z1`%s0@@TsNMz5(cz9_U<j9O3{-gaY-I+k@fATBX>A4%hMpXS25I=Uq|cvr%}ww&pa zrs;q#*8z=(cXh}|z>v44=D;ZXVuY=YUQg^GY@K`$<$TCW!5*~5Rl@#pVcU-DT0U;^ z4vPyeOSulX5U(jN*w_nTA5K0P!2;;yLqFFXbgZgD2Zk<(TW-gr*P-?~#wx)u_TWy_ zYi+#*<!EyozSCt&PQ!U!rX2M~xlH-Q65(Ruo29X=S5``z^~$LsF|Ak5t;3`F*)vK1 z4_qw#>>9nxl-riZx-|UKt6p&c5jGT8c^>{!yXFwLGfuZl?wl#O`tb(Au+U)X{G;&w zn2%-SRPSUM$LnAqvzCo(+d(rVD5b+-TH9ba`Ggq?BYGU@+CPcyRp&}rKJY89SKx8F z@xq|voT9XiC);+wG4Q74oL}TL?VfK`7UJ?!|KVk0+P1?o4oaDEhnEd)ODx4TEsc&l z+<3BWd>Q0L6YtR9;e1j}9EPTaP($(wU4QshVq+pQ7)@fj0;yD*vw=^B?p?iXyw<(T zpnJBp;r@-m{*@MdyW(A7LFUQMbAn%3xV=V29{h8<+!*5)3PnYx;&gVCiCuLqN^iYM z*Io^Oq@j~{w-+ndBAK$54z%v~X3vYTx|ye0(u}S%xLwXVgZ!<ZE@WzJs?Te6qrvX- zb8CEn4d1V^_n}Gq!;Px??nd#EvT~~wVFwc$0lz%*V}ojsbMnfe-EyVYP@VnRe^5VK z0NJWwV|LIjCz=3p<Cr*X(r72I?IR!7c4Muc$>;a?Fa`ni4)%kG0ppR|Q{m_|&rwBH zLUr@1bX6)+KgaJKTBRC47o&gX|FC~Xeg6!x`^UXs;SHEK(bt@3kh1F<yGnCXBJR#g z^N>;9vgu1wE4m#ftJrE-Y0mW0>=oCvn~G56gn9zR-I72HxVDj7I(VL`5qaW+fy%r< zX$~vRMt$9OOA#y0Yd5V5lx79;A(1BpZdrw1DSqKwnQ4-4_pOA+r2x6PH<3$)%kr?3 zFtsur@&hML23DC3tGqq+dRCcNT^pEvpBYOkHwG%Rsn%?EkeAyvdlipzx?5Rd_PmSN zh(;cd1nmy8t82APfE-Bh^%<M+)L65<JfOBMe2Jhn7m5{bqrGE&zlJ7{(mpBPRc85D zr?{g!9XxM_E8BO*xMC!tz%mc8;0vAtL;&I2E^hzumCK98V5J&XUR7u7Dor&-4ioyF zOH+sGZ*Z)s6*q<?9xhFtUTRx0l@C-}<UkEq2P%NM1UL>;8d?lh+AunN;VO(6-)!Od zvDNVSK*w&>DPNPC*LwkJD=HHnmVTDIpLpxCbXIF(qoXGAnf5Yu62FB*>GGJqQVD{K z+p6Kt2K1n69xj%dEi{9<s|QjT9)2u|tBc2%W9*Q7GfWhE==qnq9<0lgg9REXdTfwR zd8xYG?}S9|vciCUYrB0%-BgFNBn>8o{J?`}NejppkUC%&ny_WTSESE=#~IZH7?p6J zT0)75Hvq4~paEN{0ni1dp-^eamycYKU<i~IcK?yoSi|Z6fOJ^2Tj3l2teB7h9n7Fe z-FmR60SrR|JKzU^$`4+Ea9N?Bu(EtMw=ht#HDC{7EIgnX`D};W`Wmc;iXiJ@2jo}Z zf_Hn6?O^k_)+u!glp3f{llSkSWc1l1b+DqeP+V?MU&U0aA{CHQ&|~$Zv)+OwW~=`> zG%L|W^2Ew%==6UfkTJ(Z7!3w0Hv3K+y*IMC`GJZKXxj{E<23p6E!esaYTa0BT?e)< zsB2vwwXTC&w^g(b3oI){FR}++vJcIus_8PUARdk;%S}e_5f??h@KAuod|YX@(25SI zGaruYd4QK+>T2Gwlh^!?sFv-(ieKv@2(0*etaT@|Zw|~Y^vQAF+2!8h<<?g6{v`!n z&hGp9Ta^ok=>BmD2A31xR*gf<rA6Y#(=Bj=@ZAf@KQFL@o6z@T0?Zt#N*&70yvgcN zZh1A_<ga#U$l9z!R#I0CWC5mVP65{B&h!M%eQw2xaFAosCC}=|kaJtb9NPy#gi)KX zz$7rbm*8D&7tRQZ>Ai5PQ^0RPcto=;635B924A})7LMJWgK)e_;CN=aH@RFYQ>36X zG>t6`RuM+0K~+v_X})}UdJOEQ$Q-+{2L=%+fq*QvHC)`ufsTI8fn1(?Sj*gh%^vx3 zjBrwco^*2GCek3kF5vEXA;GpDo}(`&*oJIMupNVU6TCa%nf#*WA8zyNk?3FVw&W<A zM`8|py;lPLo9tU@vPzS18{<a{*t!5?mpJ5O)&$|suXPw{fo75lF17b+(GK~q!xK<H z6iEB!xIE41xz@9e2%8-0)rcC;rF<qPT9J(%2$U8g{M;<r33N+YTBt0|m-9y?81V0t zfFwttEKmL!H6j(AlHLU@Lqk@3tM{0qbkhF~o>e39=rPZ1AWIHRV+W}jyFFW>5uVd@ zen3}Dl`tDJHBA-Lra-s#@+*He8ES==h1NZn+R(~;J!~7m3Q&OK!;BVomkRL6^P;P+ zDDv_&+k=}Qalm*7LBGVU#AtpiaeA4s&Zya5SA=(}tLAeX{>~cB-kBl46R9X1byXj! z791tdapoSz%j$TxzyXXI-x!LGJSg6)2{t+fNi#k2SExV9<?J~g+t<+USPU`W0X6HA z>Ad~!x^&TVaSg+{v)rBXj+0`GLP4R;>JFZ?u1vb!dZ5hKRYqz<fuyc76Im+s@*pSe zcALW`_x$!O`M;qvY9Vai7qia%@!ADPCxCo;RK#I23mvdJbVzp4g8BfKa4MW=T<E$< ze*GwU5vD9@Y+L@Ai0hIkqDynitDz`VB}aIt+)M?hg#kSIKM+Z&jp`s*lfTE2n-gpa z@Qf6XZoGhH<}S?6BOk1C;!4gv3@FwFy<BF8<LlCffdXpM$c|D+V&(}&sZsOrfk=db zKph$y2$qB)q)q5cZZ0}mLXXPB>Xa&{>>olX4UHMBANzBzdlo2#b)5#8uF^8i6`6!m zZE~c1^(r-A8ae0U=P`M#B2q2f;c<MRK9#K`gL4#|1*HCn4&sbK2a~ZnV+{-wow4@^ z>TSGBxmxR9Na3v;&s#TG{`+ZUzrx69NI5SuZuvA;r%DGRJC(>PEP-<D7xV{(G+8M3 zkt~|HT^+FY9&*7XQq}o^ljG#M^ZB=f`AzG6C(MVN_$8#(k3JOK<nI`EM+-~jG@#v} z`jt+Bwg(l}anCiZ8AZrxZl^qXxat-mC9E;Rn$yrtBz(4LpC`FPV`5l5#3obRtrW`O zdvL3{o%|90JL{>#8+{VjtslbA!1?gQUBlyqI)O^JO=g2P4G3PUuh|mk9p?GP*QkbY zD!HHTKax12(mAp0dn3Vy*u0jUF<aue6I4$<W!c8FbZ5|hiv1o16l!uxzv4MW?tqF? z`bkTsSA<5Q0!|=*-e7jgpO|^}k8w=g78Zw`STg$KHq{wI(0@1z&Ey{AbggZqs!K&{ z-8P;r9T~Vp->*$ZX?Ptv#Y^BByHU4_N;);bRm_&2uc~(jqN`d#RUJ0#tBUu&0C__X z{NQo3EaAGh(O7Sx!kb0mWhTLUO(>Tf0Cgilm3sUHwSYs_a!GRzeY@QA{A2j7Fyfn9 z`lIwMBm8ac)YlViZg|$iV|*im{<8Tt-!XEb+!{|BGG?~R)xOwB^r4Mhp`M<+8*c#E zz~s|`rhcC?wdop^(66b23@t0hC|6khrSLk3DQzXj_G%+!>D{mj8Xt&%ay9&^tyxuK z67Kp_4c?6Q<%+l;YAZ9guO#@}H{eXXJ&?qj`dJ*GhQEsAr^z=HZ0&OtvL7opwqMW7 z$5|LKZt&utVpDesTFc#qIQF{amys+5Q_zD*U(-c%zOPm6KwDxd_45QY4cb%&Kl<42 z0Q~R7w(hu-PqT_X-^cMMpW>gjCgVg0{9&u_f;l}?t9H7*ziHwRzy~gldvF0AQ19=< z?V$dCM_alpFynO=3=V_y`Ls5l9l#Wz@fh0$>#x1asE*=WtP_ogr#9uoEViz}^OG39 zd*O8sj`#PpH=_R=a5X~L?KWg~sTC={Mw8L%e+Jk4={O;NH+Da4_>Pt~p8JlLUQI2< zn<dfGf5Geb4k%*pcaigJ!-}ZJ#&=gLXkUj-_=a@&a42blrpL&C`-T=VKd+<JI;-3} zzFeAzO)0?<x_tw#R(2L3gfLOyQ+&ns8u68{FYWuIQQw*J>faJ<AHcIOm|$DJO*`)h z`8&|sE8jW`XNoLkX@-2NkNdstuzat@T^?5=eKVd;K2dzM@W0F!TDt6gJchZH6uw;t zVlJ7(j)GIm-Ly{6@pT&POaT0)8N3x}u#4EJFmoG8dv~O(e1f_ZeY*iv=n(#t($Lfx zf9|B8$>?LP2Yzm8w_BjI7yHk0+Y45b)vCZ5&uafRAmP3E&8#E?H3ne+FLzV{(LMMF zZovd>5Wohd>04IxP-EmNvZ7#|aNX7}T*k+d-)51hiy)PO3`NlEWJPGpcq5!wP*JBo zOTK?2Rs!6`DM-)rHD(&5D_D7UR}l|1P?ACNFUSV)fr>uNVtpAMj+~OOp}i(elqL1c zrBD_LyI@>Pe9f5#??mJk-oYXO#PcjP-*XO+c`IZ(ZgyXz5Tk@m$9u?d)4S1ALS263 zp)7^?tL`&sPnwTMu2JP^7HK21NE3wv+lJQY(fU-)@8R*m#<@a3<Sa6vgQDakpT$IE z>=RlTopy^07F-qdIZ&D-fBhVy5S6lLou|9)pDT(>P9okf4OtkxAa=(pxGzwe4HFU$ z@ce9$$%@h=q@5#~JuN`yrWbY<rIII$;fj=|EXj}`Iw{!ItUygFj9j2JgL`mH2rRLL zk^}W=s7G0v9#~?F?6YQXh&n61xjS?BQ|Q0ObXIR-w!0Oo-+Z@14Hz={&2m-P>bbG! zJNbvId4MN*Pn}@;!f}LtvOU3eFFfnvc^V#Aubv=mkH~e`KSR@gkiKyAY?$)BM|4-6 zdU{*9-OXprr>F<hWY*1?vP?ua9WpZb!NANE-Q+1gsGcX#)`kn(=jH(P#T+_9e+1x% ztMEAppJO0KF$>VpcU&DFHHt^4rqPW3@9E_I-?%Y$|AqeVHKZ5HeUV&FJZmQBGQQ*@ z<HDT@Hcv+n*}o}3YszxC6EEay=R<<vYU>m{rQ3*yor%eNDT|XQW5Yxt#nFY>!i7xI z6>@q2lK+RY3>#EP|3FkBy9TsEJ{kxYvI&#-{s37(roSGOcVZTI7TaBCl+VG;_8g&- zUL@#rDqHUPVcct_M@&GPdlPmf*cQR_oOr_L4^&*dKjs01%VUtg#Dzg#3Dbctx7+(1 zp8BPUwkp_W9DsOv;(wE0$Y==@&0q7sJAc>zEIfaKvcO>(4$6tK&0QaPSIjQcVC@(E zetWrUm)_0K7K6;+V@jkn{RdT>LTNC`mnv#B?j%&~bI1pHk%2@!5NqC7I%{eNwFeG! zr`ZXhLKU1pp$%gtF#Q%~smU$3pCu8JZzh~JD48E)+;VC^ePGi<Z;SL6O7G_xYHM`& zyLA1DN`tlB43aI$hHB;!zv64oij#`Ue2TGo1|4ehSP2|Im8E8fC;hlOq14-5j~PR8 zj@Ep&$mf1a7f5VrCXC}tHF(88c)Z1W9f?XJZtm1Pfvt3e;&NdxDA)$GyC#qHieXIR z`IyY-r#Ds-ZE+cngP?dNR#OO>(wuJDZq!csIwQ;)v-o^T?9ch)b5iWjIq-Qte3lLB z=Q3xgfRz@0ubYHHJX-$wrdDnB;5i!0f4lHgk5a(tOv=*F-^<Q@@BCF6y!olE`_=qk zX!F1S`|_jIkKeT*zc^BnvgA#gkqrMb2c6s}vSJ4i17=T0J~G*Q?}B*pP4kO=<eSC= ze^^r{j9fXJpYE3HFA|}5q^sSi<kti&gUjQGSx3$j*&ey(LyS$33Oq%ZosO4~*DCDJ zLW%GN^OT@p_({_j<VYEusT;%pi~w#dZJtAZm9|mb{<AT{Ihl@61CGTZuY64Km6kvW z<d8D9Y&=evk_Y~U7dct-?z52rNTY@0NyI#b-sW=ewKGvmGaV(jxV4#VoNq+#gQ9rk zpddEYA@}tfNG1#Hiy65^S^T!4&kFc`s27`+8Tu)!NM+lidAKcmkcUeXl09Ve#vzD> z(+|D;Zx2_2t-x}5IZ11E-xsUjVc#!g_6%aUvQRT&r}rw}ViXrT<Z^0HOmX3qJ?b9s z;+G*nIB@eg`h?&FmrWrSkiEn9K;Jzd;oyEl_ZuG|C-^TyaGEaUmaU5Ik`q$_b0~%n zG@*FW{|O#Ho6_T?YwL{cpnU0B)r@<J;4`6YWHfCjpm?NFa^}B~pEh%DG^wkIri`cj zA#$l8U$9rW9<;VLlL!&l=Lq`jkWcRsAElqNvTW9eGe+^2aQyNj8qD%L8q^q`eTvAw zMg4#w3((6~D#d2$1YVh#+5SL%b|{r|TY-kmP%>0Pui3<`;ykt10-wq{fjt#5<yD3i z7$q(7-)2!A$A18en*C!u(qzf+l0{s(HZU9CPOurYe-ZS_^W-khuLXY>lV7VEbf<LX z_ip%4*Qy&nIcah81$JeDj%TISRhET%9f-heR+h)rzfHM^LziJ}y|s7~d5DfO{mei? zOy$Bp5vC-R$h`mtYVz3J!q}|D+<%DKUC7zu7$DjI2n*TsV}m5CAo;*9*H#12gqZgU zAMaAv5^xGC-$eM`$MO5*)8EMtUmO?aheyS6`K&k3Gy4Q`i$_j!Mgr3^l!ii=JXM!6 zOt6}7@HAG26FQSV<p7VGq|Ypv)dzHG7GhaHJ|Qw^l@sy*D`&&={)ryYsSyg#L)xC6 z1(bA5ByGW@TPW#0k%S&xJ&P!*QzW75DbFt`=_QeLHzs*0=}DdxTI^||-)qJ1pLkZ& z?-ud9%JVS&u0M&4bsn~Px4fiRQ9{>v9)&NVBj2}H!u-!IG*4j$;?bkw8tCsW*xzTV z0;{MHW;pLZ$55!q6Qti?i{Ck(9VdQReeJwH-^v_=HzQ)`;(1w0Lyk-S>k0kP^5ep% z$Iq(5<7eJUu)PY;Kj8Tgo)hpSyqjPf1<xdSu7+nWJiYL&hvyl1UU@hAeDIrd|LOUl z9xx=wZ#eJyfb-{t#GgcPQQzmEDh9_M_D{q4b>O9Jz}8t%EGSt>FqK#>^r9OwQB(Oo zx>LtXCJH!{$clicvDDcjNSL?EV@T7Se4`<)Q8S^9bdWKg0MYh(@ia5}5)YKZ{`dv) zBq58A$?6SY1Aq^zFmLIH`5-&~iGd`jadno+yXjO-a5Fg!1jiz_9S%lGU1ih|G+9vz z(RPPZZt2oEhosn~s-{c3K(0uQ4N{<jnA|ucop9cLNR|3r?DS-vwAr>`XxZGIat1Wb zEnm)WfrWN6>?U1N_E(<0|K#+o<-zmFJ1qb1dGYp}bn*`55v_tvit5aroxC%NA))Wj z=9&QVqL}o#xKlk?qCA6#sGe)C1^CRE@WVT`tpN|Bs>q}>TED^b(Lu3)KJlIO{Ru;u zzTYqI-@Fq%j+3~&O<#qV{1D|Dm+btKC#*CXyt(RS+Y3ZrzZ8_h<dWM(HjH01g`ma~ zJqZmFS^Sjc88r)#`J2De6PH`4_Itk6h|A#fi=Y=%mH(7pJoz5bi+3LVE_&gH18%SP z7FL={V&g`KlhxpXG980D!x3)MNkgm?o<#=|7Yii3JcU#CXnKO0>fUdFs-P?CDXgrB zpD!*`8ekeuxKBG@po0r(B(B;Y1IA=&pP~q|Q<oMwyTeP{u}@ptz{C$e32fZ1C@>pw z|FW9{&DixCUt_kxyMUEBP%a9GiX~=;yo!hoaGw@22Sded4!0h|EB!zv>_Av{)cmd5 zu3q}9*-`>EW<m1UoYdU?a`Wr3gErYnv($~Ts7h_}7Z0ec|8y?7y_nqnr!!|N+d+UH zKcK*4L^i!?ABn$Ra^8S;o+K;Hu97UY)`>LM6zj$CK3^}6`(mya-?0^8#W7~L1?+3d zV_ZP;BP|Fttwt&P|KJI8fjO{n725Lc#$V;=-L#HfkCX7WEf`IQZEs7{ylXBH-Zg`o zcTJsN%AC!!9|d@&ZTJkE@MBqJoZ%4OID^rCEWN*GP%$jz`FIn*GTR_cz&%|W1M79D zcZ^OUwk62bwD5y;vy+1S$gb_`;bW?kLhi`3)f5rUve%pDS^FYC?PP_&eMU-tdL_OL zQ9e=_^6OrjnR^%-IF1#e{QrWwsqGazsvKC(-k+0vlJ$k+Su^YqYgut-B;@>c^Bl@z zv;2&J>;cHdsEKhEG-wL5uXeeW`fT~3Bm)IYM@!bxkjjcsU^3L@cE~G|_%c7#ZeLf> z;~l~5YYXbl-jwh{L<QPD{NOKWH0y=;=z+_(JS)!Xzfd6+MAg^vwSNn1x@q>T+-O;> zWnon8WDAP$eyp1RbfNB^#UUSB%~h9Ct?YWb1#-%Z)(fG6cgplevy?@XQhe)sM5of5 z)>W1z)by%JUZ}As)iKN$2ig1bTbNVax!;#0i>s19e^9ObFe}1wo!zOEp9}semo3FV z*)iBA%MVh$iz+V-_|;wvX~ChjOqN*w2IgB>vAN(nlVq(@rpoSbXrZEokIogdu6&E$ zz8U$mMB>kcm9v{Q&koQyWh+Y^Zg~ge(g9e?mO%4tl^uE%32QnWwuC9O>T_%`Vf}WO z1_V43+aAFs-Ta1*ssf@)h@@VN<|pNxXbwR=D0?c>&D?03oKCqdlsi?Wn?vcH=q7Rl z<w!b9HlJ09fpR0!9JP*j$p)SAc%Hn;VDs2Mgk7(qM|2g^lRUwb=#km&#O>7AP74Ld zY`$A|0rm78JNd)T5Z5~>GEZox%PkL8H$CrdKRAD~gP(c+jd>+JcgHYrM|%F_4+a0n zV$ySNiygLJ#Kn=s8Zux`jv$Y;Qo{7o9JI9o3MtGQxtY9o25>C21x|_=*pe>f(%B64 z%MkU8cPJ~$LX98`Y7-@C4iLD;tnNIa@+(pjEMO8(aGQLy>axbo8gWu4*QyCfNR|L0 z`R%GOA(=qL!Yz-zUtBw5iK)7!sO4_2=nL5Usyu4}O^(3AetA_N%4p2;#*-=;7)3Y~ zb{=kd^l$M)T7&>MY~QZ8=O>2i8&)(M3i*l~I>`arR&5%+ME^gU_&MmkmFw451F_7) zURMhtjl136?{LX;7U8u%O5{*-Xa5%HVg7xjdJHXMJy0F`%?S(f^|!CpLhvC<)W?rz z$3+v^`&?%#3j?H9W?(39VEBshhC=?!y~6)EDhZ@+Nk2t8h{-#EjZ!7xOS7PvZih1< z^~q1(hTKbkYp~8>wI2%DPob$jTg$KR)6}zI^lhuAjQT>CE_gk^R9%xrn$PNuD!Td~ z9eoNr^Qv|%=z{)_ZkZMS-UZa{ef}MIDqQG&<Svn<m-5;+&RIoW)1Qi5b&)=EqsF@k z@5{d-kt`4qhy2)Ybz?nvyfGiw6sga~Rj111fJk#R%D3Fgg+6^y9PaaMVLuwM+IhJ! z-Vtswb<OSsia?0NBjg1txJdlR`TS3iVE-G^Fis^;6aTX&vIEiZnY_Q)W9aUmqoB3@ z2mNo|!QERg;$A2g^1LI6V|B>hHR>fo0Vg2CAn~_~%7$ISgSt-O{B0pjJkJ=^UppZG zu2Zuo00O9*YHN1o;r;anUVRBQw6$L?c{Hyso09KTlYyNs$^<&qU{Nw#(?3tJ(PpNW z&I?~V3etz_9y2^Hb^;yHquEq%@hv8+A7kr?Xk;b-i)dtHc-?9+GU+q*F!lL)f|2bJ z!N|Izf|32zH&E++(Kj%|+KLy3?WJ8c+qKp_qP1`>f-wN|-XmIQ;VrbTxeG=`w9>*` zX<bu8X?-G1iNmxTD6Kx8r#0bK)tYIPwo;@i6EN*!O0#6}w4oW8HjL*LX}`S)(@+}+ zI+@MWzP=LEKBF{ajwtUSrtRl&r+M0*bC~u9rS+WSX&6_;y5^4@4zNdgm0^&!9{!@C zMfm=hkEhkBj%R}L|HpVfeI$B33xDW%dU_^d3Abq_JRLH(m+tlTB`^J*Z{P~=df&hl z?|nF&t8qB*73E*z*-QB*tNE<0KgTdAA5rQko*EjG8@zh}1<lrVK|J3qgRG+E*yUvC zvUSZ>xJ&^R@atylnu+u)2Y*est{FwYYOQ_?z09!s<LPCJ)sN!|4Yc}?(?C!y{-g9B zIpOvV44!bW4-B4g&+!2jlj~PB;T{|qJPGd}7(5AoIWTw<-b87$L|PH0*#`zs%&THd z%yBU$W^#;)`OUe(6Z7M9gD2+O=lH}F{@G8k_w<^D#2UZ`{rE$Q63>G!>}9*;U!7GH zpk?p5)$h&W?|p0+J1CDkM-UgO01Kl5`uh<;`Vja4*o<KoRL6+lZqD7gu=`dRSIvL? zdD=IyKB9el&P28EgY{9>H}yxh@AYVaTSWVON`_S5e!W2jT*m>Cx3|DI@8@J`S;H%w zuR`4!UEI*9`YNIUj-A!&^F9!X6pdFI><<R<^U1*X<L841Bk;2_di>saFseBV&qlWQ zv1ow8v;V>Pp#j8udh;O{mhXo0uf_74`iaRFR4~;ykm3E%H;{}3Fs1pQ7~^R#MTHI$ zwyl2jOH2uWITLOzmiF~JDh*rP1FbzEuQ?;IJCGqQC;b@}v}0YkVyy6U*wO2$(3^Ro zH>;43L>D@p16&eOo;Mn5WVmW?8@ivVsa3J1Swz*;3dv4nym^klH`Vd=y*c1JV{VwN zWIkB`b%G5(FYG>wrl|N*sJ=WfAYQ(JB`8kq(7rj41E1@3e;2~@Bk^F`Ao;I_njp7u zt*F8BIy9&0viBLuq33&W#6c4mpPXRzn}BeZd++qgCTnXwGE`;RsDwg7r%Vz$kr}uA zPrqQ#tgY7*SPm(GIOJpBXgB>iabyDy(+1a?r~Dhiq{)3-b$0AWg|HQO)wfWeKI(v9 z@Mq4x+tKjHkDfB&8|$(9?I=Q2T4oy92Z4pByyI2<|H2IKh{EK%Oob^+QwoQA6H5U^ zlG_qj*{z+4sL*l)bc**VN9~c*A;*V%gr1UoE3=H=4BoFX9CCz!e9xz{ri-2Ou^*{A zHH(<NKlgC%e$u4QWD88p9IZk-3_vDtQ#Azk0ppB(@+pUB@2NqWU!zI$%RR3O{RSi! zk=j>iqOUP09tyAMX9w%hqS)*)BU%;I@YwJgp;hRex7n?JICif}B#c-DMofi6rTEfN z2ykL;4dRru_c&A&t3GnwuWBB_xptOY<sk|YAJTA_J5ZJ-XKBfkbmMyqGU3>2IgK|& zqkq(BJ?OeqYMZ~@5;+w#S*h+k72%%&jZ@(?MDk_(W>iU*f&u%cE;~6pceAF{KvM_G zR(Z5MtN$4z4+ix(`8>Az*OTRXCcdI`a4t(-rb=CxnB|*)#P#IKgwTU_TvCTyS(+_Z zolsP1f|P}J<uohC<7bDQr+&;0zA7wJ?c2CdhJrq?wP1Oq=(Jb5kx4<;)WHuS7r03_ z^7Zj>4cYh|k0Mt8r=+uu0K3BgRzG@bfPRyM@#ZX})&CmyN7}?XVRWPPlhF3{_#YKD z_=45{TfDEFnZY{Q9toFQhW8BlMayV8lOYY~3FuJI)@jTr4w+UBFD}CG(nrwoPNTus zm}T%5_?osFrK{oiIqiA%_;e|gHnVpSk!&|$#<L2iCkEn@<6h;{Q$!8u(rn*{J(r|L zOjISvXP;Fi$Ta?i5%&vdVHL1<z!XR&aq?klq)vVx6j@=RcLQdR!oKh^*9*$!W1X#z zb%R;HbKY6*huZr(q!ny~fhsfW5BJao5?p1=&K}`{NgB^eaNrsL=8&hWU#xyFQrt!y zi#iMr3bd&+!u<Ho=U@mhP!C#*l@UmWgcJ(VkA5UGT22G{c><22t<#WE1n4&xmEw0m ze?@<7O{c+-`!;*CT7Ksb(Kh8mUe=fuhyDgFiXn!7X<R&A_I^H1H6eqqIolv5k{g{b zg$OXYz04@WZk6RA+M(M8q#EszC!Q9{K7jx6D1t_ldNkJeeDsY_D3q;#<zePNHNqYP z*@1|}!M;Gc<Jl<syWH0ohm-+wB4NPX8NHC(fD>llD}tVpXoTlIMM~|3xE%K%Q_tq( zSy47oT^m!V=f+~%t)vry3QH&(mROhF!o@4zS?v{;D$kSOB-o%Bl2g=Y%YSGg2VuUB zG~a1sb2@n_sKPew@_4X0aoC&}p*bNhmk!j!$J}0rT&cBT8W)ue<Mo${`h5dxacq|h z@_06C#odO*O@bkc@AUN<o5v#(%p3`Yo<0riA1`yKKDDSEJDWA+!F;~fsVp_gZ$7K8 zxhZTKjN=#BU>pZ1$LT5m7E0*FL1=qfkXSW>n!R7V>G**Pl^;MquRKzhZyC*pWiTJU z;<p5nxxK{5Df;rvcye28ZJk8)G>go5tp3pymIj!IAx1%4t$qWg!Qg#H^yw5ULdzl% z6dY}_eY4^?on{S0*f2(gZzg2;3;7l@vmFI{y_evUdBDJlI76F%zTa!^fg8v@FteXx zt~98bm8Y?7fr=i;I=*$k_a<WVuQ#-%Abi@4T~b*Q!B_O4lPBmOdk4*G(4SI2;0|qD zkl3)jRZ6|tlha4`Po8fPqxqZk8!alkk-d2<MnuDcn#|aWB5vAbZ9RtDY=s3%Ru*T= zW53`e97Ry21t-1NVf>UiIY4`cRXOA@pHU~&<z&W`NmCSv={szX&aCH^mm*t0h1ciE zZ**&g^AJu2C$0WBM35G$WCT>Q>KW~R^7piPWWquFVe;4$tFr4~irk}#a?TEykxZsk zrx54$X)w#v<V(XJsq=_j#L6C+ro&tU%j*!!7Wm=9UpsKV5_aEzQQx=j7l=ve)A<+k z9s5x<KafiCa$z$NJV8@1AZ>y@LTryX(H>GSepB$`mm6#%mR91tt286~=@l%)FA#LO z8Gvpz(giJc<TZmfp)m{%UcT;_2mI;e8)*v(*q_HwS7C-Zc&|N!U2my^o&_p40>ZN8 z|N25v*$Syr;~r)!(ncIR>3N5IH%0NXg|5J@9<zMZ&9mT5+*mEka20+V*#zRj&i=f* zdzD7)UN|XV#CA6Yc>vrZ=mGA{0sBT&9ELh9;bvJ|@1e;g>bXHQZ7FPVpLO%5<?sZ| zSfXoOm6mCgnj=$f9DJV2DmJqNWaNNDy$IHl2NfpeuQ%!#McTdNHmDA*vS52<6~RDB z7Hl~3%O`{evNVYbbBMCm^{Hg;zcz|#vz6}_*(Pba(vSnC$PfRQ#+^V4<rmri(Wh=z zi=wh;#WATv8trtULmp|f?EM#E;M+rEgBRJiLi2F@O7QiWbTChTqKAPpQmn0ybChCd z8uD<j*(Ixuxt6Enx_w1U%wqF5K?{|;%rwj$9?NO<*tG30`X&PT7z^|a3xLhw<=?9X z<j`gyGy5jC7YnLa3vysVRxGITFHwC>25yvgmN9EZc|X<4n<~l!zVZN;w^S|f$<r$8 zvm(k1#RIIsKXOPpa@z0DhyNp58AtxCF9XpvKd3ZhVU56(mmU{Bjw}=HTXWw=Cr5`K zkL6A$27R!gcft9o<jreqmwgjI^#TjIutQLd^gz>Qn7b8t@eDg&BkXv^xXt>S%?9r^ z=mW&J4E42e2YQdMefti_JXFz`QZ82iM(EvyEw(chi#qAQBYdn)d0b_1x022}P=-Lo z^HA=zDhJL1m=&#`ac&BC*?HP(D(Bko((|ws9r8~;6N^yI6g<i^AqzZC%QRACf*jmG zjfEXz_KoME5QnX;A+hQ!w(^EierVnFDjX%KM?R`G&f5CAo<_{o8i;E?c$7CVSLDkG zx6j(zs?RrCwG42`XOD<BLMIks8-P%-Vi+`Z$#ogoMP;2)3C0`GM|;5A_bA6LQ5VmT zHOO^?ApamBnG<GJ&@JEkl}b`(Fj&zrxjX8_ac~G#yABEqrSO9HV!<dJkqe#|6O}@c z`If^xuTYlcxaFx&=oU7XS8l<B!cMORiB*-yd=}OG;DnFmInE+K(ZOjC#w^em2^{1Y zMcV2nveF@+KBOZnn}FBSNRJ+B;s<&tC<KVl-&NwXnJp*cQ+Y&fqm!p2@tLkA&QuY> z(J&0r06?C#*z}>CfWyy2XH}APMMTTd0}PhgV3H?2u9i8Q&4MjJK2OOR{ShVC_p3DO z-9JX*Bw1ProzPYB=3_ssieO|FwsR`US^UT7kz`Gqr5oU+og@ELD||-G!CY`oH<+u> z@xjCsl{}W0n%hfs5Hrt*rPbkvRw+yHHh8>4ZlGg>WnvE+;)>~MeuPg?S{d^EV;aHh zfukOR$)Ek77!;4o8_DIsdvvHoql73Y8^SM$i{js$Y_Bw`PBM<aimuTn?+!?(0#MoM zsn*qp$R!5)f=spEdn*rhZc0o<bF!X<L>v1xnv>nmR^sJzty^w?Lg%o<y833!{cT%P z85KVeXzJ6u1F`q99ozxO4%HXP+Ck1h;Cz7bF8a|?#60x-z27?`Kh8T$^M_v;XOK=q zodr9rt1%WkJ3+pRp}qt9%HHBNy@lAp%6z|0Gw{d)5!eYe&Xdiro<-3sCkBh#=O{WS zDO=B>la$*x1kWK3i%nRJw<4DRmCzND{n^lgS(7M3Y=0Q2_)FbP3!qD8Yilj=x;lRt zE#wcQ23=YZ^ShZw3yzDX=AX2z7_VI6y;<kTBQ#U@y_kQWq5nQ!_x&RN{lfD&0$EjJ z5(+Fze4;HK27bRO(e?>EPIwpb+)YOOXTlfwFFYSN-*PFegWQpNe}bym=E3KIm<3ul z!vE0|?B9qx2bTM(IDW8u6zyo1=h2C>^;v*oCFVfuQ}7~LoG!WYFWiK#kCo&h_%G4x zgzWj7N%$c2-$F8HEy$!z7i$uaHhFUPqb9Bj8F*|HlnRIHMXVJY1)OTod+l0QhI8L! zy>~kI;FOvSlfI1D{!8&#&}e~KG!CcTLAG1I0_8bn7S@Pda0ecra`(gj|Lv0|^6%T{ zlnWoDwxOqg@>Ane&RPA97!1v*yo?=eZ!IEMg+)47g?}KqiKVl3GXNOc+wqU`GPY8- z;C%rh1S@zD5s7UZz<Et@RqgFqRF%WC;~cuIpjc>^ymD6TbwABjy3u<UiNvh_CQSso zR3{d5&pNAZ`2GhGq#cpP9Zbk$pm)FkVX(AAz);khBLcA!TG>i;HqrVQJiAo_FJWEt z5xia>!1v|}tTc@W5w(OaWNtItMa91P1R*W7UDbF7s6s8yA$p=85Cwbx)Q$Gayei)w zrTamO^WIMAa&Uw?JeC0<^eEGSak}RzPL!2U0!=w6J93VY8M!V{TUwNivTmIwqeLxI z5>mQE+S(mSiMC73iMCDfcN;vXfL=z#^JT|h!&=>V-aJ75m975WbS@)V>~?saUTd<p zqEQx+R;&LvIG{+c%S^uDIbUBw!(y0?nJHp6ddK2S^p2ug`0O*fS-3lN10hNJJKb*) z`YC>^jmK}*P@fbV&)y*%$DJX6?qOCLji;U7;Z@Ois;yz$tHpgM`rUa7)(k$sf#;Zb z$494M2DHExs5r$=P@p?E&a-krQCocB46A=8y!nIPRP2A@3~zGV>@nok=p=x)6pn!f zi0;+emmA|x!wzHh4--fEZ8+G8zP>o=O72H)d6m;4->_a4+@`vbWp8^>yP=vufdTqM zPGqKTWzD#$Rr_YeNqO8K+ceCdqUFCpk@|3Xl!r_B7x(hXn)*V+AoF<NETc4rTE>>5 z<F?jcC_1Gzw(wMLFWnFw_D*Ca>1>IK4T*9o{a$;C>QZ{2=f;8asEB%!=z0j9vg0-H zXOo2ejS!O{HeSM}DI6bmUo-4}6xxARn%O%AyS$g6#N&5@{5}wtr{T`mcHxZe(#q>l zKBm8rK`c$-TBn!z^5dj5Ut^j<y4eY5OgV3z$}qhhDhGfBU%t^h>j!i|Q**s|QlzsM z^rOacn6JlStn;1)r_!6S&A72sp9mr0`{5O~huaR}R}6;g6tTfnBP4ewa2cg+o+U89 z58evrRUxx{)gj&S#V;g%<;Vo4@rh6+4-139oPp1C&6IW80iJG#^a@O;Q_m#2F1RrK z%{vm+^hF?)?KRc4oWz{M%RQ0@d+HH?7a&8tosJi&xYTO7&L;g){d<~;!l-J5x~qDW zdAY1>j$;)KSvWCB40{36p#LGSVwtqx?d8^^hlT-#ahcd2YQbG*&suDO4O>vmTabIW z`zg#fFAGq0$@B}QizDDW5Pmqq4_Dzs4X81`M>h0}D+AwIqxUwE3nd*=s>h^2ws_3; zJ{=uWL)Vd1&Rf71rizW{$^T>G_m0ah5}BP?W04{Vz5K-EYK;km4mjSo1M=rv*dB*V z-ggd}j=j*3t|$1JbGu-2fKEOI{XQ}@(e~f)HyNHgh9&C#g$YijmwbBEklj2WaLuzM zKFu~bt!o}tgJoO&sKv^RI0f&e?KRUU8@x^B-dlWfywpHpycV;C7Vf{yG$!hL)>2&X z)(W|rM;Bx+^g{!kXY)+h*A-e{UwTYzX{?J(r7(uX?!kk$S_KmY^8HBS(*^s(i8gkk z`F1yJ&LUMzbgSa<HD;Qm8@MHQ3FmF(aSwC$2`BdD%nemK99UscYu8v_A#6)`KY`1Z zwgx^LyX8B>N&5Axzu&E(U`ZsZ>EKg(v$)x{1)74eUar$!R851{PUS4yNb9}HNpxK4 z8%@WRci|5wEgq9$xQ!ecG(XA(j+zhW`&X;hKCqi!CcraQ@VSph`KG>21J4YD&sM=R zqQUbt@GOI*f-h3RkN++TJVAg9tyP}b!&CtW<@T$&Uy9D%6$$v13fLA6_;@5>hYI+U zXh10v@Q4bS9}Re;0Ccw7Q8w$AZ$BewTwviQAaez*Vk=%JSzGtT(d|1?oWFCYca}6h zPIUdHBY68Cp<1fLgLSkmJXpX@$B7FI$`_vTkMMlRSafvXPW9ojyBIbksnE?1$UpDp z;c89f(%;&89l}&>We3SOxsHH29>GI+2fB+JPf9L$y@1Pl2>cS~KXTXDn!=6S=+=*K zG2*J=RW2?>#@Z<x@^qR7nRIKiiPfWT7>RGwiO8UYM&Ul2!}r<CaGxFF#vOM5YITP# z3nkN4BXlU4wn!-$%Kdk?+P{vYtyZ(_+8k}!)hiX?oq^iCn?&=RTJ!GU&0B=cn@kKq zuG&0QPw8Myn~9AKz~82zcRtk7jcS|dl?B^9nYa57gm)T4r)~>4_;7d#Lz@6*3w6Oj zeUzuuS99oLws2E-tI&RsYJE+cjnYlbZGmlRp6}PDcxfEFA*;<8t^HCQ3X$<89J^ch zO9w&|MH~2rn`Rtt^Q2-U=7~lG1NIICaa-I~PC5O!m=id>l{>J338e7Bs<V-kDx(RP z4d}AAl3&u2eBW+VB+KC<&n0F#nW>l>!}W_Q`KfXM!O;YuCsYX8gnN_2Z7Os*Ysi7Y z$Y9IO%2JD4-qxnEp+U@wa{ABcswW?g1r=NI!$%ZCY6)5rdlo_0x)0M4BOB=EKWYEr z-(*RvrG(AN$4%^)+`}6*X9S6D@y*=YyKG`^Z)gHAITpD%Tz?UsYzK@)x2!kz@B_$G zz5$r$ci=on!Yy42XL)Lv16oK+Z8IX<g2?{+L)<MR9#^3tYb)_9(eTF*{tWIi4+{9V zkZYmqGP7qje#Mw`@<Z!&Bmh<Kk>0d!z#^CALrZSe#-b^p_PdhC0?y_Je#-ZnX)I2K z>gWn3N1msGN((rl$clsd&Kd>rkT2F%8sekplE-P~PvoPQu8v;3R@~+M`W{CP7EX00 zvYW30uTqVH@;K!SwQ|Zw*Csh~*DAs(&;FJJ$|GJ8+k-O5?mNgYD-msjQ4nq4gF>R1 z%ELs+4~a6FGHyho?a#JE+d+614NtT!gJ%~!zlY}(JkO0*Wj^uo2?+^_NoM>PAMb*E zet1$xCE8wszw1&HZM2^k>Eh||;GW1YjHuOaM8=A`U2F;R;X{4RCZo53ElmSNoD@eS z5p}1*#H>+Aq|@Q3JNrD(W3OY9y`d3Dr0r>{i-KCwi1mKe64$$$yS8X$bFy*nAH$h) zJslU&ySAfBo`0`4*Y_C2ov`<pTyk=|&SZDo72-Z92qTkDQG3qZulmsE_P?T5nAF)w zH_zUKaaB8@1PW$jj&VujYw9q1s{!8g@C!B@>@!aJ@As(lD%F$yI5#_fK~0mcM9z4r znH^wzJVC_INL&?nKOhL2hJkfHO{&3Jj#`v!H2ZXNW*(mvucZ?B>3)vMcY37Ne}o(q zr&|4o>1Bk~zuzFj6M7HmF4Ereolda&UqM?ox08I^r}PRPHs5DPjL{-3Wy_Hs6%jo` zDr`Y}%Xb`S6$hDK2JB?5826E)OoV(HJWi?J5R%I~*zz1GCJXt2l1w+CA>I*+2SVlK z0TSeoKZS~C`8v`j_5k=Hw%kH4>&4fR3Q3np;*PfowLDm|8g4pLe-_T0PWFCaVLwih zdh!Fb%p7RKjLFlNS*-qQj535GuwD`nn7MxIwQ+;>TdRF~{noK@nttn_3_`y(AoY3E z&ZpN3hs(C{orwn4h;IHaW$5?7o52mR`W*6<n^coUi?CeoBEM|*Q@Q&A09}ReQR;1g zB~K4dlr)?uJMQBbBi!$s|FAb>)%f#kk>0H6wMfa5vRYi>qgVN2IBdAkN$mY^YD=gP ziKaW1?Q*z~aAn4;HGi;{*IYt1i-L%FCmVHm>^5*bM*2$~{u_Zw(nP|$FM-MDNZ0Xy zg~y}r*m!K}Apo3n&>zI6$D{Sew)Wr0<EcS-+_C@)WV_@S*C<LPVzm1o3t&dM%fv>= z3%PH?u+?`szVDRHYsV$ph(Akmv7CY)?}fOsF?S_Ul!@p>d>T4@zeWmGYo0S{zMF*$ z&Lkmpz@X=?JEdwtpT8?An&;8@^U>#IL7%xJw231%`b<?cq<592lXRwdc3^HsdqrOr zIVf=eI<a?wrv5H_-$v+?oV9>h6%^_>r1R{N`j9pr4Liy)QEiTkHDtRnR*Pf{l;w1l zk#k&m`e~Jp4hb}5*92;F$VCRth*9Ksz#-c!Nd>yAtcaReHd`|acF32h-)8e~Wb2IQ z1aA^6!uWP49ayQn0S-y{!g}QO<c%X0s+!n?9yH3b)wt<eeC5fgMJ-KY<ymkXACG5b zV8Sw7@}J1w(Sos$l7wz;%^-VA(g(YOl$o+98jP<mVa1PqeTmHpzP=R6#VS#(HG#P^ zXd8oF>)k!7)H4|lyGAKKP?pJR^58IcnX<$LfIv6UbGljnV=TzAuwfhozC6X+`ZDd8 zg{&q6t-&EjyTb^}qyy%KeCKKrG8@A$9QI!9Kuz1zZ)*D(`ZxrB=W{J(9QQa=3g{dr z6~SkR{FeF=P8N+&e>q<D7UI^6ceB|hn10Av%fDHzUyW2{1Y{phR62Ps;E)6&;%5ps zKx;{;MA&RK2z|0dat^jE(3}D2r;|V}oCLh+`x4{1xI7ytz^s*>^SPr9(jA7>dP==k zq^`uRE1Mf8XjwAE$FhhlDI&Erv$m%CCLwmeNoOx#<y0+ff5FZ5rRk+Pl85^*<mL&g z|3dR1|Ak@e1kWPV`BrX91ZVYgYgqUU?Lgv-JU1(ca|CRM<#|^BBXmm30V=naUm{$s zEG@5+m6ou#g-OuXEeUiKH!Jn|9xv1`SGI-S-b2y33IM@jI1g%l>Gg98IoZjHw9m$B zq$#XY6jqF$^@tHzoQDdWPhqj&1|o`OrTV2^cLQI(rF?0Z>X&w<`i(E`CbP>ezmH-? zH#;O7$@B#+Nc=r`JyjZG;RF01d->)6A$WhB2e6;Goi{|a2d^+YUAWJEh?StP10Iiu z+`(G?JMndXs+-L$IAd*ZBVi+V#QhAH;og#&Xrm~;W8tKk_Y#Ghksny0uAyoS+WR>a z)@6DPKh-LUERo+EP_9c^F)HZt`vA!Aklk9|39wIMb{Y3#$%c@o*K`H&D>HbR=W;5G zE%FrF)KVQ7gWU;?hMZ0|Nf|6rz}0A87p^xvJ2BDr0X$im{89IxBYk%tTVXO7HvC_e z6#zRuJOF@0OVxb~cvRK3@Jwbh8ImDqfKf(?7$9OK5h6h#%z$~2NkkGRgiH`jf?mZj z)ym_X0FuYxOm1_s9i;uWzwPZqZ)<;VZ=bdz)Rrd1CV&qfT12s4v}jK{Sb0R4JY@d0 z_TFdaOdg8%e*gbnzHc}ud#}CE+H0-7_G|66=&IsnIgqi{h;vOV6Lj=3)R>Vjiy2mV zX@;$5X@;F|f~Uc9!cNcY){@6)q1;!MA8zH-{todpdOc}=uRcGxG-D~cj9a24>2gm( z4ep!?IxF?3015|cwZl}M<fr4_KKd&`p|!yW(#i4+3n@rv`}<EuHk#eaqJ7b87NVal z%|NGi<4CDpUY?N=GRk*lWI&>oCg!I>)tNLg6A~@3UONKvS+7HLlYE%er$eEo0JB^P zR18MQs*H4U0049F?!K5|f!rLq!cHp8@<y9nkS4FnKygo$OYI?pTyB8^*4AV2_p&tn z+v-JAY-nqmI~d4lqgw-8G8GxGk{(1%aOJW*15}2vliDqc88!gKYcfG&8^Mo3S)!8* z%!sWU#viDx)U7P|yBeOl5*=SRF9FyzCO-gZBexLa9++>;0F`tt-gaqE4L0c8t&0vx zN%?_e(%H~BEKuSYY&?SBB<w539~3!iY)z9OFS`KoaxBlV3y<N=3T!+lZ4zW>K!Z6^ z@y|@TG!6co2d@j!b<ENXr|hyK-Q04iS@{ln%y=vVL*3%y0s9_^MO(vI_Jq|+(tut^ z7SlNDZ$%@FV;uERvO>aoU1B3OaR<HQQBL;jbup-Y6e>lz51@j-qJhc}K9QvJcjU{a zTIH7%wvGeagJo7)D@I(7<S0$gW0Z7DO_y>bmM*i>&+yE3YUb$vgOpWR^;L*6^nsiB z7gA|h^x7WX*_kFQ)O+}n03JZ$zn(=$k0x<I3*n%$8Ni+cFp|muW%G#ptT;X@rvb&! z2{r#G$Q~oq{393j@uB9o>`Y?8K8I+i`F1QiBGkO?l3oopF9&s_g_{4?)oA&!tMQ)* zH9w?=njhMe6bm&Ex(rV!l9aQT5Hk?!c>31KIZU@H4`1Z;jV5uxi43rIEu%XHE{p<e zlYzcU+a;BkQQ=$1gfA7#=-8kso0YoZfXT2R|Iu>*3-y2SsU9!6$ZcqSqCJ117kglc z`6e}cH^M?)2xK8)t;qLVDNm2b^Yjg5+_{UR@f7XNm7nyfJpB>l>5m@cJT+6E?#80W zhx0W5(<o10AfxhhpAC8X`$zr>o|;vjX1+*y${NTxt4xi<i!uqQ{9GUBOk^|YC7Awt z-vuolSr9owV@<3D;(qw)NDZO({RjG@eShDlTIHbDUm91x_cT^MA1k+v2v^6}W9#DX zKgh*DrkfE@<CFm}1$xLv7!|i!NsptuVM4pv*PkpV`ufL9iKUM2EuZ8bEP(Wh?N;AF zvN+i{0Bhh<f4_TEuLe?|-);_8J(m^Ey%;zs-ay{T>LN8y!x)VaR|AAN!GGDk+0vHm zYF}>E7X}VW9}?-u!Q$uK-UBaLt)A`#=o%QzyzDs|L3<iMFCqI2{oxgxC${SY9k>n_ z4S2!O@z$n~pzQh{eXWjHKuhxjrnSo7H*oEY`c2u=H@rirwEpaTl-4VU15J+1hi*cN zPOQprm;*$Z;wuNB5ajJb7EnH5q@({8&42aP&yN?d;|$uYkGP^LKe-A=s-tr2(g^x$ zke^%^LEE?G^nW+~e{}?pq$LX;#s>`4LP&BePhA*gxZ$#rcAm=$$x$|3h?6EhAPt=3 z0}`<l`bqyIMja`%k!4o0NN&9gkt(#vt)=uOM+hVvsQr_GGgWCE-p-;pl2*hYGVUhs z4Eae!7}3OYZmdz70!vZ6E;k7#Kk}2<60)i-tOAN#NTHG5R@s#1rv0TdavY7r>->K} z6m+7;AJIz{kR2+31%WN{0wz~zLFW;QEximC(TmskBNIfMKVk(`BN!<yGEq$QM<z)Y zH|;aDl!Z{_aihlV4M$UhB@uu4I^i3?U^C=!j>+mZCr+^T;$3gA72hznr8f=V{P>m$ zZ=pu-LVQTxe0+S}TZ)hSy>5K0^WKGzJH7YfW2N^&eB9v`@v+p~hL6SGr|>b~`!jsZ z@pj-N)B7qurg`7Q$F<&f@iED(;KSnW!$+dmY~q-k31t*IyG{qhH{1e<Z@30;PI;{+ z3Yr!J4Wgt0F>lQ6SP1lD@qwIroz&mj(VXmS)JKv<Lq%wO1zpyKlD(NwmUcHrCI25* zQP!*@LF6JiUa34b2v5pgJQqAB7Hiq+G(~xprm}SsvNaX5y``ooPlBs?b&FXf0e{3I zw4zU4(uxvFw$j*CJLu6%#=TA3tCe}1Avw5?eK)Tlqv`%?6;U<WlG{OU&uBf^Je?d3 z{^4Fo>+DU~lMeqb{3khtM!!Gh)#qn)2NDsWHh=NA;Uk-~_}{u<D?Z#B8q|Ttq2_&C z9^}!hPXv>6yAI7ZSvSrxS>J@`d+<}>_X+$i!tXPlhd(3yQs9U16M5Q=@Jol^Z1~*@ zKPUW(;J0iJt4l3=4g4zLw;FzR@LLZ*Km6L^_f7tz`rlsZ$?d3?i_a(zeKKN*PI{^1 z8XM}ub032)d<qB7+=yJG$W3SSn$m?pbs{LoTR({#=#;mq>i8p+NPGec<Smqv{Y@Eq zA#hWoj>gys>%|OzI8nSFo%LOdHxRD!hs~nZAD%3xu*INU))&g5&M0ki)fxB;mjCyI z$YhZOG=AE#^}%26`}jR6jg&UhOmQOFWW;#32PGG4L&!wk#||mq{zn{o&oRxGj_7Tr zr=%=uoS^){kAH;>tXy8xQfbDXyFl*Pw(!mP>h|LQ%7w4--QjS^>qQ~(ACAO4hZm#u zZ}~n<M^~t&?ufM1Q>iF*=wA*R8EF<A-AyJ(Se!}1F2mW7!QXu^tZ1+L-dk9KnYuGP zA=iX=T-FWfbdA3!HA-%TRGq=tFVJg1ug@oicxW^yZ-Y@1$TF%slRyEJrEU1}$z+2u z_+1~iZfhDWHRa;`Ub?n#%4W%-7E*>`g(awKBdj@b1(~;@R4DET&gORT@f83B|2Cr@ zR+qQi^8MlD#*gJPJRU*!;^}I!t-KgsXh3MmB)qt7A&{{NPh!kFuxsd~)ZAl=<vz4o zpgEPwZ7EC`FrEVjFex%(+_)k$DbA3K=+)gLY^$AgkK%t|V?E<Qk(EexQkElcN1SFb zU*6-R_Wd#c-zq!+&l}x2`cxGpjg*ZM4Px*C4w6oaopMnIDbB|`g~c{`bB<h;tz?}U z-h+hJ3Fy@ddr>dGk*c%mb$xOkbWV91NNgf$u!WrD94W{1Fe$rq+Z?YG12s4fO3Qj& zG&;HR%fKMtHv#%sA$1bokGtF7Z-WUIu<^H~FrAc^QYWXgLN0PZ`HO!rq5+++Jg8P7 z-U!+IAe+XY9*tfT)RtQP+pRjG6*rZE(#V#b)DSxzCy0K0y}gusqb{=cZh{1?aYQ`p zPOn;DZ#lpy&-6m~Lv`XfA<j}R{5`IVQk|2mG^sG|N~I#1Zk92JiJ)DjA)M2iRSzRg zX9#s+coPs}z4Am0XdR3wv;a2=Q1?h?(y)q@7-5p%uo|C>0C2Ig{qG|dLwsta?~P84 zFyfWmGz5tcwlH-u1l6wFak*oG$to7_xcqb;JQwe{>~p~L)*YAKi{W|mj?2G1Hr^^; zzvD74zr@KADNIL7MEy9Mj?+_kX~+{Y^0Oi8N9rQo`cv~q#MicvV!OXTLAnD7VRutU z`s!{fbN2#+a*_AJcSmfs8tN0MH}`0|GDHt2^6?h7WQ(sPp<)>95emC>r2ilEv|E{b zQmz>SjpeBZtY(wd8F-v|Qk;TIK<O$zxf_p@yP7b$3ubmTLzT*FG?buG`BWKuy|e9a z(K-0*%4qAI)qhhNrSonzvBeHm$+4IVC>YDBI`+R32^Pb0PO^BamDOv8>EjdP400l> zkE^x%IGL!*_>ZJ!NGVdrS~DE{D2ne?Wh~+P@kdddtC>u&722@PXN>43Rw|wgXrRGj zM~L@UE8jlL$hPlqBX&umXcWfK_}_oiZh5FEOpBr5z3bNugK8yoK2G%hN&bHP2}AU% zzm3h`?|c|V^dBFM#^0?U#t`*=DgJI<{gwIqFCUG?-`>+ve3yJQ7Jpwp{bl&ua4w#| zyV+e*<-HHb=I=c*G+z90H2xNx9*w^#=Z5pQ0u)Ma2RHS`vnk3a)a|$qT?mslywDiC zFK5R4a$&u&^ZPUiv>BZ)(z!Q1SIl9OL8W3Mmx^SN3N8}<#cn`fCylFAj(*G<*?)Sp z9ZvsWqs=>UdNirH=dZEmJ!Vq3ILtkX^aC{90ei=x)5}F8E((k2q7oAmm)kvGNnDf# zr^jZ~OCLnrVLd$>o4)(Ol}ZZmOtiAVZsXiaA?sSh28iMOgh@;atlg40-$<1iI1Dq$ zx!8$;d67jh5m=+)*fP$s!klO)&OE~y<^Jo~&3yCyXftp6>uAmV&HFKSJ+1A;aa_Sx zmocs|d5baUXRE#%bCAAcVLdg5_2v&o!}_yRUxqm;82#_3A8YxdO!;7hir{mbXHN0C z4aV1y47nX$%0J#825h3hU5cc_j_u$7VSlqxCq6JrG|S=UP4q5PTteFLg!K4?`g!Ob zd&6r<+&lJgtAN-)CF}jM+WYJO(zI8+MbQt398V$LN+!&V@9a``sPJy(YML_AKeT^O z0DHH1A<@S-p`-Q<Q+Zxb{wl;)Or;=lvAL%A0L(r$=iB}>7J4NEC$`kYmYvOSXO3Lx z#5PebGlxb*<33x%mw;yCv64fr#{jNsC^XHtC^nxifI<L%sA8qkse%uoM<EU#hH3%a zq=Ea63Ku4xG!?FIB-}<7u8(-q$)QRB#L#)y42Qd&!I2Z}>V?LAJ1H418YRO;qhz>f zlnfIMVv>`H%P5y%`~bPcg6EqhHsZ>WOLB-S1C2LanQ}>{nv#viD8)2HRq>Eqf^Guk z5<5)l<+}8>a!DG!1@IyFus!ks4Th(47%NB!tfb~A={#N#I~}+Ao0saPRL2IJ1RBy; zLT{;7A~)&nwP-xq<L#q{6Pm}fUmQJK4LAGL=-K%^d)w&QnLK;V=-C;Ny#=xz(d-8* zLp7uH=6PQbo0eH0#3f`7PskW6(8Jog+7agiFksX#M~|)Xe)K2oJ%aln+Y<&O{HA98 za?}#b4kqbn<W5u+6X;dXQWiNQr}d=t0Ck!_1)b(=<Bg-^{Abqic%~K%Za?bcyLk=w zy+4nXp-U0ZNRYJ*B($(TQeCN(?Vuq$aL<sMk_z<^SV=C}!2>GIW450xb()&GkjB{+ zov=1Pv@ij~D(UmFJ6)1pXo+)`Kb+WPb+4>cKJoDqnW5|4E0t4ss&UansXQ`zkBbJ6 zsZ*^#y17XexA+)w9K-zSRp&-Pk&tuHqs?{PogQfTK8?7SnJa?@5x_+FhM(<0zgujw zQezbx`k%dbCT=tgQF_vll(jjb>-^15o?RTD?PQUdoy;pgjJFl!u%f>lb>$>Zhfi0t z6)JSv^h)LBo7A9j7;ks|5So{BOzF)qd?^Qv)Zat=cc|E8eRb^kXu@ujzvGAguvPfR zF8ZhMfQ#O~`Yk-XzXgHwDA%k}4YW4w$;U(GnlA4iniIKG&GGEn#dCg7b3TmbnD;#W z7Rxz6b6$z&Oy6^s=XB7VUu(*^Sq{Ccw`(2X;(}i`{GNc{FW{#$a>oTmV*>tX7!eOB z)8jph^|F7ey<!6WOOdF>0}qhiki)=jNm}q^4Y*4K9+A?}=JNH3WM}MC_I$=JBw-Kv zxx5jSak^ZPPUitq3Yu|r%H`M^v~qA+<$^RdVK}~}Nn_#rr(P|-*$n)_G4cI&@8{ub z{_nt7oQe1N#3@jHv}T+*DzoV3z8w)Q$C%{@83M7-Uo*(<tRw?|WJCI>_Kso^bFDgs z<YWABTQnxcwb`os-Wkl9<FyQ8QWPSbMIluA86|!m+6FV5AFXd-TKJ_b9`XX`JF)wt zI7zuEx)@H{Le*}iElb5{4qjz~s$DrFq3(%7jjL8977l!506;oF%84CDR+E9A;y0-- z>y(R6v__-}Xv9m+|DUXkT0&WJ55g>OyzoS)T=r(=ONs$jmVEeNH|0*jtSW8q(;zWQ z-p~MzrN=69SE^Sz&cPrd1pX6Ev#QLbI}5(|uD|16M_0q_;Jhi03&NxKL7u0AP5iN5 zdc(p^ZMohh??EZ}PH>*SJ;~`5S`W||)NewSKjSVF@Y=DjML$hw{Vsh=xS81#`dSP( zGv{^QrO#Te)k;q_pJ^R|rfqbD#pR^x6u;jtl(eO~0K5HB>}GN7Fg~$orDj<I3u#CK z#EuZ@UAgL%;jE+Si1Y_xcM>T()n*cQm+0GEdUzzXxf1-{27iyCH%y&9p6W5pd{A`w zyNxBi7?Q%d1XgM^^?sgu1XE`Utxxh+irZiWlc06mrHAXAs+He9p2P!1tpjp2u@=Di z+h!`^*dJlo-^{Ter@=l-+dec6DLz7ulJ@|AM%pInrS_yYlMC=E>AgLQ?%fY<=yn+a zxx|v*TtqH?lhNthbljON9&?TpUnf;>0)|HCc(Kdr6CN$1MkgmQ2)%zBj8eaVvG1qO z4#AI?pI3Tc20>ZL{()+FZW5{%`j_IMPQsS@n@;G&j6H9D&#Io);H%q<|0^Xc5i5Fs zw7?1Ec6)#Pw$&OeK3kvSR_@!7q-!sONsYC;ct96`R$`>fVAa{I<9MHX>0CW9xcvb7 zi=a(h58BFkYV#yv_W|UX|NZNGir>XphatD~?B?sE$%6mXZJqC%QVu}2fsSP*389;v z;mtKskR%O=k%Op7@NQ7wcl4v7oe=y0UqGP0J-r(<u5p~dKUvuM7X52HbN%7(PZxrJ zqHbxtO45XpF~G*bFLq-y@pO!8S(IvV`~O<v!FpkA;$=Pz#4A1<jL{FI{5(*o&4hj* z^yn9=kCJT;XqX-S7^tFo8novW4KdP>0V$d%1YzbCi7bvp1fB2=2R*j8nkT5=c=_ui zz9Cw)^&6Vrg-`Up26~)dgs^~EnVspvqxS<U!tM?g=hIl9i1n47rj`AJGQ8k3WccZ< z<0LYY-wjahUOS+p?7B1%A;qWM+OS+}x!U?pIa6DB<)agieAni_R;T#ONAssl?^mGz zfq_x|=~wW8deLZ2Onu5VY8c%ks6nfSpodJ{>qNvZU8EY6Li?8Js)fL_)NvyEYYAr! z1Xm<GUTMfQoOIM!ghz36r7~VE;S7=-fe%2fhMx9RU%yjI>CsV@(_su%`1+U7zwc*% z7x?;TN&@_ieLNrfct>LBW?%nwX#%8elpbE+lW#;wQ)n{U{vhOxTXI!M13I6kH&pN} zy>4wc8u3un_uh+*nFWo(1CqGdb5SCCh6i#kxza$+wrC*d=YG#DwYqD&;zF!-MdKf$ z8mj5tbuP9~ppAF8%Wa}J$abZT5$||;{7OmK`xrK?;?sc$i-*V-O49%h(xh1^k&+yo zsgD(^en(j>RQ(v|m$hZl_0d?->>XvXX!e<(dtN$0h0G)?GDffLAImvN23e6`H#*EA z6()Z~@IW<wG^eL;=16*?S1&R^gB4FFhhZf$u|0`edfgyi)m}i|`1DnKlvarcFz)gW z(eU=a6<J)f!*mkye#{?Dl5@IL?l>$8qzBRSC~Gzi(hD!}3Fft!xQzY|v%_U>xX$fS z{&RzR<|^zx163>S7X~6F<Z!5=-sIK&&}t1Wcitd*wKbY!HDXjSZEZEfYjg72GNHDg zfs_Ea!Q@sxydw!+4?!g^qluIoyN!Asg6T`JJ*^n#3cff#tG^n)_tZxEJ>K%)ZB|J! zY<*=<h{c~yVL>*SYqHmwYqH0xaEWEcrO(wsJsK?fW2lS=s84`2dMnC~SMCO>pPNkb zy0QjiSF#xO|Ft<9Mw(XCi?<bdm0g>8mEWa6R)5Ppop>`3Y5fzLInSf~A@;p*(X@pg z<v(bF^w4A;%zB%eu}iHfQzvfqcF@n<wV7jSrn}@GB?}Tl)sZck9wi-LmwOLTz+4rd z<k%;#-yCZqED~t*wtp6Fo-WorsCXj#i|3u*6l*&Bz_CsI1OKrp*5Jjw!7ps$4Ssb~ z^y|-T;_cc)3#9X!+ch;a0&G<QA7?dlz`J9BFbR0mJaQ7if`Dk}0iT_u^8o7bCGvQs z$$A2QAHZ+ZDwFk%Rn$I+$Nzr*voYd-v-3f1(C-Mw0|-A2@}#_*9v}AGQ=bv99J9Ue z{y-ZH9{=LO;ICuB;O{)CE*`t8`QCHXiC8*&(2IS_uMUl3=NM)i`ST9yb%|}v*2iU6 zS`Wn?DRCe{3uIQ-9nzZ9C+&HcLG>O0r~rkEG}vVq49gjBMaLPb=nEUv_70nTHK*&O zBxnOp9^(h1ZnjlKkFnx6<UG~&8Kgg+gg1ZT7q5PYlMuAR=aTTDgClnDd8;q<L|Y9_ zMuUhT%x4pFJAj-r-KG2&cRV4Mej!>dZ+|`^>Nq9pqNJ$f9=1j&4*Y{<C7z`Cw}I}x z<lmO2lg|0KLG>Y`@6pqi7TDQ?HNSunqkv8ry6FCLKRFN0bHLnUfhw%b*Wnk_`4=Zx zcS0UwWVJ}kX0yD(C~q)_Qejer2|f8{e8>yy<PA1?gS{so9aiXi@);lU)8d=OyhW$u z6|@2ijc$Rqa_O*iO7{=w#VP&)qj<G{AVHkqA23K}qL(Wya)H%<Aksw&(%=u=FqGXE zpou!3Lc?Ygmjy3VCsB8PQVL0>c3x1u=5#<4%T^n&5X-kvmTe<Aui8w?&3WZ^F$HG# z*kFTPZif*ouiU0hvXOEN7df<CG544rLaWm${(gfriDDsIV1=KmciFr3Fm(mK{|?KN z{dq3CQ0TJfd2AqNLLodn8ib<vk$LEcmUJEWQ(R)sE3u2oi#Y}*c2Z)@E3s)(Y&^<v z5-G7cPBdV&YP^`c!jjbmnI6DXoQe3E{4G|rPZr!k<25j&DP0PK^9mcPwIm#vL-Y05 z-&AKOlM#3pS%Hn2LC$BLb8NA1y4Jn2Lb;lju+qzyHd(+z`YrZ-w1HjZ^}H3(#1;0u zEjD=tG!Y(KjP$xLMJWFKgU*M51#>A2vWd$K1d27vWrrC=o=ekAmyLKVAR$sB6-xrF zaM>$^X?czln@wx$vN~(K96dp&Zi^wf{azHJ+Zj6w$<(a3gGPtDLVL1`H=hh$lr?g* zog9))j{dbm;bFPl3^h9r357?q`biJ)2s&>y1{;r-l@5B(sQpJBfM|+pnpA(CW@P%8 zKabQ6bc=ZeJ<xM~>#?nqC8|1=chJ!OU<3=+3dNl?m}=L^{kCNPR;bxXbn4EUHvTy@ z{}$TovPgkBuRufJ0y`-%<`rn@TVNvvHiMp5!|<u6Xy1E9%qh236QCr_9UVuuWEqa` zrBcx;du)!dP}t)*O2z(=TyAs>G^F4~$8KYS4*D}aAsf~_{{6M|`&C!?eaF!)vxq4R zK4GJbMe!V^-+`*fo;L<PZ=v+eBBkcMQmry5wUbg~Ua3|Yl-fwXjnnJPQrezXVCzzq z*)aY1#pQE5AVGMd0~?{$hhL^Mq2^3rvWARvytUa}r-m%W+4Q&Aam-`uOn7i&G(=z> z{z$UpE#Y6cW2oK;)&zWxINsWFKJ>L6%{Cp3WSfm-AXJNq4XZhbnS+#mnO<}Av5~!o zb{asT5;cA~>)a*8L{4PA?f9>TsgVX7=rr-RB=qe{FM`|TRH~tB?V;x33P1=1=~*5q z0ofF)BdOIeevFR}{NzNa7}QIa%jOT?yE!#h5;C$G6c6$wmcoZ4^DC9_%1JuZ6EtQV zlzZ9QZ8Ycr;6{1sURBR@I>Ml3dSFliVPtNh3d?PE&?#WW_a*2v{^(d*C3w5;FSW1$ zs$)NV*VWPaZzXvLrR1bIk3}wrqO-0<QgHnzCD9AX)K`SrABi+xgCo_?;j7ywS1La& zWG8IK*2p%Pw=+l~u#<)<vibKX7~XPt><!Cc8M2B7Qk8CtHI`06&WxCXWE~kr0&4dp zFt;;6V1uc;(yas*C+YOftiRKRCg_1N`aRX<^ne%o3pyWGL%4q_LYQdt&@02m>PqF= zf@sTIl32^T0L&m|5)WQ6o<>qhXV!j4Ps8NutizQRa;kF7Nihag_09HBqn1Fo1A%f` zpw=Z{NTB4yV-u(gWRjTNh90-_FYvkQ%E)|Wjgu|K?eK9<q(4%s^{A9;W|V414cUwl z54*JUQSmmapYpCmKhbHc0PRnyk0?8s@0FOY(vJV^GCwv#X#F$Yw74=p2!a2@-CyHz zD;~q&L@AjJblj8zbPTa*rcOw0Pbwj)ZN}t?%LahbTg1e~1v=j64-sFcM{a*@6n0Q< z)bbH-xcvv6p9_JBdUd*I)?e9l&)<UWr*3>-2MM0oZlXI$)5Y29PSWpi3xyn}{!`G~ zm9iLK)I^-nQ&mxaqX+sAGgdeZw7Q={D0g3GA^MJsulbftmu_+#7X^%mn6=-nyuj`$ z)ti2YTSidXk6D6?91rQK$DmgM{K>5I<giC+V|nU#$En}_of*n11D|o+o`Dyd1n(by z#$oD4oe$(iSKWB}1{(W|SKWVoCA#WH^Bx#`U1pS7d^gf}v%E2_ry!kqwSYy3g_vYL zJ)pIcP8A3GeIYPjuL`R{e`Uf7V{2M#L`qhcUEocFp%QZ&ZueToY4<i_e<pZWPtob( z#4GKUc=1Ajo)Wqe3*Ek>*-mRL@n*-@nEg359y&ByjdW2*ZJ*G-4y~KYE%FKrNtFc{ zRz30xYs~zn2d2jAL>6s5Fa*4~J#SmO)NmzA0{D45`dbz!0@X0Oj9c;aGn>OOd=(cV z$xMqHR)#EejV9n)W>kY8ip-Z^5k|!fzJk{+7gHU#;ELvOdb!Xl7h347SuV8Yc4##m z%F8ja5ir_HDZJ^5=46GIER(}!2S%=nXXL8SVWj@xNJb)C;(8F>KSh-8z_SJlTX01v zr5ei27>%)0US@#?(}9<^wzh_TA?6Q@`U4t}F<L217-zR%FYLZRx;sx9v$_o(fs<ky zITCEqlLMU}BzE>13`d21ue4upIGVdZa8f!=V9kFdmY2I9(7dsIDioW>&VP;s8-|sg z8Y^oVQFb~loA$ZI0MlbI%3a!MB>P9XpMw5^-a#+?)J>!4YEKb%pCjFEWhrW#4vJIh zhkFf0@CB^CEX8oNJtcQP00j<8ACLp&2;@ShzjKk{P;O_)BJ37OCsxpDKr+o}zaH?s zZrA72W@P(vub_RyKTiGRToGj?+kevs?O&A@D6dHPJvthvxZWz1hvN^-ieQcsbhdQ< z%}^aZH5=u)Y+^MYl{G!XkIHa|SkwKZhAj9!Ji7@*m={L;!UR%gsgTPp${(wkOBBty z54X4FqqsCKYUb&`Y;HWi<FYPar)&8;NusVk>x^;@-esH`G&XdeGPvd9z8I28c!)xz zA$h^tXeAM;53%lfnqn<)!FXglU!|^&hWy<Y=npgo+pUrL#1lq0T|>%tm^WS!9(MJ? zXdblWlcWnmi}An(q1k0zFC1Tbz)F&Oj0fnxRk!^P>5l|3I@!D(jaQ5NNQ9sh*1IDO z7V1GBeVt8JGN~~QtF7~WgQ3&E)uxkfgs+%9P`eH*w?gIlv~E44J*RAF9MQ=pX#YGt zxzKu2dKM#L)`a~X_B-HvKn^Jwe>kd%y&4}616^=n)KtGiCj=Dc{x<iRTx^!B!g-ZO zVJG$bRAxbA!=^rudf&4{*ol|gNv`3NAJ(R9y~m^bqCQyy+TO}+%Ev_-jPA%$XsUm^ zMJMI5;V90~bcFS)B|gF5G^B<Ck&-o|Qn8s_0^CXg-B=6)KdB0nroKXdj~&_oNIRez zk1fM{*maTISm7cIyCIS9q2d>_vK=Mh13llca%(FTWQ<<tf7zz752qL7m^B#!9Et;A z`SDe(HXwvuwNGP~X4)zi!~h^)Q}XphZtSJSPh0Zm!vT1CR)-3;#e`64arMVc;t--r zh2ZjnXM{XLDo)oPO^7-Q+d@wbo9U_HV`w^1tvpqunkY}KkHFtbl}^W_R*3h|NYCO7 z(qO6fC|}n?!r%L<n1ePvKUfIb5^rl?6bsOs7e*2V30EA^BD3lvpj!GA84IC<R|<{6 zxm6!usBfFBkc_v)-|$o`zX(TI<Sp9y68wz^Y`UQ3fLzumCFNf1{gnEeu;|D+@eWvE z77u|eUzd9<uhu9f=QW$9#5|Wpe43mq1o6TNkn|yB39aaJ2C|u%7=Q?^-=u5CC>kbq zeY_O<2MwjXWsYh&I+KQoxj*{%)!2C(EK1d!sPj_l(oE`$6o+{|(o3|Gxx*@%KB5w9 ztP%wy7TM!0?E27P3(dliAkb(r1$EY)MtPe#^Z>zy_++0WcA=rmU8!7uGh5Wu^x;)( zG}NAqD@2pVNP8%o8)*;WJ?%~);N;=gBHmU(F!CBM3ySTqBv4OZY%EZOm>{P{3eEne zu(=_XtTX}#J3lZef9cnRW{DDbl=yV!O0?knR!mO6fgW<nCJVjB@i@K7rhKwSE2tjj zw#t~G-p2%WCdghj*<kS~``5(F>cq+~kkzpA_?mcG4J&_HdBw7taB&P-4O3ag5CB|O zEB#9_R*ZNZ$QR0LD$43O6vO}q3?cI&U;2oY8y&9*tuLy=`U_Q9pQU&6($qND6}?R~ z9=1+&s`A>C9kqd`qV{6+?}=R0o>fz%JodRBT5x9+u!t6Hj{cp?3qBZ4nMQHISeV90 zgO%RZL&<Piqx>Ewz+n{Nmqr)h4WkQi?JO?9;V}i+F>AO0k9q%Hg$$1=#~{HdZi~>6 zNlry`Fglgdh;7WCI+4zq*pZWjXH94c6roZ<-l!(8E9Wjmrwt}14f780kT1n%>Oy`h z>Bbx1q|BDL8dcU-R9U4K@geG3J_O=<7mUH=4M&$a8NHgK{h~RTkMWmYkrvYUOL(K{ zEyrOIJwMDu!~R%+rpXilhY8@@Z)d3tx0CsZ^F`^$bqr~eZ>6qGVG=-}qu)p4?X9NW zEEeX*LS6?Fq*q4Gw5yeawB5G2c8jIZn57s`puvb9wUv8ksV)ICY2ZyPs;r16P6C{< zPQ|GvN#m&-{6DVcUv^p7@_02E-W&$P4Mw6v(}p8)ZtvK5NZo&g0T2{&u((gPYA`F~ zb@Ap5-2Nfz@{C&FV(<lI8=ZMI!wXEis?0FwY8G=3dg#h1*KiJJSK>-&W;w<sSc2c9 zv#P7n{XR4ix`||UN6=Uhz3h|Xu%pNf%!m1;<E&(bVash3mY&aBD4NLGPy)FGt$hI` zwb0**@gLzcFg<E~a+nW+-W0%RxIY2Zr`Xv(q3B~=%MbA_Psc(!v8&&CcN+Ozy2?uZ zWa7LrY{>Js;4Jaq_^u*G{vy{ytF9+2jCo}i5X6Jx*V|3#pmD;Y{nEMubkIn{9icyd zGdb@#LY+7+<MvrmSB~?kD@RgH@0dikSlmi_rm9P>WjEI*p>Ovs=ExQxRT_}Wj&!QB z;<|4TqaJL=p%v6^4F*&z!f9j85a8^9mONHOgMf|ZUm-ewMhi^Vp@F61h3d#=qw>A; ze5VDN3o}shZW?ed?+#;gHF7!Z0oI<Utfi*~Fq8r#$r99fRTg)YwUvsWx@}DZwne0O zF*aG*5KM0i{QK=tA5`SH!`S#6nC;eL#7dx35A)F-z5kd9S_b>#NdJlPlhLd%n$IQ= zpU=|pU%4ldo44w@4}KvqOOLi0bb)&qZ%q_^0<>Mg^c600&dFuwyjq*M9GYDkGIMph z3qOMKzh_3Hx!{*!sHmK&8Dpr*DNs`+D|wH0-u<<8>`VkyFTH6*&#rLUQNiwdvy}tJ z@A*or54@2_Odi?5QX(tN%>JehKZ*0d@p8EhQq`m+L$MiFarz3riYs8NxKT=Tyy^ab zc17G)ctvy@e5z(MO59C1qq@fM+7Sm^N@4RU!+==><ZY^9=^=`TENC}5?`||YA89r_ z3mVrr*R*)rU3wQ!>w`3-b4~LZXAV5`nom2k#8b|j#dn>v#S`c<n;3=>O~9)cFdQb# zV0N4ac>!%?S8W|XG||dmC3y$d_Bg_+_~cT2%+5!IofzZ+zHfG}5q6%y_Z)c7V_L;| zGYfR&oXz|WIO~|-0cSJ2u;IKxDr_&;`}%Vl6Mg-8%{E{E-T1b?Ioa1=&^XiA?`oOW zUY-yIcq9t20RiC6)x6$0O}xjMA=Wx)iff#iqQ`lYxY9XGEC(tqb7qS!r$a1sE*6(K zZxk0f7m4$o`QlvX9C5buHgT47tvJ(JBTk1=bK}L53_YZ57j4ca(dujzEzY|{v$Iw- zI@d`P0avrX+t8Z;I>yyIgj1Li*Je|YtWZsYcoh)$*=dZpCFyc5qi#Kh37N{Q=QPQm zOJ7Ap-*+|iJ;LdGfYY~w({~T2@2|cJeVd~IVwAr1K;QL1-+O?*wLsrBKwl5gcO}rb z9O%0Y=<5Rd76N^j0DTt$edhyx=K_6aqr!OtFrl=a3$#rG+S-A(HlVE)Xlnrun1KUv zG`@TpX-u!ljJT^Dqp=13Kc%yqp%zNouBn`~X{01`v~mC=q;sxhs^ovwL*@egf#f-j zOPqNvi$EBXdP=BW6HS~BiBr)`nXIr0`#ORaIcO~PcN~#RY_u2VG`&|R&!s0d+-M+v zKLQV%adRwJjRzfN?!Rl8`)v(#+c|R|rOXwZops_P&StUUOEYw76kt)5p*g_NY+z_6 zFf;=gnhp$21BTjxp*CQs6&Pv(hMIw)M(3g!Tb5GMUlPG1v3#ivC{i%;wt0LXcxEc6 zwiT(3$EcK1*IvgNWv!!JSlgw>5Jl1<t&-67XpZn0QouKm*V5Eps;~55yXv7`E%!mD zXm4Mg;2Xr24(2td)cQLTWE|b=x_kq-NaMAc(|rSTrA%M{yq59p?gS_c$pcWv*MF-t z!M8ObrxA-Ac=6h`6c>2O=PCT}c>CD>l^&en<&gIPVORtLTh|J$xJ;!|Q6o;`{0?-8 zUt>v9p9_1$ui4?|@LTwno)R+;G^|N?To3}=ut0ZK7t&P-lr!I1#n*A#!qhfgC+Db3 z72lE?@hNRgR*<T@K!jHZ%Z8MvX@E6pIV`(;3ujA9^C1zv>9w)+c|1KEVMUgf&eQCe zwvMG)h&0rD3*M=^H{*YhJPWN&cx`QjJl7*VTd(CpIgFk?B`gMVT;hoP-Q;|*Y6vCQ zgybB@EEiHJ>GCB*K1}9K0Dz7n4l6G)!;fh+cad~eKID+YSZ?DW%}K&lu}O8C!1n+9 z`7D4EdY^{S&ua+%6He$K@KNF0d{o%UM}>d=Dx<=xD8RBP(er`mP9XY1Ao@HYdJYgh z8;G6>M9%=CrvuT`farEmA~qNmtS~BAay#;h&2_>PxOj`T<#|n8exhm1cX?aB#oN-( z+wv%H%OhW<Eu~R_CDFFbgSO;ATe6`onb4LDXiGY@B@NnQhql<DEmmlY1=?bUwiuoH z($$Ohi&4dxLj?&hCF4A*Zj|+NMRW}CEtw--?}DyWub+Diw1zU3IS~e~*F&d*Z1H{2 ztZPQP?MQLFE;^&y)edU3=o+p8>|DFDNSu(fcQTh{ZB9=KHIvq)#NmhN8GH-ph$(e3 z-Qht6QLh73K{_|1nSwOLu+7Al%)tJyZH@c0D{jrXVXcAnzos=jei3a==xS|ic#ftu znpj7g_RKv7Euz>H17iQe5JydDeT;g*rua$eyR`W48v4rkzc88Mp9^@#<DbRxkIVT& z{GVSGkN>BGSAhSK!LN+}r&o_f|F2#3Rp`&;oehk0q!pm!7P|COuD?405$&NiNkS_| z9HQz^`STD<NuvwYp*q>1DqCd@RhU9xfbP+=L5*vVw>8@1HI4S@<l18|*B-y-+T%aC z_IT#2Xpe`Z0QW_;$6C-H)u25pL3^wK?QsWaj}p)xMW8)y1MT4e?Xdu~M=ofOIiNkV zKoi~wJefCwC!C_tJLO!~NJg0K&-kDq4UOo#n(?O^H=_F~v0a?lS)ABw`Wb2OixS&A z$S7){!2~FgKjlehb!w7I<0BdxzpSD09!}$5aT-6zY5X*&@l#)g#_OX1cSUKu5@=iw zG+qWYb^(nGfyPUK#*2W)^MS^5fyT3e#<PINGl9m_fyOvv&l-!yp$Uu(-(=&ooA#C4 zq^n$PBnFb*f1c*dr#UmUIUk>;IcYRU2djd^%0Ma_xUq=LEbhAY02lcqR}Dc09&%2Z z%8Eb02mdNM_`i-F{AGsB3Yv2ppBB)Zch1qATWQV=ZO%GY+Z39k6DN?@m4^TsEiNNG zE}>}(Ij8O~)OINjC_&zWqAQtO^y%<=qnh>uRQh2crUm|(fT?I+q_x_|`EZk2$J}>$ z>a&O6lx-Y0!K(E91FAuzf%<H`C>!=A>F7xb*7`N}*;5|nnN)hb8}Czt?LXsowTW5T z;AR$3Jun`SL94lcV^M==!0QGz?Qa-J{wxL#g+JCnY90N0-AH#GSB8I5JpK!P)Et5C zA{zbW8R&!6L+Qshz~1yIe;z+dTiAWMVV_84pZM{|7z3b|f8lsb^hWcr`%uu=iD|J; zXVo>Q?tKDF*7K6pL8mTQqK~ugh6Z#XjO$}=b0;sUtL^%Ncm@75HcAqhgVO8j)i1fx z4?zWU7s`#knXRuhk=6gv8CpL(7%Mh=axW6ITz01QpjeNGG3y)`8t3d7M689!`$0Sn zxB(q3(z~nUOwl`OY=tu<4Bu(j7ql6dxS$qv)wB<4xHec7#{PDhsjAuNY`P|lz(d`} zC5v37%-mCab^(peYNTHm0$q9<2~r5G8wc9YW00%*9B(wvRdIP}Y+P<taUoTG6dk8S z2&{ob=N#s%%z2v-SccC<LZA?z`9fe3K4%Jnx%gbnHd&onLSQ;RGlamk_{?UuuCQPX z;Gv+iMhGO}lPlbd8io6JjlzA8E8OE;(Z0?VZ#O=t34wiF@nS4h=PV(B=Y_E93D9YE zCSMlZ#FhoZ?h^&13uyEm{|AC$e`naZ<F5ixYFpwR{#VWxL6iOAaeH$B5-59vu%hg2 z!U6x_xVGg>^m{OMFH%`p(Fp`f=pr>kZA+I>2PgXtp&}*`Z~h&F7i#W6vS|Vn*%wF8 z1b!E~3K++MQ9^44u)6mrNi^Vwe;XddT!)d>T?R*2<8@3L&ajC?AblK{2K0YbGqk?P zxMa>87y-%cR(^E8N)?54Jr{*DA>%GU9t0wtRrW((*&Am3WFJ%pYy7G+plgBsoIS5; z*wd+D&kLMAKj-Xumb2&koIOu+_5?Y5S~+`~D0{?hFsex~l5K<$>>(KG9)J<;J{aNd zhLNuZM!7pxmi3LrvNKo8vc7~a4Zp^zRPUoyKO?mEQlBqFNajwp)3x&X!CuM?>~v+= z>GEA610Hk~o5^Ym9^Pg<&NZg7A}e{3f5jq5NnHOPXg3sLw+2}0O;Tg_Z?^&4hJ>A$ zkSVTYU@ZUQBwoBEDb~&5JCO}G(v{WieHG-$9W*X+E7B|)?Z<Go_cwUNzRe6QzF$8~ zO#Z}XoPmDRSYl#k6c7USQSrd_O-wi*<yGu9jV&C1)(FQzjd1*d3&#swIDXEB<5?~o z-{->dBo~e#7milmcd3xv1VWMlLXr(a;s7C81VWMzLNXJCWHAUy*8d|R0e(?Ac^~8? zROko&zKGHK21ckm*@QC?OpI|ZO6br8qW#N2C|5E39qXkpqT0p7#1>!P9O;o@fnF{? z)2`E;fUI|}X}QO@En$&#m-ppgSgk9S6DjJ*Tfz|GB6K9o5HTidMW_#ymatm~EfRL? zp^bWBcY$7QYi9yRsQ{T~vT##ORgB~D>a_aeVg7+18OIihqZ*O;lSU-=a*>Ezo6P2G z6A+2-aFO^X7YUh*#15t}ny5I;;W{J#|F_Qg5OoH2=S-a_q4KEJJKk3LP<n}xsnHOp zJZ>Ww@SJpQrVr26|46$mayzDV1YWR6Q;;hVQhX*K$^p1^xYti3lchl|G_KJw-F5IH ztL3wV_|LmYWf}}KzC}=ODSo}yAlICs3Jq}QisLa}xC0AU^{I-iJwfH~c@2L*((v~k z&fjC4zlS(~_jCUKj`R0<&flMM{{B1f^55mdHQfPo@Ex!@d<X0{u^GDmBf$3t;QJ=v z``3Z*^}zS_!1sHcYsFe;jkpH*UkLoK>iZ{$`55zy&p?ko6S4pcid;agLQcTe9#sI+ zfttQixKQ*dBjgr+j0@27;lndr#GMXOL>W=6GQu26Lj4=Zj7T4=BbP?qIP*V~8E5{< z&ZuFA8JJ;?GQ(WRiAb5@kcJv(FtQ!EK-Y<rMwxPvFnkPFb<tfMX8&zb`Yy!mzwI6# z<-)AIx-co`(E&Xm^7}wIDWx}4;*aN<cZU)FtGS)}2shUJ{C|Y=>K>PUv~(kPb}_<C zfV;#P;T4-3#*c8P%e`d`+bv+OUTep&hhoApN}IpDx9;>24f{gFhqNzn39Rw;Fyg#| z+jH^tv~S5A(k-Dy-5hbC-Hh(j)<gHIBq!*76JP&qX-d0W?;DsS3I2|Rg;r@kgAL6N z920YV{c}Via8SH4zb&N*0|d^I&iS_L=LAdjQWEJz$g}Nc$jisNrC)U$V2O@fmpuMY zp>Gk?MZ5k#;Lqyz>Ew`aXpT6!{bl-n^goBa4R7>0=SXL9IoVX;8=5Uy7TyD&2o@R~ z2gJL5d9$UveB1Q1B~N=n0*s5sK!<ckphGMt1O84!yFS>WZ!3ueZ`VWmIkMl;-C!<7 z<Ssh8MM93i->s~@k3{AK3nM~++8P~k9N+SBub0N@>%AKu-3dBq0pMRJ6_Rd*-wNMM z^KDI-EnVI2HUvuzKq>h8F}3yY!3QQ|+r`wZZW2LXbe0^T#KmrtZtbZ4Lx<bjSz044 zlgQ=Z3O(BYC6z!6`m_35BipzU9tIO^Jt<}2;y><6HoA1i<yPrmxHn(u@2|8**s_wJ zPx>PX!p>J{RHhq**8S`NGw9KCbCQX4;<dgxIlI7_D177JX@0`!nK)S`=jo|ADBTug zc24MOs+iZqdvz$8DrOhFFKE-Zd-Qk`dkr4%+S>In70fpHKQVNiGA8VA(-(w_d;@o5 z?s}dJ8IYY_&2n$>4HPt5eFLtRly*I2WiP;V00WqUP*S_e1yC!XrH@~Stn2F5>(<td z?%!T(?-#WX!_|qkURSBS7rBfxOQtHjau1S7FkfGQCZ(5J4>lk5ciO5eU>qC1C!!$L zkDZL|iFk4^(n-#H^oqt1>CEc(hYc+^?dWIw5I8;=(C`fAyTkS&aG#Zg+o!bEgnfhg z%n;Exc=x76-{2z+O}@bbd|T77**BPjZ+Q(5_y%tl@AVDViFLlg+2R`C;54zyH`pw? zeS@>aJA8vTiZ0(^rdZ$`ya_!-hf&?PCaAVrv)a3G{OM4P&T(6e#+*=saRJVfeSZ~z zz`nt8TM~U;IU$3uYe8EY%)@HTMKJVW>sqH{2hk2EbSof~$QJ$k--$#RW%j%?>heFv z53ANcEjokIIHlEnW@7$ihi{~%v5mB~P<d?>`q&VIX4`5l4<_lVJw2`r8hz`T5Vcc9 zAHW_ZgZXYmWLU|kcu8W)jZ^~6eD4r0Ih9v%OBB6lqJ8LjJ-tA&z!-^mPvDhXB^zEV zNmy;2jp^?BUR^R4-l;A80u=U|A-!6;Xn;~~<rBm3!Z>&ocrCPWg|_h4SmC{_@bmES z+9>4ziLWP(jY<U^iE-L`a_B`~E66*q?P~^RB^`!#)y3C?t|XwIEVp;{Uzo?xWVdqh z+9Vxqd$p1S;K8!96>epwfkkl-v(YZgYo}j+d`R=<-R$zoU_$&i{LQe0nBx83_p!$J z(Bi5g)2;lO$|rQOP#zon=6W+|mCjg|;{CkTa|x6n&m;_|CXTB&deKplTQO(~&IUX- zCk$^Z4$G^(Z$5$0e;$lNOEZ}ipMNV7@hE35ak*Km3QpYs6C7HyTA9L-u?<7Uqdb3! zZnMxkyScAHapeYHa-{t#Oq6pER(h&)FXFY*ld=@fr4!*>V4kzkEPCVm0_5UV1=byw zzoof=!Fs{A2a<Gj$NFi7cL1UFMOb0wO%<<4>)OtR*NBPv3+>V%HJW;7fa<{BZz4#I zMF?z%7iC^A5=5@)Lso8s6wo4-O1Tof!BT}$V=qe6NfFX<d~9kWZ%?mOo`mAiyL)fP zx)g<-GJrH1=uHNpbqc;T+u`jm)GdM;-rk^Z7I>pK-3&B_D^$x}lqHd({|n;E^fPWf z0DwbFwS5bGRK?Z!Zg#V~NjBL90tSp2C5Q;hV|j%n5E8OMd2LwPMS(=C(ly!^;og7> zA#}6I=CVqyS|3!QR%?}3+A0N~3D^Y03IqyhtdEx3iA!t5h=Ii1|2b#wz59&c=hy!A zcf;K~GiPSboH=vO%$aj=s@bAGRanB;@Y`dfl&`@GE8Qrwt8G$q+NCmzb5WKPpOV9c zE2{?K%J3MXL2;N=7N0UeD$9)m5Uj{mB|KY038;|Kfb+Z^lT(s*#F+@z*$>#*w&oGL zu?2#9<*o?n!)5;kyez;A206GVGpI5eIo^)Dpo&*gl+co)N_``_UN}GI?NDWkG#86q zM7uZ^lCRX%`4+>`MG^mUcvL6a_Kt@+%^o{0%N<t$)E2a~hY@j{gI2kw*@bzM3=r#! z2IxY@0m2~E4^hNQFI7H)=m{^v$kM{I>n~FFYszw@g*lBz(`I9qv+(S?&*4LTQHoC7 zEy2jn2lWT$+$<dQB0NKz3M6YUSZx(DAo&ekCR%jkAidEJ!tO9f`&RfITB_fiZF1t* zYy${-XQbs_@EIY=YjW7*U1%tQvVb?dBoXnW(Plgv=guTJS7NT@#Ef|kflLL3Y^aA_ z|0(eu9=I^g!*2bOpZ&KBX>R6Ke#k<am;5cz70h1c@VL54YL33o0_!cxKOm#v6#%h2 zD0Tvv%Wyk4S7j_pRZS{e`Km3Bt+?3bx6zqZec?53VG1y|N>*}O-Itr>IESH>-aHGa zDJL<BE_A-gjqmYvj-T~^c&<<3iRfy8B7EG1!*VBk>omp`pi4x;?;*uiKkXV}U?uzD z@2cRk4MsDZ#hxG#-71J)yh<Y!NojaL2DsV0uluxnFy+1SO0@Tazig8FU9bcG&h-(> zIy;;wKLU^?kh|M0ugqb0Xc@C<C1F=-nTJy5?t+y$A^;hveb?g=XS=k#SIlZH%h?WV zRBL%B(w5}P3ABk<5Yw?W{0k2#ri~NzCBAvIw%zm<Uy3_Bj^i|5ngff^C5<Vd)ntMy zq_1c!)t91MYe##iOy7aV5P*EqT7R#899eSPW_LEG6kQ``)Ze2YC#L%MrGOAVPBcw3 zIs|=bqj93`4Xa~wd4_FwQ(?0>oa;a9Gjzfr^qTGDDVV3QS@@@Iw-xdm9fb$Pi+IN; zd<B?Z-pl)lCti(42Y@#R&ea(fga<*(Z2mqy#+7!+<3xkMr4Ldv>x&%YgwzFra~r+_ z$~8C*A2u3?gselLS9YkMcZ|Dl`O?kipC=@i0Q&$bFb@}-{pf=h5#(kwajGrv<v2n^ zgphHqq16?$7Iwjm9=P{<WGp2|D0{~yy4zAW82QJFR?{`tENpS6jPth`K+*b~J2{wI zD0bD3f=nao3&)AW>+7HgIiU*Kg$IQmwtEKAddut?eY&vS>-Ml;YF}g>?lE^NW4H}w zpNH<blRqr63q_0Nz2Q{&<2dJE--+IgK@<VPKz7xEhA`iz4}yBNOdN&w9hcYFrOXs_ zr#TJcMN&&t9Np1h5`{u$K&HLE4wP}oZiejRY~`IEcJ0TCnUF9V<W(i=Tnh}wlW5Xl zih}gfSrwAkcV{{}!42W;!mApAHsQuGCqmcB{_}&@xEu!qZFR%Q9@IFY=;l?%qI+sh zpcM{XGkI3w+v`5_t)$WqoaJ7kU@V1PFKhZpZHUdqp5`GE(ZB#XN>pIKAZY-0&Un_n z%TKaF?M1fZWiQ-Bh<CK(mdwXwVU2qRxFLn@DFb@L_=Y{8=F)B-Z=AhomhH#1+jpbw zKHTjCG)=b!wk!JWIKfi1j9&}hgJ%qi7kzwn(V+u->x(`)XbzR7XiieCd=UeY@6^9k znGpK|3kVR6v?0e;;qkJfOUybLPh^xcb%Jec{mf;ep~XB7{XmOnN%p}VepqiQP}xF{ zLuQ+m2z0Fk4~I%LI^^)s_~9D=MIRU4p@Lu?26cYI!{){`CjM^kH=Rlm54$|377si7 zk#aN2!^|;BiTd+cg+x^k_a63-zp6t!%Eb<xQD`i_!5et(RL1LJ_HQ&NVxoy#(RkSt z8l(X(R(D1t64KLWg03lK)lWkl>c$b|vo&Kw<;QVB`bm{p2d}~PXIyL~bjB-nMs$G| z#Y)Ftyp!TrUgN1TvP&#xovKb+f|D_&YQJ(BfABAN+3Z1+`ZZ#YK_Ad(B|5!hkjcXe z&zaErqcwG>02x5$zY@CAU!2<uZ&gD64txQcISv{5JIhpaQyyJnOu#sNdnIZ!An8hI z^X+D{PK|$=71LI8P{}9QYh-z<JoqK}%FE(-g*G+lFc#lEPNOcgsf*t4FE{FT^uojo zZbH|<J9^*4*UfY^lU<{CwQj1X>#`uU`)5PeJw2Gd6|?Hz$5#vvzoUx)?7~+@uP@>2 z$MpIrzSdK*ZTPy4Ubo}xW_tZ4zBbV7bNK3`*PZzK61{H0*DVAL13B(kLSIoI-f@6l zQRdz88olaZ8Qig*UePLQ$5wiMjUdo#H@?0FuQii`o6sjlXcI;#1oCNh8n@q|v$r}e z^&>2}W4)dJu{YsAn{I_nv!BU?Hy^xxxEtS^w6~S;w)Hr^-3f1bPo>&hP3v$4>RXD; zDz^%QsN;xy3?ovVa36j!4O<%x+eBs9=o_ekdol9#(+B7W-s3Aj5X?kmKz0jeMu_q8 zDKZJ(L4r3yftRVkd-^pF>ggpsj|Fo?0fF*69>Og1Ev=~^U*OSKgPHhA^@p*8z*E#U zc{~SCpJIx@JfU&O+|DywFe}y*7eoNz-I-Y5o&SgWXs|Q4{?GOG0}ntTk?cJ(HU;Ll zZT1&vGmyFEKY@pow)f+!qv5^v?eN$OKS&56s)Jd%pG~|I9eBsH3wCc}e#`rqKLzu5 zCFGy`gMLDkw%w5|L@B#CN&X&${|n4tpO8O%XF`7TK)#=?x<he59>3r5E#nI)B<_@n zf0JU3-J4inH`SMNhvE$WJJ$Ce)%RY1^<^a1x0c4|!5Y2J-;^E4%vt*#3Hi@Z{_jzK zV|@M>67yeA_?`&)Q@4KS{t(N~+|wV`vBJdqIthRKZdXF*#*S}BV*cl-eGg*(wF&v# zYZCH5O8LKs`PU`ne<3mdO}zh@9~pcc{U_#Ugx?g*|Il~F7p-fV__v?&PpoexAAeXG zQg?ml`e^aY?CO`kpSV4tzSA^5mt%b|edqdUh0bLC);A`xK7so8`|m@2kACO+NDRpQ zxZnC-^(D?H8t+o9Z`*gSk7SL^`hMwsZeo4wsJ^xpP~Z0NTptNEncMoUul@Up^up;M z>-*(*u8*Xq%+3AQcSmA<XOLbx&fcciVgD1;1>S#1Pkrt?w}(Wx%!dB^zapW&TY3Mn zzMbE>K9UbJef{@8vA$(g-&v61Qn!5P`bY@Pe5v31dTvXo?;)!1$5`K<1pam?G5?*E ze-Y+?Eg}CCiTQU?{>w3ccS8O<67&C(_x~2i-y5IbUwj007QsZf2=;qwa+$fuq-sS% zmPa1k1h5o~jNs&VNcrLJ(;@8$25WKV?7+{hsR&BX4J)kjoE*^%iqAWcBkHEKTHh6b zS`JIFd$@Y!VP7&uGdiN^QC0gR=e6k5>!=!9ca`075OuJvlG8HAX)N5oMv$D=!d7XD zt)km-09yE|R7zXug$HWWw4F=Pq0Db$G`6sz`JX8vBido=&`p1Ls3OM|>u2$8vS`W< zI*p-<Y(q=1&Z?NJU;wXKs2bj7m+FjeS?u<*hsT<A`YI#&;YM|}1qQ)sl%4iu_jlaV zKIuK|NO>>xqDdSgi+1#^bBJZhe1nu9B1@|gJ)_VkjA5}|+27{<-M3~<LVxKb!dQ4< zjU%?3Qn}qwZV4F!#(q01rd6p&*VyGcEB4x%ZD@_^av64cwH;0PsMoz-_S6{aHTo=C zZii3S7Tt90cCC>$j8PDhLkNlBBlh|j*KaQb<htpgj7)K~(awTgmt)&)OfNOG+}^22 zTg#SaW^!~Eo?OR5)^k#GGs|!^SKZ#Euh;3~qHOT}Gdo}xcc>&8;MgkS;amVX&gqUe zNwnU6fD)Q90nk`?v9#U-Wu})Jnq!g*Phi~#mAb2W-P|5Z+NVwk+wLLg1hhN7&T88| z+aw!~>>=+gO@01u%bH?2Kd|ymlijx4nPxZwe=YRaOn*)EH<kVx>8}C*E=VyPg}-{k zQE4CfxW5GeEQiMnPbEBa;VFk_COif3INnT%&y4O|xzC9Vz|6*$cT7MSc8pqjp!pNy zm;*o`p-FS3`BuE6b3VQ9B5B_k=*nzM-(GCJp;KxuJY`#WDpV%>yVKT`LN~THVK*w$ z44v@TLVwNl*F=9)>93Lg8t88d{ng`N$T;Ru;9#B6-!lE$YyIa5VrUOREG3Ag1hJGL zmJ-BLf>=rrO9^5rLA*|H_`<e3-S7n+DPRn&@c`#4c=F*H4o?m|1L3j4V}eHq&jrBI zkKx~S@YKSy5}q1(ZiS}`o+a=sf@dB)3cnK5SsU4di+bRZd9j@07M~6f)oRj50x{t> zf=&x-7&%ix8#a4X_$D+)pwhU3b!0AWZ7RGrX?R1TZ}xpzx$kr_kKHj)nv>%SF31Tw zvss2N#%C+?Po)c4%*MOGT@NXi7HAe$jdUE%jup1fzsY9!YLyoNKlgBcUKN>f#GiBB z(tEAtXNXfQKfQ<R<7a{3(lqyZ{yxhp#Xanr&m^}|nrjKp?+z~R3bYCDJK8p$M|62@ zv-gFHb_37y2Fp7mSSvG<Qz5Yn+ZtSL<V=+u+-|$htfS)}Yj8FBz`|1%$SF1ZTa3Z^ zy>ygJM%TFaE~H9z*6_%U_tNM{9;29EDP^&#y|NrmmsjV&`yD;XrX;Y3)~{DvLe>YN zxy_%X1m`pVx^$~f%tv>#z365(9sQ=yPPa>CM#T>-yam@;?BSA{>==jb!j+OqTFl7x zx)EKk-;ISNV@gopI?Jk8N?KFGX27G&525@m*>hltumz@(8!U3CXQTVFT^Ov5+jF7+ zTJ9c}uMgNubW6aXs|)PmTa~VggCvio5?C>t%P$Q}2f}ltI%Kso{dGp2P=M#IZSZrr zRAsd7whk*b9Jsxi7~p~C4wIu9nXk0`bjaGI@IYXX02u>v1E%gZO3jF@><63wmSVU- z9-XGB4s*@uRK9{^DMi6j>ukH$?RoZybM<hhWQKKS0p<=)g0+hQp*PtA`O3i@40TiX zwa|Z{9$NsN$H=03*iwFmLSV<=Pgdhg_0h&Gp9`7HpxBx-zIoIy@!R|}b#=LjWW3Y? zv%nU3iHA9(nE>-3es)L|+5EV(p0DQq4S?S&x1+tF+ERNh`Wv$#erjh(z#^N;G2p1Z zdgc5A#`B;UW!Nb%v^oyb5x_q{9xd}XXG8JAYRjtE&}&-6F)sOL$wq(1QC6Z@?B5Z~ zD{L&y*Bq3m6nC*+JY#zb?Gkuo$%n`fCwk1jJ4^aHv_Riza?%O@7hJ%w6n5JD%ODfQ zN1JK8&y_+Z2hxdP`I%y(HJDR}+26a>Idzy_)J@hOjy50>Y}Y=R-63l|46%RRW~(lg zyIHJuv?~{jT-m|J44s4CL$t2I%#}(l^kxhEN*DRguhvA;FepYP-3h&=TRAZA>Ue<6 zN4SsIY0_d4x(eKO@zR3T7IBz|yuwX+zfW;QSVk8{x*?ZzY8KF#QcnD{gkIw8w!jV0 zYba?8xR4^tj2^Fxef^$N+!mP1zbaymyefwpGvsTvG2v9HIXJ&dTF(F*Yb-zlz+gBQ ziZ=6$Kj=LB3^b*X+R;_uwTqV(tg(o>Xs8XN&Ni#n2^D|`o=fVc*7Bm_A?QUxg<YJ0 z<;FrKFu2fAU<+)nT3EaYCYNd!UZJ)aGD_v0Fh0^rm^L10`#oJs+i|5?0Zcth;-d#m zH*OBwR8GeaZOU<zbB+<+bFQ?s>Uc~%n(4tg_CULk5;VvaR{#2LLoK=wEPfu=zBNNb z*(K6pLmT@oT_qAC(kKvw(lGT)GJ8&|Tb<*t=rxD3FX}Zy9wdDUgv{+xG-|HUs2Mk* zRBB$y-Sr?fcWKmohz&kR)VwAK-mm>imeCP+FCRbXchnFHH%m5dwSX76B^gH{4@co* zj~mDCos%l5G*AduVrkNOrI2_8K46iHvB(f<gVBTjnj>ZK(kEVs-jI#G-B0GFU3~Eb z>8`?3*evE19u&qSYU$$@I2#VJ#b2rBBjJm%7x-;sm-fvd(d>+;N8vW<QW&!_F^y8G zFhy+@?`aQa6;CNy$70q|*nY_EWhYLkL^r5P^@JFqIc>C)j4_ulaClYs*3j>F>1L0e zF8tCx9c!RX98e=ydRZ<lZ`NwM$t=C+39Z&Q8p>$MKa|dfJSsZ_B#b%hu0*N#1YScD zPaF2b^Z>kR18-(;0*1n=?71&h_O*sCu><=$!zX}>D6z&NBg+8xRgw*p2Z!oGee~cA zm*!abE4RAVQfv+6lQWV^%go9gYMC27H5Sk~p)1plXBGC)iRPW0lL2?Q61rtLR^SC9 zBUhT}8IpZ@Tt)djn6C;;)0hMR5Z{6?P}~+MN8e6Py<vYrg+<|D6-Ji==Y``M@eSiC z7&9GtTXY)(XVo?WgWCsUog{VwzG^KX?q~!xX|u2fWfN@u9L~137I^I9)xd}fK*KEW z6ffs)Q?cTSTE&6aXr^>3oUW5P!QqH+BByiO0lx$T=1eWp96{(jrlLSZJ}I7taRXYx z2BQ{x$isfv$#1<_VGUmm!thNJAK5ZwZPI)eoI{R=R~i#InGBrFESGUkHU!o`&dIFE z$qoT0JKaSt1URYy3CddxvlM?`g&`{yFA|aaICQuU?0>OU0xedU$W6vBBK{SclU;ap zRcfKjSUZrs2LD^C&4y+EB-u#tjh5&DC2BlG)!*nWludw2t%g}v{Ao=*-v>1irV}|x zkV<o5jDy$ZM(fuA&(Q=BQy~3Xa_9-L(BMk^TJ_Hh?ZVXg7PrTXHt%}f>M0ayVYIZw z;*b}ty)0y$@z|JsN4r-PTK%h2Lo0#1t|*-6PpO?9TB|SYtNTa^SthMS4ePA5#EQi} z+p3l;wC?A{(hBG8H`ZqHQlBWLRF7z?ztv)lrm?!z-#u#;sOLA<PVjf%jBoeUjw(iH zimS}UXh2dswD=VNg_rVcGm4SptR_qlyyg3S+w;*pc!;dVQjUgyvA;VHWA3CO==56n zlPQ{&f@+M)xco}ibjT{eTi&WGmHfr>Noc{@V%^8oo^NFMbvhL|gIp}jHeKy01z<Eh zYN+qXNNl0dmn_<IY<`=+>B!zR+!Q)+aZ?Et?WCdw(M9=q!x&<LOh?nk^XQ=5_7K+e zF=Ve~=`l4$!Cy6^Shs*$|IAZ_Tl09GP8e8x*?9Um8vdz`#%)6T(rmlyn*iU@5k7f) zU}_Y;y_%D>qp9$1+rw%GH##DEAEq)!OI^BOGJAl63Oj}2s=icVaia@gvT16nGXuLQ zoGNy}RIMg|gh|SehvGwG%iV2~ra-aJ;4xM4j8W;hsb`!0ZdJ9^yfg{^J>D8??C#rA z_VU8S(ARI^IaxS^6)e!}Lc35%VfQbL347hiLp$dzP)_P3oo{pc0J}VeH-o&B*}P3F zY$r@L)?`s)#9LY6!uW{MZz}aR&xd;VP`yJEGO2ZMn;)rrC)PbxKBDbfSa}nIsF9W! zB~xpOg?rbtP*h{55m?3El}Aj#-l}co2c(wZ0!!lkH6G7(0E{`S;?7@E$!#(bMZCQn zc_{a?ugJ8haE34x76NI31-(ok<#wQE7^-T`JB+3uil$J79>WKl(ZxF-^&HTrl8(DJ zfJblu+dw@<EOi1dq)TWJk12RcCuDY@6A5+{lI6+u?VwZ+eh&3SG=UGGZ(O!%E|esT zc-)b$u`vJNX(yb7Zt*(y2o^o25eDHtgXPUb!a(G+hyNzaKHV*V|M8MZJ`%bQ5At2? z$vb4(%eEawV0MQbE|n(lf|_emYV<WaS8%OSJ^||DYw*cMZy&&$S8d~4*b&iEqx0Q# zsm0DLS+qN~v6U#o7}Fw^8t$JPp@!oMH2~uHvV;MVgEv~F1+*CIgDLR1fB^&t1g|s3 z&Tm|=LbLSC_hT$1t8|i$?3LvjtJE1A1+R*&pV$Aq(a+W9jb~o6dGqmgajl&aX)V$1 z-4+UoXQ~E`2HKewyvvxx9!{a3R33dA=<l$H;sw$U-8hUZlod>uhCsiepCCU00h>Hn zQ`D_Zjv**t6&EtPANYd_e&JMM7Si_sNI<v0LJN|pLf_+X!yTKQrNsLCPBr5B1o;nd zLi=xIgItn^DZ%5BnZKPMg4hz1B98grHAe<5<Y`bI6geqo|C%oAf#z=Dv+^1*9yrVh zPSZe^B?T#cU05g{udZ4eZyyyc52ZPp3espfi;ag&@{3N=CGj5>onB&0DnEgI)TY)j zP)aX+TgXz^pR|&~x5e`@@)XKj!c-~6agaJ_dk8H-uZYK6Y0^$s^&`It(>&5d=-U+N z8?<&btaJY-fC>C{ipKl+B(w!a@Jn%L=X@*oJ2t0Z?zh<)$Nd5y#&Ew!=Op8Pmse=q z?`MBa%Kf&lK<@YCJO2&tm!1~Q{Y-O`alft3q}&hY7lqp>w+3e^3<dZJ&A&vJ5=&nm z;CU;J$?^T;if_gDEfxLZJEuGj--G`egYPRVlHvRJ<r=<6eUKF2<8MQJUvuccf$zu7 z(fEGEnGD}~<^N@Tmn4;!6@4sEGD-HrBZ6I;V+>kg<&ySE0}F?Uo$Bu@MStV`TDVa% zgL<yxvw6M;B#=th_Z8PS5nh4U!-nhC07PTFYyj|dkC&m3Fb^~057u`96b&V|wl+m` ztE!XiZwq62Xc}RJDzgs7{bU}kK|aQ>uy8gVrlmN({MAbNd`)H^it$@w$}8gXXAuAt zkAmV*EYi`XKz1G7thGkcWAC>Ev>F}zs!O{WAR5X39QscuS6q57KhG})DE!~*g@(C# zJLjqE0Np<Ta9%d`oO&rJ6FTUC_EnP_=w+{C%=)PubJ|9@RayH`QB?Ir6`#psJ*2?@ z*-`NuHeb(UJ!t*Uk;;K~vt7{rNU$~+FN-vty{J+tI-iQpi}Rlf8o^i|L9{(qF__@% z1-g!e`Ndx@7jF;`^V{oI!u%@d9_UPZc(BSCtg-|#B5W$El@@WZbeMfI2%~2KB0&Sk z``hI`fX(6Dran5t(tAy0r5|+K!)Db(N4t<73B$+7AxX)n)RNg)k`6ef`Bn-?dl+Sj zU|mjl1bUQeP8P4}X0<e;Gw95f%Cm#cE2Wld#qCF{lS(9<@2LJcvU!YRJ$JL`FFuYZ zJv>+f-gx#3#cV-og0iD<x8o(K>=1Xm_9R|Hw)=82h{2gD!ch2L3JO!qGWrGalL!bC zfyj;nF^#=DtG~k6M+zT20o-+bR7p#960aiJ|AU*6epYnuKbCyB)RNl|T0y*sHxQ}T z_u3lV(a1|vu8Rv^HgHxn4_1}LZ8J3`@r#mVO#0rL3X=wu0-q*~5TCYo{F+7vuzEdv zxg;6znGxU*B?Ue_0z5kwcz7YZIVsHW3=L*UQkZYgh^#8(HGmdreeZuX3K%HJ7I+9_ zfiJC!^~X&MkgefyI<Qztw7fogZ1`Z%@Mu$k6zQ1pSv50RcYBMq?pDrB*4_5v|IPRe zP73^~2=J~M$$-}tf6MqZ&qxMyZUpA`q%f~4{{J{WThXmmxutrktF?qM&7R=r<?4`e z`>jii@56%ZttpYdh`P82EN+5tc1ASA#$T}vd+vf*hFw#Fx7z+Pnn%2y+FCJ|2DoB8 z+TH}Kr}_I*#M^4@u@)x_eVq~Ol2)fNy}u~Hxs(wNB~~jnteJ!>D>pEUSeKlO{+?X^ z0Y$DTa8O8Pdr|jvP6FszzWNVMb{DG%()yc><wTvof507?TamsG(^j0--}I%wJHvJ# z@@P3fVE>27?pp#V3(xi4g#XO;-HHDc`_|$=Q+y5h&p6*!{O3yFqxjEdzU}zWFyBu6 zXOQnD{Kx8R!hceI?_}UTMAN@bRNGq?Ug4V2w%zq}pfael1pirMCy!TQ3%;GAGHw4d zkxO2sk>)i6<Tcs8k11_8PxCGNogIEXN53p6l}Ylwr%iSNo=SL@z*7y+3V411&yV2= z!m|~gpTYAaJcr@=6FfSd9{;0bhQ#yD;9|6QK)!v@){tRD-T*QY;B_l3l?Bc#ZGq3w zWuDVIhtT;~1EF(shsj>}g)Q(drqx<H4xoz$83fr17YyFe8rjE?JQ@2)mR)Z4ldTuf zJw!N*KD*h`2QJWhOy}l?;MzP~(Ok{AMf~YsE|A@Y*vrOjr&1j&5`cFRaESw-qyg_D z-~tCu@`xdLZyqkV4ZpWTO5<NJ#Y&84q;JkP_~vDSw=XD%jRUb2`RIGa&1A}Imz=qC zg!DP$FyF4Bb{zFyoP$Oy)>Fixfzo@7A4R?ZGaRiK*{Y{5$bdy``|~OBZSSSFAO4Wq zzV-pN?Y-3YJ@+Rd#_qFPvBaN`U!aBmtw-$kj^YHcyT}#ES`PLy4J>|kvzwEF%^|S0 z(O^H-$AitMOqX%6Z{M$i%_j_`Cj&c)N?fXdoddr*9!LPYgfhMTR|30Q1G|L4{vnhE ztPcTAO8~Tv0Bz)euF?RlBS1Bwe%jaZxh@_M_TR;(aX_DhR6zI{@R<zI=HFw9DaWGl z_iO^#E!4hGJ|M7-8rUt=zPGm|0sAPG_^2&{zwn}1n9os;5QjNMgZUi6tnDABq`<_9 zhS8JnZPTV&)3yubWoLdjM%S|ibiJA|v2{DJF?@ExlliI1eh{9#f12!T;CUCGi<rrN z6Fh%}C!-@`Bg*Zoy)`<{V%Sdcf_5j@g64L#Q26#h+kCzF2ixUkFR#2HgTQ|cv`CBk z3Tsm?`DI!ObC!)*c0u;C`L!3w1nPiXMUZUXrahA~2iU)~Z7{8{oj})s#(|m|;JzBu zTt58E7QNIb2b~ySH-c2oeWtYoQa$VwNkuAt_OQ#O2urDQdx5D0SC41X6Bp3MgmkP% z2Ri0&E?@v4jPyIAya(eqlAlEOtf)3~DQ_q4Sa@CRjZhC>BW9Z@JzHu~l07W{N7%g| z(sxUwT(mxdW@28&s)}ru7EVI;y^SIs7U{TmN#NPEzND>L1swZS*o0S4Q!#46P<TOi ziedbMOFQaRbpEW|`mKd^YZA-29}ne=pmk_mO8yt6g+<aVI_jtn-h~G${%IH>m)no) z;D>m=IyfG_)AFsrs$|U}at}mz&gG@hl12SIx5D!}JU@Vk@1J1&QIKG7LTPkbiY?%c z)*+Prs<uh}?N^~N!2U2P*?tu|HD|tw>V6fPcX?_o?AEuH4Xa+-uv#-I*@l(gp>0^z z9!$DnwP6u%SgqglA8c6lsvA}vT_h7!DLYoD9m!<ZA5M(Ot~X_J*%i?TD&Eo%y0h=L z15VK|-2CoJ9<+AlB({XaD=T-;540Ai|86{U+^o|@T&RIunkk)kob%OZqJys+|Df9G z48$WZ?zHOp7rE=H#)?dTYbH8SAV;j%>NfVh1Hf$eT|=Ji#mtt5$z!`^Ij>^?xxN<% zu4v_7$e(jZFF8n!e4RcWzmhA~k+uMysW(>WizbQ})o(~C6$dEL#yI`0h7R(k?x3Vu zTGDh%A|Lj=lv7I@M@bSdl}!M%l%zsT3a^GD_<gGOeH49Ps^oWS-)GYIGRQv`zB{z< zBk21W1<qvc`$+meNc|NyZ{}~#ibgXaFVF%)#m2rPfVtIkluWu%0RO3foqojacZ5QO zhGv)4>|(dSs5rr~IR0E+#caRjL&H`cHtAG<g?R6UZGXOx4wb}e7MK82Vlqvp6B?1> zJ=Cy;rH!YHs0C}62v@UZkTEgKr{gG#RI<dk6^H~FfO=r81Ombhy&c6pe39z);O!`O z^oc%M^)xxq!xsIjk2{)B3Sp5Muc|)IFn;&3V1{(9ojtZj#^CLx+X-C38^{;MOw7Jv zL5~uQmp<ymbXY@8LHglob>7Og8z23%DO>SG(7MU0z2S9x^6mGJH+zYJ*I9MKV5!dH zVSjkGPjwx^n^$WA6u$l=V)Q}G@sqe5k@c`BGMU^UbbCSjDGik$fHmhdolF3;TRQ<= ztL2Te=#*{DwRzI=4?<<>s!L8~2k(--+i@{_CX7Klup*j%V|MZ}hH+)b513(@IK_JQ zkze~j``wpBoBeBLzJ5V*PzZ}zOLdFUp>zDXYAO5pg%~Gt*xWbi4%Rs`VW`^gZX7P1 zY-krs===^4Jhf3@lqcAW(pDLZ(rX75WePS&TR1b&CYsTF5>2}0Sr~-l7-UX|&n9vv zx?gGmDADdbcJ1tw9c|nL$>C{3gbAS=^^GQgeTf2lFu)!VXcJ5=`n*|=wnh^=^Gq!~ zY%4$Jte>G1+m_PJpy&`KZj2=5IJXx?V(Fv8^FlT>;^Ia_Xep0BZKwFtZ{RvdcRu!$ zOzvfG{YG`ul<`JtBoRemFZ)$gqB)Ydgc2L05-pL$b(HvnsKm5LBFd3o=88&8k0frP zl8&gvj7Z{hlsF_R(Hco))Rpr)BZ-DcA{V?q;E8+rH9K25zxlF1R$oL14{j7g_%*Y| zox$b3u(r?%$a)kxuLqg*@|FuqHJQ=@Cj99F`Q#G|r1{nwT_uQo#29E7+{3rBeX9WN zHQ8=$BYZ<K?Pe>MnKF98dgo6HRMF^Y4<qDZ2pMEDaSG_Fu&hQycEv)b<y3(^g2N7* z{Oh}Q;z%S#Z*<`2sQqZ|dY@F@>ylUIu|NJ6q*HgWyqo>zx8z4MNUp_}bCE<}H<hI} z<3S9oYNi0=pcrDvS8t{7NTw<ypk!&Q^s%T9cHHR~t<p&hqdmXV<7P9M0=_Fe8G7f2 z&UGuDb8CHDozS<6B6JxCs^`4eZn@Qq42sLN=up?^g!HJ*s`4&{X=(P)=UdBrNx*v_ z1*HpQ#lOZv+O~&1`@BL@JVrd}#$ILE*wD9BLh!+G-Ld}yw_I3CYN?0SsAUE7t9W}O zJej7PhgC);5Z}l}%dC^wLys>z3v>kmdd}V_&vn_6#s`;oldA7!PwiKU#q2m26uZJ! zXuxOtumOP58a-+Mub{Fo9cB+Usm(M)uDAA~T4Y5#?OqV)_ZpRLuAQIKjS$uKPsdZ} zH<h<{$FJ4)UIHawK`!B@nM}GnW$M5{B1*qk#b!4}vZGE;nMl<o9^+wUvDwX(9Th{; zWhqk!?$#35@v!XJ>=w$7Q=D{Y%G7~gf{71#*gu|&$(|O;PS7z^#|xMp8|Y!Xwd}(% zdwQhps1MUycmpvi4{MCgn-OU^Dx{Pt>?XeDVO6ntt&wI>Ud$98MQqH&CTe+qgn12G zUXYkE2Mp=L9)28}jmM$f%<Gci0wY&mQbBhKXQAq1R+N_Dcv#<!qRmq&EwoC<SROwx zlu!$Zo-1+wh4H)tv|FfSo}0{xocWM{s#Jn)8~+L_n}z#?AzVLdw1i6Zjl-rN5{HyF zw2Pf+HT|v^g_Q?;xp%(W99UXkRX6dK`G;ZFKy1gUR|$jcWwX!8s<6a8d=;c3@8O}M zSj(scT}U%qy6y_iZ0V^{QA)%mUeY3bld{lKNg|QWs!3mL&=rbm;q51fqK^sRQ{_hF zkHw>+#Y43Tts}K2<c{jk^6wWTHC+bq)9rI*sTNdrX*C*D55V(Tf1Ob;T*s02C9(#u z&zChoJ7D!HJW`BXSw>DJ?(b&S6>pOn|$W?~T-2*x_eX5_^UZ>XUp>e?~h9F7~39 z9zc<{*U<(whOX1IO@CAPb~mIwPVCUbK6&$k=B<u1KUn`Y2x-7yiTzDcB#uQfNyGpz z<{i{{pLD`;kiGv2@jq|W@hREjFR<dq|FUmDIA&Me#&;<bci>4LLb5{r%fBH9^l3BV zeDbLz7uN8be}hFQ49EQk<YjbUtxB)mSL1QHcQA5iU~70l*-enw<ha;?yE)0?H66D~ zEhE_bduge3yaJ4MO^$DKmbxG+^}S{FZ?Nh?)+n=}zf(i7+Tv-g;D;xDd3v2XdKv*< z!tUcBKi<nhZqJIWu~x~OBQ4Bjza)3fAT^BGfwi<&SW}WX7QhWEgdE=h>R@YG9+#5D zK{e^@=^xTL&eOc>!Zfutm$UPGs5Og}*1V>*hM+)`+=QM7?;<UnniJm+l0f!H-A9t% zLu0P9L9rLFB1z<x*Xr-q3u*rD6k7nVwiV2^h-uOxHVkw}$3d@jFE>1dv7UVZZ-~9i zI=k@RNjKW`aqa=Ao5vgb%pP3kdVR;EQCF?qwxvt-wuYaQ9v}=ZsIZE7$l+l>|Ap!f zb%11sUI-NJ@rNLBgil1q=bwM1N=lSUjJD|Usfa&QO9(eBT0P9Tqfhn(E3#S7_C6)j ztR|+Z73HxyUeU=v@{01cinz-}-03_4)VVshhD=LvKOX55O$o{@;gq1+zrIT+JWC|J zI;XXaG(&kZjvFhj<(Zp=P10OTbyaYVMX6sylV<OD9@hszSbhpWmeK}l5N_eO*%~rZ zaQ0brunyE9Wy1X3KqwC5=9Y)ERJy-ejnij<dl8$sLq+vu%)T&NI$L;D7=c@W==DX} z4`?)nYDu%P1&~T+k$+)=rtP2IN$1~}A)`iO%0k*v_Rol6cVNg?w)(QT{j*NoB7PB* zuDldh8~jPZT5Bw9<R3w2R5bYotl+YE7XPZUgZ3sA3_VIaXp?qFcF+v+5$-n6#foR5 znNs01d<X4ZxRmdmxr3{X^59*xai;8_slRX!%@e(c=2myme)S3MplxiSh3DzKxK^bD z0rR!T#jb#c!B1L#!n5L+FUzIc^0hp#zvb)i!_}kdHFz{V+orBwR^T;s0~-cyCLapi zi5vmbRJ*RDZj3AYZ+ONU*)ovIEyT5hfh+04RDNh-zVv=DgjbjyZNZ=CV(jpTbMOjD z_r$tFslvW!k;~_U1}uXAT#FXLdRR;A;UX`5U_-~#S{StzaOMfF^OpqmQV1(SqWT<2 z6z^h#Bpn({Rpepy9|d2|hJV8*)jzh?-}H^Y+hn`%PyEpJC6n1MueQrCBOtc!NmWw_ zj76?RKsp|$l6G>;ZAAyoW@mlTco4}7&(_`RaVcdxpH%N#-HaCuC90S=gEuL>RGMqY zyF-F)nqJ7j`BG9}qz5>zN(IJFfFV(4oc~l7;Eix9y%;735OHB8iC4k%OBbW4m8)Rm zB#K;@5YrsZ*8G9kjQtN<UY&dwi15moYxT)@<*>Qi`V{}8L!=PaVIT}wy4WnvJEfO# zAmuD=G^!rwqY+_iW?tX+-$TCDIe=Usur0QTc%(p(=91G_TZ6|yp(+K7BuCjpRX#!W zY4x0YjMsw`87a=u9=aBok~Pg1cooM7`FkdDTcgXPpmX`pwM%qA!y@Mb?R8g&(-r1} z_I)qCj1le8k@?1LD#J263%^|VkFXK`-s<m}xE`IO2OEBl8Ow+ZVw~OY;hkm_HfBW@ zj;!BP$A9%ZzLdUWixNb6i=>4XM;p7sL{2KOS-(Mxi<vmXCeVO#)bNF!_q*>=W#fzH z3@3PrW)ZT(KOvQV<T$6=R|9=B0}rp~XDLEC{tD2&Nw?i`P}+yr<fmB#yNUuezDwmI z`DKL3uG*$j@oN9Qxq9&j&TtLQ4@zD3gevtdj&%E?-%+=B?ZWZ4`&e|h)gA#Mu+JZ( z(b0OAuk<W%P&AivmVi_&42bS($7t*+jQL+^%wfPSw!kZNh?J|h1$L=JKk!Ly=&7aO zdqNxfE$Yx;zBOvRfAaWu8t+wKC64#-UDWYEzR1U0XOHgq!?}FCL7bmr)W-YuUUj@D zV&^jY)WP(>j(yf~d<nDFctsnm25|y4!VHc0R~LaqMNy%rW9&VH27CqTXfq~muwV`1 zewbo_XW*NTKQCo}d_*B5d1Z>(-k>}!db9mAJ%1ku5ApNUG5nmAyH;Z66tcZ7_&V{P zFM<zqKAWoy(8UIRJ$VoXv&cu@?(CnpdyuymUlq^W?MgF&RzKuxhRU+jZ1;Ugv3%>V zPdAh4N;+|FFKc~NW7_ByUZP?hzf+ht-k7o>(@ux^UQu6!s&wH6+x>Ww;sxG~onez6 zL%y5O`Cy<)qV9^fNXLS&(=bw(d56Q_SGjlwaB;K7!M*JBN27p9lvx8caTf1Qcr^b| z!k5QzHU|wHonw_Rnh&cSU6{}5sN)=7Gt>z0ncooM&G-$Uak<fihchkkNbF2|<soIJ zwFy2I%4k;2p>*%;XI*$$T^Cm6Fvlaxx}b!L4q>Ydhhbe9y)BkcFHq}JmLW$w9`bgl zp-5>}cu^gU+Rcyi3F}pc;CDaMCM?DogmG)HyG(xRb(*iWIqZ{1wE0?5*hBNRXWddh zU!9TpT1WHsUAFHFXgmCfs5+OhA7W3tnRzEc^o>WfP1WWr;eUaJJ(ogSQzf@Dn29)u zV#h!FsnWeB;c5wLfcbeTRceMx=YK&UkT#@~teOL|ARzHCjwS%W=i->3s&mm{G283S zX8Tj{d<BmSe(Q|%pFYLF^{La{$`;G{*4g=Xb(2#}i);$Ci>U?6EyBM+o$C1%$22J9 z<EE0?(LQast^C89Ogap8v-yu`IL4T}kpI=cX>=6?=)w$Wa5nqL^PIk30PWm22hbEA z%#QMJSG|DzDc|n9)2?YNv-5KigHS1MfgVBsCuOqYM+g$_-@2EpD*aGYX=f#S=3%X! z&yy9kg$;}}l=^2Ermz{$Bj=GiMLYZH^R$&+>Dz*>&0_xNm1gdWG*h5vBDUPpiSS^L zn}r_YGR-k`9ap0Z>(S%K=03#}d|X3k=VR=khPeP(>5SAG@wlV-A3{~!t?}#P&sBas zQwBOX#@<n!P7qQ+38l1A{=0!&UPd3e&p`qX^+muV8i}j_Jlq~<A9uPNP3WaB95T?w zxfr?-zSM?((L?IGz7mH0t&bzv><+HWw+ar{`5a&q22IRl<-f*(Kf+Nt?bn1#tM80m zHOiLO<>vsf8l7|!sNVYxM_6a<c0M|t=L&BfAmuV`l3e+3b&_NPMjFraXh@=orpd7+ z=aF`|v`^Ws$Gyz*POsvRpuBe?>5xU2i>c1WQ{jxFQT!$44|z2cW5d)<@EHe0o2KHg zSku&9BVtWc9c_}_m}T4DT)zjeVe7=y`tvizwCRULM}1G8;Ak;U*TIV@HkzjI7X;<d z@6Mu3!RL)T!9?f%kTbjfe4cQi{(Rah0F_?*M*aCrVK4ewEY%0gy9%4v4K*CB^iqU9 zEhL^WT3XyKbz_h}<8*0pS8#E6#|jvbX~V^#PV`kXO~dnE>=P?^H#Xc{%$^$IQ;0d= z-RC%m+FJRR;CS2aOE>o5iSqhVf6uISY5txYZTDj&W`EDk>r(wa_tb6J*n`HZ>nt04 z(7K`SM;m)iDZkNYKwb659vr82+2O_HE5OY@dqcgPQpRDgyAu9gz{}vx__{G0d+2KX zh>bmXHy*#^<@mZm{+?<f%ilBI7HG%qMLfS%ns;5KdB0Vf2fyyI-H#f+(nKq7qV4`I z^ev{D>$GOBQkq$&HS;E=nMHBUoTD_eB(9m`$!~z0=`{$$!<JCl5m@qSv;95S2sVGu z)j~RU22eO%99gk>+2pNGz_q{cR@)YkfRxZeT>c61r6E+l)#GCG??>B+Ex3WCms+*; zBfLdD^j6P{b7ADa<-9mE>PUD1?%qE1K;)1$E0Q>t64yi}W=9gIQR0nJiMB{$2_+Us zB@T!r&Y{G-sKkMh#Oo>15S2J6l6Vs(etLf-F(;CECnX+?O1vnNxRw%kMkNl3B-T^n z13Yo>;C>F1--)ch*>2p<oR^>DMM<|3Bdp^!Q(J=*UhAjpq<tV>l0HxR>ps^a_LD7q z=Wlj?PW=p>t>FSF0b9vFz^bqcV^OAPaE8M?gv<Lz4B9MC!C*HN8l5Tr77Tqf06wL{ zC&AX})T8U3&mHGFUNm9=Q=QNSdBk6IY=@tr>+`Lec<?T~aoc!ULue=3h-wG0dF0Wy zh94P;YeuXfEJc~Nzzyox`1VDp%O0UD8&TG)NLd|d@3uF;|4c|>6f#L6upuFJRMKC? z_H_)wG)`X^wnWm9zB(@8xgIC452MnMygE=JP^fEPR2ouO2f7(ji0j#?G$bxEuu^EN zF)9sds{_ODDx~$pEs-N$B(3mW3Rx|VN<gv-FHuOUC@KNTDm>G-nG!~538N#-83zp( z#P44~$qH6@ax>J1aq~JJz^&M2`RcieLk^XFiGstr{A^sV$<7_I2I`RSB2tHzz(4gf zM((jwD6CTo?2HTiCcdo!9o5nBUL0-uf<%EpJ1EGYoOJvFlpR2=>{dagV&l|;kLoz} zL5>Alj=$?8Is84D!gLUZZu$UJDC(pz2BWulH8}@yff^dfTw!ZOP;|&xJfTUKe_JCD zeXTYD!#ewW28$I?LHri|GRTW!b6Rj&eohB&n`8L5$o|uQmzy2ktj*t!&uEd!vNibW zB~z&L_YAQG4wJ`8D-M)hn5CZHNyqjgO|ZOHlx(2(v2@JmMq9>tH{c?X591ts1ocl= zcz|T5j?K6mDdgw4+4(Jzs8OOcFFzMFiNT;!N602zg*j0^bg@HQWTll9^Hi}b0kP~5 z+unj_NLW7|EPAp2ca|vi-<{@WZ?;n1DBH!Nh9un>kv+!X1l6L^J)pE+g)|#BCgx8R z`V$A?>kltJ_w|P%r>w>4Q_m$}oi`6Q+aJg_+aHIg5#Dt=eG2@iGr)h*{MjwNhyIh> z6@N7-zMp?j@jZd}Jc03+_fhZNZ2WSLSoB_XF$n5e;@~(5zaj_S;KY99{%vCJ1AQSa zm;}=6bkL^L*gbrUb{zNWas^Milt!VFy}nF6gvs=;wPu3&TY^EeQnWzW+&?j>2Jf<s zr<5Z<Bf4zx?!^N?w&iU_Iv(JT73t7M+an!={@!pNL#=ADo~(g$cLTpEJ0#1Iyd+dB z`}J<c`PYC`98bKyMw9fe7uK7+qN|16q9VatGz+HJjkR_qf|x}KQulFvL6I<>H}3O; zym7*Gpl)*X_~&j#2D;nrWlhj_4UZP3C1kn9UOuRH%ahP8oje(@mpR&iYVol8z5V>K zx}qpfY2@+`jK=$Dq38e_9p|5sB9;K@Pd=%%>=JAl>L?E0GA}eO;%!wqKaFidVhg<c zQDG^<fjkH-!&#&p=oX-DMjHGhp0BP7>XA;A`^?gMjL-%v?M`yXOZM<P^y-$ptzilt z&NP|g4ri>O(9nt2Cls&Ql*}R=cRrcNs9J=-z)!T?+oBA@7qb=dknxC~4t_G(XGZ1V z2QstePehKjFm`0bHvE=+v<<(xQMC;({|{`#|J-6yg209DqX@0*typ<eYJZ1QPPL6_ z?5Xqm9)cxQo<Q3){uz2P4+g{0=4BuKTQM^6_sC*VwWGaC+Rv3`x}J9x&3hM{c7r+z zb7&F{q)8}bxLB2+o4}r`R!eG!w6XWowekFEWIQ*=k7uXxTgUULvET9BloB_d{>Nj+ z^AThJ<2lR_HJ+iz`Ww%mUXJ7Wlg<B)@%-kkq~qCX=x;o0Q)0*SxtQ^kPKuYph}P&> z*1w_#^z!HdT`-9aAn)BcY`@yr@33+Id%)uCXflpwn7|gy+~ti~;V=cX?;$M09X!_a zGuqX<{!!dMLjMl~-Ic!A21HpshDTKTPQi!pK=v-rJnB*09XT@~+AN^l3YGW^^wJSG zI%Bj*bBfr^Gs+&AUzWuY4q4$^xSRFTc{R)*^yg$f?@zbJ*4}xiANqSPLVrJxr@xgc z-%5X#DgDx)Nf$?dhDT%QZ%9i2^!K<fivBWx)*t;1%0v1au<5@+f9v-prN5Q>{^;+V ztc#&P-M|=rk_*%aLe{P`M19Ch9PQG6b>l6Dmz=r2KVC9$gF=*A$#`C(`Cqc)eW8QG z6fQE1^H0-@R>@VweuS$c<d3@m(^}r0ciLoUE)PFgi1QDH;)B<JSca9{ltErYuusF# zNO!RneSIz{Vz+&uM7gKiP4lhnt<PyPl}hXF(gDTp3`?A3HLvl|^QZiElXPNcO*->k z$M-CqlN33!b`oo#YuwpV_fo}CNt{0!VH$b95GG*fGNhw09hP@IfPRY9J6Dw`j?O1> zG+Q<2p508g1+o3}uea!g(H<^xtZP<;yTQ~v8#M3WwV+lwC#g>V3D)uscQXZ+)%@FV zZ&cWtk<b?828!E7X%^YLr24y4#CAth!7K~8!;(sH*xRK!I8w*)xX1Qb)0_nVIR4@@ z<WT*49-keEioN;@kY?s_vXP?O1h(?GYjT71h5hCs9$5z6!3+$N`B-b}86{{8MLURz zH4~q%-FLF+qtEA*CfEY6lPwOr9e3VU`?&OoeH?G#Fs*^aeqQBmJmfDvO-BHfVhb!K z!(Pn)*<LLg4tFmuP2LLdeA93WodCpUxbPoaLmjHkctRKo_4c8`fIN5$+Kw~{-{)Tp z2kHx!3HDF`e-s|5HC+q8#ZL9NP!cNd8Pn|Y%^rv+0ES<gbUew${&^p_lf@1VqdGjk zwIHCe51%#ZG@;P`27UwKZ^@e!J3G|f$890**U@fC=!PO&!#Y&DRQ+)s=#O>Ln=rx+ z(z}q9tt44NLAEH{E=+16tAtnY>C?2cD<YDjmrIIQ@5N~qG<a?0r?lX!c-3QzM9rxV zW+I-+h^}gBycr$e0nEBP>P8F2uizw>${zRz1nQ`v{ePtu8f#WP0DwbFv^{HhQ&qM} zleVD~NPre9)S+rrpcUg3=N1UiYALPqNU0>qqZwa(hhF^j(;TD-ZJ8w6aELHozR~OT zaT&ey-I>pCQ0`?0?<kaqeW)OU3S4nS?ZCz|SfD@)wYh7pz0b)>n&9}2_eW1p&VH@E z)_$zD_j<%sAE{Ot)Rm~Io7*k+7I}11Z9VQC_f-v$#B||E(!yTB+vdTT1*Tj(WU7Qr zRRY$QnmB*GT;+fcy6_CvtLb;8Lbasq$N1M%{JAMG-XSnvStl^A9FE*!T$go6uwCvg zIDkIp>TQj#;>EJL#aw)A$&}rz&tmXbFKg}Boq$^!r%jPF%Hiq1jNpZq(SfT@KU$qY z!As<UB(-WOzc2CHg4g3rV}>h+t9c;%^0Fb72eM!H7~(yU{maHUgU;V#(E$dX&R&CR z(D@%5k{WdWAs08<*Xw@_gU;MPXXreTWfMe;5;xYDdJLLD=RL!OL8s7*wFos^f3{Te zCA!JTFIN{PBql95t?5jJx&q4Grp)CYHoU0hIaBXp<F7Ng^d?S>L?!0d^bS$Hl@vtz z+iCIU10vppktqhNkty_~<sr8k*AU`0k2LY~4c(8)mgw!+3cK!H5|_ep`F(Nucb)&f z{I^nmYplq$3wqyS3F8wA^!Mr;I8M1O_a^u^0_H-vEUAo@+zTZ)cW`?A40k~rFdQHj z_cceO)Olby!gAjLp5xeTf+#tDqCKhBBLWb1xy8bc-@<NqLOuVih|Dpv|9%V42E^h? zOA)%Kz?5%Ld5qRG6#7eDsh243<{T>bunQN}l?qvxREt$2{99u1dy`Fg6=9X!HscP& zTQ>1BZ12bFSXO#E3*(uZm2+chu>5Ok%{`qaV$%}BrNr@1G2n)!Law0xFL%YdY);x` ztaS5AnA-{CLo8z$=_`nbw}Gh1_Vfk{>f(4uD#*066YEIMnXbSpBMpm*IhOELtPfqi zu-!b*Xv`B#k>_Qe=MwyrUQ3Z@70+`B^BmCUso|M?bRPK0_)L2*{9Oy+mBL?~e^hcu zq`DncwLR`uT0Is1@fC6@8_An^6q~RQj{^fsDtpKm9_tEIwo1%BL}COBd6li<`FtR3 zCi90n+fsCJGqHT_wmI){7D|8Ls*!a1Mbc3KQe`YT^%#tEZoj6bkGY6Z+tFi!oPl1L zVmg%zJ?z<TLxOap>ig!NH>mo)4-d$suGHtxX)Co?Dju$B`_{yG7-1Z;43*kY@Wtyb znPM+lP)}1%S9T*vlXMnIc4gOqc;2EvAhkl5W}(N&B~}nKLZ5M^e1qOM!V&IVZ#59^ zI`(K2;lCaJd8?&+bcC{>B1P^E=To5|=bVOu+QdwQtGVION~o~&KK9L7*t-c6{L5Tc zoU+;-XSHgFpHGF^e?4nZEsr)0*DC-LrL(=tA@=iQs<aPcMih^KRXJa`zH@|)?k3wv zWT@`YW9p~m|NLAkj)QdIA32wd;~>;Ix>Sxs=)hms6vuH)JeQ2)*wLkN97Rtj<v3h+ z<Txg;_%S$+-)`kDr(~7sc;&1ii4%!&UD`<Ya7q53bojO_pR$w3xSRACu9HO0Nw&Yf zj9dKF<M_+NotjsB*)?ac%I00}O3CJJIg`NVz5Y}j(sy<xLwe=68q#-!k|Moz2qOJm z|Br$6+uqc(dAD>W!}y=h#JIdShHEb8qUne!-y+UztWt##|D#H!tLUJIl^j(^{RE(d zf1I0~j7cX=F!iMGU<>=bLOp0npKHvv8@A&&Vl>o!_hv4H=aWgTn>~7`diFAe&R#4^ zNp1~~9-`+@boAWch4efYPfx_}Rp>eX+m!VD;&cK%j|JoC`R$ox^sM`vM$a>Wr1ZRG zMS5O%?8l(zeOvVOTyiEEJx`vF(et>Tp2u|bd{Cq3LZBzwA+bjerzWV=lx=56!-AkA zGm)V9jVPm4Wm76A!UQev5L~B@a(aD>wWpugjyU#)gN{wK687+8j;(mcV0O4AbQc%R zv24Xd23rW#?<9NnP>?CQAtPSCvs-?bVGyURjm6{TjK-BlgI|{NAQu~|rpZI4vG~ED zWgg^aX0EX<O~jNF|EZ?f@cNQ8v&^q{K`T-jrne+bH}s)=(<6>=l=ak$q7T@FWjgtO zbDxlrV)vr0>3u?g+1!;Ru}e+F`V$lJ8>u03Wcf3qIk|uz4hAM9@$dZq1Oh(>)FTAz zRA$(dpi!BTodkKx4C|}il$!ghxsUTyJU$88?%8#%X7bo3NP?ld&oj;ZyEXB<m3#H& z?f^Wsh4F5O2iN%CT0Ll}ebK4!%A(QQLUeUfbQown$B|a;VGHOS7Ii_nGIItVf00|O zdaH12C3+IhjIOYXSB#Wq;SM-W?#^`S-(RAzkCbH9oOPPQGcDYY=bYNfZuZV=+)~W~ z+*2NUyiySqo(aOM??LXH)3<1kG6&dLIxZO{^+zE!a;H&4r!_n?+rw^)<xcSbZPm_4 zh2Z#;z%&>;7#Ne{qoUvHTBDoooUdsn*n$Tr78iE?9rC$l#iKTyo63mlb)zQd%A<mx z`G>7rXq>#jC=UtjP75@r1wWHJikdsqM>hxBjEfL~Ysm+gd7XXoP$+N^3b>7vtFS<G zT3}aN@Sv^$UPW;8ODl%Ds^mdb09}dX<$giQFjLMXM0duJVGfsDz0C1|c0G=MvUB)P zUo3Fc-#I_<aGEbT+#&5N$;Q)U8cpntJ5XEMKOYB-f9_igVCmRM9e+gE@dx5MzK{>T zKYpBnE{SmbdDzivG5q{nJ#6v)ydM{(#ZVpW3Hjt;;1EoR+Cl7@{{AR;FE9w`&$B}R zRBXP_QMXs%Mj4F#;L{WbqsKO*Ell6oh5P8Jp(d$+cxjed^}DL}_!en-wqDs5f4SYY zCfL#jab?>(d-}PuE!0`<r7Eze9~{cS0DpAP&{}TEArDAnd1T>Y?)0d{thzrcQ{T$b zP$9~;JixCHb3vpSr5sZBvwc_4+oet+89n2JurY{q0=8U12ZFJ~fjED!55urbP+`eP z^rmY~{7@)>#qAN#D#pU%>k;5_$oX5DcpKm`R`{mgNvlaAOtWn`lBpz2mnQT89YEs0 zqc_z6KWrOt!BL*UieTb3;TiYZUY>&16H|6I)Q6hu3kuo-&8{j_i#t;8a<e%PW{ApQ zQ5Z*1#PGQtOBc{bIjv?7Y7z0Q%`PY(T>*nS54xkYh1%<GE;=X$fu@nW2C?>|<f4Ew zV1Gq-aVqUG5`YR-+EV6p8I)Z$iRWQe6g{~wDh%3OxYs|4T}OpMk5_r0ousfwwx*HD zvM9XEGI?`J$1eedGV-_!0X=KlGo{5Act+J1R`vr1dQGdn>nx4E&eiV5-boF2+je}k zuEH4j#)+S%;-_NUj`m3Qvypi$l3lf~A`KH9m@q~pSgQiN4m7Sb-6E%5IvQ$ks1fJe zjm2615hYVv9=oUn5U?--b804Zrm=Xi-v~*zUp|3CwA=@TZJGeD1$zR_#WQXn6Y8wG zbjG*qG6>hZ*q9pA?nUATFwksL+6vweoN|Sg3dlO8<#DSL#rCqOJ$RFiCD4fcT1n^T znDUg)xLZ4)SaJ#-Z)^8Q`TF~#9`*cwJuStBFm!FfM!Lu8fI{I=7vARJgp5Q^!)t2@ zKV#pkN?Joqyt`XNm`L{LIaU}2I0FjEigZ64iMGSa?4F{1?6zMB^R8y`Az%G)P}(R4 z)XKv&pfJ{PTeN6j4eRr1923F+L7aUWY5?JmDUX((#~MNt0mo7s0>vsCh#T%4<(6Jg zOe>@`dnAJ2T4r1^M5>G%*O8J_Z>^!=J)XIWk9_A=Zc<)%0|2^R0Q%vl9MBfwRq!64 z=Ax{q83Di37w4SpD)46${Cg8&Y^vAbKa!ZXy#61B-<AOXrkVu!12uma{Ip)y<9g*^ zDRm^mxpz&5fdh#b_Ep9o1mf~f;z2ySL^po$!|^2=%wn|cUlM<Rw)XTU<3M=jVYoo? zI$jhdC=xiM{obog?WS#CHc^;x(h;w=mGwqya&6w`^R@;PXXH#6u`{PoER6C^(rJLa z=wPH`5PRce&8w<UwDdF4($YX(mU+cZ&{1;^?`U9P=5&#HJKlUR4V!E`OS9ZcsWs}1 zl;^qGbtJD?z0n*yv<?&0Sev#qTs|tA<AC2`n#ll<BZtG2#qtL>@teiGiCTL#>{ezH zrRqikSQ7<Urw>t?Q+PFo_H7v41RX=1B#Eq#pG^gfLQqhyb#iGecoIo3=G=0a{?bO0 zbhkf=V*x+lfW^_9FdmlotK;DiN!m>>rBTBl_eP@?w%|snw!&XfVGE&luaG}vhnP6J zhUPxWC(aG3jB>9!gLIk3KPhIA3efjLW8=`2qxMdZ$+qD*&IB{HU~4)=8^5uB2x2IB z4t2@NvHJ?MX!RaIs%U!4s)2|=`+=)BzmZd+wMS4PME70TK8cw7+2^DqwQ?4`{suF# zG#&`LLY@Sl8m>_41b7XqslTGs(NZu+Wgp$rLC!t8yNP?$Hugn6-PX>>&;1Kk+kXPW ze+X7$=r1j1zsN~I_n+$s-ME<f6VqOywCp%id_O)Kd9VM3ruaQZTae7c5&2~M8@H(H z+A69`SX6asBkO+Hkf^&|w^;2w5YGuMQd$MZwE2IpSgrQ6G!C?IwDKJ8tVGE)vUh|9 zc##iRGsC@cOE9cw?8q4?333OIQOm;?HKbF-A5X1;E$gOBLedBZuHF+a$7ne0++|_g zTxavJoC`wyA$_!#n9^C2^%CSml|}eeV@p5ao`r0pUkev-DBaQ<iIjc!iIh{`n}|}r z2OwG<I<!h3URE8I3jZHo4U2DMM|#Zia9?at?i0zV(UZd?9Ep_w5-Bl9z?;2^+s6j4 z9^qHV#{mr=EnI<#0+hR@w-b@jykZ~{cs%wWgo&E{37GiGqhVre_drbS@ub4U?>vc^ zc+QiEiI698_ZR1LU3wKHJfAc3So0RVMJ=t(s5QbC37e6vq0Et|Zb#0y_%=4nVMpsE zJC~B=ak>qvVV}A|LI2iMtwkTO{`u<eJQntvcD%T0L;RLG$^?gTzYN%&<(M^)zkobC ze8SkDM7V_J0GsxGV!Aq2!NnO>jlE;dH_X>iJoh~C@l(eVcbn$Vg@PDhYIpRoC<($J z9XvdR{CZ@L%hU$^n9I4^?3z@c83cBrwDVg4X`(yjLpqRy%1;+I;VP6L=*jTUkUDa7 zg8c!$G;cf8A63eouwo*g4I=2_<iPK~hXZf>W0@l#?L3;w94`DZ7G9>}OCh{W!xtyK zOvjgr@KS;=#qd(9Kmjy?Sqd*DOW|!q1no`;X`ElMg|ETJ4oZE3XW0I}hSwBe6$r4D zso78kkj`2Kk8B{-VFa?MIiaC^PP{BBf5cGxscA4vAkFI5G90coQof05zCz450`g%$ zhP&}Of}UgOc|AREq~}<-<QhT4X|Whi!yl*N^k7TSQ9#1{UI*?*+&|(~2A8er6%4z( zpWS>`?9ZF=cexWfjwVLF8tA&SI&nQ;dm7zt#mi&f7()#m<6|y*7^JgE<QUXh#YM4j zh<!)08Hj4%X`)(*z&VIym=|s6T0_Ub<8m5EZ{Kk-Em2?typ6%m9FA@BJ|Uy6p2uO9 zf2z-bXJ<Tp@jPvc6n0V9<!zYKOgq@Ld5Qe^@g)ADiaz6>l4{e@a};{YkQM-0yvn8U zODH6SUn-`jlb$YmA{guix`V+Z%)1*K((@xT(`9thobSKPMgAcu#t#B{zXX1*Ifozf z{aKB@S^o6K-odh|r1Nw^tLEL|S5+L?#_0vN;B=EvV6(Wg{6cx{TW+lBFrl|8NE#LB z&03S*R5tiXDc4)G1uc-~%9l?xPRnmv@)hZxAv9F(G>{rrgd2<6`FL_oY8Y<Y(Hyac z%OjO6Vy%GooNG>Te^F2_zVsi`M5{Nbt#)XwKAXl{4fOuR7I;1lb@B3>77y--uVJ}b z!#LruK-ANv)pM7=p7~lmT{79X>g&qqeHjDwrRs$%SudDTz%W*c26|0vEKR||==DSc zq18wrd>!aD+X9D;9E2AsPkc=;8^0F<r+~o9`>QXF;TqP>F$UXh!TI>=Nedo?{$qQ+ zll|8>UY_i~7HVGxbw7l4=lxrGWD$$xE#P%`y1%FCVrqJ_Y%IqwtFJ3+SE4C1PfUg> z<R+kjEWgt=*q^_)7fl8UT_t*Sp$?BLOFp)?7kymW0>3A{%NCvsQv6vkbXSP=D<d|P z&nqGBU(8<?-G=Q)$l+3STQNNmb5+&RZ8#Dmv%8|(keF4G*&XnA1Xdudy(-GxI~@q@ zbrxJA^JzYhD(C2q61dU&&&4P9+#?wV_AEXk_-KMh!u{WN*D!;D8Q#m(@fgL!@J@;Q z^@ha)wj>Ob=y%xRHQTGK$wr3kFBEb}E|0FTdYF^z$Dw4f{#|qk&8A%vn(R(G<$5Cx zt$=ay4?0}<ZnV?-|1g&i?rNNVt3QXT`fGQrs#R3g`HOK?J(Py}AIo`NC9%3%mveby zy`vaDHoZvQNMKTU<Fu6kca*2&{U+&nzx($l<yN@6jP+D6Y%d?p(w5@Q-_UJM)aW0l z6}t3A@?tNj#n42&+zGp1eigtx5zRV)HNY)qmSZANp~Oh%e(=pmr+&aC2s?8ZZ7M-W znTScC?kcvXN$^uH^{~cHaeZuSy2;1|wa`uykOg!_%>ueO*!u4lXB39*2Eb{-9=AZT zX%FWP@Kl=HzuKB`2AGb77dz~0uOJ0%fv=Gx^E>j2qAkI^Vv?>FJ91TjfPyf}r`4tp znU5Rgn0i9Z4JXhL78;^dzazWg3sY;g+OnIOXJ;6M6BJYrXzNEmkhk{4Y%XK)PrF+? z;aoj})AHB5<7o+dEexc%QWjBa0KL~c${+`~T!ehb?-H}BbU98V+Fy$YoOh8{8O)Cc zQbm;0C)Hd1D?DsMw{8&oACiIyA9Y45B)P>>i*id_zj}5Tf4<ljFRlOwp_hi=+;tW9 zn)`pdOB<}+Cpq8n5w8_tgo)Q_^hz5?;6)Navuc?NP0Nh)$xe?30Ay?W=P0pcn@;j0 zg3!aH(AEcooT80vu8fy)#QKvr6xN@{clGN}?oeER>=X(fF<L~n?09nxc%5e?ad;5m zm4}kSn~bRlw1+M07i$MB6XWp!hvt`^AF0oBIG~!bG^O&@DK%D1slxbq^f`tInd)K1 zOq)mV@dFRpn`#ar)G$i^r$U`W63!tQ#&}H?n?AVOtSt7zcL#lk0go|{X>8Am;@Ga{ zCkAn~K3JiRZ1pne?VUt)s0e%Gjn$NNtc!Z`DpHPh$57o^@18k8AdSUW78lhDjb$}j zJJ}$eQ0Ci12kZX^LiRi~OHn)AaBbZ%9q2|5x`#=8R>Ujj>e^%8&+$Hof>_sPc%)e` z+wE-lDwPer(Zf!B#SK=_)zt_Od*YNJSltj0d*N&K=mk3rdrM`XIzIeg#@$6~_knoO zQ?myKyAl<{z2LoSZ{%KMb*+&td^*Dr3njg%W{;=Z%c5bfO4o`X^!2SXQY;<if0eT! zkdEExnjjlz3WJODfv8E&sfy+tdz0Va3<{efGyBohS#$7A_Uhi+{92=OSvkr+e@e4x z@{g{y132&Fmp1&;j!|;*=a6a)m0z;kVxY6^aJ_YD*tirJ|E1y5G}zRA;Zn2G60Whd zmYdV)Lf4Mx1K~NjHB>78z7S_2ZunK<`F&jTqXnl4oxx-9vxk=kp0uQS<lEtYmRX*l zJZ`0{+Z)l}r&F1a@h)HqU?fUpk~UL|IkGYjGs%CE@ESB)BpJ;V(t|DMI!!<Ua;v}F zZm98X$9M(eS2U*s(3PI~2^|SPk%^887i8Lf+k3}rd3@V1>wjE{{kR6Q-UNR|@Q3gG ze$Eo_e^HUMBca|a|5w}Bz(-YFi|;0zWQiN@1p+J(AZk=-B1RJwNYDhxCRKtPR(6q( z#8)l7FWMI6ZbStV+$?Yz)}n&tS!_k@16x0!t$bLjU?|~35djs8ZLtsS(4{m~#3Y35 zJLk;3ckd<v_5c4p`29Bbo;!2q%$YMYXJ*cv6N?3iI2d_WbI@c0UM+GO{%Wtc!0(=L zE2OaT<-bd{QL;$*O9G#RU%a~bpz$I0I_8Q{da9;Z3!g;DbC{GrwhUU33JC2U!Keh* z<oD`f&L8X4{cBKktCcK_WrxPtq%a*wABYdhx%*X>y?&CivxCNcpg!Yd-O!`TKF*7V z9=pggB+<}A9akQT$!cMYswSvmdjv5^iS``fJ%$vWx@dU(_%S+CEUBs18BBA`&WSW; z0IQ)N<%|u=>Tq^|{}SEdtR~#)T4^S=CrcmuV5T&w1<En}EQQR>iT5kWCFUHhvNIf0 zf6U6=)E}lhSh)*>3hWKVJH@@!DYk_4uu1Cev<s$9cg)e8b692P9IYY=mdd8wJL&Tj zm(c?}ZdRV9d9t*Jv)H06=;BYBw@UrI>2|$yney0V+y`ZyP<SDW39F)BUj9>&Ru~|` z`%?YAE-Szv)1M(v@E{C&Z#xp}n+4;jui!XdL(arNC9T@*)7tC~ZT3lRHrHmK(`L75 z!^h5c2Kz#%?+xTwM4t@4q(*eAGj_Txg%8t1rWD>s4{j;ElOD39@K$UDS)0~+{_P~S zzqqrF*si@Uj;+E01A4zuTat=jZnJ!u?u4#CG<3nPx<eO|AkBqjN>gk}Qv&@Sn&>o| zDxE?T&h$tb_g3-$ZcMdFTldmEZmv~!pc9yJRpMYx+PYIKYoT9sW*^>6j_1zd)J&Hr zPoY7zDRWfLx)vA_fSME_B$%zN1q}v!&mnXJB5f^kn)oaU?ZH9H^Ol5HNLwqMY!@Vo zrm(V(f_-yfaB|m#j}vpZFN9iEOJ%$C645+t4%BK@)5JOGS5GH!&e&i}Fj)(p6UKO@ zk!dH{Uf$Y99!o~Cveu0bHT_LQc<QIZ&0^?85=`2`4t69KJk5V}L3a_dAbKAwI~nbN zzO2>G4&p{~JroXe=?SO+n|7KVz)V`1iyv<jgK991qDe(32(#>KLQV%{PExb5g8h$S zw!M59`u>xk1G2QSb2HU<$({XBHjq`eP`nYk>6;O|g<k`GTnzPMjcN8tlF#h;V7cx^ z;32C7n%tnNWn*8^%FfMMw-LZv<w<QCpMxO<V6bSnlkXl`db|am=7erdQU@9mMI*<O z08Bu$zuQFT&jK071!fjh15dW-Uc^my;p>(Zx&xt4leEec>d^B|4%KZ+EMX}zv0%2R z#8n{b4${^skgMf<lT%HuisqeflHVXR926I6(%W8XD>C@>X1YV0&M^3cgB^-q9SgR^ z`t!{snO@~(RN2eU)uwuRMG2_K)6U@ysQr;rJ4jhvU#M&;YLk|n0sK<~u^{JvS)7X1 zBD47uY~e{H>i7B?#&3m99`zGE;$BdjRO^V8od#+;1U181J~Ygr^G$a32eqU8e82)@ ze47qaany%=m?$R3>ruMY)CzS-h5C>=G!Sd9xz%6|z}w^S3=<AAsLM(V%pey12T0G| zU$m<(+wTqVzKcoOu{hB?Fy4aMG8z2Vgu^?1pkaQk3GV5Bz~a-zNs0HZcQ`X;+Z?tF zrhz$Hcn`{EcrW~Jg0^T5zXMMvW~9N>A$ZzBu%qzQFdJdV;At<xaC3Ggq*I;Hkf%oC zxdv{JM`*7Wc)ezmI7;udnZO9y+bAwt4Gn34`TQ8I*euW)4af|)fB}~0>E7ciGGu2% z*OE7XRZ@`DK<o&J^YlRM!=BLZs0Z{Xx}v{O-vjzq5i!O@nF1)Iw-=lz|LR{NX8^7> zeu<nx2WXy9XYzv27;$R-s=xJ<88K-6T6#pjtbY+6qiKOyf23U6Dwv#tjJJ#PQRes~ z=EOzZOn$t`SQvoB=2em1q2Y~-)>&kEm~Mb-ZG888WPaGBJn%_8ss6uf+BKB6r0MJI z)17Gf9IWeRn;yJ(Y>ErM1*>%Xbaz^&>_z+Z$fG^jr{^jhILRM;G;W`M4gvQ(YOznp zivwhc>g?!hUw&|$)xO--gNe4wv=S$h<5uF%j;>bX!oL!!&sKYD5og!a)!y18?5!_l zkV|&W32@o4!;a#eano*AciEazQ?1)!2L}o}>;V5YTD{zvlLU*LLnBN(>=#U9<Tb(x zuT5P0H|(%eQN0Pc!iUw-4dZ48^I?Fz+iG8sdjM35MS~g^q{n6l`$kGTy^#raFaJ>y zU0RK%PqkPN>k(hN8gYBbh`T%sCwZ%}u`EoM(Na0UU%A;>MaR#VFW*FDUyK6t_4dWy z0SWfSwt?T+zSzIfVqg5obr$>Lj?q2Z7oWsq$aFsHu*JUk{n1}*UySuwk5#kS7bA?X z9(@V>V%;A0Q&Zf&ojq<>Cv={yu7I4bfQqhwySf6VcLhxD3h;IXWHx);j_!8BnTa;Q zMm&`f3HF&jKj_@6(dhDgsoNgVA~^I)ji@%GO0f-DgI8arCtktFp*ZW-+E{b$9&f~P zlQ;HYrm-8g$dTL<orT*Ya_mT`^$N9D?8x{6&{cx77!Bx=$S0lpfub<=#MffPS^}$W zI$kWPMO)7koyKuu;vr(uR||6)5y*(*Q}Zb3i;^`E_gK>TbFZ}H2B2^!0!yvRR&-vB zbFlm7?#2e@`KZ0idiZSMyvLm+H7a(BG++ykRQN@tA;;)-=wY#OmK~Q=h4@MH<ZGT0 znkSF>bJ&#p$m6&TR<yTnC<9Pi?ylT+Z`D*j>Xua7$VK^R9KC47$VHI2kS)q#)p-%u zxJXE3nKy-bM&$lAw^<{WF;6}|A{!!(zTSZ5DKwoo>tvt<(}>HhP016iN#2`G>9r|9 zP`<t;hntplnfhk7XAI=~Nfx^IY;4pGC9V<rRH$`sy#z}fXuW=+)(0qf`1RO^Qh1jz zdWu9UDP=$QDNI2Wd7D;CzeC(RaY>0-BQUzpBs{0|sq$2fxN#OLsu&V=y24-|^F z+MWl^%C%Osd>9k!;wQh{NK}G}?rXI=rS2iQTTdS11JzX^G1GO4x&PO3n-D$eKMO=s zJ2aiKQvX<ofxK+X!_C{K*U}PXCbGKqUr>qT0gPL5`V1Z)^E1?ZMV>rZ)d2^DO#SHc zGS&QTW$I6b-DRpehb;n`8XQ?_m8lE4O<MSbAPOH(o)I$T>p`X>s42R}kW66~lqpRA zbuzWt_6=lex!sg0a<7Flg+^zFOr0T_IwNEXKj<>`$r)3o&UBZlKUa5?DMl?331ia~ z9g@O$hGda5$4zEK)9!gXMP$M(Of=q<d})h)SrRUGJo(F$iqoaWHarZ?P<v09Xl>@j z7tjtuT9H9#2VdDvVK5m5#Wz7$BuI}s;Hp28zNibXg~oes6f`O&-H?@B3R$^8=Ih!Y zENFY(Xm$sw@q<npM2#*neWN8NB&9x{FH-MGvI%AyGcLs<7drCR{GJ9_bZgB%rlV7I zF<YCWC<8GV<fMD`?QAKGhtSJCDG`54L994`!9e2(yZEgMk$N5}o)3)AUwEov+^FCU z%O}_;K$<*AlK}}ZSv{Yir&-XS&c7v*XyLhN3M5I6!6&q^=p}_`puGjYIf{D)lP5&K zz+BRbiD*wTR{BYiu(>c#&?o38=v4f2be8QhFv*Zqd#t3UTDzloW>am3GM8#Ktk4WA zfd+e_JsD))LB-*D_{1)gzhBqwCRV`9@>JFdW$5mTRJpha%F9!o%ggQM<REHd7sVjA zGvMbezcZ#ZK<Tl0723q<yr{6#a6&6J{wKO*zS9|McCxR~3;}0~hPG^}@hm;`k{UTZ z6iJPLrH4FWgSmW)-P5=)c$Azr*SeGyRJ)P_vvwa)?ObCgR!Cuo;rH37W>2*muJ6x& zyUM+KLt^Es3oMmeVYgOJy^`!5(fDQ{)J*LQwNf*nMo@;R%}F+~i>j6Tl|R65zd^WR zo_H7eX6>b{rONtlGAsKaRkoL~r%Y_mE}B`xtv3WmZ=3XUSr&etug6EPg1`K4qo9|~ zb9njPqdQ}MFP}OZ3vg=_Cu6z(xJEAkwSAP0M9BUdjkp>&h4%F6QogrGc_J)c!qQLK zL0B5CSo(ciERu4Fu-s~5>06ubjd&z4U-x6`$lAn7wCE7}Wx{@jKY$jSwMnc^m}<hR zqB9mmv(pp$fb;kDG~isZ$2hpXKTi)*K-Oe&n=-GmXpW-+oh!ktQu5WYT6xIMuZ{&O z{2FaA2#Z0Sc(TliN9{uzsG6>{KxwBY(GJKl!iv8%vqZ?wP3)N11c3CK*HN$W!j$B( z$JH3G_WEf`%`bMjk0h26<YFB)rSa#00)ffvk9~yOtD+$NEnS)G28!sqxuu>CK>%%- zDCn44L873}HgN=g4KS|QEg1Le3l@V`;@pk7`ndiFvdB}>!o#blZV;*cVtK${K||yS zCexf24FCF$erRsC#-DYFA_F2=l;*jGg)6Mj5-<wOUb4yim7YcHpB7v8Pq#TUWht<; zxeP}h8|m7tU0Zna3#q<rcXQc0$WeSgjXy_$O|F7{{KM0+*m}$vspM6W%H5zS_+y7y z3l!XnJBH^~yz0`R*K^IfZYteiqf$W*i63A?apzr+pPUpN4GXzYt1K;jnwIo+ZrqII zSJvtGUyej7PtVcH&hX(Eg~dxOcq?0YlGSCw+W1X@a?rZp0eL`fMx-K%UyJl20I0N* z@$^VR1|`OfdiwLxczWD>Y8Fc8eIw2D?^Sx;c0Au6gN*2;Jz~9It)_~QHM)Ox;cnB( zhf?getS<gDE$LY$x=lz$ty5&KGV^|#)FrQVe=09we+n0r<e^q3^C`5L(kAD)0>B@) zUjG%8sNfy`lM!ZotCQh<^#cuS7X9;F{WIvexu84mk|M1bgfvZ`KZFkb8TMjfUwCOv z+V^cW>6IhDfhO%SH0en>SwfG7%3ex~cEz>m$vIh|LnC9pMuT2T8g#P#vKsWE_^Rw} zeN~1gRl3PXA<#5NSWy-CWJML%ntSsNKGK?{@RJ62!y9p7jhB3J0VJAXQjRRGXaIQh zhu=o4ee(^gRvW!htkt&t!@M+Ye96RRSzn6|dh|JQ6TzR)fO$}S?*5{^(&Sy<sWCMt z8=21+KLnB@B7@n<2D*@JpwW;c_gX_2757txM=beFEY^d6EhGL4I`}F$4m`>t_o%aS zGEvJYO(D_V{xWnxjN!5ugS7BzPzBNlYG;Y9GT|fbc<>ffb^GCE^I1MWuU<_<NVCU@ z+p+8;t-6>U)VF1tJ(K8Cc{`%I6MBkkyA!$d>?wG^sdg6bn+;3Mf27${tjAwT#IZ%^ zs3HH8k&2}b!*>K;ey8m^7W;;d5Tr0}C$T9GJjrZJ#%&+kMLez!wI0B;{<ymqDXx_1 zY(CnDwM7E<<!R;gxt;l)`~qEN!vO0z6fKmYFJ_{9X9{2*O%65Zurk~<%Vc{k_FuXC zL(NIaZESWX6gh}pfrqk*_9>xe8NN>;r!Q8L$^i;3)aCvQkm`3uW&r-A3G{v>)a;Hp z(vw?5i=19<L5{5U4~?fyQ8gvh>_Wm)5ggEie2HkzQsWUE6h*>Vol70dJkC(7R~_WV zYnp0Kj^Y^9M-KS-4HL2DvZA>Ho~^hAd?3Ny(S88TQbq`1(nN7NtvFfiC=T|rrrc&6 zER=jm;SKN;6Uay;xmA>hzB(LcnnICghe#70;*EcFE0e{?U(m-)KtQfgvgx?bQjQ{$ z%{R-TMzJJ7PdtzyU?vbBWNcD3GZxHN76=rhbuuJnl>p>S5Vk@GwCXIaI=k89#xW@I z{vEW>kt%kO&xVPRmC3rZ8^FpA0km8gcB0t3$xCzH89n^MEe*HX)T_wZ!c%9hJ3s)a z(h~)bM`akP126-`12Zg|41?^8G;|h^$H`1ufyU3{@j8_h!O)$0Jm-V_<0zgg)qlwr zz*rMYUw8+|S7tc~2Oij_SD83tb(7;=5Lm_zvSWNL^kx`WP941vi;4dI#%IPtTv#SP ziYWji_OzpT>%DtuHPH=*h`r<9md*d<Xliq^aE9Y196Qxv7#mV^nlan-Y2J8EB-sQ5 z9slM)A%{_pyR8%|d)=0O`Onj!)Am(1xx4SxKTcyk)S7SP=xM<k&?WAv9L8JJ&Vz1p z2X1=U<SN}B%<5@>HguZIOPk9&L`=R`;m$SaG@^uq%7H3isyH>$osIhqHD++TaN3cD z-52*7wx4@hmRYlIul@}k!%QiNML@wh;Ehb{-~*FrP9P~=G#D)t0z7*_nk}?HR<I95 zz36Re(tfS7l^x(~|BkM=>Tgbi40!4^vzka&Fho5a;stoo3u$Cv=L*Lj`59#S&%e_# z%YdE_#b#E=gQHvh_v6$hIE1qn`3(|Y{(fdwc@K_<->|+F1?MAWPWB$v_c~JVoT9${ zvA%wu-yiC`4_AYrqfPply~j6yj&_`@MyHXjkKv?V*<#ex&#Ts@k>L`CkXZ*g>OV&_ z(gcSRUHqxDlHzXqr}&<PAH6-vOJe>>m&-r-()sE8U0?HkdXMsYDg79-`69D&TvFMw z$fO)+_%P@gE?59bWpC3R18l7qQM5cGaMoUpkJWj(Xl?E??8$}xdsWgm(0}j!*81<T z|402-zLfr()m{IUznT79e0lx1S9}Ng!vClKTcPW}`xEuw-wQ*2P%ZP4k1@|AYy=?h z3A9fvIwq}{hl!s3mb<*KzLua5&-gZ*x(~f(-PFCL;{3CxgyIb3q8<dTrP(olmIjZL zp!*IhI<{~ybX>M8VcFF-Sl>6;8{4j*nNQl=CCvwV8Vt2%sM})tsh%mOnSys9KYwL# zd?y&kC*e7l!lO|3dY8`+bN4)2f7d(gQrL_A14Gpc<Muc5eh$Oc*`j}|^77P3oqhS> zaZSO>35~~tEsz<qj=^lfT=p=UK;|fgklfF&9BRaGE>+auAVe}DH?ev*kgyjoq!STu z6dFZjnnehAYgo)_QOx@+Cg}UpX3~d|+TK9)Mf*W#MSWCcJ*;Ov!ye8nIIhh`Z#=?t znTMk8p=YJgd`GerevY2pAi7V}$>#{A1JK3loLZTaFEB~=DbC*t*Vc*&yA6hTJB0(( zNst<+ffOvaN4_hVluk@Kg;%Gj#!~oa=o@FI&Uy-UF+f=ZiW!s_=Z`dLwllP_!={3c z8ywE++-QG0F^=TC6$x#~`uJg!s(Y2^2O(sq38_+ECdjLC%9U*dS!+T@D7y)=+=L8J z4iRL&Nmk<&yxXv|7pUVq=^d};iW`=_aQixpd#WYTe|FIq7FZ7E*lbt9PTG_RHfpn% zX=N*ym92r*RzETC(6&s+Kz)M?<<7@jhZwHJkAoWH_9>qXLL0a>wfA{>;1=P5vh0G5 z)!_z*IyJNiWU-9AxTv=hiU5DzL{U!C8Q|-On3Y0DNF<>F9*INo%#1i6e6_|x+dVpM zP#P5W85Nc*3d_+^SD1y3*3sT<LWT&Gd#xxl43wTsU`MpK7F<c#rAEBVgny6Q;`0m2 zzmQ`h^EU?ZUVdn>LA<cdUX)j`ui&s&xk{V10+o=Zrf<XtQSyWLqtpk#&!+1V|FDxs z3>3lPB<?=`m<h>Xm8&Sk380JS;?h$HE@bl$#;~=kblE)sMMjh1ok6*WL5BAQ(?ow? ztiP7)B8}d$*z9Gf36fdE?3MWV3T=H+rBG#T<V*k6Mj>ii*hH5fD7nwaU+ip)MZd?& zmci>)e*XQGcF=X+O2)C)X*nqSO@G}_MHRowXoH{^WXDUi`?;$Sv$!l->WwVC<N_A! zBt{U2{QM8REoRC6D#sLV%caNC{@v~u`TT5jelCbX0jiOc$-8#ZS@k;<!)~8?gS4eL z4tQ>9%ahMvEz8oD1JV`^pK{+1N+mFU{H3OvTseqPQmpU~g@CObq-d+SW?|KNlx2gv z&R_^JXRtKO47O>bu!-yD9~nj^pEj+7eM~yN5nB9Qpf)?vUaL2c;Kd^&jqsC{=7*nh z*{9XWy5CLREoXDNlm4WM7YcgAA2`|>L$9~Ofe9+^<D6#bOCPU1iX>*|?h%(Unk@eM zCeupS<Kw*^@4y>hZy)az;S|$m>NkU?xvDT6(gA*5OhiLEfd1=0=|nq(#V}CC>Ss#j zEp!FP^aCmGyYSZ+1I{2CI+ghO{Pi8Qf8A<VZ}Ri+Z0?8|3@Gy}yEh4!hklGLt~{0k zqMIf>9#(B2_9|;O%Q8Q=DV|GGHbRr|Pd9alC}5%St?j~p@v!IGp+BHu`>mjk%ec3U ztLhtJeWnffLuG)K4a1Xgkp|qHo1Fw>OL`h^3ugvEn{U@`&Gb-I`hHs#)aSE?j+h|i zek4S<Bhv|)t`pJ{CuH^7_L%UmkA8%f{-Rx&X6K2flC@ir0uRyRZ}t!+d~qrf;^%vx z*9o~>+)v;?Xy`C}oTCOBK=1G{9!Z844wFHumWH>ld|p1|D?KJ0a3SF17uI#4Lwcm| zyOWD{skemM?7><eU;kQ%9`wfRGaJFztr6b&B{f1c!^a;qa|{!#xW@!!2u9o~0BkQ` z{quGqOnvlKo^FgzQ7AG=Tz&kWbc_l!V>2Y3m?<pi`gr-X?^9ebEzKL7ml^F7n<w+7 z7Ld$G9-=odzo)M_=}h(U)xRK?&Fppq4ft1Uk1xw#p}U20JP|B4AI)QDL8`6|D086_ z0r3ym@F=liD!%bQzDR7Ssm5TZ144_kY(ZIh0GLpl?&o8EMPncfV7D4cAFqaidN|wf zi`;GQ<Q<q9-nZzAsa1aN6zN0tg*NqCW&UOy7#*8{3xPuHWm9CH`VkaYKL$S^dO?<> zSJ2BKrIFGedkxc$(bN9v!_Jt6sFN)~RFa>se~AjIsqV&)Dm<iu;VEFrg{9Qm{rra_ z7l<w^M@zpfR)X_gf3Kf^4@y;zk!Birt)1o*s_=D$;!3FSP_hy=>uXeZkdCv)g_F~0 zH1vfj@9K8rQf3&V19^Qgc=2I>ZX?;HloxSkR;b3Gze*ERs6NLg7B;LLrh1yccaZj( zqx-pL^-iUjl!)YhhRRT>Y{GWsXZsqEB4ryv{%S%-D$7XGc-Mdge*is8S&7s7TqoaR zg1zj(a(mZk%B9h$vSTnhqIp+BD;wDecy$f?h>!cA)3T3e-9yqNHOlM=?+=N(eNx^T zjFaT4SE%wmd*v776SfyNDUJ%Cpx5>un)ay;q8X@NJ<N;7y|+QSB1$)!+Ah8yZMNP_ zkxfU2?T^UHHdsXdYb9Xd2CD?zpi97&t)>KInG%q795n)$-ni%EBJe*iTSVZGLIg0$ z8)o}&LST((e;-foli2<~epXIwe;@y=oY?+8{;mN5wXQrf-u@<d3XG+f6M%Ozga8O1 z)aq5xwquW2+ZMwSnQ^JF!=%%kd;la#_|RK#`+t%(pHpA9Tnnkt6=9eA*CKuqdmEMq zT4gI99^)zjX9*Sy`23)|T`P2P+|DfPV3;QOdCkn~p5-ZYvK6=B_}NEb<`6SYqr;4% z`G|uYhlg5wON~E7Z?~-(uxO))UgBhioM(aZzz)KC;DUJzn%ru^a*^Do){H<&xSnu1 z$Ir@^Wi@U5efVdTF#jII<~x-`)Jw-oMl1DIjuGTK0}|}x^YeYbvi1*F>0(DfIV;%O zX($X*<8HLo^7CInO0z4vOro5@f>1sB%6bkR^SghE;-*5<*ux|I{C;>)CK2o&D#&f- zOAGo!^-jq5eazSLBBm*(d`>?vpu{pFRtHii^z-2c(gEV5@;v2nCR8BQni3qTj3J>v z^OBD3Gk8#n3HGO#5~*+mvsgK8u%R;#7^t_ulz<L8Oi;r9c2=e<5bRhqso=QMKt)F& zEsO|)y_Uf~_>wu;*AhCJ$f(BTfqYDUSWN@X=7(=${yaR~Ky}dzpxO%}q&2K>8Xil- z%8OcFCCCabblXmSio0R;4!fF8j3<*hx`Yt^od|GK-0)bcO}&{`pRoeI<qAUtu2xQf z2molk2{PEYi_H9-(F%oA-`Tve=eqsZMzd~DY>e0KaRduY4+}7oD#8}i4F;)kq3)<4 zh%Rp)O9yiAho@6Gf9W~LZ`4OAs9PUu7BwA;yjFl=@yMnTrj=xju8xJOjz&zu8(4)S z)RqimX<LeVRZ+PNV`(`OKA>UDT(yrfi`xD#FpvTUKs8l_D`f{`54-qR#BvwXn}G68 znUz9MO;&Tz@7nOOce>QU0&73S+FQrEjD}~YvXiRt=!Txz_Pq`9`F}&4ZFg)i*;cZ_ zWScq-$fzPR?hw~MCb1GCr5H)MMRf9fRzia>5|g77bK$?O(u=xVCiL9V<W@}XJ_qXh zo#o_Z95Ev^@jQX&1Uqzv{7%xO)r!!fJR7UVJ2)ADT+OJWfb6G*+Xitpq8~CDpn%-V zpA!BciOc}MOOUBm<Jfk0!gyR|RX7*W(n-GC;vbRdS*0eZ^tfb{8vD|z!hc2M3j8b| zANLHToH7~SL3<w$+Pf6SJv$%&bbWkD<iDH_?|fG1@RE<eV##xr(Bhw6-)&{JbbYs# z)$X5wRJ_Ok@RYu!ss;5(OVgKA`dW&=H4pOj$kx^8ENtyVVOj`2zRk+i*o!be155dy zr*-8OSu3`B?vC%jqD_vAP8ZJ8riatG5XEl=0{ndXKVn9W)b9p(+bRnK#}Wf^yb18< zUoh4$r2&(Dfo|;Ex5ly#ec**IYo3_`5Ub1a`uLP*+GG0BS1?sj&wusMrI^z2MbAtb z(Q0MNKi2C^+5FU{n3C8Z$m2@Ed1T5*cvU>;lo}6Gg@-?+&**ARfdB1jc)3Go%Wc3G z)hUo-e24J5_$v46%Q5HWpAvImp*b}w#{Kibn?QY;MVnu@3YcKsjqAFtoQJK`SI%hv z2EC>C>h_p^pcYJ_g*bM9nBzxx;91;jPa+30>4Q#cm-XGnuIsz-KK1(0c07l+sl7tm zF)UF`RhvuiBKHA{=^YJE7Gn~-7?pFUCTsvrH8+3k#_dQO|J^f}zYl3isy!3G4k`9u z&Qd()Hw~)Z6jT*y{=4udb{Wj0P?uVZ`C4t#)Y=sN3>YxpLKrImOPYRFu-Y=d2>gS( z;UC}ZxvLkQt-Az%uZ8BM+FsTYK3GlF>t2GeZwxKUPF^@j->!YcVa&vkHanR%S+mpO z^9fScW+Z%0Cx4&h!e9w5-J})hlQ?;&MzCEclDx4kyXi>FIC)#LTe!}hId;j>g!+_S zhWC0spvKhBOU!m&Vze{=_bO@@bm-c|p4dTjVNqJ~GDf6nZ{nV6O{BuE(PvsovnO|u zkkls^>}<MSqqq6z!iN`K%@$*BHfd#twwN|!#k*@|vtuQhEbM9$pl14P>-y2WzX$wf zOZH;0`X#%`kmIL<0qM;IO(9D03Au)UBaQ~axOeOcjC;raf5N!!Pg@vABz__NI4$C8 zU{vB4QoUnY#I=l-%UY={60j%mOHCxRA>w*cdtxUNjcmnl)m{DfuxAhqEG92Lw`=q| z{|n+Vl@M_~6>%&J?K}++AUBAg;MD+aGLtmZ7ZP2Bo8y7-J<Lk!K==2wdd#y4Hx-Od z#OP$}5mZL;WQ$c`m`ZX)z)EPvxs<|Kz-Nl!eVUeiDW;G=ptJ(S%fCoAAT#Lj$jd(k zi0<h}^@Mgg+52SARa^?|$QgCn#s2|+AFXp2=fmHzb#n3bu*R%WoyFr+NAV4~#ynEA zU(LwfUp1A_iCskGO(26k-T!+&!C$Bd0Tp_Snljk8#=Q0a!NnADM*7w!8Y!}L+nc5M zTB9f0WG2GaxBI2=kMSJ;;T-0d+5Y8MF8k%ZARdh;B@NwMHaudt1+x^qm*MAgk6(;I zLLhWGB@#JG?KwM(8>BF~kldYfqWFXq#zlO?BT4bBqkGPpB(e?`SzC%*g5Pg=Bsrd~ z^G`iwYdG23(9t4=PojBDX|h0pGh=fy?yE~%Zj`o^+C!hGg-+bI>+{qrTHrOw@|+wU z)tsDcO(|JZM&;(@B<t7V#@EH2$g+9Yg*tmZloIMpubUd`%up*so!JkKVYDMp9G=o4 zIJ~$s22|Bu57|!GY!5jXcV3La`_RY|?1JObGi{yhS8V@~Wl$3OwTnIZIG$7;5A$T^ zz76Zb1*4=b6Oz5~lY~EZ_(}3AjUUKzBzzzGi(O6Ld#4Q%mVHC%vwKLN#LqX=XBaI6 z^o=UIwva7|7$wxV=A~HCbYdyptuN0(s!C*Oi%rm0dqL3FFwPb{UgXc5_aPcg2qfPn zBu<fa8`@EtRVvW4nP>s$a$9l3yv*tvX^SDp8G0%{yu<Ld6u}85CHq1@8Fbfepa3dI z*MbW2>Ka3PD};roJve-9xjQ&mY>D+_CAf}tdHMW~i?rQb?v7XN6ow99fgJXpfa$8j zz}oA*eA{Q#8{;3MGiz;cOpii=fBukAMQ<nC^SWGfF3<66bMv^{pb82P@cn-$Y|(+W z7_JkVgIErH+C?6wT)sfOAdcRR>C&3B;9cMvPijv|ytL*Iu(JiA{^qb!<Xqyu)ejnR zFCV*36>s|Jq8P90U4Fjj3))UEkM0pUF?Nm=E6rk_oaPd8yBAH4m1e_htVD(+u_b$H zOqKDLP;VXMg92lDbTQih>m(H%9@}3=-wysj!OrdXLBhAP(=z2ReqA#*Wv)k-)xz!g zzPRmWXQsUHx`<;nLN$A6mm@UBrd}~2R7?<C@XPq)`^_n`?$)8F{ZR@y42v%9e*xHt zu~KF~0DwbFt$ho8RK?Z!Zg!Jw!jijSz@PzwMg#+j2IY|e31LG(0t+F#XiS2Z)-<&( z%Dn=b#Kg@)HrJr7v{h?;RIRr5v(^U!A|}KpP~;&{MWKp?wv#TlQBv5D$NtYbGxzS@ zO#r{|_iul)H+SaFoH=u5=FE8(_W~+5Ix@*pVz)dQHsTz>diKRMh@(h@s22B@H(3wC zN#euLg`~*_ujhK()BVN0b)imRlkR&yY#GS^_k8UXxYcH!g*_O0$}3Vo$!eExgvW8f zg^yN4jkcy7G<DdkIJiBC^}qG-MF}7b9vk2>AE<Rt<ZFBs80GRm?<^cYa1s9EAnf?S z2xI;t75#WUgkRm?KqZ52FFqxy2LTD!0}{rfVqJ^Zt(jiL6Fh+=XvN!ZtqWmF%&O+P ze<R9U`eX7{>)ZH9vbxfsdN`|9Myt-T;Smj^7BuB6H~b93XL3Ft)!t}iY2&dA4Tbt= zwgboU402hw`kh_t?)Gpd4G<4plJyC7x8E7e`bfSK*5Yy)iK{Wb=^=CDu$jA*xw-X+ z0H4LZzGLfd2#^06;?2&htyu@<6!_`}7(hm&gkL#k{#i-O!LKw~qBE%OW;4)2%GveM zziwUk&p>Sv`)!|=)w8H}U93eZ9LUK-uSLr$vac12V^h&G!DKHoFxkLkEy6YY{YK*E zwV)qpB{@RP$wt%I(3Y({AqwRi6<jKeXpgih6E@=ooH3Oe#$#CGJvCPe<jia6^>5g! zbF}T&25h+l89DK0gT{htWv4{GE8;(Q5|0~_?_9F3?2_<6zqbfL*1?LZ86FKpATius z1VBsH|2kSdh5OZcRL4p6SVaw~Ki?|iHayIC!67^*&f0GS*DejNZScp~iy|lR^9y0- z0g4UUaS{U-EHDkCPvhpgN?cRE88xtK8JYJMdDzNxVoOzSP(M-kGFLCf5u3<OU#?V3 zZEDC3H|MP(k!eIp;?^zyDlegMm*piq1%+XOkpG7rlZ!Xynz6Ur>~0S%J4K`K^)~gK znrBmYXLZX9VGc*Zsu;md!f;i@)2awe!785saqplMH_9Y+4Z<|)F}DY=(c^W9F5?g} zwFHv{O3-)U>99G)K>G<dGMnF=+lY}SOlfG(*g>&=s*X|SBUDb2P}j}op6%1DZQAg% zvk_<Np$Xhp?f`rIYarHmN{E&-9p%fF{KL>%nq)iOF5Rs6zj`aR*fuwv`$za~C91>J zXGu-iW0oGpVBe%zaI<EumU25O7ToML{Y`-|xqDiFb4$fN^rlgNlU}hh6~9`izZqVU zPW^vRdn3>GK9pvWn$Qr5o9G>2+dBEkr22hysX!~y`d!>+XR2X@xY<{%z7l&F86MA* z2>&92#1wvu8+yePW3cYOx-@9+g}xK3e}JN(npx_`4=Da*>g$BLBDPDfw}84WVz29O zrt#YOS??g;s{XtkKLODD|1)q>NFHwhIdVPYxfdei<#Hg_XK67XQ=Hp3!w8rJ3xb}Y z>DIpR^Dne+M(}QuiYhk0VL%L#UwNybDkT;z`C6ZUWFnok<mOStPM*;x1&*A@Ch{Za zA7u5{s&%xfC*0{=0{|lj8K)6~G7SV=kHQ=@78=Gp2tQWN);?tZk<tmUsG-mn*AkK! z>)_bEZB}o8!F_)(gX(-Gl}GwB7V`WKnYiDm8`FygyOIJcc{~7fRU>gLcv>a%)2hi@ zf}BYj)Z{i!-gbLlUFi4_;7E2xu2F2i*p|5`vzedwGakdQ)=1uFd+sdy;44g$)MQ;S zBbgc$?cN`Quf_R1)sTz=nIOBrkok*``U{WXUZ}SDou~ZD35<T}uRe~q=U2>p4}VTX z0mNuvu&X5dZ}LymymIINM_ga#sKYJ&mXG|^ANq?A7G<52y!m*e=lh$qWlVlu56X<z zSThd==GFC}+(>#DS<bp1Oq8)E(R*?%+1Ulg*Y$LYH_~>zqXm-ddV&=5p8`RjjNgv; zIt=}jwM%;BIOpldWSv`cIk1HJY75>Kl_B0Q=d_%R8}jKw<?m`C6TJ_I{Wr^bQ1YUU zZNn&acc7w(J<~5(17%cE#dEi#mF4M5xcYxRlt;BMJ{_>AE~|RJX^EB}MfjF=L(5IM zF_v~{bB){6W*(orY$>3X{Q#qr6*3??%K^3e!!~nPF1#ij18N?|xHy4{YVpyG!Xp{Z z6D9scweWa(ncuv%p9k*7_%B}x%sNjEQZcic*J{^lg}t8N`YLvi_|cK`@3gDM$vkW% zMvL?-$4T*gz+ZUOUws0Z&EJ~26Z!Lk2%Z!~@Doa?Zh?^;QDNYI=Z8gELCH%|e7208 z@2@^M*hDWd|L-OmbM0soozafd%ozuF);wnz)rmig(;&>hMJFeZ>T-@Zf22?4_B ztkM*WlR6&bq-M)W-k#ZVLY8u5&5s(!1a2#$__%{jd~gV#_(Gic0&Ao@VblB=OIw!n z$l8gXwz%>6OWmwyI=Pm$S!ZWi&Z*T0Rp*EKgi1in!<f}oEoLx_8OrgJa{m<7c@$>S zAET$FvYyr_8md6uaGjEJA_!6OSinFL4C-bSp72lcCkBohW`9c{c3=P$x2G~210NW} zsSVq{E<oGnqYPLj6xvm0qqpaj65;L1%@^}++;dAXx+0ied3$~;PghL$N^UMD5<|7; zPvJl5{D({)2js&Q?m}nPPko`9)JE$_xaB&;E!UPkRPtdChWxB^Rj1TEE<nH}ASeyW z&X#;vBNe{8Rrne0Hwpg4!+!mhe!60*5OzNjev2{mgpB)s?X5fq7%RLIx!9psy2Uji zLtQ<U?D}849S`X5|68m4or-39<I&$NRd1b&8)g&9Ag#mYWVlpgggoy$t4*1u=A`;C z?)ZAES&s9rpI}n%&O961l5+!s_VsD)h*<_lOkF=-O78nxm{~)cWqF#q4p0@aiS6_; z?c=xfk4Fspv380ezgxL7I(hZc+l|Sq@h_3Q+RU{?8>+*}t1DL`Z6srwzCt@i5Vi@u zn3l0Re-b$?-=8K(Mkg3S4O96~w#k_6T98N%|Cwhp(9$Aa<BsR(R-jnP4Q;7lLrY%f zw$W|6{VE=5PGqq$9eQ%R(;kHJv^#BSCBq!09X%LG!wDyzt+eAm;?fkoKUNrng{a*? znwsQ_%X+U9vfit*%jGfIGvzC?ua`%LGt13leBq%#Nz|7ErNlF3d-i161}#~$uUAGx zy}0b#*Tz`W8s^>nM81dppq(U8-u_ipZ@SU+I`j@=j9u*ramkUL@;dDKXRH<vECPNt zH$C%^TV3sF%-1B<;{*(&pwAJ||1cf!deKPZypdYvR8cuu0Bna3Yyhw|yIe^&0z2Y~ zx!&`usy<joF#eHXd`JqzSjNWxbCCV0Nd45~eHR1XnUpbVQMx)eIb*J47P14?ToAR4 zu@8v0arGBC)b7T30h2?($dNZwxf6r;h_WtGc3QxF3hJByxQ_$;M`5~-G-86f8?tNH zWVqFH8DG1XhTbHY_a*_%x2B^F+j<8)nBPRvnEBqcvhtGFa&>P>2kPKH92g(H8#ul_ z{=(iFkK$-xFiX<a+~kbhh`}snSMtF$6$fF%O=6Tcp+8NkSJ08We>Trp<?X*gs{al= za1nHMzPCTOD#6=-yR->ifxZ2A;$II)o2rp*>c^9{%2wBpp^|ETSl544{Eh1Mn$o&{ zJV~pP18}mX<B};D8PXh+c>7fo;CC_q=A~!hn~8P(@vvCsadrLUrttR@;kRa(x4&Gr zd;4cfzCR&Pw}6BE3$p-ulUWCOX&B`55g?xqgKXy@OPh|;yQAXWS$g*Yy(7@C?7&dz z0{X@gA#DeL-lTO`l_N%A=Od6d`KXLWQ5`jkA69f;L-sCOOG*iBsQCxI!G!w(?Ca%4 z-u}t*d>rds7^^%>^l??iLHf?7e|L4o33_ujncf73WH#6JBdpTqW@MRA!=$$6d4sEJ zCS)F)@$5w@!@P@=Ig}O$&BeV&x$XQ&x$S(CW4|sW9cCABrojLlK;ysAMkG}B?%y?% z@~uRM1F9DGE`>cPqea^~*pN^tY(Ez%#N+Yri`?&`Xt$v_q<-D*JWX!Qex=i28WiCN zcB6c~unRWX<n4=KUsd<BWha0=5lz8?-l=|#eY+eOs7$KA7Wg;vum5gn<_A)J3jA4r zN=eTK>akP$IH}%>zX|u*vJ<5ZK}@waRI2a9-|>=fDC(vjFkj78O=@Xp5&PRnc!0~C zweCEzc(Dy5^8+q*SKWCNoH}cgT3B5ASbK9rTz=-Bzyx>;bBJ&4+wfRPm+U73_7*mL z8=g(+@%B!ri1)Q!hgtd@doBFs?TB072~(l=tA$+|-A!|!&I;C~Sq=eT57^e!v^dQe zUrOEGG<7<l1VyCIPBkYy^hsD+-PvKrykgGNE)Tnw-kiqCF6{C<8QeY>Ku5?#s{L9| zTL$)|Jf#+PZm$4*vs0g=e7MUs&^aFk0@%{@c&YwAyhFeUK8GeVKFvB>Gj?F3@~cpz zX=;kP8=wc?7Diq>$E57-xJi86f6=j5Vl8d#z}*fP(_w?@pab>-Gcx{L&B$W|=A*Ey z<4J6_zbWtOjBbMJSkY3V%%=rqk{0+7p7VuWO;cw8?lBL*0rnhbsW~X%O9uEnY-ls; zU%D{kcm9Q8z3yAVO81dycs=ZQ@9SNhL=go}pSqV_{nrakV0jy`RxM>=e;-O_6_Vq) z4~DSg{fJ!PNC{5*@Eq7I#&aWjw6}S`k4LCrzYK=BC&y^u?AAfwO|E(Hdg@<k56BFa z@U%bPo!S|^c+kyh)q8w%%1@`BvXpB8q8R_!B9{1{u(j43Zuag@-g7(oa*zYo6VU7S z%X#pM9mlz3G9=gg$LhUjhWKweahOr|1RmZg@K9GN*=}|_@8FHAptZ%AuK@rKstX*o zGp>?LslOfA-vr*@BHkZqu(GdJ7P{FL;`?i%G%4cyYvs}O{qCI({d>FNdpG<1y*@2d zQtM5J*n#sRqQ^+U?GeK5MEK_DF~c_~Po1yBU*Ta-K^ypHwS%lQt-MIT?f@r~cAq`_ zD%s{?KZdG-PqA`=qtPtt$WUi>cG{YI2-Z#<>m)8(U&;GLLc+1G^04c_RbSU)UzWl8 z(&}u^*blec*FWzIdDKpJbVnbJuMPSkAnbPl5E*#-{PnXi2w{10<oI{=g#<LK9nzM# z+O5rSuAAgET0b84K)9R~(4t)VJBJOYnNL&d9pRyW*U&G(8dw42uY~a%`)W**wzO!y zO%xZX+HRP24~sQ++Gq<`R6gg>*G|7y@n^KT-0XLM<ybiMZWI=#>sa{Y(<m%N*>?mj zk@@Pr_HY&NQir-LBiB9)bD7kPz-73Lo~sj<vd6a*=@m8o%+^a8-VXhh%uIU{s$#u8 zi8V>yo}qGrw<k?{<Y{Ebdf;ySF5e^IB!aW^2Fdp-GGaT4j}SV<O?WlVY{nES)6H^% z8p^57Hk*`gSJT`W*HZTR7kwh=WPKer8m%ZRRY~1aX>wJpxMP@ZlH|IGwk+$%Mr~Q( z%Eq}dz^dD_Z<jWV!R)4Y!t(>t1~jGhzK26KD~SzH&$7eQ{J^zMK76pW%U5#2PL;jL z#a`izQy{(}g|54nU|om-imPr^<J5vx7?H`tKcuKg9|e-toOyVO^fWc$+oeMB1iRs- zw!zY^d>g!kR$XmE$lEvQ99n^ctJphcp@dPJvnjAG+h#mNTw!`q#kxC)k?Q`0HYMyP z*O8T*ye7fTzPpWPzXbNpLeiYg7jvP^<|9mt7$I?Y!v5z|Au1Yt$QV!>FK7Nw_4{Mp z>0V28{PE0VnE&rr*51%13H4v^5U4txUUv)`1aEh?GJeJ;M2O^D5u;BoH{5D?gimnC zUP{qB9<V}H1BdY_pNJQsZn{;B^mZfex)W>O_jV7Jw|l$Os;&*ZS=WuGH#M(9trNuP zccbY|%`cnk!lpNy22k&vO9|z=rRN}ql)~haVWxTtl)<UiNQd2=4wt%ETC+xnwn#cG zSI3|^y*6b9o~EDKIdb|=Yr5#mygLsPc(H2UyudIuuOMKD3RVArdT|$;Jem;AJmkXU zm={ftd?t0O^!BW(DTYQekBKS1*!(7Lq4^bLd!dCg^=*F5)u<r-Q=|fzP2V?tm!_fL zyv>Ckd^JkGKZtL_9Z5~Ugm<E|_P40Bjt0~%hvcfd&{r0e9Y2a&+?cj{A}(}GS*=aM z-Qg*CAaIE(=sp#mf*YczKzExj_?RysxDq9X%`WwL?Gr^YYdjZgii}77wfY(E|HS0L zdFNuiiIn)n8!VE1A+d#HQI6TgPH1JfNxqZDvKSZp!0=tWvCIN{q*k_^9|L-s)x{ps z%AAt#QDa%Gi>=nm3YE3+-b?fn=go1%;a@pvaXNFBCZ`LoAr-iW6n;d%51dpk=cINW z;#|>wHsKf{{>!tRdy;&M(S6WWvH1?<pz@*U=ZAC-s-)F`nZG3nXk3zSlsOVJZCY8e z<m-#V%<r_axsvb8D9miq$`%Q~L<45-)5;b|zTZY+#;uj*adWl*J$AAU*m?0I4LgaS z5q4SuJAMmFFaa|=2s86>KhW#_4Of)T83UVkt&#w*)&C+^Ip(zce2SZ{@vG>p$Bo?C zIb#Fgihql-6y53SLSU?bV|dC!HlTAP-(y%nbj(K;!-*P|Gv2w57{9ZN4>9IaYx%Q3 za>fN<lTIVc;xA?B+b|S5n6VR~P}~{>vz1%<jue{fAmg+&9x$>y2J0Rnh`++ibIu}s z{kIt8J&I^8!d(hwb_AsGv8-Gb4ngJYMcq#3A%Nny2k7QiQqC)vahpp)W3%X(N%jWQ z<ni7ho;AV5npAIasC+r}RPk0zc*?#$piPD6DBSGfro5lcI)Wpt>!DU|(+_$XnX?}Q zb5>mmJ3^aPf-QHpRFBFp^rdIpZ=fbC7&OnG<n4x(UVb;Eky#@~R@X!4-Dv2DpLacU z-VJT?>gV0spQDcJCu-s8rung1Emfl}dzNC#y28^D*LUQzNDbJT161J+-c&Q`QasRY zf9T^;Mlj(TjM~}jJ#SXx8dBru2h!n493xmW30SkCz_&o1Nbc;C+|zyo=fq`OL=^0c zL;NlablQLEL*&jsL>?ly_YXWo@X{}a_3&%_5Xq$E12C6$`(OjV$Rr?va$?Of5UZT3 zoiUdYmC6`|gK5Xb#oFWdIlM$%&k5|YeVo9YT@m#L>MPRVk|ox+umzWVs4zuQ;!;QL zOjy{jT1bF4PVzlZPcf4v-!JIN0#8jAGP1!=+Bf3A<fI^w>n}YqD1Oba@yjq=n@IF% zty~2=AN`$^W;HH7^#DdwB0(X`_z?EBXZdhQNm6`@#lxnideZ&QAngK37jshq`1V|l zF6N@l6QwwXr^0eie<1@FMm-=TpDhPPD_xgpr8BCPQ-)UD?16)rHbw2^`h70?m70D+ zGVBDDVJAwPXj|+bD%HP04{1`<Q#?ysn{|l($y;Xr37U?>^{gMSXHfN#eH3N!@&AF9 z5ziTqE7cqfd7tckpHt2dBol6`Vlz<83B)E%j|dvZEzWDkaf|aRVR2qF%wTaYZTueE zg7wc<9Ny}#$x5QPIyhOXUrM~m>83o~8paO3H5Bu$Az;B3Ud_yKyc7l-?3O%O<*o7< z_`|^aroSD<`yK_dB~f-KPOI~j-^pOn`;{(#@u~lXSi4h9?y3EnX?P_r<0Thg`rmt% zFa7tmoosN4`=h@Tx|mM&0DBmE=!k{JIaZ}jE9jXpYv-7iHqApTLIZX;;BEmIh>8#K zET7DU5l8n#Y#cCcj)-Z~%K*gf_ENIUO5THq(up!&v83D(uTH4PQN6v7e3?n;_d7HB zwiGpvs_hvs`R*~(!F{#l^P^SD(wN%w>*Uzl^DC4pzB(<iHZ6Q@S~QVH7SFDs%V(zC zXV0Fo*5+;NleRPm#=u?Np8dVGHu%Ha{M$eh+|wsy=dVqtzxTBK!|Jhgvc11ENKQ~N z_(uxWy&c7*feM1{ph<&`l8_KMF#t{s2PZ}cN51tj11#eKmaCwzrm0(+?q{B+sjFF8 zbY}+xDcj>kr1**gj>_A1heV(ZQ7OU0uA!N>3f<I5eOca!%W@Jd%j#<b^Tcu*9krZ> z8YX=0*phNmHB*PHp~LMqKItdhsaJQ!W)4LrK>?>E$w6nlBV4$+7mu9XK7YAcgFC%+ zShP16`f|Z7)Fa&a;>x(gU`V$3*V>IzQceGe3?4;W_2_(P0-!j7GieFztpmhWHvJ8? z-$B@p3!}ZtvI&;v!C;vec_T*UJX=#5VfDP9EjxfrP%rZLXRt5zD4TPDpSUPooh>gO zZ~^CCo*t~rS&?1N!Y)k_UAmd;6`%&nbXeU>zU~-9dZc#z4lVM8l%P0x9g*>W0g;KG z=x{B@_&T4FOwOOhPJe+2L+0^z-&r|@GogkN2z1aup4;cRIPTc&J2b~ni@(OMYu*57 z$@?{KzIOU7Wt5w(d0CU-ckiRA!+6Lla$Ei^1Hjx~7x#u+%{*3K9{dXXT~it`0-1cz z;9hd$&C$7W*up)1xSzWHxs%u?PcL_I^LB^iQp`FnVNioaZ?{#B^>)W9nYgMD&DVL? z*-c717yp)pom`H8VDKoSo!zz6!_NL8+QVk1n|--TbDJ6Ig7fgL=qltuGZouT<89aS zwsAAZl<B1ig6#3GOE$?%RhPqeNL~m>44etBWo)yzA4df(l7*R?z<yfM8}c=;=U1;g z3?NSw&3e*-ze)sR?fB%e{*Vyey47#c1oo`#s`!wMg^%qGn+7+>%QJZNN2#_u;l9|~ z?!^1ypP@>U2zv9HUU?W!t6e?N<T96+k*<k%!2KoE77<1|a}TgD{=#0|;kO9G`PXPw z&%`<YHEDO6?z56WX*C7q^T2u27ZtRyO@A{K6aP}sLT4~Am&V{>FYCq0>S49COWn)f z>LX!=3bn>ka6b>L+oSm=iJ*p9inVL3-Zsp?=(|5ew){hVd*lT5BWPtm#pNtFaH%xD z^zio7?(C#6j(q({^^LK*8Y?eWsIh=uT@y<IUw-r=fUt8C&;2SGd3D1SWK61qe&^{6 z-cjEEHH{E2o!1@bm(EkZW6EN<OTSpA>A<G!;uEi3q9b)4DcQ4uBNOX<h@1WG1?~!V zuml7C5hqSI=0$8endsQIkxyB(dYC*ABxj4d-|sxm{)H?1Fm(4kFqU3&%`ny6B0_ui zwP^&Bj@QeBMC}&ZPk-9NSCX@nLIiIJ658-{vwVxN_}&@$d9UH~qCq|vmg5cjS0$OD z8PsIWV$J`6yePO)_|&beG_r#U<>3y#X&%_Y{48p%YMWY(x8XU!)U-Ppnh)|DzOGoZ z1CnjoY0|@oP{9vZ;XmW=4N4;L3Gmkr6cB6Ey_=}_gmMMi2DL<*2JL%JaByAFUCw!N zJ*;=Y_b{~T-kPyMvqd<P$N!`o{vl)UZI8*S?ydR~07XhhFN4YzaEBU6zUz9BM?Wu~ zLEhZ|U%jw1-Q<N0TrxTxht<G=l>?5+nTYz`Z-zT75@*YGk%#1U*zU37h;x~mH~K8X z#FXM8{X#o2oLPik$#)0pB}B(V_0>7eERMG2<riX6!rjxb?uh8V<1G2%;{tA{WsB$y z<f(;Bb)L@JU6XBThE<Ht?;fL>LlWJ;%{zf1$AqkE(7$04#Y#Ml%bpsdCVKs;8&$k$ z_~$)q^|oT%cz-F}V_3WOSsq{eSu$Piu!l(GgPs5eOq0GoKSJTD)8!|aIW$eGKY+i& zD5Vvj;nMdm{sNW0iN89{zSNH)E_OWI7Yh6uQS3ZUTjMd<8ZjLN`TJIPnv@I`uCe>s znw=<B=9fQoQ9$22izg6+@}N_ixB&Q+@jDT(S)bR8=I~nIiJVYxTTIrODnLf3QH)Sq z_ATe@_eI9}(l)lJ_;l*mn#cyW=CAOku@2RVC(XKW(3=a~{C+^D2N`;{<zt#PV9O|u zir{gk{K+7(jNELku-Ot-SG<B-%mU6*KDvX)MdB(;IZI=ZO!Bo_{CVva?A2~I=b1k2 zK)W88lrP;Z;~61-d?rY~D>VheKKS95upbb&0$$w`_5<S9!e!bUd3aM^$WMD*2^o6g zh-j}{vhHfWXEvp7#r*G?7zJ;<-qHkbz`A682hM8m_5f%=m%l|^%GV4-WN*GJbi`uX ze4%xp(aKa0vv=A6Q53zxQ^Y=N*4i2m<ZxAyhwawiBzua;OR>qd2+*~XH_3Ifc%tGh zzsSX&(CSO|b3%gZ9NhCRp-6YSgZ*<SF`A$5z$kUxbB!Vg49>RK54I&Nj3lvzNMZ|? z8c9qbFG7Ch2rC<Pa{;nuLC1WcwX5BdZwE!d`3iln(C7;pqf=;Y$gO!28;ZMVp#*Ld z7Cb|Q1yAOlz*XPEe8<T@58E5fySa-jc>e9}kCVK9+;R@I!AleC__OB!g&7S<FC^8k zz|c=kg<VT^7o&2n7n-tzD}IWaoSnetPC{;^w37m?DcQh%{!(u(Iouki6R0#(5INmx zN^9_ocZH$}>fwB-4#Wj=h68b-+cW*&uwk@kGU8)RwT6qo?h%eww{!hiQ3MWjm@@>- zFy2?SFDCFW#u>+{PAg(FVePoo{CP#9mDCch$u4Jq-!61$`Nwq~TG-#%!;Kl#77Vvd z5$^-3wKGg|98Z0j(c)Ul{!KO;HWW!7<;xcil)w<d`%wJ<NUo#nf*fYi6V#M`R4%t@ zn-Sg!vbjqi?vn}{D!qN4IOXS2cHM=_404H9ej;vi@PXoP%+ZXl9m0rNGi=U+7Op-d zv}N^`r~naewen~{=~iU*f@WnH9W)PofEj**+<XsCdy0kQYp$7*6|A~h;HW3-Q+XmX zN`Ht!lX|KCju@1|VLTJf|61}Dz&rFdJ&nU!;b^?N{*-(NOvQHezEr!j{w&W0#y^#R zkvOvj{l)hvodCk+e}$8qmP~Q)HuTI?&u4uEC)^>eHhQuS<Nn?ISqChMjuJdodI4>p zA=(~9LG?j$7t4!rvA|ccT-7#D*nb+-cL%hxC6e!%DD~Z&T3MdtdpJsc_Y19Txl*aW zk8`nywD-3u%k=m0E_S!}-lfdc-`iYliT2*9T!rZ}h7EI695=AZd*9ZyM3nz2Od-k~ zppJ3Mh}v~AlNG6Uon<oV?=s+;AIQb>u~0sT-c36N?<V6rxQ8V2+fZP1ZTEO8-3GK3 zkm~oS`{5tlaHn(IP{G>O|I8F-rs0684obd}gXq&^!us^JKjW&9|Ma486Gnx1rtS0i zp?v-=8jyBh82mh!;5-LdU;8<~Gkpro&HMrJalJKDP4ZZ7B6!H*;1~7%>`C51AeP<G zLO~EB8J@@(g0%jVxeKRMKR<?)9!Sw+@e1+2Se)-ue9CzydAORJo{?*}<T_A!m75AH z+zl(pjn2yNY~@+PrTRY!QObK}GNxSjo*vLo8R>FYq^$&OjI)sN;Pjiiu+imcOsws` zLAj##0rPAnd7zvV_M`6ElJ6XyWRDY$F-G8Z6lOD>Hbw1Nc5C8)jIRO|B+@j62uAjc zclx++!^$0_{Z5;@)WO$pqArPmr=c=DrQLU>dO-b#eRQ6igS#AA-^jKZ^kww{9&Y`5 z!p;Pelj{fy5`ucw`BQ;O=a$P~y~*vL=10uB1hYOQJ8exoK>OhPm~2a`Ul<A*qUH+t zQKDlz;t&kp0ruJ(P>aUoX5WzAP%_!MQ2bIH-T`(iQUd@d)dz*(|Dpgc;sA>NG*$wz zj!e6UjowUH=cPj30{0z_PJRKEjFQ>j@=Hl(?<o+HS*iYZ`k0uUuml7SCL;4&y)}Sf zCtWwvGYagM0*6WguKWcgfS{OKYECMK+~UvqQ~l=9mSzemdH)+6?fco&Zw=s~9e{m1 zU>}OhI(mUt%cA3PBvVK^ss2H1cQGxGBC|mVLs7J9245Z?+<*S9@uRdn`h>F`W}yLg z^tSEB<>4_bkNs@l>$->~dU<RJFAr`=5J-XLp)7{=_S5L4VdPjn29EXmH}rtY1pk?) z;?wYYZTL0Jl!4;*vupr}N1O1l+P8Izb2H1!=Y_oW(?0^t*jgfQZQ>im7T**O-mG6b z6tA28`6qomM6!`r4qu_mDJ^E0q^7LA#LbM2$`?Xnss1YZn8)wa^M?+??^rWKfl<-S zj#;eLAdkNS3=#V4d|Uoz&7+b0&0W?g{^o9R4^$Qca{ltQ;BP`oB9|yBKMNQ{>=C?K zr~{n_09+tLc;Fy+6yQ5-I0<FcIxmzgcp(u>P4fMRPvm8LG+ThTOap~8+4`~dt&|zR znHM26x#*ep*`wl210crqlEK-92a0JnXrQRIME+6?wgmUGFb}tvb-knUa40I=f=jBj zw*%7+;hC-Ra1*kQR;7zBzR2p9Q=s$PfC(#Zv^14)wrU|~t4OTjFAO%0t3M^xzl0h& zV%xsRI?p5E!Ix!tUeJfgy}2~*?Y6_fk5Nj&{cKjxB?kChpBSLOkK(I{@jVECan29H zyaF$-!e3qoG|c}2XWQ{I$#jBY7I1x-1<VB&ke$3R3;5y53$uW)pS&;&xcTJZEMV2i z!CAmnCkJN%7oEH~3%L7LjRjnMDuM;%!PJQjOd&RKII)3PGaY!i4vJI=T;KO~PH^&P z!0WBScg676*z*^eouQm+(Aujvkb|2;f<8aAKYaOGA31K=M7T_-HcI0uzYF*5z!2mq z<+~X>Y~Uy5X<=Sc^8HWGKt}S(9-WcAUgeDB28`)EIJfue?=)^N_nqj`43aWI<Z~Hu zWp9YBo`SO4qpwSj8L=4MN{QcU`|L7DAd#KD-eijHqWE{Ot|XTk@^qH!{~Dv8fZM_{ zX3ckfLyFKnDOV1*C9Z7b8|rL;@^bG(lT7k3X8)j{Y_8S$lju<L)})wVZfN<bImsC< z7|74*-N_>~VjPu#McQI+aN01~V1qLO$-BXsh;a%VoI{$Nwo0Jdk8kM}awm*FzIC&9 z`v3cnVJ)Fa;i{}!JZ`NVnPtD_l!oVJikdS86;GNz)F#eNtMLvpm59$y#21IeClA5b zqlw@yM}C9bYQFsm{rm{}54^8IAUq7P32w&CjV))L2rt!NMlIEGC&Ekhp{S)AtCi&` zcN>@KS6}GMbcu19{^bjOnNBk<)Azp6m+4sJGJWX_eVJnD`&}n!NWXkN@>Vu^aEy#3 zjG%dbBe&0d;bTI@epVSY&Iz`>?kyo?lhmB4@S|h?>;_cJT9uo4zO)Pv`(Z`5o|6at z(<_4HiBH1EIw(^Y+t7L>caoZKKX>%X=5t32D6P-{nOu&M$GGE?JjUCzq9YIsf!}Qd z{j-4&%cwX?nt&pfI*MXKup=M#hy30NJVNcT?VF*;%sp)JZ$g+{s-)FZQ5&g90mfjs zR%^m<MAEEQss$_>`%_AssWMqhUGDJbO))lm?j_g^G3Q(5g!VihSt4&zEdB7X0eQ*% zCx!o{lCH)3dtpeVXGHhs<)C&!YxX&4Hn1Gq<Z%n~vMB^+-qgsCydr?{?b>%0FJbFD zv^ZnlX8lQzJ*Ky43b$A;V26<d_@*%UC9Ur0<`N^D^L}X7o<7i@c8e!}7W>D0{UNn; z8zzcB^OC>B+MdS)FXY*2U(2IN9jta2)H3<KxXU%=6}Z~-__pW8KxtEl?|ao>a!-5S z>e{S0M|+;^nuR|+5JO&t=rRnD{*)@fU|+sSj8SGYddh3`({bhVea09IZla{f_!E;V zwyreBpTNH&<4?q8Y4Imo1tq%KPe<}J-uu}K3MsdKsGGg^oCZRx+NSB(BjP)GtL>(m z|GJqR3TY|5Od-YYVVN`a(C>1Jn;n5YR|uLF$<2y+!)4S)`&`m0`Ddz29PHKA{h?)U zw*1NSS~%B;6_nZRQP1OXgJGhlo8|bN+H9Li>Bg)sD+vZ3bKO!_-b!Kl^9RNmt({|1 z+vOp2zZd6sJ6v_gz1)XquLlh`{&I6KX-a}2c@mr$8#Zy~y=HluayedsRvdN+Gm8Ce z#tZzA08m>!tRzpf!uSL}9Qt^lHVlJ5c#7K6P~4BU38(#qUH-yO)s@~*81ff0z)n2S zGtYW`pTna*V9z+WK0()ztF=fdS#8piPBjLzAggmz0;6HC#GBlVf;7ddP7lOnhFt7B z-=(ZznR{wshTv)sXC;dX#MfemP-_9aD9Y-Tnnok(x-Cs*Rv~`^M(5_Nqt!RgD0C>3 zYO|+hE8}acroj$A7Jgt0Pk|p`sfLkq-rE-AZH<8;cz4BktCLM~N~3jJ_EqwN>}zEw zD(6&ZQ1ZP*&C1`&Iw(DgHW<+AWbPP&EyH6ye~g)}RA=rnwi);#HX>gkZP_jDbcV8a zqrpUBm-0tp^$;j*Z~`Y46gu<3>_%t*bn7&Dqh#W+0UoDq`n+jod^4`G&^~?9v>0e0 za2cWj9^}k$1^L?iyt#mrN4onlc%+gvqp%ZrH<+T=KO{AkJ_pXzY9T8rZ?DxBt(t2G z=El-CNCF{kzWv3g{mxEdw4oNH`wJOz{Q6wq3v<05=GtE!9AvtSaK15Zw@tk*#b4SL zNas_Y=v|j)(&rq$W%qoCr-pNOsYkQUNKKnj4!_uv+1%u|;(ZC)n38q4dO1z)Vm`I= z`PAm{shzP^o7!D5z{7f5VzTx=bQ?~ZGKVHina(Hc#>{48t-!d<<{3^~&E<`$)70wI zGgGIl)j|2XoGhoU>OW}a;_S_zn+q^KvW~RJodfaOd1<_I`xhP$wacT{q@&<u!B9OO z8cO|uRWDCb=Q}cvTFUK#c^p+Y5~?!P0^5v&6nRKpH|A?xWAPWHs0G#;1<A%&$!b9| zV04dKZs*N>iW0aN?L1`SBR_$MMiY=;eKYWM1FY6N#@aPkj~s7sn6y!XzeDN1DG4?Q zG)G@X1s<LR+sIunb489a1fb6-cOdM^q16ud<eg}Gh1uvcmN=SH&1xJ_62??Q6Er!Q zeYzD`W<VZt%{iQFz68Un0Rar>>&U>*cW|Ebg_uY;pVq&GInRwTk(}qte+hG*KZuFs zJk`I1FNsTHA}@(Q*2<PkzD#2oaG*t6*=>^Va$^~Aq0_W7m*nd)x+(!DdZkw8lzd-M z_Lwe{l8S~S`2RO%19s~vJU9@7)Nmk?w(a2`qx}fZ5}rOCmHh2-;6+pkFoJ$(I1xlc zSBCCI2_8#Y+0R9D>U?{KvlET7JJsSYqKXF-kvw9m?WjKd5&ZGTw1B0tz^tQsC<=JG z0nL}01<qm7Wz!Ay7TEU@UUTK_%E@m`1~`s%>+p`{kll4agBRCl$M%HCxw`yFc&;`_ z-4c2ZYjdSk8RzNbVf}`%$~Z@R59>FCMaKDg^RRwHm};DxUmn(P2&u+-@gCOarM?0s zH`SqRCBfU1AU(1$L9^pQm1)Om8{%e;avBgZs?xk{*)p27{XrcIqY?-URez4a!do_a zJO0Is&Dx5xfwKlPB|Y*dn^?%ecr-3G<0Ms})a?8?Wl`;Vn4Q_R>tS}L>+}?!pQ&NU z9^x?U+804jSJ;potR2Is!8wvI3H=5J5@z6>-q0<)p(po5H1ttCyd5yMF=A|0r7*T) z*z93!xI^f}1B&d37sErtn?v#8XfSQ@JQ~c-cp_Qpk@v9=kE3xR;b2`n5h~z-+*($} zYi=#K#~apG7#9=5Ls%0}L)h}6HiRS`LJ~CyI7p5kbaDRktlq#)yn&zXj%Z+CoMCMZ zkEgX2huc_z*|?cK9f$qgpp4?5CXft5J4`wn;!rwhB(EQb`$hYD5>k&K@ry3CKS5G^ zG%$Mj;|QVsND;L$iM&r<`gMpOyPfEn6D71yc~TeJ7dRS+)t<jWnTa+|%G7~E`wNQZ zAAbt&Z12J)t@iwEWs#e`@IW6PqMX&dx)$b49(}=&-A{25yi~s)T4*Xh4)1=A4OYg| zeKA6$|NSSzBK`mQl|iIG<xx$fAE&oBQEzV<ws%FW!GuWijfh2UOK?3g`yKJIC?VpK zoBT#{NmKW?IlE!{g6!lg;*vjt+c6|nnwtuPVb|>9uCNnZcv6wh$ua;5qb`>ARgE0# z?~SEkNA=&w_esEl=EAXig*bMHXAhN=0PG*UBD|3U!@};$x$^=RHMc+mBkZ0$7!0BL zj*dxIv62)@;pm`<${dLZP9N?u09lT?!P&3r3Od=6r*#|3Dmd;a=raF^O$`^_2}O<0 zJ|ysOP?YcN&xS)}vpH)2-yh!p{}#Rf?+c&RZBbI9FZPAc>fc2PbX)g@&+1L4$g}$8 zefn8&zws=1bf10}lo`*0wfl5wQT`xXz^QNarFesdLO%}>`+oE@-9L1HC=@7c<ct1u zQ}{HM=`{V(AbV7OxcviM6hB<wV&ciLvr{wOT#15A6t1QW5UwufAh_8zYdJ|zjiFs$ zdgK9k=-7_|H|8kU4>CS$xc?=*|2JA;y*wB~lSe+AgKk=fvB~jD1~oaV(z^ZVN(yT6 z;u$SjY(vOQ?Ztcs?cJ;$GNUSEwx8ft*N3Yfp{n8LS?PQ5kxBdLIw9P;;f-vxulQOA z86%*;8ChFpi!t%2bm-5youBBE?|nMk`(Ye!_iIRv8pjZ`SRl*I(YtU*r{2$0-ts3O z>z3VHadNgLMKmVOYvB%@9dBzAx>GRJj(Y7c`<=raf%RNHh>t&_#})Ya9eS+7#}(W@ z5+4ic@d!L>Grj6@ZjG(8DB<n{bE&rVF8DB+9&_+9fga_%!fm8!ZRo<CFuB#F!;a<) z$psw?&!C=eoDvIkRCS9Q*Pg#T))3@Vw{_+mJ<30aX^eaTrK3;1i($pOP;-aUzrY;d zA^8D#KlfQ3iOK{`tT`6iH?|lpQN@N1$!H&C`9FTHF2;OLg)qeq;qD#`$+6yGk}?CX zb0TzWlANgKU^vk;YVM>#gtbfAk!1#9ZP>9Vw7_O_{HG`0(bO03_+Grt;e!A2Lh+6g z_`S|-b9Bbo9CP9Mbezp`FZ@=)e;eVyx8c9>CYz%fe)qzEk@mPe1lVdb+12AwvWTMO zmnQSn@-=s(m`lD>O@yJ9=qg+^4pJ95SOM~vi_=4joeVC?WhQi^-)Up}C!Xi=e%4=E zUIG(~XhU(OZnn-ZzV3ALlL`D#!}ERUo+96aDPZOA!NP-X%e@aJo8;Tru~O<xJxsw! zu`Bfec4fJl+;O-E(eAr6cO0OP$A}8IE~O+^dWTCKm|$7yWmk|doQ?FP&vc@(i9A0% zb2q`v$(MP9W;rR6FtKpNpi+55w2u7cqQ{HN*I&8oQu6iU@zL`2us!V{`M;Udgqa;v zJuG!J&!A}aE4`SMf}0f-u@C+w!nh50v#n##b1A20`Vhis!Zm>V#CEUdKE;!zKFDqz z5v?TKMoO|F?4!$o6>2~&nQF;uF$x?F!h3`SqflJo=B2txk4^7hJ-3Y{i$T?CKl75R zpuLvGpJ!E_xMFO6FDmE*l8e>eL~!#L>Rz_`B@sStR1xcH><hUEX`9-J_0P8k>@IfT z87?fEZ}m@8KT#Ju*yNJ_kf(@!>=n6*lT9^FZ?(fD&ryqDVaU^I3EYHKzYMCXx2CH> z$~Kv--s=e6m~pS2eKsC2UX<?k5KXgpOR$gRc5k|d$X27@J<Jz-qQ57k7TU<}q8VT; zh66VFUtFH7STKhOUxu*%#YK5vIFtRe{rOfmn|c!Jm)W>4;!rKpv6VYE{?pHW|5||> z2hs~m8PLCnZSD}bw3L^&0zn<YSchwE9`;LrpHVQa<zKaVfHv=9KV;lF3T?oayV;L^ z)vu@cT+AGo4bZQy`xHpW#(q8w7F2VxcijpU=p6k`f2iWIp|~d0oE5~w7qP4TLKH8Q zxJ4+l|9mP>Bp-AeT`>>A3?@GevruX$yJ#*fSI;ypHb2%Fmyf~LD{3zv=E(S(jpkN! zIhHn;h(xNd6}fC1R#HFC_=u7qHOxyyf!7)JaHA!U0=9qFR1?Aw!SF{=-K&1n(h&pn zy4U-q<;;s}buUnqf|rj3V6+Sx^)@Y;5EQlz&`67Xz?sL`!@WHrk;N3v$TY!zy!JU! zM4~z-OaoKC#4X1r!jpvL1pgSF1Ws+l>r(Gv_Kq;SBg1`V^z-nGsN%4qtFeb2JwbC1 z-+I{78#yVpmFw}bpU12lKtKMW_%M*Zw0M(~=$MhOQSW!a&loPF^SD^YqncBML(R8( z+faMSxKDEVp!sf`HaFROQ{Lurp<7(+=b@11SCQE~JwKsL+T7e^b)vIWX=_9qgkQB3 z$n}_rd5N&`n3ryKO&Z2!C&<Qd`x1a}fev3@7(VsZ6m+YElU}_MzL~GKXPuKTS3`{{ zP4}CnE$)!CWpBnu%4p0M7APy<YSmI+!LwaYe^uD)ZLy*wB($OI0I+DUxkg=+8iAqq zO&SCv!w{5}hx2H`bBy+Ec&+CnvW4>zK?4QygaSF15Db&9<|l{lw}n>Q*omJKqwHdz zP}&N68CP#XseBdIf-3K6Rnn=74Ry%g6P6sP%AOZxqUukzstb74vPgKO`uAhV-0!Jw z*nM`Q=9l7|FP`ArQ!{OWpMC+jDU_foKRpmHV!Gq2<OY$A3AW@R%h<Vf+=ObEx}nRM zEr2U?H=GviCwfJ-^Mje{`8P0;j*4jl_p)R?=sb@qzd_fd>WQFWYfA-kP6F6BZ5K&B z6@xRlT9(qDpBz<l)u1(>c`Ka9z)*SG;FV7h7;g;(BYyDur>Opkf%QMxHdy_9Tl<Dn zqH=i&icnl^-y*UnXv#0pWAAfic>W6h*BvH<y-WVeFw4%LbZJ38*BozHB~C%k0`j6& z<WGG6J?;5iSDepv#Ug0`hTQ`s4(%I`>K`xXFM@iJNmFQV&@{<3?>Ri_1TV_rsV6qv zLG}jnsL;)b1Q*-6f)LYA1-!~iUS&k3$;F=4idSlxWCzQ)trpvW`$y9pT;cY!EjjWP zYK*rdr#**&^){l_Mo#-&8UH%lk|tk`#cAz1gi|%9eeP-w<sISbY4v;7kMg$Ewm)na z7_6iBwVZ<KE&lIZ3l_o_5>wZKPwfvM)G(7%FlCs@!9T+y{Oq9M!_T&ufopg;O|-oL z%hJM4!b@5E5}u)H_!r;X4DW69-Ue-1<wOp()!SjkYH5aQX;du@KL<8Xe-F>_J`Ewh zM?-!K#g8n)9AtJ3Yv*Ra!qchRhLgZ)4k&t|hy5d6Q##Lbx!Du4aNDz8K=mDG(0XSy z^oi)0aM6M_GKsv$<!j)UW>Uu1W&yvZ*Kc(dv7U|L`f%p%z^G|8csAnJEf$HA;oV7t zkVpCOmaxQ?wFx&kjN~^#49?A#*6P83Bl0nc{hDvk?7^;{5S(dovR&xwv!`G@RX4lu z3+>GN7&ta{H`*N}124+<=)1RQk4@{+kM~7qjWz;sy2BT4mfsf&xdld9$5AmPyBLKS z)kOzW|BybI==?xM?42`u|5g9)AzcKzt65;!Zgw7}{x>6682UKc?ye?Yx4X-n!JYQA zO!8#b2Hy;<?b2#{)GV@HQ9IAPRIU~~)V+wD6u=MreIG|oNthqt_8jZEJ%^hm0<du7 zIw_skSXVjSKN}dS*HdF)Q?gAN9phldb$y&YmfURp@bh6?4&X{X%(F&>xm8BE+3ipa z`+toHa)xX(ke$31nulpSpikRyf-E`8-Xq%H#LX(dA^7qP@cmFNboi5CukqJd{flkv zpT|QwbjOCB*Q{s+bldJTK(}KULf2Lu3Eju{BXr3ex>P_NlY4dOFc}J7cj4M|P#?EZ z-w!+kze#XPmPfi-Y!E{j!M)}YMeCf?HxTmosWXSVztSuwDPDBO<CPC+FU8H?J_iI# zmNx9O3Fo=^EZpMd&>}XLjDFvU+bum>gVF0t@TQq=cGo#{PJ-GVwss`9-9Zj}R3!$E z@ZGC{EqPdjgHT$ob@z(Gu|)$QY~}O*$_G6kfc>=ljv>93Q2#b^YNo$nc8;AzFxaZ0 z=e2bzPsC{>UfxK8->lX^f(86viPIo&24*l>;YdB8BlV5*Vg^g1?i(B)<pS{B%HcU; z55u!WEljR7A;CESt}-IIRYqv;mUNoq&}@(qniLLA8X$?K8=z604o*<XoS@1L3F_RH zR<`A-Sd(^(jN!qtVWLL72wR3fPS|CA7`=bW!$P-&Mlh%YYoLK-?}DD-{(y%<WhgWy zG~z9&5QPt3Zo|?OQKbk^DjOdO58OSQp`KvlE(nhU>K!3)7KOnvlqW*@LEHuNQ_3Rq z{}DX)P(g|k4=34&5isF>#ycw&v;DdyA97NaDa`kz4j@lx1w7y5s6-e|+w5VnaVEb1 zM9*c84$L~qWGD{ZTniVt(1=%{5)Y(`j2xSYVnOm0{S^wVY;63K1V0aBw2;lfPqjAV zcXl2nX;3RN^smd9A7uIyaGy7QXP6^2MU4v`Y}$x6hc1>ot{=9ZIUBJtM`kE6SH1al z=$S{naQW9+Lm$I%cfczbJspQ9j|SrhI1r_`(p0f>tj)n*ZN*mXb?sHy;ma{bh_(_$ ziR?xwij^tJT*cA50GeqeS`ZRCF^lL?hS&^^*otzBoAKE&bwAlaLw_D$yZC%X%HZ4; zR_L5ro(Pjj2}4_sNWsTW#5`aLG1~Mx0sW16fOJFvzRnZ|oX~g+0Z!J7));QRc;u^C z_&4dXev!PYHS+##18SefsU3fDS*UBRO&j=3yfd~x1beD4*5qM-@DV0q>*}}#kjl`J z)<_trkvl}XQPk|yDHBuPTI2@0Ncsf~S~za~kX>aSKydo7e}kz@_^^9SgUyu>Dnt)i zqnm`WNH_65PB+bECFQL~$|>?ccuC4B(&%PQ3yoH7$5s$up=%K0@cLyXCT&_W_i!ks z%`Iw6tDaBd<}{#%sP!ABhv%s@YWW&A2=A<9T)RqfMG8^f@1Yp|cE*QBoPx&}ILz4n z3)nY%<f;Bpdu+0n-CX;8B*3v7Dm?}p<HzEqd<NjaSnGQLy1PlS62osp_PTZV{9)%; zpDPx%pbAidvbJTK=vheKNCwS=&xG#3Cv^YnrR<<2yqYc;g$6h0OSGo_pFPZ58!UhF z*8uQ{0V4C|e)n?VJz#GDMlv!rfMuB>N)DSKX~ObxBGiYTF>V#H=ZOZ02g<8_d*o5x zZCdBsc;{2wbC>^s^rUuI#g6Yp=O!>${s18mf#2D0lE}VT<XgGGc&6ZZ3LVhm((s6u zid+ZFDlOpwd6GD){_pLXBif6PXiuCkY7X9eV$~dLX)Dj|8hQTc<*An_PaCv+xLSaU zu_2kw-t`mA(&lDfOD`YB%M&x3XXH+jekO`P9JG8&M7c+(Ce-;@Pj;)TQ7(8Hm*077 zNZCe7tIw#bCqc<r??Y)O<yJSV{eOv(dHAwJ0DwbFwS5nKRMnO6OfpFZ7?}wK7$88z zK?B4RNtDEi7)WL&N)jds%wQqGR>U!j0`eXNNdoR<kjL#%TidR?wbgBH*KT!1i-K9I z!5|3*1<@j)Yw0fPje{CBhDiv_ch0%*&7UMx`+fVt@8!L@@4ox@+;h)4_x$no0owa+ zVP6D3MV7LdwCDvrj{M3d;FspXTQ8l%EzH4e4LLg5T*r>J+5iYv)^`0IXw^8H9qH9` zVG4OAgyQBF($<4{sm%x+mPs5<A+Vc$I{7O9D;Xks#z{&t!P8NCGQ!hqdJ+EJ+_I01 zc@g)vJd4}8(8o~K%S8m$8nw+EjeOaSeaQbRrM4{Q%!ZqdIdkBa&78S#%V8uVfu~&N zwAN?9LxD=XXlFDTiW3bcid&2Bq9b&qpINERqBw1EgSXjmvntLUxMeCRqqAixR4P2# z6sJ`cGJ8EyS)8!15F$Cg`hk9xL-#jW4UHM~22}LSO&W**IX&@CBqc5Wt-yerYWS>x zc1Y9V5|Ke&w5H*E>@y6D;zHdb4?S5rTvQ={bmm3UU~kUWHv=1FSWhG={@nUSWTTC@ zuOfyuvN2cns|x)>2DaJy&7DN^L$+NQt4O20Zod7uQGr^Vq(5OOuE5_5X+s*UI`}x1 zk#x`NMxJGEBW%hj_y~J>?__L!2J0SV&!$DGOw_kV_%or9+e1=rFGVyxMWLPmT;y~Q z-#+!SsuB?xhi@rHspN0S*30+%BT4c!sJEk-29j+sLVh6C)X17pMySf;<{KbMJ13}w z0z67Xc4UK*FOQ{5<EuQrWdK2~_lN_!Y5hWjr39856&5l<Ni$<#m|IYX!M_ETMyh`c zY+(&}1S~(`-<q2wuVMau0&X*c0E_O(ru@jJ;u>DqdQoKnYa)^j*thVCJ`&TpN=cJ@ zYne{Y72nRrZ}aI~fVr}jO=Tq6D{}J}H)|61RR5cLctKJboHyvg<JbkC=)#IVq0=BN zSQ2C1#p63UiG=GY2!DAR0Y}XLt}6fjnB<G6$mkun{9@pXSd-No!#}W=*Gv_<n^vHy z))sC@F`v2R_k^WPRTz(o+GC`HJ%2b!-ZESvo2JAHnI#I5>gjZ06)RqXt}h{@uN&zs zEer*fx20GoFNArVKOB?-Tld4w)H9`|nDSRaDPo-7^x0OWTlk!?2n-l^>WKUbB5c(X z0H^#WM0i^f;pGUe1B=JEVih_ToU<|NEzsYTkt9uJn^v`ECaI_9t5%U?+%sM}15`Gx z3OWYd!0BxEBdgl+@FVIL&mP7xCTkYGJO%hq=E%TNsvQ8%*bO+n#zQle6SBbwngiQu zbgz^vH@J9B6`w)=AZ@JE|LP+|QlxdbRtftN>019*pH9jm<%LP=mLa8Axr44XZhrJn z#3x_vS~bXnY_BvYc8IC^yad?$!75Fk<`_TQi$atv9wrxLmPE&xgYk>Gg+gysQt-N# zD5w#njgCRb`kYWY!cBQxQf{z$jhFx9KV2f<t+;C?E6!E8VM(`;TEIN!#7W7ep3SNP zNJu#<y5(H8QUe5`1mx>PK)AM7jSxAUJVa~nF9@lVTd^OL_j6VIM4k#Qn1p2ptL}vo zb$3IF?|dCCk^KxiR)s+WMtIekH2M3J<au6o#+)$lfB2oM$r<a+cc?Sjcw~wlndV=; zO21MZinZP=T3>{9`C@g&x0klNxb^#802J1gffCjFWOd~|J1M&I%z*$o77$Aq<BE&D zeJ@4ZTcWw&!j-sx$V!A6dT^NHe>w60&%%C59=fpA`IK-(JUv4e_R#qpON308&MTE7 zJtLcm_B;|Ggrzu*c;HmLVjDU0G%_+}RTeHI(uXwoSF$%-_dspPiGBr;zcGVX-q0sv z11e<j`d=L`IwHBST^ubW=_FW(E68|Rl;>K;Dy^_4r)?|Lu>(@tBXRcXH>?xRyIe&f z_^L>pEoLgNY)yDSM(pu!#pUKbKc*d10KVPd0DH=fV(`90gC||*=2=@W3!N>4vY?Eh z3UZm_y0P|4bkkegKKyw7n@&)L(lrE^Q$$_k2{tWm0^(OhU~pJwqFWP09*e)B2)G)h ztVk0=A^9fV3e=9SxsV~<oX2j<fm@FFU<Q4l4obX_k11;}i7ptG1x0KZ5j%(RTpqs~ z;cqC{!SX39uS@ioWKp9IDYe}=;nK~l9RPA<UPNgc=t7V1+w8hTdqX@)dH#Okp;@&F z3wI&-2OT}`8V`T5DQZ1wZb?V=`CD~j0r|@Q$pUDqhmTpOTCoGmkNkn}C=7DzHAwqC z{3Uv@@^xcEJtiFbk~|KOfHM9#D6h?{IAYH8vDxO9r&C3PN5=eXP<!?FtNu?yspujU zRV>UcTT%s(!=^8}U=5Yj@H@O(0H{0~2NQ;I?qLU%3S;Q|SaAGt(lhrVmQ}EAM$E7P z3Ub#(Hs-^8cWl?TFj(tuzJQ!SW&loph0>u=)COB6{IVjRcN{>^O`a@PF%URm4xA9q z*aE0ky6x5mb6_?;Y}Maq4qQ!7No&l33G|eFziOYe)v&=FNQS3^#VO_h`Y9-^w8)c% zJKn0Qs(L+8=p7H@mTQgd!bElo`*cSQzxunEV>SRn7r#Vcp`sdJ?&=s03g!3<Fo*)G zq+8i-OW>AX<KxFHl;bVZ>NmOh0Uwn|0eSNIqu2J)c4UIwH_$SfP0M74fX%72Osq9k zgc<Y2a=DduB`Yi!Z+w)LL>REw8qF<l8IXe-<R=2haF<><wEH=Fjx2;RY!ZPHU<^0V z6OQ4%^n_!$lAdr3G1^5z6^tROQWknF@@--atE;PN4E>vd7^VS)777>ovsyD(6T9X5 zjQo_TZH&_UMzvj#8v$q%8ZMN>7p+It_%0YZ)e)wHJ30@Ryy)As8u*iCfSGEIF$;|v zuW#LI^z(TaeE0O{!es_c%S3qPd&^>JT_p--RH&GdIrq?vgpyH#hMeK&^NY4VjQ<pC zF01H9YW&;J(m(&{Tg(#l%ii8KHCfCCf-3O9`M3wpda#e^KN`Zx(2mx_#6$TW5rg^Q zXQFp5=FDfy@QC+jR)UB-2iO%aKk^S6jhTr7;VZ)SPH7{M?UD6H{+#ws{vKP7d+Z@r zOCgFX^HJL4<^NIG7eiB|GTLm>$(s=&$Qw|<6xugwZlBm@DC{M=U;&<2r!-^$CUsea z8t|u~2cTxCvUL`Xy4QCQ8qZ(-R4^N=#;F=<Gw_*S)1M$4Ftqr~JJEFyS(Rc(W&#Fx zD;3?`T&jA5kWyh*l(H;n1k_3Tlnoh>85=76<KSGGTaN2ADa4@|@krjhHs?U%^J))8 zfHDEksvHbKdiTZzkVZh83WETX>=kq6=0S>9p8<2-MO$l)I*E6`a!I%`wa`3DSE-AU z)#7en;}r;zintw$fbXNL)!Ov|5iKH174Va>I?&TX?{*Zi7|j79w4BH%j`la-nIw<H z`S=wL>?slB2t6CBtjC^vHLxfIV6WHL@VR69)D()`bq*KaWMRtST|_L17kXnPkp9`P zFGWHwwbwlRH$)tJNp+pZgF3PvGfh|Xyz}qs`I$7<8<*!7PZOyxd`(Y{^EEw2Y(W~v z828CHdNz#Pub0FJ<MgsVW$81hzt_~JRP1J(U`O5~1T3gLaSbcZ#>G*us{%xF{Vjsv zv?#R)VLg;E_y9g8X%RU|Js8TO542xn#CKm8(ZPh`ILJ;x@j@TT+)|m00F|w0%X5_4 z{pNt5NXA^W(<1-eZT<!XOZ29W*}spkx8Q37zFub(bk0Pf<}oI+p(wJU09Lh|2Sk1L zc5~olv@2JOe3Rnx)rx#52*I!jY*7Iqt^z?9#qa;*|7`W8i0{-dEfzQ5xaLxXzQ1pc zV3Mp##lFxiw#bOCl7NIjnx{~gNN*mvTXhz@j{;YUfVp&*UdIZ6nq9_Du?RcBF4+4d z%g)ikjryIIoBt%wDJH*GwfiB<jZEI>iNlF)Y`F~v4w;K{q#4r|Dq&lU{&u8}Qy8@A zIrtFz3*WU)LSU_E1D+DlJO6bV!E9(Zd?cXg7(ezg&`n7!%xVwPj2y&49~&L?izE&z zKvwl-q{7%q`&&}_&ZLDqC*IsHXDn!WPyP}=bqT#2`Ib;M{0#KU(_vs*@eBK(q`$%d zk0FKHos;0Jw1x0hcc`=XVO*sK$Zu|W6eUA1i^;M;<2^LgFWjt7sf4`B1NC!*j!rke z;$c&t0IvPGqCX?v(S#$6DuS#KhGHu_t=Y$S01`m$zry&2VSH0@e9>=MmGBz|4aM=3 zyiDE?CEL3tvwee+PIa{5#<9jB34DqgHcfl<YM{nV0uJRo0rKv+8F1_m1#w84+9L99 zD489LY{+FN`Rl|$8ACr!SS;gF|6q4Se#XrY77n*y0>=iBgHS_+&iKCYU#v}^<)gR& zp+@!P(P8{C7&VsTizHN*5gM@PlA`SQ=_Iis)UdjIVBQ*XF)T1mht=O;)5$mZ8?sT! z31#6k=(X^}m2nT?#5zGYlsNmv-bI44AW*el5C33&e}s-q0J#C8=ez7;|I8Gw-EHd8 zd<=zY`0d6I<D4ZLSs6^PZ1TGKr?(MO4yC~0l%Dp#VimfDM!h(hlBNkB&H7M7W+bB1 zHKnd*#hIa$efVRw;wpePwJsrDf1nE{__rAJ-WoZL{|t%^rSRumeZuVtZ0FNeF@c<l z9hSzT=ov#aqEgepkzCWrmSW79YGMbH*zE?{g(PtBLFB&*w-q$V+1ncQ_sP?@H6*Q( zGq*J)-;Zvf3>#4FVr0irocHXPqNFso*x>I#%A=h%4Zv$JZW6bykCGd(d%Z`y3GO-k z+Vy=x4;}`P)#5gA9b~!A?XBU<C-;$Bi;>78VBia2l31Ak;X|y+N-AA+a55S(RVqoX zl9eqs(U}LLosn=H?}E+%LTAU(-VS-HwBS}FTP$L_$RCDEkn0p3F2D|3sl#Ka!zSu* zDt1^hYlZyri^2UpNK|9lL$7E~gybUJRZ$|<_TTEByj5d+Hfz=}kj2Z7pB4<|cKq~4 z_!Rl%!4Nel=wTfH-9nmU&G{%7AyeoAVX-{B%ydQ9sv^BW^Q$_wR`rwPiw8m*k-$?0 z2|PiF1HFRwt$0h5n|b(K)k3YPuC{&1dZkTzfbEsYldzP|oYu$>(Oye=7?VO*)fYwW zYshS5yl=%l7=xg^P}S^G4S(v3P+Q=)Zvb+rB^AF{N!G!Z4wzfe{B@^klK-NyX{HwO zNw1Tp)C8S5)oxs`pZzXHCpZlF;E=(p3vKaVOx`+sTi<jkeOupkk_mmAWo~Pnq`z7k zS5qC?i&P%(2%wSv0B$#nb|ww-{V~sfv8ZXTaFs^iT}!@o?5CSwMSqfp^g;R47TAw8 z^3bpH+B%$uWTBq8BFlnwU2aV^UtTA6StsJv>8<PTA=LQw*+|SBC}!ydx%{sZ&Vb3r zIC#<x8m1VDm}0f!EC@|iv4yih8<b+5G=f|KXDZHo|1D?x@wEN>JQwXGZXu0_ccTgo zKe<Q>4SPO_L{jhw0(dNG9#4U+(M;nhlZWYq4dEfRaeSNhjrNLS#SO6+p_4{-+ROS` zhyC&f(@snAw*G6SQT9U*^w0rCZF|IzRQc=+8nNyH#PI#Q5Zp2Wq0m9b^62@5|9p8I zeaLDp>@~L3h#qHv-l#As6$kSUD@*q%wfmHc{a!#46RK4r_K7trj}DXxykoC4s!jru z$$r)v+0}pwO1Z!~DZ5DfW6F^fU5Cq%Bn0&6qu7-J>qK#7!Pcp`Y?>$zcG9-c44__+ zzLLlfe}X&->8tOpP~~|>;Ln6zWs0&nCo~25tzel|8jbM>^y)A9Yo)=exH8r0Gq*g3 zf};Ci$OkFms1x|r`*9PvmX{9BXr_!_b*4fU{59=^Xj-Ax8{!17M>B7IXe2&goh%qB z_7*hV&AqeZ*vgb-m91P%`_OGdCD}L|D1)U3fvc@Jh`q<*KRZ<&eq}LANp7e31DmZn z=E_nQWGS1G<6LZEw^?EH{5UilzJy%Yv3B+rlz{Ssi^7S6%R<a5!1&@U;1hvwgsg&9 zT&34o#qUNBtlj!3;o!hT3=G#|*K4dI`j>}(y;;NEmtu~c?_fX%R~#&`%Gp)%+})a& zH0CWz=FGoCP%<>hjo$@=`xNA^iSm?%^hqZ2d#&V!nzZw!&4NN?jy>*(+{WKdQi;TU zC>F1A4=ZB(;9062C`nbu7AIia7p&;C9{{S*kr*$hX}>OxUEM#JUH$osQEn7ZuV<gG zsp5O@7}5#p#b_tKj%Qlwcy=(;s?*0YtzS{=_Sm-<pi=fSSSZ^H?v>rJ^RAL_hn-g^ zmr|t*sZ!)*eaU@-=^4t&28#x9vPa2Rs3mll#>_7NnZ~G2WsZZhPt~|NI?SW)&}VM` z7<?0&qkYi-bM1q2?Ss98KG^%uBmn}7W@e%gPRzeo%)f8jJs2?W!MQ>Vs}Z`>yzzvt z@Mnz}5%vcmSw@Kh9!D4i=pvFqVJ*>fe-~vtQjF2P_IS#cIV>oCz6EVXVJ{OaoYk5n zE5O)GwEZ>sFRLRkiJd|sA4uRDzEGzEWH^)p`O&f8E0T&Y19U(Q_!75x+_JsOc2cGM z^mWo#1C&We+ZuLMRvJTd8A-shQ06R6LYeG{M0xuHuZABHhTcUOQn#+fT;2dp1jOdx z{{T->jCGS*Lp{)hHKBAU-h?a1$Q^TlKprIsdEPmvPg9pRw`?WY6npA7QQ!V1qYlV; zEW<WmklIaFoq5+oG=!OC50)HUZe)uF+*S2BkxE4mS1f(%aC!j<P!4|>EqZf9Ns1n4 z0Vr3=XkQve`I?Pz<{Y9aXA&89jWE#9M2VI(J|g$HtG!hO>gg|Oa>z)9Ro?FP#7H>) zQ{a|a1)ht*x0C#vflsIcKH>gbh);MJ*%*4u9N1xtSiS~1jn!t&K85nqENq#AqUOg) zC&8u@E=7QiAl$v`ZXv})B1FE{SNb>}a#;BF-e|xm)J(^mH%D_~DR^*eK~dxevpOpB z*w&xiLrjzI6fldb#k<3z(*O0Svto4no`F1}Gyv`6@W6j_nk0?DMeQONyG_~t4hxOH z3nfoJ|JJZh{=NopS4TE=Yry^UZ5nWwMCP&Mkxc{jx=;zhIOO6hE`^1_2!L`LWOy4m zCd|Sgy%3G(K$NH@WQ9BA@ODFn$R-THxAuaF*VU1+2!}4P7R@}b$R7Ob$-m7WJpaZ} z_COt;q45n!CHsD41CS+<C{z}!v?)#Jh0}p(um}tj;o&o?{!YSw$?Gw~|CF;o=JEeZ z=i@-2I)LMao@^_)20*WU4uRg|xqaeL3ehe9;AT}ui7|@x#eKu_6B@s>N3Zca<`#07 zz7-GKm#`*)9kK!6_Ej`Emh>GUOq41U{k7oV+cQv}UYw;Y%nG{n$}5PFRw~qYG~8ux zwju*kSKIaApE2NuA=w=G7mTm9m56n7Ac!^YGOEWbcGCP<nH_ZH*iXr`>D&ykT2APD zgAdHMREt@3k*;270o#r>7u!4K!WtDM!`oDCEa_T8hEuQ%lh6l@E9r)66(44^T_jJe zwFEOJKGeVMXOHPNW@=~3fT1kQu{&YWo!`GhE-YrZ+dDTkFzRp6WEH*>H{D}D-gsls zFakh78#WmcgOCE?0*(^JsH3v#9g^0I0aF%di*6*lvTGu;$;|_g6Q0-qk{TwO=gMAw z2p(`gsiaIFl{D!c)C#eX)7cN!X{gae6~P+1h|bo5OTpN-2ccPfmWLGI6fth10i;F| zo%bDIXa|^&BALW@6!cLMsI7+t--A%0m~fc+*qjfBFC1^wRsaxF)fJwIJHy-h?KX)8 z1wzH53N<Xoz)Fg&%i$O15ty%3H6uiFE<YPfM%yQ>@r}5gTLEcH?flG*(WJ!oK82bb ztj<W*hRykW!5q<A0|F@S$jTjA{}+uOt2TO}+7wNnW31ZhS#jwBoJeT)`1rik?lwOC z##q{L_+dUw5i|+79m5!Df^hn2fgc8WWF5d_ZP$VO`yw%&uoCDU&F;V7)TbF+MfKO% zRW0w0MLl$BBs5hLwyeL#G_=VaZ13tYYD6iphyK1KIj5so7*Q7sf7Qj3+iA3P6gNC_ zJKh>aBB`K<Ci(mH=0H286s)u3`=V|0jTWVBO^2@7hQEEs>1H^44c?48`en+Zo2C0& zyk)qr!`q$5v+-u_rdw9`OuX6Lv+<Ux%fVarZo1{5Eo?_|?(ysKSH5lz-iosp;jMHX z-BuMZ##@>ARernzZ|-fCcw6#hVJh5~wavrZ3cR5@GL6#}@b?UV^BN#0BRAqOdN>CE z%sUJdT3BJ)hozxcC+CvE3N`$_V}lsYbaI+euXpop!mz%b{DJw~GB9n8nl^NP-k_7m zH9B>$wXqd*VTdz}hOreli@0fHD}D)==*3y$CM@iWGsR7)`VK#~@pB6!EpiSTY4P1R zjx>Odo;*9?`26RagU077G6!|@BuKxbo!j34He8sHc3;Mnq4wI}W_-Q{?5X3U!ruSm z_#{GNoc%V8kNEX1$LHs73>hEY>A3Nkd=$o~<%;9u@#aPH+VXk<V~=I)QL)~@E~9fm z1G^!z0A1qDt|m|Gnmt5yG;Z-2eDb)x{IUPS9jA0<UHg?n97nU>M_G$kMy*2rcKw#W zRsUG6Q0q6=AI<vd`-AEi_UG(OUT@xsya=^|ym%SdacISQ11p44U=<laV58NADbb1p z%`nE)pap3)|1lL^7H{nREz7t3&GN^p<<A|qd|@myk2weHQwWVNHxG>@Dv?#9%0>!D zsa%{MYP;~4LjIqBgofT;R$^dwJg!MBu0$>FakaP&XcAQ(ttB9m{mnL=l#>@JY|d&P zFX9hZ+L-BO{(3S7`)<x^{5-PJrg8;M=&dH!mN-upe?i;C4H0n^mPj*;{yMzSVK)B? zT@H^BZFE}1Z=oI>R~5Se8}T0r2t4)K?2D*q9SCa|%o7?^!S)@Sr%D4$jW}(86TID3 z)qK|(0xz`OGke><GH=z@!JlHwYV*nBtoB&@ozb?IkBAN2wO%oD>FS_8k~Cz{klv4< zzPSD8K4>LP@o7!Z7Rx_xRHxrc@2<jA<jPEXejc|HtaqkbZ$@ms#(iVeTD-dYtpCOF zt2{mY__Yt3f2Y>hPf;m`82%LgSMtb~36+jQXC5aqgx@!(RZD3TDGB2zG#i=I4Nbqk zzPQ8b#$8cymdD(gIhVk@xvf4Q(c4G*BM}t3x7(fNTQif}6sH^Gkw-QziHk@sy#-%+ z>k9@4G*QcVxF10q3#l(a-u}WLQefcANkYCvDcS*KM#NdZT5;vF4rL`u%Gwj-t8DOZ z0dl{}lh<3A*L(}CSraSTO)i*RgYkfC(D_)*y2NSEYkYlWWP>R-9<cbe!FqHo4OU!8 z#u)snLXP=q6b(-3sge&}=C%UH9#IupXNa7@!LQ6fn=b$Sv2qGuK=VWS{PWXgs^$8z z>LeKluVvHV1k2!rd;#J0YmyRIcY?*Cm|ya?ROuEiEeo_YTgnt?86X$KL&9TB`#zj@ z`zf!v{8Z5J3#60WgD0<1Oy2E%+T=k-+N#mvrOpi#6@wWZbvaY}WI|uOhcI$+)=mZ} z?b`m(WMp5$%;F3>4TY(VH({WAqW~;pe5m`3)<>|+BfLF~&A_NQc+6!)UK3E_Xgpjg z+CeU&BB_J+ir9H0<gQ_7@W@9-nc@g4hvZ0$4Bo;~jW-92Mg$Fiq<%#<Bs5^WXuz9% zVYC5s(pExE*kWL#a5Hbdnr$(Xd}#vf<Y@*9h+|`;oT!x6VX%ME_z`R=fVfsF`D$yE zRljGoVF2(v|CUmnY;MgKRyj8Ts!~cySxqS(N8xeU5f48=q;Sk*946E9kAo6V;;0W5 zz<BUj?F$(A^#CK^B^Z&f_dQ9+j^$XpQdt&<3J^^!ZGBRVK=Fl01l1193!P<+w;ni~ z?5>I*sp(oiE98r8G7i=Dgo$&*=ZHkg1$dqU@KlN(ia5(u5{2e#MZ7*&UazwBX+?et zz~zK|6DvXVHiZ?N$Wvtm7(zYj`;+rg#qkuPH8Nr%QTyAss&Ta!qDUO^z5jAXlR+tc z@frBU37J1<i%PxFkntFf1DA=O!MGb)v5^(+2;EwrmAERV2@pTR^Ly1*Au6iZDq8xq zK;&s~q4AywyyOxdu};V%q5Vo4b37GFQ6{j3Cb9w~E(Ng6F7lwg7<Mb!<-crb8qwi0 zAtMt?RyLWK%S6i~w&XI&qET(nQ(ptJ>4=^&oS84$Q@F|0G%aX&ksv#MwxmN)02T{l zyUB>7GEvJGbUfpZY|7+s?If8^XbQU>Rqe;;oxuIll^LuyDCJ25;@s_X)Q+kcP+XS0 zH>iHTa(?{zMGeB+X>|93UNB(2m3oFB?fe~~InmKpJq?V}dUvP?jZ(1yF}kU6IW1qA z*QUYd4!Bb!t#w%_U8&4eoF?Wq22M1ugEr>D*g-<#@ZrjlZ_z5ay9WSFK(oJnfEiVX z7b{`6d#x!;9rCIKv6pmIlm?YR*Qv}+nURf|{8x%Fy+0Hm-U;@PFTJb}%_GshO1u3s zpa9{(ubrjYQ{^t$!R$_h{8#3(*qs*nbPZc+wAUGBCv#ctPOChhxiVl|u^*5|SGoD8 zw`%h9Yx7P7-fNz~Hf93E%>IJu?S|2E`a=H!gZ=HsFP3YSET?LRS^q9r|Jf)HmaihL z!(RiWtvE}W2XW453~TEqH6YlI+nFo#O1tXHx*_rta=oeg3v-yB)=Ngef`J_MWltx; z=19*;ex8KR_J-gm4BXo9Z*J7dH`H4?oDBv-O;TdWF=r!%Kie(vO*WdLP)sXlL!nb@ zBr2srY$lCSn5U1VBdk(l&PLcXm{U@k*R2ee>6J>UF2Vl8NGb?<?<o~wrFH=K|3fHS zrt{|}6A+tL)@+0QO0Gj$^W$_hY|xtnA=0;<mQFISh4VF!?=5d*dMPv(EwE?B(oqxn zKXINsPz^sY3(dDD&m^%}ms34Dn;$J5b@O}&eWLVpw`hQ{Ia>1ZXxiPr9WPic9$x9y z<mVUxcLZ!rk9+WJiyh;C*dogRKxl1x-TX(<&nLthl|zl%o=xS%X1(j*RAa{{bXxO% zDm1KHk3wtgf08Dnlo1cUV!DwVNH>zz4n$i#HCp9&*~WZ;$QriMC>Slo?+)KPm~owv ze_f<yya7EHc=#SVqC%{kcLFv8H!l%_B7ay<kZ&$M1<l8kssWV$b)!aX@nyu>tbIs) zbQ5U}=k>BP@J-<+soBk3jf$fO@tuyn&B_e+BiJEnCT!I+VjY^GbqG)bu>oz;5}^NU zsL~#%zYXIy**8gzFAo#dt=hNZQ%hV_H~f_t)h(9}cuGT+Y%yAm_}=%$+%(h(hS`?^ z>jU|Tt^orE98hDw{p@MNMIL_3cSNY@w#^GXd^epm8+_79wce;x3rvY}C-F`#o+XQu z(ylUneE3h~p7GGBKHV37#$u`ACySz9u!1G&p^5cIpXphA@ki}Nu*4`Ov357V_>vaU z@wOU1)u~0dg5TDc8=tdS_^js;;tZm#UB?g*@$7Bfz@HKF@SrLp_h^O{2mqn0JZMv+ zWkA&e4?lQ=_#TZ$0bKq(OE^G&g)~p)Q8j$*X=+C(DX&dS9f^ho3fT<S>(JE}|Lhqw z#Wr~OPj9~{*jAHHo~{}$$P>}x&k<H#GN!xv+Ws(=nTk}YBkWOk6h03c!{o4-_q-Ue z2xd`CuHoLHlRFdUlx#$_(2sO_rJzrDd8)vE$M`JZ2|c{0FPummR)k@zWbLpaCUq<% z$)|F=Q9C?}KY;3=cS)=yBYJzUH7N^$i7Hl-6mKzPpD%<|^KgwzBUHZ=p=@*_=d<05 z`U{^_YdFSSqb9w(M5u2<dC<Oo^k<JKC--5ru0l&X#kEdr=VA${=NY#tbO$P@k^G~& z)}aj}xs8M*)j29#Zh{tFg<7pZ0g?gBSJA-)EQ<pB<6Xx{xnBB+ZLlHc-bw1-h@iH? zlRzjNjQpvBC>F+ZF@cc)ul^vGPI^E<V{bHJIRzp<2fmoDqGb8*D6(IweFj;iN>Li1 zt@&EAG_PI<oF@#z&-)@;AdoYpsAy!z+!1-e_XrG~uLfqEFFQ{G6uQ(n&RFGhQ8fFT z_+8+GdC}GeMdoPL?b<78qq-TSi-{73MN?uGzk?M|!HWM9qKZSMuu(iJ<6(Xn6}(OS zqp;d&v^Njar}(9@9=`k<;FJGGe2F$xQHB*^#T@9oOs0z3bPs`j<`{tG?OSs1U>7t= zzR}R8(DYcI>|yd;#?>(fO_N+U7~*+V)x58R1c$>jKtjI|SY&@Qtbih4oA8Zmq+9MF zDx&~8Jf_uMFZjPtgdn80y~CL!j8gNNC)a+wF&F8L{Gg#2S)$0sf;f6nsYC;e{g5xX zFakM(h6Ct;!<pkHJCEifpv2IVjNL4cDzu_AZ1&o6bW?261x?k=S)gQg28%kSr9f1X zs^EmdQS9ycs`?OGLQ!Dr5vn##D0gsPbG~}kEZ$p?gLR>U9Y`Szfy#;)Y-k$Oq1vId zh!q>i8%eIxoFho3T;#D;o(1?5)jBuvb=-Kfw><2D+(7Tv5giL@)au$R6-;POXA290 zrj0>Er@xIW3v*z>iyR`ox3trs59W8GtapegB%{M=QPFN(y6UA^^$}jz9#2oMQRzva zA?7zJZl>1|J$a{?=~Ev^=}BLqbCsYceS)4`6Gu<35%lCL=3GPc<SM24PB99r>IT^p zv(w1O)(&`C$tu=Q`(1MdD_MhT7dm!~xefMrC6pzRV#dy-V6~o%P$n!;DGXdSti%+h zFdSh)UWDy(Pvd^1sfJP*_k1IT@#aB6Vcf+Q8PNJts*kO(NQup>F0v6SkpYQ$u)rQW zn7F{AWXH58RkGvIj5xBRaMs^VcHDGuSh6FMKz4Zf%KRAF;fj$RUhdRh1YJmWbhvrT ze?-X+FaNh&hLRnB_$`th!I^&_+2I{Tc2vwvAUo=&Cz2gr{`m24L3V6<N+mm{F1#Yy zF%Tm=!e7Lb9RpFaqb(cBjsXD-<p4bis8`H*JlPR9<1-Uy{I{<q&Un35g)~$r04@oz zjwpXn=}!&|PbdNRs3n&}$sT?a^`JaPy(}F->ZJpy7yWAU$psdr3hj@kY`ayL;Ouz* zoEYsgz?#s7F)Jxj^c@Sx4VAJ8@oNct07;l4I-j{R9W(v*C>`Tflg#CUj;RQ<x7ZQB z8@)zBJxBQJW)kp?R7&pDTD)kL@bgahsj#$(jw!hlo;32s5!Nz8T8TJc9sCMLGId`r ztc!N0FZPGWnIC34iZ;sE87=$vSEpOr_jT6e-*@Qm`E!tU-~04@j{csVf`7Z|dBunL zHcZb0^jG%}_}4^#t@PJMe{<<?5&i8Mg?~%w83~;BeQtVgd;v>ahR=`u8JbfI*IjVk z3)fn>WVp7#^&VUg!Syg)LAV};>!0Cz0<Pb{^?SIUhiflfe}t<YuETI0gA4HGL+8)K zrXCXk;(7K7;Lu*ZZ=%I=D3CD_iRjn`cG~Rt5(pnyix;mmKm0><Noo5<kz};QiRIp& zt*Y9h*FK&ln4zeU>_zph$9E_6sq3GR$M^Ue;W<dP_;@lNBWEl^td`Nm@F>yuBxYSh zk9+X(dq_PVhbMmE`o!WrTIJ{Q?XL&DEr?cbTm!{Sq7pOl(TpYL!xLXS=o^Dp;tG6Q zHR$a}v$PT$u^4nS58ZhjpK~I>Blz~?<MSf<96pbu<c#~^@m~<(`3msyhxEAWJ~aZD z$M*wx3^jUuyYVjhPThz8YH|`Qzc*TW7;{y6e75`H?u4q!;i2o_feeJ_b@=?t%UJDW z`2JdtuMO{0JwA^2@gARLE!;<YeEE1!_4t;o9W);;w~?pJZGR+4kSEpnjt|cAJ&{GE z9dcZRB>(Kh2Jf4xj^#S|n5PWt&cA4Hci`KP2YuV9y?qkj9v<|zPJO#?KfD#l>Uw;1 z`|vNHH5+jjnwaIif%4KhYIYX!uQytL2G<_AUWMx~aD4*T*Kmz}z-TFgYZL&u3+{Kr z<%esRn)Wa1{Wt2pL%pAX`x&_Y8!p`jqs0i91+GlEa^Wg~s~D~_xZH3(57#lcK7}hA zt{dRH=i%D_fQYdr{51ke)$7bO$|dBIxdz=amkdOWA<#!cHab>m&c;AOOHJgo8rHD6 zbg9wHPyZ#VDGSSL`Ed4O7+*VFgKPhc-JRQ1>+uGQst<ge%pz=ELGp!OCm`{gzcpP5 z>_Z}HSmN)n+Lz@vz5smb$~wiJyF74WYntjVaTxvCETG?1MnCT`P;pAdxxz)c=3N{; z6|{L2N4GbWD)cegmV#h@fg<<#`%=t7Mz*_Qw1(w@!)BrPn5sC=+tbVeF3zp(E~Cl{ z0x9mX*pEvyFk)FJb;I0(49d=t3wK&?K4K0$iyEIm5q`#MIa{2;HfGqrkg||H-JuhT zr|5ntW(zE<w!i~S?qQDZzkA%e6UPl@7;RQoan7m8Vd%AeL$3J;BS~+eqlB0z^<b(8 zw@k<RkP+JnkEuA~Fb4M1<{#+kSk%OtGgzGkh63$hZ^FQ=j)C6dOc;wDWVeXn%RcW@ zqp)&l*u5C;r-9&VT{bJ$h?z8Y9A2Ocn*mm4@J5O)0FE3g546?m%%zUANOO2mBqxXu zPyJZ8N_!lC`BDV(YW*#bIL>vwjqGae06rq;3U_v@>lHkXTa>%}O8U&W9x%WXb7nqm zl)X>urHM}`$>UVzMA^u<e-ZV#h3){P6#f+24iT?q#`6yY?E9n8a2g3iR_Q~P&3EBT zHyY9IAouZ>mGS=Lg?Qb6%TLH%ZVJyhN<lU`U>L0P#vPE(7Y|$_ojmjh@Y4gN>Ztlt z#PE0PC^%1jtc>GFhACszz$MkVrWhA{Cz{*A3XKLJ`29sRLiZocL`6x1O2UjF87%(D zYXhi!qOFYLuysa;<;TfiyL1EEN&xDJHfKSsIW=lynlD}wHYP}Jr;5X1Z+&*c8J)T1 zKgh&Twx}m@KGV8%3mwOKfR=P+@u#oVL?fd*(s0A*`VMZnnd^||WAQJ$@MSu_%%PX} z$G`jpU!o?SuZUh&#lH;U%Xjf*Ilat}e~I)BNq2n9=;eg?m!INGJZSg%=w<(mxR;;d zOI+i=b@cMTqA!gdX`jQ(&}v^Jy=jks(~WP+eLLvQ@8aKlfp6ye9-%isjDPbbzOniq zr#Eu+O;$(RSIOiylQ}YK$dkXz$Y;EntP@a@?&a3qq@e)QL+<cJ3<0l)cNgekVR!TJ zbND{v!UvOk>9nl2eWjR60S_1iVcdtL!bJXbRsWwbqo$5ho6zMfwGoTsrBzpp#u#3I zQ>IR;ih)nk;VAfcRPedAPk>LU4Ye|6uqJCDBI6zvEVpG;)wuc8(R$Gh*~lcD1$czf z&@zo`zYsznsIZ}BLVi=+LddFOo%~l}Y%-pcO@>lCp=AewA3Ud1heD(8d!=V1k_~v| z7v^AHMs~`6K^o!V*NB|>j!#g(x_DXI1`FuDl^Fj^U>~9XWWxAYIKD_-aun{pb4_&W zwD@4Yr)lb1#Tz_qyKrha|8|H5RD42(;rIul#ii{Nx|dWMzN(KeZ`gPc*ua;uBz6+E zrwr)w5QzrCgoRHPWueSSZLKL<@g^o`qQgXwmtUB!`7K(;-pxDA_dWywcrx!WJH?-Q zh@APqC!ytkhPQ?v5qViRg4cx)LdpI&BZFL14)HmQ5LhR|jMcW+MPV^f-+9vDV1+}K z!_@e3*#K)O@qz5~$vqPVcFQAldp*hb-F#24hE}KZ9rG}%Apa}eYJ9ubX>kQGtc!-? zG85GhGFs0<HW-O#{~XhbQPEuuA~}nya=?F(bt!@h2V_R<uy{${mjU<`8;SBhhgB2) zZ89k?EC0{W)rM`J#XrA^8dgRP3r8DP<K-XHX<LSXYaG3}5Enz@clvL!k^lBo*xHaq zsJA4@sU(N5JKm?cVPq^uPfSFIgFl8cq8`<YL7|&qic@&$Rj5-abiP)^h*<ltu*qII zMuZz)Um-?B$`c|MKr}`~(!7Ki5##XFAu%GJcml%!kYQuSO~b~BnDXkSh?h^E@xKux z;^FVb$B6Jh8Q&r;?!Z+~#NrNQuaCxvz<CpvV!q-nMvE_ZGyHMm(~}MG=T7+Z@-oQI zfyIoFs7}`e>AM^8CH#3APZ_v{BK%}`q}WvV{dsLeOuqQ!GiaA70APymI20pbk54}@ zgwgah>7=RhTL0k)pf|&)19j~z)gLxUR`XuZ+}_uURa{ip-g06y24iV2_L77I?U2nc zZQJvYP_`}bINVsJmA`;=COIZTi(<0Mz=zfT%DKhtz{<LIdLrKpD;d;f-s_zEbemkk znh}*aHUB!t_`PVQ7uL&@+14yrd!L$Lb<UlEd+=(-Iai+I?<@|X8`g}~%sKaEO81|A zb@iwN_?j4@RB{(;B9ZcHp#RRt>3}p__nn9GSEGaSh_v((sIL!6&`xUbeCz|&`Z2Y3 zC4E6^bI15wv3%o)=F2<0kJ>WAIhVQ@yiK?LA*1E@a49fCt#JPy+_T`)>64Q5$w~On zkdl&Oz<)`Gg!6GP>r)vZb_Q3)&J=M9{EsOZ9k<v+^ROm`=HZzgG!NV0#*R?@O&C3M zpfUwVW=rnJ=9Uut>S1!?yTOWF-orbDUGu(=X)H=|`BSAyI)$<z6NJJ}e_6SnsVP!2 zI!C9kFcJ+r3Bys1W3UmJA=q8^;+x1`%*<ywl635c<cFK|cSi8XOi3g;RWoc}3{{on zBf~@4NV)dhCwi31i8_F{s1uFJYg;L30j(j|utj8kTNBw}ssdVoYIgIx9ZBRgjy~@# znOkgbc}W-T|L=9*-2akT|K*W_lp-4XilZ=2=%3?IxGoPr6w_c()yI~~B)~T%`FzoW zB%SIp>=H6O8}hkvVUn(+gyKbZeS}5PC%};%<4Bw;^iypQtFiJ^mm*s8pg+;hK$|ii zq4w;(6m1WTsX9h#L+s^PzlmZi#YUF>kP4{?6T+1WVTf-88VfmYRx!Z3*-8G|1)QM) z)(K2}eWV`4XDREf{JpO!8J)}(TalYmr;rAk^t7=>GvZq`;7%B&-z`c~XGe3xD3zfT zqW7c)(1cOcgfKPXR%$|+y{*>II<W<JPz%DM1$Cl&4Q`;DA|X0lQTYAwK&(lLqbQpE zz(D*UCN{bEc4+bwYLlU%kNKOzI_byg-~D4~OgB3Mt^H9iJVwWg9Z@z|`LjKcR$@h> zSZ!x)B4M`{v)~v|Dta&+GQgKYNz|afqBy)$NdHS|faFnHvj;-fnuHcE!4~4Qn4k{~ zi<9@%X{#%&)=A4OF$o9A+%g7jGlhHwYrf|qMyodmcyvhku+Y;ZW>142_eZg*YY~%# z(9;tKJ-_%WI(O?3dU_S=1Um+BuE=5jDJnBi6JbwmfgRGV!SVkT$EF|yQDZu+oIr2a zMqEIYu8mC(zWwSFb)hAMfOv$z_+fOKKEWwj+S9e<GQ9}_N^tvrfSd7id9dNP6}!3f zcG~$#Ba%YoM%9@k-7QATIKaG>aBY3qX!+Q0v@C{u1kx7-jF#_gH(EO38toT&KiNQd zAJBeEYMOCGO47(g`VBRsPUl6~mzu>4PKQFyzWw10DFyatIfuQ;OT&>!uM>9Gurvkt zxR0grE7{2oe~TKevyL5E-t}A`bSV{&H8z#NMzKSojiM25%wvVV{*WRtk+wJ<&`48R z1m^n)-=sxmx=PIUCzvHq=)1NH@)!5Fc~DS2TrLIs7X6o`{nIBMJ&MYh5#n}M!jA8n z`?OxADps~Xog|_DOgl@X{cO`#XyTfk)Wjulqg<;;xaQVDmc@d;0Nh-$+P`>i5~gj! zCXa!!cuc&>6OH{WuPrglSjZx)G{q|-&!=^28!&C8S_vV2?AJ%opEGccg;w;#eG1$c z?Ns+|(KQ_6loVYu?A(d-2cU1;sc(tKe;(v~YV^(p`UNd*GN<|hJq@PeNx0Q)!#%%U z)j^T7eZ{KUOWin)Tg!;*^xdwd$v5Ly!Kmg6`iJ!4=@j|Lh<>>?`lThBw%oUGJ#vG) zzN7gly$#my+3WiV45XrMx9Vhb91lmK!#dZagRt3SFGmA{rXYm0C&nrV&_a&%s7l{a zhh9~yn-;C^DyVL~TAgg7Pvm!~8a#pwgnoQ<u)pxr9gZFnNw6=K+JO#7H?d#AqblTT zVa|Q;WI|0HX=p>ipS!+KQ{S10G<qk$l!M-f!<dpLQbtuHu89Edd1!xFZQW!_z@_0k z4h{D$L*<?6og^iMzFmdu5wQpAT4n9S;Z=_z@X<}<&6CFnKKT@&JK{+-me8oIH1Tm< z6|~_Axy?-)jVFCQSQ)ybhc)?!4ysPoa1X6OUJ@f3$y2J-+?fwR?j(^rAaaLpL=B;J zhR9o_h}4Z1+0$xZ?!^~w{K6}~s8PQl4NlYsl_$A<cml|8OIQ6ISfW8qSee1!mkijb z&w&06tvcx%;#ziKflCauZ5-h`QDpQh5C4yes!6=E*aA(z+U@r3$4~CmK6&F%;wQp! z?F!~L1x`py{Y~9^d9f#0+pW%bO%>WbpfM1%8u?@B-wf;?loi=z@x70QPsZ7jh7{aQ zZj4>FXi^NmtcZpCI~)|&o1Ipg1_+G2N^KAShuKjWDl`zpygUm!)s1*M+dvL}Iu{G| zjN(=efNn$KIZBoQ8I_pg4((ZTq{K!s12@D@?menfz%o(_@CwtlM=4@R8LUQBLi{t* z0%4`88$f*)L7ck2h63JBv+6dsn}x+`y6<pA0KGhR82c5H-wWXE&|%OeWt~xJF!2XI zR0S1sHWlOc#^95Wdp#l)11ud22td0Y7e_J50u@Xr!$(!#1Ry<oP=K7|(LfaEFAK?p zBaqu0S!axaD1SlC?er}p#8Yk2uvb2O;VXs#Wb2F`ezTS?kMWglKs1vb%{j8ezfFtk z0;KFZlOmtTiMu-~O7Bz}Tk+i8{wHY~^0L3v$7xgx7bK{Je4f?f0T1!z_5;#HDEmg@ z2X>|fw~Di%8FUt;O}x1Uh0`?o<`#4-&5n1q3CD>r5+^$}@y9O_X_Nk7M_MZ4tc%$i zj!XkstAJm^_-hfJ$6N`ZkXnj^DD{7m?;3+p-y0A>HUCKhDi0qw9?KPnP+V!^$X_En z)?fq5fHif)ICY^Jfzpr_O$aq>^}%n{K5@s@s42EgPpt5bCoTa63G{E7I`ScLC@04J zH3{X!ww=acF^=~Ud7@DG-e{%V^2s=rj@lj+JXMgkV>pWJ>&0$&(`aqR?}q`-dk+X; z{=gxGdOX>B5a6;yM?svLP09ikN>7Fy?4;N0dkp&EOGS8F_?m#XnM~&R_FZn7AOd!g zZyBdGl&q9w0Y2Y~1^gESm>?o5lZqnGR=(X>8jAdR&jEpdqHX;Ki~tj89Bu+V@i<}Y zFNbJel0FBzb_WzzF9id+NXmT)*;ya&-khRiY3TkdP!7o>a61kgq}%=B5t73nPL|Di zZT|Vm=AUZip_`HM{Eq1)m3#qizAr|@(*7C3Wr;|A98<p<t)7zL*DYU?Rh98SPeJ<w zhgmy?mDt0`C7=ZZ3XBR?a6m^&#qm&DhvT^L@B0ip=?(_5xxAr;#PJmLZ*ewIRCXZK zuOT8&$`vB2x!C6G`72jbBPL)Y#+YH{ypIFE<i9OZk*+1C<3uh79jAf-;Ev<4#VNIW z&|Nwr%n@ocLco7^W23sU@z|($wMPAqUu)DjR*8-JEkMMs%TXJ0O`ttUAScdK)G1-L zM)sPr#AX0yu-t~>)c_f6Qk|2p6}}<OEvxat4iB|Rk>uejSrFsL3WB9JU%iAv*{lX_ zK3i-^_iGb64hP2q6DkC=g{fU1YIF17bnb0@ndSyYqZ5s*%5C}TKuDwUWJbYwb>%j9 z$k<V8bJO%-)IXS?a@!hy<{!0zm_)N<Zg~sad6GY*vRESQAU0$KG{hXJ5&j)xbp}hR z4mZw$sCyhv!bq*Q&}eJ{)t*W7fVICXYF`modnMIQ#lOpw)!H#;8{1&;x8vCnYLW*q zo;@qKS^RAV*vlaiM>+6oNEJ*#4A$@9&+Z)Rf>jGTdxH`UI=g*mocmQX34g`X_yaBt zqoN9dMcNa@kN=H=Pwj{ne0_YuCQ&f1u23z1VTV>KC6sgh-zYK=EAosIS7cOBy((H7 zt{WD=aws~mWoT$RjXz<B5F}qku((afEdG9jxn&;$SbwsrINzUQZuu=eqzZw)zu#zX z`3XIwnOhjyW(o)P{{D37dVl{|Dcj#aM!Lq|Z;__@`_0lsfB$GH!{2|EWcK%)q>=vq zQ9y3?j|5CzhOP!O*l~6MLn$d$ne4VKATWAE*VzwAvsoGZkc{j=$V&FX#dtzE4&J2u z8?toL=d3sjMH!_Lb^7bt6AboL`71k<*T&vb90OkTRojynQ7XcP3vE)W5PNvoSGZ&g z^<+>GI3d>yfL{xXPNL^@=>~sztd!#qkCCqPhb_`{f7mQd@rOrCR)6>^X{<jyN*e7C zkHke{G6#rULRSKU>t}BYiV}$ir7V*gE%$c)GmV&D{)K=32>CJCFEEIZ{GIxo4o7%o z^!P?QwVDSzQR{h_SH7`Twdcgf+dH>jlYAID6f^`4BJ@R^ooX2)djrRSlK*fq3_yng zLyqX|UrCkBnME5_cPN8x%tRGWNG+g<O`j8A4WkcKRYkb#6I^my<$W(FTBoa`qdFkG zuMl4%3;4S;>_FZLrS`1iIHxQ<uPo&XP=v3NmT6NM2Y)s?nYX8#1Jjd8<eOy<SmCMA zZ8HbVNkm|7#n?05!h|_p#h=Al3t=e3P-f8ZQ(epsKdPUc!79$R8YF0V@yn6eF|s_S zekA|k_$8nr28c}R38i3ws<0|DJ4v#pZul5Cf4&FhOcmXvp`}d3_TH(Xb&RL!j{t*C z0rrw{%F#QR8gDkDmp3sZa96U)Q?E(ALS@KlRWmohnlxD$W1A3Pr=ikxb!aAKtqxs{ z*=CFPqwswyz7M5{lB^P*C=c+mchpdJQnLS8gq0w&gpRjhdpBnJ4;YjR1U{l2u!9xn z^WF;_ZZ3yD184z1J}<8~@Lux`w7v|xkwIn?+&mqnO%<H5bE~ik{F73_(K65eRpUu0 zrUXs%PdDyoP-txr+3`<ghCd+x9}WI<o;*i<(fG0E+)+MDUUIokO2M-h)Got8nv6dz z_$NzoW@toJr0ZruCy@7tIpiJPNSV|e!apPNcX{ujH%6dMdeG<;Xm1S7#LWJ_F|a24 z4CcUn@VnQAfOQvcqssuWzDthuYzgpGLhyt}iR1|+E=6_V;Ep?fMTZEz2xC31SqNkA zzZ8Wrw$%m%VMLli^eTI|UeE6bHcv7965(wtlp2vgQff)P3;+$<j+Cb~3x+b7zg^}3 z>h<hhfczWr!_?qL{7xW)kI<+g0@HRciewMK6bt=q0FrW;iAb{(V-rP~;d$u995&X? z7hF)?_{meCJ#II1ocHBIn|&5!-`obCwO7!z6=A3SLgVYAT`n?{=(b;Md<v$S0A)Ng z>`gq%M}YVw8m$SZe6_zUI!8nBfelrb@(z2%`d4-F)$=icFkpiV7s2FgNfriV<dJ1` zbbc1#YyhqsX0e-FK1EDHbo)It9`z=5vdGqzE$vYZJ2BtuNkl=($q@&y2Wm&jg;73+ z5Wf_a?_k(XJ0W!ekam0@C6kss%%kZ?3zen72OEXx@s|mw@rq35&i5pd3|=+1cPpt} zItq-^NzAd(K#qCMyGBs_l^*sN#EKQ?6vz9x|Bhf^DHZ4Kr_4dpZ)`H*D#b-9*i7K8 zS(SmyUu$!DJ98MxxMi6^kmNC=NI(&8Db9evWs9;Mm&oj^Mz#1#`!VqySkuz;P#LQ> zq6wVkTUOF|g-W^-D*4rqL?spHopw2F{(%iSnI?e#v&b{AH{iJaIT{7?2x3sgM}#^v zYoe$#@_>PRkEsZccvxE7<RO{Rsa>GUOhlIxSj9jMV${fb1HW4PDs+cP1`LboBckaG z5Z%s?N4GVEZYeK(BQP#}a`H_z7AlYi4cWSV$a|V$Ru2md>@@ff0jv!mVPcP944pi{ zq~}U7=D`6&q~d*K#ewIBNv}O?4j3tX4A)@@r-dfeHF0Mkax9x`M9er+c~Fb=hOwA^ z9Se=gF*>*PNr^l#-1PzuXAdBdTUo7Gr#T2uv{a{vn3QoVHj=+LVfDTnC*`de;IHo; z&Y70Beskmfi?G-7-t#JsQ^1h^<t5yo75N=l7wJ)b?p+rRq{`TlIu^qRt}Kx6*VYWJ z+v8-Zj`BZcnW>|g)K`>c#yATZ<~Xk4De*W}f2E3lU5|k$D0rYLK76C%DzLZ9qg(e& zWZPT$JPiI~wm84acN~E<E4V<fxblOJ_uaf{Qi_nw;jhT10<I@>ao7tsPhm@et$ZJC zCeI>*9A_X!2HguP&wq+S%F7<M7)^E#!)o{fR)bfp2Aw?oYOoTgkGiw-sy+NCy8wb5 z?+6ENVw_g@i*XXJM2kqWev|KgRRofEX+RZ$OpiBH&5S0GqNBYPR^TN@(BloMB;J6% z=^Y?BNyxDvD&!yoo}c1bu;U$}NB?o3K{xDtSFzV>Jg~W<fGuA*<Cssvs)#g}QDgzF z|IDm**q0>_BkLH0=GcG2g-T8eGRQJmx{6GSvQ(2I@_Tm}cW(-ZMa4@{{07MRKf?ML z<J%0Vy_T;*<Z;aH_AP@N$>NpYv74qTPVvxVLM65n650=s$|RKt#|KE-k{B9Ozn+Y# z{|99Xe|bwl0DwbFls$QTQ)RYEo6@wTq%3NbhynVfIt7bGWz)8lh5`a@BMpKrxI89Q ze+s@_D3nq#?N2XP6cq;@7@a|J8I?E8I9gmrut>`y@M9P#qvJBZ(VNMrfGq|H=ACoC zB{z$Le?XJ_<(~5`XZy}M-}&IFtZxuEobjoK!;a2Y;)P~4`p$<*y2X$t)Wh&<C$-be z5r}cno&nP9yn)3j%HRnG9N39#VCd>GNa`Ma&vS`hXPoyqDXe8uM?JoEO7bE2ONs7k zn1|_d)=fqqe?kWu=3@<rCHKV!&|%7^$StrUo}a5XDGr#4Hk{_}baD_J-@-g<E<B#T zq(GfppjF%SJ(r+bi_opN4s}U^ri8(g!k~hZ3nus79{}OcaIj`*V5NtKzzQBj(3BgC zy?bIy!YY!_k#hfL?dAg8uD;9)<Ffz^#-F)h#%RQlN{_EQ4rXy8Of34ornCTf$I3q{ zJwO+8>(tT$zPmcloWqo?Ohp{0(halz;%Z)sF?kEl^CR0#W_I&d4JI7bvoT@*`$DI_ zppy@G>Fw|sD-!eJI`u6d#)dn#=nyahW^#IbuEj9yDaZ^rzeYo*QzFpU64_8>XwXUv zRCj^8s9;XgjodOhe+njbF;lEK(Cjq%D+3KqwxmzB<0ZjtNuBT$YH-oq%o6zMT;_YP zvP680%(mC~j=x~d#X?C>?WfbG6dsiEz>_>4sO|9LA>X=DXw-kiTxa^?KOpI1#HXUe zglUgh-_G8OSJP>YR=UHg*#>|5ti@`{{sQLH{SGZ<^yDs@=v$5*!#ZR7)x1+;ap1M1 zbbisR&*&?B^$y_B-{qc;8n!lgVsyq@lG5e;yyF#p<KmyWjH8t-9{&to?%{w>^*bH) zzyPU`8HbjO_BM3zsJ6(Z?aD#-t6J*PHx#nCOIfZ8&po-cVVqzg!Cqoh%WPV;C9uqi zXCf-ej_5WkeK?v=S$}XJSY|__c4#}8bF*l79sigj-xOzGI|e<ria8M>>|<Fx;yYIA zr46Tq0=iNLq92sc`cV|Hqc0{Ii>)`nc`OD8k60ocPYO8232@%aN`Nz2z`56lM>`Qt zZ~4w_3FrGB@ytzdZrCEiGqy}okB{A5<IZ9i@Ax(%eV9cUv)AwAqmB6LhgOLj50N77 zM|+ZSHzweI`!#`kZ7;-~E^+U%a@=i*d#1p>`sHNYRRZ^YK0JPkxcf^yb0qF)w|F** zKov{e0|>XB?pn8Ld+}ytyy3MPAZbT@2eAWD40Gh9Kz=xrBQNt6a^$~~h^~>yACS)m z67u(770B0TAacxE4Xq+gF96==b8vv=^5qH%aHM=TiU2N>0Nn(z4~8j+gSibG?ef0l zR#rj37`uL{z*OZM&oO=Uoq&3y#MB|5T}7BOC8m!ph^a4C8HAau$C`AH2X|qr612Y6 zi-Vu(!!y7Lez^oyD#82Yv*85(rB?*_CIa8j2;Sa$4GbxGCr9D!CDTFB*&E?pc#!~U zZ@JrSD3*2Zq<l_(bwoEtqC;~@1Sfl=S9?UxX?Z1#(g$?1j+8JR>xc{kiS}M0<x&9L z>oyp3DVA7$5&YrJf@Y7rz!WWBcX1ifv~vlx&k*fzuy)Lx6H3JME+~<yLWz_)$kD3| zMaxd;5PG$dy~?wfNH_uhO1*45FIiw$S7lI8gvy)%Bvh2GyQHGDw_azVcI`+NP(EIx zYtWa@B=B)s^W5gdW}L_OEmE9`%$}AL$>MC`iFk1~?^B+xCEzTJ!4Y{r<5R%NPk__* zaRQucEs_q8a{}o;o=k_I9gn9&*UN%1da!OprZt`pUyJ}9esq@6;emA7)rp*w9y^}g z)u!X|UB&wy<GT7_433GznVbU7bqR3(_I(1J;&dsEJNb~!$CIV;*WboV<KZufA*a!h z%~BeV=U1@#3XyWJ5abtmE?FS9r*YhK<p!ly;+ZOOFOtu0(8`=Jv5gM3(FxNFM!3Fn z7}n?TXJIW!cs|vMEc*s}h#G8h$ZFDr0HAtIHa=+szKtZ;V*;d+Zz9HeOo2uxje}of zbr+6p7!r2gbMaP?-v325GyeYw36X;m!j_dFA=V;@D}{vkO@WXQ{nsZ*h?nq(|0U+} z^-YNq;vlx?i}rP!xP)*@2{CdTN(iTr5KgTED}4^Fs$vo%PrQ2TrbHgq*cDd`(8jK; z(jD(eQBh-#i3;4{mN`*cc;Ani)xD|4lMbB=ZA3eHQi0Z?E-f&u$WED|M@JF|G_VzU z;A=Van~e1f>toMXb84d%8O-ElgHXMX|1NPDdh<8Nv=Zi@9ztO-CyjjWX7ZKWJ4~cP zW;oOe2dY49E8EPDbNJ_XnA6$YU|zylW;nzwt+1XaiNWhDXh=>8nPc2wzSG1~7^3lM zSPAFTDIRpfiv<#2c|IY-uOl;y*F>7+q>5$A49y*1dSyEEwA^CoOw=9owEQPs=BPxk zhd$-AKE=qv?b7~=n~ME`PP12ayL5M&h(f1RT{Qm^c7D2>=5w-UEe)K$Xi2I44b}N) zOlVz`3x8l{)dpwi7u1)BaozCHYN!u=e-*!Dwm<qO_Uj)!%gDXaVe${8NA#<Y@mF{b zR)79kkxv5siS;zv{<<~y75Mk3*C{7A&CLE8vU7iAeou0@x^~Qqp4A*AbY{e-$%>fh zaF;nYhyE?;@-rj7z7>1kN%ZQFI(;ehK0~nGKcA5tZICdOf0K?9=6%*K^EdRZo1!9D z^DVkzgJ<wyA77!ez39Kh=*NSbqLh*6FToq)+K@iBVWd+#YA^3p`(SZrmN?GRImoAB z#i?9~{;q{CRf(`2;MSj$uVY%8Vqb4D68nK=sq%IB{A<V5+Avn?#_7M^B1_SIDzaur zkYL5B_XZ=e>UWn&-(HD$toZr6&&A%YT*{VhVCr`*^4-zQpLjQ~xHpTx_k}LBQI*l3 zxKBPFt959Uelil%PYP&_fB3BsK%XFKms_`GQQ0$Rn}yElxXhRwl*xO$NUEywW^QOA z<^_7J$M%-N01QC$zfxNP_UXE$wO(|A^0aTmct!#gWZ9K0k2j)kTN~z=T3w^L2VlQ& z!woH%UpNnj7s{p|`W{01Jd51r-pIKt!glI-<obTIF%fU42@~dQI0V3EZ@DjxoTr7p z=K)Bi{^zeE#@yiu<qq#e_;(;}f4M=xr#WaDna0jtT?KzvVs?rPKKSs)d$Rw(lB2Yy z@lg@LZUl&=qCd$12K89g#G#^UVyRsFE50(U{nc_7t+KQI;|t9N--uO2JS?@=9y&<R zLGJrf_U(@e6%n__n%3hhG?N^G-fiM`0cILIz%IyJ24fj4gu@5Frt#qH!0wG4X~X%{ z&i>LkwM%RXQ>(Ez!A!ywlP=0awH9p;jLFjW+ShHb)U(AcwfU^zBNK8VIlRxQ!T>ju zzW$dS!)~LH`&;b!Ryrjkq~~5e`x!y=|E4rk7^9PK0qamZ4J5CU$Kxx(5n~Mj{pi!o zF*;mR!mJX<zs`y))cP6ksLTiP1WK4naUKEC<HEpb75R9Xz1om3)j(jW%e1D{<<HTg z=%}PGN{_nKpeWqdP)6Hr(1W6=OeCGkeDkM4u6Zn4Z<1@3zPpwsSAqOScq^-_z4~e8 zN4=GXeEpMNl&Yuo&_+y@S8Kar2vUWolXRX`sDhP-PJU3~DT=nDdRUe^SaRB+!ZCRG z->gqsJICN5f9|7a#H^;X@WBv@2GrE}_TgGYa4n`j#ptJ9+JXf|yVdgJ{K7yL7Y{&L zzK(MD`(Lo@y|tO$rK-mXYTy1Ko@lnev8v%+I?FN-{;;c6dxL;iXFFIBa<oMmJ!XPK zDWWduhc{3tS)JgZLY0`HN;cU92fkF{&~~V^T%nn$q~Osk7d#D3(kA4oWiEAgUT8ec zP6S2~VtO>c5k3xJW)FVMVgXV3NcenbaIACJv$3+up%h>(KaLiwtRK4eD(L+S?^tsO z!QcMy?;L!#zAJ5ubhFtKvn?`W`BTSg=wL=zD=Wk-nFxm4L9hKICQx3M9QQ2GyG9q` zxIO+MnANB8cy6rt^HP=z?9S6_!&1gf`=<~FwInyz&=t{m4IWzOXE8zwBn5MI8(0En zkhjX<K(R$}jteUe;zNDTuaRA`WD)sM&`6u*(kLf{zd9KHBjC9qGVl5Vc#9Se^+L`p zbs-`)ftaG2XvWHV^p)oe3;dxmh51k|>jI+v@aX-qpb?OCT^`ck--V9<rSxgu@VS^3 z51Xm~vFbzRvtlCPJD(N=jHS>z(qlf&r%ik(+X+4LnJhdQa_y5$NHu}1SU?Exlw0Rr zp9$bIB*H(+XXEJolTQhRxbhw8V(aWLAY}j77~3`<&_7tmkmc5!>HB6n`fky>FalJ8 za_Ukc<a!%L+^sH<kh5$o?l2YOt*4SBuGZzLg-BIg#C6Cbn(R3&`XK81qrW?5EVHHc zoNsCKm#0|ToVcZZePL{ANnp{H)2PkaDqDp%Um$BBSA8lbc&4268|AZ7bkrVbJ){h) zt|r<dS^|Qve?r(EOa?wPhhfyKD1+AjCG-IglzuKwAQIXeWew!Ne<Gco674Se>>^sO z>%SmS8#t(60m)1uFcW?IIG88oD}@qFvwY?xF#r2G%jvC*(w(UQDp-L$R%bnLWOL&3 z<jAJYXp5KKCng-hp7<deO^UD0Z*^a5Z++XuB5kyNRwk2T(iU41iYn)#s`SMZ7T1>b zW>$U^_0os;a$SjqsT_DO_CUPhw8jD=c_Y4U*7rOnt4~p^(?5hFdzJc$t)hfUAJy&9 z78k(conmo138M>O_@<#96o`RI(#NCYiamO?+FUFl;|&~uxj2Z|46C(WYSZD4@=m%U zzU5RJ<~Hs_dF-<^q2#sbcb*Ch3upn0NN?>4a|WLY54NERrJWsj%%2-O6O+&Cqct54 zM5FdrgiaY<9zYhm>Yx$do|xk8!G^aLZ&5V<HA?(0KS*gu4Hh7d)OUn=qDq&qq)99k ze&ysb8=X=sC^M6ti9U$CZfMskEj}B(;lmP5`qgV`Vq+n2N>KovP;&v;2_6BHbRzMe zOg9|uc>bPqQ5@;ciWs8MU0Q8dpsAD2D|Avx>FNu@>G3UWN@j;a#-k*oBtETtAE41n z3Sh-CAt{?Gv>gN!8vgFLPYi=`2otXlc>-^DR%dphoqd=}^|eN|v-Wj6iauInn}!Cj zn!T1eoko(=>2jDzux*2nqp8z{Cw+{LCrUV(AQDbguS07tfLZ-Zpy{v)@T(q&vWSX^ zUsj*3&)m!|A*PbyS+IS09tIdH)~3g0?zmazPWvefPBUfbV2$C$qxJHaW$q43=%K_N zG<)~^E=Km5_z2H!jDTJH;T-++5ti+e#6R!zqaz-euE5@CjaFjQPN=nq)$&f{jRUx+ zg~787LbbfhtIe_?k4&Z5^8nl@l$gaeCK&%aCU+Ki88z{nSMNC~xviGxf1DKDcJq&M z+psupL#^xSC_ikBAzOm?(RLbM_ULAT**}!?*v0sJQ{3;1S@Lpdo>ty<A%vH|BAM`J z8wv021tbv-?DR2Xr$LxE#oSℑ+?ON?e)WKb**a==|Xd;m10H{^F(-O4wuJDTmmV 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%0D*>s#w@teYvlx0F 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�DgBtm46Js*fkik81&CO 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�>Z%r%wT9lI_S6kX7E+d2se{r>ch9`^)|%UreK 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�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%0Ds{sfc=%^T)u^fW57j6<Dg`(yUQdtz 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 =XX*_(c|M56^Bw!1-DW!&#NB zCR}Y(|4Oc<%=&X5ao<*~;>wWtHP7HV>$*=joHLXd4C_B)8RY7-(HyRi0xn}a%uU<h zHF?A3y$K{U@DPP5{o(5t$18~`y@+-9!-REs6~-gmj4liSF1X7E^MPWpeIquN`J(8i zt6yCUdgDpyd!Alc%{y!*EaRlK-n{#y)Z#JUE*+Y^+s-n&&3Jdj5ZvXwLHR2KjE=Od z#mlSZy)4Gi3G1z~CL4K>M_*@S)jYaP!)x3AFOz9|aJ9prTmh|Ed{DaqE4M@CB~-VO z(_T<EGK3kz7U=&JBRko4MEMm)!mN)5JDoQ`dq57QBl&Pt7kf29U(E#vMokU63{pr% z8kAX!4u;FE;ksyXty$VkexIsrc-gSI*QdSr?36a+qjpwg`aB4>DYy4TbYGMwGeO$h z`JM71u_m)Ob^y8>Tx&BZMSM9*x@bD!_Npy8A=uong#uABb*oajm3<DlRRX$+7z9C9 z7iG=8vx41D=mQ|_f^KY@8$*Anv7$ubG8>)!s3ksPzr-!uK>|L|`35Z!!fz)=uM6&U z=<bKp!#IAM3<35g0r33fDi)d$!l~U)<2TLpRa}<<fP7uaSJTC1FFk(xlK-6wAj<PP zG^kY;gvw5;KXD}vA?h>;!7q45C?ceyy7qlM9^{U~R?(?p3!NHnf^5A1Tu<k;F#kp@ zjlth4Omh*nLcWb6J<AhVlg;l_@6toU-!CDgc;+z;q$R%AJ|&l;H!qAN3LLJw;zh1n z8UxYNtA?>q56)+V#^BtVk1v$B&2~t}SK_bv{OTW~F&=q~CSO``-EN1W!?rtI)vII_ zojUdz4&B{013Mw#00w4xKk)LHqJzZ^W+k(@#j2zidu;N<?8Gc!FI0e(_aRGaL!UE{ z&98|8h}4Fcl5}WT`1A2fm>(2MdDS%}03c~1g^2lf{O^l#@;2GjIxR(Nn}m{6>5Y{~ zMLo*%RLSI&O2!YU#Ga@`1sh?hGwFt1FJ9QfYhg$b=(Ic(W!6pR@EU96I}8o+QLV1T zgN80|tvYTJH)`s8@hLW5)E<Qvq6UJOwEGJ<NL4?+)7}mQ9F_Vk;!O<%Bd?)ZQ0@ei zKs$YL7>UQ^v~X5zmNnQMwKiq31!fq*?eCe?|LN0(W{DFxdA?G7I%_T7;QMicPwz=X zM>Q*K^o-+&$f!Q`lSO()^{Lm_CK&ZwoKYtN@A=s>n@`=bD4ADB)P4!CM%5oKO6Jw5 z`acUUm{-$IorhPW#H$zrK=5j9a3;ozk;edkA+Kg3uMR;*3}L_!HWl)f4_LL?^|I9V z7mZo}pfM}n1!CpdxOd0kXU#DT(gj6ix5lsC1sZFOCszAQ{O=Kh)qbU=D8;<FZYsDr z4p>G7TjGBgiGp{;Q!XPMFczjc)?}x*ddL|bdwjf87&wXy{QTeyylij=Zn#P?aP+(k z?7AwIfzSK?U4x9Cmydyik=>@l6mAS>;dL-lWpr#Czkh*lVjIv+EV8SDXHD>zKSo@^ zUh}h8)e|S<YJ-Jy!<5}3<V(4gT*!}QyMTgDR^=#Oh$3q>imXbTd?&e<j{tk#3~MlZ z&DAB30zePmU$l0VVEm<*m1z`z312k5;o2vo=ZA@Su|E-@X%qqAG6CcE)K%JmJK0pk z`IPc#BS)H**vXYCC;{~SivC|}fBiJg5@Bv^>{TE^PHp^}wqM;t{dOevTdsu8%*J>E zO=k3{tu7&aaAD7*z?)c9ogYse2{>b&s#{A^hLIcmzb+Ond+duvyc!H|4h!KjGc(}T z24F;6(s~N(A-VsE0w4(Fj`CjZR)bX?W=OuyAnrfJU7lffGX`J4VI$3}1%80qRc8gA zt3@u_<0H$c$aDg=D|rEQvl`<P%*6IctGXE7??V@1nkaT}3@;0!mwi?qb(L9R@Ijw+ z^(b~&w!98$_NT?uWDDzwq_NMTw@(A7&I)eF_>a&Gs7LGWP4OXcY$)K9JYFD>pbI$J zJ|XlmuI2mqtJuIpI`OC9#W$ISE?s9QKbfdEMoq=R^{6FM<gXZy{KdvWug0<Y=He<F zFybEhu67GLXdFI$hjL3PI%uSDN9d2=%06}NCnt_`#r>?fE61ti%8`}R8<W^7n^(=r z(`3n|{N>t6^zFXN8e0XV$_7$7kxq4XwENCr)Pt3{w1T*;$AD^Os5aL31I{k!$)+-# zvxE9qi0jXI1Cvi^7*hG9Kep1WKKQBFX@S874OG6B0?rlRU~ci_C`WxTw4c(@(rE!K zr7)0eCQ7_In>RkRwQ7*uwr0by#gw-(Hd$3asJErT9ZskZDstUmUiW9vb{jBaCD5sx z`{>rr+mv*WGB_6p`cF(&M)M6{qR(a~0pNKD+K)v?a5TSxn|1hbN(x<N#Jd?};O@g$ z6J?(OZLj0<3XPl-;VNr!gF~JN-L8ySg*e@UjbQxmiQ3TRV#}~p)W%ar2$55&r6_jx z4o%)24UPOv1Vk@#0YAG!v!jN;_2!lX#_#!B)(5`GV-{c7#8YDPtz=R)G-8ve{|yUQ zJ0Mj{$}p8%!HP512rI6XTXBPw7I@SCe?d*sR(K74;ZEyV-DZ^h3~feroyTiO5^N>G zme7E~V4Y@fl7yv06d${;-QvD=o!NbNi`8AaZjpP@dSAQ8=n-kXkY;u-YB}yMgzw^( zqwak9UH2sUZTHpkVRV_zOesW@@aY9ChiMaNc*3Ueb=1kOhDLE{qUXO__7>RoxWZ}p z6cIjF_ubOwqW})=TiuJK&4=-KA^a}pQpG)q2Rd?J&HWCz8@b;BcME^8;l5m%)n09E z?JHcD-r85(;%M!=6@T5{lG)l<x^7}?pJ)AL?bT^<fV<-W%Mbv5d0K9FUnbw?&XpV7 z6XiwjJlW^IQeNP`O0EVf%yk#Y9=A)L<(?tWbYCG)cTbn6x=ZBA?rY?$-Pg-kxfjb5 z-SzT#ST&cQs>n4$%39gsZkFxtb+XNUvut%Y$Y%E~$_T*K8r)?%mIgA$bF3d#m;ujb zhay>_nl$+$Anva&<HW7V2^VqdF2yh*V{>S^(ItN&eN`QO-`3H0zo74KLElb6-)(}v zPkbHvw!{JCIDMA_eQyW)-Ujq-0QxQh`uc#r3xK}WK;OAQUk}iC7SMMl(04k}cPh|# zGSK&G6gXP}6Qb>8plvqL)(NzA0B!9+TN{jk6-FS5#^=r<jp>=pfVavC8r#tSQx4HM zVk6RajTNNLW)*pZl>-<lM~q6IM*dfPY%<UvNM5*Zrn`9kbYO;z?h3lsM2X`eaV%a_ zX7e4=OPw9IaEG}v*ttJk;h<Sq*!)gocru;Th)V;nB>ls~X51Vr(&9nK2lxNz2KPSQ z;I@mw{XPw@+~RJO?{>GyO<#FHXU74i#|N|!2DAVMG!F(e7X~y31~eN6)CmLXfC06` zfZAX{tuUZw_w>ZD%qG^K8N(y75~T_#QabRpdGZ{1WUQdJ9jT4Ss5DTQju8W8Z=_LJ z+@-}3MbaUyGSKyCp|lAp(0aOfeRF%IvDSzES_=JI|1HRro$U+LTF+ol&lI-|Z3uRz zg>iLn>}oxItujoXIllGuWF@b)Z_4^%?cOvf3(2RUOl#jal;N$b(+byNag!+Cu$XXx zA0;A1{4K_l>xXPdtq&EvLiP?I3`QUf>td-5%~axwdU>Q6?@*`wU7n=$dT>Vki63sJ zP_Dw(T|t|+$?2|>QfLhp*p=Ufbd^HYM)I9iK1R?MRNH7{xKJ}yT4&bF_v>S_0$1G( zEWEIzs$YHh938381GB4j+SSVJ5=caEdK-EA6p>zlurg1}5ou0LyM?FOn9_gjTHpkH zZ}$HmewNyr@!8q{eqM_7Y`au2WePpJD`-bOIZ;2q>*#&YryX_u$hj6I=Ma8#VJMNV zL@||sGH(F@bQG~qeV$+ZxQueAD;JeO4%>(2mY<=V477?Zn%e}v|KBIH03!5DIzm6G zBlNEYp&v5vRe=VfkzYT-RRJGBer2NH7zdaeCwd7G-3>&a21K6%L@xxQ7XZ=ofatkE z^c*01HW1wjLc{^9f*n=`TTy3mxwTQ+ipE=_FHh?F@@rjR9uR%`vFJ;?=*#y-U+(@o zeW{EC%#8PC3iPEA`ceRW$%DS+LSJ&AFWJx+C-lVueX&DdY|s}g^u_EhQ7)doLyil^ zLSiI*l#F`RfCsm9ex|JftuwDt#(7{WEj3O)2vS2GdycFR81<zvsUTba7f9Ac1KoBE zb-gOP<I>d$VzlfMApx91y3&pd3fN~y30~IcbXU+dX<bSZeu$o_b=o!Z(8h%9@S%WM zY5-J$J6Ga01*M;3n}<D_fb(D98}Hc*?#+pm-hlnD>y3zCM7@bztnZD;(e*|b>qyt1 z$p@iFggrAM_D}Z<)TB1t^!9Q5l$<Sk{I~RfZTz1e#qlo!Jd^Ry7x*XTd@24<PEW@F zvojZf|Nb*y8~@KPJ|F$Rd(qdSKj(M8FkYj~2N^fbV^oTQyV4NRZn~2swPC~|5`XGH z`guw=8L0h@VUs3o)kP#QrO;^uxxS}GO-PS7b<*SSI_a@pNRMZQ^!SsI9={dR<B_i; zJ-!zQ_*PtcEC%V}2kB7@(qleIj~hUGRDkp-1L<)+NDmiCkLy5s6oK@(2Bb$mNWv>% zOr{JN6G2g!o#7(hNluu8vtm(D`UlKijoz^S_;Dk;kBIFN#LgGQUew1)`>i;!17|oz z@#+p=Wr)8hFpWV=(rCP2N8_D38gCOcenQarF+t;p1�jIyAmL4sdgv#tVSP)j;F9 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 LQtY4R9Jw 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哠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 sv7U=d)=;5o=5L>3^6D~of3<4bvoMT7a` z_!9ZjOA_3W`I7yAOnL@N9)X>9&>=uXmH0B?3sr$wfuqXqRmPWp7f+i~;=U@Y9CCKl zoqe7#PiE!~YCKz?m{nQfV&WNgTW_`j)R|sYD(ZjUrA2l(j5XjQn>cvj)|K2TeY(3w zKqt@XHY0%kK*m5;l8obOd4%Enx_R3y`Q1>%i=lae3rXhn0LGRPlTBsYuu~i~^Jeho z=#^RTw~@@>Ep-w&r0}^uyPO~**U`NI+ZEeAOIe3KOVJVgWEa6@5!?Gr@P_Qr1%I&p z?>4)H0Gj>Y<sQqcc!mJ#ddRVmh2Ni(A4V3W)eT2qe=K}*;pr^8{QfsGnuUv>$IwXo z*9E<Us@~Ufu0Okseq<Z?HARf&xb+XGfb_s1M$dwLm(WTaQ@(BKu_grxcqgRwfhW%v zV2es~*@e-G-VVQ?Z~)ANWfe-3)#KMw*OS#hm;yN9H>gNIm?9+#g#zcn7{V>Cv0Y?Z zLWwEz92u-h>G@#GA6wGPqHu_a3nS@xSWiWXZ%Wk4{CJHmF<eb*%hUVm0@>I+O$G56 ztk3|ymM4RVsvYmSZ*W@Un@iAww!XVdqO*F;#zN)(yZDvkA7L$)l&FzOXlan%b*7$S zWBDF+{|okm{A+=Ot`>pf_VyEt^}3`(edf}~Y4(MioTKB}+MOZKPAK--Vu1{hX_gb$ zt6zN=iF+p$ztjsC>-ihlbRlEubQL@<8rxhfGLb<v%~Y3MM>y9K0g(llr^78MQ44%Q z;#AT#5FSbkC5xs-(sBZ!xV*S3z>l|a!bnC}P!j4GMx_aw!r{S^K?vi-$o?NM!CyO% zOk7WZDe4zYU<{IplS!0`WqCM(15vC<&`%g(j_?DVz*U?aoQQHpGonr4X74)zm$=xl z<zb&KlR0iDN#L+s_-Y2K3GN8rg=1d<>CVkdpeuzdu`9z7MV|(fkIaFWEba~C|7+!s z9JjCHp&_UoxI8EX&kT5n-%fV3bX>T~hc-vGp=ezRUIHJVZQzKaM*ud!{~ZgZf*C=S zpeLwEcsR_S%(hO-8YYFt=SHj|xRLn9czSE)BikcaZ$}DRQZ|Bfx(si94_w@He%<n6 z$r-XoI7eW#1}X>9g;NCx0hxjCvaj_Hy5K%=A=H;9xlu3)j<g^NE<6iH@DU4?abqRi z!~X|h0giy6_<@Z7!}ks(ZN|C8ccnVwL(`+B(K0CPMh|BJ$m2TW2a_xkEt1{fHd8b+ zG}B<y(*R!rU))Q)BhDj7Y)&0};G;xPE(lx1CV~bo4+z1zBe|jS#k*uUl0Nc5v!IMo z*k=On1hxQfhyUC3qu19{qK!wF;UHok{(M3;enHYy;1G@t=n4jOr4)qxCrDI*Lx98x zZNQh4=l^3^0A+9rcmqn>0;CBM#d!@QuBNjCspCk)`O#KLnk}$8P#sSlJc8Q@f?AM| zA>OhA_Wn=2Y9Ub#zQkf*j)broY&;YPTmwi0%mG4)1DP*zj-H?gqbm*0{(lDng7r68 zvAKH>bPB2p-UshPa3EFyqk#WJyV+nfz#ZU*@KWSRA5DdJLG7Ye5Fr2;;62VAsC{r{ zKU>Slz+bIIZ-@W<YqsXR=KPP9gJmsg6Z&-*?~u~7iHWM@1D;#;?bkQA2Mc_MKJvUP zhrxwsJri967j5@C{*B&^|AbK6?yVcGL?)+jdaM^fJqM_7oi}lE!pybT{H^JovM&KM zL8O_1!Gt#ym!8|3ssaKXrDvE4mgHqTS)z8xm{p)SCrdr$8{o-AhA5I0>8}YcX7GG! zC$J?)KIm2boE1_`T2F&bw@FxKxg@lUP@E9j6+Y&$quRn9qaX8sb)MLr0&$<4T%qn> z{`Ho4W$-N)$(C}eIkGAxu+jeY6yFtlyWDaX0qqb`KU^(q>doN_E^M|}m<(Mf4kDgz zTipem|ML~4dL1O<MI{drI&1c04xM>2(Wh6VuCU5;JP~zldnb<S5?p2c8F;#y%5_Iy zCwjaguXHc5a(n-Ef9XD={+423^u8<dB%~v90%N|Pt7)7u0R42Cjk>?M&@Nv2c>6Uf zfQw{x`o8CafKp!PRGH(_uu;mAG)LrN{5L7f499fa*1d&yA)5^DA)B|5=B{tP8{nnQ zTq)k;g<RfiSt@k6DbiBN))=^hi|zFl8lkWmRtZ?b$8NpquY9n{bAR$P+AUp8{tfGB z7zf-RCZmvpYl?^A+Ils{fTT-J;lr;0y~leFqY0}7E<rF%TT){zu*0yp-oW?JEhXeM zQe9J`n1vEAh~87^KVaL?1F#$bb0yN<bl<cJzDBM_7MK)C=Zxqre;F>rru&4e3NbCc z!sd<1*8%qHox&B1Kke6pgL>UZWz9P8EwuhbpJceJVwcOe#%9tpqjW>!-FFpgt1G^0 zwSuQgT^X^0O#ZRqg2oW{TR~OSo3P-oAq*Y~AtIBbDUvvgIU`+#boifNPveHXy^KPc z!ZRk!MecV>k~f6AyUvT1UUUV?GVv&YoFEV>{;t4Osr|J{+wOOejJtH-EurT40Y<wU zo-aSl3A##QXR!lsH&#~&mU<?IYaS076fyH(y>#{ZxcM@iT;7S~eKqmG8$7??AFHez zkE;BhYKn71>jEcl4fdaJ2^E{3s20YM;y!eftLgOkM*X{>FCz5wQcRS_Zsp;EU9jTB zWkmjVuxmHXpp|o=S)yOC*_-AIBE9Ai7M{R^x4B(sGUW-_9w9QFgG3OO4*XlP?O>M0 zl}E!D!O>LAw;%1*?F&z$j{njAF;^miB~ug#xWD-4X2zrCoVQc>;EC|iYn=A_l8AX< z9x{=0YXj3@kFR&dYk{)7EH2l;OVZQihkwNA*DIA|>p$?}QCQOai9PaO->ewoSR&02 zhwaOci2gixzI*b<@ix3UL`3$uL%ZqhNhe0-?Tbr&J@8c(ph=hOA~*cng1Y-2)ZSq* z`NBFt{AQ>9{NtM_Nzv>g)^7q^2Y+%ge7QE<r@(`eZ0)+hy1o~(9N!(EI)81GgXqM+ zzWsN6Sb-mtPAT^R6VYIz>y)M~);}m}H+T+!7@rwBK-Q#xJW8GsOsX9<W2V11a+BnP zet&YiDBrWTc_79tku=Pl=HRfZBn&+sHnq9YTe&JY9CQ#oBqfRT3i086IBgjPXLfO< zw&{E(T)5iz^3j9ynW??yjyC^`PdhK2nhQr(kEeWRW?~{j?|dzq)gXrxVMhm5pLjwD zB))ac(~qjGS8-EDZCn35^V_20adb2kmv3yYjWFJ2lhDO%Sxj5(54isR+<VBjz^&?# ze{aRBS;6ra$Q)YaU19rtxN_bB$=iWWEm%aloR-xVKs+rMkHXpipjd;{vO*Htlr&<V zp$mm18KdwXva^+i*uT;b#{|r)omO<R1_dqLwZ)2@e>szr&3j)a>zENl$ddNCGfG?H z!$%5f3Ko*cmeH!d_4qGeUQUc<!+htGlYVZpIAa29-eNG`5qSwV$|@XRDIV<+fAB15 zdirG?LKHT&fvQ$F=b<j;7CSeld}%D3J!RS9&x<B54J58p$9PJe_Jyapj;E23ZV4qR ze{Ov#DA-&yTouXnU{QF9pOO^cvs*1Efurm8&*cXbo;tM_@gdIH4nlLzfjMgPzz;hr z_2e;bH2_CK2qy2?iX87xlccrEYm0VS!9lI&3p^qI%E&djPs|!7?^D*Ehi1IDh&JRa zvtcf#SQoA>aQWV(XjWofc3hUdvaWbYpu?0z`s~K@g`<ybWkA5WLOx$jkwC2u<YG(7 zUkw7;`7v_yYry}!+C2XEj&>t^h?Srj({T^zn49udssx8`k$TI+{ZeIvaRE;ygEz5x zouv;c&2>eo>4<R8OXnRl=yX>rsb11l`5DqBKd$af6<}of)UD_i&AhSSMZW&;X@Ag0 zT6tb!p^=P!S&6+tFBPUgNOp%|s$<zYspy*Afbm3=>aOP;O-`Z#Q638@>o<MAj_)rX zHa*2F(*fkZb<cUVa{90Ou5+ezemW*RaGd^OTscnCRgkMjc5k~M>7{N?6PJtSGSQaY zjq1snsT;=QSRl*g?+U{TpslhTD*p2|JLJovQ+<y@ZE@sEmN9|;`647}Hqg{eMp2H- zg>P}{XE`F|Pau_|bAQIr{!`}rXY!OOm>H>j-~9Ma1b^q(&Zy1)><ej45fd>~Y~-f) z;EwT!4#_HzUvF{Gl6F-2u<<X`k7tS#VO<m!8w#Hoto`1vv6U<OzDcHhA;EIk!^qYF zm38g-9I|kWyJhV6-mZ3U2S&OWOr>%EN_Mtvy$P-VnjnBpfR3B%wC$X7UM0UWIzxii zJiSPBH-V^jC9$YeTwvhWU5}qlzm=Sc_Q#WK=B9p%Jl>sHfypl#j>X$=wWEJ`tHz&j zxW5vL_O-)*+S$GXOewbH5mYk9b9Tcq{yFm_m|{aow9Rqdd8*yw8A}g=2ra=?Xkagz zL2XOuJ<Yj6(e#p)b0W4?3*L`zu-M<hC^;jwbB~I4Z{5X`PCu59j(=V%5`Pfe33SXn zDvMVZYW_TG!259WN9OveD>xB>%n8im?ZvOOb924GJ?<oN|JfM#FMYnjaW<9r2X$P} zl%V5*V`B@Urp=Fjds!*+SqgC(SLFp4bDS3Xmk$q}cK1t->TIUxOO2v~d@`OKd^B&u zFnzj;xS|>4vpHE^?{%rGwxn*fpEp)}Eq|i4rRVc{I5sFYhEzE(fcMo~a)O6DP1NU4 ziY2DP9AN8iE>f|4gS1zx3VLsZk4?QM;NxNYy?;8m$(7fif?sKux~B9kt;I}>YSKQ# z&CNDDkpFU~V4kWGaf?Y1pi>jn)f!J_p0#Xy#vJ5U8TVMxM4fg#$RwFoAv;{EDnR@( zWlZ1ODn5<U(gq8-)kE`yUR>uS+Ho;a%HbL1zpVn|lJ8s|uTOhrH>Zubs{kazoH+#@ zJk$<2fnh?X-NFfsitE*X46K^gIYJifv1;;{@0fboY*bUytVmuuJ(S@~7*q1T-l&W# zT@o^<d_-adGZ203Tot~mC;xI8chWVmZD@fgeoFgZF|~-b|7lF5Kemtg^8)?4XWJt4 z<CKdLe&!_)p=5{4<zZw@wfD?F`5(?i1d<Ehr0es5jo-dclz%?1qbTh~^>)0lwFb>S zA!bQQch>z;jhc3n6ny(9>rekd^%ezTKd(`XIm4&NKZ8YLn3*1#TckLbB;956veEB< zcj7XV{ll>MYk^8y-AY5*IA>*~hBb}$?kkf<p8e3@PE)#{pWLoEJs$mKN8~zf4~}u< z7w9R7G!6W0{!XHybKtG?^!1@2J&i?&)6aJW99c<C2B7oUybrOyB1t^wp6l;w1<SVw znB%rf)r7cJp(HaJS8zYtJf7FI``)sOjz$Tp0yW~hV?r$*dIhAI9|s@sM|xlPpau)~ z1SpR!CyK{ESPulF6mc~+m*b{1lG_Vtq7DC1GkmXjE0G5|cq}tSC^%B!BMEhRp3|gX zJ@mL2XX9eOwzmT8MgIeL&`92%f#T50U~jxVESRKD`R~l^+^tUP42I*NEcKg5klauC zj37}~r(FqYg|%K?-RFOZdN%apI`FG1O6Rw}a{pv)?5L@#DtfOIVm|n9q;iA0cUYQ1 z#>l^oA;YLqqDi!YxGs65v$0dB>7u@#D3V&_PKHljS&pQ~(==a+gxe-$+$V!Q_EKrp zuGIAR?~+4jl^Fkqm%<NTKV9nwx44r3=@p&Duc+(lVCp4|HTmW~s*aD!d-=$OT~2E9 z=cgBmLQ?{`)%m<+Po7oQ92uzkPuvXV7=w;cFwMi5i-(a8k3w1*H8o2yoEsyLSkD4< z{*h`SG-cF0SV8aq6k<Zs-iiz>`~IqiL_MLF=hPnP7*vyf|2|=3PgzMfNrF<XSIV*R z3CXIuFlACU=Mg!}yR-uN!j_cPPoB<AAJl#gD)Fa<gElRk^rpMZgZcg_ZGBXJ2aVaS zH-O#7e=j?6nGwd`^i~sq2l{Et7FxSGHLT}ei#+&Bh>O?7yfFx)t+GDVI>rwTD0cP9 z{af<k*UHnJ91i@>zhN~nO3+gYkmJYe2rrQsgjME1DRE+Q!V7$R;G>rhyp*3&+10-L zs7iNtLvHaoJS*Kr|1o-V+ac~lpk24}yfIfW6EEk3O*hNT7a~!_9-YDp(Y`aye;C|I zJ@nQ3WoxXyKGjkBb%azi6YN)$B4jHrMbL5AD$f+DJ!eQoZoD|n=X+{Z4;haL{3A!t zhj;w&Q-;lVn6GW-4+NSn`k5urA-}f!jRfqL%+h9@n`ge(I*H3^Kr2wgq`#DN)Ysh= z_jwZ!OuH2`yi2$=o~Wjr6@jtqx3vmi)QMt$Ve{H2)NSj}OLyOAB32<p`f5~XxgUCs z$>OVZlh`)JbBk$}e5a3H%kiemJr{-M4c|e0C^VGE*FJCrNHt7*9(OWE<CXxP#TKro zxtACr8kV`@I2+Dz!`r!(9bIVk^4hZ$wQCxw9m1d?x{nztmxg)Gr=R|9?bJyE_3&j> zJ?VVL`awKA`NzDXR;T8`E^{zF#Z-x}KB@AU%}@V#K93u9_&`Te`F}r@nn{``cD>A= zD1b65oPXofHnQ5KQ^`BmMg@|m-2H6dTP-#clE1+FZg3M&Ec!E$3o)LVw99pzD)e;K zDwX6X)5cWy8*AxT$s0YYq>##(>NSna2eQgDIQY?;th9?iz3YIV(tGk-8C0C$qg6Me z@*7v7HiEQKUsOOcNzkWdfo|@PA8Jgc+T<tsLpM%f5pP(n`iNie=pu)H=ro<3d+{tg z(SfHkbN)Rwx_rY~8F`!dgux`)DXqTfRle)zkEvyBdC*e(7>C`wX7${9Ke6;R3+d;l zcMkO3oM!Wlxy`qoA2h=Gf5dH*pPiZZ8ZfE9k-47cw2fGLb|u1&&ULimeTS-?d6xa) zDK0cNo%Sgj6!7wsXzf=iwS#ytJzd@v(+M(<GZI^RwbIwx=6~(9K4@Gh^-t6Eb4U70 zk>Q{y{gPtgn>f7a!PV%jFKxNCZ`OU=-%R`V{VxD@K#ITn6Ge*NMWRK9_)rUS`YZaO zjM2JIq&B(u%8!sKYidqe(Nt5@+}Esa+tSz3uGLn1v|d!%V4|j`r8B#mR+@arb?GXz z8@|HNPagP!!rjF6yS|>9QCjh-CBITz73T@4_9v)cPtnhiOc3`qML!8k0=YjW|7BkD zoKP3s+~`#!K3eM3n!B3%PVH_{@?A@O&==KPs8RxGr(Pa5bz5qQh<}(uH`<&Oo>X_H zx4_p~+oTb>+3uW7?hBzWY+y8}kSWkGPwnpC)ZW&lkvpyT)ZV_94xvBY$<EwJZ%TIX zwzS@LI$tq7{Y)~o{Dz*4YBthazKBKJrN>CrLPU#E#WZ<0(gZVF2MGIpw8pbxaX7-~ z_BOLUdVF!lI;~y1cCDxu^5a8(NgarZb-|%XSn{?Y;}uO|&{>zzFjE5v1pTmIA7yfw zVj*4Zv+{K!vPWYI3$KhUq9A`@7wrWxaKIpqEOI-F1!N>zz|R*b_$-(fG4V@Ns$9RA zEH5grRWt$E#aNSIfmLdsQbWP6r-W*zs||~-t`;k{xnVJ9v=r((-iFZDsk-@|)*7gb zDKPvkEvxmc6Y2_~u3g8?g9)JyOVt;O+S-;FN~kTN1MY!nHlkCR&~KU#QN=VGYXD%J zG2O2Z1;R9uvYLDCR;&qW?a_z4mbEf-146EBOmK5JdueVAR#H&tZZUQnH4+QMe(GiB z<iu((B<Wy;<kB>AJsOx`?xnu1+K<g#Y-dmjy4SfO<Le2ryWtB@+!_f+BGm3UJJ`c_ zNxj-)lKI@4+7(F)KTb04K){c=4JB>jW(CSVYe4;BowFam=3ejSG9=BacH?&-Y+Zxl z#R<W!mkWyR7&2psB2##%)c_iXUlUHrMR#%_7#P&rnkRbbMT_S7c7uydNPukF2v@Qu z3XC(X<$TE=13Im-^4Xo(Kd{=WXpM6LX>Ob3I!Y)R7pn&p9nHSnRaI`S!XJTuy=r7n zbVTRtf@tU6)T_GNG+x&Uettq!xssb<$A5Qr^)>djb#;2RPMYBu8(OpsOmVxBSvl$F zBQzJ^H06t0H$-(I{>!!?s=)AsFk0nyk+sx#*cJA$!Cqqtt+B7Ky{)$oEe=gx1<g7` z{7`_IKx99YOLwI`Oi|031MLWm>VC<hnvoHdmit^culdSlmdelMuB@96E4DUecf!k) z!m6-3N(*MW+l<l{maSi!{bqL{F@l_je6gL$C@=lYU5OdxgbJkJv}uH9<Cii5Bxy0h zaG!4PuQGjd>j7a?12rTvGyF_pwRJYN_cymtZrV0?cJ;JqJM}%7srW51WJ?Ec*3`D( zrjOPjEiDUOo<?l9wN0t@Qwq=G6h&IU(V8P8>EuCe@sjvLi#CXJK(~zQ20!B*I*l8G zA4+K?Am@>ol$x8z+^@gSH;g2#uMr%A@4Z;-LY(L575m9%mMu{U#$$8CyM@gWZ!n9E zzD#9ch*OfWo0-ylgM)fB5!d)E+6}oyw6}1C64R_?KCm1y^QZL)h?9z^(dfh5fEa;D zYgr;=gCme8)z<iKJ&4(sFG#COqU^JVV{@wUP*{gANMeibw^hEGZ7H#_PU~6>O?9aR zws$x7^tNo@(!UuEFv>f4KjzHC0Wf#s1)@Q#B{4=KFGhH+T*|(xoshnJAf!bjQNB2c z8CGYnlgflISMH+4uxMh0dWI?nFFDGZ3i#cU9M<I|3!^4FF2y0k7sfPmqcl~N`zz^% zdf3b5Pi0SAa<s)MWn|9ZC&&`C2um`#;J`dk<yN$(srcZ2I`!R~P&Yf{r-+SNzTAc| zbYDn{0&q#o=mXr9ruJ|7N;9{YJB~I!Cd=Axh8kFB_7>*^`?zXdKFda_kp|gM&|pOK zmt&AM099<XM=ymrCC<o+j%=b%HZeSO_l#ljHfW}ex?rcVl`|NjV|+deu~W)folQa~ z$1%Iy<Srj{TbR5)N*&fLOJY}s;1zcoa*|x1G`a#MY~sAnDj%7XKvUK-xh2oPRc_+# zP>MvP=R=;+b|y5OUY>bl^z{u<^ll*$xt-bUg(Q^KKBIu-H2Z*%jV5i;N`9hp8VC$4 zwrrSF1zJu4@hz?L>Q%g^l^cIVkJC<}kWs)}p^HS-02$}9lWLQh!*!~&C`S}lGZ*eO zA>66qe^6!Gn$pSLl7qCd(hy+zz#!SPNK+c4cUomiaT?bwaK18*t~C@G)!Z~p^R!@o zOEJWBOS>M5MM6sO6boV~6JNqdGn6Kwl68C!q}x%!uuY!PW=r~!6d{ud_fp{KvZ9Y# z8oe;Kw~jPFVSN|pI)1IXny(d#gQPU0R5{4jzSp~yv^;4WH$-YGox_wN8kSs3x0Iy# z>r_@Bu(Yz}LF~7RXfnGg=a#CS2>wQ5t})%5JWmFvv*#&mc}Whg0#>pRW?Dv@>22J` zSuqM>AP^+id^gk(UogmNkbmSRDy>8A)HCF7Ku1zB@$2LQe^x$bSZ6E)UF|7M;0ngP z=>yhSw)B*>wry)^rUaR58uBoRWR5l|i+Y<=j%(IQR;H<*(<)zjEyIh^FhvCXTs7s{ zpTu}LsPdcHuVrdBx%X`4Z|P;(`=Xo(az|2cG*CX`wuqgwtoBA>X6Y+bKb8Vf?S2Yw z>BQDl-P$UWJfWskvoliI4%wGlAJ2>7m7fs$z->(yk0I56(146SBEris#kRFX#op5W zHOXTGcCSK2FZXkv?$`C`@(l91b82C6+00Bvx*wZc+UBW9lczGa!<P1z4scZWgz#(( zGrc`#=Y{HokZ5iH&Dw!;Vi}7xxm!BAF#s&r+>M>5y3-dnc>Soh@j=@J{WW4*C{rkf zkW8xu=27fSp|ntzNO)HZ5>1vMdPNZAuw55>6o+wU2~VtQWOHYPH;FS*hhZHv5tA#` z3$e*&M+<OHTBDMOz|{Pn@|?ClLXnq^meX}?R#tBA{m3zgp9EEtD>>HiEkkqPjW3Sy zJcI{!^8Fh77{=#}#xQOTgQ~$?AveM|*NG8&GHhLZ*~5otlOLHg8*`mWH)BAkwBj2G zTMdmV;UsIoPV4@@B|Rhhgn6Wl$Uaxjlyi$5oMAnk?A6&_HL;y+?uxM5BR;=~NG-fs z+^MrQbOwU2MZ{Hl75C+<15U{oCx#^!4~%d!xiRJV!A$D_mh#A)<HP6D3<t6nZ3IbX zX>KqIX6LfGRpr>rxsq2d-}u#z1S-74<YSh8Alyae>fpqIxEK6NTpA-j5+XrFO^Z3Z zHGPz;wHB{B^KY(CneLUnI$=$}jl((2luLyV+R8S(iFt@uTPz22zVx>kGbw(NV6mOI znsos_%2yeUUT$OlmToX;9BP%q-NZ1Wu?S|2p^4>XTW89=u1WV_c)#X{le(gMn1>Li zZZ3{s_=ag0BjigAj_|QD2rfaRGP$9`YPItpaaBh4#jJK-A>U=U7fudWPNRIE+0INf zV+vu|)5eWu1!^E333Abo>@8<^$(gyJ%%{#$Kr`Gpv)()AQPClqm`+lP9QL@WB?{h0 z0+u~AXIdKM6g)%=alBx5$7p$!=O$Bn(;W)`PM!|V(fQbAPmYYko(x%5w3^yNE6DZ> zDru}*rbW8XTKpC_S*sw+JffUdy7{a@Q~~lRCYbh345ygu*vhV)=gSO1#%Uej3_pHz zCcvGBMP`g8#w_7y3%H3c=o<2keJ#Rn$2*|hyL1|hKL%&?h0VPi)#NSfn@y2q&`$yx zg7B-wc-~nw^cG7mh2!p+9^!Y2l{<bYiUg2!mwfM@uA`d!2|?e09;7ZRZmRMl#I)SX zH~GyJ(K%x7KWv;fG-Vw*kLN4VS!5=wKe<0(tR2|=NqI_Sl`^2%>vCg9S;<KD`#1am zHs^zz^+dZbo`_GW9I5=ey_$Vre>us)XfPW#XiZ%mGzFlrCUqx-$;sVx^DaKQ8+l-! zPSqbaPU&`QV|#zg;qqY~;#bZmcQ2NMx3{<Twe&Q$A3oh;dD!ND6P=UuYM#+@Pu;eR zic_2qR{cyK`{Ye;Iim9O#RRjRxt!&6*0aB<w`!$ONioL1Cfc3y3g=2LqlDx$%b62C z48^?aJd`+??qp%Ht;nKrJ?W3cB9R1RTV*>{gCoX_#BN<Tca-EPsst!GvdClPx{S&^ zDXB(pz8}L+Q%y()zvEf!S-o;~73H#yiT`<CNlCL`$$z&u_O*3Z)skN0dac&HD_X}a zZt5&<>P$B)EO$#+TJ)<d`qdWw2^Reti+-)p*Lmvds!r@?y<6H^`?jCh){Atv^f!?a zYuVJ)+}4EtO?Seogxx6L$D-YU7Fp9<P_RKgrkPW0mveG=wsJIO)HaNc89c-@`Vbtj zy@m5RuHVG<jlE56bkMWEw@PU#>>jyknIU|yxQ;O*lZU`N8n<n4>1^t1ZtL8<eM@6! zb9+lq?-ar@&abPm%&pSpbf{YKUVUH?y+xI8RX>H@wyC4av*H9%53;Ozxyw44q+>EM zB|+0w%vw%D{d~R8I%8R`iSw|A94_<Gl}ym#c3y?@%&>7`K-AAtOoHh=n0cZ&b7W+Z zDK7ex=ZP&hZ;g8&bRm&036Q9e2!ymaMjtO9X0-BPQiR01b~>4O0mNW4Vw^P39R<ZE zo0L_l%@`)M-z=A4m+*LY`C<Wn)YzEFQo9PP?M!9uH1Cw6A~~0HnsX40crl&dFL4^{ z3UmO0t4TV}Fc1@xDzopMtMavk#ZUc<?OMZ3EnuqO;yOHKOx@gw+uTbAro{v2*!(GT z_1YKNO}tBMuwm9~*)Sr59(7h(nqUrza<iM6WtT2N)B1)S7o^)J%Q;t)ZPi&<qbx|+ z;(NXj!c^*=T-F%esU`W15(LG=YBiSQ%sQ*D*No%QyxG;)^L%ByKP>x0cZ3g`w8|@P zgW0Yj)9q+yy1PcdzZZq=MR8P3bZar8++gGqGNZ*D4I;`bQQqUF-#o4SZZd{j&Y#c? zwHhZk>(vuhV@AIR#ql*du&&XCy|~xO%Kh@K6|FC(+d^WjU1mQ$ta3UP0ekVpka2=V zs~{JZPK$Xm%%?MSF;U9#rkzjYX{W%wRzDD=xAnI7sl5nFmEB(36o~|NIHN>hqRrdz zkT1wr(yZ=eKk#a8yz}!xJ)?b<=^&$hr?1n=viS96@l);@PWL0<vq&pDANm^_ibk@S zUmvB)35dJo>E$&T2?l*pTF~P?fr^D${g8X|mmaU_n$84bO2+6Om1c9J>YD1qYb&QD z$vno4sTU1TH3kZ>rL&n~^kZE;(4XAj*sg7ms*9g3ZtCdP)=QNR7k9V!_i9yAJzlEG zF!6VOkJb8{Ogj3}6qZSq4qG#+4~ci8`a9dY=#oKCS63hX7B^b)yQQ~<40^kIxOr1o zdwWY$A1@=#t=|8^#L@m+JqV=Cjdd9^(A@m0p0uM&f0%#x!U<t#{<a39xrZV&14qS6 zf5z`Bx>pKShHdae=?>DRuEGX~#LU+W!}zVjkmg3xnVSS)Xx%h8klNkGE!<!#q)CfT z{3dtQfJl|+7r0yEtI(9ky^MBH$ivpgp0>tK?Jb&o^uzL-wf1*5@vTd4S3xUJvEg{7 z)!a11Ut`Z^*4@(rIj6CYDzCMz9g_~!VPog!mcB03@kyOsr*!fuZxa|KmnB+^K~>`i z!Q`Bqn520gT{PlB-{1&!it6e!@Nbmvu2e&`!dPUvpr;Lpo0bWlYR;^-b;Bjih+r<Z zwt|6BAffRaVUnLk<#{o+A*eVB*;QG7fQ2v*)beH3%cx_Qd#abwqa<pJmCqwAYgXo+ zX=2o3e@NXMvKXbCX(LD<Po<OYFT{q^-KUw^+#7Mm#DzeU13T^M(a5JLTnf~%8wy5z z77O!T6UnemFP8f%f+;F1!<@4nOC0h}nli!o%Bx54sV3Oc-Dh)6LO#P`kINJh(&vv> zE6ZIODgnV3ZT57wA!aGXxRak@(Bv)nfzddB_(7$S-(sQ{-_+$$8j<9p8(rrXMc`zL z=bQKN#Irn^-_0TWBtH!5^`@_#*qSj@+|8<2Jc^rH-d^Awj`4R!Bsa6_O<x8VV-~&Q zMoiq3QS0%7lkszaf@?90-r`54hmTiP3I1kY&?nv$P-RK|zbo3Zi*|Yp;k-PKCPvS# z@J%lzU>b{m&Mf}ZwtSq~;xVQ<A21%Pf9rY|cSy}v$e>gtin|$?do6oH+<8wjECQv1 zp@BF^H%t?lO={=pv52Ve43FYqjE}{9d(!RW{AejJMC&Yt@jHT+2?3X6)AL6u6^XHQ z6jM~r;ugGGbmF*icUm5R8{AoK^EZ{S)54q>q|@%!95xQ;i!sTz*q|QZEfmFpV&iA< zxg1Sy!18#<GG7nmca6>VUnSlbQSWo;Riamf<tvru%gSi?@_eM=2THAyx8eD^dn^&J zqVoid7Sp9OQ(q;HOfj1oU%18Z5KAaN#Io#()YW*_)Qp~;)MI<9RHH>M#SI{lkybi& z=M^sq_(Gb|V12_>A_>m@LP09pB%j|Jzfq#6_+qqIbp*a6L0b6Z<37y=J)`B@)PzuN zLCZ<u5w1I`@H|<9OXH`@X)T%t8S>VFu`xhvp|<o4h)!+9A$v77r2gKfm9)l?2=W#E z0GgEPj^8vehAqxSxO>`$kdA3xRI969xq^u`Qf<Y`T3S4eqa}!UlvHRF7fUC)5sPqY z2OIh7<xct{Etwn)s`Ykb71YPqJH>*LU>}r6(~NKWwAFMu<@%o3_MUi<UE8205ovyf zwcOWj5^Jzxvr#wCF_`sZ9Pp!l5lNayr1%`xaF@PAp2bJEv5_>nJCQfBLvPKS6lZLC z8=^y2B8SFN_Ov|nYy4^%Z1Q{AaxGH5f}%OuW)u)N%OuN)@-wI585~W%&h50M$8aK+ zyPfn7Dt{V|?!*WEd=1Xz($Y>H^JFpIZeZ>u^Bd+y@$$Q(v@nVxNp1}CytMMM*BqJn zNsBaJln`<)+!`n6v$$exllcas#es1jtAjfq5RYZ>ive<LkG#vaDIePLB@>YlZPcYZ zGwya-;x>086Z}YOAf6D_FZ+z`lpA$Os_6|I%r%(F+_^07%yTjF?3<C%!H9bIC6Km` zSOJpv?3lJ(W7@eIqlp@(>x|A}Q@J7jM!(;7QqAZcGJ1ZBjt;Lmr|!P7^Hk?#ZZ}xm zcF;N7!-Q>hFAKn#p-lLpysQP1A^birGKq<TA(&8k_oVINTN}c9mx>SN$V*1N%SE{+ z-NuadCC`#%uP)>KADR{I^d{66LtC@;be3Xk_O}kb=0@USW3p|$^JZ+lZf!ppE6U99 zahOt@7`9n%w7MGO@2l9(yJgDr<XL9MDP$^t(YzVmumSb7v@)soGPw^c)wUMeThTf@ z`npaM?^!54H?N@I>a2DJ)5>~UPVR5(X=#ReSzAYUdmCw?=f}d2tlW`)vwf=@29p<M zCbuY~2}Nk$jzIt3sQk4xPgY4N+)P19zx>2rR?ikU#&I@rBsyCjGP#A2NRN-FwH?(~ z5<Kz=%l5`yYa8FC(`%|N@#?l8WibyfVrFGN+`%OR^)Sj|{aM`eyO;dDkLXOQX&q^- zQ}8!QtjsKn!^dk}Dli^`VfM2>#<3c)P&DEbV>zvZ$jJ^Q0w1kc)3%ZQ7*P88LAjSi zhh1!UCDP9Z+J{fxO?c9*9Y3=(ag86TQ@xV*kBr``@|VU}FcYzbtT>810iAY;TQfws zBMc|KaI%JznZKo{h96_d9AvYtbd7V7*~`us;>~BoyeOj6>t6{GmSv=qDKzekn2joK zk++V}kC(hn-4B}I5y!**@OU~Swj=bJ%EczvnQivS+UnNBxb_Ezc<SWbKy?VC8*ZI) z-5GpNQzL?E=Ti?OQ~fK}U~Jp}m*I)_G-<i0-YZLCE0t#28W*Kw(mEWKhZ`r<<W&4k z^fY<>TO*s;3Z~#UqsL5TG%=>bwV=#pofhk)fn=@k%-PP`5+@I5ih&$9oQdf<T&q5! zbR90R|55tX9?s#zn|feVXisT9@9=FW-GdahS$%!Ibv#pZG`gxJ*TrcOjwiIauX(xU z1&Z?ca&0)G`ke~ng9c#A;Cu=>LH>4T<_EUUZ^_4Q8d+4s<kLE&AV9K_&PN@YOlMX< za<0vf>KbP>!jZ7~D70uq7XN8tEJ*<6@)2^>K{OKQZx$P``#O)P+&cpCXpkSZwwL!* z{Pu|?+s>V{BMhU(s5bhBm&gQ#(`d9d<4ys5o7XjX+{%iVyn5VN%o8Tqn@5nigNgRW z6BXP+ix8|cN6svFz_Yk8&S+<`=g%G*j_j7kWI)Yzq&%M{k6Rl=Cc)BZUb{!=4OO`{ zB%7F}j*Pk)^u_2Xlw~}gsylCbKQS**+FhxlR>#1m?8h9S46jzdX?HlN3s1NmVrD>` z2$pTod6;mlIZyM*Xs<`31IMbaxEVJfxtt!j<l*=u7VrEH16ivx^fn1dUEr}ut(JKj zJ)6ckEnmK{%T9;!!Gxb)`GFks_YnmG-Y>;5UA5lU0Ozmt{PzZ9E!^VH=*mst69c}% zofYNr%JkFd>E%GnddZ+)@C-Ws&zJ2cu;wgtT%&6k>yqg*Al-~Z?eOhc>hDcPY+`+y zZp84|(mItf&Kd6cx_zepXN;liUH)V!w1=MZXMCsLt4aRiRn^VUiJ3_h?-R+jd2@de zrd%{6&cq}SQH~g$_uyw4)tOvIFG!R5wzlwKFzF}n@|+8;&+`>`7K-?j7(7_-;D{db z#WidA%1lK;-!&Pn>fCIN(=fAmY?AMckUf8rp5more$28L27R1|pNN5rGNU!fhn>kU z)d8uy#a<#mOec;!i1M+Y0vA^>W%-IRG`)<Se5@BisAtHdvB)m@-nzVsqT=I`7}-*m zRx^u3Is`HdqA&Z==X=PV4`VZ_=nLZTs7g@UW{Fq>Yfku;y>UlD9=>CfxltQdY0b~{ z6B#^wxEb82aMRX3gde_tDDo4adm`!EKbhQ!Eimdb@)6PuZZbW0%a+o`>vb93r*AWv zZulisA3xAOY5MH$GKEKb!LoEF286WLty)KYT&@r@S|jEno@rLDQ8>-XP*kN{EY_-` zHP40cqfEMxJxI^`X-SO^Z(HuG@vE(y#FM^_a+hvWM~ulmb93zvWgJJdr*bCVWjqjU zoQI;$CxqoBUFwR_IXE)+#RdWieny|JMZnee_Lk1geOru^WyUuh_$5R1M*4;uohneF z?vmREER*T+Rn@Gfex0|0(Ki_xTjyQ6;rJ!X8U6M)a6PPHUQ^G1E?+{tEFKA}D2?+4 zv>NGTHS2_b%Qw;Fw_?N{NcuRKx2Ar3b=lH&bcnUiv(`f&u+=nUKiaaNDp?JcuKb3^ zq;BF=lVScA?xgN$gIGR9Y&{<?*(d_xpD<vpbUxZ<Dn_%3=FSY^7;D%{EiY&0dy5o) zdt2v8>W8^wpx#l{)Vr&!xuv~jb7LQOx2dt0t4(O}?OmIBI0&;}Zhf)d%^mG@ACB}i zAd<Z%HDRzUIabiwM*e1Bls`kp&y4W~DSo%{J}W*<AoMYvKYrh<zEz;?_&pD?Rj=H1 zbAgf3*|wlQjK0#X;*eom{U|poU>OE~Ej}3wSe+Vf<x}$3b2e$8N2Sw!^eqNGUL!hp z4Vs~j23k{F?WvI!#NQOJs;TK}>}~56ucHgLqxI<gLM}}==x&4>U$>HH`R;l$7WVQ; zy<A%GCI-DCCa;*`<A1Me2u=L54sRP&Jx0?>L@0PC4@;Cy!0%;g<E%4d8>L&T7<*-_ z#DsFE<;g6uKX2Sc&SLH~{c~q>BfehkVe(PevVtaBi1M3$S6wBH{6d=Ume=>J#^Spv z<>u0ft#qAc`e=g1zl?#22)%?~uBNhNJ<-nR_luNR&CT?|T1%hdmH$8T-UPm`s#+L7 zq9~0rIN^Xk4wRS#lg?$RZEtUq+cuIWAwy{?SWfOeNe;ca_i~3esSI`a)Q6}bh~j%H z`os}uoDfU_0TmD^$RIwM6>vfn!Li?(_H^#KN%4LE|L^<#zWgZrp1s#zds=(#wbx#I zZBk8Vb;%(6ltkm%03^+KLmDC&gu&V#gCNzO1*3gWm+?(tGOtGK3A>A=4|sOT{sr|b zY_cV?^hkvnt9tvaT+4?lZMaOPyn;Z@80mk)&6K8bH|ac*kd%k-)~gHxkC6_rxHKFY z?DP3J6C_^PckwXDKE;Kx0hHdCDn2U?7p5M^Y?&KnvgTOHat|pySn*^}^I}Ysqin^~ zH9yBR#m@<c@MQe0cs2eO9!@+Rzxy|41_yh(`HlsxvGh0$HKoalg9^suR_I78M_pQz z1#cl%c-bpK6TL;&o#`A|w^h}U-z<}_t!sOF>D-<z3YRR%<?|j||A*D=DVpbTSn;!H z=2@c)Rozh~AbVs@^K_4l=r%28&g{5xJYO6I30T0ej&8b2;3-DFDU4f30}F#{;~0{+ zNLA@2Bc1^n@CXwP&I-pALFF({&=R~olkv_^-k)uByhbq8AF(t$8_KA-KIB5ESe9f_ zl$yElbzzmKM{65BHPtjXJWojrzEIo>yR<2ifySyO{jqj<VC%qO|EA4${8qe7V1Ji_ zN(CKcQ=B@B$!MK}nP-4b*}>tupWUvc{0cCYY!z)aGlM=pi!wb~tW^%=wqsl~f8fhG zD$hWAXvn~>p>&E9*b_&3hVjRESjDG)MyFZdr1vLoyn0<o-DZcf=yfBL!K^RJL=D>_ zPaGi)^?<x4WxMTIL$T71H3EWt>ywY1vL96RLyPIIE)eTrozS@vxa*{Dg_`)0`hfOs z#2?MIcK1Ke-0KVql^sw9(mOymCAEV*V%UutjZ8nI7#<c(KMeE_4#Qr*-Tja2RxMV^ z-!7R2b@WoC{MPlyamSG4;2w?}%na)>uH{NzHCytIS-yPfau3@^V}%106~>DA8%K<O z<J*Wj0sc<eQCYHe=@JYlqS7%WFDhcj$9)trV?4s!a+ab?i^iH_F#2t*c%0hZSu{;~ zu}t)dBPNCPg2)OF?}eZU#qWhkno9E2-9h{~>7<i7(ly|AAZX$|#<&4&PApd8?<M2* z6)x>IDV>fQ;Q|Sw^w<#-Am+yuRPnK|G5y+@r_&SxK>s89V#&gvNx)wQ`3R^B=a|fI z18<F|j#M*{cG+qg0_?iXu)Oug^i1`Z4S}I$*l9y=j7?K{C}a_YHBR_^HB1BZP7knV z*-nr~3$NWdaTw8zm+2us1^=glaW`>b)A}MCm=e7v#II2E!5MeS5F0BWVKE;6$@vJ` z(`))zkIo*4>9^30j~`w3Z-$}Y3D43{8|Xb(7(lvj1<Y17xDaxO<Y=vC-iW<lf^ZUz z^Gp2BR-wo*e;0}{OfW_qSD6Ut?NxN0&Tp^ba*b&`=8TW@s0r^eS>r<>v1c#6ppuR7 zzDFQ@sZ!2*YZk6pm3q_s<~OvzaV6?|R~>nz#}7v0`OP#{cC?tII;>u~kmg_q+9hqo zd#ioJD2g@k)8qPNff`OMhJQ=o-%|Lu4E_N_nm7h{6fn7B9{a59fgphF7WdO$4&t&Q z>YS)=q*nNwpTol6bTbkam{8HGJbpPAh51}X-qMrT2CMLeZ6AeySO8{5dwBHjI~t99 z6;zZ#9PXhjsN%)_@>s#k%DuM=DoWvR+i1?)9+bUoL|0Y3V04u4u4T)(!a)8}8YI5F zgZIz)O@uQ%y7vPAO87oJ-KiPP6^XupZs;v1a*u@ZwQ7~_(B%VqClR*A)UIM73xdWr z2y>%({t3TvRSR>lJ5#?&FCo8+$dA--WI)Bjws5*cUBbU9r~HPTLgZdm-f%)HRle@Z zP`h%t-NVNtDiwgoHcbQsm@R_HQlT;6hpGtY7>ITi2uJg^GNz%Ia6E6?L1ULK<|z#F zRS(5n(&s^cqb7{v@g?r<p*Imm;}ei?N0g(xM!>knvCb1>S+iY2HILArG~yZ)yBoX? zg@*Gmmx@6S>s6Cq`2JRQ+qhhA8Xf1H+qG_sL)yc8%r86%i(_M?SI3Irp%L<UOv^z% zbASuBbs^%MM7bzO=LpoL{O|_W0jOb;&$Wt$GTzjbv<@`{9{TUc`;7=g6h8`m4C6T& z;5}LH4gRfq2+t_W#k|~ERFB4CJS^Mv#NT##F9Ya-n3ACMCddH=p5f#{dJnx)z6N-? zWBGTjjI>!RL{%KL$zV#~{erfL#7Q(dfqHN$bFxHp0OxfsLL$#ca*h%TeMdQZSCPjp z7b?1=v*XcezE_5L`S}hW3jqqZhcvm6K5GG&32;g^hxf{$d!{|y-xJRc^LcC$_746o zvBL@~zXbU;{RCVXP=m%*#T5_3F>=@BRfQ>5q3`&WZRkT<6f4laBGnJ+9H%<cIfmF- z)g0Y(oqz?Nct^NBq8-JUdYi2<MvuOdabN*2ZV;$<dayn4`5`x->X?sk*(05JG>Hd8 zFq}Se5+BAipJV$B=HPmRMK7J#%8}3S&iTlkSVHik#m5!=(I^-B$TB+05g)&K^ysRM z%wxLrk>_$XE&R|YK8-gTXwWehv@qD_^IdeG85`kcduZutANdHZALw_8&%&eaK25Gw z%>RAlw}EU8Xw9uv=@t;wa!g*5(m0Fx+9Va?eA7t!o^=C4y^PFl2+>iCbQ_HWQealB zVfh-QejQho=`h2?a+LKI{Vk*(Qg#e17g^<z1xzdsZ`e>A2#OP^4#nRJFRdl0WRaVo zn1<9rCEzo=(k8m!>GQlJJsu9LC-2AMV!xd<kW>(G9oX6f)Ax~|(hrD&{*H((5Dnw< zP4(1oKSCtLzz{_{v2l4;nK>}FRRN^HaG?^&A)Kf{Bw<&<(`{rTcH76}5SG=zVEv(T z`H*Rg`HN3$s91LswS;)ti?kZDw?>>K6tD+EHONX%@R?atd)Sm8)nhPEed1ajxS*8) z09%Gj0s<z_Kab=WHPUJv@d-qGUSm11=HXFVHPlu-nr!%p1r589e|NBzdKt?v^T_N= zUMB7O%*5_#axyV8UsaT(<V>D86UB(m@bP-$I7p;;4v(9~oLpk9s(0NyKL4NwT9b(8 zv@fG>@e7u_I;s<8dbir45tOs?p}vL7B5b=fr_%0+)hyld;s~Ey0wT#(eBBmqLXpqp zNv@0Wues(e^+SCfMK1L9ROM{6?V>x)N<ak}50(M0AeP77$;^>|vx)$gAl?&nP!CZh znM_q4Tx_^L{4Luq${CCEthq=6qbjRR6RnE;4G(M4l%NRGH2W)cItJYal=Eb@AB%UX zM)Stv80{m)(*d1v@UWRz*)a#Mu~Q&EiyS%$D-6p#Rd1hs1S{XbhJ?@?yuZp%5A+gU zh3)>x8y78Fvc&Hh>MzuAAq6smF@T(sbc{(-JVbU4D63T}9pt8<0!t2OSlVSWjFV=k zTnCb|a27@@B?^ljyyUR~%qpCW97D$n7|FTQi*)WNoXX;OMs&=Dn<)4WCQVZ%$6~9z zY$$K7g|vjLI;E{H@Je!Lzr<%E256}P%GSzdl>0c$PTOG1EL_t71pg=*S~XpBx+1+? zfsU59kD`<;r(y6Lpyh)O@o=evSjne{r6Tg9@@Q+}K32ihCiAcc2O;j5D}YvHIbX*~ zhT|{;i<=($W>H}og=8D^@uq=5;pE?AEW{hH1*GO2+KKscL%*nMoHlv#0gw>U&sepC z{7|qun_gTBG>thVOWqtb?07B8<C0kw<eeHh9@tqm)zny-0GYT5IOIjARnU51H6fOP zMh+Y;xw=hV%ORdGYwvwBj8;sw3~YpJX_c!<d=fUep8QSHX4e`39f7hV@iLy9_-V#^ zts0hGi09VhXa!)3>NN8K_8XPS0*4(i9JPw7FU1tgR-|OsQv-PK5>-!|4_9{-vBFkN zE*g(?{24VgzY}Ek9D*E66Y))8^%F5lO13ttF`5Y%WNXB9DD-j12lLnTBt=W6Wvag> zBj{f2cMR=TFE<s%H5%(!it<_H_^QM7(rsn4dEq4N`*1^pAudcstj)Tx2)oLF9|{Zn zb<m(~zJU-ldS0Tl9OPdV<^!ua5+fPxc?tctINqnlLUNBnykIaB7N#fHKd5AD`B^4x zr<t&2nXkkL_HDv4%V;!TJI#CrSuMMG8Pm!3T7De(-dLFxZPYF#FkH%4B}NN6Yt12i zOOkO-1o^QzB8(F(de$Sr(q;8Hm_nuKijB!l5qz2lL}%1!&DQG_eOt_}S}Pag(Sl^H zMRRGONDu)$G;G52`x0&ze9}9V{WKZ!`2>ReG8u-F8Fd#i4uB(iO3MVB4YxJPx)xiR z)7hwu%9h#kB1mm=EFVq@f+Yq)x*FwkbCgXWl69$Fc8%YLpDk}}o$Fd==NErFbK#&} zKrmXIt#c7ZidgRSZ3edF4e@8{5k}+eDn6YNbjN6PUBWaHadk;w+uWn;Se-XB8~tP~ z`jMQ+S&hidMjx4a`Z(UsI~#pu8qi1DAjr%%#+l?X?zGD9nXTPD_3iGm^Ul`pp89ro z+j(becTa<MXAFX#+1lNc-0rn@zYni(&}YNz8NA!!0e!R0!@jzC*lqKG{@MDtzpjtF zm)Ln{>*M~qKJK>XfB$TK+@IXX-4+ArpRLXP^=-B%cK>YS)1Np#-N#t@QTI(cVLsnd z59t_*qg#s#UVkMYR3>KOQ&Jx8wYP=I9ID?ZB!b(_?vdHXZlr$f?72NM+t`iNk6qf% zJKNZeG#EQ;Vvo$$|0Bu$Z_n+`v(<fbeckQ3J-ohuu&+_slqi|3`CQp)uLG=MksOtY zpj`4%rocV*P9*?$+tb+#oN;pU2T7}c48j`1j5F^8ryr8=TD_1lvp#UfFDYMq^fF7F za-F%Cl;4_p88hnxXWWzW#YR12CVWu0-Y4ZxSnXqAX06XSYkd&%7&pRShfuBcfoiAW z5LsufckpBrR{G4bRz<?bv=Y|M=#1e7VPjed>uJGog0L|ygbirHW(8i@cud3OF*S@J zYTVYSzO9A>M2*`T)wk8m{-|+VqXuow*lmp(w>3&`t6>9Sbt18ks>0USS~I)QczzY? z=GR&?uZxZQvsl-kYt57{Htx@2U4O1M^SRi#Ka0uzxz-lpy<+2b7VFz-rfaeBI204d zVXc{)c=Cf~suLh<)n02>ZKzw_x}8)GuiEX&%%*5B+iNYMyw-S}YW3q}=4!3+IMwRM z$xPE)<8i7r7$;i{_iBy%yO!MFX0A>*uJd$#oy}auW8gw^nUq9%C6_%(ryJLGI=QZ9 zj`k<-_Y|k^=Uv_6<!a`j;;k4a$ObA$F_aujb&jEIP{wn|SQ%WyAsGz>;he`TvdXGB zd7ZXZ>T@pEIXBNHZ*5NMmBq&%XO%lvD2~PZbd0l26pN?`(O#8Tq2F;>V;Rfw)Kk?k zJK+fl;(gX=EP`^?f~YA^l!KIW3GbXsH8fxHgiUx{vf&9!SSln9TRLBwfB?@f!fo+3 z2AD`$mL3m8(iyV-MI!7dBnl|DeO)j)*%0qICJHbO@pyULQoOg3uQtq+!$irm%;d?G zDp4K=H!)AhiIQtM*8Sw!+OX5K;TV9)0BAB^4R$Qz8lDIn*Sk7lppP^4?kUbvkEp1# z91k!j1f^0#{M#^5fYYAW8%&Pof(Ed8N)+HuU6~EF2Jn+Lf$j488o?A4Ot-fwY5+48 z2~0+p*-uL92IE%bM9H)k`)QyN?vmi<b27p`I8jW7El(5$nE3NhG~Sp-E0`$I7L5)E zwFcuHNJpeeyE`%)UDj;6<TEkG4(*(X8nkmlHS`!8zN-;@R>KpG4pbW9tthzTY`p!G z;dsNoDPp4JI^N_89A4t?0}LnOGZ<CQs52j(Jcgt2Neg8ecle3}Z*i5*rFI!Php#w! zEUwbI%+3=!<LAnr_ULt5qqnnhTMTFEG{YBa{t}aI73i@Bch%uBv31?#aK<nyHmr}~ zFr8)qw>f;qfw#C!XWA|!@9-NZkIij5JFQHUwM2NuZTNUYU<=8xitF$phQLlmiLi?M zbY?8rqQie&`P1e;oooHR%t?4&mWW$%pRPp~?y}}T4y@)rUDgaBHZzupdyI~$EI!n= zB$h9Etn3`lJg92k<<gJhTwT@-s5Pd4hkJEd^k34v$n7J=iMlM#l}(1#T&v5X{Zb_v zui{)?7S$IWz7-o+&9%CYclre<P-S|u!CawaAJRvQdCuOwn1}*9VnXMUZn5M$C(9B= zN81Iy6uAHvUnsDR2%1qSLlAt~00B_63nwLg(n(*c(yJ2@VZhLVI9@>jui8;K9dY1; z8$Ou`lLgA@MKo*@@Gh*fKM1>$C5w(-gn3T4;T_oS7;L^g>5;udwb;Rjqw0_kfHN*| zIX@|9tpH4h4;JiN7q*b&?Ipf=Dx1V5ix%sqdy^`C(oSEd)AJQ$i{V=aK7n%(30a7y z#3rI*od?gF$(%b^MmdkNLoDv-I6gT~ng}DGv+5-$&57XF*>5>#*K4*+#=v7#@(A=S z^`b%Ya>4jG+D3B7NlO+PI_g&GjL!jEY{0zH8kwR|h}UQQQM^nq6Ad>rc_Gpzn#{e4 zFrSY~jy);GuvHJAL8Bo;o-ErWyR`u-p<DVqh5jTS$ZMs=l0{3Y4YbAbN@X_6rw}ls z)d;$#g-uz=NB975wq)Lbz)PD|wn~^S7IK&^Dr6_Ziey}>Gv+I7SfFUaF$YRAD-aAs zRb)$9tl*`QvWq8XrZ5Ylw2P>S_7Knx%Nj=+WMEV!TP(|<EM;Qw$ljom=THo=@_L#r zTgFgfjm%Iew7NXqB}m8)7HI)VKrw!iFnh53AUz^0rBYDl{$IS9h$)z?0OlPbY=leN zwo_#tKs%Nq-nyg<TK-80R;faTD}G6^9A~ibTMk}>dJOt#^%T&X8&!)@1CA~m2bn{u z&^3!%ve+^-3}CcziNR3NA$>(qL7(2VAyaR(bZ7GvMzD0b>i2w5Cc7#mnjHW`Zy^<T zFxc_NCaNZIwNgElZ5LP;I3k{UP+jqyz~S|udN5<JG-1_GtYK`xWzuIPk7lLt7*0{e z6w7E@YudRA`=lJ9>2x_n%MnJ|$z79A$NNQ@>6p^Ht+`%HyZw^@z1Xg6IbGLJ30Vwt z$fe``l>olflrWL5>$ijqru)W<<p4P;c`nT}nZPQk%P;XY7z!gGU+rHo3KX!#$zYC7 zvA>@xzH#r<S4H5KI&k<pstRR-6@Zt^&s@Y0(@56kdWsYRm|dR7A+mj#YS=HjVj`Tt z;;xH}fU!}Ta!a5%CLqU|8WoCF0ul!&b)d&vl`lkm$CI2!1{HMpGODZEX|DtP9%rG0 zcn^G`OVw5Sm!8;57Oj;Ajv9EnMT9JoK{Ue}^~eg*^E}rY5kRbwfQ6V|i3`xoGOBEo z*VBqp&Be!B?EzMUZhkzrM&uh6z^yQrHw+4Y+G$&f=mMEPJwE`T)uI4)o4&{A9zBo4 zs5&hG8JiaHnjft)oXFyUFvOscgSL!QP0${DmA@m*jVnmg3cPry;EHJOwmnop$Ju28 zKj!->%HS8-K}jI3LC)4nc;}1(Y6>82wW~^a#>;9REa|k%A^Kk?;h0+ZmMmRn0ac<& z)~V{j!FmVfC=@j^te+7G8bMk2ESrZ*{%nztVqq^`E>6KJR}J&ieh8yzhGN-rlL7Z6 zIA}qB60cV)Kq!V%sxSqzCZk%~${sH2<ayP>e9R)dz37t^9RlzT?yL>B*oH&Heq;BJ zjw4;9cK_g_K5pB<*Ml#&af?4mHD`~r853J~+Np*e;gv|5cXU5Jjz#gx0^$#ya_TE| z+%d5-J-6(H92O0unK6zliLW`bIwoF-*T0Y-aE{{@H^fR8#Rx{_p-&=zx{4yKMlv32 zGL}f<!F9{0w_I2Gcn_{PF7p_<6hPq3h-@t%2-irP?ylt6cO%NnE^FzstLNqMp+Ha8 zBY89s39gjK4K7eWPmHCD6uAK-DoY+-z9f@?9dE$AygW2WxaqfG#>LXcowjgG9>z@{ z0@SI2k_2gdjeZ+%G|B<zu-OH@&*`Z;H_p6G<o~5hEMA%~?!<p#LHOG8E=r_L2MEwP z9ADYq;1^Ir#8{3wM(>=mc_2zp!QmHyAq$xZCd<X_HpyYOws_~RT-CVgOJ&*)awYlX zlU&PHE?k&RIrvq?J07M+)_!Sza}E8powT%zy|j^YfMp97Ef!~N^=X_yzm0bu_br^J zq<jk&`ShS{#0!z&uYb>RcyQrhrmF+}DlA*H5C*>zk~cZrN0K|$ApTGeIyg}839AR* zFgrR*6F;T&C{LkC9*oH!LQ=YMyWa99^y-$bR>@`j3javQVYZ0}jLL}{KaJ{*&>C8q zfN9RYf_g#1hxLd2R{-(1SePu>f!b)4vp_vN0*a62bo@orHA!>^1wDlqq$t1gNkdLZ zqXIu0MGrsPeIssG@%bcnz0{6PVsDaOG90^dA~^9k*24}#B6?SEphvl&qubdbzK&N$ z-k6_`jgc8VT@E_hppg(4G1mLG^)QnWJuM8v=wyU<^9v2&BHP>E95Cp+2|J7j72ogF zu-(Nh`WER%*Uc*|?;7%S9U@jS(Inr2goVCJujB<)-Oeub4U*B%Uh*SH+A#*+25m}$ zGjA$s7aEChVeA=AQ-AXII2?>8bZ!ES>JTMk*UuXRJE`67uf){Vng-{94TIdi!s7kN zSz)2WVgEEq4ikx|D-YTgo4zuI96`6NT-ajV9um$BzK$HAUuHGS{Fc=%I7jt&s6oV6 zn0aqNjeO2|9Lki-y_iJTP#>Jb(%(&WdCZ#+v&;$Qy*vR(yXB9NQNTV<>eT~+KIJWU zRi_|h+%INdxMQ|t?@j({bhqTKd;_cn0|Rjv=<R&_7M-XQ=b`$}4#!^T=fKs!fuBO0 z18#sA*z7RuVQ?!t51bR9z-~<Uj%1qVfYtBgDeyVq(fi*3Iu#n+$~<^$Z_jXMFx|Tk zeP-qDS=ZM;n0an_tb#0_2)w4Akm8I5IORHWB#4Bx0Vdj1FUT+Tgo1Ekl|hHF3JJ6X zFhl80OBAUOS-!b3UadYlp64qr+vt7YNFk_+!~2W+X$g9nM4n=(#GQ(>e>OBdLPx9o zRK0Rn%@f=zBldV8uBgt-WeVj!<f*HM2aQ~y+Dh4Rks%c5H4t*{n1GeiXP?U^8}`qN zD5pZ;OXl4Gy3SphAjkfrq2EIfJXq!EcMSHiD5s9hnf5KGl}|l0qBDkCtU&pOr3v^g z3wzV7d1ous$~RKL6(P($*M7ykw7Mw%iG83JMe7v~>!}^~-J9NCjO<rG<lZ`|3R+gQ z`1xpCD4<R`(y1PMIL0NRV0mI=i7Z2UxP)gtO5_!qsCG);Kx%-(>(jY)Cc3I`zc`^E z>5+#r(@rA2*i#O5Y9jrK0A>3l?(6CkAwnM0FakWwQ^WFvg?~hYddBM|{f81;kVSQo z89RIurw`q8#p%7TlGyJUoml3Mz;ck>WW%U8Sp+r)SXZ|d{zOfA%PFwqusRqzf*Hd% zg#al!Fk+u>vPVL1?^A_w+9VY!3$;Ug^oVEscjNwP^6WU`{^X07{i^EkO0`(FBLdss zBE7WH#6D?4q<@O=(2WD|TH|vWMpr${VcakCdow~G^t49bI{PIQdTWFL3KbVd%E>uz zJg^d);Ae+L>O}3Retb=;OKdDDFXljxc>!-(Xwkr&%-{vRjbs)a+*LH)ahcO%^X%nH zF8H3aZ1k0cgQM2r!1a?$F!s189t+!?ImbrE-f`!TFX130R4UCcW8wJ$`ze#n0r|*M zzPaQn0i+oZoful><M{-D<1giph0o&9zM#Lnp;!*lM_8zSdhBFId==$GvI8#^S*I-< zB5zFlrQ9x0^zhn8zO?y=k53*ITI6XjVNJ?$J9`dx*qMcsJUEsul==-eU*1pw#zj+y zaMh>jxfoAFWFXj-#U*USE}-IXT$`5r<jhcccEmi!k9-9r9P*$X6|5WzzvVQ&E?wz6 z42<($olXy|Rj2;lB1;#6_2WIQ&S2|R7`{7V4#4q_-*?o+GYz{i#5N<x$-MYCYO?Do z8lDCfO=_?54JBJ6yUm5VZh;C-kYv&T4q>pSO-`RAkf^ggodectr`yjV4X-4tO{w-p zY_Hk%L*{kMoQ?OWyx}JlmJFw#s8f*@^{(a|K=9X#UV`QTV;{HD0mR)@C4}DM=}OvY zN=U<L)kJS4Rf{FXN{tNR&Oz7P`G``w5KexJ&y6D|bIq*ViR&?!ELya9A#Aqz<tfZN z85L-mtf1pc{?1I<-@%ld9!xpu<ny^3-Ck6*ErxsoZ$(pvf~Q`}gd~sN${Q+?r%UCK z5peb@-;7Yc{#`{cJf8Ii7WOy3;5JI{<M2CgvY|1aVVczX<3Kkx#$)JPA@SpHUg%Y* zGT|#vS7qPD*EDB;cPN^HzL_un;RYeQyDj#s{M>@DdfW}j{7~6@x#Hf6h4WJw&!k4g zNPUtd--=K8TETXqgE{QptXmW07FQgOmXVeTVAw5&_Up<AHpxDAN2e2ua(KDe5D`yR z>g%$<l76l>>_+n&Nr^ozsph=X4dkU%51OuK6ZNM;px%I_xY@gs-}O`BkjHDfLzVhL zLtfqqA1vBzn?Qp}U#f5s$ykP|Ym#oWu5ZmK0F_5QB$4L<-USQrWd<ddXVKTTv$_cD zG4D08Ktt`C9~8*<lujcrd)8iy*zp+bh^w@2OR}yX_AZW}17t7mp4SkU4d#6M>^)QI zFU4!UNv||nvRE_iO{{sF%gK6*&&2T5HSbYcg;<(MoC7Qi<Ce&kZcJL;HlQgXt%1xh zqO~*l5=YzTMwI8~Gw;!ww-TjyEQg))JWhOG7Yj<j55~vK_@oO07x`&<p3fjDS1e4{ zdqc_T3H7iZyHxcsvOQ_`NF`u*KK+1wDeS`nS%h&Is9Yqjq$EoQamEpfkIgWSo2`>E zUGXo4sIJat<DutOJdf~Oy}i)euR!9g9h3obYir_XB?}AAtwn6i4OqgcPDWF-vEP89 z)s5C!15F2`^1z1B`cC~C>mx1d*$S9C!u34QO;y?~!~1Z3blZW)d>}RH*P%3q1boVa zy<4U$Co|JkM8==kvt8)znHhM6U!l>fR4fm$P0ZjGDip-uyKOjdvn3|V5{nj+D$U`e zyhNKFhJ!D!-;IvJpV&ub6S^dDX^SSvirvksed2J{nRBuo@yz}TtJdyIAHm=;ViZ(4 z`wG3gi_wr2vqI0YB>LIcJc^)_=!sP<nxG_WGAys#`vxmyQV;Cy3tby%u3vrYRU26i z<<5PTX0fU`ixRx_E;yS>72JuUHYQ2^Zl~Ge2(e|6R}*v(DjS~u<0<i=erc&e9`h6v z?aD;jNzQJ6sY;VqR;_`IM2aAv+@q*K?50()BHAZ(!0e9}Q7_KaDGx~-Ndb9fLLPM% zE@&-<4rCZAPRg2WG8IC!kHEd1%Hr}dBg527JdQAv&}TfZ76n*m$}1^x^*%M!g00Nn zLXX?1GN_{Q)MS=68l9k@ozCV-SJZ4jk=>-;qk~QxC5QiN%^`VgAx|*WLXS1s{lIfb ztGf6+f>&LXS`fA%_dsUNgTjE&<v!Iz+T9BI+GeRc%HVO}MzFfa>aaWOj8WeBxGnRw z4u<z0N;6xhuW1Ok5A|^dbN05zXuAQd*0U~LNL!14A)le&eXO4|epZe~@I>K>xMhX2 z<Q*mQ>H7KTg&I#c6n<F@_bto5wL#~cvkeyHT;s>P#(gSZHkfmit+t{2hEq10bKq3l z06{>$ztK6`;%-Rysr=X;c8+>D&~w15ZRK2W+E8rvwy~mjpV}lk;W^3`sD11w5iRDx zY4qAkmm^Yv*5=4Mf-qVaL1*U7o6-pf!y>!l#+Ep?1EZD5YJZ_#zKp?fv_?5fuL6hl zWeOZKQ1zY%8#E|gY+%Dnr7RV*d;9}k6{7!RODkQs=d=&aq?_=qBU2FW_r$J|Du@f1 zor&AKR@K%FPgIx<-Z^)|_KXbn&IwEBsC58!ZBmDh4cgPVY;#(fP_C0$Cr9zI5srZt zuoL$8u_GJHm_g44=G~h1g_WCb1)}5Qa4V0j5oW=WH6uA!VmY&Csc%cd;r1*rG|PN? z@F<|hMun|>^19W$otLB!nGlsVA!zbELE){W*}jnG@=CKAp@@~pT{sEgcr+-!K-*{! zn!ZZCX}-F-vT`BD1Hj6K26!bhK8lkch)b_*^1aZFSZNM-`Fo)ov64k%Ni!cSX@yZZ z&Bsc^@g<KNu~Ho@Q$4K@gw^z}@VXHz#n6EWQhH<MLXITdWjeZsIQW71tpn|q3-t%% zvS#FJ%40_~d5RAsKA%(rtB%|UI}aKkCE~9-lKbmOC(iT-#jiY~qr=km*c*zDj@6QG zc9<lV^QH!qJ!^S@Hkc0_6JAJ~JRwlo8yCygDUY10XqXkghk6UwUP0wo#{=e^uE|47 zExbR-d|exTi+N(hbbam~OP39Y+MXLFfjKd3^8Dfc?tUNZ$&&+Lx3=}X%ErOy^;K<X zzHXostWJE_gYKB%o#N~Sua|s^-^}|%4clAH`YZf?wu{7<R@s9C0yUQ)g`rxT^R+g= ze;ehc_`#48!W<^~9jko<VGgzkA5{cx?(t1$i~;@#)oNlqYcZm=P1Qe~#0bE-sZH-v z2yUoa&eck-suDZk-vZ`X)Fm6(Y=j<yA<Z-oe$H>*Kvu0o!xXLTA&<ZUB@fzFi?%$A zMk@XaD6nasKROM);L{)A=pWqdr+a(*yVAp%ZnVSB*V_FJ=}lyO1s_fPmNu5wIhaYG zFwozFuYot$ayou^Fx{2$P$!|-FpVmV{>~8JK*QU0d}`>}Pr>A_M!0RpHUWntgFsjw zhUwit12<XBh3f4s8`Or`0aSxmz8!#UT%RA<a*fVX#OI2+R4RWc!Y7gBI~Qi7$skW} z4q}-Y4$Iqv>J7s2&HR=kg&TlwC*Zdeb_aMcHO_&TtI1(9{Efk?hIQr3%2YnR{W=j& zb<*8^kKc|vW|{u<PGmJLog1Ok2$)j?MZ5#FJ?xPvuRv!aCL%9)Ch3hR#5v9FfxLY& zP_I_NyRTucSMsQD0MNgO1dsae6nv#vMGE*x6%s-Y2t8taeH(`RPssFn_+mX-f%nk! z>?)pqHv|7~&X37?Aj}|Hkcp5MWbLtst^x*3lDtC`+-(y7R={}{{9CkO5#X)ye^`$E z!2fkv3G$mltj_?1o8jLE_}4uQ|65NV3l=XMr}}ox0nof?Ssu?PIy#ycEkXS9g9G_Z zK>XYK>EZuZsQ)3tlM~`p89K6dvR5A${~k`pJqHZoT@1gRc}n~c%e3Ok>TOCHN8y<; zfG(W6eMZLUV*j9TqyfXFc$HgdQon)A?^~Mly&XXr-?&=gccC_SC_ICB0Ijn`7t{X2 z#Z7McA+FwBnk+mX-)#(4*a7=5^4yAgXQbo~-8RC^cOSj5kn2z#freL@4$F5m9u;sM z*fdZrXSSmmnpL80z=4h#P{zlzDrG0`<m0yqTPtnk+5wpt8NhEx<9EE#+T>Y!<Z4ly z)S3+eGiaY)%@kR|f{&fV#DVt#H}O-Y^qC8{0}Ox6C6q8RGQ76qIFK>eMi^sJZa_Ho z?HoH1S~rarXWInH&qZY9Q&7eZXvbvsa4c~)IdPDc>PB&ByvaTnDvX?SwBRl|WLpD` zs~m18wKP?PT$G4exHe;O%T9zB#jm!x%8@Dc_KwvBv{hI^o*?*{L^2X=a&Z!n!kG_} zP%=CMcC4l<tia6~IhSzIdc(@jnvfflMCnGat2ikd`-UK17aG6$$_W8ivOuHi!nI;l z8{Vbe1iWK`hnDPwS7<=jTc73v1jNDr@iqd6Ub|eZL;`A;%b57v=tAtf1_rT%*A^Kp zaI7QVO2Vs7RG_L)BD8%l4*Xz@&QSINUY~(*zD(c9hRk4kxTn95_)1^@Fn#!*cP8NT zTboJ7g8riV_=EUx_+SS6#qZfL(Az^lJ%4S_Cj6!JSINCl*AHPmIN<2bY@j~ylJVIM zZ}&&~x-)Bg`Z72+nGFNOn;}g1ZHBxcb7G}@EH}d!h7zk4uTveUCo;umu2ljqXDr&a z^;(nHZtfA08US|`?S8GGKIHT?tco7bg*OT9I6*DrXFsDa<*Y*eh1_D6FGvT8Pkwsp zJY$u|=j)2C+LZ6oy@9fO0d;98##TcM0Cj$_&0ZxVY{ArXatp8?0on2-Wl;UC>k6BN z%wS)-ck8-LAKr`G%7eq>yeXDOSLnJmNL~6!Ukt)C_#q{|Ap;*KQRh!e<J*VLuw~-9 zxI^T{hR9PxWDO7VdTUM6w-kL_-|CQ?7w2I(f1oa02R=qOX!uM|+iwp;gNQ2>vh-W% zWfHod__&ZV5gpwS-8z)%LjKUC+dG(9i`=S7zMJrFIknK-0@d~C?(Z6*y4lrGkz4U@ zZj)!e*AAxFA@3BH)I?*`)jQIi@rQ=fgNRvuXZpIiPes>EeZscLG+zcfH>{v_cGW6g z8ICwY-38|g>G&q=zOd>^wrVl)raP6ri%F9n75gj`&o}$);knnK6C0+f1QQQETo)(3 zEeWb!h>!d_SP}L2q2uktj<=9Gb<zujP9rrOgz_#u(XqM!j~^q0y%c9Ie6FgN<&M8Q zw_y)Z@k#fj=AbY0wB0vz&*vG7Q6^5!V~Evx^&BNoC%+x9ZN<4RnreEweNryUDo?+g zNbpv_)j=`qAgL|ra7Y<z7VO)jWZNFj24d&et3c!Ybs#9u*lR6nV<b+WFR4V_OLXBl zVZXpX+&tl45^c<p37{=63Iw?J`OU}Wu%i@zMg<lM1u$0Xr#B1(is9NIU%?-PVFf@D zhVS0gvJ;wM_&6!>JB!797!;_kDy~pN|6fh|oA*WLoAyCX2A(!d`WxR0@6fBHz!dyV zL%qYIORbhes)G-miJN(0M8plC6Y)+bA8f4J0=vO-bgD1+l5=7Mias95aN4$w?~_*! zBrB2w3COg5;TN@0`j3p&%>Imz7c6sbW0TMN30xr)G_}-bb^D|u-w0Q+ucf$fD5}uQ z*@0X;(=@2`hvsZ(M;Uz{!jIUQQ3Y)&RJ1p2B7h80{l@oH&E5#DYH+jELI_)YdXJPW zZx-S|f3+{;Pd}RRQmn+KBn+n_(gDCYus(M>ME|2D{5_8bQT^qJOHJe5c^+M;3YN{3 zHxCAwV)1AXJ+2hSxoXMafP31Y_Sq=9f{sry4L14y76d%iDwkFrG~=t4%WBsG<z{pK zmQqliKu}dKd!izpD$)QD51NV>$vztKL%PY7t4)@0&X1}0=PURkRIRFO>$hs5sojYG zm3Bo}Y#f9Am8)5GsZ5|HKH$)Y7pe<jFmb8?vFFg8v#KB3ExB#O!D-Y-I7oG4Q=NcG zi78a2d8GD^!^p+PS|z~AJ&#W5wqOgP*7O04BHUqUOxt@hPM89wjilz5Zm951wZ1WW zG;}|qkFlxA{8oLGT@Gmhtm^~42=KiSNYz<b$VXnSPaft?QSsqasSI@!g^f_*fJzA~ zbo-MoIt5jgnK(+Rj3*TcUM3D}*B5VuRe&e?hB4WqJlg)NQ(L)1B}LXLs-T{}{l|1i zdrU4Ns^^of(SmS+iUhiW3RQH0ZFW78#G$UfUC(^pIbKGdENUpaFrZI>+<K7`rf$~| zjiK_LP4rqc(`}Ke0FKg*oWY@JPL1h~Vwv7~cS&O24wO}+iknB7LkLZcDYCOzKmxjX z$jEg0u{lHBRM9%KR-7=J)J5f`2$<D?L0(b+JZ9U1KzMkZVgU!yDX?@kY3AvBjQE#D zLsD18Mdl5-Nbufeo}7OAW%y^^>9w;2<3UsrYK^UFgk;`0%qdynp{-$11|b2<QOmv} zQ(;D!N0o$iKu&<6RK=?VeE*JG4dF@DdRcFL?O!C&4flicxEya{RWL8IBMgB=yj;yg znSkX2kA5@hdZ;%J=sq5WE9_Zo<ONx7ygXzO^6|1cJnJmb0aDJ<Um6()HjuO(9}>Aw z%Q1X#>!iUl<oO-^hY=&jB$Zl?t8|_4AeT`2i&X02IJ5xqS^DdsTAT!!(zO0?)9F4n z#>t}_KGkO;D5Kt(#swF;ich{Ck>6pQ3@n~Wk;^l}S(xUD>yfRz{*5PoG)$iOlr^8U z=THbB&Hhy9YYbPc>QD3;ZRN2)z23|)><4@aw~h=9WCpv^L%8i$alQQ~)y2W~tTz*j z+tA<Lv$hA3nYjMp^_jsTh}n=HJOL9h+}hXQH#Cs$>VawDsW^<tz+SGir_YJcz(%)! zh@$#NHgqC-4$(7G&j#4lsBhI2^{vYu80qU8R^isJ{=Pog%J*|UIj%cBwBDEB{R5dk z^&5-MSa49c;S)#thwZqvJ$(`-`BkyrPzE+!zJ%OB%E#ZmJ$>-Wzj0#*zc+8_?C(|K z)(z?5^$gG7T_b~o&>NfWIH%7gPFH|_s1VydJc#J!du{(9lz<uedtk6<W13pV-+gIJ z>+J3C!htImm^M@JzoX&b8-1a3Nux_K9?cV~i_be0wx^IoQT*MU^*j7#J_Df11rW#- z@VhzJ(Tp1|I?(WVPAS-C^lw&0x3*1kSD~3bo{6o3&mPOEyfR2p+vV;Gsp<Jtze>LD zVBN*tZ$cEFaTjoZ(46D_F}9_uT|#mk!I02w;1nOg%>kAw^=2H<L;{pV<{nf{k90Zk z3n&Q5*h4UAl_|2ag4%#L7o|4|ol+Vk#ACCV{doH9&wLvm#!W3t{m^Mg47c**q4}TO zqt<nkdP#FAu=RIV8jRL>ShW&uA1??CJF_w^q8hnWMs!mMgC;L4$T!$vW?g2}z}BJR zL0}5hKd}Be%siY5vm`=jmm%h45aG+ULcz|U$4{5f=Yb&k0VrA~H1S<iI^6{1HTQ5+ z^;J|T)vB_DV>$Y~oeQFa+MdcL`192z8MAI7&9GZW@@bx_WP?&@d}r8RDo*k2duuIk zZE?TP!tayVaU)^TNZQf<sK)!ftn%vPx17@A<UbYjD?bf_fs_cIQ%=BjmXli(Pe-UI z#*W26$cG`sGTQ)h7$v9HV$G!zJf1&v;|`FPS73!qe?f1qO%JdmIDv{mK;6Z^rGG{( z5YL~`&sFW}(vCOy(!`8RFSoQ|KPW{3X>*7uwI0E`*A}3A-U3K*!5H@FnZS>D%xR*- zoW`6qoBifROOVGk%k-$Mpx-hddBOt|K<|<TWCoML6!8sH&%tm!gNQ?RuVFct!pV<X zsajz)$m2<H&TnaLG5#R6nJD~zYjX}wI52F7{k8s$(R`;DWl$DA=k#R|6;Q>AZXD1b zIo`1(U7|5bW0?ydhKwg99fX-<yc+4$8XX$i#!Plu2EIP6pq?O!oj=;RTGf1Mi^a1! zV_O|Oa2bqLMp&3$D@1_9XIJLc=?*r`4ak^bTR5GV0P$$`oR~*jSha%G2!(AyO#;3R zqHMHIm3y3JWh9UY<8&?Zn~7*tv2(AF&cH<ZW*L9^FcB)-@YNe!Pp3$h%~p-SIpv&C zDH}YG*A=l<^IN8n%Gvjl9mBryO@vK5I!`f660L>L;PGr64(&Pg<~cNk4fniOxx?00 zM_&sZnp|MUlFrg`>{>WPTXu@m=5HSAH?y$TwZv%?(daW>%w%b+=v!H})1Eab6bt14 z9$G*lY|>zx1$i~S0zcr%x0X~CYq8i&p*9KoBf#BKXX}NFPYZ}EcBw7Eo%EeIxi9EZ z-C*r%vg%82K143lXQkVX*J5PekZ&04u9p>kKeJ&5Y^xey{7vnGVMjbxJ?k$qL*@L8 zx@H=YwFqKt^*uKpBIeI80_w8&)}znz-YOqRSbp0A;)z?}U(2aJm1(Xq%5@HQN`t5| z@=dCZ4A&6EW5tDS*MhB6w^H03SPOzjn|^f-RDlBXk0xuA30XJ~DJeljiRA)jmzXQo zM%AbGOC_v!01AF<bLA{7s6ig`qY|<^mx)l{>e1Cp$cHaB_;j}zbErx(jH-Go0=FfX zE3Y_MD5Q59p@`#{tO45?4P8X4#tmRirIY)R91EZjlOsPz3>uUZtK%i~i_Wk7B?bAp zQ6-NFah?vEWDZPXvd11cxnB4?dCn=F4*C5P+jW(vJqFJ>coDK{r`_KG11skF#3X1f zv`Ohncuc+ag%fc7RsX8C2p_J`;mdM?w)SP%l;+F~<pa=)#yKmV1x@w+#vU~I_B8!~ z(VMJQYmj9cCpf#xBK$228qF;pB1J0=`Kf?8{H_J@ntCPXa5AVdm<7Jc)qN>vVYa@k zpoFS;ydPD=Nj`|s2Q4lPo@QtuY_sygZ%4-0D82Ue(EA0I>L6|S(flX}OFltiz3Iw7 z8C;S?Q?#x};qx744ehMq(;8jG7rcb_0{J5V){jjI`I}}%gyxELqR2PR=&HC})bY@t z8B`z+j=hTnCw7SlIe)%=Hj2Av;>33GN_~wt{u}p6my+ACWAL6tyXzuKQhm$!m8|og z-#Siyuu&#j!8GZKR~XNy%_&c`Eo0~y=2V(<TjZPpzqSOUD6eMmV@n~*=kdH4e)~-2 zE2KEo)j;8@1kWp2{)Buw)d%sH_SoxCe$s%xpGH#C`x*T$r~DgwhDcGUFGJv#uZit~ zxD}{-J8>k_M^`MouJ!#r_$%Gp>!Ib`NZ$#4{U`M?Zdjn8pd9}WrttWC6pv?M-^bsQ zX3c)u-}zfCshax;;<QwLDz#$^2%(&&8a_-t!d43W8)Q^5b!zi<A90`4JrL=C7JBJp ziwM0m7HSWJW5N3th5_QH^jev}fi06bFSXr*))j?{uKO0{>p`qTFjn{k(}JXPUK|I> zCo%=aPg?W>+ZXNwI(RmO0BOEO2u#cs)g|WJ<23_uN%znP-pgV=lRj7=9hA+S938(5 z8sf2S>_h7w6`niC(qmgo*X~`WksVi!-M@+L(TL3@<4@S1iQY^~_KZ$SZw}2_puKmD z@#OmLrL#lU<>+0Fo!^<B`XUissYZ2TjEC`YwUfmH);tS6=T~X2r*kx`>efb(Oyj#l z>dF@FkOpr%SAe%s)f4SFwe3CP@2-{du(hhrRZ35H%RbfzAme)-jAm<kLIP}~pKgzN zq@xjTLVhlF{9=#yLgOGP$fVOq@jhR*BU0O4(|-dSgFG5Z;tAPC*3@k`hA*{>Qp?pN zH5WhF*L+F6Poh@(B<HYdSu(`BU8x5fuS=?q?eUs8vX$G$1=gJhy^{h^DPIouXgwp# zFz2o|3SXAI){YLlvg*c0j>ew$FE}M8u@hJ!$5Z&Zm5VJh1#8joUoBnt>pI~vr4q5C zO0iZ(y^cC)Rx($s0QhJ6PEy;^&fF(a7RQK`1+a*!xwBmyN+?}4%e*2DH=)eK{@`q0 z>foqz`edxSL^sr>R70)2+CWuNqXa=dm_m7DzBrt0ZKYq3Ae;3z_(@KAaf1)@i7)j* zBmgqU@6$bxnMk3~*2Xwv02D_6)_hLf78cDDd;Vf~{u4ZoV?0k)gW#51PxclMt6hIL z5NfNLK%18cLSw5tJ%w%RQ~FEG6dKn{tSoA@bHrQBSF8R><>@cPh1ylM#9&6X+r##@ zs;lXc&A`Bi0wOJ_-7lg%u(oS}-|VDY6v7s?Q;9)}5J`MMG+lx_zNnk-CvRR#beOFk z@f_^vj;rqt0Tq^JU3t~ijc8*;c9^6U;5%$MfmgZ{cJ==Z?~aL(ZCrUNV-K_jUrsMv z4Kb@usaTh9V>@ZY$s1MdtCa?Fwann;t*c9q?Y_yEvgknxQT6hYC1^04)MF!JLCgbP z*}m~sHK>6SEs+ISLfV$++&Z?lno6AMyF=A>G<hS`xl_zH0`>={MPU!;h8B}OTb}Ve z(LoD6HQtw@X;Ie@2#L7+Bm=Z|(YA4vUXp>6(iGJ?tU3cZt*3Ky(hBXl@}9FGmif+f zB2F3(bIW@)R7Nwo+1mvYTUvK_JLwT<@2*#L8H_NOaIz4qYl~_T30V6it2UN5@T{z- zTlaXnkXsvtd02^+Xe2^WQtt*n<kbC(13{EnPg@G49rp5o{Eb9EY1d;sc7^E9(3Xlb zVBIN;&`m$uPdI!F_Ci`PY-zU_6jm@rxfVw~i0)58aHqKiv!w-U+=6dx7PH#`zuJy- zxdnRILT%SEu5Q<jZN-UTFTZ+1&^n+e1U7nKVR7NNilY9KZ7VUV+4+<OIR~TSGaEXm zk#jZf=QwXL91Ln^p>M-fIrur#$5S8rKj3LQ8Y|83bt7cOb7^j*Koh|sY?7t$0%$}2 zd9?7)OoT#De0{V^YeCs0sG|8K>yDDRw_0?~T8eX$R|5Wv^|MO;m)3;F^)_h5Y;&LL zI%sdgftK{1z}j+Y&s=&3lR$%{c|@_No@5hf!KG3=FAVrF%Ks7Fys&DA9K2SkZyB{o zoG-4l@JgFK;(MM_(InJ`8zNqD&(sDSZM4kBrCQ-LcoNvnf|PZp>BP$1x4xglyp8pU z@D>XfZ)A{H8vUo)G4Nk&t5TGnsWv`m>Qx=rXWb3BHn%pOpzy^aMctYXF^cnAY4BTP zZnug#x{an@z0Mb{Yq{q2X<CmQ*>*q{Twc1<QQ*dGuoO&5Bt2HXT3bsmv0h|cUpA#W z?*S>lW-#wc3*w+g79p?!d^)qgun_|ov-s8@_mW<WxAlcPx-ph)9qORlNyCkNAS5L> zV<6p}qj*Q&Be}Hv$F#6eh-0Cqh^PuH=9rU5+gY>7!bZiwKp2JDYlC2oes|QXAo{r~ zOGBUAC%j1+8x<mTF!H((xuFFb&k#+5xS%m%jjjSg;U~R=NlGfqT);>!f##j@w<PyS z;=@KiiNgu{pu*m0l<4gqh1l{R|6sz<@#{i-n=rNx*3+)JU&Z&qNFv+NOQ(gX?NBY~ zE85q9*b$$QAodCDezr$ByDwP7lsIS9d9OR*#z6%~YIUyouM@f1epcL7UB$>q<?9s# zMCO0PjrXZ7dYG+!5${<Mux=-;6p@(7v|zYIe0`6j9!1CXcm)N;(_|Fd-C10%?z!W} z)Mjf1jkg)B;sRgK1yhV??KEm6TZrRHbru`%yO><hQ?kE2sFs?!=5dUnEKp-HTOPGi zsVp(ylGQpA((WjE)3{IYwm9K6(0Qmq7DlAGqux?!0<O|)VIbH;8HR<ZtS|;D@4k+6 zVtpLSo4rzw8BBe?#2R6_mOKP2_rD+ov>olWE`sRAZQ7QV=N)#s-dOpqYC0@J_P&_p z!UTA=_ezA1%Wn3Ua1oX<3e$1@NU{mz|3Tfz|D?QN-^yT~8<<X7Xu6kFxLoJO@qRKw zni|47d6xvjX_U|!$=@Pz)Z3j1nYG|CV~fQKwLOZ(S#gJg_8_?68OEjQ-{PZ!?YZxf zlJ`f9j&6SK!_LTAN?A!ydrHr<b@SM@dQLRjM*J&kF)xAEEd?Na*$>76Qu{qQ{Is5n z<4-%)dOQxk+~?zP^TEb!gtS-xR*%J@$ZsB&gD>;69DI}lvQ7gs`hT_EZFPE&|ML`5 zSBATL)cZ>A(|z4{wzc`9$Ce``PwR_JM5FN$2wyK5CgT5-9%%FSK~Lc5uo^20fGMoh zeX<%I&K7bVN_#Mi-m??MDQV{h<o0WeWplpX?jDF&)SL7Ze1%4i_ZJ99M&??;wI<jO zq714JNhhuCYa(;s$1Oi?SHSplHkLU`<_OD^crO93JzIx}7)=a(TAvRW)R`hLVP2Qq zC6x_tty-K!XK1)sJ68?x0Mqpyj>p_M5H7yqc#M+ktxICqPC{y*JtV972p{X6WFguS z<;g@t&?<ei>eFEoiSQmr$TMc&vT0q5(jy}t>!{7pFP;%0X%=uRE|S0AEV<SbE$WOf zo?q(JjD~|&dDh};h^qyGoRf+CbiK)?TX1uwepeJT;7BSz1Q9b!7Yup*w+;*H&^7D^ zWVfa^v@fzt>kD}S56mk<4pMxv$w}2VIkeBJ#Ot1JfJdtXtU)l{(yTgFpC=4Y=ogL> zJ@Og}iSx2hu4EwMJY;|9j-#%8%%Fum?pU-bP=#0tjPI@Siy>##kB42-jxg9}AEqPc zNkEPIByBwA@Se5NRIP-JRdeN$N?5V<V=#SCcGJaISPx)CS*S%eDral?plr|K*sOQK zG#x7L2BiO1ytl=!qR-ND++ur2W<={U8%ERS4GqnKrL@?By4Pp5S8v;;Op_2(Mi^B& z)h|sy+w}|_6+hTOZ8biyFiR0uPx9Bw9r3mUrRhT3sWkTtz8r<@*ot?dHeVv;Gl}Ln z+hSF(+kUiI>mlJ!vWXJUN8Bjuz&m#C+CMZjJSgZYsy+?+4yO@aHnRH=;i>xnV(kqL z;#Rs;jwU1GSZaVQ8bv0id`i$!s)8A|Ba&uvpt~Q>Fu4(GfUR*bI7m=2ByN}mA2?YB z(Zof@Y3HTxqGIa%Csxt={z39<Ng4+=T>{^_=oO=%YJ+UE(vRE6ZvXPBuVE_*eLdG& z76VVLCE=~>T*R!_7e#$)L229vb!epFz$a-)sm;JUXs1|F=frdH4f{SF>uzu<Wbb6L zLTODSM<0UIuFxE7zq{I!X2Q)}*L$+!H@2@JNpK^dY0%L|yX`&9Js7d9BQ2dU{;jp$ zu!uHI7QY;ybg|V2)yd+DhG=cOP(tR&qa<sPJ+u}#X+<)kF&a@vbX1RTLtr&@8#gjD z+t@Xv8C`2zTsNv1-bSpnKAr1{_a{w#tFGKE8YJ$R$*?+6G)jmTy%{08GWN60il3G( zQ!84fVhXEdnNExOVnW*reddsgB(yE?hglHV9u@O=bD9~F5%y;15!P6ldE&MS^Q%Fj zJk%Vv$C<W<C=nJ4#5WWz>cDYzRti~TWu~_f6_EC)MK(ws=tZNYK|MyDh1nK>-1%%M zF@6X3x%W?;gNj^dSMIF2rn*xMibnC=8gINmtBLK>f_QAAss5ztR4~)X8MfzMj(#*o z;cvADtimJKHb<eJo_|i!QAHsoswvb%Bv&rTSBNo5W@?i{XiMwX=+#LrR=wChe5I=* zS>0aGFU<bDSWjR)J?od1m?&z>b5t~|sRtbmNW22cbiI$o&S94~G}zTO+)kO>EoAy` zff*9jZ)sOyYxhntS(LLb^-3=GeynZLSX~c9<i|6owaZD3ice|m&pCTiVQ$=`|I(UO zzhX5SjDlRyh6SY(db8HsQh7a>S~n(xSdUr9WS%zhhIq%68^86<U(d6x!9BtepO?@c zGV?<gK+ZF87tc@XvI3XclCYHG7@79<N(%87rO|DX$)&A8l{>%+o^Mdwob$ql<zffu zi>S{HC;mCz*;0|?2IN>{nq!GZGiDagQln?#X(6q&96vL(IjhuW_E2*mS(rMu3LqhC zec#h^gFJ;L-F9DJjB<}jbT84yoK<F;4|LO-l`iBq$~_ml;XsR%@mnDb0VRFj7b_!) zm=40oXG7IsJnUy%C`*?hh*;<)R275EhQMaVit^MWVwg5OoumVal|Q_rSP#=>SzXS; zA2FTa+g+xBbhUy;A~uifSdXf1(is=;ICliRaAi>?#>$BV{*0pT|EQjZw_q8rBwWw% z(0em8m?ZxHFV%w)$NCFzmIArw@^q-G#qTU{tn}J08ooO15N^V7WsiwfyokUIHFivn zR2Cpp?qJ~tb2#=!JIFYrR4(RfS!A>=>QKZjS>!}z*-=-uH`PZ~;uoVx=~XI)^bR~- zsNf@GI}i3Z>#q`8GdgXKmQ>St5GSJS#B=Pn|GRsEYBg3XutdkN#wXcS)zc#IKJFA$ zm+7vH^BG0p?%X3jIEVa1F!p|XySglB76@A@VtG|SXQ_osHO|wAXUV6PUb>V-Bw8=Y zcr=q?PdhoYJ~gbL9H7?S>nw-ksQR@o4S3e20?xdhuSCv@-_g7<YE@_Py6k0(`Fv0^ zI+ljG?1j?ajzPXIQB~KQbIfKAV$PKs=Qmq=#^GkPPV^AaxuQg8em1RTNHwn&_jFo0 z7>-qh-)b8&b5Y7YH;LbWQd2pI>6zSIayVmbM5$RsJ+4T!F?O<4KZV7NE|wR^qDVJ% z9QI2(4QH;>Ji_J=pr3^<e!STpa~bZsBQAHa=^lw#5-0dpqxC>3ixaML2V-MVK8o2Z zCg8D0nwC#RA_+LF#fBKH^({_*I9)|vE{CTx6^XZ@+3PK%51l@%_A#kYFS$Or<B!F) z=tC_^X=^adJ>74r8?Xe*A(hMNim{WBKo3U*^^`a}A4X3eHvP0~2}e2aS+IaE-qKXE zw4e=$%hs7Eu=K2R&>A#&*2<dWkWBT2+0;dO@f<Xn2SpXbZbVFsv~E9nO>dVq-v|i; z&ZOfkro#^Ria%);sBKPtL#>UE%Sw!DMy6LI6bW;Fq!PN*Ug_$R>rhNO)u!@|QCp)! z`8s4~9*X}#-R;;9>h2V#<2fyA4<kNcs+ufy&dw4*&1hn-h03X3vpG9d$J4wqG^U2m ztwc5!5k?)iImJ8ddd;yB*j{f;{}1xXD;W`+3;&w$Sv7{L*{1gz^#XrGEnkgrmtfob zs5a9E+mtS>+Pbo2*EfFuL+>|iTl+5Sc1XhUhRKXxg8V9-Bcv5-=lox_g_gj2du|dB z0^>cYtPJwat%7~d1F-4%n=95P+&#arcpNz*rSpDQ$TjvzR^L=Au$j(>ozvQA9LLZ& z<&T-AyHpiq<?6dxZ)rYd*-C`Qvj(GF;jLtyMKt+mSBg7TCd@W^e>mW(83X5PkW}wY zLp|)%2L0UA@|7dA)M6Ifn~&V~_7;oVY9-sXfu~LIk<MUuU=%$Tr%&1^D3wQ_xvXXC zSEDyQdb+!eH)Rx~3Vy&TPzqj_ZDbQQFto9U07fGgz{ur|4TBX#0Dhu@wCBeAS2^t1 zSI{J!cySZoLk-5m+3?kYd9kMA)oCOGRd|Ofyb{AXCwL4u-88P^^x@}dlje0nZYj?( zj(`fU;~=tr!DXKzqUZm~fm&svwaw%q#P}R8+8osNp<OW_wx9TrM?xPag4ylhJr^=4 z?c0<$NJb|`cYB}(Cxp{O=3?ZjUQ!#1CFk6e+AzSzM(b7S{6}}JT@xF>Ygl9~SG}Wb zA0XM%T4Bu4aGin_`2>%N+KUBz1ss1iSD3{bQ;s4jTyiAEqv9oQp5vXQ-dXOWw`<iV zRd|u+ckPz+Wl6}&6EEsei+FHLyr#;YwkJ@tfSaubL<+>;p;Q~R_~8Q)`vy68Kd3IK zm_F!06EZ$iaL$KW8R{j?54+%)&j3lrx|lO*8=lT53wX|0k2f|qJ@J8@&vP3pu|}9S zP`e$fS3(OtJ)l;494vP7CjtvG7m}qWaGewuK~fvaPxXgvq@jz=@j-b#XoF<Kws+~( z4Cpjh&z^}*(i<~{IJ-{h7pagt7MP&!tj@s$X9e{(xWi5&D~okl!T8uQ-Jz7JWW~PX zbI)YAQA@_;G>Q3rjE5(Ic%;Oj2+||v!yqQVtP9cOVr2qF`W|*3r;j4g5t@s(-o7KA z-{#ZEx3zYJ{5gQEpqGCo6J*u;?HIV`!V<c;D2SJNtaM$OxHpqJ$C$fzV}UJKPDJY0 zfJCquZP_p$-CJky3DM1shGD^UtXl0buPFEe-*zl69<A!+7&*F0%x?~Jv_GsQxPo)B zf<Y7UiH=ZVv&K}_hOQ<#>y?vY_-Nf7rhn15osn!&NX4;nJ;#}Pbk*4tHR_MJ^EnGf z?8}PU<j`K+Y+T|G7692Lti1*%;;RRfGc^0W+Br(2sEXSLP9cPKxs%JS2dkf}G+3;( zY;CL4kC>U>GF6FIAdZ&$@fXLdozva!V+4)pL3Wi2qrJyZ^0J(y$3(nIs;_qIbQq7{ zq=<H0lE}|Pn449lR!zVw)lF0iDISh}YSXdV*?A3hj}h4xv+J6q_C%KL@xIy6%{6|& zZCeuNFODA$U97IM__rvZJ1wzvqn{!WRPl_4*#MO|RWhTa6G>A3)T?WhPJ`|mSL@p+ zVlZqbP1BSeenZN%+ol(pikuMFm*MOg=vdavv7zBYyVf|I_MHT5pgM)IWZZiEUB%M$ zMnu85F<k-lg*#AFMhT_noW<+R9-~lE&pq;^dT!lxed^2Q-Gv%mLm*aNhTSfd6PzSJ z>0bQ2CgJ93gE3Zuj_1x3(c&blEv+pARw5VTGkBrVnbVQH@##8>P9WqJz>3#^wofwe zS|rpXX=*;lS|rTR=SaUiGyi|G+l_4)i{*W_<c**6)S2ftmIakuX3K&yM#VA;g$R(S z3#1o_X4CgT{$h!<<2&cH-E};dwN~`}bLVG58=!s`98A+;D797JpQSyIbW_|?U;Emi zy+XxYl9`<qYP>X-N~7>E&NZ6XS-iLXKSJXnFe*BU>eXE?C1e1-;X|59V-a>?$ID>g ze3PBM@&Aw40rUzYJsD}U{&sr_(QwFZ)f&TiGxZp(qbL`PeZoasQ`w7Zv5N$FTYX{~ zOY*f!TfRbQW(!Wf$Uc50@EFa}gI8e|X?=+1_mWoe2M}9uttY_#N9}ZZfh#{f7rY5_ z2_ya&#y4?zqxk50URT5SclM>_YJ`*USgst5tw9X?tjJ?l?zl&#v&ath5MbgO<R$PQ zcb(QV2RW8vI8*`03nR`2UJ!^<L*tOaUcd@6Wtr(imJ06?6V|`Pb#JygUoVR$thFv5 zO_n!_{u{}?EEg*r=BlGrqr|%4{4zY-^mTgEda_RI>JF;G5Z_L2+!nJYHNrE5&;7}8 z^^xw%(h-==tsECrs6!#MTm6{+Vc)XNUS}=$QpIN-1ArhFRw|ZI+9Se9Y-^^FvsyY! z`MeGTUaL_S1(`)0$6cRkHFjBL>e5}zo)qM_IdL0Jq*-Ncmy#iQUA63el#_GP<(0!w zy{iq|z|qjEES`vp1c$M(10+-tke^&OhoaDj7FR?`c17d;Ry(9`oeryQfDLP9*?fcs zqr4w!`e}iud?CWn$V;Bq_@L!(fnO@LH+)vV5N&#C5S)TSAKiIF0!`;j6TxT*Lft?) z)UUANfknkjmxIwL>q%Ib-jVhir*%>qR5v1%bNF2@?tlV2@p+G4Bm(#y7RI5TUMKFs zg_f{RoyAgdvdHgKsNb0>mOD6Zs=FNQpnXUuh$yf~46vrE;&s+0Xp!xl-ihyE7Qzj+ z3LeP}O;3&%^A)e_%_rd24=OMk;R!zCi^p;6>*ITJVR5`1lqM>(r47L-8(Iap!2o^Y z=iLN|mny+z8bI@ynx6lVHc}vUg<WEDd`8)arsqiS#C0z$7q^9^2ZPFwl3{0e6lBXl zPEf-QL3vwcwlp9~-H!@peUKlMj5;n3OgIbGaxp&;(L+g)pXOM0TH~88m7`*HXd2ZD z0iSVoO_yP8kpj(cyA!*C=*qB!b%)!7LNFebBZ!0IM+3HP&lIxxVkOKGjg!VR%2up+ z=&#-o=?2GO15^;YIRmq}SmH9*(QBxAXLQzucm@TCh9&~k#=&=aTxfh9h!L1`9WW8( zKNMPoOW#mb7y7V3xZ3Ho#!}u|d9t=`f_`I{?uc?Ij^x(X@_G6#L<ziiyq0%J@6Ewv zQR3;R{N}FALmlC}Rwx2YI9d*OKzcMjF+j%H=tE!#Mxr>5$5>Q0q}eg+qcZetf&7;B z45T$VA+V;hC<{XYltQjKx~x}QJ@15|Fj^~6I6f7rsX*U_AQwPb4Ymn>^?P6f_%!s8 zUDyc|lXPZ7p+#4{LD3_2(y`c?UlgbM9ypcz-RXX(#kX{j_n08^(YDYO(i=^V)+j85 zLAg_!J;~*BoI|(0#T`zkZV2+hH2kBzXi!CNOmoVnOI4bk-d{o;eUUm6_ORIy$|!`z zTEzyEjL3}Vgz1dISpAq3k2b5qw%zpMFgrm9-FV(r7%%2|0>oIYw_!RcOa^6-R~sha z{_zRwhyHx7ryB6&?k`a-HQ@|~+2XitOZv;vG!jQYtaJtVl|&ncmhInZkfS|suvVZl zhR_QT)N&{)Ou$fhLz5tlV3jrk+X#5wLEloyy^1+{KUsJK#)sJ`;C=!kgE*pf>>u<# z#2=g{1PEhG9Y;%KQhaATzR|c_Fy(2tafE!fbSz{D_+|hdFbuOeUmVA9G$`z#`3Ao$ z97eq%hns3a;myzodJKny$%u5oVZJtALm4fg*$N@?s^JKP2k6%kWWQDBo3aRX0bmaL zHa%J_N8@NQ$Fqc(Fm*eQu<~J_80W5~n=SsaIWqihb96c`MB!9`)6x)i7u2R}4A&m` z2NCGZsTUg4JBf1?{sGnvNVfpD0Xkp<>h6J2_vLX<1hfQc1CTZVaRW$OfNKEbktVQj zvuL{w{{Y_*#GedtCqv$oOYpBkGU*1AdDZ2CBj~N`!7v`_(HrBaVRPaV-=<!=aFcil zZTNPzO1Iu<4{~9d-e@=at3itNSNM~5b+F+1Sr8qAj*8k3&CeDm)fmh-E?~{?jxksy zI1=z1<U?V#R;n*yd!+!2eW5yLHFsRzMpTuzb$j}pIUx~USg{p8Nc8BECgKA_^o=EN zeT@wEvQKBE@yPLi+01*X7D}bJ*`!A7xD|3X)#X7~uKY-!@};R-FHbrk@4zZBps!R0 zQ)JyAmd&=c$*n(bj`CJ3)J-j&QJSUR9m2Me7i#O9dPQvuFhksOQ+7Xu$2wnNz3Qd` zDM|VlV04t&i9~c_jD57ipD%9}Y8a(3;n(gpfKKNJA}Y?wi9prEn2oPOR0m^S!XWLc z02+VLJdEt^e0ylT@N&HjTsdS&x?iIqlE!sRy))0s5a=X+vXM+TK^%p3BH9_K-qyQU z>K3I(!Lrd{AxAqH^Bbwf*(WyPdw@!lT+x<Ls8?fJ&F4o0dIG~5OY+A{PtO)G!dFnF z@gb`c8WS~@#MYiKgn?vU%acLRq&EF67DabWV{LTt++&!63C-G1SBrSfZDAc%lTOnp zb&b>=a)z<&idehFcJ~^ecrh`52k(6L+n0Ul3&;Io;^Fsv^VvsMbL;~t4xg0ps5Kn6 zN_d=veH{9ibNHW+aro+|DGYD91(w&{d-v|WAD3Bw>!tg3zJ0@u<)CxvI)UHq$Nn6= zs(itx%h7*NruXvSIVzNdT`Jrg`+LFIWHG0*?{}#8ijxmM<c1d>e8|=pa(L7W-S1Q7 z-@7HeA(oz8pM&LFC+~8<AGl7!F3E@ClY966ejSGgAII^hWe(sh&l5O*=?gqB1^>JQ zJa6x-;P=Zt=TDXI)MNL3DHR^_EXIGJQ-vP)(K$Mt`ozG?yYEPC`o_x+U;O*SSGjo2 zpIfS;6BWk)7InGdlal|*bDkFq|MHU$-|&imU%qD5+uCyTE<9lO$UB#xzUxQLyZ0== z_~-kb{`b@~m%RGyPkiyvHOs%Y<L6K9d}`)^^n#iE&XXIIi+_(aeeU^ZrVe}N#E#?k zUk&Z~#kW3o(tA_;FZ$a*=WRP~mAC8SUwpZAQR?*%UhtBszaJ0jtKYxiXCF<ywp94| z?T0O2<?Y`5%spSaH1$c(n|I>The3MwhG+izU#Zm7Z~MdOF$X~U?>GP3t3I2$Z}`^K zYp*^O(r?`F{MBDbz3YzKet6QJBUX89uIpI3<V&f;yYGGWzMYW&(z{A8ZT)I$`@mOP z-}^`SKJ5>`Is8Armb!Cf=-*NgK>c=y|2XWG-$;FE{Ja<Jdgxe4zkXNCg;%8hc-iPJ zm;YcP)c5hXRQCT?>Jw*ua{jH?y$bNX`F%UKeLJ<YaOuk)d;aSn|08`bzUw=wxA*ql z{HO=*S##8pS1i3Uwfv;<Wu-qH1NlEY{H+gtFLh(z_M_f%P}?f+fyeiI!xLAfZn|l~ z+uLsc^-Ay3{54l}en0j2hWGvP;76OG{L{a-|NCZApWX58PhIx@qgQ$U%Ip7Qa(628 z*9U+1zPByG{=9tkf!CzI{Ny`s%AEUetGwH)uS|XCn$(?pFZ{!6Ui>`x?%)5PCtjP{ zy`y!_yvzT&(tF@fuUquYwW)OWwFln#^rBVX!1TeTi>^!M%CDVHJr4AC=@moOwjZRH zop9Cl^L~Q;@z1{=_2VC;PMr8<XP3WVmA7c#%W9+7r#fEsg>U@ke#r0r`L(Zo>iX2n zgVh~}{XPZX=O6m1_uY`X?UIZC-hR<<R|3z<Z}M+U-7>sp^mG0yDDQQ9KXk>7sq2?s zFwy=zXy2tj8T(Y~hpA7@fA_ntxxruMJ-P8E2i^R`)cu#<`pGLEhW@(kSHHi1^N&)G zKCpM^e*RHVpFQgifBZ)&|EQ<(2Q3BqSo8e%e!B4E)Hz$;_}$BYy%h2fUjJ?Hrc~t% zx!&kcP+sXTXa4d%H>Jv#P8~UaFZ9=%1y?@&!kbfPUOjTlD{sR7%isC23vN!8FaPC5 zYrl2SD)0Q42Y-9%EvXk@{N)SoTlU&j-XZ_^;^t4>lB(qIzH0tkp?;^GJ-F)7pQIkS zaKTg2#}-5V_xpMKM}Lxf_aEMN{?osP^z$#;zUlB=Q{MTndg9k#c@dO<-{HG1xivL$ z@l(&7RXGycGcU8H>9*84%|r9IY=i!O>~F{JT7O&WhL?T!yBD4g^!T|WHZFemZK*H+ zaptU_1yH~5oc{VVZn!PA<eEkAd-LPa-p}p1<=(xwrFMPn4}U&rInevmwclU3=JwQk zuROBTUkUX&KYGoFcix`5<dlvhrk?`(-*ow+o!`7Yb@n^=j;_8H`r|t*UU}b>x2Ntu z=q2+PY-(BMt?%qV=nZ>Pe>wcqt%scbO2GHh&y0@lNxkefFIn)~ufA-RcTd;uGd{8> zHGS;IFOQCYBhc@Qw_o$qJ*k-k4*vcxo>&3&@V(D|<0W^bmfZ8L*Ie>Jn9oW4%i@0& zp6G^8KK3&wd|;Ow?mpZNFa7?#PPpq-Hyn7r8~UHW#|a-8al_WVcRS%}Uva~aY<0ui z4tB#`*WKlWpWEq%w=H(V(r<q1gok|A4O>GuTr=MdZ+qlUCp_&lZaA^c4WDgy!>On5 zaKc?zx}o<DH+;6w4X0k^hNXx1IN<|dcf)(mcEk03Zup(oyWyokpLY13>)fz(u^VoR z-0(XoH@x&^Zs<LJn-ku1ts5S9i5nhLal=xN8}5FC8-B!d!w0Uo)d_bM-OxYU4R=5C z6DK_F6K?38?1twb=7x*zy2S~1f7lHNHoM^iuXV%I9=_QLpZv5NmL}cMTj++np1H{h zz1^`;<dj{zf6w1<=Wtgyhr3@S@i+gD!ZjC2coK)+zj3(x(cf~uFLStihlFVfU&7&< zdw#>;pO)|p4tJ$E^bX>1&42%zzrV!cuCpZU<8X~H-%mZk;q@GPmq<AIgp@Dgp#t}t z$NBqO4tHI`p?8MFub1y5<ohp=@%J4Z?!H{U-_7B!K*E(0|7r>U^ee9CZ4!P-!gD#? zJuYEJ;*a9cd%lDZ{gUxs!{M4w%J<ti^hP<{-6`KkN&5Z*|Eov&`$rslmvgxL{qkMr zaLtH(A1~qSCH{Hx{mVx<-;X8y3WsYx#G&_Ai9b!g*KxS3L%v@j;olzSd=EV=^^)(e zap+wl-*1!jNa6=2e3OJnNqC^Z{rMrz_W+09k0rc9;y=#e?)S)dMZ&j8*dyUGfjeBj zUo3c@d62`0CA^ixHQ(cK_h;q%B1wOngarw=Ncwt#UoPMCCH<um?v;J!Z#i6ZABVes zB=O&o@6Sm3ha`NbgcS)#1@1)2mzM8ElI~0VArk8SZPMSK;7|W}SL&HR-@EqjA72Ub z!_LLczq~kg-zzre4oYR<`-2}IeeEYxcO7%*-KTtT1AHHT>GQt#nN;b%<EwAE1mJg_ zlKn>C<*9jh{rKt+zU|HMy>!=mpZIF((Zd#A^x;?a0sQAjpZxqcQr#!Na>4Ikit_8T z{S)E0QeR1Z{(Voq6TeSgdev*bn>y#8&;RY)PXl>#&F;Iud&Boqo8Az1KK5-Wf7j0+ zESJBZI^|PK=YM_y;NN}F+wVSacj|@vUGdWEyKuj<bj1gLeod;kI{C%(HUs>cue9uZ z<8`U89U1=PlV1dR(5v=t-2Q`9=>z|9)F-Zk`k!`wZvF1-QxnH*J^Rk<Tj6`^_n&^z zjj3mU`TEUIysIC|yY8=>dw-bP@#e3cc*iMSfdBH-N8bOV)FHpyc>8-^w+!|VZ+!lu zTYsDiFPQno(qlnBKkdseUvl8hsoy^I-mhKt$`j!GuDkxyb4#kN<CE8(^i6DE$GJax z$4^pEz52l0pFX-9@?ZRL_f@y1jvXFr{mVDj!S^xq?wq<UwcqBK9q{KrfIN5p*PDL= z>*k|ZW)6Pc|APK~^5GpXzWnyof1Uk;7a#IrkoUj3=lsjM_M}d|^YO=O{{iU(7k=ra z`}U+(UwiKSr<eT&<o}Dlzv+xSQos1q!=1Mu3jOuft=;c@;hm|;zyIxoPyWYRkcVIW z$vZ!KXX>(>_p2Ox3-;GbAKKFK)6@y8-*a&89Ux!sdi(gpGe1q8eAW}IPO0_4cjcn9 zPrNJjgYgwdww?>)dC2cS*z(X_spHQ-`=F!xLH_k_Kj)q^?oQoTxMT5G&V~I&scqYP zy?avI@BQ(4-`OAJ<<l<PwBr5ur0zds!AW~R4D$Lw1pCZ;Q{y-M`H|J%gYh`z`(NDh zxqDN0eLZOU=zH+{rmcIH{w#IZ``YiVZG!PQ?MLrl`2C-y-f{Co=P%v??Y(VvOSt~N z)M<x*eBPVC3GF*%>Y%f4yD#P6df@A>J@*apUAXeJ%|B25^KCa>eDxJDev2-6@1YO= zJoV6PPTl{%z6ATpL+1OJjQ@A)1+~X69{BC6VSM)<_|R|uJN1Qgf7_ma2;iSw{-s}^ z@r%@hAA0`-^A3gm+?wt?zVYW@r2hJfLp!#7V-2*g`tfBu?@##`-21jt0qOC)kLUk! zf9hk=yB1`||GLt9a{BDgryfZC?!EoLdf8h*-fta#Uv<|5sr#CKGWDkO-UR)1>%gJc zJdnC<@TI>Vd=-qxuCKk}fag7!+O+3I=l<xwpno5G^MBvG=E2l8d(M8%&wdQ@{QByu z?5+n>>75U}=v5=IpZUo93!O6$rbf2zpWk~r?3XY7#;L#m$AhUe?s?w-`b8(u*CGB7 zCssa`+Id;q1=W{8`MXZObpFnVQlELn*B3qU)m~`N^4ERr13#M?`bdBO(=S+iwfEJB zzx={i{%mH~d0)Tp!oA&Bdy6hR_mPj@JM;8ER(W?94!YX&??37IBkr9!Cw18F(_g(B z(qC}yk)OY3<{kIE?^ge+o~ymxC(aZW-7|CX{_6{G_+jR1@BDN2U-6y0XEMijf8v=x zEx+2k^zX-hCVltJfv<k@6Mt%6bG5hT3%|PLrn_d2_CEX5li!%W+PiJ&v8RXcn)z(` z&F6VHLiua%xM1)7Kb`r|mFM5lH=F`|JC<Iu?WZ&4UtPI)_v??p8ieFiKk?@~XV!lC zggujgJPz`A9dX(_?wnaXz2u{t|MQG}1yCG8w=Nc3LxKhthXBDP=t2mRkRZV!xCeJ< zA&@|Vh7jBmED+p%gF}$T9Ts<3V1b1d_VL%d_tmXe^{QUgH$5|_Pj}DMRP~&e^PR{) z9g;+Os8yBI92w+;q{b@wdww`<kNVnqt(=2Y*Lqf!3IrEj?4gMIcP-~Y2Rgf=lGlHJ z_5n6bMj5#JBg7#s)WP6R6(CEu6mXE9cep4%4Z8mm%6J?)4S~YL$2yxKf{U2N*?{U# z*I|v=#GT0#@%->TRNAWNCXG(`hyD)ms+5n(ygck;1WJ4Z@?R@~yJz2SWArd5(*DYK zz}$fCBaiG?K;#7=t?<VLz%d8&sj_+ey?9_J_}<s70BblVhcX9dE@BX!AoQDa1}E$` zkVpt@?~sR$gmsD&-S}6AA9Dt*$ortFfHy<Wv|*q|#NV{}{0l_3Ln6vyPk9eq|DX$c z-mD4roE~j1>;-`BMzV3S2(3FeY?31-*xJ`<qgMxNzDi|3j+`6~Z;p?5v?RiS4v;~X zNHmqBnpQY}zz!Jk0+Wbtz)mwe8k+n6bz3b}3F+{ux}76)&$(SSXXXv4j5s%eS7PPe z4k*N{+jozRB(c^{i#(Q5#m86T^DIG=afu36_!EO`&6d|c0i)=Ht>SdcK*@>0Vz)79 z+eTZao`X<0$_U~60&|_Cc$MzrxC^MiTSDaAl>F(OE=OT%x0W&uN-5u?&XB4)U}=hc z`uE~KC~GLPy1fhk>T2z*OkH?Q0lrsYd#4`mg;(SuztfME5wG{Utn&cdGNv}~1^_zt zBVdq@qn!LZ3{<^9VXZ{HI;ZW!Ztr{t>bBaF^0H|c0t$n9ROK8f?tc+pyYxPW{@y$C zxIG<hYZtynTAEpf2AF4cosD}y;zKtw|KwrJ0o&j+G67VVBz$WYdyQ7GG$udLJ~j#H zeJl<=1@06B_mPql)1^YewtLbJ7MQb}uX()%3NBh*jsCOq4vOf+Bry8OQ8~;XgI<JG z-W<L;Ix}Jg+K5gpS5cu4FrS3S-uoS1(;7A5h6U3GfWSAOG7C=?;a#=!8-ZPzEYO=U ze}~}-qdZx}f_<{0_x490MFpRc?JN4K6N2DnzfpSy5A60Ri3-9);Y_5!2!dU`=v9=e z-zXE1?FxH7H9g+%=ocQi+f%KGjRpoDt)r6h5q82EuM}2**Q<k8iXqz9tZR3tng0rj zJWS{CcY^f312dX!cYhChEC$-sp`;Iz5JWE57m8M6KyGwQG${Sd<Kdk_4_M=-A{wG` z<4AIE7ivGe)9oqcLPtewzrG0}0r75laHA8V!D(kCB!KiYQ4$dMhA?-ievdj=sBzD| zF{IN&#MNQhW2tcieR%i22gQZXj7Gc;Oo|TB3`~y({y5VjfvtPavyynEpGlE;{5a!% zxW=(D_Hd1B<KDXa77a{2QzP+6J_{xRv2FN0v=G>kd=eaUb^}v1zW(yC>f6M3PlR%c z&;}EU0!aXX@8G{gnq1~Rk`IF)o`%;JX||}n(C%4%``=oS@4h7S8vCzWP&lu!(Bse` z34>KER+Ngds`lM(*&}xL)ngaFuP?aeDY#OKsEhgLjbBZjMaMraE?t~1XggKQGI;r$ znBub<d=!%xcC4t4ysUtlg0C<~?WZQISJz9`h!7ZJ4HY)N8UmeW)+9_LNK<{0F_;p` z9cllKZMW9W>XnrVS45B?qwzyyx^r9B|E&`GUn(@h|E1Cw^<OHO=R`MNU@Q<cSkTa0 zDp!uT=ZEa%;3(e@t@Rpk<t$imTgX`F5(Au&)-T{>jMDm8D{#!KL=QgwzVd+WwC-B= z#Wd-;cG}Hi<cHihX?46ymir^X*Iop&J@k&@i=W1;oh>>xMsSx;S4d9?<@7=QVu&B> zaTSgicmCdCF9|9--3|yh{}8IT(>wh{_U(PBB&1oT2+0>z1zQqGDAIZnQP9%|GF8>G zd13c@ET}{bkh>!khug>>PESUc_DP<Qf9F{W9_8`!ALyPxifp#N81pN1!Yo-lc7#!o zFX|=-FfKuha^(N6;Rpsh3Ow=Uo$uWiEI#re_+vczxod4ZIJHI0TYQkdBliP!>az&+ zn3iku6~5@Go+w1?fCKCP8n#Mq3?Te>UCA*Ie|f7_iVLy|H+Z_z|LC?EW}gK$)Ugp_ zG0soARyP2knh7Gz`Q`7dH-BT+HK$7-;ALS)^L7g7oaE^OB_4e29rO<ofd4!%mrW1n zAhv_8**0xFUdor51DkhI{Qdel-So@vy9>f+=T;(me=slgSw3L@&90-m*9!ys8;ie? z7lF~%FNuwrahjM|lu@)BA>}^JQ6BGvD)(?MVuT(owz7=I>S@<`soX8_OXNdw@jg{# zpkN%Ru)@T(pGua&ALp_;_d6D^OlzmKJd+T?Wl!1FZA{vnPqYeTy-XL-rA=IhGT|p@ zLY~VmB?;cO+!x@!1tIc|p?!3N62UB}B6<u!>0jdr6L(TR_dC%J@qZqHadEC{bGp;p zPmuG+$CSOwEU$G!*L$2wEa3Odz80pE`58DxorMmfYFXWB21QX{2s;p>d<iu21DC~@ z82c@!XbMf<6!=VxV@S-2u3#_yL})u63Cc0Z;`YZxZ_JYNENond7MJvsKcuqMoQWg& z`A@tlGqvDc(f}IF_V7`NQ8;8F!ZYNiZcf9Bx8}sHJ3QJbHA5&C?*Q&x*GyRY^SVvn z=a*6_#CKzx&>N(#Kh5=AS1Ii0%M%N)N5TS+)eKdmVoSF91u`wX!47ID3u+29p<y`e zRON1EKUA0=pHPnX8tkjGHE)UL;UgR(?4jdyYXD6w>tW;xbI=tMK<8GHEUJ_8%-X-( z{-8XUCfP3u3kE3L$k{DfurPNlqM^bq@j-DeJslrm!Ff%`^&CH?Q@%8L?y+=!Uq@Z# zqE|u1-+r05xc!joqfd3cNy6?i{?f4Oe~PcF@?(9o_q3LOHV;IOMd?ih7mA*%Y7+}W zGfn)Q7Sj4i6b;JQMdW|3cRzjW4N`jY=XVwWZ}B!l+mpRDk8^2+Kl|f`_sNP9jltt0 zm>~@_dGX2H-umKio%4yM(@`6i&dbv?pC*vL^>e+Y%T`<v8TgG;1MBNWohL06$m4?$ ztA}z4eT_WL+fCikTLXBdFOtF2TJO6a6R0#DJ(YZx@oIBDs&t;9+X00i(5x<-oWcF0 zhn7HFL0(s!T`97!()7GFa^h>OLAH1_a@xGfMVD=5>75CbBmVNwjZ_##1Ue{1B`B9T z2IwX8#^yXG{j0;zE8D`hs~nvDzcSd+IoIfA-s&+ZseNG|U9IrXtA?1C?sd8$;cVNm zS<+kHiUHf!2d7k-f^CM6H@wpwQ5b6sj+qgnOz{v}oceW4#NnV3l8fuqx%YcVG)P>2 zYA}`mm3chc-lYN_wRg7`a6f_g^kMdAsXe!kw|}^9`u+AeI|Q3o=}+Uq4ST}e5?xd$ z^O?vVgBT0*g+}U1qLHvi8O%QcoqtlSzwY*4>)+x7T9&zxSKoxQhJacPMO2rFGO-ES zq&d{fjBg`^&$GO2zl{=`LbS4Ogr=EKyLLR0{&^2RREzywB=c{rcHn;bO!>}2Y6|}G zA^<zCC!z-Le~#t1Q+N|L0(D&Yy!jIwZv2xs6cncVMe`>&6JYHrUS5qZ%vfjMJ?P>6 z)T1+)Qc=>vTUb0c5nbsezl$rEH{PBv5P6Kh25di|gt(>OymUO|SZfW~FukcmEuG{0 z=%S1WcnzvQe<C8#`mv(}pB7&ZdAwo-+N;QyY0c--pP>(ES2lTO9Vu(Roo~Adn5>!r zHO%q((=2I=yy+-5U!NJI<Xn`g*9rTYttH#r;1c&vI;jAeA{csQ^j9POFA3-q8>r4l zenV`518@rc@Ohv<w${6hmS97Q+f`U1pOpvYE~hl@0*U|7J`pM+-7>e-n`2JWn8xE2 zUeEm~guWYxQ*sO+pYKk=!C++J@9TQj$#$XN;Yl%*gma#A&u}xN%3~cnrhIE6n%zx& z#|>2E;qLnavgDJub``q@<1hZSzcis8qUU#o|BO6@+{YUs6alVUFTsO$H7pP7E2QEj z&F{z1<X15n(kAX4PiAGTT1vcaHazHX$eCLe8x;9WMR*wJY*T8OzP}-hXJp8>?Yv!Z zXB}{0$hJ|Sb#;udr5UIfmHO+CT+pJjHIH|+QebhFX0dgPZ>-59Y|<Mver)?V{zpwN zM^pCKTD*bpwQDb3d6Q}d2gDdOt>u`SzV{hFu@$Z0{d)3Jgs#V!`iR6zPBA`6lt*ND zC~+|%{?&lUKokR2{HtG}H)0{8r`;`NM}9W#{_$X2^y4kzg;Vh+m)@4gTMiWnn&r;H z8<v3t<7(XH&i)q4EolaDkALGr71LHagON=q{X!Mq)*b_}H`spRlw=@DBs}&!%r$^& z`G?K>k6xm4Q45I)qGVfg#xSWSfxkCA1M{L?pHD7oR}JEYZ9_?p%=`TJMDNJ9<SPQ` zmUnDInYNz9YumKDx~6~eA{=lwh7mMrc0Xs_0@kjHx&}Pj>Sf@y4kaCQrcBfm%;fb7 zl1kJRWHiZu^o0`Mn;k`47ZUFixwq~M^@oz)3%G3Wo(m18obw6+Kc6Jpuxbv_i~<Hi zAKquN_UwFVd7?R>Jj!czhjTCJvkeE{>()}G!}|Tb?yVV`xLbx%^?Uoq;gL{M-;S|Z zMn=+KH0!AC@It~!ua`_(yohTv8C*^@iJS8gTuubcl5RUp-o4YkK&d$(HA-ZyNDVg@ z!}Gi~yniNJvL^T-+Tp(NSudLBUeHUQ?$PJ3c;8MfE_^Km(IcNWdeyQ*dtZlfOc2#* z`+dU$rlZx}_YE6vT^KB!Qr#E!?ClWPH5W<Z_Td%^82C??Rk+M<x;3ljXIi0v|2*WA zn$>rs!rk&|<RPQW*5RV}uhdGMzHB2W2nxkwmknN0KiGA5bAH**v;?DGl<!mV>1<=p zHqWBBdT-rzFc#^P_reKy&#M12A?PrwG4A;BMEIwc9_^Xz{9xHJX*IGFP;5fzD34G6 zE>ck4?Vn;q{*BdLn~7s^KXoIZ>M@(?=&f4AMJZ(ghM$K2WvJMEwo%r%<oIh)bS3fm z?25DFa&EGw6Ii<;P7It)R#XiP5_ot5`9h$q7IRydf&5-NHgOljN6mjILC=`Q)=z2n z;+D5(Un;3^_4&CS@ku%{)#NW$A4pNxXWOq%*w;mG*pQ<>(NUdCq<j`CIg1_^l2Z~0 zlV?l$5A7fJ6|{0|+B<iXeAO-xjTzOHDt1v#(m5G^O;3?6eIcHInEOlbWLQjX?18)# zfTB$;A-^V+X7Ih_dC1YO8)0gfu@vrjdL|t(pD*_8H$xOr-?V;tF}m!|<rQ_ux>cl) zXX<yto~jhpj=z)hVxq3kX2VGnhKXF8<}=8jsKcN%fFcGo+u77^i3O+u${lFWbQ^i- z-1(LVzn=O!WsD9-*y)=8)0fn+A2~5>H^)G9m0I*vK+bOtg5BqQA<iYg;DF7WA`bSm za7&#K1a&YrIiuw7BSP6Ex3D>Ty_41a9%|gZO7~KMAG&bnB8}LO(hAEQ0>DBH&(Fg5 zT%?J73l(RbZ#JGhP9m`ao6n8l2hD^Mm6gRtIvhoWCMhvSpGY$G|MlF<Q}2|V31oD( zkBbUDmwSshmKy#;N(E0I`(9F%C+cf{`9U<-gug3&Y~V^1Iz+Be<Du)mD1U2P-XSzu zK8g^}{D!|N`X@$mQbhC%VHe7{%ntbrPWvn1ogBrR6z?$mfar2d!){&Dh0%8Y$+kBX z*598R6)80x)DJEChD6W5Eq;Z6?xRd*d0coOLY6;RBMNqkH=dMQb}L(=&qeWiSG6M6 zLrksZy@@KJer|Fb^tOoNmbds{DsJRcA=$%FefjdTA0rXpv)#X_RhD>0v~>v*TiRX3 z1Pe=A21usZbuXFe-S1K>giF8B{bNqoke&gVkt#snvjq*|W@^-rGHRCHD9AlCqZFa= zH}4oLxU}~r4)SE%`7r3D=m+i_KT9T(OO$1f#K;p<K?GBX=AhWLRMz5q*F#n}j)~uA zf{7eOG!78b4C2rdZL`OxU)Q90Tq*wXek9vf6d*!Arl}I0$tSRTvSzAyQhMwcpYc7S zbjvzC?#^ij8sfvm8>#UnZq3m)o*LX8Ey@^OO&YgUsFG0Hw{kpeB@y5a|6?{2N|@cK zO(^A34ox^N-PO)M{f+al2Mvq<{cdYj0{a!u>Z`jYrX#i-##QhZx7F>(SatK6-jx}_ z8{A%No^%7tcXtwIbZ>Dv^~R+guVUFlr%mnoTNHssZ+4#gfmlt4a!CJ$Hjeup{(?WV zsdwAb*O{*Wp^&09#_Ra4i^I6#Mep`!+E2^JDUXzc298Sq*iPOu>9!Y{)9e$a^TKCz z&#|N3x+Jk((?X#|8n=MW)Jg)aBqnDuAzeuI$q0#kfsd|)=OEi-Xh@DiYGm%$H`9$T z4)5gF-xZP5b$PCc!PveM?ZPu99#1sw7Oi`79|GZZRb`}szCf?Z;lf8$S5oB>*Y!Sx z=zJYG%Es_3X&~l3w?WI7ucd~V82<I1S@9_&o2OU{hK4^8T#d`kS$2HrF&)*%HC<u> zyB`V=otZXjiRA?&=B7oeB>nVy9+Y~ID`X~EF1&DMh3(53_sTwwogcowlJ`l**nBrN z5P?^Vzpl7nY-O?GuOO_tEIZXV0%?x}#T~24nDz}RpFx8j=ORP}#-z$|wFNTg8C7i& z@D46X>K?f6IYz9HmUfrE47c~@u#KgC5+32~wpK+LIKnXfIsPe1qu>{1TjTWi?2F&m z4;h*c|2j2=l0Q<<xE<xtXNeYEt?bQ@-OPXL@}rcpq(17+%EyTyMxO+~N?Dz4&58PK z?Nz8U88HQ0py-wtHElmpz0=Pw!VCrIy4fXQ25z!6r-JWF4rF^To1Z0|ulkCq;6QJ+ zwb<NAp17q&1HX?c$Wfc`=P5$1-H_sM5P(hv7&Ts<2~U4BMZoUfnkdIw2vc|1eP{O8 zllPsP(H=$cok$Riilp+TR?|g~mO`{&Zk=TJVXI9seB0p{G9~?o3tn$ZD~LQq_q-SU zaRM)7<+$fZ|0GIy)NLGT`nUK}%X(R&92_KI-l#NRmm-X!*S+I!J>?AQ=XgcK$RGZF zm9zoJG9IGh=DZDHuP-+siybiyD6cHu%)fr&&4Kps@kAaBGJWF9vy>Q8`7R4F#+vPS zBpSaX*|EkQ)o@8s-t&ppm}L(N^x%hFO!x02v^L#;w9DIl$w=qd*F$ayI}Z0Q2if35 zIwo!@to6sfMJaL{*?-_Eg!63bUHQm31*(dk`L*HpWJ;QNi+JYt;1BxjqoX~`SNVxN zXdqqA<0>#B>W=D&C#mjUzyeU-W<bZgv?w*jtbu2(`XQ#(;E^6~^{Ktv6O}#Ampd+e zWN)!z>&ATra6XRBF?JIt9VQNs+n0132Y#n@XY09|v@4&HCR|m&v$@II6M6Eo%3MF+ zOav#AS4@O3b~X{@s?&V+$RGJzHFOM<w)h3-;kY}oXXGQ0`y=*YGKk{mGBrDX^>9XI zCd^7J!7?g}Tpzm8bui0bj(L{wPfSGmsryp=gZ++JY8Rvsg&(kTh4!>6*3*JE^>hB? zX94ML_q|}x;VQecQ>kfs`nuY!9%9^_>EG+|vV&wbFcob#%<)w(&!6tTPA2`3Mi_Uo zH7WurJ+A7T_wokhl>Bkf4;(9{_HGLTKd*b#(I$2kf}#5mniw9R{84MXp|P`DKZI$F z@}17>-IDdy3@r)P+p&M|&V*1dQ67x;5T{$MD1T69I9a}9tfvWCk+Rx(15G&D2YI6= z)?eK~h(5Exo1)E)4@ZVfq5L-oFRn>HbnQ0bGR=@Wvvvd<P+2eVyow49p`-K=FTC6; zFW?FlWWO+27nG&qerVCA+0)m2y{S#FyOn+aog?66jFZR<eKhy1-K)RiOkTm9QYu5x zXj3-afWa|~>l<pnE=EMT@{{t<M~uUY0Hu!cBSEi)Ku(8%8O5(g!T5bY6P9>Dy6_-k z%^Atq?&rCmH#OBKf<#2$)3Xy^^&5DP*72>FRtpl=PYE$Cos?dVKzm3gh6^uMD{*$P zjf4miozsffv(dnbTTZWzZ=9su5J@KZlfq4-Qj)Jda$f0jkoU@alhNyP0lIu0HrHD@ z?!H|b5?x!de+xA)s|@#a;6YnqX~cGyP+vf+_Lvcxhz)OtV#>(F_bwK>g{)O(SaTb8 zCT1wvRsSRNf?+_>_<iz|*H_h@CMFDX9W9=g8^`+PU36lmD$I`^-5#mzVWOQ~qNy7o zfi+=cT!)y*ZbN(aj5e`ii(^WA%L&2<>=0<$N7d!0*eJzTvYxan-jJ;7cP9s-yTpID zd>W#8AL}73xAp{a8I0K#CUle+0k?Pr1(`h?_UYbbdn8*f_`nLy(W&G|N_&fa>D4r7 zot{$-1&>csJ%7Ns;S45sMhp3Q`q&__^jY_@R>A}NX1#Nt-4Fu6`<bTR%QLapAnSH9 zK*K=*G!^J0+XGu-7w(X-ou(g|pSg(%Xo2^Tu!iFSILdC)PPfmL-kucH+oYv}9cAkS z3y59%Yt2aYu@Bl;f(lYEG0GOqAG(qPyohfs%!ldI$~Y^ga#jBZoqNpBtreYCcepDl zZ8@{X5hd!Lw;^e_YdjWA>G+4oloz(d9aB%vui<VA_=mSmNHPX{xt$#{O{IU}$CjLG z3s;vv<`Pt90*ygYy~o@TIA%1b429~I78y<ZF_Ke;krwWu0;`kPl1bf}-0!*nn&097 ze8^vGtQ9NrsSRi&`yBsxy{I!Z-mpAuUQ6U}-ptir{vxF8W@i8EzT=?esiozr>MXXH z?7B8UN<S9z`sV=Rh4lSetP)?~i!ss<;nLR;7XHh2WW~JGW#`VvkqXD=fa(fRo_ek@ z;AqFUzIT(5-xu)<YDOFk*mqd&D-(}=v}0*&`H~(r>b}ZSy~H<q9Fyx>%VK2vRazG= z?Hn=P?T@7XNAvF2cqyDviKxBVGoSM9BaEUF1BF^cJzTMYg_`jt7(tDzKm%P2Ib0Zb z=bs6Ddzf%DP}OF3zTNk>9N3^ZPVcYp%EVg`@fCL06$^322J0;);~H270ZS7qb7?^( zi}@G85Vl`Ga+lETofyf-RLn#&W3KH@9_~oh8Tea!zD>?{L4leE^mj4IJCz*7aoqB< zpmd-fBI-_LkHyT#JN)woemRILhBIpc;>|1cJpWY~*q+LpX+e^;70%7{8y0uWuEl~H zPM-OAyYXu#kle?jR)xtf?bw!-eUxECzg|yx4C7fI`xSdlqs5)Qx453$+CPwb$5)zj zBK_^&l}Yxx3&OWY(k{Nl@7Z4$lmYtNHH{T&8jfS4dQ4fG5vI0O(liuv2#D%!9rlMB z3spT;y6xTe9Ixx=dYCQ@)>5z>Fu!;J3Ncho{pcZNF$h^%b?&-b!ewC|JklBJ3HbTL zLh{Kpau4%SraoqTEZu`hI-f2lqf02EE3vf~-8brAqZT-Ov0tQQ=-QWNDD%g^W@j>S zSWla~_M`0%e|1YEKFo!^6zV3Y0a`W#t_l~hI89b}xjfJL8=OHW=G?vJ|M$yqv+ZDI zp?bh7$Te?~a<@V}<I#tZ453z#RsGSGKU-Usd+l20qu~6v6Y-q(Cu|cNxuLo59x9an znmQXn`PT>@=Uu-PCk%VNv%f>3a>7>O>3lFR0Zg0bKk#PFq!f`J3l=(A^D@lr-u?9= zm-37)01mC2&oxeH+Y`#IImXExVBuY_C=|RmU1Oetd~v?Pq3&)rFDH9*{HMu2$|`Au zjy;Pj(wHlaA}PT?XZfow*7_pXKjZO*-O-*wsqEjFgt(q#Bkrj`hVVg&wF8_Noxwhv zX{B{{ZH<#w9tK1OAv@G&fno<=t3S^^0sBYbOZNuqF;Ui+)5;^pXpad7ZRpfL%Rkou zS~R21ICiwoBoPa>3VXlyOY+#w{4@POvPBX}U%!7<93_5B3CWS|J~(x6^6`@IR7B?@ z@W5JU<q6+p+eN;zwsw`4v6s*u(-Dz4T=N>g_4pAYCMFkIf7w4$IpuX(WK=!ENh;g@ z^uhF@tS;FcK^K*yjiv8L{y1p?*TC=l0*;ya?dW3Kmw&+T*>0aF3k6Io`Rdn@g~o~n z)|Sa7y6d<ApA;-T=(*+PZYmm_mbtLF?YR_6K5}?cSRR(T_RX&kv-VF&#BF107HSBv zQjl?U@Rq8Hd#`QQqwO$g!u;U@TA14xmkz{_S<la`=&DFk^BDJ!3{W^KPXI>ODDDog z%yuq6IMuSWoq`P8l`+0r&JVi3w`<b;(veuIZEvw|DYEdOjnI(tcRFvq?<G=Sb*Ei< zp9WLbW$t1!9F$lcOx~vaPYZ##qT(=VL(K;f3!e}|GNHEt#fwws#QoKD*=^m|fz_n# zwg;Eq!RJ>wE$$PinZ8^4=TgY!e_8&ydaG94?Y~CgulUW)25)v;7AV$C!dr7(8?%Kh zfGJs)^Arv-?lzsbDKCI>;<h1oO45O_&FdH2Fk8V93W$%z2qMBmoh;0@8DOI-V^@)5 zJ%cYaQO#c$AZn7LJ}0kuGJ~%bibg7gZ7I*WoE!~EnZ3IE%>fyeE4%zgG;A<M6rvQj z`NiNZNNuvTx~7s|R{KJV?7=Zb(zJ(=Z`^$F48HefC}-)y<Uvz8{Z3QUWrXC|8%(6Q zv+uXIljbaf;K;G%AI@p8#5$YYv8v<A{Re~9qSueq0rq7p&%{lgX35AAj?oitw8mK< z#&t{bI<2ntn>#tAr;L}!7mZ}puknQ8ibt9yte2&54k<ea1fFAcC}SZ~f-Y2n{bk#4 z`q;PYHx(;@zO3T)w-As02cVNe4+&dTtxci~#qsXtM~g4d-@ZaB8rGoF=csoSliOS@ zbH>s%3_b0tPDmz*b~`WE(EP$*u7(D^cN`IlItL!>n<d}+@LbkpZ^Tf4-vn7qex!JM z*(smjJe+roU;pkFe3Bez%}93y4}EruFPuJPw4muYsgSNHeHuJZbbXxKKGx0?AyjGA z^&%S#*ylop415Au56jnUuU0QoeIVZ{e{>>lOb_@itY33Lq@w*yt6v{x8>V2Bd;P%{ z*s^N&V-5t2`_aaJHyd>mZso7g@n_qZAM>^;ac7VWqckGqZm+)V75wqaFQ|79vtE5q zO6_7vSQ8&GRBUm$Pn7)~x;K>CKLzul)Hddp!<msZzw$S9tWjJG3GVN+!&zDMQMia~ zr_%IZ?B$&Ukw>(iv<~*3G}S*z?;88Mq=56!wlumrE491r+2!*B&JY|1DWKf@mJ<<y zGK~Jr#yx}YDS1boh<uLLX)ABF2MdnbakdJ;C3>n8SVgkTCPhqcsbyY2bi(J-bh;_* zjEq|E@LD~cMGhXgNQ}X6bBL6`_jgO1IoQ{{$Ihh>ugDOeR)Z0Nkna+*PZkf3(`AUs z)sS4Q6g-mweg-eV?NJ4xJ|nh;oH54q0$7c)4=e=V>|NsX^4^qqw0L>8CHGNJ-282T z1!WH~rTFj-WhxLvf3Ufn7gI2Ca0gHkwo*hQ?wVl|1SR#ZbCiDWNep-n^oGY?o)p&4 z=;X^l+yTV<Z!Ot%WpajtbzReo^rZ-F#QXw&K$3pN@y%B7A3VWRJ_uhw*WeKdGjR=D z+P2p5IBJ1r)4hTkjC%ng41~WBh0Jg1iY8C^-(SjxejY}Rq}AI&X^>ZR-L`izpChk6 zlsr3n!L}-W5R&_E%=*kh*Q}qmiyFDUDmhNe^jTR)ZRR4Vk;r5N^@;9?G$G>B{646t z@j=BnX0s>6F(HDbmNC-0iLs)yH0F?}H4#VoyMbhfW#RtQ$)s(lxVn-{?>v70>ll;T z&mK2fkOZ9Gqr0x?VA<6zChhbOJH&jMGpvUfNa9t6XRiJiXT-+#(!(3hr`B_q-xcb} z8r8bJ7R|pcNvD`}t}DgmZSg(V_fKpEif6I9VXcOo=lPsu`L2ymc4&}CMbk3r+DRV^ zr>A(!OC9TELm&FN<tKfNj(a!XmRM5XfHg+A{afd2@!s-%kBA}<zHkG6XUuwH^@ESn zN1L@+oX*vxarGPiruN*SltIaq{o(<=de3tuyF{zj%Up6pw|5S9=O&aovRTWGEB?Zr zoM#j9DX%G=77xPYZ|Zr&j?JJmhcRfkuFv^vDt!lZ9N`-H`8R2?rj9uEw=U5bp$HaD z4-bWW0L4R?su$^o_*vNL`tM@aE9?f+E06Fp<N^AdWh8^JOpEevhErb)4P4?40z1(= z54`&s`e+}??j>WfhaN(l=_yjO+pI{=Rl>jx>F=VsZQtCTAqKDhV1Z}@_VCt>Z7}hS zpz@<{b^Aa}*h(v3GTJxLcsKTYew4d8hWnqHcTi3IB_)N(1aHfspLcY6K5ar4R> z?i~MpC6wtNz!5C!R${18s}FRyIg?x2`na9_to*rcMQksP<0Yfnm*O|47#{*N2|Pvb zFRJL4Ks%CI^Arhl<yTqkw_c>o`6d)tAd7ofVy*Z8NrGE$W&d9o;F7i+%-G&NV%TcE zl^qCl@1p!4NPO`>ZYW>V*xuJED)*m6;Xldf*u3a~58N;Qd?l2{R{p*wV;N~nq9v>+ z-0%NF{3_&L=YL{9^jmgy)c*(Y_abjB$L6gy(OAnSDmy3Eq+;j1ZRkjvnJ{RPPlyFs z6m;Nxzw*vwX)g{iad&H4@~%%;O-8iM(pgx<HMyFdwDqk8w^l>wdS~<4yRthCLy+#b z+Kk1Uo9*^ZKP@8C_mccq0tXbq?M%?&iR;z063pM<V~-y0eal~Z=WH5qzz}m8SUa8+ z%0zwvuYcBd109+80OD7Xs^mK50kR&~dKbZabMueNF~veI@3gnZZ`$HDMqA+8=5yG0 z^AP|2ckEYq;ruEXyOie#>B!_Y7?SZ!Gt8pMVp90($M=@=bY#a}an~=)!#MUUr;78d zvSj0Y$*!&pP#Mh8%r}?kN<O?yIHK>(h0pOR@GAE%9eFRPUN0m+*;qZdpI023cnz9T zxzhjE^6g3+qp=qNzvmUiQ0ZdHuuoN___^{vk5FTynCD?V=T{Ob!BwBO!j?2P*Ly&r zAJFL;%KlZ)Y)^=>Jz;ztZa{Q+#T4w-w5b^gQuZhbMyo5f)*O*?epj087OmoJ>U@6V zZP$LzYo1E^`-f|~TDTT8y=085m^3dxA7&=u0dx(&KH6)2=@+zdt&<bW#+vAnuZ%Q6 zji9Hq?44FWZEZa*-a(v{C5N7Mo<mZ->$JW>_hso4l9s27gnw7&1FX@;^o^F9-l5<! z-W=EZ!!4N1^wc@r`_pl+{x<XC^(RZD{_8}PWL-y&LKk-b1w3(gA+6zx4YQ&?-Y@ZP zDJ5(NEXT@;iLqNPu`_v?s4H7WYbqQ5zD;wmIck&ZVC|;P+B-)DhHb9ie}Q?-4Xg^l zF7s}t$0^T!H^0!n4=X?4f}I7<T*FQQ+f+!ioAfr&Oq{EYM!voxI$Y~=amx?50)Uoc z*>_C;7XGfg9E+1@JJ{S{cu-{Uq_Ci=kW-gt>09^BO^#YF<D;CD+$3|azD7R=3il^V zj~#9IlRuwn;IUJXd?nku6sn*l>U$wVKv&x<j+^=p@AF`ILw-E%4;BP4OuLlzpvv3- z2z3XW>D=>z$RJkq44(05iRQcs8<(i44+=Siiwv_9>DRlDtWC*g?Nlhbe#`vQX;g!- z)h-z~Ka#q42G<Pj{XMskpF&&aBa0{2p!E(igA!D*k=opEy6k<pKhS*G=u*+S{o`iZ zrd*ZkE`D9+LV&0xe_r$MY2Ef6B}(ur?-6sbh7CAis5aZp^|OUjTzL57IK^D3oqHuF z!&^>nwKYbYz9|$TZZhn}1JOAeo(cKs_M?%ToPPMR*|lWD*b~I!vtU-*Ffv>FnA<m# z2BV>eCNueTy-9Xe3E`t6Ga~1hvwZJN`2e-W2|CQ16v3UW3)8gSAj#>6fSs0}i}+ud zlFnj`_6}gSZz*p^CY~*Z+xal_u%VOpD(`wC+$ZT@(^=ay$Vt(gkB+}x$~UNQb9ZI5 zAkFeOic1fLZ?_Dtt}26v#ijLz{0>^xAR=4hoU=atfx5ZOs0Zc^Sn&!BY12WN$}7FX zy=RW?Pa2C%kxp^!ys0sTX$bl@KFa)LnDC`mN{)1{_{i;P<Bj%S?0CFnzVD=X1hUid zkBs)VM|r2{fD-zZTnt~mR`IxU2#R`VzidXaIYRmeO2?Tg3}Cn79LVo0Kp~Yve>)R* zYw|SESAjglHXy?`)?|AKV7mOg)JBN8w%i%bzIMY>hLIsN<0b@+m)6n{f!x~OA4?#b z7SsIrw9C1xUZpWO<vVHflZVe0pD$9i#!TOc&2eZeeh2mXmozm_im9IuKJ!_dR{3#$ zLkRGd_4CjTIF$ePF+E3Hp2(_n+xG)>b$!yb>_he(kjzZ9AjPfe_!yAnm~O%oG`Tpk zY@f#obQ*Kcr~gV#-C3=1V?_UDpIhj>=Z{b=<wV3LfBJ7ieXI9F+zxp8xJgFseY#di zJe~D(ru2QBiyk2_xd{SaJbe1Lmrtp2IF#fH1ieXs)P$zE6hnXfNQ9~Jq;Q!$cWlxF z2?FsM+WNRl@UE2P&eq?h8$Sr83`}e7)BLMt<(aD~k2`}ax}Fl8eunFUOF>N`q>C3F zp|zg2BSb?mj;Ag0f=I`(hyE{>KAu@*b%c7h2q9}C8y%a^56w6DYlH)p{$IS=NH6h( zrP^Q8>#TgdihLVUH^BWb0!N3)7neRF&eDhE$WK-4g!{78RQ>oADzN{H=@-*^2S4_m z(Nn&$)d#N|&v5uoP@Dx{VA49lT?!Phn_e}obo)o!4_m}VxyEDmB^F@5_e5(&g8iA8 z$j*x9*Gs~GQoI!Pxwp`&KjPtE_!;+(?~fJ!)c|nR37_4Urn>Q~jOr-L#bMM$g^NPF zZ~tPc#r0E{t|zo_|9z|E=*_U{BCrhxv_47g@~OrxhSg<Lct=Hik?*2!h@CI`8bodT z;8J&@y8ukUf`@#RlrJ`9NswBfo34ECpdDPAlXT8q&{&ZEv5J6&5=ppEJOLtNA!*AT ze5oFJDzeb}<azg2XMxd2*4?Yk0;Ad$M5KpE7n6j*_Pf_gL?12ikqQ$o!-g8^08QfI z&Qc5u+cxWHPnQlQ5#A?xqez*5BO-PEKJ25q@$T!Sd1jF^7q;Y{ERf2*u&Q3vCs<E2 z)V;;<GNF(GDryKI5}`CNO;TWhwJQT+L>0XX_vMI|Vy>_DsD|4(p{up*UzQjj9a#o^ z2`Y$%9kHn(H<It>kq_bQCNcNH>!jvBZ7&82a6ty>bpF{g^X=3`4YG{FtZpgiU?K~p z?*Tia{j$VIh!q|rdVT@B3hl<0u}p!AmySVRjhEPeA6oA+J{&-v%}#+yW~ZRTvs2io z@_9Yzr-HywSEc&dn0yPjYb=7c2)k`mq=Ez-YMg*;*HSxkKyg^VV~}_?I1#h>_s-1* zv>doHfR;-0u*FD4ng273>4r@j2S9V%pn8bcVBQnI>-JoXA)WC>R|Nb&P(u1m;~ngs zkUfXV=Z&I=1%a7Yyuu<V1^dWF7&ea!!;@F1jSOQ?fX>hpU4&Ty_LesTSgMyt!z*mT zQZ@Nz3ot3xW>N5%RSeQSrXRxm@3PI^9%y!59L~ycv{Vn$u*8;VmVJXnZAj)onZ`XR z=Kb!Ga0$<2s&Zk~w!V9mmfwSX`TdCNux;QN8;L5yruJT7rm&1Cy}iu2;jNG#7^->W zi_tr2IPz#ApW+zG6D5BObvSdBKW<bgK=i>;Cn3Lxk6<*X_>?duK~2R~7#lOOX8sH7 zR^Acgbab^mo6jSK37~q>pU?JP%O=tT5>Hi(=s2_YntIdbt&V1F#fbV~erJsU+n;}6 zD7MV(b0QY+dL0l|)&bj*CEr%I^Mr|)&aNG%dq#%l7r1&j>m5~=EmVBI220uX`xt*` zIBdv5YCIevw2d+5a$e(D9Uv!SUQ?Y?V?07;Xh|*@lQE}$zg8J<t(jBh;f&kcBxD|z znRFhXPkPZKF-~%D+ul08kvq5E4Aw)k9HX(Q&Zc@Ww2}^7I-7y%s!&6qDx#pj3=!=u znsXM;MjyZmjoy&gE~tE!KTt$KW?0U<Kl!~@>7Cklri<cv+kU&}ZTEu{g%9mf2~L&a zC7VyupC5Ms)L5+-tbLv&&BiIV+sB-Q>ClZl|4M%pZuERVkp8ICuQJLt`D9)=Ey%RL z?ehIW?d0PMfGvhI&OSUzT%q@ptOP$@14)ropT>a1(!>O&ods|$pFNxO(LE?&mKbvP zO*RN(NhuA8V`UENmi3yuJ$jf4R@Sr!g9FQ+B-sRCy}Rw`j67&5z6je;m+uNFvv8SC zlI?3qMT{2E`cHhR9e)}%?oY&m5X*$6*tcm_M~#o#d$VB06kxVM@8^z$C_NUtkj3!O zObZ}85sPK+%=z4KC*PmxFqeP{iur@C+<;_*qZ{*HEAX~$%$iB{GH5}0&I|%+5AH=J zMQPPo3|N>5+fvPsAS?c)!=h+<kti0|{sqHQWnNguaa{l4-F4UV>x@?6yv0hO4|?!8 z%u9MdjK4=Q`rVBZeJAhUg|VDNI0PX%)bYk8Ip}tfFf-keX*=X1hcHOd@`GpQ<%`nK z{M-zHRRQF+O$HB!p}H9Iz`VTMaC0?!K3;MNof3LsJ~P<l)Jg4IM>%xGR}z#Jme}X* z?6L06xHYjOHZT%+hZ?bupBJ8oyeo|w!#PS5P8YrBI1H<P1ln8?F06q5Q!G2ylS^98 zgpOZ-c~?=pQ)d}IderJ=dCM~AQ=NSMI%BQRw}<rZ&b%AyD6p-l?TEY~ZC$Gu*oK7( zi&fg0lD&qu2q+)OT~O#C^OlF;FtOGCOB}s~1I7|du`#DqUur%KrN37p+WeHXWM1+g z6!kjj*xqy?nCd^*;oY{shGk8#WtcoQCVQ<psed`@%sY7v7smEWYrpeDyjFf*8@|pC z67b8-PJ+W&2B-6>wq#yi5bGsnhxEHy9>H|jo7y+AR?;78Q6A8Jh2P8U1M9CbD}1X{ zF)8k-dVsm}DQ6$VPPS|Lc;xIjK02%%g0oB|w=i$`&*!q$o@Fb<FU~#}-a$DV=GYuI zddkyUZJV_%+bl6`+FJiAuN0Mi=?LAYrMz{Sf;R6vlqYmp<?<ahh^-FzQdL7|xgc=f zw--<HKcrx`;5<Qj!Xje{8nRp*ATVIKA^PC$8(xu4-e2?Q4`Nz+XznPue*sGs?t4v% zIbF^bB2KaD+SvF%(^h|ay3-tgG#IqKo{I>$KR3Nzx~QBwYFh0!jCT8E^a^}vcz{ua ziSJ>ijKMKiTgM~PZ-^?=e9u0#T5@J2I>`DrT4>k1%@sD{{kc;3`g};u&<A2xxn~28 zN*s_?_#=}x8;qF}|JgDq1DMV#PHZ<>;<G+<P7Bdn5<Hq;7Tf|S9jJ^|by?g~aA|GE zpD|UshM3ilp659z7|wQocG|d)@a&@DEII>@s!I18F}+0Vbf)Hck83B-|8f1+HQ%HG zO>Z7TOTb$)Z(kmSR@-(`JPXb<b)Dl}e2$tQ(XaT{1fScNoZqtQZC8Vg)J)f@Cn;i@ zfibVOvqLU4Jk;{3>a~_p)KWKQdu)HIz6Hs8Onh0`pO|g05a|X6o8Ixv;s<ZUv46oP zW{zP$%Q4b-l40U^@S}D>mdySR8a6Pss9=bOc~(H_MA&CP-s1I6_gcBQ6GP+UagCqM zb^BHJtA=r>9go^zCcf<^2zjUNj;iI97YNS%yB~w7OrF6gi|_v5w^r%yP#&)p&4rmy z={ue0jvDrJ!&mbF!ONr4NXcNmpJLW}!HSa?mDlJX*y7;Tjg&$fb8|5SvbuaS-|E(^ zV7Y1wf!_X90QD-0gW5lVD@QCq6Eq=r=78co@Rjq=x+A?1465zqwv~4@bhgJ5Nsp3U zoORh9tU$`BlH5s5fN)aax^eFhq^Gp@k6zdx%p=2@=R<hwH5Ri>>`Wm;po2dzib>B% zF|xSr(7HD%Jk@rVx#8{_mY_U8t?Rw7J{Xj^dD(?=o_UeJohH~nlzVGmkr!o!&I!M6 zeB=ni7+s^_o2v&~+{kn>g;Ep5KEkkd5H=eGS<N;TLc%%h5s<MX6U=aMUmmu;bS%_G z!IxkZO-hFS@*xDH5O;h_Mwfj%*X7+YX#ukPz8wG$Z2E-#Gk<&nZdzNrOJ_d0wb4Uj z#yteysWlYuAtD0iK7(mG49P(C_L$0(Yn0p`==kWIh_34@Cx65<^X7!^&gk|UZFwJF zv)8k-WvI9aZhItB&vK-w;MJ-C9v?gM&4vhKn2YxLZsUbbpF&P|;TNI8ii?(WgLT7* zj|YO;Xl#8--3-~dL>82tr`9!Bb?$A;E3UO$+x=&7w)u-scX{7#nnXK%T#rw|bFLO6 zxg1?=sFmP4aGumlu49PALK0T#UqId-R666j4!g!PJRkT(*1ky-do4IIg8(jGoBNE= zYjd|viAzj^AUhhVn4s7pp(p$^lPan+6zvgI#Q29WA5}a3rZYDNwvQ2ne9T@{eYgk^ zC3W6g{Aj8fX<qf;1*gq_i8hsvlki_Yl3g>@VIwy|EaOK5B*>W_e3agF`M8TEFxx6n zZz^COSfC2Sssz1I5Yu-h!h4+;TRHalgLPhPc&0!ozUV-@6?#g3gYaW7{3VWrA_Khl zA{wC_pT0{<K|SKF%9bi14;S^{A)#_D0}VZP?_(g4uPMDF!^v|Re!M0vVw5RhbM!4L zAp;sAGelrH_IQ$i0VhE)nyThxFgTL(>|z5ylx)C9^@eLMgvh6+^nHBmru+txU#}&F zzLFL$#EgiUqDD9A$|90-F7bWB`%n|MP>>LHB>Vvf>-ZzwzaYkI8?TbsSqD-#>yk6P zbD4|~b~A$238K`I+G~v)=_iQvo>Ti4XfCHbc!avkNbKc}`|+0Dc8FPGtY!8yyclK6 zf7GW@$w4wIzX!deJuE)QT6}-{kvo&);!Vlfu>keAYrGAj1V0?WBVvgAO>?snUj!+E z2w>q;D+78}kFA5jWrF0G03abxgP5+ZR<e8h`Am@v3t(ZJ8C-{4lhcF(Rrut@UKUVv zxkdrZL=Zv){C2n}3KNyT-~WvZp|T6*BC=rcvEEmUWLWQHMpPFjX6f46FTUu03a3&V zf1k<mKJ{tnk&Ywx0;G0f{!cR2<(qi?Duep|o!TfgB4qnrE2a0mEu>mGoSidbVRlGh zRYmbRq5M?0Y`5Im<50&Y9Z<X^f~|>X`=Mvj(4)hb#~Yzm&&G#+o(KMjt$!ptZx?ry zeMal?#@eIn%<^lZPR29&s7dX#y;voDI|zq*h%zXhv!i;O*o|>Bgt;mGqx(PQ(RGFA zIJXcQWnrhcpJQ=qxrb=&X2ze)@bj%di*N%R+uOzMYmGYg%qP{o3}y0GU^9D3=|~bF zInK4KP_xsW9=84NhUAcua$S)S8@k^A!}X^*!Kmt+QtG77epoVpoE@BNN2)pIBvU@s zw>aI)x^m4wDI<snCe3t#Er>|9!N<giM>$8ei#;g7J|nlWi#S@J24Z;m#eZhZzv33x z`%3YeZU#)|v)=Csz}<{BQtnuS|6bnn)N&~NtZbl!zw-8sgc{}j@&@OSHHeIj=uo>1 zV)bnM)k%-cjpX<&{=Ofu+jM70e7t~22M7AJZ|YOVHT}9Rt>dO`A70?D6_|=sEr(`@ zc#{Ax0_D^9`8I-()ZFdS2QRJ<Sg{;|l@NCbUHDATVw8$%4L&NS{uhh-X!tSU+AxIN zSNyu=nfl9G57uKZH1VO8BAO{OPYiJ0^|ezWS~f&N<pvijb~acr4jrRcl(Y;4CA2!S z69rw-F36_}_sr9iR^kSsIBmLU{fMGVZNToT6j*A-lb1rc5QU+uFHbgriA=qn-Vc!s z?YNP5KUY4zPkI5yF!<}JEP?T8ljDMKFuXW3&8#xe=p{ZC^Ph;9qOi!$8s@MYzirgx z8O7a(X0Kf=i6U-y>7>BF+UxH%4{q{43hk~$NHJgG9unDre>zfKJcuTNY}^IyM-VF0 zqVPhP)`RGLjDAw$2(ROB8rl7Fv;p7%3apNApOZm2a;S1NBgLP3QgY(!BI3Ls?umIm z2=3*4af8LN^cv?ZJa55JyL3dgC>1ggDcc%7<sfAunvJC@e=<h%np}|v_FzGkQh$3! z-DhID2AKEi%!~WtOWT?BM^?3X6b(#yoo{m=M>XGnOYv*#b87sV&NF(S4V59P^`oAw zf?E6xB6I|ynetGXx(K1cUn5Td!LR;(m%_>U3EI^KBjEvlble6x>XeUqOD^W?WQ<N} zGaD~(lzxfjcO}U!2W9zMmhj4NcHJytj+P{LkJ>M{n}Wm8#E>DK(_aO+Gu8~TiRvDm zGSaoYYa!pJzXaaBeF1vV0Ek*6l}{De{N5eqdZT=Km>rS-SN&`g_z5(Tq#Z%A;<6>u z^*|v+Xd6Vb3@LQnQpAa+XGb7vj3OCC0RuT9Qm(kxzZeEVaWa49@DXxnE68UTNsdZS z_LR}$r%}Hr>2(W1F?(b0SEd)As=EP`M6IPhU>Ij`c5NO%|DK$%DgSx$Pv>t;pyahw zbbSMLF#Mo3;t872KR-%v+(JHrl@ueg`{*+4@fM$*L<LKQa&;CyN?3`qY1Nh#n_dg2 zjQ_R7bd%dE&X30gfLw?2UsvH)Sg~`ZD*a0#P<}baBgZ9>z3NBCHMh_{AjJQ*lZ{Ev zKa@^TJHAuk+L7BP#0C{U?dUHZ3QGcnKx6_=S6X*gd`bz}GkR$bYc`G1go*_*ibrOB ztsa~Jmt)eo)8d=Dp{txNhr`BXTkEG=4Z!aA`6{jR*6p8Kg9L8R6Ev$;)$=|XiB*|= zN1k)`jvVBFyO~hPU>5Oz<ijcxhSNoECY^c`<t7m{SqxmyA=#ave3$BmFHme;Yx;E! zUhHHse1lGrZ?CNy-Mf)4q6V>9a;PE(7k;|xS#>>gOXpaPI~9AHmRLf*&&=81V_sv) zsS0VVFp#+*eoJl%2%@tWEFCxdx%@E{;XNAgq@C1UVQ=!x1<0=bxzVKgG?n9mVJ|!p zNx3VZt*e&m<1}LsseP`Qkm|*GWJ|Q;WiC*XteD;EO$jG6eE;fBpopQJSRvfzsp#=L zWYyvu!0)eXF8j1gr7`|TYY7dD?mAL<jC7~3SeNQOJeD>Y&^W1+`T1E#-BqKjxf$8E z&+n;62gBok_M^iUHB!R{R#36GYHf_j<bI+Eu!g1DZ68hVn4h&G9PMrMb?l3R^?}-Z z#6Y~`{#vx6$n-On{&##awUsKW;^0-$DZ=3JkekO7G0&#t_22jBu#U@HdQolZZSp$L z*B(t+B5LSfKv^ojC3i($iWgPehJ|MNQ4n05l^T<M38Qn@W<FL@_#$q!j*mR;@%Skq zM}s{Rcj*<b@R<IR3*{{VL|Wd4v&7ZWX3)aC6m;%{Y9*Q;LusOH&2YyG2~EHXXesO$ zEYg;RCUO@#%)G-eSH3YidpS6o4bLDVnjD`1)1C(^?7Z2?@q1EFc8g#OW3zu-LMiud zuBl-|YQeui2z~uieEy^RRBtVb2xjFg@n9|1iKm1y&i#RZt-!6zu=*`#dHELUzZGiB z=kbvd<;gk@^nb9G{=5<^JivL<o@(sMzGa|PUG;^vzH*rU)s#C+e0HI;3U%(Nvajtc z^)?2xp|GLOiTuBms}rN5_WNlM_b94aIsQ@g$CNtPtHzftpF{R0-BILptL;<+5OTT$ z?Fi@^;&be-gU#1m!v96oH-=Z%1l>;TWMbR4olI=oPA0Z(Ofs=fY<pr&Y}+;_JkdSx zcfaS}-@AKP^{%y6b)VB+9eYnB6u3<C6ml4dxYLv2mS(`{!ydrBAgB@ggW2LappTb^ zyz$X^?(5FDVIS7*9l5MJym(><H>3`qtfLp7O!GkvdL$uSC?VF5=SNC^3_I>WE7YPy zrmx_xyuy>sso7rJDCr#;o$m!iW(}Z<g3L#fJ!L;ng>!(;wQT?V7MZ6WOK<v6p60(^ zwwrM;L{I{xcBLjf%yWl!5Z*nX$zLS*(>YuluzQUho<s%BI%1p!GFgR^oDD{NR7CZ8 z!g>1~ncs2^1182+^ag=C69Ro{Jt>XE)BrvCod%_|%;MF9T|vJ&G1Ef);2oiWg_Zq{ zI<qMf!L*$KS7xxY=XT^M5#9&Ug<CdM-po5c{*O&be@A16W*Sp0APz$pfQ{CXwl@hs zYD@YV&8(QV4R>oE>X;}=z{;73#_EeQYGZsD5%UA{1^U?E@l~1Ck08MKLD^4OXph7X zqIJ7r^k7U2gtQW*ziG+0nCNrKy`Fma2|tK}m2krYc~ksWfz-QJB9}5m_m9~YT1XZ( zW%}bZ<axUSTMInMKF?&`+<Y`U>F;lM2wSsKJ$s8Kd9IIFlin4cDDKf2?g#q*^&yQT z4*j5os5k#Se`4gjAiwId`MvXWxEd`=7Aae<Yt{;Tcn3kqcC`|@Ppw)$u`lxhSk_vd z+l~}4;CKPzudZB_s0mb*@9oxcH}ZY;ZW}Q%wl}Qsh$9LE<<=l8J<h`Z2&pMgT)5?F zM0h<0Fkj2X|2^&FFF_D&aRH1^0Sd6-((3YiFvo)k^F#l<XfwnSY`jMh?1KpLgLq~F z5m{mc(P_94P7l@!;?yh>y-0ODQHKdBLwEp<Q6w7)lHe?Y|165dVgUiDWx%<{6M}n0 z)W7Wi>2w;|_+=XU|Ltgj>@@$|fasou`A}}n68K-MqQWU35rqG12-Ih%K^)SD1nGZT zJ;8WHiQxI<V*~Sv$3Oofqe_dTJcxl@TQgcE1-Cg37CMb&6YUg*oS*%_uPrr>{C@`J zhyH(i+=IgZJS4*DOl<JwJa7j)c%m{zKMik)y(Mhhr*{~nzU#!$$%)-D>75O&V~Ff| z8*PIBYDD^HqW6;IC){wN1E<G|%~f{E_(F)B-3a{^(mP1}#DSWuNICow@y{<7Il?ur z#nG~Eu^W$AQ<C6;`lx26;es_XqVZS7UWP(OsFdon$M6|coWkkN9v>405<=3#DC((i z@W%z+@|xb-##VWQ$9MFtVLV^<JBr?|_oppIAXT4c1k+TVHe}m(sgHEC4o;PxI6pW) z%inxrJ0pL^^BN_I!>^F<RU>u@wj9-vUx8}xt^Gqe7pluoa+7Zo??N)Xk%dam@hR-@ zG~;a6H(cwxFz2rbM+E(>o-W%6(yo3x?l}ic3EjWhY6}%pR=${?#9xLCg_8a1oxa;Y zlJ`0~Bc&HbUO!hH$Q}Btp!0un$zMwAulxh^t`+T_-TX2o-*P2gaYcPRFOfgQ9F;RV zdgdH2=;{#)Fxtb$>QNLV`Jn1OjP3#(?LO2=vW#=u9<^9JV>o1|`L)w<d}Fg%7J2Y$ z;KRjs_NhkeDs&PKaE#u{qeA&u^5^WxYcP-lp!0A)GQEW!<bPRDyE9mb{bS967`J{7 z=UxARPvG2ugS2><H5|lF%-gYKpK5s|Eo-N0z!Q8l0OH!n2v_f}{^B{_$vLo_H*zL4 zN-QNZqtz05l?^y6J3g7qJQCq`zl<<kXI98gBOZ1R(SG6HPexk7oT}0u(L&4ilM;9o zWR(%VL+`-csUJ?Zx<ok?C;G%}b(9H=N7m!*MVNa;X1h_i(-V>xfc}c`+=F>RkBBp# zL4FfQpA1em76L)_9TqrhVroVcscRjMzAK;&IkAgBD}{va+s9)ajQG$O?<Cyy&8Tlz zFfzKv7*V}nJxUCEIwE`5*$Yl62vi~CXZ;FG17%zoUIs*&2#P)oO8>+yRCPqZuPf0i zI#vH(Vg&jg*&od7@UmT`7s!CH{<m4CdKCGfGZy?tCpvxjwgHG+3Wi9}J=Yhw2mi?E zcw>AVD0E}0=0RE~PKMz0J;E0Z&3@a&H|KyC{-4PFecLQxmVE>~P*{C}^@xVyO1m(L zMUl}+Ce%1^8Z3nSiQ(vbs;A-DyAUt9%f#&RKT%-%NfSexb|t-V41?=Lu4lA^Trv=A zoG@~}Sq&`J;}C_E?OMFx0QXR|Z-Pur5pdv=jiDza1ac6u`&yi^86r`3eP@x2Z%nw$ zgLHWi*__DqVOPYM1)!M+sc+G(VUW<X`>t7#ks~~Kz>Wv)Z(+NjcY@f`o+1T}1qi?i zodh2GI6+o|vG>Hap#uAXm~n*VVS^-4R(*bdU;rW9yYw#*5%EQJ#>^Rr3nXv`PD1)9 za=TDo2t8rKCR^hs`^5Dyaly2+;08{po8WSLNH1vSODqkzm#{FR<jo>@9eV=Wu(5kG zUPwZbdB(F|!(=IgJk}upk+k{^ZXvtC=tZ;paKdu;L^9x|2JW1286u>1y}ht|!tzA& zq<#C+>iG#EADw6j;70m!osa}zX9i*F(VArj|CZMCtM|KQKx{dYZbG6Avc2GZBKUCr z!|(`GQHFDO!YSVM;vue$*w`cWf;No&wa5R$j0l))H}S=Rg6YS|KpN>AV<C13r@W=; zf-&kNuJ6Z42>&ofBY?k33{^7*4b!tf`Ig8JDR7{JGY(=E^(lOe1z|lOT`?G8Ptglm zvk!%(JdJOVi3N*{1;1n0?++1CsE`+aPneO3GNC>6Mn6Cq%>8?)*)GSQZ&(Alw=@DM zb%R#7?9~QJ!h@PD@W>&$8Bngf);tKcK|`P~flS=*c}rbQY$7oDKLNur--YCXsSVpO zhGPg_*+YLpSkC5?e@A}`g2*RAj%3Jz*BZRK<q<$}9Hg#?Pk|ohMvQdf`Cd9e>O|o- z$m@i;3HD2jxC<$7ppK<E=@CqFK)XC#JRj+P7U^W*$ccOtLT-=p<-2BxwdrMFYdv>d zWacc`NZ*+gsy>A0fLT3(Q236?EypnO<u~$t@GKH|86K?Z&{rqHhXJ!&0g$_cbT1Il z#PWfC3H2z8;ur}bO(tNQP`?IUUSKr`))(#=S-^+I1b>hsZGk|8<T=QGOH>WX8hVG& z*&nP7GsS{39YJ4!oi+es<U6=Hasi;8J}!dFI+%h0p{(D+iCO@RxxZ`{C2#=9Ucr2c z{3gaY8HShxt<`r`4+#ic*@Jk&`wVeMF4?YUj0=M2fiz7FP2MH@Lr4^C1$u@QF^xyn z8sVRhRw{~kJWx^p4GR=cEI+W`0iQ?}t5wWOW9Z^N^*>ldVOo2>tEW!2NOXHFqy3pq z5CX{lx2*5Tf&3v|ESOoOFl7UnPWTL<w=%wfeTJA!y?Ek4Y0N_Y+ZFo*2MFfgwbMol zEu2(aB^>T21rZk-As;)f-|iOk9ZX!;+H95RDS~zuk(UR|2gLGkpbmR_FX+qmN80~& z;9vnE0KGOiG9RTU!rgR|I0KRQ&$sI^p%*mu&^zc(aVP@BD<`zcNJB5=?O<kO&UbsR z4@BR73LZpNCun`dwt?hZG!TIMZD%)d^6GJa!W8AB;pJnpfz%6}yU+g?qYLhT9-fh} zB1`u3SVKZ2MEu*6)CQmF@4Q8-jzHRf`N0F5wMX#>nh0bSZ;^ZqW@CV+JQ#-nCB2`_ z3tA||sNg5E#eg*r!Erz4EW*T|oi@LyzX_szn9VG>R6m>(*e0YLh_m=T!M(<z$O+;8 z`B<ijkxjeMpwUJu?Ru{AjCH^)7&GNSAnX}>;R;0<8HZvVph${CCWQSb>fbyE4sNOZ z;Mf$_>ha@(WoBWeM9>n#+4p2mLAq@J0<Sr!D}{P6(5j4VmQRGpgUl3R=!Iq&fntJL zooy1(Pm}Sj3B)qI>(F!)%Iai`?hyZcBHjP!?+_lj=dKNBcXZ2Lk1ZdZ$pVuQIk8LX z1=SN#;Ju7k9<k<xrw``|f-FW#dk#L8D57Gp-JXgUVGp=JQ2^9a2<&7C1xTs}yXy&h zAm^f$!s1QzRv{`)_=-V75RPCBwh8{+-@D8C0{y@Q#Ayu@-2GM_$uk+cu#5Hw;y)m| z|EJwbI4&HYSP_HM_0;MjAVwfqfe=N_5c<4}t^I|wjx%n;p)QWzECS;;AmfC*36C;J zf6Mz0JKjKmLS6u!5XAHc$HxTM4>_=(YQ&i+1JT|ITpu|Wl;rROLXZ+hX8P4f``Vq@ z-x0P$QdwRgf%wQlRMLa5PW%EeU%@S%cY(@K(37DEyFOl!hQW@ayh%b~f+p|;&?6w4 zVGAJ8?<%cc7Mqv`W`N~7!95JHy&$I~-@Vn-tM@Tvz@&rdPWo<p%p3j`kqJT-OkLj$ z%cXikq;1q7R6Q&pXl7Sx^_F9qA_EpioS<XZ4HVBlHZK^>V4mDNu(y6U9z2JLvOU*C zD;5u9Is#}ZG3p#>>_K-B!Qq+vHbCTuJkNa5S_St2$uF6FsHXJbofEP?SX<u*2)y9L z18ukXh<vd<LG~sTap8PC;EG{Gw+w!8<7>_2abdDN1i$~wdEK{oe$e{_!^D@6Zv&7S zP&zzNOu>{Oz9Zf11HoD&WHaDgcYpjr0%2SmY-ez1hMf5lB9#T95tO!|mHO##Ijv97 znFniUA#wk}1A>)|l~K&_B?m$C2_nS^xm{6hXvYD%S?0dyfoT>zDse=`h}gXV5RO6> zn9Qd|5D1{C2g03@7$U4d84xi5@`&u1{3lY&Eb_^K*dJ`eU=$NdYwQKfddf>^Gh?>N zAg<BDF(+1il<r#rKbTPFf|&w%<WO%XuFY@H|9!h27;oB7<km=57R-GoG<`77epgTo zz{Q!1KI@6)L1DniLDuTq0%>&Uj!E(aF1a#9<e>ha@7F=ty9kN@Y+P3nO2xpZgD&<& zwUP7s99a(Gr%}jF$Z(t(^uc5IXuV*7CN=c9`1RC_eW-~M3noGg5ionWUg$j#S9I&h zAZ8+-hPeKx5_Ns)`Ao(E{nH?g?~}KVG|Pu^2z%Rw0u3_Qy{>f11Rn<>{=fXkp#AN6 zAQt2$Y-nwPAq$>uK4!<BDrgQ7`fQ9@-TVCuk{mSS0K?@W#2P@;1|>UYmP6fj43IX0 zdhfAmL;mWk0)ZYmwAL&)M9`Rk0MVHTdOAFNSH=q=AjrLrTKE!afduJfkW3r-X5hJg z8mSrX5+yz{B6(NW3w%2~mBgWV%LGzBNGCDe)tGb>W~Sd4B*9Rjj%1}_9|d5?ebFq$ z*Adve{@O_R+wz7yu$Ce)pls4FXdHlA0#D0P5Zm&1-IS13x|$w3mejOdTdA6P{4eyr zBe*aX7Y2TG{1BC?+8s(m=1bYC{!h|YjKLvIQ@e)vRn4E&t=RlgghPs^Rt>SM8kbZa z*uGINtYUE(MSlUN%nfa;QkV2k=tV;~4ZS=f1T@HKW)k5z)N~T5ILuU0(Wbx4v66={ zRLE^5a?7z%Sv5GKB<CnfqeF+>Sj7p*EMvrn7@RYB^a)6_B-ERuG*QtbG8or?bVkLJ z4-q7NCnTd)C1XrL!%f2EO~Q5^5}2dy_&c|c<6O<7NWiT4eQW=R^KTxV95O}Bvgm~& z+<kfHG#<Si@@dSI=zkKw{)p()Fri_`%Ka_bXLD}PV6OeH6;t&W+_~kCBm>4u%*Efw zeQ4*RKQfyP4ybK08-K~1JGB|Ezk9|QI;a29+a$lne2#t_f-sHtQWl^f!uk~@HDtE$ z+@LN%`bi1EP>L=aVmHn7(iETuU^7Pr#$pe--2Fa9XO7kSTeZ)5*Wo4JMZ1mW80-1B zb6@bT=S9SiMl<Ty-;sUvyNVZiKc=4VU#Lbgb$?g(@$YJ06ss{l_I(><-$?>6groC@ znD=}4wHkEasRFPAqlAZy+<FVkW7Ih$w3bzuHJ4SOX)owPQ%T2_Ed(w6OXSx?UbETc zUppHM8j~6u8lxL4?olk*kMhQk$FauK#+@waE$l4tE%Yq-EqpCtETk-`EvziCEwn7S zEj%qyO7w9H;?yN+ed&B@ed*t5-ss+Fi&9y~KgYqwgU3b3wM)cs%hc&K#=R^;*i<r$ z)#;N{X=US8s}^Y=Wq)K=a?r%fCbKE<YG>9?DkG~{(nZoWr3|JFrjn;vQdTz8)X2)S zrmV?k&)5D<B~Rs*6+2V@Eh{TSFGY(>S#_Aw#io^6=0;~QJ~z%f-Z1Vwem4#$+vZZ} z^4q1+CB~)FCCjD5CBmiDCC#PPCBdcE1>n*%U!<R}U#?%QU#(xLU#VZJUpuK)t6ZyI ztBOUVMZZFWkZPBDk#doWpMsy7osylZm!g-tks>jEHEw!@e56>S)h^er*Dlqr)vnZT z<Sn98C{Qj?EKn^_C{QU-Dp1Ry0Z{%d5vUL-5vUO;Vo(EU0Mr0lhRUBcUF8f~hN{4n z^i-`Bt<;s2l~nE&?$oxFwp7m)&(!CX=TwvwlvK=dsqv9<>hZF1tMQX@?D4=9=G3~B zx>Uy$$JCpYRN3D9?nc>H(N~pMnOB`xiPyUOsz%*cg;#@D@mICi*s;3uN;(aNrKOg| zmL>N^(esXTWA`XNbps^>BStlD<*!m?wXa%-a))AvYKKCH%1`kv`H!-W_Kxt55<dMc z*)82I$t}$-#Vx}v(JhrNnJt|yi7kySg)M_EaYikva`GjWbHKUb`S!WcdCz&kxwU&- zN3TziPrgqgpJt8nNJXk`DxYC)zM?vH#nQRCdyH<;a;3X%H=asaC6aB?da<G!ie_0A z`=a<_=6S(6!z0V1(<5w)PJAV!Z55sxl6x!Ypl6lyqqKWMmNNfhahB@Bxr(jiR3$HG z-L%F@MXqhSPqR;)Pqj~uPnS=~dJUi)Pz<OB6ap#%rGQ#M0iXg<0;mBL0jdCHfV!u0 z>~ic%><a9v^z!t|^osPVe@pa>^h;HXQ0GhMoabVXx{rL1K9A6kl8;o6mXBDEnvY!W zNj{w&+TG&aYF8RJsyCW9DmNN8YByTM%IW1Ol_(V`RlmxARsO2@RVBAXy%<=bRH;;< zR5epRv1qk)vUswDy%<=<Tsg6nz9{r)@re1T@yPk;{)qIb@W}XR|48^~@F@7`{|NCY z?j8<I0yY4nffc|^U^_4zNc<@GNdIW}i2tbf$nRdVUKdbTs~V^rs2->qs2Qm8RrOg} zs~M;ksP(1%rT#VWNUxfzYO9)VH`a2*=aQ(eg`6gSsN4?FH%c2rI@~#AdG%~B*pzl) z;7-aO4;-C36h1n3L1-@_U~2oVH(`I+>cZdNy(xN4<N2F^!r-vhg}c3TQ#@?~)uot# z@;SwKtoumF#i%`xfN^B>;|T0t#5<9Ip8k+Whqmg_i&s=JCE2_shoNi~Plx`(ygP2R zqEVD<oQhY0h@or(_x?Mt8WA0+{KMhiJ?t7oQKLlbcm~Je&o!zI3w<KmlhLrtM48Or zHr^?dqt%mRT{-k8V~T5(ztToV&5oS!y}Uy%)2PRj56A8?yekD108BH9R^v^FYxe}+ zwE{{2X5T}odok~%E^R|H=G64Di6cMn@GezDO6<|9BTkosE=@z~x^(VQ{3C^XOYhh& zjcqFIF;Iys@5nB-r}56it$QNxx-O+{X5vJ-!_a%u*LuGnLUhE*za~oV;a-_vi~VGU z81s@Q4x8?IU%UK7KlOTO(kIf*^Zayr$c$3!##WB-?-gFt{PcRrcT#W0o{wPe#oNUK zD1_7UMwO1N?p<HQ-+#TU22l2<?Tk7edAgKbrteH>+{3&Uy~}(u1SWl@_Kq*zbH8@J zi+|F7neJ(EXe4Kqo~`Syudnm1lh_;B*K_^AudFGnsY|uNw+>v0unAn@TI8DNTIQPL zTKX)oFa1#4(BBZ-P{pscFR`z&FS4()FSD<^%D*bVD!!_|D!i(^D!r<`DoC{>Z%$gL zu~)KZws*8Awl}gDwr}Q=+%V!7;aBFD#;?+_K4_M$k;Si5n5D8!Znm{=<dUeGvu)w4 zF^siVYk{s&v70Zofw5a?!Cfa^m%mcBPxHv|_~Q|_TrJUpRihDW6Tzitx3J#w$D^1_ zO3s>4S5?l&=8A@~$f6}DZRObZU$bJ39KSBVB)=xVBEKQO=*6<)qT;;bvf`ZLlH!8m z%Jl5?;`IFV^7P#F()7agicd2_GeS#jb8L%Tvs}wW^F+(*I_7%ny2d*AmF*RteSt@f zN3KV=N2o`UN3utgN32JcM|P`pr-5GeR>4-qqphcnr`@ylv+c9ZvmJ`HTr*5dWOHPT zRI^meNb^Wb$vXOaZ!>jES#w#7RkOu<)4J>WzjcK5-WKeZqjfpmyr;&en5W98tf!8r zh^Nx0w5Qgmgs0jkz*Emt@KZsn*qij5_S=s)^*8x9{Wr0<Ur!}ZsZT9W@lQ2Rxvi=f zD?KZkHp14zw!${TcD>eLO94xocD**ec7fJ`wt=Wmv>lal1`F=~jQ;lig#L*=wL;p& zg(yoa3o9!V4@eKaXM+#D7x?G+XZRP{r`hLUv)l_`6^^xz1&$RcD{b>_%WZRQOKl5n zE1t8Si=OkI%bs(dOP&j!E6=kNkElRt|CFAxp7fr!o?kt6J$XX9#6>rC#QDVK#Kpgs z=pUSYN(@VWtx%t$Kg#&D2<hY%uAH{`<QmpVJyiIFZkKbPEj)xio&ga*zWbL3lncoT z%M0rZi#aYA`NVElj<|{E)wG>m`REI)<`q#tAPZKMJv0ZT0Op!}6lX46A3;0Kw@Zj? zh>M7;h|7rU^71_|sL!d-s4vP+%g)Qr$}X%<t<J5^tS(MYPtH%yPA&w2P$2b_01g2u zfh9l-;1SU81O7wygU&xVpd}!_N4ZzCSFzWySF~59SEg5|SE5&=SHY-wr<Qs7X7*;$ z_p$S#^U?Rg_wnuF?GfgI5*P{;2Mz+sfki+wP^k{p54aB_U@}k*xBz4avVG`$@P2rI zKz-~0V}ULol-){!I)M^_8i5Ld27%%rd6f&)3zP~3l^hB*`V#q4HYx}#4y+C=46F<+ z4Xh0;_>%fk{gVCC{gV9B{8B{u=xyvAL4#AVFn7&V*Ycl8lC)El=Wt1lw&v2qzG7(v z9OB@|>r<dkO(|ON(G{Ip%L$;)42^Ns*bMY2RLHa^geAvWsU6~zCh(A@+1gjISxWtj z);Al9lbJJTFfpHPOKwjQN{vz(I@74BNO0r8Zd05K?`a}uWfJynO{$QlP_2otxsr@D zsmfLTX=nC+TF<BMC2f#w8-J_{;4^C;YT_kVOOL@-EDbG+?$XnRCnYLkO1+Z2$nk2d z;hA}nxAbe|#2mDyr^1sVM|YIC0Z^4!$WyvXT1|5vmP)b9AWvao>*vPdj_Ionvz-5H zciZMQk1;78p)4HZrA#P~wsZ|%SpJ(VY0y(NG@3G=9Wy-ad0gqzV4CeO)M-P{F3Djf zA4MHUVMd-vi#BB*FP}R1+Yvu+a*dqKxLonGPJ%%GW51%fh|N?**3Mmyxms781HcKs zvRXg<X%{!md9HfEKi^(kYMrgtJM1OJhssdInm*Qce2+`cRnN9)AOD)hpp`R&d!34% zw|>dp2}3(ZfKOTW!<`L)9--5Fmuu6HXcs-gGmJ4=p_(+ILmmh~Z94K}(#VvyK&l;9 zeNnLE*0xCC14if;k*A)~*~A<+U4=uVAxUy*rrIKnp_`f{HHBj=J(A7|*@&cazTcNw z!~@+DuBT&u_w?C*pZIOtvM!KWHSSqVz3W@ZYej^SJqWFaE)PS8F~1tF3%r9PkYhV( zex%qGQ{KvmJ-*j5vQzY|yCB3A(^8=0q|QU8slNL@t7xo@!NJFrzdR}-h;4d)*;;-R zb>f03d~R$rReA><R5Rw|0y<kESAr(VVS`K{wXm8MUFKR!wmlHl((FDg(3X5<Zcs_5 zbu<pe*<6~oQCz!=6p~Lin-A!yKhPHs9(OR6YgRN`BbwsCX$p<;b4g(CSn>?-T2ty7 zKKm0iaQ;g<dYck*#Lu`Za@fZ>2RqJr*r8mq_L9(+uYfH06L~DS)Q*9bEaPUHC59b7 z<RY3ql<JUnwmH?%TOn3Q(ME2}o!x=&R+{dL!U=moXD3_r*o9f%%3;06Xd$PVm@)j- zj_x>XaA$E9PHm`yj;^TPnrumu0S%*u6e|(mdcR##d+=4RlI%6@M^{T&K|}0NK~b2A zu6RpH{7_e>ibXROfq{ju04hQ$=-y(2%z##yWcm|R(luP4;Q38Jwe;U29Vsn?BZ_lv z4ZH*OJb(uW?J+nJo3a>%*(8z`n^a>i{P`3K?H@1S@j}kEMyI2AL<+H-qWIG3oC9S> z^nma?oEi!u_DBbj@If}gBwiD7pe>dt);=<{I+r>$Q8*umMd8@b;10G_ZipOCT*<UX zoCYuym)dG+z4M^Ev!4Q@yQs^{xb`J%E7W@NoaYF3x{D&G)p5>Et}q;7G5wez8Wh3R zF)Va*mt;*!7caoaL-<E<2;sV_KKwq@9JHKC-Y_-e4;~|sGB)v0wQMGg4G)v~BVeR5 zrVcMnO6n%W{6wEp<JGNfl>pQ<ny`*(ZG|!K-IvysKZ!jaIG00bukh|sH>22a2@bja zR<N)zx=heOmD@CQ8{f|*1^`5##Er{fB8Af}SAj1r`o$!j{|HQjlVV%iH1Spq4Hk~~ z-5#B9Kda4I^VPxPsyd^Wy41l=u<|QukHUyjpw(jSS+JhkFi^%-DE)2u)1F&u73J-B zyM!#HdaC7*BqbQmibH+!WCZKYZRa0N!tk*s(tK6&T-A@=ZFT<$+ls2DeGIOxtM4J~ z#Nb*M(j@3*??TvSeb{DQR9!foQ{s=q8yV@;bygDSJvSYb#vHJq(GVgq7j<Gg>axGj zn7baAGUZn(Vwn$oz;G^&MOZgZ@rTUexcbbe{RWJFE^ifj$H*uspxVvda&V@k{c6R1 z0$Nm58~0&uPUTRtXXP%<-VdbB6UixB)L6{H@ic<DS`TrAq(w)o%W<GCYCl%RQK2!; zE%S<s8)vP;`&uxhE*TO*#FTpYsZLIq+A~)rH>t%Bs{ok3Q)Scn%5o@H*EsVnFPC<9 zeJi3}H)Sp<U3SND=tu+m&Q0B2#c?1beAZHQV#FxUbW9~@<<wlj-ie<MPMJW3?w(F1 zXJH>f*x$jLlF*7L0ng3Rn8KmPLfE=yqHx-rBu_^u?+c?XCzgu;$1DD4MJ#ilmS?IE ziJx-`*A$?qqo+8{fTS~kJfCh|-#0C!yQR!?D~x;*<8Tjq=49uuv)lC(1&Lx*I0dyB z!sQ5rsxh8d=Uu+?zMl^H3G@Y&uZLRljQM2naokQNaQ!UPx`QlD_GI(g)9t0cSS6nw z8~QnfFcr5roD)gXj&5yS!#k7#zcI^UlYZr)Iql-kBe-^1Ke;;IsbGN60?=4lLC26z zH?GmqpJ;V^4GEcA0BnybL|>tfFN_QLs|>u3vXI8Gr<2{DXhz~K;>3RVlg5=WZM4cb z7rW#aEqX&Y?5XOroVpn`A<u4GW>I7hxcsR>SP@`2&u?qHx@cS*F4?%m|9hyOYI{$= zn3g{&%e`~tnHg-(PW7bcS6*}5;^!@M0g)qfiiER<^qy5C3Q|r4f}?ba%k>tt-kNr` z+pvLkHm<5q?IfPk9-+Ai=CtN1w4jC7?d-snx$+62ZQ6~Y*2|M-XutPb?xCNW*}ApG zf^`B-mDwFpz(V|ue0EcNZOQx{HeleAQR^VLirrrJr`Qz>Vn3m_;=DUjRGMq^Ad1mo zE9rq{`SkJ-I^0bb-$KjWbm<}i`B~JlVoH1}GZZ{`n+vY+m4rg;Y4say+Kk8iG*wQD zpq2QF2@|$Ae;ONMv;WF8s%;UkubmnEqfKXsWk>%V<0a6P(v)K32gYgb)3rZ*+uY>N zzNm#wE@KHjObCXW8x{_=4uQOOM2=_eJTAOcMF~AYNh@13Np|IVr7|)-=!WEY>&U9g zqu+c6{g03i>+TS(`Yauc7RyRd?2#+RMruxVf4L5CYsbJ@)icni|D5I5kg5kpD3<#? zl|WaSINVR|?dI*k5l<FBYL8C|Hl&_$&)qI~k!*|<5}XJN(XZ}iDZR>~G=Rr;T5v9b zW+=m>mUg+v+|O>M%uFSOH(QwOM>+0AHRGeLK)ji`@D!-X*H8KkJ6mTPwb)pCT?z$* zvNb!Eo3!qYfsD(kaL=Zpt_6)Fs*t-p^b+r;Iu=`Yi+^i+<EZDV?mC{<JlvL>f`4dz z4(8CnadD$L1ecIn;P^)~ShMfVplok=pwoR@o+L}xYf9U-T*=#H<}M-AUi^lgD84pf zgUvhLQP{2Cp7RA7m08C%GOC)=p9bKK*j7BW4uDMTSCKG19Bd3eCmDFt0xcxZiy@aD zt2iAALAK^_xt`W$b{x3!k%;K`(LX?YT%7i?*##L1n>=X)puj7WDBUz!mmblx$hOZ- zWVY{3WUhfGaM$3f29DQT5RsXtyF6+SC~hTZJ*U{_!dvy^=Iq}Ht#2IG!8csh9tOeH z=vIGZ(*+(}$<^wya|ZkWp<QpQgpf<GbCXJ`qs^FFT63PO_RO13r?OOiA`!C?(n6uw zk|^c7Al7t(t*xU3xS5^@;f$(cIyOP*Qsc5@_RyTY5F5dp*MFe&vXU<iZ<lTL&||7X zHm=~b=jiF$a{!vNXOa$bBQBin6)1Mle!XfPM@t<RGPaJxIaM~XQ*kaWXN(oDpvadT zy~C6J-cLs%xFT54;}4EHd!d_0?8>0m@zfOPza!IJ|3_B(7kU&{`sp!S=7y?(^5sZz zwD>o#R=J{OZfAO_x}EuYS0P!&!yoI5oFE*&`Aw|IOYen1D7Mw>q5%)Mo&osv0lKC+ zzbXAeIC=<Eas`u_l^_=%j=fyLoc>2nO}-<eJWohD0}12n3>O>Li}Agd`K7GqKY0Ia zE|z-(-7a#nyyU2Cm7cSz-A86}ML5^`B-^-bp~(Zr5yuWBTohPh>2U}T5-;^UVKwf4 z@}XYA%Q<uwI%{DG3y@**bk7B+BS;%=nwM@|S;1P)ciNo81%#JcT)q8kt#W<lY{lT2 zjr*A7x(~A%3nO2aNTyvF%6?|Si~E`7pNzWrmhGmLOg9=VPXjQ|zWK3OJEVza2U6Wy z2SWyuOf`BEU0<jXa(=opM*oV#_8OkzQ`=cCm#qS{%}%_8Q%UgzoYhiZJkKqcA7rW1 zwLt=$#B|dJqXcvMg$Tdu(>HC9IBTc%zpb&fDBbTnYU$157f39tt#*=qwI|!bZU;KM zqa#`=cwqJ~*JIg}uK;2&?eOBX1=L&Cy&~rpQ;{_&SJi9v-HhwQf40*=sF*g+XZF@E z`=1|<6{J~I5w1FC<y!N7IB(}m?fIgp(RE`wGfaz_%S?lt32t0DX|bQgV=-%((``4b z1K~2Q^?1rI%KU8nI8LsEe_9mtC3=8c=-Eb1BM{#RRXvvAmB}d|Zqn20@b6ssi1oMP z_`CbV<yM&JoIBkhc6KN;ISR}2DWB{kw6;xak~uZBexE*Tk>mNzj`<mk)Q=u{{cSl@ zX=)0eb|@8zqbL(GA;c*=qHT&);`R<JVwR|5nvNsOdEq+S=yL+|=RWkdKvukE4?Wsx zZ{lzbvFzKPpQxhemea!YhDt)jyJa)pcLd}->m6K#sQ6<8SC5#70sWi4^XiqjX-4z~ z8L5+3&m0I~eIu)W_;4ZJOIBYCSHwm5DH4_*gUXbABxbjgUAf2eD8Ru-09S5mq60W< zS6PeB6yUkk8?CnAy}bI($7&z(o$4~HCOEN;C;7vVsyr{ziKq=Sb<csR{!hQ5vVFI^ zvMR682A)DX*X!2LskNA#e`t0hdtE%*#SIY7Z?!I~`%L0#9{MRCVpXV3+q?ff!ywis zBZXbBJ{yhRt8CrGaP-^^S)BMrmsy>+7{kk8nOXt!I#L9@jyF#~$BbAA*6e)rhE*^k z2m8Ala$EU@78#}o4ojzoX`4^PPmnL?LmH1BoYJmi>-yOS5Tt3<XmeYr8NB5imvSp= ze{x!imS(&XH8Mx&TKJvH{1Cys488lbYXr;ncU_GNk5JhKIBW0N>~OQ(h(M*5_>604 zX<=5pclxIBar9Ismv&aV8G?DXw9HNB`0=>~Llt#$0UmvY76I;rywB}njMxIjaJ1s- z__)NnZ1x83Bx@KJ{1+?p>q{#vbL=X;hx=rBRbpkWfJ#XIm4JUG^#rcGaD*qDg&qsl zjHC^x&C?fT#|8yr1_nKYYMFU;kV?r7hRMx0RIjo(pH+-mGs-dSP%X!Auem*AU96}x zyFWwxGa5qYRHqF0@grBW;`&KBZ=X@W#MAoD*+dk5qjCGR?cA#S&wC@aQu_VtYDaf_ z7?sVP+OWXHqs3$o?{_+zQbCEEjyxA3hf*ve=h3{z*btcJG}D=PkAaA;b>$azfG-xK z@2fVBzq#y6%-+M5_YYd#V-dqE;o!9UtrkGgg`<b5gjIQ2xEc8)p>ZjYwC%8rEsZqw z$#C6ep`Z;gxe|R);n&JD+LATht;n}TUq<Q%Q&g~vB^mk^BOChcBP+hUlmdOzk`ggX zPpfDQ7>7(~HSdMhLrgKFeIH<GsQ=67$bUN4kEXz?Uf7ZZA5AIC;aI#D99;uHc5P2V zt#cszl+EBwmDU~aGLTKTBeVjm51@pe*|O~E9ZPf{X)I!Wrde*xM537@`ghPyb|fuj zCm1}mpP(u=^lL8D1LHV>JqJo}*WO9b#PY7Bkh{;mg|n1^)uAVktxt1@lb^iZYZc3! z=8i8fd$5ZTRmMUNABJgl-T(F9s7AVg3fa02_ng08A{1Y_ho>u8!&p1!SveI(>=VZm z{w90aQ$@md0MBWy_geiBU;e1EpdxK~xuAk9U=08ckqJGYURjmOO~Q?=?Kz`*duJdD zm|r=;TXw3p_;rlvcpu(;9NH;zXka{)RNFsFQ03-HLisaXicibtkcy&kTAz~`Zq=kB z*TXSm^*1^@H_jO(zU8w+{9`GgEeErAYDJsX%zVyQs+7%-d3v6Ox~PWtL<LZC$Ni&J zyFRvFeN5ZwV!s@G1#fxL!r#Ej&e$fV&`HhiDhT~Gq4<M@Hvj3sM`};l0iK3@XlBMB z_A#XGLwi$Y4Yjr|3u7v+7Bk}9oL1ajk1dsT<>Kt>@7VT6V_Ni>)_b(ZtoD6VjYxzH zW$*SqTS~Q3nl=+|Y*w8~N5?>XM1@&-3*K6_`wpYs6w!%dj}2mYck6)9k>F-={4zfA zva*wKy$9p5Vxd!p_IOAz+TyFY1&C48soHai&b@ygceowhg#R|R9mEIU+=H8zZ>J3# z_=Vm-c-3y@&eU!jr4D9=bS+H6Hs|XrVbhUoKcDJ<A+f4C*<A(j<4E)0karY*(2V@v z?37M3?ykb&TV8;ayG;RIZUDpTh4fXLRD?*MrTQ7qsn<%*Kux$hwTj2z(>Oo9Z&g}m zv9CGrM^9@T7}nQ32IU4NS6!q)i8klP<@7wh<jG=)D9lDz0N4ghl!mr82SN;JwqLX{ zw%fHZW2!fJJw82NZ*Q%HrHv-?86~><2%y@<TblMPccJF|%5F&d=v#SD+!7Gy1kn3Y z30oy?1L4be-ALU<AxxT>RvR_U%a)2m7!AqL?vS>#WhGMc>s32;I~*>=O=642p_yv( znJb$#X?qIQqYiZ7k(n_6d8Ks#OJhpUfgK@f^zab^Esqsi&JMn#SQm0}2+S^x5(`%p z_x7YvpRCn*<^0Pydfqy+9>G;8evsd}5cMf6eZOZI97QlfWSpxW$A2nAcZ%ZRNt7Yu z$+ZNEmSbyTx%o;Pu)GLnUr3AVg3kMV8-j|1z`z6ig}_kDL)=C|-hj?BuHA}b2~GGj zi=$sP$aS-pU1oLd>v#^C(i|B6rUfIL2`|`eSHT{#Wg#KIJV-+Qw?%&Wf>DuSw|K-| zVSKg0=^$&{-ku>qqov`nsxsbz;cSTadc`#!LilPB;~i4iDeO_2;z-tE3Bu7mYhhLi zOFl<L^ce39`!Jwj*p^V+Z3F3zlbn7}D7Pt0_AOhV-T?F2RqLp`_$@7*vG@|-Db4t5 zrMvyy#xjGu|Gh>+TS@u!XO{h-KrhcTCzzbmNP5{VK!<ZWdIMCuAP<v+YQgfgDK;;j zyA=H{=b5sGIUX^#=%;hOm`g>UXW+x%m!kWp8vFU>)G3d!3ekyvQZ@RT?Q=+k)|4p= z0os$&b-~>96>rv2fOV3(vQrU{l8dnEJ*VNbcGlUPIg?(}CA@W}Yd=y>4Qych(y3q5 zcc2*+AfWIA(8w*%K*?mE|DGXBv@hiRRML^MhxkvQ%0w7~G!>ECV%|}ZeGGUi6F}69 z^r1PkPRxMxLhZwF(B)OzBKQ(CyR7XQ5woOFkw5M8L2|S_lhTC^`=N!@WzhD#SLMiV zRf+xtodT8T`-bJH_gy)ORjUzaLREVsXbi}+p34K(%2{61{qrn2bBBF|Uk(RPaKy;? zRxA(vBQ7EAtx=?bvR(@w=L+oVWsIzwpU^MVGj>Z0w3d`ghEfok+y3VLt6NU*a^(%C z-XivA+6Cg}hPWhk810`m6*9ROA*pD@>vJ?V&icQ@TiEgb6UElcRnD!W>V<igp-nX9 zt%jXQVYH&z+(DaLzO$zi7d<XPtml8}mh0Pyl`+<!Z3*7wf@Y~Fdm6Ybt`%WUZ@|q= z(y_CeN+v0@hq!d=pz7`xEi*VoBKE29yed29G_}#aZqZp->^800%3F5&?|Rnm6-op| zZc_oK_PgSAJJuiVh@STMOUJ!Kcy%(eh^qf~&MEfR;u3x|lmJ3y^}0ao+ohp^$=;)% zk#&?c{n}O{MV)qc>|qdhoNKZKomAWlJoT|SyJ9iqi^1^I*jP9ncc&L}ZYyy?8;;z0 zSCEB1!uf3q3C|6#f9gcqOTmN!Jtplw<q`~gq9NWTB$>tMj4U1)Al@w`XM|?+%pTZN zK9l1BAAvqwlhd}KA1;2eW8r+Iw;|-bLwqSnGS7VbHT%<SFVExwsf1e<(9rPkIoeS7 zTF2t^8uN)po@SF8zqAHl6t7UVK-t5U<nXH%=lC(}n$Bj2nfoRg`rf>d@rfS|tbxXN z=quesp9Dhg$L6*ue~i2>AW%%R+sh6~3dlQ*JH{2!%-s3Q)o)D48+@pEz9J#zgM_yj z$1%_c0|AGxifzuj{}?YldKevU#Ty2Gs%-=U#)HrvIjvYFyKH>!hnbd?9NpeYZH_<* z+k=!L3|p99*X+6f*F&$l&1BiaC)uT?L)7pjJhHL-c|3kB%ejlU<DM(Kyxg$WNWAu0 z3<houG#B}5%ok&}Fh@>zS9UETTn(v>hqP>X@lWMSIJoG<MbzJ7;frCms>vv_Eu^IC zb-Lsfl%c8y(ox~X%H8K;oY7%nvuk7pVq^ubQeuo4(UHZsaAH?WIA~&Jb~)(3#cEb? z=v*wNVGTAX-K61jI=4oPk8y%yorGDcW2E%hy#yueU&&0LzGhhYQ)#o}9JXcV{$7H` z;J&PyGbPLZ*iQ>ZKCPM3veQ!etaYOTjB|Qq1{U<c%1^SI-_nD5p3}+7PtvgmafIB1 zz_*Sy^<tnSk*ik-RyN|X3Ph+#Gix&>i*Liy%Zz_oNj^@gJ6Z=v_wlP01jxeJS~Kd- z{h*y;nUi+Msb;T<znXK)*O|3i4<QOLrCT9l_^n~9s7>cGo|bkFDjnIrTkuL=bR63N zCQ(W*T(+f^vBl3!G~xWg`i~Qap3tK{d9t@U36^(uY%W1PxI1k8dNvG|jxJ9g>K>O7 z_w6&Dad=~$Jo80gEWt*nC~5DvZR~N#NOD0jpSTir5ulJyb?;S9SZ{Yi`yVq{M&LV^ z@5=`?{XvR#BV`_9jD4=NrwVLk@|-pY$w{GWNQ)C@l1HIIN6C-W(q_+9)+T1m>4Yq6 zx<tzl0u|E-J!nsLb;SIHq3T|8T!oa@H-uQhP4qinNfnEILdMsi6pq47XT?qra|EOz z_6{n}x*uOllIU|xr?A#8$EAZVD*bCZ+Ihx3z~)ypFS^-Z$9l`q8q#<bel%5T@<U%a zuKH&=5=*ou=BAioKMV8~B<+0Jw((9e^yT&FP~Bi5Amv*O=FFuQiG@76@Bm$p_E*7{ zHA;UgUFY(pIEnLG)&m<xvLKIrBkae#MxB?e_6<JEYiB%uB!hV)6>a2AP^x48WE5~0 z7s4&aKz4Ds1>zr!c|=4qd;UO&`^See+$|MqQvI4gs-LOK%I-JL6TolW`YEI$ViHjO zvlG0jXfi&O5z>_>IX=ny(QF9s=Yj0{vVbfEFT26s6RmgUfPAoPqk!axrMc8mfaKXY z<J@7FwQ>>?>>VCC&D5w=a<a|jfXNERRn%Ki%b4`xhF|*ZA`w!D$dAApo0ukVc()4< zS9fG4EyY<q88}v8OCe=ybem4#(XtCg|Iq8#YA4nyO^lm?w@IHd-T+-)RS{&ALm2ED z6y#KxJjvYm2m#podMa}&7QRVDc68Y4UtnbE1}a5`jZ9)9M7&XW`s%e4;ZdW*f~cX5 z<DwQth1mwg++>CjA)7aKmDguy0LW?QnRd^*jT66r8Xtk(9UbR4mDlHZ0Y|Udf@Rrt z6E}*OL&nn_8~-wy{vp|wUU=X^@Y>Oh_MO=k(g=5*O8mo!O-H&-_sOaJkxM&<q<N?Z ze_uI6`$y0B2z1Y8liiuxj<s~%4F2pZc+%M@Hem@-8-15rxc2Xwx9`1+=(D{6hlWd_ z+fHr;t&Z$ieQ3{@Is8_b9vArkL2wgA5b^uc((Rzg`vHozT$Yu@+jqq(3YW6e7_%@+ zX@C-zlDIn(ykew6-AmpIqHZ(xNMvT2@UDwi4O!+ftv4A|Y|wLc$a4q~mK86$<@DYu zun`&olI_h)m0p!2xOZ_n)W1~Wno~nRRXXT?>62E;Jj$6p4$zpC;a*68^q5KtNuDhs zQ}4u)ythZvF%>KIE2y?tv&KYeZh6pZP1w#>2u_k{t~5%ZdZxyfvLCB6EJMWdJZKV{ zwV$oaaxo<#FrJEL`20J*&xsLHK9}v<(;~4nSXH&*d!==V)@q9xtd9F#UV1?`$3!mi ztAEf#1->E{O`%6C0Z(B`f>!bY)&P>z^1^M-4*j3R_iVq2x-=WkLaNlN=!XEQYci8S z`2iY>qno@bC=u#%CvR{S%u~W<y3#_I9wECP8|RcmnV;1N?Sl;kY^P9dyo1IHvtEF8 z=(6I`n!DF2yw^yztWAv)JwFBsFnLR|0a&mrFY?lH)vi(HD?ijom17iavO?e(y2=j? zk&9yY6B$$8uy9t%SzOYZ+V2xhf2g_yA}**+MD{tB)+pMv1ojhBT#~KIS&9hNEgGdH zlPjv&INA$p-D9=m;U>t!+w@||m>8BZyfK4KSMNq^6K_~@Gdt#@A7;OA+rXlZKC7Sk zg=2>M<XuZpV$a!8s4+c=hUuJEJDuV;Jm9Y<K9Q|s5JOOk%Vibzc*4fQHw~6BPBQ0U zJXzP-#NI2&92i<&Cb;>sKky9_D#gr((2+q7KYhoN;E24%({#-`j(fGSeHJ9GhO;b6 zhd$I5OLnRxE_$exP7UZQkZJK3<bV?#boL=|fmo;6r?FAGpa0^Kz|x~$>V8^IK_$mi zh|zV%W0TCQb>oYh<FsjRCZCY1Dtjo6V9sP~mdc%+r8+uF{#rBsjtN}|%etkjeZ@hy zs247C?Rn0anX;baP!yGorRHW&n_`IbxdYX$zEvonoI3kPX~tMCrp7sn8`l2i6*|Wt z`1d#;EL0}>muB2vScy7!5jt6KXyBks=&BQyhd=X)Ae{jF>=+q^VO~S$0*@|}z|usV zf98)QZfj}8?xkzYKsqx%%13wm){UBTaH<ku#}WmHdbVLnCyI4l*c9!*u{Zs#)xPpm zG8hd)N^I)hen_`BSKP($t<y!fDbYo^s9Sa4$u`!t%+ZK)HAtq?nN08p`$S&oUTJek zL~Lc64p`>&<m{9sS0shpUhFcQHI06n8XYwyH%;%4W8~tqB5SM+^HRkPiO8csr^8y< ztbg=(TG`?6DOBwSLcj&pTn^idD2$7B=r43|@pO{R3g5e4QkDni-?;mHOG`8Cm!iUf zP6J3S9`s1S!8C(EuUz{PV5W&*dMd#kmRl7P%h4QfM5IgjC$Qm`dE~`>W(1@w8wdG$ zD3pI!)RFC1TonrNQJkWgGNa&QK?l>-hf~_~z|SHJlJGiLj-o4BN+!f3eDg#LpiT<W z9L>!TfM;SCb<k#a8)_LofA)kL*)ylCVJD!4atG$|l691+n}m`FekNL+n%~U~An7z0 zA?=}n`3BYWLG-B_GbzL7_(&EnM7*PbZ3ORp<LrBG^wSc`8`uv{$fdpHVF9}~*rg8o z?!>SBO@~(*q8bue^ohj_XW9gu1^X7FD#*RhBOlHS;RTiluAY##S~w9|9&$XGL>Z<U zrWM>b*fWSZ*em73#TbVLe)Y#uVOQ|4AVre9XK8e4h?qnvy7TdbMg_=uFoap`#^_nA z5c^^nOE3))q<TE-ZysP%eJZ<%v(LPLVI;qC8S^PaK?dvQBd<aVAiTp_!|>56lHY?n zKwkzyXhT**E`uZW8ScW~(mJ6<N%5xU?)yBLGNeH2!&878e$x`>z`_9?zIh3n>!TDA z`2GzDE*MPoZQV#3%ruxjh=&AS1i4`Q+mV{4z<KLj(aR1`(-{Ly@_of?E1F}guVGJU zL%%-RPpEc%jm?*G|ICk=qnGrTkhN5VDuV!j*w=wQ%@Z`u@rC>(_&}ga#M2a|-##wo z6eHQxJCsm{|D7}E?>%45`kcbdCp4W+ZnSZI<eu@SzxbacMT5>+oqwyKjh|M>fH!M8 zVg!Q9SQmY+cH^u1^JY|<SI2TI<@IZEyaTEY+Nh0>tegAeW&4Z`>nq#q9>QyvW7?nn zg>7i1>6WiNWjwlx)MliqgYph};=XzLl9lMPo55rEozj|kBW3juFI#6Ikpd1aC@d$> zry|TRQU6w=PSN<oLVSmPaJ{dou&eG5e?O<<pm5~pz^mhEz~`c8#l@@GM%$`?uEKCK z8(Z!+WP28a7PF;T_RBtIu-P;Tw8b7TS<XBA5RTOp^q1p4o0?7ekpZSz)l<9o#CP`@ z%@J(U011&#ZwLhCikErC;cJuk1!&y+<;}u@P4E^CV$>_R%-OV44`4!GH`<zm#KNFE z57Xh$`#mF?i7+NxGnUp88lE_)miWY~uNV_T3D*uf8&p`)W#Vy_7#S1K*s3ULQegJ9 z#ASJ6Ql#+2RI9>F>q*tgEuN#*KI$PFF`JcEQ5yXcKmM@)4*MNv{5dgU`Uys0(%;o% z93X&XWO`Ma2{UzBUKLmmlPX!a)3nybqYK5}=Cdu(-h&tKAWG03a%4Ysk?#9m)$z*u z-YfAUMM-ph96S4JwYOMVSE#yi8YusxATX1pLl*9e>4H&b+^AOb?jw_alfvB9^yTD0 zpBQ;!b;i3rHmC4#!PLc0Ul*mE?MW5zOp<nW;?KKr0&k9ub<*UqcCv_N^jA&AAL;JF z*gm-QL$HpJpPPT#>rQKrGgUFqdSd1;Hq=%LV2H<}RiI#zJ<sZLR*b}~1D1grOrb*V zv7~rOr=+X)&A4?$<<iyrFSQ6J9HpNffrFI<Wj)CwbU^!aOlt@BWaYFpeC`||hm z6I80H5NnM@0W7UVb_v3=0iywXDg(SS=?JKULn$n=@oCkl`CGp2kQ_gJ1{p;AI%;n3 z12BlFPMMZy8b$-T;o*C`@f~Zn-YhnI#GhrtM>;ZlWygvIni~|;qokeOZ!E!q=OevE zH5_^lhaT)Q-fD%B{|9hDkH31?$4{$v`j^<9{wkX5dn%pk|GV}wTT~dIcfwYknqPK6 zZIo;{X>vV_Tz;>IY_g~<I=?6ReIc6aebLW60Zh&5Y`)a_`KP1o;TXQ%0_7qWQR8~f z*7XEli&`1RsOLskg?3y(^O(3qt(&-byVH3GRfEIs!nx=3(A93f@0hHeINe!mw=Kx` zv+(NeGG>pbMfJRrSs{1JLL=lh{r!yhx6_m+m2Z~Uqc0g_=i-Y+d8KK}h3!5QCl;V{ zYooQeYp6fyu5+8X&RVvAr<8I%j;U3mR9^_cR^{sCEt^d;o^`fy%=~}(hyl*y=q3I1 zxXACCH$P}etGw27!?<yyt{;_=k!hK`#9|+D%Lt3zT~Q5_oo>PX(&@q6i!?Tu=Z@+H zi_yc=Ed@cx2upTBfu$&aa$ZTXr6{*Jw`h8<ZA3V~$Rl)5q`xV`A7j$9(UIQJID?+o zzd0W|It*zU{hgXWCaS(}LZsh%bEJQi_2TmV;rXbp=2ub_s@enKw9hY$d*so7e~Oa+ zdDoDai={UwEBc)4d-hXQj?tfNL@04!F3`nw2<v0J(f{lC*I_)UJzdViZ6{7L=A^7Y zkN{x5$uK8nn42=pR~hEEEKzb#$-SiRQl0K{8J9R&rmIL<AE2)U$*-33pGkkV^yf&w zUB)Sr@?yzlGX0rM<n5O71%L(cF`5Zul)^+=d&ux1Cd#}_@^YzPA@#K~ori#Hf%VeA zk%{tbmicXy@|Tz>-yx}gSL*v;BI-h|v+A{&{Qz{Rec9NjFIL`_-srzj_^$N-n@8cN z)<5hVu+NruFj=_{HdD20bZ^y%3oP{0qdL~qk*qWWF)|D>wVlkbl9jQ*1i%W|fIOf8 zumdxIa$r6X1VX?nU=6SqSO?Stn}G&k2ha%Y0(Jv?fF|Go&;lF<+GO~4pabXx*vVui z3Frq{fOH@O$ONoF$w^UmI?Cam5BPu@AOx%e>VUOC1F#!t2Hpoc0QNP~1_lGEKst~K zOaN>^0Z;<W1{{DJ2m-ahT41vb-w5mhnt`Lh=fGJ&IfZnAbRZMR1AIVp8_useMY))^ zv-*!I%0J2<!_4iK?%k@J+D+r1P{%E(H$yu5gUa67lA?Sc(XQ0-L+5#M{Fn4AYJgBb z{8+w8R{jl~3LXef0}leHgRcT-g6WCi1TfjRTGZEN;MHKV8Ee2~7uSI)<;`HSw>!XB zf_H(*KJErvz<a=CN1DK7Th_KK%1^+}@RN;e1rGop1(Pjm1CtGJ2a`?f0AB&_1YbjE zfpQH2#e-A9iQu8&B=9hBzi+g$N=UJ3^&Mgv|43V*ba@E9rOTtcRR8IYin)~zXVtv< zuG{Z$FYtJM3;ls$^`gZ!OO^_K_QV`p?xe|i`M2C!Fr{#+eOgg*N$K>m88c^fpYA{X z@ndfv|34Z=Ol*82+1bq)V3sdmvixc(-})E98@C8vwxR7TvGwi{=LUp-<*8#&S&RwF zW7+qDt&(53$ne>cUqtvfH=WotkbSbLebX<x3~#-ABX>=Mfu45km&YvZwqv&+8)Xjv z_R-^Qry0B9ZV{929wGH%z>n~Vxxf)?IO61?#_u^aS-BXf;q~J~y_;UR(LJl<D<QKN zm#`ml*lj;7e#7Aur5#u^EK+Vscw~UyPv<~mfg72a<17Xq19ky#11A9*e2oOA0PdJ@ zobdn|fg0d(-~~o+R2cgj=!0+>Kq0WebTh~J2NS@Uv**v#e2m5#R^WV`m^Up$`ZTVf z`HY3p8yv<W$4@xwW38IIIU(#mlc>3^>yk9L{ncd6oqDRT>JB}&_Hxy2*|T?maL4a^ zeb57$<lgv2%b`L0-!8OTI@Z77`)R{7uRZCqw$3>>^pk-POdasq3hTnh-hDLZvV{Au zeQv$=^uBuA7t8uSxNP}<Socl%^VT=d=U-K`|81-HVB6}yg<hZh@*@q|d+xoXbojXY zzxB1<IdRVi4;(-J<aeLly?t8F#!nZ0+;Z~Tk+sW)+0v9Nws$_OeEiyhGq%sR9r^m( z&py0m>7#GvI$Qqu&}Cbntsn65Q<Hi-uSlw1wz7KB>v>aVOgypek#XaHw)^=nil=P* zWX?^m%^82+`iEzopR=`Nqot{2%jz)|htJ(N>%OBy=luHgd-JwG+WGbHeVdx+d=T;! zy#Bk#Ex(B^DnBr^noj+VmN#0&@m<!!n|i(bl#hNovt~KQ|7Gg^k9+#A_$KSsx6_>i zKALgGONYP8YE2$eJ9*IL9j|TsGRwO4MVI@zg#R3~^0TbbH|?3Y^piiY+4s(0v-Y1m zcc`Ma&*GM+Ph^cO_{E1)4(wg?=%=q|J$#^ee6{V3etVyIF6;Qbm)DHTedfxYZ?4Ho z9dhuaJui>Hq2j)!Srw%-U%7i{@tuADa9h^9Uyi)L$KHqU{mFN>tkkS6e;c=D_}}ko zxGw9i9UD*Vaojnn^@GxzD}U9aWk|{573UvXcGE*=ZXB?*a%j#CO*<xB{p-VHmrs6t zH#_(4`1e=MNF21Y{o|Ee<HjGX&7FA3i@&WN^WKOXM=u=w){yr`eVJc3Yuwg<-`iAn zY|HYkn_d|8(fsH8Y%AJeoB5KGJ~aQt^*_&?TKw#xJBB_uGk$Z^@%?vw*M9KI^?zM8 ztL&i(`|K;O>0fxObMCnn4?fpp&0T#?Tz`DSp|_gjKiGPdTj_NJ6{Qhq2HpqQAVnDr zqyd>g0gwoJ5WE`L1yFypuTd2H#8`z56#9NZI*<p12E{6C1}hwt$L6()(h5+wv-}om z0<k)GoX#Dub0_HBJ#=n*?otb`2NI>b4d^M|XMtYQo%w{q=MLna4R?}s*TGG5l6G+7 z?-V{yDIX-xryTIf^I1i85+iJ>ZA)*Z73bduFq~U|Aa8K@^%aEv_=~-HJ;2WFlbl7r zG}p;nrzo~{>ex;kG?!`W(I-NtKhCblIj$G=*`tdvq^mn3@}>0lbd%oLor*%ZP<oaP z2@1I>z2<JxOWc4u*l^+W)Ow-xc6F0pXfxW><_o9SF|3C|Zc1-=H|f<Qt@?{dPepC7 zJ__MZfb!tC4@Ky#sfkM4kVJ)nEkMVxM8!TFoCcZU$mqkA*6Sf3nW*^2Cn}+v5$9I8 z0n$;JP+_7{Kdy(;G)AD+kd9iWZu3nCUkm?F6P3nvk#<-45?ZG~7A0TnROnJg{*-6^ zOs0g8XFbqFc`K3SVTOasW0cVmtvn=G>!G{ysA*KW+|C<EjvVO>R*tM$;2v2i|5f$J za*)lWdM8_aq4y-+DL22DqO1b?Nq^J5!WNNjB0Ia=p(ssGMLD&;kJ1*0{+ixbVe!3{ zcyI<d5o`x1f$P8uxE0(F+yU+nRuXzEgDE`NLgB%m!!G*3sT2>K25tnWQ+#j+*wO>( zZ0Ms{!I|)vgU5nH;0fS1u$9VlNpHnQ;lX*N2N!_r!FF&HctQ^PF1Uosk=R?ALFE9? z2K&I}R1UC%$^o8F<p8_sJitCWkDk4iAjJpQP<-&66dz2ZW4aDCcj11D`l7Ka)oI=W zMX{hxGnjbpzSf8PCiLy7b9x4~kO>=9J{R>4c|Vy>+B`+E!hgBEE;Uu+y3CX5H2aZ` zLp%?o@U76-Bm8wtyu+|S-{}<hI67=H{umj){#S~ktVDi8P>)|HDXCy~DoL?|E#N$` z73=_)gG1mDcr~~lyawC^t_Qb*8^9gl-C*ULB;^1&1AG*02cH1@z^A}<;IrUHaKBW< z2d9BMz*eyG-$}}Ba0a**YzMCc`@p-wb>LQTBe;X&gO#C(4;~CwzD-ibf-}Ig!FI4u z`d5Q};C0|S@D6YzxCz_}ZlQF*ZIn)DlG0A`z^5o3FdK&W;Qrt`a3;7BYz4Q1OTZmq z2Ut0ce8Cyu8n7K4qWIuC>941Bz&j`%@NP;6e1y^ge@^L~Nm4o~9dP1s!~_2id+!0A zMbWp7-#~y!jSzYZ9jUWBvpci1yR-D(dlLwdKp=$Biy$afx^yX0L_k2A^e)o7Qlu&f z0@6{M6#ZYjK}8>)_kF(af4+0R@0>Rr7?S&*-6_A{Rc2=IM4(JWnH}W>lnmucloe4P zLs=K)J(O)wMm)nfq9iEC`1MiF^6R5q;MYgF(yx#5kY69=3BNwdD}Mdw7ze*T%IAK4 zl<A70KFZuEC!k~~SE8(n@)*jxDDR<ck22x~`j3*J9Eq|n%E^9xlxzI@C=dDdQQq_G zql|nD^--2Y8Sz`Xh?*z~%JwMhqD(}Yh;lH>2`ERRT#0fr%3~;J`SnpQ_Ur$Sc=YR| zJml9$dBU%c^15Fi<paMS%CO?7hcX??h!F4xB|(`RWnGj6Wg^O|C?}w7h;k*$M3l!+ zj`ZuJoa@(5mOf&aUmxWazdp*a5~z<d9m)wPBT=qI8HMr~%3>(*p(H3Hk^|RJ5|lMj z)<xOSuaB~&Ums<Azdp)%zdp*oetnd){QAJ_m41Dc$Nc&z&-?XJUia&x92QE#slFYd zvARV>WCK_Dt2|M_hBl+2Z(rg?$DY72;EDGK9(72<lQGGX_8a%Ti~6IIbhrQYWN6as z{{EzoN7Fk;L^Q?qcU;IEF*uauv3(9>z`eP^vEjImzlSig7p^lPNwfQ3h1w@wr`*f$ zCv-~s{*9O4N5%eKJFm<No@$;tVhhT_Z>NsfhjIeGZ@434L~i^QJN|wi0h&Q0p?`i| z^b))F33=Io!(S!6zqD7baqF60+r@QBEE^x36f4`KXZx~c{nuW7PuuABt%Ki$_wwae zUyDoV?VlTK9o@Y{@aYVHT;bLCpgnQzS_e;D{CR`Fy&gOc^Y=Hr`g+%1JzIB;ZQb2J zJ^R|%d&hK-jqlp$AGi41dwTXujA<R05Zm=1?f3f@^T)Zs*YvM-(mAxhUHaA6d;IIm ze|z04l+de7>%?9?%eHQUZ@TsfKIOe_uh`bX?_ceSTCJNj@(Q)<7~Q>f&+gH2J$v8> zNmqLH-+%U}TGDTtN{I14MENy+Y8Tz(wR7PWYU_XgWb35of|6SE?^}SkM<@MChM=8g z^;cT+UtJgd``@_ezl>X=|9Hor_5Sv{|7&FZL%x5W>HNp*|J9uS(bl;CuKTZx_pUu! zxAlkoHDjA}+VbUu{9}AtS9>}2Nuko(KUm$NYxjPypQCnuxc=4ge_SgzIxfCf_n5N( zRa?6EO6VEaCFbA8?H^;%^?zdw{+1K}(v!cpqrx8(^)L7LN2G1ps;{|zHUH`FUeO(5 zUVhM7_t(Vue{%0X=lMVF<Ui`Se))m6|E{BddvEY7U;Z{7ufE<Wn9;w#{O|H72_OE0 z#{NAfaQlCt_}|9VKW+@TNa*?c_<Uuo{@XjhTCZG#+FCWh{y*E}|GYs=w_g4yKK!#S z{%durReWuoI_-M?ank;^um8Jz_h0j$zJ1-j%E$e6#ecb9+fJ{&Pwigu|8gxqlzYT= z_;UdN`5MCfUw<CmKBh;*r1Acrum2ank_U@eQK8Uaf4@Y$d~WNnuVleeMBUf?Jb5TM zyY`QtCl7SqNc_za1`Qed=U1}O8~FKR{O@$Z$WZv7yJ(@%j;P2`_E)~YSR^tu@HOio z*;BBP|1?>HP;2~KDO4Z-s}`ygs*Uff;or*mzyGy0?Cx)Wtac?2TANhndwCsy-8%U{ zuH84e|E>n1o}uocxKIMTdu5dIp%`2_Aru?x8uFi9@ZUrJ{KG<R{o^JfCzJs{uYmV- z!MH@@{r%9IXnYqFTsv==|0gO`Af$!zhn2!#6;?5<d{_az7K>IT`}1BE@wZ2)UC@R^ zv?UJLObD)#6Lp+05C6Jh2L6^0BY$2|Viuc*YK3Z|Y=Al)P$wF-d*M1Up#njD5(<Ci zK8^9WJMQ$?^|erGyr(q$MCrg&R19Up`~AN64BqQsG5(caCEc&$pZ6;lYL7qu`%9yY z54=Q2+&dZG6@z#9wfzxF#MpEX>U0eGhvWYBXHlVI=+j#$Umdp!p;yPPBwp3gUM*ze z8a0Eq)_Hl2xR-7Hqpu17OKnb?%euH$SNyCO=A!4{=JMZP1O6x&<G<Ja=SctSIQucx z7<cIYnuvp^3Zk_kUiIUu2VRf<TU@|Jg@ykg%!`iyL0(k+H+dmK>Hf>SNSf6Kcs(|l z_nP?QpNni2%Jm=RM8)7|y@L_{zdaY)qdotBa^dx3^*?#=Y92UV-!Ab{y^|ilb&G1H zNztg7m%nJrE!wDI<x-+(RF6M@?T1^mUrdjpo=Ts_iSE%Orc2xSeo?qULJzlSukH!5 zNATN5dX(xC*RFfl9$jO5mTK3vi;V8krF3ttXjGTzgt*w49)CRSn{+o^Dk{q9*}Yef zp8lgsFRxbMzquMM5Y$7>9x?5Db&u=W@8$RSNq1jr!j!c4AAF9BkLeK8<IfjgecAsl z_q}}iSTm+~Ong+l|F2ur|1HqHyLOK0UNov#T)B4sV`y&CSpSo~ibj?B>n3IX{au_g ze`}Ld=FiUg!&c^xal<#E|M~jA{wpFBnt&o1d6VQPrHDl;kvgOW=|H-XF=Pw5MKWtS zwJ2@4HdPDh8T9P>Jv|+5OB=CuY#$3Z9`h>VmPlhcR#sV9)|ZcDO1rx~!QNw^wCg(W zIiEYpT<J!;W8LR&xH45;)m*h#T~$9dM2%C^)qK^~>+MbS7J56qpZvwis3Z|Nja(u( z$vyIvWYr33j#fdduQk)!Xos}IdP$w?rKv$}x{{_~*;oSW!+v1#MxxQv=xYoxdYB{3 z@62mvZ9aid=F|BsK9?`xi}^CXlCR+#_!ho{pW)Z}1KwR!wwhW~tjzKU8SiX%Lp~7% z&tN1c3rH$0Qs1C&(Rb*(^nLmv{g{42KdqnFFX~tH>-sulm+`Y9%>;9X8ONvM`lon0 zQCAEVpNXR)!ius@yQ<yWUS{93U8k)x(pm2Os2-_s&-CKGmEKYBq2J%Kp->wXxky?) zt6ofRtdGHc?&?|4yTXQPR5f}V%Zz(QA+xDD(Ci?3i;-fR2*-GjvDR4EtyD6-Q^XNY ztTW3w>tt}tyT7TNUKekMx63=|U%zfB)DlH*!iXRanMyt-=gC#_mS$@;F`AdO$J!1( z1C?e2Gu9MVS*xR!Xl1pF+Li2@b_4redz$^V{iFTBF5;APS~@eF4bE}rkrVD_SAN5r z`fb<q>tQqvZ9`+}Cc1+*XVGju3p27AHH}Y=NVBNf%<N!pHBXzrn5lSvQ9|UjsB~o& zv^|@XA8qgLeC&MV+;p<Jr@S9Me**mLenb|Nb!3x%R+qFnu6%(?_BPwf8W?fL5M#XY zl`+uF$lu}yPvFHxc`;LL6o;)u*~IQ^-*Z;D8{Gs|#;fc###sO4{p$IFRT9_zNqeHD z!brE#e=?t-MZN8jc9gTnIpL&Hk!m=i((?SI@cl|wQjF9f^^gw<q$lY|Mv$}Q8hJ)c zt*SPdrefKd&C0PRtQBj|;t+=i*thH^D`E(vg%NG^G2S(X8Xp+bj2p&dBdu8(vpC&6 zjC*G1P5B_cj_>B4m@1Zug_zA)*;@{`r`QWI#*dv(+-<JknzibTx~bNAyS*#^e9rZG zI20OA_K=h018ustP+Leh(8sg}`-$Z+&zV#Cr+kk%DPm<WdE4os2C9l)ZEv$*cV$v+ z7tl&-)wLhAlzM5svc6Zpp+D6HtwQh6{Ok#P&O%0*F^XT~t{5e*3JaMXC9BD%GFDEP zne1lvI7Gw?y9s7(n3LY6?r3+Sd&<4;)>Fq2-zmNB-e_;1f4?1}K*MAug^|UDwH%0V zLr+Ds(8{zm{eVuR6<94cgPmemSTmy|BK>pYuyNgZWE?QRH8mc~d-09@Lor>XwQ?fX zlgkXUB%-E~TqrllI*6OTj_Fo(uewj%7U~<78F3#vmej|L<ZUuQyR7}Lo2(KW$;uhc zjLyJ@jRrU0HPi9Tn1K>p@p`;H@54v&*?cu0E~bbzqP^@W<7J}kDf`L+a<CjKm)jfc zPn>nmZp=zGH>)bF_NouOncgzLj~A2hb0cY>b<-wki;+`VF|M8UA^Io!V*QMMUw@Nk zrL|}$I-B00X%QnQnPyfq<IE4tv*yoc5wv0$f5Ec|D&7Wmd?_x8Fsqm~#F}Ysw=P)4 zWLY^J`1Dkkuq)X8><{gO_D^<U$90>zbKOO5gvzIisH&>18l}2=p?gWso>ikwk&R<$ zI2+C8vjWB!#u?+jQNWaDXLE?T#yn)+GSl;xyg#4GiwIMk5<iM4YoWCPxnIma<!o?^ zsC~gxr^%o?L!mgb5V?4s+$R(DS-Kx_jaf%_%DieiX!#j&T|5+7tY59PGPlfO&$2h! zr|fffCa1Vl)v4tSbf!3KolVH_6mCJcm|NX#?yhyuxLFic@2lDBsqznn`s28qd`B*m z!kVWI(PnGkYgP2t`gDCIF!7{*NB>2y%$l-c=utsK8Z(Sl#yP_<>zjSd`DSAt18grR z@><QT&ei~Hk#*jBDA(D$?WWF0&QfQK6LPb=y35_xZXfqUcdGj(TJQ^ECsGvxA5Bw- zk!R9t<gE^PC>eArFbFfcMzi#)z>AZ5EbT>S(l6;kwt@9BelVUInaphFbIf50#L-}6 z^Ceyw2t8MPEAEQ)Rwk>cRnmIbx@tYLev(gQD!Z-wfjiw@=vw|gNV1T>Kc|s6@($Rx zly*V?kydBDjbX+UBiwX>o4d^F{B1rdK#Iq_vS=hGiN;opHPpIoX+XA)0f!_DI3$J) zARm&nT5+v4Jwvb4hcr9#s{!lH4zl6KbfdD_&0J+}G>?HBe>1c2V!R|LoZ;&8cq!3A z^b=#{9a+{MVb8Wdb8D+v>azM(eeZ?pCJV5zESX5okh>%q?M%1Q^sFE&XO1_&Hy@e> zcu&5IpXDt@TM;LwiP>U-_+H!>8Ld2)AuG$e$fU7ynmj1a$e#8vd$c_fh+Ep}?+kY~ zJ4c+;z>z3db8UB(8wL!{tqQ7gi0QTJw0fq}dHKPaHM}-nB9LXOx4^sQJ@Nb9CaK@4 ziA~Cps^mQ~nam=ekT1zTa-D=}v$X92%4O8Keuz$CkBvlg0wVvEnHv0mna>jm)*PAL zPT_2ICb{L+Qng+Eg8NPLwgSJ7fQOQW&g1%B$v`rMj3O~w4=tVUvt2R0o&JtKTAzr> zT(4)MxoI)ligrPC44^aUJo+5W@G1L(Nibl2AkS{&xRK2)VQQu@dm;Z8nA^?WXi0Xl z51IE!WUwNwTo$)ntD@D{8g4DOzO{a|ZdyNE8Dyl)C9~KCfx5Ho`Sxe_L$vn;XPPtH zS>QZzQn{twDsCgUh1=GB*BuHhzV1G9^QtPUk!k@<cvlToqmjv{R93H$SKQOQT3!RM zIk+$>_CD8V((EFis48kgTMQJl5WA<u1@T;jEEDZ%X|=JYTC=S!)()$@JTFVz!v5TT zWan@uIy;@aPG~~1V0~|tRt`BbSRbcvhgLcU+`9x`8AuPa2Y+(PX!8?uvw7USY3AjJ z_%VKhpXTRzgg9%Zlv$+!vNr(g4wh@=etBPBv2WUMLpP;GWEkjOoVx>=s;OqG8?@sB z%++CaLfus_)UN?ACJWArzey^RYUCrbk!&N!z>t}>?3&OTX&tno+7#_a?G{)_=}q;P z`fPoHzFPlQPewD+e3Vf^m($(!Jbgi{u$pWH8^`8A#T;ZQp=0tIhcJVM{>&J`9sV94 z$x8|%m=MAdWkp3XNDLP#t-;96kwES}R%N+Nu0(I1$rMn5EA2I4_6WB#=4psK!M*AJ z>ZVmiRVn2n(rW_+4<Op_s5iWfUOvne@j@$;1!v(iLjP9R-q!kR?`q?;kF+_OA9KZM zH0?ucv9{10mzizUg&zG8+IOhA0;7D`yky=rf9CIr6o{?4mUPm%%-yYy;|>oH<Jr7C zhzI4>^qP7jkyER^4c>O-)zg5tlLgNcr-Is<M2cy;7OhRwH$y25p<mPDtUi#x7yA(L zy$c@T5Ie?Bu!=@O#Pa~2Ok@U+RT53aV(8R|A{t2ip|#dJXq~aL!6C%U{y>1i;D;^F zbEhAC!7le3w~*4+htOSLc!#|Q$nEFg@npU<4mBfH5KXuAvCxiB#G8o5Zq_^2WNWFl z+d6J-mAm9Zr?XlMt$PNozxPLN@N%-yWS_oB7zu}ByF(rkTbqE<o2M<&R%@G~?Q`iv z^^e$mVB!(zrn0;uuL@PxlD7etcjWOr5vVpqyd{ZTD;Gcm)N^(@`<z40dFP^Y#kua> za(;FSxb@xl+!5|%u*qKcgqs|=bwXWKKVqDVd8GoaKMsg>*B{w?$wG(Fq{^f@i3L*4 zBg^4$ekbWLyLGgd+AwVt6hvA*LeHUBLX6g<jiHmq&^dH5+X5`9Z?rc?7;~YiR~s44 zLS{#EfLRC;$#`Yngm>oM`TKkX98XG-U6dB>k<TTe9SYdRZ3-vS!ft1Gwg&=7d=%Me zZ-b6_!^wmGq;&JUb=?kbS8&q|caFQv&8U{CRnT&|y@J4t4&FfT1Mg$+Q}1(chj-Gu z;63yFRYCuOr*!a*dC3g20&c0WR#BU;9ngN(GEq()S`9dufyJ|d?0q(#J%R@7jh0_F zo*8*e!;CQpn`_NY=3cV~ug^!rrOo3@z#;X(Ass|dXtDK(pnD?HDr^<EsMXLKWgW84 zTEAFNfEO8o7oO|@jW!VKXr=sFhU^@6Ub_TbOB?iXoqfRm4oDg9WO2$m6`?|EI(40f zPE&Z8HcorzLuaZp2l)8{2uj=-x0CxR=I<m_Pps;!`T|{csW9&i%wH>Sm^aFshW>v7 z*Y=AaTM@}aTTtX9h2WTDNoP2N1!M!+N)8ZD>#QYe{j|@67`v`L*OI|C$Lsy|LHbDj zu)dw{LJnnTZ?TH34w!i!3t6kJ&DK8j>xGp`=9R@|k~gX++se-9-zV~Od0JkO_n;oq z+U4wyb{Bhw{i(g({stQBynWHWZr`$h1|~nZi$W0}aWcDA-2v_z_b`-k4%J<agkHU< zQULYWd7-G}p@zvqq2i=AnNDt#)LK@}=e1Q@bvVxt^{M)DJtt=GGrEGVp@(Q;Mwvv$ z_h)0+Lg@4`qlhuf*bJn3VWc)A%p7I`@LDDFZ8*F{v!D6CIT~7Qjk(`E3Zy?{UNA31 zZQM5Ro5^`NPscOytUNc5;zf9IZu4@y60gDQ@J75DZ_V5BI7IMd_?M-81z!v8zny=@ z_w&R2JAMUz{SN<`KjF`La*;};69s_1uBajEK@+tQtwju!M_17U>T4?EW|uf9?g-l| zXH|u!-DBOgM#`!3OJL8ti2Qx_8M`)OVU#o3SpoI&i<8W);Wl*JyQ6^2)7&rM9e22Q zflEzPjGCvGt1T+Im)4VBS+9!M&WnQ*nd0sA_WN!X7?V8EAsI<lqLJ$40sLV#tsQXs zb2yM__}7d2HT{{MmcB{z((1G>Z2|@L4t<Y~!}xYH_8G+N0yl6(L|EhHC}d;^40k}C zS987dfxb%~+7RGzMpA-!P<b23e)1cM(rRd*YU{Pq`UbG>Z9O%vUlpv-g$|_~>0$bS zreygMWu4dnHjyo0>)^DK8Rd*>MjJTOalnxc#uj4-c%zg#8NPIuITy-gvAN7#i5c8r zZZUU2f9?aWA2SDthSm&d>J`>H>#}vjijqZ<c|+wYXu6y7S9p_4b|msD9u8@w`-6MS zWhzuRd7v93;h?`GZ)o{638Y)B9nr36ziSzx?0e`RfQ8rSS*Zbs6hl9zYw4R{v=MAB zTARWsW^^(J8yA2XHw@4G+N^`w-7nHu#Ht1j{4N;a0o-XRSy6r^ugfaIYD*fYjMLmH z>*iF&Re9A(y{Epw>>W}yy=`EJKr6IK?%O2HS1}?<U1ab8DBHzQ3@6A964G*OQCcCb z7+f;Z7}SHKl?Ad@)oN;WwT4<#ZH0DG%cPgpqcNlTDW#P#pK+Mau|VoI^dP-SLo6%C zy%B2(6*wJ;eG;BFqsh$X$dNI~j|XN(t|9hYBFfM5Fi}WEivePuSSyaehgnuVt2KJJ z-Z~A}`x`VMl{IBMjP_Rf9Td85e{6q+%-5YdP8@vcF()@%cn$Y+AlMM-h{vj|7wrx8 z7I}NUYkq$dllwL`l#+BLU7%aD(uy>m_Miu78g`a7G^QG@%^T2UC3#z9U>dPRG`B{{ zDL|Q;PJ(m5Dd-k=%ea<X!L8*saigJNdbxwZ6_ecA@Sm&P&F*gZD7@5V_qO}kO{UVS zEbydn!P~jeq4l6cV_vTKjfKma2c5lIZB#peN=MX5MEPZPL)}+T)bA>lm)?u?a(M;3 zw>%5Ewg#$X3pi&N^!Op~n0LZEjf}YHUGc8J%Jzek2fUiZ_320ii6q%cZW0B2E=Ecc z@^bB~EVN-&QWG=YkTfMNNgL80BN9&%f!}=*1B1y>G7>&)0(=D3JSeJ$MpL6DvZcMz z(fDh9aj-Ge7-@_#CK!|9s%Bw+7Z{6;WyVTl&7T>y4~p@ak=ZN^7k7oH7dAX{8tCbe ztRxfUELq0Rr&glB>AcKd38-=bCAQZ0921fUdo5`Qhl-8XMnkW()`uZS9@5k7S0kM{ zgnt5_+{cgdpZGnVO1vY6h*4sT*e$L>v!}N5Tg9x()+{F+(ceK0SL4(aWWXk<l5<dg zI(*be@HY>94xgJmSfAMmzjPFl@2|FI(Q;`8kf*)1ceLz!bwtZ&`c=Igs|?4xh3yCw z-wiemz0L_#*Er`D;JYIPhubS?4YQtE$z*z22K{SpAGNCkW6!$dq12OkmBF95*~;X> z`c)&cl>A7_LXVZDJ&kQf2I!gQW^Xy(zF=o@iaNdA{y^fTZgZu)3SKj>XP`@y2kU~8 zG}4>viSS=H^aWt5?er|IZp;C8Z8A@qrQnr^04F{c8^u#m$m(y^wCmX&?Dy?w_EBdY zqV;Q_Qz;<(D6nEp|GLML2WuvUp?AlS7o@({MEgpstG`dLQpPN{iRCx4n|aLEd^SdW z1pN01tD+n!1ys~RXTNjFDTACChpXOqm#7L}=wj0K`Vp!Ny|x~wFVT<dVRR61S!W#A ztA^P5+Q`Cl!cElRW6<K`aNs($P7a`KM`+~J&IL!R>)vg@efN?FTDYNpKwkrV%*wJD z-Jqp@H%6Hk&4v85xFyCwWoz;f(61IeQ=&87`NBEq%vEQCHJlVdO!@rrK3N2v@-2zg zMrbp&O<G}nEL?0JxSvXN7{;+CYmJ#c%WfJ&%x}$>yc<8o8(Dj;@2otM$yoTaEnv~+ zc1P!o^PQ9Ee&+gIHB$YmQp2<0CJ`xubrXklB{Ru4<QFnlo2cc)7$oSIFrEo)BiqJm z8>!4Wa4FZ!HoPzTzny0So396Fe=lx}U!-ey0>bUHw>vkTI^boY`XheNr~^s(9hD-8 zA%kotJ4l?Cpsm(Zp#E5SK%SA$WmdbCUES_!FR{ON?!aaAbl-PxxE`Y3$A}ccSQaM5 z5%VWVbFg$unufN6hZ%4Fi0GNm7jcT5dM=V#8SJz6Hs_wxz`d$&s&{}np|UALvqC<n z)gp7W1zLno^~U<!`am$*NBUfSy*>;awu3&TPpQX-uxV^In0GUaH98xs&GkUpaskSI zz^C9o%lU4;UThb8;FO+=tX3Y&vT8x;CRn`?w-c?S)(NYMOm9cpi(fj(4fYLtiF3kv z>TvfN#(tWbrMi24l6+g;6oIGr*QZ<S?V$(K(HXQ7tHmxDz0CgRRDOw{5#NcX@J&C+ z)XoeiHC%N9^7Dd<1md<vmIZpFO^RR*H5>fN33447kx6smp*w3cwBwqo+xjEDIITlF z(Qd2{dzVcIS6^c$6#NOETT~FOFnV*v0a3%sC8OjLS<l{K@3tr7ZpB>b)^z*03*0?! zLsc6(YD~aSDMB?-gpmeh2`PuW9MEp-KkFmGr}yb4RtnCi3-ro*Bh1Wcrr{GXcKhXd zXM(%Uy@N5x56{(34Ft}Gf={0IbFZjY2?#b-Tdrl$yJ2qT=_~bp`fqwcI*V?ikt`AT zz1v8GtX?5nfMdUsYwaKGYe1~??j^UsnyVNXXcO=_DPCNyyf#b!T^~fBBKwLN6%5Wh zAXZLVZ_A4^&R%XG!p!(t`z87|0d2|YHTLcUV^aj$@GH2yH_@}1h>@Z616rBYU|+E_ z>@G`b6g65KGtj#mMha+TCM<CgDj<anm%9<s)!}4{L(@!kzI0AOsZIdTP6x{uPRh5H zN&P*dozcG6rqL{H3H<mec7YW&Ik@M0^9r18CBDwu2FHBTItP!D1CF+l>?pg-esYlf zKrWC=<u*CW?W@vxp&coL=LtTCGuTawh%?q5D|9RgKXw6cBWOWt!r8T?U1=Zo5&QSt zcfvSroHs5SSB%blARiBR7hw&Arnx1f?5^;kzdOC%p>85v7W1lkwc$>-cwYiLlVW%< z$*SpEtoAW*c$A)>E~6LN0~T&<gqFHzOg2A49Atz`Si=v9G;+GE0)MyF+3B=}kF6eH zW{QyiOjmK@l1AhlsjGF=+Ugzj)A|K{Fp#bjoajblhB-(KMeaQn^Q?u|7P&*-fYVRr zWOhn8{ha&GB6#6Es({)FtrGGhG|;oT$zbh}mRbKrZ-`!=H7*%X492&My-;u8i7O(P zRmdu9Rk7Z-23wP?+13JUiM0mabsBu>T6-sy@=x{yxV04UriE~)YH+4)algUNDrW=S z$Pdm9+&j6O(=F(hc3roH+YWi!#~tlXcIUeOzSdXnC*ahls<^+B2h0r%6+_XPd`?<u z_4T1(?1Qv9YsbPwdT~zvC{LkJctccJuvXVnn?f(sNTU(|jK61%vp%*yvDR9ftX<Y& z>s#v*)O~7MBJkD+<YQUWjs|;nvj;#A&H<*bMK<rTGdPh>PVjUo$8;(<&CveNPB%p8 zAtxWQyp+q)?(%Lmuy_h(s&}FIeuMUS*IVt~@SxLz&wbEIC-O15N^)wok*No?-?Ym5 zIQ^8Km&VfN^bu8TILl~68o7)D##;t4xS@<nMopuE(cFlJBI^nc90)D;-|MiyV)43h z%Xn(!GCwufnS0D5rp_z!n!G;TXB<!9JrJq>8p?-!Dxb;cLTC9Awh=CLA6)3S{5%l! z4*vx%G`V;~6b0v07EQ$4@SX{xClve$F+t1_3&a|+Qydo;#1G=GNM&WTDp}E1tkuQp zX?=jv{=zz7eGljI%!-hOWywGNehV2RyCNrt$g%Qcxk7G~$K(lk|MNhYEAThB<URR7 zJ^{mp>@YjrPG?7e8M52C?I^pDUCicoeJGNBcDOShk^2DI+ys0T7VLR`Ox7WzuWKQl z>+$R|d&Wu|dyPG26MlqW<=Nqwef|gw*8K|VTWM;MNl@X42BL%LE+&at;tTP+V3x2P z#CAoiDSFcj`8>gzZq0=&{0i}X+4{+9DMtZMeni~7kPYpz_C5QdO&sCeb$)gFxWn9C zK(G657F7_QpojVlx^#~!=hgR?cn7_c0r#K{h>dWPkL-aL>jZzhQ;XAk>N614_w`Od z@7>T5Z?NoaFdNO18|jTEnC~w!t0{qaL(TE#Zu5j$oWI8>1@pI&U*Q==K~YNd5g&-f zVB7D-Rj7<)$kGbdAZt7_^b6}t>mraYOlAT$mX(cVdpQwk@VfC&k9_E1e*#8cZEpeU zpR%vox9yZpR;RGToGMVf9gqp{IKwatA32{m`;gDqphF%)iKKATxNo}I-F$8l<Op+Z zXq#qk8(>xfJk<bqiaW!d=PpK$?*R)vcJrw+s*Y+6_tYEwHdIYiDZP>&0b&Zzfj_F~ zRfTV;>oxS6dM&*+UVE>j7w;v4$NPE%yut8*Bf+o}yvg2lZ<aULTi`ABmU%1xOJDWa z3nhjH>&`VvGqQlJBt?M44xDc*ZLRhWxHO8Eri3ZBh@E4?_{n%|OhZ1s2|kQ}%}I+F zyrF0+T8cLCCl5s*VD&;-9DSYbe&c3E6dZ>y`B9}oyZzrR;orB1-d`8gqkm=eA9-8` zjJDT2ZT=AK+Y|2bTDZ#|{wog`Sw&lGs<qnMVcD{}d|%F%8SFfEBRdhie$O5UADa^{ zc7eMZo?>~hr!?DJnsnx5LRfG{qA+Pe63A#^QG(u2pRO;|uS4l<pnGTptHzqMUs-Bn zKahl*@0erFINpa}5I+eM*|1D*kawUQDnd7`R;4f-u^8!f{w~$ruu$$~zV>bik2xGp z>l6`MWo;zx@}u^PR$L#c&w?gcpfA>!L8GjBdEz7m%}tBY8nh!_MT@YJufevn#x>)% z@!UvlrZ-EOz0474(`QhaTj9%|n7^4GpN!1TB78lu9ND`~oDiqQd1#9(;yN6|J@G(1 zf#zh^DCEEnp#MJP@G&UP)7E)p1C_OaMw8@zc}?cFsXYwXzXI5Q!ag0WI$jCZ9q)n3 zp4eHzV_gvQPn@ytP4}J~rovS^6`>+kc9mO2sY0rlDywR%&1%2OjL2<;r~?nI3=2M& zG&5Yf1rPoX^!zDujogI>>=W$OD816l(>Ax@pTePMM`JurvF9uel%V3@^F~15_TpVJ zOw1PZ#RmA`9b%W*Ck}~YL4SvVf!Cuyv2udU<CJz9J26fV<mF;8?RMu|=c@B4SOYGu zYN=N6%ZaL=I;bwI7RaV?f#*!({7%|@%+LybuYOoRf!5sD3(;b<BqhPlkweSUinJ=N zN$b*vv?<h48`>Uo7f%yuPuiCbpo8K4M$$2K0&M_o_5)*vFdU<-QPHRhM)Ox1qRb`c z3NtKNC5_;bJbSQCT8Q7q=-04g>{0e-_H9)NZa5weK6ETB(CD!kw`U}IuwFGt8?J5D zb^+yYY4@~rdW3G%^0XbD4$V84E}#$SGitH2h~%McBpbsfuw`r|TLZs0kKcv^n*kkI z#Afz7`!i<~#zeVqV*Wa+c#KNuVp#C`x=+c^+I`U-@liqs=cVq21?MzPAVejtwHBkr zYwv4Iv=MX)?ZA4mbH;eHzgUM^>5h3gYu%M^*j4Sub}xIRJ=N~7O8A~Clrp%6B)!Q< zQdZldrO|7^Q_axp(QfoP9mTRC>pl{ztb^7C>#ns^?y&d6nca1lsYj|baM0I4DFdC} z7@Fb|sS3Y25L_`D4#G5>n4Qf>Jew#X_JN^ZSRdJ&>?3w1H`Z4tULjzquZ>a$zV$vF zT`9dfvj4uG4<k31E}~!3ee@#zk!EN4SRrOYxhJr3Y%cWsN%n+A8bu5nisYXwLmyy1 zcOgQ5w%(BQ;by<JLnLLeCzTl*x;S-dZS<}$9YQD3C3GA8hF+n!=?j{k<zj_dF{s>h zW@b2W-z~leO)`!z<V$%<*-W;QN96@Mz#eQ5#VC%kC)kti>GmvpuD#$DpST6Nx(jOH zke%Jh=Uh?O)h%^TJy1{7a~1N!yl`+w9q5CU{*k*-S-qlORj;Yn)f)!8qiysY^j4q= zQU?AaTpOe1(-ZX&JHRrl9LQ;*l&YkftG;T08Vqh4sm7=YYO<ORM><z6P>a<vwNkB7 z8`KuHL+w((_@_L;?<qsqQT(-5S41nN#pv<6pEZ7_tf%|wc{&&oI-bp8pR)5%D^FQI zLr1<;FsecQB^bRh$`6b-W=FHDImjFa%-dz2GebNx&x4F9&Ka-EoA9o@Cm+ej{Nohh z30?=9tyQ4dmH`(JK%*tM(pj0U99BWgvnpGytaeapeXRj6_j1QT<xI9Z$lh=V88N~u z?2r@YggaqwX1A+*!DYzF@!k|L>>4=6FTtkhUt-G8zL38Lq-kZf^!ht&7+cI%uubes zc8DEk-?1OrFX&fFBVDk+?CV=!-PVPgX=}t8J&kva4-iK)jrqps!2IpT9;n!J##Lbc z6XSO{*Eh|4W|81TK?SqA*~n~Zb~3w}1I!`jICF|Q7mU0FO!)$c63KJ&db}ydV;U6E z8orr-$q&9<J<KBNh{hrj+Gqk8A(s_q-*6VHtI!#_e1wJ(OBp(iA~_;r5d2?rI+1<P zeq&!5P0iLA|2KeD#W3Dwc{Ql$7JLzye<R<<!$fwGTSSRMqL}b^$!m(b;tw6rUUU@k zxMxrCT$IE(@3K0|HL?J>I@a!kh+d1RJq0ITAHE{a>FO+WK6myyN1RI-@oa8>_>0o6 zaGScV-G1(1caoc2<yA#gDOE$&2Uhh^AE+g2MQ}RcoO)Fojfcuy?QQh-dq?5xlj1OG zPemtHNIV%tJ|GjwR5F(=h4wrg>>4N6qO>krFKvJ}TU(%Q({{sWhv_-=-ueVM$#9y1 zW}&r!@k@acQ`k~=gQddkjW+t56X8)8nM?V0ehdoqA;#KAAWziCD6|&6#VGNySS`*3 zN;DE~F&5D_*;;IE0S8|ON@bTt-~$Z1hcn0-?WA!d(02{Ks-oM;O$<&jO@o>_;2v|o zg`$28&Mm2!vQ=aCwi={{2WLJyL4TwS)>h^MlQW{-dFWd-HR5n4H1B3>r}YikKBM&a zQ0fQnqqiI&hs$|#G1PCY^P!W`U8%N1pZ%gHgRfHtYhO)BEEz{;k#9+q)<Ns0Z35%$ z(}(|y^ZL%HZXPuo@pil;@5Wd0o%|3_21l9;aZv}nT^7FRk1RW7U9;B9>2?|D=QuF* z1ZRqq3G?iu^bWU#stSG{3Eg%8vH1srb@sX==ls3@Z@kcsl)?FrWI&ZVP!jKx5>TzR zwQn$A&ol>!)*pQGhr;?vf2v2)w`nKv@f>)~$21MFeH}ZC`Fp}D0Atz%Wj=*Ns$!0W zuKHsi>_nhD(;}lzaK9J6KZ+6WiRogA*aN@!0B$esONUeyxG_1{dprnD)exxtvrJ>R zglhWP&H|^<z!~6-bv|}hI2)ZvH!qw(EB8}(8B}o{)g6es0vw;zrwpVtsTG{ZE};>v zqc&9g46bMkV)2Sz0IH)0oe!4UL=S_dexa#YR#pToRhKnkE!jji4LW^2+Y8i5VH7m} zRd@Wg!?6srcg1*Uq%tGScwop^=C|fe^SL>J@8Z|_BmN9oy$e`b%4%S>!K|IPu2_a_ zD%;A{a*zC0u7wuN<}`OkIrrgoazhD*As1(=FH}j-^{RNi;7LLkQwD2EY2oh(IZ4iv z+a#?Pq1Djp1}AjpK)-yW-$Z8R0~73~xmhgh37kx8EHYLZQ-Eeks>nZy^C6G6KC#YO z_bv4r&*N*8lrQ%S8fzbFr?i|<lYMj#-lY$_&I+2*<{tANbaE_M;fi=H20$HDM}J1h zg?0tFw<AtBcaxh2x^<Dt3zg9o{%K!u3O7~2;}N7P)Yr%4CV5PxRz-UVWT>OJ(pT$W z>ZxfYZA;e#nyV$dho~xn@s0<A{{Uux01SU_gv`>o|5Ba<(es^%w6a^dtthzCcdb;i zkSr!k!izE~WCHwV8AME1_aZVqziO%`snhDbx~P0sALK0z^iQhb{A4!LgnUAlkhSCr z$*h&v1|wF!K?c+Zeoxnb&}SgtzoRYKyX+#fjn2kqqn0_)oC#NzmcPYk0=<(?WnBz* z+;4#+9`JM`LPQ35UQ~Q2riw0T;UsI7HCCRrb2|;40&aV^hr7kqlnIwQUM2JLc%i6N zf$ymX|9F;At(q1K47~|m8izdGp`X{E=nF7DM=?5WSbNry4aA(ZF`k(zcp9{X@W#9i zUk-P-9sceNzr=6wyrKwPyele*{z1-dg~mTCF2Psc7ul_R!CrqotE1H)u{i>f@fk4g zXX~kzOui|z$=b4!jF%tE1#-DuD>uvC^0>SzZ_8A0iG}Twc4fPk-Oe6i7j)VKZ$EUV zJ1d=a&Q7?-PHuNF&183`YpQ59O?|HRz$2Vg->aXXs2;1|z?S|#UQT$*VqO`~M6_4* zYIya%X5gI;-XO%}Xm6so*E`}J5B4BZg{op~(t~*h07ajW=Om<sY2jKrWJ08t{lDFT zZmG4=+5-vVwM4C_))yl?CE%x{i1KE7g5FF2L|+c1JE}*}Z^73$SZ?D@Gkf3>C!5<b z+eeYx-<#LW`({P3c6#W5+``1z)&)1s72CybIH)V)21Yiel?`ZC6FKj%UyZPCTMw=0 zR#uq@(do&-a*q5|E|a_D0r_>X?o$Y3NimiU?GE-7U|m`#lT*^6PGuloYo{CV?x1tr zIqN)do`GHR!;f!rzjV*JKe!Lw)T$=@MxyEyoCaH_wyA6CHZ*HwFt#n=d<Mdm&GEkV zF8Fy^HdVk!$w+FFf%Mi!Xwwnxo3x?m{Z9Ro9s<`%c<7e23w;;vYdPIQtG}`ic+bdh z7K3;8%qnIxph1to*G~a!|8@G|wwasH25&7wzkjnTp|_XiJiDk<2RPTp>EkqXhk=J@ zyK7wEDJ@d#R2d*ee=k%wm4EylbDWD9q!svR4LMD&k}$o#{<*$Qf2OB{TO1AkSwQ#F zGxRbIu}D^mRcAfe2)2;zWGC2tsKeYwX{f?xuk1E|4Gei`q%gyw0PCC0(e6R!aHzdy zK(iC(8S@8Zvf!0@4c?GXK}OH#NBIT*1HZ{5;gJ26fGuLO^)d2dq5Xq>$NmLs_6&UG zTZr35z_&}@onRd<Rp2kv1m`ImzuXm{4%XK+Q}ci)O@Jt;=s9|wj%N$l9<(;MQ3}k` z+307yYm6`qvm)Ycs(H)o%KO2)tmJ-d#oA+`pLORAD7aJZHTQ{|5py1^LW!w@HS9WC z1Y2Y_gcj*7M}k$Z$~Wy9_I;<38mofmWd^4T`A@c%0p8Xz@|YLQ*<7=x$mC80a`l)~ z*rje4%*ltrI-`yV!kZ_g3N%m(XuT*>l62G)*c|Iy>#7wdb4e;|$aeA_ISKCfEBOTe zG^bs{b`Zg>?5^-wqwM$G@$O^fcxC_ob5p(K<SbyY63~qa$l-J3DR~2VOSH;bBk09J z+BoFnW@O`4?U9yEm+)4d^mp~iL1ccd{}`Mc>5uu(#k#{8%!DG_&n~dXER9hBZnCx! z4UaS1_yP*#s!_&NW>#L5+q@A!j+wkI3c#gYg(Dd*r$JNXw9kNdt2-^6Z=4IxWn`AW z3Ux@GRX;$t{jM^2*#l%M<vCugHyjx>%bV|g1vI*ow4b^%RVXsKzyFqz<Rpc`%QmS@ z>XDYD1L;l%!jn$|%YB9jK17ZK&HX2{9+KbD<IGwPtu%ap1Fe}B4TSFrzL}zZf-GF6 zZG=8Kp<U3fX%DpIdTKo)I5}MkKC>2Lr@h`CTs&AGt$(P`22$<R_v%OV<H*|EdKk?_ zv(db8$r@a86X>+|bOaqsCqofzrMu`g_~ZvP8_NSXUXj&@&WUCng1i~aCbKojoxSX9 z_APwlWA=iD8ATD748H1ZsGOn3L}QvU4{E|6+r#iwkBt{bm{}A!z|1D*+h+ThD7nVm z37q^IIC<H89Qde0T<4sZ<5hSA-hp?4yPO>C7O&##`B(f~WZ4xcq)gEH`N5P_R1vk{ zd3uWX#R%}`H1Ua856;>JT>TkpBbk*Np0g;_6tfyyZLJPgH>-~|#F`fD7_GOq!WUfu ze?10&rIwjxQD}4~8$xY$klkb-IRtY*8*H{qego}wNnVq`$kevKSIlkKt_bw)V)wMC z*|Y5h_D=h<eb4^gPVJ<3@;kcYI8~g+&^MdiGOtlikAiitRDn*b`e)wHB@4)6vJ8B_ zhHM~P$PTiL>_bExBPW1t=gAM?v7(5APql-H`|q{;+S__=S`D+ZitU5rJ<p!8j6kwM z#uO;)RD!zq)I{%aaMm|fa2~4-v9wyqpO#v0ZJ+>wKz_eALHk16s~tuR-O_&6e$~?H z+4S<z?U`s!<c>x;O`yH#7`h4(afF@(68#7aP0ez$ZpbJ<5|*>IxN})!wNVc9*^eK9 zhK&&ZY4<Y1fCKFT54J+=1k)Xd54$XW1J`8_eAq~9yfw%A6bkn;a5A6Nr6ViIYO;Y$ zkiCFQu^8J$&T`~ieYcGp<0iPb-I;2Q+N8dO=X|VQs4y?D$2{qkgZoVM-UIv3@^*Ts zy`TMzyO=68Aeq1JnG?BI2k4qe`jD}KZreo;lJCePk{W1IKx?JNXcM)MFcO=zW7=I{ zNd!irlwLuvjtuGyM475Df}h!`Kh{%F|2d<4@HCU?cKSQb$Z8=snn7K4U<s@j8^DIJ zQS3uDoy`eWA@*ZV?jk=Tj7TFpcqYmyWE3+>8srs^Fw58$?6>AJb+e|~#_S!eEzCep z+=27Y#!K@`P-zK#7@vh4*bUwI3(p`5!xuFX31S$O#BwN!^N9A8Rt}3;HLPZTuBS}5 zW?6F)>5Hvp)=Fy){NF7o`BX9zh+GF+EkO>Gwe4-MS#5p})#>jkd0^p2@KBSTr9l46 z&TSyyQzy)ga*Mjst?RaQN4c}yf!;7g^<r;@zq<@ikSdfNWB)CQ#P~MVn(FWCbM!6x z8U2x-nUdf+t+SM|uF#_^*ioqDH;u~hNzq1EW3I6d>fxc0-7INxvz6Hny7^P6gx%%= zFz;RSf%z-cYhGRu?nLLcczxc4NAm&vJwBXI;7h@PYx$O!yNK6$3K0%39En&o#aKjP z3HZi}7@-*GtnL_}W!742uXO}Cf6MyCN`q19g^b@V&&UTd5*n+YJrrEJ)Lv(wweQ<6 z>{3oer=8Q^ndYo=HU~`bvy<G7a|gMH-7D@hHyzY@Ej2}jdyT!8$oN6Qnw7s6aw<4w zlsdF5<nL`4B*lqF1X19C)+B~>CBqS$pOU3yHS+xuNdqmvQ~MZWmLB>l6;SvEi!>e? z>Hl$N^sHH!_d@Txis53dI3X4S(aOq-vZ|~p>&nmMUU@}6lcj9iu4gCO6Ycq!<EM5L zXMwW~ZNKegaX*F|UIle{&CRKrsc~wCTCZ}0w?YxALk~j!dB%}w(@}B@OjJax08Knl zn*nEh73@l&t~%18bS^aCX?h?2z98f98AI7<<{6ER6-EMP?IPkhf*0WI&vXBK_&MH1 zj1dJf7mck%;P77Sw57@NXm>ps4eXsI=R+y%lDFjV&<YWDRy)crZ&$VJ*s*ppXx;2U zSk2*1ywlxz2eG-uIqIBoE;?78drqcc@6UAC1={DC`<|KzojXshLeFlgpVc!cUB{~v z_=Z^E#zb#A)b6@qeL8h$GUE1aaIy|QO?q0`0V3AXTk37~{`xTeBYlCsOkb}bfWkPh zKhS^G^Uwyg9~}nnOpbZ-&z@CdG4Rua*hn^)tz?_o4t5MY`H;;D))&8rF1}+VH~rPc z{NTh^W{f$&oQIj+hA2O1o`hd`0)3f<=ix;V<NgWmXx@$Y;e+`ou;FKX1>eL^@~b?h z$O??DCSpY&pup$iYjI9I6k%3IAZ-3%m9?qW&gx-}wdNzvcUi}*GuC%d*r{bssbqbO zbUfmHu$&_2!L5BQe~|a#)Uw#cZOg6=W!BM-N7VGRhuf3wRrU_#z;*i#C(<eGRC1!7 zM5lM~%;8LDK0MqW#FB8E!=w7^h0_sN3*Dve)|YE%ci}spyBSnv)mHUX1Jn?>>yOki z^{u+2GJ8cl;_+bhA_nebu(!uM;r-;@PkR20qz<uQuQ~&%L~4?Dh{u`8lx2v@E%0^U zk^AH~k{$}l-|?%dHP)uWqixi_)b?qowePendTyQSO@ZUR^Z~%3F~IWW`j^l_7xdrt zH=u#?&|*+O@$`K<o=%}_>7HPP=NWh|Gt0&DvvRB^Ys6ZyIH<^X*l;$UeZ=Oo#cUUl z>omK>ZeeDBV{aIlfbAs>X_N<&H8t889l^p=jpfFE<BXBhENn`%tl7<+V~*vY@MTaj zcli^ZO5}iwvB8lO#6EEZ9QlJt3lz@_&9cz?5iT&5%qPpqJILaU_9l#RO}D>0&RybO z$B0T*TXj;4)mrsbWr7!O>Mg;@or7mf9U2qzpV`Yq%8_AY3Ykw1LqGfmT#3-~YVX3u z&DWM`VPLtT`hGar>lle#VEa$NYAIO`R-1jy&H|O|7%hz(MpihtSg5l?yaMly_*>2Q zfrILbb|Ox^5b3P4;PbB5IH;=KXm54o?;a`bmUcAQI8--vu-}}4G$L(DZy;Q5VB1iw zG_opIpMiM@r<rL{+LnGqFVXhU6koA$__6xN8sjTy#*^k~=)Ek#vtR!6bIrwf!A_{> z)N(>DcSpd5EOr~HXw_G}r|zmeUOVrG|I~k*)WJvYq$k-(es~Cjc%%gxOy-eAWCgU< z_avmH)yhK)HHDr^fV-cHn0WyOlovT)MmO|EXy1GKJY@UY;CZ_v`dvL06thX|(P%oK z-T?pmW92_%(v-!reo$dE*$sA&6+`<e;-Hr?3=y!%*nk)~Yuq%R1Hbcv)hfYJPJ#nY z3%}8ckLOuMJ<&xRhBhi_l>vKy3`Nulj{i%U-`)ycdDKqhWOQ<)&+*O-u+Cy+)Fn5I zDx!u1(|%Sdz&1VLE7y42z1`l;q-V1dQ~Qsihl+w{%9Ae8J|oE{;P?fSO)I0x;Hic! za1K7kRn!~nW8s??!ykMdxTcb{DP2N0({Jfb8qQ|3QpQT-8vJk*w0k=E_^5f#yk~yE z7x3G>l&FsQoh!OPS5LK8S^I%8Az27f+fjZ16yG8>yDs$cO8c<=5OdeW>FT`ijC7_t zvz+bl_F<}u+UkV{rw*R?DFy9&jik_;z~L;`)<WZ6fy#~4--321j0kN;r$U21r#X<5 zlbQdF@BygaJB%9%80}SvnKMRSlfV=E>#7-eXDHGK!Px~aT8WO(OY_7+`152|ob@L7 zzOrmA-<M<1%A@jonE^~Q)!qv|G}}1@Ced8wM!VD8?JiO6R4+9GsI^?3QNLo$^TO+O z$B6shH+8TsNP$kh$O!TgSq=yHl%&$~X>SDxR7&@dY4i1U`dO&R3_u)*en6MOVU=O! z(UTZ(#T<5q31b}e;CAB_)Zk9DIUmdCLeYH9PxEZzBe5AOx}>$vx^6wP-jIuc*oUFl ziX#)+xx?MB)n)b2-;IEOPVIk$L8!d;o;DZyKAql0@2B6;Q_?at45*eHJpC4!Dk*Y@ zfTfne&)sJQ5x3H)1oY}*Y%+GjxrLdx%qMX01*D6-ZUZkoT`s{`9g!F1bD7U3c4g%G zP>k7n`x`qP%$ygRu{K<CA7_L!$(iG9f<n@v5+}N!yKCIN?oGAV3$08YoCUc;_QAz0 z&^PJF^cQ+Y+K5i1`>4O(afObC$K1@Wu|>u<K0xe2ZbVqg;n326kA^_W?6*@Pe#*NI z+-)vX3)B^rGig0~N9tgYItyt?dXmv(Cwz1+t-6*&Z;6aO%1VotqNdf`S_x(0uRZLx zA2=1^FG?s!_4Y2pC#4Ra#m}yl0#4P_W<h}!pbfzZ4cK;enB_Ji%|v+CXJ#=z4zshJ z|HyZW3|2L(6;$_ZYa2B7Z`M_r&TbC%xY2%Ww{UhjqufPqwA!Uksq3mD6bEi_F{zzt zNE6aUYov!^KBA1m(0B@2_70pd5#_}lQBbat<!s`7?&NScyHDMcs-Ra4iY0U}seUCA zOD4iQ&LI=E7PJkGp`XIFmtihz4M(z$?PfQj9sOr}s+x_>7I5BO;396?{%>mX&!L^x zM(C$$dY043XUsP=v!z*uH-bv*45WXLkAc$I&5!YL%YV+ESbv>Ot7_G>>cUeu4W3?Z zZ*{cdq2zj6jb%#2!d82i{T*V{KY!WU;qK4w6ZdyFhpG;g9;0Tf8)_F^X(%E*;Hg8% z?SfEIL*S>fA``k89nEkN0gtalC9zbj7Nu>&wsEDw&c{$1cbp8a?pAiYx_#Vt!G@FF zgYGx(PtX_nRSBglp~|bbReRM3_nHhvJ6C-MoZO~v22a35cv-zXP#g(fZ(!!<nDgu2 zT`v?B9`Mu~Bm(NZD!3ws#FOr%KStMQjIYQM=<@p{x#n|dE-eabxP)eE<$$D(wPD&M z?YMSHTdQwk6O1{=FnARc4rGBC4P~26+A^7)5gPWAO_38>-1gAi`P5Z^-He0>XP0$S zgR}%n4=2~PG<qlf9eo^dA|EY6%hLYPB}Zrkv`7n<9mwFA6U~h#;bk#XefUaYVBCjW z8>}1F0$B+to85_Wy1SiJP5<O-+3;Y0rZQ<m65xEl3D%Z=2R2R9hUioDnLwp&`Y!z- zT7G~HF*3t<Eiwo3Y*r(ypY=YF{G9!Zy~O$6x$oG}chkLP-Zg*qvTk_b@%%NqyreKG zNhp!QCj|Ij`)$&mbjIlQ1LKY$<Dfuh1<rdFn0GtbLw>>iiz36A)*ou^q;_7rtla?4 z|E{Id)9e0I!v%o&M6aUP(i=i0_@{!_>08mxZ}f-ybNKKyaN^l9KBcIC{-zqOOFPgm zv?tw7@6t+emfehL#ttZ#f@Uei{5bUKh*^U-hWGfIUxR<13N$?+Zi|qW0sR~WFSyY9 z$|7K``cTDN<w1E@{)Q~BY}W@L9Jl*|v-UVAF$yo7^lqeE#XSxVZmYVfIjS7o#5`{$ zJRSzRO?a?gev#ZDt+XzPi{yGvy^Y>eAE{r|lVd*X(7dc9)0ku}*#h<%a`Yb5qiZxb z;*56;3)-MFQ1^FpF5du+m`X_K`}f2YaMo>+0{PbxO8z)>*4uV3dpR=gvOU-t2dte1 zPnQe6yp-Dk3Ve<GwR;hHw-ULQ0m@)+pb5hLk0bzQG$XArL!C$>6xjgsKD5C&GMUUE zbIHO$S#KcQ5Gx1BF>)$cb-E7!caJ>yk9JY2Yb~`wh^}>Tu$Q!3+9R+x)s<cqdTN;d zp*{<<`2}KbzkUJ^>N3V84HRHLTAb=sVlJ!G`m`5aO^?w#G#&F-ARSf~TvZi1ye?}9 z#`<G7E1o67XZ2+R*x)};TTN!u*(@;H0x0x9PG0@-OjXiT^ru;ID6_G~=WttVd7>C3 zMv67!D{yNCt3K3MAH>3DWbH#MlPm)t9Vds#*>XMD_I>+9d%E4-83WyN)_KE~?kp(r zEAAa=m~yJQ>Ij@UtFi*0>p_pb>rL`zdh>&){_iHO_YDpY?F#vtR1ZD@tT8e^mb@1@ znpI?7@TARdjQVM)v>%{?9zv_-(+X=;dq;a;d-VjPAOE*_6ERo}MeE1FJxmtUgU^*% zAQnR-(3d;@N3By<L)lce1b6$NxpP%Ml~Fc>lTNVT30ONneB30U>H>J^3r<?sbz1>Z zzjX7WH~Umd&;JaA^6<(75#JZR2VQ7GcxXU?lX=0ggUCseQyT-Xl|iqof2^O=X9B|` zF-P23YFsoL1#7+Un#0WH<~nmLG}(7%GVY&eDb6)sjo0Q8aH>_Hc$Zj}WD_{hlJ-IS zg1yMu>~wWkfZKJ|P_0vS5W&8#2@lRP<{=*w|ML>MK(#LdZlu#qAVo8Mg1%FK6WVGo zGR$IA*>_AC{fxQBGoz0Ag;|-m=12K0-cgKz0$eXHiU*>K^_jKRx^JbFmaHX5!UgY_ zVYX&hvWFqJcG|z&nVmSe+<ne@rwnqwyF1?9;GT9ftKMpg+M!OUa4)x4*K6;6fed>V ztn-Hlx;rDO0A`;Ev^!3SRuv9ovbIV)t3A~WeHz+%Ru9oRv?L;R5h8RS6l~HOVRvJc zvCKGTj5cpW1H1){kLG>(IsS;3h5LyXABtt-JX}{{@Ni#ilC>0i`xYF16WLX6mag5_ zzH3(rJb8LId+=;S8?a4BH{MNjd%B0*$L;}@-plW`M0`&4_Isfn;lUa-gQxz5qz0>X zf<IiP?bfox6C8vp<Fp%{K@ZZ?G&wVobpzO1_9H85gqxYoYGxmEzj?_F=Ym(_9ifK~ zLJvLX#o-9@SjB)<Qnpi@;qg28=Yfue2RgYTTwn^Vh4uy9M?3v9_^WWtT2(0G&*&qX z6?b_bIed|YjHqBg|AtW>e#7Old=?j0J1C70tclh$<fnhiv4!2<-U7Yhe`3=;yMj{> zDq*BE9*SuVax@zpbA7j&`%$p3Ujzyy+8Y55yBlb*@X(cz|D0JB5(kFbg}i%8-qbn+ zzh-LNfnImC2)($@f!&++tKj28K&YiqrzxPIE%?0|!A{5l_LO->BRKwkn7vPp&BoVo zOE18sw%OO5W$rL<m?`1)>VbdS^KJY%zYPDJ9^Sv8C?T4N?qa^!2uG6HDqt12YC}nO zMD`A|)?1gXe3FBcy1_~9gXX>gb(Pgt=ykl^*B)+vY#%_jWQU{L2t>N&6h=R<yC1^^ zFF?i|2-af5gU{Dth{xfiw&p+8*;yZext*u4hpWAzKhq=N_)J<Q*u#CFPNIwHM(B<2 zgJ;`wvJ$Kud_sHHi;ZR<vE@*~C)s881e}%EC=0jnzw*59_n6C6W_mNyEMS^uMYECF z2_v-F+yqDYoq5Mh!Tp``@nF8Iynsj)Z(1YZDYsf&c9-wT7jld95tP##%JpjaeG9!2 zoDs>P=ZCX-Ku@uE%pv9|bA~xLK$?eUPF{+0u5i`bJdP*wk#JQ1JUhRO?|bEwa{f4z zF&Sw32{?D7xF;S%-&3nH^llUDZL0%R(Fd0QEYmspm7UYQ;igtO)M52N{qF0zh&O_B zwoA!cl3ve-*#1(#r#}TQ-bD-Z1*-(hSUICQ{OU2||D*0bz<WH~{_$@jh%7-68pKWs z?!8Csl@hggh*az#W{ns{tp-7i5<9hN)F>5uYf2CVQL~C_ORcnipX>T25v5Q2Jn!@V z-{aroc={aDNWS-VpXX<s*Lj^+bxD-AN@e6B(At@D0(hoBJwsH8>S9yuCiWA@%5&vf zh>iqg`a|_s)mQV={Ivir@QwZzLwjBKeU11dv;|tCwoBWmUDU2>1E3g2>GAqPeHooi zlF#%ucbogoV^A`8z+wd~Ppc0U&2THung^A>&Dv!-m_lSkj>DZT0o7ZH?aW31AtnLy z=deVnHRM`weYwHhJnnO7wEbK|z6E~;4*fnnx+^qJZE(S8@bW@o8IW!Z98{WcTX-Pk z7i-b8M(xC|z`QBqCUF})XNq`4JPr4IRlF_!B0d$prP5NMR8_L2`ckOWP5KB-vPs%5 zeIuny*Q8&7JGEp{)_{@?@rK*TU4RjTpowS53xP#z;LZ-=-CjpD6;SFa9hLFWeT$K8 z>y$0Z9&r9K<tL>O6kr8lRY$cO-t7Q-;^q@|7T)g_^%k(Tfaa|cB@m)D&{|_%hiap> z&$M~kesIMNWaJ-OF)(U<y{X;`p6?@l5j-WC74lU7U3W7)jbg@oMn!}47KIxF=?Szr zW1ex!NHcyke1Xv9jEZK~14=~#rN@|`m|sD=T{rVv9#$EvIry)qwaVIHCBr`+w_I#@ zyPRFmZfke5qu^nN+w<(t?JahO{k?MzK}aEon=6^ES(ITInK7X=S~1<3!OU>5(PAcv z+0N{PigRHLv4z><@GvUdkZsK_W|y;T+09UGC)kVZ9rg*Ek1N52aKpG&+$pXsAIx{) z2g8ZP@$>nw`Gb509I-E$-XF>=OqeY!7f#@<z5r(Xi0_LvMM2cXI*8uU;xypF3GtFx zLE@wcX|Oa+T8WrHC7q$~@U~P$E+LnftILe6%XQ>Nc#Fg3(eea&sys{n3TSyyK0_-w zuka4N6;3hXi^-mE2PFzD^BI&e$<(7ts&ZbrNqYl}sH9Vg^wWF@Z#o_rG6R}!k(#0& zRZpuK@aOroLYl8u5?NDEBi(2twXxbK+H`G>wnIzN4r^)JZ`w<EHg~u-K{xa|dYC>) zAEuAiC+gGm&H4^x&q><X@mzNp1&v_5UCn4@^ac_SF-92^j3nCGbkMksxBRp5%y?x~ zGK1k-LrijdvLCqkV>8iAGB+XvubMaDULS#*1FT9`HTc&KR#z*M_Sq)Dy{^W)KW|;O zu3LAlpJ<;>1^Cww5d)o}Jo?ZbjMes0IO?<ZCHp$OSs^m6f!53e7z@bXm<fX#8O2Ow zrZNf4E~t`2w9nuL)VvRryU6Nn9kwwW%?@QJva8v3Pyjo?fVZLFU$6mOd9Er~lM}%m z;an6qluJOiui(~lTex)YDt8~uSd1^l2l7?<W_&BYJ5NsEe#Xz^KS!h-hjMs9Yo%U7 zF(5*S&<whLi10C3{!{QtGW7Xz;lA**@KpE%xKK@GL`7@>Hti=47DtNXz#|*MAXmj3 z;t%2@ph8)x5@M;9)L!ZeMCb=MoB+h%D5Xm0pcB5Aevo|V1e|JeC^)w*P$3f0G+R!P zSJN|wXXQ)41b4+p2~aGhuF_Zu0}GD=I!uL%-j&^%byj%>cUVC6Qzg|o<EA-$_9(<t zoVronrd|X(JXc>qd--Z*>E3luZLl_3o1x9smT2o~uhtX9P;vb|y^_x98dP^AboUT_ zq&^n<a-p84Uxs&^2(>aDm~hCrj%ay6d$wH7LbMmTtXUaR!vh~`n~luoW*f6J)Lb9h zD;H}{hEksk53&L-WD9iZUh}Yd%1onuUe0*>11REU6|+iP<*i_gu>{1HVTD-rtVUL- z6$Wf+XLYi|tsdDYP-6b^NrR)-Nh=ll*V!Xk*$$>><+eC6D7+A@IaH-R!f|v4m$R24 zKU*Pt#;_oKAj}Zv3q{3J;&5q{6e~@X=E~>caVtQ7*D+celZ{zMX<%bLGX=`+x!Kot zL>HpxmYef^_%*_}(9Dg*=HhkvrCdd6r)*O$DNmG|YJF%X3tlHpf2rRxelrT<XGCCy z##$BN%V=+4Y$4irMdoU?WacnrO7A(gC)a^b2RD`fn+n&T&n&#&W4~hjYBT|Mr<>KR zWmvJzR#|%^tq&KXo~Z=ZBd?3@#unvNt}&OwJ>deOzxwm*`Lld|<i|v;&3VC9ECcjh z3eEIVtSZ%#Izipck#@@il;O&+N|utSw$Ks~Ws~$(P{0zcv__fb@pju<E$ukx+@!=p zw7yi7`MXZX-vvcnA+8lW>D{0$-*xh(lNA9J%CvG$Mbfz$n+s8WxfX~~0VvTJ{NIir z#E;--A^+F&oB3pZ2fv$70TLYLPr}uw0S^d!+~j8nM}*UGX+H^J$o6<>W>IP@MN6gN z3<t}TWzyGwNq&e-EvnecU}c<g0Z-ikEKPb&3u_XPd$2Z5`vUsrmgb8bn*>xYZG=G$ z`<RN^$((1dF*lg^kqeK_XJ(e^u-<iQE+;b%Sof`Q_CkA|ea$(8ETs@VuS8BS)L|xo zJvT7d;F5}9CF`=o;5?JK<@_1`7oj6me>&b%GkK%@Os)=&8iUBFsP)mtYl}4xql(c6 zkyz5)V_q~%TB_9m>-fxSO@2qJQ!kF=KLjRD0unw#KFpH-tWLAQeyx>ph$(V%?xFS6 z^0I5gd1jEaU761K5}1L&_a6{pZfs?C30p<jAlwx00$U&DnGk7-9ihs<m)fZxseKU7 z&9%<jDebb>4%&s(Y$Kpjh8kmyCq_Qg-7I3RH+NBGI0c$;5s)Cm`q6r1J-3Qx_j(kf zp1cH8fvL&}j1OA|IbMsM!X|(rc5sK`A=5b0AKH!Y4S%<T-@_l~6@koVXeIQ8J{XS} zzaR!n1En3(ElHzVeF>gA4H#V*9;uoVqBK!PBFD-=?XsGt1=IcM)_S<!6RbQ!pRCW+ z7a%^@>04>#Sv2+;WcCr^%vYA1O>TotCeoZKo;#^%7?a4XVRAZqW5Ie;plRdS{p>L| zi*;~roICe}_)sJrYXqC7NNMs#xhOtQu)-t%Mk%q`HJ8JPxwHBWxX-diC8LJXz!;9z zn?!qN78)y!J;nj!I6a?S(DJtYD8mzW?{7`cGogu`&;0|R)zc>Reez*F=srXxWtF-U zN|emtTc~|W^+`GKNN;_O?rN}xMBmmOaE8OI3vDsl9B<w>-K;`ZW2>2!&n^Y8&mvp9 z!huhI>vZyWwj<EP(aweRdDNg?C`*_Xh#=yEgIF0le;K=*-N$-x?{R@#Pi{CjnmfXs z<j!)Jxa-_q?kDay?sv|O_vEYd9RC5hpG;?+z$fq<@t&PoeivTg5xmbcI0A=IR%jy( z6y^zw5R(POl45`uDfSiz!b6S~_rVc4d-mNVcWC}LQh(^huchz6>31YnmShvrK_(ft zhen(ab$A9|%}sGva=Pc6E4^taU>cO5EBth@Is$pPR^6mtQ*Wz3s?{_d?r13-(GBgc z_FVG-HwVK{hv@?lLmTvC`nBBtCx>ApYx{$rzrh=94Bj1M#+xUB@9nM8)-1TA)5t_0 zySN=-TTo(T!u~dR?%UaY3wVEY|G6B)f@L-^2N)S>JA_>im7NTAwVO?053)zulWZ!R z#-_6wY$kg%`&{W`_8D88`-Z!LHO_)Ruf!{SC?C$p@U!_1^c>@D{w2={f}p&!IvOvm zr9S;0GQPN29X@@ExDMXxq<94}{YvzO|L!Ucm1an5rJZ#4TpHAPhE!Ot499H9;qp*< z3|9E0>`*Er`_?Kiln&}HwKSCSC9Q-$RX>b1YGT|6;{}@x7&Z#NWvV&LOfZ+4tLa|f z*VI{(?vJbHEnsi~M1OgptqFD8%^GX1u=XPM&(Z0!zP6w3k97>RD<S&-{`7qUJkKsf z?+x1#;^A;}A%3Sk6T)<5#xS2lYvlAxW->Q(Yu6sg^$RS|HKKb89l7pYFD@GXW(@ZU zH=UcqE##KbeTHLPDtD9nk#kT*s{yqJ@lz4ef5l>N#<!c`4xLM!QC*=A6z(i&+QMQl zaW>rTWida{q&|3jkyJ@;1#WvPrzng%QXQvmR(Gg-p(!)f-&8WMqL&tfj6bMVfY<Oh z`WZhNwaiiGG_wWt*=(S2M>~d|t*7&r!aQhSSuv&y^C`0q%Kk2Mj`iW{;n|XDughh` z(G$*<PT>vaRlWh=64BHTer_uK+)926Vv1DwZt+jx+A9iU;L>Y}pNLOHKWP9obs<E= zIJttND@&B!RA>3B)zt=ScVLsR)>d1jz0hjwEA&5f0U2|~sA7I(PB)7~VNQo$JZyEh zr`YF6^%&aF!(rfkeTh#Q!gc}n&S$r>rx5r4cprn`I-~!tTOsaqkGRL&Gh~K?cb-`H z<^6bnJ^=6QpPU#U#~<U12(^$sA%Z6ms2ZHcIPo)ap127ZbV@vrEEyxsm6k|r;3}R= z-f$C@kQeoVJK^$s$};7ga$UIx4dw}-*+!j5PoD*8p97uuXvehjdUbu4{xzM>en*co z1{u?g<<KN&jVn<0Wy}g@O**0cnOO`fq>@EC)D}ZiKeqDQh2ibU#PLDUZ}aWNc*DEw zV|F@p^>5I>9&~O;e#Vcf$Z$+;xVo-Pe`Yi@oms@JWp*-0nG4Kq<_Y+}7+9E`ifztz zp>^_U>_YYnpw1EYJbMfHl8-A2SI2NR*Np4T_2oY1rg96g_WygU{`NWj_l25*3Eb)^ z^cF@4Q{V>vyk~P+cpwxMMKKgCF-}~G97-2Gq_WZnK(FD_G-;`H1kw3eDn_TgHIh5a zG4c#~xqJh>@Inq!$Sn6UaCM|Bu8>+<{ZQ?qrl^P13#zA9TC1<M(AH@uv{WraE3H@2 z2SfKx#d|An)CP-xNc$H;&5q_IbGBI+2vvp51c>#ZdOGil^cFuxt}KLJ-6oT+J2H=Y zhejqH9n_9$C$%wfd&$NQW4Do#J>59fNHfxNXB;mx@8)V$N1TV_K7Rf>ZYvjoD2))l z6pjf`1Q+1=`&fr?F$P$^7z*wn*5bZcSgI&BkUB`Cp&3`vo)-oj*-q{&$I9{Yc6zpq z%yV@pd3iGLso~eNwHy7#31X+(dDl+UdS$bctn5(8+^e?mB8#;|ZKak3_ZtOWHU`S< zFkJ3M{d;|+vBX$mtOtsnG_Sy){z&E;Bzn+u?<V&tx0u_`6#+U`;%o5xz;73Tt<U+D z!Y*1@dL<MQ-xHgPUBn2nFFjYV1DQHPeyq(g@0iin3u`U)A|6z)*Jqjo;nSoAa(+Br z2W71Cu{swnE$=&dJ#|KeGp|o~_KxfQj2N(ehEc?HvYKKV$kWAUqPfycGM`$_ZAXd+ z?OiFuSd0g^iYtxJ%=2yn3q{+Jo}-*9Y!r41cLXoIsfJQJsk<~xx-0pCS!>C4z^jwx z1o;c-+e`Gs@^y8jRuN8XpE1yOq<YXZH1ohPSMcurg|0#`VZV4)+^dj@kHfVkTK(L) z*pH0IMr$*#n?Gk=qEkLUB0JHU9(3;H`)^F*T*Q3JHsvOAhq#BFOz)EE19qFjf5z{H zD*uVECq#?4p%3;-rW_$J#`@JzB9xKJ9wkG`uU34c|04ztIG^UJRn;4t?W{i33wSt^ zfKQXzP3#Hwd)5u!b^}M|pw5B|yz~Y`P86mKbLiZ@b;4GxR|@rl=jbGYd&19fE3cpr zy>lm1@uDVn7pIGR5cem<GvY<K#fRXhEHNMLr1h8TNMUe~q?@*{G*bFpS}CoQwnE*c z03*&xH>7*Cua@+U*OUcXGj2eqQni!2$UWrVax~t}D0#d*MV^Nz|7W`dZ)R6Tg&@uc zZ{^H>=+SG+E#;X~Mg1(dAK#(*=2r1zv=Q2;h|UYzdi|#E16AL^Xax^JoWn)D@1Niv zea!a}la0+*W>>K5ICH+a)!b<wMK0Yl|1cS=j`ab2|4eJ6wZpoCj39GfE87k151^eo z+8@~;+n?C0?L+i5k|((e#8H|N5g9Se6lOkD(*@>drZC%-?aq#*PAHyDU>CEA>`FE% zk7g~v?T4PY1oR`jVYPS>s6Gbqnh6#3f-eg_Y6<OyRlxCmQ21p;GAX~C(hF-6t4xA+ zH~{tVN-3%aAe!D+S=FX{?gQ1K>QAblR!*y|MPMc7Y0H73d$mKFtM03dx=ClFjfcP6 zr=NmGzXz4BV1+sv5yoI+gt6J!Zk&b|EkLVgWz4E{E?PIN(`@r|a|P7sQM0_&$C_`Q zv^=0GyFo(^!g^eH?gRRI(z7w%;MLbtY(Jr0#)p~jpd+6#McD>yCpHo+dY-M$soW^! z{&sE;*5V>}jjPJnrIpWh{Aqe}svzxKu!Sb{gm_P(AL4zT@En-XQ2an#FMfsSEhtTr z=0IQEm8wE<N6Ta7neyj|xv%9D@-?}nQWmKEA^gk;#Ly{4QX|#p@GqveN;{)5dJDa; zJ`&pS2-YK0?_~5gzA!GqW&UPVGPi?Ivdk!JE*xcbdy+lFUTbf$PXHCJJ9|R|J!x-j zDW(Y%LErx}W*c)1Z+`&$C3^sB><8AJD+vsp$i;DUxg}5l<X)I8t^wbgpTjTXSM!_j zwhKYywt%1O3dTMl_=B4w#X(@EUC7D;()$t*W{QP|S}z@v&ca_@m#WE8@@aVto@fT5 zpt!23L)01Se5j|Z>RmNZGqeU;d-$^>+IhH)4)lhz8+ty&oA#Xd1S5YA4%uZqHL5~G zwTCCWZ$2@D{-U<I#9D1_p#GXn799n@d)UsPv++D>Pq~Asgty%o8mb>Nj+x7R!R*1? zz6Sl|$(DzDYD-TUu0z}(VDGRYTx+byG;S&P6%-OVNp}wZ*MldMx~6AO|4E`1ucv%@ zK^K}q|Bs;O<(2^7z6GuY0L2=M?ZpA&4ETXn;x_S+cuu?p6w5Cam#V-Ugi0->cG*?! z80ll_Qz)EmSiLu=73IAl!+E1Zs2m1ALC#lvEPn><N|uj<U+&7DN^vm#I^`(VnpZzo z@2F$~#c=RnTm7j%-;m+XY^$Nw%<5wGfCgP*?Xs>}zgSsTKD&@zjGnV@X1ApKN}jY| zko4f^II60w#D2{lXJfbt+#j4bJklDthnYb2reX&$v<01Z6q=-|+yN+AP+6mVrFf}5 z!5l}_^J;`PNXya+AipiWr#@TXqVLrYBANw5g-Z6v=lZ~EV;!)rTdnQE&O8nCBv((t z=afgDHex<x`oiz*qWv-(;h+Ctk3f&*=ih^dsK>WQE?$K*a}_E;=XZo3J}X=jo(dwE zgv?}kAbu+4my603v6d0?7NEL2*lr^9%>rdP5c?11rus}Rr!|J>C1<Z6X!&(s579g7 z<DeC`;gdeo%NVtcy1?l<#%1HW@xthAjx?8<X~@6ARz<4`R`nBW0qqlcX%)s=Hn9f+ zb=KP{(DN^CN4O_F=UR^8nYPRTW(KntzV#)rrZFOKG$QX0)`JV+G_DIbg<Hd&;I1GG z$I`QSnaIB)LOEeEkaoMUU*N@h&_>(E-6E-4^?@GzOj;&=3GRC$`GD~z$P4AevI%uJ znVuJWtn^o7)!FK5HB~JH7HY0t(<1Z<I+@#aMgLVV1`XT`PnHPPnr{3~EAgt?6Kd$9 znQ7{XmVwrIWY-SsxOE5d;tQ@3Z5tlNlg{L6jdwE_e&iQs1+wQF`zxGxL%8nVh?V)= zPGn99JZOJ@JRi@0!SCb`@Za;E0=cuHS@s<Lqj*~ng=(UXcQsg?Db7K*WQfJ2YCx3{ z(rKUxPaW9=d9A!pz9$cY&fBIOSB9xmRZ=s1sd{VWwWit-ZMybc^VMyr`)&FweW~%4 zalv?K<cGRj4aMEr>T8XLOT7oi{K)QSKXA_ZjrF9xAr8iaDGp!VH_zPiYfKR~kX6`T zV94$46}+VyP&%Z;k8r^=t~TEbiYEyg?h&4;6f`_Jee4dW*%25yRa{Q*=V&fPNDGkP zJEZTV+R!0mpbGcM&*kFu{CK)jSgoweYGbvd+7C~3R1JY!8KK2%8xf1OpjbPC6Ui-7 zU+SmnsV)+WwT&L&!jr}gqaM`3Wz)?nVX;;_YY0?f5j)t9wkN_-Znkfb34{(uoHL(F zFm;$V%n&ApIS1_XV5_oq+4gK7b~3vF*`2|bN8H`x^6|y__xU#b0KOzt?o#-YCxW+V z;O)#3SJM-|C8Q8(K6KX}>09V6Zy;0$c_3WTe)+as8C=!{N^*{}TJcfI9!m@0z#R2w zXvpH)`&vtFp>{`8^k(o4$@&T1!zgcbGlm;$pvP|;`ApHAW-c{vL+RA8Y^#M8VGXmE zS>ARfpwnjifPK~e#daim(s=+3eV$lm9rEdSysKJxo^I?A=$JZCD--#-{5igYAcK<^ z2tNsKcq>=MUqwGKRuf?FDCov?s6`358Y|DHPBIw&C<d&xTS-+4z(<Cv;p$9vIdbPF ze1A=?p*8^S=LhYnCIBJo<0<0xC5X1YcsF<S{D!|##i(uw#vo&u5o;_kzJ!AR&3I|J zL8YXcztB2BUE8tQllG3eF@=~QFq1zkuv1uttIv%E=M><J(P;*yk@d}maN$1m1S@uh z%UC9slX^)*p(TEo{AE%86?!zs-OYwi`wCg{g!Va<S1q-J+Fu=vm0t_b=B5Q}3p8E- zK<}nc(^u-d^|N{)ttylG9BYlU#uoD%^H(tJ1S<|$oQf5n5By4X?k%Nw(z#Wn7tmr_ zGJ}yH%b8^6I22PM_C2-{+kyRrozMQrzGBIJqSt}W4m`yuekRy5nSTi1R8wdTkF#4y z6Uu=bKNFLo?jM2=gCrYTeuxwg{dh#WDpiqdBR2{vwlYgus$5WhP+U}h)ueO0KT$K( z>F`Ed;pYnKHTACgWw2WzgEtx)3ym$tDfqdjP|Yi#j4qlF%%WB`Yos;Hx@kSL{E-!* zcDNmD$J@#FQTr}EEA2`9Gy@n0?x_bdKY`gnt7=({9~%T^?9G+uI&cx(5PCnECtrqV z`HsM{#k4kCUJ#-B`hfYD36~LJ9mM`(lDJ6>k}SBB>Cy`6y!2QK0Pm0+g_hF&q87@> z%3SdDHHGxqw^RG#4Xsfxt6hO#aq!f&^m_V7`Wk%?o=i73LF?r+i$eo-HxHSGtf9yS za+k>ytA^dkUS;ou|MR5Y+5t`5lIaP3zX4B>$+)s5fLx*MBq&)It~ghZ8_k{Lukk<g zPoyepbu~imtu9oTst43ps;<p~65pjg(Ky}l$dmR7a$Hj`4A0(`8x9Q|3q>@An+}!u zJJ$*CH4Avx1ezzF-eF^i1I0?xENMM_()&tlbrAIX5im;&<9pK;US&4)#yz^1RLvd< zWJ<Enkcuw;@p2^L-(#V{XENj2)j-)j>;)k012&6wg)%L}kqPNh+z4(eofBCBy7Xgy zDjx?0vVq?NKXQiZaCgBQdEQ9a1cjO+oP@u8BD57diBb4uW8ox^iHsym1CTq0+(d2; z1yxWfqHNR>^(=juamKi26gB6Wr_3^zN!ji<tAyPN?qM@BfcOS4+J9D<sl`Mx#n~7{ z#&G6`!sx1Lk@c3^^$V75DaKDge6!YSc_;43oFfFr~&@Y|n4DIb(>f};x{zROVU zQ4FYG2fBC?bpCIei!SL6^)dRV`ZxNw`U9h&*#by-5UO{gwaEG!>o?S1h&O&I=iFDI z7v-%;W)ky?Vc6P0z6tD3_A(Ug1GXU4L^aOhLb<`flu6t+?h|~v8bTyATP^6K5PDv1 z1D)DH=HNZ1lTU-Bn(!*yq?1y2xt}~(j*}P3tD%^_m0f@{yObmFC-;Cb4%HK$uA@3e z4c25hl@8FF(b~sAm}6RNIxAtSK9}y(9n+udV~wdsoUy^!0hfE)xNiiQi|KCdaq}D$ z#*c_<9s21$J?UQ>>Vkn1{n*)K%XrbV2L%~#rW!nK2-B45#VlY-(K7{2*w$<~I|k~B zrDu1$LURm3q%MJCZw6J^6>&P5pUr>He~k$7g*yKN@o`ePAbgLv<0+craB(se`WkVo zxJOJE-4G!Sp=5hXgP^Js=xvd0<<9a*`4g<fM)|TlGuz+4Qase+YM`ovu`fewKTr#5 zMYS@TqV<5E-JpG`ozl{^8`>XQ4S3mFhGv8q9gIjL8d$p>3M&q}YPz)(dW!4={<EEs z*OMiPM)#uozy%qVdCWeieLDtMn<I1nvv?O_i1>|oPh{Z1hRB=cBg#poo!XV&f{>tk zYW~`X;NTtf9<1NtyX)w!^<K~zp8$2%>pvqSe2tReuolMn+*+oJH`KtUwVyEO?@mSh zSKwsM<k~^C_6NF5;1aO*Y1}RDIbTfZA&e1D3w6bwaEhzMYvN7uJs^D(sRUHqA^E&~ zLb-`ZDxgNI>);A6s|7SqjW<RapBj4%Qt$ZIJZ}<rM><qoff@A9;czEj6lWU3olIcX zFk6{hOeOX!_B7(&21ak<c0qB5@iF{Z{!8fRg3x1$;G8?OzU(cQ5rajJdh;n1sY9iX zQa5QB-uDb?v9z2{{Cz69)2{U#x1~Z8jKinAsW#S{X`QqQ!0EZrFb}miCx!>>-|6Z4 zU}L1=i1wn|ScckveHTv7+z&F{hIq|iSqJBhw|0g5o;%H-<u3xAZ}C3@p`Y@<14jx8 zg@xk6dqSX4NeB{xg+K2CW(v1}zJ<hIVv2kOy7)(h+>hE@9iZ0NLba}1l(tse4ji_O z25{7ap|Qr{O<pj9P1_u1PBpJVj|5pVymWnQI99nN-H~SPN%j(Zo4uFxjK_LWe)M4~ z1Nl^V=Q(g;`<R=|L*^Ot0Xu`@;6Ao8NA6~+4J6#c_2C!tWM1A7VI;-k!@>{3GvN=R zB-Wl(@jPj#C%H|b6*8?~_I#K%(gv{qDX7U;Qen9`?e-+++%tfZLFzc@{LShQYE7*- zSn7qAr0>wvbj|Ey_A(RAEkMbx)<@P}+AmQF?j+P63Iy4NCjiUDdC@ujg_$yp4KLXe z3V#eRWC^_yU1T-rmLl95sN5aGKH;GluJly~Lcg9+UMOwUlj?WsRrQv7PkjoWET>h{ zSWPinLN$G7ls7Fi#++;}0hYN~1+u3qE`-B4ZT$crNY01UwO87^om`jbMSJ2~FyooY z%nIg9=4Zx*HNntv>|7SSCJe%g#S8v#+>vxy%oM|<9@0Q55qR{iR1j-3K)xkMEAC+M zwdz**pR?*EI@xBEwpSB@yi1`(8yg=QU%(xVHYb^%n}*fY+GKqThfTT)6@02;(4bzl zSHguUz<j_&z{Bli4&tpAVn1isve(&P*t+2ViQHChFT5xNh8xGP<+t<xLS><|uv}Op zyoA#+#N*;cWH)gI4W-u72`NMRmEH(lUgl(59tCAR5z*NOY_S=bvsb&QWoplWJCSsv z&P?#c2B?KY&~CSl3g&dPBNTscde7<#D+!<YHk6JCTx?@^wjC*6^lqwrj3-0pT(@M% z1c!mlQ06M$W;vE&N5ac|&3@1R1RWa6wSVU>S4TbyF?xf)%ex9ig(^aIVGhLz1&pv= zH0kNd@1-7cFPU_Lj8GOrhjxSdOjEC`wKPK;q^+S9j4IHbeW0AL!eja&7Mhw95RF^S zedYzzVdb~FTFbHOH=uhey@B9g*k6&_RH}3ROEFcLVZet(_9}Y|k*GuKOv0xv!B^xz zgol~M?*pQD6uJvng&P9d7uf@Ud=d`%d$F`sUQ(paQnWNu8i!1pg)AbsQGW-NeNV0~ ze+H!eK<NrEb51D%Y_QZQHC?@;{;s-ex<=5ft#(N31I2MjzoNG{5@<hSd9xGZdYkzY zZpE~kTfMBo)&jf@eArCq`ZuMWqes}2>|JP$LR>NEv<h4kt}QfT89tc*gr813L5~UN zg+gL|=q)dLCvSC?ReJ&PC#&n#z3MTzs`F~5ngwS_?zZU!_Ur={F;3g5rDzwlEUmC! z3fNjjXY^3LrQS!620tb1U&A$i2i5OuR5e14u0}69p(55;Y^*T823uXSf^3f7c-9a~ zqK7@u9%E0l6QG^80@Y617wy}m>+6vhz01J?ZBd$bG}UIBF&&vGW&kpD8a>Iln%T@) zY+26X@TQ!%oxjNoh?K{IpD4f&$B6OpF_olx$k3aT8zOzBEYK-c@k%nZ!ehlxJ)%~E zZ=9f|YS$=dc<IFu^~a&^U32d%Ie~TeHNT{{o}M;8K-}E6LJ{vh$t_>L-n2ic91{cF zeGF%kk1Y>x(unQBo@H;cPuLP11MM?{8;8{=415kT{wwFtSLa3E;Oo%YEd$_L*6}I) zQT|*02mTS*rJx$3E>g)Yc=@c#RxQgB=uP*#QrI)BL+By(hXPs-KXzC0l}p39h)O?Y znDRjRMN#Oq@g?-u%)|OcC<YJXJ)^$S+UReLF_zG2@Ex6<tJY-a{5!^*p82oF^r7eG zmjU_ivkhsrc_5<Y@8(mJD(Z1*iM(FUl6{l`$~a}dwn~5V4$>&2FXA8uEH}z{-D?|< zm|kpDHy6Q&6tXG+p*td;hgqM%<*s<EyY;3;?v9H9I+9NNLv|*KlMruuM&s?f@J2G1 z7&2F)C7aB);{uScWLJC`KPI<xq%5#<K<-|5M<8Wi<Z6sGT>2b1nTeRWE0t1Ytn4R> zsfMdFz;fHbaA&j-vjcqWC{wjUtZ-|iwaq$5@-NJr_J1gh34iCumSQEg3|9%-Zv?*- zj%XuX>0$m9T*yQI2|RZtp_<T5h!VyMD~0V~x1&&Gr1SN;;1G+5mBo6}MCrN|BKHPL zPnYM(+vRWM7ts2}mC{NTg;5Npfg&MJLe)0vT=k*qt5wugt-jV=D`l{TN>yz)toagS zqj3bv;;G?c7BQPy0kr?ao8ns(R0Ej=O-`I%K?J{K0$CosR}cEV6&uYCW2drr;Ou&c zeZ*Jd7%2(yR$kWSF7O}2p}fl~HI#13D&<RMhq6zp2@U%xoj|fvJ*twf%Wc|WFp4)& zLe?AU?ez%#Gd*5kre8Il7=fl@_BLmlOUa(D>28%mq)S#^Ymk*-ZMJp+o84`HyP91G zT6?U$*mgvF(|%z;rX~=14iwu;at|$g5!n2YEluyb?#cDSJ0#k0yz;5y>>O^PwF7pI z(qc6?;M77WXv-LF_?yklNNcgR+B#!-*nYIeUWeX&yV5@5yq_i3o6c_-L~l>?VQqFZ zyN$g8_f~`p<V55&aoq8_y)s!`BfR0uyd}g4al&5VH=(My7OJ4E+*KK&%uzNd_Z45Y zrmCoO)RpQk=z_bz`tI5Y`1^F=sRz{R`}lO>#$%&^834{22+m3{*FtTl!D+rQ%UeyX zPF8>9$5cA&(V4eZnIQfHz9nLNG@r!p;D3YP_J`lzC!7&33fGab#l#>WqAGS44~q{G zSE15}(A8veI=Qd*BY7O1X?8|_fcWxMS}PHV`B};$Wv_A!nDSJ4Ppzy<YF)LZI#!*n zE>pKacb(P-=(lul<nKW^^h-u2yyFYQ6A?!G<%8jmyP7@CiQwE_W;#B*uhq&rYgM$H z+U=>{@}?R*KU<MC*t&EkGU<UH$F5-yz154yLBARtncKe>UOAP!klhVKCTVngtEc63 zZdX_<u>*A4BylF4FS!HUoF<l$DoMd`6U(Hv(pS>g(ht&4QhPANMmd>wyN*+qE7jGi z+EFc7SM>Zw8}pgzWm#5ZtBuvo>TAVV`QZx7*fqgiGojPGY2S52W<O9<VjHlj+$F(V z{7TF(Es@saH#~sestC2US-DHsvN|%h38Hc?byh#Y4Rp|Az^D23p?aMDIXLty{iuFH zzpDSF|E{}(N6UaoKLB=5177YhZW-jH!B^%(^D$P{0cD$WvLFaNAwd(=2adMJXYFkb zu!dM;txus3zJQ<IZ#{wTb+HTD-fvCt4MmQ10;7@r*irBp3y=qn6mQxGQIIvbx!l*> zVeT%c^E3IPLX@}+e%xOgC9RhC$g<LmR?K)H<O+3znxcNMme8u<xh7-%LaYedU+s+5 zeaum)!MjW^DAy`{4Zb<w20G+h;j&OvtOi9rRh%y#5KoD}iGR>LmpMt7YQy(O!u5}o z=7IB)q%Wm?bPC-~yt{{RByKXfU9zeiESqu+H0@{dLV2mYN&Z?+kx$6y<R4`(Wxa9$ zIx7Pi_=}QHt$-Y?qc%c34^=;g-kFYf@ly2yLQK}a&^Buo^e{S`eIz2gtLeye;(Al2 z3;1yg(|~KkMN&3@fSeEJdA=jK`v_%j(t9#ccwc12=3-lMm^fBU5XVX{6gSmJJ)r)m zK37-K`)qIMKW2BhmNyz2k#Di%ncTjlCT43o1Amkmi)>m2EO2?NcfNn_i4n&mrxu#b zoMAkG;~e)Pw*v1jg{vvpLRT>oezZS5D>_CTPfv=@!iq1#`&=ciqo@CNiu=ScaQQL$ zTj=YbWLL#sDG!uapj6|OB;~wvS#hYvRdVy&Zm7gd>I*eR|AX`qIeaLmlx2b$iJ8gR z+$k=QzamJoCAY%g9;-}M)+*bO0de4}SK4}gA9U>>x(PQl%}9hgBrZcR+nOO(17sW7 z3mt5YwkFWNyyaH1^$j$^HMpc_mIKUCGkfY}6T7+H8hWfdbbPcu1m1FjJq5Wr&t7CN zgPz}LC)4}(j@aMYY4#<0Lhph7#JRuZ>q9Z#!MH<d7GvIndZ+?^;o+xiGYyzfrWKvi z&@+1q38{t7pp#w_>72kX>5PWM%n9Z@<{~2dCUYOo@hS6)abrE$qHIaF3|pD42JfTb zZ8&kR4cmo{V0*Cx*`e$xb|U*JI}<K9=j7ivK)<uVy&u?b`2^Jw=tKM5{_4Jy)OX%d zl$CvJhZoSp&+s<_fFR!)P0hpRHM5fyXt%S+VSVCB^_20U^<-Z>-4r@|VjHuINx>7P zK|lS*IM@QLKU<w;=}fmyYyum`b?26I8{j+BxUax9E<!<p+)}qqdLgYs+?+wwG*-Gm zGo95_48hW%kUj!q0B%5$zfH3oAwF~_M-}Gv%_}{)D6TK}1D(cHif_bk;J*Tgrt?pE zFQJ4`OHhRdLYUB%c65C!REC!=Djf!*R**XadCtjK<j#ny{mOBrm|BCL9F0RRA5gzl zufn&~*XC)7+J5bd_M29a&WdfJ_s6<*q|+l4z*^0~u9axr%!l@@r7@LR53VwNUJLls z2tG?Bx4BOQrYx1elk31ee55P^FCJ6^RgTV0Bs18jt4p8__XE#wtIt$Xb1`?A$IT3S zW2a{QX#e7jwQwIgE6A1cVD9q2@&)l`>QIM4W^s){*3UJT8k^uY1hcuh*E(<c*cELS zF&;^84st|0W1%=xi;<Z+h|9sqvUyNJUmyx^GezJ!#;~*4@?2|f6nBJMC3XP+_{cTY zACRL_+F-4VJ{!K~kr9H=chIb6@pRH;CUo@}s&{<o8IqdJIi?C!jz3l*5<h7gcbY54 zkK;duZcgK?3LgtIg;PQevA6i6_`4V>^^s;s8>I`<Jw$*ix4@ejCXd0Ik&}KKpjnU8 z$yvY3zr&|k$_!<n_E;;V7uFj>jm^=w>UZ#&8iL_k8DALJp?&I`L(IA6*X9W`)4XRs zGJi9(%y28xITJh1ht?R~7@cVdA2^>`!EA*Jyg{exm7-@}y09NXx2|KqgJXZhI=K8$ zYnAC8=26^d++uDSw~1Q;2T)KbFEkX63zqnem<7JB2u0Lgo(1-JBtMtWE7#!=-PPmj zS@oKBS4-2&8e|sw7eM7oW-Dm3&&-wPM$;RttAT09T5GM{a4T1=?=8i4B>GTan8tXs z!7Op)x7eTAEUq#i$8W|edLp*tgvG)k;X8qx4ER)BN+%U`LriDLchsNNo`~Dq8n4gS z7wgOQFZ6;&QRA@D&zfY<ve(gx)|s@|(uekg)C5+&4-FX0ujbG2_rcMj!USOfRH!Nr z6=U(!%Y#enO0A?hk{^6Sq%u)SS9T#&%4n^${_ynCP#<lKKFErVP;^(I&;6m|nw#y+ z?&hcFV)KC6-s%qh6KgHA{;=xXUF`ut*e~hq3Ljd-%g<C`wlLk<KI{-g;ZF7#dx15v z=6et=Hw0JcuxZd?UyI+0=ft7V4&(7zmPjk56YvzIB2t0guA_o2>O#LSg(f5Y!#~Tv z$**KLrHImB84eZwx#FePS6izNtstEey;9q)-Pbg$s_jViagb}A7Qw+DVNL;we_>{D zM}!kVj<doAXpC$49OJ;q2gC_-QKcs7!mwx9j!YkV4=k(7(721NUo6pfJaXdVPt0c4 zU#udI5R=7QQVJYy1?58}zdBxjXgoK3s7l{%?nSJoBU<kwTAzWRJ*=Yio*o5mrm58u zuC|BO4_a&jQ1EB#snrC0)z`je-$Gvhg11<h?q7L;du)1k;xmfG>uF>kX3jE~p_s@7 z@;X4_htM43`5F8P{sNyx(YKgTMi2x;Xd-kLB7|N-tT0KKF3g6fye@dcrEeD7NhhUg z@^ob}JjgcX5IFn=oux2<Dj#we4!Oy4kA6|F27URNRmFDr7N)hN^UO%L7AHe}hjRnC z+0YVXPRJqd1U-55GjRKNsBlld2++G6Um1!{;!VCj-;5839v?$zna}5!^SAil`4U1M zp$q(WvXBZ#QdyiJ&Vkl=EWQw3B?De}p|k;R>AX}ymgIr*WO)v~5hF{^uPjy0DP`1P zwW+$8-nssXwp2^fzSACRP2ngP=$f&`AZK%L051ZqFl&`{*z&U(yM;ZG?!^_RcW75; zz5=p+%65R49ScveUrYs`JP_+k?WL(wKK!odP>R1PMc{P~t3!?9B#)WG6tjE6V>)<u zezQ<VY$j%iH^oQr!_%NgFG^wZAZ4UdK}*(Bv}Sr6y}LdT%H7XsW}G)1A%*E#S&3=H z{MEUY2mBw%SAV?4<AMz)-AX34%iEOG$`$1gIQ%&(;itlspT6ZE(_20~;q)76ZQ*K{ zXa_V;y_o)<eho<K4~&wGL12*w#`|Wd+1~7C_A>97Ev)u%1ih?*)@Rmy>p473DZ4Vb zrG>r8-fmyCf1tBE3sarz#yn!4G4Hb+6w7dEla=fSb_bh+6}Sg9EyNY&I&=HDmt0|J z_wM{iemuX0|Bh#c4B>%L2Jdwo&}@@<7OQketR{7oc7PWO$TMjLBR}$Zy7G<kNSO-G zBsVo*Q!8ke-bWv-$LbY~-o^x@pjqCmW^!f^bD3Ejs7mflO}Fk^kFAULb!fLolnV>f zUeS)s0w~?f%spt8{A>|;^rp05FoE3)1lrG@pmX_uV4tuqTqUjsC&9Ik=EiZKaG!EB zxLNQu3%Jk02&)j+8@T<PE8h<>8;|!y7}_Be6+RR^#FAoF_~&v`4`9}EJWqhUQ{D%K z{2jE;Q=n5f_~mh6wgt*gXya;72F=y3Y9A<rG1?~WXDvvtueaBG=v#E&(4qB*K;?f8 zMRo^V{L;vW=dEGZ#oKBPx9kS5`5_$JDr=8*h~5V>j&gHh+DBd!2r+;e#+--NbYp{{ z%M5lbyPoyrnnLNH=FW4^xW@cWeEO=i)9y#%SHTZXWQMd$+K=p7BfBddfd1!|C(3kn zkD8?l$favq8|a||<|Ol_`7u1=B<C8(6{cRIG!qV7zsHneo3Ni@T`vI<#zF%g=YHWz z^B?j{_)|b4QRo9U<KQjU;k^%(_DJ4xbNO@mvRngNa66n=b>Phr^%u3MrfKV-0Xl-& z+>M#$Pi8Qlco3AxS<4f+xQ5mToOv?>7+9W-WzVslxcS_-oFBiK|B;u40Yat_EcSqh z*$x%rBfT%xks3%JN^PX>(nnHXX{Z#7oQ{_qn+rQSxx9VnA5oprTnslnyK_R24SG9r zE4h>0L+(p`<V1P898Y`D*UQQBZuy{mQceRq-<0pmkAX{WikIT21Spl1U`0?2rJfQB zM(L#VQ2Npvk|!e4$^4p?aG%M_ZfM4nN*X-qO{~RZB@3RA)ZGK%qk>g|PDBq?TdAGY z9%^4Y;egz!wOC!Lu2+-cv<|8#p)bijRQJ`#cyDf+m*%GhXqB{JuppVB5eg<JRr<bK z3~*thHeHL?76aGU1DSSf2ep%0nwFv61Y17VvNSi{OZU?QbaICcnXOSz57k@goe-sc z^%#AWK2e{p$KwsHq*Z+~+36&_Mh1MweR88W?K>(=&-}f<-!O0eHRpt{vx~bCoK)Tu z5K-_`(M-%+`>*f5Zz1pb!GALQ?(c38$~kB3JVo{T>=g62=cdR+J92v4UGx%tMLc_I zVMjtfQj-k8QwQUT4LmJzjh*n6eer~3+Q)S8`C{nw^?1JBc(#*xt_<oG$&P^=p2QDN zQ3+2V;M3Q`CvSyM-2<OEhC0OQY&`toO5}MmyPG`-hnU7@us7NJ>|-{Ib>qA^KP~|H z7R(7?>UxOtR*3N)i18Tc_lbz_c<5d-F+G{v%^l=U(wToZx%=E>tbiNu#rt6mD)GU* zfakA=XK#h)?ty2H;YaZk`RPE!#r#TsJ)g|)1~w8OkOA(x&p$@yy9r)`pAaBa5`w7? zsR!-ZO6Vl?5c<NkjiP5v;-Pg{3hU{Vk%PiXAq{MCQ@AfY7P164tfikAK<9P~q9N83 zL&a8NCuDbDpvfq4qBvcQ7Z-~w>8)+M#e?EWFeKsN`%n*AqMPI;`AGq^t|vfAkosmT zsT0t;uM`8FIZ>JpBv=fkxn4?^c1s88?RFW`P3gY$Sjv*zWG~rI4v;I+er`n$ksHZj zayvO(j*_G0;c~1zMUI1)NtBc1&Cnz%@=-YzjwTc8^pX5bb|_>@s=pGb1SyQ7C?QHC zB}{3jgey@>G&F0hGDV3~5|l(GN!hIIP*UiWoOC5qxeFd7(@oq}U)5g?RD)DTRn!o* zks7A9Q^Vmcqt)T`jt=MD<4N><Dw&^?s-~-%>Rt5_{H8;5*L*d9El>;67){YapbWya zc3QX=rA2GQwODP67N;e^2`6cr>B;q@TB??=Wx~}w(w=D!-Cg(9{q;aSNN03K578Ux zVR}0~T#wSD_2J;<DewjfdZM00XYQoHL8t2JdZvC?f22Rt9R{gVl4++w^sb5!qme=C zXW>Sa5p4{obKv6OD-!86o*hPtanwjP(&3}-g8!Zw4%6NAHT}&%Gst92#SAeUnPKo9 z;bxQ>Z4NhM%_(M_nLy|CY=(19F^`(5dGxl!a<_afe=E=mvKVOY5UY{pc;wX7Id}iH zLo`JrmZl(*5)nr`5Jjnop}UA62ja&c(Ze8i8X<DR5jVpTHF1cUBt%RK;w2r?@(8iw zjz|eaoG4(6FmOc_n1bxiB!DG0gCj@<ITQTw4D8?wZU_Q1kcolqh%s^aQVr)0oFsQM zDL{%a;6xNqA{H2tKyM)54dhD$;@t<*xdGw+z1(#8`Z^MT$!|_mc=s8ie|_#fXZixU zTiK8E2fhRXVS<1$3{WPg9{=V&x;^snYTmBIcrM|cH-G=#`Bvx2zYwz?A|ezq(F#$~ z>5WN>!?Ww6Q_Sgzk@!5P1lJ>0k`XPt5ibW3F((l-X^5H(#Ldk-Cq4ge8cEJsmj84{ zkC1)mvaiD*Jn@<f3HQb3>1O{Y_YVCxc<?`YD@pVu@KG@x`SMI8^LAc$RxwZy3iLw= z6htFvh%l&#cF+;wx%XDQJ;f&R->PNiR5D2&Gtj66lnDmT2tXPGSW^#Z^RM@sr)Tdo z6Z}~Z1bX`na7Lc9oCJ^DfJk1zBtM{10C1@ikm>bF)VJd?>femT|5+qDPgQlwjl_Qz zhdI0H=~m`D?#K4B-<<v6?05Y8ZpWN^wBqdqd+}RyO;YTG_EGz!ooc7q>2`*lY2UQ( z+V|lu9^22HeX@+NBi`*_X~@4*kg>?1I9iWSLf-5^&KyO)yqPH^Pu|RuoE-VrO7ZUz z^eE6X{T;~pe~X)BE`TppwLz3OLMU&vqdGPktTBbMMj|~WNAz53ZY_e$&u~D``Dgbu z8dS@LXKT6PbiOmGTP9I0my$cnnW(u(bh42<ou3;BEvHZ|7e+hgh?0w?N-lv;B;5=h zcN8ivlip29?ud1he5r~Hf`(J15NNn|RKrDQPbDK7E|F@u&2Zq(dzVtFj=M{BoI@t3 z^ZcRW7<jox^c-F|oZN6YIilZk?nHN<CQhLW&Ut#6csY0K<%ot0rW%g8xiISHh>DA$ zDvtQM1nTFAj@wOj9C37+)X_bIpYx@DE{OU$g?45T9oK`-D<di{KKIn|4){5u;xed; zdrVIu`_nVX47^+;>gB@W<cNMFUM`M$xg=U+B2F$n+sQqGlXFlf7f5}al8eHfa`87d z&-AdBc~JLgF5VKfbt0`V#n>P^NihVtN>H^2)p0RE(<u~76Df-B27WrR^X?m{Nf5IV zu+pG9t`%kLzQ9I;i}652f`-Y!!IRk<?j}XQEYqE0ULer!HPVIUGHwh-ID&5p6xlXY zRLkiP%A|Nk(9A6t$AYpEEHn>tMN`b00<<DXwHX-o8lN&KGSS&6A-;}A1^=n9{nxJc zZEpWFv;Vhv{aya{pD4c^-S^K`U!(tJ<of%GCawO(G?O?!;f+(ke?9l^uO<fh!^{3v zSNA`ee82dOsrPTryw4Ca-!Ti$Sxxxsy9r<4U+(NZj{di%J)eZrNrQIF$h`|V=T2^S zI3I$#{=nTpIG`XnXolji0R*lGHxw#`!4VN84yRa5y5mM=Phy)6hZHX*z$Fn}PNK-{ zycdt4vlE-0U3B;1ou0uxIb=84ox1IRb%xq`g1QI16{*7wr<J%Vv=*0;I}yS;55hSO zB4-vv&Ljxu90=!(73YMNcg<IM*L0P4%~o+vRv~DAkm7wRt>F>OC+__*aGzB2+*L1% z{yF!W6As9GPm8k?trPY1ujf}fr&q>PZ=Z8J<PLQ=96qV`rK)Lg`Gg^Ef+Oz3>pzCu zCzU^U%}aZ8{`9-1Pv_h=Kv*P()&VAJQ)pE%?}QlVl$^KcvD~E9fyb0z+`%w^K24FM z`|HtaL91NFA44k!6Dj9787GNyj+1dtQqIYwRm4ZR>Yj8dyyhK+s`^k`L+F%;ePSv9 zIF<a$ztr-t=lSI5`K<py(f^gh{Ad31Kh^aAnZta$PxkNi{p%A=MB)GU^!*#^KFrsV zmH*v58l20aMA!d2{OR<@DSzvWy(oA7d(7$N&A9Ap>ubjRzpIq|H(4_*mp5}*^EGG2 z|3lWi3&#BCd>KaTz~O&;M-1W0oLOW4ge(0hM>4cp975SKha1VMoZ+-)JcY6%;lw0b zH{L<nkZ@rR6F#EVV<!s|4h*CfWQMXI;l40hMGlvuXdQWYwhM`)j7RuxGp#14P$xp> zHfGX_vXkiu&-v1-av<e6f!3Al(KBl~>=sRTnPPLfEs^dtZO&!3RJz-gne9=Y<+7ST z-E#_}oMzB!b10n_7EX7bqH~!nj_y7s()nP?wC;S6@>e?DgL1N07Og&eQRWJyJ5dbf zta`Kt{hG02XdQYYowb}mccqf(O~$)vHTooFs!X~!^(dF4eChsFAiW(ypmphbl$qMm zU8*R`N~36X+Q~_YbgybNo!NGf)~M4c6WygdR-{htMtR7e?pg&=1~O>1I+WI&!s*^s zG_5yHq&4e!Ixjhi?qKbpb*7WFa-BgdOr*Y)MXT3dv`dcEmV#*o+n`mYFgn>NoYs?K zXdQbZJ+(j>XeF&>CsXbr%#%jz**7WY5XNz%HElo2HH2vdTGy^eIfgJykL;S!C|cc~ zPOC+PSJu-C_wL*(Q4X8XnRH+hFIwpipd3ON#GuvgP|6*IIdbYjgfj?Z5WXO6LAZi2 zg|h;bK{<jj1mOq54ul&BGZ0?L%L;@O2qO?aAZ$RmfG`2!fz7n9GKDe#!GBWSA?Q!B zKirr0KM~|7xKB_&C>!-d=nh#JMSX(#(R7zAmZE(;t>mnvIKPALl^vxhPcZ&2-7kCX zj~I^Zi~G{K&3T#L$@2f4w;XZ4wExGcQ=Jp}986J15We<zSnG%_>hQ()^=A4rgP5U= zV>AAqi^GuxM^E%tj@C+o!Xoi}Gdr5SsFHGOs1U?1QBFBk(l|YdI`o{1XeM+LiP4<u zCxh4|$|$GG8H<P{YKX*QYIY<(Gl<@CMqdckHBLnnLsbk>FC@Y;p;8>#$|N|C7I8)s zIdz&qqbEmYq~<D%EX$AT2vQ*=F*5uOo#0&UcUS+M>cEjw)RE}=S{wM$NgFwy`n4Kx zs({zt`6P`5!t-A6#e~=MvUv`d6BZ}FcYU_k%>Y+Bt8#(#JPu)ECkIE<c`<}@*Jm?r z2Hv*wJrgD+{Q2(bna-UT!j%WXjyH3Cq>~Q?%75Y6tQSXF&N)w$FdN}B;`oTqBknGo zIy$G1BW!gr+plHj`ZdB)#G^UgSr~O=G1P?-@3k8Y<n&svU6wC+hqx-@rkqSeIL0|i z&pAPl@Jg0U7{wX$PH)sHn@0$PB*Og=)<~m#ai8v1W+}wy1n15l>_q*Ha}qysF}taA zA$}#tr}$^zj?;)DzvEB)gq>(zDT!8;NG<8jy})|e)uUL7jmbd9lfcBA6cGs;5+n?! zI7p(l2R)xLidKpU_7U9MjmS--h<6`x>t>TlBOyRGQVkkTt3d?O5-FaMdeBXZV2;$H z4#kzs9;x&fd-~2DeS%UM*(d+r-p6<D;zvVS5<U5@y?f`*eGrr)*|C4ue!X+IJ`*TJ zb^`yr59r(loB{=x{FnRk&Ruz;#>j5`>%DmAPJB9)l^gUFlYL)yUmA%-Ii=7YQZGau zsm2lw6pMJ<O?N||LE%)Qx`xzRbN0!Jj!DmsDu4KG(h(B}7oCh4N=5V#r%d`?8quog z#Ow~2Bq#{d+2RYW5S(54jD;p}_N^R!t6zo5-kt6XkC_0ZJnHO7fs^#2KC)7F^^!1m zj1dpEPNF-`8I+fOX>F1)aCG*r@_NKnI^|a{T74wg*Ec(YRw9OW&^;3pJwf2cdhkdj zaux&O2>%_V>_?c7&Ku7x>ZnI?Es*YAIHM-&jXjFp*}Wgnn74aAqW;Id9&yw)q`)zx z!Y$mS-5vfwvR1&aXdu^m==!6y(x1f#K&v;R8l7}$BtnJn&eNCS4t!GnwhtqdDrmnv zofqLWPU7foFzd5>E$&LMdn|H#t=b`GCQ{A2BfFd8nf&K&s_@+IiIv&?Q<+q;`oE)J zYD#W@#7UqJ>5CAcIK!YbN6|j0&DmWKq;8(m^AJG09!M1<r{BR@zsTu)a#k*Kx*eP~ z3oqbTBWS~LFmEDd-Aw3?K&ZS%;Mgf(*Q3yE?oeoiO{2h~N#IVW-twg$oH%ddxTC<C z1bYZarf0k7$F}29QF>0o9h}$*@e>WaiKnxV(h)QM@UiWHC<*YT>2RO^)MFA~NxWnN z-hDchia(gE9ylu&o-Qf3XUFN@9J$>(A$e+=&OIJ-)|a4zvu^ojpAPMJN-5?DaUtiB z-{pt@?1ck?YYIoEbdV}uTy_O7?>@{wpX&NoGn4-(^OE1J>ZRw__3l$|6hK)n6cIKm z_m&yrdH(bMy8!S?F-K@VhvQxK2U0QkbHz3@w`Th+_eO@-HCs}#WoYJw&{{32)P~c( zr)XNIok;UAo>pj+X!p|&_|=1XZW_p>n)mS=)!Do=E<@-PYf^<>jCV%f6X|Us@4>*j zleH#$Vq`6I*3F^jt%e5w>9*?EH~IYa{XOgHD(BQekG@d}&8dRAW9460JVW2OZI4tu ziPua0+fz~hNjE{>lk5LU9g?_{K)ORlJRzw%5<eJ4>x{$+CeS^y|6bq9|6OJAf4zGk zvzTN0f35%Y|JyE{e`mLjAT2>zC&ChJ_0O&@lDZ<PDTc$x#J;0?m<jd|1P}CpTUiO# z&jj`d0`(K<8H^xtxR@aB0MhtM!N89gAjJ-#f*-P;<a`3KIZF;go<{*Qk0QSVk;$#V zw$qWNDagmis+Sgo40Qbe;-4uz{^jcGV8-*q3lyq0snMjT-Yx}Q6UXzt@TEvs7Z=u( zDO4bTb)S5$rSm(O&;lOS3%IzsjF(+q+!8HBQpr4DDa;hg=i*3oTkaa`V9MwDdv1QW zPn;XEXz-ej`B&BIH~&$C1#Hu}1Bv5{-ekt-dx-zFP0Z)&;_B)<X3mc<M;&g~{$A6C z!_o?5>5O;or*g@U-#=~|{XF?vyA>$r+MzaEoGC{B;9ktDZRFsX$U*%B>voHdWc`?; z<jVz%dDa^;sC&2mLwoh@8_5>NPs3L|iWO)T)ooZzBwL1gk9@(in4j|tfpsGX#q|29 zS46j%UIY5G<(M+$Kj$k}BKtqL>eUawrCYz~Uj2Ip)~(HyE$Pj2EXT17{ij1oZ;oL( zp5b^=71a(*mpmV~b<3Pz=TXeB<%oXW`o}~@1lAoeD0;vk=dWX!n$BNWHTOT0Ul`aj z=Qp;D95l37MC4%n>cAR-4LN4KONG1(<dWZ!Z@f!kyi6Al*YPecjxFoIY}~5p{D7h! z>6J&!s?fIDfQ%hg4%QvqXaC-sVI5xj?H@X`u1n>*$;-a4|M>3qj}OG0tZ*SY-r@T6 zg9m$)x7VxG=Tz7F`giqC*DX4@<oId5lB=IsP<H*G_o{p_u-q2*%F7nrTwAVQ`=oJj z{^9jk)%x`GodtLPnEriR+dMowqsg<6`I{p=UOpN!rS{@ihw`;pu=YaVrE_{sj(mT@ zC;P+w4jw(G`&~*I_o$qA%+=Wy)*XNPGG<iO+fSRkH+Ic|B{eoqy|?=I+Nvc+cYB&J zu*mN3!<IF@)%nFOpEbct*G2}OO`mu7=%`iA8r6GM>ic>HXM0|Vni$);_wXL|PlY!a z(`sL_QHMtSd~Dx9S45-Big7QPaZl;1EaT%=!p*Pi!YBPZoje({Fzw3dpX|%`Lt|@R zVYmYB2;=<u3%a<tRRLI5$oVtlGO0vVOiZ*^tJZ*s!O=BiXeiW-7|@T#SearjF0b6& znF9DfR~H9kldqL?Qy7U661hZXQqAnY95JYGp1)hm8Buuys&4I?_#PV1Wh%RQF&;Ue zAfG$qL%vv;{3bW#NdYE^{JDr*d8XV-1QlBfSx6(tm;68)FEuzuP-?J$%Ab7W#yRp8 zTJ+h7pT@Rl*8UW=?Zu5kWxj4czCdTW>*^1emY8ubV0NK;{h##vvE3-<?(<$VDh~E6 zI-ubf8`UDus%=@cx%7dVKenIe*l^nGgRQCTYWGgnMrM6KvP|31q)7iCMuc>)Jg@(e zBXaKv<=to2zIWwfTf5A##*?d+D9~lK(z`;@6)j3l81oe~-faakep+_M`+WOYIr_(5 zvA<h-?}YbChy6L@|F?6<nZpdLyphA4nv=ub|E=FIAdu+qul{$xzh$qU{UZmF&mjD5 z9xspZRO{{dy5gF8jlcGJwd_$hkCt;bCtThTT)4@h{;wt(En62Ze%j5h{`(j6=3V@z z+X&B&$3iC!y_H$FX@$8D_gAmGZ)ti|^30It4?j_M7CBV$mmcjN73T&tYrAaYl$EX* zs+B#}^!k;Eb0t6JI&SW=phME<L18{6AI`hnO|Rdg%(q3`c+PH^wQl2YADIo;M-RF) z`%c$WzB><2=n-FPPvzL_ch6K<mAcDy<g#INIz}FNSTbgJ?Mc-#+(W0&o<6I_l414A zMV(KI8FtyHBR8$hG=9&;h@*`^*A5-J$9tandBuB=r+str%eK?>t8QyXR@ho;W6dMc zhrVexp^E!U&plr>U*LY-H)zn>Q_egd@6r}4(vtDYO*>b{!IYr+LjLqGQl?-mGdNFz z_hcfOYIzd8Y<7;u46Z?QeAwWcgR@^BO>{Z;dtE10fBn7PdUgBrx8lo#YeaOb(UYqg z5jlu4oM<32Ji{i|O01FhZxcZH7k?X2@K3Xx%L8r=4)<E&)5NdrxzI}=MwGO>NV~mn zGv&yCuIT2^l!$#d`uzzdNX!k_lV??Pgg*MLJ0lNYF|lgF0sdRBR?bLFi_f=qQnSiS z7lz~uxN`c&h!f?b3S9b%OYXP#ad4Fg{$}GI{k(4<=;`w`|4Om%s835A{$cC2tv_4| zJUp=Qskt#3Uv;{=M=n=)`0e4_P6fFIu2}nX(}PpqpXC$#U6HISord;r-o>YWgWCPQ zH{VkhZqY6k8t9u9Fd{kj<Mq8B|GxMuuM*XN9^0{yxv1m!C5{&x*UwQ?@lJaGv*7Dn zA9wh|WmECR!L=H{ce%pX2mTly-{QceE#s$jeq<)MST=&MUi0If8G(h04g9fpsgB>? zUB$Ew{<N{Z^V_k<_F5I9B3dro(<^5Ep)$tU*_j7+2c)|V0ZiQkOr6PwsSn(X4^uZj zy!CS05BVprmnY?2GEczN*nbNqvXzBru@bLgV$hJmF@en@V}=bF)aP9|R=01r!Gi<& zz?O|_bE1SF*CUdGNFFUB(HR{%IL68h4|S4_V*~Sizz<vJXd!p60v`+*95G;6&KC;i zej!^!d3bq-hSm*a>(*#F;G>wFuX?`otNGse>fgfJy-`L_pQda10>6~2HtWKR7KhG< zjkz-KbK!nNN8o(#mkZA=ES&E_%#tF%Wpw?hZ_{JHb+j5T-?{Jo(~AOoRc+usf022; zjMtY#s{DR=`_3cP{e2HlJU#kqRWq{b=mA}KMs7@*woqDqWW&%$R~FyuJ!5>!h@FEr zrTy?Ks+(u2VqvA*H@g;kXa9(ccS}ES?9Oc{Rk7fu$^-IM?6iA$iRYd>n?0L0hbhZO z9<6_-&SJ6mqFWzqk^?Sps&ID0nF7n@jc$iKUz#~0F!`tacZxg+sL`fet?l0x2)lbA z{@ONiX>?k|{e<}Pzt<VEOWIWOdwIoNHFe1GkRC~iS5NFce)))Nk>ydxH{YMTiO+$x z{#cRT^yQQ(MltQr*!2!gkdOI@d@<0iE7O_jSim!UQX`j1&+5ArESV3su42yjxw@1n zNg!u1FsBE>nuzWcXd<EqGnI3{$(1Qp`kmi4D7xDl;4x2c`Dg?`f79p*Kh>;$^7!^i zWe0u4RCj_LG!qk;ST-?WQt51v8$2}6kHQ}arnSuj!%dmS`01}<xY(P2uLs56DtWN? zuYYh1Q=~v4=Ni<(PsXyj`GOi=Ta)*k8qI-4{Zr~vv}-)pp3US7_`b!y=HKjzP>cWg zaq|G-%=Zn4w%M@cyEgim$F7A&+_NW4xyf`l_pS?ds~UJb`C_?q-Q%utLES1ot2sY@ z&XM}snEUZUt#)P91!ID|R-WtsK-F9ZEne0CSHCNfk9TkKp0lg?j?sE^)uZ4~QLiqn zZ_%SxBYje6wF~)b7Yq2}o8?E!f3)ZDcNe>cu6|zI{l{mY^e8%UM%%_Qx9=C2(53h% zAGx*;t99e!$%~&2U3$CQg)XO0NGFrbA~ULX-ueI9H}iNXyEcvwGsrfUEE(Gf*}^?D z)?|$$OR^<dLJBc52+1;&EZM0jVT?TqW$QsgWyw;qBum*!5|y=u-a$0V^E|!p=Y8JZ zKl)?-xbOSi=X2(q>wM4ecg;1LCUdP!vsn^j+e?B|o>V~%BS+4SOPx4$=)#E?=5=)( ztiBELm3ieKPvcXJ%6N-n7#}7vDql+K4tgIaR_k{*R(Yljz)>6|5>NFj?G(MbKAhA# ze8bvz`Ylgmkm&cc!#1wR9Xr6ff;*^*9mZjaO55RDXj=&q(5*iB4s<&Jxs?V8VOtS6 z5&&f2>$@N-q}?tUxV4A7y$i<Sl-&`yhnpST1?}XG&;WL=Kyv3==c|y^_pottu!ZYm z9GtB&-s^oGTy>={ckd<jCA~~e6k^rHEh|9cC9tLde>vL!j-&BsctC9V+Y8$^-R-iE z+kcqHb#`!1QIDxEzl~#2l^N&$xitDMp7!NWWO60>^q(eAy|fb2qpgXrr#=yv^VFPP zFP%OHUo_6r5`!_4Xi4i)e`Ua_th%#t@9@<-qw=|iO?(fVTKyAW)HIno;#emXWm>uJ z#Zw7HzVo?_5LZO^7GF|J(YC%|#dTtW-M1%f#5&Zg&Ym-$$qSZn{jTvI!|t2N&Q$1b zm3#5A=N=hmT{?7D`oQC{I2&s?O&#DVz@%$)rsNMFdmLiIuJPH2j))u5z2Ramju`X9 zfmhzsowvMWVgS-?dOV-u+b`L*c~~wxuw!@G=AatRq%kwOzQmqYj-DaTh(91nLKuF4 zZ)3tBzX4=J8|SnFS3AHKuwD;WgKtD4!gZBMo}Qk|N{$#=YkU<Z;VT#H&sr`a7FZ#u z2p|Lq;`#A>LA<NuM38{)gsnA7{FwAIM!8o`1U7(W?L;6aIUBzBiz1ZEN|FfZbRK{U z0Ry(Igdo#u2<mHVi6g|NWn@XD<c6>(Jq`RH+hx`CjhDX#sHb+xe<aUGAy6B^b@N#m zk3){^9KJF=-;dkca4{*|k}lJO$BUi6Z($q;HkSY7dZEtFEGrUdQ#Z5jIpOk@kD^Ax z?GLSYkKz_B8k#M^&qI@y-Fdp^<ic_~Tg#;-QKs3kCXecM6>u-S1KB<c7ZmQ9;wC6f z1b1ipr<-Ib=LJfL^q;QCzM7^8AshQ6jsVr)D#ET4JiLR+sxw_MG?C)CWKjc|j*t)S zH4cic_`|HqPa8hz>O_6Q9P?ZdI$!sPG&DqOF=9bDe=l<-{mpoaeswz5k1}H5-fDfa zcd1MkEF*)JLfS^R#R4rEGHcx_XeQ%pL$?<4dQMd~?`nUilcQW57MOqJ{X-T$1P;y# z;Na}!WMlv~?w9jq12Ow8Q-{YU0~~8hNDW5Nk!Jh=E|M!+1QZ~B%1V?SYcE0�Y|% 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 z%0D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%0DAH&FK)ua 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ΠOA(I7T^%A;-I59 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 I34Hs%01s8@!vFvP literal 0 HcmV?d00001 diff --git a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/СертификатыКлючейЭлектроннойПодписиИШифрования.mdo b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/СертификатыКлючейЭлектроннойПодписиИШифрования.mdo index f610b4b45..ee0beca06 100644 --- a/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/СертификатыКлючейЭлектроннойПодписиИШифрования.mdo +++ b/SSL/src/Catalogs/СертификатыКлючейЭлектроннойПодписиИШифрования/СертификатыКлючейЭлектроннойПодписиИШифрования.mdo @@ -764,4 +764,12 @@ <value>Заявление на сертификат юридического лица</value> </synonym> </templates> + <templates uuid="5189beb9-b939-4f97-aca0-c2f3492ac8b9"> + <name>КомпонентаXMLDSIG</name> + <synonym> + <key>ru</key> + <value>Компонента XMLDSIG</value> + </synonym> + <templateType>BinaryData</templateType> + </templates> </mdclass:Catalog> diff --git a/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/ManagerModule.bsl index 6b0f37643..c870ef204 100644 --- a/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/ManagerModule.bsl @@ -2,9 +2,11 @@ #Область ПрограммныйИнтерфейс -// Возвращает список реквизитов, которые разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Возврат ПрисоединенныеФайлы.РеквизитыРедактируемыеВГрупповойОбработке(); diff --git a/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/СообщениеSMSПрисоединенныеФайлы.mdo b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/СообщениеSMSПрисоединенныеФайлы.mdo index f2ece0f9f..4044dd555 100644 --- a/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/СообщениеSMSПрисоединенныеФайлы.mdo +++ b/SSL/src/Catalogs/СообщениеSMSПрисоединенныеФайлы/СообщениеSMSПрисоединенныеФайлы.mdo @@ -655,6 +655,43 @@ <dataHistory>Use</dataHistory> <fullTextSearch>Use</fullTextSearch> </attributes> + <attributes uuid="92cbfe14-35c5-440b-9a13-ef8c8ab0630a"> + <name>ДатаПроверкиПодписи</name> + <synonym> + <key>ru</key> + <value>Дата проверки подписи</value> + </synonym> + <type> + <types>Date</types> + <dateQualifiers/> + </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> + <attributes uuid="8ce759ff-f579-461c-bb1e-9ac2b01e88df"> + <name>ПодписьВерна</name> + <synonym> + <key>ru</key> + <value>Подпись верна</value> + </synonym> + <type> + <types>Boolean</types> + </type> + <toolTip> + <key>ru</key> + <value>Результат последней проверки подписи.</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + <fullTextSearch>Use</fullTextSearch> + </attributes> </tabularSections> <tabularSections uuid="8b451909-2c15-48f2-b869-65e7031cc542"> <producedTypes> diff --git a/SSL/src/Catalogs/СообщенияСистемы/ManagerModule.bsl b/SSL/src/Catalogs/СообщенияСистемы/ManagerModule.bsl index d2418f452..6ac4e43e3 100644 --- a/SSL/src/Catalogs/СообщенияСистемы/ManagerModule.bsl +++ b/SSL/src/Catalogs/СообщенияСистемы/ManagerModule.bsl @@ -5,9 +5,11 @@ //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. -// Возвращает список реквизитов, которые не нужно редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые не рекомендуется редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Help/ru.html b/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Help/ru.html index bdcceca18..ce83a12b8 100644 --- a/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Help/ru.html +++ b/SSL/src/Catalogs/СтраныМира/Forms/Классификатор/Help/ru.html @@ -7,7 +7,7 @@ P:first-letter { SUP { FONT-SIZE: 0.9em; FONT-VARIANT: normal; FONT-WEIGHT: normal; FONT-STYLE: normal; LINE-HEIGHT: normal } -</style><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></meta></head><body> +</style><meta name="GENERATOR" content="MSHTML 11.00.9600.18427"></meta></head><body> <h1>Общероссийский классификатор стран мира (ОКСМ)</h1> <p>Общероссийский классификатор стран мира (ОКСМ) входит в состав Единой системы классификации и кодирования технико-экономической и социальной информации (ЕСКК) в Российской Федерации.</p> <p>ОКСМ гармонизирован с Международным стандартом ИСО 3166-97 «Коды для представления наименований стран», разработанным Международной организацией по стандартизации (ИСО), и Межгосударственным классификатором стран мира MK (ИСО 3166) 004-97.</p> diff --git a/SSL/src/Catalogs/СтраныМира/Help/ru.html b/SSL/src/Catalogs/СтраныМира/Help/ru.html index 9070937af..fccf43b58 100644 --- a/SSL/src/Catalogs/СтраныМира/Help/ru.html +++ b/SSL/src/Catalogs/СтраныМира/Help/ru.html @@ -7,7 +7,7 @@ P:first-letter { SUP { FONT-SIZE: 0.9em; FONT-VARIANT: normal; FONT-WEIGHT: normal; FONT-STYLE: normal; LINE-HEIGHT: normal } -</style><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></meta></head><body> +</style><meta name="GENERATOR" content="MSHTML 11.00.9600.18427"></meta></head><body> <p align="left">Предназначен для хранения информации о странах мира, таможенных союзах стран, либо регионах или частях стран. Данные справочника используются, например, при указании страны <a href="DataProcessor.ВводКонтактнойИнформации.Form.ВводАдреса/Help">адреса контактной информации</a>, страны происхождения товара. </p> <p>Открывается по команде <strong>Страны мира</strong> раздела <strong>Справочники.</strong> В списке можно хранить только несколько необходимых для работы стран.</p> <p>Может быть заполнен как вручную, так и по данным <a href="Catalog.СтраныМира.Form.Классификатор/Help">общероссийского классификатора стран мира (ОКСМ)</a>. Классификатор стран мира открывается по соответствующей команде.</p> diff --git a/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl b/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl index 37590a5ae..940e6fd07 100644 --- a/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl +++ b/SSL/src/Catalogs/СтраныМира/ManagerModule.bsl @@ -1,301 +1,9 @@ -#Область СлужебныйПрограммныйИнтерфейс - -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -// Определяет данные страны по справочнику стран или классификатору ОКСМ. -// -// Параметры: -// КодСтраны - Строка, Число - код ОКСМ страны. Если не указано, то поиск по коду не производится. -// Наименование - Строка - наименование страны. Если не указано, то поиск по наименованию не производится. -// -// Возвращаемое значение: -// Структура - поля: -// * Код - Строка - реквизит найденной страны. -// * Наименование - Строка - реквизит найденной страны. -// * НаименованиеПолное - Строка - реквизит найденной страны. -// * КодАльфа2 - Строка - реквизит найденной страны. -// * КодАльфа3 - Строка - реквизит найденной страны. -// * Ссылка - СправочникаСсылка.СтраныМира - реквизит найденной страны. -// Неопределено - страна не найдена. -// -Функция ДанныеСтраныМира(Знач КодСтраны = Неопределено, Знач Наименование = Неопределено) Экспорт - Если КодСтраны=Неопределено И Наименование=Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - - НормализованныйКод = КодСтраныМира(КодСтраны); - Если КодСтраны=Неопределено Тогда - УсловиеПоиска = "ИСТИНА"; - ФильтрКлассификатора = Новый Структура; - Иначе - УсловиеПоиска = "Код=" + КонтрольКавычекВСтроке(НормализованныйКод); - ФильтрКлассификатора = Новый Структура("Код", НормализованныйКод); - КонецЕсли; - - Если Наименование<>Неопределено Тогда - УсловиеПоиска = УсловиеПоиска + " И Наименование=" + КонтрольКавычекВСтроке(Наименование); - ФильтрКлассификатора.Вставить("Наименование", Наименование); - КонецЕсли; - - Результат = Новый Структура("Ссылка, Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3"); - - Запрос = Новый Запрос(" - |ВЫБРАТЬ ПЕРВЫЕ 1 - | Ссылка, Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3 - |ИЗ - | Справочник.СтраныМира - |ГДЕ - | " + УсловиеПоиска + " - |УПОРЯДОЧИТЬ ПО - | Наименование - |"); - - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - ЗаполнитьЗначенияСвойств(Результат, Выборка); - - Иначе - ДанныеКлассификатора = ТаблицаКлассификатора(); - СтрокиДанных = ДанныеКлассификатора.НайтиСтроки(ФильтрКлассификатора); - Если СтрокиДанных.Количество()=0 Тогда - Результат = Неопределено - Иначе - ЗаполнитьЗначенияСвойств(Результат, СтрокиДанных[0]); - КонецЕсли; - - КонецЕсли; - - Возврат Результат; -КонецФункции - -// Определяет данные страны по классификатору ОКСМ. -// -// Параметры: -// КодСтраны - Строка, Число - код ОКСМ страны. -// -// Возвращаемое значение: -// Структура - поля: -// * Код - Строка - реквизит найденной страны. -// * Наименование - Строка - реквизит найденной страны. -// * НаименованиеПолное - Строка - реквизит найденной страны. -// * КодАльфа2 - Строка - реквизит найденной страны. -// * КодАльфа3 - Строка - реквизит найденной страны. -// Неопределено - страна не найдена. -// -Функция ДанныеКлассификатораСтранМираПоКоду(Знач КодСтраны) Экспорт - - ДанныеКлассификатора = ТаблицаКлассификатора(); - СтрокаДанных = ДанныеКлассификатора.Найти(КодСтраныМира(КодСтраны), "Код"); - Если СтрокаДанных=Неопределено Тогда - Результат = Неопределено; - Иначе - Результат = Новый Структура("Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3"); - ЗаполнитьЗначенияСвойств(Результат, СтрокаДанных); - КонецЕсли; - - Возврат Результат; -КонецФункции - -// Определяет данные страны по классификатору ОКСМ. -// -// Параметры: -// Наименование - Строка - наименование страны. -// -// Возвращаемое значение: -// Структура - поля: -// * Код - Строка - реквизит найденной страны. -// * Наименование - Строка - реквизит найденной страны. -// * НаименованиеПолное - Строка - реквизит найденной страны. -// * КодАльфа2 - Строка - реквизит найденной страны. -// * КодАльфа3 - Строка - реквизит найденной страны. -// Неопределено - страна не найдена. -// -Функция ДанныеКлассификатораСтранМираПоНаименованию(Знач Наименование) Экспорт - ДанныеКлассификатора = ТаблицаКлассификатора(); - СтрокаДанных = ДанныеКлассификатора.Найти(Наименование, "Наименование"); - Если СтрокаДанных=Неопределено Тогда - Результат = Неопределено; - Иначе - Результат = Новый Структура("Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3"); - ЗаполнитьЗначенияСвойств(Результат, СтрокаДанных); - КонецЕсли; - - Возврат Результат; -КонецФункции - -// Обновляет справочник стран мира по данным макета - классификатора. -// Идентификация существующих элементов в справочнике выполняется по полю Код. -// -// Параметры: -// Добавлять - Булево - если Истина, то добавляются страны, которые есть в классификаторе, -// но отсутствуют в справочнике стран мира. -// -Процедура ОбновитьСтраныМираПоКлассификатору(Знач Добавлять = Ложь) Экспорт - ВсеОшибки = ""; - - Фильтр = Новый Структура("Код"); - - // Сравнивать в запросе нельзя из-за возможной регистронезависимости базы данных. - Для Каждого СтрокаКлассификатора Из ТаблицаКлассификатора() Цикл - Фильтр.Код = СтрокаКлассификатора.Код; - Выборка = Справочники.СтраныМира.Выбрать(,, Фильтр); - СтранаНайдена = Выборка.Следующий(); - Если Не СтранаНайдена И Добавлять Тогда - // Добавление страны - Страна = Справочники.СтраныМира.СоздатьЭлемент(); - ИначеЕсли СтранаНайдена И ( - Выборка.Наименование <> СтрокаКлассификатора.Наименование - Или Выборка.КодАльфа2 <> СтрокаКлассификатора.КодАльфа2 - Или Выборка.КодАльфа3 <> СтрокаКлассификатора.КодАльфа3 - Или Выборка.НаименованиеПолное <> СтрокаКлассификатора.НаименованиеПолное) Тогда - // Изменение страны - Страна = Выборка.ПолучитьОбъект(); - Иначе - Продолжить; - КонецЕсли; - - НачатьТранзакцию(); - Попытка - Если Не Страна.ЭтоНовый() Тогда - ЗаблокироватьДанныеДляРедактирования(Страна.Ссылка); - КонецЕсли; - ЗаполнитьЗначенияСвойств(Страна, СтрокаКлассификатора, "Код, Наименование, КодАльфа2, КодАльфа3, НаименованиеПолное"); - Страна.ДополнительныеСвойства.Вставить("НеПроверятьУникальность"); - Страна.Записать(); - ЗафиксироватьТранзакцию(); - Исключение - Инфо = ИнформацияОбОшибке(); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Ошибка записи страны мира %1 (код %2) при обновлении классификатора, %3'"), - Выборка.Код, Выборка.Наименование, КраткоеПредставлениеОшибки(Инфо)); - ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Ошибка,,, - ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(Инфо)); - ВсеОшибки = ВсеОшибки + Символы.ПС + ТекстОшибки; - ОтменитьТранзакцию(); - КонецПопытки; - - КонецЦикла; - - Если Не ПустаяСтрока(ВсеОшибки) Тогда - ВызватьИсключение СокрЛП(ВсеОшибки); - КонецЕсли; -КонецПроцедуры - -// Создает или возвращает существующую ссылку по данным классификатора. -// -// Параметры: -// Отбор - Структура - содержит поле: -// * Код - Строка - для поиска страны в классификаторе. -// Данные - Структура - для заполнения одноименных оставшихся полей создаваемого объекта. -// -// Возвращаемое значение: -// СправочникСсылка.СтраныМира - ссылка на созданный элемент. -// -Функция СсылкаПоДаннымКлассификатора(Знач Отбор, Знач ДополнительныеДанные = Неопределено) Экспорт - - // Убеждаемся, что страна есть в классификаторе. - ДанныеПоиска = ДанныеКлассификатораСтранМираПоКоду(Отбор.Код); - Если ДанныеПоиска=Неопределено Тогда - ВызватьИсключение НСтр("ru='Некорректный код страны мира для поиска в классификаторе'"); - КонецЕсли; - - // Проверяем на существование в справочнике по данным классификатора. - ДанныеПоиска = ДанныеСтраныМира(ДанныеПоиска.Код, ДанныеПоиска.Наименование); - Результат = ДанныеПоиска.Ссылка; - Если Не ЗначениеЗаполнено(Результат) Тогда - ОбъектСтраны = Справочники.СтраныМира.СоздатьЭлемент(); - ЗаполнитьЗначенияСвойств(ОбъектСтраны, ДанныеПоиска); - Если ДополнительныеДанные<>Неопределено Тогда - ЗаполнитьЗначенияСвойств(ОбъектСтраны, ДополнительныеДанные); - КонецЕсли; - ОбъектСтраны.Записать(); - Результат = ОбъектСтраны.Ссылка; - КонецЕсли; - - Возврат Результат; -КонецФункции - -#КонецЕсли - -// Возвращает флаг возможности добавления и изменения элементов. -// -Функция ЕстьПравоДобавления() Экспорт - - Возврат ПравоДоступа("Добавление", Метаданные.Справочники.СтраныМира); - -КонецФункции - -// Возвращает поля поиска в порядке предпочтения для справочника стран мира. -// -// Возвращаемое значение: -// Массив - содержит структуры с полями: -// * Имя - Строка - имя реквизита поиска. -// * ШаблонПредставления - Строка - шаблон для формирования значения представления по именам реквизитов, -// например: "%1.Наименование (%1.Код)". Здесь "Наименование" и "Код" - имена -// реквизитов, -// "%1" - заполнитель для передачи псевдонима таблицы. -// -Функция ПоляПоиска() Экспорт - Результат = Новый Массив; - СписокПолей = Справочники.СтраныМира.ПустаяСсылка().Метаданные().ВводПоСтроке; - ГраницаПолей = СписокПолей.Количество() - 1; - ВсеИменаСтрокой = ""; - - ПредставлениеРазделителя = ", "; - РазделительПредставлений = " + """ + ПредставлениеРазделителя + """ + "; - - Для Индекс=0 По ГраницаПолей Цикл - ИмяПоля = СписокПолей[Индекс].Имя; - ВсеИменаСтрокой = ВсеИменаСтрокой + "," + ИмяПоля; - - ШаблонПредставления = "%1." + ИмяПоля; - - ОстальныеПоля = ""; - Для Позиция=0 По ГраницаПолей Цикл - Если Позиция<>Индекс Тогда - ОстальныеПоля = ОстальныеПоля + РазделительПредставлений + СписокПолей[Позиция].Имя; - КонецЕсли; - КонецЦикла; - Если Не ПустаяСтрока(ОстальныеПоля) Тогда - ШаблонПредставления = ШаблонПредставления - + " + "" ("" + " - + "%1." + Сред(ОстальныеПоля, СтрДлина(РазделительПредставлений) + 1) - + " + "")"""; - КонецЕсли; - - Результат.Добавить( - Новый Структура("Имя, ШаблонПредставления", ИмяПоля, ШаблонПредставления)); - КонецЦикла; - - Возврат Новый Структура("СписокПолей, ИменаПолейСтрокой", Результат, Сред(ВсеИменаСтрокой, 2)); -КонецФункции - -// Возвращает полные данные ОКСМ классификатора. -// -// Возвращаемое значение: -// ТаблицаЗначений - данные классификатора с колонками: -// * Код - Строка - данные страны. -// * Наименование - Строка - данные страны. -// * НаименованиеПолное - Строка - данные страны. -// * КодАльфа2 - Строка - данные страны. -// * КодАльфа3 - Строка - данные страны. -// -// Таблица значений проиндексирована по полям "Код", "Наименование". -// -Функция ТаблицаКлассификатора() Экспорт - Макет = Справочники.СтраныМира.ПолучитьМакет("Классификатор"); - - Чтение = Новый ЧтениеXML; - Чтение.УстановитьСтроку(Макет.ПолучитьТекст()); - - Возврат СериализаторXDTO.ПрочитатьXML(Чтение); -КонецФункции - -#КонецОбласти - #Область ОбработчикиСобытий Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) + + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Если Не СтандартнаяОбработка Тогда // Обрабатывается в другом месте. Возврат; @@ -455,6 +163,8 @@ КонецЕсли; КонецЦикла; +#КонецЕсли + КонецПроцедуры #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда @@ -462,9 +172,11 @@ //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. -// Возвращает список реквизитов, которые не нужно редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые не рекомендуется редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; @@ -473,26 +185,320 @@ КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Загрузка данных из файла - -// Запрещает загрузку данных в этот справочник из подсистемы "ЗагрузкаДанныхИзФайла". -// Т.к. данный справочник реализует свой метод загрузки данные из макета. -// -Функция ИспользоватьЗагрузкуДанныхИзФайла() Экспорт - Возврат Ложь; -КонецФункции - - #КонецЕсли #КонецОбласти -#Область СлужебныеПроцедурыИФункции - #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область СлужебныйПрограммныйИнтерфейс + +// Определяет данные страны по справочнику стран или классификатору ОКСМ. +// +// Параметры: +// КодСтраны - Строка, Число - код ОКСМ страны. Если не указано, то поиск по коду не производится. +// Наименование - Строка - наименование страны. Если не указано, то поиск по наименованию не производится. +// +// Возвращаемое значение: +// Структура - поля: +// * Код - Строка - реквизит найденной страны. +// * Наименование - Строка - реквизит найденной страны. +// * НаименованиеПолное - Строка - реквизит найденной страны. +// * КодАльфа2 - Строка - реквизит найденной страны. +// * КодАльфа3 - Строка - реквизит найденной страны. +// * Ссылка - СправочникаСсылка.СтраныМира - реквизит найденной страны. +// Неопределено - страна не найдена. +// +Функция ДанныеСтраныМира(Знач КодСтраны = Неопределено, Знач Наименование = Неопределено) Экспорт + + Если КодСтраны=Неопределено И Наименование=Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + НормализованныйКод = КодСтраныМира(КодСтраны); + Если КодСтраны=Неопределено Тогда + УсловиеПоиска = "ИСТИНА"; + ФильтрКлассификатора = Новый Структура; + Иначе + УсловиеПоиска = "Код=" + КонтрольКавычекВСтроке(НормализованныйКод); + ФильтрКлассификатора = Новый Структура("Код", НормализованныйКод); + КонецЕсли; + + Если Наименование<>Неопределено Тогда + УсловиеПоиска = УсловиеПоиска + " И Наименование=" + КонтрольКавычекВСтроке(Наименование); + ФильтрКлассификатора.Вставить("Наименование", Наименование); + КонецЕсли; + + Результат = Новый Структура("Ссылка, Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3"); + + Запрос = Новый Запрос(" + |ВЫБРАТЬ ПЕРВЫЕ 1 + | Ссылка, Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3 + |ИЗ + | Справочник.СтраныМира + |ГДЕ + | " + УсловиеПоиска + " + |УПОРЯДОЧИТЬ ПО + | Наименование + |"); + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + ЗаполнитьЗначенияСвойств(Результат, Выборка); + + Иначе + ДанныеКлассификатора = ТаблицаКлассификатора(); + СтрокиДанных = ДанныеКлассификатора.НайтиСтроки(ФильтрКлассификатора); + Если СтрокиДанных.Количество()=0 Тогда + Результат = Неопределено + Иначе + ЗаполнитьЗначенияСвойств(Результат, СтрокиДанных[0]); + КонецЕсли; + + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Определяет данные страны по классификатору ОКСМ. +// +// Параметры: +// Код - Строка, Число - код ОКСМ страны. +// ТипКода - Строка - Варианты: КодСтраны (по умолчанию), Альфа2, Альфа3. +// +// Возвращаемое значение: +// Структура - поля: +// * Код - Строка - реквизит найденной страны. +// * Наименование - Строка - реквизит найденной страны. +// * НаименованиеПолное - Строка - реквизит найденной страны. +// * КодАльфа2 - Строка - реквизит найденной страны. +// * КодАльфа3 - Строка - реквизит найденной страны. +// * Ссылка - СправочникаСсылка.СтраныМира - ссылка на +// элемент справочника страны мира, если он существует. +// Неопределено - страна не найдена. +// +Функция ДанныеКлассификатораСтранМираПоКоду(Знач Код, ТипКода = "КодСтраны") Экспорт + + ДанныеКлассификатора = ТаблицаКлассификатора(); + Если СтрСравнить(ТипКода, "Альфа2") = 0 Тогда + СтрокаДанных = ДанныеКлассификатора.Найти(ВРег(Код), "КодАльфа2"); + ИначеЕсли СтрСравнить(ТипКода, "Альфа3") = 0 Тогда + СтрокаДанных = ДанныеКлассификатора.Найти(ВРег(Код), "КодАльфа3"); + Иначе + СтрокаДанных = ДанныеКлассификатора.Найти(КодСтраныМира(Код), "Код"); + КонецЕсли; + + Если СтрокаДанных=Неопределено Тогда + Результат = Неопределено; + Иначе + Результат = Новый Структура("Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3, Ссылка"); + ЗаполнитьЗначенияСвойств(Результат, СтрокаДанных); + Страна = ДанныеСтраныМира(Результат.Код); + Если Страна <> Неопределено Тогда + Результат.Ссылка = Страна.Ссылка; + КонецЕсли; + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Определяет данные страны по классификатору ОКСМ. +// +// Параметры: +// Наименование - Строка - наименование страны. +// +// Возвращаемое значение: +// Структура - поля: +// * Код - Строка - реквизит найденной страны. +// * Наименование - Строка - реквизит найденной страны. +// * НаименованиеПолное - Строка - реквизит найденной страны. +// * КодАльфа2 - Строка - реквизит найденной страны. +// * КодАльфа3 - Строка - реквизит найденной страны. +// Неопределено - страна не найдена. +// +Функция ДанныеКлассификатораСтранМираПоНаименованию(Знач Наименование) Экспорт + ДанныеКлассификатора = ТаблицаКлассификатора(); + СтрокаДанных = ДанныеКлассификатора.Найти(Наименование, "Наименование"); + Если СтрокаДанных=Неопределено Тогда + Результат = Неопределено; + Иначе + Результат = Новый Структура("Код, Наименование, НаименованиеПолное, КодАльфа2, КодАльфа3"); + ЗаполнитьЗначенияСвойств(Результат, СтрокаДанных); + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Обновляет справочник стран мира по данным макета - классификатора. +// Идентификация существующих элементов в справочнике выполняется по полю Код. +// +// Параметры: +// Добавлять - Булево - если Истина, то добавляются страны, которые есть в классификаторе, +// но отсутствуют в справочнике стран мира. +// +Процедура ОбновитьСтраныМираПоКлассификатору(Знач Добавлять = Ложь) Экспорт + ВсеОшибки = ""; + + Фильтр = Новый Структура("Код"); + + // Сравнивать в запросе нельзя из-за возможной регистронезависимости базы данных. + Для Каждого СтрокаКлассификатора Из ТаблицаКлассификатора() Цикл + Фильтр.Код = СтрокаКлассификатора.Код; + Выборка = Справочники.СтраныМира.Выбрать(,, Фильтр); + СтранаНайдена = Выборка.Следующий(); + Если Не СтранаНайдена И Добавлять Тогда + // Добавление страны + Страна = Справочники.СтраныМира.СоздатьЭлемент(); + ИначеЕсли СтранаНайдена И ( + Выборка.Наименование <> СтрокаКлассификатора.Наименование + Или Выборка.КодАльфа2 <> СтрокаКлассификатора.КодАльфа2 + Или Выборка.КодАльфа3 <> СтрокаКлассификатора.КодАльфа3 + Или Выборка.НаименованиеПолное <> СтрокаКлассификатора.НаименованиеПолное) Тогда + // Изменение страны + Страна = Выборка.ПолучитьОбъект(); + Иначе + Продолжить; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + Если Не Страна.ЭтоНовый() Тогда + ЗаблокироватьДанныеДляРедактирования(Страна.Ссылка); + КонецЕсли; + ЗаполнитьЗначенияСвойств(Страна, СтрокаКлассификатора, "Код, Наименование, КодАльфа2, КодАльфа3, НаименованиеПолное"); + Страна.ДополнительныеСвойства.Вставить("НеПроверятьУникальность"); + Страна.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + Инфо = ИнформацияОбОшибке(); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Ошибка записи страны мира %1 (код %2) при обновлении классификатора, %3'"), + Выборка.Код, Выборка.Наименование, КраткоеПредставлениеОшибки(Инфо)); + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка,,, + ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(Инфо)); + ВсеОшибки = ВсеОшибки + Символы.ПС + ТекстОшибки; + ОтменитьТранзакцию(); + КонецПопытки; + + КонецЦикла; + + Если Не ПустаяСтрока(ВсеОшибки) Тогда + ВызватьИсключение СокрЛП(ВсеОшибки); + КонецЕсли; +КонецПроцедуры + +// Создает или возвращает существующую ссылку по данным классификатора. +// +// Параметры: +// Отбор - Структура - содержит поле: +// * Код - Строка - для поиска страны в классификаторе. +// Данные - Структура - для заполнения одноименных оставшихся полей создаваемого объекта. +// +// Возвращаемое значение: +// СправочникСсылка.СтраныМира - ссылка на созданный элемент. +// +Функция СсылкаПоДаннымКлассификатора(Знач Отбор, Знач ДополнительныеДанные = Неопределено) Экспорт + + // Убеждаемся, что страна есть в классификаторе. + ДанныеПоиска = ДанныеКлассификатораСтранМираПоКоду(Отбор.Код); + Если ДанныеПоиска=Неопределено Тогда + ВызватьИсключение НСтр("ru='Некорректный код страны мира для поиска в классификаторе'"); + КонецЕсли; + + // Проверяем на существование в справочнике по данным классификатора. + ДанныеПоиска = ДанныеСтраныМира(ДанныеПоиска.Код, ДанныеПоиска.Наименование); + Результат = ДанныеПоиска.Ссылка; + Если Не ЗначениеЗаполнено(Результат) Тогда + ОбъектСтраны = Справочники.СтраныМира.СоздатьЭлемент(); + ЗаполнитьЗначенияСвойств(ОбъектСтраны, ДанныеПоиска); + Если ДополнительныеДанные<>Неопределено Тогда + ЗаполнитьЗначенияСвойств(ОбъектСтраны, ДополнительныеДанные); + КонецЕсли; + ОбъектСтраны.Записать(); + Результат = ОбъектСтраны.Ссылка; + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Возвращает флаг возможности добавления и изменения элементов. +// +Функция ЕстьПравоДобавления() Экспорт + + Возврат ПравоДоступа("Добавление", Метаданные.Справочники.СтраныМира); + +КонецФункции + +// Возвращает поля поиска в порядке предпочтения для справочника стран мира. +// +// Возвращаемое значение: +// Массив - содержит структуры с полями: +// * Имя - Строка - имя реквизита поиска. +// * ШаблонПредставления - Строка - шаблон для формирования значения представления по именам реквизитов, +// например: "%1.Наименование (%1.Код)". Здесь "Наименование" и "Код" - имена +// реквизитов, +// "%1" - заполнитель для передачи псевдонима таблицы. +// +Функция ПоляПоиска() + Результат = Новый Массив; + СписокПолей = Справочники.СтраныМира.ПустаяСсылка().Метаданные().ВводПоСтроке; + ГраницаПолей = СписокПолей.Количество() - 1; + ВсеИменаСтрокой = ""; + + ПредставлениеРазделителя = ", "; + РазделительПредставлений = " + """ + ПредставлениеРазделителя + """ + "; + + Для Индекс=0 По ГраницаПолей Цикл + ИмяПоля = СписокПолей[Индекс].Имя; + ВсеИменаСтрокой = ВсеИменаСтрокой + "," + ИмяПоля; + + ШаблонПредставления = "%1." + ИмяПоля; + + ОстальныеПоля = ""; + Для Позиция=0 По ГраницаПолей Цикл + Если Позиция<>Индекс Тогда + ОстальныеПоля = ОстальныеПоля + РазделительПредставлений + СписокПолей[Позиция].Имя; + КонецЕсли; + КонецЦикла; + Если Не ПустаяСтрока(ОстальныеПоля) Тогда + ШаблонПредставления = ШаблонПредставления + + " + "" ("" + " + + "%1." + Сред(ОстальныеПоля, СтрДлина(РазделительПредставлений) + 1) + + " + "")"""; + КонецЕсли; + + Результат.Добавить( + Новый Структура("Имя, ШаблонПредставления", ИмяПоля, ШаблонПредставления)); + КонецЦикла; + + Возврат Новый Структура("СписокПолей, ИменаПолейСтрокой", Результат, Сред(ВсеИменаСтрокой, 2)); +КонецФункции + +// Возвращает полные данные ОКСМ классификатора. +// +// Возвращаемое значение: +// ТаблицаЗначений - данные классификатора с колонками: +// * Код - Строка - данные страны. +// * Наименование - Строка - данные страны. +// * НаименованиеПолное - Строка - данные страны. +// * КодАльфа2 - Строка - данные страны. +// * КодАльфа3 - Строка - данные страны. +// +// Таблица значений проиндексирована по полям "Код", "Наименование". +// +Функция ТаблицаКлассификатора() Экспорт + Макет = Справочники.СтраныМира.ПолучитьМакет("Классификатор"); + + Чтение = Новый ЧтениеXML; + Чтение.УстановитьСтроку(Макет.ПолучитьТекст()); + + Возврат СериализаторXDTO.ПрочитатьXML(Чтение); +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + // Приводит код страны к единому виду - строка длиной три символа. // Функция КодСтраныМира(Знач КодСтраны) @@ -510,8 +516,6 @@ Возврат """" + СтрЗаменить(Строка, """", """""") + """"; КонецФункции -#КонецЕсли - // Экранирует символы для использования в функции запроса ПОДОБНО. // Функция ЭкранироватьСимволыПодобия(Знач Текст, Знач СпецСимвол = "\") @@ -527,3 +531,5 @@ КонецФункции #КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Catalogs/СтраныМира/Templates/Классификатор/Template.txt b/SSL/src/Catalogs/СтраныМира/Templates/Классификатор/Template.txt index 565277785..2e11ff3af 100644 --- a/SSL/src/Catalogs/СтраныМира/Templates/Классификатор/Template.txt +++ b/SSL/src/Catalogs/СтраныМира/Templates/Классификатор/Template.txt @@ -382,7 +382,7 @@ <Value>GM</Value> <Value>GMB</Value> <Value>270</Value> - <Value>Республика Гамбия</Value> + <Value>Исламская Республика Гамбия</Value> </row> <row> <Value>ГАНА</Value> @@ -1378,7 +1378,7 @@ <Value>GB</Value> <Value>GBR</Value> <Value>826</Value> - <Value>Соединенное Королевство Великобритании</Value> + <Value>Соединенное Королевство Великобритании и Северной Ирландии</Value> </row> <row> <Value>СОЕДИНЕННЫЕ ШТАТЫ</Value> @@ -1620,10 +1620,11 @@ <Value>499</Value> </row> <row> - <Value>ЧЕШСКАЯ РЕСПУБЛИКА</Value> + <Value>ЧЕХИЯ</Value> <Value>CZ</Value> <Value>CZE</Value> <Value>203</Value> + <Value>Чешская республика</Value> </row> <row> <Value>ЧИЛИ</Value> diff --git a/SSL/src/Catalogs/СтроковыеКонтактыВзаимодействий/ManagerModule.bsl b/SSL/src/Catalogs/СтроковыеКонтактыВзаимодействий/ManagerModule.bsl index c7409f434..5e8e3b434 100644 --- a/SSL/src/Catalogs/СтроковыеКонтактыВзаимодействий/ManagerModule.bsl +++ b/SSL/src/Catalogs/СтроковыеКонтактыВзаимодействий/ManagerModule.bsl @@ -5,9 +5,11 @@ //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. -// Возвращает список реквизитов, которые не разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form index 243094d60..1ce01b198 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Form.form @@ -349,6 +349,10 @@ <headerHorizontalAlign>Left</headerHorizontalAlign> <showInFooter>true</showInFooter> <extInfo xsi:type="form:InputFieldExtInfo"> + <handlers> + <event>ChoiceProcessing</event> + <name>НастройкиОбменаУзелИнформационнойБазыОбработкаВыбора</name> + </handlers> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <wrap>true</wrap> @@ -873,6 +877,26 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>СписокУзловОбмена</name> + <title> + <key>ru</key> + <value>Список узлов обмена</value> + + 3 + + ValueList + + + true + + + true + + + + + НастроитьРасписаниеРегламентногоЗадания diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Help/ru.html index d6b8fc387..f67a9866a 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Основное назначение сценария - это выполнение <a href="CommonForm.СинхронизацияДанных/Help">синхронизации данных</a> автоматически по заданному расписанию. Сценарий необходим для задания расписания и порядка отправки и получения данных. </p> <p>Не рекомендуется выполнять только отправку данных или только получение данных, хотя сценарий позволяет это сделать. Рекомендуется выполнять полноценную синхронизацию данных в одном сценарии.</p> <h3>Настройка сценария синхронизации</h3> diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl index bfe914760..10a766832 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl @@ -1,9 +1,13 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем НомерОбрабатываемойСтроки; &НаКлиенте Перем КоличествоСтрок; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -30,21 +34,21 @@ РасписаниеРегламентногоЗадания = Справочники.СценарииОбменовДанными.РасписаниеРегламентногоЗаданияПоУмолчанию(); Объект.ИспользоватьРегламентноеЗадание = Истина; - Иначе - // Получаем расписание из самого регламентного задания // если РЗ не задано, то расписание = Неопределено и будет создано на клиенте в момент редактирования расписания. РасписаниеРегламентногоЗадания = Справочники.СценарииОбменовДанными.ПолучитьРасписаниеВыполненияОбменаДанными(Объект.Ссылка); - КонецЕсли; Если Не ЭтоНовый Тогда - ОбновитьСостоянияОбменовДанными(); - КонецЕсли; + ПланыОбменаБСП = ОбменДаннымиПовтИсп.ПланыОбменаБСП(); + Для Каждого ИмяПланаОбмена Из ПланыОбменаБСП Цикл + СписокУзловОбмена.Добавить(Тип("ПланОбменаСсылка." + ИмяПланаОбмена)); + КонецЦикла; + КонецПроцедуры &НаКлиенте @@ -124,6 +128,19 @@ КонецПроцедуры +&НаКлиенте +Процедура НастройкиОбменаУзелИнформационнойБазыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + Если ТипЗнч(ВыбранноеЗначение) = Тип("Тип") И СписокУзловОбмена.НайтиПоЗначению(ВыбранноеЗначение) = Неопределено Тогда + ТекстСообщения = НСтр("ru = 'Данные выбранного типа не могут быть использованы в этой форме. + |Выберите другой тип данных.'"); + Поле = СтрШаблон("НастройкиОбмена[%1].УзелИнформационнойБазы", Элементы.СоставРасписания.ТекущиеДанные.НомерСтроки-1); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , Поле, "Объект"); + СтандартнаяОбработка = Ложь; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Help/ru.html b/SSL/src/Catalogs/СценарииОбменовДанными/Help/ru.html index 04a27f5ca..de0d84de4 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для настройки и хранения сценариев синхронизации данных.</p> <p>Открыть список можно из раздела <strong>Синхронизация данных</strong> по соответствующей команде. Также можно открыть список сценариев из списка <strong>Синхронизация данных</strong> по соответствующей команде меню <strong>Еще</strong>.</p> <p>В списке выводится:</p> diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl index 6ddb9893c..b5bca7b9b 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl @@ -1,5 +1,22 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ПрограммныйИнтерфейс + +// Возвращает реквизиты объекта, которые не рекомендуется редактировать +// с помощью обработки группового изменения реквизитов. +// +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. +Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт + + Результат = Новый Массив; + Результат.Добавить("РегламентноеЗаданиеGUID"); + Возврат Результат; + +КонецФункции + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Процедура СоздатьСценарий(УзелИнформационнойБазы, Расписание = Неопределено) Экспорт @@ -70,53 +87,6 @@ Возврат Расписание; КонецФункции -// Возвращает ссылку на узел плана обмена, которая указана в первой строке настройки выполнения обмена. -// -// Параметры: -// НастройкаВыполненияОбмена - СправочникСсылка.СценарииОбменовДанными - настройка обмена из которой необходимо -// получить узел плана обмена. -// -// Возвращаемое значение: -// -// ПланОбменаСсылка - ссылка на узел плана обмена, которая указана в первой строке настройки выполнения обмена; -// если строк нет, то возвращается Неопределено. -// -Функция ПолучитьУзелИнформационнойБазыИзПервойСтрокиНастройки(НастройкаВыполненияОбмена) Экспорт - - // Возвращаемое значение функции. - УзелИнформационнойБазы = Неопределено; - - Если НастройкаВыполненияОбмена.Пустая() Тогда - Возврат УзелИнформационнойБазы; - КонецЕсли; - - ТекстЗапроса = " - |ВЫБРАТЬ ПЕРВЫЕ 1 - | НастройкиВыполненияОбменаНастройкиОбмена.УзелИнформационнойБазы КАК УзелИнформационнойБазы - |ИЗ - | Справочник.СценарииОбменовДанными.НастройкиОбмена КАК НастройкиВыполненияОбменаНастройкиОбмена - |ГДЕ - | НастройкиВыполненияОбменаНастройкиОбмена.Ссылка = &Ссылка - |"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("Ссылка", НастройкаВыполненияОбмена); - - РезультатЗапроса = Запрос.Выполнить(); - - Если Не РезультатЗапроса.Пустой() Тогда - - Выборка = РезультатЗапроса.Выбрать(); - Выборка.Следующий(); - - УзелИнформационнойБазы = Выборка.УзелИнформационнойБазы; - - КонецЕсли; - - Возврат УзелИнформационнойБазы; -КонецФункции - // Получает расписание регламентного задания. // Если регламентное задание не задано, то возвращает пустое расписание (по умолчанию). // @@ -435,20 +405,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Групповое изменение объектов. - -// Возвращает список реквизитов, которые не нужно редактировать -// с помощью обработки группового изменения объектов. -// -Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт - - Результат = Новый Массив; - Результат.Добавить("РегламентноеЗаданиеGUID"); - Возврат Результат; - -КонецФункции - #КонецОбласти #КонецЕсли diff --git a/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ManagerModule.bsl index 6b0f37643..c870ef204 100644 --- a/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ManagerModule.bsl @@ -2,9 +2,11 @@ #Область ПрограммныйИнтерфейс -// Возвращает список реквизитов, которые разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Возврат ПрисоединенныеФайлы.РеквизитыРедактируемыеВГрупповойОбработке(); diff --git a/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ТелефонныйЗвонокПрисоединенныеФайлы.mdo b/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ТелефонныйЗвонокПрисоединенныеФайлы.mdo index 2dbd346c4..9f2b6ec62 100644 --- a/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ТелефонныйЗвонокПрисоединенныеФайлы.mdo +++ b/SSL/src/Catalogs/ТелефонныйЗвонокПрисоединенныеФайлы/ТелефонныйЗвонокПрисоединенныеФайлы.mdo @@ -656,6 +656,43 @@ <dataHistory>Use</dataHistory> <fullTextSearch>Use</fullTextSearch> </attributes> + <attributes uuid="aa63c001-c3da-4179-8fd8-fe2ff510511e"> + <name>ДатаПроверкиПодписи</name> + <synonym> + <key>ru</key> + <value>Дата проверки подписи</value> + </synonym> + <type> + <types>Date</types> + <dateQualifiers/> + </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> + <attributes uuid="b2e894b0-6443-4a52-95b6-6b564f809680"> + <name>ПодписьВерна</name> + <synonym> + <key>ru</key> + <value>Подпись верна</value> + </synonym> + <type> + <types>Boolean</types> + </type> + <toolTip> + <key>ru</key> + <value>Результат последней проверки подписи.</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + <fullTextSearch>Use</fullTextSearch> + </attributes> </tabularSections> <tabularSections uuid="8010065f-aec8-4768-85ec-9eb7b2b01e7e"> <producedTypes> diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Form.form index 027a17baa..198964faf 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Form.form @@ -452,6 +452,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -524,6 +525,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Help/ru.html index 4114ec267..9e960d98d 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Описание свойств тома хранения файлов.</p> <p>При создании нового тома автоматически проверяется доступ к указанному в поле <strong>Полный путь</strong> каталогу, в случае ошибки выводится соответствующее сообщение.  Уже созданному тому нельзя поменять пути.</p> <p>Для каждого тома необходимо указать:</p> @@ -12,7 +12,13 @@ <ul><li>Если сервер 1С:Предприятия работает под Linux, то путь к тому хранения файлов можно указать только локальный, например <strong>/home/path</strong>. Для того чтобы использовать UNC путь, нужно сделать на него ссылку.  Для этого под правами администратора сделайте следующее: <ul><li>выполните команду вида <strong>mkdir folder</strong>, где вместо "folder" напишите имя своего каталога. Например, в каталоге <strong>/home</strong> выполните команду <strong>mkdir shared</strong> - будет создан каталог shared с полным путем <strong>/home/shared</strong>. </li><li>выполните команду вида <strong> mount -t cifs //server/share folder -o //domain/user, password=pwd</strong>, где<br>   - где <strong>//server/share</strong> - UNC путь к другому компьютеру , <strong>folder</strong> - путь к каталогу на Linux компьютере, например <strong>\home\shared</strong>, <strong>//domain/user</strong> - имя домена/пользователя, если необходимо, <strong>pwd</strong> - пароль пользователя (если необходимо). -</li><li> Если имя и пароль не нужны, команда выглядит так: <strong> mount -t cifs //server/share folder</strong>.</li></ul></li><li>После этого в пути к тому указываем <strong>folder</strong>, например <strong>/home/shared</strong>.</li></ul><h3>Просмотр списка файлов в томе</h3> +</li><li> Если имя и пароль не нужны, команда выглядит так: <strong> mount -t cifs //server/share folder</strong>.</li></ul></li><li>После этого в пути к тому указываем <strong>folder</strong>, например <strong>/home/shared</strong>.</li></ul><h3>Проверка целостности тома</h3> +<ul><li> +<div>Нажмите <strong>Проверить целостность</strong>, для того чтобы сформировать отчет о целостности данных в томе. Выводится общее количество файлов и процент целостных данных.</div></li></ul><h3>Удаление лишних файлов</h3> +<ul><li> +<div>Нажмите <strong>Удалить лишние файлы</strong>, для того чтобы удалить файлы, которые есть на диске, но сведения о них в базе отсутствуют. </div> +</li><li> +<div>Предусмотрена возможность сохранить такие файлы в указанный каталог. С помощью кнопки <img src="StdPicture.InputFieldSelect"></img> укажите <strong>Путь каталога для копирования</strong>.</div></li></ul><h3>Просмотр списка файлов в томе</h3> <ul><li>В каждом томе файлы хранятся в подкаталогах. На каждую дату создания версии файла создается свой подкаталог. Все файлы хранятся с оригинальным именем и расширением, между ними добавляется номер версии, например "Приказ.2.txt". </li><li>Для того чтобы просмотреть <a href="CommonForm.ФайлыВТоме/Help">список файлов в томе</a>, выполните команду <strong>Файлы в томе</strong> на панели навигации тома. </li></ul><h3>См. также:</h3> <ul><li> diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl index 05c9e8fa0..2cacea4e8 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ТекущиеПараметрыЗаписи; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -135,11 +139,11 @@ Объект.ПолныйПутьLinux = СокрЛП(Объект.ПолныйПутьLinux); КонецЕсли; - Если Не СтрЗаканчиваетсяНа(Объект.ПолныйПутьLinux, "\") Тогда - Объект.ПолныйПутьLinux = Объект.ПолныйПутьLinux + "\"; + Если Не СтрЗаканчиваетсяНа(Объект.ПолныйПутьLinux, "/") Тогда + Объект.ПолныйПутьLinux = Объект.ПолныйПутьLinux + "/"; КонецЕсли; - Если СтрЗаканчиваетсяНа(Объект.ПолныйПутьLinux, "\\") Тогда + Если СтрЗаканчиваетсяНа(Объект.ПолныйПутьLinux, "//") Тогда Объект.ПолныйПутьLinux = Лев(Объект.ПолныйПутьLinux, СтрДлина(Объект.ПолныйПутьLinux) - 1); КонецЕсли; @@ -172,7 +176,7 @@ &НаКлиенте Процедура УдалитьЛишниеФайлы(Команда) ПараметрыОткрытия = Новый Структура("ТомХраненияФайлов", Объект.Ссылка); - ОткрытьФорму("Справочник.ТомаХраненияФайлов.Форма.УдалениеЛишнихФайловИзТома", ПараметрыОткрытия, ЭтаФорма); + ОткрытьФорму("Справочник.ТомаХраненияФайлов.Форма.УдалениеЛишнихФайловИзТома", ПараметрыОткрытия, ЭтотОбъект); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html b/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html index 83a870725..f6d5b891f 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для управления томами хранения файлов.</p> <p>Используется в том случае, если установлен режим хранения файлов <strong>В томах на диске</strong>. Для этого в разделе <strong>Администрирование - Настройки работы с файлами</strong> включите флажок <strong>Хранить файлы в томах на диске</strong>,  после этого в разделах <strong>Администрирование - Настройки работы с файлами</strong> становится доступной команда <strong>Тома хранения файлов</strong>, по которой открывается список. </p> <p>В списке выводится:</p> diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/ManagerModule.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/ManagerModule.bsl index 78290d3aa..e0b3a1050 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/ManagerModule.bsl +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/ManagerModule.bsl @@ -2,9 +2,11 @@ #Область ПрограммныйИнтерфейс -// Возвращает список реквизитов, которые разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт РедактируемыеРеквизиты = Новый Массив; diff --git a/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Form.form new file mode 100644 index 000000000..f3cb04439 --- /dev/null +++ b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Form.form @@ -0,0 +1,811 @@ +<?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>4</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Объект.Description</segments> + </dataPath> + <extendedTooltip> + <name>НаименованиеРасширеннаяПодсказка</name> + <id>6</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>НаименованиеКонтекстноеМеню</name> + <id>5</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <editMode>Auto</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <width>30</width> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <horizontalStretch>true</horizontalStretch> + <wrap>true</wrap> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> + <items xsi:type="form:FormGroup"> + <name>ГруппаНастройки</name> + <id>40</id> + <items xsi:type="form:FormGroup"> + <name>ГруппаСервисЛогин</name> + <id>42</id> + <items xsi:type="form:FormField"> + <name>СервисПредставление</name> + <id>60</id> + <title> + <key>ru</key> + <value>Сервис</value> + + true + true + + true + + + СервисПредставление + + + OnChange + СервисПредставлениеПриИзменении + + + СервисПредставлениеРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + + СервисПредставлениеКонтекстноеМеню + 61 + true + + InputField + Auto + true + Left + true + + 30 + true + true + true + true + true + true + + + ru + Яндекс.Диск + + + Яндекс.Диск + + + + + ru + 4shared.com + + + 4shared.com + + + + + ru + Box + + + Box + + + + + ru + iCloud + + + iCloud + + + + + ru + DrobBox (через dropdav.com) + + + Dropbox + + + Normal + + + + Логин + 31 + true + true + + true + + + Логин + + + ЛогинРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + ЛогинКонтекстноеМеню + 32 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа сервис логин</value> + + + ru + Группа сервис логин + + + ГруппаСервисЛогинРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаПапкаПароль + 29 + + КорневаяПапка + 37 + true + true + + true + + + Объект.КорневаяПапка + + + КорневаяПапкаРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + КорневаяПапкаКонтекстноеМеню + 38 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Пароль + 34 + true + true + + true + + + Пароль + + + ПарольРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + ПарольКонтекстноеМеню + 35 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Логин и пароль</value> + + + ru + Группа папка пароль + + + ГруппаПапкаПарольРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа настройки</value> + + + ru + Группа настройки + + + ГруппаНастройкиРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаАвторФайлов + 50 + + ВКачествеАвтораФайлов + 52 + + <key>ru</key> + <value>Эта учетная запись %1</value> + + true + true + + true + + + ВКачествеАвтораФайлов + + None + + OnChange + ВКачествеАвтораФайловПриИзменении + + + ВКачествеАвтораФайловРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + ВКачествеАвтораФайловКонтекстноеМеню + 53 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + Эта учетная запись + + + ПланОбмена + + + Vertical + + + + ГруппаАвторПользователь + 55 + + ВКачествеАвтораФайловПользователь + 57 + + <key>ru</key> + <value>Выбранный пользователь</value> + + true + true + + true + + + ВКачествеАвтораФайлов + + None + + OnChange + ВКачествеАвтораФайловПользовательПриИзменении + + + ВКачествеАвтораФайловПользовательРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + + ВКачествеАвтораФайловПользовательКонтекстноеМеню + 58 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + Пользователь: + + + Пользователь + + + Vertical + + + + АвторФайлов + 44 + true + true + + true + + + Объект.АвторФайлов + + None + + АвторФайловРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + АвторФайловКонтекстноеМеню + 45 + true + + InputField + Enter + true + Left + true + + 35 + true + true + false + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа автор пользователь</value> + + + ru + Группа автор пользователь + + + ГруппаАвторПользовательРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ДекорацияПояснениеАвтораФайлов + 47 + + <key>ru</key> + <value>Если файлы в облаке редактирует только один пользователь, то рекомендуется указать его в качестве автора новых и измененных файлов.</value> + + true + true + + true + + + ДекорацияПояснениеАвтораФайловРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + + ДекорацияПояснениеАвтораФайловКонтекстноеМеню + 48 + true + + Label + 90 + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Автор файлов</value> + + + ru + Группа автор файлов + + + ГруппаАвторФайловРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + + ФормаПроверитьНастройки + 63 + true + true + + true + + + ФормаПроверитьНастройкиРасширеннаяПодсказка + 64 + Label + true + true + + Left + + + Form.Command.ПроверитьНастройки + Normal + Auto + true + true + UserCmds + Auto + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + CatalogObject.УчетныеЗаписиСинхронизацииФайлов + + + true + + + true + +
        true
        + true +
        + + Логин + + <key>ru</key> + <value>Логин</value> + + 3 + + String + + + + true + + + true + + ShowError + true + + + Пароль + + <key>ru</key> + <value>Пароль</value> + + 4 + + String + + + + true + + + true + + ShowError + true + + + ВКачествеАвтораФайлов + + <key>ru</key> + <value>В качестве автора файлов</value> + + 5 + + String + + + + true + + + true + + + + СервисПредставление + + <key>ru</key> + <value>Сервис представление</value> + + 6 + + String + + + + true + + + true + + ShowError + + + ПроверитьНастройки + + <key>ru</key> + <value>Проверить настройки</value> + + 1 + + ru + Проверить настройки + + + true + + + + ПроверитьНастройки + + + DontUse + Auto + + + + + + + + OnReadAtServer + ПриЧтенииНаСервере + + + OnWriteAtServer + ПриЗаписиНаСервере + + + diff --git a/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Module.bsl new file mode 100644 index 000000000..b6ed7d15f --- /dev/null +++ b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Forms/ФормаЭлемента/Module.bsl @@ -0,0 +1,171 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Ключ.Пустая() Тогда + Объект.Код = Строка(Новый УникальныйИдентификатор()); + КонецЕсли; + + Если ЗначениеЗаполнено(Объект.АвторФайлов) Тогда + ВКачествеАвтораФайлов = "Пользователь"; + Элементы.АвторФайлов.Доступность = Истина; + Иначе + ВКачествеАвтораФайлов = "ПланОбмена"; + Элементы.АвторФайлов.Доступность = Ложь; + КонецЕсли; + + Если Не ПустаяСтрока(Объект.Сервис) Тогда + Если Объект.Сервис = "https://webdav.yandex.ru" Тогда + СервисПредставление = "Яндекс.Диск" + ИначеЕсли Объект.Сервис = "https://webdav.4shared.com" Тогда + СервисПредставление = "4shared.com" + ИначеЕсли Объект.Сервис = "https://dav.box.com/dav" Тогда + СервисПредставление = "Box" + ИначеЕсли Объект.Сервис = "https://dav.dropdav.com" Тогда + СервисПредставление = "Dropbox" + КонецЕсли; + КонецЕсли; + + Если Не ПустаяСтрока(Объект.Наименование) Тогда + Элементы.ВКачествеАвтораФайлов.СписокВыбора[0].Представление = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ВКачествеАвтораФайлов.Заголовок, "(" + Объект.Наименование + ")"); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + Если Не Отказ Тогда + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Ссылка, Логин, "Логин"); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Ссылка, Пароль); + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + УстановитьПривилегированныйРежим(Истина); + Логин = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(ТекущийОбъект.Ссылка,"Логин"); + Пароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(ТекущийОбъект.Ссылка); + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура СервисПредставлениеПриИзменении(Элемент) + + Модифицированность = Истина; + + Если СервисПредставление = "Яндекс.Диск" Тогда + Объект.Сервис = "https://webdav.yandex.ru" + ИначеЕсли СервисПредставление = "4shared.com" Тогда + Объект.Сервис = "https://webdav.4shared.com" + ИначеЕсли СервисПредставление = "Box" Тогда + Объект.Сервис = "https://dav.box.com/dav" + ИначеЕсли СервисПредставление = "Dropbox" Тогда + Объект.Сервис = "https://dav.dropdav.com" + Иначе + Объект.Сервис = ""; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВКачествеАвтораФайловПриИзменении(Элемент) + + Объект.АвторФайлов = Неопределено; + Элементы.АвторФайлов.Доступность = Ложь; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ПроверитьНастройки(Команда) + + ОчиститьСообщения(); + + Если Объект.Ссылка.Пустая() Или Модифицированность Тогда + ОписаниеОповещения = Новый ОписаниеОповещения("ПроверитьНастройкиЗавершение", ЭтотОбъект); + ТекстВопроса = НСтр("ru = 'Для проверки настроек необходимо записать данные учетной записи. Продолжить?'"); + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("Продолжить", НСтр("ru = 'Продолжить'")); + Кнопки.Добавить(КодВозвратаДиалога.Отмена); + ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, Кнопки); + Иначе + ПроверитьВозможностьСинхронизацииСОблачнымСервисом(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ПроверитьНастройкиЗавершение(РезультатДиалога, ДополнительныеПараметры) Экспорт + + Если РезультатДиалога <> "Продолжить" Тогда + Возврат; + КонецЕсли; + + Если Не Записать() Тогда + Возврат; + КонецЕсли; + + ПроверитьВозможностьСинхронизацииСОблачнымСервисом(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьВозможностьСинхронизацииСОблачнымСервисом() + + Состояние(НСтр("ru = 'Проверка учетной записи'"),,НСтр("ru = 'Выполняется проверка учетной записи. Подождите...'")); + + СообщениеОбОшибке = ""; + СтруктураРезультата = Неопределено; + + ВыполнитьПроверкуПодключения(Объект.Ссылка, СтруктураРезультата); + + РезультатПротокол = СтруктураРезультата.РезультатПротокол; + РезультатТекст = СтруктураРезультата.РезультатТекст; + + Если СтруктураРезультата.Отказ Тогда + ПоказатьПредупреждение(Неопределено, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Проверка параметров учетной записи завершилась с ошибками. + |Проверьте правильность задания корневой папки, логина и пароля. + | + |Технические подробности: + | + |%1'"), + СтроковыеФункцииКлиентСервер.ИзвлечьТекстИзHTML(РезультатПротокол)),, + НСтр("ru = 'Проверка учетной записи'")); + Иначе + ПоказатьПредупреждение(Неопределено, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Проверка параметров учетной записи завершилась успешно. + |%1'"), + РезультатТекст),, + НСтр("ru = 'Проверка учетной записи'")); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ВыполнитьПроверкуПодключения(УчетнаяЗапись, СтруктураРезультата) + ФайловыеФункцииСлужебный.ВыполнитьПроверкуПодключения(УчетнаяЗапись, СтруктураРезультата); +КонецПроцедуры + +&НаКлиенте +Процедура ВКачествеАвтораФайловПользовательПриИзменении(Элемент) + + Элементы.АвторФайлов.Доступность = Истина; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Help/ru.html b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Help/ru.html new file mode 100644 index 000000000..468bc400a --- /dev/null +++ b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/Help/ru.html @@ -0,0 +1,15 @@ + +

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

        +

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

        +

        Ввод новой учетной записи

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

        Проверка учетной записи

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

        См. также:

        + \ No newline at end of file diff --git a/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/УчетныеЗаписиСинхронизацииФайлов.mdo b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/УчетныеЗаписиСинхронизацииФайлов.mdo new file mode 100644 index 000000000..c65358ae6 --- /dev/null +++ b/SSL/src/Catalogs/УчетныеЗаписиСинхронизацииФайлов/УчетныеЗаписиСинхронизацииФайлов.mdo @@ -0,0 +1,185 @@ + + + + + + + + + + УчетныеЗаписиСинхронизацииФайлов + + 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 + + + ru + + + Managed + Use + + ru + Учетная запись синхронизации файлов + + 2 + true + 9 + 25 + String + Variable + true + true + AsDescription + InDialog + BothWays + Catalog.УчетныеЗаписиСинхронизацииФайлов.Form.ФормаЭлемента + + Сервис + + ru + Сервис + + + String + + 100 + + + + ru + Адрес сервера Webdav + + + + ShowError + + Use + Use + + + КорневаяПапка + + ru + Корневая папка + + + String + + 30 + + + + + + Use + Use + + + АвторФайлов + + ru + Автор файлов + + + CatalogRef.ВнешниеПользователи + CatalogRef.Пользователи + + + + + Use + Use + + + ФормаЭлемента + + ru + Форма элемента + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form index ccf9a6539..ca8df83d9 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Form.form @@ -199,7 +199,7 @@ Cann't connect to example.com, 110: Refused true true - 2 + 3 true false true @@ -221,10 +221,6 @@ Cann't connect to example.com, 110: Refused true - - <key>ru</key> - <value> </value> - ru Учетная запись не настроена картинка и надпись @@ -753,6 +749,7 @@ Cann't connect to example.com, 110: Refused Vertical auto + false @@ -1355,6 +1352,7 @@ Cann't connect to example.com, 110: Refused Vertical auto + false @@ -1890,26 +1888,27 @@ Cann't connect to example.com, 110: Refused - УдалятьПисьмаССервера + НастройкаУдаленияПисем 140 - УдалятьПисьмаССервераЧерез - 142 - - <key>ru</key> - <value>Удалять письма с сервера через</value> - + УдалятьПисьмаССервера + 244 true true true - УдалятьПисьмаССервераЧерез + УдалятьПисьмаССервера + Right + + OnChange + УдалятьПисьмаССервераПриИзменении + - УдалятьПисьмаССервераЧерезРасширеннаяПодсказка - 144 + УдалятьПисьмаССервераРасширеннаяПодсказка + 246 Label true true @@ -1918,8 +1917,42 @@ Cann't connect to example.com, 110: Refused - УдалятьПисьмаССервераЧерезКонтекстноеМеню - 143 + УдалятьПисьмаССервераКонтекстноеМеню + 245 + true + + CheckBoxField + Enter + true + Left + true + + + + ПериодХраненияСообщенийНаСервере + 241 + true + true + + true + + + ПериодХраненияСообщенийНаСервере + + None + + ПериодХраненияСообщенийНаСервереРасширеннаяПодсказка + 243 + Label + true + true + + Left + + + + ПериодХраненияСообщенийНаСервереКонтекстноеМеню + 242 true InputField @@ -1984,14 +2017,14 @@ Cann't connect to example.com, 110: Refused <key>ru</key> - <value>Удалять письма с сервера</value> + <value>Настройка удаления писем</value> ru - Удалять письма с сервера + Настройка удаления писем - УдалятьПисьмаССервераРасширеннаяПодсказка + НастройкаУдаленияПисемРасширеннаяПодсказка 141 Label true @@ -2069,6 +2102,7 @@ Cann't connect to example.com, 110: Refused Vertical auto + false @@ -2307,6 +2341,7 @@ Cann't connect to example.com, 110: Refused Vertical auto + false @@ -2485,6 +2520,7 @@ Cann't connect to example.com, 110: Refused Vertical auto + false @@ -2666,6 +2702,7 @@ vasyapupkin@example.com завершена. Vertical auto + false true @@ -2699,10 +2736,6 @@ vasyapupkin@example.com завершена. Отступ 197 - - <key>ru</key> - <value> </value> - true true @@ -2820,10 +2853,6 @@ vasyapupkin@example.com завершена. Заглушка 168 - - <key>ru</key> - <value> </value> - true true @@ -3374,26 +3403,6 @@ vasyapupkin@example.com завершена. true - - УдалятьПисьмаССервераЧерез - - <key>ru</key> - <value>Удалять письма с сервера через</value> - - 20 - - Number - - 3 - - - - true - - - true - - НазваниеУчетнойЗаписи @@ -3673,6 +3682,44 @@ vasyapupkin@example.com завершена.</value> <common>true</common> </edit> </attributes> + <attributes> + <name>ПериодХраненияСообщенийНаСервере</name> + <title> + <key>ru</key> + <value>Период хранения сообщений на сервере</value> + + 36 + + Number + + 3 + true + + + + true + + + true + + + + УдалятьПисьмаССервера + + <key>ru</key> + <value>Удалять письма с сервера через:</value> + + 37 + + Boolean + + + true + + + true + + Назад diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl index 807746f3d..2c97a3464 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ПомощникНастройкиУчетнойЗаписи/Module.bsl @@ -53,6 +53,21 @@ КонецЕсли; Иначе СсылкаНовойУчетнойЗаписи = Справочники.УчетныеЗаписиЭлектроннойПочты.ПолучитьСсылку(); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + МодульКонтактнаяИнформацияПользователя = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + КонтактнаяИнформацияПользователя = МодульКонтактнаяИнформацияПользователя.ЗначенияКонтактнойИнформацииОбъекта( + Пользователи.ТекущийПользователь(), Перечисления["ТипыКонтактнойИнформации"].АдресЭлектроннойПочты); + Для Каждого Контакт Из КонтактнаяИнформацияПользователя Цикл + Адрес = Контакт.Значение; + Если Справочники.УчетныеЗаписиЭлектроннойПочты.НайтиПоРеквизиту("АдресЭлектроннойПочты", Адрес).Пустая() Тогда + АдресЭлектроннойПочты = Адрес; + ТекущийЭлемент = Элементы.Пароль; + ИмяОтправителяПисем = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Пользователи.ТекущийПользователь(), "Наименование"); + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -86,6 +101,11 @@ ОбновитьДоступностьНастройкиДнейДоУдаления(); КонецПроцедуры +&НаКлиенте +Процедура УдалятьПисьмаССервераПриИзменении(Элемент) + ОбновитьДоступностьНастройкиДнейДоУдаления(); +КонецПроцедуры + &НаКлиенте Процедура АдресЭлектроннойПочтыПриИзменении(Элемент) НастройкиЗаполнены = Ложь; @@ -383,8 +403,8 @@ &НаКлиенте Процедура ОбновитьДоступностьНастройкиДнейДоУдаления() - Элементы.УдалятьПисьмаССервераЧерез.Доступность = ОставлятьКопииПисемНаСервере; - Элементы.НадписьДней.Доступность = Элементы.УдалятьПисьмаССервераЧерез.Доступность; + Элементы.УдалятьПисьмаССервера.Доступность = ОставлятьКопииПисемНаСервере; + Элементы.ПериодХраненияСообщенийНаСервере.Доступность = УдалятьПисьмаССервера; КонецПроцедуры &НаКлиенте @@ -444,7 +464,7 @@ Настройки.Вставить("ДлительностьОжиданияСервера", 30); Настройки.Вставить("ОставлятьКопииПисемНаСервере", Ложь); - Настройки.Вставить("УдалятьПисьмаССервераЧерез", 10); + Настройки.Вставить("ПериодХраненияСообщенийНаСервере", 10); Возврат Настройки; КонецФункции @@ -569,7 +589,7 @@ УчетнаяЗапись.ПользовательSMTP = ИмяПользователяДляОтправкиПисем; УчетнаяЗапись.ВремяОжидания = ДлительностьОжиданияСервера; УчетнаяЗапись.ОставлятьКопииСообщенийНаСервере = ОставлятьКопииПисемНаСервере; - УчетнаяЗапись.ПериодХраненияСообщенийНаСервере = УдалятьПисьмаССервераЧерез; + УчетнаяЗапись.ПериодХраненияСообщенийНаСервере = ?(ОставлятьКопииПисемНаСервере И УдалятьПисьмаССервера И Протокол = "POP", ПериодХраненияСообщенийНаСервере, 0); УчетнаяЗапись.ПротоколВходящейПочты = Протокол; УчетнаяЗапись.Наименование = НазваниеУчетнойЗаписи; УчетнаяЗапись.Записать(); @@ -631,9 +651,26 @@ &НаКлиенте Процедура НастроитьПараметрыПодключенияАвтоматически() + + СообщенияОбОшибках = НСтр("ru = 'Не удалось определить настройки подключения. + |Настройте параметры подключения вручную.'"); + + Если СтрНайти(НРег(АдресЭлектроннойПочты), "@gmail.com") > 0 Тогда + СообщенияОбОшибках = СообщенияОбОшибках + Символы.ПС + + НСтр("ru = 'См. также рекомендации по настройке почты Gmail: + |http://buh.ru/articles/documents/42429/#briefly_43166'"); + КонецЕсли; + + ПроверкаЗавершиласьСОшибками = Ложь; ПодобратьНастройкиУчетнойЗаписи(); - ПараметрыОбработчикаОжидания = Неопределено; - ПроверитьВыполнениеФоновогоЗадания(); + + Если ПроверкаЗавершиласьСОшибками Тогда + ПерейтиНаСледующуюСтраницу(); + Иначе + ПараметрыОбработчикаОжидания = Неопределено; + ПроверитьВыполнениеФоновогоЗадания(); + КонецЕсли; + КонецПроцедуры &НаСервере @@ -648,11 +685,15 @@ СтруктураПараметров.Вставить("ДляОтправки", ИспользоватьДляОтправки); СтруктураПараметров.Вставить("ДляПолучения", ИспользоватьДляПолучения); - РезультатФоновогоЗадания = ДлительныеОперации.ЗапуститьВыполнениеВФоне( - УникальныйИдентификатор, - ВыполняемыйМетод, - СтруктураПараметров, - НаименованиеЗадания); + Попытка + РезультатФоновогоЗадания = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификатор, + ВыполняемыйМетод, + СтруктураПараметров, + НаименованиеЗадания); + Исключение + ПроверкаЗавершиласьСОшибками = Истина; + КонецПопытки; КонецПроцедуры @@ -676,9 +717,6 @@ ЗаполнитьЗначенияСвойств(ЭтотОбъект, НайденныеНастройки); Если Не ПроверкаЗавершиласьСОшибками Тогда СоздатьУчетнуюЗапись(); - Иначе - СообщенияОбОшибках = НСтр("ru = 'Не удалось определить настройки подключения. - |Настройте параметры подключения вручную.'"); КонецЕсли; ПерейтиНаСледующуюСтраницу(); Иначе diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form index c28cb2ac9..fd21e4421 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form @@ -302,6 +302,7 @@ </items> <horizontalAlign>Left</horizontalAlign> </autoCommandBar> + <height>10</height> <windowOpeningMode>LockOwner</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> <autoTitle>true</autoTitle> @@ -332,15 +333,9 @@ </notDefaultUseAlwaysAttributes> <main>true</main> <extInfo xsi:type="form:DynamicListExtInfo"> - <queryText>ВЫБРАТЬ РАЗРЕШЕННЫЕ - СправочникУчетныеЗаписиЭлектроннойПочты.Ссылка, - СправочникУчетныеЗаписиЭлектроннойПочты.ИспользоватьДляОтправки -ИЗ - Справочник.УчетныеЗаписиЭлектроннойПочты КАК СправочникУчетныеЗаписиЭлектроннойПочты</queryText> <mainTable>Catalog.УчетныеЗаписиЭлектроннойПочты</mainTable> <dynamicDataRead>true</dynamicDataRead> <autoFillAvailableFields>true</autoFillAvailableFields> - <customQuery>true</customQuery> <autoSaveUserSettings>true</autoSaveUserSettings> <getInvisibleFieldPresentations>true</getInvisibleFieldPresentations> </extInfo> diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form index 16203c281..7b0318d45 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form @@ -782,6 +782,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1489,6 +1490,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1639,6 +1641,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html index 96f388958..cf4d99369 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Описание свойств учетной записи электронной почты.</p> <p>При вводе учетной записи большинство параметров проставляется программой по умолчанию в зависимости от настроек почтовых серверов учетной записи электронной почты.</p> <p>Для системных <a href="Catalog.УчетныеЗаписиЭлектроннойПочты/Help">учетных записей</a> рекомендуется запомнить пароль, для того чтобы программа могла рассылать сообщения от такой учетной записи без участия пользователя. Тем не менее, решение о хранении паролей в информационной базе принимается в каждом случае индивидуально.</p> diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl index 255ee6cca..025f7c56d 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем РазрешенияПолучены; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html index 9d864d21a..64baf9ed3 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для ведения учетных записей электронной почты, которые используются для получения и отправки электронных сообщений.</p> <p>Список можно открыть соответствующей командой в разделе <strong>Администрирование - Органайзер</strong>. </p> <p>В списке выводится:</p> diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl index dad4cda83..f59276b4f 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ManagerModule.bsl @@ -5,9 +5,11 @@ //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. -// Возвращает список реквизитов, которые не нужно редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; @@ -39,19 +41,6 @@ #Область СлужебныеПроцедурыИФункции -// Только для внутреннего использования. -Процедура ЗаполнитьРазрешения(СписокРазрешений) Экспорт - - РазрешенияУчетныхЗаписей = РазрешенияУчетныхЗаписей(); - Для Каждого УчетнаяЗапись Из РазрешенияУчетныхЗаписей Цикл - ОписаниеРазрешения = СписокРазрешений.Добавить(); - ОписаниеРазрешения.Ключ = УчетнаяЗапись.Ключ; - ОписаниеРазрешения.Разрешения = УчетнаяЗапись.Значения; - КонецЦикла; - -КонецПроцедуры - -// Только для внутреннего использования. Функция РазрешенияУчетныхЗаписей(УчетнаяЗапись = Неопределено) Экспорт Результат = Новый Соответствие; @@ -97,8 +86,25 @@ |ИЗ | СервераЭлектроннойПочты КАК СервераЭлектроннойПочты |ГДЕ - | (&Ссылка = НЕОПРЕДЕЛЕНО - | ИЛИ СервераЭлектроннойПочты.Ссылка = &Ссылка) + | &Ссылка = НЕОПРЕДЕЛЕНО + | + |СГРУППИРОВАТЬ ПО + | СервераЭлектроннойПочты.Протокол, + | СервераЭлектроннойПочты.Сервер, + | СервераЭлектроннойПочты.Порт, + | СервераЭлектроннойПочты.Ссылка + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | СервераЭлектроннойПочты.Ссылка, + | СервераЭлектроннойПочты.Протокол, + | СервераЭлектроннойПочты.Сервер, + | СервераЭлектроннойПочты.Порт + |ИЗ + | СервераЭлектроннойПочты КАК СервераЭлектроннойПочты + |ГДЕ + | СервераЭлектроннойПочты.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | СервераЭлектроннойПочты.Протокол, @@ -130,31 +136,6 @@ КонецФункции -// Только для внутреннего использования. -Функция РазрешенияУчетнойЗаписи(УчетнаяЗапись) Экспорт - - Для Каждого Результат Из РазрешенияУчетныхЗаписей(УчетнаяЗапись) Цикл - Возврат Результат.Значение; - КонецЦикла; - - Возврат Новый Массив; - -КонецФункции - -// Только для внутреннего использования. -Функция ЗапросНаВнешниеРазрешенияДляУчетнойЗаписи(Знач УчетнаяЗапись) Экспорт - - Возврат РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов( - РазрешенияУчетнойЗаписи(УчетнаяЗапись), УчетнаяЗапись); - -КонецФункции - -Функция УчетнаяЗаписьНастроена(УчетнаяЗапись) Экспорт - Параметры = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(УчетнаяЗапись, "АдресЭлектроннойПочты,СерверВходящейПочты,СерверИсходящейПочты"); - Возврат Не ПустаяСтрока(Параметры.АдресЭлектроннойПочты) - И (Не ПустаяСтрока(Параметры.СерверВходящейПочты) Или Не ПустаяСтрока(Параметры.СерверИсходящейПочты)); -КонецФункции - Процедура ОпределитьНастройкиУчетнойЗаписи(Параметры, АдресРезультата) Экспорт АдресЭлектроннойПочты = Параметры.АдресЭлектроннойПочты; diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo index 8e6566928..b6411eed3 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo @@ -373,7 +373,7 @@ </type> <toolTip> <key>ru</key> - <value>Число дней, которое должны храниться сообщения на сервере. Вычисляется как разница между текущей датой и датой когда сообщение было отправлено.</value> + <value>Число дней, которое должны храниться сообщения на сервере. Вычисляется как разница между текущей датой и датой получения (если письма хранятся в ИБ), или датой отправки (если письма не хранятся в ИБ)</value> </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> diff --git a/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Help/ru.html index 46dd7ca45..de2302736 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>В программу можно загрузить одновременно <a href="Catalog.Файлы.Form.ФормаИмпортаФайлов/Help">несколько выбранных файлов</a> или<a href="Catalog.Файлы.Form.ФормаИмпортаПапки/Help"> несколько папок с файлами</a> с диска на компьютере. Для этого необходимо выполнить соответствующие команды в <a href="Catalog.Файлы/Help">списке файлов</a>. </p> <p>Если один или несколько выбранных файлов превышают предельно допустимый размер, то программа выводит предупреждение со списком файлов, которые невозможно загрузить.</p> <p>Нажмите <strong>Продолжить</strong>, для того чтобы:</p> diff --git a/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Help/ru.html index 9db761360..dd9debe40 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.16421"></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 11.00.9600.18427"></meta></head><body> <p> <style>A:link { TEXT-DECORATION: none; COLOR: #006699 diff --git a/SSL/src/Catalogs/Файлы/Forms/ВыборСохраненияШифрованногоФайла/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ВыборСохраненияШифрованногоФайла/Help/ru.html index 0e897b9d4..caa3c97e0 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>В форме выбирается способ сохранения шифрованного файла при выполнении команды "<strong>Сохранить как</strong>".</p> <p>Если выбран режим сохранения "<strong>Сохранить шифрованный файл</strong>", то файл просто сохраняется нерасшифрованным.</p> <p>Если выбран режим "<strong>Расшифровать и сохранить</strong>", то файл при сохранении расшифровывается. В этом случае требуется ввести пароль для расшифровки.</p> diff --git a/SSL/src/Catalogs/Файлы/Forms/РедактированиеТекстовогоФайла/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/РедактированиеТекстовогоФайла/Help/ru.html index 33c820b19..bd2ca70bc 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.16421"></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 11.00.9600.18427"></meta></head><body> <p> <style>A:link { TEXT-DECORATION: none; COLOR: #006699 diff --git a/SSL/src/Catalogs/Файлы/Forms/РедактируемыеФайлы/Form.form b/SSL/src/Catalogs/Файлы/Forms/РедактируемыеФайлы/Form.form index ab4572c89..aa91dd26c 100644 --- a/SSL/src/Catalogs/Файлы/Forms/РедактируемыеФайлы/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/РедактируемыеФайлы/Form.form @@ -1348,6 +1348,9 @@ <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>Список.Ref</segments> </notDefaultUseAlwaysAttributes> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>Список.Расширение</segments> + </notDefaultUseAlwaysAttributes> <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>Список.Редактирует</segments> </notDefaultUseAlwaysAttributes> @@ -1369,7 +1372,8 @@ Файлы.ХранитьВерсии, Файлы.ВладелецФайла, Файлы.ТекущаяВерсияРазмер / 1024 КАК ТекущаяВерсияРазмер, - Файлы.ТекущаяВерсияАвтор КАК ТекущаяВерсияАвтор + Файлы.ТекущаяВерсияАвтор КАК ТекущаяВерсияАвтор, + Файлы.ТекущаяВерсияРасширение КАК Расширение ИЗ Справочник.Файлы КАК Файлы ГДЕ @@ -1417,6 +1421,26 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ЗапрещенныеРасширения</name> + <title> + <key>ru</key> + <value>Запрещенные расширения</value> + + 4 + + ValueList + + + true + + + true + + + + + ОткрытьФайл diff --git a/SSL/src/Catalogs/Файлы/Forms/РедактируемыеФайлы/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/РедактируемыеФайлы/Help/ru.html index 13da8b8ea..be7f2a5cc 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>В этом списке отображаются только файлы, занятые Вами для редактирования. Редактировать файлы можно в <a href="Catalog.Файлы.Form.Файлы/Help">списке файлов</a> или в <a href="Catalog.Файлы.Form.ФормаСпискаПрисоединенныхФайлов/Help">списке присоединенных файлов</a> объектов программы.</p> <p>Открывается по команде <strong>Редактируемые файлы</strong> раздела <strong>Органайзер</strong>.</p> <p>В списке выводятся сведения:</p> diff --git a/SSL/src/Catalogs/Файлы/Forms/РедактируемыеФайлы/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/РедактируемыеФайлы/Module.bsl index b400d35fc..c73287b51 100644 --- a/SSL/src/Catalogs/Файлы/Forms/РедактируемыеФайлы/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/РедактируемыеФайлы/Module.bsl @@ -32,6 +32,9 @@ ПоказыватьЗанятыеФайлыПриЗавершенииРаботы = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "НастройкиПрограммы", "ПоказыватьЗанятыеФайлыПриЗавершенииРаботы", Истина); + + ЗапрещенныеРасширения = ФайловыеФункцииСлужебный.СписокЗапрещенныхРасширений(); + КонецПроцедуры #КонецОбласти @@ -45,6 +48,17 @@ СтандартнаяОбработка = Ложь; + Если ЗапрещенныеРасширения.НайтиПоЗначению(Элементы.Список.ТекущиеДанные.Расширение) <> Неопределено Тогда + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ВыбраннаяСтрока", ВыбраннаяСтрока); + Оповещение = Новый ОписаниеОповещения("ВыбратьФайлПослеПодтверждения", ЭтотОбъект, ДополнительныеПараметры); + ПараметрыФормы = Новый Структура("Ключ", "ПередОткрытиемФайла"); + ПараметрыФормы.Вставить("ИмяФайла", + ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(Элементы.Список.ТекущиеДанные.Наименование, Элементы.Список.ТекущиеДанные.Расширение)); + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение); + Возврат; + КонецЕсли; + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(ВыбраннаяСтрока, УникальныйИдентификатор); РаботаСФайламиСлужебныйКлиент.ОткрытьФайлСОповещением(Неопределено, ДанныеФайла); @@ -90,6 +104,15 @@ Возврат; КонецЕсли; + Если ЗапрещенныеРасширения.НайтиПоЗначению(Элементы.Список.ТекущиеДанные.Расширение) <> Неопределено Тогда + Оповещение = Новый ОписаниеОповещения("ОткрытьФайлПослеПодтверждения", ЭтотОбъект); + ПараметрыФормы = Новый Структура("Ключ", "ПередОткрытиемФайла"); + ПараметрыФормы.Вставить("ИмяФайла", + ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(Элементы.Список.ТекущиеДанные.Наименование, Элементы.Список.ТекущиеДанные.Расширение)); + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение); + Возврат; + КонецЕсли; + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(Элементы.Список.ТекущаяСтрока, УникальныйИдентификатор); РаботаСФайламиКлиент.Открыть(ДанныеФайла); @@ -191,6 +214,29 @@ #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура ОткрытьФайлПослеПодтверждения(Результат, ДополнительныеПараметры) Экспорт + + Если Результат <> Неопределено И Результат = "Продолжить" Тогда + + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(Элементы.Список.ТекущаяСтрока, УникальныйИдентификатор); + РаботаСФайламиКлиент.Открыть(ДанныеФайла); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыбратьФайлПослеПодтверждения(Результат, ДополнительныеПараметры) Экспорт + + Если Результат <> Неопределено И Результат = "Продолжить" Тогда + ВыбраннаяСтрока = ДополнительныеПараметры.ВыбраннаяСтрока; + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(ВыбраннаяСтрока, УникальныйИдентификатор); + РаботаСФайламиСлужебныйКлиент.ОткрытьФайлСОповещением(Неопределено, ДанныеФайла); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура УстановитьДоступностьКоманд() diff --git a/SSL/src/Catalogs/Файлы/Forms/РежимСозданияФайлаДляСохранитьКак/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/РежимСозданияФайлаДляСохранитьКак/Help/ru.html index 008f99f48..aa004126e 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для выбора режима сохранения файла.</p> <p>Программа указывает путь к файлу в рабочем каталоге.</p> <p>С помощью переключателя выберите режим сохранения файла:</p> diff --git a/SSL/src/Catalogs/Файлы/Forms/СписокЗанятыхСВопросом/Form.form b/SSL/src/Catalogs/Файлы/Forms/СписокЗанятыхСВопросом/Form.form index f834dc1e8..6764b0bd5 100644 --- a/SSL/src/Catalogs/Файлы/Forms/СписокЗанятыхСВопросом/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/СписокЗанятыхСВопросом/Form.form @@ -1172,6 +1172,9 @@ <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>Список.Ref</segments> </notDefaultUseAlwaysAttributes> + <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> + <segments>Список.Расширение</segments> + </notDefaultUseAlwaysAttributes> <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>Список.Редактирует</segments> </notDefaultUseAlwaysAttributes> @@ -1188,7 +1191,8 @@ Файлы.Описание, Файлы.Ссылка, Файлы.ХранитьВерсии, - Файлы.ВладелецФайла + Файлы.ВладелецФайла, + Файлы.ТекущаяВерсияРасширение КАК Расширение ИЗ Справочник.Файлы КАК Файлы ГДЕ @@ -1254,6 +1258,26 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ЗапрещенныеРасширения</name> + <title> + <key>ru</key> + <value>Запрещенные расширения</value> + + 5 + + ValueList + + + true + + + true + + + + + ОткрытьФайл diff --git a/SSL/src/Catalogs/Файлы/Forms/СписокЗанятыхСВопросом/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/СписокЗанятыхСВопросом/Help/ru.html index ffba944d6..e163fcc39 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>В этом списке при завершении работы отображаются файлы, занятые Вами для редактирования.</p> <p>Для того чтобы отменить открытие списка занятых файлов при завершении работы, выключите флажок <strong>Показывать занятые файлы при завершении работы</strong>. Также это можно сделать в персональных настройках программы на закладке <strong>Работа с файлами</strong>.</p> <p>В списке выводятся сведения:</p> diff --git a/SSL/src/Catalogs/Файлы/Forms/СписокЗанятыхСВопросом/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/СписокЗанятыхСВопросом/Module.bsl index 4ec69369d..9223ca5aa 100644 --- a/SSL/src/Catalogs/Файлы/Forms/СписокЗанятыхСВопросом/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/СписокЗанятыхСВопросом/Module.bsl @@ -44,6 +44,9 @@ ПоказыватьЗанятыеФайлыПриЗавершенииРаботы = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "НастройкиПрограммы", "ПоказыватьЗанятыеФайлыПриЗавершенииРаботы", Истина); + + ЗапрещенныеРасширения = ФайловыеФункцииСлужебный.СписокЗапрещенныхРасширений(); + КонецПроцедуры &НаКлиенте @@ -63,6 +66,18 @@ Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; + + Если ЗапрещенныеРасширения.НайтиПоЗначению(Элементы.Список.ТекущиеДанные.Расширение) <> Неопределено Тогда + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ВыбраннаяСтрока", ВыбраннаяСтрока); + Оповещение = Новый ОписаниеОповещения("ВыбратьФайлПослеПодтверждения", ЭтотОбъект, ДополнительныеПараметры); + ПараметрыФормы = Новый Структура("Ключ", "ПередОткрытиемФайла"); + ПараметрыФормы.Вставить("ИмяФайла", + ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(Элементы.Список.ТекущиеДанные.Наименование, Элементы.Список.ТекущиеДанные.Расширение)); + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение); + Возврат; + КонецЕсли; + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(ВыбраннаяСтрока, УникальныйИдентификатор); РаботаСФайламиСлужебныйКлиент.ОткрытьФайлСОповещением(Неопределено, ДанныеФайла); @@ -85,6 +100,15 @@ Возврат; КонецЕсли; + Если ЗапрещенныеРасширения.НайтиПоЗначению(Элементы.Список.ТекущиеДанные.Расширение) <> Неопределено Тогда + Оповещение = Новый ОписаниеОповещения("ОткрытьФайлПослеПодтверждения", ЭтотОбъект); + ПараметрыФормы = Новый Структура("Ключ", "ПередОткрытиемФайла"); + ПараметрыФормы.Вставить("ИмяФайла", + ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(Элементы.Список.ТекущиеДанные.Наименование, Элементы.Список.ТекущиеДанные.Расширение)); + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение); + Возврат; + КонецЕсли; + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(СтрокаТаблицы, УникальныйИдентификатор); РаботаСФайламиКлиент.Открыть(ДанныеФайла); @@ -194,6 +218,29 @@ #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура ВыбратьФайлПослеПодтверждения(Результат, ДополнительныеПараметры) Экспорт + + Если Результат <> Неопределено И Результат = "Продолжить" Тогда + ВыбраннаяСтрока = ДополнительныеПараметры.ВыбраннаяСтрока; + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(ВыбраннаяСтрока, УникальныйИдентификатор); + РаботаСФайламиСлужебныйКлиент.ОткрытьФайлСОповещением(Неопределено, ДанныеФайла); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФайлПослеПодтверждения(Результат, ДополнительныеПараметры) Экспорт + + Если Результат <> Неопределено И Результат = "Продолжить" Тогда + + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(Элементы.Список.ТекущаяСтрока, УникальныйИдентификатор); + РаботаСФайламиКлиент.Открыть(ДанныеФайла); + + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Функция ОписаниеНастройки(Объект, Настойка, Значение) diff --git a/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form b/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form index 5edc095ad..3d5dc4d63 100644 --- a/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/Файлы/Form.form @@ -1440,767 +1440,34 @@ </extInfo> </items> <items xsi:type="form:FormGroup"> - <name>ГруппаПапкиИФайлы</name> - <id>29</id> - <items xsi:type="form:Table"> - <name>Папки</name> - <id>24</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <dataPath xsi:type="form:DataPath"> - <segments>Папки</segments> - </dataPath> - <skipOnInput>false</skipOnInput> - <titleLocation>None</titleLocation> - <excludedCommands>Delete</excludedCommands> - <excludedCommands>ListSettings</excludedCommands> - <excludedCommands>OutputList</excludedCommands> - <excludedCommands>Refresh</excludedCommands> - <items xsi:type="form:FormField"> - <name>ПапкиНаименование</name> - <id>27</id> - <title> - <key>ru</key> - <value>Папки</value> - + Группа3 + 406 + + ГруппаПапкиИФайлы + 29 + + Папки + 24 true true true - Папки.Description - - - ПапкиНаименованиеРасширеннаяПодсказка - 184 - Label - true - true - - Left - - - - ПапкиНаименованиеКонтекстноеМеню - 28 - true - - InputField - Enter - true - Left - true - Left - - true - true - true - true - true - - Style.BorderColor - - Normal - - - - ПапкиСсылка - 262 - true - true - - - Папки.Ref - - - ПапкиСсылкаРасширеннаяПодсказка - 264 - Label - true - true - - Left - - - - ПапкиСсылкаКонтекстноеМеню - 263 - true - - LabelField - Enter - true - Left - true - - true - true - - - None - - ПапкиКоманднаяПанель - 26 - Left - true - - - DragCheck - ПапкиПроверкаПеретаскивания - - - OnActivateRow - ПапкиПриАктивизацииСтроки - - - Drag - ПапкиПеретаскивание - - - OnChange - ПапкиПриИзменении - - - ПапкиСтрокаПоиска - 359 - - ПапкиСтрокаПоискаРасширеннаяПодсказка - 361 - Label - true - true - - Left - - - - ПапкиСтрокаПоискаКонтекстноеМеню - 360 - true - - Папки - - true - - - - ПапкиСостояниеПросмотра - 362 - - ПапкиСостояниеПросмотраРасширеннаяПодсказка - 364 - Label - true - true - - Left - - - - ПапкиСостояниеПросмотраКонтекстноеМеню - 363 - true - - ViewStatusAddition - Папки - - true - - - - ПапкиУправлениеПоиском - 365 - - ПапкиУправлениеПоискомРасширеннаяПодсказка - 367 - Label - true - true - - Left - - - - ПапкиУправлениеПоискомКонтекстноеМеню - 366 - true - - SearchControlAddition - Папки - - true - - - - ПапкиExtendedTooltip - 183 - Label - true - true - - Left - - - - ПапкиКонтекстноеМеню - 25 - - ПапкиКонтекстноеМенюСоздать - 140 - - <key>ru</key> - <value>Создать новую папку</value> - - true - true - - true - - - ПапкиКонтекстноеМенюСоздатьРасширеннаяПодсказка - 176 - Label - true - true - - Left - - - Form.Item.Папки.StandardCommand.Create - Normal - Auto - true - true - UserCmds - - StdPicture.CreateFolder - - Auto - - - ПапкиКонтекстноеМенюИзменить - 248 - true - true - - true - - - ПапкиКонтекстноеМенюИзменитьРасширеннаяПодсказка - 249 - Label - true - true - - Left - - - Form.Item.Папки.StandardCommand.Change - Normal - Auto - true - true - UserCmds - Auto - - - ПапкиКонтекстноеМенюСкопировать - 250 - true - true - - true - - - ПапкиКонтекстноеМенюСкопироватьРасширеннаяПодсказка - 251 - Label - true - true - - Left - - - Form.Item.Папки.StandardCommand.Copy - Normal - Auto - true - true - UserCmds - Auto - - - ПапкиКонтекстноеМенюУстановитьПометкуУдаления - 234 - true - true - - true - - - ПапкиКонтекстноеМенюУстановитьПометкуУдаленияРасширеннаяПодсказка - 235 - Label - true - true - - Left - - - Form.Item.Папки.StandardCommand.SetDeletionMark - Normal - Auto - true - true - UserCmds - Auto - - - ПапкиКонтекстноеМенюСтандартные - 139 - - ПапкиКонтекстноеМенюПеренестиЭлемент - 252 - true - true - - true - - - ПапкиКонтекстноеМенюПеренестиЭлементРасширеннаяПодсказка - 253 - Label - true - true - - Left - - - Form.Item.Папки.StandardCommand.MoveItem - Normal - Auto - true - true - UserCmds - Auto - - - ПапкиКонтекстноеМенюУровеньВверх - 254 - true - true - - true - - - ПапкиКонтекстноеМенюУровеньВверхРасширеннаяПодсказка - 255 - Label - true - true - - Left - - - Form.Item.Папки.StandardCommand.LevelUp - Normal - Auto - true - true - UserCmds - Auto - - - ПапкиКонтекстноеМенюУровеньВниз - 256 - true - true - - true - - - ПапкиКонтекстноеМенюУровеньВнизРасширеннаяПодсказка - 257 - Label - true - true - - Left - - - Form.Item.Папки.StandardCommand.LevelDown - Normal - Auto - true - true - UserCmds - Auto - - - ПапкиКонтекстноеМенюНайти - 258 - true - true - - true - - - ПапкиКонтекстноеМенюНайтиРасширеннаяПодсказка - 259 - Label - true - true - - Left - - - Form.Item.Папки.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - - - ПапкиКонтекстноеМенюОтменитьПоиск - 260 - true - true - - true - - - ПапкиКонтекстноеМенюОтменитьПоискРасширеннаяПодсказка - 261 - Label - true - true - - Left - - - Form.Item.Папки.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Папки контекстное меню стандартные</value> - - - ru - Папки контекстное меню стандартные - - - ПапкиКонтекстноеМенюСтандартныеExtendedTooltip - 177 - Label - true - true - - Left - - - - Item.Папки - - - - ПапкиКонтекстноеМенюГруппаИмпорт - 114 - - ПапкиКонтекстноеМенюИмпортПапки - 82 - true - true - - true - - false - - ПапкиКонтекстноеМенюИмпортПапкиРасширеннаяПодсказка - 181 - Label - true - true - - Left - - - Form.Command.ИмпортПапки - Normal - Auto - true - true - UserCmds - Auto - - - ПапкиКонтекстноеМенюЭкспортПапки - 64 - true - true - - true - - false - - ПапкиКонтекстноеМенюЭкспортПапкиРасширеннаяПодсказка - 182 - Label - true - true - - Left - - - Form.Command.ЭкспортПапки - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Папки контекстное меню группа импорт</value> - - - ПапкиКонтекстноеМенюГруппаИмпортРасширеннаяПодсказка - 179 - Label - true - true - - Left - - - - - - ПапкиКонтекстноеМенюКопироватьВБуферОбмена - 141 - true - true - - true - - - ПапкиКонтекстноеМенюКопироватьВБуферОбменаExtendedTooltip - 178 - Label - true - true - - Left - - - Form.Item.Папки.StandardCommand.CopyToClipboard - Normal - Auto - true - true - UserCmds - Auto - - - Tree - true - true - 17 - true - 10 - true - 4 - true - MultiRow - 1 - 1 - AutoUse - true - true - false - false - false - Auto - Auto - ExpandTopLevel - true - true - true - true - - Папки.ИндексКартинки - - - CommonPicture.Папки - - - Style.BorderColor - - None - None - None - true - - 60 - - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - - true - true - - - - Список - 6 - true - true - - true - - - Список - - true - false - None - Delete - ListSettings - OutputList - Refresh - - СписокНомерКартинкиПодписанЗашифрован - 117 - true - true - - true - - - Список.НомерКартинкиПодписанЗашифрован + Папки + false None - - ru - Наличие электронной подписи или шифрования - - - СписокНомерКартинкиПодписанЗашифрованРасширеннаяПодсказка - 209 - Label - true - true - - Left - - - - СписокНомерКартинкиПодписанЗашифрованКонтекстноеМеню - 118 - true - - PictureField - Enter - true - - CommonPicture.ПодписанЗашифрованЗаголовок - - Left - true - - 2 - true - true - true - - CommonPicture.ПодписанЗашифрованСостояния - - - - 1 - - - - - СписокГруппаИмяКартинкаОписание - 310 + Delete + ListSettings + OutputList + Refresh - СписокИндексКартинки - 7 - true - true - - true - - - Список.ИндексКартинки - - None - None - - СписокИндексКартинкиРасширеннаяПодсказка - 212 - Label - true - true - - Left - - - - СписокИндексКартинкиКонтекстноеМеню - 5 - true - - PictureField - Enter - true - Left - true - Left - - 2 - true - 1 - true - true - - CommonPicture.КоллекцияПиктограммФайлов - - - 1 - - - - - СписокНаименование - 9 + ПапкиНаименование + 27 <key>ru</key> - <value>Наименование</value> + <value>Папки</value> true true @@ -2208,12 +1475,11 @@ true - Список.Description + Папки.Description - true - СписокНаименованиеРасширеннаяПодсказка - 213 + ПапкиНаименованиеРасширеннаяПодсказка + 184 Label true true @@ -2222,8 +1488,8 @@ - СписокНаименованиеКонтекстноеМеню - 12 + ПапкиНаименованиеКонтекстноеМеню + 28 true InputField @@ -2233,7 +1499,6 @@ true Left - 20 true true true @@ -2246,28 +1511,17 @@ - СписокОписание - 269 - - <key>ru</key> - <value>Описание</value> - + ПапкиСсылка + 262 true true - - true - + - Список.Описание + Папки.Ref - None - - ru - Краткое описание файла - - СписокОписаниеРасширеннаяПодсказка - 271 + ПапкиСсылкаРасширеннаяПодсказка + 264 Label true true @@ -2276,543 +1530,49 @@ - СписокОписаниеКонтекстноеМеню - 270 - true - - InputField - true - Enter - true - true - Left - true - - 5 - true - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Список группа имя картинка описание</value> - - - ru - Список группа имя картинка описание - - None - - СписокГруппаИмяКартинкаОписаниеРасширеннаяПодсказка - 311 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - - СписокВажныеРеквизиты - 277 - - СписокАвтор - 279 - true - true - - true - - - Список.Автор - - - СписокАвторРасширеннаяПодсказка - 281 - Label - true - true - - Left - - - - СписокАвторКонтекстноеМеню - 280 - true - - InputField - true - Enter - true - Left - true - - 15 - true - true - false - true - true - true - true - Normal - - - - СписокТекущаяВерсияДатаМодификацииФайла - 143 - - <key>ru</key> - <value>Дата изменения</value> - - true - true - - true - - - Список.ТекущаяВерсияДатаМодификацииФайла - - - СписокТекущаяВерсияДатаМодификацииФайлаРасширеннаяПодсказка - 224 - Label - true - true - - Left - - - - СписокТекущаяВерсияДатаМодификацииФайлаКонтекстноеМеню - 144 + ПапкиСсылкаКонтекстноеМеню + 263 true LabelField - true Enter true Left true - 15 true true - false - true - true - - true - - - <key>ru</key> - <value>Список важные реквизиты</value> - - - ru - Список важные реквизиты - - None - - СписокВажныеРеквизитыРасширеннаяПодсказка - 278 - Label - true - true - - Left - - - ColumnGroup - - auto - true - - - - СписокТекущаяВерсияРазмер - 88 - - <key>ru</key> - <value>Размер (КБ)</value> - - true - true - - true - - - Список.ТекущаяВерсияРазмер - - - ru - Размер файла в килобайтах - - - СписокТекущаяВерсияРазмерРасширеннаяПодсказка - 219 - Label - true - true - - Left - - - - СписокТекущаяВерсияРазмерКонтекстноеМеню - 89 - true - - LabelField - true - Enter - true - Left - true - - 10 - true - true - false - - ru - ЧЦ=10; ЧН=0 - - - - - СписокДатаСоздания - 282 - true - true - - - Список.ДатаСоздания - - - СписокДатаСозданияРасширеннаяПодсказка - 284 - Label - true - true - - Left - - - - СписокДатаСозданияКонтекстноеМеню - 283 - true - - LabelField - true - Enter - true - Left - true - - 15 - true - true - false - - - - СписокРедактирует - 272 - true - true - - - Список.Редактирует - - - СписокРедактируетРасширеннаяПодсказка - 274 - Label - true - true - - Left - - - - СписокРедактируетКонтекстноеМеню - 273 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - СписокТекущаяВерсияАвтор - 287 - true - true - - - Список.ТекущаяВерсияАвтор - - - СписокТекущаяВерсияАвторРасширеннаяПодсказка - 289 - Label - true - true - - Left - - - - СписокТекущаяВерсияАвторКонтекстноеМеню - 288 - true - - LabelField - true - Enter - true - Left - true - - true - true - - - - СписокТекущаяВерсияДатаСоздания - 290 - true - true - - - Список.ТекущаяВерсияДатаСоздания - - - СписокТекущаяВерсияДатаСозданияРасширеннаяПодсказка - 292 - Label - true - true - - Left - - - - СписокТекущаяВерсияДатаСозданияКонтекстноеМеню - 291 - true - - LabelField - true - Enter - true - Left - true - - 15 - true - true - false - - - - СписокСсылка - 115 - true - true - - - Список.Ref - - - СписокСсылкаРасширеннаяПодсказка - 223 - Label - true - true - - Left - - - - СписокСсылкаКонтекстноеМеню - 116 - true - - LabelField - true - Enter - true - Left - true - - 1 - true - true - - - None - - СписокКоманднаяПанель - 23 - Left - true - - - DragCheck - СписокПроверкаПеретаскивания - - - Selection - СписокВыбор - - - BeforeAddRow - СписокПередНачаломДобавления - - - OnActivateRow - СписокПриАктивизацииСтроки - - - Drag - СписокПеретаскивание - - - BeforeRowChange - СписокПередНачаломИзменения - - - СписокСтрокаПоиска - 368 - - СписокСтрокаПоискаРасширеннаяПодсказка - 370 - Label - true - true - - Left - - - - СписокСтрокаПоискаКонтекстноеМеню - 369 - true - - Список - - true - - - - СписокСостояниеПросмотра - 371 - - СписокСостояниеПросмотраРасширеннаяПодсказка - 373 - Label - true - true - - Left - - - - СписокСостояниеПросмотраКонтекстноеМеню - 372 - true - - ViewStatusAddition - Список - - true - - - - СписокУправлениеПоиском - 374 - - СписокУправлениеПоискомРасширеннаяПодсказка - 376 - Label - true - true - - Left - - - - СписокУправлениеПоискомКонтекстноеМеню - 375 - true - - SearchControlAddition - Список - - true - - - - СписокExtendedTooltip - 208 - Label - true - true - + None + + ПапкиКоманднаяПанель + 26 Left - - - - СписокКонтекстноеМеню - 4 - - СписокКонтекстноеМенюСоздать - 96 - true - true - - true - - false + true + + + DragCheck + ПапкиПроверкаПеретаскивания + + + OnActivateRow + ПапкиПриАктивизацииСтроки + + + Drag + ПапкиПеретаскивание + + + OnChange + ПапкиПриИзменении + + + ПапкиСтрокаПоиска + 359 - СписокКонтекстноеМенюСоздатьРасширеннаяПодсказка - 185 + ПапкиСтрокаПоискаРасширеннаяПодсказка + 361 Label true true @@ -2820,378 +1580,92 @@ Left - Form.Item.Список.StandardCommand.Create - Normal - Auto + + ПапкиСтрокаПоискаКонтекстноеМеню + 360 + true + + Папки + + true + + + + ПапкиСостояниеПросмотра + 362 + + ПапкиСостояниеПросмотраРасширеннаяПодсказка + 364 + Label + true + true + + Left + + + + ПапкиСостояниеПросмотраКонтекстноеМеню + 363 + true + + ViewStatusAddition + Папки + + true + + + + ПапкиУправлениеПоиском + 365 + + ПапкиУправлениеПоискомРасширеннаяПодсказка + 367 + Label + true + true + + Left + + + + ПапкиУправлениеПоискомКонтекстноеМеню + 366 + true + + SearchControlAddition + Папки + + true + + + + ПапкиExtendedTooltip + 183 + Label true true - UserCmds - Auto - - - СписокКонтекстноеМенюИзменить - 242 - - <key>ru</key> - <value>Открыть карточку</value> - - true - true - - true - - - СписокКонтекстноеМенюИзменитьРасширеннаяПодсказка - 243 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.Change - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюПеренестиВПапку - 83 - true - true - - true - - false - - СписокКонтекстноеМенюПеренестиВПапкуРасширеннаяПодсказка - 195 - Label - true - true - - Left - - - Form.Command.ПеренестиВПапку - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюГруппаКомандОсновные - 306 + + Left + + + + ПапкиКонтекстноеМеню + 25 - СписокКонтекстноеМенюОткрыть - 65 - true - true - - true - - false - - СписокКонтекстноеМенюОткрытьРасширеннаяПодсказка - 187 - Label - true - true - - Left - - - Form.Command.ОткрытьФайл - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюЗанять - 68 - true - true - - false - - СписокКонтекстноеМенюЗанятьРасширеннаяПодсказка - 190 - Label - true - true - - Left - - - Form.Command.Занять - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюРедактировать - 66 - true - true - - true - - false - - СписокКонтекстноеМенюРедактироватьРасширеннаяПодсказка - 188 - Label - true - true - - Left - - - Form.Command.Редактировать - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюСохранитьИзменения - 70 - true - true - - false - - СписокКонтекстноеМенюСохранитьИзмененияРасширеннаяПодсказка - 191 - Label - true - true - - Left - - - Form.Command.СохранитьИзменения - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюЗакончитьРедактирование - 67 - true - true - - true - - false - - СписокКонтекстноеМенюЗакончитьРедактированиеРасширеннаяПодсказка - 189 - Label - true - true - - Left - - - Form.Command.ЗакончитьРедактирование - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюПечать - 390 - true - true - - true - - - СписокКонтекстноеМенюПечатьРасширеннаяПодсказка - 391 - Label - true - true - - Left - - - Form.Command.Печать - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюОтправить - 392 - true - true - - true - - - СписокКонтекстноеМенюОтправитьРасширеннаяПодсказка - 393 - Label - true - true - - Left - - - Form.Command.Отправить - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Список контекстное меню группа команд основные</value> - - - ru - Список контекстное меню группа команд основные - - - СписокКонтекстноеМенюГруппаКомандОсновныеРасширеннаяПодсказка - 307 - Label - true - true - - Left - - - - - - СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьИШифрование - 130 - - СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодпись - 357 - - СписокКонтекстноеМенюПодписать - 132 - true - true - - true - - - СписокКонтекстноеМенюПодписатьРасширеннаяПодсказка - 202 - Label - true - true - - Left - - - Form.Command.Подписать - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюДобавитьПодписьИзФайла - 134 - true - true - - true - - - СписокКонтекстноеМенюДобавитьПодписьИзФайлаРасширеннаяПодсказка - 203 - Label - true - true - - Left - - - Form.Command.ДобавитьПодписьИзФайла - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюСохранитьВместеСПодписью - 135 - true - true - - true - - - СписокКонтекстноеМенюСохранитьВместеСПодписьюРасширеннаяПодсказка - 204 - Label - true - true - - Left - - - Form.Command.СохранитьВместеСПодписью - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - + ПапкиКонтекстноеМенюСоздать + 140 <key>ru</key> - <value>Список контекстное меню группа команд электронная подпись</value> + <value>Создать новую папку</value> + true + true + + true + - СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьРасширеннаяПодсказка - 358 + ПапкиКонтекстноеМенюСоздатьРасширеннаяПодсказка + 176 Label true true @@ -3199,22 +1673,109 @@ Left - + Form.Item.Папки.StandardCommand.Create + Normal + Auto + true + true + UserCmds + + StdPicture.CreateFolder + + Auto + + + ПапкиКонтекстноеМенюИзменить + 248 + true + true + + true + + + ПапкиКонтекстноеМенюИзменитьРасширеннаяПодсказка + 249 + Label + true + true + + Left + + + Form.Item.Папки.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + + ПапкиКонтекстноеМенюСкопировать + 250 + true + true + + true + + + ПапкиКонтекстноеМенюСкопироватьРасширеннаяПодсказка + 251 + Label + true + true + + Left + + + Form.Item.Папки.StandardCommand.Copy + Normal + Auto + true + true + UserCmds + Auto + + + ПапкиКонтекстноеМенюУстановитьПометкуУдаления + 234 + true + true + + true + + + ПапкиКонтекстноеМенюУстановитьПометкуУдаленияРасширеннаяПодсказка + 235 + Label + true + true + + Left + + + Form.Item.Папки.StandardCommand.SetDeletionMark + Normal + Auto + true + true + UserCmds + Auto - СписокКонтекстноеМенюГруппаКомандШифрование - 136 + ПапкиКонтекстноеМенюСтандартные + 139 - СписокКонтекстноеМенюЗашифровать - 137 + ПапкиКонтекстноеМенюПеренестиЭлемент + 252 true true true - СписокКонтекстноеМенюЗашифроватьРасширеннаяПодсказка - 206 + ПапкиКонтекстноеМенюПеренестиЭлементРасширеннаяПодсказка + 253 Label true true @@ -3222,7 +1783,7 @@ Left - Form.Command.Зашифровать + Form.Item.Папки.StandardCommand.MoveItem Normal Auto true @@ -3231,16 +1792,16 @@ Auto - СписокКонтекстноеМенюРасшифровать - 138 + ПапкиКонтекстноеМенюУровеньВверх + 254 true true true - СписокКонтекстноеМенюРасшифроватьРасширеннаяПодсказка - 207 + ПапкиКонтекстноеМенюУровеньВверхРасширеннаяПодсказка + 255 Label true true @@ -3248,7 +1809,85 @@ Left - Form.Command.Расшифровать + Form.Item.Папки.StandardCommand.LevelUp + Normal + Auto + true + true + UserCmds + Auto + + + ПапкиКонтекстноеМенюУровеньВниз + 256 + true + true + + true + + + ПапкиКонтекстноеМенюУровеньВнизРасширеннаяПодсказка + 257 + Label + true + true + + Left + + + Form.Item.Папки.StandardCommand.LevelDown + Normal + Auto + true + true + UserCmds + Auto + + + ПапкиКонтекстноеМенюНайти + 258 + true + true + + true + + + ПапкиКонтекстноеМенюНайтиРасширеннаяПодсказка + 259 + Label + true + true + + Left + + + Form.Item.Папки.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + ПапкиКонтекстноеМенюОтменитьПоиск + 260 + true + true + + true + + + ПапкиКонтекстноеМенюОтменитьПоискРасширеннаяПодсказка + 261 + Label + true + true + + Left + + + Form.Item.Папки.StandardCommand.CancelSearch Normal Auto true @@ -3263,15 +1902,121 @@ <key>ru</key> - <value>Шифрование</value> + <value>Папки контекстное меню стандартные</value> ru - Форма группа шифрование + Папки контекстное меню стандартные - СписокКонтекстноеМенюГруппаКомандШифрованиеРасширеннаяПодсказка - 205 + ПапкиКонтекстноеМенюСтандартныеExtendedTooltip + 177 + Label + true + true + + Left + + + + Item.Папки + + + + ПапкиКонтекстноеМенюГруппаИмпорт + 114 + + ПапкиКонтекстноеМенюИмпортПапки + 82 + true + true + + true + + false + + ПапкиКонтекстноеМенюИмпортПапкиРасширеннаяПодсказка + 181 + Label + true + true + + Left + + + Form.Command.ИмпортПапки + Normal + Auto + true + true + UserCmds + Auto + + + ПапкиКонтекстноеМенюЭкспортПапки + 64 + true + true + + true + + false + + ПапкиКонтекстноеМенюЭкспортПапкиРасширеннаяПодсказка + 182 + Label + true + true + + Left + + + Form.Command.ЭкспортПапки + Normal + Auto + true + true + UserCmds + Auto + + + ПапкиКонтекстноеМенюНастроитьСинхронизацию + 394 + true + true + + true + + + ПапкиКонтекстноеМенюНастроитьСинхронизациюРасширеннаяПодсказка + 395 + Label + true + true + + Left + + + Form.Command.НастроитьСинхронизацию + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Папки контекстное меню группа импорт</value> + + + ПапкиКонтекстноеМенюГруппаИмпортРасширеннаяПодсказка + 179 Label true true @@ -3281,136 +2026,103 @@ - true - true - - true - - - <key>ru</key> - <value>Электронная подпись и шифрование</value> - - - ru - Электронная подпись и шифрование - - - СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьИШифрованиеРасширеннаяПодсказка - 200 - Label + + ПапкиКонтекстноеМенюКопироватьВБуферОбмена + 141 + true + true + + true + + + ПапкиКонтекстноеМенюКопироватьВБуферОбменаExtendedTooltip + 178 + Label + true + true + + Left + + + Form.Item.Папки.StandardCommand.CopyToClipboard + Normal + Auto true true - - Left - - - Popup - - - CommonPicture.ПодписанЗашифрованЗаголовок - - Auto - Normal - - + UserCmds + Auto + + + Tree + true + true + 17 + true + 10 + true + 4 + true + MultiRow + 1 + 1 + AutoUse + true + true + false + false + false + Auto + Auto + ExpandTopLevel + true + true + true + true + + Папки.ИндексКартинки + + + CommonPicture.Папки + + + Style.BorderColor + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + + + + ГруппаФайлыИПоиск + 396 - СписокКонтекстноеМенюГруппаКомандДополнительные - 308 - - СписокКонтекстноеМенюСкопировать - 244 - true - true - - true - - - СписокКонтекстноеМенюСкопироватьРасширеннаяПодсказка - 245 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.Copy - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюУстановитьПометкуУдаления - 246 - true - true - - true - - - СписокКонтекстноеМенюУстановитьПометкуУдаленияРасширеннаяПодсказка - 247 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.SetDeletionMark - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюСохранитьКак - 72 - true - true - - true - - false - - СписокКонтекстноеМенюСохранитьКакРасширеннаяПодсказка - 193 - Label - true - true - - Left - - - Form.Command.СохранитьКак - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюОсвободить - 69 + ГруппаПояснениеОблачногоСервиса + 401 + + ДекорацияКартинкаОблачногоСервиса + 408 <key>ru</key> - <value>Отменить редактирование</value> + <value>Декорация картинка облачного сервиса</value> true true true - false - СписокКонтекстноеМенюОсвободитьРасширеннаяПодсказка - 194 + ДекорацияКартинкаОблачногоСервисаРасширеннаяПодсказка + 410 Label true true @@ -3418,26 +2130,36 @@ Left - Form.Command.Освободить - Normal - Auto + + ДекорацияКартинкаОблачногоСервисаКонтекстноеМеню + 409 + true + + 5 true + 2 true - UserCmds - Auto + + + CommonPicture.ПапкаОблачногоСервиса + + - - СписокКонтекстноеМенюОбновитьИзФайлаНаДиске - 91 + + ДекорацияПояснение + 398 + + <key>ru</key> + <value>Работа с файлами этой папки ведется в облачном сервисе <link 1>%1</></value> + true true true - false - СписокКонтекстноеМенюОбновитьИзФайлаНаДискеРасширеннаяПодсказка - 196 + ДекорацияПояснениеРасширеннаяПодсказка + 400 Label true true @@ -3445,40 +2167,20 @@ Left - Form.Command.ОбновитьИзФайлаНаДиске - Normal - Auto + + ДекорацияПояснениеКонтекстноеМеню + 399 + true + + true + Label true true - UserCmds - Auto - - - СписокКонтекстноеМенюОткрытьКаталогФайла - 71 - true - true - - true - - false - - СписокКонтекстноеМенюОткрытьКаталогФайлаРасширеннаяПодсказка - 192 - Label - true - true - - Left - - - Form.Command.ОткрытьКаталогФайла - Normal - Auto - true - true - UserCmds - Auto + true + + Left + Center + true true @@ -3487,62 +2189,16 @@ <key>ru</key> - <value>Список контекстное меню группа команд дополнительные</value> + <value>Группа пояснение облачного сервиса</value> - - СписокКонтекстноеМенюГруппаКомандДополнительныеРасширеннаяПодсказка - 309 - Label - true - true - - Left - - - - - - СписокКонтекстноеМенюГруппаИмпорт - 343 - - СписокКонтекстноеМенюИмпортФайлов - 345 - true - true - - true - - false - - СписокКонтекстноеМенюИмпортФайловРасширеннаяПодсказка - 346 - Label - true - true - - Left - - - Form.Command.ИмпортФайлов - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - + <toolTip> <key>ru</key> - <value>Список контекстное меню группа импорт</value> - + Группа пояснение облачного сервиса + + false - СписокКонтекстноеМенюГруппаИмпортРасширеннаяПодсказка - 344 + ГруппаПояснениеОблачногоСервисаРасширеннаяПодсказка + 402 Label true true @@ -3550,89 +2206,1761 @@ Left - - - - СписокКонтекстноеМенюГруппаСтандартныхКоманд - 95 - true - true - - true - - - <key>ru</key> - <value>Список контекстное меню группа стандартных команд</value> - - - СписокКонтекстноеМенюГруппаСтандартныхКомандРасширеннаяПодсказка - 186 - Label - true - true - - Left - - - - Item.Список + UsualGroup + + Auto + true + true + Auto + Auto - - Tree - true - true - 55 - true - true - 6 - true - MultiRow -
        true
        - 1 - 1 - AutoUse - AutoUse - true - true - Auto - Auto - true - true - true - true - - Style.BorderColor - - None - None - None - true - - 60 - - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - - true - ГруппаПользовательскихНастроек - -
        - - АдресДанныхФайла - 385 + + Список + 6 + true + true + + true + + + Список + + true + false + None + Delete + ListSettings + OutputList + Refresh + + СписокНомерКартинкиПодписанЗашифрован + 117 + true + true + + true + + + Список.НомерКартинкиПодписанЗашифрован + + None + + ru + Наличие электронной подписи или шифрования + + + СписокНомерКартинкиПодписанЗашифрованРасширеннаяПодсказка + 209 + Label + true + true + + Left + + + + СписокНомерКартинкиПодписанЗашифрованКонтекстноеМеню + 118 + true + + PictureField + Enter + true + + CommonPicture.ПодписанЗашифрованЗаголовок + + Left + true + + 2 + true + true + true + + CommonPicture.ПодписанЗашифрованСостояния + + + + 1 + + + + + СписокГруппаИмяКартинкаОписание + 310 + + СписокИндексКартинки + 7 + true + true + + true + + + Список.ИндексКартинки + + None + None + + СписокИндексКартинкиРасширеннаяПодсказка + 212 + Label + true + true + + Left + + + + СписокИндексКартинкиКонтекстноеМеню + 5 + true + + PictureField + Enter + true + Left + true + Left + + 2 + true + 1 + true + true + + CommonPicture.КоллекцияПиктограммФайлов + + + 1 + + + + + СписокНаименование + 9 + + <key>ru</key> + <value>Наименование</value> + + true + true + + true + + + Список.Description + + true + + СписокНаименованиеРасширеннаяПодсказка + 213 + Label + true + true + + Left + + + + СписокНаименованиеКонтекстноеМеню + 12 + true + + InputField + Enter + true + Left + true + Left + + 20 + true + true + true + true + true + + Style.BorderColor + + Normal + + + + СписокОписание + 269 + + <key>ru</key> + <value>Описание</value> + + true + true + + true + + + Список.Описание + + None + + ru + Краткое описание файла + + + СписокОписаниеРасширеннаяПодсказка + 271 + Label + true + true + + Left + + + + СписокОписаниеКонтекстноеМеню + 270 + true + + InputField + true + Enter + true + true + Left + true + + 5 + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Список группа имя картинка описание</value> + + + ru + Список группа имя картинка описание + + None + + СписокГруппаИмяКартинкаОписаниеРасширеннаяПодсказка + 311 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + СписокВажныеРеквизиты + 277 + + СписокАвтор + 279 + true + true + + true + + + Список.Автор + + + СписокАвторРасширеннаяПодсказка + 281 + Label + true + true + + Left + + + + СписокАвторКонтекстноеМеню + 280 + true + + InputField + true + Enter + true + Left + true + + 15 + true + true + false + true + true + true + true + Normal + + + + СписокТекущаяВерсияДатаМодификацииФайла + 143 + + <key>ru</key> + <value>Дата изменения</value> + + true + true + + true + + + Список.ТекущаяВерсияДатаМодификацииФайла + + + СписокТекущаяВерсияДатаМодификацииФайлаРасширеннаяПодсказка + 224 + Label + true + true + + Left + + + + СписокТекущаяВерсияДатаМодификацииФайлаКонтекстноеМеню + 144 + true + + LabelField + true + Enter + true + Left + true + + 15 + true + true + false + + + true + true + + true + + + <key>ru</key> + <value>Список важные реквизиты</value> + + + ru + Список важные реквизиты + + None + + СписокВажныеРеквизитыРасширеннаяПодсказка + 278 + Label + true + true + + Left + + + ColumnGroup + + auto + true + + + + СписокТекущаяВерсияРазмер + 88 + + <key>ru</key> + <value>Размер (КБ)</value> + + true + true + + true + + + Список.ТекущаяВерсияРазмер + + + ru + Размер файла в килобайтах + + + СписокТекущаяВерсияРазмерРасширеннаяПодсказка + 219 + Label + true + true + + Left + + + + СписокТекущаяВерсияРазмерКонтекстноеМеню + 89 + true + + LabelField + true + Enter + true + Left + true + + 10 + true + true + false + + ru + ЧЦ=10; ЧН=0 + + + + + СписокДатаСоздания + 282 + true + true + + + Список.ДатаСоздания + + + СписокДатаСозданияРасширеннаяПодсказка + 284 + Label + true + true + + Left + + + + СписокДатаСозданияКонтекстноеМеню + 283 + true + + LabelField + true + Enter + true + Left + true + + 15 + true + true + false + + + + СписокРедактирует + 272 + true + true + + + Список.Редактирует + + + СписокРедактируетРасширеннаяПодсказка + 274 + Label + true + true + + Left + + + + СписокРедактируетКонтекстноеМеню + 273 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + СписокТекущаяВерсияАвтор + 287 + true + true + + + Список.ТекущаяВерсияАвтор + + + СписокТекущаяВерсияАвторРасширеннаяПодсказка + 289 + Label + true + true + + Left + + + + СписокТекущаяВерсияАвторКонтекстноеМеню + 288 + true + + LabelField + true + Enter + true + Left + true + + true + true + + + + СписокТекущаяВерсияДатаСоздания + 290 + true + true + + + Список.ТекущаяВерсияДатаСоздания + + + СписокТекущаяВерсияДатаСозданияРасширеннаяПодсказка + 292 + Label + true + true + + Left + + + + СписокТекущаяВерсияДатаСозданияКонтекстноеМеню + 291 + true + + LabelField + true + Enter + true + Left + true + + 15 + true + true + false + + + + СписокСсылка + 115 + true + true + + + Список.Ref + + + СписокСсылкаРасширеннаяПодсказка + 223 + Label + true + true + + Left + + + + СписокСсылкаКонтекстноеМеню + 116 + true + + LabelField + true + Enter + true + Left + true + + 1 + true + true + + + None + + СписокКоманднаяПанель + 23 + Left + true + + + DragCheck + СписокПроверкаПеретаскивания + + + Selection + СписокВыбор + + + BeforeAddRow + СписокПередНачаломДобавления + + + OnActivateRow + СписокПриАктивизацииСтроки + + + Drag + СписокПеретаскивание + + + BeforeRowChange + СписокПередНачаломИзменения + + + СписокСтрокаПоиска + 368 + + СписокСтрокаПоискаРасширеннаяПодсказка + 370 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 369 + true + + Список + + true + + + + СписокСостояниеПросмотра + 371 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 373 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 372 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 374 + + СписокУправлениеПоискомРасширеннаяПодсказка + 376 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 375 + true + + SearchControlAddition + Список + + true + + + + СписокExtendedTooltip + 208 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + + СписокКонтекстноеМенюСоздать + 96 + true + true + + true + + false + + СписокКонтекстноеМенюСоздатьРасширеннаяПодсказка + 185 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Create + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюИзменить + 242 + + <key>ru</key> + <value>Открыть карточку</value> + + true + true + + true + + + СписокКонтекстноеМенюИзменитьРасширеннаяПодсказка + 243 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюПеренестиВПапку + 83 + true + true + + true + + false + + СписокКонтекстноеМенюПеренестиВПапкуРасширеннаяПодсказка + 195 + Label + true + true + + Left + + + Form.Command.ПеренестиВПапку + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюГруппаКомандОсновные + 306 + + СписокКонтекстноеМенюОткрыть + 65 + true + true + + true + + false + + СписокКонтекстноеМенюОткрытьРасширеннаяПодсказка + 187 + Label + true + true + + Left + + + Form.Command.ОткрытьФайл + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюЗанять + 68 + true + true + + false + + СписокКонтекстноеМенюЗанятьРасширеннаяПодсказка + 190 + Label + true + true + + Left + + + Form.Command.Занять + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюРедактировать + 66 + true + true + + true + + false + + СписокКонтекстноеМенюРедактироватьРасширеннаяПодсказка + 188 + Label + true + true + + Left + + + Form.Command.Редактировать + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюСохранитьИзменения + 70 + true + true + + false + + СписокКонтекстноеМенюСохранитьИзмененияРасширеннаяПодсказка + 191 + Label + true + true + + Left + + + Form.Command.СохранитьИзменения + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюЗакончитьРедактирование + 67 + true + true + + true + + false + + СписокКонтекстноеМенюЗакончитьРедактированиеРасширеннаяПодсказка + 189 + Label + true + true + + Left + + + Form.Command.ЗакончитьРедактирование + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюПечать + 390 + true + true + + true + + + СписокКонтекстноеМенюПечатьРасширеннаяПодсказка + 391 + Label + true + true + + Left + + + Form.Command.Печать + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюОтправить + 392 + true + true + + true + + + СписокКонтекстноеМенюОтправитьРасширеннаяПодсказка + 393 + Label + true + true + + Left + + + Form.Command.Отправить + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список контекстное меню группа команд основные</value> + + + ru + Список контекстное меню группа команд основные + + + СписокКонтекстноеМенюГруппаКомандОсновныеРасширеннаяПодсказка + 307 + Label + true + true + + Left + + + + + + СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьИШифрование + 130 + + СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодпись + 357 + + СписокКонтекстноеМенюПодписать + 132 + true + true + + true + + + СписокКонтекстноеМенюПодписатьРасширеннаяПодсказка + 202 + Label + true + true + + Left + + + Form.Command.Подписать + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюДобавитьПодписьИзФайла + 134 + true + true + + true + + + СписокКонтекстноеМенюДобавитьПодписьИзФайлаРасширеннаяПодсказка + 203 + Label + true + true + + Left + + + Form.Command.ДобавитьПодписьИзФайла + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюСохранитьВместеСПодписью + 135 + true + true + + true + + + СписокКонтекстноеМенюСохранитьВместеСПодписьюРасширеннаяПодсказка + 204 + Label + true + true + + Left + + + Form.Command.СохранитьВместеСПодписью + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список контекстное меню группа команд электронная подпись</value> + + + СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьРасширеннаяПодсказка + 358 + Label + true + true + + Left + + + + + + СписокКонтекстноеМенюГруппаКомандШифрование + 136 + + СписокКонтекстноеМенюЗашифровать + 137 + true + true + + true + + + СписокКонтекстноеМенюЗашифроватьРасширеннаяПодсказка + 206 + Label + true + true + + Left + + + Form.Command.Зашифровать + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюРасшифровать + 138 + true + true + + true + + + СписокКонтекстноеМенюРасшифроватьРасширеннаяПодсказка + 207 + Label + true + true + + Left + + + Form.Command.Расшифровать + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Шифрование</value> + + + ru + Форма группа шифрование + + + СписокКонтекстноеМенюГруппаКомандШифрованиеРасширеннаяПодсказка + 205 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Электронная подпись и шифрование</value> + + + ru + Электронная подпись и шифрование + + + СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьИШифрованиеРасширеннаяПодсказка + 200 + Label + true + true + + Left + + + Popup + + + CommonPicture.ПодписанЗашифрованЗаголовок + + Auto + Normal + + + + СписокКонтекстноеМенюГруппаКомандДополнительные + 308 + + СписокКонтекстноеМенюСкопировать + 244 + true + true + + true + + + СписокКонтекстноеМенюСкопироватьРасширеннаяПодсказка + 245 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Copy + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюУстановитьПометкуУдаления + 246 + true + true + + true + + + СписокКонтекстноеМенюУстановитьПометкуУдаленияРасширеннаяПодсказка + 247 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.SetDeletionMark + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюСохранитьКак + 72 + true + true + + true + + false + + СписокКонтекстноеМенюСохранитьКакРасширеннаяПодсказка + 193 + Label + true + true + + Left + + + Form.Command.СохранитьКак + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюОсвободить + 69 + + <key>ru</key> + <value>Отменить редактирование</value> + + true + true + + true + + false + + СписокКонтекстноеМенюОсвободитьРасширеннаяПодсказка + 194 + Label + true + true + + Left + + + Form.Command.Освободить + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюОбновитьИзФайлаНаДиске + 91 + true + true + + true + + false + + СписокКонтекстноеМенюОбновитьИзФайлаНаДискеРасширеннаяПодсказка + 196 + Label + true + true + + Left + + + Form.Command.ОбновитьИзФайлаНаДиске + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюОткрытьКаталогФайла + 71 + true + true + + true + + false + + СписокКонтекстноеМенюОткрытьКаталогФайлаРасширеннаяПодсказка + 192 + Label + true + true + + Left + + + Form.Command.ОткрытьКаталогФайла + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список контекстное меню группа команд дополнительные</value> + + + СписокКонтекстноеМенюГруппаКомандДополнительныеРасширеннаяПодсказка + 309 + Label + true + true + + Left + + + + + + СписокКонтекстноеМенюГруппаИмпорт + 343 + + СписокКонтекстноеМенюИмпортФайлов + 345 + true + true + + true + + false + + СписокКонтекстноеМенюИмпортФайловРасширеннаяПодсказка + 346 + Label + true + true + + Left + + + Form.Command.ИмпортФайлов + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список контекстное меню группа импорт</value> + + + СписокКонтекстноеМенюГруппаИмпортРасширеннаяПодсказка + 344 + Label + true + true + + Left + + + + + + СписокКонтекстноеМенюГруппаСтандартныхКоманд + 95 + true + true + + true + + + <key>ru</key> + <value>Список контекстное меню группа стандартных команд</value> + + + СписокКонтекстноеМенюГруппаСтандартныхКомандРасширеннаяПодсказка + 186 + Label + true + true + + Left + + + + Item.Список + + + + Tree + true + true + 55 + true + true + 6 + true + MultiRow +
        true
        + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + true + true + true + true + + Style.BorderColor + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + ГруппаПользовательскихНастроек + +
        + + ГруппаПоиск + 53 + + Поиск + 51 + + <key>ru</key> + <value>Быстрый поиск файлов и папок</value> + + true + true + + true + + + СтрокаПоиска + + + OnChange + ПоискПриИзменении + + + ПоискExtendedTooltip + 226 + Label + true + true + + Left + + + + ПоискКонтекстноеМеню + 52 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + true + Normal + + + + Найти + 54 + true + true + + true + + false + + НайтиExtendedTooltip + 227 + Label + true + true + + Left + + + UsualButton + Form.Command.Найти + Normal + Auto + true + true + UserCmds + Auto + + true + true + + + ru + Группа поиск + + false + + ГруппаПоискExtendedTooltip + 225 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа файлы и поиск</value> + + + ru + Группа файлы и поиск + + + ГруппаФайлыИПоискРасширеннаяПодсказка + 397 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + +
        + + АдресДанныхФайла + 385 + true + + true + + + АдресДанныхФайла + + None + + АдресДанныхФайлаРасширеннаяПодсказка + 387 + Label + true + true + + Left + + + + АдресДанныхФайлаКонтекстноеМеню + 386 + true + + PictureField + Enter + true + Left + true + + true + true + true + true + AutoSize + + ru + Выберите файл для предварительного просмотра + + + + 1 + + + + true true true - - АдресДанныхФайла - - None + + <key>ru</key> + <value>Группа папки и файлы</value> + + 8 - АдресДанныхФайлаРасширеннаяПодсказка - 387 + ГруппаПапкиИФайлыРасширеннаяПодсказка + 175 Label true true @@ -3640,30 +3968,13 @@ Left - - АдресДанныхФайлаКонтекстноеМеню - 386 - true - - PictureField - Enter - true - Left - true - - true - true - true - true - AutoSize - - ru - Выберите файл для предварительного просмотра - - - - 1 - + UsualGroup + + Auto + true + true + Auto + Auto
        true @@ -3671,121 +3982,9 @@ true - - <key>ru</key> - <value>Группа папки и файлы</value> - - 8 - ГруппаПапкиИФайлыРасширеннаяПодсказка - 175 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - -
        - - ГруппаПоиск - 53 - - Поиск - 51 - - <key>ru</key> - <value>Быстрый поиск файлов и папок</value> - - true - true - - true - - - СтрокаПоиска - - - OnChange - ПоискПриИзменении - - - ПоискExtendedTooltip - 226 - Label - true - true - - Left - - - - ПоискКонтекстноеМеню - 52 - true - - InputField - Enter - true - Left - true - - true - true - false - true - true - true - Normal - - - - Найти - 54 - true - true - - true - - false - - НайтиExtendedTooltip - 227 - Label - true - true - - Left - - - UsualButton - Form.Command.Найти - Normal - Auto - true - true - UserCmds - Auto - - true - true - - - ru - Группа поиск - - false - - ГруппаПоискExtendedTooltip - 225 + Группа3РасширеннаяПодсказка + 407 Label true true @@ -3795,6 +3994,7 @@ UsualGroup + Vertical Auto true true @@ -3961,12 +4161,27 @@ true + + Папки.Description + + + Папки.Href + Папки.Ref Папки.ИндексКартинки + + Папки.ПапкаСинхронизируется + + + Папки.УчетнаяЗаписьDescription + + + Папки.УчетнаяЗаписьСервис + ВЫБРАТЬ ПапкиФайлов.Ссылка, @@ -3980,12 +4195,24 @@ ПапкиФайлов.ДатаСоздания, ПапкиФайлов.Представление, ВЫБОР + КОГДА СтатусыСинхронизацииФайловСОблачнымСервисом.Файл = ПапкиФайлов.Ссылка + ТОГДА 2 КОГДА ПапкиФайлов.ПометкаУдаления = ИСТИНА ТОГДА 1 ИНАЧЕ 0 - КОНЕЦ КАК ИндексКартинки + КОНЕЦ КАК ИндексКартинки, + ВЫБОР + КОГДА СтатусыСинхронизацииФайловСОблачнымСервисом.Файл = ПапкиФайлов.Ссылка + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ КАК ПапкаСинхронизируется, + СтатусыСинхронизацииФайловСОблачнымСервисом.Href, + СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись.Наименование, + СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись.Сервис ИЗ - Справочник.ПапкиФайлов КАК ПапкиФайлов + Справочник.ПапкиФайлов КАК ПапкиФайлов + ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом + ПО ПапкиФайлов.Ссылка = СтатусыСинхронизацииФайловСОблачнымСервисом.Файл Catalog.ПапкиФайлов true true @@ -4235,6 +4462,60 @@ true + + ИспользоватьСинхронизациюФайлов + + <key>ru</key> + <value>Использовать синхронизацию файлов</value> + + 17 + + Boolean + + + true + + + true + + + + ФайлыРедактируютсяВОблачномСервисе + + <key>ru</key> + <value>Файлы редактируются в облачном сервисе</value> + + 18 + + Boolean + + + true + + + true + + + + ЗапрещенныеРасширения + + <key>ru</key> + <value>Запрещенные расширения</value> + + 20 + + ValueList + + + true + + + true + + + + + ИмпортФайлов @@ -4902,6 +5183,29 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>НастроитьСинхронизацию</name> + <title> + <key>ru</key> + <value>Синхронизация с облаком ...</value> + + 29 + + ru + Настроить синхронизацию + + + true + + + + НастроитьСинхронизацию + + + FunctionalOption.ИспользоватьСинхронизациюФайлов + DontUse + Auto + diff --git a/SSL/src/Catalogs/Файлы/Forms/Файлы/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/Файлы/Help/ru.html index 963a812bd..45685c915 100644 --- a/SSL/src/Catalogs/Файлы/Forms/Файлы/Help/ru.html +++ b/SSL/src/Catalogs/Файлы/Forms/Файлы/Help/ru.html @@ -1,4 +1,4 @@ - +

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

        Открывается по команде Файлы в разделе Органайзер. 

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

        diff --git a/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl index 99c4ec5bf..ee6b14067 100644 --- a/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/Файлы/Module.bsl @@ -3,9 +3,10 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - + УсловноеОформление.Элементы.Очистить(); РаботаСФайламиСлужебныйВызовСервера.ЗаполнитьУсловноеОформлениеСпискаФайлов(Список); + РаботаСФайламиСлужебныйВызовСервера.ЗаполнитьУсловноеОформлениеСпискаПапок(Папки); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; @@ -66,6 +67,21 @@ РасширенияПоддерживающиеПредпросмотр = ФайловыеФункцииСлужебный.СписокРасширенийДляПредпросмотра(); + Элементы.ГруппаПояснениеОблачногоСервиса.Видимость = Ложь; + ИспользоватьСинхронизациюФайлов = ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюФайлов"); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + + Если Не МодульУправлениеДоступом.ЕстьРоль("НастройкаСинхронизацииФайлов") Тогда + Элементы.ПапкиКонтекстноеМенюНастроитьСинхронизацию.Видимость = Ложь; + КонецЕсли; + + КонецЕсли; + + ЗапрещенныеРасширения = ФайловыеФункцииСлужебный.СписокЗапрещенныхРасширений(); + КонецПроцедуры &НаКлиенте @@ -75,6 +91,11 @@ Элементы.ФормаСоздатьСоСканера.Видимость = ФайловыеФункцииСлужебныйКлиент.ДоступнаКомандаСканировать(); + #Если ВебКлиент Тогда + Элементы.Печать.Видимость = Ложь; + Элементы.СписокКонтекстноеМенюПечать.Видимость = Ложь; + #КонецЕсли + КонецПроцедуры &НаКлиенте @@ -205,6 +226,17 @@ Возврат; КонецЕсли; + Если ЗапрещенныеРасширения.НайтиПоЗначению(Элементы.Список.ТекущиеДанные.Расширение) <> Неопределено Тогда + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ВыбраннаяСтрока", ВыбраннаяСтрока); + Оповещение = Новый ОписаниеОповещения("ВыбратьФайлПослеПодтверждения", ЭтотОбъект, ДополнительныеПараметры); + ПараметрыФормы = Новый Структура("Ключ", "ПередОткрытиемФайла"); + ПараметрыФормы.Вставить("ИмяФайла", + ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(Элементы.Список.ТекущиеДанные.Наименование, Элементы.Список.ТекущиеДанные.Расширение)); + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение); + Возврат; + КонецЕсли; + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(ВыбраннаяСтрока, УникальныйИдентификатор, Неопределено, ПредыдущийАдресФайла); @@ -257,21 +289,6 @@ УстановитьДоступностьФайловыхКоманд(); - Если НЕ ДействиеРазрешено() Тогда - Возврат; - КонецЕсли; - - ТекущиеДанные = Элементы.Список.ТекущиеДанные; - - Если РасширенияПоддерживающиеПредпросмотр.НайтиПоЗначению(ТекущиеДанные.Расширение) <> Неопределено Тогда - ДанныеФайла = ДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); - АдресДанныхФайла = ДанныеФайла.НавигационнаяСсылкаТекущейВерсии; - Иначе - ТекстНевыбраннойКартинки = НСтр("ru = 'Нет данных для предварительного просмотра'"); - АдресДанныхФайла = Неопределено; - Элементы.АдресДанныхФайла.ТекстНевыбраннойКартинки = ТекстНевыбраннойКартинки; - КонецЕсли; - КонецПроцедуры #КонецОбласти @@ -282,6 +299,9 @@ Процедура ПапкиПриАктивизацииСтроки(Элемент) УстановитьДоступностьКомандПриИзмененииПапки(); + Если ИспользоватьСинхронизациюФайлов Тогда + УстановитьВидимостьПоясненияСинхронизацииФайлов(); + КонецЕсли; КонецПроцедуры @@ -589,6 +609,15 @@ Возврат; КонецЕсли; + Если ЗапрещенныеРасширения.НайтиПоЗначению(Элементы.Список.ТекущиеДанные.Расширение) <> Неопределено Тогда + Оповещение = Новый ОписаниеОповещения("ОткрытьФайлПослеПодтверждения", ЭтотОбъект); + ПараметрыФормы = Новый Структура("Ключ", "ПередОткрытиемФайла"); + ПараметрыФормы.Вставить("ИмяФайла", + ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(Элементы.Список.ТекущиеДанные.Наименование, Элементы.Список.ТекущиеДанные.Расширение)); + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение); + Возврат; + КонецЕсли; + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(Элементы.Список.ТекущаяСтрока, УникальныйИдентификатор, Неопределено, ПредыдущийАдресФайла); РаботаСФайламиКлиент.Открыть(ДанныеФайла); @@ -602,6 +631,15 @@ Возврат; КонецЕсли; + Если ЗапрещенныеРасширения.НайтиПоЗначению(Элементы.Список.ТекущиеДанные.Расширение) <> Неопределено Тогда + Оповещение = Новый ОписаниеОповещения("РедактироватьФайлПослеПодтверждения", ЭтотОбъект); + ПараметрыФормы = Новый Структура("Ключ", "ПередОткрытиемФайла"); + ПараметрыФормы.Вставить("ИмяФайла", + ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(Элементы.Список.ТекущиеДанные.Наименование, Элементы.Список.ТекущиеДанные.Расширение)); + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение); + Возврат; + КонецЕсли; + Обработчик = Новый ОписаниеОповещения("УстановитьДоступностьФайловыхКоманд", ЭтотОбъект); РаботаСФайламиСлужебныйКлиент.РедактироватьСОповещением(Обработчик, Элементы.Список.ТекущаяСтрока); @@ -860,11 +898,6 @@ Возврат; КонецЕсли; - #Если ВебКлиент Тогда - ПоказатьПредупреждение(, НСтр("ru = 'В Веб-клиенте печать файлов не поддерживается.'")); - Возврат; - #КонецЕсли - СистемнаяИнфо = Новый СистемнаяИнформация; Если СистемнаяИнфо.ТипПлатформы <> ТипПлатформы.Windows_x86 И СистемнаяИнфо.ТипПлатформы <> ТипПлатформы.Windows_x86_64 Тогда @@ -876,13 +909,13 @@ Если ВыделенныеСтроки.Количество() > 1 Тогда ДанныеФайлов = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайловДляОткрытия( ВыделенныеСтроки, - ЭтаФорма.УникальныйИдентификатор); + ЭтотОбъект.УникальныйИдентификатор); РаботаСФайламиКлиент.НапечататьФайлы(ДанныеФайлов); Иначе ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия( Элементы.Список.ТекущаяСтрока, - ЭтаФорма.УникальныйИдентификатор, + ЭтотОбъект.УникальныйИдентификатор, Неопределено, ПредыдущийАдресФайла); @@ -904,10 +937,73 @@ КонецПроцедуры +&НаКлиенте +Процедура НастроитьСинхронизацию(Команда) + + НастройкаСинхронизации = ПараметрыНастройкиСинхронизации(Элементы.Папки.ТекущиеДанные.Ссылка); + + Если ЗначениеЗаполнено(НастройкаСинхронизации.УчетнаяЗапись) Тогда + ТипЗначения = Тип("РегистрСведенийКлючЗаписи.НастройкиСинхронизацииФайлов"); + ПараметрыЗаписи = Новый Массив(1); + ПараметрыЗаписи[0] = НастройкаСинхронизации; + + КлючЗаписи = Новый(ТипЗначения, ПараметрыЗаписи); + + ПараметрыЗаписи = Новый Структура; + ПараметрыЗаписи.Вставить("Ключ", КлючЗаписи); + Иначе + НастройкаСинхронизации.Вставить("ЭтоФайл", Истина); + ПараметрыЗаписи = НастройкаСинхронизации; + КонецЕсли; + + ОткрытьФорму("РегистрСведений.НастройкиСинхронизацииФайлов.Форма.ПростаяФормаЗаписиНастройки", ПараметрыЗаписи, ЭтотОбъект); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура ОткрытьФайлПослеПодтверждения(Результат, ДополнительныеПараметры) Экспорт + + Если Результат <> Неопределено И Результат = "Продолжить" Тогда + + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(Элементы.Список.ТекущаяСтрока, + УникальныйИдентификатор, Неопределено, ПредыдущийАдресФайла); + РаботаСФайламиКлиент.Открыть(ДанныеФайла); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура РедактироватьФайлПослеПодтверждения(Результат, ДополнительныеПараметры) Экспорт + + Если Результат <> Неопределено И Результат = "Продолжить" Тогда + Обработчик = Новый ОписаниеОповещения("УстановитьДоступностьФайловыхКоманд", ЭтотОбъект); + РаботаСФайламиСлужебныйКлиент.РедактироватьСОповещением(Обработчик, Элементы.Список.ТекущаяСтрока); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыбратьФайлПослеПодтверждения(Результат, ДополнительныеПараметры) Экспорт + + Если Результат <> Неопределено И Результат = "Продолжить" Тогда + ВыбраннаяСтрока = ДополнительныеПараметры.ВыбраннаяСтрока; + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(ВыбраннаяСтрока, + УникальныйИдентификатор, Неопределено, ПредыдущийАдресФайла); + + ПараметрыОбработчика = Новый Структура; + ПараметрыОбработчика.Вставить("ДанныеФайла", ДанныеФайла); + Обработчик = Новый ОписаниеОповещения("СписокВыборПослеВыбораРежимаРедактирования", ЭтотОбъект, ПараметрыОбработчика); + + ВыбратьРежимИРедактироватьФайл(Обработчик, ДанныеФайла, Истина); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ПеретаскиваниеВПапку(ПапкаДляДобавления, ЗначениеПеретаскивания, Действие) Если ПапкаДляДобавления = Неопределено Тогда @@ -1167,22 +1263,29 @@ Элементы.ПапкиКонтекстноеМенюИмпортПапки.Доступность = Ложь; Иначе - Элементы.ФормаПодменюСоздать.Доступность = ДобавлениеФайлов; - Элементы.ФормаСоздатьИзФайла.Доступность = ДобавлениеФайлов; - Элементы.ФормаСоздатьИзШаблона.Доступность = ДобавлениеФайлов; - Элементы.ФормаСоздатьСоСканера.Доступность = ДобавлениеФайлов; - Элементы.СписокКонтекстноеМенюСоздать.Доступность = ДобавлениеФайлов; + Элементы.ФормаПодменюСоздать.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; + Элементы.ФормаСоздатьИзФайла.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; + Элементы.ФормаСоздатьИзШаблона.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; + Элементы.ФормаСоздатьСоСканера.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; + Элементы.СписокКонтекстноеМенюСоздать.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; - Элементы.ФормаСкопировать.Доступность = ДобавлениеФайлов; - Элементы.СписокКонтекстноеМенюСкопировать.Доступность = ДобавлениеФайлов; + Элементы.СписокКонтекстноеМенюСоздать.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; + + Элементы.ФормаСкопировать.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; + + Элементы.СписокКонтекстноеМенюУстановитьПометкуУдаления.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; + Элементы.ФормаУстановитьПометкуУдаления.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; - Элементы.ФормаУстановитьПометкуУдаления.Доступность = ПометкаУдаленияФайлов; - Элементы.СписокКонтекстноеМенюУстановитьПометкуУдаления.Доступность = ПометкаУдаленияФайлов; + Элементы.ФормаСкопировать.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; + Элементы.СписокКонтекстноеМенюСкопировать.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; - Элементы.ФормаИмпортФайлов.Доступность = ДобавлениеФайлов; - Элементы.СписокКонтекстноеМенюИмпортФайлов.Доступность = ДобавлениеФайлов; + Элементы.ФормаУстановитьПометкуУдаления.Доступность = ПометкаУдаленияФайлов И Не ФайлыРедактируютсяВОблачномСервисе; + Элементы.СписокКонтекстноеМенюУстановитьПометкуУдаления.Доступность = ПометкаУдаленияФайлов И Не ФайлыРедактируютсяВОблачномСервисе; - Элементы.ПапкиКонтекстноеМенюИмпортПапки.Доступность = ДобавлениеФайлов; + Элементы.ФормаИмпортФайлов.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; + Элементы.СписокКонтекстноеМенюИмпортФайлов.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; + + Элементы.ПапкиКонтекстноеМенюИмпортПапки.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе; КонецЕсли; Если Элементы.Папки.ТекущаяСтрока <> Неопределено Тогда @@ -1191,6 +1294,37 @@ КонецПроцедуры +&НаКлиенте +Процедура УстановитьВидимостьПоясненияСинхронизацииФайлов() + + ФайлыРедактируютсяВОблачномСервисе = Ложь; + + Если Элементы.Папки.ТекущаяСтрока = Неопределено Или Элементы.Папки.ТекущаяСтрока.Пустая() Тогда + + Элементы.ГруппаПояснениеОблачногоСервиса.Видимость = Ложь; + + Иначе + + Элементы.ГруппаПояснениеОблачногоСервиса.Видимость = Элементы.Папки.ТекущиеДанные.ПапкаСинхронизируется; + ФайлыРедактируютсяВОблачномСервисе = Элементы.Папки.ТекущиеДанные.ПапкаСинхронизируется; + + Если Элементы.Папки.ТекущиеДанные.ПапкаСинхронизируется Тогда + + АдресПапкиВОблачномСервисе = ФайловыеФункцииСлужебныйКлиентСервер.АдресВОблачномСервисе( + Элементы.Папки.ТекущиеДанные.УчетнаяЗаписьСервис, Элементы.Папки.ТекущиеДанные.Href); + + ЧастиСтроки = Новый Массив; + ЧастиСтроки.Добавить(НСтр("ru = 'Работа с файлами ведется в облачном сервисе'")); + ЧастиСтроки.Добавить(" "); + ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока(Элементы.Папки.ТекущиеДанные.УчетнаяЗаписьНаименование, , , , АдресПапкиВОблачномСервисе)); + Элементы.ДекорацияПояснение.Заголовок = Новый ФорматированнаяСтрока(ЧастиСтроки); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ОбработкаОжиданияПапкиПриАктивизацииСтроки() @@ -1248,7 +1382,6 @@ Процедура УстановитьДоступностьФайловыхКоманд(Результат = Неопределено, ПараметрыВыполнения = Неопределено) Экспорт ТекущиеДанные = Элементы.Список.ТекущиеДанные; - Если ТекущиеДанные <> Неопределено И ТипЗнч(Элементы.Список.ТекущаяСтрока) <> Тип("СтрокаГруппировкиДинамическогоСписка") Тогда @@ -1260,7 +1393,8 @@ Иначе СделатьКомандыНедоступными(); КонецЕсли; - + ОбновитьПредпросмотр(); + КонецПроцедуры &НаКлиенте @@ -1322,7 +1456,7 @@ &НаКлиенте Процедура УстановитьДоступностьКоманд(РедактируетТекущийПользователь, Редактирует, ПодписанЭП, Зашифрован) - РедактируетДругой = Не Редактирует.Пустая() И НЕ РедактируетТекущийПользователь; + РедактируетДругой = ЗначениеЗаполнено(Редактирует) И НЕ РедактируетТекущийПользователь; Элементы.ФормаЗакончитьРедактирование.Доступность = ИзменениеФайлов И РедактируетТекущийПользователь; Элементы.СписокКонтекстноеМенюЗакончитьРедактирование.Доступность = ИзменениеФайлов И РедактируетТекущийПользователь; @@ -1330,11 +1464,11 @@ Элементы.ФормаСохранитьИзменения.Доступность = ИзменениеФайлов И РедактируетТекущийПользователь; Элементы.СписокКонтекстноеМенюСохранитьИзменения.Доступность = ИзменениеФайлов И РедактируетТекущийПользователь; - Элементы.ФормаОсвободить.Доступность = ИзменениеФайлов И Не Редактирует.Пустая(); - Элементы.СписокКонтекстноеМенюОсвободить.Доступность = ИзменениеФайлов И Не Редактирует.Пустая(); + Элементы.ФормаОсвободить.Доступность = ИзменениеФайлов И ЗначениеЗаполнено(Редактирует); + Элементы.СписокКонтекстноеМенюОсвободить.Доступность = ИзменениеФайлов И ЗначениеЗаполнено(Редактирует); - Элементы.ФормаЗанять.Доступность = ИзменениеФайлов И Редактирует.Пустая() И НЕ ПодписанЭП; - Элементы.СписокКонтекстноеМенюЗанять.Доступность = ИзменениеФайлов И Редактирует.Пустая() И НЕ ПодписанЭП; + Элементы.ФормаЗанять.Доступность = ИзменениеФайлов И Не ЗначениеЗаполнено(Редактирует) И НЕ ПодписанЭП; + Элементы.СписокКонтекстноеМенюЗанять.Доступность = ИзменениеФайлов И Не ЗначениеЗаполнено(Редактирует) И НЕ ПодписанЭП; Элементы.ФормаРедактировать.Доступность = ИзменениеФайлов И НЕ ПодписанЭП И НЕ РедактируетДругой; Элементы.СписокКонтекстноеМенюРедактировать.Доступность = ИзменениеФайлов И НЕ ПодписанЭП И НЕ РедактируетДругой; @@ -1342,23 +1476,23 @@ Элементы.ФормаПеренестиВПапку.Доступность = ИзменениеФайлов И НЕ ПодписанЭП; Элементы.СписокКонтекстноеМенюПеренестиВПапку.Доступность = ИзменениеФайлов И НЕ ПодписанЭП; - Элементы.ФормаПодписать.Доступность = ИзменениеФайлов И Редактирует.Пустая(); - Элементы.СписокКонтекстноеМенюПодписать.Доступность = ИзменениеФайлов И Редактирует.Пустая(); + Элементы.ФормаПодписать.Доступность = ИзменениеФайлов И Не ЗначениеЗаполнено(Редактирует); + Элементы.СписокКонтекстноеМенюПодписать.Доступность = ИзменениеФайлов И Не ЗначениеЗаполнено(Редактирует); Элементы.ФормаСохранитьВместеСПодписью.Доступность = ПодписанЭП; Элементы.СписокКонтекстноеМенюСохранитьВместеСПодписью.Доступность = ПодписанЭП; - Элементы.ФормаЗашифровать.Доступность = ИзменениеФайлов И Редактирует.Пустая() И НЕ Зашифрован; - Элементы.СписокКонтекстноеМенюЗашифровать.Доступность = ИзменениеФайлов И Редактирует.Пустая() И НЕ Зашифрован; + Элементы.ФормаЗашифровать.Доступность = ИзменениеФайлов И Не ЗначениеЗаполнено(Редактирует) И НЕ Зашифрован; + Элементы.СписокКонтекстноеМенюЗашифровать.Доступность = ИзменениеФайлов И Не ЗначениеЗаполнено(Редактирует) И НЕ Зашифрован; Элементы.ФормаРасшифровать.Доступность = ИзменениеФайлов И Зашифрован; Элементы.СписокКонтекстноеМенюРасшифровать.Доступность = ИзменениеФайлов И Зашифрован; - Элементы.ФормаДобавитьПодписьИзФайла.Доступность = ИзменениеФайлов И Редактирует.Пустая(); - Элементы.СписокКонтекстноеМенюДобавитьПодписьИзФайла.Доступность = ИзменениеФайлов И Редактирует.Пустая(); + Элементы.ФормаДобавитьПодписьИзФайла.Доступность = ИзменениеФайлов И Не ЗначениеЗаполнено(Редактирует); + Элементы.СписокКонтекстноеМенюДобавитьПодписьИзФайла.Доступность = ИзменениеФайлов И ЗначениеЗаполнено(Редактирует); - Элементы.ФормаОбновитьИзФайлаНаДиске.Доступность = ИзменениеФайлов И Не ПодписанЭП; - Элементы.СписокКонтекстноеМенюОбновитьИзФайлаНаДиске.Доступность = ИзменениеФайлов И Не ПодписанЭП; + Элементы.ФормаОбновитьИзФайлаНаДиске.Доступность = ИзменениеФайлов И Не ПодписанЭП И Не ФайлыРедактируютсяВОблачномСервисе; + Элементы.СписокКонтекстноеМенюОбновитьИзФайлаНаДиске.Доступность = ИзменениеФайлов И Не ПодписанЭП И Не ФайлыРедактируютсяВОблачномСервисе; Элементы.ФормаСохранитьКак.Доступность = Истина; Элементы.СписокКонтекстноеМенюСохранитьКак.Доступность = Истина; @@ -1432,7 +1566,7 @@ КонецЕсли; // Если уже занят для редактирования, то не спрашивать - сразу открывать. - Если ДанныеФайла.Редактирует.Пустая() + Если Не ЗначениеЗаполнено(ДанныеФайла.Редактирует) И ПерсональныеНастройки.СпрашиватьРежимРедактированияПриОткрытииФайла = Истина И ДоступностьКомандыРедактировать Тогда @@ -1517,21 +1651,60 @@ КонецПроцедуры &НаКлиенте -Функция ДействиеРазрешено() +Процедура ОбновитьПредпросмотр() - ДействиеРазрешено = Истина; - Если Элементы.Список.ТекущиеДанные = Неопределено Тогда - ДействиеРазрешено = Ложь; + Если Не Предпросмотр Тогда + Возврат; КонецЕсли; - Возврат ДействиеРазрешено; - -КонецФункции + ТекущиеДанные = Элементы.Список.ТекущиеДанные; + Если ТекущиеДанные <> Неопределено И РасширенияПоддерживающиеПредпросмотр.НайтиПоЗначению(ТекущиеДанные.Расширение) <> Неопределено Тогда + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + АдресДанныхФайла = ДанныеФайла.НавигационнаяСсылкаТекущейВерсии; + Иначе + АдресДанныхФайла = Неопределено; + Элементы.АдресДанныхФайла.ТекстНевыбраннойКартинки = НСтр("ru = 'Нет данных для предварительного просмотра'"); + КонецЕсли; -&НаСервереБезКонтекста -Функция ДанныеФайла(Знач ПрисоединенныйФайл, Знач ИдентификаторФормы = Неопределено) +КонецПроцедуры + +&НаСервере +Функция ПараметрыНастройкиСинхронизации(ВладелецФайла) - Возврат РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(ПрисоединенныйФайл, ИдентификаторФормы); + ТипВладельцаФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Тип("СправочникСсылка.Файлы")); + + Отбор = Новый Структура( + "ВладелецФайла, ТипВладельцаФайла, УчетнаяЗапись", + ВладелецФайла, + ТипВладельцаФайла, + Справочники.УчетныеЗаписиСинхронизацииФайлов.ПустаяСсылка()); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | НастройкиСинхронизацииФайлов.ВладелецФайла, + | НастройкиСинхронизацииФайлов.ТипВладельцаФайла, + | НастройкиСинхронизацииФайлов.УчетнаяЗапись + |ИЗ + | РегистрСведений.НастройкиСинхронизацииФайлов КАК НастройкиСинхронизацииФайлов + |ГДЕ + | НастройкиСинхронизацииФайлов.ВладелецФайла = &ВладелецФайла + | И НастройкиСинхронизацииФайлов.ТипВладельцаФайла = &ТипВладельцаФайла"; + + Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайла); + Запрос.УстановитьПараметр("ТипВладельцаФайла", ТипВладельцаФайла); + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + Если ВыборкаДетальныеЗаписи.Количество() = 1 Тогда + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Отбор.УчетнаяЗапись = ВыборкаДетальныеЗаписи.УчетнаяЗапись; + КонецЦикла; + КонецЕсли; + + Возврат Отбор; КонецФункции diff --git a/SSL/src/Catalogs/Файлы/Forms/ФайлыВОсновномРабочемКаталоге/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ФайлыВОсновномРабочемКаталоге/Help/ru.html index ab8a5d6d4..2d5853c43 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/ФормаВозвратаФайла/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ФормаВозвратаФайла/Help/ru.html index 89fb726f6..bd399819a 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/ФормаВыбора/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ФормаВыбора/Help/ru.html index c5622d5c8..d9af03da9 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/ФормаВыбораРежимаОткрытия/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ФормаВыбораРежимаОткрытия/Help/ru.html index 906b6346c..ffbd55e42 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаВыбораРежимаОткрытия/Help/ru.html +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаВыбораРежимаОткрытия/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

        • клавишу Enter - требуется выбор режима открытия файла, если не было иных настроек;  diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаГрупповаяОперацияНаПапке/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ФормаГрупповаяОперацияНаПапке/Help/ru.html index 9ae112f6f..e979e2db3 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/ФормаИмпортаПапки/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаПапки/Help/ru.html index 83896c1e5..2d1ad2ace 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаПапки/Help/ru.html +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаПапки/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

          diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаФайлов/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаФайлов/Help/ru.html index 9cd6b0244..d456f8402 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаФайлов/Help/ru.html +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаИмпортаФайлов/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

          diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаНового/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ФормаНового/Help/ru.html index c4bcc27e7..4bc0ffac6 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаНового/Help/ru.html +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаНового/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

          Способы создания нового файла

          diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаОтчета/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ФормаОтчета/Help/ru.html index b7110f4e7..fdd7b5992 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/ФормаПеретаскивания/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ФормаПеретаскивания/Help/ru.html index 4c80420d5..d6fca1ca6 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/ФормаПодбора/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ФормаПодбора/Help/ru.html index 4dc9cdddd..b341890f9 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаПодбора/Help/ru.html +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаПодбора/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

              • diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаСписка/Form.form index 935eaa8dc..ae7f91497 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаСписка/Form.form @@ -1445,6 +1445,9 @@ Список.РедактируетТекущийПользователь + + Список.ТекущаяВерсияРасширение + Список.ХранитьВерсии @@ -1500,6 +1503,26 @@ true + + ЗапрещенныеРасширения + + <key>ru</key> + <value>Запрещенные расширения</value> + + 2 + + ValueList + + + true + + + true + + + + + Просмотреть diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаСписка/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ФормаСписка/Help/ru.html index 373f3212d..4defe34a3 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Список предназначен для управления файлами программы. </p> <p>В списке выводятся сведения:</p> <ul><li><img src="CommonPicture.ПодписанЗашифрованЗаголовок"></img> - наличие электронной подписи и шифрования; diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаСписка/Module.bsl index 8fe8765f3..becc569e9 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаСписка/Module.bsl @@ -20,6 +20,8 @@ Элементы.ФормаИзменить82.Видимость = Истина; КонецЕсли; + ЗапрещенныеРасширения = ФайловыеФункцииСлужебный.СписокЗапрещенныхРасширений(); + КонецПроцедуры &НаКлиенте @@ -61,6 +63,16 @@ Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; + + Если ЗапрещенныеРасширения.НайтиПоЗначению(Элементы.Список.ТекущиеДанные.ТекущаяВерсияРасширение) <> Неопределено Тогда + Оповещение = Новый ОписаниеОповещения("ВыбратьФайлПослеПодтверждения", ЭтотОбъект); + ПараметрыФормы = Новый Структура("Ключ", "ПередОткрытиемФайла"); + ПараметрыФормы.Вставить("ИмяФайла", + ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(Элементы.Список.ТекущиеДанные.Наименование, Элементы.Список.ТекущиеДанные.ТекущаяВерсияРасширение)); + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение); + Возврат; + КонецЕсли; + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(Элементы.Список.ТекущаяСтрока, УникальныйИдентификатор); РаботаСФайламиСлужебныйКлиент.ОткрытьФайлСОповещением(Неопределено, ДанныеФайла); @@ -87,6 +99,15 @@ Возврат; КонецЕсли; + Если ЗапрещенныеРасширения.НайтиПоЗначению(Элементы.Список.ТекущиеДанные.ТекущаяВерсияРасширение) <> Неопределено Тогда + Оповещение = Новый ОписаниеОповещения("ОткрытьФайлПослеПодтверждения", ЭтотОбъект); + ПараметрыФормы = Новый Структура("Ключ", "ПередОткрытиемФайла"); + ПараметрыФормы.Вставить("ИмяФайла", + ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(Элементы.Список.ТекущиеДанные.Наименование, Элементы.Список.ТекущиеДанные.ТекущаяВерсияРасширение)); + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение); + Возврат; + КонецЕсли; + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(Элементы.Список.ТекущаяСтрока, УникальныйИдентификатор); РаботаСФайламиКлиент.Открыть(ДанныеФайла); @@ -133,6 +154,28 @@ #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура ОткрытьФайлПослеПодтверждения(Результат, ДополнительныеПараметры) Экспорт + + Если Результат <> Неопределено И Результат = "Продолжить" Тогда + + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(Элементы.Список.ТекущаяСтрока, УникальныйИдентификатор); + РаботаСФайламиКлиент.Открыть(ДанныеФайла); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыбратьФайлПослеПодтверждения(Результат, ДополнительныеПараметры) Экспорт + + Если Результат <> Неопределено И Результат = "Продолжить" Тогда + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(Элементы.Список.ТекущаяСтрока, УникальныйИдентификатор); + РаботаСФайламиСлужебныйКлиент.ОткрытьФайлСОповещением(Неопределено, ДанныеФайла); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ОсвободитьЗавершение(Результат, ПараметрыВыполнения) Экспорт УстановитьДоступностьФайловыхКоманд(); @@ -171,8 +214,8 @@ &НаКлиенте Процедура УстановитьДоступностьКоманд(РедактируетТекущийПользователь, Редактирует) - Элементы.ФормаОсвободить.Доступность = Не Редактирует.Пустая(); - Элементы.СписокКонтекстноеМенюОсвободить.Доступность = Не Редактирует.Пустая(); + Элементы.ФормаОсвободить.Доступность = ЗначениеЗаполнено(Редактирует); + Элементы.СписокКонтекстноеМенюОсвободить.Доступность = ЗначениеЗаполнено(Редактирует); КонецПроцедуры diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаСпискаПрисоединенныхФайлов/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаСпискаПрисоединенныхФайлов/Form.form index b5075a8f7..0a68a57be 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаСпискаПрисоединенныхФайлов/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаСпискаПрисоединенныхФайлов/Form.form @@ -362,33 +362,6 @@ <placementArea>UserCmds</placementArea> <representationInContextMenu>Auto</representationInContextMenu> </items> - <items xsi:type="form:Button"> - <name>Предпросмотр</name> - <id>244</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <extendedTooltip> - <name>ПредпросмотрРасширеннаяПодсказка</name> - <id>245</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> <items xsi:type="form:Button"> <name>Печать</name> <id>253</id> @@ -702,6 +675,60 @@ <importance>Normal</importance> </extInfo> </items> + <items xsi:type="form:Button"> + <name>Предпросмотр</name> + <id>244</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ПредпросмотрРасширеннаяПодсказка</name> + <id>245</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> + <items xsi:type="form:Button"> + <name>НастроитьСинхронизацию</name> + <id>272</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>НастроитьСинхронизациюРасширеннаяПодсказка</name> + <id>273</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> <items xsi:type="form:FormGroup"> <name>ФормаГруппаКомандДополнительные</name> <id>77</id> @@ -1227,39 +1254,103 @@ <items xsi:type="form:FormGroup"> <name>ГруппаФайлы</name> <id>246</id> - <items xsi:type="form:Table"> - <name>Список</name> - <id>10</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <dataPath xsi:type="form:DataPath"> - <segments>Список</segments> - </dataPath> - <skipOnInput>false</skipOnInput> - <titleLocation>None</titleLocation> - <excludedCommands>Refresh</excludedCommands> - <items xsi:type="form:FormField"> - <name>СписокНомерКартинкиПодписанЗашифрован</name> - <id>91</id> + <items xsi:type="form:FormGroup"> + <name>ГруппаФайлыИПояснениеОблачногоСервиса</name> + <id>262</id> + <items xsi:type="form:FormGroup"> + <name>ГруппаПояснениеОблачногоСервиса</name> + <id>264</id> + <items xsi:type="form:Decoration"> + <name>ДекорацияКартинкаОблачногоСервиса</name> + <id>266</id> + <title> + <key>ru</key> + <value>Декорация картинка облачного сервиса</value> + + true + true + + true + + + ДекорацияКартинкаОблачногоСервисаРасширеннаяПодсказка + 268 + Label + true + true + + Left + + + + ДекорацияКартинкаОблачногоСервисаКонтекстноеМеню + 267 + true + + 5 + true + 2 + true + + + CommonPicture.ПапкаОблачногоСервиса + + + + + ДекорацияПояснение + 269 + + <key>ru</key> + <value>Работа с файлами ведется в облачном сервисе <link 1>%1</></value> + + true + true + + true + + + ДекорацияПояснениеРасширеннаяПодсказка + 271 + Label + true + true + + Left + + + + ДекорацияПояснениеКонтекстноеМеню + 270 + true + + true + Label + true + true + true + + Left + Center + + true true true - - Список.НомерКартинкиПодписанЗашифрован - - None + + <key>ru</key> + <value>Группа пояснение облачного сервиса</value> + ru - Наличие электронной подписи или шифрования + Группа пояснение облачного сервиса + false - СписокНомерКартинкиПодписанЗашифрованРасширеннаяПодсказка - 161 + ГруппаПояснениеОблачногоСервисаРасширеннаяПодсказка + 265 Label true true @@ -1267,53 +1358,48 @@ Left - - СписокНомерКартинкиПодписанЗашифрованКонтекстноеМеню - 92 - true - - PictureField - Enter - true - - CommonPicture.ПодписанЗашифрованЗаголовок - - Left - true - - 2 - true - true - true - true - - CommonPicture.ПодписанЗашифрованСостояния - - - - 1 - + UsualGroup + + Auto + true + true + Auto + Auto - - СписокГруппаКартинкаИНаименование - 45 + + Список + 10 + true + true + + true + + + Список + + false + None + Refresh - СписокИндексКартинки - 25 + СписокНомерКартинкиПодписанЗашифрован + 91 true true true - Список.ИндексКартинки + Список.НомерКартинкиПодписанЗашифрован None - None + + ru + Наличие электронной подписи или шифрования + - СписокИндексКартинкиРасширеннаяПодсказка - 164 + СписокНомерКартинкиПодписанЗашифрованРасширеннаяПодсказка + 161 Label true true @@ -1322,49 +1408,186 @@ - СписокИндексКартинкиКонтекстноеМеню - 26 + СписокНомерКартинкиПодписанЗашифрованКонтекстноеМеню + 92 true PictureField Enter true + + CommonPicture.ПодписанЗашифрованЗаголовок + Left true - Left 2 true - 1 true true true - CommonPicture.КоллекцияПиктограммФайлов + CommonPicture.ПодписанЗашифрованСостояния + 1 - - СписокНаименование - 17 - - <key>ru</key> - <value>Наименование</value> - + + СписокГруппаКартинкаИНаименование + 45 + + СписокИндексКартинки + 25 + true + true + + true + + + Список.ИндексКартинки + + None + None + + СписокИндексКартинкиРасширеннаяПодсказка + 164 + Label + true + true + + Left + + + + СписокИндексКартинкиКонтекстноеМеню + 26 + true + + PictureField + Enter + true + Left + true + Left + + 2 + true + 1 + true + true + true + + CommonPicture.КоллекцияПиктограммФайлов + + + 1 + + + + + СписокНаименование + 17 + + <key>ru</key> + <value>Наименование</value> + + true + true + + true + + + Список.Description + + + СписокНаименованиеРасширеннаяПодсказка + 165 + Label + true + true + + Left + + + + СписокНаименованиеКонтекстноеМеню + 18 + true + + InputField + Enter + true + true + Left + true + + 20 + true + true + true + true + true + Normal + + + + СписокОписание + 27 + true + true + + true + + + Список.Описание + + None + + СписокОписаниеРасширеннаяПодсказка + 166 + Label + true + true + + Left + + + + СписокОписаниеКонтекстноеМеню + 28 + true + + InputField + Enter + true + true + Left + true + + 15 + true + true + true + true + true + Normal + + true true true - - Список.Description - + + <key>ru</key> + <value>Список группа картинка и наименование</value> + - СписокНаименованиеРасширеннаяПодсказка - 165 + СписокГруппаКартинкаИНаименованиеРасширеннаяПодсказка + 163 Label true true @@ -1372,42 +1595,27 @@ Left - - СписокНаименованиеКонтекстноеМеню - 18 - true - - InputField - Enter - true - true - Left - true - - 20 - true - true - true - true - true - Normal + ColumnGroup + + InCell + auto + true - СписокОписание - 27 + СписокАвтор + 21 true true true - Список.Описание + Список.Автор - None - СписокОписаниеРасширеннаяПодсказка - 166 + СписокАвторРасширеннаяПодсказка + 168 Label true true @@ -1416,13 +1624,12 @@ - СписокОписаниеКонтекстноеМеню - 28 + СписокАвторКонтекстноеМеню + 22 true InputField Enter - true true Left true @@ -1436,529 +1643,1213 @@ Normal - true - true - - true - - - <key>ru</key> - <value>Список группа картинка и наименование</value> - - - СписокГруппаКартинкаИНаименованиеРасширеннаяПодсказка - 163 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - - СписокАвтор - 21 - true - true - - true - - - Список.Автор - - - СписокАвторРасширеннаяПодсказка - 168 - Label - true - true - - Left - - - - СписокАвторКонтекстноеМеню - 22 - true - - InputField - Enter - true - Left - true - - 15 - true - true - true - true - true - Normal - - - - СписокТекущаяВерсияДатаМодификацииФайла - 182 - - <key>ru</key> - <value>Дата изменения</value> - - true - true - - true - - - Список.ТекущаяВерсияДатаМодификацииФайла - - - СписокТекущаяВерсияДатаМодификацииФайлаРасширеннаяПодсказка - 184 - Label - true - true - - Left - - - - СписокТекущаяВерсияДатаМодификацииФайлаКонтекстноеМеню - 183 - true - - LabelField - Enter - true - Left - true - - 15 - true - true - false - - - - СписокТекущаяВерсияРазмер - 39 - - <key>ru</key> - <value>Размер (Кб)</value> - - true - true - - true - - - Список.ТекущаяВерсияРазмер - - - ru - Размер файла в килобайтах - - - СписокТекущаяВерсияРазмерРасширеннаяПодсказка - 170 - Label - true - true - - Left - - - - СписокТекущаяВерсияРазмерКонтекстноеМеню - 40 - true - - LabelField - Enter - true - Left - true - - 10 - true - true - false - + + СписокТекущаяВерсияДатаМодификацииФайла + 182 + <key>ru</key> - <value>ЧЦ=10; ЧН=0</value> - </format> + <value>Дата изменения</value> + + true + true + + true + + + Список.ТекущаяВерсияДатаМодификацииФайла + + + СписокТекущаяВерсияДатаМодификацииФайлаРасширеннаяПодсказка + 184 + Label + true + true + + Left + + + + СписокТекущаяВерсияДатаМодификацииФайлаКонтекстноеМеню + 183 + true + + LabelField + Enter + true + Left + true + + 15 + true + true + false + + + + СписокТекущаяВерсияРазмер + 39 + + <key>ru</key> + <value>Размер (Кб)</value> + + true + true + + true + + + Список.ТекущаяВерсияРазмер + + + ru + Размер файла в килобайтах + + + СписокТекущаяВерсияРазмерРасширеннаяПодсказка + 170 + Label + true + true + + Left + + + + СписокТекущаяВерсияРазмерКонтекстноеМеню + 40 + true + + LabelField + Enter + true + Left + true + + 10 + true + true + false + + ru + ЧЦ=10; ЧН=0 + + + + + СписокДатаСоздания + 23 + true + true + + + Список.ДатаСоздания + + + СписокДатаСозданияРасширеннаяПодсказка + 167 + Label + true + true + + Left + + + + СписокДатаСозданияКонтекстноеМеню + 24 + true + + InputField + Enter + true + Left + true + + 15 + true + true + false + true + true + true + Normal + + + + СписокРедактирует + 29 + true + true + + + Список.Редактирует + + + СписокРедактируетРасширеннаяПодсказка + 169 + Label + true + true + + Left + + + + СписокРедактируетКонтекстноеМеню + 30 + true + + InputField + Enter + true + Left + true + + 15 + true + true + true + true + true + Normal + + + + СписокТекущаяВерсияАвтор + 35 + true + true + + + Список.ТекущаяВерсияАвтор + + + СписокТекущаяВерсияАвторРасширеннаяПодсказка + 171 + Label + true + true + + Left + + + + СписокТекущаяВерсияАвторКонтекстноеМеню + 36 + true + + InputField + Enter + true + Left + true + + 17 + true + true + true + true + true + Normal + + + + СписокТекущаяВерсияДатаСоздания + 37 + true + true + + + Список.ТекущаяВерсияДатаСоздания + + + СписокТекущаяВерсияДатаСозданияРасширеннаяПодсказка + 172 + Label + true + true + + Left + + + + СписокТекущаяВерсияДатаСозданияКонтекстноеМеню + 38 + true + + InputField + Enter + true + Left + true + + 15 + true + true + false + true + true + true + Normal + + + + СписокХранитьВерсии + 63 + true + true + + + Список.ХранитьВерсии + + + СписокХранитьВерсииРасширеннаяПодсказка + 173 + Label + true + true + + Left + + + + СписокХранитьВерсииКонтекстноеМеню + 64 + true + + CheckBoxField + Enter + true + Left + true + + + + СписокРедактируетТекущийПользователь + 65 + true + true + + + Список.РедактируетТекущийПользователь + + None + + ru + Редактирует текущий пользователь + + + СписокРедактируетТекущийПользовательРасширеннаяПодсказка + 174 + Label + true + true + + Left + + + + СписокРедактируетТекущийПользовательКонтекстноеМеню + 66 + true + + CheckBoxField + Enter + true + + CommonPicture.РедактироватьФайл + + Left + true + + + + СписокСсылка + 89 + true + true + + + Список.Ref + + + СписокСсылкаРасширеннаяПодсказка + 175 + Label + true + true + + Left + + + + СписокСсылкаКонтекстноеМеню + 90 + true + + LabelField + Enter + true + Left + true + + 1 + true + true + + + None + + СписокКоманднаяПанель + 12 + Left + true + + + DragCheck + СписокПроверкаПеретаскивания + + + Selection + СписокВыбор + + + BeforeAddRow + СписокПередНачаломДобавления + + + OnActivateRow + СписокПриАктивизацииСтроки + + + Drag + СписокПеретаскивание + + + СписокСтрокаПоиска + 235 + + СписокСтрокаПоискаРасширеннаяПодсказка + 237 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 236 + true + + Список + + true + + + + СписокСостояниеПросмотра + 238 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 240 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 239 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 241 + + СписокУправлениеПоискомРасширеннаяПодсказка + 243 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 242 + true + + SearchControlAddition + Список + + true + + + + СписокExtendedTooltip + 160 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 11 + + СписокКонтекстноеМенюСоздать + 215 + true + true + + true + + + СписокКонтекстноеМенюСоздатьРасширеннаяПодсказка + 216 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Create + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюИзменить + 217 + + <key>ru</key> + <value>Открыть карточку</value> + + true + true + + true + + + СписокКонтекстноеМенюИзменитьРасширеннаяПодсказка + 218 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюГруппаКомандОсновные + 213 + + СписокКонтекстноеМенюОткрыть + 78 + true + true + + true + + false + + СписокКонтекстноеМенюОткрытьРасширеннаяПодсказка + 142 + Label + true + true + + Left + + + Form.Command.ОткрытьФайл + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюЗанять + 81 + true + true + + false + + СписокКонтекстноеМенюЗанятьРасширеннаяПодсказка + 145 + Label + true + true + + Left + + + Form.Command.Занять + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюРедактировать + 79 + true + true + + true + + false + + СписокКонтекстноеМенюРедактироватьРасширеннаяПодсказка + 143 + Label + true + true + + Left + + + Form.Command.Редактировать + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюСохранитьИзменения + 82 + true + true + + false + + СписокКонтекстноеМенюСохранитьИзмененияРасширеннаяПодсказка + 146 + Label + true + true + + Left + + + Form.Command.СохранитьИзменения + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюЗакончитьРедактирование + 80 + true + true + + true + + false + + СписокКонтекстноеМенюЗакончитьРедактированиеРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + Form.Command.ЗакончитьРедактирование + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюПечать + 255 + true + true + + true + + + СписокКонтекстноеМенюПечатьРасширеннаяПодсказка + 256 + Label + true + true + + Left + + + Form.Command.Печать + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюОтправить + 257 + true + true + + true + + + СписокКонтекстноеМенюОтправитьРасширеннаяПодсказка + 258 + Label + true + true + + Left + + + Form.Command.Отправить + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список контекстное меню группа команд основные</value> + + + СписокКонтекстноеМенюГруппаКомандОсновныеРасширеннаяПодсказка + 214 + Label + true + true + + Left + + + + + + СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьИШифрование + 104 + + СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодпись + 233 + + СписокКонтекстноеМенюПодписать + 106 + true + true + + true + + + СписокКонтекстноеМенюПодписатьРасширеннаяПодсказка + 154 + Label + true + true + + Left + + + Form.Command.Подписать + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюДобавитьПодписьИзФайла + 108 + true + true + + true + + + СписокКонтекстноеМенюДобавитьПодписьИзФайлаРасширеннаяПодсказка + 155 + Label + true + true + + Left + + + Form.Command.ДобавитьПодписьИзФайла + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюСохранитьВместеСПодписью + 109 + true + true + + true + + + СписокКонтекстноеМенюСохранитьВместеСПодписьюРасширеннаяПодсказка + 156 + Label + true + true + + Left + + + Form.Command.СохранитьВместеСПодписью + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Электронная подпись</value> + + + СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьРасширеннаяПодсказка + 234 + Label + true + true + + Left + + + + + + СписокКонтекстноеМенюГруппаКомандШифрование + 110 + + СписокКонтекстноеМенюЗашифровать + 111 + true + true + + true + + + СписокКонтекстноеМенюЗашифроватьРасширеннаяПодсказка + 158 + Label + true + true + + Left + + + Form.Command.Зашифровать + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюРасшифровать + 112 + true + true + + true + + + СписокКонтекстноеМенюРасшифроватьРасширеннаяПодсказка + 159 + Label + true + true + + Left + + + Form.Command.Расшифровать + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Шифрование</value> + + + СписокКонтекстноеМенюГруппаКомандШифрованиеРасширеннаяПодсказка + 157 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Электронная подпись и шифрование</value> + + + ru + Электронная подпись и шифрование + + + СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьИШифрованиеРасширеннаяПодсказка + 152 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + + СписокКонтекстноеМенюГруппаКомандДополнительные + 219 + + СписокКонтекстноеМенюСкопировать + 221 + true + true + + true + + + СписокКонтекстноеМенюСкопироватьРасширеннаяПодсказка + 222 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Copy + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюУстановитьПометкуУдаления + 223 + true + true + + true + + + СписокКонтекстноеМенюУстановитьПометкуУдаленияРасширеннаяПодсказка + 224 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.SetDeletionMark + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюСохранитьКак + 84 + true + true + + true + + false + + СписокКонтекстноеМенюСохранитьКакРасширеннаяПодсказка + 148 + Label + true + true + + Left + + + Form.Command.СохранитьКак + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюОсвободить + 85 + + <key>ru</key> + <value>Отменить редактирование</value> + + true + true + + true + + false + + СписокКонтекстноеМенюОсвободитьРасширеннаяПодсказка + 149 + Label + true + true + + Left + + + Form.Command.Освободить + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюОткрытьКаталогФайла + 83 + true + true + + true + + false + + СписокКонтекстноеМенюОткрытьКаталогФайлаРасширеннаяПодсказка + 147 + Label + true + true + + Left + + + Form.Command.ОткрытьКаталогФайла + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюИмпортФайлов + 87 + true + true + + true + + false + + СписокКонтекстноеМенюИмпортФайловРасширеннаяПодсказка + 151 + Label + true + true + + Left + + + Form.Command.ИмпортФайлов + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список контекстное меню группа команд дополнительные</value> + + + СписокКонтекстноеМенюГруппаКомандДополнительныеРасширеннаяПодсказка + 220 + Label + true + true + + Left + + + + + + СписокКонтекстноеМенюГруппаСтандартныхКоманд + 225 + true + true + + true + + + <key>ru</key> + <value>Список контекстное меню группа стандартных команд</value> + + + СписокКонтекстноеМенюГруппаСтандартныхКомандРасширеннаяПодсказка + 226 + Label + true + true + + Left + + + + Item.Список + + + + HierarchicalList + true + true + 1 + true + 10 + true + true + MultiRow +
                true
                + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + true + true + true + true + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + ГруппаПользовательскихНастроек
                - - СписокДатаСоздания - 23 - true - true - - - Список.ДатаСоздания - - - СписокДатаСозданияРасширеннаяПодсказка - 167 - Label - true - true - - Left - - - - СписокДатаСозданияКонтекстноеМеню - 24 - true - - InputField - Enter - true - Left - true - - 15 - true - true - false - true - true - true - Normal - - - - СписокРедактирует - 29 - true - true - - - Список.Редактирует - - - СписокРедактируетРасширеннаяПодсказка - 169 - Label - true - true - - Left - - - - СписокРедактируетКонтекстноеМеню - 30 - true - - InputField - Enter - true - Left - true - - 15 - true - true - true - true - true - Normal - - - - СписокТекущаяВерсияАвтор - 35 - true - true - - - Список.ТекущаяВерсияАвтор - - - СписокТекущаяВерсияАвторРасширеннаяПодсказка - 171 - Label - true - true - - Left - - - - СписокТекущаяВерсияАвторКонтекстноеМеню - 36 - true - - InputField - Enter - true - Left - true - - 17 - true - true - true - true - true - Normal - - - - СписокТекущаяВерсияДатаСоздания - 37 - true - true - - - Список.ТекущаяВерсияДатаСоздания - - - СписокТекущаяВерсияДатаСозданияРасширеннаяПодсказка - 172 - Label - true - true - - Left - - - - СписокТекущаяВерсияДатаСозданияКонтекстноеМеню - 38 - true - - InputField - Enter - true - Left - true - - 15 - true - true - false - true - true - true - Normal - - - - СписокХранитьВерсии - 63 - true - true - - - Список.ХранитьВерсии - - - СписокХранитьВерсииРасширеннаяПодсказка - 173 - Label - true - true - - Left - - - - СписокХранитьВерсииКонтекстноеМеню - 64 - true - - CheckBoxField - Enter - true - Left - true - - - - СписокРедактируетТекущийПользователь - 65 - true - true - - - Список.РедактируетТекущийПользователь - - None - - ru - Редактирует текущий пользователь - - - СписокРедактируетТекущийПользовательРасширеннаяПодсказка - 174 - Label - true - true - - Left - - - - СписокРедактируетТекущийПользовательКонтекстноеМеню - 66 - true - - CheckBoxField - Enter - true - - CommonPicture.РедактироватьФайл - - Left - true - - - - СписокСсылка - 89 - true - true - - - Список.Ref - - - СписокСсылкаРасширеннаяПодсказка - 175 - Label - true - true - - Left - - - - СписокСсылкаКонтекстноеМеню - 90 - true - - LabelField - Enter - true - Left - true - - 1 - true - true - - - None - - СписокКоманднаяПанель - 12 - Left - true - - - DragCheck - СписокПроверкаПеретаскивания - - - Selection - СписокВыбор - - - BeforeAddRow - СписокПередНачаломДобавления - - - OnActivateRow - СписокПриАктивизацииСтроки - - - Drag - СписокПеретаскивание - - - СписокСтрокаПоиска - 235 - - СписокСтрокаПоискаРасширеннаяПодсказка - 237 - Label - true - true - - Left - - - - СписокСтрокаПоискаКонтекстноеМеню - 236 - true - - Список - - true - - - - СписокСостояниеПросмотра - 238 - - СписокСостояниеПросмотраРасширеннаяПодсказка - 240 - Label - true - true - - Left - - - - СписокСостояниеПросмотраКонтекстноеМеню - 239 - true - - ViewStatusAddition - Список - - true - - - - СписокУправлениеПоиском - 241 - - СписокУправлениеПоискомРасширеннаяПодсказка - 243 - Label - true - true - - Left - - - - СписокУправлениеПоискомКонтекстноеМеню - 242 - true - - SearchControlAddition - Список - - true - - + true + true + + true + + + <key>ru</key> + <value>Файлы и пояснение облачного сервиса</value> + + + ru + Группа файлы и пояснение облачного сервиса + - СписокExtendedTooltip - 160 + ГруппаФайлыИПояснениеОблачногоСервисаРасширеннаяПодсказка + 263 Label true true @@ -1966,732 +2857,14 @@ Left - - СписокКонтекстноеМеню - 11 - - СписокКонтекстноеМенюСоздать - 215 - true - true - - true - - - СписокКонтекстноеМенюСоздатьРасширеннаяПодсказка - 216 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.Create - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюИзменить - 217 - - <key>ru</key> - <value>Открыть карточку</value> - - true - true - - true - - - СписокКонтекстноеМенюИзменитьРасширеннаяПодсказка - 218 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.Change - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюГруппаКомандОсновные - 213 - - СписокКонтекстноеМенюОткрыть - 78 - true - true - - true - - false - - СписокКонтекстноеМенюОткрытьРасширеннаяПодсказка - 142 - Label - true - true - - Left - - - Form.Command.ОткрытьФайл - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюЗанять - 81 - true - true - - false - - СписокКонтекстноеМенюЗанятьРасширеннаяПодсказка - 145 - Label - true - true - - Left - - - Form.Command.Занять - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюРедактировать - 79 - true - true - - true - - false - - СписокКонтекстноеМенюРедактироватьРасширеннаяПодсказка - 143 - Label - true - true - - Left - - - Form.Command.Редактировать - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюСохранитьИзменения - 82 - true - true - - false - - СписокКонтекстноеМенюСохранитьИзмененияРасширеннаяПодсказка - 146 - Label - true - true - - Left - - - Form.Command.СохранитьИзменения - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюЗакончитьРедактирование - 80 - true - true - - true - - false - - СписокКонтекстноеМенюЗакончитьРедактированиеРасширеннаяПодсказка - 144 - Label - true - true - - Left - - - Form.Command.ЗакончитьРедактирование - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюПечать - 255 - true - true - - true - - - СписокКонтекстноеМенюПечатьРасширеннаяПодсказка - 256 - Label - true - true - - Left - - - Form.Command.Печать - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюОтправить - 257 - true - true - - true - - - СписокКонтекстноеМенюОтправитьРасширеннаяПодсказка - 258 - Label - true - true - - Left - - - Form.Command.Отправить - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Список контекстное меню группа команд основные</value> - - - СписокКонтекстноеМенюГруппаКомандОсновныеРасширеннаяПодсказка - 214 - Label - true - true - - Left - - - - - - СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьИШифрование - 104 - - СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодпись - 233 - - СписокКонтекстноеМенюПодписать - 106 - true - true - - true - - - СписокКонтекстноеМенюПодписатьРасширеннаяПодсказка - 154 - Label - true - true - - Left - - - Form.Command.Подписать - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюДобавитьПодписьИзФайла - 108 - true - true - - true - - - СписокКонтекстноеМенюДобавитьПодписьИзФайлаРасширеннаяПодсказка - 155 - Label - true - true - - Left - - - Form.Command.ДобавитьПодписьИзФайла - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюСохранитьВместеСПодписью - 109 - true - true - - true - - - СписокКонтекстноеМенюСохранитьВместеСПодписьюРасширеннаяПодсказка - 156 - Label - true - true - - Left - - - Form.Command.СохранитьВместеСПодписью - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Электронная подпись</value> - - - СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьРасширеннаяПодсказка - 234 - Label - true - true - - Left - - - - - - СписокКонтекстноеМенюГруппаКомандШифрование - 110 - - СписокКонтекстноеМенюЗашифровать - 111 - true - true - - true - - - СписокКонтекстноеМенюЗашифроватьРасширеннаяПодсказка - 158 - Label - true - true - - Left - - - Form.Command.Зашифровать - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюРасшифровать - 112 - true - true - - true - - - СписокКонтекстноеМенюРасшифроватьРасширеннаяПодсказка - 159 - Label - true - true - - Left - - - Form.Command.Расшифровать - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Шифрование</value> - - - СписокКонтекстноеМенюГруппаКомандШифрованиеРасширеннаяПодсказка - 157 - Label - true - true - - Left - - - - - true - true - - true - - - <key>ru</key> - <value>Электронная подпись и шифрование</value> - - - ru - Электронная подпись и шифрование - - - СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьИШифрованиеРасширеннаяПодсказка - 152 - Label - true - true - - Left - - - Popup - - Auto - Normal - - - - СписокКонтекстноеМенюГруппаКомандДополнительные - 219 - - СписокКонтекстноеМенюСкопировать - 221 - true - true - - true - - - СписокКонтекстноеМенюСкопироватьРасширеннаяПодсказка - 222 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.Copy - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюУстановитьПометкуУдаления - 223 - true - true - - true - - - СписокКонтекстноеМенюУстановитьПометкуУдаленияРасширеннаяПодсказка - 224 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.SetDeletionMark - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюСохранитьКак - 84 - true - true - - true - - false - - СписокКонтекстноеМенюСохранитьКакРасширеннаяПодсказка - 148 - Label - true - true - - Left - - - Form.Command.СохранитьКак - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюОсвободить - 85 - - <key>ru</key> - <value>Отменить редактирование</value> - - true - true - - true - - false - - СписокКонтекстноеМенюОсвободитьРасширеннаяПодсказка - 149 - Label - true - true - - Left - - - Form.Command.Освободить - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюОткрытьКаталогФайла - 83 - true - true - - true - - false - - СписокКонтекстноеМенюОткрытьКаталогФайлаРасширеннаяПодсказка - 147 - Label - true - true - - Left - - - Form.Command.ОткрытьКаталогФайла - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюИмпортФайлов - 87 - true - true - - true - - false - - СписокКонтекстноеМенюИмпортФайловРасширеннаяПодсказка - 151 - Label - true - true - - Left - - - Form.Command.ИмпортФайлов - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Список контекстное меню группа команд дополнительные</value> - - - СписокКонтекстноеМенюГруппаКомандДополнительныеРасширеннаяПодсказка - 220 - Label - true - true - - Left - - - - - - СписокКонтекстноеМенюГруппаСтандартныхКоманд - 225 - true - true - - true - - - <key>ru</key> - <value>Список контекстное меню группа стандартных команд</value> - - - СписокКонтекстноеМенюГруппаСтандартныхКомандРасширеннаяПодсказка - 226 - Label - true - true - - Left - - - - Item.Список - - - - HierarchicalList - true - true - 1 - true - 10 - true - true - MultiRow -
                true
                - 1 - 1 - AutoUse - AutoUse - true - true - Auto - Auto - true - true - true - true - None - None - None - true - - 60 - - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - - true - ГруппаПользовательскихНастроек + UsualGroup + + Vertical + Auto + true + true + Auto + Auto @@ -3004,6 +3177,43 @@ true + + ФайлыРедактируютсяВОблачномСервисе + + <key>ru</key> + <value>Файлы редактируются в облачном сервисе</value> + + 9 + + Boolean + + + true + + + true + + + + ЗапрещенныеРасширения + + <key>ru</key> + <value>Запрещенные расширения</value> + + 10 + + ValueList + + + true + + + true + + + + + СоздатьФайл @@ -3502,6 +3712,29 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>НастроитьСинхронизацию</name> + <title> + <key>ru</key> + <value>Синхронизация с облаком ...</value> + + 22 + + ru + Настроить синхронизацию + + + true + + + + НастроитьСинхронизацию + + + FunctionalOption.ИспользоватьСинхронизациюФайлов + DontUse + Auto + diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаСпискаПрисоединенныхФайлов/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ФормаСпискаПрисоединенныхФайлов/Help/ru.html index 0ed337501..6977f2504 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 c79cc42ee..5647e39d5 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаСпискаПрисоединенныхФайлов/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаСпискаПрисоединенныхФайлов/Module.bsl @@ -62,6 +62,20 @@ РасширенияПоддерживающиеПредпросмотр = ФайловыеФункцииСлужебный.СписокРасширенийДляПредпросмотра(); + ОбновитьПояснениеОблачногоСервиса(); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + + Если Не МодульУправлениеДоступом.ЕстьРоль("НастройкаСинхронизацииФайлов") Тогда + Элементы.НастроитьСинхронизацию.Видимость = Ложь; + КонецЕсли; + + КонецЕсли; + + ЗапрещенныеРасширения = ФайловыеФункцииСлужебный.СписокЗапрещенныхРасширений(); + КонецПроцедуры &НаКлиенте @@ -71,6 +85,11 @@ Элементы.ФормаСоздатьСоСканера.Видимость = ФайловыеФункцииСлужебныйКлиент.ДоступнаКомандаСканировать(); + #Если ВебКлиент Тогда + Элементы.Печать.Видимость = Ложь; + Элементы.СписокКонтекстноеМенюПечать.Видимость = Ложь; + #КонецЕсли + КонецПроцедуры &НаКлиенте @@ -106,9 +125,7 @@ КонецЕсли; Если ИмяСобытия = "Запись_Файл" И Параметр.Событие = "ДанныеФайлаИзменены" Тогда - Если Элементы.Список.ТекущиеДанные <> Неопределено Тогда - УстановитьДоступностьФайловыхКоманд(); - КонецЕсли; + УстановитьДоступностьФайловыхКоманд(); КонецЕсли; Если ВРег(ИмяСобытия) = ВРег("Запись_НаборКонстант") @@ -145,11 +162,23 @@ Возврат; КонецЕсли; + Если ЗапрещенныеРасширения.НайтиПоЗначению(Элементы.Список.ТекущиеДанные.Расширение) <> Неопределено Тогда + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ВыбраннаяСтрока", ВыбраннаяСтрока); + ДополнительныеПараметры.Вставить("ПерсональныеНастройки", ПерсональныеНастройки); + Оповещение = Новый ОписаниеОповещения("ВыбратьФайлПослеПодтверждения", ЭтотОбъект, ДополнительныеПараметры); + ПараметрыФормы = Новый Структура("Ключ", "ПередОткрытиемФайла"); + ПараметрыФормы.Вставить("ИмяФайла", + ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(Элементы.Список.ТекущиеДанные.Наименование, Элементы.Список.ТекущиеДанные.Расширение)); + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение); + Возврат; + КонецЕсли; + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(ВыбраннаяСтрока, УникальныйИдентификатор, Неопределено, ПредыдущийАдресФайла); // Если уже занят для редактирования, то не спрашивать - сразу открывать. - Если ДанныеФайла.Редактирует.Пустая() Тогда + Если Не ЗначениеЗаполнено(ДанныеФайла.Редактирует) Тогда СпрашиватьРежимРедактированияПриОткрытииФайла = ПерсональныеНастройки.СпрашиватьРежимРедактированияПриОткрытииФайла; Если СпрашиватьРежимРедактированияПриОткрытииФайла = Истина Тогда ПараметрыОбработчика = Новый Структура; @@ -210,21 +239,6 @@ УстановитьДоступностьФайловыхКоманд(); - Если НЕ ДействиеРазрешено() Тогда - Возврат; - КонецЕсли; - - ТекущиеДанные = Элементы.Список.ТекущиеДанные; - - Если РасширенияПоддерживающиеПредпросмотр.НайтиПоЗначению(ТекущиеДанные.Расширение) <> Неопределено Тогда - ДанныеФайла = ДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); - АдресДанныхФайла = ДанныеФайла.НавигационнаяСсылкаТекущейВерсии; - Иначе - ТекстНевыбраннойКартинки = НСтр("ru = 'Нет данных для предварительного просмотра'"); - АдресДанныхФайла = Неопределено; - Элементы.АдресДанныхФайла.ТекстНевыбраннойКартинки = ТекстНевыбраннойКартинки; - КонецЕсли; - КонецПроцедуры #КонецОбласти @@ -304,6 +318,17 @@ Возврат; КонецЕсли; + Если ЗапрещенныеРасширения.НайтиПоЗначению(Элементы.Список.ТекущиеДанные.Расширение) <> Неопределено Тогда + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ФайлСсылка", ФайлСсылка); + Оповещение = Новый ОписаниеОповещения("ОткрытьФайлПослеПодтверждения", ЭтотОбъект, ДополнительныеПараметры); + ПараметрыФормы = Новый Структура("Ключ", "ПередОткрытиемФайла"); + ПараметрыФормы.Вставить("ИмяФайла", + ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(Элементы.Список.ТекущиеДанные.Наименование, Элементы.Список.ТекущиеДанные.Расширение)); + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение); + Возврат; + КонецЕсли; + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(ФайлСсылка, УникальныйИдентификатор, Неопределено, ПредыдущийАдресФайла); РаботаСФайламиКлиент.Открыть(ДанныеФайла); @@ -318,6 +343,17 @@ Возврат; КонецЕсли; + Если ЗапрещенныеРасширения.НайтиПоЗначению(Элементы.Список.ТекущиеДанные.Расширение) <> Неопределено Тогда + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ФайлСсылка", ФайлСсылка); + Оповещение = Новый ОписаниеОповещения("РедактироватьФайлПослеПодтверждения", ЭтотОбъект, ДополнительныеПараметры); + ПараметрыФормы = Новый Структура("Ключ", "ПередОткрытиемФайла"); + ПараметрыФормы.Вставить("ИмяФайла", + ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(Элементы.Список.ТекущиеДанные.Наименование, Элементы.Список.ТекущиеДанные.Расширение)); + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение); + Возврат; + КонецЕсли; + Обработчик = Новый ОписаниеОповещения("РедактироватьЗавершение", ЭтотОбъект); РаботаСФайламиСлужебныйКлиент.РедактироватьСОповещением(Обработчик, ФайлСсылка); @@ -560,11 +596,6 @@ Возврат; КонецЕсли; - #Если ВебКлиент Тогда - ПоказатьПредупреждение(, НСтр("ru = 'В Веб-клиенте печать файлов не поддерживается.'")); - Возврат; - #КонецЕсли - СистемнаяИнфо = Новый СистемнаяИнформация; Если СистемнаяИнфо.ТипПлатформы <> ТипПлатформы.Windows_x86 И СистемнаяИнфо.ТипПлатформы <> ТипПлатформы.Windows_x86_64 Тогда @@ -576,13 +607,13 @@ Если ВыделенныеСтроки.Количество() > 1 Тогда ДанныеФайлов = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайловДляОткрытия( ВыделенныеСтроки, - ЭтаФорма.УникальныйИдентификатор); + ЭтотОбъект.УникальныйИдентификатор); РаботаСФайламиКлиент.НапечататьФайлы(ДанныеФайлов); Иначе ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия( Элементы.Список.ТекущаяСтрока, - ЭтаФорма.УникальныйИдентификатор, + ЭтотОбъект.УникальныйИдентификатор, Неопределено, ПредыдущийАдресФайла); @@ -598,6 +629,58 @@ #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура ОткрытьФайлПослеПодтверждения(Результат, ДополнительныеПараметры) Экспорт + + Если Результат <> Неопределено И Результат = "Продолжить" Тогда + + ФайлСсылка = ДополнительныеПараметры.ФайлСсылка; + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(ФайлСсылка, + УникальныйИдентификатор, Неопределено, ПредыдущийАдресФайла); + РаботаСФайламиКлиент.Открыть(ДанныеФайла); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура РедактироватьФайлПослеПодтверждения(Результат, ДополнительныеПараметры) Экспорт + + Если Результат <> Неопределено И Результат = "Продолжить" Тогда + ФайлСсылка = ДополнительныеПараметры.ФайлСсылка; + Обработчик = Новый ОписаниеОповещения("РедактироватьЗавершение", ЭтотОбъект); + РаботаСФайламиСлужебныйКлиент.РедактироватьСОповещением(Обработчик, ФайлСсылка); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыбратьФайлПослеПодтверждения(Результат, ДополнительныеПараметры) Экспорт + + Если Результат <> Неопределено И Результат = "Продолжить" Тогда + ВыбраннаяСтрока = ДополнительныеПараметры.ВыбраннаяСтрока; + ПерсональныеНастройки = ДополнительныеПараметры.ПерсональныеНастройки; + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(ВыбраннаяСтрока, + УникальныйИдентификатор, Неопределено, ПредыдущийАдресФайла); + + // Если уже занят для редактирования, то не спрашивать - сразу открывать. + Если Не ЗначениеЗаполнено(ДанныеФайла.Редактирует) Тогда + СпрашиватьРежимРедактированияПриОткрытииФайла = ПерсональныеНастройки.СпрашиватьРежимРедактированияПриОткрытииФайла; + Если СпрашиватьРежимРедактированияПриОткрытииФайла = Истина Тогда + ПараметрыОбработчика = Новый Структура; + ПараметрыОбработчика.Вставить("ДанныеФайла", ДанныеФайла); + Обработчик = Новый ОписаниеОповещения("СписокВыборПослеВыбораРежимаОткрытия", ЭтотОбъект, ПараметрыОбработчика); + ОткрытьФорму("Справочник.Файлы.Форма.ФормаВыбораРежимаОткрытия", , ЭтотОбъект, , , , Обработчик, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + Возврат; + КонецЕсли; + КонецЕсли; + + // Для просмотра. + РаботаСФайламиСлужебныйКлиент.ОткрытьФайлСОповещением(Неопределено, ДанныеФайла, УникальныйИдентификатор); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура СписокВыборПослеВыбораРежимаОткрытия(Результат, ПараметрыВыполнения) Экспорт Если ТипЗнч(Результат) <> Тип("Структура") Тогда @@ -708,7 +791,6 @@ Процедура УстановитьДоступностьФайловыхКоманд() ТекущиеДанные = Элементы.Список.ТекущиеДанные; - Если ТекущиеДанные <> Неопределено И ТипЗнч(Элементы.Список.ТекущаяСтрока) <> Тип("СтрокаГруппировкиДинамическогоСписка") Тогда @@ -721,6 +803,8 @@ СделатьКомандыНедоступными(); КонецЕсли; + ОбновитьПредпросмотр(); + КонецПроцедуры &НаКлиенте @@ -779,26 +863,26 @@ Элементы.ФормаЗакончитьРедактирование.Доступность = РедактируетТекущийПользователь; Элементы.СписокКонтекстноеМенюЗакончитьРедактирование.Доступность = РедактируетТекущийПользователь; - Элементы.ФормаСохранитьИзменения.Доступность = РедактируетТекущийПользователь; - Элементы.СписокКонтекстноеМенюСохранитьИзменения.Доступность = РедактируетТекущийПользователь; + Элементы.ФормаСохранитьИзменения.Доступность = РедактируетТекущийПользователь И Не ФайлыРедактируютсяВОблачномСервисе; + Элементы.СписокКонтекстноеМенюСохранитьИзменения.Доступность = РедактируетТекущийПользователь И Не ФайлыРедактируютсяВОблачномСервисе; - Элементы.ФормаОсвободить.Доступность = Не Редактирует.Пустая(); - Элементы.СписокКонтекстноеМенюОсвободить.Доступность = Не Редактирует.Пустая(); + Элементы.ФормаОсвободить.Доступность = ЗначениеЗаполнено(Редактирует) И Не ФайлыРедактируютсяВОблачномСервисе; + Элементы.СписокКонтекстноеМенюОсвободить.Доступность = ЗначениеЗаполнено(Редактирует) И Не ФайлыРедактируютсяВОблачномСервисе; - Элементы.ФормаЗанять.Доступность = Редактирует.Пустая() И НЕ (ПодписанЭП ИЛИ Зашифрован); - Элементы.СписокКонтекстноеМенюЗанять.Доступность = Редактирует.Пустая() И НЕ (ПодписанЭП ИЛИ Зашифрован); + Элементы.ФормаЗанять.Доступность = Не ЗначениеЗаполнено(Редактирует) И НЕ (ПодписанЭП ИЛИ Зашифрован); + Элементы.СписокКонтекстноеМенюЗанять.Доступность = Не ЗначениеЗаполнено(Редактирует) И НЕ (ПодписанЭП ИЛИ Зашифрован); - Элементы.ФормаРедактировать.Доступность = НЕ (ПодписанЭП ИЛИ Зашифрован); - Элементы.СписокКонтекстноеМенюРедактировать.Доступность = НЕ (ПодписанЭП ИЛИ Зашифрован); + Элементы.ФормаРедактировать.Доступность = НЕ (ПодписанЭП ИЛИ Зашифрован) И Не ФайлыРедактируютсяВОблачномСервисе; + Элементы.СписокКонтекстноеМенюРедактировать.Доступность = НЕ (ПодписанЭП ИЛИ Зашифрован) И Не ФайлыРедактируютсяВОблачномСервисе; - Элементы.ФормаПодписать.Доступность = Редактирует.Пустая(); - Элементы.СписокКонтекстноеМенюПодписать.Доступность = Редактирует.Пустая(); + Элементы.ФормаПодписать.Доступность = Не ЗначениеЗаполнено(Редактирует); + Элементы.СписокКонтекстноеМенюПодписать.Доступность = Не ЗначениеЗаполнено(Редактирует); Элементы.ФормаСохранитьВместеСПодписью.Доступность = ПодписанЭП; Элементы.СписокКонтекстноеМенюСохранитьВместеСПодписью.Доступность = ПодписанЭП; - Элементы.ФормаЗашифровать.Доступность = Редактирует.Пустая() И НЕ Зашифрован; - Элементы.СписокКонтекстноеМенюЗашифровать.Доступность = Редактирует.Пустая() И НЕ Зашифрован; + Элементы.ФормаЗашифровать.Доступность = Не ЗначениеЗаполнено(Редактирует) И НЕ Зашифрован; + Элементы.СписокКонтекстноеМенюЗашифровать.Доступность = Не ЗначениеЗаполнено(Редактирует) И НЕ Зашифрован; Элементы.ФормаРасшифровать.Доступность = Зашифрован; Элементы.СписокКонтекстноеМенюРасшифровать.Доступность = Зашифрован; @@ -818,6 +902,21 @@ Элементы.Отправить.Доступность = Истина; Элементы.СписокКонтекстноеМенюОтправить.Доступность = Истина; + Элементы.ФормаСоздатьИзФайла.Доступность = Не ФайлыРедактируютсяВОблачномСервисе; + Элементы.СписокКонтекстноеМенюСоздать.Доступность = Не ФайлыРедактируютсяВОблачномСервисе; + + Элементы.ФормаСоздатьИзШаблона.Доступность = Не ФайлыРедактируютсяВОблачномСервисе; + Элементы.ФормаСоздатьСоСканера.Доступность = Не ФайлыРедактируютсяВОблачномСервисе; + + Элементы.ФормаСкопировать.Доступность = Не ФайлыРедактируютсяВОблачномСервисе; + Элементы.СписокКонтекстноеМенюСкопировать.Доступность = Не ФайлыРедактируютсяВОблачномСервисе; + + Элементы.ФормаУстановитьПометкуУдаления.Доступность = Не ФайлыРедактируютсяВОблачномСервисе; + Элементы.СписокКонтекстноеМенюУстановитьПометкуУдаления.Доступность = Не ФайлыРедактируютсяВОблачномСервисе; + + Элементы.ФормаИмпортФайлов.Доступность = Не ФайлыРедактируютсяВОблачномСервисе; + Элементы.СписокКонтекстноеМенюИмпортФайлов.Доступность = Не ФайлыРедактируютсяВОблачномСервисе; + КонецПроцедуры &НаКлиенте @@ -884,13 +983,13 @@ КонецЕсли; Если ТипПеретаскиваемого <> Тип("Файл") Тогда - ПоказатьПредупреждение(, Нстр("ru = 'Выберите файлы.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Выберите файлы.'")); Возврат; КонецЕсли; Для Каждого ФайлПринятый Из ПараметрыПеретаскивания.Значение Цикл Если Не ФайлПринятый.ЭтоФайл() Тогда // Только файлы, но не каталоги. - ПоказатьПредупреждение(, Нстр("ru = 'Выберите только файлы без каталогов.'")); + ПоказатьПредупреждение(, НСтр("ru = 'Выберите только файлы без каталогов.'")); Возврат; КонецЕсли; КонецЦикла; @@ -916,21 +1015,23 @@ // Вывод ошибок. КоличествоОшибок = ТекстыОшибок.Количество(); Если КоличествоОшибок > 0 Тогда - Результат = Новый Структура; + ПараметрыПредупреждения = Новый Структура("Текст, Подробно"); Если КоличествоОшибок = 1 Тогда - СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(Результат, ТекстыОшибок[0]); + ПараметрыПредупреждения.Текст = ТекстыОшибок[0]; Иначе - КраткийТекстВсехОшибок = СтрЗаменить(НСтр("ru = 'При выполнении возникли ошибки (%1).'"), "%1", Строка(КоличествоОшибок)); - ПолныйТекстВсехОшибок = ""; + ПараметрыПредупреждения.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При выполнении возникли ошибки (%1).'"), + Строка(КоличествоОшибок)); + Подробно = ""; Для Каждого ТекстОшибки Из ТекстыОшибок Цикл - Если ПолныйТекстВсехОшибок <> "" Тогда - ПолныйТекстВсехОшибок = ПолныйТекстВсехОшибок + Символы.ПС + Символы.ПС + "---" + Символы.ПС + Символы.ПС; + Если Подробно <> "" Тогда + Подробно = Подробно + Символы.ПС + Символы.ПС + "---" + Символы.ПС + Символы.ПС; КонецЕсли; - ПолныйТекстВсехОшибок = ПолныйТекстВсехОшибок + ТекстОшибки; + Подробно = Подробно + ТекстОшибки; КонецЦикла; - СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(Результат, КраткийТекстВсехОшибок, ПолныйТекстВсехОшибок); + ПараметрыПредупреждения.Подробно = Подробно; КонецЕсли; - СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); + СтандартныеПодсистемыКлиент.ВывестиПредупреждение(ЭтотОбъект, ПараметрыПредупреждения); КонецЕсли; КонецЕсли; КонецПроцедуры @@ -963,21 +1064,130 @@ КонецПроцедуры &НаКлиенте -Функция ДействиеРазрешено() +Процедура ОбновитьПредпросмотр() - ДействиеРазрешено = Истина; - Если Элементы.Список.ТекущиеДанные = Неопределено Тогда - ДействиеРазрешено = Ложь; + Если Не Предпросмотр Тогда + Возврат; КонецЕсли; - Возврат ДействиеРазрешено; - -КонецФункции + ТекущиеДанные = Элементы.Список.ТекущиеДанные; + Если ТекущиеДанные <> Неопределено + И РасширенияПоддерживающиеПредпросмотр.НайтиПоЗначению(ТекущиеДанные.Расширение) <> Неопределено Тогда + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + АдресДанныхФайла = ДанныеФайла.НавигационнаяСсылкаТекущейВерсии; + Иначе + АдресДанныхФайла = Неопределено; + Элементы.АдресДанныхФайла.ТекстНевыбраннойКартинки = НСтр("ru = 'Нет данных для предварительного просмотра'"); + КонецЕсли; -&НаСервереБезКонтекста -Функция ДанныеФайла(Знач ПрисоединенныйФайл, Знач ИдентификаторФормы = Неопределено) +КонецПроцедуры + +&НаСервере +Процедура ОбновитьПояснениеОблачногоСервиса() - Возврат РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(ПрисоединенныйФайл, ИдентификаторФормы); + ВидимостьПояснения = Ложь; + + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюФайлов") Тогда + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | СтатусыСинхронизацииФайловСОблачнымСервисом.Файл, + | СтатусыСинхронизацииФайловСОблачнымСервисом.Href, + | СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись.Наименование, + | СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись.Сервис КАК Сервис + |ИЗ + | РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом + |ГДЕ + | СтатусыСинхронизацииФайловСОблачнымСервисом.Файл = &ВладелецФайла"; + + Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайла.Ссылка); + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + + ФайлыРедактируютсяВОблачномСервисе = Истина; + ВидимостьПояснения = Истина; + + АдресПапкиВОблачномСервисе = ФайловыеФункцииСлужебныйКлиентСервер.АдресВОблачномСервисе( + ВыборкаДетальныеЗаписи.Сервис, ВыборкаДетальныеЗаписи.Href); + + ЧастиСтроки = Новый Массив; + ЧастиСтроки.Добавить(НСтр("ru = 'Работа с файлами ведется в облачном сервисе'")); + ЧастиСтроки.Добавить(" "); + ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока(ВыборкаДетальныеЗаписи.УчетнаяЗаписьНаименование, , , , АдресПапкиВОблачномСервисе)); + Элементы.ДекорацияПояснение.Заголовок = Новый ФорматированнаяСтрока(ЧастиСтроки); + + КонецЦикла; + КонецЕсли; + + Элементы.ГруппаПояснениеОблачногоСервиса.Видимость = ВидимостьПояснения; + +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьСинхронизацию(Команда) + + НастройкаСинхронизации = ПараметрыНастройкиСинхронизации(ВладелецФайла); + + Если ЗначениеЗаполнено(НастройкаСинхронизации.УчетнаяЗапись) Тогда + ТипЗначения = Тип("РегистрСведенийКлючЗаписи.НастройкиСинхронизацииФайлов"); + ПараметрыЗаписи = Новый Массив(1); + ПараметрыЗаписи[0] = НастройкаСинхронизации; + + КлючЗаписи = Новый(ТипЗначения, ПараметрыЗаписи); + + ПараметрыЗаписи = Новый Структура; + ПараметрыЗаписи.Вставить("Ключ", КлючЗаписи); + Иначе + НастройкаСинхронизации.Вставить("ЭтоФайл", Истина); + ПараметрыЗаписи = НастройкаСинхронизации; + КонецЕсли; + + ОткрытьФорму("РегистрСведений.НастройкиСинхронизацииФайлов.Форма.ПростаяФормаЗаписиНастройки", ПараметрыЗаписи, ЭтотОбъект); + +КонецПроцедуры + +&НаСервере +Функция ПараметрыНастройкиСинхронизации(ВладелецФайла) + + ТипВладельцаФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Тип("СправочникСсылка.Файлы")); + + Отбор = Новый Структура( + "ВладелецФайла, ТипВладельцаФайла, УчетнаяЗапись", + ВладелецФайла, + ТипВладельцаФайла, + Справочники.УчетныеЗаписиСинхронизацииФайлов.ПустаяСсылка()); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | НастройкиСинхронизацииФайлов.ВладелецФайла, + | НастройкиСинхронизацииФайлов.ТипВладельцаФайла, + | НастройкиСинхронизацииФайлов.УчетнаяЗапись + |ИЗ + | РегистрСведений.НастройкиСинхронизацииФайлов КАК НастройкиСинхронизацииФайлов + |ГДЕ + | НастройкиСинхронизацииФайлов.ВладелецФайла = &ВладелецФайла + | И НастройкиСинхронизацииФайлов.ТипВладельцаФайла = &ТипВладельцаФайла"; + + Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайла); + Запрос.УстановитьПараметр("ТипВладельцаФайла", ТипВладельцаФайла); + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + Если ВыборкаДетальныеЗаписи.Количество() = 1 Тогда + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Отбор.УчетнаяЗапись = ВыборкаДетальныеЗаписи.УчетнаяЗапись; + КонецЦикла; + КонецЕсли; + + Возврат Отбор; КонецФункции diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаЭкспортаПапки/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ФормаЭкспортаПапки/Help/ru.html index 5cb39dd3e..3ba968c09 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаЭкспортаПапки/Help/ru.html +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаЭкспортаПапки/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

                Сохранение папки

                diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form index 47bd47fda..21f8862e8 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Form.form @@ -1292,6 +1292,7 @@ Page auto + false
                @@ -1437,20 +1438,105 @@ Normal
                - - ЭлектронныеПодписиСтатус - 199 + + ЭлектронныеПодписиПроверка + 325 + + ЭлектронныеПодписиСтатус + 199 + true + true + + true + + + ЭлектронныеПодписи.Статус + + + ЭлектронныеПодписиСтатусРасширеннаяПодсказка + 287 + Label + true + true + + Left + + + + ЭлектронныеПодписиСтатусКонтекстноеМеню + 200 + true + + InputField + Auto + true + Left + true + + 10 + true + true + true + true + true + true + Normal + + + + ЭлектронныеПодписиДатаПроверкиПодписи + 322 + true + true + + true + + + ЭлектронныеПодписи.ДатаПроверкиПодписи + + + ЭлектронныеПодписиДатаПроверкиПодписиРасширеннаяПодсказка + 324 + Label + true + true + + Left + + + + ЭлектронныеПодписиДатаПроверкиПодписиКонтекстноеМеню + 323 + true + + InputField + Auto + true + Left + true + + 10 + true + true + true + true + true + true + Normal + + true true true - - ЭлектронныеПодписи.Статус - + + <key>ru</key> + <value>Электронные подписи проверка</value> + - ЭлектронныеПодписиСтатусРасширеннаяПодсказка - 287 + ЭлектронныеПодписиПроверкаРасширеннаяПодсказка + 326 Label true true @@ -1458,24 +1544,11 @@ Left - - ЭлектронныеПодписиСтатусКонтекстноеМеню - 200 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal + ColumnGroup + + InCell + auto + true @@ -1783,6 +1856,7 @@ Vertical auto + false @@ -2015,6 +2089,7 @@ Vertical auto + false @@ -2043,6 +2118,7 @@ Vertical auto + false true @@ -2070,6 +2146,10 @@ Pages + + OnCurrentPageChange + ГруппаДополнительныеДанныеСтраницыПриСменеСтраницы + TabsOnTop Auto @@ -2885,10 +2965,10 @@ - Неверна + ПодписьВерна <key>ru</key> - <value>Неверна</value> + <value>Подпись верна</value> 8 @@ -2956,6 +3036,24 @@ true + + ДатаПроверкиПодписи + + <key>ru</key> + <value>Дата проверки</value> + + 10 + + Date + + + + true + + + true + + СертификатыШифрования @@ -3112,6 +3210,43 @@ true + + ФайлРедактируетсяВОблаке + + <key>ru</key> + <value>Файл редактируется в облаке</value> + + 19 + + Boolean + + + true + + + true + + + + ЗапрещенныеРасширения + + <key>ru</key> + <value>Запрещенные расширения</value> + + 20 + + ValueList + + + true + + + true + + + + + Записать @@ -3557,6 +3692,7 @@ <name>Проверить</name> </handler> </action> + <modifiesStoredData>true</modifiesStoredData> <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> @@ -3579,6 +3715,7 @@ <name>ПроверитьВсе</name> </handler> </action> + <modifiesStoredData>true</modifiesStoredData> <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> @@ -3657,10 +3794,7 @@ </parameters> <parameters> <name>ВладелецФайла</name> - <valueType> - <types>BusinessProcessRef.Задание</types> - <types>CatalogRef.ПапкиФайлов</types> - </valueType> + <valueType/> <keyParameter>true</keyParameter> </parameters> <commandInterface> diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Help/ru.html index 60eb1cbc6..e1d626fb0 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Карточка файла содержит различные сведения о файле и его текущей версии и кнопки для выполнения <a href="Catalog.Файлы/Help">основных действий</a> с файлом. Дополнительные команды для работы с файлом находятся в меню <strong>Еще</strong>.</p> <p>Для открытия карточки файла нажмите клавишу <strong>F2</strong> или<strong> Еще -</strong> <strong>Открыть карточку</strong> в <a href="Catalog.Файлы.Form.Файлы/Help">списке файлов</a>. Карточку можно также открыть из <a href="Catalog.Файлы.Form.ФормаСпискаПрисоединенныхФайлов/Help">списка присоединенных файлов</a> объекта программы, <a href="DataProcessor.ПолнотекстовыйПоискВДанных/Help">полнотекстового поиска</a> или из отчетов.</p> <h3>Сведения о файле</h3> diff --git a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl index 1e93281ea..8b88c53a7 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ФормаЭлемента/Module.bsl @@ -60,6 +60,7 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты"); + ДополнительныеПараметры.Вставить("ОтложеннаяИнициализация", Истина); МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); МодульУправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры); КонецЕсли; @@ -130,6 +131,12 @@ СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект, "ГруппаСведения"); СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект, "ГруппаВерсия"); + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюФайлов") Тогда + ФайлРедактируетсяВОблаке = ФайловыеФункцииСлужебный.ФайлРедактируетсяВОблаке(Объект.Ссылка); + КонецЕсли; + + ЗапрещенныеРасширения = ФайловыеФункцииСлужебный.СписокЗапрещенныхРасширений(); + КонецПроцедуры &НаКлиенте @@ -153,6 +160,11 @@ ПриОткрытииЗавершение(); + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -220,6 +232,7 @@ МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); Если МодульУправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда ОбновитьЭлементыДополнительныхРеквизитов(); + МодульУправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); КонецЕсли; КонецЕсли; // Конец СтандартныеПодсистемы.Свойства @@ -281,6 +294,12 @@ Модифицированность = Ложь; КонецЕсли; + ВерсияОбъекта = Объект.ТекущаяВерсия.ПолучитьОбъект(); + ФайловыеФункцииСлужебный.ПеренестиРезультатыПроверкиПодписей(ЭлектронныеПодписи, ВерсияОбъекта.ЭлектронныеПодписи); + Если ВерсияОбъекта.Модифицированность() Тогда + ВерсияОбъекта.Записать(); + КонецЕсли; + РазблокироватьДанныеДляРедактирования(Объект.Ссылка, УникальныйИдентификатор); КонецПроцедуры @@ -348,6 +367,20 @@ КонецПроцедуры +&НаКлиенте +Процедура ГруппаДополнительныеДанныеСтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") + И ТекущаяСтраница.Имя = "ГруппаДополнительныеРеквизиты" + И Не ЭтотОбъект.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация Тогда + + СвойстваВыполнитьОтложеннуюИнициализацию(); + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыЭлектронныеПодписи @@ -401,6 +434,15 @@ Записать(); КонецЕсли; + Если ЗапрещенныеРасширения.НайтиПоЗначению(Объект.ТекущаяВерсияРасширение) <> Неопределено Тогда + Оповещение = Новый ОписаниеОповещения("РедактироватьФайлПослеПодтверждения", ЭтотОбъект); + ПараметрыФормы = Новый Структура("Ключ", "ПередОткрытиемФайла"); + ПараметрыФормы.Вставить("ИмяФайла", + ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(Объект.Наименование, Объект.ТекущаяВерсияРасширение)); + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение); + Возврат; + КонецЕсли; + Обработчик = Новый ОписаниеОповещения("ПрочитатьИУстановитьДоступностьЭлементовФормы", ЭтотОбъект); РаботаСФайламиСлужебныйКлиент.РедактироватьСОповещением(Обработчик, Объект.Ссылка, УникальныйИдентификатор); @@ -644,6 +686,28 @@ #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура ОткрытьФайлПослеПодтверждения(Результат, ДополнительныеПараметры) Экспорт + + Если Результат <> Неопределено И Результат = "Продолжить" Тогда + + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(Объект.Ссылка, УникальныйИдентификатор); + РаботаСФайламиКлиент.Открыть(ДанныеФайла); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура РедактироватьФайлПослеПодтверждения(Результат, ДополнительныеПараметры) Экспорт + + Если Результат <> Неопределено И Результат = "Продолжить" Тогда + Обработчик = Новый ОписаниеОповещения("ПрочитатьИУстановитьДоступностьЭлементовФормы", ЭтотОбъект); + РаботаСФайламиСлужебныйКлиент.РедактироватьСОповещением(Обработчик, Объект.Ссылка, УникальныйИдентификатор); + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура УстановитьУсловноеОформление() @@ -653,29 +717,6 @@ Элемент = УсловноеОформление.Элементы.Добавить(); - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЭлектронныеПодписиКомуВыданСертификат.Имя); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЭлектронныеПодписиСтатус.Имя); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЭлектронныеПодписиДатаПодписи.Имя); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЭлектронныеПодписиКомментарий.Имя); - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЭлектронныеПодписи.Неверна"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Истина; - - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОсобогоТекста); - - // - - Элемент = УсловноеОформление.Элементы.Добавить(); - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Редактирует.Имя); @@ -928,27 +969,30 @@ Элементы.ХранитьВерсии.Доступность = ДоступныДействияСФайлом И Не Объект.ПометкаУдаления; - Элементы.ФормаОтменитьРедактирование.Доступность = Не Объект.Редактирует.Пустая(); + Элементы.ФормаОтменитьРедактирование.Доступность = ЗначениеЗаполнено(Объект.Редактирует) И Не ФайлРедактируетсяВОблаке; Элементы.ФормаОткрытьКаталогФайла.Доступность = ДоступныДействияСФайлом; Элементы.ФормаСохранитьКак.Доступность = ДоступныДействияСФайлом; - Элементы.ФормаРедактировать.Доступность = НЕ Объект.ПодписанЭП; - Элементы.ФормаЗакончитьРедактирование.Доступность = Не Объект.Редактирует.Пустая(); + Элементы.ФормаРедактировать.Доступность = НЕ Объект.ПодписанЭП И Не ФайлРедактируетсяВОблаке; + Элементы.ФормаЗакончитьРедактирование.Доступность = ЗначениеЗаполнено(Объект.Редактирует) И Не ФайлРедактируетсяВОблаке; - Элементы.ПолноеНаименование.ТолькоПросмотр = НЕ Объект.Редактирует.Пустая(); + Элементы.ПолноеНаименование.ТолькоПросмотр = ЗначениеЗаполнено(Объект.Редактирует); - Элементы.ФормаЗанять.Доступность = Объект.Редактирует.Пустая() И (ДоступныДействияСФайлом) И НЕ Объект.ПодписанЭП; - Элементы.ФормаСохранитьИзменения.Доступность = Не Объект.Редактирует.Пустая(); + Элементы.ФормаЗанять.Доступность = Не ЗначениеЗаполнено(Объект.Редактирует) И (ДоступныДействияСФайлом) И НЕ Объект.ПодписанЭП И Не ФайлРедактируетсяВОблаке; + Элементы.ФормаСохранитьИзменения.Доступность = ЗначениеЗаполнено(Объект.Редактирует) И Не ФайлРедактируетсяВОблаке; - Элементы.ФормаОбновитьИзФайлаНаДиске.Доступность = ДоступныДействияСФайлом И НЕ Объект.ПодписанЭП; + Элементы.ФормаОбновитьИзФайлаНаДиске.Доступность = ДоступныДействияСФайлом И НЕ Объект.ПодписанЭП И Не ФайлРедактируетсяВОблаке; - Элементы.ФормаПодписать.Доступность = (ДоступныДействияСФайлом И Объект.Редактирует.Пустая()) ИЛИ НЕ ДоступныДействияСФайлом; - Элементы.ФормаЗашифровать.Доступность = (ДоступныДействияСФайлом И Объект.Редактирует.Пустая() И НЕ Объект.Зашифрован) ИЛИ НЕ ДоступныДействияСФайлом; + Элементы.ФормаПодписать.Доступность = (ДоступныДействияСФайлом И Не ЗначениеЗаполнено(Объект.Редактирует)) ИЛИ НЕ ДоступныДействияСФайлом; + Элементы.ФормаЗашифровать.Доступность = (ДоступныДействияСФайлом И Не ЗначениеЗаполнено(Объект.Редактирует) И НЕ Объект.Зашифрован) ИЛИ НЕ ДоступныДействияСФайлом; - Элементы.ФормаДобавитьПодписьИзФайла.Доступность = ДоступныДействияСФайлом И Объект.Редактирует.Пустая(); + Элементы.ФормаДобавитьПодписьИзФайла.Доступность = ДоступныДействияСФайлом И Не ЗначениеЗаполнено(Объект.Редактирует); Элементы.ФормаСохранитьВместеСПодписью.Доступность = ДоступныДействияСФайлом И Объект.ПодписанЭП; Элементы.ФормаРасшифровать.Доступность = ДоступныДействияСФайлом И Объект.Зашифрован; + Элементы.ФормаСкопировать.Доступность = Не ФайлРедактируетсяВОблаке; + Элементы.ФормаУстановитьПометкуУдаления.Доступность = Не ФайлРедактируетсяВОблаке; + КонецПроцедуры &НаКлиенте @@ -999,19 +1043,22 @@ Если Объект.ПодписанЭП Тогда Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ЭлектронныеПодписи.КомуВыданСертификат КАК КомуВыданСертификат, - | ЭлектронныеПодписи.ДатаПодписи КАК ДатаПодписи, - | ЭлектронныеПодписи.Комментарий КАК Комментарий, - | ЭлектронныеПодписи.Подпись КАК Подпись, - | ЭлектронныеПодписи.Отпечаток КАК Отпечаток, - | ЭлектронныеПодписи.УстановившийПодпись КАК УстановившийПодпись, - | ЭлектронныеПодписи.Сертификат КАК Сертификат - |ИЗ - | Справочник.ВерсииФайлов.ЭлектронныеПодписи КАК ЭлектронныеПодписи - |ГДЕ - | ЭлектронныеПодписи.Ссылка = &ОбъектСсылка"; - + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ЭлектронныеПодписи.КомуВыданСертификат КАК КомуВыданСертификат, + | ЭлектронныеПодписи.ДатаПодписи КАК ДатаПодписи, + | ЭлектронныеПодписи.Комментарий КАК Комментарий, + | ЭлектронныеПодписи.Подпись КАК Подпись, + | ЭлектронныеПодписи.Отпечаток КАК Отпечаток, + | ЭлектронныеПодписи.УстановившийПодпись КАК УстановившийПодпись, + | ЭлектронныеПодписи.Сертификат КАК Сертификат, + | ЭлектронныеПодписи.ДатаПроверкиПодписи КАК ДатаПроверкиПодписи, + | ЭлектронныеПодписи.ПодписьВерна КАК ПодписьВерна + |ИЗ + | Справочник.ВерсииФайлов.ЭлектронныеПодписи КАК ЭлектронныеПодписи + |ГДЕ + | ЭлектронныеПодписи.Ссылка = &ОбъектСсылка"; + Запрос.Параметры.Вставить("ОбъектСсылка", Объект.ТекущаяВерсия); ВыборкаЗапроса = Запрос.Выполнить().Выбрать(); @@ -1019,14 +1066,17 @@ НоваяСтрока = ЭлектронныеПодписи.Добавить(); НоваяСтрока.КомуВыданСертификат = ВыборкаЗапроса.КомуВыданСертификат; - НоваяСтрока.ДатаПодписи = ВыборкаЗапроса.ДатаПодписи; - НоваяСтрока.Комментарий = ВыборкаЗапроса.Комментарий; - НоваяСтрока.Объект = Объект.ТекущаяВерсия; - НоваяСтрока.Отпечаток = ВыборкаЗапроса.Отпечаток; + НоваяСтрока.ДатаПодписи = ВыборкаЗапроса.ДатаПодписи; + НоваяСтрока.Комментарий = ВыборкаЗапроса.Комментарий; + НоваяСтрока.Объект = Объект.ТекущаяВерсия; + НоваяСтрока.Отпечаток = ВыборкаЗапроса.Отпечаток; НоваяСтрока.УстановившийПодпись = ВыборкаЗапроса.УстановившийПодпись; - НоваяСтрока.Неверна = Ложь; + НоваяСтрока.ДатаПроверкиПодписи = ВыборкаЗапроса.ДатаПроверкиПодписи; + НоваяСтрока.ПодписьВерна = ВыборкаЗапроса.ПодписьВерна; НоваяСтрока.ИндексКартинки = -1; + ФайловыеФункцииСлужебныйКлиентСервер.ЗаполнитьСтатусПодписи(НоваяСтрока); + ДвоичныеДанные = ВыборкаЗапроса.Подпись.Получить(); Если ДвоичныеДанные <> Неопределено Тогда НоваяСтрока.АдресПодписи = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор); @@ -1092,6 +1142,15 @@ Записать(); КонецЕсли; + Если ЗапрещенныеРасширения.НайтиПоЗначению(Объект.ТекущаяВерсияРасширение) <> Неопределено Тогда + Оповещение = Новый ОписаниеОповещения("ОткрытьФайлПослеПодтверждения", ЭтотОбъект); + ПараметрыФормы = Новый Структура("Ключ", "ПередОткрытиемФайла"); + ПараметрыФормы.Вставить("ИмяФайла", + ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(Объект.Наименование, Объект.ТекущаяВерсияРасширение)); + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение); + Возврат; + КонецЕсли; + ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(Объект.Ссылка, УникальныйИдентификатор); РаботаСФайламиКлиент.Открыть(ДанныеФайла); @@ -1260,6 +1319,36 @@ КонецПроцедуры +&НаСервере +Процедура СвойстваВыполнитьОтложеннуюИнициализацию() + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + МодульУправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьЗависимостиДополнительныхРеквизитов() + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент) + + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент"); + МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + // Конец СтандартныеПодсистемы.Свойства #КонецОбласти diff --git a/SSL/src/Catalogs/Файлы/Help/ru.html b/SSL/src/Catalogs/Файлы/Help/ru.html index 519c04109..abed2eebc 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.16421"></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 11.00.9600.18427"></meta></head><body> <p></p> <p>Программа предоставляет возможность хранения файлов произвольного формата. В отличие от хранения файлов на дисках или в корпоративных программах документооборота, файлы связываются с данными программы. Так удобно хранить файлы, непосредственно связанные с данными. Объектами-хранителями файлов в программе могут быть различные списки, документы, бизнес-процессы и т.д. Работа с файлами, прикрепленными к объекту, осуществляется в списке <a href="Catalog.Файлы.Form.ФормаСпискаПрисоединенныхФайлов/Help">Присоединенные файлы</a>. Список можно открыть соответствующей командой на панели навигации документа или другого объекта программы. Существует также возможность хранить файлы без привязки к конкретному объекту в <a href="Catalog.Файлы.Form.Файлы/Help">списке файлов</a>.</p> <p>Для работы с реквизитами файла (автор, название, описание и т.д.) используется <a href="Catalog.Файлы.Form.ФормаЭлемента/Help">карточка файла</a>, а для работы с самим файлом - соответствующее приложение, установленное на компьютере. При редактировании файла его предыдущая <a href="Catalog.ВерсииФайлов/Help">версия</a> автоматически сохраняется в информационной базе.</p> @@ -7,17 +7,20 @@ <p></p> <p>Для работы с файлами используйте команды, расположенные на командной панели или в меню <strong>Еще</strong> в списке файлов, в контекстном меню по правой кнопке мыши или карточке файла: </p> <p></p> -<table border="0" cellpadding="8" width="100%"><tbody><tr><td><strong>Команда</strong> </td> +<table cellpadding="8" width="100%" border="0"><tbody><tr><td><strong>Команда</strong> </td> <td><strong>Описание</strong></td></tr><tr><td><img src="StdPicture.CreateListItem"></img> Создать (Insert)</td> <td><a href="#1">Добавляет</a> новый файл в программу. Возможные способы создания файла: из шаблона, из файла на диске, со сканера.</td></tr><tr><td><img src="CommonPicture.ОткрытьВыбранныйФайл" width="16" height="16"></img> Открыть (Просмотреть)</td> <td>Открывает файл внешним приложением для просмотра или редактирования, в зависимости от того, помечен ли файл как занятый текущим пользователем для редактирования. </td></tr><tr><td valign="top"><img src="CommonPicture.РедактироватьФайл"></img> Редактировать (<strong>F4</strong>)</td> <td valign="top">Помечает файл как занятый для редактирования и открывает его внешним приложением. </td></tr><tr><td>Клавиша <strong>Enter</strong> (двойной щелчок мыши)</td> <td>По умолчанию необходимо <a href="Catalog.Файлы.Form.ФормаВыбораРежимаОткрытия/Help">выбрать</a>, как открыть файл - для просмотра или для редактирования. Действие настраивается в персональных настройках программы на закладке <strong>Работа с файлами</strong>.</td></tr><tr><td valign="top"><img src="CommonPicture.ЗакончитьРедактированиеФайла"></img> Закончить редактирование</td> -<td valign="top">Обновляет файл в хранилище и снимает с него пометку занятости для редактирования. </td></tr><tr><td><img src="CommonPicture.ОпубликоватьФайл"></img> Сохранить изменения</td> +<td valign="top">Обновляет файл в хранилище и снимает с него пометку занятости для редактирования. </td></tr><tr><td>Печать</td> +<td>С помощью кнопки можно распечатать файл.</td></tr><tr><td>Отправить</td> +<td>Можно отправить почтовое сообщение, выбранный файл при этом автоматически будет его приложением.</td></tr><tr><td><img src="CommonPicture.ОпубликоватьФайл"></img> Сохранить изменения</td> <td>Сохраняет версию редактируемого файла в хранилище, но оставляет его занятым текущим пользователем для редактирования</td></tr><tr><td><img src="CommonPicture.ЗанятьФайл"></img> Занять</td> <td>Помечает файл в хранилище как занятый текущим пользователем для редактирования, но не открывает внешнее приложение. Приступить непосредственно к редактированию можно будет позже.</td></tr><tr><td valign="top"><img src="CommonPicture.ОсвободитьФайл"></img> Отменить редактирование</td> <td valign="top">Снимает с файла пометку занятости для редактирования.</td></tr><tr><td><img src="StdPicture.Change"></img> Открыть карточку</td> -<td>Открыть карточку файла, в которой хранятся сведения о файле.</td></tr><tr><td><img src="CommonPicture.СохранитьФайлКак"></img> Сохранить как</td> +<td>Открыть карточку файла, в которой хранятся сведения о файле.</td></tr><tr><td>Предпросмотр</td> +<td>Включите флажок, для того чтобы просмотреть изображение в списке файлов.</td></tr><tr><td><img src="CommonPicture.СохранитьФайлКак"></img> Сохранить как</td> <td>Сохраняет файл в указанный каталог на жестком или сетевом диске.</td></tr><tr><td>Открыть каталог файла</td> <td>Открыть папку в <strong>Проводнике Windows</strong>, в которой находится файл.</td></tr><tr><td><img src="CommonPicture.ОбновитьФайлИзФайлаНаДиске"></img> Обновить из файла на диске</td> <td>Обновляет файл в информационной базе выбранным файлом на жестком диске. При этом программа проверяет даты файлов, при попытке заменить файл старой версией выводится предупреждение, действие не выполняется.</td></tr><tr><td><img src="CommonPicture.ПодписанЭП"></img> Подписать</td> @@ -26,7 +29,7 @@ <td>Сохраняет файл в указанный каталог на жестком или сетевом диске, а также <a href="CommonForm.СохранениеВместеСЭлектроннойПодписью/Help">сохраняет подписи файла</a> - все или выбранные, в зависимости от настройки действий <strong>При сохранении данных в файл вместе с электронной подписью</strong> (в персональных настройках программы, вкладка Дополнительно) Команду можно использовать, например, если необходимо передать подписанный файл другому лицу.</td></tr><tr><td><img src="CommonPicture.Зашифрован" width="16" height="16"></img> Зашифровать</td> <td>Шифрование файла. В отличие от подписания могут использоваться несколько сертификатов, например, если необходимо зашифровать файл для нескольких пользователей. Выберите нужные из <a>списка</a> с помощью флажков. Зашифрованный файл в списках отображается со значком <img src="CommonPicture.Зашифрован" width="16" height="16"></img>. В отличие от подписания пароль к закрытому ключу в процессе шифрования вводить не нужно. Зашифрованный файл доступен для редактирования. Шифруются все версии файла. Для зашифрованных файлов не работает полнотекстовый поиск. Зашифрованный файл можно скопировать. При этом новый, скопированный файл останется зашифрованным. Зашифрованный файл нельзя подписать.  Подписанный файл зашифровать можно, при этом перед проверкой электронной подписи у зашифрованного файла программа запросит пароль для предварительной расшифровки файла.</td></tr><tr><td>Расшифровать</td> <td>По команде происходит расшифровка файла. Для расшифровки нужно ввести <a>пароль</a> к закрытому ключу.</td></tr></tbody></table><p>Примечание: Если файл зашифрован, полнотекстовый поиск по его содержимому не работает.</p> -<h3><a name="#1">Добавление файлов</a></h3> +<h3><a name="1">Добавление файлов</a></h3> <p>Для добавления нового файла в программу:</p> <ul><li> <div>Нажмите <strong>Создать (</strong>клавишу <strong>Insert</strong>); </div> diff --git a/SSL/src/Catalogs/Файлы/ManagerModule.bsl b/SSL/src/Catalogs/Файлы/ManagerModule.bsl index af2b50bd3..74d87a20a 100644 --- a/SSL/src/Catalogs/Файлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/Файлы/ManagerModule.bsl @@ -2,9 +2,11 @@ #Область ПрограммныйИнтерфейс -// Возвращает список реквизитов, которые разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт РедактируемыеРеквизиты = Новый Массив; diff --git a/SSL/src/Catalogs/Файлы/ObjectModule.bsl b/SSL/src/Catalogs/Файлы/ObjectModule.bsl index 5b877140e..2fe4a1170 100644 --- a/SSL/src/Catalogs/Файлы/ObjectModule.bsl +++ b/SSL/src/Catalogs/Файлы/ObjectModule.bsl @@ -52,28 +52,28 @@ ЗаписьПодписанногоОбъекта = Ложь; Если ДополнительныеСвойства.Свойство("ЗаписьПодписанногоОбъекта") Тогда ЗаписьПодписанногоОбъекта = ДополнительныеСвойства.ЗаписьПодписанногоОбъекта; - КонецЕсли; + КонецЕсли; - // Разрешаем ставить пометку удаления на подписанный файл. - Если НЕ ПривилегированныйРежим() И ЗаписьПодписанногоОбъекта <> Истина И НЕ УстановленаПометкаУдаления Тогда + Если ЗаписьПодписанногоОбъекта <> Истина Тогда - Если ЗначениеЗаполнено(Ссылка) Тогда - - СтруктураРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "ПодписанЭП, Зашифрован"); - СсылкаПодписан = СтруктураРеквизитов.ПодписанЭП; - СсылкаЗашифрован = СтруктураРеквизитов.Зашифрован; - - Если ПодписанЭП И СсылкаПодписан Тогда - ВызватьИсключение НСтр("ru = 'Подписанный файл нельзя редактировать.'"); - КонецЕсли; - - Если Зашифрован И СсылкаЗашифрован И ПодписанЭП И НЕ СсылкаПодписан Тогда - ВызватьИсключение НСтр("ru = 'Зашифрованный файл нельзя подписывать.'"); - КонецЕсли; - - КонецЕсли; + СтруктураРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, + "ПодписанЭП, Зашифрован, Редактирует"); - КонецЕсли; + СсылкаПодписан = СтруктураРеквизитов.ПодписанЭП; + СсылкаЗашифрован = СтруктураРеквизитов.Зашифрован; + СсылкаРедактирует = СтруктураРеквизитов.Редактирует; + СсылкаЗанят = ЗначениеЗаполнено(СтруктураРеквизитов.Редактирует); + Занят = ЗначениеЗаполнено(Редактирует); + + Если ПодписанЭП И СсылкаПодписан И Занят И Не СсылкаЗанят Тогда + ВызватьИсключение НСтр("ru = 'Подписанный файл нельзя редактировать.'"); + КонецЕсли; + + Если Зашифрован И СсылкаЗашифрован И ПодписанЭП И НЕ СсылкаПодписан Тогда + ВызватьИсключение НСтр("ru = 'Зашифрованный файл нельзя подписывать.'"); + КонецЕсли; + + КонецЕсли; Если Не ТекущаяВерсия.Пустая() Тогда @@ -107,7 +107,7 @@ КонецЕсли; // Попытка установить пометку удаления. - Если УстановленаПометкаУдаления И Не Редактирует.Пустая() Тогда + Если УстановленаПометкаУдаления И ЗначениеЗаполнено(Редактирует) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Нельзя удалить файл ""%1"", |т.к. он занят для редактирования пользователем ""%2"".'"), @@ -119,7 +119,7 @@ НаименованиеВИБ = НаименованиеВИБ(); Если ПолноеНаименование <> НаименованиеВИБ Тогда - Если Не Редактирует.Пустая() Тогда + Если ЗначениеЗаполнено(Редактирует) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Нельзя переименовать файл ""%1"", |т.к. он занят для редактирования пользователем ""%2"".'"), @@ -134,7 +134,7 @@ КонецПроцедуры -Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) +Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Если ЭтоНовый() Тогда ДатаСоздания = ТекущаяДатаСеанса(); diff --git a/SSL/src/Catalogs/Файлы/Файлы.mdo b/SSL/src/Catalogs/Файлы/Файлы.mdo index 1461d66d1..34b816aa5 100644 --- a/SSL/src/Catalogs/Файлы/Файлы.mdo +++ b/SSL/src/Catalogs/Файлы/Файлы.mdo @@ -160,7 +160,7 @@ <editType>InDialog</editType> <choiceMode>BothWays</choiceMode> <defaultObjectForm>Catalog.Файлы.Form.ФормаЭлемента</defaultObjectForm> - <defaultListForm>Catalog.Файлы.Form.ФормаСписка</defaultListForm> + <defaultListForm>Catalog.Файлы.Form.Файлы</defaultListForm> <defaultChoiceForm>Catalog.Файлы.Form.ФормаВыбора</defaultChoiceForm> <attributes uuid="68944d09-618e-4fa3-a7af-8c84218e0ac7"> <name>Автор</name> @@ -170,6 +170,7 @@ </synonym> <type> <types>CatalogRef.ВнешниеПользователи</types> + <types>CatalogRef.УчетныеЗаписиСинхронизацииФайлов</types> <types>CatalogRef.Пользователи</types> </type> <toolTip> @@ -379,6 +380,7 @@ <value>Редактирует</value> </synonym> <type> + <types>CatalogRef.УчетныеЗаписиСинхронизацииФайлов</types> <types>CatalogRef.Пользователи</types> </type> <toolTip> @@ -387,7 +389,6 @@ </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> - <quickChoice>DontUse</quickChoice> <createOnInput>Use</createOnInput> <fillValue xsi:type="core:ReferenceValue"> <value>Catalog.Пользователи.EmptyRef</value> diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаВыбора/Help/ru.html b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаВыбора/Help/ru.html index a99fcde66..d9ade9992 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для выбора шаблонов <a href="Document.Анкета.Form.ФормаДокумента/Help">анкеты</a>.</p> <p>Открывается при выборе шаблона анкет из документа <a href="Document.НазначениеОпросов.Form.ФормаДокумента/Help">Назначение опросов</a>.</p> <p>В списке выводится <strong>Наименование</strong> шаблона и его <strong>Код</strong>, который автоматически присваивается программой.</p> diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Form.form b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Form.form index e447e9843..cbfcde2f0 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Form.form +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Form.form @@ -174,6 +174,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -244,6 +245,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -314,6 +316,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -384,6 +387,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -448,6 +452,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -504,6 +509,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1153,6 +1159,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1408,6 +1415,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1770,6 +1778,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -2136,6 +2145,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -2302,6 +2312,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Help/ru.html b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаМастераТабличныхВопросов/Help/ru.html index 5089e9d4d..f7c631740 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 xmlns:o="urn:schemas-microsoft-com:office:office"><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.16421"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html xmlns:o="urn:schemas-microsoft-com:office:office"><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.18427"></meta></head><body> <p style="MARGIN: 0cm 0cm 0pt">Мастер предназначен для ввода и редактирования табличных вопросов <a href="Document.Анкета.Form.ФормаДокумента/Help">анкеты</a>.</p> <p style="MARGIN: 0cm 0cm 0pt">Открывается по команде <strong>Добавить - табличный вопрос</strong> из <a href="Catalog.ШаблоныАнкет.Form.ФормаЭлемента/Help">шаблона анкеты</a>.</p> <h3 style="MARGIN: 0cm 0cm 0pt">Выбор типа табличного вопроса</h3> diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаПростыхВопросов/Help/ru.html b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаПростыхВопросов/Help/ru.html index 7d15507a4..747f0a313 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для ввода простого вопроса в <a href="Catalog.ШаблоныАнкет.Form.ФормаЭлемента/Help">шаблон анкеты</a>.</p> <p>Открывается по команде <strong>Добавить - простой вопрос</strong> из шаблона анкеты.</p> <h3>Ввод простого вопроса в шаблон анкеты</h3> diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Module.bsl index d4dfe5939..686b2e789 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаСписка/Module.bsl @@ -26,10 +26,10 @@ &НаСервере Функция ВыполнитьКопированиеЭлемента(ЭлементКопирования) + НачатьТранзакцию(); + Попытка - - НачатьТранзакцию(); - + ШаблонАнкетыОбъект = Справочники.ШаблоныАнкет.СоздатьЭлемент(); ЗаполнитьЗначенияСвойств(ШаблонАнкетыОбъект,ЭлементКопирования,"ПометкаУдаления,Наименование,Заголовок,Вступление,Заключение"); @@ -83,6 +83,8 @@ ДобавитьЭлементыСправочникаВопросыШаблонаАнкеты(ШаблонАнкетыОбъект.Ссылка,Выборка); + ЗафиксироватьТранзакцию(); + Исключение ОтменитьТранзакцию(); @@ -90,7 +92,6 @@ КонецПопытки; - ЗафиксироватьТранзакцию(); Возврат ШаблонАнкетыОбъект.Ссылка; КонецФункции diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Form.form index 428517f81..7a9c42770 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Form.form @@ -267,6 +267,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1420,6 +1421,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Help/ru.html index 2294ae438..36b779710 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для подготовки шаблона <a href="Document.Анкета.Form.ФормаДокумента/Help">анкеты</a>.</p> <p>Подготовка анкет осуществляется в два этапа. Вначале необходимо подготовить <a href="ChartOfCharacteristicTypes.ВопросыДляАнкетирования/Help">вопросы</a>, из которых будет состоять предполагаемая анкета. Затем, используя подготовленные вопросы, нужно составить шаблон анкеты. В дальнейшем по этому шаблону программа автоматически создает анкету в тот момент, когда респондент начинает ее заполнять.</p> <p>Укажите <strong>Наименование</strong> шаблона. Поле <strong>Наименование</strong> отображается в <a href="Catalog.ШаблоныАнкет/Help">списке шаблонов</a>.</p> diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Module.bsl index d773fafb8..de2a2cddc 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ШаблоныАнкет/Forms/ФормаЭлемента/Module.bsl @@ -461,13 +461,13 @@ Если Модифицированность Тогда ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ВопросОНеобходимостиЗаписиПослеЗавершения", ЭтотОбъект); ПоказатьВопрос(ОбработчикОповещенияОЗакрытии, - Нстр("ru = 'Шаблон анкеты был модифицирован. + НСтр("ru = 'Шаблон анкеты был модифицирован. |Для корректного отображения изменений шаблон необходимо записать. |Записать?'"), РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да, - Нстр("ru = 'Записать?'")); + НСтр("ru = 'Записать?'")); Иначе ОткрытьФормуМастераАнкетыПоРазделам(); КонецЕсли; diff --git a/SSL/src/Catalogs/ШаблоныАнкет/Help/ru.html b/SSL/src/Catalogs/ШаблоныАнкет/Help/ru.html index 83904c587..e1a784f8d 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для управления шаблонами <a href="Document.Анкета.Form.ФормаДокумента/Help">анкеты</a>.</p> <p>Открывается по команде <strong>Шаблоны анкет</strong> раздела <strong>Анкетирование</strong>.</p> <p>В списке выводится <strong>Наименование</strong> шаблона и его <strong>Код</strong>, который автоматически присваивается программой.</p> diff --git a/SSL/src/Catalogs/ШаблоныАнкет/ManagerModule.bsl b/SSL/src/Catalogs/ШаблоныАнкет/ManagerModule.bsl index 168c64d18..58c0ea349 100644 --- a/SSL/src/Catalogs/ШаблоныАнкет/ManagerModule.bsl +++ b/SSL/src/Catalogs/ШаблоныАнкет/ManagerModule.bsl @@ -5,9 +5,11 @@ //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. -// Возвращает список реквизитов, которые не разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ManagerModule.bsl index 6b0f37643..c870ef204 100644 --- a/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ManagerModule.bsl @@ -2,9 +2,11 @@ #Область ПрограммныйИнтерфейс -// Возвращает список реквизитов, которые разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Возврат ПрисоединенныеФайлы.РеквизитыРедактируемыеВГрупповойОбработке(); diff --git a/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.mdo b/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.mdo index 43d62546d..5c36d2084 100644 --- a/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.mdo +++ b/SSL/src/Catalogs/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы/ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.mdo @@ -677,6 +677,43 @@ <dataHistory>Use</dataHistory> <fullTextSearch>Use</fullTextSearch> </attributes> + <attributes uuid="39bddcde-697c-4e77-adfd-e4a77529ea97"> + <name>ДатаПроверкиПодписи</name> + <synonym> + <key>ru</key> + <value>Дата проверки подписи</value> + </synonym> + <type> + <types>Date</types> + <dateQualifiers/> + </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> + <attributes uuid="a3b15381-bf9b-4b26-96eb-392fa2cc8223"> + <name>ПодписьВерна</name> + <synonym> + <key>ru</key> + <value>Подпись верна</value> + </synonym> + <type> + <types>Boolean</types> + </type> + <toolTip> + <key>ru</key> + <value>Результат последней проверки подписи.</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + <fullTextSearch>Use</fullTextSearch> + </attributes> </tabularSections> <tabularSections uuid="a583e53a-3f3c-48c7-8928-37ce40b2bafe"> <producedTypes> diff --git a/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ManagerModule.bsl b/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ManagerModule.bsl index 6b0f37643..c870ef204 100644 --- a/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ManagerModule.bsl +++ b/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ManagerModule.bsl @@ -2,9 +2,11 @@ #Область ПрограммныйИнтерфейс -// Возвращает список реквизитов, которые разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Возврат ПрисоединенныеФайлы.РеквизитыРедактируемыеВГрупповойОбработке(); diff --git a/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.mdo b/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.mdo index ac0ff0863..ef81a6dc4 100644 --- a/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.mdo +++ b/SSL/src/Catalogs/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы/ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.mdo @@ -676,6 +676,43 @@ <dataHistory>Use</dataHistory> <fullTextSearch>Use</fullTextSearch> </attributes> + <attributes uuid="b6206c73-cf17-4e74-a14d-f2a2ef2b2cc1"> + <name>ДатаПроверкиПодписи</name> + <synonym> + <key>ru</key> + <value>Дата проверки подписи</value> + </synonym> + <type> + <types>Date</types> + <dateQualifiers/> + </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> + <attributes uuid="b363f72f-3629-453c-9f7d-9828ef6de733"> + <name>ПодписьВерна</name> + <synonym> + <key>ru</key> + <value>Подпись верна</value> + </synonym> + <type> + <types>Boolean</types> + </type> + <toolTip> + <key>ru</key> + <value>Результат последней проверки подписи.</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + <fullTextSearch>Use</fullTextSearch> + </attributes> </tabularSections> <tabularSections uuid="211a539b-4be9-4816-98f6-f756e65eafd8"> <producedTypes> diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаВыбора/Help/ru.html b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаВыбора/Help/ru.html index 6ffe3031b..34b902805 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаВыбора/Help/ru.html +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для выбора <a href="ChartOfCharacteristicTypes.ВопросыДляАнкетирования/Help">вопросов</a>.</p> <p>Открывается при выборе вопроса по команде <strong>Добавить - простой вопрос</strong> в <a href="Catalog.ШаблоныАнкет.Form.ФормаЭлемента/Help">шаблоне анкеты</a> или в <a href="Catalog.ШаблоныАнкет.Form.ФормаМастераТабличныхВопросов/Help">Помощнике создания табличных вопросов</a>.</p> <p>Одним из важных этапов подготовки <a href="Document.Анкета.Form.ФормаСписка/Help">анкет</a> является составление вопросов. </p> diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Form.form index bfa97c836..843c98b9b 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Form.form @@ -706,6 +706,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -783,6 +784,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1299,6 +1301,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1364,6 +1367,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Help/ru.html index 289d2346a..ea4281438 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для ввода вопроса.</p> <p>Одним из важных этапов подготовки <a href="Document.Анкета.Form.ФормаСписка/Help">анкет</a> является составление <a href="ChartOfCharacteristicTypes.ВопросыДляАнкетирования/Help">вопросов</a>.</p> <p>Данный вопрос называется элементарным, т.к. может использоваться в качестве элементов более сложных конструкций.</p> diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Help/ru.html b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Help/ru.html index cbc01257b..5020495a7 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/Help/ru.html +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Подготовка вопросов для анкетирования.</p> <p>Открывается по команде <strong>Вопросы для анкетирования</strong> в разделе <strong>Анкетирование</strong>.</p> <p>Одним из важных этапов подготовки <a href="Document.Анкета.Form.ФормаСписка/Help">анкет</a> является составление вопросов. </p> diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ManagerModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ManagerModule.bsl index c7409f434..5e8e3b434 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ManagerModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ManagerModule.bsl @@ -5,9 +5,11 @@ //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. -// Возвращает список реквизитов, которые не разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ВопросыДляАнкетирования.mdo b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ВопросыДляАнкетирования.mdo index 832a4f8c1..ea248db8c 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ВопросыДляАнкетирования.mdo +++ b/SSL/src/ChartsOfCharacteristicTypes/ВопросыДляАнкетирования/ВопросыДляАнкетирования.mdo @@ -370,7 +370,7 @@ </type> <toolTip> <key>ru</key> - <value>Признак определяет, будет ли выполняться аггрегирование ответов на данный вопрос в очете "Анализ опроса"</value> + <value>Признак определяет, будет ли выполняться агрегирование ответов на данный вопрос в отчете "Анализ опроса"</value> </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Module.bsl index 5531ff99e..4d9c91462 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ЗависимостьРеквизитов/Module.bsl @@ -11,7 +11,7 @@ НастраиваемоеСвойство = Параметры.НастраиваемоеСвойство; - СвойстваОбъекта = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Параметры.ДополнительныйРеквизит, "Заголовок, ЗависимостиДополнительныхРеквизитов"); + СвойстваОбъекта = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Параметры.ДополнительныйРеквизит, "Заголовок"); Заголовок = НСтр("ru = '%1 дополнительного реквизита ""%2""'"); Если НастраиваемоеСвойство = "Доступен" Тогда @@ -24,6 +24,10 @@ Заголовок = СтрЗаменить(Заголовок, "%1", ПредставлениеСвойства); Заголовок = СтрЗаменить(Заголовок, "%2", СвойстваОбъекта.Заголовок); + Если Не ЗначениеЗаполнено(СвойстваОбъекта.Заголовок) Тогда + Заголовок = СтрЗаменить(Заголовок, """", ""); + КонецЕсли; + НаборСвойств = Параметры.Набор; Пока ЗначениеЗаполнено(НаборСвойств.Родитель) Цикл НаборСвойств = НаборСвойств.Родитель; @@ -40,7 +44,7 @@ РеквизитыОбъекта = СписокРеквизитовДляОтбора(ПолноеИмяОбъектаМетаданных, НаборДополнительныхРеквизитов); - ЗависимостиДополнительныхРеквизитов = Параметры.ДополнительныйРеквизит.ЗависимостиДополнительныхРеквизитов; + ЗависимостиДополнительныхРеквизитов = Параметры.ЗависимостиРеквизитов; Для Каждого СтрокаТабличнойЧасти Из ЗависимостиДополнительныхРеквизитов Цикл Если СтрокаТабличнойЧасти.ЗависимоеСвойство = НастраиваемоеСвойство Тогда СтрокаОтбора = ЗависимостиРеквизитов.Добавить(); diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Form.form index b53f67a5a..96faf5e18 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Form.form @@ -327,6 +327,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -448,6 +449,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -501,6 +503,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -827,6 +830,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -948,6 +952,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -1005,6 +1010,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Module.bsl index eaee3d6fc..1dcbc66f4 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ИзменениеНастройкиСвойства/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ПараметрыДлительнойОперацииКлиент; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Form.form index eef13374b..a953a7721 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/РазблокированиеРеквизитов/Form.form @@ -77,6 +77,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -147,6 +148,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -265,6 +267,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -342,6 +345,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -413,6 +417,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -554,6 +559,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Help/ru.html b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Help/ru.html index f18107f4b..2039755e4 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Help/ru.html +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Список предназначен для выбора <a href="ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения/Help">дополнительных реквизитов (сведений)</a>.</p> <p>Открывается из списка Д<strong>ополнительные реквизиты (сведения)</strong> с помощью команд <strong>Добавить - По образцу</strong> или <strong>Добавить - Общее (Общий)</strong>.</p> <h3>Добавление по образцу</h3> diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Attributes/СписокДополнительныхРеквизитов/ExtInfo/ListSettings.dcss b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Attributes/НаборыСвойств/ExtInfo/ListSettings.dcss similarity index 100% rename from SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Attributes/СписокДополнительныхРеквизитов/ExtInfo/ListSettings.dcss rename to SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Attributes/НаборыСвойств/ExtInfo/ListSettings.dcss diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Attributes/ОбщиеНаборыСвойств/ExtInfo/ListSettings.dcss b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Attributes/ОбщиеНаборыСвойств/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Attributes/ОбщиеНаборыСвойств/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Settings xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core"> + <filter> + <viewMode>Normal</viewMode> + <userSettingID>dfcece9d-5077-440b-b6b3-45a5cb4538eb</userSettingID> + </filter> + <order> + <viewMode>Normal</viewMode> + <userSettingID>88619765-ccb3-46c6-ac52-38e9c992ebd4</userSettingID> + </order> + <conditionalAppearance> + <viewMode>Normal</viewMode> + <userSettingID>b75fecce-942b-4aed-abc9-e6a02e460fb3</userSettingID> + </conditionalAppearance> + <itemsViewMode>Normal</itemsViewMode> + <itemsUserSettingID>911b6018-f537-43e8-a417-da56b22f9aec</itemsUserSettingID> +</Settings> diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form index cd78ae24f..aabf907ec 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Form.form @@ -38,43 +38,24 @@ <items xsi:type="form:FormGroup"> <name>ВыборРеквизита</name> <id>202</id> - <items xsi:type="form:Table"> - <name>СписокДополнительныхРеквизитов</name> - <id>208</id> - <title> - <key>ru</key> - <value>Выберите %1 для включения в набор "%2"</value> - - true - true - - true - - - СписокДополнительныхРеквизитов - - Top - Copy - Create - Delete - DynamicListStandardSettings - LoadDynamicListSettings - SaveDynamicListSettings - ShowMultipleSelection - - СписокДополнительныхРеквизитовЗаголовок - 221 + + ГруппаЗаголовок + 435 + + ДекорацияЗаголовок + 439 + + <key>ru</key> + <value>Выберите %1 для включения в набор "%2":</value> + true true true - - СписокДополнительныхРеквизитов.Заголовок - - СписокДополнительныхРеквизитовЗаголовокРасширеннаяПодсказка - 223 + ДекорацияЗаголовокРасширеннаяПодсказка + 441 Label true true @@ -83,41 +64,82 @@ - СписокДополнительныхРеквизитовЗаголовокКонтекстноеМеню - 222 + ДекорацияЗаголовокКонтекстноеМеню + 440 true - LabelField - Enter - true - Left - true - - true - true + Label + true + true + + Left - None - - СписокДополнительныхРеквизитовКоманднаяПанель - 210 - Left - true - - - Selection - СписокДополнительныхРеквизитовВыбор - - - OnActivateRow - СписокДополнительныхРеквизитовПриАктивизацииСтроки - - - СписокДополнительныхРеквизитовСтрокаПоиска - 212 + + ПанельЕще + 502 + + ПодменюЕще + 504 + + ОбщиеРеквизитыНеВключенныеВНаборы + 506 + true + true + + true + + + ОбщиеРеквизитыНеВключенныеВНаборыРасширеннаяПодсказка + 507 + Label + true + true + + Left + + + Form.Command.ОбщиеРеквизитыНеВключенныеВНаборы + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Еще</value> + + + ПодменюЕщеРасширеннаяПодсказка + 505 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + true + true + + true + - СписокДополнительныхРеквизитовСтрокаПоискаРасширеннаяПодсказка - 214 + ПанельЕщеРасширеннаяПодсказка + 503 Label true true @@ -125,67 +147,19 @@ Left - - СписокДополнительныхРеквизитовСтрокаПоискаКонтекстноеМеню - 213 - true - - СписокДополнительныхРеквизитов - - true + CommandBar + + Right - - - СписокДополнительныхРеквизитовСостояниеПросмотра - 215 - - СписокДополнительныхРеквизитовСостояниеПросмотраРасширеннаяПодсказка - 217 - Label - true - true - - Left - - - - СписокДополнительныхРеквизитовСостояниеПросмотраКонтекстноеМеню - 216 - true - - ViewStatusAddition - СписокДополнительныхРеквизитов - - true - - - - СписокДополнительныхРеквизитовУправлениеПоиском - 218 - - СписокДополнительныхРеквизитовУправлениеПоискомРасширеннаяПодсказка - 220 - Label - true - true - - Left - - - - СписокДополнительныхРеквизитовУправлениеПоискомКонтекстноеМеню - 219 - true - - SearchControlAddition - СписокДополнительныхРеквизитов - - true - - + + true + true + + true + - СписокДополнительныхРеквизитовРасширеннаяПодсказка - 211 + ГруппаЗаголовокРасширеннаяПодсказка + 436 Label true true @@ -193,84 +167,696 @@ Left - - СписокДополнительныхРеквизитовКонтекстноеМеню - 209 - true - - Tree - true - true - true - true - true - MultiRow - 1 - 1 - AutoUse - AutoUse - true - true - Auto - Auto - ExpandTopLevel - true - true - true - - СписокДополнительныхРеквизитов.НомерКартинки - - - CommonPicture.ДополнительныеРеквизитыСведения - - None - None - None - true - - 60 - - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - - true - true + UsualGroup + + Auto + true + true + Auto + Auto - РасшифровкаРеквизита - 260 - - ЗначенияДополнительныхРеквизитов - 271 - - <key>ru</key> - <value>Значения реквизита</value> - + ГруппаСодержимое + 437 + + ГруппаНаборыСвойств + 433 + + СтраницыНаборыСвойств + 458 + + СтраницаВсеНаборы + 460 + + НаборыСвойств + 336 + true + true + + true + + + НаборыСвойств + + false + None + Change + Choose + Copy + Create + CreateFolder + Delete + MoveItem + SetDeletionMark + + Представление + 349 + true + true + + true + + + НаборыСвойств.Представление + + + ПредставлениеРасширеннаяПодсказка + 351 + Label + true + true + + Left + + + + ПредставлениеКонтекстноеМеню + 350 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Ссылка + 352 + true + true + + + НаборыСвойств.Ref + + + СсылкаРасширеннаяПодсказка + 354 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 353 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + НаборыСвойствКоманднаяПанель + 338 + Left + true + + + OnActivateRow + НаборыСвойствПриАктивизацииСтроки + + + BeforeRowChange + НаборыСвойствПередНачаломИзменения + + + НаборыСвойствСтрокаПоиска + 340 + + НаборыСвойствСтрокаПоискаРасширеннаяПодсказка + 342 + Label + true + true + + Left + + + + НаборыСвойствСтрокаПоискаКонтекстноеМеню + 341 + true + + НаборыСвойств + + true + + + + НаборыСвойствСостояниеПросмотра + 343 + + НаборыСвойствСостояниеПросмотраРасширеннаяПодсказка + 345 + Label + true + true + + Left + + + + НаборыСвойствСостояниеПросмотраКонтекстноеМеню + 344 + true + + ViewStatusAddition + НаборыСвойств + + true + + + + НаборыСвойствУправлениеПоиском + 346 + + НаборыСвойствУправлениеПоискомРасширеннаяПодсказка + 348 + Label + true + true + + Left + + + + НаборыСвойствУправлениеПоискомКонтекстноеМеню + 347 + true + + SearchControlAddition + НаборыСвойств + + true + + + + НаборыСвойствРасширеннаяПодсказка + 339 + Label + true + true + + Left + + + + НаборыСвойствКонтекстноеМеню + 337 + true + + Tree + true + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + Auto + Auto + true + true + + НаборыСвойств.НомерКартинки + + + CommonPicture.ПиктограммыЭлементов + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + + + true + true + + true + + + СтраницаВсеНаборыРасширеннаяПодсказка + 461 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаОбщиеНаборы + 481 + + ОбщиеНаборыСвойств + 483 + true + true + + true + + + ОбщиеНаборыСвойств + + false + None + ListSettings + + ОбщиеНаборыСвойствПредставление + 499 + true + true + + true + + + ОбщиеНаборыСвойств.Представление + + + ОбщиеНаборыСвойствПредставлениеРасширеннаяПодсказка + 501 + Label + true + true + + Left + + + + ОбщиеНаборыСвойствПредставлениеКонтекстноеМеню + 500 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + ОбщиеНаборыСвойствКоманднаяПанель + 485 + Left + true + + + ОбщиеНаборыСвойствСтрокаПоиска + 487 + + ОбщиеНаборыСвойствСтрокаПоискаРасширеннаяПодсказка + 489 + Label + true + true + + Left + + + + ОбщиеНаборыСвойствСтрокаПоискаКонтекстноеМеню + 488 + true + + ОбщиеНаборыСвойств + + true + + + + ОбщиеНаборыСвойствСостояниеПросмотра + 490 + + ОбщиеНаборыСвойствСостояниеПросмотраРасширеннаяПодсказка + 492 + Label + true + true + + Left + + + + ОбщиеНаборыСвойствСостояниеПросмотраКонтекстноеМеню + 491 + true + + ViewStatusAddition + ОбщиеНаборыСвойств + + true + + + + ОбщиеНаборыСвойствУправлениеПоиском + 493 + + ОбщиеНаборыСвойствУправлениеПоискомРасширеннаяПодсказка + 495 + Label + true + true + + Left + + + + ОбщиеНаборыСвойствУправлениеПоискомКонтекстноеМеню + 494 + true + + SearchControlAddition + ОбщиеНаборыСвойств + + true + + + + ОбщиеНаборыСвойствРасширеннаяПодсказка + 486 + Label + true + true + + Left + + + + ОбщиеНаборыСвойствКонтекстноеМеню + 484 + true + + Tree + true + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + Auto + Auto + true + true + + ОбщиеНаборыСвойств.DefaultPicture + + + CommonPicture.ПиктограммыЭлементов + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + + + true + true + + true + + + СтраницаОбщиеНаборыРасширеннаяПодсказка + 482 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + СтраницыНаборыСвойствРасширеннаяПодсказка + 459 + Label + true + true + + Left + + + Pages + + Auto + + true true true - - ЗначенияДополнительныхРеквизитов - - Top - - ЗначенияДополнительныхРеквизитовСсылка - 284 + + <key>ru</key> + <value>Группа наборы свойств</value> + + + ru + Группа наборы свойств + + + ГруппаНаборыСвойствРасширеннаяПодсказка + 434 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + РасшифровкаРеквизита + 260 + + Свойства + 355 true true true - ЗначенияДополнительныхРеквизитов.Ссылка + Свойства + None + Add + CancelSearch + Change + Copy + CopyToClipboard + Delete + EndEdit + Find + MoveDown + MoveUp + OutputList + ShowRowRearrangement + SortListAsc + SortListDesc + + СвойстваЗаголовок + 406 + true + true + + true + + + Свойства.Заголовок + + + СвойстваЗаголовокРасширеннаяПодсказка + 408 + Label + true + true + + Left + + + + СвойстваЗаголовокКонтекстноеМеню + 407 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + Top + + СвойстваКоманднаяПанель + 357 + Left + + + Selection + СвойстваВыбор + + + СвойстваСтрокаПоиска + 359 + + СвойстваСтрокаПоискаРасширеннаяПодсказка + 361 + Label + true + true + + Left + + + + СвойстваСтрокаПоискаКонтекстноеМеню + 360 + true + + Свойства + + true + + + + СвойстваСостояниеПросмотра + 362 + + СвойстваСостояниеПросмотраРасширеннаяПодсказка + 364 + Label + true + true + + Left + + + + СвойстваСостояниеПросмотраКонтекстноеМеню + 363 + true + + ViewStatusAddition + Свойства + + true + + + + СвойстваУправлениеПоиском + 365 + + СвойстваУправлениеПоискомРасширеннаяПодсказка + 367 + Label + true + true + + Left + + + + СвойстваУправлениеПоискомКонтекстноеМеню + 366 + true + + SearchControlAddition + Свойства + + true + + - ЗначенияДополнительныхРеквизитовСсылкаРасширеннаяПодсказка - 286 + СвойстваРасширеннаяПодсказка + 358 Label true true @@ -279,12 +865,101 @@ - ЗначенияДополнительныхРеквизитовСсылкаКонтекстноеМеню - 285 + СвойстваКонтекстноеМеню + 356 + + СвойстваКонтекстноеМенюИзменить + 450 + true + true + + true + + + СвойстваКонтекстноеМенюИзменитьРасширеннаяПодсказка + 451 + Label + true + true + + Left + + + Form.Command.Изменить + Normal + Auto + true + true + UserCmds + Auto + + + true + true + 70 + true + true + true + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + true + true + true + true + + Свойства.НомерКартинки + + + CommonPicture.ПиктограммыЭлементов + + + Style.FormBackColor + + None + None + None + true + + + + СписокДополнительныхРеквизитовТипЗначения + 430 + true + true + + true + + + Items.Свойства.CurrentData.ТипЗначения + + Top + + СписокДополнительныхРеквизитовТипЗначенияРасширеннаяПодсказка + 432 + Label + true + true + + Left + + + + СписокДополнительныхРеквизитовТипЗначенияКонтекстноеМеню + 431 true InputField - Auto + Enter true Left true @@ -298,17 +973,25 @@ Normal - - ЗначенияДополнительныхРеквизитовКоманднаяПанель - 273 - Left - - - ЗначенияДополнительныхРеквизитовСтрокаПоиска - 275 + + СписокДополнительныхРеквизитовПодсказка + 262 + + <key>ru</key> + <value>Всплывающая подсказка</value> + + true + true + + true + + + Items.Свойства.CurrentData.Подсказка + + Top - ЗначенияДополнительныхРеквизитовСтрокаПоискаРасширеннаяПодсказка - 277 + СписокДополнительныхРеквизитовПодсказкаРасширеннаяПодсказка + 264 Label true true @@ -317,21 +1000,44 @@ - ЗначенияДополнительныхРеквизитовСтрокаПоискаКонтекстноеМеню - 276 + СписокДополнительныхРеквизитовПодсказкаКонтекстноеМеню + 263 true - ЗначенияДополнительныхРеквизитов - + InputField + Enter + true + Left + true + true + true + true + true + true + true + Normal + + ru + Не задана + - - - ЗначенияДополнительныхРеквизитовСостояниеПросмотра - 278 + + + СписокДополнительныхРеквизитовЗаголовокФормыЗначения + 265 + true + true + + true + + + Items.Свойства.CurrentData.ЗаголовокФормыЗначения + + Top - ЗначенияДополнительныхРеквизитовСостояниеПросмотраРасширеннаяПодсказка - 280 + СписокДополнительныхРеквизитовЗаголовокФормыЗначенияРасширеннаяПодсказка + 267 Label true true @@ -340,22 +1046,44 @@ - ЗначенияДополнительныхРеквизитовСостояниеПросмотраКонтекстноеМеню - 279 + СписокДополнительныхРеквизитовЗаголовокФормыЗначенияКонтекстноеМеню + 266 true - ViewStatusAddition - ЗначенияДополнительныхРеквизитов - + InputField + Enter + true + Left + true + true + true + true + true + true + true + Normal + + ru + Не задан + - - - ЗначенияДополнительныхРеквизитовУправлениеПоиском - 281 + + + СписокДополнительныхРеквизитовЗаголовокФормыВыбораЗначения + 268 + true + true + + true + + + Items.Свойства.CurrentData.ЗаголовокФормыВыбораЗначения + + Top - ЗначенияДополнительныхРеквизитовУправлениеПоискомРасширеннаяПодсказка - 283 + СписокДополнительныхРеквизитовЗаголовокФормыВыбораЗначенияРасширеннаяПодсказка + 270 Label true true @@ -364,83 +1092,41 @@ - ЗначенияДополнительныхРеквизитовУправлениеПоискомКонтекстноеМеню - 282 + СписокДополнительныхРеквизитовЗаголовокФормыВыбораЗначенияКонтекстноеМеню + 269 true - SearchControlAddition - ЗначенияДополнительныхРеквизитов - + InputField + Enter + true + Left + true + true + true + true + true + true + true + Normal + + ru + Не задан + - - - ЗначенияДополнительныхРеквизитовРасширеннаяПодсказка - 274 - Label - true - true - - Left - - - - ЗначенияДополнительныхРеквизитовКонтекстноеМеню - 272 - true - - HierarchicalList - true - true - true - true - true - MultiRow - 1 - 1 - AutoUse - AutoUse - true - true - false - false - true - Auto - Auto - true - true - true - true - - ЗначенияДополнительныхРеквизитов.КодКартинки - - - StdPicture.Attribute - - - Style.FormBackColor - - true - - - СписокДополнительныхРеквизитовПодсказка - 262 - - <key>ru</key> - <value>Всплывающая подсказка</value> - + true true true - - Items.СписокДополнительныхРеквизитов.CurrentData.Подсказка - - Top + + Style.FormTextColor + + true - СписокДополнительныхРеквизитовПодсказкаРасширеннаяПодсказка - 264 + РасшифровкаРеквизитаРасширеннаяПодсказка + 261 Label true true @@ -448,120 +1134,14 @@ Left - - СписокДополнительныхРеквизитовПодсказкаКонтекстноеМеню - 263 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - ru - Не задана - - - - - СписокДополнительныхРеквизитовЗаголовокФормыЗначения - 265 - true - true - - true - - - Items.СписокДополнительныхРеквизитов.CurrentData.ЗаголовокФормыЗначения - - Top - - СписокДополнительныхРеквизитовЗаголовокФормыЗначенияРасширеннаяПодсказка - 267 - Label - true - true - - Left - - - - СписокДополнительныхРеквизитовЗаголовокФормыЗначенияКонтекстноеМеню - 266 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - ru - Не задан - - - - - СписокДополнительныхРеквизитовЗаголовокФормыВыбораЗначения - 268 - true - true - - true - - - Items.СписокДополнительныхРеквизитов.CurrentData.ЗаголовокФормыВыбораЗначения - - Top - - СписокДополнительныхРеквизитовЗаголовокФормыВыбораЗначенияРасширеннаяПодсказка - 270 - Label - true - true - - Left - - - - СписокДополнительныхРеквизитовЗаголовокФормыВыбораЗначенияКонтекстноеМеню - 269 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - ru - Не задан - + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -569,13 +1149,9 @@ true - - Style.FormTextColor - - true - РасшифровкаРеквизитаРасширеннаяПодсказка - 261 + ГруппаСодержимоеРасширеннаяПодсказка + 438 Label true true @@ -585,7 +1161,6 @@ UsualGroup - Vertical Auto true true @@ -614,7 +1189,9 @@ Page - LeftWidest + Vertical + Equal + false @@ -696,6 +1273,7 @@ Page Vertical + false @@ -1175,51 +1753,9 @@ ГруппаСвойства 326 - - Доступен - 187 - - <key>ru</key> - <value>Доступен</value> - - true - true - - true - - - Объект.Доступен - - Right - - OnChange - ДоступенПриИзменении - - - ДоступенРасширеннаяПодсказка - 189 - Label - true - true - - Left - - - - ДоступенКонтекстноеМеню - 188 - true - - CheckBoxField - Enter - true - Left - true - - - + Виден - 330 + 452 <key>ru</key> <value>Виден</value> @@ -1229,17 +1765,9 @@ <userVisible> <common>true</common> </userVisible> - <dataPath xsi:type="form:DataPath"> - <segments>Объект.Виден</segments> - </dataPath> - <titleLocation>Right</titleLocation> - <handlers> - <event>OnChange</event> - <name>ВиденПриИзменении</name> - </handlers> <extendedTooltip> <name>ВиденРасширеннаяПодсказка</name> - <id>332</id> + <id>454</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1249,15 +1777,55 @@ </extendedTooltip> <contextMenu> <name>ВиденКонтекстноеМеню</name> - <id>331</id> + <id>453</id> <autoFill>true</autoFill> </contextMenu> - <type>CheckBoxField</type> - <editMode>Enter</editMode> - <showInHeader>true</showInHeader> - <headerHorizontalAlign>Left</headerHorizontalAlign> - <showInFooter>true</showInFooter> - <extInfo xsi:type="form:CheckBoxFieldExtInfo"/> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <textColor xsi:type="core:ColorRef"> + <color>Style.ButtonTextColor</color> + </textColor> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </items> + <items xsi:type="form:Decoration"> + <name>Доступен</name> + <id>455</id> + <title> + <key>ru</key> + <value>Доступен</value> + + true + true + + true + + + ДоступенРасширеннаяПодсказка + 457 + Label + true + true + + Left + + + + ДоступенКонтекстноеМеню + 456 + true + + Label + true + true + + Style.ButtonTextColor + + + Left + ЗаполнятьОбязательно @@ -1333,45 +1901,6 @@ ГруппаНастройкаЗависимостей 328 - - ЗадатьУсловиеДоступности - 194 - - <key>ru</key> - <value>всегда</value> - - true - true - - true - - - ЗадатьУсловиеДоступностиРасширеннаяПодсказка - 196 - Label - true - true - - Left - - - - ЗадатьУсловиеДоступностиКонтекстноеМеню - 195 - true - - Label - true - true - - - Click - ЗадатьУсловиеДоступностиНажатие - - true - Left - - ЗадатьУсловиеВидимости 333 @@ -1411,6 +1940,45 @@ Left + + ЗадатьУсловиеДоступности + 194 + + <key>ru</key> + <value>всегда</value> + + true + true + + true + + + ЗадатьУсловиеДоступностиРасширеннаяПодсказка + 196 + Label + true + true + + Left + + + + ЗадатьУсловиеДоступностиКонтекстноеМеню + 195 + true + + Label + true + true + + + Click + ЗадатьУсловиеДоступностиНажатие + + true + Left + + ЗадатьУсловиеЗаполнения 197 @@ -1846,6 +2414,7 @@ Vertical auto + false @@ -2470,6 +3039,7 @@ Vertical auto + false @@ -2866,6 +3436,7 @@ Vertical auto + false true @@ -3062,6 +3633,7 @@ Vertical auto + false @@ -3145,6 +3717,7 @@ Vertical auto + false true @@ -3198,6 +3771,7 @@ Page Vertical + false true @@ -3582,73 +4156,6 @@ true - - СписокДополнительныхРеквизитов - - <key>ru</key> - <value>Список дополнительных реквизитов</value> - - 12 - - DynamicList - - - true - - - true - - - СписокДополнительныхРеквизитов.Ref - - - ВЫБРАТЬ - Свойства.Ссылка, - Свойства.ВерсияДанных, - Свойства.ПометкаУдаления, - Свойства.Предопределенный, - Свойства.Заголовок, - ВЫБОР - КОГДА Свойства.НаборСвойств = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка) - ТОГДА &ПредставлениеГруппировкиОбщихСвойств - КОГДА Свойства.НаборСвойств.Родитель = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка) - ТОГДА Свойства.НаборСвойств - ИНАЧЕ Свойства.НаборСвойств.Родитель.Наименование + " (" + Свойства.НаборСвойств.Наименование + ")" - КОНЕЦ КАК НаборСвойствГруппировка, - Свойства.НаборСвойств, - Свойства.ДополнительныеЗначенияИспользуются, - Свойства.ВладелецДополнительныхЗначений, - Свойства.Наименование, - Свойства.ТипЗначения, - Свойства.ЭтоДополнительноеСведение, - Свойства.МногострочноеПолеВвода, - Свойства.ЗаполнятьОбязательно, - Свойства.ЗаголовокФормыЗначения, - Свойства.ЗаголовокФормыВыбораЗначения, - Свойства.ФорматСвойства, - Свойства.Комментарий, - Свойства.Подсказка, - ВЫБОР - КОГДА Свойства.ЭтоДополнительноеСведение - ТОГДА 2 - ИНАЧЕ 1 - КОНЕЦ + ВЫБОР - КОГДА Свойства.Предопределенный - ТОГДА 6 - КОГДА Свойства.ПометкаУдаления - ТОГДА 3 - ИНАЧЕ 0 - КОНЕЦ КАК НомерКартинки -ИЗ - ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения - true - true - true - true - true - - ПереданныеПараметрыФормы @@ -3846,6 +4353,364 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>НаборыСвойств</name> + <title> + <key>ru</key> + <value>Наборы свойств</value> + + 20 + + DynamicList + + + true + + + true + + + НаборыСвойств.IsFolder + + + НаборыСвойств.Parent + + + НаборыСвойств.Ref + + + ВЫБРАТЬ + Наборы.Ссылка, + Наборы.ВерсияДанных, + Наборы.ПометкаУдаления, + Наборы.Предопределенный, + Наборы.Родитель, + Наборы.ЭтоГруппа, + Наборы.Наименование, + Наборы.Используется, + ВЫБОР + КОГДА Наборы.ЭтоГруппа + ТОГДА Наборы.Наименование + КОГДА &ЭтоДополнительноеСведение + ТОГДА ВЫБОР + КОГДА Наборы.КоличествоСведений = "" + ТОГДА Наборы.Наименование + ИНАЧЕ Наборы.Наименование + " (" + Наборы.КоличествоСведений + ")" + КОНЕЦ + ИНАЧЕ ВЫБОР + КОГДА Наборы.КоличествоРеквизитов = "" + ТОГДА Наборы.Наименование + ИНАЧЕ Наборы.Наименование + " (" + Наборы.КоличествоРеквизитов + ")" + КОНЕЦ + КОНЕЦ КАК Представление, + ВЫБОР + КОГДА Наборы.ПометкаУдаления + ТОГДА 1 + ИНАЧЕ 0 + КОНЕЦ + ВЫБОР + КОГДА Наборы.Предопределенный + ТОГДА 2 + ИНАЧЕ 0 + КОНЕЦ КАК НомерКартинки +ИЗ + Справочник.НаборыДополнительныхРеквизитовИСведений КАК Наборы +ГДЕ + ВЫБОР + КОГДА Наборы.Родитель = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка) + ТОГДА Наборы.Ссылка В (&Наборы) + ИНАЧЕ Наборы.Родитель В (&Наборы) + КОНЕЦ + И Наборы.Используется + И ЕСТЬNULL(Наборы.Родитель.Используется, ИСТИНА) + Catalog.НаборыДополнительныхРеквизитовИСведений + true + true + true + true + true + + + + Свойства + + <key>ru</key> + <value>Свойства</value> + + 22 + + ValueTable + + + true + + + true + + + Заголовок + + <key>ru</key> + <value>Реквизит</value> + + 1 + + String + + + + true + + + true + + + + ПометкаУдаления + + <key>ru</key> + <value>Пометка удаления</value> + + 4 + + Boolean + + + true + + + true + + + + Свойство + + <key>ru</key> + <value>Ссылка</value> + + 5 + + ChartOfCharacteristicTypesRef.ДополнительныеРеквизитыИСведения + + + true + + + true + + + + НомерСтроки + + <key>ru</key> + <value>Номер строки табличной части</value> + + 6 + + Number + + 10 + true + + + + true + + + true + + + + ВладелецДополнительныхЗначений + + <key>ru</key> + <value>Значения в</value> + + 7 + + ChartOfCharacteristicTypesRef.ДополнительныеРеквизитыИСведения + + + true + + + true + + + + НомерКартинки + + <key>ru</key> + <value>Номер картинки</value> + + 2 + + Number + + 1 + true + + + + true + + + true + + + + ТипЗначения + + <key>ru</key> + <value>Тип значения</value> + + 8 + + String + + + + true + + + true + + + + Подсказка + + <key>ru</key> + <value>Подсказка</value> + + 3 + + String + + + + true + + + true + + + + ЗаголовокФормыЗначения + + <key>ru</key> + <value>Заголовок формы значения</value> + + 9 + + String + + + + true + + + true + + + + ЗаголовокФормыВыбораЗначения + + <key>ru</key> + <value>Заголовок формы выбора значения</value> + + 10 + + String + + + + true + + + true + + + + Общее + + <key>ru</key> + <value>Общее</value> + + 11 + + Boolean + + + true + + + true + + + + ОбщиеЗначения + + <key>ru</key> + <value>Общие значения</value> + + 12 + + Boolean + + + true + + + true + + + + + ВыбранныйНаборСвойств + + <key>ru</key> + <value>Выбранный набор свойств</value> + + 23 + + CatalogRef.НаборыДополнительныхРеквизитовИСведений + + + true + + + true + + + + ОбщиеНаборыСвойств + + <key>ru</key> + <value>Общие наборы свойств</value> + + 24 + + DynamicList + + + true + + + true + + + ВЫБРАТЬ + ВЫБОР + КОГДА &ЭтоДополнительноеСведение + ТОГДА &ОбщиеДополнительныеСведения + ИНАЧЕ &ОбщиеДополнительныеРеквизиты + КОНЕЦ КАК Представление, + 0 КАК НомерКартинки + true + true + true + true + + РедактироватьФорматЗначения @@ -4001,6 +4866,50 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>Изменить</name> + <title> + <key>ru</key> + <value>Изменить</value> + + 8 + + ru + Изменить + + + true + + F2 + + StdPicture.Change + + + + Изменить + + + DontUse + Auto + + + ОбщиеРеквизитыНеВключенныеВНаборы + + <key>ru</key> + <value>Только общие дополнительные реквизиты</value> + + 9 + + true + + + + ОбщиеРеквизитыНеВключенныеВНаборы + + + DontUse + Auto + ЭтоДополнительноеСведение diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Help/ru.html index cd7f9dabb..6561198c7 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Help/ru.html @@ -1,4 +1,4 @@ - +

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

                Открывается по команде Добавить или Создать в списке Дополнительные реквизиты (сведения).

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

                diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl index 9a6afc924..6966b3ff1 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаЭлемента/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ОбработкаПродолженияПриОшибкеЗаписи; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -23,6 +27,11 @@ ПереданныеПараметрыФормы.Вставить("Перетаскивание", Ложь); ЗаполнитьЗначенияСвойств(ПереданныеПараметрыФормы, Параметры); + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( + НаборыСвойств, "Наборы", Новый Массив, Истина); + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( + НаборыСвойств, "ЭтоДополнительноеСведение", ЭтоДополнительноеСведение = 1, Истина); + Если ПереданныеПараметрыФормы.КопированиеСВопросом И Не ПолучитьФункциональнуюОпцию("ИспользоватьОбщиеДополнительныеРеквизитыИСведения") И (Не РеквизитСоСпискомДополнительныхЗначений() @@ -144,8 +153,6 @@ КонецЕсли; КонецЕсли; - УстановитьЗависимостиДополнительныхРеквизитов(ТекущийОбъект); - КонецПроцедуры &НаСервере @@ -274,16 +281,6 @@ КонецПроцедуры -&НаКлиенте -Процедура СписокДополнительныхРеквизитовПриАктивизацииСтроки(Элемент) - Если ТипЗнч(Элемент.ТекущаяСтрока) = Тип("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения") Тогда - ВладелецЗначений = Элемент.ТекущаяСтрока; - ЗаполнитьЗначенияДополнительныхРеквизитов(ВладелецЗначений); - Иначе - ЗначенияДополнительныхРеквизитов.ПолучитьЭлементы().Очистить(); - КонецЕсли; -КонецПроцедуры - &НаКлиенте Процедура ДополнительныеЗначенияСВесомПриИзменении(Элемент) @@ -326,25 +323,9 @@ КонецПроцедуры -&НаКлиенте -Процедура ДоступенПриИзменении(Элемент) - Если ЗначениеЗаполнено(Объект.Ссылка) Тогда - Элементы.ЗадатьУсловиеДоступности.Доступность = Объект.Доступен; - КонецЕсли; -КонецПроцедуры - &НаКлиенте Процедура ЗаполнятьОбязательноПриИзменении(Элемент) - Если ЗначениеЗаполнено(Объект.Ссылка) Тогда - Элементы.ЗадатьУсловиеЗаполнения.Доступность = Объект.ЗаполнятьОбязательно; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ВиденПриИзменении(Элемент) - Если ЗначениеЗаполнено(Объект.Ссылка) Тогда - Элементы.ЗадатьУсловиеВидимости.Доступность = Объект.Виден; - КонецЕсли; + Элементы.ЗадатьУсловиеЗаполнения.Доступность = Объект.ЗаполнятьОбязательно; КонецПроцедуры &НаКлиенте @@ -382,6 +363,8 @@ КонецЦикла; КонецЕсли; КонецЕсли; + + УстановитьЗависимостиДополнительныхРеквизитов(); КонецПроцедуры &НаКлиенте @@ -391,10 +374,24 @@ #КонецОбласти -#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокДополнительныхРеквизитов +#Область ОбработчикиСобытийЭлементовТаблицыФормыНаборыСвойств &НаКлиенте -Процедура СписокДополнительныхРеквизитовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) +Процедура НаборыСвойствПриАктивизацииСтроки(Элемент) + ПодключитьОбработчикОжидания("ПриИзмененииТекущегоНабора", 0.1, Истина) +КонецПроцедуры + +&НаКлиенте +Процедура НаборыСвойствПередНачаломИзменения(Элемент, Отказ) + Отказ = Истина; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСвойства + +&НаКлиенте +Процедура СвойстваВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; КомандаДалее(Неопределено); @@ -483,9 +480,8 @@ ОсновнаяСтраница = Элементы.СтраницыПомощникКарточка; ИндексСтраницы = ОсновнаяСтраница.ПодчиненныеЭлементы.Индекс(ОсновнаяСтраница.ТекущаяСтраница); Если ИндексСтраницы = 0 - И ТипЗнч(Элементы.СписокДополнительныхРеквизитов.ТекущаяСтрока) <> Тип("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения") Тогда - ТекстПредупреждения = НСтр("ru = 'Выберите элемент, а не группу! - |Для раскрытия групп используйте ""Ctrl"" и стрелки вверх/вниз или клавиши ""+"" и ""-"" на дополнительной клавиатуре.'"); + И Элементы.Свойства.ТекущиеДанные = Неопределено Тогда + ТекстПредупреждения = НСтр("ru = 'Элемент не выбран!'"); ПоказатьПредупреждение(, ТекстПредупреждения); Возврат; КонецЕсли; @@ -579,6 +575,34 @@ ОткрытьФорму(ИмяФормыПоискИУдалениеДублей); КонецПроцедуры +&НаКлиенте +Процедура Изменить(Команда) + + Если Элементы.Свойства.ТекущиеДанные <> Неопределено Тогда + // Открытие формы свойства. + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Ключ", Элементы.Свойства.ТекущиеДанные.Свойство); + ПараметрыФормы.Вставить("ТекущийНаборСвойств", ВыбранныйНаборСвойств); + + ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ФормаОбъекта", + ПараметрыФормы, Элементы.Свойства,,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбщиеРеквизитыНеВключенныеВНаборы(Команда) + НовоеЗначение = Не Элементы.ОбщиеРеквизитыНеВключенныеВНаборы.Пометка; + Элементы.ОбщиеРеквизитыНеВключенныеВНаборы.Пометка = НовоеЗначение; + Если НовоеЗначение Тогда + Элементы.СтраницыНаборыСвойств.ТекущаяСтраница = Элементы.СтраницаОбщиеНаборы; + Иначе + Элементы.СтраницыНаборыСвойств.ТекущаяСтраница = Элементы.СтраницаВсеНаборы; + КонецЕсли; + + ОбновитьСписокСвойствТекущегоНабора(); +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -591,12 +615,14 @@ КонецПроцедуры &НаСервере -Процедура УстановитьЗависимостиДополнительныхРеквизитов(ТекущийОбъект) +Процедура УстановитьЗависимостиДополнительныхРеквизитов() Если УсловияЗависимостиРеквизитов.Количество() = 0 Тогда Возврат; КонецЕсли; + ТекущийОбъект = РеквизитФормыВЗначение("Объект"); + ЗависимостиДополнительныхРеквизитов = ТекущийОбъект.ЗависимостиДополнительныхРеквизитов; Для Каждого УсловиеЗависимости Из УсловияЗависимостиРеквизитов Цикл @@ -616,6 +642,10 @@ КонецЦикла; КонецЦикла; + ЗначениеВРеквизитФормы(ТекущийОбъект, "Объект"); + + УстановитьЗаголовкиГиперссылок(); + КонецПроцедуры &НаСервере @@ -626,79 +656,51 @@ Если ПереданныеПараметрыФормы.ЭтоДополнительноеСведение <> Неопределено Тогда ЭтоДополнительноеСведение = ПереданныеПараметрыФормы.ЭтоДополнительноеСведение; - - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - СписокДополнительныхРеквизитов, "ЭтоДополнительноеСведение", (ЭтоДополнительноеСведение = 1), , , Истина); КонецЕсли; - Если Не ИспользоватьОбщиеДополнительныеРеквизитыИСведения Тогда - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - СписокДополнительныхРеквизитов, "НаборСвойств", , ВидСравненияКомпоновкиДанных.Заполнено, , Истина); - КонецЕсли; - - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( - СписокДополнительныхРеквизитов, "ВладелецДополнительныхЗначений", , - ВидСравненияКомпоновкиДанных.НеЗаполнено, , Истина); - - ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( - СписокДополнительныхРеквизитов, - "ПредставлениеГруппировкиОбщихСвойств", - НСтр("ru = 'Общие (для нескольких наборов)'"), - Истина); - - // Группировка свойств по наборам. - ГруппировкаДанных = СписокДополнительныхРеквизитов.КомпоновщикНастроек.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); - ГруппировкаДанных.ИдентификаторПользовательскойНастройки = "ГруппировкаСвойствПоНаборам"; - ГруппировкаДанных.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; - - ПоляГруппировки = ГруппировкаДанных.ПоляГруппировки; - - ЭлементГруппировкиДанных = ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); - ЭлементГруппировкиДанных.Поле = Новый ПолеКомпоновкиДанных("НаборСвойствГруппировка"); - ЭлементГруппировкиДанных.Использование = Истина; - -КонецПроцедуры - -&НаСервере -Процедура ЗаполнитьЗначенияДополнительныхРеквизитов(ВладелецЗначений) - - ДеревоЗначений = РеквизитФормыВЗначение("ЗначенияДополнительныхРеквизитов"); - Запрос = Новый Запрос; Запрос.Текст = - "ВЫБРАТЬ - | ЗначенияСвойствОбъектов.Ссылка КАК Ссылка, - | ЗначенияСвойствОбъектов.Владелец КАК Владелец, - | 0 КАК КодКартинки, - | ЗначенияСвойствОбъектов.Вес, - | ЗначенияСвойствОбъектов.Наименование - |ИЗ - | Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов - |ГДЕ - | ЗначенияСвойствОбъектов.ПометкаУдаления = ЛОЖЬ - | И ЗначенияСвойствОбъектов.Владелец = &Владелец - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ЗначенияСвойствОбъектовИерархия.Ссылка, - | ЗначенияСвойствОбъектовИерархия.Владелец, - | 0, - | ЗначенияСвойствОбъектовИерархия.Вес, - | ЗначенияСвойствОбъектовИерархия.Наименование - |ИЗ - | Справочник.ЗначенияСвойствОбъектовИерархия КАК ЗначенияСвойствОбъектовИерархия - |ГДЕ - | ЗначенияСвойствОбъектовИерархия.ПометкаУдаления = ЛОЖЬ - | И ЗначенияСвойствОбъектовИерархия.Владелец = &Владелец - | - |УПОРЯДОЧИТЬ ПО - | Ссылка ИЕРАРХИЯ"; - Запрос.УстановитьПараметр("Владелец", ВладелецЗначений); - Результат = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); + "ВЫБРАТЬ + | Наборы.Ссылка КАК Ссылка + |ИЗ + | Справочник.НаборыДополнительныхРеквизитовИСведений КАК Наборы + |ГДЕ + | Наборы.Родитель = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка)"; - ДеревоЗначений = Результат.Скопировать(); - ЗначениеВРеквизитФормы(ДеревоЗначений, "ЗначенияДополнительныхРеквизитов"); + Наборы = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + + ДоступныеНаборы = Новый Массив; + Для Каждого Ссылка Из Наборы Цикл + ВидыСвойствНабора = УправлениеСвойствамиСлужебный.ВидыСвойствНабора(Ссылка, Ложь); + + Если ЭтоДополнительноеСведение = 1 + И ВидыСвойствНабора.ДополнительныеСведения + ИЛИ ЭтоДополнительноеСведение = 0 + И ВидыСвойствНабора.ДополнительныеРеквизиты Тогда + + ДоступныеНаборы.Добавить(Ссылка); + КонецЕсли; + КонецЦикла; + + Если ЭтоДополнительноеСведение = 1 Тогда + Элементы.ОбщиеРеквизитыНеВключенныеВНаборы.Заголовок = НСтр("ru ='Только общие дополнительные сведения'"); + Иначе + Элементы.ОбщиеРеквизитыНеВключенныеВНаборы.Заголовок = НСтр("ru ='Только общие дополнительные реквизиты'"); + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( + НаборыСвойств, "Наборы", ДоступныеНаборы, Истина); + + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( + НаборыСвойств, "ЭтоДополнительноеСведение", (ЭтоДополнительноеСведение = 1), Истина); + + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( + ОбщиеНаборыСвойств, "ЭтоДополнительноеСведение", (ЭтоДополнительноеСведение = 1), Истина); + + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( + ОбщиеНаборыСвойств, "ОбщиеДополнительныеСведения", НСтр("ru = 'Общие дополнительные сведения'"), Истина); + ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка( + ОбщиеНаборыСвойств, "ОбщиеДополнительныеРеквизиты", НСтр("ru = 'Общие дополнительные реквизиты'"), Истина); КонецПроцедуры @@ -709,6 +711,7 @@ ВыбранныйРеквизит = ПереданныеПараметрыФормы.ВладелецДополнительныхЗначений; ВыбранныйРеквизитОбъект = ВыбранныйРеквизит.ПолучитьОбъект(); ВыбранныйРеквизитОбъект.НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка(); + ВыбранныйРеквизитОбъект.Наименование = ВыбранныйРеквизитОбъект.Заголовок; ВыбранныйРеквизитОбъект.Записать(); ЗафиксироватьТранзакцию(); @@ -1157,7 +1160,7 @@ Элементы.КоманднаяПанельЛево.Доступность = Ложь; Элементы.КомандаДалее.Заголовок = НСтр("ru = 'Далее >'"); - Элементы.СписокДополнительныхРеквизитов.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Элементы.ДекорацияЗаголовок.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ШаблонЗаголовкаСписка, ?(ПереданныеПараметрыФормы.ЭтоДополнительноеСведение, НСтр("ru = 'дополнительное сведение'"), НСтр("ru = 'дополнительный реквизит'")), Строка(ПереданныеПараметрыФормы.ТекущийНаборСвойств)); @@ -1168,11 +1171,11 @@ ВладелецДополнительныхЗначений = ПереданныеПараметрыФормы.ВладелецДополнительныхЗначений; Иначе Элементы.КоманднаяПанельЛево.Доступность = Истина; - ВыбранныйЭлемент = Элементы.СписокДополнительныхРеквизитов.ТекущиеДанные; + ВыбранныйЭлемент = Элементы.Свойства.ТекущиеДанные; Если ВыбранныйЭлемент = Неопределено Тогда ВладелецДополнительныхЗначений = ПереданныеПараметрыФормы.ВладелецДополнительныхЗначений; Иначе - ВладелецДополнительныхЗначений = Элементы.СписокДополнительныхРеквизитов.ТекущиеДанные.Ссылка; + ВладелецДополнительныхЗначений = Элементы.Свойства.ТекущиеДанные.Свойство; КонецЕсли; КонецЕсли; Элементы.КомандаДалее.Заголовок = НСтр("ru = 'Далее >'"); @@ -1248,8 +1251,8 @@ СтарыйТипЗначения = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Ссылка, "ТипЗначения"); Если ЗначениеЗаполнено(Объект.НаборСвойств) Тогда Элементы.ЗадатьУсловиеЗаполнения.Доступность = Объект.ЗаполнятьОбязательно; - Элементы.ЗадатьУсловиеДоступности.Доступность = Объект.Доступен; - Элементы.ЗадатьУсловиеВидимости.Доступность = Объект.Виден; + Элементы.ЗадатьУсловиеДоступности.Доступность = Истина; + Элементы.ЗадатьУсловиеВидимости.Доступность = Истина; Иначе Элементы.ГруппаНастройкаЗависимостей.Видимость = Ложь; Элементы.Виден.Видимость = Ложь; @@ -1258,9 +1261,9 @@ УстановитьЗаголовкиГиперссылок(); Иначе СтарыйТипЗначения = Новый ОписаниеТипов; - Элементы.ЗадатьУсловиеЗаполнения.Доступность = Ложь; - Элементы.ЗадатьУсловиеДоступности.Доступность = Ложь; - Элементы.ЗадатьУсловиеВидимости.Доступность = Ложь; + Элементы.ЗадатьУсловиеЗаполнения.Доступность = Объект.ЗаполнятьОбязательно; + Элементы.ЗадатьУсловиеДоступности.Доступность = Истина; + Элементы.ЗадатьУсловиеВидимости.Доступность = Истина; КонецЕсли; Если ЗначениеЗаполнено(Объект.ВладелецДополнительныхЗначений) Тогда @@ -1619,8 +1622,8 @@ ОсновнаяСтраница.ТекущаяСтраница = ТекущаяСтраница; Если ТекущаяСтраница = Элементы.ВыборДействия Тогда Если Направление = "Вперед" Тогда - ВыбранныйЭлемент = Элементы.СписокДополнительныхРеквизитов.ТекущиеДанные; - ПереданныеПараметрыФормы.ВладелецДополнительныхЗначений = ВыбранныйЭлемент.Ссылка; + ВыбранныйЭлемент = Элементы.Свойства.ТекущиеДанные; + ПереданныеПараметрыФормы.ВладелецДополнительныхЗначений = ВыбранныйЭлемент.Свойство; ЗаполнитьСписокДействийПриДобавленииРеквизита(); КонецЕсли; ИначеЕсли ТекущаяСтраница = Элементы.КарточкаРеквизита Тогда @@ -1759,6 +1762,7 @@ ЗаданаЗависимостьОбязательностиЗаполнения = Ложь; ЗаданаЗависимостьВидимости = Ложь; ЗависимостиСвойств = Объект.ЗависимостиДополнительныхРеквизитов; + Для Каждого ЗависимостьСвойства Из ЗависимостиСвойств Цикл Если ЗависимостьСвойства.ЗависимоеСвойство = "Доступен" Тогда ЗаданаЗависимостьДоступности = Истина; @@ -1791,6 +1795,7 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ДополнительныйРеквизит", Объект.Ссылка); + ПараметрыФормы.Вставить("ЗависимостиРеквизитов", Объект.ЗависимостиДополнительныхРеквизитов); ПараметрыФормы.Вставить("Набор", Объект.НаборСвойств); ПараметрыФормы.Вставить("НастраиваемоеСвойство", НастраиваемоеСвойство); @@ -1834,6 +1839,283 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриИзмененииТекущегоНабора() + + Если Элементы.НаборыСвойств.ТекущиеДанные = Неопределено Тогда + Если ЗначениеЗаполнено(ВыбранныйНаборСвойств) Тогда + ВыбранныйНаборСвойств = Неопределено; + ПриИзмененииТекущегоНабораНаСервере(); + КонецЕсли; + + ИначеЕсли Элементы.НаборыСвойств.ТекущиеДанные.Ссылка <> ВыбранныйНаборСвойств Тогда + ВыбранныйНаборСвойств = Элементы.НаборыСвойств.ТекущиеДанные.Ссылка; + ТекущийНаборЭтоГруппа = Элементы.НаборыСвойств.ТекущиеДанные.ЭтоГруппа; + ПриИзмененииТекущегоНабораНаСервере(ТекущийНаборЭтоГруппа); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриИзмененииТекущегоНабораНаСервере(ТекущийНаборЭтоГруппа = Неопределено) + + Если ЗначениеЗаполнено(ВыбранныйНаборСвойств) + И НЕ ТекущийНаборЭтоГруппа Тогда + ОбновитьСписокСвойствТекущегоНабора(); + Иначе + Свойства.Очистить(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьСписокСвойствТекущегоНабора() + + Запрос = Новый Запрос; + Если Не Элементы.ОбщиеРеквизитыНеВключенныеВНаборы.Пометка Тогда + Запрос.УстановитьПараметр("Набор", ВыбранныйНаборСвойств); + Запрос.Текст = + "ВЫБРАТЬ + | СвойстваНаборов.НомерСтроки, + | СвойстваНаборов.Свойство, + | СвойстваНаборов.ПометкаУдаления, + | ЕСТЬNULL(Свойства.Заголовок, ПРЕДСТАВЛЕНИЕ(СвойстваНаборов.Свойство)) КАК Заголовок, + | Свойства.ВладелецДополнительныхЗначений, + | Свойства.ТипЗначения КАК ТипЗначения, + | ВЫБОР + | КОГДА Свойства.Ссылка ЕСТЬ NULL + | ТОГДА ИСТИНА + | КОГДА Свойства.НаборСвойств = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК Общее, + | ВЫБОР + | КОГДА СвойстваНаборов.ПометкаУдаления = ИСТИНА + | ТОГДА 4 + | ИНАЧЕ 3 + | КОНЕЦ КАК НомерКартинки, + | Свойства.Подсказка, + | Свойства.ЗаголовокФормыЗначения, + | Свойства.ЗаголовокФормыВыбораЗначения + |ИЗ + | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК СвойстваНаборов + | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства + | ПО СвойстваНаборов.Свойство = Свойства.Ссылка + |ГДЕ + | СвойстваНаборов.Ссылка = &Набор + | + |УПОРЯДОЧИТЬ ПО + | СвойстваНаборов.НомерСтроки + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Наборы.ВерсияДанных КАК ВерсияДанных + |ИЗ + | Справочник.НаборыДополнительныхРеквизитовИСведений КАК Наборы + |ГДЕ + | Наборы.Ссылка = &Набор"; + + Если ЭтоДополнительноеСведение Тогда + Запрос.Текст = СтрЗаменить( + Запрос.Текст, + "Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты", + "Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения"); + КонецЕсли; + + Иначе + Запрос.Текст = + "ВЫБРАТЬ + | Свойства.Ссылка КАК Свойство, + | Свойства.ПометкаУдаления КАК ПометкаУдаления, + | Свойства.Заголовок КАК Заголовок, + | Свойства.ВладелецДополнительныхЗначений, + | Свойства.ТипЗначения КАК ТипЗначения, + | ИСТИНА КАК Общее, + | ВЫБОР + | КОГДА Свойства.ПометкаУдаления = ИСТИНА + | ТОГДА 4 + | ИНАЧЕ 3 + | КОНЕЦ КАК НомерКартинки, + | Свойства.Подсказка, + | Свойства.ЗаголовокФормыЗначения, + | Свойства.ЗаголовокФормыВыбораЗначения + |ИЗ + | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства + | + |ГДЕ + | Свойства.НаборСвойств = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка) + | И Свойства.ЭтоДополнительноеСведение = &ЭтоДополнительноеСведение + | + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ""ВерсияДанных"" КАК ВерсияДанных"; + + Запрос.УстановитьПараметр("ЭтоДополнительноеСведение", (ЭтоДополнительноеСведение = 1)); + КонецЕсли; + + НачатьТранзакцию(); + Попытка + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Если Элементы.Свойства.ТекущаяСтрока = Неопределено Тогда + Строка = Неопределено; + Иначе + Строка = Свойства.НайтиПоИдентификатору(Элементы.Свойства.ТекущаяСтрока); + КонецЕсли; + ТекущееСвойство = ?(Строка = Неопределено, Неопределено, Строка.Свойство); + + Свойства.Очистить(); + + Выборка = РезультатыЗапроса[0].Выбрать(); + Пока Выборка.Следующий() Цикл + + НоваяСтрока = Свойства.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка); + + НоваяСтрока.ОбщиеЗначения = ЗначениеЗаполнено(Выборка.ВладелецДополнительныхЗначений); + + Если Выборка.ТипЗначения <> NULL + И УправлениеСвойствамиСлужебный.ТипЗначенияСодержитЗначенияСвойств(Выборка.ТипЗначения) Тогда + + НоваяСтрока.ТипЗначения = Строка(Новый ОписаниеТипов( + Выборка.ТипЗначения, + , + "СправочникСсылка.ЗначенияСвойствОбъектовИерархия, + |СправочникСсылка.ЗначенияСвойствОбъектов")); + + Запрос = Новый Запрос; + Если ЗначениеЗаполнено(Выборка.ВладелецДополнительныхЗначений) Тогда + Запрос.УстановитьПараметр("Владелец", Выборка.ВладелецДополнительныхЗначений); + Иначе + Запрос.УстановитьПараметр("Владелец", Выборка.Свойство); + КонецЕсли; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 4 + | ЗначенияСвойствОбъектов.Наименование КАК Наименование + |ИЗ + | Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов + |ГДЕ + | ЗначенияСвойствОбъектов.Владелец = &Владелец + | И НЕ ЗначенияСвойствОбъектов.ЭтоГруппа + | И НЕ ЗначенияСвойствОбъектов.ПометкаУдаления + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ ПЕРВЫЕ 4 + | ЗначенияСвойствОбъектовИерархия.Наименование + |ИЗ + | Справочник.ЗначенияСвойствОбъектовИерархия КАК ЗначенияСвойствОбъектовИерархия + |ГДЕ + | ЗначенияСвойствОбъектовИерархия.Владелец = &Владелец + | И НЕ ЗначенияСвойствОбъектовИерархия.ПометкаУдаления + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов + |ГДЕ + | ЗначенияСвойствОбъектов.Владелец = &Владелец + | И НЕ ЗначенияСвойствОбъектов.ЭтоГруппа + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + |ИЗ + | Справочник.ЗначенияСвойствОбъектовИерархия КАК ЗначенияСвойствОбъектовИерархия + |ГДЕ + | ЗначенияСвойствОбъектовИерархия.Владелец = &Владелец"; + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + + ПервыеЗначения = РезультатыЗапроса[0].Выгрузить().ВыгрузитьКолонку("Наименование"); + + Если ПервыеЗначения.Количество() = 0 Тогда + Если РезультатыЗапроса[1].Пустой() Тогда + ПредставлениеЗначений = НСтр("ru = 'Значения еще не введены'"); + Иначе + ПредставлениеЗначений = НСтр("ru = 'Значения помечены на удаление'"); + КонецЕсли; + Иначе + ПредставлениеЗначений = ""; + Номер = 0; + Для каждого Значение Из ПервыеЗначения Цикл + Номер = Номер + 1; + Если Номер = 4 Тогда + ПредставлениеЗначений = ПредставлениеЗначений + ",..."; + Прервать; + КонецЕсли; + ПредставлениеЗначений = ПредставлениеЗначений + ?(Номер > 1, ", ", "") + Значение; + КонецЦикла; + КонецЕсли; + ПредставлениеЗначений = "<" + ПредставлениеЗначений + ">"; + Если ЗначениеЗаполнено(НоваяСтрока.ТипЗначения) Тогда + ПредставлениеЗначений = ПредставлениеЗначений + ", "; + КонецЕсли; + НоваяСтрока.ТипЗначения = ПредставлениеЗначений + НоваяСтрока.ТипЗначения; + КонецЕсли; + + Если Выборка.Свойство = ТекущееСвойство Тогда + Элементы.Свойства.ТекущаяСтрока = + Свойства[Свойства.Количество()-1].ПолучитьИдентификатор(); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьЗначенияДополнительныхРеквизитов(ВладелецЗначений) + + ДеревоЗначений = РеквизитФормыВЗначение("ЗначенияДополнительныхРеквизитов"); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ЗначенияСвойствОбъектов.Ссылка КАК Ссылка, + | ЗначенияСвойствОбъектов.Владелец КАК Владелец, + | 0 КАК КодКартинки, + | ЗначенияСвойствОбъектов.Вес, + | ЗначенияСвойствОбъектов.Наименование + |ИЗ + | Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов + |ГДЕ + | ЗначенияСвойствОбъектов.ПометкаУдаления = ЛОЖЬ + | И ЗначенияСвойствОбъектов.Владелец = &Владелец + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ЗначенияСвойствОбъектовИерархия.Ссылка, + | ЗначенияСвойствОбъектовИерархия.Владелец, + | 0, + | ЗначенияСвойствОбъектовИерархия.Вес, + | ЗначенияСвойствОбъектовИерархия.Наименование + |ИЗ + | Справочник.ЗначенияСвойствОбъектовИерархия КАК ЗначенияСвойствОбъектовИерархия + |ГДЕ + | ЗначенияСвойствОбъектовИерархия.ПометкаУдаления = ЛОЖЬ + | И ЗначенияСвойствОбъектовИерархия.Владелец = &Владелец + | + |УПОРЯДОЧИТЬ ПО + | Ссылка ИЕРАРХИЯ"; + Запрос.УстановитьПараметр("Владелец", ВладелецЗначений); + Результат = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); + + ДеревоЗначений = Результат.Скопировать(); + ЗначениеВРеквизитФормы(ДеревоЗначений, "ЗначенияДополнительныхРеквизитов"); + +КонецПроцедуры + &НаСервереБезКонтекста Функция НаименованиеУжеИспользуется(Знач Заголовок, Знач ТекущееСвойство, Знач НаборСвойств, НовоеНаименование) @@ -1892,7 +2174,7 @@ ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ТекстВопроса + Символы.ПС + Символы.ПС - + НСтр("ru ='Рекомендуется использовать другое наименование, + + НСтр("ru ='Рекомендуется использовать другое наименование, |иначе программа может работать некорректно.'"), НовоеНаименование); diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Help/ru.html b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Help/ru.html index ae42e65b8..954a024cb 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Help/ru.html +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

                • Дополнительные реквизиты являются неотъемлемой частью «объекта со свойствами». Они хранятся в табличной части объекта и доступны тем же пользователям, которым доступен и сам «объект со свойствами». Дополнительные реквизиты редактируются в окне объекта наряду с его остальными реквизитами. diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl index b19b8510e..dc5d63627 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ManagerModule.bsl @@ -19,9 +19,11 @@ КонецФункции -// Возвращает список реквизитов, которые разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт РедактируемыеРеквизиты = Новый Массив; diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl index 801d006dd..3468bdd3f 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ObjectModule.bsl @@ -8,6 +8,21 @@ КонецПроцедуры +Процедура ПередЗаписью(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + // Для общих реквизитов зависимости очищаются. + Если Не ЭтоДополнительноеСведение + И Не ЗначениеЗаполнено(НаборСвойств) + И ЗависимостиДополнительныхРеквизитов.Количество() > 0 Тогда + ЗависимостиДополнительныхРеквизитов.Очистить(); + КонецЕсли; + +КонецПроцедуры + Процедура ПриЗаписи(Отказ) Если ОбменДанными.Загрузка Тогда @@ -58,6 +73,42 @@ КонецЦикла; КонецЕсли; + // Проверка, что изменение пометки удаления произведено не из списка + // Наборы дополнительных реквизитов и сведений. + СвойстваОбъекта = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "ПометкаУдаления"); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Наборы.Ссылка КАК Ссылка + |ИЗ + | %1 КАК Свойства + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НаборыДополнительныхРеквизитовИСведений КАК Наборы + | ПО (Свойства.Ссылка = Наборы.Ссылка) + |ГДЕ + | Свойства.Свойство = &Свойство + | И Свойства.ПометкаУдаления <> &ПометкаУдаления"; + Если ЭтоДополнительноеСведение Тогда + ИмяТаблицы = "Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения"; + Иначе + ИмяТаблицы = "Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты"; + КонецЕсли; + Запрос.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Запрос.Текст, ИмяТаблицы); + Запрос.УстановитьПараметр("Свойство", Ссылка); + Запрос.УстановитьПараметр("ПометкаУдаления", СвойстваОбъекта.ПометкаУдаления); + + Результат = Запрос.Выполнить().Выгрузить(); + + Для Каждого СтрокаРезультата Из Результат Цикл + НаборСвойствОбъект = СтрокаРезультата.Ссылка.ПолучитьОбъект(); + Если ЭтоДополнительноеСведение Тогда + ЗаполнитьЗначенияСвойств(НаборСвойствОбъект.ДополнительныеСведения.Найти(Ссылка, "Свойство"), СвойстваОбъекта); + Иначе + ЗаполнитьЗначенияСвойств(НаборСвойствОбъект.ДополнительныеРеквизиты.Найти(Ссылка, "Свойство"), СвойстваОбъекта); + КонецЕсли; + + НаборСвойствОбъект.Записать(); + КонецЦикла; + // Для общих реквизитов зависимости очищаются. Если Не ЭтоДополнительноеСведение И Не ЗначениеЗаполнено(НаборСвойств) diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo index ff476f609..a33403abe 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo +++ b/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/ДополнительныеРеквизитыИСведения.mdo @@ -526,7 +526,7 @@ String - 10 + 20 @@ -554,7 +554,7 @@ 10 - 10 + 50 Date diff --git a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Help/ru.html b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Help/ru.html index 09b608251..9fd0faf7b 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Help/ru.html +++ b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

                  diff --git a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ManagerModule.bsl b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ManagerModule.bsl index 26d64eaa1..fd8d180fe 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ManagerModule.bsl +++ b/SSL/src/ChartsOfCharacteristicTypes/ОбъектыАдресацииЗадач/ManagerModule.bsl @@ -5,9 +5,11 @@ //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. -// Возвращает список реквизитов, которые не нужно редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые не рекомендуется редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/РазделыДатЗапретаИзменения.mdo b/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/РазделыДатЗапретаИзменения.mdo index 1ae240eb6..091149fe6 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/РазделыДатЗапретаИзменения.mdo +++ b/SSL/src/ChartsOfCharacteristicTypes/РазделыДатЗапретаИзменения/РазделыДатЗапретаИзменения.mdo @@ -13,7 +13,6 @@ ru Разделы дат запрета изменения - true ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения.StandardAttribute.Description DontUse diff --git a/SSL/src/CommonAttributes/ОбластьДанныхВспомогательныеДанные/ОбластьДанныхВспомогательныеДанные.mdo b/SSL/src/CommonAttributes/ОбластьДанныхВспомогательныеДанные/ОбластьДанныхВспомогательныеДанные.mdo index d263f4d2f..1b4c494ae 100644 --- a/SSL/src/CommonAttributes/ОбластьДанныхВспомогательныеДанные/ОбластьДанныхВспомогательныеДанные.mdo +++ b/SSL/src/CommonAttributes/ОбластьДанныхВспомогательныеДанные/ОбластьДанныхВспомогательныеДанные.mdo @@ -64,6 +64,10 @@ InformationRegister.УдалитьВерсииПодсистем DontUse + + Constant.ОтложенноеОбновлениеЗавершеноУспешно + Use + InformationRegister.ОчередьИзвлеченияТекста Use @@ -96,6 +100,10 @@ Constant.ЧасовойПоясОбластиДанных Use + + Constant.СведенияОБлокируемыхОбъектах + Use + Constant.ОценкаПроизводительностиПериодЗаписи DontUse diff --git a/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo b/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo index 1c7cd33fc..525be9a9e 100644 --- a/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo +++ b/SSL/src/CommonAttributes/ОбластьДанныхОсновныеДанные/ОбластьДанныхОсновныеДанные.mdo @@ -180,6 +180,18 @@ Constant.КаталогОбменаФайламиВМоделиСервиса DontUse + + ScheduledJob.СинхронизацияФайлов + DontUse + + + ScheduledJob.ОчисткаУстаревшихВерсийОбъектов + DontUse + + + Constant.ЛогинДоступаКСервисуMorpher + DontUse + InformationRegister.ПричиныИзмененияАдресныхСведений DontUse @@ -252,6 +264,10 @@ InformationRegister.УдалитьВерсииПодсистем DontUse + + Constant.ОтложенноеОбновлениеЗавершеноУспешно + DontUse + Constant.ИзвлекатьТекстыФайловНаСервере DontUse @@ -268,6 +284,10 @@ Constant.КаталогОбменаФайламиВМоделиСервисаLinux DontUse + + ScheduledJob.КонтрольАктивностиПользователей + DontUse + ScheduledJob.УдалениеНеактуальнойИнформацииСинхронизации DontUse @@ -312,6 +332,10 @@ InformationRegister.ОриентирыАдресныхОбъектов DontUse + + ScheduledJob.УдалениеУстаревшихПараметровРаботыВерсийРасширений + DontUse + Catalog.ПроизводственныеКалендари DontUse @@ -396,6 +420,10 @@ Constant.КонечнаяТочкаМенеджераСервиса DontUse + + Constant.СведенияОБлокируемыхОбъектах + DontUse + Catalog.ПредопределенныеВариантыОтчетов DontUse @@ -528,6 +556,10 @@ ScheduledJob.ПроверкаКонтрагентов DontUse + + Constant.ИспользоватьСервисСклоненияMorpher + DontUse + Constant.СведенияОбОбновленииИБ DontUse diff --git a/SSL/src/CommonCommands/Запустить1СБухфон/Запустить1СБухфон.mdo b/SSL/src/CommonCommands/Запустить1СБухфон/Запустить1СБухфон.mdo index d7c2d899f..c13c92438 100644 --- a/SSL/src/CommonCommands/Запустить1СБухфон/Запустить1СБухфон.mdo +++ b/SSL/src/CommonCommands/Запустить1СБухфон/Запустить1СБухфон.mdo @@ -1,17 +1,14 @@ - + Запустить1СБухфон ru - Запустить 1С-Бухфон + Связаться со специалистом онлайн-поддержки FormCommandBarImportant - Picture + Auto ru - Мгновенное соединение со специалистом поддержки + Мгновенное соединение со специалистом онлайн-поддержки - - CommonPicture.Запустить1СБухфонТакси - diff --git a/SSL/src/CommonCommands/Настройка1СБухфон/Настройка1СБухфон.mdo b/SSL/src/CommonCommands/Настройка1СБухфон/Настройка1СБухфон.mdo index 97e46834b..3a378e4fb 100644 --- a/SSL/src/CommonCommands/Настройка1СБухфон/Настройка1СБухфон.mdo +++ b/SSL/src/CommonCommands/Настройка1СБухфон/Настройка1СБухфон.mdo @@ -3,7 +3,7 @@ Настройка1СБухфон ru - Настройка 1С-Бухфон + Настройка онлайн-поддержки FormCommandBarImportant Auto diff --git a/SSL/src/CommonCommands/СозданиеНачальногоОбразаСФайлами/СозданиеНачальногоОбразаСФайлами.mdo b/SSL/src/CommonCommands/СозданиеНачальногоОбразаСФайлами/СозданиеНачальногоОбразаСФайлами.mdo index f97d015ff..48459b918 100644 --- a/SSL/src/CommonCommands/СозданиеНачальногоОбразаСФайлами/СозданиеНачальногоОбразаСФайлами.mdo +++ b/SSL/src/CommonCommands/СозданиеНачальногоОбразаСФайлами/СозданиеНачальногоОбразаСФайлами.mdo @@ -6,7 +6,7 @@ Создание начального образа с файлами FormCommandBarImportant - Picture + PictureAndText StdPicture.CreateInitialImage diff --git a/SSL/src/CommonCommands/СтруктураПодчиненности/СтруктураПодчиненности.mdo b/SSL/src/CommonCommands/СтруктураПодчиненности/СтруктураПодчиненности.mdo index d3c4b6aac..a0141a7e6 100644 --- a/SSL/src/CommonCommands/СтруктураПодчиненности/СтруктураПодчиненности.mdo +++ b/SSL/src/CommonCommands/СтруктураПодчиненности/СтруктураПодчиненности.mdo @@ -3,7 +3,7 @@ СтруктураПодчиненности ru - Структура подчиненности + Связанные документы FormNavigationPanelGoTo Auto diff --git a/SSL/src/CommonForms/АвторизацияНаСайтеПоддержкиПользователей/Help/ru.html b/SSL/src/CommonForms/АвторизацияНаСайтеПоддержкиПользователей/Help/ru.html index ec179c1d7..c03ad68df 100644 --- a/SSL/src/CommonForms/АвторизацияНаСайтеПоддержкиПользователей/Help/ru.html +++ b/SSL/src/CommonForms/АвторизацияНаСайтеПоддержкиПользователей/Help/ru.html @@ -1,4 +1,4 @@ - +

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

                  • Введите Логин;
                  • Введите Пароль. diff --git a/SSL/src/CommonForms/АвторизацияНаСайтеПоддержкиПользователей/Module.bsl b/SSL/src/CommonForms/АвторизацияНаСайтеПоддержкиПользователей/Module.bsl index 233ac2bee..2f3376668 100644 --- a/SSL/src/CommonForms/АвторизацияНаСайтеПоддержкиПользователей/Module.bsl +++ b/SSL/src/CommonForms/АвторизацияНаСайтеПоддержкиПользователей/Module.bsl @@ -90,9 +90,7 @@ КонецЕсли; Если ЗапомнитьПароль Тогда - Если ПараметрыАутентификацииКорректные(Аутентификация, ОписаниеОшибки) Тогда - СтандартныеПодсистемыСервер.СохранитьПараметрыАутентификацииНаСайте(Аутентификация); - КонецЕсли; + СтандартныеПодсистемыСервер.СохранитьПараметрыАутентификацииНаСайте(Аутентификация); Иначе АутентификацияДляСохранения = Новый Структура("Логин, Пароль", Аутентификация.Логин, Неопределено); СтандартныеПодсистемыСервер.СохранитьПараметрыАутентификацииНаСайте(АутентификацияДляСохранения); @@ -100,51 +98,4 @@ КонецПроцедуры -&НаСервереБезКонтекста -Функция ПараметрыАутентификацииКорректные(ПараметрыАутентификацииНаСайте, ОписаниеОшибки = "") - - Если ПараметрыАутентификацииНаСайте = Неопределено Тогда - Возврат Истина; - КонецЕсли; - - Билет = ""; - Попытка - ВебСервис = ОбщегоНазначения.WSПрокси( - "https://login.1c.ru/api/public/ticket?wsdl", - "http://api.cas.jasig.org/", - "TicketApiImplService", - "TicketApiImplPort", - ПараметрыАутентификацииНаСайте.Логин, - ПараметрыАутентификацииНаСайте.Пароль, - 5, - Ложь); - - Билет = ВебСервис.getTicket( - ПараметрыАутентификацииНаСайте.Логин, - ПараметрыАутентификацииНаСайте.Пароль, - "its.1c.ru"); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - Если СтрНайти(КраткоеПредставлениеОшибки, "IncorrectLoginOrPasswordApiException") > 0 Тогда - ОписаниеОшибки = НСтр("ru = 'Не удалось подключиться к веб-сервису сайта «1С» по причине: - |• Некорректное имя пользователя или пароль.'"); - Иначе - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось подключиться к веб-сервису сайта «1С». Возможные причины: - |• Некорректно введен или не введен логин и пароль; - |• Нет подключения к Интернету; - |• На веб-узле возникли неполадки; - |• Брандмауэр или другое промежуточное ПО (антивирусы и т.п.) блокируют попытки программы подключиться к Интернету; - |• Подключение к Интернету выполняется через прокси-сервер, но его параметры не заданы в программе. - | Техническая информация: %1'"), - КраткоеПредставлениеОшибки); - КонецЕсли; - КонецПопытки; - - Возврат ЗначениеЗаполнено(Билет); - -КонецФункции - - #КонецОбласти diff --git a/SSL/src/CommonForms/АдреснаяКнига/Form.form b/SSL/src/CommonForms/АдреснаяКнига/Form.form index 7e703562f..3fc995234 100644 --- a/SSL/src/CommonForms/АдреснаяКнига/Form.form +++ b/SSL/src/CommonForms/АдреснаяКнига/Form.form @@ -434,6 +434,7 @@ Vertical auto + false @@ -762,6 +763,7 @@ Vertical auto + false @@ -1185,6 +1187,7 @@ Vertical auto + false true @@ -1432,6 +1435,7 @@ Vertical auto + false @@ -1694,6 +1698,7 @@ Vertical auto + false true diff --git a/SSL/src/CommonForms/АдреснаяКнига/Help/ru.html b/SSL/src/CommonForms/АдреснаяКнига/Help/ru.html index 3858b3a27..c29bb7892 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 b68de59f9..eb4191e99 100644 --- a/SSL/src/CommonForms/АутентификацияВСервисе/Form.form +++ b/SSL/src/CommonForms/АутентификацияВСервисе/Form.form @@ -83,7 +83,7 @@ ГруппаКнопки 6 - ДекорацияЗаполнятельМеста + Декорация 7 true true @@ -91,7 +91,7 @@ true - ДекорацияЗаполнятельМестаExtendedTooltip + ДекорацияРасширеннаяПодсказка 13 Label true @@ -101,7 +101,7 @@ - ДекорацияЗаполнятельМестаКонтекстноеМеню + ДекорацияКонтекстноеМеню 8 true diff --git a/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Form.form b/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Form.form new file mode 100644 index 000000000..eb09585ef --- /dev/null +++ b/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Form.form @@ -0,0 +1,327 @@ + + + + <key>ru</key> + <value>Информационная база была перемещена или восстановлена из резервной копии</value> + + + НадписьПредупреждение + 1 + + <key>ru</key> + <value>Размещение информационной базы изменилось с +%1 +на +%2 + +<link ЖурналРегистрации>Техническая</><link ЖурналРегистрации> информация о причине блокировки</> + +* Если информационная база была перемещена, нажмите <b>Информационная база перемещена</>. +* Если это копия информационной базы, нажмите <b>Это копия информационной базы</><b>.</> + При этом работа со всеми внешними ресурсами (синхронизация данных, отправка почты и т.п.), выполняемая по расписанию, + будет заблокирована для предотвращения конфликтов с основой информационной базой. + +Блокировку также можно снять позднее в разделе <b>Администрирование</><b> - </><b>Поддержка и обслуживание</>.</value> + + true + true + + true + + + НадписьПредупреждениеРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + НадписьПредупреждениеКонтекстноеМеню + 2 + true + + true + Label + true + true + + + URLProcessing + НадписьПредупреждениеОбработкаНавигационнойСсылки + + Left + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ИнформационнаяБазаПеремещена + 6 + true + true + + true + + + ИнформационнаяБазаПеремещенаРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + Form.Command.ИнформационнаяБазаПеремещена + Normal + Auto + true + true + UserCmds + Auto + + + ЭтоКопияИнформационнойБазы + 8 + true + true + + true + + + ЭтоКопияИнформационнойБазыРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + Form.Command.ЭтоКопияИнформационнойБазы + Normal + Auto + true + true + UserCmds + Auto + + + ФормаГруппаЕще + 12 + + ФормаПроверятьИмяСервера + 14 + true + true + + true + + + ФормаПроверятьИмяСервераРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + Form.Command.ПроверятьИмяСервера + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ФормаСправкаВГруппе + 16 + true + true + + true + + + ФормаСправкаВГруппеРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Еще</value> + + + ru + Форма группа еще + + + ФормаГруппаЕщеРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + + ФормаСправка + 18 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + Center + + + OnCreateAtServer + ПриСозданииНаСервере + + LockWholeInterface + true + true + Vertical + true + true + auto + true + + ПараметрыБлокировки + + <key>ru</key> + <value>Параметры блокировки</value> + + 1 + + + true + + + true + + + + ИнформационнаяБазаПеремещена + + <key>ru</key> + <value>Информационная база перемещена</value> + + 1 + + ru + Информационная база перемещена + + + true + + + + ИнформационнаяБазаПеремещена + + + DontUse + Auto + + + ЭтоКопияИнформационнойБазы + + <key>ru</key> + <value>Это копия информационной базы</value> + + 2 + + ru + Это копия информационной базы + + + true + + + + ЭтоКопияИнформационнойБазы + + + DontUse + Auto + + + ПроверятьИмяСервера + + <key>ru</key> + <value>Проверять имя сервера</value> + + 3 + + ru + Проверять имя сервера + + + true + + + + ПроверятьИмяСервера + + + DontUse + Auto + + + + + + diff --git a/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Help/ru.html b/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Help/ru.html new file mode 100644 index 000000000..69714f607 --- /dev/null +++ b/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Help/ru.html @@ -0,0 +1,17 @@ + +

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

                    +

                    Как определяется факт перемещения информационной базы

                    +

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

                    +
                  • +
                    В файловой информационной базе факт перемещения определяется по служебному файлу DoNotCopy.txt, автоматически создаваемому программой в каталоге информационной базы. Внутри файла находится идентификатор информационной базы. Если файл отсутствует или идентификатор в файле отличается от идентификатора в базе, то информационна база считается перемещенной.
                    +
                  • +
                    В клиент-серверной информационной базе факт перемещения определяется:
                    +
                    • +
                      По изменению имени информационной базы. Например, если имя информационной базы было "base_bp", а стало "base_bp_test".
                      +
                    • +
                      Или по изменению имени компьютера и имени сервера. Например, если имя компьютера было "main_server", а стало "test_server", а так же изменилось имя сервера с "main" на "test".

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

                    +

                    Ложные срабатывания при проверке перемещения базы

                    +

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

                    +

                    См. также:

                    +
                  • \ 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..9f3af9de3 --- /dev/null +++ b/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/Module.bsl @@ -0,0 +1,186 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + СтрокаСоединения = СтрокаСоединенияИнформационнойБазы(); + СохраненныеПараметры = Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Получить().Получить(); + ПараметрыБлокировки = РегламентныеЗаданияСлужебный.ПараметрыБлокировкиРаботыСВнешнимиРесурсами(); + ЗаполнитьЗначенияСвойств(ПараметрыБлокировки, СохраненныеПараметры); + ТекстСнятияБлокировки = РегламентныеЗаданияСлужебный.ЗначениеНастройки("РасположениеКомандыСнятияБлокировки"); + РазделениеВключено = ОбщегоНазначенияПовтИсп.РазделениеВключено(); + ИзменилосьРазделение = ПараметрыБлокировки.РазделениеВключено <> РазделениеВключено; + + Если Не РазделениеВключено И Не ИзменилосьРазделение Тогда + СохраненнаяСтрокаСоединения = ПараметрыБлокировки.СтрокаСоединения; + ПараметрыСохраненнойСтрокиСоединения = СтроковыеФункцииКлиентСервер.ПолучитьПараметрыИзСтроки(СохраненнаяСтрокаСоединения); + Если ПараметрыСохраненнойСтрокиСоединения.Свойство("File") Тогда + СохраненнаяСтрокаСоединения = ПараметрыСохраненнойСтрокиСоединения.File; + КонецЕсли; + ТекущаяСтрокаСоединения = СтрокаСоединения; + ПараметрыТекущейСтрокиСоединения = СтроковыеФункцииКлиентСервер.ПолучитьПараметрыИзСтроки(ТекущаяСтрокаСоединения); + Если ПараметрыТекущейСтрокиСоединения.Свойство("File") Тогда + ТекущаяСтрокаСоединения = ПараметрыТекущейСтрокиСоединения.File; + КонецЕсли; + ЗаголовокНадписи = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Размещение информационной базы изменилось с + |%1 + |на + |%2 + | + |Техническая информация о причине блокировки + | + |* Если информационная база будет использоваться для ведения учета, нажмите Информационная база перемещена. + |* При выборе варианта Это копия информационной базы работа со всеми внешними ресурсами + | (синхронизация данных, отправка почты и т.п.), выполняемая по расписанию, + | будет заблокирована для предотвращения конфликтов с основой информационной базой. + | + |%3'"), СохраненнаяСтрокаСоединения, ТекущаяСтрокаСоединения, ТекстСнятияБлокировки); + ИначеЕсли Не РазделениеВключено И ИзменилосьРазделение Тогда + ЗаголовокНадписи = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Информационная база была загружена из приложения в Интернете + | + |* Если информационная база будет использоваться для ведения учета, нажмите Информационная база перемещена. + |* При выборе варианта Это копия информационной базы работа со всеми внешними ресурсами + | (синхронизация данных, отправка почты и т.п.), выполняемая по расписанию, + | будет заблокирована для предотвращения конфликтов с приложением в Интернете. + | + |%1'"), ТекстСнятияБлокировки); + ИначеЕсли РазделениеВключено И Не ИзменилосьРазделение Тогда + ЗаголовокНадписи = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр(" ru = 'Приложение было перемещено + | + |* Если приложение будет использоваться для ведения учета, нажмите Приложение перемещено. + |* При выборе варианта Это копия приложения работа со всеми внешними ресурсами + | (синхронизация данных, отправка почты и т.п.), выполняемая по расписанию, + | будет заблокирована для предотвращения конфликтов с приложением в Интернете. + | + |%1'"), ТекстСнятияБлокировки); + Элементы.ИнформационнаяБазаПеремещена.Заголовок = НСтр("ru = 'Приложение перемещено'"); + Элементы.ЭтоКопияИнформационнойБазы.Заголовок = НСтр("ru = 'Это копия приложения'"); + Заголовок = НСтр("ru = 'Приложение было перемещено или восстановлено из резервной копии'"); + Иначе // Если РазделениеВключено И ИзменилосьРазделение + ЗаголовокНадписи = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр(" ru = 'Приложение было загружено из локальной версии + | + |* Если приложение будет использоваться для ведения учета, нажмите Приложение перемещено. + |* При выборе варианта Это копия приложения работа со всеми внешними ресурсами + | (синхронизация данных, отправка почты и т.п.), выполняемая по расписанию, + | будет заблокирована для предотвращения конфликтов с локальной версией. + | + |%1'"), ТекстСнятияБлокировки); + Элементы.ИнформационнаяБазаПеремещена.Заголовок = НСтр("ru = 'Приложение перемещено'"); + Элементы.ЭтоКопияИнформационнойБазы.Заголовок = НСтр("ru = 'Это копия приложения'"); + Заголовок = НСтр("ru = 'Приложение было перемещено или восстановлено из резервной копии'"); + КонецЕсли; + + Элементы.НадписьПредупреждение.Заголовок = СтроковыеФункцииКлиентСервер.ФорматированнаяСтрока(ЗаголовокНадписи); + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая(СтрокаСоединения) Тогда + Элементы.ФормаГруппаЕще.Видимость = Ложь; + Иначе + Элементы.ФормаПроверятьИмяСервера.Пометка = ПараметрыБлокировки.ПроверятьИмяСервера; + Элементы.ФормаСправка.Видимость = Ложь; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура НадписьПредупреждениеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("СобытиеЖурналаРегистрации", + НСтр("ru = 'Работа с внешними ресурсами заблокирована'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", ПараметрыФормы); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ИнформационнаяБазаПеремещена(Команда) + ИнформационнаяБазаПеремещенаНаСервере(); + Закрыть(); +КонецПроцедуры + +&НаКлиенте +Процедура ЭтоКопияИнформационнойБазы(Команда) + ЭтоКопияИнформационнойБазыНаСервере(); + Закрыть(); +КонецПроцедуры + +&НаКлиенте +Процедура ПроверятьИмяСервера(Команда) + ПараметрыБлокировки.ПроверятьИмяСервера = Не ПараметрыБлокировки.ПроверятьИмяСервера; + Элементы.ФормаПроверятьИмяСервера.Пометка = ПараметрыБлокировки.ПроверятьИмяСервера; +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура ИнформационнаяБазаПеремещенаНаСервере() + + РегламентныеЗаданияСлужебный.РазрешитьРаботуСВнешнимиРесурсами(ПараметрыБлокировки); + +КонецПроцедуры + +&НаСервере +Процедура ЭтоКопияИнформационнойБазыНаСервере() + + ЗависимостиЗаданий = РегламентныеЗаданияСлужебный.РегламентныеЗаданияЗависимыеОтФункциональныхОпций(); + НайденныеСтроки = ЗависимостиЗаданий.НайтиСтроки(Новый Структура("РаботаетСВнешнимиРесурсами", Истина)); + ОбработанныеЗадания = Новый Соответствие; + Для Каждого СтрокаЗадания Из НайденныеСтроки Цикл + Если ОбработанныеЗадания.Получить(СтрокаЗадания.РегламентноеЗадание) <> Неопределено Тогда + Продолжить; // Задание уже было отключено. + КонецЕсли; + ОбработанныеЗадания.Вставить(СтрокаЗадания.РегламентноеЗадание); + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("ОбластьДанных", ОбщегоНазначения.ЗначениеРазделителяСеанса()); + ПараметрыЗадания.Вставить("ИмяМетода", СтрокаЗадания.РегламентноеЗадание.ИмяМетода); + ПараметрыЗадания.Вставить("Использование", Истина); + МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); + СписокЗаданий = МодульОчередьЗаданий.ПолучитьЗадания(ПараметрыЗадания); + + ПараметрыЗадания = Новый Структура("Использование", Ложь); + Для Каждого Задание Из СписокЗаданий Цикл + МодульОчередьЗаданий.ИзменитьЗадание(Задание.Идентификатор, ПараметрыЗадания); + ПараметрыБлокировки.ОтключенныеЗадания.Добавить(Задание.Идентификатор); + КонецЦикла; + КонецЕсли; + Иначе + Отбор = Новый Структура; + Отбор.Вставить("Метаданные", СтрокаЗадания.РегламентноеЗадание); + Отбор.Вставить("Использование", Истина); + МассивЗаданий = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Отбор); + Для Каждого Задание Из МассивЗаданий Цикл + Задание.Использование = Ложь; + Задание.Записать(); + ПараметрыБлокировки.ОтключенныеЗадания.Добавить(Задание.УникальныйИдентификатор); + КонецЦикла; + КонецЕсли; + КонецЦикла; + ПараметрыБлокировки.РаботаСВнешнимиРесурсамиЗаблокирована = Истина; + ХранилищеЗначения = Новый ХранилищеЗначения(ПараметрыБлокировки); + Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Установить(ХранилищеЗначения); + + // Если это копия информационной базы, то необходимо обновить идентификатор. + ИдентификаторИнформационнойБазы = Новый УникальныйИдентификатор(); + Константы.ИдентификаторИнформационнойБазы.Установить(Строка(ИдентификаторИнформационнойБазы)); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/БлокировкаРаботыСВнешнимиРесурсами.mdo b/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/БлокировкаРаботыСВнешнимиРесурсами.mdo new file mode 100644 index 000000000..15a984867 --- /dev/null +++ b/SSL/src/CommonForms/БлокировкаРаботыСВнешнимиРесурсами/БлокировкаРаботыСВнешнимиРесурсами.mdo @@ -0,0 +1,15 @@ + + + БлокировкаРаботыСВнешнимиРесурсами + + ru + Блокировка работы с внешними ресурсами + + + + ru + + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Form.form b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Form.form index 3b89061d0..63cb33324 100644 --- a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Form.form +++ b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Form.form @@ -637,19 +637,23 @@ true - НижняяКоманднаяПанель - 24 - - КомандаОК - 26 - true + Подвал + 106 + + Декорация1 + 110 + + <key>ru</key> + <value>Список может быть не полным. +Для добавления элементов нажмите "Подбор".</value> + true true - КомандаОКРасширеннаяПодсказка - 27 + Декорация1РасширеннаяПодсказка + 112 Label true true @@ -657,25 +661,40 @@ Left - Form.Command.ЗавершитьРедактирование - Auto - true + + Декорация1КонтекстноеМеню + 111 + true + + Label true + 1 true - UserCmds - Auto + + Style.ПоясняющийТекст + + + Style.TextFont + + + Left + - ФормаОтмена - 28 + СписокПодборПодвал + 108 + + <key>ru</key> + <value>Подобрать еще</value> + true true true - ФормаОтменаРасширеннаяПодсказка - 29 + СписокПодборПодвалРасширеннаяПодсказка + 109 Label true true @@ -683,7 +702,8 @@ Left - Form.StandardCommand.Cancel + Hyperlink + Form.Item.Список.StandardCommand.Pickup Normal Auto true @@ -691,6 +711,119 @@ UserCmds Auto + + ЗаглушкаЧтобыПраваяКоманднаяПанельНеУезжалаВниз + 113 + true + true + + true + + + ЗаглушкаЧтобыПраваяКоманднаяПанельНеУезжалаВнизРасширеннаяПодсказка + 115 + Label + true + true + + Left + + + + ЗаглушкаЧтобыПраваяКоманднаяПанельНеУезжалаВнизКонтекстноеМеню + 114 + true + + Label + true + true + + Left + + + + НижняяКоманднаяПанель + 24 + + КомандаОК + 26 + true + true + + true + + + КомандаОКРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + Form.Command.ЗавершитьРедактирование + Auto + true + true + true + UserCmds + Auto + + + ФормаОтмена + 28 + true + true + + true + + + ФормаОтменаРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Нижняя командная панель</value> + + + ru + Нижняя командная панель + + + НижняяКоманднаяПанельРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + CommandBar + + Right + + true true @@ -698,15 +831,15 @@ <key>ru</key> - <value>Нижняя командная панель</value> + <value>Подвал</value> ru - Нижняя командная панель + Подвал - НижняяКоманднаяПанельРасширеннаяПодсказка - 25 + ПодвалРасширеннаяПодсказка + 107 Label true true @@ -714,9 +847,13 @@ Left - CommandBar - - Right + UsualGroup + + Auto + true + true + Auto + Auto @@ -1242,7 +1379,7 @@ true - CommonPicture.ЗаполнитьФорму + CommonPicture.ВставитьИзБуфераОбмена diff --git a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Help/ru.html b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Help/ru.html index c393037bf..6bb471096 100644 --- a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Help/ru.html +++ b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

                    Подбор значений

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

                  Подбор значений из буфера обмена

                  -
                  • Нажмите кнопку , выберите значения, нажмите кнопку Вставить в список.

                  См. также:

                  +
                  • Нажмите кнопку , выберите значения, нажмите кнопку Вставить в список.

                  См. также:

                  \ No newline at end of file diff --git a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Module.bsl b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Module.bsl index 3ae6c66e2..6562843a5 100644 --- a/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Module.bsl +++ b/SSL/src/CommonForms/ВводЗначенийСпискомСФлажками/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ПеременныеКлиента; +#КонецОбласти + //////////////////////////////////////////////////////////////////////////////// // СОБЫТИЯ ФОРМЫ @@ -14,6 +18,13 @@ Параметры.Свойство("ОграничиватьВыборУказаннымиЗначениями", ОграничиватьВыборУказаннымиЗначениями); ИнформацияОТипах = ОтчетыКлиентСервер.АнализТипов(Параметры.ОписаниеТипов, Истина); + ИнформацияОТипах.Вставить("СодержитСсылочныеТипы", Ложь); + Для Каждого Тип Из ИнформацияОТипах.ОбъектныеТипы Цикл + Если Метаданные.НайтиПоТипу(Тип) <> Неопределено Тогда + ИнформацияОТипах.СодержитСсылочныеТипы = Истина; + Прервать; + КонецЕсли; + КонецЦикла; ЗначенияДляВыбора = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ЗначенияДляВыбора"); Отмеченные = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "Отмеченные"); @@ -25,8 +36,9 @@ Если ИнформацияОТипах.КоличествоТипов = 0 Тогда ОграничиватьВыборУказаннымиЗначениями = Истина; ИначеЕсли Не ИнформацияОТипах.СодержитОбъектныеТипы Тогда - Элементы.СписокПодбор.Видимость = Ложь; - Элементы.СписокПодборМеню.Видимость = Ложь; + Элементы.СписокПодбор.Видимость = Ложь; + Элементы.СписокПодборМеню.Видимость = Ложь; + Элементы.СписокПодборПодвал.Видимость = Ложь; Элементы.СписокДобавить.ТолькоВоВсехДействиях = Ложь; КонецЕсли; @@ -37,7 +49,11 @@ КонецЕсли; Если ТипЗнч(Отмеченные) = Тип("СписокЗначений") Тогда Отмеченные.ЗаполнитьПометки(Истина); - ОтчетыКлиентСервер.ДополнитьСписок(Список, Отмеченные, Истина, Истина); + ОтчетыКлиентСервер.ДополнитьСписок(Список, Отмеченные, Истина, Не ОграничиватьВыборУказаннымиЗначениями); + КонецЕсли; + + Если Список.Количество() = 0 Тогда + Элементы.СписокПодборПодвал.Видимость = Ложь; КонецЕсли; Если ОграничиватьВыборУказаннымиЗначениями Тогда @@ -52,6 +68,8 @@ Элементы.СписокПеремещение.Видимость = Ложь; Элементы.СписокПеремещениеМеню.Видимость = Ложь; + + Элементы.СписокПодборПодвал.Видимость = Ложь; КонецЕсли; ПараметрыВыбора = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ПараметрыВыбора"); @@ -64,7 +82,9 @@ КлючСохраненияПоложенияОкна = Строка(Список.ТипЗначения); КонецЕсли; - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗагрузкаДанныхИзФайла") Тогда + Если ОграничиватьВыборУказаннымиЗначениями + Или Не ИнформацияОТипах.СодержитСсылочныеТипы + Или Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗагрузкаДанныхИзФайла") Тогда Элементы.СписокВставитьИзБуфераОбмена.Видимость = Ложь; КонецЕсли; КонецПроцедуры @@ -177,22 +197,19 @@ Выбранные.ЗаполнитьПометки(Истина); Дополнение = ОтчетыКлиентСервер.ДополнитьСписок(Список, Выбранные, Истина, Истина); - Если Дополнение.Всего = 0 Тогда Возврат; КонецЕсли; - Результат = Новый Структура; Если Дополнение.Всего = 1 Тогда ЗаголовокОповещения = НСтр("ru = 'Элемент добавлен в список'"); Иначе ЗаголовокОповещения = НСтр("ru = 'Элементы добавлены в список'"); КонецЕсли; - СтандартныеПодсистемыКлиентСервер.ВывестиОповещение( - Результат, + ПоказатьОповещениеПользователя( ЗаголовокОповещения, + , Строка(Выбранные), БиблиотекаКартинок.ВыполнитьЗадачу); - СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonForms/ВключениеПроверкиКонтрагентов/Form.form b/SSL/src/CommonForms/ВключениеПроверкиКонтрагентов/Form.form index e22109332..5d3aa4f45 100644 --- a/SSL/src/CommonForms/ВключениеПроверкиКонтрагентов/Form.form +++ b/SSL/src/CommonForms/ВключениеПроверкиКонтрагентов/Form.form @@ -5,62 +5,14 @@ Проверка контрагентов - ИнформацияОСервисеПроверкиДанных - 4 - - ИнформацияОНеобходимостиОбратитьсяКАдминистратору - 32 - - <key>ru</key> - <value>Для включения проверки обратитесь к администратору</value> - - true - true - - true - - - ИнформацияОНеобходимостиОбратитьсяКАдминистраторуРасширеннаяПодсказка - 34 - Label - true - true - - Left - - - - ИнформацияОНеобходимостиОбратитьсяКАдминистраторуКонтекстноеМеню - 33 - true - - Label - true - true - - 37 - 179 - 113 - - - System.DefaultGUIFont - 10.0 - true - false - false - false - - - Left - - + ИнформацияОНеобходимостиОбратитьсяКАдминистратору + 72 ИнформацияОСервисе - 1 + 89 <key>ru</key> - <value>В программе появилась возможность использовать веб-сервис ФНС для проверки регистрации контрагентов в ЕГРН (требуется доступ в Интернет). -<link e1cib/app/Обработка.ИнструкцияПоИспользованиюПроверкиКонтрагента>Подробнее о проверке</></value> + <value>В программе имеется возможность использовать веб-сервис ФНС для автоматической проверки регистрации контрагентов в ЕГРН (требуется доступ в Интернет).</value> true true @@ -69,7 +21,7 @@ ИнформацияОСервисеРасширеннаяПодсказка - 3 + 91 Label true true @@ -79,23 +31,170 @@ ИнформацияОСервисеКонтекстноеМеню - 2 + 90 true true Label true - 3 + 2 true - true - true Left + + РежимыМедленнойРаботы + 104 + + НедостаточноПамяти + 106 + + ТекстПроМедленноеОткрытие + 101 + + <key>ru</key> + <value>Включение автоматической проверки может замедлить открытие документов. +Рекомендуется увеличить количество памяти до 4 Гб или использовать ручную проверку по кнопке в подменю Еще. +<link e1cib/app/Обработка.ИнструкцияПоИспользованиюПроверкиКонтрагента>Подробнее о проверке</></value> + + true + true + + true + + + ТекстПроМедленноеОткрытиеРасширеннаяПодсказка + 103 + Label + true + true + + Left + + + + ТекстПроМедленноеОткрытиеКонтекстноеМеню + 102 + true + + true + Label + true + 4 + true + + Left + + + true + true + + true + + + НедостаточноПамятиРасширеннаяПодсказка + 107 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + МедленноеСоединение + 108 + + ТекстПроМедленноеСоединение + 110 + + <key>ru</key> + <value>Включение автоматической проверки может замедлить открытие документов. +Рекомендуется увеличить скорость интернета или использовать ручную проверку по кнопке в подменю Еще. +<link e1cib/app/Обработка.ИнструкцияПоИспользованиюПроверкиКонтрагента>Подробн</><link e1cib/app/Обработка.ИнструкцияПоИспользованиюПроверкиКонтрагента>ее о проверке</></value> + + true + true + + true + + + ТекстПроМедленноеСоединениеРасширеннаяПодсказка + 112 + Label + true + true + + Left + + + + ТекстПроМедленноеСоединениеКонтекстноеМеню + 111 + true + + true + Label + true + 3 + true + + Left + + + true + true + + true + + + МедленноеСоединениеРасширеннаяПодсказка + 109 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + РежимыМедленнойРаботыРасширеннаяПодсказка + 105 + Label + true + true + + Left + + + Pages + + Auto + + - ПредупреждениеПроТестовыйРежимПроверкиКонтрагента - 37 + ТестовыйРежим + 92 <key>ru</key> <value><Предупреждение про тестовый режим работы сервиса></value> @@ -106,8 +205,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ПредупреждениеПроТестовыйРежимПроверкиКонтрагентаРасширеннаяПодсказка</name> - <id>39</id> + <name>ТестовыйРежимРасширеннаяПодсказка</name> + <id>94</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -116,13 +215,12 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ПредупреждениеПроТестовыйРежимПроверкиКонтрагентаКонтекстноеМеню</name> - <id>38</id> + <name>ТестовыйРежимКонтекстноеМеню</name> + <id>93</id> <autoFill>true</autoFill> </contextMenu> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> - <height>1</height> <autoMaxHeight>true</autoMaxHeight> <horizontalStretch>true</horizontalStretch> <extInfo xsi:type="form:LabelDecorationExtInfo"> @@ -137,9 +235,17 @@ <userVisible> <common>true</common> </userVisible> + <title> + <key>ru</key> + <value>Для включения автоматической проверки обратитесь к администратору</value> + + + ru + Информация о необходимости обратиться к администратору + - ИнформацияОСервисеПроверкиДанныхРасширеннаяПодсказка - 5 + ИнформацияОНеобходимостиОбратитьсяКАдминистраторуРасширеннаяПодсказка + 73 Label true true @@ -151,8 +257,10 @@ Vertical Auto + NormalSeparation true true + auto Auto Auto @@ -186,6 +294,32 @@ UserCmds Auto + + РучнаяПроверка + 67 + true + true + + true + + + РучнаяПроверкаРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + Form.Command.РучнаяПроверка + Normal + Auto + true + true + UserCmds + Auto + НапомнитьПозже 53 @@ -217,7 +351,7 @@ БольшеНеПоказывать - 67 + 113 true true @@ -225,7 +359,7 @@ БольшеНеПоказыватьРасширеннаяПодсказка - 68 + 114 Label true true @@ -282,7 +416,7 @@ OnClose ПриЗакрытии - 53 + 70 LockOwner true true @@ -313,12 +447,12 @@ ВключитьСервисСейчас <key>ru</key> - <value>Включить проверку</value> + <value>Автоматическая проверка</value> 1 ru - Включить проверку + Включить автоматическую проверку true @@ -332,22 +466,22 @@ Auto - БольшеНеПоказывать + РучнаяПроверка <key>ru</key> - <value>Больше не показывать</value> + <value>Ручная проверка</value> 3 ru - Больше не показывать + Ручная проверка true - БольшеНеПоказывать + РучнаяПроверка DontUse @@ -375,6 +509,28 @@ DontUse Auto + + БольшеНеПоказывать + + <key>ru</key> + <value>Больше не показывать</value> + + 4 + + ru + Больше не показывать + + + true + + + + БольшеНеПоказывать + + + DontUse + Auto + diff --git a/SSL/src/CommonForms/ВключениеПроверкиКонтрагентов/Module.bsl b/SSL/src/CommonForms/ВключениеПроверкиКонтрагентов/Module.bsl index 9bc4b9b0d..26b742c97 100644 --- a/SSL/src/CommonForms/ВключениеПроверкиКонтрагентов/Module.bsl +++ b/SSL/src/CommonForms/ВключениеПроверкиКонтрагентов/Module.bsl @@ -37,6 +37,14 @@ КонецПроцедуры +&НаКлиенте +Процедура РучнаяПроверка(Команда) + + ПроверкаКонтрагентовВызовСервера.ЗапомнитьЧтоБольшеНеНужноПоказыватьПредложениеИспользоватьСервис(); + Закрыть(); + +КонецПроцедуры + &НаКлиенте Процедура БольшеНеПоказывать(Команда) @@ -52,15 +60,55 @@ &НаСервере Процедура УправлениеЭУ() + ЭтоМедленныйРежимРаботы = ПроверкаКонтрагентов.ЭтоМедленныйРежимРаботы(); + // В зависимости от наличия административных прав будут доступны разные элементы управления. - Элементы.ИнформацияОНеобходимостиОбратитьсяКАдминистратору.Видимость = НЕ ЕстьПравоНаРедактированиеНастроекСервиса; - Элементы.ВключитьСервисСейчас.Видимость = ЕстьПравоНаРедактированиеНастроекСервиса; - ПроверкаКонтрагентов.УстановитьВидимостьИЗаголовокПредупрежденияПроТестовыйРежим(Элементы.ПредупреждениеПроТестовыйРежимПроверкиКонтрагента); + Элементы.ИнформацияОНеобходимостиОбратитьсяКАдминистратору.ОтображатьЗаголовок = + НЕ ЕстьПравоНаРедактированиеНастроекСервиса; + + СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект); - // Кнопка по умолчанию - Элементы.ВключитьСервисСейчас.КнопкаПоУмолчанию = ЕстьПравоНаРедактированиеНастроекСервиса; - Элементы.НапомнитьПозже.КнопкаПоУмолчанию = НЕ ЕстьПравоНаРедактированиеНастроекСервиса; + // Управление кнопками. Видимость. + Элементы.ВключитьСервисСейчас.Видимость = ЕстьПравоНаРедактированиеНастроекСервиса; + Элементы.РучнаяПроверка.Видимость = ЕстьПравоНаРедактированиеНастроекСервиса; + Элементы.БольшеНеПоказывать.Видимость = НЕ ЕстьПравоНаРедактированиеНастроекСервиса; + // Управление кнопками. Кнопка по умолчанию. + Если ЕстьПравоНаРедактированиеНастроекСервиса Тогда + Если ЭтоМедленныйРежимРаботы Тогда + Элементы.РучнаяПроверка.КнопкаПоУмолчанию = Истина; + Иначе + Элементы.ВключитьСервисСейчас.КнопкаПоУмолчанию = Истина; + КонецЕсли; + Иначе + Элементы.НапомнитьПозже.КнопкаПоУмолчанию = Истина; + КонецЕсли; + + // Настройка в зависимости от медленности компьютера. + Элементы.РежимыМедленнойРаботы.Видимость = ЭтоМедленныйРежимРаботы; + Если ЭтоМедленныйРежимРаботы Тогда + УправлениеНадписьюДляМедленногоРежима(); + Иначе + ПрисоединитьСсылкуНаИнструкцию(Элементы.ИнформацияОСервисе); + КонецЕсли; + + // Сообщаем про тестовый режим. + ПроверкаКонтрагентов.УстановитьВидимостьИЗаголовокПредупрежденияПроТестовыйРежим(Элементы.ТестовыйРежим); + +КонецПроцедуры + +&НаСервере +Процедура УправлениеНадписьюДляМедленногоРежима() + + СтрокаСоединенияИБ = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("СтрокаСоединенияИнформационнойБазы"); + ИБФайловая = СтрНайти(ВРег(СтрокаСоединенияИБ), "FILE=") = 1; + + Если ИБФайловая Тогда + Элементы.РежимыМедленнойРаботы.ТекущаяСтраница = Элементы.НедостаточноПамяти; + Иначе + Элементы.РежимыМедленнойРаботы.ТекущаяСтраница = Элементы.МедленноеСоединение; + КонецЕсли; + КонецПроцедуры &НаСервере @@ -70,5 +118,24 @@ ПроверкаКонтрагентов.СохранитьДатуПоследнегоОтображенияПредложенияПодключиться(); КонецПроцедуры + +&НаСервере +Процедура ПрисоединитьСсылкуНаИнструкцию(Элемент) + + ПутьКИнструкции = Новый ФорматированнаяСтрока( + НСтр("ru = 'Подробнее о проверке'"), + , + , + , + ПроверкаКонтрагентовКлиентСерверПовтИсп.ПутьКИнструкции()); + + Элемент.Заголовок = Новый ФорматированнаяСтрока( + Элемент.Заголовок, + Символы.ПС, + ПутьКИнструкции); + + Элемент.Высота = Элемент.Высота + 1; + +КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonForms/Вопрос/Form.form b/SSL/src/CommonForms/Вопрос/Form.form index d5e01af4e..8fa15d555 100644 --- a/SSL/src/CommonForms/Вопрос/Form.form +++ b/SSL/src/CommonForms/Вопрос/Form.form @@ -73,6 +73,7 @@ Label true true + true Left diff --git a/SSL/src/CommonForms/Вопрос/Module.bsl b/SSL/src/CommonForms/Вопрос/Module.bsl index b1c5c0e0c..603d4703e 100644 --- a/SSL/src/CommonForms/Вопрос/Module.bsl +++ b/SSL/src/CommonForms/Вопрос/Module.bsl @@ -76,7 +76,9 @@ СброситьРазмерыИПоложениеОкна(); // Для того чтобы командная панель не пропадала при обратном отсчете. - Элементы.ТекстСообщения.Заголовок = Элементы.ТекстСообщения.Заголовок + Символы.ПС + Символы.ПС; + Если ОжиданиеСчетчик > 0 Тогда + Элементы.ТекстСообщения.Заголовок = Элементы.ТекстСообщения.Заголовок + Символы.ПС + Символы.ПС; + КонецЕсли; КонецПроцедуры &НаКлиенте diff --git a/SSL/src/CommonForms/ВосстановлениеСвязиСГлавнымУзлом/Help/ru.html b/SSL/src/CommonForms/ВосстановлениеСвязиСГлавнымУзлом/Help/ru.html index 0fc393b07..074adeef9 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 9a2d05be6..be0b228d5 100644 --- a/SSL/src/CommonForms/ВходВОбластьДанных/Module.bsl +++ b/SSL/src/CommonForms/ВходВОбластьДанных/Module.bsl @@ -1,4 +1,4 @@ -#Область ЛокальныеПеременные +#Область ОписаниеПеременных &НаКлиенте Перем ОбновитьИнтерфейс; diff --git a/SSL/src/CommonForms/ВыборДаты/Help/ru.html b/SSL/src/CommonForms/ВыборДаты/Help/ru.html index e46de611d..cb7db2946 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 901b6f38e..f10aad836 100644 --- a/SSL/src/CommonForms/ВыборДаты/Module.bsl +++ b/SSL/src/CommonForms/ВыборДаты/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ДействиеВыбрано; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form index eafc8b178..f661f65ad 100644 --- a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form +++ b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form @@ -262,6 +262,7 @@ Vertical auto + false
                  @@ -527,6 +528,7 @@ Vertical auto + false true diff --git a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Help/ru.html b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Help/ru.html index 64f8da60d..f5fb51f8f 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 2ce54a0eb..d8cffdb72 100644 --- a/SSL/src/CommonForms/ВыборКонтакта/Form.form +++ b/SSL/src/CommonForms/ВыборКонтакта/Form.form @@ -381,6 +381,7 @@ true true + 10 true true
                  true
                  @@ -429,6 +430,7 @@ Vertical auto + false
                  @@ -611,6 +613,7 @@ true true + 10 true true
                  true
                  @@ -659,6 +662,7 @@ Vertical auto + false
                  @@ -828,6 +832,7 @@ true true true + 5 true true Row @@ -1030,6 +1035,7 @@ true true true + 10 true true
                  true
                  @@ -1083,6 +1089,7 @@ Vertical auto + false
                  true @@ -1715,7 +1722,7 @@ Контакт - CatalogRef.Пользователи + CatalogRef diff --git a/SSL/src/CommonForms/ВыборКонтакта/Help/ru.html b/SSL/src/CommonForms/ВыборКонтакта/Help/ru.html index fa276e977..caf04ec94 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 575f2b074..e46e3e224 100644 --- a/SSL/src/CommonForms/ВыборКонтакта/Module.bsl +++ b/SSL/src/CommonForms/ВыборКонтакта/Module.bsl @@ -391,16 +391,16 @@ КонецПроцедуры &НаСервере -Процедура СохранитьПараметрыОткрытия(Параметры) +Процедура СохранитьПараметрыОткрытия(ПереданныеПараметры) - ПараметрыФормы.Добавить( Параметры.Адрес, "Адрес"); - ПараметрыФормы.Добавить( Параметры.Контакт, "Контакт"); - ПараметрыФормы.Добавить( Параметры.Предмет, "Предмет"); - ПараметрыФормы.Добавить( Параметры.Представление, "Представление"); - ПараметрыФормы.Добавить( Параметры.ТолькоEmail, "ТолькоEmail"); - ПараметрыФормы.Добавить( Параметры.ТолькоТелефон, "ТолькоТелефон"); - ПараметрыФормы.Добавить( Параметры.ДляФормыУточненияКонтактов, "ДляФормыУточненияКонтактов"); - ПараметрыФормы.Добавить( Параметры.ЗаменятьПустыеАдресИПредставление, "ЗаменятьПустыеАдресИПредставление"); + ПараметрыФормы.Добавить( ПереданныеПараметры.Адрес, "Адрес"); + ПараметрыФормы.Добавить( ПереданныеПараметры.Контакт, "Контакт"); + ПараметрыФормы.Добавить( ПереданныеПараметры.Предмет, "Предмет"); + ПараметрыФормы.Добавить( ПереданныеПараметры.Представление, "Представление"); + ПараметрыФормы.Добавить( ПереданныеПараметры.ТолькоEmail, "ТолькоEmail"); + ПараметрыФормы.Добавить( ПереданныеПараметры.ТолькоТелефон, "ТолькоТелефон"); + ПараметрыФормы.Добавить( ПереданныеПараметры.ДляФормыУточненияКонтактов, "ДляФормыУточненияКонтактов"); + ПараметрыФормы.Добавить( ПереданныеПараметры.ЗаменятьПустыеАдресИПредставление, "ЗаменятьПустыеАдресИПредставление"); КонецПроцедуры diff --git a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Form.form b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Form.form index 1e136bf99..d477166ff 100644 --- a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Form.form +++ b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Form.form @@ -280,7 +280,6 @@ true Tree - true true true true diff --git a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Help/ru.html b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Help/ru.html index 1f68c4208..dcac6b6a9 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 d8802e4ca..0f61cb7e7 100644 --- a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl +++ b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl @@ -430,7 +430,7 @@ // Процедура рекурсивно устанавливает/снимает пометку для родителей передаваемого элемента. // // Параметры: -// Элемент - ДанныеФормыКоллекцияЭлементовДерева +// Элемент - ДанныеФормыКоллекцияЭлементовДерева. // &НаКлиенте Процедура ПометитьЭлементыРодителей(Элемент) @@ -553,7 +553,7 @@ // которые имеют объекты метаданных с заданной пометкой. // // Параметры: -// Элемент - ДанныеФормыКоллекцияЭлементовДерева +// Элемент - ДанныеФормыКоллекцияЭлементовДерева. // Процедура НачальнаяПометкаКоллекций(Родитель) @@ -572,7 +572,7 @@ // с передаваемого элемента. // // Параметры: -// Элемент - ДанныеФормыКоллекцияЭлементовДерева +// Элемент - ДанныеФормыКоллекцияЭлементовДерева. // &НаКлиенте Процедура ПометитьВложенныеЭлементы(Элемент) diff --git a/SSL/src/CommonForms/ВыборПолучателейСообщения/ConditionalAppearance.dcssca b/SSL/src/CommonForms/ВыборПолучателейСообщения/ConditionalAppearance.dcssca new file mode 100644 index 000000000..ca537f223 --- /dev/null +++ b/SSL/src/CommonForms/ВыборПолучателейСообщения/ConditionalAppearance.dcssca @@ -0,0 +1,22 @@ + + + + + + ПолучателиСообщенияПояснение + + + + + ПолучателиСообщения.Пояснение + NotFilled + + + + + Видимость + false + + + + diff --git a/SSL/src/CommonForms/ВыборПолучателейСообщения/Form.form b/SSL/src/CommonForms/ВыборПолучателейСообщения/Form.form new file mode 100644 index 000000000..3655359f9 --- /dev/null +++ b/SSL/src/CommonForms/ВыборПолучателейСообщения/Form.form @@ -0,0 +1,891 @@ + + + + <key>ru</key> + <value>Получатели сообщения</value> + + + ПолучателиСообщения + 1 + true + true + + true + + + ПолучателиСообщения + + None + Add + CancelSearch + Change + Copy + Delete + EndEdit + Find + MoveDown + MoveUp + ShowRowRearrangement + SortListAsc + SortListDesc + + ПолучателиСообщенияВыбран + 14 + true + true + + true + + + ПолучателиСообщения.Выбран + + None + + ПолучателиСообщенияВыбранРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + ПолучателиСообщенияВыбранКонтекстноеМеню + 15 + true + + CheckBoxField + Auto + true + + CommonPicture.ЭлектронноеПисьмо + + Left + true + + + + ГруппаПолучатели + 26 + + ГруппаПредставлениеПолучателей + 28 + + ПолучателиСообщенияПредставление + 17 + true + true + + true + + + ПолучателиСообщения.Представление + + + ПолучателиСообщенияПредставлениеРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + ПолучателиСообщенияПредставлениеКонтекстноеМеню + 18 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПолучателиСообщенияПредставлениеАдреса + 20 + + <key>ru</key> + <value>E-mail</value> + + true + true + + true + + + ПолучателиСообщения.ПредставлениеАдреса + + + ПолучателиСообщенияПредставлениеАдресаРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + ПолучателиСообщенияПредставлениеАдресаКонтекстноеМеню + 21 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа представление получателей</value> + + + ru + Группа представление получателей + + + ГруппаПредставлениеПолучателейРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + ColumnGroup + + auto + true + + + + ГруппаПояснение + 34 + + ПолучателиСообщенияПояснение + 23 + true + true + + true + + + ПолучателиСообщения.Пояснение + + None + + ПолучателиСообщенияПояснениеРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + ПолучателиСообщенияПояснениеКонтекстноеМеню + 24 + true + + InputField + true + Auto + Left + + true + true + true + true + true + true + + Style.ПоясняющийТекст + + Normal + + + true + + true + + + <key>ru</key> + <value>Группа пояснение</value> + + + ru + Группа пояснение + + + ГруппаПояснениеРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + ColumnGroup + + Vertical + true + + + true + true + + true + + + <key>ru</key> + <value>Группа получатели</value> + + + ru + Группа получатели + + + ГруппаПолучателиРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + ПолучателиСообщенияКоманднаяПанель + 3 + Left + + + Selection + ПолучателиСообщенияВыбор + + + BeforeAddRow + ПолучателиСообщенияПередНачаломДобавления + + + BeforeDeleteRow + ПолучателиСообщенияПередУдалением + + + ПолучателиСообщенияСтрокаПоиска + 5 + + ПолучателиСообщенияСтрокаПоискаРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + ПолучателиСообщенияСтрокаПоискаКонтекстноеМеню + 6 + true + + ПолучателиСообщения + + true + + + + ПолучателиСообщенияСостояниеПросмотра + 8 + + ПолучателиСообщенияСостояниеПросмотраРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + ПолучателиСообщенияСостояниеПросмотраКонтекстноеМеню + 9 + true + + ViewStatusAddition + ПолучателиСообщения + + true + + + + ПолучателиСообщенияУправлениеПоиском + 11 + + ПолучателиСообщенияУправлениеПоискомРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + ПолучателиСообщенияУправлениеПоискомКонтекстноеМеню + 12 + true + + SearchControlAddition + ПолучателиСообщения + + true + + + + ПолучателиСообщенияРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + + ПолучателиСообщенияКонтекстноеМеню + 2 + + ПолучателиСообщенияКонтекстноеМенюГруппаВыбор + 42 + + ПолучателиСообщенияКонтекстноеМенюВыбратьВсехПолучателей + 36 + true + true + + true + + + ПолучателиСообщенияКонтекстноеМенюВыбратьВсехПолучателейРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + Form.Command.ВыбратьВсехПолучателей + Normal + Auto + true + true + UserCmds + Auto + + + ПолучателиСообщенияКонтекстноеМенюОтменитьВыборДляВсех + 38 + true + true + + true + + + ПолучателиСообщенияКонтекстноеМенюОтменитьВыборДляВсехРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + Form.Command.ОтменитьВыборДляВсех + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Получатели сообщения контекстное меню группа выбор</value> + + + ru + Получатели сообщения контекстное меню группа выбор + + + ПолучателиСообщенияКонтекстноеМенюГруппаВыборРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + + + ПолучателиСообщенияКонтекстноеМенюГруппаСтандартныеКоманды + 44 + + ПолучателиСообщенияКонтекстноеМенюКопировать + 46 + true + true + + true + + + ПолучателиСообщенияКонтекстноеМенюКопироватьРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + Form.Item.ПолучателиСообщения.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + + + ПолучателиСообщенияКонтекстноеМенюВывестиСписок + 40 + true + true + + true + + + ПолучателиСообщенияКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + Form.Item.ПолучателиСообщения.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Получатели сообщения контекстное меню группа стандартные команды</value> + + + ru + Получатели сообщения контекстное меню группа стандартные команды + + + ПолучателиСообщенияКонтекстноеМенюГруппаСтандартныеКомандыРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + + + true + + true + true + true + true + true + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + true + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаВыбрать + 30 + true + true + + true + + + ФормаВыбратьРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + Form.Command.Выбрать + Auto + true + true + true + UserCmds + Auto + + + ФормаОтмена + 32 + true + true + + true + + + ФормаОтменаРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + Form.Command.Отмена + Normal + Auto + true + true + UserCmds + Auto + + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + 60 + LockOwner + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + ПолучателиСообщения + + <key>ru</key> + <value>Получатели сообщения</value> + + 1 + + ValueTable + + + true + + + true + + + Адрес + + <key>ru</key> + <value>E-mail</value> + + 1 + + String + + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Получатель</value> + + 2 + + String + + + + true + + + true + + + + Выбран + + <key>ru</key> + <value>Выбран</value> + + 4 + + Boolean + + + true + + + true + + + + Пояснение + + <key>ru</key> + <value>Пояснение</value> + + 7 + + String + + + + true + + + true + + + + ПредставлениеАдреса + + <key>ru</key> + <value>Представление адреса</value> + + 3 + + String + + + + true + + + true + + + + + ПочтовыйАдресПолучателя + + <key>ru</key> + <value>Почтовый адрес получателя</value> + + 2 + + String + + + + true + + + true + + + + Выбрать + + <key>ru</key> + <value>Выбрать</value> + + 1 + + ru + Выбрать + + + true + + + + Выбрать + + + DontUse + Auto + + + Отмена + + <key>ru</key> + <value>Отмена</value> + + 2 + + ru + Отмена + + + true + + + + Отмена + + + DontUse + Auto + + + ВыбратьВсехПолучателей + + <key>ru</key> + <value>Выбрать всех получателей</value> + + 3 + + ru + Выбрать всех получателей + + + true + + + StdPicture.CheckAll + + + + ВыбратьВсехПолучателей + + + DontUse + Auto + + + ОтменитьВыборДляВсех + + <key>ru</key> + <value>Отменить выбор для всех</value> + + 4 + + ru + Отменить выбор для всех + + + true + + + StdPicture.UncheckAll + + + + ОтменитьВыборДляВсех + + + DontUse + Auto + + + ПолучателиСообщения + + String + + + + + ПочтовыйАдресПолучателя + + String + + + + + + + + diff --git a/SSL/src/CommonForms/ВыборПолучателейСообщения/Module.bsl b/SSL/src/CommonForms/ВыборПолучателейСообщения/Module.bsl new file mode 100644 index 000000000..ddbb11910 --- /dev/null +++ b/SSL/src/CommonForms/ВыборПолучателейСообщения/Module.bsl @@ -0,0 +1,196 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ПараметрыПолучателейСообщения = ПолучитьИзВременногоХранилища(Параметры.ПолучателиСообщения); + Если ТипЗнч(ПараметрыПолучателейСообщения) = Тип("Строка") Тогда + ЗаполнитьТаблицуПолучателейИзСтроки(ПараметрыПолучателейСообщения); + ИначеЕсли ТипЗнч(ПараметрыПолучателейСообщения) = Тип("СписокЗначений") Тогда + ЗаполнитьТаблицуПолучателейИзСпискаЗначений(ПараметрыПолучателейСообщения); + ИначеЕсли ТипЗнч(ПараметрыПолучателейСообщения) = Тип("Массив") Тогда + ЗаполнитьТаблицуПолучателейИзМассиваСтруктур(ПараметрыПолучателейСообщения); + КонецЕсли; + + ОтметитьВыбранныхПолучателей(Параметры.ПочтовыйАдресПолучателя); + + УстановитьВидимостьРеквизитовТабличнойЧасти(); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыПолучатели + +&НаКлиенте +Процедура ПолучателиСообщенияПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + + Отказ = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура ПолучателиСообщенияПередУдалением(Элемент, Отказ) + + Отказ = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура ПолучателиСообщенияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + Элемент.ТекущиеДанные.Выбран = НЕ Элемент.ТекущиеДанные.Выбран; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Выбрать(Команда) + + Результат = СформироватьПочтовыйАдресПолучателя(); + ОповеститьОВыборе(Результат); + +КонецПроцедуры + +&НаКлиенте +Процедура Отмена(Команда) + + Закрыть(Неопределено); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыбратьВсехПолучателей(Команда) + + УстановитьВыборДляВсехПолучателей(Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтменитьВыборДляВсех(Команда) + + УстановитьВыборДляВсехПолучателей(Ложь); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Функция СформироватьПочтовыйАдресПолучателя() + + Для Каждого Получатель Из ПолучателиСообщения Цикл + Если Получатель.Выбран Тогда + ПочтовыйАдресПолучателя = ПочтовыйАдресПолучателя + Получатель.Представление + " <" + СокрЛП(Получатель.Адрес) + ">; "; + КонецЕсли; + КонецЦикла; + + Возврат Новый Структура("ПочтовыйАдресПолучателя", СокрЛП(ПочтовыйАдресПолучателя)); + +КонецФункции + +&НаКлиенте +Функция УстановитьВыборДляВсехПолучателей(Выбор) + + Для Каждого Получатель Из ПолучателиСообщения Цикл + Получатель.Выбран = Выбор; + КонецЦикла; + +КонецФункции + +&НаСервере +Процедура ЗаполнитьТаблицуПолучателейИзМассиваСтруктур(ПараметрыПолучателейСообщения) + + Для Каждого ПараметрыПолучателя Из ПараметрыПолучателейСообщения Цикл + Получатель = ПолучателиСообщения.Добавить(); + ЗаполнитьЗначенияСвойств(Получатель, ПараметрыПолучателя); + Получатель.Выбран = Ложь; + Получатель.ПредставлениеАдреса = Получатель.Адрес; + Если ПараметрыПолучателя.Свойство("ВидПочтовогоАдреса") И НЕ ПустаяСтрока(ПараметрыПолучателя.ВидПочтовогоАдреса) Тогда + Получатель.ПредставлениеАдреса = Получатель.ПредставлениеАдреса + " (" + ПараметрыПолучателя.ВидПочтовогоАдреса + ")"; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьТаблицуПолучателейИзСпискаЗначений(ПараметрыПолучателейСообщения) + + Для Каждого ПараметрыПолучателя Из ПараметрыПолучателейСообщения Цикл + Получатель = ПолучателиСообщения.Добавить(); + Получатель.Адрес = ПараметрыПолучателя.Значение; + Получатель.Представление = ПараметрыПолучателя.Представление; + Получатель.ПредставлениеАдреса = Получатель.Адрес; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьТаблицуПолучателейИзСтроки(Знач ПараметрыПолучателейСообщения) + + ПараметрыПолучателейСообщения = ОбщегоНазначенияКлиентСервер.АдресаЭлектроннойПочтыИзСтроки(ПараметрыПолучателейСообщения); + + Для Каждого ПараметрыПолучателя Из ПараметрыПолучателейСообщения Цикл + Получатель = ПолучателиСообщения.Добавить(); + Получатель.Адрес = ПараметрыПолучателя.Адрес; + Получатель.Представление = ПараметрыПолучателя.Псевдоним; + Получатель.ПредставлениеАдреса = Получатель.Адрес; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ОтметитьВыбранныхПолучателей(ПочтовыеАдресаПолучателей) + + ПараметрыПолучателей = ОбщегоНазначенияКлиентСервер.АдресаЭлектроннойПочтыИзСтроки(ПочтовыеАдресаПолучателей); + ПочтовыйАдресПолучателя = ""; + Отбор = Новый Структура("Адрес", ""); + Для Каждого ПараметрыПолучателя Из ПараметрыПолучателей Цикл + Если НЕ ЗначениеЗаполнено(ПараметрыПолучателя.Адрес) Тогда + Продолжить; + КонецЕсли; + + Отбор.Адрес = ПараметрыПолучателя.Адрес; + НайденныеСтроки = ПолучателиСообщения.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() > 0 Тогда + НайденныеСтроки[0].Выбран = Истина; + + Иначе + ПочтовыйАдресПолучателя = ПочтовыйАдресПолучателя + ПараметрыПолучателя.Адрес + "; "; + + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьВидимостьРеквизитовТабличнойЧасти() + + ВидимостьПояснения = Ложь; + + Для Каждого СтрокаТаблицы Из ПолучателиСообщения Цикл + Если ЗначениеЗаполнено(СтрокаТаблицы.Пояснение) Тогда + ВидимостьПояснения = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ВидимостьПояснения Тогда + Элементы.ГруппаПояснение.Видимость = Истина; + Элементы.ПолучателиСообщения.Шапка = Истина; + КонецЕсли; + +КонецПроцедуры + + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/ВыборПолучателейСообщения/ВыборПолучателейСообщения.mdo b/SSL/src/CommonForms/ВыборПолучателейСообщения/ВыборПолучателейСообщения.mdo new file mode 100644 index 000000000..feddbd6a0 --- /dev/null +++ b/SSL/src/CommonForms/ВыборПолучателейСообщения/ВыборПолучателейСообщения.mdo @@ -0,0 +1,10 @@ + + + ВыборПолучателейСообщения + + ru + Выбор получателей сообщения + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Help/ru.html b/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Help/ru.html index 1900ac0fe..1fe70be57 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 7f4318131..634fb8916 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 8f0570db5..995ac9383 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 95418eff2..bcb615e32 100644 --- a/SSL/src/CommonForms/ВыборФорматаВложений/Help/ru.html +++ b/SSL/src/CommonForms/ВыборФорматаВложений/Help/ru.html @@ -1,6 +1,6 @@ - +

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

                    -

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

                    +

                    Вызывается по кнопке  Отправить по почте.

                    • Укажите с помощью флажков, в каком формате (или нескольких форматах) нужно отправить документ.
                    • Для уменьшения размера вложений печатную форму перед отправкой рекомендуется упаковать в архив (формат .zip).
                    • Нажмите кнопку Выбрать. Настройки будут сохранены.
                    \ No newline at end of file diff --git a/SSL/src/CommonForms/ГруппыПользователей/Form.form b/SSL/src/CommonForms/ГруппыПользователей/Form.form index 8af2144a0..679c26136 100644 --- a/SSL/src/CommonForms/ГруппыПользователей/Form.form +++ b/SSL/src/CommonForms/ГруппыПользователей/Form.form @@ -496,6 +496,7 @@ Vertical auto + false @@ -595,6 +596,7 @@ Page auto + false true diff --git a/SSL/src/CommonForms/ГруппыПользователей/Help/ru.html b/SSL/src/CommonForms/ГруппыПользователей/Help/ru.html index 238716991..57236b892 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 c21c87f6e..ff89277a7 100644 --- a/SSL/src/CommonForms/ДлительнаяОперация/Form.form +++ b/SSL/src/CommonForms/ДлительнаяОперация/Form.form @@ -67,6 +67,7 @@ true Label + 30 true 3 true @@ -84,15 +85,15 @@ -1 ФормаОтмена - 8 + 12 true true true - ФормаОтменаExtendedTooltip - 9 + ФормаОтменаРасширеннаяПодсказка + 13 Label true true @@ -100,7 +101,7 @@ Left - Form.StandardCommand.Cancel + Form.Command.Отмена Normal Auto true @@ -110,6 +111,14 @@ Right + + OnOpen + ПриОткрытии + + + BeforeClose + ПередЗакрытием + OnCreateAtServer ПриСозданииНаСервере @@ -118,6 +127,16 @@ OnClose ПриЗакрытии + Abort + Cancel + Close + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes LockOwner true true @@ -125,13 +144,49 @@ true auto true + + ТекстСообщения + + <key>ru</key> + <value>Текст сообщения</value> + + 7 + + String + + + + true + + + true + + + + Статус + + <key>ru</key> + <value>Статус</value> + + 1 + + String + + + + true + + + true + + ИдентификаторЗадания <key>ru</key> <value>Идентификатор задания</value> - 1 + 8 UUID @@ -142,11 +197,103 @@ true + + Отмена + + <key>ru</key> + <value>Отмена</value> + + 1 + + ru + Отмена + + + true + + + + Отмена + + + DontUse + Auto + + + ОжидатьЗавершение + + Number + + 10 + + + true + + + ТекстСообщения + + String + + + + + ВыводитьПрогрессВыполнения + + Boolean + + true + + + ОповещениеПользователя + + true + + + АдресРезультата + + String + + + true + + + АдресДополнительногоРезультата + + String + + + true + ИдентификаторЗадания UUID + true + + + ВыводитьОкноОжидания + + Boolean + + true + + + Интервал + + Number + + 10 + + + true + + + ВыводитьСообщения + + Boolean + + true diff --git a/SSL/src/CommonForms/ДлительнаяОперация/Module.bsl b/SSL/src/CommonForms/ДлительнаяОперация/Module.bsl index f53ad840d..6a7598bf9 100644 --- a/SSL/src/CommonForms/ДлительнаяОперация/Module.bsl +++ b/SSL/src/CommonForms/ДлительнаяОперация/Module.bsl @@ -1,4 +1,11 @@ +#Область ОписаниеПеременных + +&НаКлиенте +Перем ИнтервалОжидания; + +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -8,10 +15,36 @@ Возврат; КонецЕсли; - Если ЗначениеЗаполнено(Параметры.ИдентификаторЗадания) Тогда - ИдентификаторЗадания = Параметры.ИдентификаторЗадания; + ТекстСообщения = НСтр("ru = 'Пожалуйста, подождите...'"); + Если Не ПустаяСтрока(Параметры.ТекстСообщения) Тогда + ТекстСообщения = Параметры.ТекстСообщения + Символы.ПС + ТекстСообщения; + Элементы.ДекорацияПоясняющийТекстДлительнойОперации.Заголовок = ТекстСообщения; КонецЕсли; + Если ЗначениеЗаполнено(Параметры.ИдентификаторЗадания) Тогда + ИдентификаторЗадания = Параметры.ИдентификаторЗадания; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если Параметры.ВыводитьОкноОжидания Тогда + ИнтервалОжидания = ?(Параметры.Интервал <> 0, Параметры.Интервал, 1); + ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", ИнтервалОжидания, Истина); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + + Если Статус = "Выполняется" Тогда + Отказ = Истина; + ПодключитьОбработчикОжидания("Подключаемый_ОтменитьЗадание", 0.1, Истина); + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -23,8 +56,149 @@ #КонецОбласти +#Область Команды + +&НаКлиенте +Процедура Отмена(Команда) + + Подключаемый_ПроверитьВыполнениеЗадания(); // а вдруг задание уже выполнилось + Если Статус = "Выполняется" Тогда + Статус = Неопределено; + Закрыть(РезультатВыполнения(Неопределено)); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура Подключаемый_ПроверитьВыполнениеЗадания() + + Результат = ПроверитьЗаданиеВыполнено(); + Статус = Результат.Статус; + + Если Результат.Прогресс <> Неопределено Тогда + ПрогрессСтрокой = ПрогрессСтрокой(Результат.Прогресс); + Если Не ПустаяСтрока(ПрогрессСтрокой) Тогда + Элементы.ДекорацияПоясняющийТекстДлительнойОперации.Заголовок = ТекстСообщения + " " + ПрогрессСтрокой; + КонецЕсли; + ИначеЕсли Результат.Сообщения <> Неопределено И ВладелецФормы <> Неопределено Тогда + ИдентификаторНазначения = ВладелецФормы.УникальныйИдентификатор; + Для каждого СообщениеПользователю Из Результат.Сообщения Цикл + СообщениеПользователю.ИдентификаторНазначения = ИдентификаторНазначения; + СообщениеПользователю.Сообщить(); + КонецЦикла; + КонецЕсли; + + Если Статус = "Выполнено" Тогда + + ПоказатьОповещение(); + Закрыть(РезультатВыполнения(Результат)); + Возврат; + + ИначеЕсли Статус = "Ошибка" Тогда + + ПоказатьПредупреждение(, ?(ПустаяСтрока(Результат.КраткоеПредставлениеОшибки), + НСтр("ru = 'Не удалось выполнить запрошенное действие.'"), Результат.КраткоеПредставлениеОшибки)); + Закрыть(РезультатВыполнения(Результат)); + Возврат; + + КонецЕсли; + + Если Параметры.ВыводитьОкноОжидания Тогда + Если Параметры.Интервал = 0 Тогда + ИнтервалОжидания = ИнтервалОжидания * 1.4; + Если ИнтервалОжидания > 15 Тогда + ИнтервалОжидания = 15; + КонецЕсли; + КонецЕсли; + ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", ИнтервалОжидания, Истина); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ОтменитьЗадание() + + Отмена(Неопределено); + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьОповещение() + + Если Параметры.ОповещениеПользователя = Неопределено Или Не Параметры.ОповещениеПользователя.Показать Тогда + Возврат; + КонецЕсли; + + Оповещение = Параметры.ОповещениеПользователя; + + НавигационнаяСсылкаОповещения = Оповещение.НавигационнаяСсылка; + Если НавигационнаяСсылкаОповещения = Неопределено И ВладелецФормы <> Неопределено И ВладелецФормы.Окно <> Неопределено Тогда + НавигационнаяСсылкаОповещения = ВладелецФормы.Окно.ПолучитьНавигационнуюСсылку(); + КонецЕсли; + ПояснениеОповещения = Оповещение.Пояснение; + Если ПояснениеОповещения = Неопределено И ВладелецФормы <> Неопределено И ВладелецФормы.Окно <> Неопределено Тогда + ПояснениеОповещения = ВладелецФормы.Окно.Заголовок; + КонецЕсли; + + ПоказатьОповещениеПользователя(?(Оповещение.Текст <> Неопределено, Оповещение.Текст, НСтр("ru = 'Действие выполнено'")), + НавигационнаяСсылкаОповещения, ПояснениеОповещения); + +КонецПроцедуры + +&НаСервере +Функция ПроверитьЗаданиеВыполнено() + + Возврат ДлительныеОперации.ОперацияВыполнена(ИдентификаторЗадания, Ложь, Параметры.ВыводитьПрогрессВыполнения, + Параметры.ВыводитьСообщения); + +КонецФункции + +&НаКлиенте +Функция ПрогрессСтрокой(Прогресс) + + Результат = ""; + Если Прогресс = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + Процент = 0; + Если Прогресс.Свойство("Процент", Процент) Тогда + Результат = Строка(Процент) + "%"; + КонецЕсли; + Текст = 0; + Если Прогресс.Свойство("Текст", Текст) Тогда + Если Не ПустаяСтрока(Результат) Тогда + Результат = Результат + " (" + Текст + ")"; + Иначе + Результат = Текст; + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +&НаКлиенте +Функция РезультатВыполнения(Статус) + + Если Статус = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("Статус", Статус.Статус); + Результат.Вставить("АдресРезультата", Параметры.АдресРезультата); + Результат.Вставить("АдресДополнительногоРезультата", Параметры.АдресДополнительногоРезультата); + Результат.Вставить("КраткоеПредставлениеОшибки", Статус.КраткоеПредставлениеОшибки); + Результат.Вставить("ПодробноеПредставлениеОшибки", Статус.ПодробноеПредставлениеОшибки); + Возврат Результат; + +КонецФункции + &НаСервере Процедура ПриЗакрытииНаСервере() diff --git a/SSL/src/CommonForms/ДлительнаяОперацияДополнительныхОтчетовИОбработок/Form.form b/SSL/src/CommonForms/ДлительнаяОперацияДополнительныхОтчетовИОбработок/Form.form index bda29961d..dc14207e1 100644 --- a/SSL/src/CommonForms/ДлительнаяОперацияДополнительныхОтчетовИОбработок/Form.form +++ b/SSL/src/CommonForms/ДлительнаяОперацияДополнительныхОтчетовИОбработок/Form.form @@ -206,8 +206,7 @@ 8 - String - + Boolean true diff --git a/SSL/src/CommonForms/ДлительнаяОперацияДополнительныхОтчетовИОбработок/Help/ru.html b/SSL/src/CommonForms/ДлительнаяОперацияДополнительныхОтчетовИОбработок/Help/ru.html index af856b2a0..3e360f047 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/ДобавлениеЭлектроннойПодписиИзФайла/Help/ru.html b/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Help/ru.html index 7cdc97747..c731e4d22 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 ed370fc90..a8043a4b1 100644 --- a/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Module.bsl +++ b/SSL/src/CommonForms/ДобавлениеЭлектроннойПодписиИзФайла/Module.bsl @@ -1,3 +1,5 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем КлиентскиеПараметры Экспорт; @@ -7,6 +9,8 @@ &НаКлиенте Перем ОтображениеДанныхОбновлено; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -125,23 +129,33 @@ ВерсияОбъекта = Неопределено; ОписаниеДанных.Свойство("ВерсияОбъекта", ВерсияОбъекта); МассивПодписей = Неопределено; - ДобавитьПодпись(ОписаниеДанных.Объект, ВерсияОбъекта, МассивПодписей); + Попытка + ДобавитьПодпись(ОписаниеДанных.Объект, ВерсияОбъекта, МассивПодписей); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ОКЗавершение(Новый Структура("ОписаниеОшибки", КраткоеПредставлениеОшибки(ИнформацияОбОшибке)), ); + Возврат; + КонецПопытки; ОписаниеДанных.Вставить("Подписи", МассивПодписей); ОповеститьОбИзменении(ОписаниеДанных.Объект); + Иначе + ОписаниеДанных.Вставить("Подписи", МассивПодписей()); + + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("ОписаниеДанных", ОписаниеДанных); + ПараметрыВыполнения.Вставить("Оповещение", Новый ОписаниеОповещения("ОКЗавершение", ЭтотОбъект)); + + Попытка + ВыполнитьОбработкуОповещения(ОписаниеДанных.Объект, ПараметрыВыполнения); + Возврат; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ОКЗавершение(Новый Структура("ОписаниеОшибки", КраткоеПредставлениеОшибки(ИнформацияОбОшибке)), ); + Возврат; + КонецПопытки; КонецЕсли; - ОписаниеДанных.Вставить("Подписи", МассивПодписей()); - - ПараметрыВыполнения = Новый Структура; - ПараметрыВыполнения.Вставить("ОписаниеДанных", ОписаниеДанных); - ПараметрыВыполнения.Вставить("Оповещение", Новый ОписаниеОповещения("ОКЗавершение", ЭтотОбъект)); - - Попытка - ВыполнитьОбработкуОповещения(ОписаниеДанных.Объект, ПараметрыВыполнения); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ОКЗавершение(Новый Структура("ОписаниеОшибки", КраткоеПредставлениеОшибки(ИнформацияОбОшибке)), ); - КонецПопытки; + ОКЗавершение(Новый Структура, ); КонецПроцедуры @@ -271,13 +285,16 @@ &НаКлиенте Процедура ВыбратьФайлПослеПомещенияФайла(Контекст) - Контекст.Вставить("ОшибкаНаСервере", Новый Структура); - Контекст.Вставить("ДанныеПодписи", Неопределено); + Контекст.Вставить("ОшибкаНаСервере", Новый Структура); + Контекст.Вставить("ДанныеПодписи", Неопределено); + Контекст.Вставить("ДатаПодписи", Неопределено); + Контекст.Вставить("АдресСвойствПодписи", Неопределено); Успех = ДобавитьСтрокуНаСервере(Контекст.Адрес, Контекст.ИмяФайла, Контекст.ДобавитьНовуюСтроку, - Контекст.ОшибкаНаСервере, Контекст.ДанныеПодписи); + Контекст.ОшибкаНаСервере, Контекст.ДанныеПодписи, Контекст.ДатаПодписи, Контекст.АдресСвойствПодписи); Если Успех Тогда + ВыбратьФайлПослеДобавленияСтроки(Контекст); Возврат; КонецЕсли; @@ -343,16 +360,77 @@ СвойстваПодписи = СвойстваПодписи(Контекст.Сертификат, ДанныеСертификата, Контекст.ДанныеПодписи, Контекст.ИмяФайла); - ДобавитьСтроку(ЭтотОбъект, Контекст.ДобавитьНовуюСтроку, СвойстваПодписи, Контекст.ИмяФайла); + ДобавитьСтроку(ЭтотОбъект, Контекст.ДобавитьНовуюСтроку, СвойстваПодписи, + Контекст.ИмяФайла, Контекст.АдресСвойствПодписи); + + ВыбратьФайлПослеДобавленияСтроки(Контекст); КонецПроцедуры +// Продолжение процедуры ВыбратьФайл. +&НаКлиенте +Процедура ВыбратьФайлПослеДобавленияСтроки(Контекст) + + Если Не ОписаниеДанных.Свойство("Данные") Тогда + Возврат; // Если данные не указаны, подпись проверить невозможно. + КонецЕсли; + + ЭлектроннаяПодписьСлужебныйКлиент.ПолучитьДанныеИзОписанияДанных(Новый ОписаниеОповещения( + "ВыбратьФайлПослеПолученияДанных", ЭтотОбъект, Контекст), + ЭтотОбъект, ОписаниеДанных, ОписаниеДанных.Данные, Истина); + +КонецПроцедуры + +// Продолжение процедуры ВыбратьФайл. +&НаКлиенте +Процедура ВыбратьФайлПослеПолученияДанных(Результат, Контекст) Экспорт + + Если ТипЗнч(Результат) = Тип("Структура") Тогда + Возврат; // Не удалось получить данные, подпись проверить невозможно. + КонецЕсли; + + ЭлектроннаяПодписьСлужебныйКлиент.ПроверитьПодпись(Новый ОписаниеОповещения( + "ВыбратьФайлПослеПроверкиПодписи", ЭтотОбъект, Контекст), + Результат, Контекст.ДанныеПодписи, , Контекст.ДатаПодписи, Ложь); + +КонецПроцедуры + +// Продолжение процедуры ВыбратьФайл. +&НаКлиенте +Процедура ВыбратьФайлПослеПроверкиПодписи(Результат, Контекст) Экспорт + + Если Результат = Неопределено Тогда + Возврат; // Не удалось проверить подпись. + КонецЕсли; + + ОбновитьРезультатПроверкиПодписи(Контекст.АдресСвойствПодписи, Результат = Истина); + +КонецПроцедуры &НаСервере -Функция ДобавитьСтрокуНаСервере(Адрес, ИмяФайла, ДобавитьНовуюСтроку, ОшибкаНаСервере, ДанныеПодписи) +Процедура ОбновитьРезультатПроверкиПодписи(АдресСвойствПодписи, ПодписьВерна) + + ТекущаяДатаСеанса = ТекущаяДатаСеанса(); + СвойстваПодписи = ПолучитьИзВременногоХранилища(АдресСвойствПодписи); + + Если Не ЗначениеЗаполнено(СвойстваПодписи.ДатаПодписи) Тогда + СвойстваПодписи.ДатаПодписи = ТекущаяДатаСеанса; + КонецЕсли; + + СвойстваПодписи.ДатаПроверкиПодписи = ТекущаяДатаСеанса; + СвойстваПодписи.ПодписьВерна = ПодписьВерна; + + ПоместитьВоВременноеХранилище(СвойстваПодписи, АдресСвойствПодписи); + +КонецПроцедуры + +&НаСервере +Функция ДобавитьСтрокуНаСервере(Адрес, ИмяФайла, ДобавитьНовуюСтроку, ОшибкаНаСервере, + ДанныеПодписи, ДатаПодписи, АдресСвойствПодписи) ДанныеПодписи = ПолучитьИзВременногоХранилища(Адрес); ОбщиеНастройки = ЭлектроннаяПодписьКлиентСервер.ОбщиеНастройки(); + ДатаПодписи = ЭлектроннаяПодпись.ДатаПодписания(ДанныеПодписи); Если Не ОбщиеНастройки.ПроверятьЭлектронныеПодписиНаСервере И Не ОбщиеНастройки.СоздаватьЭлектронныеПодписиНаСервере Тогда @@ -383,14 +461,16 @@ СвойстваПодписи = СвойстваПодписи(Сертификаты[0], Сертификаты[0].Выгрузить(), ДанныеПодписи, ИмяФайла); - ДобавитьСтроку(ЭтотОбъект, ДобавитьНовуюСтроку, СвойстваПодписи, ИмяФайла); + ДобавитьСтроку(ЭтотОбъект, ДобавитьНовуюСтроку, СвойстваПодписи, ИмяФайла, АдресСвойствПодписи); Возврат Истина; КонецФункции &НаКлиентеНаСервереБезКонтекста -Процедура ДобавитьСтроку(Форма, ДобавитьНовуюСтроку, СвойстваПодписи, ИмяФайла) +Процедура ДобавитьСтроку(Форма, ДобавитьНовуюСтроку, СвойстваПодписи, ИмяФайла, АдресСвойствПодписи) + + АдресСвойствПодписи = ПоместитьВоВременноеХранилище(СвойстваПодписи, Форма.УникальныйИдентификатор); Если ДобавитьНовуюСтроку Тогда ТекущиеДанные = Форма.Подписи.Добавить(); @@ -399,7 +479,7 @@ КонецЕсли; ТекущиеДанные.ПутьКФайлу = ИмяФайла; - ТекущиеДанные.АдресСвойствПодписи = ПоместитьВоВременноеХранилище(СвойстваПодписи, Форма.УникальныйИдентификатор); + ТекущиеДанные.АдресСвойствПодписи = АдресСвойствПодписи; КонецПроцедуры diff --git a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form index d6a6b5dd1..b5bc26ecf 100644 --- a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form +++ b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form @@ -220,6 +220,7 @@ Vertical auto + false @@ -326,6 +327,7 @@ Page auto + false true @@ -502,6 +504,7 @@ Page auto + false @@ -592,6 +595,7 @@ Vertical auto + false true diff --git a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl index 60a79de2c..01dae2c01 100644 --- a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl +++ b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl @@ -1,9 +1,13 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ПараметрыОбработчика; &НаКлиенте Перем ВыполняемаяКоманда; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -145,7 +149,13 @@ &НаСервере Процедура ЗаполнитьТаблицуОбработок() - Запрос = ДополнительныеОтчетыИОбработки.НовыйЗапросПоДоступнымКомандам(ВидОбработок, ?(ЭтоГлобальныеОбработки, СсылкаРаздела, СсылкаРодителя), ЭтоФормаОбъекта); + ТипыКоманд = Новый Массив; + ТипыКоманд.Добавить(Перечисления.СпособыВызоваДополнительныхОбработок.ВызовКлиентскогоМетода); + ТипыКоманд.Добавить(Перечисления.СпособыВызоваДополнительныхОбработок.ВызовСерверногоМетода); + ТипыКоманд.Добавить(Перечисления.СпособыВызоваДополнительныхОбработок.ОткрытиеФормы); + ТипыКоманд.Добавить(Перечисления.СпособыВызоваДополнительныхОбработок.СценарийВБезопасномРежиме); + + Запрос = ДополнительныеОтчетыИОбработки.НовыйЗапросПоДоступнымКомандам(ВидОбработок, ?(ЭтоГлобальныеОбработки, СсылкаРаздела, СсылкаРодителя), ЭтоФормаОбъекта, ТипыКоманд); ТаблицаРезультат = Запрос.Выполнить().Выгрузить(); @@ -253,18 +263,12 @@ &НаКлиенте Процедура ПоказатьРезультатВыполненияОбработки(Задание, ЗакрытьЭтуФорму) - // Добавление оповещения в результат выполнения (если требуется). - РезультатВыполнения = Задание.Значение; - Если РезультатВыполнения = Неопределено Тогда - РезультатВыполнения = Новый Структура; - КонецЕсли; - Если Задание.Успешно Тогда // Показать всплывающее оповещение. Если ВыполняемаяКоманда.ПоказыватьОповещение Тогда - СтандартныеПодсистемыКлиентСервер.ВывестиОповещение( - РезультатВыполнения, + ПоказатьОповещениеПользователя( НСтр("ru = 'Команда выполнена'"), + , ВыполняемаяКоманда.Представление); КонецЕсли; @@ -287,7 +291,10 @@ КонецЕсли; // Вывод результата выполнения. - СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ВладелецФормы, РезультатВыполнения); + РезультатВыполнения = Задание.Значение; + Если РезультатВыполнения <> Неопределено Тогда + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ВладелецФормы, РезультатВыполнения); + КонецЕсли; КонецПроцедуры &НаКлиенте @@ -303,24 +310,26 @@ &НаСервереБезКонтекста Функция ПроверитьВыполнениеФоновогоЗаданияНаСервере(ФоновоеЗаданиеИдентификатор, ФоновоеЗаданиеАдресХранилища, Отменить = Ложь) - Задание = Новый Структура("Завершено, Успешно, Значение", Ложь, Неопределено, Неопределено); - Попытка - Если ДлительныеОперации.ЗаданиеВыполнено(ФоновоеЗаданиеИдентификатор) Тогда - Задание.Завершено = Истина; - Задание.Успешно = Истина; - Задание.Значение = ПолучитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища); + Результат = Новый Структура("Завершено, Успешно, Значение", Ложь, Ложь, Неопределено); + + Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗаданиеИдентификатор); + Если Задание = Неопределено Тогда + СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(Результат.Значение, НСтр("ru = 'Фоновое задание не найдено.'")); + ИначеЕсли Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда + Если Отменить Тогда + ДлительныеОперации.ОтменитьВыполнениеЗадания(ФоновоеЗаданиеИдентификатор); КонецЕсли; - Исключение - Задание.Завершено = Истина; - Задание.Успешно = Ложь; - Задание.Значение = Новый Структура; + ИначеЕсли Задание.Состояние = СостояниеФоновогоЗадания.Завершено Тогда + Результат.Завершено = Истина; + Результат.Успешно = Истина; + Результат.Значение = ПолучитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища); + ИначеЕсли Задание.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Или Задание.Состояние = СостояниеФоновогоЗадания.Отменено Тогда + Результат.Завершено = Истина; Текст = НСтр("ru = 'Не удалось выполнить команду.'"); - СтандартныеПодсистемыКлиентСервер.ВывестиИнформациюОбОшибке(Задание.Значение, Текст, ИнформацияОбОшибке()); - КонецПопытки; - Если Не Задание.Завершено И Отменить Тогда - ДлительныеОперации.ОтменитьВыполнениеЗадания(ФоновоеЗаданиеИдентификатор); + СтандартныеПодсистемыКлиентСервер.ВывестиИнформациюОбОшибке(Задание.Значение, Текст, Задание.ИнформацияОбОшибке); КонецЕсли; - Возврат Задание; + + Возврат Результат; КонецФункции #КонецОбласти diff --git a/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Help/ru.html b/SSL/src/CommonForms/ДополнительныеПараметрыПроксиСервера/Help/ru.html index 03c83b4de..e2c1b1312 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 54cac556d..4e28853c7 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 03a5cfd3f..08ab0e0b4 100644 --- a/SSL/src/CommonForms/ЗаполнениеРеквизитовКонтрагента/Module.bsl +++ b/SSL/src/CommonForms/ЗаполнениеРеквизитовКонтрагента/Module.bsl @@ -135,6 +135,10 @@ |Указать сейчас?'"); ОписаниеОповещения = Новый ОписаниеОповещения("ПодключитьИнтернетПоддержку", ЭтотОбъект); ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет); + ИначеЕсли ОписаниеОшибки = "Сервис1СКонтрагентНеПодключен" Тогда + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ИдентификаторМестаВызова", "zapolnenie_rekvizitov"); + ОткрытьФорму("ОбщаяФорма.Сервис1СКонтрагентНеПодключен", ПараметрыФормы, ЭтотОбъект); Иначе ПоказатьПредупреждение(, ОписаниеОшибки); КонецЕсли; @@ -161,6 +165,12 @@ Возврат; КонецЕсли; + Если НЕ ЗначениеЗаполнено(ТекДанные.ИНН) Тогда + ТекстПредупреждения = НСтр("ru='Выберите контрагента, у которого указан ИНН.'"); + ПоказатьПредупреждение(, ТекстПредупреждения); + Возврат; + КонецЕсли; + ОповеститьОВыборе(ТекДанные.ИНН); КонецПроцедуры diff --git a/SSL/src/CommonForms/МастерАнкетыПоРазделам/Module.bsl b/SSL/src/CommonForms/МастерАнкетыПоРазделам/Module.bsl index 2bb89dd1a..e0998b805 100644 --- a/SSL/src/CommonForms/МастерАнкетыПоРазделам/Module.bsl +++ b/SSL/src/CommonForms/МастерАнкетыПоРазделам/Module.bsl @@ -120,15 +120,7 @@ Элементы.ПредыдущийРазделПодвал.Видимость = (ТаблицаВопросовРаздела.Количество() > 0); Элементы.СледующийРазделПодвал.Видимость = (ТаблицаВопросовРаздела.Количество() > 0); - ПереключитьВидимостьГруппТелаАнкеты(); - -КонецПроцедуры - -&НаСервере -Процедура ПереключитьВидимостьГруппТелаАнкеты() - - Элементы.ГруппаТелоАнкеты.Видимость = НЕ Элементы.ГруппаТелоАнкеты.Видимость; - Элементы.ГруппаОжидание.Видимость = НЕ Элементы.ГруппаТелоАнкеты.Видимость; + АнкетированиеКлиентСервер.ПереключитьВидимостьГруппТелаАнкеты(ЭтотОбъект, Истина); КонецПроцедуры @@ -136,7 +128,7 @@ &НаКлиенте Процедура ВыполнитьПостроениеФормыЗаполнения() - ПереключитьВидимостьГруппТелаАнкеты(); + АнкетированиеКлиентСервер.ПереключитьВидимостьГруппТелаАнкеты(ЭтотОбъект, Ложь); ПодключитьОбработчикОжидания("ОкончаниеПостроенияФормыЗаполнения",0.1,Истина); КонецПроцедуры diff --git a/SSL/src/CommonForms/НапоминаниеПриРедактировании/Form.form b/SSL/src/CommonForms/НапоминаниеПриРедактировании/Form.form index cc2a13603..603656670 100644 --- a/SSL/src/CommonForms/НапоминаниеПриРедактировании/Form.form +++ b/SSL/src/CommonForms/НапоминаниеПриРедактировании/Form.form @@ -110,6 +110,7 @@ Vertical auto + false @@ -168,6 +169,7 @@ Vertical auto + false true diff --git a/SSL/src/CommonForms/Настройка1СБухфон/Form.form b/SSL/src/CommonForms/Настройка1СБухфон/Form.form index a8460bd1f..94d9ed080 100644 --- a/SSL/src/CommonForms/Настройка1СБухфон/Form.form +++ b/SSL/src/CommonForms/Настройка1СБухфон/Form.form @@ -1,49 +1,11 @@ - - ДекорацияЛоготип - 223 - - <key>ru</key> - <value>Декорация логотип</value> - - true - true - - true - - - ДекорацияЛоготипРасширеннаяПодсказка - 225 - Label - true - true - - Left - - - - ДекорацияЛоготипКонтекстноеМеню - 224 - true - - 55 - true - 2 - true - - - CommonPicture.Логотип1СБухфон - - AutoSize - - ВидимостьКнопки 88 <key>ru</key> - <value>Отображать кнопку запуска 1С-Бухфон на начальной странице</value> + <value>Отображать кнопку запуска приложения для соединения со специалистом онлайн-поддержки на начальной странице</value> true true @@ -54,6 +16,7 @@ ВидимостьКнопки Right + 2 OnChange ВидимостьКнопкиПриИзменении @@ -86,10 +49,6 @@ ПутьКФайлу 21 - - <key>ru</key> - <value>Путь к исполняемому файлу 1С-Бухфон</value> - true true @@ -142,10 +101,6 @@ СохранитьЛогинПароль 36 - - <key>ru</key> - <value>Подставлять логин и пароль при запуске программы</value> - true true @@ -369,36 +324,6 @@ Auto - - ДекорацияОтступСнизу - 231 - true - true - - true - - - ДекорацияОтступСнизуРасширеннаяПодсказка - 233 - Label - true - true - - Left - - - - ДекорацияОтступСнизуКонтекстноеМеню - 232 - true - - Label - true - true - - Left - - true true @@ -408,10 +333,6 @@ ru Параметры запуска - - ru - Настройки запуска - ГруппаПараметрыЗапускаРасширеннаяПодсказка 214 @@ -426,6 +347,7 @@ Vertical Auto + NormalSeparation true true Auto @@ -478,10 +400,6 @@ СкачайтеПрограмму 229 - - <key>ru</key> - <value>Скачать программу</value> - true true @@ -502,7 +420,6 @@ Normal Auto true - 2 true UserCmds Auto @@ -529,6 +446,7 @@ Form.Command.ПолучитьАккаунт1СБухфон Normal Auto + 22 true 2 true @@ -558,7 +476,6 @@ Normal Auto true - 2 true UserCmds Auto @@ -617,6 +534,7 @@ UsualGroup Auto + NormalSeparation true true Auto @@ -654,9 +572,6 @@ true true UserCmds - - System.DefaultGUIFont - Auto @@ -720,7 +635,7 @@ ПутьКФайлу <key>ru</key> - <value>Путь к файлу</value> + <value>Путь к исполняемому файлу приложения</value> 1 @@ -739,7 +654,7 @@ СохранитьЛогинПароль <key>ru</key> - <value>Сохранить логин пароль</value> + <value>Подставлять логин и пароль при запуске приложения</value> 2 @@ -813,13 +728,10 @@ ПолучитьАккаунт1СБухфон <key>ru</key> - <value>Получить аккаунт 1С-Бухфон</value> + <value>Зарегистрироваться в сервисе +онлайн-поддержки (1С-Коннект)</value> 2 - - ru - Получить аккаунт 1С-Бухфон - true @@ -838,10 +750,6 @@ Технические требования 3 - - ru - Технические требования - true @@ -860,10 +768,6 @@ Сохранить 5 - - ru - Сохранить - true @@ -879,13 +783,9 @@ СкачайтеПрограмму <key>ru</key> - <value>Скачайте программу</value> + <value>Скачать приложение</value> 7 - - ru - Скачайте программу - true diff --git a/SSL/src/CommonForms/Настройка1СБухфон/Help/ru.html b/SSL/src/CommonForms/Настройка1СБухфон/Help/ru.html index d576783ba..d8a72db1d 100644 --- a/SSL/src/CommonForms/Настройка1СБухфон/Help/ru.html +++ b/SSL/src/CommonForms/Настройка1СБухфон/Help/ru.html @@ -4,15 +4,15 @@ TD { VERTICAL-ALIGN: top } - -

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

                    -

                    Открывается по команде Настройка 1С:Бухфон в разделе Администрирование - Общие настройки.

                    + +

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

                    +

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

                    Запуск одной и той же базы под веб-клиентом и тонким клиентом потребует две процедуры настройки.

                    -

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

                    -

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

                    +

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

                    +

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

                    На втором шаге задайте настройки:

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

                    На третьем шаге задайте настройки:

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

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

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

                    На третьем шаге задайте настройки:

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

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

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

                    \ No newline at end of file diff --git a/SSL/src/CommonForms/Настройка1СБухфон/Module.bsl b/SSL/src/CommonForms/Настройка1СБухфон/Module.bsl index acb5650f8..3aab9745c 100644 --- a/SSL/src/CommonForms/Настройка1СБухфон/Module.bsl +++ b/SSL/src/CommonForms/Настройка1СБухфон/Module.bsl @@ -15,7 +15,7 @@ ИдентификаторКлиента = СистемнаяИнформация.ИдентификаторКлиента; ПутьКФайлу = Интеграция1СБухфонВызовСервера.РасположениеИсполняемогоФайла(ИдентификаторКлиента); - ИнициализироватьЭлементыФормы(ЭтаФорма); + ИнициализироватьЭлементыФормы(ЭтотОбъект); КонецПроцедуры @@ -45,7 +45,7 @@ &НаКлиенте Процедура ВидимостьКнопкиПриИзменении(Элемент) - ИнициализироватьЭлементыФормы(ЭтаФорма); + ИнициализироватьЭлементыФормы(ЭтотОбъект); КонецПроцедуры &НаКлиенте diff --git a/SSL/src/CommonForms/Настройка1СБухфон/Настройка1СБухфон.mdo b/SSL/src/CommonForms/Настройка1СБухфон/Настройка1СБухфон.mdo index ae8251058..754f5b298 100644 --- a/SSL/src/CommonForms/Настройка1СБухфон/Настройка1СБухфон.mdo +++ b/SSL/src/CommonForms/Настройка1СБухфон/Настройка1СБухфон.mdo @@ -3,7 +3,7 @@ Настройка1СБухфон ru - Настройка 1С-Бухфон + Настройка онлайн-поддержки diff --git a/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Form.form b/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Form.form new file mode 100644 index 000000000..d27bee7f1 --- /dev/null +++ b/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Form.form @@ -0,0 +1,349 @@ + + + + ВидДоступаКСервисуMorher + 1 + + <key>ru</key> + <value>Использовать для доступа к сервису</value> + + true + true + + true + + + ВидДоступаКСервисуMorher + + + OnChange + ВидДоступаКСервисуMorherПриИзменении + + + ВидДоступаКСервисуMorherРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + ВидДоступаКСервисуMorherКонтекстноеМеню + 2 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + Анонимный вход + + + 0 + + + + + ru + Вход для зарегистрированных пользователей + + + 1 + + + Vertical + + + + ЛогинДоступаКСервисуMorpher + 4 + + <key>ru</key> + <value>Логин</value> + + true + true + + true + + + ЛогинДоступаКСервисуMorpher + + + ЛогинДоступаКСервисуMorpherРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ЛогинДоступаКСервисуMorpherКонтекстноеМеню + 5 + true + + InputField + Enter + true + Left + true + + 23 + true + true + true + true + true + true + true + Normal + + + + ПарольДоступаКСервисуMorpher + 7 + + <key>ru</key> + <value>Пароль</value> + + true + true + + true + + + ПарольДоступаКСервисуMorpher + + + ПарольДоступаКСервисуMorpherРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ПарольДоступаКСервисуMorpherКонтекстноеМеню + 8 + true + + InputField + Enter + true + Left + true + + 23 + true + true + true + true + true + true + true + true + Normal + + + + ИнфоНадписьДоступКСервису + 14 + true + true + + true + + + ИнфоНадписьДоступКСервисуРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + ИнфоНадписьДоступКСервисуКонтекстноеМеню + 15 + true + + Label + true + true + false + + Style.ПоясняющийТекст + + + Left + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаОК + 10 + true + true + + true + + + ФормаОКРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + Form.Command.ОК + Auto + true + true + true + UserCmds + Auto + + + ФормаКнопкаОтмена + 12 + true + true + + true + + + ФормаКнопкаОтменаРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + ВидДоступаКСервисуMorher + + <key>ru</key> + <value>Вид доступа к сервису morher</value> + + 2 + + Number + + 1 + + + + true + + + true + + + + ПарольДоступаКСервисуMorpher + + <key>ru</key> + <value>Пароль доступа к сервису morpher</value> + + 3 + + String + + + + true + + + true + + + + ЛогинДоступаКСервисуMorpher + + <key>ru</key> + <value>Логин доступа к сервису morpher</value> + + 4 + + String + + + + true + + + true + + + + ОК + + <key>ru</key> + <value>ОК</value> + + 1 + + ru + ОК + + + true + + + + ОК + + + DontUse + Auto + + + + + + diff --git a/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Help/ru.html b/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Help/ru.html new file mode 100644 index 000000000..675cfe2de --- /dev/null +++ b/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Help/ru.html @@ -0,0 +1,10 @@ + +

                    Предназначена для ввода данных регистрации на сервисе склонений http://morpher.ru/.

                    +

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

                    +

                    Анонимный вход

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

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

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

                    См. также:

                    + \ No newline at end of file diff --git a/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Module.bsl b/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Module.bsl new file mode 100644 index 000000000..e16325082 --- /dev/null +++ b/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/Module.bsl @@ -0,0 +1,103 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ЛогинДоступаКСервисуMorpher = Константы.ЛогинДоступаКСервисуMorpher.Получить(); + + ВидДоступаКСервисуMorher = ?(ЗначениеЗаполнено(ЛогинДоступаКСервисуMorpher), 1, 0); + УстановитьДоступностьЭлементов(); + + УстановитьПривилегированныйРежим(Истина); + Пароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(ОбщегоНазначения.ИдентификаторОбъектаМетаданных("РегистрСведений.СклоненияПредставленийОбъектов"), "ПарольДоступаКСервисуMorpher"); + УстановитьПривилегированныйРежим(Ложь); + + ПарольДоступаКСервисуMorpher = ?(ЗначениеЗаполнено(Пароль), ЭтотОбъект.УникальныйИдентификатор, ""); + + ЧастиСтроки = Новый Массив; + ЧастиСтроки.Добавить(НСтр("ru = 'Анонимное использование сервиса имеет ограничения.'")); + ЧастиСтроки.Добавить(" "); + ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока("Подробнее", , , , "http://www.morpher.ru/WebService.aspx#limitations")); + + Элементы.ИнфоНадписьДоступКСервису.Заголовок = Новый ФорматированнаяСтрока(ЧастиСтроки); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ВидДоступаКСервисуMorherПриИзменении(Элемент) + + УстановитьДоступностьЭлементов(); + + Если ВидДоступаКСервисуMorher = 0 Тогда + ЛогинДоступаКСервисуMorpher = ""; + ПарольДоступаКСервисуMorpher = ""; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ОК(Команда) + + СохранитьИзмененияНаСервере(); + Закрыть(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура ЗаписатьПарольВБезопасноеХранилищеНаСервере() + + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ОбщегоНазначения.ИдентификаторОбъектаМетаданных("РегистрСведений.СклоненияПредставленийОбъектов"), ПарольДоступаКСервисуMorpher, "ПарольДоступаКСервисуMorpher"); + ПарольДоступаКСервисуMorpher = ?(ЗначениеЗаполнено(ПарольДоступаКСервисуMorpher), ЭтотОбъект.УникальныйИдентификатор, ""); + ПарольДоступаКСервисуMorpherИзменен = Ложь; + +КонецПроцедуры + +&НаСервере +Процедура СохранитьИзмененияНаСервере() + + Константы.ЛогинДоступаКСервисуMorpher.Установить(ЛогинДоступаКСервисуMorpher); + ЗаписатьПарольВБезопасноеХранилищеНаСервере(); + + СклонениеПредставленийОбъектов.УстановитьДоступностьСервисаСклонения(Истина); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьДоступностьЭлементов() + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + Элементы, + "ЛогинДоступаКСервисуMorpher", + "Доступность", + ВидДоступаКСервисуMorher = 1); + + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + Элементы, + "ПарольДоступаКСервисуMorpher", + "Доступность", + ВидДоступаКСервисуMorher = 1); + +КонецПроцедуры + +#КонецОбласти + + + diff --git a/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/НастройкаДоступаКСервисуMorpher.mdo b/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/НастройкаДоступаКСервисуMorpher.mdo new file mode 100644 index 000000000..df9636828 --- /dev/null +++ b/SSL/src/CommonForms/НастройкаДоступаКСервисуMorpher/НастройкаДоступаКСервисуMorpher.mdo @@ -0,0 +1,15 @@ + + + НастройкаДоступаКСервисуMorpher + + ru + Настройка доступа к сервису morpher + + + + ru + + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/НастройкаКомандПечати/Form.form b/SSL/src/CommonForms/НастройкаКомандПечати/Form.form index bf266d73d..1a267a5d0 100644 --- a/SSL/src/CommonForms/НастройкаКомандПечати/Form.form +++ b/SSL/src/CommonForms/НастройкаКомандПечати/Form.form @@ -488,6 +488,10 @@ Left true + + BeforeClose + ПередЗакрытием + OnCreateAtServer ПриСозданииНаСервере diff --git a/SSL/src/CommonForms/НастройкаКомандПечати/Help/ru.html b/SSL/src/CommonForms/НастройкаКомандПечати/Help/ru.html new file mode 100644 index 000000000..f013d3480 --- /dev/null +++ b/SSL/src/CommonForms/НастройкаКомандПечати/Help/ru.html @@ -0,0 +1,13 @@ + +

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

                    +

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

                    +

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

                    +
                    • в правой части перечислены команды печати. Команды сгруппированы по спискам объектов программы; +
                    • в левой части перечисляются внешние печатные формы, которые соответствуют командам печати.

                    Изменение состава печатных форм

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

                    Переход в список

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

                    Внешние печатные формы

                    + \ No newline at end of file diff --git a/SSL/src/CommonForms/НастройкаКомандПечати/Module.bsl b/SSL/src/CommonForms/НастройкаКомандПечати/Module.bsl index 0cf7ddd37..b1debba79 100644 --- a/SSL/src/CommonForms/НастройкаКомандПечати/Module.bsl +++ b/SSL/src/CommonForms/НастройкаКомандПечати/Module.bsl @@ -14,6 +14,12 @@ КонецПроцедуры +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + ОписаниеОповещения = Новый ОписаниеОповещения("ПередЗакрытиемПодтверждениеПолучено", ЭтотОбъект); + ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияФормы(ОписаниеОповещения, Отказ); +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыКомандыПечати @@ -28,7 +34,7 @@ #Область ОбработчикиКомандФормы &НаКлиенте -Процедура ЗаписатьИЗакрыть(Команда) +Процедура ЗаписатьИЗакрыть(Команда = Неопределено) Записать(); Закрыть(); КонецПроцедуры @@ -51,11 +57,13 @@ &НаКлиенте Процедура УстановитьФлажки(Команда) ЗаполнитьЗначениеРеквизитаКоллекции(КомандыПечати, "Видимость", Истина); + Модифицированность = Истина; КонецПроцедуры &НаКлиенте Процедура СнятьФлажки(Команда) ЗаполнитьЗначениеРеквизитаКоллекции(КомандыПечати, "Видимость", Ложь); + Модифицированность = Истина; КонецПроцедуры &НаКлиенте @@ -263,5 +271,10 @@ ПерейтиПоНавигационнойСсылке(ДополнительныеПараметры.НавигационнаяСсылка); КонецПроцедуры +&НаКлиенте +Процедура ПередЗакрытиемПодтверждениеПолучено(РезультатВопроса, ДополнительныеПараметры) Экспорт + ЗаписатьИЗакрыть(); +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonForms/НастройкаКомандПечати/НастройкаКомандПечати.mdo b/SSL/src/CommonForms/НастройкаКомандПечати/НастройкаКомандПечати.mdo index 44ddac104..8b3ac17ff 100644 --- a/SSL/src/CommonForms/НастройкаКомандПечати/НастройкаКомандПечати.mdo +++ b/SSL/src/CommonForms/НастройкаКомандПечати/НастройкаКомандПечати.mdo @@ -5,6 +5,11 @@ ru Настройка команд печати + + + ru + + PersonalComputer MobileDevice diff --git a/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Form.form b/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Form.form index 9267e681f..4028bbb6c 100644 --- a/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Form.form +++ b/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Form.form @@ -4,7 +4,7 @@ ОбщаяГруппа 6 - КомандыИсточник + ВсеКоманды 7 <key>ru</key> @@ -16,7 +16,7 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>КомандыИсточник</segments> + <segments>ВсеКоманды</segments> </dataPath> <skipOnInput>false</skipOnInput> <titleLocation>Top</titleLocation> @@ -41,7 +41,7 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>КомандыИсточник.Наименование</segments> + <segments>ВсеКоманды.Наименование</segments> </dataPath> <extendedTooltip> <name>ВсеКомандыНаименованиеExtendedTooltip</name> @@ -76,16 +76,16 @@ </items> <commandBarLocation>None</commandBarLocation> <autoCommandBar> - <name>КомандыИсточникКоманднаяПанель</name> + <name>ВсеКомандыКоманднаяПанель</name> <id>9</id> <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> <searchStringAddition> - <name>КомандыИсточникСтрокаПоиска</name> + <name>ВсеКомандыСтрокаПоиска</name> <id>31</id> <extendedTooltip> - <name>КомандыИсточникСтрокаПоискаРасширеннаяПодсказка</name> + <name>ВсеКомандыСтрокаПоискаРасширеннаяПодсказка</name> <id>33</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -95,20 +95,20 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>КомандыИсточникСтрокаПоискаКонтекстноеМеню</name> + <name>ВсеКомандыСтрокаПоискаКонтекстноеМеню</name> <id>32</id> <autoFill>true</autoFill> </contextMenu> - <source>КомандыИсточник</source> + <source>ВсеКоманды</source> <extInfo xsi:type="form:SearchStringAdditionExtInfo"> <autoMaxWidth>true</autoMaxWidth> </extInfo> </searchStringAddition> <viewStatusAddition> - <name>КомандыИсточникСостояниеПросмотра</name> + <name>ВсеКомандыСостояниеПросмотра</name> <id>34</id> <extendedTooltip> - <name>КомандыИсточникСостояниеПросмотраРасширеннаяПодсказка</name> + <name>ВсеКомандыСостояниеПросмотраРасширеннаяПодсказка</name> <id>36</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -118,21 +118,21 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>КомандыИсточникСостояниеПросмотраКонтекстноеМеню</name> + <name>ВсеКомандыСостояниеПросмотраКонтекстноеМеню</name> <id>35</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> - <source>КомандыИсточник</source> + <source>ВсеКоманды</source> <extInfo xsi:type="form:ViewStatusAdditionExtInfo"> <autoMaxWidth>true</autoMaxWidth> </extInfo> </viewStatusAddition> <searchControlAddition> - <name>КомандыИсточникУправлениеПоиском</name> + <name>ВсеКомандыУправлениеПоиском</name> <id>37</id> <extendedTooltip> - <name>КомандыИсточникУправлениеПоискомРасширеннаяПодсказка</name> + <name>ВсеКомандыУправлениеПоискомРасширеннаяПодсказка</name> <id>39</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -142,18 +142,18 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>КомандыИсточникУправлениеПоискомКонтекстноеМеню</name> + <name>ВсеКомандыУправлениеПоискомКонтекстноеМеню</name> <id>38</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> - <source>КомандыИсточник</source> + <source>ВсеКоманды</source> <extInfo xsi:type="form:SearchControlAdditionExtInfo"> <autoMaxWidth>true</autoMaxWidth> </extInfo> </searchControlAddition> <extendedTooltip> - <name>КомандыИсточникExtendedTooltip</name> + <name>ВсеКомандыРасширеннаяПодсказка</name> <id>22</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -163,7 +163,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>КомандыИсточникКонтекстноеМеню</name> + <name>ВсеКомандыКонтекстноеМеню</name> <id>8</id> <autoFill>true</autoFill> </contextMenu> @@ -619,10 +619,6 @@ </items> <horizontalAlign>Right</horizontalAlign> </autoCommandBar> - <handlers> - <event>BeforeClose</event> - <name>ПередЗакрытием</name> - </handlers> <handlers> <event>OnCreateAtServer</event> <name>ПриСозданииНаСервере</name> @@ -725,10 +721,10 @@ </columns> </attributes> <attributes> - <name>КомандыИсточник</name> + <name>ВсеКоманды</name> <title> <key>ru</key> - <value>Команды источник</value> + <value>Все команды</value> 2 diff --git a/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Module.bsl b/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Module.bsl index e690b4afc..85d8545a8 100644 --- a/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Module.bsl +++ b/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Module.bsl @@ -1,4 +1,3 @@ - #Область ОбработчикиСобытийФормы &НаСервере @@ -10,18 +9,10 @@ ЗаполнитьЗначенияСвойств(ЭтотОбъект, Параметры, "ВидОбработок, ЭтоГлобальныеОбработки, ТекущийРаздел"); ЗаполнитьДеревоОбработок(Истина, "МоиКоманды"); - ЗаполнитьДеревоОбработок(Ложь, "КомандыИсточник"); + ЗаполнитьДеревоОбработок(Ложь, "ВсеКоманды"); КонецПроцедуры -&НаКлиенте -Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) - ТекстВопроса = НСтр("ru = 'Список выводимых команд был изменен. - |Сохранить изменения?'"); - Обработчик = Новый ОписаниеОповещения("СохранитьИОповеститьОВыборе", ЭтотОбъект); - ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияФормы(Обработчик, Отказ, ТекстВопроса); -КонецПроцедуры - #КонецОбласти #Область ОбработчикиКомандФормы @@ -29,7 +20,7 @@ &НаКлиенте Процедура ДобавитьКоманду(Команда) - ТекущиеДанные = Элементы.КомандыИсточник.ТекущиеДанные; + ТекущиеДанные = Элементы.ВсеКоманды.ТекущиеДанные; Если ТекущиеДанные <> Неопределено И НЕ ПустаяСтрока(ТекущиеДанные.Идентификатор) Тогда ДобавитьКомандуСервер(ТекущиеДанные.Обработка, ТекущиеДанные.Идентификатор); @@ -52,13 +43,12 @@ Процедура ДобавитьВсеКоманды(Команда) Если ЭтоГлобальныеОбработки Тогда - КомандыИсточникЭлементы = КомандыИсточник.ПолучитьЭлементы(); - - Для Каждого СтрокаРазделы Из КомандыИсточникЭлементы Цикл + ВсеРазделы = ВсеКоманды.ПолучитьЭлементы(); + Для Каждого СтрокаРазделы Из ВсеРазделы Цикл ЭлементРаздел = НайтиЭлементРаздел(МоиКоманды, СтрокаРазделы.Раздел, СтрокаРазделы.Наименование); ЭлементыКоманды = СтрокаРазделы.ПолучитьЭлементы(); Для Каждого ЭлементКоманда Из ЭлементыКоманды Цикл - НоваяКоманда = НайтиЭлементКоманду(ЭлементРаздел.ПолучитьЭлементы(), ЭлементКоманда.Идентификатор); + НоваяКоманда = НайтиЭлементКоманду(ЭлементРаздел.ПолучитьЭлементы(), ЭлементКоманда.Идентификатор, ЭлементКоманда.Обработка); ЗаполнитьЗначенияСвойств(НоваяКоманда, ЭлементКоманда); КонецЦикла; КонецЦикла; @@ -85,14 +75,6 @@ #Область СлужебныеПроцедурыИФункции -&НаКлиенте -Процедура СохранитьИОповеститьОВыборе(Результат, ДополнительныеПараметры) Экспорт - - ЗаписатьНаборОбработокПользователя(); - ОповеститьОВыборе("ВыполненаНастройкаМоихОтчетовИОбработок"); - -КонецПроцедуры - &НаСервере Функция ЗаполнитьДеревоОбработок(КомандыПользователя, ИмяЭлементыРеквизитаДерева) @@ -118,6 +100,7 @@ | ДопОтчетыИОбработки.Вид = &ВидОбработок | И НЕ ДопОтчетыИОбработки.ПометкаУдаления | И ДопОтчетыИОбработки.Публикация В(&ВариантыПубликации) + | И ТаблицаКоманды.ВариантЗапуска В (&ТипыКоманд) | И БыстрыйДоступ.Доступно |ИТОГИ ПО | &ИтогиПоРаздел"; @@ -146,8 +129,15 @@ ВариантыПубликации.Добавить(Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки); КонецЕсли; + ТипыКоманд = Новый Массив; + ТипыКоманд.Добавить(Перечисления.СпособыВызоваДополнительныхОбработок.ВызовКлиентскогоМетода); + ТипыКоманд.Добавить(Перечисления.СпособыВызоваДополнительныхОбработок.ВызовСерверногоМетода); + ТипыКоманд.Добавить(Перечисления.СпособыВызоваДополнительныхОбработок.ОткрытиеФормы); + ТипыКоманд.Добавить(Перечисления.СпособыВызоваДополнительныхОбработок.СценарийВБезопасномРежиме); + Запрос.УстановитьПараметр("Пользователь", ПользователиКлиентСервер.АвторизованныйПользователь()); Запрос.УстановитьПараметр("ВариантыПубликации", ВариантыПубликации); + Запрос.УстановитьПараметр("ТипыКоманд", ТипыКоманд); Запрос.УстановитьПараметр("ВидОбработок", ВидОбработок); Запрос.Текст = ТекстЗапроса; @@ -205,10 +195,10 @@ Возврат; КонецЕсли; - КомандыИсточникДерево = РеквизитФормыВЗначение("КомандыИсточник"); + КомандыИсточникДерево = РеквизитФормыВЗначение("ВсеКоманды"); НайденныеСтроки = КомандыИсточникДерево.Строки.НайтиСтроки(Новый Структура("Обработка,Идентификатор", Обработка, Идентификатор), Истина); - - Если ЭтоГлобальныеОбработки Тогда + + Если ЭтоГлобальныеОбработки Тогда Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл ЭлементРаздел = НайтиЭлементРаздел(МоиКоманды, НайденнаяСтрока.Раздел, НайденнаяСтрока.Родитель.Наименование); НоваяКоманда = ЭлементРаздел.ПолучитьЭлементы().Добавить(); @@ -224,7 +214,7 @@ &НаСервере Процедура ДобавитьВсеКомандыСервер() - ЗначениеВРеквизитФормы(РеквизитФормыВЗначение("КомандыИсточник"), "МоиКоманды"); + ЗначениеВРеквизитФормы(РеквизитФормыВЗначение("ВсеКоманды"), "МоиКоманды"); КонецПроцедуры @@ -280,46 +270,29 @@ &НаКлиентеНаСервереБезКонтекста Функция НайтиЭлементРаздел(ДанныеФормыКоманды, Раздел, Наименование) - - Результат = Неопределено; - Для Каждого ЭлементДанных Из ДанныеФормыКоманды.ПолучитьЭлементы() Цикл Если ЭлементДанных.Раздел = Раздел Тогда - Результат = ЭлементДанных; - Прервать; + Возврат ЭлементДанных; КонецЕсли; КонецЦикла; - Если Результат = Неопределено Тогда - НовыйРаздел = ДанныеФормыКоманды.ПолучитьЭлементы().Добавить(); - НовыйРаздел.Раздел = Раздел; - НовыйРаздел.Наименование = Наименование; - Результат = НовыйРаздел; - КонецЕсли; - - Возврат Результат; - + НовыйРаздел = ДанныеФормыКоманды.ПолучитьЭлементы().Добавить(); + НовыйРаздел.Раздел = Раздел; + НовыйРаздел.Наименование = Наименование; + Возврат НовыйРаздел; КонецФункции &НаКлиентеНаСервереБезКонтекста -Функция НайтиЭлементКоманду(ДанныеФормыКоллекцияЭлементовДерева, Идентификатор) - - Результат = Неопределено; - +Функция НайтиЭлементКоманду(ДанныеФормыКоллекцияЭлементовДерева, Идентификатор, Обработка) Для Каждого ЭлементДанных Из ДанныеФормыКоллекцияЭлементовДерева Цикл - Если ЭлементДанных.Идентификатор = Идентификатор Тогда - Результат = ЭлементДанных; - Прервать; + Если ЭлементДанных.Идентификатор = Идентификатор И ЭлементДанных.Обработка = Обработка Тогда + Возврат ЭлементДанных; КонецЕсли; КонецЦикла; - - Если Результат = Неопределено Тогда - НовыйРаздел = ДанныеФормыКоллекцияЭлементовДерева.Добавить(); - Результат = НовыйРаздел; - КонецЕсли; - - Возврат Результат; - + ЭлементДанных = ДанныеФормыКоллекцияЭлементовДерева.Добавить(); + ЭлементДанных.Идентификатор = Идентификатор; + ЭлементДанных.Обработка = Обработка; + Возврат ЭлементДанных; КонецФункции //////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/Help/ru.html b/SSL/src/CommonForms/НастройкаОсновногоРабочегоКаталога/Help/ru.html index 05f1e3877..0de2e174d 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/НастройкаОтправкиSMS/Help/ru.html b/SSL/src/CommonForms/НастройкаОтправкиSMS/Help/ru.html index 037e38524..d1c4ead83 100644 --- a/SSL/src/CommonForms/НастройкаОтправкиSMS/Help/ru.html +++ b/SSL/src/CommonForms/НастройкаОтправкиSMS/Help/ru.html @@ -1,4 +1,4 @@ - +

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

                    Открывается по команде Настройка отправки SMS раздела Администрирование - Органайзер.

                    С помощью SMS можно организовать:

                    diff --git a/SSL/src/CommonForms/НастройкиВходаПользователей/Form.form b/SSL/src/CommonForms/НастройкиВходаПользователей/Form.form index 696f46e7b..d6742916d 100644 --- a/SSL/src/CommonForms/НастройкиВходаПользователей/Form.form +++ b/SSL/src/CommonForms/НастройкиВходаПользователей/Form.form @@ -1102,6 +1102,10 @@
                    Left + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере @@ -1355,6 +1359,24 @@ true + + ТекстВопросаОбОчисткеНастроекКонфигуратора + + <key>ru</key> + <value>Текст вопроса об очистке настроек конфигуратора</value> + + 22 + + String + + + + true + + + true + + ЗаписатьИЗакрыть diff --git a/SSL/src/CommonForms/НастройкиВходаПользователей/Help/ru.html b/SSL/src/CommonForms/НастройкиВходаПользователей/Help/ru.html index 2cf86f2f0..d0eda5001 100644 --- a/SSL/src/CommonForms/НастройкиВходаПользователей/Help/ru.html +++ b/SSL/src/CommonForms/НастройкиВходаПользователей/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для настройки параметров входа в программу раздельно для <a href="Catalog.Пользователи/Help">внутренних</a> и <a href="Catalog.ВнешниеПользователи/Help">внешних пользователей</a>.</p> <h3>Требования к паролю</h3> <p>Для защиты от несанкционированного доступа к программе укажите с помощью флажков:</p> diff --git a/SSL/src/CommonForms/НастройкиВходаПользователей/Module.bsl b/SSL/src/CommonForms/НастройкиВходаПользователей/Module.bsl index 6bb8c65cc..3ccbbf921 100644 --- a/SSL/src/CommonForms/НастройкиВходаПользователей/Module.bsl +++ b/SSL/src/CommonForms/НастройкиВходаПользователей/Module.bsl @@ -34,6 +34,39 @@ КонецЕсли; КонецЦикла; + Если ПолучитьПроверкуСложностиПаролейПользователей() Тогда + ТекстВопросаОбОчисткеНастроекКонфигуратора = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Установлена минимальная длина паролей %1 и требование сложности паролей в конфигураторе + |в меню ""Администрирование"" в пункте ""Параметры информационной базы ..."". + | + |Требуется очистить минимальную длину и требование сложности пароля, заданные в конфигураторе, + |чтобы корректно использовать настройки входа.'"), + ПолучитьМинимальнуюДлинуПаролейПользователей()); + + ИначеЕсли ПолучитьМинимальнуюДлинуПаролейПользователей() > 0 Тогда + ТекстВопросаОбОчисткеНастроекКонфигуратора = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Установлена минимальная длина паролей %1 в конфигураторе + |в меню ""Администрирование"" в пункте ""Параметры информационной базы ..."". + | + |Требуется очистить минимальную длину, заданную в конфигураторе, + |чтобы корректно использовать настройки входа.'"), + ПолучитьМинимальнуюДлинуПаролейПользователей()); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если ЗначениеЗаполнено(ТекстВопросаОбОчисткеНастроекКонфигуратора) Тогда + Отказ = Истина; + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("Очистить", НСтр("ru = 'Очистить'")); + Кнопки.Добавить("Отмена", НСтр("ru = 'Отмена'")); + ПоказатьВопрос(Новый ОписаниеОповещения("ПриОткрытииПослеОтветаНаВопрос", ЭтотОбъект), + ТекстВопросаОбОчисткеНастроекКонфигуратора, Кнопки); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -90,6 +123,22 @@ #Область СлужебныеПроцедурыИФункции +// Продолжение процедуры ПриОткрытии. +&НаКлиенте +Процедура ПриОткрытииПослеОтветаНаВопрос(Ответ, Контекст) Экспорт + + Если Ответ <> "Очистить" Тогда + Возврат; + КонецЕсли; + + ТекстВопросаОбОчисткеНастроекКонфигуратора = ""; + + ОчиститьНастройкиКонфигуратора(); + + Открыть(); + +КонецПроцедуры + &НаСервере Процедура ЗаписатьНаСервере() @@ -145,4 +194,23 @@ КонецПроцедуры +&НаСервере +Процедура ОчиститьНастройкиКонфигуратора() + + НачатьТранзакцию(); + Попытка + Если ПолучитьМинимальнуюДлинуПаролейПользователей() <> 0 Тогда + УстановитьМинимальнуюДлинуПаролейПользователей(0); + КонецЕсли; + Если ПолучитьПроверкуСложностиПаролейПользователей() Тогда + УстановитьПроверкуСложностиПаролейПользователей(Ложь); + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonForms/НастройкиПроверкиКонтрагентов/Form.form b/SSL/src/CommonForms/НастройкиПроверкиКонтрагентов/Form.form index f8127bb7c..5a06d5a37 100644 --- a/SSL/src/CommonForms/НастройкиПроверкиКонтрагентов/Form.form +++ b/SSL/src/CommonForms/НастройкиПроверкиКонтрагентов/Form.form @@ -11,42 +11,46 @@ <name>ЛеваяКолонкаПервойГруппы</name> <id>129</id> <items xsi:type="form:FormField"> - <name>ИспользоватьСервис</name> - <id>6</id> + <name>ИспользоватьАвтоматическуюПроверкуКонтрагентов</name> + <id>156</id> + <title> + <key>ru</key> + <value>Автоматически проверять контрагентов по ЕГРН</value> + true true true - ИспользоватьСервисПроверкиКонтрагентов + ПроверкаКонтрагентовВключена Right ShowBottom OnChange - ФлажокМеханизмВключенПриИзменении + ИспользоватьАвтоматическуюПроверкуКонтрагентов - ИспользоватьСервисРасширеннаяПодсказка - 8 + ИспользоватьАвтоматическуюПроверкуКонтрагентовРасширеннаяПодсказка + 158 <key>ru</key> - <value>Проверка регистрации контрагентов в ЕГРН (Едином государственном реестре налогоплательщиков) + <value><color #807a59>Включение автоматической проверки может замедлить открытие документов на медленных компьютерах. Для таких компьютеров рекомендуется использовать ручную проверку по кнопке в подменю Еще.</> <link e1cib/app/Обработка.ИнструкцияПоИспользованиюПроверкиКонтрагента>Подробнее о сервисе</></value> true Label true - 3 + 4 true Left - ИспользоватьСервисКонтекстноеМеню - 7 + ИспользоватьАвтоматическуюПроверкуКонтрагентовКонтекстноеМеню + 157 true CheckBoxField @@ -94,6 +98,33 @@ ПраваяКолонкаПервойГруппы 131 + + ПроверитьДоступКСервису + 135 + true + true + + true + + + ПроверитьДоступКСервисуРасширеннаяПодсказка + 136 + Label + true + true + + Left + + + UsualButton + Form.Command.ПроверитьДоступКСервису + Normal + Auto + true + true + UserCmds + Auto + ПредупреждениеПроТестовыйРежимПроверкиКонтрагента 121 @@ -134,33 +165,6 @@
                    - - ПроверитьДоступКСервису - 135 - true - true - - true - - - ПроверитьДоступКСервисуРасширеннаяПодсказка - 136 - Label - true - true - - Left - - - UsualButton - Form.Command.ПроверитьДоступКСервису - Normal - Auto - true - true - UserCmds - Auto - true true @@ -263,7 +267,7 @@ auto true - ИспользоватьСервисПроверкиКонтрагентов + ПроверкаКонтрагентовВключена <key>ru</key> <value>Проверять контрагентов с помощью веб-сервиса ФНС</value> diff --git a/SSL/src/CommonForms/НастройкиПроверкиКонтрагентов/Module.bsl b/SSL/src/CommonForms/НастройкиПроверкиКонтрагентов/Module.bsl index f5f668bfe..ef730f55b 100644 --- a/SSL/src/CommonForms/НастройкиПроверкиКонтрагентов/Module.bsl +++ b/SSL/src/CommonForms/НастройкиПроверкиКонтрагентов/Module.bsl @@ -8,9 +8,11 @@ Возврат; КонецЕсли; - ИспользоватьСервисПроверкиКонтрагентов = ПроверкаКонтрагентов.ПроверкаКонтрагентовВключена(); - ПроверкаКонтрагентов.УстановитьВидимостьИЗаголовокПредупрежденияПроТестовыйРежим(Элементы.ПредупреждениеПроТестовыйРежимПроверкиКонтрагента); + ПроверкаКонтрагентовВключена = ПроверкаКонтрагентов.ПроверкаКонтрагентовВключена(); + ПроверкаКонтрагентов.УстановитьВидимостьИЗаголовокПредупрежденияПроТестовыйРежим( + Элементы.ПредупреждениеПроТестовыйРежимПроверкиКонтрагента); + КонецПроцедуры #КонецОбласти @@ -18,9 +20,9 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте -Процедура ФлажокМеханизмВключенПриИзменении(Элемент) +Процедура ИспользоватьАвтоматическуюПроверкуКонтрагентов(Элемент) - ПроверкаКонтрагентовВызовСервера.ПриВключенииВыключенииПроверки(ИспользоватьСервисПроверкиКонтрагентов); + ПроверкаКонтрагентовВызовСервера.ПриВключенииВыключенииПроверки(ПроверкаКонтрагентовВключена); КонецПроцедуры diff --git a/SSL/src/CommonForms/НастройкиРегистрацииСобытийДоступаКПерсональнымДанным/Help/ru.html b/SSL/src/CommonForms/НастройкиРегистрацииСобытийДоступаКПерсональнымДанным/Help/ru.html index 5ad4640e8..23844dcba 100644 --- a/SSL/src/CommonForms/НастройкиРегистрацииСобытийДоступаКПерсональнымДанным/Help/ru.html +++ b/SSL/src/CommonForms/НастройкиРегистрацииСобытийДоступаКПерсональнымДанным/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для настройки регистрации событий доступа к персональным данным.</p> <p>Открывается по команде <strong>Регистрация событий доступа к персональным данным</strong> из раздела <strong>Поддержка и обслуживание - Администрирование</strong>.</p> <p>Регистрация почти всех событий (кроме событий доступа к персональным данным в программе выполняются по умолчанию). </p> diff --git a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Form.form b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Form.form index a216cfe1d..22a559aa9 100644 --- a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Form.form +++ b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Form.form @@ -840,6 +840,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1696,6 +1697,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1800,6 +1802,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -2028,6 +2031,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -2213,6 +2217,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -2763,6 +2768,41 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>LinuxПутьКТекущейПрограмме</name> + <title> + <key>ru</key> + <value>Linux путь к текущей программе</value> + + 12 + + String + + + + true + + + true + + + + БезПраваСохранениеДанныхПользователя + + <key>ru</key> + <value>Без права сохранение данных пользователя</value> + + 13 + + Boolean + + + true + + + true + + Обновить @@ -2772,7 +2812,7 @@ <id>1</id> <toolTip> <key>ru</key> - <value>Обновить настройки и список программ с результами их проверки</value> + <value>Обновить настройки и список программ с результатами их проверки</value> </toolTip> <use> <common>true</common> diff --git a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Help/ru.html b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Help/ru.html index 08e66b269..8476eb518 100644 --- a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Help/ru.html +++ b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></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 11.00.9600.18427"></meta></head><body> <p>Настройка параметров для использования средств электронной подписи и шифрования (криптографии). </p> <p>Открывается по команде <strong>Настройки электронной подписи и шифрования</strong> раздела <strong>Администрирование - Общие настройки</strong>.</p> <p>Для электронной подписи и шифрования требуется установить специальную стороннюю программу (криптопровайдер).</p> diff --git a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl index d69904495..4b4951c89 100644 --- a/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl +++ b/SSL/src/CommonForms/НастройкиЭлектроннойПодписиИШифрования/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ПроверкаПрограммВыполнялась; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -13,9 +17,8 @@ КонецЕсли; Если Не ПравоДоступа("СохранениеДанныхПользователя", Метаданные) Тогда - ТекстОшибки = НСтр("ru = 'Отсутствует право сохранения данных. Обратитесь к администратору.'"); - // Отказ устанавливается в ПриОткрытии. - Возврат; + Элементы.СтраницаНастройки.Видимость = Ложь; + БезПраваСохранениеДанныхПользователя = Истина; КонецЕсли; ЭтоПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь(); @@ -96,12 +99,6 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - Если ЗначениеЗаполнено(ТекстОшибки) Тогда - Отказ = Истина; - ПоказатьПредупреждение(, ТекстОшибки); - Возврат; - КонецЕсли; - ОпределитьУстановленныеПрограммы(); КонецПроцедуры @@ -251,6 +248,10 @@ Элементы.ПрограммыУстановитьПометкуУдаления.Доступность = Элементы.Программы.ТекущиеДанные <> Неопределено; + Если Элементы.Программы.ТекущиеДанные <> Неопределено Тогда + LinuxПутьКТекущейПрограмме = Элементы.Программы.ТекущиеДанные.LinuxПутьКПрограмме; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -294,9 +295,15 @@ Возврат; КонецЕсли; - СохранитьПутьLinuxНаСервере(ТекущиеДанные.Ссылка, ТекущиеДанные.LinuxПутьКПрограмме); - - ОпределитьУстановленныеПрограммы(); + Если БезПраваСохранениеДанныхПользователя Тогда + ТекущиеДанные.LinuxПутьКПрограмме = LinuxПутьКТекущейПрограмме; + ПоказатьПредупреждение(, + НСтр("ru = 'Невозможно сохранить путь к программе. Отсутствует право сохранения данных. + |Обратитесь к администратору.'")); + Иначе + СохранитьПутьLinuxНаСервере(ТекущиеДанные.Ссылка, ТекущиеДанные.LinuxПутьКПрограмме); + ОпределитьУстановленныеПрограммы(); + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonForms/НовыйПароль/Form.form b/SSL/src/CommonForms/НовыйПароль/Form.form new file mode 100644 index 000000000..00435e4cf --- /dev/null +++ b/SSL/src/CommonForms/НовыйПароль/Form.form @@ -0,0 +1,173 @@ +<?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:Decoration"> + <name>ПояснениеКНовомуПаролю</name> + <id>5</id> + <title> + <key>ru</key> + <value>Запомните новый пароль или скопируйте в буфер обмена.</value> + + true + true + + true + + + ПояснениеКНовомуПаролюРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + ПояснениеКНовомуПаролюКонтекстноеМеню + 6 + true + + Label + true + true + true + + Style.ПоясняющийТекст + + + Center + +
                    + + НовыйПароль + 8 + true + true + + true + + + НовыйПароль + + None + + НовыйПарольРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + НовыйПарольКонтекстноеМеню + 9 + true + + InputField + true + Center + Enter + true + Left + true + + true + true + true + true + true + true + + Style.FormBackColor + + Normal + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаЗакрыть + 3 + true + true + + true + + + ФормаЗакрытьРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + Form.StandardCommand.Close + true + true + true + UserCmds + Auto + + Center + + + OnCreateAtServer + ПриСозданииНаСервере + + Abort + Cancel + CustomizeForm + Help + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + НовыйПароль + + <key>ru</key> + <value>Новый пароль</value> + + 1 + + String + + + + true + + + true + + + + ДляВнешнегоПользователя + + Boolean + + + + + + +
                    diff --git a/SSL/src/CommonForms/НовыйПароль/Module.bsl b/SSL/src/CommonForms/НовыйПароль/Module.bsl new file mode 100644 index 000000000..60c81ee2a --- /dev/null +++ b/SSL/src/CommonForms/НовыйПароль/Module.bsl @@ -0,0 +1,29 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.ДляВнешнегоПользователя Тогда + НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().ВнешниеПользователи; + Иначе + НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().Пользователи; + КонецЕсли; + + МинимальнаяДлинаПароля = ПолучитьМинимальнуюДлинуПаролейПользователей(); + + Если МинимальнаяДлинаПароля < НастройкиВхода.МинимальнаяДлинаПароля Тогда + МинимальнаяДлинаПароля = НастройкиВхода.МинимальнаяДлинаПароля; + КонецЕсли; + + Если МинимальнаяДлинаПароля <= 8 Тогда + МинимальнаяДлинаПароля = 8; + КонецЕсли; + + ПараметрыПароля = ПользователиСлужебный.ПараметрыПароля(МинимальнаяДлинаПароля, Истина); + + НовыйПароль = ПользователиСлужебный.СоздатьПароль(ПараметрыПароля); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonForms/НовыйПароль/НовыйПароль.mdo b/SSL/src/CommonForms/НовыйПароль/НовыйПароль.mdo new file mode 100644 index 000000000..de6129cb2 --- /dev/null +++ b/SSL/src/CommonForms/НовыйПароль/НовыйПароль.mdo @@ -0,0 +1,10 @@ + + + НовыйПароль + + ru + Новый пароль + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Help/ru.html b/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Help/ru.html index 0b75129cc..7edb21b4c 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 4b6e900ae..7b57d1275 100644 --- a/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Module.bsl +++ b/SSL/src/CommonForms/ОписаниеИзмененийПрограммы/Module.bsl @@ -26,7 +26,16 @@ Если ДокументОписаниеОбновлений <> Неопределено И (ПоследняяВерсия = Неопределено Или Не Параметры.ПоказыватьТолькоИзменения) Тогда - ДокументОписаниеОбновлений = ПолучитьОбщийМакет(ДокументОписаниеОбновлений); + ВсеРазделы = Константы.РазделыОписанияИзмененийСистемы.Получить().Получить(); + Если ТипЗнч(ВсеРазделы) = Тип("СписокЗначений") + И ВсеРазделы.Количество() <> 0 Тогда + Для Каждого Элемент Из ВсеРазделы Цикл + Разделы.Добавить(Элемент.Представление); + КонецЦикла; + ДокументОписаниеОбновлений = ОбновлениеИнформационнойБазыСлужебный.ДокументОписаниеОбновлений(Разделы); + Иначе + ДокументОписаниеОбновлений = ПолучитьОбщийМакет(ДокументОписаниеОбновлений); + КонецЕсли; Иначе ДокументОписаниеОбновлений = Новый ТабличныйДокумент(); КонецЕсли; @@ -168,7 +177,7 @@ КонецПроцедуры &НаКлиенте -Процедура ОтключеныРегламентныеЗаданияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) +Процедура ОтключеныРегламентныеЗаданияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Оповещение = Новый ОписаниеОповещения("ОтключеныРегламентныеЗаданияОбработкаНавигационнойСсылкиЗавершение", ЭтотОбъект); diff --git a/SSL/src/CommonForms/ОтправкаSMS/Form.form b/SSL/src/CommonForms/ОтправкаSMS/Form.form index 90971209a..ecdecf2f1 100644 --- a/SSL/src/CommonForms/ОтправкаSMS/Form.form +++ b/SSL/src/CommonForms/ОтправкаSMS/Form.form @@ -342,6 +342,7 @@ Vertical auto + false @@ -573,6 +574,7 @@ Page auto + false true @@ -687,6 +689,32 @@ UserCmds Auto + + Справка + 81 + true + true + + true + + + СправкаРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + true true diff --git a/SSL/src/CommonForms/ОтправкаSMS/Help/ru.html b/SSL/src/CommonForms/ОтправкаSMS/Help/ru.html index dc037afff..2a95400fa 100644 --- a/SSL/src/CommonForms/ОтправкаSMS/Help/ru.html +++ b/SSL/src/CommonForms/ОтправкаSMS/Help/ru.html @@ -1,4 +1,4 @@ - +

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

                    Открывается из карточек объектов программы (партнеров, организаций и т.п.) с помощью кнопки  - Отправить SMS.

                    Для отправки SMS необходимо заключить договор с одним из операторов сотовой связи (МТС или Билайн), указав в настройках отправки SMS полученные регистрационные данные.

                    diff --git a/SSL/src/CommonForms/ОтправкаСообщения/Form.form b/SSL/src/CommonForms/ОтправкаСообщения/Form.form index 12cff6a92..434d4b64f 100644 --- a/SSL/src/CommonForms/ОтправкаСообщения/Form.form +++ b/SSL/src/CommonForms/ОтправкаСообщения/Form.form @@ -44,6 +44,10 @@ Left true + + StartChoice + ЭлектронныйАдресКомуНачалоВыбора + true true true @@ -97,6 +101,38 @@ Normal + + КоманднаяПанельФорматирование + 79 + true + true + + true + + + <key>ru</key> + <value>Командная панель форматирование</value> + + + ru + Командная панель форматирование + + + КоманднаяПанельФорматированиеРасширеннаяПодсказка + 80 + Label + true + true + + Left + + + CommandBar + + Left + Item.ТелоПисьма + + ТелоПисьма 22 @@ -128,16 +164,15 @@ 23 true - TextDocumentField + FormattedDocumentField Enter true Left true - + 50 true 10 - true true true @@ -529,7 +564,6 @@ ru Вложения - ГруппаВложенияExtendedTooltip 55 @@ -614,10 +648,6 @@ Left true - - StartChoice - УчетнаяЗаписьНачалоВыбора - ChoiceProcessing УчетнаяЗаписьОбработкаВыбора @@ -636,6 +666,12 @@ + + Отбор.ПометкаУдаления + + + + Normal @@ -720,7 +756,6 @@ UsualGroup - Vertical Auto NormalSeparation true @@ -791,6 +826,10 @@ Left true + + ChoiceProcessing + ОбработкаВыбора + OnOpen ПриОткрытии @@ -833,8 +872,7 @@ ТелоПисьма 2 - String - + FormattedDocument true @@ -1040,23 +1078,6 @@ - - УчетнаяЗаписьУказана - - <key>ru</key> - <value>Учетная запись указана</value> - - 12 - - Boolean - - - true - - - true - - Вложения @@ -1145,6 +1166,42 @@ <common>true</common> </edit> </columns> + <columns> + <name>Идентификатор</name> + <title> + <key>ru</key> + <value>Идентификатор</value> + + 5 + + String + + + + true + + + true + + + + + ПолучателиСообщения + + <key>ru</key> + <value>Получатели сообщения</value> + + 14 + + String + + + + true + + + true + ОтправитьПисьмо diff --git a/SSL/src/CommonForms/ОтправкаСообщения/Help/ru.html b/SSL/src/CommonForms/ОтправкаСообщения/Help/ru.html index 8a97e7b25..936a49eea 100644 --- a/SSL/src/CommonForms/ОтправкаСообщения/Help/ru.html +++ b/SSL/src/CommonForms/ОтправкаСообщения/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

                    Написание электронного сообщения

                    @@ -7,7 +7,7 @@
                  • Иванов ivanov@server - полная запись почтового адреса состоит из имени адресата и адреса почтового ящика;
                  • ivanov (почтовый сервер при этом должен уметь сопоставлять данный краткий адрес полному).
                • Заполните поле Тема;
                  -
                • Напишите текст письма; +
                • Напишите текст письма. Для форматирования текста можно использовать стандартные команды форматирования. Часть наиболее используемых выведена над текстом письма в виде значков, остальные можно найти в меню Еще;
                • Для того чтобы вложить в почтовое сообщение дополнительный файлы, нажмите  Приложить файл.
                  • Для удаления вложения выделите его и нажмите клавишу Del.
                • Автоматически программой будет предложена учетная запись, настроенная для автоматического получения и отправки писем.
                • В поле Адрес ответа можно задать e-mail адрес, на который получатели письма будут отправлять ответ. Это поле нужно заполнять в том случае, если входящая корреспонденция системной учетной записи не просматривается (например, если учетная запись предназначена только для отправки).

                Отправка

                diff --git a/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl b/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl index d3e733d17..94de84f2c 100644 --- a/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl +++ b/SSL/src/CommonForms/ОтправкаСообщения/Module.bsl @@ -1,6 +1,3 @@ -&НаКлиенте -Перем ПриведенныйПочтовыйАдрес; - #Область ОбработчикиСобытийФормы // Заполняет поля формы по переданным в форму параметрам. @@ -27,7 +24,7 @@ КонецЕсли; ТемаПисьма = Параметры.Тема; - ТелоПисьма = Параметры.Тело; + ТелоПисьма.УстановитьHTML(ТекстВHTML(Параметры.Тело), Новый Структура); АдресОтвета = Параметры.АдресОтвета; Если ТипЗнч(Параметры.Вложения) = Тип("СписокЗначений") Или ТипЗнч(Параметры.Вложения) = Тип("Массив") Тогда @@ -55,7 +52,7 @@ КонецЕсли; // Обработка сложных параметров формы (составного типа). - // УчетнаяЗапись, Кому + // УчетнаяЗапись, Кому. Если НЕ ЗначениеЗаполнено(Параметры.УчетнаяЗапись) Тогда // Учетная запись не передана - выбираем первую доступную. @@ -70,7 +67,6 @@ ИначеЕсли ТипЗнч(Параметры.УчетнаяЗапись) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") Тогда УчетнаяЗапись = Параметры.УчетнаяЗапись; - УчетнаяЗаписьУказана = Истина; ИначеЕсли ТипЗнч(Параметры.УчетнаяЗапись) = Тип("СписокЗначений") Тогда НаборУчетныхЗаписей = Параметры.УчетнаяЗапись; @@ -95,12 +91,7 @@ // Для переданного списка учетных записей выбираем их из списка выбора. Элементы.УчетнаяЗапись.КнопкаВыпадающегоСписка = Истина; - - УчетнаяЗаписьУказана = Истина; - - Если Элементы.УчетнаяЗапись.СписокВыбора.Количество() <= 1 Тогда - Элементы.УчетнаяЗапись.Видимость = Ложь; - КонецЕсли; + КонецЕсли; Если ТипЗнч(Параметры.Кому) = Тип("СписокЗначений") Тогда @@ -121,17 +112,29 @@ ИначеЕсли ТипЗнч(Параметры.Кому) = Тип("Строка") Тогда ПочтовыйАдресПолучателя = Параметры.Кому; ИначеЕсли ТипЗнч(Параметры.Кому) = Тип("Массив") Тогда + Если Параметры.Кому.Количество() > 1 Тогда + Элементы.ЭлектронныйАдресКому.КнопкаВыбора = Истина; + КонецЕсли; Для Каждого СтруктураПолучателя Из Параметры.Кому Цикл + ЕстьСвойствоВыбран = СтруктураПолучателя.Свойство("Выбран"); МассивАдресов = СтрРазделить(СтруктураПолучателя.Адрес, ";"); Для Каждого Адрес Из МассивАдресов Цикл Если ПустаяСтрока(Адрес) Тогда Продолжить; КонецЕсли; - ПочтовыйАдресПолучателя = ПочтовыйАдресПолучателя + СтруктураПолучателя.Представление + " <" + СокрЛП(Адрес) + ">; "; + Если (ЕстьСвойствоВыбран И СтруктураПолучателя.Выбран) ИЛИ (НЕ ЕстьСвойствоВыбран) Тогда + ПочтовыйАдресПолучателя = ПочтовыйАдресПолучателя + СтруктураПолучателя.Представление + " <" + СокрЛП(Адрес) + ">; "; + КонецЕсли; КонецЦикла; КонецЦикла; КонецЕсли; + Если ТипЗнч(Параметры.Кому) = Тип("Массив") Тогда + ПолучателиСообщения = ПоместитьВоВременноеХранилище(Параметры.Кому, УникальныйИдентификатор); + Иначе + ПолучателиСообщения = ПоместитьВоВременноеХранилище(Новый Массив, УникальныйИдентификатор); + КонецЕсли; + // Получаем список адресов, которые пользователь использовал ранее. СписокАдресовОтвета = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "РедактированиеНовогоПисьма", @@ -170,21 +173,19 @@ КонецПроцедуры -#КонецОбласти - -#Область ОбработчикиСобытийЭлементовШапкиФормы - &НаКлиенте -Процедура УчетнаяЗаписьНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) - Если УчетнаяЗаписьУказана Тогда - // Если учетная запись была передана в качестве параметра - // не позволяем выбрать другую. - СтандартнаяОбработка = Ложь; + Если ИсточникВыбора.ИмяФормы = "ОбщаяФорма.ВыборПолучателейСообщения" И ЗначениеЗаполнено(ВыбранноеЗначение) Тогда + ПочтовыйАдресПолучателя = ВыбранноеЗначение.ПочтовыйАдресПолучателя; КонецЕсли; КонецПроцедуры +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + // Подставляет адрес ответа, если флаг автоматической подстановки ответа установлен. // &НаКлиенте @@ -200,6 +201,18 @@ КонецПроцедуры +&НаКлиенте +Процедура ЭлектронныйАдресКомуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПолучателиСообщения", ПолучателиСообщения); + ПараметрыФормы.Вставить("ПочтовыйАдресПолучателя", Элемент.ТекстРедактирования); + ОткрытьФорму("ОбщаяФорма.ВыборПолучателейСообщения", ПараметрыФормы, ЭтотОбъект); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыВложения @@ -322,28 +335,12 @@ ОчиститьСообщения(); - Попытка - ПриведенныйПочтовыйАдрес = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(ПочтовыйАдресПолучателя); - Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), , - "ПочтовыйАдресПолучателя"); - Возврат; - КонецПопытки; - - Если ЗначениеЗаполнено(АдресОтвета) Тогда - Попытка - ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(АдресОтвета); - Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), , - "АдресОтвета"); - Возврат; - КонецПопытки; + Если ОтправитьПочтовоеСообщение() Тогда + СохранитьАдресОтвета(АдресОтвета); + Состояние(НСтр("ru = 'Сообщение успешно отправлено'")); + Закрыть(); КонецЕсли; - ПродолжитьОтправкуПисьмаСПаролем(); - КонецПроцедуры &НаКлиенте @@ -357,15 +354,14 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// СЕКЦИЯ ОБРАБОТЧИКОВ СОБЫТИЙ ФОРМЫ И ЭЛЕМЕНТОВ ФОРМЫ -// - -&НаСервереБезКонтекста -Функция ОтправитьПочтовоеСообщение(Знач УчетнаяЗапись, Знач ПараметрыПисьма) - - Возврат РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма); - +&НаСервере +Функция ОтправитьПочтовоеСообщение() + ПараметрыПисьма = СформироватьПараметрыПисьма(); + Если ПараметрыПисьма = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма); + Возврат Истина; КонецФункции &НаСервереБезКонтекста @@ -511,15 +507,41 @@ // Проверяет возможность отправления письма и если // это возможно - формирует параметры отправки. // -&НаКлиенте +&НаСервере Функция СформироватьПараметрыПисьма() ПараметрыПисьма = Новый Структура; - Если ЗначениеЗаполнено(ПриведенныйПочтовыйАдрес) Тогда - ПараметрыПисьма.Вставить("Кому", ПриведенныйПочтовыйАдрес); + СписокПолучателей = ОбщегоНазначенияКлиентСервер.АдресаЭлектроннойПочтыИзСтроки(ПочтовыйАдресПолучателя); + Кому = Новый Массив; + Для Каждого Получатель Из СписокПолучателей Цикл + Если Не ПустаяСтрока(Получатель.ОписаниеОшибки) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + Получатель.ОписаниеОшибки, , "ПочтовыйАдресПолучателя"); + Возврат Неопределено; + КонецЕсли; + Кому.Добавить(Новый Структура("Адрес, Представление", Получатель.Адрес, Получатель.Псевдоним)); + КонецЦикла; + + Если ЗначениеЗаполнено(Кому) Тогда + ПараметрыПисьма.Вставить("Кому", Кому); + Иначе + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Необходимо заполнить получателя письма'"), , "ПочтовыйАдресПолучателя"); + Возврат Неопределено; КонецЕсли; + СписокПолучателей = ОбщегоНазначенияКлиентСервер.АдресаЭлектроннойПочтыИзСтроки(АдресОтвета); + Кому = Новый Массив; + Для Каждого Получатель Из СписокПолучателей Цикл + Если Не ПустаяСтрока(Получатель.ОписаниеОшибки) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + Получатель.ОписаниеОшибки, , "АдресОтвета"); + Возврат Неопределено; + КонецЕсли; + Кому.Добавить(Новый Структура("Адрес, Представление", Получатель.Адрес, Получатель.Псевдоним)); + КонецЦикла; + Если ЗначениеЗаполнено(АдресОтвета) Тогда ПараметрыПисьма.Вставить("АдресОтвета", АдресОтвета); КонецЕсли; @@ -528,17 +550,103 @@ ПараметрыПисьма.Вставить("Тема", ТемаПисьма); КонецЕсли; - Если ЗначениеЗаполнено(ТелоПисьма) Тогда - ПараметрыПисьма.Вставить("Тело", ТелоПисьма); + Если ЗначениеЗаполнено(ПолучателиСообщения) Тогда + ПараметрыПисьма.Вставить("ПолучателиСообщения", ПолучитьИзВременногоХранилища(ПолучателиСообщения)); КонецЕсли; + СодержимоеПисьма = ПолучитьHTMLФорматированногоДокументаДляПисьма(ТелоПисьма); + ТекстHTML = СодержимоеПисьма.ТекстHTML; + Картинки = СодержимоеПисьма.Картинки; + + ПараметрыПисьма.Вставить("Тело", ТекстHTML); + ПараметрыПисьма.Вставить("ТипТекста", "HTML"); ПараметрыПисьма.Вставить("Вложения", Вложения()); + Для Каждого Картинка Из Картинки Цикл + ИмяКартинки = Картинка.Ключ; + ДанныеКартинки = Картинка.Значение; + + ОписаниеВложения = Новый Структура; + ОписаниеВложения.Вставить("Представление", ИмяКартинки); + ОписаниеВложения.Вставить("АдресВоВременномХранилище", ПоместитьВоВременноеХранилище(ДанныеКартинки.ПолучитьДвоичныеДанные())); + ОписаниеВложения.Вставить("Кодировка", ""); + ОписаниеВложения.Вставить("Идентификатор", ИмяКартинки); + ПараметрыПисьма.Вложения.Добавить(ОписаниеВложения); + КонецЦикла; + Возврат ПараметрыПисьма; КонецФункции -&НаКлиенте +&НаСервере +Функция ПолучитьHTMLФорматированногоДокументаДляПисьма(ФорматированныйДокумент) + + // Выгрузка форматированного документа в HTML текст и картинки. + ТекстHTML = ""; + Картинки = Новый Структура; + ФорматированныйДокумент.ПолучитьHTML(ТекстHTML, Картинки); + + // Конвертация HTML текста в ДокументHTML. + Построитель = Новый ПостроительDOM; + ЧтениеHTML = Новый ЧтениеHTML; + ЧтениеHTML.УстановитьСтроку(ТекстHTML); + ДокументHTML = Построитель.Прочитать(ЧтениеHTML); + + // Замена имен картинок в документе HTML на идентификаторы. + Для Каждого Картинка Из ДокументHTML.Картинки Цикл + АтрибутИсточникКартинки = Картинка.Атрибуты.ПолучитьИменованныйЭлемент("src"); + АтрибутИсточникКартинки.ТекстовоеСодержимое = "cid:" + АтрибутИсточникКартинки.ТекстовоеСодержимое; + КонецЦикла; + + // Конвертация ДокументHTML обратно в текст HTML. + ЗаписьDOM = Новый ЗаписьDOM; + ЗаписьHTML = Новый ЗаписьHTML; + ЗаписьHTML.УстановитьСтроку(); + ЗаписьDOM.Записать(ДокументHTML, ЗаписьHTML); + ТекстHTML = ЗаписьHTML.Закрыть(); + + // Подготовка результата. + Результат = Новый Структура; + Результат.Вставить("ТекстHTML", ТекстHTML); + Результат.Вставить("Картинки", Картинки); + + Возврат Результат; + +КонецФункции + +&НаСервере +Функция ТекстВHTML(Текст) + + Если СтрНайти(НРег(Текст), "", НаправлениеПоиска.СКонца) > 0 Тогда + Возврат Текст; + КонецЕсли; + + ДокументHTML = Новый ДокументHTML; + + ЭлементТело = ДокументHTML.СоздатьЭлемент("body"); + ДокументHTML.Тело = ЭлементТело; + + Для НомерСтроки = 1 По СтрЧислоСтрок(Текст) Цикл + Строка = СтрПолучитьСтроку(Текст, НомерСтроки); + + ЭлементБлок = ДокументHTML.СоздатьЭлемент("p"); + ЭлементТело.ДобавитьДочерний(ЭлементБлок); + + ЭлементТекст = ДокументHTML.СоздатьТекстовыйУзел(Строка); + ЭлементБлок.ДобавитьДочерний(ЭлементТекст); + КонецЦикла; + + ЗаписьDOM = Новый ЗаписьDOM; + ЗаписьHTML = Новый ЗаписьHTML; + ЗаписьHTML.УстановитьСтроку(); + ЗаписьDOM.Записать(ДокументHTML, ЗаписьHTML); + Результат = ЗаписьHTML.Закрыть(); + + Возврат Результат; + +КонецФункции + +&НаСервере Функция Вложения() Результат = Новый Массив; @@ -547,6 +655,7 @@ ОписаниеВложения.Вставить("Представление", Вложение.Представление); ОписаниеВложения.Вставить("АдресВоВременномХранилище", Вложение.АдресВоВременномХранилище); ОписаниеВложения.Вставить("Кодировка", Вложение.Кодировка); + ОписаниеВложения.Вставить("Идентификатор", Вложение.Идентификатор); Результат.Добавить(ОписаниеВложения); КонецЦикла; @@ -641,24 +750,6 @@ КонецФункции -&НаКлиенте -Процедура ПродолжитьОтправкуПисьмаСПаролем() - - ПараметрыПисьма = СформироватьПараметрыПисьма(); - - Если ПараметрыПисьма = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Ошибка формирования параметров почтового сообщения'")); - Возврат; - КонецЕсли; - - ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма); - СохранитьАдресОтвета(АдресОтвета); - Состояние(НСтр("ru = 'Сообщение успешно отправлено'")); - - Закрыть(); - -КонецПроцедуры - &НаКлиенте Процедура ВложенияПеретаскиваниеЗавершение(Результат, АдресВременногоХранилища, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт diff --git a/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Help/ru.html b/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Help/ru.html index 8718d890d..1cb137b80 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 f2de5d0b6..e850ec4e6 100644 --- a/SSL/src/CommonForms/ПанельОтчетов/Form.form +++ b/SSL/src/CommonForms/ПанельОтчетов/Form.form @@ -130,10 +130,6 @@ Декорация1 386 - - <key>ru</key> - <value> </value> - true true @@ -372,14 +368,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - 26 1 false @@ -404,14 +392,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - ВерхняяПанельСтрока1РасширеннаяПодсказка 306 @@ -440,10 +420,6 @@ БыстрыйДоступШапкаКартинка 377 - - <key>ru</key> - <value> </value> - true true @@ -530,14 +506,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - БыстрыйДоступШапкаРасширеннаяПодсказка 376 @@ -643,14 +611,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - БыстрыйДоступКолонка1ExtendedTooltip 285 @@ -679,14 +639,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - БыстрыйДоступКолонка2ExtendedTooltip 286 @@ -746,10 +698,6 @@ БыстрыйДоступПодвалЛиния 317 - - <key>ru</key> - <value> </value> - true true @@ -788,14 +736,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - БыстрыйДоступПодвалРасширеннаяПодсказка 316 @@ -827,14 +767,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - БезГруппыКолонка1ExtendedTooltip 290 @@ -863,14 +795,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - БезГруппыКолонка2ExtendedTooltip 291 @@ -927,10 +851,6 @@ БезГруппыПодвал 43 - - <key>ru</key> - <value> </value> - true true @@ -971,14 +891,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - СГруппойКолонка1ExtendedTooltip 295 @@ -1007,14 +919,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - СГруппойКолонка2ExtendedTooltip 296 @@ -1071,10 +975,6 @@ СГруппойПодвал 216 - - <key>ru</key> - <value> </value> - true true @@ -1115,14 +1015,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - СмТакжеКолонка1ExtendedTooltip 300 @@ -1151,14 +1043,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - СмТакжеКолонка2ExtendedTooltip 301 @@ -1217,10 +1101,6 @@ СмТакжеПодвал 218 - - <key>ru</key> - <value> </value> - true true @@ -1332,11 +1212,6 @@ РезультатыПоискаИзДругихРазделовДекорация 347 - - <key>ru</key> - <value> -</value> - true true @@ -1382,14 +1257,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - РезультатыПоискаИзДругихРазделовРасширеннаяПодсказка 351 @@ -1551,14 +1418,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - ПодвалФормыРасширеннаяПодсказка 312 @@ -1624,24 +1483,6 @@ true auto true - - ТекущийРазделПолноеИмя - - <key>ru</key> - <value>Текущий раздел полное имя</value> - - 1 - - String - - - - true - - - true - - ВыведеноЭлементовВариантов @@ -1715,10 +1556,6 @@ </attributes> <attributes> <name>ШрифтВажнойНадписи</name> - <title> - <key>ru</key> - <value> </value> - 7 Font @@ -2039,6 +1876,7 @@ 19 + CatalogRef.ВнешниеПользователи CatalogRef.Пользователи @@ -2486,10 +2324,6 @@ ШрифтВажнойГруппы - - <key>ru</key> - <value> </value> - 8 Font @@ -2503,10 +2337,6 @@ ШрифтОбычнойГруппы - - <key>ru</key> - <value> </value> - 23 Font @@ -2520,10 +2350,6 @@ ШрифтРаздела - - <key>ru</key> - <value> </value> - 24 Font diff --git a/SSL/src/CommonForms/ПанельОтчетов/Help/ru.html b/SSL/src/CommonForms/ПанельОтчетов/Help/ru.html index 1bb5fa425..765d06aa9 100644 --- a/SSL/src/CommonForms/ПанельОтчетов/Help/ru.html +++ b/SSL/src/CommonForms/ПанельОтчетов/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

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

                Поиск отчетов

                Поиск доступен как в режиме просмотра, так и в режиме настройки.

                • Отчеты можно искать по слову (части слова), также возможен поиск по нескольким словам. Поиск осуществляется: diff --git a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl index 3bb9a5770..a7ac33b93 100644 --- a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl +++ b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl @@ -5,6 +5,13 @@ Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; + Если Не ОбщегоНазначения.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка) Тогда + Возврат; + КонецЕсли; + + Если Не ЗначениеЗаполнено(Параметры.ПутьКПодсистеме) Тогда + Параметры.ПутьКПодсистеме = ВариантыОтчетовКлиентСервер.ИдентификаторНачальнойСтраницы(); + КонецЕсли; ПараметрыКлиента = ВариантыОтчетов.ПараметрыКлиента(); ПараметрыКлиента.Вставить("ПутьКПодсистеме", Параметры.ПутьКПодсистеме); @@ -30,6 +37,10 @@ ШрифтРаздела = Новый Шрифт("Arial", 12, Истина, Ложь, Ложь, Ложь, 100); ШрифтВажнойНадписи = Новый Шрифт("Arial", 10, Истина, Ложь, Ложь, Ложь, 100); КонецЕсли; + Если Не ПравоДоступа("СохранениеДанныхПользователя", Метаданные) Тогда + Элементы.Настроить.Видимость = Ложь; + Элементы.СброситьМоиНастройки.Видимость = Ложь; + КонецЕсли; ГлобальныеНастройки = ВариантыОтчетов.ГлобальныеНастройки(); Элементы.СтрокаПоиска.ПодсказкаВвода = ГлобальныеНастройки.Поиск.ПодсказкаВвода; @@ -101,22 +112,27 @@ КонецПроцедуры &НаКлиенте -Процедура ОбработкаОповещения(ИмяГлобальногоСобытия, Изменения, Источник) +Процедура ОбработкаОповещения(ИмяСобытия, Изменения, Источник) Если Источник = ЭтотОбъект Тогда Возврат; КонецЕсли; - ИмяЛокальногоСобытия = Неопределено; - Если ИмяГлобальногоСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта() Тогда - ИмяЛокальногоСобытия = ""; - ИначеЕсли ИмяГлобальногоСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеОбщихНастроек() Тогда + Если ПараметрыКлиента.Свойство("Обновлять") Тогда + ОтключитьОбработчикОжидания("ОбновитьПанельОтчетовПоТаймеру"); + Иначе + ПараметрыКлиента.Вставить("Обновлять", Ложь) + КонецЕсли; + Если ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта() + Или ИмяСобытия = "Запись_НаборКонстант" Тогда + ПараметрыКлиента.Обновлять = Истина; + ИначеЕсли ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеОбщихНастроек() Тогда Если Изменения.ПоказыватьПодсказки <> ПоказыватьПодсказки Или Изменения.ИскатьВоВсехРазделах <> ИскатьВоВсехРазделах Тогда - ИмяЛокальногоСобытия = ""; + ПараметрыКлиента.Обновлять = Истина; КонецЕсли; ЗаполнитьЗначенияСвойств(ЭтотОбъект, Изменения, "ПоказыватьПодсказки, ИскатьВоВсехРазделах, ПоказатьОповещениеОПодсказках"); КонецЕсли; - Если ИмяЛокальногоСобытия <> Неопределено Тогда - ОбновитьПанельОтчетовНаКлиенте(ИмяЛокальногоСобытия); + Если ПараметрыКлиента.Обновлять Тогда + ПодключитьОбработчикОжидания("ОбновитьПанельОтчетовПоТаймеру", 1, Истина); КонецЕсли; КонецПроцедуры @@ -132,7 +148,7 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте -Процедура ВариантНажатие(Элемент) +Процедура Подключаемый_ВариантНажатие(Элемент) Найденные = ДобавленныеВарианты.НайтиСтроки(Новый Структура("НадписьИмя", Элемент.Имя)); Если Найденные.Количество() <> 1 Тогда Возврат; @@ -142,7 +158,7 @@ КонецПроцедуры &НаКлиенте -Процедура ВидимостьВариантаПриИзменении(Элемент) +Процедура Подключаемый_ВидимостьВариантаПриИзменении(Элемент) Флажок = Элемент; Показать = ЭтотОбъект[Флажок.Имя]; @@ -158,7 +174,7 @@ КонецПроцедуры &НаКлиенте -Процедура СтрокаПоискаОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, Параметры, СтандартнаяОбработка) +Процедура СтрокаПоискаОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка) Если Не ПустаяСтрока(Текст) И ВведенаСлишкомКороткаяСтрокаПоиска(Текст) Тогда СтандартнаяОбработка = Ложь; КонецЕсли; @@ -207,6 +223,17 @@ Процедура ИскатьВоВсехРазделахПриИзменении(Элемент) Если ЗначениеЗаполнено(СтрокаПоиска) Тогда ОбновитьПанельОтчетовНаКлиенте("ИскатьВоВсехРазделахПриИзменении"); + + ОбщиеНастройки = Новый Структура; + ОбщиеНастройки.Вставить("ПоказыватьПодсказки", ПоказыватьПодсказки); + ОбщиеНастройки.Вставить("ИскатьВоВсехРазделах", ИскатьВоВсехРазделах); + ОбщиеНастройки.Вставить("ПоказатьОповещениеОПодсказках", ПоказатьОповещениеОПодсказках); + + Оповестить( + ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеОбщихНастроек(), + ОбщиеНастройки, + ЭтотОбъект); + ТекущийЭлемент = Элементы.ВыполнитьПоиск; Иначе ТекущийЭлемент = Элементы.СтрокаПоиска; @@ -214,7 +241,7 @@ КонецПроцедуры &НаКлиенте -Процедура ЗаголовокРазделаНажатие(Элемент) +Процедура Подключаемый_ЗаголовокРазделаНажатие(Элемент) ГруппаРазделаИмя = Элемент.Родитель.Имя; Подстроки = СтрРазделить(ГруппаРазделаИмя, "_"); ПриоритетРаздела = Подстроки[1]; @@ -248,6 +275,16 @@ &НаКлиенте Процедура ПоказыватьПодсказкиПриИзменении(Элемент) ОбновитьПанельОтчетовНаКлиенте("ПоказыватьПодсказкиПриИзменении"); + + ОбщиеНастройки = Новый Структура; + ОбщиеНастройки.Вставить("ПоказыватьПодсказки", ПоказыватьПодсказки); + ОбщиеНастройки.Вставить("ИскатьВоВсехРазделах", ИскатьВоВсехРазделах); + ОбщиеНастройки.Вставить("ПоказатьОповещениеОПодсказках", ПоказатьОповещениеОПодсказках); + + Оповестить( + ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеОбщихНастроек(), + ОбщиеНастройки, + ЭтотОбъект); КонецПроцедуры #КонецОбласти @@ -411,19 +448,25 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ОбновитьПанельОтчетовПоТаймеру() + Если ПараметрыКлиента.Обновлять Тогда + ПараметрыКлиента.Обновлять = Ложь; + ОбновитьПанельОтчетовНаКлиенте(""); + КонецЕсли; +КонецПроцедуры + &НаКлиенте Процедура ОбновитьПанельОтчетовНаКлиенте(Событие = "") Если ПараметрыКлиента.ВыполнятьЗамеры Тогда Замер = НачатьЗамер(Событие); КонецЕсли; - Результат = ОбновитьПанельОтчетовНаСервере(Событие); + ОбновитьПанельОтчетовНаСервере(Событие); Если ПараметрыКлиента.ВыполнятьЗамеры Тогда ЗакончитьЗамер(Замер); КонецЕсли; - - СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); КонецПроцедуры &НаКлиенте @@ -538,8 +581,7 @@ КонецПроцедуры &НаСервере -Функция ОбновитьПанельОтчетовНаСервере(Знач Событие = "") - Результат = Новый Структура; +Процедура ОбновитьПанельОтчетовНаСервере(Знач Событие = "") Если Событие = "СброситьНастройки" Тогда РегистрыСведений.НастройкиВариантовОтчетов.СброситьНастройкиПользователяВРазделе(ТекущийРазделСсылка); КонецЕсли; @@ -573,11 +615,6 @@ ВариантыОтчетов.СохранитьОбщиеНастройкиПанели(ОбщиеНастройки); - СтандартныеПодсистемыКлиентСервер.ОповеститьОткрытыеФормы( - Результат, - ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеОбщихНастроек(), - ОбщиеНастройки); - КонецЕсли; Элементы.ИскатьВоВсехРазделах.Видимость = Не РежимНастройки И ЗначениеЗаполнено(СтрокаПоиска); @@ -623,9 +660,7 @@ // Заполнение панели отчетов ЗаполнитьПанельОтчетов(); - - Возврат Результат; -КонецФункции +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Сервер @@ -673,7 +708,7 @@ Возврат; КонецЕсли; ПакетНастроек.Колонки.Ссылка.Имя = "Вариант"; - Измерения = Новый Структура("Пользователь", Пользователи.ТекущийПользователь()); + Измерения = Новый Структура("Пользователь", Пользователи.АвторизованныйПользователь()); Ресурсы = Новый Структура; РегистрыСведений.НастройкиВариантовОтчетов.ЗаписатьПакетНастроек(ПакетНастроек, Измерения, Ресурсы, Ложь); КонецПроцедуры @@ -1029,7 +1064,13 @@ | ВариантыРазмещение.Ссылка.ТипОтчета, | ВариантыРазмещение.Ссылка.КлючВарианта, | ВариантыРазмещение.Ссылка.Автор, - | ВариантыРазмещение.Ссылка.Родитель, + | ВЫБОР + | КОГДА ВариантыРазмещение.Ссылка.Родитель = ЗНАЧЕНИЕ(Справочник.ВариантыОтчетов.ПустаяСсылка) + | ТОГДА ЗНАЧЕНИЕ(Справочник.ВариантыОтчетов.ПустаяСсылка) + | КОГДА ВариантыРазмещение.Ссылка.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.ВариантыОтчетов.ПустаяСсылка) + | ТОГДА ВариантыРазмещение.Ссылка.Родитель + | ИНАЧЕ ВариантыРазмещение.Ссылка.Родитель.Родитель + | КОНЕЦ КАК Родитель, | ВариантыРазмещение.Ссылка.ВидимостьПоУмолчанию, | ВариантыРазмещение.Ссылка.ПредопределенныйВариант.КлючЗамеров КАК КлючЗамеров |ПОМЕСТИТЬ втВарианты @@ -1155,7 +1196,7 @@ Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда Запрос.УстановитьПараметр("ТекущийПользователь", ПользователиКлиентСервер.ТекущийВнешнийПользователь()); Иначе - Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.ТекущийПользователь()); + Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.АвторизованныйПользователь()); КонецЕсли; Запрос.УстановитьПараметр("МассивПодсистем", МассивПодсистем); @@ -1414,7 +1455,7 @@ ЗаголовокРаздела.Высота = 2; ЗаголовокРаздела.Гиперссылка = Истина; ЗаголовокРаздела.ВертикальноеПоложение = ВертикальноеПоложениеЭлемента.Верх; - ЗаголовокРаздела.УстановитьДействие("Нажатие", "ЗаголовокРазделаНажатие"); + ЗаголовокРаздела.УстановитьДействие("Нажатие", "Подключаемый_ЗаголовокРазделаНажатие"); ГруппаРаздела.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; @@ -1475,7 +1516,7 @@ ВыводБезГрупп = (ГруппаУровня2Имя = "БыстрыйДоступ" Или ГруппаУровня2Имя = "СмТакже"); // Сортировка вариантов - // Есть группы и важные // ВерхнийУровень УБЫВ, + // Есть группы и важные // ВерхнийУровень УБЫВ. Варианты.Сортировать("ПодсистемаПриоритет ВОЗР, Важный УБЫВ, Наименование ВОЗР"); НайденныеРодители = Варианты.НайтиСтроки(Новый Структура("ВерхнийУровень", Истина)); Для Каждого ВариантРодитель Из НайденныеРодители Цикл @@ -1847,6 +1888,13 @@ Подсистема.НомерЭлемента = Подсистема.НомерЭлемента + 1; ГруппаПодсистемыИмя = Подсистема.ИмяЭлемента + "_" + Формат(Подсистема.НомерЭлемента, "ЧГ=0"); + Если Не ПараметрыЗаполнения.ТолькоТекущийРаздел Тогда + Пока Элементы.Найти(ГруппаПодсистемыИмя) <> Неопределено Цикл + Подсистема.НомерЭлемента = Подсистема.НомерЭлемента + 1; + ГруппаПодсистемыИмя = Подсистема.ИмяЭлемента + "_" + Формат(Подсистема.НомерЭлемента, "ЧГ=0"); + КонецЦикла; + КонецЕсли; + // Добавление отступа слева. Если СтрокаПорядкаВывода.УровеньВложенности > 1 Тогда // Группа. @@ -1962,8 +2010,26 @@ Функция ДобавитьЭлементыВариантаОтчета(ПараметрыЗаполнения, Вариант, ВГруппу, УровеньВложенности = 0) // Уникальное имя добавляемого элемента. - ВыведеноЭлементовВариантов = ВыведеноЭлементовВариантов + 1; - НадписьИмя = "ДобавленныйЭлемент_" + Формат(ВыведеноЭлементовВариантов, "ЧГ=0"); + НадписьИмя = "Вариант_" + ОтчетыКлиентСервер.ПривестиИдентификаторКИмени(Вариант.Ссылка.УникальныйИдентификатор()); + Если ЗначениеЗаполнено(Вариант.Подсистема) Тогда + НадписьИмя = НадписьИмя + + "_Подсистема_" + + ОтчетыКлиентСервер.ПривестиИдентификаторКИмени(Вариант.Подсистема.УникальныйИдентификатор()); + КонецЕсли; + Если Не ПараметрыЗаполнения.ТолькоТекущийРаздел И Элементы.Найти(НадписьИмя) <> Неопределено Тогда + Если ЗначениеЗаполнено(Вариант.РазделСсылка) Тогда + Номер = 0; + Суффикс = "_Раздел_" + ОтчетыКлиентСервер.ПривестиИдентификаторКИмени(Вариант.РазделСсылка.УникальныйИдентификатор()); + Иначе + Номер = 1; + Суффикс = "_1"; + КонецЕсли; + Пока Элементы.Найти(НадписьИмя + Суффикс) <> Неопределено Цикл + Номер = Номер + 1; + Суффикс = "_" + Строка(Номер); + КонецЦикла; + НадписьИмя = НадписьИмя + Суффикс; + КонецЕсли; Если РежимНастройки Тогда ГруппаВариантаИмя = "Группа_" + НадписьИмя; @@ -1984,7 +2050,7 @@ Флажок.Вид = ВидПоляФормы.ПолеФлажка; Флажок.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; Флажок.Видимость = (ПараметрыЗаполнения.ИмяГруппы <> "БыстрыйДоступ"); - Флажок.УстановитьДействие("ПриИзменении", "ВидимостьВариантаПриИзменении"); + Флажок.УстановитьДействие("ПриИзменении", "Подключаемый_ВидимостьВариантаПриИзменении"); КонецЕсли; // Добавление надписи-гиперссылки варианта отчета. @@ -1997,7 +2063,7 @@ Если ЗначениеЗаполнено(Вариант.Автор) Тогда Надпись.Подсказка = СокрЛ(Надпись.Подсказка + Символы.ПС) + НСтр("ru = 'Автор:'") + " " + СокрЛП(Строка(Вариант.Автор)); КонецЕсли; - Надпись.УстановитьДействие("Нажатие", "ВариантНажатие"); + Надпись.УстановитьДействие("Нажатие", "Подключаемый_ВариантНажатие"); Если Не Вариант.Видимость Тогда Надпись.ЦветТекста = ЦветСкрытыхВариантов; КонецЕсли; @@ -2066,6 +2132,7 @@ СоставПодсказки.Добавить(НСтр("ru = 'Сохраненные настройки:'") + " "); СформироватьСтрокуСПодсветкой(ПараметрыПодсветки.НаименованияПользовательскихНастроек, СоставПодсказки); СоставПодсказки.Добавить("."); + ПодсказкаВыведена = Истина; КонецЕсли; Если ПараметрыПодсветки.НаименованияПолей.КоличествоНайденныхСлов > 0 Тогда Если СоставПодсказки.Количество() > 0 Тогда @@ -2074,6 +2141,7 @@ СоставПодсказки.Добавить(НСтр("ru = 'Поля:'") + " "); СформироватьСтрокуСПодсветкой(ПараметрыПодсветки.НаименованияПолей, СоставПодсказки); СоставПодсказки.Добавить("."); + ПодсказкаВыведена = Истина; КонецЕсли; Если ПараметрыПодсветки.НаименованияПараметровИОтборов.КоличествоНайденныхСлов > 0 Тогда Если СоставПодсказки.Количество() > 0 Тогда @@ -2082,6 +2150,16 @@ СоставПодсказки.Добавить(НСтр("ru = 'Настройки:'") + " "); СформироватьСтрокуСПодсветкой(ПараметрыПодсветки.НаименованияПараметровИОтборов, СоставПодсказки); СоставПодсказки.Добавить("."); + ПодсказкаВыведена = Истина; + КонецЕсли; + Если ПараметрыПодсветки.КлючевыеСлова.КоличествоНайденныхСлов > 0 Тогда + Если СоставПодсказки.Количество() > 0 Тогда + СоставПодсказки.Добавить(Символы.ПС); + КонецЕсли; + СоставПодсказки.Добавить(НСтр("ru = 'Ключевые слова:'") + " "); + СформироватьСтрокуСПодсветкой(ПараметрыПодсветки.КлючевыеСлова, СоставПодсказки); + СоставПодсказки.Добавить("."); + ПодсказкаВыведена = Истина; КонецЕсли; КонецЕсли; КонецЕсли; diff --git a/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Form.form b/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Form.form index 3e640b5f6..28d7880cd 100644 --- a/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Form.form +++ b/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Form.form @@ -264,6 +264,7 @@ Page Vertical + false @@ -397,6 +398,7 @@ Vertical auto + false true @@ -838,6 +840,7 @@ Page auto + false @@ -955,6 +958,7 @@ Page auto + false true diff --git a/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Help/ru.html b/SSL/src/CommonForms/ПараметрыАдминистрированияПрограммы/Help/ru.html index a936bfd27..1d13fee1e 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 d48376508..ed2371ff8 100644 --- a/SSL/src/CommonForms/ПараметрыПроксиСервера/Help/ru.html +++ b/SSL/src/CommonForms/ПараметрыПроксиСервера/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

                  diff --git a/SSL/src/CommonForms/ПечатьДокументов/Form.form b/SSL/src/CommonForms/ПечатьДокументов/Form.form index 5b6cc78d7..b33fe42a4 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/Form.form +++ b/SSL/src/CommonForms/ПечатьДокументов/Form.form @@ -60,7 +60,7 @@ - ПредварительныйПросмотр + КнопкаПредварительныйПросмотр 214 true true @@ -68,7 +68,7 @@ true - ПредварительныйПросмотрРасширеннаяПодсказка + КнопкаПредварительныйПросмотрРасширеннаяПодсказка 215 Label true @@ -439,7 +439,7 @@ InAdditionalSubmenu - ФормаПредварительныйПросмотр + КнопкаПредварительныйПросмотрВсеДействия 216 true true @@ -447,7 +447,7 @@ true - ФормаПредварительныйПросмотрРасширеннаяПодсказка + КнопкаПредварительныйПросмотрВсеДействияРасширеннаяПодсказка 217 Label true @@ -465,7 +465,7 @@ Auto - ФормаПараметрыСтраницы + КнопкаПараметрыСтраницыВсеДействия 218 true true @@ -473,7 +473,7 @@ true - ФормаПараметрыСтраницыРасширеннаяПодсказка + КнопкаПараметрыСтраницыВсеДействияРасширеннаяПодсказка 219 Label true @@ -875,6 +875,118 @@ Auto + + ГруппаДополнительнаяИнформация + 226 + + КартинкаИнформации + 223 + + <key>ru</key> + <value>Картинка информации</value> + + true + true + + true + + + КартинкаИнформацииРасширеннаяПодсказка + 225 + Label + true + true + + Left + + + + КартинкаИнформацииКонтекстноеМеню + 224 + true + + 2 + true + 1 + true + + + CommonPicture.Информация + + + + + ДополнительнаяИнформация + 220 + + <key>ru</key> + <value>С этим контрагентом возможен электронный документооборот. <link ПерейтиКНастройкамЭлектронногоДокументооборота>Перейти к настройкам</></value> + + true + true + + true + + + ДополнительнаяИнформацияРасширеннаяПодсказка + 222 + Label + true + true + + Left + + + + ДополнительнаяИнформацияКонтекстноеМеню + 221 + true + + true + Label + true + true + + + URLProcessing + ДополнительнаяИнформацияОбработкаНавигационнойСсылки + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Группа дополнительная информация</value> + + + ru + Группа дополнительная информация + + + ГруппаДополнительнаяИнформацияРасширеннаяПодсказка + 227 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + ГруппаПечатныеФормы 119 @@ -1428,6 +1540,7 @@ Vertical auto + false @@ -1564,6 +1677,7 @@ Vertical auto + false true diff --git a/SSL/src/CommonForms/ПечатьДокументов/Help/ru.html b/SSL/src/CommonForms/ПечатьДокументов/Help/ru.html index b3de6f1d3..8860dc460 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/Help/ru.html +++ b/SSL/src/CommonForms/ПечатьДокументов/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

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

              Сумма чисел

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

            Показатели выделенных ячеек

            • +
              С помощью кнопки  можно подсчитать сумму, среднее, минимум и максимум. Указывается также общее количество выделенных ячеек и количество числовых ячеек. Расчеты проводятся только для числовых ячеек.
              +
            • Выделите нужные ячейки с числами.
            • -
              Нажмите , для того чтобы Вычислить сумму чисел выделенных ячеек.
            \ 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 32d3c2d15..393956ab5 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/Module.bsl +++ b/SSL/src/CommonForms/ПечатьДокументов/Module.bsl @@ -60,6 +60,24 @@ Элементы.Копий.Заголовок = НСтр("ru = 'Копий комплекта'"); КонецЕсли; + ДополнительнаяИнформация = Новый Структура("Картинка, Текст", Новый Картинка, ""); + МассивСсылок = Параметры.ПараметрКоманды; + Если ОбщегоНазначения.ЗначениеСсылочногоТипа(МассивСсылок) Тогда + МассивСсылок = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(МассивСсылок); + КонецЕсли; + Если ТипЗнч(МассивСсылок) = Тип("Массив") + И МассивСсылок.Количество() > 0 + И ОбщегоНазначения.ЗначениеСсылочногоТипа(МассивСсылок[0]) Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("ЭлектронноеВзаимодействие.ОбменСКонтрагентами") Тогда + МодульОбменСКонтрагентамиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ОбменСКонтрагентамиКлиентСервер"); + МодульОбменСКонтрагентамиКлиентСервер.ПриВыводеНавигационнойСсылкиВФормеОбъектаИБ(ДополнительнаяИнформация, МассивСсылок); + КонецЕсли; + КонецЕсли; + Элементы.ДополнительнаяИнформация.Заголовок = СтроковыеФункцииКлиентСервер.ФорматированнаяСтрока(ДополнительнаяИнформация.Текст); + Элементы.КартинкаИнформации.Картинка = ДополнительнаяИнформация.Картинка; + Элементы.ГруппаДополнительнаяИнформация.Видимость = Не ПустаяСтрока(Элементы.ДополнительнаяИнформация.Заголовок); + Элементы.КартинкаИнформации.Видимость = Элементы.КартинкаИнформации.Картинка.Вид <> ВидКартинки.Пустая; + КонецПроцедуры &НаКлиенте @@ -96,28 +114,69 @@ Или ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.ПодготовкаНовогоПисьма") Тогда Если ВыбранноеЗначение <> Неопределено И ВыбранноеЗначение <> КодВозвратаДиалога.Отмена Тогда - СписокВложений = ПоместитьТабличныеДокументыВоВременноеХранилище(ВыбранноеЗначение); - ПараметрыОтправки = ПараметрыВывода.ПараметрыОтправки; - Получатели = ПараметрыОтправки.Получатель; - Если ВыбранноеЗначение.Свойство("Получатели") Тогда - Получатели = ВыбранноеЗначение.Получатели; - КонецЕсли; - - ПараметрыНовогоПисьма = Новый Структура; - ПараметрыНовогоПисьма.Вставить("Получатель", Получатели); - ПараметрыНовогоПисьма.Вставить("Тема", ПараметрыОтправки.Тема); - ПараметрыНовогоПисьма.Вставить("Текст", ПараметрыОтправки.Текст); - ПараметрыНовогоПисьма.Вставить("Вложения", СписокВложений); - ПараметрыНовогоПисьма.Вставить("УдалятьФайлыПослеОтправки", Истина); + ПараметрыОтправки = ПараметрыОтправкиПисьма(ВыбранноеЗначение); МодульРаботаСПочтовымиСообщениямиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСПочтовымиСообщениямиКлиент"); - МодульРаботаСПочтовымиСообщениямиКлиент.СоздатьНовоеПисьмо(ПараметрыНовогоПисьма); + МодульРаботаСПочтовымиСообщениямиКлиент.СоздатьНовоеПисьмо(ПараметрыОтправки); КонецЕсли; КонецЕсли; КонецПроцедуры +&НаСервере +Функция ПараметрыОтправкиПисьма(ВыбранныеПараметры) + + СписокВложений = ПоместитьТабличныеДокументыВоВременноеХранилище(ВыбранныеПараметры); + Получатели = ПараметрыВывода.ПараметрыОтправки.Получатель; + Если ВыбранныеПараметры.Свойство("Получатели") Тогда + Получатели = ВыбранныеПараметры.Получатели; + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("Получатель", Получатели); + Результат.Вставить("Тема", ПараметрыВывода.ПараметрыОтправки.Тема); + Результат.Вставить("Текст", ПараметрыВывода.ПараметрыОтправки.Текст); + Результат.Вставить("Вложения", СписокВложений); + Результат.Вставить("УдалятьФайлыПослеОтправки", Истина); + + ПечатныеФормы = Новый ТаблицаЗначений; + ПечатныеФормы.Колонки.Добавить("Название"); + ПечатныеФормы.Колонки.Добавить("ТабличныйДокумент"); + + Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФорм Цикл + Если Не НастройкаПечатнойФормы.Печатать Тогда + Продолжить; + КонецЕсли; + + ТабличныйДокумент = ЭтотОбъект[НастройкаПечатнойФормы.ИмяРеквизита]; + Если ПечатныеФормы.НайтиСтроки(Новый Структура("ТабличныйДокумент", ТабличныйДокумент)).Количество() > 0 Тогда + Продолжить; + КонецЕсли; + + Если ВычислитьИспользованиеВывода(ТабличныйДокумент) = ИспользованиеВывода.Запретить Тогда + Продолжить; + КонецЕсли; + + Если ТабличныйДокумент.Защита Тогда + Продолжить; + КонецЕсли; + + Если ТабличныйДокумент.ВысотаТаблицы = 0 Тогда + Продолжить; + КонецЕсли; + + ОписаниеПечатнойФормы = ПечатныеФормы.Добавить(); + ОписаниеПечатнойФормы.Название = НастройкаПечатнойФормы.Название; + ОписаниеПечатнойФормы.ТабличныйДокумент = ТабличныйДокумент; + КонецЦикла; + + УправлениеПечатьюПереопределяемый.ПередОтправкойПоПочте(Результат, ПараметрыВывода, Параметры.ПараметрКоманды, ПечатныеФормы); + + Возврат Результат; + +КонецФункции + &НаКлиенте Процедура ПриЗакрытии() @@ -147,7 +206,7 @@ И Параметр.ИмяОбъектаМетаданныхМакета = НастройкаПечатнойФормы.ПутьКМакету Тогда ПодключитьОбработчикОжидания("ОбновитьТекущуюПечатнуюФорму",0.1,Истина); ИначеЕсли (ИмяСобытия = "ОтказОтИзмененияМакета" - Или Имясобытия = "ОтменаРедактированияТабличногоДокумента" + Или ИмяСобытия = "ОтменаРедактированияТабличногоДокумента" И Параметр.ИмяОбъектаМетаданныхМакета = НастройкаПечатнойФормы.ПутьКМакету) И Источник.ВладелецФормы = ЭтотОбъект Тогда ОтобразитьСостояниеТекущейПечатнойФормы(); @@ -173,13 +232,25 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ДополнительнаяИнформацияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + МассивСсылок = Параметры.ПараметрКоманды; + Если ТипЗнч(МассивСсылок) <> Тип("Массив") Тогда + МассивСсылок = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(МассивСсылок); + КонецЕсли; + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЭлектронноеВзаимодействие.ОбменСКонтрагентами") Тогда + МодульОбменСКонтрагентамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбменСКонтрагентамиКлиент"); + МодульОбменСКонтрагентамиКлиент.ОбработкаНавигационнойСсылкиВФормеПечатиБСП(НавигационнаяСсылкаФорматированнойСтроки, МассивСсылок); + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыНастройкиПечатныхФорм &НаКлиенте Процедура НастройкиПечатныхФормПриИзменении(Элемент) - МожноПечатать = Ложь; МожноСохранять = Ложь; @@ -513,6 +584,16 @@ Элементы.Копий.Видимость = ЕстьРазрешенныйВывод И ЕстьДанныеДляПечати; Элементы.КнопкаРедактирование.Видимость = ЕстьРазрешенныйВывод И ЕстьДанныеДляПечати И ЕстьРазрешенноеРедактирование; + Если Элементы.Найти("КнопкаПредварительныйПросмотр") <> Неопределено Тогда + Элементы.КнопкаПредварительныйПросмотр.Видимость = ЕстьРазрешенныйВывод; + КонецЕсли; + Если Элементы.Найти("КнопкаПредварительныйПросмотрВсеДействия") <> Неопределено Тогда + Элементы.КнопкаПредварительныйПросмотрВсеДействия.Видимость = ЕстьРазрешенныйВывод; + КонецЕсли; + Если Элементы.Найти("КнопкаПараметрыСтраницыВсеДействия") <> Неопределено Тогда + Элементы.КнопкаПараметрыСтраницыВсеДействия.Видимость = ЕстьРазрешенныйВывод; + КонецЕсли; + Если Не ЕстьДанныеДляПечати Тогда Элементы.ВычислитьСумму.Видимость = Ложь; Элементы.ТекущаяПечатнаяФорма.УстановитьДействие("ПриАктивизацииОбласти", ""); @@ -628,7 +709,7 @@ ПереключитьПометкуКнопкиРедактирование(); УстановитьДоступностьИзмененияМакета(); - + УстановитьДоступностьКомандВывода(); КонецПроцедуры &НаСервере @@ -638,7 +719,7 @@ ОбновитьДанныеТекущейПечатнойФормыСервер(); ТекущаяПечатнаяФорма = Новый ТабличныйДокумент; ТекущаяПечатнаяФорма.Вывести(ЭтотОбъект[ИмяРеквизита]); - ЗаполнитьЗначенияСвойств(ТекущаяПечатнаяФорма, ЭтотОбъект[ИмяРеквизита], "АвтоМасштаб,Вывод,ВысотаСтраницы,ДвусторонняяПечать,Защита,ИмяПринтера,КодЯзыкаМакета,КоличествоЭкземпляров,МасштабПечати,ОриентацияСтраницы,ПолеСверху,ПолеСлева,ПолеСнизу,ПолеСправа,РазборПоКопиям,РазмерКолонтитулаСверху,РазмерКолонтитулаСнизу,РазмерСтраницы,ТочностьПечати,ЧерноБелаяПечать,ШиринаСтраницы,ЭкземпляровНаСтранице"); + ЗаполнитьЗначенияСвойств(ТекущаяПечатнаяФорма, ЭтотОбъект[ИмяРеквизита], "АвтоМасштаб,Вывод,ВысотаСтраницы,ДвусторонняяПечать,Защита,ИмяПринтера,КодЯзыкаМакета,КоличествоЭкземпляров,МасштабПечати,ОриентацияСтраницы,ПолеСверху,ПолеСлева,ПолеСнизу,ПолеСправа,РазборПоКопиям,РазмерКолонтитулаСверху,РазмерКолонтитулаСнизу,РазмерСтраницы,ТочностьПечати,ЧерноБелаяПечать,ШиринаСтраницы,ЭкземпляровНаСтранице,КлючПараметровПечати"); ТекущийРеквизитСПечатнойФормой = ИмяРеквизита; Иначе ТекущаяПечатнаяФорма = ЭтотОбъект[ИмяРеквизита]; @@ -658,11 +739,10 @@ Если Не ПустаяСтрока(ТекущийРеквизитСПечатнойФормой) Тогда ЭтотОбъект[ТекущийРеквизитСПечатнойФормой] = Новый ТабличныйДокумент; ЭтотОбъект[ТекущийРеквизитСПечатнойФормой].Вывести(ТекущаяПечатнаяФорма); - ЗаполнитьЗначенияСвойств(ЭтотОбъект[ТекущийРеквизитСПечатнойФормой], ТекущаяПечатнаяФорма, "АвтоМасштаб,Вывод,ВысотаСтраницы,ДвусторонняяПечать,Защита,ИмяПринтера,КодЯзыкаМакета,КоличествоЭкземпляров,МасштабПечати,ОриентацияСтраницы,ПолеСверху,ПолеСлева,ПолеСнизу,ПолеСправа,РазборПоКопиям,РазмерКолонтитулаСверху,РазмерКолонтитулаСнизу,РазмерСтраницы,ТочностьПечати,ЧерноБелаяПечать,ШиринаСтраницы,ЭкземпляровНаСтранице"); + ЗаполнитьЗначенияСвойств(ЭтотОбъект[ТекущийРеквизитСПечатнойФормой], ТекущаяПечатнаяФорма, "АвтоМасштаб,Вывод,ВысотаСтраницы,ДвусторонняяПечать,Защита,ИмяПринтера,КодЯзыкаМакета,КоличествоЭкземпляров,МасштабПечати,ОриентацияСтраницы,ПолеСверху,ПолеСлева,ПолеСнизу,ПолеСправа,РазборПоКопиям,РазмерКолонтитулаСверху,РазмерКолонтитулаСнизу,РазмерСтраницы,ТочностьПечати,ЧерноБелаяПечать,ШиринаСтраницы,ЭкземпляровНаСтранице,КлючПараметровПечати"); КонецЕсли; КонецПроцедуры - &НаКлиенте Процедура УстановитьСнятьФлажки(Пометка) Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФорм Цикл @@ -802,6 +882,7 @@ ФайлАрхива = Новый Файл(ИмяАрхива); ДвоичныеДанные = Новый ДвоичныеДанные(ИмяАрхива); ПутьВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ЭтотОбъект.УникальныйИдентификатор); + УдалитьФайлы(ИмяАрхива); ОписаниеФайла = Новый Структура; ОписаниеФайла.Вставить("Представление", ПолучитьИмяФайлаДляАрхива()); ОписаниеФайла.Вставить("АдресВоВременномХранилище", ПутьВоВременномХранилище); @@ -991,8 +1072,15 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрисоединенныеФайлы") Тогда МодульПрисоединенныеФайлы = ОбщегоНазначения.ОбщийМодуль("ПрисоединенныеФайлы"); Для Каждого Файл Из ФайлыВоВременномХранилище Цикл - Результат.Добавить(МодульПрисоединенныеФайлы.ДобавитьФайл(ОбъектДляПрисоединения, - Файл.Представление, , , , Файл.АдресВоВременномХранилище, , НСтр("ru = 'Печатная форма'"))); + ПараметрыФайла = Новый Структура; + ПараметрыФайла.Вставить("ВладелецФайлов", ОбъектДляПрисоединения); + ПараметрыФайла.Вставить("Автор", Неопределено); + ПараметрыФайла.Вставить("ИмяБезРасширения", Файл.Представление); + ПараметрыФайла.Вставить("РасширениеБезТочки", Неопределено); + ПараметрыФайла.Вставить("ВремяИзменения", Неопределено); + ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", Неопределено); + Результат.Добавить(МодульПрисоединенныеФайлы.ДобавитьПрисоединенныйФайл( + ПараметрыФайла, Файл.АдресВоВременномХранилище, , НСтр("ru = 'Печатная форма'"))); КонецЦикла; КонецЕсли; Возврат Результат; @@ -1081,12 +1169,7 @@ ОтображатьСостояние = Не ПустаяСтрока(ТекстСостояния); - НастройкаПечатнойФормы = ТекущаяНастройкаПечатнойФормы(); - Если НастройкаПечатнойФормы = Неопределено Тогда - Возврат; - КонецЕсли; - - ПолеТабличногоДокумента = Элементы[НастройкаПечатнойФормы.ИмяРеквизита]; + ПолеТабличногоДокумента = Элементы.ТекущаяПечатнаяФорма; ОтображениеСостояния = ПолеТабличногоДокумента.ОтображениеСостояния; ОтображениеСостояния.Текст = ТекстСостояния; @@ -1136,6 +1219,28 @@ Элементы.КнопкаИзменитьМакет.Доступность = ПечатнаяФормаДоступна И Не ПустаяСтрока(НастройкаПечатнойФормы.ПутьКМакету); КонецПроцедуры +&НаКлиенте +Процедура УстановитьДоступностьКомандВывода() + + НастройкаПечатнойФормы = ТекущаяНастройкаПечатнойФормы(); + ПечатнаяФорма = ЭтотОбъект[НастройкаПечатнойФормы.ИмяРеквизита]; + ПолеТабличногоДокумента = Элементы[НастройкаПечатнойФормы.ИмяРеквизита]; + ПечатнаяФормаДоступна = Элементы.Страницы.ТекущаяСтраница <> Элементы.СтраницаПечатнаяФормаНедоступна; + + МожноПечатать = ПечатнаяФормаДоступна И ПолеТабличногоДокумента.Вывод = ИспользованиеВывода.Разрешить; + + Если Элементы.Найти("КнопкаПредварительныйПросмотр") <> Неопределено Тогда + Элементы.КнопкаПредварительныйПросмотр.Доступность = МожноПечатать; + КонецЕсли; + Если Элементы.Найти("КнопкаПредварительныйПросмотрВсеДействия") <> Неопределено Тогда + Элементы.КнопкаПредварительныйПросмотрВсеДействия.Доступность = МожноПечатать; + КонецЕсли; + Если Элементы.Найти("КнопкаПараметрыСтраницыВсеДействия") <> Неопределено Тогда + Элементы.КнопкаПараметрыСтраницыВсеДействия.Доступность = МожноПечатать; + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ОбновитьТекущуюПечатнуюФорму() @@ -1164,6 +1269,8 @@ КонецЕсли; КонецЦикла; + УстановитьТекущийТабличныйДокумент(ИмяРеквизита); + КонецПроцедуры &НаКлиенте @@ -1217,9 +1324,12 @@ ПараметрыФормы = Новый Структура; ИмяОткрываемойФормы = "ОбщаяФорма.ВыборФорматаВложений"; - Если ПолучателейБольшеОдного(ПараметрыВывода.ПараметрыОтправки.Получатель) Тогда - ПараметрыФормы.Вставить("Получатели", ПараметрыВывода.ПараметрыОтправки.Получатель); - ИмяОткрываемойФормы = "ОбщаяФорма.ПодготовкаНовогоПисьма"; + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") + И СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИспользоватьПочтовыйКлиент Тогда + Если ПолучателейБольшеОдного(ПараметрыВывода.ПараметрыОтправки.Получатель) Тогда + ПараметрыФормы.Вставить("Получатели", ПараметрыВывода.ПараметрыОтправки.Получатель); + ИмяОткрываемойФормы = "ОбщаяФорма.ПодготовкаНовогоПисьма"; + КонецЕсли; КонецЕсли; ОткрытьФорму(ИмяОткрываемойФормы, ПараметрыФормы, ЭтотОбъект); diff --git a/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Module.bsl b/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Module.bsl index 45e09aa51..1ac5a5197 100644 --- a/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Module.bsl +++ b/SSL/src/CommonForms/ПодготовкаНовогоПисьма/Module.bsl @@ -61,26 +61,6 @@ #КонецОбласти -#Область ОбработчикиКомандФормы - -&НаКлиенте -Процедура Выбрать(Команда) - РезультатВыбора = ВыбранныеНастройкиФормата(); - ОповеститьОВыборе(РезультатВыбора); -КонецПроцедуры - -&НаКлиенте -Процедура ВыбратьВсехПолучателей(Команда) - УстановитьВыборДляВсехПолучателей(Истина); -КонецПроцедуры - -&НаКлиенте -Процедура ОтменитьВыборДляВсех(Команда) - УстановитьВыборДляВсехПолучателей(Ложь); -КонецПроцедуры - -#КонецОбласти - #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте @@ -107,6 +87,26 @@ #КонецОбласти +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Выбрать(Команда) + РезультатВыбора = ВыбранныеНастройкиФормата(); + ОповеститьОВыборе(РезультатВыбора); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбратьВсехПолучателей(Команда) + УстановитьВыборДляВсехПолучателей(Истина); +КонецПроцедуры + +&НаКлиенте +Процедура ОтменитьВыборДляВсех(Команда) + УстановитьВыборДляВсехПолучателей(Ложь); +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции &НаСервере diff --git a/SSL/src/CommonForms/ПоискИсполняемогоФайла1СБухфон/Form.form b/SSL/src/CommonForms/ПоискИсполняемогоФайла1СБухфон/Form.form index 56bf83cc6..76eb17f30 100644 --- a/SSL/src/CommonForms/ПоискИсполняемогоФайла1СБухфон/Form.form +++ b/SSL/src/CommonForms/ПоискИсполняемогоФайла1СБухфон/Form.form @@ -2,53 +2,11 @@ <key>ru</key> - <value>Не найден исполняемый файл</value> + <value>Не найден файл приложения</value> - - ДекорацияЛоготип - 162 - - <key>ru</key> - <value>Декорация логотип</value> - - true - true - - true - - - ДекорацияЛоготипРасширеннаяПодсказка - 164 - Label - true - true - - Left - - - - ДекорацияЛоготипКонтекстноеМеню - 163 - true - - 45 - true - 2 - true - - - CommonPicture.Логотип1СБухфон - - AutoSize - - ПутьКФайлу 21 - - <key>ru</key> - <value>Проверьте путь к исполняемому файлу</value> - true true @@ -143,7 +101,7 @@ 19 <key>ru</key> - <value>Если не удалось найти файл программы 1С-Бухфон, <link http://distribs.buhphone.com/current>скачайте</> программу на сайте разработчика.</value> + <value>Если не удалось найти файл приложения для связи со специалистом онлайн-поддержки, <link http://distribs.buhphone.com/current>скачайте</> приложение на сайте разработчика.</value> true true @@ -169,11 +127,10 @@ Label 40 true - 2 + 3 true Left - Bottom 1 @@ -182,7 +139,7 @@ 30 <key>ru</key> - <value>За помощью обращайтесь к <link http://its.1c.ru/db/aboutits#content:23:1>Партнерам 1С</>.</value> + <value>За помощью обращайтесь к <link http://its.1c.ru/db/aboutits#content:23:1>партнерам 1С</>.</value> true true @@ -207,7 +164,6 @@ true Label true - 2 true true @@ -371,7 +327,7 @@ ПутьКФайлу <key>ru</key> - <value>Путь к файлу</value> + <value>Проверьте путь к файлу приложения</value> 1 diff --git a/SSL/src/CommonForms/ПоискИсполняемогоФайла1СБухфон/Help/ru.html b/SSL/src/CommonForms/ПоискИсполняемогоФайла1СБухфон/Help/ru.html index fff0205be..0c4c73719 100644 --- a/SSL/src/CommonForms/ПоискИсполняемогоФайла1СБухфон/Help/ru.html +++ b/SSL/src/CommonForms/ПоискИсполняемогоФайла1СБухфон/Help/ru.html @@ -1,3 +1,3 @@ - -

          Предназначена для повторного указания пути к исполняемому файлу 1С-Бухфон. Возникает в случае отсутствия файла по указанному пути.

          + +

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

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

          \ No newline at end of file diff --git a/SSL/src/CommonForms/ПоискИсполняемогоФайла1СБухфон/ПоискИсполняемогоФайла1СБухфон.mdo b/SSL/src/CommonForms/ПоискИсполняемогоФайла1СБухфон/ПоискИсполняемогоФайла1СБухфон.mdo index 33c86fd25..e4ee11c32 100644 --- a/SSL/src/CommonForms/ПоискИсполняемогоФайла1СБухфон/ПоискИсполняемогоФайла1СБухфон.mdo +++ b/SSL/src/CommonForms/ПоискИсполняемогоФайла1СБухфон/ПоискИсполняемогоФайла1СБухфон.mdo @@ -3,7 +3,7 @@ ПоискИсполняемогоФайла1СБухфон ru - Поиск исполняемого файла 1С-Бухфон + Поиск исполняемого файла diff --git a/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Form.form b/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Form.form index 243e5ad13..3342be0ed 100644 --- a/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Form.form +++ b/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Form.form @@ -47,10 +47,6 @@ true true true - - ru - ЧЦ=15; ЧДЦ=2; ЧН=0 - true true true @@ -143,10 +139,6 @@ true true true - - ru - ЧЦ=15; ЧДЦ=4; ЧН=0 - true true true @@ -193,10 +185,6 @@ true true true - - ru - ЧЦ=15; ЧДЦ=2; ЧН=0 - true true true @@ -243,10 +231,6 @@ true true true - - ru - ЧЦ=15; ЧДЦ=2; ЧН=0 - true true true diff --git a/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Help/ru.html b/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Help/ru.html index d858de4dd..6718302f3 100644 --- a/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Help/ru.html +++ b/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

          @@ -7,5 +7,5 @@
        • Количество - количество выделенных числовых ячеек;
        • Среднее - среднее арифметическое чисел в выделенных ячейках;
        • Минимум - наименьшее среди чисел в выделенных ячейках; -
        • Максимум - наибольшее среди чисел в выделенных ячейках;

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

        +
      • Максимум - наибольшее среди чисел в выделенных ячейках;

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

      • Всего ячеек - количество всех выделенных ячеек, независимо от содержащейся в них информации.
      \ No newline at end of file diff --git a/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Module.bsl b/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Module.bsl index cd12c3223..44c538738 100644 --- a/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Module.bsl +++ b/SSL/src/CommonForms/ПоказателиВыделенныхЯчеек/Module.bsl @@ -2,28 +2,39 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + // Параметры: + // Если передан параметр Расчет, то параметры ТабличныйДокумент и ВыделенныеОбласти не используются. + // Расчет - Структура - Результат функции СтандартныеПодсистемыКлиентСервер.РасчетЯчеек(). + // ТабличныйДокумент - ТабличныйДокумент - Таблица, для которой выполняются расчеты. + // ВыделенныеОбласти - Массив - Области документа, которые требуется рассчитать. + // См. возвращаемое значение функции СтандартныеПодсистемыКлиент.ВыделенныеОбласти(). Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; - // Параметры: - // ТабличныйДокумент - ТабличныйДокумент - Таблица, для которой выполняются расчеты. - // ВыделенныеОбласти - Массив - Области документа, которые требуется рассчитать. - // См. возвращаемое значение функции СтандартныеПодсистемыКлиент.ВыделенныеОбласти(). - Расчет = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "Расчет"); - Если ТипЗнч(Расчет) = Тип("Структура") Тогда - ЗаполнитьЗначенияСвойств(ЭтотОбъект, Расчет); - Элементы.Переместить(Элементы.Закрыть, КоманднаяПанель); - Иначе + Если ТипЗнч(Расчет) <> Тип("Структура") Тогда Расчет = СтандартныеПодсистемыКлиентСервер.РасчетЯчеек(Параметры.ТабличныйДокумент, Параметры.ВыделенныеОбласти); - ЗаполнитьЗначенияСвойств(ЭтотОбъект, Расчет); - Если Расчет.КоличествоЧисловых > 0 Тогда - Среднее = Расчет.Сумма / Расчет.КоличествоЧисловых; - КонецЕсли; КонецЕсли; + ЗаполнитьЗначенияСвойств(ЭтотОбъект, Расчет); + РазрядностьЧисел = Макс(0, Разрядность(Сумма), Разрядность(Минимум), Разрядность(Максимум)); + РазрядностьСреднего = Макс(РазрядностьЧисел, Разрядность(Среднее)); + + ФорматЧисел = "ЧДЦ=" + Строка(РазрядностьЧисел) + "; ЧН=0"; + Элементы.Сумма.ФорматРедактирования = ФорматЧисел; + Элементы.Минимум.ФорматРедактирования = ФорматЧисел; + Элементы.Максимум.ФорматРедактирования = ФорматЧисел; + Элементы.Среднее.ФорматРедактирования = "ЧДЦ=" + Строка(РазрядностьСреднего) + "; ЧН=0"; КонецПроцедуры #КонецОбласти +#Область СлужебныеПроцедурыИФункции + +&НаКлиентеНаСервереБезКонтекста +Функция Разрядность(Число) + Возврат СтрДлина(Макс(Число,-Число)%1)-2; +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/ПраваДоступа/Form.form b/SSL/src/CommonForms/ПраваДоступа/Form.form index 8e72e00cd..f65a5f3b5 100644 --- a/SSL/src/CommonForms/ПраваДоступа/Form.form +++ b/SSL/src/CommonForms/ПраваДоступа/Form.form @@ -623,6 +623,7 @@ Vertical auto + false @@ -929,6 +930,7 @@ Vertical auto + false true diff --git a/SSL/src/CommonForms/ПраваДоступа/Help/ru.html b/SSL/src/CommonForms/ПраваДоступа/Help/ru.html index e152b76ec..147b805ef 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 ea7af7a5b..83953d300 100644 --- a/SSL/src/CommonForms/ПраваДоступа/Module.bsl +++ b/SSL/src/CommonForms/ПраваДоступа/Module.bsl @@ -579,10 +579,20 @@ ПараметрыДействия.Вставить("Форма", ЭтотОбъект); ПараметрыДействия.Вставить("КоллекцияРолей", ПрочитанныеРоли); - ТипПользователей = ?(ОбщегоНазначенияПовтИсп.РазделениеВключено(), - Перечисления.ТипыПользователей.ПользовательОбластиДанных, - Перечисления.ТипыПользователей.ПользовательЛокальногоРешения); - ПараметрыДействия.Вставить("ТипПользователей", ТипПользователей); + Если ТипЗнч(Параметры.Пользователь) = Тип("СправочникСсылка.Пользователи") + И Пользователи.ЭтоПолноправныйПользователь(Параметры.Пользователь, Ложь, Ложь) Тогда + + НазначениеРолей = "ДляАдминистраторов"; + + ИначеЕсли ТипЗнч(Параметры.Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") + Или ТипЗнч(Параметры.Пользователь) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда + + НазначениеРолей = "ДляВнешнихПользователей"; + Иначе + НазначениеРолей = "ДляПользователей"; + КонецЕсли; + + ПараметрыДействия.Вставить("НазначениеРолей", НазначениеРолей); ПользователиСлужебный.ОбработатьИнтерфейсРолей(Действие, ПараметрыДействия); diff --git a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Help/ru.html b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Help/ru.html index 8060f6ffa..1667909ac 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 1e4320539..4ab4c2082 100644 --- a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl +++ b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl @@ -115,10 +115,10 @@ ТекущаяСтрокаЗначенияДоступаПриОшибке = Элементы.ЗначенияДоступа.ТекущаяСтрока; Элементы.Профили.ТекущаяСтрока = СвойстваПрофиля.ПолучитьИдентификатор(); - ПриИзмененииТекущегоПрофиля(ЭтотОбъект, Ложь); + ПриИзмененииТекущегоПрофиля(ЭтотОбъект); Элементы.ВидыДоступа.ТекущаяСтрока = ТекущаяСтрокаВидаДоступа; - УправлениеДоступомСлужебныйКлиентСервер.ПриИзмененииТекущегоВидаДоступа(ЭтотОбъект, Ложь); + УправлениеДоступомСлужебныйКлиентСервер.ПриИзмененииТекущегоВидаДоступа(ЭтотОбъект); ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки, Отказ); Иначе @@ -852,17 +852,17 @@ КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура ПриИзмененииТекущегоПрофиля(Знач Форма, Знач НаКлиенте = Истина) +Процедура ПриИзмененииТекущегоПрофиля(Знач Форма) Элементы = Форма.Элементы; Профили = Форма.Профили; ВидыДоступа = Форма.ВидыДоступа; - Если НаКлиенте Тогда + #Если Клиент Тогда ТекущиеДанные = Элементы.Профили.ТекущиеДанные; - Иначе + #Иначе ТекущиеДанные = Профили.НайтиПоИдентификатору(?(Элементы.Профили.ТекущаяСтрока = Неопределено, -1, Элементы.Профили.ТекущаяСтрока)); - КонецЕсли; + #КонецЕсли Форма.ТекущийПрофиль = Неопределено; РедактированиеТекущихОграничений = Ложь; @@ -899,7 +899,7 @@ ТекущиеВидыДоступа = ВидыДоступа.НайтиСтроки(Новый Структура("ГруппаДоступа", Форма.ТекущаяГруппаДоступа)); Если ТекущиеВидыДоступа.Количество() = 0 Тогда Элементы.ЗначенияДоступа.ОтборСтрок = Новый ФиксированнаяСтруктура("ГруппаДоступа, ВидДоступа", Форма.ТекущаяГруппаДоступа, ""); - УправлениеДоступомСлужебныйКлиентСервер.ПриИзмененииТекущегоВидаДоступа(Форма, НаКлиенте); + УправлениеДоступомСлужебныйКлиентСервер.ПриИзмененииТекущегоВидаДоступа(Форма); Иначе Элементы.ВидыДоступа.ТекущаяСтрока = ТекущиеВидыДоступа[0].ПолучитьИдентификатор(); КонецЕсли; diff --git a/SSL/src/CommonForms/ПредупреждениеБезопасности/Form.form b/SSL/src/CommonForms/ПредупреждениеБезопасности/Form.form new file mode 100644 index 000000000..d4d0823c0 --- /dev/null +++ b/SSL/src/CommonForms/ПредупреждениеБезопасности/Form.form @@ -0,0 +1,1785 @@ + + + + <key>ru</key> + <value>Предупреждение безопасности</value> + + + КартинкаПредупреждение32 + 21 + + <key>ru</key> + <value>Картинка предупреждение32</value> + + true + true + + true + + + КартинкаПредупреждение32РасширеннаяПодсказка + 23 + Label + true + true + + Left + + + + КартинкаПредупреждение32КонтекстноеМеню + 22 + true + + 4 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + Страницы + 15 + + ПослеОбновления + 40 + + Надпись1 + 42 + + <key>ru</key> + <value>В целях безопасности рекомендуется запретить открытие внешних отчетов +и обработок из меню <b>Файл - </><b>Открыть</>. +Файлы внешних обработок (отчетов), полученные из источников, +с которыми у вас нет договоренности о разработке таких обработок (отчетов), +могут нанести вред вашему компьютеру и данным в программе. + +Вместо открытия внешних отчетов и обработок рекомендуется использовать +<link e1cib/list/Справочник.ДополнительныеОтчетыИОбработки>дополнительные</><link e1cib/list/Справочник.ДополнительныеОтчетыИОбработки> отчеты</><link e1cib/list/Справочник.ДополнительныеОтчетыИОбработки> и обработки</> и <link e1cib/app/ОбщаяФорма.УстановленныеРасширения>расширения</>, полученные из надежных источников. + +См. также: <link http://1c.ru/news/info.jsp?id=21537>Пример проблемы с вирусом во внешней обработке</>.</value> + + true + true + + true + + + Надпись1РасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + Надпись1КонтекстноеМеню + 43 + true + + true + Label + true + true + false + + Left + + + + КоманднаяПанель1 + 47 + + ЗапретитьОткрытиеВнешнихОтчетовИОбработок + 104 + true + true + + true + + + ЗапретитьОткрытиеВнешнихОтчетовИОбработокРасширеннаяПодсказка + 105 + Label + true + true + + Left + + + Form.Command.ЗапретитьОткрытиеВнешнихОтчетовИОбработок + Auto + true + true + true + UserCmds + Auto + + + НеЗапрещать + 64 + true + true + + true + + + НеЗапрещатьРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + Form.Command.НеЗапрещатьОткрытиеВнешнихОтчетовИОбработок + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель1</value> + + + ru + Командная панель1 + + + КоманднаяПанель1РасширеннаяПодсказка + 48 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>После обновления</value> + + + ru + После обновления + + + ПослеОбновленияРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + ПослеПоявленияПрава + 53 + + Надпись2 + 55 + + <key>ru</key> + <value>В настройках прав доступа вам разрешено открывать файлы внешних отчетов и обработок +из меню <b>Файл - </><b>Открыть</>. При открытии таких файлов следует обращать особое внимание +на их источник и не открывать файлы, полученные из источников, +с которыми у вас нет договоренности о разработке таких обработок (отчетов). + +В противном случае, такие файлы могут нанести вред вашему компьютеру и данным в программе. +См. также: <link http://1c.ru/news/info.jsp?id=21537>Пример проблемы с вирусом во внешней обработке</>. +</value> + + true + true + + true + + + Надпись2РасширеннаяПодсказка + 57 + Label + true + true + + Left + + + + Надпись2КонтекстноеМеню + 56 + true + + true + Label + true + true + false + + Left + + + + КоманднаяПанель2 + 58 + + ЯОзнакомлен + 106 + true + true + + true + + + ЯОзнакомленРасширеннаяПодсказка + 107 + Label + true + true + + Left + + + Form.Command.ЯОзнакомлен + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель2</value> + + + ru + Командная панель2 + + + КоманднаяПанель2РасширеннаяПодсказка + 59 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>После появления права</value> + + + ru + После появления права + + + ПослеПоявленияПраваРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + ПередДобавлениемДОИО + 68 + + Надпись3 + 70 + + <key>ru</key> + <value>При подключении дополнительного отчета или обработки рекомендуется +обращать внимание на источник, из которого был получен файл. +Если вы не уверены в содержимом этого файла или в источнике, +то файл не рекомендуется подключать к программе. + +См. также: <link http://1c.ru/news/info.jsp?id=21537>Пример проблемы с вирусом во внешней обработке</>. +</value> + + true + true + + true + + + Надпись3РасширеннаяПодсказка + 72 + Label + true + true + + Left + + + + Надпись3КонтекстноеМеню + 71 + true + + true + Label + true + true + false + + Left + + + + Колонки3 + 73 + + КоманднаяПанель3 + 78 + + Продолжить3 + 84 + true + true + + true + + + Продолжить3РасширеннаяПодсказка + 85 + Label + true + true + + Left + + + Form.Command.Продолжить + Normal + Auto + true + true + UserCmds + Auto + + + Отмена3 + 82 + true + true + + true + + + Отмена3РасширеннаяПодсказка + 83 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель3</value> + + + ru + Командная панель3 + + + КоманднаяПанель3РасширеннаяПодсказка + 79 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Колонки3</value> + + + ru + Колонки3 + + + Колонки3РасширеннаяПодсказка + 74 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Перед добавлением ДОИО</value> + + + ru + Перед добавлением ДОИО + + + ПередДобавлениемДОИОРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + ПередДобавлениемРасширений + 17 + + Надпись4 + 26 + + <key>ru</key> + <value>При подключении расширения конфигурации рекомендуется обращать +внимание на источник, из которого был получен файл расширения. +Если вы не уверены в содержимом расширения или в его источнике, +то расширение не рекомендуется подключать к программе. + +См. также: <link http://1c.ru/news/info.jsp?id=21537>Пример проблемы с вирусом во внешней обработке</>. +</value> + + true + true + + true + + + Надпись4РасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + Надпись4КонтекстноеМеню + 27 + true + + true + Label + true + true + false + + Left + + + + Колонки4 + 29 + + КоманднаяПанель4 + 34 + + Продолжить4 + 66 + true + true + + true + + + Продолжить4РасширеннаяПодсказка + 67 + Label + true + true + + Left + + + Form.Command.Продолжить + Normal + Auto + true + true + UserCmds + Auto + + + Отмена4 + 38 + true + true + + true + + + Отмена4РасширеннаяПодсказка + 39 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель4</value> + + + ru + Командная панель4 + + + КоманднаяПанель4РасширеннаяПодсказка + 35 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Колонки4</value> + + + ru + Колонки4 + + + Колонки4РасширеннаяПодсказка + 30 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Перед добавлением расширений</value> + + + ru + Перед добавлением расширений + + + ПередДобавлениемРасширенийРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + ПередВыборомФайлаОбновления + 153 + + Надпись7 + 155 + + <key>ru</key> + <value>При установке обновления конфигурации рекомендуется обращать +внимание на источник, из которого был получен файл обновления. +Если вы не уверены в содержимом обновления или в его источнике, +то обновление не рекомендуется устанавливать. + +См. также: <link http://1c.ru/news/info.jsp?id=21537>Пример проблемы с вирусом во внешней обработке</>. +</value> + + true + true + + true + + + Надпись7РасширеннаяПодсказка + 157 + Label + true + true + + Left + + + + Надпись7КонтекстноеМеню + 156 + true + + true + Label + true + false + + Left + + + + Колонки8 + 158 + + КоманднаяПанель8 + 160 + + Продолжить8 + 162 + true + true + + true + + + Продолжить8РасширеннаяПодсказка + 163 + Label + true + true + + Left + + + Form.Command.Продолжить + Normal + Auto + true + true + UserCmds + Auto + + + Отмена8 + 164 + true + true + + true + + + Отмена8РасширеннаяПодсказка + 165 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель4</value> + + + ru + Командная панель4 + + + КоманднаяПанель8РасширеннаяПодсказка + 161 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Колонки4</value> + + + ru + Колонки4 + + + Колонки8РасширеннаяПодсказка + 159 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Перед выбором файла обновления</value> + + + ru + Перед добавлением расширений + + + ПередВыборомФайлаОбновленияРасширеннаяПодсказка + 154 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + ПередВыборомРоли + 108 + + Надпись5 + 110 + + <key>ru</key> + <value>Выбранная роль позволяет открывать файлы внешних отчетов и обработок +из меню <b>Файл - </><b>Открыть</>. При открытии таких файлов следует обращать особое внимание +на источник, из которого он был получен, и не открывать файлы, в которых вы не уверены. + +В противном случае, такие файлы могут нанести вред вашему компьютеру и данным в программе. +См. также: <link http://1c.ru/news/info.jsp?id=21537>Пример проблемы с вирусом во внешней обработке</>.</value> + + true + true + + true + + + Надпись5РасширеннаяПодсказка + 112 + Label + true + true + + Left + + + + Надпись5КонтекстноеМеню + 111 + true + + true + Label + true + true + false + + Left + + + + Колонки5 + 113 + + КоманднаяПанель5 + 118 + + Продолжить5 + 120 + true + true + + true + + + Продолжить5РасширеннаяПодсказка + 121 + Label + true + true + + Left + + + Form.Command.Продолжить + Normal + Auto + true + true + UserCmds + Auto + + + Отмена5 + 122 + true + true + + true + + + Отмена5РасширеннаяПодсказка + 123 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель5</value> + + + ru + Командная панель5 + + + КоманднаяПанель5РасширеннаяПодсказка + 119 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Колонки5</value> + + + ru + Колонки5 + + + Колонки5РасширеннаяПодсказка + 114 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Перед выбором роли</value> + + + ru + Перед выбором роли + + + ПередВыборомРолиРасширеннаяПодсказка + 109 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + ПриИзмененииСпискаЗапрещенныхРасширений + 124 + + Надпись6 + 126 + + <key>ru</key> + <value>Отключение данной настройки позволяет загружать потенциально опасные файлы в базу. +При добавлении таких файлов следует обращать особое внимание +на источник, из которого он был получен, и не загружать файлы, в которых вы не уверены. + +В противном случае, такие файлы могут нанести вред компьютерам пользователей. +См. также: <link http://1c.ru/news/info.jsp?id=21537>Пример проблемы с вирусом во внешней обработке</>.</value> + + true + true + + true + + + Надпись6РасширеннаяПодсказка + 128 + Label + true + true + + Left + + + + Надпись6КонтекстноеМеню + 127 + true + + true + Label + true + true + false + + Left + + + + Колонки6 + 129 + + КоманднаяПанель6 + 131 + + Продолжить6 + 133 + true + true + + true + + + Продолжить6РасширеннаяПодсказка + 134 + Label + true + true + + Left + + + Form.Command.Продолжить + Normal + Auto + true + true + UserCmds + Auto + + + Отмена6 + 135 + true + true + + true + + + Отмена6РасширеннаяПодсказка + 136 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель5</value> + + + ru + Командная панель5 + + + КоманднаяПанель6РасширеннаяПодсказка + 132 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Колонки5</value> + + + ru + Колонки5 + + + Колонки6РасширеннаяПодсказка + 130 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>При изменении списка запрещенных расширений</value> + + + ru + При изменении списка запрещенных расширений + + + ПриИзмененииСпискаЗапрещенныхРасширенийРасширеннаяПодсказка + 125 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + ПередОткрытиемФайла + 137 + + ПредупрежденииПриОткрытииФайла + 150 + + <key>ru</key> + <value>%1</value> + + true + true + + true + + + ПредупрежденииПриОткрытииФайлаРасширеннаяПодсказка + 152 + Label + true + true + + Left + + + + ПредупрежденииПриОткрытииФайлаКонтекстноеМеню + 151 + true + + Label + true + true + + Left + + + + ПредупрежденииПриОткрытииФайлаПояснение + 139 + + <key>ru</key> + <value>Файл содержит исполняемый код, который может быть потенциально опасен для компьютера. +Открывайте файлы, только если доверяете их содержимому. + +В противном случае, такие файлы могут нанести вред компьютеру. +См. также: <link http://1c.ru/news/info.jsp?id=21537>Пример проблемы с вирусом во внешней обработке</>.</value> + + true + true + + true + + + ПредупрежденииПриОткрытииФайлаПояснениеРасширеннаяПодсказка + 141 + Label + true + true + + Left + + + + ПредупрежденииПриОткрытииФайлаПояснениеКонтекстноеМеню + 140 + true + + true + Label + true + true + false + + Left + + + + Колонки7 + 142 + + КоманднаяПанель7 + 144 + + Продолжить7 + 146 + true + true + + true + + + Продолжить7РасширеннаяПодсказка + 147 + Label + true + true + + Left + + + Form.Command.Продолжить + Normal + Auto + true + true + UserCmds + Auto + + + Отмена7 + 148 + true + true + + true + + + Отмена7РасширеннаяПодсказка + 149 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель5</value> + + + ru + Командная панель5 + + + КоманднаяПанель7РасширеннаяПодсказка + 145 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Колонки5</value> + + + ru + Колонки5 + + + Колонки7РасширеннаяПодсказка + 143 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Перед открытием файла</value> + + + ru + Перед открытием файла + + + ПередОткрытиемФайлаРасширеннаяПодсказка + 138 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Страницы</value> + + + ru + Страницы + + + СтраницыРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + Pages + + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + true + true + auto + true + + НуженПерезапуск + + <key>ru</key> + <value>Нужен перезапуск</value> + + 1 + + Boolean + + + true + + + true + + + + ИмяНажатойКнопки + + <key>ru</key> + <value>Имя нажатой кнопки</value> + + 2 + + String + + + + true + + + true + + + + РазрешитьИнтерактивноеОткрытие + + <key>ru</key> + <value>Разрешить интерактивное открытие</value> + + 3 + + Boolean + + + true + + + true + + + + НеЗапрещатьОткрытиеВнешнихОтчетовИОбработок + + <key>ru</key> + <value>Не запрещать</value> + + 1 + + ru + Не запрещать открытие внешних отчетов и обработок + + + true + + + + НеЗапрещатьОткрытиеВнешнихОтчетовИОбработок + + + DontUse + Auto + + + Продолжить + + <key>ru</key> + <value>Продолжить</value> + + 2 + + ru + Продолжить + + + true + + + + КомандаПродолжить + + + DontUse + Auto + + + ЗапретитьОткрытиеВнешнихОтчетовИОбработок + + <key>ru</key> + <value>Запретить открытие внешних отчетов и обработок</value> + + 3 + + ru + Роль "Интерактивное открытие внешних отчетов и обработок" будет отключена у всех пользователей и администраторов. + + + true + + + + ЗапретитьОткрытиеВнешнихОтчетовИОбработок + + + DontUse + Auto + + + ЯОзнакомлен + + <key>ru</key> + <value>ОК</value> + + 4 + + ru + ОК + + + true + + + + ЯОзнакомлен + + + DontUse + Auto + + + РазрешитьТолькоАдминистраторам + + <key>ru</key> + <value>Разрешить только администраторам</value> + + 5 + + ru + Разрешить только администраторам + + + true + + DontUse + Auto + + + РазрешитьВсем + + <key>ru</key> + <value>Разрешить всем</value> + + 6 + + ru + Разрешить всем + + + true + + DontUse + Auto + + + ЗапретитьВсем + + <key>ru</key> + <value>Запретить всем</value> + + 7 + + ru + Запретить всем + + + true + + DontUse + Auto + + + Ключ + + String + + + true + + + ИмяФайла + + String + + + + + + + + diff --git a/SSL/src/CommonForms/ПредупреждениеБезопасности/Module.bsl b/SSL/src/CommonForms/ПредупреждениеБезопасности/Module.bsl new file mode 100644 index 000000000..bda256020 --- /dev/null +++ b/SSL/src/CommonForms/ПредупреждениеБезопасности/Module.bsl @@ -0,0 +1,156 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + Если Не ЗначениеЗаполнено(Параметры.Ключ) Тогда + ТекстОшибки = НСтр("ru = 'Общая форма ""Предупреждение безопасности"" является вспомогательной и открывается из служебных механизмов программы.'"); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + ТекущаяСтраница = Элементы.Найти(Параметры.Ключ); + Для Каждого Страница Из Элементы.Страницы.ПодчиненныеЭлементы Цикл + Страница.Видимость = (Страница = ТекущаяСтраница); + КонецЦикла; + Элементы.Страницы.ТекущаяСтраница = ТекущаяСтраница; + + Если ТекущаяСтраница = Элементы.ПослеОбновления Тогда + Элементы.ЗапретитьОткрытиеВнешнихОтчетовИОбработок.КнопкаПоУмолчанию = Истина; + ИначеЕсли ТекущаяСтраница = Элементы.ПослеПоявленияПрава Тогда + Элементы.ЯОзнакомлен.КнопкаПоУмолчанию = Истина; + КонецЕсли; + + КлючНазначенияИспользования = Параметры.Ключ; + КлючСохраненияПоложенияОкна = Параметры.Ключ; + + Если Не ПустаяСтрока(Параметры.ИмяФайла) Тогда + Элементы.ПредупрежденииПриОткрытииФайла.Заголовок = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Элементы.ПредупрежденииПриОткрытииФайла.Заголовок, Параметры.ИмяФайла); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура КомандаПродолжить(Команда) + ИмяНажатойКнопки = Команда.Имя; + ЗакрытьФормуИВернутьРезультат(); +КонецПроцедуры + +&НаКлиенте +Процедура ЗапретитьОткрытиеВнешнихОтчетовИОбработок(Команда) + РазрешитьИнтерактивноеОткрытие = Ложь; + УправлениеРольюНаКлиенте(Команда); +КонецПроцедуры + +&НаКлиенте +Процедура НеЗапрещатьОткрытиеВнешнихОтчетовИОбработок(Команда) + РазрешитьИнтерактивноеОткрытие = Истина; + УправлениеРольюНаКлиенте(Команда); +КонецПроцедуры + +&НаКлиенте +Процедура ЯОзнакомлен(Команда) + ИмяНажатойКнопки = Команда.Имя; + ЯОзнакомленНаСервере(); + ЗакрытьФормуИВернутьРезультат(); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура УправлениеРольюНаКлиенте(Команда) + ИмяНажатойКнопки = Команда.Имя; + УправлениеРольюНаСервере(); + ОбновитьПовторноИспользуемыеЗначения(); + ПредложитьПерезапуск(); +КонецПроцедуры + +&НаСервере +Процедура УправлениеРольюНаСервере() + Если Не ПравоДоступа("Администрирование", Метаданные) Тогда + Возврат; + КонецЕсли; + РольОткрытие = Метаданные.Роли.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок; + РольАдминистратора = Метаданные.Роли.АдминистраторСистемы; + + ПараметрыАдминистрирования = СтандартныеПодсистемыСервер.ПараметрыАдминистрирования(); + ПараметрыАдминистрирования.Вставить("ПринятоРешениеПоОткрытиюВнешнихОтчетовИОбработок", Истина); + СтандартныеПодсистемыСервер.УстановитьПараметрыАдминистрирования(ПараметрыАдминистрирования); + + ОбновитьПовторноИспользуемыеЗначения(); + + ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); + Для Каждого ПользовательИБ Из ПользователиИБ Цикл + Если РазрешитьИнтерактивноеОткрытие Тогда + Если ПользовательИБ.Роли.Содержит(РольАдминистратора) + И Не ПользовательИБ.Роли.Содержит(РольОткрытие) Тогда + ПользовательИБ.Роли.Добавить(РольОткрытие); + ПользовательИБ.Записать(); + КонецЕсли; + Иначе + Если ПользовательИБ.Роли.Содержит(РольОткрытие) Тогда + ПользовательИБ.Роли.Удалить(РольОткрытие); + ПользовательИБ.Записать(); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если РазрешитьИнтерактивноеОткрытие Тогда + НуженПерезапуск = Не ПравоДоступа("ИнтерактивноеОткрытиеВнешнихОбработок", Метаданные); + Иначе + НуженПерезапуск = ПравоДоступа("ИнтерактивноеОткрытиеВнешнихОбработок", Метаданные); + КонецЕсли; + + ЯОзнакомленНаСервере(); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.УстановитьПравоОткрытияВнешнихОтчетовИОбработок(РазрешитьИнтерактивноеОткрытие); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ЯОзнакомленНаСервере() + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ПредупреждениеБезопасности", "ПользовательОзнакомлен", Истина); +КонецПроцедуры + +&НаКлиенте +Процедура ЗакрытьФормуИВернутьРезультат() + Если Открыта() Тогда + ОповеститьОВыборе(ИмяНажатойКнопки); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПредложитьПерезапуск() + Если Не НуженПерезапуск Тогда + ЗакрытьФормуИВернутьРезультат(); + Возврат; + КонецЕсли; + + Обработчик = Новый ОписаниеОповещения("ПерезапуститьПрограмму", ЭтотОбъект); + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("Перезапустить", НСтр("ru = 'Перезапустить'")); + Кнопки.Добавить("НеПерезапускать", НСтр("ru = 'Не перезапускать'")); + ТекстВопроса = НСтр("ru = 'Для применения изменений в правах доступа требуется перезапустить программу.'"); + ПоказатьВопрос(Обработчик, ТекстВопроса, Кнопки); +КонецПроцедуры + +&НаКлиенте +Процедура ПерезапуститьПрограмму(Ответ, ПараметрыВыполнения) Экспорт + ЗакрытьФормуИВернутьРезультат(); + Если Ответ = "Перезапустить" Тогда + ЗавершитьРаботуСистемы(Ложь, Истина); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonForms/ПредупреждениеБезопасности/ПредупреждениеБезопасности.mdo b/SSL/src/CommonForms/ПредупреждениеБезопасности/ПредупреждениеБезопасности.mdo new file mode 100644 index 000000000..28117d02f --- /dev/null +++ b/SSL/src/CommonForms/ПредупреждениеБезопасности/ПредупреждениеБезопасности.mdo @@ -0,0 +1,10 @@ + + + ПредупреждениеБезопасности + + ru + Предупреждение безопасности + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl b/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl index 95caf9199..0bbb5123e 100644 --- a/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl +++ b/SSL/src/CommonForms/ПредупрежденияПриЗавершенииРаботы/Module.bsl @@ -26,7 +26,7 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте -Процедура НажатиеНаГиперссылку(Элемент) +Процедура Подключаемый_НажатиеНаГиперссылку(Элемент) ИмяЭлемента = Элемент.Имя; Для Каждого СтрокаВопроса Из МассивСоотношенияЭлементовИПараметров Цикл @@ -46,7 +46,7 @@ КонецПроцедуры &НаКлиенте -Процедура ФлажокПриИзменении(Элемент) +Процедура Подключаемый_ФлажокПриИзменении(Элемент) ИмяЭлемента = Элемент.Имя; НайденныйЭлемент = Элементы.Найти(ИмяЭлемента); @@ -102,7 +102,7 @@ // // Параметры: // Вопросы - Массив - структуры с параметрами значений вопросов. -// См. СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииСпискаПредупрежденийЗавершенияРаботы +// См. СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииСпискаПредупрежденийЗавершенияРаботы. // &НаСервере Процедура ИнициализироватьЭлементыВФорме(Знач Предупреждения) @@ -223,7 +223,7 @@ ЭлементГиперссылки = Элементы.Добавить(ИмяГиперссылки, ТипГиперссылки, РодительГиперссылки); ЭлементГиперссылки.Гиперссылка = Истина; ЭлементГиперссылки.Заголовок = СтруктураВопроса.ТекстГиперссылки; - ЭлементГиперссылки.УстановитьДействие("Нажатие", "НажатиеНаГиперссылку"); + ЭлементГиперссылки.УстановитьДействие("Нажатие", "Подключаемый_НажатиеНаГиперссылку"); УстановитьРасширеннуюПодсказку(ЭлементГиперссылки, СтруктураВопроса); @@ -297,7 +297,7 @@ СтруктураДействия = СтруктураВопроса.ДействиеПриУстановленномФлажке; - НовоеПолеФормы.УстановитьДействие("ПриИзменении", "ФлажокПриИзменении"); + НовоеПолеФормы.УстановитьДействие("ПриИзменении", "Подключаемый_ФлажокПриИзменении"); ПараметрыОткрытияФормы = Новый Структура; ПараметрыОткрытияФормы.Вставить("Имя", ИмяФлажка); diff --git a/SSL/src/CommonForms/ПрисоединенныеФайлы/Form.form b/SSL/src/CommonForms/ПрисоединенныеФайлы/Form.form index 6ae8961ea..3c32a5cc5 100644 --- a/SSL/src/CommonForms/ПрисоединенныеФайлы/Form.form +++ b/SSL/src/CommonForms/ПрисоединенныеФайлы/Form.form @@ -344,33 +344,6 @@ UserCmdsAuto - - Предпросмотр - 272 - true - true - - true - - - ПредпросмотрРасширеннаяПодсказка - 273 - Label - true - true - - Left - - - Form.Command.Предпросмотр - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - Печать 265 @@ -743,7 +716,7 @@ InAdditionalSubmenu - ФормаУстановитьПометкуУдаления + УстановитьПометкуУдаления 21 true true @@ -751,7 +724,7 @@ true - ФормаУстановитьПометкуУдаленияExtendedTooltip + УстановитьПометкуУдаленияРасширеннаяПодсказка 119 Label true @@ -760,7 +733,7 @@ Left - Form.Command.УстановитьПометкуУдаления + Form.Item.Список.StandardCommand.SetDeletionMark Normal Auto true @@ -980,6 +953,60 @@ + + Предпросмотр + 272 + true + true + + true + + + ПредпросмотрРасширеннаяПодсказка + 273 + Label + true + true + + Left + + + Form.Command.Предпросмотр + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + НастроитьСинхронизацию + 283 + true + true + + true + + + НастроитьСинхронизациюРасширеннаяПодсказка + 284 + Label + true + true + + Left + + + Form.Command.НастроитьСинхронизацию + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + ФормаГруппаДополнительно 216 @@ -1271,643 +1298,102 @@ - ГруппаФайлы - 270 - - Список - 6 + Группа1 + 285 + + ГруппаПояснениеОблачногоСервиса + 287 + + ДекорацияКартинкаОблачногоСервиса + 295 + + <key>ru</key> + <value>Декорация картинка облачного сервиса</value> + + true + true + + true + + + ДекорацияКартинкаОблачногоСервисаРасширеннаяПодсказка + 297 + Label + true + true + + Left + + + + ДекорацияКартинкаОблачногоСервисаКонтекстноеМеню + 296 + true + + 5 + true + 2 + true + + + CommonPicture.ПапкаОблачногоСервиса + + + + + ДекорацияПояснение + 292 + + <key>ru</key> + <value>Работа с файлами ведется в облачном сервисе <link 1>%</>1</value> + + true + true + + true + + + ДекорацияПояснениеРасширеннаяПодсказка + 294 + Label + true + true + + Left + + + + ДекорацияПояснениеКонтекстноеМеню + 293 + true + + true + Label + true + true + true + + Left + Center + + true true true - - Список - - None - Refresh - - СписокНомерКартинкиПодписанЗашифрован - 206 - true - true - - true - - - Список.НомерКартинкиПодписанЗашифрован - - None - - ru - Наличие электронной подписи или шифрования - - - СписокНомерКартинкиПодписанЗашифрованРасширеннаяПодсказка - 208 - Label - true - true - - Left - - - - СписокНомерКартинкиПодписанЗашифрованКонтекстноеМеню - 207 - true - - PictureField - true - Enter - true - - CommonPicture.ПодписанЗашифрованЗаголовок - - Left - true - - 2 - true - true - true - true - - CommonPicture.ПодписанЗашифрованСостояния - - - - 1 - - - - - СписокГруппаИмяОписание - 204 - - СписокНаименование - 86 - - <key>ru</key> - <value>Наименование</value> - - true - true - - true - - - Список.Наименование - - - ru - Имя файла (без расширения) - - - СписокНаименованиеExtendedTooltip - 159 - Label - true - true - - Left - - - - СписокНаименованиеКонтекстноеМеню - 87 - true - - LabelField - true - Enter - true - true - Left - true - - 20 - true - true - - - - СписокОписание - 168 - - <key>ru</key> - <value>Описание</value> - - true - true - - true - - - Список.Описание - - None - - ru - Краткое описание файла - - - СписокОписаниеРасширеннаяПодсказка - 170 - Label - true - true - - Left - - - - СписокОписаниеКонтекстноеМеню - 169 - true - - LabelField - true - Enter - true - true - Left - true - - 5 - true - true - - - true - true - - true - - - <key>ru</key> - <value>Список группа имя описание</value> - - - ru - Список группа имя описание - - None - - СписокГруппаИмяОписаниеРасширеннаяПодсказка - 205 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - - СписокВажныеРеквизиты - 214 - - СписокАвтор - 182 - - <key>ru</key> - <value>Автор</value> - - true - true - - true - - - Список.Автор - - - ru - Пользователь, который добавил файл в список - - - СписокАвторРасширеннаяПодсказка - 184 - Label - true - true - - Left - - - - СписокАвторКонтекстноеМеню - 183 - true - - LabelField - true - Enter - true - Left - true - - 15 - true - true - false - - - - СписокДатаИзменения - 100 - - <key>ru</key> - <value>Дата изменения</value> - - true - true - - true - - - Список.ДатаИзменения - - - ru - Дата изменения данных файла (местное время) - - - СписокДатаИзмененияРасширеннаяПодсказка - 162 - Label - true - true - - Left - - - - СписокДатаИзмененияКонтекстноеМеню - 101 - true - - LabelField - true - Enter - true - Left - true - - 15 - true - true - false - - - true - true - - true - - - <key>ru</key> - <value>Список важные реквизиты</value> - - - ru - Список важные реквизиты - - None - - СписокВажныеРеквизитыРасширеннаяПодсказка - 215 - Label - true - true - - Left - - - ColumnGroup - - auto - true - - - - СписокРазмер - 98 - - <key>ru</key> - <value>Размер (КБ)</value> - - true - true - - - Список.Размер - - - ru - Размер файла в килобайтах - - - СписокРазмерExtendedTooltip - 164 - Label - true - true - - Left - - - - СписокРазмерКонтекстноеМеню - 99 - true - - LabelField - Enter - true - Left - true - - 10 - true - true - false - - ru - ЧЦ=10; ЧН=0 - - - - - СписокРедактирует - 199 - true - true - - - Список.Редактирует - - - ru - Пользователь, который занял файл для редактирования - - - СписокРедактируетРасширеннаяПодсказка - 201 - Label - true - true - - Left - - - - СписокРедактируетКонтекстноеМеню - 200 - true - - LabelField - true - Enter - true - Left - true - - true - true - - - - СписокДатаСоздания - 179 - - <key>ru</key> - <value>Дата создания</value> - - true - true - - - Список.ДатаСоздания - - - ru - Дата добавления файла в список - - - СписокДатаСозданияРасширеннаяПодсказка - 181 - Label - true - true - - Left - - - - СписокДатаСозданияКонтекстноеМеню - 180 - true - - LabelField - true - Enter - true - Left - true - - 15 - true - true - false - - - - СписокОтредактировал - 191 - true - true - - - Список.Отредактировал - - - ru - Последний пользователь, который отредактировал файл - - - СписокОтредактировалРасширеннаяПодсказка - 193 - Label - true - true - - Left - - - - СписокОтредактировалКонтекстноеМеню - 192 - true - - LabelField - true - Enter - true - Left - true - - true - true - - - - СписокСсылка - 165 - true - true - - - Список.Ссылка - - - СписокСсылкаРасширеннаяПодсказка - 167 - Label - true - true - - Left - - - - СписокСсылкаКонтекстноеМеню - 166 - true - - LabelField - Enter - true - Left - true - - 1 - true - true - - - None - - СписокКоманднаяПанель - 8 - Left - true - - - DragCheck - СписокПроверкаПеретаскивания - - - Selection - СписокВыбор - - - BeforeAddRow - СписокПередНачаломДобавления - - - OnActivateRow - СписокПриАктивизацииСтроки - - - Drag - СписокПеретаскивание - - - BeforeRowChange - СписокПередНачаломИзменения - - - СписокСтрокаПоиска - 248 - - СписокСтрокаПоискаРасширеннаяПодсказка - 250 - Label - true - true - - Left - - - - СписокСтрокаПоискаКонтекстноеМеню - 249 - true - - Список - - true - - - - СписокСостояниеПросмотра - 251 - - СписокСостояниеПросмотраРасширеннаяПодсказка - 253 - Label - true - true - - Left - - - - СписокСостояниеПросмотраКонтекстноеМеню - 252 - true - - ViewStatusAddition - Список - - true - - - - СписокУправлениеПоиском - 254 - - СписокУправлениеПоискомРасширеннаяПодсказка - 256 - Label - true - true - - Left - - - - СписокУправлениеПоискомКонтекстноеМеню - 255 - true - - SearchControlAddition - Список - - true - - + + <key>ru</key> + <value>Группа пояснение облачного сервиса</value> + + + ru + Группа пояснение облачного сервиса + + false - СписокExtendedTooltip - 156 + ГруппаПояснениеОблачногоСервисаРасширеннаяПодсказка + 288 Label true true @@ -1915,20 +1401,66 @@ Left - - СписокКонтекстноеМеню - 7 - - СписокКонтекстноеМенюДобавить - 54 + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаФайлы + 270 + + Список + 6 + true + true + + true + + + Список + + None + CancelSearch + Change + Choose + Copy + CopyToClipboard + Create + Delete + DynamicListStandardSettings + Find + FindByCurrentValue + ListSettings + LoadDynamicListSettings + OutputList + Refresh + SaveDynamicListSettings + SearchHistory + ShowMultipleSelection + + СписокНомерКартинкиПодписанЗашифрован + 206 true true true + + Список.НомерКартинкиПодписанЗашифрован + + None + + ru + Наличие электронной подписи или шифрования + - СписокКонтекстноеМенюДобавитьРасширеннаяПодсказка - 132 + СписокНомерКартинкиПодписанЗашифрованРасширеннаяПодсказка + 208 Label true true @@ -1936,32 +1468,623 @@ Left - Form.Command.Добавить - Normal - Auto - true - true - UserCmds - Auto + + СписокНомерКартинкиПодписанЗашифрованКонтекстноеМеню + 207 + true + + PictureField + true + Enter + true + + CommonPicture.ПодписанЗашифрованЗаголовок + + Left + true + + 2 + true + true + true + true + + CommonPicture.ПодписанЗашифрованСостояния + + + + 1 + + - СписокКонтекстноеМенюГруппаКомандДобавить - 274 - - СписокКонтекстноеМенюДобавитьИзФайлаНаДиске - 276 + СписокГруппаИмяОписание + 204 + + СписокНаименование + 86 <key>ru</key> - <value>Из файла на диске ...</value> + <value>Наименование</value> true true true + + Список.Наименование + + + ru + Имя файла (без расширения) + - СписокКонтекстноеМенюДобавитьИзФайлаНаДискеРасширеннаяПодсказка - 277 + СписокНаименованиеExtendedTooltip + 159 + Label + true + true + + Left + + + + СписокНаименованиеКонтекстноеМеню + 87 + true + + LabelField + true + Enter + true + true + Left + true + + 20 + true + true + + + + СписокОписание + 168 + + <key>ru</key> + <value>Описание</value> + + true + true + + true + + + Список.Описание + + None + + ru + Краткое описание файла + + + СписокОписаниеРасширеннаяПодсказка + 170 + Label + true + true + + Left + + + + СписокОписаниеКонтекстноеМеню + 169 + true + + LabelField + true + Enter + true + true + Left + true + + 5 + true + true + + + true + true + + true + + + <key>ru</key> + <value>Список группа имя описание</value> + + + ru + Список группа имя описание + + None + + СписокГруппаИмяОписаниеРасширеннаяПодсказка + 205 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + СписокВажныеРеквизиты + 214 + + СписокАвтор + 182 + + <key>ru</key> + <value>Автор</value> + + true + true + + true + + + Список.Автор + + + ru + Пользователь, который добавил файл в список + + + СписокАвторРасширеннаяПодсказка + 184 + Label + true + true + + Left + + + + СписокАвторКонтекстноеМеню + 183 + true + + LabelField + true + Enter + true + Left + true + + 15 + true + true + false + + + + СписокДатаИзменения + 100 + + <key>ru</key> + <value>Дата изменения</value> + + true + true + + true + + + Список.ДатаИзменения + + + ru + Дата изменения данных файла (местное время) + + + СписокДатаИзмененияРасширеннаяПодсказка + 162 + Label + true + true + + Left + + + + СписокДатаИзмененияКонтекстноеМеню + 101 + true + + LabelField + true + Enter + true + Left + true + + 15 + true + true + false + + + true + true + + true + + + <key>ru</key> + <value>Список важные реквизиты</value> + + + ru + Список важные реквизиты + + None + + СписокВажныеРеквизитыРасширеннаяПодсказка + 215 + Label + true + true + + Left + + + ColumnGroup + + auto + true + + + + СписокРазмер + 98 + + <key>ru</key> + <value>Размер (КБ)</value> + + true + true + + + Список.Размер + + + ru + Размер файла в килобайтах + + + СписокРазмерExtendedTooltip + 164 + Label + true + true + + Left + + + + СписокРазмерКонтекстноеМеню + 99 + true + + LabelField + Enter + true + Left + true + + 10 + true + true + false + + ru + ЧЦ=10; ЧН=0 + + + + + СписокРедактирует + 199 + true + true + + + Список.Редактирует + + + ru + Пользователь, который занял файл для редактирования + + + СписокРедактируетРасширеннаяПодсказка + 201 + Label + true + true + + Left + + + + СписокРедактируетКонтекстноеМеню + 200 + true + + LabelField + true + Enter + true + Left + true + + true + true + + + + СписокДатаСоздания + 179 + + <key>ru</key> + <value>Дата создания</value> + + true + true + + + Список.ДатаСоздания + + + ru + Дата добавления файла в список + + + СписокДатаСозданияРасширеннаяПодсказка + 181 + Label + true + true + + Left + + + + СписокДатаСозданияКонтекстноеМеню + 180 + true + + LabelField + true + Enter + true + Left + true + + 15 + true + true + false + + + + СписокОтредактировал + 191 + true + true + + + Список.Отредактировал + + + ru + Последний пользователь, который отредактировал файл + + + СписокОтредактировалРасширеннаяПодсказка + 193 + Label + true + true + + Left + + + + СписокОтредактировалКонтекстноеМеню + 192 + true + + LabelField + true + Enter + true + Left + true + + true + true + + + + СписокСсылка + 165 + true + true + + + Список.Ссылка + + + СписокСсылкаРасширеннаяПодсказка + 167 + Label + true + true + + Left + + + + СписокСсылкаКонтекстноеМеню + 166 + true + + LabelField + Enter + true + Left + true + + 1 + true + true + + + None + + СписокКоманднаяПанель + 8 + Left + true + + + DragCheck + СписокПроверкаПеретаскивания + + + Selection + СписокВыбор + + + BeforeAddRow + СписокПередНачаломДобавления + + + OnActivateRow + СписокПриАктивизацииСтроки + + + Drag + СписокПеретаскивание + + + BeforeRowChange + СписокПередНачаломИзменения + + + СписокСтрокаПоиска + 248 + + СписокСтрокаПоискаРасширеннаяПодсказка + 250 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 249 + true + + Список + + true + + + + СписокСостояниеПросмотра + 251 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 253 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 252 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 254 + + СписокУправлениеПоискомРасширеннаяПодсказка + 256 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 255 + true + + SearchControlAddition + Список + + true + + + + СписокExtendedTooltip + 156 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 7 + + СписокКонтекстноеМенюДобавить + 54 + true + true + + true + + + СписокКонтекстноеМенюДобавитьРасширеннаяПодсказка + 132 Label true true @@ -1977,213 +2100,24 @@ UserCmds Auto - - СписокКонтекстноеМенюДобавитьФайлСоСканера - 278 - true - true - - true - - - СписокКонтекстноеМенюДобавитьФайлСоСканераРасширеннаяПодсказка - 279 - Label - true - true - - Left - - - Form.Command.ДобавитьФайлСоСканера - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Добавить</value> - - - ru - Список контекстное меню группа команд добавить - - - СписокКонтекстноеМенюГруппаКомандДобавитьРасширеннаяПодсказка - 275 - Label - true - true - - Left - - - Popup - - - StdPicture.CreateListItem - - Auto - Normal - - - - СписокКонтекстноеМенюИзменить - 202 - true - true - - true - - - СписокКонтекстноеМенюИзменитьРасширеннаяПодсказка - 203 - Label - true - true - - Left - - - Form.Command.ОткрытьСвойстваФайла - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюГруппаКомандОсновные - 55 - - СписокКонтекстноеМенюОткрыть - 56 - true - true - - true - - - СписокКонтекстноеМенюОткрытьРасширеннаяПодсказка - 134 - Label - true - true - - Left - - - Form.Command.ОткрытьФайлДляПросмотра - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюРедактировать - 58 - true - true - - true - - - СписокКонтекстноеМенюРедактироватьExtendedTooltip - 136 - Label - true - true - - Left - - - Form.Command.Редактировать - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюЗакончитьРедактирование - 59 - true - true - - true - - - СписокКонтекстноеМенюЗакончитьРедактированиеExtendedTooltip - 137 - Label - true - true - - Left - - - Form.Command.ЗакончитьРедактирование - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Список контекстное меню группа команд основные</value> - - - ru - Список контекстное меню группа команд основные - - - СписокКонтекстноеМенюГруппаКомандОсновныеРасширеннаяПодсказка - 133 - Label - true - true - - Left - - - - - - СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьИШифрование - 79 - СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодпись - 246 + СписокКонтекстноеМенюГруппаКомандДобавить + 274 - СписокКонтекстноеМенюЭППодписать - 80 + СписокКонтекстноеМенюДобавитьИзФайлаНаДиске + 276 + + <key>ru</key> + <value>Из файла на диске ...</value> + true true true - СписокКонтекстноеМенюЭППодписатьРасширеннаяПодсказка - 150 + СписокКонтекстноеМенюДобавитьИзФайлаНаДискеРасширеннаяПодсказка + 277 Label true true @@ -2191,7 +2125,7 @@ Left - Form.Command.Подписать + Form.Command.Добавить Normal Auto true @@ -2200,16 +2134,16 @@ Auto - СписокКонтекстноеМенюДобавитьЭПИзФайла - 81 + СписокКонтекстноеМенюДобавитьФайлСоСканера + 278 true true true - СписокКонтекстноеМенюДобавитьЭПИзФайлаРасширеннаяПодсказка - 151 + СписокКонтекстноеМенюДобавитьФайлСоСканераРасширеннаяПодсказка + 279 Label true true @@ -2217,33 +2151,7 @@ Left - Form.Command.ДобавитьЭПИзФайла - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюСохранитьВместеСЭП - 82 - true - true - - true - - - СписокКонтекстноеМенюСохранитьВместеСЭПРасширеннаяПодсказка - 152 - Label - true - true - - Left - - - Form.Command.СохранитьВместеСЭП + Form.Command.ДобавитьФайлСоСканера Normal Auto true @@ -2258,91 +2166,154 @@ <key>ru</key> - <value>Список контекстное меню группа команд электронная подпись</value> - - - СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьРасширеннаяПодсказка - 247 - Label - true - true - - Left - - - - - - СписокКонтекстноеМенюГруппаКомандШифрование - 83 - - СписокКонтекстноеМенюЗашифровать - 84 - true - true - - true - - - СписокКонтекстноеМенюЗашифроватьExtendedTooltip - 154 - Label - true - true - - Left - - - Form.Command.Зашифровать - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюРасшифровать - 85 - true - true - - true - - - СписокКонтекстноеМенюРасшифроватьExtendedTooltip - 155 - Label - true - true - - Left - - - Form.Command.Расшифровать - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Список контекстное меню группа команд шифрование</value> + <value>Добавить</value> ru - Список контекстное меню группа команд шифрование + Список контекстное меню группа команд добавить - СписокКонтекстноеМенюГруппаКомандШифрованиеРасширеннаяПодсказка - 153 + СписокКонтекстноеМенюГруппаКомандДобавитьРасширеннаяПодсказка + 275 + Label + true + true + + Left + + + Popup + + + StdPicture.CreateListItem + + Auto + Normal + + + + СписокКонтекстноеМенюИзменить + 202 + true + true + + true + + + СписокКонтекстноеМенюИзменитьРасширеннаяПодсказка + 203 + Label + true + true + + Left + + + Form.Command.ОткрытьСвойстваФайла + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюГруппаКомандОсновные + 55 + + СписокКонтекстноеМенюОткрыть + 56 + true + true + + true + + + СписокКонтекстноеМенюОткрытьРасширеннаяПодсказка + 134 + Label + true + true + + Left + + + Form.Command.ОткрытьФайлДляПросмотра + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюРедактировать + 58 + true + true + + true + + + СписокКонтекстноеМенюРедактироватьExtendedTooltip + 136 + Label + true + true + + Left + + + Form.Command.Редактировать + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюЗакончитьРедактирование + 59 + true + true + + true + + + СписокКонтекстноеМенюЗакончитьРедактированиеExtendedTooltip + 137 + Label + true + true + + Left + + + Form.Command.ЗакончитьРедактирование + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список контекстное меню группа команд основные</value> + + + ru + Список контекстное меню группа команд основные + + + СписокКонтекстноеМенюГруппаКомандОсновныеРасширеннаяПодсказка + 133 Label true true @@ -2352,358 +2323,592 @@ - true - true - - true - - - <key>ru</key> - <value>Электронная подпись и шифрование</value> - - - ru - Электронная подпись и шифрование - - - СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьИШифрованиеРасширеннаяПодсказка - 149 - Label - true - true - - Left + + СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьИШифрование + 79 + + СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодпись + 246 + + СписокКонтекстноеМенюЭППодписать + 80 + true + true + + true + + + СписокКонтекстноеМенюЭППодписатьРасширеннаяПодсказка + 150 + Label + true + true + + Left + + + Form.Command.Подписать + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюДобавитьЭПИзФайла + 81 + true + true + + true + + + СписокКонтекстноеМенюДобавитьЭПИзФайлаРасширеннаяПодсказка + 151 + Label + true + true + + Left + + + Form.Command.ДобавитьЭПИзФайла + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюСохранитьВместеСЭП + 82 + true + true + + true + + + СписокКонтекстноеМенюСохранитьВместеСЭПРасширеннаяПодсказка + 152 + Label + true + true + + Left + + + Form.Command.СохранитьВместеСЭП + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список контекстное меню группа команд электронная подпись</value> + + + СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьРасширеннаяПодсказка + 247 + Label + true + true + + Left + + + + + + СписокКонтекстноеМенюГруппаКомандШифрование + 83 + + СписокКонтекстноеМенюЗашифровать + 84 + true + true + + true + + + СписокКонтекстноеМенюЗашифроватьExtendedTooltip + 154 + Label + true + true + + Left + + + Form.Command.Зашифровать + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюРасшифровать + 85 + true + true + + true + + + СписокКонтекстноеМенюРасшифроватьExtendedTooltip + 155 + Label + true + true + + Left + + + Form.Command.Расшифровать + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список контекстное меню группа команд шифрование</value> + + + ru + Список контекстное меню группа команд шифрование + + + СписокКонтекстноеМенюГруппаКомандШифрованиеРасширеннаяПодсказка + 153 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Электронная подпись и шифрование</value> + + + ru + Электронная подпись и шифрование + + + СписокКонтекстноеМенюГруппаКомандЭлектроннаяПодписьИШифрованиеРасширеннаяПодсказка + 149 + Label + true + true + + Left + + + Popup + + + CommonPicture.ПодписанЗашифрованЗаголовок + + Auto + Normal - - Popup - - - CommonPicture.ПодписанЗашифрованЗаголовок - - Auto - Normal + + + СписокКонтекстноеМенюГруппаКомандДополнительные + 61 + + СписокКонтекстноеМенюСкопировать + 63 + true + true + + true + + + СписокКонтекстноеМенюСкопироватьExtendedTooltip + 140 + Label + true + true + + Left + + + Form.Command.Скопировать + Normal + Auto + true + true + UserCmds + Auto + + + КонтекстноеМенюУстановитьПометкуУдаления + 64 + true + true + + true + + + КонтекстноеМенюУстановитьПометкуУдаленияРасширеннаяПодсказка + 141 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.SetDeletionMark + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюСохранитьКак + 65 + true + true + + true + + + СписокКонтекстноеМенюСохранитьКакExtendedTooltip + 142 + Label + true + true + + Left + + + Form.Command.СохранитьКак + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюОсвободить + 60 + true + true + + true + + + СписокКонтекстноеМенюОсвободитьExtendedTooltip + 138 + Label + true + true + + Left + + + Form.Command.Освободить + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюОбновитьИзФайлаНаДиске + 66 + true + true + + true + + + СписокКонтекстноеМенюОбновитьИзФайлаНаДискеExtendedTooltip + 143 + Label + true + true + + Left + + + Form.Command.ОбновитьИзФайлаНаДиске + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюОткрытьКаталогФайла + 68 + true + true + + true + + + СписокКонтекстноеМенюОткрытьКаталогФайлаExtendedTooltip + 145 + Label + true + true + + Left + + + Form.Command.ОткрытьКаталогФайла + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список контекстное меню группа команд дополнительные</value> + + + СписокКонтекстноеМенюГруппаКомандДополнительныеРасширеннаяПодсказка + 139 + Label + true + true + + Left + + + + + + СписокКонтекстноеМенюГруппаКомандОтСписка + 69 + + СписокКонтекстноеМенюНайти + 70 + true + true + + true + + + СписокКонтекстноеМенюНайтиExtendedTooltip + 147 + Label + true + true + + Left + + + 0 + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюОтменитьПоиск + 71 + true + true + + true + + + СписокКонтекстноеМенюОтменитьПоискExtendedTooltip + 148 + Label + true + true + + Left + + + 0 + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Список контекстное меню группа команд от списка</value> + + + ru + Список контекстное меню группа команд от списка + + + СписокКонтекстноеМенюГруппаКомандОтСпискаExtendedTooltip + 146 + Label + true + true + + Left + + + + + + HierarchicalList + true + true + 1 + true + 8 + true + true + true + MultiRow +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + true + true + true + true + + Список.ИндексКартинки + + + CommonPicture.КоллекцияПиктограммФайлов + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + ГруппаПользовательскихНастроек + +
      + + АдресДанныхФайла + 267 + true + + true + + + АдресДанныхФайла + + None + + АдресДанныхФайлаРасширеннаяПодсказка + 269 + Label + true + true + + Left - - - СписокКонтекстноеМенюГруппаКомандДополнительные - 61 - - СписокКонтекстноеМенюСкопировать - 63 - true - true - - true - - - СписокКонтекстноеМенюСкопироватьExtendedTooltip - 140 - Label - true - true - - Left - - - Form.Command.Скопировать - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюУстановитьПометкуУдаления - 64 - true - true - - true - - - СписокКонтекстноеМенюУстановитьПометкуУдаленияExtendedTooltip - 141 - Label - true - true - - Left - - - Form.Command.УстановитьПометкуУдаления - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюСохранитьКак - 65 - true - true - - true - - - СписокКонтекстноеМенюСохранитьКакExtendedTooltip - 142 - Label - true - true - - Left - - - Form.Command.СохранитьКак - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюОсвободить - 60 - true - true - - true - - - СписокКонтекстноеМенюОсвободитьExtendedTooltip - 138 - Label - true - true - - Left - - - Form.Command.Освободить - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюОбновитьИзФайлаНаДиске - 66 - true - true - - true - - - СписокКонтекстноеМенюОбновитьИзФайлаНаДискеExtendedTooltip - 143 - Label - true - true - - Left - - - Form.Command.ОбновитьИзФайлаНаДиске - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюОткрытьКаталогФайла - 68 - true - true - - true - - - СписокКонтекстноеМенюОткрытьКаталогФайлаExtendedTooltip - 145 - Label - true - true - - Left - - - Form.Command.ОткрытьКаталогФайла - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - + </extendedTooltip> + <contextMenu> + <name>АдресДанныхФайлаКонтекстноеМеню</name> + <id>268</id> + <autoFill>true</autoFill> + </contextMenu> + <type>PictureField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:ImageFieldExtInfo"> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <horizontalStretch>true</horizontalStretch> + <verticalStretch>true</verticalStretch> + <pictureSize>AutoSize</pictureSize> + <nonselectedPictureText> <key>ru</key> - <value>Список контекстное меню группа команд дополнительные</value> - - - СписокКонтекстноеМенюГруппаКомандДополнительныеРасширеннаяПодсказка - 139 - Label - true - true - - Left - - - - - - СписокКонтекстноеМенюГруппаКомандОтСписка - 69 - - СписокКонтекстноеМенюНайти - 70 - true - true - - true - - - СписокКонтекстноеМенюНайтиExtendedTooltip - 147 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - - - СписокКонтекстноеМенюОтменитьПоиск - 71 - true - true - - true - - - СписокКонтекстноеМенюОтменитьПоискExtendedTooltip - 148 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Список контекстное меню группа команд от списка</value> - - - ru - Список контекстное меню группа команд от списка - - - СписокКонтекстноеМенюГруппаКомандОтСпискаExtendedTooltip - 146 - Label - true - true - - Left - - - - - - HierarchicalList - true - true - 1 - true - 8 - true - true - true - MultiRow -
      true
      - 1 - 1 - AutoUse - AutoUse - true - true - Auto - Auto - true - true - true - true - - Список.ИндексКартинки - - - CommonPicture.КоллекцияПиктограммФайлов - - None - None - None - true - - 60 - - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - - true - true - ГруппаПользовательскихНастроек - -
      - - АдресДанныхФайла - 267 + Выберите файл для предварительного просмотра + + + + 1 + + + + true true true - - АдресДанныхФайла - - None + + <key>ru</key> + <value>Группа файлы</value> + + + ru + Группа файлы + - АдресДанныхФайлаРасширеннаяПодсказка - 269 + ГруппаФайлыРасширеннаяПодсказка + 271 Label true true @@ -2711,30 +2916,13 @@ Left - - АдресДанныхФайлаКонтекстноеМеню - 268 - true - - PictureField - Enter - true - Left - true - - true - true - true - true - AutoSize - - ru - Выберите файл для предварительного просмотра - - - - 1 - + UsualGroup + + Auto + true + true + Auto + Auto
      true @@ -2742,17 +2930,9 @@ true - - <key>ru</key> - <value>Группа файлы</value> - - - ru - Группа файлы - - ГруппаФайлыРасширеннаяПодсказка - 271 + Группа1РасширеннаяПодсказка + 286 Label true true @@ -2762,6 +2942,7 @@ UsualGroup + Vertical Auto true true @@ -2843,9 +3024,9 @@ ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) КАК Ссылка, ЛОЖЬ КАК ПометкаУдаления, 1 КАК ИндексКартинки, - ВЫРАЗИТЬ("" КАК Строка(150)) КАК Наименование, - ВЫРАЗИТЬ("" КАК Строка(10)) КАК Расширение, - ВЫРАЗИТЬ("" КАК Строка(500)) КАК Описание, + ВЫРАЗИТЬ("" КАК СТРОКА(150)) КАК Наименование, + ВЫРАЗИТЬ("" КАК СТРОКА(10)) КАК Расширение, + ВЫРАЗИТЬ("" КАК СТРОКА(500)) КАК Описание, ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) КАК Автор, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) КАК ДатаСоздания, ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) КАК Отредактировал, @@ -2858,7 +3039,11 @@ ЛОЖЬ КАК ФайлРедактируется, ЛОЖЬ КАК ФайлРедактируетТекущийПользователь, ЛОЖЬ КАК ФайлРедактируетДругойПользователь, - ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) КАК Редактирует + НЕОПРЕДЕЛЕНО КАК Редактирует +ИЗ + Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданных + Catalog.ИдентификаторыОбъектовМетаданных + true true true true @@ -2996,10 +3181,10 @@ - ПростаяФорма + ФайлыРедактируютсяВОблачномСервисе <key>ru</key> - <value>Простая форма</value> + <value>Файлы редактируются в облачном сервисе</value> 10 @@ -3012,6 +3197,43 @@ true + + ПростаяФорма + + <key>ru</key> + <value>Простая форма</value> + + 11 + + Boolean + + + true + + + true + + + + ЗапрещенныеРасширения + + <key>ru</key> + <value>Запрещенные расширения</value> + + 13 + + ValueList + + + true + + + true + + + + + ОткрытьФайлДляПросмотра @@ -3112,31 +3334,6 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> - <formCommands> - <name>УстановитьПометкуУдаления</name> - <title> - <key>ru</key> - <value>Пометить на удаление / Снять пометку</value> - - 8 - - ru - Пометить текущий элемент на удаление / Снять пометку - - - true - - - StdPicture.MarkToDelete - - - - УстановитьПометкуУдаления - - - DontUse - Auto - Редактировать @@ -3523,6 +3720,29 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>НастроитьСинхронизацию</name> + <title> + <key>ru</key> + <value>Синхронизация с облаком ...</value> + + 22 + + ru + Настроить синхронизацию + + + true + + + + НастроитьСинхронизацию + + + FunctionalOption.ИспользоватьСинхронизациюФайлов + DontUse + Auto + ВладелецФайла diff --git a/SSL/src/CommonForms/ПрисоединенныеФайлы/Help/ru.html b/SSL/src/CommonForms/ПрисоединенныеФайлы/Help/ru.html index 9ff0dc48a..338073634 100644 --- a/SSL/src/CommonForms/ПрисоединенныеФайлы/Help/ru.html +++ b/SSL/src/CommonForms/ПрисоединенныеФайлы/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

      @@ -9,13 +9,20 @@
      • Дата создания - дата и время ввода файла в программу;
      • Редактирует - пользователь, который занял файл для редактирования и т.д. 

      Добавление нового файла

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

      Просмотр карточки файла

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

      Просмотр изображений в списке

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

      Просмотр карточки файла

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

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

      • @@ -30,9 +37,13 @@
        Команда Редактировать открывает файл в режиме редактирования, а также производит захват файла в программе. Захваченный файл будет недоступен для редактирования другим пользователям программы и помечается в списке зеленым цветом.
      • -
        После окончания редактирования сохраните файл, закройте внешнее приложение. Нажмите  Закончить редактирование, это действие освобождает файл, сохраняет его в программе и снимает пометку занятости для редактирования.
        +
        После окончания редактирования сохраните файл, закройте внешнее приложение. Нажмите  Сохранить и освободить файл в информационной базе, это действие освобождает файл, сохраняет его в программе и снимает пометку занятости для редактирования.
      • -
        Команда Еще - Отменить редактирование освобождает файл, не сохраняя произведенные в нем изменения в программе, и снимает пометку занятости для редактирования. Команда может быть полезна, если необходимо отказаться от результатов редактирования файла (например, при редактировании в файл были внесены нежелательные изменения или ошибки).

      Сохранение файла

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

      Печать файла

      +
      • +
        Нажмите кнопку Печать.

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

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

      Сохранение файла

      • С помощью команды Еще - Сохранить как можно сохранить файл в указанный каталог на жестком или сетевом диске.
      • diff --git a/SSL/src/CommonForms/ПрисоединенныеФайлы/Module.bsl b/SSL/src/CommonForms/ПрисоединенныеФайлы/Module.bsl index 77caba858..126e60f38 100644 --- a/SSL/src/CommonForms/ПрисоединенныеФайлы/Module.bsl +++ b/SSL/src/CommonForms/ПрисоединенныеФайлы/Module.bsl @@ -73,10 +73,11 @@ Иначе ТолькоПросмотр = Параметры.ТолькоПросмотр Или НЕ ПравоДоступа("Редактирование", МетаданныеСправочникаСФайлами) Или НЕ ПравоДоступа("Редактирование", Параметры.ВладелецФайла.Метаданные()); - КонецЕсли; + КонецЕсли; Если ТолькоПросмотр Тогда СкрытьКнопкиИзменения(); + ЕстьПравоДобавления = Ложь; КонецЕсли; ИменаВсехКомандФормы = ПолучитьИменаКомандФормы(); @@ -88,9 +89,11 @@ Продолжить; КонецЕсли; - Если ИменаВсехКомандФормы.Найти(ЭлементФормы.ИмяКоманды) <> Неопределено Тогда - ИменаЭлементов.Добавить(ЭлементФормы.Имя); + Если ИменаВсехКомандФормы.Найти(ЭлементФормы.ИмяКоманды) <> Неопределено + Или ИменаВсехКомандФормы.Найти(ЭлементФормы.Имя) <> Неопределено Тогда + ИменаЭлементов.Добавить(ЭлементФормы.Имя); КонецЕсли; + КонецЦикла; ИменаЭлементовКнопокФормы = Новый ФиксированныйМассив(ИменаЭлементов); @@ -101,7 +104,7 @@ Элементы.ФормаИзменить.Видимость = Ложь; Элементы.ФормаИзменить82.Видимость = Истина; Элементы.ФормаСкопировать.ТолькоВоВсехДействиях = Ложь; - Элементы.ФормаУстановитьПометкуУдаления.ТолькоВоВсехДействиях = Ложь; + Элементы.УстановитьПометкуУдаления.ТолькоВоВсехДействиях = Ложь; КонецЕсли; ИспользоватьПредпросмотр = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( @@ -117,6 +120,20 @@ РасширенияПоддерживающиеПредпросмотр = ФайловыеФункцииСлужебный.СписокРасширенийДляПредпросмотра(); + ОбновитьПояснениеОблачногоСервиса(); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + + МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); + + Если Не МодульУправлениеДоступом.ЕстьРоль("НастройкаСинхронизацииФайлов") Тогда + Элементы.НастроитьСинхронизацию.Видимость = Ложь; + КонецЕсли; + + КонецЕсли; + + ЗапрещенныеРасширения = ФайловыеФункцииСлужебный.СписокЗапрещенныхРасширений(); + КонецПроцедуры &НаКлиенте @@ -130,17 +147,16 @@ Элементы.СписокКонтекстноеМенюДобавить.Видимость = Не ДоступнаКомандаСканировать; КонецЕсли; + #Если ВебКлиент Тогда + Элементы.Печать.Видимость = Ложь; + #КонецЕсли + УстановитьДоступностьКнопок(); - // ТекущаяДата получена не для сохранения в базе данных, а используется - // только расчета в динамическом списке местного времени от - // универсального времени сохраненного в базе данных, - // поэтому приведение к ТекущаяДатаСеанса не требуется. - ТекущаяДатаКлиента = ТекущаяДата(); + ДатаУниверсальная = ОбщегоНазначенияКлиент.ДатаУниверсальная(); - Список.Параметры.УстановитьЗначениеПараметра( - "СекундДоМестногоВремени", - ТекущаяДатаКлиента - УниверсальноеВремя(ТекущаяДатаКлиента)); + Список.Параметры.УстановитьЗначениеПараметра("СекундДоМестногоВремени", + МестноеВремя(ДатаУниверсальная) - ДатаУниверсальная); КонецПроцедуры @@ -200,26 +216,7 @@ &НаКлиенте Процедура СписокПриАктивизацииСтроки(Элемент) - Если НЕ ДействиеРазрешено() Тогда - Возврат; - КонецЕсли; - - УстановитьДоступностьКнопок(); - - Если Не Предпросмотр Тогда - Возврат; - КонецЕсли; - - ТекущиеДанные = Элементы.Список.ТекущиеДанные; - - Если РасширенияПоддерживающиеПредпросмотр.НайтиПоЗначению(ТекущиеДанные.Расширение) <> Неопределено Тогда - ДанныеФайла = ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); - АдресДанныхФайла = ДанныеФайла.СсылкаНаДвоичныеДанныеФайла; - Иначе - ТекстНевыбраннойКартинки = НСтр("ru = 'Нет данных для предварительного просмотра'"); - АдресДанныхФайла = Неопределено; - Элементы.АдресДанныхФайла.ТекстНевыбраннойКартинки = ТекстНевыбраннойКартинки; - КонецЕсли; + ПодключитьОбработчикОжидания("УстановитьДоступностьКнопок", 0.1, Истина); КонецПроцедуры @@ -359,7 +356,7 @@ Возврат; КонецЕсли; - ДанныеФайла = ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); Если ТекущиеДанные.Зашифрован Тогда // Файл может быть изменен в другом сеансе. @@ -392,7 +389,7 @@ Возврат; КонецЕсли; - ДанныеФайла = ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, , Ложь); + ДанныеФайла = ДанныеФайла(ТекущиеДанные.Ссылка, , Ложь); Если ДанныеФайла.Зашифрован Или ДанныеФайла.ПодписанЭП Или ДанныеФайла.ФайлРедактируется Тогда // Файл может быть изменен в другом сеансе. ОповеститьОбИзменении(ТекущиеДанные.Ссылка); @@ -417,7 +414,7 @@ Возврат; КонецЕсли; - ДанныеФайла = ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); Если ДанныеФайла.Зашифрован ИЛИ (ДанныеФайла.ФайлРедактируется И ДанныеФайла.ФайлРедактируетТекущийПользователь) Тогда @@ -451,38 +448,6 @@ КонецПроцедуры -&НаКлиенте -Процедура УстановитьПометкуУдаления(Команда) - - Если НЕ ПроверитьДействиеРазрешено("ПометкаУдаления") Тогда - Возврат; - КонецЕсли; - - ТекущиеДанные = Элементы.Список.ТекущиеДанные; - - Если ТекущиеДанные.ПометкаУдаления Тогда - ТекстВопроса = НСтр("ru = 'Снять пометку на удаление с файла - |""%1""?'"); - Иначе - ТекстВопроса = НСтр("ru = 'Пометить на удаление файл - |""%1""?'"); - КонецЕсли; - - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, ТекущиеДанные.Ссылка); - - ОписаниеОповещения = Новый ОписаниеОповещения("УстановитьПометкуУдаленияОтветПолучен", ЭтотОбъект, ТекущиеДанные); - ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да); - -КонецПроцедуры - -&НаКлиенте -Процедура УстановитьПометкуУдаленияОтветПолучен(РезультатВопроса, ТекущиеДанные) Экспорт - Если РезультатВопроса = КодВозвратаДиалога.Да Тогда - УстановитьЗначениеПометкиУдаления(ТекущиеДанные.Ссылка, НЕ ТекущиеДанные.ПометкаУдаления); - Элементы.Список.Обновить(); - КонецЕсли; -КонецПроцедуры - &НаКлиенте Процедура Отправить(Команда) @@ -494,11 +459,6 @@ &НаКлиенте Процедура Печать(Команда) - #Если ВебКлиент Тогда - ПоказатьПредупреждение(, НСтр("ru = 'В Веб-клиенте печать файлов не поддерживается.'")); - Возврат; - #КонецЕсли - СистемнаяИнфо = Новый СистемнаяИнформация; Если СистемнаяИнфо.ТипПлатформы <> ТипПлатформы.Windows_x86 И СистемнаяИнфо.ТипПлатформы <> ТипПлатформы.Windows_x86_64 Тогда @@ -508,7 +468,7 @@ ВыделенныеСтроки = Элементы.Список.ВыделенныеСтроки; Если ВыделенныеСтроки.Количество() > 0 Тогда - ПрисоединенныеФайлыКлиент.НапечататьФайлы(ВыделенныеСтроки, ЭтаФорма.УникальныйИдентификатор); + ПрисоединенныеФайлыКлиент.НапечататьФайлы(ВыделенныеСтроки, ЭтотОбъект.УникальныйИдентификатор); КонецЕсли; КонецПроцедуры @@ -523,6 +483,28 @@ КонецПроцедуры +&НаКлиенте +Процедура НастроитьСинхронизацию(Команда) + + НастройкаСинхронизации = ПараметрыНастройкиСинхронизации(ВладелецФайла); + + Если ЗначениеЗаполнено(НастройкаСинхронизации.УчетнаяЗапись) Тогда + ТипЗначения = Тип("РегистрСведенийКлючЗаписи.НастройкиСинхронизацииФайлов"); + ПараметрыЗаписи = Новый Массив(1); + ПараметрыЗаписи[0] = НастройкаСинхронизации; + + КлючЗаписи = Новый(ТипЗначения, ПараметрыЗаписи); + + ПараметрыЗаписи = Новый Структура; + ПараметрыЗаписи.Вставить("Ключ", КлючЗаписи); + Иначе + ПараметрыЗаписи = НастройкаСинхронизации; + КонецЕсли; + + ОткрытьФорму("РегистрСведений.НастройкиСинхронизацииФайлов.Форма.ПростаяФормаЗаписиНастройки", ПараметрыЗаписи, ЭтотОбъект); + +КонецПроцедуры + /////////////////////////////////////////////////////////////////////////////////// // Обработчики команд для поддержки ЭП и шифрования. @@ -540,7 +522,7 @@ Возврат; КонецЕсли; - ДанныеФайла = ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); Если ДанныеФайла.ФайлРедактируется ИЛИ ДанныеФайла.Зашифрован Тогда @@ -550,7 +532,7 @@ КонецЕсли; ПрисоединенныйФайл = ТекущиеДанные.Ссылка; - ДанныеФайла = ПолучитьДанныеФайла(ПрисоединенныйФайл, УникальныйИдентификатор); + ДанныеФайла = ДанныеФайла(ПрисоединенныйФайл, УникальныйИдентификатор); ПрисоединенныеФайлыСлужебныйКлиент.ПодписатьФайл(ПрисоединенныйФайл, ДанныеФайла, УникальныйИдентификатор, Новый ОписаниеОповещения("ДобавлениеПодписейЗавершить", ЭтотОбъект)); @@ -570,7 +552,7 @@ Возврат; КонецЕсли; - ДанныеФайла = ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); Если ДанныеФайла.Зашифрован Тогда // Файл может быть изменен в другом сеансе. @@ -597,7 +579,9 @@ КонецЕсли; ПрисоединенныйФайл = ТекущиеДанные.Ссылка; - ПрисоединенныеФайлыСлужебныйКлиент.ДобавитьПодписьИзФайла(ПрисоединенныйФайл, УникальныйИдентификатор, + ДанныеФайла = ДанныеФайла(ПрисоединенныйФайл, УникальныйИдентификатор); + + ПрисоединенныеФайлыСлужебныйКлиент.ДобавитьПодписьИзФайла(ПрисоединенныйФайл, ДанныеФайла, УникальныйИдентификатор, Новый ОписаниеОповещения("ДобавлениеПодписейЗавершить", ЭтотОбъект)); КонецПроцедуры @@ -616,7 +600,7 @@ Возврат; КонецЕсли; - ДанныеФайла = ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); Если ДанныеФайла.ФайлРедактируется ИЛИ ДанныеФайла.Зашифрован Тогда @@ -645,7 +629,7 @@ Возврат; КонецЕсли; - ДанныеФайла = ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); Если НЕ ДанныеФайла.Зашифрован Тогда // Файл может быть изменен в другом сеансе. @@ -678,12 +662,24 @@ Возврат; КонецЕсли; - ДанныеФайла = ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + Если ЗапрещенныеРасширения.НайтиПоЗначению(ТекущиеДанные.Расширение) <> Неопределено Тогда + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ТекущиеДанные", ТекущиеДанные); + Оповещение = Новый ОписаниеОповещения("РедактироватьФайлПослеПодтверждения", ЭтотОбъект, ДополнительныеПараметры); + ПараметрыФормы = Новый Структура("Ключ", "ПередОткрытиемФайла"); + ПараметрыФормы.Вставить("ИмяФайла", + ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(ТекущиеДанные.Наименование, ТекущиеДанные.Расширение)); + ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(ТекущиеДанные.Наименование, ТекущиеДанные.Расширение); + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение); + Возврат; + КонецЕсли; - Если ( ДанныеФайла.ФайлРедактируется - И НЕ ДанныеФайла.ФайлРедактируетТекущийПользователь) - ИЛИ ДанныеФайла.Зашифрован - ИЛИ ДанныеФайла.ПодписанЭП Тогда + ДанныеФайла = ДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + + Если (ДанныеФайла.ФайлРедактируется + И НЕ ДанныеФайла.ФайлРедактируетТекущийПользователь) + ИЛИ ДанныеФайла.Зашифрован + ИЛИ ДанныеФайла.ПодписанЭП Тогда // Файл может быть изменен в другом сеансе. ОповеститьОбИзменении(ТекущиеДанные.Ссылка); Возврат; @@ -715,7 +711,7 @@ Возврат; КонецЕсли; - ДанныеФайла = ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, , Ложь); + ДанныеФайла = ДанныеФайла(ТекущиеДанные.Ссылка, , Ложь); Если НЕ ДанныеФайла.ФайлРедактируется ИЛИ НЕ ДанныеФайла.ФайлРедактируетТекущийПользователь Тогда @@ -811,9 +807,20 @@ Возврат; КонецЕсли; + Если ЗапрещенныеРасширения.НайтиПоЗначению(ТекущиеДанные.Расширение) <> Неопределено Тогда + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ТекущиеДанные", ТекущиеДанные); + Оповещение = Новый ОписаниеОповещения("ОткрытьФайлПослеПодтверждения", ЭтотОбъект, ДополнительныеПараметры); + ПараметрыФормы = Новый Структура("Ключ", "ПередОткрытиемФайла"); + ПараметрыФормы.Вставить("ИмяФайла", + ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(ТекущиеДанные.Наименование, ТекущиеДанные.Расширение)); + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение); + Возврат; + КонецЕсли; + ФайлРедактируется = ТекущиеДанные.ФайлРедактируется И ТекущиеДанные.ФайлРедактируетТекущийПользователь; - ДанныеФайла = ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); Если ДанныеФайла.Зашифрован Тогда // Файл может быть изменен в другом сеансе. @@ -826,40 +833,69 @@ КонецПроцедуры &НаКлиенте -Функция ПроверитьДействиеРазрешено(Знач ТекущееДействие = "") +Процедура ОткрытьФайлПослеПодтверждения(Результат, ДополнительныеПараметры) Экспорт - Если Элементы.Список.ТекущиеДанные = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - - ТекущиеДанные = Элементы.Список.ТекущиеДанные; - - Если ТекущееДействие = "ПометкаУдаления" И ТекущиеДанные.ФайлРедактируется Тогда + Если Результат <> Неопределено И Результат = "Продолжить" Тогда - Если ТекущиеДанные.ФайлРедактируетТекущийПользователь Тогда - ТекстПредупреждения = НСтр("ru = 'Действие недоступно, так как файл занят для редактирования.'"); - Иначе - ТекстПредупреждения = НСтр("ru = 'Действие недоступно, так как файл занят для редактирования - |другим пользователем.'"); + ТекущиеДанные = ДополнительныеПараметры.ТекущиеДанные; + + ФайлРедактируется = ТекущиеДанные.ФайлРедактируется И ТекущиеДанные.ФайлРедактируетТекущийПользователь; + + ДанныеФайла = ДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + + Если ДанныеФайла.Зашифрован Тогда + // Файл может быть изменен в другом сеансе. + ОповеститьОбИзменении(ТекущиеДанные.Ссылка); + Возврат; КонецЕсли; - ПоказатьПредупреждение(, ТекстПредупреждения); + ПрисоединенныеФайлыКлиент.ОткрытьФайл(ДанныеФайла, ФайлРедактируется); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура РедактироватьФайлПослеПодтверждения(Результат, ДополнительныеПараметры) Экспорт + + Если Результат <> Неопределено И Результат = "Продолжить" Тогда + + ТекущиеДанные = ДополнительныеПараметры.ТекущиеДанные; + + ДанныеФайла = ДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + + Если (ДанныеФайла.ФайлРедактируется + И НЕ ДанныеФайла.ФайлРедактируетТекущийПользователь) + ИЛИ ДанныеФайла.Зашифрован + ИЛИ ДанныеФайла.ПодписанЭП Тогда + // Файл может быть изменен в другом сеансе. + ОповеститьОбИзменении(ТекущиеДанные.Ссылка); + Возврат; + КонецЕсли; + + Если НЕ ТекущиеДанные.ФайлРедактируется Тогда + + ЗанятьФайлДляРедактированияСервер(ТекущиеДанные.Ссылка); + + ОповеститьОбИзменении(ТекущиеДанные.Ссылка); + УстановитьДоступностьКнопок(); + КонецЕсли; + + ПрисоединенныеФайлыКлиент.ОткрытьФайл(ДанныеФайла, Истина); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Функция ПроверитьДействиеРазрешено(Знач ТекущееДействие = "") + + ТекущиеДанные = Элементы.Список.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда Возврат Ложь; КонецЕсли; - Если ТипЗнч(Элементы.Список.ТекущаяСтрока) = ТипСправочникаСФайлами Тогда - Возврат Истина; - Иначе - ПоказатьПредупреждение(, НСтр("ru = 'Действие недоступно для строки группировки списка.'")); - Возврат Ложь; - КонецЕсли; - - Если НЕ Элементы.ФормаСкопировать.Видимость - ИЛИ НЕ Элементы.ФормаСкопировать.Доступность Тогда - Возврат Ложь; - КонецЕсли; - - Возврат Истина; + Возврат ТипЗнч(Элементы.Список.ТекущаяСтрока) = ТипСправочникаСФайлами; КонецФункции @@ -911,14 +947,17 @@ ТекущиеДанные.ФайлРедактируется, ТекущиеДанные.ФайлРедактируетТекущийПользователь, ТекущиеДанные.ПодписанЭП, - ТекущиеДанные.Зашифрован); + ТекущиеДанные.Зашифрован, + ФайлыРедактируютсяВОблачномСервисе); КонецЕсли; Для каждого ИмяЭлементаФормы Из ИменаЭлементовКнопокФормы Цикл ЭлементФормы = Элементы.Найти(ИмяЭлементаФормы); - Если ИменаКоманд.Найти(ЭлементФормы.ИмяКоманды) <> Неопределено Тогда + Если ИменаКоманд.Найти(ЭлементФормы.ИмяКоманды) <> Неопределено + Или ИменаКоманд.Найти(ЭлементФормы.Имя) <> Неопределено Тогда + Если НЕ ЭлементФормы.Доступность Тогда ЭлементФормы.Доступность = Истина; КонецЕсли; @@ -928,15 +967,15 @@ КонецЕсли; КонецЦикла; + ОбновитьПредпросмотр(); + КонецПроцедуры &НаСервереБезКонтекста -Функция ПолучитьДанныеФайла(Знач ПрисоединенныйФайл, - Знач ИдентификаторФормы = Неопределено, - Знач ПолучатьСсылкуНаДвоичныеДанные = Истина) +Функция ДанныеФайла(Знач ПрисоединенныйФайл, Знач ИдентификаторФормы = Неопределено, + Знач ПолучатьСсылкуНаДвоичныеДанные = Истина) - Возврат ПрисоединенныеФайлы.ПолучитьДанныеФайла( - ПрисоединенныйФайл, ИдентификаторФормы, ПолучатьСсылкуНаДвоичныеДанные); + Возврат ПрисоединенныеФайлы.ПолучитьДанныеФайла(ПрисоединенныйФайл, ИдентификаторФормы, ПолучатьСсылкуНаДвоичныеДанные); КонецФункции @@ -963,15 +1002,6 @@ КонецПроцедуры -&НаСервереБезКонтекста -Процедура УстановитьЗначениеПометкиУдаления(Знач ПрисоединенныйФайл, Знач ПометкаУдаления) - - ПрисоединенныйФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); - ПрисоединенныйФайлОбъект.ПометкаУдаления = ПометкаУдаления; - ПрисоединенныйФайлОбъект.Записать(); - -КонецПроцедуры - &НаСервере Процедура НастроитьДинамическийСписок(ИмяСправочникаХранилищаФайлов) @@ -1005,6 +1035,7 @@ | КОНЕЦ КАК НомерКартинкиПодписанЗашифрован, | ВЫБОР | КОГДА НЕ Файлы.Редактирует В (&ПустыеПользователи) + | ИЛИ СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись <> НЕОПРЕДЕЛЕНО | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК ФайлРедактируется, @@ -1014,15 +1045,23 @@ | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК ФайлРедактируетТекущийПользователь, | ВЫБОР - | КОГДА НЕ Файлы.Редактирует В (&ПустыеПользователи) + | КОГДА (НЕ Файлы.Редактирует В (&ПустыеПользователи) + | ИЛИ СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись <> НЕОПРЕДЕЛЕНО) | И Файлы.Редактирует <> &ТекущийПользователь | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК ФайлРедактируетДругойПользователь, | Файлы.Расширение КАК Расширение, - | Файлы.Редактирует КАК Редактирует + | ВЫБОР + | КОГДА СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись <> НЕОПРЕДЕЛЕНО + | И Файлы.Редактирует = НЕОПРЕДЕЛЕНО + | ТОГДА СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись + | ИНАЧЕ Файлы.Редактирует + | КОНЕЦ КАК Редактирует |ИЗ | &ИмяСправочника КАК Файлы + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом + | ПО Файлы.Ссылка = СтатусыСинхронизацииФайловСОблачнымСервисом.Файл |ГДЕ | Файлы.ВладелецФайла = &ВладелецФайлов"; @@ -1071,6 +1110,7 @@ ИменаКоманд.Добавить("Освободить"); ИменаКоманд.Добавить("Редактировать"); ИменаКоманд.Добавить("УстановитьПометкуУдаления"); + ИменаКоманд.Добавить("КонтекстноеМенюУстановитьПометкуУдаления"); ИменаКоманд.Добавить("Подписать"); ИменаКоманд.Добавить("ДобавитьЭПИзФайла"); @@ -1110,7 +1150,8 @@ Функция ПолучитьДоступныеКоманды(ФайлРедактируется, ФайлРедактируетТекущийПользователь, ФайлПодписан, - ФайлЗашифрован) + ФайлЗашифрован, + ФайлыРедактируютсяВОблачномСервисе) ИменаКоманд = ПолучитьИменаКомандФормы(); @@ -1123,7 +1164,7 @@ УдалитьКомандуИзМассива(ИменаКоманд, "Редактировать"); КонецЕсли; УдалитьКомандуИзМассива(ИменаКоманд, "УстановитьПометкуУдаления"); - + УдалитьКомандуИзМассива(ИменаКоманд, "КонтекстноеМенюУстановитьПометкуУдаления"); УдалитьКомандыЭП(ИменаКоманд); УдалитьКомандуИзМассива(ИменаКоманд, "ОбновитьИзФайлаНаДиске"); @@ -1160,6 +1201,13 @@ УдалитьКомандуИзМассива(ИменаКоманд, "Расшифровать"); КонецЕсли; + Если ФайлыРедактируютсяВОблачномСервисе Тогда + УдалитьКомандуИзМассива(ИменаКоманд, "Добавить"); + УдалитьКомандуИзМассива(ИменаКоманд, "ДобавитьИзФайлаНаДиске"); + УдалитьКомандуИзМассива(ИменаКоманд, "ДобавитьФайлСоСканера"); + УдалитьКомандуИзМассива(ИменаКоманд, "Скопировать"); + КонецЕсли; + Возврат ИменаКоманд; КонецФункции @@ -1224,14 +1272,106 @@ КонецПроцедуры &НаКлиенте -Функция ДействиеРазрешено() +Процедура ОбновитьПредпросмотр() - ДействиеРазрешено = Истина; - Если Элементы.Список.ТекущиеДанные = Неопределено Тогда - ДействиеРазрешено = Ложь; + Если Не Предпросмотр Тогда + Возврат; КонецЕсли; - Возврат ДействиеРазрешено; + ТекущиеДанные = Элементы.Список.ТекущиеДанные; + Если ТекущиеДанные <> Неопределено И РасширенияПоддерживающиеПредпросмотр.НайтиПоЗначению(ТекущиеДанные.Расширение) <> Неопределено Тогда + ДанныеФайла = ДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + АдресДанныхФайла = ДанныеФайла.СсылкаНаДвоичныеДанныеФайла; + Иначе + АдресДанныхФайла = Неопределено; + Элементы.АдресДанныхФайла.ТекстНевыбраннойКартинки = НСтр("ru = 'Нет данных для предварительного просмотра'"); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьПояснениеОблачногоСервиса() + + ВидимостьПояснения = Ложь; + + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюФайлов") Тогда + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | СтатусыСинхронизацииФайловСОблачнымСервисом.Файл, + | СтатусыСинхронизацииФайловСОблачнымСервисом.Href, + | СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись.Наименование, + | СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись.Сервис КАК Сервис + |ИЗ + | РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом + |ГДЕ + | СтатусыСинхронизацииФайловСОблачнымСервисом.Файл = &ВладелецФайла"; + + Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайла.Ссылка); + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + + ФайлыРедактируютсяВОблачномСервисе = Истина; + ВидимостьПояснения = Истина; + + АдресПапкиВОблачномСервисе = ФайловыеФункцииСлужебныйКлиентСервер.АдресВОблачномСервисе( + ВыборкаДетальныеЗаписи.Сервис, ВыборкаДетальныеЗаписи.Href); + + ЧастиСтроки = Новый Массив; + ЧастиСтроки.Добавить(НСтр("ru = 'Работа с файлами ведется в облачном сервисе'")); + ЧастиСтроки.Добавить(" "); + ЧастиСтроки.Добавить(Новый ФорматированнаяСтрока(ВыборкаДетальныеЗаписи.УчетнаяЗаписьНаименование, , , , АдресПапкиВОблачномСервисе)); + Элементы.ДекорацияПояснение.Заголовок = Новый ФорматированнаяСтрока(ЧастиСтроки); + + КонецЦикла; + КонецЕсли; + + Элементы.ГруппаПояснениеОблачногоСервиса.Видимость = ВидимостьПояснения; + +КонецПроцедуры + +&НаСервере +Функция ПараметрыНастройкиСинхронизации(ВладелецФайла) + + ТипВладельцаФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипСправочникаСФайлами); + + Отбор = Новый Структура( + "ВладелецФайла, ТипВладельцаФайла, УчетнаяЗапись", + ВладелецФайла, + ТипВладельцаФайла, + Справочники.УчетныеЗаписиСинхронизацииФайлов.ПустаяСсылка()); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | НастройкиСинхронизацииФайлов.ВладелецФайла, + | НастройкиСинхронизацииФайлов.ТипВладельцаФайла, + | НастройкиСинхронизацииФайлов.УчетнаяЗапись + |ИЗ + | РегистрСведений.НастройкиСинхронизацииФайлов КАК НастройкиСинхронизацииФайлов + |ГДЕ + | НастройкиСинхронизацииФайлов.ВладелецФайла = &ВладелецФайла + | И НастройкиСинхронизацииФайлов.ТипВладельцаФайла = &ТипВладельцаФайла"; + + Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайла); + Запрос.УстановитьПараметр("ТипВладельцаФайла", ТипВладельцаФайла); + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + Если ВыборкаДетальныеЗаписи.Количество() = 1 Тогда + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Отбор.УчетнаяЗапись = ВыборкаДетальныеЗаписи.УчетнаяЗапись; + КонецЦикла; + КонецЕсли; + + Возврат Отбор; КонецФункции diff --git a/SSL/src/CommonForms/ПрисоединенныйФайл/Form.form b/SSL/src/CommonForms/ПрисоединенныйФайл/Form.form index e37a0846b..cdb9f57ab 100644 --- a/SSL/src/CommonForms/ПрисоединенныйФайл/Form.form +++ b/SSL/src/CommonForms/ПрисоединенныйФайл/Form.form @@ -554,6 +554,7 @@ Page auto + false @@ -704,20 +705,105 @@ Normal - - ЭлектронныеПодписиСтатус - 41 + + ЭлектронныеПодписиПроверка + 154 + + ЭлектронныеПодписиСтатус + 41 + true + true + + true + + + ЭлектронныеПодписи.Статус + + + ЭлектронныеПодписиСтатусРасширеннаяПодсказка + 93 + Label + true + true + + Left + + + + ЭлектронныеПодписиСтатусКонтекстноеМеню + 42 + true + + InputField + Auto + true + Left + true + + 10 + true + true + true + true + true + true + Normal + + + + ЭлектронныеПодписиДатаПроверкиПодписи + 151 + true + true + + true + + + ЭлектронныеПодписи.ДатаПроверкиПодписи + + + ЭлектронныеПодписиДатаПроверкиПодписиРасширеннаяПодсказка + 153 + Label + true + true + + Left + + + + ЭлектронныеПодписиДатаПроверкиПодписиКонтекстноеМеню + 152 + true + + InputField + Auto + true + Left + true + + 10 + true + true + true + true + true + true + Normal + + true true true - - ЭлектронныеПодписи.Статус - + + <key>ru</key> + <value>Электронные подписи проверка</value> + - ЭлектронныеПодписиСтатусРасширеннаяПодсказка - 93 + ЭлектронныеПодписиПроверкаРасширеннаяПодсказка + 155 Label true true @@ -725,24 +811,11 @@ Left - - ЭлектронныеПодписиСтатусКонтекстноеМеню - 42 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal + ColumnGroup + + InCell + auto + true @@ -1048,6 +1121,7 @@ Page auto + false @@ -1278,6 +1352,7 @@ Page auto + false true @@ -2204,10 +2279,10 @@ - Неверна + ПодписьВерна <key>ru</key> - <value>Неверна</value> + <value>Подпись верна</value> 8 @@ -2255,6 +2330,24 @@ true + + ДатаПроверкиПодписи + + <key>ru</key> + <value>Дата проверки</value> + + 10 + + Date + + + + true + + + true + + СертификатыШифрования @@ -2532,6 +2625,43 @@ + + ФайлРедактируетсяВОблаке + + <key>ru</key> + <value>Файл редактируется в облаке</value> + + 12 + + Boolean + + + true + + + true + + + + ЗапрещенныеРасширения + + <key>ru</key> + <value>Запрещенные расширения</value> + + 13 + + ValueList + + + true + + + true + + + + + СтандартнаяЗаписатьИЗакрыть @@ -2844,7 +2974,7 @@ <id>6</id> <toolTip> <key>ru</key> - <value>Добавить ЭПИз файла</value> + <value>Добавить электронную подпись из файла</value> </toolTip> <use> <common>true</common> @@ -2913,7 +3043,7 @@ <id>16</id> <toolTip> <key>ru</key> - <value>Сохранить вместе СЭП</value> + <value>Сохранить файл на диск или другое устройство вместе с электронной подписью</value> </toolTip> <use> <common>true</common> @@ -2990,6 +3120,7 @@ <name>ПроверитьЭП</name> </handler> </action> + <modifiesStoredData>true</modifiesStoredData> <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> @@ -3034,6 +3165,7 @@ <name>ПроверитьВсе</name> </handler> </action> + <modifiesStoredData>true</modifiesStoredData> <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> diff --git a/SSL/src/CommonForms/ПрисоединенныйФайл/Help/ru.html b/SSL/src/CommonForms/ПрисоединенныйФайл/Help/ru.html index c716abf00..ab6e47b88 100644 --- a/SSL/src/CommonForms/ПрисоединенныйФайл/Help/ru.html +++ b/SSL/src/CommonForms/ПрисоединенныйФайл/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для просмотра сведений о присоединенном файле.  </p> <p>Открывается из <a href="CommonForm.ПрисоединенныеФайлы/Help">списка присоединенных файлов</a> с помощью команды <strong>Еще - Открыть карточку</strong> (клавиши <strong>F2</strong>).</p> <h3>Сведения о файле</h3> @@ -21,7 +21,7 @@ </li><li> <div> <div>Для редактирования файлов других форматов на компьютере должны быть установлены соответствующие приложения, например, для редактирования файлов в формате Microsoft Word должно быть установлено это приложение.</div></div> -</li><li>Команда <strong>Просмотреть</strong> открывает файл внешним приложением для просмотра или редактирования, в зависимости от того, помечен или нет файл как занятый другим пользователем для редактирования. +</li><li>С помощью кнопки <strong>Просмотреть</strong> можно открыть файл внешним приложением для просмотра или редактирования, в зависимости от того, помечен или нет файл как занятый другим пользователем для редактирования. </li><li> <div> <div>Команда <strong>Еще -</strong> <strong>Редактировать</strong> открывает файл в режиме редактирования, а также производит захват файла в программе. Захваченный файл будет недоступен для редактирования другим пользователям программы и помечается в списке зеленым цветом.</div></div> @@ -52,9 +52,9 @@ <ul><li><strong>Автор подписи</strong> - пользователь, который подписал файл; </li><li><strong>Дата подписи</strong> - дата подписания файла; </li><li><strong>Комментарий</strong> - напишите дополнительные сведения о подписи; -</li><li><strong>Статус</strong> - истинность подписи.</li></ul><p>С помощью соответствующих команд можно:</p> +</li><li><strong>Статус, Дата проверки</strong> - истинность подписи и дата ее проверки.</li></ul><p>С помощью соответствующих кнопок можно:</p> <ul><li><strong>Подписать</strong> файл; -</li><li><strong>Открыть подпись</strong> - открыть окно с основными свойствами сертификата электронной подписи выделенного файла: кому и кем выдан, назначение и срок действия сертификата, на основе которого создана подпись; +</li><li><strong>Открыть </strong>- открыть окно с основными свойствами сертификата электронной подписи выделенного файла: кому и кем выдан, назначение и срок действия сертификата, на основе которого создана подпись; </li><li><strong>Проверить</strong>, изменялся ли кем-либо подписанный файл, с помощью одного или всех сертификатов электронной подписи. Для этого выделите одну или несколько подписей. Если электронная подпись хранимого файла не соответствует какому-либо сертификату электронной подписи, то такая электронная подпись после проверки будет выделена в списке красным цветом, а в колонке <strong>Статус</strong> у такой электронной подписи будет указано <strong>Не верна</strong>. </li><li><strong>Проверить все</strong> - проверить все подписи; </li><li><strong>Сохранить</strong> электронную подпись <strong>в файл </strong>на диск; @@ -62,5 +62,5 @@ <ul><li> <div>На вкладке размещаются сведения о шифровании файла:</div> </li><li> -<div>В списке на этой вкладке отображаются сертификаты, с помощью которых зашифрован файл. Двойным щелчком мыши или с помощью соответствующей команды можно <strong>Открыть сертификат</strong> электронной подписи и просмотреть его основные свойства: кому и кем выдан, назначение и срок действия сертификата.</div></li></ul><h3>См. также:</h3> +<div>В списке на этой вкладке отображаются сертификаты, с помощью которых зашифрован файл. Двойным щелчком мыши или с помощью соответствующей кнопки можно <strong>Открыть сертификат</strong> электронной подписи и просмотреть его основные свойства: кому и кем выдан, назначение и срок действия сертификата.</div></li></ul><h3>См. также:</h3> <ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/CommonForms/ПрисоединенныйФайл/Module.bsl b/SSL/src/CommonForms/ПрисоединенныйФайл/Module.bsl index 0d01bbfdf..33260bf0a 100644 --- a/SSL/src/CommonForms/ПрисоединенныйФайл/Module.bsl +++ b/SSL/src/CommonForms/ПрисоединенныйФайл/Module.bsl @@ -48,6 +48,7 @@ КонецЦикла; ОбъектЗначение.Автор = Пользователи.АвторизованныйПользователь(); + ОбъектЗначение.Заполнить(Неопределено); Иначе Если Параметры.Свойство("ПрисоединенныйФайл") Тогда ОбъектЗначение = Параметры.ПрисоединенныйФайл.ПолучитьОбъект(); @@ -57,13 +58,16 @@ КонецЕсли; ИмяСправочника = ОбъектЗначение.Метаданные().Имя; - НастроитьОбъектФормы(ОбъектЗначение); ПриИзмененияИспользованияПодписанияИлиШифрованияНаСервере(); ЗаполнитьСписокПодписей(); ЗаполнитьСписокШифрования(); + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюФайлов") Тогда + ФайлРедактируетсяВОблаке = ФайловыеФункцииСлужебный.ФайлРедактируетсяВОблаке(ЭтотОбъект.Объект.Ссылка); + КонецЕсли; + Если ТолькоПросмотр ИЛИ НЕ ПравоДоступа("Изменение", ЭтотОбъект.Объект.ВладелецФайла.Метаданные()) Тогда @@ -76,7 +80,9 @@ ЗаблокироватьДанныеДляРедактирования(ЭтотОбъект.Объект.Ссылка, , УникальныйИдентификатор); КонецЕсли; - УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь); + УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь, ФайлРедактируетсяВОблаке); + + ЗапрещенныеРасширения = ФайловыеФункцииСлужебный.СписокЗапрещенныхРасширений(); ОбновитьЗаголовок(); @@ -246,6 +252,7 @@ КонецЕсли; Если НЕ Модифицированность Тогда + ПеречитатьДанныеССервера(); Возврат; КонецЕсли; @@ -311,7 +318,9 @@ КонецЕсли; ПрисоединенныйФайл = ЭтотОбъект.Объект.Ссылка; - ПрисоединенныеФайлыСлужебныйКлиент.ДобавитьПодписьИзФайла(ПрисоединенныйФайл, УникальныйИдентификатор, + ДанныеФайла = ПолучитьДанныеФайла(ПрисоединенныйФайл, УникальныйИдентификатор); + + ПрисоединенныеФайлыСлужебныйКлиент.ДобавитьПодписьИзФайла(ПрисоединенныйФайл, ДанныеФайла, УникальныйИдентификатор, , Новый ОписаниеОповещения("ПриПолученииПодписей", ЭтотОбъект)); КонецПроцедуры @@ -529,7 +538,14 @@ КонецЕсли; Если ЗначениеЗаполнено(ЭтотОбъект.Объект.Редактирует) - И ЭтотОбъект.Объект.Редактирует <> ТекущийПользователь Тогда + И ЭтотОбъект.Объект.Редактирует <> ТекущийПользователь Тогда + Возврат; + КонецЕсли; + + Если ЗапрещенныеРасширения.НайтиПоЗначению(ЭтотОбъект.Объект.Расширение) <> Неопределено Тогда + Оповещение = Новый ОписаниеОповещения("РедактироватьФайлПослеПодтверждения", ЭтотОбъект); + ПараметрыФормы = Новый Структура("Ключ", "ПередОткрытиемФайла"); + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение); Возврат; КонецЕсли; @@ -571,7 +587,7 @@ Оповестить("Запись_ПрисоединенныйФайл", Новый Структура, ЭтотОбъект.Объект.Ссылка); КонецЕсли; - УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь); + УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь, ФайлРедактируетсяВОблаке); КонецПроцедуры @@ -620,19 +636,58 @@ Процедура ОткрытьФайлДляПросмотра() Если ЭтоНовый() - ИЛИ ЭтотОбъект.Объект.Зашифрован Тогда + ИЛИ ЭтотОбъект.Объект.Зашифрован Тогда + Возврат; + КонецЕсли; + + Если ЗапрещенныеРасширения.НайтиПоЗначению(ЭтотОбъект.Объект.Расширение) <> Неопределено Тогда + Оповещение = Новый ОписаниеОповещения("ОткрытьФайлПослеПодтверждения", ЭтотОбъект); + ПараметрыФормы = Новый Структура("Ключ", "ПередОткрытиемФайла"); + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Оповещение); Возврат; КонецЕсли; ДанныеФайла = ПолучитьДанныеФайла(ЭтотОбъект.Объект.Ссылка, УникальныйИдентификатор); ФайлРедактируется = ЗначениеЗаполнено(ЭтотОбъект.Объект.Редактирует) - И ЭтотОбъект.Объект.Редактирует = ТекущийПользователь; + И ЭтотОбъект.Объект.Редактирует = ТекущийПользователь; ПрисоединенныеФайлыКлиент.ОткрытьФайл(ДанныеФайла, ФайлРедактируется); КонецПроцедуры +&НаКлиенте +Процедура ОткрытьФайлПослеПодтверждения(Результат, ДополнительныеПараметры) Экспорт + + Если Результат <> Неопределено И Результат = "Продолжить" Тогда + ДанныеФайла = ПолучитьДанныеФайла(ЭтотОбъект.Объект.Ссылка, УникальныйИдентификатор); + + ФайлРедактируется = ЗначениеЗаполнено(ЭтотОбъект.Объект.Редактирует) + И ЭтотОбъект.Объект.Редактирует = ТекущийПользователь; + + ПрисоединенныеФайлыКлиент.ОткрытьФайл(ДанныеФайла, ФайлРедактируется); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура РедактироватьФайлПослеПодтверждения(Результат, ДополнительныеПараметры) Экспорт + + Если Результат <> Неопределено И Результат = "Продолжить" Тогда + ДанныеФайла = ПолучитьДанныеФайла(ЭтотОбъект.Объект.Ссылка, УникальныйИдентификатор); + + Если ЗначениеЗаполнено(ЭтотОбъект.Объект.Редактирует) Тогда + ПрисоединенныеФайлыКлиент.ОткрытьФайл(ДанныеФайла, Истина); + Иначе + ПрисоединенныеФайлыКлиент.ОткрытьФайл(ДанныеФайла, Истина); + ЗанятьФайлДляРедактированияСервер(); + ОповеститьОбИзменении(ЭтотОбъект.Объект.Ссылка); + Оповестить("Запись_ПрисоединенныйФайл", Новый Структура, ЭтотОбъект.Объект.Ссылка); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ОткрытьКаталогФайла() @@ -730,17 +785,13 @@ Для Каждого ЭлементЭП Из РеквизитФормыВЗначение("Объект").ЭлектронныеПодписи Цикл НоваяСтрока = ЭлектронныеПодписи.Добавить(); - - НоваяСтрока.КомуВыданСертификат = ЭлементЭП.КомуВыданСертификат; - НоваяСтрока.ДатаПодписи = ЭлементЭП.ДатаПодписи; - НоваяСтрока.Комментарий = ЭлементЭП.Комментарий; + ЗаполнитьЗначенияСвойств(НоваяСтрока, ЭлементЭП); НоваяСтрока.Объект = ЭтотОбъект.Объект.Ссылка; - НоваяСтрока.Отпечаток = ЭлементЭП.Отпечаток; - НоваяСтрока.УстановившийПодпись = ЭлементЭП.УстановившийПодпись; - НоваяСтрока.Неверна = Ложь; НоваяСтрока.АдресПодписи = ПоместитьВоВременноеХранилище( ЭлементЭП.Подпись.Получить(), УникальныйИдентификатор); + ФайловыеФункцииСлужебныйКлиентСервер.ЗаполнитьСтатусПодписи(НоваяСтрока); + ДвоичныеДанныеСертификата = ЭлементЭП.Сертификат.Получить(); Если ДвоичныеДанныеСертификата <> Неопределено Тогда @@ -783,7 +834,7 @@ ЗаполнитьСписокПодписей(); - УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь); + УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь, ФайлРедактируетсяВОблаке); КонецПроцедуры @@ -794,14 +845,14 @@ ПрисоединенныеФайлыСлужебный.Расшифровать(ЗаписываемыйОбъект, РасшифрованныеДанные); ЗначениеВРеквизитФормы(ЗаписываемыйОбъект, "Объект"); - УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь); + УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь, ФайлРедактируетсяВОблаке); КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура УстановитьДоступностьКнопок(Форма, Элементы, ТекущийПользователь) +Процедура УстановитьДоступностьКнопок(Форма, Элементы, ТекущийПользователь, ФайлРедактируетсяВОблаке) - ФайлРедактируется = ЗначениеЗаполнено(Форма.Объект.Редактирует); + ФайлРедактируется = ЗначениеЗаполнено(Форма.Объект.Редактирует) Или ФайлРедактируетсяВОблаке; ФайлРедактируетТекущийПользователь = Форма.Объект.Редактирует = ТекущийПользователь; ИменаВсехКоманд = ПолучитьИменаКомандФормы(); @@ -810,7 +861,8 @@ ФайлРедактируетТекущийПользователь, Форма.Объект.ПодписанЭП, Форма.Объект.Зашифрован, - Форма.Объект.Ссылка.Пустая()); + Форма.Объект.Ссылка.Пустая(), + ФайлРедактируетсяВОблаке); Если Форма.ЭлектронныеПодписи.Количество() = 0 Тогда УдалитьКомандуИзМассива(ИменаКоманд, "ОткрытьПодпись"); @@ -904,7 +956,8 @@ ФайлРедактируетТекущийПользователь, ФайлПодписан, ФайлЗашифрован, - ЭтоНовыйФайл) + ЭтоНовыйФайл, + ФайлРедактируетсяВОблаке) Если ЭтоНовыйФайл Тогда ИменаКоманд = Новый Массив; @@ -969,6 +1022,11 @@ УдалитьКомандуИзМассива(ИменаКоманд, "Расшифровать"); КонецЕсли; + Если ФайлРедактируетсяВОблаке Тогда + УдалитьКомандуИзМассива(ИменаКоманд, "СтандартныеСкопировать"); + УдалитьКомандуИзМассива(ИменаКоманд, "СтандартныеУстановитьПометкуУдаления"); + КонецЕсли; + Возврат ИменаКоманд; КонецФункции @@ -1004,7 +1062,7 @@ ЗначениеВРеквизитФормы(ЗаписываемыйОбъект, "Объект"); - УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь); + УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь, ФайлРедактируетсяВОблаке); КонецПроцедуры @@ -1015,7 +1073,7 @@ ПрисоединенныеФайлыСлужебный.ЗанятьФайлДляРедактированияСервер(ЗаписываемыйОбъект); ЗначениеВРеквизитФормы(ЗаписываемыйОбъект, "Объект"); - УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь); + УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь, ФайлРедактируетсяВОблаке); КонецПроцедуры @@ -1078,6 +1136,8 @@ ФайлОбъект = ЭтотОбъект.Объект.Ссылка.ПолучитьОбъект(); ЗначениеВРеквизитФормы(ФайлОбъект, "Объект"); + ЗаполнитьСписокПодписей(); + ЗаполнитьСписокШифрования(); КонецПроцедуры @@ -1112,6 +1172,9 @@ КонецЕсли; КонецЕсли; + ФайловыеФункцииСлужебный.ПеренестиРезультатыПроверкиПодписей(ЭлектронныеПодписи, + ЗаписываемыйОбъект.ЭлектронныеПодписи); + ЗаписываемыйОбъект.Записать(); Если ТранзакцияАктивна Тогда @@ -1131,7 +1194,7 @@ КонецЕсли; ЗначениеКопирования = Справочники[ИмяСправочника].ПустаяСсылка(); - УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь); + УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь, ФайлРедактируетсяВОблаке); ОбновитьЗаголовок(); @@ -1224,7 +1287,7 @@ ЗначениеВРеквизитФормы(ЗаписываемыйОбъект, "Объект"); ЗаполнитьСписокПодписей(); - УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь); + УстановитьДоступностьКнопок(ЭтотОбъект, Элементы, ТекущийПользователь, ФайлРедактируетсяВОблаке); КонецПроцедуры diff --git a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Form.form b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Form.form index 924e44203..93f5be6cc 100644 --- a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Form.form +++ b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Form.form @@ -179,12 +179,6 @@ <chooseType>true</chooseType> <typeDomainEnabled>true</typeDomainEnabled> <textEdit>true</textEdit> - <choiceParameterLinks> - <name>Отбор.Владелец</name> - <datapath xsi:type="form:DataPath"> - <segments>Items.ТаблицаЗначенийСвойств.CurrentData.Свойство</segments> - </datapath> - </choiceParameterLinks> <textSize>Normal</textSize> </extInfo> </items> @@ -203,6 +197,10 @@ <event>BeforeDeleteRow</event> <name>ТаблицаЗначенийСвойствПередУдалением</name> </handlers> + <handlers> + <event>BeforeRowChange</event> + <name>ТаблицаЗначенийСвойствПередНачаломИзменения</name> + </handlers> <handlers> <event>OnStartEdit</event> <name>ТаблицаЗначенийСвойствПриНачалеРедактирования</name> diff --git a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Help/ru.html b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Help/ru.html index 8612df7d8..27f416319 100644 --- a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Help/ru.html +++ b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для просмотра и ввода значений дополнительных сведений. Ввод значений дополнительных сведений, как правило, осуществляется в отдельном окне, в отличие от дополнительных реквизитов.</p> <p>Открывается с помощью кнопки <img src="CommonPicture.ДополнительныеСведения"></img> <strong>Дополнительные сведения</strong> из окон объектов программы, для которых были <a href="Catalog.НаборыДополнительныхРеквизитовИСведений/Help">настроены дополнительные сведения</a>.</p> <p>В списке выводится:</p> diff --git a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl index 763a53a02..39518876a 100644 --- a/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl +++ b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl @@ -87,6 +87,22 @@ КонецПроцедуры +&НаКлиенте +Процедура ТаблицаЗначенийСвойствПередНачаломИзменения(Элемент, Отказ) + Если Элементы.ТаблицаЗначенийСвойств.ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + Строка = Элементы.ТаблицаЗначенийСвойств.ТекущиеДанные; + + ПараметрыВыбораМассив = Новый Массив; + Если Строка.ТипЗначения.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектов")) + Или Строка.ТипЗначения.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектовИерархия")) Тогда + ПараметрыВыбораМассив.Добавить(Новый ПараметрВыбора("Отбор.Владелец", Строка.Свойство)); + КонецЕсли; + Элементы.ТаблицаЗначенийСвойствЗначение.ПараметрыВыбора = Новый ФиксированныйМассив(ПараметрыВыбораМассив); +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -117,7 +133,7 @@ |Возможно у объекта не заполнены необходимые реквизиты.'")); Иначе ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ПоказатьДополнительныеРеквизиты"); + ПараметрыФормы.Вставить("ПоказатьДополнительныеСведения"); ОткрытьФорму("Справочник.НаборыДополнительныхРеквизитовИСведений.ФормаСписка", ПараметрыФормы); diff --git a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Help/ru.html b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Help/ru.html index 31e7befc1..0510aea5d 100644 --- a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Help/ru.html +++ b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для редактирования табличного документа. </p> <p>Для редактирования табличного документа или макета в печатной форме или табличном документе выполните команду <strong>Изменить макет</strong> меню <strong>Еще</strong>. </p> <p><strong>Важно: </strong>при редактировании макетов печатных форм необходимо иметь в виду, что изменение имен областей, а также параметров макета может привести к потере работоспособности печатной формы. Восстановление стандартной печатной формы выполняется в списке <a href="InformationRegister.ПользовательскиеМакетыПечати.Form.МакетыПечатныхФорм/Help">Макеты печатных форм</a>.</p> @@ -13,5 +13,7 @@ </li><li> <div>Для <strong>Предварительного просмотра</strong> макета перед печатью выполните соответствующую команду меню <strong>Еще</strong>.</div> </li><li> -<div>Для того чтобы изменить настройки печати, нажмите <strong>Еще - Параметры страницы</strong>.</div></li></ul><h3>См. также:</h3> +<div>Для того чтобы изменить настройки печати, нажмите <strong>Еще - Параметры страницы</strong>.</div></li></ul><h3>Редактирование во внешней программе</h3> +<ul><li> +<div>Открыть макет в программе можно с помощью команды<strong> Еще - Редактировать во внешней программе</strong>.</div></li></ul><h3>См. также:</h3> <ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl index 529108f98..221dadf3f 100644 --- a/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl +++ b/SSL/src/CommonForms/РедактированиеТабличногоДокумента/Module.bsl @@ -390,7 +390,7 @@ Параметры.ПутьКФайлу = ПолноеИмяФайла; ИмяДокумента = Сред(ПолноеИмяФайла, СтрДлина(ОписаниеФайла(ПолноеИмяФайла).Путь) + 1); - Если Нрег(Прав(ИмяДокумента, 4)) = ".mxl" Тогда + Если НРег(Прав(ИмяДокумента, 4)) = ".mxl" Тогда ИмяДокумента = Лев(ИмяДокумента, СтрДлина(ИмяДокумента) - 4); КонецЕсли; diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/МногострочноеПредупреждение/Form.form b/SSL/src/CommonForms/Сервис1СКонтрагентНеПодключен/Form.form similarity index 51% rename from SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/МногострочноеПредупреждение/Form.form rename to SSL/src/CommonForms/Сервис1СКонтрагентНеПодключен/Form.form index 5152d96b2..5e717aae9 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/МногострочноеПредупреждение/Form.form +++ b/SSL/src/CommonForms/Сервис1СКонтрагентНеПодключен/Form.form @@ -1,54 +1,53 @@ <?xml version="1.0" encoding="UTF-8"?> <form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <title> + <key>ru</key> + <value>Сервис не подключен</value> + - Колонки - 15 - - Предупреждение - 5 - - <key>ru</key> - <value>Предупреждение</value> - - true - true - - true - - - ПредупреждениеExtendedTooltip - 18 - Label - true - true - - Left - - - - ПредупреждениеКонтекстноеМеню - 6 - true - - 5 - true - 2 - true - - - CommonPicture.Предупреждение32 - - - + ГруппаКолонки + 1 - Строки - 16 + ГруппаЛеваяКолонка + 3 - ТекстСообщения - 12 + ДекорацияКартинка + 5 + true + true + + true + + + ДекорацияКартинкаРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + ДекорацияКартинкаКонтекстноеМеню + 6 + true + + true + 3 + true + + + CommonPicture.Сервис1СКонтрагент + + + + + Декорация1СКонтрагент + 8 <key>ru</key> - <value>Текст сообщения</value> + <value>1С:Контрагент</value> true true @@ -56,8 +55,8 @@ true - ТекстСообщенияExtendedTooltip - 20 + Декорация1СКонтрагентРасширеннаяПодсказка + 10 Label true true @@ -66,33 +65,35 @@ - ТекстСообщенияКонтекстноеМеню - 13 + Декорация1СКонтрагентКонтекстноеМеню + 9 true Label true true + + Style.LargeTextFont + Left - - МногострочныйТекстСообщения - 10 + + ДекорацияПодробно + 22 + + <key>ru</key> + <value><fontstyle -31><link https://portal.1c.ru/applications/3>Подробная информация</></></value> + true true true - - ТекстСообщения - - true - None - МногострочныйТекстСообщенияExtendedTooltip - 21 + ДекорацияПодробноРасширеннаяПодсказка + 24 Label true true @@ -101,26 +102,16 @@ - МногострочныйТекстСообщенияКонтекстноеМеню - 11 + ДекорацияПодробноКонтекстноеМеню + 23 true - InputField - true - Enter - true - Left - true - - true - 6 - true - true - true - true - true - true - Normal + true + Label + true + true + + Left true @@ -130,15 +121,15 @@ <key>ru</key> - <value>Строки</value> + <value>Левая колонка</value> ru - Строки + Левая колонка - СтрокиExtendedTooltip - 19 + ГруппаЛеваяКолонкаРасширеннаяПодсказка + 4 Label true true @@ -156,6 +147,57 @@ Auto + + ДекорацияОписание + 19 + + <key>ru</key> + <value><fontstyle -31><b>Сервис 1С:Контрагент не подключен</></> + +<fontstyle -31><b>Возможности сервиса:</></> +<fontstyle -31>• Автоматическое заполнение реквизитов контрагентов по ИНН и наименованию</> +<fontstyle -31>• Досье контрагента: сведения для оценки надежности контрагента</> +<fontstyle -31>• Автоматическое заполнение реквизитов собственной организации, ФНС, ФСС и ПФР</> +<fontstyle -31>• Оперативная проверка платежных реквизитов ФНС, ФСС и ПФР</> + +<fontstyle -31>Стоимость сервиса – от 400 руб. в месяц.</> +<fontstyle -31>Сервис также предоставляется по </><fontstyle -31>договору</><fontstyle -31> </><fontstyle -31>ИТС уровня ПРОФ.</> +<fontstyle -31>Для приобретения сервиса </><fontstyle -31><b>1С:Контрагент</></><fontstyle -31> обратитесь к обслуживающему Вас партнеру фирмы "1С". </> + +<fontstyle -31>Если у Вас нет обслуживающего партнера, Вы можете выбрать его из </><fontstyle -31><link http://its.1c.ru/news/redirect?utm_medium=prog&utm_source=configid&utm_content=contentid&url=http://its.1c.ru/partners>списка партнеров в Вашем регионе</></><fontstyle -31>.</></value> + + true + true + + true + + + ДекорацияОписаниеРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + ДекорацияОписаниеКонтекстноеМеню + 20 + true + + true + Label + true + true + + + URLProcessing + ДекорацияОписаниеОбработкаНавигационнойСсылки + + Left + + true true @@ -170,8 +212,8 @@ Колонки - КолонкиExtendedTooltip - 17 + ГруппаКолонкиРасширеннаяПодсказка + 2 Label true true @@ -188,12 +230,14 @@ Auto - - КоманднаяПанель - 14 + Bottom + true + + ФормаКоманднаяПанель + -1 - КомандаОК - 24 + ФормаЗакрыть + 17 true true @@ -201,8 +245,8 @@ true - КомандаОКРасширеннаяПодсказка - 25 + ФормаЗакрытьРасширеннаяПодсказка + 18 Label true true @@ -210,112 +254,31 @@ Left - Form.Command.КомандаОК + Form.StandardCommand.Close + Normal Auto - true true true UserCmds Auto - true - true - - true - - - <key>ru</key> - <value>Командная панель</value> - - - ru - Командная панель - - true - true - - КоманднаяПанельExtendedTooltip - 23 - Label - true - true - - Left - - - CommandBar - - Right - - - None - false - - ФормаКоманднаяПанель - -1 Right OnCreateAtServer ПриСозданииНаСервере - Abort - Cancel - Help - Ignore - No - OK - RestoreValues - Retry - SaveValues - Yes LockOwner - DefaultButton true true Vertical true + true true auto true - - ТекстСообщения - 2 - - String - - - - true - - - true - - - - КомандаОК - - <key>ru</key> - <value>ОК</value> - - 1 - - ru - Команда ОК - - - true - - - - КомандаОК - - - DontUse - Auto - - ТекстСообщения + ИдентификаторМестаВызова String @@ -323,11 +286,12 @@ true - Заголовок + ИдентификаторКонфигурации String + true diff --git a/SSL/src/CommonForms/Сервис1СКонтрагентНеПодключен/Module.bsl b/SSL/src/CommonForms/Сервис1СКонтрагентНеПодключен/Module.bsl new file mode 100644 index 000000000..e9eaa780b --- /dev/null +++ b/SSL/src/CommonForms/Сервис1СКонтрагентНеПодключен/Module.bsl @@ -0,0 +1,25 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + РаботаСКонтрагентамиПереопределяемый.ЗаполнитьИдентификаторКонфигурации(Параметры.ИдентификаторКонфигурации); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ДекорацияОписаниеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + + НавигационнаяСсылкаФорматированнойСтроки = СтрЗаменить(НавигационнаяСсылкаФорматированнойСтроки, + "configid", Параметры.ИдентификаторКонфигурации); + НавигационнаяСсылкаФорматированнойСтроки = СтрЗаменить(НавигационнаяСсылкаФорматированнойСтроки, + "contentid", Параметры.ИдентификаторМестаВызова); + +КонецПроцедуры + +#КонецОбласти + \ No newline at end of file diff --git a/SSL/src/CommonForms/Сервис1СКонтрагентНеПодключен/Сервис1СКонтрагентНеПодключен.mdo b/SSL/src/CommonForms/Сервис1СКонтрагентНеПодключен/Сервис1СКонтрагентНеПодключен.mdo new file mode 100644 index 000000000..34e72a586 --- /dev/null +++ b/SSL/src/CommonForms/Сервис1СКонтрагентНеПодключен/Сервис1СКонтрагентНеПодключен.mdo @@ -0,0 +1,10 @@ + + + Сервис1СКонтрагентНеПодключен + + ru + Сервис 1С:Контрагент не подключен + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/Сертификат/Form.form b/SSL/src/CommonForms/Сертификат/Form.form index caf951bd3..bc41dada0 100644 --- a/SSL/src/CommonForms/Сертификат/Form.form +++ b/SSL/src/CommonForms/Сертификат/Form.form @@ -372,6 +372,7 @@ Page auto + false @@ -625,6 +626,7 @@ Vertical auto + false @@ -878,6 +880,7 @@ Vertical auto + false @@ -1218,6 +1221,7 @@ Vertical auto + false true diff --git a/SSL/src/CommonForms/Сертификат/Help/ru.html b/SSL/src/CommonForms/Сертификат/Help/ru.html index 54a62ad6b..6284ffa2b 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 6769067f6..d4c30680b 100644 --- a/SSL/src/CommonForms/СинхронизацияДанных/Form.form +++ b/SSL/src/CommonForms/СинхронизацияДанных/Form.form @@ -111,6 +111,7 @@ Vertical auto + false @@ -172,6 +173,7 @@ Vertical auto + false true @@ -509,6 +511,7 @@ Vertical auto + false @@ -655,6 +658,7 @@ Vertical auto + false @@ -725,6 +729,7 @@ Vertical auto + false true @@ -1654,6 +1659,7 @@ Vertical auto + false @@ -1853,6 +1859,7 @@ Vertical auto + false true @@ -2137,6 +2144,7 @@ Vertical auto + false @@ -4254,6 +4262,7 @@ Vertical auto + false true @@ -4825,7 +4834,7 @@ 4 ru - Настроить правила синхронизации даных + Настроить правила синхронизации данных true @@ -4958,58 +4967,6 @@ DontUse Auto - - НастроитьСинхронизациюДанныхОдна - - <key>ru</key> - <value>Настроить синхронизацию данных</value> - - 10 - - ru - Настроить новую синхронизацию данных с другой программой - - - true - - - StdPicture.CreateListItem - - - - НастроитьСинхронизациюДанныхОдна - - - TextPicture - DontUse - Auto - - - НастроитьСинхронизациюДанныхНеНастроена - - <key>ru</key> - <value>Настроить синхронизацию данных</value> - - 11 - - ru - Настроить синхронизацию данных с другой программой - - - true - - - StdPicture.CreateListItem - - - - НастроитьСинхронизациюДанныхНеНастроена - - - TextPicture - DontUse - Auto - НастроитьСценарииОбменаДаннымиОдна diff --git a/SSL/src/CommonForms/СинхронизацияДанных/Help/ru.html b/SSL/src/CommonForms/СинхронизацияДанных/Help/ru.html index a19c967b5..047337591 100644 --- a/SSL/src/CommonForms/СинхронизацияДанных/Help/ru.html +++ b/SSL/src/CommonForms/СинхронизацияДанных/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></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 11.00.9600.18427"></meta></head><body> <p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Предназначено для настройки синхронизации данных и хранения существующих настроек синхронизации данных. </p> <p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">Окно <strong>Синхронизация данных</strong> можно найти на <strong>Рабочем столе</strong> программы или открыть в разделе <strong>Администрирование - Настройки синхронизации данных</strong> по соответствующей команде. Если настроек синхронизации еще нет или существует только одна настройка, то окно приобретает вид панели. В этом случае меню <strong>Еще</strong> скрыто и все необходимые команды и поля выведены на панель. Окно принимает вид списка, если настроек синхронизации две и более.</p> <p style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"> В окне выводится:</p> diff --git a/SSL/src/CommonForms/СинхронизацияДанных/Module.bsl b/SSL/src/CommonForms/СинхронизацияДанных/Module.bsl index 94377736c..e4656c2dc 100644 --- a/SSL/src/CommonForms/СинхронизацияДанных/Module.bsl +++ b/SSL/src/CommonForms/СинхронизацияДанных/Module.bsl @@ -12,7 +12,8 @@ Возврат; КонецЕсли; - Если Не Пользователи.РолиДоступны("НастройкаСинхронизацииДанных") Тогда + РольДоступнаДобавлениеИзменениеОбменовДанными = ОбменДаннымиСервер.ЕстьПраваНаАдминистрированиеОбменов(); + Если Не РольДоступнаДобавлениеИзменениеОбменовДанными Тогда Элементы.СписокСостоянияУзловИзменитьУзелИнформационнойБазы.Видимость = Ложь; КонецЕсли; @@ -31,7 +32,6 @@ Возврат; КонецЕсли; - РольДоступнаДобавлениеИзменениеОбменовДанными = Пользователи.РолиДоступны("НастройкаСинхронизацииДанных"); Если РольДоступнаДобавлениеИзменениеОбменовДанными Тогда ДобавитьКомандыСозданияНовогоОбмена(); Иначе @@ -81,34 +81,6 @@ КонецПроцедуры -#КонецОбласти - -#Область ОбработчикиСобытийЭлементовШапкиФормы - -&НаКлиенте -Процедура НастроитьСинхронизациюДанных(Элемент) - - Если НастраиваемыеСинхронизации.Количество() > 1 Тогда - ОписаниеОповещения = Новый ОписаниеОповещения("НастроитьСинхронизациюДанныхЗавершение", ЭтотОбъект); - ПоказатьВыборИзМеню(ОписаниеОповещения, НастраиваемыеСинхронизации, Элемент); - Иначе - НастроитьСинхронизациюДанныхЗавершение(НастраиваемыеСинхронизации.Получить(0), Неопределено); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура НастроитьСинхронизациюДанныхЗавершение(ВыбраннаяСинхронизация, ДополнительныеПараметры) Экспорт - - Если ВыбраннаяСинхронизация <> Неопределено Тогда - - ОбменДаннымиКлиент.ОткрытьПомощникНастройкиОбменаДанными(ВыбраннаяСинхронизация.Значение); - - КонецЕсли; - -КонецПроцедуры - - #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыСписокСостоянияУзлов @@ -280,20 +252,6 @@ ОбменДаннымиКлиент.УстановитьОбновлениеКонфигурации(); КонецПроцедуры -&НаКлиенте -Процедура НастроитьСинхронизациюДанныхОдна(Команда) - - НастроитьСинхронизациюДанных(Элементы.НастроитьСинхронизациюДанныхОдна); - -КонецПроцедуры - -&НаКлиенте -Процедура НастроитьСинхронизациюДанныхНеНастроена(Команда) - - НастроитьСинхронизациюДанных(Элементы.НастроитьСинхронизациюДанныхНеНастроена); - -КонецПроцедуры - &НаКлиенте Процедура НастроитьСценарииОбменаДаннымиОдна(Команда) diff --git a/SSL/src/CommonForms/Склонения/Form.form b/SSL/src/CommonForms/Склонения/Form.form new file mode 100644 index 000000000..5abc0e737 --- /dev/null +++ b/SSL/src/CommonForms/Склонения/Form.form @@ -0,0 +1,945 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <title> + <key>ru</key> + <value>Склонения по падежам</value> + + + КомандаПросклонятьПовторно + 33 + true + true + + true + + + КомандаПросклонятьПовторноРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + UsualButton + Form.Command.КомандаПросклонятьПовторно + Normal + Auto + true + true + UserCmds + Auto + + + ГруппаПадежи + 29 + + ИменительныйПадеж + 4 + + <key>ru</key> + <value>Именительный (Кто? Что?)</value> + + true + true + + true + + + ИменительныйПадеж + + + ИменительныйПадежРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ИменительныйПадежКонтекстноеМеню + 5 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + РодительныйПадеж + 7 + + <key>ru</key> + <value>Родительный (Кого? Чего?)</value> + + true + true + + true + + + РодительныйПадеж + + + РодительныйПадежРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + РодительныйПадежКонтекстноеМеню + 8 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДательныйПадеж + 10 + + <key>ru</key> + <value>Дательный (Кому? Чему?)</value> + + true + true + + true + + + ДательныйПадеж + + + ДательныйПадежРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + ДательныйПадежКонтекстноеМеню + 11 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ВинительныйПадеж + 13 + + <key>ru</key> + <value>Винительный (Кого? Что?)</value> + + true + true + + true + + + ВинительныйПадеж + + + ВинительныйПадежРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + ВинительныйПадежКонтекстноеМеню + 14 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТворительныйПадеж + 16 + + <key>ru</key> + <value>Творительный (Кем? Чем?)</value> + + true + true + + true + + + ТворительныйПадеж + + + ТворительныйПадежРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ТворительныйПадежКонтекстноеМеню + 17 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПредложныйПадеж + 19 + + <key>ru</key> + <value>Предложный (О ком? О Чем?)</value> + + true + true + + true + + + ПредложныйПадеж + + + ПредложныйПадежРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + ПредложныйПадежКонтекстноеМеню + 20 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Падежи</value> + + + ГруппаПадежиРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаИнформационнаяНадписьСервисСклонения + 45 + + ГруппаИнформационнаяНадписьВключениеСервиса + 43 + + ДекорацияКартинка + 40 + true + true + + true + + + ДекорацияКартинкаРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + + ДекорацияКартинкаКонтекстноеМеню + 41 + true + + 2 + true + 1 + true + + + CommonPicture.Информация + + + + + ДекорацияНадписьВключениеСервиса + 35 + + <key>ru</key> + <value>Склонение было выполнено без использования сервиса morpher.ru. Включить использование сервиса можно в настройках программы.</value> + + true + true + + true + + + ДекорацияНадписьВключениеСервисаРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + ДекорацияНадписьВключениеСервисаКонтекстноеМеню + 36 + true + + Label + true + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа информационная надпись включение сервиса</value> + + + ru + Группа информационная надпись включение сервиса + + true + + ГруппаИнформационнаяНадписьВключениеСервисаРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + Page + + false + + + + ГруппаИнформационнаяНадписьДоступностьСервиса + 47 + + ДекорацияКартинкаПредупреждение + 52 + true + true + + true + + + ДекорацияКартинкаПредупреждениеРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + ДекорацияКартинкаПредупреждениеКонтекстноеМеню + 53 + true + + 2 + true + 1 + true + + + CommonPicture.Предупреждение + + + + + ДекорацияНадписьДоступностьСервиса + 49 + + <key>ru</key> + <value>Сервис склонения morpher.ru недоступен. </value> + + true + true + + true + + + ДекорацияНадписьДоступностьСервисаРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + + ДекорацияНадписьДоступностьСервисаКонтекстноеМеню + 50 + true + + Label + true + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа информационная надпись доступность сервиса</value> + + + ru + Группа информационная надпись доступность сервиса + + true + + ГруппаИнформационнаяНадписьДоступностьСервисаРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + Page + + false + + + true + true + + true + + + <key>ru</key> + <value>Группа информационная надпись сервис склонения</value> + + + ru + Группа информационная надпись сервис склонения + + true + + ГруппаИнформационнаяНадписьСервисСклоненияРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + Pages + + Auto + + + + ГруппаКоманднаяПанель + 31 + + ФормаКомандаОК + 25 + + <key>ru</key> + <value>ОК</value> + + true + true + + true + + true + + ФормаКомандаОКРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + Form.Command.КомандаОК + Auto + true + true + true + UserCmds + Auto + + + ФормаКомандаОтмена + 27 + true + true + + true + + + ФормаКомандаОтменаРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + Form.Command.КомандаОтмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа командная панель</value> + + + ГруппаКоманднаяПанельРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + CommandBar + + Right + + + None + false + + ФормаКоманднаяПанель + -1 + Left + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + 50 + LockOwner + true + true + Vertical + true + true + true + auto + true + + ИменительныйПадеж + + <key>ru</key> + <value>Именительный падеж</value> + + 1 + + String + + + + true + + + true + + + + РодительныйПадеж + + <key>ru</key> + <value>Родительный падеж</value> + + 2 + + String + + + + true + + + true + + + + ДательныйПадеж + + <key>ru</key> + <value>Дательный падеж</value> + + 3 + + String + + + + true + + + true + + + + ВинительныйПадеж + + <key>ru</key> + <value>Винительный падеж</value> + + 4 + + 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 + + + true + + + true + + + + ЭтоФИО + + <key>ru</key> + <value>Это ФИО</value> + + 8 + + Boolean + + + true + + + true + + + + Пол + + <key>ru</key> + <value>Пол</value> + + 9 + + Number + + 1 + + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Представление</value> + + 10 + + String + + + + true + + + true + + + + ИзмененоПредставление + + <key>ru</key> + <value>Изменено представление</value> + + 11 + + Boolean + + + true + + + true + + + + КомандаОК + + <key>ru</key> + <value>Записать</value> + + 1 + + true + + + + КомандаОК + + + DontUse + Auto + + + КомандаОтмена + + <key>ru</key> + <value>Отмена</value> + + 2 + + true + + + + КомандаОтмена + + + DontUse + Auto + + + КомандаПросклонятьПовторно + + <key>ru</key> + <value>Просклонять повторно</value> + + 3 + + ru + Просклонять повторно + + + true + + + CommonPicture.ЗаполнитьФорму + + + + КомандаПросклонятьПовторно + + + Picture + DontUse + Auto + + + + + + diff --git a/SSL/src/CommonForms/Склонения/Help/ru.html b/SSL/src/CommonForms/Склонения/Help/ru.html new file mode 100644 index 000000000..87698ace6 --- /dev/null +++ b/SSL/src/CommonForms/Склонения/Help/ru.html @@ -0,0 +1,8 @@ + +

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

          +

          Открывается по ссылке Склонения из карточки объекта.

          +

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

          +

          Возможны неточности автоматического склонения.

          +

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

          +

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

          +

          Если исправленный вариант склонения не устраивает, нажмите кнопку Просклонять повторно.

          \ 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..7d19bdbcd --- /dev/null +++ b/SSL/src/CommonForms/Склонения/Module.bsl @@ -0,0 +1,149 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("Склонения") И Параметры.Склонения <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(ЭтотОбъект, Параметры.Склонения); + Склонения = Параметры.Склонения; + КонецЕсли; + + Если Параметры.Свойство("ЭтоФИО") Тогда + ЭтоФИО = Параметры.ЭтоФИО; + КонецЕсли; + + Если Параметры.Свойство("Пол") Тогда + Пол = Параметры.Пол; + КонецЕсли; + + Если Параметры.Свойство("Представление") Тогда + Представление = Параметры.Представление; + КонецЕсли; + + Если Параметры.Свойство("ИзмененоПредставление") Тогда + ИзмененоПредставление = Параметры.ИзмененоПредставление; + КонецЕсли; + + ОбновитьГруппуИнформационнаяНадписьСервисСклонения() + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ДлительнаяОперация = ПросклонятьПредставлениеПоВсемПадежам(); + + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + + ОповещениеОЗавершении = Новый ОписаниеОповещения("ПросклонятьПредставлениеПоВсемПадежамЗавершение", ЭтотОбъект); + ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура КомандаОтмена(Команда) + + Закрыть(Неопределено); + +КонецПроцедуры + +&НаКлиенте +Процедура КомандаОК(Команда) + + СтруктураСклонения = СклонениеПредставленийОбъектовКлиентСервер.СтруктураСклонения(); + ЗаполнитьЗначенияСвойств(СтруктураСклонения, ЭтотОбъект); + + Закрыть(СтруктураСклонения); + +КонецПроцедуры + +&НаКлиенте +Процедура КомандаПросклонятьПовторно(Команда) + + ПросклонятьПовторноНаСервере(); + ОбновитьГруппуИнформационнаяНадписьСервисСклонения(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Функция ПросклонятьПредставлениеПоВсемПадежам() + + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("Представление", Представление); + ПараметрыПроцедуры.Вставить("ЭтоФИО", ЭтоФИО); + ПараметрыПроцедуры.Вставить("Пол", Пол); + ПараметрыПроцедуры.Вставить("ИзмененоПредставление", ИзмененоПредставление); + ПараметрыПроцедуры.Вставить("Склонения", Склонения); + + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Склонение представления'"); + + Возврат ДлительныеОперации.ВыполнитьВФоне("СклонениеПредставленийОбъектов.ПросклонятьПредставлениеПоВсемПадежамДлительнаяОперация", + ПараметрыПроцедуры, ПараметрыВыполнения); + +КонецФункции + +&НаКлиенте +Процедура ПросклонятьПредставлениеПоВсемПадежамЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + СтруктураСклонений = ПолучитьИзВременногоХранилища(Результат.АдресРезультата); + + Если ТипЗнч(СтруктураСклонений) = Тип("Структура") Тогда + ЗаполнитьЗначенияСвойств(ЭтотОбъект, СтруктураСклонений); + Склонения = Новый ФиксированнаяСтруктура(СтруктураСклонений); + КонецЕсли; + + ОбновитьГруппуИнформационнаяНадписьСервисСклонения(); + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьГруппуИнформационнаяНадписьСервисСклонения() + + Если ЭтоФИО Тогда + Элементы.ГруппаИнформационнаяНадписьСервисСклонения.Видимость = Ложь; + Возврат; + КонецЕсли; + + ИспользоватьСервисСклонения = Константы.ИспользоватьСервисСклоненияMorpher.Получить(); + + Если ИспользоватьСервисСклонения Тогда + Если Не СклонениеПредставленийОбъектов.ДоступенСервисСклонения() Тогда + Элементы.ГруппаИнформационнаяНадписьСервисСклонения.Видимость = Истина; + Элементы.ГруппаИнформационнаяНадписьСервисСклонения.ТекущаяСтраница = Элементы.ГруппаИнформационнаяНадписьДоступностьСервиса; + Иначе + Элементы.ГруппаИнформационнаяНадписьСервисСклонения.Видимость = Ложь; + КонецЕсли; + Иначе + Элементы.ГруппаИнформационнаяНадписьСервисСклонения.Видимость = Истина; + Элементы.ГруппаИнформационнаяНадписьСервисСклонения.ТекущаяСтраница = Элементы.ГруппаИнформационнаяНадписьВключениеСервиса; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПросклонятьПовторноНаСервере() + + ИзмененоПредставление = Истина; + СтруктураСклонения = СклонениеПредставленийОбъектов.ДанныеСклонения(Представление, ЭтоФИО, Пол, Истина); + ЗаполнитьЗначенияСвойств(ЭтотОбъект, СтруктураСклонения); + Склонения = Новый ФиксированнаяСтруктура(СтруктураСклонения); + ИзмененоПредставление = Ложь; + +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/CommonForms/Склонения/Склонения.mdo b/SSL/src/CommonForms/Склонения/Склонения.mdo new file mode 100644 index 000000000..dd942d6b6 --- /dev/null +++ b/SSL/src/CommonForms/Склонения/Склонения.mdo @@ -0,0 +1,15 @@ + + + Склонения + + ru + Склонения + + + + ru + + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/СменаПароля/Form.form b/SSL/src/CommonForms/СменаПароля/Form.form index 31ef86fe5..b91efedc7 100644 --- a/SSL/src/CommonForms/СменаПароля/Form.form +++ b/SSL/src/CommonForms/СменаПароля/Form.form @@ -267,14 +267,6 @@ НовыйПароль None - - ru - Надежный пароль: -- имеет не менее 7 символов; -- содержит любые 3 из 4-х типов символов: заглавные буквы, - строчные буквы, цифры, специальные символы; -- не совпадает с именем (для входа). - Button OnChange @@ -328,14 +320,6 @@ НовыйПароль None - - ru - Надежный пароль: -- имеет не менее 7 символов; -- содержит любые 3 из 4-х типов символов: заглавные буквы, - строчные буквы, цифры, специальные символы; -- не совпадает с именем (для входа). - Button OnChange @@ -385,6 +369,7 @@ true + true СоздатьПарольРасширеннаяПодсказка 30 @@ -555,6 +540,7 @@ Vertical auto + false @@ -613,6 +599,7 @@ Vertical auto + false true @@ -1086,23 +1073,6 @@ true - - ИдентификаторПользователяИБ - - <key>ru</key> - <value>Идентификатор пользователя ИБ</value> - - 11 - - UUID - - - true - - - true - - ПоследнееПодтверждение @@ -1138,6 +1108,23 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ВернутьПарольБезУстановки</name> + <title> + <key>ru</key> + <value>Вернуть пароль без установки</value> + + 14 + + Boolean + + + true + + + true + + УстановитьПароль @@ -1209,6 +1196,16 @@ <types>Boolean</types> </valueType> </parameters> + <parameters> + <name>ВернутьПарольБезУстановки</name> + <valueType> + <types>Boolean</types> + </valueType> + </parameters> + <parameters> + <name>СтарыйПароль</name> + <valueType/> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/CommonForms/СменаПароля/Help/ru.html b/SSL/src/CommonForms/СменаПароля/Help/ru.html index 341faa718..74183c9f1 100644 --- a/SSL/src/CommonForms/СменаПароля/Help/ru.html +++ b/SSL/src/CommonForms/СменаПароля/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для ввода или смены пароля.</p> <p>В целях информационной безопасности рекомендуется вводить пароли, не оставлять это поле пустым.</p> <h3>Ввод пароля</h3> diff --git a/SSL/src/CommonForms/СменаПароля/Module.bsl b/SSL/src/CommonForms/СменаПароля/Module.bsl index f1dec4fd1..14f8ff87e 100644 --- a/SSL/src/CommonForms/СменаПароля/Module.bsl +++ b/SSL/src/CommonForms/СменаПароля/Module.bsl @@ -8,22 +8,42 @@ Возврат; КонецЕсли; - ПриВходеВПрограмму = Параметры.ПриВходеВПрограмму; + ПриВходеВПрограмму = Параметры.ПриВходеВПрограмму; + ВернутьПарольБезУстановки = Параметры.ВернутьПарольБезУстановки; + СтарыйПароль = Параметры.СтарыйПароль; - Если ЗначениеЗаполнено(Параметры.Пользователь) Тогда + Если ВернутьПарольБезУстановки Или ЗначениеЗаполнено(Параметры.Пользователь) Тогда Пользователь = Параметры.Пользователь; Иначе Пользователь = Пользователи.АвторизованныйПользователь(); КонецЕсли; ДополнительныеПараметры = Новый Структура; + Если Не ВернутьПарольБезУстановки Тогда + ДополнительныеПараметры.Вставить("ПроверятьДействительностьПользователя"); + ДополнительныеПараметры.Вставить("ПроверятьНаличиеПользователяИБ"); + КонецЕсли; Если Не ПользователиСлужебный.ВозможноИзменитьПароль(Пользователь, ДополнительныеПараметры) Тогда ТекстОшибки = ДополнительныеПараметры.ТекстОшибки; Возврат; КонецЕсли; ЭтоТекущийПользовательИБ = ДополнительныеПараметры.ЭтоТекущийПользовательИБ; - ИдентификаторПользователяИБ = ДополнительныеПараметры.ИдентификаторПользователяИБ; + Если Не ВернутьПарольБезУстановки Тогда + Попытка + ЗаблокироватьДанныеДляРедактирования(Пользователь, , УникальныйИдентификатор); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Если Не ПриВходеВПрограмму Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось открыть форму смены пароля по причине: + | + |%1'"), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + Возврат; + КонецЕсли; + КонецПопытки; + КонецЕсли; Если ПриВходеВПрограмму Тогда Если ДополнительныеПараметры.ПарольУстановлен Тогда @@ -52,8 +72,14 @@ Элементы.СтарыйПароль.Видимость = Ложь; АвтоЗаголовок = Ложь; Заголовок = НСтр("ru = 'Установка пароля'"); + + ИначеЕсли Параметры.СтарыйПароль <> Неопределено Тогда + ТекущийЭлемент = Элементы.НовыйПароль; КонецЕсли; + Элементы.НовыйПароль.Подсказка = ПользователиСлужебный.ПодсказкаДляНовогоПароля(); + Элементы.НовыйПароль2.Подсказка = ПользователиСлужебный.ПодсказкаДляНовогоПароля(); + КонецПроцедуры &НаКлиенте @@ -75,7 +101,6 @@ &НаКлиенте Процедура ПарольПриИзменении(Элемент) - ПоследнееПодтверждение = ""; ПроверитьПодтверждениеПароля(); КонецПроцедуры @@ -102,43 +127,26 @@ &НаКлиенте Процедура СоздатьПароль(Команда) - Подтверждение = ""; - ПоследнееПодтверждение = ""; + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ДляВнешнегоПользователя", + ТипЗнч(Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи")); - СоздатьПарольНаСервере(); - ПроверитьПодтверждениеПароля(); + ОткрытьФорму("ОбщаяФорма.НовыйПароль", ПараметрыФормы, ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура УстановитьПароль(Команда) - ТекстПредупреждения = НСтр("ru = 'Подтверждение пароля указано некорректно.'"); - - Если ПоказыватьНовыйПароль - И НовыйПароль <> ПоследнееПодтверждение - И ЭтоТекущийПользовательИБ Тогда - - ПоказыватьНовыйПароль = Ложь; - Подтверждение = ""; - ПоследнееПодтверждение = ""; - ПоказыватьНовыйПарольПриИзмененииНаСервере(); - ПроверитьПодтверждениеПароля(); - ТекущийЭлемент = Элементы.Подтверждение; - Если ЗначениеЗаполнено(НовыйПароль) Тогда - ПоказатьПредупреждение(, ТекстПредупреждения); - Возврат; - КонецЕсли; - КонецЕсли; - Если Не ПоказыватьНовыйПароль И НовыйПароль <> Подтверждение Тогда ТекущийЭлемент = Элементы.Подтверждение; Элементы.Подтверждение.ВыделенныйТекст = Элементы.Подтверждение.ТекстРедактирования; - ПоказатьПредупреждение(, ТекстПредупреждения); + ПоказатьПредупреждение(, НСтр("ru = 'Подтверждение пароля указано некорректно.'")); Возврат; КонецЕсли; - Если Не ЭтоТекущийПользовательИБ + Если Не ВернутьПарольБезУстановки + И Не ЭтоТекущийПользовательИБ И СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().РазделениеВключено И ПарольПользователяСервиса = Неопределено Тогда @@ -191,7 +199,7 @@ &НаКлиенте Процедура ПроверитьПодтверждениеПароля(ПолеПароля = Неопределено) - Если ПоказыватьНовыйПароль И Не ЭтоТекущийПользовательИБ Тогда + Если ПоказыватьНовыйПароль Тогда ПарольСовпадает = Истина; ИначеЕсли ПолеПароля = Элементы.НовыйПароль @@ -201,9 +209,6 @@ ИначеЕсли ПолеПароля = Элементы.Подтверждение Тогда ПарольСовпадает = (НовыйПароль = ПолеПароля.ТекстРедактирования); - - ИначеЕсли ПоказыватьНовыйПароль Тогда - ПарольСовпадает = (НовыйПароль = ПоследнееПодтверждение); Иначе ПарольСовпадает = (НовыйПароль = Подтверждение); КонецЕсли; @@ -216,46 +221,18 @@ &НаСервере Процедура ПоказыватьНовыйПарольПриИзмененииНаСервере() - Элементы.ПодтверждениеПароляНадпись.Доступность = Не ПоказыватьНовыйПароль Или ЭтоТекущийПользовательИБ; + Элементы.ПодтверждениеПароляНадпись.Доступность = Не ПоказыватьНовыйПароль; Элементы.Подтверждение.Доступность = Не ПоказыватьНовыйПароль; Элементы.НовыйПароль.Видимость = Не ПоказыватьНовыйПароль; Элементы.НовыйПароль2.Видимость = ПоказыватьНовыйПароль; Если ПоказыватьНовыйПароль Тогда - ПоследнееПодтверждение = Подтверждение; Подтверждение = ""; - Иначе - Подтверждение = ПоследнееПодтверждение; - ПоследнееПодтверждение = ""; КонецЕсли; КонецПроцедуры -&НаСервере -Процедура СоздатьПарольНаСервере() - - Если ТипЗнч(Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда - НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().ВнешниеПользователи; - Иначе - НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().Пользователи; - КонецЕсли; - - Если НастройкиВхода.МинимальнаяДлинаПароля > 8 Тогда - МинимальнаяДлинаПароля = НастройкиВхода.МинимальнаяДлинаПароля; - Иначе - МинимальнаяДлинаПароля = 8; - КонецЕсли; - - ПараметрыПароля = ПользователиСлужебный.ПараметрыПароля(МинимальнаяДлинаПароля, Истина); - - НовыйПароль = ПользователиСлужебный.СоздатьПароль(ПараметрыПароля); - - ПоказыватьНовыйПароль = Истина; - ПоказыватьНовыйПарольПриИзмененииНаСервере(); - -КонецПроцедуры - // Продолжение процедуры УстановитьПароль. &НаКлиенте Процедура УстановитьПарольЗавершение(НовыйПарольПользователяСервиса, Контекст) Экспорт @@ -268,9 +245,16 @@ ПарольПользователяСервиса = НовыйПарольПользователяСервиса; КонецЕсли; - ТекстОшибки = ""; - Если УстановитьПарольНаСервере(ТекстОшибки) Тогда - Закрыть(Новый Структура("УстановленПустойПароль", НовыйПароль = "")); + ТекстОшибки = УстановитьПарольНаСервере(); + Если Не ЗначениеЗаполнено(ТекстОшибки) Тогда + Результат = Новый Структура; + Если ВернутьПарольБезУстановки Тогда + Результат.Вставить("НовыйПароль", НовыйПароль); + Результат.Вставить("СтарыйПароль", ?(Элементы.СтарыйПароль.Видимость, СтарыйПароль, Неопределено)); + Иначе + Результат.Вставить("УстановленПустойПароль", НовыйПароль = ""); + КонецЕсли; + Закрыть(Результат); Иначе ПоказатьПредупреждение(, ТекстОшибки); КонецЕсли; @@ -278,145 +262,30 @@ КонецПроцедуры &НаСервере -Функция УстановитьПарольНаСервере(ТекстОшибки) +Функция УстановитьПарольНаСервере() - ДополнительныеПараметры = Новый Структура; - Если Не ПользователиСлужебный.ВозможноИзменитьПароль(Пользователь, ДополнительныеПараметры) Тогда - ТекстОшибки = ДополнительныеПараметры.ТекстОшибки; - Возврат Ложь; + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("Пользователь", Пользователь); + ПараметрыВыполнения.Вставить("НовыйПароль", НовыйПароль); + ПараметрыВыполнения.Вставить("СтарыйПароль", СтарыйПароль); + ПараметрыВыполнения.Вставить("ПриВходеВПрограмму", ПриВходеВПрограмму); + ПараметрыВыполнения.Вставить("ПарольПользователяСервиса", ПарольПользователяСервиса); + ПараметрыВыполнения.Вставить("ТолькоПроверить", ВернутьПарольБезУстановки); + + ТекстОшибки = ПользователиСлужебный.ОбработатьНовыйПароль(ПараметрыВыполнения); + + Если Не ЗначениеЗаполнено(ТекстОшибки) Тогда + Возврат ""; КонецЕсли; - УстановитьПривилегированныйРежим(Истина); - - Если ДополнительныеПараметры.ЭтоТекущийПользовательИБ - И ДополнительныеПараметры.ПарольУстановлен Тогда - - СтарыйПарольСовпадает = Ложь; - ПользователиСлужебный.СохраняемоеЗначениеСтрокиПароля(СтарыйПароль, - ИдентификаторПользователяИБ, СтарыйПарольСовпадает); - Если Не СтарыйПарольСовпадает Тогда - ТекстОшибки = НСтр("ru = 'Старый пароль указан неверно.'"); - СтарыйПароль = ""; - ТекущийЭлемент = Элементы.СтарыйПароль; - Возврат Ложь; - КонецЕсли; + Если Не ПараметрыВыполнения.СтарыйПарольСовпадает Тогда + ТекущийЭлемент = Элементы.СтарыйПароль; + СтарыйПароль = ""; КонецЕсли; - Если ТипЗнч(Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда - НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().ВнешниеПользователи; - Иначе - НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().Пользователи; - КонецЕсли; + ПарольПользователяСервиса = ПараметрыВыполнения.ПарольПользователяСервиса; - Если ПользователиСлужебныйПовтИсп.Настройки().ОбщиеНастройкиВхода Тогда - МинимальнаяДлинаПароля = НастройкиВхода.МинимальнаяДлинаПароля; - Если НастройкиВхода.ПарольДолженОтвечатьТребованиямСложности И МинимальнаяДлинаПароля < 7 Тогда - МинимальнаяДлинаПароля = 7; - КонецЕсли; - Если СтрДлина(НовыйПароль) < МинимальнаяДлинаПароля Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Количество символов нового пароля должно быть не менее %1.'"), - Формат(МинимальнаяДлинаПароля, "ЧГ=")); - Возврат Ложь; - КонецЕсли; - Если НастройкиВхода.ПарольДолженОтвечатьТребованиямСложности - И Не ПользователиСлужебный.ПарольОтвечаетТребованиямСложности(НовыйПароль) Тогда - - ТекстОшибки = НСтр("ru = 'Пароль не отвечает требованиям сложности.'") - + Символы.ПС + Символы.ПС - + Элементы.НовыйПароль.Подсказка; - Возврат Ложь; - КонецЕсли; - КонецЕсли; - - СохраняемоеЗначениеПароля = ПользователиСлужебный.СохраняемоеЗначениеСтрокиПароля(НовыйПароль); - - Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(Пользователь)).ПолноеИмя()); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; - ЭлементБлокировки.УстановитьЗначение("Ссылка", Пользователь); - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СведенияОПользователях"); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; - ЭлементБлокировки.УстановитьЗначение("Пользователь", Пользователь); - НачатьТранзакцию(); - Попытка - Блокировка.Заблокировать(); - НаборЗаписей = РегистрыСведений.СведенияОПользователях.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.Пользователь.Установить(Пользователь); - НаборЗаписей.Прочитать(); - Если НаборЗаписей.Количество() = 0 Тогда - СведенияОПользователе = НаборЗаписей.Добавить(); - СведенияОПользователе.Пользователь = Пользователь; - Иначе - СведенияОПользователе = НаборЗаписей[0]; - КонецЕсли; - СведенияОПользователе.ДатаНачалаИспользованияПароля = Неопределено; - Если ПриВходеВПрограмму Тогда - СведенияОПользователе.ПотребоватьСменуПароляПриВходе = Ложь; - КонецЕсли; - ИспользованныеПароли = СведенияОПользователе.ИспользованныеПароли.Получить(); - Если ИспользованныеПароли = Неопределено Тогда - ИспользованныеПароли = Новый Массив; - КонецЕсли; - - Если ПользователиСлужебныйПовтИсп.Настройки().ОбщиеНастройкиВхода - И ЗначениеЗаполнено(НастройкиВхода.ЗапретитьПовторениеПароляСредиПоследних) Тогда - - Если ИспользованныеПароли.Найти(СохраняемоеЗначениеПароля) <> Неопределено Тогда - ТекстОшибки = НСтр("ru = 'Новый пароль использовался ранее.'"); - ОтменитьТранзакцию(); - Возврат Ложь; - КонецЕсли; - ИспользованныеПароли.Добавить(СохраняемоеЗначениеПароля); - Пока ИспользованныеПароли.Количество() > НастройкиВхода.ЗапретитьПовторениеПароляСредиПоследних Цикл - ИспользованныеПароли.Удалить(0); - КонецЦикла; - Иначе - ИспользованныеПароли.Очистить(); - КонецЕсли; - СведенияОПользователе.ИспользованныеПароли = Новый ХранилищеЗначения(ИспользованныеПароли); - НаборЗаписей.Записать(); - - ОписаниеПользователяИБ = Новый Структура; - ОписаниеПользователяИБ.Вставить("Действие", "Записать"); - ОписаниеПользователяИБ.Вставить("Пароль", НовыйПароль); - - ТекущийОбъект = Пользователь.ПолучитьОбъект(); - ТекущийОбъект.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ); - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Если ЭтоТекущийПользовательИБ Тогда - ТекущийОбъект.ДополнительныеСвойства.Вставить("ПарольПользователяСервиса", СтарыйПароль); - Иначе - ТекущийОбъект.ДополнительныеСвойства.Вставить("ПарольПользователяСервиса", ПарольПользователяСервиса); - КонецЕсли; - ТекущийОбъект.ДополнительныеСвойства.Вставить("СинхронизироватьССервисом", Истина); - КонецЕсли; - Попытка - ТекущийОбъект.Записать(); - Исключение - ПарольПользователяСервиса = Неопределено; - ВызватьИсключение; - КонецПопытки; - - ЗафиксироватьТранзакцию(); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Пользователи.Ошибка смены пароля'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - Метаданные.НайтиПоТипу(ТипЗнч(Пользователь)), - Пользователь, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось сменить пароль пользователя ""%1"" по причине: - |%2'"), - Пользователь, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке))); - ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - Возврат Ложь; - КонецПопытки; - - Возврат Истина; + Возврат ТекстОшибки; КонецФункции diff --git a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Form.form b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Form.form index 8267cdba0..a00114ebb 100644 --- a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Form.form +++ b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Form.form @@ -280,6 +280,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -899,6 +900,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -1157,6 +1159,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1303,6 +1306,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1370,6 +1374,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -1979,6 +1984,24 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>АдресПараметровЗадания</name> + <title> + <key>ru</key> + <value>Адрес параметров задания</value> + + 27 + + String + + + + true + + + true + + СоздатьНачальныйОбраз diff --git a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Help/ru.html b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Help/ru.html index 86ea2ea1b..cf6356ff4 100644 --- a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Help/ru.html +++ b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></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 11.00.9600.18427"></meta></head><body> <p style="MARGIN-RIGHT: 0px" dir="ltr">Предназначена для указания параметров файловой или клиент-серверной базы при создании начального образа РИБ. При настройке синхронизации РИБ (внешние файлы) необходимо указать, где будет создан начальный образ РИБ. Если файлы хранятся в <a href="Catalog.ТомаХраненияФайлов/Help">томах</a>, также потребуется указать путь к файлу, в который будет записан архив (.zip) со всеми файлами в томах. </p> <p style="MARGIN-RIGHT: 0px" dir="ltr">Открывается по команде <img src="StdPicture.CreateInitialImage" width="16" height="16"></img> <strong>Создать начальный образ </strong>из <a href="DataProcessor.ПомощникСозданияОбменаДанными/Help">Помощника создания синхронизации данных</a> при настройке синхронизации РИБ (внешние файлы). Также можно в списке <a href="CommonForm.СинхронизацияДанных/Help">Синхронизация данных</a> с помощью кнопки <img src="StdPicture.Change"></img> открыть настройку синхронизации РИБ (внешние файлы), нажать кнопку  <img src="StdPicture.CreateInitialImage"></img> <strong>Создание начального образа подчиненного узла распределенной информационной базы</strong>.</p> <h3 style="MARGIN-RIGHT: 0px" dir="ltr">Параметры информационной базы</h3> diff --git a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl index 9b3f13ef6..41f6de9b1 100644 --- a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl +++ b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl @@ -124,14 +124,55 @@ ОчиститьСообщения(); Если ВидБазы = 0 И НЕ МожноСоздатьФайловуюБазу Тогда - ВызватьИсключение НСтр("ru = 'Создание начального образа файловой информационной базы |на данной платформе не поддерживается.'"); + Иначе + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("Узел", Узел); + ПараметрыЗадания.Вставить("ПутьКАрхивуСФайламиТомовWindows", ПутьКАрхивуСФайламиТомовWindows); + ПараметрыЗадания.Вставить("ПутьКАрхивуСФайламиТомовLinux", ПутьКАрхивуСФайламиТомовLinux); + + Если ВидБазы = 0 Тогда + // Файловый начальный образ. + ПараметрыЗадания.Вставить("УникальныйИдентификаторФормы", УникальныйИдентификатор); + ПараметрыЗадания.Вставить("Язык", Язык); + ПараметрыЗадания.Вставить("ПолноеИмяФайловойБазыWindows", ПолноеИмяФайловойБазыWindows); + ПараметрыЗадания.Вставить("ПолноеИмяФайловойБазыLinux", ПолноеИмяФайловойБазыLinux); + ПараметрыЗадания.Вставить("НаименованиеЗадания", НСтр("ru = 'Создание файлового начального образа'")); + ПараметрыЗадания.Вставить("НаименованиеПроцедуры", "СоздатьФайловыйНачальныйОбразНаСервере"); + Иначе + // Серверный начальный образ. + СтрокаСоединения = + "Srvr=""" + Сервер + """;" + + "Ref=""" + ИмяБазы + """;" + + "DBMS=""" + ТипСУБД + """;" + + "DBSrvr=""" + СерверБазыДанных + """;" + + "DB=""" + ИмяБазыДанных + """;" + + "DBUID=""" + ПользовательБазыДанных + """;" + + "DBPwd=""" + ПарольПользователя + """;" + + "SQLYOffs=""" + Формат(СмещениеДат, "ЧГ=") + """;" + + "Locale=""" + Язык + """;" + + "SchJobDn=""" + ?(УстановитьБлокировкуРегламентныхЗаданий, "Y", "N") + """;"; + + ПараметрыЗадания.Вставить("СтрокаСоединения", СтрокаСоединения); + ПараметрыЗадания.Вставить("НаименованиеЗадания", НСтр("ru = 'Создание серверного начального образа'")); + ПараметрыЗадания.Вставить("НаименованиеПроцедуры", "СоздатьСерверныйНачальныйОбразНаСервере"); + КонецЕсли; + Результат = ПодготовитьДанныеДляСозданияНачальногоОбраза(ПараметрыЗадания, ВидБазы); + Если ТипЗнч(Результат) = Тип("Структура") Тогда + Если Результат.ДанныеПодготовлены Тогда + АдресПараметровЗадания = ПоместитьВоВременноеХранилище(ПараметрыЗадания, УникальныйИдентификатор); + ОписаниеОповещения = Новый ОписаниеОповещения("ВыполнитьСозданиеНачальногоОбраза", ЭтотОбъект); + Если Результат.ТребуетсяПодтверждение Тогда + ПоказатьВопрос(ОписаниеОповещения, Результат.ТекстВопроса, РежимДиалогаВопрос.ДаНет); + Иначе + ВыполнитьОбработкуОповещения(ОписаниеОповещения, КодВозвратаДиалога.Да); + КонецЕсли; + КонецЕсли; + КонецЕсли; КонецЕсли; - ПроцентВыполнения = 0; - ДопИнформацияВыполнение = ""; - ПодключитьОбработчикОжидания("ЗапуститьСозданиеНачальногоОбраза", 1, Истина); + КонецПроцедуры #КонецОбласти @@ -153,7 +194,7 @@ ОповещениеПодключенияРасширенияРаботыСФайлами = Новый ОписаниеОповещения( "ОбработчикСохраненияФайлаПослеПодключенияРасширенияРаботыСФайлами", - ЭтаФорма, ДополнительныеПараметры); + ЭтотОбъект, ДополнительныеПараметры); НачатьПодключениеРасширенияРаботыСФайлами(ОповещениеПодключенияРасширенияРаботыСФайлами); @@ -180,7 +221,7 @@ ОписаниеОповещенияДиалогаВыбора = Новый ОписаниеОповещения( "ОбработчикСохраненияФайлаПослеВыбораВДиалоге", - ЭтаФорма, ДополнительныеПараметры); + ЭтотОбъект, ДополнительныеПараметры); Диалог.Показать(ОписаниеОповещенияДиалогаВыбора); КонецПроцедуры @@ -196,15 +237,45 @@ КонецПроцедуры +&НаСервереБезКонтекста +Функция ПодготовитьДанныеДляСозданияНачальногоОбраза(ПараметрыЗадания, ВидБазы) + + Если ВидБазы = 0 Тогда + // Файловый начальный образ. + // Функция обработки, проверки и подготовки параметров. + Результат = ФайловыеФункцииСлужебный.ПодготовитьДанныеДляСозданияФайловогоНачальногоОбраза(ПараметрыЗадания); + Иначе + // Серверный начальный образ. + // Функция обработки, проверки и подготовки параметров. + Результат = ФайловыеФункцииСлужебный.ПодготовитьДанныеДляСозданияСерверногоНачальногоОбраза(ПараметрыЗадания); + КонецЕсли; + + Возврат Результат; + +КонецФункции + &НаКлиенте -Процедура ЗапуститьСозданиеНачальногоОбраза() - ФоновоеЗаданиеЗапуститьНаКлиенте(ВидБазы); +Процедура ВыполнитьСозданиеНачальногоОбраза(Результат, Неопределен) Экспорт + + Если Результат = КодВозвратаДиалога.Да Тогда + ПроцентВыполнения = 0; + ДопИнформацияВыполнение = ""; + ПодключитьОбработчикОжидания("ЗапуститьСозданиеНачальногоОбраза", 1, Истина); + КонецЕсли; + КонецПроцедуры &НаКлиенте -Процедура ФоновоеЗаданиеЗапуститьНаКлиенте(Действие) +Процедура ЗапуститьСозданиеНачальногоОбраза() - Результат = ФоновоеЗаданиеЗапустить(Действие); + ФоновоеЗаданиеЗапуститьНаКлиенте(); + +КонецПроцедуры + +&НаКлиенте +Процедура ФоновоеЗаданиеЗапуститьНаКлиенте() + + Результат = ФоновоеЗаданиеЗапустить(); Если Результат.ФоновоеЗаданиеЗапущено Тогда ПерейтиКСтраницеОжидания(); ПодключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте", 2, Истина); @@ -219,6 +290,7 @@ // Переход к странице с результатом с задержкой в 1 сек. ПодключитьОбработчикОжидания("ЗапуститьПереходРезультат", 1, Истина); КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -228,74 +300,38 @@ КонецПроцедуры &НаСервере -Функция ФоновоеЗаданиеЗапустить(Знач Действие) +Функция ФоновоеЗаданиеЗапустить() + Результат = Новый Структура; Результат.Вставить("ФоновоеЗаданиеЗапущено", Ложь); - Результат.Вставить("Отказ", Ложь); + Результат.Вставить("Отказ", Истина); - ПараметрыЗадания = Новый Структура; - ПараметрыЗадания.Вставить("Узел", Узел); - ПараметрыЗадания.Вставить("ПутьКАрхивуСФайламиТомовWindows", ПутьКАрхивуСФайламиТомовWindows); - ПараметрыЗадания.Вставить("ПутьКАрхивуСФайламиТомовLinux", ПутьКАрхивуСФайламиТомовLinux); - - Если Действие = 0 Тогда - // Файловый начальный образ. - ПараметрыЗадания.Вставить("УникальныйИдентификаторФормы", УникальныйИдентификатор); - ПараметрыЗадания.Вставить("Язык", Язык); - ПараметрыЗадания.Вставить("ПолноеИмяФайловойБазыWindows", ПолноеИмяФайловойБазыWindows); - ПараметрыЗадания.Вставить("ПолноеИмяФайловойБазыLinux", ПолноеИмяФайловойБазыLinux); - НаименованиеЗадания = НСтр("ru = 'Создание файлового начального образа'"); - НаименованиеПроцедуры = "СоздатьФайловыйНачальныйОбразНаСервере"; - - // Функция обработки, проверки и подготовки параметров. - МожноЗапускатьЗадание = ФайловыеФункцииСлужебный.ПодготовитьДанныеДляСозданияФайловогоНачальногоОбраза(ПараметрыЗадания); - Иначе - // Серверный начальный образ. - СтрокаСоединения = - "Srvr=""" + Сервер + """;" - + "Ref=""" + ИмяБазы + """;" - + "DBMS=""" + ТипСУБД + """;" - + "DBSrvr=""" + СерверБазыДанных + """;" - + "DB=""" + ИмяБазыДанных + """;" - + "DBUID=""" + ПользовательБазыДанных + """;" - + "DBPwd=""" + ПарольПользователя + """;" - + "SQLYOffs=""" + Формат(СмещениеДат, "ЧГ=") + """;" - + "Locale=""" + Язык + """;" - + "SchJobDn=""" + ?(УстановитьБлокировкуРегламентныхЗаданий, "Y", "N") + """;"; - - ПараметрыЗадания.Вставить("СтрокаСоединения", СтрокаСоединения); - НаименованиеЗадания = НСтр("ru = 'Создание серверного начального образа'"); - НаименованиеПроцедуры = "СоздатьСерверныйНачальныйОбразНаСервере"; - - // Функция обработки, проверки и подготовки параметров. - МожноЗапускатьЗадание = ФайловыеФункцииСлужебный.ПодготовитьДанныеДляСозданияСерверногоНачальногоОбраза(ПараметрыЗадания); - КонецЕсли; - Если МожноЗапускатьЗадание = Ложь Тогда - // Ошибка при инициализации параметров. - Результат.Отказ = Истина; - Возврат Результат; - КонецЕсли; - - // Запуск фонового задания. - - РезультатФоновогоЗадания = ДлительныеОперации.ЗапуститьВыполнениеВФоне( - УникальныйИдентификатор, - "ФайловыеФункцииСлужебный."+НаименованиеПроцедуры, - ПараметрыЗадания, - НаименованиеЗадания); - - ФоновоеЗаданиеИдентификатор = РезультатФоновогоЗадания.ИдентификаторЗадания; - ФоновоеЗаданиеАдресХранилища = РезультатФоновогоЗадания.АдресХранилища; - - Если РезультатФоновогоЗадания.ЗаданиеВыполнено Тогда - ФоновоеЗаданиеЗагрузитьРезультат(Результат); - Результат.ФоновоеЗаданиеЗапущено = Ложь; - Иначе - ФоновоеЗаданиеПрочитатьПромежуточныйРезультат(); - Результат.ФоновоеЗаданиеЗапущено = Истина; + Если ЭтоАдресВременногоХранилища(АдресПараметровЗадания) Тогда + ПараметрыЗадания = ПолучитьИзВременногоХранилища(АдресПараметровЗадания); + Если ТипЗнч(ПараметрыЗадания) = Тип("Структура") Тогда + // Запуск фонового задания. + Результат.Отказ = Ложь; + РезультатФоновогоЗадания = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификатор, + "ФайловыеФункцииСлужебный." + ПараметрыЗадания.НаименованиеПроцедуры, + ПараметрыЗадания, + ПараметрыЗадания.НаименованиеЗадания); + + ФоновоеЗаданиеИдентификатор = РезультатФоновогоЗадания.ИдентификаторЗадания; + ФоновоеЗаданиеАдресХранилища = РезультатФоновогоЗадания.АдресХранилища; + + Если РезультатФоновогоЗадания.ЗаданиеВыполнено Тогда + ФоновоеЗаданиеЗагрузитьРезультат(Результат); + Результат.ФоновоеЗаданиеЗапущено = Ложь; + Иначе + ФоновоеЗаданиеПрочитатьПромежуточныйРезультат(); + Результат.ФоновоеЗаданиеЗапущено = Истина; + КонецЕсли; + КонецЕсли; КонецЕсли; Возврат Результат; + КонецФункции &НаКлиенте diff --git a/SSL/src/CommonForms/СозданиеРезервнойКопии/Form.form b/SSL/src/CommonForms/СозданиеРезервнойКопии/Form.form index 42c1c792d..f093c67a0 100644 --- a/SSL/src/CommonForms/СозданиеРезервнойКопии/Form.form +++ b/SSL/src/CommonForms/СозданиеРезервнойКопии/Form.form @@ -65,6 +65,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -228,7 +229,9 @@ </extInfo> </extendedTooltip> <type>Page</type> - <extInfo xsi:type="form:PageGroupExtInfo"/> + <extInfo xsi:type="form:PageGroupExtInfo"> + <scrollOnCompress>false</scrollOnCompress> + </extInfo> </items> <items xsi:type="form:FormGroup"> <name>СтраницаПослеВыгрузкиОшибка</name> @@ -337,7 +340,9 @@ </extInfo> </extendedTooltip> <type>Page</type> - <extInfo xsi:type="form:PageGroupExtInfo"/> + <extInfo xsi:type="form:PageGroupExtInfo"> + <scrollOnCompress>false</scrollOnCompress> + </extInfo> </items> <visible>true</visible> <enabled>true</enabled> diff --git a/SSL/src/CommonForms/СозданиеРезервнойКопии/Module.bsl b/SSL/src/CommonForms/СозданиеРезервнойКопии/Module.bsl index 5ef2f17c0..1a50bb141 100644 --- a/SSL/src/CommonForms/СозданиеРезервнойКопии/Module.bsl +++ b/SSL/src/CommonForms/СозданиеРезервнойКопии/Module.bsl @@ -1,9 +1,13 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ПараметрыОбработчикаОжидания; &НаКлиенте Перем ФормаДлительнойОперации; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Form.form b/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Form.form index 25f025f63..b4a3afaeb 100644 --- a/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Form.form +++ b/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Form.form @@ -360,7 +360,6 @@ <autoMaxHeight>true</autoMaxHeight> <autoMaxRowsCount>true</autoMaxRowsCount> <selectionMode>MultiRow</selectionMode> - <rowSelectionMode>Row</rowSelectionMode> <header>true</header> <headerHeight>1</headerHeight> <footerHeight>1</footerHeight> @@ -664,6 +663,23 @@ <common>true</common> </edit> </columns> + <columns> + <name>ПодписьВерна</name> + <title> + <key>ru</key> + <value>Подпись верна</value> + + 6 + + Boolean + + + true + + + true + + БольшеНеСпрашивать diff --git a/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Help/ru.html b/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Help/ru.html index d59edab8e..ef259d72d 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 4736c7ee7..8784d5487 100644 --- a/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Module.bsl +++ b/SSL/src/CommonForms/СохранениеВместеСЭлектроннойПодписью/Module.bsl @@ -1,11 +1,15 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем КлиентскиеПараметры Экспорт; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. @@ -82,29 +86,9 @@ &НаСервере Процедура УстановитьУсловноеОформление() - - УсловноеОформление.Элементы.Очистить(); - - // - - Элемент = УсловноеОформление.Элементы.Добавить(); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаПодписейАвторПодписи.Имя); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаПодписейДатаПодписи.Имя); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаПодписейКомментарий.Имя); - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаПодписей.Неверна"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Истина; - - Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОсобогоТекста); - + + ЭлектроннаяПодписьСлужебный.ОформитьСписокПодписей(ЭтотОбъект, "ТаблицаПодписей"); + КонецПроцедуры &НаСервере @@ -138,18 +122,25 @@ | ЭлектронныеПодписи.Комментарий КАК Комментарий, | ЭлектронныеПодписи.ИмяФайлаПодписи КАК ИмяФайлаПодписи, | ЭлектронныеПодписи.ДатаПодписи КАК ДатаПодписи, - | ЭлектронныеПодписи.КомуВыданСертификат КАК КомуВыданСертификат + | ЭлектронныеПодписи.КомуВыданСертификат КАК КомуВыданСертификат, + | ЭлектронныеПодписи.ПодписьВерна КАК ПодписьВерна |ИЗ | &ЭлектронныеПодписи КАК ЭлектронныеПодписи |ГДЕ | ЭлектронныеПодписи.Ссылка = &СсылкаНаОбъект"; + ОбъектМетаданных = ОбъектСсылка.Метаданные(); + Запрос = Новый Запрос; Запрос.Параметры.Вставить("СсылкаНаОбъект", ОбъектСсылка); Запрос.Текст = СтрЗаменить(ТекстЗапроса, "&ЭлектронныеПодписи", - ОбъектСсылка.Метаданные().ПолноеИмя() + ".ЭлектронныеПодписи"); - + ОбъектМетаданных.ПолноеИмя() + ".ЭлектронныеПодписи"); + + Если ОбъектМетаданных.ТабличныеЧасти.ЭлектронныеПодписи.Реквизиты.Найти("ПодписьВерна") = Неопределено Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "ЭлектронныеПодписи.ПодписьВерна", "ЛОЖЬ"); + КонецЕсли; + Возврат Запрос.Выполнить().Выгрузить(); КонецФункции diff --git a/SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form b/SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form index 883fdf39a..95264bd05 100644 --- a/SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form +++ b/SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form @@ -143,6 +143,7 @@ Vertical auto + false @@ -223,6 +224,7 @@ Vertical auto + false true @@ -480,7 +482,6 @@ true true - 10 true true MultiRow diff --git a/SSL/src/CommonForms/СохранениеПечатнойФормы/Help/ru.html b/SSL/src/CommonForms/СохранениеПечатнойФормы/Help/ru.html index bb312c8f7..76a108d88 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 b965fc366..005958ed1 100644 --- a/SSL/src/CommonForms/СтруктураПодчиненности/Form.form +++ b/SSL/src/CommonForms/СтруктураПодчиненности/Form.form @@ -2,7 +2,7 @@ <key>ru</key> - <value>Структура подчиненности</value> + <value>Связанные документы</value> ГруппаОтчет @@ -49,7 +49,6 @@ Special ScrollAlways ScrollAlways - true Always Auto true @@ -498,6 +497,11 @@ DontUse Auto + + ОбъектОтбора + + true + diff --git a/SSL/src/CommonForms/СтруктураПодчиненности/Help/ru.html b/SSL/src/CommonForms/СтруктураПодчиненности/Help/ru.html index 211c0b013..9801af686 100644 --- a/SSL/src/CommonForms/СтруктураПодчиненности/Help/ru.html +++ b/SSL/src/CommonForms/СтруктураПодчиненности/Help/ru.html @@ -1,10 +1,10 @@ - +

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

              -

              Формируется командой Структура подчиненности на панели навигации документа.

              +

              Формируется командой Связанные документы на панели навигации документа.

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

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

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

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

              • С помощью двойного щелчка мышью на любом выведенном в отчет документе можно открыть данный документ для просмотра.
              • С помощью кнопки Обновить можно переформировать отчет. -
              • С помощью кнопки Вывести для текущего можно сформировать отчет Структура подчиненности для выделенного документа.
              \ 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 856c7ef1c..4882d5bfd 100644 --- a/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl +++ b/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl @@ -377,7 +377,7 @@ ВывестиТабличныйДокумент(); Иначе ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - Нстр("ru = 'Документ, для которого сформирован отчет о структуре подчиненности, стал недоступен.'")); + НСтр("ru = 'Документ, для которого сформирован отчет о структуре подчиненности, стал недоступен.'")); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonForms/СтруктураПодчиненности/СтруктураПодчиненности.mdo b/SSL/src/CommonForms/СтруктураПодчиненности/СтруктураПодчиненности.mdo index 1f7ffce0c..8484dc2d9 100644 --- a/SSL/src/CommonForms/СтруктураПодчиненности/СтруктураПодчиненности.mdo +++ b/SSL/src/CommonForms/СтруктураПодчиненности/СтруктураПодчиненности.mdo @@ -3,7 +3,7 @@ СтруктураПодчиненности ru - Структура подчиненности + Связанные документы diff --git a/SSL/src/CommonForms/УстановленныеРасширения/Form.form b/SSL/src/CommonForms/УстановленныеРасширения/Form.form index 3200d398a..49a7ed9d5 100644 --- a/SSL/src/CommonForms/УстановленныеРасширения/Form.form +++ b/SSL/src/CommonForms/УстановленныеРасширения/Form.form @@ -809,6 +809,7 @@ Vertical auto + false @@ -901,6 +902,7 @@ Page auto + false true diff --git a/SSL/src/CommonForms/УстановленныеРасширения/Help/ru.html b/SSL/src/CommonForms/УстановленныеРасширения/Help/ru.html index b15d6ad3d..9341bd3f9 100644 --- a/SSL/src/CommonForms/УстановленныеРасширения/Help/ru.html +++ b/SSL/src/CommonForms/УстановленныеРасширения/Help/ru.html @@ -1,14 +1,14 @@ - -

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

            + +

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

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

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

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

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

            Подключение расширения

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

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

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

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

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

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

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

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

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

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

          • -
            Выделите расширение, нажмите Еще - Обновить из файла на диске, укажите путь к файлу на компьютере.
            +
            Выделите расширение, воспользуйтесь командой Обновить из файла на диске контекстного меню по правой кнопке мыши, укажите путь к файлу на компьютере.
          • Следует использовать эту команду для установки новой версии расширения.
          • diff --git a/SSL/src/CommonForms/УстановленныеРасширения/Module.bsl b/SSL/src/CommonForms/УстановленныеРасширения/Module.bsl index f6cc3694d..b06ae07a9 100644 --- a/SSL/src/CommonForms/УстановленныеРасширения/Module.bsl +++ b/SSL/src/CommonForms/УстановленныеРасширения/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ТекущийКонтекст; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -42,6 +46,49 @@ #КонецОбласти +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокРасширений + +&НаКлиенте +Процедура СписокРасширенийПриАктивизацииСтроки(Элемент) + + Если Элементы.СписокРасширений.ТекущиеДанные <> Неопределено Тогда + ИдентификаторТекущейСтроки = Элементы.СписокРасширений.ТекущаяСтрока; + Иначе + ИдентификаторТекущейСтроки = Неопределено; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СписокРасширенийПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + + Отказ = Истина; + ЗагрузитьРасширение(Неопределено, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура СписокРасширенийПередУдалением(Элемент, Отказ) + + Отказ = Истина; + УдалитьРасширения(Элемент.ВыделенныеСтроки); + +КонецПроцедуры + +&НаКлиенте +Процедура СписокРасширенийПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования) + + ТекущееРасширение = Элементы.СписокРасширений.ТекущиеДанные; + Если ТекущееРасширение = Неопределено Тогда + Возврат; + КонецЕсли; + + СписокРасширенийПриОкончанииРедактированияНаСервере(ТекущееРасширение.ПолучитьИдентификатор()); + +КонецПроцедуры + +#КонецОбласти + #Область ОбработчикиКомандФормы &НаКлиенте @@ -133,49 +180,6 @@ #КонецОбласти -#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокРасширений - -&НаКлиенте -Процедура СписокРасширенийПриАктивизацииСтроки(Элемент) - - Если Элементы.СписокРасширений.ТекущиеДанные <> Неопределено Тогда - ИдентификаторТекущейСтроки = Элементы.СписокРасширений.ТекущаяСтрока; - Иначе - ИдентификаторТекущейСтроки = Неопределено; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура СписокРасширенийПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) - - Отказ = Истина; - ЗагрузитьРасширение(Неопределено, Истина); - -КонецПроцедуры - -&НаКлиенте -Процедура СписокРасширенийПередУдалением(Элемент, Отказ) - - Отказ = Истина; - УдалитьРасширения(Элемент.ВыделенныеСтроки); - -КонецПроцедуры - -&НаКлиенте -Процедура СписокРасширенийПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования) - - ТекущееРасширение = Элементы.СписокРасширений.ТекущиеДанные; - Если ТекущееРасширение = Неопределено Тогда - Возврат; - КонецЕсли; - - СписокРасширенийПриОкончанииРедактированияНаСервере(ТекущееРасширение.ПолучитьИдентификатор()); - -КонецПроцедуры - -#КонецОбласти - #Область СлужебныеПроцедурыИФункции &НаСервере @@ -292,9 +296,9 @@ Оповещение = Новый ОписаниеОповещения("УдалитьРасширениеПослеПодтверждения", ЭтотОбъект, Контекст); Если ВыделенныеСтроки.Количество() > 1 Тогда - ТекстВопроса = Нстр("ru = 'Вы уверены, что хотите удалить выделенные расширения?'", "ru"); + ТекстВопроса = НСтр("ru = 'Вы уверены, что хотите удалить выделенные расширения?'", "ru"); Иначе - ТекстВопроса = Нстр("ru = 'Вы уверены, что хотите удалить расширение?'", "ru"); + ТекстВопроса = НСтр("ru = 'Вы уверены, что хотите удалить расширение?'", "ru"); КонецЕсли; ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет); @@ -449,14 +453,27 @@ КонецПроцедуры &НаКлиенте -Процедура ЗагрузитьРасширение(Знач ИдентификаторРасширения, МножественныйВыбор = Ложь) +Процедура ЗагрузитьРасширение(ИдентификаторРасширения, МножественныйВыбор = Ложь) Контекст = Новый Структура; Контекст.Вставить("ИдентификаторРасширения", ИдентификаторРасширения); Контекст.Вставить("МножественныйВыбор", МножественныйВыбор); + Обработчик = Новый ОписаниеОповещения("ЗагрузитьРасширениеПослеПодтверждения", ЭтотОбъект, Контекст); - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами( - Новый ОписаниеОповещения("ЗагрузитьРасширениеПослеУстановкиРасширения", ЭтотОбъект, Контекст)); + ПараметрыФормы = Новый Структура("Ключ", "ПередДобавлениемРасширений"); + + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Обработчик); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьРасширениеПослеПодтверждения(Ответ, Контекст) Экспорт + Если Ответ <> "Продолжить" Тогда + Возврат; + КонецЕсли; + + Обработчик = Новый ОписаниеОповещения("ЗагрузитьРасширениеПослеУстановкиРасширения", ЭтотОбъект, Контекст); + ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Обработчик); КонецПроцедуры @@ -776,5 +793,4 @@ КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/CommonForms/УточнениеКонтактов/Help/ru.html b/SSL/src/CommonForms/УточнениеКонтактов/Help/ru.html index e6ef0c6bb..7e11849ca 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 db6dade8b..c69bfb42d 100644 --- a/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl +++ b/SSL/src/CommonForms/УточнениеКонтактов/Module.bsl @@ -739,6 +739,8 @@ КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Во время обновления контактной информации %1 произошла ошибка @@ -754,8 +756,6 @@ Продолжить; КонецПопытки; - ЗафиксироватьТранзакцию(); - КонецЦикла; КонецПроцедуры diff --git a/SSL/src/CommonForms/ФайлыВТоме/Help/ru.html b/SSL/src/CommonForms/ФайлыВТоме/Help/ru.html index 7c924750a..eb992f600 100644 --- a/SSL/src/CommonForms/ФайлыВТоме/Help/ru.html +++ b/SSL/src/CommonForms/ФайлыВТоме/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

            Список вызывается по команде Файлы в томе панели навигации Тома.

            diff --git a/SSL/src/CommonForms/ФормаВариантаОтчета/Form.form b/SSL/src/CommonForms/ФормаВариантаОтчета/Form.form index d204fbcb7..7fdca5d31 100644 --- a/SSL/src/CommonForms/ФормаВариантаОтчета/Form.form +++ b/SSL/src/CommonForms/ФормаВариантаОтчета/Form.form @@ -311,6 +311,7 @@ Vertical auto + false @@ -475,6 +476,7 @@ StdPicture.DataCompositionUserFields auto + false @@ -783,6 +785,7 @@ LeftNarrowest auto + false @@ -849,6 +852,7 @@ Vertical auto + false true @@ -901,6 +905,7 @@ Vertical auto + false @@ -1253,6 +1258,7 @@ LeftNarrowest auto + false @@ -1359,6 +1365,7 @@ Vertical auto + false @@ -1464,6 +1471,7 @@ Vertical auto + false true @@ -1516,6 +1524,7 @@ Vertical auto + false @@ -1870,6 +1879,7 @@ LeftNarrowest auto + false @@ -1976,6 +1986,7 @@ Vertical auto + false @@ -2081,6 +2092,7 @@ Vertical auto + false true @@ -2133,6 +2145,7 @@ Vertical auto + false @@ -2483,6 +2496,7 @@ LeftNarrowest auto + false @@ -2589,6 +2603,7 @@ Vertical auto + false @@ -2694,6 +2709,7 @@ Vertical auto + false true @@ -2746,6 +2762,7 @@ Vertical auto + false @@ -2956,6 +2973,7 @@ Page auto + false @@ -3062,6 +3080,7 @@ Vertical auto + false @@ -3167,6 +3186,7 @@ Vertical auto + false true @@ -3219,6 +3239,7 @@ Vertical auto + false @@ -3429,6 +3450,7 @@ Page auto + false @@ -3535,6 +3557,7 @@ Vertical auto + false @@ -3640,6 +3663,7 @@ Vertical auto + false true @@ -3692,6 +3716,7 @@ Vertical auto + false true @@ -3804,6 +3829,10 @@ Right true + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере @@ -3917,6 +3946,19 @@ true + + НастройкиОтчета + + <key>ru</key> + <value>Настройки отчета</value> + + 7 + + + true + + + ЗавершитьРедактирование @@ -3939,6 +3981,11 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <parameters> + <name>ТекущаяСтрока</name> + <valueType/> + <keyParameter>true</keyParameter> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl b/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl index 4475ce197..3e76e0b1e 100644 --- a/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl @@ -366,13 +366,21 @@ Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Изменение варианта отчета ""%1""'"), Параметры.ПредставлениеВарианта); КонецЕсли; - НастройкиОтчета = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "НастройкиОтчета"); - Если ТипЗнч(НастройкиОтчета) = Тип("Структура") И НастройкиОтчета.СхемаМодифицирована Тогда - Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(НастройкиОтчета.АдресСхемы)); + Если Параметры.Свойство("НастройкиОтчета", НастройкиОтчета) Тогда + Если НастройкиОтчета.СхемаМодифицирована Тогда + Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(НастройкиОтчета.АдресСхемы)); + КонецЕсли; КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + Если Параметры.ТекущаяСтрока <> Неопределено Тогда + ПодключитьОбработчикОжидания("УстановитьТекущуюСтроку", 0.1, Истина); + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -410,3 +418,12 @@ КонецПроцедуры #КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура УстановитьТекущуюСтроку() + Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока = Параметры.ТекущаяСтрока; +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form b/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form index b41a2cfec..5cbb65ac3 100644 --- a/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form +++ b/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form @@ -122,14 +122,6 @@ <userVisible> <common>true</common> </userVisible> - <title> - <key>ru</key> - <value> </value> - - - ru - - КомандыСоставаГруппировки_ДобавлениеУдалениеРасширеннаяПодсказка 607 @@ -204,14 +196,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - КомандыСоставаГруппировки_ПриоритетРасширеннаяПодсказка 613 @@ -229,14 +213,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - КомандыСоставаГруппировкиРасширеннаяПодсказка 605 @@ -362,14 +338,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - СоставГруппировкиГруппа1РасширеннаяПодсказка 644 @@ -670,14 +638,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - КомандыСоставаГруппировки_ДобавлениеУдаление1РасширеннаяПодсказка 648 @@ -752,14 +712,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - КомандыСоставаГруппировки_Приоритет1РасширеннаяПодсказка 654 @@ -839,6 +791,7 @@ Vertical auto + false @@ -888,14 +841,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - ОбычныеОтборыРасширеннаяПодсказка 40 @@ -1029,14 +974,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - ОтборыГруппа1РасширеннаяПодсказка 362 @@ -1386,14 +1323,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - КомандыОтборов_ДобавлениеУдалениеРасширеннаяПодсказка 325 @@ -1466,14 +1395,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - КомандыОтборов_ПриоритетРасширеннаяПодсказка 416 @@ -1551,14 +1472,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - КомандыОтборов_ГруппыРасширеннаяПодсказка 337 @@ -1819,14 +1732,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - КомандыОтборов_ДобавлениеУдаление1РасширеннаяПодсказка 404 @@ -1899,14 +1804,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - КомандыОтборов_Приоритет1РасширеннаяПодсказка 422 @@ -1984,14 +1881,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - КомандыОтборов_Группы1РасширеннаяПодсказка 410 @@ -2295,6 +2184,7 @@ Vertical auto + false @@ -2509,14 +2399,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - КомандыВыбранныхПолей_ДобавлениеУдалениеРасширеннаяПодсказка 213 @@ -2591,14 +2473,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - КомандыВыбранныхПолей_ПриоритетРасширеннаяПодсказка 219 @@ -2956,14 +2830,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - КомандыВыбранныхПолей_ДобавлениеУдаление1РасширеннаяПодсказка 398 @@ -3038,14 +2904,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - КомандыВыбранныхПолей_Приоритет1РасширеннаяПодсказка 392 @@ -4631,6 +4489,7 @@ Vertical auto + false @@ -4644,14 +4503,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - СтраницаДополнительноПодвалРасширеннаяПодсказка 52 @@ -4680,14 +4531,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - СтраницаДополнительноГруппировкиРасширеннаяПодсказка 50 @@ -4716,14 +4559,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - СтраницаДополнительноШапкаРасширеннаяПодсказка 48 @@ -4991,14 +4826,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - КомандыОформления_ДобавлениеУдалениеРасширеннаяПодсказка 827 @@ -5071,14 +4898,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - КомандыОформления_ПриоритетРасширеннаяПодсказка 833 @@ -5399,6 +5218,7 @@ Vertical auto + false @@ -5514,14 +5334,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - СтруктураВариантаГруппа2РасширеннаяПодсказка 449 @@ -5609,7 +5421,7 @@ None ru - Картинка показывается если у элемента настроены отборы. + Картинка отображается когда у элемента настроены отборы. СтруктураВариантаСодержитОтборыРасширеннаяПодсказка @@ -5662,7 +5474,7 @@ None ru - Картинка показывается если у элемента настроены поля и сортировки. + Картинка отображается когда у элемента настроены поля и сортировки. СтруктураВариантаСодержитПоляИлиСортировкиРасширеннаяПодсказка @@ -5715,7 +5527,7 @@ None ru - Картинка показывается если у элемента настроено оформление. + Картинка отображается когда у элемента настроено оформление. СтруктураВариантаСодержитУсловноеОформлениеРасширеннаяПодсказка @@ -5780,13 +5592,10 @@ Form.Item.СтруктураВарианта.StandardCommand.Add Normal - Picture + PictureAndText true true UserCmds - - CommonPicture.ДобавитьВложенный - Auto @@ -5902,14 +5711,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - КомандыСтруктурыВарианта_ДобавлениеРасширеннаяПодсказка 469 @@ -6064,14 +5865,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - КомандыСтруктурыВарианта_ДвижениеПоИерархииРасширеннаяПодсказка 457 @@ -6144,14 +5937,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - КомандыСтруктурыВарианта_ДвижениеВнутриРодителяРасширеннаяПодсказка 463 @@ -6244,6 +6029,33 @@ + + СтруктураВариантаСтруктураВарианта_СохранитьВФайл + 1084 + true + true + + true + + + СтруктураВариантаСтруктураВарианта_СохранитьВФайлРасширеннаяПодсказка + 1085 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_СохранитьВФайл + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + Left @@ -6385,9 +6197,6 @@ true true UserCmds - - CommonPicture.ДобавитьВложенный - Auto @@ -6503,14 +6312,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - КомандыСтруктурыВарианта_Добавление1РасширеннаяПодсказка 742 @@ -6665,14 +6466,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - КомандыСтруктурыВарианта_ДвижениеПоИерархии1РасширеннаяПодсказка 756 @@ -6745,14 +6538,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - КомандыСтруктурыВарианта_ДвижениеВнутриРодителя1РасширеннаяПодсказка 762 @@ -6912,6 +6697,7 @@ Vertical auto + false @@ -7002,10 +6788,6 @@ ru Страница нет пользовательских настроек - - ru - - true СтраницаНетПользовательскихНастроекРасширеннаяПодсказка @@ -7020,6 +6802,7 @@ Page auto + false @@ -7034,10 +6817,6 @@ ru Не отсортированные - - ru - - true НеОтсортированноеРасширеннаяПодсказка @@ -7053,6 +6832,7 @@ Vertical auto + false true @@ -7438,14 +7218,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - true КомандыФормы_ПраваяРасширеннаяПодсказка @@ -7467,14 +7239,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - true КомандыФормыРасширеннаяПодсказка @@ -7520,7 +7284,6 @@ LockOwner true - true Vertical true true @@ -10011,7 +9774,7 @@ 24 ru - Переместить поле ниже или правее + Понизить приоритет условного оформления true @@ -10021,7 +9784,7 @@ - ВыбранныеПоля_ПереместитьВниз + Оформление_ПереместитьВниз DontUse @@ -10036,7 +9799,7 @@ 25 ru - Переместить поле выше или левее + Поднять приоритет условного оформления true @@ -10046,7 +9809,7 @@ - ВыбранныеПоля_ПереместитьВверх + Оформление_ПереместитьВверх DontUse @@ -10382,18 +10145,43 @@ DontUse Auto + + СтруктураВарианта_СохранитьВФайл + + <key>ru</key> + <value>Сохранить в файл</value> + + 39 + + ru + Структура варианта сохранить в файл + + + true + + + StdPicture.SaveFile + + + + СтруктураВарианта_СохранитьВФайл + + + DontUse + Auto + - OnLoadUserSettingsAtServer - ПриЗагрузкеПользовательскихНастроекНаСервере + BeforeLoadVariantAtServer + ПередЗагрузкойВариантаНаСервере - OnLoadVariantAtServer - ПриЗагрузкеВариантаНаСервере + BeforeLoadUserSettingsAtServer + ПередЗагрузкойПользовательскихНастроекНаСервере OnUpdateUserSettingSetAtServer diff --git a/SSL/src/CommonForms/ФормаНастроекОтчета/Help/ru.html b/SSL/src/CommonForms/ФормаНастроекОтчета/Help/ru.html index f452976f3..fe0ad4ba0 100644 --- a/SSL/src/CommonForms/ФормаНастроекОтчета/Help/ru.html +++ b/SSL/src/CommonForms/ФормаНастроекОтчета/Help/ru.html @@ -1,4 +1,4 @@ - +

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

            Открывается из формы отчета по кнопке Настройки.

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

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

            Структура

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

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

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

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

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

          Получение данных отчета

          • Укажите нужные параметры, нажмите кнопку Закрыть и сформировать. Последние настройки будут сохранены автоматически. Если были применены ошибочные настройки, их можно не только изменить, но и сбросить с помощью соответствующих команд формы отчета.
          \ No newline at end of file diff --git a/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl b/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl index 0ae265632..4baab2172 100644 --- a/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ПеременныеКлиента; +#КонецОбласти + //////////////////////////////////////////////////////////////////////////////// // ФОРМА @@ -31,13 +35,16 @@ КонецЕсли; Параметры.Свойство("ИдентификаторТекущегоУзлаКД", ИдентификаторТекущегоУзлаКД); КлючСохраненияПоложенияОкна = НастройкиОтчета.ПолноеИмя; + Если ЗначениеЗаполнено(КлючТекущегоВарианта) Тогда + КлючСохраненияПоложенияОкна = КлючСохраненияПоложенияОкна + "." + КлючТекущегоВарианта; + КонецЕсли; Если ИдентификаторТекущегоУзлаКД <> Неопределено Тогда - ПолныйПутьТекущегоУзлаКД = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ПолныйПутьТекущегоУзлаКД"); + ПолныйПуть = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ПолныйПутьТекущегоУзлаКД"); НастройкиКД = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "Вариант"); Если НастройкиКД = Неопределено Тогда НастройкиКД = Отчет.КомпоновщикНастроек.Настройки; КонецЕсли; - КорневойУзел = ОтчетыКлиентСервер.НайтиЭлементПоПолномуПути(НастройкиКД, ПолныйПутьТекущегоУзлаКД); + КорневойУзел = ОтчетыКлиентСервер.НайтиЭлементПоПолномуПути(НастройкиКД, ПолныйПуть); Если КорневойУзел <> Неопределено Тогда ИдентификаторТекущегоУзлаКД = НастройкиКД.ПолучитьИдентификаторПоОбъекту(КорневойУзел); КонецЕсли; @@ -56,7 +63,6 @@ КонецЕсли; Заголовок = НСтр("ru = 'Настройки отчета'") + " """ + ВариантНаименование + """"; КонецЕсли; - КлючНазначенияИспользования = КлючСохраненияПоложенияОкна; Элементы.РасширенныйРежим.Видимость = НастройкиОтчета.РазрешеноМенятьВарианты; @@ -93,25 +99,45 @@ КонецПроцедуры &НаСервере -Процедура ПриЗагрузкеВариантаНаСервере(Настройки) +Процедура ПередЗагрузкойВариантаНаСервере(НовыеНастройкиКД) Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; Если ТипЗнч(ФормаПараметры.Отбор) = Тип("Структура") Тогда - ОтчетыСервер.УстановитьФиксированныеОтборы(ФормаПараметры.Отбор, Отчет.КомпоновщикНастроек, НастройкиОтчета); + ОтчетыСервер.УстановитьФиксированныеОтборы(ФормаПараметры.Отбор, НовыеНастройкиКД, НастройкиОтчета); КонецЕсли; НеобходимоОбновитьНастройки = Истина; + + // Подготовка к вызову события переинициализации. + Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда + Попытка + НовыеНастройкиXML = ОбщегоНазначения.ЗначениеВСтрокуXML(НовыеНастройкиКД); + Исключение + НовыеНастройкиXML = Неопределено; + КонецПопытки; + НастройкиОтчета.Вставить("НовыеНастройкиXML", НовыеНастройкиXML); + КонецЕсли; КонецПроцедуры &НаСервере -Процедура ПриЗагрузкеПользовательскихНастроекНаСервере(Настройки) +Процедура ПередЗагрузкойПользовательскихНастроекНаСервере(НовыеПользовательскиеНастройкиКД) Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; НеобходимоОбновитьНастройки = Истина; + + // Подготовка к вызову события переинициализации. + Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда + Попытка + НовыеПользовательскиеНастройкиXML = ОбщегоНазначения.ЗначениеВСтрокуXML(НовыеПользовательскиеНастройкиКД); + Исключение + НовыеПользовательскиеНастройкиXML = Неопределено; + КонецПопытки; + НастройкиОтчета.Вставить("НовыеПользовательскиеНастройкиXML", НовыеПользовательскиеНастройкиXML); + КонецЕсли; КонецПроцедуры &НаСервере @@ -175,7 +201,7 @@ КонецПроцедуры &НаКлиенте -Процедура ПодсказкаНетПользовательскихНастроекОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) +Процедура ПодсказкаНетПользовательскихНастроекОбработкаНавигационнойСсылки(Элемент, Адрес, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; РасширенныйРежим = Истина; РасширенныйРежимПриИзменении(Неопределено); @@ -197,30 +223,9 @@ КонецПроцедуры &НаКлиенте -Процедура ПодсказкаЕстьВложенныеОтчетыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) +Процедура ПодсказкаЕстьВложенныеОтчетыОбработкаНавигационнойСсылки(Элемент, Адрес, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - - ПараметрыФормы = Новый Структура; - ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыФормы, ФормаПараметры, Истина); - ПараметрыФормы.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки); - ПараметрыФормы.Вставить("КлючВарианта", Строка(КлючТекущегоВарианта)); - ПараметрыФормы.Вставить("ПользовательскиеНастройки", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); - ПараметрыФормы.Вставить("ПредставлениеВарианта", ВариантНаименование); - ПараметрыФормы.Вставить("ПредставлениеПользовательскихНастроек", ""); - - Обработчик = Новый ОписаниеОповещения("ФормаВариантаЗавершение", ЭтотОбъект); - - Режим = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; - - ОткрытьФорму(НастройкиОтчета.ПолноеИмя + ".ФормаВарианта", ПараметрыФормы, ЭтотОбъект, , , , Обработчик, Режим); -КонецПроцедуры - -&НаКлиенте -Процедура ФормаВариантаЗавершение(Результат, ПараметрыВыполнения) Экспорт - Если ТипЗнч(Результат) <> Тип("Структура") Тогда - Возврат; - КонецЕсли; - БыстрыеНастройкиЗаполнитьКлиент(Результат); + ПерейтиКНастройкеВложенныхОтчетов(); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -328,120 +333,16 @@ //////////////////////////////////////////////////////////////////////////////// // Подключаемые - Стандартный период. -&НаКлиенте -Процедура Подключаемый_СтандартныйПериод_Вид_ПриИзменении(Элемент) - ВидПериодаИмя = Элемент.Имя; - ИдентификаторЭлемента = Прав(ВидПериодаИмя, 32); - СвойстваНастройкиТип = Лев(ВидПериодаИмя, СтрНайти(ВидПериодаИмя, "_Вид_")-1); - - СтраницыИмя = СвойстваНастройкиТип + "_Страницы_" + ИдентификаторЭлемента; - ЗначениеИмя = СвойстваНастройкиТип + "_Значение_" + ИдентификаторЭлемента; - ПредставлениеИмя = СвойстваНастройкиТип + "_Представление_" + ИдентификаторЭлемента; - СтраницаПроизвольныйИмя = СвойстваНастройкиТип + "_СтраницаПроизвольный_" + ИдентификаторЭлемента; - СтраницаСтандартныйИмя = СвойстваНастройкиТип + "_СтраницаСтандартный_" + ИдентификаторЭлемента; - - Значение = ЭтотОбъект[ЗначениеИмя]; - - ВидПериода = ЭтотОбъект[ВидПериодаИмя]; - - Если ЗначениеЗаполнено(ВидПериода) Тогда - ВыбранПроизвольный = ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.ПроизвольныйПериод"); - Иначе - ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.ПроизвольныйПериод"); - ЭтотОбъект[ВидПериодаИмя] = ВидПериода; - ВыбранПроизвольный = Истина; - КонецЕсли; - - Если ВыбранПроизвольный Тогда - - // Переключение страницы. - Элементы[СтраницыИмя].ТекущаяСтраница = Элементы[СтраницаПроизвольныйИмя]; - - Значение.Вариант = ВариантСтандартногоПериода.ПроизвольныйПериод; - - Иначе - - // Переключение страницы. - Элементы[СтраницыИмя].ТекущаяСтраница = Элементы[СтраницаСтандартныйИмя]; - - // Приведение значения периода в соответствие с выбранным видом. - ДатаСеанса = НачалоДня(ОбщегоНазначенияКлиент.ДатаСеанса()); - НачалоПериода = НачалоДня(Значение.ДатаНачала); - КонецПериода = КонецДня(Значение.ДатаОкончания); - Если Не ЗначениеЗаполнено(НачалоПериода) - Или (ДатаСеанса >= НачалоПериода И ДатаСеанса <= КонецПериода) Тогда - НачалоПериода = ДатаСеанса; - КонецЕсли; - НачалоПериода = ОтчетыКлиентСервер.НачалоПериодаОтчета(ВидПериода, НачалоПериода); - КонецПериода = ОтчетыКлиентСервер.КонецПериодаОтчета(ВидПериода, НачалоПериода); - - Значение.ДатаНачала = НачалоПериода; - Значение.ДатаОкончания = КонецПериода; - - КонецЕсли; - - Представление = ОтчетыКлиентСервер.ПредставлениеСтандартногоПериода(Значение, ВидПериода); - ЭтотОбъект[ПредставлениеИмя] = Представление; - ЭтотОбъект[ЗначениеИмя] = Значение; - - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); - Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - ПользовательскаяНастройкаКД.Значение = Значение; - Иначе - ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; - КонецЕсли; - - ПользовательскаяНастройкаКД.Использование = Истина; - - ПользовательскиеНастройкиМодифицированы = Истина; -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_СтандартныйПериод_Значение_НачалоВыбора(Элемент, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - - // Формирование сведений по элементу. - ПредставлениеИмя = Элемент.Имя; - ИдентификаторЭлемента = Прав(ПредставлениеИмя, 32); - СвойстваНастройкиТип = Лев(ПредставлениеИмя, СтрНайти(ПредставлениеИмя, "_Представление_")-1); - - ЗначениеИмя = СвойстваНастройкиТип + "_Значение_" + ИдентификаторЭлемента; - ВидПериодаИмя = СвойстваНастройкиТип + "_Вид_" + ИдентификаторЭлемента; - - Значение = ЭтотОбъект[ЗначениеИмя]; - ВидПериода = ЭтотОбъект[ВидПериодаИмя]; - - НачалоПериода = Значение.ДатаНачала; - Если НачалоПериода = '00010101' Тогда - НачалоПериода = ОтчетыКлиентСервер.НачалоПериодаОтчета(ВидПериода, ОбщегоНазначенияКлиент.ДатаСеанса()); - КонецЕсли; - - // Параметры для чтения из обработчиков: - ПараметрыВыбора = Новый Структура; - // Для выбора значения: - ПараметрыВыбора.Вставить("Значение", Значение); - ПараметрыВыбора.Вставить("Элемент", Элемент); - // Для загрузки значения: - ПараметрыВыбора.Вставить("ИдентификаторЭлемента", ИдентификаторЭлемента); - ПараметрыВыбора.Вставить("ПредставлениеИмя", ПредставлениеИмя); - ПараметрыВыбора.Вставить("ЗначениеИмя", ЗначениеИмя); - ПараметрыВыбора.Вставить("ВидПериода", ВидПериода); - ПараметрыВыбора.Вставить("ЭтоПараметр", СвойстваНастройкиТип = "ЗначениеПараметраНастроек"); - - ВыборПериодаИзВыпадающегоСписка(-1, ПараметрыВыбора); -КонецПроцедуры - &НаКлиенте Процедура Подключаемый_СтандартныйПериод_НачалоПериода_ПриИзменении(Элемент) // Формирование сведений по элементу. ПериодНачалоИмя = Элемент.Имя; - ИдентификаторЭлемента = Прав(ПериодНачалоИмя, 32); - СвойстваНастройкиТип = Лев(ПериодНачалоИмя, СтрНайти(ПериодНачалоИмя, "_Начало_")-1); - ЗначениеИмя = СвойстваНастройкиТип + "_Значение_" + ИдентификаторЭлемента; + ЗначениеИмя = СтрЗаменить(ПериодНачалоИмя, "_Начало_", "_Значение_"); + ИдентификаторЭлемента = Прав(ПериодНачалоИмя, 32); Значение = ЭтотОбъект[ЗначениеИмя]; - - Если Значение.ДатаНачала <> '00010101' Тогда + Заполнено = ЗначениеЗаполнено(Значение.ДатаНачала); + Если Заполнено Тогда Значение.ДатаНачала = НачалоДня(Значение.ДатаНачала); КонецЕсли; @@ -452,26 +353,21 @@ Иначе ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; КонецЕсли; - - Если Значение.ДатаНачала <> '00010101' Тогда + Если Заполнено Тогда ПользовательскаяНастройкаКД.Использование = Истина; КонецЕсли; - - ПользовательскиеНастройкиМодифицированы = Истина; КонецПроцедуры &НаКлиенте Процедура Подключаемый_СтандартныйПериод_КонецПериода_ПриИзменении(Элемент) // Формирование сведений по элементу. ПериодОкончаниеИмя = Элемент.Имя; - ИдентификаторЭлемента = Прав(ПериодОкончаниеИмя, 32); - СвойстваНастройкиТип = Лев(ПериодОкончаниеИмя, СтрНайти(ПериодОкончаниеИмя, "_Окончание_")-1); - - ЗначениеИмя = СвойстваНастройкиТип + "_Значение_" + ИдентификаторЭлемента; + ЗначениеИмя = СтрЗаменить(ПериодОкончаниеИмя, "_Окончание_", "_Значение_"); + ИдентификаторЭлемента = Прав(ПериодОкончаниеИмя, 32); Значение = ЭтотОбъект[ЗначениеИмя]; - - Если Значение.ДатаОкончания <> '00010101' Тогда + Заполнено = ЗначениеЗаполнено(Значение.ДатаОкончания); + Если Заполнено Тогда Значение.ДатаОкончания = КонецДня(Значение.ДатаОкончания); КонецЕсли; @@ -482,17 +378,17 @@ Иначе ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; КонецЕсли; - - Если Значение.ДатаОкончания <> '00010101' Тогда + Если Заполнено Тогда ПользовательскаяНастройкаКД.Использование = Истина; КонецЕсли; - - ПользовательскиеНастройкиМодифицированы = Истина; КонецПроцедуры &НаКлиенте -Процедура Подключаемый_СтандартныйПериод_Значение_Очистка(Элемент, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; +Процедура Подключаемый_ВыбратьПериод(Команда) + КнопкаВыбораИмя = Команда.Имя; + ЗначениеИмя = СтрЗаменить(КнопкаВыбораИмя, "_КнопкаВыбора_", "_Значение_"); + ИдентификаторЭлемента = Прав(КнопкаВыбораИмя, 32); + ОтчетыКлиент.ВыбратьПериод(ЭтотОбъект, ЗначениеИмя, ИдентификаторЭлемента); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -537,8 +433,8 @@ КонецПроцедуры &НаКлиенте -Процедура Подключаемый_СписокСПодбором_Значение_АвтоПодбор(Элемент, Текст, ДанныеВыбора, Параметры, Ожидание, СтандартнаяОбработка) - Если Параметры = Неопределено Тогда +Процедура Подключаемый_СписокСПодбором_Значение_АвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПоиска, Ожидание, СтандартнаяОбработка) + Если ПараметрыПоиска = Неопределено Тогда Возврат; КонецЕсли; @@ -563,7 +459,7 @@ Если Связь.ТипСвязи = "ПараметровВыбора" Тогда МассивКлючей = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Связь.ПодчиненныйИмяПараметра, ".", Истина, Истина); ВГраница = МассивКлючей.ВГраница(); - Контекст = Параметры; + Контекст = ПараметрыПоиска; Для Индекс = 0 По ВГраница Цикл Ключ = МассивКлючей[Индекс]; Если Индекс = ВГраница Тогда @@ -913,18 +809,16 @@ ПользовательскиеНастройкиМодифицированы = Истина; Если Дополнение.Всего > 0 Тогда - Результат = Новый Структура; Если Дополнение.Всего = 1 Тогда ЗаголовокОповещения = НСтр("ru = 'Элемент добавлен в список'"); Иначе ЗаголовокОповещения = НСтр("ru = 'Элементы добавлены в список'"); КонецЕсли; - СтандартныеПодсистемыКлиентСервер.ВывестиОповещение( - Результат, + ПоказатьОповещениеПользователя( ЗаголовокОповещения, + , Строка(Выбранные), БиблиотекаКартинок.ВыполнитьЗадачу); - СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); КонецЕсли; КонецПроцедуры @@ -1067,6 +961,10 @@ &НаКлиенте Процедура СортировкаПередУдалением(Элемент, Отказ) + Если РасширенныйРежим = 0 Тогда + Отказ = Истина; + Возврат; + КонецЕсли; ТаблицыПолейПередУдалением(Элемент.Имя, Отказ); КонецПроцедуры @@ -1156,7 +1054,7 @@ Если Не ЗарегистрироватьНачалоПеретаскивания("ВыбранныеПоля", ИсточникПеретаскивания) Тогда Возврат; КонецЕсли; - ПеретаскиваниеВыбранныхПолейВСортировки(ИсточникПеретаскивания, Элементы.Сортировка.ТекущаяСтрока); + ПеретаскиваниеВыбранныхПолейВСортировки(ИсточникПеретаскивания, Неопределено); КонецПроцедуры &НаКлиенте @@ -1172,6 +1070,7 @@ Процедура ВыбранныеПоля_Сортировка_ВлевоВсе(Команда) КорневаяСтрока = КорневаяСтрокаПоУмолчанию("Сортировка"); ТаблицыПолейУдалить("Сортировка", КорневаяСтрока.ПолучитьЭлементы(), Истина); + УстановитьМодифицированность(); КонецПроцедуры #КонецОбласти @@ -1231,6 +1130,10 @@ &НаКлиенте Процедура ВыбранныеПоляПередУдалением(Элемент, Отказ) + Если РасширенныйРежим = 0 Тогда + Отказ = Истина; + Возврат; + КонецЕсли; ТаблицыПолейПередУдалением(Элемент.Имя, Отказ); КонецПроцедуры @@ -1443,15 +1346,6 @@ &НаКлиенте Процедура ОтборыПередУдалением(Элемент, Отказ) - СтрокаТаблицы = Элемент.ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - Если СтрокаТаблицы.ЭтоРаздел - Или СтрокаТаблицы.ЭтоПараметр Тогда - Отказ = Истина; - Возврат; - КонецЕсли; ТаблицыПолейПередУдалением(Элемент.Имя, Отказ); КонецПроцедуры @@ -1670,8 +1564,10 @@ Или ИмяКолонки = "СтруктураВариантаСодержитОтборы" Или ИмяКолонки = "СтруктураВариантаСодержитПоляИлиСортировки" Или ИмяКолонки = "СтруктураВариантаСодержитУсловноеОформление" Тогда + Если СтрокаТаблицы.Тип = "Таблица" Или СтрокаТаблицы.Тип = "НастройкиВложенногоОбъекта" Тогда + ПерейтиКНастройкеВложенныхОтчетов(СтрокаТаблицы.ИдентификаторКД); Возврат; КонецЕсли; @@ -1805,7 +1701,7 @@ // Перемещение текущей группировки в новую. Для Каждого ПеремещаемаяСтрока Из СтрокиПеремещаемыеВНовуюГруппировку Цикл - Результат = ТаблицыПолейПереместить("СтруктураВарианта", ПеремещаемаяСтрока, СтрокаТаблицы, Неопределено, Ложь); + Результат = ТаблицыПолейПереместить("СтруктураВарианта", ПеремещаемаяСтрока, СтрокаТаблицы); КонецЦикла; // Бантики. @@ -2012,10 +1908,10 @@ СтрокаТаблицы = СтруктураВарианта.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); НовыйРодитель = СтруктураВарианта.НайтиПоИдентификатору(ИдентификаторЦели); - Результат = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицы, НовыйРодитель, Неопределено, Ложь); + Результат = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицы, НовыйРодитель); Элементы.СтруктураВарианта.Развернуть(НовыйРодитель.ПолучитьИдентификатор(), Истина); - Элементы.СтруктураВарианта.ТекущаяСтрока = Результат.СтрокаДерева.ПолучитьИдентификатор(); + Элементы.СтруктураВарианта.ТекущаяСтрока = Результат.СтрокаТаблицы.ПолучитьИдентификатор(); ПользовательскиеНастройкиМодифицированы = Истина; Если РасширенныйРежим = 1 Тогда @@ -2076,17 +1972,11 @@ &НаКлиенте Процедура СтруктураВариантаПередУдалением(Элемент, Отказ) - Отказ = Истина; Если РасширенныйРежим = 0 Или Не Элементы.СтруктураВарианта_Удалить.Доступность Тогда + Отказ = Истина; Возврат; КонецЕсли; - - Сценарий = Новый Структура; - Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, УдалитьСтроки, ОбновитьФорму"); - Сценарий.Вставить("Действие", "Удалить"); - Сценарий.Вставить("ТаблицаИмя", "СтруктураВарианта"); - - ЗапуститьСценарий(Сценарий); + ТаблицыПолейПередУдалением(Элемент.Имя, Отказ); КонецПроцедуры &НаКлиенте @@ -2167,19 +2057,19 @@ КонецЦикла; // 1. Переместить нижнюю строку на уровень с верхней. - Результат1 = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицыВверх, СтрокаТаблицыВниз.ПолучитьРодителя(), СтрокаТаблицыВниз, Ложь); - СтрокаТаблицыВверх = Результат1.СтрокаДерева; + Результат1 = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицыВверх, СтрокаТаблицыВниз.ПолучитьРодителя(), СтрокаТаблицыВниз); + СтрокаТаблицыВверх = Результат1.СтрокаТаблицы; // 2. Запомнить какие строки нужно переместить. СтрокиВверх = СтрокаТаблицыВверх.ПолучитьЭлементы(); // 3. Обмен строками. Для Каждого СтрокаТаблицы Из СтрокиВверх Цикл - Результат2 = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицы, СтрокаТаблицыВниз, Неопределено, Ложь); + Результат2 = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицы, СтрокаТаблицыВниз); КонецЦикла; Для Каждого СтрокаТаблицыИдентификатор Из МассивИдентификаторовСтрокВниз Цикл СтрокаТаблицы = СтруктураВарианта.НайтиПоИдентификатору(СтрокаТаблицыИдентификатор); - Результат3 = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицы, СтрокаТаблицыВверх, Неопределено, Ложь); + Результат3 = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицы, СтрокаТаблицыВверх); КонецЦикла; // 4. Переместить верхнюю строку в нижнюю. @@ -2189,8 +2079,8 @@ Иначе ПередЧемВставить = СтрокиВверх[Индекс]; КонецЕсли; - Результат4 = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицыВниз, СтрокаТаблицыВверх, ПередЧемВставить, Ложь); - СтрокаТаблицыВниз = Результат4.СтрокаДерева; + Результат4 = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицыВниз, СтрокаТаблицыВверх, ПередЧемВставить); + СтрокаТаблицыВниз = Результат4.СтрокаТаблицы; // Бантики. Если ПараметрыВыполнения.Режим = "ВнизИВправо" Тогда @@ -2208,6 +2098,19 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура СтруктураВарианта_СохранитьВФайл(Команда) + Адрес = АдресНастроекВСтрокеXML(); + ПолучитьФайл(Адрес, НСтр("ru = 'Настройки.xml'"), Истина); +КонецПроцедуры + +&НаСервере +Функция АдресНастроекВСтрокеXML() + Возврат ПоместитьВоВременноеХранилище( + ОбщегоНазначения.ЗначениеВСтрокуXML(Отчет.КомпоновщикНастроек.Настройки), + УникальныйИдентификатор); +КонецФункции + #КонецОбласти //////////////////////////////////////////////////////////////////////////////// @@ -2366,6 +2269,28 @@ ТаблицыПолейПередУдалением(Элемент.Имя, Отказ); КонецПроцедуры +&НаКлиенте +Процедура Оформление_ПереместитьВверх(Команда) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, СдвинутьСтроки"); + Сценарий.Вставить("Действие", "Переместить"); + Сценарий.Вставить("ТаблицаИмя", "Оформление"); + Сценарий.Вставить("Направление", -1); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + +&НаКлиенте +Процедура Оформление_ПереместитьВниз(Команда) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, СдвинутьСтроки"); + Сценарий.Вставить("Действие", "Переместить"); + Сценарий.Вставить("ТаблицаИмя", "Оформление"); + Сценарий.Вставить("Направление", 1); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + #КонецОбласти //////////////////////////////////////////////////////////////////////////////// @@ -2496,133 +2421,6 @@ Возврат РезультатВыбора; КонецФункции -&НаКлиенте -Процедура ВыборПериодаИзВыпадающегоСписка(Результат, ПараметрыВыбора) Экспорт - Если Результат = Неопределено Тогда - Возврат; // Отмена выбора. - КонецЕсли; - - Если Результат = -1 Тогда // Начало выбора. - // Чтение параметров для формирования списка из сохраненного значения периода. - ПараметрыВыбора.Вставить("НачалоПериода", ПараметрыВыбора.Значение.ДатаНачала); - ПараметрыВыбора.Вставить("Вариант", ПараметрыВыбора.Значение.Вариант); - ИндексНачальногоЗначения = Неопределено; - ИначеЕсли ТипЗнч(Результат.Значение) = Тип("Структура") Тогда - // Чтение параметров для формирования списка из выбранного значения. - ПараметрыВыбора.Вставить("НачалоПериода", Результат.Значение.НачалоПериода); - ПараметрыВыбора.Вставить("Вариант", Результат.Значение.Вариант); - ИндексНачальногоЗначения = Результат.Значение.ИндексНачальногоЗначения; - Иначе - // Загрузка результата выбора. - ЗагрузитьРезультатВыбораПериодаИзВыпадающегоСписка(Результат, ПараметрыВыбора); - Возврат; - КонецЕсли; - - // Формирование списка выбора. - Если ПараметрыВыбора.Вариант = Неопределено Или ПараметрыВыбора.Вариант = ВариантСтандартногоПериода.ПроизвольныйПериод Тогда - - СписокПериодов = ОтчетыКлиентСервер.СписокФиксированныхПериодов(ПараметрыВыбора.НачалоПериода, ПараметрыВыбора.ВидПериода); - - Если ИндексНачальногоЗначения = Неопределено Тогда - ИндексНачальногоЗначения = СписокПериодов.НайтиПоЗначению(ПараметрыВыбора.НачалоПериода); - КонецЕсли; - - ОписаниеНавигационногоЭлемента = Новый Структура; - ОписаниеНавигационногоЭлемента.Вставить("НачалоПериода", СписокПериодов[0].Значение); - ОписаниеНавигационногоЭлемента.Вставить("Вариант", Неопределено); - ОписаниеНавигационногоЭлемента.Вставить("ИндексНачальногоЗначения", 0); - СписокПериодов[0].Значение = ОписаниеНавигационногоЭлемента; - - ОписаниеНавигационногоЭлемента = Новый Структура; - ОписаниеНавигационногоЭлемента.Вставить("НачалоПериода", СписокПериодов[8].Значение); - ОписаниеНавигационногоЭлемента.Вставить("Вариант", Неопределено); - ОписаниеНавигационногоЭлемента.Вставить("ИндексНачальногоЗначения", 8); - СписокПериодов[8].Значение = ОписаниеНавигационногоЭлемента; - - Если Не ПараметрыВыбора.Свойство("ВариантСтандартногоПериодаПоВиду") Тогда - ПараметрыВыбора.Вставить("ВариантСтандартногоПериодаПоВиду", ОтчетыКлиентСервер.ПривестиВидПериодаКСтандартному(ПараметрыВыбора.ВидПериода)); - КонецЕсли; - - ОписаниеНавигационногоЭлемента = Новый Структура; - ОписаниеНавигационногоЭлемента.Вставить("НачалоПериода", ПараметрыВыбора.НачалоПериода); - ОписаниеНавигационногоЭлемента.Вставить("Вариант", ПараметрыВыбора.ВариантСтандартногоПериодаПоВиду); - ОписаниеНавигационногоЭлемента.Вставить("ИндексНачальногоЗначения", Неопределено); - СписокПериодов.Добавить(ОписаниеНавигационногоЭлемента, НСтр("ru = 'Относительный...'")); - - Иначе - - СписокПериодов = ОтчетыКлиентСервер.СписокВычисляемыхПериодов(ПараметрыВыбора.ВидПериода); - - Если ИндексНачальногоЗначения = Неопределено Тогда - ИндексНачальногоЗначения = СписокПериодов.НайтиПоЗначению(ПараметрыВыбора.Вариант); - КонецЕсли; - - ОписаниеНавигационногоЭлемента = Новый Структура; - ОписаниеНавигационногоЭлемента.Вставить("НачалоПериода", ПараметрыВыбора.НачалоПериода); - ОписаниеНавигационногоЭлемента.Вставить("Вариант", Неопределено); - ОписаниеНавигационногоЭлемента.Вставить("ИндексНачальногоЗначения", Неопределено); - СписокПериодов.Добавить(ОписаниеНавигационногоЭлемента, НСтр("ru = 'Фиксированный...'")); - - КонецЕсли; - - Если ИндексНачальногоЗначения = Неопределено Тогда - ИндексНачальногоЗначения = СписокПериодов.Количество() - 1; - КонецЕсли; - - ПеременныеКлиента.Вставить("ВыборПериодаИзВыпадающегоСписка", Новый Структура); - ПеременныеКлиента.ВыборПериодаИзВыпадающегоСписка.Вставить("ПараметрыВыбора", ПараметрыВыбора); - ПеременныеКлиента.ВыборПериодаИзВыпадающегоСписка.Вставить("СписокПериодов", СписокПериодов); - ПеременныеКлиента.ВыборПериодаИзВыпадающегоСписка.Вставить("ИндексНачальногоЗначения", ИндексНачальногоЗначения); - Если Результат = -1 Тогда - НачатьВыборПериодаИзВыпадающегоСписка(); - Иначе - ПодключитьОбработчикОжидания("НачатьВыборПериодаИзВыпадающегоСписка", 0.1, Истина); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура НачатьВыборПериодаИзВыпадающегоСписка() - Если ПеременныеКлиента.Свойство("ВыборПериодаИзВыпадающегоСписка") Тогда - Контекст = ПеременныеКлиента.ВыборПериодаИзВыпадающегоСписка; - ПеременныеКлиента.Удалить("ВыборПериодаИзВыпадающегоСписка"); - Обработчик = Новый ОписаниеОповещения("ВыборПериодаИзВыпадающегоСписка", ЭтотОбъект, Контекст.ПараметрыВыбора); - ПоказатьВыборИзСписка(Обработчик, Контекст.СписокПериодов, Контекст.ПараметрыВыбора.Элемент, Контекст.ИндексНачальногоЗначения); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ЗагрузитьРезультатВыбораПериодаИзВыпадающегоСписка(Результат, ПараметрыВыбора) - Значение = ПараметрыВыбора.Значение; - - // Запись результата выбора в данные формы и пользовательские настройки КД. - Если ТипЗнч(Результат.Значение) = Тип("ВариантСтандартногоПериода") Тогда - ЭтотОбъект[ПараметрыВыбора.ПредставлениеИмя] = ?(ПустаяСтрока(Результат.Представление), Строка(Результат.Значение), Результат.Представление); - Значение.Вариант = Результат.Значение; - Иначе - НачалоПериода = ОтчетыКлиентСервер.НачалоПериодаОтчета(ПараметрыВыбора.ВидПериода, Результат.Значение); - КонецПериода = ОтчетыКлиентСервер.КонецПериодаОтчета(ПараметрыВыбора.ВидПериода, Результат.Значение); - - ЭтотОбъект[ПараметрыВыбора.ПредставлениеИмя] = Результат.Представление; - - Значение.Вариант = ВариантСтандартногоПериода.ПроизвольныйПериод; - Значение.ДатаНачала = НачалоПериода; - Значение.ДатаОкончания = КонецПериода; - КонецЕсли; - - ЭтотОбъект[ПараметрыВыбора.ЗначениеИмя] = Значение; - - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ПараметрыВыбора.ИдентификаторЭлемента); - Если ПараметрыВыбора.ЭтоПараметр Тогда - ПользовательскаяНастройкаКД.Значение = Значение; - Иначе - ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; - КонецЕсли; - - ПользовательскаяНастройкаКД.Использование = Истина; - - ПользовательскиеНастройкиМодифицированы = Истина; -КонецПроцедуры - &НаКлиенте Функция НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента) Экспорт // Для пользовательских настроек хранятся идентификаторы компоновки данных, @@ -2711,19 +2509,29 @@ Тип = ТипЗнч(НастройкаВарианта.ЭлементКД); Если Тип = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда ДоступныеПараметры = НастройкаВарианта.УзелКД.ДоступныеПараметры; - ДоступнаяНастройкаКД = ДоступныеПараметры.НайтиПараметр(НастройкаВарианта.ЭлементКД.Параметр); - Если ДоступнаяНастройкаКД.ДоступныеЗначения = Неопределено Тогда + Если ДоступныеПараметры = Неопределено Тогда Продолжить; КонецЕсли; + ДоступнаяНастройкаКД = ДоступныеПараметры.НайтиПараметр(НастройкаВарианта.ЭлементКД.Параметр); + ИначеЕсли Тип = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ДоступныеПоляОтбора = НастройкаВарианта.УзелКД.ДоступныеПоляОтбора; + Если ДоступныеПоляОтбора = Неопределено Тогда + Продолжить; + КонецЕсли; + ДоступнаяНастройкаКД = ДоступныеПоляОтбора.НайтиПоле(НастройкаВарианта.ЭлементКД.ЛевоеЗначение); + КонецЕсли; + Если ДоступнаяНастройкаКД = Неопределено + Или ТипЗнч(ДоступнаяНастройкаКД.ДоступныеЗначения) <> Тип("СписокЗначений") Тогда + Продолжить; + КонецЕсли; + Попытка ДоступнаяНастройкаКД.ДоступныеЗначения.Очистить(); Для Каждого Элемент Из ДополнительныеНастройки.ЗначенияДляВыбора Цикл ЗаполнитьЗначенияСвойств(ДоступнаяНастройкаКД.ДоступныеЗначения.Добавить(), Элемент); КонецЦикла; - ИначеЕсли Тип = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - ДоступныеПоляОтбора = НастройкаВарианта.УзелКД.ДоступныеПоляОтбора; - ДоступнаяНастройкаКД = ДоступныеПоляОтбора.НайтиПоле(НастройкаВарианта.ЭлементКД.ЛевоеЗначение); - ДоступнаяНастройкаКД.ДоступныеЗначения = ДополнительныеНастройки.ЗначенияДляВыбора; - КонецЕсли; + Исключение + Продолжить; + КонецПопытки; КонецЦикла; КонецЕсли; @@ -2869,14 +2677,18 @@ ТаблицаРеквизит = ЭтотОбъект[Сценарий.ТаблицаИмя]; ТекущаяСтрокаИдентификатор = ТаблицаЭлемент.ТекущаяСтрока; - Особенности = Новый Структура("МогутБытьРазделы, МогутБытьПараметры, + Особенности = Новый Структура("МогутБытьРазделы, МогутБытьПараметры, МогутБытьГруппы, |ТребоватьОдногоРодителя"); Особенности.МогутБытьРазделы = (Сценарий.ТаблицаИмя = "Отборы" Или Сценарий.ТаблицаИмя = "ВыбранныеПоля" Или Сценарий.ТаблицаИмя = "Сортировка"); Особенности.МогутБытьПараметры = (Сценарий.ТаблицаИмя = "Отборы"); Особенности.ТребоватьОдногоРодителя = (Сценарий.Действие = "Переместить" Или Сценарий.Действие = "Сгруппировать"); + Особенности.МогутБытьГруппы = (Сценарий.ТаблицаИмя = "Отборы" Или Сценарий.ТаблицаИмя = "ВыбранныеПоля"); Если Особенности.ТребоватьОдногоРодителя Тогда Сценарий.Вставить("ТекущийРодитель", -1); КонецЕсли; + Если Особенности.МогутБытьГруппы Тогда + БылиГруппы = Ложь; + КонецЕсли; ВыделенныеСтроки = МассивСортировать(ТаблицаЭлемент.ВыделенныеСтроки, НаправлениеСортировки.Возр); Для Каждого СтрокаИдентификатор Из ВыделенныеСтроки Цикл @@ -2884,6 +2696,9 @@ Если Не ЗарегистрироватьВыделеннуюСтроку(Сценарий, СтрокаДерева, Особенности) Тогда Возврат Ложь; // Завершить сценарий. КонецЕсли; + Если Особенности.МогутБытьГруппы И СтрокаДерева.ЭтоГруппа Тогда + БылиГруппы = Истина; + КонецЕсли; Если СтрокаИдентификатор = ТекущаяСтрокаИдентификатор Тогда Сценарий.ТекущаяСтрока = СтрокаДерева; КонецЕсли; @@ -2899,6 +2714,22 @@ КонецЕсли; КонецЕсли; + // Исключение из списка удаляемых строк всех подчиненных строк, для которых включены родители. + Если Сценарий.Действие = "Удалить" И Особенности.МогутБытьГруппы И БылиГруппы Тогда + Количество = Сценарий.СтрокиДерева.Количество(); + Для Номер = 1 По Количество Цикл + ОбратныйИндекс = Количество - Номер; + Родитель = Сценарий.СтрокиДерева[ОбратныйИндекс]; + Пока Родитель <> Неопределено Цикл + Родитель = Родитель.ПолучитьРодителя(); + Если Сценарий.СтрокиДерева.Найти(Родитель) <> Неопределено Тогда + Сценарий.СтрокиДерева.Удалить(ОбратныйИндекс); + Прервать; + КонецЕсли; + КонецЦикла; + КонецЦикла; + КонецЕсли; + Возврат Истина; // Продолжить сценарий. КонецФункции @@ -2941,7 +2772,7 @@ Функция ШагОтредактироватьГруппуПолей(ВыборПользователя, Сценарий) // По результатам редактирования группы дополняет структуру сценария информацией: // * ЗаголовокГруппы - Строка - // * Расположение - РасположениеПоляКомпоновкиДанных + // * Расположение - РасположениеПоляКомпоновкиДанных. Если Сценарий.ТекущийШагУточнение = "" Тогда // Первый вызов ПараметрыФормы = Новый Структура; @@ -3632,6 +3463,8 @@ КонецЕсли; Если ЗначениеЗаполнено(СтрокаТаблицы.Заголовок) Тогда ПредставлениеУзла = ПредставлениеУзла + " """ + СтрокаТаблицы.Заголовок + """"; + ИначеЕсли ЗначениеЗаполнено(СтрокаТаблицы.Представление) Тогда + ПредставлениеУзла = ПредставлениеУзла + " """ + СтрокаТаблицы.Представление + """"; КонецЕсли; УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя); @@ -3679,6 +3512,32 @@ ПоказатьРезультатЗаполненияНастроек(РезультатКлиента); КонецПроцедуры +&НаКлиенте +Процедура ПерейтиКНастройкеВложенныхОтчетов(ИдентификаторТекущегоЭлементаКД = Неопределено) + ПараметрыФормы = Новый Структура; + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыФормы, ФормаПараметры, Истина); + ПараметрыФормы.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки); + ПараметрыФормы.Вставить("КлючВарианта", Строка(КлючТекущегоВарианта)); + ПараметрыФормы.Вставить("ПользовательскиеНастройки", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + ПараметрыФормы.Вставить("ПредставлениеВарианта", ВариантНаименование); + ПараметрыФормы.Вставить("ПредставлениеПользовательскихНастроек", ""); + ПараметрыФормы.Вставить("ТекущаяСтрока", ИдентификаторТекущегоЭлементаКД); + + Обработчик = Новый ОписаниеОповещения("ПерейтиКНастройкеВложенныхОтчетовЗавершение", ЭтотОбъект); + + Режим = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + + ОткрытьФорму(НастройкиОтчета.ПолноеИмя + ".ФормаВарианта", ПараметрыФормы, ЭтотОбъект, , , , Обработчик, Режим); +КонецПроцедуры + +&НаКлиенте +Процедура ПерейтиКНастройкеВложенныхОтчетовЗавершение(Результат, ПараметрыВыполнения) Экспорт + Если ТипЗнч(Результат) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + БыстрыеНастройкиЗаполнитьКлиент(Результат); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Клиент - Таблицы полей (универсальные точки входа). @@ -3750,7 +3609,11 @@ Иначе ЭлементКД.Представление = ""; КонецЕсли; + Если СтрокаТаблицы.ЗаголовокПереопределен Тогда + ЭлементКД.ПредставлениеПользовательскойНастройки = СтрокаТаблицы.Заголовок; + КонецЕсли; ИначеЕсли ИмяТаблицы = "Оформление" Тогда + // Особенность УО - ПредставлениеПользовательскойНастройки может очищаться после ПолучитьНастройки(). Если СтрокаТаблицы.ЗаголовокПереопределен Тогда ЭлементКД.Представление = СтрокаТаблицы.Заголовок; Иначе @@ -3879,15 +3742,19 @@ ИндексКД = НоваяКоллекцияЭлементовКД.Индекс(ГруппаКД); ТекущаяСтрока = Неопределено; + ВыделенныеСтроки = Новый Массив; СтрокиРодителя = ГруппаДерева.ПолучитьЭлементы(); СтрокиРодителяКД = ГруппаКД.Элементы; Для Каждого СтараяСтрокаДерева Из СтрокиРодителя Цикл СтарыйЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтараяСтрокаДерева.ИдентификаторКД); ПеренесенныеСтроки = ТаблицыПолейСкопироватьРекурсивно(УзелКД, СтараяСтрокаДерева, НоваяКоллекцияСтрокДерева, СтарыйЭлементКД, НоваяКоллекцияЭлементовКД, Индекс, ИндексКД); + Индекс = Индекс + 1; + ИндексКД = ИндексКД + 1; Если ТекущаяСтрока = Неопределено Тогда ТекущаяСтрока = ПеренесенныеСтроки.СтрокаДерева; КонецЕсли; + ВыделенныеСтроки.Добавить(ПеренесенныеСтроки.СтрокаДерева); КонецЦикла; НоваяКоллекцияСтрокДерева.Удалить(ГруппаДерева); @@ -3896,22 +3763,24 @@ Если ТекущаяСтрока <> Неопределено Тогда ТаблицаЭлемент.ТекущаяСтрока = ТекущаяСтрока.ПолучитьИдентификатор(); КонецЕсли; + ТаблицаЭлемент.ВыделенныеСтроки.Очистить(); + Для Каждого СтрокаДерева Из ВыделенныеСтроки Цикл + ТаблицаЭлемент.ВыделенныеСтроки.Добавить(СтрокаДерева.ПолучитьИдентификатор()); + КонецЦикла; - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантИзменен = Истина; - КонецЕсли; + УстановитьМодифицированность(); КонецПроцедуры &НаКлиенте Процедура ТаблицыПолейПередУдалением(ТаблицаИмя, Отказ) Отказ = Истина; - СтрокаТаблицы = Элементы[ТаблицаИмя].ТекущиеДанные; - Если СтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - ТаблицыПолейУдалить(ТаблицаИмя, СтрокаТаблицы, Ложь); - УстановитьМодифицированность(); + + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, УдалитьСтроки, ОбновитьФорму"); + Сценарий.Вставить("Действие", "Удалить"); + Сценарий.Вставить("ТаблицаИмя", ТаблицаИмя); + + ЗапуститьСценарий(Сценарий); КонецПроцедуры &НаКлиенте @@ -4249,72 +4118,82 @@ КонецФункции &НаКлиенте -Функция ТаблицыПолейПереместить(Знач ТаблицаИмя, Знач СтрокаТаблицы, Знач НовыйРодитель, Знач ПередЧемВставить, Знач ОставитьКопию) +Функция ТаблицыПолейПереместить(Знач ТаблицаИмя, Знач СтрокаТаблицы, Знач НовыйРодитель, + Знач ПередЧемВставить = Неопределено, Знач Индекс = Неопределено, Знач ИндексКД = Неопределено) + Результат = Новый Структура("СтрокаТаблицы, ЭлементКД, Индекс, ИндексКД"); + ТаблицаЭлемент = Элементы[ТаблицаИмя]; ТаблицаРеквизит = ЭтотОбъект[ТаблицаИмя]; - УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя); - ЭлементКД = НайтиОбъектКД(УзелКД, СтрокаТаблицы); - Если НовыйРодитель = Неопределено Тогда - НовыйРодитель = ПолучитьРодителя(ТаблицаИмя, ПередЧемВставить); - КонецЕсли; - - Если ПередЧемВставить = Неопределено Тогда - Если ТаблицаИмя = "СтруктураВарианта" - Или НовыйРодитель = Неопределено - Или ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НовыйРодитель, "ЭтоРаздел") = Истина - Или ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НовыйРодитель, "ЭтоГруппа") = Истина Тогда - // Внутрь родителя. - Иначе - // На один уровень с родителем. + ДобавлятьВКонец = (НовыйРодитель = Неопределено); + КудаВставить = ПолучитьЭлементы(ТаблицаРеквизит, НовыйРодитель); + Если ПередЧемВставить = Неопределено И ТаблицаИмя <> "СтруктураВарианта" Тогда + ЭтоРаздел = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НовыйРодитель, "ЭтоРаздел"); + ЭтоГруппа = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НовыйРодитель, "ЭтоГруппа"); + Если ЭтоРаздел <> Истина И ЭтоГруппа <> Истина Тогда // На один уровень с родителем. ПередЧемВставить = НовыйРодитель; НовыйРодитель = ПолучитьРодителя(ТаблицаИмя, НовыйРодитель); + КудаВставить = ПолучитьЭлементы(ТаблицаРеквизит, НовыйРодитель); КонецЕсли; КонецЕсли; - НовыйРодительКД = НайтиОбъектКД(УзелКД, НовыйРодитель); - КудаВставить = ПолучитьЭлементы(ТаблицаРеквизит, НовыйРодитель); - КудаВставитьКД = ПолучитьЭлементыКД(УзелКД, НовыйРодительКД); + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя); + ЭлементКД = НайтиОбъектКД(УзелКД, СтрокаТаблицы); + НовыйРодительКД = НайтиОбъектКД(УзелКД, НовыйРодитель); + КудаВставитьКД = ПолучитьЭлементыКД(УзелКД, НовыйРодительКД); + ПередЧемВставитьКД = НайтиОбъектКД(УзелКД, ПередЧемВставить); - СтарыйРодитель = ПолучитьРодителя(ТаблицаИмя, СтрокаТаблицы); + СтарыйРодитель = ПолучитьРодителя(ТаблицаИмя, СтрокаТаблицы); ОткудаПереместить = ПолучитьЭлементы(ТаблицаРеквизит, СтарыйРодитель); - СтарыйРодительКД = НайтиОбъектКД(УзелКД, СтарыйРодитель); + СтарыйРодительКД = НайтиОбъектКД(УзелКД, СтарыйРодитель); ОткудаПереместитьКД = ПолучитьЭлементыКД(УзелКД, СтарыйРодительКД); - Если ПередЧемВставить = Неопределено Тогда - Индекс = Неопределено; - ИндексКД = Неопределено; + Если ЭлементКД = ПередЧемВставитьКД Тогда + Результат.ЭлементКД = ЭлементКД; + Результат.СтрокаТаблицы = СтрокаТаблицы; Иначе - ПередЧемВставитьКД = НайтиОбъектКД(УзелКД, ПередЧемВставить); - Индекс = КудаВставить.Индекс(ПередЧемВставить); - ИндексКД = КудаВставитьКД.Индекс(ПередЧемВставитьКД); - Если НовыйРодитель = СтарыйРодитель - И ОткудаПереместить.Индекс(СтрокаТаблицы) > Индекс Тогда - Индекс = Индекс - 1; - ИндексКД = ИндексКД - 1; + Если Индекс = Неопределено Или ИндексКД = Неопределено Тогда + Если ПередЧемВставитьКД = Неопределено Тогда + Если ДобавлятьВКонец Тогда + Индекс = КудаВставить.Количество(); + ИндексКД = КудаВставитьКД.Количество(); + Иначе + Индекс = 0; + ИндексКД = 0; + КонецЕсли; + Иначе + Индекс = КудаВставить.Индекс(ПередЧемВставить); + ИндексКД = КудаВставитьКД.Индекс(ПередЧемВставитьКД); + Если СтарыйРодитель = НовыйРодитель Тогда + СтарыйИндекс = ОткудаПереместить.Индекс(СтрокаТаблицы); + Если СтарыйИндекс <= Индекс Тогда + Индекс = Индекс + 1; + ИндексКД = ИндексКД + 1; + КонецЕсли; + КонецЕсли; + КонецЕсли; КонецЕсли; - КонецЕсли; - - Результат = Новый Структура("СтрокаДерева, СтрокаКД"); - - ПоискЭлементовКД = Новый Соответствие; - Результат.СтрокаКД = ОтчетыКлиентСервер.СкопироватьРекурсивно(УзелКД, ЭлементКД, КудаВставитьКД, ИндексКД, ПоискЭлементовКД); - - ПоискСтрокТаблицы = Новый Соответствие; - Результат.СтрокаДерева = ОтчетыКлиентСервер.СкопироватьРекурсивно(Неопределено, СтрокаТаблицы, КудаВставить, Индекс, ПоискСтрокТаблицы); - - Для Каждого КлючИЗначение Из ПоискСтрокТаблицы Цикл - СтараяСтрока = КлючИЗначение.Ключ; - НоваяСтрока = КлючИЗначение.Значение; - НоваяСтрока.ИдентификаторКД = ПоискЭлементовКД.Получить(СтараяСтрока.ИдентификаторКД); - КонецЦикла; - - Если Не ОставитьКопию Тогда + + ПоискЭлементовКД = Новый Соответствие; + Результат.ЭлементКД = ОтчетыКлиентСервер.СкопироватьРекурсивно(УзелКД, ЭлементКД, КудаВставитьКД, ИндексКД, ПоискЭлементовКД); + + ПоискСтрокТаблицы = Новый Соответствие; + Результат.СтрокаТаблицы = ОтчетыКлиентСервер.СкопироватьРекурсивно(Неопределено, СтрокаТаблицы, КудаВставить, Индекс, ПоискСтрокТаблицы); + + Для Каждого КлючИЗначение Из ПоискСтрокТаблицы Цикл + СтараяСтрока = КлючИЗначение.Ключ; + НоваяСтрока = КлючИЗначение.Значение; + НоваяСтрока.ИдентификаторКД = ПоискЭлементовКД.Получить(СтараяСтрока.ИдентификаторКД); + КонецЦикла; + ОткудаПереместить.Удалить(СтрокаТаблицы); ОткудаПереместитьКД.Удалить(ЭлементКД); КонецЕсли; + Результат.Индекс = КудаВставить.Индекс(Результат.СтрокаТаблицы); + Результат.ИндексКД = КудаВставитьКД.Индекс(Результат.ЭлементКД); + Возврат Результат; КонецФункции @@ -4543,6 +4422,9 @@ Если ЭлементКД = Неопределено Тогда Возврат; КонецЕсли; + Если ТипЗнч(ЭлементКД) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + ЭлементКД = ЭлементКД.Настройки; + КонецЕсли; ЗаголовокИспользование = ЗначениеЗаполнено(СтрокаТаблицы.Заголовок); @@ -4882,24 +4764,47 @@ &НаСервере Процедура БыстрыеНастройкиЗагрузитьНастройкиВКомпоновщик(ПараметрыЗаполнения) + НовыеНастройкиКД = Неопределено; + НовыеПользовательскиеНастройкиКД = Неопределено; Если ПараметрыЗаполнения.Свойство("КомпоновщикНастроекКД") Тогда - Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(ПараметрыЗаполнения.КомпоновщикНастроекКД.Настройки); - Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(ПараметрыЗаполнения.КомпоновщикНастроекКД.ПользовательскиеНастройки); + НовыеНастройкиКД = ПараметрыЗаполнения.КомпоновщикНастроекКД.Настройки; + НовыеПользовательскиеНастройкиКД = ПараметрыЗаполнения.КомпоновщикНастроекКД.ПользовательскиеНастройки; + Иначе + Если ПараметрыЗаполнения.Свойство("НастройкиКД") Тогда + НовыеНастройкиКД = ПараметрыЗаполнения.НастройкиКД; + КонецЕсли; + Если ПараметрыЗаполнения.Свойство("ПользовательскиеНастройкиКД") Тогда + НовыеПользовательскиеНастройкиКД = ПараметрыЗаполнения.ПользовательскиеНастройкиКД; + КонецЕсли; КонецЕсли; - Если ПараметрыЗаполнения.Свойство("НастройкиКД") Тогда - Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(ПараметрыЗаполнения.НастройкиКД); - КонецЕсли; - - Если ПараметрыЗаполнения.Свойство("ПользовательскиеНастройкиКД") Тогда - Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(ПараметрыЗаполнения.ПользовательскиеНастройкиКД); + Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда + НовыеНастройкиXML = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "НовыеНастройкиXML"); + Если ТипЗнч(НовыеНастройкиXML) = Тип("Строка") Тогда + Попытка + НовыеНастройкиКД = ОбщегоНазначения.ЗначениеИзСтрокиXML(НовыеНастройкиXML); + Исключение + НовыеНастройкиКД = Неопределено; + КонецПопытки; + НастройкиОтчета.НовыеНастройкиXML = Неопределено; + КонецЕсли; + + НовыеПользовательскиеНастройкиXML = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "НовыеПользовательскиеНастройкиXML"); + Если ТипЗнч(НовыеПользовательскиеНастройкиXML) = Тип("Строка") Тогда + Попытка + НовыеПользовательскиеНастройкиКД = ОбщегоНазначения.ЗначениеИзСтрокиXML(НовыеПользовательскиеНастройкиXML); + Исключение + НовыеПользовательскиеНастройкиКД = Неопределено; + КонецПопытки; + НастройкиОтчета.НовыеПользовательскиеНастройкиXML = Неопределено; + КонецЕсли; КонецЕсли; ОбновитьНастройкиВарианта = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "ОбновитьНастройкиВарианта", Ложь); Если ОбновитьНастройкиВарианта Тогда ИнформацияОбОшибке = Неопределено; Попытка - НастройкиКД = Отчет.КомпоновщикНастроек.ПолучитьНастройки(); + НовыеНастройкиКД = Отчет.КомпоновщикНастроек.ПолучитьНастройки(); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); КонецПопытки; @@ -4912,13 +4817,33 @@ Возврат; КонецЕсли; Отчет.КомпоновщикНастроек.ЗагрузитьФиксированныеНастройки(Новый НастройкиКомпоновкиДанных); - Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКД); КонецЕсли; СброситьПользовательскиеНастройки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "СброситьПользовательскиеНастройки", Ложь); Если СброситьПользовательскиеНастройки Тогда - ПустойКомпоновщик = Новый КомпоновщикНастроекКомпоновкиДанных; - Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(ПустойКомпоновщик.ПользовательскиеНастройки); + НовыеПользовательскиеНастройкиКД = Новый ПользовательскиеНастройкиКомпоновкиДанных; + КонецЕсли; + + Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда + ОтчетОбъект = ОтчетыСервер.ОтчетОбъект(ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя); + ОтчетОбъект.ПередЗагрузкойНастроекВКомпоновщик( + ЭтотОбъект, + НастройкиОтчета.КлючСхемы, + КлючТекущегоВарианта, + НовыеНастройкиКД, + НовыеПользовательскиеНастройкиКД); + КонецЕсли; + + Если ТипЗнч(НовыеНастройкиКД) = Тип("НастройкиКомпоновкиДанных") + И Отчет.КомпоновщикНастроек.Настройки <> НовыеНастройкиКД Тогда + Если ТипЗнч(ФормаПараметры.Отбор) = Тип("Структура") Тогда + ОтчетыСервер.УстановитьФиксированныеОтборы(ФормаПараметры.Отбор, НовыеНастройкиКД, НастройкиОтчета); + КонецЕсли; + Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(НовыеНастройкиКД); + КонецЕсли; + Если ТипЗнч(НовыеПользовательскиеНастройкиКД) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") + И Отчет.КомпоновщикНастроек.ПользовательскиеНастройки <> НовыеПользовательскиеНастройкиКД Тогда + Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(НовыеПользовательскиеНастройкиКД); КонецЕсли; УсловияОтборов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "УсловияОтборов"); @@ -5027,8 +4952,8 @@ Режимы = РежимОтображенияЭлементаНастройкиКомпоновкиДанных; ГруппыВывода = Новый Структура; - ГруппыВывода.Вставить("БыстрыеОтборы", Новый Структура("Порядок, Размер", Новый Массив, 0)); - ГруппыВывода.Вставить("ОбычныеОтборы", Новый Структура("Порядок, Размер", Новый Массив, 0)); + ГруппыВывода.Вставить("БыстрыеОтборы", Новый Структура("Порядок, Размер, ЕстьДлинныеПоля", Новый Массив, 0, Ложь)); + ГруппыВывода.Вставить("ОбычныеОтборы", Новый Структура("Порядок, Размер, ЕстьДлинныеПоля", Новый Массив, 0, Ложь)); ГруппыВывода.Вставить("ДополнительныеШапка", Новый Структура("Порядок, Размер", Новый Массив, 0)); ГруппыВывода.Вставить("ДополнительныеПодвал", Новый Структура("Порядок, Размер", Новый Массив, 0)); ГруппыВывода.Вставить("ДополнительныеЗакладки", Новый СписокЗначений); @@ -5129,6 +5054,9 @@ Иначе ГруппаВывода = ГруппыВывода.ОбычныеОтборы; КонецЕсли; + Если СтрДлина(СвойстваНастройки.Представление) > 40 Тогда + ГруппаВывода.ЕстьДлинныеПоля = Истина; + КонецЕсли; КонецЕсли; //////////////////////////////////////////////////////////////////////////////// @@ -5140,7 +5068,9 @@ Элементы.ИзменитьУсловияОтборов.Видимость = Прочее.ЕстьОтборыСУсловиями; ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппыВывода.БыстрыеОтборы, Элементы.БыстрыеОтборы, 2, Ложь); - ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппыВывода.ОбычныеОтборы, Элементы.ОбычныеОтборы, 2, Ложь); + ГруппаВывода = ГруппыВывода.ОбычныеОтборы; + КоличествоКолонок = ?(ГруппаВывода.ЕстьДлинныеПоля И ГруппаВывода.Размер < 10, 1, 2); + ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппаВывода, Элементы.ОбычныеОтборы, КоличествоКолонок, Ложь); ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппыВывода.ДополнительныеШапка, Элементы.СтраницаДополнительноШапка, 1); ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппыВывода.ДополнительныеПодвал, Элементы.СтраницаДополнительноПодвал, 1); @@ -5200,13 +5130,9 @@ // Стандартные периоды (установка значений и связей). Для Каждого СвойстваНастройки Из ДобавленныеСтандартныеПериоды Цикл Дополнительно = СвойстваНастройки.Дополнительно; - ЭтотОбъект[Дополнительно.ЗначениеИмя] = СвойстваНастройки.Значение; - ЭтотОбъект[Дополнительно.ВидПериодаИмя] = Дополнительно.ВидПериода; - ЭтотОбъект[Дополнительно.ПредставлениеИмя] = Дополнительно.Представление; - Элементы[Дополнительно.ВидПериодаИмя].ПутьКДанным = Дополнительно.ВидПериодаИмя; - Элементы[Дополнительно.ПредставлениеИмя].ПутьКДанным = Дополнительно.ПредставлениеИмя; - Элементы[Дополнительно.ПериодНачалоИмя].ПутьКДанным = Дополнительно.ЗначениеИмя + ".ДатаНачала"; - Элементы[Дополнительно.ПериодОкончаниеИмя].ПутьКДанным = Дополнительно.ЗначениеИмя + ".ДатаОкончания"; + ЭтотОбъект[Дополнительно.ЗначениеИмя] = СвойстваНастройки.Значение; + Элементы[Дополнительно.ПериодНачалоИмя].ПутьКДанным = Дополнительно.ЗначениеИмя + ".ДатаНачала"; + Элементы[Дополнительно.ПериодОкончаниеИмя].ПутьКДанным = Дополнительно.ЗначениеИмя + ".ДатаОкончания"; КонецЦикла; // Поля подбора (установка значений и связей). @@ -5424,6 +5350,7 @@ Элементы.КомандыВыбранныхПолей_Группы1.Видимость = (РасширенныйРежим = 1); Элементы.КомандыСортировки_ДобавлениеУдаление.Видимость = (РасширенныйРежим = 1) Или (ВидимостьСортировок И Не ВидимостьВыбранныхПолей); Элементы.КомандыСортировки_ДобавлениеУдаление1.Видимость = (РасширенныйРежим = 1) Или (ВидимостьСортировок И Не ВидимостьВыбранныхПолей); + КонецПроцедуры &НаСервере @@ -5795,20 +5722,11 @@ Для Каждого НастройкаВарианта Из НаборСтрокВарианта Цикл Если НастройкаВарианта.Тип = "ГруппаЭлементовОтбора" Тогда ЭтоГруппа = Истина; - Представление = Строка(НастройкаВарианта.ЭлементКД.ТипГруппы); ИначеЕсли НастройкаВарианта.Тип = "ЭлементОтбора" Тогда - // БыстрыйВыбор, ВыборГруппИЭлементов, ДоступныеВидыСравнения, ДоступныеЗначения, Маска, Папка - // Поле, Ресурс, СвязьПоТипу, Таблица, ФормаВыбора, ФорматРедактирования, Элементы - // ПолучитьПараметрыВыбора(), ПолучитьСвязиПараметровВыбора() Если НастройкаВарианта.ДоступнаяНастройкаКД = Неопределено Тогда Продолжить; КонецЕсли; ЭтоГруппа = Ложь; - Если ЗначениеЗаполнено(НастройкаВарианта.ДоступнаяНастройкаКД.Заголовок) Тогда - Представление = НастройкаВарианта.ДоступнаяНастройкаКД.Заголовок; - Иначе - Представление = Строка(НастройкаВарианта.ЭлементКД.ЛевоеЗначение); - КонецЕсли; Иначе Продолжить; КонецЕсли; @@ -5817,8 +5735,8 @@ СтрокаТаблицы = НаборСтрокФормы.Добавить(); СтрокаТаблицы.Использование = НастройкаВарианта.ЭлементКД.Использование; - СтрокаТаблицы.Представление = Представление; //ОтчетыКлиентСервер.ПредставлениеОбъектаКД(Информация.ТекущаяСтрокаДерева.УзелКД.Отбор, ЭлементКД, Неопределено).Представление - СтрокаТаблицы.Заголовок = Представление; + СтрокаТаблицы.Представление = НастройкаВарианта.ПредставлениеПоУмолчанию; + СтрокаТаблицы.Заголовок = НастройкаВарианта.Представление; СтрокаТаблицы.ИдентификаторКД = НастройкаВарианта.ИдентификаторКД; СтрокаТаблицы.ЭтоПараметр = Ложь; СтрокаТаблицы.ЭтоГруппа = ЭтоГруппа; @@ -5826,26 +5744,15 @@ СтрокаТаблицы.ВыводитьФлажок = НастройкаВарианта.ВыводитьФлажок; СтрокаТаблицы.ФормаВыбора = НастройкаВарианта.ФормаВыбора; СтрокаТаблицы.ВыборГруппИЭлементов = НастройкаВарианта.ВыборГруппИЭлементов; + СтрокаТаблицы.ЗаголовокПереопределен = (СтрокаТаблицы.Заголовок <> СтрокаТаблицы.Представление); НастройкаВарианта.ИдентификаторВФорме = СтрокаТаблицы.ПолучитьИдентификатор(); - ВыводитьТолькоФлажок = Ложь; - Если ЗначениеЗаполнено(ЭлементКД.Представление) Тогда - ВыводитьТолькоФлажок = Истина; - Если ЭлементКД.Представление <> "1" Тогда - СтрокаТаблицы.Заголовок = ЭлементКД.Представление; - КонецЕсли; - КонецЕсли; - Если ЗначениеЗаполнено(ЭлементКД.ПредставлениеПользовательскойНастройки) Тогда - СтрокаТаблицы.Заголовок = ЭлементКД.ПредставлениеПользовательскойНастройки; - КонецЕсли; - СтрокаТаблицы.ЗаголовокПереопределен = (СтрокаТаблицы.Заголовок <> СтрокаТаблицы.Представление); - Если ЗначениеЗаполнено(ЭлементКД.ИдентификаторПользовательскойНастройки) Тогда Если ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ Тогда - СтрокаТаблицы.ИндексКартинкиДоступа = ?(ВыводитьТолькоФлажок, 1, 2); + СтрокаТаблицы.ИндексКартинкиДоступа = ?(НастройкаВарианта.ВыводитьТолькоФлажок, 1, 2); ИначеЕсли ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный Тогда - СтрокаТаблицы.ИндексКартинкиДоступа = ?(ВыводитьТолькоФлажок, 3, 4); + СтрокаТаблицы.ИндексКартинкиДоступа = ?(НастройкаВарианта.ВыводитьТолькоФлажок, 3, 4); Иначе СтрокаТаблицы.ИндексКартинкиДоступа = 5; КонецЕсли; @@ -5930,23 +5837,10 @@ СтрокаТаблицы = НаборСтрокФормы.Добавить(); СтрокаТаблицы.Использование = ЭлементКД.Использование; - СтрокаТаблицы.Представление = НастройкаВарианта.Представление; - СтрокаТаблицы.Заголовок = СтрокаТаблицы.Представление; + СтрокаТаблицы.Представление = НастройкаВарианта.ПредставлениеПоУмолчанию; + СтрокаТаблицы.Заголовок = НастройкаВарианта.Представление; СтрокаТаблицы.ИдентификаторКД = НастройкаВарианта.ИдентификаторКД; СтрокаТаблицы.ИндексКартинки = -1; - - НастройкаВарианта.ИдентификаторВФорме = СтрокаТаблицы.ПолучитьИдентификатор(); - - ВыводитьТолькоФлажок = Ложь; - Если ЗначениеЗаполнено(ЭлементКД.Представление) Тогда - ВыводитьТолькоФлажок = Истина; - Если ЭлементКД.Представление <> "1" Тогда - СтрокаТаблицы.Заголовок = ЭлементКД.Представление; - КонецЕсли; - КонецЕсли; - Если ЗначениеЗаполнено(ЭлементКД.ПредставлениеПользовательскойНастройки) Тогда - СтрокаТаблицы.Заголовок = ЭлементКД.ПредставлениеПользовательскойНастройки; - КонецЕсли; СтрокаТаблицы.ЗаголовокПереопределен = (СтрокаТаблицы.Заголовок <> СтрокаТаблицы.Представление); Если ЗначениеЗаполнено(ЭлементКД.ИдентификаторПользовательскойНастройки) Тогда @@ -5973,9 +5867,6 @@ ТаблицаРеквизит = ЭтотОбъект[ТаблицаИмя]; СтрокаЦели = НайтиПоИдентификатору(ТаблицаРеквизит, ИдентификаторЦели); Родитель = ПолучитьРодителя(ТаблицаИмя, СтрокаЦели); - ТаблицаЭлемент = Элементы[ТаблицаИмя]; - ВыделенныеСтроки = ТаблицаЭлемент.ВыделенныеСтроки; - ВыделенныеСтроки.Очистить(); ПеремещенныеСтроки = Новый Массив; // Для платформы. @@ -5983,21 +5874,23 @@ ЭтоТекущая = (ПеремещаемаяСтрока = ТекущаяСтрока); // Перемещение. - Результат = ТаблицыПолейПереместить(ТаблицаИмя, ПеремещаемаяСтрока, СтрокаЦели, Неопределено, Ложь); + Результат = ТаблицыПолейПереместить(ТаблицаИмя, ПеремещаемаяСтрока, СтрокаЦели); // Бантики (начало). Если ЭтоТекущая Тогда - ТекущаяСтрока = Результат.СтрокаДерева; + ТекущаяСтрока = Результат.СтрокаТаблицы; КонецЕсли; - ПеремещенныеСтроки.Добавить(Результат.СтрокаДерева); + ПеремещенныеСтроки.Добавить(Результат.СтрокаТаблицы); КонецЦикла; // Бантики (завершение). + ТаблицаЭлемент = Элементы[ТаблицаИмя]; ТаблицаЭлемент.ТекущаяСтрока = ТекущаяСтрока.ПолучитьИдентификатор(); + ТаблицаЭлемент.ВыделенныеСтроки.Очистить(); Для Каждого СтрокаТаблицы Из ПеремещенныеСтроки Цикл НоваяСтрокаИдентификатор = СтрокаТаблицы.ПолучитьИдентификатор(); - Если ВыделенныеСтроки.Найти(НоваяСтрокаИдентификатор) = Неопределено Тогда - ВыделенныеСтроки.Добавить(НоваяСтрокаИдентификатор); + Если ТаблицаЭлемент.ВыделенныеСтроки.Найти(НоваяСтрокаИдентификатор) = Неопределено Тогда + ТаблицаЭлемент.ВыделенныеСтроки.Добавить(НоваяСтрокаИдентификатор); КонецЕсли; КонецЦикла; @@ -6016,31 +5909,60 @@ // Определение параметров приемника. ЦельТаблицаИмя = "Сортировка"; ЦельТаблица = ЭтотОбъект[ЦельТаблицаИмя]; + + ПередЧемВставить = НайтиПоИдентификатору(ЦельТаблица, ИдентификаторЦели); + + Если ПередЧемВставить <> Неопределено И ПередЧемВставить.ЭтоРаздел Тогда + // Цель перетаскивания - раздел, добавляем внутрь раздела. + ЦельРодитель = ПередЧемВставить; + ПередЧемВставить = Неопределено; + ДобавлятьВКонец = Ложь; + Иначе + // На один уровень с целью перетаскивания. + ЦельРодитель = ПолучитьРодителя(ЦельТаблицаИмя, ПередЧемВставить); + ДобавлятьВКонец = Истина; + КонецЕсли; + + КудаВставить = ПолучитьЭлементы(ЦельТаблица, ЦельРодитель); + + Если ПередЧемВставить = Неопределено Тогда + Количество = КудаВставить.Количество(); + Если Количество > 0 И Не ДобавлятьВКонец Тогда + ПередЧемВставить = КудаВставить[0]; + КонецЕсли; + КонецЕсли; + ЦельУзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ЦельТаблицаИмя); - - ПередЧемВставить = НайтиПоИдентификатору(ЦельТаблица, ИдентификаторЦели); ПередЧемВставитьКД = НайтиОбъектКД(ЦельУзелКД, ПередЧемВставить); - - ЦельРодитель = ПолучитьРодителя(ЦельТаблицаИмя, ПередЧемВставить); ЦельРодительКД = НайтиОбъектКД(ЦельУзелКД, ЦельРодитель); - - КудаВставить = ПолучитьЭлементы(ЦельТаблица, ЦельРодитель); КудаВставитьКД = ПолучитьЭлементыКД(ЦельУзелКД, ЦельРодительКД); - Если ПередЧемВставитьКД = Неопределено Тогда - Индекс = Неопределено; - ИндексКД = Неопределено; + Если ПередЧемВставить = Неопределено Тогда + Если ДобавлятьВКонец Тогда + Индекс = КудаВставить.Количество(); + ИндексКД = КудаВставитьКД.Количество(); + Иначе + Индекс = 0; + ИндексКД = 0; + КонецЕсли; Иначе - Индекс = КудаВставить.Индекс(ПередЧемВставить) + 1; - ИндексКД = КудаВставитьКД.Индекс(ПередЧемВставитьКД) + 1; + Индекс = КудаВставить.Индекс(ПередЧемВставить); + ИндексКД = КудаВставитьКД.Индекс(ПередЧемВставитьКД); КонецЕсли; + БыстрыйПоискСтрокиПоПолюКД = Новый Соответствие; + Для Каждого СтрокаТаблицы Из КудаВставить Цикл + ЭлементКД = НайтиОбъектКД(ЦельУзелКД, СтрокаТаблицы); + Если ЭлементКД <> Неопределено Тогда + БыстрыйПоискСтрокиПоПолюКД.Вставить(ЭлементКД.Поле, СтрокаТаблицы); + КонецЕсли; + КонецЦикла; + ТипЭлемента = Тип("ЭлементПорядкаКомпоновкиДанных"); // Вывод результата. ИсточникТекущаяСтрока = ИсточникПеретаскивания.ТекущаяСтрока; ЦельТекущаяСтрока = Неопределено; - ПоляКоторыеНеУдалосьДобавить = Новый Массив; // Обход источника. ПеремещенныеСтроки = Новый Массив; @@ -6071,43 +5993,46 @@ ЭтоТекущая = (ИсточникСтрокаТаблицы = ИсточникТекущаяСтрока); ИсточникОбъектКД = НайтиОбъектКД(ИсточникУзелКД, ИсточникСтрокаТаблицы); + ПолеКД = ИсточникОбъектКД.Поле; - ДоступноеПолеКД = ЦельУзелКД.ДоступныеПоляПорядка.НайтиПоле(ИсточникОбъектКД.Поле); + ДоступноеПолеКД = ЦельУзелКД.ДоступныеПоляПорядка.НайтиПоле(ПолеКД); Если ДоступноеПолеКД = Неопределено Тогда - ПоляКоторыеНеУдалосьДобавить.Добавить(ИсточникСтрокаТаблицы.Представление); - Продолжить; + Продолжить; // Не удалось добавить поле. КонецЕсли; - // Добавление строки приемника. - Если Индекс = Неопределено Тогда - НоваяСтрока = КудаВставить.Добавить(); - Иначе - НоваяСтрока = КудаВставить.Вставить(Индекс); - Индекс = Индекс + 1; - КонецЕсли; - - Если ИндексКД = Неопределено Тогда - НовыйЭлементКД = КудаВставитьКД.Добавить(ТипЭлемента); - Иначе - НовыйЭлементКД = КудаВставитьКД.Вставить(ИндексКД, ТипЭлемента); - ИндексКД = ИндексКД + 1; + НайденнаяСтрока = БыстрыйПоискСтрокиПоПолюКД.Получить(ПолеКД); + Если НайденнаяСтрока <> Неопределено Тогда + Результат = ТаблицыПолейПереместить(ЦельТаблицаИмя, НайденнаяСтрока, ЦельРодитель, , Индекс, ИндексКД); + НоваяСтрока = Результат.СтрокаТаблицы; + Индекс = Результат.Индекс + 1; + ИндексКД = Результат.ИндексКД + 1; + ПеремещенныеСтроки.Добавить(НоваяСтрока); + БыстрыйПоискСтрокиПоПолюКД.Вставить(ПолеКД, НоваяСтрока); + Продолжить; // Строка перемещена, добавлять новую не требуется. КонецЕсли; + НовыйЭлементКД = КудаВставитьКД.Вставить(ИндексКД, ТипЭлемента); НовыйЭлементКД.Использование = Истина; - НовыйЭлементКД.Поле = ДоступноеПолеКД.Поле; + НовыйЭлементКД.Поле = ПолеКД; НовыйЭлементКД.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; + НоваяСтрока = КудаВставить.Вставить(Индекс); НоваяСтрока.ИдентификаторКД = ЦельУзелКД.ПолучитьИдентификаторПоОбъекту(НовыйЭлементКД); НоваяСтрока.Использование = НовыйЭлементКД.Использование; НоваяСтрока.Представление = ДоступноеПолеКД.Заголовок; НоваяСтрока.Направление = НовыйЭлементКД.ТипУпорядочивания; + НоваяСтрока.ТипНастройки = "ЭлементПорядка"; НоваяСтрока.ИндексКартинки = -1; + Индекс = Индекс + 1; + ИндексКД = ИндексКД + 1; + Если ЭтоТекущая Или ЦельТекущаяСтрока = Неопределено Тогда ЦельТекущаяСтрока = НоваяСтрока; КонецЕсли; ПеремещенныеСтроки.Добавить(НоваяСтрока); + БыстрыйПоискСтрокиПоПолюКД.Вставить(ПолеКД, НоваяСтрока); КонецЦикла; @@ -6120,7 +6045,7 @@ Коллекции.Удалить(0); КонецЦикла; - // Бантики (завершение). + // Бантики. ЦельТаблицаЭлемент = Элементы[ЦельТаблицаИмя]; ТекущийЭлемент = ЦельТаблицаЭлемент; ЦельТаблицаЭлемент.ВыделенныеСтроки.Очистить(); @@ -6133,21 +6058,10 @@ ЦельТаблицаЭлемент.ВыделенныеСтроки.Добавить(НоваяСтрокаИдентификатор); КонецЕсли; КонецЦикла; - // } ЦельТаблицаЭлемент.Развернуть(ЦельРодитель.ПолучитьИдентификатор(), Истина); - ПользовательскиеНастройкиМодифицированы = Истина; - Если РасширенныйРежим = 1 Тогда - ВариантИзменен = Истина; - КонецЕсли; - - ПодключитьОбработчикОжидания("Обновить", 3, Истина); -КонецПроцедуры - -&НаКлиенте -Процедура Обновить() - БыстрыеНастройкиЗаполнитьКлиент(Неопределено); + УстановитьМодифицированность(); КонецПроцедуры &НаКлиенте @@ -6209,4 +6123,9 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура Обновить() + БыстрыеНастройкиЗаполнитьКлиент(Неопределено); +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/ФормаОтчета/Form.form b/SSL/src/CommonForms/ФормаОтчета/Form.form index 15ff85a17..f5f5d51e1 100644 --- a/SSL/src/CommonForms/ФормаОтчета/Form.form +++ b/SSL/src/CommonForms/ФормаОтчета/Form.form @@ -451,14 +451,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - ГруппаПользовательскиеНастройкиРасширеннаяПодсказка 505 @@ -505,14 +497,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - ГруппаНастройкиОтчетаРасширеннаяПодсказка 144 @@ -1344,7 +1328,6 @@ ReportSettings DontBlock true - true Vertical true true @@ -2310,6 +2293,14 @@ + + BeforeLoadVariantAtServer + ПередЗагрузкойВариантаНаСервере + + + BeforeLoadUserSettingsAtServer + ПередЗагрузкойПользовательскихНастроекНаСервере + OnSaveVariantAtServer ПриСохраненииВариантаНаСервере diff --git a/SSL/src/CommonForms/ФормаОтчета/Help/ru.html b/SSL/src/CommonForms/ФормаОтчета/Help/ru.html index c95ce3066..98b6d4573 100644 --- a/SSL/src/CommonForms/ФормаОтчета/Help/ru.html +++ b/SSL/src/CommonForms/ФормаОтчета/Help/ru.html @@ -1,17 +1,16 @@ - +

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

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

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

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

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

          Настройки

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

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

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

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

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

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

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

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

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

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

            • Нажмите Еще - Прочее - Изменить вариант отчета. Можно добавить поля, изменить параметры и настройки отчета.
              @@ -52,4 +51,14 @@
              • Для поиска в отчете воспользуйтесь командой Найти.
              • С помощью кнопок  Свернуть все группы или  Развернуть все группы можно скрыть или показать группировку отчета.
              • Для сохранения результата отчета в файл нажмите , укажите наименование файла и путь для сохранения. -
              • Нажмите , для того чтобы посчитать сумму чисел в выделенных ячейках.
              \ 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 717f535cf..8c5b7539b 100644 --- a/SSL/src/CommonForms/ФормаОтчета/Module.bsl +++ b/SSL/src/CommonForms/ФормаОтчета/Module.bsl @@ -1,9 +1,13 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ПараметрыОбработчика; &НаКлиенте Перем ПеременныеКлиента; +#КонецОбласти + //////////////////////////////////////////////////////////////////////////////// // ФОРМА @@ -16,6 +20,9 @@ КонецЕсли; ВариантыПанелиКлючТекущегоВарианта = " - "; + Если ЗначениеЗаполнено(Параметры.КлючВарианта) Тогда + КлючТекущегоВарианта = Параметры.КлючВарианта; + КонецЕсли; // Параметры формы. РежимРасшифровки = (Параметры.Свойство("Расшифровка") И Параметры.Расшифровка <> Неопределено); @@ -24,7 +31,7 @@ ФормаПараметры = Новый Структура( "КлючНазначенияИспользования, КлючПользовательскихНастроек, - |Расшифровка, СформироватьПриОткрытии, ТолькоПросмотр, + |СформироватьПриОткрытии, ТолькоПросмотр, |ФиксированныеНастройки, Раздел, Подсистема, ПодсистемаПредставление"); ЗаполнитьЗначенияСвойств(ФормаПараметры, Параметры); ФормаПараметры.Вставить("Отбор", Новый Структура); @@ -43,17 +50,20 @@ НастройкиОтчета = ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(); АдресСхемы = ПоместитьВоВременноеХранилище(ОтчетОбъект.СхемаКомпоновкиДанных, УникальныйИдентификатор); - НастройкиОтчета.Вставить("АдресСхемы", АдресСхемы); + НастройкиОтчета.Вставить("АдресСхемы", АдресСхемы); НастройкиОтчета.Вставить("СхемаМодифицирована", Ложь); - НастройкиОтчета.Вставить("ПолноеИмя", ОтчетМетаданные.ПолноеИмя()); + НастройкиОтчета.Вставить("КлючСхемы", ""); + НастройкиОтчета.Вставить("ПолноеИмя", ОтчетМетаданные.ПолноеИмя()); НастройкиОтчета.Вставить("Наименование", СокрЛП(ОтчетМетаданные.Представление())); Информация = ВариантыОтчетов.СформироватьИнформациюОбОтчетеПоПолномуИмени(НастройкиОтчета.ПолноеИмя); НастройкиОтчета.Вставить("ОтчетСсылка", Информация.Отчет); + НастройкиОтчета.Вставить("Внешний", ТипЗнч(НастройкиОтчета.ОтчетСсылка) = Тип("Строка")); + НастройкиОтчета.Вставить("Безопасный", БезопасныйРежим() <> Ложь); ОбновитьИнформациюОВариантеОтчета(); ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(НастройкиОтчета, ВариантыОтчетов.ПараметрыКлиента()); - Если ВариантыОтчетовПовтИсп.ОтчетыСНастройками().Найти(НастройкиОтчета.ОтчетСсылка) <> Неопределено Тогда + Если ВариантыОтчетовПовтИсп.Параметры().ОтчетыСНастройками.Найти(НастройкиОтчета.ОтчетСсылка) <> Неопределено Тогда ОтчетОбъект.ОпределитьНастройкиФормы(ЭтотОбъект, КлючТекущегоВарианта, НастройкиОтчета); СоответствиеПериодичностиПараметров = Новый Соответствие; Для Каждого КлючИЗначение Из НастройкиОтчета.СоответствиеПериодичностиПараметров Цикл @@ -73,8 +83,6 @@ НастройкиОтчета.ПрочитатьФлажокФормироватьСразуИзПользовательскихНастроек = Ложь; КонецЕсли; - НастройкиОтчета.Вставить("Внешний", ТипЗнч(НастройкиОтчета.ОтчетСсылка) = Тип("Строка")); - НастройкиОтчета.Вставить("Безопасный", БезопасныйРежим()); НастройкиОтчета.Вставить("ПредопределенныеВарианты", Новый СписокЗначений); Если НастройкиОтчета.Внешний И ОтчетОбъект.СхемаКомпоновкиДанных <> Неопределено Тогда Для Каждого Вариант Из ОтчетОбъект.СхемаКомпоновкиДанных.ВариантыНастроек Цикл @@ -91,9 +99,6 @@ // Скрытие команд вариантов Если Не НастройкиОтчета.Свойство("РазрешеноМенятьВарианты") Или Параметры.Свойство("ВидимостьКомандВариантовОтчетов") Тогда НастройкиОтчета.Вставить("РазрешеноМенятьВарианты", ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ВидимостьКомандВариантовОтчетов")); - Если НастройкиОтчета.РазрешеноМенятьВарианты = Ложь Тогда - АвтоНавигационнаяСсылка = Ложь; - КонецЕсли; КонецЕсли; Если ТипЗнч(НастройкиОтчета.РазрешеноМенятьВарианты) <> Тип("Булево") Тогда НастройкиОтчета.РазрешеноМенятьВарианты = ВариантыОтчетовПовтИсп.ПравоДобавления(); @@ -105,10 +110,13 @@ Текст = НСтр("ru = 'Контекстный вариант ""%1"" отчета ""%2"" открыт без контекста.'"); ВариантыОтчетов.ПредупреждениеПоВарианту(НастройкиОтчета.ВариантСсылка, Текст, НастройкиОтчета.ВариантСсылка, НастройкиОтчета.ОтчетСсылка); НастройкиОтчета.РазрешеноМенятьВарианты = Ложь; - АвтоНавигационнаяСсылка = Ложь; КонецЕсли; КонецЕсли; КонецЕсли; + Если НастройкиОтчета.РазрешеноМенятьВарианты = Ложь И ПустаяСтрока(КлючНазначенияИспользования) Тогда + КлючНазначенияИспользования = Параметры.КлючВарианта; + ФормаПараметры.КлючНазначенияИспользования = КлючНазначенияИспользования; + КонецЕсли; Если Не ВариантыОтчетов.ОтчетПодключенКФормеНастроек(ОтчетМетаданные) Тогда НастройкиОтчета.РазрешеноМенятьВарианты = Ложь; ТекстОшибки = ВариантыОтчетовКлиентСервер.ТекстОшибки(1, НастройкиОтчета.ПолноеИмя); @@ -150,7 +158,22 @@ Элементы.ГруппаОтправить.Видимость = Ложь; КонецЕсли; - // События. + // Определение что отчет может содержать некорректные данные. + Если Не НастройкиОтчета.ФормироватьСразу Тогда + ИспользуемыеТаблицы = Новый Массив; + ИспользуемыеТаблицы.Добавить(НастройкиОтчета.ПолноеИмя); + Если НастройкиОтчета.События.ПриОпределенииИспользуемыхТаблиц Тогда + ОтчетОбъект.ПриОпределенииИспользуемыхТаблиц(КлючТекущегоВарианта, ИспользуемыеТаблицы); + КонецЕсли; + Для Каждого ПолноеИмя Из ИспользуемыеТаблицы Цикл + Проверка = ОбновлениеИнформационнойБазы.ОбъектОбработан(ПолноеИмя); + Если Не Проверка.Обработан Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеДанныеЕщеОбновляются()); + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + ОтчетыПереопределяемый.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка); Если НастройкиОтчета.События.ПриСозданииНаСервере Тогда ОтчетОбъект.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка); @@ -163,6 +186,8 @@ ПеременныеКлиента = Новый Структура; ПеременныеКлиента.Вставить("УспешноСформирован", Ложь); ПеременныеКлиента.Вставить("ВыполнятьЗамеры", Ложь); + // В безопасном режиме доп. отчеты формируются непосредственно, + // т.к. они не могут подключать себя и использовать собственные методы в фоновых заданиях. ПеременныеКлиента.Вставить("Непосредственно", НастройкиОтчета.Внешний Или НастройкиОтчета.Безопасный); ПеременныеКлиента.Вставить("ФормированиеПриОткрытии", Ложь); ПеременныеКлиента.Вставить("ИнтервалОжидания", ?(ПолучитьСкоростьКлиентскогоСоединения() = СкоростьКлиентскогоСоединения.Низкая, 1, 0.2)); @@ -213,15 +238,48 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) ОповещениеОбработано = Ложь; - Если ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта() Тогда + Если ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта() + Или ИмяСобытия = "Запись_НаборКонстант" Тогда ОповещениеОбработано = Истина; - ВариантыПанелиКлючТекущегоВарианта = " - "; ПодключитьОбработчикОжидания("ВидимостьДоступностьЕслиТребуется", 0.1, Истина); КонецЕсли; ОтчетыКлиентПереопределяемый.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник, ОповещениеОбработано); КонецПроцедуры +&НаСервере +Процедура ПередЗагрузкойВариантаНаСервере(НовыеНастройкиКД) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + Если НовыеНастройкиКД = Неопределено Тогда + Возврат; + КонецЕсли; + + // Ничего не делать если отчет не на СКД и никаких настроек не загружено. + РежимВариантаОтчета = (ТипЗнч(КлючТекущегоВарианта) = Тип("Строка") И Не ПустаяСтрока(КлючТекущегоВарианта)); + Если Не РежимВариантаОтчета И НовыеНастройкиКД = Неопределено Тогда + Возврат; + КонецЕсли; + + // Вызов переопределяемого модуля. + ОтчетыПереопределяемый.ПередЗагрузкойВариантаНаСервере(ЭтотОбъект, НовыеНастройкиКД); + Если НастройкиОтчета.События.ПередЗагрузкойВариантаНаСервере Тогда + ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); + ОтчетОбъект.ПередЗагрузкойВариантаНаСервере(ЭтотОбъект, НовыеНастройкиКД); + КонецЕсли; + + // Подготовка к вызову события переинициализации. + Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда + Попытка + НовыеНастройкиXML = ОбщегоНазначения.ЗначениеВСтрокуXML(НовыеНастройкиКД); + Исключение + НовыеНастройкиXML = Неопределено; + КонецПопытки; + НастройкиОтчета.Вставить("НовыеНастройкиXML", НовыеНастройкиXML); + КонецЕсли; +КонецПроцедуры + &НаСервере Процедура ПриЗагрузкеВариантаНаСервере(НовыеНастройкиКД) Если Параметры.Свойство("АвтоТест") Тогда @@ -239,16 +297,6 @@ ОбновитьИнформациюОВариантеОтчета(); КонецЕсли; - // Вызов переопределяемого модуля. - ОтчетыПереопределяемый.ПередЗагрузкойВариантаНаСервере(ЭтотОбъект, НовыеНастройкиКД); - Если НастройкиОтчета.События.ПередЗагрузкойВариантаНаСервере - Или НастройкиОтчета.События.ПриЗагрузкеВариантаНаСервере Тогда - ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); - КонецЕсли; - Если НастройкиОтчета.События.ПередЗагрузкойВариантаНаСервере Тогда - ОтчетОбъект.ПередЗагрузкойВариантаНаСервере(ЭтотОбъект, НовыеНастройкиКД); - КонецЕсли; - // Загрузка фиксированных настроек для режима расшифровки. Если РежимРасшифровки Тогда ОтчетНаименованиеТекущегоВарианта = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НовыеНастройкиКД.ДополнительныеСвойства, "ВариантНаименование"); @@ -260,7 +308,7 @@ Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ВариантНаименование", ОтчетНаименованиеТекущегоВарианта); КонецЕсли; Если ТипЗнч(ФормаПараметры.Отбор) = Тип("Структура") Тогда - ОтчетыСервер.УстановитьФиксированныеОтборы(ФормаПараметры.Отбор, Отчет.КомпоновщикНастроек, НастройкиОтчета); + ОтчетыСервер.УстановитьФиксированныеОтборы(ФормаПараметры.Отбор, Отчет.КомпоновщикНастроек.Настройки, НастройкиОтчета); КонецЕсли; // Заполнение панели быстрых настроек. @@ -268,10 +316,28 @@ // Вызов переопределяемого модуля. Если НастройкиОтчета.События.ПриЗагрузкеВариантаНаСервере Тогда + ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); ОтчетОбъект.ПриЗагрузкеВариантаНаСервере(ЭтотОбъект, НовыеНастройкиКД); КонецЕсли; КонецПроцедуры +&НаСервере +Процедура ПередЗагрузкойПользовательскихНастроекНаСервере(НовыеПользовательскиеНастройкиКД) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + // Подготовка к вызову события переинициализации. + Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда + Попытка + НовыеПользовательскиеНастройкиXML = ОбщегоНазначения.ЗначениеВСтрокуXML(НовыеПользовательскиеНастройкиКД); + Исключение + НовыеПользовательскиеНастройкиXML = Неопределено; + КонецПопытки; + НастройкиОтчета.Вставить("НовыеПользовательскиеНастройкиXML", НовыеПользовательскиеНастройкиXML); + КонецЕсли; +КонецПроцедуры + &НаСервере Процедура ПриЗагрузкеПользовательскихНастроекНаСервере(НовыеПользовательскиеНастройкиКД) Если Параметры.Свойство("АвтоТест") Тогда @@ -362,6 +428,7 @@ НастройкиКД.ДополнительныеСвойства.Вставить("Адрес", ПоместитьВоВременноеХранилище(НовыеНастройкиКД)); // Для платформы. НастройкиКД = НовыеНастройкиКД; ВариантыПанелиКлючТекущегоВарианта = " - "; + ОбновитьИнформациюОВариантеОтчета(); ВидимостьДоступностьКорректность("ВариантОтчета"); КонецПроцедуры @@ -394,11 +461,19 @@ &НаКлиенте Процедура ОтчетТабличныйДокументОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.АнализЖурналаРегистрации") Тогда + МодульАнализЖурналаРегистрацииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("АнализЖурналаРегистрацииКлиент"); + МодульАнализЖурналаРегистрацииКлиент.ФормаОтчетаОбработкаРасшифровки(ЭтотОбъект, Элемент, Расшифровка, СтандартнаяОбработка); + КонецЕсли; ОтчетыКлиентПереопределяемый.ОбработкаРасшифровки(ЭтотОбъект, Элемент, Расшифровка, СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура ОтчетТабличныйДокументОбработкаДополнительнойРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.АнализЖурналаРегистрации") Тогда + МодульАнализЖурналаРегистрацииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("АнализЖурналаРегистрацииКлиент"); + МодульАнализЖурналаРегистрацииКлиент.ФормаОтчетаОбработкаДополнительнойРасшифровки(ЭтотОбъект, Элемент, Расшифровка, СтандартнаяОбработка); + КонецЕсли; ОтчетыКлиентПереопределяемый.ОбработкаДополнительнойРасшифровки(ЭтотОбъект, Элемент, Расшифровка, СтандартнаяОбработка); КонецПроцедуры @@ -488,121 +563,16 @@ //////////////////////////////////////////////////////////////////////////////// // Подключаемые - Стандартный период. -&НаКлиенте -Процедура Подключаемый_СтандартныйПериод_Вид_ПриИзменении(Элемент) - - ВидПериодаИмя = Элемент.Имя; - ИдентификаторЭлемента = Прав(ВидПериодаИмя, 32); - СвойстваНастройкиТип = Лев(ВидПериодаИмя, Найти(ВидПериодаИмя, "_Вид_")-1); - - СтраницыИмя = СвойстваНастройкиТип + "_Страницы_" + ИдентификаторЭлемента; - ПериодЗначениеИмя = СвойстваНастройкиТип + "_Значение_" + ИдентификаторЭлемента; - ПериодПредставлениеИмя = СвойстваНастройкиТип + "_Представление_" + ИдентификаторЭлемента; - СтраницаПроизвольныйИмя = СвойстваНастройкиТип + "_СтраницаПроизвольный_" + ИдентификаторЭлемента; - СтраницаСтандартныйИмя = СвойстваНастройкиТип + "_СтраницаСтандартный_" + ИдентификаторЭлемента; - - Значение = ЭтотОбъект[ПериодЗначениеИмя]; - - ВидПериода = ЭтотОбъект[ВидПериодаИмя]; - - Если ЗначениеЗаполнено(ВидПериода) Тогда - ВыбранПроизвольный = ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.ПроизвольныйПериод"); - Иначе - ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.ПроизвольныйПериод"); - ЭтотОбъект[ВидПериодаИмя] = ВидПериода; - ВыбранПроизвольный = Истина; - КонецЕсли; - - Если ВыбранПроизвольный Тогда - - // Переключение страницы. - Элементы[СтраницыИмя].ТекущаяСтраница = Элементы[СтраницаПроизвольныйИмя]; - - Значение.Вариант = ВариантСтандартногоПериода.ПроизвольныйПериод; - - Иначе - - // Переключение страницы. - Элементы[СтраницыИмя].ТекущаяСтраница = Элементы[СтраницаСтандартныйИмя]; - - // Приведение значения периода в соответствие с выбранным видом. - ДатаСеанса = НачалоДня(ОбщегоНазначенияКлиент.ДатаСеанса()); - НачалоПериода = НачалоДня(Значение.ДатаНачала); - КонецПериода = КонецДня(Значение.ДатаОкончания); - Если Не ЗначениеЗаполнено(НачалоПериода) - Или (ДатаСеанса >= НачалоПериода И ДатаСеанса <= КонецПериода) Тогда - НачалоПериода = ДатаСеанса; - КонецЕсли; - НачалоПериода = ОтчетыКлиентСервер.НачалоПериодаОтчета(ВидПериода, НачалоПериода); - КонецПериода = ОтчетыКлиентСервер.КонецПериодаОтчета(ВидПериода, НачалоПериода); - - Значение.ДатаНачала = НачалоПериода; - Значение.ДатаОкончания = КонецПериода; - - КонецЕсли; - - Представление = ОтчетыКлиентСервер.ПредставлениеСтандартногоПериода(Значение, ВидПериода); - ЭтотОбъект[ПериодПредставлениеИмя] = Представление; - ЭтотОбъект[ПериодЗначениеИмя] = Значение; - - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); - Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - ПользовательскаяНастройкаКД.Значение = Значение; - Иначе - ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; - КонецЕсли; - - ПользовательскаяНастройкаКД.Использование = Истина; - -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_СтандартныйПериод_Значение_НачалоВыбора(Элемент, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - - // Формирование сведений по элементу. - ПериодПредставлениеИмя = Элемент.Имя; - ИдентификаторЭлемента = Прав(ПериодПредставлениеИмя, 32); - СвойстваНастройкиТип = Лев(ПериодПредставлениеИмя, Найти(ПериодПредставлениеИмя, "_Представление_")-1); - - ПериодЗначениеИмя = СвойстваНастройкиТип + "_Значение_" + ИдентификаторЭлемента; - ВидПериодаИмя = СвойстваНастройкиТип + "_Вид_" + ИдентификаторЭлемента; - - Значение = ЭтотОбъект[ПериодЗначениеИмя]; - ВидПериода = ЭтотОбъект[ВидПериодаИмя]; - - НачалоПериода = Значение.ДатаНачала; - Если НачалоПериода = '00010101' Тогда - НачалоПериода = ОтчетыКлиентСервер.НачалоПериодаОтчета(ВидПериода, ОбщегоНазначенияКлиент.ДатаСеанса()); - КонецЕсли; - - // Параметры для чтения из обработчиков: - ПараметрыВыбора = Новый Структура; - // Для выбора значения: - ПараметрыВыбора.Вставить("Значение", Значение); - ПараметрыВыбора.Вставить("Элемент", Элемент); - // Для загрузки значения: - ПараметрыВыбора.Вставить("ИдентификаторЭлемента", ИдентификаторЭлемента); - ПараметрыВыбора.Вставить("ПериодПредставлениеИмя", ПериодПредставлениеИмя); - ПараметрыВыбора.Вставить("ПериодЗначениеИмя", ПериодЗначениеИмя); - ПараметрыВыбора.Вставить("ВидПериода", ВидПериода); - ПараметрыВыбора.Вставить("ЭтоПараметр", СвойстваНастройкиТип = "ЗначениеПараметраНастроек"); - - ВыборПериодаИзВыпадающегоСписка(-1, ПараметрыВыбора); -КонецПроцедуры - &НаКлиенте Процедура Подключаемый_СтандартныйПериод_НачалоПериода_ПриИзменении(Элемент) - // Формирование сведений по элементу. ПериодНачалоИмя = Элемент.Имя; - ИдентификаторЭлемента = Прав(ПериодНачалоИмя, 32); - СвойстваНастройкиТип = Лев(ПериодНачалоИмя, Найти(ПериодНачалоИмя, "_Начало_")-1); - ПериодЗначениеИмя = СвойстваНастройкиТип + "_Значение_" + ИдентификаторЭлемента; + ЗначениеИмя = СтрЗаменить(ПериодНачалоИмя, "_Начало_", "_Значение_"); + ИдентификаторЭлемента = Прав(ПериодНачалоИмя, 32); - Значение = ЭтотОбъект[ПериодЗначениеИмя]; - - Если Значение.ДатаНачала <> '00010101' Тогда + Значение = ЭтотОбъект[ЗначениеИмя]; + Заполнено = ЗначениеЗаполнено(Значение.ДатаНачала); + Если Заполнено Тогда Значение.ДатаНачала = НачалоДня(Значение.ДатаНачала); КонецЕсли; @@ -613,26 +583,21 @@ Иначе ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; КонецЕсли; - - Если Значение.ДатаНачала <> '00010101' Тогда + Если Заполнено Тогда ПользовательскаяНастройкаКД.Использование = Истина; КонецЕсли; - КонецПроцедуры &НаКлиенте Процедура Подключаемый_СтандартныйПериод_КонецПериода_ПриИзменении(Элемент) - // Формирование сведений по элементу. ПериодОкончаниеИмя = Элемент.Имя; - ИдентификаторЭлемента = Прав(ПериодОкончаниеИмя, 32); - СвойстваНастройкиТип = Лев(ПериодОкончаниеИмя, Найти(ПериодОкончаниеИмя, "_Окончание_")-1); + ЗначениеИмя = СтрЗаменить(ПериодОкончаниеИмя, "_Окончание_", "_Значение_"); + ИдентификаторЭлемента = Прав(ПериодОкончаниеИмя, 32); - ПериодЗначениеИмя = СвойстваНастройкиТип + "_Значение_" + ИдентификаторЭлемента; - - Значение = ЭтотОбъект[ПериодЗначениеИмя]; - - Если Значение.ДатаОкончания <> '00010101' Тогда + Значение = ЭтотОбъект[ЗначениеИмя]; + Заполнено = ЗначениеЗаполнено(Значение.ДатаОкончания); + Если Заполнено Тогда Значение.ДатаОкончания = КонецДня(Значение.ДатаОкончания); КонецЕсли; @@ -643,16 +608,17 @@ Иначе ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; КонецЕсли; - - Если Значение.ДатаОкончания <> '00010101' Тогда + Если Заполнено Тогда ПользовательскаяНастройкаКД.Использование = Истина; КонецЕсли; - КонецПроцедуры &НаКлиенте -Процедура Подключаемый_СтандартныйПериод_Значение_Очистка(Элемент, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; +Процедура Подключаемый_ВыбратьПериод(Команда) + КнопкаВыбораИмя = Команда.Имя; + ЗначениеИмя = СтрЗаменить(КнопкаВыбораИмя, "_КнопкаВыбора_", "_Значение_"); + ИдентификаторЭлемента = Прав(КнопкаВыбораИмя, 32); + ОтчетыКлиент.ВыбратьПериод(ЭтотОбъект, ЗначениеИмя, ИдентификаторЭлемента); КонецПроцедуры #КонецОбласти @@ -806,7 +772,7 @@ КонецЕсли; ВариантФормы = Найденные[0]; ЗагрузитьВариант(ВариантФормы.КлючВарианта); - КлючУникальности = Лев(КлючУникальности, Найти(КлючУникальности, "/")) + "КлючВарианта." + ВариантФормы.КлючВарианта; + КлючУникальности = Лев(КлючУникальности, СтрНайти(КлючУникальности, "/")) + "КлючВарианта." + ВариантФормы.КлючВарианта; ПоказатьРезультатЗаполненияНастроек(Неопределено); Если НастройкиОтчета.ФормироватьСразу Тогда ПодключитьОбработчикОжидания("Сформировать", 0.1, Истина); @@ -867,141 +833,6 @@ //////////////////////////////////////////////////////////////////////////////// // Клиент -&НаКлиенте -Процедура ВыборПериодаИзВыпадающегоСписка(Результат, ПараметрыВыбора) Экспорт - Если Результат = Неопределено Тогда - Возврат; // Отмена выбора. - КонецЕсли; - - Если Результат = -1 Тогда // Начало выбора. - // Чтение параметров для формирования списка из сохраненного значения периода. - ПараметрыВыбора.Вставить("НачалоПериода", ПараметрыВыбора.Значение.ДатаНачала); - ПараметрыВыбора.Вставить("Вариант", ПараметрыВыбора.Значение.Вариант); - ИндексНачальногоЗначения = Неопределено; - ИначеЕсли ТипЗнч(Результат.Значение) = Тип("Структура") Тогда - // Чтение параметров для формирования списка из выбранного значения. - ПараметрыВыбора.Вставить("НачалоПериода", Результат.Значение.НачалоПериода); - ПараметрыВыбора.Вставить("Вариант", Результат.Значение.Вариант); - ИндексНачальногоЗначения = Результат.Значение.ИндексНачальногоЗначения; - Иначе - // Загрузка результата выбора. - ЗагрузитьРезультатВыбораПериодаИзВыпадающегоСписка(Результат, ПараметрыВыбора); - Возврат; - КонецЕсли; - - // Формирование списка выбора. - Если ПараметрыВыбора.Вариант = Неопределено Или ПараметрыВыбора.Вариант = ВариантСтандартногоПериода.ПроизвольныйПериод Тогда - - СписокПериодов = ОтчетыКлиентСервер.СписокФиксированныхПериодов(ПараметрыВыбора.НачалоПериода, ПараметрыВыбора.ВидПериода); - - Если ИндексНачальногоЗначения = Неопределено Тогда - ИндексНачальногоЗначения = СписокПериодов.НайтиПоЗначению(ПараметрыВыбора.НачалоПериода); - КонецЕсли; - - ОписаниеНавигационногоЭлемента = Новый Структура; - ОписаниеНавигационногоЭлемента.Вставить("НачалоПериода", СписокПериодов[0].Значение); - ОписаниеНавигационногоЭлемента.Вставить("Вариант", Неопределено); - ОписаниеНавигационногоЭлемента.Вставить("ИндексНачальногоЗначения", 0); - СписокПериодов[0].Значение = ОписаниеНавигационногоЭлемента; - - ОписаниеНавигационногоЭлемента = Новый Структура; - ОписаниеНавигационногоЭлемента.Вставить("НачалоПериода", СписокПериодов[8].Значение); - ОписаниеНавигационногоЭлемента.Вставить("Вариант", Неопределено); - ОписаниеНавигационногоЭлемента.Вставить("ИндексНачальногоЗначения", 8); - СписокПериодов[8].Значение = ОписаниеНавигационногоЭлемента; - - Если Не ПараметрыВыбора.Свойство("ВариантСтандартногоПериодаПоВиду") Тогда - ПараметрыВыбора.Вставить("ВариантСтандартногоПериодаПоВиду", ОтчетыКлиентСервер.ПривестиВидПериодаКСтандартному(ПараметрыВыбора.ВидПериода)); - КонецЕсли; - - ОписаниеНавигационногоЭлемента = Новый Структура; - ОписаниеНавигационногоЭлемента.Вставить("НачалоПериода", ПараметрыВыбора.НачалоПериода); - ОписаниеНавигационногоЭлемента.Вставить("Вариант", ПараметрыВыбора.ВариантСтандартногоПериодаПоВиду); - ОписаниеНавигационногоЭлемента.Вставить("ИндексНачальногоЗначения", Неопределено); - СписокПериодов.Добавить(ОписаниеНавигационногоЭлемента, НСтр("ru = 'Относительный...'")); - - Иначе - - СписокПериодов = ОтчетыКлиентСервер.СписокВычисляемыхПериодов(ПараметрыВыбора.ВидПериода); - - Если ИндексНачальногоЗначения = Неопределено Тогда - ИндексНачальногоЗначения = СписокПериодов.НайтиПоЗначению(ПараметрыВыбора.Вариант); - КонецЕсли; - - ОписаниеНавигационногоЭлемента = Новый Структура; - ОписаниеНавигационногоЭлемента.Вставить("НачалоПериода", ПараметрыВыбора.НачалоПериода); - ОписаниеНавигационногоЭлемента.Вставить("Вариант", Неопределено); - ОписаниеНавигационногоЭлемента.Вставить("ИндексНачальногоЗначения", Неопределено); - СписокПериодов.Добавить(ОписаниеНавигационногоЭлемента, НСтр("ru = 'Фиксированный...'")); - - КонецЕсли; - - Если ИндексНачальногоЗначения = Неопределено Тогда - ИндексНачальногоЗначения = СписокПериодов.Количество() - 1; - КонецЕсли; - - ПеременныеКлиента.Вставить("ВыборПериодаИзВыпадающегоСписка", Новый Структура); - ПеременныеКлиента.ВыборПериодаИзВыпадающегоСписка.Вставить("ПараметрыВыбора", ПараметрыВыбора); - ПеременныеКлиента.ВыборПериодаИзВыпадающегоСписка.Вставить("СписокПериодов", СписокПериодов); - ПеременныеКлиента.ВыборПериодаИзВыпадающегоСписка.Вставить("ИндексНачальногоЗначения", ИндексНачальногоЗначения); - Если Результат = -1 Тогда - НачатьВыборПериодаИзВыпадающегоСписка(); - Иначе - ПодключитьОбработчикОжидания("НачатьВыборПериодаИзВыпадающегоСписка", 0.1, Истина); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура НачатьВыборПериодаИзВыпадающегоСписка() - Если ПеременныеКлиента.Свойство("ВыборПериодаИзВыпадающегоСписка") Тогда - Контекст = ПеременныеКлиента.ВыборПериодаИзВыпадающегоСписка; - ПеременныеКлиента.Удалить("ВыборПериодаИзВыпадающегоСписка"); - Обработчик = Новый ОписаниеОповещения("ВыборПериодаИзВыпадающегоСписка", ЭтотОбъект, Контекст.ПараметрыВыбора); - ПоказатьВыборИзСписка(Обработчик, Контекст.СписокПериодов, Контекст.ПараметрыВыбора.Элемент, Контекст.ИндексНачальногоЗначения); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ЗагрузитьРезультатВыбораПериодаИзВыпадающегоСписка(Результат, ПараметрыВыбора) - Значение = ПараметрыВыбора.Значение; - - // Запись результата выбора в данные формы и пользовательские настройки КД. - Если ТипЗнч(Результат.Значение) = Тип("ВариантСтандартногоПериода") Тогда - ЭтотОбъект[ПараметрыВыбора.ПериодПредставлениеИмя] = ?(ПустаяСтрока(Результат.Представление), Строка(Результат.Значение), Результат.Представление); - Значение.Вариант = Результат.Значение; - Иначе - НачалоПериода = ОтчетыКлиентСервер.НачалоПериодаОтчета(ПараметрыВыбора.ВидПериода, Результат.Значение); - КонецПериода = ОтчетыКлиентСервер.КонецПериодаОтчета(ПараметрыВыбора.ВидПериода, Результат.Значение); - - ЭтотОбъект[ПараметрыВыбора.ПериодПредставлениеИмя] = Результат.Представление; - - Значение.Вариант = ВариантСтандартногоПериода.ПроизвольныйПериод; - Значение.ДатаНачала = НачалоПериода; - Значение.ДатаОкончания = КонецПериода; - КонецЕсли; - - ЭтотОбъект[ПараметрыВыбора.ПериодЗначениеИмя] = Значение; - - ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ПараметрыВыбора.ИдентификаторЭлемента); - Если ПараметрыВыбора.ЭтоПараметр Тогда - ПользовательскаяНастройкаКД.Значение = Значение; - Иначе - ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; - КонецЕсли; - - ПользовательскаяНастройкаКД.Использование = Истина; - -КонецПроцедуры - -&НаКлиенте -Функция ВыполнитьКонтекстныйВызовСервера(КлючОперации, ПараметрыОперации) Экспорт - // Исключение из стандартов разработки. - - // Программный интерфейс для контекстного вызова сервера из клиентского общего модуля. - Возврат КонтекстныйВызовСервера(КлючОперации, ПараметрыОперации); - -КонецФункции - &НаКлиенте Процедура ФоновоеЗаданиеПроверитьНаКлиенте() Задание = ФоновоеЗаданиеПроверитьНаСервере(); @@ -1030,12 +861,7 @@ &НаКлиенте Процедура Сформировать() ПередФормированиемНаКлиенте(); - Если ПеременныеКлиента.Непосредственно Тогда - ТребуетсяОбработчик = Ложь; - СформироватьНепосредственно(); - Иначе - ТребуетсяОбработчик = ФоновоеЗаданиеЗапустить(ПеременныеКлиента.ФормированиеПриОткрытии); - КонецЕсли; + ТребуетсяОбработчик = ФоновоеЗаданиеЗапустить(ПеременныеКлиента.ФормированиеПриОткрытии); Если ТребуетсяОбработчик Тогда ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчика); ПодключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте", 1, Истина); @@ -1167,9 +993,15 @@ Тип = ТипЗнч(НастройкаВарианта.ЭлементКД); Если Тип = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда ДоступныеПараметры = НастройкаВарианта.УзелКД.ДоступныеПараметры; + Если ДоступныеПараметры = Неопределено Тогда + Продолжить; + КонецЕсли; ДоступнаяНастройкаКД = ДоступныеПараметры.НайтиПараметр(НастройкаВарианта.ЭлементКД.Параметр); ИначеЕсли Тип = Тип("ЭлементОтбораКомпоновкиДанных") Тогда ДоступныеПоляОтбора = НастройкаВарианта.УзелКД.ДоступныеПоляОтбора; + Если ДоступныеПоляОтбора = Неопределено Тогда + Продолжить; + КонецЕсли; ДоступнаяНастройкаКД = ДоступныеПоляОтбора.НайтиПоле(НастройкаВарианта.ЭлементКД.ЛевоеЗначение); КонецЕсли; Если ДоступнаяНастройкаКД = Неопределено @@ -1182,12 +1014,10 @@ ЗаполнитьЗначенияСвойств(ДоступнаяНастройкаКД.ДоступныеЗначения.Добавить(), Элемент); КонецЦикла; Исключение - Продолжить; // Для платформы. + Продолжить; КонецПопытки; КонецЦикла; КонецЕсли; - - СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, РезультатКлиента); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -1268,7 +1098,6 @@ Если РежимРасшифровки Тогда Заголовок = Заголовок + " (" + НСтр("ru = 'Расшифровка'") + ")"; КонецЕсли; - КонецПроцедуры &НаСервере @@ -1334,61 +1163,13 @@ Возврат ПараметрыЗаполнения.Результат; КонецФункции -&НаСервере -Функция КонтекстныйВызовСервера(КлючОперации, ПараметрыОперации) - РезультатВызова = Новый Структура; - Если НастройкиОтчета.События.КонтекстныйВызовСервера Тогда - ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); - ОтчетОбъект.КонтекстныйВызовСервера(ЭтотОбъект, КлючОперации, ПараметрыОперации, РезультатВызова); - КонецЕсли; - Возврат РезультатВызова; -КонецФункции - -&НаСервере -Процедура СформироватьНепосредственно() - ДопСвойства = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства; - - // Формирование отчета. - ДопСвойства.Вставить("КлючВарианта", КлючТекущегоВарианта); - НастройкиПечатиСохранить(); - ИнформацияОбОшибке = Неопределено; - Попытка - СкомпоноватьРезультат(РежимКомпоновкиРезультата.Авто); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - КонецПопытки; - ДопСвойства.Удалить("КлючВарианта"); - НастройкиПечатиВосстановить(); - - Если ИнформацияОбОшибке <> Неопределено Тогда - ПоказатьОшибкиФормирования(ИнформацияОбОшибке); - Возврат; - КонецЕсли; - - // Перезаполнение настроек. - РезультатФормирования = Новый Структура; - РезультатФормирования.Вставить("ВариантМодифицирован", Ложь); - РезультатФормирования.Вставить("ПользовательскиеНастройкиМодифицированы", Ложь); - Если ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДопСвойства, "ВариантМодифицирован") = Истина Тогда - РезультатФормирования.ВариантМодифицирован = Истина; - КонецЕсли; - Если РезультатФормирования.ВариантМодифицирован - Или ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДопСвойства, "ПользовательскиеНастройкиМодифицированы") = Истина Тогда - РезультатФормирования.ПользовательскиеНастройкиМодифицированы = Истина; - КонецЕсли; - ДопСвойства.Удалить("ВариантМодифицирован"); - ДопСвойства.Удалить("ПользовательскиеНастройкиМодифицированы"); - - Если РезультатФормирования.ВариантМодифицирован - Или РезультатФормирования.ПользовательскиеНастройкиМодифицированы Тогда - РезультатФормирования.Вставить("ИмяСобытия", "ПослеФормирования"); - РезультатФормирования.Вставить("Непосредственно", Истина); - РезультатЗаполненияНастроек = БыстрыеНастройкиЗаполнить(РезультатФормирования); - КонецЕсли; -КонецПроцедуры - &НаСервере Функция ФоновоеЗаданиеЗапустить(Знач ФормированиеПриОткрытии) + Если ФоновоеЗаданиеИдентификатор <> Неопределено Тогда + ФоновоеЗаданиеОтменить(ФоновоеЗаданиеИдентификатор); + ФоновоеЗаданиеИдентификатор = Неопределено; + КонецЕсли; + Если Не ПроверитьЗаполнение() Тогда Если ФормированиеПриОткрытии Тогда ТекстОшибки = ""; @@ -1403,11 +1184,14 @@ // Запуск фонового задания ПараметрыФормированияОтчета = Новый Структура; - ПараметрыФормированияОтчета.Вставить("ОтчетСсылка", НастройкиОтчета.ОтчетСсылка); - ПараметрыФормированияОтчета.Вставить("КлючВарианта", КлючТекущегоВарианта); + ПараметрыФормированияОтчета.Вставить("СсылкаОтчета", НастройкиОтчета.ОтчетСсылка); + ПараметрыФормированияОтчета.Вставить("СсылкаВарианта", НастройкиОтчета.ВариантСсылка); + ПараметрыФормированияОтчета.Вставить("КлючВарианта", КлючТекущегоВарианта); ПараметрыФормированияОтчета.Вставить("НастройкиКД", Отчет.КомпоновщикНастроек.Настройки); ПараметрыФормированияОтчета.Вставить("ФиксированныеНастройкиКД", Отчет.КомпоновщикНастроек.ФиксированныеНастройки); ПараметрыФормированияОтчета.Вставить("ПользовательскиеНастройкиКД", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + ПараметрыФормированияОтчета.Вставить("СхемаМодифицирована", НастройкиОтчета.СхемаМодифицирована); + ПараметрыФормированияОтчета.Вставить("КлючСхемы", НастройкиОтчета.КлючСхемы); Если НастройкиОтчета.ВыполнятьЗамеры И ЗначениеЗаполнено(НастройкиОтчета.КлючЗамеров) Тогда Разрезы = Новый Структура; @@ -1438,25 +1222,45 @@ ПараметрыФормированияОтчета.Вставить("ИмяКлючевойОперации", НРег(ВариантыОтчетовКлиентСервер.СтруктураВСтроку(Разрезы, "=", "/"))); КонецЕсли; - ИнформацияОбОшибке = Неопределено; - Попытка - РезультатФоновогоЗадания = ДлительныеОперации.ЗапуститьВыполнениеВФоне( - УникальныйИдентификатор, + Если НастройкиОтчета.Внешний Или НастройкиОтчета.Безопасный Тогда + // Непосредственно. + Если НастройкиОтчета.СхемаМодифицирована Тогда + ПараметрыФормированияОтчета.Вставить("АдресСхемы", НастройкиОтчета.АдресСхемы); + КонецЕсли; + РезультатФоновогоЗадания = Новый Структура("Статус, ИдентификаторЗадания, АдресРезультата, КраткоеПредставлениеОшибки"); + РезультатФоновогоЗадания.АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); + ПараметрыФормированияОтчета.Вставить("Объект", РеквизитФормыВЗначение("Отчет")); + ПараметрыФормированияОтчета.Вставить("ПолноеИмя", НастройкиОтчета.ПолноеИмя); + Попытка + ВариантыОтчетов.СформироватьОтчетВФоне(ПараметрыФормированияОтчета, РезультатФоновогоЗадания.АдресРезультата); + РезультатФоновогоЗадания.Статус = "Выполнено"; + Исключение + РезультатФоновогоЗадания.Статус = "Ошибка"; + РезультатФоновогоЗадания.КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + Иначе + // В фоновом задании. + Если НастройкиОтчета.СхемаМодифицирована Тогда + ПараметрыФормированияОтчета.Вставить("СхемаКД", ПолучитьИзВременногоХранилища(НастройкиОтчета.АдресСхемы)); + КонецЕсли; + ПараметрыЗапуска = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + ПараметрыЗапуска.НаименованиеФоновогоЗадания = НСтр("ru = 'Варианты отчетов: Формирование отчета'"); + ПараметрыЗапуска.ОжидатьЗавершение = Ложь; + РезультатФоновогоЗадания = ДлительныеОперации.ВыполнитьВФоне( "ВариантыОтчетов.СформироватьОтчетВФоне", ПараметрыФормированияОтчета, - НСтр("ru = 'Варианты отчетов: Формирование отчета'")); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - КонецПопытки; - Если ИнформацияОбОшибке <> Неопределено Тогда - ПоказатьОшибкиФормирования(ИнформацияОбОшибке); + ПараметрыЗапуска); + КонецЕсли; + + Если РезультатФоновогоЗадания.Статус = "Ошибка" Тогда + ПоказатьОшибкиФормирования(РезультатФоновогоЗадания.КраткоеПредставлениеОшибки); Возврат Ложь; КонецЕсли; ФоновоеЗаданиеИдентификатор = РезультатФоновогоЗадания.ИдентификаторЗадания; - ФоновоеЗаданиеАдресХранилища = РезультатФоновогоЗадания.АдресХранилища; + ФоновоеЗаданиеАдресХранилища = РезультатФоновогоЗадания.АдресРезультата; - Если РезультатФоновогоЗадания.ЗаданиеВыполнено Тогда + Если РезультатФоновогоЗадания.Статус = "Выполнено" Тогда ФоновоеЗаданиеЗагрузитьРезультат(); ЗаданиеЗапущено = Ложь; Иначе @@ -1470,12 +1274,11 @@ КонецЕсли; Возврат ЗаданиеЗапущено; - КонецФункции &НаСервере Функция ФоновоеЗаданиеПроверитьНаСервере() - Задание = ДлительныеОперации.НайтиЗаданиеСлужебный(ФоновоеЗаданиеИдентификатор); + Задание = НайтиЗаданиеСлужебный(ФоновоеЗаданиеИдентификатор); Если Не Задание.Выполняется Тогда Если Задание.Успех Тогда ФоновоеЗаданиеЗагрузитьРезультат(); @@ -1487,6 +1290,44 @@ Возврат Задание; КонецФункции +&НаСервере +Функция НайтиЗаданиеСлужебный(Знач Идентификатор) + // Считывает состояние фонового задания по переданному идентификатору. + // + // Параметры: + // Идентификатор - УникальныйИдентификатор - Идентификатор фонового задания. + // + // Возвращаемое значение: + // Неопределено - Задание не найдено. + // Структура - Сведения о задании. + // * Выполняется - Булево - Истина когда фоновое задание еще выполняется. + // * Успешно - Булево - Истина когда сеанс фонового задания завершился без ошибок. + // * Ошибка - Строка, ИнформацияОбОшибке, Неопределено - Описание ошибки. + // + Результат = Новый Структура("Выполняется, Успех, Ошибка", Ложь, Ложь, Неопределено); + Если Идентификатор = Неопределено Тогда + Возврат Результат; + КонецЕсли; + Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор); + Если Задание = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + Если Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда + Результат.Выполняется = Истина; + Иначе + Результат.Выполняется = Ложь; + Если Задание.Состояние = СостояниеФоновогоЗадания.Завершено Тогда + Результат.Успех = Истина; + Иначе + Результат.Успех = Ложь; + Результат.Ошибка = Задание.ИнформацияОбОшибке; + КонецЕсли; + КонецЕсли; + + Возврат Результат; +КонецФункции + &НаСервереБезКонтекста Процедура ФоновоеЗаданиеОтменить(ФоновоеЗаданиеИдентификатор) ДлительныеОперации.ОтменитьВыполнениеЗадания(ФоновоеЗаданиеИдентификатор); @@ -1525,16 +1366,14 @@ Если Не ПараметрыЗаполнения.Свойство("ПользовательскиеНастройкиМодифицированы") Тогда ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Ложь); КонецЕсли; - Если Не ПараметрыЗаполнения.Свойство("СброситьПользовательскиеНастройки") Тогда - ПараметрыЗаполнения.Вставить("СброситьПользовательскиеНастройки", Ложь); - КонецЕсли; Если Не ПараметрыЗаполнения.Свойство("Результат") Тогда ПараметрыЗаполнения.Вставить("Результат", Новый Структура); КонецЕсли; ПараметрыЗаполнения.Вставить("ОтчетОбъектИлиПолноеИмя", НастройкиОтчета.ПолноеИмя); Если НастройкиОтчета.События.ПередЗаполнениемПанелиБыстрыхНастроек - Или НастройкиОтчета.События.ПослеЗаполненияПанелиБыстрыхНастроек Тогда + Или НастройкиОтчета.События.ПослеЗаполненияПанелиБыстрыхНастроек + Или НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя = РеквизитФормыВЗначение("Отчет"); КонецЕсли; @@ -1543,22 +1382,70 @@ &НаСервере Процедура БыстрыеНастройкиЗагрузитьНастройкиВКомпоновщик(ПараметрыЗаполнения) + + НовыеНастройкиКД = Неопределено; + НовыеПользовательскиеНастройкиКД = Неопределено; Если ПараметрыЗаполнения.Свойство("КомпоновщикНастроекКД") Тогда - Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(ПараметрыЗаполнения.КомпоновщикНастроекКД.Настройки); - Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(ПараметрыЗаполнения.КомпоновщикНастроекКД.ПользовательскиеНастройки); + НовыеНастройкиКД = ПараметрыЗаполнения.КомпоновщикНастроекКД.Настройки; + НовыеПользовательскиеНастройкиКД = ПараметрыЗаполнения.КомпоновщикНастроекКД.ПользовательскиеНастройки; + Иначе + Если ПараметрыЗаполнения.Свойство("НастройкиКД") Тогда + НовыеНастройкиКД = ПараметрыЗаполнения.НастройкиКД; + КонецЕсли; + Если ПараметрыЗаполнения.Свойство("ПользовательскиеНастройкиКД") Тогда + НовыеПользовательскиеНастройкиКД = ПараметрыЗаполнения.ПользовательскиеНастройкиКД; + КонецЕсли; КонецЕсли; - Если ПараметрыЗаполнения.Свойство("НастройкиКД") Тогда - Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(ПараметрыЗаполнения.НастройкиКД); + Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда + НовыеНастройкиXML = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "НовыеНастройкиXML"); + Если ТипЗнч(НовыеНастройкиXML) = Тип("Строка") Тогда + Попытка + НовыеНастройкиКД = ОбщегоНазначения.ЗначениеИзСтрокиXML(НовыеНастройкиXML); + Исключение + НовыеНастройкиКД = Неопределено; + КонецПопытки; + НастройкиОтчета.НовыеНастройкиXML = Неопределено; + КонецЕсли; + + НовыеПользовательскиеНастройкиXML = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "НовыеПользовательскиеНастройкиXML"); + Если ТипЗнч(НовыеПользовательскиеНастройкиXML) = Тип("Строка") Тогда + Попытка + НовыеПользовательскиеНастройкиКД = ОбщегоНазначения.ЗначениеИзСтрокиXML(НовыеПользовательскиеНастройкиXML); + Исключение + НовыеПользовательскиеНастройкиКД = Неопределено; + КонецПопытки; + НастройкиОтчета.НовыеПользовательскиеНастройкиXML = Неопределено; + КонецЕсли; КонецЕсли; - Если ПараметрыЗаполнения.Свойство("ПользовательскиеНастройкиКД") Тогда - Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(ПараметрыЗаполнения.ПользовательскиеНастройкиКД); + СброситьПользовательскиеНастройки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "СброситьПользовательскиеНастройки", Ложь); + Если СброситьПользовательскиеНастройки Тогда + НовыеПользовательскиеНастройкиКД = Новый ПользовательскиеНастройкиКомпоновкиДанных; КонецЕсли; - Если ПараметрыЗаполнения.СброситьПользовательскиеНастройки Тогда - ПустойКомпоновщик = Новый КомпоновщикНастроекКомпоновкиДанных; - Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(ПустойКомпоновщик.ПользовательскиеНастройки); + Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда + ОтчетОбъект = ОтчетыСервер.ОтчетОбъект(ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя); + ОтчетОбъект.ПередЗагрузкойНастроекВКомпоновщик( + ЭтотОбъект, + НастройкиОтчета.КлючСхемы, + КлючТекущегоВарианта, + НовыеНастройкиКД, + НовыеПользовательскиеНастройкиКД); + КонецЕсли; + + Если ТипЗнч(НовыеНастройкиКД) = Тип("НастройкиКомпоновкиДанных") + И Отчет.КомпоновщикНастроек.Настройки <> НовыеНастройкиКД Тогда + Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(НовыеНастройкиКД); + Если ТипЗнч(ФормаПараметры.Отбор) = Тип("Структура") Тогда + ОтчетыСервер.УстановитьФиксированныеОтборы(ФормаПараметры.Отбор, Отчет.КомпоновщикНастроек.Настройки, НастройкиОтчета); + КонецЕсли; + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("КлючВарианта", КлючТекущегоВарианта); + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ВариантНаименование", ОтчетНаименованиеТекущегоВарианта); + КонецЕсли; + Если ТипЗнч(НовыеПользовательскиеНастройкиКД) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") + И Отчет.КомпоновщикНастроек.ПользовательскиеНастройки <> НовыеПользовательскиеНастройкиКД Тогда + Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(НовыеПользовательскиеНастройкиКД); КонецЕсли; Если ПараметрыЗаполнения.Свойство("ФормаНастроекРасширенныйРежим") Тогда @@ -1737,11 +1624,7 @@ // Стандартные периоды (установка значений и связей). Для Каждого СвойстваНастройки Из ДобавленныеСтандартныеПериоды Цикл Дополнительно = СвойстваНастройки.Дополнительно; - ЭтотОбъект[Дополнительно.ЗначениеИмя] = СвойстваНастройки.Значение; - ЭтотОбъект[Дополнительно.ВидПериодаИмя] = Дополнительно.ВидПериода; - ЭтотОбъект[Дополнительно.ПредставлениеИмя] = Дополнительно.Представление; - Элементы[Дополнительно.ВидПериодаИмя].ПутьКДанным = Дополнительно.ВидПериодаИмя; - Элементы[Дополнительно.ПредставлениеИмя].ПутьКДанным = Дополнительно.ПредставлениеИмя; + ЭтотОбъект[Дополнительно.ЗначениеИмя] = СвойстваНастройки.Значение; Элементы[Дополнительно.ПериодНачалоИмя].ПутьКДанным = Дополнительно.ЗначениеИмя + ".ДатаНачала"; Элементы[Дополнительно.ПериодОкончаниеИмя].ПутьКДанным = Дополнительно.ЗначениеИмя + ".ДатаОкончания"; КонецЦикла; @@ -1768,42 +1651,44 @@ &НаСервере Процедура ФоновоеЗаданиеЗагрузитьРезультат() + РезультатФормирования = ПолучитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища); + + УдалитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища); + ФоновоеЗаданиеАдресХранилища = Неопределено; + ФоновоеЗаданиеИдентификатор = Неопределено; + + Успех = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(РезультатФормирования, "Успех"); + Если Успех <> Истина Тогда + ПоказатьОшибкиФормирования(РезультатФормирования.ТекстОшибки); + Возврат; + КонецЕсли; + + ДанныеЕщеОбновляются = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(РезультатФормирования, "ДанныеЕщеОбновляются", Ложь); + Если ДанныеЕщеОбновляются Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеДанныеЕщеОбновляются()); + КонецЕсли; + ОтображениеСостояния = Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния; ОтображениеСостояния.Видимость = Ложь; ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.НеИспользовать; ОтображениеСостояния.Картинка = Новый Картинка; ОтображениеСостояния.Текст = ""; - РезультатФормирования = ПолучитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища); + НастройкиПечатиСохранить(); + ОтчетТабличныйДокумент = РезультатФормирования.ТабличныйДокумент; + НастройкиПечатиВосстановить(); - Успех = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(РезультатФормирования, "Успех"); - Если Успех <> Истина Тогда - - СформироватьНепосредственно(); - - Иначе - - НастройкиПечатиСохранить(); - ОтчетТабличныйДокумент = РезультатФормирования.ТабличныйДокумент; - НастройкиПечатиВосстановить(); - - Если ЗначениеЗаполнено(ОтчетДанныеРасшифровки) И ЭтоАдресВременногоХранилища(ОтчетДанныеРасшифровки) Тогда - УдалитьИзВременногоХранилища(ОтчетДанныеРасшифровки); - КонецЕсли; - ОтчетДанныеРасшифровки = ПоместитьВоВременноеХранилище(РезультатФормирования.Расшифровка, УникальныйИдентификатор); - - Если РезультатФормирования.ВариантМодифицирован - Или РезультатФормирования.ПользовательскиеНастройкиМодифицированы Тогда - РезультатФормирования.Вставить("ИмяСобытия", "ПослеФормирования"); - РезультатФормирования.Вставить("Непосредственно", Ложь); - РезультатЗаполненияНастроек = БыстрыеНастройкиЗаполнить(РезультатФормирования); - КонецЕсли; - + Если ЗначениеЗаполнено(ОтчетДанныеРасшифровки) И ЭтоАдресВременногоХранилища(ОтчетДанныеРасшифровки) Тогда + УдалитьИзВременногоХранилища(ОтчетДанныеРасшифровки); КонецЕсли; + ОтчетДанныеРасшифровки = ПоместитьВоВременноеХранилище(РезультатФормирования.Расшифровка, УникальныйИдентификатор); - УдалитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища); - ФоновоеЗаданиеАдресХранилища = Неопределено; - ФоновоеЗаданиеИдентификатор = Неопределено; + Если РезультатФормирования.ВариантМодифицирован + Или РезультатФормирования.ПользовательскиеНастройкиМодифицированы Тогда + РезультатФормирования.Вставить("ИмяСобытия", "ПослеФормирования"); + РезультатФормирования.Вставить("Непосредственно", Ложь); + РезультатЗаполненияНастроек = БыстрыеНастройкиЗаполнить(РезультатФормирования); + КонецЕсли; КонецПроцедуры @@ -1899,6 +1784,7 @@ Процедура ЗаполнитьКомандыВыбораВариантов() ВариантыФормы = РеквизитФормыВЗначение("ДобавленныеВарианты"); ВариантыФормы.Колонки.Добавить("Найден", Новый ОписаниеТипов("Булево")); + АвторизованныйПользователь = Пользователи.АвторизованныйПользователь(); ПараметрыПоиска = Новый Структура; ПараметрыПоиска.Вставить("Отчеты", ОтчетыКлиентСервер.ЗначениеВМассив(НастройкиОтчета.ОтчетСсылка)); @@ -1913,13 +1799,17 @@ СтрокаТаблицы.КлючВарианта = ЭлементСписка.Значение; КонецЦикла; КонецЕсли; - ТаблицаВариантов.Свернуть("Ссылка, КлючВарианта, Наименование"); + ТаблицаВариантов.Свернуть("Ссылка, КлючВарианта, Наименование, Автор, ТолькоДляАвтора"); ТаблицаВариантов.Сортировать("Наименование Возр, КлючВарианта Возр"); Группа = Элементы.ВариантыОтчета; КнопкиГруппы = Группа.ПодчиненныеЭлементы; ПоследнийИндекс = ВариантыФормы.Количество() - 1; Для Каждого СтрокаТаблицы Из ТаблицаВариантов Цикл + Если СтрокаТаблицы.ТолькоДляАвтора = Истина + И СтрокаТаблицы.Автор <> АвторизованныйПользователь Тогда + Продолжить; + КонецЕсли; Найденные = ВариантыФормы.НайтиСтроки(Новый Структура("КлючВарианта, Найден", СтрокаТаблицы.КлючВарианта, Ложь)); Если Найденные.Количество() = 1 Тогда ВариантФормы = Найденные[0]; @@ -1969,8 +1859,7 @@ ОтображениеСостояния.Картинка = БиблиотекаКартинок.ДлительнаяОперация48; ОтображениеСостояния.Текст = НСтр("ru = 'Отчет формируется...'"); ИначеЕсли ПараметрыЗаполнения.ВариантМодифицирован - Или ПараметрыЗаполнения.ПользовательскиеНастройкиМодифицированы - Или ПараметрыЗаполнения.СброситьПользовательскиеНастройки Тогда + Или ПараметрыЗаполнения.ПользовательскиеНастройкиМодифицированы Тогда ОтображениеСостояния = Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния; ОтображениеСостояния.Видимость = Истина; ОтображениеСостояния.Текст = НСтр("ru = 'Изменились настройки. Нажмите ""Сформировать"" для получения отчета.'"); @@ -1981,6 +1870,9 @@ КонецЕсли; КонецЕсли; КонецЕсли; + Если НастройкиОтчета.Безопасный И ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + ВариантМодифицирован = Ложь; + КонецЕсли; КонецПроцедуры &НаСервере @@ -1996,6 +1888,9 @@ &НаСервере Процедура ОбновитьИнформациюОВариантеОтчета() + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("КлючВарианта", КлючТекущегоВарианта); + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ВариантНаименование", ОтчетНаименованиеТекущегоВарианта); + Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 @@ -2019,12 +1914,16 @@ Выборка = Запрос.Выполнить().Выбрать(); + НавигационнаяСсылка = ""; Если Выборка.Следующий() Тогда НастройкиОтчета.Вставить("ВариантСсылка", Выборка.ВариантСсылка); НастройкиОтчета.Вставить("КлючЗамеров", Выборка.КлючЗамеров); НастройкиОтчета.Вставить("ПредопределенныйСсылка", Выборка.ПредопределенныйСсылка); - НастройкиОтчета.Вставить("ИмяИсходногоВарианта", ?(Выборка.Пользовательский, КлючТекущегоВарианта, Выборка.ИмяИсходногоВарианта)); + НастройкиОтчета.Вставить("ИмяИсходногоВарианта", ?(Выборка.Пользовательский, Выборка.ИмяИсходногоВарианта, КлючТекущегоВарианта)); НастройкиОтчета.Вставить("Пользовательский", Выборка.Пользовательский); + Если Не НастройкиОтчета.Внешний Тогда + НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(НастройкиОтчета.ВариантСсылка); + КонецЕсли; Иначе НастройкиОтчета.Вставить("ВариантСсылка", Неопределено); НастройкиОтчета.Вставить("КлючЗамеров", Неопределено); @@ -2034,4 +1933,9 @@ КонецЕсли; КонецПроцедуры +&НаСервереБезКонтекста +Функция СообщениеДанныеЕщеОбновляются() + Возврат НСтр("ru = 'Отчет может содержать некорректные данные, так как не завершен переход на новую версию программы. Если отчет долгое время недоступен, необходимо обратиться к администратору.'"); +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonForms/ФормаПоиска/Help/ru.html b/SSL/src/CommonForms/ФормаПоиска/Help/ru.html new file mode 100644 index 000000000..2e2a5fa25 --- /dev/null +++ b/SSL/src/CommonForms/ФормаПоиска/Help/ru.html @@ -0,0 +1,23 @@ + +

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

            +

            Можно выполнять поиск прямо с Начальной страницы.

            +

            Полнотекстовый поиск

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

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

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

            Ошибки поиска и методы исправления

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

            См. также:

            + \ No newline at end of file diff --git a/SSL/src/CommonForms/ФормаПоиска/Module.bsl b/SSL/src/CommonForms/ФормаПоиска/Module.bsl index 942ef84b2..bb9bb154a 100644 --- a/SSL/src/CommonForms/ФормаПоиска/Module.bsl +++ b/SSL/src/CommonForms/ФормаПоиска/Module.bsl @@ -103,6 +103,13 @@ Процедура СтрокаПоискаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; + + // Для платформы + #Если ВебКлиент Тогда + Если Элементы.СтрокаПоиска.СписокВыбора.Количество() = 1 Тогда + ВыбранноеЗначение = Элемент.ТекстРедактирования; + КонецЕсли; + #КонецЕсли СтрокаПоиска = ВыбранноеЗначение; Искать(0); @@ -170,7 +177,7 @@ КонецПроцедуры &НаКлиенте -Процедура ОбластиПоискаНажатиеПродолжение(Результат, Параметры) Экспорт +Процедура ОбластиПоискаНажатиеПродолжение(Результат, ДополнительныеПараметры) Экспорт Если ТипЗнч(Результат) = Тип("Структура") Тогда ОбластиПоиска = Результат.ОбластиПоиска; @@ -322,7 +329,7 @@ ИмяМетаданного = МетаданныеОбъекта.Имя; ПолноеИмяОбъекта = ВРег(Метаданные.НайтиПоТипу(ТипЗнч(Объект)).ПолноеИмя()); - ЭтоРегистрСведений = (Найти(ПолноеИмяОбъекта, "РЕГИСТРСВЕДЕНИЙ.") > 0); + ЭтоРегистрСведений = (СтрНайти(ПолноеИмяОбъекта, "РЕГИСТРСВЕДЕНИЙ.") > 0); Если Не ЭтоРегистрСведений Тогда // Регистр бухгалтерии или накопления или расчета. Регистратор = Объект["Регистратор"]; diff --git a/SSL/src/CommonForms/ФормаПоиска/ФормаПоиска.mdo b/SSL/src/CommonForms/ФормаПоиска/ФормаПоиска.mdo index 9fa4cbb28..d37825bf4 100644 --- a/SSL/src/CommonForms/ФормаПоиска/ФормаПоиска.mdo +++ b/SSL/src/CommonForms/ФормаПоиска/ФормаПоиска.mdo @@ -5,6 +5,11 @@ ru Форма поиска + + + ru + + PersonalComputer MobileDevice diff --git a/SSL/src/CommonForms/ЭлектроннаяПодпись/Form.form b/SSL/src/CommonForms/ЭлектроннаяПодпись/Form.form index 27862409e..766ea51fb 100644 --- a/SSL/src/CommonForms/ЭлектроннаяПодпись/Form.form +++ b/SSL/src/CommonForms/ЭлектроннаяПодпись/Form.form @@ -174,6 +174,93 @@ Normal + + Статус + 29 + true + true + + true + + + Статус + + Left + + СтатусРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + СтатусКонтекстноеМеню + 30 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + true + Normal + + + + ДатаПроверкиПодписи + 32 + true + true + + true + + + ДатаПроверкиПодписи + + + ДатаПроверкиПодписиРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + ДатаПроверкиПодписиКонтекстноеМеню + 33 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + ФормаКоманднаяПанель -1 @@ -394,6 +481,59 @@ true + + ДатаПроверкиПодписи + + <key>ru</key> + <value>Дата проверки подписи</value> + + 9 + + Date + + + + true + + + true + + + + ПодписьВерна + + <key>ru</key> + <value>Подпись верна</value> + + 10 + + Boolean + + + true + + + true + + + + Статус + + <key>ru</key> + <value>Статус</value> + + 11 + + String + + + + true + + + true + + СохранитьВФайл diff --git a/SSL/src/CommonForms/ЭлектроннаяПодпись/Help/ru.html b/SSL/src/CommonForms/ЭлектроннаяПодпись/Help/ru.html index e73704c9c..3851cb8eb 100644 --- a/SSL/src/CommonForms/ЭлектроннаяПодпись/Help/ru.html +++ b/SSL/src/CommonForms/ЭлектроннаяПодпись/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для просмотра основных свойств электронной подписи. </p> <p>Электронная подпись - реквизит электронного документа, с помощью которого можно удостовериться в неизменности электронного документа с момента его подписи. Контроль неизменности электронного документа осуществляется в результате проверки соответствия электронной подписи и документа,  а также проверки действительности сертификата. Контроль неизменности электронного документа можно выполнить в любой момент времени.</p> <p>С помощью электронной подписи можно:</p> diff --git a/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl index 026617942..126171591 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АдминистрированиеКластераCOMКлиентСервер/Module.bsl @@ -2,7 +2,7 @@ // Подсистема "Базовая функциональность". // Серверные процедуры и функции общего назначения: // - Реализация программного администрирования кластера серверов с использованием. -// COM-объекта V8*.ComConnector +// COM-объекта V8*.ComConnector. // //////////////////////////////////////////////////////////////////////////////// @@ -1025,7 +1025,7 @@ Возврат Новый COMОбъект(СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИмяCOMСоединителя); #Иначе - Если БезопасныйРежим() Тогда + Если БезопасныйРежим() <> Ложь Тогда ВызватьИсключение НСтр("ru = 'Администрирование кластера невозможно в безопасном режиме!'"); КонецЕсли; diff --git a/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl index c0be1dc90..50772486a 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АдминистрированиеКластераRASКлиентСервер/Module.bsl @@ -877,10 +877,6 @@ #КонецОбласти -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - // Возвращает описания сеансов информационной базы. // // Параметры: @@ -1036,6 +1032,65 @@ КонецФункции +// Возвращает каталог исполняемых файлов платформы. +// +// Возвращаемое значение: +// Строка, каталог исполняемых файлов платформы. +// +Функция КаталогИсполняемыхФайловПлатформы() Экспорт + + Результат = КаталогПрограммы(); + СимволРазделителя = ПолучитьРазделительПути(); + + Если Не СтрЗаканчиваетсяНа(Результат, СимволРазделителя) Тогда + Результат = Результат + СимволРазделителя; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает путь к консольному клиенту сервера администрирования. +// +// Возвращаемое значение: +// Строка, путь к консольному клиенту сервера администрирования. +// +Функция ПолучитьКлиентСервераАдминистрирования() Экспорт + + КаталогЗапуска = КаталогИсполняемыхФайловПлатформы(); + Клиент = КаталогЗапуска + "rac"; + + СисИнфо = Новый СистемнаяИнформация(); + Если (СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86) Или (СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64) Тогда + Клиент = Клиент + ".exe"; + КонецЕсли; + + Возврат Клиент; + +КонецФункции + +// Возвращает кодировку стандартных поток вывода и ошибок, используемую в текущей ОС. +// +// Возвращаемое значение: +// КодировкаТекста, кодировка стандартных потоков вывода и ошибок. +// +Функция ПолучитьКодировкуСтандартныхПотоков() Экспорт + + СисИнфо = Новый СистемнаяИнформация(); + Если (СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86) Или (СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64) Тогда + Кодировка = КодировкаТекста.OEM; + Иначе + Кодировка = КодировкаТекста.Системная; + КонецЕсли; + + Возврат Кодировка; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + // Возвращает значения свойств информационной базы. // // Параметры: @@ -1633,7 +1688,7 @@ #Если Сервер Тогда - Если БезопасныйРежим() Тогда + Если БезопасныйРежим() <> Ложь Тогда ВызватьИсключение НСтр("ru = 'Администрирование кластера невозможно в безопасном режиме!'"); КонецЕсли; @@ -1656,7 +1711,7 @@ |Для администрирования кластера через сервер администрирования (ras) требуется установить на данном |компьютере клиент сервера администрирования (rac). |Для его установки: - |- Для компьютеров с ОС Windows требуется перестановить платформу, установив компонент ""Администрирование сервера 1С:Предприятия""; + |- Для компьютеров с ОС Windows требуется переустановить платформу, установив компонент ""Администрирование сервера 1С:Предприятия""; |- Для компьютеров с ОС Linux требуется установить пакет 1c-enterprise83-server*.'"), ФайлКлиента.ПолноеИмя); @@ -1723,17 +1778,27 @@ ЧтениеПотокаОшибок = Новый ЧтениеТекста(ФайлПотокаОшибок, ПолучитьКодировкуСтандартныхПотоков()); ПотокОшибок = ЧтениеПотокаОшибок.Прочитать(); + ЧтениеПотокаОшибок.Закрыть(); + + УдалитьВременныйФайл(ФайлПотокаОшибок); Если ЗначениеЗаполнено(ПотокОшибок) Тогда + УдалитьВременныйФайл(ФайлПотокаВывода); ВызватьИсключение ПотокОшибок; Иначе ЧтениеПотокаВывода = Новый ЧтениеТекста(ФайлПотокаВывода, ПолучитьКодировкуСтандартныхПотоков()); ПотокВывода = ЧтениеПотокаВывода.Прочитать(); + ЧтениеПотокаВывода.Закрыть(); + + УдалитьВременныйФайл(ФайлПотокаВывода); + Если ПотокВывода = Неопределено Тогда + ПотокВывода = ""; + КонецЕсли; Возврат ПотокВывода; @@ -1742,61 +1807,6 @@ КонецФункции -// Возвращает каталог исполняемых файлов платформы. -// -// Возвращаемое значение: -// Строка, каталог исполняемых файлов платформы. -// -Функция КаталогИсполняемыхФайловПлатформы() Экспорт - - Результат = КаталогПрограммы(); - СимволРазделителя = ПолучитьРазделительПути(); - - Если Не СтрЗаканчиваетсяНа(Результат, СимволРазделителя) Тогда - Результат = Результат + СимволРазделителя; - КонецЕсли; - - Возврат Результат; - -КонецФункции - -// Возвращает путь к консольному клиенту сервера администрирования. -// -// Возвращаемое значение: -// Строка, путь к консольному клиенту сервера администрирования. -// -Функция ПолучитьКлиентСервераАдминистрирования() Экспорт - - КаталогЗапуска = КаталогИсполняемыхФайловПлатформы(); - Клиент = КаталогЗапуска + "rac"; - - СисИнфо = Новый СистемнаяИнформация(); - Если (СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86) Или (СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64) Тогда - Клиент = Клиент + ".exe"; - КонецЕсли; - - Возврат Клиент; - -КонецФункции - -// Возвращает кодировку стандартных поток вывода и ошибок, используемую в текущей ОС. -// -// Возвращаемое значение: -// КодировкаТекста, кодировка стандартных потоков вывода и ошибок. -// -Функция ПолучитьКодировкуСтандартныхПотоков() Экспорт - - СисИнфо = Новый СистемнаяИнформация(); - Если (СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86) Или (СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64) Тогда - Кодировка = КодировкаТекста.OEM; - Иначе - Кодировка = КодировкаТекста.Системная; - КонецЕсли; - - Возврат Кодировка; - -КонецФункции - // Преобразует перенаправленный поток вывода консольного клиента сервера // администрирования к массиву соответствий (элементы массива - объекты, // ключи соответствия - имена свойств, значения соответствия - значения свойств). @@ -2347,6 +2357,26 @@ КонецФункции +Процедура УдалитьВременныйФайл(ПолноеИмяФайла) + + Если ПустаяСтрока(ПолноеИмяФайла) Тогда + + Возврат; + + КонецЕсли; + + Попытка + + УдалитьФайлы(ПолноеИмяФайла); + + Исключение + + Возврат; + + КонецПопытки; + +КонецПроцедуры + #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/CommonModules/АдминистрированиеКластераКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдминистрированиеКластераКлиентСервер/Module.bsl index 19a97b017..2c5e4564d 100644 --- a/SSL/src/CommonModules/АдминистрированиеКластераКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АдминистрированиеКластераКлиентСервер/Module.bsl @@ -29,7 +29,7 @@ // не задан список администраторов - используется пустая строка), // ПарольАдминистратораКластера - Строка, пароль учетной записи администратора кластера (если // для кластера не задан список администраторов или для учетной записи не установлен пароль - -// используется пустая строка), +// используется пустая строка). // Функция ПараметрыАдминистрированияКластера() Экспорт @@ -1110,21 +1110,24 @@ Иначе - НовыйЭлементФильтра = Новый Структура("Свойство, ВидСравнения, Значение", Свойство, ВидСравненияЗначений, Значение); - Фильтр = Новый Массив; - Фильтр.Добавить(НовыйЭлементФильтра); + ДобавитьУсловиеФильтра(Фильтр, Свойство, ВидСравненияЗначений, Значение); КонецЕсли; ИначеЕсли ТипЗнч(Фильтр) = Тип("Структура") Тогда - СуществующийЭлементФильтра = Новый Структура("Свойство, ВидСравнения, Значение", Фильтр.Ключ, ВидСравнения.Равно, Фильтр.Значение); - НовыйЭлементФильтра = Новый Структура("Свойство, ВидСравнения, Значение", Свойство, ВидСравненияЗначений, Значение); + НовыйФильтр = Новый Массив; - Фильтр = Новый Массив; - Фильтр.Добавить(СуществующийЭлементФильтра); - Фильтр.Добавить(НовыйЭлементФильтра); + Для каждого КлючИЗначение Из Фильтр Цикл + + ДобавитьУсловиеФильтра(НовыйФильтр, КлючИЗначение.Ключ, ВидСравнения.Равно, КлючИЗначение.Значение); + + КонецЦикла; + + ДобавитьУсловиеФильтра(НовыйФильтр, Свойство, ВидСравненияЗначений, Значение); + + Фильтр = НовыйФильтр; ИначеЕсли ТипЗнч(Фильтр) = Тип("Массив") Тогда diff --git a/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl index aa7b3914f..1afafbae6 100644 --- a/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl @@ -234,11 +234,11 @@ КонецФункции // Возвращает полное наименование адресного объекта по его сокращению. -// Если уровень не указан, то возвращает первое найденное совпадение +// Если уровень не указан, то возвращает первое найденное совпадение. // // Параметры: // АдресноеСокращение - Строка - сокрушение адресного объекта -// Уровень - Число - код уровня адресного объекта +// Уровень - Число - код уровня адресного объекта. // // Возвращаемое значение: // Строка - полное наименование адресного объекта @@ -261,7 +261,7 @@ КонецЕсли; Запрос.УстановитьПараметр("Сокращение", АдресноеСокращение); - РезультатЗапроса = Запрос.Выполнить().Выбрать();; + РезультатЗапроса = Запрос.Выполнить().Выбрать(); Пока РезультатЗапроса.Следующий() Цикл Возврат РезультатЗапроса.Наименование; @@ -271,5 +271,21 @@ КонецФункции +// Получает идентификаторы адреса через веб-сервис. +// +// Параметры: +// Адрес - Строка - Строка XML контактной информации содержащая адрес. +// Возвращаемое значение: +// Структура - набор пар ключ-значение. +// * ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - Идентификатор адресного объекта (улицы, нас. пункта). +// * ИдентификаторДома - УникальныйИдентификатор - Идентификатор дома адресного объекта. +// * Отказ - Булево - Поставщик не доступен. +// * ПодробноеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен иначе Неопределено. +// * КраткоеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен иначе Неопределено. +// +Функция ИдентификаторыАдреса(Адрес) Экспорт + Возврат АдресныйКлассификаторСлужебный.ОпределитьИдентификаторыАдреса(Адрес); +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/АдресныйКлассификаторВМоделиСервисаСлужебный/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторВМоделиСервисаСлужебный/Module.bsl index bf518dc8f..dc63a0ed2 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторВМоделиСервисаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторВМоделиСервисаСлужебный/Module.bsl @@ -2,7 +2,7 @@ // Подсистема "Адресный классификатор" в модели сервиса. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#Область СлужебныйПрограммныйИнтерфейс +#Область ПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт diff --git a/SSL/src/CommonModules/АдресныйКлассификаторВызовСервера/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторВызовСервера/Module.bsl index 745ae843b..ac21682e6 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторВызовСервера/Module.bsl @@ -4,14 +4,6 @@ #Область СлужебныеПроцедурыИФункции -// Возвращает флаг разрешения загрузки или очистки адресного классификатора. -// -Функция МожноИзменятьАдресныйКлассификатор() Экспорт - - Возврат Не ОбщегоНазначенияПовтИсп.РазделениеВключено(); - -КонецФункции - // Данные для запроса разрешений профилей безопасности для обновления на сайте 1С. // // Возвращаемое значение: diff --git a/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl index b22d08f73..1cbd93503 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl @@ -22,18 +22,19 @@ Если Не ЗапрашиватьДоступПриИспользовании() Тогда // Разрешения уже получены на всю конфигурацию. - ОткрытьФормуПроверкиОбновления(ПараметрыВыполнения); + ПараметрыФормы = Новый Структура("Режим", "ПроверкаОбновления"); + ОткрытьФормуЗагрузкиАдресногоКлассификатора(ПараметрыВыполнения, ПараметрыФормы); Возврат; КонецЕсли; // Нужен запрос профиля безопасности. ОписаниеОповещения = Новый ОписаниеОповещения( - "ПолучениеРазрешенияБезопасностиПроверкиНаличияОбновленияАдресныхОбъектов", + "ПолучениеРазрешенияБезопасностиПроверкиНаличияОбновленияАдресныхОбъектов", ЭтотОбъект, ПараметрыВыполнения); РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов( - АдресныйКлассификаторВызовСервера.ЗапросРазрешенийБезопасностиОбновления(), - Владелец, ОписаниеОповещения,); + АдресныйКлассификаторВызовСервера.ЗапросРазрешенийБезопасностиОбновления(), + Владелец, ОписаниеОповещения); КонецПроцедуры @@ -76,18 +77,32 @@ // Параметры: // ПараметрыВыполнения - ПараметрыВыполненияКоманды, Структура - параметры открытия формы. // -Процедура ОткрытьФормуПроверкиОбновления(ПараметрыВыполнения) +Процедура ОткрытьФормуЗагрузкиАдресногоКлассификатора(ПараметрыФормы, ПараметрыВыполнения, ОповещениеОЗакрытие = Неопределено) Экспорт - Если ПараметрыВыполнения = Неопределено Тогда - ПараметрыВыполнения = Новый Структура("Уникальность, Окно, НавигационнаяСсылка, Источник", Ложь); + ПараметрыВыполненияФормы = Новый Структура("Уникальность, Окно, НавигационнаяСсылка, Источник", Ложь); + Если ТипЗнч(ПараметрыВыполнения) = Тип("Структура") Тогда + ПараметрыВыполненияФормы = Новый Структура("Уникальность, Окно, НавигационнаяСсылка, Источник", Ложь); + ЗаполнитьЗначенияСвойств(ПараметрыВыполненияФормы, ПараметрыВыполнения); КонецЕсли; + ОткрытьФорму("РегистрСведений.АдресныеОбъекты.Форма.ЗагрузкаАдресногоКлассификатора", ПараметрыВыполнения, + ПараметрыВыполненияФормы.Источник, ПараметрыВыполненияФормы.Уникальность, + ПараметрыВыполненияФормы.Окно, ПараметрыВыполненияФормы.НавигационнаяСсылка, ОповещениеОЗакрытие); + +КонецПроцедуры + +// Устарела. Следует использовать ОткрытьФормуЗагрузкиАдресногоКлассификатора. +// Проверяет наличие обновлений адресного классификатора на сайте +// для тех субъектов, которые ранее уже загружались. +// +// Параметры: +// ПараметрыВыполнения - ПараметрыВыполненияКоманды, Структура - параметры открытия формы. +// +Процедура ОткрытьФормуПроверкиОбновления(ПараметрыВыполнения) Экспорт + ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("Режим", "ПроверкаОбновления"); - - ОткрытьФорму("РегистрСведений.АдресныеОбъекты.Форма.ЗагрузкаАдресногоКлассификатора", ПараметрыФормы, - ПараметрыВыполнения.Источник, ПараметрыВыполнения.Уникальность, - ПараметрыВыполнения.Окно, ПараметрыВыполнения.НавигационнаяСсылка); + ОткрытьФормуЗагрузкиАдресногоКлассификатора(ПараметрыФормы, ПараметрыВыполнения); КонецПроцедуры #КонецОбласти @@ -165,7 +180,8 @@ Возврат; КонецЕсли; - ОткрытьФормуПроверкиОбновления(ДополнительныеПараметры); + ПараметрыФормы = Новый Структура("Режим", "ПроверкаОбновления"); + ОткрытьФормуЗагрузкиАдресногоКлассификатора(ДополнительныеПараметры, ПараметрыФормы); КонецПроцедуры Функция ЗапрашиватьДоступПриИспользовании() diff --git a/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl index 20e25abb5..6c7e76c5d 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторСлужебный/Module.bsl @@ -52,7 +52,7 @@ // Заполнение данных для проверки версии по загружаемым данным. // -Процедура ЗаполнитьВерсиюПоставщикаДанныхВнутр(Результат) Экспорт +Процедура ЗаполнитьВерсиюПоставщикаДанныхВнутр(Результат) Результат.Данные = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'БСП %1'"), СтандартныеПодсистемыСервер.ВерсияБиблиотеки()); @@ -114,9 +114,90 @@ Возврат Результат; КонецФункции +// Ищет в адресном классификаторе по загруженным регионам код субъекта РФ по почтовому индексу. +// +// Параметры: +// ПочтовыйИндекс - Число - почтовый индекс. +// +// Возвращаемое значение: +// Число - Код субъекта РФ, где расположен этот почтовый индекс. Неопределенно - если код не найден. +// +Функция КодСубъектаРФПоПочтовомуИндексуВКлассификаторе(ПочтовыйИндекс) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ + |ИЗ + | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты + |ГДЕ + | АдресныеОбъекты.ПочтовыйИндекс = &ПочтовыйИндекс + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ДомаЗданияСтроения.КодСубъектаРФ + |ИЗ + | РегистрСведений.ДомаЗданияСтроения КАК ДомаЗданияСтроения + |ГДЕ + | ДомаЗданияСтроения.ПочтовыйИндекс = &ПочтовыйИндекс"; + + Запрос.УстановитьПараметр("ПочтовыйИндекс", ПочтовыйИндекс); + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + + Пока РезультатЗапроса.Следующий() Цикл + Если ЗначениеЗаполнено(РезультатЗапроса.КодСубъектаРФ) Тогда; + Возврат РезультатЗапроса.КодСубъектаРФ; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +// Определить регион по индексу +// +// Параметры: +// Индекс - Строка - Почтовый индекс определимого региона. +// +// Возвращаемое значение: +// Структура - Код и наименование региона, Неопределенно - если регион не найден. +// * КодСубъектаРФ - Число - код субъекта РФ +// * Представление - Строка - представление субъекта РФ. +// +Функция ОпределитьРегионПоИндексу(Индекс) Экспорт + Сведения = СведенияОСубъектахРФ(); + Результат = Новый Структура("Представление, КодСубъектаРФ"); + + ПервыйТриЦифрыИндекса = Число(Лев(Индекс, 3)); + Для каждого Регион Из Сведения Цикл + ДиапазонПочтовыхИндексов = Регион.ДиапазонПочтовыхИндексов; + Диапазоны = СтрРазделить(ДиапазонПочтовыхИндексов, ","); + Для каждого Диапазон Из Диапазоны Цикл + Интервалы = СтрРазделить(Диапазон, "-"); + Если Интервалы.Количество() = 1 Тогда + Если Число(Интервалы[0]) = ПервыйТриЦифрыИндекса Тогда + Результат.КодСубъектаРФ = Регион.КодСубъектаРФ; + Результат.Представление = ПредставлениеРегиона(Регион.Наименование, Регион.Сокращение); + Возврат Результат; + КонецЕсли; + Иначе + Если Число(Число(Интервалы[1])) >= ПервыйТриЦифрыИндекса + И Число(Интервалы[0]) <= ПервыйТриЦифрыИндекса Тогда + Результат.КодСубъектаРФ = Регион.КодСубъектаРФ; + Результат.Представление = ПредставлениеРегиона(Регион.Наименование, Регион.Сокращение); + Возврат Результат; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Возврат Неопределено; +КонецФункции + // Конструктор таблицы - результата выбора по почтовому индексу. // -Функция ТаблицаДанныхДляВыбораПоПочтовомуИндексу() Экспорт +Функция ТаблицаДанныхДляВыбораПоПочтовомуИндексу() Данные = Новый ТаблицаЗначений; Колонки = Данные.Колонки; @@ -162,7 +243,7 @@ // Заполнение адреса по индексу из загруженных данных. // -Процедура ЗаполнитьАдресаПоПочтовомуИндексуКлассификатораВнутр(Результат, Индекс, Уровни, ДополнительныеПараметры) Экспорт +Процедура ЗаполнитьАдресаПоПочтовомуИндексуКлассификатораВнутр(Результат, Индекс, Уровни, ДополнительныеПараметры) ТекстЗапроса = "ВЫБРАТЬ | АдресныеОбъекты.Уровень КАК Уровень, @@ -191,7 +272,7 @@ |ГДЕ | ДомаЗданияСтроения.ПочтовыйИндекс = &ПочтовыйИндекс | И АдресныеОбъекты.ПочтовыйИндекс = 0 - | И АдресныеОбъекты.Уровень В(&Уровни) И ( АдресныеОбъекты.Уровень = 7 ИЛИ АдресныеОбъекты.Уровень = 6) + | И АдресныеОбъекты.Уровень В(&Уровни) | |ОБЪЕДИНИТЬ ВСЕ | @@ -218,7 +299,7 @@ | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты |ГДЕ | АдресныеОбъекты.ПочтовыйИндекс = &ПочтовыйИндекс - | И АдресныеОбъекты.Уровень В(&Уровни) И ( АдресныеОбъекты.Уровень = 7 ИЛИ АдресныеОбъекты.Уровень = 6) + | И АдресныеОбъекты.Уровень В(&Уровни) |; | |//////////////////////////////////////////////////////////////////////////////// @@ -359,24 +440,6 @@ |ГДЕ | АдресныйОбъект.ПочтовыйИндекс = &ПочтовыйИндекс | И АдресныйОбъект.Уровень В(&Уровни) - | И (СубъектРФ.Уровень ЕСТЬ NULL - | ИЛИ СубъектРФ.Уровень В (&Уровни)) - | И (Округ.Уровень ЕСТЬ NULL - | ИЛИ Округ.Уровень В (&Уровни)) - | И (Район.Уровень ЕСТЬ NULL - | ИЛИ Район.Уровень В (&Уровни)) - | И (Город.Уровень ЕСТЬ NULL - | ИЛИ Город.Уровень В (&Уровни)) - | И (ВнутригородскойРайон.Уровень ЕСТЬ NULL - | ИЛИ ВнутригородскойРайон.Уровень В (&Уровни)) - | И (НаселенныйПункт.Уровень ЕСТЬ NULL - | ИЛИ НаселенныйПункт.Уровень В (&Уровни)) - | И (Улица.Уровень ЕСТЬ NULL - | ИЛИ Улица.Уровень В (&Уровни)) - | И (Дополнительный.Уровень ЕСТЬ NULL - | ИЛИ Дополнительный.Уровень В (&Уровни)) - | И (Подчиненный.Уровень ЕСТЬ NULL - | ИЛИ Подчиненный.Уровень В (&Уровни)) | |УПОРЯДОЧИТЬ ПО | Наименование @@ -551,7 +614,7 @@ // Конструктор таблицы - результата выбора. // -Функция ТаблицаДанныхДляИнтерактивногоВыбора() Экспорт +Функция ТаблицаДанныхДляИнтерактивногоВыбора() ТипБулево = Новый ОписаниеТипов("Булево"); Данные = Новый ТаблицаЗначений; @@ -628,7 +691,7 @@ // Заполнение данных для выбора адреса из загруженных данных. // -Процедура ЗаполнитьАдресаДляИнтерактивногоВыбораВнутр(Результат, Уровни, Родитель, Уровень, ДополнительныеПараметры) Экспорт +Процедура ЗаполнитьАдресаДляИнтерактивногоВыбораВнутр(Результат, Уровни, Родитель, Уровень, ДополнительныеПараметры) ПараметрПерваяЗапись = Неопределено; ТекстРазмерПорции = ""; @@ -963,36 +1026,39 @@ Возврат Результат; КонецФункции -// Возвращает список для автоподбора элемента адреса, поиск по подобию. +// Возвращает список домов по идентификатору адресного объекта, поиск по подобию. // // Параметры: -// Текст - Строка - Текст, введенный в поле. -// Родитель - УникальныйИдентификатор - Родительский объект. -// Уровни - Массив, ФиксированныйМассив - Набор требуемых уровней данных. 1-7, 90, 91 - адресные -// объекты, -1 - ориентиры. -// ДополнительныеПараметры - Структура - Описание настройке поиска. Поля: -// * ФорматАдреса - Строка - Тип используемого классификатора. +// ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - Родительский объект. +// СтрокаПоиска - Строка - Текст, отбора в списке домов. // // Возвращаемое значение: -// Структура - найденные варианты. Содержит поля: -// * Отказ - Булево - Поставщик не доступен. -// * ПодробноеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ -// = Ложь. -// * КраткоеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ -// = Ложь. -// * Данные - ТаблицаЗначений - Содержит данные для выбора. Колонки: -// ** Неактуален - Булево - Флаг неактуальности строки данных. -// ** Идентификатор - УникальныйИдентификатор - Код классификатора для поиска вариантов по индексу. -// ** Представление - Строка - Представление варианта. -// ** РегионЗагружен - Булево - Имеет смысл только для регионов. Истина, если есть записи. +// ТаблицаЗначений - найденные варианты. // -Функция ВариантыАвтоподбораНомеровДомов(ИдентификаторАдресногоОбъекта, Текст) Экспорт +Функция СписокДомов(ИдентификаторАдресногоОбъекта, Знач СтрокаПоиска) Экспорт - ВариантыДомов = Новый СписокЗначений; + ВариантыДомов = Новый ТаблицаЗначений; + КолонкаДомЧислом = ВариантыДомов.Колонки.Добавить("ДомЧислом", ОбщегоНазначения.ОписаниеТипаЧисло(5)); + КолонкаДом = ВариантыДомов.Колонки.Добавить("Дом", ОбщегоНазначения.ОписаниеТипаСтрока(20)); + КолонкаКорпус = ВариантыДомов.Колонки.Добавить("Корпус", ОбщегоНазначения.ОписаниеТипаСтрока(20)); + КолонкаСтроение = ВариантыДомов.Колонки.Добавить("Строение", ОбщегоНазначения.ОписаниеТипаСтрока(20)); + ВариантыДомов.Колонки.Добавить("Значение"); + ВариантыДомов.Колонки.Добавить("Представление"); + ВариантыДомов.Колонки.Индекс(КолонкаДомЧислом); + ВариантыДомов.Колонки.Индекс(КолонкаДом); + ВариантыДомов.Колонки.Индекс(КолонкаКорпус); + ВариантыДомов.Колонки.Индекс(КолонкаСтроение); + + Если СтрЗаканчиваетсяНа(СтрокаПоиска, "%") Тогда + ТочноеСовпадение = Ложь; + СтрокаПоиска = Лев(СтрокаПоиска, СтрДлина(СтрокаПоиска) - 1); + Иначе + ТочноеСовпадение = Истина; + КонецЕсли; + Источник = ИсточникДанныхАдресногоКлассификатора(); Если ПустаяСтрока(Источник) Тогда - // Локальное, всегда корректное. Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ @@ -1011,7 +1077,7 @@ Если Не ПустаяСтрока(Описание) Тогда Описание = Сред(Описание, 25); Если Не ПустаяСтрока(Описание) Тогда - ИзвлечьСписокДомов(Описание, Текст, ВариантыДомов); + ИзвлечьСписокДомов(Описание, СтрокаПоиска, ВариантыДомов, ТочноеСовпадение); КонецЕсли; КонецЕсли; КонецЕсли; @@ -1021,15 +1087,15 @@ Возврат ВариантыДомов; КонецЕсли; - ВариантыДомов.СортироватьПоЗначению(); + ВариантыДомов.Сортировать("ДомЧислом, Дом, Строение, Корпус"); + Возврат ВариантыДомов; КонецФункции - // Конструктор таблицы - результата автоподбора. // -Функция ТаблицаДанныхАвтоподбора() Экспорт +Функция ТаблицаДанныхАвтоподбора() ТипБулево = Новый ОписаниеТипов("Булево"); Данные = Новый ТаблицаЗначений; @@ -1067,7 +1133,7 @@ // Заполнение данных для автоподбора из загруженных данных. // -Процедура ЗаполнитьСписокАвтоподбораЧастиАдресаВнутр(Результат, Текст, Родитель, УровниЗапроса, ДополнительныеПараметры) Экспорт +Процедура ЗаполнитьСписокАвтоподбораЧастиАдресаВнутр(Результат, Текст, Родитель, УровниЗапроса, ДополнительныеПараметры) ОтбиратьЗаписейДляАнализа = "300"; ОтбиратьЗаписейДляСписка = "20"; @@ -1600,127 +1666,14 @@ ДобавитьВПредставлениеЭлементАдреса(Представление, Строка.СубъектРФНаименование, Строка.СубъектРФСокращение); СтрокаРезультата.Представление = Представление; + Если СтрокаРезультата.РегионЗагружен = Ложь И НЕ ЗначениеЗаполнено(Строка.СубъектРФНаименование) Тогда + СтрокаРезультата.Неактуален = Ложь; + КонецЕсли; + КонецЦикла; КонецПроцедуры -// Возвращает вспомогательные данные - коды ОКАТО, ОКТМО и т.п. -// -// Параметры: -// Идентификатор - УникальныйИдентификатор - Идентификатор адресного объекта, ориентира или вспомогательных данных. -// -// Возвращаемое значение: -// Структура - найденные варианты. Содержит поля: -// * Отказ - Булево - Поставщик не доступен. -// * ПодробноеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ -// = Ложь. -// * КраткоеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ -// = Ложь. -// * Данные - Структура - Поля данных: -// ** OKATO - Число, Неопределено, если результат не найден. -// ** ОКТМО - Число, Неопределено, если результат не найден. -// ** КодИФНСФЛ - Число, Неопределено, если результат не найден. -// ** КодИФНСЮЛ - Число, Неопределено, если результат не найден. -// ** КодУчасткаИФНСФЛ - Число, Неопределено, если результат не найден. -// ** КодУчасткаИФНСЮЛ - Число, Неопределено, если результат не найден. -// -Функция ДополнительныеАдресныеСведения(Идентификатор) Экспорт - - Результат = Новый Структура("Данные", СтруктураДополнительныхАдресныхСведений() ); - СтруктураОписанияОшибкиПоставщика(Результат); - - Источник = ИсточникДанныхАдресногоКлассификатора(); - Если ПустаяСтрока(Источник) Тогда - // Локальное, всегда корректное. - ЗаполнитьДополнительныеАдресныеСведенияВнутр(Результат, Идентификатор); - - ИначеЕсли Источник = "Сервис1С" Тогда - // Веб сервис 1С, может быть на обслуживании. - Попытка - ЗаполнитьДополнительныеАдресныеСведенияСервис1С(Результат, Идентификатор); - Исключение - СтруктураОписанияОшибкиПоставщика(Результат, ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации( СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , Результат.ПодробноеПредставлениеОшибки); - КонецПопытки; - - КонецЕсли; - - Возврат Результат; -КонецФункции - -// Конструктор структуры - результата. -// -Функция СтруктураДополнительныхАдресныхСведений() Экспорт - - Возврат Новый Структура("OKATO, ОКТМО, КодИФНСФЛ, КодИФНСЮЛ, КодУчасткаИФНСФЛ, КодУчасткаИФНСЮЛ"); - -КонецФункции - -// Заполнение дополнительных данных по данным сервиса 1С. -// -Процедура ЗаполнитьДополнительныеАдресныеСведенияСервис1С(Результат, Идентификатор) - - Сервис = АдресныйКлассификаторПовтИсп.СервисКлассификатора1С(); - - КодЯзыка = ТекущийКодЛокализации(); - ДанныеСервиса = Сервис.GetExtraInfo(Строка(Идентификатор), КодЯзыка, Метаданные.Имя); - - Данные = Результат.Данные; - Данные.OKATO = ДанныеСервиса.OKATO; - Данные.ОКТМО = ДанныеСервиса.OKTMO; - Данные.КодИФНСФЛ = ДанныеСервиса.IFNSFL; - Данные.КодИФНСЮЛ = ДанныеСервиса.IFNSUL; - Данные.КодУчасткаИФНСФЛ = ДанныеСервиса.TERRIFNSFL; - Данные.КодУчасткаИФНСЮЛ = ДанныеСервиса.TERRIFNSUL; - -КонецПроцедуры - -// Заполнение дополнительных данных из загруженных данных. -// -Процедура ЗаполнитьДополнительныеАдресныеСведенияВнутр(Результат, Идентификатор) Экспорт - - ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 1 - | OKATO, - | ОКТМО, - | КодИФНСФЛ, - | КодИФНСЮЛ, - | КодУчасткаИФНСФЛ, - | КодУчасткаИФНСЮЛ - |ИЗ - | РегистрСведений.ДополнительныеАдресныеСведения - |ГДЕ - | Идентификатор В ( - | // Как идентификатор дополнительных сведений - | ВЫБРАТЬ - | &Идентификатор - | ОБЪЕДИНИТЬ ВСЕ - | // Как идентификатор адресного объекта - | ВЫБРАТЬ ПЕРВЫЕ 1 - | Дополнительно - | ИЗ - | РегистрСведений.АдресныеОбъекты - | ГДЕ - | Идентификатор = &Идентификатор - | // Как идентификатор ориентира - | ОБЪЕДИНИТЬ ВСЕ - | ВЫБРАТЬ ПЕРВЫЕ 1 - | Дополнительно - | ИЗ - | РегистрСведений.ОриентирыАдресныхОбъектов - | ГДЕ - | Идентификатор = &Идентификатор - | )"; - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("Идентификатор", Идентификатор); - - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - ЗаполнитьЗначенияСвойств(Результат.Данные, Выборка); - КонецЕсли; - -КонецПроцедуры - // Возвращает актуальные данные адресного объекта или ориентира с точностью доя подчиненного (без домов). // // Параметры: @@ -1775,7 +1728,7 @@ // Заполнение актуальных данных адресного объекта или ориентира из загруженных данных. // -Процедура ЗаполнитьАктуальныеАдресныеСведенияВнутр(Результат, Идентификатор) Экспорт +Процедура ЗаполнитьАктуальныеАдресныеСведенияВнутр(Результат, Идентификатор) ТекстЗапроса = "ВЫБРАТЬ | СубъектРФ.Наименование + "" "" + СубъектРФ.Сокращение КАК СубъектРФПредставление, @@ -2056,162 +2009,18 @@ Возврат "10200000"; КонецФункции -// Устанавливает значения идентификаторов для частей адреса. -// -// Параметры: -// ИдентификаторАдреса - УникальныйИдентификатор - Источник данных для заполнения. -// НаселенныйПунктДетально - Структура - части адреса. -// -Процедура УстановитьИдентификаторыЧастейАдреса(ЧастиАдреса) Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | Регион.Идентификатор КАК ИдентификаторРегион, - | Округ.Идентификатор КАК ИдентификаторОкруг, - | Район.Идентификатор КАК ИдентификаторРайон, - | Город.Идентификатор КАК ИдентификаторГород, - | ВнутригРайон.Идентификатор КАК ИдентификаторВнутригРайон, - | НаселенныйПункт.Идентификатор КАК ИдентификаторНаселенныйПункт, - | Улица.Идентификатор КАК ИдентификаторУлица, - | ДополнительныйЭлемент.Идентификатор КАК ИдентификаторДополнительныйЭлемент, - | ПодчиненныйЭлемент.Идентификатор КАК ИдентификаторПодчиненныйЭлемент - |ИЗ - | РегистрСведений.АдресныеОбъекты КАК АдресныйОбъект - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК Регион - | ПО (Регион.Уровень = 1) - | И (Регион.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ) - | И (Регион.КодОкруга = 0) - | И (Регион.КодРайона = 0) - | И (Регион.КодГорода = 0) - | И (Регион.КодВнутригородскогоРайона = 0) - | И (Регион.КодНаселенногоПункта = 0) - | И (Регион.КодУлицы = 0) - | И (Регион.КодДополнительногоЭлемента = 0) - | И (Регион.КодПодчиненногоЭлемента = 0) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК Округ - | ПО (Округ.Уровень = 2) - | И (Округ.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ) - | И (Округ.КодОкруга = АдресныйОбъект.КодОкруга) - | И (Округ.КодРайона = 0) - | И (Округ.КодГорода = 0) - | И (Округ.КодВнутригородскогоРайона = 0) - | И (Округ.КодНаселенногоПункта = 0) - | И (Округ.КодУлицы = 0) - | И (Округ.КодДополнительногоЭлемента = 0) - | И (Округ.КодПодчиненногоЭлемента = 0) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК Район - | ПО (Район.Уровень = 3) - | И (Район.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ) - | И (Район.КодОкруга = АдресныйОбъект.КодОкруга) - | И (Район.КодРайона = АдресныйОбъект.КодРайона) - | И (Район.КодГорода = 0) - | И (Район.КодВнутригородскогоРайона = 0) - | И (Район.КодНаселенногоПункта = 0) - | И (Район.КодУлицы = 0) - | И (Район.КодДополнительногоЭлемента = 0) - | И (Район.КодПодчиненногоЭлемента = 0) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК Город - | ПО (Город.Уровень = 4) - | И (Город.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ) - | И (Город.КодОкруга = АдресныйОбъект.КодОкруга) - | И (Город.КодРайона = АдресныйОбъект.КодРайона) - | И (Город.КодГорода = АдресныйОбъект.КодГорода) - | И (Город.КодВнутригородскогоРайона = 0) - | И (Город.КодНаселенногоПункта = 0) - | И (Город.КодУлицы = 0) - | И (Город.КодДополнительногоЭлемента = 0) - | И (Город.КодПодчиненногоЭлемента = 0) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК ВнутригРайон - | ПО (ВнутригРайон.Уровень = 5) - | И (ВнутригРайон.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ) - | И (ВнутригРайон.КодОкруга = АдресныйОбъект.КодОкруга) - | И (ВнутригРайон.КодРайона = АдресныйОбъект.КодРайона) - | И (ВнутригРайон.КодГорода = АдресныйОбъект.КодГорода) - | И (ВнутригРайон.КодВнутригородскогоРайона = АдресныйОбъект.КодВнутригородскогоРайона) - | И (ВнутригРайон.КодНаселенногоПункта = 0) - | И (ВнутригРайон.КодУлицы = 0) - | И (ВнутригРайон.КодДополнительногоЭлемента = 0) - | И (ВнутригРайон.КодПодчиненногоЭлемента = 0) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК НаселенныйПункт - | ПО (НаселенныйПункт.Уровень = 6) - | И (НаселенныйПункт.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ) - | И (НаселенныйПункт.КодОкруга = АдресныйОбъект.КодОкруга) - | И (НаселенныйПункт.КодРайона = АдресныйОбъект.КодРайона) - | И (НаселенныйПункт.КодГорода = АдресныйОбъект.КодГорода) - | И (НаселенныйПункт.КодВнутригородскогоРайона = АдресныйОбъект.КодВнутригородскогоРайона) - | И (НаселенныйПункт.КодНаселенногоПункта = АдресныйОбъект.КодНаселенногоПункта) - | И (НаселенныйПункт.КодУлицы = 0) - | И (НаселенныйПункт.КодДополнительногоЭлемента = 0) - | И (НаселенныйПункт.КодПодчиненногоЭлемента = 0) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК Улица - | ПО (Улица.Уровень = 7) - | И (Улица.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ) - | И (Улица.КодОкруга = АдресныйОбъект.КодОкруга) - | И (Улица.КодРайона = АдресныйОбъект.КодРайона) - | И (Улица.КодГорода = АдресныйОбъект.КодГорода) - | И (Улица.КодВнутригородскогоРайона = АдресныйОбъект.КодВнутригородскогоРайона) - | И (Улица.КодНаселенногоПункта = АдресныйОбъект.КодНаселенногоПункта) - | И (Улица.КодУлицы = АдресныйОбъект.КодУлицы) - | И (Улица.КодДополнительногоЭлемента = 0) - | И (Улица.КодПодчиненногоЭлемента = 0) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК ДополнительныйЭлемент - | ПО (ДополнительныйЭлемент.Уровень = 90) - | И (ДополнительныйЭлемент.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ) - | И (ДополнительныйЭлемент.КодОкруга = АдресныйОбъект.КодОкруга) - | И (ДополнительныйЭлемент.КодРайона = АдресныйОбъект.КодРайона) - | И (ДополнительныйЭлемент.КодГорода = АдресныйОбъект.КодГорода) - | И (ДополнительныйЭлемент.КодВнутригородскогоРайона = АдресныйОбъект.КодВнутригородскогоРайона) - | И (ДополнительныйЭлемент.КодНаселенногоПункта = АдресныйОбъект.КодНаселенногоПункта) - | И (ДополнительныйЭлемент.КодУлицы = АдресныйОбъект.КодУлицы) - | И (ДополнительныйЭлемент.КодДополнительногоЭлемента = АдресныйОбъект.КодДополнительногоЭлемента) - | И (ДополнительныйЭлемент.КодПодчиненногоЭлемента = 0) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК ПодчиненныйЭлемент - | ПО (ПодчиненныйЭлемент.Уровень = 91) - | И (ПодчиненныйЭлемент.КодСубъектаРФ = АдресныйОбъект.КодСубъектаРФ) - | И (ПодчиненныйЭлемент.КодОкруга = АдресныйОбъект.КодОкруга) - | И (ПодчиненныйЭлемент.КодРайона = АдресныйОбъект.КодРайона) - | И (ПодчиненныйЭлемент.КодГорода = АдресныйОбъект.КодГорода) - | И (ПодчиненныйЭлемент.КодВнутригородскогоРайона = АдресныйОбъект.КодВнутригородскогоРайона) - | И (ПодчиненныйЭлемент.КодНаселенногоПункта = АдресныйОбъект.КодНаселенногоПункта) - | И (ПодчиненныйЭлемент.КодУлицы = АдресныйОбъект.КодУлицы) - | И (ПодчиненныйЭлемент.КодДополнительногоЭлемента = АдресныйОбъект.КодДополнительногоЭлемента) - | И (ПодчиненныйЭлемент.КодПодчиненногоЭлемента = АдресныйОбъект.КодПодчиненногоЭлемента) "; - - Где = ""; - Разделитель = " ГДЕ "; - Для каждого Часть Из ЧастиАдреса Цикл - Значение = Часть.Значение; - Если ЗначениеЗаполнено(Значение.Представление) Тогда - Где = Где + Разделитель + Часть.Ключ +".Наименование = """ + Значение.Наименование + """ И " + Часть.Ключ + ".Сокращение = """ + Значение.Сокращение + """"; - Разделитель = " И "; - КонецЕсли; - КонецЦикла; - Запрос.Текст = Запрос.Текст + Где; - РезультатЗапроса = Запрос.Выполнить().Выбрать(); - - Если РезультатЗапроса.Следующий() Тогда - Для каждого Часть Из ЧастиАдреса Цикл - Если ЗначениеЗаполнено(Часть.Значение.Представление) Тогда - Часть.Значение.Идентификатор = РезультатЗапроса["Идентификатор" + Часть.Ключ]; - КонецЕсли; - КонецЦикла; - КонецЕсли; - -КонецПроцедуры - Процедура УстановитьИдентификаторыНаселенногоПункта(ЧастиАдреса, ИдентификаторНаселенногоПункта) Экспорт ПоляАдреса = Новый Соответствие(); - ПоляАдреса.Вставить("Регион", ЧастиАдреса.Регион); - ПоляАдреса.Вставить("Округ", ЧастиАдреса.Округ); - ПоляАдреса.Вставить("Район", ЧастиАдреса.Район); - ПоляАдреса.Вставить("Город", ЧастиАдреса.Город); - ПоляАдреса.Вставить("ВнутригородскойРайон", ЧастиАдреса.ВнутригРайон); - ПоляАдреса.Вставить("НаселенныйПункт", ЧастиАдреса.НаселенныйПункт); - ПоляАдреса.Вставить("Улица", ЧастиАдреса.Улица); + ВставитьЧастьАдреса("Регион", ЧастиАдреса.Регион, ПоляАдреса); + ВставитьЧастьАдреса("Округ", ЧастиАдреса.Округ, ПоляАдреса); + ВставитьЧастьАдреса("Район", ЧастиАдреса.Район, ПоляАдреса); + ВставитьЧастьАдреса("Город", ЧастиАдреса.Город, ПоляАдреса); + ВставитьЧастьАдреса("ВнутригородскойРайон", ЧастиАдреса.ВнутригРайон, ПоляАдреса); + ВставитьЧастьАдреса("НаселенныйПункт", ЧастиАдреса.НаселенныйПункт, ПоляАдреса); + ВставитьЧастьАдреса("Улица", ЧастиАдреса.Улица, ПоляАдреса); - ИдентификаторыАдреса = ИдентификаторыАдреса(ПоляАдреса, Ложь, Истина); + ИдентификаторыАдреса = ИдентификаторыАдреса(ПоляАдреса, Истина, Истина); Если ИдентификаторыАдреса <> Неопределено Тогда Для каждого Часть Из ЧастиАдреса Цикл @@ -2352,7 +2161,7 @@ // Заполнение результата проверки адресного объекта по загруженным данным. // -Процедура ЗаполнитьРезультатПроверкиАдресаПоКлассификаторуВнутр(Результат, АдресаДляПроверки) Экспорт +Процедура ЗаполнитьРезультатПроверкиАдресаПоКлассификаторуВнутр(Результат, АдресаДляПроверки) Данные = Результат.Данные; Для Каждого ЭлементПроверки Из АдресаДляПроверки Цикл @@ -2469,7 +2278,7 @@ ЗначениеНомера = ДополнительныйЭлемент.Номер; СтрокаЗдания = ТаблицаСокращенийЗданий.Найти(ЗначениеНомера.Тип, "ТипАдрЭл"); Если СтрокаЗдания <> Неопределено Тогда - ЗданияИПомещения[СтрокаЗдания.Значение] = Новый Структура("Вид, Значение", СтрокаЗдания.Идентификатор, ЗначениеНомера.Значение);; + ЗданияИПомещения[СтрокаЗдания.Значение] = Новый Структура("Вид, Значение", СтрокаЗдания.Идентификатор, ЗначениеНомера.Значение); КонецЕсли; Продолжить; ИначеЕсли ТипАдресногоЭлемента = ТипАдрЭлПочтовыйИндекс Тогда @@ -2738,7 +2547,6 @@ |// Условие на регион, который есть всегда |ГДЕ | СубъектРФ.Наименование = &СубъектРФНаименование - | И СубъектРФ.Сокращение = &СубъектРФСокращение | И СубъектРФ.Уровень = 1 | И СубъектРФ.КодОкруга = 0 | И СубъектРФ.КодРайона = 0 @@ -2748,10 +2556,8 @@ | И СубъектРФ.КодУлицы = 0 | И СубъектРФ.КодДополнительногоЭлемента = 0 | И СубъектРФ.КодПодчиненногоЭлемента = 0"; - - + Запрос.УстановитьПараметр("СубъектРФНаименование", СубъектРФ.Наименование); - Запрос.УстановитьПараметр("СубъектРФСокращение", СубъектРФ.Сокращение); Запрос.УстановитьПараметр("ОкругНаименование", Округ.Наименование); Запрос.УстановитьПараметр("ОкругСокращение", Округ.Сокращение); @@ -2850,7 +2656,6 @@ // Вся запись правильная КорректныеЗаписи.Добавить(Запись); КонецЕсли; - КонецЦикла; Если ПроверятьУлицу И НЕ УлицаНайдена Тогда @@ -2879,6 +2684,8 @@ ЕстьЗаписиДомов = Ложь; ИндексКорректный = Ложь; + НеточныеСовпадения = Новый СписокЗначений; + Если НЕ Уровни.Найти(90) = Неопределено Тогда Для Каждого Запись Из КорректныеЗаписи Цикл // Если Запись.Строения равно Null значит по этому адресу нет домов. @@ -2892,7 +2699,7 @@ Если Не ПустаяСтрока(Описание) Тогда ЕстьЗаписиДомов = Истина; - Если ОписаниеЗданийФИАССодержитДанные(Описание, ЗданияИПомещения) Тогда + Если ОписаниеЗданийФИАССодержитДанные(Описание, ЗданияИПомещения, НеточныеСовпадения) Тогда ЗаполнитьИдентификаторПоИерархииФИАС(ВариантАдреса, Запись); ЗаполнитьДополнительныеДанныеПоИерархииФИАС(ВариантАдреса, Запись, ИдентификаторДополнительно); ЗаполнитьПочтовыйИндексИКодКЛАДРПоИерархииФИАС(ВариантАдреса, Запись); @@ -2911,8 +2718,23 @@ Если ЕстьЗаписиДомов И Не ЕстьВарианты Тогда ОписаниеЗданияПоСоответствиюФИАС = ОписаниеЗданияПоСоответствиюФИАС(ЗданияИПомещения); Если ЗначениеЗаполнено(ОписаниеЗданияПоСоответствиюФИАС) Тогда + Подсказка = ""; + Если НеточныеСовпадения.Количество() = 1 Тогда + Подсказка = ", " + НСтр("ru = 'но есть'") + """" + НеточныеСовпадения[0]+ """"; + ИначеЕсли НеточныеСовпадения.Количество() > 1 Тогда + ПервоеЗначение = НеточныеСовпадения[0]; + Если НеточныеСовпадения.Количество() = 2 Тогда + Подсказка = НСтр("ru = 'но есть ""%1"" или ""%2""'"); + ВтороеЗначение = НеточныеСовпадения[1]; + Иначе + Подсказка = НСтр("ru = 'но есть ""%1"" и другие варианты(%2)'"); + ВтороеЗначение = Строка(НеточныеСовпадения.Количество()); + КонецЕсли; + Подсказка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(", " + Подсказка, ПервоеЗначение, ВтороеЗначение); + КонецЕсли; + ДобавитьОшибкуПроверкиАдресаПоКлассификатору(ОшибкиПроверки, "Подчиненный", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '""%1"" отсутствует в адресном классификаторе'"), ОписаниеЗданияПоСоответствиюФИАС(ЗданияИПомещения))); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '""%1"" отсутствует в адресном классификаторе'"), ОписаниеЗданияПоСоответствиюФИАС(ЗданияИПомещения)) + Подсказка); КонецЕсли; ВариантАдреса = Новый Структура; @@ -3028,7 +2850,7 @@ // ИскатьПоУлице - Булево - Искать по улице. // Возвращаемое значение: // УникальныйИдентификатор - идентификатор адресного объекта. -Функция ИдентификаторАдресногоОбъектаПоЧастямАдреса(Адрес, ИскатьПоУлице = Ложь) Экспорт +Функция ИдентификаторАдресногоОбъектаПоЧастямАдреса(Адрес, ИскатьПоУлице = Ложь) Если Адрес = Неопределено ИЛИ ПустаяСтрока(Адрес.СубъектРФ) Тогда Возврат Неопределено; @@ -3139,7 +2961,7 @@ Возврат ИдентификаторыАдресаПоКлассификатору(ПоляАдреса, ИскатьПоУлице, ВсеИдентификаторыАдреса); КонецФункции - + Функция ИдентификаторыАдресаПоКлассификатору(ПоляАдреса, ИскатьПоУлице, ВсеИдентификаторыАдреса = Ложь) ТекстСоединения = ""; @@ -3432,7 +3254,7 @@ ЗначениеНомера = ДополнительныйЭлемент.Номер; СтрокаЗдания = ТаблицаСокращенийЗданий.Найти(ЗначениеНомера.Тип, "ТипАдрЭл"); Если СтрокаЗдания <> Неопределено Тогда - ЗданияИПомещения[СтрокаЗдания.Значение] = Новый Структура("Вид, Значение", СтрокаЗдания.Идентификатор, ЗначениеНомера.Значение);; + ЗданияИПомещения[СтрокаЗдания.Значение] = Новый Структура("Вид, Значение", СтрокаЗдания.Идентификатор, ЗначениеНомера.Значение); КонецЕсли; Продолжить; ИначеЕсли ТипАдресногоЭлемента = ТипАдрЭлПочтовыйИндекс Тогда @@ -3463,7 +3285,7 @@ Если Не ПустаяСтрока(Описание) Тогда ЕстьЗаписиДомов = Истина; - Если ОписаниеЗданийФИАССодержитДанные(Описание, ЗданияИПомещения) Тогда + Если ЗданияИПомещения.Количество() > 0 И ОписаниеЗданийФИАССодержитДанные(Описание, ЗданияИПомещения) Тогда Результат.Индекс = Запись.ПочтовыйИндекс; КонецЕсли; КонецЕсли; @@ -3547,7 +3369,52 @@ Возврат СтрЗаменить(Вариант, "[Поле]", ИмяПоля); КонецФункции -Функция ОписаниеЗданийФИАССодержитДанные(Описание, ЗданияИПомещения) +// Функция - Сформировать описание здания +// +// Параметры: +// НазваниеВладения - Строка - Наименование владения (Дом, Владение, Домовладение) +// НомерВладения - Строка - Номер владения, дома +// НомерКорпуса - Строка - Номер корпуса +// НазваниеСтроения - Строка - Наименование строения (Строения, Сооружение, Участок, Литера). +// НомерСтроения - Строка - Номер строения, сооружения. +// ДополнительныеПараметры - Структура - Расширение возможностей строки описания здания. +// +// Возвращаемое значение: +// Строка, ФорматированнаяСтрока - Представление дома. +// +Функция СформироватьОписаниеЗдания(НазваниеВладения, НомерВладения, НомерКорпуса, НазваниеСтроения, НомерСтроения, ДополнительныеПараметры = Неопределено) + + ВыделятьСтрокуПоиска = Ложь; + Если ДополнительныеПараметры <> Неопределено Тогда + Если ДополнительныеПараметры.Свойство("СтрокаПоиска") Тогда + ВыделятьСтрокуПоиска = Истина; + СтрокаПоиска = ДополнительныеПараметры.СтрокаПоиска; + КонецЕсли; + КонецЕсли; + + КорпусИСтроение = ""; + Если ЗначениеЗаполнено(НомерКорпуса) Тогда + КорпусИСтроение = ", "+ НСтр("ru = 'корпус'") + " " + НомерКорпуса; + КонецЕсли; + + Если ЗначениеЗаполнено(НомерСтроения) Тогда + КорпусИСтроение = КорпусИСтроение + ", " + НазваниеСтроения + " " + СокрЛП(НомерСтроения); + КонецЕсли; + + Если ВыделятьСтрокуПоиска Тогда + Дом = НазваниеВладения + Новый ФорматированнаяСтрока(НазваниеВладения + " ", + Новый ФорматированнаяСтрока(СтрокаПоиска, Новый Шрифт(,, Истина) , ЦветаСтиля.РезультатУспехЦвет), + Сред(НомерВладения, СтрДлина(СтрокаПоиска) + 1)); + Результат = Новый ФорматированнаяСтрока(Дом, КорпусИСтроение); + Иначе + Результат = НазваниеВладения+ " "+ НомерВладения + КорпусИСтроение; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ОписаниеЗданийФИАССодержитДанные(Описание, ЗданияИПомещения, НеточныеСовпадения = Неопределено) Если ЗданияИПомещения["Дом"] <> Неопределено Тогда НомерДомаИлиВладенияЗдания = ВРег(СокрЛП(ЗданияИПомещения["Дом"].Значение)); @@ -3575,7 +3442,11 @@ КонецЕсли; Если ПустаяСтрока(НомерСтроенияЗдания) И ЗданияИПомещения["Литер"] <> Неопределено Тогда - НомерСтроенияЗданияя = ВРег(СокрЛП(ЗданияИПомещения["Литер"].Значение)); + НомерСтроенияЗдания = ВРег(СокрЛП(ЗданияИПомещения["Литер"].Значение)); + КонецЕсли; + + Если ПустаяСтрока(НомерСтроенияЗдания) И ЗданияИПомещения["Литера"] <> Неопределено Тогда + НомерСтроенияЗдания = ВРег(СокрЛП(ЗданияИПомещения["Литера"].Значение)); КонецЕсли; Если ПустаяСтрока(НомерСтроенияЗдания) И ЗданияИПомещения["Сооружение"] <> Неопределено Тогда @@ -3589,6 +3460,7 @@ СтрокиОписания = СтрЗаменить(Описание, Символы.ПС, ""); СтрокиОписания = ВРег(СтрЗаменить(Описание, Символы.Таб, Символы.ПС)); + НаименованиеВладенийИСтроений = НаименованиеВладенийИСтроений(); ТипЧисло = Новый ОписаниеТипов("Число"); Интервалы = Новый Массив; @@ -3605,12 +3477,24 @@ НомерКорпуса = СокрЛП( СтрПолучитьСтроку(СтрокиОписания, Позиция + 3) ); ВидСтроения = ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокиОписания, Позиция + 4)); НомерСтроения = СокрЛП( СтрПолучитьСтроку(СтрокиОписания, Позиция + 5) ); + Если СтрНайти(НомерСтроения, " +") > 0 Тогда + НомерСтроения = СокрЛП(Лев(НомерСтроения, СтрНайти(НомерСтроения, " +"))); // отрезаем идентификатор + КонецЕсли; - Если НомерВладения = НомерДомаИлиВладенияЗдания + Если НомерВладения = НомерДомаИлиВладенияЗдания И НомерКорпуса = НомерКорпусаЗдания И НомерСтроения = НомерСтроенияЗдания Тогда - // Точное попадания + // Точное совпадение Возврат Истина; + ИначеЕсли НеточныеСовпадения <> Неопределено И НомерВладения = НомерДомаИлиВладенияЗдания Тогда + НазванияВладения = НаименованиеВладенийИСтроений.Владения.Получить(ВидВладения); + НазванияСтроения = НаименованиеВладенийИСтроений.Строения.Получить(ВидВладения); + ОписаниеЗдания = СформироватьОписаниеЗдания(НазванияВладения, НомерВладения, НомерКорпуса, НазванияСтроения, НомерСтроения); + Хеш = Новый ХешированиеДанных(ХешФункция.MD5); + Хеш.Добавить(ОписаниеЗдания); + Если НеточныеСовпадения.НайтиПоЗначению(хеш.ХешСумма) = Неопределено Тогда + НеточныеСовпадения.Добавить(хеш.ХешСумма, ОписаниеЗдания); + КонецЕсли; КонецЕсли; Позиция = Позиция + 5; @@ -3758,7 +3642,7 @@ // Устанавливает в XDTO адресе значение по XPath. // -Процедура УстановитьXDTOРеквизитОбъекта(ОбъектXDTO, ПутьXPath, Значение) Экспорт +Процедура УстановитьXDTOРеквизитОбъекта(ОбъектXDTO, ПутьXPath, Значение) Если Не ЗначениеЗаполнено(Значение) Тогда Возврат; @@ -3817,7 +3701,7 @@ // Возвращает значение реквизита из XDTO адреса по XPath. // -Функция ПолучитьXDTOРеквизитОбъекта(ОбъектXTDO, XPath) Экспорт +Функция ПолучитьXDTOРеквизитОбъекта(ОбъектXTDO, XPath) // Переносов строки в XPath не ожидаем. СтрокаСвойств = СтрЗаменить(СтрЗаменить(XPath, "/", Символы.ПС), Символы.ПС + Символы.ПС, "/"); @@ -3993,7 +3877,7 @@ КонецФункции -Процедура УстановитьУровниАдресаПоЧастямАдреса(ЧастиАдреса, Уровни) Экспорт +Процедура УстановитьУровниАдресаПоЧастямАдреса(ЧастиАдреса, Уровни) ТекстЗапроса = "ВЫБРАТЬ | ДанныеАдреса.Уровень КАК Уровень, @@ -4431,18 +4315,24 @@ РазделительВыбрать = ""; СтрокаИз = ""; + Упорядочить = ""; Для Индекс = 0 По ЧастиАдреса.Количество() -1 Цикл ЧастьАдреса = ЧастиАдреса[Индекс]; НазваниеТаблицы = "АдресныйОбъект"+ Строка(Индекс); СтрокаВыбрать = СтрокаВыбрать + РазделительВыбрать + НазваниеТаблицы + ".Идентификатор КАК " + НазваниеТаблицы + "Идентификатор, " + НазваниеТаблицы + ".Уровень КАК " + НазваниеТаблицы + "Уровень " ; СтрокаИз = СтрокаИз + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, НазваниеТаблицы, ЧастьАдреса.Наименование, ЧастьАдреса.Сокращение); + Упорядочить = Упорядочить + НазваниеТаблицы + ".Актуален Убыв" + РазделительВыбрать; РазделительВыбрать = ", "; КонецЦикла; ТекстЗапроса = "ВЫБРАТЬ " + СтрокаВыбрать + " ИЗ РегистрСведений.АдресныеОбъекты КАК НаселенныйПункт " + СтрокаИз + " ГДЕ НаселенныйПункт.Идентификатор = &Идентификатор"; + Если ЗначениеЗаполнено(Упорядочить) Тогда + ТекстЗапроса = ТекстЗапроса + " УПОРЯДОЧИТЬ ПО " + Упорядочить; + КонецЕсли; + Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("Идентификатор", ИдентификаторНаселенногоПункта); @@ -4473,7 +4363,7 @@ // Установка соответствия населенного пункта по частям адреса. // -Процедура УстановитьУровниАдресаПоЧастямАдресаДляНаселенногоПункта(Уровни, ЧастиАдреса) Экспорт +Процедура УстановитьУровниАдресаПоЧастямАдресаДляНаселенногоПункта(Уровни, ЧастиАдреса) ТекстЗапроса = "ВЫБРАТЬ | ДанныеАдреса.Уровень КАК Уровень, @@ -4781,35 +4671,131 @@ КонецФункции - -// Заполнить коды адреса +// Определение кодов КЛАДР и ОКАТО, ОКТМО, налоговых инспекций ФНС и др. адреса. // // Параметры: -// Адрес - Структура - Структура содержащая поля адреса +// Адрес - Строка - Адрес в формате XML или структура с полями адреса. +// Источник - Строка - Источник получения кодов адреса, Варианты: "Сервис1С", "ЗагруженныеДанные". +// Возвращаемое значение: +// Структура - Содержит 2 структуры: Коды адреса и Коды КЛАДР. // -Процедура ЗаполнитьКодыАдреса(Адрес) Экспорт +Функция КодыАдресаИКодыКЛАДР(Знач Адрес, Источник = Неопределено) Экспорт + + Результат = Новый Структура(); + Результат.Вставить("КодыКЛАДР", СтруктураКодовКЛАДРПоУровням()); + Результат.Вставить("КодыАдреса", СтруктураКодовАдреса()); + + Если НЕ (ЭтоКонтактнаяИнформацияВXML(Адрес) ИЛИ ТипЗнч(Адрес) = Тип("Структура")) Тогда + Возврат Результат; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(Источник) Тогда + Источник = ИсточникДанныхАдресногоКлассификатора(); + Если ПустаяСтрока(Источник) ИЛИ Источник <> "Сервис1С" Тогда + Источник = "ЗагруженныеДанные"; + КонецЕсли; + КонецЕсли; + + Если ЭтоКонтактнаяИнформацияВXML(Адрес) Тогда + АдресXDTO = ДесериализацияАдресаXDTO(Адрес); + Адрес = АдресXDTO.Состав.Состав; + КонецЕсли; + + Если СтрСравнить(Источник, "Сервис1С") = 0 Тогда + Результат.КодыАдреса = КодыАдресаСервис(Адрес); + // Заполнить коды КЛАДР + Если ЗначениеЗаполнено(Результат.КодыАдреса.КодКЛАДР) Тогда + КодКЛАДР = Формат(Результат.КодыАдреса.КодКЛАДР, "ЧРГ=''; ЧГ=0"); + + Если СтрДлина(КодКЛАДР) = 17 Тогда + Результат.КодыКЛАДР.Улица = КодКЛАДР; + КодКЛАДР = Лев(КодКЛАДР, 13); + КонецЕсли; + + Если СтрДлина(КодКЛАДР) = 12 Тогда + КодКЛАДР = "0" + КодКЛАДР; + КонецЕсли; + + Если СтрДлина(КодКЛАДР) = 13 Тогда + Если ЗначениеЗаполнено(Адрес.СубъектРФ) Тогда + Результат.КодыКЛАДР.Регион = Лев(КодКЛАДР, 2) + "00000000000"; + КонецЕсли; + Район = ?(ПустаяСтрока(Адрес.СвРайМО), "", Адрес.СвРайМО.Район); + Если ЗначениеЗаполнено(Район) Тогда + Результат.КодыКЛАДР.Район = Лев(КодКЛАДР, 5) + "00000000"; + КонецЕсли; + Если ЗначениеЗаполнено(Адрес.Город) Тогда + Результат.КодыКЛАДР.Город = Лев(КодКЛАДР, 8) + "00000"; + КонецЕсли; + Если ЗначениеЗаполнено(Адрес.НаселПункт) Тогда + Результат.КодыКЛАДР.НаселенныйПункт = Лев(КодКЛАДР, 11) + "00"; + КонецЕсли; + + КонецЕсли; + КонецЕсли; + Иначе + Результат = КодыАдресаЗагруженныеДанные(Адрес); + КонецЕсли; + + ОпределитьФорматКодов(Результат.КодыАдреса); + + Возврат Результат; + +КонецФункции + +// Заполнить коды адреса из загруженных данных +// +// Параметры: +// Адрес - Структура - Структура содержащая поля адреса. +// +Функция КодыАдресаЗагруженныеДанные(АдресРФ) + + Адрес = Новый Структура(); + СубъектРФ = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(АдресРФ.СубъектРФ); + Адрес.Вставить("Регион", СубъектРФ.Наименование); + Адрес.Вставить("РегионСокращение", СубъектРФ.Сокращение); + + Район = АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(ПолучитьXDTOРеквизитОбъекта(АдресРФ, "СвРайМО/Район")); + Адрес.Вставить("Район", Район.Наименование); + + Адрес.Вставить("Город", + АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(АдресРФ.Город).Наименование); + Адрес.Вставить("НаселенныйПункт", + АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(АдресРФ.НаселПункт).Наименование); + Адрес.Вставить("Улица", + АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(АдресРФ.Улица).Наименование); + Адрес.Вставить("Округ", + АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(АдресРФ.Округ).Наименование); + Адрес.Вставить("ВнутригРайон", + АдресныйКлассификаторКлиентСервер.НаименованиеИСокращение(АдресРФ.ВнутригРайон).Наименование); + + КодыКЛАДР = СтруктураКодовКЛАДРПоУровням(); + КодыАдреса = СтруктураКодовАдреса(); + Результат = Новый Структура(); + Результат.Вставить("КодыКЛАДР", КодыКЛАДР); + Результат.Вставить("КодыАдреса", КодыАдреса); ТекстСоединения = ""; ТекстДляВыбрать = ""; - ИмяОбъектаДляДополнительныхСведений = "АдресныйОбъектРегион"; + ИмяОбъектаДляДополнительныхСведений = "АдресныеОбъектыРегион"; Если ПустаяСтрока(Адрес.Округ) Тогда сОкруг = "0"; ТекстДляВыбрать = "НЕОПРЕДЕЛЕНО КАК КодКЛАДРОкруг, "; Иначе ТекстСоединения = ТекстСоединения + Символы.ПС + "ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыОкруг - | ПО АдресныеОбъектыОкруг.Наименование = """ + Адрес.Округ + """ - | И АдресныйОбъектОкруг.КодСубъектаРФ = АдресныеОбъектыРайон.КодСубъектаРФ - | И АдресныйОбъектОкруг.Уровень = 2 - | И АдресныйОбъектОкруг.КодРайона = 0 - | И АдресныйОбъектОкруг.КодГорода = 0 - | И АдресныйОбъектОкруг.КодВнутригородскогоРайона = 0 - | И АдресныйОбъектОкруг.КодНаселенногоПункта = 0 - | И АдресныйОбъектОкруг.КодУлицы = 0 - | И АдресныйОбъектОкруг.КодДополнительногоЭлемента = 0 - | И АдресныйОбъектОкруг.КодПодчиненногоЭлемента = 0"; + | ПО АдресныеОбъектыОкруг.Наименование = """ + Адрес.Округ + """ + | И АдресныеОбъектыРегион.КодСубъектаРФ = АдресныеОбъектыОкруг.КодСубъектаРФ + | И АдресныеОбъектыОкруг.Уровень = 2 + | И АдресныеОбъектыОкруг.КодРайона = 0 + | И АдресныеОбъектыОкруг.КодГорода = 0 + | И АдресныеОбъектыОкруг.КодВнутригородскогоРайона = 0 + | И АдресныеОбъектыОкруг.КодНаселенногоПункта = 0 + | И АдресныеОбъектыОкруг.КодУлицы = 0 + | И АдресныеОбъектыОкруг.КодДополнительногоЭлемента = 0 + | И АдресныеОбъектыОкруг.КодПодчиненногоЭлемента = 0"; сОкруг = "АдресныеОбъектыОкруг.КодОкруга"; - ТекстДляВыбрать = "АдресныйОбъектОкруг.КодКЛАДР КАК КодКЛАДРОкруг, "; + ТекстДляВыбрать = "АдресныеОбъектыОкруг.КодКЛАДР КАК КодКЛАДРОкруг, "; ИмяОбъектаДляДополнительныхСведений = "АдресныеОбъектыОкруг"; КонецЕсли; @@ -4820,7 +4806,7 @@ ТекстСоединения = ТекстСоединения + Символы.ПС + "ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыРайон | ПО АдресныеОбъектыРайон.Наименование = """ + Адрес.Район + """ | И АдресныеОбъектыРайон.КодОкруга = " + сОкруг + " - | И АдресныйОбъектРегион.КодСубъектаРФ = АдресныеОбъектыРайон.КодСубъектаРФ + | И АдресныеОбъектыРегион.КодСубъектаРФ = АдресныеОбъектыРайон.КодСубъектаРФ | И АдресныеОбъектыРайон.Уровень = 3 | И АдресныеОбъектыРайон.КодГорода = 0 | И АдресныеОбъектыРайон.КодВнутригородскогоРайона = 0 @@ -4839,7 +4825,7 @@ Иначе ТекстСоединения = ТекстСоединения + Символы.ПС + " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыГород | ПО АдресныеОбъектыГород.Наименование = """ + Адрес.Город + """ - | И АдресныйОбъектРегион.КодСубъектаРФ = АдресныеОбъектыГород.КодСубъектаРФ + | И АдресныеОбъектыРегион.КодСубъектаРФ = АдресныеОбъектыГород.КодСубъектаРФ | И АдресныеОбъектыГород.Уровень = 4 | И АдресныеОбъектыГород.КодОкруга = " + сОкруг + " | И АдресныеОбъектыГород.КодРайона = " + сРайон + " @@ -4854,13 +4840,13 @@ ИмяОбъектаДляДополнительныхСведений = "АдресныеОбъектыГород"; КонецЕсли; - Если ПустаяСтрока(Адрес.ВнутригородскойРайон) Тогда + Если ПустаяСтрока(Адрес.ВнутригРайон) Тогда сВнутригородскойРайон = "0"; ТекстДляВыбрать = ТекстДляВыбрать + "НЕОПРЕДЕЛЕНО КАК КодКЛАДРВнутригородскойРайон, "; Иначе ТекстСоединения = ТекстСоединения + Символы.ПС + " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыВнутригородскойРайон - | ПО АдресныеОбъектыВнутригородскойРайон.Наименование = """ + Адрес.ВнутригородскойРайон + """ - | И АдресныйОбъектРегион.КодСубъектаРФ = АдресныеОбъектыВнутригородскойРайон.КодСубъектаРФ + | ПО АдресныеОбъектыВнутригородскойРайон.Наименование = """ + Адрес.ВнутригРайон + """ + | И АдресныеОбъектыРегион.КодСубъектаРФ = АдресныеОбъектыВнутригородскойРайон.КодСубъектаРФ | И АдресныеОбъектыВнутригородскойРайон.КодОкруга = " + сОкруг + " | И АдресныеОбъектыВнутригородскойРайон.КодРайона = " + сРайон + " | И АдресныеОбъектыВнутригородскойРайон.КодГорода = " + сГород + " @@ -4879,7 +4865,7 @@ Иначе ТекстСоединения = ТекстСоединения + Символы.ПС + " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыНаселенныйПункт | ПО АдресныеОбъектыНаселенныйПункт.Наименование = """ + Адрес.НаселенныйПункт + """ - | И АдресныйОбъектРегион.КодСубъектаРФ = АдресныеОбъектыНаселенныйПункт.КодСубъектаРФ + | И АдресныеОбъектыРегион.КодСубъектаРФ = АдресныеОбъектыНаселенныйПункт.КодСубъектаРФ | И АдресныеОбъектыНаселенныйПункт.Уровень = 6 | И АдресныеОбъектыНаселенныйПункт.КодОкруга = " + сОкруг + " | И АдресныеОбъектыНаселенныйПункт.КодРайона = " + сРайон + " @@ -4899,7 +4885,7 @@ Иначе ТекстСоединения = ТекстСоединения + Символы.ПС + " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыУлица | ПО АдресныеОбъектыУлица.Наименование = """ + Адрес.Улица + """ - | И АдресныйОбъектРегион.КодСубъектаРФ = АдресныеОбъектыУлица.КодСубъектаРФ + | И АдресныеОбъектыРегион.КодСубъектаРФ = АдресныеОбъектыУлица.КодСубъектаРФ | И АдресныеОбъектыУлица.Уровень = 7 | И АдресныеОбъектыУлица.КодОкруга = " + сОкруг + " | И АдресныеОбъектыУлица.КодРайона = " + сРайон + " @@ -4913,12 +4899,13 @@ ТекстДляВыбрать = ТекстДляВыбрать + "АдресныеОбъектыУлица.КодКЛАДР КАК КодКЛАДРУлица, "; ИмяОбъектаДляДополнительныхСведений = "АдресныеОбъектыУлица"; КонецЕсли; + ТекстДляВыбрать = ТекстДляВыбрать + ИмяОбъектаДляДополнительныхСведений + ".Идентификатор КАК Идентификатор, "; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | АдресныйОбъектРегион.КодКЛАДР КАК КодКЛАДРРегион, - | АдресныйОбъектРегион.КодСубъектаРФ КАК КодСубъектаРФ, " + ТекстДляВыбрать + " + | АдресныеОбъектыРегион.КодКЛАДР КАК КодКЛАДРРегион, + | АдресныеОбъектыРегион.КодСубъектаРФ КАК КодСубъектаРФ, " + ТекстДляВыбрать + " | ДополнительныеАдресныеСведения.OKATO КАК OKATO, | ДополнительныеАдресныеСведения.ОКТМО КАК ОКТМО, | ДополнительныеАдресныеСведения.КодИФНСФЛ, @@ -4926,21 +4913,21 @@ | ДополнительныеАдресныеСведения.КодУчасткаИФНСФЛ, | ДополнительныеАдресныеСведения.КодУчасткаИФНСЮЛ |ИЗ - | РегистрСведений.АдресныеОбъекты КАК АдресныйОбъектРегион " + ТекстСоединения + " + | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъектыРегион " + ТекстСоединения + " | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеАдресныеСведения | ПО (" + ИмяОбъектаДляДополнительныхСведений + ".Дополнительно = ДополнительныеАдресныеСведения.Идентификатор) |ГДЕ - | АдресныйОбъектРегион.Наименование = &Регион - | И АдресныйОбъектРегион.Уровень = 1 - | И АдресныйОбъектРегион.КодОкруга = 0 - | И АдресныйОбъектРегион.КодРайона = 0 - | И АдресныйОбъектРегион.КодГорода = 0 - | И АдресныйОбъектРегион.КодВнутригородскогоРайона = 0 - | И АдресныйОбъектРегион.КодНаселенногоПункта = 0 - | И АдресныйОбъектРегион.КодУлицы = 0 - | И АдресныйОбъектРегион.КодДополнительногоЭлемента = 0 - | И АдресныйОбъектРегион.КодПодчиненногоЭлемента = 0 - | И АдресныйОбъектРегион.Сокращение = &РегионСокращение"; + | АдресныеОбъектыРегион.Наименование = &Регион + | И АдресныеОбъектыРегион.Уровень = 1 + | И АдресныеОбъектыРегион.КодОкруга = 0 + | И АдресныеОбъектыРегион.КодРайона = 0 + | И АдресныеОбъектыРегион.КодГорода = 0 + | И АдресныеОбъектыРегион.КодВнутригородскогоРайона = 0 + | И АдресныеОбъектыРегион.КодНаселенногоПункта = 0 + | И АдресныеОбъектыРегион.КодУлицы = 0 + | И АдресныеОбъектыРегион.КодДополнительногоЭлемента = 0 + | И АдресныеОбъектыРегион.КодПодчиненногоЭлемента = 0 + | И АдресныеОбъектыРегион.Сокращение = &РегионСокращение"; Запрос.УстановитьПараметр("Регион", Адрес.Регион); Запрос.УстановитьПараметр("РегионСокращение", Адрес.РегионСокращение); @@ -4948,27 +4935,372 @@ РезультатЗапроса = Запрос.Выполнить().Выбрать(); Если РезультатЗапроса.Следующий() Тогда - Адрес.КодыКЛАДР.Регион = РезультатЗапроса.КодКЛАДРРегион; - Адрес.КодыКЛАДР.Округ = РезультатЗапроса.КодКЛАДРОкруг; - Адрес.КодыКЛАДР.Город = РезультатЗапроса.КодКЛАДРГород; - Адрес.КодыКЛАДР.ВнутригородскойРайон = РезультатЗапроса.КодКЛАДРВнутригородскойРайон; - Адрес.КодыКЛАДР.НаселенныйПункт = РезультатЗапроса.КодКЛАДРНаселенныйПункт; - Адрес.КодыКЛАДР.Улица = РезультатЗапроса.КодКЛАДРУлица; - Адрес.ДополнительныеКоды.ОКТМО = РезультатЗапроса.ОКТМО; - Адрес.ДополнительныеКоды.ОКАТО = РезультатЗапроса.OKATO; - Адрес.ДополнительныеКоды.КодИФНСФЛ = РезультатЗапроса.КодИФНСФЛ; - Адрес.ДополнительныеКоды.КодИФНСЮЛ = РезультатЗапроса.КодИФНСЮЛ; - Адрес.ДополнительныеКоды.КодУчасткаИФНСФЛ = РезультатЗапроса.КодУчасткаИФНСФЛ; - Адрес.ДополнительныеКоды.КодУчасткаИФНСЮЛ = РезультатЗапроса.КодУчасткаИФНСЮЛ; + КодКЛАДР = 0; + УстановитьКодКладр(Результат.КодыКЛАДР, "Регион", РезультатЗапроса.КодКЛАДРРегион, КодКЛАДР); + УстановитьКодКладр(Результат.КодыКЛАДР, "Округ", РезультатЗапроса.КодКЛАДРОкруг, КодКЛАДР); + УстановитьКодКладр(Результат.КодыКЛАДР, "Район", РезультатЗапроса.КодКЛАДРРайон, КодКЛАДР); + УстановитьКодКладр(Результат.КодыКЛАДР, "Город", РезультатЗапроса.КодКЛАДРГород, КодКЛАДР); + УстановитьКодКладр(Результат.КодыКЛАДР, "ВнутригородскойРайон", РезультатЗапроса.КодКЛАДРВнутригородскойРайон, КодКЛАДР); + УстановитьКодКладр(Результат.КодыКЛАДР, "НаселенныйПункт", РезультатЗапроса.КодКЛАДРНаселенныйПункт, КодКЛАДР); + УстановитьКодКладр(Результат.КодыКЛАДР, "Улица", РезультатЗапроса.КодКЛАДРУлица, КодКЛАДР); + + ЗаполнитьЗначенияСвойств(Результат.КодыАдреса, РезультатЗапроса); + Если НЕ ЗначениеЗаполнено(Результат.КодыАдреса.ОКТМО) ИЛИ Результат.КодыАдреса.ОКТМО = 0 Тогда + // Получение кодов под идентификатору + СведенияОДоме = ЗданияАдреса(АдресРФ); + Если СведенияОДоме.Количество() > 0 И ЗначениеЗаполнено(РезультатЗапроса.Идентификатор) Тогда + ЗаполнитьКодыПоИдентификаторуДома(РезультатЗапроса.Идентификатор, СведенияОДоме, Результат.КодыАдреса); + КонецЕсли; + КонецЕсли; + + Результат.КодыАдреса.КодКЛАДР = КодКЛАДР; КонецЕсли; + + Возврат Результат; +КонецФункции -КонецПроцедуры +// Читает здания и помещения адреса. +// +// Параметры: +// XDTOАдрес - ОбъектXDTO - Контактная информация или XDTO адреса. +// +// Возвращаемое значение: +// Соответствие - Наименование здания и значение. +// +Функция ЗданияАдреса(XDTOАдрес) + + Результат = Новый Соответствие; + Для Каждого ДопЭлемент Из XDTOАдрес.ДопАдрЭл Цикл + Если ДопЭлемент.Номер <> Неопределено Тогда + КодОбъекта = ДопЭлемент.Номер.Тип; + ТипОбъекта = ТипОбъектаПоКодуСериализации(КодОбъекта); + Если ТипОбъекта <> Неопределено И (ТипОбъекта.Тип < 3) Тогда + Результат.Вставить(ВРег(ТипОбъекта.Наименование), ДопЭлемент.Номер.Значение); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции +// Возвращает строку с описанием типа по коду части адреса. +// Противоположность функции "КодСериализацииОбъектаАдресации". +// +// Параметры: +// Код - Строка - код +// +// Возвращаемое значение: +// Число - Тип +// +Функция ТипОбъектаПоКодуСериализации(Код) + Для Каждого Элемент Из ТипыОбъектовАдресацииАдресаРФ() Цикл + Если Элемент.Код = Код Тогда + Возврат Элемент; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; +КонецФункции + +// Возвращает массив структур с информацией о частях адреса согласно приказу ФНС ММВ-7-1/525 от 31.08.2011. +// +// Возвращаемое значение: +// Массив - содержит структуры - описания. +// +Функция ТипыОбъектовАдресацииАдресаРФ() + + Результат = Новый Массив; + + // Код, Наименование, Тип, Порядок, КодФИАС + // Тип: 1 - владение, 2 - здание, 3 - помещение. + + Результат.Добавить(СтрокаОбъектаАдресации("1010", НСтр("ru = 'Дом'"), 1, 1, 2)); + Результат.Добавить(СтрокаОбъектаАдресации("1020", НСтр("ru = 'Владение'"), 1, 2, 1)); + Результат.Добавить(СтрокаОбъектаАдресации("1030", НСтр("ru = 'Домовладение'"), 1, 3, 3)); + + Результат.Добавить(СтрокаОбъектаАдресации("1050", НСтр("ru = 'Корпус'"), 2, 1)); + Результат.Добавить(СтрокаОбъектаАдресации("1060", НСтр("ru = 'Строение'"), 2, 2, 1)); + Результат.Добавить(СтрокаОбъектаАдресации("1080", НСтр("ru = 'Литера'"), 2, 3, 3)); + Результат.Добавить(СтрокаОбъектаАдресации("1070", НСтр("ru = 'Сооружение'"), 2, 4, 2)); + Результат.Добавить(СтрокаОбъектаАдресации("1040", НСтр("ru = 'Участок'"), 2, 5)); + + Результат.Добавить(СтрокаОбъектаАдресации("2010", НСтр("ru = 'Квартира'"), 3, 1)); + Результат.Добавить(СтрокаОбъектаАдресации("2030", НСтр("ru = 'Офис'"), 3, 2)); + Результат.Добавить(СтрокаОбъектаАдресации("2040", НСтр("ru = 'Бокс'"), 3, 3)); + Результат.Добавить(СтрокаОбъектаАдресации("2020", НСтр("ru = 'Помещение'"), 3, 4)); + Результат.Добавить(СтрокаОбъектаАдресации("2050", НСтр("ru = 'Комната'"), 3, 5)); + Результат.Добавить(СтрокаОбъектаАдресации("2060", НСтр("ru = 'Этаж'"), 3, 6)); + // Наши сокращения для поддержки обратной совместимости при парсинге. + Результат.Добавить(СтрокаОбъектаАдресации("2010", НСтр("ru = 'кв.'"), 3, 6)); + Результат.Добавить(СтрокаОбъектаАдресации("2030", НСтр("ru = 'оф.'"), 3, 7)); + + // Уточняющие объекты + Результат.Добавить(СтрокаОбъектаАдресации("10100000", НСтр("ru = 'Почтовый индекс'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10200000", НСтр("ru = 'Адресная точка'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10300000", НСтр("ru = 'Садовое товарищество'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10400000", НСтр("ru = 'Элемент улично-дорожной сети, планировочной структуры дополнительного адресного элемента'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10500000", НСтр("ru = 'Промышленная зона'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10600000", НСтр("ru = 'Гаражно-строительный кооператив'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10700000", НСтр("ru = 'Территория'"))); + + Возврат Результат; +КонецФункции + +Функция СтрокаОбъектаАдресации(Код, Наименование, Тип = 0, Порядок = 0, КодФИАС = 0) + + СтруктураОбъектаАдресации = Новый Структура; + СтруктураОбъектаАдресации.Вставить("Код", Код); + СтруктураОбъектаАдресации.Вставить("Наименование", Наименование); + СтруктураОбъектаАдресации.Вставить("Тип", Тип); + СтруктураОбъектаАдресации.Вставить("Порядок", Порядок); + СтруктураОбъектаАдресации.Вставить("КодФИАС", КодФИАС); + СтруктураОбъектаАдресации.Вставить("Сокращение", НРег(Наименование)); + СтруктураОбъектаАдресации.Вставить("Ключ", ВРег(Наименование)); + Возврат СтруктураОбъектаАдресации; + +КонецФункции + +Функция СтруктураКодовАдреса() + Коды = Новый Структура(); + Коды.Вставить("КодКЛАДР"); + Коды.Вставить("Идентификатор"); + Коды.Вставить("OKATO"); + Коды.Вставить("ОКТМО"); + Коды.Вставить("КодИФНСФЛ"); + Коды.Вставить("КодИФНСЮЛ"); + Коды.Вставить("КодУчасткаИФНСФЛ"); + Коды.Вставить("КодУчасткаИФНСЮЛ"); + Коды.Вставить("Индекс"); + + Возврат Коды; +КонецФункции + +// Определяет индекс и ОКТМО адреса по частям адреса. +// +// Параметры: +// АдресРФ - ОбъектXDTO - Адрес РФ. +// +// Возвращаемое значение: +// Структура - Коды адреса. +// +Функция КодыАдресаСервис(АдресРФ) + + Результат = СтруктураКодовАдреса(); + + АдресаДляПроверки = Новый Массив; + РезультатВебСервис = Новый Структура("Данные", Новый Массив); + СтруктураОписанияОшибкиПоставщика(РезультатВебСервис); + Уровни = АдресныйКлассификаторПовтИсп.УровниКлассификатораФИАС(); + АдресаДляПроверки.Добавить(Новый Структура("Адрес, Уровни", АдресРФ , Уровни)); + Попытка + ЗаполнитьРезультатПроверкиАдресаПоКлассификаторуСервис1С(РезультатВебСервис, АдресаДляПроверки); + Исключение + СтруктураОписанияОшибкиПоставщика(РезультатВебСервис, ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации( СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , РезультатВебСервис.ПодробноеПредставлениеОшибки); + КонецПопытки; + + Если НЕ РезультатВебСервис.Отказ Тогда + Если РезультатВебСервис.Данные[0].Варианты.Количество() > 0 Тогда + ЗаполнитьЗначенияСвойств(Результат, РезультатВебСервис.Данные[0].Варианты[0]); + КонецЕсли; + КонецЕсли; + + Возврат Результат; +КонецФункции + + +Функция СтруктураКодовКЛАДРПоУровням() + Возврат Новый Структура("Регион, Округ, Район, Город, ВнутригородскойРайон, НаселенныйПункт, Улица"); +КонецФункции + +Функция УстановитьКодКЛАДР(КодыКЛАДР, ИмяПоля, Значение, КодКЛАДР) + КодыКЛАДР[ИмяПоля] = Значение; + Если ЗначениеЗаполнено(Значение) Тогда + КодКладр = Значение; + КонецЕсли; +КонецФункции + + +Функция ЗаполнитьКодыПоИдентификаторуДома(ИдентификаторАдресногоОбъекта, СведенияОДоме, Коды) + + Источник = ИсточникДанныхАдресногоКлассификатора(); + Если ПустаяСтрока(Источник) Тогда + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ДомаЗданияСтроения.Строения КАК Строения + |ИЗ + | РегистрСведений.ДомаЗданияСтроения КАК ДомаЗданияСтроения + |ГДЕ + | ДомаЗданияСтроения.АдресныйОбъект = &АдресныйОбъект"; + + Запрос.УстановитьПараметр("АдресныйОбъект", ИдентификаторАдресногоОбъекта); + Запись = Запрос.Выполнить().Выбрать(); + + Пока Запись.Следующий() Цикл + Если ЗначениеЗаполнено(Запись.Строения) Тогда + Описание = Запись.Строения.Получить(); + Если Не ПустаяСтрока(Описание) Тогда + ИдентификаторДома = ИдентификаторДома(Описание, СведенияОДоме); + Если ЗначениеЗаполнено(ИдентификаторДома) Тогда + Прервать; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если ЗначениеЗаполнено(ИдентификаторДома) Тогда + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ДополнительныеАдресныеСведения.Идентификатор, + | ДополнительныеАдресныеСведения.КодСубъектаРФ, + | ДополнительныеАдресныеСведения.OKATO, + | ДополнительныеАдресныеСведения.ОКТМО, + | ДополнительныеАдресныеСведения.КодИФНСФЛ, + | ДополнительныеАдресныеСведения.КодИФНСЮЛ, + | ДополнительныеАдресныеСведения.КодУчасткаИФНСФЛ, + | ДополнительныеАдресныеСведения.КодУчасткаИФНСЮЛ + |ИЗ + | РегистрСведений.ДополнительныеАдресныеСведения КАК ДополнительныеАдресныеСведения + |ГДЕ + | ДополнительныеАдресныеСведения.Идентификатор = &Идентификатор"; + + Запрос.УстановитьПараметр("Идентификатор", ИдентификаторДома); + + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + + Если РезультатЗапроса.Следующий() Тогда + ЗаполнитьЗначенияСвойств(Коды, РезультатЗапроса); + КонецЕсли; + КонецЕсли; + +КонецФункции + +// Извлекает список домов полученного из регистра сведения описания и добавляет их в список значений. +// +// Параметры: +// СтрокаСоСпискомДомов - Строка - описание списка домов из регистра сведения. +// СтрокаПоиска - Строка - Строка отбора. +// ВариантыДомов - Список значений - Список домов. +// +Функция ИдентификаторДома(СтрокаСоСпискомДомов, СведенияОДоме) + + Если СтрДлина(СтрокаСоСпискомДомов) > 25 Тогда + Идентификатор = УникальныйИдентификаторИзСтроки64(Лев(СтрокаСоСпискомДомов, 25)); + Иначе + Возврат Неопределено; + КонецЕсли; + СтрокаСоСпискомДомов = Сред(СтрокаСоСпискомДомов, 25); + + ТипЧисло = Новый ОписаниеТипов("Число"); + СтрокаСоСпискомДомов = СтрЗаменить(СтрокаСоСпискомДомов, Символы.ПС, ""); + СтрокаСоСпискомДомов = СтрЗаменить(СтрокаСоСпискомДомов, Символы.Таб, Символы.ПС); + ЧислоСтрок = СтрЧислоСтрок(СтрокаСоСпискомДомов); + Позиция = 1; + Интервалы = Новый Массив; + + НаименованиеЗданийИСтроений = НаименованиеВладенийИСтроений(); + + Пока Позиция <= ЧислоСтрок Цикл + Строка = СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция); + + Если Строка = "h" ИЛИ Строка = "H" Тогда + + ОписаниеДома = ОписаниеДома(); + + ОписаниеДома.ВидВладения = ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 1)); + ОписаниеДома.Дом = СокрЛП(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 2)); + ОписаниеДома.ДомЧислом = НомерДомаЧислом(ОписаниеДома.Дом); + ОписаниеДома.Корпус = СокрЛП(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 3)); + ОписаниеДома.ВидСтроения = ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 4)); + ОписаниеДома.Строение = СокрЛП(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 5)); + ОписаниеДома.НазваниеВладения = СокрЛП(НаименованиеЗданийИСтроений.Владения.Получить(ОписаниеДома.ВидВладения)); + ОписаниеДома.НазваниеСтроения = СокрЛП(НаименованиеЗданийИСтроений.Строения.Получить(ОписаниеДома.ВидСтроения)); + + ПозицияУИД = СтрНайти(ОписаниеДома.Строение, "+"); + Если ПозицияУИД > 0 Тогда + Идентификатор = УникальныйИдентификаторИзСтроки64(Сред(ОписаниеДома.Строение, ПозицияУИД + 2, 25)); + ОписаниеДома.Строение = СокрЛП(Лев(ОписаниеДома.Строение, ПозицияУИД - 1)); + КонецЕсли; + + НомерДомаКорректный = Ложь; + НомерКорпусаКорректный = Ложь; + НомерСтроенияКорректный = Ложь; + + НомерДома = СведенияОДоме.Получить(ВРег(ОписаниеДома.НазваниеВладения)); + Если НомерДома <> Неопределено Тогда + НомерДомаКорректный = (СтрСравнить(НомерДома, ОписаниеДома.Дом) = 0); + ИначеЕсли НЕ ЗначениеЗаполнено(ОписаниеДома.Дом) ИЛИ ОписаниеДома.Дом = НСтр("ru = 'НЕТ'") Тогда + НомерДомаКорректный = Истина; + КонецЕсли; + + НомерКорпуса = СведенияОДоме.Получить("КОРПУС"); + Если НомерКорпуса <> Неопределено Тогда + НомерКорпусаКорректный = (СтрСравнить(НомерКорпуса, ОписаниеДома.Корпус) = 0); + ИначеЕсли НЕ ЗначениеЗаполнено(ОписаниеДома.Корпус) Тогда + НомерКорпусаКорректный = Истина; + КонецЕсли; + + НомерСтроения = СведенияОДоме.Получить(ВРег(ОписаниеДома.НазваниеСтроения)); + Если НомерСтроения <> Неопределено Тогда + НомерСтроенияКорректный = (СтрСравнить(НомерСтроения, ОписаниеДома.Строение) = 0); + ИначеЕсли НЕ ЗначениеЗаполнено(ОписаниеДома.Строение) Тогда + НомерСтроенияКорректный = Истина; + КонецЕсли; + + Если НомерСтроенияКорректный И НомерДомаКорректный И НомерКорпусаКорректный Тогда + Возврат Идентификатор; + КонецЕсли; + + Позиция = Позиция + 5; + + ИначеЕсли Строка = "i" ИЛИ Строка = "I" Тогда + + // Интервалы набираем для последующего добавления. + Интервал = Новый Структура; + Интервал.Вставить("Вид", ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 1))); + Интервал.Вставить("Начало", ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 2))); + Интервал.Вставить("Конец", ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 3))); + Интервалы.Добавить(Интервал); + + Позиция = Позиция + 3; + КонецЕсли; + + Позиция = Позиция + 1; + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +// Возвращает признак того, является ли строка данных контактной информации XML данными. +// +// Параметры: +// Текст - Строка - Проверяемая строка. +// +// Возвращаемое значение: +// Булево - результат проверки. +// +Функция ЭтоКонтактнаяИнформацияВXML(Знач Текст) + + Возврат ТипЗнч(Текст) = Тип("Строка") И СтрНачинаетсяС(СокрЛ(Текст), "<"); + +КонецФункции + +Функция ОписаниеДома() + ОписаниеДома = Новый Структура("ДомЧислом, Дом, Корпус, Строение, ВидСтроения, ВидВладения, НазваниеВладения, НазваниеСтроения"); + ОписаниеДома.ВидВладения = 0; + ОписаниеДома.ВидСтроения = 0; + ОписаниеДома.НазваниеСтроения = ""; + Возврат ОписаниеДома; +КонецФункции // Функция - Полные наименования сокращений // // Параметры: -// СоответствиеСокращений - Соответствие - сокращения адреса +// СоответствиеСокращений - Соответствие - сокращения адреса. // Процедура ПолныеНаименованияСокращений(СоответствиеСокращений) Экспорт @@ -4990,11 +5322,11 @@ | ТаблицаСокращений КАК ТаблицаСокращений | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УровниСокращенийАдресныхСведений КАК УровниСокращенийАдресныхСведений | ПО ТаблицаСокращений.Уровень = УровниСокращенийАдресныхСведений.Уровень - | И (ТаблицаСокращений.Сокращение ПОДОБНО УровниСокращенийАдресныхСведений.Сокращение)"; + | И (ТаблицаСокращений.Сокращение = УровниСокращенийАдресныхСведений.Сокращение)"; ТаблицаСоответствиеСокращений = Новый ТаблицаЗначений; ТаблицаСоответствиеСокращений.Колонки.Добавить("Уровень", Новый ОписаниеТипов("Число")); - ТаблицаСоответствиеСокращений.Колонки.Добавить("Сокращение", Новый ОписаниеТипов("Строка")); + ТаблицаСоответствиеСокращений.Колонки.Добавить("Сокращение", ОбщегоНазначения.ОписаниеТипаСтрока(30)); Для каждого Элемент Из СоответствиеСокращений Цикл НоваяСтрока = ТаблицаСоответствиеСокращений.Добавить(); НоваяСтрока.Уровень = Элемент.Ключ; @@ -5010,11 +5342,367 @@ КонецПроцедуры +// Возвращает соответствие полных наименований адресных объектов и их сокращения. +// +// Параметры: +// НаименованияАдресныхОбъектов - Массив - Полные наименования адресных объектов. Если передан пустой массив, +// то будут возвращен полный список наименований и сокращений. +// +// Возвращаемое значение: +// Соответствие - Соответствие найденных полных наименований адресных объектов их сокращениям. +// +Функция СокращенияАдресныхОбъектов(НаименованияАдресныхОбъектов) Экспорт + + Результат = Новый Соответствие; + + Источник = ИсточникДанныхАдресногоКлассификатора(); + Если ПустаяСтрока(Источник) Тогда + + СтрокаЗапросГде = ""; + Если ТипЗнч(НаименованияАдресныхОбъектов) = Тип("Массив") И НаименованияАдресныхОбъектов.Количество() > 0 Тогда + СтрокаЗапросГде = " ГДЕ УровниСокращенийАдресныхСведений.Значение В(&АдресныеСокращения) "; + КонецЕсли; + + Запрос = Новый Запрос(); + Запрос.Текст = + "ВЫБРАТЬ + | УровниСокращенийАдресныхСведений.Значение КАК Наименование, + | УровниСокращенийАдресныхСведений.Сокращение КАК Сокращение + |ИЗ + | РегистрСведений.УровниСокращенийАдресныхСведений КАК УровниСокращенийАдресныхСведений + | " + СтрокаЗапросГде + " + | + |СГРУППИРОВАТЬ ПО + | УровниСокращенийАдресныхСведений.Значение, + | УровниСокращенийАдресныхСведений.Сокращение + | + |УПОРЯДОЧИТЬ ПО + | Наименование"; + + Если НЕ ПустаяСтрока(СтрокаЗапросГде) Тогда + Запрос.УстановитьПараметр("АдресныеСокращения", НаименованияАдресныхОбъектов); + КонецЕсли; + ТаблицаАдресныхСокращений = Запрос.Выполнить().Выгрузить(); + + Для каждого СтрокаТаблицы Из ТаблицаАдресныхСокращений Цикл + Результат.Вставить(ВРег(СтрокаТаблицы.Наименование), СтрокаТаблицы.Сокращение); + КонецЦикла; + + Если Результат.Количество() > 0 Тогда + Возврат Результат; + КонецЕсли; + КонецЕсли; + + // Веб сервис 1С или классификатор не загружен, получаем данные о сокращениях из макета. + ТаблицаАдресныхСокращений = РегистрыСведений.АдресныеОбъекты.АдресныеСокращения(); + + Если ТипЗнч(НаименованияАдресныхОбъектов) = Тип("Массив") И НаименованияАдресныхОбъектов.Количество() > 0 Тогда + Для каждого ПолноеНаименование Из НаименованияАдресныхОбъектов Цикл + СтрокаТаблицы = ТаблицаАдресныхСокращений.Найти(ТРег(ПолноеНаименование), "Наименование"); + Если СтрокаТаблицы <> Неопределено Тогда + Результат.Вставить(ВРег(СтрокаТаблицы.Наименование), СтрокаТаблицы.Сокращение); + КонецЕсли; + КонецЦикла; + Иначе + Для каждого СтрокаТаблицы Из ТаблицаАдресныхСокращений Цикл + Результат.Вставить(ВРег(СтрокаТаблицы.Наименование), СтрокаТаблицы.Сокращение); + КонецЦикла; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Проверяет наличие записей о регионах в регистре сведений АдресныеОбъекты и заполняет их в случае отсутствия. +// +Функция ПроверитьНачальноеЗаполнение() Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | АдресныеОбъекты.Уровень + |ИЗ + | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты + |ГДЕ + | АдресныеОбъекты.Уровень = 1"; + + РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + + Если РезультатЗапроса.Количество() = 0 Тогда + Если ПравоДоступа("Изменение", Метаданные.РегистрыСведений.АдресныеОбъекты) Тогда + ВыполнитьНачальноеЗаполнение(); + Иначе + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Загрузка адресного классификатора + +// Загрузка всех данных классификатора адресов. +// +// Параметры: +// КодыСубъектовРФ - Массив - Содержит числовые коды регионов-субъектов для загрузки. +// +// ОписаниеФайлов - Строка, Массив - Каталог на сервере, в котором находятся файлы данных. Ожидается, что имена +// файлов будут в верхнем регистре. +// Массив элементов типа ОписаниеПередаваемогоФайла или структур с полями. +// * Имя - Строка - Имя или полное имя передаваемого файла. +// * Хранение - ДвоичныеДанные, Строка - Описание хранения файла. Строка +// может быть путем на файловой системе или адресом во временном +// хранилище. +// ОповещатьОПрогрессе - Булево - Флаг оповещения о прогрессе (см ДлительныеОперации.СообщитьПрогресс). +// +Процедура ЗагрузитьКлассификаторАдресов(КодыСубъектовРФ, ОписаниеФайлов, ОповещатьОПрогрессе = Истина) Экспорт + + ДатаЗагрузки = ТекущаяУниверсальнаяДата(); + + Если ТипЗнч(ОписаниеФайлов) = Тип("Строка") Тогда + // Файлы уже подготовлены + КаталогФайлов = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ОписаниеФайлов); + Иначе + // Извлекаем файлы + КаталогФайлов = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути( ПолучитьИмяВременногоФайла() ); + СоздатьКаталог(КаталогФайлов); + + Если ТипЗнч(ОписаниеФайлов) <> Тип("Массив") Тогда + // Если ОписаниеФайлов не массив, то данные передаются через константу, после извлечения очищаем передаваемые данные. + ПараметрыАдресногоКлассификатора = Константы.ПараметрыАдресногоКлассификатора.Получить().Получить(); + ОписаниеФайлов = ПараметрыАдресногоКлассификатора.ОписаниеФайлов; + ПараметрыАдресногоКлассификатора.Удалить("ОписаниеФайлов"); + ХранилищеПараметров = Новый ХранилищеЗначения(ПараметрыАдресногоКлассификатора); + Константы.ПараметрыАдресногоКлассификатора.Установить(ХранилищеПараметров); + КонецЕсли; + + Для Каждого ОписаниеФайла Из ОписаниеФайлов Цикл + Файл = Новый Файл(ОписаниеФайла.Имя); + ПолноеИмяФайла = КаталогФайлов + ВРег(Файл.Имя); + + Данные = ОписаниеФайла.Хранение; + ТипДанных = ТипЗнч(Данные); + + Если ТипДанных = Тип("ДвоичныеДанные") Тогда + Данные.Записать(ПолноеИмяФайла); + + ИначеЕсли ЭтоАдресВременногоХранилища(Данные) Тогда + Данные = ПолучитьИзВременногоХранилища(Данные); + Данные.Записать(ПолноеИмяФайла); + + Иначе + ПолноеИмяФайла = Данные; + + КонецЕсли; + + Если ВРег(Прав(ПолноеИмяФайла, 4)) = ".ZIP" Тогда + Архив = Новый ЧтениеZipФайла(ПолноеИмяФайла); + Архив.ИзвлечьВсе(КаталогФайлов, РежимВосстановленияПутейФайловZIP.НеВосстанавливать); + УдалитьВременныйФайл(ПолноеИмяФайла); + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + ВидыСведенийНеОбработаны = Истина; + + // 2. Все заказанные субъекты + ВсегоСубъектов = КодыСубъектовРФ.Количество(); + НомерПоПорядку = 0; + + Для Каждого СубъектРФ Из КодыСубъектовРФ Цикл + + НомерПоПорядку = НомерПоПорядку + 1; + Если ОповещатьОПрогрессе Тогда + ДлительныеОперации.СообщитьПрогресс(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Загрузка региона ""%1 - %2"" (осталось %3) ...'"), + СубъектРФ, АдресныйКлассификатор.НаименованиеРегионаПоКоду(СубъектРФ), + Формат(ВсегоСубъектов - НомерПоПорядку, "ЧН="))); + КонецЕсли; + + Если ВидыСведенийНеОбработаны Тогда + // Общая справочная информация, понадобится потом. + СлужебныеАдресныеСведения = СлужебныеАдресныеСведения(Неопределено, КаталогФайлов); + // И сразу запишем + Набор = РегистрыСведений.СлужебныеАдресныеСведения.СоздатьНаборЗаписей(); + Набор.Загрузить(СлужебныеАдресныеСведения.Сведения); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); + + ВидыСведенийНеОбработаны = Ложь; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + + ВерсияСубъектаРФ = ИнформацияОЗагрузкеВерсии(СубъектРФ).Версия; + Если ВерсияСубъектаРФ <> СлужебныеАдресныеСведения.Версия Тогда + ЗагрузитьАдресныеОбъекты(СубъектРФ, КаталогФайлов, СлужебныеАдресныеСведения.Сведения); + ЗагрузитьДомаЗданияСтроения(СубъектРФ, КаталогФайлов, СлужебныеАдресныеСведения.Сведения); + ЗагрузитьИсториюАдресныхОбъектов(СубъектРФ, КаталогФайлов, СлужебныеАдресныеСведения.Сведения); + ЗагрузитьПричиныИзмененияАдреса(СубъектРФ, КаталогФайлов, СлужебныеАдресныеСведения.Сведения); + ЗагрузитьДополнительныеСведения(СубъектРФ, КаталогФайлов, СлужебныеАдресныеСведения.Сведения); + ЗагрузитьАдресныеОриентиры(СубъектРФ, КаталогФайлов, СлужебныеАдресныеСведения.Сведения); + + // Ставим версию данных загрузки региона. + УстановитьИнформациюОЗагрузкеВерсии(СубъектРФ, СлужебныеАдресныеСведения.Версия, СлужебныеАдресныеСведения.ДатаВерсии, ДатаЗагрузки); + + // Очищаем загруженные данные в старом классификаторе. + ОчиститьСведенияУстаревшегоКлассификатора(СубъектРФ); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + КонецЦикла; + + // 3. Обновляем список субъектов РФ - убеждаемся, что у нас есть все корневые записи. + РегистрыСведений.АдресныеОбъекты.ОбновитьСоставСубъектовРФПоКлассификатору(); + + // 4. Загружаем сокращения адресов. + // Эти данные будут нужны при разборах адреса из строки. + АдресныеСокращения = АдресныеСокращения(КаталогФайлов); + Набор = РегистрыСведений.УровниСокращенийАдресныхСведений.СоздатьНаборЗаписей(); + Набор.Загрузить(АдресныеСокращения.Сведения); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); // Отключаем всю бизнес-логику для ускорения операции. + + // 5. Очищаем временный каталог. + Если ТипЗнч(ОписаниеФайлов) = Тип("Строка") Тогда + УдалитьВременныйФайл(КаталогФайлов); + КонецЕсли; + +КонецПроцедуры + +// Удаляет временный файл. +// Если при попытке удаления возникает ошибка, она игнорируется - файл будет удален позднее. +// +Процедура УдалитьВременныйФайл(ПолноеИмяФайла) Экспорт + + Если ПустаяСтрока(ПолноеИмяФайла) Тогда + Возврат; + КонецЕсли; + + Попытка + УдалитьФайлы(ПолноеИмяФайла) + Исключение + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, + ,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось удалить временный файл + |%1 по причине: %2'"), ПолноеИмяФайла, КраткоеПредставлениеОшибки(ИнформацияОбОшибке()))); + КонецПопытки + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов в эту подсистему. + +// См. одноименную процедуру в общем модуле ПользователиПереопределяемый. +Процедура ПриОпределенииНазначенияРолей(НазначениеРолей) Экспорт + + // ТолькоДляПользователейСистемы. + НазначениеРолей.ТолькоДляПользователейСистемы.Добавить( + Метаданные.Роли.ДобавлениеИзменениеАдресныхСведений.Имя); + +КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции +Функция ОпределитьИдентификаторыАдреса(АдресДляПроверки) Экспорт + + Результат = Новый Структура("Отказ, ИдентификаторАдресногоОбъекта, ИдентификаторДома, ПодробноеПредставлениеОшибки, КраткоеПредставлениеОшибки", Ложь); + + Если НЕ ЭтоКонтактнаяИнформацияВXML(АдресДляПроверки) Тогда + ВызватьИсключение НСтр("ru = 'Сведения о контактной информации были повреждены или некорректно заполнены'"); + КонецЕсли; + + Попытка + ОпределитьИдентификаторыАдресаСервис1С(Результат, АдресДляПроверки); + Исключение + Инфо = ИнформацияОбОшибке(); + СтруктураОписанияОшибкиПоставщика(Результат, ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, Результат.ПодробноеПредставлениеОшибки); + КонецПопытки; + + Возврат Результат; + +КонецФункции + +// Получает идентификаторы адреса через веб-сервис. +// +// Параметры: +// АдресДляПроверки - Строка - Строка XML контактной информации содержащая адрес. +// +// Возвращаемое значение: +// Структура - набор пар ключ-значение. +// * ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - Идентификатор адресного объекта (улицы, нас. пункта). +// * ИдентификаторДома - УникальныйИдентификатор - Идентификатор дома адресного объекта. +// * Отказ - Булево - Поставщик не доступен. +// * ПодробноеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен иначе Неопределено. +// * КраткоеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен иначе Неопределено. +// +Процедура ОпределитьИдентификаторыАдресаСервис1С(Результат, АдресДляПроверки) + + Сервис = АдресныйКлассификаторПовтИсп.СервисКлассификатора1С(); + АдресXDTO = ОбщегоНазначения.ОбъектXDTOИзСтрокиXML(АдресДляПроверки, Сервис.ФабрикаXDTO); + + СписокДляПроверки = Сервис.ФабрикаXDTO.Создать(Сервис.ФабрикаXDTO.Тип(ПространствоИмен(), "AddressList")); + ТипАдресаРФ = Сервис.ФабрикаXDTO.Тип(ПространствоИменАдресаРФ(), "АдресРФ"); + ТипАдреса = Сервис.ФабрикаXDTO.Тип(ПространствоИменАдресаРФ(), "Адрес"); + ТипЭлементаСписка = СписокДляПроверки.Свойства().Получить("Item").Тип; + + ПроверяемыйАдрес = СписокДляПроверки.Item.Добавить(Сервис.ФабрикаXDTO.Создать(ТипЭлементаСписка)); + ПроверяемыйАдрес.Levels = АдресныйКлассификаторПовтИсп.УровниКлассификатораФИАС(); + ПроверяемыйАдрес.Address = АдресXDTO.Состав.Состав; + + КодЯзыка = ТекущийКодЛокализации(); + РезультатПроверки = Сервис.Analyze(СписокДляПроверки, КодЯзыка, Ложь, Метаданные.Имя); + + // Формируем структуру результата. + Если РезультатПроверки.Item.Количество() > 0 Тогда + Если РезультатПроверки.Item[0].Error.Количество() > 0 Тогда + Ошибка = РезультатПроверки.Item[0].Error[0]; + Результат.КраткоеПредставлениеОшибки = Ошибка.Text; + Результат.ПодробноеПредставлениеОшибки = Ошибка.Suggestion; + Результат.Отказ = Истина; + КонецЕсли; + + Если РезультатПроверки.Item[0].Variant.Количество() Тогда + Вариант = РезультатПроверки.Item[0].Variant[0]; + Результат.ИдентификаторАдресногоОбъекта = Вариант.ID; + Результат.ИдентификаторДома = Вариант.HouseID; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ОпределитьФорматКодов(КодыАдреса) + + Если ЗначениеЗаполнено(КодыАдреса.ОКТМО) Тогда + + ОКТМОЧисло = КодыАдреса.ОКТМО; + ОКТМОСтрока = Формат(ОКТМОЧисло, "ЧГ=0"); + + Если СтрДлина(ОКТМОСтрока) < 8 Тогда + КодыАдреса.ОКТМО = Формат(ОКТМОЧисло, "ЧЦ=8; ЧВН=; ЧГ=0"); + ИначеЕсли СтрДлина(ОКТМОСтрока) = 10 Тогда + КодыАдреса.ОКТМО = Формат(ОКТМОЧисло, "ЧЦ=11; ЧВН=; ЧГ=0"); + Иначе + КодыАдреса.ОКТМО = ОКТМОСтрока; + КонецЕсли + + КонецЕсли; + Если ЗначениеЗаполнено(КодыАдреса.OKATO) Тогда + КодыАдреса.OKATO = Формат(КодыАдреса.OKATO, "ЧГ=0"); + КонецЕсли; + +КонецПроцедуры + + #Область СлужебныйПрограммныйИнтерфейсФоновыеОперацииСКлассификатором // Обработчик фоновой загрузки. @@ -5272,7 +5960,8 @@ // Строка - Строка - исходные данные. // // Возвращаемое значение: -// Идентификатор - результат преобразования. +// Идентификатор - Результат преобразования. +// Возвращаемый идентификатор зависит от регистра букв, передавай строки. // Функция УникальныйИдентификаторИзСтроки64(Строка) @@ -5433,10 +6122,10 @@ СлужебныеАдресныеСведения = РегистрыСведений.СлужебныеАдресныеСведения.СоздатьНаборЗаписей(); ТаблицыДанных = Новый Структура; - ТаблицыДанных.Вставить("КлассификаторСубъектовРФ", РегистрыСведений.АдресныеОбъекты.КлассификаторСубъектовРФ() ); - ТаблицыДанных.Вставить("СлужебныеАдресныеСведения", СлужебныеАдресныеСведенияДляОбработкиКЛАДР() ); + ТаблицыДанных.Вставить("КлассификаторСубъектовРФ", РегистрыСведений.АдресныеОбъекты.КлассификаторСубъектовРФ()); + ТаблицыДанных.Вставить("СлужебныеАдресныеСведения", СлужебныеАдресныеСведенияДляОбработкиКЛАДР()); - ТаблицыДанных.Вставить("АдресныеОбъекты", АдресныеОбъекты.ВыгрузитьКолонки() ); + ТаблицыДанных.Вставить("АдресныеОбъекты", АдресныеОбъекты.ВыгрузитьКолонки()); ТаблицыДанных.АдресныеОбъекты.Индексы.Добавить("Идентификатор"); ТаблицыДанных.АдресныеОбъекты.Индексы.Добавить("КодКЛАДР"); @@ -5482,6 +6171,11 @@ ДополнительныеАдресныеСведения.Отбор.КодСубъектаРФ.Установить(СубъектРФ); ОбновлениеИнформационнойБазы.ЗаписатьДанные(ДополнительныеАдресныеСведения); + // Служебные адресные сведения + НаборСлужебныеАдресныеСведения = РегистрыСведений.СлужебныеАдресныеСведения.СоздатьНаборЗаписей(); + НаборСлужебныеАдресныеСведения.Загрузить(ТаблицыДанных.СлужебныеАдресныеСведения); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборСлужебныеАдресныеСведения); + // 4. Истории нет Набор = РегистрыСведений.ИсторияАдресныхОбъектов.СоздатьНаборЗаписей(); Набор.Отбор.КодСубъектаРФ.Установить(СубъектРФ); @@ -5659,23 +6353,38 @@ Функция СлужебныеАдресныеСведенияДляОбработкиКЛАДР() Результат = - // Интервалы - СтрокаСлужебныхАдресныхСведений("INTVSTAT", 1, Неопределено, "Обычный", - СтрокаСлужебныхАдресныхСведений("INTVSTAT", 2, Неопределено, "Четный", - СтрокаСлужебныхАдресныхСведений("INTVSTAT", 3, Неопределено, "Нечетный", - // Дома - СтрокаСлужебныхАдресныхСведений("ESTSTAT", 1, Неопределено, "Владение", - СтрокаСлужебныхАдресныхСведений("ESTSTAT", 2, Неопределено, "Дом", - СтрокаСлужебныхАдресныхСведений("ESTSTAT", 3, Неопределено, "Домовладение", - // Строения - СтрокаСлужебныхАдресныхСведений("STRSTAT", 1, Неопределено, "Строение", - СтрокаСлужебныхАдресныхСведений("STRSTAT", 2, Неопределено, "Сооружение", - СтрокаСлужебныхАдресныхСведений("STRSTAT", 3, Неопределено, "Литера", - СтрокаСлужебныхАдресныхСведений("STRSTAT", 3, Неопределено, "Литер", - РегистрыСведений.СлужебныеАдресныеСведения.СоздатьНаборЗаписей().ВыгрузитьКолонки())))))))))); + // Интервалы + СтрокаСлужебныхАдресныхСведений("INTVSTAT", 1, Неопределено, "Обычный", + СтрокаСлужебныхАдресныхСведений("INTVSTAT", 2, Неопределено, "Четный", + СтрокаСлужебныхАдресныхСведений("INTVSTAT", 3, Неопределено, "Нечетный", + // Дома + СтрокаСлужебныхАдресныхСведений("ESTSTAT", 1, Неопределено, "Владение", + СтрокаСлужебныхАдресныхСведений("ESTSTAT", 2, Неопределено, "Дом", + СтрокаСлужебныхАдресныхСведений("ESTSTAT", 3, Неопределено, "Домовладение", + // Строения + СтрокаСлужебныхАдресныхСведений("STRSTAT", 1, "стр", "Строение", + СтрокаСлужебныхАдресныхСведений("STRSTAT", 2, "сооружение", "Сооружение", + СтрокаСлужебныхАдресныхСведений("STRSTAT", 3, "литера", "Литера", + СтрокаСлужебныхАдресныхСведений("STRSTAT", 3, "литер", "Литер", + // Дополнительные адресные элементы + СтрокаСлужебныхАдресныхСведений("ДопАдрЭлНомер", 0, "Бокс", "2040", + СтрокаСлужебныхАдресныхСведений("ДопАдрЭлНомер", 0, "Владение", "1020", + СтрокаСлужебныхАдресныхСведений("ДопАдрЭлНомер", 0, "Дом", "1010", + СтрокаСлужебныхАдресныхСведений("ДопАдрЭлНомер", 0, "Домовладение", "1030", + СтрокаСлужебныхАдресныхСведений("ДопАдрЭлНомер", 0, "Квартира", "2010", + СтрокаСлужебныхАдресныхСведений("ДопАдрЭлНомер", 0, "Комната", "2050", + СтрокаСлужебныхАдресныхСведений("ДопАдрЭлНомер", 0, "Корпус", "1050", + СтрокаСлужебныхАдресныхСведений("ДопАдрЭлНомер", 0, "Литера", "1080", + СтрокаСлужебныхАдресныхСведений("ДопАдрЭлНомер", 0, "Офис", "2030", + СтрокаСлужебныхАдресныхСведений("ДопАдрЭлНомер", 0, "Помещение", "2020", + СтрокаСлужебныхАдресныхСведений("ДопАдрЭлНомер", 0, "Сооружение", "1070", + СтрокаСлужебныхАдресныхСведений("ДопАдрЭлНомер", 0, "Строение", "1060", + СтрокаСлужебныхАдресныхСведений("ДопАдрЭлНомер", 0, "Участок", "1040", + РегистрыСведений.СлужебныеАдресныеСведения.СоздатьНаборЗаписей().ВыгрузитьКолонки()))))))))))))))))))))))); Результат.Индексы.Добавить("Тип, Значение"); Возврат Результат; + КонецФункции Функция СтрокаСлужебныхАдресныхСведений(Тип, Идентификатор, Ключ, Значение, СлужебныеАдресныеСведения) @@ -6047,6 +6756,21 @@ КонецФункции +// Возвращает информацию из классификатора субъектов РФ. +// +// Возвращаемое значение: +// ТаблицаЗначений - поставляемые данные. Колонки: +// * КодСубъектаРФ - Число - код классификатора субъекта, например 77 для Москвы. +// * Наименование - Строка - наименование субъекта по классификатору. Например "Московская". +// * Сокращение - Строка - наименование субъекта по классификатору. Например "Обл". +// * ПочтовыйИндекс - Число - индекс региона. Если 0 - то неопределено. +// * ПочтовыйИндекс - Число - индекс региона. Если 0 - то неопределено. +// * Идентификатор - УникальныйИдентификатор - идентификатор ФИАС. +// +Функция СведенияОСубъектахРФ() + Возврат РегистрыСведений.АдресныеОбъекты.КлассификаторСубъектовРФ(); +КонецФункции + // Возвращает информацию о состоянии загруженности регионов. // // Возвращаемое значение: @@ -6065,7 +6789,7 @@ // Считаем, что уникальность обеспечивается не идентификатором (что правильно), а кодом субъекта // из-за особенностей платформы по передаче уникального идентификатора в таблицу-параметр запроса. - Запрос = Новый Запрос("ВЫБРАТЬ + Запрос = Новый Запрос("ВЫБРАТЬ | Параметр.Наименование КАК Наименование, | Параметр.Сокращение КАК Сокращение, | Параметр.КодСубъектаРФ КАК КодСубъектаРФ @@ -6160,7 +6884,7 @@ | |УПОРЯДОЧИТЬ ПО | ВЫБОР - | КОГДА ВсеДоступныеРегионы.КодСубъектаРФ ЕСТЬ NULL + | КОГДА ВсеДоступныеРегионы.КодСубъектаРФ ЕСТЬ NULL | ТОГДА Классификатор.КодСубъектаРФ | ИНАЧЕ ВсеДоступныеРегионы.КодСубъектаРФ | КОНЕЦ"); @@ -6215,6 +6939,7 @@ Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | АдресныеОбъекты.КодСубъектаРФ КАК КодСубъектаРФ, + | АдресныеОбъекты.Сокращение КАК Сокращение, | ВЫБОР | КОГДА НЕ ЗагруженныеДанные.Идентификатор ЕСТЬ NULL | ТОГДА ИСТИНА @@ -6227,187 +6952,244 @@ | И АдресныеОбъекты.КодСубъектаРФ = ЗагруженныеДанные.КодСубъектаРФ |ГДЕ | АдресныеОбъекты.Наименование = &Наименование - | И АдресныеОбъекты.Сокращение = &Сокращение | И АдресныеОбъекты.Уровень = 1"; - + Запрос.УстановитьПараметр("Наименование", СведенияОРегионе.Наименование); - Запрос.УстановитьПараметр("Сокращение", СведенияОРегионе.Сокращение); РезультатЗапроса = Запрос.Выполнить().Выбрать(); - Если РезультатЗапроса.Следующий() Тогда - Результат.Загружен = РезультатЗапроса.РегионЗагружен; - Результат.КодСубъектаРФ = РезультатЗапроса.КодСубъектаРФ; - КонецЕсли; + Пока РезультатЗапроса.Следующий() Цикл + Если СтрСравнить(СокрЛП(РезультатЗапроса.Сокращение), СокрЛП(СведенияОРегионе.Сокращение)) = 0 Тогда + Результат.Загружен = РезультатЗапроса.РегионЗагружен; + Результат.КодСубъектаРФ = РезультатЗапроса.КодСубъектаРФ; + Прервать; + КонецЕсли; + КонецЦикла; Возврат Результат; КонецФункции -// Загрузка всех данных классификатора адресов. -// -// Параметры: -// КодыСубъектовРФ - Массив - Содержит числовые коды регионов-субъектов для загрузки. -// -// ОписаниеФайлов - Строка, Массив - Каталог на сервере, в котором находятся файлы данных. Ожидается, что имена -// файлов будут в верхнем регистре. -// Массив элементов типа ОписаниеПередаваемогоФайла или структур с полями. -// * Имя - Строка - Имя или полное имя передаваемого файла. -// * Хранение - ДвоичныеДанные, Строка - Описание хранения файла. Строка -// может быть путем на файловой системе или адресом во временном -// хранилище. -// ОповещатьОПрогрессе - Булево - Флаг оповещения о прогрессе (см ДлительныеОперации.СообщитьПрогресс). -// -Процедура ЗагрузитьКлассификаторАдресов(КодыСубъектовРФ, ОписаниеФайлов, ОповещатьОПрогрессе = Истина) Экспорт - - ДатаЗагрузки = ТекущаяУниверсальнаяДата(); - - Если ТипЗнч(ОписаниеФайлов) = Тип("Строка") Тогда - // Файлы уже подготовлены - КаталогФайлов = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ОписаниеФайлов); - - Иначе - // Извлекаем файлы - КаталогФайлов = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути( ПолучитьИмяВременногоФайла() ); - СоздатьКаталог(КаталогФайлов); - - Для Каждого ОписаниеФайла Из ОписаниеФайлов Цикл - Файл = Новый Файл(ОписаниеФайла.Имя); - ПолноеИмяФайла = КаталогФайлов + ВРег(Файл.Имя);; - - Данные = ОписаниеФайла.Хранение; - ТипДанных = ТипЗнч(Данные); - - Если ТипДанных = Тип("ДвоичныеДанные") Тогда - Данные.Записать(ПолноеИмяФайла); - - ИначеЕсли ЭтоАдресВременногоХранилища(Данные) Тогда - Данные = ПолучитьИзВременногоХранилища(Данные); - Данные.Записать(ПолноеИмяФайла); - - Иначе - ПолноеИмяФайла = Данные; - - КонецЕсли; - - Если ВРег(Прав(ПолноеИмяФайла, 4)) = ".ZIP" Тогда - Архив = Новый ЧтениеZipФайла(ПолноеИмяФайла); - Архив.ИзвлечьВсе(КаталогФайлов, РежимВосстановленияПутейФайловZIP.НеВосстанавливать); - УдалитьВременныйФайл(ПолноеИмяФайла); - КонецЕсли; - - КонецЦикла; - +Функция ПредставлениеРегиона(Наименование, Сокращение) + Если Сокращение = НСтр("ru = 'Респ'") Тогда + Возврат НСтр("ru = 'Республика'") + " " + Наименование; + ИначеЕсли Сокращение = НСтр("ru = 'обл'") Тогда + Возврат Наименование + " " + НСтр("ru = 'область'"); + ИначеЕсли Сокращение = НСтр("ru = 'г'") Тогда + Возврат НСтр("ru = 'г.'") + " " + Наименование; КонецЕсли; - ВидыСведенийНеОбработаны = Истина; - - // 2. Все заказанные субъекты - ВсегоСубъектов = КодыСубъектовРФ.Количество(); - НомерПоПорядку = 0; - - Для Каждого СубъектРФ Из КодыСубъектовРФ Цикл - - НомерПоПорядку = НомерПоПорядку + 1; - Если ОповещатьОПрогрессе Тогда - ДлительныеОперации.СообщитьПрогресс(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Загрузка региона ""%1 - %2"" (осталось %3) ...'"), - СубъектРФ, АдресныйКлассификатор.НаименованиеРегионаПоКоду(СубъектРФ), - Формат(ВсегоСубъектов - НомерПоПорядку, "ЧН="))); - КонецЕсли; - - Если ВидыСведенийНеОбработаны Тогда - // Общая справочная информация, понадобится потом. - СлужебныеАдресныеСведения = СлужебныеАдресныеСведения(Неопределено, КаталогФайлов); - // И сразу запишем - Набор = РегистрыСведений.СлужебныеАдресныеСведения.СоздатьНаборЗаписей(); - Набор.Загрузить(СлужебныеАдресныеСведения.Сведения); - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); - - ВидыСведенийНеОбработаны = Ложь; - КонецЕсли; - - НачатьТранзакцию(); - Попытка - - ВерсияСубъектаРФ = ИнформацияОЗагрузкеВерсии(СубъектРФ).Версия; - Если ВерсияСубъектаРФ <> СлужебныеАдресныеСведения.Версия Тогда - ЗагрузитьАдресныеОбъекты(СубъектРФ, КаталогФайлов, СлужебныеАдресныеСведения.Сведения); - ЗагрузитьДомаЗданияСтроения(СубъектРФ, КаталогФайлов, СлужебныеАдресныеСведения.Сведения); - ЗагрузитьИсториюАдресныхОбъектов(СубъектРФ, КаталогФайлов, СлужебныеАдресныеСведения.Сведения); - ЗагрузитьПричиныИзмененияАдреса(СубъектРФ, КаталогФайлов, СлужебныеАдресныеСведения.Сведения); - ЗагрузитьДополнительныеСведения(СубъектРФ, КаталогФайлов, СлужебныеАдресныеСведения.Сведения); - ЗагрузитьАдресныеОриентиры(СубъектРФ, КаталогФайлов, СлужебныеАдресныеСведения.Сведения); - - // Ставим версию данных загрузки региона. - УстановитьИнформациюОЗагрузкеВерсии(СубъектРФ, СлужебныеАдресныеСведения.Версия, СлужебныеАдресныеСведения.ДатаВерсии, ДатаЗагрузки); - - // Очищаем загруженные данные в старом классификаторе. - ОчиститьСведенияУстаревшегоКлассификатора(СубъектРФ); - КонецЕсли; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - - КонецЦикла; - - // 3. Обновляем список субъектов РФ - убеждаемся, что у нас есть все корневые записи. - РегистрыСведений.АдресныеОбъекты.ОбновитьСоставСубъектовРФПоКлассификатору(); - - // 4. Загружаем сокращения адресов. - // Эти данные будут нужны при разборах адреса из строки. - АдресныеСокращения = АдресныеСокращения(КаталогФайлов); - Набор = РегистрыСведений.УровниСокращенийАдресныхСведений.СоздатьНаборЗаписей(); - Набор.Загрузить(АдресныеСокращения.Сведения); - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); // Отключаем всю бизнес-логику для ускорения операции. - - // 5. Очищаем временный каталог. - Если ТипЗнч(ОписаниеФайлов) = Тип("Строка") Тогда - УдалитьВременныйФайл(КаталогФайлов); - КонецЕсли; - -КонецПроцедуры + Возврат Наименование + " " + Сокращение; +КонецФункции -// Извлекает список домов полученного из регистра сведения описания и добавляет их в список значений +// Извлекает список домов полученного из регистра сведения описания и добавляет их в список значений. // // Параметры: // СтрокаСоСпискомДомов - Строка - описание списка домов из регистра сведения // СтрокаПоиска - Строка - Строка отбора -// ВариантыДомов - Список значений - Список домов +// ВариантыДомов - Список значений - Список домов. // -Процедура ИзвлечьСписокДомов(СтрокаСоСпискомДомов, СтрокаПоиска, ВариантыДомов) +Процедура ИзвлечьСписокДомов(СтрокаСоСпискомДомов, СтрокаПоиска, ВариантыДомов, ТочноеСовпадение) ТипЧисло = Новый ОписаниеТипов("Число"); СтрокаСоСпискомДомов = СтрЗаменить(СтрокаСоСпискомДомов, Символы.ПС, ""); СтрокаСоСпискомДомов = ВРег(СтрЗаменить(СтрокаСоСпискомДомов, Символы.Таб, Символы.ПС)); ЧислоСтрок = СтрЧислоСтрок(СтрокаСоСпискомДомов); Позиция = 1; + Интервалы = Новый Массив; + + НаименованиеЗданийИСтроений = НаименованиеВладенийИСтроений(); Пока Позиция <= ЧислоСтрок Цикл Строка = СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция); Если Строка = "H" Тогда - ВидВладения = ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 1)); - НомерВладения = СокрЛП( СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 2) ); - НомерКорпуса = СокрЛП( СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 3) ); - ВидСтроения = ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 4)); - НомерСтроения = СокрЛП( СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 5) ); - Если ЗначениеЗаполнено(НомерВладения) Тогда - Если СтрНачинаетсяС(НомерВладения, СтрокаПоиска) - И ВариантыДомов.НайтиПоЗначению(НомерВладения) = Неопределено Тогда - ВариантыДомов.Добавить(НомерВладения, НомерВладения); - КонецЕсли; + ОписаниеДома = Новый Структура("ДомЧислом, Дом, Корпус, Строение, ВидСтроения, ВидВладения, НазваниеВладения"); + + ОписаниеДома.ВидВладения = ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 1)); + ОписаниеДома.Дом = СокрЛП(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 2)); + ОписаниеДома.ДомЧислом = НомерДомаЧислом(ОписаниеДома.Дом); + ОписаниеДома.Корпус = СокрЛП(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 3)); + ОписаниеДома.ВидСтроения = ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 4)); + ОписаниеДома.Строение = СокрЛП(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 5)); + ОписаниеДома.НазваниеВладения = СокрЛП(НаименованиеЗданийИСтроений.Владения.Получить(ОписаниеДома.ВидВладения)); + + ПозицияУИД = СтрНайти(ОписаниеДома.Строение, "+"); + Если ПозицияУИД > 0 Тогда + ОписаниеДома.Строение = СокрЛП(Лев(ОписаниеДома.Строение, ПозицияУИД - 1)); КонецЕсли; + + Если ЗначениеЗаполнено(СтрокаПоиска) Тогда + Если ТочноеСовпадение Тогда + Если СтрСравнить(ОписаниеДома.Дом, СтрокаПоиска) = 0 Тогда + ДобавитьИнформациюОДоме(ВариантыДомов, ОписаниеДома, НаименованиеЗданийИСтроений, СтрокаПоиска); + КонецЕсли; + Иначе + Если СтрНачинаетсяС(ОписаниеДома.Дом, СтрокаПоиска) Тогда + ДобавитьИнформациюОДоме(ВариантыДомов, ОписаниеДома, НаименованиеЗданийИСтроений, СтрокаПоиска); + КонецЕсли; + КонецЕсли; + Иначе + ДобавитьИнформациюОДоме(ВариантыДомов, ОписаниеДома, НаименованиеЗданийИСтроений); + КонецЕсли; + Позиция = Позиция + 5; + + ИначеЕсли Строка = "I" Тогда + + // Интервалы набираем для последующего добавления. + Интервал = Новый Структура; + Интервал.Вставить("Вид", ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 1))); + Интервал.Вставить("Начало", ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 2))); + Интервал.Вставить("Конец", ТипЧисло.ПривестиЗначение(СтрПолучитьСтроку(СтрокаСоСпискомДомов, Позиция + 3))); + Интервалы.Добавить(Интервал); + + Позиция = Позиция + 3; КонецЕсли; Позиция = Позиция + 1; КонецЦикла; + + Для Каждого Интервал Из Интервалы Цикл + ВидИнтервала = Интервал.Вид; + + Для НомерВладения = Интервал.Начало По Интервал.Конец Цикл + + Если ВариантыДомов.Найти(НомерВладения, "ДомЧислом") = Неопределено Тогда + Если ПустаяСтрока(СтрокаПоиска) ИЛИ СтрНачинаетсяС(НомерВладения, СтрокаПоиска) Тогда + НомерДомаИСтроения = Новый Структура(); + + НазваниеВладения = НаименованиеЗданийИСтроений.Владения.Получить(0); + НомерДомаИСтроения.Вставить("Дом", Новый Структура("ВидВладения, НомерВладения", НазваниеВладения, НомерВладения)); + + ТекстДом = Новый ФорматированнаяСтрока(НазваниеВладения + " ", + Новый ФорматированнаяСтрока(СтрокаПоиска, Новый Шрифт(,, Истина) , ЦветаСтиля.РезультатУспехЦвет), + Сред(НомерВладения, СтрДлина(СтрокаПоиска) + 1)); + + ИнформацияОДоме = ВариантыДомов.Добавить(); + ИнформацияОДоме.ДомЧислом = НомерВладения; + ИнформацияОДоме.Дом = НомерВладения; + ИнформацияОДоме.Значение = НомерДомаИСтроения; + ИнформацияОДоме.Представление = ТекстДом; + КонецЕсли; + КонецЕсли; + + + Если ВидИнтервала = 2 ИЛИ ВидИнтервала = 3 Тогда + // Четный и нечетный интервал + НомерВладения = НомерВладения + 1; + КонецЕсли; + КонецЦикла; + + КонецЦикла; + КонецПроцедуры +Процедура ДобавитьИнформациюОДоме(ВариантыДомов, ОписаниеДома, НаименованиеЗданийИСтроений, СтрокаПоиска = "") + + НомерДомаИСтроения = Новый Структура(); + + НомерДомаИСтроения.Вставить("Дом", Новый Структура("ВидВладения, НомерВладения", ОписаниеДома.НазваниеВладения, ОписаниеДома.Дом)); + + ТекстДом = Новый ФорматированнаяСтрока(ОписаниеДома.НазваниеВладения + " ", + Новый ФорматированнаяСтрока(СтрокаПоиска, Новый Шрифт(,, Истина) , ЦветаСтиля.РезультатУспехЦвет), + Сред(ОписаниеДома.Дом, СтрДлина(СтрокаПоиска) + 1)); + + ТекстПроДом = ""; + Если ЗначениеЗаполнено(ОписаниеДома.Корпус) Тогда + ТекстПроДом = ТекстПроДом + ", "+ НСтр("ru = 'корпус'") + " " + ОписаниеДома.Корпус; + НомерДомаИСтроения.Вставить("Корпус", Новый Структура("ВидКорпуса, НомерКорпуса", "Корпус", ОписаниеДома.Корпус)); + КонецЕсли; + + Если ЗначениеЗаполнено(ОписаниеДома.Строение) Тогда + НазваниеСтроения = НРег(НаименованиеЗданийИСтроений.Строения.Получить(ОписаниеДома.ВидСтроения)); + + ТекстПроДом = ТекстПроДом + ", " + НазваниеСтроения + " " + СокрЛП(ОписаниеДома.Строение); + НомерДомаИСтроения.Вставить("Строение", Новый Структура("ВидСтроения, НомерСтроения", НазваниеСтроения, ОписаниеДома.Строение)); + КонецЕсли; + + ТекстПроДомФормат = Новый ФорматированнаяСтрока(ТекстДом, ТекстПроДом); + + ИнформацияОДоме = ВариантыДомов.Добавить(); + ЗаполнитьЗначенияСвойств(ИнформацияОДоме, ОписаниеДома); + ИнформацияОДоме.Значение = НомерДомаИСтроения; + ИнформацияОДоме.Представление = ТекстПроДомФормат; + +КонецПроцедуры + +Функция НомерДомаЧислом(ИсходнаяСтрока) + + ИтоговаяСтрока = ""; + ДлинаСтроки = СтрДлина(ИсходнаяСтрока); + Для Индекс = 1 По ДлинаСтроки Цикл + Символ = Сред(ИсходнаяСтрока, Индекс, 1); + Цифра = КодСимвола(Символ); + Если Цифра > 47 И Цифра < 58 Тогда + ИтоговаяСтрока = ИтоговаяСтрока + Символ; + Иначе + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат ?(ПустаяСтрока(ИтоговаяСтрока), 0, Число(ИтоговаяСтрока)); +КонецФункции + +// Информация о наименование владений и строений +// +Функция НаименованиеВладенийИСтроений() + + Результат = Новый Структура("Владения, Строения", Новый Соответствие, Новый Соответствие); + Результат.Владения.Вставить(0, НСтр("ru = 'Дом'")); + Результат.Строения.Вставить(0, НСтр("ru = 'Строение'")); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Расшифровка.Ключ КАК Значение, + | Расшифровка.Значение КАК ТипАдрЭл, + | ВЫБОР + | КОГДА НЕ ТипыВладения.Идентификатор ЕСТЬ NULL + | ТОГДА ТипыВладения.Тип + | КОГДА НЕ ТипыСтроения.Идентификатор ЕСТЬ NULL + | ТОГДА ТипыСтроения.Тип + | ИНАЧЕ 0 + | КОНЕЦ КАК Тип, + | ВЫБОР + | КОГДА НЕ ТипыВладения.Идентификатор ЕСТЬ NULL + | ТОГДА ТипыВладения.Идентификатор + | КОГДА НЕ ТипыСтроения.Идентификатор ЕСТЬ NULL + | ТОГДА ТипыСтроения.Идентификатор + | ИНАЧЕ 0 + | КОНЕЦ КАК Идентификатор + |ИЗ + | РегистрСведений.СлужебныеАдресныеСведения КАК Расшифровка + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СлужебныеАдресныеСведения КАК ТипыВладения + | ПО (ТипыВладения.Значение = Расшифровка.Ключ) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СлужебныеАдресныеСведения КАК ТипыСтроения + | ПО (ТипыСтроения.Значение = Расшифровка.Ключ) + |ГДЕ + | Расшифровка.Тип = ""ДопАдрЭлНомер"" + | И (ТипыВладения.Тип = ""ESTSTAT"" + | ИЛИ ТипыСтроения.Тип = ""STRSTAT"") + | + |УПОРЯДОЧИТЬ ПО + | Тип"; + + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + + Пока РезультатЗапроса.Следующий() Цикл + Если РезультатЗапроса.Тип = "ESTSTAT" Тогда + Результат.Владения.Вставить(РезультатЗапроса.Идентификатор, РезультатЗапроса.Значение); + ИначеЕсли РезультатЗапроса.Тип = "STRSTAT" Тогда + Результат.Строения.Вставить(РезультатЗапроса.Идентификатор, РезультатЗапроса.Значение); + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + // Удаляет устаревшие данные КЛАДР. // Процедура ОчиститьУстаревшиеАдресныеСведенияКЛАДР(Параметры, АдресРезультата) Экспорт @@ -6435,7 +7217,7 @@ // * Логин - Строка - Данные авторизации. // * Пароль - Строка - Данные авторизации. // -Процедура ЗагрузитьКлассификаторАдресовССайта(КодыСубъектовРФ = Неопределено, ИсходнаяАвторизация = Неопределено) Экспорт +Процедура ЗагрузитьКлассификаторАдресовССайта(КодыСубъектовРФ = Неопределено, ИсходнаяАвторизация = Неопределено) Если ИсходнаяАвторизация = Неопределено Тогда Авторизация = СтандартныеПодсистемыСервер.ПараметрыАутентификацииНаСайте(); @@ -6500,7 +7282,7 @@ // Параметры: // КодыСубъектовРФ - Массив - Содержит числовые коды регионов-субъектов для очистки. // -Процедура ОчиститьКлассификаторАдресов(КодыСубъектовРФ) Экспорт +Процедура ОчиститьКлассификаторАдресов(КодыСубъектовРФ) // Все заказанные субъекты ВсегоСубъектов = КодыСубъектовРФ.Количество(); @@ -6522,6 +7304,7 @@ ОчиститьПричиныИзмененияАдреса(СубъектРФ); ОчиститьДополнительныеСведения(СубъектРФ); ОчиститьАдресныеОриентиры(СубъектРФ); + ОчиститьУровниСокращенийАдресныхСведений(); СброситьИнформациюОЗагрузкеВерсии(СубъектРФ); @@ -6545,7 +7328,7 @@ Разрешения = Новый Массив; // Запрос обновления - Адрес = ОбщегоНазначенияКлиентСервер.СтруктураURI( АдресФайлаОписанияДоступныхВерсий() ); + Адрес = ОбщегоНазначенияКлиентСервер.СтруктураURI( АдресФайлаОписанияДоступныхВерсий()); Разрешения.Добавить( РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса( ВРег(Адрес.Схема), Адрес.Хост, Адрес.Порт, НСтр("ru = 'Проверка обновления адресного классификатора.'"))); @@ -6563,7 +7346,7 @@ // Возвращаемое значение: // Строка - путь к файлу описания данных. // -Функция АдресФайлаОписанияДоступныхВерсий() Экспорт +Функция АдресФайлаОписанияДоступныхВерсий() Возврат "http://downloads.1c.ru/ipp/ITSREPV/V8Update/fias/version.zip"; @@ -6574,7 +7357,7 @@ // Возвращаемое значение: // Строка // -Функция ПространствоИмен() Экспорт +Функция ПространствоИмен() Возврат "http://www.v8.1c.ru/ssl/AddressSystem"; @@ -6621,6 +7404,7 @@ Если Не РезультатПолученияФайла.Статус Тогда Возврат Результат; КонецЕсли; + РезультатПолученияФайла = ПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(АдресОписания.Адрес); // Получен zip, внутри которого xml. КаталогДляРаспаковки = ПолучитьИмяВременногоФайла(); @@ -6659,6 +7443,10 @@ Идентификатор = УникальныйИдентификаторИзДвоичныхДанных(ЗаписьРегиона.AOGUID); ТекущийСубъект = ТекущиеСубъекты.Найти(Идентификатор, "Идентификатор"); + Если ТекущийСубъект = Неопределено Тогда + Продолжить; + КонецЕсли; + СтрокаРегиона = Результат.Добавить(); СтрокаРегиона.КодСубъектаРФ = ЗаписьРегиона.REGIONCODE; СтрокаРегиона.Наименование = ЗаписьРегиона.FORMALNAME; @@ -6698,7 +7486,7 @@ // * НеобходимоОбновление - Булево - Истина, если количество дней от последней загрузки превышает // период актуальности. // -Функция ОписаниеПоследнейЗагрузки() Экспорт +Функция ОписаниеПоследнейЗагрузки() Результат = Новый Структура("ДнейНазад, ДатаПоследнейЗагрузки, УниверсальнаяДатаПоследнейЗагрузки, Представление, НеобходимоОбновление"); @@ -6752,28 +7540,6 @@ Возврат Результат; КонецФункции -// Проверяет наличие записей о регионах в регистре сведений АдресныеОбъекты и заполняет их в случае отсутствия. -// -Процедура ПроверитьНачальноеЗаполнение() Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | АдресныеОбъекты.Уровень - |ИЗ - | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты - |ГДЕ - | АдресныеОбъекты.Уровень = 1"; - - РезультатЗапроса = Запрос.Выполнить().Выбрать(); - - Если НЕ РезультатЗапроса.Следующий() Тогда - ВыполнитьНачальноеЗаполнение(); - КонецЕсли;; - -КонецПроцедуры - - // Возвращает настройку текущего источника данных адресов. // // Возвращаемое значение: @@ -6865,6 +7631,11 @@ Возврат Результат; КонецФункции +Процедура ВставитьЧастьАдреса(Имя, Значение, ПоляАдреса) + Значение.Наименование = СтрЗаменить(Значение.Наименование, """", """"""); + Значение.Сокращение = СтрЗаменить(Значение.Сокращение, """", """"""); + ПоляАдреса.Вставить(Имя, Значение); +КонецПроцедуры Процедура ЗагрузитьАдресныеОбъекты(КодСубъектаРФ, КаталогФайлов, ВидыСведений) @@ -6876,7 +7647,6 @@ ТекущаяЗапись = Неопределено; Пока СледующаяЗаписьФайлаЗагрузкиСубъектаРФ(ФайлЗагрузки, ТекущаяЗапись)Цикл Запись = Набор.Добавить(); - Запись.КодСубъектаРФ = ТекущаяЗапись.REGIONCODE; Запись.КодОкруга = ТекущаяЗапись.AUTOCODE; Запись.КодРайона = ТекущаяЗапись.AREACODE; @@ -6890,10 +7660,11 @@ Запись.Идентификатор = УникальныйИдентификаторИзДвоичныхДанных(ТекущаяЗапись.AOGUID); Запись.ПочтовыйИндекс = ТекущаяЗапись.POSTALCODE; Запись.Наименование = ТекущаяЗапись.FORMALNAME; - Запись.Сокращение = ТекущаяЗапись.SHORTNAME; + Запись.Сокращение = СокрЛП(ТекущаяЗапись.SHORTNAME); Запись.Дополнительно = УникальныйИдентификаторИзДвоичныхДанных(ТекущаяЗапись.EXTRAGUID); Запись.КодКЛАДР = ТекущаяЗапись.CODE; Запись.Актуален = ?(ТекущаяЗапись.CURRSTATUS = 0, Истина, Ложь); + КонецЦикла; ОбновлениеИнформационнойБазы.ЗаписатьДанные(Набор); @@ -7170,6 +7941,29 @@ КонецПроцедуры +Процедура ОчиститьУровниСокращенийАдресныхСведений() + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | АдресныеОбъекты.Уровень + |ИЗ + | РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты + |ГДЕ + | АдресныеОбъекты.Уровень > 1"; + + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + + Если РезультатЗапроса.Следующий() Тогда + Возврат; + КонецЕсли; + + // Т.к. адресный классификатор не содержит сведений, то очищаем таблицу адресных сведений. + УровниСокращенийАдресныхСведений = РегистрыСведений.УровниСокращенийАдресныхСведений.СоздатьНаборЗаписей(); + УровниСокращенийАдресныхСведений.Записать(); + +КонецПроцедуры + Процедура ОчиститьСведенияУстаревшегоКлассификатора(КодСубъектаРФ) Запрос = Новый Запрос(" @@ -7439,25 +8233,6 @@ КонецФункции -// Удаляет временный файл. -// Если при попытке удаления возникает ошибка, она игнорируется - файл будет удален позднее. -// -Процедура УдалитьВременныйФайл(ПолноеИмяФайла) Экспорт - - Если ПустаяСтрока(ПолноеИмяФайла) Тогда - Возврат; - КонецЕсли; - - Попытка - УдалитьФайлы(ПолноеИмяФайла) - Исключение - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, - ,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не удалось удалить временный файл - |%1 по причине: %2'"), ПолноеИмяФайла, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); - КонецПопытки - -КонецПроцедуры #КонецОбласти #КонецОбласти - diff --git a/SSL/src/CommonModules/АнализЖурналаРегистрацииКлиент/Module.bsl b/SSL/src/CommonModules/АнализЖурналаРегистрацииКлиент/Module.bsl new file mode 100644 index 000000000..5218df474 --- /dev/null +++ b/SSL/src/CommonModules/АнализЖурналаРегистрацииКлиент/Module.bsl @@ -0,0 +1,131 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Анализ журнала регистрации". +// +//////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + +//////////////////////////////////////////////////////////////////////////////// +// Клиентские события формы отчета. + +// Обработчик расшифровки табличного документа формы отчета. +// +// Параметры: +// ФормаОтчета - УправляемаяФорма - Форма отчета. +// Элемент - ПолеФормы - Табличный документ. +// Расшифровка - Передается из параметров обработчика "как есть". +// СтандартнаяОбработка - Передается из параметров обработчика "как есть". +// +// См. также: +// "Расширение поля формы для поля табличного документа.ОбработкаРасшифровки" в синтакс-помощнике. +// +Процедура ФормаОтчетаОбработкаРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка) Экспорт + Если ФормаОтчета.НастройкиОтчета.ПолноеИмя <> "Отчет.АнализЖурналаРегистрации" Тогда + Возврат; + КонецЕсли; + + Если ТипЗнч(Элемент.ТекущаяОбласть) = Тип("РисунокТабличногоДокумента") Тогда + Если ТипЗнч(Элемент.ТекущаяОбласть.Объект) = Тип("Диаграмма") Тогда + СтандартнаяОбработка = Ложь; + Возврат; + КонецЕсли; + КонецЕсли; + + ПараметрВариантОтчета = ОтчетыКлиентСервер.НайтиПараметр( + ФормаОтчета.Отчет.КомпоновщикНастроек.Настройки, + ФормаОтчета.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки, + "ВариантОтчета"); + Если ПараметрВариантОтчета = Неопределено Или ПараметрВариантОтчета.Значение <> "ДиаграммаГанта" Тогда + Возврат; + КонецЕсли; + + СтандартнаяОбработка = Ложь; + ТипРасшифровки = Расшифровка.Получить(0); + Если ТипРасшифровки = "РасшифровкаРегламентногоЗадания" Тогда + + ВариантРасшифровки = Новый СписокЗначений; + ВариантРасшифровки.Добавить("СведенияОРегламентномЗадании", НСтр("ru = 'Сведения о регламентном задании'")); + ВариантРасшифровки.Добавить("ОткрытьЖурналРегистрации", НСтр("ru = 'Перейти к журналу регистрации'")); + + ПараметрыОбработчика = Новый Структура; + ПараметрыОбработчика.Вставить("Расшифровка", Расшифровка); + ПараметрыОбработчика.Вставить("ФормаОтчета", ФормаОтчета); + Обработчик = Новый ОписаниеОповещения("РезультатОбработкаРасшифровкиЗавершение", ЭтотОбъект, ПараметрыОбработчика); + ФормаОтчета.ПоказатьВыборИзМеню(Обработчик, ВариантРасшифровки); + + Иначе + ПоказатьСведенияОРегламентномЗадании(Расшифровка); + КонецЕсли; + +КонецПроцедуры + +// Обработчик дополнительной расшифровки (меню табличного документа формы отчета). +// +// Параметры: +// ФормаОтчета - УправляемаяФорма - Форма отчета. +// Элемент - ПолеФормы - Табличный документ. +// Расшифровка - Передается из параметров обработчика "как есть". +// СтандартнаяОбработка - Передается из параметров обработчика "как есть". +// +// См. также: +// "Расширение поля формы для поля табличного документа.ОбработкаДополнительнойРасшифровки" в синтакс-помощнике. +// +Процедура ФормаОтчетаОбработкаДополнительнойРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка) Экспорт + Если ФормаОтчета.НастройкиОтчета.ПолноеИмя <> "Отчет.АнализЖурналаРегистрации" Тогда + Возврат; + КонецЕсли; + Если ТипЗнч(Элемент.ТекущаяОбласть) = Тип("РисунокТабличногоДокумента") Тогда + Если ТипЗнч(Элемент.ТекущаяОбласть.Объект) = Тип("Диаграмма") Тогда + СтандартнаяОбработка = Ложь; + Возврат; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура РезультатОбработкаРасшифровкиЗавершение(ВыбранныйВариант, ПараметрыОбработчика) Экспорт + Если ВыбранныйВариант = Неопределено Тогда + Возврат; + КонецЕсли; + + Действие = ВыбранныйВариант.Значение; + Если Действие = "СведенияОРегламентномЗадании" Тогда + + СписокТочек = ПараметрыОбработчика.ФормаОтчета.ОтчетТабличныйДокумент.Области.ДиаграммаГанта.Объект.Точки; + Для Каждого ТочкаДиаграммыГанта Из СписокТочек Цикл + + РасшифровкаТочки = ТочкаДиаграммыГанта.Расшифровка; + Если ТочкаДиаграммыГанта.Значение = НСтр("ru = 'Фоновые задания'") Тогда + Продолжить; + КонецЕсли; + + Если РасшифровкаТочки.Найти(ПараметрыОбработчика.Расшифровка.Получить(2)) <> Неопределено Тогда + ПоказатьСведенияОРегламентномЗадании(РасшифровкаТочки); + Прервать; + КонецЕсли; + + КонецЦикла; + + ИначеЕсли Действие = "ОткрытьЖурналРегистрации" Тогда + + СеансРегламентногоЗадания = Новый СписокЗначений; + СеансРегламентногоЗадания.Добавить(ПараметрыОбработчика.Расшифровка.Получить(1)); + ДатаНачала = ПараметрыОбработчика.Расшифровка.Получить(3); + ДатаОкончания = ПараметрыОбработчика.Расшифровка.Получить(4); + ОтборЖурналаРегистрации = Новый Структура("Сеанс, ДатаНачала, ДатаОкончания", + СеансРегламентногоЗадания, ДатаНачала, ДатаОкончания); + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", ОтборЖурналаРегистрации); + + КонецЕсли; + +КонецПроцедуры + +Процедура ПоказатьСведенияОРегламентномЗадании(Расшифровка) + ПараметрыФормы = Новый Структура("РасшифровкаИзОтчета", Расшифровка); + ОткрытьФорму("Отчет.АнализЖурналаРегистрации.Форма.СведенияОРегламентномЗадании", ПараметрыФормы); +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/АнализЖурналаРегистрацииКлиент/АнализЖурналаРегистрацииКлиент.mdo b/SSL/src/CommonModules/АнализЖурналаРегистрацииКлиент/АнализЖурналаРегистрацииКлиент.mdo new file mode 100644 index 000000000..8b351cc5d --- /dev/null +++ b/SSL/src/CommonModules/АнализЖурналаРегистрацииКлиент/АнализЖурналаРегистрацииКлиент.mdo @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="9440a132-366f-4fc9-bd72-2544ba2b072a"> + <name>АнализЖурналаРегистрацииКлиент</name> + <synonym> + <key>ru</key> + <value>Анализ журнала регистрации клиент</value> + </synonym> + <clientManagedApplication>true</clientManagedApplication> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/АнализЖурналаРегистрацииСлужебный/Module.bsl b/SSL/src/CommonModules/АнализЖурналаРегистрацииСлужебный/Module.bsl index 7af2c085c..a70f110cc 100644 --- a/SSL/src/CommonModules/АнализЖурналаРегистрацииСлужебный/Module.bsl +++ b/SSL/src/CommonModules/АнализЖурналаРегистрацииСлужебный/Module.bsl @@ -45,12 +45,26 @@ // Содержит настройки размещения вариантов отчетов в панели отчетов. // // Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// Настройки - Коллекция - Содержит настройки всех отчетов и вариантов конфигурации. +// Используется для передачи в параметрах вспомогательных методов. // // Описание: // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // +// Вспомогательные методы: +// 1. Функции ОписаниеОтчета и ОписаниеВарианта формируют описание настроек отчета и варианта для последующего изменения: +// НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.<ИмяОтчета>); +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// Возвращаемые коллекции содержат одинаковый набор свойств. +// НастройкиОтчета используются как умолчания для вариантов, описания которых еще не получены. +// Подробнее - см. "свойства для изменения" в комментарии к ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// 2. Процедура УстановитьРежимВыводаВПанеляхОтчетов позволяет настроить режим группировки вариантов в панелях отчетов: +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Отчеты.<ИмяОтчета>, Истина/Ложь); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Подсистемы.<ИмяПодсистемы>, Истина/Ложь); +// 3. Процедура НастроитьОтчетВМодулеМенеджера позволяет переопределять настройки отчета в его модуле менеджера: +// ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.<ИмяОтчета>); +// Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.АнализЖурналаРегистрации); diff --git a/SSL/src/CommonModules/Анкетирование/Module.bsl b/SSL/src/CommonModules/Анкетирование/Module.bsl index bf7b2eb49..a464d044d 100644 --- a/SSL/src/CommonModules/Анкетирование/Module.bsl +++ b/SSL/src/CommonModules/Анкетирование/Module.bsl @@ -43,6 +43,19 @@ КонецПроцедуры +// См. одноименную процедуру в общем модуле ПользователиПереопределяемый. +Процедура ПриОпределенииНазначенияРолей(НазначениеРолей) Экспорт + + // ТолькоДляВнешнихПользователей. + НазначениеРолей.ТолькоДляВнешнихПользователей.Добавить( + Метаданные.Роли.ДобавлениеИзменениеОтветовНаВопросыАнкет.Имя); + + // СовместноДляПользователейИВнешнихПользователей. + НазначениеРолей.СовместноДляПользователейИВнешнихПользователей.Добавить( + Метаданные.Роли.ЧтениеОтветовНаВопросыАнкет.Имя); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -64,12 +77,26 @@ // Содержит настройки размещения вариантов отчетов в панели отчетов. // // Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// Настройки - Коллекция - Содержит настройки всех отчетов и вариантов конфигурации. +// Используется для передачи в параметрах вспомогательных методов. // // Описание: // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // +// Вспомогательные методы: +// 1. Функции ОписаниеОтчета и ОписаниеВарианта формируют описание настроек отчета и варианта для последующего изменения: +// НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.<ИмяОтчета>); +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// Возвращаемые коллекции содержат одинаковый набор свойств. +// НастройкиОтчета используются как умолчания для вариантов, описания которых еще не получены. +// Подробнее - см. "свойства для изменения" в комментарии к ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// 2. Процедура УстановитьРежимВыводаВПанеляхОтчетов позволяет настроить режим группировки вариантов в панелях отчетов: +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Отчеты.<ИмяОтчета>, Истина/Ложь); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Подсистемы.<ИмяПодсистемы>, Истина/Ложь); +// 3. Процедура НастроитьОтчетВМодулеМенеджера позволяет переопределять настройки отчета в его модуле менеджера: +// ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.<ИмяОтчета>); +// Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.АнализОпроса); @@ -1636,30 +1663,6 @@ //////////////////////////////////////////////////////////////////////////////// // Прочее -// Функция заполняет структуру значениями перечисления. -// -// Параметры: -// ИмяПеречисления - строка - имя перечисления. -// Включать пустую ссылку - булево - добавлять ли в структуру значение пустой ссылки. -// -// Возвращаемое значение: -// СтруктураВозврата - Структура содержащая значения перечисления, -// в том числе пустое значение. -Функция ПолучитьСтруктуруЗначенияПеречисления(ИмяПеречисления, ВключатьПустуюСсылку = ЛОЖЬ) Экспорт - - СтруктураВозврата = Новый Структура; - Для каждого ЭлементМетаданных Из Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления Цикл - СтруктураВозврата.Вставить(ЭлементМетаданных.Имя,Перечисления[ИмяПеречисления][ЭлементМетаданных.Имя]); - КонецЦикла; - - Если ВключатьПустуюСсылку Тогда - СтруктураВозврата.Вставить("ПустаяСсылка",Перечисления[ИмяПеречисления].ПустаяСсылка()); - КонецЕсли; - - Возврат СтруктураВозврата; - -КонецФункции - // Процедура удаляет старые элементы вопроса шаблона анкеты. Процедура УдалитьВопросыШаблонаАнкеты(СсылкаВладелец) Экспорт @@ -1788,11 +1791,11 @@ |ГДЕ | НазначениеОпросов.Проведен | И (НЕ НазначениеОпросов.ПометкаУдаления) - | И (НазначениеОпросов.ДатаНачала = &ПустаяДата - | ИЛИ НАЧАЛОПЕРИОДА(НазначениеОпросов.ДатаНачала, ДЕНЬ) < &ТекущаяДата) | И НазначениеОпросов.ТипРеспондентов = &ТипРеспондентов - | И (НазначениеОпросов.ДатаОкончания = &ПустаяДата - | ИЛИ КОНЕЦПЕРИОДА(НазначениеОпросов.ДатаОкончания, ДЕНЬ) > &ТекущаяДата) + | И НЕ (НЕ НазначениеОпросов.ДатаНачала = &ПустаяДата + | И НЕ НАЧАЛОПЕРИОДА(НазначениеОпросов.ДатаНачала, ДЕНЬ) < &ТекущаяДата) + | И НЕ (НЕ НазначениеОпросов.ДатаОкончания = &ПустаяДата + | И НЕ КОНЕЦПЕРИОДА(НазначениеОпросов.ДатаОкончания, ДЕНЬ) > &ТекущаяДата) |; | |//////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/CommonModules/АнкетированиеКлиентСервер/Module.bsl b/SSL/src/CommonModules/АнкетированиеКлиентСервер/Module.bsl index c3900b018..b78b92e93 100644 --- a/SSL/src/CommonModules/АнкетированиеКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АнкетированиеКлиентСервер/Module.bsl @@ -142,7 +142,7 @@ // // Параметры: // ЭтоРаздел - Булево - признак раздела. -// ТипВопроса - Перечисление.ТипыВопросовШаблонаАнкеты +// ТипВопроса - Перечисление.ТипыВопросовШаблонаАнкеты. // // Возвращаемое значение: // Число - код картинки для отображения в дереве. @@ -163,4 +163,12 @@ КонецФункции +Процедура ПереключитьВидимостьГруппТелаАнкеты(Форма, ВидимостьТелаАнкеты) Экспорт + + Форма.Элементы.ГруппаТелоАнкеты.Видимость = ВидимостьТелаАнкеты; + Форма.Элементы.ГруппаОжидание.Видимость = НЕ ВидимостьТелаАнкеты; + +КонецПроцедуры + + #КонецОбласти diff --git a/SSL/src/CommonModules/БанкиСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/БанкиСлужебныйВМоделиСервиса/Module.bsl index 14ae5158d..ae0f12977 100644 --- a/SSL/src/CommonModules/БанкиСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/БанкиСлужебныйВМоделиСервиса/Module.bsl @@ -3,7 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -#Область СлужебныйПрограммныйИнтерфейс +#Область ПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -32,10 +32,6 @@ КонецПроцедуры -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - // Регистрирует обработчики поставляемых данных. // Процедура ЗарегистрироватьОбработчикиПоставляемыхДанных(Знач Обработчики) Экспорт diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl index 370cef25f..9ada76c7f 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl @@ -104,30 +104,41 @@ Результат = Истина; СведенияОЗадачах = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(МассивЗадач, "БизнесПроцесс,Выполнена"); - Для Каждого Задача Из СведенияОЗадачах Цикл - - Если Задача.Значение.Выполнена Тогда - Результат = Ложь; - Если ТолькоПроверка Тогда - Прервать; - КонецЕсли; - КонецЕсли; - - Если ТолькоПроверка Тогда - Продолжить; - КонецЕсли; - - Если НЕ ЗначениеЗаполнено(МассивПеренаправленныхЗадач) Тогда - МассивПеренаправленныхЗадач = Новый Массив(); - КонецЕсли; - - НачатьТранзакцию(); - Попытка + НачатьТранзакцию(); + Попытка + Для Каждого Задача Из СведенияОЗадачах Цикл + + Если Задача.Значение.Выполнена Тогда + Результат = Ложь; + Если ТолькоПроверка Тогда + ОтменитьТранзакцию(); + Возврат Результат; + КонецЕсли; + КонецЕсли; + БизнесПроцессыИЗадачиСервер.ЗаблокироватьЗадачи(Задача.Ключ); - Если Не Задача.Значение.БизнесПроцесс.Пустая() Тогда + Если ЗначениеЗаполнено(Задача.Значение.БизнесПроцесс) И Не Задача.Значение.БизнесПроцесс.Пустая() Тогда БизнесПроцессыИЗадачиСервер.ЗаблокироватьБизнесПроцессы(Задача.Значение.БизнесПроцесс); КонецЕсли; - + КонецЦикла; + + Если ТолькоПроверка Тогда + Для Каждого Задача Из СведенияОЗадачах Цикл + ЗадачаОбъект = Задача.Ключ.ПолучитьОбъект(); + ЗадачаОбъект.Выполнена = Ложь; + ЗадачаОбъект.ДополнительныеСвойства.Вставить("Перенаправление", Истина); + ЗадачаОбъект.ВыполнитьЗадачу(); + КонецЦикла; + ОтменитьТранзакцию(); + Возврат Результат; + КонецЕсли; + + Для Каждого Задача Из СведенияОЗадачах Цикл + + Если НЕ ЗначениеЗаполнено(МассивПеренаправленныхЗадач) Тогда + МассивПеренаправленныхЗадач = Новый Массив(); + КонецЕсли; + // Не устанавливаем объектную блокировку на задачу Задача для того, чтобы // позволить выполнять перенаправление по команде из формы этой задачи. ЗадачаОбъект = Задача.Ключ.ПолучитьОбъект(); @@ -164,14 +175,18 @@ КонецЦикла; ПриПеренаправленииЗадачи(ЗадачаОбъект, НоваяЗадача); + + КонецЦикла; - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); + ЗафиксироватьТранзакцию(); + Исключение + Результат = Ложь; + ОтменитьТранзакцию(); + Если Не ТолькоПроверка Тогда ВызватьИсключение; - КонецПопытки; - - КонецЦикла; + КонецЕсли; + КонецПопытки; + Возврат Результат; КонецФункции @@ -391,67 +406,6 @@ КонецФункции -// Обработчик регламентного задания УведомлениеИсполнителейОНовыхЗадачах. -// -Процедура УведомитьИсполнителейОНовыхЗадачах() Экспорт - - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.УведомлениеИсполнителейОНовыхЗадачах); - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда - Возврат; - КонецЕсли; - - ДатаУведомления = ТекущаяДатаСеанса(); - ДатаПоследнегоУведомления = Константы.ДатаУведомленияОНовыхЗадачах.Получить(); - - // Если оповещение ранее не производилось, или последнее оповещение происходило - // ранее, чем за сутки, то отбираем новые задачи за последние сутки. - Если (ДатаПоследнегоУведомления = '00010101000000') - Или (ДатаУведомления - ДатаПоследнегоУведомления > 24*60*60) Тогда - ДатаПоследнегоУведомления = ДатаУведомления - 24*60*60; - КонецЕсли; - - ЗаписьЖурналаРегистрации(БизнесПроцессыИЗадачиСервер.СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Информация, , , - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Начато регламентное уведомление о новых задачах за период %1 - %2'"), - ДатаПоследнегоУведомления, ДатаУведомления)); - - ЗадачиПоИсполнителям = ВыбратьНовыеЗадачиПоИсполнителям(ДатаПоследнегоУведомления, ДатаУведомления); - Для Каждого СтрокаИсполнителя Из ЗадачиПоИсполнителям.Строки Цикл - ОтправитьУведомлениеОНовыхЗадачах(СтрокаИсполнителя.Исполнитель, СтрокаИсполнителя); - КонецЦикла; - - УстановитьПривилегированныйРежим(Истина); - Константы.ДатаУведомленияОНовыхЗадачах.Установить(ДатаУведомления); - УстановитьПривилегированныйРежим(Ложь); - - ЗаписьЖурналаРегистрации(БизнесПроцессыИЗадачиСервер.СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Информация, , , - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Завершено регламентное уведомление о новых задачах (уведомлено исполнителей: %1)'"), - ЗадачиПоИсполнителям.Строки.Количество())); - -КонецПроцедуры - -// Обработчик регламентного задания МониторингЗадач. -// -Процедура ПроконтролироватьЗадачи() Экспорт - - ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.МониторингЗадач); - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда - Возврат; - КонецЕсли; - - ПросроченныеЗадачи = ВыбратьПросроченныеЗадачи(); - Если ПросроченныеЗадачи.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - НаборПисемПоАдресатам = ВыбратьИсполнителейПросроченныхЗадач(ПросроченныеЗадачи); - Для Каждого ПисьмоИзНабора Из НаборПисемПоАдресатам Цикл - ОтправитьУведомлениеОПросроченныхЗадачах(ПисьмоИзНабора); - КонецЦикла; - -КонецПроцедуры - // Формирует список подбора для указания исполнителя в полях // ввода составного типа (Пользователь и Роль). Функция СформироватьДанныеВыбораИсполнителя(Текст) Экспорт @@ -490,454 +444,26 @@ КонецФункции +// Устарела. Следует использовать БизнесПроцессыИЗадачиСервер.УведомитьИсполнителейОНовыхЗадачах. +// +Процедура УведомитьИсполнителейОНовыхЗадачах() Экспорт + + БизнесПроцессыИЗадачиСервер.УведомитьИсполнителейОНовыхЗадачах(); + +КонецПроцедуры + +// Устарела. Следует использовать БизнесПроцессыИЗадачиСервер.ПроконтролироватьЗадачи. +// +Процедура ПроконтролироватьЗадачи() Экспорт + + БизнесПроцессыИЗадачиСервер.ПроконтролироватьЗадачи(); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Мониторинг и контроль исполнения. - -Функция ВыгрузитьИсполнителей(ТекстЗапроса, ОсновнойОбъектАдресацииСсылка, ДопОбъектАдресацииСсылка) - - Запрос = Новый Запрос(ТекстЗапроса); - - Если ЗначениеЗаполнено(ДопОбъектАдресацииСсылка) Тогда - Запрос.УстановитьПараметр("ДОА", ДопОбъектАдресацииСсылка); - КонецЕсли; - - Если ЗначениеЗаполнено(ОсновнойОбъектАдресацииСсылка) Тогда - Запрос.УстановитьПараметр("ООА", ОсновнойОбъектАдресацииСсылка); - КонецЕсли; - - Возврат Запрос.Выполнить().Выгрузить(); - -КонецФункции - -Функция НайтиИсполнителейПоРолям(Знач Задача, Знач БазовыйТекстЗапроса) - - СписокПользователей = Новый Массив; - - ООА = Задача.ОсновнойОбъектАдресации; - ДОА = Задача.ДополнительныйОбъектАдресации; - - Если ЗначениеЗаполнено(ДОА) Тогда - ТекстЗапроса = БазовыйТекстЗапроса + " И ИсполнителиЗадач.ОсновнойОбъектАдресации = &ООА - |И ИсполнителиЗадач.ДополнительныйОбъектАдресации = &ДОА"; - ИначеЕсли ЗначениеЗаполнено(ООА) Тогда - ТекстЗапроса = БазовыйТекстЗапроса - + " И ИсполнителиЗадач.ОсновнойОбъектАдресации = &ООА - |И (ИсполнителиЗадач.ДополнительныйОбъектАдресации = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ОбъектыАдресацииЗадач.ПустаяСсылка) - | ИЛИ ИсполнителиЗадач.ДополнительныйОбъектАдресации = Неопределено)"; - Иначе - ТекстЗапроса = БазовыйТекстЗапроса - + " И (ИсполнителиЗадач.ОсновнойОбъектАдресации = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ОбъектыАдресацииЗадач.ПустаяСсылка) - | ИЛИ ИсполнителиЗадач.ОсновнойОбъектАдресации = Неопределено) - |И (ИсполнителиЗадач.ДополнительныйОбъектАдресации = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ОбъектыАдресацииЗадач.ПустаяСсылка) - | ИЛИ ИсполнителиЗадач.ДополнительныйОбъектАдресации = Неопределено)"; - КонецЕсли; - - ВыгрузкаИсполнителей = ВыгрузитьИсполнителей(ТекстЗапроса, ООА, ДОА); - - // Если в задаче не заполнены основной и дополнительный объекты адресации. - Если Не ЗначениеЗаполнено(ДОА) И Не ЗначениеЗаполнено(ООА) Тогда - Для Каждого ЭлементВыгрузки Из ВыгрузкаИсполнителей Цикл - СписокПользователей.Добавить(ЭлементВыгрузки.Исполнитель); - КонецЦикла; - - Возврат СписокПользователей; - КонецЕсли; - - Если ВыгрузкаИсполнителей.Количество() = 0 И ЗначениеЗаполнено(ДОА) Тогда - ТекстЗапроса = БазовыйТекстЗапроса + " И ИсполнителиЗадач.ОсновнойОбъектАдресации = &ООА - |И (ИсполнителиЗадач.ДополнительныйОбъектАдресации = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ОбъектыАдресацииЗадач.ПустаяСсылка) - | ИЛИ ИсполнителиЗадач.ДополнительныйОбъектАдресации = Неопределено)"; - ВыгрузкаИсполнителей = ВыгрузитьИсполнителей(ТекстЗапроса, ООА, Неопределено); - КонецЕсли; - - Если ВыгрузкаИсполнителей.Количество() = 0 Тогда - ТекстЗапроса = БазовыйТекстЗапроса + " И (ИсполнителиЗадач.ОсновнойОбъектАдресации = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ОбъектыАдресацииЗадач.ПустаяСсылка) - | ИЛИ ИсполнителиЗадач.ОсновнойОбъектАдресации = Неопределено) - |И (ИсполнителиЗадач.ДополнительныйОбъектАдресации = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ОбъектыАдресацииЗадач.ПустаяСсылка) - | ИЛИ ИсполнителиЗадач.ДополнительныйОбъектАдресации = Неопределено)"; - ВыгрузкаИсполнителей = ВыгрузитьИсполнителей(ТекстЗапроса, Неопределено, Неопределено); - КонецЕсли; - - Для Каждого ЭлементВыгрузки Из ВыгрузкаИсполнителей Цикл - СписокПользователей.Добавить(ЭлементВыгрузки.Исполнитель); - КонецЦикла; - - Возврат СписокПользователей; - -КонецФункции - -Функция НайтиОтветственныхЗаНазначениеРолей(Знач Задача) - - БазовыйТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ РАЗРЕШЕННЫЕ ИсполнителиЗадач.Исполнитель - |ИЗ - | РегистрСведений.ИсполнителиЗадач КАК ИсполнителиЗадач, Справочник.РолиИсполнителей КАК РолиИсполнителей - |ГДЕ - | ИсполнителиЗадач.РольИсполнителя = РолиИсполнителей.Ссылка - |И - | РолиИсполнителей.Ссылка = ЗНАЧЕНИЕ(Справочник.РолиИсполнителей.ОтветственныйЗаКонтрольИсполнения)"; - - Ответственные = НайтиИсполнителейПоРолям(Задача, БазовыйТекстЗапроса); - Возврат Ответственные; - -КонецФункции - -Функция ВыбратьИсполнителейЗадач(Знач Задача) - - ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ РАЗРЕШЕННЫЕ - | ИсполнителиЗадач.Исполнитель КАК Исполнитель - |ИЗ - | РегистрСведений.ИсполнителиЗадач КАК ИсполнителиЗадач - |ГДЕ - | ИсполнителиЗадач.РольИсполнителя = &РольИсполнителя - | И ИсполнителиЗадач.ОсновнойОбъектАдресации = &ОсновнойОбъектАдресации - | И ИсполнителиЗадач.ДополнительныйОбъектАдресации = &ДополнительныйОбъектАдресации"; - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.Параметры.Вставить("РольИсполнителя", Задача.РольИсполнителя); - Запрос.Параметры.Вставить("ОсновнойОбъектАдресации", Задача.ОсновнойОбъектАдресации); - Запрос.Параметры.Вставить("ДополнительныйОбъектАдресации", Задача.ДополнительныйОбъектАдресации); - Исполнители = Запрос.Выполнить().Выгрузить(); - Возврат Исполнители; - -КонецФункции - -Процедура НайтиПисьмоИДобавитьТекст(Знач НаборПисемПоАдресатам, - Знач ПолучательПисьма, - Знач ПредставлениеПолучателяПисьма, - Знач ТекстПисьма, - Знач ТипПисьма) - - ПараметрыОтбора = Новый Структура("ТипПисьма, ПочтовыйАдрес", ТипПисьма, ПолучательПисьма); - СтрокаПараметрыПисьма = НаборПисемПоАдресатам.НайтиСтроки(ПараметрыОтбора); - Если СтрокаПараметрыПисьма.Количество() = 0 Тогда - СтрокаПараметрыПисьма = Неопределено; - Иначе - СтрокаПараметрыПисьма = СтрокаПараметрыПисьма[0]; - КонецЕсли; - - Если СтрокаПараметрыПисьма = Неопределено Тогда - СтрокаПараметрыПисьма = НаборПисемПоАдресатам.Добавить(); - СтрокаПараметрыПисьма.ПочтовыйАдрес = ПолучательПисьма; - СтрокаПараметрыПисьма.ТекстПисьма = ""; - СтрокаПараметрыПисьма.КоличествоЗадач = 0; - СтрокаПараметрыПисьма.ТипПисьма = ТипПисьма; - СтрокаПараметрыПисьма.Получатель = ПредставлениеПолучателяПисьма; - КонецЕсли; - - Если ЗначениеЗаполнено(СтрокаПараметрыПисьма.ТекстПисьма) Тогда - СтрокаПараметрыПисьма.ТекстПисьма = - СтрокаПараметрыПисьма.ТекстПисьма + Символы.ПС - + "------------------------------------" + Символы.ПС; - КонецЕсли; - - СтрокаПараметрыПисьма.КоличествоЗадач = СтрокаПараметрыПисьма.КоличествоЗадач + 1; - СтрокаПараметрыПисьма.ТекстПисьма = СтрокаПараметрыПисьма.ТекстПисьма + ТекстПисьма; - -КонецПроцедуры - -Функция ВыбратьПросроченныеЗадачи() - - ТекстЗапроса = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ЗадачаИсполнителя.Ссылка КАК Ссылка, - | ЗадачаИсполнителя.СрокИсполнения КАК СрокИсполнения, - | ЗадачаИсполнителя.Исполнитель КАК Исполнитель, - | ЗадачаИсполнителя.РольИсполнителя КАК РольИсполнителя, - | ЗадачаИсполнителя.ОсновнойОбъектАдресации КАК ОсновнойОбъектАдресации, - | ЗадачаИсполнителя.ДополнительныйОбъектАдресации КАК ДополнительныйОбъектАдресации, - | ЗадачаИсполнителя.Автор КАК Автор, - | ЗадачаИсполнителя.Описание КАК Описание - |ИЗ - | Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя - |ГДЕ - | ЗадачаИсполнителя.ПометкаУдаления = ЛОЖЬ - | И ЗадачаИсполнителя.Выполнена = ЛОЖЬ - | И ЗадачаИсполнителя.СрокИсполнения <= &Дата - | И ЗадачаИсполнителя.СостояниеБизнесПроцесса <> ЗНАЧЕНИЕ(Перечисление.СостоянияБизнесПроцессов.Остановлен)"; - - СрокИсполнения = КонецДня(ТекущаяДатаСеанса()); - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("Дата", СрокИсполнения); - - ПросроченныеЗадачи = Запрос.Выполнить().Выгрузить(); - - Индекс = ПросроченныеЗадачи.Количество() - 1; - Пока Индекс > 0 Цикл - ПросроченнаяЗадача = ПросроченныеЗадачи[Индекс]; - Если ПросроченнаяЗадача.Исполнитель = Неопределено И ЭтоВедущаяЗадача(ПросроченнаяЗадача.Ссылка) Тогда - ПросроченныеЗадачи.Удалить(ПросроченнаяЗадача); - КонецЕсли; - Индекс = Индекс - 1; - КонецЦикла; - - Возврат ПросроченныеЗадачи; - -КонецФункции - -Функция ВыбратьИсполнителейПросроченныхЗадач(ПросроченныеЗадачи) - - НаборПисемПоАдресатам = Новый ТаблицаЗначений; - НаборПисемПоАдресатам.Колонки.Добавить("ПочтовыйАдрес"); - НаборПисемПоАдресатам.Колонки.Добавить("ТекстПисьма"); - НаборПисемПоАдресатам.Колонки.Добавить("КоличествоЗадач"); - НаборПисемПоАдресатам.Колонки.Добавить("ТипПисьма"); - НаборПисемПоАдресатам.Колонки.Добавить("Получатель"); - - Для Каждого ЭлементПросроченныеЗадачи Из ПросроченныеЗадачи Цикл - ПросроченнаяЗадача = ЭлементПросроченныеЗадачи.Ссылка; - - ТекстПисьма = СформироватьПредставлениеЗадачи(ЭлементПросроченныеЗадачи); - // Задача адресована лично исполнителю? - Если ЗначениеЗаполнено(ПросроченнаяЗадача.Исполнитель) Тогда - ПолучательПисьма = ""; - БизнесПроцессыИЗадачиСервер.ПриПолученииАдресаЭлектроннойПочты(ПросроченнаяЗадача.Исполнитель, ПолучательПисьма); - НайтиПисьмоИДобавитьТекст(НаборПисемПоАдресатам, ПолучательПисьма, ПросроченнаяЗадача.Исполнитель, ТекстПисьма, "Исполнителю"); - ПолучательПисьма = ""; - БизнесПроцессыИЗадачиСервер.ПриПолученииАдресаЭлектроннойПочты(ПросроченнаяЗадача.Автор, ПолучательПисьма); - НайтиПисьмоИДобавитьТекст(НаборПисемПоАдресатам, ПолучательПисьма, ПросроченнаяЗадача.Автор, ТекстПисьма, "Автору"); - Иначе - Исполнители = ВыбратьИсполнителейЗадач(ПросроченнаяЗадача); - Координаторы = НайтиОтветственныхЗаНазначениеРолей(ПросроченнаяЗадача); - // Есть хотя бы один исполнитель для измерений ролевой адресации задачи? - Если Исполнители.Количество() > 0 Тогда - // Исполнитель не выполняет свои задачи. - Для Каждого Исполнитель Из Исполнители Цикл - ПолучательПисьма = ""; - БизнесПроцессыИЗадачиСервер.ПриПолученииАдресаЭлектроннойПочты(Исполнитель.Исполнитель, ПолучательПисьма); - НайтиПисьмоИДобавитьТекст(НаборПисемПоАдресатам, ПолучательПисьма, Исполнитель.Исполнитель, ТекстПисьма, "Исполнителю"); - КонецЦикла; - Иначе // Задачу исполнять некому. - СоздатьЗадачуПоНастройкеРолей(ПросроченнаяЗадача, Координаторы); - КонецЕсли; - - Для Каждого Координатор Из Координаторы Цикл - ПолучательПисьма = ""; - БизнесПроцессыИЗадачиСервер.ПриПолученииАдресаЭлектроннойПочты(Координатор, ПолучательПисьма); - НайтиПисьмоИДобавитьТекст(НаборПисемПоАдресатам, ПолучательПисьма, Координатор, ТекстПисьма, "Координатору"); - КонецЦикла; - КонецЕсли; - КонецЦикла; - - Возврат НаборПисемПоАдресатам; - -КонецФункции - -Процедура ОтправитьУведомлениеОПросроченныхЗадачах(ПисьмоИзНабора) - - Если ПустаяСтрока(ПисьмоИзНабора.ПочтовыйАдрес) Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Уведомление не было отправлено, так как у пользователя %1 не задан адрес электронной почты.'"), - ПисьмоИзНабора.Получатель); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Бизнес-процессы и задачи.Уведомление о просроченных задачах'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Информация,,, ТекстСообщения); - Возврат; - КонецЕсли; - - ПараметрыПисьма = Новый Структура; - ПараметрыПисьма.Вставить("Кому", ПисьмоИзНабора.ПочтовыйАдрес); - Если ПисьмоИзНабора.ТипПисьма = "Исполнителю" Тогда - ТекстТелаПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не выполненные в срок задачи: - | - |%1'"), ПисьмоИзНабора.ТекстПисьма); - ПараметрыПисьма.Вставить("Тело", ТекстТелаПисьма); - - ТекстТемыПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не выполненные в срок задачи (%1)'"), - Строка(ПисьмоИзНабора.КоличествоЗадач )); - ПараметрыПисьма.Вставить("Тема", ТекстТемыПисьма); - ИначеЕсли ПисьмоИзНабора.ТипПисьма = "Автору" Тогда - ТекстТелаПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'По введенным задачам прошел крайний срок: - | - |%1'"), ПисьмоИзНабора.ТекстПисьма); - ПараметрыПисьма.Вставить("Тело", ТекстТелаПисьма); - - ТекстТемыПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'По задачам истек контрольный срок (%1)'"), - Строка(ПисьмоИзНабора.КоличествоЗадач)); - ПараметрыПисьма.Вставить("Тема", ТекстТемыПисьма); - ИначеЕсли ПисьмоИзНабора.ТипПисьма = "Координатору" Тогда - ТекстТелаПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Прошел крайний срок по задачам: - | - |%1'"), ПисьмоИзНабора.ТекстПисьма); - ПараметрыПисьма.Вставить("Тело", ТекстТелаПисьма); - - ТекстТемыПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Истек контрольный срок задач (%1)'"), - Строка(ПисьмоИзНабора.КоличествоЗадач)); - ПараметрыПисьма.Вставить("Тема", ТекстТемыПисьма); - КонецЕсли; - - ТекстСообщения = ""; - - МодульРаботаСПочтовымиСообщениями = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениями"); - Попытка - МодульРаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение( - МодульРаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(), ПараметрыПисьма); - Исключение - ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при отправке уведомления о просроченных задачах: %1.'"), - ОписаниеОшибки); - УровеньВажностиСобытия = УровеньЖурналаРегистрации.Ошибка; - КонецПопытки; - - Если ПустаяСтрока(ТекстСообщения) Тогда - Если ПараметрыПисьма.Кому.Количество() > 0 Тогда - Кому = ? (ПустаяСтрока(ПараметрыПисьма.Кому[0].Представление), - ПараметрыПисьма.Кому[0].Адрес, - ПараметрыПисьма.Кому[0].Представление + " <" + ПараметрыПисьма.Кому[0].Адрес + ">"); - КонецЕсли; - - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Уведомление о просроченных задачах успешно отправлено на адрес %1.'"), Кому); - УровеньВажностиСобытия = УровеньЖурналаРегистрации.Информация; - КонецЕсли; - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Бизнес-процессы и задачи.Уведомление о просроченных задачах'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньВажностиСобытия,,, ТекстСообщения); - -КонецПроцедуры - -Функция СоздатьЗадачуПоНастройкеРолей(ЗадачаСсылка, Ответственные) - - Для Каждого Ответственный Из Ответственные Цикл - ЗадачаОбъект = Задачи.ЗадачаИсполнителя.СоздатьЗадачу(); - ЗадачаОбъект.Дата = ТекущаяДатаСеанса(); - ЗадачаОбъект.Важность = Перечисления.ВариантыВажностиЗадачи.Высокая; - ЗадачаОбъект.Исполнитель = Ответственный; - ЗадачаОбъект.Предмет = ЗадачаСсылка; - - ЗадачаОбъект.Описание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Задача не может быть исполнена, так как у роли не задано ни одного исполнителя: - |%1'"), Строка(ЗадачаСсылка)); - ЗадачаОбъект.Наименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Назначить исполнителей: задача не может быть исполнена %1'"), Строка(ЗадачаСсылка)); - ЗадачаОбъект.Записать(); - КонецЦикла; - -КонецФункции - -Функция ВыбратьНовыеЗадачиПоИсполнителям(Знач ДатаВремяОт, Знач ДатаВремяПо) - - Запрос = Новый Запрос( - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ЗадачаИсполнителя.Ссылка КАК Ссылка, - | ЗадачаИсполнителя.Номер КАК Номер, - | ЗадачаИсполнителя.Дата КАК Дата, - | ЗадачаИсполнителя.Наименование КАК Наименование, - | ЗадачаИсполнителя.СрокИсполнения КАК СрокИсполнения, - | ЗадачаИсполнителя.Автор КАК Автор, - | ПОДСТРОКА(ЗадачаИсполнителя.Описание, 1, 250) КАК Описание, - | ВЫБОР - | КОГДА ЗадачаИсполнителя.Исполнитель ЕСТЬ НЕ NULL - | И ЗадачаИсполнителя.Исполнитель <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) - | ТОГДА ЗадачаИсполнителя.Исполнитель - | ИНАЧЕ ИсполнителиЗадач.Исполнитель - | КОНЕЦ КАК Исполнитель, - | ЗадачаИсполнителя.РольИсполнителя КАК РольИсполнителя, - | ЗадачаИсполнителя.ОсновнойОбъектАдресации КАК ОсновнойОбъектАдресации, - | ЗадачаИсполнителя.ДополнительныйОбъектАдресации КАК ДополнительныйОбъектАдресации - |ИЗ - | Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсполнителиЗадач КАК ИсполнителиЗадач - | ПО ЗадачаИсполнителя.РольИсполнителя = ИсполнителиЗадач.РольИсполнителя - | И ЗадачаИсполнителя.ОсновнойОбъектАдресации = ИсполнителиЗадач.ОсновнойОбъектАдресации - | И ЗадачаИсполнителя.ДополнительныйОбъектАдресации = ИсполнителиЗадач.ДополнительныйОбъектАдресации - |ГДЕ - | ЗадачаИсполнителя.ПометкаУдаления = ЛОЖЬ - | И ЗадачаИсполнителя.Дата > &ДатаВремяОт - | И ЗадачаИсполнителя.Дата <= &ДатаВремяПо - | И (ЗадачаИсполнителя.Исполнитель ЕСТЬ НЕ NULL - | И ЗадачаИсполнителя.Исполнитель <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) - | ИЛИ ИсполнителиЗадач.Исполнитель ЕСТЬ НЕ NULL - | И ИсполнителиЗадач.Исполнитель <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)) - | И ЗадачаИсполнителя.Выполнена = ЛОЖЬ - | - |УПОРЯДОЧИТЬ ПО - | Исполнитель, - | СрокИсполнения УБЫВ - |ИТОГИ ПО - | Исполнитель"); - Запрос.Параметры.Вставить("ДатаВремяОт", ДатаВремяОт); - Запрос.Параметры.Вставить("ДатаВремяПо", ДатаВремяПо); - Результат = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); - Возврат Результат; - -КонецФункции - -Функция ОтправитьУведомлениеОНовыхЗадачах(Исполнитель, ЗадачиПоИсполнителю) - - ПочтовыйАдресПолучателя = ""; - БизнесПроцессыИЗадачиСервер.ПриПолученииАдресаЭлектроннойПочты(Исполнитель, ПочтовыйАдресПолучателя); - Если ПустаяСтрока(ПочтовыйАдресПолучателя) Тогда - ЗаписьЖурналаРегистрации(НСтр("ru = 'Бизнес-процессы и задачи.Уведомление о новых задачах'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Информация,,, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Уведомление не отправлено, так как не указан почтовый адрес у пользователя %1.'"), Строка(Исполнитель))); - Возврат Ложь; - КонецЕсли; - - ТекстПисьма = ""; - Для Каждого Задача Из ЗадачиПоИсполнителю.Строки Цикл - ТекстПисьма = ТекстПисьма + СформироватьПредставлениеЗадачи(Задача); - КонецЦикла; - ТемаПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Направлены задачи - %1'"), Метаданные.КраткаяИнформация); - - ПараметрыПисьма = Новый Структура; - ПараметрыПисьма.Вставить("Тема", ТемаПисьма); - ПараметрыПисьма.Вставить("Тело", ТекстПисьма); - ПараметрыПисьма.Вставить("Кому", ПочтовыйАдресПолучателя); - - МодульРаботаСПочтовымиСообщениями = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениями"); - Попытка - МодульРаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение( - МодульРаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(), ПараметрыПисьма); - Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Бизнес-процессы и задачи.Уведомление о новых задачах'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при отправке уведомления о новых задачах: %1'"), - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); - Возврат Ложь; - КонецПопытки; - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Бизнес-процессы и задачи.Уведомление о новых задачах'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Информация,,, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Уведомления успешно отправлены на адрес %1.'"), ПочтовыйАдресПолучателя)); - Возврат Истина; - -КонецФункции - -Функция СформироватьПредставлениеЗадачи(ЗадачаСтруктура) - - Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 - | - |Крайний срок: %2'") + Символы.ПС, - ЗадачаСтруктура.Ссылка, - Формат(ЗадачаСтруктура.СрокИсполнения, "ДЛФ=DD; ДП='не указан'")); - Если ЗначениеЗаполнено(ЗадачаСтруктура.Исполнитель) Тогда - Результат = Результат + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Исполнитель: %3'"), ЗадачаСтруктура.Исполнитель) + Символы.ПС; - КонецЕсли; - Если ЗначениеЗаполнено(ЗадачаСтруктура.РольИсполнителя) Тогда - Результат = Результат + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль: %4'"), ЗадачаСтруктура.РольИсполнителя) + Символы.ПС; - КонецЕсли; - Если ЗначениеЗаполнено(ЗадачаСтруктура.ОсновнойОбъектАдресации) Тогда - Результат = Результат + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Основной объект адресации: %5'"), ЗадачаСтруктура.ОсновнойОбъектАдресации) + Символы.ПС; - КонецЕсли; - Если ЗначениеЗаполнено(ЗадачаСтруктура.ДополнительныйОбъектАдресации) Тогда - Результат = Результат + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Доп. объект адресации: %6'"), ЗадачаСтруктура.ДополнительныйОбъектАдресации) + Символы.ПС; - КонецЕсли; - Если ЗначениеЗаполнено(ЗадачаСтруктура.Автор) Тогда - Результат = Результат + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Автор: %7'"), ЗадачаСтруктура.Автор) + Символы.ПС; - КонецЕсли; - Если ЗначениеЗаполнено(ЗадачаСтруктура.Описание) Тогда - Результат = Результат + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%8'"), ЗадачаСтруктура.Описание) + Символы.ПС; - КонецЕсли; - Возврат Результат + Символы.ПС; - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Прочие служебные процедуры и функции. @@ -1030,11 +556,4 @@ КонецПроцедуры -// Возвращает Истина, если задача соответствует указанной точке маршрута. -Функция ПроверитьТипЗадачи(ЗадачаОбъект, ТочкаМаршрута) Экспорт - - Возврат ЗадачаОбъект.ТочкаМаршрута = ТочкаМаршрута; - -КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl index 5ebdff51c..d065c043c 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl @@ -378,7 +378,7 @@ ЗадачиМогутБытьПеренаправлены = БизнесПроцессыИЗадачиВызовСервера.ПеренаправитьЗадачи( МассивЗадач, Неопределено, Истина); Если НЕ ЗадачиМогутБытьПеренаправлены И МассивЗадач.Количество() = 1 Тогда - ПоказатьПредупреждение(,НСтр("ru = 'Невозможно перенаправить уже выполненную задачу.'")); + ПоказатьПредупреждение(,НСтр("ru = 'Невозможно перенаправить уже выполненную задачу или направленную другому исполнителю.'")); Возврат; КонецЕсли; diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентСервер/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентСервер/Module.bsl index d9303876c..972e0302f 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиентСервер/Module.bsl @@ -9,6 +9,8 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики подписок на события. +// Вызывается для добавления полей при получении представления объекта или ссылки бизнес процесса. +// Процедура ОбработкаПолученияПолейПредставленияБизнесПроцесса(МенеджерОбъекта, Поля, СтандартнаяОбработка) Экспорт Поля.Добавить("Наименование"); @@ -17,6 +19,8 @@ КонецПроцедуры +// Вызывается при получении представления объекта или ссылки бизнес процесса. +// Процедура ОбработкаПолученияПредставленияБизнесПроцесса(МенеджерОбъекта, Данные, Представление, СтандартнаяОбработка) Экспорт Наименование = ?(ПустаяСтрока(Данные.Наименование), НСтр("ru = 'Без описания'"), Данные.Наименование); diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl index e8a18b666..9be59fe66 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl @@ -62,9 +62,9 @@ // Заполняет список бизнес-процессов, которые подключены к подсистеме // и модули менеджеров которых содержат следующие экспортные процедуры и функции: -// - ПриПеренаправленииЗадачи -// - ФормаВыполненияЗадачи -// - ОбработкаВыполненияПоУмолчанию +// - ПриПеренаправленииЗадачи. +// - ФормаВыполненияЗадачи. +// - ОбработкаВыполненияПоУмолчанию. // // Параметры: // ПодключенныеБизнесПроцессы - Соответствие - в качестве ключа указать полное имя объекта метаданных, diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl index 17be7bd6a..735bccb69 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl @@ -174,6 +174,26 @@ ЭлементЦветаОформления.Значение = НСтр("ru = 'Срок не указан'"); ЭлементЦветаОформления.Использование = Истина; + // Установка оформления для внешних пользователей, поле Автор пустое. + Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда + ЭлементУсловногоОформления = УсловноеОформлениеСпискаЗадач.Элементы.Добавить(); + ЭлементУсловногоОформления.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + + ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); + ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Автор"); + ОформляемоеПоле.Использование = Истина; + + ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Автор"); + ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно; + ЭлементОтбораДанных.ПравоеЗначение = ПользователиКлиентСервер.АвторизованныйПользователь(); + ЭлементОтбораДанных.Использование = Истина; + + ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("Текст"); + ЭлементЦветаОформления.Значение = НСтр("ru = 'Представитель организации'"); + ЭлементЦветаОформления.Использование = Истина; + КонецЕсли; + КонецПроцедуры // Вызывается при создании формы списка бизнес-процессов на сервере. @@ -558,10 +578,10 @@ // Параметры: // РольИсполнителя - СправочникСсылка.РолиИсполнителей // ОсновнойОбъектАдресации - ЛюбаяСсылка -// ДополнительныйОбъектАдресации - ЛюбаяСсылка +// ДополнительныйОбъектАдресации - ЛюбаяСсылка. // // Возвращаемое значение: -// СправочникСсылка.ГруппыИсполнителейЗадач +// СправочникСсылка.ГруппыИсполнителейЗадач. // Функция ГруппаИсполнителейЗадач(РольИсполнителя, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации) Экспорт @@ -599,14 +619,76 @@ ГруппаИсполнителей = ГруппаИсполнителейОбъект.Ссылка; КонецЕсли; ЗафиксироватьТранзакцию(); - Возврат ГруппаИсполнителей; Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; + Возврат ГруппаИсполнителей; КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Обработчики регламентных заданий. + +// Обработчик регламентного задания УведомлениеИсполнителейОНовыхЗадачах. +// +Процедура УведомитьИсполнителейОНовыхЗадачах() Экспорт + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.УведомлениеИсполнителейОНовыхЗадачах); + ПроверитьСистемнаяУчетнаяЗаписьНастроена(); + + ДатаУведомления = ТекущаяДатаСеанса(); + ДатаПоследнегоУведомления = Константы.ДатаУведомленияОНовыхЗадачах.Получить(); + + // Если оповещение ранее не производилось, или последнее оповещение происходило + // ранее, чем за сутки, то отбираем новые задачи за последние сутки. + Если (ДатаПоследнегоУведомления = '00010101000000') + Или (ДатаУведомления - ДатаПоследнегоУведомления > 24*60*60) Тогда + ДатаПоследнегоУведомления = ДатаУведомления - 24*60*60; + КонецЕсли; + + ВидСообщения = НСтр("ru = 'Бизнес-процессы и задачи.Уведомление о новых задачах'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрации(ВидСообщения, + УровеньЖурналаРегистрации.Информация, , , + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Начато регламентное уведомление о новых задачах за период %1 - %2'"), + ДатаПоследнегоУведомления, ДатаУведомления)); + + ЗадачиПоИсполнителям = ВыбратьНовыеЗадачиПоИсполнителям(ДатаПоследнегоУведомления, ДатаУведомления); + Для Каждого СтрокаИсполнителя Из ЗадачиПоИсполнителям.Строки Цикл + ОтправитьУведомлениеОНовыхЗадачах(СтрокаИсполнителя.Исполнитель, СтрокаИсполнителя); + КонецЦикла; + + УстановитьПривилегированныйРежим(Истина); + Константы.ДатаУведомленияОНовыхЗадачах.Установить(ДатаУведомления); + УстановитьПривилегированныйРежим(Ложь); + + ЗаписьЖурналаРегистрации(ВидСообщения, + УровеньЖурналаРегистрации.Информация, , , + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Завершено регламентное уведомление о новых задачах (уведомлено исполнителей: %1)'"), + ЗадачиПоИсполнителям.Строки.Количество())); + +КонецПроцедуры + +// Обработчик регламентного задания МониторингЗадач. +// +Процедура ПроконтролироватьЗадачи() Экспорт + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.МониторингЗадач); + ПроверитьСистемнаяУчетнаяЗаписьНастроена(); + + ПросроченныеЗадачи = ВыбратьПросроченныеЗадачи(); + Если ПросроченныеЗадачи.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + НаборПисемПоАдресатам = ВыбратьИсполнителейПросроченныхЗадач(ПросроченныеЗадачи); + Для Каждого ПисьмоИзНабора Из НаборПисемПоАдресатам Цикл + ОтправитьУведомлениеОПросроченныхЗадачах(ПисьмоИзНабора); + КонецЦикла; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы. @@ -645,6 +727,10 @@ Параметры.Вставить("ПроблемныеОбъекты", Новый Массив); КонецЕсли; + Если Не Параметры.Свойство("НачальнаяСсылкаКОбработке") Тогда + Параметры.Вставить("НачальнаяСсылкаКОбработке", ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(БизнесПроцесс.ПолноеИмя()).ПустаяСсылка()); + КонецЕсли; + Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ %1 @@ -653,11 +739,14 @@ |ИЗ | %2 КАК ТаблицаСНаборамиЗначенийДоступа |ГДЕ ТаблицаСНаборамиЗначенийДоступа.Дата <= &НачальнаяДатаКОбработке + | И ТаблицаСНаборамиЗначенийДоступа.Ссылка > &НачальнаяСсылкаКОбработке |УПОРЯДОЧИТЬ ПО - | Дата УБЫВ"; + | Дата УБЫВ, + | Ссылка"; Запрос.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Запрос.Текст, Формат(РазмерПорции, "ЧГ=0"), БизнесПроцесс.ПолноеИмя()); Запрос.УстановитьПараметр("НачальнаяДатаКОбработке", Параметры.НачальнаяДатаКОбработке); + Запрос.УстановитьПараметр("НачальнаяСсылкаКОбработке", Параметры.НачальнаяСсылкаКОбработке); РезультатЗапроса = Запрос.Выполнить().Выгрузить(); ОбъектыКОбработке = РезультатЗапроса.ВыгрузитьКолонку("Ссылка"); @@ -667,7 +756,7 @@ Параметры.ПроблемныеОбъекты.Очистить(); Параметры.ОбработкаЗавершена = ОбъектыКОбработке.Количество() = 0 - Или (ОбъектыКОбработке.Количество() = 1 И РезультатЗапроса[0].Дата = Параметры.НачальнаяДатаКОбработке); + Или РезультатЗапроса[0].Ссылка = Параметры.НачальнаяСсылкаКОбработке; Если Не Параметры.ОбработкаЗавершена Тогда Если Не Параметры.Свойство("БизнесПроцесс") Тогда @@ -683,6 +772,7 @@ КонецЕсли; Параметры.НачальнаяДатаКОбработке = РезультатЗапроса[РезультатЗапроса.Количество() - 1].Дата; + Параметры.НачальнаяСсылкаКОбработке = РезультатЗапроса[РезультатЗапроса.Количество() - 1].Ссылка; КонецЕсли; КонецПроцедуры @@ -810,10 +900,10 @@ // // ЗначениеПараметра - Неопределено, когда СодержаниеПараметра = Неопределено, // - Например, СправочникСсылка.ГруппыИсполнителейЗадач, -// когда СодеражаниеПараметра = "ГруппыИсполнителей". +// когда СодержаниеПараметра = "ГруппыИсполнителей". // - СправочникСсылка.Пользователи, // СправочникСсылка.ВнешниеПользователи, -// когда СодеражаниеПараметра = "Исполнители". +// когда СодержаниеПараметра = "Исполнители". // Массив указанных выше типов. // // НетГруппИсполнителей - Булево, если Ложь, МенеджерВременныхТаблиц содержит временную таблицу, иначе нет. @@ -913,14 +1003,16 @@ // См. описание одноименной процедуры в общем модуле РегламентныеЗаданияПереопределяемый. // -Процедура ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости) Экспорт - Зависимость = Зависимости.Добавить(); - Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.МониторингЗадач; - Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьБизнесПроцессыИЗадачи; +Процедура ПриОпределенииНастроекРегламентныхЗаданий(Настройки) Экспорт + Настройка = Настройки.Добавить(); + Настройка.РегламентноеЗадание = Метаданные.РегламентныеЗадания.МониторингЗадач; + Настройка.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьБизнесПроцессыИЗадачи; + Настройка.РаботаетСВнешнимиРесурсами = Истина; - Зависимость = Зависимости.Добавить(); - Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.УведомлениеИсполнителейОНовыхЗадачах; - Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьБизнесПроцессыИЗадачи; + Настройка = Настройки.Добавить(); + Настройка.РегламентноеЗадание = Метаданные.РегламентныеЗадания.УведомлениеИсполнителейОНовыхЗадачах; + Настройка.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьБизнесПроцессыИЗадачи; + Настройка.РаботаетСВнешнимиРесурсами = Истина; КонецПроцедуры #КонецОбласти @@ -1087,15 +1179,29 @@ КонецПроцедуры -// Заполняет настройки размещения вариантов отчетов в панели отчетов. +// Содержит настройки размещения вариантов отчетов в панели отчетов. // // Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// Настройки - Коллекция - Содержит настройки всех отчетов и вариантов конфигурации. +// Используется для передачи в параметрах вспомогательных методов. // // Описание: // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // +// Вспомогательные методы: +// 1. Функция ОписаниеОтчета и ОписаниеВарианта формируют описание настроек отчета и варианта для последующего изменения: +// НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.<ИмяОтчета>); +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// Возвращаемые коллекции содержат одинаковый набор свойств. +// НастройкиОтчета используются как умолчания для вариантов, описания которых еще не получены. +// Подробнее - см. "свойства для изменения" в комментарии к ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// 2. Процедура УстановитьРежимВыводаВПанеляхОтчетов позволяет настроить режим группировки вариантов в панелях отчетов: +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Отчеты.<ИмяОтчета>, Истина/Ложь); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Подсистемы.<ИмяПодсистемы>, Истина/Ложь); +// 3. Процедура НастроитьОтчетВМодулеМенеджера позволяет переопределять настройки отчета в его модуле менеджера: +// ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.<ИмяОтчета>); +// Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.БизнесПроцессы); @@ -1140,10 +1246,9 @@ // не делается проверка существования подсистемы. Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.Задачи.ЗадачаИсполнителя.ПолноеИмя()); - Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда - Если Разделы.Количество() = 0 Тогда - Разделы.Добавить(Метаданные.Задачи.ЗадачаИсполнителя); - КонецЕсли; + Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() + И Разделы.Количество() = 0 Тогда + Разделы.Добавить(Метаданные.Задачи.ЗадачаИсполнителя); КонецЕсли; Для Каждого Раздел Из Разделы Цикл @@ -1191,6 +1296,447 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Мониторинг и контроль исполнения. + +Функция ВыгрузитьИсполнителей(ТекстЗапроса, ОсновнойОбъектАдресацииСсылка, ДопОбъектАдресацииСсылка) + + Запрос = Новый Запрос(ТекстЗапроса); + + Если ЗначениеЗаполнено(ДопОбъектАдресацииСсылка) Тогда + Запрос.УстановитьПараметр("ДОА", ДопОбъектАдресацииСсылка); + КонецЕсли; + + Если ЗначениеЗаполнено(ОсновнойОбъектАдресацииСсылка) Тогда + Запрос.УстановитьПараметр("ООА", ОсновнойОбъектАдресацииСсылка); + КонецЕсли; + + Возврат Запрос.Выполнить().Выгрузить(); + +КонецФункции + +Функция НайтиИсполнителейПоРолям(Знач Задача, Знач БазовыйТекстЗапроса) + + СписокПользователей = Новый Массив; + + ООА = Задача.ОсновнойОбъектАдресации; + ДОА = Задача.ДополнительныйОбъектАдресации; + + Если ЗначениеЗаполнено(ДОА) Тогда + ТекстЗапроса = БазовыйТекстЗапроса + " И ИсполнителиЗадач.ОсновнойОбъектАдресации = &ООА + |И ИсполнителиЗадач.ДополнительныйОбъектАдресации = &ДОА"; + ИначеЕсли ЗначениеЗаполнено(ООА) Тогда + ТекстЗапроса = БазовыйТекстЗапроса + + " И ИсполнителиЗадач.ОсновнойОбъектАдресации = &ООА + |И (ИсполнителиЗадач.ДополнительныйОбъектАдресации = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ОбъектыАдресацииЗадач.ПустаяСсылка) + | ИЛИ ИсполнителиЗадач.ДополнительныйОбъектАдресации = Неопределено)"; + Иначе + ТекстЗапроса = БазовыйТекстЗапроса + + " И (ИсполнителиЗадач.ОсновнойОбъектАдресации = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ОбъектыАдресацииЗадач.ПустаяСсылка) + | ИЛИ ИсполнителиЗадач.ОсновнойОбъектАдресации = Неопределено) + |И (ИсполнителиЗадач.ДополнительныйОбъектАдресации = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ОбъектыАдресацииЗадач.ПустаяСсылка) + | ИЛИ ИсполнителиЗадач.ДополнительныйОбъектАдресации = Неопределено)"; + КонецЕсли; + + ВыгрузкаИсполнителей = ВыгрузитьИсполнителей(ТекстЗапроса, ООА, ДОА); + + // Если в задаче не заполнены основной и дополнительный объекты адресации. + Если Не ЗначениеЗаполнено(ДОА) И Не ЗначениеЗаполнено(ООА) Тогда + Для Каждого ЭлементВыгрузки Из ВыгрузкаИсполнителей Цикл + СписокПользователей.Добавить(ЭлементВыгрузки.Исполнитель); + КонецЦикла; + + Возврат СписокПользователей; + КонецЕсли; + + Если ВыгрузкаИсполнителей.Количество() = 0 И ЗначениеЗаполнено(ДОА) Тогда + ТекстЗапроса = БазовыйТекстЗапроса + " И ИсполнителиЗадач.ОсновнойОбъектАдресации = &ООА + |И (ИсполнителиЗадач.ДополнительныйОбъектАдресации = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ОбъектыАдресацииЗадач.ПустаяСсылка) + | ИЛИ ИсполнителиЗадач.ДополнительныйОбъектАдресации = Неопределено)"; + ВыгрузкаИсполнителей = ВыгрузитьИсполнителей(ТекстЗапроса, ООА, Неопределено); + КонецЕсли; + + Если ВыгрузкаИсполнителей.Количество() = 0 Тогда + ТекстЗапроса = БазовыйТекстЗапроса + " И (ИсполнителиЗадач.ОсновнойОбъектАдресации = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ОбъектыАдресацииЗадач.ПустаяСсылка) + | ИЛИ ИсполнителиЗадач.ОсновнойОбъектАдресации = Неопределено) + |И (ИсполнителиЗадач.ДополнительныйОбъектАдресации = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ОбъектыАдресацииЗадач.ПустаяСсылка) + | ИЛИ ИсполнителиЗадач.ДополнительныйОбъектАдресации = Неопределено)"; + ВыгрузкаИсполнителей = ВыгрузитьИсполнителей(ТекстЗапроса, Неопределено, Неопределено); + КонецЕсли; + + Для Каждого ЭлементВыгрузки Из ВыгрузкаИсполнителей Цикл + СписокПользователей.Добавить(ЭлементВыгрузки.Исполнитель); + КонецЦикла; + + Возврат СписокПользователей; + +КонецФункции + +Функция НайтиОтветственныхЗаНазначениеРолей(Знач Задача) + + БазовыйТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ РАЗРЕШЕННЫЕ ИсполнителиЗадач.Исполнитель + |ИЗ + | РегистрСведений.ИсполнителиЗадач КАК ИсполнителиЗадач, Справочник.РолиИсполнителей КАК РолиИсполнителей + |ГДЕ + | ИсполнителиЗадач.РольИсполнителя = РолиИсполнителей.Ссылка + |И + | РолиИсполнителей.Ссылка = ЗНАЧЕНИЕ(Справочник.РолиИсполнителей.ОтветственныйЗаКонтрольИсполнения)"; + + Ответственные = НайтиИсполнителейПоРолям(Задача, БазовыйТекстЗапроса); + Возврат Ответственные; + +КонецФункции + +Функция ВыбратьИсполнителейЗадач(Знач Задача) + + ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ РАЗРЕШЕННЫЕ + | ИсполнителиЗадач.Исполнитель КАК Исполнитель + |ИЗ + | РегистрСведений.ИсполнителиЗадач КАК ИсполнителиЗадач + |ГДЕ + | ИсполнителиЗадач.РольИсполнителя = &РольИсполнителя + | И ИсполнителиЗадач.ОсновнойОбъектАдресации = &ОсновнойОбъектАдресации + | И ИсполнителиЗадач.ДополнительныйОбъектАдресации = &ДополнительныйОбъектАдресации"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.Параметры.Вставить("РольИсполнителя", Задача.РольИсполнителя); + Запрос.Параметры.Вставить("ОсновнойОбъектАдресации", Задача.ОсновнойОбъектАдресации); + Запрос.Параметры.Вставить("ДополнительныйОбъектАдресации", Задача.ДополнительныйОбъектАдресации); + Исполнители = Запрос.Выполнить().Выгрузить(); + Возврат Исполнители; + +КонецФункции + +Процедура НайтиПисьмоИДобавитьТекст(Знач НаборПисемПоАдресатам, + Знач ПолучательПисьма, + Знач ПредставлениеПолучателяПисьма, + Знач ТекстПисьма, + Знач ТипПисьма) + + ПараметрыОтбора = Новый Структура("ТипПисьма, ПочтовыйАдрес", ТипПисьма, ПолучательПисьма); + СтрокаПараметрыПисьма = НаборПисемПоАдресатам.НайтиСтроки(ПараметрыОтбора); + Если СтрокаПараметрыПисьма.Количество() = 0 Тогда + СтрокаПараметрыПисьма = Неопределено; + Иначе + СтрокаПараметрыПисьма = СтрокаПараметрыПисьма[0]; + КонецЕсли; + + Если СтрокаПараметрыПисьма = Неопределено Тогда + СтрокаПараметрыПисьма = НаборПисемПоАдресатам.Добавить(); + СтрокаПараметрыПисьма.ПочтовыйАдрес = ПолучательПисьма; + СтрокаПараметрыПисьма.ТекстПисьма = ""; + СтрокаПараметрыПисьма.КоличествоЗадач = 0; + СтрокаПараметрыПисьма.ТипПисьма = ТипПисьма; + СтрокаПараметрыПисьма.Получатель = ПредставлениеПолучателяПисьма; + КонецЕсли; + + Если ЗначениеЗаполнено(СтрокаПараметрыПисьма.ТекстПисьма) Тогда + СтрокаПараметрыПисьма.ТекстПисьма = + СтрокаПараметрыПисьма.ТекстПисьма + Символы.ПС + + "------------------------------------" + Символы.ПС; + КонецЕсли; + + СтрокаПараметрыПисьма.КоличествоЗадач = СтрокаПараметрыПисьма.КоличествоЗадач + 1; + СтрокаПараметрыПисьма.ТекстПисьма = СтрокаПараметрыПисьма.ТекстПисьма + ТекстПисьма; + +КонецПроцедуры + +Функция ВыбратьПросроченныеЗадачи() + + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ЗадачаИсполнителя.Ссылка КАК Ссылка, + | ЗадачаИсполнителя.СрокИсполнения КАК СрокИсполнения, + | ЗадачаИсполнителя.Исполнитель КАК Исполнитель, + | ЗадачаИсполнителя.РольИсполнителя КАК РольИсполнителя, + | ЗадачаИсполнителя.ОсновнойОбъектАдресации КАК ОсновнойОбъектАдресации, + | ЗадачаИсполнителя.ДополнительныйОбъектАдресации КАК ДополнительныйОбъектАдресации, + | ЗадачаИсполнителя.Автор КАК Автор, + | ЗадачаИсполнителя.Описание КАК Описание + |ИЗ + | Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя + |ГДЕ + | ЗадачаИсполнителя.ПометкаУдаления = ЛОЖЬ + | И ЗадачаИсполнителя.Выполнена = ЛОЖЬ + | И ЗадачаИсполнителя.СрокИсполнения <= &Дата + | И ЗадачаИсполнителя.СостояниеБизнесПроцесса <> ЗНАЧЕНИЕ(Перечисление.СостоянияБизнесПроцессов.Остановлен)"; + + СрокИсполнения = КонецДня(ТекущаяДатаСеанса()); + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("Дата", СрокИсполнения); + + ПросроченныеЗадачи = Запрос.Выполнить().Выгрузить(); + + Индекс = ПросроченныеЗадачи.Количество() - 1; + Пока Индекс > 0 Цикл + ПросроченнаяЗадача = ПросроченныеЗадачи[Индекс]; + Если НЕ ЗначениеЗаполнено(ПросроченнаяЗадача.Исполнитель) И БизнесПроцессыИЗадачиВызовСервера.ЭтоВедущаяЗадача(ПросроченнаяЗадача.Ссылка) Тогда + ПросроченныеЗадачи.Удалить(ПросроченнаяЗадача); + КонецЕсли; + Индекс = Индекс - 1; + КонецЦикла; + + Возврат ПросроченныеЗадачи; + +КонецФункции + +Функция ВыбратьИсполнителейПросроченныхЗадач(ПросроченныеЗадачи) + + НаборПисемПоАдресатам = Новый ТаблицаЗначений; + НаборПисемПоАдресатам.Колонки.Добавить("ПочтовыйАдрес"); + НаборПисемПоАдресатам.Колонки.Добавить("ТекстПисьма"); + НаборПисемПоАдресатам.Колонки.Добавить("КоличествоЗадач"); + НаборПисемПоАдресатам.Колонки.Добавить("ТипПисьма"); + НаборПисемПоАдресатам.Колонки.Добавить("Получатель"); + + Для Каждого ЭлементПросроченныеЗадачи Из ПросроченныеЗадачи Цикл + ПросроченнаяЗадача = ЭлементПросроченныеЗадачи.Ссылка; + + ТекстПисьма = СформироватьПредставлениеЗадачи(ЭлементПросроченныеЗадачи); + // Задача адресована лично исполнителю? + Если ЗначениеЗаполнено(ПросроченнаяЗадача.Исполнитель) Тогда + ПолучательПисьма = ""; + ПриПолученииАдресаЭлектроннойПочты(ПросроченнаяЗадача.Исполнитель, ПолучательПисьма); + НайтиПисьмоИДобавитьТекст(НаборПисемПоАдресатам, ПолучательПисьма, ПросроченнаяЗадача.Исполнитель, ТекстПисьма, "Исполнителю"); + ПолучательПисьма = ""; + ПриПолученииАдресаЭлектроннойПочты(ПросроченнаяЗадача.Автор, ПолучательПисьма); + НайтиПисьмоИДобавитьТекст(НаборПисемПоАдресатам, ПолучательПисьма, ПросроченнаяЗадача.Автор, ТекстПисьма, "Автору"); + Иначе + Исполнители = ВыбратьИсполнителейЗадач(ПросроченнаяЗадача); + Координаторы = НайтиОтветственныхЗаНазначениеРолей(ПросроченнаяЗадача); + // Есть хотя бы один исполнитель для измерений ролевой адресации задачи? + Если Исполнители.Количество() > 0 Тогда + // Исполнитель не выполняет свои задачи. + Для Каждого Исполнитель Из Исполнители Цикл + ПолучательПисьма = ""; + ПриПолученииАдресаЭлектроннойПочты(Исполнитель.Исполнитель, ПолучательПисьма); + НайтиПисьмоИДобавитьТекст(НаборПисемПоАдресатам, ПолучательПисьма, Исполнитель.Исполнитель, ТекстПисьма, "Исполнителю"); + КонецЦикла; + Иначе // Задачу исполнять некому. + СоздатьЗадачуПоНастройкеРолей(ПросроченнаяЗадача, Координаторы); + КонецЕсли; + + Для Каждого Координатор Из Координаторы Цикл + ПолучательПисьма = ""; + ПриПолученииАдресаЭлектроннойПочты(Координатор, ПолучательПисьма); + НайтиПисьмоИДобавитьТекст(НаборПисемПоАдресатам, ПолучательПисьма, Координатор, ТекстПисьма, "Координатору"); + КонецЦикла; + КонецЕсли; + КонецЦикла; + + Возврат НаборПисемПоАдресатам; + +КонецФункции + +Процедура ОтправитьУведомлениеОПросроченныхЗадачах(ПисьмоИзНабора) + + Если ПустаяСтрока(ПисьмоИзНабора.ПочтовыйАдрес) Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Уведомление не было отправлено, так как у пользователя %1 не задан адрес электронной почты.'"), + ПисьмоИзНабора.Получатель); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Бизнес-процессы и задачи.Уведомление о просроченных задачах'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Информация,,, ТекстСообщения); + Возврат; + КонецЕсли; + + ПараметрыПисьма = Новый Структура; + ПараметрыПисьма.Вставить("Кому", ПисьмоИзНабора.ПочтовыйАдрес); + Если ПисьмоИзНабора.ТипПисьма = "Исполнителю" Тогда + ТекстТелаПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не выполненные в срок задачи: + | + |%1'"), ПисьмоИзНабора.ТекстПисьма); + ПараметрыПисьма.Вставить("Тело", ТекстТелаПисьма); + + ТекстТемыПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не выполненные в срок задачи (%1)'"), + Строка(ПисьмоИзНабора.КоличествоЗадач )); + ПараметрыПисьма.Вставить("Тема", ТекстТемыПисьма); + ИначеЕсли ПисьмоИзНабора.ТипПисьма = "Автору" Тогда + ТекстТелаПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'По введенным задачам прошел крайний срок: + | + |%1'"), ПисьмоИзНабора.ТекстПисьма); + ПараметрыПисьма.Вставить("Тело", ТекстТелаПисьма); + + ТекстТемыПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'По задачам истек контрольный срок (%1)'"), + Строка(ПисьмоИзНабора.КоличествоЗадач)); + ПараметрыПисьма.Вставить("Тема", ТекстТемыПисьма); + ИначеЕсли ПисьмоИзНабора.ТипПисьма = "Координатору" Тогда + ТекстТелаПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Прошел крайний срок по задачам: + | + |%1'"), ПисьмоИзНабора.ТекстПисьма); + ПараметрыПисьма.Вставить("Тело", ТекстТелаПисьма); + + ТекстТемыПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Истек контрольный срок задач (%1)'"), + Строка(ПисьмоИзНабора.КоличествоЗадач)); + ПараметрыПисьма.Вставить("Тема", ТекстТемыПисьма); + КонецЕсли; + + ТекстСообщения = ""; + + МодульРаботаСПочтовымиСообщениями = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениями"); + Попытка + МодульРаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение( + МодульРаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(), ПараметрыПисьма); + Исключение + ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при отправке уведомления о просроченных задачах: %1.'"), + ОписаниеОшибки); + УровеньВажностиСобытия = УровеньЖурналаРегистрации.Ошибка; + КонецПопытки; + + Если ПустаяСтрока(ТекстСообщения) Тогда + Если ПараметрыПисьма.Кому.Количество() > 0 Тогда + Кому = ? (ПустаяСтрока(ПараметрыПисьма.Кому[0].Представление), + ПараметрыПисьма.Кому[0].Адрес, + ПараметрыПисьма.Кому[0].Представление + " <" + ПараметрыПисьма.Кому[0].Адрес + ">"); + КонецЕсли; + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Уведомление о просроченных задачах успешно отправлено на адрес %1.'"), Кому); + УровеньВажностиСобытия = УровеньЖурналаРегистрации.Информация; + КонецЕсли; + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Бизнес-процессы и задачи.Уведомление о просроченных задачах'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньВажностиСобытия,,, ТекстСообщения); + +КонецПроцедуры + +Функция СоздатьЗадачуПоНастройкеРолей(ЗадачаСсылка, Ответственные) + + Для Каждого Ответственный Из Ответственные Цикл + ЗадачаОбъект = Задачи.ЗадачаИсполнителя.СоздатьЗадачу(); + ЗадачаОбъект.Дата = ТекущаяДатаСеанса(); + ЗадачаОбъект.Важность = Перечисления.ВариантыВажностиЗадачи.Высокая; + ЗадачаОбъект.Исполнитель = Ответственный; + ЗадачаОбъект.Предмет = ЗадачаСсылка; + + ЗадачаОбъект.Описание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Задача не может быть исполнена, так как у роли не задано ни одного исполнителя: + |%1'"), Строка(ЗадачаСсылка)); + ЗадачаОбъект.Наименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Назначить исполнителей: задача не может быть исполнена %1'"), Строка(ЗадачаСсылка)); + ЗадачаОбъект.Записать(); + КонецЦикла; + +КонецФункции + +Функция ВыбратьНовыеЗадачиПоИсполнителям(Знач ДатаВремяОт, Знач ДатаВремяПо) + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ЗадачаИсполнителя.Ссылка КАК Ссылка, + | ЗадачаИсполнителя.Номер КАК Номер, + | ЗадачаИсполнителя.Дата КАК Дата, + | ЗадачаИсполнителя.Наименование КАК Наименование, + | ЗадачаИсполнителя.СрокИсполнения КАК СрокИсполнения, + | ЗадачаИсполнителя.Автор КАК Автор, + | ПОДСТРОКА(ЗадачаИсполнителя.Описание, 1, 250) КАК Описание, + | ВЫБОР + | КОГДА ЗадачаИсполнителя.Исполнитель <> Неопределено + | ТОГДА ЗадачаИсполнителя.Исполнитель + | ИНАЧЕ ИсполнителиЗадач.Исполнитель + | КОНЕЦ КАК Исполнитель, + | ЗадачаИсполнителя.РольИсполнителя КАК РольИсполнителя, + | ЗадачаИсполнителя.ОсновнойОбъектАдресации КАК ОсновнойОбъектАдресации, + | ЗадачаИсполнителя.ДополнительныйОбъектАдресации КАК ДополнительныйОбъектАдресации + |ИЗ + | Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсполнителиЗадач КАК ИсполнителиЗадач + | ПО ЗадачаИсполнителя.РольИсполнителя = ИсполнителиЗадач.РольИсполнителя + | И ЗадачаИсполнителя.ОсновнойОбъектАдресации = ИсполнителиЗадач.ОсновнойОбъектАдресации + | И ЗадачаИсполнителя.ДополнительныйОбъектАдресации = ИсполнителиЗадач.ДополнительныйОбъектАдресации + |ГДЕ + | ЗадачаИсполнителя.ПометкаУдаления = ЛОЖЬ + | И ЗадачаИсполнителя.Дата > &ДатаВремяОт + | И ЗадачаИсполнителя.Дата <= &ДатаВремяПо + | И НЕ (ЗадачаИсполнителя.Исполнитель = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) + | И ИсполнителиЗадач.Исполнитель В (NULL, ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка))) + | И ЗадачаИсполнителя.Выполнена = ЛОЖЬ + | + |УПОРЯДОЧИТЬ ПО + | Исполнитель, + | СрокИсполнения УБЫВ + |ИТОГИ ПО + | Исполнитель"); + Запрос.Параметры.Вставить("ДатаВремяОт", ДатаВремяОт); + Запрос.Параметры.Вставить("ДатаВремяПо", ДатаВремяПо); + Результат = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); + Возврат Результат; + +КонецФункции + +Функция ОтправитьУведомлениеОНовыхЗадачах(Исполнитель, ЗадачиПоИсполнителю) + + ПочтовыйАдресПолучателя = ""; + ПриПолученииАдресаЭлектроннойПочты(Исполнитель, ПочтовыйАдресПолучателя); + Если ПустаяСтрока(ПочтовыйАдресПолучателя) Тогда + ЗаписьЖурналаРегистрации(НСтр("ru = 'Бизнес-процессы и задачи.Уведомление о новых задачах'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Информация,,, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Уведомление не отправлено, так как не указан почтовый адрес у пользователя %1.'"), Строка(Исполнитель))); + Возврат Ложь; + КонецЕсли; + + ТекстПисьма = ""; + Для Каждого Задача Из ЗадачиПоИсполнителю.Строки Цикл + ТекстПисьма = ТекстПисьма + СформироватьПредставлениеЗадачи(Задача); + КонецЦикла; + ТемаПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Направлены задачи - %1'"), Метаданные.КраткаяИнформация); + + ПараметрыПисьма = Новый Структура; + ПараметрыПисьма.Вставить("Тема", ТемаПисьма); + ПараметрыПисьма.Вставить("Тело", ТекстПисьма); + ПараметрыПисьма.Вставить("Кому", ПочтовыйАдресПолучателя); + + МодульРаботаСПочтовымиСообщениями = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениями"); + Попытка + МодульРаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение( + МодульРаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(), ПараметрыПисьма); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Бизнес-процессы и задачи.Уведомление о новых задачах'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при отправке уведомления о новых задачах: %1'"), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); + Возврат Ложь; + КонецПопытки; + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Бизнес-процессы и задачи.Уведомление о новых задачах'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Информация,,, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Уведомления успешно отправлены на адрес %1.'"), ПочтовыйАдресПолучателя)); + Возврат Истина; + +КонецФункции + +Функция СформироватьПредставлениеЗадачи(ЗадачаСтруктура) + + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 + | + |Крайний срок: %2'") + Символы.ПС, + ЗадачаСтруктура.Ссылка, + Формат(ЗадачаСтруктура.СрокИсполнения, "ДЛФ=DD; ДП='не указан'")); + Если ЗначениеЗаполнено(ЗадачаСтруктура.Исполнитель) Тогда + Результат = Результат + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Исполнитель: %1'"), ЗадачаСтруктура.Исполнитель) + Символы.ПС; + КонецЕсли; + Если ЗначениеЗаполнено(ЗадачаСтруктура.РольИсполнителя) Тогда + Результат = Результат + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль: %1'"), ЗадачаСтруктура.РольИсполнителя) + Символы.ПС; + КонецЕсли; + Если ЗначениеЗаполнено(ЗадачаСтруктура.ОсновнойОбъектАдресации) Тогда + Результат = Результат + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Основной объект адресации: %1'"), ЗадачаСтруктура.ОсновнойОбъектАдресации) + Символы.ПС; + КонецЕсли; + Если ЗначениеЗаполнено(ЗадачаСтруктура.ДополнительныйОбъектАдресации) Тогда + Результат = Результат + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Доп. объект адресации: %1'"), ЗадачаСтруктура.ДополнительныйОбъектАдресации) + Символы.ПС; + КонецЕсли; + Если ЗначениеЗаполнено(ЗадачаСтруктура.Автор) Тогда + Результат = Результат + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Автор: %1'"), ЗадачаСтруктура.Автор) + Символы.ПС; + КонецЕсли; + Если ЗначениеЗаполнено(ЗадачаСтруктура.Описание) Тогда + Результат = Результат + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1'"), ЗадачаСтруктура.Описание) + Символы.ПС; + КонецЕсли; + Возврат Результат + Символы.ПС; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. @@ -1261,20 +1807,6 @@ КонецФункции -// Выбрать список исполнителей, назначенных на указанную роль. -// -// Результат: -// Массив - массив элементов справочника Пользователи. -// -Функция ИсполнителиРоли(РольСсылка, ОсновнойОбъектАдресации = Неопределено, - ДополнительныйОбъектАдресации = Неопределено) Экспорт - - РезультатЗапроса = ВыбратьИсполнителейРоли(РольСсылка, ОсновнойОбъектАдресации, - ДополнительныйОбъектАдресации); - Возврат РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Исполнитель"); - -КонецФункции - // Есть ли хотя бы один исполнитель, назначенный на указанную роль. // // Результат: @@ -1557,7 +2089,7 @@ // // Параметры: // ЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя -// НовоеЗначениеПометкиУдаления - Булево +// НовоеЗначениеПометкиУдаления - Булево. // Процедура ПриПометкеУдаленияЗадачи(ЗадачаСсылка, НовоеЗначениеПометкиУдаления) Экспорт @@ -1568,6 +2100,9 @@ Если Не НовоеЗначениеПометкиУдаления Тогда ВыполнитьПроверкуПравДоступа("ИнтерактивноеСнятиеПометкиУдаления", ОбъектЗадачи); КонецЕсли; + Если ЗадачаСсылка.Пустая() Тогда + Возврат; + КонецЕсли; НачатьТранзакцию(); Попытка @@ -1638,7 +2173,7 @@ Список.Параметры.УстановитьЗначениеПараметра("КонецДня", Сегодня.ДатаОкончания); Список.Параметры.УстановитьЗначениеПараметра("КонецНедели", ЭтаНеделя.ДатаОкончания); Список.Параметры.УстановитьЗначениеПараметра("КонецСледующейНедели", СледующаяНеделя.ДатаОкончания); - Список.Параметры.УстановитьЗначениеПараметра("Просрочено", " " + НСтр("ru = 'Просрочено'")); + Список.Параметры.УстановитьЗначениеПараметра("Просрочено", " " + НСтр("ru = 'Просрочено'")); // пробел для сортировки Список.Параметры.УстановитьЗначениеПараметра("Сегодня", НСтр("ru = 'В течение сегодня'")); Список.Параметры.УстановитьЗначениеПараметра("ЭтаНеделя", НСтр("ru = 'До конца недели'")); Список.Параметры.УстановитьЗначениеПараметра("СледующаяНеделя", НСтр("ru = 'На следующей неделе'")); @@ -1763,7 +2298,7 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.3.1.78"; + Обработчик.Версия = "2.3.2.21"; Обработчик.Идентификатор = Новый УникальныйИдентификатор("80A64E76-12CC-4075-A80B-9EB93C411C85"); Обработчик.Процедура = "БизнесПроцессыИЗадачиСервер.ОбновитьНаборыЗначенийДоступаЗаданий"; Обработчик.Комментарий = НСтр("ru = 'Обновление прав доступа для бизнес-процесса ""Задание"". @@ -1999,7 +2534,7 @@ // Адрес - Строка - возвращаемый адрес электронной почты. // // -Процедура ПриПолученииАдресаЭлектроннойПочты(Знач Получатель, Адрес) Экспорт +Процедура ПриПолученииАдресаЭлектроннойПочты(Знач Получатель, Адрес) Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); @@ -2025,4 +2560,18 @@ КонецФункции +Процедура ПроверитьСистемнаяУчетнаяЗаписьНастроена() + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда + ВызватьИсключение НСтр("ru = 'Отправка почты не предусмотрена в программе.'"); + КонецЕсли; + + МодульРаботаСПочтовымиСообщениями = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениями"); + Результат = МодульРаботаСПочтовымиСообщениями.УчетнаяЗаписьНастроена(МодульРаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(), Истина, Ложь); + Если Не Результат Тогда + ВызватьИсключение НСтр("ru = 'Системная учетная запись электронной почты не настроена для отправки.'"); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl index 479883680..637e44f53 100644 --- a/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl @@ -137,8 +137,7 @@ // Поддержка переопределяемых модулей. // Вызывает модуль менеджера отчета для заполнения его настроек. -// Для использования в ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). -// См. описание функции ДеревоПредопределенных(). +// Для вызова из процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Параметры: // Настройки - Коллекция - Передается "как есть" из процедуры НастроитьВариантыОтчетов. @@ -146,25 +145,35 @@ // // Важно: // Для использования в модуле менеджера отчета должна быть размещена экспортная процедура по шаблону: -// // Настройки размещения в панели отчетов. -// // -// // Параметры: -// // Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// // См. описание к ВариантыОтчетов.ДеревоПредопределенных(). -// // НастройкиОтчета - СтрокаДереваЗначений - Настройки размещения всех вариантов отчета. -// // См. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоПредопределенных(). -// // -// // Описание: -// // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). -// // -// // Вспомогательные методы: -// // НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// // ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); -// // -// Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт -// НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// НастройкиВарианта.Описание = НСтр("ru = '<Описание>'"); -// КонецПроцедуры +// // Настройки размещения в панели отчетов. +// // +// // Параметры: +// // Настройки - Коллекция - Передается "как есть" из ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// // Может использоваться для получения настроек варианта этого отчета при помощи функции ВариантыОтчетов.ОписаниеВарианта(). +// // НастройкиОтчета - СтрокаДереваЗначений - Настройки этого отчета, +// // уже сформированные при помощи функции ВариантыОтчетов.ОписаниеОтчета() и готовые к изменению. +// // См. "Свойства для изменения" процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// // +// // Описание: +// // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// // +// // Вспомогательные методы: +// // НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// // ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// // +// // Примеры: +// // +// // 1. Установка описания варианта. +// // НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// // НастройкиВарианта.Описание = НСтр("ru = '<Описание>'"); +// // +// // 2. Отключение варианта отчета. +// // НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// // НастройкиВарианта.Включен = Ложь; +// // +// Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт +// // Код процедуры. +// КонецПроцедуры // Процедура НастроитьОтчетВМодулеМенеджера(Настройки, ОтчетМетаданные) Экспорт НастройкиОтчета = ОписаниеОтчета(Настройки, ОтчетМетаданные); @@ -176,8 +185,8 @@ // См. описание функции ДеревоПредопределенных(). // // Параметры: -// ДеревоВариантов - ДеревоЗначений - Используется для описания настроек отчетов и вариантов. -// См. описание функции ДеревоПредопределенных(). +// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов. +// Передается "как есть" из процедур НастроитьВариантыОтчетов и НастроитьВариантыОтчета. // ОтчетЗначениеИлиМетаданные - ОбъектМетаданных, СправочникСсылка.ИдентификаторыОбъектовМетаданных - // Метаданные или ссылка отчета. // @@ -185,12 +194,12 @@ // СтрокаДереваЗначений - Отчет. // См. "Реквизиты для изменения" функции ДеревоПредопределенных(). // -Функция ОписаниеОтчета(ДеревоВариантов, ОтчетЗначениеИлиМетаданные) Экспорт +Функция ОписаниеОтчета(Настройки, ОтчетЗначениеИлиМетаданные) Экспорт ЭтоМетаданные = (ТипЗнч(ОтчетЗначениеИлиМетаданные) = Тип("ОбъектМетаданных")); Если ЭтоМетаданные Тогда - СтрокаОтчет = ДеревоВариантов.Строки.Найти(ОтчетЗначениеИлиМетаданные, "Метаданные", Ложь); + СтрокаОтчет = Настройки.Строки.Найти(ОтчетЗначениеИлиМетаданные, "Метаданные", Ложь); Иначе - СтрокаОтчет = ДеревоВариантов.Строки.Найти(ОтчетЗначениеИлиМетаданные, "Отчет", Ложь); + СтрокаОтчет = Настройки.Строки.Найти(ОтчетЗначениеИлиМетаданные, "Отчет", Ложь); КонецЕсли; Если СтрокаОтчет = Неопределено Тогда @@ -208,8 +217,8 @@ // Для использования в ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Параметры: -// ДеревоВариантов - ДеревоЗначений - Используется для описания настроек отчетов и вариантов -// см. описание функции ДеревоПредопределенных(). +// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов. +// Передается "как есть" из процедур НастроитьВариантыОтчетов и НастроитьВариантыОтчета. // ОтчетСтрокаДереваИлиЗначениеИлиМетаданные - СтрокаДерева, ОбъектМетаданных, // СправочникСсылка.ИдентификаторыОбъектовМетаданных - Описание настроек, метаданные или ссылка отчета. // КлючВарианта - Строка - Имя варианта отчета как оно задано в схеме компоновки данных. @@ -218,11 +227,11 @@ // СтрокаДереваЗначений - Вариант. // См. "Реквизиты для изменения" функции ДеревоПредопределенных(). // -Функция ОписаниеВарианта(ДеревоВариантов, ОтчетСтрокаДереваИлиЗначениеИлиМетаданные, КлючВарианта) Экспорт +Функция ОписаниеВарианта(Настройки, ОтчетСтрокаДереваИлиЗначениеИлиМетаданные, КлючВарианта) Экспорт Если ТипЗнч(ОтчетСтрокаДереваИлиЗначениеИлиМетаданные) = Тип("СтрокаДереваЗначений") Тогда СтрокаОтчет = ОтчетСтрокаДереваИлиЗначениеИлиМетаданные; Иначе - СтрокаОтчет = ОписаниеОтчета(ДеревоВариантов, ОтчетСтрокаДереваИлиЗначениеИлиМетаданные); + СтрокаОтчет = ОписаниеОтчета(Настройки, ОтчетСтрокаДереваИлиЗначениеИлиМетаданные); КонецЕсли; Если КлючВарианта = "" Тогда @@ -244,15 +253,25 @@ КонецФункции // Устанавливает режим вывода Отчетов и Вариантов в панелях отчетов. +// Для вызова из процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов() переопределяемого модуля +// и из процедуры НастроитьВариантыОтчета() модуля объекта отчета. // // Параметры: -// Настройки - Передается "как есть" из процедуры НастроитьВариантыОтчетов. +// Настройки - Коллекция - Передается "как есть" из соответствующего параметра +// процедур НастроитьВариантыОтчетов и НастроитьВариантыОтчета. // ОтчетИлиПодсистема - СтрокаДереваЗначений, ОбъектМетаданных: Отчет, ОбъектМетаданных: Подсистема - // Описание отчета или подсистемы, для которой устанавливается режим вывода. // Когда передана подсистема режим устанавливается рекурсивно для всех отчетов из ее состава. -// ВыводитьОтчетыВместоВариантов - Булево, Строка - Режим вывода гиперссылок этого отчета в панели отчетов: -// - Истина, "ПоОтчетам" - Варианты отчета по умолчанию скрыты, а отчет (вариант с пустым ключом) включен и видим. -// - Ложь, "ПоВариантам" - Варианты отчета по умолчанию видимы, а отчет отключен. Как в версии 2.2.1 и ранее. +// ГруппироватьПоОтчетам - Булево, Строка - Режим вывода гиперссылок этого отчета в панели отчетов: +// - Истина, "ПоОтчетам" - Варианты группируются по отчету. +// По умолчанию в панелях отчетов выводится только основной вариант отчета, +// а все прочие варианты этого отчета выводятся "под" основным и по умолчанию скрыты +// (но могут быть найдены поиском или включены при помощи флажков в режиме настройки). +// Основным вариантом считается первый предопределенный вариант в схеме отчета. +// Этот режим появился в версии 2.2.2 и позволяет уменьшить количество гиперссылок, выводимых в панелях отчетов. +// - Ложь, "ПоВариантам" - Все варианты отчета считаются самостоятельными, +// по умолчанию видны и выводятся независимо в панелях отчетов. +// Этот режим использовался в версии 2.2.1 и ранее. // Процедура УстановитьРежимВыводаВПанеляхОтчетов(Настройки, ОтчетИлиПодсистема, ВыводитьОтчетыВместоВариантов) Экспорт Если ТипЗнч(ВыводитьОтчетыВместоВариантов) <> Тип("Булево") Тогда @@ -410,12 +429,17 @@ Если РазрешеноИндексированиеНеразделенныхДанных() Тогда Обработчик = Обработчики.Добавить(); - Обработчик.РежимВыполнения = ?(ОбщегоНазначенияПовтИсп.РазделениеВключено(), "Оперативно", "Отложенно"); - Обработчик.Идентификатор = Новый УникальныйИдентификатор("38d2a135-53e0-4c68-9bd6-3d6df9b9dcfb"); - Обработчик.ОбщиеДанные = Истина; - Обработчик.Версия = Версия; - Обработчик.Процедура = "ВариантыОтчетов.ОтложенноеОбновлениеОбщихДанныхКонфигурацииПолное"; - Обработчик.Комментарий = НСтр("ru = 'Полное обновление индекса поиска отчетов, предусмотренных в программе. + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.ОбщиеДанные = Истина; + Иначе + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.ОбщиеДанные = Ложь; // Для коробки без разницы, но при значении Истина механика обновления кидает исключение. + КонецЕсли; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("38d2a135-53e0-4c68-9bd6-3d6df9b9dcfb"); + Обработчик.Версия = Версия; + Обработчик.Процедура = "ВариантыОтчетов.ОтложенноеОбновлениеОбщихДанныхКонфигурацииПолное"; + Обработчик.Комментарий = НСтр("ru = 'Полное обновление индекса поиска отчетов, предусмотренных в программе. |Поиск отчетов временно недоступен.'"); КонецЕсли; @@ -456,7 +480,7 @@ Запрос = Новый Запрос; ШаблонЗапроса = "ВЫБРАТЬ - | ВариантыОтчетов.Отчет.Имя КАК ИмяОтчета, + | ЕСТЬNULL(ВариантыОтчетов.Отчет.Имя, ВариантыОтчетов.Отчет.ИмяОбъекта) КАК ИмяОтчета, | ВариантыОтчетов.КлючВарианта |ИЗ | Справочник.ВариантыОтчетов КАК ВариантыОтчетов @@ -489,6 +513,8 @@ ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ТипыНастроек, "ЗначениеПараметраНастроек", Истина); СбрасыватьПрочие = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ТипыНастроек, "Прочие", Истина); + УстановитьПривилегированныйРежим(Истина); + Для Каждого ПолноеИмяВарианта Из КлючиВариантов Цикл КлючОбъекта = "Отчет." + ПолноеИмяВарианта + "/ТекущиеПользовательскиеНастройки"; ВыборкаХранилища = ХранилищеСистемныхНастроек.Выбрать(Новый Структура("КлючОбъекта", КлючОбъекта)); @@ -527,7 +553,8 @@ ОбратныйИндекс = Количество - Номер; ПользовательскаяНастройкаКД = ПользовательскиеНастройкиКД.Элементы[ОбратныйИндекс]; Тип = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ПользовательскаяНастройкаКД)); - Если ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ТипыНастроек, Тип, СбрасыватьПрочие) = Истина Тогда + Сбрасывать = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ТипыНастроек, Тип, СбрасыватьПрочие); + Если Сбрасывать Тогда ПользовательскиеНастройкиКД.Элементы.Удалить(ОбратныйИндекс); ЕстьИзменения = Истина; КонецЕсли; @@ -851,12 +878,26 @@ // Содержит настройки размещения вариантов отчетов в панели отчетов. // // Параметры: - // Настройки - Коллекция - Используется для описания настроек отчетов и вариантов - // см. описание к ВариантыОтчетов.ДеревоПредопределенных(). + // Настройки - Коллекция - Содержит настройки всех отчетов и вариантов конфигурации. + // Используется для передачи в параметрах вспомогательных методов. // // Описание: // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // + // Вспомогательные методы: + // 1. Функции ОписаниеОтчета и ОписаниеВарианта формируют описание настроек отчета и варианта для последующего изменения: + // НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.<ИмяОтчета>); + // НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); + // Возвращаемые коллекции содержат одинаковый набор свойств. + // НастройкиОтчета используются как умолчания для вариантов, описания которых еще не получены. + // Подробнее - см. "свойства для изменения" в комментарии к ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). + // 2. Процедура УстановитьРежимВыводаВПанеляхОтчетов позволяет настроить режим группировки вариантов в панелях отчетов: + // ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); + // ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Отчеты.<ИмяОтчета>, Истина/Ложь); + // ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Подсистемы.<ИмяПодсистемы>, Истина/Ложь); + // 3. Процедура НастроитьОтчетВМодулеМенеджера позволяет переопределять настройки отчета в его модуле менеджера: + // ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.<ИмяОтчета>); + // СерверныеСобытия.Добавить( "СтандартныеПодсистемы.ВариантыОтчетов\ПриНастройкеВариантовОтчетов"); @@ -892,16 +933,17 @@ Событие = "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПереименованийОбъектовМетаданных"; СерверныеОбработчики[Событие].Добавить(СерверныйМодуль); - Событие = "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбязательныхОбъектовПланаОбмена"; - СерверныеОбработчики[Событие].Добавить(СерверныйМодуль); - Событие = "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентаПриЗапуске"; СерверныеОбработчики[Событие].Добавить(СерверныйМодуль); Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ВыгрузкаЗагрузкаДанных") Тогда Событие = "ТехнологияСервиса.ВыгрузкаЗагрузкаДанных\ПриЗаполненииТиповОбщихДанныхПоддерживающихСопоставлениеСсылокПриЗагрузке"; СерверныеОбработчики[Событие].Добавить(СерверныйМодуль); + + Событие = "ТехнологияСервиса.ВыгрузкаЗагрузкаДанных\ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки"; + СерверныеОбработчики[Событие].Добавить(СерверныйМодуль); КонецЕсли; + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -951,7 +993,17 @@ Обработчик.Процедура = "ВариантыОтчетов.ЗаполнитьСсылкиПредопределенных"; Обработчик.Приоритет = 80; - // 2.3. Обновить разделенные данные в локальном режиме. + // 2.3. Удалить устаревшие отложенные разделенные обязательные (на *) обработчики обновления. + Обработчик = Обработчики.Добавить(); + Обработчик.ВыполнятьВГруппеОбязательных = Истина; + Обработчик.ОбщиеДанные = Ложь; + Обработчик.УправлениеОбработчиками = Ложь; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.Версия = "2.3.2.32"; + Обработчик.Процедура = "ВариантыОтчетов.УдалитьУстаревшиеОбработчики"; + Обработчик.Приоритет = 85; + + // 2.4. Обновить разделенные данные в локальном режиме. Обработчик = Обработчики.Добавить(); Обработчик.РежимВыполнения = "Оперативно"; Обработчик.Версия = "*"; @@ -964,12 +1016,17 @@ Если РазрешеноИндексированиеНеразделенныхДанных() Тогда Обработчик = Обработчики.Добавить(); - Обработчик.РежимВыполнения = ?(ОбщегоНазначенияПовтИсп.РазделениеВключено(), "Оперативно", "Отложенно"); - Обработчик.Идентификатор = Новый УникальныйИдентификатор("0a485fd0-d72b-434f-917a-9c63a40f69cb"); - Обработчик.ОбщиеДанные = Истина; - Обработчик.Версия = "*"; - Обработчик.Процедура = "ВариантыОтчетов.ОтложенноеОбновлениеОбщихДанныхКонфигурацииИнкрементальное"; - Обработчик.Комментарий = НСтр("ru = 'Обновление индекса поиска отчетов, предусмотренных в программе. + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.ОбщиеДанные = Истина; + Иначе + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.ОбщиеДанные = Ложь; // Для коробки без разницы, но при значении Истина механика обновления кидает исключение. + КонецЕсли; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("0a485fd0-d72b-434f-917a-9c63a40f69cb"); + Обработчик.Версия = "*"; + Обработчик.Процедура = "ВариантыОтчетов.ОтложенноеОбновлениеОбщихДанныхКонфигурацииИнкрементальное"; + Обработчик.Комментарий = НСтр("ru = 'Обновление индекса поиска отчетов, предусмотренных в программе. |Поиск отчетов временно недоступен.'"); КонецЕсли; @@ -1008,27 +1065,6 @@ КонецПроцедуры -// Используется для получения объектов метаданных обязательных для плана обмена. -// Если подсистема имеет объекты метаданных обязательные для включения в состав плана обмена, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// См. также: -// СтандартныеПодсистемыСервер.ПроверитьСоставПланаОбмена(). -// -Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт - - Если РаспределеннаяИнформационнаяБаза Тогда - - Объекты.Добавить(Метаданные.Константы.ПараметрыВариантовОтчетов); - Объекты.Добавить(Метаданные.Справочники.ВариантыОтчетов); - Объекты.Добавить(Метаданные.Справочники.ПредопределенныеВариантыОтчетов); - Объекты.Добавить(Метаданные.Справочники.ПользовательскиеНастройкиОтчетов); - Объекты.Добавить(Метаданные.РегистрыСведений.НастройкиВариантовОтчетов); - - КонецЕсли; - -КонецПроцедуры - // Заполняет массив типов неразделенных данных, для которых поддерживается сопоставление ссылок // при загрузке данных в другую информационную базу. // @@ -1050,21 +1086,217 @@ Параметры.Вставить("ВариантыОтчетов", Новый ФиксированнаяСтруктура(ПараметрыКлиента())); КонецПроцедуры +// Заполняет массив типов, исключаемых из выгрузки и загрузки данных. +// +// Параметры: +// Типы - Массив(Типы). +// +Процедура ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки(Типы) Экспорт + + Типы.Добавить(Метаданные.Справочники.ПредопределенныеВариантыОтчетовРасширений); + Типы.Добавить(Метаданные.РегистрыСведений.ПредопределенныеВариантыОтчетовВерсийРасширений); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов. // Получает объект отчета по ссылке варианта отчета. // // Параметры: -// СсылкаВариантаИлиОтчета - -// - СправочникСсылка.ВариантыОтчетов - Ссылка варианта отчета, подключенного к хранилищу подсистемы. +// Параметры - Структура - Параметры подключения и формирования отчета. +// * СсылкаВарианта - СправочникСсылка.ВариантыОтчетов - Ссылка варианта отчета. +// * СсылкаОтчета - Произвольный - Ссылка отчета. +// * КлючВарианта - Строка - Имя предопределенного или идентификатор пользовательского варианта отчета. +// * ИдентификаторФормы - Неопределено, УникальныйИдентификатор - Идентификатор формы, из которой подключается отчет. +// +// Возвращаемое значение: +// Структура - Параметры отчета, в том числе Объект отчета. +// * СсылкаОтчета - Произвольный - Ссылка отчета. +// * ПолноеИмя - Строка - Полное имя отчета. +// * Метаданные - ОбъектМетаданных - Метаданные отчета. +// * Объект - ОтчетОбъект.<Имя отчета>, ВнешнийОтчет - Объект отчета. +// ** КомпоновщикНастроек - КомпоновщикНастроекКомпоновкиДанных - Настройки отчета. +// ** СхемаКомпоновкиДанных - СхемаКомпоновкиДанных - Схема отчета. +// * КлючВарианта - Строка - Имя предопределенного или идентификатор пользовательского варианта отчета. +// * АдресСхемы - Строка - Адрес временного хранилища по которому размещена схема отчета. +// * Успех - Булево - Истина если удалось подключить отчет. +// * ТекстОшибки - Строка - Текст ошибки. +// +// Места использования: +// РассылкаОтчетов.ИнициализироватьОтчет(). +// +Функция ПодключитьОтчетИЗагрузитьНастройки(Параметры) Экспорт + Результат = Новый Структура("СсылкаВарианта, СсылкаОтчета, КлючВарианта, НастройкиФормы, + |Объект, Метаданные, ПолноеИмя, + |СхемаКД, АдресСхемы, СхемаМодифицирована, НастройкиКД, ПользовательскиеНастройкиКД, + |ТекстОшибки, Успех"); + ЗаполнитьЗначенияСвойств(Результат, Параметры); + Результат.Успех = Ложь; + Результат.СхемаМодифицирована = Ложь; + Результат.НастройкиФормы = ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(); + + // Поддержка возможности прямого выбора ссылок дополнительных отчетов в рассылках отчетов. + Если ТипЗнч(Результат.НастройкиКД) <> Тип("НастройкиКомпоновкиДанных") + И Результат.КлючВарианта = Неопределено + И Результат.Объект = Неопределено + И ТипЗнч(Результат.СсылкаВарианта) = ВариантыОтчетовКлиентСервер.ТипСсылкиДополнительногоОтчета() Тогда + // Автоопределение ключа и ссылки варианта если передана только ссылка доп. отчета. + Результат.СсылкаОтчета = Результат.СсылкаВарианта; + Результат.СсылкаВарианта = Неопределено; + ПодключениеОтчета = ПодключитьОтчетОбъект(Результат.СсылкаОтчета, Истина); + Если Не ПодключениеОтчета.Успех Тогда + Результат.ТекстОшибки = ПодключениеОтчета.ТекстОшибки; + Возврат Результат; + КонецЕсли; + ЗаполнитьЗначенияСвойств(Результат, ПодключениеОтчета, "Объект, Метаданные, ПолноеИмя"); + ПодключениеОтчета.Очистить(); + Если Результат.Объект.СхемаКомпоновкиДанных = Неопределено Тогда + Результат.Успех = Истина; + Возврат Результат; + КонецЕсли; + ВариантНастроекКД = Результат.Объект.СхемаКомпоновкиДанных.ВариантыНастроек.Получить(0); + Результат.КлючВарианта = ВариантНастроекКД.Имя; + Результат.НастройкиКД = ВариантНастроекКД.Настройки; + Результат.СсылкаВарианта = ПолучитьСсылку(Результат.СсылкаОтчета, Результат.КлючВарианта); + КонецЕсли; + + НадоПрочитатьСсылкуОтчета = (Результат.Объект = Неопределено И Результат.СсылкаОтчета = Неопределено); + НадоПрочитатьНастройки = (ТипЗнч(Результат.НастройкиКД) <> Тип("НастройкиКомпоновкиДанных")); + Если НадоПрочитатьСсылкуОтчета Или НадоПрочитатьНастройки Тогда + Если ТипЗнч(Результат.СсылкаВарианта) <> Тип("СправочникСсылка.ВариантыОтчетов") + Или Не ЗначениеЗаполнено(Результат.СсылкаВарианта) Тогда + Если Не НадоПрочитатьСсылкуОтчета И Результат.КлючВарианта <> Неопределено Тогда + Результат.СсылкаВарианта = ПолучитьСсылку(Результат.СсылкаОтчета, Результат.КлючВарианта); + КонецЕсли; + Если Результат.СсылкаВарианта = Неопределено Тогда + Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В методе ""%1"" не указаны параметры ""%2"".'"), + "ПодключитьОтчетИЗагрузитьНастройки", + "СсылкаВарианта, СсылкаОтчета, КлючВарианта"); + Возврат Результат; + КонецЕсли; + КонецЕсли; + ИменаСвойств = "КлючВарианта" + ?(НадоПрочитатьСсылкуОтчета, ", Отчет", "") + ?(НадоПрочитатьНастройки, ", Настройки", ""); + СвойстваВарианта = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Результат.СсылкаВарианта, ИменаСвойств); + Результат.КлючВарианта = СвойстваВарианта.КлючВарианта; + Если НадоПрочитатьСсылкуОтчета Тогда + Результат.СсылкаОтчета = СвойстваВарианта.Отчет; + КонецЕсли; + Если НадоПрочитатьНастройки Тогда + Результат.НастройкиКД = СвойстваВарианта.Настройки.Получить(); + КонецЕсли; + КонецЕсли; + + // Подключение объекта отчета. + Если Результат.Объект = Неопределено Тогда + ПодключениеОтчета = ПодключитьОтчетОбъект(Результат.СсылкаОтчета, Истина); + Если Не ПодключениеОтчета.Успех Тогда + Результат.ТекстОшибки = ПодключениеОтчета.ТекстОшибки; + Возврат Результат; + КонецЕсли; + ЗаполнитьЗначенияСвойств(Результат, ПодключениеОтчета, "Объект, Метаданные, ПолноеИмя"); + ПодключениеОтчета.Очистить(); + КонецЕсли; + + Если Результат.Объект.СхемаКомпоновкиДанных = Неопределено Тогда + Результат.Успех = Истина; + Возврат Результат; + КонецЕсли; + + ОтчетОбъект = Результат.Объект; + + // Чтение настроек. + Если ТипЗнч(Результат.НастройкиКД) <> Тип("НастройкиКомпоновкиДанных") Тогда + ВариантНастроекКД = ОтчетОбъект.СхемаКомпоновкиДанных.ВариантыНастроек.Найти(Результат.КлючВарианта); + Если ВариантНастроекКД = Неопределено Тогда + Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Вариант ""%1"" не найден в схеме отчета ""%2"".'"), + Результат.КлючВарианта, + Строка(Результат.СсылкаОтчета)); + Возврат Результат; + КонецЕсли; + Результат.НастройкиКД = ВариантНастроекКД.Настройки; + КонецЕсли; + + // Инициализация схемы. + КомпоновщикНастроекКД = ОтчетОбъект.КомпоновщикНастроек; + + ФиксированныеНастройкиКД = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ФиксированныеНастройкиКД"); + Если ТипЗнч(ФиксированныеНастройкиКД) = Тип("НастройкиКомпоновкиДанных") + И КомпоновщикНастроекКД.ФиксированныеНастройки <> ФиксированныеНастройкиКД Тогда + КомпоновщикНастроекКД.ЗагрузитьФиксированныеНастройки(ФиксированныеНастройкиКД); + КонецЕсли; + + АдресСхемыЗаполнен = (ТипЗнч(Результат.АдресСхемы) = Тип("Строка") И ЭтоАдресВременногоХранилища(Результат.АдресСхемы)); + Если АдресСхемыЗаполнен И ТипЗнч(Результат.СхемаКД) <> Тип("СхемаКомпоновкиДанных") Тогда + Результат.СхемаКД = ПолучитьИзВременногоХранилища(Результат.АдресСхемы); + КонецЕсли; + + Результат.СхемаМодифицирована = (ТипЗнч(Результат.СхемаКД) = Тип("СхемаКомпоновкиДанных")); + Если Результат.СхемаМодифицирована Тогда + ОтчетОбъект.СхемаКомпоновкиДанных = Результат.СхемаКД; + КонецЕсли; + + Если Не АдресСхемыЗаполнен И ТипЗнч(ОтчетОбъект.СхемаКомпоновкиДанных) = Тип("СхемаКомпоновкиДанных") Тогда + ИдентификаторФормы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ИдентификаторФормы"); + Если ТипЗнч(ИдентификаторФормы) = Тип("УникальныйИдентификатор") Тогда + АдресСхемыЗаполнен = Истина; + Результат.АдресСхемы = ПоместитьВоВременноеХранилище(ОтчетОбъект.СхемаКомпоновкиДанных, ИдентификаторФормы); + ИначеЕсли Результат.СхемаМодифицирована Тогда + АдресСхемыЗаполнен = Истина; + Результат.АдресСхемы = ПоместитьВоВременноеХранилище(ОтчетОбъект.СхемаКомпоновкиДанных); + КонецЕсли; + КонецЕсли; + + Если АдресСхемыЗаполнен Тогда + КомпоновщикНастроекКД.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Результат.АдресСхемы)); + КонецЕсли; + + // Чтение настроек. + ОтчетыСНастройками = ВариантыОтчетовПовтИсп.Параметры().ОтчетыСНастройками; + Если ОтчетыСНастройками.Найти(Результат.СсылкаОтчета) <> Неопределено Тогда + ОтчетОбъект.ОпределитьНастройкиФормы(Неопределено, Результат.КлючВарианта, Результат.НастройкиФормы); + Если Результат.НастройкиФормы.События.ПередЗагрузкойНастроекВКомпоновщик Тогда + КлючСхемы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "КлючСхемы"); + ОтчетОбъект.ПередЗагрузкойНастроекВКомпоновщик( + Результат, + КлючСхемы, + Результат.КлючВарианта, + Результат.НастройкиКД, + Результат.ПользовательскиеНастройкиКД); + КонецЕсли; + КонецЕсли; + + Если ТипЗнч(Результат.НастройкиКД) = Тип("НастройкиКомпоновкиДанных") + И КомпоновщикНастроекКД.Настройки <> Результат.НастройкиКД Тогда + Если ТипЗнч(Результат.ПользовательскиеНастройкиКД) <> Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда + Результат.ПользовательскиеНастройкиКД = КомпоновщикНастроекКД.ПользовательскиеНастройки; + КонецЕсли; + КомпоновщикНастроекКД.ЗагрузитьНастройки(Результат.НастройкиКД); + КонецЕсли; + Если ТипЗнч(Результат.ПользовательскиеНастройкиКД) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") + И КомпоновщикНастроекКД.ПользовательскиеНастройки <> Результат.ПользовательскиеНастройкиКД Тогда + КомпоновщикНастроекКД.ЗагрузитьПользовательскиеНастройки(Результат.ПользовательскиеНастройкиКД); + КонецЕсли; + + Результат.Успех = Истина; + Возврат Результат; +КонецФункции + +// Получает объект отчета по ссылке варианта отчета. +// +// Параметры: +// СсылкаОтчета - // - СправочникСсылка.ИдентификаторыОбъектовМетаданных - Ссылка отчета конфигурации. +// - СправочникСсылка.ИдентификаторыОбъектовРасширений - Ссылка отчета расширения. // - Произвольный - Ссылка дополнительного или внешнего отчета. // // Возвращаемое значение: // Структура - Параметры отчета, в том числе Объект отчета. // * Объект - ОтчетОбъект.<Имя отчета>, ВнешнийОтчет - Объект отчета. // * Имя - Строка - Имя объекта отчета. +// * ПолноеИмя - Строка - Полное имя объекта отчета. // * Метаданные - ОбъектМетаданных - Объект метаданных отчета. // * Ссылка - Произвольный - Ссылка отчета. // * Успех - Булево - Истина если удалось подключить отчет. @@ -1073,32 +1305,23 @@ // Места использования: // РассылкаОтчетов.ИнициализироватьОтчет(). // -Функция ПодключитьОтчетОбъект(СсылкаВариантаИлиОтчета, ПолучатьМетаданные) Экспорт +Функция ПодключитьОтчетОбъект(СсылкаОтчета, ПолучатьМетаданные) Результат = Новый Структура("Объект, Имя, ПолноеИмя, Метаданные, Ссылка, ТекстОшибки"); Результат.Вставить("Успех", Ложь); - Если СсылкаВариантаИлиОтчета = Неопределено Тогда + Если СсылкаОтчета = Неопределено Тогда Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'В методе ""%1"" не указан параметр ""%2"".'"), "ПодключитьОтчетОбъект", - "СсылкаВариантаИлиОтчета"); + "СсылкаОтчета"); Возврат Результат; - ИначеЕсли ТипЗнч(СсылкаВариантаИлиОтчета) = Тип("СправочникСсылка.ВариантыОтчетов") Тогда - Результат.Ссылка = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаВариантаИлиОтчета, "Отчет"); - Если Результат.Ссылка = Неопределено Тогда - Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Вариант отчета ""%1"" не найден в программе'"), - Строка(СсылкаВариантаИлиОтчета)); - Возврат Результат; - КонецЕсли; Иначе - Результат.Ссылка = СсылкаВариантаИлиОтчета; + Результат.Ссылка = СсылкаОтчета; КонецЕсли; Если ТипЗнч(Результат.Ссылка) = Тип("Строка") Тогда Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для варианта ""%1"" отчет ""%2"" записан как внешний и не может быть подключен из программы'"), - Строка(СсылкаВариантаИлиОтчета), + НСтр("ru = 'Отчет ""%1"" записан как внешний и не может быть подключен из программы'"), Результат.Ссылка); Возврат Результат; КонецЕсли; @@ -1110,8 +1333,7 @@ Результат.Метаданные = Метаданные.Отчеты.Найти(Результат.Имя); Если Результат.Метаданные = Неопределено Тогда Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для варианта ""%1"" отчет ""%2"" не найден в программе'"), - Строка(СсылкаВариантаИлиОтчета), + НСтр("ru = 'Отчет ""%1"" не найден в программе'"), Результат.Имя); Возврат Результат; КонецЕсли; @@ -1293,56 +1515,6 @@ КонецПроцедуры -// Добавляет оповещение для открытых форм подсистемы если изменилось значение функциональной опции. -// -// Параметры: -// Результат - Структура - Результат работы сервера, который возвращается на клиент. -// См. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). -// КонстантаМенеджер - КонстантаМенеджер.<Имя константы> - Менеджер константы, значение которой изменилось. -// -// Описание: -// Данную процедуру следует использовать при изменении значений констант, -// связанных с функциональными опциями для последующего обновления открытых форм. -// -// Места использования: -// Обработка.ПанельАдминистрированияБСП.Форма.*. -// -Процедура ДобавитьОповещениеПриИзмененииЗначенияКонстанты(Результат, КонстантаМенеджер) Экспорт - // Варианты отчетов связаны с константами через функциональные опции. - // ПовтИсп не используется поскольку при изменении значения функциональной опции их значения как правило сбрасываются. - ПеременныеИнициализированы = Ложь; - КонстантаМетаданные = КонстантаМенеджер.СоздатьМенеджерЗначения().Метаданные(); - - // Поиск функциональных опций, связанных с этой константой. - Для Каждого ФункциональнаяОпцияМетаданные Из Метаданные.ФункциональныеОпции Цикл - Если ФункциональнаяОпцияМетаданные.Хранение = КонстантаМетаданные Тогда - - // Поиск связи вариантов отчетов с этой функциональной опцией. - Если Не ПеременныеИнициализированы Тогда - ПеременныеИнициализированы = Истина; - ТаблицаОпций = ВариантыОтчетовПовтИсп.Параметры().ТаблицаФункциональныхОпций; - ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта(); - КонецЕсли; - - Если ТаблицаОпций.Найти(ФункциональнаяОпцияМетаданные.Имя, "ИмяФункциональнойОпции") <> Неопределено Тогда - СтандартныеПодсистемыКлиентСервер.ОповеститьОткрытыеФормы(Результат, ИмяСобытия); - Возврат; - КонецЕсли; - - // Поиск связи отчетов с этой функциональной опцией. - Для Каждого ЭлементСоставаФункциональнойОпции Из ФункциональнаяОпцияМетаданные.Состав Цикл - Если ТипЗнч(ЭлементСоставаФункциональнойОпции.Объект) = Тип("ОбъектМетаданных") - И Метаданные.Отчеты.Содержит(ЭлементСоставаФункциональнойОпции.Объект) Тогда - СтандартныеПодсистемыКлиентСервер.ОповеститьОткрытыеФормы(Результат, ИмяСобытия); - Возврат; - КонецЕсли; - КонецЦикла; - - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - // Определить список справочников, доступных для загрузки с помощью подсистемы "Загрузка данных из файла". // // Параметры: @@ -1381,6 +1553,15 @@ Объекты.Вставить(Метаданные.Справочники.ПредопределенныеВариантыОтчетовРасширений.ПолноеИмя(), "РеквизитыРедактируемыеВГрупповойОбработке"); КонецПроцедуры +// См. одноименную процедуру в общем модуле ПользователиПереопределяемый. +Процедура ПриОпределенииНазначенияРолей(НазначениеРолей) Экспорт + + // СовместноДляПользователейИВнешнихПользователей. + НазначениеРолей.СовместноДляПользователейИВнешнихПользователей.Добавить( + Метаданные.Роли.ИспользованиеВариантовОтчетов.Имя); + +КонецПроцедуры + // Формирует параметры открытия формы отчета. // Используется перед вызовом ВариантыОтчетовКлиент.ОткрытьФормуОтчета(). // @@ -1388,31 +1569,37 @@ // ВариантСсылка - СправочникСсылка.ВариантыОтчетов - Ссылка открываемого варианта отчета. // Функция ПараметрыОткрытия(ВариантСсылка) Экспорт - ТекстЗапроса = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ВариантыОтчетов.Отчет, - | ВариантыОтчетов.ТипОтчета, - | ВариантыОтчетов.Отчет.Имя КАК ИмяОтчета, - | ВариантыОтчетов.КлючВарианта, - | ВариантыОтчетов.ПредопределенныйВариант.КлючЗамеров КАК КлючЗамеров - |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчетов - |ГДЕ - | ВариантыОтчетов.Ссылка = &Ссылка"; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Ссылка", ВариантСсылка); - Запрос.Текст = ТекстЗапроса; - - Выборка = Запрос.Выполнить().Выбрать(); - Если Не Выборка.Следующий() Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Недостаточно прав для открытия варианта ""%1"".'"), Строка(ВариантСсылка)); - КонецЕсли; - ПараметрыОткрытия = Новый Структура("Ссылка, Отчет, ТипОтчета, ИмяОтчета, КлючВарианта, КлючЗамеров"); - ЗаполнитьЗначенияСвойств(ПараметрыОткрытия, Выборка); - ПараметрыОткрытия.Ссылка = ВариантСсылка; - ПараметрыОткрытия.ТипОтчета = ВариантыОтчетовКлиентСервер.ТипОтчетаСтрокой(Выборка.ТипОтчета, Выборка.Отчет); + Если ТипЗнч(ВариантСсылка) = ВариантыОтчетовКлиентСервер.ТипСсылкиДополнительногоОтчета() Тогда + // Поддержка возможности прямого выбора ссылок дополнительных отчетов в рассылках отчетов. + ПараметрыОткрытия.Отчет = ВариантСсылка; + ПараметрыОткрытия.ТипОтчета = "Дополнительный"; + Иначе + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВариантыОтчетов.Отчет, + | ВариантыОтчетов.ТипОтчета, + | ВариантыОтчетов.Отчет.Имя КАК ИмяОтчета, + | ВариантыОтчетов.КлючВарианта, + | ВариантыОтчетов.ПредопределенныйВариант.КлючЗамеров КАК КлючЗамеров + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.Ссылка = &Ссылка"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Ссылка", ВариантСсылка); + Запрос.Текст = ТекстЗапроса; + + Выборка = Запрос.Выполнить().Выбрать(); + Если Не Выборка.Следующий() Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Недостаточно прав для открытия варианта ""%1"".'"), Строка(ВариантСсылка)); + КонецЕсли; + + ЗаполнитьЗначенияСвойств(ПараметрыОткрытия, Выборка); + ПараметрыОткрытия.Ссылка = ВариантСсылка; + ПараметрыОткрытия.ТипОтчета = ВариантыОтчетовКлиентСервер.ТипОтчетаСтрокой(Выборка.ТипОтчета, Выборка.Отчет); + КонецЕсли; ПриПодключенииОтчета(ПараметрыОткрытия); @@ -1655,7 +1842,11 @@ // Формирует отчет с указанными параметрами. // // Параметры: -// Параметры - Структура - Настройки отчета. +// Параметры - Структура - Параметры подключения и формирования отчета. +// * СсылкаВарианта - СправочникСсылка.ВариантыОтчетов - Ссылка варианта отчета. +// * СсылкаОтчета - Произвольный - Ссылка отчета. +// * КлючВарианта - Строка - Имя предопределенного или идентификатор пользовательского варианта отчета. +// * ИдентификаторФормы - Неопределено, УникальныйИдентификатор - Идентификатор формы, из которой подключается отчет. // ПроверятьЗаполнение - Булево - Если Истина то перед формированием будет проведена проверка заполнения. // ПолучатьФлажокПустой - Булево - Если Истина то после формирования будет проведен анализ заполненности. // @@ -1669,93 +1860,30 @@ // <Метод>(). // Функция СформироватьОтчет(Знач Параметры, Знач ПроверятьЗаполнение, Знач ПолучатьФлажокПустой) Экспорт - Результат = Новый Структура("ТекстОшибки, Расшифровка, НастройкиКД, ПользовательскиеНастройкиКД"); + Результат = Новый Структура("ТабличныйДокумент, Расшифровка, + |СсылкаВарианта, СсылкаОтчета, КлючВарианта, + |Объект, Метаданные, ПолноеИмя, + |СхемаКД, АдресСхемы, СхемаМодифицирована, НастройкиФормы, + |НастройкиКД, ВариантМодифицирован, + |ПользовательскиеНастройкиКД, ПользовательскиеНастройкиМодифицированы, + |ТекстОшибки, Успех, ДанныеЕщеОбновляются"); - ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Результат, Параметры, Истина); + Результат.Успех = Ложь; + Результат.ТабличныйДокумент = Новый ТабличныйДокумент; + Результат.ВариантМодифицирован = Ложь; + Результат.ПользовательскиеНастройкиМодифицированы = Ложь; + Результат.ДанныеЕщеОбновляются = Ложь; - Результат.Вставить("Успех", Ложь); - Результат.Вставить("ТабличныйДокумент", Новый ТабличныйДокумент); - Результат.Вставить("ВариантМодифицирован", Ложь); - Результат.Вставить("ПользовательскиеНастройкиМодифицированы", Ложь); - - ПодключитьОтчетОбъект = Не Результат.Свойство("ОтчетОбъект"); - ЗачитатьОтчетСсылка = ПодключитьОтчетОбъект И Не Результат.Свойство("ОтчетСсылка"); - ЗачитатьОбщиеНастройки = Не Результат.Свойство("НастройкиКД"); - ЗачитатьКлючВарианта = Не Результат.Свойство("КлючВарианта"); - - Если ЗачитатьОтчетСсылка Или ЗачитатьОбщиеНастройки Или ЗачитатьКлючВарианта Тогда - ВариантСсылка = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Результат, "ВариантСсылка"); - Если ВариантСсылка = Неопределено Тогда - Если ЗачитатьОтчетСсылка Тогда - Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В методе ""%1"" не указан ни один из параметров ""%2"".'"), - "СформироватьОтчет", - "Параметры.ВариантСсылка, Параметры.ОтчетСсылка, Параметры.ОтчетОбъект"); - Возврат Результат; - КонецЕсли; - Если ЗачитатьКлючВарианта Тогда - Результат.Вставить("КлючВарианта", Неопределено); - КонецЕсли; - Иначе - Считываемые = Новый Массив; - Если ЗачитатьОтчетСсылка Тогда - Считываемые.Добавить("Отчет"); - КонецЕсли; - Если ЗачитатьОбщиеНастройки Тогда - Считываемые.Добавить("Настройки"); - КонецЕсли; - Если ЗачитатьКлючВарианта Тогда - Считываемые.Добавить("КлючВарианта"); - КонецЕсли; - Значения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВариантСсылка, Считываемые); - Если ЗачитатьОтчетСсылка Тогда - Результат.Вставить("ОтчетСсылка", Значения.Отчет); - КонецЕсли; - Если ЗачитатьОбщиеНастройки Тогда - НастройкиКД = Значения.Настройки.Получить(); - Если ТипЗнч(НастройкиКД) = Тип("НастройкиКомпоновкиДанных") Тогда - Результат.Вставить("НастройкиКД", НастройкиКД); - КонецЕсли; - КонецЕсли; - Если ЗачитатьКлючВарианта Тогда - Результат.Вставить("КлючВарианта", Значения.КлючВарианта); - КонецЕсли; - КонецЕсли; + Подключение = ПодключитьОтчетИЗагрузитьНастройки(Параметры); + ЗаполнитьЗначенияСвойств(Результат, Подключение); // , "Объект, Метаданные, ПолноеИмя, КлючВарианта, СхемаКД, АдресСхемы, СхемаМодифицирована, НастройкиФормы" + Если Не Подключение.Успех Тогда + Результат.ТекстОшибки = НСтр("ru = 'Не удалось сформировать отчет:'") + Символы.ПС + Подключение.ТекстОшибки; + Возврат Результат; КонецЕсли; - Если ПодключитьОтчетОбъект Тогда - Подключение = ПодключитьОтчетОбъект(Результат.ОтчетСсылка, Ложь); - Результат.Вставить("Подключение", Подключение); - Если Подключение.Успех Тогда - Результат.Вставить("ОтчетОбъект", Подключение.Объект); - Иначе - Результат.ТекстОшибки = НСтр("ru = 'Не удалось сформировать отчет:'") + Символы.ПС + Подключение.ТекстОшибки; - Возврат Результат; - КонецЕсли; - КонецЕсли; - - ОтчетОбъект = Результат.ОтчетОбъект; + ОтчетОбъект = Результат.Объект; КомпоновщикНастроекКД = ОтчетОбъект.КомпоновщикНастроек; - // При загрузке настроек: 1 проверка на тип, 2 проверка на адрес (не на значение). - ФиксированныеНастройкиКД = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Результат, "ФиксированныеНастройкиКД"); - Если ТипЗнч(ФиксированныеНастройкиКД) = Тип("НастройкиКомпоновкиДанных") - И КомпоновщикНастроекКД.ФиксированныеНастройки <> ФиксированныеНастройкиКД Тогда - КомпоновщикНастроекКД.ЗагрузитьФиксированныеНастройки(ФиксированныеНастройкиКД); - КонецЕсли; - - НастройкиКД = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Результат, "НастройкиКД"); - Если ТипЗнч(НастройкиКД) = Тип("НастройкиКомпоновкиДанных") - И КомпоновщикНастроекКД.Настройки <> НастройкиКД Тогда - КомпоновщикНастроекКД.ЗагрузитьНастройки(НастройкиКД); - КонецЕсли; - - ПользовательскиеНастройкиКД = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Результат, "ПользовательскиеНастройкиКД"); - Если ТипЗнч(ПользовательскиеНастройкиКД) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") - И КомпоновщикНастроекКД.ПользовательскиеНастройки <> ПользовательскиеНастройкиКД Тогда - КомпоновщикНастроекКД.ЗагрузитьПользовательскиеНастройки(ПользовательскиеНастройкиКД); - КонецЕсли; - ДопСвойства = КомпоновщикНастроекКД.ПользовательскиеНастройки.ДополнительныеСвойства; ДопСвойства.Вставить("КлючВарианта", Результат.КлючВарианта); @@ -1775,10 +1903,27 @@ КонецЕсли; КонецЕсли; - ИмяКлючевойОперации = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ИмяКлючевойОперации", ""); - КомментарийКлючевойОперации = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "КомментарийКлючевойОперации", ""); - ВыполнятьЗамеры = ИмяКлючевойОперации <> "" И ВыполнятьЗамеры(); + // Проверка корректности данных, по которым формируется отчет. + + ИспользуемыеТаблицы = Новый Массив; + ИспользуемыеТаблицы.Добавить(Результат.ПолноеИмя); + Если Результат.НастройкиФормы.События.ПриОпределенииИспользуемыхТаблиц Тогда + ОтчетОбъект.ПриОпределенииИспользуемыхТаблиц(Результат.КлючВарианта, ИспользуемыеТаблицы); + КонецЕсли; + Для Каждого ПолноеИмя Из ИспользуемыеТаблицы Цикл + Проверка = ОбновлениеИнформационнойБазы.ОбъектОбработан(ПолноеИмя); + Если Не Проверка.Обработан Тогда + Результат.ДанныеЕщеОбновляются = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + // Формирование и оценка скорости. + + ИмяКлючевойОперации = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ИмяКлючевойОперации"); + ВыполнятьЗамеры = ТипЗнч(ИмяКлючевойОперации) = Тип("Строка") И Не ПустаяСтрока(ИмяКлючевойОперации) И ВыполнятьЗамеры(); Если ВыполнятьЗамеры Тогда + КомментарийКлючевойОперации = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "КомментарийКлючевойОперации"); ВремяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах(); КонецЕсли; @@ -1792,15 +1937,16 @@ КомментарийКлючевойОперации); КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДопСвойства, "ВариантМодифицирован") = Истина Тогда + Модифицирован = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДопСвойства, "ВариантМодифицирован"); + Если Модифицирован = Истина Тогда Результат.ВариантМодифицирован = Истина; - Результат.Вставить("НастройкиКД", КомпоновщикНастроекКД.Настройки); + Результат.НастройкиКД = КомпоновщикНастроекКД.Настройки; КонецЕсли; - Если Результат.ВариантМодифицирован - Или ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДопСвойства, "ПользовательскиеНастройкиМодифицированы") = Истина Тогда + Модифицированы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДопСвойства, "ПользовательскиеНастройкиМодифицированы"); + Если Результат.ВариантМодифицирован Или Модифицированы = Истина Тогда Результат.ПользовательскиеНастройкиМодифицированы = Истина; - Результат.Вставить("ПользовательскиеНастройкиКД", КомпоновщикНастроекКД.ПользовательскиеНастройки); + Результат.ПользовательскиеНастройкиКД = КомпоновщикНастроекКД.ПользовательскиеНастройки; КонецЕсли; Если ПолучатьФлажокПустой Тогда @@ -1822,29 +1968,336 @@ Возврат Результат; КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Для отчета по внедрению. + +// Формирует дерево настроек и размещения предопределенных вариантов отчетов. +// Только для отчетов, подключенных к подсистеме. +// +// Возвращаемое значение: +// ДеревоЗначений - Настройки предопределенных вариантов отчетов, подключенных к подсистеме. +// +// Реквизиты для изменения: +// * Включен - Булево - Если Ложь, то вариант отчета не регистрируется в подсистеме. +// * ВидимостьПоУмолчанию - Булево - Если Ложь, то вариант отчета по умолчанию скрыт в панели отчетов. +// * Наименование - Строка - Наименование варианта отчета. +// * Описание - Строка - Информация о варианте отчета. +// * Размещение - Соответствие - Настройки размещения варианта отчета в разделах. +// ** Ключ - ОбъектМетаданных - Подсистема, в которой размещается отчет или вариант отчета. +// ** Значение - Строка - Настройки размещения в подсистеме (группе). +// *** "" - Вывод отчета в подсистеме без специального выделение. +// *** "Важный" - Вывод отчета в подсистеме с выделением жирным шрифтом. +// *** "СмТакже" - Вывод отчета в группе "См. также". +// * ФункциональныеОпции - Массив из Строка - Имена функциональных опций варианта отчета. +// * НастройкиДляПоиска - Структура - Дополнительные настройки для поиска этого варианта отчета. +// Эти настройки необходимо задавать только если СКД не используется или используется не в полном объеме. +// Например, СКД может использоваться только для параметризации и получения данных, +// а вывод выполняться в фиксированный макет табличного документа. +// ** НаименованияПолей - Строка - Имена полей варианта отчета. +// ** НаименованияПараметровИОтборов - Строка - Имена настроек варианта отчета. +// ** КлючевыеСлова - Строка - Дополнительная терминология (в т.ч. специализированная или устаревшая). +// Разделитель терминов: Символы.ПС. +// ** ИменаМакетов - Строка - Используется вместо НаименованияПолей. +// Имена макетов табличных или текстовых документов, +// из которых требуется извлечь информацию о наименованиях полей. +// Имена перечисляются через запятую. +// К сожалению, в макетах отсутствует информация о связях полей и их представлений (которая есть в СКД), +// поэтому для более точной работы механизма поиска рекомендуется заполнять НаименованияПолей, а не +// ИменаМакетов. +// * ФорматНастроекСКД - Булево - Отчет использует типовой формат хранения настроек на механике СКД, +// а его основные формы поддерживают стандартную схему взаимодействия между формами (параметры и тип возвращаемого значения). +// Если Ложь, тогда для отчета отключаются проверки консистентности и некоторые механизмы, которые рассчитывают на типовой формат. +// * ОпределитьНастройкиФормы - Булево - Отчет имеет программный интерфейс для тесной интеграции с формой отчета, +// в том числе может переопределять некоторые настройки формы и подписываться на ее события. +// Если Истина и отчет подключен к общей форме ФормаОтчета, +// тогда в модуле объекта отчета следует определить процедуру по шаблону: +// +// // Настройки общей формы отчета подсистемы "Варианты отчетов". +// // +// // Параметры: +// // Форма - УправляемаяФорма, Неопределено - Форма отчета или форма настроек отчета. +// // Неопределено когда вызов без контекста. +// // КлючВарианта - Строка, Неопределено - Имя предопределенного +// // или уникальный идентификатор пользовательского варианта отчета. +// // Неопределено когда вызов без контекста. +// // Настройки - Структура - см. возвращаемое значение +// // ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(). +// // +// Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт +// // Код процедуры. +// КонецПроцедуры +// +// Служебные реквизиты (только для чтения): +// * Отчет - <см. Справочники.ВариантыОтчетов.Реквизиты.Отчет> - Полное имя или ссылка на отчет. +// * Метаданные - ОбъектМетаданных: Отчет - Метаданные отчета. +// * КлючВарианта - Строка - Имя варианта отчета. +// * ОписаниеПолучено - Булево - Флажок что описание строки уже получено. +// Описание получается методом ОписаниеВарианта(). +// * СистемнаяИнформация - Структура - Другая служебная информация. +// +Функция ДеревоПредопределенных(ФильтрПоТипуОтчетов = "Внутренний") Экспорт + РеквизитыСправочника = Метаданные.Справочники.ВариантыОтчетов.Реквизиты; + + ДеревоВариантов = Новый ДеревоЗначений; + ДеревоВариантов.Колонки.Добавить("Отчет", РеквизитыСправочника.Отчет.Тип); + ДеревоВариантов.Колонки.Добавить("Метаданные", Новый ОписаниеТипов("ОбъектМетаданных")); + ДеревоВариантов.Колонки.Добавить("Объект"); + ДеревоВариантов.Колонки.Добавить("ИспользуетСКД", Новый ОписаниеТипов("Булево")); + ДеревоВариантов.Колонки.Добавить("КлючВарианта", РеквизитыСправочника.КлючВарианта.Тип); + ДеревоВариантов.Колонки.Добавить("ОписаниеПолучено", Новый ОписаниеТипов("Булево")); + ДеревоВариантов.Колонки.Добавить("Включен", Новый ОписаниеТипов("Булево")); + ДеревоВариантов.Колонки.Добавить("ВидимостьПоУмолчанию", Новый ОписаниеТипов("Булево")); + ДеревоВариантов.Колонки.Добавить("Наименование", ОписаниеТиповСтрока()); + ДеревоВариантов.Колонки.Добавить("Описание", ОписаниеТиповСтрока()); + ДеревоВариантов.Колонки.Добавить("Размещение", Новый ОписаниеТипов("Соответствие")); + ДеревоВариантов.Колонки.Добавить("НастройкиДляПоиска", Новый ОписаниеТипов("Структура")); + ДеревоВариантов.Колонки.Добавить("СистемнаяИнформация", Новый ОписаниеТипов("Структура")); + ДеревоВариантов.Колонки.Добавить("Тип", ОписаниеТиповСтрока()); + ДеревоВариантов.Колонки.Добавить("ЭтоВариант", Новый ОписаниеТипов("Булево")); + ДеревоВариантов.Колонки.Добавить("ФункциональныеОпции", Новый ОписаниеТипов("Массив")); + ДеревоВариантов.Колонки.Добавить("ГруппироватьПоОтчету", Новый ОписаниеТипов("Булево")); + ДеревоВариантов.Колонки.Добавить("КлючЗамеров", Новый ОписаниеТипов("Строка")); + ДеревоВариантов.Колонки.Добавить("ОсновнойВариант"); + ДеревоВариантов.Колонки.Добавить("ФорматНастроекСКД", Новый ОписаниеТипов("Булево")); + ДеревоВариантов.Колонки.Добавить("ОпределитьНастройкиФормы", Новый ОписаниеТипов("Булево")); + + ВыводитьОтчетыВместоВариантов = ГлобальныеНастройки().ВыводитьОтчетыВместоВариантов; + РазрешеноИндексирование = РазрешеноИндексированиеНеразделенныхДанных(); + + ПодсистемыОтчетов = РазмещениеОтчетовВПодсистемах(); + КэшФлажкаХранилища = Неопределено; + КэшФлажкаОсновнойФормы = Неопределено; + КэшФлажкаФормыНастроек = Неопределено; + Для Каждого ОтчетМетаданные Из Метаданные.Отчеты Цикл + Если Не ОтчетПодключенКХранилищу(ОтчетМетаданные, КэшФлажкаХранилища) Тогда + Продолжить; + КонецЕсли; + + ОтчетСсылка = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОтчетМетаданные); + ОтчетТип = ВариантыОтчетовКлиентСервер.ТипОтчетаСтрокой(Неопределено, ОтчетСсылка); + Если ФильтрПоТипуОтчетов <> Неопределено И ФильтрПоТипуОтчетов <> ОтчетТип Тогда + Продолжить; + КонецЕсли; + + ЕстьРеквизиты = (ОтчетМетаданные.Реквизиты.Количество() > 0); + + // Настройки. + СтрокаОтчет = ДеревоВариантов.Строки.Добавить(); + СтрокаОтчет.Отчет = ОтчетСсылка; + СтрокаОтчет.Метаданные = ОтчетМетаданные; + СтрокаОтчет.Включен = Истина; + СтрокаОтчет.ВидимостьПоУмолчанию = Истина; + СтрокаОтчет.Описание = ОтчетМетаданные.Пояснение; + СтрокаОтчет.Наименование = ОтчетМетаданные.Представление(); + СтрокаОтчет.ОписаниеПолучено = Истина; + СтрокаОтчет.Тип = ОтчетТип; + СтрокаОтчет.ЭтоВариант = Ложь; + СтрокаОтчет.ГруппироватьПоОтчету = ВыводитьОтчетыВместоВариантов; + СтрокаОтчет.ИспользуетСКД = (ОтчетМетаданные.ОсновнаяСхемаКомпоновкиДанных <> Неопределено); + СтрокаОтчет.ФорматНастроекСКД = СтрокаОтчет.ИспользуетСКД И Не ЕстьРеквизиты; + + // Подсистемы. + Найденные = ПодсистемыОтчетов.НайтиСтроки(Новый Структура("ОтчетМетаданные", ОтчетМетаданные)); + Для Каждого СтрокаПодсистема Из Найденные Цикл + СтрокаОтчет.Размещение.Вставить(СтрокаПодсистема.ПодсистемаМетаданные, ""); + КонецЦикла; + + // Поиск. + СтрокаОтчет.НастройкиДляПоиска = Новый Структура("НаименованияПолей, НаименованияПараметровИОтборов, КлючевыеСлова, ИменаМакетов"); + + // Предопределенные варианты. + Если СтрокаОтчет.ИспользуетСКД Тогда + ОтчетМенеджер = Отчеты[ОтчетМетаданные.Имя]; + СхемаКД = Неопределено; + ВариантыНастроек = Неопределено; + Попытка + СтрокаОтчет.Объект = ОтчетМенеджер.Создать(); + СхемаКД = СтрокаОтчет.Объект.СхемаКомпоновкиДанных; + Исключение + ТекстОшибки = НСтр("ru = 'Не удалось прочитать схему отчета ""%1"":'"); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ОтчетМетаданные.Имя); + ТекстОшибки = ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ПредупреждениеПоВарианту(Неопределено, ТекстОшибки); + КонецПопытки; + // Чтение настроек вариантов отчета из схемы. + Если СхемаКД <> Неопределено Тогда + Попытка + ВариантыНастроек = СхемаКД.ВариантыНастроек; + Исключение + ТекстОшибки = НСтр("ru = 'Не удалось прочитать список вариантов отчета ""%1"" из схемы:'"); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ОтчетМетаданные.Имя); + ТекстОшибки = ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ПредупреждениеПоВарианту(Неопределено, ТекстОшибки); + КонецПопытки; + КонецЕсли; + // Чтение настроек вариантов отчета из модуля менеджера (если не получилось из схемы). + Если ВариантыНастроек = Неопределено Тогда + Попытка + ВариантыНастроек = ОтчетМенеджер.ВариантыНастроек(); + Исключение + ТекстОшибки = НСтр("ru = 'Не удалось прочитать список вариантов отчета ""%1"" из модуля менеджера:'"); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ОтчетМетаданные.Имя); + ТекстОшибки = ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ОшибкаПоВарианту(Неопределено, ТекстОшибки); + КонецПопытки; + КонецЕсли; + // Регистрация найденных вариантов. + Если ВариантыНастроек <> Неопределено Тогда + Для Каждого ВариантНастроекКД Из ВариантыНастроек Цикл + Вариант = СтрокаОтчет.Строки.Добавить(); + Вариант.Отчет = СтрокаОтчет.Отчет; + Вариант.КлючВарианта = ВариантНастроекКД.Имя; + Вариант.Наименование = ВариантНастроекКД.Представление; + Вариант.Тип = ОтчетТип; + Вариант.ЭтоВариант = Истина; + Если СтрокаОтчет.ОсновнойВариант = Неопределено Тогда + СтрокаОтчет.ОсновнойВариант = Вариант; + КонецЕсли; + Если РазрешеноИндексирование И ТипЗнч(ВариантНастроекКД) = Тип("ВариантНастроекКомпоновкиДанных") Тогда + Попытка + Вариант.СистемнаяИнформация.Вставить("НастройкиКД", ВариантНастроекКД.Настройки); + Исключение + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось прочитать настройки варианта ""%1"" отчета ""%2"":'"), + Вариант.КлючВарианта, + ОтчетМетаданные.Имя) + + Символы.ПС + + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ПредупреждениеПоВарианту(Неопределено, ТекстОшибки); + КонецПопытки; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; + + // Сам отчет. + Если СтрокаОтчет.ОсновнойВариант = Неопределено Тогда + Вариант = СтрокаОтчет.Строки.Добавить(); + ЗаполнитьЗначенияСвойств(Вариант, СтрокаОтчет, "Отчет, Наименование"); + Вариант.КлючВарианта = ""; + Вариант.ЭтоВариант = Истина; + СтрокаОтчет.ОсновнойВариант = Вариант; + КонецЕсли; + + КонецЦикла; + + // Механизмы расширения. + Если ФильтрПоТипуОтчетов = Неопределено Или ФильтрПоТипуОтчетов = "Внутренний" Тогда + НастроитьОтчетВМодулеМенеджера(ДеревоВариантов, Метаданные.Отчеты.УниверсальныйОтчет); + // Подключаемые обработчики подсистем БСП. + Обработчики = ОбщегоНазначения.ОбработчикиСлужебногоСобытия("СтандартныеПодсистемы.ВариантыОтчетов\ПриНастройкеВариантовОтчетов"); + Для Каждого Обработчик Из Обработчики Цикл + Обработчик.Модуль.ПриНастройкеВариантовОтчетов(ДеревоВариантов); + КонецЦикла; + // Переопределяемый модуль конфигурации. + ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(ДеревоВариантов); + КонецЕсли; + + // Определение основных вариантов. + Для Каждого СтрокаОтчет Из ДеревоВариантов.Строки Цикл + Если СтрокаОтчет.ГруппироватьПоОтчету = Истина Тогда + Если СтрокаОтчет.ОсновнойВариант = Неопределено + Или Не СтрокаОтчет.ОсновнойВариант.Включен Тогда + Для Каждого Вариант Из СтрокаОтчет.Строки Цикл + ЗаполнитьОписаниеСтрокиВарианта(Вариант, СтрокаОтчет); + Если Вариант.Включен Тогда + СтрокаОтчет.ОсновнойВариант = Вариант; + Вариант.ВидимостьПоУмолчанию = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Иначе + СтрокаОтчет.ОсновнойВариант = Неопределено; + КонецЕсли; + КонецЦикла; + + Возврат ДеревоВариантов; +КонецФункции + +// Определяет способ внедрения подсистемы. +Функция ПоУмолчаниюВсеПодключеныКХранилищу() + Возврат (Метаданные.ХранилищеВариантовОтчетов <> Неопределено И Метаданные.ХранилищеВариантовОтчетов.Имя = "ХранилищеВариантовОтчетов"); +КонецФункции + +// Определяет подключен ли отчет к подсистеме. +Функция ОтчетПодключенКХранилищу(ОтчетМетаданные, ПоУмолчаниюВсеПодключены = Неопределено) Экспорт + ХранилищеМетаданные = ОтчетМетаданные.ХранилищеВариантов; + Если ХранилищеМетаданные = Неопределено Тогда + Если ПоУмолчаниюВсеПодключены = Неопределено Тогда + ПоУмолчаниюВсеПодключены = ПоУмолчаниюВсеПодключеныКХранилищу(); + КонецЕсли; + ОтчетПодключен = ПоУмолчаниюВсеПодключены; + Иначе + ОтчетПодключен = (ХранилищеМетаданные = Метаданные.ХранилищаНастроек.ХранилищеВариантовОтчетов); + КонецЕсли; + Возврат ОтчетПодключен; +КонецФункции + +// Определяет способ подключения общей формы отчета. +Функция ПоУмолчаниюВсеПодключеныКОсновнойФорме() + ФормаМетаданные = Метаданные.ОсновнаяФормаОтчета; + Возврат (ФормаМетаданные <> Неопределено И ФормаМетаданные = Метаданные.ОбщиеФормы.ФормаОтчета); +КонецФункции + +// Определяет способ подключения общей формы отчета. +Функция ОтчетПодключенКОсновнойФорме(ОтчетМетаданные, ПоУмолчаниюВсеПодключены = Неопределено) Экспорт + ФормаМетаданные = ОтчетМетаданные.ОсновнаяФорма; + Если ФормаМетаданные = Неопределено Тогда + Если ПоУмолчаниюВсеПодключены = Неопределено Тогда + ПоУмолчаниюВсеПодключены = ПоУмолчаниюВсеПодключеныКОсновнойФорме(); + КонецЕсли; + ОтчетПодключен = ПоУмолчаниюВсеПодключены; + Иначе + ОтчетПодключен = (ФормаМетаданные = Метаданные.ОбщиеФормы.ФормаОтчета); + КонецЕсли; + Возврат ОтчетПодключен; +КонецФункции + +// Определяет способ подключения общей формы отчета. +Функция ПоУмолчаниюВсеПодключеныКФормеНастроек() + ФормаМетаданные = Метаданные.ОсновнаяФормаНастроекОтчета; + Возврат (ФормаМетаданные <> Неопределено И ФормаМетаданные = Метаданные.ОбщиеФормы.ФормаНастроекОтчета); +КонецФункции + +// Определяет способ подключения общей формы отчета. +Функция ОтчетПодключенКФормеНастроек(ОтчетМетаданные, ПоУмолчаниюВсеПодключены = Неопределено) Экспорт + ФормаМетаданные = ОтчетМетаданные.ОсновнаяФормаНастроек; + Если ФормаМетаданные = Неопределено Тогда + Если ПоУмолчаниюВсеПодключены = Неопределено Тогда + ПоУмолчаниюВсеПодключены = ПоУмолчаниюВсеПодключеныКФормеНастроек(); + КонецЕсли; + ОтчетПодключен = ПоУмолчаниюВсеПодключены; + Иначе + ОтчетПодключен = (ФормаМетаданные = Метаданные.ОбщиеФормы.ФормаНастроекОтчета); + КонецЕсли; + Возврат ОтчетПодключен; +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции // Формирует отчет с указанными настройками, используется в фоновых заданиях. Процедура СформироватьОтчетВФоне(Параметры, АдресХранилища) Экспорт - Результат = Новый Структура("ТекстОшибки, ТабличныйДокумент, Расшифровка"); - Результат.Вставить("Успех", Ложь); - Результат.Вставить("ВариантМодифицирован", Ложь); - Результат.Вставить("ПользовательскиеНастройкиМодифицированы", Ложь); - Формирование = СформироватьОтчет(Параметры, Ложь, Ложь); + + Результат = Новый Структура("ТабличныйДокумент, Расшифровка, + |Успех, ТекстОшибки, ДанныеЕщеОбновляются, + |ВариантМодифицирован, ПользовательскиеНастройкиМодифицированы"); ЗаполнитьЗначенияСвойств(Результат, Формирование); - Если Формирование.ВариантМодифицирован Тогда + + Если Результат.ВариантМодифицирован Тогда Результат.Вставить("НастройкиКД", Формирование.НастройкиКД); КонецЕсли; - Если Формирование.ПользовательскиеНастройкиМодифицированы Тогда + Если Результат.ПользовательскиеНастройкиМодифицированы Тогда Результат.Вставить("ПользовательскиеНастройкиКД", Формирование.ПользовательскиеНастройкиКД); КонецЕсли; ПоместитьВоВременноеХранилище(Результат, АдресХранилища); КонецПроцедуры +// Определяет что отчет пустой. Функция ОтчетПустой(ОтчетОбъект) // Объект для создания макета компоновки данных. @@ -1935,327 +2388,6 @@ КонецФункции -// Формирует дерево настроек и размещения предопределенных вариантов отчетов. -// Только для отчетов, подключенных к подсистеме. -// -// Возвращаемое значение: -// ДеревоВариантов - ДеревоЗначений - Настройки предопределенных вариантов отчетов, подключенных к подсистеме. -// -// Реквизиты для изменения: -// * Включен - Булево - Если Ложь, то вариант отчета не регистрируется в подсистеме. -// * ВидимостьПоУмолчанию - Булево - Если Ложь, то вариант отчета по умолчанию скрыт в панели отчетов. -// * Наименование - Строка - Наименование варианта отчета. -// * Описание - Строка - Информация о варианте отчета. -// * Размещение - Соответствие - Настройки размещения варианта отчета в разделах. -// ** Ключ - ОбъектМетаданных - Подсистема, в которой размещается отчет или вариант отчета. -// ** Значение - Строка - Настройки размещения в подсистеме (группе). -// *** "" - Вывод отчета в подсистеме без специального выделение. -// *** "Важный" - Вывод отчета в подсистеме с выделением жирным шрифтом. -// *** "СмТакже" - Вывод отчета в группе "См. также". -// * ФункциональныеОпции - Массив из Строка - Имена функциональных опций варианта отчета. -// * НастройкиДляПоиска - Структура - Дополнительные настройки для поиска этого варианта отчета. -// ** НаименованияПолей - Строка - Имена полей варианта отчета. -// ** НаименованияПараметровИОтборов - Строка - Имена настроек варианта отчета. -// ** ИменаМакетов - Строка - Используется вместо НаименованияПолей. -// Имена макетов табличных или текстовых документов, -// из которых требуется извлечь информацию о наименованиях полей. -// Имена перечисляются через запятую. -// К сожалению, в макетах отсутствует информация о связях полей и их представлений (которая есть в СКД), -// поэтому для более точной работы механизма поиска рекомендуется заполнять НаименованияПолей, а не -// ИменаМакетов. -// * ФорматНастроекСКД - Булево - Отчет использует типовой формат хранения настроек на механике СКД, -// а его основные формы поддерживают стандартную схему взаимодействия между формами (параметры и тип возвращаемого значения). -// Если Ложь, тогда для отчета отключаются проверки консистентности и некоторые механизмы, которые рассчитывают на типовой формат. -// * ОпределитьНастройкиФормы - Булево - Отчет имеет программный интерфейс для тесной интеграции с формой отчета, -// в том числе может переопределять некоторые настройки формы и подписываться на ее события. -// Если Истина и отчет подключен к общей форме ФормаОтчета, -// тогда в модуле объекта отчета следует определить процедуру по шаблону: -// -// // Настройки общей формы отчета подсистемы "Варианты отчетов". -// // -// // Параметры: -// // Форма - УправляемаяФорма, Неопределено - Форма отчета или форма настроек отчета. -// // Неопределено когда вызов без контекста. -// // КлючВарианта - Строка, Неопределено - Имя предопределенного -// // или уникальный идентификатор пользовательского варианта отчета. -// // Неопределено когда вызов без контекста. -// // Настройки - Структура - см. возвращаемое значение -// // ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(). -// // -// Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт -// // Код процедуры. -// КонецПроцедуры -// -// Служебные реквизиты (только для чтения): -// * Отчет - <см. Справочники.ВариантыОтчетов.Реквизиты.Отчет> - Полное имя или ссылка на отчет. -// * Метаданные - ОбъектМетаданных: Отчет - Метаданные отчета. -// * КлючВарианта - Строка - Имя варианта отчета. -// * ОписаниеПолучено - Булево - Флажок что описание строки уже получено. -// Описание получается методом ОписаниеВарианта(). -// * СистемнаяИнформация - Структура - Другая служебная информация. -// -Функция ДеревоНастроекВариантовОтчетовКонфигурации() Экспорт - Возврат ДеревоПредопределенных("Внутренний"); -КонецФункции - -// Формирует дерево настроек и размещения предопределенных вариантов отчетов. -// Только для отчетов, подключенных к подсистеме. -// -// Параметры: -// ФильтрПоТипуОтчетов - Неопределено, Строка - Необязательный. Типы отчетов, для которых требуется сформировать дерево настроек. -// * Неопределено - Сформировать информацию по отчетам конфигурации и подключенных расширений. -// * "Внутренний" - Значение по умолчанию. Сформировать информацию по отчетам конфигурации. -// * "Расширение" - Сформировать информацию по отчетам подключенных расширений. -// -// Возвращаемое значение: -// ДеревоВариантов - ДеревоЗначений - Настройки предопределенных вариантов отчетов, подключенных к подсистеме. -// -// Реквизиты для изменения: -// * Включен - Булево - Если Ложь, то вариант отчета не регистрируется в подсистеме. -// * ВидимостьПоУмолчанию - Булево - Если Ложь, то вариант отчета по умолчанию скрыт в панели отчетов. -// * Наименование - Строка - Наименование варианта отчета. -// * Описание - Строка - Информация о варианте отчета. -// * Размещение - Соответствие - Настройки размещения варианта отчета в разделах. -// ** Ключ - ОбъектМетаданных - Подсистема, в которой размещается отчет или вариант отчета. -// ** Значение - Строка - Настройки размещения в подсистеме (группе). -// *** "" - Вывод отчета в подсистеме без специального выделение. -// *** "Важный" - Вывод отчета в подсистеме с выделением жирным шрифтом. -// *** "СмТакже" - Вывод отчета в группе "См. также". -// * ФункциональныеОпции - Массив из Строка - Имена функциональных опций варианта отчета. -// * НастройкиДляПоиска - Структура - Дополнительные настройки для поиска этого варианта отчета. -// ** НаименованияПолей - Строка - Имена полей варианта отчета. -// ** НаименованияПараметровИОтборов - Строка - Имена настроек варианта отчета. -// ** ИменаМакетов - Строка - Используется вместо НаименованияПолей. -// Имена макетов табличных или текстовых документов, -// из которых требуется извлечь информацию о наименованиях полей. -// Имена перечисляются через запятую. -// К сожалению, в макетах отсутствует информация о связях полей и их представлений (которая есть в СКД), -// поэтому для более точной работы механизма поиска рекомендуется заполнять НаименованияПолей, а не -// ИменаМакетов. -// * ФорматНастроекСКД - Булево - Отчет использует типовой формат хранения настроек на механике СКД, -// а его основные формы поддерживают стандартную схему взаимодействия между формами (параметры и тип возвращаемого значения). -// Если Ложь, тогда для отчета отключаются проверки консистентности и некоторые механизмы, которые рассчитывают на типовой формат. -// * ОпределитьНастройкиФормы - Булево - Отчет имеет программный интерфейс для тесной интеграции с формой отчета, -// в том числе может переопределять некоторые настройки формы и подписываться на ее события. -// Если Истина и отчет подключен к общей форме ФормаОтчета, -// тогда в модуле объекта отчета следует определить процедуру по шаблону: -// -// // Настройки общей формы отчета подсистемы "Варианты отчетов". -// // -// // Параметры: -// // Форма - УправляемаяФорма, Неопределено - Форма отчета или форма настроек отчета. -// // Неопределено когда вызов без контекста. -// // КлючВарианта - Строка, Неопределено - Имя предопределенного -// // или уникальный идентификатор пользовательского варианта отчета. -// // Неопределено когда вызов без контекста. -// // Настройки - Структура - см. возвращаемое значение -// // ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(). -// // -// Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт -// // Код процедуры. -// КонецПроцедуры -// -// Служебные реквизиты (только для чтения): -// * Отчет - <см. Справочники.ВариантыОтчетов.Реквизиты.Отчет> - Полное имя или ссылка на отчет. -// * Метаданные - ОбъектМетаданных: Отчет - Метаданные отчета. -// * КлючВарианта - Строка - Имя варианта отчета. -// * ОписаниеПолучено - Булево - Флажок что описание строки уже получено. -// Описание получается методом ОписаниеВарианта(). -// * СистемнаяИнформация - Структура - Другая служебная информация. -// -Функция ДеревоПредопределенных(ФильтрПоТипуОтчетов = "Внутренний") Экспорт - РеквизитыСправочника = Метаданные.Справочники.ВариантыОтчетов.Реквизиты; - - ДеревоВариантов = Новый ДеревоЗначений; - ДеревоВариантов.Колонки.Добавить("Отчет", РеквизитыСправочника.Отчет.Тип); - ДеревоВариантов.Колонки.Добавить("Метаданные", Новый ОписаниеТипов("ОбъектМетаданных")); - ДеревоВариантов.Колонки.Добавить("КлючВарианта", РеквизитыСправочника.КлючВарианта.Тип); - ДеревоВариантов.Колонки.Добавить("ОписаниеПолучено", Новый ОписаниеТипов("Булево")); - ДеревоВариантов.Колонки.Добавить("Включен", Новый ОписаниеТипов("Булево")); - ДеревоВариантов.Колонки.Добавить("ВидимостьПоУмолчанию", Новый ОписаниеТипов("Булево")); - ДеревоВариантов.Колонки.Добавить("Наименование", ОписаниеТиповСтрока()); - ДеревоВариантов.Колонки.Добавить("Описание", ОписаниеТиповСтрока()); - ДеревоВариантов.Колонки.Добавить("Размещение", Новый ОписаниеТипов("Соответствие")); - ДеревоВариантов.Колонки.Добавить("НастройкиДляПоиска", Новый ОписаниеТипов("Структура")); - ДеревоВариантов.Колонки.Добавить("СистемнаяИнформация", Новый ОписаниеТипов("Структура")); - ДеревоВариантов.Колонки.Добавить("Тип", ОписаниеТиповСтрока()); - ДеревоВариантов.Колонки.Добавить("ЭтоВариант", Новый ОписаниеТипов("Булево")); - ДеревоВариантов.Колонки.Добавить("ФункциональныеОпции", Новый ОписаниеТипов("Массив")); - ДеревоВариантов.Колонки.Добавить("ГруппироватьПоОтчету", Новый ОписаниеТипов("Булево")); - ДеревоВариантов.Колонки.Добавить("КлючЗамеров", Новый ОписаниеТипов("Строка")); - ДеревоВариантов.Колонки.Добавить("ОсновнойВариант"); - ДеревоВариантов.Колонки.Добавить("ФорматНастроекСКД", Новый ОписаниеТипов("Булево")); - ДеревоВариантов.Колонки.Добавить("ОпределитьНастройкиФормы", Новый ОписаниеТипов("Булево")); - - ВыводитьОтчетыВместоВариантов = ГлобальныеНастройки().ВыводитьОтчетыВместоВариантов; - РазрешеноИндексирование = РазрешеноИндексированиеНеразделенныхДанных(); - - ПодсистемыОтчетов = РазмещениеОтчетовВПодсистемах(); - КэшФлажкаХранилища = Неопределено; - КэшФлажкаОсновнойФормы = Неопределено; - КэшФлажкаФормыНастроек = Неопределено; - Для Каждого ОтчетМетаданные Из Метаданные.Отчеты Цикл - Если Не ОтчетПодключенКХранилищу(ОтчетМетаданные, КэшФлажкаХранилища) Тогда - Продолжить; - КонецЕсли; - - ОтчетСсылка = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОтчетМетаданные); - ОтчетТип = ВариантыОтчетовКлиентСервер.ТипОтчетаСтрокой(Неопределено, ОтчетСсылка); - Если ФильтрПоТипуОтчетов <> Неопределено И ФильтрПоТипуОтчетов <> ОтчетТип Тогда - Продолжить; - КонецЕсли; - - ПостроенНаСКД = (ОтчетМетаданные.ОсновнаяСхемаКомпоновкиДанных <> Неопределено); - ЕстьРеквизиты = (ОтчетМетаданные.Реквизиты.Количество() > 0); - - // Настройки. - СтрокаОтчет = ДеревоВариантов.Строки.Добавить(); - СтрокаОтчет.Отчет = ОтчетСсылка; - СтрокаОтчет.Метаданные = ОтчетМетаданные; - СтрокаОтчет.Включен = Истина; - СтрокаОтчет.ВидимостьПоУмолчанию = Истина; - СтрокаОтчет.Описание = ОтчетМетаданные.Пояснение; - СтрокаОтчет.Наименование = ОтчетМетаданные.Представление(); - СтрокаОтчет.ОписаниеПолучено = Истина; - СтрокаОтчет.Тип = ОтчетТип; - СтрокаОтчет.ЭтоВариант = Ложь; - СтрокаОтчет.ГруппироватьПоОтчету = ВыводитьОтчетыВместоВариантов; - СтрокаОтчет.ЭтоВариант = Ложь; - СтрокаОтчет.ФорматНастроекСКД = ПостроенНаСКД И Не ЕстьРеквизиты; - СтрокаОтчет.СистемнаяИнформация.Вставить("ПостроенНаСКД", ПостроенНаСКД); - - // Подсистемы. - Найденные = ПодсистемыОтчетов.НайтиСтроки(Новый Структура("ОтчетМетаданные", ОтчетМетаданные)); - Для Каждого СтрокаПодсистема Из Найденные Цикл - СтрокаОтчет.Размещение.Вставить(СтрокаПодсистема.ПодсистемаМетаданные, ""); - КонецЦикла; - - // Поиск. - СтрокаОтчет.НастройкиДляПоиска = Новый Структура("НаименованияПолей, НаименованияПараметровИОтборов, ИменаМакетов"); - - // Предопределенные варианты. - Если СтрокаОтчет.СистемнаяИнформация.ПостроенНаСКД Тогда - ОтчетМенеджер = Отчеты[ОтчетМетаданные.Имя]; - СхемаКД = Неопределено; - ВариантыНастроек = Неопределено; - Попытка - ОтчетОбъект = ОтчетМенеджер.Создать(); - СтрокаОтчет.СистемнаяИнформация.Вставить("ОтчетОбъект", ОтчетОбъект); - СхемаКД = ОтчетОбъект.СхемаКомпоновкиДанных; - Исключение - ТекстОшибки = НСтр("ru = 'Не удалось прочитать схему отчета ""%1"":'"); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ОтчетМетаданные.Имя); - ТекстОшибки = ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ПредупреждениеПоВарианту(Неопределено, ТекстОшибки); - КонецПопытки; - // Чтение настроек вариантов отчета из схемы. - Если СхемаКД <> Неопределено Тогда - Попытка - ВариантыНастроек = СхемаКД.ВариантыНастроек; - Исключение - ТекстОшибки = НСтр("ru = 'Не удалось прочитать список вариантов отчета ""%1"" из схемы:'"); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ОтчетМетаданные.Имя); - ТекстОшибки = ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ПредупреждениеПоВарианту(Неопределено, ТекстОшибки); - КонецПопытки; - КонецЕсли; - // Чтение настроек вариантов отчета из модуля менеджера (если не получилось из схемы). - Если ВариантыНастроек = Неопределено Тогда - Попытка - ВариантыНастроек = ОтчетМенеджер.ВариантыНастроек(); - Исключение - ТекстОшибки = НСтр("ru = 'Не удалось прочитать список вариантов отчета ""%1"" из модуля менеджера:'"); - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ОтчетМетаданные.Имя); - ТекстОшибки = ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ОшибкаПоВарианту(Неопределено, ТекстОшибки); - КонецПопытки; - КонецЕсли; - // Регистрация найденных вариантов. - Если ВариантыНастроек <> Неопределено Тогда - Для Каждого ВариантНастроекКД Из ВариантыНастроек Цикл - Вариант = СтрокаОтчет.Строки.Добавить(); - Вариант.Отчет = СтрокаОтчет.Отчет; - Вариант.КлючВарианта = ВариантНастроекКД.Имя; - Вариант.Наименование = ВариантНастроекКД.Представление; - Вариант.Тип = ОтчетТип; - Вариант.ЭтоВариант = Истина; - Если СтрокаОтчет.ОсновнойВариант = Неопределено Тогда - СтрокаОтчет.ОсновнойВариант = Вариант; - КонецЕсли; - Если РазрешеноИндексирование И ТипЗнч(ВариантНастроекКД) = Тип("ВариантНастроекКомпоновкиДанных") Тогда - Попытка - Вариант.СистемнаяИнформация.Вставить("НастройкиКД", ВариантНастроекКД.Настройки); - Исключение - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось прочитать настройки варианта ""%1"" отчета ""%2"":'"), - Вариант.КлючВарианта, - ОтчетМетаданные.Имя) - + Символы.ПС - + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ПредупреждениеПоВарианту(Неопределено, ТекстОшибки); - КонецПопытки; - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЕсли; - - // Сам отчет. - Если СтрокаОтчет.ОсновнойВариант = Неопределено Тогда - Вариант = СтрокаОтчет.Строки.Добавить(); - ЗаполнитьЗначенияСвойств(Вариант, СтрокаОтчет, "Отчет, Наименование"); - Вариант.КлючВарианта = ""; - Вариант.ЭтоВариант = Истина; - СтрокаОтчет.ОсновнойВариант = Вариант; - КонецЕсли; - - КонецЦикла; - - // Механизмы расширения. - Если ФильтрПоТипуОтчетов = Неопределено Или ФильтрПоТипуОтчетов = "Внутренний" Тогда - // Подключаемые обработчики подсистем БСП. - Обработчики = ОбщегоНазначения.ОбработчикиСлужебногоСобытия("СтандартныеПодсистемы.ВариантыОтчетов\ПриНастройкеВариантовОтчетов"); - Для Каждого Обработчик Из Обработчики Цикл - Обработчик.Модуль.ПриНастройкеВариантовОтчетов(ДеревоВариантов); - КонецЦикла; - // Переопределяемый модуль конфигурации. - ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(ДеревоВариантов); - КонецЕсли; - - // Определение основных вариантов. - Для Каждого СтрокаОтчет Из ДеревоВариантов.Строки Цикл - Если СтрокаОтчет.ГруппироватьПоОтчету = Истина Тогда - Если СтрокаОтчет.ОсновнойВариант = Неопределено - Или Не СтрокаОтчет.ОсновнойВариант.Включен Тогда - Для Каждого Вариант Из СтрокаОтчет.Строки Цикл - ЗаполнитьОписаниеСтрокиВарианта(Вариант, СтрокаОтчет); - Если Вариант.Включен Тогда - СтрокаОтчет.ОсновнойВариант = Вариант; - Вариант.ВидимостьПоУмолчанию = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - Иначе - СтрокаОтчет.ОсновнойВариант = Неопределено; - КонецЕсли; - - Если СтрокаОтчет.ФорматНастроекСКД Тогда - ПодключенКОсновнойФорме = ОтчетПодключенКОсновнойФорме(СтрокаОтчет.Метаданные, КэшФлажкаОсновнойФормы); - ПодключенКФормеНастроек = ОтчетПодключенКФормеНастроек(СтрокаОтчет.Метаданные, КэшФлажкаФормыНастроек); - Если ПодключенКОсновнойФорме <> ПодключенКФормеНастроек Тогда - ТекстОшибки = ВариантыОтчетовКлиентСервер.ТекстОшибки(?(ПодключенКОсновнойФорме, 1, 2), СтрокаОтчет.Метаданные.ПолноеИмя()); - Если ОбщегоНазначенияКлиентСервер.РежимОтладки() Тогда - ОшибкаПоВарианту(ОтчетСсылка, ТекстОшибки); - Иначе - ПредупреждениеПоВарианту(ОтчетСсылка, ТекстОшибки); - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Возврат ДеревоВариантов; -КонецФункции - // Заполняет описание настроек для строки варианта отчета если оно еще не заполнено. // // Параметры: @@ -2523,7 +2655,7 @@ // связанного с элементом справочника "Варианты отчетов". // // Параметры: -// ВариантОбъект - СправочникОбъект.ВариантыОтчетов, ДанныеФормыСтруктура +// ВариантОбъект - СправочникОбъект.ВариантыОтчетов, ДанныеФормыСтруктура. // Функция СброситьНастройкиВариантаОтчета(ВариантОбъект) Экспорт Если ВариантОбъект.Пользовательский @@ -2610,67 +2742,8 @@ Возврат Результат; КонецФункции -// Определяет способ внедрения подсистемы. -Функция ПоУмолчаниюВсеПодключеныКХранилищу() Экспорт - Возврат (Метаданные.ХранилищеВариантовОтчетов <> Неопределено И Метаданные.ХранилищеВариантовОтчетов.Имя = "ХранилищеВариантовОтчетов"); -КонецФункции - -// Определяет подключен ли отчет к подсистеме. -Функция ОтчетПодключенКХранилищу(ОтчетМетаданные, ПоУмолчаниюВсеПодключены = Неопределено) Экспорт - ХранилищеМетаданные = ОтчетМетаданные.ХранилищеВариантов; - Если ХранилищеМетаданные = Неопределено Тогда - Если ПоУмолчаниюВсеПодключены = Неопределено Тогда - ПоУмолчаниюВсеПодключены = ПоУмолчаниюВсеПодключеныКХранилищу(); - КонецЕсли; - ОтчетПодключен = ПоУмолчаниюВсеПодключены; - Иначе - ОтчетПодключен = (ХранилищеМетаданные = Метаданные.ХранилищаНастроек.ХранилищеВариантовОтчетов); - КонецЕсли; - Возврат ОтчетПодключен; -КонецФункции - -// Определяет способ подключения общей формы отчета. -Функция ПоУмолчаниюВсеПодключеныКОсновнойФорме() Экспорт - ФормаМетаданные = Метаданные.ОсновнаяФормаОтчета; - Возврат (ФормаМетаданные <> Неопределено И ФормаМетаданные = Метаданные.ОбщиеФормы.ФормаОтчета); -КонецФункции - -// Определяет способ подключения общей формы отчета. -Функция ОтчетПодключенКОсновнойФорме(ОтчетМетаданные, ПоУмолчаниюВсеПодключены = Неопределено) Экспорт - ФормаМетаданные = ОтчетМетаданные.ОсновнаяФорма; - Если ФормаМетаданные = Неопределено Тогда - Если ПоУмолчаниюВсеПодключены = Неопределено Тогда - ПоУмолчаниюВсеПодключены = ПоУмолчаниюВсеПодключеныКОсновнойФорме(); - КонецЕсли; - ОтчетПодключен = ПоУмолчаниюВсеПодключены; - Иначе - ОтчетПодключен = (ФормаМетаданные = Метаданные.ОбщиеФормы.ФормаОтчета); - КонецЕсли; - Возврат ОтчетПодключен; -КонецФункции - -// Определяет способ подключения общей формы отчета. -Функция ПоУмолчаниюВсеПодключеныКФормеНастроек() Экспорт - ФормаМетаданные = Метаданные.ОсновнаяФормаНастроекОтчета; - Возврат (ФормаМетаданные <> Неопределено И ФормаМетаданные = Метаданные.ОбщиеФормы.ФормаНастроекОтчета); -КонецФункции - -// Определяет способ подключения общей формы отчета. -Функция ОтчетПодключенКФормеНастроек(ОтчетМетаданные, ПоУмолчаниюВсеПодключены = Неопределено) Экспорт - ФормаМетаданные = ОтчетМетаданные.ОсновнаяФормаНастроек; - Если ФормаМетаданные = Неопределено Тогда - Если ПоУмолчаниюВсеПодключены = Неопределено Тогда - ПоУмолчаниюВсеПодключены = ПоУмолчаниюВсеПодключеныКФормеНастроек(); - КонецЕсли; - ОтчетПодключен = ПоУмолчаниюВсеПодключены; - Иначе - ОтчетПодключен = (ФормаМетаданные = Метаданные.ОбщиеФормы.ФормаНастроекОтчета); - КонецЕсли; - Возврат ОтчетПодключен; -КонецФункции - // Создает фильтр по реквизиту КлючОбъекта для СтандартноеХранилищеНастроекМенеджер.Выбрать(). -Функция НовыйФильтрПоКлючуОбъекта(ИменаОтчетов) Экспорт +Функция НовыйФильтрПоКлючуОбъекта(ИменаОтчетов) Если ИменаОтчетов = "" Или ИменаОтчетов = "*" Тогда Возврат Неопределено; КонецЕсли; @@ -2757,7 +2830,7 @@ КонецФункции // Глобальные клиентские настройки отчетов. -Функция ВыполнятьЗамеры() Экспорт +Функция ВыполнятьЗамеры() Если БезопасныйРежим() <> Ложь Тогда Возврат Ложь; КонецЕсли; @@ -2788,13 +2861,13 @@ КонецПроцедуры // Запись информации в журнал регистрации. -Процедура ИнформацияПоВарианту(Вариант, Сообщение, Реквизит1 = Неопределено, Реквизит2 = Неопределено, Реквизит3 = Неопределено) Экспорт +Процедура ИнформацияПоВарианту(Вариант, Сообщение, Реквизит1 = Неопределено, Реквизит2 = Неопределено, Реквизит3 = Неопределено) Уровень = УровеньЖурналаРегистрации.Информация; ЗаписьЖурнала(Уровень, Вариант, Сообщение, Реквизит1, Реквизит2, Реквизит3); КонецПроцедуры // Запись примечания в журнал регистрации. -Процедура ПримечаниеПоВарианту(Вариант, Сообщение, Реквизит1 = Неопределено, Реквизит2 = Неопределено, Реквизит3 = Неопределено) Экспорт +Процедура ПримечаниеПоВарианту(Вариант, Сообщение, Реквизит1 = Неопределено, Реквизит2 = Неопределено, Реквизит3 = Неопределено) Уровень = УровеньЖурналаРегистрации.Примечание; ЗаписьЖурнала(Уровень, Вариант, Сообщение, Реквизит1, Реквизит2, Реквизит3); КонецПроцедуры @@ -2815,12 +2888,10 @@ // Записывает в журнал регистрации событие запуска процедуры и открывает транзакцию. Процедура ЗапускПроцедуры(ПредставлениеПроцедуры) ИнформацияПоВарианту(Неопределено, НСтр("ru = 'Запуск процедуры ""%1"".'"), ПредставлениеПроцедуры); - НачатьТранзакцию(); КонецПроцедуры // Записывает в журнал регистрации событие завершения процедуры и фиксирует транзакцию. Процедура ЗавершениеПроцедуры(ПредставлениеПроцедуры, Изменено = Неопределено) - ЗафиксироватьТранзакцию(); Текст = НСтр("ru = 'Завершение процедуры ""%1"".'"); Если Изменено <> Неопределено Тогда Текст = Текст + " " + НСтр("ru = 'Изменено %2 объектов.'"); @@ -2914,13 +2985,6 @@ КонецПроцедуры -// [*] Актуализирует данные справочника ВариантыОтчетов в части отчетов расширений. -Процедура ОперативноеОбновлениеРазделенныхДанныхРасширений() Экспорт - - ОперативноеОбновлениеРазделенныхДанных("РазделенныеДанныеРасширений"); - -КонецПроцедуры - // Частичное индекса поиска предопределенных вариантов отчетов - только по изменениям в настройках вариантов. Процедура ОтложенноеОбновлениеОбщихДанныхКонфигурацииИнкрементальное(Параметры = Неопределено) Экспорт @@ -3210,11 +3274,18 @@ КонецЕсли; КонецПроцедуры +// [2.3.2.32] Удаление устаревших отложенных разделенных обработчиков обновления. +Процедура УдалитьУстаревшиеОбработчики(Параметры = Неопределено) Экспорт + + ОбновлениеИнформационнойБазы.УдалитьОтложенныйОбработчикИзОчереди("ВариантыОтчетов.ОтложенноеИнкрементальноеОбновлениеОбщихДанных"); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы / Начальное заполнение и актуализация справочников. // Актуализирует кэш метаданных конфигурации/подключенных расширений. -Функция ОперативноеОбновлениеОбщихДанных(Режим, РазделенныеОбработчики) Экспорт +Функция ОперативноеОбновлениеОбщихДанных(Режим, РазделенныеОбработчики) //////////////////////////////////////////////////////////////////////////////// // Выполняется только для предопределенных вариантов отчетов. @@ -3286,7 +3357,7 @@ КонецФункции // Актуализирует данные справочника ВариантыОтчетов. -Функция ОперативноеОбновлениеРазделенныхДанных(Режим) Экспорт +Функция ОперативноеОбновлениеРазделенныхДанных(Режим) Кэш = Новый Структура; Кэш.Вставить("Режим", Режим); @@ -3310,7 +3381,7 @@ КонецФункции // Обновление индекса поиска предопределенных вариантов отчетов. -Функция ОтложенноеОбновлениеДанных(Режим, Полное) Экспорт +Функция ОтложенноеОбновлениеДанных(Режим, Полное) Если Режим = "ОбщиеДанныеКонфигурации" И Не РазрешеноИндексированиеНеразделенныхДанных() Тогда Возврат Неопределено; КонецЕсли; @@ -3390,7 +3461,7 @@ КонецЕсли; КэшОтчетов = Новый Соответствие; - СтарыеСведения = Новый Структура("ХешНастроек, НаименованияПолей, НаименованияПараметровИОтборов"); + СтарыеСведения = Новый Структура("ХешНастроек, НаименованияПолей, НаименованияПараметровИОтборов, КлючевыеСлова"); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл @@ -3421,9 +3492,6 @@ Продолжить; // Заполнение не требуется. КонецЕсли; - Если ОтчетОбъект = Неопределено Тогда - ОтчетОбъект = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтрокаОтчет.СистемнаяИнформация, "ОтчетОбъект"); - КонецЕсли; НастройкиКД = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ОписаниеВарианта.СистемнаяИнформация, "НастройкиКД"); ВариантОбъект.ДополнительныеСвойства.Вставить("НастройкиКД", НастройкиКД); ВариантОбъект.ДополнительныеСвойства.Вставить("НастройкиДляПоиска", ОписаниеВарианта.НастройкиДляПоиска); @@ -3434,6 +3502,7 @@ ЗаполнитьЗначенияСвойств(СтарыеСведения, ВариантОбъект); ВариантОбъект.НаименованияПолей = ""; ВариантОбъект.НаименованияПараметровИОтборов = ""; + ВариантОбъект.КлючевыеСлова = ""; Если Кэш.Полное Тогда // Переиндексировать принудительно, без проверки хеш-суммы. ВариантОбъект.ДополнительныеСвойства.Вставить("ИндексироватьСхему", Истина); КонецЕсли; @@ -3712,7 +3781,8 @@ Функция ИзменилисьНастройкиПоиска(ВариантИзБазы, СтарыеСведения) Если ВариантИзБазы.ХешНастроек <> СтарыеСведения.ХешНастроек Или ВариантИзБазы.НаименованияПолей <> СтарыеСведения.НаименованияПолей - Или ВариантИзБазы.НаименованияПараметровИОтборов <> СтарыеСведения.НаименованияПараметровИОтборов Тогда + Или ВариантИзБазы.НаименованияПараметровИОтборов <> СтарыеСведения.НаименованияПараметровИОтборов + Или ВариантИзБазы.КлючевыеСлова <> СтарыеСведения.КлючевыеСлова Тогда Возврат Истина; Иначе Возврат Ложь; @@ -3757,8 +3827,8 @@ |ИЗ | Справочник.ВариантыОтчетов КАК ВариантыОтчетов |ГДЕ - | (ВариантыОтчетов.ТипОтчета = &ТипОтчета - | ИЛИ ТИПЗНАЧЕНИЯ(ВариантыОтчетов.Отчет) = &ТипРеквизитаОтчет) + | НЕ(НЕ ВариантыОтчетов.ТипОтчета = &ТипОтчета + | И НЕ ТИПЗНАЧЕНИЯ(ВариантыОтчетов.Отчет) = &ТипРеквизитаОтчет) | И ВариантыОтчетов.Пользовательский = ЛОЖЬ |; | @@ -3879,7 +3949,7 @@ КонецЦикла; // Обновление родителей пользовательских вариантов. - ТекстЗапроса = + ТекстЗапроса = // ОБЪЕДИНИТЬ ВСЕ используется вместо ИЛИ (требование стандартов). "ВЫБРАТЬ | ОсновныеВариантыОтчетов.Отчет, | ОсновныеВариантыОтчетов.Вариант @@ -3897,10 +3967,25 @@ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ втОсновные КАК втОсновные | ПО ВариантыОтчетов.Отчет = втОсновные.Отчет | И ВариантыОтчетов.Родитель <> втОсновные.Вариант + | И ВариантыОтчетов.Родитель.Родитель <> втОсновные.Вариант | И ВариантыОтчетов.Ссылка <> втОсновные.Вариант |ГДЕ - | (ВариантыОтчетов.Пользовательский - | ИЛИ НЕ ВариантыОтчетов.ПометкаУдаления)"; + | ВариантыОтчетов.Пользовательский + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ВариантыОтчетов.Ссылка, + | втОсновные.Вариант + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ втОсновные КАК втОсновные + | ПО ВариантыОтчетов.Отчет = втОсновные.Отчет + | И ВариантыОтчетов.Родитель <> втОсновные.Вариант + | И ВариантыОтчетов.Родитель.Родитель <> втОсновные.Вариант + | И ВариантыОтчетов.Ссылка <> втОсновные.Вариант + |ГДЕ + | НЕ ВариантыОтчетов.ПометкаУдаления"; Запрос = Новый Запрос; Запрос.УстановитьПараметр("ОсновныеВариантыОтчетов", Кэш.ОсновныеВарианты); @@ -3983,15 +4068,38 @@ ЗапускПроцедуры(ПредставлениеПроцедуры); Запрос = Новый Запрос; - ТекстЗапроса = + ТекстЗапроса = // ОБЪЕДИНИТЬ ВСЕ используется вместо ИЛИ (требование стандартов). "ВЫБРАТЬ | ВариантыОтчетов.Ссылка |ИЗ | Справочник.ВариантыОтчетов КАК ВариантыОтчетов |ГДЕ | ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ - | И (ВариантыОтчетов.Отчет = НЕОПРЕДЕЛЕНО - | ИЛИ ЕСТЬNULL(ВариантыОтчетов.Отчет.ПометкаУдаления, ИСТИНА) = ИСТИНА) + | И ВариантыОтчетов.Отчет = НЕОПРЕДЕЛЕНО + | И ВариантыОтчетов.ТипОтчета = &ТипОтчета + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ВариантыОтчетов.Ссылка + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ + | И ВариантыОтчетов.Отчет ЕСТЬ NULL + | И ВариантыОтчетов.ТипОтчета = &ТипОтчета + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ВариантыОтчетов.Ссылка + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ + | И ВариантыОтчетов.Отчет <> НЕОПРЕДЕЛЕНО + | И ВариантыОтчетов.Отчет ЕСТЬ НЕ NULL + | И ВариантыОтчетов.Отчет.ПометкаУдаления = ИСТИНА | И ВариантыОтчетов.ТипОтчета = &ТипОтчета"; Если Кэш.Режим = "ОбщиеДанныеКонфигурации" Тогда @@ -4133,7 +4241,7 @@ // Места использования: // ВариантыОтчетов.ОбновитьЗамерыВариантов(). // -Процедура ПриОбновленииКлючевыхОпераций(ТаблицаОбновленияКлючевыхОпераций) Экспорт +Процедура ПриОбновленииКлючевыхОпераций(ТаблицаОбновленияКлючевыхОпераций) ТекстЗапроса = "ВЫБРАТЬ | ТаблицаОбновленияКлючевыхОпераций.СтароеИмя КАК СтароеИмя, @@ -4170,7 +4278,7 @@ |УПОРЯДОЧИТЬ ПО | Приоритет УБЫВ"; - МодульОценкаПроизводительностиВызовСервераПолныеПрава = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиВызовСервераПолныеПрава"); + МодульОценкаПроизводительности = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительности"); Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("ТаблицаОбновленияКлючевыхОпераций", ТаблицаОбновленияКлючевыхОпераций); @@ -4189,7 +4297,7 @@ Продолжить; // Обновление не требуется. КонецЕсли; Если Выборка.Приоритет = 3 Тогда - КлючеваяОперацияСсылка = МодульОценкаПроизводительностиВызовСервераПолныеПрава.СоздатьКлючевуюОперацию(АктуальноеИмя); + КлючеваяОперацияСсылка = МодульОценкаПроизводительности.СоздатьКлючевуюОперацию(АктуальноеИмя); Иначе КлючеваяОперацияСсылка = Выборка.Ссылка; КонецЕсли; @@ -4198,7 +4306,6 @@ КлючеваяОперацияОбъект.Наименование = Выборка.АктуальноеНаименование; ОбновлениеИнформационнойБазы.ЗаписатьОбъект(КлючеваяОперацияОбъект); КонецЦикла; - КонецПроцедуры // Шаблон таблицы для обновления замеров. @@ -4255,9 +4362,9 @@ ОбновлениеИнформационнойБазы.ЗаписатьДанные(КонстантаОбъект, Ложь, Ложь); КонецЕсли; ИначеЕсли Кэш.Режим = "ОбщиеДанныеРасширений" Тогда - ИмяПодсистемы = ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы(); + ПолноеИмяПодсистемы = ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы(); ХранилищеЗначения = Новый ХранилищеЗначения(НовоеЗначение); - СтандартныеПодсистемыСервер.УстановитьПараметрРаботыРасширения(ИмяПодсистемы, ХранилищеЗначения); + СтандартныеПодсистемыСервер.УстановитьПараметрРаботыРасширения(ПолноеИмяПодсистемы, ХранилищеЗначения); КонецЕсли; ЗавершениеПроцедуры(ПредставлениеПроцедуры); @@ -4527,11 +4634,12 @@ // Вызывается из события ПриЗаписи вариантов. Часть проверок выполняется до вызова. Функция ПроиндексироватьСодержимоеСхемы(ВариантОбъект) Экспорт ДополнительныеСвойства = ВариантОбъект.ДополнительныеСвойства; + ТребуетсяЗапись = Ложь; // В некоторых случаях заранее известно что настройки уже проиндексированы. ИндексироватьСхему = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, "ИндексироватьСхему"); Если ИндексироватьСхему = Ложь Тогда - Возврат Ложь; // Заполнение не требуется. + Возврат ТребуетсяЗапись; // Заполнение не требуется. КонецЕсли; ПроверятьХеш = Истина; Если ИндексироватьСхему = Истина Тогда @@ -4542,7 +4650,7 @@ ЗаполнитьПоля = Лев(ВариантОбъект.НаименованияПолей, 1) <> "#"; ЗаполнитьФильтры = Лев(ВариантОбъект.НаименованияПараметровИОтборов, 1) <> "#"; Если Не ЗаполнитьПоля И Не ЗаполнитьФильтры Тогда - Возврат Ложь; // Заполнение не требуется. + Возврат ТребуетсяЗапись; // Заполнение не требуется. КонецЕсли; // Получение объекта отчета, настроек СКД и варианта. @@ -4556,13 +4664,19 @@ Если ЗаполнитьПоля И ЗначениеЗаполнено(НастройкиДляПоиска.НаименованияПолей) Тогда ВариантОбъект.НаименованияПолей = "#" + СокрЛП(НастройкиДляПоиска.НаименованияПолей); ЗаполнитьПоля = Ложь; + ТребуетсяЗапись = Истина; КонецЕсли; Если ЗаполнитьФильтры И ЗначениеЗаполнено(НастройкиДляПоиска.НаименованияПараметровИОтборов) Тогда ВариантОбъект.НаименованияПараметровИОтборов = "#" + СокрЛП(НастройкиДляПоиска.НаименованияПараметровИОтборов); ЗаполнитьФильтры = Ложь; + ТребуетсяЗапись = Истина; + КонецЕсли; + Если ЗначениеЗаполнено(НастройкиДляПоиска.КлючевыеСлова) Тогда + ВариантОбъект.КлючевыеСлова = "#" + СокрЛП(НастройкиДляПоиска.КлючевыеСлова); + ТребуетсяЗапись = Истина; КонецЕсли; Если Не ЗаполнитьПоля И Не ЗаполнитьФильтры Тогда - Возврат Истина; // Заполнение выполнено - объект надо записать. + Возврат ТребуетсяЗапись; // Заполнение выполнено - объект надо записать. КонецЕсли; КонецЕсли; @@ -4572,23 +4686,25 @@ // Когда объект отчета не закэширован - подключение отчета штатным способом. Если ОтчетОбъект = Неопределено Тогда Подключение = ПодключитьОтчетОбъект(ВариантОбъект.Отчет, Ложь); - Если Подключение.Успех Тогда // Отчет не найден. + Если Подключение.Успех Тогда ОтчетОбъект = Подключение.Объект; - ДополнительныеСвойства.Вставить("ОтчетОбъект", ОтчетОбъект); Иначе + ОтчетОбъект = ""; ОшибкаПоВарианту(ВариантОбъект.Ссылка, Подключение.ТекстОшибки); КонецЕсли; + ДополнительныеСвойства.Вставить("ОтчетОбъект", ОтчетОбъект); КонецЕсли; Если ОтчетОбъект = "" Тогда - Возврат Ложь; // Возникла проблема. + Возврат ТребуетсяЗапись; // Возникла проблема при подключении отчета. КонецЕсли; // Извлечение текстов макетов возможно только после получения объекта отчета. Если ЗаполнитьПоля И НастройкиДляПоиска <> Неопределено И ЗначениеЗаполнено(НастройкиДляПоиска.ИменаМакетов) Тогда ВариантОбъект.НаименованияПолей = "#" + ИзвлечьТекстМакета(ОтчетОбъект, НастройкиДляПоиска.ИменаМакетов); + ТребуетсяЗапись = истина; ЗаполнитьПоля = Ложь; Если Не ЗаполнитьПоля И Не ЗаполнитьФильтры Тогда - Возврат Истина; // Заполнение выполнено - объект надо записать. + Возврат ТребуетсяЗапись; // Заполнение выполнено - объект надо записать. КонецЕсли; КонецЕсли; @@ -4613,7 +4729,7 @@ Иначе ИнформацияПоВарианту(ВариантОбъект.Ссылка, ТекстОшибки); КонецЕсли; - Возврат Ложь; // Возникла проблема. + Возврат ТребуетсяЗапись; // Возникла проблема. КонецЕсли; // Чтение настроек из переданных параметров. @@ -4640,15 +4756,16 @@ Текст = НСтр("ru = 'Не удалось прочитать настройки предопределенного варианта отчета ""%1"".'"); ОшибкаПоВарианту(ВариантОбъект.Ссылка, Текст, ВариантОбъект.КлючЗамеров); КонецЕсли; - Возврат Ложь; // Возникла проблема. + Возврат ТребуетсяЗапись; // Возникла проблема. КонецЕсли; ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.MD5); ХешированиеДанных.Добавить(ОбщегоНазначения.ЗначениеВСтрокуXML(НастройкиКД)); ХешЭтихНастроек = СтрЗаменить(ХешированиеДанных.ХешСумма, " ", ""); Если ПроверятьХеш И ВариантОбъект.ХешНастроек = ХешЭтихНастроек Тогда - Возврат Ложь; // Настройки не изменились. + Возврат ТребуетсяЗапись; // Настройки не изменились. КонецЕсли; + ТребуетсяЗапись = истина; ВариантОбъект.ХешНастроек = ХешЭтихНастроек; // Описывает связь настроек компоновки данных и схемы компоновки данных. @@ -4673,11 +4790,11 @@ ВариантОбъект.НаименованияПараметровИОтборов = СформироватьПредставленияПараметровИОтборов(КомпоновщикНастроекКД); КонецЕсли; - Возврат Истина; + Возврат ТребуетсяЗапись; КонецФункции // Представления группировок и полей из СКД. -Функция СформироватьПредставленияПолей(КомпоновщикНастроекКД) Экспорт +Функция СформироватьПредставленияПолей(КомпоновщикНастроекКД) Результат = Новый Массив; ДополнитьМассивИзСтрокиСРазделителями(Результат, Строка(КомпоновщикНастроекКД.Настройки.Выбор)); @@ -4738,7 +4855,7 @@ КонецФункции // Представления параметров и отборов из СКД. -Функция СформироватьПредставленияПараметровИОтборов(КомпоновщикНастроекКД) Экспорт +Функция СформироватьПредставленияПараметровИОтборов(КомпоновщикНастроекКД) Результат = Новый Массив; НастройкиКД = КомпоновщикНастроекКД.Настройки; @@ -4796,7 +4913,7 @@ КонецФункции // Извлекает текстовую информацию из макета. -Функция ИзвлечьТекстМакета(ОтчетОбъект, ИменаМакетов) Экспорт +Функция ИзвлечьТекстМакета(ОтчетОбъект, ИменаМакетов) ИзвлеченныйТекст = ""; Если ТипЗнч(ИменаМакетов) = Тип("Строка") Тогда ИменаМакетов = СтрРазделить(ИменаМакетов, ",", Ложь); @@ -4853,7 +4970,7 @@ // Уменьшение количества пользовательских настроек. // Вызывается из события ПриЗаписи вариантов. Часть проверок выполняется до вызова. -Функция УменьшитьКоличествоБыстрыхНастроек(ВариантОбъект, ОтчетОбъект) Экспорт +Функция УменьшитьКоличествоБыстрыхНастроек(ВариантОбъект, ОтчетОбъект) Перем НастройкиКД, ЭтоПредопределенный; Если ВариантОбъект = Неопределено Тогда @@ -4917,7 +5034,8 @@ Функция НастройкиФормыОтчета(ОтчетСсылка, КлючВарианта, ОтчетОбъект) Экспорт НастройкиОтчета = ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(); - Если ВариантыОтчетовПовтИсп.ОтчетыСНастройками().Найти(ОтчетСсылка) <> Неопределено Тогда + ОтчетыСНастройками = ВариантыОтчетовПовтИсп.Параметры().ОтчетыСНастройками; + Если ОтчетыСНастройками.Найти(ОтчетСсылка) <> Неопределено Тогда Если ОтчетОбъект = Неопределено Тогда Подключение = ПодключитьОтчетОбъект(ОтчетСсылка, Ложь); Если Подключение.Успех Тогда @@ -4946,7 +5064,7 @@ // Поиск. // Можно ли индексировать содержимое схемы отчета. -Функция РазрешеноИндексированиеНеразделенныхДанных() Экспорт +Функция РазрешеноИндексированиеНеразделенныхДанных() Возврат Не ОбщегоНазначенияПовтИсп.РазделениеВключено(); КонецФункции @@ -4969,11 +5087,13 @@ // *** Ссылка - СправочникСсылка.ВариантыОтчетов. // *** НаименованияПолей - Строка. // *** НаименованияПараметровИОтборов - Строка. +// *** КлючевыеСлова - Строка. // *** Описание - Строка. // *** НаименованияПользовательскихНастроек - Строка. // *** ГдеНайдены - Структура. // **** НаименованияПолей - Число. // **** НаименованияПараметровИОтборов - Число. +// **** КлючевыеСлова - Число. // **** Описание - Число. // **** НаименованияПользовательскихНастроек - Число. // * Подсистемы - Массив из СправочникСсылка.ИдентификаторыОбъектовМетаданных - @@ -5045,6 +5165,8 @@ Запрос = Новый Запрос; + ПравоЧтенияАвторов = ПравоДоступа("Чтение", Метаданные.Справочники.Пользователи); + ТекущийПользователь = Пользователи.АвторизованныйПользователь(); Если ЕстьОтборПоОтчетам Тогда @@ -5062,8 +5184,6 @@ Запрос.УстановитьПараметр("ОтчетыПользователя", ОтборПоОтчетам); Запрос.УстановитьПараметр("ОтключенныеВариантыПрограммы", ПараметрыПоиска.ОтключенныеВариантыПрограммы); - ПравоЧтенияАвторов = ПравоДоступа("Чтение", Метаданные.Справочники.Пользователи); - Если ЕстьОтборПоПодсистемам Или ЕстьСтрокаПоиска Тогда ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ @@ -5089,6 +5209,11 @@ | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.НаименованияПараметровИОтборов КАК СТРОКА(1000)) | КОНЕЦ КАК НаименованияПараметровИОтборов, | ВЫБОР + | КОГДА ПОДСТРОКА(ВариантыОтчетов.КлючевыеСлова, 1, 1) = """" + | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.КлючевыеСлова, ВариантыРасширений.КлючевыеСлова) КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.КлючевыеСлова КАК СТРОКА(1000)) + | КОНЕЦ КАК КлючевыеСлова, + | ВЫБОР | КОГДА ПОДСТРОКА(ВариантыОтчетов.Описание, 1, 1) = """" | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.Описание, ВариантыРасширений.Описание) КАК СТРОКА(1000)) | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.Описание КАК СТРОКА(1000)) @@ -5126,7 +5251,11 @@ | ВариантыОтчетов.Ссылка КАК Ссылка, | ВариантыРазмещение.Использование КАК Использование, | ВариантыРазмещение.Подсистема КАК Подсистема, - | ВариантыРазмещение.Подсистема.Синоним КАК НаименованиеПодсистемы + | ВЫБОР + | КОГДА ВариантыРазмещение.Подсистема.ПолноеИмя = ""Подсистемы"" + | ТОГДА &НаименованиеРабочегоСтола + | ИНАЧЕ ВариантыРазмещение.Подсистема.Синоним + | КОНЕЦ КАК НаименованиеПодсистемы | ИЗ | Варианты КАК ВариантыОтчетов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Размещение КАК ВариантыРазмещение @@ -5135,7 +5264,11 @@ | ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ВариантыОтчетов.Ссылка КАК Ссылка, | РазмещениеКонфигурации.Подсистема КАК Подсистема, - | РазмещениеКонфигурации.Подсистема.Синоним КАК НаименованиеПодсистемы + | ВЫБОР + | КОГДА РазмещениеКонфигурации.Подсистема.ПолноеИмя = ""Подсистемы"" + | ТОГДА &НаименованиеРабочегоСтола + | ИНАЧЕ РазмещениеКонфигурации.Подсистема.Синоним + | КОНЕЦ КАК НаименованиеПодсистемы | ИЗ | Варианты КАК ВариантыОтчетов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК РазмещениеКонфигурации @@ -5148,7 +5281,11 @@ | ВЫБРАТЬ | ВариантыОтчетов.Ссылка, | РазмещениеРасширений.Подсистема, - | РазмещениеРасширений.Подсистема.Синоним + | ВЫБОР + | КОГДА РазмещениеРасширений.Подсистема.ПолноеИмя = ""Подсистемы"" + | ТОГДА &НаименованиеРабочегоСтола + | ИНАЧЕ РазмещениеРасширений.Подсистема.Синоним + | КОНЕЦ | ИЗ | Варианты КАК ВариантыОтчетов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Размещение КАК РазмещениеРасширений @@ -5184,6 +5321,7 @@ | ВариантыОтчетов.Ссылка КАК Ссылка, | ВариантыОтчетов.Родитель КАК Родитель, | ВариантыОтчетов.НаименованиеВарианта КАК НаименованиеВарианта, + | ВариантыОтчетов.ТолькоДляАвтора КАК ТолькоДляАвтора, | ВариантыОтчетов.Автор КАК Автор, | ВариантыОтчетов.АвторПредставление КАК АвторПредставление, | ВариантыОтчетов.Отчет КАК Отчет, @@ -5194,6 +5332,7 @@ | ВариантыОтчетов.ПредопределенныйВариант КАК ПредопределенныйВариант, | ВариантыОтчетов.НаименованияПараметровИОтборов КАК НаименованияПараметровИОтборов, | ВариантыОтчетов.НаименованияПолей КАК НаименованияПолей, + | ВариантыОтчетов.КлючевыеСлова КАК КлючевыеСлова, | ВариантыОтчетов.Описание КАК Описание, | Размещение.Подсистема КАК Подсистема, | Размещение.НаименованиеПодсистемы КАК НаименованиеПодсистемы, @@ -5225,6 +5364,8 @@ | НЕОПРЕДЕЛЕНО, | НЕОПРЕДЕЛЕНО, | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, + | НЕОПРЕДЕЛЕНО, | Пользовательские.КлючПользовательскойНастройки, | Пользовательские.Наименование |ИЗ @@ -5236,6 +5377,11 @@ | И &ПоискПользовательскихНастроек | И Пользовательские.ПометкаУдаления = ЛОЖЬ"; + Если Не ПравоЧтенияАвторов Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВариантыОтчетов.Автор КАК Автор", "НЕОПРЕДЕЛЕНО КАК Автор"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫРАЗИТЬ(ВариантыОтчетов.Автор.Наименование КАК СТРОКА(1000)) КАК АвторПредставление", "НЕОПРЕДЕЛЕНО КАК АвторПредставление"); + КонецЕсли; + Если ЕстьОтборПоВидимости Тогда // Действие не требуется. Иначе @@ -5271,11 +5417,6 @@ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И (РазмещениеРасширений.Подсистема В (&МассивПодсистем))", ""); КонецЕсли; - Если Не ПравоЧтенияАвторов Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВариантыОтчетов.Автор КАК Автор", "НЕОПРЕДЕЛЕНО КАК Автор"); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫРАЗИТЬ(ВариантыОтчетов.Автор.Наименование КАК СТРОКА(1000)) КАК АвторПредставление", "НЕОПРЕДЕЛЕНО КАК АвторПредставление"); - КонецЕсли; - Если ЕстьСтрокаПоиска И Не ЕстьОтборПоПодсистемам Тогда // Для поиска информация о размещении является дополнительной, а не ключевой. Если ЕстьОтборПоВидимости Тогда @@ -5331,7 +5472,10 @@ + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "ВариантыОтчетов.НаименованияПараметровИОтборов") + Символы.ПС + " Или " - + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "ВариантыОтчетов.Описание"); + + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "ВариантыОтчетов.Описание") + + Символы.ПС + + " Или " + + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "ВариантыОтчетов.КлючевыеСлова"); Если ПравоЧтенияАвторов Тогда ПоискВариантовИПодсистем = ПоискВариантовИПодсистем + Символы.ПС @@ -5339,7 +5483,6 @@ + СтрЗаменить(ШаблонПоиска, "<ИмяТаблицы.ИмяПоля>", "ВариантыОтчетов.АвторПредставление"); КонецЕсли; ПоискВариантовИПодсистем = ПоискВариантовИПодсистем + ")"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоискВариантовИПодсистем", ПоискВариантовИПодсистем); ПоискПользовательскихНастроек = ( @@ -5386,6 +5529,15 @@ | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.НаименованияПараметровИОтборов КАК СТРОКА(1000)) | КОНЕЦ КАК", "НЕОПРЕДЕЛЕНО КАК"); + // КлючевыеСлова + ТекстЗапроса = СтрЗаменить( + ТекстЗапроса, + "ВЫБОР + | КОГДА ПОДСТРОКА(ВариантыОтчетов.КлючевыеСлова, 1, 1) = """" + | ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(ВариантыКонфигурации.КлючевыеСлова, ВариантыРасширений.КлючевыеСлова) КАК СТРОКА(1000)) + | ИНАЧЕ ВЫРАЗИТЬ(ВариантыОтчетов.КлючевыеСлова КАК СТРОКА(1000)) + | КОНЕЦ КАК", + "НЕОПРЕДЕЛЕНО КАК"); // Описание ТекстЗапроса = СтрЗаменить( ТекстЗапроса, @@ -5398,16 +5550,30 @@ // НаименованиеПодсистемы ТекстЗапроса = СтрЗаменить( ТекстЗапроса, - "ВариантыРазмещение.Подсистема.Синоним", + "ВЫБОР + | КОГДА ВариантыРазмещение.Подсистема.ПолноеИмя = ""Подсистемы"" + | ТОГДА &НаименованиеРабочегоСтола + | ИНАЧЕ ВариантыРазмещение.Подсистема.Синоним + | КОНЕЦ КАК", "НЕОПРЕДЕЛЕНО"); ТекстЗапроса = СтрЗаменить( ТекстЗапроса, - "РазмещениеКонфигурации.Подсистема.Синоним", + "ВЫБОР + | КОГДА РазмещениеКонфигурации.Подсистема.ПолноеИмя = ""Подсистемы"" + | ТОГДА &НаименованиеРабочегоСтола + | ИНАЧЕ РазмещениеКонфигурации.Подсистема.Синоним + | КОНЕЦ", "НЕОПРЕДЕЛЕНО"); ТекстЗапроса = СтрЗаменить( ТекстЗапроса, - "РазмещениеРасширений.Подсистема.Синоним", + "ВЫБОР + | КОГДА РазмещениеРасширений.Подсистема.ПолноеИмя = ""Подсистемы"" + | ТОГДА &НаименованиеРабочегоСтола + | ИНАЧЕ РазмещениеРасширений.Подсистема.Синоним + | КОНЕЦ", "НЕОПРЕДЕЛЕНО"); + Иначе + Запрос.УстановитьПараметр("НаименованиеРабочегоСтола", НСтр("ru = 'Начальная страница'")); КонецЕсли; // Удаление лишних полей когда они не нужны для итоговой таблицы. @@ -5427,7 +5593,9 @@ | ВариантыОтчетов.КлючВарианта, | ВариантыОтчетов.Родитель, | ВариантыОтчетов.Наименование, - | ВариантыОтчетов.Описание + | ВариантыОтчетов.Описание, + | ВариантыОтчетов.ТолькоДляАвтора, + | ВариантыОтчетов.Автор |ИЗ | Справочник.ВариантыОтчетов КАК ВариантыОтчетов |ГДЕ @@ -5502,6 +5670,7 @@ Вариант.Вставить("Описание", Новый Структура(ШаблонОбластиПоиска)); Вариант.Вставить("НаименованияПолей", Новый Структура(ШаблонОбластиПоиска)); Вариант.Вставить("НаименованияПараметровИОтборов", Новый Структура(ШаблонОбластиПоиска)); + Вариант.Вставить("КлючевыеСлова", Новый Структура(ШаблонОбластиПоиска)); Вариант.Вставить("НаименованияПользовательскихНастроек", Новый Структура(ШаблонОбластиПоиска)); Вариант.Вставить("НаименованияПодсистем", Новый Структура(ШаблонОбластиПоиска)); Вариант.Вставить("Подсистемы", Новый Массив); @@ -5525,6 +5694,9 @@ Если Не ЗначениеЗаполнено(Вариант.НаименованияПараметровИОтборов.Значение) И ЗначениеЗаполнено(СтрокаТаблицы.НаименованияПараметровИОтборов) Тогда Вариант.НаименованияПараметровИОтборов.Значение = СтрокаТаблицы.НаименованияПараметровИОтборов; КонецЕсли; + Если Не ЗначениеЗаполнено(Вариант.КлючевыеСлова.Значение) И ЗначениеЗаполнено(СтрокаТаблицы.КлючевыеСлова) Тогда + Вариант.КлючевыеСлова.Значение = СтрокаТаблицы.КлючевыеСлова; + КонецЕсли; Если Не ЗначениеЗаполнено(Вариант.ПредставлениеАвтора.Значение) И ЗначениеЗаполнено(СтрокаТаблицы.АвторПредставление) Тогда Вариант.ПредставлениеАвтора.Значение = СтрокаТаблицы.АвторПредставление; КонецЕсли; @@ -5600,6 +5772,10 @@ СловоНайдено = Истина; КонецЕсли; + Если ОтметитьСлово(Вариант.КлючевыеСлова, Слово, Истина) Тогда + СловоНайдено = Истина; + КонецЕсли; + Если ОтметитьСлово(Вариант.НаименованияПользовательскихНастроек, Слово, Истина) Тогда СловоНайдено = Истина; КонецЕсли; @@ -5649,6 +5825,7 @@ Вариант.Вставить("Описание", Новый Структура(ШаблонОбластиПоиска)); Вариант.Вставить("НаименованияПолей", Новый Структура(ШаблонОбластиПоиска)); Вариант.Вставить("НаименованияПараметровИОтборов", Новый Структура(ШаблонОбластиПоиска)); + Вариант.Вставить("КлючевыеСлова", Новый Структура(ШаблонОбластиПоиска)); Вариант.Вставить("НаименованияПользовательскихНастроек", Новый Структура(ШаблонОбластиПоиска)); Вариант.Вставить("НаименованияПодсистем", Новый Структура(ШаблонОбластиПоиска)); Вариант.Вставить("Подсистемы", Новый Массив); @@ -5744,13 +5921,6 @@ //////////////////////////////////////////////////////////////////////////////// // Прочее. -// Выгружает текст и параметры запроса в XML. -Функция ЗапросВXML(Запрос) Экспорт - Структура = Новый Структура("Текст, Параметры"); - ЗаполнитьЗначенияСвойств(Структура, Запрос); - Возврат ОбщегоНазначения.ЗначениеВСтрокуXML(Структура); -КонецФункции - // Возвращает строку ключа настроек, не превышающую допустимую длину. // Если строка превышает допустимую длину, то лишние символы справа вырезаются // и вместо них вставляется MD5 хеш-сумма строки. @@ -5769,4 +5939,23 @@ КонецЕсли; КонецФункции +// Устарела. Следует удалить из всех мест использования. +// Добавляет оповещение для открытых форм подсистемы если изменилось значение функциональной опции. +// +// Параметры: +// Результат - Структура - Результат работы сервера, который возвращается на клиент. +// См. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). +// КонстантаМенеджер - КонстантаМенеджер.<Имя константы> - Менеджер константы, значение которой изменилось. +// +// Описание: +// Данную процедуру следует использовать при изменении значений констант, +// связанных с функциональными опциями для последующего обновления открытых форм. +// +// Места использования: +// Обработка.ПанельАдминистрированияБСП.Форма.*. +// +Процедура ДобавитьОповещениеПриИзмененииЗначенияКонстанты(Результат, КонстантаМенеджер) Экспорт + // Все формы отчетов теперь обновляются всегда (при изменении любой константы). +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl index 6e293813a..e53e50834 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl @@ -135,16 +135,15 @@ Тип = ТипЗнч(Вариант); Если Тип = Тип("Структура") Тогда ПараметрыОткрытия = Вариант; + ИначеЕсли Тип = Тип("СправочникСсылка.ВариантыОтчетов") + Или Тип = ВариантыОтчетовКлиентСервер.ТипСсылкиДополнительногоОтчета() Тогда + ПараметрыОткрытия = ВариантыОтчетовВызовСервера.ПараметрыОткрытия(Вариант); Иначе - Если Тип = Тип("СправочникСсылка.ВариантыОтчетов") Тогда - ПараметрыОткрытия = ВариантыОтчетовВызовСервера.ПараметрыОткрытия(Вариант); - Иначе - ПараметрыОткрытия = Новый Структура("Ссылка, Отчет, ТипОтчета, ИмяОтчета, КлючВарианта, КлючЗамеров"); - Если ТипЗнч(ФормаВладелец) = Тип("УправляемаяФорма") Тогда - ЗаполнитьЗначенияСвойств(ПараметрыОткрытия, ФормаВладелец); - КонецЕсли; - ЗаполнитьЗначенияСвойств(ПараметрыОткрытия, Вариант); + ПараметрыОткрытия = Новый Структура("Ссылка, Отчет, ТипОтчета, ИмяОтчета, КлючВарианта, КлючЗамеров"); + Если ТипЗнч(ФормаВладелец) = Тип("УправляемаяФорма") Тогда + ЗаполнитьЗначенияСвойств(ПараметрыОткрытия, ФормаВладелец); КонецЕсли; + ЗаполнитьЗначенияСвойств(ПараметрыОткрытия, Вариант); КонецЕсли; Если ДополнительныеПараметры <> Неопределено Тогда @@ -211,18 +210,22 @@ КонецЕсли; КонецПроцедуры -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -// Открывает форму настроек (в частности размещения) варианта отчета. +// Открывает карточку варианта отчета с настройками размещения в программе. +// +// Параметры: +// ВариантСсылка - СправочникСсылка.ВариантыОтчетов - Ссылка варианта отчета. +// Процедура ПоказатьНастройкиОтчета(ВариантСсылка) Экспорт ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("НастройкаРазмещения", Истина); + ПараметрыФормы.Вставить("ПоказатьКарточку", Истина); ПараметрыФормы.Вставить("Ключ", ВариантСсылка); ОткрытьФорму("Справочник.ВариантыОтчетов.ФормаОбъекта", ПараметрыФормы); КонецПроцедуры +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + // Процедура обслуживает событие реквизита ДеревоПодсистем в формах редактирования. Процедура ДеревоПодсистемИспользованиеПриИзменении(Форма, Элемент) Экспорт СтрокаДерева = Форма.Элементы.ДеревоПодсистем.ТекущиеДанные; @@ -320,7 +323,7 @@ КонецПроцедуры -Функция ПараметрыКлиента() Экспорт +Функция ПараметрыКлиента() Возврат ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(), "ВариантыОтчетов"); diff --git a/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl index 8ae930866..e06e78427 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl @@ -60,7 +60,7 @@ КонецФункции // Краткое имя подсистемы. -Функция ИмяПодсистемы() Экспорт +Функция ИмяПодсистемы() Возврат "ВариантыОтчетов"; КонецФункции @@ -165,6 +165,20 @@ Возврат ПредопределенноеЗначение("Перечисление.ТипыОтчетов." + Ключ); КонецФункции +// Возвращает тип ссылки дополнительного отчета. +Функция ТипСсылкиДополнительногоОтчета() Экспорт + #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Существует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки"); + #Иначе + Существует = ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки"); + #КонецЕсли + Если Существует Тогда + Имя = "ДополнительныеОтчетыИОбработки"; + Возврат Тип("СправочникСсылка." + Имя); + КонецЕсли; + Возврат Неопределено; +КонецФункции + // Возвращает текст ошибки по ее числовому номеру. Функция ТекстОшибки(Номер, Реквизит1 = Неопределено, Реквизит2 = Неопределено, Реквизит3 = Неопределено) Экспорт Если Номер = 1 Или Номер = 2 Тогда diff --git a/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl index c96bb0558..38ea6786a 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl @@ -37,19 +37,20 @@ // // Параметры: // Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// см. описание к ВариантыОтчетов.ДеревоПредопределенных(). // // Описание: // В данной процедуре необходимо указать каким именно образом предопределенные варианты отчетов // будут регистрироваться в программе и показываться в панели отчетов. // // Вспомогательные методы: -// НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.<ИмяОтчета>); -// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Отчеты.<ИмяОтчета>/Метаданные.Подсистемы.<ИмяПодсистемы>, Истина/Ложь); -// ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.<ИмяОтчета>); -// -// Данные функции получают соответственно настройки отчета и настройки варианта отчета следующей структуры: +// 1. Функции ОписаниеОтчета и ОписаниеВарианта формируют описание настроек отчета и варианта для последующего изменения: +// НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.<ИмяОтчета>); +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// Возвращаемые коллекции содержат одинаковый набор свойств. +// НастройкиОтчета используются как умолчания для вариантов, описания которых еще не получены. +// +// Свойства для изменения: // * Включен - Булево - // Если Ложь, то вариант отчета не регистрируется в подсистеме. // Используется для удаления технических и контекстных вариантов отчетов из всех интерфейсов. @@ -76,8 +77,13 @@ // Эти настройки необходимо задавать только если СКД не используется или используется не в полном объеме. // Например, СКД может использоваться только для параметризации и получения данных, // а вывод выполняться в фиксированный макет табличного документа. -// ** НаименованияПолей - Строка - Имена полей варианта отчета. Разделитель имен: Символы.ПС. -// ** НаименованияПараметровИОтборов - Строка - Имена настроек варианта отчета. Разделитель имен: Символы.ПС. +// ** НаименованияПолей - Строка - Имена полей варианта отчета. +// ** НаименованияПараметровИОтборов - Строка - Имена настроек варианта отчета. +// ** КлючевыеСлова - Строка - Дополнительная терминология (в т.ч. специализированная или устаревшая). +// Разделитель терминов: Символы.ПС. +// * ФорматНастроекСКД - Булево - Отчет использует типовой формат хранения настроек на механике СКД, +// а его основные формы поддерживают стандартную схему взаимодействия между формами (параметры и тип возвращаемого значения). +// Если Ложь, тогда для отчета отключаются проверки консистентности и некоторые механизмы, которые рассчитывают на типовой формат. // * ОпределитьНастройкиФормы - Булево - Отчет имеет программный интерфейс для тесной интеграции с формой отчета, // в том числе может переопределять некоторые настройки формы и подписываться на ее события. // Если Истина и отчет подключен к общей форме ФормаОтчета, @@ -98,43 +104,80 @@ // // Код процедуры. // КонецПроцедуры // +// 2. Процедура УстановитьРежимВыводаВПанеляхОтчетов позволяет настроить режим группировки вариантов в панелях отчетов: +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Отчеты.<ИмяОтчета>, Истина/Ложь); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Подсистемы.<ИмяПодсистемы>, Истина/Ложь); // -// Например: +// 3. Процедура НастроитьОтчетВМодулеМенеджера позволяет переопределять настройки отчета в его модуле менеджера: +// ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.<ИмяОтчета>); +// После вставки вызова в модуле менеджера указанного отчета следует разместить экспортную процедуру по шаблону: +// // Настройки размещения в панели отчетов. +// // +// // Параметры: +// // Настройки - Коллекция - Передается "как есть" из ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// // Может использоваться для получения настроек варианта этого отчета при помощи функции ВариантыОтчетов.ОписаниеВарианта(). +// // НастройкиОтчета - СтрокаДереваЗначений - Настройки этого отчета, +// // уже сформированные при помощи функции ВариантыОтчетов.ОписаниеОтчета() и готовые к изменению. +// // См. "Свойства для изменения" процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// // +// // Описание: +// // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// // +// // Вспомогательные методы: +// // НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// // ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// // +// // Примеры: +// // +// // 1. Установка описания варианта. +// // НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// // НастройкиВарианта.Описание = НСтр("ru = '<Описание>'"); +// // +// // 2. Отключение варианта отчета. +// // НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// // НастройкиВарианта.Включен = Ложь; +// // +// Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт +// // Код процедуры. +// КонецПроцедуры // -// (1) Добавить в подсистему вариант отчета. -// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Метаданные.Отчеты.ИмяОтчета, "ИмяВарианта1"); -// Вариант.Размещение.Вставить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); +// Примеры: // -// (2) Отключить вариант отчета. -// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Метаданные.Отчеты.ИмяОтчета, "ИмяВарианта1"); -// Вариант.Включен = Ложь; +// 1. Добавление варианта отчета в подсистему. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, Метаданные.Отчеты.ИмяОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Размещение.Вставить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); // -// (3) Отключить все варианты отчета, кроме требуемого. -// Отчет = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ИмяОтчета); -// Отчет.Включен = Ложь; -// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта"); -// Вариант.Включен = Истина; +// 2. Отключение варианта отчета. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, Метаданные.Отчеты.ИмяОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Включен = Ложь; // -// (4) Заполнить наименования полей, параметров и отборов: -// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Метаданные.Отчеты.ИмяОтчетаБезСхемы, ""); -// Вариант.НастройкиДляПоиска.НаименованияПолей = +// 3. Отключение всех вариантов отчета, кроме одного. +// НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ИмяОтчета); +// НастройкиОтчета.Включен = Ложь; +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Включен = Истина; +// +// 4. Заполнение настроек для поиска - наименования полей, параметров и отборов: +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, Метаданные.Отчеты.ИмяОтчетаБезСхемы, ""); +// НастройкиВарианта.НастройкиДляПоиска.НаименованияПолей = // НСтр("ru = 'Контрагент // |Договор // |Ответственный // |Скидка // |Дата'"); -// Вариант.НастройкиДляПоиска.НаименованияПараметровИОтборов = +// НастройкиВарианта.НастройкиДляПоиска.НаименованияПараметровИОтборов = // НСтр("ru = 'Период // |Ответственный // |Контрагент // |Договор'"); // -// (5) Переключить режим вывода в панели отчетов: -// (5.1) По отчетам: -// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Отчеты.ИмяОтчета, "ПоОтчетам"); -// (5.2) По вариантам: +// 5. Переключение режима вывода в панелях отчетов: +// 5.1. Группировка вариантов отчета по этому отчету: +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Отчеты.ИмяОтчета, Истина); +// 5.2. Без группировки по отчету: // Отчет = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ИмяОтчета); -// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Отчет, "ПоВариантам"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Отчет, Ложь); // // Важно: // Отчет выступает в качестве контейнера вариантов. diff --git a/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl index c217bbfe1..ade6ab1a5 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl @@ -81,8 +81,8 @@ |ИЗ | Справочник.ПредопределенныеВариантыОтчетов КАК ВариантыКонфигурации |ГДЕ - | (ВариантыКонфигурации.Включен = ЛОЖЬ - | ИЛИ ВариантыКонфигурации.ПометкаУдаления = ИСТИНА) + | НЕ(НЕ ВариантыКонфигурации.Включен = ЛОЖЬ + | И НЕ ВариантыКонфигурации.ПометкаУдаления = ИСТИНА) | И ВариантыКонфигурации.Отчет В(&ОтчетыПользователя) | И НЕ ВариантыКонфигурации.Ссылка В (&МассивОтключенных) | @@ -97,9 +97,9 @@ | И ВариантыРасширений.Отчет = Версии.Отчет | И (Версии.ВерсияРасширений = &ВерсияРасширений) |ГДЕ - | (ВариантыРасширений.Включен = ЛОЖЬ - | ИЛИ ВариантыРасширений.ПометкаУдаления = ИСТИНА - | ИЛИ Версии.Вариант ЕСТЬ NULL ) + | НЕ(НЕ ВариантыРасширений.Включен = ЛОЖЬ + | И НЕ ВариантыРасширений.ПометкаУдаления = ИСТИНА + | И НЕ Версии.Вариант ЕСТЬ NULL ) | И ВариантыРасширений.Отчет В(&ОтчетыПользователя) | И НЕ ВариантыРасширений.Ссылка В (&МассивОтключенных)"; @@ -214,27 +214,14 @@ Возврат ПравоДоступа("СохранениеДанныхПользователя", Метаданные) И ПравоДоступа("Добавление", Метаданные.Справочники.ВариантыОтчетов); КонецФункции -// Устарела: Следует использовать ВариантыОтчетовПовтИсп.Параметры().ОтчетыСНастройками. -// Массив отчетов, которые хранят настройки общей формы "ФормаОтчета" и переопределяют их в модуле объекта. -// -// Возвращаемое значение: -// Массив из <см. Справочники.ВариантыОтчетов.Реквизиты.Отчет> - -// Ссылки отчетов, в модулях объектов которых есть процедура ОпределитьНастройкиФормы(). -// -// См. также: -// ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). -// -Функция ОтчетыСНастройками() Экспорт - Возврат ВариантыОтчетовПовтИсп.Параметры().ОтчетыСНастройками; -КонецФункции - // Параметры подсистемы, закэшированные при обновлении. Функция Параметры() Экспорт ХранилищеЗначения = Константы.ПараметрыВариантовОтчетов.Получить(); Параметры = ХранилищеЗначения.Получить(); Если ЗначениеЗаполнено(ПараметрыСеанса.ВерсияРасширений) Тогда - ХранилищеЗначения = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы()); + ПолноеИмяПодсистемы = ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы(); + ХранилищеЗначения = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ПолноеИмяПодсистемы); Если ХранилищеЗначения = Неопределено Тогда Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда УстановитьПривилегированныйРежим(Истина); @@ -251,7 +238,7 @@ Настройки.Вставить("Отложенное", Истина); Настройки.Вставить("Полное", Истина); Обновление = ВариантыОтчетов.Обновить(Настройки); - ХранилищеЗначения = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы()); + ХранилищеЗначения = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ПолноеИмяПодсистемы); КонецЕсли; Если ХранилищеЗначения <> Неопределено Тогда ПараметрыРасширений = ХранилищеЗначения.Получить(); diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl index 122acb438..71eb1c1c2 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl @@ -115,57 +115,34 @@ КонецПроцедуры -// Возвращает табличный документ, заполненный данными объекта. -// -// Параметры: -// СсылкаНаОбъект - ЛюбаяСсылка. -// -// Возвращаемое значение: -// ТабличныйДокумент - печатная форма объекта. -// -Функция ОтчетПоВерсииОбъекта(СсылкаНаОбъект, Знач ВерсияОбъекта = Неопределено) Экспорт - - НомерВерсии = Неопределено; - СериализованныйОбъект = Неопределено; - Если ТипЗнч(ВерсияОбъекта) = Тип("Число") Тогда - НомерВерсии = ВерсияОбъекта; - ИначеЕсли ТипЗнч(ВерсияОбъекта) = Тип("Строка") Тогда - СериализованныйОбъект = ВерсияОбъекта; - КонецЕсли; - - Если НомерВерсии = Неопределено Тогда - Если СериализованныйОбъект = Неопределено Тогда - СериализованныйОбъект = СериализоватьОбъект(СсылкаНаОбъект.ПолучитьОбъект()); - КонецЕсли; - ОписаниеОбъекта = РазборПредставленияОбъектаXML(СериализованныйОбъект, СсылкаНаОбъект); - ОписаниеОбъекта.Вставить("ИмяОбъекта", Строка(СсылкаНаОбъект)); - ОписаниеОбъекта.Вставить("АвторИзменения", ""); - ОписаниеОбъекта.Вставить("ДатаИзменения", ТекущаяДатаСеанса()); - ОписаниеОбъекта.Вставить("Комментарий", ""); - НомерВерсии = 0; - - ВерсионированиеОбъектовПереопределяемый.ПослеРазбораВерсииОбъекта(СсылкаНаОбъект, ОписаниеОбъекта); - Иначе - ОписаниеОбъекта = РазборВерсии(СсылкаНаОбъект, НомерВерсии); - КонецЕсли; - - Описание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '№ %1 / (%2) / %3'"), НомерВерсии, - Строка(ОписаниеОбъекта.ДатаИзменения), СокрЛП(Строка(ОписаниеОбъекта.АвторИзменения))); - - ОписаниеОбъекта.Вставить("Описание", Описание); - ОписаниеОбъекта.Вставить("НомерВерсии", НомерВерсии); - - ТабличныйДокумент = Новый ТабличныйДокумент; - СформироватьОтчетПоВерсииОбъекта(ТабличныйДокумент, ОписаниеОбъекта, СсылкаНаОбъект); - - Возврат ТабличныйДокумент; - -КонецФункции - #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс +// Возвращает соответствие имен параметров сеанса и обработчиков для их инициализации. +// +Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт + + Обработчики.Вставить("ВыполняетсяЗаписьОбъекта", + "ВерсионированиеОбъектов.УстановкаПараметровСеанса"); + +КонецПроцедуры + +// Устанавливает параметры сеанса подсистемы обмена данными. +// +// Параметры: +// ИмяПараметра - Строка - имя параметра сеанса, значение которого необходимо установить. +// УстановленныеПараметры - массив - в данный параметр помещается информация об установленных параметрах сеанса. +// +Процедура УстановкаПараметровСеанса(ИмяПараметра, УстановленныеПараметры) Экспорт + + Если ИмяПараметра = "ВыполняетсяЗаписьОбъекта" Тогда + ВыполняетсяЗаписьОбъекта(Ложь); + УстановленныеПараметры.Добавить("ВыполняетсяЗаписьОбъекта"); + КонецЕсли; + +КонецПроцедуры + // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -193,7 +170,13 @@ "СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриОпределенииПсевдонимовОбработчиков"].Добавить( "ВерсионированиеОбъектов"); КонецЕсли; + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриОтправкеДанныхПодчиненному"].Добавить( + "ВерсионированиеОбъектов"); + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриОтправкеДанныхГлавному"].Добавить( + "ВерсионированиеОбъектов"); + КонецПроцедуры // Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. @@ -267,12 +250,58 @@ КонецПроцедуры +// Записывает версию объекта в информационную базу. +// +// Параметры: +// Источник - Объект - записываемый объект ИБ; +// РежимЗаписи - РежимЗаписиДокумента. +// +//Процедура ЗаписатьВерсиюОбъекта(Источник, РежимЗаписиПроведение = Ложь) Экспорт +Процедура ЗаписатьВерсиюОбъекта(Знач Источник, РежимЗаписи = Неопределено) Экспорт + + Если ОбщегоНазначения.ЗначениеСсылочногоТипа(Источник) Тогда + Источник = Источник.ПолучитьОбъект(); + КонецЕсли; + + Если Источник = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Источник.ОбменДанными.Загрузка + И Источник.ДополнительныеСвойства.Свойство("ПропуститьЗаписьВерсииОбъекта") + И ПривилегированныйРежим() Тогда + Возврат; + КонецЕсли; + + Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Источник) Тогда + Возврат; + КонецЕсли; + + Если Источник.ОбменДанными.Загрузка Тогда + Если Не Источник.Ссылка.Пустая() Тогда + ЗаписатьДанныеТекущейВерсии(Источник.Ссылка); + КонецЕсли; + Возврат; + КонецЕсли; + + Если ВыполняетсяЗаписьОбъекта() Тогда + Возврат; + КонецЕсли; + + + Если Источник.ДополнительныеСвойства.Свойство("СведенияОВерсииОбъекта") Тогда + Возврат; + КонецЕсли; + + ПриСозданииВерсииОбъекта(Источник, РежимЗаписи); + +КонецПроцедуры + // Записывает версию объекта в информационную базу. // // Параметры: // Объект - для создания версии. // -//Процедура ПриСозданииВерсииОбъекта(Объект, РежимЗаписиПроведение) Экспорт Процедура ПриСозданииВерсииОбъекта(Объект, РежимЗаписи) Экспорт Перем НомерПоследнейВерсии, Комментарий; @@ -298,60 +327,6 @@ КонецПроцедуры -// Записывает версию объекта, полученного при обмене данными, в информационную базу. -// Для версии объекта не по коллизии проверяет включенность версионирования. -// -// Параметры: -// Объект - для создания версии. -// -Процедура ПриСозданииВерсииОбъектаПоОбменуДанными(Объект) Экспорт - - Перем НомерПоследнейВерсии; - - Если Не ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(Объект.Метаданные()) Тогда - - Возврат; - - КонецЕсли; - - Ссылка = Объект.Ссылка; - - СведенияОВерсииОбъекта = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру( - Объект.ДополнительныеСвойства.СведенияОВерсииОбъекта); - - Если СведенияОВерсииОбъекта.ТипВерсииОбъекта = "ПринятыеДанныеПоКоллизии" Тогда - - НомерПоследнейВерсии = НомерПоследнейВерсии(Ссылка); - - СведенияОВерсииОбъекта.Вставить("Объект", Ссылка); - СведенияОВерсииОбъекта.Вставить("НомерВерсии", Число(НомерПоследнейВерсии) + 1); - СведенияОВерсииОбъекта.ТипВерсииОбъекта = Перечисления.ТипыВерсийОбъекта[СведенияОВерсииОбъекта.ТипВерсииОбъекта]; - - СоздатьВерсиюОбъекта(Объект, СведенияОВерсииОбъекта, Ложь); - - ИначеЕсли ОбъектВерсионируется(Объект, НомерПоследнейВерсии) Тогда - - Если СведенияОВерсииОбъекта.ОтложеннаяОбработка Тогда - - НомерПоследнейВерсии = НомерПоследнейВерсии(Ссылка); - ЗаписатьВерсиюПоверхПредыдущей(Ссылка, Объект, НомерПоследнейВерсии, СведенияОВерсииОбъекта); - - Иначе - - СведенияОВерсииОбъекта.Вставить("Объект", Ссылка); - СведенияОВерсииОбъекта.Вставить("НомерВерсии", Число(НомерПоследнейВерсии) + 1); - СведенияОВерсииОбъекта.ТипВерсииОбъекта = Перечисления.ТипыВерсийОбъекта[СведенияОВерсииОбъекта.ТипВерсииОбъекта]; - - СоздатьВерсиюОбъекта(Объект, СведенияОВерсииОбъекта, Ложь); - - КонецЕсли; - - КонецЕсли; - - Объект.ДополнительныеСвойства.Удалить("СведенияОВерсииОбъекта"); - -КонецПроцедуры - // Заполняет список текущих дел пользователя. // // Параметры: @@ -385,7 +360,6 @@ Подсказка = НСтр("ru = 'Устаревших версий: %1 (%2)'"); Для Каждого Раздел Из Разделы Цикл - ИдентификаторУстаревшиеОбъекты = "УстаревшиеВерсииОбъектов" + СтрЗаменить(Раздел.ПолноеИмя(), ".", ""); // Добавление дела. Дело = ТекущиеДела.Добавить(); @@ -396,7 +370,6 @@ Дело.Форма = "РегистрСведений.НастройкиВерсионированияОбъектов.Форма.ВерсионированиеОбъектов"; Дело.Подсказка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Подсказка, ИнформацияОбУстаревшихВерсиях.КоличествоВерсий, РазмерУстаревшихДанных); Дело.Владелец = Раздел; - КонецЦикла; КонецПроцедуры @@ -446,7 +419,7 @@ // Сохраняем предыдущую версию объекта. МенеджерЗаписи = РегистрыСведений.ВерсииОбъектов.СоздатьМенеджерЗаписи(); МенеджерЗаписи.Объект = Объект.Ссылка; - МенеджерЗаписи.НомерВерсии = СведенияОВерсииОбъекта.НомерВерсии - 1; + МенеджерЗаписи.НомерВерсии = НомерПредыдущейВерсии(Объект.Ссылка, СведенияОВерсииОбъекта.НомерВерсии); МенеджерЗаписи.Прочитать(); Если МенеджерЗаписи.Выбран() Тогда МенеджерЗаписи.ВерсияОбъекта = Новый ХранилищеЗначения(ДанныеДляХранения(Объект.Ссылка), Новый СжатиеДанных(9)); @@ -476,6 +449,7 @@ МенеджерЗаписи.АвторВерсии = АвторВерсии; МенеджерЗаписи.ТипВерсииОбъекта = Перечисления.ТипыВерсийОбъекта.ИзмененоПользователем; + МенеджерЗаписи.Синхронизируется = Истина; СведенияОВерсииОбъекта.Свойство("Комментарий", МенеджерЗаписи.Комментарий); Если Не Объект.ЭтоНовый() Тогда @@ -485,7 +459,7 @@ Объект.Проведен = Не Объект.Проведен; КонецЕсли; - МенеджерЗаписи.КонтрольнаяСумма = КонтрольнаяСумма(СериализоватьОбъект(Объект)); + МенеджерЗаписи.КонтрольнаяСумма = КонтрольнаяСумма(ДанныеДляХранения(Объект)); // Возвращаем проведенность в исходное состояние, чтобы не поломать другие механизмы, зависящие от этого реквизита. Если ИзмененаПроведенность Тогда @@ -493,9 +467,18 @@ КонецЕсли; КонецЕсли; Иначе + // Сохраняем предыдущую версию объекта. + МенеджерЗаписи = РегистрыСведений.ВерсииОбъектов.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.Объект = Объект.Ссылка; + МенеджерЗаписи.НомерВерсии = НомерПредыдущейВерсии(Объект.Ссылка, СведенияОВерсииОбъекта.НомерВерсии); + МенеджерЗаписи.Прочитать(); + Если МенеджерЗаписи.Выбран() И Не МенеджерЗаписи.ЕстьДанныеВерсии Тогда + МенеджерЗаписи.ВерсияОбъекта = Новый ХранилищеЗначения(ДанныеДляХранения(Объект.Ссылка), Новый СжатиеДанных(9)); + МенеджерЗаписи.Записать(); + КонецЕсли; + ДвоичныеДанные = СериализоватьОбъект(Объект); ХранилищеДанных = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9)); - МенеджерЗаписи = РегистрыСведений.ВерсииОбъектов.СоздатьМенеджерЗаписи(); МенеджерЗаписи.ДатаВерсии = ТекущаяДатаСеанса(); МенеджерЗаписи.ВерсияОбъекта = ХранилищеДанных; @@ -506,35 +489,34 @@ КонецПроцедуры -// Записывает версию объекта, полученного при обмене данными, в информационную базу. +// Записывает в информационную базу версию объекта, полученного при обмене данными. // // Параметры: -// Объект - для создания версии. -// СведенияОВерсииОбъекта - Структура - содержит информацию о версии объекта. -// СсылкаСуществует - Булево - Признак наличия объекта по ссылке в информационной базе. -// -Процедура СоздатьВерсиюОбъектаПоОбменуДанными(Объект, СведенияОВерсииОбъекта, СсылкаСуществует = Неопределено) Экспорт +// Объект - Объект - записываемый объект. +// СведенияОВерсииОбъекта - Структура - содержит информацию о версии объекта. +// СсылкаСуществует - Булево - признак наличия объекта по ссылке в информационной базе. +Процедура СоздатьВерсиюОбъектаПоОбменуДанными(Объект, СведенияОВерсииОбъекта, СсылкаСуществует, Отправитель) Экспорт Ссылка = Объект.Ссылка; Если Не ЗначениеЗаполнено(СсылкаСуществует) Тогда СсылкаСуществует = ОбщегоНазначения.СсылкаСуществует(Ссылка); КонецЕсли; - + + ТипВерсииОбъекта = Перечисления.ТипыВерсийОбъекта[СведенияОВерсииОбъекта.ТипВерсииОбъекта]; + + НомерПоследнейВерсии = 0; Если СсылкаСуществует Тогда - - НомерПоследнейВерсии = НомерПоследнейВерсии(Ссылка); - + Если ОбъектВерсионируется(Ссылка, НомерПоследнейВерсии) И РегистрВерсийВходитВСоставПланаОбмена(Отправитель) Тогда + Возврат; + КонецЕсли; Иначе - Ссылка = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Ссылка).ПолучитьСсылку(Объект.ПолучитьСсылкуНового().УникальныйИдентификатор()); - НомерПоследнейВерсии = 0; - КонецЕсли; СведенияОВерсииОбъекта.Вставить("Объект", Ссылка); СведенияОВерсииОбъекта.Вставить("НомерВерсии", Число(НомерПоследнейВерсии) + 1); - СведенияОВерсииОбъекта.ТипВерсииОбъекта = Перечисления.ТипыВерсийОбъекта[СведенияОВерсииОбъекта.ТипВерсииОбъекта]; + СведенияОВерсииОбъекта.ТипВерсииОбъекта = ТипВерсииОбъекта; Если Не ЗначениеЗаполнено(СведенияОВерсииОбъекта.АвторВерсии) Тогда СведенияОВерсииОбъекта.АвторВерсии = Пользователи.АвторизованныйПользователь(); @@ -544,6 +526,25 @@ КонецПроцедуры +Процедура ЗаписатьДанныеТекущейВерсии(Ссылка) Экспорт + Перем НомерПоследнейВерсии; + + УстановитьПривилегированныйРежим(Истина); + + Если Не ОбъектВерсионируется(Ссылка, НомерПоследнейВерсии) Тогда + Возврат; + КонецЕсли; + + ПоследняяВерсия = РегистрыСведений.ВерсииОбъектов.СоздатьМенеджерЗаписи(); + ПоследняяВерсия.Объект = Ссылка; + ПоследняяВерсия.НомерВерсии = НомерПоследнейВерсии; + ПоследняяВерсия.Прочитать(); + Если Не ПоследняяВерсия.ЕстьДанныеВерсии Тогда + ПоследняяВерсия.ВерсияОбъекта = Новый ХранилищеЗначения(ДанныеДляХранения(Ссылка), Новый СжатиеДанных(9)); + ПоследняяВерсия.Записать(); + КонецЕсли; +КонецПроцедуры + // Устанавливает признак игнорирования версии объекта. // // Параметры: @@ -585,7 +586,7 @@ Количество = 0; - Если Не ЕстьПравоНаЧтениеВерсийОбъектов() Тогда + Если Не ЕстьПравоЧтенияИнформацииОВерсияхОбъектов() Тогда Возврат Количество; КонецЕсли; @@ -683,26 +684,6 @@ КонецФункции -Функция ОбъектИзДвоичныхДанных(ДвоичныеДанные) - - ЧтениеXML = Новый ЧтениеFastInfoSet; - ЧтениеXML.УстановитьДвоичныеДанные(ДвоичныеДанные); - Если ЧтениеXML.Прочитать() Тогда - Если ВозможностьЧтенияXML(ЧтениеXML) Тогда - Объект = ПрочитатьXML(ЧтениеXML); - ЧтениеXML.Закрыть(); - Возврат Объект; - Иначе - ЧтениеXML.Закрыть(); - ВызватьИсключение НСтр("ru = 'Ошибка при восстановлении объекта'"); - КонецЕсли; - Иначе - ЧтениеXML.Закрыть(); - ВызватьИсключение НСтр("ru = 'Ошибка чтения данных'"); - КонецЕсли; - -КонецФункции - Функция ЗаписьОВерсииОбъекта(СсылкаНаОбъект, НомерВерсии) НаборЗаписей = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей(); @@ -714,47 +695,10 @@ КонецФункции -Процедура ЗаписатьВерсиюПоверхПредыдущей(Ссылка, Объект, НомерВерсии, СведенияОВерсииОбъекта) - - УстановитьПривилегированныйРежим(Истина); - - НаборЗаписей = ЗаписьОВерсииОбъекта(Ссылка, НомерВерсии); - - Если НаборЗаписей.Количество() = 0 Тогда - - ДанныеВерсии = Новый Структура; - ДанныеВерсии.Вставить("Объект", Ссылка); - ДанныеВерсии.Вставить("НомерВерсии", Число(НомерВерсии) + 1); - ДанныеВерсии.Вставить("АвторВерсии", СведенияОВерсииОбъекта.АвторВерсии); - ДанныеВерсии.Вставить("Комментарий", НСтр("ru = 'Версия создана при синхронизации данных.'")); - ДанныеВерсии.Вставить("ТипВерсииОбъекта", Перечисления.ТипыВерсийОбъекта[СведенияОВерсииОбъекта.ТипВерсииОбъекта]); - - СоздатьВерсиюОбъекта(Объект, ДанныеВерсии, Ложь); - - Иначе - - ЗаписьОВерсии = НаборЗаписей[0]; - - ЗаписьXML = Новый ЗаписьFastInfoset; - ЗаписьXML.УстановитьДвоичныеДанные(); - ЗаписьXML.ЗаписатьОбъявлениеXML(); - ЗаписатьXML(ЗаписьXML, Объект, НазначениеТипаXML.Явное); - ДвоичныеДанные = ЗаписьXML.Закрыть(); - ХранилищеДанных = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9)); - - ЗаписьОВерсии.ДатаВерсии = ТекущаяДатаСеанса(); - ЗаписьОВерсии.ВерсияОбъекта = ХранилищеДанных; - - НаборЗаписей.Записать(); - - КонецЕсли; - -КонецПроцедуры - Процедура ПроверитьНаличиеПравНаИзменениеОбъекта(ОбъектМетаданных) Если Не ПривилегированныйРежим() И Не ПравоДоступа("Изменение", ОбъектМетаданных)Тогда - ТекстСообщения = Нстр("ru = 'Недостаточно прав на изменение ""%1"".'"); + ТекстСообщения = НСтр("ru = 'Недостаточно прав на изменение ""%1"".'"); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ОбъектМетаданных.Представление()); ВызватьИсключение ТекстСообщения; КонецЕсли; @@ -798,16 +742,79 @@ КонецПроцедуры -// Проверяет наличие у пользователя прав на чтение информации о версиях. -// -Функция ЕстьПравоНаЧтениеВерсийОбъектов() Экспорт - Возврат Пользователи.РолиДоступны("ЧтениеВерсийОбъектов, ЧтениеИнформацииОВерсияхОбъектов"); -КонецФункции - Функция ЕстьПравоЧтенияИнформацииОВерсияхОбъектов() Экспорт Возврат Пользователи.РолиДоступны("ЧтениеИнформацииОВерсияхОбъектов"); КонецФункции +Функция ЕстьПравоЧтенияДанныхВерсийОбъектов() Экспорт + Возврат Пользователи.РолиДоступны("ЧтениеВерсийОбъектов"); +КонецФункции + +// Заполняет параметры динамического списка, отображающего проблемные версии объектов, +// созданные при получении данных в результате обмена данными в случае коллизий, +// либо в случае отказа от записи документов в результате непрохождения проверки по дате запрета изменения. +// +// Параметры: +// Список - ДинамическийСписок - инициализируемый динамический список. +// ВидПроблемы - Строка - Коллизии - происходит инициализация списка коллизий, +// НепринятыеПоДате - непринятых по дате. +// +Процедура ИнициализацияДинамическогоСпискаПроблемныхВерсий(Список, ВидПроблемы = "Коллизии") Экспорт + + Если ВидПроблемы = "НепринятыеПоДате" Тогда + ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | НепринятаяВерсия.ДатаВерсии КАК Дата, + | НепринятаяВерсия.Объект КАК Ссылка, + | НепринятаяВерсия.Комментарий КАК ПричинаЗапрета, + | ВЫБОР + | КОГДА НепринятаяВерсия.ТипВерсииОбъекта = ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектСуществуетВБазе) + | ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ КАК НовыйОбъект, + | ЕСТЬNULL(НепринятаяВерсия.НомерВерсии, 0) КАК НомерДругойВерсии, + | НепринятаяВерсия.АвторВерсии КАК АвторДругойВерсии, + | ЕСТЬNULL(ТекущаяВерсия.НомерВерсии, 0) КАК НомерЭтойВерсии, + | ТИПЗНАЧЕНИЯ(НепринятаяВерсия.Объект) КАК ТипСтрокой, + | НепринятаяВерсия.ВерсияПроигнорирована + |ИЗ + | РегистрСведений.ВерсииОбъектов КАК НепринятаяВерсия + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВерсииОбъектов КАК ТекущаяВерсия + | ПО НепринятаяВерсия.Объект = ТекущаяВерсия.Объект + | И (НепринятаяВерсия.НомерВерсии = ТекущаяВерсия.НомерВерсии + 1) + |ГДЕ + | НЕ(НепринятаяВерсия.ТипВерсииОбъекта <> ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектСуществуетВБазе) + | И НепринятаяВерсия.ТипВерсииОбъекта <> ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектНеСуществуетВБазе))"; + ИначеЕсли ВидПроблемы = "Коллизии" Тогда + ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВерсииДругойПрограммы.ДатаВерсии КАК Дата, + | ВерсииДругойПрограммы.Объект КАК Ссылка, + | ТИПЗНАЧЕНИЯ(ВерсииДругойПрограммы.Объект) КАК ТипСтрокой, + | ВерсииЭтойПрограммы.НомерВерсии КАК НомерЭтойВерсии, + | ВерсииДругойПрограммы.НомерВерсии КАК НомерДругойВерсии, + | ВерсииДругойПрограммы.АвторВерсии КАК АвторДругойВерсии, + | ВЫБОР + | КОГДА ВерсииДругойПрограммы.ТипВерсииОбъекта = ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.ПринятыеДанныеПоКоллизии) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ДругаяВерсияПринята, + | ВерсииДругойПрограммы.ВерсияПроигнорирована КАК ВерсияПроигнорирована + |ИЗ + | РегистрСведений.ВерсииОбъектов КАК ВерсииДругойПрограммы + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВерсииОбъектов КАК ВерсииЭтойПрограммы + | ПО ВерсииДругойПрограммы.Объект = ВерсииЭтойПрограммы.Объект + | И (ВерсииДругойПрограммы.НомерВерсии = ВерсииЭтойПрограммы.НомерВерсии + 1) + |ГДЕ + | НЕ(ВерсииДругойПрограммы.ТипВерсииОбъекта <> ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.ПринятыеДанныеПоКоллизии) + | И ВерсииДругойПрограммы.ТипВерсииОбъекта <> ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НеПринятыеДанныеПоКоллизии))"; + КонецЕсли; + + Список.ТекстЗапроса = ТекстЗапроса; + Список.ПроизвольныйЗапрос = Истина; + Список.ОсновнаяТаблица = "РегистрСведений.ВерсииОбъектов"; + Список.ДинамическоеСчитываниеДанных = Истина; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в эту подсистему. @@ -835,23 +842,22 @@ Если НомерВерсии <> 0 Тогда ПредыдущаяЗапись = ЗаписьОВерсииОбъекта(СсылкаНаОбъект, НомерВерсии)[0]; - Объект = ОбъектИзДвоичныхДанных(ПредыдущаяЗапись.ВерсияОбъекта.Получить()); ДатаВерсии = ПредыдущаяЗапись.ДатаВерсии; - + НомерВерсии = ПредыдущаяЗапись.НомерВерсии; + КонецЕсли; Иначе - - Объект = ОбъектИзДвоичныхДанных(Запись.ВерсияОбъекта.Получить()); ДатаВерсии = Запись.ДатаВерсии; - + НомерВерсии = Запись.НомерВерсии; КонецЕсли; - Объект.ДополнительныеСвойства.Вставить("ВерсионированиеОбъектовКомментарийКВерсии", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выполнен переход к версии №%1 от %2'"), Строка(НомерВерсии), Формат(ДатаВерсии, "ДЛФ=DT"))); - - Объект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); - Объект.Записать(); + ТекстСообщенияОбОшибке = ""; + ПерейтиНаВерсиюСервер(СсылкаНаОбъект, НомерВерсии, ТекстСообщенияОбОшибке); + + Если Не ПустаяСтрока(ТекстСообщенияОбОшибке) Тогда + ВызватьИсключение ТекстСообщенияОбОшибке; + КонецЕсли; Запись.ВерсияПроигнорирована = Истина; НаборЗаписей.Записать(); @@ -879,7 +885,7 @@ Запрос = Новый Запрос(ТекстЗапроса); Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл + Пока Выборка.Следующий() И ЗначениеЗаполнено(Выборка.ТипОбъекта) Цикл ОбъектМетаданных = Метаданные.НайтиПоТипу(Выборка.ТипОбъекта); МодульЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("КоличествоВерсийОбъекта." + ОбъектМетаданных.ПолноеИмя(), Выборка.Количество); КонецЦикла; @@ -904,6 +910,57 @@ #Область СлужебныеПроцедурыИФункции +// Возвращает табличный документ, заполненный данными объекта. +// +// Параметры: +// СсылкаНаОбъект - ЛюбаяСсылка. +// +// Возвращаемое значение: +// ТабличныйДокумент - печатная форма объекта. +// +Функция ОтчетПоВерсииОбъекта(СсылкаНаОбъект, Знач ВерсияОбъекта = Неопределено, ПользовательскийНомерВерсии = Неопределено) Экспорт + + НомерВерсии = Неопределено; + СериализованныйОбъект = Неопределено; + Если ТипЗнч(ВерсияОбъекта) = Тип("Число") Тогда + НомерВерсии = ВерсияОбъекта; + ИначеЕсли ТипЗнч(ВерсияОбъекта) = Тип("Строка") Тогда + СериализованныйОбъект = ВерсияОбъекта; + КонецЕсли; + + Если НомерВерсии = Неопределено Тогда + Если СериализованныйОбъект = Неопределено Тогда + СериализованныйОбъект = СериализоватьОбъект(СсылкаНаОбъект.ПолучитьОбъект()); + КонецЕсли; + ОписаниеОбъекта = РазборПредставленияОбъектаXML(СериализованныйОбъект, СсылкаНаОбъект); + ОписаниеОбъекта.Вставить("ИмяОбъекта", Строка(СсылкаНаОбъект)); + ОписаниеОбъекта.Вставить("АвторИзменения", ""); + ОписаниеОбъекта.Вставить("ДатаИзменения", ТекущаяДатаСеанса()); + ОписаниеОбъекта.Вставить("Комментарий", ""); + НомерВерсии = 0; + + ВерсионированиеОбъектовПереопределяемый.ПослеРазбораВерсииОбъекта(СсылкаНаОбъект, ОписаниеОбъекта); + Иначе + ОписаниеОбъекта = РазборВерсии(СсылкаНаОбъект, НомерВерсии); + КонецЕсли; + + Если ПользовательскийНомерВерсии = Неопределено Тогда + ПользовательскийНомерВерсии = НомерВерсии; + КонецЕсли; + + Описание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '№ %1 / (%2) / %3'"), ПользовательскийНомерВерсии, + Строка(ОписаниеОбъекта.ДатаИзменения), СокрЛП(Строка(ОписаниеОбъекта.АвторИзменения))); + + ОписаниеОбъекта.Вставить("Описание", Описание); + ОписаниеОбъекта.Вставить("НомерВерсии", НомерВерсии); + + ТабличныйДокумент = Новый ТабличныйДокумент; + СформироватьОтчетПоВерсииОбъекта(ТабличныйДокумент, ОписаниеОбъекта, СсылкаНаОбъект); + + Возврат ТабличныйДокумент; + +КонецФункции + // Возвращает номер последней записанной версии объекта. // // Параметры: @@ -912,7 +969,43 @@ // Возвращаемое значение: // Число - номер версии объекта. // -Функция НомерПоследнейВерсии(Ссылка) Экспорт +Функция НомерПоследнейВерсии(Ссылка, ИзмененныеПользователем = Ложь) Экспорт + + Если Ссылка.Пустая() Тогда + Возврат 0; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + ТекстЗапроса = + "ВЫБРАТЬ + | ЕСТЬNULL(МАКСИМУМ(ВерсииОбъектов.НомерВерсии), 0) КАК НомерВерсии + |ИЗ + | РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов + |ГДЕ + | ВерсииОбъектов.Объект = &Ссылка + | И &ДополнительноеУсловие"; + + Если ИзмененныеПользователем Тогда + ДополнительноеУсловие = "ВерсииОбъектов.ТипВерсииОбъекта = ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.ИзмененоПользователем)"; + Иначе + ДополнительноеУсловие = "ИСТИНА"; + КонецЕсли; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ДополнительноеУсловие", ДополнительноеУсловие); + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Ссылка", Ссылка); + Запрос.УстановитьПараметр("ИзмененныеПользователем", ИзмененныеПользователем); + + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + Возврат Выборка.НомерВерсии; + +КонецФункции + +// Номер предыдущей версии, измененной пользователем +Функция НомерПредыдущейВерсии(Ссылка, ТекущийНомерВерсии) Если Ссылка.Пустая() Тогда Возврат 0; @@ -923,12 +1016,15 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | ЕСТЬNULL(МАКСИМУМ(ВерсииОбъектов.НомерВерсии), 0) КАК НомерВерсии + | ЕСТЬNULL(МАКСИМУМ(ВерсииОбъектов.НомерВерсии), -1) КАК НомерВерсии |ИЗ | РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов |ГДЕ - | ВерсииОбъектов.Объект = &Ссылка"; + | ВерсииОбъектов.Объект = &Ссылка + | И ВерсииОбъектов.ТипВерсииОбъекта = ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.ИзмененоПользователем) + | И ВерсииОбъектов.НомерВерсии < &ТекущийНомерВерсии"; Запрос.УстановитьПараметр("Ссылка", Ссылка); + Запрос.УстановитьПараметр("ТекущийНомерВерсии", ТекущийНомерВерсии); Выборка = Запрос.Выполнить().Выбрать(); Выборка.Следующий(); @@ -977,11 +1073,14 @@ // // Возвращаемое значение - Объект или Неопределено. // -Функция ВосстановитьОбъектПоXML(Знач АдресВоВременномХранилище = "", ТекстСообщенияОбОшибке = "") Экспорт +Функция ВосстановитьОбъектПоXML(ДанныеОбъекта, ТекстСообщенияОбОшибке = "") Экспорт УстановитьПривилегированныйРежим(Истина); - ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВоВременномХранилище); + ДвоичныеДанные = ДанныеОбъекта; + Если ТипЗнч(ДанныеОбъекта) = Тип("Структура") Тогда + ДвоичныеДанные = ДанныеОбъекта.Объект; + КонецЕсли; ЧтениеFastInfoSet = Новый ЧтениеFastInfoSet; ЧтениеFastInfoSet.УстановитьДвоичныеДанные(ДвоичныеДанные); @@ -1043,7 +1142,7 @@ Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("НомерВерсии", Число(НомерВерсии)); - Результат = Новый Структура("ВерсияОбъекта, ТабличныеДокументы, АвторВерсии, ДатаВерсии, Комментарий"); + Результат = Новый Структура("ВерсияОбъекта, АвторВерсии, ДатаВерсии, Комментарий"); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда @@ -1053,10 +1152,6 @@ Результат.ВерсияОбъекта = ДанныеВерсииОбъекта(Ссылка, НомерВерсии, Выборка.КонтрольнаяСумма); КонецЕсли; - Если ТипЗнч(Результат.ВерсияОбъекта) = Тип("Структура") Тогда - Результат.ТабличныеДокументы = Результат.ВерсияОбъекта.ТабличныеДокументы; - Результат.ВерсияОбъекта = Результат.ВерсияОбъекта.Объект; - КонецЕсли; КонецЕсли; Если Результат.ВерсияОбъекта = Неопределено Тогда @@ -1072,7 +1167,9 @@ // версионирование, то он версионируется в соответствии с правилами // версионирования "по умолчанию". // -Функция ОбъектВерсионируется(Знач Источник, НомерПоследнейВерсии, РежимЗаписиПроведение = Ложь) Экспорт +Функция ОбъектВерсионируется(Знач Источник, НомерПоследнейВерсии, РежимЗаписиПроведение = Ложь) + + НомерПоследнейВерсии = НомерПоследнейВерсии(Источник.Ссылка); // Проверяем, что подсистема версионирования включена. Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьВерсионированиеОбъектов") Тогда @@ -1084,8 +1181,6 @@ ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.НеВерсионировать; КонецЕсли; - НомерПоследнейВерсии = НомерПоследнейВерсии(Источник.Ссылка); - Возврат НомерПоследнейВерсии > 0 Или ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриЗаписи Или ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриПроведении И (РежимЗаписиПроведение Или Источник.Проведен) @@ -1093,52 +1188,19 @@ КонецФункции -// Добавляет в дополнительные свойства сведения для записи версии объекта, -// полученного при обмене данными. -// -Процедура ДобавлениеСведенийОВерсииОбъектаПриОбменеДанными(Объект, АвторВерсии) - - Если ТипЗнч(Объект) <> Тип("УдалениеОбъекта") И ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(Объект.Метаданные()) Тогда - - СведенияОВерсииОбъекта = Новый Структура; - СведенияОВерсииОбъекта.Вставить("АвторВерсии", АвторВерсии); - СведенияОВерсииОбъекта.Вставить("ТипВерсииОбъекта", "ИзмененоПользователем"); - СведенияОВерсииОбъекта.Вставить("Комментарий", НСтр("ru = 'Версия получена при синхронизации данных.'")); - СведенияОВерсииОбъекта.Вставить("ОтложеннаяОбработка", Ложь); - Объект.ДополнительныеСвойства.Вставить("СведенияОВерсииОбъекта", Новый ФиксированнаяСтруктура(СведенияОВерсииОбъекта)); - - КонецЕсли; - -КонецПроцедуры - -// Записывает версию объекта в информационную базу. -// -// Параметры: -// Источник - Объект - записываемый объект ИБ; -// РежимЗаписи - РежимЗаписиДокумента. -// -//Процедура ЗаписатьВерсиюОбъекта(Источник, РежимЗаписиПроведение = Ложь) Экспорт -Процедура ЗаписатьВерсиюОбъекта(Источник, РежимЗаписи = Неопределено) Экспорт - Если Источник.ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - Если СтандартныеПодсистемыСервер.ЭтоИдентификаторОбъектаМетаданных(Источник) Тогда - Возврат; - КонецЕсли; - - Если Источник.ДополнительныеСвойства.Свойство("СведенияОВерсииОбъекта") Тогда - Возврат; - КонецЕсли; - - ПриСозданииВерсииОбъекта(Источник, РежимЗаписи); - -КонецПроцедуры - // Контрольная сумма по алгоритму MD5. Функция КонтрольнаяСумма(Данные) Экспорт ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.MD5); - ХешированиеДанных.Добавить(Данные); + + Если ТипЗнч(Данные) = Тип("Структура") Тогда + ХешированиеДанных.Добавить(Данные.Объект); + Если Данные.Свойство("ДополнительныеРеквизиты") Тогда + ХешированиеДанных.Добавить(ОбщегоНазначения.ЗначениеВСтрокуXML(Данные.ДополнительныеРеквизиты)); + КонецЕсли; + Иначе + ХешированиеДанных.Добавить(Данные); + КонецЕсли; + Возврат СтрЗаменить(ХешированиеДанных.ХешСумма, " ", ""); КонецФункции @@ -1167,7 +1229,7 @@ Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Результат = Выборка.ВерсияОбъекта.Получить(); - Если Результат = Неопределено И Выборка.НомерВерсии = НомерПоследнейВерсии(СсылкаНаОбъект) Тогда + Если Результат = Неопределено И Выборка.НомерВерсии = НомерПоследнейВерсии(СсылкаНаОбъект, Истина) Тогда Результат = ДанныеДляХранения(СсылкаНаОбъект); КонецЕсли; Возврат Результат; @@ -1217,10 +1279,10 @@ Запрос.УстановитьПараметр("Объект", Объект.Ссылка); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() И Не ПустаяСтрока(Выборка.КонтрольнаяСумма) Тогда - Возврат Выборка.КонтрольнаяСумма <> КонтрольнаяСумма(СериализоватьОбъект(Объект)); + Возврат Выборка.КонтрольнаяСумма <> КонтрольнаяСумма(ДанныеДляХранения(Объект)); КонецЕсли; - Возврат Объект.ЭтоНовый() Или КонтрольнаяСумма(СериализоватьОбъект(Объект)) <> КонтрольнаяСумма(СериализоватьОбъект(Объект.Ссылка.ПолучитьОбъект())); + Возврат Объект.ЭтоНовый() Или КонтрольнаяСумма(ДанныеДляХранения(Объект)) <> КонтрольнаяСумма(ДанныеДляХранения(Объект.Ссылка.ПолучитьОбъект())); КонецФункции @@ -1295,7 +1357,7 @@ КонецПроцедуры -Функция ГраницыУдаленияОбъектов() Экспорт +Функция ГраницыУдаленияОбъектов() Результат = Новый ТаблицаЗначений; Результат.Колонки.Добавить("СписокТипов", Новый ОписаниеТипов("Массив")); @@ -1352,7 +1414,7 @@ // Комментарий записывается, если пользователь является либо автором версии, либо администратором. Процедура ДобавитьКомментарийКВерсии(СсылкаНаОбъект, НомерВерсии, Комментарий) Экспорт - Если Не ЕстьПравоНаЧтениеВерсийОбъектов() Тогда + Если Не ЕстьПравоЧтенияДанныхВерсийОбъектов() Тогда Возврат; КонецЕсли; @@ -1372,7 +1434,7 @@ КонецПроцедуры // Предоставляет информацию о количестве и объеме устаревших версий объектов. -Функция ИнформацияОбУстаревшихВерсиях() Экспорт +Функция ИнформацияОбУстаревшихВерсиях() УстановитьПривилегированныйРежим(Истина); @@ -1452,7 +1514,7 @@ КонецПроцедуры // Строковое представление объемов данных. Например: "1,23 Гб". -Функция РазмерДанныхСтрокой(Знач РазмерДанных) Экспорт +Функция РазмерДанныхСтрокой(Знач РазмерДанных) ЕдиницаИзмерения = НСтр("ru = 'байт'"); Если 1024 <= РазмерДанных И РазмерДанных < 1024 * 1024 Тогда @@ -1509,35 +1571,39 @@ // формат: // СоответствиеИмя1 -> ТаблицаЗначений1 // | | ... | -// Поле1 Поле2 ПолеM1 +// Поле1 Поле2 ПолеM1. // // СоответствиеИмя2 -> ТаблицаЗначений2 // | | ... | -// Поле1 Поле2 ПолеM2 +// Поле1 Поле2 ПолеM2. // // // СоответствиеИмяN -> ТаблицаЗначенийN // | | ... | -// Поле1 Поле2 ПолеM3 +// Поле1 Поле2 ПолеM3. // // Соответствие ЗначенияРеквизитов // ИмяРеквизита1 -> Значение1 // ИмяРеквизита2 -> Значение2 // ... -// ИмяРеквизитаN -> ЗначениеN +// ИмяРеквизитаN -> ЗначениеN. // -Функция РазборПредставленияОбъектаXML(ДвоичныеДанные, Ссылка) Экспорт +Функция РазборПредставленияОбъектаXML(ДанныеВерсии, Ссылка) Экспорт - // Содержит имя метаданного измененного объекта. - Перем ИмяОбъекта; + Результат = Новый Структура; + Результат.Вставить("ТабличныеДокументы"); + Результат.Вставить("ДополнительныеРеквизиты"); + Результат.Вставить("СкрываемыеРеквизиты", Новый Массив); - // Содержит положение маркера в дереве XML. - // Требуется для идентификации текущего элемента. - Перем УровеньЧтения; + ДвоичныеДанные = ДанныеВерсии; + Если ТипЗнч(ДанныеВерсии) = Тип("Структура") Тогда + ДвоичныеДанные = ДанныеВерсии.Объект; + ДанныеВерсии.Свойство("ТабличныеДокументы", Результат.ТабличныеДокументы); + ДанныеВерсии.Свойство("ДополнительныеРеквизиты", Результат.ДополнительныеРеквизиты); + ДанныеВерсии.Свойство("СкрываемыеРеквизиты", Результат.СкрываемыеРеквизиты); + КонецЕсли; - // Содержат значения реквизитов справочников / документов. ЗначенияРеквизитов = Новый ТаблицаЗначений; - ЗначенияРеквизитов.Колонки.Добавить("НаименованиеРеквизита"); ЗначенияРеквизитов.Колонки.Добавить("ЗначениеРеквизита"); ЗначенияРеквизитов.Колонки.Добавить("ТипРеквизита"); @@ -1556,6 +1622,7 @@ // 4 - описание поля строки табличной части. УровеньЧтения = 0; + ИмяОбъекта = Неопределено; МетаданныеОбъекта = Ссылка.Метаданные(); ТабличныеЧастиМТД = МетаданныеОбъекта.ТабличныеЧасти; ТипЗначения = ""; @@ -1686,17 +1753,41 @@ КонецЕсли; КонецЦикла; - Результат = Новый Структура; Результат.Вставить("Реквизиты", ЗначенияРеквизитов); Результат.Вставить("ТабличныеЧасти", ТабличныеЧасти); + Если Результат.СкрываемыеРеквизиты <> Неопределено Тогда + Для Каждого ИмяРеквизита Из Результат.СкрываемыеРеквизиты Цикл + Если СтрЗаканчиваетсяНа(ИмяРеквизита, ".*") Тогда + ИмяТабличнойЧасти = Лев(ИмяРеквизита, СтрДлина(ИмяРеквизита) - 2); + Если Результат.ТабличныеЧасти[ИмяТабличнойЧасти] <> Неопределено Тогда + Результат.ТабличныеЧасти.Удалить(ИмяТабличнойЧасти); + КонецЕсли; + Иначе + НайденныеРеквизиты = Результат.Реквизиты.НайтиСтроки(Новый Структура("НаименованиеРеквизита", ИмяРеквизита)); + Для Каждого Реквизит Из НайденныеРеквизиты Цикл + Результат.Реквизиты.Удалить(Реквизит); + КонецЦикла; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если Результат.ДополнительныеРеквизиты <> Неопределено Тогда + Для Каждого ДополнительныйРеквизит Из Результат.ДополнительныеРеквизиты Цикл + Реквизит = ЗначенияРеквизитов.Добавить(); + Реквизит.НаименованиеРеквизита = ДополнительныйРеквизит.Наименование; + Реквизит.ЗначениеРеквизита = ДополнительныйРеквизит.Значение; + Реквизит.Тип = ТипЗнч(ДополнительныйРеквизит.Значение); + КонецЦикла; + КонецЕсли; + Возврат Результат; КонецФункции // Получает представление наименования системного реквизита. // -Функция ПолучитьПредставлениеРеквизитаНаЯзыке(Знач ИмяРеквизита) Экспорт +Функция ПолучитьПредставлениеРеквизитаНаЯзыке(Знач ИмяРеквизита) Если ИмяРеквизита = "Number" Тогда Возврат НСтр("ru = 'Номер'; en='Number'"); @@ -1760,7 +1851,7 @@ // ВерсияОбъекта - СправочникОбъект,ДокументОбъект - объект, данные которого необходимо отобразить в отчете. // НаименованиеОбъекта - Строка - наименование объекта, по которому. // -Процедура СформироватьПоСтандартномуМакету(ТЧОтчета, Макет, ВерсияОбъекта, Знач ОписаниеВерсии, СсылкаНаОбъект) Экспорт +Процедура СформироватьПоСтандартномуМакету(ТЧОтчета, Макет, ВерсияОбъекта, Знач ОписаниеВерсии, СсылкаНаОбъект) МетаданныеОбъекта = СсылкаНаОбъект.Метаданные(); @@ -1787,15 +1878,31 @@ // Шапка Шапка = Макет.ПолучитьОбласть("Шапка"); - Шапка.Параметры.Заполнить(ВерсияОбъекта); + Реквизиты = Новый Структура; + Для Каждого ОписаниеРеквизита Из ВерсияОбъекта.Реквизиты Цикл + ИмяРеквизита = ПолучитьПредставлениеРеквизитаНаЯзыке(ОписаниеРеквизита.НаименованиеРеквизита); + ЗначениеРеквизита = ОписаниеРеквизита.ЗначениеРеквизита; + Реквизиты.Вставить(ИмяРеквизита, ЗначениеРеквизита); + КонецЦикла; + Шапка.Параметры.Заполнить(Реквизиты); ТЧОтчета.Вывести(Шапка); Для Каждого МетаданныеТЧ Из МетаданныеОбъекта.ТабличныеЧасти Цикл Если ВерсияОбъекта.ТабличныеЧасти[МетаданныеТЧ.Имя].Количество() > 0 Тогда - Область = Макет.ПолучитьОбласть(МетаданныеТЧ.Имя+"Шапка"); + ИмяОбласти = МетаданныеТЧ.Имя + "Шапка"; + Если Макет.Области.Найти(ИмяОбласти) <> Неопределено Тогда + Область = Макет.ПолучитьОбласть(ИмяОбласти); + Иначе + Продолжить; + КонецЕсли; ТЧОтчета.Вывести(Область); - ОбластьДеталиПриходаТовара = Макет.ПолучитьОбласть(МетаданныеТЧ.Имя); + ИмяОбласти = МетаданныеТЧ.Имя; + Если Макет.Области.Найти(ИмяОбласти) <> Неопределено Тогда + ОбластьДеталиПриходаТовара = Макет.ПолучитьОбласть(ИмяОбласти); + Иначе + Продолжить; + КонецЕсли; Для Каждого ТекСтрокаДеталиПриходаТовара Из ВерсияОбъекта.ТабличныеЧасти[МетаданныеТЧ.Имя] Цикл ОбластьДеталиПриходаТовара.Параметры.Заполнить(ТекСтрокаДеталиПриходаТовара); ТЧОтчета.Вывести(ОбластьДеталиПриходаТовара); @@ -1854,7 +1961,7 @@ // Выводит изменившиеся реквизиты в отчет. При этом получает их представление. // -Функция ВывестиРеквизитыПоРазобранномуОбъекту(ТЧОтчета, ВерсияОбъекта, СсылкаНаОбъект) Экспорт +Функция ВывестиРеквизитыПоРазобранномуОбъекту(ТЧОтчета, ВерсияОбъекта, СсылкаНаОбъект) Секция = ТЧОтчета.ПолучитьОбласть("R6"); ВывестиТекстВОтчет(ТЧОтчета, Секция, "R1C1:R1C3", " "); @@ -1864,8 +1971,17 @@ ЧислоВыводимыхСтрок = 0; - Для Каждого ЭлементРеквизит Из ВерсияОбъекта.Реквизиты Цикл - СтруктураОписанияНаименования = НаименованиеВыводимогоРеквизита(СсылкаНаОбъект, ЭлементРеквизит.НаименованиеРеквизита); + Реквизиты = ВерсияОбъекта.Реквизиты.Скопировать(); + Реквизиты.Колонки.Добавить("СтруктураОписанияНаименования"); + Реквизиты.Колонки.Добавить("ВыводимоеНаименование"); + Для Каждого Реквизит Из Реквизиты Цикл + Реквизит.СтруктураОписанияНаименования = НаименованиеВыводимогоРеквизита(СсылкаНаОбъект, Реквизит.НаименованиеРеквизита); + Реквизит.ВыводимоеНаименование = Реквизит.СтруктураОписанияНаименования.ВыводимоеНаименование; + КонецЦикла; + Реквизиты.Сортировать("ВыводимоеНаименование"); + + Для Каждого ЭлементРеквизит Из Реквизиты Цикл + СтруктураОписанияНаименования = ЭлементРеквизит.СтруктураОписанияНаименования; Если Не СтруктураОписанияНаименования.ВыводитьРеквизит Тогда Продолжить; КонецЕсли; @@ -1894,7 +2010,7 @@ // Выводит табличные части по разобранному объекту, при выводе единственного объекта. // -Функция ВывестиТабличныеЧастиПоРазобранномуОбъекту(ТЧОтчета, ВерсияОбъекта, НомерСтрокиВывода, СсылкаНаОбъект) Экспорт +Функция ВывестиТабличныеЧастиПоРазобранномуОбъекту(ТЧОтчета, ВерсияОбъекта, НомерСтрокиВывода, СсылкаНаОбъект) ЧислоВыводимыхСтрок = 0; @@ -2054,7 +2170,7 @@ // "и" - изменение // "д" - добавление // "у" - удаление -// "" - обычный вывод +// "" - обычный вывод. Функция СформироватьСекторСтрокиТЧ(Знач ЗначениеЗаполнения,Знач ТипВывода = "") ОбщийШаблон = РегистрыСведений.ВерсииОбъектов.ПолучитьМакет("СтандартныйМакетПредставленияОбъекта"); @@ -2107,7 +2223,7 @@ Результат.Вставить("АвторИзменения", СокрЛП(Строка(СведенияОВерсии.АвторВерсии))); Результат.Вставить("ДатаИзменения", СведенияОВерсии.ДатаВерсии); Результат.Вставить("Комментарий", СведенияОВерсии.Комментарий); - Результат.Вставить("ТабличныеДокументы", СведенияОВерсии.ТабличныеДокументы); + ВерсионированиеОбъектовПереопределяемый.ПослеРазбораВерсииОбъекта(Ссылка, Результат); Возврат Результат; @@ -2191,29 +2307,102 @@ КонецФункции -Функция ДанныеДляХранения(СсылкаНаОбъект) +Функция ДанныеДляХранения(Знач Объект) + + СсылкаНаОбъект = Объект; + Если ОбщегоНазначения.ЗначениеСсылочногоТипа(Объект) Тогда + Объект = Объект.ПолучитьОбъект(); + Иначе + СсылкаНаОбъект = Объект.Ссылка; + КонецЕсли; + + ДанныеОбъекта = СериализоватьОбъект(Объект); - ДанныеОбъекта = СериализоватьОбъект(СсылкаНаОбъект.ПолучитьОбъект()); ТабличныеДокументы = ТабличныеДокументыОбъекта(СсылкаНаОбъект); - Если ТабличныеДокументы = Неопределено Или ТабличныеДокументы.Количество() = 0 Тогда - Результат = ДанныеОбъекта; // ДвоичныеДанные - Иначе - Результат = Новый Структура; - Результат.Вставить("Объект", ДанныеОбъекта); + ДополнительныеРеквизиты = КоллекцияДополнительныхРеквизитов(); + СкрываемыеРеквизиты = КоллекцияСкрываемыхРеквизитов(); + + ВерсионированиеОбъектовПереопределяемый.ПриПодготовкеДанныхОбъекта(Объект, ДополнительныеРеквизиты); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствамиСлужебный"); + МодульУправлениеСвойствамиСлужебный.ПриПодготовкеДанныхОбъекта(Объект, ДополнительныеРеквизиты); + СкрываемыеРеквизиты.Добавить("ДополнительныеРеквизиты.*"); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + МодульУправлениеКонтактнойИнформациейСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформациейСлужебный"); + МодульУправлениеКонтактнойИнформациейСлужебный.ПриПодготовкеДанныхОбъекта(Объект, ДополнительныеРеквизиты); + СкрываемыеРеквизиты.Добавить("КонтактнаяИнформация.*"); + КонецЕсли; + + МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(СсылкаНаОбъект); + Настройки = НастройкиПодсистемы(); + Попытка + МенеджерОбъекта.ПриОпределенииНастроекВерсионированияОбъектов(Настройки); + Исключение + Настройки = НастройкиПодсистемы(); + КонецПопытки; + + СлужебныеРеквизитыОбъекта = Новый Массив; + Если Настройки.ПриПолученииСлужебныхРеквизитов Тогда + МенеджерОбъекта.ПриПолученииСлужебныхРеквизитов(СлужебныеРеквизитыОбъекта); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(СкрываемыеРеквизиты, СлужебныеРеквизитыОбъекта); + КонецЕсли; + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(СкрываемыеРеквизиты, СлужебныеРеквизитыОбъектов()); + + Результат = Новый Структура; + + Если ТабличныеДокументы <> Неопределено И ТабличныеДокументы.Количество() > 0 Тогда Результат.Вставить("ТабличныеДокументы", ТабличныеДокументы); КонецЕсли; + Если ДополнительныеРеквизиты.Количество() > 0 Тогда + Результат.Вставить("ДополнительныеРеквизиты", ДополнительныеРеквизиты); + КонецЕсли; + + Если СкрываемыеРеквизиты.Количество() > 0 Тогда + Результат.Вставить("СкрываемыеРеквизиты", СкрываемыеРеквизиты); + КонецЕсли; + + Если Результат.Количество() > 0 Тогда + Результат.Вставить("Объект", ДанныеОбъекта); + Иначе + Результат = ДанныеОбъекта; + КонецЕсли; + Возврат Результат; КонецФункции +Функция КоллекцияДополнительныхРеквизитов() + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Идентификатор"); + Результат.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("Значение"); + + Возврат Результат; +КонецФункции + +Функция КоллекцияСкрываемыхРеквизитов() + Возврат Новый Массив; +КонецФункции + Функция ТабличныеДокументыОбъекта(Ссылка) Результат = Новый Структура; ВерсионированиеОбъектовПереопределяемый.ПриПолученииТабличныхДокументовОбъекта(Ссылка, Результат); Возврат Результат; КонецФункции +Функция СлужебныеРеквизитыОбъектов() + Реквизиты = Новый Массив; + Реквизиты.Добавить("Ref"); + Реквизиты.Добавить("IsFolder"); + + Возврат Реквизиты; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики служебных событий подсистем БСП. @@ -2237,7 +2426,132 @@ // Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт - ДобавлениеСведенийОВерсииОбъектаПриОбменеДанными(ЭлементДанных, Отправитель); + Если ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ВерсииОбъектов") И ЭлементДанных.Количество() > 0 Тогда + ПрочитатьИнформациюОбУзле(ЭлементДанных[0]); + + Объект = ЭлементДанных.Отбор.Объект.Значение; + КоличествоНесинхронизируемыхВерсий = КоличествоНесинхронизируемыхВерсий(Объект); + НомерВерсии = ЭлементДанных.Отбор.НомерВерсии.Значение - ЭлементДанных[0].Смещение + КоличествоНесинхронизируемыхВерсий; + ЭлементДанных[0].ВерсияВладелец = ЭлементДанных[0].ВерсияВладелец - ЭлементДанных[0].Смещение + КоличествоНесинхронизируемыхВерсий; + + НаборЗаписей = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Объект.Установить(ЭлементДанных.Отбор.Объект.Значение); + НаборЗаписей.Отбор.НомерВерсии.Установить(НомерВерсии); + НаборЗаписей.Прочитать(); + + Если ОбщегоНазначения.ЗначениеВСтрокуXML(ЭлементДанных) = ОбщегоНазначения.ЗначениеВСтрокуXML(НаборЗаписей) Тогда + // Считаем, что нет коллизии. + ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; + Возврат; + КонецЕсли; + + ЕстьКоллизия = ПланыОбмена.ИзменениеЗарегистрировано(Отправитель.Ссылка, Объект); + + ТипВерсииОбъекта = Перечисления.ТипыВерсийОбъекта.НепринятыеДанныеПоКоллизии; + Если Отправитель.ДополнительныеСвойства.Свойство("НепринятыеПоДатеЗапрета") + И Отправитель.ДополнительныеСвойства.НепринятыеПоДатеЗапрета[Объект] <> Неопределено Тогда + ЕстьКоллизия = Истина; + Если Отправитель.ДополнительныеСвойства.НепринятыеПоДатеЗапрета[Объект] = "НепринятыйПоДатеЗапретаОбъектСуществуетВБазе" Тогда + ТипВерсииОбъекта = Перечисления.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектСуществуетВБазе; + Иначе + ТипВерсииОбъекта = Перечисления.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектНеСуществуетВБазе; + КонецЕсли; + КонецЕсли; + + Если Не ЕстьКоллизия Тогда + // Если объект не был изменен, то версия перезаписывается без проверки, так как неизвестно, + // был ли изменен объект в узле-отправителе. + + Если НаборЗаписей.Количество() = 0 Тогда + Запись = НаборЗаписей.Добавить(); + Запись.Объект = Объект; + Запись.НомерВерсии = НомерВерсии; + Иначе + Запись = НаборЗаписей[0]; + КонецЕсли; + ЗаполнитьЗначенияСвойств(Запись, ЭлементДанных[0], , "Объект,НомерВерсии"); + Запись.НомерВерсии = НомерВерсии; + НаборЗаписей.Записать(); + ПланыОбмена.УдалитьРегистрациюИзменений(Отправитель.Ссылка, НаборЗаписей); + + ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; + Возврат; + КонецЕсли; + + Если ТипВерсииОбъекта = Перечисления.ТипыВерсийОбъекта.НепринятыеДанныеПоКоллизии Тогда + ВерсииКВыгрузке = ВерсииКВыгрузке(Объект, Отправитель.Ссылка); + Если ВерсииКВыгрузке.Количество() = 0 Тогда + Возврат; + КонецЕсли; + МинимальныйНомерВерсии = ВерсииКВыгрузке[0].НомерВерсии; + Для Счетчик = 1 По ВерсииКВыгрузке.Количество() - 1 Цикл + Если ВерсииКВыгрузке[Счетчик - 1].НомерВерсии - ВерсииКВыгрузке[Счетчик].НомерВерсии = 1 Тогда + МинимальныйНомерВерсии = Мин(МинимальныйНомерВерсии, ВерсииКВыгрузке[Счетчик].НомерВерсии); + Иначе + Прервать; + КонецЕсли; + КонецЦикла; + + Если МинимальныйНомерВерсии > НомерВерсии Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + КоллизииВерсийОбъектов = Новый Соответствие; + Если Отправитель.ДополнительныеСвойства.Свойство("КоллизииВерсийОбъектов") Тогда + КоллизииВерсийОбъектов = Отправитель.ДополнительныеСвойства.КоллизииВерсийОбъектов; + Иначе + Отправитель.ДополнительныеСвойства.Вставить("КоллизииВерсийОбъектов", КоллизииВерсийОбъектов); + КонецЕсли; + + НомерВерсииСКоллизией = КоллизииВерсийОбъектов[Объект]; + НомерПоследнейВерсии = НомерПоследнейВерсии(Объект); + ОбновитьВерсиюСКоллизией = Истина; + Если НомерВерсииСКоллизией = Неопределено Тогда + НомерВерсииСКоллизией = НомерПоследнейВерсии + 1; + + НаборЗаписей = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Объект.Установить(Объект); + НаборЗаписей.Отбор.НомерВерсии.Установить(НомерВерсииСКоллизией); + Запись = НаборЗаписей.Добавить(); + ЗаполнитьЗначенияСвойств(Запись, ЭлементДанных[0]); + Запись.НомерВерсии = НомерВерсииСКоллизией; + Запись.ТипВерсииОбъекта = ТипВерсииОбъекта; + Запись.ДатаВерсии = ТекущаяДатаСеанса(); + Запись.АвторВерсии = Отправитель.Ссылка; + Запись.Узел = ОбщегоНазначения.ПредметСтрокой(Запись.АвторВерсии); + Запись.Комментарий = НСтр("ru = 'Отклоненная версия (автоматическое разрешение конфликта).'"); + НаборЗаписей.Записать(); + НомерПоследнейВерсии = НомерВерсииСКоллизией; + КоллизииВерсийОбъектов.Вставить(Объект, НомерВерсииСКоллизией); + ОбновитьВерсиюСКоллизией = Ложь; + КонецЕсли; + НаборЗаписей = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Объект.Установить(Объект); + НаборЗаписей.Отбор.НомерВерсии.Установить(НомерПоследнейВерсии + 1); + Запись = НаборЗаписей.Добавить(); + ЗаполнитьЗначенияСвойств(Запись, ЭлементДанных[0]); + Запись.НомерВерсии = НомерПоследнейВерсии + 1; + Запись.ВерсияВладелец = НомерВерсииСКоллизией; + Запись.ТипВерсииОбъекта = ТипВерсииОбъекта; + НаборЗаписей.Записать(); + + Если ОбновитьВерсиюСКоллизией Тогда + НаборЗаписей = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Объект.Установить(Объект); + НаборЗаписей.Отбор.НомерВерсии.Установить(НомерВерсииСКоллизией); + НаборЗаписей.Прочитать(); + Для Каждого Запись Из НаборЗаписей Цикл + Запись.КонтрольнаяСумма = ЭлементДанных[0].КонтрольнаяСумма; + Запись.ВерсияОбъекта = ЭлементДанных[0].ВерсияОбъекта; + Запись.РазмерДанных = ЭлементДанных[0].РазмерДанных; + Запись.ЕстьДанныеВерсии = ЭлементДанных[0].ЕстьДанныеВерсии; + КонецЦикла; + НаборЗаписей.Записать(); + КонецЕсли; + + ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; + КонецЕсли; КонецПроцедуры @@ -2249,7 +2563,503 @@ // Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт - ДобавлениеСведенийОВерсииОбъектаПриОбменеДанными(ЭлементДанных, Отправитель); + Если Отправитель = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ВерсииОбъектов") И ЭлементДанных.Количество() > 0 Тогда + ПрочитатьИнформациюОбУзле(ЭлементДанных[0]); + + Объект = ЭлементДанных.Отбор.Объект.Значение; + КоличествоНесинхронизируемыхВерсий = КоличествоНесинхронизируемыхВерсий(Объект); + НомерВерсии = ЭлементДанных.Отбор.НомерВерсии.Значение - ЭлементДанных[0].Смещение + КоличествоНесинхронизируемыхВерсий; + ЭлементДанных[0].ВерсияВладелец = ЭлементДанных[0].ВерсияВладелец - ЭлементДанных[0].Смещение + КоличествоНесинхронизируемыхВерсий; + + НаборЗаписей = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Объект.Установить(Объект); + НаборЗаписей.Отбор.НомерВерсии.Установить(НомерВерсии); + НаборЗаписей.Прочитать(); + + Если ОбщегоНазначения.ЗначениеВСтрокуXML(ЭлементДанных) = ОбщегоНазначения.ЗначениеВСтрокуXML(НаборЗаписей) Тогда + // Считаем, что нет коллизии. + ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; + Возврат; + КонецЕсли; + + ЕстьКоллизия = Объект.ПолучитьОбъект() <> Неопределено И ПланыОбмена.ИзменениеЗарегистрировано(Отправитель.Ссылка, Объект); + + ТипВерсииОбъекта = Перечисления.ТипыВерсийОбъекта.НепринятыеДанныеПоКоллизии; + Если Отправитель.ДополнительныеСвойства.Свойство("НепринятыеПоДатеЗапрета") + И Отправитель.ДополнительныеСвойства.НепринятыеПоДатеЗапрета[Объект] <> Неопределено Тогда + ЕстьКоллизия = Истина; + Если Отправитель.ДополнительныеСвойства.НепринятыеПоДатеЗапрета[Объект] = "НепринятыйПоДатеЗапретаОбъектСуществуетВБазе" Тогда + ТипВерсииОбъекта = Перечисления.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектСуществуетВБазе; + Иначе + ТипВерсииОбъекта = Перечисления.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектНеСуществуетВБазе; + КонецЕсли; + КонецЕсли; + + ВерсииКВыгрузке = ВерсииКВыгрузке(Объект, Отправитель.Ссылка); + Для Каждого ВерсияКВыгрузке Из ВерсииКВыгрузке Цикл + Если ВерсияКВыгрузке.НомерВерсии = НомерВерсии Тогда + ЕстьКоллизия = Истина; + КонецЕсли; + КонецЦикла; + + Если Не ЕстьКоллизия Тогда + // Если объект не был изменен, то версия перезаписывается без проверки, так как неизвестно, + // был ли изменен объект в узле-отправителе. + Если НаборЗаписей.Количество() = 0 Тогда + Запись = НаборЗаписей.Добавить(); + Запись.Объект = Объект; + Запись.НомерВерсии = НомерВерсии; + Иначе + Запись = НаборЗаписей[0]; + КонецЕсли; + ЗаполнитьЗначенияСвойств(Запись, ЭлементДанных[0], , "Объект,НомерВерсии"); + НаборЗаписей.Записать(); + ПланыОбмена.УдалитьРегистрациюИзменений(Отправитель.Ссылка, НаборЗаписей); + ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; + Возврат; + КонецЕсли; + + НомерПоследнейВерсии = НомерПоследнейВерсии(Объект); + ПоследняяВерсия = РегистрыСведений.ВерсииОбъектов.СоздатьМенеджерЗаписи(); + ПоследняяВерсия.Объект = Объект; + ПоследняяВерсия.НомерВерсии = НомерПоследнейВерсии; + ПоследняяВерсия.Прочитать(); + Если Не ПоследняяВерсия.ЕстьДанныеВерсии Тогда + ПоследняяВерсия.ВерсияОбъекта = Новый ХранилищеЗначения(ДанныеДляХранения(Объект), Новый СжатиеДанных(9)); + ПоследняяВерсия.Записать(); + КонецЕсли; + + Если ВерсииКВыгрузке.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Для Каждого ОписаниеВерсии Из ВерсииКВыгрузке Цикл + Если ОписаниеВерсии.НомерВерсии >= НомерВерсии Тогда + НаборЗаписей = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Объект.Установить(Объект); + НаборЗаписей.Отбор.НомерВерсии.Установить(ОписаниеВерсии.НомерВерсии); + НаборЗаписей.Прочитать(); + ПланыОбмена.УдалитьРегистрациюИзменений(Отправитель.Ссылка, НаборЗаписей); + КонецЕсли; + КонецЦикла; + + КоллизииВерсийОбъектов = Новый Соответствие; + Если Отправитель.ДополнительныеСвойства.Свойство("КоллизииВерсийОбъектов") Тогда + КоллизииВерсийОбъектов = Отправитель.ДополнительныеСвойства.КоллизииВерсийОбъектов; + Иначе + Отправитель.ДополнительныеСвойства.Вставить("КоллизииВерсийОбъектов", КоллизииВерсийОбъектов); + КонецЕсли; + + НомерВерсииСКоллизией = КоллизииВерсийОбъектов[Объект]; + СдвигНомераВерсии = 1; + УстановитьВладельцаНепринятыхВерсий = Ложь; + Если НомерВерсииСКоллизией = Неопределено Тогда + СдвигНомераВерсии = 2; + НомерВерсииСКоллизией = НомерВерсии + 1; + УстановитьВладельцаНепринятыхВерсий = Истина; + КонецЕсли; + + НаборЗаписей = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Объект.Установить(Объект); + НаборЗаписей.Прочитать(); + ВерсииОбъекта = НаборЗаписей.Выгрузить(); + Для Каждого Версия Из ВерсииОбъекта Цикл + НаборЗаписей.Отбор.НомерВерсии.Установить(Версия.НомерВерсии); + НаборЗаписей.Прочитать(); + Запись = НаборЗаписей[0]; + Записать = Ложь; + Если Запись.ВерсияВладелец >= НомерВерсии Тогда + Запись.ВерсияВладелец = Запись.ВерсияВладелец + СдвигНомераВерсии; + Записать = Истина; + КонецЕсли; + Если Запись.НомерВерсии >= НомерВерсии Тогда + Запись.НомерВерсии = Запись.НомерВерсии + СдвигНомераВерсии; + Запись.ТипВерсииОбъекта = ТипВерсииОбъекта; + Если УстановитьВладельцаНепринятыхВерсий И Не ЗначениеЗаполнено(Запись.ВерсияВладелец) Тогда + Запись.ВерсияВладелец = НомерВерсииСКоллизией; + КонецЕсли; + Записать = Истина; + КонецЕсли; + Если Записать Тогда + Записи = НаборЗаписей.Выгрузить(); + НаборЗаписей.Очистить(); + НаборЗаписей.Записать(); + НаборЗаписей.Отбор.НомерВерсии.Установить(Записи[0].НомерВерсии); + НаборЗаписей.Загрузить(Записи); + НаборЗаписей.Записать(); + КонецЕсли; + КонецЦикла; + + Если КоллизииВерсийОбъектов[Объект] = Неопределено Тогда + НомерВерсииСКоллизией = НомерВерсии + 1; + + НаборЗаписей = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Объект.Установить(Объект); + НаборЗаписей.Отбор.НомерВерсии.Установить(НомерВерсииСКоллизией); + Запись = НаборЗаписей.Добавить(); + + ПоследняяВерсияКВыгрузке = РегистрыСведений.ВерсииОбъектов.СоздатьМенеджерЗаписи(); + ПоследняяВерсияКВыгрузке.Объект = Объект; + ПоследняяВерсияКВыгрузке.НомерВерсии = ВерсииКВыгрузке[0].НомерВерсии + СдвигНомераВерсии; + ПоследняяВерсияКВыгрузке.Прочитать(); + + ЗаполнитьЗначенияСвойств(Запись, ПоследняяВерсияКВыгрузке, , "ВерсияВладелец"); + Запись.НомерВерсии = НомерВерсииСКоллизией; + Запись.ДатаВерсии = ТекущаяДатаСеанса(); + Запись.Комментарий = НСтр("ru = 'Отклоненная версия (автоматическое разрешение конфликта).'"); + Запись.АвторВерсии = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Отправитель.Ссылка).ЭтотУзел(); + + Если Не Запись.ЕстьДанныеВерсии Тогда + Запись.ВерсияОбъекта = Новый ХранилищеЗначения(ДанныеДляХранения(Запись.Объект), Новый СжатиеДанных(9)) + КонецЕсли; + НаборЗаписей.Записать(); + + КоллизииВерсийОбъектов.Вставить(Объект, НомерВерсииСКоллизией); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной +// информационной базе. +// +// Параметры: +// см. описание обработчика события ПриОтправкеДанныхПодчиненному() в синтаксис-помощнике. +// +Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель) Экспорт + + ПриОтправкеДанныхПолучателю(ЭлементДанных, ОтправкаЭлемента, Получатель); + +КонецПроцедуры + +// Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной +// информационной базе. +// +// Параметры: +// см. описание обработчика события ПриОтправкеДанныхГлавному() в синтаксис-помощнике. +// +Процедура ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Получатель) Экспорт + + ПриОтправкеДанныхПолучателю(ЭлементДанных, ОтправкаЭлемента, Получатель); + +КонецПроцедуры + +Процедура ПриОтправкеДанныхПолучателю(ЭлементДанных, ОтправкаЭлемента, Получатель) + + Если ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ВерсииОбъектов") И ЭлементДанных.Количество() > 0 Тогда + Запись = ЭлементДанных[0]; + + Если Не Запись.Синхронизируется Тогда + ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; + Возврат; + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + Отказ = Ложь; + Объект = Запись.Объект.ПолучитьОбъект(); + МодульОбменДаннымиСобытия = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСобытия"); + МодульОбменДаннымиСобытия.МеханизмРегистрацииОбъектовПередЗаписью(Получатель.Метаданные().Имя, Объект, Отказ); + Если Отказ Или Не Объект.ОбменДанными.Получатели.Содержит(Получатель.Ссылка) Тогда + ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; + Возврат; + КонецЕсли; + КонецЕсли; + + ДобавитьИнформациюОбУзле(Запись, Получатель); + + Если НомерПоследнейВерсии(Запись.Объект, Истина) = Запись.НомерВерсии Тогда + Запись.ВерсияОбъекта = Новый ХранилищеЗначения(ДанныеДляХранения(Запись.Объект), Новый СжатиеДанных(9)); + Запись.РазмерДанных = РазмерДанных(Запись.ВерсияОбъекта); + Запись.ЕстьДанныеВерсии = Истина; + КонецЕсли; + + Запись.Смещение = КоличествоНесинхронизируемыхВерсий(Запись.Объект); + КонецЕсли; + +КонецПроцедуры + +Функция РазмерДанных(Данные) Экспорт + Возврат Base64Значение(СериализаторXDTO.XMLСтрока(Данные)).Размер(); +КонецФункции + +Процедура ДобавитьИнформациюОбУзле(Запись, Получатель) + + Если Запись.Узел = ОбщегоНазначения.ПредметСтрокой(Получатель.Ссылка) Тогда + Запись.Узел = ""; + Иначе + Если ПустаяСтрока(Запись.Узел) Тогда + ПланОбменаМенеджер = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Получатель.Ссылка); + Запись.Узел = ОбщегоНазначения.ПредметСтрокой(ПланОбменаМенеджер.ЭтотУзел()); + КонецЕсли; + КонецЕсли; + + Если Запись.АвторВерсии = Неопределено Тогда + Возврат; + КонецЕсли; + МетаданныеАвтора = Запись.АвторВерсии.Метаданные(); + Если ОбщегоНазначения.ЭтоПланОбмена(МетаданныеАвтора) Тогда + Запись.Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("<АвторВерсии>%1;%2</АвторВерсии>", + МетаданныеАвтора.Имя, ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Запись.АвторВерсии, "Код")) + + Запись.Комментарий; + КонецЕсли; + +КонецПроцедуры + +Процедура ПрочитатьИнформациюОбУзле(Запись) + + Если СтрНачинаетсяС(Запись.Комментарий, "<АвторВерсии>") Тогда + Позиция = СтрНайти(Запись.Комментарий, "</АвторВерсии>"); + Если Позиция > 0 Тогда + ОписаниеУзла = Лев(Запись.Комментарий, Позиция - 1); + Запись.Комментарий = Сред(Запись.Комментарий, Позиция + СтрДлина("</АвторВерсии>")); + ОписаниеУзла = Сред(ОписаниеУзла, СтрДлина("<АвторВерсии>") + 1); + ОписаниеУзла = СтрРазделить(ОписаниеУзла, ";"); + ИмяУзла = ОписаниеУзла[0]; + КодУзла = ОписаниеУзла[1]; + АвторВерсии = ПланыОбмена[ИмяУзла].НайтиПоКоду(КодУзла); + Если ЗначениеЗаполнено(АвторВерсии) Тогда + Запись.АвторВерсии = АвторВерсии; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если Запись.АвторВерсии = Неопределено Тогда + Возврат; + КонецЕсли; + МетаданныеАвтора = Запись.АвторВерсии.Метаданные(); + + Если ОбщегоНазначения.ЭтоПланОбмена(МетаданныеАвтора) Тогда + ПланОбменаМенеджер = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Запись.АвторВерсии); + Если Запись.АвторВерсии = ПланОбменаМенеджер.ЭтотУзел() Тогда + Запись.Узел = ""; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Функция ВерсииКВыгрузке(Объект, Узел) + + ТекстЗапроса = + "ВЫБРАТЬ + | ВерсииОбъектовИзменения.НомерВерсии КАК НомерВерсии + |ИЗ + | РегистрСведений.ВерсииОбъектов.Изменения КАК ВерсииОбъектовИзменения + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов + | ПО ВерсииОбъектовИзменения.Объект = ВерсииОбъектов.Объект + | И ВерсииОбъектовИзменения.НомерВерсии = ВерсииОбъектов.НомерВерсии + |ГДЕ + | ВерсииОбъектовИзменения.Объект = &Объект + | И ВерсииОбъектовИзменения.Узел = &Узел + | + |УПОРЯДОЧИТЬ ПО + | НомерВерсии УБЫВ"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Объект", Объект); + Запрос.УстановитьПараметр("Узел", Узел); + + Возврат Запрос.Выполнить().Выгрузить(); + +КонецФункции + +Функция НастройкиПодсистемы() + Результат = Новый Структура; + Результат.Вставить("ПриПолученииСлужебныхРеквизитов", Ложь); + + Возврат Результат; +КонецФункции + +Функция КоличествоНесинхронизируемыхВерсий(Объект) + + ТекстЗапроса = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(1) КАК Количество + |ИЗ + | РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов + |ГДЕ + | НЕ ВерсииОбъектов.Синхронизируется + | И ВерсииОбъектов.Объект = &Объект"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Объект", Объект); + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + Возврат Выборка.Количество; + КонецЕсли; + + Возврат 0; + +КонецФункции + +Функция ВыполняетсяЗаписьОбъекта(Значение = Неопределено) Экспорт + Если Значение <> Неопределено Тогда + ПараметрыСеанса.ВыполняетсяЗаписьОбъекта = Значение; + Возврат Значение; + КонецЕсли; + Возврат ПараметрыСеанса.ВыполняетсяЗаписьОбъекта; +КонецФункции + +Функция РегистрВерсийВходитВСоставПланаОбмена(Отправитель) + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(Отправитель)); + Возврат ОбъектМетаданных.Состав.Содержит(Метаданные.РегистрыСведений.ВерсииОбъектов); +КонецФункции + +Функция ПерейтиНаВерсиюСервер(Ссылка, НомерВерсии, ТекстСообщенияОбОшибке, ОтменаПроведения = Ложь) + + ПользовательскоеПредставлениеНомера = НомерВерсииВИерархии(Ссылка, НомерВерсии); + Информация = СведенияОВерсииОбъекта(Ссылка, НомерВерсии); + + ДополнительныеРеквизиты = Неопределено; + Если ТипЗнч(Информация.ВерсияОбъекта) = Тип("Структура") Тогда + Если Информация.ВерсияОбъекта.Свойство("ДополнительныеРеквизиты", ДополнительныеРеквизиты) Тогда + НайденныеРеквизиты = ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Идентификатор", Неопределено)); + Для Каждого Реквизит Из НайденныеРеквизиты Цикл + ДополнительныеРеквизиты.Удалить(Реквизит); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + ТекстСообщенияОбОшибке = ""; + Объект = ВосстановитьОбъектПоXML(Информация.ВерсияОбъекта, ТекстСообщенияОбОшибке); + + Если Не ПустаяСтрока(ТекстСообщенияОбОшибке) Тогда + Возврат "ОшибкаВосстановления"; + КонецЕсли; + + Объект.ДополнительныеСвойства.Вставить("ВерсионированиеОбъектовКомментарийКВерсии", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выполнен переход к версии №%1 от %2'"), + ПользовательскоеПредставлениеНомера, + Формат(Информация.ДатаВерсии, "ДЛФ=DT"))); + + НачатьТранзакцию(); + + РежимЗаписи = Неопределено; + ИдентификаторОшибки = "ОшибкаВосстановления"; + + Если ОбщегоНазначения.ЭтоДокумент(Объект.Метаданные()) Тогда + Если Объект.Проведен И Не ОтменаПроведения Тогда + РежимЗаписи = РежимЗаписиДокумента.Проведение; + Иначе + РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения; + КонецЕсли; + ИдентификаторОшибки = "ОшибкаПроведения"; + КонецЕсли; + + ЗаписатьДанныеТекущейВерсии(Ссылка); + ВыполняетсяЗаписьОбъекта(Истина); + Попытка + Если ЗначениеЗаполнено(РежимЗаписи) Тогда + Объект.Записать(РежимЗаписи); + Иначе + Объект.Записать(); + КонецЕсли; + Если ЗначениеЗаполнено(ДополнительныеРеквизиты) Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствамиСлужебный"); + МодульУправлениеСвойствамиСлужебный.ПриВосстановленииВерсииОбъекта(Объект, ДополнительныеРеквизиты); + КонецЕсли; + ВерсионированиеОбъектовПереопределяемый.ПриВосстановленииВерсииОбъекта(Объект, ДополнительныеРеквизиты); + КонецЕсли; + ВыполняетсяЗаписьОбъекта(Ложь); + ЗаписатьВерсиюОбъекта(Объект); + ЗафиксироватьТранзакцию(); + Исключение + ВыполняетсяЗаписьОбъекта(Ложь); + ОтменитьТранзакцию(); + ТекстСообщенияОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Возврат ИдентификаторОшибки; + КонецПопытки; + + Возврат "ВосстановлениеВыполнено"; + +КонецФункции + +Функция НомерВерсииВИерархии(Ссылка, НомерВерсии) + + Если ЕстьПравоЧтенияДанныхВерсийОбъектов() Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ + | ВерсииОбъектов.НомерВерсии КАК НомерВерсии, + | ВерсииОбъектов.ВерсияВладелец + |ИЗ + | РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов + |ГДЕ + | ВерсииОбъектов.Объект = &Ссылка + | + |УПОРЯДОЧИТЬ ПО + | НомерВерсии УБЫВ"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Ссылка", Ссылка); + + ТаблицаВерсий = Запрос.Выполнить().Выгрузить(); + + ДеревоВерсий = Новый ДеревоЗначений; + ДеревоВерсий.Колонки.Добавить("НомерВерсии"); + ДеревоВерсий.Колонки.Добавить("ПредставлениеНомераВерсии"); + ДеревоВерсий.Колонки.Добавить("Отклонена", Новый ОписаниеТипов("Булево")); + + ЗаполнитьИерархиюВерсий(ДеревоВерсий, ТаблицаВерсий); + ПронумероватьВерсии(ДеревоВерсий.Строки); + + ОписаниеВерсии = ДеревоВерсий.Строки.Найти(НомерВерсии, "НомерВерсии", Истина); + Результат = ОписаниеВерсии; + Если Результат <> Неопределено Тогда + Результат = ОписаниеВерсии.ПредставлениеНомераВерсии; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Процедура ЗаполнитьИерархиюВерсий(ИерархияВерсий, СписокВерсий) + + ПропущенныеВерсии = Новый Массив; + Для Каждого ОписаниеВерсии Из СписокВерсий Цикл + Если ОписаниеВерсии.ВерсияВладелец = 0 Тогда + Элемент = ИерархияВерсий.Строки.Добавить(); + Иначе + НайденнаяВерсия = ИерархияВерсий.Строки.Найти(ОписаниеВерсии.ВерсияВладелец, "НомерВерсии", Истина); + Если НайденнаяВерсия <> Неопределено Тогда + Элемент = НайденнаяВерсия.Строки.Добавить(); + НайденнаяВерсия.Отклонена = Истина; + Иначе + ПропущенныеВерсии.Добавить(ОписаниеВерсии); + Продолжить; + КонецЕсли; + КонецЕсли; + ЗаполнитьЗначенияСвойств(Элемент, ОписаниеВерсии); + КонецЦикла; + + Если ПропущенныеВерсии.Количество() > 0 Тогда + Если СписокВерсий.Количество() = ПропущенныеВерсии.Количество() Тогда + Возврат; + КонецЕсли; + ЗаполнитьИерархиюВерсий(ИерархияВерсий, ПропущенныеВерсии); + КонецЕсли; + +КонецПроцедуры + +Процедура ПронумероватьВерсии(КоллекцияВерсий) + + ТекущийНомерВерсии = КоллекцияВерсий.Количество(); + Для Каждого Версия Из КоллекцияВерсий Цикл + ПрефиксНомера = ""; + Если Версия.Родитель <> Неопределено И Не ПустаяСтрока(Версия.Родитель.ПредставлениеНомераВерсии) Тогда + ПрефиксНомера = Версия.Родитель.ПредставлениеНомераВерсии + "."; + КонецЕсли; + + Версия.ПредставлениеНомераВерсии = ПрефиксНомера + Формат(ТекущийНомерВерсии, "ЧГ=0"); + ПронумероватьВерсии(Версия.Строки); + ТекущийНомерВерсии = ТекущийНомерВерсии - 1; + КонецЦикла; КонецПроцедуры diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектовПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектовПереопределяемый/Module.bsl index 93cc2925f..d7a2fc8f0 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектовПереопределяемый/Module.bsl @@ -6,7 +6,9 @@ #Область ПрограммныйИнтерфейс // Вызывается для получения версионируемых табличных документов во время записи версии объекта. -// +// Табличный документ прикладывается к версии объекта в случае, когда в отчете по версии объекта требуется +// заменить "техногенную" табличную часть объекта на ее представление в виде табличного документа. +// // Параметры: // Ссылка - Ссылка на версионируемый объект конфигурации. // ТабличныеДокументы - Структура - содержит данные: @@ -14,9 +16,6 @@ // * Значение - Структура - содержит поля: // * Наименование - Строка - Наименование табличного документа; // * Данные - ТабличныйДокумент - версионируемый табличный документ. -// -// Возвращаемое значение: -// Процедура ПриПолученииТабличныхДокументовОбъекта(Ссылка, ТабличныеДокументы) Экспорт КонецПроцедуры @@ -55,4 +54,32 @@ КонецПроцедуры +// Дополняет объект реквизитами, хранящимися отдельно от объекта, либо в служебной части самого объекта, +// не предназначенной для вывода в отчетах. +// +// Параметры: +// Объект - Объект - версионируемый объект. +// ДополнительныеРеквизиты - ТаблицаЗначений - коллекция дополнительных реквизитов, которые требуется сохранить вместе +// с версией объекта: +// * Идентификатор - Произвольный - уникальный идентификатор реквизита. Требуется при восстановлении из версии +// объекта в случае, когда значение реквизита хранится отдельно от объекта. +// * Наименование - Строка - название реквизита. +// * Значение - Произвольный - значение реквизита. +Процедура ПриПодготовкеДанныхОбъекта(Объект, ДополнительныеРеквизиты) Экспорт + +КонецПроцедуры + +// Восстанавливает значения реквизитов объекта, хранящихся отдельно от объекта. +// +// Параметры: +// Объект - Объект - версионируемый объект. +// ДополнительныеРеквизиты - ТаблицаЗначений - коллекция дополнительных реквизитов, которые были сохранены вместе с +// версией объекта: +// * Идентификатор - Произвольный - уникальный идентификатор реквизита. +// * Наименование - Строка - название реквизита. +// * Значение - Произвольный - значение реквизита. +Процедура ПриВосстановленииВерсииОбъекта(Объект, ДополнительныеРеквизиты) Экспорт + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl index 8c003cd8e..d86213363 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl @@ -36,29 +36,12 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в эту подсистему. -// Записывает версию объекта в информационную базу. Вызывается при выполнении -// обмена данными с другой информационной базой. -// -// Параметры: -// Источник - Объект - записываемый объект ИБ; -// Отказ - Булево - признак отказа от записи объекта. -// -Процедура ЗаписатьВерсиюОбъектаПриОбменеДанными(Источник, Отказ) Экспорт - - Если Источник.ДополнительныеСвойства.Свойство("СведенияОВерсииОбъекта") Тогда - - ВерсионированиеОбъектов.ПриСозданииВерсииОбъектаПоОбменуДанными(Источник); - - КонецЕсли; - -КонецПроцедуры - // См. описание одноименной процедуры в общем модуле РегламентныеЗаданияПереопределяемый. // -Процедура ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости) Экспорт - Зависимость = Зависимости.Добавить(); - Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОчисткаУстаревшихВерсийОбъектов; - Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьВерсионированиеОбъектов; +Процедура ПриОпределенииНастроекРегламентныхЗаданий(Настройки) Экспорт + Настройка = Настройки.Добавить(); + Настройка.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОчисткаУстаревшихВерсийОбъектов; + Настройка.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьВерсионированиеОбъектов; КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/Взаимодействия/Module.bsl b/SSL/src/CommonModules/Взаимодействия/Module.bsl index e951d9e3f..7ec12ac9a 100644 --- a/SSL/src/CommonModules/Взаимодействия/Module.bsl +++ b/SSL/src/CommonModules/Взаимодействия/Module.bsl @@ -275,7 +275,7 @@ // См. описание одноименной процедуры в общем модуле РегламентныеЗаданияПереопределяемый. // -Процедура ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости) Экспорт +Процедура ПриОпределенииНастроекРегламентныхЗаданий(Зависимости) Экспорт Зависимость = Зависимости.Добавить(); Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОбновлениеСтатусовДоставкиSMS; Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьПочтовыйКлиент; @@ -285,11 +285,13 @@ Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОтправкаSMS; Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьПочтовыйКлиент; Зависимость.ДоступноВМоделиСервиса = Ложь; + Зависимость.РаботаетСВнешнимиРесурсами = Истина; Зависимость = Зависимости.Добавить(); Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ПолучениеИОтправкаЭлектронныхПисем; Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьПочтовыйКлиент; Зависимость.ДоступноВМоделиСервиса = Ложь; + Зависимость.РаботаетСВнешнимиРесурсами = Истина; КонецПроцедуры #КонецОбласти @@ -741,26 +743,6 @@ КонецФункции -// Возвращает флаг необходимости оповещения формы взаимодействия-основания. -// Параметры: -// Основание - структура, содержащая ссылку на взаимодействие, из которого создается контакт. -// -Функция ЕстьРеспондент(Основание) Экспорт - - Если ЗначениеЗаполнено(Основание) И ТипЗнч(Основание) = Тип("Структура") Тогда - Для Каждого Элемент Из Основание Цикл - Если Элемент.Ключ = "Объект" - И ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Элемент.Значение) Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - Возврат Ложь; - Иначе - Возврат Ложь; - КонецЕсли; - -КонецФункции - // Возвращает массив, содержащий структуры с информацией о контактах взаимодействия // или участниках предмета взаимодействия. // @@ -933,7 +915,7 @@ // Возвращаемое значение: // ТаблицаЗначений - таблица значений, которая содержит информацию о контактах. // -Функция ПолучитьВсеКонтактыПоEmail(Адрес) Экспорт +Функция ПолучитьВсеКонтактыПоEmail(Адрес) Если ПустаяСтрока(Адрес) Тогда Возврат Неопределено; @@ -980,7 +962,7 @@ // Возвращаемое значение: // Строка - дополнение запроса. // -Функция ПолучитьСтрокуСоединенияДляЗапросаИнформацииОКонтактах(ВключатьEmail,ИмяСправочника) Экспорт +Функция ПолучитьСтрокуСоединенияДляЗапросаИнформацииОКонтактах(ВключатьEmail,ИмяСправочника) Если (Не ВключатьEmail) ИЛИ (НЕ ОбщегоНазначения.НаличиеТабличнойЧастиУСправочника(ИмяСправочника,"КонтактнаяИнформация")) Тогда @@ -1008,7 +990,7 @@ // Возвращаемое значение: // Строка - строка, дополняющая запрос. // -Функция ПолучитьСтрокуПроАдресДляЗапросаИнформацииОКонтактах(ВключатьEmail,ИмяСправочника,ИменоватьПоле = Ложь) Экспорт +Функция ПолучитьСтрокуПроАдресДляЗапросаИнформацииОКонтактах(ВключатьEmail,ИмяСправочника,ИменоватьПоле = Ложь) Если Не ВключатьEmail Тогда @@ -1101,7 +1083,7 @@ // Возвращаемое значение: // Строка - текст запроса. // -Функция СформироватьТекстЗапросаДляПоискаПоEmail(ПоискПоСписку,ИтогиПоEmail = Ложь) Экспорт +Функция СформироватьТекстЗапросаДляПоискаПоEmail(ПоискПоСписку,ИтогиПоEmail = Ложь) МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ПолучитьМассивОписанияВозможныхКонтактов(); @@ -1380,7 +1362,7 @@ // Возвращаемое значение: // Строка - сформированный текст шаблона условия. // -Функция ПолучитьШаблонУсловияНаСсылкиКонтактовДляЗапроса() Экспорт +Функция ПолучитьШаблонУсловияНаСсылкиКонтактовДляЗапроса() МассивОписанияТиповКонтактов = ВзаимодействияКлиентСервер.ПолучитьМассивОписанияВозможныхКонтактов(); @@ -1437,7 +1419,7 @@ // Возвращаемое значение: // ТаблицаЗначений - таблица, содержащая информацию о найденных контактах. // -Функция ПолучитьКонтактыПоДоменномуАдресу(ИмяДомена) Экспорт +Функция ПолучитьКонтактыПоДоменномуАдресу(ИмяДомена) Если ПустаяСтрока(ИмяДомена) Тогда Возврат Неопределено; @@ -1796,75 +1778,6 @@ КонецФункции -// Получает количество взаимодействий по контакту. -// Параметры: -// Контакт - ссылка на контакт. -// -// Возвращаемое значение: -// Число - количество взаимодействий по контакту. -// -Функция ПолучитьКоличествоВзаимодействийПоКонтакту(Контакт) Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВложенныйЗапрос.Ссылка) КАК Количество - |ИЗ - | (ВЫБРАТЬ РАЗЛИЧНЫЕ - | ВстречаУчастники.Ссылка КАК Ссылка - | ИЗ - | Документ.Встреча.Участники КАК ВстречаУчастники - | ГДЕ - | ВстречаУчастники.Контакт В(&Контакт) - | - | ОБЪЕДИНИТЬ ВСЕ - | - | ВЫБРАТЬ - | ТелефонныйЗвонок.Ссылка - | ИЗ - | Документ.ТелефонныйЗвонок КАК ТелефонныйЗвонок - | ГДЕ - | ТелефонныйЗвонок.АбонентКонтакт В(&Контакт) - | - | ОБЪЕДИНИТЬ ВСЕ - | - | ВЫБРАТЬ - | ЭлектронноеПисьмоВходящее.Ссылка - | ИЗ - | Документ.ЭлектронноеПисьмоВходящее КАК ЭлектронноеПисьмоВходящее - | ГДЕ - | ЭлектронноеПисьмоВходящее.ОтправительКонтакт В(&Контакт) - | - | ОБЪЕДИНИТЬ ВСЕ - | - | ВЫБРАТЬ РАЗЛИЧНЫЕ - | ЭлектронноеПисьмоИсходящееПолучателиПисьма.Ссылка - | ИЗ - | Документ.ЭлектронноеПисьмоИсходящее.ПолучателиПисьма КАК ЭлектронноеПисьмоИсходящееПолучателиПисьма - | ГДЕ - | ЭлектронноеПисьмоИсходящееПолучателиПисьма.Контакт В(&Контакт) - | - | ОБЪЕДИНИТЬ ВСЕ - | - | ВЫБРАТЬ РАЗЛИЧНЫЕ - | ЗапланированноеВзаимодействиеУчастники.Ссылка - | ИЗ - | Документ.ЗапланированноеВзаимодействие.Участники КАК ЗапланированноеВзаимодействиеУчастники - | ГДЕ - | ЗапланированноеВзаимодействиеУчастники.Контакт В(&Контакт)) КАК ВложенныйЗапрос"; - - Запрос.УстановитьПараметр("Контакт",Контакт); - - Результат = Запрос.Выполнить(); - Если Результат.Пустой() Тогда - Возврат 0; - Иначе - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - Возврат Выборка.Количество; - КонецЕсли; - -КонецФункции - // Получает значения реквизитов документа взаимодействия, хранящиеся в регистре и // устанавливает их в соответствующие реквизиты формы. // Параметры: @@ -2128,7 +2041,7 @@ // Параметры: // Элемент - ЭлементФормы - элемент, для которого формируется список выбора. // -Процедура СформироватьСписокВыбораТипВзаимодействияТолькоПочта(Элемент) Экспорт +Процедура СформироватьСписокВыбораТипВзаимодействияТолькоПочта(Элемент) Элемент.СписокВыбора.Очистить(); Элемент.СписокВыбора.Добавить("ВсеПисьма", НСтр("ru = 'Все письма'")); @@ -2140,21 +2053,6 @@ КонецПроцедуры -// Получает свойство метаданных по типу. -// -// Параметры: -// ТипОбъекта - тип - тип метаданных для которого получается свойство. -// ИмяСвойства - ИмяСвойства - имя свойства значение которого надо получить. -// -// Возвращаемое значение: -// Произвольное - значение свойства метаданных. -// -Функция ПолучитьСвойствоМетаданныхПоТипу(ТипОбъекта,ИмяСвойства) Экспорт - - Возврат Метаданные.НайтиПоТипу(ТипОбъекта)[ИмяСвойства]; - -КонецФункции - // Получает адреса электронной почты для массива контактов. // // Параметры: @@ -3322,6 +3220,7 @@ "Страница_" + ЭлементМассиваОписания.Имя)]); ЭлементТаблица.ПутьКДанным = "Список_" + ЭлементМассиваОписания.Имя; ЭлементТаблица.УстановитьДействие("Выбор","СписокСправочникаВыбор"); + ЭлементТаблица.Высота = 10; Если Форма.ИмяФормы = "ОбщаяФорма.ВыборКонтакта" Тогда ЭлементТаблица.РежимВыделения = РежимВыделенияТаблицы.Одиночный; ЭлементТаблица.УстановитьДействие("ПриАктивизацииСтроки","Подключаемый_СписокКонтактыПриАктивизацииСтроки"); @@ -3348,7 +3247,7 @@ // Параметры: // Список - ДинамическийСписок - динамический список, для которого устанавливается отбор. // -Процедура СоздатьОтборПоТипуСогласноФО(Список) Экспорт +Процедура СоздатьОтборПоТипуСогласноФО(Список) ГруппаОтбора = ОбщегоНазначенияКлиентСервер.СоздатьГруппуЭлементовОтбора( ВзаимодействияКлиентСервер.ОтборДинамическогоСписка(Список).Элементы, "ОтборПоТипуСогласноФО", @@ -3743,7 +3642,7 @@ // Пользователь - СправочникСсылка.Пользователи - пользователь. // // Возвращаемое значение -// ПеречислениеСсылка.СпособыРедактированияЭлектронныхПисем +// ПеречислениеСсылка.СпособыРедактированияЭлектронныхПисем. // Функция ФорматСообщенияПоУмолчанию(Пользователь) Экспорт @@ -3791,7 +3690,7 @@ // Возвращаемое значение: // ДокументHTML - созданный документ HTML. // -Функция ЗаменитьИдентификаторыКартинокНаПутьКФайлам(ТекстHTML,ТаблицаФайлов,Кодировка = Неопределено, ОбработатьКартинки = Ложь) Экспорт +Функция ЗаменитьИдентификаторыКартинокНаПутьКФайлам(ТекстHTML,ТаблицаФайлов,Кодировка = Неопределено, ОбработатьКартинки = Ложь) ДокументHTML = ПолучитьОбъектДокументHTMLИзТекстаHTML(ТекстHTML,Кодировка); @@ -3998,7 +3897,7 @@ // Атрибут - Строка - наименование данных. // Значение - Строка - строка с данными. // -Процедура ДобавитьСтрокуДанныхИсходногоПисьма(ЭлементРодитель,Атрибут,Значение) Экспорт +Процедура ДобавитьСтрокуДанныхИсходногоПисьма(ЭлементРодитель,Атрибут,Значение) ДобавитьТекстовыйУзел(ЭлементРодитель,Атрибут + ": ",Истина); ДобавитьТекстовыйУзел(ЭлементРодитель,Значение,,Истина); @@ -4045,8 +3944,10 @@ ЭлементШрифт = ДобавитьЭлементСАтрибутами(ЭлементРодитель, "Font", Новый Структура("size,face","2","Tahoma")); ДобавитьСтрокуДанныхИсходногоПисьма(ЭлементШрифт, "From", - Выборка.ОтправительПредставление + ?(ТолькоПоПредставлениюОтправителя,"","[" + Выборка.ОтправительАдрес +"]")); - ДобавитьСтрокуДанныхИсходногоПисьма(ЭлементШрифт, "Sent", Формат(Выборка.Дата,"ДФ='dd MMMM yyyy'")); + Выборка.ОтправительПредставление + ?(ТолькоПоПредставлениюОтправителя Или ПустаяСтрока(Выборка.ОтправительАдрес), + "", + "[" + Выборка.ОтправительАдрес +"]")); + ДобавитьСтрокуДанныхИсходногоПисьма(ЭлементШрифт, "Sent", Формат(Выборка.Дата,"ДЛФ=D'")); ДобавитьСтрокуДанныхИсходногоПисьма(ЭлементШрифт, "To", ПолучитьПредставленияПолучателейВходящегоПисьма(Выборка.ПолучателиПисьма.Выгрузить())); ТаблицаПолучателейКопий = Выборка.ПолучателиКопий.Выгрузить(); @@ -4066,7 +3967,7 @@ // Выборка - ВыборкаИзРезультатаЗапроса - выборка по данным письма. // ЭтоИсходящее - Булево - Истина если письмо исходящее, Ложь если исходящее. // -Процедура ДополнитьТелоПисьмаШапкойПечатнойФормы(ДокументHTML,Выборка,ЭтоИсходящее) Экспорт +Процедура ДополнитьТелоПисьмаШапкойПечатнойФормы(ДокументHTML,Выборка,ЭтоИсходящее) Если ДокументHTML.Тело = Неопределено Тогда ЭлементТелоПисьма = ДокументHTML.СоздатьЭлемент("body"); @@ -4305,7 +4206,7 @@ // Имя - Строка - имя атрибута HTML. // ТекстовоеСодержимое - Строка - текстовое содержимое атрибута. // -Процедура УстановитьАтрибутЭлементаHTML(ЭлементHTML,Имя,ТекстовоеСодержимое) Экспорт +Процедура УстановитьАтрибутЭлементаHTML(ЭлементHTML,Имя,ТекстовоеСодержимое) АтрибутHTML = ЭлементHTML.ДокументВладелец.СоздатьАтрибут(Имя); АтрибутHTML.ТекстовоеСодержимое = ТекстовоеСодержимое; @@ -4365,7 +4266,7 @@ // Возвращаемое значение: // ЭлементHTML - добавленный элемент. // -Процедура ДобавитьТекстовыйУзел(ЭлементРодитель, Текст, ВыделятьЖирным = Ложь,ДобавлятьПереносСтроки = Ложь) Экспорт +Процедура ДобавитьТекстовыйУзел(ЭлементРодитель, Текст, ВыделятьЖирным = Ложь,ДобавлятьПереносСтроки = Ложь) ДокументВладелец = ЭлементРодитель.ДокументВладелец; @@ -4411,7 +4312,7 @@ // Возвращает настройку текущего пользователя. // Если настройка не задана и передав параметр ЗначениеЕслиНеЗадана, -// то возвращает его +// то возвращает его. // Функция ПолучитьНастройкуТекущегоПользователя(КлючОбъекта, КлючНастроек = Неопределено, @@ -4436,23 +4337,6 @@ КонецПроцедуры -// Возвращает сохраненную настройку текущего пользователя. -Функция ПолучитьНастройку(КлючОбъекта, - КлючНастроек = Неопределено, - ЗначениеЕслиНеЗадана = Неопределено) Экспорт - - Возврат ПолучитьНастройкуТекущегоПользователя(КлючОбъекта, КлючНастроек, ЗначениеЕслиНеЗадана); - -КонецФункции - -// Сохраняет настройку -// -Процедура СохранитьНастройку(КлючОбъекта, Значение, КлючНастроек = Неопределено) Экспорт - - СохранитьНастройкуТекущегоПользователя(КлючОбъекта, Значение, КлючНастроек); - -КонецПроцедуры - // Получает настройку пользователя работы с почтой. // Функция ПолучитьНастройкуРаботаСПочтой() Экспорт @@ -4858,7 +4742,7 @@ // ДокументОбъект - ДокументОбъект.СообщениеSMS - документ, для которого определяется состояние. // РезультатОтправки - Структура - результат отправки сообщения SMS. // -Процедура ОтразитьРезультатыОтправкиSMSВДокументе(ДокументОбъект, РезультатОтправки) Экспорт +Процедура ОтразитьРезультатыОтправкиSMSВДокументе(ДокументОбъект, РезультатОтправки) Для Каждого ОтправленноеСообщение Из РезультатОтправки.ОтправленныеСообщения Цикл Для Каждого НайденнаяСтрока Из ДокументОбъект.Адресаты.НайтиСтроки(Новый Структура("НомерДляОтправки",ОтправленноеСообщение.НомерПолучателя)) Цикл @@ -4997,7 +4881,7 @@ // Параметры: // Папка - СправочникСсылка.ПапкиЭлектронныхПисем - папка, письма которой будут помечены на удаление. // -Процедура УстановитьПометкуУдаленияДляПисемПапки(Папка) Экспорт +Процедура УстановитьПометкуУдаленияДляПисемПапки(Папка) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ @@ -5221,6 +5105,8 @@ КонецЕсли; РассчитатьРассмотреноПоПапкам(ТаблицаДляРасчета); + ЗафиксироватьТранзакцию(); + Исключение ОтменитьТранзакцию(); @@ -5235,8 +5121,6 @@ КонецПопытки; - ЗафиксироватьТранзакцию(); - КонецПроцедуры // Определяет папку для электронного письма. @@ -5355,8 +5239,7 @@ | ПО Взаимодействия.УчетнаяЗапись = УчетныеЗаписиЭлектроннойПочты.Ссылка |ГДЕ | Взаимодействия.Ссылка = &Письмо - | И (Взаимодействия.ВзаимодействиеОснование ССЫЛКА Документ.ЭлектронноеПисьмоИсходящее - | ИЛИ Взаимодействия.ВзаимодействиеОснование ССЫЛКА Документ.ЭлектронноеПисьмоВходящее) + | И ТИПЗНАЧЕНИЯ(Взаимодействия.ВзаимодействиеОснование) В (ТИП(Документ.ЭлектронноеПисьмоИсходящее), ТИП(Документ.ЭлектронноеПисьмоВходящее)) | И ПапкиЭлектронныхПисем.Владелец = Взаимодействия.УчетнаяЗапись | И НастройкиУчетныхЗаписейЭлектроннойПочты.ПомещатьПисьмоВПапкуПисьмаОснования |; @@ -6286,7 +6169,7 @@ // Булево - признак необходимости записи контактов взаимодействий во вспомогательный регистр // "Контакты взаимодействий". // -Функция НеЗаписыватьКонтакты(ДополнительныеСвойства) Экспорт +Функция НеЗаписыватьКонтакты(ДополнительныеСвойства) Перем НеЗаписыватьКонтакты; Возврат ДополнительныеСвойства.Свойство("НеЗаписыватьКонтакты", НеЗаписыватьКонтакты) @@ -6379,7 +6262,7 @@ /////////////////////////////////////////////////////////////////////////////////// // Прочее -// Получает в привелигированном режиме значение константы "Адрес публикации информационной базы в интернете". +// Получает в привилегированном режиме значение константы "Адрес публикации информационной базы в интернете". // // Возвращаемое значение: // Строка - значение константы. diff --git a/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl b/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl index b7b3ac61d..ee938a0fc 100644 --- a/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl @@ -28,19 +28,26 @@ Запрос.Текст = "ВЫБРАТЬ | Таблица.Наименование, - | " + ИмяПоляДляНаименованияВладельца + " КАК НаименованиеВладельца, - | Таблица.КонтактнаяИнформация.( - | Тип, - | Представление - | ) + | " + ИмяПоляДляНаименованияВладельца + " КАК НаименованиеВладельца |ИЗ | Справочник." + ИмяТаблицы + " КАК Таблица |ГДЕ - | Таблица.Ссылка = &Контакт" + ?(ТипКонтактнойИнформации = Неопределено,""," И Таблица.КонтактнаяИнформация.Тип = &ТипКонтактнойИнформации"); + | Таблица.Ссылка = &Контакт + |; + | + |//////////////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Таблица.Тип КАК Тип, + | Таблица.Представление КАК Представление + |ИЗ + | Справочник." + ИмяТаблицы + ".КонтактнаяИнформация" + " КАК Таблица + |ГДЕ + | Таблица.Ссылка = &Контакт" + ?(ТипКонтактнойИнформации = Неопределено,""," И Таблица.Тип = &ТипКонтактнойИнформации"); Запрос.УстановитьПараметр("Контакт", Контакт); Запрос.УстановитьПараметр("ТипКонтактнойИнформации", ТипКонтактнойИнформации); - Выборка = Запрос.Выполнить().Выбрать(); + РезультатЗапроса = Запрос.ВыполнитьПакет(); + Выборка = РезультатЗапроса[0].Выбрать(); Если Не Выборка.Следующий() Тогда Возврат; КонецЕсли; @@ -51,11 +58,12 @@ Представление = Представление + " (" + Выборка.НаименованиеВладельца + ")"; КонецЕсли; - Для Каждого СтрокаТаблицы Из Выборка.КонтактнаяИнформация.Выгрузить() Цикл + Для Каждого СтрокаТаблицы Из РезультатЗапроса[1].Выгрузить() Цикл Если СтрокаТаблицы.Тип <> Перечисления.ТипыКонтактнойИнформации.Другое Тогда СтрокаКИ = СтрокаКИ + ?(ПустаяСтрока(СтрокаКИ), "", "; ") + СтрокаТаблицы.Представление; КонецЕсли; КонецЦикла; + КонецПроцедуры @@ -293,8 +301,8 @@ |ИЗ | РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыВзаимодействий |ГДЕ - | (ПредметыВзаимодействий.Предмет В (&МассивВзаимодействий) - | ИЛИ ПредметыВзаимодействий.Взаимодействие В (&МассивВзаимодействий))"; + | НЕ (НЕ ПредметыВзаимодействий.Предмет В (&МассивВзаимодействий) + | И НЕ ПредметыВзаимодействий.Взаимодействие В (&МассивВзаимодействий))"; Запрос.УстановитьПараметр("МассивВзаимодействий", МассивВзаимодействий); МассивВзаимодействий = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); diff --git a/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl index 9fa924729..c3dd3fa2f 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиент/Module.bsl @@ -64,6 +64,73 @@ КонецПроцедуры +// Обработчик для события формы ПослеЗаписиНаСервере. Вызывается для контакта. +// +// Параметры: +// Форма - УправляемаяФорма - форма, для которой обрабатывается событие. +// Объект - ДанныеФормыКоллекция - данные объекта хранимые в форме. +// ПараметрыЗаписи - Структура - структура, в которую добавляются параметры, которые потом будут +// посланы с оповещением. +// ИмяОбъектаОтправителяСообщения - Строка - имя объекта метаданных, для формы которого обрабатывается событие. +// ПосылатьОповещение - Булево - признак необходимости отправки оповещения из этой процедуры. +// +Процедура КонтактПослеЗаписи(Форма,Объект,ПараметрыЗаписи,ИмяОбъектаОтправителяСообщения,ПосылатьОповещение = Истина) Экспорт + + Если Форма.НеобходимоОповещение Тогда + + Если ЗначениеЗаполнено(Форма.ОбъектОснование) Тогда + ПараметрыЗаписи.Вставить("Ссылка",Объект.Ссылка); + ПараметрыЗаписи.Вставить("Наименование",Объект.Наименование); + ПараметрыЗаписи.Вставить("Основание",Форма.ОбъектОснование); + ПараметрыЗаписи.Вставить("ТипОповещения","ЗаписьКонтакта"); + КонецЕсли; + + Если ПосылатьОповещение Тогда + Оповестить("Запись_" + ИмяОбъектаОтправителяСообщения,ПараметрыЗаписи,Объект.Ссылка); + Форма.НеобходимоОповещение = Ложь + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Обработчик для события формы ПослеЗаписиНаСервере. Вызывается для взаимодействия или предмета взаимодействия. +// +// Параметры: +// Форма - УправляемаяФорма - форма, для которой обрабатывается событие. +// Объект - ДанныеФормыКоллекция - данные объекта хранимые в форме. +// ПараметрыЗаписи - Структура - структура, в которую добавляются параметры, которые потом будут +// посланы с оповещением. +// ИмяОбъектаОтправителяСообщения - Строка - имя объекта метаданных, для формы которого обрабатывается событие. +// ПосылатьОповещение - Булево - признак необходимости отправки оповещения из этой процедуры. +// +Процедура ВзаимодействиеПредметПослеЗаписи(Форма,Объект,ПараметрыЗаписи,ИмяОбъектаОтправителяСообщения = "",ПосылатьОповещение = Истина) Экспорт + + Если Форма.НеобходимоОповещение Тогда + + Если ЗначениеЗаполнено(Форма.ВзаимодействиеОснование) Тогда + ПараметрыЗаписи.Вставить("Основание",Форма.ВзаимодействиеОснование); + Иначе + ПараметрыЗаписи.Вставить("Основание",Неопределено); + КонецЕсли; + + Если ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Объект.Ссылка) Тогда + ПараметрыЗаписи.Вставить("Предмет",Форма.Предмет); + ПараметрыЗаписи.Вставить("ТипОповещения","ЗаписьВзаимодействия"); + ИначеЕсли ВзаимодействияКлиентСервер.ЯвляетсяПредметом(Объект.Ссылка) Тогда + ПараметрыЗаписи.Вставить("Предмет",Объект.Ссылка); + ПараметрыЗаписи.Вставить("ТипОповещения","ЗаписьПредмета"); + КонецЕсли; + + Если ПосылатьОповещение Тогда + Оповестить("Запись_" + ИмяОбъектаОтправителяСообщения,ПараметрыЗаписи,Объект.Ссылка); + Форма.НеобходимоОповещение = Ложь; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -214,13 +281,8 @@ ВзаимодействияВызовСервера.ПолучитьПредставлениеИВсюКонтактнуюИнформациюКонтакта( Контакт, нПредставление, нАдрес, ТипКонтактнойИнформации); - Если ПустаяСтрока(Параметр.Представление) Тогда - Представление = нПредставление; - КонецЕсли; - - Если ПустаяСтрока(Параметр.Адрес) Тогда - Адрес = нАдрес; - КонецЕсли; + Представление = ?(ПустаяСтрока(Параметр.Представление), нПредставление, Параметр.Представление); + Адрес = ?(ПустаяСтрока(Параметр.Адрес), нАдрес, Параметр.Адрес); Иначе @@ -327,7 +389,7 @@ // Представление - Строка - представление контакта. // Контакт - Ссылка - контакт. // Параметры - Структура - структура параметров открытия формы, состоит . -// ТолькоEmail, ТолькоТелефон, ЗаменятьПустыеАдресИПредставление, ДляФормыУточненияКонтактов +// ТолькоEmail, ТолькоТелефон, ЗаменятьПустыеАдресИПредставление, ДляФормыУточненияКонтактов. // // Возвращаемое значение: // Булево - истина, если выбор был сделан, ложь в обратном случае. @@ -432,73 +494,6 @@ КонецПроцедуры -// Обработчик для события формы ПослеЗаписиНаСервере. Вызывается для взаимодействия или предмета взаимодействия. -// -// Параметры: -// Форма - УправляемаяФорма - форма, для которой обрабатывается событие. -// Объект - ДанныеФормыКоллекция - данные объекта хранимые в форме. -// ПараметрыЗаписи - Структура - структура, в которую добавляются параметры, которые потом будут -// посланы с оповещением. -// ИмяОбъектаОтправителяСообщения - Строка - имя объекта метаданных, для формы которого обрабатывается событие. -// ПосылатьОповещение - Булево - признак необходимости отправки оповещения из этой процедуры. -// -Процедура ВзаимодействиеПредметПослеЗаписи(Форма,Объект,ПараметрыЗаписи,ИмяОбъектаОтправителяСообщения = "",ПосылатьОповещение = Истина) Экспорт - - Если Форма.НеобходимоОповещение Тогда - - Если ЗначениеЗаполнено(Форма.ВзаимодействиеОснование) Тогда - ПараметрыЗаписи.Вставить("Основание",Форма.ВзаимодействиеОснование); - Иначе - ПараметрыЗаписи.Вставить("Основание",Неопределено); - КонецЕсли; - - Если ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Объект.Ссылка) Тогда - ПараметрыЗаписи.Вставить("Предмет",Форма.Предмет); - ПараметрыЗаписи.Вставить("ТипОповещения","ЗаписьВзаимодействия"); - ИначеЕсли ВзаимодействияКлиентСервер.ЯвляетсяПредметом(Объект.Ссылка) Тогда - ПараметрыЗаписи.Вставить("Предмет",Объект.Ссылка); - ПараметрыЗаписи.Вставить("ТипОповещения","ЗаписьПредмета"); - КонецЕсли; - - Если ПосылатьОповещение Тогда - Оповестить("Запись_" + ИмяОбъектаОтправителяСообщения,ПараметрыЗаписи,Объект.Ссылка); - Форма.НеобходимоОповещение = Ложь; - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -// Обработчик для события формы ПослеЗаписиНаСервере. Вызывается для контакта. -// -// Параметры: -// Форма - УправляемаяФорма - форма, для которой обрабатывается событие. -// Объект - ДанныеФормыКоллекция - данные объекта хранимые в форме. -// ПараметрыЗаписи - Структура - структура, в которую добавляются параметры, которые потом будут -// посланы с оповещением. -// ИмяОбъектаОтправителяСообщения - Строка - имя объекта метаданных, для формы которого обрабатывается событие. -// ПосылатьОповещение - Булево - признак необходимости отправки оповещения из этой процедуры. -// -Процедура КонтактПослеЗаписи(Форма,Объект,ПараметрыЗаписи,ИмяОбъектаОтправителяСообщения,ПосылатьОповещение = Истина) Экспорт - - Если Форма.НеобходимоОповещение Тогда - - Если ЗначениеЗаполнено(Форма.ОбъектОснование) Тогда - ПараметрыЗаписи.Вставить("Ссылка",Объект.Ссылка); - ПараметрыЗаписи.Вставить("Наименование",Объект.Наименование); - ПараметрыЗаписи.Вставить("Основание",Форма.ОбъектОснование); - ПараметрыЗаписи.Вставить("ТипОповещения","ЗаписьКонтакта"); - КонецЕсли; - - Если ПосылатьОповещение Тогда - Оповестить("Запись_" + ИмяОбъектаОтправителяСообщения,ПараметрыЗаписи,Объект.Ссылка); - Форма.НеобходимоОповещение = Ложь - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - // Обработчик для события формы ПриНажатии поля HTML документа. // // Параметры: diff --git a/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl index ba0bae86b..023c0f0f5 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl @@ -356,7 +356,7 @@ Пока Истина Цикл - Позиция = Макс(Найти(ИмяФайла, "\"), СтрНайти(ИмяФайла, "/")); + Позиция = Макс(СтрНайти(ИмяФайла, "\"), СтрНайти(ИмяФайла, "/")); Если Позиция = 0 Тогда Возврат; КонецЕсли; @@ -671,7 +671,7 @@ // Функция ПолучитьПредставлениеАдресата(Имя, Адрес, Контакт) Экспорт - Результат = ?(Имя = Адрес ИЛИ Имя = "", Адрес,?(ПустаяСтрока(Адрес),Имя, ?(Найти(Имя, Адрес) > 0, Имя, Имя + " <" + Адрес + ">"))); + Результат = ?(Имя = Адрес ИЛИ Имя = "", Адрес,?(ПустаяСтрока(Адрес),Имя, ?(СтрНайти(Имя, Адрес) > 0, Имя, Имя + " <" + Адрес + ">"))); Если ЗначениеЗаполнено(Контакт) И ТипЗнч(Контакт) <> Тип("Строка") Тогда Результат = Результат + " [" + ПолучитьПредставлениеКонтакта(Контакт) + "]"; КонецЕсли; diff --git a/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl b/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl index d8144f578..94db3fa33 100644 --- a/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl +++ b/SSL/src/CommonModules/ГрафикиРаботы/Module.bsl @@ -209,21 +209,34 @@ |ВЫБРАТЬ | Календари.Ссылка КАК ГрафикРаботы, | ДанныеПроизводственногоКалендаря.Дата КАК ДатаГрафика, - | ДанныеПроизводственногоКалендаря.ДатаПереноса, | ВЫБОР | КОГДА ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный) | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК ПредпраздничныйДень - |ПОМЕСТИТЬ ВТСведенияПоКалендарю + |ПОМЕСТИТЬ ВТПредпраздничныеДни |ИЗ | РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Календари КАК Календари | ПО ДанныеПроизводственногоКалендаря.ПроизводственныйКалендарь = Календари.ПроизводственныйКалендарь | И (Календари.Ссылка В (&Календари)) | И (ДанныеПроизводственногоКалендаря.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания) - | И (ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный) - | ИЛИ ДанныеПроизводственногоКалендаря.ДатаПереноса <> ДАТАВРЕМЯ(1, 1, 1)) + | И (ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный)) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Календари.Ссылка КАК ГрафикРаботы, + | ДанныеПроизводственногоКалендаря.Дата КАК ДатаГрафика, + | ДанныеПроизводственногоКалендаря.ДатаПереноса + |ПОМЕСТИТЬ ВТДатыПереноса + |ИЗ + | РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Календари КАК Календари + | ПО ДанныеПроизводственногоКалендаря.ПроизводственныйКалендарь = Календари.ПроизводственныйКалендарь + | И (Календари.Ссылка В (&Календари)) + | И (ДанныеПроизводственногоКалендаря.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания) + | И (ДанныеПроизводственногоКалендаря.ДатаПереноса <> ДАТАВРЕМЯ(1, 1, 1)) |; | |//////////////////////////////////////////////////////////////////////////////// @@ -231,8 +244,8 @@ | КалендарныеГрафики.Календарь КАК ГрафикРаботы, | КалендарныеГрафики.ДатаГрафика КАК ДатаГрафика, | РАЗНОСТЬДАТ(Календари.ДатаОтсчета, КалендарныеГрафики.ДатаГрафика, ДЕНЬ) + 1 КАК ДнейОтДатыОтсчета, - | СведенияПоКалендарю.ПредпраздничныйДень, - | СведенияПоКалендарю.ДатаПереноса + | ПредпраздничныеДни.ПредпраздничныйДень, + | ДатыПереноса.ДатаПереноса |ПОМЕСТИТЬ ВТДниВключенныеВГрафик |ИЗ | РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики @@ -241,9 +254,12 @@ | И (КалендарныеГрафики.Календарь В (&Календари)) | И (КалендарныеГрафики.ДатаГрафика МЕЖДУ &ДатаНачала И &ДатаОкончания) | И (КалендарныеГрафики.ДеньВключенВГрафик) - | ЛЕВОЕ СОЕДИНЕНИЕ ВТСведенияПоКалендарю КАК СведенияПоКалендарю - | ПО (СведенияПоКалендарю.ГрафикРаботы = КалендарныеГрафики.Календарь) - | И (СведенияПоКалендарю.ДатаГрафика = КалендарныеГрафики.ДатаГрафика) + | ЛЕВОЕ СОЕДИНЕНИЕ ВТПредпраздничныеДни КАК ПредпраздничныеДни + | ПО (ПредпраздничныеДни.ГрафикРаботы = КалендарныеГрафики.Календарь) + | И (ПредпраздничныеДни.ДатаГрафика = КалендарныеГрафики.ДатаГрафика) + | ЛЕВОЕ СОЕДИНЕНИЕ ВТДатыПереноса КАК ДатыПереноса + | ПО (ДатыПереноса.ГрафикРаботы = КалендарныеГрафики.Календарь) + | И (ДатыПереноса.ДатаГрафика = КалендарныеГрафики.ДатаГрафика) |; | |//////////////////////////////////////////////////////////////////////////////// @@ -370,34 +386,14 @@ "СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления" ].Добавить("ГрафикиРаботы"); - СерверныеОбработчики[ - "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбязательныхОбъектовПланаОбмена" - ].Добавить("ГрафикиРаботы"); - КонецПроцедуры -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -// Используется для получения объектов метаданных обязательных для плана обмена. -// Если подсистема имеет объекты метаданных обязательные для включения в состав плана обмена, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты - Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. -// Истина - требуется получить список объектов плана обмена РИБ; -// Ложь - требуется получить список для плана обмена НЕ РИБ. -// -Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт +// См. одноименную процедуру в общем модуле ПользователиПереопределяемый. +Процедура ПриОпределенииНазначенияРолей(НазначениеРолей) Экспорт - Если РаспределеннаяИнформационнаяБаза Тогда - - Объекты.Добавить(Метаданные.Справочники.Календари); - Объекты.Добавить(Метаданные.РегистрыСведений.КалендарныеГрафики); - - КонецЕсли; + // СовместноДляПользователейИВнешнихПользователей. + НазначениеРолей.СовместноДляПользователейИВнешнихПользователей.Добавить( + Метаданные.Роли.ЧтениеГрафиковРаботы.Имя); КонецПроцедуры @@ -450,6 +446,25 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов в другие подсистемы. + +// Процедура выполняет обновление графиков работы по данным производственных календарей +// по всем областям данных. +// +Процедура ЗапланироватьОбновлениеГрафиковРаботы(Знач УсловияОбновления) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.КалендарныеГрафикиВМоделиСервиса") Тогда + МодульКалендарныеГрафикиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("КалендарныеГрафикиСлужебныйВМоделиСервиса"); + МодульКалендарныеГрафикиСлужебныйВМоделиСервиса.ЗапланироватьОбновлениеГрафиковРаботы(УсловияОбновления); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы. @@ -480,6 +495,10 @@ // Процедура СоздатьКалендарьПятидневкаРоссийскойФедерации() Экспорт + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() И Не ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + КалендарныеГрафики.ОбновитьПроизводственныеКалендари(); + КонецЕсли; + ПроизводственныйКалендарь = КалендарныеГрафики.ПроизводственныйКалендарьРоссийскойФедерации(); Если ПроизводственныйКалендарь = Неопределено Тогда Возврат; @@ -663,19 +682,4 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов в другие подсистемы. - -// Процедура выполняет обновление графиков работы по данным производственных календарей -// по всем областям данных. -// -Процедура ЗапланироватьОбновлениеГрафиковРаботы(Знач УсловияОбновления) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.КалендарныеГрафикиВМоделиСервиса") Тогда - МодульКалендарныеГрафикиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("КалендарныеГрафикиСлужебныйВМоделиСервиса"); - МодульКалендарныеГрафикиСлужебныйВМоделиСервиса.ЗапланироватьОбновлениеГрафиковРаботы(УсловияОбновления); - КонецЕсли; - -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/CommonModules/ДанныеЕдиныхГосРеестров/Module.bsl b/SSL/src/CommonModules/ДанныеЕдиныхГосРеестров/Module.bsl index c8ce74dce..3391b78b4 100644 --- a/SSL/src/CommonModules/ДанныеЕдиныхГосРеестров/Module.bsl +++ b/SSL/src/CommonModules/ДанныеЕдиныхГосРеестров/Module.bsl @@ -59,7 +59,7 @@ ЗаполнитьРеквизитыФондаСоциальногоСтрахования(ОбъектXDTO, РеквизитыОрганизации); - ЗаполнитьЮридическийАдрес(ОбъектXDTO, РеквизитыОрганизации); + ЗаполнитьЮридическийАдрес(ОбъектXDTO, РеквизитыОрганизации, Прокси.ФабрикаXDTO); ЗаполнитьРуководителяИНомерТелефона(ОбъектXDTO, РеквизитыОрганизации); @@ -155,9 +155,9 @@ // // Возвращаемое значение: // Структура - реквизиты найденных юридических лиц. Содержание структуры: -// * РеквизитыЮрЛиц - Массив - реквизиты найденных юр.лиц. +// * РеквизитыЮрЛиц - Массив - реквизиты найденных юридических лиц. // Элементы массива - Структура, описание см. функцию НовыеРеквизитыЮридическогоЛица. -// Заполняются только основные реквизиты (ИНН, наименование, юр.адрес, ФИО руководителя). +// Заполняются только основные реквизиты (ИНН, наименование, юридический адрес, ФИО руководителя). // Если найдено больше 20 контрагентов - возвращаются реквизиты только первых 20. // * КоличествоНайденных - Число - общее количество найденных реквизитов (может быть больше 20). // * ОписаниеОшибки - Строка - служебный реквизит. @@ -203,7 +203,7 @@ ЗаполнитьНаименованияЮридическогоЛица(ОбъектXDTO, РеквизитыОрганизации); - ЗаполнитьЮридическийАдрес(ОбъектXDTO, РеквизитыОрганизации); + ЗаполнитьЮридическийАдрес(ОбъектXDTO, РеквизитыОрганизации, Прокси.ФабрикаXDTO); ЗаполнитьРуководителяИНомерТелефона(ОбъектXDTO, РеквизитыОрганизации); @@ -257,6 +257,11 @@ Возврат ИнформацияОСвязях; КонецЕсли; + ИнформацияОСвязях.ОжиданиеОтвета = ОбъектXDTO.awaitingResponse; + Если ИнформацияОСвязях.ОжиданиеОтвета Тогда + Возврат ИнформацияОСвязях; + КонецЕсли; + ЗаполнитьНаименованияЮридическогоЛица(ОбъектXDTO, ИнформацияОСвязях); ИнформацияОСвязях.РегистрационныйНомер = ОбъектXDTO.ОГРН; @@ -266,7 +271,7 @@ ЗаполнитьИнформациюОСтатусе(ОбъектXDTO, ИнформацияОСвязях); - ЗаполнитьЮридическийАдрес(ОбъектXDTO, ИнформацияОСвязях); + ЗаполнитьЮридическийАдрес(ОбъектXDTO, ИнформацияОСвязях, Прокси.ФабрикаXDTO); ЗаполнитьРегистрациюВНалоговомОргане(ОбъектXDTO, ИнформацияОСвязях); @@ -292,6 +297,8 @@ ЗаполнитьИнформациюОбИзмененияхВРеестре(ОбъектXDTO, ИнформацияОСвязях); + ЗаполнитьИнформациюОБухгалтерскойОтчетности(ОбъектXDTO, ИнформацияОСвязях); + Возврат ИнформацияОСвязях; КонецФункции @@ -386,6 +393,64 @@ КонецФункции +// Возвращается информация о проверках юридического лица или предпринимателя контролирующими органами +// по открытым данным единого реестра проверок. +// +// Параметры: +// ИНН - Строка - ИНН юридического лица или предпринимателя, информацию о проверках которого надо получить. +// Плановые - Булево - требуется ли информация о плановых проверках. +// Внеплановые - Булево - требуется ли информация о внеплановых проверках. +// Завершенные - Булево - требуется ли информация о завершенных проверках (плановых и внеплановых), +// по которым уже известен результат. +// Незавершенные - Булево - требуется ли информация о незавершенных проверках (плановых и внеплановых), +// результат по которым не известен. +// +// Возвращаемое значение: +// Структура - информация о проверках. +// Содержание структуры - см. функцию НоваяИнформацияОПроверкахКонтролирующимиОрганами. +// +Функция ИнформацияОПроверкахКонтролирующимиОрганамиПоИНН(Знач ИНН, Плановые, Внеплановые, Завершенные, Незавершенные) Экспорт + + ИнформацияОПроверках = НоваяИнформацияОПроверкахКонтролирующимиОрганами(); + ИнформацияОПроверках.ИНН = ИНН; + + ОписаниеОшибки = ""; + ОбъектXDTO = Неопределено; + Прокси = ПроксиСервиса(ОписаниеОшибки); + Если Прокси <> Неопределено Тогда + ВходныеПараметры = Прокси.ФабрикаXDTO.Создать( + Прокси.ФабрикаXDTO.Тип(ПространствоИмен(), "getInspectionsByInn")); + ВходныеПараметры.INN = ИНН; + ВходныеПараметры.configurationName = Метаданные.Имя; + Попытка + Ответ = Прокси.getInspectionsByInn(ВходныеПараметры); + ОбъектXDTO = Ответ.Inspections; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='ИНН %1:'"), ИНН) + + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + КонецПопытки; + КонецЕсли; + + ОбработатьОшибкуСервиса(ОбъектXDTO, ОписаниеОшибки, "getInspectionsByInn", ИнформацияОПроверках); + + Если ЗначениеЗаполнено(ИнформацияОПроверках.ОписаниеОшибки) Тогда + Возврат ИнформацияОПроверках; + КонецЕсли; + + ИнформацияОПроверках.ОжиданиеОтвета = ОбъектXDTO.awaitingResponse; + Если ИнформацияОПроверках.ОжиданиеОтвета Тогда + Возврат ИнформацияОПроверках; + КонецЕсли; + + ЗаполнитьИнформациюОПроверкахКонтролирующимиОрганами( + ОбъектXDTO, ИнформацияОПроверках, Плановые, Внеплановые, Завершенные, Незавершенные); + + Возврат ИнформацияОПроверках; + +КонецФункции + #КонецОбласти #Область ОписанияРеквизитов @@ -487,6 +552,11 @@ ИнформацияОСвязях.Вставить("ИзмененияВРеестре", НоваяТаблицаИзмененияВРеестре()); + ИнформацияОСвязях.Вставить("БухгалтерскаяОтчетность", НоваяТаблицаБухгалтерскаяОтчетность()); + + // Служебный реквизит + ИнформацияОСвязях.Вставить("ОжиданиеОтвета", Ложь); + Возврат ИнформацияОСвязях; КонецФункции @@ -514,10 +584,28 @@ ИнформацияОСвязях.Вставить("ИзмененияВРеестре", НоваяТаблицаИзмененияВРеестре()); + // Служебный реквизит + ИнформацияОСвязях.Вставить("ОжиданиеОтвета", Ложь); + Возврат ИнформацияОСвязях; КонецФункции +Функция НоваяИнформацияОПроверкахКонтролирующимиОрганами() + + Информация = Новый Структура; + Информация.Вставить("ИНН"); // Строка, 12 + + Информация.Вставить("Проверки", НоваяТаблицаПроверкиКонтролирующимиОрганами()); + + // Служебные реквизиты + Информация.Вставить("ОписаниеОшибки"); // Строка, 0 + Информация.Вставить("ОжиданиеОтвета", Ложь); + + Возврат Информация; + +КонецФункции + Функция НоваяКонтактнаяИнформация() Результат = Новый Структура; @@ -662,6 +750,55 @@ КонецФункции +Функция НоваяТаблицаБухгалтерскаяОтчетность() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Год", Новый ОписаниеТипов("Число")); + Результат.Колонки.Добавить("КодВалютыОтчетности", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ТипОтчетности", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("Показатели"); // см. НоваяТаблицаБухгалтерскаяОтчетностьПоказатели + Возврат Результат; + +КонецФункции + +Функция НоваяТаблицаБухгалтерскаяОтчетностьПоказатели() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Код", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("Значение", Новый ОписаниеТипов("Число")); + Возврат Результат; + +КонецФункции + +Функция НоваяТаблицаПроверкиКонтролирующимиОрганами() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ПлановаяПроверка", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("ПериодПроверки", Новый ОписаниеТипов("Дата")); + Результат.Колонки.Добавить("ДатаПроверки", Новый ОписаниеТипов("Дата")); + Результат.Колонки.Добавить("КонтролирующийОрган", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("АдресПроверки", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ЦельПроверки", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("Длительность", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("Результат", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("Нарушения"); // см. НоваяТаблицаНарушенияВыявленныеКонтролирующимиОрганами + Возврат Результат; + +КонецФункции + +Функция НоваяТаблицаНарушенияВыявленныеКонтролирующимиОрганами() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("НомерНарушения", Новый ОписаниеТипов("Число")); + Результат.Колонки.Добавить("Нарушение", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("НарушенныйАкт", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("Предписание", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("Исполнение", Новый ОписаниеТипов("Строка")); + Возврат Результат; + +КонецФункции + #КонецОбласти #Область ЗаполнениеРеквизитов @@ -754,6 +891,105 @@ КонецПроцедуры +Процедура ЗаменитьПолныеНаименованияАдресныхОбъектовСокращенными(Объект, АдресныеСокращения = Неопределено) + + Если АдресныеСокращения = Неопределено Тогда + АдресныеСокращения = АдресныйКлассификаторСлужебный.СокращенияАдресныхОбъектов(Новый Массив); + КонецЕсли; + + Для каждого СвойствоОбъекта Из Объект.Свойства() Цикл + + ЗначениеСвойства = Объект[СвойствоОбъекта.Имя]; + Если ТипЗнч(ЗначениеСвойства) = Тип("Строка") Тогда + МассивСлов = СтрРазделить(ЗначениеСвойства, " ", Ложь); + Для ИндексСлова = 0 По МассивСлов.ВГраница() Цикл + Слово = ВРег(МассивСлов[ИндексСлова]); + АдресноеСокращение = АдресныеСокращения[Слово]; + Если АдресноеСокращение <> Неопределено Тогда + МассивСлов[ИндексСлова] = АдресноеСокращение; + КонецЕсли; + КонецЦикла; + Объект[СвойствоОбъекта.Имя] = СтрСоединить(МассивСлов, " "); + ИначеЕсли ТипЗнч(ЗначениеСвойства) = Тип("ОбъектXDTO") Тогда + ЗаменитьПолныеНаименованияАдресныхОбъектовСокращенными(ЗначениеСвойства, АдресныеСокращения); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ПроверитьДополнительныеАдресныеЭлементы(Объект, Фабрика) + + Если Объект.Свойства().Получить("ДопАдрЭл") = Неопределено + ИЛИ Объект.ДопАдрЭл = Неопределено Тогда + Возврат; + КонецЕсли; + + НовыеЗначения = Новый ТаблицаЗначений; + НовыеЗначения.Колонки.Добавить("Значение", Новый ОписаниеТипов("Строка")); + НовыеЗначения.Колонки.Добавить("ТипЭлемента"); + НовыеЗначения.Колонки.Добавить("ТипНомера"); + ТипыАдресныхЭлементов = Новый СписокЗначений; + Для каждого ТипОбъектовАдресации Из УправлениеКонтактнойИнформациейКлиентСервер.ТипыОбъектовАдресацииАдресаРФ() Цикл + ТипыАдресныхЭлементов.Добавить(ВРег(ТипОбъектовАдресации.Ключ), ТипОбъектовАдресации.Код); + КонецЦикла; + + Для каждого АдресныйЭлемент Из Объект.ДопАдрЭл Цикл + + Если ТипЗнч(АдресныйЭлемент.Номер) <> Тип("ОбъектXDTO") + ИЛИ НЕ ЗначениеЗаполнено(АдресныйЭлемент.Номер.Значение) Тогда + Продолжить; + КонецЕсли; + + КонецЗначения = СтрНайти(АдресныйЭлемент.Номер.Значение, ";"); + Если КонецЗначения > 0 Тогда + НовоеЗначение = СокрЛП(Сред(АдресныйЭлемент.Номер.Значение, КонецЗначения + 1)); + Если НЕ ПустаяСтрока(НовоеЗначение) Тогда + НоваяСтрока = НовыеЗначения.Добавить(); + НоваяСтрока.Значение = НовоеЗначение; + НоваяСтрока.ТипЭлемента = АдресныйЭлемент.Тип(); + НоваяСтрока.ТипНомера = АдресныйЭлемент.Номер.Тип(); + АдресныйЭлемент.Номер.Значение = Лев(АдресныйЭлемент.Номер.Значение, КонецЗначения - 1); + КонецЕсли; + КонецЕсли; + + КонецСлова = СтрНайти(АдресныйЭлемент.Номер.Значение, "."); + КонецСлова = ?(КонецСлова > 0, КонецСлова, СтрНайти(АдресныйЭлемент.Номер.Значение, " ")); + Если КонецСлова > 0 Тогда + ПервоеСловоЗначения = Лев(АдресныйЭлемент.Номер.Значение, КонецСлова - 1); + Для каждого ТипАдресныхЭлементов Из ТипыАдресныхЭлементов Цикл + Если СтрНачинаетсяС(ТипАдресныхЭлементов.Значение, ПервоеСловоЗначения) Тогда + АдресныйЭлемент.Номер.Значение = СокрЛ(Сред(АдресныйЭлемент.Номер.Значение, КонецСлова + 1)); + АдресныйЭлемент.Номер.Тип = ТипАдресныхЭлементов.Представление; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + КонецЦикла; + + Для каждого СтрокаТаблицы Из НовыеЗначения Цикл + + КонецСлова = СтрНайти(СтрокаТаблицы.Значение, "."); + КонецСлова = ?(КонецСлова > 0, КонецСлова, СтрНайти(СтрокаТаблицы.Значение, " ")); + Если КонецСлова > 0 Тогда + ПервоеСловоЗначения = Лев(СтрокаТаблицы.Значение, КонецСлова - 1); + Для каждого ТипАдресныхЭлементов Из ТипыАдресныхЭлементов Цикл + Если СтрНачинаетсяС(ТипАдресныхЭлементов.Значение, ПервоеСловоЗначения) Тогда + НовыйЭлемент = Фабрика.Создать(СтрокаТаблицы.ТипЭлемента); + НовыйЭлемент.Номер = Фабрика.Создать(СтрокаТаблицы.ТипНомера); + НовыйЭлемент.Номер.Значение = СокрЛ(Сред(СтрокаТаблицы.Значение, КонецСлова + 1)); + НовыйЭлемент.Номер.Тип = ТипАдресныхЭлементов.Представление; + Объект.ДопАдрЭл.Добавить(НовыйЭлемент); + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + Процедура ЗаполнитьРегистрациюВНалоговомОргане(ОбъектXDTO, Реквизиты) Если ОбъектXDTO.СвУчетНО <> Неопределено @@ -1171,6 +1407,46 @@ КонецПроцедуры +Процедура ЗаполнитьИнформациюОБухгалтерскойОтчетности(ОбъектXDTO, ИнформацияОСвязях) + + Если ОбъектXDTO.annualStatement <> Неопределено Тогда + + Для каждого СтрокаОтчетности Из ОбъектXDTO.annualStatement Цикл + + НоваяСтрока = ИнформацияОСвязях.БухгалтерскаяОтчетность.Добавить(); + НоваяСтрока.Год = СтрокаОтчетности.year; + НоваяСтрока.КодВалютыОтчетности = СтрокаОтчетности.measure; + НоваяСтрока.ТипОтчетности = СтрокаОтчетности.type; + НоваяСтрока.Показатели = НоваяТаблицаБухгалтерскаяОтчетностьПоказатели(); + Если СтрокаОтчетности.article <> Неопределено Тогда + Для каждого СтрокаПоказателя Из СтрокаОтчетности.article Цикл + НоваяСтрокаПоказателя = НоваяСтрока.Показатели.Добавить(); + НоваяСтрокаПоказателя.Код = СтрокаПоказателя.code; + НоваяСтрокаПоказателя.Значение = СтрокаПоказателя.value; + КонецЦикла; + КонецЕсли; + + Если СтрокаОтчетности.type = "1" Тогда + // Если в отчетности МП есть заполненные показатели с такими кодами - это обычная отчетность. + КодыОбычнойОтчетности = СтрРазделить( + "13103;13203;13403;13503;13603;13703;13104;13204;13404;13504;13604;13704", ";"); + НоваяСтрока.Показатели.Индексы.Добавить("Код"); + Для каждого КодОтчетности Из КодыОбычнойОтчетности Цикл + СтрокаПоказателя = НоваяСтрока.Показатели.Найти(КодОтчетности, "Код"); + Если СтрокаПоказателя <> Неопределено + И СтрокаПоказателя.Значение <> 0 Тогда + НоваяСтрока.ТипОтчетности = "2"; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + Процедура ЗаполнитьРеквизитыПенсионногоФонда(ОбъектXDTO, Реквизиты) Если ОбъектXDTO.СвРегПФ <> Неопределено Тогда @@ -1256,14 +1532,16 @@ КонецПроцедуры -Процедура ЗаполнитьЮридическийАдрес(ОбъектXDTO, Реквизиты) +Процедура ЗаполнитьЮридическийАдрес(ОбъектXDTO, Реквизиты, Фабрика) ПространствоИменКИ = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); Если ОбъектXDTO.СвАдрес <> Неопределено И ОбъектXDTO.СвАдрес.Адрес <> Неопределено Тогда - АдресРФ_КИ = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИменКИ, "АдресРФ")); + АдресРФ_КИ = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИменКИ, "АдресРФ")); + ЗаменитьПолныеНаименованияАдресныхОбъектовСокращенными(ОбъектXDTO.СвАдрес.Адрес.Состав); + ПроверитьДополнительныеАдресныеЭлементы(ОбъектXDTO.СвАдрес.Адрес.Состав, Фабрика); ЗаполнитьОбъектXDTOКонтактнойИнформации(ФабрикаXDTO, АдресРФ_КИ, ОбъектXDTO.СвАдрес.Адрес.Состав); КИ = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИменКИ, "КонтактнаяИнформация")); @@ -1300,7 +1578,7 @@ Функция ПолучитьДанныеОРуководителеИНомерТелефона(СведенияОДолжности, Данные) - Если СтрНайти(СведенияОДолжности.НаимВидДолжн, "Руководитель") = 0 + Если СтрНайти(ВРег(СведенияОДолжности.НаимВидДолжн), "РУКОВОДИТЕЛЬ") = 0 ИЛИ СведенияОДолжности.ФИО = Неопределено Тогда Возврат Ложь; КонецЕсли; @@ -1378,6 +1656,169 @@ КонецПроцедуры +Процедура ЗаполнитьИнформациюОПроверкахКонтролирующимиОрганами(ОбъектXDTO, ИнформацияОПроверках, Плановые, Внеплановые, Завершенные, Незавершенные) + + Если НЕ Завершенные И НЕ Незавершенные Тогда + Возврат; + КонецЕсли; + ТолькоЗавершенные = Завершенные И НЕ Незавершенные; + ТолькоНезавершенные = НЕ Завершенные И Незавершенные; + + // Внеплановые проверки + Если Внеплановые + И ОбъектXDTO.InspectionsUnregular294 <> Неопределено Тогда + Для каждого ПроверкиЗаМесяц Из ОбъектXDTO.InspectionsUnregular294 Цикл + Если ПроверкиЗаМесяц.InspectionUnregular294 <> Неопределено Тогда + + ГодПроверки = ПроверкиЗаМесяц.YEAR; + МесяцПроверки = ПроверкиЗаМесяц.MONTH; + ПериодПроверки = Дата(ГодПроверки, МесяцПроверки, 1); + + Для каждого СтрокаПроверки Из ПроверкиЗаМесяц.InspectionUnregular294 Цикл + + Если НЕ ЗначениеЗаполнено(СтрокаПроверки.KO_NAME) Тогда + Продолжить; // Пропускаем записи с пустым контролирующим органом. + КонецЕсли; + Завершена = СтрокаПроверки.InspectionResult294 <> Неопределено; + Если ТолькоЗавершенные И НЕ Завершена + ИЛИ ТолькоНезавершенные И Завершена Тогда + Продолжить; + КонецЕсли; + + НоваяСтрока = ИнформацияОПроверках.Проверки.Добавить(); + НоваяСтрока.Идентификатор = Формат(СтрокаПроверки.ERPID, "ЧГ="); + НоваяСтрока.ПлановаяПроверка = Ложь; + НоваяСтрока.ПериодПроверки = ПериодПроверки; + ДатаНачала = ?(ЗначениеЗаполнено(СтрокаПроверки.START_DATE), + СтрокаПроверки.START_DATE, ПериодПроверки); + ДатаКонца = ?(ЗначениеЗаполнено(СтрокаПроверки.END_DATE), + СтрокаПроверки.END_DATE, КонецМесяца(ДатаНачала)); + НоваяСтрока.ДатаПроверки = ДатаНачала; + НоваяСтрока.Длительность = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='с %1 по %2'"), + Формат(ДатаНачала, "ДЛФ=D"), Формат(ДатаКонца, "ДЛФ=D")); + НоваяСтрока.КонтролирующийОрган = СокрЛП(СтрокаПроверки.KO_NAME); + НоваяСтрока.АдресПроверки = ?(ЗначениеЗаполнено(СтрокаПроверки.ADR_SEC_II), + СокрЛП(СтрокаПроверки.ADR_SEC_II), СокрЛП(СтрокаПроверки.ADR_SEC_I)); + НоваяСтрока.ЦельПроверки = СокрЛП(СтрокаПроверки.INSP_TARGET); + НоваяСтрока.Нарушения = НоваяТаблицаНарушенияВыявленныеКонтролирующимиОрганами(); + + Если Завершена Тогда + + Если СтрокаПроверки.InspectionResult294.InspectionViolations294 <> Неопределено Тогда + Для каждого СтрокаНарушения Из СтрокаПроверки.InspectionResult294.InspectionViolations294 Цикл + НоваяСтрокаНарушения = НоваяСтрока.Нарушения.Добавить(); + НоваяСтрокаНарушения.НомерНарушения = СтрокаНарушения.Violation_ID; + НоваяСтрокаНарушения.Нарушение = СтрокаНарушения.Violation_Note; + НоваяСтрокаНарушения.НарушенныйАкт = СтрокаНарушения.Violation_Act; + НоваяСтрокаНарушения.Предписание = СтрокаНарушения.Injunction_Note; + НоваяСтрокаНарушения.Исполнение = СтрокаНарушения.Injunction_Execution; + КонецЦикла; + КонецЕсли; + + КоличествоНарушений = НоваяСтрока.Нарушения.Количество(); + Если КоличествоНарушений = 0 Тогда + НоваяСтрока.Результат = НСтр("ru='Нарушений не выявлено'"); + Иначе + НоваяСтрока.Нарушения.Сортировать("НомерНарушения"); + НоваяСтрока.Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Выявлено %1'"), + СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью( + КоличествоНарушений, НСтр("ru='нарушение,нарушения,нарушений'"))); + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + КонецЦикла; + КонецЕсли; + + // Плановые проверки + Если Плановые + И ОбъектXDTO.InspectionsRegular294 <> Неопределено Тогда + Для каждого ПроверкиЗаМесяц Из ОбъектXDTO.InspectionsRegular294 Цикл + Если ПроверкиЗаМесяц.InspectionRegular294 <> Неопределено Тогда + + ГодПроверки = ПроверкиЗаМесяц.YEAR; + МесяцПроверки = ПроверкиЗаМесяц.MONTH; + ПериодПроверки = Дата(ГодПроверки, МесяцПроверки, 1); + + Для каждого СтрокаПроверки Из ПроверкиЗаМесяц.InspectionRegular294 Цикл + + Если НЕ ЗначениеЗаполнено(СтрокаПроверки.KO_NAME) Тогда + Продолжить; // Пропускаем записи с пустым контролирующим органом. + КонецЕсли; + Завершена = СтрокаПроверки.InspectionResult294 <> Неопределено; + Если ТолькоЗавершенные И НЕ Завершена + ИЛИ ТолькоНезавершенные И Завершена Тогда + Продолжить; + КонецЕсли; + + НоваяСтрока = ИнформацияОПроверках.Проверки.Добавить(); + НоваяСтрока.Идентификатор = Формат(СтрокаПроверки.ERPID, "ЧГ="); + НоваяСтрока.ПлановаяПроверка = Истина; + НоваяСтрока.ПериодПроверки = ПериодПроверки; + ДатаНачала = ?(ЗначениеЗаполнено(СтрокаПроверки.START_DATE), + СтрокаПроверки.START_DATE, ПериодПроверки); + Если ЗначениеЗаполнено(СтрокаПроверки.DURATION_SEC_II) Тогда + Длительность = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 рабочих дней'"), СтрокаПроверки.DURATION_SEC_II); + ИначеЕсли ЗначениеЗаполнено(СтрокаПроверки.DURATION_SEC_I) Тогда + Длительность = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 рабочих часов'"), СтрокаПроверки.DURATION_SEC_I); + Иначе + Длительность = ""; + КонецЕсли; + НоваяСтрока.ДатаПроверки = ДатаНачала; + Если ЗначениеЗаполнено(Длительность) Тогда + НоваяСтрока.Длительность = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='с %1, %2'"), Формат(ДатаНачала, "ДЛФ=D"), Длительность); + Иначе + НоваяСтрока.Длительность = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='с %1'"), Формат(ДатаНачала, "ДЛФ=D")); + КонецЕсли; + НоваяСтрока.КонтролирующийОрган = СокрЛП(СтрокаПроверки.KO_NAME); + НоваяСтрока.АдресПроверки = ?(ЗначениеЗаполнено(СтрокаПроверки.ADR_SEC_IV), СокрЛП(СтрокаПроверки.ADR_SEC_IV), + ?(ЗначениеЗаполнено(СтрокаПроверки.ADR_SEC_III), СокрЛП(СтрокаПроверки.ADR_SEC_III), + СокрЛП(СтрокаПроверки.ADR_SEC_I))); + НоваяСтрока.ЦельПроверки = СокрЛП(СтрокаПроверки.INSP_TARGET); + НоваяСтрока.Нарушения = НоваяТаблицаНарушенияВыявленныеКонтролирующимиОрганами(); + + Если Завершена Тогда + + Если СтрокаПроверки.InspectionResult294.InspectionViolations294 <> Неопределено Тогда + Для каждого СтрокаНарушения Из СтрокаПроверки.InspectionResult294.InspectionViolations294 Цикл + НоваяСтрокаНарушения = НоваяСтрока.Нарушения.Добавить(); + НоваяСтрокаНарушения.НомерНарушения = СтрокаНарушения.Violation_ID; + НоваяСтрокаНарушения.Нарушение = СтрокаНарушения.Violation_Note; + НоваяСтрокаНарушения.НарушенныйАкт = СтрокаНарушения.Violation_Act; + НоваяСтрокаНарушения.Предписание = СтрокаНарушения.Injunction_Note; + НоваяСтрокаНарушения.Исполнение = СтрокаНарушения.Injunction_Execution; + КонецЦикла; + КонецЕсли; + + КоличествоНарушений = НоваяСтрока.Нарушения.Количество(); + Если КоличествоНарушений = 0 Тогда + НоваяСтрока.Результат = НСтр("ru='Нарушений не выявлено'"); + Иначе + НоваяСтрока.Нарушения.Сортировать("НомерНарушения"); + НоваяСтрока.Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Выявлено %1'"), + СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью( + КоличествоНарушений, НСтр("ru='нарушение,нарушения,нарушений'"))); + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ИнформацияОПроверках.Проверки.Сортировать("ПериодПроверки,ДатаПроверки,КонтролирующийОрган"); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1413,8 +1854,8 @@ Прокси = ОбщегоНазначения.WSПрокси( АдресСервиса(), // АдресWSDL ПространствоИмен(), // URIПространстваИмен - "RequisitesWebServiceEndpointImpl3Service", // ИмяСервиса - "RequisitesWebServiceEndpointImpl3Port", // ИмяТочкиПодключения + "RequisitesWebServiceEndpointImpl7Service", // ИмяСервиса + "RequisitesWebServiceEndpointImpl7Port", // ИмяТочкиПодключения ПараметрыАутентификации.Логин, // ИмяПользователя ПараметрыАутентификации.Пароль, // Пароль 60); //Таймаут @@ -1450,8 +1891,8 @@ КонецФункции Функция АдресСервиса() - - Возврат "https://api.orgregister.1c.ru/orgregister/v3?wsdl"; + + Возврат "https://api.orgregister.1c.ru/orgregister/v7?wsdl"; КонецФункции @@ -1484,6 +1925,13 @@ ТекстСобытия = НСтр("ru='Ошибка доступа'", КодОсновногоЯзыка); ОписаниеОшибки = НСтр("ru='Не указан пароль для доступа к интернет-поддержке'"); + ИначеЕсли СтрНайти(ОписаниеОшибкиВРег, "SERVER-11:") > 0 + ИЛИ СтрНайти(ОписаниеОшибкиВРег, "SERVER-12:") > 0 Тогда + + ТекстОшибки = "Сервис1СКонтрагентНеПодключен"; // Служебный текст. Должен быть обработан на клиенте. + ТекстСобытия = НСтр("ru='Ошибка доступа'", КодОсновногоЯзыка); + ОписаниеОшибки = НСтр("ru='Не подключен сервис 1С:Контрагент'"); + ИначеЕсли СтрНайти(ОписаниеОшибкиВРег, """STATUS"":401") > 0 ИЛИ СтрНайти(ОписаниеОшибкиВРег, "SERVER-9:") > 0 Тогда @@ -1500,6 +1948,8 @@ ТекстОшибки = НСтр("ru='Не указан ИНН предпринимателя'"); ИначеЕсли ИмяМетода = "getCorporationRequisitesByNameAndAddress" Тогда ТекстОшибки = НСтр("ru='Не указано наименование юридического лица'"); + ИначеЕсли ИмяМетода = "getInspectionsByInn" Тогда + ТекстОшибки = НСтр("ru='Не указан ИНН проверяемого лица'"); КонецЕсли; ТекстСобытия = НСтр("ru='Ошибка получения данных'", КодОсновногоЯзыка); @@ -1511,17 +1961,22 @@ ИначеЕсли ИмяМетода = "getEntrepreneurRequisitesByINN" ИЛИ ИмяМетода = "checkPersonTrustabilityByInn" Тогда ТекстОшибки = НСтр("ru='ИНН предпринимателя должен состоять из 12 цифр'"); + ИначеЕсли ИмяМетода = "getInspectionsByInn" Тогда + ТекстОшибки = НСтр("ru='ИНН проверяемого лица должен состоять из 10 или 12 цифр'"); КонецЕсли; ТекстСобытия = НСтр("ru='Ошибка получения данных'", КодОсновногоЯзыка); ИначеЕсли СтрНайти(ОписаниеОшибкиВРег, "SERVER-3:") > 0 Тогда Если ИмяМетода = "getCorporationRequisitesByINN" + ИЛИ ИмяМетода = "checkCorporationTrustability" Тогда ТекстОшибки = НСтр("ru='ИНН юридического лица должен содержать только цифры'"); ИначеЕсли ИмяМетода = "getEntrepreneurRequisitesByINN" ИЛИ ИмяМетода = "checkPersonTrustabilityByInn" Тогда ТекстОшибки = НСтр("ru='ИНН предпринимателя должен содержать только цифры'"); + ИначеЕсли ИмяМетода = "getInspectionsByInn" Тогда + ТекстОшибки = НСтр("ru='ИНН проверяемого лица должен содержать только цифры'"); КонецЕсли; ТекстСобытия = НСтр("ru='Ошибка получения данных'", КодОсновногоЯзыка); @@ -1545,6 +2000,10 @@ СтруктураРеквизитов.ИНН); ИначеЕсли ИмяМетода = "getCorporationRequisitesByNameAndAddress" Тогда ТекстОшибки = НСтр("ru='Не удалось выполнить поиск по наименованию'"); + ИначеЕсли ИмяМетода = "getInspectionsByInn" Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Не удалось найти данные о проверках по ИНН %1'"), + СтруктураРеквизитов.ИНН); ИначеЕсли ИмяМетода = "checkCorporationTrustability" Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='Не удалось найти данные о юридическом лице с ИНН %1'"), @@ -1571,7 +2030,7 @@ КонецПроцедуры -Функция СериализацияОбъектаXDTO(ОбъектXDTO) Экспорт +Функция СериализацияОбъектаXDTO(ОбъектXDTO) Запись = Новый ЗаписьXML; Запись.УстановитьСтроку(Новый ПараметрыЗаписиXML(, , Ложь, Ложь, "")); diff --git a/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl index 87b145996..6b6c8a818 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl @@ -456,6 +456,8 @@ Возврат; КонецЕсли; + Источник.ДополнительныеСвойства.Вставить("РежимЗаписи", РежимЗаписи); + ПроверитьДатыЗапретаИзмененияДанных(Источник, Отказ); КонецПроцедуры @@ -556,6 +558,7 @@ #Область СлужебныеПроцедурыИФункции +// Для процедур ПроверитьДатуЗапретаИзменения*. Процедура ПроверитьДатыЗапретаИзмененияДанных( Источник, Отказ, ИсточникРегистр = Ложь, Замещение = Истина, Удаление = Ложь) @@ -564,6 +567,7 @@ КонецПроцедуры +// Для функции НайденЗапретИзмененияДанных. Функция НайтиДатуЗапрета(Адресаты, РазделЗапрета, ОбъектЗапрета, ДополнительныеПараметры) ДатаЗапрета = Неопределено; @@ -604,6 +608,7 @@ КонецФункции +// Для функции НайденЗапретИзмененияДанных. Функция СообщениеОЗапретах(Запреты, ОписаниеДанных, СвойстваВстраивания, @@ -694,6 +699,7 @@ КонецФункции +// Для функции СообщениеОЗапретах. Функция ПредставлениеДанных(Данные) Если ТипЗнч(Данные) = Тип("Строка") Тогда diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl index 789ecbbca..6d3f9a1e0 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl @@ -57,6 +57,9 @@ // РегистрНакопленияНаборЗаписей, // РегистрБухгалтерииНаборЗаписей, // РегистрРасчетаНаборЗаписей - набор записей (ПередЗаписью или ПриЧтенииНаСервере). +// +// Для документов в свойство ДополнительныеСвойства вставляется свойство РежимЗаписи, +// если вызов делается в процессе записи документа. // // ПроверкаЗапретаИзменения - Булево - когда Истина, тогда проверка изменения выполняется. // Если установить Ложь, тогда проверка запрета изменения будет пропущена. diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl index a599c515f..1061ecabf 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl @@ -69,28 +69,12 @@ КонецПроцедуры -// См. описание процедуры СтандартныеПодсистемыСервер.СобратьСтатистикуКонфигурации. -Процедура СобратьСтатистикуКонфигурации() Экспорт +// Возвращает возможность проверки запрета изменения данных. +Функция ЗапретИзмененияПроверяется(ОбъектМетаданных) Экспорт - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда - Возврат; - КонецЕсли; + Возврат ИсточникиДанныхДляПроверкиЗапретаИзменения().Получить(ОбъектМетаданных.ПолноеИмя()) <> Неопределено; - МодульЦентрМониторинга = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторинга"); - - ТекстЗапроса = - "ВЫБРАТЬ - | КОЛИЧЕСТВО(1) КАК Количество - |ИЗ - | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения"; - - Запрос = Новый Запрос(ТекстЗапроса); - Выборка = Запрос.Выполнить().Выбрать(); - Выборка.Следующий(); - - МодульЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("ДатаЗапретаУстановлена", Выборка.Количество > 0); - -КонецПроцедуры +КонецФункции // Обработчики событий подсистемы Пользователи. @@ -156,93 +140,25 @@ // Содержит настройки размещения вариантов отчетов в панели отчетов. // // Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// Настройки - Коллекция - Содержит настройки всех отчетов и вариантов конфигурации. +// Используется для передачи в параметрах вспомогательных методов. // // Описание: -// В данной процедуре необходимо указать каким именно образом предопределенные варианты отчетов -// будут регистрироваться в программе и показываться в панели отчетов. +// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Вспомогательные методы: -// НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.<ИмяОтчета>); -// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// -// Данные функции получают соответственно настройки отчета и настройки варианта отчета следующей структуры: -// * Включен - Булево - -// Если Ложь, то вариант отчета не регистрируется в подсистеме. -// Используется для удаления технических и контекстных вариантов отчетов из всех интерфейсов. -// Эти варианты отчета по прежнему можно открывать в форме отчета программно при помощи -// параметров открытия (см. справку по "Расширение управляемой формы для отчета.КлючВарианта"). -// * ВидимостьПоУмолчанию - Булево - -// Если Ложь, то вариант отчета по умолчанию скрыт в панели отчетов. -// Пользователь может "включить" его в режиме настройки панели отчетов -// или открыть через форму "Все отчеты". -// * Описание - Строка - Дополнительная информация по варианту отчета. -// В панели отчетов выводится в качестве подсказки. -// Должно расшифровывать для пользователя содержимое варианта отчета -// и не должно дублировать наименование варианта отчета. -// * Размещение - Соответствие - Настройки размещения варианта отчета в разделах. -// ** Ключ - ОбъектМетаданных: Подсистема - Подсистема, в которой размещается отчет или вариант отчета. -// ** Значение - Строка - Необязательный. Настройки размещения в подсистеме. -// "" - Выводить отчет в своей группе обычным шрифтом. -// "Важный" - Выводить отчет в своей группе жирным шрифтом. -// "СмТакже" - Выводить отчет в группе "См. также". -// * ФункциональныеОпции - Массив из Строка - -// Имена функциональных опций варианта отчета. -// -// Например: -// -// (1) Добавить в подсистему вариант отчета. -// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Метаданные.Отчеты.ИмяОтчета, "ИмяВарианта1"); -// Вариант.Размещение.Вставить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); -// -// (2) Отключить вариант отчета. -// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Метаданные.Отчеты.ИмяОтчета, "ИмяВарианта1"); -// Вариант.Включен = Ложь; -// -// (3) Отключить все варианты отчета, кроме требуемого. -// Отчет = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ИмяОтчета); -// Отчет.Включен = Ложь; -// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта"); -// Вариант.Включен = Истина; -// -// (4) Результат исполнения 4.1 и 4.2 будет одинаковым: -// (4.1) -// Отчет = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ИмяОтчета); -// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта1"); -// Вариант.Размещение.Удалить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); -// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта2"); -// Вариант.Размещение.Удалить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); -// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта3"); -// Вариант.Размещение.Удалить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); -// -// (4.2) -// Отчет = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ИмяОтчета); -// Отчет.Размещение.Удалить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); -// ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта1"); -// ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта2"); -// ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта3"); -// Отчет.Размещение.Вставить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); -// -// Важно: -// Отчет выступает в качестве контейнера вариантов. -// Изменяя настройки отчета можно сразу изменять настройки всех его вариантов. -// Однако, если явно получить настройки варианта отчета, то они станут самостоятельными, -// т.е. более не будут наследовать изменения настроек от отчета. См. примеры 3 и 4. -// -// Начальная настройка размещения отчетов по подсистемам зачитывается из метаданных, -// ее дублирование в коде не требуется. -// -// Функциональные опции вариантов объединяются с функциональными опциями отчетов по следующим правилам: -// (ФункциональнаяОпция1Отчета ИЛИ ФункциональнаяОпция2Отчета) И (ФункциональнаяОпция3Варианта ИЛИ -// ФункциональнаяОпция4Варианта). -// Функциональные опции отчетов не зачитываются из метаданных, -// они применяются на этапе использования подсистемы пользователем. -// Через ОписаниеОтчета можно добавлять функциональные опции, которые будут соединяться по указанным выше правилам, -// но надо помнить, что эти функциональные опции будут действовать только для предопределенных вариантов этого -// отчета. -// Для пользовательских вариантов отчета действуют только функциональные опции отчета -// - они отключаются только с отключением всего отчета. +// 1. Функции ОписаниеОтчета и ОписаниеВарианта формируют описание настроек отчета и варианта для последующего изменения: +// НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.<ИмяОтчета>); +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// Возвращаемые коллекции содержат одинаковый набор свойств. +// НастройкиОтчета используются как умолчания для вариантов, описания которых еще не получены. +// Подробнее - см. "свойства для изменения" в комментарии к ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// 2. Процедура УстановитьРежимВыводаВПанеляхОтчетов позволяет настроить режим группировки вариантов в панелях отчетов: +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Отчеты.<ИмяОтчета>, Истина/Ложь); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Подсистемы.<ИмяПодсистемы>, Истина/Ложь); +// 3. Процедура НастроитьОтчетВМодулеМенеджера позволяет переопределять настройки отчета в его модуле менеджера: +// ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.<ИмяОтчета>); // Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт @@ -259,7 +175,7 @@ // гарантируется с помощью других механизмов. // // Параметры: -// Типы - Массив(ОбъектМетаданных) +// Типы - Массив(ОбъектМетаданных). // Процедура ПриЗаполненииТиповОбщихДанныхНеТребующихСопоставлениеСсылокПриЗагрузке(Типы) Экспорт @@ -490,6 +406,7 @@ КонецЕсли; Иначе + // Выполняется при условии: // НЕ ИсточникРегистр И Источник.ЭтоНовый() // ИЛИ ИсточникРегистр И НЕ Замещение // ИЛИ НЕ ИсточникРегистр И Удаление @@ -676,6 +593,13 @@ КонецФункции +Функция ТекстОшибкиДатыЗапретаЗагрузкиНеВнедрены() Экспорт + + Возврат НСтр("ru = 'Даты запрета загрузки данных прошлых периодов из других программ + |не предусмотрены ни для одного плана обмена.'"); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы. @@ -852,7 +776,7 @@ // Для процедуры ПропуститьПроверкуДатЗапрета. Функция ЗапретИзмененияДанныхНеИспользуется(ПроверкаЗапретаИзменения, УзелПроверкиЗапретаЗагрузки) - Если ОбновлениеИнформационнойБазыСлужебныйПовтИсп.НеобходимоОбновлениеИнформационнойБазы() Тогда + Если ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда Возврат Истина; КонецЕсли; @@ -1098,17 +1022,23 @@ Возврат ЗначенияПолей[Поле.Имя]; КонецЕсли; - Ссылка = ЗначенияПолей[Поле.Имя]; + ТаблицаЗначений = Новый ТаблицаЗначений; + ТаблицаЗначений.Колонки.Добавить("ТекущаяСсылка", Поле.Тип); + ТаблицаЗначений.Добавить().ТекущаяСсылка = ЗначенияПолей[Поле.Имя]; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | ЕстьNULL(" + Поле.Путь + ", Неопределено) КАК ЗначениеРеквизита + | ТекущаяТаблица.ТекущаяСсылка КАК ТекущаяСсылка + |ПОМЕСТИТЬ ТекущаяТаблица |ИЗ - | " + Ссылка.Метаданные().ПолноеИмя() + " КАК Таблица - |ГДЕ - | Таблица.Ссылка = &Ссылка"; - Запрос.УстановитьПараметр("Ссылка", Ссылка); + | &ТаблицаЗначений КАК ТекущаяТаблица + |; + |ВЫБРАТЬ + | ЕстьNULL(ТекущаяТаблица.ТекущаяСсылка." + Поле.Путь + ", НЕОПРЕДЕЛЕНО) КАК ЗначениеРеквизита + |ИЗ + | ТекущаяТаблица КАК ТекущаяТаблица"; + Запрос.УстановитьПараметр("ТаблицаЗначений", ТаблицаЗначений); Выборка = Запрос.Выполнить().Выбрать(); Выборка.Следующий(); @@ -1387,6 +1317,10 @@ Функция ТекущиеИсточникиДанныхДляПроверкиЗапретаИзменения(СсылкиИменРазделов) + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат Новый ФиксированноеСоответствие(Новый Соответствие); + КонецЕсли; + ИсточникиДанных = Новый ТаблицаЗначений; ИсточникиДанных.Колонки.Добавить("Таблица", Новый ОписаниеТипов("Строка")); ИсточникиДанных.Колонки.Добавить("ПолеДаты", Новый ОписаниеТипов("Строка")); @@ -1473,7 +1407,7 @@ Функция ПолеТаблицы(Источник, ВидПоля, ОбъектМетаданных, ЭтоРегистр) - Свойства = Новый Структура("Имя, ТабличнаяЧасть, Путь, ИмяИПуть"); + Свойства = Новый Структура("Имя, Тип, ТабличнаяЧасть, Путь, ИмяИПуть"); Поле = Источник[ВидПоля]; Поля = СтрРазделить(Поле, ".", Ложь); @@ -1510,7 +1444,8 @@ Свойства.ИмяИПуть = Поле; Свойства.Имя = Поля[0]; - ПозицияТочки = Найти(Поле, "."); + Свойства.Тип = ТипПоля(ОбъектМетаданных, Свойства.Имя); + ПозицияТочки = СтрНайти(Поле, "."); Если ПозицияТочки > 0 Тогда Свойства.Путь = Сред(Поле, ПозицияТочки + 1); КонецЕсли; @@ -1553,11 +1488,12 @@ Свойства.ТабличнаяЧасть = Поля[0]; Свойства.Имя = Поля[1]; + Свойства.Тип = ТипПоля(ОбъектМетаданных, Свойства.Имя, Свойства.ТабличнаяЧасть); - ПозицияТочки = Найти(Поле, "."); + ПозицияТочки = СтрНайти(Поле, "."); Свойства.ИмяИПуть = Сред(Поле, ПозицияТочки + 1); - ПозицияТочки = Найти(Свойства.ИмяИПуть, "."); + ПозицияТочки = СтрНайти(Свойства.ИмяИПуть, "."); Если ПозицияТочки > 0 Тогда Свойства.Путь = Сред(Свойства.ИмяИПуть, ПозицияТочки + 1); КонецЕсли; @@ -1566,6 +1502,25 @@ КонецФункции +Функция ТипПоля(ОбъектМетаданных, ИмяПоля, ИмяТабличнойЧасти = "") + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | &ИмяПоля КАК ТекущееПоле + |ИЗ + | &ТекущаяТаблица КАК ТекущаяТаблица + |ГДЕ + | ЛОЖЬ"; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ИмяПоля", "ТекущаяТаблица." + ИмяПоля); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекущаяТаблица", ОбъектМетаданных.ПолноеИмя() + + ?(ЗначениеЗаполнено(ИмяТабличнойЧасти), "." + ИмяТабличнойЧасти, "")); + + Возврат Новый ОписаниеТипов(Запрос.Выполнить().Выгрузить().Колонки["ТекущееПоле"].ТипЗначения,, "Null"); + +КонецФункции + Процедура ДобавитьТекстЗапроса(ТекстЗапроса, Таблица, Источник) Если Не ЗначениеЗаполнено(Источник.ПолеДаты.ТабличнаяЧасть) diff --git a/SSL/src/CommonModules/ДлительныеОперации/Module.bsl b/SSL/src/CommonModules/ДлительныеОперации/Module.bsl index 958bfa418..e81d8f979 100644 --- a/SSL/src/CommonModules/ДлительныеОперации/Module.bsl +++ b/SSL/src/CommonModules/ДлительныеОперации/Module.bsl @@ -6,6 +6,221 @@ #Область ПрограммныйИнтерфейс +// Запустить выполнение процедуры в фоновом задании. +// +// Параметры: +// ИмяПроцедуры - Строка - имя экспортной процедуры, которую необходимо выполнить в фоне. +// У процедуры может быть два или три формальных параметра: +// * Параметры - Структура - произвольные параметры ПараметрыПроцедуры. Обязательно; +// * АдресРезультата - Строка - адрес временного хранилища, в которое нужно +// поместить результат работы процедуры. Обязательно; +// * АдресДополнительногоРезультата - Строка - если в ПараметрыВыполнения установлен +// параметр ДополнительныйРезультат, то содержит адрес дополнительного временного хранилища, +// в которое нужно поместить результат работы процедуры. Опционально. +// ПараметрыПроцедуры - Структура - произвольные параметры вызова процедуры ИмяПроцедуры. +// ПараметрыВыполнения - Структура - см. функцию ПараметрыВыполненияВФоне. +// +// Возвращаемое значение: +// Структура - параметры выполнения задания: +// * Статус - Строка - "Выполняется", если задание еще не завершилось; +// "Выполнено", если задание было успешно выполнено; +// "Ошибка", если задание завершено с ошибкой; +// "Отменено", если задание отменено пользователем или администратором. +// * ИдентификаторЗадания - УникальныйИдентификатор - если Статус = "Выполняется", то содержит +// идентификатор запущенного фонового задания. +// * АдресРезультата - Строка - адрес временного хранилища, в которое будет +// помещен (или уже помещен) результат работы процедуры. +// * АдресДополнительногоРезультата - Строка - если установлен параметр ДополнительныйРезультат, +// содержит адрес дополнительного временного хранилища, +// в которое будет помещен (или уже помещен) результат работы процедуры. +// * КраткоеПредставлениеОшибки - Строка - краткая информация об исключении, если Статус = "Ошибка". +// * ПодробноеПредставлениеОшибки - Строка - подробная информация об исключении, если Статус = "Ошибка". +// +Функция ВыполнитьВФоне(Знач ИмяПроцедуры, Знач ПараметрыПроцедуры, Знач ПараметрыВыполнения) Экспорт + + АдресРезультата = ?(ПараметрыВыполнения.АдресРезультата <> Неопределено, + ПараметрыВыполнения.АдресРезультата, + ПоместитьВоВременноеХранилище(Неопределено, ПараметрыВыполнения.ИдентификаторФормы)); + + Результат = Новый Структура; + Результат.Вставить("Статус", "Выполняется"); + Результат.Вставить("ИдентификаторЗадания", Неопределено); + Результат.Вставить("АдресРезультата", АдресРезультата); + Результат.Вставить("АдресДополнительногоРезультата", ""); + Результат.Вставить("КраткоеПредставлениеОшибки", ""); + Результат.Вставить("ПодробноеПредставлениеОшибки", ""); + + ПараметрыЭкспортнойПроцедуры = Новый Массив; + ПараметрыЭкспортнойПроцедуры.Добавить(ПараметрыПроцедуры); + ПараметрыЭкспортнойПроцедуры.Добавить(АдресРезультата); + + Если ПараметрыВыполнения.ДополнительныйРезультат Тогда + Результат.АдресДополнительногоРезультата = ПоместитьВоВременноеХранилище(Неопределено, ПараметрыВыполнения.ИдентификаторФормы); + ПараметрыЭкспортнойПроцедуры.Добавить(Результат.АдресДополнительногоРезультата); + КонецЕсли; + + ЗапущеноЗаданийВФайловойИБ = 0; + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() + И Не ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда + Отбор = Новый Структура; + Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + ЗапущеноЗаданийВФайловойИБ = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор).Количество(); + КонецЕсли; + + // Выполнить в основном потоке. + Если ОбщегоНазначенияКлиентСервер.РежимОтладки() Или ЗапущеноЗаданийВФайловойИБ > 0 Тогда + Попытка + РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыЭкспортнойПроцедуры); + Результат.Статус = "Выполнено"; + Исключение + Результат.Статус = "Ошибка"; + Результат.КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Результат.ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + Возврат Результат; + КонецЕсли; + + // Выполнить в фоне. + Попытка + Задание = ЗапуститьФоновоеЗаданиеСКонтекстомКлиента(ИмяПроцедуры, ПараметрыЭкспортнойПроцедуры, + ПараметрыВыполнения.КлючФоновогоЗадания, ПараметрыВыполнения.НаименованиеФоновогоЗадания); + Исключение + Результат.Статус = "Ошибка"; + Если Задание <> Неопределено И Задание.ИнформацияОбОшибке <> Неопределено Тогда + Результат.КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(Задание.ИнформацияОбОшибке); + Результат.ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(Задание.ИнформацияОбОшибке); + Иначе + Результат.КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Результат.ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецЕсли; + Возврат Результат; + КонецПопытки; + + Результат.ИдентификаторЗадания = Задание.УникальныйИдентификатор; + Если ПараметрыВыполнения.ОжидатьЗавершение <> 0 Тогда + Попытка + Задание.ОжидатьЗавершения(ПараметрыВыполнения.ОжидатьЗавершение); + Исключение + // Специальная обработка не требуется, возможно исключение вызвано истечением времени ожидания. + КонецПопытки; + КонецЕсли; + + ЗаполнитьЗначенияСвойств(Результат, ОперацияВыполнена(Задание.УникальныйИдентификатор)); + Возврат Результат; + +КонецФункции + +// Возвращает новую структуру для параметра ПараметрыВыполнения функции ВыполнитьВФоне. +// +// Параметры: +// ИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы, +// во временное хранилище которой надо поместить результат выполнения процедуры. +// +// Возвращаемое значение: +// Структура - со свойствами: +// * ИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы, +// во временное хранилище которой надо поместить результат выполнения процедуры. +// * ДополнительныйРезультат - Булево - признак использования дополнительного временного хранилища для передачи +// результата из фонового задания в родительский сеанс. По умолчанию - Ложь. +// * ОжидатьЗавершение - Число, Неопределено - таймаут в секундах ожидания завершения фонового задания. +// Если задано Неопределено, то ждать до момента завершения задания. +// Если задано 0, то ждать завершения задания не требуется. +// По умолчанию - 2 секунды; а для низкой скорости соединения - 4. +// * НаименованиеФоновогоЗадания - Строка - описание фонового задания. По умолчанию - имя процедуры. +// * КлючФоновогоЗадания - Строка - уникальный ключ для активных фоновых заданий, имеющих такое же имя процедуры. +// По умолчанию, не задан. +// * АдресРезультата - Строка - адрес временного хранилища, в которое должен быть помещен результат +// работы процедуры. Если не задан, адрес формируется автоматически. +// +Функция ПараметрыВыполненияВФоне(Знач ИдентификаторФормы) Экспорт + + Результат = Новый Структура; + Результат.Вставить("ИдентификаторФормы", ИдентификаторФормы); + Результат.Вставить("ДополнительныйРезультат", Ложь); + Результат.Вставить("ОжидатьЗавершение", ?(ПолучитьСкоростьКлиентскогоСоединения() = СкоростьКлиентскогоСоединения.Низкая, 4, 2)); + Результат.Вставить("НаименованиеФоновогоЗадания", ""); + Результат.Вставить("КлючФоновогоЗадания", ""); + Результат.Вставить("АдресРезультата", Неопределено); + Возврат Результат; + +КонецФункции + +// Регистрирует информацию о ходе выполнения фонового задания. +// В дальнейшем ее можно считать при помощи функции ПрочитатьПрогресс. +// +// Параметры: +// Процент - Число - Необязательный. Процент выполнения. +// Текст - Строка - Необязательный. Информация о текущей операции. +// ДополнительныеПараметры - Произвольный - Необязательный. Любая дополнительная информация, +// которую необходимо передать на клиент. Значение должно быть простым (сериализуемым в XML строку). +// +Процедура СообщитьПрогресс(Знач Процент = Неопределено, Знач Текст = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт + + ПередаваемоеЗначение = Новый Структура; + Если Процент <> Неопределено Тогда + ПередаваемоеЗначение.Вставить("Процент", Процент); + КонецЕсли; + Если Текст <> Неопределено Тогда + ПередаваемоеЗначение.Вставить("Текст", Текст); + КонецЕсли; + Если ДополнительныеПараметры <> Неопределено Тогда + ПередаваемоеЗначение.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); + КонецЕсли; + + ПередаваемыйТекст = ОбщегоНазначения.ЗначениеВСтрокуXML(ПередаваемоеЗначение); + + Текст = "{" + ИмяПодсистемы() + "}" + ПередаваемыйТекст; + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Текст); + + ПолучитьСообщенияПользователю(Истина); // Удаление предыдущих сообщений. + +КонецПроцедуры + +// Считывает информацию о ходе выполнения фонового задания. +// +// Возвращаемое значение: +// Структура - информация о ходе выполнения фонового задания, записанная процедурой СообщитьПрогресс: +// * Процент - Число - Необязательный. Процент выполнения. +// * Текст - Строка - Необязательный. Информация о текущей операции. +// * ДополнительныеПараметры - Произвольный - Необязательный. Любая дополнительная информация. +// +Функция ПрочитатьПрогресс(Знач ИдентификаторЗадания) Экспорт + Перем Результат; + + Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания); + Если Задание = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + МассивСообщений = Задание.ПолучитьСообщенияПользователю(Истина); + Если МассивСообщений = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + Количество = МассивСообщений.Количество(); + + Для Номер = 1 По Количество Цикл + ОбратныйИндекс = Количество - Номер; + Сообщение = МассивСообщений[ОбратныйИндекс]; + + Если СтрНачинаетсяС(Сообщение.Текст, "{") Тогда + Позиция = СтрНайти(Сообщение.Текст, "}"); + Если Позиция > 2 Тогда + ИдентификаторМеханизма = Сред(Сообщение.Текст, 2, Позиция - 2); + Если ИдентификаторМеханизма = ИмяПодсистемы() Тогда + ПолученныйТекст = Сред(Сообщение.Текст, Позиция + 1); + Результат = ОбщегоНазначения.ЗначениеИзСтрокиXML(ПолученныйТекст); + Прервать; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +// ------------------------------ + // Запускает выполнение процедуры в фоновом задании. // // Параметры: @@ -34,13 +249,56 @@ Функция ЗапуститьВыполнениеВФоне(Знач ИдентификаторФормы, Знач ИмяЭкспортнойПроцедуры, Знач Параметры, Знач НаименованиеЗадания = "", ИспользоватьДополнительноеВременноеХранилище = Ложь) Экспорт - Возврат ЗапуститьВыполнениеВФонеСлужебный( - ИдентификаторФормы, - ИмяЭкспортнойПроцедуры, - Параметры, - НаименованиеЗадания, - ИспользоватьДополнительноеВременноеХранилище, - Истина); + АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, ИдентификаторФормы); + + Результат = Новый Структура; + Результат.Вставить("АдресХранилища", АдресХранилища); + Результат.Вставить("ЗаданиеВыполнено", Ложь); + Результат.Вставить("ИдентификаторЗадания", Неопределено); + + Если Не ЗначениеЗаполнено(НаименованиеЗадания) Тогда + НаименованиеЗадания = ИмяЭкспортнойПроцедуры; + КонецЕсли; + + ПараметрыЭкспортнойПроцедуры = Новый Массив; + ПараметрыЭкспортнойПроцедуры.Добавить(Параметры); + ПараметрыЭкспортнойПроцедуры.Добавить(АдресХранилища); + + Если ИспользоватьДополнительноеВременноеХранилище Тогда + АдресХранилищаДополнительный = ПоместитьВоВременноеХранилище(Неопределено, ИдентификаторФормы); + ПараметрыЭкспортнойПроцедуры.Добавить(АдресХранилищаДополнительный); + КонецЕсли; + + ЗапущеноЗаданий = 0; + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() + И Не ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда + Отбор = Новый Структура; + Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + ЗапущеноЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор).Количество(); + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.РежимОтладки() + Или ЗапущеноЗаданий > 0 Тогда + РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(ИмяЭкспортнойПроцедуры, ПараметрыЭкспортнойПроцедуры); + Результат.ЗаданиеВыполнено = Истина; + Иначе + ВремяОжидания = ?(ПолучитьСкоростьКлиентскогоСоединения() = СкоростьКлиентскогоСоединения.Низкая, 4, 2); + Задание = ЗапуститьФоновоеЗаданиеСКонтекстомКлиента(ИмяЭкспортнойПроцедуры, ПараметрыЭкспортнойПроцедуры,, НаименованиеЗадания); + Попытка + Задание.ОжидатьЗавершения(ВремяОжидания); + Исключение + // Специальная обработка не требуется, возможно исключение вызвано истечением времени ожидания. + КонецПопытки; + + Результат.ЗаданиеВыполнено = ЗаданиеВыполнено(Задание.УникальныйИдентификатор); + Результат.ИдентификаторЗадания = Задание.УникальныйИдентификатор; + КонецЕсли; + + Если ИспользоватьДополнительноеВременноеХранилище Тогда + Результат.Вставить("АдресХранилищаДополнительный", АдресХранилищаДополнительный); + КонецЕсли; + + Возврат Результат; КонецФункции @@ -67,7 +325,7 @@ Исключение // Возможно задание как раз в этот момент закончилось и ошибки нет. ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции.Отмена выполнения фонового задания'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + УровеньЖурналаРегистрации.Предупреждение, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; КонецПроцедуры @@ -114,7 +372,7 @@ КонецЕсли; Если ПоказатьПолныйТекстОшибки Тогда - ТекстОшибки = КраткоеПредставлениеОшибки(ПолучитьИнформациюОбОшибке(Задание.ИнформацияОбОшибке)); + ТекстОшибки = КраткоеПредставлениеОшибки(ПричинаОшибки(Задание.ИнформацияОбОшибке)); ВызватьИсключение(ТекстОшибки); ИначеЕсли ОперацияНеВыполнена Тогда ВызватьИсключение(НСтр("ru = 'Не удалось выполнить данную операцию. @@ -123,186 +381,135 @@ КонецФункции -// Регистрирует в сообщениях информацию о ходе выполнения фонового задания. -// В дальнейшем эту информацию можно считать с клиента при помощи функции ПрочитатьПрогресс. -// -// Параметры: -// Процент - Число - Необязательный. Процент выполнения. -// Текст - Строка - Необязательный. Информация о текущей операции. -// ДополнительныеПараметры - Произвольный - Необязательный. Любая дополнительная информация, -// которую необходимо передать на клиент. Значение должно быть простым (сериализуемым в XML строку). -// -Процедура СообщитьПрогресс(Знач Процент = Неопределено, Знач Текст = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт - - ПередаваемоеЗначение = Новый Структура; - Если Процент <> Неопределено Тогда - ПередаваемоеЗначение.Вставить("Процент", Процент); - КонецЕсли; - Если Текст <> Неопределено Тогда - ПередаваемоеЗначение.Вставить("Текст", Текст); - КонецЕсли; - Если ДополнительныеПараметры <> Неопределено Тогда - ПередаваемоеЗначение.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); - КонецЕсли; - - ПередаваемыйТекст = ОбщегоНазначения.ЗначениеВСтрокуXML(ПередаваемоеЗначение); - - Текст = "{" + ИмяПодсистемы() + "}" + ПередаваемыйТекст; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Текст); - - ПолучитьСообщенияПользователю(Истина); // Удаление предыдущих сообщений. - -КонецПроцедуры - -// Находит фоновое задание и считывает из его сообщений информацию о ходе выполнения. -// -// Возвращаемое значение: -// Структура - Информация о ходе выполнения фонового задания. -// Ключи и значения структуры соответствуют именам и значениям параметров процедуры СообщитьПрогресс(). -// -Функция ПрочитатьПрогресс(Знач ИдентификаторЗадания) Экспорт - Перем Результат; - - Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания); - Если Задание = Неопределено Тогда - Возврат Результат; - КонецЕсли; - - МассивСообщений = Задание.ПолучитьСообщенияПользователю(Истина); - Если МассивСообщений = Неопределено Тогда - Возврат Результат; - КонецЕсли; - - Количество = МассивСообщений.Количество(); - - Для Номер = 1 По Количество Цикл - ОбратныйИндекс = Количество - Номер; - Сообщение = МассивСообщений[ОбратныйИндекс]; - - Если СтрНачинаетсяС(Сообщение.Текст, "{") Тогда - Позиция = СтрНайти(Сообщение.Текст, "}"); - Если Позиция > 2 Тогда - ИдентификаторМеханизма = Сред(Сообщение.Текст, 2, Позиция - 2); - Если ИдентификаторМеханизма = ИмяПодсистемы() Тогда - ПолученныйТекст = Сред(Сообщение.Текст, Позиция + 1); - Результат = ОбщегоНазначения.ЗначениеИзСтрокиXML(ПолученныйТекст); - Прервать; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Возврат Результат; -КонецФункции - -#КонецОбласти - -#Область СлужебныйПрограммныйИнтерфейс - -// Запускает выполнение процедуры в фоновом задании. -Функция ЗапуститьВыполнениеВФонеСлужебный(Знач ИдентификаторФормы, Знач ИмяЭкспортнойПроцедуры, Знач Параметры, - Знач НаименованиеЗадания = "", ИспользоватьДополнительноеВременноеХранилище = Ложь, ОжидатьЗавершение = Истина) Экспорт - - - АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, ИдентификаторФормы); - - Результат = Новый Структура; - Результат.Вставить("АдресХранилища", АдресХранилища); - Результат.Вставить("ЗаданиеВыполнено", Ложь); - Результат.Вставить("ИдентификаторЗадания", Неопределено); - - Если Не ЗначениеЗаполнено(НаименованиеЗадания) Тогда - НаименованиеЗадания = ИмяЭкспортнойПроцедуры; - КонецЕсли; - - ПараметрыЭкспортнойПроцедуры = Новый Массив; - ПараметрыЭкспортнойПроцедуры.Добавить(Параметры); - ПараметрыЭкспортнойПроцедуры.Добавить(АдресХранилища); - - Если ИспользоватьДополнительноеВременноеХранилище Тогда - АдресХранилищаДополнительный = ПоместитьВоВременноеХранилище(Неопределено, ИдентификаторФормы); - ПараметрыЭкспортнойПроцедуры.Добавить(АдресХранилищаДополнительный); - КонецЕсли; - - ЗапущеноЗаданий = 0; - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() - И Не ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда - Отбор = Новый Структура; - Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); - ЗапущеноЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор).Количество(); - КонецЕсли; - - Если ОбщегоНазначенияКлиентСервер.РежимОтладки() - Или ЗапущеноЗаданий > 0 Тогда - РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(ИмяЭкспортнойПроцедуры, ПараметрыЭкспортнойПроцедуры); - Результат.ЗаданиеВыполнено = Истина; - Иначе - ПараметрыЗадания = Новый Массив; - ПараметрыЗадания.Добавить(ИмяЭкспортнойПроцедуры); - ПараметрыЗадания.Добавить(ПараметрыЭкспортнойПроцедуры); - ВремяОжидания = ?(ПолучитьСкоростьКлиентскогоСоединения() = СкоростьКлиентскогоСоединения.Низкая, 4, 2); - - Задание = СтандартныеПодсистемыСервер.ЗапуститьФоновоеЗаданиеСКонтекстомКлиента(ИмяЭкспортнойПроцедуры, - ПараметрыЭкспортнойПроцедуры,, НаименованиеЗадания); - - Если ОжидатьЗавершение Тогда - Попытка - Задание.ОжидатьЗавершения(ВремяОжидания); - Исключение - // Специальная обработка не требуется, возможно исключение вызвано истечением времени ожидания. - КонецПопытки; - КонецЕсли; - - Результат.ЗаданиеВыполнено = ЗаданиеВыполнено(Задание.УникальныйИдентификатор); - Результат.ИдентификаторЗадания = Задание.УникальныйИдентификатор; - КонецЕсли; - - Если ИспользоватьДополнительноеВременноеХранилище Тогда - Результат.Вставить("АдресХранилищаДополнительный", АдресХранилищаДополнительный); - КонецЕсли; - - Возврат Результат; - -КонецФункции - -// Считывает состояние фонового задания по переданному идентификатору. -// -// Параметры: -// Идентификатор - УникальныйИдентификатор - Идентификатор фонового задания. -// -// Возвращаемое значение: -// Неопределено - Задание не найдено. -// Структура - Сведения о задании. -// * Выполняется - Булево - Истина когда фоновое задание еще выполняется. -// * Успешно - Булево - Истина когда сеанс фонового задания завершился без ошибок. -// * Ошибка - Строка, ИнформацияОбОшибке, Неопределено - Описание ошибки. -// -Функция НайтиЗаданиеСлужебный(Знач Идентификатор) Экспорт - Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор); - Если Задание = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - - Результат = Новый Структура("Выполняется, Успех, Ошибка", Ложь, Ложь, Неопределено); - Если Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда - Результат.Выполняется = Истина; - Иначе - Результат.Выполняется = Ложь; - Если Задание.Состояние = СостояниеФоновогоЗадания.Завершено Тогда - Результат.Успех = Истина; - Иначе - Результат.Успех = Ложь; - Результат.Ошибка = Задание.ИнформацияОбОшибке; - КонецЕсли; - КонецЕсли; - - Возврат Результат; -КонецФункции - #КонецОбласти #Область СлужебныеПроцедурыИФункции +Функция ОперацияВыполнена(Знач ИдентификаторЗадания, Знач ИсключениеПриОшибке = Ложь, Знач ВыводитьПрогрессВыполнения = Ложь, + Знач ВыводитьСообщения = Ложь) Экспорт + + Результат = Новый Структура; + Результат.Вставить("Статус", "Выполняется"); + Результат.Вставить("КраткоеПредставлениеОшибки", Неопределено); + Результат.Вставить("ПодробноеПредставлениеОшибки", Неопределено); + Результат.Вставить("Прогресс", Неопределено); + Результат.Вставить("Сообщения", Неопределено); + + Задание = НайтиЗаданиеПоИдентификатору(ИдентификаторЗадания); + Если Задание = Неопределено Тогда + ЗаписьЖурналаРегистрации(НСтр("ru = 'Длительные операции'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , НСтр("ru = 'Фоновое задание не найдено:'") + " " + Строка(ИдентификаторЗадания)); + Если ИсключениеПриОшибке Тогда + ВызватьИсключение(НСтр("ru = 'Не удалось выполнить данную операцию.'")); + КонецЕсли; + Результат.Статус = "Ошибка"; + Возврат Результат; + КонецЕсли; + + Если ВыводитьПрогрессВыполнения Тогда + Результат.Прогресс = ПрочитатьПрогресс(ИдентификаторЗадания); + ИначеЕсли ВыводитьСообщения Тогда + Результат.Сообщения = Задание.ПолучитьСообщенияПользователю(Истина); + КонецЕсли; + + Если Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда + Возврат Результат; + КонецЕсли; + + Если Задание.Состояние = СостояниеФоновогоЗадания.Отменено Тогда + Результат.Статус = "Отменено"; + Возврат Результат; + КонецЕсли; + + Если Задание.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно + Или Задание.Состояние = СостояниеФоновогоЗадания.Отменено Тогда + + Результат.Статус = "Ошибка"; + ОшибкаЗадания = Задание.ИнформацияОбОшибке; + Если ОшибкаЗадания <> Неопределено Тогда + ИнформацияОбОшибке = ПричинаОшибки(ОшибкаЗадания); + Если ИнформацияОбОшибке <> Неопределено Тогда + Результат.КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + Результат.ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + КонецЕсли; + КонецЕсли; + Если ИсключениеПриОшибке Тогда + Если Не ПустаяСтрока(Результат.КраткоеПредставлениеОшибки) Тогда + ТекстСообщения = Результат.КраткоеПредставлениеОшибки; + Иначе + ТекстСообщения = НСтр("ru = 'Не удалось выполнить данную операцию.'"); + КонецЕсли; + ВызватьИсключение ТекстСообщения; + КонецЕсли; + Возврат Результат; + КонецЕсли; + + Результат.Статус = "Выполнено"; + Возврат Результат; + +КонецФункции + +Функция ОперацииВыполнены(Знач Задания) Экспорт + + Результат = Новый Соответствие; + Для каждого Задание Из Задания Цикл + Результат.Вставить(Задание.ИдентификаторЗадания, + ОперацияВыполнена(Задание.ИдентификаторЗадания, Ложь, Задание.ВыводитьПрогрессВыполнения, Задание.ВыводитьСообщения)); + КонецЦикла; + Возврат Результат; + +КонецФункции + +// Запуск фонового задания с контекстом клиента. Например, передаются ПараметрыКлиентаНаСервере. +// Запуск выполняется с помощью процедуры ВыполнитьМетодКонфигурации общего модуля РаботаВБезопасномРежиме. +// +// Параметры: +// ИмяМетода - Строка - как в функции Выполнить менеджера фоновых заданий. +// Параметры - Массив - как в функции Выполнить менеджера фоновых заданий. +// Ключ - Строка - как в функции Выполнить менеджера фоновых заданий. +// Наименование - Строка - как в функции Выполнить менеджера фоновых заданий. +// +// Возвращаемое значение: +// ФоновоеЗадание. +// +Функция ЗапуститьФоновоеЗаданиеСКонтекстомКлиента(ИмяПроцедуры, ПараметрыПроцедуры = Неопределено, + КлючФоновогоЗадания = "", НаименованиеФоновогоЗадания = "") Экспорт + + Если ТекущийРежимЗапуска() = Неопределено Тогда + + Возврат ФоновыеЗадания.Выполнить(ИмяПроцедуры, ПараметрыПроцедуры, КлючФоновогоЗадания, + ?(ПустаяСтрока(НаименованиеФоновогоЗадания), ИмяПроцедуры, НаименованиеФоновогоЗадания)); + + КонецЕсли; + + ВсеПараметры = Новый Структура; + ВсеПараметры.Вставить("ИмяПроцедуры", ИмяПроцедуры); + ВсеПараметры.Вставить("ПараметрыПроцедуры", ПараметрыПроцедуры); + ВсеПараметры.Вставить("ПараметрыКлиентаНаСервере", СтандартныеПодсистемыСервер.ПараметрыКлиентаНаСервере()); + + ПараметрыПроцедурыФоновогоЗадания = Новый Массив; + ПараметрыПроцедурыФоновогоЗадания.Добавить(ВсеПараметры); + + Возврат ФоновыеЗадания.Выполнить("ДлительныеОперации.ВыполнитьСКонтекстомКлиента", + ПараметрыПроцедурыФоновогоЗадания, КлючФоновогоЗадания, + ?(ПустаяСтрока(НаименованиеФоновогоЗадания), ИмяПроцедуры, НаименованиеФоновогоЗадания)); + +КонецФункции + +// Продолжение процедуры ЗапуститьФоновоеЗаданиеСКонтекстомКлиента. +Процедура ВыполнитьСКонтекстомКлиента(ВсеПараметры) Экспорт + + УстановитьПривилегированныйРежим(Истина); + Если ПравоДоступа("Установка", Метаданные.ПараметрыСеанса.ПараметрыКлиентаНаСервере) Тогда + ПараметрыСеанса.ПараметрыКлиентаНаСервере = ВсеПараметры.ПараметрыКлиентаНаСервере; + КонецЕсли; + Справочники.ВерсииРасширений.ЗарегистрироватьИспользованиеВерсииРасширений(); + УстановитьПривилегированныйРежим(Ложь); + + РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры); + +КонецПроцедуры + Функция НайтиЗаданиеПоИдентификатору(Знач ИдентификаторЗадания) Если ТипЗнч(ИдентификаторЗадания) = Тип("Строка") Тогда @@ -310,17 +517,16 @@ КонецЕсли; Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания); - Возврат Задание; КонецФункции -Функция ПолучитьИнформациюОбОшибке(ИнформацияОбОшибке) +Функция ПричинаОшибки(ИнформацияОбОшибке) Результат = ИнформацияОбОшибке; Если ИнформацияОбОшибке <> Неопределено Тогда Если ИнформацияОбОшибке.Причина <> Неопределено Тогда - Результат = ПолучитьИнформациюОбОшибке(ИнформацияОбОшибке.Причина); + Результат = ПричинаОшибки(ИнформацияОбОшибке.Причина); КонецЕсли; КонецЕсли; diff --git a/SSL/src/CommonModules/ДлительныеОперацииВызовСервера/Module.bsl b/SSL/src/CommonModules/ДлительныеОперацииВызовСервера/Module.bsl new file mode 100644 index 000000000..21632c0c1 --- /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..9a91ee82c --- /dev/null +++ b/SSL/src/CommonModules/ДлительныеОперацииВызовСервера/ДлительныеОперацииВызовСервера.mdo @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="f0a6de82-45ab-4153-bccf-df82fc960aa1"> + <name>ДлительныеОперацииВызовСервера</name> + <synonym> + <key>ru</key> + <value>Длительные операции вызов сервера</value> + </synonym> + <server>true</server> + <serverCall>true</serverCall> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/ДлительныеОперацииГлобальный/Module.bsl b/SSL/src/CommonModules/ДлительныеОперацииГлобальный/Module.bsl new file mode 100644 index 000000000..77c80d308 --- /dev/null +++ b/SSL/src/CommonModules/ДлительныеОперацииГлобальный/Module.bsl @@ -0,0 +1,161 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// Поддержка работы длительных серверных операций в веб-клиенте. +// +//////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +Процедура КонтрольДлительныхОпераций() Экспорт + + АктивныеДлительныеОперации = ДлительныеОперацииКлиент.АктивныеДлительныеОперации(); + Если АктивныеДлительныеОперации.Обработка Тогда + Возврат; + КонецЕсли; + + АктивныеДлительныеОперации.Обработка = Истина; + Попытка + ПроконтролироватьДлительныеОперации(АктивныеДлительныеОперации.Список); + + АктивныеДлительныеОперации.Обработка = Ложь; + Исключение + АктивныеДлительныеОперации.Обработка = Ложь; + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Процедура ПроконтролироватьДлительныеОперации(АктивныеДлительныеОперации) + + ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); + + КонтролируемыеОперации = Новый Соответствие; + ЗаданияДляПроверки = Новый Массив; + ЗаданияДляОтмены = Новый Массив; + + Для каждого ДлительнаяОперация Из АктивныеДлительныеОперации Цикл + + ДлительнаяОперация = ДлительнаяОперация.Значение; + + ОперацияОтменена = Ложь; + Если ДлительнаяОперация.ФормаВладелец <> Неопределено И Не ДлительнаяОперация.ФормаВладелец.Открыта() Тогда + ОперацияОтменена = Истина; + КонецЕсли; + Если ДлительнаяОперация.ОповещениеОЗавершении <> Неопределено И ТипЗнч(ДлительнаяОперация.ОповещениеОЗавершении.Модуль) = Тип("УправляемаяФорма") + И Не ДлительнаяОперация.ОповещениеОЗавершении.Модуль.Открыта() Тогда + ОперацияОтменена = Истина; + КонецЕсли; + + Если ОперацияОтменена Тогда + + КонтролируемыеОперации.Вставить(ДлительнаяОперация.ИдентификаторЗадания, ДлительнаяОперация); + ЗаданияДляОтмены.Добавить(ДлительнаяОперация.ИдентификаторЗадания); + + ИначеЕсли ДлительнаяОперация.Контроль <= ТекущаяДата Тогда + + КонтролируемыеОперации.Вставить(ДлительнаяОперация.ИдентификаторЗадания, ДлительнаяОперация); + + ЗаданиеДляПроверки = Новый Структура("ИдентификаторЗадания,ВыводитьПрогрессВыполнения,ВыводитьСообщения"); + ЗаполнитьЗначенияСвойств(ЗаданиеДляПроверки, ДлительнаяОперация); + ЗаданияДляПроверки.Добавить(ЗаданиеДляПроверки); + + КонецЕсли; + + КонецЦикла; + + Статусы = Новый Соответствие; + Статусы = ДлительныеОперацииВызовСервера.ОперацииВыполнены(ЗаданияДляПроверки, ЗаданияДляОтмены); + Для каждого СтатусОперации Из Статусы Цикл + Операция = КонтролируемыеОперации[СтатусОперации.Ключ]; + Статус = СтатусОперации.Значение; + Если ПроконтролироватьДлительнуюОперацию(Операция, Статус) Тогда + АктивныеДлительныеОперации.Удалить(СтатусОперации.Ключ); + КонецЕсли; + + КонецЦикла; + + Если АктивныеДлительныеОперации.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); + Интервал = 120; + Для каждого Операция Из АктивныеДлительныеОперации Цикл + Интервал = Макс(Мин(Интервал, Операция.Значение.Контроль - ТекущаяДата), 1); + ЕстьАктивныеОперации = Истина; + КонецЦикла; + + ПодключитьОбработчикОжидания("КонтрольДлительныхОпераций", Интервал, Истина); + +КонецПроцедуры + +Функция ПроконтролироватьДлительнуюОперацию(ДлительнаяОперация, Статус) + + Если Статус.Статус <> "Отменено" И ДлительнаяОперация.ОповещениеОПрогрессеВыполнения <> Неопределено Тогда + Прогресс = Новый Структура; + Прогресс.Вставить("Статус", Статус.Статус); + Прогресс.Вставить("ИдентификаторЗадания", ДлительнаяОперация.ИдентификаторЗадания); + Прогресс.Вставить("Прогресс", Статус.Прогресс); + Прогресс.Вставить("Сообщения", Статус.Сообщения); + ВыполнитьОбработкуОповещения(ДлительнаяОперация.ОповещениеОПрогрессеВыполнения, Прогресс); + КонецЕсли; + + Если Статус.Статус = "Выполнено" Тогда + + ПоказатьОповещение(ДлительнаяОперация); + ВыполнитьОповещение(ДлительнаяОперация, Статус); + Возврат Истина; + + ИначеЕсли Статус.Статус = "Ошибка" Тогда + + ВыполнитьОповещение(ДлительнаяОперация, Статус); + Возврат Истина; + + ИначеЕсли Статус.Статус = "Отменено" Тогда + + Возврат Истина; + + КонецЕсли; + + ИнтервалОжидания = ДлительнаяОперация.ТекущийИнтервал; + Если ДлительнаяОперация.Интервал = 0 Тогда + ИнтервалОжидания = ИнтервалОжидания * 1.4; + Если ИнтервалОжидания > 15 Тогда + ИнтервалОжидания = 15; + КонецЕсли; + ДлительнаяОперация.ТекущийИнтервал = ИнтервалОжидания; + КонецЕсли; + ДлительнаяОперация.Контроль = ОбщегоНазначенияКлиент.ДатаСеанса() + ИнтервалОжидания; + Возврат Ложь; + +КонецФункции + +Процедура ПоказатьОповещение(ДлительнаяОперация) + + Оповещение = ДлительнаяОперация.ОповещениеПользователя; + Если Не Оповещение.Показать Тогда + Возврат; + КонецЕсли; + + ПоказатьОповещениеПользователя(?(Оповещение.Текст <> Неопределено, Оповещение.Текст, НСтр("ru = 'Действие выполнено'")), + Оповещение.НавигационнаяСсылка, Оповещение.Пояснение); + +КонецПроцедуры + +Процедура ВыполнитьОповещение(Знач ДлительнаяОперация, Знач Статус) + + Если ДлительнаяОперация.ОповещениеОЗавершении = Неопределено Тогда + Возврат; + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("Статус", Статус.Статус); + Результат.Вставить("АдресРезультата", ДлительнаяОперация.АдресРезультата); + Результат.Вставить("АдресДополнительногоРезультата", ДлительнаяОперация.АдресДополнительногоРезультата); + Результат.Вставить("КраткоеПредставлениеОшибки", Статус.КраткоеПредставлениеОшибки); + Результат.Вставить("ПодробноеПредставлениеОшибки", Статус.ПодробноеПредставлениеОшибки); + ВыполнитьОбработкуОповещения(ДлительнаяОперация.ОповещениеОЗавершении, Результат); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ДлительныеОперацииГлобальный/ДлительныеОперацииГлобальный.mdo b/SSL/src/CommonModules/ДлительныеОперацииГлобальный/ДлительныеОперацииГлобальный.mdo new file mode 100644 index 000000000..b427e4ef6 --- /dev/null +++ b/SSL/src/CommonModules/ДлительныеОперацииГлобальный/ДлительныеОперацииГлобальный.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="77adf47b-6015-46fc-9e29-f1c025ea0d81"> + <name>ДлительныеОперацииГлобальный</name> + <synonym> + <key>ru</key> + <value>Длительные операции глобальный</value> + </synonym> + <global>true</global> + <clientManagedApplication>true</clientManagedApplication> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl b/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl index 55eed629c..c8e7dd6fc 100644 --- a/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl @@ -6,6 +6,132 @@ #Область ПрограммныйИнтерфейс +// Ожидать завершения выполнение процедуры в фоновом задании и открыть форму ожидания длительной операции. +// +// Параметры: +// ДлительнаяОперация - Структура - см. возвращаемое значение функции ДлительныеОперации.ВыполнитьВФоне. +// ОповещениеОЗавершении - ОписаниеОповещения - оповещение, которое вызывается при завершении фонового задания. +// Параметры процедуры-обработчика оповещения: +// * Результат - Структура, Неопределено - структура со свойствами или Неопределено, если задание было отменено. Свойства: +// ** Статус - Строка - "Выполнено", если задание было успешно выполнено; +// "Ошибка", если задание завершено с ошибкой. +// ** АдресРезультата - Строка - адрес временного хранилища, в которое будет +// помещен (или уже помещен) результат работы процедуры. +// ** АдресДополнительногоРезультата - Строка - если установлен параметр ДополнительныйРезультат, +// содержит адрес дополнительного временного хранилища, +// в которое будет помещен (или уже помещен) результат работы процедуры. +// ** КраткоеПредставлениеОшибки - Строка - краткая информация об исключении, если Статус = "Ошибка". +// ** ПодробноеПредставлениеОшибки - Строка - подробная информация об исключении, если Статус = "Ошибка". +// * ДополнительныеПараметры - Произвольный - произвольные данные, переданные в описании оповещения. +// ПараметрыОжидания - Структура - см. функцию ПараметрыОжидания. +// +Процедура ОжидатьЗавершение(Знач ДлительнаяОперация, Знач ОповещениеОЗавершении = Неопределено, + Знач ПараметрыОжидания = Неопределено) Экспорт + + ПроверитьПараметрыОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания); + + Если ДлительнаяОперация.Статус <> "Выполняется" Тогда + Если ОповещениеОЗавершении <> Неопределено Тогда + Если ДлительнаяОперация.Статус <> "Отменено" Тогда + Результат = Новый Структура; + Результат.Вставить("Статус", ДлительнаяОперация.Статус); + Результат.Вставить("АдресРезультата", ДлительнаяОперация.АдресРезультата); + Результат.Вставить("АдресДополнительногоРезультата", ДлительнаяОперация.АдресДополнительногоРезультата); + Результат.Вставить("КраткоеПредставлениеОшибки", ДлительнаяОперация.КраткоеПредставлениеОшибки); + Результат.Вставить("ПодробноеПредставлениеОшибки", ДлительнаяОперация.ПодробноеПредставлениеОшибки); + Иначе + Результат = Неопределено; + КонецЕсли; + ВыполнитьОбработкуОповещения(ОповещениеОЗавершении, Результат); + КонецЕсли; + Возврат; + КонецЕсли; + + ПараметрыФормы = ПараметрыОжидания(Неопределено); + Если ПараметрыОжидания <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(ПараметрыФормы, ПараметрыОжидания); + КонецЕсли; + ПараметрыФормы.Вставить("АдресРезультата", ДлительнаяОперация.АдресРезультата); + ПараметрыФормы.Вставить("АдресДополнительногоРезультата", ДлительнаяОперация.АдресДополнительногоРезультата); + ПараметрыФормы.Вставить("ИдентификаторЗадания", ДлительнаяОперация.ИдентификаторЗадания); + + Если ПараметрыФормы.ВыводитьОкноОжидания Тогда + ПараметрыФормы.Удалить("ФормаВладелец"); + + ОткрытьФорму("ОбщаяФорма.ДлительнаяОперация", ПараметрыФормы, + ?(ПараметрыОжидания <> Неопределено, ПараметрыОжидания.ФормаВладелец, Неопределено), + ,,,ОповещениеОЗавершении); + Иначе + ПараметрыФормы.Вставить("ОповещениеОЗавершении", ОповещениеОЗавершении); + ПараметрыФормы.Вставить("ТекущийИнтервал", ?(ПараметрыФормы.Интервал <> 0, ПараметрыФормы.Интервал, 1)); + ПараметрыФормы.Вставить("Контроль", ОбщегоНазначенияКлиент.ДатаСеанса() + ПараметрыФормы.ТекущийИнтервал); + + Операции = АктивныеДлительныеОперации(); + Операции.Список.Вставить(ПараметрыФормы.ИдентификаторЗадания, ПараметрыФормы); + + ПодключитьОбработчикОжидания("КонтрольДлительныхОпераций", ПараметрыФормы.ТекущийИнтервал, Истина); + КонецЕсли; + +КонецПроцедуры + +// Возвращает пустую структуру для параметра ПараметрыОжидания процедуры ОжидатьЗавершение. +// +// Возвращаемое значение: +// Структура - параметры выполнения задания: +// * ФормаВладелец - УправляемаяФорма, Неопределено - форма, из которой вызывается длительная операция. +// * ТекстСообщения - Строка - текст сообщения, выводимый на форме ожидания. +// Если не задан, то выводится "Пожалуйста, подождите...". +// * ВыводитьОкноОжидания - Булево - если Истина, то открыть окно ожидания с визуальной индикацией длительной операции. +// Если используется собственный механизм индикации, то следует указать Ложь. +// * ВыводитьПрогрессВыполнения - Булево - выводить прогресс выполнения в процентах на форме ожидания. +// * ОповещениеОПрогрессеВыполнения - ОписаниеОповещения - оповещение, которое периодически вызывается при +// проверке готовности фонового задания. Параметры процедуры-обработчика оповещения: +// ** Прогресс - Структура, Неопределено - структура со свойствами или Неопределено, если задание было отменено. Свойства: +// *** Статус - Строка - "Выполняется", если задание еще не завершилось; +// "Выполнено", если задание было успешно выполнено; +// "Ошибка", если задание завершено с ошибкой; +// "Отменено", если задание отменено пользователем или администратором. +// *** ИдентификаторЗадания - УникальныйИдентификатор - идентификатор запущенного фонового задания. +// *** Прогресс - Структура, Неопределено - результат функции ДлительныеОперации.ПрочитатьПрогресс, если ВыводитьПрогрессВыполнения = Истина. +// *** Сообщения - ФиксированныйМассив, Неопределено - массив объектов СообщениеПользователю, если ВыводитьСообщения = Истина +// ** ДополнительныеПараметры - Произвольный - произвольные данные, переданные в описании оповещения. +// +// * ВыводитьСообщения - Булево - выводить сообщения, сформированные в процедуре-обработчике длительной операции. +// Значение Истина имеет смысл, только если ВыводитьПрогрессВыполнения = Ложь +// * Интервал - Число - интервал в секундах между проверками готовности длительной операции. +// По умолчанию 0 - после каждой проверки интервал увеличивается с 1 до 15 секунд с коэффициентом 1.4. +// * ОповещениеПользователя - Структура - содержит свойства: +// ** Показать - Булево - если Истина, то по завершении длительной операции вывести оповещение пользователя. +// ** Текст - Строка - текст оповещения пользователя. +// ** НавигационнаяСсылка - Строка - навигационная ссылка оповещения пользователя. +// ** Пояснение - Строка - пояснение оповещения пользователя. +// +Функция ПараметрыОжидания(ФормаВладелец) Экспорт + + Результат = Новый Структура; + Результат.Вставить("ФормаВладелец", ФормаВладелец); + Результат.Вставить("ТекстСообщения", ""); + Результат.Вставить("ВыводитьОкноОжидания", Истина); + Результат.Вставить("ВыводитьПрогрессВыполнения", Ложь); + Результат.Вставить("ОповещениеОПрогрессеВыполнения", Неопределено); + Результат.Вставить("ВыводитьСообщения", Ложь); + Результат.Вставить("Интервал", 0); + + ОповещениеПользователя = Новый Структура; + ОповещениеПользователя.Вставить("Показать", Ложь); + ОповещениеПользователя.Вставить("Текст", Неопределено); + ОповещениеПользователя.Вставить("НавигационнаяСсылка", Неопределено); + ОповещениеПользователя.Вставить("Пояснение", Неопределено); + Результат.Вставить("ОповещениеПользователя", ОповещениеПользователя); + + Возврат Результат; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для работы с формой длительной операции. +// + // Заполняет структуру параметров значениями по умолчанию. // // Параметры: @@ -37,34 +163,20 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы с формой длительной операции. -// - // Открывает форму-индикатор длительной операции. // // Параметры: // ВладелецФормы - УправляемаяФорма - форма, из которой производится открытие. -// ИдентификаторЗадания - УникальныйИдентификатор - Идентификатор фонового задания. +// ИдентификаторЗадания - УникальныйИдентификатор - идентификатор фонового задания. // // Возвращаемое значение: // УправляемаяФорма - ссылка на открытую форму. // Функция ОткрытьФормуДлительнойОперации(Знач ВладелецФормы, Знач ИдентификаторЗадания) Экспорт - ФормаДлительнойОперации = ДлительныеОперацииКлиентПовтИсп.ФормаДлительнойОперации(); - Если ФормаДлительнойОперации.Открыта() Тогда - ФормаДлительнойОперации = ОткрытьФорму( - "ОбщаяФорма.ДлительнаяОперация", - Новый Структура("ИдентификаторЗадания", ИдентификаторЗадания), - ВладелецФормы); - Иначе - ФормаДлительнойОперации.ВладелецФормы = ВладелецФормы; - ФормаДлительнойОперации.ИдентификаторЗадания = ИдентификаторЗадания; - ФормаДлительнойОперации.Открыть(); - КонецЕсли; - - Возврат ФормаДлительнойОперации; + Возврат ОткрытьФорму("ОбщаяФорма.ДлительнаяОперация", + Новый Структура("ИдентификаторЗадания", ИдентификаторЗадания), + ВладелецФормы); КонецФункции @@ -85,3 +197,56 @@ КонецПроцедуры #КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция АктивныеДлительныеОперации() Экспорт + + ИмяПараметра = "СтандартныеПодсистемы.АктивныеДлительныеОперации"; + Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда + Операции = Новый Структура("Обработка,Список", Ложь, Новый Соответствие); + ПараметрыПриложения.Вставить(ИмяПараметра, Операции); + КонецЕсли; + Возврат ПараметрыПриложения[ИмяПараметра]; + +КонецФункции + +Процедура ПроверитьПараметрыОжидатьЗавершение(Знач ДлительнаяОперация, Знач ОповещениеОЗавершении, Знач ПараметрыОжидания) + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ДлительныеОперацииКлиент.ОжидатьЗавершение", + "ДлительнаяОперация", ДлительнаяОперация, Тип("Структура")); + + Если ОповещениеОЗавершении <> Неопределено Тогда + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ДлительныеОперацииКлиент.ОжидатьЗавершение", + "ОповещениеОЗавершении", ОповещениеОЗавершении, Тип("ОписаниеОповещения")); + КонецЕсли; + + Если ПараметрыОжидания <> Неопределено Тогда + + ТипыСвойств = Новый Структура; + Если ПараметрыОжидания.ФормаВладелец <> Неопределено Тогда + ТипыСвойств.Вставить("ФормаВладелец", Тип("УправляемаяФорма")); + КонецЕсли; + ТипыСвойств.Вставить("ТекстСообщения", Тип("Строка")); + ТипыСвойств.Вставить("ВыводитьОкноОжидания", Тип("Булево")); + ТипыСвойств.Вставить("ВыводитьПрогрессВыполнения", Тип("Булево")); + ТипыСвойств.Вставить("ВыводитьСообщения", Тип("Булево")); + ТипыСвойств.Вставить("Интервал", Тип("Число")); + ТипыСвойств.Вставить("ОповещениеПользователя", Тип("Структура")); + + ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ДлительныеОперацииКлиент.ОжидатьЗавершение", + "ПараметрыОжидания", ПараметрыОжидания, Тип("Структура"), ТипыСвойств); + ОбщегоНазначенияКлиентСервер.Проверить(ПараметрыОжидания.Интервал = 0 Или ПараметрыОжидания.Интервал >= 1, + НСтр("ru = 'Параметр ПараметрыОжидания.Интервал должен быть больше или равен 1'"), + "ДлительныеОперацииКлиент.ОжидатьЗавершение"); + ОбщегоНазначенияКлиентСервер.Проверить(Не (ПараметрыОжидания.ВыводитьПрогрессВыполнения И ПараметрыОжидания.ВыводитьСообщения), + НСтр("ru = 'Если параметр ПараметрыОжидания.ВыводитьПрогрессВыполнения установлен в Истина, то параметр ПараметрыОжидания.ВыводитьСообщения должен быть установлен в Ложь'"), + "ДлительныеОперацииКлиент.ОжидатьЗавершение"); + ОбщегоНазначенияКлиентСервер.Проверить(Не (ПараметрыОжидания.ОповещениеОПрогрессеВыполнения <> Неопределено И ПараметрыОжидания.ВыводитьОкноОжидания), + НСтр("ru = 'Если параметр ПараметрыОжидания.ВыводитьОкноОжидания установлен в Истина, то параметр ПараметрыОжидания.ОповещениеОПрогрессеВыполнения не поддерживается'"), + "ДлительныеОперацииКлиент.ОжидатьЗавершение"); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ДлительныеОперацииКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/ДлительныеОперацииКлиентПовтИсп/Module.bsl deleted file mode 100644 index c8426ab35..000000000 --- a/SSL/src/CommonModules/ДлительныеОперацииКлиентПовтИсп/Module.bsl +++ /dev/null @@ -1,17 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Подсистема "Базовая функциональность". -// Поддержка работы длительных серверных операций в веб-клиенте. -// -//////////////////////////////////////////////////////////////////////////////// - -#Область СлужебныеПроцедурыИФункции - -// Получить форму-индикатор выполнения длительной операции. -// -Функция ФормаДлительнойОперации() Экспорт - - Возврат ПолучитьФорму("ОбщаяФорма.ДлительнаяОперация"); - -КонецФункции - -#КонецОбласти diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl index d0e2b385e..ecbdbff11 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl @@ -192,37 +192,34 @@ // Формирует печатную форму по внешнему источнику. // // Параметры: -// Ссылка (СправочникСсылка.ДополнительныеОтчетыИОбработки) Внешняя обработка. -// ПараметрыИсточника - Структура - -// * ИдентификаторКоманды - Строка - Список макетов, перечисленных через запятую. -// * ОбъектыНазначения (Массив). +// ДополнительнаяОбработкаСсылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - внешняя обработка. +// ПараметрыИсточника - Структура - структура со свойствами: +// * ИдентификаторКоманды - Строка - список макетов, перечисленных через запятую. +// * ОбъектыНазначения - Массив // КоллекцияПечатныхФорм - ТаблицаЗначений - см. описание процедуры Печать() в документации. -// ОбъектыПечати (СписокЗначений) см. описание процедуры Печать() в документации. -// ПараметрыВывода - Структура - см. описание процедуры Печать() в документации. +// ОбъектыПечати - СписокЗначений - см. описание процедуры Печать() в документации. +// ПараметрыВывода - Структура - см. описание процедуры Печать() в документации. // -Процедура ПечатьПоВнешнемуИсточнику(Ссылка, ПараметрыИсточника, КоллекцияПечатныхФорм, +Процедура ПечатьПоВнешнемуИсточнику(ДополнительнаяОбработкаСсылка, ПараметрыИсточника, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда Возврат; КонецЕсли; - КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм(ПараметрыИсточника.ИдентификаторКоманды); - - ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода(); - - ОбъектыПечати = Новый СписокЗначений; - - ВнешняяОбработкаОбъект = ПолучитьОбъектВнешнейОбработки(Ссылка); - + ВнешняяОбработкаОбъект = ПолучитьОбъектВнешнейОбработки(ДополнительнаяОбработкаСсылка); Если ВнешняяОбработкаОбъект = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Внешняя обработка ""%1"" (тип ""%2"") не обслуживается подсистемой ""%3""'"), - Строка(Ссылка), - Строка(ТипЗнч(Ссылка)), + Строка(ДополнительнаяОбработкаСсылка), + Строка(ТипЗнч(ДополнительнаяОбработкаСсылка)), ДополнительныеОтчетыИОбработкиКлиентСервер.НаименованиеПодсистемы(Истина)); КонецЕсли; + КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм(ПараметрыИсточника.ИдентификаторКоманды); + ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода(); + ПараметрыВывода.Вставить("ДополнительнаяОбработкаСсылка", ДополнительнаяОбработкаСсылка); + ВнешняяОбработкаОбъект.Печать( ПараметрыИсточника.ОбъектыНазначения, КоллекцияПечатныхФорм, @@ -230,92 +227,131 @@ ПараметрыВывода); // Проверим, все ли макеты были сформированы. - Для Каждого Стр Из КоллекцияПечатныхФорм Цикл - Если Стр.ТабличныйДокумент = Неопределено Тогда + Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл + Если ПечатнаяФорма.ТабличныйДокумент = Неопределено Тогда ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'В обработчике печати не был сформирован табличный документ для: %1'"), - Стр.ИмяМакета); + ПечатнаяФорма.ИмяМакета); ВызватьИсключение(ТекстСообщенияОбОшибке); КонецЕсли; - Стр.ТабличныйДокумент.КоличествоЭкземпляров = Стр.Экземпляров; + ПечатнаяФорма.ТабличныйДокумент.КоличествоЭкземпляров = ПечатнаяФорма.Экземпляров; КонецЦикла; КонецПроцедуры -// Формирует шаблон структуры сведений о внешнем отчете или обработке для последующего заполнения. +// Формирует шаблон сведений о внешнем отчете или обработке для последующего заполнения. // // Параметры: // ВерсияБСП - Строка - Версия библиотеки стандартных подсистем, на которую рассчитывают механизмы внешнего объекта. -// Подробнее - см. СтандартныеПодсистемыСервер.ВерсияБиблиотеки(). +// См. также СтандартныеПодсистемыСервер.ВерсияБиблиотеки(). // -// Возвращаемое значение: +// Возвращаемое значение: // ПараметрыРегистрации - Структура - Параметры внешнего объекта. -// * Вид - Строка - Вид внешнего объекта. Соответствует реквизиту "Вид" -// (ПеречислениеСсылка.ВидыДополнительныхОтчетовИОбработок). -// Для определения вида можно использовать функции "Вид*" общего модуля -// ДополнительныеОтчетыИОбработкиКлиентСервер, или указать вид явно: +// +// * Вид - Строка - Вид внешнего объекта. +// Для определения вида рекомендуется использовать функции +// ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработки<ИмяВида>(). +// Также Вид можно указать явно: // ** "ПечатнаяФорма" // ** "ЗаполнениеОбъекта" // ** "СозданиеСвязанныхОбъектов" // ** "Отчет" // ** "ДополнительнаяОбработка" // ** "ДополнительныйОтчет". +// // * Версия - Строка - Версия объекта. // Задается в формате: "<Старший номер>.<Младший номер>". -// * Назначение - Массив - из - Строка - Необязательный. Имена объектов конфигурации, для которых предназначен -// этот объект. -// Задается в формате: "<ИмяКлассаОбъектаМетаданного>.[*|<ИмяОбъектаМетаданных>]". +// +// * Назначение - Массив - Необязательный. +// Объекты конфигурации, для которых предназначен этот объект. +// ** Строка - Полное имя объекта метаданных. +// // * Наименование - Строка - Необязательный. Представление для администратора (наименование элемента справочника). // Если не заполнено, то берется представление объекта метаданных внешнего объекта. +// // * БезопасныйРежим - Булево - Необязательный. Признак подключения внешней обработки в безопасном режиме. // Значение по умолчанию Истина (обработка будет выполняться безопасно). -// Подробнее - см. разделы справки "ВнешниеОтчетыМенеджер.Подключить" и "ВнешниеОбработкиМенеджер.Подключить". +// В безопасном режиме: +// Игнорируется привилегированный режим. +// Запрещены внешние по отношению к платформе 1С:Предприятия действия: +// COM; +// Загрузка внешних компонентов; +// Запуск внешних приложений и команд операционной системы; +// Доступ к файловой системе, кроме временных файлов; +// Доступ к Интернету. +// +// * Разрешения - Массив - Необязательный. +// Дополнительные разрешения, необходимые внешней обработке при работе в безопасном режиме. +// ** ОбъектXDTO {http://www.1c.ru/1cFresh/ApplicationExtensions/Permissions/a.b.c.d}PermissionBase - Разрешение. +// Для формирования описания разрешения рекомендуется использовать функции +// РаботаВБезопасномРежиме.Разрешение<ВидРазрешения>(<ПараметрыРазрешения>). +// // * Информация - Строка - Необязательный. Краткая информация по внешнему объекту. // В этом параметре для администратора рекомендуется указать описание возможностей внешнего объекта. // Если не заполнено, то берется комментарий объекта метаданных внешнего объекта. +// // * ВерсияБСП - Строка - Необязательный. Версия библиотеки, на которую рассчитывают механизмы внешнего объекта. // Подробнее - см. СтандартныеПодсистемыСервер.ВерсияБиблиотеки(). -// * Команды - ТаблицаЗначений - Необязательный для отчетов. Таблица команд, поставляемых внешним объектом. -// Типы колонок соответствуют типам табличной части Команды справочника ДополнительныеОтчетыИОбработки. -// ** Идентификатор - Строка - Имя команды. Для печатной формы - список макетов. -// ** Использование - Строка - Тип команды. Соответствует реквизиту "ВариантЗапуска" -// (ПеречислениеСсылка.СпособыВызоваДополнительныхОбработок). +// +// * ОпределитьНастройкиФормы - Булево - Необязательный. +// Флажок тесной интеграции дополнительного отчета с общей формой отчета. +// Позволяет переопределять некоторые настройки формы и подписываться на ее события. +// Если Истина, тогда в модуле объекта отчета следует определить процедуру по шаблону: +// +// // Настройки общей формы отчета подсистемы "Варианты отчетов". +// // +// // Параметры: +// // Форма - УправляемаяФорма, Неопределено - Форма отчета или форма настроек отчета. +// // Неопределено когда вызов без контекста. +// // КлючВарианта - Строка, Неопределено - Имя предопределенного +// // или уникальный идентификатор пользовательского варианта отчета. +// // Неопределено когда вызов без контекста. +// // Настройки - Структура - см. возвращаемое значение +// // ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(). +// // +// Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт +// // Код процедуры. +// КонецПроцедуры +// +// Внимание. Этот флажок работает только для дополнительных отчетов, подключенных к общей форме ФормаОтчета. +// Подробнее см. в документации к подсистемам "Дополнительные отчеты и обработки" и "Варианты отчетов". +// +// * Команды - ТаблицаЗначений - Необязательный для отчетов. Настройки команд, поставляемых внешним объектом. +// +// ** Идентификатор - Строка - Внутреннее имя команды. +// Для внешних печатных форм (когда Вид = "ПечатнаяФорма"): +// Идентификатор может содержать имена одной или нескольких команд печати, +// разделенных запятыми. Подробнее см. описание колонки Идентификатор +// в функции СоздатьКоллекциюКомандПечати() общего модуля УправлениеПечатью. +// +// ** Представление - Строка - Пользовательское представление команды. +// +// ** Использование - Строка - Тип команды. +// Для определения рекомендуется использовать функции +// ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКоманды<ИмяТипа>(). +// Шаблоны процедур - обработчиков команд описаны в комментариях к этим функциям. +// +// Также Использование можно определить явно: // *** "ВызовКлиентскогоМетода" // *** "ВызовСерверногоМетода" // *** "ЗаполнениеФормы" // *** "ОткрытиеФормы" // *** "СценарийВБезопасномРежиме". -// ** Представление - Строка - Представление команды для конечного пользователя. +// // ** ПоказыватьОповещение - Булево - Истина = при запуске команды будет показано стандартное оповещение. -// Не работает для команд "ОткрытиеФормы". -// ** Модификатор - Строка - Вспомогательный модификатор команды. -// *** "ПечатьMXL" для печатных форм на основе макетов MXL. -// ** Скрыть - Булево - Истина если команду необходимо скрывать в форме элемента. -// * Разрешения - Массив из ОбъектXDTO. -// {http://www.1c.ru/1cFresh/ApplicationExtensions/Permissions/a.b.c.d}PermissionBase - -// Необязательный. Массив разрешений, предоставленных дополнительному отчету или обработке при работе в -// безопасном режиме. -// * ОпределитьНастройкиФормы - Булево - Необязательный. -// Когда Истина то дополнительный отчет имеет программный интерфейс для тесной интеграции с формой отчета, -// в том числе может переопределять некоторые настройки формы и подписываться на ее события. -// Если Истина и отчет подключен к общей форме ФормаОтчета, -// тогда в модуле объекта отчета следует определить процедуру по шаблону: -// -// // Настройки общей формы отчета подсистемы "Варианты отчетов". -// // -// // Параметры: -// // Форма - УправляемаяФорма, Неопределено - Форма отчета или форма настроек отчета. -// // Неопределено когда вызов без контекста. -// // КлючВарианта - Строка, Неопределено - Имя предопределенного -// // или уникальный идентификатор пользовательского варианта отчета. -// // Неопределено когда вызов без контекста. -// // Настройки - Структура - см. возвращаемое значение -// // ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(). -// // -// Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт -// // Код процедуры. -// КонецПроцедуры +// Не работает для команд по открытию формы (когда Использование = "ОткрытиеФормы"). +// +// ** Модификатор - Строка - Дополнительная классификация команды. +// Для внешних печатных форм (когда Вид = "ПечатнаяФорма"): +// *** "ПечатьMXL" - для печатных форм на основе табличных макетов. +// Для загрузки данных из файла (когда Вид = "ПечатнаяФорма" и Использование = "ЗагрузкаДанныхИзФайла"): +// Модификатор является обязательным для заполнения +// и должен содержать полное имя объекта метаданных (справочника), +// для которого выполняется загрузка данных. +// +// ** Скрыть - Булево - Необязательный. Признак того, что это служебная команда. +// Если установить в значение Истина, то команда скрывается в карточке дополнительного объекта. // Функция СведенияОВнешнейОбработке(ВерсияБСП = "") Экспорт ПараметрыРегистрации = Новый Структура; @@ -641,7 +677,7 @@ // Объект - СправочникОбъект.ДополнительныеОтчетыИОбработки // РегистрационныеДанные - Структура, аналогичная структуре, возвращаемой экспортируемой функцией. // СведенияОВнешнейОбработке() внешних обработок. - // СтандартнаяОбработка - Булево + // СтандартнаяОбработка - Булево. // // Синтаксис: // Процедура ПриПолученииРегистрационныхДанных(Знач Объект, РегистрационныеДанные, СтандартнаяОбработка) Экспорт @@ -699,32 +735,32 @@ Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. + СерверныйМодуль = "ДополнительныеОтчетыИОбработки"; - СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( - "ДополнительныеОтчетыИОбработки"); + Событие = "СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"; + СерверныеОбработчики[Событие].Добавить(СерверныйМодуль); - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииДанныхОтПодчиненного"].Добавить( - "ДополнительныеОтчетыИОбработки"); + Событие = "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииДанныхОтПодчиненного"; + СерверныеОбработчики[Событие].Добавить(СерверныйМодуль); - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииДанныхОтГлавного"].Добавить( - "ДополнительныеОтчетыИОбработки"); + Событие = "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииДанныхОтГлавного"; + СерверныеОбработчики[Событие].Добавить(СерверныйМодуль); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ТекущиеДела") Тогда - СерверныеОбработчики["СтандартныеПодсистемы.ТекущиеДела\ПриЗаполненииСпискаТекущихДел"].Добавить( - "ДополнительныеОтчетыИОбработки"); - КонецЕсли; - + Событие = "СтандартныеПодсистемы.ТекущиеДела\ПриЗаполненииСпискаТекущихДел"; + СерверныеОбработчики[Событие].Добавить(СерверныйМодуль); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - СерверныеОбработчики["СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииВидовДоступа"].Добавить( - "ДополнительныеОтчетыИОбработки"); + Событие = "СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииВидовДоступа"; + СерверныеОбработчики[Событие].Добавить(СерверныйМодуль); - СерверныеОбработчики["СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииИспользованияВидаДоступа"].Добавить( - "ДополнительныеОтчетыИОбработки"); + Событие = "СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииИспользованияВидаДоступа"; + СерверныеОбработчики[Событие].Добавить(СерверныйМодуль); - СерверныеОбработчики["СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииВидовОграниченийПравОбъектовМетаданных"].Добавить( - "ДополнительныеОтчетыИОбработки"); + Событие = "СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииВидовОграниченийПравОбъектовМетаданных"; + СерверныеОбработчики[Событие].Добавить(СерверныйМодуль); КонецЕсли; - КонецПроцедуры @@ -809,6 +845,10 @@ Возврат; КонецЕсли; + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДополнительныеОтчетыИОбработки") Тогда + Возврат; + КонецЕсли; + // Есть права на данные справочника. МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); Если Не ПравоДоступа("Редактирование", Метаданные.Справочники.ДополнительныеОтчетыИОбработки) @@ -982,8 +1022,7 @@ | Таблица.ИмяОбъекта = &ИмяОбъекта | И Таблица.ПометкаУдаления = ЛОЖЬ | И Таблица.ИспользуетХранилищеВариантов = ИСТИНА - | И (Таблица.Вид = &ВидДополнительныйОтчет - | ИЛИ Таблица.Вид = &ВидОтчет) + | И Таблица.Вид В (&ВидДополнительныйОтчет, &ВидОтчет) | И Таблица.Публикация = &ПубликацияИспользуется"; Запрос = Новый Запрос; @@ -1031,8 +1070,7 @@ | Справочник.ДополнительныеОтчетыИОбработки КАК Таблица |ГДЕ | Таблица.ИспользуетХранилищеВариантов - | И (Таблица.Вид = &ВидДополнительныйОтчет - | ИЛИ Таблица.Вид = &ВидОтчет) + | И Таблица.Вид В (&ВидДополнительныйОтчет, &ВидОтчет) | И НЕ Таблица.Ссылка В (&ДоступныеОтчеты)"; Запрос.УстановитьПараметр("ДоступныеОтчеты", ДоступныеОтчеты); @@ -1054,9 +1092,8 @@ // ПараметрыОтчета - Структура - Набор параметров, получаемый в процессе проверки и подключения отчета. // См. РассылкаОтчетов.ИнициализироватьОтчет(). // Результат - Булево, Неопределено - Результат подключения. -// Истина - Удалось подключить дополнительный отчет. -// Ложь - Не удалось подключить дополнительный отчет. -// Неопределено - Подсистема доп. отчетов недоступна. +// Истина - Удалось подключить дополнительный отчет. +// Ложь - Не удалось подключить дополнительный отчет. // // Места использования: // ВариантыОтчетов.ПодключитьОтчетОбъект(). @@ -1157,7 +1194,6 @@ КонецПроцедуры - // Дополняет список команд печати внешними печатными формами. // // Параметры: @@ -1254,6 +1290,15 @@ КонецПроцедуры +// См. одноименную процедуру в общем модуле ПользователиПереопределяемый. +Процедура ПриОпределенииНазначенияРолей(НазначениеРолей) Экспорт + + // СовместноДляПользователейИВнешнихПользователей. + НазначениеРолей.СовместноДляПользователейИВнешнихПользователей.Добавить( + Метаданные.Роли.ИспользованиеДополнительныхОтчетовИОбработок.Имя); + +КонецПроцедуры + // См. одноименную процедуру в общем модуле ПользователиПереопределяемый. Процедура ПриПолученииПрочихНастроек(СведенияОПользователе, Настройки) Экспорт @@ -1358,7 +1403,7 @@ // ОтчетыСНастройками - Массив - Ссылки отчетов, в модулях объектов которых есть процедура ОпределитьНастройкиФормы(). // // Места использования: -// ВариантыОтчетовПовтИсп.ОтчетыСНастройками(). +// ВариантыОтчетовПовтИсп.Параметры(). // Процедура ПриОпределенииОтчетовСНастройками(ОтчетыСНастройками) Экспорт Запрос = Новый Запрос; @@ -1489,6 +1534,198 @@ Возврат Результат; КонецФункции +// Формирует запрос для получения таблицы команд дополнительных отчетов или обработок. +// +// Параметры: +// ВидОбработок - ПеречислениеСсылка.ВидыДополнительныхОтчетовИОбработок - Вид обработки. +// Размещение - СправочникСсылка.ИдентификаторыОбъектовМетаданных, Строка - Необязательный. +// Объект метаданных (Ссылка или ПолноеИмя). +// Для назначаемых обработок - справочника или документа. +// Для глобальных обработок - подсистемы. +// ЭтоФормаОбъекта - Булево - Необязательный. +// Истина - для формы объекта. +// Ложь - для формы списка. +// ТипыКоманд - ПеречислениеСсылка.ВариантыПубликацииДополнительныхОтчетовИОбработок - Тип получаемых команд. +// - Массив - Типы команд, которые необходимо получить. +// * ПеречислениеСсылка.ВариантыПубликацииДополнительныхОтчетовИОбработок. +// +// Возвращаемое значение: +// ТаблицаЗначений - Команды дополнительных отчетов или обработок. +// * Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - Ссылка дополнительного отчета или обработки. +// * Идентификатор - Строка - Идентификатор команды, как он задан разработчиком дополнительного объекта. +// * ВариантЗапуска - ПеречислениеСсылка.СпособыВызоваДополнительныхОбработок - +// Способ вызова команды дополнительного объекта. +// * Представление - Строка - Наименование команды в пользовательском интерфейсе. +// * ПоказыватьОповещение - Булево - Показывать оповещение пользователю после выполнения команды. +// * Модификатор - Строка - Модификатор команды. +// +Функция НовыйЗапросПоДоступнымКомандам(ВидОбработок, Размещение, ЭтоФормаОбъекта = Неопределено, ТипыКоманд = Неопределено) Экспорт + Запрос = Новый Запрос; + + Если ТипЗнч(Размещение) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + СсылкаРодителяИлиРаздела = Размещение; + Иначе + Если ЗначениеЗаполнено(Размещение) Тогда + СсылкаРодителяИлиРаздела = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Размещение); + Иначе + СсылкаРодителяИлиРаздела = Неопределено; + КонецЕсли; + КонецЕсли; + + Если СсылкаРодителяИлиРаздела <> Неопределено Тогда // Есть фильтр по родителю. + ЭтоГлобальныеОбработки = ( + ВидОбработок = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет + ИЛИ ВидОбработок = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка); + + // Запросы принципиально отличаются для глобальных обработок и назначаемых. + Если ЭтоГлобальныеОбработки Тогда + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | БыстрыйДоступ.ДополнительныйОтчетИлиОбработка КАК Ссылка, + | БыстрыйДоступ.ИдентификаторКоманды + |ПОМЕСТИТЬ втБыстрыйДоступ + |ИЗ + | РегистрСведений.ПользовательскиеНастройкиДоступаКОбработкам КАК БыстрыйДоступ + |ГДЕ + | БыстрыйДоступ.Пользователь = &ТекущийПользователь + | И БыстрыйДоступ.Доступно = ИСТИНА + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ТаблицаБыстрыйДоступ.Ссылка, + | ТаблицаБыстрыйДоступ.ИдентификаторКоманды + |ПОМЕСТИТЬ втСсылкиИКоманды + |ИЗ + | втБыстрыйДоступ КАК ТаблицаБыстрыйДоступ + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки КАК ДопОтчетыИОбработки + | ПО ТаблицаБыстрыйДоступ.Ссылка = ДопОтчетыИОбработки.Ссылка + | И (ДопОтчетыИОбработки.ПометкаУдаления = ЛОЖЬ) + | И (ДопОтчетыИОбработки.Вид = &Вид) + | И (ДопОтчетыИОбработки.Публикация = &Публикация) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки.Разделы КАК ТаблицаРазделы + | ПО ТаблицаБыстрыйДоступ.Ссылка = ТаблицаРазделы.Ссылка + | И (ТаблицаРазделы.Раздел = &СсылкаРаздела) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ТаблицаКоманды.Ссылка, + | ТаблицаКоманды.Идентификатор, + | ТаблицаКоманды.ЗаменяемыеКоманды, + | ТаблицаКоманды.ВариантЗапуска, + | ТаблицаКоманды.Представление КАК Представление, + | ТаблицаКоманды.ПоказыватьОповещение, + | ТаблицаКоманды.Модификатор + |ИЗ + | втСсылкиИКоманды КАК ТаблицаСсылкиИКоманды + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки.Команды КАК ТаблицаКоманды + | ПО ТаблицаСсылкиИКоманды.Ссылка = ТаблицаКоманды.Ссылка + | И ТаблицаСсылкиИКоманды.ИдентификаторКоманды = ТаблицаКоманды.Идентификатор + | И (ТаблицаКоманды.Скрыть = ЛОЖЬ) + | И (ТаблицаКоманды.ВариантЗапуска В (&ТипыКоманд)) + | + |УПОРЯДОЧИТЬ ПО + | Представление"; + + Запрос.УстановитьПараметр("СсылкаРаздела", СсылкаРодителяИлиРаздела); + + Иначе + + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | ТаблицаНазначение.Ссылка + |ПОМЕСТИТЬ втСсылки + |ИЗ + | Справочник.ДополнительныеОтчетыИОбработки.Назначение КАК ТаблицаНазначение + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки КАК ДопОтчетыИОбработки + | ПО (ТаблицаНазначение.ОбъектНазначения = &СсылкаРодителя) + | И ТаблицаНазначение.Ссылка = ДопОтчетыИОбработки.Ссылка + | И (ДопОтчетыИОбработки.ПометкаУдаления = ЛОЖЬ) + | И (ДопОтчетыИОбработки.Вид = &Вид) + | И (ДопОтчетыИОбработки.Публикация = &Публикация) + | И (ДопОтчетыИОбработки.ИспользоватьДляФормыСписка = ИСТИНА) + | И (ДопОтчетыИОбработки.ИспользоватьДляФормыОбъекта = ИСТИНА) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ТаблицаКоманды.Ссылка, + | ТаблицаКоманды.Идентификатор, + | ТаблицаКоманды.ЗаменяемыеКоманды, + | ТаблицаКоманды.ВариантЗапуска, + | ТаблицаКоманды.Представление КАК Представление, + | ТаблицаКоманды.ПоказыватьОповещение, + | ТаблицаКоманды.Модификатор + |ИЗ + | втСсылки КАК ТаблицаСсылки + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки.Команды КАК ТаблицаКоманды + | ПО ТаблицаСсылки.Ссылка = ТаблицаКоманды.Ссылка + | И (ТаблицаКоманды.Скрыть = ЛОЖЬ) + | И (ТаблицаКоманды.ВариантЗапуска В (&ТипыКоманд)) + | + |УПОРЯДОЧИТЬ ПО + | Представление"; + + Запрос.УстановитьПараметр("СсылкаРодителя", СсылкаРодителяИлиРаздела); + + КонецЕсли; + + Иначе + + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ТаблицаКоманды.Ссылка, + | ТаблицаКоманды.Идентификатор, + | ТаблицаКоманды.ЗаменяемыеКоманды, + | ТаблицаКоманды.ВариантЗапуска, + | ТаблицаКоманды.Представление КАК Представление, + | ТаблицаКоманды.ПоказыватьОповещение, + | ТаблицаКоманды.Модификатор + |ИЗ + | Справочник.ДополнительныеОтчетыИОбработки.Команды КАК ТаблицаКоманды + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки КАК ДопОтчетыИОбработки + | ПО ТаблицаКоманды.Ссылка = ДопОтчетыИОбработки.Ссылка + | И (ДопОтчетыИОбработки.Вид = &Вид) + | И (ТаблицаКоманды.ВариантЗапуска В (&ТипыКоманд)) + | И (ДопОтчетыИОбработки.Публикация = &Публикация) + | И (ДопОтчетыИОбработки.ПометкаУдаления = ЛОЖЬ) + | И (ДопОтчетыИОбработки.ИспользоватьДляФормыСписка = ИСТИНА) + | И (ДопОтчетыИОбработки.ИспользоватьДляФормыОбъекта = ИСТИНА) + | И (ТаблицаКоманды.Скрыть = ЛОЖЬ) + | + |УПОРЯДОЧИТЬ ПО + | Представление"; + + КонецЕсли; + + // Отключение отборов по форме списка и объекта. + Если ЭтоФормаОбъекта <> Истина Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И (ДопОтчетыИОбработки.ИспользоватьДляФормыОбъекта = ИСТИНА)", ""); + КонецЕсли; + Если ЭтоФормаОбъекта <> Ложь Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И (ДопОтчетыИОбработки.ИспользоватьДляФормыСписка = ИСТИНА)", ""); + КонецЕсли; + + Если ТипыКоманд = Неопределено Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И (ТаблицаКоманды.ВариантЗапуска В (&ТипыКоманд))", ""); + Иначе + Запрос.УстановитьПараметр("ТипыКоманд", ТипыКоманд); + КонецЕсли; + + Запрос.УстановитьПараметр("Вид", ВидОбработок); + Если Пользователи.РолиДоступны("ДобавлениеИзменениеДополнительныхОтчетовИОбработок") Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Публикация = &Публикация", "Публикация <> &Публикация"); + Запрос.УстановитьПараметр("Публикация", Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена); + Иначе + Запрос.УстановитьПараметр("Публикация", Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется); + КонецЕсли; + Запрос.УстановитьПараметр("ТекущийПользователь", ПользователиКлиентСервер.АвторизованныйПользователь()); + Запрос.Текст = ТекстЗапроса; + + Возврат Запрос; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики подписок на события. @@ -1716,8 +1953,6 @@ // [2.1.3.2] Замена имен объектов назначения на ссылки справочника ИдентификаторыОбъектовМетаданных. Процедура ЗаменитьИменаОбъектовМетаданныхНаСсылки() Экспорт - НачатьТранзакцию(); - ТекстЗапроса = "ВЫБРАТЬ | ТаблицаНазначение.Ссылка КАК СправочникСсылка, @@ -1755,8 +1990,6 @@ РегистрыСведений.НазначениеДополнительныхОбработок.Обновить(Истина); - ЗафиксироватьТранзакцию(); - КонецПроцедуры // [2.1.3.22] Включение функциональной опции ИспользоватьДополнительныеОтчетыИОбработки для локального режима. @@ -1771,7 +2004,7 @@ КонецПроцедуры // [2.2.2.25] Процедура проставляет значение реквизита РежимСовместимостиРазрешений для элементов справочника. -// ДополнительныеОтчетыИОбработки +// ДополнительныеОтчетыИОбработки. // Процедура ЗаполнитьРежимСовместимостиРазрешений() Экспорт @@ -1880,166 +2113,6 @@ //////////////////////////////////////////////////////////////////////////////// // Экспортные служебные процедуры и функции. -// Формирует запрос для получения таблицы команд дополнительных отчетов или обработок. -// -// Параметры: -// ВидОбработок - ПеречислениеСсылка.ВидыДополнительныхОтчетовИОбработок - Вид обработки. -// ПолноеИмяИлиСсылкаРодителяИлиРаздела - СправочникСсылка.ИдентификаторыОбъектовМетаданных, Строка - -// Объект метаданных (Ссылка или ПолноеИмя). -// Для назначаемых обработок - справочника или документа. -// Для глобальных обработок - подсистемы. -// ЭтоФормаОбъекта - Булево - Необязательный. -// Истина - для формы объекта. -// Ложь - для формы списка. -// -// Возвращаемое значение: -// ТаблицаЗначений - Команды дополнительных отчетов или обработок. -// * Ссылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - Ссылка дополнительного отчета или обработки. -// * Идентификатор - Строка - Идентификатор команды, как он задан разработчиком дополнительного объекта. -// * ВариантЗапуска - ПеречислениеСсылка.СпособыВызоваДополнительныхОбработок - -// Способ вызова команды дополнительного объекта. -// * Представление - Строка - Наименование команды в пользовательском интерфейсе. -// * ПоказыватьОповещение - Булево - Показывать оповещение пользователю после выполнения команды. -// * Модификатор - Строка - Модификатор команды. -// -Функция НовыйЗапросПоДоступнымКомандам(ВидОбработок, ПолноеИмяИлиСсылкаРодителяИлиРаздела, ЭтоФормаОбъекта = Неопределено) Экспорт - ЭтоГлобальныеОбработки = ( - ВидОбработок = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет - ИЛИ ВидОбработок = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка); - - Если ТипЗнч(ПолноеИмяИлиСсылкаРодителяИлиРаздела) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда - СсылкаРодителяИлиРаздела = ПолноеИмяИлиСсылкаРодителяИлиРаздела; - Иначе - СсылкаРодителяИлиРаздела = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ПолноеИмяИлиСсылкаРодителяИлиРаздела); - КонецЕсли; - - Запрос = Новый Запрос; - - // Запросы принципиально отличаются для глобальных обработок и назначаемых. - Если ЭтоГлобальныеОбработки Тогда - ТекстЗапроса = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ - | БыстрыйДоступ.ДополнительныйОтчетИлиОбработка КАК Ссылка, - | БыстрыйДоступ.ИдентификаторКоманды - |ПОМЕСТИТЬ втБыстрыйДоступ - |ИЗ - | РегистрСведений.ПользовательскиеНастройкиДоступаКОбработкам КАК БыстрыйДоступ - |ГДЕ - | БыстрыйДоступ.Пользователь = &ТекущийПользователь - | И БыстрыйДоступ.Доступно = ИСТИНА - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ТаблицаБыстрыйДоступ.Ссылка, - | ТаблицаБыстрыйДоступ.ИдентификаторКоманды - |ПОМЕСТИТЬ втСсылкиИКоманды - |ИЗ - | втБыстрыйДоступ КАК ТаблицаБыстрыйДоступ - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки КАК ДопОтчетыИОбработки - | ПО ТаблицаБыстрыйДоступ.Ссылка = ДопОтчетыИОбработки.Ссылка - | И (ДопОтчетыИОбработки.ПометкаУдаления = ЛОЖЬ) - | И (ДопОтчетыИОбработки.Вид = &Вид) - | И (ДопОтчетыИОбработки.Публикация = &Публикация) - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки.Разделы КАК ТаблицаРазделы - | ПО ТаблицаБыстрыйДоступ.Ссылка = ТаблицаРазделы.Ссылка - | И (ТаблицаРазделы.Раздел = &СсылкаРаздела) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ТаблицаКоманды.Ссылка, - | ТаблицаКоманды.Идентификатор, - | ТаблицаКоманды.ЗаменяемыеКоманды, - | ТаблицаКоманды.ВариантЗапуска, - | ТаблицаКоманды.Представление КАК Представление, - | ТаблицаКоманды.ПоказыватьОповещение, - | ТаблицаКоманды.Модификатор - |ИЗ - | втСсылкиИКоманды КАК ТаблицаСсылкиИКоманды - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки.Команды КАК ТаблицаКоманды - | ПО ТаблицаСсылкиИКоманды.Ссылка = ТаблицаКоманды.Ссылка - | И ТаблицаСсылкиИКоманды.ИдентификаторКоманды = ТаблицаКоманды.Идентификатор - | И (ТаблицаКоманды.Скрыть = ЛОЖЬ) - | - |УПОРЯДОЧИТЬ ПО - | Представление"; - - Запрос.УстановитьПараметр("СсылкаРаздела", СсылкаРодителяИлиРаздела); - - Иначе - - ТекстЗапроса = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ - | ТаблицаНазначение.Ссылка - |ПОМЕСТИТЬ втСсылки - |ИЗ - | Справочник.ДополнительныеОтчетыИОбработки.Назначение КАК ТаблицаНазначение - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки КАК ДопОтчетыИОбработки - | ПО (ТаблицаНазначение.ОбъектНазначения = &СсылкаРодителя) - | И ТаблицаНазначение.Ссылка = ДопОтчетыИОбработки.Ссылка - | И (ДопОтчетыИОбработки.ПометкаУдаления = ЛОЖЬ) - | И (ДопОтчетыИОбработки.Вид = &Вид) - | И (ДопОтчетыИОбработки.Публикация = &Публикация) - | И (ДопОтчетыИОбработки.ИспользоватьДляФормыСписка = ИСТИНА) - | И (ДопОтчетыИОбработки.ИспользоватьДляФормыОбъекта = ИСТИНА) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ТаблицаКоманды.Ссылка, - | ТаблицаКоманды.Идентификатор, - | ТаблицаКоманды.ЗаменяемыеКоманды, - | ТаблицаКоманды.ВариантЗапуска, - | ТаблицаКоманды.Представление КАК Представление, - | ТаблицаКоманды.ПоказыватьОповещение, - | ТаблицаКоманды.Модификатор - |ИЗ - | втСсылки КАК ТаблицаСсылки - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки.Команды КАК ТаблицаКоманды - | ПО ТаблицаСсылки.Ссылка = ТаблицаКоманды.Ссылка - | И (ТаблицаКоманды.Скрыть = ЛОЖЬ) - | - |УПОРЯДОЧИТЬ ПО - | Представление"; - - Запрос.УстановитьПараметр("СсылкаРодителя", СсылкаРодителяИлиРаздела); - - // Отключение отборов по форме списка и объекта. - Если ЭтоФормаОбъекта <> Истина Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И (ДопОтчетыИОбработки.ИспользоватьДляФормыОбъекта = ИСТИНА)", ""); - КонецЕсли; - Если ЭтоФормаОбъекта <> Ложь Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И (ДопОтчетыИОбработки.ИспользоватьДляФормыСписка = ИСТИНА)", ""); - КонецЕсли; - КонецЕсли; - - Запрос.УстановитьПараметр("Вид", ВидОбработок); - Если Пользователи.РолиДоступны("ДобавлениеИзменениеДополнительныхОтчетовИОбработок") Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Публикация = &Публикация", "Публикация <> &Публикация"); - Запрос.УстановитьПараметр("Публикация", Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена); - Иначе - Запрос.УстановитьПараметр("Публикация", Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется); - КонецЕсли; - Запрос.УстановитьПараметр("ТекущийПользователь", ПользователиКлиентСервер.АвторизованныйПользователь()); - Запрос.Текст = ТекстЗапроса; - - Возврат Запрос; -КонецФункции - -// Устарела: Следует использовать ПодключенныеОбъектыМетаданных(). -Функция НазначаемыеОбъектыМетаданныхПоВидуВнешнегоОбъекта(Вид) Экспорт - Назначение = ПодключенныеОбъектыМетаданных(Вид); - Если Назначение = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - Назначение.Колонки.Метаданные.Имя = "ОбъектМетаданных"; - Назначение.Колонки.ПолноеИмя.Имя = "ПолноеИмяОбъектаМетаданных"; - Назначение.Колонки.Ссылка.Имя = "ОбъектНазначения"; - Назначение.Колонки.Вид.Имя = "ВидОбъектаМетаданных"; - Возврат Назначение; -КонецФункции - // Возвращает Истина если вид относится к категории глобальных дополнительных отчетов или обработок. // // Параметры: @@ -2147,7 +2220,7 @@ КонецПроцедуры -// Функция для исключения команд дополнительных обработок из списока "своих". +// Функция для исключения команд дополнительных обработок из списка "своих". Процедура УдалитьКомандыИзСпискаСвоих(МассивКоманд) Экспорт Для Каждого ЭлементСтрока Из МассивКоманд Цикл @@ -2166,11 +2239,6 @@ КонецПроцедуры -// Проверяет интегрирована ли конфигурация с подсистемой хранилищем вариантов отчетов. -Функция ИспользуетсяИнтеграцияСВариантамиОтчетов() Экспорт - Возврат Метаданные.ХранилищаНастроек.Найти("ХранилищеВариантовОтчетов") <> Неопределено; -КонецФункции - // Проверяет наличие права добавления дополнительных отчетов и обработок. Функция ПравоДобавления(Знач ДополнительнаяОбработка = Неопределено) Экспорт @@ -2206,7 +2274,7 @@ // Проверяет возможность выгрузки дополнительного отчета или обработки из программы в файл. // // Параметры: -// Обработка - СправочникСсылка.ДополнительныеОтчетыИОбработки +// Обработка - СправочникСсылка.ДополнительныеОтчетыИОбработки. // // Возвращаемое значение: // Булево @@ -2237,7 +2305,7 @@ // Проверяет возможность загрузки уже существующей в ИБ дополнительной обработки из файла. // // Параметры: -// Обработка - СправочникСсылка.ДополнительныеОтчетыИОбработки +// Обработка - СправочникСсылка.ДополнительныеОтчетыИОбработки. // // Возвращаемое значение: // Булево @@ -2268,7 +2336,7 @@ // Возвращает флажок отображения пользователю расширенной информации о дополнительном отчете или обработке. // // Параметры: -// Обработка - СправочникСсылка.ДополнительныеОтчетыИОбработки +// Обработка - СправочникСсылка.ДополнительныеОтчетыИОбработки. // // Возвращаемое значение: // Булево @@ -2350,13 +2418,13 @@ КонецПроцедуры // Запись информации в журнал регистрации по дополнительному отчету или обработке. -Процедура ЗаписатьИнформацию(Ссылка, ТекстСообщения, Реквизит1 = Неопределено, Реквизит2 = Неопределено, Реквизит3 = Неопределено) Экспорт +Процедура ЗаписатьИнформацию(Ссылка, ТекстСообщения, Реквизит1 = Неопределено, Реквизит2 = Неопределено, Реквизит3 = Неопределено) Уровень = УровеньЖурналаРегистрации.Информация; ЗаписатьВЖурнал(Уровень, Ссылка, ТекстСообщения, Реквизит1, Реквизит2, Реквизит3); КонецПроцедуры // Запись примечания в журнал регистрации по дополнительному отчету или обработке. -Процедура ЗаписатьПримечание(Ссылка, ТекстСообщения, Реквизит1 = Неопределено, Реквизит2 = Неопределено, Реквизит3 = Неопределено) Экспорт +Процедура ЗаписатьПримечание(Ссылка, ТекстСообщения, Реквизит1 = Неопределено, Реквизит2 = Неопределено, Реквизит3 = Неопределено) Уровень = УровеньЖурналаРегистрации.Примечание; ЗаписатьВЖурнал(Уровень, Ссылка, ТекстСообщения, Реквизит1, Реквизит2, Реквизит3); КонецПроцедуры @@ -2790,7 +2858,7 @@ КонфликтующийОбъект.Публикация = ДополнительныеОтчетыИОбработкиПовтИсп.ВидПубликацииДляКонфликтующихОбработок(); КонфликтующийОбъект.Записать(); КонецЦикла; - ИначеЕсли ПараметрыРегистрации.ОтключатьПубликацию Тогда + ИначеЕсли ПараметрыРегистрации.ОтключатьПубликацию Тогда Объект.Публикация = ДополнительныеОтчетыИОбработкиПовтИсп.ВидПубликацииДляКонфликтующихОбработок(); КонецЕсли; @@ -3047,6 +3115,19 @@ Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); КонецПопытки; + #Если ТолстыйКлиентОбычноеПриложение Тогда + Попытка + УдалитьФайлы(РезультатРегистрации.ИмяОбъекта); + Исключение + ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при получении регистрационных данных: + |Ошибка при удалении временного файла ""%1"": + |%2'"), + РезультатРегистрации.ИмяОбъекта, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписатьПредупреждение(Объект.Ссылка, ТекстПредупреждения); + КонецПопытки; + #КонецЕсли Если ИнформацияОбОшибке <> Неопределено Тогда Если ПараметрыРегистрации.ЭтоОтчет Тогда ТекстОшибки = НСтр("ru='Невозможно подключить дополнительный отчет из файла. @@ -3096,7 +3177,7 @@ // Только для внутреннего использования. // -Функция КоличествоДополнительныхОтчетовИОбработок() Экспорт +Функция КоличествоДополнительныхОтчетовИОбработок() Запрос = Новый Запрос; Запрос.Текст = diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежиме/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежиме/Module.bsl index 98dc0f2e8..928493758 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежиме/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежиме/Module.bsl @@ -431,16 +431,24 @@ ВременныйФайл = ПолучитьИмяВременногоФайла(); Попытка + Соединение.Получить(ПутьКФайлуНаСервере, ВременныйФайл); + Исключение + + УдалитьВременныйФайл(ВременныйФайл); ИнформацияОбОшибке = ИнформацияОбОшибке(); СообщениеОбОшибке = НСтр("ru = 'Ошибка при получении файла с сервера %1:'") + Символы.ПС + "%2"; ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ИмяСервера, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецПопытки; + + Результат = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ВременныйФайл)); + УдалитьВременныйФайл(ВременныйФайл); - Возврат ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ВременныйФайл)); + Возврат Результат; КонецФункции @@ -822,4 +830,24 @@ КонецПроцедуры +Процедура УдалитьВременныйФайл(ПолноеИмяФайла) + + Если ПустаяСтрока(ПолноеИмяФайла) Тогда + + Возврат; + + КонецЕсли; + + Попытка + + УдалитьФайлы(ПолноеИмяФайла); + + Исключение + + Возврат; + + КонецПопытки; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс/Module.bsl index 95eba4948..92ce6d6e8 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс/Module.bsl @@ -663,7 +663,7 @@ РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса( СтруктураURI.Схема, СтруктураURI.ИмяСервера, - Число(СтруктураURI.Порт))); + СтруктураURI.Порт)); ИначеЕсли Разрешение.Тип() = ТипСозданиеCOMОбъекта(Пакет()) Тогда diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl index 6a46bf185..d76342ef1 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВБезопасномРежимеСлужебный/Module.bsl @@ -37,7 +37,7 @@ // Функция должна возвращать одно и то же значение при многократном вызове. // // Параметры: -// ВнешнийМодуль - ЛюбаяСсылка, ссылка на внешний модуль, +// ВнешнийМодуль - ЛюбаяСсылка, ссылка на внешний модуль. // // Возвращаемое значение - Строка - шаблон имя профиля безопасности, содержащий символы // "%1", вместо которых в дальнейшем будет подставлен уникальный идентификатор. @@ -360,7 +360,7 @@ ИсполняемыйФрагмент = ИсполняемыйФрагмент + "(" + ПодстрокаПараметров + ")"; - Если ВыполнятьБезопасно <> БезопасныйРежим() Тогда + Если ВыполнятьБезопасно <> (БезопасныйРежим() <> Ложь) Тогда УстановитьБезопасныйРежим(ВыполнятьБезопасно); КонецЕсли; diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl index 7bb00655c..0dafa8674 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl @@ -215,7 +215,8 @@ // // Параметры: // Форма - УправляемаяФорма - Форма, для которой требуется вывод. -// РезультатВыполнения - Структура - См. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения() +// РезультатВыполнения - Структура - Результат выполнения операции, который необходимо показать на клиенте. +// Подробнее см. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). // Процедура ПоказатьРезультатВыполненияКоманды(Форма, РезультатВыполнения) Экспорт @@ -293,7 +294,7 @@ #Область СлужебныеПроцедурыИФункции // Выводит оповещение перед запуском команды. -Процедура ПоказатьОповещениеПриВыполненииКоманды(ВыполняемаяКоманда) Экспорт +Процедура ПоказатьОповещениеПриВыполненииКоманды(ВыполняемаяКоманда) Если ВыполняемаяКоманда.ПоказыватьОповещение Тогда ПоказатьОповещениеПользователя(НСтр("ru = 'Команда выполняется...'"), , ВыполняемаяКоманда.Представление); КонецЕсли; @@ -454,6 +455,7 @@ ПараметрыОткрытия = Новый Структура; ПараметрыОткрытия.Вставить("ИсточникДанных", ВыполняемаяКоманда.Ссылка); ПараметрыОткрытия.Вставить("ПараметрыИсточника", ПараметрыИсточника); + ПараметрыОткрытия.Вставить("ПараметрКоманды", ОбъектыНазначения); ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия, Форма); @@ -538,40 +540,6 @@ ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Обработчик, ТекстСообщения); КонецПроцедуры -// Продолжение процедуры (см. выше). -Процедура ВернутьРезультатПослеЗакрытияПростогоДиалога(ПараметрыОбработчика) Экспорт - Если ТипЗнч(ПараметрыОбработчика.Обработчик) = Тип("ОписаниеОповещения") Тогда - ВыполнитьОбработкуОповещения(ПараметрыОбработчика.Обработчик, ПараметрыОбработчика.Результат); - КонецЕсли; -КонецПроцедуры - -// Подготовка обработчика асинхронного диалога. -Функция ПодготовитьОбработчикДляДиалога(ОбработчикИлиСтруктура) Экспорт - - Если ТипЗнч(ОбработчикИлиСтруктура) = Тип("Структура") Тогда - // Рекурсивная регистрация всех обработчиков вызывающего кода. - Если ОбработчикИлиСтруктура.Свойство("ОбработчикРезультата") Тогда - ОбработчикИлиСтруктура.ОбработчикРезультата = ПодготовитьОбработчикДляДиалога(ОбработчикИлиСтруктура.ОбработчикРезультата); - КонецЕсли; - Если ОбработчикИлиСтруктура.Свойство("АсинхронныйДиалог") Тогда - // Регистрация открытого диалога. - ОбработчикИлиСтруктура.АсинхронныйДиалог.Открыт = Истина; - // Формирование обработчика (при этом фиксируется вся структура параметров). - Обработчик = Новый ОписаниеОповещения( - ОбработчикИлиСтруктура.АсинхронныйДиалог.ИмяПроцедуры, - ОбработчикИлиСтруктура.АсинхронныйДиалог.Модуль, - ОбработчикИлиСтруктура); - Иначе - Обработчик = Неопределено; - КонецЕсли; - Иначе - Обработчик = ОбработчикИлиСтруктура; - КонецЕсли; - - Возврат Обработчик; - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Служебные обработчики асинхронных диалогов. @@ -650,14 +618,14 @@ ПолучаемыеФайлы = Новый Массив; ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ПолноеИмяФайла, ДополнительныеПараметры.Адрес)); - Обработчик = Новый ОписаниеОповещения("ВыгрузитьФайлПолучениеФайла", ЭтотОбъект); + Обработчик = Новый ОписаниеОповещения("ОбработкаРезультатаНеТребуется", ЭтотОбъект); НачатьПолучениеФайлов(Обработчик, ПолучаемыеФайлы, ПолноеИмяФайла, Ложь); КонецЕсли; КонецПроцедуры // Обработчик результата работы процедуры ВыгрузитьВФайл. -Процедура ВыгрузитьФайлПолучениеФайла(ПолученныеФайлы, ДополнительныеПараметры) Экспорт +Процедура ОбработкаРезультатаНеТребуется(ПолученныеФайлы, ДополнительныеПараметры) Экспорт // Обработка результата не требуется. КонецПроцедуры diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl index c79c2735d..5afaddeb8 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl @@ -11,87 +11,351 @@ // Печатная форма. Функция ВидОбработкиПечатнаяФорма() Экспорт - Возврат "ПечатнаяФорма"; // не локализуется + Возврат "ПечатнаяФорма"; // Внутренний идентификатор. КонецФункции // Заполнение объекта. Функция ВидОбработкиЗаполнениеОбъекта() Экспорт - Возврат "ЗаполнениеОбъекта"; // не локализуется + Возврат "ЗаполнениеОбъекта"; // Внутренний идентификатор. КонецФункции // Создание связанных объектов. Функция ВидОбработкиСозданиеСвязанныхОбъектов() Экспорт - Возврат "СозданиеСвязанныхОбъектов"; // не локализуется + Возврат "СозданиеСвязанныхОбъектов"; // Внутренний идентификатор. КонецФункции // Назначаемый отчет. Функция ВидОбработкиОтчет() Экспорт - Возврат "Отчет"; // не локализуется + Возврат "Отчет"; // Внутренний идентификатор. КонецФункции // Дополнительная обработка. Функция ВидОбработкиДополнительнаяОбработка() Экспорт - Возврат "ДополнительнаяОбработка"; // не локализуется + Возврат "ДополнительнаяОбработка"; // Внутренний идентификатор. КонецФункции // Дополнительный отчет. Функция ВидОбработкиДополнительныйОтчет() Экспорт - Возврат "ДополнительныйОтчет"; // не локализуется + Возврат "ДополнительныйОтчет"; // Внутренний идентификатор. КонецФункции //////////////////////////////////////////////////////////////////////////////// // Имена типов команд. -// Вызов клиентского метода. -Функция ТипКомандыВызовКлиентскогоМетода() Экспорт - - Возврат "ВызовКлиентскогоМетода"; // не локализуется - -КонецФункции - -// Вызов серверного метода. +// Возвращает имя типа команд с вызовом серверного метода. Для выполнения команд такого типа +// в модуле объекта следует определить экспортную процедуру по шаблону: +// +// Для глобальных отчетов и обработок (Вид = "ДополнительнаяОбработка" или Вид = "ДополнительныйОтчет"): +// // Обработчик серверных команд. +// // +// // Параметры: +// // ИдентификаторКоманды - Строка - Имя команды, определенное в функции СведенияОВнешнейОбработке(). +// // ПараметрыВыполнения - Структура - Контекст выполнения команды. +// // * ДополнительнаяОбработкаСсылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - Ссылка обработки. +// // Может использоваться для чтения параметров обработки. +// // Пример см. в комментарии к функции ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы(). +// // +// Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполнения) Экспорт +// // Реализация логики команды. +// КонецПроцедуры +// +// Для печатных форм (Вид = "ПечатнаяФорма"): +// // Обработчик печати. +// // +// // Параметры: +// // МассивОбъектов - Массив - Ссылки на объекты, которые нужно распечатать. +// // КоллекцияПечатныхФорм - ТаблицаЗначений - Информация о табличных документах. +// // Используется для передачи в параметрах функции УправлениеПечатью.СведенияОПечатнойФорме(). +// // ОбъектыПечати - СписокЗначений - Соответствие между объектами и именами областей в табличных документах. +// // Используется для передачи в параметрах процедуры УправлениеПечатью.ЗадатьОбластьПечатиДокумента(). +// // ПараметрыВывода - Структура - Дополнительные параметры сформированных табличных документов. +// // * ДополнительнаяОбработкаСсылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - Ссылка обработки. +// // Может использоваться для чтения параметров обработки. +// // Пример см. в комментарии к функции ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы(). +// // +// // Пример: +// // ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "<ИдентификаторПечатнойФормы>"); +// // Если ПечатнаяФорма <> Неопределено Тогда +// // ТабличныйДокумент = Новый ТабличныйДокумент; +// // ТабличныйДокумент.КлючПараметровПечати = "<КлючСохраненияПараметровПечатнойФормы>"; +// // Для Каждого Ссылка Из МассивОбъектов Цикл +// // Если ТабличныйДокумент.ВысотаТаблицы > 0 Тогда +// // ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); +// // КонецЕсли; +// // НачалоОбласти = ТабличныйДокумент.ВысотаТаблицы + 1; +// // // ... код по формированию табличного документа ... +// // УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НачалоОбласти, ОбъектыПечати, Ссылка); +// // КонецЦикла; +// // ПечатнаяФорма.ТабличныйДокумент = ТабличныйДокумент; +// // КонецЕсли; +// // +// Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт +// // Реализация логики команды. +// КонецПроцедуры +// +// Для обработок создания связанных объектов (Вид = "СозданиеСвязанныхОбъектов"): +// // Обработчик серверных команд. +// // +// // Параметры: +// // ИдентификаторКоманды - Строка - Имя команды, определенное в функции СведенияОВнешнейОбработке(). +// // ОбъектыНазначения - Массив - Ссылки объектов, для которых вызвана команда. +// // СозданныеОбъекты - Массив - Ссылки новых объектов, созданных в результате выполнения команды. +// // ПараметрыВыполнения - Структура - Контекст выполнения команды. +// // * ДополнительнаяОбработкаСсылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - Ссылка обработки. +// // Может использоваться для чтения параметров обработки. +// // Пример см. в комментарии к функции ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы(). +// // +// Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, СозданныеОбъекты, ПараметрыВыполнения) Экспорт +// // Реализация логики команды. +// КонецПроцедуры +// +// Для обработок заполнения (Вид = "ЗаполнениеОбъекта"): +// // Обработчик серверных команд. +// // +// // Параметры: +// // ИдентификаторКоманды - Строка - Имя команды, определенное в функции СведенияОВнешнейОбработке(). +// // ОбъектыНазначения - Массив - Ссылки объектов, для которых вызвана команда. +// // - Неопределено - для команд "ЗаполнениеФормы". +// // ПараметрыВыполнения - Структура - Контекст выполнения команды. +// // * ДополнительнаяОбработкаСсылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - Ссылка обработки. +// // Может использоваться для чтения параметров обработки. +// // Пример см. в комментарии к функции ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы(). +// // +// Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполнения) Экспорт +// // Реализация логики команды. +// КонецПроцедуры +// +// Возвращаемое значение: +// Строка - имя типа команд с вызовом серверного метода. +// Функция ТипКомандыВызовСерверногоМетода() Экспорт - Возврат "ВызовСерверногоМетода"; // не локализуется + Возврат "ВызовСерверногоМетода"; // Внутренний идентификатор. КонецФункции -// Открытие формы. +// Возвращает имя типа команд с вызовом клиентского метода. Для выполнения команд такого типа +// в основной форме внешнего объекта следует определить клиентскую экспортную процедуру по шаблону: +// +// Для глобальных отчетов и обработок (Вид = "ДополнительнаяОбработка" или Вид = "ДополнительныйОтчет"): +// &НаКлиенте +// Процедура ВыполнитьКоманду(ИдентификаторКоманды) Экспорт +// // Реализация логики команды. +// КонецПроцедуры +// +// Для печатных форм (Вид = "ПечатнаяФорма"): +// &НаКлиенте +// Процедура Печать(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт +// // Реализация логики команды. +// КонецПроцедуры +// +// Для обработок создания связанных объектов (Вид = "СозданиеСвязанныхОбъектов"): +// &НаКлиенте +// Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив, СозданныеОбъекты) Экспорт +// // Реализация логики команды. +// КонецПроцедуры +// +// Для обработок заполнения и контекстных отчетов (Вид = "ЗаполнениеОбъекта" или Вид = "Отчет"): +// &НаКлиенте +// Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт +// // Реализация логики команды. +// КонецПроцедуры +// +// Дополнительно (для всех видов): +// В параметре формы "ДополнительнаяОбработкаСсылка" передается ссылка этого объекта +// (элемент справочника ДополнительныеОтчетыИОбработки, соответствующий этому объекту), +// которая может использоваться для фонового выполнения длительных операций. +// Подробнее см. в документации к подсистеме, раздел "Фоновое выполнение длительных операций". +// +// Возвращаемое значение: +// Строка - имя типа команд с вызовом клиентского метода. +// +Функция ТипКомандыВызовКлиентскогоМетода() Экспорт + + Возврат "ВызовКлиентскогоМетода"; // Внутренний идентификатор. + +КонецФункции + +// Возвращает имя типа команд по открытию формы. При выполнении этих команд +// открывается основная форма внешнего объекта с указанными ниже параметрами. +// +// Общие параметры: +// * ИдентификаторКоманды - Строка - Имя команды, определенное в функции СведенияОВнешнейОбработке(). +// * ДополнительнаяОбработкаСсылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - Ссылка этого объекта. +// Может использоваться для чтения и сохранения параметров обработки. +// Также может использоваться для фонового выполнения длительных операций. +// Подробнее см. в документации к подсистеме, раздел "Фоновое выполнение длительных операций". +// * ИмяФормы - Строка - Имя формы-владельца, из которой вызвана эта команда. +// +// Вспомогательные параметры для обработок создания связанных объектов (Вид = "СозданиеСвязанныхОбъектов"), +// обработок заполнения (Вид = "ЗаполнениеОбъекта") и контекстных отчетов (Вид = "Отчет"): +// * ОбъектыНазначения - Массив - Ссылки объектов, для которых вызвана команда. +// +// Пример чтения общих параметров: +// ОбъектСсылка = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ДополнительнаяОбработкаСсылка"); +// ИдентификаторКоманды = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ИдентификаторКоманды"); +// +// Пример чтения значений дополнительных настроек: +// Если ЗначениеЗаполнено(ОбъектСсылка) Тогда +// ХранилищеНастроек = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбъектСсылка, "ХранилищеНастроек"); +// Настройки = ХранилищеНастроек.Получить(); +// Если ТипЗнч(Настройки) = Тип("Структура") Тогда +// ЗаполнитьЗначенияСвойств(ЭтотОбъект, "<ИменаНастроек>"); +// КонецЕсли; +// КонецЕсли; +// +// Пример сохранения значений дополнительных настроек: +// Настройки = Новый Структура("<ИменаНастроек>", <ЗначенияНастроек>); +// ДополнительнаяОбработкаОбъект = ОбъектСсылка.ПолучитьОбъект(); +// ДополнительнаяОбработкаОбъект.ХранилищеНастроек = Новый ХранилищеЗначения(Настройки); +// ДополнительнаяОбработкаОбъект.Записать(); +// +// Возвращаемое значение: +// Строка - имя типа команд по открытию формы. +// Функция ТипКомандыОткрытиеФормы() Экспорт - Возврат "ОткрытиеФормы"; // не локализуется + Возврат "ОткрытиеФормы"; // Внутренний идентификатор. КонецФункции -// Заполнение формы. +// Возвращает имя типа команд по заполнению формы без записи объекта. Данные команды доступны +// только в обработках заполнения (Вид = "ЗаполнениеОбъекта"). +// Для выполнения команд такого типа в модуле объекта следует определить экспортную процедуру по шаблону: +// // Обработчик серверных команд. +// // +// // Параметры: +// // ИдентификаторКоманды - Строка - Имя команды, определенное в функции СведенияОВнешнейОбработке(). +// // ОбъектыНазначения - Массив - Ссылки объектов, для которых вызвана команда. +// // - Неопределено - Не передается для команд типа "ЗаполнениеФормы". +// // ПараметрыВыполнения - Структура - Контекст выполнения команды. +// // * ЭтаФорма - УправляемаяФорма - Заполняемая форма. Передается для команд типа "ЗаполнениеФормы". +// // * ДополнительнаяОбработкаСсылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - Ссылка обработки. +// // Может использоваться для чтения параметров обработки. +// // Пример см. в комментарии к функции ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы(). +// // +// Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполнения) Экспорт +// // Реализация логики команды. +// КонецПроцедуры +// +// Возвращаемое значение: +// Строка - имя типа команд по заполнению формы. +// Функция ТипКомандыЗаполнениеФормы() Экспорт - Возврат "ЗаполнениеФормы"; // не локализуется + Возврат "ЗаполнениеФормы"; // Внутренний идентификатор. КонецФункции -// Сценарий в безопасном режиме. +// Возвращает имя типа команд по сценарному выполнению в безопасном режиме. +// Для выполнения команд такого типа в модуле объекта следует определить экспортную процедуру по шаблону: +// // Формирование сценария выполнения команды с использованием программного интерфейса модуля +// // ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс. +// // Функции, добавляющие этапы сценария: +// // ДобавитьМетодКонфигурации() добавляет в сценарий вызов процедуры или функции конфигурации. +// // Функция возвращает этап сценария, который затем можно использовать в функция по заполнению параметров. +// // ДобавитьМетодОбработки() добавляет в сценарий вызов процедуры или функции объекта дополнительной обработки. +// // Функция возвращает этап сценария, который затем можно использовать в функция по заполнению параметров. +// // Процедуры, регистрирующие параметры, которые будут переданы в процедуру или функцию, обрабатывающую этап: +// // ДобавитьКлючСессии() добавляет в массив параметров текущий ключ сессии расширения безопасного режима. +// // ДобавитьЗначение() добавляет в массив параметров фиксированное значение произвольного типа. +// // ДобавитьСохраняемоеЗначение() добавляет в массив параметров сохраняемое значение. +// // ДобавитьКоллекциюСохраняемыхЗначений() добавляет в массив параметров коллекцию сохраняемых значений. +// // ДобавитьПараметрВыполненияКоманды() добавляет в массив параметров элемент структуры ПараметрыВыполненияКоманды. +// // ДобавитьОбъектыНазначения() добавляет в массив параметров массив объектов назначения +// // (актуально только для назначаемых дополнительных обработок). +// // Подробнее см. в документации к подсистеме, раздел "Расширение безопасного режима". +// // +// // Параметры: +// // ИдентификаторКоманды - Строка - Имя команды, определенное в функции СведенияОВнешнейОбработке(). +// // ПараметрыВыполнения - Структура - Контекст выполнения команды. +// // * ДополнительнаяОбработкаСсылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - Ссылка этого объекта. +// // Может использоваться для чтения параметров обработки. +// // Пример см. в комментарии к функции ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы(). +// // +// Функция СформироватьСценарий(ИдентификаторКоманды, ПараметрыВыполнения) Экспорт +// Сценарий = ДополнительныеОтчетыИОбработкиВБезопасномРежимеИнтерфейс.НовыйСценарий(); +// // Формирование сценария. +// Возврат Сценарий; +// КонецФункции +// +// Возвращаемое значение: +// Строка - имя типа команд по сценарному выполнению в безопасном режиме. +// Функция ТипКомандыСценарийВБезопасномРежиме() Экспорт - Возврат "СценарийВБезопасномРежиме"; // не локализуется + Возврат "СценарийВБезопасномРежиме"; // Внутренний идентификатор. КонецФункции -// Загрузка данных из файла. +// Возвращает имя типа команд по загрузке данных из файла. Данные команды доступны +// только в глобальных обработках (Вид = "ДополнительнаяОбработка") +// при наличии в конфигурации подсистемы "ЗагрузкаДанныхИзФайла". +// Для выполнения команд такого типа в модуле объекта следует определить экспортные процедуры по шаблону: +// // Определяет параметры загрузки данных из файла. +// // +// // Параметры: +// // ИдентификаторКоманды - Строка - Имя команды, определенное в функции СведенияОВнешнейОбработке(). +// // ПараметрыЗагрузки - Структура - Настройки загрузки данных: +// // * ИмяМакетаСШаблоном - Строка - Имя макета с шаблоном загружаемых данных. +// // По умолчанию используется макет "ЗагрузкаИзФайла". +// // * ОбязательныеКолонкиМакета - Массив - Список имен колонок обязательных для заполнения. +// // +// Процедура ОпределитьПараметрыЗагрузкиДанныхИзФайла(ИдентификаторКоманды, ПараметрыЗагрузки) Экспорт +// // Переопределение настроек загрузки данных из файла. +// КонецПроцедуры +// +// // Сопоставляет загружаемые данные с данными в информационной базе. +// // +// // Параметры: +// // ИдентификаторКоманды - Строка - Имя команды, определенное в функции СведенияОВнешнейОбработке(). +// // ЗагружаемыеДанные - ТаблицаЗначений - Описание загружаемых данных: +// // * СопоставленныйОбъект - СправочникСсылка.Ссылка - Ссылка на сопоставленный объект. +// // Заполняется внутри этой процедуры. +// // * <другие колонки> - Строка - Данные, загруженные из файла. +// // Состав колонок соответствует макету "ЗагрузкаИзФайла". +// // +// Процедура СопоставитьЗагружаемыеДанныеИзФайла(ИдентификаторКоманды, ЗагружаемыеДанные) Экспорт +// // Реализация логики поиска данных в программе. +// КонецПроцедуры +// +// // Загружает сопоставленные данные в базу. +// // +// // Параметры: +// // ИдентификаторКоманды - Строка - Имя команды, определенное в функции СведенияОВнешнейОбработке(). +// // ЗагружаемыеДанные - ТаблицаЗначений - Описание загружаемых данных: +// // * СопоставленныйОбъект - СправочникСсылка - Ссылка на сопоставленный объект. +// // * РезультатСопоставленияСтроки - Строка - Статус загрузки. Возможны варианты: Создан, Обновлен, Пропущен. +// // * ОписаниеОшибки - Строка - Расшифровка ошибки загрузки данных. +// // * Идентификатор - Число - Уникальный номер строки. +// // * <другие колонки> - Строка - Данные, загруженные из файла. +// // Состав колонок соответствует макету "ЗагрузкаИзФайла". +// // ПараметрыЗагрузки - Структура - Параметры с пользовательскими установками загрузки данных. +// // * СоздаватьНовые - Булево - Требуется ли создавать новые элементы справочника. +// // * ОбновлятьСуществующие - Булево - Требуется ли обновлять элементы справочника. +// // Отказ - Булево - Признак отмены загрузки. +// // +// Процедура ЗагрузитьИзФайла(ИдентификаторКоманды, ЗагружаемыеДанные, ПараметрыЗагрузки, Отказ) Экспорт +// // Реализация логики загрузки данных в программу. +// КонецПроцедуры +// +// Возвращаемое значение: +// Строка - имя типа команд по загрузке данных из файла. +// Функция ТипКомандыЗагрузкаДанныхИзФайла() Экспорт - Возврат "ЗагрузкаДанныхИзФайла"; // не локализуется + Возврат "ЗагрузкаДанныхИзФайла"; // Внутренний идентификатор. КонецФункции @@ -101,14 +365,14 @@ // Идентификатор формы списка. Функция ТипФормыСписка() Экспорт - Возврат "ФормаСписка"; // не локализуется + Возврат "ФормаСписка"; // Внутренний идентификатор. КонецФункции // Идентификатор формы объекта. Функция ТипФормыОбъекта() Экспорт - Возврат "ФормаОбъекта"; // не локализуется + Возврат "ФормаОбъекта"; // Внутренний идентификатор. КонецФункции @@ -127,7 +391,7 @@ // Идентификатор, который используется для рабочего стола. Функция ИдентификаторРабочегоСтола() Экспорт - Возврат "РабочийСтол"; // не локализуется + Возврат "РабочийСтол"; // Внутренний идентификатор. КонецФункции @@ -146,5 +410,4 @@ Возврат НСтр("ru = 'Дополнительные отчеты и обработки'", КодЯзыка); КонецФункции - #КонецОбласти diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПовтИсп/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПовтИсп/Module.bsl index 0504c3de1..7f7ea0e16 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПовтИсп/Module.bsl @@ -27,7 +27,7 @@ // Вид публикации, который должен использоваться для конфликтующих дополнительных отчетов и обработок. // // Возвращаемое значение: -// ПеречислениеСсылка.ВариантыПубликацииДополнительныхОтчетовИОбработок +// ПеречислениеСсылка.ВариантыПубликацииДополнительныхОтчетовИОбработок. // Функция ВидПубликацииДляКонфликтующихОбработок() Экспорт diff --git a/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl b/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl index c3f99bcd8..dcb97fef6 100644 --- a/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl +++ b/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl @@ -331,6 +331,23 @@ КонецПроцедуры +// Только для внутреннего использования. +// +Процедура ПоместитьДанныеВоВременноеХранилище(СобытияЖурнала, УникальныйИдентификатор) Экспорт + + Для Каждого СтрокаСобытие Из СобытияЖурнала Цикл + Если ПустаяСтрока(СтрокаСобытие.АдресДанных) Тогда + АдресДанных = ""; + Иначе + ЧтениеXML = Новый ЧтениеXML(); + ЧтениеXML.УстановитьСтроку(СтрокаСобытие.АдресДанных); + АдресДанных = СериализаторXDTO.ПрочитатьXML(ЧтениеXML); + КонецЕсли; + СтрокаСобытие.АдресДанных = ПоместитьВоВременноеХранилище(АдресДанных, УникальныйИдентификатор); + КонецЦикла; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -394,7 +411,7 @@ НовоеЗначение.Вставить(РазделениеДанныхМассив[0], МассивЗначенийРазделителей); Иначе - ЗначенияОтбора = СтрРазделить(ЗначениеИзСписка.Значение, Символы.ПС, Истина); + ЗначенияОтбора = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ЗначениеИзСписка.Значение, Символы.ПС); Для Каждого ЗначениеОтбора Из ЗначенияОтбора Цикл НовоеЗначение.Добавить(ЗначениеОтбора); КонецЦикла; @@ -478,23 +495,6 @@ //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. -// Только для внутреннего использования. -// -Процедура ПоместитьДанныеВоВременноеХранилище(СобытияЖурнала, УникальныйИдентификатор) Экспорт - - Для Каждого СтрокаСобытие Из СобытияЖурнала Цикл - Если ПустаяСтрока(СтрокаСобытие.АдресДанных) Тогда - АдресДанных = ""; - Иначе - ЧтениеXML = Новый ЧтениеXML(); - ЧтениеXML.УстановитьСтроку(СтрокаСобытие.АдресДанных); - АдресДанных = СериализаторXDTO.ПрочитатьXML(ЧтениеXML); - КонецЕсли; - СтрокаСобытие.АдресДанных = ПоместитьВоВременноеХранилище(АдресДанных, УникальныйИдентификатор); - КонецЦикла; - -КонецПроцедуры - // Только для внутреннего использования. // Процедура УстановитьСтрокуАдресаДанных(СобытиеЖурнала) diff --git a/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl b/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl index 9db86e6fd..6e70c8cf5 100644 --- a/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl @@ -282,7 +282,7 @@ // Только для внутреннего использования. // -Функция СобытиеЖурналаРегистрацииВСтруктуру(Данные) Экспорт +Функция СобытиеЖурналаРегистрацииВСтруктуру(Данные) Если ТипЗнч(Данные) = Тип("Структура") Тогда Возврат Данные; diff --git a/SSL/src/CommonModules/ЗагрузкаДанныхИзФайла/Module.bsl b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайла/Module.bsl new file mode 100644 index 000000000..93c841c3a --- /dev/null +++ b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайла/Module.bsl @@ -0,0 +1,68 @@ + +#Область ПрограммныйИнтерфейс + +// Функция - Заполнить описание колонок +// +// Параметры: +// Таблица - Строка, ТаблицаЗначений - Для типа строка, Полное имя табличной части, как в метаданных +// Колонки - Строка - Список извлекаемых колонок, разделенный запятыми. +// +// Возвращаемое значение: +// Массив - Структура с описание колонок для макета. +// +Функция СформироватьОписаниеКолонок(Таблица, Колонки = Неопределено) Экспорт + + ИзвлекатьНеВсеКолонки = Ложь; + Если Колонки <> Неопределено Тогда + СписокКолонокДляИзвлечения = СтрРазделить(Колонки, ",", Ложь); + ИзвлекатьВсеКолонки = Истина; + КонецЕсли; + + СписокКолонок = Новый Массив; + Если ТипЗнч(Таблица) = Тип("ДанныеФормыКоллекция") Тогда + КопияТаблицы = Таблица; + ВнутренняяТаблица = КопияТаблицы.Выгрузить(); + ВнутренняяТаблица.Колонки.Удалить("ИсходныйНомерСтроки"); + ВнутренняяТаблица.Колонки.Удалить("НомерСтроки"); + Иначе + ВнутренняяТаблица= Таблица; + КонецЕсли; + + Если ТипЗнч(ВнутренняяТаблица) = Тип("ТаблицаЗначений") Тогда + Для каждого Колонка Из ВнутренняяТаблица.Колонки Цикл + Если ИзвлекатьНеВсеКолонки И СписокКолонокДляИзвлечения.Найти(Колонка.Имя) = Неопределено Тогда + Продолжить; + КонецЕсли; + НоваяКолонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета(Колонка.Имя, Колонка.ТипЗначения, Колонка.Заголовок, Колонка.Ширина); + СписокКолонок.Добавить(НоваяКолонка); + КонецЦикла; + ИначеЕсли ТипЗнч(ВнутренняяТаблица) = Тип("Строка") Тогда + Объект = Метаданные.НайтиПоПолномуИмени(ВнутренняяТаблица); + Для каждого Колонка Из Объект.Реквизиты Цикл + Если ИзвлекатьНеВсеКолонки И СписокКолонокДляИзвлечения.Найти(Колонка.Имя) = Неопределено Тогда + Продолжить; + КонецЕсли; + НоваяКолонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета(Колонка.Имя, Колонка.Тип, Колонка.Представление()); + НоваяКолонка.Подсказка = Колонка.Подсказка; + НоваяКолонка.Ширина = 30; + СписокКолонок.Добавить(НоваяКолонка); + КонецЦикла; + КонецЕсли; + Возврат СписокКолонок; +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ДобавитьСтатистическуюИнформацию(ИмяОперации, Значение = 1, Комментарий = "") Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда + МодульЦентрМониторинга = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторинга"); + ИмяОперации = "ЗагрузкаДанныхИзФайла." + ИмяОперации; + МодульЦентрМониторинга.ЗаписатьОперациюБизнесСтатистики(ИмяОперации, Значение, Комментарий); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ЗагрузкаДанныхИзФайла/ЗагрузкаДанныхИзФайла.mdo b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайла/ЗагрузкаДанныхИзФайла.mdo new file mode 100644 index 000000000..ee8195b86 --- /dev/null +++ b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайла/ЗагрузкаДанныхИзФайла.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="fd5e72f7-3078-48eb-b01b-1800ffbd86d3"> + <name>ЗагрузкаДанныхИзФайла</name> + <synonym> + <key>ru</key> + <value>Загрузка данных из файла</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиент/Module.bsl b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиент/Module.bsl index 4ada8d981..ceb972fa2 100644 --- a/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиент/Module.bsl @@ -19,6 +19,7 @@ ПараметрыЗагрузки.Вставить("Заголовок"); ПараметрыЗагрузки.Вставить("ИмяМакетаСШаблоном"); ПараметрыЗагрузки.Вставить("ДополнительныеПараметры"); + ПараметрыЗагрузки.Вставить("КолонкиМакета"); Возврат ПараметрыЗагрузки; КонецФункции @@ -37,6 +38,7 @@ КонецПроцедуры + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -55,4 +57,23 @@ КонецПроцедуры -#КонецОбласти \ No newline at end of file +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Открывает диалог загрузки файла +// +// Параметры: +// ОповещениеЗавершения - ОписаниеОповещения - вызывается после успешного помещения файла. +// ИмяФайла - Строка - имя файла в диалоге. +// +Процедура ДиалогЗагрузкиФайла(ОповещениеЗавершения , ИмяФайла = "") Экспорт + ДиалогВыборФайла = Новый Структура(); + ДиалогВыборФайла.Вставить("Режим", РежимДиалогаВыбораФайла.Открытие); + ДиалогВыборФайла.Вставить("Фильтр", НСтр("ru='Все поддерживаемые форматы файлов(*.xls;*.xlsx;*.ods;*.mxl;*.csv)|*.xls;*.xlsx;*.ods;*.mxl;*.csv|Книга Excel 97 (*.xls)|*.xls|Книга Excel 2007 (*.xlsx)|*.xlsx|Электронная таблица OpenDocument (*.ods)|*.ods|Текстовый документ c разделителями (*.csv)|*.csv|Табличный документ (*.mxl)|*.mxl'")); + + Идентификатор = Новый УникальныйИдентификатор(ОповещениеЗавершения .Модуль.КлючУникальности); + СтандартныеПодсистемыКлиент.ПоказатьПомещениеФайла(ОповещениеЗавершения , Идентификатор, ИмяФайла, ДиалогВыборФайла); +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиентСервер/Module.bsl b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиентСервер/Module.bsl new file mode 100644 index 000000000..9e69365cd --- /dev/null +++ b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиентСервер/Module.bsl @@ -0,0 +1,80 @@ + +#Область ПрограммныйИнтерфейс + +// Создает структуру описания колонок для макета загрузки данных из файла +// +// Возвращаемое значение: +// Структура - Структура с описание колонки +// * Имя - Строка - Имя колонки +// * Тип - ОписаниеТипов - Тип колонки +// * Заголовок - Строка - Заголовок колонки выводимый в бланке для загрузки +// * Ширина - Число - Ширина колонки +// * Подсказка - Строка - Подсказка выводимая в заголовке колонки. +// * ОбязательнаяДляЗаполнения - Булево - Истина, если колонка обязательно должна содержать значения +// * Группа - Строка - Имя группы колонок +// * Родитель - Строка - Используется для связи динамической колонки с реквизитом табличной части объекта. +// +Функция ОписаниеКолонкиМакета(Имя, Тип, Заголовок = Неопределено, Ширина = 0, Подсказка = "") Экспорт + + КолонкаМакета = Новый Структура("Имя, Тип, Заголовок, Ширина, Позиция, Подсказка, ОбязательнаДляЗаполнения, Группа, Родитель"); + КолонкаМакета.Имя = Имя; + КолонкаМакета.Тип = Тип; + КолонкаМакета.Заголовок = ?(ЗначениеЗаполнено(Заголовок), Заголовок, Имя); + КолонкаМакета.Ширина = ?(Ширина = 0, 30, Ширина); + КолонкаМакета.Подсказка = Подсказка; + КолонкаМакета.Родитель = Имя; + + Возврат КолонкаМакета; + +КонецФункции + +// Возвращает колонку макета по имени +// +// Параметры: +// Имя - Строка - Имя колонки +// СписокКолонок - Массив - Набор колонок макета. +// +// Возвращаемое значение: +// Структура - Структура с описание колонки. Состав структуры см. в функции ОписаниеКолонкиМакета +// Если колонка не найдена, то Неопределено. +// +Функция КолонкаМакета(Имя, СписокКолонок) Экспорт + Для каждого Колонка Из СписокКолонок Цикл + Если Колонка.Имя = Имя Тогда + Возврат Колонка; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; +КонецФункции + +// Удаляет колонку макета из массива +// +// Параметры: +// Имя - Строка - Имя колонки +// СписокКолонок - Массив - Набор колонок макета. +// +Процедура УдалитьКолонкуМакета(Имя, СписокКолонок) Экспорт + + Для Индекс = 0 По СписокКолонок.Количество() -1 Цикл + Если СписокКолонок[Индекс].Имя = Имя Тогда + СписокКолонок.Удалить(Индекс); + Возврат; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция КолонкиИмеютГруппировку(Знач ИнформацияПоКолонкам) Экспорт + ГруппыКолонок = Новый Соответствие; + Для каждого КолонкаТаблицы Из ИнформацияПоКолонкам Цикл + ГруппыКолонок.Вставить(КолонкаТаблицы.Группа); + КонецЦикла; + Возврат ?(ГруппыКолонок.Количество() > 1, Истина, Ложь); +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиентСервер/ЗагрузкаДанныхИзФайлаКлиентСервер.mdo b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиентСервер/ЗагрузкаДанныхИзФайлаКлиентСервер.mdo new file mode 100644 index 000000000..a2a79a122 --- /dev/null +++ b/SSL/src/CommonModules/ЗагрузкаДанныхИзФайлаКлиентСервер/ЗагрузкаДанныхИзФайлаКлиентСервер.mdo @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ddeec7f4-8bd3-40af-bcac-00d18c0e6d6a"> + <name>ЗагрузкаДанныхИзФайлаКлиентСервер</name> + <synonym> + <key>ru</key> + <value>Загрузка данных из файла клиент сервер</value> + </synonym> + <clientManagedApplication>true</clientManagedApplication> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl b/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl index a1f6caa64..54e583164 100644 --- a/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЗаметкиПользователяСлужебный/Module.bsl @@ -99,8 +99,11 @@ Возврат; КонецЕсли; - Если Не Источник.ПометкаУдаления И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Источник.Ссылка, "ПометкаУдаления") = Истина Тогда - Источник.ДополнительныеСвойства.Вставить("СнятаПометкаУдаления"); + Если Не Источник.ПометкаУдаления Тогда + ПометкаУдаленияПоСсылке = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Источник.Ссылка, "ПометкаУдаления"); + Если ПометкаУдаленияПоСсылке = Истина Тогда + Источник.ДополнительныеСвойства.Вставить("СнятаПометкаУдаления"); + КонецЕсли; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl index 85b319387..30fd4c46c 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl @@ -12,7 +12,7 @@ // В форме должны быть созданы: // - реквизит типа дерево значений, имя которого - "ОбластиПерсональныхДанных", // - таблица формы, связанная с этим реквизитом, -// имя которой так же - "ОбластиПерсональныхДанных", +// имя которой так же - "ОбластиПерсональныхДанных". // // Параметры: // Форма - форма настройки системы. @@ -65,7 +65,7 @@ // В форме должны быть созданы: // - реквизит типа дерево значений, имя которого - "ОбластиПерсональныхДанных", // - таблица формы, связанная с этим реквизитом, -// имя которой так же - "ОбластиПерсональныхДанных", +// имя которой так же - "ОбластиПерсональныхДанных". // // Параметры: // Форма - форма настройки системы. @@ -239,6 +239,7 @@ | Согласия.Субъект, | Согласия.Действует, | Согласия.СрокДействия + |ПОМЕСТИТЬ ВТСогласия |ИЗ | РегистрСведений.СогласияНаОбработкуПерсональныхДанных.СрезПоследних( | &Дата, @@ -247,8 +248,35 @@ | И Регистратор <> &ИсключаемыйРегистратор) КАК Согласия |ГДЕ | Согласия.Действует = ИСТИНА - | И (Согласия.СрокДействия >= &Дата - | ИЛИ Согласия.СрокДействия = ДАТАВРЕМЯ(1, 1, 1))"; + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Согласия.ДатаПолучения, + | Согласия.ДокументОснование, + | Согласия.Организация, + | Согласия.Субъект, + | Согласия.Действует, + | Согласия.СрокДействия + |ИЗ + | ВТСогласия КАК Согласия + |ГДЕ + | Согласия.СрокДействия = ДАТАВРЕМЯ(1, 1, 1) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | Согласия.ДатаПолучения, + | Согласия.ДокументОснование, + | Согласия.Организация, + | Согласия.Субъект, + | Согласия.Действует, + | Согласия.СрокДействия + |ИЗ + | ВТСогласия КАК Согласия + |ГДЕ + | Согласия.СрокДействия <> ДАТАВРЕМЯ(1, 1, 1) + | И Согласия.СрокДействия >= &Дата"; Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("Организация", Организация); @@ -380,11 +408,11 @@ Процедура ПриЗаполненииИсточниковДанныхДляПроверкиЗапретаИзменения(ИсточникиДанных) Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда - Модуль = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзменения"); - Модуль.ДобавитьСтроку(ИсточникиДанных, + МодульДатыЗапретаИзменения = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзменения"); + МодульДатыЗапретаИзменения.ДобавитьСтроку(ИсточникиДанных, Метаданные.Документы.СогласиеНаОбработкуПерсональныхДанных.ПолноеИмя(), "ДатаПолучения", "ОбработкаПерсональныхДанных"); - Модуль.ДобавитьСтроку(ИсточникиДанных, + МодульДатыЗапретаИзменения.ДобавитьСтроку(ИсточникиДанных, Метаданные.Документы.ОтзывСогласияНаОбработкуПерсональныхДанных.ПолноеИмя(), "ДатаОтзыва", "ОбработкаПерсональныхДанных"); КонецЕсли; @@ -395,6 +423,29 @@ #Область СлужебныеПроцедурыИФункции +Процедура ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт + + // Загрузка при обмене данными проверяется внутри вызова. + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда + МодульДатыЗапретаИзменения = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзменения"); + МодульДатыЗапретаИзменения.ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента(Источник, + Отказ, РежимЗаписи, РежимПроведения); + КонецЕсли; + +КонецПроцедуры + +Процедура ПроверитьДатуЗапретаИзмененияПередУдалением(Источник, Отказ) Экспорт + + // Загрузка при обмене данными проверяется внутри вызова. + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда + МодульДатыЗапретаИзменения = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзменения"); + МодульДатыЗапретаИзменения.ПроверитьДатуЗапретаИзмененияПередУдалением(Источник, Отказ); + КонецЕсли; + +КонецПроцедуры + Функция СведенияОПерсональныхДанных() // Таблица сведений о персональных данных. diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl index f56fd080f..541846587 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхКлиент/Module.bsl @@ -43,12 +43,12 @@ МакетИДанныеОбъекта = УправлениеПечатьюВызовСервера.МакетыИДанныеОбъектовДляПечати(ИмяМенеджераПечати, ИмяМакета, СоставДокументов); Для Каждого Согласие Из СоставДокументов Цикл - НапечататьСогласиеНаОбработкуПерсональныхДанныхСубъекта(Согласие, МакетИДанныеОбъекта, ИмяМакета, МакетИДанныеОбъекта.ЛокальныйКаталогФайловПечати); + НапечататьСогласиеНаОбработкуПерсональныхДанныхСубъекта(Согласие, МакетИДанныеОбъекта, ИмяМакета); КонецЦикла; КонецФункции -Процедура НапечататьСогласиеНаОбработкуПерсональныхДанныхСубъекта(Согласие, МакетИДанныеОбъекта, ИмяМакета, ЛокальныйКаталогФайловПечати) +Процедура НапечататьСогласиеНаОбработкуПерсональныхДанныхСубъекта(Согласие, МакетИДанныеОбъекта, ИмяМакета) ТипМакета = МакетИДанныеОбъекта.Макеты.ТипыМакетов[ИмяМакета]; ДвоичныеДанныеМакетов = МакетИДанныеОбъекта.Макеты.ДвоичныеДанныеМакетов; diff --git a/SSL/src/CommonModules/Интеграция1СБухфон/Module.bsl b/SSL/src/CommonModules/Интеграция1СБухфон/Module.bsl index 8a51cf6ad..2108d148f 100644 --- a/SSL/src/CommonModules/Интеграция1СБухфон/Module.bsl +++ b/SSL/src/CommonModules/Интеграция1СБухфон/Module.bsl @@ -12,22 +12,6 @@ НастройкиПользователя = Интеграция1СБухфонВызовСервера.НастройкиУчетнойЗаписиПользователя(); Элемент.Видимость = НастройкиПользователя.ВидимостьКнопки1СБухфон; - НастройкиКлиентскогоПриложения = ХранилищеСистемныхНастроек.Загрузить("Общее/НастройкиКлиентскогоПриложения"); - Если НастройкиКлиентскогоПриложения = Неопределено Тогда - ВариантМасштаба = ВариантМасштабаФормКлиентскогоПриложения.Обычный; - Иначе - ВариантМасштаба = НастройкиКлиентскогоПриложения.ВариантМасштабаФормКлиентскогоПриложения; - КонецЕсли; - - Если ТекущийВариантИнтерфейсаКлиентскогоПриложения() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 - Или ВариантМасштаба = ВариантМасштабаФормКлиентскогоПриложения.Компактный Тогда - Элемент.Ширина = 20; - Элемент.Высота = 3; - Иначе - Элемент.Ширина = 16; - Элемент.Высота = 3; - КонецЕсли; - КонецПроцедуры #КонецОбласти @@ -40,7 +24,7 @@ // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( - "Интеграция1СБухфон"); + "Интеграция1СБухфон"); КонецПроцедуры @@ -62,7 +46,7 @@ #Область СлужебныеПроцедурыИФункции -// Записывает в регистр сведений путь исполняемого файла 1С-Бухфон. +// Записывает в регистр сведений путь исполняемого файла приложения. // Хранение путей до исполняемых файлов ведется в разрезе ПК, для определения ПК используется идентификатор клиента // т.к. невозможно использование функции ИмяКомпьютера в веб клиенте. // @@ -81,14 +65,14 @@ КонецПроцедуры -// Записывает в регистр сведений настройки учетных записей пользователей для запуска программы 1С-Бухфон. +// Записывает в регистр сведений настройки учетных записей пользователей для запуска приложения. // // Параметры: // Пользователь - УникальныйИдентификатор - Текущий пользователь информационной базы. -// Логин - Строка - Данные учетной записи программы 1С-Бухфон. -// Пароль - Строка - Данные учетной записи программы 1С-Бухфон. -// ИспользоватьЛП - Булево - Если значение Ложь Параметры Логин, Пароль не доступны. -// ВидимостьКнопки1СБухфон - Булево - Отображение Кнопки запуска 1С-Бухфон на Начальной странице. +// Логин - Строка - Данные учетной записи приложения. +// Пароль - Строка - Данные учетной записи приложения. +// ИспользоватьЛП - Булево - Если значение Ложь, параметры Логин, Пароль не доступны. +// ВидимостьКнопки1СБухфон - Булево - Отображение кнопки запуска приложения на начальной странице. // Процедура СохранитьНастройкиПользователяВХранилище(Логин, Пароль, diff --git a/SSL/src/CommonModules/Интеграция1СБухфонВызовСервера/Module.bsl b/SSL/src/CommonModules/Интеграция1СБухфонВызовСервера/Module.bsl index 2d3a06bf3..a3b56932e 100644 --- a/SSL/src/CommonModules/Интеграция1СБухфонВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/Интеграция1СБухфонВызовСервера/Module.bsl @@ -19,13 +19,13 @@ КонецФункции -// Получает из регистра сведений параметры для запуска программы 1С-Бухфон. +// Получает из регистра сведений параметры для запуска приложения. // // Параметры: // Пользователь - УникальныйИдентификатор - Текущий пользователь информационной базы. // // ВозвращаемоеЗначение: -// Структура - Настройки пользователя для запуска программы 1С-Бухфон. +// Структура - Настройки пользователя для запуска приложения. // Функция НастройкиУчетнойЗаписиПользователя() Экспорт diff --git a/SSL/src/CommonModules/Интеграция1СБухфонКлиент/Module.bsl b/SSL/src/CommonModules/Интеграция1СБухфонКлиент/Module.bsl index f107e9488..16c59d3bd 100644 --- a/SSL/src/CommonModules/Интеграция1СБухфонКлиент/Module.bsl +++ b/SSL/src/CommonModules/Интеграция1СБухфонКлиент/Module.bsl @@ -81,7 +81,7 @@ ДополнительныеПараметры.Вставить("ОповещениеОЗакрытии", ОповещениеОЗакрытии); ДополнительныеПараметры.Вставить("ПутьКФайлу", ПутьКФайлу); - ТекстПредложения = НСтр("ru = 'Для выбора приложения 1С-Бухфон необходимо установить расширение работы с файлами.'"); + ТекстПредложения = НСтр("ru = 'Для выбора приложения необходимо установить расширение работы с файлами.'"); Оповещение = Новый ОписаниеОповещения("ВыбратьФайл1СБухфонПослеУстановкиРасширения", ЭтотОбъект, ДополнительныеПараметры); ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстПредложения, Ложь); КонецПроцедуры @@ -95,11 +95,11 @@ КонецЕсли; Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); - Диалог.Заголовок = НСтр("ru = 'Выберите исполняемый файл 1С-Бухфон'"); + Диалог.Заголовок = НСтр("ru = 'Выберите исполняемый файл приложения'"); Диалог.ПолноеИмяФайла = ДополнительныеПараметры.ПутьКФайлу; Каталог = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ДополнительныеПараметры.ПутьКФайлу); Диалог.Каталог = Каталог.Путь; - Фильтр = НСтр("ru = 'buhphone.exe (*.exe)|*.exe'"); + Фильтр = НСтр("ru = 'Файл приложения (*.exe)|*.exe'"); Диалог.Фильтр = Фильтр; Диалог.МножественныйВыбор = Ложь; @@ -139,13 +139,13 @@ ВыполнитьОбработкуОповещения(ОповещениеОЗакрытии, Существует); КонецПроцедуры -// Процедура запускает исполняемый файл 1С-Бухфон. -// При отсутствии файла 1С-Бухфон - открывает форму поиска пути к исполняемому файлу. +// Процедура запускает исполняемый файл приложения. +// При отсутствии файла приложения - открывает форму поиска пути к исполняемому файлу. // Процедура Запустить1СБухфон() Экспорт Если НЕ ЭтоWindowsКлиент() Тогда - ПоказатьПредупреждение(,НСтр("ru = 'Для работы с приложением 1С-Бухфон необходима операционная система Microsoft Windows.'")); + ПоказатьПредупреждение(,НСтр("ru = 'Для работы с приложением необходима операционная система Microsoft Windows.'")); Возврат КонецЕсли; @@ -211,12 +211,12 @@ Иначе Если ПутьИзХранилищаВерен Тогда - НачатьЗапускПриложения(Оповещение, ДополнительныеПараметры.ПутьИзХранилища + ПараметрыЗапуска1СБухфон); + НачатьЗапускПриложения(Оповещение, """" + ДополнительныеПараметры.ПутьИзХранилища + """" + ПараметрыЗапуска1СБухфон); Возврат; КонецЕсли; Если ДополнительныеПараметры.ПутьИзРеестраВерен Тогда - НачатьЗапускПриложения(Оповещение, ДополнительныеПараметры.ПутьИзРеестра + ПараметрыЗапуска1СБухфон); + НачатьЗапускПриложения(Оповещение, """" + ДополнительныеПараметры.ПутьИзРеестра + """" + ПараметрыЗапуска1СБухфон); Возврат; КонецЕсли; diff --git a/SSL/src/CommonModules/ИнтеграцияСтандартныхПодсистем/Module.bsl b/SSL/src/CommonModules/ИнтеграцияСтандартныхПодсистем/Module.bsl index 4a055692d..c24c57b4e 100644 --- a/SSL/src/CommonModules/ИнтеграцияСтандартныхПодсистем/Module.bsl +++ b/SSL/src/CommonModules/ИнтеграцияСтандартныхПодсистем/Module.bsl @@ -291,6 +291,68 @@ КонецПроцедуры +// См. одноименную процедуру в общем модуле ПользователиПереопределяемый. +Процедура ПриОпределенииНазначенияРолей(НазначениеРолей) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); + МодульАдресныйКлассификаторСлужебный.ПриОпределенииНазначенияРолей(НазначениеРолей); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Анкетирование") Тогда + МодульАнкетирование = ОбщегоНазначения.ОбщийМодуль("Анкетирование"); + МодульАнкетирование.ПриОпределенииНазначенияРолей(НазначениеРолей); + КонецЕсли; + + СтандартныеПодсистемыСервер.ПриОпределенииНазначенияРолей(НазначениеРолей); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Банки") Тогда + МодульРаботаСБанками = ОбщегоНазначения.ОбщийМодуль("РаботаСБанками"); + МодульРаботаСБанками.ПриОпределенииНазначенияРолей(НазначениеРолей); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Валюты") Тогда + МодульРаботаСКурсамиВалют = ОбщегоНазначения.ОбщийМодуль("РаботаСКурсамиВалют"); + МодульРаботаСКурсамиВалют.ПриОпределенииНазначенияРолей(НазначениеРолей); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + МодульВариантыОтчетов.ПриОпределенииНазначенияРолей(НазначениеРолей); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрафикиРаботы") Тогда + МодульГрафикиРаботы = ОбщегоНазначения.ОбщийМодуль("ГрафикиРаботы"); + МодульГрафикиРаботы.ПриОпределенииНазначенияРолей(НазначениеРолей); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда + МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); + МодульДополнительныеОтчетыИОбработки.ПриОпределенииНазначенияРолей(НазначениеРолей); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КалендарныеГрафики") Тогда + МодульКалендарныеГрафики = ОбщегоНазначения.ОбщийМодуль("КалендарныеГрафики"); + МодульКалендарныеГрафики.ПриОпределенииНазначенияРолей(НазначениеРолей); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда + МодульОценкаПроизводительностиСлужебный = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиСлужебный"); + МодульОценкаПроизводительностиСлужебный.ПриОпределенииНазначенияРолей(НазначениеРолей); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ТекущиеДела") Тогда + МодульТекущиеДелаСлужебный = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСлужебный"); + МодульТекущиеДелаСлужебный.ПриОпределенииНазначенияРолей(НазначениеРолей); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.ПриОпределенииНазначенияРолей(НазначениеРолей); + КонецЕсли; + +КонецПроцедуры + // См. процедуру ИзменитьДействияВФорме в общем модуле ПользователиПереопределяемый. Процедура ПриОпределенииДействийВФорме(Ссылка, ДействияВФорме) Экспорт @@ -301,18 +363,6 @@ КонецПроцедуры -// Переопределяет действие при авторизации администратора локальной ИБ -// или администратора области данных. -// -Процедура ПриАвторизацииАдминистратораПриНачалеРаботыСистемы(Администратор) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда - МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); - МодульУправлениеДоступомСлужебный.ПриАвторизацииАдминистратораПриНачалеРаботыСистемы(Администратор); - КонецЕсли; - -КонецПроцедуры - // Переопределяет текст комментария при авторизации пользователя ИБ, // созданного в конфигураторе с административными правами. // Вызывается из Пользователи.АвторизоватьТекущегоПользователя(). @@ -365,17 +415,17 @@ КонецПроцедуры -// Доопределяет действия при записи пользователя, когда он записывается -// совместно с пользователем ИБ, у которого есть роль ПолныеПрава. +// Доопределяет действия при создании администратора в подсистеме Пользователи. // // Параметры: -// Пользователь - СправочникСсылка.Пользователи (изменение объекта запрещено). +// Администратор - СправочникСсылка.Пользователи (изменение объекта запрещено). +// Уточнение - Строка - поясняет при каких условиях был создан администратор. // -Процедура ПриЗаписиАдминистратора(Пользователь) Экспорт +Процедура ПриСозданииАдминистратора(Администратор, Уточнение) Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); - МодульУправлениеДоступомСлужебный.ПриЗаписиАдминистратора(Пользователь); + МодульУправлениеДоступомСлужебный.ПриСозданииАдминистратора(Администратор, Уточнение); КонецЕсли; КонецПроцедуры @@ -543,53 +593,70 @@ // Интеграция с подсистемой "Регламентные задания". // См. описание одноименной процедуры в общем модуле РегламентныеЗаданияПереопределяемый. -Процедура ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости) Экспорт +Процедура ПриОпределенииНастроекРегламентныхЗаданий(Настройки) Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Банки") Тогда МодульРаботаСБанками = ОбщегоНазначения.ОбщийМодуль("РаботаСБанками"); - МодульРаботаСБанками.ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости); + МодульРаботаСБанками.ПриОпределенииНастроекРегламентныхЗаданий(Настройки); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.БизнесПроцессыИЗадачи") Тогда МодульБизнесПроцессыИЗадачиСервер = ОбщегоНазначения.ОбщийМодуль("БизнесПроцессыИЗадачиСервер"); - МодульБизнесПроцессыИЗадачиСервер.ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости); + МодульБизнесПроцессыИЗадачиСервер.ПриОпределенииНастроекРегламентныхЗаданий(Настройки); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Валюты") Тогда МодульРаботаСКурсамиВалют = ОбщегоНазначения.ОбщийМодуль("РаботаСКурсамиВалют"); - МодульРаботаСКурсамиВалют.ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости); + МодульРаботаСКурсамиВалют.ПриОпределенииНастроекРегламентныхЗаданий(Настройки); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда МодульВерсионированиеОбъектовСобытия = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектовСобытия"); - МодульВерсионированиеОбъектовСобытия.ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости); + МодульВерсионированиеОбъектовСобытия.ПриОпределенииНастроекРегламентныхЗаданий(Настройки); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия"); - МодульВзаимодействия.ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости); + МодульВзаимодействия.ПриОпределенииНастроекРегламентныхЗаданий(Настройки); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); - МодульОбменДаннымиСервер.ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости); + МодульОбменДаннымиСервер.ПриОпределенииНастроекРегламентныхЗаданий(Настройки); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда + МодульОценкаПроизводительностиСлужебный = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиСлужебный"); + МодульОценкаПроизводительностиСлужебный.ПриОпределенииНастроекРегламентныхЗаданий(Настройки); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда МодульПолнотекстовыйПоискСервер = ОбщегоНазначения.ОбщийМодуль("ПолнотекстовыйПоискСервер"); - МодульПолнотекстовыйПоискСервер.ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости); + МодульПолнотекстовыйПоискСервер.ПриОпределенииНастроекРегламентныхЗаданий(Настройки); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") Тогда + МодульРассылкаОтчетов = ОбщегоНазначения.ОбщийМодуль("РассылкаОтчетов"); + МодульРассылкаОтчетов.ПриОпределенииНастроекРегламентныхЗаданий(Настройки); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); - МодульУправлениеДоступомСлужебный.ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости); + МодульУправлениеДоступомСлужебный.ПриОпределенииНастроекРегламентныхЗаданий(Настройки); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ФайловыеФункции") Тогда МодульФайловыеФункцииСлужебный = ОбщегоНазначения.ОбщийМодуль("ФайловыеФункцииСлужебный"); - МодульФайловыеФункцииСлужебный.ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости); + МодульФайловыеФункцииСлужебный.ПриОпределенииНастроекРегламентныхЗаданий(Настройки); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда + МодульЦентрМониторингаСлужебный = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторингаСлужебный"); + МодульЦентрМониторингаСлужебный.ПриОпределенииНастроекРегламентныхЗаданий(Настройки); + КонецЕсли; + + + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -622,10 +689,10 @@ // // ЗначениеПараметра - Неопределено, когда СодержаниеПараметра = Неопределено, // - Например, СправочникСсылка.ГруппыИсполнителейЗадач, -// когда СодеражаниеПараметра = "ГруппыИсполнителей". +// когда СодержаниеПараметра = "ГруппыИсполнителей". // - СправочникСсылка.Пользователи, // СправочникСсылка.ВнешниеПользователи, -// когда СодеражаниеПараметра = "Исполнители". +// когда СодержаниеПараметра = "Исполнители". // Массив указанных выше типов. // // НетГруппИсполнителей - Булево, если Ложь, МенеджерВременныхТаблиц содержит временную таблицу, иначе нет. diff --git a/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервиса/Module.bsl index f15f40ad5..c3a85b745 100644 --- a/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ИнтерфейсыСообщенийВМоделиСервиса/Module.bsl @@ -182,7 +182,7 @@ // Возвращаемое значение: // ФиксированноеСоответствие: // Ключ - строка, название программного интерфейса, -// Значение - ОбщийМодуль +// Значение - ОбщийМодуль. // Функция ПолучитьИнтерфейсыОтправляемыхСообщений() Экспорт diff --git a/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl b/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl index 7676a495f..243f39bc4 100644 --- a/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl +++ b/SSL/src/CommonModules/ИнформацияПриЗапуске/Module.bsl @@ -41,7 +41,7 @@ // Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт Обработчик = Обработчики.Добавить(); - Обработчик.ВыполнятьВГруппеОбязательных = Ложь; + Обработчик.ВыполнятьВГруппеОбязательных = Истина; Обработчик.ОбщиеДанные = Истина; Обработчик.УправлениеОбработчиками = Ложь; Обработчик.РежимВыполнения = "Оперативно"; @@ -95,6 +95,73 @@ Параметры.Вставить("ИнформацияПриЗапуске", Новый ФиксированнаяСтруктура(ГлобальныеНастройки())); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Прочие процедуры служебного программного интерфейса. + +// Актуализирует данные подсистемы с учетом режима работы программы. +// Пример использования: после очистки хранилищ настроек. +// +// Параметры: +// Настройки - Структура - Необязательный. Настройки обновления. +// * ОбщиеДанные - Булево - Необязательный. Обновлять неразделенные данные. +// * РазделенныеДанные - Булево - Необязательный. Обновлять разделенные данные. +// * Оперативное - Булево - Необязательный. Оперативное обновление данных. +// * Отложенное - Булево - Необязательный. Отложенное обновление данных. +// * Полное - Булево - Необязательный. Не учитывать хеш-суммы при отложенном обновление данных. +// +Функция Обновить(Настройки = Неопределено) Экспорт + + Если Настройки = Неопределено Тогда + Настройки = Новый Структура; + КонецЕсли; + + ПоУмолчанию = Новый Структура("ОбщиеДанные, РазделенныеДанные, Оперативное, Отложенное, Полное"); + Если Настройки.Количество() < ПоУмолчанию.Количество() Тогда + РежимРаботы = ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы(); + Если РежимРаботы.МодельСервиса Тогда + Если ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда // Разделенный сеанс. + ПоУмолчанию.ОбщиеДанные = Ложь; + ПоУмолчанию.РазделенныеДанные = Истина; + Иначе // Неразделенный сеанс. + ПоУмолчанию.ОбщиеДанные = Истина; + ПоУмолчанию.РазделенныеДанные = Ложь; + КонецЕсли; + Иначе + Если РежимРаботы.Автономный Тогда // АРМ. + ПоУмолчанию.ОбщиеДанные = Ложь; + ПоУмолчанию.РазделенныеДанные = Истина; + Иначе // Коробка. + ПоУмолчанию.ОбщиеДанные = Истина; + ПоУмолчанию.РазделенныеДанные = Истина; + КонецЕсли; + КонецЕсли; + ПоУмолчанию.Оперативное = Истина; + ПоУмолчанию.Отложенное = Ложь; + ПоУмолчанию.Полное = Ложь; + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Настройки, ПоУмолчанию, Ложь); + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("ЕстьИзменения", Ложь); + + Если Настройки.Оперативное И Настройки.ОбщиеДанные Тогда + + Запрос = Новый Запрос("ВЫБРАТЬ * ИЗ РегистрСведений.ПакетыИнформацииПриЗапуске УПОРЯДОЧИТЬ ПО Номер"); + ТаблицаДоОбновления = Запрос.Выполнить().Выгрузить(); + + ОперативноеОбновлениеОбщихДанных(); + + ТаблицаПослеОбновления = Запрос.Выполнить().Выгрузить(); + + Если Не ОбщегоНазначения.ДанныеСовпадают(ТаблицаДоОбновления, ТаблицаПослеОбновления) Тогда + Результат.ЕстьИзменения = Истина; + КонецЕсли; + + КонецЕсли; + + Возврат Результат; +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -113,35 +180,25 @@ // Служебные процедуры и функции. // [*] Актуализирует данные первого показа. -Процедура ОбновитьКэшПервогоПоказа(НосительМакетов) Экспорт +Процедура ОбновитьКэшПервогоПоказа(НосительМакетов) - Кэш = КэшДляПервогоПоказа(НосительМакетов); // Полная информация о пакетах, включая данные страниц. - Приоритетные = Кэш.Приоритетные; - Кэш.Удалить("Приоритетные"); + // Формирование общей информации о пакетах страниц. + ПакетыСтраниц = ПакетыСтраниц(НосительМакетов); + // Извлечение данных пакетов и запись их в регистр. НаборЗаписей = РегистрыСведений.ПакетыИнформацииПриЗапуске.СоздатьНаборЗаписей(); - - // Данные из кэша "перебрасываются" в регистр, а в кэше остаются только указатели. - НомерПакета = 0; - ПодготовленныеПакеты = Новый Соответствие; - Для Каждого ИмяМакета Из Приоритетные Цикл - СоставПакета = ИзвлечьФайлыПакета(НосительМакетов, ИмяМакета); - НомерПакета = НомерПакета + 1; + Для Каждого Пакет Из ПакетыСтраниц Цикл + СоставПакета = ИзвлечьФайлыПакета(НосительМакетов, Пакет.ИмяМакета); - // Запись данных пакета в регистр. Запись = НаборЗаписей.Добавить(); - Запись.Номер = НомерПакета; + Запись.Номер = Пакет.НомерВРегистре; Запись.Состав = Новый ХранилищеЗначения(СоставПакета); - - // Замена данных пакета на его номер (его "адрес" в регистре). - ПодготовленныеПакеты.Вставить(ИмяМакета, НомерПакета); КонецЦикла; - Кэш.Вставить("ПодготовленныеПакеты", ПодготовленныеПакеты); - // Теперь в кэше осталась только "легкая" структурированная информация; Она записывается в регистр под номером 0. + // Метаинформация записывается в регистр под номером 0. Запись = НаборЗаписей.Добавить(); Запись.Номер = 0; - Запись.Состав = Новый ХранилищеЗначения(Кэш); + Запись.Состав = Новый ХранилищеЗначения(ПакетыСтраниц); ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей, Ложь, Ложь); @@ -186,6 +243,20 @@ КонецЕсли; КонецЕсли; + Если Настройки.Показывать Тогда + ЗаписьРегистра = РегистрыСведений.ПакетыИнформацииПриЗапуске.Получить(Новый Структура("Номер", 0)); + ПакетыСтраниц = ЗаписьРегистра.Состав.Получить(); + Если ПакетыСтраниц = Неопределено Тогда + Настройки.Показывать = Ложь; + Иначе + Информация = ПодготовитьПакетыСтраницКВыводу(ПакетыСтраниц, НачалоДня(ТекущаяДатаСеанса())); + Если Информация.ПодготовленныеПакеты.Количество() = 0 + Или Информация.МинимальныйПриоритет = 100 Тогда + Настройки.Показывать = Ложь; + КонецЕсли; + КонецЕсли; + КонецЕсли; + // Переопределение. ИнформацияПриЗапускеПереопределяемый.ОпределитьНастройки(Настройки); @@ -193,29 +264,25 @@ КонецФункции // Глобальные настройки подсистемы. -Функция КэшДляПервогоПоказа(НосительМакетов) Экспорт - Кэш = Новый Структура; +Функция ПакетыСтраниц(НосительМакетов) Экспорт + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("НомерВРегистре", Новый ОписаниеТипов("Число")); + Результат.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ИмяМакета", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("Раздел", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("НаименованиеСтартовойСтраницы", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ИмяФайлаСтартовойСтраницы", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ДатаНачалаПоказа", Новый ОписаниеТипов("Дата")); + Результат.Колонки.Добавить("ДатаОкончанияПоказа", Новый ОписаниеТипов("Дата")); + Результат.Колонки.Добавить("Приоритет", Новый ОписаниеТипов("Число")); + Результат.Колонки.Добавить("ПоказыватьВПроф", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("ПоказыватьВБазовой", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("ПоказыватьВМоделиСервиса", Новый ОписаниеТипов("Булево")); - // Чтение макета "Описатель" (наполнение таблицы "ПакетыСтраниц"). + НомерВРегистре = 0; + + // Чтение макета "Описатель". ТабличныйДокумент = НосительМакетов.ПолучитьМакет("Описатель"); - - ПакетыСтраниц = Новый ТаблицаЗначений; - ПакетыСтраниц.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); - ПакетыСтраниц.Колонки.Добавить("ИмяМакета", Новый ОписаниеТипов("Строка")); - ПакетыСтраниц.Колонки.Добавить("Раздел", Новый ОписаниеТипов("Строка")); - ПакетыСтраниц.Колонки.Добавить("НаименованиеСтартовойСтраницы", Новый ОписаниеТипов("Строка")); - ПакетыСтраниц.Колонки.Добавить("ИмяФайлаСтартовойСтраницы", Новый ОписаниеТипов("Строка")); - ПакетыСтраниц.Колонки.Добавить("ДатаНачалаПоказа", Новый ОписаниеТипов("Дата")); - ПакетыСтраниц.Колонки.Добавить("ДатаОкончанияПоказа", Новый ОписаниеТипов("Дата")); - ПакетыСтраниц.Колонки.Добавить("Приоритет", Новый ОписаниеТипов("Число")); - - МинимальныйПриоритет = 100; - Приоритетные = Новый Массив; - - КонфигурацияБазовая = СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации(); - КонфигурацияМоделиСервиса = ОбщегоНазначенияПовтИсп.РазделениеВключено() - Или ПолучитьФункциональнуюОпцию("РаботаВАвтономномРежиме"); - Для НомерСтроки = 3 По ТабличныйДокумент.ВысотаТаблицы Цикл ПрефиксСтроки = "R"+ НомерСтроки +"C"; @@ -225,58 +292,40 @@ Прервать; КонецЕсли; - // Пропуск если данные не подходят к конфигурации. - Если КонфигурацияМоделиСервиса Тогда - ПоказыватьВМоделиСервиса = ДанныеЯчейки(ТабличныйДокумент, ПрефиксСтроки, 10, "Булево", Истина); - Если Не ПоказыватьВМоделиСервиса Тогда - Продолжить; - КонецЕсли; - Иначе - Если КонфигурацияБазовая Тогда - ПоказыватьВБазовой = ДанныеЯчейки(ТабличныйДокумент, ПрефиксСтроки, 9, "Булево", Истина); - Если Не ПоказыватьВБазовой Тогда - Продолжить; - КонецЕсли; - Иначе - ПоказыватьВПроф = ДанныеЯчейки(ТабличныйДокумент, ПрефиксСтроки, 8, "Булево", Истина); - Если Не ПоказыватьВПроф Тогда - Продолжить; - КонецЕсли; - КонецЕсли; + НаименованиеСтартовойСтраницы = ДанныеЯчейки(ТабличныйДокумент, ПрефиксСтроки, 3); + Если Не ЗначениеЗаполнено(НаименованиеСтартовойСтраницы) Тогда + Продолжить; КонецЕсли; + НомерВРегистре = НомерВРегистре + 1; + // Регистрация информации о команде. - ПакетСтраниц = ПакетыСтраниц.Добавить(); - ПакетСтраниц.ИмяМакета = ИмяМакета; - ПакетСтраниц.Идентификатор = Строка(НомерСтроки - 2); - ПакетСтраниц.Раздел = ДанныеЯчейки(ТабличныйДокумент, ПрефиксСтроки, 2); - ПакетСтраниц.НаименованиеСтартовойСтраницы = ДанныеЯчейки(ТабличныйДокумент, ПрефиксСтроки, 3); - ПакетСтраниц.ИмяФайлаСтартовойСтраницы = ДанныеЯчейки(ТабличныйДокумент, ПрефиксСтроки, 4); - ПакетСтраниц.ДатаНачалаПоказа = ДанныеЯчейки(ТабличныйДокумент, ПрефиксСтроки, 5, "Дата", '00010101'); - ПакетСтраниц.ДатаОкончанияПоказа = ДанныеЯчейки(ТабличныйДокумент, ПрефиксСтроки, 6, "Дата", '29990101'); + СтрокаТаблицы = Результат.Добавить(); + СтрокаТаблицы.НомерВРегистре = НомерВРегистре; + СтрокаТаблицы.ИмяМакета = ИмяМакета; + СтрокаТаблицы.Идентификатор = Строка(НомерСтроки - 2); + СтрокаТаблицы.Раздел = ДанныеЯчейки(ТабличныйДокумент, ПрефиксСтроки, 2); + СтрокаТаблицы.НаименованиеСтартовойСтраницы = НаименованиеСтартовойСтраницы; + СтрокаТаблицы.ИмяФайлаСтартовойСтраницы = ДанныеЯчейки(ТабличныйДокумент, ПрефиксСтроки, 4); + СтрокаТаблицы.ДатаНачалаПоказа = ДанныеЯчейки(ТабличныйДокумент, ПрефиксСтроки, 5, "Дата", '00010101'); + СтрокаТаблицы.ДатаОкончанияПоказа = ДанныеЯчейки(ТабличныйДокумент, ПрефиксСтроки, 6, "Дата", '29990101'); - Если НРег(ПакетСтраниц.Раздел) = НРег(НСтр("ru = 'Реклама'")) Тогда - ПакетСтраниц.Приоритет = 0; + Если НРег(СтрокаТаблицы.Раздел) = НРег(НСтр("ru = 'Реклама'")) Тогда + СтрокаТаблицы.Приоритет = 0; Иначе - ПакетСтраниц.Приоритет = ДанныеЯчейки(ТабличныйДокумент, ПрефиксСтроки, 7, "Число", 0); - Если ПакетСтраниц.Приоритет = 0 Тогда - ПакетСтраниц.Приоритет = 99; + СтрокаТаблицы.Приоритет = ДанныеЯчейки(ТабличныйДокумент, ПрефиксСтроки, 7, "Число", 0); + Если СтрокаТаблицы.Приоритет = 0 Тогда + СтрокаТаблицы.Приоритет = 99; КонецЕсли; КонецЕсли; - Если МинимальныйПриоритет > ПакетСтраниц.Приоритет Тогда - МинимальныйПриоритет = ПакетСтраниц.Приоритет; - Приоритетные = Новый Массив; - Приоритетные.Добавить(ПакетСтраниц.ИмяМакета); - ИначеЕсли МинимальныйПриоритет = ПакетСтраниц.Приоритет - И Приоритетные.Найти(ПакетСтраниц.ИмяМакета) = Неопределено Тогда - Приоритетные.Добавить(ПакетСтраниц.ИмяМакета); - КонецЕсли; + СтрокаТаблицы.ПоказыватьВПроф = ДанныеЯчейки(ТабличныйДокумент, ПрефиксСтроки, 8, "Булево", Истина); + СтрокаТаблицы.ПоказыватьВБазовой = ДанныеЯчейки(ТабличныйДокумент, ПрефиксСтроки, 9, "Булево", Истина); + СтрокаТаблицы.ПоказыватьВМоделиСервиса = ДанныеЯчейки(ТабличныйДокумент, ПрефиксСтроки, 10, "Булево", Истина); + КонецЦикла; - Кэш.Вставить("ПакетыСтраниц", ПакетыСтраниц); - Кэш.Вставить("Приоритетные", Приоритетные); - Возврат Кэш; + Возврат Результат; КонецФункции // Считывает из табличного документа содержимое ячейки и приводит к указанному типу. @@ -295,6 +344,42 @@ КонецЕсли; КонецФункции +// Глобальные настройки подсистемы. +Функция ПодготовитьПакетыСтраницКВыводу(ПакетыСтраниц, ТекущаяДата) Экспорт + Результат = Новый Структура; + Результат.Вставить("МинимальныйПриоритет", 100); + Результат.Вставить("ПодготовленныеПакеты", Неопределено); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + Или ПолучитьФункциональнуюОпцию("РаботаВАвтономномРежиме") Тогда + КолонкаПоказывать = ПакетыСтраниц.Колонки.ПоказыватьВМоделиСервиса; + Иначе + Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда + КолонкаПоказывать = ПакетыСтраниц.Колонки.ПоказыватьВБазовой; + Иначе + КолонкаПоказывать = ПакетыСтраниц.Колонки.ПоказыватьВПроф; + КонецЕсли; + КонецЕсли; + + КолонкаПоказывать.Имя = "Показывать"; + Фильтр = Новый Структура("Показывать", Истина); + Найденные = ПакетыСтраниц.НайтиСтроки(Фильтр); + Для Каждого Пакет Из Найденные Цикл + Если Пакет.ДатаНачалаПоказа > ТекущаяДата Или Пакет.ДатаОкончанияПоказа < ТекущаяДата Тогда + Пакет.Показывать = Ложь; + Продолжить; + КонецЕсли; + + Если Результат.МинимальныйПриоритет > Пакет.Приоритет Тогда + Результат.МинимальныйПриоритет = Пакет.Приоритет; + КонецЕсли; + КонецЦикла; + + ИменаКолонок = "НомерВРегистре, Идентификатор, ИмяМакета, Раздел, НаименованиеСтартовойСтраницы, ИмяФайлаСтартовойСтраницы, Приоритет"; + Результат.ПодготовленныеПакеты = ПакетыСтраниц.Скопировать(Фильтр, ИменаКолонок); + Возврат Результат; +КонецФункции + // Извлекает пакет файлов из макета обработки ИнформацияПриЗапуске. Функция ИзвлечьФайлыПакета(НосительМакетов, ИмяМакета) Экспорт КаталогВременныхФайлов = СтандартныеПодсистемыСервер.СоздатьКаталогВременныхФайлов("extras"); diff --git a/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl index fa2481a29..bb0dd4a3e 100644 --- a/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl @@ -23,6 +23,13 @@ // Функция ПолучитьМассивДатПоКалендарю(Знач ГрафикРаботы, Знач ДатаОт, Знач МассивДней, Знач РассчитыватьСледующуюДатуОтПредыдущей = Ложь, ВызыватьИсключение = Истина) Экспорт + Если Не ЗначениеЗаполнено(ГрафикРаботы) Тогда + Если ВызыватьИсключение Тогда + ВызватьИсключение НСтр("ru = 'Не указан график работы или производственный календарь.'"); + КонецЕсли; + Возврат Неопределено; + КонецЕсли; + Если ТипЗнч(ГрафикРаботы) <> Тип("СправочникСсылка.ПроизводственныеКалендари") Тогда Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ГрафикиРаботы") Тогда МодульГрафикиРаботы = ОбщегоНазначения.ОбщийМодуль("ГрафикиРаботы"); @@ -123,6 +130,13 @@ // Функция ПолучитьДатуПоКалендарю(Знач ГрафикРаботы, Знач ДатаОт, Знач КоличествоДней, ВызыватьИсключение = Истина) Экспорт + Если Не ЗначениеЗаполнено(ГрафикРаботы) Тогда + Если ВызыватьИсключение Тогда + ВызватьИсключение НСтр("ru = 'Не указан график работы или производственный календарь.'"); + КонецЕсли; + Возврат Неопределено; + КонецЕсли; + ДатаОт = НачалоДня(ДатаОт); Если КоличествоДней = 0 Тогда @@ -153,6 +167,13 @@ // Функция ПолучитьРазностьДатПоКалендарю(Знач ГрафикРаботы, Знач ДатаНачала, Знач ДатаОкончания, ВызыватьИсключение = Истина) Экспорт + Если Не ЗначениеЗаполнено(ГрафикРаботы) Тогда + Если ВызыватьИсключение Тогда + ВызватьИсключение НСтр("ru = 'Не указан график работы или производственный календарь.'"); + КонецЕсли; + Возврат Неопределено; + КонецЕсли; + ДатаНачала = НачалоДня(ДатаНачала); ДатаОкончания = НачалоДня(ДатаОкончания); @@ -325,6 +346,13 @@ // Функция ПолучитьДатыРабочихДней(График, НачальныеДаты, ПолучатьПредшествующие = Ложь, ВызыватьИсключение = Истина, ИгнорироватьНезаполненностьГрафика = Ложь) Экспорт + Если Не ЗначениеЗаполнено(График) Тогда + Если ВызыватьИсключение Тогда + ВызватьИсключение НСтр("ru = 'Не указан график работы или производственный календарь.'"); + КонецЕсли; + Возврат Неопределено; + КонецЕсли; + ТекстЗапросаВТ = ""; ПерваяЧасть = Истина; Для Каждого НачальнаяДата Из НачальныеДаты Цикл @@ -536,47 +564,6 @@ ].Добавить("КалендарныеГрафики"); КонецЕсли; - СерверныеОбработчики[ - "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбязательныхОбъектовПланаОбмена" - ].Добавить("КалендарныеГрафики"); - -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -// Заполняет массив типов неразделенных данных, для которых поддерживается сопоставление ссылок -// при загрузке данных в другую информационную базу. -// -// Параметры: -// Типы - Массив(ОбъектМетаданных) -// -Процедура ПриЗаполненииТиповОбщихДанныхПоддерживающихСопоставлениеСсылокПриЗагрузке(Типы) Экспорт - - Типы.Добавить(Метаданные.Справочники.ПроизводственныеКалендари); - -КонецПроцедуры - -// Используется для получения объектов метаданных обязательных для плана обмена. -// Если подсистема имеет объекты метаданных обязательные для включения в состав плана обмена, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты - Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. -// Истина - требуется получить список объектов плана обмена РИБ; -// Ложь - требуется получить список для плана обмена НЕ РИБ. -// -Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт - - Если РаспределеннаяИнформационнаяБаза Тогда - - Объекты.Добавить(Метаданные.Справочники.ПроизводственныеКалендари); - Объекты.Добавить(Метаданные.РегистрыСведений.ДанныеПроизводственногоКалендаря); - - КонецЕсли; - КонецПроцедуры // Создает временную таблицу ВТПриращениеДней, в которой для каждого элемента из МассивДней @@ -626,6 +613,45 @@ КонецПроцедуры +// Обновляет справочник Производственные календари из одноименного макета. +// +Процедура ОбновитьПроизводственныеКалендари() Экспорт + + ТекстовыйДокумент = Справочники.ПроизводственныеКалендари.ПолучитьМакет("ОписаниеКалендарей"); + ТаблицаКалендарей = ОбщегоНазначения.ПрочитатьXMLВТаблицу(ТекстовыйДокумент.ПолучитьТекст()).Данные; + + Справочники.ПроизводственныеКалендари.ОбновитьПроизводственныеКалендари(ТаблицаКалендарей); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов в эту подсистему. + +// См. одноименную процедуру в общем модуле ПользователиПереопределяемый. +Процедура ПриОпределенииНазначенияРолей(НазначениеРолей) Экспорт + + // ТолькоДляПользователейСистемы. + НазначениеРолей.ТолькоДляПользователейСистемы.Добавить( + Метаданные.Роли.ДобавлениеИзменениеКалендарныхГрафиков.Имя); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Заполняет массив типов неразделенных данных, для которых поддерживается сопоставление ссылок +// при загрузке данных в другую информационную базу. +// +// Параметры: +// Типы - Массив(ОбъектМетаданных). +// +Процедура ПриЗаполненииТиповОбщихДанныхПоддерживающихСопоставлениеСсылокПриЗагрузке(Типы) Экспорт + + Типы.Добавить(Метаданные.Справочники.ПроизводственныеКалендари); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы. @@ -666,26 +692,15 @@ Обработчик.ОбщиеДанные = Истина; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.3.1.83"; + Обработчик.Версия = "2.3.2.75"; Обработчик.Процедура = "КалендарныеГрафики.ОбновитьДанныеПроизводственныхКалендарей"; - Обработчик.РежимВыполнения = "Монопольно"; + Обработчик.РежимВыполнения = "Оперативно"; Обработчик.ОбщиеДанные = Истина; КонецПроцедуры -// Обновляет справочник Производственные календари из одноименного макета. -// -Процедура ОбновитьПроизводственныеКалендари() Экспорт - - ТекстовыйДокумент = Справочники.ПроизводственныеКалендари.ПолучитьМакет("ОписаниеКалендарей"); - ТаблицаКалендарей = ОбщегоНазначения.ПрочитатьXMLВТаблицу(ТекстовыйДокумент.ПолучитьТекст()).Данные; - - Справочники.ПроизводственныеКалендари.ОбновитьПроизводственныеКалендари(ТаблицаКалендарей); - -КонецПроцедуры - // Обновляет данные производственных календарей из макета. -// ДанныеПроизводственныхКалендарей +// ДанныеПроизводственныхКалендарей. // Процедура ОбновитьДанныеПроизводственныхКалендарей() Экспорт diff --git a/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl index 42c9f2123..0f0c83120 100644 --- a/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафикиСлужебныйВМоделиСервиса/Module.bsl @@ -3,7 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -#Область СлужебныйПрограммныйИнтерфейс +#Область ПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -215,9 +215,22 @@ УстановитьПривилегированныйРежим(Ложь); НачатьТранзакцию(); - МодульГрафикиРаботы.ОбновитьГрафикиРаботыПоДаннымПроизводственныхКалендарей(УсловияОбновления); - ПоставляемыеДанные.ОбластьОбработана(ИдентификаторФайла, КодОбработчика, ОбластьДанных); - ЗафиксироватьТранзакцию(); + + Попытка + + МодульГрафикиРаботы.ОбновитьГрафикиРаботыПоДаннымПроизводственныхКалендарей(УсловияОбновления); + ПоставляемыеДанные.ОбластьОбработана(ИдентификаторФайла, КодОбработчика, ОбластьДанных); + + ЗафиксироватьТранзакцию(); + + Исключение + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Календарные графики'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ОтменитьТранзакцию(); + + КонецПопытки; КонецЦикла; @@ -230,7 +243,7 @@ Если ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента Или ЧтениеXML.Имя <> Имя Тогда ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Календарные графики'", - Метаданные.ОсновнойЯзык.КодЯзыка), УровеньЖурналаРегистрации.Ошибка, + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, ,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неверный формат файла данных. Ожидается начало элемента %1'"), Имя)); Возврат Ложь; КонецЕсли; @@ -243,7 +256,7 @@ Если ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента Или ЧтениеXML.Имя <> Имя Тогда ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Календарные графики'", - Метаданные.ОсновнойЯзык.КодЯзыка), УровеньЖурналаРегистрации.Ошибка, + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, ,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неверный формат файла данных. Ожидается конец элемента %1'"), Имя)); Возврат Ложь; КонецЕсли; diff --git a/SSL/src/CommonModules/КурсыВалютСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/КурсыВалютСлужебныйВМоделиСервиса/Module.bsl index 2920cae8c..97c0d9fae 100644 --- a/SSL/src/CommonModules/КурсыВалютСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/КурсыВалютСлужебныйВМоделиСервиса/Module.bsl @@ -3,7 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -#Область СлужебныйПрограммныйИнтерфейс +#Область ПрограммныйИнтерфейс // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт @@ -463,6 +463,8 @@ Знач ОбластиДляОбновления, Знач ИдентификаторФайла, Знач КодОбработчика) Для каждого ОбластьДанных Из ОбластиДляОбновления Цикл + + НачатьТранзакцию(); Попытка @@ -479,7 +481,7 @@ | Валюты.СпособУстановкиКурса = ЗНАЧЕНИЕ(Перечисление.СпособыУстановкиКурсаВалюты.ЗагрузкаИзИнтернета)"; ВыборкаВалюты = ЗапросВалюты.Выполнить().Выбрать(); - НачатьТранзакцию(); + Пока ВыборкаВалюты.Следующий() Цикл Курсы = ТаблицаКурсов.НайтиСтроки(Новый Структура("Код", ВыборкаВалюты.Код)); @@ -503,15 +505,34 @@ Запись.Кратность = СтрокаКурсов.Кратность; Запись.Курс = СтрокаКурсов.Курс; КонецЦикла; - НаборЗаписей.Записать(); + // Проверяем дату запрета изменений. + + Записывать = Истина; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда + МодульДатыЗапретаИзмененияСлужебный = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзмененияСлужебный"); + Если МодульДатыЗапретаИзмененияСлужебный.ЗапретИзмененияПроверяется(Метаданные.РегистрыСведений.КурсыВалют) Тогда + МодульДатыЗапретаИзменения = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзменения"); + Записывать = Не МодульДатыЗапретаИзменения.ИзменениеЗапрещено(НаборЗаписей); + КонецЕсли; + КонецЕсли; + + Если Записывать Тогда + НаборЗаписей.Записать(); + Иначе + Комментарий = НСтр("ru = 'Загрузка курса валюты %1 на дату %2 отменена из-за нарушения даты запрета изменений.'"); + Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Комментарий, ВыборкаВалюты.Код, ДатаКурсов); + ИмяСобытия = НСтр("ru = 'Поставляемые данные.Отмена загрузки курсов валюты'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Информация,, ВыборкаВалюты.Ссылка, Комментарий); + КонецЕсли; + КонецЦикла; ПоставляемыеДанные.ОбластьОбработана(ИдентификаторФайла, КодОбработчика, ОбластьДанных); ЗафиксироватьТранзакцию(); Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Распространение курсов валют по областям данных'", Метаданные.ОсновнойЯзык.КодЯзыка), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Распространение курсов валют по областям данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); diff --git a/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl index 7134605f2..50487e010 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяСлужебный/Module.bsl @@ -98,7 +98,7 @@ КонецФункции // Возвращает структуру настроек напоминаний пользователя. -Функция ПолучитьНастройкиНапоминаний() Экспорт +Функция ПолучитьНастройкиНапоминаний() Результат = Новый Структура; Результат.Вставить("ИспользоватьНапоминания", ЕстьПравоИспользованияНапоминаний() И ПолучитьФункциональнуюОпцию("ИспользоватьНапоминанияПользователя")); @@ -343,7 +343,7 @@ КонецФункции // Возвращает интервал времени в минутах, через который необходимо повторять проверку текущих напоминаний. -Функция ПолучитьИнтервалПроверкиНапоминаний(Пользователь = Неопределено) Экспорт +Функция ПолучитьИнтервалПроверкиНапоминаний(Пользователь = Неопределено) Интервал = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( "НастройкиНапоминаний", "ИнтервалПроверкиНапоминаний", @@ -423,7 +423,7 @@ // Проверяет изменения реквизитов предметов, на которые есть пользовательская подписка, // изменяет срок напоминания в случае необходимости. -Процедура ПроверитьИзмененияДатВПредмете(Предмет) Экспорт +Процедура ПроверитьИзмененияДатВПредмете(Предмет) УстановитьПривилегированныйРежим(Истина); diff --git a/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl b/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl index 5a291bfd2..b1db4a324 100644 --- a/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl +++ b/SSL/src/CommonModules/НастройкаПорядкаЭлементовСлужебный/Module.bsl @@ -3,6 +3,105 @@ // //////////////////////////////////////////////////////////////////////////////// +#Область СлужебныйПрограммныйИнтерфейс + + +// Для внутреннего использования +// +Функция СоседнийЭлемент(ПеремещаемыйЭлемент, Список, Знач Направление) Экспорт + + // Подготовка текста запроса к основной таблице списка. + + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 + | * + |ИЗ + | &Таблица КАК Таблица + |ГДЕ + | Таблица.РеквизитДопУпорядочивания > &РеквизитДопУпорядочивания + |УПОРЯДОЧИТЬ ПО + | Таблица.РеквизитДопУпорядочивания"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Таблица", Список.ОсновнаяТаблица); + + Если Направление = "Вверх" Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ">", "<"); + ТекстЗапроса = ТекстЗапроса + " УБЫВ"; + КонецЕсли; + + Информация = НастройкаПорядкаЭлементов.ПолучитьИнформациюДляПеремещения(ПеремещаемыйЭлемент.Метаданные()); + + ПостроительЗапроса = Новый ПостроительЗапроса(ТекстЗапроса); + ПостроительЗапроса.ЗаполнитьНастройки(); + Если Информация.ЕстьРодитель Тогда + ДобавитьПростойОтборВПостроительЗапроса(ПостроительЗапроса, "Родитель", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПеремещаемыйЭлемент, "Родитель")); + КонецЕсли; + + Если Информация.ЕстьВладелец Тогда + ДобавитьПростойОтборВПостроительЗапроса(ПостроительЗапроса, "Владелец", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПеремещаемыйЭлемент, "Владелец")); + КонецЕсли; + + Если Информация.ЕстьГруппы Тогда + Если Информация.ДляГрупп И Не Информация.ДляЭлементов Тогда + ДобавитьПростойОтборВПостроительЗапроса(ПостроительЗапроса, "ЭтоГруппа", Истина); + ИначеЕсли Не Информация.ДляГрупп И Информация.ДляЭлементов Тогда + ДобавитьПростойОтборВПостроительЗапроса(ПостроительЗапроса, "ЭтоГруппа", Ложь); + КонецЕсли; + КонецЕсли; + + ПостроительЗапроса.Параметры.Вставить("РеквизитДопУпорядочивания", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПеремещаемыйЭлемент, "РеквизитДопУпорядочивания")); + + Запрос = ПостроительЗапроса.ПолучитьЗапрос(); + + // Подготовка схемы компоновки данных, аналогичной списку. + + СхемаКомпоновкиДанных = СхемаКомпоновкиДанных(Запрос.Текст); + + КомпоновщикНастроекКомпоновкиДанных = Новый КомпоновщикНастроекКомпоновкиДанных; + АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных); + КомпоновщикНастроекКомпоновкиДанных.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы)); + КомпоновщикНастроекКомпоновкиДанных.ЗагрузитьНастройки(Список.КомпоновщикНастроек.ПолучитьНастройки()); + КомпоновщикНастроекКомпоновкиДанных.Настройки.УсловноеОформление.Элементы.Очистить(); + + УстановитьНастройкуСтруктурыВыводаРезультата(КомпоновщикНастроекКомпоновкиДанных.Настройки); + + Для Каждого Параметр Из Запрос.Параметры Цикл + КомпоновщикНастроекКомпоновкиДанных.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра( + Параметр.Ключ, Параметр.Значение); + КонецЦикла; + + // Проверка доступности полей в отборе + Если Не ПоляОтбораВСпискеДоступных(КомпоновщикНастроекКомпоновкиДанных.ПолучитьНастройки().Отбор.Элементы, КомпоновщикНастроекКомпоновкиДанных.ПолучитьНастройки().Отбор.ДоступныеПоляОтбора.Элементы) Тогда + ВызватьИсключение НСтр("ru = 'Для перемещения элемента необходимо отключить все отборы в списке.'"); + КонецЕсли; + + // Вывод результата запроса + + РезультатКомпоновки = Новый ТаблицаЗначений; + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; + + МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, + КомпоновщикНастроекКомпоновкиДанных.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); + + ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; + ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных); + + ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; + ПроцессорВывода.УстановитьОбъект(РезультатКомпоновки); + ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); + + СоседнийЭлемент = Неопределено; + Если РезультатКомпоновки.Количество() > 0 Тогда + СоседнийЭлемент = РезультатКомпоновки[0].Ссылка; + КонецЕсли; + + Возврат СоседнийЭлемент; + +КонецФункции + +#КонецОбласти + + #Область СлужебныеПроцедурыИФункции // Выполняет перемещение элемента вверх или вниз по списку. @@ -196,97 +295,6 @@ КонецФункции -Функция СоседнийЭлемент(ПеремещаемыйЭлемент, Список, Знач Направление) Экспорт - - // Подготовка текста запроса к основной таблице списка. - - ТекстЗапроса = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 - | * - |ИЗ - | &Таблица КАК Таблица - |ГДЕ - | Таблица.РеквизитДопУпорядочивания > &РеквизитДопУпорядочивания - |УПОРЯДОЧИТЬ ПО - | Таблица.РеквизитДопУпорядочивания"; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Таблица", Список.ОсновнаяТаблица); - - Если Направление = "Вверх" Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ">", "<"); - ТекстЗапроса = ТекстЗапроса + " УБЫВ"; - КонецЕсли; - - Информация = НастройкаПорядкаЭлементов.ПолучитьИнформациюДляПеремещения(ПеремещаемыйЭлемент.Метаданные()); - - ПостроительЗапроса = Новый ПостроительЗапроса(ТекстЗапроса); - ПостроительЗапроса.ЗаполнитьНастройки(); - Если Информация.ЕстьРодитель Тогда - ДобавитьПростойОтборВПостроительЗапроса(ПостроительЗапроса, "Родитель", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПеремещаемыйЭлемент, "Родитель")); - КонецЕсли; - - Если Информация.ЕстьВладелец Тогда - ДобавитьПростойОтборВПостроительЗапроса(ПостроительЗапроса, "Владелец", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПеремещаемыйЭлемент, "Владелец")); - КонецЕсли; - - Если Информация.ЕстьГруппы Тогда - Если Информация.ДляГрупп И Не Информация.ДляЭлементов Тогда - ДобавитьПростойОтборВПостроительЗапроса(ПостроительЗапроса, "ЭтоГруппа", Истина); - ИначеЕсли Не Информация.ДляГрупп И Информация.ДляЭлементов Тогда - ДобавитьПростойОтборВПостроительЗапроса(ПостроительЗапроса, "ЭтоГруппа", Ложь); - КонецЕсли; - КонецЕсли; - - ПостроительЗапроса.Параметры.Вставить("РеквизитДопУпорядочивания", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПеремещаемыйЭлемент, "РеквизитДопУпорядочивания")); - - Запрос = ПостроительЗапроса.ПолучитьЗапрос(); - - // Подготовка схемы компоновки данных, аналогичной списку. - - СхемаКомпоновкиДанных = СхемаКомпоновкиДанных(Запрос.Текст); - - КомпоновщикНастроекКомпоновкиДанных = Новый КомпоновщикНастроекКомпоновкиДанных; - АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных); - КомпоновщикНастроекКомпоновкиДанных.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы)); - КомпоновщикНастроекКомпоновкиДанных.ЗагрузитьНастройки(Список.КомпоновщикНастроек.ПолучитьНастройки()); - КомпоновщикНастроекКомпоновкиДанных.Настройки.УсловноеОформление.Элементы.Очистить(); - - УстановитьНастройкуСтруктурыВыводаРезультата(КомпоновщикНастроекКомпоновкиДанных.Настройки); - - Для Каждого Параметр Из Запрос.Параметры Цикл - КомпоновщикНастроекКомпоновкиДанных.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра( - Параметр.Ключ, Параметр.Значение); - КонецЦикла; - - // Проверка доступности полей в отборе - Если Не ПоляОтбораВСпискеДоступных(КомпоновщикНастроекКомпоновкиДанных.ПолучитьНастройки().Отбор.Элементы, КомпоновщикНастроекКомпоновкиДанных.ПолучитьНастройки().Отбор.ДоступныеПоляОтбора.Элементы) Тогда - ВызватьИсключение НСтр("ru = 'Для перемещения элемента необходимо отключить все отборы в списке.'"); - КонецЕсли; - - // Вывод результата запроса - - РезультатКомпоновки = Новый ТаблицаЗначений; - КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; - - МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, - КомпоновщикНастроекКомпоновкиДанных.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); - - ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; - ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных); - - ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; - ПроцессорВывода.УстановитьОбъект(РезультатКомпоновки); - ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); - - СоседнийЭлемент = Неопределено; - Если РезультатКомпоновки.Количество() > 0 Тогда - СоседнийЭлемент = РезультатКомпоновки[0].Ссылка; - КонецЕсли; - - Возврат СоседнийЭлемент; - -КонецФункции - Функция СхемаКомпоновкиДанных(ТекстЗапроса) СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных; diff --git a/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/Module.bsl b/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/Module.bsl index e52f727ca..17ad5f396 100644 --- a/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/Module.bsl +++ b/SSL/src/CommonModules/НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент/Module.bsl @@ -5,6 +5,52 @@ // //////////////////////////////////////////////////////////////////////////////// +#Область СлужебныйПрограммныйИнтерфейс + +// Планирует (с помощью подмены значения свойства формы ОписаниеОповещенияОЗакрытии) вызов мастера +// для проверки завершения операции после закрытия формы, из которой мастер вызывался. +// +// Параметры: +// ФормаВладелец - УправляемаяФорма или Неопределено - форма, после закрытия которой требуется выполнить +// проверку завершения операций, в рамках которых ранее применялись запросы разрешений на использование +// внешних ресурсов, +// ИдентификаторыЗапросов - Массив(УникальныйИдентификатор) - идентификаторы запросов разрешений на +// использование внешних ресурсов, которые были применены в рамках операции, завершение которой проверяется. +// +// Результатом выполнения данной процедуры является вызов процедуры. +// ПроверкаПримененияРазрешенийПослеЗакрытияФормыВладельца() после закрытия формы, для которой в псевдо-модальном +// режиме открывался мастер настройки разрешений на использование внешних ресурсов. +// +Процедура ЗапланироватьПроверкуПримененияРазрешенийПослеЗакрытияФормыВладельца(ВладелецФормы, ИдентификаторыЗапросов) Экспорт + + Если ТипЗнч(ВладелецФормы) = Тип("УправляемаяФорма") Тогда + + ИсходноеОписаниеОповещения = ВладелецФормы.ОписаниеОповещенияОЗакрытии; + Если ИсходноеОписаниеОповещения <> Неопределено Тогда + + Если ИсходноеОписаниеОповещения.Модуль = НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент + И ИсходноеОписаниеОповещения.ИмяПроцедуры = "ПроверкаПримененияРазрешенийПослеЗакрытияФормыВладельца" Тогда + Возврат; + КонецЕсли; + + КонецЕсли; + + Состояние = СостояниеПроверкиПримененияРазрешенийПослеЗакрытияФормыВладельца(); + Состояние.ОписаниеОповещения = ИсходноеОписаниеОповещения; + + ОписаниеОповещенияПроверкиПримененияРазрешений = Новый ОписаниеОповещения( + "ПроверкаПримененияРазрешенийПослеЗакрытияФормыВладельца", + НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент, + Состояние); + + ВладелецФормы.ОписаниеОповещенияОЗакрытии = ОписаниеОповещенияПроверкиПримененияРазрешений; + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// @@ -136,7 +182,7 @@ // РежимОтключения - Булево - флаг того, что мастер вызывается при выполнении отключения использования для // информационной базы профилей безопасности, // РежимВосстановления - Булево - флаг того, что мастер вызывается для восстановления настроек профилей безопасности в -// кластере серверов (по текущим данным информационной базы), +// кластере серверов (по текущим данным информационной базы). // // Результатом операции является открытие формы // "Обработка.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.Форма.ИнициализацияЗапросаРазрешений", для которой в @@ -401,48 +447,6 @@ // на использование внешних ресурсов. // -// Планирует (с помощью подмены значения свойства формы ОписаниеОповещенияОЗакрытии) вызов мастера -// для проверки завершения операции после закрытия формы, из которой мастер вызывался. -// -// Параметры: -// ФормаВладелец - УправляемаяФорма или Неопределено - форма, после закрытия которой требуется выполнить -// проверку завершения операций, в рамках которых ранее применялись запросы разрешений на использование -// внешних ресурсов, -// ИдентификаторыЗапросов - Массив(УникальныйИдентификатор) - идентификаторы запросов разрешений на -// использование внешних ресурсов, которые были применены в рамках операции, завершение которой проверяется. -// -// Результатом выполнения данной процедуры является вызов процедуры. -// ПроверкаПримененияРазрешенийПослеЗакрытияФормыВладельца() после закрытия формы, для которой в псевдо-модальном -// режиме открывался мастер настройки разрешений на использование внешних ресурсов. -// -Процедура ЗапланироватьПроверкуПримененияРазрешенийПослеЗакрытияФормыВладельца(ВладелецФормы, ИдентификаторыЗапросов) Экспорт - - Если ТипЗнч(ВладелецФормы) = Тип("УправляемаяФорма") Тогда - - ИсходноеОписаниеОповещения = ВладелецФормы.ОписаниеОповещенияОЗакрытии; - Если ИсходноеОписаниеОповещения <> Неопределено Тогда - - Если ИсходноеОписаниеОповещения.Модуль = НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент - И ИсходноеОписаниеОповещения.ИмяПроцедуры = "ПроверкаПримененияРазрешенийПослеЗакрытияФормыВладельца" Тогда - Возврат; - КонецЕсли; - - КонецЕсли; - - Состояние = СостояниеПроверкиПримененияРазрешенийПослеЗакрытияФормыВладельца(); - Состояние.ОписаниеОповещения = ИсходноеОписаниеОповещения; - - ОписаниеОповещенияПроверкиПримененияРазрешений = Новый ОписаниеОповещения( - "ПроверкаПримененияРазрешенийПослеЗакрытияФормыВладельца", - НастройкаРазрешенийНаИспользованиеВнешнихРесурсовКлиент, - Состояние); - - ВладелецФормы.ОписаниеОповещенияОЗакрытии = ОписаниеОповещенияПроверкиПримененияРазрешений; - - КонецЕсли; - -КонецПроцедуры - // Запускает мастер в режиме проверки завершения операции, в рамках которой ранее применялись запросы // разрешений на использование внешних ресурсов. // diff --git a/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl index d4b41a0b1..bf1f7a55a 100644 --- a/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиXDTOСервер/Module.bsl @@ -38,7 +38,8 @@ |ВерсияФорматаОбмена, |XMLСхема, |МенеджерОбмена, - |УзелКорреспондента"); + |УзелКорреспондента, + |УзелКорреспондентаОбъект"); КомпонентыОбмена.Вставить("НаправлениеОбмена", НаправлениеОбмена); КомпонентыОбмена.Вставить("ЭтоОбменЧерезПланОбмена", Истина); @@ -140,6 +141,26 @@ КонецПроцедуры +// Инициализирует таблицу значений для хранения правил конвертации свойств объекта. +// +// Возвращаемое значение: +// Таблица значений +// +Функция ИнициализироватьТаблицуСвойствДляПравилаКонвертации() Экспорт + + ТаблицаПКС = Новый ТаблицаЗначений; + ТаблицаПКС.Колонки.Добавить("СвойствоКонфигурации", Новый ОписаниеТипов("Строка")); + ТаблицаПКС.Колонки.Добавить("СвойствоФормата", Новый ОписаниеТипов("Строка")); + ТаблицаПКС.Колонки.Добавить("ПравилоКонвертацииСвойства", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(50))); + ТаблицаПКС.Колонки.Добавить("ИспользуетсяАлгоритмКонвертации", Новый ОписаниеТипов("Булево")); + ТаблицаПКС.Колонки.Добавить("ОбработкаКлючевогоСвойства", Новый ОписаниеТипов("Булево")); + ТаблицаПКС.Колонки.Добавить("ОбработкаПоисковогоСвойства", Новый ОписаниеТипов("Булево")); + ТаблицаПКС.Колонки.Добавить("ИмяТЧ", Новый ОписаниеТипов("Строка")); + + Возврат ТаблицаПКС; + +КонецФункции + #КонецОбласти #Область ВедениеПротокола @@ -193,10 +214,14 @@ // Сохраняет в протокол выполнения (или выводит на экран) сообщения указанной структуры. // // Параметры: +// КомпонентыОбмена - Структура - содержит все правила и параметры обмена. // Код - Число. Код сообщения. // СтруктураЗаписи - Структура. Структура записи протокола. // ВзвестиФлагОшибок - Если истина, то - это сообщение об ошибке. Взводится ФлагОшибки. -// +// Уровень - Число - отступ слева, количество табуляций. +// Выравнивание - Число - отступ в тексте, для выравнивания текста выводимого в виде Ключ - Значение. +// БезусловнаяЗаписьВПротоколОбмена - Булево - флаг безусловной записи информации в протокол. +// Функция ЗаписатьВПротоколВыполнения(КомпонентыОбмена, Код = "", СтруктураЗаписи=Неопределено, @@ -237,7 +262,7 @@ КонецЕсли; Ключ = Поле.Ключ; Стр = Стр + Символы.ПС + Отступ + Символы.Таб - + СтроковыеФункцииКлиентСервер.ДополнитьСтроку(Поле.Ключ, Выравнивание) + " = " + Строка(Значение); + + СтроковыеФункцииКлиентСервер.ДополнитьСтроку(Поле.Ключ, Выравнивание, " ", "Справа") + " = " + Строка(Значение); КонецЦикла; @@ -287,11 +312,26 @@ КонецЕсли; + ПозицияСсылки = Найти(КомпонентыОбмена.СтрокаСообщенияОбОшибке, "e1cib/data/"); + Если ПозицияСсылки > 0 Тогда + ПозицияУИД = Найти(КомпонентыОбмена.СтрокаСообщенияОбОшибке, "?ref="); + СтрокаСсылки = Сред(КомпонентыОбмена.СтрокаСообщенияОбОшибке, ПозицияСсылки, ПозицияУИД - ПозицияСсылки + 37); + ПерваяТочка = Найти(СтрокаСсылки, "e1cib/data/"); + ВтораяТочка = Найти(СтрокаСсылки, "?ref="); + ПредставлениеТипа = Сред(СтрокаСсылки, ПерваяТочка + 11, ВтораяТочка - ПерваяТочка - 11); + ШаблонЗначения = ЗначениеВСтрокуВнутр(ПредопределенноеЗначение(ПредставлениеТипа + ".ПустаяСсылка")); + ЗначениеСсылки = СтрЗаменить(ШаблонЗначения, "00000000000000000000000000000000", Сред(СтрокаСсылки, ВтораяТочка + 5)); + СсылкаНаОбъект = ЗначениеИзСтрокиВнутр(ЗначениеСсылки); + Иначе + СсылкаНаОбъект = Неопределено; + КонецЕсли; + // Фиксируем событие в журнале регистрации. ЗаписьЖурналаРегистрацииОбменДанными( КомпонентыОбмена.СтрокаСообщенияОбОшибке, КомпонентыОбмена, - УровеньЖР); + УровеньЖР, + СсылкаНаОбъект); Возврат КомпонентыОбмена.СтрокаСообщенияОбОшибке; @@ -335,7 +375,19 @@ УзелДляОбмена = КомпонентыОбмена.УзелКорреспондента; - КомпонентыОбмена.МенеджерОбмена.ПередКонвертацией(КомпонентыОбмена); + Попытка + КомпонентыОбмена.МенеджерОбмена.ПередКонвертацией(КомпонентыОбмена); + Исключение + ТекстОшибки = Символы.ПС + СтрШаблон(НСтр("ru = 'Событие: %1. + |Обработчик: ПередКонвертацией. + | + |Ошибка выполнения обработчика. + |%2.'"), + КомпонентыОбмена.НаправлениеОбмена, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КомпонентыОбмена.СтрокаСообщенияОбОшибке = ""; + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СокрЛП(ТекстОшибки)); + КонецПопытки; Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда @@ -344,6 +396,7 @@ Попытка ВыполнитьВыгрузкуЗарегистрированныхДанных(КомпонентыОбмена, НомерОтправленного); Исключение + КомпонентыОбмена.СтрокаСообщенияОбОшибке = ""; ЗаписатьВПротоколВыполнения(КомпонентыОбмена, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -362,11 +415,15 @@ КонецЕсли; НачатьТранзакцию(); - Получатель = УзелДляОбмена.ПолучитьОбъект(); - Получатель.НомерОтправленного = НомерОтправленного; - Получатель.ДополнительныеСвойства.Вставить("Загрузка"); - Получатель.Записать(); - ЗафиксироватьТранзакцию(); + Попытка + Получатель = УзелДляОбмена.ПолучитьОбъект(); + Получатель.НомерОтправленного = НомерОтправленного; + Получатель.ДополнительныеСвойства.Вставить("Загрузка"); + Получатель.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + КонецПопытки; РазблокироватьДанныеДляРедактирования(УзелДляОбмена); @@ -376,16 +433,7 @@ ПравилоОбработки = ПОДПоИмени(КомпонентыОбмена, Строка.ИмяПОД); - Попытка - ВыборкаДанных = ВыборкаДанных(КомпонентыОбмена, ПравилоОбработки); - Исключение - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка выполнения алгоритма получения выборки данных. - |Имя ПОД: %1 - |Описание ошибки: %2'"), - ПравилоОбработки.Имя, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; + ВыборкаДанных = ВыборкаДанных(КомпонентыОбмена, ПравилоОбработки); Для Каждого ОбъектВыборки Из ВыборкаДанных Цикл ВыгрузкаОбъектаВыборки(КомпонентыОбмена, ОбъектВыборки, ПравилоОбработки); @@ -395,7 +443,19 @@ КонецЕсли; - КомпонентыОбмена.МенеджерОбмена.ПослеКонвертации(КомпонентыОбмена); + Попытка + КомпонентыОбмена.МенеджерОбмена.ПослеКонвертации(КомпонентыОбмена); + Исключение + ТекстОшибки = Символы.ПС + СтрШаблон(НСтр("ru = 'Событие: %1. + |Обработчик: ПослеКонвертации. + | + |Ошибка выполнения обработчика. + |%2.'"), + КомпонентыОбмена.НаправлениеОбмена, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КомпонентыОбмена.СтрокаСообщенияОбОшибке = ""; + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СокрЛП(ТекстОшибки)); + КонецПопытки; КомпонентыОбмена.ФайлОбмена.ЗаписатьКонецЭлемента(); // Body КомпонентыОбмена.ФайлОбмена.ЗаписатьКонецЭлемента(); // Message @@ -407,6 +467,145 @@ КонецПроцедуры +// Выполняет выгрузку объекта информационной базы. +// +// Параметры: +// КомпонентыОбмена - Структура - содержит все правила и параметры обмена. +// Объект - Ссылка на объект информационной базы. +// ПравилоОбработки - Строка таблицы значений правил обработки данных, +// соответствующая правилу обработки типа выгружаемого объекта. +// Если ПравилоОбработки не задано, оно будет найдено по объекту метаданных выгружаемого объекта. +// +Процедура ВыгрузкаОбъектаВыборки(КомпонентыОбмена, Объект, ПравилоОбработки = Неопределено) Экспорт + + ЗаписьXML = КомпонентыОбмена.ФайлОбмена; + Если ТипЗнч(Объект) <> Тип("Структура") Тогда + Попытка + ТекОбъект = Объект.Ссылка; + Исключение + ТекОбъект = Объект; + КонецПопытки; + + КомпонентыОбмена.ВыгруженныеОбъекты.Добавить(ТекОбъект); + + ОбъектМетаданныхТекущий = Объект.Метаданные(); + Попытка + ПравилоОбработки = ПОДПоОбъектуМетаданных(КомпонентыОбмена, ОбъектМетаданныхТекущий); + Исключение + ТекстОшибки = Символы.ПС + СтрШаблон(НСтр("ru = 'Событие: %1. + |Объект: %2. + | + |%3.'"), + КомпонентыОбмена.НаправлениеОбмена, + ПредставлениеОбъектаДляПротокола(ТекОбъект), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КомпонентыОбмена.СтрокаСообщенияОбОшибке = ""; + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СокрЛП(ТекстОшибки)); + Возврат; + КонецПопытки; + Иначе + КомпонентыОбмена.ВыгруженныеОбъекты.Добавить(Объект); + КонецЕсли; + + // Отработка ПОД + ИспользованиеПКО = Новый Структура; + Для Каждого ИмяПКО Из ПравилоОбработки.ИспользуемыеПКО Цикл + ИспользованиеПКО.Вставить(ИмяПКО, Истина); + КонецЦикла; + + Если ЗначениеЗаполнено(ПравилоОбработки.ПриОбработке) Тогда + ПриОбработкеПОД( + КомпонентыОбмена, + ПравилоОбработки, + Объект, + ИспользованиеПКО); + КонецЕсли; + + // Отработка ПКО + НесколькоПКО = (ПравилоОбработки.ИспользуемыеПКО.Количество() > 1); + + Для Каждого ТекущееПКО Из ИспользованиеПКО Цикл + Попытка + Если Не ТекущееПКО.Значение Тогда + // Если правил конвертации несколько, и некоторые из них не используются - + // необходимо выгрузить удаление объекта на случай если ранее он был выгружен по этим правилам. + + Если НесколькоПКО Тогда + ПравилоКонвертации = КомпонентыОбмена.ПравилаКонвертацииОбъектов.Найти(ТекущееПКО.Ключ, "ИмяПКО"); + ВыгрузитьУдаление(КомпонентыОбмена, Объект.Ссылка, ПравилоКонвертации); + КонецЕсли; + + Продолжить; + КонецЕсли; + + // 1. Поиск правила конвертации. + + ПравилоКонвертации = КомпонентыОбмена.ПравилаКонвертацииОбъектов.Найти(ТекущееПКО.Ключ, "ИмяПКО"); + + // 2. Конвертируем Данные в Структуру по правилам конвертации. + ДанныеXDTO = ДанныеXDTOИзДанныхИБ(КомпонентыОбмена, Объект, ПравилоКонвертации, Неопределено); + + // 3. Конвертируем Структуру в ОбъектXDTO. + СсылкиИзОбъекта = Новый Массив; + ОбъектXDTO = ОбъектXDTOИзДанныхXDTO(КомпонентыОбмена, ДанныеXDTO, ПравилоКонвертации.ТипXDTO,,СсылкиИзОбъекта); + + ОбъектXDTO.Проверить(); + + Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда + + Для Каждого ЗначениеСсылки Из СсылкиИзОбъекта Цикл + + Если КомпонентыОбмена.ВыгруженныеОбъекты.Найти(ЗначениеСсылки) = Неопределено + И ВыгружатьОбъектПоНеобходимости(КомпонентыОбмена, ЗначениеСсылки) Тогда + + Если Не РегистрыСведений.ДанныеОбъектовДляРегистрацииВОбменах.ОбъектЕстьВРегистре( + ЗначениеСсылки, КомпонентыОбмена.УзелКорреспондента) Тогда + + ОбъектВыгружаемыйПоСсылке = Неопределено; + + Если ОбщегоНазначения.СсылкаСуществует(ЗначениеСсылки) Тогда + ОбъектВыгружаемыйПоСсылке = ЗначениеСсылки.ПолучитьОбъект(); + КонецЕсли; + + Если ОбъектВыгружаемыйПоСсылке <> Неопределено Тогда + + ВыгрузкаОбъектаВыборки(КомпонентыОбмена, ОбъектВыгружаемыйПоСсылке); + КомпонентыОбмена.ВыгруженныеПоСсылкеОбъекты.Добавить(ЗначениеСсылки); + РегистрыСведений.ДанныеОбъектовДляРегистрацииВОбменах.ДобавитьОбъектВФильтрРазрешенныхОбъектов( + ЗначениеСсылки, КомпонентыОбмена.УзелКорреспондента); + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + // 4. Записываем ОбъектXDTO в XML-файл. + ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXDTO); + Исключение + ТекстОшибки = Символы.ПС + СтрШаблон(НСтр("ru = 'Событие: %1. + |ПОД: %2. + |ПКО: %3. + |Объект: %4. + | + |%5'"), + КомпонентыОбмена.НаправлениеОбмена, + ПравилоОбработки.Имя, + ТекущееПКО.Ключ, + ПредставлениеОбъектаДляПротокола(Объект), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КомпонентыОбмена.СтрокаСообщенияОбОшибке = ""; + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СокрЛП(ТекстОшибки)); + Возврат; + КонецПопытки; + КонецЦикла; + +КонецПроцедуры + // Выполняет преобразование структуры с данными в объект XDTO указанного типа в соответствии с правилами. // // Параметры: @@ -415,13 +614,15 @@ // ТипXDTO - Строка - тип объекта или тип значения XDTO, к которому надо преобразовать данные. // Приемник - ОбъектXDTO - объект, в который будет помещен результат. // СсылкиИзОбъекта - Массив - содержит общий список выгруженных по ссылкам объектов. +// ПроведеноЗаполнениеСвойств - Булево - параметр для определения заполненности общих составных свойств. // Функция ОбъектXDTOИзДанныхXDTO( КомпонентыОбмена, Знач Источник, - Знач ТипXDTO = Неопределено, + Знач ТипXDTO, Приемник = Неопределено, - СсылкиИзОбъекта = Неопределено) Экспорт + СсылкиИзОбъекта = Неопределено, + ПроведеноЗаполнениеСвойств = Ложь) Экспорт Если СсылкиИзОбъекта = Неопределено Тогда СсылкиИзОбъекта = Новый Массив; @@ -468,132 +669,142 @@ КонецЕсли; Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неизвестный тип свойства <%1>. Тип объекта: %2'"), - Свойство.Имя, - Строка(ТипXDTO)); + ТекстОшибки = СтрШаблон(НСтр("ru = 'Неизвестный тип свойства <%1>. Тип объекта: %2'"), Свойство.Имя, Строка(ТипXDTO)); + ВызватьИсключение ТекстОшибки; КонецЕсли; - Если ТипСвойства = "ОбщееСоставноеСвойство" Тогда - - ЗначениеXDTO = ОбъектXDTOИзДанныхXDTO(КомпонентыОбмена, Источник, Свойство.Тип,, СсылкиИзОбъекта); - - Иначе - - Если Не СвойствоНайдено Тогда - Продолжить; - КонецЕсли; - - // Проверка на заполненность - Если ЗначениеСвойства = Null - Или Не ЗначениеЗаполнено(ЗначениеСвойства) Тогда + Попытка + Если ТипСвойства = "ОбщееСоставноеСвойство" Тогда - Если Свойство.ВозможноПустое Тогда - Приемник[Свойство.Имя] = Неопределено; - КонецЕсли; - - Продолжить; - - КонецЕсли; - - ЗначениеXDTO = Неопределено; - Если ТипСвойства = "КлючевыеСвойства" Тогда - ЗначениеXDTO = ОбъектXDTOИзДанныхXDTO(КомпонентыОбмена, ЗначениеСвойства, Свойство.Тип,,СсылкиИзОбъекта); - ИначеЕсли ТипСвойства = "ОбычноеСвойство" Тогда - - Если ЭтоСсылкаXDTO(Свойство.Тип) Тогда // Конвертация ссылки - - ЗначениеXDTO = КонвертироватьСсылкуВXDTO(КомпонентыОбмена, ЗначениеСвойства, Свойство.Тип); - - Если СсылкиИзОбъекта.Найти(ЗначениеСвойства) = Неопределено Тогда - СсылкиИзОбъекта.Добавить(ЗначениеСвойства); - КонецЕсли; - - ИначеЕсли Свойство.Тип.Фасеты <> Неопределено - И Свойство.Тип.Фасеты.Перечисления <> Неопределено - И Свойство.Тип.Фасеты.Перечисления.Количество() > 0 Тогда // Конвертация перечисления - ЗначениеXDTO = КонвертироватьПеречислениеВXDTO(КомпонентыОбмена, ЗначениеСвойства, Свойство.Тип); - Иначе // Конвертация обычного значения. - ЗначениеXDTO = ФабрикаXDTO.Создать(Свойство.Тип, ЗначениеСвойства); - КонецЕсли; - - ИначеЕсли ТипСвойства = "AdditionalInfo" Тогда - ЗначениеXDTO = СериализаторXDTO.ЗаписатьXDTO(ЗначениеСвойства); - - ИначеЕсли ТипСвойства = "Таблица" Тогда - - ЗначениеXDTO = ФабрикаXDTO.Создать(Свойство.Тип); - - ТипТаблицы = Свойство.Тип.Свойства[0].Тип; - - ИмяСвойстваСтроки = Свойство.Тип.Свойства[0].Имя; - - Для Каждого ИсточникСтрока Из ЗначениеСвойства Цикл - - ПриемникСтрока = ОбъектXDTOИзДанныхXDTO(КомпонентыОбмена, ИсточникСтрока, ТипТаблицы,,СсылкиИзОбъекта); - - ЗначениеXDTO[ИмяСвойстваСтроки].Добавить(ПриемникСтрока); - - КонецЦикла; - - ИначеЕсли ТипСвойства = "СвойствоСоставногоТипа" Тогда - - Для Каждого СвойствоСоставногоТипа Из Свойство.Тип.Свойства Цикл - - СоставноеЗначениеXDTO = Неопределено; - Если ТипЗнч(ЗначениеСвойства) = Тип("Структура") - И ЗначениеСвойства.ТипСоставногоСвойства = СвойствоСоставногоТипа.Тип Тогда - - // Свойство составного типа, содержащие элементы только типа КлючевыеСвойства. - СоставноеЗначениеXDTO = ОбъектXDTOИзДанныхXDTO(КомпонентыОбмена, ЗначениеСвойства, СвойствоСоставногоТипа.Тип,,СсылкиИзОбъекта); - // Свойство составного типа простое, и значение простое - ИначеЕсли (ТипЗнч(ЗначениеСвойства) = Тип("Строка") - И СтрНайти(СвойствоСоставногоТипа.Тип.Имя,"string")>0) - ИЛИ (ТипЗнч(ЗначениеСвойства) = Тип("Число") - И СтрНайти(СвойствоСоставногоТипа.Тип.Имя,"decimal")>0) - ИЛИ (ТипЗнч(ЗначениеСвойства) = Тип("Булево") - И СтрНайти(СвойствоСоставногоТипа.Тип.Имя,"boolean")>0) - ИЛИ (ТипЗнч(ЗначениеСвойства) = Тип("Дата") - И СтрНайти(СвойствоСоставногоТипа.Тип.Имя,"date")>0) Тогда - СоставноеЗначениеXDTO = ЗначениеСвойства; - - ИначеЕсли ТипЗнч(ЗначениеСвойства) = Тип("Строка") - И ТипЗнч(СвойствоСоставногоТипа.Тип) = Тип("ТипЗначенияXDTO") - И СвойствоСоставногоТипа.Тип.Фасеты <> Неопределено Тогда - Если СвойствоСоставногоТипа.Тип.Фасеты.Количество() = 0 Тогда - СоставноеЗначениеXDTO = ЗначениеСвойства; - Иначе - - Для Каждого Фасет Из СвойствоСоставногоТипа.Тип.Фасеты Цикл - Если Фасет.Значение = ЗначениеСвойства Тогда - СоставноеЗначениеXDTO = ЗначениеСвойства; - Прервать; - КонецЕсли; - КонецЦикла; - - КонецЕсли; - КонецЕсли; - - Если СоставноеЗначениеXDTO <> Неопределено Тогда - Прервать; - КонецЕсли; - - КонецЦикла; - - // Если передается значение с типом, которое не поддерживается в формате - не передаем. - Если СоставноеЗначениеXDTO = Неопределено Тогда + ПроведеноЗаполнениеВложенныхСвойств = Ложь; + ЗначениеXDTO = ОбъектXDTOИзДанныхXDTO(КомпонентыОбмена, Источник, Свойство.Тип,, СсылкиИзОбъекта, ПроведеноЗаполнениеВложенныхСвойств); + Если Не ПроведеноЗаполнениеВложенныхСвойств Тогда Продолжить; КонецЕсли; - ЗначениеXDTO = ФабрикаXDTO.Создать(Свойство.Тип); - ЗначениеXDTO.Установить(СвойствоСоставногоТипа, СоставноеЗначениеXDTO); + Иначе + + Если Не СвойствоНайдено Тогда + Продолжить; + КонецЕсли; + + // Проверка на заполненность + Если ЗначениеСвойства = Null + Или Не ЗначениеЗаполнено(ЗначениеСвойства) Тогда + + Если Свойство.ВозможноПустое Тогда + Приемник[Свойство.Имя] = Неопределено; + КонецЕсли; + + Продолжить; + + КонецЕсли; + + ЗначениеXDTO = Неопределено; + Если ТипСвойства = "КлючевыеСвойства" Тогда + ЗначениеXDTO = ОбъектXDTOИзДанныхXDTO(КомпонентыОбмена, ЗначениеСвойства, Свойство.Тип,,СсылкиИзОбъекта); + ИначеЕсли ТипСвойства = "ОбычноеСвойство" Тогда + + Если ЭтоСсылкаXDTO(Свойство.Тип) Тогда // Конвертация ссылки + + ЗначениеXDTO = КонвертироватьСсылкуВXDTO(КомпонентыОбмена, ЗначениеСвойства, Свойство.Тип); + + Если СсылкиИзОбъекта.Найти(ЗначениеСвойства) = Неопределено Тогда + СсылкиИзОбъекта.Добавить(ЗначениеСвойства); + КонецЕсли; + + ИначеЕсли Свойство.Тип.Фасеты <> Неопределено + И Свойство.Тип.Фасеты.Перечисления <> Неопределено + И Свойство.Тип.Фасеты.Перечисления.Количество() > 0 Тогда // Конвертация перечисления + ЗначениеXDTO = КонвертироватьПеречислениеВXDTO(КомпонентыОбмена, ЗначениеСвойства, Свойство.Тип); + Иначе // Конвертация обычного значения. + ЗначениеXDTO = ФабрикаXDTO.Создать(Свойство.Тип, ЗначениеСвойства); + КонецЕсли; + ИначеЕсли ТипСвойства = "AdditionalInfo" Тогда + ЗначениеXDTO = СериализаторXDTO.ЗаписатьXDTO(ЗначениеСвойства); + + ИначеЕсли ТипСвойства = "Таблица" Тогда + + ЗначениеXDTO = ФабрикаXDTO.Создать(Свойство.Тип); + + ТипТаблицы = Свойство.Тип.Свойства[0].Тип; + + ИмяСвойстваСтроки = Свойство.Тип.Свойства[0].Имя; + + Для Каждого ИсточникСтрока Из ЗначениеСвойства Цикл + + ПриемникСтрока = ОбъектXDTOИзДанныхXDTO(КомпонентыОбмена, ИсточникСтрока, ТипТаблицы,,СсылкиИзОбъекта); + + ЗначениеXDTO[ИмяСвойстваСтроки].Добавить(ПриемникСтрока); + + КонецЦикла; + + ИначеЕсли ТипСвойства = "СвойствоСоставногоТипа" Тогда + + Для Каждого СвойствоСоставногоТипа Из Свойство.Тип.Свойства Цикл + + СоставноеЗначениеXDTO = Неопределено; + Если ТипЗнч(ЗначениеСвойства) = Тип("Структура") + И ЗначениеСвойства.ТипСоставногоСвойства = СвойствоСоставногоТипа.Тип Тогда + + // Свойство составного типа, содержащие элементы только типа КлючевыеСвойства. + СоставноеЗначениеXDTO = ОбъектXDTOИзДанныхXDTO(КомпонентыОбмена, ЗначениеСвойства, СвойствоСоставногоТипа.Тип,,СсылкиИзОбъекта); + // Свойство составного типа простое, и значение простое. + ИначеЕсли (ТипЗнч(ЗначениеСвойства) = Тип("Строка") + И СтрНайти(СвойствоСоставногоТипа.Тип.Имя,"string")>0) + ИЛИ (ТипЗнч(ЗначениеСвойства) = Тип("Число") + И СтрНайти(СвойствоСоставногоТипа.Тип.Имя,"decimal")>0) + ИЛИ (ТипЗнч(ЗначениеСвойства) = Тип("Булево") + И СтрНайти(СвойствоСоставногоТипа.Тип.Имя,"boolean")>0) + ИЛИ (ТипЗнч(ЗначениеСвойства) = Тип("Дата") + И СтрНайти(СвойствоСоставногоТипа.Тип.Имя,"date")>0) Тогда + СоставноеЗначениеXDTO = ЗначениеСвойства; + + ИначеЕсли ТипЗнч(ЗначениеСвойства) = Тип("Строка") + И ТипЗнч(СвойствоСоставногоТипа.Тип) = Тип("ТипЗначенияXDTO") + И СвойствоСоставногоТипа.Тип.Фасеты <> Неопределено Тогда + Если СвойствоСоставногоТипа.Тип.Фасеты.Количество() = 0 Тогда + СоставноеЗначениеXDTO = ЗначениеСвойства; + Иначе + + Для Каждого Фасет Из СвойствоСоставногоТипа.Тип.Фасеты Цикл + Если Фасет.Значение = ЗначениеСвойства Тогда + СоставноеЗначениеXDTO = ЗначениеСвойства; + Прервать; + КонецЕсли; + КонецЦикла; + + КонецЕсли; + КонецЕсли; + + Если СоставноеЗначениеXDTO <> Неопределено Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + // Если передается значение с типом, которое не поддерживается в формате - не передаем. + Если СоставноеЗначениеXDTO = Неопределено Тогда + Продолжить; + КонецЕсли; + + ЗначениеXDTO = ФабрикаXDTO.Создать(Свойство.Тип); + ЗначениеXDTO.Установить(СвойствоСоставногоТипа, СоставноеЗначениеXDTO); + КонецЕсли; + КонецЕсли; - - КонецЕсли; + Исключение + ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ТекстОшибки = СтрШаблон(НСтр("ru = 'Ошибка формирования объекта XDTO: Тип свойства <%1>. Имя свойства: <%2>.'"), ТипСвойства, Свойство.Имя) + + Символы.ПС + Символы.ПС + ПредставлениеОшибки; + ВызватьИсключение ТекстОшибки; + КонецПопытки; Приемник[Свойство.Имя] = ЗначениеXDTO; + ПроведеноЗаполнениеСвойств = Истина; КонецЦикла; + Возврат Приемник; КонецФункции @@ -616,11 +827,29 @@ Если ПравилоКонвертации.ЭтоСсылочныйТип Тогда - Если СтекВыгрузки.Найти(Источник.Ссылка) <> Неопределено Тогда - Возврат Неопределено; - Иначе - СтекВыгрузки.Добавить(Источник.Ссылка); + ПозицияВСтеке = СтекВыгрузки.Найти(Источник.Ссылка); + + // Проверяем, выгружался ли объект по ссылке, чтобы не допустить зацикливания. + Если ПозицияВСтеке <> Неопределено Тогда + + Если ПозицияВСтеке > 0 Тогда + Возврат Неопределено; + Иначе + // Необходимо искать перебором. + ПерваяИтерация = Истина; + Для Каждого ЭлементСтека Из СтекВыгрузки Цикл + Если ПерваяИтерация Тогда + ПерваяИтерация = Ложь; + Продолжить; + КонецЕсли; + Если ЭлементСтека = Источник.Ссылка Тогда + Возврат Неопределено; + КонецЕсли; + КонецЦикла; + КонецЕсли; КонецЕсли; + + СтекВыгрузки.Добавить(Источник.Ссылка); Иначе СтекВыгрузки.Добавить(Источник); КонецЕсли; @@ -890,33 +1119,33 @@ // Возвращает объект информационной базы, соответствующий полученным данным. // // Параметры: -// ДанныеXDTO - Структура - структура, имитирующая объект XDTO. +// КомпонентыОбмена - Структура - содержит все правила и параметры обмена. +// ДанныеXDTO - Структура - структура, имитирующая объект XDTO. // // ПравилоКонвертации - СтрокаТаблицыЗначений - параметры текущего правила конвертации. // // Действие - Строка - определяет цель получения объекта ИБ: // "ПолучитьСсылку" - идентификация объекта, -// "КонвертироватьВПолученныеДанные" - заполнение объекта только данными, полученными в результате -// конвертации данных XDTO "КонвертироватьИЗаписать" - получение объекта, -// готового. +// "КонвертироватьИЗаписать" - полноценная загрузка объекта. // // Возвращаемое значение: -// Структура - содержит имена (ключи) и значения затребованных реквизитов. -// Если строка затребованных реквизитов пуста, то возвращается пустая структура. -// Если в качестве объекта передана пустая ссылка, то все реквизиты вернутся со значением Неопределено. +// - Объект - объект ИБ, если передано действие "КонвертироватьИЗаписать", +// либо если передано действие "ПолучитьСсылку" и в процессе ее получения был создан объект. +// - Ссылка - ссылка на объект ИБ или пустая ссылка заданного типа, если было передано действие "ПолучитьСсылку" +// и в процессе ее получения объект не был создан. // Функция СтруктураОбъектаXDTOВДанныеИБ(КомпонентыОбмена, ДанныеXDTO, ПравилоКонвертации, Действие = "КонвертироватьИЗаписать") Экспорт ДанныеИБ = Неопределено; ПолученныеДанные = ИнициализироватьПолученныеДанные(ПравилоКонвертации); + ПолученныеДанныеСсылка = ПолученныеДанные.Ссылка; СоставСвойств = "Все"; + ДанныеXDTOСодержатСсылку = ДанныеXDTO.Свойство("Ссылка"); Если ПравилоКонвертации.ЭтоСсылочныйТип Тогда - ПолученныеДанныеСсылка = ПолученныеДанные.Ссылка; ВариантИдентификации = СокрЛП(ПравилоКонвертации.ВариантИдентификации); - - Если ВариантИдентификации = "ПоУникальномуИдентификатору" - Или (ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" - И ДанныеXDTO.Свойство("Ссылка")) Тогда + Если ДанныеXDTOСодержатСсылку + И (ВариантИдентификации = "ПоУникальномуИдентификатору" + Или ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска") Тогда ПолученныеДанныеСсылка = СсылкаОбъектаПоУИДОбъектаXDTO( ДанныеXDTO.Ссылка.Значение, @@ -925,23 +1154,22 @@ ПолученныеДанные.УстановитьСсылкуНового(ПолученныеДанныеСсылка); - ДанныеИБ = ПолученныеДанныеСсылка.ПолучитьОбъект(); - Если Действие = "ПолучитьСсылку" Тогда - Если ДанныеИБ <> Неопределено Тогда - // Задача: получение ссылки. - // Идентификация: по УИД или УИД + поля поиска. - // Объект с полученной ссылкой (или с таким публичным идентификатором) существует. - Возврат ДанныеИБ.Ссылка; - ИначеЕсли ВариантИдентификации = "ПоУникальномуИдентификатору" Тогда + Если ВариантИдентификации = "ПоУникальномуИдентификатору" Тогда // Задача: получение ссылки. // Идентификация: по УИД. // Объект с полученной ссылкой (или с таким публичным идентификатором) не найден. Возврат ПолученныеДанныеСсылка; + ИначеЕсли ОбщегоНазначения.СсылкаСуществует(ПолученныеДанныеСсылка) Тогда + // Задача: получение ссылки. + // Идентификация: по УИД или УИД + поля поиска. + // Объект с полученной ссылкой (или с таким публичным идентификатором) существует. + Возврат ПолученныеДанныеСсылка; КонецЕсли; КонецЕсли; + Иначе ПолученныеДанныеСсылка = ПравилоКонвертации.МенеджерОбъекта.ПолучитьСсылку(Новый УникальныйИдентификатор()); ПолученныеДанные.УстановитьСсылкуНового(ПолученныеДанныеСсылка); @@ -981,14 +1209,23 @@ 2, СоставСвойств); + // В результате конвертации свойств объект мог быть записан в случае наличия циклической ссылки. + Если ОбщегоНазначения.СсылкаСуществует(ПолученныеДанныеСсылка) Тогда + ДанныеИБ = ПолученныеДанныеСсылка.ПолучитьОбъект(); + КонецЕсли; + Если ДанныеИБ = Неопределено Тогда - Если ПравилоКонвертации.ЭтоРегистрСведений Тогда + Если ПравилоКонвертации.ЭтоРегистр Тогда // Идентификация не производится, отбор набора записей выполняется в алгоритмах правил. ДанныеИБ = Неопределено; ИначеЕсли ВариантИдентификации = "ПоПолямПоиска" Или ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" Тогда - ДанныеИБ = СсылкаОбъектаПоСвойствамОбъектаXDTO(ПравилоКонвертации, ПолученныеДанные); + ДанныеИБ = СсылкаОбъектаПоСвойствамОбъектаXDTO( + ПравилоКонвертации, + ПолученныеДанные, + ДанныеXDTOСодержатСсылку, + КомпонентыОбмена.УзелКорреспондента); Если Не ЗначениеЗаполнено(ДанныеИБ) Тогда ДанныеИБ = Неопределено; КонецЕсли; @@ -1024,13 +1261,13 @@ #Область ЗаписьОбъекта Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена - И ДанныеИБ <> Неопределено - И ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" - И ПравилоКонвертации.ЭтоСсылочныйТип Тогда + И ПравилоКонвертации.ЭтоСсылочныйТип + И ДанныеXDTOСодержатСсылку Тогда ЗаписатьПриНеобходимостиПубличныйИдентификатор( ДанныеИБ, ПолученныеДанные.ПолучитьСсылкуНового(), + ДанныеXDTO.Ссылка.Значение, КомпонентыОбмена.УзелКорреспондента, ПравилоКонвертации); @@ -1058,12 +1295,19 @@ Если ПравилоКонвертации.ЭтоСсылочныйТип Тогда ПровестиГенерациюКодаНомераПриНеобходимости(ДанныеДляЗаписиВИБ); КонецЕсли; - Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена И НЕ ПравилоКонвертации.ЭтоРегистрСведений Тогда + Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена И НЕ ПравилоКонвертации.ЭтоРегистр Тогда #Область СистемныйОбработчикПриПолученииДанныхОтПодчиненного ПолучениеЭлемента = ПолучениеЭлементаДанных.Авто; ОтправкаНазад = Ложь; - СтандартныеПодсистемыСервер.ПриПолученииДанныхОтПодчиненного(ДанныеДляЗаписиВИБ, ПолучениеЭлемента, ОтправкаНазад, КомпонентыОбмена.УзелКорреспондента); + СтандартныеПодсистемыСервер.ПриПолученииДанныхОтГлавного( + ДанныеДляЗаписиВИБ, ПолучениеЭлемента, ОтправкаНазад, КомпонентыОбмена.УзелКорреспондентаОбъект); + ДанныеДляЗаписиВИБ.ДополнительныеСвойства.Вставить("ПолучениеЭлементаДанных", ПолучениеЭлемента); + + Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда + Возврат ДанныеДляЗаписиВИБ; + КонецЕсли; + #КонецОбласти КонецЕсли; @@ -1168,151 +1412,212 @@ Возврат; КонецЕсли; + Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена + И КомпонентыОбмена.УзелКорреспондентаОбъект = Неопределено Тогда + КомпонентыОбмена.УзелКорреспондентаОбъект = КомпонентыОбмена.УзелКорреспондента.ПолучитьОбъект(); + КонецЕсли; + МассивОбъектовКУдалению = Новый Массив; МассивЗагруженныхОбъектов = Новый Массив; - КомпонентыОбмена.МенеджерОбмена.ПередКонвертацией(КомпонентыОбмена); + Попытка + КомпонентыОбмена.МенеджерОбмена.ПередКонвертацией(КомпонентыОбмена); + Исключение + ТекстОшибки = Символы.ПС + СтрШаблон(НСтр("ru = 'Событие: %1. + |Обработчик: ПередКонвертацией. + | + |Ошибка выполнения обработчика. + |%2.'"), + КомпонентыОбмена.НаправлениеОбмена, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КомпонентыОбмена.СтрокаСообщенияОбОшибке = ""; + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СокрЛП(ТекстОшибки)); + КонецПопытки; Пока КомпонентыОбмена.ФайлОбмена.ТипУзла = ТипУзлаXML.НачалоЭлемента Цикл - #Область ЧтениеЭлементаXDTO - ОтправкаНазад = Ложь; - ДанныеИБ = Неопределено; - - // Получаем из файла ОбъектXDTO. - ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML( - КомпонентыОбмена.ФайлОбмена, - ФабрикаXDTO.Тип(КомпонентыОбмена.ФайлОбмена.URIПространстваИмен, КомпонентыОбмена.ФайлОбмена.ЛокальноеИмя)); - - // Загрузка признака удаления объекта - специфичная логика. - Если ОбъектXDTO.Тип().Имя = "УдалениеОбъекта" Тогда + Попытка + #Область ЧтениеЭлементаXDTO + ОтправкаНазад = Ложь; + ДанныеИБ = Неопределено; - ПрочитатьУдаление(КомпонентыОбмена, ОбъектXDTO, МассивОбъектовКУдалению, ТаблицыДляЗагрузки); + // Получаем из файла ОбъектXDTO. + ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML( + КомпонентыОбмена.ФайлОбмена, + ФабрикаXDTO.Тип(КомпонентыОбмена.ФайлОбмена.URIПространстваИмен, КомпонентыОбмена.ФайлОбмена.ЛокальноеИмя)); - Иначе - - // Отработка ПОД - // Ищем правило обработки данных. - ПравилоОбработки = ПОДПоТипуОбъектаXDTO(КомпонентыОбмена, ОбъектXDTO.Тип().Имя, Истина); - - Если Не ЗначениеЗаполнено(ПравилоОбработки) Тогда - Продолжить; - КонецЕсли; + // Загрузка признака удаления объекта - специфичная логика. + Если ОбъектXDTO.Тип().Имя = "УдалениеОбъекта" Тогда + + ПрочитатьУдаление(КомпонентыОбмена, ОбъектXDTO, МассивОбъектовКУдалению, ТаблицыДляЗагрузки); + + Иначе + + // Отработка ПОД + // Ищем правило обработки данных. + ПравилоОбработки = ПОДПоТипуОбъектаXDTO(КомпонентыОбмена, ОбъектXDTO.Тип().Имя, Истина); + + Если Не ЗначениеЗаполнено(ПравилоОбработки) Тогда + Продолжить; + КонецЕсли; - // Конвертируем ОбъектXDTO в Структуру. - ДанныеXDTO = ОбъектXDTOВСтруктуру(ОбъектXDTO); - - ИспользованиеПКО = Новый Структура; - Для Каждого ИмяПКО Из ПравилоОбработки.ИспользуемыеПКО Цикл - ИспользованиеПКО.Вставить(ИмяПКО, Истина); - КонецЦикла; - #КонецОбласти - - #Область ПриОбработке - Если ЗначениеЗаполнено(ПравилоОбработки.ПриОбработке) Тогда - ПриОбработкеПОД( - КомпонентыОбмена, - ПравилоОбработки, - ДанныеXDTO, - ИспользованиеПКО); - КонецЕсли; + // Конвертируем ОбъектXDTO в Структуру. + ДанныеXDTO = ОбъектXDTOВСтруктуру(ОбъектXDTO); + + ИспользованиеПКО = Новый Структура; + Для Каждого ИмяПКО Из ПравилоОбработки.ИспользуемыеПКО Цикл + ИспользованиеПКО.Вставить(ИмяПКО, Истина); + КонецЦикла; #КонецОбласти - - // Массив нужен для "свертки" ПКО по видам объектов метаданных. - ОбработанныеТипыОбъектовМетаданных = Новый Массив; - - // 1. Поиск правила конвертации. - Для Каждого ТекущееПКО Из ИспользованиеПКО Цикл - ПравилоКонвертации = ПКОПоИмени(КомпонентыОбмена, ТекущееПКО.Ключ); - - #Область ПроверкаСоответствияТаблицеДляЗагрузки - Если ТаблицыДляЗагрузки <> Неопределено Тогда - ТипОбъектаСтрокой = ПравилоКонвертации.ТипПолученныхДанныхСтрокой; - - ТипИсточникаСтрокой = ОбъектXDTO.Тип().Имя; - ТипПриемникаСтрокой = ПравилоКонвертации.ТипПолученныхДанныхСтрокой; - - КлючТаблицыДанных = ОбменДаннымиСервер.КлючТаблицыДанных(ТипИсточникаСтрокой, ТипПриемникаСтрокой, Ложь); - - Если ТаблицыДляЗагрузки.Найти(КлючТаблицыДанных) = Неопределено Тогда - Продолжить; - КонецЕсли; + #Область ПриОбработке + Если ЗначениеЗаполнено(ПравилоОбработки.ПриОбработке) Тогда + ПриОбработкеПОД( + КомпонентыОбмена, + ПравилоОбработки, + ДанныеXDTO, + ИспользованиеПКО); КонецЕсли; #КонецОбласти - Если ТекущееПКО.Значение Тогда + // Массив нужен для "свертки" ПКО по видам объектов метаданных. + ОбработанныеТипыОбъектовМетаданных = Новый Массив; - ПолученныеДанныеСсылка = Неопределено; + // 1. Поиск правила конвертации. + Для Каждого ТекущееПКО Из ИспользованиеПКО Цикл + + ПравилоКонвертации = ПКОПоИмени(КомпонентыОбмена, ТекущееПКО.Ключ); + + #Область ПроверкаСоответствияТаблицеДляЗагрузки + Если ТаблицыДляЗагрузки <> Неопределено Тогда + ТипОбъектаСтрокой = ПравилоКонвертации.ТипПолученныхДанныхСтрокой; + + ТипИсточникаСтрокой = ОбъектXDTO.Тип().Имя; + ТипПриемникаСтрокой = ПравилоКонвертации.ТипПолученныхДанныхСтрокой; + + КлючТаблицыДанных = ОбменДаннымиСервер.КлючТаблицыДанных(ТипИсточникаСтрокой, ТипПриемникаСтрокой, Ложь); + + Если ТаблицыДляЗагрузки.Найти(КлючТаблицыДанных) = Неопределено Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + #КонецОбласти + ВариантИдентификации = СокрЛП(ПравилоКонвертации.ВариантИдентификации); - Если ВариантИдентификации = "ПоУникальномуИдентификатору" - Или (ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" - И ДанныеXDTO.Свойство("Ссылка")) Тогда - ПолученныеДанныеСсылка = ПравилоКонвертации.МенеджерОбъекта.ПолучитьСсылку(Новый УникальныйИдентификатор(ДанныеXDTO.Ссылка.Значение)); - КонецЕсли; + СинхронизироватьПоИдентификатору = (ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" + Или ВариантИдентификации = "ПоУникальномуИдентификатору") И ДанныеXDTO.Свойство("Ссылка"); - Если КомпонентыОбмена.РежимЗагрузкиДанныхВИнформационнуюБазу Тогда + Если ТекущееПКО.Значение Тогда - ДанныеДляЗаписиВИБ = СтруктураОбъектаXDTOВДанныеИБ(КомпонентыОбмена, ДанныеXDTO, ПравилоКонвертации, "КонвертироватьИЗаписать"); + ПолученныеДанныеСсылка = Неопределено; + Если СинхронизироватьПоИдентификатору Тогда + ПолученныеДанныеСсылка = СсылкаОбъектаПоУИДОбъектаXDTO(ДанныеXDTO.Ссылка.Значение, + ПравилоКонвертации.ТипДанных, КомпонентыОбмена); + КонецЕсли; - Если ПравилоКонвертации.ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" - Или ПравилоКонвертации.ВариантИдентификации = "ПоУникальномуИдентификатору" Тогда + Если КомпонентыОбмена.РежимЗагрузкиДанныхВИнформационнуюБазу Тогда - МассивЗагруженныхОбъектов.Добавить(ДанныеДляЗаписиВИБ.Ссылка); + ДанныеДляЗаписиВИБ = СтруктураОбъектаXDTOВДанныеИБ(КомпонентыОбмена, ДанныеXDTO, ПравилоКонвертации, "КонвертироватьИЗаписать"); + + Если ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" + Или ВариантИдентификации = "ПоУникальномуИдентификатору" Тогда + + МассивЗагруженныхОбъектов.Добавить(ДанныеДляЗаписиВИБ.Ссылка); + + КонецЕсли; + + // Пропускаем объект, если он не может быть загружен, например, из-за даты запрета загрузки. + ПолучениеЭлемента = ПолучениеЭлементаДанных.Авто; + ДанныеДляЗаписиВИБ.ДополнительныеСвойства.Свойство("ПолучениеЭлементаДанных", ПолучениеЭлемента); + Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда + КомпонентыОбмена.СчетчикЗагруженныхОбъектов = КомпонентыОбмена.СчетчикЗагруженныхОбъектов + 1; + ОбменДаннымиСервер.РассчитатьПроцентЗагрузки(КомпонентыОбмена.СчетчикЗагруженныхОбъектов, + КомпонентыОбмена.КоличествоОбъектовКЗагрузке, КомпонентыОбмена.РазмерФайлаСообщенияОбмена); + Продолжить; + КонецЕсли; + + ИначеЕсли ТаблицыДляЗагрузки <> Неопределено Тогда + + ДанныеДляЗаписиВИБ = СтруктураОбъектаXDTOВДанныеИБ(КомпонентыОбмена, ДанныеXDTO, ПравилоКонвертации, "Конвертировать"); + + ПровестиГенерациюКодаНомераПриНеобходимости(ДанныеДляЗаписиВИБ); + + ТаблицаДанныхСообщенияОбмена = КомпонентыОбмена.ТаблицыДанныхСообщенияОбмена.Получить(КлючТаблицыДанных); + + УникальныйИдентификаторСтрокой = ""; + СтрокаТаблицы = Неопределено; + Если ДанныеXDTO.Свойство("Ссылка") Тогда + УникальныйИдентификаторСтрокой = ДанныеXDTO.Ссылка.Значение; + СтрокаТаблицы = ТаблицаДанныхСообщенияОбмена.Найти(УникальныйИдентификаторСтрокой, "УникальныйИдентификатор"); + КонецЕсли; + + Если СтрокаТаблицы = Неопределено Тогда + + СтрокаТаблицы = ТаблицаДанныхСообщенияОбмена.Добавить(); + + СтрокаТаблицы.ТипСтрокой = ТипПриемникаСтрокой; + СтрокаТаблицы.УникальныйИдентификатор = УникальныйИдентификаторСтрокой; + + КонецЕсли; + + // Заполняем значения свойств объекта. + ЗаполнитьЗначенияСвойств(СтрокаТаблицы, ДанныеДляЗаписиВИБ); + СтрокаТаблицы.Ссылка = ПолученныеДанныеСсылка; КонецЕсли; - ИначеЕсли ТаблицыДляЗагрузки <> Неопределено Тогда + КомпонентыОбмена.СчетчикЗагруженныхОбъектов = КомпонентыОбмена.СчетчикЗагруженныхОбъектов + 1; + ОбменДаннымиСервер.РассчитатьПроцентЗагрузки(КомпонентыОбмена.СчетчикЗагруженныхОбъектов, КомпонентыОбмена.КоличествоОбъектовКЗагрузке, КомпонентыОбмена.РазмерФайлаСообщенияОбмена); - ДанныеДляЗаписиВИБ = СтруктураОбъектаXDTOВДанныеИБ(КомпонентыОбмена, ДанныеXDTO, ПравилоКонвертации, "Конвертировать"); + ИначеЕсли СинхронизироватьПоИдентификатору Тогда - ПровестиГенерациюКодаНомераПриНеобходимости(ДанныеДляЗаписиВИБ); - ТаблицаДанныхСообщенияОбмена = КомпонентыОбмена.ТаблицыДанныхСообщенияОбмена.Получить(КлючТаблицыДанных); - - УникальныйИдентификаторСтрокой = ""; - СтрокаТаблицы = Неопределено; - Если ДанныеXDTO.Свойство("Ссылка") Тогда - УникальныйИдентификаторСтрокой = ДанныеXDTO.Ссылка.Значение; - СтрокаТаблицы = ТаблицаДанныхСообщенияОбмена.Найти(УникальныйИдентификаторСтрокой, "УникальныйИдентификатор"); + СсылкаКУдалению = СсылкаОбъектаПоУИДОбъектаXDTO(ДанныеXDTO.Ссылка.Значение, + ПравилоКонвертации.ТипДанных, КомпонентыОбмена); + Если МассивОбъектовКУдалению.Найти(СсылкаКУдалению) = Неопределено Тогда + МассивОбъектовКУдалению.Добавить(СсылкаКУдалению); КонецЕсли; - - Если СтрокаТаблицы = Неопределено Тогда - - СтрокаТаблицы = ТаблицаДанныхСообщенияОбмена.Добавить(); - - СтрокаТаблицы.ТипСтрокой = ТипПриемникаСтрокой; - СтрокаТаблицы.УникальныйИдентификатор = УникальныйИдентификаторСтрокой; - - КонецЕсли; - - // Заполняем значения свойств объекта. - ЗаполнитьЗначенияСвойств(СтрокаТаблицы, ДанныеДляЗаписиВИБ); - СтрокаТаблицы.Ссылка = ПолученныеДанныеСсылка; - КонецЕсли; - КомпонентыОбмена.СчетчикЗагруженныхОбъектов = КомпонентыОбмена.СчетчикЗагруженныхОбъектов + 1; - ОбменДаннымиСервер.РассчитатьПроцентЗагрузки(КомпонентыОбмена.СчетчикЗагруженныхОбъектов, КомпонентыОбмена.КоличествоОбъектовКЗагрузке, КомпонентыОбмена.РазмерФайлаСообщенияОбмена); - - ИначеЕсли (ПравилоКонвертации.ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" - И ДанныеXDTO.Свойство("Ссылка")) - Или ПравилоКонвертации.ВариантИдентификации = "ПоУникальномуИдентификатору" Тогда - МассивОбъектовКУдалению.Добавить(СсылкаОбъектаПоУИДОбъектаXDTO(ДанныеXDTO.Ссылка.Значение, ПравилоКонвертации.ТипДанных, КомпонентыОбмена)); - КонецЕсли; + КонецЦикла; - КонецЦикла; - - КонецЕсли; - + КонецЕсли; + Исключение + ТекстОшибки = Символы.ПС + СтрШаблон(НСтр("ru = 'Событие: %1. + |Объект XDTO: %2. + | + |%3'"), + КомпонентыОбмена.НаправлениеОбмена, + ПредставлениеОбъектаДляПротокола(ОбъектXDTO), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КомпонентыОбмена.СтрокаСообщенияОбОшибке = ""; + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СокрЛП(ТекстОшибки),,,,, Истина); + Прервать; + КонецПопытки; КонецЦикла; - Если КомпонентыОбмена.РежимЗагрузкиДанныхВИнформационнуюБазу Тогда + Если НЕ КомпонентыОбмена.ФлагОшибки И КомпонентыОбмена.РежимЗагрузкиДанныхВИнформационнуюБазу Тогда ПрименитьУдалениеОбъектов(КомпонентыОбмена, МассивОбъектовКУдалению, МассивЗагруженныхОбъектов); УдалитьВременныеОбъектыСозданныеПоСсылкам(КомпонентыОбмена); ОтложенноеЗаполнениеОбъектов(КомпонентыОбмена); - КомпонентыОбмена.МенеджерОбмена.ПослеКонвертации(КомпонентыОбмена); - ВыполнитьОтложенноеПроведениеДокументов(КомпонентыОбмена); - ВыполнитьОтложеннуюЗаписьОбъектов(КомпонентыОбмена); + Если НЕ КомпонентыОбмена.ФлагОшибки Тогда + Попытка + КомпонентыОбмена.МенеджерОбмена.ПослеКонвертации(КомпонентыОбмена); + Исключение + ТекстОшибки = Символы.ПС + СтрШаблон(НСтр("ru = 'Событие: %1. + |Обработчик: ПослеКонвертации. + | + |Ошибка выполнения обработчика. + |%2.'"), + КомпонентыОбмена.НаправлениеОбмена, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КомпонентыОбмена.СтрокаСообщенияОбОшибке = ""; + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СокрЛП(ТекстОшибки),,,,, Истина); + КонецПопытки; + КонецЕсли; + Если НЕ КомпонентыОбмена.ФлагОшибки Тогда + ВыполнитьОтложенноеПроведениеДокументов(КомпонентыОбмена); + ВыполнитьОтложеннуюЗаписьОбъектов(КомпонентыОбмена); + КонецЕсли; КонецЕсли; // Фиксация успешного завершения обмена. @@ -1335,7 +1640,19 @@ ЗаполнитьЗначенияСвойств(ПараметрыСбораСтатистики, ПараметрыАнализа); КонецЕсли; - КомпонентыОбмена.МенеджерОбмена.ПередКонвертацией(КомпонентыОбмена); + Попытка + КомпонентыОбмена.МенеджерОбмена.ПередКонвертацией(КомпонентыОбмена); + Исключение + ТекстОшибки = Символы.ПС + СтрШаблон(НСтр("ru = 'Событие: %1. + |Обработчик: ПередКонвертацией. + | + |Ошибка выполнения обработчика. + |%2.'"), + КомпонентыОбмена.НаправлениеОбмена, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КомпонентыОбмена.СтрокаСообщенияОбОшибке = ""; + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СокрЛП(ТекстОшибки)); + КонецПопытки; // Параметры по умолчанию ПараметрыСбораСтатистики = Новый Структура("СобиратьСтатистикуКлассификаторов", Ложь); @@ -1346,78 +1663,96 @@ МассивОбъектовКУдалению = Новый Массив; МассивЗагруженныхОбъектов = Новый Массив; Пока КомпонентыОбмена.ФайлОбмена.ТипУзла = ТипУзлаXML.НачалоЭлемента Цикл - - // Получаем из файла ОбъектXDTO. - ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML( - КомпонентыОбмена.ФайлОбмена, - ФабрикаXDTO.Тип(КомпонентыОбмена.ФайлОбмена.URIПространстваИмен, КомпонентыОбмена.ФайлОбмена.ЛокальноеИмя)); - - Если ОбъектXDTO.Тип().Имя = "УдалениеОбъекта" Тогда + Попытка + // Получаем из файла ОбъектXDTO. + ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML( + КомпонентыОбмена.ФайлОбмена, + ФабрикаXDTO.Тип(КомпонентыОбмена.ФайлОбмена.URIПространстваИмен, КомпонентыОбмена.ФайлОбмена.ЛокальноеИмя)); - ПрочитатьУдаление(КомпонентыОбмена, ОбъектXDTO, МассивОбъектовКУдалению); - - Иначе - - ПравилоОбработки = ПОДПоТипуОбъектаXDTO(КомпонентыОбмена, ОбъектXDTO.Тип().Имя, Истина); - - Если Не ЗначениеЗаполнено(ПравилоОбработки) Тогда - Возврат; - КонецЕсли; - - // Конвертируем ОбъектXDTO в Структуру. - ДанныеXDTO = ОбъектXDTOВСтруктуру(ОбъектXDTO); - - ИспользованиеПКО = Новый Структура; - Для Каждого ИмяПКО Из ПравилоОбработки.ИспользуемыеПКО Цикл - ИспользованиеПКО.Вставить(ИмяПКО, Истина); - КонецЦикла; - - Если ЗначениеЗаполнено(ПравилоОбработки.ПриОбработке) Тогда - ПриОбработкеПОД( - КомпонентыОбмена, - ПравилоОбработки, - ДанныеXDTO, - ИспользованиеПКО); - КонецЕсли; - - // 1. Поиск правила конвертации. - Для Каждого ТекущееПКО Из ИспользованиеПКО Цикл + Если ОбъектXDTO.Тип().Имя = "УдалениеОбъекта" Тогда - ПравилоКонвертации = КомпонентыОбмена.ПравилаКонвертацииОбъектов.Найти(ТекущееПКО.Ключ, "ИмяПКО"); + ПрочитатьУдаление(КомпонентыОбмена, ОбъектXDTO, МассивОбъектовКУдалению); - Если ТекущееПКО.Значение Тогда - - СтрокаТаблицы = КомпонентыОбмена.ТаблицаДанныхЗаголовкаПакета.Добавить(); - - СтрокаТаблицы.ТипОбъектаСтрокой = ПравилоКонвертации.ТипПолученныхДанныхСтрокой; - СтрокаТаблицы.КоличествоОбъектовВИсточнике = 1; - - СтрокаТаблицы.ТипПриемникаСтрокой = ПравилоКонвертации.ТипПолученныхДанныхСтрокой; - СтрокаТаблицы.ТипИсточникаСтрокой = ОбъектXDTO.Тип().Имя; - - СтрокаТаблицы.ПоляПоиска = ПравилоКонвертации.ПоляПредставленияОбъекта; - СтрокаТаблицы.ПоляТаблицы = ПравилоКонвертации.РеквизитыШапкиПолученныхДанныхСтрокой; - - СтрокаТаблицы.СинхронизироватьПоИдентификатору = (ПравилоКонвертации.ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" - И ДанныеXDTO.Свойство("Ссылка")) Или ПравилоКонвертации.ВариантИдентификации = "ПоУникальномуИдентификатору"; - - СтрокаТаблицы.ИспользоватьПредварительныйПросмотр = СтрокаТаблицы.СинхронизироватьПоИдентификатору; - СтрокаТаблицы.ЭтоКлассификатор = ПравилоКонвертации.ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска"; - СтрокаТаблицы.ЭтоУдалениеОбъекта = Ложь; - - Если СтрокаТаблицы.СинхронизироватьПоИдентификатору Тогда - МассивЗагруженныхОбъектов.Добавить(СсылкаОбъектаПоУИДОбъектаXDTO(ДанныеXDTO.Ссылка.Значение, ПравилоКонвертации.ТипДанных, КомпонентыОбмена)); - КонецЕсли; - - ИначеЕсли (ПравилоКонвертации.ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" - И ДанныеXDTO.Свойство("Ссылка")) - Или ПравилоКонвертации.ВариантИдентификации = "ПоУникальномуИдентификатору" Тогда - МассивОбъектовКУдалению.Добавить(СсылкаОбъектаПоУИДОбъектаXDTO(ДанныеXDTO.Ссылка.Значение, ПравилоКонвертации.ТипДанных, КомпонентыОбмена)); + Иначе + + ПравилоОбработки = ПОДПоТипуОбъектаXDTO(КомпонентыОбмена, ОбъектXDTO.Тип().Имя, Истина); + + Если Не ЗначениеЗаполнено(ПравилоОбработки) Тогда + Возврат; КонецЕсли; - КонецЦикла; - КонецЕсли; - + // Конвертируем ОбъектXDTO в Структуру. + ДанныеXDTO = ОбъектXDTOВСтруктуру(ОбъектXDTO); + + ИспользованиеПКО = Новый Структура; + Для Каждого ИмяПКО Из ПравилоОбработки.ИспользуемыеПКО Цикл + ИспользованиеПКО.Вставить(ИмяПКО, Истина); + КонецЦикла; + + Если ЗначениеЗаполнено(ПравилоОбработки.ПриОбработке) Тогда + ПриОбработкеПОД( + КомпонентыОбмена, + ПравилоОбработки, + ДанныеXDTO, + ИспользованиеПКО); + КонецЕсли; + + // 1. Поиск правила конвертации. + Для Каждого ТекущееПКО Из ИспользованиеПКО Цикл + + ПравилоКонвертации = КомпонентыОбмена.ПравилаКонвертацииОбъектов.Найти(ТекущееПКО.Ключ, "ИмяПКО"); + + ВариантИдентификации = СокрЛП(ПравилоКонвертации.ВариантИдентификации); + СинхронизироватьПоИдентификатору = (ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" + Или ВариантИдентификации = "ПоУникальномуИдентификатору") И ДанныеXDTO.Свойство("Ссылка"); + + Если ТекущееПКО.Значение Тогда + + СтрокаТаблицы = КомпонентыОбмена.ТаблицаДанныхЗаголовкаПакета.Добавить(); + + СтрокаТаблицы.ТипОбъектаСтрокой = ПравилоКонвертации.ТипПолученныхДанныхСтрокой; + СтрокаТаблицы.КоличествоОбъектовВИсточнике = 1; + + СтрокаТаблицы.ТипПриемникаСтрокой = ПравилоКонвертации.ТипПолученныхДанныхСтрокой; + СтрокаТаблицы.ТипИсточникаСтрокой = ОбъектXDTO.Тип().Имя; + + СтрокаТаблицы.ПоляПоиска = ПравилоКонвертации.ПоляПредставленияОбъекта; + СтрокаТаблицы.ПоляТаблицы = СтрСоединить(ПравилоКонвертации.РеквизитыШапкиПолученныхДанных, ","); + + СтрокаТаблицы.СинхронизироватьПоИдентификатору = СинхронизироватьПоИдентификатору; + + СтрокаТаблицы.ИспользоватьПредварительныйПросмотр = СтрокаТаблицы.СинхронизироватьПоИдентификатору; + СтрокаТаблицы.ЭтоКлассификатор = ПравилоКонвертации.ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска"; + СтрокаТаблицы.ЭтоУдалениеОбъекта = Ложь; + + Если СтрокаТаблицы.СинхронизироватьПоИдентификатору Тогда + МассивЗагруженныхОбъектов.Добавить(СсылкаОбъектаПоУИДОбъектаXDTO(ДанныеXDTO.Ссылка.Значение, ПравилоКонвертации.ТипДанных, КомпонентыОбмена)); + КонецЕсли; + + ИначеЕсли СинхронизироватьПоИдентификатору Тогда + + СсылкаКУдалению = СсылкаОбъектаПоУИДОбъектаXDTO(ДанныеXDTO.Ссылка.Значение, + ПравилоКонвертации.ТипДанных, КомпонентыОбмена); + Если МассивОбъектовКУдалению.Найти(СсылкаКУдалению) = Неопределено Тогда + МассивОбъектовКУдалению.Добавить(СсылкаКУдалению); + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + КонецЕсли; + Исключение + ТекстОшибки = Символы.ПС + СтрШаблон(НСтр("ru = 'Событие: %1. + |Объект XDTO: %2. + | + |%3'"), + КомпонентыОбмена.НаправлениеОбмена, + ПредставлениеОбъектаДляПротокола(ОбъектXDTO), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КомпонентыОбмена.СтрокаСообщенияОбОшибке = ""; + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СокрЛП(ТекстОшибки),,,,, Истина); + Прервать; + КонецПопытки; КонецЦикла; ПрименитьУдалениеОбъектов(КомпонентыОбмена, МассивОбъектовКУдалению, МассивЗагруженныхОбъектов); @@ -1428,7 +1763,7 @@ // // Параметры: // КомпонентыОбмена - Структура - содержит все правила и параметры обмена. -// ИмяФайлаОбмена - строка +// ИмяФайлаОбмена - строка. // Процедура ОткрытьФайлВыгрузки(КомпонентыОбмена, ИмяФайлаОбмена = "") Экспорт @@ -1518,7 +1853,7 @@ // // Параметры: // КомпонентыОбмена - Структура - содержит все правила и параметры обмена. -// ИмяФайлаОбмена - строка +// ИмяФайлаОбмена - строка. // Процедура ОткрытьФайлЗагрузки(КомпонентыОбмена, ИмяФайлаОбмена) Экспорт @@ -1535,6 +1870,7 @@ Попытка ЧтениеXML.ОткрытьФайл(ИмяФайлаОбмена); ЧтениеXML.Прочитать(); // Message + КомпонентыОбмена.Вставить("ФайлОбмена", ЧтениеXML); Исключение СтрокаСообщенияОбОшибке = НСтр("ru = 'Ошибка при загрузке данных: %1'"); @@ -1649,7 +1985,10 @@ Прервать; КонецЕсли; - // Удаляем регистрацию изменений. + // Добавляем публичные идентификаторы для ссылочных объектов, о получении которых отчитался узел-корреспондент. + ДобавитьВыгруженныеОбъектыВРегистрПубличныеИдентификаторы(КомпонентыОбмена); + + // Удаляем регистрацию изменений, о получении которых отчитался узел-корреспондент. ПланыОбмена.УдалитьРегистрациюИзменений(КомпонентыОбмена.УзелКорреспондента, КомпонентыОбмена.НомерСообщенияПолученногоКорреспондентом); // Снимаем признак начальной выгрузки данных. @@ -1763,19 +2102,17 @@ УстановитьПривилегированныйРежим(Истина); - // Поиск ссылки по УИД - СсылкаПоУИД = СсылкаПоУИД(ТипЗначенияОбъектаИБ, УИДОбъектаXDTO); - Если Не СсылкаПоУИД.Пустая() И ОбщегоНазначения.СсылкаСуществует(СсылкаПоУИД) Тогда - Возврат СсылкаПоУИД; // Найден объект по уникальному идентификатору ссылки. - КонецЕсли; - // Определение ссылки на объект через публичную ссылку. ПубличнаяСсылка = НайтиСсылкуПоПубличномуИдентификатору(УИДОбъектаXDTO, КомпонентыОбмена, ТипЗначенияОбъектаИБ); Если ПубличнаяСсылка <> Неопределено Тогда - // Переданная ссылка не является публичной. Возврат "битой" ссылки. + // Найден публичный идентификатор. Возврат ПубличнаяСсылка; КонецЕсли; - + + // Поиск ссылки по исходному УИД. + СсылкаПоУИД = СсылкаПоУИД(ТипЗначенияОбъектаИБ, УИДОбъектаXDTO, КомпонентыОбмена.УзелКорреспондента); + + // Найдена ссылка по УИД или создана новая ссылка. Возврат СсылкаПоУИД; КонецФункции @@ -1826,7 +2163,14 @@ ЗаписатьОбъект = Ложь; - ЗаписатьИнформациюОбОшибкеВПротокол(26, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Объект, КомпонентыОбмена, Тип); + ЗП = ПолучитьСтруктуруЗаписиПротокола(26, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗП.Объект = Объект; + + Если Тип <> Неопределено Тогда + ЗП.ТипОбъекта = Тип; + КонецЕсли; + + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, 26, ЗП); ВызватьИсключение КомпонентыОбмена.СтрокаСообщенияОбОшибке; @@ -1881,7 +2225,7 @@ // Параметры: // КомпонентыОбмена - Структура - содержит все правила и параметры обмена. // Объект - ДокументОбъект (загруженный документ). -// РегистрироватьПроблемыВРезультатахОбмена - Булево +// РегистрироватьПроблемыВРезультатахОбмена - Булево. // Процедура ВыполнитьПроведениеДокументаПриЗагрузке( КомпонентыОбмена, @@ -1958,6 +2302,8 @@ Объект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); + ПроведениеДокументаОтменено = Ложь; + НачатьТранзакцию(); Попытка @@ -1965,18 +2311,57 @@ Объект.Проведен = Ложь; Объект.Записать(); - УдалитьДвиженияУДокумента(Объект, Отказ); - + ОбменДаннымиСервер.УдалитьДвиженияУДокумента(Объект); + ПроведениеДокументаОтменено = Истина; ЗафиксироватьТранзакцию(); - - Возврат Истина; Исключение ОтменитьТранзакцию(); - Возврат Ложь; КонецПопытки; + Возврат ПроведениеДокументаОтменено; + КонецФункции +// Процедура заполняет табличную часть объекта с учетом предыдущей версии табличной части (до загрузки данных). +// +// Параметры: +// ТабличнаяЧастьОбъектаПослеОбработки - Табличная часть, которая содержит измененные данные. +// ТабличнаяЧастьОбъектаДоОбработки - Таблица значений, содержимое табличной части объекта до загрузки данных. +// КлючевыеПоля - Колонки, по которым происходит поиск строк в табличной части (строка через +// запятую). +// КолонкиДляВключения - Другие колонки (кроме ключевых), значения которых должны измениться (строка +// через запятую). +// КолонкиДляИсключения - Колонки, значения которых не должны измениться (строка через запятую). +// +Процедура ЗаполнитьТабличнуюЧастьОбъектаНачальнымиДанными( + ТабличнаяЧастьОбъектаПослеОбработки, + ТабличнаяЧастьОбъектаДоОбработки, + Знач КлючевыеПоля = "", + КолонкиДляВключения = "", + КолонкиДляИсключения = "") Экспорт + + Если ТипЗнч(КлючевыеПоля) = Тип("Строка") Тогда + Если КлючевыеПоля = "" Тогда + Возврат; // Без ключевых полей нельзя получить соответствие новых и старых данных. + Иначе + КлючевыеПоля = СтрРазделить(КлючевыеПоля, ","); + КонецЕсли; + КонецЕсли; + + СоответствиеСтарыхИНовыхДанныхТЧ = СоответствиеСтарыхИНовыхДанныхТЧ( + ТабличнаяЧастьОбъектаПослеОбработки, + ТабличнаяЧастьОбъектаДоОбработки, + КлючевыеПоля); + + Для Каждого СтрокаНовойТЧ Из ТабличнаяЧастьОбъектаПослеОбработки Цикл + СтрокаСтаройТЧ = СоответствиеСтарыхИНовыхДанныхТЧ.Получить(СтрокаНовойТЧ); + Если СтрокаСтаройТЧ <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(СтрокаНовойТЧ, СтрокаСтаройТЧ, КолонкиДляВключения, КолонкиДляИсключения); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + #КонецОбласти #КонецОбласти @@ -2011,26 +2396,6 @@ КонецФункции -// Создает таблицу значений для хранения правил конвертации свойств объекта. -// -// Возвращаемое значение: -// Таблица значений -// -Функция ИнициализироватьТаблицуСвойствДляПравилаКонвертации() Экспорт - - ТаблицаПКС = Новый ТаблицаЗначений; - ТаблицаПКС.Колонки.Добавить("СвойствоКонфигурации", Новый ОписаниеТипов("Строка")); - ТаблицаПКС.Колонки.Добавить("СвойствоФормата", Новый ОписаниеТипов("Строка")); - ТаблицаПКС.Колонки.Добавить("ПравилоКонвертацииСвойства", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(50))); - ТаблицаПКС.Колонки.Добавить("ИспользуетсяАлгоритмКонвертации", Новый ОписаниеТипов("Булево")); - ТаблицаПКС.Колонки.Добавить("ОбработкаКлючевогоСвойства", Новый ОписаниеТипов("Булево")); - ТаблицаПКС.Колонки.Добавить("ОбработкаПоисковогоСвойства", Новый ОписаниеТипов("Булево")); - ТаблицаПКС.Колонки.Добавить("ИмяТЧ", Новый ОписаниеТипов("Строка")); - - Возврат ТаблицаПКС; - -КонецФункции - // Получает правила регистрации объектов для плана обмена. // // Возвращаемое значение: @@ -2072,127 +2437,6 @@ #КонецОбласти -#Область ОтправкаДанных - -// Выполняет выгрузку объекта информационной базы. -// -// Параметры: -// КомпонентыОбмена - Структура - содержит все правила и параметры обмена. -// Объект - Ссылка на объект информационной базы. -// ПравилоОбработки - Строка таблицы значений правил обработки данных, -// соответствующая правилу обработки типа выгружаемого объекта. -// Если ПравилоОбработки не задано, оно будет найдено по объекту метаданных выгружаемого объекта. -// -Процедура ВыгрузкаОбъектаВыборки(КомпонентыОбмена, Объект, ПравилоОбработки = Неопределено) Экспорт - - ЗаписьXML = КомпонентыОбмена.ФайлОбмена; - Если ТипЗнч(Объект) <> Тип("Структура") Тогда - Попытка - ТекОбъект = Объект.Ссылка; - Исключение - ТекОбъект = Объект; - КонецПопытки; - - КомпонентыОбмена.ВыгруженныеОбъекты.Добавить(ТекОбъект); - - ОбъектМетаданныхТекущий = Объект.Метаданные(); - ПравилоОбработки = ПОДПоОбъектуМетаданных(КомпонентыОбмена, ОбъектМетаданныхТекущий); - - Иначе - КомпонентыОбмена.ВыгруженныеОбъекты.Добавить(Объект); - КонецЕсли; - - // Отработка ПОД - ИспользованиеПКО = Новый Структура; - Для Каждого ИмяПКО Из ПравилоОбработки.ИспользуемыеПКО Цикл - ИспользованиеПКО.Вставить(ИмяПКО, Истина); - КонецЦикла; - - Если ЗначениеЗаполнено(ПравилоОбработки.ПриОбработке) Тогда - ПриОбработкеПОД( - КомпонентыОбмена, - ПравилоОбработки, - Объект, - ИспользованиеПКО); - КонецЕсли; - - // Отработка ПКО - НесколькоПКО = (ПравилоОбработки.ИспользуемыеПКО.Количество() > 1); - Для Каждого ТекущееПКО Из ИспользованиеПКО Цикл - - Если Не ТекущееПКО.Значение Тогда - // Если правил конвертации несколько, и некоторые из них не используются - - // необходимо выгрузить удаление объекта на случай если ранее он был выгружен по этим правилам. - - Если НесколькоПКО Тогда - ПравилоКонвертации = КомпонентыОбмена.ПравилаКонвертацииОбъектов.Найти(ТекущееПКО.Ключ, "ИмяПКО"); - ВыгрузитьУдаление(КомпонентыОбмена, Объект.Ссылка, ПравилоКонвертации); - КонецЕсли; - - Продолжить; - КонецЕсли; - - // 1. Поиск правила конвертации. - - ПравилоКонвертации = КомпонентыОбмена.ПравилаКонвертацииОбъектов.Найти(ТекущееПКО.Ключ, "ИмяПКО"); - - // 2. Конвертируем Данные в Структуру по правилам конвертации. - ДанныеXDTO = ДанныеXDTOИзДанныхИБ(КомпонентыОбмена, Объект, ПравилоКонвертации, Неопределено); - - // 3. Конвертируем Структуру в ОбъектXDTO. - СсылкиИзОбъекта = Новый Массив; - ОбъектXDTO = ОбъектXDTOИзДанныхXDTO(КомпонентыОбмена, ДанныеXDTO, ПравилоКонвертации.ТипXDTO,,СсылкиИзОбъекта); - - Попытка - ОбъектXDTO.Проверить(); - Исключение - ТекстОписаниеОшибки = "" + ОписаниеОшибки() + Символы.ПС + СокрЛП(Объект); - ЗаписатьВПротоколВыполнения(КомпонентыОбмена, ТекстОписаниеОшибки); - Возврат; - КонецПопытки; - - Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда - - Для Каждого ЗначениеСсылки Из СсылкиИзОбъекта Цикл - - Если КомпонентыОбмена.ВыгруженныеОбъекты.Найти(ЗначениеСсылки) = Неопределено - И ВыгружатьОбъектПоНеобходимости(КомпонентыОбмена, ЗначениеСсылки) Тогда - - Если Не РегистрыСведений.ДанныеОбъектовДляРегистрацииВОбменах.ОбъектЕстьВРегистре( - ЗначениеСсылки, КомпонентыОбмена.УзелКорреспондента) Тогда - - ОбъектВыгружаемыйПоСсылке = Неопределено; - - Если ОбщегоНазначения.СсылкаСуществует(ЗначениеСсылки) Тогда - ОбъектВыгружаемыйПоСсылке = ЗначениеСсылки.ПолучитьОбъект(); - КонецЕсли; - - Если ОбъектВыгружаемыйПоСсылке <> Неопределено Тогда - - ВыгрузкаОбъектаВыборки(КомпонентыОбмена, ОбъектВыгружаемыйПоСсылке); - КомпонентыОбмена.ВыгруженныеПоСсылкеОбъекты.Добавить(ЗначениеСсылки); - РегистрыСведений.ДанныеОбъектовДляРегистрацииВОбменах.ДобавитьОбъектВФильтрРазрешенныхОбъектов( - ЗначениеСсылки, КомпонентыОбмена.УзелКорреспондента); - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - КонецЦикла; - - КонецЕсли; - - // 4. Записываем ОбъектXDTO в XML-файл. - ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXDTO); - - КонецЦикла; - -КонецПроцедуры - -#КонецОбласти - #Область ПолучениеДанные // Функция проверяет формат сообщения обмена: соответствует ли он формату обмена через EnterpriseData. @@ -2242,7 +2486,7 @@ // // Параметры: // УзелИнформационнойБазы - ссылка на узел - корреспондент. -// ВерсияФормата - Строка +// ВерсияФормата - Строка. // Функция МенеджерОбменаВерсииФормата(Знач УзелИнформационнойБазы, Знач ВерсияФормата) Экспорт @@ -2261,11 +2505,11 @@ // Возвращает строку с форматом обмена. // Формат обмена включает: // Базовый формат, предусмотренный для плана обмена. -// Версию базового формата +// Версию базового формата. // // Параметры: // УзелИнформационнойБазы - ссылка на узел - корреспондент. -// ВерсияФормата - Строка +// ВерсияФормата - Строка. // Функция ФорматОбмена(Знач УзелИнформационнойБазы, Знач ВерсияФормата) Экспорт @@ -2402,7 +2646,7 @@ // Уровень - Уровень сообщения журнала регистрации (по умолчанию Ошибка). // КомпонентыОбмена - Структура - содержит все правила и параметры обмена. // -Процедура ЗаписьЖурналаРегистрацииОбменДанными(Комментарий, КомпонентыОбмена, Уровень = Неопределено) Экспорт +Процедура ЗаписьЖурналаРегистрацииОбменДанными(Комментарий, КомпонентыОбмена, Уровень = Неопределено, СсылкаНаОбъект = Неопределено) Экспорт УзелКорреспондента = КомпонентыОбмена.УзелКорреспондента; КлючСообщенияЖурналаРегистрации = КомпонентыОбмена.КлючСообщенияЖурналаРегистрации; @@ -2420,7 +2664,7 @@ КонецЕсли; - ЗаписьЖурналаРегистрации(КлючСообщенияЖурналаРегистрации, Уровень, ОбъектМетаданных,, Комментарий); + ЗаписьЖурналаРегистрации(КлючСообщенияЖурналаРегистрации, Уровень, ОбъектМетаданных, СсылкаНаОбъект, Комментарий); КонецПроцедуры @@ -2433,7 +2677,7 @@ #Область ИнициализацияОбмена Функция ТаблицаПравилОбработкиДанных(XMLСхема, МенеджерОбмена , НаправлениеОбмена) - // Инициализация таблицы правил обработки данных + // Инициализация таблицы правил обработки данных. ПравилаОбработкиДанных = Новый ТаблицаЗначений; ПравилаОбработкиДанных.Колонки.Добавить("Имя"); ПравилаОбработкиДанных.Колонки.Добавить("ОбъектВыборкиФормат"); @@ -2486,7 +2730,7 @@ Функция ТаблицаПравилКонвертации(XMLСхема, МенеджерОбмена , НаправлениеОбмена, ПравилаОбработкиДанных) - // Инициализация таблицы правил конвертации + // Инициализация таблицы правил конвертации. ПравилаКонвертации = Новый ТаблицаЗначений; ПравилаКонвертации.Колонки.Добавить("ИмяПКО", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(50))); ПравилаКонвертации.Колонки.Добавить("ОбъектДанных"); @@ -2498,7 +2742,7 @@ ПравилаКонвертации.Колонки.Добавить("ПоляПоиска", Новый ОписаниеТипов("Массив")); ПравилаКонвертации.Колонки.Добавить("СвойстваТабличныхЧастей", Новый ОписаниеТипов("Структура")); ПравилаКонвертации.Колонки.Добавить("ПоляПредставленияОбъекта", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(300))); - ПравилаКонвертации.Колонки.Добавить("РеквизитыШапкиПолученныхДанныхСтрокой", Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(1000))); + ПравилаКонвертации.Колонки.Добавить("РеквизитыШапкиПолученныхДанных", Новый ОписаниеТипов("Массив")); ПравилаКонвертации.Колонки.Добавить("ПриОтправкеДанных", Новый ОписаниеТипов("Строка")); ПравилаКонвертации.Колонки.Добавить("ПриКонвертацииДанныхXDTO", Новый ОписаниеТипов("Строка")); ПравилаКонвертации.Колонки.Добавить("ПередЗаписьюПолученныхДанных", Новый ОписаниеТипов("Строка")); @@ -2516,11 +2760,11 @@ ПараметрыОтбора = Новый Структура("РазрешитьСоздаватьОбъектИзСтруктуры", Неопределено); СтрокиДляОбработки = ПравилаКонвертации.НайтиСтроки(ПараметрыОтбора); - // Для найденых строк необходимо заполнить реквизит "РазрешитьСоздаватьОбъектИзСтруктуры". + // Для найденных строк необходимо заполнить реквизит "РазрешитьСоздаватьОбъектИзСтруктуры". // Реквизит заполняется по следующему алгоритму: // если правило конвертации объекта формата не указано // в правилах обработки данных для данного объекта формата, - // тогда реквзит заполняется значением "Истина", + // тогда реквизит заполняется значением "Истина", // т.к. полученные по этому ПКО данные не смогут быть загружены самостоятельно, // иначе заполняем значением "Ложь". Для Каждого СтрокаОбработки Из СтрокиДляОбработки Цикл @@ -2534,7 +2778,7 @@ КонецЕсли; - // Добавляем служебные поля таблицы правил конвертации + // Добавляем служебные поля таблицы правил конвертации. ПравилаКонвертации.Колонки.Добавить("ТипXDTO"); ПравилаКонвертации.Колонки.Добавить("ТипСсылкиXDTO"); ПравилаКонвертации.Колонки.Добавить("ТипКлючевыхСвойствОбъектаXDTO"); @@ -2544,7 +2788,7 @@ ПравилаКонвертации.Колонки.Добавить("ПолноеИмя"); ПравилаКонвертации.Колонки.Добавить("ЭтоДокумент"); - ПравилаКонвертации.Колонки.Добавить("ЭтоРегистрСведений"); + ПравилаКонвертации.Колонки.Добавить("ЭтоРегистр"); ПравилаКонвертации.Колонки.Добавить("ЭтоСправочник"); ПравилаКонвертации.Колонки.Добавить("ЭтоПеречисление"); ПравилаКонвертации.Колонки.Добавить("ЭтоПланВидовХарактеристик"); @@ -2581,37 +2825,28 @@ ПравилоКонвертации.ИмяТаблицыПолученныхДанных = МетаданныеОбъекта.ПолноеИмя(); ПравилоКонвертации.ПредставлениеТипаПолученныхДанных = МетаданныеОбъекта.Представление(); - ПравилоКонвертации.ТипПолученныхДанныхСтрокой = ИмяТипаДанныхПоОбъектуМетаданных(ПравилоКонвертации.ОбъектДанных, Неопределено); + ПравилоКонвертации.ТипПолученныхДанныхСтрокой = ИмяТипаДанныхПоОбъектуМетаданных(ПравилоКонвертации.ОбъектДанных); ПравилоКонвертации.ПоляПредставленияОбъекта = ?(ПравилоКонвертации.ПоляПоиска.Количество() = 0, "", ПравилоКонвертации.ПоляПоиска[0]); - // Реквизиты объекта получаемых данных - РеквизитыСтрокой = ""; - Для Каждого Реквизит Из МетаданныеОбъекта.Реквизиты Цикл - РеквизитыСтрокойКопия = РеквизитыСтрокой; - РеквизитыСтрокой = РеквизитыСтрокой + ?(ПустаяСтрока(РеквизитыСтрокой), "", ",") + Реквизит.Имя; - Если СтрДлина(РеквизитыСтрокой) > 1000 Тогда - РеквизитыСтрокой = РеквизитыСтрокойКопия; - Прервать; - КонецЕсли; - КонецЦикла; - + // Реквизиты объекта получаемых данных. + РеквизитыМассив = Новый Массив; Для Каждого Реквизит Из МетаданныеОбъекта.СтандартныеРеквизиты Цикл Если Реквизит.Имя = "Наименование" ИЛИ Реквизит.Имя = "Код" + ИЛИ Реквизит.Имя = "ЭтоГруппа" ИЛИ Реквизит.Имя = "Родитель" ИЛИ Реквизит.Имя = "Владелец" ИЛИ Реквизит.Имя = "Дата" ИЛИ Реквизит.Имя = "Номер" Тогда - РеквизитыСтрокойКопия = РеквизитыСтрокой; - РеквизитыСтрокой = РеквизитыСтрокой + ?(ПустаяСтрока(РеквизитыСтрокой), "", ",") + Реквизит.Имя; - Если СтрДлина(РеквизитыСтрокой) > 1000 Тогда - РеквизитыСтрокой = РеквизитыСтрокойКопия; - Прервать; - КонецЕсли; + РеквизитыМассив.Добавить(Реквизит.Имя); КонецЕсли; КонецЦикла; - ПравилоКонвертации.РеквизитыШапкиПолученныхДанныхСтрокой = РеквизитыСтрокой; + Для Каждого Реквизит Из МетаданныеОбъекта.Реквизиты Цикл + РеквизитыМассив.Добавить(Реквизит.Имя); + КонецЦикла; + + ПравилоКонвертации.РеквизитыШапкиПолученныхДанных = РеквизитыМассив; ПравилоКонвертации.ЕстьОбработчикПриКонвертацииДанныхXDTO = Не ПустаяСтрока(ПравилоКонвертации.ПриКонвертацииДанныхXDTO); ПравилоКонвертации.ЕстьОбработчикПередЗаписьюПолученныхДанных = Не ПустаяСтрока(ПравилоКонвертации.ПередЗаписьюПолученныхДанных); @@ -2628,14 +2863,19 @@ ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(ПравилоКонвертации.ОбъектДанных); - ПравилоКонвертации.ТипДанных = Тип(ИмяТипаДанныхПоОбъектуМетаданных(ПравилоКонвертации.ОбъектДанных, ИмяБазовогоТипа)); + ПравилоКонвертации.ТипДанных = Тип(ИмяТипаДанныхПоОбъектуМетаданных(ПравилоКонвертации.ОбъектДанных)); Иначе ИмяБазовогоТипа = ""; КонецЕсли; + Если ПравилоКонвертации.ОбъектДанных <> Неопределено Тогда + ПравилоКонвертации.ЭтоРегистр = ОбщегоНазначения.ЭтоРегистр(ПравилоКонвертации.ОбъектДанных); + Иначе + ПравилоКонвертации.ЭтоРегистр = Ложь; + КонецЕсли; + ПравилоКонвертации.ЭтоДокумент = (ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаДокументы()); - ПравилоКонвертации.ЭтоРегистрСведений = (ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыСведений()); ПравилоКонвертации.ЭтоСправочник = (ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаСправочники()); ПравилоКонвертации.ЭтоПеречисление = (ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаПеречисления()); ПравилоКонвертации.ЭтоПланВидовХарактеристик = (ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаПланыВидовХарактеристик()); @@ -2720,7 +2960,7 @@ КонецЦикла; - // Добавляем индексы таблицы правил конвертации + // Добавляем индексы таблицы правил конвертации. Если НаправлениеОбмена = "Отправка" Тогда ПравилаКонвертации.Индексы.Добавить("ТипДанных"); @@ -2754,7 +2994,7 @@ Для Каждого ПравилоКонвертации Из ПравилаКонвертации Цикл ПравилоКонвертации.ТипXDTO = ФабрикаXDTO.Тип(XMLСхема, ПравилоКонвертации.ТипXDTO); - ПравилоКонвертации.ТипДанных = Тип(ИмяТипаДанныхПоОбъектуМетаданных(ПравилоКонвертации.ТипДанных, Неопределено)); + ПравилоКонвертации.ТипДанных = Тип(ИмяТипаДанныхПоОбъектуМетаданных(ПравилоКонвертации.ТипДанных)); КонецЦикла; @@ -2815,33 +3055,48 @@ // 6. Записываем ОбъектXDTO в XML-файл. Пока ВыборкаИзменений.Следующий() Цикл - - КомпонентыОбмена.СчетчикВыгруженныхОбъектов = КомпонентыОбмена.СчетчикВыгруженныхОбъектов + 1; - ОбменДаннымиСервер.РассчитатьПроцентВыгрузки(КомпонентыОбмена.СчетчикВыгруженныхОбъектов, КомпонентыОбмена.КоличествоОбъектовКВыгрузке); - - // 1. Получаем Данные из ИБ - Данные = ВыборкаИзменений.Получить(); - - // 2. Отправляем информацию об удалении либо выгружаем данные. - Если ТипЗнч(Данные) = Тип("УдалениеОбъекта") Тогда - ВыгрузитьУдаление(КомпонентыОбмена, Данные.Ссылка); - Иначе + Попытка + КомпонентыОбмена.СчетчикВыгруженныхОбъектов = КомпонентыОбмена.СчетчикВыгруженныхОбъектов + 1; + ОбменДаннымиСервер.РассчитатьПроцентВыгрузки(КомпонентыОбмена.СчетчикВыгруженныхОбъектов, КомпонентыОбмена.КоличествоОбъектовКВыгрузке); - ОтправкаЭлемента = ОтправкаЭлементаДанных.Авто; - ОбменДаннымиСобытия.ПриОтправкеДанныхКорреспонденту(Данные, ОтправкаЭлемента, НачальнаяВыгрузкаДанных, УзелДляОбменаОбъект); + // 1. Получаем Данные из ИБ + Данные = ВыборкаИзменений.Получить(); - Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить Тогда + // 2. Отправляем информацию об удалении либо выгружаем данные. + Если ТипЗнч(Данные) = Тип("УдалениеОбъекта") Тогда ВыгрузитьУдаление(КомпонентыОбмена, Данные.Ссылка); - ИначеЕсли ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда - // Ситуация, когда объект не соответствует условиям фильтра, но его не нужно отправлять как удаление. - // Возникает в случае первоначальной выгрузки данных. - Продолжить; Иначе - ВыгрузкаОбъектаВыборки(КомпонентыОбмена, Данные); + + ОтправкаЭлемента = ОтправкаЭлементаДанных.Авто; + ОбменДаннымиСобытия.ПриОтправкеДанныхКорреспонденту(Данные, ОтправкаЭлемента, НачальнаяВыгрузкаДанных, УзелДляОбменаОбъект, Ложь); + + // Удаление регистра отсылаем в виде пустого набора записей. + Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить + И ОбщегоНазначения.ЭтоРегистр(Данные.Метаданные()) Тогда + ОтправкаЭлемента = ОтправкаЭлементаДанных.Авто; + КонецЕсли; + + Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить Тогда + ВыгрузитьУдаление(КомпонентыОбмена, Данные.Ссылка); + ИначеЕсли ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда + // Ситуация, когда объект не соответствует условиям фильтра, но его не нужно отправлять как удаление. + // Возникает в случае первоначальной выгрузки данных. + Продолжить; + Иначе + ВыгрузкаОбъектаВыборки(КомпонентыОбмена, Данные); + КонецЕсли; + КонецЕсли; - - КонецЕсли; - + Исключение + ТекстОшибки = Символы.ПС + СтрШаблон(НСтр("ru = 'Событие: %1. + |Объект: %2. + | + |%3'"), + КомпонентыОбмена.НаправлениеОбмена, + ПредставлениеОбъектаДляПротокола(Данные.Ссылка), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение ТекстОшибки; + КонецПопытки; КонецЦикла; КонецПроцедуры @@ -2926,9 +3181,11 @@ КонецПроцедуры -// Параметры: -// Ссылка - удаленный объект -// КомпонентыОбмена - структура, содержит все ключевые данные для обмена (ПКО, ПКПД, ПОД и т.д.). +// Параметры: +// КомпонентыОбмена - структура, содержит все ключевые данные для обмена (ПКО, ПКПД, ПОД и т.д.). +// Ссылка - удаленный объект. +// ПравилоКонвертации - Строка таблицы правил конвертации объектов, в соответствии с которой выполняется преобразование. +// Процедура ВыгрузитьУдаление(КомпонентыОбмена, Ссылка, ПравилоКонвертации = Неопределено) Если ПравилоКонвертации <> Неопределено Тогда @@ -3103,93 +3360,105 @@ ЗначениеXDTO = Источник.ПолучитьXDTO(Свойство); - Если ТипЗнч(ЗначениеXDTO) = Тип("ЗначениеXDTO") Тогда + Попытка - Значение = ПрочитатьЗначениеXDTO(ЗначениеXDTO); - - Если ТипЗнч(Приемник) = Тип("Структура") Тогда - Приемник.Вставить(ИмяСвойства, Значение); - Иначе - Приемник[ИмяСвойства] = Значение; - КонецЕсли; - - ИначеЕсли ТипЗнч(ЗначениеXDTO) = Тип("ОбъектXDTO") Тогда - - // В свойстве могут находиться: - // - дополнительная информация - // - табличная часть - // - набор ключевых свойств - // - набор общих свойств - // - свойство составного типа. - - Если ИмяСвойства = "AdditionalInfo" Тогда // Дополнительная информация - - Значение = СериализаторXDTO.ПрочитатьXDTO(ЗначениеXDTO); - Приемник.Вставить(ИмяСвойства, Значение); - - ИначеЕсли ЭтоТаблицаОбъекта(Свойство) Тогда - - // Инициализируем таблицу значений, которая отображает табличную часть объекта. - Значение = ТаблицаОбъектаПоТипу(Свойство.Тип.Свойства[0].Тип); - - ТабличнаяЧастьXDTO = Источник[ИмяСвойства].Строка; - - Для Индекс = 0 По ТабличнаяЧастьXDTO.Количество() - 1 Цикл - - СтрокаТЧ = Значение.Добавить(); - СтрокаXDTO = ТабличнаяЧастьXDTO.ПолучитьXDTO(Индекс); - Для Каждого СвойствоСтрокиТЧ Из СтрокаXDTO.Свойства() Цикл - - КонвертацияСвойстваXDTOВЭлементСтруктуры(СтрокаXDTO, СвойствоСтрокиТЧ, СтрокаТЧ); - - КонецЦикла; - - КонецЦикла; - - Приемник.Вставить(ИмяСвойства, Значение); - - ИначеЕсли СтрНайти(ЗначениеXDTO.Тип().Имя, "КлючевыеСвойства") > 0 Тогда - - Значение = Новый Структура("ЭтоНаборКлючевыхСвойств"); - Значение.Вставить("ТипЗначения", СтрЗаменить(ЗначениеXDTO.Тип().Имя, "КлючевыеСвойства", "")); - Для Каждого КлючевоеСвойство Из ЗначениеXDTO.Свойства() Цикл - КонвертацияСвойстваXDTOВЭлементСтруктуры(ЗначениеXDTO, КлючевоеСвойство, Значение); - КонецЦикла; + Если ТипЗнч(ЗначениеXDTO) = Тип("ЗначениеXDTO") Тогда + Значение = ПрочитатьЗначениеXDTO(ЗначениеXDTO); Если ТипЗнч(Приемник) = Тип("Структура") Тогда Приемник.Вставить(ИмяСвойства, Значение); Иначе + Если ТипЗнч(Приемник) = Тип("СтрокаТаблицыЗначений") + И Приемник.Владелец().Колонки.Найти(ИмяСвойства) = Неопределено Тогда + Возврат; + КонецЕсли; Приемник[ИмяСвойства] = Значение; КонецЕсли; - ИначеЕсли СтрНайти(ЗначениеXDTO.Тип().Имя, "ОбщиеСвойства") > 0 Тогда + ИначеЕсли ТипЗнч(ЗначениеXDTO) = Тип("ОбъектXDTO") Тогда - Для Каждого ПодСвойство Из ЗначениеXDTO.Свойства() Цикл - - КонвертацияСвойстваXDTOВЭлементСтруктуры(ЗначениеXDTO, ПодСвойство, Приемник); - - КонецЦикла; + // В свойстве могут находиться: + // - дополнительная информация + // - табличная часть + // - набор ключевых свойств + // - набор общих свойств + // - свойство составного типа. - Иначе - - // Свойство составного типа - Значение = Неопределено; - Для Каждого ПодСвойство Из ЗначениеXDTO.Свойства() Цикл + Если ИмяСвойства = "AdditionalInfo" Тогда // Дополнительная информация - Если НЕ ЗначениеXDTO.Установлено(ПодСвойство) Тогда - Продолжить; + Значение = СериализаторXDTO.ПрочитатьXDTO(ЗначениеXDTO); + Приемник.Вставить(ИмяСвойства, Значение); + + ИначеЕсли ЭтоТаблицаОбъекта(Свойство) Тогда + + // Инициализируем таблицу значений, которая отображает табличную часть объекта. + Значение = ТаблицаОбъектаПоТипу(Свойство.Тип.Свойства[0].Тип); + + ТабличнаяЧастьXDTO = Источник[ИмяСвойства].Строка; + + Для Индекс = 0 По ТабличнаяЧастьXDTO.Количество() - 1 Цикл + + СтрокаТЧ = Значение.Добавить(); + СтрокаXDTO = ТабличнаяЧастьXDTO.ПолучитьXDTO(Индекс); + Для Каждого СвойствоСтрокиТЧ Из СтрокаXDTO.Свойства() Цикл + + КонвертацияСвойстваXDTOВЭлементСтруктуры(СтрокаXDTO, СвойствоСтрокиТЧ, СтрокаТЧ); + + КонецЦикла; + + КонецЦикла; + + Приемник.Вставить(ИмяСвойства, Значение); + + ИначеЕсли СтрНайти(ЗначениеXDTO.Тип().Имя, "КлючевыеСвойства") > 0 Тогда + + Значение = Новый Структура("ЭтоНаборКлючевыхСвойств"); + Значение.Вставить("ТипЗначения", СтрЗаменить(ЗначениеXDTO.Тип().Имя, "КлючевыеСвойства", "")); + Для Каждого КлючевоеСвойство Из ЗначениеXDTO.Свойства() Цикл + КонвертацияСвойстваXDTOВЭлементСтруктуры(ЗначениеXDTO, КлючевоеСвойство, Значение); + КонецЦикла; + + + Если ТипЗнч(Приемник) = Тип("Структура") Тогда + Приемник.Вставить(ИмяСвойства, Значение); + Иначе + Приемник[ИмяСвойства] = Значение; КонецЕсли; - КонвертацияСвойстваXDTOВЭлементСтруктуры(ЗначениеXDTO, ПодСвойство, Приемник, ИмяСвойства); - Прервать; + ИначеЕсли СтрНайти(ЗначениеXDTO.Тип().Имя, "ОбщиеСвойства") > 0 Тогда - КонецЦикла; + Для Каждого ПодСвойство Из ЗначениеXDTO.Свойства() Цикл + + КонвертацияСвойстваXDTOВЭлементСтруктуры(ЗначениеXDTO, ПодСвойство, Приемник); + + КонецЦикла; + + Иначе + + // Свойство составного типа + Значение = Неопределено; + Для Каждого ПодСвойство Из ЗначениеXDTO.Свойства() Цикл + + Если НЕ ЗначениеXDTO.Установлено(ПодСвойство) Тогда + Продолжить; + КонецЕсли; + + КонвертацияСвойстваXDTOВЭлементСтруктуры(ЗначениеXDTO, ПодСвойство, Приемник, ИмяСвойства); + Прервать; + + КонецЦикла; + + КонецЕсли; КонецЕсли; - - КонецЕсли; - + Исключение + ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ТекстОшибки = СтрШаблон(НСтр("ru = 'Ошибка чтения объекта XDTO, имя свойства: <%1>.'"), ИмяСвойства) + + Символы.ПС + Символы.ПС + ПредставлениеОшибки; + ВызватьИсключение ТекстОшибки; + КонецПопытки; + КонецПроцедуры Функция ПрочитатьЗначениеXDTO(ЗначениеXDTO) @@ -3262,60 +3531,72 @@ НомерЭтапа = 1, СоставСвойств = "Все") - Для Каждого ПКС Из ПравилоКонвертации.Свойства Цикл - - Если СоставСвойств = "СвойстваПоиска" - И Не ПКС.ОбработкаПоисковогоСвойства Тогда - Продолжить; - КонецЕсли; - - КонвертацияСвойстваСтруктурыОбъектаXDTO( - КомпонентыОбмена, - ДанныеXDTO, - ПолученныеДанные.ДополнительныеСвойства, - ПолученныеДанные, - ПКС, - НомерЭтапа); - - КонецЦикла; - - Если СоставСвойств = "СвойстваПоиска" Или НомерЭтапа = 1 Тогда - // Табличные части конвертируются только после выполнения обработчика ПКО. - Возврат; - КонецЕсли; - - Для Каждого ТЧ Из ПравилоКонвертации.СвойстваТабличныхЧастей Цикл - - Если ПолученныеДанные.ДополнительныеСвойства.Свойство(ТЧ.Ключ) Тогда + Попытка + Для Каждого ПКС Из ПравилоКонвертации.Свойства Цикл - МассивСтруктурСДаннымиСтрок = ПолученныеДанные.ДополнительныеСвойства[ТЧ.Ключ]; - Для НомерСтроки = 1 По МассивСтруктурСДаннымиСтрок.Количество() Цикл + Если СоставСвойств = "СвойстваПоиска" + И Не ПКС.ОбработкаПоисковогоСвойства Тогда + Продолжить; + КонецЕсли; + + КонвертацияСвойстваСтруктурыОбъектаXDTO( + КомпонентыОбмена, + ДанныеXDTO, + ПолученныеДанные.ДополнительныеСвойства, + ПолученныеДанные, + ПКС, + НомерЭтапа); + + КонецЦикла; + + Если СоставСвойств = "СвойстваПоиска" Или НомерЭтапа = 1 Тогда + // Табличные части конвертируются только после выполнения обработчика ПКО. + Возврат; + КонецЕсли; + + Для Каждого ТЧ Из ПравилоКонвертации.СвойстваТабличныхЧастей Цикл + + Если ПолученныеДанные.ДополнительныеСвойства.Свойство(ТЧ.Ключ) Тогда - СтруктураСДаннымиСтроки = МассивСтруктурСДаннымиСтрок[НомерСтроки - 1]; - - Если НомерЭтапа = 2 Тогда - СтрокаТЧ = ПолученныеДанные[ТЧ.Ключ].Добавить(); - КонецЕсли; - - Для Каждого ПКС Из ТЧ.Значение Цикл + МассивСтруктурСДаннымиСтрок = ПолученныеДанные.ДополнительныеСвойства[ТЧ.Ключ]; + Для НомерСтроки = 1 По МассивСтруктурСДаннымиСтрок.Количество() Цикл - КонвертацияСвойстваСтруктурыОбъектаXDTO( - КомпонентыОбмена, - ДанныеXDTO, - ПолученныеДанные.ДополнительныеСвойства, - СтрокаТЧ, - ПКС, - НомерЭтапа); + СтруктураСДаннымиСтроки = МассивСтруктурСДаннымиСтрок[НомерСтроки - 1]; + + Если НомерЭтапа = 2 Тогда + СтрокаТЧ = ПолученныеДанные[ТЧ.Ключ].Добавить(); + КонецЕсли; + + Для Каждого ПКС Из ТЧ.Значение Цикл + + КонвертацияСвойстваСтруктурыОбъектаXDTO( + КомпонентыОбмена, + ДанныеXDTO, + ПолученныеДанные.ДополнительныеСвойства, + СтрокаТЧ, + ПКС, + НомерЭтапа); + + КонецЦикла; КонецЦикла; - КонецЦикла; + Иначе + Продолжить; + КонецЕсли; - Иначе - Продолжить; - КонецЕсли; - - КонецЦикла; + КонецЦикла; + Исключение + ТекстОшибки = Символы.ПС + СтрШаблон(НСтр("ru = 'Событие: %1. + |Объект: %2. + | + |Ошибка конвертации свойств. + |%3.'"), + КомпонентыОбмена.НаправлениеОбмена, + ПредставлениеОбъектаДляПротокола(ПолученныеДанные), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение ТекстОшибки; + КонецПопытки; КонецПроцедуры @@ -3330,91 +3611,99 @@ Если СокрЛП(ПКС.СвойствоКонфигурации) = "" Тогда Возврат; КонецЕсли; - + ПравилоКонвертацииСвойства = ПКС.ПравилоКонвертацииСвойства; - Если НомерЭтапа = 1 Тогда - - Если Не ЗначениеЗаполнено(ПКС.СвойствоФормата) Тогда - Возврат; - КонецЕсли; - - Если ПКС.ОбработкаКлючевогоСвойства - И Не ДанныеXDTO.Свойство("ЭтоНаборКлючевыхСвойств") Тогда - ИсточникДанных = ДанныеXDTO.КлючевыеСвойства; - Иначе - ИсточникДанных = ДанныеXDTO; - КонецЕсли; - - Если ИсточникДанных.Свойство(ПКС.СвойствоФормата) Тогда - ЗначениеСвойства = ИсточникДанных[ПКС.СвойствоФормата]; - КонецЕсли; - - ИначеЕсли НомерЭтапа = 2 Тогда - - Если НомерЭтапа = 2 И Не ПКС.ИспользуетсяАлгоритмКонвертации Тогда - Возврат; - КонецЕсли; - - // На 2-м этапе значения свойств получаются из дополнительных свойств объекта полученных данных - // и представляют из себя структуру, содержащую инструкцию для конвертации, либо значение XDTO. - // Если приемником значения является строка табличной части, то значение свойства располагается - // в ДополнительныеСвойства[ИмяТабличнойЧасти][ИндексСтроки]. - Если ЗначениеЗаполнено(ПКС.ИмяТЧ) Тогда - ИсточникДанных = ДополнительныеСвойства[ПКС.ИмяТЧ][ПриемникДанных.НомерСтроки - 1]; - Иначе - ИсточникДанных = ДополнительныеСвойства; - КонецЕсли; - - Если ИсточникДанных.Свойство(ПКС.СвойствоКонфигурации) Тогда - ЗначениеСвойства = ИсточникДанных[ПКС.СвойствоКонфигурации]; - КонецЕсли; - - КонецЕсли; - - Если Не ЗначениеЗаполнено(ЗначениеСвойства) Тогда - Возврат; - КонецЕсли; - - // Значением является инструкция. - Если ТипЗнч(ЗначениеСвойства) = Тип("Структура") - И ЗначениеСвойства.Количество() < 3 Тогда - - Если ЗначениеСвойства.Свойство("ИмяПКО") Тогда - ПравилоКонвертацииСвойства = ЗначениеСвойства.ИмяПКО; - КонецЕсли; - - Если ЗначениеСвойства.Свойство("Значение") Тогда - ЗначениеСвойства = ЗначениеСвойства.Значение; - КонецЕсли; - - КонецЕсли; - - Если ТипЗнч(ЗначениеСвойства) = Тип("Структура") Тогда - - ПКПД = КомпонентыОбмена.ПравилаКонвертацииПредопределенныхДанных.Найти(ПравилоКонвертацииСвойства, "ИмяПКПД"); - Если ПКПД <> Неопределено Тогда + ЗначениеСвойства = ""; + Попытка + Если НомерЭтапа = 1 Тогда - Значение = ПКПД.КонвертацииЗначенийПриПолучении.Получить(ЗначениеСвойства.Значение); - ПриемникДанных[ПКС.СвойствоКонфигурации] = Значение; - Возврат; + Если Не ЗначениеЗаполнено(ПКС.СвойствоФормата) Тогда + Возврат; + КонецЕсли; + + Если ПКС.ОбработкаКлючевогоСвойства + И Не ДанныеXDTO.Свойство("ЭтоНаборКлючевыхСвойств") Тогда + ИсточникДанных = ДанныеXDTO.КлючевыеСвойства; + Иначе + ИсточникДанных = ДанныеXDTO; + КонецЕсли; + + Если ИсточникДанных.Свойство(ПКС.СвойствоФормата) Тогда + ЗначениеСвойства = ИсточникДанных[ПКС.СвойствоФормата]; + КонецЕсли; + + ИначеЕсли НомерЭтапа = 2 Тогда + + Если НомерЭтапа = 2 И Не ПКС.ИспользуетсяАлгоритмКонвертации Тогда + Возврат; + КонецЕсли; + + // На 2-м этапе значения свойств получаются из дополнительных свойств объекта полученных данных + // и представляют из себя структуру, содержащую инструкцию для конвертации, либо значение XDTO. + // Если приемником значения является строка табличной части, то значение свойства располагается + // в ДополнительныеСвойства[ИмяТабличнойЧасти][ИндексСтроки]. + Если ЗначениеЗаполнено(ПКС.ИмяТЧ) Тогда + ИсточникДанных = ДополнительныеСвойства[ПКС.ИмяТЧ][ПриемникДанных.НомерСтроки - 1]; + Иначе + ИсточникДанных = ДополнительныеСвойства; + КонецЕсли; + + Если ИсточникДанных.Свойство(ПКС.СвойствоКонфигурации) Тогда + ЗначениеСвойства = ИсточникДанных[ПКС.СвойствоКонфигурации]; + КонецЕсли; - Иначе - ПравилоКонвертацииСвойства = ПКОПоИмени(КомпонентыОбмена, ПравилоКонвертацииСвойства); КонецЕсли; - Иначе - // Конвертацию простых свойств выполняем только на 1-м этапе. - ПриемникДанных[ПКС.СвойствоКонфигурации] = ЗначениеСвойства; - Возврат; - КонецЕсли; - - ДанныеДляЗаписиВИБ = СтруктураОбъектаXDTOВДанныеИБ(КомпонентыОбмена, ЗначениеСвойства, ПравилоКонвертацииСвойства, "ПолучитьСсылку"); - - ПриемникДанных[ПКС.СвойствоКонфигурации] = ДанныеДляЗаписиВИБ.Ссылка; + + Если Не ЗначениеЗаполнено(ЗначениеСвойства) Тогда + Возврат; + КонецЕсли; + + // Значением является инструкция. + Если ТипЗнч(ЗначениеСвойства) = Тип("Структура") + И ЗначениеСвойства.Количество() < 3 Тогда + + Если ЗначениеСвойства.Свойство("ИмяПКО") Тогда + ПравилоКонвертацииСвойства = ЗначениеСвойства.ИмяПКО; + КонецЕсли; + + Если ЗначениеСвойства.Свойство("Значение") Тогда + ЗначениеСвойства = ЗначениеСвойства.Значение; + КонецЕсли; + + КонецЕсли; + + Если ТипЗнч(ЗначениеСвойства) = Тип("Структура") Тогда + + ПКПД = КомпонентыОбмена.ПравилаКонвертацииПредопределенныхДанных.Найти(ПравилоКонвертацииСвойства, "ИмяПКПД"); + Если ПКПД <> Неопределено Тогда + + Значение = ПКПД.КонвертацииЗначенийПриПолучении.Получить(ЗначениеСвойства.Значение); + ПриемникДанных[ПКС.СвойствоКонфигурации] = Значение; + Возврат; + + Иначе + ПравилоКонвертацииСвойства = ПКОПоИмени(КомпонентыОбмена, ПравилоКонвертацииСвойства); + КонецЕсли; + Иначе + // Конвертацию простых свойств выполняем только на 1-м этапе. + ПриемникДанных[ПКС.СвойствоКонфигурации] = ЗначениеСвойства; + Возврат; + КонецЕсли; + + ДанныеДляЗаписиВИБ = СтруктураОбъектаXDTOВДанныеИБ(КомпонентыОбмена, ЗначениеСвойства, ПравилоКонвертацииСвойства, "ПолучитьСсылку"); + + ПриемникДанных[ПКС.СвойствоКонфигурации] = ДанныеДляЗаписиВИБ.Ссылка; + Исключение + ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ТекстОшибки = СтрШаблон(НСтр("ru = 'Ошибка конвертации свойства объекта XDTO, имя свойства: <%2>.'"), ЗначениеСвойства) + + Символы.ПС + Символы.ПС + ПредставлениеОшибки; + ВызватьИсключение ТекстОшибки; + КонецПопытки; КонецПроцедуры -Функция СсылкаОбъектаПоСвойствамОбъектаXDTO(ПравилоКонвертации, ПолученныеДанные) +Функция СсылкаОбъектаПоСвойствамОбъектаXDTO(ПравилоКонвертации, ПолученныеДанные, ДанныеXDTOСодержатСсылку, УзелОбмена) Результат = Неопределено; // ПравилоКонвертации.ПоляПоискаОбъекта - массив, содержит разные варианты поиска @@ -3443,23 +3732,36 @@ Продолжить; КонецЕсли; - Если ПравилоКонвертации.ЭтоДокумент - И ПоляПоиска.Количество() = 2 - И ПоляПоиска.Свойство("Дата") - И ПоляПоиска.Свойство("Номер") Тогда + ВариантИдентификации = СокрЛП(ПравилоКонвертации.ВариантИдентификации); + АнализироватьПубличныеИдентификаторы = ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" + И ДанныеXDTOСодержатСсылку + И ЗначениеЗаполнено(УзелОбмена); - Результат = ПравилоКонвертации.МенеджерОбъекта.НайтиПоНомеру(ПоляПоиска.Номер, ПоляПоиска.Дата); - - Результат = ?(Результат.Пустая(), Неопределено, Результат); - ИначеЕсли ПравилоКонвертации.ЭтоСправочник - И ПоляПоиска.Количество() = 1 - И ПоляПоиска.Свойство("Наименование") Тогда - Результат = ПравилоКонвертации.МенеджерОбъекта.НайтиПоНаименованию(ПоляПоиска.Наименование, Истина); - ИначеЕсли ПравилоКонвертации.ЭтоСправочник - И ПоляПоиска.Количество() = 1 - И ПоляПоиска.Свойство("Код") Тогда - Результат = ПравилоКонвертации.МенеджерОбъекта.НайтиПоКоду(ПоляПоиска.Код); + ПоискЗапросом = Ложь; + Если АнализироватьПубличныеИдентификаторы Тогда + ПоискЗапросом = Истина; Иначе + // Возможно, поиск можно выполнить платформенными методами. + Если ПравилоКонвертации.ЭтоДокумент + И ПоляПоиска.Количество() = 2 + И ПоляПоиска.Свойство("Дата") + И ПоляПоиска.Свойство("Номер") Тогда + Результат = ПравилоКонвертации.МенеджерОбъекта.НайтиПоНомеру(ПоляПоиска.Номер, ПоляПоиска.Дата); + Результат = ?(Результат.Пустая(), Неопределено, Результат); + ИначеЕсли ПравилоКонвертации.ЭтоСправочник + И ПоляПоиска.Количество() = 1 + И ПоляПоиска.Свойство("Наименование") Тогда + Результат = ПравилоКонвертации.МенеджерОбъекта.НайтиПоНаименованию(ПоляПоиска.Наименование, Истина); + ИначеЕсли ПравилоКонвертации.ЭтоСправочник + И ПоляПоиска.Количество() = 1 + И ПоляПоиска.Свойство("Код") Тогда + Результат = ПравилоКонвертации.МенеджерОбъекта.НайтиПоКоду(ПоляПоиска.Код); + Иначе + ПоискЗапросом = Истина; + КонецЕсли; + КонецЕсли; + + Если ПоискЗапросом Тогда Запрос = Новый Запрос; ТекстЗапроса = @@ -3492,6 +3794,16 @@ КонецЦикла; УсловиеОтбора = СтрСоединить(Отбор, " И "); + + Если АнализироватьПубличныеИдентификаторы Тогда + // Из поиска необходимо исключить уже сопоставленные ранее объекты. + ТекстСоединения = " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПубличныеИдентификаторыСинхронизируемыхОбъектов КАК ПУБ + | ПО ПУБ.Ссылка = Таблица.Ссылка И ПУБ.УзелИнформационнойБазы = &УзелОбмена"; + УсловиеОтбора = УсловиеОтбора + Символы.ПС + " И ПУБ.Ссылка is null"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ГДЕ", ТекстСоединения + Символы.ПС + " ГДЕ"); + Запрос.УстановитьПараметр("УзелОбмена", УзелОбмена); + КонецЕсли; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[УсловиеОтбора]", УсловиеОтбора); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ПолноеИмя]", ПравилоКонвертации.ПолноеИмя); Запрос.Текст = ТекстЗапроса; @@ -3545,7 +3857,7 @@ Иначе ПолученныеДанные = ПравилоКонвертации.МенеджерОбъекта.СоздатьЭлемент(); КонецЕсли; - ИначеЕсли ПравилоКонвертации.ЭтоРегистрСведений Тогда + ИначеЕсли ПравилоКонвертации.ЭтоРегистр Тогда ПолученныеДанные = ПравилоКонвертации.МенеджерОбъекта.СоздатьНаборЗаписей(); КонецЕсли; @@ -3557,83 +3869,6 @@ #КонецОбласти -#Область ЗагрузкаТЧ - -Функция СоответствиеСтарыхИНовыхДанныхТЧ(ТабличнаяЧастьОбъектаПослеОбработки, ТабличнаяЧастьОбъектаДоОбработки, МассивКлючевыхПолей) - - СоответствиеСтрокНовойТЧСтрокамСтаройТЧ = Новый Соответствие; - - Для Каждого СтрокаНовойТЧ Из ТабличнаяЧастьОбъектаПослеОбработки Цикл - - НайденнаяСтрокаСтаройТЧ = Неопределено; - - СтруктураПоиска = Новый Структура; - Для Каждого КлючевоеПоле Из МассивКлючевыхПолей Цикл - СтруктураПоиска.Вставить(КлючевоеПоле, СтрокаНовойТЧ[КлючевоеПоле]); - КонецЦикла; - - НайденныеСтрокиНовойТЧ = ТабличнаяЧастьОбъектаПослеОбработки.НайтиСтроки(СтруктураПоиска); - - Если НайденныеСтрокиНовойТЧ.Количество() = 1 Тогда - - НайденныеСтрокиСтаройТЧ = ТабличнаяЧастьОбъектаДоОбработки.НайтиСтроки(СтруктураПоиска); - - Если НайденныеСтрокиСтаройТЧ.Количество() = 1 Тогда - НайденнаяСтрокаСтаройТЧ = НайденныеСтрокиСтаройТЧ[0]; - КонецЕсли; - - КонецЕсли; - - СоответствиеСтрокНовойТЧСтрокамСтаройТЧ.Вставить(СтрокаНовойТЧ, НайденнаяСтрокаСтаройТЧ); - - КонецЦикла; - - Возврат СоответствиеСтрокНовойТЧСтрокамСтаройТЧ; - -КонецФункции - -// Процедура заполняет табличную часть объекта с учетом предыдущей версии табличной части (до загрузки данных). -// -// Параметры: -// ТабличнаяЧастьОбъектаПослеОбработки - Табличная часть, которая содержит измененные данные. -// ТабличнаяЧастьОбъектаДоОбработки - Таблица значений, содержимое табличной части объекта до загрузки данных. -// КлючевыеПоля - Колонки, по которым происходит поиск строк в табличной части (строка через -// запятую). -// КолонкиДляВключения - Другие колонки (кроме ключевых), значения которых должны измениться (строка -// через запятую). -// КолонкиДляИсключения - Колонки, значения которых не должны измениться (строка через запятую). -// -Процедура ЗаполнитьТабличнуюЧастьОбъектаНачальнымиДанными( - ТабличнаяЧастьОбъектаПослеОбработки, - ТабличнаяЧастьОбъектаДоОбработки, - Знач КлючевыеПоля = "", - КолонкиДляВключения = "", - КолонкиДляИсключения = "") Экспорт - - Если ТипЗнч(КлючевыеПоля) = Тип("Строка") Тогда - Если КлючевыеПоля = "" Тогда - Возврат; // Без ключевых полей нельзя получить соответствие новых и старых данных. - Иначе - КлючевыеПоля = СтрРазделить(КлючевыеПоля, ","); - КонецЕсли; - КонецЕсли; - - СоответствиеСтарыхИНовыхДанныхТЧ = СоответствиеСтарыхИНовыхДанныхТЧ( - ТабличнаяЧастьОбъектаПослеОбработки, - ТабличнаяЧастьОбъектаДоОбработки, - КлючевыеПоля); - - Для Каждого СтрокаНовойТЧ Из ТабличнаяЧастьОбъектаПослеОбработки Цикл - СтрокаСтаройТЧ = СоответствиеСтарыхИНовыхДанныхТЧ.Получить(СтрокаНовойТЧ); - Если СтрокаСтаройТЧ <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(СтрокаНовойТЧ, СтрокаСтаройТЧ, КолонкиДляВключения, КолонкиДляИсключения); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -#КонецОбласти - #Область СервисныеПроцедурыИФункции Процедура ПровестиГенерациюКодаНомераПриНеобходимости(Объект) @@ -3750,7 +3985,20 @@ ПараметрыКонвертации = КомпонентыОбмена.ПараметрыКонвертации; ЗагруженныеОбъекты = КомпонентыОбмена.ЗагруженныеОбъекты; - КомпонентыОбмена.МенеджерОбмена.ПередОтложеннымЗаполнением(КомпонентыОбмена); + Попытка + КомпонентыОбмена.МенеджерОбмена.ПередОтложеннымЗаполнением(КомпонентыОбмена); + Исключение + ТекстОшибки = Символы.ПС + СтрШаблон(НСтр("ru = 'Событие: %1. + |Обработчик: ПередОтложеннымЗаполнением. + | + |Ошибка выполнения обработчика. + |%2.'"), + КомпонентыОбмена.НаправлениеОбмена, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КомпонентыОбмена.СтрокаСообщенияОбОшибке = ""; + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СокрЛП(ТекстОшибки),,,,, Истина); + Возврат; + КонецПопытки; Для Каждого СтрокаТаблицы Из ЗагруженныеОбъекты Цикл @@ -3772,16 +4020,22 @@ СтруктураПараметров.Вставить("Объект", Объект); СтруктураПараметров.Вставить("КомпонентыОбмена", КомпонентыОбмена); СтруктураПараметров.Вставить("ОбъектМодифицирован", Истина); - + Попытка МенеджерОбмена.ВыполнитьПроцедуруМодуляМенеджера(ИмяОбработчика, СтруктураПараметров); Исключение - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка выполнения обработчика ПослеКонвертацииВсехДанных. - |Тип источника: %1 - |Описание ошибки: %2'"), - Строка(Объект), + ТекстОшибки = Символы.ПС + СтрШаблон(НСтр("ru = 'Событие: %1. + |Обработчик: ОтложенноеЗаполнениеОбъектов. + |Объект: %2. + | + |Ошибка выполнения обработчика. + |%3.'"), + КомпонентыОбмена.НаправлениеОбмена, + ПредставлениеОбъектаДляПротокола(Объект.Ссылка), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КомпонентыОбмена.СтрокаСообщенияОбОшибке = ""; + ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СокрЛП(ТекстОшибки),,,,, Истина); + Возврат; КонецПопытки; ОбъектМодифицирован = СтруктураПараметров.ОбъектМодифицирован; @@ -3886,7 +4140,40 @@ #Область Прочее -Функция РазложитьФорматОбмена(Знач ФорматОбмена) Экспорт +Функция СоответствиеСтарыхИНовыхДанныхТЧ(ТабличнаяЧастьОбъектаПослеОбработки, ТабличнаяЧастьОбъектаДоОбработки, МассивКлючевыхПолей) + + СоответствиеСтрокНовойТЧСтрокамСтаройТЧ = Новый Соответствие; + + Для Каждого СтрокаНовойТЧ Из ТабличнаяЧастьОбъектаПослеОбработки Цикл + + НайденнаяСтрокаСтаройТЧ = Неопределено; + + СтруктураПоиска = Новый Структура; + Для Каждого КлючевоеПоле Из МассивКлючевыхПолей Цикл + СтруктураПоиска.Вставить(КлючевоеПоле, СтрокаНовойТЧ[КлючевоеПоле]); + КонецЦикла; + + НайденныеСтрокиНовойТЧ = ТабличнаяЧастьОбъектаПослеОбработки.НайтиСтроки(СтруктураПоиска); + + Если НайденныеСтрокиНовойТЧ.Количество() = 1 Тогда + + НайденныеСтрокиСтаройТЧ = ТабличнаяЧастьОбъектаДоОбработки.НайтиСтроки(СтруктураПоиска); + + Если НайденныеСтрокиСтаройТЧ.Количество() = 1 Тогда + НайденнаяСтрокаСтаройТЧ = НайденныеСтрокиСтаройТЧ[0]; + КонецЕсли; + + КонецЕсли; + + СоответствиеСтрокНовойТЧСтрокамСтаройТЧ.Вставить(СтрокаНовойТЧ, НайденнаяСтрокаСтаройТЧ); + + КонецЦикла; + + Возврат СоответствиеСтрокНовойТЧСтрокамСтаройТЧ; + +КонецФункции + +Функция РазложитьФорматОбмена(Знач ФорматОбмена) Результат = Новый Структура("БазовыйФормат, Версия"); @@ -3907,7 +4194,7 @@ Возврат Результат; КонецФункции -Функция СсылкаПоУИД(ТипЗначенияОбъектаИБ, УИДОбъектаXDTO) +Функция СсылкаПоУИД(ТипЗначенияОбъектаИБ, УИДОбъектаXDTO, УзелОбмена) МассивТипов = Новый Массив; МассивТипов.Добавить(ТипЗначенияОбъектаИБ); @@ -3916,12 +4203,32 @@ МенеджерОбъектаМетаданных = ОбщегоНазначения.МенеджерОбъектаПоСсылке(ПустаяСсылка); - Возврат МенеджерОбъектаМетаданных.ПолучитьСсылку(Новый УникальныйИдентификатор(УИДОбъектаXDTO)); + НайденнаяСсылка = МенеджерОбъектаМетаданных.ПолучитьСсылку(Новый УникальныйИдентификатор(УИДОбъектаXDTO)); + Если Не ЗначениеЗаполнено(УзелОбмена) + Или НайденнаяСсылка.Пустая() + Или Не ОбщегоНазначения.СсылкаСуществует(НайденнаяСсылка) Тогда + Возврат НайденнаяСсылка; + КонецЕсли; + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("Ссылка", НайденнаяСсылка); + СтруктураЗаписи.Вставить("УзелИнформационнойБазы", УзелОбмена); + + Если Не РегистрыСведений.ПубличныеИдентификаторыСинхронизируемыхОбъектов.ЗаписьЕстьВРегистре(СтруктураЗаписи) Тогда + Возврат НайденнаяСсылка; + КонецЕсли; + // Данному УИД уже сопоставлен другой объект. Нужно создавать ссылку с другим УИДом. + НоваяСсылка = МенеджерОбъектаМетаданных.ПолучитьСсылку(); + + Возврат НоваяСсылка; КонецФункции Функция НайтиСсылкуПоПубличномуИдентификатору(УИДОбъектаXDTO, КомпонентыОбмена, ТипЗначенияОбъектаИБ) + Если НЕ ЗначениеЗаполнено(КомпонентыОбмена.УзелКорреспондента) Тогда + Возврат Неопределено; + КонецЕсли; + Запрос = Новый Запрос(" |ВЫБРАТЬ | Ссылка @@ -3967,7 +4274,7 @@ // какие объекты были загружены (не удаляются ссылки, которые были загружены как другие // ОбъектыXDTO). // -Процедура ПрочитатьУдаление(КомпонентыОбмена, ОбъектXDTO, МассивОбъектовКУдалению, ТаблицыДляЗагрузки=Неопределено) Экспорт +Процедура ПрочитатьУдаление(КомпонентыОбмена, ОбъектXDTO, МассивОбъектовКУдалению, ТаблицыДляЗагрузки=Неопределено) ТипСсылкиXDTO = Неопределено; @@ -4019,7 +4326,11 @@ КонецЕсли; КонецЕсли; - МассивОбъектовКУдалению.Добавить(СсылкаОбъектаПоУИДОбъектаXDTO(УникальныйИдентификаторСтрокой, ПравилоКонвертации.ТипДанных, КомпонентыОбмена)); + СсылкаКУдалению = СсылкаОбъектаПоУИДОбъектаXDTO(УникальныйИдентификаторСтрокой, + ПравилоКонвертации.ТипДанных, КомпонентыОбмена); + Если МассивОбъектовКУдалению.Найти(СсылкаКУдалению) = Неопределено Тогда + МассивОбъектовКУдалению.Добавить(СсылкаКУдалению); + КонецЕсли; КонецЕсли; КонецЦикла; @@ -4037,21 +4348,28 @@ Для Каждого ЭлементКУдалению Из МассивОбъектовКУдалению Цикл - // Собственно удаление ссылки + // Собственно удаление ссылки. Объект = ЭлементКУдалению.ПолучитьОбъект(); Если Объект = Неопределено Тогда Продолжить; КонецЕсли; + Если КомпонентыОбмена.РежимЗагрузкиДанныхВИнформационнуюБазу Тогда + Если ОбменДаннымиСобытия.ЗагрузкаЗапрещена(Объект, КомпонентыОбмена.УзелКорреспондентаОбъект) Тогда + Возврат; + КонецЕсли; Если Метаданные.Документы.Содержит(Объект.Метаданные()) И Объект.Проведен Тогда - ОтменитьПроведениеОбъектаВИБ(Объект, КомпонентыОбмена.УзелКорреспондента); + ЕстьРезультат = ОтменитьПроведениеОбъектаВИБ(Объект, КомпонентыОбмена.УзелКорреспондента); + Если НЕ ЕстьРезультат Тогда + Продолжить; + КонецЕсли; КонецЕсли; ОбменДаннымиСервер.УстановитьОбменДаннымиЗагрузка(Объект, Истина, Ложь, КомпонентыОбмена.УзелКорреспондента); УдалитьОбъект(Объект, Ложь); Иначе - ТипПолученныхДанныхСтрокой = ИмяТипаДанныхПоОбъектуМетаданных(Объект.Метаданные(), Неопределено); + ТипПолученныхДанныхСтрокой = ИмяТипаДанныхПоОбъектуМетаданных(Объект.Метаданные()); СтрокаТаблицы = КомпонентыОбмена.ТаблицаДанныхЗаголовкаПакета.Добавить(); @@ -4189,15 +4507,13 @@ ПравилоОбработки = КомпонентыОбмена.ПравилаОбработкиДанных.Найти(ОбъектМетаданных, "ОбъектВыборкиМетаданные"); Если ПравилоОбработки = Неопределено Тогда - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найдено ПОД для объекта метаданных. - |Объект метаданных: %1'"), + ТекстОшибки = Символы.ПС + СтрШаблон(НСтр("ru = 'Не найдено ПОД для объекта метаданных. + |Объект метаданных: %3.'"), Строка(ОбъектМетаданных)); - - Иначе - Возврат ПравилоОбработки; + ВызватьИсключение ТекстОшибки; КонецЕсли; + + Возврат ПравилоОбработки; КонецФункции @@ -4232,7 +4548,7 @@ // ключи соответствуют именам ПКО, // значения - признак использования ПКО для конкретного объекта обработки. // -Процедура ПриОбработкеПОД(КомпонентыОбмена, ПравилоОбработки, Знач ОбъектОбработки, ИспользованиеПКО) Экспорт +Процедура ПриОбработкеПОД(КомпонентыОбмена, ПравилоОбработки, Знач ОбъектОбработки, ИспользованиеПКО) МенеджерОбмена = КомпонентыОбмена.МенеджерОбмена; СтруктураПараметров = Новый Структура(); @@ -4243,12 +4559,18 @@ Попытка МенеджерОбмена.ВыполнитьПроцедуруМодуляМенеджера(ПравилоОбработки.ПриОбработке, СтруктураПараметров); Исключение - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка выполнения обработчика ПОД ПриОбработке. - |Объект: %1 - |Описание ошибки: %2'"), - Строка(ОбъектОбработки), + ТекстОшибки = Символы.ПС + СтрШаблон(НСтр("ru = 'Событие: %1. + |Обработчик: ПриОбработкеПОД. + |ПОД: %2. + |Объект: %3. + | + |Ошибка выполнения обработчика. + |%4.'"), + КомпонентыОбмена.НаправлениеОбмена, + ПравилоОбработки.Имя, + ПредставлениеОбъектаДляПротокола(ОбъектОбработки), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение ТекстОшибки; КонецПопытки; ОбъектОбработки = СтруктураПараметров.ОбъектОбработки; @@ -4261,11 +4583,11 @@ // // Параметры: // КомпонентыОбмена - Структура - содержит все правила и параметры обмена. -// ПравилоОбработки - Строка таблицы правил обработки данных, соответствующая обрабатываемому ПОД +// ПравилоОбработки - Строка таблицы правил обработки данных, соответствующая обрабатываемому ПОД. // // Возвращаемое значение - то что вернет обработчик ВыборкаДанных (например, выборка результата запроса). // -Функция ВыборкаДанных(КомпонентыОбмена, ПравилоОбработки) Экспорт +Функция ВыборкаДанных(КомпонентыОбмена, ПравилоОбработки) АлгоритмВыборки = ПравилоОбработки.ВыборкаДанных; Если ЗначениеЗаполнено(АлгоритмВыборки) Тогда @@ -4277,12 +4599,16 @@ Попытка ВыборкаДанных = МенеджерОбмена.ВыполнитьФункциюМодуляМенеджера(ПравилоОбработки.ВыборкаДанных, СтруктураПараметров); Исключение - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка выполнения обработчика ПОД ВыборкаДанных. - |Имя ПОД: %1 - |Описание ошибки: %2'"), - ПравилоОбработки.Имя, - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ТекстОшибки = Символы.ПС + СтрШаблон(НСтр("ru = 'Событие: %1. + |Обработчик: ВыборкаДанных. + |ПОД: %2. + | + |Ошибка выполнения обработчика. + |%3.'"), + КомпонентыОбмена.НаправлениеОбмена, + ПравилоОбработки.Имя, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение ТекстОшибки; КонецПопытки; Иначе @@ -4313,7 +4639,7 @@ // КомпонентыОбмена - Структура - содержит все правила и параметры обмена. // СтекВыгрузки - Массив, содержит ссылки на выгружаемые объекты с учетом вложенности. // -Процедура ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, Знач ИмяОбработчика, КомпонентыОбмена, СтекВыгрузки) Экспорт +Процедура ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, Знач ИмяОбработчика, КомпонентыОбмена, СтекВыгрузки) МенеджерОбмена = КомпонентыОбмена.МенеджерОбмена; СтруктураПараметров = Новый Структура(); СтруктураПараметров.Вставить("ДанныеИБ", ДанныеИБ); @@ -4324,12 +4650,16 @@ Попытка МенеджерОбмена.ВыполнитьПроцедуруМодуляМенеджера(ИмяОбработчика, СтруктураПараметров); Исключение - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка выполнения обработчика ПриОтправкеДанных. - |Объект: %1 - |Описание ошибки: %2'"), - Строка(ДанныеИБ), + ТекстОшибки = Символы.ПС + СтрШаблон(НСтр("ru = 'Событие: %1. + |Обработчик: ПриОтправкеДанных. + |Объект: %2. + | + |Ошибка выполнения обработчика. + |%3.'"), + КомпонентыОбмена.НаправлениеОбмена, + ПредставлениеОбъектаДляПротокола(ДанныеИБ), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение ТекстОшибки; КонецПопытки; ДанныеXDTO = СтруктураПараметров.ДанныеXDTO; @@ -4346,23 +4676,27 @@ // КомпонентыОбмена - Структура - содержит все правила и параметры обмена. // ИмяОбработчика - Строка, имя процедуры-обработчика в модуле менеджера. // -Процедура ПриКонвертацииДанныхXDTO(ДанныеXDTO, ПолученныеДанные, КомпонентыОбмена, Знач ИмяОбработчика) Экспорт +Процедура ПриКонвертацииДанныхXDTO(ДанныеXDTO, ПолученныеДанные, КомпонентыОбмена, Знач ИмяОбработчика) МенеджерОбмена = КомпонентыОбмена.МенеджерОбмена; СтруктураПараметров = Новый Структура(); СтруктураПараметров.Вставить("ДанныеXDTO", ДанныеXDTO); СтруктураПараметров.Вставить("ПолученныеДанные", ПолученныеДанные); СтруктураПараметров.Вставить("КомпонентыОбмена", КомпонентыОбмена); - + Попытка МенеджерОбмена.ВыполнитьПроцедуруМодуляМенеджера(ИмяОбработчика, СтруктураПараметров); Исключение - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка выполнения обработчика ПриКонвертацииДанныхXDTO. - |Тип источника: %1 - |Описание ошибки: %2'"), - Строка(ДанныеXDTO), + ТекстОшибки = Символы.ПС + СтрШаблон(НСтр("ru = 'Событие: %1. + |Обработчик: ПриКонвертацииДанныхXDTO. + |Объект: %2. + | + |Ошибка выполнения обработчика. + |%3.'"), + КомпонентыОбмена.НаправлениеОбмена, + ПредставлениеОбъектаДляПротокола(ПолученныеДанные), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение ТекстОшибки; КонецПопытки; ДанныеXDTO = СтруктураПараметров.ДанныеXDTO; @@ -4383,7 +4717,7 @@ // Используется для определения состава свойств, подлежащих переносу из ПолученныеДанные в // ДанныеИБ. // -Процедура ПередЗаписьюПолученныхДанных(ПолученныеДанные, ДанныеИБ, КомпонентыОбмена, ИмяОбработчика, КонвертацияСвойств) Экспорт +Процедура ПередЗаписьюПолученныхДанных(ПолученныеДанные, ДанныеИБ, КомпонентыОбмена, ИмяОбработчика, КонвертацияСвойств) МенеджерОбмена = КомпонентыОбмена.МенеджерОбмена; СтруктураПараметров = Новый Структура(); @@ -4395,12 +4729,16 @@ Попытка МенеджерОбмена.ВыполнитьПроцедуруМодуляМенеджера(ИмяОбработчика, СтруктураПараметров); Исключение - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка выполнения обработчика ПередЗаписьюПолученныхДанных. - |Объект: %1 - |Описание ошибки: %2'"), - Строка(ДанныеИБ), + ТекстОшибки = Символы.ПС + СтрШаблон(НСтр("ru = 'Событие: %1. + |Обработчик: ПередЗаписьюПолученныхДанных. + |Объект: %2. + | + |Ошибка выполнения обработчика. + |%3.'"), + КомпонентыОбмена.НаправлениеОбмена, + ПредставлениеОбъектаДляПротокола(?(ДанныеИБ <> Неопределено, ДанныеИБ, ПолученныеДанные)), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение ТекстОшибки; КонецПопытки; ДанныеИБ = СтруктураПараметров.ДанныеИБ; @@ -4429,29 +4767,11 @@ Функция ПолучитьСтруктуруЗаписиПротокола(КСообщенияОбОшибках = "", Знач СтрокаОшибки = "") СтруктураОшибки = Новый Структура(); - СтруктураОшибки.Вставить("ИмяПКО"); - СтруктураОшибки.Вставить("ИмяПОД"); - СтруктураОшибки.Вставить("Нпп"); - СтруктураОшибки.Вставить("ГНпп"); - СтруктураОшибки.Вставить("Источник"); СтруктураОшибки.Вставить("ТипОбъекта"); - СтруктураОшибки.Вставить("Свойство"); - СтруктураОшибки.Вставить("Значение"); - СтруктураОшибки.Вставить("ТипЗначения"); - СтруктураОшибки.Вставить("ПКО"); - СтруктураОшибки.Вставить("ПКС"); - СтруктураОшибки.Вставить("ПКГС"); - СтруктураОшибки.Вставить("ПВД"); - СтруктураОшибки.Вставить("ПОД"); СтруктураОшибки.Вставить("Объект"); - СтруктураОшибки.Вставить("СвойствоПриемника"); - СтруктураОшибки.Вставить("КонвертируемоеЗначение"); - СтруктураОшибки.Вставить("Обработчик"); СтруктураОшибки.Вставить("ОписаниеОшибки"); СтруктураОшибки.Вставить("ПозицияМодуля"); - СтруктураОшибки.Вставить("Текст"); СтруктураОшибки.Вставить("КСообщенияОбОшибках"); - СтруктураОшибки.Вставить("УзелПланаОбмена"); СтрокаМодуля = ОтделитьРазделителем(СтрокаОшибки, "{"); ОписаниеОшибки = ОтделитьРазделителем(СтрокаМодуля, "}: "); @@ -4460,7 +4780,7 @@ СтруктураОшибки.ОписаниеОшибки = ОписаниеОшибки; СтруктураОшибки.ПозицияМодуля = СтрокаМодуля; - + КонецЕсли; Если СтруктураОшибки.КСообщенияОбОшибках <> "" Тогда @@ -4471,20 +4791,7 @@ Возврат СтруктураОшибки; -КонецФункции - -Процедура ЗаписатьИнформациюОбОшибкеВПротокол(КСообщенияОбОшибках, СтрокаОшибки, Объект, КомпонентыОбмена, ТипОбъекта = Неопределено) - - ЗП = ПолучитьСтруктуруЗаписиПротокола(КСообщенияОбОшибках, СтрокаОшибки); - ЗП.Объект = Объект; - - Если ТипОбъекта <> Неопределено Тогда - ЗП.ТипОбъекта = ТипОбъекта; - КонецЕсли; - - ЗаписатьВПротоколВыполнения(КомпонентыОбмена, КСообщенияОбОшибках, ЗП); - -КонецПроцедуры +КонецФункции Функция РезультатВыполненияОбменаОшибка(РезультатВыполненияОбмена) @@ -4500,6 +4807,76 @@ КонецФункции +// Функция формирует представление объекта, для записи в протокол обмена. +// +// Параметры: +// Объект - Ссылка - ссылка на любой ОМД. +// - Объект - ОМД. +// - ОбъектXDTO - объект XDTO/ +// - Структура. +// +// Возвращаемое значение: +// Строка - строковое представление объекта. +// +Функция ПредставлениеОбъектаДляПротокола(Объект) + + ТипОбъекта = ТипЗнч(Объект); + ПредставлениеОбъекта = Строка(Объект); + НавигационнаяСсылка = ""; + Если ОбщегоНазначения.ЭтоСсылка(ТипОбъекта) Тогда + НавигационнаяСсылка = " (" + ПолучитьНавигационнуюСсылку(Объект) + ")"; + Иначе + Если ТипОбъекта = Тип("ОбъектXDTO") Тогда + КоллекцияСвойств = Объект.Свойства(); + ПредставлениеОбъекта = ""; + ТипОбъекта = Объект.Тип().Имя; + Если КоллекцияСвойств.Количество() > 0 И КоллекцияСвойств.Получить("КлючевыеСвойства") <> Неопределено Тогда + КлючевыеСвойства = Объект.Получить("КлючевыеСвойства"); + КоллекцияСвойств = КлючевыеСвойства.Свойства(); + Наименование = ""; + Номер = ""; + Дата = ""; + Код = ""; + Если КоллекцияСвойств.Получить("Наименование") <> Неопределено Тогда + Наименование = СокрЛП(КлючевыеСвойства.Получить("Наименование")); + КонецЕсли; + Если КоллекцияСвойств.Получить("Номер") <> Неопределено Тогда + Номер = СокрЛП(КлючевыеСвойства.Получить("Номер")); + КонецЕсли; + Если КоллекцияСвойств.Получить("Дата") <> Неопределено Тогда + Дата = КлючевыеСвойства.Получить("Дата"); + КонецЕсли; + Если КоллекцияСвойств.Получить("Код") <> Неопределено Тогда + Код = СокрЛП(КлючевыеСвойства.Получить("Код")); + ИначеЕсли КоллекцияСвойств.Получить("КодВПрограмме") <> Неопределено Тогда + Код = СокрЛП(КлючевыеСвойства.Получить("КодВПрограмме")); + КонецЕсли; + Если ЗначениеЗаполнено(Номер) Тогда + ПредставлениеОбъекта = СтрШаблон(НСтр("ru = '%1 №%2 от %3'"), Наименование, Номер, Дата); + ИначеЕсли ЗначениеЗаполнено(Код) Тогда + ПредставлениеОбъекта = СтрШаблон(НСтр("ru = '%1, %2'"), Наименование, Код); + КонецЕсли; + КонецЕсли; + ИначеЕсли ТипОбъекта = Тип("Структура") Тогда + Если Объект.Свойство("Ссылка") Тогда + ТипОбъекта = ТипЗнч(Объект.Ссылка); + ПредставлениеОбъекта = Строка(Объект.Ссылка); + НавигационнаяСсылка = " (" + ПолучитьНавигационнуюСсылку(Объект.Ссылка) + ")"; + КонецЕсли; + ИначеЕсли ОбщегоНазначения.ЭтоСсылка(ТипОбъекта) Тогда + Если ЗначениеЗаполнено(Объект.Ссылка) Тогда + НавигационнаяСсылка = " (" + ПолучитьНавигационнуюСсылку(Объект) + ")"; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + ШаблонПредставления = НСтр("ru = '%1, %2%3'"); + ПредставлениеОбъекта = СтрШаблон(ШаблонПредставления, ТипОбъекта, ПредставлениеОбъекта, НавигационнаяСсылка); + + Возврат ПредставлениеОбъекта; + +КонецФункции + #КонецОбласти #Область ПроцедурыИФункцииВерсионированияФорматаОбмена @@ -4585,7 +4962,7 @@ // Параметры: // УзелИнформационнойБазы - ссылка на узел-корреспондент. // -Функция ВерсииФорматаОбменаМассив(Знач УзелИнформационнойБазы) Экспорт +Функция ВерсииФорматаОбменаМассив(Знач УзелИнформационнойБазы) Возврат СортироватьВерсииФормата(ВерсииФорматаОбмена(УзелИнформационнойБазы)); @@ -4621,227 +4998,103 @@ КонецФункции // ОтделитьРазделителем() -Функция ИмяТипаДанныхПоОбъектуМетаданных(Знач ОбъектМетаданных, Знач ИмяБазовогоТипа) - ЭтоКонстанта = Ложь; - ЭтоРегистрСведений = Ложь; - Если ИмяБазовогоТипа = Неопределено Тогда - ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(ОбъектМетаданных); - КонецЕсли; - ЭтоКонстанта = (ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаКонстанты()); - ЭтоРегистрСведений = (ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыСведений()); +// Возвращает строковое представление типа, свойственного для данных, +// соответствующих переданному объекту метаданных. +// Может быть использован как значение параметра встроенной функции Тип(). +// +// Параметры: +// ОбъектМетаданных - объект метаданных, по которому необходимо определить имя типа; +// +// Возвращаемое значение: +// Строка - например, "СправочникСсылка.Номенклатура". +// +Функция ИмяТипаДанныхПоОбъектуМетаданных(Знач ОбъектМетаданных) ЛитералыТипа = СтрРазделить(ОбъектМетаданных.ПолноеИмя(), "."); + ТипТаблицы = ЛитералыТипа[0]; + ИмяТаблицы = ЛитералыТипа[1]; - Если ЭтоКонстанта Тогда - Результат = "[ТипТаблицы]МенеджерЗначения.[ИмяТаблицы]"; - ИначеЕсли ЭтоРегистрСведений Тогда - Результат = "[ТипТаблицы]НаборЗаписей.[ИмяТаблицы]"; + Если ТипТаблицы = "Константа" Тогда + + ШаблонИмениТипа = "[ТипТаблицы]МенеджерЗначения.[ИмяТаблицы]"; + + ИначеЕсли ТипТаблицы = "РегистрСведений" + Или ТипТаблицы = "РегистрНакопления" + Или ТипТаблицы = "РегистрБухгалтерии" + Или ТипТаблицы = "РегистрРасчета" Тогда + + ШаблонИмениТипа = "[ТипТаблицы]НаборЗаписей.[ИмяТаблицы]"; + Иначе - Результат = "[ТипТаблицы]Ссылка.[ИмяТаблицы]"; + ШаблонИмениТипа = "[ТипТаблицы]Ссылка.[ИмяТаблицы]"; КонецЕсли; - Результат = СтрЗаменить(Результат, "[ТипТаблицы]", ЛитералыТипа[0]); - Результат = СтрЗаменить(Результат, "[ИмяТаблицы]", ЛитералыТипа[1]); + ШаблонИмениТипа = СтрЗаменить(ШаблонИмениТипа, "[ТипТаблицы]", ЛитералыТипа[0]); + Результат = СтрЗаменить(ШаблонИмениТипа, "[ИмяТаблицы]", ЛитералыТипа[1]); Возврат Результат; -КонецФункции - -// Процедура удаления существующих движений документа при перепроведении (отмене проведения). -Процедура УдалитьДвиженияУДокумента(ДокументОбъект, Отказ) - - МассивОбрабатываемыхСтрокТаблицыДвижений = Новый Массив(); - - // Получение списка регистров, по которым существуют движения. - ТаблицаДвижений = ОпределитьНаличиеДвиженийПоДокументу(ДокументОбъект.Ссылка); - ТаблицаДвижений.Колонки.Добавить("НаборЗаписей"); - ТаблицаДвижений.Колонки.Добавить("БезусловноеУдаление", Новый ОписаниеТипов("Булево")); - - Для Каждого СтрокаДвижения Из ТаблицаДвижений Цикл - // Имя регистра передается как значение, полученное с помощью - // функции ПолноеИмя() метаданных регистра. - ПозицияТочки = СтрНайти(СтрокаДвижения.Имя, "."); - ТипРегистра = Лев(СтрокаДвижения.Имя, ПозицияТочки - 1); - ИмяРегистра = СокрП(Сред(СтрокаДвижения.Имя, ПозицияТочки + 1)); - - МассивОбрабатываемыхСтрокТаблицыДвижений.Добавить(СтрокаДвижения); - - Если ТипРегистра = "РегистрНакопления" Тогда - МетаданныеНабора = Метаданные.РегистрыНакопления[ИмяРегистра]; - Набор = РегистрыНакопления[ИмяРегистра].СоздатьНаборЗаписей(); - - ИначеЕсли ТипРегистра = "РегистрБухгалтерии" Тогда - МетаданныеНабора = Метаданные.РегистрыБухгалтерии[ИмяРегистра]; - Набор = РегистрыБухгалтерии[ИмяРегистра].СоздатьНаборЗаписей(); - - ИначеЕсли ТипРегистра = "РегистрСведений" Тогда - МетаданныеНабора = Метаданные.РегистрыСведений[ИмяРегистра]; - Набор = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей(); - - ИначеЕсли ТипРегистра = "РегистрРасчета" Тогда - МетаданныеНабора = Метаданные.РегистрыРасчета[ИмяРегистра]; - Набор = РегистрыРасчета[ИмяРегистра].СоздатьНаборЗаписей(); - - КонецЕсли; - - Если НЕ ПравоДоступа("Изменение", Набор.Метаданные()) Тогда - // Отсутствуют права на всю таблицу регистра. - ВызватьИсключение НСтр("ru = 'Нарушение прав доступа:'") + " " + СтрокаДвижения.Имя; - Возврат; - КонецЕсли; - - Набор.Отбор.Регистратор.Установить(ДокументОбъект.Ссылка); - - // Набор не записывается сразу, чтобы не откатывать транзакцию, если впоследствии - // выяснится, что на один из регистров не хватает прав. - СтрокаДвижения.НаборЗаписей = Набор; - - КонецЦикла; - - Для Каждого СтрокаДвижения Из МассивОбрабатываемыхСтрокТаблицыДвижений Цикл - Попытка - СтрокаДвижения.НаборЗаписей.Записать(); - Исключение - // Возможно «сработал» RLS или подсистема даты запрета изменения. - ВызватьИсключение НСтр("ru = 'Операция не выполнена:'") + " " + СтрокаДвижения.Имя - + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - КонецПопытки; - КонецЦикла; - - Для Каждого Движение Из ДокументОбъект.Движения Цикл - Если Движение.Количество() > 0 Тогда - Движение.Очистить(); - КонецЕсли; - КонецЦикла; - - // Удаление записей регистрации из всех последовательностей. - ТекстЗапроса = ""; - Для Каждого Последовательность Из ДокументОбъект.ПринадлежностьПоследовательностям Цикл - // В запросе получаем имена последовательностей, в которых документ зарегистрирован. - ТекстЗапроса = ТекстЗапроса + " - |" + ?(ТекстЗапроса = "", "", "ОБЪЕДИНИТЬ ВСЕ ") + " - |ВЫБРАТЬ """ + Последовательность.Метаданные().Имя - + """ КАК Имя ИЗ " + Последовательность.Метаданные().ПолноеИмя() - + " ГДЕ Регистратор = &Регистратор"; - - КонецЦикла; - - Если ТекстЗапроса = "" Тогда - ТаблицаРегистраций = Новый ТаблицаЗначений(); - Иначе - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("Регистратор", ДокументОбъект.Ссылка); - ТаблицаРегистраций = Запрос.Выполнить().Выгрузить(); - КонецЕсли; - - КоллекцияПоследовательностей = ДокументОбъект.ПринадлежностьПоследовательностям; - Для Каждого НаборЗаписейРегистрацииВПоследовательности Из КоллекцияПоследовательностей Цикл - Если (НаборЗаписейРегистрацииВПоследовательности.Количество() > 0) - ИЛИ (НЕ ТаблицаРегистраций.Найти(НаборЗаписейРегистрацииВПоследовательности.Метаданные().Имя,"Имя") = Неопределено) Тогда - НаборЗаписейРегистрацииВПоследовательности.Очистить(); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -Функция ОпределитьНаличиеДвиженийПоДокументу(ДокументСсылка) - ТекстЗапроса = ""; - // Для исключения падения для документов, проводящимся более чем по 256 таблицам. - счетчик_таблиц = 0; - - МетаданныеДокумента = ДокументСсылка.Метаданные(); - - Если МетаданныеДокумента.Движения.Количество() = 0 Тогда - Возврат Новый ТаблицаЗначений; - КонецЕсли; - - Для Каждого Движение Из МетаданныеДокумента.Движения Цикл - // В запросе получаем имена регистров, по которым есть хотя бы одно движение - // например, - // ВЫБРАТЬ Первые 1 «РегистрНакопления.ТоварыНаСкладах» - // ИЗ РегистрНакопления.ТоварыНаСкладах - // ГДЕ Регистратор = &Регистратор - - // Имя регистра приводим к Строка(200), см. ниже. - ТекстЗапроса = ТекстЗапроса + " - |" + ?(ТекстЗапроса = "", "", "ОБЪЕДИНИТЬ ВСЕ ") + " - |ВЫБРАТЬ ПЕРВЫЕ 1 ВЫРАЗИТЬ(""" + Движение.ПолноеИмя() - + """ КАК Строка(200)) КАК Имя ИЗ " + Движение.ПолноеИмя() - + " ГДЕ Регистратор = &Регистратор"; - - // Если в запрос попадает более 256 таблиц - разбиваем его на две части - // (вариант документа с проведением по 512 регистрам считаем нежизненным). - счетчик_таблиц = счетчик_таблиц + 1; - Если счетчик_таблиц = 256 Тогда - Прервать; - КонецЕсли; - - КонецЦикла; - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("Регистратор", ДокументСсылка); - // При выгрузке для колонки «Имя» тип устанавливается по самой длинной строке из запроса - // при втором проходе по таблице новое имя может не «влезть», по этому сразу в запросе - // приводится к строка(200). - ТаблицаЗапроса = Запрос.Выполнить().Выгрузить(); - - // Если количество таблиц не превысило 256 - возвращаем таблицу. - Если счетчик_таблиц = МетаданныеДокумента.Движения.Количество() Тогда - Возврат ТаблицаЗапроса; - КонецЕсли; - - // Таблиц больше чем 256, делаем доп. запрос и дополняем строки таблицы. - - ТекстЗапроса = ""; - Для Каждого Движение Из МетаданныеДокумента.Движения Цикл - - Если счетчик_таблиц > 0 Тогда - счетчик_таблиц = счетчик_таблиц - 1; - Продолжить; - КонецЕсли; - - ТекстЗапроса = ТекстЗапроса + " - |" + ?(ТекстЗапроса = "", "", "ОБЪЕДИНИТЬ ВСЕ ") + " - |ВЫБРАТЬ ПЕРВЫЕ 1 """ + Движение.ПолноеИмя() + """ КАК Имя ИЗ " - + Движение.ПолноеИмя() + " ГДЕ Регистратор = &Регистратор"; - - - КонецЦикла; - Запрос.Текст = ТекстЗапроса; - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - СтрокаТаблицы = ТаблицаЗапроса.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаТаблицы, Выборка); - КонецЦикла; - - Возврат ТаблицаЗапроса; КонецФункции -Процедура ЗаписатьПриНеобходимостиПубличныйИдентификатор(ДанныеДляЗаписиВИБ, ПолученныеДанныеСсылка, УзелОбмена, ПравилоКонвертации) +Процедура ЗаписатьПриНеобходимостиПубличныйИдентификатор( + ДанныеДляЗаписиВИБ, + ПолученныеДанныеСсылка, + УИДСтрокой, + УзелОбмена, + ПравилоКонвертации) ВариантИдентификации = СокрЛП(ПравилоКонвертации.ВариантИдентификации); - Если Не ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" Тогда + Если Не (ВариантИдентификации = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" + Или ВариантИдентификации = "ПоУникальномуИдентификатору") + Или Не ЗначениеЗаполнено(УзелОбмена) Тогда Возврат; КонецЕсли; - Если ДанныеДляЗаписиВИБ.ЭтоНовый() Тогда - Возврат; - КонецЕсли; - - Если ПолученныеДанныеСсылка = ДанныеДляЗаписиВИБ.Ссылка Тогда - Возврат; - КонецЕсли; - СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("Идентификатор", ПолученныеДанныеСсылка.УникальныйИдентификатор()); - СтруктураЗаписи.Вставить("Ссылка", ДанныеДляЗаписиВИБ.Ссылка); СтруктураЗаписи.Вставить("УзелИнформационнойБазы", УзелОбмена); + СтруктураЗаписи.Вставить("Ссылка", ?(ДанныеДляЗаписиВИБ = Неопределено, ПолученныеДанныеСсылка, ДанныеДляЗаписиВИБ.Ссылка)); - Если РегистрыСведений.ПубличныеИдентификаторыСинхронизируемыхОбъектов.ЗаписьЕстьВРегистре(СтруктураЗаписи) Тогда + Если ДанныеДляЗаписиВИБ <> Неопределено + И РегистрыСведений.ПубличныеИдентификаторыСинхронизируемыхОбъектов.ЗаписьЕстьВРегистре(СтруктураЗаписи) Тогда Возврат; КонецЕсли; - РегистрыСведений.ПубличныеИдентификаторыСинхронизируемыхОбъектов.ДобавитьЗапись(СтруктураЗаписи, Истина); + ПубличныйИдентификатор = ?(ЗначениеЗаполнено(УИДСтрокой), УИДСтрокой, ПолученныеДанныеСсылка.УникальныйИдентификатор()); + СтруктураЗаписи.Вставить("Идентификатор", ПубличныйИдентификатор); + РегистрыСведений.ПубличныеИдентификаторыСинхронизируемыхОбъектов.ДобавитьЗапись(СтруктураЗаписи, Истина); + +КонецПроцедуры + +Процедура ДобавитьВыгруженныеОбъектыВРегистрПубличныеИдентификаторы(КомпонентыОбмена) + УзелДляОбмена = КомпонентыОбмена.УзелКорреспондента; + СоставПланаОбмена = УзелДляОбмена.Метаданные().Состав; + ТекстЗапроса = "ВЫБРАТЬ + | ТаблицаИзменений.Ссылка + |ИЗ + | #ПолноеИмя#.Изменения КАК ТаблицаИзменений + |ЛЕВОЕ СОЕДИНЕНИЕ + | РегистрСведений.ПубличныеИдентификаторыСинхронизируемыхОбъектов КАК РПИ + |ПО РПИ.УзелИнформационнойБазы = &Узел И РПИ.Ссылка = ТаблицаИзменений.Ссылка + |ГДЕ ТаблицаИзменений.Узел = &Узел И ТаблицаИзменений.НомерСообщения <= &НомерСообщения + | И РПИ.Идентификатор ЕСТЬ NULL"; + Для Каждого ЭлементСостава Из СоставПланаОбмена Цикл + Если НЕ ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(ЭлементСостава.Метаданные) Тогда + Продолжить; + КонецЕсли; + ПолноеИмяОбъекта = ЭлементСостава.Метаданные.ПолноеИмя(); + Запрос = Новый Запрос; + Запрос.Текст = СтрЗаменить(ТекстЗапроса, "#ПолноеИмя#", ПолноеИмяОбъекта); + Запрос.УстановитьПараметр("Узел", УзелДляОбмена); + Запрос.УстановитьПараметр("НомерСообщения", КомпонентыОбмена.НомерСообщенияПолученногоКорреспондентом); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("Ссылка", Выборка.Ссылка); + СтруктураЗаписи.Вставить("УзелИнформационнойБазы", КомпонентыОбмена.УзелКорреспондента); + СтруктураЗаписи.Вставить("Идентификатор", Выборка.Ссылка.УникальныйИдентификатор()); + РегистрыСведений.ПубличныеИдентификаторыСинхронизируемыхОбъектов.ДобавитьЗапись(СтруктураЗаписи, Истина); + КонецЦикла; + КонецЦикла; КонецПроцедуры Функция XMLБазоваяСхема() @@ -4858,4 +5111,5 @@ #КонецОбласти -#КонецОбласти \ No newline at end of file +#КонецОбласти + diff --git a/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl index f926e7740..2e99c7a8e 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВнешнееСоединение/Module.bsl @@ -3,6 +3,54 @@ // Модуль предназначен для работы с внешним соединением. //////////////////////////////////////////////////////////////////////////////// +#Область ПрограммныйИнтерфейс + +// Возвращает данные списка объектов заданного объекта метаданных в виде системного представления. +// +// Параметры: +// ПолноеИмяТаблицы - Строка - имя таблицы, соответствующей объекту метаданных. +// +// Возвращаемое значение: +// Строка - системное представление таблицы значений, содержащей данные заданного объекта метаданных. +// +Функция ПолучитьОбъектыТаблицы(ПолноеИмяТаблицы) Экспорт + + Возврат ЗначениеВСтрокуВнутр(ОбщегоНазначения.ЗначениеИзСтрокиXML(ОбменДаннымиСервер.ПолучитьОбъектыТаблицы(ПолноеИмяТаблицы))); + +КонецФункции + +// Возвращает данные списка объектов заданного объекта метаданных в виде XML-строки. +// +// Параметры: +// ПолноеИмяТаблицы - Строка - имя таблицы, соответствующей объекту метаданных. +// +// Возвращаемое значение: +// Строка - XML-строка сериализованного представления таблицы значений, содержащей данные заданного объекта метаданных. +// +Функция ПолучитьОбъектыТаблицы_2_0_1_6(ПолноеИмяТаблицы) Экспорт + + Возврат ОбменДаннымиСервер.ПолучитьОбъектыТаблицы(ПолноеИмяТаблицы); + +КонецФункции + +// Возвращает заданные свойства (Синоним, Иерархический) объекта метаданных. +// +// Параметры: +// ПолноеИмяТаблицы - Строка - имя таблицы, соответствующей объекту метаданных. +// +// Возвращаемое значение: +// СтруктураНастроек - Структура - свойства объекта метаданных; +// * Синоним - Строка - Синоним. +// * Иерархический - Строка - признак Иерархический. +// +Функция СвойстваОбъектаМетаданных(ПолноеИмяТаблицы) Экспорт + + Возврат ОбменДаннымиСервер.СвойстваОбъектаМетаданных(ПолноеИмяТаблицы); + +КонецФункции + +#КонецОбласти + #Область СлужебныйПрограммныйИнтерфейс // Выполняет выгрузку данных для узла информационной базы во временный файл. @@ -127,33 +175,6 @@ КонецФункции -// Возвращает таблицу списка объектов заданного объекта метаданных. -// (Только для внутреннего использования). -// -Функция ПолучитьОбъектыТаблицы(ПолноеИмяТаблицы) Экспорт - - Возврат ЗначениеВСтрокуВнутр(ОбщегоНазначения.ЗначениеИзСтрокиXML(ОбменДаннымиСервер.ПолучитьОбъектыТаблицы(ПолноеИмяТаблицы))); - -КонецФункции - -// Возвращает таблицу списка объектов заданного объекта метаданных. -// (Только для внутреннего использования). -// -Функция ПолучитьОбъектыТаблицы_2_0_1_6(ПолноеИмяТаблицы) Экспорт - - Возврат ОбменДаннымиСервер.ПолучитьОбъектыТаблицы(ПолноеИмяТаблицы); - -КонецФункции - -// Получает заданные свойства (Синоним, Иерархический) объекта метаданных. -// (Только для внутреннего использования). -// -Функция СвойстваОбъектаМетаданных(ПолноеИмяТаблицы) Экспорт - - Возврат ОбменДаннымиСервер.СвойстваОбъектаМетаданных(ПолноеИмяТаблицы); - -КонецФункции - // Возвращает название предопределенного узла плана обмена. // (Только для внутреннего использования). // diff --git a/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl index 140db3b77..4c38fe645 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl @@ -3,6 +3,33 @@ // //////////////////////////////////////////////////////////////////////////////// +#Область ПрограммныйИнтерфейс + +// Устанавливает значение константы ДатаОбновленияПовторноИспользуемыхЗначенийМРО. +// В качестве устанавливаемого значения используется текущая дата компьютера (сервера). +// В момент изменения значения этой константы повторно-используемые значения +// для подсистемы обмена данными становятся неактуальными и требуют повторной инициализации. +// +// Параметры: +// Нет. +// +Процедура СброситьКэшМеханизмаРегистрацииОбъектов() Экспорт + + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + УстановитьПривилегированныйРежим(Истина); + // Записываем дату и время компьютера сервера - ТекущаяДата() + // метод ТекущаяДатаСеанса() использовать нельзя. + // Текущая дата сервера в данном случае используется в качестве ключа уникальности кэша механизма регистрации + // объектов. + Константы.ДатаОбновленияПовторноИспользуемыхЗначенийМРО.Установить(ТекущаяДата()); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #Область СлужебныйПрограммныйИнтерфейс // Возвращает признак ошибки при запуске: @@ -140,47 +167,7 @@ КонецПроцедуры -// Устанавливает значение константы ДатаОбновленияПовторноИспользуемыхЗначенийМРО. -// В качестве устанавливаемого значения используется текущая дата компьютера (сервера). -// В момент изменения значения этой константы повторно-используемые значения -// для подсистемы обмена данными становятся неактуальными и требуют повторной инициализации. // -// Параметры: -// Нет. -// -Процедура СброситьКэшМеханизмаРегистрацииОбъектов() Экспорт - - Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - - УстановитьПривилегированныйРежим(Истина); - // Записываем дату и время компьютера сервера - ТекущаяДата() - // метод ТекущаяДатаСеанса() использовать нельзя. - // Текущая дата сервера в данном случае используется в качестве ключа уникальности кэша механизма регистрации - // объектов. - Константы.ДатаОбновленияПовторноИспользуемыхЗначенийМРО.Установить(ТекущаяДата()); - - КонецЕсли; - -КонецПроцедуры - -// - -// Выполняет загрузку данных сообщения обмена, расположенного в локальной файловой системе сервера. -// -Процедура ВыполнитьЗагрузкуДляУзлаИнформационнойБазыЧерезФайл(Отказ, Знач УзелИнформационнойБазы, Знач ПолноеИмяФайлаСообщенияОбмена) Экспорт - - ПараметрыОбменаДанными = ОбменДаннымиСервер.ПараметрыОбменаДаннымиЧерезФайлИлиСтроку(); - - ПараметрыОбменаДанными.УзелИнформационнойБазы = УзелИнформационнойБазы; - ПараметрыОбменаДанными.ПолноеИмяФайлаСообщенияОбмена = ПолноеИмяФайлаСообщенияОбмена; - ПараметрыОбменаДанными.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных; - Попытка - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(ПараметрыОбменаДанными); - Исключение - Отказ = Истина; - КонецПопытки; - -КонецПроцедуры // Фиксирует успешное выполнение обмена данными в системе. // @@ -563,6 +550,10 @@ ВызватьИсключение НСтр("ru = 'Метод не поддерживается в режиме управляемого приложения.'"); КонецЕсли; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ВызватьИсключение НСтр("ru = 'Метод не поддерживается при работе в модели сервиса.'"); + КонецЕсли; + УстановитьПривилегированныйРежим(Истина); Выполнить(СтрокаОбработчика); @@ -604,6 +595,10 @@ ВызватьИсключение НСтр("ru = 'Метод не поддерживается в режиме управляемого приложения.'"); КонецЕсли; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ВызватьИсключение НСтр("ru = 'Метод не поддерживается при работе в модели сервиса.'"); + КонецЕсли; + УстановитьПривилегированныйРежим(Истина); Возврат ОбменДаннымиСобытия.ПолучитьЗначенияСвойствДляСсылки(Ссылка, СвойстваОбъекта, СвойстваОбъектаСтрокой, ОбъектМетаданныхИмя); @@ -826,6 +821,21 @@ Возврат Результат; КонецФункции +// Проверяет, является ли главным указанный узел обмена. +// +// Параметры: +// УзелИнформационнойБазы - ПланОбменаСсылка - ссылка на узел плана обмена, +// который надо проверить является он главным или нет. +// +// Возвращаемое значение: +// Булево. +// +Функция УзелЯвляетсяГлавным(Знач УзелИнформационнойБазы) Экспорт + + Возврат ПланыОбмена.ГлавныйУзел() = УзелИнформационнойБазы; + +КонецФункции + // Создает запрос на очистку разрешений для узла (при удалении). // Функция ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов(Знач УзелИнформационнойБазы) Экспорт diff --git a/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl index d1829bdca..61d4fb294 100644 --- a/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl @@ -286,6 +286,66 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Обработчики событий подсистем БСП. + +// Процедура-обработчик запуска клиентского сеанса приложения. +// Если выполняется запуск ИБ для подчиненного узла РИБ, +// с необходимостью повтора загрузки сообщения обмена, тогда +// пользователю предлагается принять решение о повторной загрузке +// или продолжении без загрузки. +// +Процедура ПередНачаломРаботыСистемы(Параметры) Экспорт + + ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + + Если НЕ ПараметрыКлиента.Свойство("ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском") Тогда + Возврат; + КонецЕсли; + + Параметры.ИнтерактивнаяОбработка = Новый ОписаниеОповещения( + "ИнтерактивнаяОбработкаПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском", ЭтотОбъект); + +КонецПроцедуры + +// Процедура-обработчик запуска клиентского сеанса приложения. +// Если выполняется первый запуск ИБ для подчиненного узла РИБ, +// то открывается форма помощника создания обмена данными. +// +Процедура ПриНачалеРаботыСистемы(Параметры) Экспорт + + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Если ПараметрыРаботыКлиента.Свойство("ОткрытьПомощникСозданияОбменаДаннымиДляНастройкиПодчиненногоУзла") Тогда + + Для Каждого Окно Из ПолучитьОкна() Цикл + Если Окно.Основное Тогда + Окно.Активизировать(); + Прервать; + КонецЕсли; + КонецЦикла; + + ПараметрыФормы = Новый Структура("ИмяПланаОбмена, ЭтоПродолжениеНастройкиВПодчиненномУзлеРИБ", ПараметрыРаботыКлиента.ИмяПланаОбменаРИБ, Истина); + ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.Форма", ПараметрыФормы, , , , , , РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); + КонецЕсли; + +КонецПроцедуры + +Процедура ПослеНачалаРаботыСистемы() Экспорт + + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Если НЕ ПараметрыРаботыКлиента.ДоступноИспользованиеРазделенныхДанных ИЛИ ПараметрыРаботыКлиента.РазделениеВключено Тогда + Возврат; + КонецЕсли; + + Если Не ПараметрыРаботыКлиента.Свойство("ОткрытьПомощникСозданияОбменаДаннымиДляНастройкиПодчиненногоУзла") + И ПараметрыРаботыКлиента.Свойство("ПроверитьНеобходимостьОбновленияКонфигурацииПодчиненногоУзла") Тогда + + ПодключитьОбработчикОжидания("ПроверитьНеобходимостьОбновленияКонфигурацииПодчиненногоУзлаПриЗапуске", 1, Истина); + + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -377,7 +437,7 @@ // Процедура ОткрытьПодробноеОписаниеСинхронизации(СсылкаНаПодробноеОписание) Экспорт - Если Врег(Лев(СсылкаНаПодробноеОписание, 4)) = "HTTP" Тогда + Если ВРег(Лев(СсылкаНаПодробноеОписание, 4)) = "HTTP" Тогда ПерейтиПоНавигационнойСсылке(СсылкаНаПодробноеОписание); @@ -400,66 +460,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем БСП. - -// Процедура-обработчик запуска клиентского сеанса приложения. -// Если выполняется запуск ИБ для подчиненного узла РИБ, -// с необходимостью повтора загрузки сообщения обмена, тогда -// пользователю предлагается принять решение о повторной загрузке -// или продолжении без загрузки. -// -Процедура ПередНачаломРаботыСистемы(Параметры) Экспорт - - ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); - - Если НЕ ПараметрыКлиента.Свойство("ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском") Тогда - Возврат; - КонецЕсли; - - Параметры.ИнтерактивнаяОбработка = Новый ОписаниеОповещения( - "ИнтерактивнаяОбработкаПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском", ЭтотОбъект); - -КонецПроцедуры - -// Процедура-обработчик запуска клиентского сеанса приложения. -// Если выполняется первый запуск ИБ для подчиненного узла РИБ, -// то открывается форма помощника создания обмена данными. -// -Процедура ПриНачалеРаботыСистемы(Параметры) Экспорт - - ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); - Если ПараметрыРаботыКлиента.Свойство("ОткрытьПомощникСозданияОбменаДаннымиДляНастройкиПодчиненногоУзла") Тогда - - Для Каждого Окно Из ПолучитьОкна() Цикл - Если Окно.Основное Тогда - Окно.Активизировать(); - Прервать; - КонецЕсли; - КонецЦикла; - - ПараметрыФормы = Новый Структура("ИмяПланаОбмена, ЭтоПродолжениеНастройкиВПодчиненномУзлеРИБ", ПараметрыРаботыКлиента.ИмяПланаОбменаРИБ, Истина); - ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.Форма", ПараметрыФормы, , , , , , РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); - КонецЕсли; - -КонецПроцедуры - -Процедура ПослеНачалаРаботыСистемы() Экспорт - - ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); - Если НЕ ПараметрыРаботыКлиента.ДоступноИспользованиеРазделенныхДанных ИЛИ ПараметрыРаботыКлиента.РазделениеВключено Тогда - Возврат; - КонецЕсли; - - Если Не ПараметрыРаботыКлиента.Свойство("ОткрытьПомощникСозданияОбменаДаннымиДляНастройкиПодчиненногоУзла") - И ПараметрыРаботыКлиента.Свойство("ПроверитьНеобходимостьОбновленияКонфигурацииПодчиненногоУзла") Тогда - - ПодключитьОбработчикОжидания("ПроверитьНеобходимостьОбновленияКонфигурацииПодчиненногоУзлаПриЗапуске", 1, Истина); - - КонецЕсли; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Экспортные служебные процедуры и функции. @@ -547,7 +547,7 @@ // параметрами: // Результат - Строка - Выбранное значение (массив строк, если был // множественный выбор); -// ДополнительныеПараметры - Неопределено +// ДополнительныеПараметры - Неопределено. // Процедура ОбработчикВыбораФайловогоКаталога(Объект, Знач ИмяСвойства, СтандартнаяОбработка = Ложь, Знач ПараметрыДиалога = Неопределено, ОповещениеЗавершения = Неопределено) Экспорт СтандартнаяОбработка = Ложь; @@ -606,7 +606,7 @@ // параметрами: // Результат - Строка - Выбранное значение (массив строк, если был // множественный выбор); -// ДополнительныеПараметры - Неопределено +// ДополнительныеПараметры - Неопределено. // // Процедура ОбработчикВыбораФайла(Объект, Знач ИмяСвойства, СтандартнаяОбработка = Ложь, Знач ПараметрыДиалога = Неопределено, ОповещениеЗавершения = Неопределено) Экспорт @@ -664,7 +664,7 @@ // ОповещениеЗавершения - ОписаниеОповещения - Экспортная процедура, которая будет вызвана следующими параметрами: // Результат - Массив - Содержит структуры с полями Имя, Хранение, // ОписаниеОшибки для каждого файла. -// ДополнительныеПараметры - Неопределено +// ДополнительныеПараметры - Неопределено. // // ИменаФайлов - Массив - Массив имен файлов для передачи. // ИдентификаторФормы - УникальныйИдентификатор - Параметр для хранилища. @@ -855,7 +855,7 @@ // ОповещениеЗавершения - ОписаниеОповещения - Экспортная процедура, которая будет вызвано со следующими // параметрами: // Результат - Структура с полями Имя, Хранение, ОписаниеОшибки. -// ДополнительныеПараметры - Неопределено +// ДополнительныеПараметры - Неопределено. // // ПараметрыДиалога - Структура - Необязательные дополнительные параметры диалога выбора // файлов. @@ -1000,7 +1000,7 @@ // Результат - Структура - Целевая структура. // ЗначенияПоУмолчанию - Структура - Значения по умолчанию. // -Процедура УстановитьЗначенияСтруктурыПоУмолчанию(Результат, Знач ЗначенияПоУмолчанию) Экспорт +Процедура УстановитьЗначенияСтруктурыПоУмолчанию(Результат, Знач ЗначенияПоУмолчанию) Если Результат = Неопределено Тогда Результат = Новый Структура; @@ -1143,7 +1143,9 @@ // Открываем форму помощника сопоставления объектов; // в качестве параметра формы задаем узел информационной базы; - ПараметрыФормы = Новый Структура("УзелИнформационнойБазы", УзелИнформационнойБазы); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("УзелИнформационнойБазы", УзелИнформационнойБазы); + ПараметрыФормы.Вставить("РасширенныйРежимДополненияВыгрузки", Истина); ИмяФормы = "Обработка.ПомощникИнтерактивногоОбменаДанными.Форма"; ОткрытьФорму(ИмяФормы, ПараметрыФормы, Владелец, УзелИнформационнойБазы, , , ,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); @@ -1202,9 +1204,15 @@ // Процедура УдалитьНастройкуСинхронизации(Знач УзелИнформационнойБазы) Экспорт - ТекстВопроса = НСтр("ru = 'Удалить настройку синхронизации данных?'"); - ОписаниеОповещения = Новый ОписаниеОповещения("УдалитьНастройкуСинхронизацииЗавершение", ЭтотОбъект, УзелИнформационнойБазы); - ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да); + Если ОбменДаннымиВызовСервера.УзелЯвляетсяГлавным(УзелИнформационнойБазы) Тогда + ТекстПредупреждения = НСтр("ru = 'Отключение информационной базы от главного узла можно выполнить + |с помощью параметра запуска конфигуратора /ResetMasterNode.'"); + ПоказатьПредупреждение(, ТекстПредупреждения); + Иначе + ТекстВопроса = НСтр("ru = 'Удалить настройку синхронизации данных?'"); + ОписаниеОповещения = Новый ОписаниеОповещения("УдалитьНастройкуСинхронизацииЗавершение", ЭтотОбъект, УзелИнформационнойБазы); + ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да); + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбменДаннымиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиКлиентСервер/Module.bsl index 8ee983259..3a7bc01a6 100644 --- a/SSL/src/CommonModules/ОбменДаннымиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиКлиентСервер/Module.bsl @@ -13,7 +13,37 @@ СтрокаСообщения = НСтр("ru = 'В имени пользователя %1 содержатся недопустимые символы. |Имя пользователя не должно содержать символы %2.'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяПользователя, НедопустимыеСимволыВИмениПользователяWSПрокси()); + СтрокаСообщения = СтрШаблон(СтрокаСообщения, ИмяПользователя, НедопустимыеСимволыВИмениПользователяWSПрокси()); + ВызватьИсключение СтрокаСообщения; + КонецЕсли; + +КонецПроцедуры + +// Для внутреннего использования. +// +Процедура ПроверитьКорректностьФорматаАдресаWSПрокси(Знач АдресWSПрокси) Экспорт + + ЭтоИнтернетАдрес = Ложь; + ДопустимыеПрефиксыWSПрокси = ДопустимыеПрефиксыWSПрокси(); + + Для Каждого Префикс Из ДопустимыеПрефиксыWSПрокси Цикл + Если Лев(НРег(АдресWSПрокси), СтрДлина(Префикс)) = НРег(Префикс) Тогда + ЭтоИнтернетАдрес = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если Не ЭтоИнтернетАдрес Тогда + СтрокаПрефиксов = ""; + Для Каждого Префикс Из ДопустимыеПрефиксыWSПрокси Цикл + СтрокаПрефиксов = СтрокаПрефиксов + ?(ПустаяСтрока(СтрокаПрефиксов), """", " или """) + Префикс + """"; + КонецЦикла; + + СтрокаСообщения = НСтр("ru = 'Неверный формат адреса ""%1"". + |Адрес должен начинаться с префикса Интернет протокола %2 (например: ""http://myserver.com/service"").'"); + + СтрокаСообщения = СтрШаблон(СтрокаСообщения, АдресWSПрокси, СтрокаПрефиксов); + ВызватьИсключение СтрокаСообщения; КонецЕсли; @@ -27,20 +57,29 @@ КонецФункции +// Для внутреннего использования. +// +Функция ДопустимыеПрефиксыWSПрокси() + + Результат = Новый Массив(); + + Результат.Добавить("http"); + Результат.Добавить("https"); + + Возврат Результат; + +КонецФункции + // Для внутреннего использования. // Функция СтрокаСодержитСимвол(Знач Строка, Знач СтрокаСимволов) Для Индекс = 1 По СтрДлина(СтрокаСимволов) Цикл - Символ = Сред(СтрокаСимволов, Индекс, 1); Если СтрНайти(Строка, Символ) <> 0 Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; Возврат Ложь; diff --git a/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl index b5054eee2..cc57321c6 100644 --- a/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl @@ -224,11 +224,12 @@ // Получает доступные для использования версии универсального формата EnterpriseData // // Параметры: -// ВерсииФормата - Соответствие - Соответствие номера версии формата, -// общему модулю, в котором находятся обработчики выгрузки/загрузки для данной версии. +// ВерсииФормата - Соответствие - Соответствие номера версии формата, +// общему модулю, в котором находятся обработчики выгрузки/загрузки для данной версии. // // Пример тела процедуры: -// ВерсииФормата.Вставить("1.0.beta", _ДемоМенеджерОбменаЧерезУниверсальныйФормат); +// ВерсииФормата.Вставить("1.0.beta", <ИмяОбщегоМодуляСПравиламиКонвертации>); +// Процедура ПриПолученииДоступныхВерсийФормата(ВерсииФормата) Экспорт diff --git a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl index 5a9150d4d..76703f8a5 100644 --- a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl @@ -20,11 +20,16 @@ // Функция ОбменДаннымиВключен(Знач ИмяПланаОбмена, Знач Отправитель = Неопределено) Экспорт + Если Не ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") Тогда + Возврат Ложь; + КонецЕсли; + ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 1 1 |ИЗ | ПланОбмена." + ИмяПланаОбмена + " КАК ПланОбмена |ГДЕ - | НЕ ПланОбмена.ЭтотУзел + | НЕ ПланОбмена.ПометкаУдаления + | И НЕ ПланОбмена.ЭтотУзел | И ПланОбмена.Ссылка <> &Отправитель"; Запрос = Новый Запрос; @@ -55,6 +60,97 @@ КонецФункции +// Определяет, является ли переданный узел плана обмена автономным рабочим местом. +// +Функция ЭтоУзелАвтономногоРабочегоМеста(Знач УзелИнформационнойБазы) Экспорт + + Возврат ОбменДаннымиПовтИсп.АвтономнаяРаботаПоддерживается() + И УзелИнформационнойБазы.Метаданные().Имя = ОбменДаннымиПовтИсп.ПланОбменаАвтономнойРаботы(); +КонецФункции + +// Возвращает ссылку на узел плана обмена, найденный по его коду. +// Если узел не найден, возвращается Неопределено. +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена, как оно задано в конфигураторе. +// КодУзла - Строка - Код узла плана обмена. +// +// Возвращаемое значение: +// ПланОбменаСсылка - ссылка на найденный узел плана обмена. +// Неопределено - в случае, если узел плана обмена не найден. +// +Функция НайтиУзелПланаОбменаПоКоду(ИмяПланаОбмена, КодУзла) Экспорт + + ТекстЗапроса = + "ВЫБРАТЬ + | ПланОбмена.Ссылка КАК Ссылка + |ИЗ + | ПланОбмена.[ИмяПланаОбмена] КАК ПланОбмена + |ГДЕ + | ПланОбмена.Код = &Код"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", ИмяПланаОбмена); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Код", КодУзла); + Запрос.Текст = ТекстЗапроса; + + РезультатЗапроса = Запрос.Выполнить(); + + Если РезультатЗапроса.Пустой() Тогда + + Возврат Неопределено; + + КонецЕсли; + + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + + Возврат Выборка.Ссылка; +КонецФункции + +// Возвращает назначенный для плана обмена режим регистрации изменений, +// применяемый при выполнении записи данных в рамках обновления информационной базы. +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена, как оно задано в конфигураторе. +// +// Возвращаемое значение: +// "Все" - регистрируются все данные (например, для обмена РИБ с отбором), +// "ТолькоНовые" - регистрируются только новые объекты ссылочных типов (например, для обмена по правилам), +// "ОпределяетсяЛогикойОбновления" - решение о регистрации принимается на уровне логики обновления. +// +Функция РежимРегистрацииДанныхДляПланаОбменаПриОбновленииИнформационнойБазы(ИмяПланаОбмена) Экспорт + + Возврат ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, + "РежимРегистрацииДанныхПриОбновленииИнформационнойБазы"); + +КонецФункции + +// Устанавливает внешнее соединение с информационной базой и возвращает описание соединения. +// +// Параметры: +// Параметры - Структура - параметры для установки внешнего соединения с информационной базой. +// Свойства см. в функции +// ОбщегоНазначенияКлиентСервер.СтруктураПараметровДляУстановкиВнешнегоСоединения: +// +// * ВариантРаботыИнформационнойБазы - Число - Вариант работы информационной базы: 0 - файловый; 1 - +// клиент-серверный; +// * КаталогИнформационнойБазы - Строка - Каталог информационной базы для файлового режима работы; +// * ИмяСервера1СПредприятия - Строка - Имя сервера1С:Предприятия; +// * ИмяИнформационнойБазыНаСервере1СПредприятия - Строка - Имя информационной базы на сервере1С:Предприятия; +// * АутентификацияОперационнойСистемы - Булево - Признак аутентификации операционной системы при создании +// внешнего подключения к информационной базе; +// * ИмяПользователя - Строка - Имя пользователя информационной базы; +// * ПарольПользователя - Строка - Пароль пользователя информационной базы. +// +Функция УстановитьВнешнееСоединениеСБазой(Параметры) Экспорт + + // Преобразуем настройки - параметры внешнего соединения в параметры транспорта. + НастройкиТранспорта = ОбменДаннымиСервер.НастройкиТранспортаПоПараметрамВнешнегоСоединения(Параметры); + Возврат ОбменДаннымиСервер.УстановитьВнешнееСоединениеСБазой(НастройкиТранспорта); +КонецФункции + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -122,20 +218,6 @@ КонецФункции -// Устанавливает внешнее соединение с информационной базой и возвращает описание соединения. -// (Только для внутреннего использования). -// -// Параметры: -// Параметры - Структура - Параметры внешнего соединения, подробно см -// ОбщегоНазначения.УстановитьВнешнееСоединениеСБазой. -// -Функция УстановитьВнешнееСоединениеСБазой(Параметры) Экспорт - - // Преобразуем настройки - параметры внешнего соединения в параметры транспорта. - НастройкиТранспорта = ОбменДаннымиСервер.НастройкиТранспортаПоПараметрамВнешнегоСоединения(Параметры); - Возврат ОбменДаннымиСервер.УстановитьВнешнееСоединениеСБазой(НастройкиТранспорта); -КонецФункции - // Определяет, используется ли план обмена, идентифицируемый именем, в модели сервиса. // Чтобы дать возможность это определить, все планы обмена на уровне модуля менеджера // определяют функцию ПланОбменаИспользуетсяВМоделиСервиса(), @@ -160,45 +242,6 @@ Возврат Результат; КонецФункции -// Определяет, входит ли план обмена в список планов обмена, которые используют обмен данными по формату XDTO. -// -// Параметры: -// ПланОбмена - Ссылка на узел плана обмена или имя плана обмена. -// -// Возвращаемое значение: Булево. -// -Функция ЭтоПланОбменаXDTO(ПланОбмена) Экспорт - Если ТипЗнч(ПланОбмена) = Тип("Строка") Тогда - ИмяПланаОбмена = ПланОбмена; - Иначе - ИмяПланаОбмена = ПланОбмена.Метаданные().Имя; - КонецЕсли; - Возврат ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ЭтоПланОбменаXDTO"); -КонецФункции - -// Определяет номер версии подсистемы учета синхронизируемых объектов для узла информационной базы. -// -// Параметры: -// УзелИнформационнойБазы - ПланыОбменаСсылка. -// -// Возвращаемое значение - Число, номер версии -// 1 - с использованием регистра СоответствиеОбъектовИнформационныхБаз -// 2 - с использованием регистров ПубличныеИдентификаторыСинхронизируемыхОбъектов и -// ДанныеОбъектовДляРегистрацииВОбменах. -// -Функция ВерсияПодсистемыУчетаСинхронизируемыхОбъектов(Знач УзелИнформационнойБазы) Экспорт - Запрос = Новый Запрос(" - |ВЫБРАТЬ ПЕРВЫЕ 1 - | 1 - |ИЗ - | РегистрСведений.СоответствияОбъектовИнформационныхБаз - |ГДЕ - | УзелИнформационнойБазы = &УзелИнформационнойБазы"); - Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелИнформационнойБазы); - РезультатЗапроса = Запрос.Выполнить(); - Возврат ?(РезультатЗапроса.Пустой(),2,1); -КонецФункции - // Заполняет перечень кодов возможных ошибок. // // Возвращаемое значение: @@ -312,17 +355,47 @@ КонецФункции - -// Для внутреннего использования. -// Функция АвтономнаяРаботаПоддерживается() Экспорт Возврат ПланыОбменаАвтономнойРаботы().Количество() = 1; КонецФункции -// Для внутреннего использования. +Функция НазначениеПланаОбмена(ИмяПланаОбмена) Экспорт + + Возврат ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "НазначениеПланаОбмена"); + +КонецФункции + +// Определяет наличие макета у плана обмена. // +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена, как оно задано в конфигураторе. +// ИмяМакета - Строка - имя макета, наличие которого следует определить. +// +// Возвращаемое значение: +// Истина - план обмена содержит заданный макет, иначе Ложь. +// +Функция ЕстьМакетПланаОбмена(Знач ИмяПланаОбмена, Знач ИмяМакета) Экспорт + + Возврат Метаданные.ПланыОбмена[ИмяПланаОбмена].Макеты.Найти(ИмяМакета) <> Неопределено; + +КонецФункции + +// Возвращает признак принадлежности плана обмена к плану обмена РИБ. +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена, как оно задано в конфигураторе. +// +// Возвращаемое значение: +// Истина - план обмена принадлежит плану обмена РИБ, иначе Ложь. +// +Функция ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена) Экспорт + + Возврат Метаданные.ПланыОбмена[ИмяПланаОбмена].РаспределеннаяИнформационнаяБаза; + +КонецФункции + Функция ПланОбменаАвтономнойРаботы() Экспорт Результат = ПланыОбменаАвтономнойРаботы(); @@ -340,46 +413,20 @@ Возврат Результат[0]; КонецФункции -// Определяет, является ли переданный узел плана обмена автономным рабочим местом. +// Определяет, входит ли план обмена в список планов обмена, которые используют обмен данными по формату XDTO. // -Функция ЭтоУзелАвтономногоРабочегоМеста(Знач УзелИнформационнойБазы) Экспорт - - Возврат ОбменДаннымиПовтИсп.АвтономнаяРаботаПоддерживается() - И УзелИнформационнойБазы.Метаданные().Имя = ОбменДаннымиПовтИсп.ПланОбменаАвтономнойРаботы(); -КонецФункции - +// Параметры: +// ПланОбмена - Ссылка на узел плана обмена или имя плана обмена. // - -// Для внутреннего использования. +// Возвращаемое значение: Булево. // -Функция НайтиУзелПланаОбменаПоКоду(ИмяПланаОбмена, КодУзла) Экспорт - - ТекстЗапроса = - "ВЫБРАТЬ - | ПланОбмена.Ссылка КАК Ссылка - |ИЗ - | ПланОбмена.[ИмяПланаОбмена] КАК ПланОбмена - |ГДЕ - | ПланОбмена.Код = &Код"; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", ИмяПланаОбмена); - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Код", КодУзла); - Запрос.Текст = ТекстЗапроса; - - РезультатЗапроса = Запрос.Выполнить(); - - Если РезультатЗапроса.Пустой() Тогда - - Возврат Неопределено; - +Функция ЭтоПланОбменаXDTO(ПланОбмена) Экспорт + Если ТипЗнч(ПланОбмена) = Тип("Строка") Тогда + ИмяПланаОбмена = ПланОбмена; + Иначе + ИмяПланаОбмена = ПланОбмена.Метаданные().Имя; КонецЕсли; - - Выборка = РезультатЗапроса.Выбрать(); - Выборка.Следующий(); - - Возврат Выборка.Ссылка; + Возврат ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ЭтоПланОбменаXDTO"); КонецФункции Функция ЭтоСтроковыйРеквизитНеограниченнойДлины(ПолноеИмя, ИмяРеквизита) Экспорт @@ -755,20 +802,6 @@ КонецФункции -// Возвращает признак принадлежности плана обмена к плану обмена РИБ. -// -// Параметры: -// ИмяПланаОбмена - Строка - имя плана обмена, как оно задано в конфигураторе. -// -// Возвращаемое значение: -// Истина - план обмена принадлежит плану обмена РИБ, иначе Ложь. -// -Функция ЭтоПланОбменаРаспределеннойИнформационнойБазы(ИмяПланаОбмена) Экспорт - - Возврат Метаданные.ПланыОбмена[ИмяПланаОбмена].РаспределеннаяИнформационнаяБаза; - -КонецФункции - // Получает имя плана обмена как объекта метаданного для заданного узла. // // Параметры: @@ -1074,21 +1107,6 @@ КонецФункции -// Определяет наличие макета у плана обмена. -// -// Параметры: -// ИмяПланаОбмена - Строка - имя плана обмена, как оно задано в конфигураторе. -// ИмяМакета - Строка - имя макета, наличие которого следует определить. -// -// Возвращаемое значение: -// Истина - план обмена содержит заданный макет, иначе Ложь. -// -Функция ЕстьМакетПланаОбмена(Знач ИмяПланаОбмена, Знач ИмяМакета) Экспорт - - Возврат Метаданные.ПланыОбмена[ИмяПланаОбмена].Макеты.Найти(ИмяМакета) <> Неопределено; - -КонецФункции - // Функция-обертка одноименной функции модуля ОбменДаннымиСобытия. // Функция МассивУзловПоЗначениямСвойств(ЗначенияСвойств, ТекстЗапроса, ИмяПланаОбмена, ИмяРеквизитаФлага, Знач Выгрузка = Ложь) Экспорт @@ -1118,12 +1136,9 @@ Результат = ПланыОбмена[ПолучитьИмяПланаОбмена(УзелИнформационнойБазы)].ИспользуемыеТранспортыСообщенийОбмена(); - // Для базовых версий конфигураций обмен через COM-соединение и Веб-сервис не поддерживаем. + // Для базовых версий конфигураций обмен через COM-соединение не поддерживаем. Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда - ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Перечисления.ВидыТранспортаСообщенийОбмена.COM); - ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Перечисления.ВидыТранспортаСообщенийОбмена.WS); - КонецЕсли; // Для обмена в РИБ обмен через COM-соединение не поддерживаем. diff --git a/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl index ac3d7e23d..ca1fa06a2 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl @@ -458,8 +458,63 @@ Возврат Результат; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Работа с монитором проблем обмена данными. +// Выполняет отправку или получение данных для узла информационной базы используя любой из +// доступных для плана обмена канал связи, кроме COM-соединения и web-сервиса. +// +// Параметры: +// Отказ - Булево - флаг отказа, устанавливается в Истина в случае +// не успешного выполнения процедуры. +// УзелИнформационнойБазы - УзелОбменаСсылка - ПланОбменаСсылка - узел плана обмена, +// для которого выполняется действие обмена данными. +// ДействиеПриОбмене - ПеречислениеСсылка.ДействияПриОбмене - выполняемое действие обмена данными. +// ВидТранспортаСообщенийОбмена - ПеречислениеСсылка.Перечисления.ВидыТранспортаСообщенийОбмена - вид транспорта, +// который будет использоваться в процессе обмена данными. Если не указан, +// определяется из параметров транспорта, заданных для узла плана обмена при +// настройке обмена. Необязательный, значение по умолчанию Неопределено. +// ТолькоПараметры - Булево - содержит признак выборочной загрузки данных при обмене РИБ. +// +Процедура ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы( + Отказ, + УзелИнформационнойБазы, + ДействиеПриОбмене, + ВидТранспортаСообщенийОбмена = Неопределено, + Знач ТолькоПараметры = Ложь) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + // ИНИЦИАЛИЗАЦИЯ ОБМЕНА ДАННЫМИ + СтруктураНастроекОбмена = ОбменДаннымиПовтИсп.ПолучитьСтруктуруНастроекОбменаДляУзлаИнформационнойБазы( + УзелИнформационнойБазы, ДействиеПриОбмене, ВидТранспортаСообщенийОбмена); + + Если СтруктураНастроекОбмена.Отказ Тогда + + // Если настройка содержит ошибки, то обмен не производим; статус "Отменено". + ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); + + Отказ = Истина; + + Возврат; + КонецЕсли; + + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено; + СтруктураНастроекОбмена.ДатаНачала = ТекущаяДатаСеанса(); + + СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтруктураНастроекОбмена.УзелИнформационнойБазыНаименование); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщения, СтруктураНастроекОбмена); + + // ОБМЕН ДАННЫМИ + ВыполнитьОбменДаннымиЧерезФайловыйРесурс(СтруктураНастроекОбмена, ТолькоПараметры); + + ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); + + Если Не РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена) Тогда + + Отказ = Истина; + + КонецЕсли; + +КонецПроцедуры // Возвращает количество нерассмотренных проблем обмена данными. Используется для отображения // количества проблем обмена в пользовательском интерфейсе. Например, для использования в заголовке @@ -493,13 +548,13 @@ Если Количество > 0 Тогда - Заголовок = Нстр("ru = 'Предупреждения (%1)'"); + Заголовок = НСтр("ru = 'Предупреждения (%1)'"); Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Заголовок, Количество); Картинка = БиблиотекаКартинок.Предупреждение; Иначе - Заголовок = Нстр("ru = 'Предупреждений нет'"); + Заголовок = НСтр("ru = 'Предупреждений нет'"); Картинка = Новый Картинка; КонецЕсли; @@ -512,10 +567,443 @@ КонецФункции +// Определяет, существует ли каталог на FTP-сервере. +// +// Параметры: +// Путь - Строка - путь к каталогу. +// ИмяКаталога - Строка - имя каталога. +// FTPСоединение - FTPСоединение - FTPСоединение, используемое для подключения к FTP-серверу. +// +// Возвращаемое значение: +// Булево - если Истина, то каталог существует; Ложь - нет. +// +Функция FTPКаталогСуществует(Знач Путь, Знач ИмяКаталога, Знач FTPСоединение) Экспорт + + Для Каждого FTPФайл Из FTPСоединение.НайтиФайлы(Путь) Цикл + + Если FTPФайл.ЭтоКаталог() И FTPФайл.Имя = ИмяКаталога Тогда + + Возврат Истина; + + КонецЕсли; + + КонецЦикла; + + Возврат Ложь; +КонецФункции + +// Возвращает имена реквизитов значений по умолчанию для узла базы корреспондента. +// Передаваемый массив повторяет состав реквизитов шапки плана обмена базы корреспондента. +// +// Параметры: +// ИмяПланаОбмена - Строка - Имя плана обмена. +// ВерсияКорреспондента - Строка - Номер версии корреспондента. Используется, например, для разного +// состава значений по умолчанию на узле для разных версий корреспондента. +// +// Возвращаемое значение: +// ФиксированныйМассив - фиксированный массив строк, содержащий имена реквизитов значений +// по умолчанию для узла базы корреспондента. +// +Функция ТаблицыКорреспондентаДляЗначенийПоУмолчанию(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента) Экспорт + + Результат = Новый Массив; + + ЗначенияПоУмолчанию = ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента(ИмяПланаОбмена, ВерсияКорреспондента); + + Для Каждого Элемент Из ЗначенияПоУмолчанию Цикл + + Если СтрНайти(Элемент.Ключ, "_Ключ") > 0 Тогда + Продолжить; + КонецЕсли; + + Результат.Добавить(Элемент.Ключ); + + КонецЦикла; + + Возврат Новый ФиксированныйМассив(Результат); + +КонецФункции + +// Возвращает данные таблиц для реквизитов узла обмена. +// +// Параметры: +// Таблицы - Массив - Массив строк с именами реквизитов узла плана обмена. +// ИмяПланаОбмена - Строка - Имя плана обмена. +// +// Возвращаемое значение: +// Соответствие - соответствие таблиц и их данных. +// +Функция ДанныеТаблицКорреспондента(Таблицы, Знач ИмяПланаОбмена) Экспорт + + Результат = Новый Соответствие; + РеквизитыПланаОбмена = Метаданные.ПланыОбмена[ИмяПланаОбмена].Реквизиты; + + Для Каждого Элемент Из Таблицы Цикл + + Реквизит = РеквизитыПланаОбмена.Найти(Элемент); + + Если Реквизит <> Неопределено Тогда + + ТипыРеквизита = Реквизит.Тип.Типы(); + + Если ТипыРеквизита.Количество() <> 1 Тогда + + СтрокаСообщения = НСтр("ru = 'Составной тип данных для значений по умолчанию не поддерживается. + |Реквизит ""%1"".'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Реквизит.ПолноеИмя()); + ВызватьИсключение СтрокаСообщения; + КонецЕсли; + + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипыРеквизита.Получить(0)); + + Если Не ОбщегоНазначения.ЭтоСправочник(ОбъектМетаданных) Тогда + + СтрокаСообщения = НСтр("ru = 'Выбор значений по умолчанию поддерживается только для справочников. + |Реквизит ""%1"".'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Реквизит.ПолноеИмя()); + ВызватьИсключение СтрокаСообщения; + КонецЕсли; + + ПолноеИмяОбъектаМетаданных = ОбъектМетаданных.ПолноеИмя(); + + ДанныеТаблицы = Новый Структура("СвойстваОбъектаМетаданных, ТаблицаБазыКорреспондента"); + ДанныеТаблицы.СвойстваОбъектаМетаданных = СвойстваОбъектаМетаданных(ПолноеИмяОбъектаМетаданных); + ДанныеТаблицы.ТаблицаБазыКорреспондента = ПолучитьОбъектыТаблицы(ПолноеИмяОбъектаМетаданных); + + Результат.Вставить(ПолноеИмяОбъектаМетаданных, ДанныеТаблицы); + + КонецЕсли; + + КонецЦикла; + + ДополнительныеДанные = Новый Структура; + + // {Обработчик: ПолучитьДополнительныеДанныеДляКорреспондента} Начало + ПланыОбмена[ИмяПланаОбмена].ПолучитьДополнительныеДанныеДляКорреспондента(ДополнительныеДанные); + // {Обработчик: ПолучитьДополнительныеДанныеДляКорреспондента} Окончание + + Результат.Вставить("{ДополнительныеДанные}", ДополнительныеДанные); + + Возврат Результат; + +КонецФункции + +// Выполняет установку в константе количества элементов в транзакции загрузки данных. +// +// Параметры: +// Количество - Число - количество элементов в транзакции. +// +Процедура УстановитьКоличествоЭлементовВТранзакцииЗагрузкиДанных(Количество) Экспорт + + УстановитьПривилегированныйРежим(Истина); + Константы.КоличествоЭлементовВТранзакцииЗагрузкиДанных.Установить(Количество); + +КонецПроцедуры + +// Возвращает представление даты синхронизации. +// +// Параметры: +// ДатаСинхронизации - Дата. Абсолютная дата синхронизации данных. +// +// Возвращаемое значение: +// Строка - строковое представление даты. +// +Функция ПредставлениеДатыСинхронизации(Знач ДатаСинхронизации) Экспорт + + Если Не ЗначениеЗаполнено(ДатаСинхронизации) Тогда + Возврат НСтр("ru = 'Синхронизация не выполнялась.'"); + КонецЕсли; + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Последняя синхронизация: %1'"), ОтносительнаяДатаСинхронизации(ДатаСинхронизации)); +КонецФункции + +// Возвращает представление относительной даты синхронизации. +// +// Параметры: +// ДатаСинхронизации - Дата. Абсолютная дата синхронизации данных. +// +// Возвращаемое значение: +// Строка: +// Никогда (Т = пустая дата). +// Сейчас (Т < 5 мин) +// 5 минут назад (5 мин < Т < 15 мин) +// 15 минут назад (15 мин < Т < 30 мин) +// 30 минут назад (30 мин < Т < 1 час) +// 1 час назад (1 час < Т < 2 час) +// 2 часа назад (2 час < Т < 3 час). +// Сегодня, 12:44:12 (3 час < Т < вчера). +// Вчера, 22:30:45 (вчера < Т < позавчера). +// Позавчера, 21:22:54 (позавчера < Т < поза-позавчера). +// <12 Марта 2012г.> (поза-позавчера < Т). +// +Функция ОтносительнаяДатаСинхронизации(Знач ДатаСинхронизации) Экспорт + + Если Не ЗначениеЗаполнено(ДатаСинхронизации) Тогда + + Возврат НСтр("ru = 'Никогда'"); + + КонецЕсли; + + ДатаТекущая = ТекущаяДатаСеанса(); + + Интервал = ДатаТекущая - ДатаСинхронизации; + + Если Интервал < 0 Тогда // 0 мин + + Результат = Формат(ДатаСинхронизации, "ДЛФ=DD"); + + ИначеЕсли Интервал < 60 * 5 Тогда // 5 мин + + Результат = НСтр("ru = 'Сейчас'"); + + ИначеЕсли Интервал < 60 * 15 Тогда // 15 мин + + Результат = НСтр("ru = '5 минут назад'"); + + ИначеЕсли Интервал < 60 * 30 Тогда // 30 мин + + Результат = НСтр("ru = '15 минут назад'"); + + ИначеЕсли Интервал < 60 * 60 * 1 Тогда // 1 час + + Результат = НСтр("ru = '30 минут назад'"); + + ИначеЕсли Интервал < 60 * 60 * 2 Тогда // 2 часа + + Результат = НСтр("ru = '1 час назад'"); + + ИначеЕсли Интервал < 60 * 60 * 3 Тогда // 3 часа + + Результат = НСтр("ru = '2 часа назад'"); + + Иначе + + КоличествоДнейРазницы = КоличествоДнейРазницы(ДатаСинхронизации, ДатаТекущая); + + Если КоличествоДнейРазницы = 0 Тогда // сегодня + + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Сегодня, %1'"), Формат(ДатаСинхронизации, "ДЛФ=T")); + + ИначеЕсли КоличествоДнейРазницы = 1 Тогда // вчера + + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Вчера, %1'"), Формат(ДатаСинхронизации, "ДЛФ=T")); + + ИначеЕсли КоличествоДнейРазницы = 2 Тогда // позавчера + + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Позавчера, %1'"), Формат(ДатаСинхронизации, "ДЛФ=T")); + + Иначе // давно + + Результат = Формат(ДатаСинхронизации, "ДЛФ=DD"); + + КонецЕсли; + + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Возвращает идентификатор поставляемого профиля групп доступа "Синхронизация данных с другими программами". +// +// Возвращаемое значение: +// Строка - идентификатор поставляемого профиля групп доступа. +// +Функция ПрофильДоступаСинхронизацияДанныхСДругимиПрограммами() Экспорт + + Возврат "04937803-5dba-11df-a1d4-005056c00008"; + +КонецФункции + +// Проверяет наличие возможности администрирования обменов у текущего пользователя. +// +// Возвращаемое значение: +// Булево - если Истина - права есть, Ложь - прав нет. +// +Функция ЕстьПраваНаАдминистрированиеОбменов() Экспорт + + Возврат Пользователи.ЭтоПолноправныйПользователь(, Не ОбщегоНазначенияПовтИсп.РазделениеВключено()); + +КонецФункции + +// Функция возвращает объект WSПрокси веб-сервиса Exchange, созданный с переданными параметрами. +// +// Параметры: +// СтруктураНастроек - Структура - параметры для WSПрокси; +// * WSURLВебСервиса - Строка - месторасположение wsdl. +// * WSИмяСервиса - Строка - имя сервиса. +// * WSURLПространстваИменСервиса - Строка - URI пространства имен web-сервиса. +// * WSИмяПользователя - Строка - имя пользователя для входа на сервер. +// * WSПароль - Строка - пароль пользователя. +// * WSТаймаут - Число - таймаут на операции выполняемые через полученное прокси. +// СтрокаСообщенияОбОшибке - строка - содержит подробное описание ошибки в случае неуспешного подключения; +// СтрокаСообщенияПользователю - строка - содержит краткое описание ошибки в случае неуспешного подключения. +// +// Возвращаемое значение: +// WSПрокси +// +Функция ПолучитьWSПрокси(СтруктураНастроек, СтрокаСообщенияОбОшибке = "", СообщениеПользователю = "") Экспорт + + УдалитьНезначащиеСимволыВНастройкахПодключения(СтруктураНастроек); + + СтруктураНастроек.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SSL/Exchange"); + СтруктураНастроек.Вставить("WSИмяСервиса", "Exchange"); + СтруктураНастроек.Вставить("WSТаймаут", 600); + + Возврат ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке, СообщениеПользователю); +КонецФункции + +// Функция возвращает объект WSПрокси веб-сервиса Exchange_2_0_1_6, созданный с переданными параметрами. +// +// Параметры: +// СтруктураНастроек - Структура - параметры для WSПрокси; +// * WSURLВебСервиса - Строка - месторасположение wsdl. +// * WSИмяСервиса - Строка - имя сервиса. +// * WSURLПространстваИменСервиса - Строка - URI пространства имен web-сервиса. +// * WSИмяПользователя - Строка - имя пользователя для входа на сервер. +// * WSПароль - Строка - пароль пользователя. +// * WSТаймаут - Число - таймаут на операции выполняемые через полученное прокси. +// СтрокаСообщенияОбОшибке - строка - содержит подробное описание ошибки в случае неуспешного подключения; +// СтрокаСообщенияПользователю - строка - содержит краткое описание ошибки в случае неуспешного подключения. +// +// Возвращаемое значение: +// WSПрокси +// +Функция ПолучитьWSПрокси_2_0_1_6(СтруктураНастроек, СтрокаСообщенияОбОшибке = "", СообщениеПользователю = "") Экспорт + + УдалитьНезначащиеСимволыВНастройкахПодключения(СтруктураНастроек); + + СтруктураНастроек.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SSL/Exchange_2_0_1_6"); + СтруктураНастроек.Вставить("WSИмяСервиса", "Exchange_2_0_1_6"); + СтруктураНастроек.Вставить("WSТаймаут", 600); + + Возврат ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке, СообщениеПользователю); +КонецФункции + +// Функция возвращает объект WSПрокси веб-сервиса Exchange_2_0_1_7, созданный с переданными параметрами. +// +// Параметры: +// СтруктураНастроек - Структура - параметры для WSПрокси; +// * WSURLВебСервиса - Строка - месторасположение wsdl. +// * WSИмяСервиса - Строка - имя сервиса. +// * WSURLПространстваИменСервиса - Строка - URI пространства имен web-сервиса. +// * WSИмяПользователя - Строка - имя пользователя для входа на сервер. +// * WSПароль - Строка - пароль пользователя. +// * WSТаймаут - Число - таймаут на операции выполняемые через полученное прокси. +// СтрокаСообщенияОбОшибке - строка - содержит подробное описание ошибки в случае неуспешного подключения; +// СтрокаСообщенияПользователю - строка - содержит краткое описание ошибки в случае неуспешного подключения. +// +// Возвращаемое значение: +// WSПрокси +// +Функция ПолучитьWSПрокси_2_1_1_7(СтруктураНастроек, СтрокаСообщенияОбОшибке = "", СообщениеПользователю = "", Таймаут = 600) Экспорт + + УдалитьНезначащиеСимволыВНастройкахПодключения(СтруктураНастроек); + + СтруктураНастроек.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SSL/Exchange_2_0_1_6"); + СтруктураНастроек.Вставить("WSИмяСервиса", "Exchange_2_0_1_6"); + СтруктураНастроек.Вставить("WSТаймаут", Таймаут); + + Возврат ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке, СообщениеПользователю, Истина); +КонецФункции + +// Возвращает допустимое количество элементов, обрабатываемых в одной транзакции загрузки данных. +// +// Параметры: +// Нет. +// +// Возвращаемое значение: +// Число +// +Функция КоличествоЭлементовВТранзакцииЗагрузкиДанных() Экспорт + + УстановитьПривилегированныйРежим(Истина); + Возврат Константы.КоличествоЭлементовВТранзакцииЗагрузкиДанных.Получить(); + +КонецФункции + +// Возвращает допустимое количество элементов, обрабатываемых в одной транзакции выгрузки данных. +// +// Параметры: +// Нет. +// +// Возвращаемое значение: +// Число +// +Функция КоличествоЭлементовВТранзакцииВыгрузкиДанных() Экспорт + + Возврат 1; + +КонецФункции + +#Область УстаревшиеПроцедурыИФункции + +// Выполняет добавление информации об установленном в константе количестве элементов в транзакции +// в структуру, содержащую параметры транспорта сообщений обмена. +// +// Параметры: +// Результат - Структура - содержит параметры транспорта сообщений обмена. +// +Процедура ДополнитьНастройкиТранспортаКоличествомЭлементовВТранзакции(Результат) Экспорт + + Результат.Вставить("КоличествоЭлементовВТранзакцииВыгрузкиДанных", КоличествоЭлементовВТранзакцииВыгрузкиДанных()); + Результат.Вставить("КоличествоЭлементовВТранзакцииЗагрузкиДанных", КоличествоЭлементовВТранзакцииЗагрузкиДанных()); + +КонецПроцедуры + +// Возвращает номер области по коду узла плана обмена (обмен сообщениями). +// +// Параметры: +// КодУзла - Строка - Код узла плана обмена. +// +// Возвращаемое значение: +// Число - Номер области. +// +Функция НомерОбластиИзКодаУзлаПланаОбмена(Знач КодУзла) Экспорт + + Если ТипЗнч(КодУзла) <> Тип("Строка") Тогда + ВызватьИсключение НСтр("ru = 'Неправильный тип параметра номер [1].'"); + КонецЕсли; + + Результат = СтрЗаменить(КодУзла, "S0", ""); + + Возврат Число(Результат); +КонецФункции + +// Возвращает данные первой записи результата запроса в виде структуры. +// +// Параметры: +// РезультатЗапроса - РезультатЗапроса - Результат запроса, содержащий данные для обработки. +// +// Возвращаемое значение: +// Структура - структура с результатом. +// +Функция РезультатЗапросаВСтруктуру(Знач РезультатЗапроса) Экспорт + + Результат = Новый Структура; + Для Каждого Колонка Из РезультатЗапроса.Колонки Цикл + Результат.Вставить(Колонка.Имя); + КонецЦикла; + + Если РезультатЗапроса.Пустой() Тогда + Возврат Результат; + КонецЕсли; + + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + + ЗаполнитьЗначенияСвойств(Результат, Выборка); + + Возврат Результат; +КонецФункции + +#КонецОбласти + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс +#Область ОбъявлениеСлужебныхСобытий + // Объявляет служебные события подсистемы ОбменДанными: // // Серверные события: @@ -654,15 +1142,6 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиента"].Добавить( "ОбменДаннымиСервер"); - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбязательныхОбъектовПланаОбмена"].Добавить( - "ОбменДаннымиСервер"); - - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовИсключенийПланаОбмена"].Добавить( - "ОбменДаннымиСервер"); - - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена"].Добавить( - "ОбменДаннымиСервер"); - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриВключенииРазделенияПоОбластямДанных"].Добавить( "ОбменДаннымиСервер"); @@ -689,8 +1168,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов. +#КонецОбласти + +#Область ОбработчикиУсловныхВызовов // Выполняет загрузку приоритетных данных, полученных из главного узла РИБ. Процедура ЗагрузитьПриоритетныеДанныеВПодчиненныйУзелРИБ(Отказ = Ложь) Экспорт @@ -826,15 +1306,275 @@ КонецПроцедуры -// Выполняет выгрузку сообщения обмена, которое содержало -// изменения конфигурации, до обновления информационной базы. +// Выполняет инициализацию XML файла, для записи информации об объектах +// отмеченных к обработке обновления, для передачи их в подчиненный узел РИБ. +// +Процедура ИнициализироватьФайлСДаннымиОбновления(Параметры) Экспорт + + ФайлДляЗаписиXML = Неопределено; + + Если СтандартныеПодсистемыПовтИсп.ИспользуетсяРИБ("СФильтром") Тогда + + ИмяФайла = ПолноеИмяФайлаДанныхОтложенногоОбновления(); + + ФайлДляЗаписиXML = Новый ЗаписьFastInfoset; + ФайлДляЗаписиXML.ОткрытьФайл(ИмяФайла); + ФайлДляЗаписиXML.ЗаписатьОбъявлениеXML(); + ФайлДляЗаписиXML.ЗаписатьНачалоЭлемента("Objects"); + + КонецЕсли; + + Параметры.ЗаписьИзмененийДляПодчиненногоУзлаРИБСФильтрами = ФайлДляЗаписиXML; + +КонецПроцедуры + +// Выполняет инициализацию XML файла, для записи информации об объектах +// +Процедура ЗаписатьДанныеДляОбновленияВФайл(Параметры, Данные, ВидДанных, ПолноеИмяОбъекта = "") Экспорт + + Если Не СтандартныеПодсистемыПовтИсп.ИспользуетсяРИБ("СФильтром") Тогда + Возврат; + КонецЕсли; + + Если Параметры.ЗаписьИзмененийДляПодчиненногоУзлаРИБСФильтрами = Неопределено Тогда + ТекстИсключения = НСтр("ru = 'В обработчике неправильно организована работа с параметрами регистрации данных к обработке.'"); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + + ЗаписьXML = Параметры.ЗаписьИзмененийДляПодчиненногоУзлаРИБСФильтрами; + ЗаписьXML.ЗаписатьНачалоЭлемента("Object"); + ЗаписьXML.ЗаписатьАтрибут("Queue", Строка(Параметры.Очередь)); + + Если Не ЗначениеЗаполнено(ПолноеИмяОбъекта) Тогда + ПолноеИмяОбъекта = Данные.Метаданные().ПолноеИмя(); + КонецЕсли; + + ЗаписьXML.ЗаписатьАтрибут("Type", ПолноеИмяОбъекта); + + Если ВРег(ВидДанных) = "ССЫЛКА" Тогда + ЗаписьXML.ЗаписатьАтрибут("Ref", XMLСтрока(Данные.Ссылка)); + Иначе + + Если ВРег(ВидДанных) = "НЕЗАВИСИМЫЙРЕГИСТР" Тогда + + ЗаписьXML.ЗаписатьНачалоЭлемента("Filter"); + Для Каждого ЭлементОтбора Из Данные.Отбор Цикл + + Если ЗначениеЗаполнено(ЭлементОтбора.Значение) Тогда + ЗаписьXML.ЗаписатьНачалоЭлемента(ЭлементОтбора.Имя); + + ТипДанных = ТипЗнч(ЭлементОтбора.Значение); + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипДанных); + + Если ОбъектМетаданных <> Неопределено Тогда + ЗаписьXML.ЗаписатьАтрибут("Type", ОбъектМетаданных.ПолноеИмя()); + Иначе + ЗаписьXML.ЗаписатьАтрибут("Type", Строка(ТипДанных)); + КонецЕсли; + + ЗаписьXML.ЗаписатьАтрибут("Val", XMLСтрока(ЭлементОтбора.Значение)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + + КонецЦикла; + ЗаписьXML.ЗаписатьКонецЭлемента(); + + Иначе + Регистратор = Данные.Отбор.Регистратор.Значение; + ЗаписьXML.ЗаписатьАтрибут("FilterType", Строка(Регистратор.Метаданные().ПолноеИмя())); + ЗаписьXML.ЗаписатьАтрибут("Ref", XMLСтрока(Регистратор.Ссылка)); + КонецЕсли; + + КонецЕсли; + + ЗаписьXML.ЗаписатьКонецЭлемента(); + +КонецПроцедуры + +// Выполняет регистрацию в подчиненном узле РИБ с фильтрами +// объектов зарегистрированных для отложенного обновления в главном узле РИБ. +// +Процедура ОбработатьДанныеДляОбновленияВПодчиненномУзле(Знач ЗначениеКонстанты) Экспорт + + Если Не СтандартныеПодсистемыПовтИсп.ИспользуетсяРИБ("СФильтром") + Или Не ЭтоПодчиненныйУзелРИБ() + Или НазначениеПланаОбмена(ГлавныйУзел().Метаданные().Имя) <> "РИБСФильтром" Тогда + Возврат; + КонецЕсли; + + ХранилищеЗначений = ЗначениеКонстанты.Значение; + ИмяФайла = ПолноеИмяФайлаДанныхОтложенногоОбновления(); + + ДвоичныеДанные = ХранилищеЗначений.Получить(); + Если ДвоичныеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + ДвоичныеДанные.Записать(ИмяФайла); + + ЧтениеXML = Новый ЧтениеFastInfoset; + ЧтениеXML.ОткрытьФайл(ИмяФайла); + + ПараметрыОбработчикаСтруктура = ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке(); + + Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОбновлениеИнформационнойБазы.Ссылка КАК Узел + |ИЗ + | ПланОбмена.ОбновлениеИнформационнойБазы КАК ОбновлениеИнформационнойБазы + |ГДЕ + | НЕ ОбновлениеИнформационнойБазы.ЭтотУзел"; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + ПланыОбмена.УдалитьРегистрациюИзменений(Выборка.Узел); + КонецЦикла; + КонецЕсли; + + Пока ЧтениеXML.Прочитать() Цикл + + Если ЧтениеXML.Имя = "Object" + И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + + ПараметрыОбработчикаСтруктура.Очередь = Число(ЧтениеXML.ЗначениеАтрибута("Queue")); + ПолноеИмяОбъектаМетаданных = СокрЛП(ЧтениеXML.ЗначениеАтрибута("Type")); + ТипОбъектаМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъектаМетаданных); + МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяОбъектаМетаданных); + ЭтоСсылочныйТипОбъекта = ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(ТипОбъектаМетаданных); + + Если ЭтоСсылочныйТипОбъекта Тогда + ОбъектКОбработке = МенеджерОбъекта.ПолучитьСсылку(Новый УникальныйИдентификатор(ЧтениеXML.ЗначениеАтрибута("Ref"))); + Иначе + + ОбъектКОбработке = МенеджерОбъекта.СоздатьНаборЗаписей(); + + Если ОбщегоНазначения.ЭтоРегистрСведений(ТипОбъектаМетаданных) + И ТипОбъектаМетаданных.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый Тогда + + ЧтениеXML.Прочитать(); + + Если ЧтениеXML.Имя = "Filter" + И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда + + ЧтениеОтбора = Истина; + + Пока ЧтениеОтбора Цикл + + ЧтениеXML.Прочитать(); + + Если ЧтениеXML.Имя = "Filter" И ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда + ЧтениеОтбора = Ложь; + Продолжить; + ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда + Продолжить; + Иначе + + ЗначениеОтбора = ЧтениеXML.ЗначениеАтрибута("Val"); + Если ЗначениеЗаполнено(ЗначениеОтбора) Тогда + + ИмяОтбора = ЧтениеXML.Имя; + ТипЗначенияОтбора = ЧтениеXML.ЗначениеАтрибута("Type"); + ПолноеИмяЭлементаОтбора = Метаданные.НайтиПоПолномуИмени(ТипЗначенияОтбора); + + Если ПолноеИмяЭлементаОтбора <> Неопределено Тогда + + МенеджерОбъектаОтбора = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ТипЗначенияОтбора); + + Если Найти(ВРег(ТипЗначенияОтбора), "ПЕРЕЧИСЛЕНИЕ") > 0 Тогда + СсылкаНаЗначение = МенеджерОбъектаОтбора[ЗначениеОтбора]; + Иначе + СсылкаНаЗначение = МенеджерОбъектаОтбора.ПолучитьСсылку(Новый УникальныйИдентификатор(ЗначениеОтбора)); + КонецЕсли; + + ОбъектКОбработке.Отбор[ИмяОтбора].Установить(СсылкаНаЗначение); + + Иначе + ОбъектКОбработке.Отбор[ИмяОтбора].Установить(XMLЗначение(Тип(ТипЗначенияОтбора),ЗначениеОтбора)); + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + Иначе + + ЗначениеРегистратора = Новый УникальныйИдентификатор(ЧтениеXML.ЗначениеАтрибута("Ref")); + ПолноеИмяРегистратора = ЧтениеXML.ЗначениеАтрибута("FilterType"); + МенеджерРегистратора = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяРегистратора); + СсылкаНаРегистратор = МенеджерРегистратора.ПолучитьСсылку(ЗначениеРегистратора); + ОбъектКОбработке.Отбор.Регистратор.Установить(СсылкаНаРегистратор); + + КонецЕсли; + + ОбъектКОбработке.Прочитать(); + + КонецЕсли; + + ОбновлениеИнформационнойБазы.ОтметитьКОбработке(ПараметрыОбработчикаСтруктура, ОбъектКОбработке); + + Иначе + Продолжить; + КонецЕсли; + + КонецЦикла; + + ЧтениеXML.Закрыть(); + + Файл = Новый Файл(ИмяФайла); + Если Файл.Существует() Тогда + УдалитьФайлы(ИмяФайла); + КонецЕсли; + +КонецПроцедуры + +// Выполняет закрытие XML файла с записанной информацией об объектах +// зарегистрированных для отложенного обновления. +// +Процедура ЗавершитьЗаписьФайлаСДаннымиОбновления(Параметры) Экспорт + + Если Не СтандартныеПодсистемыПовтИсп.ИспользуетсяРИБ("СФильтром") Тогда + Возврат; + КонецЕсли; + + Если Параметры.ЗаписьИзмененийДляПодчиненногоУзлаРИБСФильтрами = Неопределено Тогда + ТекстИсключения = НСтр("ru = 'В обработчике неправильно организована работа с параметрами регистрации данных к обработке.'"); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + + ЗаписьXML = Параметры.ЗаписьИзмененийДляПодчиненногоУзлаРИБСФильтрами; + ЗаписьXML.ЗаписатьКонецЭлемента(); + ЗаписьXML.Закрыть(); + + ИмяФайла = ПолноеИмяФайлаДанныхОтложенногоОбновления(); + + ДвоичныеДанныеФайла = Новый ДвоичныеДанные(ИмяФайла); + Хранилище = Новый ХранилищеЗначения(ДвоичныеДанныеФайла, Новый СжатиеДанных(9)); + Константы.ДанныеДляОтложенногоОбновления.Установить(Хранилище); + + ФайлСДанными = Новый Файл(ИмяФайла); + Если ФайлСДанными.Существует() Тогда + УдалитьФайлы(ИмяФайла); + КонецЕсли; + +КонецПроцедуры + +// Выполняет действия после обновления информационной базы, в т.ч. выгрузку сообщения обмена, +// которое содержало изменения конфигурации, до обновления информационной базы. // Процедура ПослеОбновленияИнформационнойБазы() Экспорт Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Возврат; + Возврат; КонецЕсли; + РегистрыСведений.ОбработчикиСобытийСинхронизацииДанных.ЗарегистрироватьОбновлениеДанныхИнформационнойБазы(); + ВыгрузитьСообщениеПослеОбновленияИнформационнойБазы(); КонецПроцедуры @@ -853,14 +1593,21 @@ // См. описание одноименной процедуры в общем модуле РегламентныеЗаданияПереопределяемый. // -Процедура ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости) Экспорт +Процедура ПриОпределенииНастроекРегламентныхЗаданий(Зависимости) Экспорт Зависимость = Зависимости.Добавить(); Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.УдалениеНеактуальнойИнформацииСинхронизации; Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьСинхронизациюДанных; + Зависимость.РаботаетСВнешнимиРесурсами = Истина; + + Зависимость = Зависимости.Добавить(); + Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.СинхронизацияДанных; + Зависимость.РаботаетСВнешнимиРесурсами = Истина; + Зависимость.Параметризуется = Истина; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы. +#КонецОбласти + +#Область ОбновлениеИнформационнойБазы // Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. // @@ -1200,8 +1947,64 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов из других подсистем. +// Выполняет выгрузку сообщения обмена, которое содержало +// изменения конфигурации, до обновления информационной базы. +// +Процедура ВыгрузитьСообщениеПослеОбновленияИнформационнойБазы() + + // После успешной загрузки и обновления ИБ режим повтора можно отключить. + ОтключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); + + Попытка + Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") Тогда + + УзелИнформационнойБазы = ГлавныйУзел(); + + Если УзелИнформационнойБазы <> Неопределено Тогда + + ВыполнитьВыгрузку = Истина; + + НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспорта(УзелИнформационнойБазы); + + ВидТранспорта = НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию; + + Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS + И Не НастройкиТранспорта.WSЗапомнитьПароль Тогда + + ВыполнитьВыгрузку = Ложь; + + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.УстановитьПризнакОтправкиДанных(УзелИнформационнойБазы); + + КонецЕсли; + + Если ВыполнитьВыгрузку Тогда + + // Только выгрузка. + Отказ = Ложь; + + ПараметрыОбмена = ПараметрыОбмена(); + ПараметрыОбмена.ВидТранспортаСообщенийОбмена = ВидТранспорта; + ПараметрыОбмена.ВыполнятьЗагрузку = Ложь; + ПараметрыОбмена.ВыполнятьВыгрузку = Истина; + + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ПараметрыОбмена, Отказ); + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Исключение + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиУсловныхВызововИзДругихПодсистем // Определить объекты метаданных, в модулях менеджеров которых ограничивается возможность // редактирования реквизитов при групповом изменении. @@ -1219,8 +2022,9 @@ Объекты.Вставить(Метаданные.Справочники.СценарииОбменовДанными.ПолноеИмя(), "РеквизитыНеРедактируемыеВГрупповойОбработке"); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Прогресс-бар. +#КонецОбласти + +#Область ПрогрессБар // Вычисляет количество объектов к загрузке и размер файла сообщения обмена. // Параметры: @@ -1320,6 +2124,7 @@ Возврат Результат; КонецФункции + // Рассчитывает процент выгрузки и записывает в виде сообщения пользователю. // // Параметры: @@ -1327,15 +2132,16 @@ // КоличествоОбъектовКВыгрузке - Число - Количество объектов к выгрузке. // Процедура РассчитатьПроцентВыгрузки(КоличествоВыгруженных, КоличествоОбъектовКВыгрузке) Экспорт + // Сообщение о проценте выгрузки выдаем через каждые 10 объектов. Если КоличествоВыгруженных = 0 ИЛИ КоличествоВыгруженных / 10 <> Цел(КоличествоВыгруженных / 10) Тогда Возврат; КонецЕсли; - Если КоличествоОбъектовКВыгрузке = 0 Тогда + + Если КоличествоОбъектовКВыгрузке = 0 Или КоличествоВыгруженных > КоличествоОбъектовКВыгрузке Тогда ПроцентВыполнения = 95; Шаблон = НСтр("ru = 'Обработано: %1 объектов.'"); Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Формат(КоличествоВыгруженных, "ЧН=0; ЧГ=")); - Иначе // 5% полосы резервируем под выгрузку по ссылкам, проценты по количеству считаем от 95. ПроцентВыполнения = Окр(Мин(КоличествоВыгруженных * 95 / КоличествоОбъектовКВыгрузке, 95)); @@ -1348,6 +2154,7 @@ // Регистрация сообщения для чтения из клиентского сеанса. ДлительныеОперации.СообщитьПрогресс(ПроцентВыполнения, Текст); + КонецПроцедуры // Рассчитывает процент загрузки и записывает в виде сообщения пользователю. @@ -1406,10 +2213,26 @@ // Подсчет количества объектов к выгрузке. Если НЕ Получатель.ДополнительныеСвойства.Свойство("КоличествоОбъектовКВыгрузке") Тогда + КоличествоОбъектовКВыгрузке = 0; Если СозданиеНачальногоОбраза Тогда КоличествоОбъектовКВыгрузке = РассчитатьКоличествоОбъектовВБазе(Получатель); Иначе - КоличествоОбъектовКВыгрузке = РассчитатьКоличествоЗарегистрированныхОбъектов(Получатель); + // Извлечение общего количества объектов к выгрузке. + ТекущийПараметрСеанса = Неопределено; + УстановитьПривилегированныйРежим(Истина); + Попытка + ТекущийПараметрСеанса = ПараметрыСеанса.ПараметрыСеансаСинхронизацииДанных.Получить(); + Исключение + Возврат; + КонецПопытки; + УстановитьПривилегированныйРежим(Ложь); + Если ТипЗнч(ТекущийПараметрСеанса) = Тип("Соответствие") Тогда + ДанныеСинхронизации = ТекущийПараметрСеанса.Получить(Получатель.Ссылка); + Если НЕ (ДанныеСинхронизации = Неопределено + ИЛИ ТипЗнч(ДанныеСинхронизации) <> Тип("Структура")) Тогда + КоличествоОбъектовКВыгрузке = ДанныеСинхронизации.КоличествоОбъектовКВыгрузке; + КонецЕсли; + КонецЕсли; КонецЕсли; Получатель.ДополнительныеСвойства.Вставить("КоличествоОбъектовКВыгрузке", КоличествоОбъектовКВыгрузке); Получатель.ДополнительныеСвойства.Вставить("СчетчикВыгруженныхОбъектов", 1); @@ -1474,7 +2297,173 @@ КонецПроцедуры +#КонецОбласти + +#Область РаботаСОбъектомFTPСоединение + +Функция FTPСоединение(Знач Настройки) Экспорт + + Возврат Новый FTPСоединение( + Настройки.Сервер, + Настройки.Порт, + Настройки.ИмяПользователя, + Настройки.ПарольПользователя, + НастройкиПроксиСервера(Настройки.ЗащищенноеСоединение), + Настройки.ПассивноеСоединение, + Настройки.Таймаут, + Настройки.ЗащищенноеСоединение); + +КонецФункции + +Функция FTPНастройкиСоединения() Экспорт + + Результат = Новый Структура; + Результат.Вставить("Сервер", ""); + Результат.Вставить("Порт", 21); + Результат.Вставить("ИмяПользователя", ""); + Результат.Вставить("ПарольПользователя", ""); + Результат.Вставить("ПассивноеСоединение", Ложь); + Результат.Вставить("Таймаут", 0); + Результат.Вставить("ЗащищенноеСоединение", Неопределено); + + Возврат Результат; +КонецФункции + +// Возвращает имя сервера и путь на сервере FTP, полученные из строки подключения к FTP-ресурсу. // +// Параметры: +// СтрокаПодключения - Строка - строка подключения к FTP-ресурсу. +// +// Возвращаемое значение: +// Структура - настройки подключения к FTP-ресурсу. Поля структуры: +// Сервер - Строка - имя сервера. +// Путь - Строка - путь на сервере. +// +// Пример (1): +// Результат = FTPИмяСервераИПуть("ftp://server"); +// Результат.Сервер = "server"; +// Результат.Путь = "/"; +// +// Пример (2): +// Результат = FTPИмяСервераИПуть("ftp://server/saas/obmen"); +// Результат.Сервер = "server"; +// Результат.Путь = "/saas/obmen/"; +// +Функция FTPИмяСервераИПуть(Знач СтрокаПодключения) Экспорт + + Результат = Новый Структура("Сервер, Путь"); + СтрокаПодключения = СокрЛП(СтрокаПодключения); + + Если (ВРег(Лев(СтрокаПодключения, 6)) <> "FTP://" + И ВРег(Лев(СтрокаПодключения, 7)) <> "FTPS://") + ИЛИ СтрНайти(СтрокаПодключения, "@") <> 0 Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Строка подключения к FTP-ресурсу не соответствует формату: ""%1""'"), СтрокаПодключения); + КонецЕсли; + + ПараметрыПодключения = СтрРазделить(СтрокаПодключения, "/"); + + Если ПараметрыПодключения.Количество() < 3 Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В строке подключения к FTP-ресурсу не указано имя сервера: ""%1""'"), СтрокаПодключения); + КонецЕсли; + + Результат.Сервер = ПараметрыПодключения[2]; + + ПараметрыПодключения.Удалить(0); + ПараметрыПодключения.Удалить(0); + ПараметрыПодключения.Удалить(0); + + ПараметрыПодключения.Вставить(0, "@"); + + Если Не ПустаяСтрока(ПараметрыПодключения.Получить(ПараметрыПодключения.ВГраница())) Тогда + + ПараметрыПодключения.Добавить("@"); + + КонецЕсли; + + Результат.Путь = СтрСоединить(ПараметрыПодключения, "/"); + Результат.Путь = СтрЗаменить(Результат.Путь, "@", ""); + + Возврат Результат; +КонецФункции + +// Получает настройки прокси сервера. +// +Функция НастройкиПроксиСервера(ЗащищенноеСоединение) + + Прокси = Неопределено; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда + МодульПолучениеФайловИзИнтернетаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернетаКлиентСервер"); + Протокол = ?(ЗащищенноеСоединение = Неопределено, "ftp", "ftps"); + Прокси = МодульПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси(Протокол); + КонецЕсли; + + Возврат Прокси; + +КонецФункции + +Функция ОткрытьПомощникСозданияОбменаДаннымиДляНастройкиПодчиненногоУзла() Экспорт + + Возврат Не ОбщегоНазначенияПовтИсп.РазделениеВключено() + И Не ОбменДаннымиПовтИсп.ЭтоАвтономноеРабочееМесто() + И ЭтоПодчиненныйУзелРИБ() + И Не Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить(); + +КонецФункции + +#КонецОбласти + +#Область ПрофилиБезопасности + +Функция ЗапросНаИспользованиеВнешнихРесурсовПриВключенииОбмена() Экспорт + + Запросы = Новый Массив(); + СформироватьЗапросыНаИспользованиеВнешнихРесурсов(Запросы); + Возврат Запросы; + +КонецФункции + +Функция ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов() Экспорт + + Запросы = Новый Массив; + + Для Каждого ИмяПланаОбмена Из ОбменДаннымиПовтИсп.ПланыОбменаБСП() Цикл + + ТекстЗапроса = + "ВЫБРАТЬ + | ПланОбмена.Ссылка КАК Узел + |ИЗ + | ПланОбмена.[ИмяПланаОбмена] КАК ПланОбмена"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", ИмяПланаОбмена); + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + + Пока Выборка.Следующий() Цикл + + Запросы.Добавить(РаботаВБезопасномРежиме.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов(Выборка.Узел)); + + КонецЦикла; + + КонецЦикла; + + Запросы.Добавить(РаботаВБезопасномРежиме.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов( + ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Метаданные.Константы.КаталогСообщенийОбменаДаннымиДляLinux))); + Запросы.Добавить(РаботаВБезопасномРежиме.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов( + ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Метаданные.Константы.КаталогСообщенийОбменаДаннымиДляWindows))); + + Возврат Запросы; + +КонецФункции + +#КонецОбласти + +#Область Прочее // Определяет является ли план обмена БСП разделенным. // @@ -1544,8 +2533,9 @@ // * ОтображатьЗначенияПоУмолчаниюНаУзлеБазыКорреспондента - Булево - Признак отображения значений по умолчанию // базы-корреспондента в помощнике создания // обмена. +// * НазначениеПланаОбмена - Строка - Вариант назначения плана обмена. // -Функция НастройкиПланаОбменаПоУмолчанию(ИмяПланаОбмена) Экспорт +Функция НастройкиПланаОбменаПоУмолчанию(ИмяПланаОбмена) // Получаем значения по умолчанию для плана обмена. МетаданныеПланаОбмена = Метаданные.ПланыОбмена[ИмяПланаОбмена]; @@ -1568,6 +2558,8 @@ Параметры.Вставить("ОтображатьНастройкуОтборовНаУзлеБазыКорреспондента", Истина); Параметры.Вставить("ОтображатьЗначенияПоУмолчаниюНаУзлеБазыКорреспондента", Истина); Параметры.Вставить("ЭтоПланОбменаXDTO", Ложь); + Параметры.Вставить("НазначениеПланаОбмена", + ?(МетаданныеПланаОбмена.РаспределеннаяИнформационнаяБаза, "РИБ", "СинхронизацияСДругойПрограммой")); Возврат Параметры; КонецФункции @@ -1587,7 +2579,9 @@ Функция ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, ИмяПараметра, ИдентификаторНастройки = "") Экспорт ПараметрыПоУмолчанию = НастройкиПланаОбменаПоУмолчанию(ИмяПланаОбмена); - ПланыОбмена[ИмяПланаОбмена].ОпределитьНастройки(ПараметрыПоУмолчанию, ИдентификаторНастройки); + Если ОбменДаннымиПовтИсп.ПланыОбменаБСП().Найти(ИмяПланаОбмена) <> Неопределено Тогда + ПланыОбмена[ИмяПланаОбмена].ОпределитьНастройки(ПараметрыПоУмолчанию, ИдентификаторНастройки); + КонецЕсли; Если СтрНайти(ИмяПараметра, ",") = 0 Тогда @@ -1604,8 +2598,6 @@ КонецФункции -// Для внутреннего использования. -// Функция СтруктураПараметровWS() Экспорт СтруктураПараметров = Новый Структура; @@ -1616,8 +2608,6 @@ Возврат СтруктураПараметров; КонецФункции -// Для внутреннего использования. -// Функция ТаблицаМонитораОбменаДанными(Знач ПланыОбмена, Знач ДополнительныеСвойстваПланаОбмена = "", Знач ТолькоОшибочные = Ложь) Экспорт ТекстЗапроса = "ВЫБРАТЬ @@ -1787,11 +2777,9 @@ КонецФункции -// Для внутреннего использования. -// Процедура ПроверитьВозможностьВыполненияОбменов() Экспорт - Если Не Пользователи.РолиДоступны("ВыполнениеСинхронизацииДанных, НастройкаСинхронизацииДанных") Тогда + Если Не Пользователи.РолиДоступны("ВыполнениеСинхронизацииДанных") Тогда ВызватьИсключение НСтр("ru = 'Недостаточно прав для синхронизации данных.'"); @@ -1804,7 +2792,6 @@ КонецПроцедуры -// Для внутреннего использования. Процедура ПроверитьИспользованиеОбменаДанными() Экспорт Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") Тогда @@ -1817,8 +2804,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Функция ПараметрыОбмена() Экспорт СтруктураПараметров = Новый Структура; @@ -1921,14 +2906,21 @@ КонецПроцедуры -// Для внутреннего использования. -// Функция ПолучитьWSПроксиПоПараметрамПодключения( СтруктураНастроек, СтрокаСообщенияОбОшибке = "", СообщениеПользователю = "", ДелатьКонтрольныйВызов = Ложь) Экспорт + Попытка + ОбменДаннымиКлиентСервер.ПроверитьКорректностьФорматаАдресаWSПрокси(СтруктураНастроек.WSURLВебСервиса); + Исключение + СообщениеПользователю = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису(), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); + Возврат Неопределено; + КонецПопытки; + Попытка ОбменДаннымиКлиентСервер.ПроверитьНедопустимыеСимволыВИмениПользователяWSПрокси(СтруктураНастроек.WSИмяПользователя); Исключение @@ -1999,137 +2991,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Работа с объектом FTP-соединение. - -Функция FTPСоединение(Знач Настройки) Экспорт - - Возврат Новый FTPСоединение( - Настройки.Сервер, - Настройки.Порт, - Настройки.ИмяПользователя, - Настройки.ПарольПользователя, - НастройкиПроксиСервера(Настройки.ЗащищенноеСоединение), - Настройки.ПассивноеСоединение, - Настройки.Таймаут, - Настройки.ЗащищенноеСоединение); - -КонецФункции - -Функция FTPКаталогСуществует(Знач Путь, Знач ИмяКаталога, Знач FTPСоединение) Экспорт - - Для Каждого FTPФайл Из FTPСоединение.НайтиФайлы(Путь) Цикл - - Если FTPФайл.ЭтоКаталог() И FTPФайл.Имя = ИмяКаталога Тогда - - Возврат Истина; - - КонецЕсли; - - КонецЦикла; - - Возврат Ложь; -КонецФункции - -Функция FTPНастройкиСоединения() Экспорт - - Результат = Новый Структура; - Результат.Вставить("Сервер", ""); - Результат.Вставить("Порт", 21); - Результат.Вставить("ИмяПользователя", ""); - Результат.Вставить("ПарольПользователя", ""); - Результат.Вставить("ПассивноеСоединение", Ложь); - Результат.Вставить("Таймаут", 0); - Результат.Вставить("ЗащищенноеСоединение", Неопределено); - - Возврат Результат; -КонецФункции - -// Возвращает имя сервера и путь на сервере FTP, полученные из строки подключения к FTP-ресурсу. -// -// Параметры: -// СтрокаПодключения - Строка - строка подключения к FTP-ресурсу. -// -// Возвращаемое значение: -// Структура - настройки подключения к FTP-ресурсу. Поля структуры: -// Сервер - Строка - имя сервера. -// Путь - Строка - путь на сервере. -// -// Пример (1): -// Результат = FTPИмяСервераИПуть("ftp://server"); -// Результат.Сервер = "server"; -// Результат.Путь = "/"; -// -// Пример (2): -// Результат = FTPИмяСервераИПуть("ftp://server/saas/obmen"); -// Результат.Сервер = "server"; -// Результат.Путь = "/saas/obmen/"; -// -Функция FTPИмяСервераИПуть(Знач СтрокаПодключения) Экспорт - - Результат = Новый Структура("Сервер, Путь"); - СтрокаПодключения = СокрЛП(СтрокаПодключения); - - Если (ВРег(Лев(СтрокаПодключения, 6)) <> "FTP://" - И ВРег(Лев(СтрокаПодключения, 7)) <> "FTPS://") - ИЛИ СтрНайти(СтрокаПодключения, "@") <> 0 Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Строка подключения к FTP-ресурсу не соответствует формату: ""%1""'"), СтрокаПодключения); - КонецЕсли; - - ПараметрыПодключения = СтрРазделить(СтрокаПодключения, "/"); - - Если ПараметрыПодключения.Количество() < 3 Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В строке подключения к FTP-ресурсу не указано имя сервера: ""%1""'"), СтрокаПодключения); - КонецЕсли; - - Результат.Сервер = ПараметрыПодключения[2]; - - ПараметрыПодключения.Удалить(0); - ПараметрыПодключения.Удалить(0); - ПараметрыПодключения.Удалить(0); - - ПараметрыПодключения.Вставить(0, "@"); - - Если Не ПустаяСтрока(ПараметрыПодключения.Получить(ПараметрыПодключения.ВГраница())) Тогда - - ПараметрыПодключения.Добавить("@"); - - КонецЕсли; - - Результат.Путь = СтрСоединить(ПараметрыПодключения, "/"); - Результат.Путь = СтрЗаменить(Результат.Путь, "@", ""); - - Возврат Результат; -КонецФункции - -// Получает настройки прокси сервера. -// -Функция НастройкиПроксиСервера(ЗащищенноеСоединение) - - Прокси = Неопределено; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда - МодульПолучениеФайловИзИнтернетаКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернетаКлиентСервер"); - Протокол = ?(ЗащищенноеСоединение = Неопределено, "ftp", "ftps"); - Прокси = МодульПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси(Протокол); - КонецЕсли; - - Возврат Прокси; - -КонецФункции - -// Для внутреннего использования. -// -Функция ОткрытьПомощникСозданияОбменаДаннымиДляНастройкиПодчиненногоУзла() Экспорт - - Возврат Не ОбщегоНазначенияПовтИсп.РазделениеВключено() - И Не ОбменДаннымиПовтИсп.ЭтоАвтономноеРабочееМесто() - И ЭтоПодчиненныйУзелРИБ() - И Не Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить(); - -КонецФункции - // Устанавливает значение параметра "Загрузка" для свойства объекта "ОбменДанными". // // Параметры: @@ -2157,12 +3018,137 @@ КонецПроцедуры +Функция НазначениеПланаОбмена(ИмяПланаОбмена) Экспорт + + Возврат ОбменДаннымиПовтИсп.НазначениеПланаОбмена(ИмяПланаОбмена); + +КонецФункции + +Функция ПолноеИмяФайлаДанныхОтложенногоОбновления() + + КаталогВременныхФайлов = ОбменДаннымиПовтИсп.КаталогВременногоХранилищаФайлов(); + ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + КаталогВременныхФайлов, "updatedata.xml"); + + Возврат ИмяФайла; + +КонецФункции + +// Процедура удаления существующих движений документа при перепроведении (отмене проведения). +// +// Параметры: +// ДокументОбъект - ДокументОбъект - документ, движения которого требуется удалить. +// +Процедура УдалитьДвиженияУДокумента(ДокументОбъект) Экспорт + + МассивОбрабатываемыхСтрокТаблицыДвижений = Новый Массив(); + + // Получение списка регистров, по которым существуют движения. + ТаблицаДвижений = ОпределитьНаличиеДвиженийПоДокументу(ДокументОбъект.Ссылка); + ТаблицаДвижений.Колонки.Добавить("НаборЗаписей"); + ТаблицаДвижений.Колонки.Добавить("БезусловноеУдаление", Новый ОписаниеТипов("Булево")); + + Для Каждого СтрокаДвижения Из ТаблицаДвижений Цикл + // Имя регистра передается как значение, полученное с помощью + // функции ПолноеИмя() метаданных регистра. + ПозицияТочки = СтрНайти(СтрокаДвижения.Имя, "."); + ТипРегистра = Лев(СтрокаДвижения.Имя, ПозицияТочки - 1); + ИмяРегистра = СокрП(Сред(СтрокаДвижения.Имя, ПозицияТочки + 1)); + + МассивОбрабатываемыхСтрокТаблицыДвижений.Добавить(СтрокаДвижения); + + Если ТипРегистра = "РегистрНакопления" Тогда + МетаданныеНабора = Метаданные.РегистрыНакопления[ИмяРегистра]; + Набор = РегистрыНакопления[ИмяРегистра].СоздатьНаборЗаписей(); + ИначеЕсли ТипРегистра = "РегистрБухгалтерии" Тогда + МетаданныеНабора = Метаданные.РегистрыБухгалтерии[ИмяРегистра]; + Набор = РегистрыБухгалтерии[ИмяРегистра].СоздатьНаборЗаписей(); + ИначеЕсли ТипРегистра = "РегистрСведений" Тогда + МетаданныеНабора = Метаданные.РегистрыСведений[ИмяРегистра]; + Набор = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей(); + ИначеЕсли ТипРегистра = "РегистрРасчета" Тогда + МетаданныеНабора = Метаданные.РегистрыРасчета[ИмяРегистра]; + Набор = РегистрыРасчета[ИмяРегистра].СоздатьНаборЗаписей(); + КонецЕсли; + + Если Не ПравоДоступа("Изменение", Набор.Метаданные()) Тогда + // Отсутствуют права на всю таблицу регистра. + ТекстИсключения = НСтр("ru = 'Нарушение прав доступа: %1'"); + ТекстИсключения = СтрШаблон(ТекстИсключения, СтрокаДвижения.Имя); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + + Набор.Отбор.Регистратор.Установить(ДокументОбъект.Ссылка); + + // Набор не записывается сразу, чтобы не откатывать транзакцию, если впоследствии + // выяснится, что на один из регистров не хватает прав. + СтрокаДвижения.НаборЗаписей = Набор; + + КонецЦикла; + + ПропуститьПроверкуЗапретаИзменения(); + + Для Каждого СтрокаДвижения Из МассивОбрабатываемыхСтрокТаблицыДвижений Цикл + Попытка + СтрокаДвижения.НаборЗаписей.Записать(); + Исключение + // Возможно «сработал» RLS или подсистема даты запрета изменения. + ТекстИсключения = НСтр("ru = 'Операция не выполнена: %1 + |%2'"); + ТекстИсключения = СтрШаблон(ТекстИсключения, СтрокаДвижения.Имя, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение ТекстИсключения; + КонецПопытки; + КонецЦикла; + + ПропуститьПроверкуЗапретаИзменения(Ложь); + + Для Каждого Движение Из ДокументОбъект.Движения Цикл + Если Движение.Количество() > 0 Тогда + Движение.Очистить(); + КонецЕсли; + КонецЦикла; + + // Удаление записей регистрации из всех последовательностей. + Если ДокументОбъект.Метаданные().ЗаполнениеПоследовательностей = Метаданные.СвойстваОбъектов.ЗаполнениеПоследовательностей.ЗаполнятьАвтоматически Тогда + ТекстЗапроса = ""; + + Для Каждого Последовательность Из ДокументОбъект.ПринадлежностьПоследовательностям Цикл + // В запросе получаем имена последовательностей, в которых документ зарегистрирован. + ТекстЗапроса = ТекстЗапроса + " + |" + ?(ТекстЗапроса = "", "", "ОБЪЕДИНИТЬ ВСЕ ") + " + |ВЫБРАТЬ """ + Последовательность.Метаданные().Имя + + """ КАК Имя ИЗ " + Последовательность.Метаданные().ПолноеИмя() + + " ГДЕ Регистратор = &Регистратор"; + + КонецЦикла; + + Если ТекстЗапроса = "" Тогда + ТаблицаРегистраций = Новый ТаблицаЗначений(); + Иначе + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Регистратор", ДокументОбъект.Ссылка); + ТаблицаРегистраций = Запрос.Выполнить().Выгрузить(); + КонецЕсли; + + // Получение списка последовательностей в которых зарегистрирован документ. + КоллекцияПоследовательностей = ДокументОбъект.ПринадлежностьПоследовательностям; + Для Каждого НаборЗаписейРегистрацииВПоследовательности Из КоллекцияПоследовательностей Цикл + Если (НаборЗаписейРегистрацииВПоследовательности.Количество() > 0) + ИЛИ (НЕ ТаблицаРегистраций.Найти(НаборЗаписейРегистрацииВПоследовательности.Метаданные().Имя,"Имя") = Неопределено) Тогда + НаборЗаписейРегистрацииВПоследовательности.Очистить(); + КонецЕсли; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий подсистем БСП. +#Область ОбработчикиСобытийПодсистемБСП // Заполняет структуру массивами поддерживаемых версий всех подлежащих версионированию подсистем, // используя в качестве ключей названия подсистем. @@ -2234,9 +3220,6 @@ ОбщегоНазначения.ДобавитьПереименование( Итог, "2.1.2.5", "Роль.ВыполнениеОбменовДанными", "Роль.ВыполнениеСинхронизацииДанных", Библиотека); - - ОбщегоНазначения.ДобавитьПереименование( - Итог, "2.1.2.5", "Роль.ДобавлениеИзменениеОбменовДанными", "Роль.НастройкаСинхронизацииДанных", Библиотека); КонецПроцедуры @@ -2254,76 +3237,6 @@ КонецПроцедуры -// Используется для получения объектов метаданных обязательных для плана обмена. -// Если подсистема имеет объекты метаданных обязательные для включения в состав плана обмена, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты - Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. -// Истина - требуется получить список объектов плана обмена РИБ; -// Ложь - требуется получить список для плана обмена НЕ РИБ. -// -Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт - -КонецПроцедуры - -// Используется для получения объектов метаданных, которые не следует включать в состав плана обмена. -// Если подсистема имеет объекты метаданных, которые не следует включать в состав плана обмена, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты - Массив. Массив объектов метаданных конфигурации, которые не следует включать в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. -// Истина - требуется получить список объектов-исключений плана обмена РИБ; -// Ложь - требуется получить список для плана обмена НЕ РИБ. -// -Процедура ПриПолученииОбъектовИсключенийПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт - - Если РаспределеннаяИнформационнаяБаза Тогда - - Объекты.Добавить(Метаданные.Константы.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском); - Объекты.Добавить(Метаданные.Константы.ДатаОбновленияПовторноИспользуемыхЗначенийМРО); - Объекты.Добавить(Метаданные.Константы.ЗагрузитьСообщениеОбменаДанными); - Объекты.Добавить(Метаданные.Константы.ИспользоватьСинхронизациюДанных); - Объекты.Добавить(Метаданные.Константы.ИспользоватьСинхронизациюДанныхВЛокальномРежиме); - Объекты.Добавить(Метаданные.Константы.ИспользоватьСинхронизациюДанныхВМоделиСервиса); - Объекты.Добавить(Метаданные.Константы.КаталогСообщенийОбменаДаннымиДляWindows); - Объекты.Добавить(Метаданные.Константы.КаталогСообщенийОбменаДаннымиДляLinux); - Объекты.Добавить(Метаданные.Константы.НастройкаПодчиненногоУзлаРИБЗавершена); - Объекты.Добавить(Метаданные.Константы.ПрефиксУзлаРаспределеннойИнформационнойБазы); - Объекты.Добавить(Метаданные.Константы.СообщениеОбменаДаннымиИзГлавногоУзла); - - Объекты.Добавить(Метаданные.Справочники.СценарииОбменовДанными); - - Объекты.Добавить(Метаданные.РегистрыСведений.НастройкиТранспортаОбмена); - Объекты.Добавить(Метаданные.РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз); - Объекты.Добавить(Метаданные.РегистрыСведений.ПравилаДляОбменаДанными); - Объекты.Добавить(Метаданные.РегистрыСведений.СообщенияОбменаДанными); - Объекты.Добавить(Метаданные.РегистрыСведений.СоответствияОбъектовИнформационныхБаз); - Объекты.Добавить(Метаданные.РегистрыСведений.СостоянияОбменовДанными); - Объекты.Добавить(Метаданные.РегистрыСведений.СостоянияУспешныхОбменовДанными); - - КонецЕсли; - -КонецПроцедуры - -// Используется для получения объектов метаданных, которые должны входить в состав плана обмена -// и НЕ должны входить в состав подписок на события регистрации изменений для этого плана обмена. -// Эти объекты метаданных используются только в момент создания начального образа подчиненного узла -// и не мигрируют в процессе обмена. -// Если подсистема имеет объекты метаданных, которые участвуют только в создании начального образа подчиненного узла, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты - Массив. Массив объектов метаданных конфигурации. -// -Процедура ПриПолученииОбъектовНачальногоОбразаПланаОбмена(Объекты) Экспорт - - Объекты.Добавить(Метаданные.Константы.НастройкиПодчиненногоУзлаРИБ); - -КонецПроцедуры - // Вызывается при включении разделения данных по областям данных. // Процедура ПриВключенииРазделенияПоОбластямДанных() Экспорт @@ -2343,9 +3256,13 @@ // Профиль "Синхронизация данных с другими программами". ОписаниеПрофиля = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом").НовоеОписаниеПрофиляГруппДоступа(); ОписаниеПрофиля.Идентификатор = ПрофильДоступаСинхронизацияДанныхСДругимиПрограммами(); - ОписаниеПрофиля.Наименование = НСтр("ru = 'Синхронизация данных с другими программами'"); - ОписаниеПрофиля.Описание = НСтр("ru = 'Дополнительно назначается тем пользователям, которым должны быть доступны средства - |для мониторинга и синхронизации данных с другими программами.'"); + ОписаниеПрофиля.Наименование = + НСтр("ru = 'Синхронизация данных с другими программами'", + Метаданные.ОсновнойЯзык.КодЯзыка); + ОписаниеПрофиля.Описание = + НСтр("ru = 'Дополнительно назначается тем пользователям, которым должны быть доступны средства + |для мониторинга и синхронизации данных с другими программами.'", + Метаданные.ОсновнойЯзык.КодЯзыка); // Основные возможности профиля. РолиПрофиля = СтрРазделить(РолиПрофиляДоступаСинхронизацияДанныхСДругимиПрограммами(), ","); @@ -2420,8 +3337,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов из других подсистем. +#КонецОбласти + +#Область ОбработчикиУсловныхВызововИзДругихПодсистем // Возвращает соответствие имен параметров сеанса и обработчиков для их инициализации. // @@ -2438,8 +3356,9 @@ Обработчики.Вставить("ПараметрыСеансаСинхронизацииДанных", "ОбменДаннымиВызовСервера.УстановкаПараметровСеанса"); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов в другие подсистемы. +#КонецОбласти + +#Область ОбработчикиУсловныхВызововВДругиеПодсистемы // Определяет используется ли в конфигурации групповое изменение объектов. // @@ -2583,9 +3502,9 @@ КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// Выполнение обмена данными +#Область ВыполнениеОбменаДанными // Выполняет процесс обмена данными отдельно для каждой строки настройки обмена. // Процесс обмена данными состоит из двух стадий: @@ -2755,8 +3674,6 @@ КонецПроцедуры -// - // Получает сообщение обмена во временный каталог пользователя ОС. // // Параметры: @@ -3216,7 +4133,7 @@ // Выполняет удаление файлов сообщений обмена, которые не были удалены из-за сбоев в работе системы. // Удалению подлежат файлы с датой размещения более суток от текущей универсальной даты. -// Анализируется РС.СообщенияОбменаДанными и РС.СообщенияОбменаДаннымиОбластейДанных +// Анализируется РС.СообщенияОбменаДанными и РС.СообщенияОбменаДаннымиОбластейДанных. // // Параметры: // Нет. @@ -3281,11 +4198,22 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Для работы через внешнее соединение. +Функция КоличествоЭлементовВТранзакцииВыполняемогоДействия(Действие) + + Если Действие = Перечисления.ДействияПриОбмене.ВыгрузкаДанных Тогда + КоличествоЭлементов = КоличествоЭлементовВТранзакцииВыгрузкиДанных(); + Иначе + КоличествоЭлементов = КоличествоЭлементовВТранзакцииЗагрузкиДанных(); + КонецЕсли; + + Возврат КоличествоЭлементов; + +КонецФункции + +#КонецОбласти + +#Область ДляРаботыЧерезВнешнееСоединение -// Для внутреннего использования. -// Процедура ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВоВременноеХранилище(Знач ИмяПланаОбмена, Знач КодУзлаИнформационнойБазы, Адрес) Экспорт ПолноеИмяФайлаСообщенияОбмена = ПолучитьИмяВременногоФайла("xml"); @@ -3305,8 +4233,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВСервисПередачиФайлов(Знач ИмяПланаОбмена, Знач КодУзлаИнформационнойБазы, Знач ИдентификаторФайла) Экспорт @@ -3330,8 +4256,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ВыполнитьВыгрузкуДляУзлаИнформационнойБазыЧерезФайл(Знач ИмяПланаОбмена, Знач КодУзлаИнформационнойБазы, Знач ПолноеИмяФайлаСообщенияОбмена) Экспорт @@ -3347,8 +4271,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ВыполнитьВыгрузкуДляУзлаИнформационнойБазыЧерезСтроку(Знач ИмяПланаОбмена, Знач КодУзлаИнформационнойБазы, СообщениеОбмена) Экспорт ПараметрыОбменаДанными = ПараметрыОбменаДаннымиЧерезФайлИлиСтроку(); @@ -3364,8 +4286,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ВыполнитьЗагрузкуДляУзлаИнформационнойБазыЧерезСтроку(Знач ИмяПланаОбмена, Знач КодУзлаИнформационнойБазы, СообщениеОбмена) Экспорт ПараметрыОбменаДанными = ПараметрыОбменаДаннымиЧерезФайлИлиСтроку(); @@ -3381,8 +4301,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ВыполнитьЗагрузкуДляУзлаИнформационнойБазыИзСервисаПередачиФайлов(Знач ИмяПланаОбмена, Знач КодУзлаИнформационнойБазы, Знач ИдентификаторФайла) Экспорт @@ -3409,8 +4327,6 @@ УдалитьФайлы(ИмяВременногоФайла); КонецПроцедуры -// Для внутреннего использования. -// Функция ПараметрыОбменаДаннымиЧерезФайлИлиСтроку() Экспорт СтруктураПараметров = Новый Структура; @@ -3427,8 +4343,6 @@ КонецФункции -// Для внутреннего использования. -// Процедура ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(ПараметрыОбмена) Экспорт ПроверитьВозможностьВыполненияОбменов(); @@ -3531,8 +4445,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ЗафиксироватьЗавершениеОбменаЧерезВнешнееСоединение(СтруктураНастроекОбмена) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -3541,8 +4453,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Функция СтруктураНастроекОбменаЧерезВнешнееСоединение(Структура) Экспорт ПроверитьИспользованиеОбменаДанными(); @@ -3592,8 +4502,6 @@ Возврат СтруктураНастроекОбменаВнешнееСоединение; КонецФункции -// Для внутреннего использования. -// Функция ПолучитьПравилаКонвертацииОбъектовЧерезВнешнееСоединение(ИмяПланаОбмена, ПолучатьПравилаКорреспондента = Ложь) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -3602,53 +4510,6 @@ КонецФункции -// Для внутреннего использования. -// -Процедура ВыполнитьДействиеОбменаДляУзлаИнформационнойБазы( - Отказ, - УзелИнформационнойБазы, - ДействиеПриОбмене, - ВидТранспортаСообщенийОбмена = Неопределено, - Знач ТолькоПараметры = Ложь) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - // ИНИЦИАЛИЗАЦИЯ ОБМЕНА ДАННЫМИ - СтруктураНастроекОбмена = ОбменДаннымиПовтИсп.ПолучитьСтруктуруНастроекОбменаДляУзлаИнформационнойБазы( - УзелИнформационнойБазы, ДействиеПриОбмене, ВидТранспортаСообщенийОбмена); - - Если СтруктураНастроекОбмена.Отказ Тогда - - // Если настройка содержит ошибки, то обмен не производим; статус "Отменено". - ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); - - Отказ = Истина; - - Возврат; - КонецЕсли; - - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено; - СтруктураНастроекОбмена.ДатаНачала = ТекущаяДатаСеанса(); - - СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтруктураНастроекОбмена.УзелИнформационнойБазыНаименование); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщения, СтруктураНастроекОбмена); - - // ОБМЕН ДАННЫМИ - ВыполнитьОбменДаннымиЧерезФайловыйРесурс(СтруктураНастроекОбмена, ТолькоПараметры); - - ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); - - Если Не РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена) Тогда - - Отказ = Истина; - - КонецЕсли; - -КонецПроцедуры - -// Для внутреннего использования. -// Процедура ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(УзелИнформационнойБазы, ДействиеПриОбмене, ПараметрыОбмена, Отказ) ТолькоПараметры = ПараметрыОбмена.ТолькоПараметры; @@ -3826,10 +4687,16 @@ ФайлСообщенияОбмена = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременногоХранилищаФайлов(), УникальноеИмяФайлаСообщенияОбмена()); - ЗаписатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, ФайлСообщенияОбмена); + Попытка + ЗаписатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, ФайлСообщенияОбмена); + Исключение + ЗаписьЖурналаРегистрацииОбменаДанными(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СтруктураНастроекОбмена, Истина); + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка; + Отказ = Истина; + КонецПопытки; // Отправка сообщения обмена только в случае успешной выгрузки данных. - Если РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена) Тогда + Если РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена) И НЕ Отказ Тогда Попытка @@ -3903,8 +4770,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(Отказ, УзелИнформационнойБазы, ДействиеПриОбмене, КоличествоЭлементовВТранзакции) @@ -4178,8 +5043,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ВыполнитьОбменДаннымиЧерезФайловыйРесурс(СтруктураНастроекОбмена, Знач ТолькоПараметры = Ложь) Если СтруктураНастроекОбмена.ПроизводитьЗагрузкуДанных Тогда @@ -4257,8 +5120,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ПередЧтениемСообщенияОбмена(Знач Получатель, СообщениеОбмена, СтандартнаяОбработка) Если ЭтоПодчиненныйУзелРИБ() @@ -4302,7 +5163,6 @@ КонецПроцедуры -// Для внутреннего использования. Процедура ПослеЧтенияСообщенияОбмена(Знач Получатель, Знач СообщениеОбмена, Знач СообщениеПрочитано, СтандартнаяОбработка, Знач УдалитьСообщение = Истина) Если ЭтоПодчиненныйУзелРИБ() @@ -4384,6 +5244,10 @@ КонецЕсли; + Если СообщениеПрочитано И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + РегистрыСведений.ОбработчикиСобытийСинхронизацииДанных.ВыполнитьОбработчики(Получатель, "ПослеПолученияДанных"); + КонецЕсли; + КонецПроцедуры // Записывает изменения узла информационной базы в файл во временном каталоге. @@ -4625,8 +5489,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Выполнение обмена методами сериализации. +#КонецОбласти + +#Область ВыполнениеОбменаМетодамиСериализации // Процедура записи изменений для сообщения обмена. // Применима для случаев когда структура метаданных обменивающихся баз одинакова для всех объектов участвующих в обмене. @@ -4982,8 +5847,22 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Экспортные служебные функции-свойства. +#КонецОбласти + +#Область ФункцииСвойства + +// Возвращает имя файла сообщения обмена данными по данным узла-отправителя и узла-получателя. +// +Функция ИмяФайлаСообщенияОбмена(КодУзлаОтправителя, КодУзлаПолучателя) + + ШаблонИмени = "[Префикс]_[УзелОтправитель]_[УзелПолучатель]"; + + ШаблонИмени = СтрЗаменить(ШаблонИмени, "[Префикс]", "Message"); + ШаблонИмени = СтрЗаменить(ШаблонИмени, "[УзелОтправитель]", КодУзлаОтправителя); + ШаблонИмени = СтрЗаменить(ШаблонИмени, "[УзелПолучатель]", КодУзлаПолучателя); + + Возврат ШаблонИмени; +КонецФункции // Возвращает имя временного каталога для сообщений обмена данными. // Имя каталога соответствует шаблону: @@ -4996,7 +5875,7 @@ // Возвращаемое значение: // Строка - имя временного каталога для сообщений обмена данными. // -Функция ИмяВременногоКаталогаСообщенийОбмена() Экспорт +Функция ИмяВременногоКаталогаСообщенийОбмена() Возврат СтрЗаменить("Exchange82 {GUID}", "GUID", ВРег(Строка(Новый УникальныйИдентификатор))); @@ -5011,7 +5890,7 @@ // Возвращаемое значение: // Строка - имя обработки транспорта сообщений обмена. // -Функция ИмяОбработкиТранспортаСообщенийОбмена(ВидТранспорта) Экспорт +Функция ИмяОбработкиТранспортаСообщенийОбмена(ВидТранспорта) Возврат СтрЗаменить("ТранспортСообщенийОбмена[ВидТранспорта]", "[ВидТранспорта]", ОбщегоНазначения.ИмяЗначенияПеречисления(ВидТранспорта)); @@ -5041,11 +5920,90 @@ Возврат ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ЭтоПланОбменаXDTO"); КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Транспорт сообщений обмена +// Функция-свойство: возвращает литерал обозначения строки неограниченной длины. +// +// Возвращаемое значение: +// Строка - литерал обозначения строки неограниченной длины. +// +Функция СтрокаНеограниченнойДлины() Экспорт + + Возврат "(снд)"; + +КонецФункции + +// Функция-свойство: возвращает литерал обозначения узла-XML, который содержит значение константы ПРО. +// +// Возвращаемое значение: +// Строка - литерал обозначения узла-XML, который содержит значение константы ПРО. +// +Функция ЭлементОтбораСвойствоЗначениеКонстанты() Экспорт + + Возврат "ЗначениеКонстанты"; + +КонецФункции + +// Функция-свойство: возвращает литерал обозначения узла-XML, который содержит алгоритм получения значения. +// +// Возвращаемое значение: +// Строка - возвращает литерал обозначения узла-XML, который содержит алгоритм получения значения. +// +Функция ЭлементОтбораСвойствоАлгоритмЗначения() Экспорт + + Возврат "АлгоритмЗначения"; + +КонецФункции + +// Функция-свойство: возвращает имя файла, который используется для проверки подключения обработки транспорта. +// +// Возвращаемое значение: +// Строка - возвращает имя файла, который используется для проверки подключения обработки транспорта. +// +Функция ИмяФайлаПроверкиПодключения() Экспорт + + Возврат "ConnectionCheckFile.tmp"; + +КонецФункции + +Функция ЭтоОшибкаНомерСообщенияМеньшеИлиРавенНомеруРанееПринятогоСообщения(ОписаниеОшибки) + + Возврат СтрНайти(НРег(ОписаниеОшибки), НРег("ru = 'Номер сообщения меньше или равен'")) > 0; + +КонецФункции + +Функция СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису() Экспорт + + Возврат НСтр("ru = 'Обмен данными.Установка подключения к web-сервису'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + +КонецФункции + +Функция СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными() Экспорт + + Возврат НСтр("ru = 'Обмен данными.Загрузка правил'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + +КонецФункции + +Функция СобытиеЖурналаРегистрацииСозданиеОбменаДанными() Экспорт + + Возврат НСтр("ru = 'Обмен данными.Создание обмена данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + +КонецФункции + +Функция СобытиеЖурналаРегистрацииУдалениеВременногоФайла() Экспорт + + Возврат НСтр("ru = 'Обмен данными.Удаление временного файла'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + +КонецФункции + +Функция СобытиеЖурналаРегистрацииОбменДанными() Экспорт + + Возврат НСтр("ru = 'Обмен данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + +КонецФункции + +#КонецОбласти + +#Область ТранспортСообщенийОбмена -// Для внутреннего использования. -// Процедура ВыполнитьТранспортСообщенияОбменаПередОбработкой(СтруктураНастроекОбмена) // Получаем инициализированную обработку транспорта сообщений. @@ -5062,8 +6020,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ВыполнитьТранспортСообщенияОбменаОтправка(СтруктураНастроекОбмена) // Получаем инициализированную обработку транспорта сообщений. @@ -5080,8 +6036,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ВыполнитьТранспортСообщенияОбменаПолучение(СтруктураНастроекОбмена) // Получаем инициализированную обработку транспорта сообщений. @@ -5098,8 +6052,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ВыполнитьТранспортСообщенияОбменаПослеОбработки(СтруктураНастроекОбмена) // Получаем инициализированную обработку транспорта сообщений. @@ -5110,8 +6062,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Сервис передачи файлов +#КонецОбласти + +#Область СервисПередачиФайлов // Функция по переданному идентификатору скачивает файл из сервиса передачи файлов. // @@ -5233,7 +6186,7 @@ // Возвращаемое значение: // УникальныйИдентификатор - идентификатор файла в сервисе передачи файлов. // -Функция ПоместитьФайлВХранилищеВСервисе(Знач ИмяФайла, Знач УзелИнформационнойБазы, Знач РазмерЧасти = 1024, Знач ПараметрыАутентификации = Неопределено) Экспорт +Функция ПоместитьФайлВХранилищеВСервисе(Знач ИмяФайла, Знач УзелИнформационнойБазы, Знач РазмерЧасти = 1024, Знач ПараметрыАутентификации = Неопределено) // Возвращаемое значение функции. ИдентификаторФайла = Неопределено; @@ -5441,8 +6394,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Регистрация изменений для начальной выгрузки данных. +#КонецОбласти + +#Область РегистрацияИзмененийНачальнойВыгрузкиДанных // Выполняет регистрацию изменений для начальной выгрузки данных с учетом даты начала выгрузки и списка организаций. // Процедура является универсальной и может быть использована для регистрации изменений данных по дате начала выгрузки @@ -5669,8 +6623,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Функция ВыборкаДокументовПоДатеНачалаВыгрузкиИОрганизациям(ПолноеИмяОбъекта, ДатаНачалаВыгрузки, Организации) ТекстЗапроса = @@ -5692,8 +6644,6 @@ Возврат Запрос.Выполнить().Выбрать(); КонецФункции -// Для внутреннего использования. -// Функция ВыборкаОбъектовПоДатеНачалаВыгрузки(ПолноеИмяОбъекта, ДатаНачалаВыгрузки) ТекстЗапроса = @@ -5713,8 +6663,6 @@ Возврат Запрос.Выполнить().Выбрать(); КонецФункции -// Для внутреннего использования. -// Функция ВыборкаРегистраторовНаборовЗаписейПоДатеНачалаВыгрузкиИОрганизациям(ПолноеИмяОбъекта, ДатаНачалаВыгрузки, Организации) ТекстЗапроса = @@ -5736,8 +6684,6 @@ Возврат Запрос.Выполнить().Выбрать(); КонецФункции -// Для внутреннего использования. -// Функция ВыборкаРегистраторовНаборовЗаписейПоДатеНачалаВыгрузки(ПолноеИмяОбъекта, ДатаНачалаВыгрузки) ТекстЗапроса = @@ -5757,8 +6703,6 @@ Возврат Запрос.Выполнить().Выбрать(); КонецФункции -// Для внутреннего использования. -// Функция ВыборкаЗначенийОсновногоОтбораРегистраСведенийПоДатеНачалаВыгрузкиИОрганизациям(ОсновнойОтбор, ПолноеИмяОбъекта, ДатаНачалаВыгрузки, @@ -5784,8 +6728,6 @@ Возврат Запрос.Выполнить().Выбрать(); КонецФункции -// Для внутреннего использования. -// Функция ВыборкаЗначенийОсновногоОтбораРегистраСведенийПоДатеНачалаВыгрузки(ОсновнойОтбор, ПолноеИмяОбъекта, ДатаНачалаВыгрузки) ТекстЗапроса = @@ -5806,8 +6748,6 @@ Возврат Запрос.Выполнить().Выбрать(); КонецФункции -// Для внутреннего использования. -// Функция ВыборкаЗначенийОсновногоОтбораРегистраСведенийПоОрганизациям(ОсновнойОтбор, ПолноеИмяОбъекта, Организации) ТекстЗапроса = @@ -5828,8 +6768,6 @@ Возврат Запрос.Выполнить().Выбрать(); КонецФункции -// Для внутреннего использования. -// Функция ОсновнойОтборРегистраСведений(ОбъектМетаданных) Результат = Новый Массив; @@ -5854,8 +6792,1822 @@ Возврат Результат; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные служебные процедуры и функции. +#КонецОбласти + +#Область ОберткиДляРаботыСПрограммнымИнтерфейсомМенеджераПланаОбмена + +Функция НастройкаОтборовНаУзле(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента, ИмяФормы = "", ИдентификаторНастройки = "") Экспорт + + Если ПустаяСтрока(ВерсияКорреспондента) Тогда + ВерсияКорреспондента = "0.0.0.0"; + КонецЕсли; + + ИмяФормы = ""; + + Результат = ПланыОбмена[ИмяПланаОбмена].НастройкаОтборовНаУзле(ВерсияКорреспондента, ИмяФормы, ИдентификаторНастройки); + + Если ПустаяСтрока(ИмяФормы) Тогда + ИмяФормы = "ФормаНастройкиУзла"; + КонецЕсли; + + Если Результат = Неопределено Тогда + Результат = Новый Структура; + КонецЕсли; + + Возврат Результат; +КонецФункции + +Функция ЗначенияПоУмолчаниюНаУзле(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента, ИмяФормы = "", ИдентификаторНастройки = "") Экспорт + + Если ПустаяСтрока(ВерсияКорреспондента) Тогда + ВерсияКорреспондента = "0.0.0.0"; + КонецЕсли; + + ИмяФормы = ""; + + Результат = ПланыОбмена[ИмяПланаОбмена].ЗначенияПоУмолчаниюНаУзле(ВерсияКорреспондента, ИмяФормы, ИдентификаторНастройки); + + Если ПустаяСтрока(ИмяФормы) Тогда + ИмяФормы = "ФормаНастройкиЗначенийПоУмолчанию"; + КонецЕсли; + + Если Результат = Неопределено Тогда + Результат = Новый Структура; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ОписаниеОграниченийПередачиДанных(Знач ИмяПланаОбмена, Знач Настройка, Знач ВерсияКорреспондента, ИдентификаторНастройки = "") Экспорт + + Если ПустаяСтрока(ВерсияКорреспондента) Тогда + ВерсияКорреспондента = "0.0.0.0"; + КонецЕсли; + + Возврат ПланыОбмена[ИмяПланаОбмена].ОписаниеОграниченийПередачиДанных(Настройка, ВерсияКорреспондента, ИдентификаторНастройки); + +КонецФункции + +Функция ОписаниеЗначенийПоУмолчанию(Знач ИмяПланаОбмена, Знач Настройка, Знач ВерсияКорреспондента, ИдентификаторНастройки = "") Экспорт + + Если ПустаяСтрока(ВерсияКорреспондента) Тогда + ВерсияКорреспондента = "0.0.0.0"; + КонецЕсли; + + Возврат ПланыОбмена[ИмяПланаОбмена].ОписаниеЗначенийПоУмолчанию(Настройка, ВерсияКорреспондента, ИдентификаторНастройки); + +КонецФункции + +Функция ОбщиеДанныеУзлов(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента, ИмяФормы = "") Экспорт + + Если ПустаяСтрока(ВерсияКорреспондента) Тогда + ВерсияКорреспондента = "0.0.0.0"; + КонецЕсли; + + ИмяФормы = ""; + + Результат = ПланыОбмена[ИмяПланаОбмена].ОбщиеДанныеУзлов(ВерсияКорреспондента, ИмяФормы); + + Если ПустаяСтрока(ИмяФормы) Тогда + ИмяФормы = "ФормаНастройкиУзлов"; + КонецЕсли; + + Возврат СтрЗаменить(Результат, " ", ""); +КонецФункции + +Функция НастройкаОтборовНаУзлеБазыКорреспондента(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента, ИмяФормы = "", ИдентификаторНастройки = "") Экспорт + + Если ПустаяСтрока(ВерсияКорреспондента) Тогда + ВерсияКорреспондента = "0.0.0.0"; + КонецЕсли; + + ИмяФормы = ""; + + Результат = ПланыОбмена[ИмяПланаОбмена].НастройкаОтборовНаУзлеБазыКорреспондента(ВерсияКорреспондента, ИмяФормы, ИдентификаторНастройки); + + Если ПустаяСтрока(ИмяФормы) Тогда + ИмяФормы = "ФормаНастройкиУзлаБазыКорреспондента"; + КонецЕсли; + + Если Результат = Неопределено Тогда + Результат = Новый Структура; + КонецЕсли; + + Возврат Результат; +КонецФункции + +Функция ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента, ИмяФормы = "", ИдентификаторНастройки = "") Экспорт + + Если ПустаяСтрока(ВерсияКорреспондента) Тогда + ВерсияКорреспондента = "0.0.0.0"; + КонецЕсли; + + ИмяФормы = ""; + + Результат = ПланыОбмена[ИмяПланаОбмена].ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента(ВерсияКорреспондента, ИмяФормы, ИдентификаторНастройки); + + Если ПустаяСтрока(ИмяФормы) Тогда + ИмяФормы = "ФормаНастройкиЗначенийПоУмолчаниюБазыКорреспондента"; + КонецЕсли; + + Если Результат = Неопределено Тогда + Результат = Новый Структура; + КонецЕсли; + + Возврат Результат; +КонецФункции + +Функция ОписаниеОграниченийПередачиДанныхБазыКорреспондента(Знач ИмяПланаОбмена, Знач НастройкаОтборовНаУзле, Знач ВерсияКорреспондента, ИдентификаторНастройки = "") Экспорт + + Если ПустаяСтрока(ВерсияКорреспондента) Тогда + ВерсияКорреспондента = "0.0.0.0"; + КонецЕсли; + + Возврат ПланыОбмена[ИмяПланаОбмена].ОписаниеОграниченийПередачиДанныхБазыКорреспондента(НастройкаОтборовНаУзле, ВерсияКорреспондента, ИдентификаторНастройки); + +КонецФункции + +Функция ОписаниеЗначенийПоУмолчаниюБазыКорреспондента(Знач ИмяПланаОбмена, Знач ЗначенияПоУмолчаниюНаУзле, Знач ВерсияКорреспондента, ИдентификаторНастройки = "") Экспорт + + Если ПустаяСтрока(ВерсияКорреспондента) Тогда + ВерсияКорреспондента = "0.0.0.0"; + КонецЕсли; + + Возврат ПланыОбмена[ИмяПланаОбмена].ОписаниеЗначенийПоУмолчаниюБазыКорреспондента(ЗначенияПоУмолчаниюНаУзле, ВерсияКорреспондента, ИдентификаторНастройки); + +КонецФункции + +Функция ПояснениеДляНастройкиПараметровУчетаБазыКорреспондента(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента) Экспорт + + Если ПустаяСтрока(ВерсияКорреспондента) Тогда + ВерсияКорреспондента = "0.0.0.0"; + КонецЕсли; + + Возврат ПланыОбмена[ИмяПланаОбмена].ПояснениеДляНастройкиПараметровУчетаБазыКорреспондента(ВерсияКорреспондента); + +КонецФункции + +Процедура ПриПодключенииККорреспонденту(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента) Экспорт + + Если ПустаяСтрока(ВерсияКорреспондента) Тогда + ВерсияКорреспондента = "0.0.0.0"; + КонецЕсли; + + ПланыОбмена[ИмяПланаОбмена].ПриПодключенииККорреспонденту(ВерсияКорреспондента); + +КонецПроцедуры + +#КонецОбласти + +#Область РаботаСПаролямиСинхронизацииДанных + +// Возвращает значения пароля синхронизации данных для заданного узла. +// Если пароля нет, то возвращается Неопределено. +// +// Возвращаемое значение: +// Строка, Неопределено - значения пароля синхронизации данных. +// +Функция ПарольСинхронизацииДанных(Знач УзелИнформационнойБазы) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Возврат ПараметрыСеанса.ПаролиСинхронизацииДанных.Получить(УзелИнформационнойБазы); +КонецФункции + +// Возвращает признак того, что пароль синхронизации данных был задан пользователем. +// +Функция ПарольСинхронизацииДанныхЗадан(Знач УзелИнформационнойБазы) Экспорт + + Возврат ПарольСинхронизацииДанных(УзелИнформационнойБазы) <> Неопределено; + +КонецФункции + +// Устанавливает пароль синхронизации данных для заданного узла. +// Пароль сохраняется в параметре сеанса. +// +Процедура УстановитьПарольСинхронизацииДанных(Знач УзелИнформационнойБазы, Знач Пароль) + + УстановитьПривилегированныйРежим(Истина); + + ПаролиСинхронизацииДанных = Новый Соответствие; + + Для Каждого Элемент Из ПараметрыСеанса.ПаролиСинхронизацииДанных Цикл + + ПаролиСинхронизацииДанных.Вставить(Элемент.Ключ, Элемент.Значение); + + КонецЦикла; + + ПаролиСинхронизацииДанных.Вставить(УзелИнформационнойБазы, Пароль); + + ПараметрыСеанса.ПаролиСинхронизацииДанных = Новый ФиксированноеСоответствие(ПаролиСинхронизацииДанных); + +КонецПроцедуры + +// Сбрасывает пароль синхронизации данных для заданного узла. +// +Процедура СброситьПарольСинхронизацииДанных(Знач УзелИнформационнойБазы) + + УстановитьПарольСинхронизацииДанных(УзелИнформационнойБазы, Неопределено); + +КонецПроцедуры + +#КонецОбласти + +#Область КонтрольНеразделенныхДанных + +// Вызывается при проверке доступности неразделенных данных для записи. +// +Процедура ВыполнитьКонтрольЗаписиНеразделенныхДанных(Знач Данные) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() + И Не ЭтоРазделенныйОбъект(Данные) Тогда + + ПредставлениеИсключения = НСтр("ru = 'Нарушение прав доступа!'"); + ТекстИсключения = НСтр("ru = 'Нарушение прав доступа!'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + + ЗаписьЖурналаРегистрации( + ТекстИсключения, + УровеньЖурналаРегистрации.Ошибка, + Данные.Метаданные()); + + ВызватьИсключение ПредставлениеИсключения; + КонецЕсли; + +КонецПроцедуры + +Функция ЭтоРазделенныйОбъект(Знач Объект) + + ПолноеИмя = Объект.Метаданные().ПолноеИмя(); + + Возврат ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(ПолноеИмя, ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных()) + ИЛИ ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(ПолноеИмя, ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных()); +КонецФункции + +#КонецОбласти + +#Область РаботаСМониторомОбменаДанными + +// Возвращает структуру с данными последнего обмена для заданного узла информационной базы. +// +// Параметры: +// Нет. +// +// Возвращаемое значение: +// СостоянияОбменовДанными - Структура - структура с данными последнего обмена для заданного узла информационной базы. +// +Функция СостоянияОбменовДаннымиДляУзлаИнформационнойБазы(Знач УзелИнформационнойБазы) Экспорт + + // Возвращаемое значение функции. + СостоянияОбменовДанными = Новый Структура; + СостоянияОбменовДанными.Вставить("УзелИнформационнойБазы"); + СостоянияОбменовДанными.Вставить("РезультатЗагрузкиДанных", "Неопределено"); + СостоянияОбменовДанными.Вставить("РезультатВыгрузкиДанных", "Неопределено"); + + ТекстЗапроса = " + |// {ЗАПРОС №0} + |//////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВЫБОР + | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Выполнено) + | ТОГДА ""Успех"" + | + | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями) + | ТОГДА ""ВыполненоСПредупреждениями"" + | + | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято) + | ТОГДА ""Предупреждение_СообщениеОбменаБылоРанееПринято"" + | + | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Ошибка_ТранспортСообщения) + | ТОГДА ""Ошибка_ТранспортСообщения"" + | + | ИНАЧЕ ""Ошибка"" + | + | КОНЕЦ КАК РезультатВыполненияОбмена + |ИЗ + | РегистрСведений.[СостоянияОбменовДанными] КАК СостоянияОбменовДанными + |ГДЕ + | СостоянияОбменовДанными.УзелИнформационнойБазы = &УзелИнформационнойБазы + | И СостоянияОбменовДанными.ДействиеПриОбмене = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ЗагрузкаДанных) + |; + |// {ЗАПРОС №1} + |//////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВЫБОР + | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Выполнено) + | ТОГДА ""Успех"" + | + | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями) + | ТОГДА ""ВыполненоСПредупреждениями"" + | + | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято) + | ТОГДА ""Предупреждение_СообщениеОбменаБылоРанееПринято"" + | + | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Ошибка_ТранспортСообщения) + | ТОГДА ""Ошибка_ТранспортСообщения"" + | + | ИНАЧЕ ""Ошибка"" + | КОНЕЦ КАК РезультатВыполненияОбмена + | + |ИЗ + | РегистрСведений.[СостоянияОбменовДанными] КАК СостоянияОбменовДанными + |ГДЕ + | СостоянияОбменовДанными.УзелИнформационнойБазы = &УзелИнформационнойБазы + | И СостоянияОбменовДанными.ДействиеПриОбмене = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ВыгрузкаДанных) + |; + |"; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[СостоянияОбменовДанными]", "СостоянияОбменовДаннымиОбластейДанных"); + Иначе + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[СостоянияОбменовДанными]", "СостоянияОбменовДанными"); + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелИнформационнойБазы); + + МассивРезультатовЗапроса = Запрос.ВыполнитьПакет(); + + ВыборкаРезультатовЗагрузкиДанных = МассивРезультатовЗапроса[0].Выбрать(); + ВыборкаРезультатовВыгрузкиДанных = МассивРезультатовЗапроса[1].Выбрать(); + + Если ВыборкаРезультатовЗагрузкиДанных.Следующий() Тогда + + СостоянияОбменовДанными.РезультатЗагрузкиДанных = ВыборкаРезультатовЗагрузкиДанных.РезультатВыполненияОбмена; + + КонецЕсли; + + Если ВыборкаРезультатовВыгрузкиДанных.Следующий() Тогда + + СостоянияОбменовДанными.РезультатВыгрузкиДанных = ВыборкаРезультатовВыгрузкиДанных.РезультатВыполненияОбмена; + + КонецЕсли; + + СостоянияОбменовДанными.УзелИнформационнойБазы = УзелИнформационнойБазы; + + Возврат СостоянияОбменовДанными; +КонецФункции + +// Возвращает структуру с данными последнего обмена для заданного узла информационной базы и действия при обмене. +// +// Параметры: +// Нет. +// +// Возвращаемое значение: +// СостоянияОбменовДанными - Структура - структура с данными последнего обмена для заданного узла информационной базы. +// +Функция СостоянияОбменовДанными(Знач УзелИнформационнойБазы, ДействиеПриОбмене) Экспорт + + // Возвращаемое значение функции. + СостоянияОбменовДанными = Новый Структура; + СостоянияОбменовДанными.Вставить("ДатаНачала", Дата('00010101')); + СостоянияОбменовДанными.Вставить("ДатаОкончания", Дата('00010101')); + + ТекстЗапроса = " + |ВЫБРАТЬ + | ДатаНачала, + | ДатаОкончания + |ИЗ + | РегистрСведений.[СостоянияОбменовДанными] КАК СостоянияОбменовДанными + |ГДЕ + | СостоянияОбменовДанными.УзелИнформационнойБазы = &УзелИнформационнойБазы + | И СостоянияОбменовДанными.ДействиеПриОбмене = &ДействиеПриОбмене + |"; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[СостоянияОбменовДанными]", "СостоянияОбменовДаннымиОбластейДанных"); + Иначе + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[СостоянияОбменовДанными]", "СостоянияОбменовДанными"); + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелИнформационнойБазы); + Запрос.УстановитьПараметр("ДействиеПриОбмене", ДействиеПриОбмене); + + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Следующий() Тогда + + ЗаполнитьЗначенияСвойств(СостоянияОбменовДанными, Выборка); + + КонецЕсли; + + Возврат СостоянияОбменовДанными; + +КонецФункции + +#КонецОбласти + +#Область ИнициализацияСеанса + +// Получает массив всех планов обмена по которым выполняется обмен данными. +// Наличие обмена с каким либо планом обмена определяется по наличию у этого плана обмена узлов кроме предопределенного. +// +// Параметры: +// Нет. +// +// Возвращаемое значение: +// МассивПлановОбмена - Массив - массив строк (имен) всех планов обмена по которым выполняется обмен данными. +// +Функция ПолучитьИспользуемыеПланыОбмена() Экспорт + + // возвращаемое значение + МассивПлановОбмена = Новый Массив; + + // Список всех узлов в конфигурации. + СписокПлановОбмена = ОбменДаннымиПовтИсп.СписокПлановОбменаБСП(); + + Для Каждого Элемент Из СписокПлановОбмена Цикл + + ИмяПланаОбмена = Элемент.Значение; + + Если Не ПланОбменаНеСодержитУзлов(ИмяПланаОбмена) Тогда + + МассивПлановОбмена.Добавить(ИмяПланаОбмена); + + КонецЕсли; + + КонецЦикла; + + Возврат МассивПлановОбмена; + +КонецФункции + +// Получает таблицу правил регистрации объектов из информационной базы. +// +// Параметры: +// Нет. +// +// Возвращаемое значение: +// ПравилаРегистрацииОбъектов - ТаблицаЗначений - таблица общих правил регистрации объектов для МРО. +// +Функция ПолучитьПравилаРегистрацииОбъектов() Экспорт + + // Возвращаемое значение функции. + ПравилаРегистрацииОбъектов = ИнициализацияТаблицыПравилРегистрацииОбъектов(); + + ТекстЗапроса = " + |ВЫБРАТЬ + | ПравилаДляОбменаДанными.ПравилаЗачитанные КАК ПравилаЗачитанные + |ИЗ + | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными + |ГДЕ + | ПравилаДляОбменаДанными.ВидПравил = ЗНАЧЕНИЕ(Перечисление.ВидыПравилДляОбменаДанными.ПравилаРегистрацииОбъектов) + | И ПравилаДляОбменаДанными.ПравилаЗагружены + |"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + ЗаполнитьЗначенияСвойствДляТаблицыЗначенийПРО(ПравилаРегистрацииОбъектов, Выборка.ПравилаЗачитанные.Получить()); + + КонецЦикла; + + Возврат ПравилаРегистрацииОбъектов; + +КонецФункции + +// Получает таблицу правил выборочной регистрации объектов из информационной базы. +// +// Параметры: +// Нет. +// +// Возвращаемое значение: +// ПравилаВыборочнойРегистрацииОбъектов - ТаблицаЗначений - таблица общих правил выборочной регистрации объектов для +// МРО. +// +Функция ПолучитьПравилаВыборочнойРегистрацииОбъектов() Экспорт + + // Возвращаемое значение функции. + ПравилаВыборочнойРегистрацииОбъектов = ИнициализацияТаблицыПравилВыборочнойРегистрацииОбъектов(); + + ТекстЗапроса = " + |ВЫБРАТЬ + | ПравилаДляОбменаДанными.ПравилаЗачитанные КАК ПравилаЗачитанные + |ИЗ + | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными + |ГДЕ + | ПравилаДляОбменаДанными.ВидПравил = ЗНАЧЕНИЕ(Перечисление.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов) + | И ПравилаДляОбменаДанными.ИспользоватьФильтрВыборочнойРегистрацииОбъектов + | И ПравилаДляОбменаДанными.ПравилаЗагружены + |"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + СтруктураПравилОбмена = Выборка.ПравилаЗачитанные.Получить(); + + ЗаполнитьЗначенияСвойствДляТаблицыЗначений(ПравилаВыборочнойРегистрацииОбъектов, СтруктураПравилОбмена["ПравилаВыборочнойРегистрацииОбъектов"]); + + КонецЦикла; + + Возврат ПравилаВыборочнойРегистрацииОбъектов; + +КонецФункции + +Функция ИнициализацияТаблицыПравилРегистрацииОбъектов() Экспорт + + // Возвращаемое значение функции. + Правила = Новый ТаблицаЗначений; + + Колонки = Правила.Колонки; + + Колонки.Добавить("ОбъектМетаданныхИмя", Новый ОписаниеТипов("Строка")); + Колонки.Добавить("ИмяПланаОбмена", Новый ОписаниеТипов("Строка")); + + Колонки.Добавить("ИмяРеквизитаФлага", Новый ОписаниеТипов("Строка")); + + Колонки.Добавить("ТекстЗапроса", Новый ОписаниеТипов("Строка")); + Колонки.Добавить("СвойстваОбъекта", Новый ОписаниеТипов("Структура")); + + Колонки.Добавить("СвойстваОбъектаСтрокой", Новый ОписаниеТипов("Строка")); + + // Признаки того, что правила пустые. + Колонки.Добавить("ПравилоПоСвойствамОбъектаПустое", Новый ОписаниеТипов("Булево")); + + // обработчики событий + Колонки.Добавить("ПередОбработкой", Новый ОписаниеТипов("Строка")); + Колонки.Добавить("ПриОбработке", Новый ОписаниеТипов("Строка")); + Колонки.Добавить("ПриОбработкеДополнительный", Новый ОписаниеТипов("Строка")); + Колонки.Добавить("ПослеОбработки", Новый ОписаниеТипов("Строка")); + + Колонки.Добавить("ЕстьОбработчикПередОбработкой", Новый ОписаниеТипов("Булево")); + Колонки.Добавить("ЕстьОбработчикПриОбработке", Новый ОписаниеТипов("Булево")); + Колонки.Добавить("ЕстьОбработчикПриОбработкеДополнительный", Новый ОписаниеТипов("Булево")); + Колонки.Добавить("ЕстьОбработчикПослеОбработки", Новый ОписаниеТипов("Булево")); + + Колонки.Добавить("ОтборПоСвойствамОбъекта", Новый ОписаниеТипов("ДеревоЗначений")); + + // Поле для оперативного хранения данных из объекта или ссылки. + Колонки.Добавить("ОтборПоСвойствам", Новый ОписаниеТипов("ДеревоЗначений")); + + // добавляем индекс + Правила.Индексы.Добавить("ИмяПланаОбмена, ОбъектМетаданныхИмя"); + + Возврат Правила; + +КонецФункции + +Функция ИнициализацияТаблицыПравилВыборочнойРегистрацииОбъектов() Экспорт + + // Возвращаемое значение функции. + Правила = Новый ТаблицаЗначений; + + Колонки = Правила.Колонки; + + Колонки.Добавить("Порядок", Новый ОписаниеТипов("Число")); + Колонки.Добавить("ИмяОбъекта", Новый ОписаниеТипов("Строка")); + Колонки.Добавить("ИмяПланаОбмена", Новый ОписаниеТипов("Строка")); + Колонки.Добавить("ИмяТабличнойЧасти", Новый ОписаниеТипов("Строка")); + Колонки.Добавить("РеквизитыРегистрации", Новый ОписаниеТипов("Строка")); + Колонки.Добавить("СтруктураРеквизитовРегистрации", Новый ОписаниеТипов("Структура")); + + // добавляем индекс + Правила.Индексы.Добавить("ИмяПланаОбмена, ИмяОбъекта"); + + Возврат Правила; + +КонецФункции + +Функция ПланОбменаНеСодержитУзлов(Знач ИмяПланаОбмена) + + ТекстЗапроса = " + |ВЫБРАТЬ ПЕРВЫЕ 1 1 + |ИЗ + | ПланОбмена." + ИмяПланаОбмена + " КАК ПланОбмена + |ГДЕ + | НЕ ПланОбмена.ЭтотУзел + |"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + + Возврат Запрос.Выполнить().Пустой() + +КонецФункции + +Процедура ЗаполнитьЗначенияСвойствДляТаблицыЗначенийПРО(ТаблицаПриемник, ТаблицаИсточник) + + Для Каждого СтрокаИсточника Из ТаблицаИсточник Цикл + + ЗаполнитьЗначенияСвойств(ТаблицаПриемник.Добавить(), СтрокаИсточника); + + КонецЦикла; + +КонецПроцедуры + +Процедура ЗаполнитьЗначенияСвойствДляТаблицыЗначений(ТаблицаПриемник, ТаблицаИсточник) + + Для Каждого СтрокаИсточника Из ТаблицаИсточник Цикл + + ЗаполнитьЗначенияСвойств(ТаблицаПриемник.Добавить(), СтрокаИсточника); + + КонецЦикла; + +КонецПроцедуры + +Функция ОписаниеПравилСинхронизацииДанных(Знач УзелИнформационнойБазы) Экспорт + + ВерсияКорреспондента = ВерсияКорреспондента(УзелИнформационнойБазы); + + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); + + Настройка = ЗначенияНастроекОтборовНаУзле(УзелИнформационнойБазы, ВерсияКорреспондента); + + Возврат ОписаниеОграниченийПередачиДанных(ИмяПланаОбмена, Настройка, ВерсияКорреспондента, СохраненныйВариантНастройкиУзлаПланаОбмена(УзелИнформационнойБазы)); + +КонецФункции + +Функция ЗначенияНастроекОтборовНаУзле(Знач УзелИнформационнойБазы, Знач ВерсияКорреспондента) + + Результат = Новый Структура; + + УзелИнформационнойБазыОбъект = УзелИнформационнойБазы.ПолучитьОбъект(); + + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); + + НастройкаОтборовНаУзле = НастройкаОтборовНаУзле(ИмяПланаОбмена, ВерсияКорреспондента, , СохраненныйВариантНастройкиУзлаПланаОбмена(УзелИнформационнойБазы)); + + Для Каждого Настройка Из НастройкаОтборовНаУзле Цикл + + Если ТипЗнч(Настройка.Значение) = Тип("Структура") Тогда + + ТабличнаяЧасть = Новый Структура; + + Для Каждого Колонка Из Настройка.Значение Цикл + + ТабличнаяЧасть.Вставить(Колонка.Ключ, УзелИнформационнойБазыОбъект[Настройка.Ключ].ВыгрузитьКолонку(Колонка.Ключ)); + + КонецЦикла; + + Результат.Вставить(Настройка.Ключ, ТабличнаяЧасть); + + Иначе + + Результат.Вставить(Настройка.Ключ, УзелИнформационнойБазыОбъект[Настройка.Ключ]); + + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Процедура УстановитьРежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском(Знач Свойство, Знач ВключитьРежим) Экспорт + + // Перед вызовом требуется установить привилегированный режим. + + Если ЭтоПодчиненныйУзелРИБ() Тогда + + НоваяСтруктура = Новый Структура(ПараметрыСеанса.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском); + Если ВключитьРежим Тогда + Если НЕ НоваяСтруктура.Свойство(Свойство) Тогда + НоваяСтруктура.Вставить(Свойство); + КонецЕсли; + Иначе + Если НоваяСтруктура.Свойство(Свойство) Тогда + НоваяСтруктура.Удалить(Свойство); + КонецЕсли; + КонецЕсли; + + ПараметрыСеанса.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском = + Новый ФиксированнаяСтруктура(НоваяСтруктура); + Иначе + + ПараметрыСеанса.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском = Новый ФиксированнаяСтруктура; + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ИнициализацияСтруктурыНастроекОбмена + +// Выполняет инициализацию подсистемы обмена данными для выполнения процесса обмена. +// +// Параметры: +// +// Возвращаемое значение: +// СтруктураНастроекОбмена - Структура - структура со всеми необходимыми данными и объектами для выполнения обмена. +// +Функция ПолучитьСтруктуруНастроекОбменаДляУзлаИнформационнойБазы( + УзелИнформационнойБазы, + ДействиеПриОбмене, + ВидТранспортаСообщенийОбмена, + ИспользоватьНастройкиТранспорта = Истина) Экспорт + + // Возвращаемое значение функции. + СтруктураНастроекОбмена = СтруктураНастроекОбменаБазовая(); + + СтруктураНастроекОбмена.УзелИнформационнойБазы = УзелИнформационнойБазы; + СтруктураНастроекОбмена.ДействиеПриОбмене = ДействиеПриОбмене; + СтруктураНастроекОбмена.ВидТранспортаОбмена = ВидТранспортаСообщенийОбмена; + СтруктураНастроекОбмена.ЭтоОбменВРИБ = ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(УзелИнформационнойБазы); + + ВыполнитьИнициализациюСтруктурыНастроекОбменаДляУзлаИнформационнойБазы(СтруктураНастроекОбмена, ИспользоватьНастройкиТранспорта); + + УстановитьНастройкиРежимаОтладкиДляСтруктуры(СтруктураНастроекОбмена); + + // Проверяем структуру настроек на валидность значений для выполнения обмена. Ошибки фиксируем в ЖР. + ВыполнитьПроверкуСтруктурыОбменаНаВалидность(СтруктураНастроекОбмена, ИспользоватьНастройкиТранспорта); + + // Если настройки содержат ошибки, то выходим. + Если СтруктураНастроекОбмена.Отказ Тогда + Возврат СтруктураНастроекОбмена; + КонецЕсли; + + Если ИспользоватьНастройкиТранспорта Тогда + + // Инициализируем обработку транспорта сообщений обмена. + ВыполнитьИнициализациюОбработкиТранспортаСообщенийОбмена(СтруктураНастроекОбмена); + + КонецЕсли; + + // Инициализируем обработку обмена данными. + Если СтруктураНастроекОбмена.ЭтоОбменВРИБ Тогда + + ВыполнитьИнициализациюОбработкиОбмена(СтруктураНастроекОбмена); + + ИначеЕсли СтруктураНастроекОбмена.ОбменПоПравиламКонвертацииОбъектов Тогда + + ВыполнитьИнициализациюОбработкиОбменаПоПравиламКонвертации(СтруктураНастроекОбмена); + + КонецЕсли; + + Возврат СтруктураНастроекОбмена; +КонецФункции + +Функция ПолучитьСтруктуруНастроекОбменаДляВнешнегоСоединения(УзелИнформационнойБазы, ДействиеПриОбмене, КоличествоЭлементовВТранзакции) + + // Возвращаемое значение функции. + СтруктураНастроекОбмена = СтруктураНастроекОбменаБазовая(); + + СтруктураНастроекОбмена.УзелИнформационнойБазы = УзелИнформационнойБазы; + СтруктураНастроекОбмена.ДействиеПриОбмене = ДействиеПриОбмене; + СтруктураНастроекОбмена.ЭтоОбменВРИБ = ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(УзелИнформационнойБазы); + + СтруктураСвойств = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СтруктураНастроекОбмена.УзелИнформационнойБазы, "Код, Наименование"); + + СтруктураНастроекОбмена.УзелИнформационнойБазыКод = СтруктураСвойств.Код; + СтруктураНастроекОбмена.УзелИнформационнойБазыНаименование = СтруктураСвойств.Наименование; + + СтруктураНастроекОбмена.НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспорта(СтруктураНастроекОбмена.УзелИнформационнойБазы); + + Если КоличествоЭлементовВТранзакции = Неопределено Тогда + КоличествоЭлементовВТранзакции = КоличествоЭлементовВТранзакцииВыполняемогоДействия(ДействиеПриОбмене); + КонецЕсли; + + СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции = КоличествоЭлементовВТранзакции; + + // ВЫЧИСЛЯЕМЫЕ ЗНАЧЕНИЯ + СтруктураНастроекОбмена.ПроизводитьЗагрузкуДанных = (СтруктураНастроекОбмена.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + СтруктураНастроекОбмена.ПроизводитьВыгрузкуДанных = (СтруктураНастроекОбмена.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных); + + СтруктураНастроекОбмена.ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(СтруктураНастроекОбмена.УзелИнформационнойБазы); + + СтруктураНастроекОбмена.ТекущийУзелПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(СтруктураНастроекОбмена.ИмяПланаОбмена); + СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтруктураНастроекОбмена.ТекущийУзелПланаОбмена, "Код"); + + // Получаем ключ сообщения для ЖР. + СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = ПолучитьКлючСообщенияЖурналаРегистрации(СтруктураНастроекОбмена.УзелИнформационнойБазы, СтруктураНастроекОбмена.ДействиеПриОбмене); + + СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM; + + УстановитьНастройкиРежимаОтладкиДляСтруктуры(СтруктураНастроекОбмена); + + // Проверяем структуру настроек на валидность значений для выполнения обмена. Ошибки фиксируем в ЖР. + ВыполнитьПроверкуСтруктурыОбменаНаВалидность(СтруктураНастроекОбмена); + + // Если настройки содержат ошибки, то выходим. + Если СтруктураНастроекОбмена.Отказ Тогда + Возврат СтруктураНастроекОбмена; + КонецЕсли; + + // Инициализируем обработку обмена данными. + ВыполнитьИнициализациюОбработкиОбменаПоПравиламКонвертации(СтруктураНастроекОбмена); + + Возврат СтруктураНастроекОбмена; +КонецФункции + +// Выполняет инициализацию подсистемы обмена данными для выполнения процесса обмена. +// +// Параметры: +// +// Возвращаемое значение: +// СтруктураНастроекОбмена - Структура - структура со всеми необходимыми данными и объектами для выполнения обмена. +// +Функция ПолучитьСтруктуруНастроекОбмена(НастройкаВыполненияОбмена, НомерСтроки) Экспорт + + // Возвращаемое значение функции. + СтруктураНастроекОбмена = СтруктураНастроекОбменаБазовая(); + + ВыполнитьИнициализациюСтруктурыНастроекОбмена(СтруктураНастроекОбмена, НастройкаВыполненияОбмена, НомерСтроки); + + Если СтруктураНастроекОбмена.Отказ Тогда + Возврат СтруктураНастроекОбмена; + КонецЕсли; + + УстановитьНастройкиРежимаОтладкиДляСтруктуры(СтруктураНастроекОбмена); + + // Проверяем структуру настроек на валидность значений для выполнения обмена. Ошибки фиксируем в ЖР. + ВыполнитьПроверкуСтруктурыОбменаНаВалидность(СтруктураНастроекОбмена); + + // Если настройки содержат ошибки, то выходим. + Если СтруктураНастроекОбмена.Отказ Тогда + Возврат СтруктураНастроекОбмена; + КонецЕсли; + + // Инициализируем обработку транспорта сообщений обмена. + ВыполнитьИнициализациюОбработкиТранспортаСообщенийОбмена(СтруктураНастроекОбмена); + + // Инициализируем обработку обмена данными. + Если СтруктураНастроекОбмена.ЭтоОбменВРИБ Тогда + + ВыполнитьИнициализациюОбработкиОбмена(СтруктураНастроекОбмена); + + ИначеЕсли СтруктураНастроекОбмена.ОбменПоПравиламКонвертацииОбъектов Тогда + + ВыполнитьИнициализациюОбработкиОбменаПоПравиламКонвертации(СтруктураНастроекОбмена); + + КонецЕсли; + + Возврат СтруктураНастроекОбмена; +КонецФункции + +// Получает структуру настроек транспорта для выполнения обмена данными. +// +Функция ПолучитьСтруктуруНастроекТранспорта(УзелИнформационнойБазы, ВидТранспортаСообщенийОбмена) Экспорт + + // Возвращаемое значение функции. + СтруктураНастроекОбмена = СтруктураНастроекОбменаБазовая(); + + СтруктураНастроекОбмена.УзелИнформационнойБазы = УзелИнформационнойБазы; + СтруктураНастроекОбмена.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных; + СтруктураНастроекОбмена.ВидТранспортаОбмена = ВидТранспортаСообщенийОбмена; + + ВыполнитьИнициализациюСтруктурыНастроекОбменаДляУзлаИнформационнойБазы(СтруктураНастроекОбмена, Истина); + + // Проверяем структуру настроек на валидность значений для выполнения обмена. Ошибки фиксируем в ЖР. + ВыполнитьПроверкуСтруктурыОбменаНаВалидность(СтруктураНастроекОбмена); + + // Если настройки содержат ошибки, то выходим. + Если СтруктураНастроекОбмена.Отказ Тогда + Возврат СтруктураНастроекОбмена; + КонецЕсли; + + // Инициализируем обработку транспорта сообщений обмена. + ВыполнитьИнициализациюОбработкиТранспортаСообщенийОбмена(СтруктураНастроекОбмена); + + Возврат СтруктураНастроекОбмена; +КонецФункции + +Функция СтруктураНастроекОбменаДляСеансаИнтерактивнойЗагрузки(Знач УзелИнформационнойБазы, Знач ИмяФайлаСообщенияОбмена) Экспорт + + Возврат ОбменДаннымиПовтИсп.СтруктураНастроекОбменаДляСеансаИнтерактивнойЗагрузки(УзелИнформационнойБазы, ИмяФайлаСообщенияОбмена); + +КонецФункции + +Процедура ВыполнитьИнициализациюСтруктурыНастроекОбмена(СтруктураНастроекОбмена, НастройкаВыполненияОбмена, НомерСтроки) + + ТекстЗапроса = " + |ВЫБРАТЬ + | НастройкиВыполненияОбменаНастройкиОбмена.УзелИнформационнойБазы КАК УзелИнформационнойБазы, + | НастройкиВыполненияОбменаНастройкиОбмена.УзелИнформационнойБазы.Код КАК УзелИнформационнойБазыКод, + | НастройкиВыполненияОбменаНастройкиОбмена.ВидТранспортаОбмена КАК ВидТранспортаОбмена, + | НастройкиВыполненияОбменаНастройкиОбмена.ВыполняемоеДействие КАК ДействиеПриОбмене, + | НастройкиВыполненияОбменаНастройкиОбмена.Ссылка КАК НастройкаВыполненияОбмена, + | НастройкиВыполненияОбменаНастройкиОбмена.Ссылка.Наименование КАК НастройкаВыполненияОбменаНаименование, + | ВЫБОР + | КОГДА НастройкиВыполненияОбменаНастройкиОбмена.ВыполняемоеДействие = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ЗагрузкаДанных) ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ПроизводитьЗагрузкуДанных, + | ВЫБОР + | КОГДА НастройкиВыполненияОбменаНастройкиОбмена.ВыполняемоеДействие = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ВыгрузкаДанных) ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ПроизводитьВыгрузкуДанных + |ИЗ + | Справочник.СценарииОбменовДанными.НастройкиОбмена КАК НастройкиВыполненияОбменаНастройкиОбмена + |ГДЕ + | НастройкиВыполненияОбменаНастройкиОбмена.Ссылка = &НастройкаВыполненияОбмена + | И НастройкиВыполненияОбменаНастройкиОбмена.НомерСтроки = &НомерСтроки + |"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("НастройкаВыполненияОбмена", НастройкаВыполненияОбмена); + Запрос.УстановитьПараметр("НомерСтроки", НомерСтроки); + + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + // Заполняем значения свойств структуры. + ЗаполнитьЗначенияСвойств(СтруктураНастроекОбмена, Выборка); + + СтруктураНастроекОбмена.ЭтоОбменВРИБ = ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(СтруктураНастроекОбмена.УзелИнформационнойБазы); + + СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = НСтр("ru = 'Обмен данными'"); + + // Выполняем проверку задания основных полей структуры настроек обмена. + ВыполнитьПроверкуОсновныхПолейСтруктурыНастроекОбмена(СтруктураНастроекОбмена); + + Если СтруктураНастроекОбмена.Отказ Тогда + Возврат; + КонецЕсли; + + // + СтруктураНастроекОбмена.ИмяПланаОбмена = СтруктураНастроекОбмена.УзелИнформационнойБазы.Метаданные().Имя; + СтруктураНастроекОбмена.ОбменПоПравиламКонвертацииОбъектов = ОбменДаннымиПовтИсп.ЭтоУзелУниверсальногоОбменаДанными(СтруктураНастроекОбмена.УзелИнформационнойБазы); + + СтруктураНастроекОбмена.ТекущийУзелПланаОбмена = ПланыОбмена[СтруктураНастроекОбмена.ИмяПланаОбмена].ЭтотУзел(); + СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод = СтруктураНастроекОбмена.ТекущийУзелПланаОбмена.Код; + + СтруктураНастроекОбмена.ИмяОбработкиТранспортаСообщенийОбмена = ИмяОбработкиТранспортаСообщенийОбмена(СтруктураНастроекОбмена.ВидТранспортаОбмена); + + // Получаем ключ сообщения для ЖР. + СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = ПолучитьКлючСообщенияЖурналаРегистрации(СтруктураНастроекОбмена.УзелИнформационнойБазы, СтруктураНастроекОбмена.ДействиеПриОбмене); + + // + СтруктураНастроекОбмена.НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспорта(СтруктураНастроекОбмена.УзелИнформационнойБазы, СтруктураНастроекОбмена.ВидТранспортаОбмена); + + СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции = КоличествоЭлементовВТранзакцииВыполняемогоДействия(СтруктураНастроекОбмена.ДействиеПриОбмене); + +КонецПроцедуры + +Процедура ВыполнитьИнициализациюСтруктурыНастроекОбменаДляУзлаИнформационнойБазы( + СтруктураНастроекОбмена, + ИспользоватьНастройкиТранспорта) + + СтруктураСвойств = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СтруктураНастроекОбмена.УзелИнформационнойБазы, "Код, Наименование"); + + СтруктураНастроекОбмена.УзелИнформационнойБазыКод = СтруктураСвойств.Код; + СтруктураНастроекОбмена.УзелИнформационнойБазыНаименование = СтруктураСвойств.Наименование; + + // Получаем настройки транспорта обмена. + СтруктураНастроекОбмена.НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспорта(СтруктураНастроекОбмена.УзелИнформационнойБазы); + + Если СтруктураНастроекОбмена.НастройкиТранспорта <> Неопределено Тогда + + Если ИспользоватьНастройкиТранспорта Тогда + + // Если не указан вид транспорта, то используем значение по умолчанию. + Если СтруктураНастроекОбмена.ВидТранспортаОбмена = Неопределено Тогда + СтруктураНастроекОбмена.ВидТранспортаОбмена = СтруктураНастроекОбмена.НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию; + КонецЕсли; + + // Если вид транспорта не задан, то используем транспорт FILE. + Если Не ЗначениеЗаполнено(СтруктураНастроекОбмена.ВидТранспортаОбмена) Тогда + + СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE; + + КонецЕсли; + + СтруктураНастроекОбмена.ИмяОбработкиТранспортаСообщенийОбмена = ИмяОбработкиТранспортаСообщенийОбмена(СтруктураНастроекОбмена.ВидТранспортаОбмена); + + КонецЕсли; + + СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции = КоличествоЭлементовВТранзакцииВыполняемогоДействия(СтруктураНастроекОбмена.ДействиеПриОбмене); + + Если СтруктураНастроекОбмена.НастройкиТранспорта.Свойство("WSИспользоватьПередачуБольшогоОбъемаДанных") Тогда + СтруктураНастроекОбмена.ИспользоватьПередачуБольшогоОбъемаДанных = СтруктураНастроекОбмена.НастройкиТранспорта.WSИспользоватьПередачуБольшогоОбъемаДанных; + КонецЕсли; + + КонецЕсли; + + // ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ + СтруктураНастроекОбмена.НастройкаВыполненияОбмена = Неопределено; + СтруктураНастроекОбмена.НастройкаВыполненияОбменаНаименование = ""; + + // ВЫЧИСЛЯЕМЫЕ ЗНАЧЕНИЯ + СтруктураНастроекОбмена.ПроизводитьЗагрузкуДанных = (СтруктураНастроекОбмена.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + СтруктураНастроекОбмена.ПроизводитьВыгрузкуДанных = (СтруктураНастроекОбмена.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных); + + СтруктураНастроекОбмена.ИмяПланаОбмена = СтруктураНастроекОбмена.УзелИнформационнойБазы.Метаданные().Имя; + СтруктураНастроекОбмена.ОбменПоПравиламКонвертацииОбъектов = ОбменДаннымиПовтИсп.ЭтоУзелУниверсальногоОбменаДанными(СтруктураНастроекОбмена.УзелИнформационнойБазы); + + СтруктураНастроекОбмена.ТекущийУзелПланаОбмена = ПланыОбмена[СтруктураНастроекОбмена.ИмяПланаОбмена].ЭтотУзел(); + СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод = СтруктураНастроекОбмена.ТекущийУзелПланаОбмена.Код; + + // Получаем ключ сообщения для ЖР. + СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = ПолучитьКлючСообщенияЖурналаРегистрации(СтруктураНастроекОбмена.УзелИнформационнойБазы, СтруктураНастроекОбмена.ДействиеПриОбмене); + +КонецПроцедуры + +Функция СтруктураНастроекОбменаБазовая() + + СтруктураНастроекОбмена = Новый Структура; + + // Структура настроек по полям запроса. + + СтруктураНастроекОбмена.Вставить("ДатаНачала"); + СтруктураНастроекОбмена.Вставить("ДатаОкончания"); + + СтруктураНастроекОбмена.Вставить("НомерСтроки"); + СтруктураНастроекОбмена.Вставить("НастройкаВыполненияОбмена"); + СтруктураНастроекОбмена.Вставить("НастройкаВыполненияОбменаНаименование"); + СтруктураНастроекОбмена.Вставить("УзелИнформационнойБазы"); + СтруктураНастроекОбмена.Вставить("УзелИнформационнойБазыКод", ""); + СтруктураНастроекОбмена.Вставить("УзелИнформационнойБазыНаименование", ""); + СтруктураНастроекОбмена.Вставить("ВидТранспортаОбмена"); + СтруктураНастроекОбмена.Вставить("ДействиеПриОбмене"); + СтруктураНастроекОбмена.Вставить("КоличествоЭлементовВТранзакции", 1); // На каждый элемент отдельная транзакция. + СтруктураНастроекОбмена.Вставить("ПроизводитьЗагрузкуДанных", Ложь); + СтруктураНастроекОбмена.Вставить("ПроизводитьВыгрузкуДанных", Ложь); + СтруктураНастроекОбмена.Вставить("ИспользоватьПередачуБольшогоОбъемаДанных", Ложь); + + // Структура настроек дополнительная. + СтруктураНастроекОбмена.Вставить("Отказ", Ложь); + СтруктураНастроекОбмена.Вставить("ЭтоОбменВРИБ", Ложь); + + СтруктураНастроекОбмена.Вставить("ОбработкаОбменаДанными"); + СтруктураНастроекОбмена.Вставить("ОбработкаТранспортаСообщенийОбмена"); + + СтруктураНастроекОбмена.Вставить("ИмяПланаОбмена"); + СтруктураНастроекОбмена.Вставить("ТекущийУзелПланаОбмена"); + СтруктураНастроекОбмена.Вставить("ТекущийУзелПланаОбменаКод"); + + СтруктураНастроекОбмена.Вставить("ОбменПоПравиламКонвертацииОбъектов", Ложь); + + СтруктураНастроекОбмена.Вставить("ИмяОбработкиТранспортаСообщенийОбмена"); + + СтруктураНастроекОбмена.Вставить("КлючСообщенияЖурналаРегистрации"); + + СтруктураНастроекОбмена.Вставить("НастройкиТранспорта"); + + СтруктураНастроекОбмена.Вставить("ПравилаКонвертацииОбъектов"); + СтруктураНастроекОбмена.Вставить("ПравилаЗагружены", Ложь); + + СтруктураНастроекОбмена.Вставить("ОтладкаОбработчиковВыгрузки ", Ложь); + СтруктураНастроекОбмена.Вставить("ОтладкаОбработчиковЗагрузки", Ложь); + СтруктураНастроекОбмена.Вставить("ИмяФайлаВнешнейОбработкиОтладкиВыгрузки", ""); + СтруктураНастроекОбмена.Вставить("ИмяФайлаВнешнейОбработкиОтладкиЗагрузки", ""); + СтруктураНастроекОбмена.Вставить("РежимПротоколированияОбменаДанными", Ложь); + СтруктураНастроекОбмена.Вставить("ИмяФайлаПротоколаОбмена", ""); + СтруктураНастроекОбмена.Вставить("ПродолжитьПриОшибке", Ложь); + + // Структура для регистрации событий в ЖР. + СтруктураНастроекОбмена.Вставить("РезультатВыполненияОбмена"); + СтруктураНастроекОбмена.Вставить("ДействиеПриОбмене"); + СтруктураНастроекОбмена.Вставить("КоличествоОбъектовОбработано", 0); + СтруктураНастроекОбмена.Вставить("СообщениеПриОбмене", ""); + СтруктураНастроекОбмена.Вставить("СтрокаСообщенияОбОшибке", ""); + + Возврат СтруктураНастроекОбмена; +КонецФункции + +Процедура ВыполнитьПроверкуОсновныхПолейСтруктурыНастроекОбмена(СтруктураНастроекОбмена) + + Если НЕ ЗначениеЗаполнено(СтруктураНастроекОбмена.УзелИнформационнойБазы) Тогда + + // Узел информационной базы не должен быть пустым. + СтрокаСообщенияОбОшибке = НСтр( + "ru = 'Не задан узел информационной базы с которым нужно производить обмен информацией. Обмен отменен.'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + + ИначеЕсли НЕ ЗначениеЗаполнено(СтруктураНастроекОбмена.ВидТранспортаОбмена) Тогда + + СтрокаСообщенияОбОшибке = НСтр("ru = 'Не задан вид транспорта обмена. Обмен отменен.'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + + ИначеЕсли НЕ ЗначениеЗаполнено(СтруктураНастроекОбмена.ДействиеПриОбмене) Тогда + + СтрокаСообщенияОбОшибке = НСтр("ru = 'Не указано выполняемое действие (выгрузка / загрузка). Обмен отменен.'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьПроверкуСтруктурыОбменаНаВалидность(СтруктураНастроекОбмена, ИспользоватьНастройкиТранспорта = Истина) + + Если НЕ ЗначениеЗаполнено(СтруктураНастроекОбмена.УзелИнформационнойБазы) Тогда + + // Узел информационной базы не должен быть пустым. + СтрокаСообщенияОбОшибке = НСтр( + "ru = 'Не задан узел информационной базы с которым нужно производить обмен информацией. Обмен отменен.'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + + ИначеЕсли ИспользоватьНастройкиТранспорта И НЕ ЗначениеЗаполнено(СтруктураНастроекОбмена.ВидТранспортаОбмена) Тогда + + СтрокаСообщенияОбОшибке = НСтр("ru = 'Не задан вид транспорта обмена. Обмен отменен.'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + + ИначеЕсли НЕ ЗначениеЗаполнено(СтруктураНастроекОбмена.ДействиеПриОбмене) Тогда + + СтрокаСообщенияОбОшибке = НСтр("ru = 'Не указано выполняемое действие (выгрузка / загрузка). Обмен отменен.'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + + ИначеЕсли СтруктураНастроекОбмена.УзелИнформационнойБазы.ПометкаУдаления Тогда + + // Узел информационной базы не должен быть помечен на удаление. + СтрокаСообщенияОбОшибке = НСтр("ru = 'Узел информационной базы помечен на удаление. Обмен отменен.'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + + ИначеЕсли СтруктураНастроекОбмена.УзелИнформационнойБазы = СтруктураНастроекОбмена.ТекущийУзелПланаОбмена Тогда + + // Сами с собой не обмениваемся. + СтрокаСообщенияОбОшибке = НСтр( + "ru = 'Нельзя организовать обмен данными с текущим узлом информационной базы. Обмен отменен.'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + + ИначеЕсли ПустаяСтрока(СтруктураНастроекОбмена.УзелИнформационнойБазыКод) + ИЛИ ПустаяСтрока(СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод) Тогда + + // У узлов участвующих в обмене должен быть не пустой код. + СтрокаСообщенияОбОшибке = НСтр("ru = 'Один из узлов обмена имеет пустой код. Обмен отменен.'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + + ИначеЕсли СтруктураНастроекОбмена.ОтладкаОбработчиковВыгрузки Тогда + + ФайлОбработкиВыгрузки = Новый Файл(СтруктураНастроекОбмена.ИмяФайлаВнешнейОбработкиОтладкиВыгрузки); + + Если Не ФайлОбработкиВыгрузки.Существует() Тогда + + СтрокаСообщенияОбОшибке = НСтр("ru = 'Файл внешней обработки для отладки выгрузки не существует. Обмен отменен.'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + + КонецЕсли; + + ИначеЕсли СтруктураНастроекОбмена.ОтладкаОбработчиковЗагрузки Тогда + + ФайлОбработкиЗагрузки = Новый Файл(СтруктураНастроекОбмена.ИмяФайлаВнешнейОбработкиОтладкиЗагрузки); + + Если Не ФайлОбработкиЗагрузки.Существует() Тогда + + СтрокаСообщенияОбОшибке = НСтр("ru = 'Файл внешней обработки для отладки загрузки не существует. Обмен отменен.'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьИнициализациюОбработкиОбмена(СтруктураНастроекОбмена) + + // Если настройки содержат ошибки, то не производим инициализацию. + Если СтруктураНастроекОбмена.Отказ Тогда + Возврат; + КонецЕсли; + + // создание + ОбработкаОбменаДанными = Обработки.КонвертацияОбъектовРаспределенныхИнформационныхБаз.Создать(); + + // инициализация свойств + ОбработкаОбменаДанными.УзелИнформационнойБазы = СтруктураНастроекОбмена.УзелИнформационнойБазы; + ОбработкаОбменаДанными.КоличествоЭлементовВТранзакции = СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции; + ОбработкаОбменаДанными.КлючСообщенияЖурналаРегистрации = СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации; + + СтруктураНастроекОбмена.Вставить("ОбработкаОбменаДанными", ОбработкаОбменаДанными); + +КонецПроцедуры + +Процедура ВыполнитьИнициализациюОбработкиОбменаПоПравиламКонвертации(СтруктураНастроекОбмена) + + Перем ОбработкаОбменаДанными; + + // Если настройки содержат ошибки, то не производим инициализацию. + Если СтруктураНастроекОбмена.Отказ Тогда + Возврат; + КонецЕсли; + + Если СтруктураНастроекОбмена.ПроизводитьВыгрузкуДанных Тогда + + ОбработкаОбменаДанными = ПолучитьОбработкуОбменаДаннымиДляВыгрузки(СтруктураНастроекОбмена); + + ИначеЕсли СтруктураНастроекОбмена.ПроизводитьЗагрузкуДанных Тогда + + ОбработкаОбменаДанными = ПолучитьОбработкуОбменаДаннымиДляЗагрузки(СтруктураНастроекОбмена); + + КонецЕсли; + + СтруктураНастроекОбмена.Вставить("ОбработкаОбменаДанными", ОбработкаОбменаДанными); + +КонецПроцедуры + +Процедура ВыполнитьИнициализациюОбработкиТранспортаСообщенийОбмена(СтруктураНастроекОбмена) + + // Создаем обработку транспорта. + ОбработкаТранспортаСообщенийОбмена = Обработки[СтруктураНастроекОбмена.ИмяОбработкиТранспортаСообщенийОбмена].Создать(); + + ЭтоИсходящееСообщение = СтруктураНастроекОбмена.ПроизводитьВыгрузкуДанных; + + // Заполняем общие реквизиты, одинаковые для всех обработок транспорта. + ОбработкаТранспортаСообщенийОбмена.ШаблонИмениФайлаСообщения = ПолучитьШаблонИмениФайлаСообщения(СтруктураНастроекОбмена.ТекущийУзелПланаОбмена, СтруктураНастроекОбмена.УзелИнформационнойБазы, ЭтоИсходящееСообщение); + + // Заполняем настойки транспорта, различные для каждой обработки транспорта. + ЗаполнитьЗначенияСвойств(ОбработкаТранспортаСообщенийОбмена, СтруктураНастроекОбмена.НастройкиТранспорта); + + // Инициализируем транспорт + ОбработкаТранспортаСообщенийОбмена.Инициализация(); + + СтруктураНастроекОбмена.Вставить("ОбработкаТранспортаСообщенийОбмена", ОбработкаТранспортаСообщенийОбмена); + +КонецПроцедуры + +Функция ПолучитьОбработкуОбменаДаннымиДляВыгрузки(СтруктураНастроекОбмена) + + МенеджерОбработки = ?(ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(СтруктураНастроекОбмена.УзелИнформационнойБазы), + Обработки.КонвертацияОбъектовXDTO, + Обработки.КонвертацияОбъектовИнформационныхБаз); + + ОбработкаОбменаДанными = МенеджерОбработки.Создать(); + + ОбработкаОбменаДанными.РежимОбмена = "Выгрузка"; + + // Если обработка поддерживает механизм правил конвертации. + Если ОбработкаОбменаДанными.Метаданные().Реквизиты.Найти("ИмяФайлаПравилОбмена") <> Неопределено Тогда + УстановитьПравилаОбменаВыгрузкиДанных(ОбработкаОбменаДанными, СтруктураНастроекОбмена); + ОбработкаОбменаДанными.НеВыгружатьОбъектыПоСсылкам = Истина; + ОбработкаОбменаДанными.ИмяФайлаПравилОбмена = "1"; + КонецЕсли; + + // Если обработка поддерживает механизм фонового обмена. + Если ОбработкаОбменаДанными.Метаданные().Реквизиты.Найти("УзелДляФоновогоОбмена") <> Неопределено Тогда + ОбработкаОбменаДанными.УзелДляФоновогоОбмена = Неопределено; + КонецЕсли; + + ОбработкаОбменаДанными.УзелДляОбмена = СтруктураНастроекОбмена.УзелИнформационнойБазы; + + УстановитьОбщиеПараметрыДляОбработкиОбменаДанными(ОбработкаОбменаДанными, СтруктураНастроекОбмена); + + Возврат ОбработкаОбменаДанными; + +КонецФункции + +Функция ПолучитьОбработкуОбменаДаннымиДляЗагрузки(СтруктураНастроекОбмена) + + МенеджерОбработки = ?(ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(СтруктураНастроекОбмена.УзелИнформационнойБазы), + Обработки.КонвертацияОбъектовXDTO, + Обработки.КонвертацияОбъектовИнформационныхБаз); + + ОбработкаОбменаДанными = МенеджерОбработки.Создать(); + + ОбработкаОбменаДанными.РежимОбмена = "Загрузка"; + ОбработкаОбменаДанными.УзелОбменаЗагрузкаДанных = СтруктураНастроекОбмена.УзелИнформационнойБазы; + + Если ОбработкаОбменаДанными.Метаданные().Реквизиты.Найти("ИмяФайлаПравилОбмена") <> Неопределено Тогда + УстановитьПравилаОбменаЗагрузкиДанных(ОбработкаОбменаДанными, СтруктураНастроекОбмена); + КонецЕсли; + + УстановитьОбщиеПараметрыДляОбработкиОбменаДанными(ОбработкаОбменаДанными, СтруктураНастроекОбмена); + + Возврат ОбработкаОбменаДанными + +КонецФункции + +Процедура УстановитьОбщиеПараметрыДляОбработкиОбменаДанными(ОбработкаОбменаДанными, СтруктураНастроекОбмена, ОбменСБСП20 = Ложь) + + ОбработкаОбменаДанными.ДописыватьДанныеВПротоколОбмена = Ложь; + ОбработкаОбменаДанными.ВыгружатьТолькоРазрешенные = Ложь; + + ОбработкаОбменаДанными.ИспользоватьТранзакции = СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции <> 1; + ОбработкаОбменаДанными.КоличествоОбъектовНаТранзакцию = СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции; + + ОбработкаОбменаДанными.КлючСообщенияЖурналаРегистрации = СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации; + + Если Не ОбменСБСП20 Тогда + + УстановитьНастройкиРежимаОтладкиДляОбработки(ОбработкаОбменаДанными, СтруктураНастроекОбмена); + + КонецЕсли; + +КонецПроцедуры + +Процедура УстановитьПравилаОбменаВыгрузкиДанных(ОбработкаОбменаДаннымиXML, СтруктураНастроекОбмена) + + ПравилаКонвертацииОбъектов = РегистрыСведений.ПравилаДляОбменаДанными.ПолучитьЗачитанныеПравилаКонвертацииОбъектов(СтруктураНастроекОбмена.ИмяПланаОбмена); + + Если ПравилаКонвертацииОбъектов = Неопределено Тогда + + // Правила обмена должны быть указаны. + НСтрока = НСтр("ru = 'Не заданы правила конвертации для плана обмена %1. Выгрузка данных отменена.'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтрока, СтруктураНастроекОбмена.ИмяПланаОбмена); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + + Возврат; + КонецЕсли; + + ОбработкаОбменаДаннымиXML.СохраненныеНастройки = ПравилаКонвертацииОбъектов; + + Попытка + ОбработкаОбменаДаннымиXML.ВосстановитьПравилаИзВнутреннегоФормата(); + Исключение + ЗаписьЖурналаРегистрацииОбменаДанными(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), СтруктураНастроекОбмена, Истина); + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + Возврат; + КонецПопытки; + +КонецПроцедуры + +Процедура УстановитьПравилаОбменаЗагрузкиДанных(ОбработкаОбменаДаннымиXML, СтруктураНастроекОбмена) + + ПравилаКонвертацииОбъектов = РегистрыСведений.ПравилаДляОбменаДанными.ПолучитьЗачитанныеПравилаКонвертацииОбъектов(СтруктураНастроекОбмена.ИмяПланаОбмена, Истина); + + Если ПравилаКонвертацииОбъектов = Неопределено Тогда + + // Правила обмена должны быть указаны. + НСтрока = НСтр("ru = 'Не заданы правила конвертации для плана обмена %1. Загрузка данных отменена.'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтрока, СтруктураНастроекОбмена.ИмяПланаОбмена); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + + Возврат; + КонецЕсли; + + ОбработкаОбменаДаннымиXML.СохраненныеНастройки = ПравилаКонвертацииОбъектов; + + Попытка + ОбработкаОбменаДаннымиXML.ВосстановитьПравилаИзВнутреннегоФормата(); + Исключение + ЗаписьЖурналаРегистрацииОбменаДанными(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), СтруктураНастроекОбмена, Истина); + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + Возврат; + КонецПопытки; + +КонецПроцедуры + +// Считывает настройки отладки из ИБ и устанавливает их для структуры обмена. +// +Процедура УстановитьНастройкиРежимаОтладкиДляСтруктуры(СтруктураНастроекОбмена, ЭтоВнешнееСоединение = Ложь) + + ТекстЗапроса = "ВЫБРАТЬ + | ВЫБОР + | КОГДА &ПроизводитьВыгрузку + | ТОГДА ПравилаДляОбменаДанными.РежимОтладкиВыгрузки + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ОтладкаОбработчиковВыгрузки, + | ВЫБОР + | КОГДА &ПроизводитьВыгрузку + | ТОГДА ПравилаДляОбменаДанными.ИмяФайлаОбработкиДляОтладкиВыгрузки + | ИНАЧЕ """" + | КОНЕЦ КАК ИмяФайлаВнешнейОбработкиОтладкиВыгрузки, + | ВЫБОР + | КОГДА &ПроизводитьЗагрузку + | ТОГДА ПравилаДляОбменаДанными.РежимОтладкиЗагрузки + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ОтладкаОбработчиковЗагрузки, + | ВЫБОР + | КОГДА &ПроизводитьЗагрузку + | ТОГДА ПравилаДляОбменаДанными.ИмяФайлаОбработкиДляОтладкиЗагрузки + | ИНАЧЕ """" + | КОНЕЦ КАК ИмяФайлаВнешнейОбработкиОтладкиЗагрузки, + | ПравилаДляОбменаДанными.РежимПротоколированияОбменаДанными КАК РежимПротоколированияОбменаДанными, + | ПравилаДляОбменаДанными.ИмяФайлаПротоколаОбмена КАК ИмяФайлаПротоколаОбмена, + | ПравилаДляОбменаДанными.НеОстанавливатьПоОшибке КАК ПродолжитьПриОшибке + |ИЗ + | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными + |ГДЕ + | ПравилаДляОбменаДанными.ИмяПланаОбмена = &ИмяПланаОбмена + | И ПравилаДляОбменаДанными.ВидПравил = ЗНАЧЕНИЕ(Перечисление.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов) + | И ПравилаДляОбменаДанными.РежимОтладки"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + + ПроизводитьВыгрузкуДанных = Ложь; + Если Не СтруктураНастроекОбмена.Свойство("ПроизводитьВыгрузкуДанных", ПроизводитьВыгрузкуДанных) Тогда + ПроизводитьВыгрузкуДанных = (СтруктураНастроекОбмена.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных); + КонецЕсли; + + ПроизводитьЗагрузкуДанных = Ложь; + Если Не СтруктураНастроекОбмена.Свойство("ПроизводитьЗагрузкуДанных", ПроизводитьЗагрузкуДанных) Тогда + ПроизводитьЗагрузкуДанных = (СтруктураНастроекОбмена.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + КонецЕсли; + + Запрос.УстановитьПараметр("ИмяПланаОбмена", СтруктураНастроекОбмена.ИмяПланаОбмена); + Запрос.УстановитьПараметр("ПроизводитьВыгрузку", ПроизводитьВыгрузкуДанных); + Запрос.УстановитьПараметр("ПроизводитьЗагрузку", ПроизводитьЗагрузкуДанных); + + Результат = Запрос.Выполнить(); + + ИмяФайлаПротокола = ""; + Если ЭтоВнешнееСоединение И СтруктураНастроекОбмена.Свойство("ИмяФайлаПротоколаОбмена", ИмяФайлаПротокола) + И Не ПустаяСтрока(ИмяФайлаПротокола) Тогда + + СтруктураНастроекОбмена.ИмяФайлаПротоколаОбмена = ДобавитьЛитералКИмениФайла(ИмяФайлаПротокола, "ВнешнееСоединение") + + КонецЕсли; + + Если Не Результат.Пустой() И Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + ТаблицаНастроек = Результат.Выгрузить(); + СтрокаТаблицы = ТаблицаНастроек[0]; + + ЗаполнитьЗначенияСвойств(СтруктураНастроекОбмена, СтрокаТаблицы); + + КонецЕсли; + +КонецПроцедуры + +// Считывает настройки отладки из ИБ и устанавливает их для структуры настроек обмена. +// +Процедура УстановитьНастройкиРежимаОтладкиДляОбработки(ОбработкаОбменаДанными, СтруктураНастроекОбмена) + + Если СтруктураНастроекОбмена.Свойство("ИмяФайлаВнешнейОбработкиОтладкиВыгрузки") + И ОбработкаОбменаДанными.Метаданные().Реквизиты.Найти("ИмяФайлаВнешнейОбработкиОтладкиВыгрузки") <> Неопределено Тогда + + ОбработкаОбменаДанными.ОтладкаОбработчиковВыгрузки = СтруктураНастроекОбмена.ОтладкаОбработчиковВыгрузки; + ОбработкаОбменаДанными.ОтладкаОбработчиковЗагрузки = СтруктураНастроекОбмена.ОтладкаОбработчиковЗагрузки; + ОбработкаОбменаДанными.ИмяФайлаВнешнейОбработкиОтладкиВыгрузки = СтруктураНастроекОбмена.ИмяФайлаВнешнейОбработкиОтладкиВыгрузки; + ОбработкаОбменаДанными.ИмяФайлаВнешнейОбработкиОтладкиЗагрузки = СтруктураНастроекОбмена.ИмяФайлаВнешнейОбработкиОтладкиЗагрузки; + ОбработкаОбменаДанными.РежимПротоколированияОбменаДанными = СтруктураНастроекОбмена.РежимПротоколированияОбменаДанными; + ОбработкаОбменаДанными.ИмяФайлаПротоколаОбмена = СтруктураНастроекОбмена.ИмяФайлаПротоколаОбмена; + ОбработкаОбменаДанными.ПродолжитьПриОшибке = СтруктураНастроекОбмена.ПродолжитьПриОшибке; + + Если СтруктураНастроекОбмена.РежимПротоколированияОбменаДанными Тогда + + Если СтруктураНастроекОбмена.ИмяФайлаПротоколаОбмена = "" Тогда + ОбработкаОбменаДанными.ВыводВОкноСообщенийИнформационныхСообщений = Истина; + ОбработкаОбменаДанными.ВыводВПротоколИнформационныхСообщений = Ложь; + Иначе + ОбработкаОбменаДанными.ВыводВОкноСообщенийИнформационныхСообщений = Ложь; + ОбработкаОбменаДанными.ВыводВПротоколИнформационныхСообщений = Истина; + ОбработкаОбменаДанными.ИмяФайлаПротоколаОбмена = СтруктураНастроекОбмена.ИмяФайлаПротоколаОбмена; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Устанавливает для обработки настройки выгрузки. +// +Процедура УстановитьНастройкиОтладкиВыгрузкиДляПравилОбмена(ОбработкаОбменаДанными, ИмяПланаОбмена, РежимОтладки) Экспорт + + ТекстЗапроса = "ВЫБРАТЬ + | ПравилаДляОбменаДанными.РежимОтладкиВыгрузки КАК ОтладкаОбработчиковВыгрузки, + | ПравилаДляОбменаДанными.ИмяФайлаОбработкиДляОтладкиВыгрузки КАК ИмяФайлаВнешнейОбработкиОтладкиВыгрузки + |ИЗ + | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными + |ГДЕ + | ПравилаДляОбменаДанными.ИмяПланаОбмена = &ИмяПланаОбмена + | И ПравилаДляОбменаДанными.ВидПравил = ЗНАЧЕНИЕ(Перечисление.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов) + | И &РежимОтладки = ИСТИНА"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("ИмяПланаОбмена", ИмяПланаОбмена); + Запрос.УстановитьПараметр("РежимОтладки", РежимОтладки); + + Результат = Запрос.Выполнить(); + + Если Результат.Пустой() Или ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + ОбработкаОбменаДанными.ОтладкаОбработчиковВыгрузки = Ложь; + ОбработкаОбменаДанными.ИмяФайлаВнешнейОбработкиОтладкиВыгрузки = ""; + + Иначе + + ТаблицаНастроек = Результат.Выгрузить(); + НастройкиОтладки = ТаблицаНастроек[0]; + + ЗаполнитьЗначенияСвойств(ОбработкаОбменаДанными, НастройкиОтладки); + + КонецЕсли; + +КонецПроцедуры + +Процедура ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена) + + СтруктураНастроекОбмена.Отказ = Истина; + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Отменено; + +КонецПроцедуры + +Функция ПолучитьШаблонИмениФайлаСообщения(ТекущийУзелПланаОбмена, УзелИнформационнойБазы, ЭтоИсходящееСообщение) + + УзелОтправитель = ?(ЭтоИсходящееСообщение, ТекущийУзелПланаОбмена, УзелИнформационнойБазы); + УзелПолучатель = ?(ЭтоИсходящееСообщение, УзелИнформационнойБазы, ТекущийУзелПланаОбмена); + + Возврат ИмяФайлаСообщенияОбмена(СокрЛП(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелОтправитель, "Код")), + СокрЛП(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелПолучатель, "Код"))); + // +КонецФункции + +#КонецОбласти + +#Область РаботаСМониторомПроблемОбменаДанными + +Функция КоличествоПроблемОбменаДанными(УзлыОбмена = Неопределено) + + Возврат РегистрыСведений.РезультатыОбменаДанными.КоличествоПроблем(УзлыОбмена); + +КонецФункции + +Функция КоличествоПроблемВерсионирования(УзлыОбмена = Неопределено, ЭтоКоличествоКоллизий = Неопределено, + УчитыватьПроигнорированные = Ложь, Период = Неопределено, СтрокаПоиска = "") Экспорт + + ИспользуетсяВерсионирование = ОбменДаннымиПовтИсп.ИспользуетсяВерсионирование(, Истина); + Если ИспользуетсяВерсионирование Тогда + МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); + Возврат МодульВерсионированиеОбъектов.КоличествоКоллизийИлиНепринятых(УзлыОбмена, + ЭтоКоличествоКоллизий, УчитыватьПроигнорированные, Период, СтрокаПоиска); + КонецЕсли; + + Возврат 0; + +КонецФункции + +// Регистрирует ошибки при отложенном проведении документа в мониторе проблем обмена. +// +// Параметры: +// Объект - ДокументОбъект - Документ при отложенном проведении которого возникли ошибки. +// УзелОбмена - ПланОбменаСсылка - Узел информационной базы из которой получен документ. +// СообщениеОбОшибке - Сообщение об ошибке для журнала регистрации. +// +// Примечание: СообщениеОбОшибке содержит в себе текст сообщения для журнала регистрации. +// Рекомендуется передавать в качестве этого параметра КраткоеПредставлениеОшибки(ИнформацияОбОшибке()). +// Текст сообщения для отображения в мониторе формируется из системных сообщений пользователю, которые +// были сформированы, но еще не были выведены пользователю. Поэтому рекомендуется, чтобы к моменту вызова +// данного метода в буфере сообщений системы не содержалось сообщений. +// +// Пример вызова процедуры при загрузке документа в информационную базу: +// +// Процедура ПровестиДокументПриЗагрузке(Документ, УзелОбмена) +// Документ.ОбменДанными.Загрузка = Истина; +// Документ.Записать(); +// Документ.ОбменДанными.Загрузка = Ложь; +// Отказ = Ложь; +// +// Попытка +// Документ.Записать(РежимЗаписиДокумента.Проведение); +// Исключение +// СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); +// Отказ = Истина; +// КонецПопытки; +// +// Если Отказ Тогда +// ЗарегистрироватьОшибкуПроведенияДокумента(Документ, УзелОбмена, СообщениеОбОшибке); +// КонецЕсли; +// +// КонецПроцедуры; +// +Процедура ЗарегистрироватьОшибкуПроведенияДокумента(Объект, УзелОбмена, ТекстИсключения) Экспорт + + СообщенияПользователю = ПолучитьСообщенияПользователю(Истина); + ТекстСообщения = ТекстИсключения; + Для Каждого Сообщение Из СообщенияПользователю Цикл + ТекстСообщения = ТекстСообщения + ?(ПустаяСтрока(ТекстСообщения), "", Символы.ПС) + Сообщение.Текст; + КонецЦикла; + + ПричинаОшибки = ТекстСообщения; + Если Не ПустаяСтрока(СокрЛП(ТекстСообщения)) Тогда + + ПричинаОшибки = " " + НСтр("ru = 'По причине %1.'"); + ПричинаОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПричинаОшибки, ТекстСообщения); + + КонецЕсли; + + СтрокаСообщения = НСтр("ru = 'Не удалось провести документ %1, полученный из другой информационной базы.%2 + |Возможно не заполнены все реквизиты, обязательные к заполнению.'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(Объект), ПричинаОшибки); + + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Предупреждение,,, СтрокаСообщения); + + РегистрыСведений.РезультатыОбменаДанными.ЗарегистрироватьОшибкуПроверкиОбъекта(Объект.Ссылка, УзелОбмена, + ТекстСообщения, Перечисления.ТипыПроблемОбменаДанными.НепроведенныйДокумент); + +КонецПроцедуры + +// Регистрирует ошибки при отложенной записи объекта в мониторе проблем обмена. +// +// Параметры: +// Объект - Объект ссылочного типа - Объект при отложенной записи которого возникли ошибки. +// УзелОбмена - ПланОбменаСсылка - Узел информационной базы из которой получен объект. +// СообщениеОбОшибке - Сообщение об ошибке для журнала регистрации. +// +// Примечание: СообщениеОбОшибке содержит в себе текст сообщения для журнала регистрации. +// Рекомендуется передавать в качестве этого параметра КраткоеПредставлениеОшибки(ИнформацияОбОшибке()). +// Текст сообщения для отображения в мониторе формируется из системных сообщений пользователю, которые +// были сформированы, но еще не были выведены пользователю. Поэтому рекомендуется, чтобы к моменту вызова +// данного метода в буфере сообщений системы не содержалось сообщений. +// +// Пример вызова процедуры при записи объекта в информационную базу: +// +// Процедура ЗаписатьОбъектПриЗагрузке(Объект, УзелОбмена) +// Объект.ОбменДанными.Загрузка = Истина; +// Объект.Записать(); +// Объект.ОбменДанными.Загрузка = Ложь; +// Отказ = Ложь; +// +// Попытка +// Объект.Записать(); +// Исключение +// СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); +// Отказ = Истина; +// КонецПопытки; +// +// Если Отказ Тогда +// ЗарегистрироватьОшибкуЗаписиОбъекта(Объект, УзелОбмена, СообщениеОбОшибке); +// КонецЕсли; +// +// КонецПроцедуры; +// +Процедура ЗарегистрироватьОшибкуЗаписиОбъекта(Объект, УзелОбмена, ТекстИсключения) Экспорт + + СообщенияПользователю = ПолучитьСообщенияПользователю(Истина); + ТекстСообщения = ТекстИсключения; + Для Каждого Сообщение Из СообщенияПользователю Цикл + ТекстСообщения = ТекстСообщения + ?(ПустаяСтрока(ТекстСообщения), "", Символы.ПС) + Сообщение.Текст; + КонецЦикла; + + ПричинаОшибки = ТекстСообщения; + Если Не ПустаяСтрока(СокрЛП(ТекстСообщения)) Тогда + + ПричинаОшибки = " " + НСтр("ru = 'По причине %1.'"); + ПричинаОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПричинаОшибки, ТекстСообщения); + + КонецЕсли; + + СтрокаСообщения = НСтр("ru = 'Не удалось записать объект %1, полученный из другой информационной базы.%2 + |Возможно не заполнены все реквизиты, обязательные к заполнению.'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(Объект), ПричинаОшибки); + + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Предупреждение,,, СтрокаСообщения); + + РегистрыСведений.РезультатыОбменаДанными.ЗарегистрироватьОшибкуПроверкиОбъекта(Объект.Ссылка, УзелОбмена, + ТекстСообщения, Перечисления.ТипыПроблемОбменаДанными.НезаполненныеРеквизиты); + +КонецПроцедуры + +#КонецОбласти + +#Область ПрогрессБар + +// Подсчет количества объектов ИБ, подлежащих выгрузке при создании начального образа. +// +// Параметры: +// Получатель - План обмена объект. +// +// Возвращаемое значение - число. +Функция РассчитатьКоличествоОбъектовВБазе(Получатель) + + ИмяПланаОбмена = Получатель.Метаданные().Имя; + СчетчикОбъектов = 0; + СоставПланаОбмена = Метаданные.ПланыОбмена[ИмяПланаОбмена].Состав; + + // 1. "Ссылочные" объекты. + СтруктураСсылочныхОбъектов = Новый Структура; + СтруктураСсылочныхОбъектов.Вставить("Справочник", Метаданные.Справочники); + СтруктураСсылочныхОбъектов.Вставить("Документ", Метаданные.Документы); + СтруктураСсылочныхОбъектов.Вставить("ПланВидовХарактеристик", Метаданные.ПланыВидовХарактеристик); + СтруктураСсылочныхОбъектов.Вставить("ПланВидовРасчета", Метаданные.ПланыВидовРасчета); + СтруктураСсылочныхОбъектов.Вставить("ПланСчетов", Метаданные.ПланыСчетов); + СтруктураСсылочныхОбъектов.Вставить("БизнесПроцесс", Метаданные.БизнесПроцессы); + СтруктураСсылочныхОбъектов.Вставить("Задача", Метаданные.Задачи); + СтруктураСсылочныхОбъектов.Вставить("ПланСчетов", Метаданные.ПланыСчетов); + + ТекстЗапроса = "ВЫБРАТЬ + |Количество(Ссылка) КАК КоличествоОбъектов + |ИЗ "; + Для Каждого СсылочныйОбъект Из СтруктураСсылочныхОбъектов Цикл + Для Каждого ОбъектМетаданных Из СсылочныйОбъект.Значение Цикл + Если СоставПланаОбмена.Найти(ОбъектМетаданных) = Неопределено Тогда + Продолжить; + КонецЕсли; + ПолноеИмяОбъекта = СсылочныйОбъект.Ключ +"."+ОбъектМетаданных.Имя; + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса + ПолноеИмяОбъекта; + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + СчетчикОбъектов = СчетчикОбъектов + Выборка.КоличествоОбъектов; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + // 2. Константы. + Для Каждого ОбъектМетаданных Из Метаданные.Константы Цикл + Если СоставПланаОбмена.Найти(ОбъектМетаданных) = Неопределено Тогда + Продолжить; + КонецЕсли; + СчетчикОбъектов = СчетчикОбъектов + 1; + КонецЦикла; + + // 3. Регистры сведений. + ТекстЗапроса = "ВЫБРАТЬ + |Количество(*) КАК КоличествоОбъектов + |ИЗ "; + ТекстЗапросаСРегистратором = "ВЫБРАТЬ + |Количество(РАЗЛИЧНЫЕ Регистратор) КАК КоличествоОбъектов + |ИЗ "; + Для Каждого ОбъектМетаданных Из Метаданные.РегистрыСведений Цикл + Если СоставПланаОбмена.Найти(ОбъектМетаданных) = Неопределено Тогда + Продолжить; + КонецЕсли; + ПолноеИмяОбъекта = "РегистрСведений."+ОбъектМетаданных.Имя; + Запрос = Новый Запрос; + Если ОбъектМетаданных.ПериодичностьРегистраСведений = Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.ПозицияРегистратора Тогда + Запрос.Текст = ТекстЗапросаСРегистратором + ПолноеИмяОбъекта; + Иначе + Запрос.Текст = ТекстЗапроса + ПолноеИмяОбъекта; + КонецЕсли; + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + СчетчикОбъектов = СчетчикОбъектов + Выборка.КоличествоОбъектов; + КонецЕсли; + КонецЦикла; + + // 4. Регистры (подчиненные регистратору) и последовательности. + СтруктураРегистров = Новый Структура; + СтруктураРегистров.Вставить("РегистрНакопления", Метаданные.РегистрыНакопления); + СтруктураРегистров.Вставить("РегистрРасчета", Метаданные.РегистрыРасчета); + СтруктураРегистров.Вставить("РегистрБухгалтерии", Метаданные.РегистрыБухгалтерии); + СтруктураРегистров.Вставить("Последовательность", Метаданные.Последовательности); + + ТекстЗапроса = ТекстЗапросаСРегистратором; + Для Каждого Регистр Из СтруктураРегистров Цикл + Для Каждого ОбъектМетаданных Из Регистр.Значение Цикл + Если СоставПланаОбмена.Найти(ОбъектМетаданных) = Неопределено Тогда + Продолжить; + КонецЕсли; + ПолноеИмяОбъекта = Регистр.Ключ +"."+ОбъектМетаданных.Имя; + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса + ПолноеИмяОбъекта; + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + СчетчикОбъектов = СчетчикОбъектов + Выборка.КоличествоОбъектов; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Возврат СчетчикОбъектов; + +КонецФункции + +// Подсчет количества объектов, зарегистрированных в плане обмена. +// +// Параметры: +// Получатель - План обмена объект. +// +// Возвращаемое значение - число. +Функция РассчитатьКоличествоЗарегистрированныхОбъектов(Получатель) Экспорт + + ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(Получатель.Ссылка, Получатель.НомерОтправленного + 1); + КоличествоОбъектовКВыгрузке = 0; + Пока ВыборкаИзменений.Следующий() Цикл + КоличествоОбъектовКВыгрузке = КоличествоОбъектовКВыгрузке + 1; + КонецЦикла; + Возврат КоличествоОбъектовКВыгрузке; + +КонецФункции + +#КонецОбласти + +#Область ОбщегоНазначения Функция КоличествоНастроенныхОбменов(Знач ПланыОбмена) Экспорт @@ -5878,20 +8630,27 @@ КонецФункции -// Для внутреннего использования. -// Функция ОбменДаннымиВыполненСПредупреждениями(Знач УзелИнформационнойБазы) Экспорт УстановитьПривилегированныйРежим(Истина); - ТекстЗапроса = " - |ВЫБРАТЬ ПЕРВЫЕ 1 1 + ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 1 + | 1 КАК Поле1 |ИЗ | РегистрСведений.СостоянияОбменовДанными КАК СостоянияОбменовДанными |ГДЕ | СостоянияОбменовДанными.УзелИнформационнойБазы = &УзелИнформационнойБазы - | И (СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято) - | ИЛИ СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями))"; + | И СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ ПЕРВЫЕ 1 + | 1 + |ИЗ + | РегистрСведений.СостоянияОбменовДанными КАК СостоянияОбменовДанными + |ГДЕ + | СостоянияОбменовДанными.УзелИнформационнойБазы = &УзелИнформационнойБазы + | И СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями)"; Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; @@ -5901,15 +8660,13 @@ КонецФункции -// Для внутреннего использования. -// Функция ПолучитьДополнительныеСвойстваПланаОбменаСтрокой(Знач СвойстваСтрокой) Результат = ""; Шаблон = "ПланыОбмена.[СвойствоСтрокой] КАК [СвойствоСтрокой]"; - СвойстваМассив = СтрРазделить(СвойстваСтрокой, ","); + СвойстваМассив = СтрРазделить(СвойстваСтрокой, ",", Ложь); Для Каждого СвойствоСтрокой Из СвойстваМассив Цикл @@ -5922,8 +8679,6 @@ Возврат Результат; КонецФункции -// Для внутреннего использования. -// Функция ФильтрПлановОбменаПоПризнакуРазделенияДанных(ПланыОбменаМассив) Результат = Новый Массив; @@ -5975,8 +8730,6 @@ Возврат Результат; КонецФункции -// Для внутреннего использования. -// Функция ФильтрПлановОбменаПоПризнакуАвтономнойРаботы(ПланыОбменаМассив) Результат = Новый Массив; @@ -5994,28 +8747,6 @@ Возврат Результат; КонецФункции -// Для внутреннего использования. -// -Функция ТаблицыКорреспондентаДляЗначенийПоУмолчанию(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента) Экспорт - - Результат = Новый Массив; - - ЗначенияПоУмолчанию = ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента(ИмяПланаОбмена, ВерсияКорреспондента); - - Для Каждого Элемент Из ЗначенияПоУмолчанию Цикл - - Если СтрНайти(Элемент.Ключ, "_Ключ") > 0 Тогда - Продолжить; - КонецЕсли; - - Результат.Добавить(Элемент.Ключ); - - КонецЦикла; - - Возврат Новый ФиксированныйМассив(Результат); - -КонецФункции - // Процедура удаляет неактуальные записи в регистре сведений. // Запись считается неактуальной, если план обмена, для которого была создана запись, // был переименован или удален. @@ -6052,8 +8783,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ПолучитьТаблицуПлановОбменаДляМонитора(МенеджерВременныхТаблиц, ПланыОбменаМассив, Знач ДополнительныеСвойстваПланаОбмена) ПланыОбменаМетода = ФильтрПлановОбменаПоПризнакуРазделенияДанных(ПланыОбменаМассив); @@ -6169,8 +8898,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ПолучитьТаблицуРезультатовОбменаДляМонитора(МенеджерВременныхТаблиц, ПланыОбменаМассив) Запрос = Новый Запрос; @@ -6206,8 +8933,6 @@ КонецПроцедуры -// Только для внутреннего использования. -// Функция ПланыОбменаСПравиламиИзФайла() Запрос = Новый Запрос; @@ -6226,13 +8951,9 @@ КонецФункции -// - -// Для внутреннего использования. -// Процедура ПроверитьВозможностьАдминистрированияОбменов() Экспорт - Если Не Пользователи.РолиДоступны("НастройкаСинхронизацииДанных") Тогда + Если Не ЕстьПраваНаАдминистрированиеОбменов() Тогда ВызватьИсключение НСтр("ru = 'Недостаточно прав для администрирования синхронизации данных.'"); @@ -6240,8 +8961,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ПроверитьВозможностьВнешнегоСоединения() Если ОбщегоНазначения.ЭтоLinuxСервер() Тогда @@ -6284,8 +9003,6 @@ Возврат Истина; КонецФункции -// - // Заполняет список значений доступными видами транспорта для узла плана обмена. // Процедура ЗаполнитьСписокВыбораДоступнымиВидамиТранспорта(УзелИнформационнойБазы, ЭлементФормы, Отбор = Неопределено) Экспорт @@ -6380,8 +9097,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ЗафиксироватьУспешныйОбменДаннымиВРегистреСведений(СтруктураНастроекОбмена) // Создаем структуру для новой записи в РС. @@ -6394,8 +9109,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ЗаписьЖурналаРегистрацииНачалаОбменаДанными(СтруктураНастроекОбмена) Экспорт СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); @@ -6404,21 +9117,9 @@ КонецПроцедуры -// Дополняет таблицу значений пустыми строками до заданного количества строк. -// -Процедура УстановитьКоличествоСтрокТаблицы(Таблица, КоличествоСтрок) Экспорт - - Пока Таблица.Количество() < КоличествоСтрок Цикл - - Таблица.Добавить(); - - КонецЦикла; - -КонецПроцедуры - // Создает запись в журнале регистрации о событии обмена данными/транспорте сообщений обмена. // -Процедура ЗаписьЖурналаРегистрацииОбменаДанными(Комментарий, СтруктураНастроекОбмена, ЭтоОшибка = Ложь) Экспорт +Процедура ЗаписьЖурналаРегистрацииОбменаДанными(Комментарий, СтруктураНастроекОбмена, ЭтоОшибка = Ложь) Уровень = ?(ЭтоОшибка, УровеньЖурналаРегистрации.Ошибка, УровеньЖурналаРегистрации.Информация); @@ -6436,8 +9137,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ФормаНастройкиУзлаОбработчикПриСозданииНаСервере(Форма, ИмяРеквизитаФормы) РеквизитыФормы = ИменаРеквизитовФормы(Форма); @@ -6458,7 +9157,9 @@ Для Каждого Элемент Из СтруктураТабличнойЧасти Цикл - УстановитьКоличествоСтрокТаблицы(Таблица, Элемент.Значение.Количество()); + Пока Таблица.Количество() < Элемент.Значение.Количество() Цикл + Таблица.Добавить(); + КонецЦикла; Таблица.Колонки.Добавить(Элемент.Ключ); @@ -6480,8 +9181,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Функция ИменаРеквизитовФормы(Форма) // Возвращаемое значение функции. @@ -6665,19 +9364,6 @@ КонецФункции -// Возвращает имя файла сообщения обмена данными по данным узла-отправителя и узла-получателя. -// -Функция ИмяФайлаСообщенияОбмена(КодУзлаОтправителя, КодУзлаПолучателя) Экспорт - - ШаблонИмени = "[Префикс]_[УзелОтправитель]_[УзелПолучатель]"; - - ШаблонИмени = СтрЗаменить(ШаблонИмени, "[Префикс]", "Message"); - ШаблонИмени = СтрЗаменить(ШаблонИмени, "[УзелОтправитель]", КодУзлаОтправителя); - ШаблонИмени = СтрЗаменить(ШаблонИмени, "[УзелПолучатель]", КодУзлаПолучателя); - - Возврат ШаблонИмени; -КонецФункции - // Возвращает признак того, что реквизит входит в подмножество стандартных реквизитов. // Функция ЭтоСтандартныйРеквизит(СтандартныеРеквизиты, ИмяРеквизита) Экспорт @@ -6715,8 +9401,6 @@ КонецФункции -// Для внутреннего использования. -// Функция НадоВыполнитьОбработчик(Объект, Ссылка, ИмяСвойства) НомерПослеОбработки = Объект[ИмяСвойства]; @@ -6729,8 +9413,6 @@ КонецФункции -// Для внутреннего использования. -// Функция ЗаполнитьПараметрыПодключенияВнешнегоСоединения(НастройкиТранспорта) ПараметрыПодключения = ОбщегоНазначенияКлиентСервер.СтруктураПараметровДляУстановкиВнешнегоСоединения(); @@ -6746,8 +9428,6 @@ Возврат ПараметрыПодключения; КонецФункции -// Для внутреннего использования. -// Функция ДобавитьЛитералКИмениФайла(Знач ПолноеИмяФайла, Знач Литерал) Если ПустаяСтрока(ПолноеИмяФайла) Тогда @@ -6767,8 +9447,6 @@ Возврат Результат; КонецФункции -// Для внутреннего использования. -// Функция КодУзлаПланаОбменаСтрокой(Значение) Экспорт Если ТипЗнч(Значение) = Тип("Строка") Тогда @@ -6784,34 +9462,6 @@ Возврат Значение; КонецФункции -// Для внутреннего использования. -// -Функция НомерОбластиИзКодаУзлаПланаОбмена(Знач КодУзла) Экспорт - - Если ТипЗнч(КодУзла) <> Тип("Строка") Тогда - ВызватьИсключение НСтр("ru = 'Неправильный тип параметра номер [1].'"); - КонецЕсли; - - Результат = СтрЗаменить(КодУзла, "S0", ""); - - Возврат Число(Результат); -КонецФункции - -// Для внутреннего использования. -// -Функция ЗначениеПоТипу(Значение, ИмяТипа) Экспорт - - Если ТипЗнч(Значение) <> Тип(ИмяТипа) Тогда - - Возврат Новый(Тип(ИмяТипа)); - - КонецЕсли; - - Возврат Значение; -КонецФункции - -// Для внутреннего использования. -// Функция НаименованиеПредопределенногоУзлаПланаОбмена(ИмяПланаОбмена) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -6819,16 +9469,6 @@ Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена), "Наименование"); КонецФункции -// Для внутреннего использования. -// -Функция НаименованиеЭтогоУзлаПоУмолчанию() Экспорт - - Возврат ?(ОбщегоНазначенияПовтИсп.РазделениеВключено(), Метаданные.Синоним, ОбменДаннымиПовтИсп.ИмяЭтойИнформационнойБазы()); - -КонецФункции - -// Для внутреннего использования. -// Процедура ОбработчикПриВыгрузкеДанныхБСП(СтандартнаяОбработка, Знач Получатель, Знач ИмяФайлаСообщения, @@ -6853,8 +9493,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ОбработчикПриВыгрузкеДанных(СтандартнаяОбработка, Знач Получатель, Знач ИмяФайлаСообщения, @@ -6873,8 +9511,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ОбработчикПриЗагрузкеДанныхБСП(СтандартнаяОбработка, Знач Отправитель, Знач ИмяФайлаСообщения, @@ -6899,8 +9535,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ОбработчикПриЗагрузкеДанных(СтандартнаяОбработка, Знач Отправитель, Знач ИмяФайлаСообщения, @@ -6919,8 +9553,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ЗафиксироватьЗавершениеОбменаСОшибкой(Знач УзелИнформационнойБазы, Знач ДействиеПриОбмене, Знач ДатаНачала, @@ -6948,8 +9580,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ВыполнитьСравнениеИОбъединениеТаблицФормы(Форма, Отказ) ИмяПланаОбмена = СтрРазделить(Форма.ИмяФормы, ".")[1]; @@ -7056,8 +9686,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура СинхронизироватьПризнакИспользованияВТаблицах(ТаблицаФормы, ТаблицаРезультат) Если ТаблицаФормы.Количество() = 0 Тогда @@ -7088,8 +9716,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ЗаполнитьДанныеФормы(Форма) // Заполняем данные этой программы. @@ -7205,8 +9831,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура УстановитьОбязательныеРеквизитыФормы(Форма, ОбязательныеРеквизитыФормы) ОтсутствующиеРеквизиты = Новый Массив; @@ -7244,8 +9868,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Функция ОбязательныеРеквизитыФормыНастройкиУзлов() ОбязательныеРеквизитыФормы = Новый ТаблицаЗначений; @@ -7294,8 +9916,6 @@ КонецФункции -// Для внутреннего использования. -// Процедура ИзменитьСтруктуруХраненияТабличныхЧастей(НастройкиПоУмолчанию) Для Каждого Настройка Из НастройкиПоУмолчанию Цикл @@ -7310,8 +9930,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ВнешнееСоединениеОбновитьНастройкиОбменаДанными(Знач ИмяПланаОбмена, Знач КодУзла, Знач ЗначенияПоУмолчаниюНаУзле) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -7330,8 +9948,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Функция ПолучитьЗначенияНастройкиОтборов(СтруктураНастроекВнешнегоСоединения) Экспорт Результат = Новый Структура; @@ -7464,8 +10080,6 @@ Возврат Результат; КонецФункции -// Для внутреннего использования. -// Функция ДанныеДляТабличныхЧастейУзловЭтойИнформационнойБазы(Знач ИмяПланаОбмена, ВерсияКорреспондента = "") Экспорт Результат = Новый Структура; @@ -7515,8 +10129,6 @@ Возврат Результат; КонецФункции -// Для внутреннего использования. -// Функция ОбщиеДанныеУзловКорреспондента(Знач ИмяПланаОбмена, Знач ПараметрыПодключения, Отказ) Если ПараметрыПодключения.ТипСоединения = "ВнешнееСоединение" Тогда @@ -7582,8 +10194,6 @@ Возврат Неопределено; КонецФункции -// Для внутреннего использования. -// Функция ИмяТаблицыИзПервогоРеквизитаТабличнойЧастиПланаОбмена(Знач ИмяПланаОбмена, Знач ИмяТабличнойЧасти) ТабличнаяЧасть = Метаданные.ПланыОбмена[ИмяПланаОбмена].ТабличныеЧасти[ИмяТабличнойЧасти]; @@ -7603,8 +10213,6 @@ Возврат ""; КонецФункции -// Для внутреннего использования. -// Функция СправочникиПланаОбмена(Знач ИмяПланаОбмена) Если ТипЗнч(ИмяПланаОбмена) <> Тип("Строка") Тогда @@ -7631,8 +10239,6 @@ Возврат Результат; КонецФункции -// Для внутреннего использования. -// Функция ВсеДанныеПланаОбменаКромеСправочников(Знач ИмяПланаОбмена) Если ТипЗнч(ИмяПланаОбмена) <> Тип("Строка") Тогда @@ -7659,8 +10265,6 @@ Возврат Результат; КонецФункции -// Для внутреннего использования. -// Функция НастройкиПараметровУчетаВСистемеУстановлены(Знач ИмяПланаОбмена, Знач Корреспондент, СообщениеОбОшибке) Экспорт Если ТипЗнч(Корреспондент) = Тип("Строка") Тогда @@ -7689,24 +10293,18 @@ Возврат Не Отказ; КонецФункции -// Для внутреннего использования. -// Функция ПолучитьПараметрыИнформационнойБазы(Знач ИмяПланаОбмена, Знач КодУзла, СообщениеОбОшибке) Экспорт Возврат ЗначениеВСтрокуВнутр(ПараметрыИнформационнойБазы(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке)); КонецФункции -// Для внутреннего использования. -// Функция ПолучитьПараметрыИнформационнойБазы_2_0_1_6(Знач ИмяПланаОбмена, Знач КодУзла, СообщениеОбОшибке) Экспорт Возврат ОбщегоНазначения.ЗначениеВСтрокуXML(ПараметрыИнформационнойБазы(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке)); КонецФункции -// Для внутреннего использования. -// Функция СвойстваОбъектаМетаданных(Знач ПолноеИмяТаблицы) Экспорт Результат = Новый Структура("Синоним, Иерархический"); @@ -7718,8 +10316,6 @@ Возврат Результат; КонецФункции -// Для внутреннего использования. -// Функция ПолучитьОбъектыТаблицы(Знач ПолноеИмяТаблицы) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -7750,8 +10346,6 @@ Возврат Неопределено; КонецФункции -// Только для внутреннего использования. -// Функция ЭлементыИерархическогоСправочникаИерархияГруппИЭлементов(Знач ПолноеИмяТаблицы) Запрос = Новый Запрос(" @@ -7774,8 +10368,6 @@ Возврат РезультатЗапросаВXMLДерево(Запрос); КонецФункции -// Только для внутреннего использования. -// Функция ЭлементыИерархическогоСправочникаИерархияЭлементов(Знач ПолноеИмяТаблицы) Запрос = Новый Запрос(" @@ -7795,8 +10387,6 @@ Возврат РезультатЗапросаВXMLДерево(Запрос); КонецФункции -// Только для внутреннего использования. -// Функция ЭлементыНеиерархическогоСправочника(Знач ПолноеИмяТаблицы) Запрос = Новый Запрос(" @@ -7816,8 +10406,6 @@ Возврат РезультатЗапросаВXMLДерево(Запрос); КонецФункции -// Только для внутреннего использования. -// Функция РезультатЗапросаВXMLДерево(Знач Запрос) Результат = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); @@ -7828,8 +10416,6 @@ Возврат ОбщегоНазначения.ЗначениеВСтрокуXML(Результат); КонецФункции -// Только для внутреннего использования. -// Процедура ЗаполнитьИдентификаторыСсылокВДереве(СтрокиДерева) Для Каждого Строка Из СтрокиДерева Цикл @@ -7839,8 +10425,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Функция ДанныеКорреспондента(Знач ПолноеИмяТаблицы) Экспорт Результат = Новый Структура("СвойстваОбъектаМетаданных, ТаблицаБазыКорреспондента"); @@ -7851,65 +10435,6 @@ Возврат Результат; КонецФункции -// Для внутреннего использования. -// -Функция ДанныеТаблицКорреспондента(Таблицы, Знач ИмяПланаОбмена) Экспорт - - Результат = Новый Соответствие; - РеквизитыПланаОбмена = Метаданные.ПланыОбмена[ИмяПланаОбмена].Реквизиты; - - Для Каждого Элемент Из Таблицы Цикл - - Реквизит = РеквизитыПланаОбмена.Найти(Элемент); - - Если Реквизит <> Неопределено Тогда - - ТипыРеквизита = Реквизит.Тип.Типы(); - - Если ТипыРеквизита.Количество() <> 1 Тогда - - СтрокаСообщения = НСтр("ru = 'Составной тип данных для значений по умолчанию не поддерживается. - |Реквизит ""%1"".'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Реквизит.ПолноеИмя()); - ВызватьИсключение СтрокаСообщения; - КонецЕсли; - - ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипыРеквизита.Получить(0)); - - Если Не ОбщегоНазначения.ЭтоСправочник(ОбъектМетаданных) Тогда - - СтрокаСообщения = НСтр("ru = 'Выбор значений по умолчанию поддерживается только для справочников. - |Реквизит ""%1"".'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Реквизит.ПолноеИмя()); - ВызватьИсключение СтрокаСообщения; - КонецЕсли; - - ПолноеИмяОбъектаМетаданных = ОбъектМетаданных.ПолноеИмя(); - - ДанныеТаблицы = Новый Структура("СвойстваОбъектаМетаданных, ТаблицаБазыКорреспондента"); - ДанныеТаблицы.СвойстваОбъектаМетаданных = СвойстваОбъектаМетаданных(ПолноеИмяОбъектаМетаданных); - ДанныеТаблицы.ТаблицаБазыКорреспондента = ПолучитьОбъектыТаблицы(ПолноеИмяОбъектаМетаданных); - - Результат.Вставить(ПолноеИмяОбъектаМетаданных, ДанныеТаблицы); - - КонецЕсли; - - КонецЦикла; - - ДополнительныеДанные = Новый Структура; - - // {Обработчик: ПолучитьДополнительныеДанныеДляКорреспондента} Начало - ПланыОбмена[ИмяПланаОбмена].ПолучитьДополнительныеДанныеДляКорреспондента(ДополнительныеДанные); - // {Обработчик: ПолучитьДополнительныеДанныеДляКорреспондента} Окончание - - Результат.Вставить("{ДополнительныеДанные}", ДополнительныеДанные); - - Возврат Результат; - -КонецФункции - -// Для внутреннего использования. -// Функция ПараметрыИнформационнойБазы(Знач ИмяПланаОбмена, Знач КодУзла, СообщениеОбОшибке) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -7937,10 +10462,13 @@ Результат.ПрефиксИнформационнойБазы = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); Результат.ПрефиксИнформационнойБазыПоУмолчанию = ПрефиксИнформационнойБазы; Результат.НаименованиеИнформационнойБазы = СвойстваЭтогоУзла.Наименование; - Результат.НаименованиеИнформационнойБазыПоУмолчанию = НаименованиеЭтогоУзлаПоУмолчанию(); Результат.НастройкиПараметровУчетаЗаданы = НастройкиПараметровУчетаВСистемеУстановлены(ИмяПланаОбмена, КодУзла, СообщениеОбОшибке); Результат.КодЭтогоУзла = СвойстваЭтогоУзла.Код; Результат.ВерсияКонфигурации = Метаданные.Версия; + + Результат.НаименованиеИнформационнойБазыПоУмолчанию = ?(ОбщегоНазначенияПовтИсп.РазделениеВключено(), + Метаданные.Синоним, ОбменДаннымиПовтИсп.ИмяЭтойИнформационнойБазы()); + Иначе Результат.ПрефиксИнформационнойБазы = ""; @@ -7955,8 +10483,6 @@ Возврат Результат; КонецФункции -// Для внутреннего использования. -// Функция ПолучитьДеревоИнформацииСтатистики(ИнформацияСтатистики, Знач ВключатьУдалениеОбъектов = Ложь) Экспорт ОтборМассив = ИнформацияСтатистики.ВыгрузитьКолонку("ИмяТаблицыПриемника"); @@ -8065,8 +10591,6 @@ Возврат ДеревоИнформацииСтатистики; КонецФункции -// Для внутреннего использования. -// Процедура ЗаполнитьДеревоИнформацииСтатистикиОдинКоМногим(ДеревоИнформацииСтатистики, ИнформацияСтатистики, Отбор, УжеОбработанныеСтроки) СтрокиДляОбработки = ИнформацияСтатистики.НайтиСтроки(Отбор); @@ -8115,8 +10639,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Функция УдалитьИмяКлассаИзИмениОбъекта(Знач Результат) Результат = СтрЗаменить(Результат, "ДокументСсылка.", ""); @@ -8130,8 +10652,6 @@ Возврат Результат; КонецФункции -// Для внутреннего использования. -// Процедура ВыполнитьПроверкуНаличияПравилОбменаЗагруженныхИзФайла(ПравилаОбменаЗагруженныеИзФайла, ПравилаРегистрацииЗагруженныеИзФайла) ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ @@ -8227,22 +10747,10 @@ КонецПроцедуры -// Устарела. В будущем необходимо использовать "УстановитьВнешнееСоединениеСБазой". -// -Функция УстановитьВнешнееСоединение(СтруктураНастроек, СтрокаСообщенияОбОшибке = "", ОшибкаПодключенияКомпоненты = Ложь) Экспорт - - Результат = УстановитьВнешнееСоединениеСБазой(СтруктураНастроек); - - ОшибкаПодключенияКомпоненты = Результат.ОшибкаПодключенияКомпоненты; - СтрокаСообщенияОбОшибке = Результат.ПодробноеОписаниеОшибки; - - Возврат Результат.Соединение; -КонецФункции - -// Основная функция для использования внешнего соединения при обмене. Для внутреннего использования. +// Основная функция для использования внешнего соединения при обмене. // // Параметры: -// СтруктураНастроек - структура настроек транспорта COM обмена. +// СтруктураНастроек - структура настроек транспорта COM обмена. // Функция УстановитьВнешнееСоединениеСБазой(СтруктураНастроек) Экспорт @@ -8288,70 +10796,27 @@ Функция НастройкиТранспортаПоПараметрамВнешнегоСоединения(Параметры) Экспорт // Преобразуем настройки - параметры внешнего соединения в параметры транспорта. - НастройкиТранспорта = - НастройкаТранспорта(Параметры, "COMВариантРаботыИнформационнойБазы", "ВариантРаботыИнформационнойБазы", - НастройкаТранспорта(Параметры, "COMКаталогИнформационнойБазы", "КаталогИнформационнойБазы", - НастройкаТранспорта(Параметры, "COMИмяСервера1СПредприятия", "ИмяСервера1СПредприятия", - НастройкаТранспорта(Параметры, "COMИмяИнформационнойБазыНаСервере1СПредприятия", "ИмяИнформационнойБазыНаСервере1СПредприятия", - НастройкаТранспорта(Параметры, "COMАутентификацияОперационнойСистемы", "АутентификацияОперационнойСистемы", - НастройкаТранспорта(Параметры, "COMИмяПользователя", "ИмяПользователя", - НастройкаТранспорта(Параметры, "COMПарольПользователя", "ПарольПользователя",))))))); + НастройкиТранспорта = Новый Структура; + + НастройкиТранспорта.Вставить("COMПарольПользователя", + ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ПарольПользователя")); + НастройкиТранспорта.Вставить("COMИмяПользователя", + ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ИмяПользователя")); + НастройкиТранспорта.Вставить("COMАутентификацияОперационнойСистемы", + ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "АутентификацияОперационнойСистемы")); + НастройкиТранспорта.Вставить("COMИмяИнформационнойБазыНаСервере1СПредприятия", + ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ИмяИнформационнойБазыНаСервере1СПредприятия")); + НастройкиТранспорта.Вставить("COMИмяСервера1СПредприятия", + ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ИмяСервера1СПредприятия")); + НастройкиТранспорта.Вставить("COMКаталогИнформационнойБазы", + ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "КаталогИнформационнойБазы")); + НастройкиТранспорта.Вставить("COMВариантРаботыИнформационнойБазы", + ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ВариантРаботыИнформационнойБазы")); Возврат НастройкиТранспорта; + КонецФункции -// Вспомогательное -Функция НастройкаТранспорта(Знач ПараметрыСоединения, Знач ИмяПараметраТранспорта, Знач ИмяПараметраСоединения, Знач НачальнаяНастройка = Неопределено) - Результат = ?(НачальнаяНастройка = Неопределено, Новый Структура, НачальнаяНастройка); - - ЗначениеПараметра = Неопределено; - ПараметрыСоединения.Свойство(ИмяПараметраСоединения, ЗначениеПараметра); - Результат.Вставить(ИмяПараметраТранспорта, ЗначениеПараметра); - - Возврат Результат; -КонецФункции - -// Для внутреннего использования. -// -Функция ПолучитьWSПрокси(СтруктураНастроек, СтрокаСообщенияОбОшибке = "", СообщениеПользователю = "") Экспорт - - УдалитьНезначащиеСимволыВНастройкахПодключения(СтруктураНастроек); - - СтруктураНастроек.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SSL/Exchange"); - СтруктураНастроек.Вставить("WSИмяСервиса", "Exchange"); - СтруктураНастроек.Вставить("WSТаймаут", 600); - - Возврат ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке, СообщениеПользователю); -КонецФункции - -// Для внутреннего использования. -// -Функция ПолучитьWSПрокси_2_0_1_6(СтруктураНастроек, СтрокаСообщенияОбОшибке = "", СообщениеПользователю = "") Экспорт - - УдалитьНезначащиеСимволыВНастройкахПодключения(СтруктураНастроек); - - СтруктураНастроек.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SSL/Exchange_2_0_1_6"); - СтруктураНастроек.Вставить("WSИмяСервиса", "Exchange_2_0_1_6"); - СтруктураНастроек.Вставить("WSТаймаут", 600); - - Возврат ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке, СообщениеПользователю); -КонецФункции - -// Для внутреннего использования. -// -Функция ПолучитьWSПрокси_2_1_1_7(СтруктураНастроек, СтрокаСообщенияОбОшибке = "", СообщениеПользователю = "", Таймаут = 600) Экспорт - - УдалитьНезначащиеСимволыВНастройкахПодключения(СтруктураНастроек); - - СтруктураНастроек.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SSL/Exchange_2_0_1_6"); - СтруктураНастроек.Вставить("WSИмяСервиса", "Exchange_2_0_1_6"); - СтруктураНастроек.Вставить("WSТаймаут", Таймаут); - - Возврат ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке, СообщениеПользователю, Истина); -КонецФункции - -// Для внутреннего использования. -// Функция ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке = "", ПараметрыАутентификации = Неопределено) СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспортаWS(УзелИнформационнойБазы, ПараметрыАутентификации); @@ -8385,8 +10850,6 @@ Возврат WSПрокси; КонецФункции -// Для внутреннего использования. -// Процедура УдалитьНезначащиеСимволыВНастройкахПодключения(Настройки) Для Каждого Настройка Из Настройки Цикл @@ -8401,34 +10864,6 @@ КонецПроцедуры -// Для внутреннего использования. -// -Функция ПроверитьПодключение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Прокси; -КонецФункции - -// Для внутреннего использования. -// Функция ЕстьПодключениеККорреспонденту(Знач Корреспондент, Знач СтруктураНастроек, СообщениеПользователю = "") Экспорт СобытиеЖурналаРегистрации = НСтр("ru = 'Обмен данными.Проверка подключения'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); @@ -8654,8 +11089,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ВыполнитьОбновлениеВерсииТиповыхПравилДляОбменаДанными(ПравилаОбменаЗагруженныеИзФайла, ПравилаРегистрацииЗагруженныеИзФайла) Отказ = Ложь; @@ -8744,7 +11177,7 @@ // набор. // ИмяРегистра - Строка - имя регистра сведений. // -Функция СоздатьНаборЗаписейРегистраСведений(СтруктураЗаписи, ИмяРегистра) Экспорт +Функция СоздатьНаборЗаписейРегистраСведений(СтруктураЗаписи, ИмяРегистра) МетаданныеРегистра = Метаданные.РегистрыСведений[ИмяРегистра]; @@ -8774,30 +11207,6 @@ КонецФункции -// Проверяет признак того, что правила обмена загружены для заданного плана обмена. -// -// Возвращаемое значение: -// Истина - привила обмена загружены в ИБ, иначе Ложь. -// -Функция ПравилаКонвертацииОбъектовДляПланаОбменаЗагружены(Знач ИмяПланаОбмена) Экспорт - - ТекстЗапроса = " - |ВЫБРАТЬ ПЕРВЫЕ 1 1 - |ИЗ - | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными - |ГДЕ - | ПравилаДляОбменаДанными.ВидПравил = ЗНАЧЕНИЕ(Перечисление.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов) - | И ПравилаДляОбменаДанными.ПравилаЗагружены - | И ПравилаДляОбменаДанными.ИмяПланаОбмена = &ИмяПланаОбмена - |"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("ИмяПланаОбмена", ИмяПланаОбмена); - - Возврат Не Запрос.Выполнить().Пустой(); -КонецФункции - // Выполняет проверку того, что размер файла сообщения обмена превышает допустимый размер. // // Возвращаемое значение: @@ -8832,8 +11241,6 @@ КонецФункции -// Для внутреннего использования. -// Функция УстановленПризнакНачальнойВыгрузкиДанных(УзелИнформационнойБазы) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -8842,24 +11249,18 @@ КонецФункции -// Для внутреннего использования. -// Процедура ЗарегистрироватьТолькоСправочникиДляНачальнойВыгрузки(Знач УзелИнформационнойБазы) Экспорт ЗарегистрироватьДанныеДляНачальнойВыгрузки(УзелИнформационнойБазы, СправочникиПланаОбмена(УзелИнформационнойБазы)); КонецПроцедуры -// Для внутреннего использования. -// Процедура ЗарегистрироватьВсеДанныеКромеСправочниковДляНачальнойВыгрузки(Знач УзелИнформационнойБазы) Экспорт ЗарегистрироватьДанныеДляНачальнойВыгрузки(УзелИнформационнойБазы, ВсеДанныеПланаОбменаКромеСправочников(УзелИнформационнойБазы)); КонецПроцедуры -// Для внутреннего использования. -// Процедура ЗарегистрироватьДанныеДляНачальнойВыгрузки(УзелИнформационнойБазы, Данные = Неопределено) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -8908,7 +11309,7 @@ // Выполняет загрузку сообщения обмена, которое содержало // изменения конфигурации, до обновления информационной базы. // -Процедура ЗагрузитьСообщениеПередОбновлениемИнформационнойБазы() Экспорт +Процедура ЗагрузитьСообщениеПередОбновлениемИнформационнойБазы() Если ОбменДаннымиВызовСервера.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском( "ПропуститьЗагрузкуСообщенияОбменаДаннымиПередЗапуском") Тогда @@ -8971,59 +11372,6 @@ КонецПроцедуры -// Выполняет выгрузку сообщения обмена, которое содержало -// изменения конфигурации, до обновления информационной базы. -// -Процедура ВыгрузитьСообщениеПослеОбновленияИнформационнойБазы() Экспорт - - // После успешной загрузки и обновления ИБ режим повтора можно отключить. - ОтключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); - - Попытка - Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных") Тогда - - УзелИнформационнойБазы = ГлавныйУзел(); - - Если УзелИнформационнойБазы <> Неопределено Тогда - - ВыполнитьВыгрузку = Истина; - - НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспорта(УзелИнформационнойБазы); - - ВидТранспорта = НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию; - - Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS - И Не НастройкиТранспорта.WSЗапомнитьПароль Тогда - - ВыполнитьВыгрузку = Ложь; - - РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.УстановитьПризнакОтправкиДанных(УзелИнформационнойБазы); - - КонецЕсли; - - Если ВыполнитьВыгрузку Тогда - - Отказ = Ложь; - - ПараметрыОбмена = ПараметрыОбмена(); - ПараметрыОбмена.ВидТранспортаСообщенийОбмена = ВидТранспорта; - ПараметрыОбмена.ВыполнятьЗагрузку = Ложь; - ПараметрыОбмена.ВыполнятьВыгрузку = Истина; - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, ПараметрыОбмена, Отказ); - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - Исключение - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - -КонецПроцедуры - // Сбрасывает признак повторения загрузки при ошибке загрузки или обновления. Процедура ОтключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском() Экспорт @@ -9040,7 +11388,7 @@ // обновления информационной базы. // Процедура ВыполнитьСинхронизациюПриОтсутствииОбновленияИнформационнойБазы( - ПриЗапускеКлиентскогоПриложения, Перезапустить) Экспорт + ПриЗапускеКлиентскогоПриложения, Перезапустить) Если Не ЗагрузитьСообщениеОбменаДанными() Тогда // Если загрузка сообщения обмена была отменена, а версия конфигурации @@ -9103,31 +11451,12 @@ КонецПроцедуры -// Для внутреннего использования. -// -Функция СостояниеДлительнойОперацииДляУзлаИнформационнойБазы(Знач УзелИнформационнойБазы, - Знач ИдентификаторОперации, - СтрокаСообщенияОбОшибке = "") Экспорт - - WSПрокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке); - - Если WSПрокси = Неопределено Тогда - ВызватьИсключение СтрокаСообщенияОбОшибке; - КонецЕсли; - - Возврат WSПрокси.GetContinuousOperationStatus(ИдентификаторОперации, СтрокаСообщенияОбОшибке); -КонецФункции - -// Для внутреннего использования. -// Функция КаталогВременногоХранилищаФайлов() Возврат ОбменДаннымиПовтИсп.КаталогВременногоХранилищаФайлов(); КонецФункции -// Для внутреннего использования. -// Функция УникальноеИмяФайлаСообщенияОбмена() Результат = "Message{GUID}.xml"; @@ -9136,8 +11465,6 @@ Возврат Результат; КонецФункции -// Для внутреннего использования. -// Функция ЭтоПодчиненныйУзелРИБ() Экспорт Возврат ГлавныйУзел() <> Неопределено; @@ -9185,8 +11512,6 @@ КонецФункции -// Для внутреннего использования. -// Функция КраткоеПредставлениеПервойОшибки(ИнформацияОбОшибке) Если ИнформацияОбОшибке.Причина <> Неопределено Тогда @@ -9304,1965 +11629,6 @@ Возврат Результат; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обертки для работы с внешним (публикуемым) программным интерфейсом менеджера плана обмена. - -Функция НастройкаОтборовНаУзле(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента, ИмяФормы = "", ИдентификаторНастройки = "") Экспорт - - Если ПустаяСтрока(ВерсияКорреспондента) Тогда - ВерсияКорреспондента = "0.0.0.0"; - КонецЕсли; - - ИмяФормы = ""; - - Результат = ПланыОбмена[ИмяПланаОбмена].НастройкаОтборовНаУзле(ВерсияКорреспондента, ИмяФормы, ИдентификаторНастройки); - - Если ПустаяСтрока(ИмяФормы) Тогда - ИмяФормы = "ФормаНастройкиУзла"; - КонецЕсли; - - Если Результат = Неопределено Тогда - Результат = Новый Структура; - КонецЕсли; - - Возврат Результат; -КонецФункции - -Функция ЗначенияПоУмолчаниюНаУзле(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента, ИмяФормы = "", ИдентификаторНастройки = "") Экспорт - - Если ПустаяСтрока(ВерсияКорреспондента) Тогда - ВерсияКорреспондента = "0.0.0.0"; - КонецЕсли; - - ИмяФормы = ""; - - Результат = ПланыОбмена[ИмяПланаОбмена].ЗначенияПоУмолчаниюНаУзле(ВерсияКорреспондента, ИмяФормы, ИдентификаторНастройки); - - Если ПустаяСтрока(ИмяФормы) Тогда - ИмяФормы = "ФормаНастройкиЗначенийПоУмолчанию"; - КонецЕсли; - - Если Результат = Неопределено Тогда - Результат = Новый Структура; - КонецЕсли; - - Возврат Результат; - -КонецФункции - -Функция ОписаниеОграниченийПередачиДанных(Знач ИмяПланаОбмена, Знач Настройка, Знач ВерсияКорреспондента, ИдентификаторНастройки = "") Экспорт - - Если ПустаяСтрока(ВерсияКорреспондента) Тогда - ВерсияКорреспондента = "0.0.0.0"; - КонецЕсли; - - Возврат ПланыОбмена[ИмяПланаОбмена].ОписаниеОграниченийПередачиДанных(Настройка, ВерсияКорреспондента, ИдентификаторНастройки); - -КонецФункции - -Функция ОписаниеЗначенийПоУмолчанию(Знач ИмяПланаОбмена, Знач Настройка, Знач ВерсияКорреспондента, ИдентификаторНастройки = "") Экспорт - - Если ПустаяСтрока(ВерсияКорреспондента) Тогда - ВерсияКорреспондента = "0.0.0.0"; - КонецЕсли; - - Возврат ПланыОбмена[ИмяПланаОбмена].ОписаниеЗначенийПоУмолчанию(Настройка, ВерсияКорреспондента, ИдентификаторНастройки); - -КонецФункции - -Функция ОбщиеДанныеУзлов(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента, ИмяФормы = "") Экспорт - - Если ПустаяСтрока(ВерсияКорреспондента) Тогда - ВерсияКорреспондента = "0.0.0.0"; - КонецЕсли; - - ИмяФормы = ""; - - Результат = ПланыОбмена[ИмяПланаОбмена].ОбщиеДанныеУзлов(ВерсияКорреспондента, ИмяФормы); - - Если ПустаяСтрока(ИмяФормы) Тогда - ИмяФормы = "ФормаНастройкиУзлов"; - КонецЕсли; - - Возврат СтрЗаменить(Результат, " ", ""); -КонецФункции - -Функция НастройкаОтборовНаУзлеБазыКорреспондента(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента, ИмяФормы = "", ИдентификаторНастройки = "") Экспорт - - Если ПустаяСтрока(ВерсияКорреспондента) Тогда - ВерсияКорреспондента = "0.0.0.0"; - КонецЕсли; - - ИмяФормы = ""; - - Результат = ПланыОбмена[ИмяПланаОбмена].НастройкаОтборовНаУзлеБазыКорреспондента(ВерсияКорреспондента, ИмяФормы, ИдентификаторНастройки); - - Если ПустаяСтрока(ИмяФормы) Тогда - ИмяФормы = "ФормаНастройкиУзлаБазыКорреспондента"; - КонецЕсли; - - Если Результат = Неопределено Тогда - Результат = Новый Структура; - КонецЕсли; - - Возврат Результат; -КонецФункции - -Функция ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента, ИмяФормы = "", ИдентификаторНастройки = "") Экспорт - - Если ПустаяСтрока(ВерсияКорреспондента) Тогда - ВерсияКорреспондента = "0.0.0.0"; - КонецЕсли; - - ИмяФормы = ""; - - Результат = ПланыОбмена[ИмяПланаОбмена].ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента(ВерсияКорреспондента, ИмяФормы, ИдентификаторНастройки); - - Если ПустаяСтрока(ИмяФормы) Тогда - ИмяФормы = "ФормаНастройкиЗначенийПоУмолчаниюБазыКорреспондента"; - КонецЕсли; - - Если Результат = Неопределено Тогда - Результат = Новый Структура; - КонецЕсли; - - Возврат Результат; -КонецФункции - -Функция ОписаниеОграниченийПередачиДанныхБазыКорреспондента(Знач ИмяПланаОбмена, Знач НастройкаОтборовНаУзле, Знач ВерсияКорреспондента, ИдентификаторНастройки = "") Экспорт - - Если ПустаяСтрока(ВерсияКорреспондента) Тогда - ВерсияКорреспондента = "0.0.0.0"; - КонецЕсли; - - Возврат ПланыОбмена[ИмяПланаОбмена].ОписаниеОграниченийПередачиДанныхБазыКорреспондента(НастройкаОтборовНаУзле, ВерсияКорреспондента, ИдентификаторНастройки); - -КонецФункции - -Функция ОписаниеЗначенийПоУмолчаниюБазыКорреспондента(Знач ИмяПланаОбмена, Знач ЗначенияПоУмолчаниюНаУзле, Знач ВерсияКорреспондента, ИдентификаторНастройки = "") Экспорт - - Если ПустаяСтрока(ВерсияКорреспондента) Тогда - ВерсияКорреспондента = "0.0.0.0"; - КонецЕсли; - - Возврат ПланыОбмена[ИмяПланаОбмена].ОписаниеЗначенийПоУмолчаниюБазыКорреспондента(ЗначенияПоУмолчаниюНаУзле, ВерсияКорреспондента, ИдентификаторНастройки); - -КонецФункции - -Функция ПояснениеДляНастройкиПараметровУчетаБазыКорреспондента(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента) Экспорт - - Если ПустаяСтрока(ВерсияКорреспондента) Тогда - ВерсияКорреспондента = "0.0.0.0"; - КонецЕсли; - - Возврат ПланыОбмена[ИмяПланаОбмена].ПояснениеДляНастройкиПараметровУчетаБазыКорреспондента(ВерсияКорреспондента); - -КонецФункции - -Процедура ПриПодключенииККорреспонденту(Знач ИмяПланаОбмена, Знач ВерсияКорреспондента) Экспорт - - Если ПустаяСтрока(ВерсияКорреспондента) Тогда - ВерсияКорреспондента = "0.0.0.0"; - КонецЕсли; - - ПланыОбмена[ИмяПланаОбмена].ПриПодключенииККорреспонденту(ВерсияКорреспондента); - -КонецПроцедуры - -// Работа с паролями синхронизации данных. - -// Возвращает значения пароля синхронизации данных для заданного узла. -// Если пароля нет, то возвращается Неопределено. -// -// Возвращаемое значение: -// Строка, Неопределено - значения пароля синхронизации данных. -// -Функция ПарольСинхронизацииДанных(Знач УзелИнформационнойБазы) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Возврат ПараметрыСеанса.ПаролиСинхронизацииДанных.Получить(УзелИнформационнойБазы); -КонецФункции - -// Возвращает признак того, что пароль синхронизации данных был задан пользователем. -// -Функция ПарольСинхронизацииДанныхЗадан(Знач УзелИнформационнойБазы) Экспорт - - Возврат ПарольСинхронизацииДанных(УзелИнформационнойБазы) <> Неопределено; - -КонецФункции - -// Устанавливает пароль синхронизации данных для заданного узла. -// Пароль сохраняется в параметре сеанса. -// -Процедура УстановитьПарольСинхронизацииДанных(Знач УзелИнформационнойБазы, Знач Пароль) - - УстановитьПривилегированныйРежим(Истина); - - ПаролиСинхронизацииДанных = Новый Соответствие; - - Для Каждого Элемент Из ПараметрыСеанса.ПаролиСинхронизацииДанных Цикл - - ПаролиСинхронизацииДанных.Вставить(Элемент.Ключ, Элемент.Значение); - - КонецЦикла; - - ПаролиСинхронизацииДанных.Вставить(УзелИнформационнойБазы, Пароль); - - ПараметрыСеанса.ПаролиСинхронизацииДанных = Новый ФиксированноеСоответствие(ПаролиСинхронизацииДанных); - -КонецПроцедуры - -// Сбрасывает пароль синхронизации данных для заданного узла. -// -Процедура СброситьПарольСинхронизацииДанных(Знач УзелИнформационнойБазы) - - УстановитьПарольСинхронизацииДанных(УзелИнформационнойБазы, Неопределено); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Контроль неразделенных данных. - -// Вызывается при проверке доступности неразделенных данных для записи. -// -Процедура ВыполнитьКонтрольЗаписиНеразделенныхДанных(Знач Данные) Экспорт - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() - И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() - И Не ЭтоРазделенныйОбъект(Данные) Тогда - - ПредставлениеИсключения = НСтр("ru = 'Нарушение прав доступа!'"); - ТекстИсключения = НСтр("ru = 'Нарушение прав доступа!'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - - ЗаписьЖурналаРегистрации( - ТекстИсключения, - УровеньЖурналаРегистрации.Ошибка, - Данные.Метаданные()); - - ВызватьИсключение ПредставлениеИсключения; - КонецЕсли; - -КонецПроцедуры - -Функция ЭтоРазделенныйОбъект(Знач Объект) - - ПолноеИмя = Объект.Метаданные().ПолноеИмя(); - - Возврат ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(ПолноеИмя, ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных()) - ИЛИ ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(ПолноеИмя, ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных()); -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Работа с монитором обмена данными. - -// Возвращает структуру с данными последнего обмена для заданного узла информационной базы. -// -// Параметры: -// Нет. -// -// Возвращаемое значение: -// СостоянияОбменовДанными - Структура - структура с данными последнего обмена для заданного узла информационной базы. -// -Функция СостоянияОбменовДаннымиДляУзлаИнформационнойБазы(Знач УзелИнформационнойБазы) Экспорт - - // Возвращаемое значение функции. - СостоянияОбменовДанными = Новый Структура; - СостоянияОбменовДанными.Вставить("УзелИнформационнойБазы"); - СостоянияОбменовДанными.Вставить("РезультатЗагрузкиДанных", "Неопределено"); - СостоянияОбменовДанными.Вставить("РезультатВыгрузкиДанных", "Неопределено"); - - ТекстЗапроса = " - |// {ЗАПРОС №0} - |//////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ВЫБОР - | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Выполнено) - | ТОГДА ""Успех"" - | - | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями) - | ТОГДА ""ВыполненоСПредупреждениями"" - | - | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято) - | ТОГДА ""Предупреждение_СообщениеОбменаБылоРанееПринято"" - | - | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Ошибка_ТранспортСообщения) - | ТОГДА ""Ошибка_ТранспортСообщения"" - | - | ИНАЧЕ ""Ошибка"" - | - | КОНЕЦ КАК РезультатВыполненияОбмена - |ИЗ - | РегистрСведений.[СостоянияОбменовДанными] КАК СостоянияОбменовДанными - |ГДЕ - | СостоянияОбменовДанными.УзелИнформационнойБазы = &УзелИнформационнойБазы - | И СостоянияОбменовДанными.ДействиеПриОбмене = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ЗагрузкаДанных) - |; - |// {ЗАПРОС №1} - |//////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ВЫБОР - | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Выполнено) - | ТОГДА ""Успех"" - | - | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями) - | ТОГДА ""ВыполненоСПредупреждениями"" - | - | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято) - | ТОГДА ""Предупреждение_СообщениеОбменаБылоРанееПринято"" - | - | КОГДА СостоянияОбменовДанными.РезультатВыполненияОбмена = ЗНАЧЕНИЕ(Перечисление.РезультатыВыполненияОбмена.Ошибка_ТранспортСообщения) - | ТОГДА ""Ошибка_ТранспортСообщения"" - | - | ИНАЧЕ ""Ошибка"" - | КОНЕЦ КАК РезультатВыполненияОбмена - | - |ИЗ - | РегистрСведений.[СостоянияОбменовДанными] КАК СостоянияОбменовДанными - |ГДЕ - | СостоянияОбменовДанными.УзелИнформационнойБазы = &УзелИнформационнойБазы - | И СостоянияОбменовДанными.ДействиеПриОбмене = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ВыгрузкаДанных) - |; - |"; - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() - И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[СостоянияОбменовДанными]", "СостоянияОбменовДаннымиОбластейДанных"); - Иначе - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[СостоянияОбменовДанными]", "СостоянияОбменовДанными"); - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелИнформационнойБазы); - - МассивРезультатовЗапроса = Запрос.ВыполнитьПакет(); - - ВыборкаРезультатовЗагрузкиДанных = МассивРезультатовЗапроса[0].Выбрать(); - ВыборкаРезультатовВыгрузкиДанных = МассивРезультатовЗапроса[1].Выбрать(); - - Если ВыборкаРезультатовЗагрузкиДанных.Следующий() Тогда - - СостоянияОбменовДанными.РезультатЗагрузкиДанных = ВыборкаРезультатовЗагрузкиДанных.РезультатВыполненияОбмена; - - КонецЕсли; - - Если ВыборкаРезультатовВыгрузкиДанных.Следующий() Тогда - - СостоянияОбменовДанными.РезультатВыгрузкиДанных = ВыборкаРезультатовВыгрузкиДанных.РезультатВыполненияОбмена; - - КонецЕсли; - - СостоянияОбменовДанными.УзелИнформационнойБазы = УзелИнформационнойБазы; - - Возврат СостоянияОбменовДанными; -КонецФункции - -// Возвращает структуру с данными последнего обмена для заданного узла информационной базы и действия при обмене. -// -// Параметры: -// Нет. -// -// Возвращаемое значение: -// СостоянияОбменовДанными - Структура - структура с данными последнего обмена для заданного узла информационной базы. -// -Функция СостоянияОбменовДанными(Знач УзелИнформационнойБазы, ДействиеПриОбмене) Экспорт - - // Возвращаемое значение функции. - СостоянияОбменовДанными = Новый Структура; - СостоянияОбменовДанными.Вставить("ДатаНачала", Дата('00010101')); - СостоянияОбменовДанными.Вставить("ДатаОкончания", Дата('00010101')); - - ТекстЗапроса = " - |ВЫБРАТЬ - | ДатаНачала, - | ДатаОкончания - |ИЗ - | РегистрСведений.[СостоянияОбменовДанными] КАК СостоянияОбменовДанными - |ГДЕ - | СостоянияОбменовДанными.УзелИнформационнойБазы = &УзелИнформационнойБазы - | И СостоянияОбменовДанными.ДействиеПриОбмене = &ДействиеПриОбмене - |"; - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() - И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[СостоянияОбменовДанными]", "СостоянияОбменовДаннымиОбластейДанных"); - Иначе - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[СостоянияОбменовДанными]", "СостоянияОбменовДанными"); - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелИнформационнойБазы); - Запрос.УстановитьПараметр("ДействиеПриОбмене", ДействиеПриОбмене); - - Выборка = Запрос.Выполнить().Выбрать(); - - Если Выборка.Следующий() Тогда - - ЗаполнитьЗначенияСвойств(СостоянияОбменовДанными, Выборка); - - КонецЕсли; - - Возврат СостоянияОбменовДанными; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Инициализация сеанса - -// Получает массив всех планов обмена по которым выполняется обмен данными. -// Наличие обмена с каким либо планом обмена определяется по наличию у этого плана обмена узлов кроме предопределенного. -// -// Параметры: -// Нет. -// -// Возвращаемое значение: -// МассивПлановОбмена - Массив - массив строк (имен) всех планов обмена по которым выполняется обмен данными. -// -Функция ПолучитьИспользуемыеПланыОбмена() Экспорт - - // возвращаемое значение - МассивПлановОбмена = Новый Массив; - - // Список всех узлов в конфигурации. - СписокПлановОбмена = ОбменДаннымиПовтИсп.СписокПлановОбменаБСП(); - - Для Каждого Элемент Из СписокПлановОбмена Цикл - - ИмяПланаОбмена = Элемент.Значение; - - Если Не ПланОбменаНеСодержитУзлов(ИмяПланаОбмена) Тогда - - МассивПлановОбмена.Добавить(ИмяПланаОбмена); - - КонецЕсли; - - КонецЦикла; - - Возврат МассивПлановОбмена; - -КонецФункции - -// Получает таблицу правил регистрации объектов из информационной базы. -// -// Параметры: -// Нет. -// -// Возвращаемое значение: -// ПравилаРегистрацииОбъектов - ТаблицаЗначений - таблица общих правил регистрации объектов для МРО. -// -Функция ПолучитьПравилаРегистрацииОбъектов() Экспорт - - // Возвращаемое значение функции. - ПравилаРегистрацииОбъектов = ИнициализацияТаблицыПравилРегистрацииОбъектов(); - - ТекстЗапроса = " - |ВЫБРАТЬ - | ПравилаДляОбменаДанными.ПравилаЗачитанные КАК ПравилаЗачитанные - |ИЗ - | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными - |ГДЕ - | ПравилаДляОбменаДанными.ВидПравил = ЗНАЧЕНИЕ(Перечисление.ВидыПравилДляОбменаДанными.ПравилаРегистрацииОбъектов) - | И ПравилаДляОбменаДанными.ПравилаЗагружены - |"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - - ЗаполнитьЗначенияСвойствДляТаблицыЗначенийПРО(ПравилаРегистрацииОбъектов, Выборка.ПравилаЗачитанные.Получить()); - - КонецЦикла; - - Возврат ПравилаРегистрацииОбъектов; - -КонецФункции - -// Получает таблицу правил выборочной регистрации объектов из информационной базы. -// -// Параметры: -// Нет. -// -// Возвращаемое значение: -// ПравилаВыборочнойРегистрацииОбъектов - ТаблицаЗначений - таблица общих правил выборочной регистрации объектов для -// МРО. -// -Функция ПолучитьПравилаВыборочнойРегистрацииОбъектов() Экспорт - - // Возвращаемое значение функции. - ПравилаВыборочнойРегистрацииОбъектов = ИнициализацияТаблицыПравилВыборочнойРегистрацииОбъектов(); - - ТекстЗапроса = " - |ВЫБРАТЬ - | ПравилаДляОбменаДанными.ПравилаЗачитанные КАК ПравилаЗачитанные - |ИЗ - | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными - |ГДЕ - | ПравилаДляОбменаДанными.ВидПравил = ЗНАЧЕНИЕ(Перечисление.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов) - | И ПравилаДляОбменаДанными.ИспользоватьФильтрВыборочнойРегистрацииОбъектов - | И ПравилаДляОбменаДанными.ПравилаЗагружены - |"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - - СтруктураПравилОбмена = Выборка.ПравилаЗачитанные.Получить(); - - ЗаполнитьЗначенияСвойствДляТаблицыЗначений(ПравилаВыборочнойРегистрацииОбъектов, СтруктураПравилОбмена["ПравилаВыборочнойРегистрацииОбъектов"]); - - КонецЦикла; - - Возврат ПравилаВыборочнойРегистрацииОбъектов; - -КонецФункции - -// Для внутреннего использования. -// -Функция ИнициализацияТаблицыПравилРегистрацииОбъектов() Экспорт - - // Возвращаемое значение функции. - Правила = Новый ТаблицаЗначений; - - Колонки = Правила.Колонки; - - Колонки.Добавить("ОбъектМетаданныхИмя", Новый ОписаниеТипов("Строка")); - Колонки.Добавить("ИмяПланаОбмена", Новый ОписаниеТипов("Строка")); - - Колонки.Добавить("ИмяРеквизитаФлага", Новый ОписаниеТипов("Строка")); - - Колонки.Добавить("ТекстЗапроса", Новый ОписаниеТипов("Строка")); - Колонки.Добавить("СвойстваОбъекта", Новый ОписаниеТипов("Структура")); - - Колонки.Добавить("СвойстваОбъектаСтрокой", Новый ОписаниеТипов("Строка")); - - // Признаки того, что правила пустые. - Колонки.Добавить("ПравилоПоСвойствамОбъектаПустое", Новый ОписаниеТипов("Булево")); - - // обработчики событий - Колонки.Добавить("ПередОбработкой", Новый ОписаниеТипов("Строка")); - Колонки.Добавить("ПриОбработке", Новый ОписаниеТипов("Строка")); - Колонки.Добавить("ПриОбработкеДополнительный", Новый ОписаниеТипов("Строка")); - Колонки.Добавить("ПослеОбработки", Новый ОписаниеТипов("Строка")); - - Колонки.Добавить("ЕстьОбработчикПередОбработкой", Новый ОписаниеТипов("Булево")); - Колонки.Добавить("ЕстьОбработчикПриОбработке", Новый ОписаниеТипов("Булево")); - Колонки.Добавить("ЕстьОбработчикПриОбработкеДополнительный", Новый ОписаниеТипов("Булево")); - Колонки.Добавить("ЕстьОбработчикПослеОбработки", Новый ОписаниеТипов("Булево")); - - Колонки.Добавить("ОтборПоСвойствамОбъекта", Новый ОписаниеТипов("ДеревоЗначений")); - - // Поле для оперативного хранения данных из объекта или ссылки. - Колонки.Добавить("ОтборПоСвойствам", Новый ОписаниеТипов("ДеревоЗначений")); - - // добавляем индекс - Правила.Индексы.Добавить("ИмяПланаОбмена, ОбъектМетаданныхИмя"); - - Возврат Правила; - -КонецФункции - -// Для внутреннего использования. -// -Функция ИнициализацияТаблицыПравилВыборочнойРегистрацииОбъектов() Экспорт - - // Возвращаемое значение функции. - Правила = Новый ТаблицаЗначений; - - Колонки = Правила.Колонки; - - Колонки.Добавить("Порядок", Новый ОписаниеТипов("Число")); - Колонки.Добавить("ИмяОбъекта", Новый ОписаниеТипов("Строка")); - Колонки.Добавить("ИмяПланаОбмена", Новый ОписаниеТипов("Строка")); - Колонки.Добавить("ИмяТабличнойЧасти", Новый ОписаниеТипов("Строка")); - Колонки.Добавить("РеквизитыРегистрации", Новый ОписаниеТипов("Строка")); - Колонки.Добавить("СтруктураРеквизитовРегистрации", Новый ОписаниеТипов("Структура")); - - // добавляем индекс - Правила.Индексы.Добавить("ИмяПланаОбмена, ИмяОбъекта"); - - Возврат Правила; - -КонецФункции - -// Для внутреннего использования. -// -Функция ПланОбменаНеСодержитУзлов(Знач ИмяПланаОбмена) - - ТекстЗапроса = " - |ВЫБРАТЬ ПЕРВЫЕ 1 1 - |ИЗ - | ПланОбмена." + ИмяПланаОбмена + " КАК ПланОбмена - |ГДЕ - | НЕ ПланОбмена.ЭтотУзел - |"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - - Возврат Запрос.Выполнить().Пустой() - -КонецФункции - -// Для внутреннего использования. -// -Процедура ЗаполнитьЗначенияСвойствДляТаблицыЗначенийПРО(ТаблицаПриемник, ТаблицаИсточник) - - Для Каждого СтрокаИсточника Из ТаблицаИсточник Цикл - - ЗаполнитьЗначенияСвойств(ТаблицаПриемник.Добавить(), СтрокаИсточника); - - КонецЦикла; - -КонецПроцедуры - -// Для внутреннего использования. -// -Процедура ЗаполнитьЗначенияСвойствДляТаблицыЗначений(ТаблицаПриемник, ТаблицаИсточник) - - Для Каждого СтрокаИсточника Из ТаблицаИсточник Цикл - - ЗаполнитьЗначенияСвойств(ТаблицаПриемник.Добавить(), СтрокаИсточника); - - КонецЦикла; - -КонецПроцедуры - -// Для внутреннего использования. -// -Функция ОписаниеПравилСинхронизацииДанных(Знач УзелИнформационнойБазы) Экспорт - - ВерсияКорреспондента = ВерсияКорреспондента(УзелИнформационнойБазы); - - ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); - - Настройка = ЗначенияНастроекОтборовНаУзле(УзелИнформационнойБазы, ВерсияКорреспондента); - - Возврат ОписаниеОграниченийПередачиДанных(ИмяПланаОбмена, Настройка, ВерсияКорреспондента, СохраненныйВариантНастройкиУзлаПланаОбмена(УзелИнформационнойБазы)); - -КонецФункции - -// Для внутреннего использования. -// -Функция ЗначенияНастроекОтборовНаУзле(Знач УзелИнформационнойБазы, Знач ВерсияКорреспондента) - - Результат = Новый Структура; - - УзелИнформационнойБазыОбъект = УзелИнформационнойБазы.ПолучитьОбъект(); - - ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); - - НастройкаОтборовНаУзле = НастройкаОтборовНаУзле(ИмяПланаОбмена, ВерсияКорреспондента, , СохраненныйВариантНастройкиУзлаПланаОбмена(УзелИнформационнойБазы)); - - Для Каждого Настройка Из НастройкаОтборовНаУзле Цикл - - Если ТипЗнч(Настройка.Значение) = Тип("Структура") Тогда - - ТабличнаяЧасть = Новый Структура; - - Для Каждого Колонка Из Настройка.Значение Цикл - - ТабличнаяЧасть.Вставить(Колонка.Ключ, УзелИнформационнойБазыОбъект[Настройка.Ключ].ВыгрузитьКолонку(Колонка.Ключ)); - - КонецЦикла; - - Результат.Вставить(Настройка.Ключ, ТабличнаяЧасть); - - Иначе - - Результат.Вставить(Настройка.Ключ, УзелИнформационнойБазыОбъект[Настройка.Ключ]); - - КонецЕсли; - - КонецЦикла; - - Возврат Результат; - -КонецФункции - -// Для внутреннего использования. -Процедура УстановитьРежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском(Знач Свойство, Знач ВключитьРежим) Экспорт - - // Перед вызовом требуется установить привилегированный режим. - - Если ЭтоПодчиненныйУзелРИБ() Тогда - - НоваяСтруктура = Новый Структура(ПараметрыСеанса.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском); - Если ВключитьРежим Тогда - Если НЕ НоваяСтруктура.Свойство(Свойство) Тогда - НоваяСтруктура.Вставить(Свойство); - КонецЕсли; - Иначе - Если НоваяСтруктура.Свойство(Свойство) Тогда - НоваяСтруктура.Удалить(Свойство); - КонецЕсли; - КонецЕсли; - - ПараметрыСеанса.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском = - Новый ФиксированнаяСтруктура(НоваяСтруктура); - Иначе - - ПараметрыСеанса.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском = Новый ФиксированнаяСтруктура; - - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Инициализация структуры настроек обмена данными. - -// Выполняет инициализацию подсистемы обмена данными для выполнения процесса обмена. -// -// Параметры: -// -// Возвращаемое значение: -// СтруктураНастроекОбмена - Структура - структура со всеми необходимыми данными и объектами для выполнения обмена. -// -Функция ПолучитьСтруктуруНастроекОбменаДляУзлаИнформационнойБазы( - УзелИнформационнойБазы, - ДействиеПриОбмене, - ВидТранспортаСообщенийОбмена, - ИспользоватьНастройкиТранспорта = Истина) Экспорт - - // Возвращаемое значение функции. - СтруктураНастроекОбмена = СтруктураНастроекОбменаБазовая(); - - СтруктураНастроекОбмена.УзелИнформационнойБазы = УзелИнформационнойБазы; - СтруктураНастроекОбмена.ДействиеПриОбмене = ДействиеПриОбмене; - СтруктураНастроекОбмена.ВидТранспортаОбмена = ВидТранспортаСообщенийОбмена; - СтруктураНастроекОбмена.ЭтоОбменВРИБ = ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(УзелИнформационнойБазы); - - ВыполнитьИнициализациюСтруктурыНастроекОбменаДляУзлаИнформационнойБазы(СтруктураНастроекОбмена, ИспользоватьНастройкиТранспорта); - - УстановитьНастройкиРежимаОтладкиДляСтруктуры(СтруктураНастроекОбмена); - - // Проверяем структуру настроек на валидность значений для выполнения обмена. Ошибки фиксируем в ЖР. - ВыполнитьПроверкуСтруктурыОбменаНаВалидность(СтруктураНастроекОбмена, ИспользоватьНастройкиТранспорта); - - // Если настройки содержат ошибки, то выходим. - Если СтруктураНастроекОбмена.Отказ Тогда - Возврат СтруктураНастроекОбмена; - КонецЕсли; - - Если ИспользоватьНастройкиТранспорта Тогда - - // Инициализируем обработку транспорта сообщений обмена. - ВыполнитьИнициализациюОбработкиТранспортаСообщенийОбмена(СтруктураНастроекОбмена); - - КонецЕсли; - - // Инициализируем обработку обмена данными. - Если СтруктураНастроекОбмена.ЭтоОбменВРИБ Тогда - - ВыполнитьИнициализациюОбработкиОбмена(СтруктураНастроекОбмена); - - ИначеЕсли СтруктураНастроекОбмена.ОбменПоПравиламКонвертацииОбъектов Тогда - - ВыполнитьИнициализациюОбработкиОбменаПоПравиламКонвертации(СтруктураНастроекОбмена); - - КонецЕсли; - - Возврат СтруктураНастроекОбмена; -КонецФункции - -// Для внутреннего использования. -// -Функция ПолучитьСтруктуруНастроекОбменаДляВнешнегоСоединения(УзелИнформационнойБазы, ДействиеПриОбмене, КоличествоЭлементовВТранзакции) - - // Возвращаемое значение функции. - СтруктураНастроекОбмена = СтруктураНастроекОбменаБазовая(); - - СтруктураНастроекОбмена.УзелИнформационнойБазы = УзелИнформационнойБазы; - СтруктураНастроекОбмена.ДействиеПриОбмене = ДействиеПриОбмене; - СтруктураНастроекОбмена.ЭтоОбменВРИБ = ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(УзелИнформационнойБазы); - - СтруктураСвойств = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СтруктураНастроекОбмена.УзелИнформационнойБазы, "Код, Наименование"); - - СтруктураНастроекОбмена.УзелИнформационнойБазыКод = СтруктураСвойств.Код; - СтруктураНастроекОбмена.УзелИнформационнойБазыНаименование = СтруктураСвойств.Наименование; - - СтруктураНастроекОбмена.НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспорта(СтруктураНастроекОбмена.УзелИнформационнойБазы); - - Если КоличествоЭлементовВТранзакции = Неопределено Тогда - КоличествоЭлементовВТранзакции = КоличествоЭлементовВТранзакцииВыполняемогоДействия(ДействиеПриОбмене); - КонецЕсли; - - СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции = КоличествоЭлементовВТранзакции; - - // ВЫЧИСЛЯЕМЫЕ ЗНАЧЕНИЯ - СтруктураНастроекОбмена.ПроизводитьЗагрузкуДанных = (СтруктураНастроекОбмена.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных); - СтруктураНастроекОбмена.ПроизводитьВыгрузкуДанных = (СтруктураНастроекОбмена.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных); - - СтруктураНастроекОбмена.ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(СтруктураНастроекОбмена.УзелИнформационнойБазы); - - СтруктураНастроекОбмена.ТекущийУзелПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(СтруктураНастроекОбмена.ИмяПланаОбмена); - СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтруктураНастроекОбмена.ТекущийУзелПланаОбмена, "Код"); - - // Получаем ключ сообщения для ЖР. - СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = ПолучитьКлючСообщенияЖурналаРегистрации(СтруктураНастроекОбмена.УзелИнформационнойБазы, СтруктураНастроекОбмена.ДействиеПриОбмене); - - СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM; - - УстановитьНастройкиРежимаОтладкиДляСтруктуры(СтруктураНастроекОбмена); - - // Проверяем структуру настроек на валидность значений для выполнения обмена. Ошибки фиксируем в ЖР. - ВыполнитьПроверкуСтруктурыОбменаНаВалидность(СтруктураНастроекОбмена); - - // Если настройки содержат ошибки, то выходим. - Если СтруктураНастроекОбмена.Отказ Тогда - Возврат СтруктураНастроекОбмена; - КонецЕсли; - - // Инициализируем обработку обмена данными. - ВыполнитьИнициализациюОбработкиОбменаПоПравиламКонвертации(СтруктураНастроекОбмена); - - Возврат СтруктураНастроекОбмена; -КонецФункции - -// Выполняет инициализацию подсистемы обмена данными для выполнения процесса обмена. -// -// Параметры: -// -// Возвращаемое значение: -// СтруктураНастроекОбмена - Структура - структура со всеми необходимыми данными и объектами для выполнения обмена. -// -Функция ПолучитьСтруктуруНастроекОбмена(НастройкаВыполненияОбмена, НомерСтроки) Экспорт - - // Возвращаемое значение функции. - СтруктураНастроекОбмена = СтруктураНастроекОбменаБазовая(); - - ВыполнитьИнициализациюСтруктурыНастроекОбмена(СтруктураНастроекОбмена, НастройкаВыполненияОбмена, НомерСтроки); - - Если СтруктураНастроекОбмена.Отказ Тогда - Возврат СтруктураНастроекОбмена; - КонецЕсли; - - УстановитьНастройкиРежимаОтладкиДляСтруктуры(СтруктураНастроекОбмена); - - // Проверяем структуру настроек на валидность значений для выполнения обмена. Ошибки фиксируем в ЖР. - ВыполнитьПроверкуСтруктурыОбменаНаВалидность(СтруктураНастроекОбмена); - - // Если настройки содержат ошибки, то выходим. - Если СтруктураНастроекОбмена.Отказ Тогда - Возврат СтруктураНастроекОбмена; - КонецЕсли; - - // Инициализируем обработку транспорта сообщений обмена. - ВыполнитьИнициализациюОбработкиТранспортаСообщенийОбмена(СтруктураНастроекОбмена); - - // Инициализируем обработку обмена данными. - Если СтруктураНастроекОбмена.ЭтоОбменВРИБ Тогда - - ВыполнитьИнициализациюОбработкиОбмена(СтруктураНастроекОбмена); - - ИначеЕсли СтруктураНастроекОбмена.ОбменПоПравиламКонвертацииОбъектов Тогда - - ВыполнитьИнициализациюОбработкиОбменаПоПравиламКонвертации(СтруктураНастроекОбмена); - - КонецЕсли; - - Возврат СтруктураНастроекОбмена; -КонецФункции - -// Получает структуру настроек транспорта для выполнения обмена данными. -// -Функция ПолучитьСтруктуруНастроекТранспорта(УзелИнформационнойБазы, ВидТранспортаСообщенийОбмена) Экспорт - - // Возвращаемое значение функции. - СтруктураНастроекОбмена = СтруктураНастроекОбменаБазовая(); - - СтруктураНастроекОбмена.УзелИнформационнойБазы = УзелИнформационнойБазы; - СтруктураНастроекОбмена.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных; - СтруктураНастроекОбмена.ВидТранспортаОбмена = ВидТранспортаСообщенийОбмена; - - ВыполнитьИнициализациюСтруктурыНастроекОбменаДляУзлаИнформационнойБазы(СтруктураНастроекОбмена, Истина); - - // Проверяем структуру настроек на валидность значений для выполнения обмена. Ошибки фиксируем в ЖР. - ВыполнитьПроверкуСтруктурыОбменаНаВалидность(СтруктураНастроекОбмена); - - // Если настройки содержат ошибки, то выходим. - Если СтруктураНастроекОбмена.Отказ Тогда - Возврат СтруктураНастроекОбмена; - КонецЕсли; - - // Инициализируем обработку транспорта сообщений обмена. - ВыполнитьИнициализациюОбработкиТранспортаСообщенийОбмена(СтруктураНастроекОбмена); - - Возврат СтруктураНастроекОбмена; -КонецФункции - -// Для внутреннего использования. -// -Функция СтруктураНастроекОбменаДляСеансаИнтерактивнойЗагрузки(Знач УзелИнформационнойБазы, Знач ИмяФайлаСообщенияОбмена) Экспорт - - Возврат ОбменДаннымиПовтИсп.СтруктураНастроекОбменаДляСеансаИнтерактивнойЗагрузки(УзелИнформационнойБазы, ИмяФайлаСообщенияОбмена); - -КонецФункции - -// Для внутреннего использования. -// -Процедура ВыполнитьИнициализациюСтруктурыНастроекОбмена(СтруктураНастроекОбмена, НастройкаВыполненияОбмена, НомерСтроки) - - ТекстЗапроса = " - |ВЫБРАТЬ - | НастройкиВыполненияОбменаНастройкиОбмена.УзелИнформационнойБазы КАК УзелИнформационнойБазы, - | НастройкиВыполненияОбменаНастройкиОбмена.УзелИнформационнойБазы.Код КАК УзелИнформационнойБазыКод, - | НастройкиВыполненияОбменаНастройкиОбмена.ВидТранспортаОбмена КАК ВидТранспортаОбмена, - | НастройкиВыполненияОбменаНастройкиОбмена.ВыполняемоеДействие КАК ДействиеПриОбмене, - | НастройкиВыполненияОбменаНастройкиОбмена.Ссылка КАК НастройкаВыполненияОбмена, - | НастройкиВыполненияОбменаНастройкиОбмена.Ссылка.Наименование КАК НастройкаВыполненияОбменаНаименование, - | ВЫБОР - | КОГДА НастройкиВыполненияОбменаНастройкиОбмена.ВыполняемоеДействие = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ЗагрузкаДанных) ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ПроизводитьЗагрузкуДанных, - | ВЫБОР - | КОГДА НастройкиВыполненияОбменаНастройкиОбмена.ВыполняемоеДействие = ЗНАЧЕНИЕ(Перечисление.ДействияПриОбмене.ВыгрузкаДанных) ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ПроизводитьВыгрузкуДанных - |ИЗ - | Справочник.СценарииОбменовДанными.НастройкиОбмена КАК НастройкиВыполненияОбменаНастройкиОбмена - |ГДЕ - | НастройкиВыполненияОбменаНастройкиОбмена.Ссылка = &НастройкаВыполненияОбмена - | И НастройкиВыполненияОбменаНастройкиОбмена.НомерСтроки = &НомерСтроки - |"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("НастройкаВыполненияОбмена", НастройкаВыполненияОбмена); - Запрос.УстановитьПараметр("НомерСтроки", НомерСтроки); - - Выборка = Запрос.Выполнить().Выбрать(); - Выборка.Следующий(); - - // Заполняем значения свойств структуры. - ЗаполнитьЗначенияСвойств(СтруктураНастроекОбмена, Выборка); - - СтруктураНастроекОбмена.ЭтоОбменВРИБ = ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(СтруктураНастроекОбмена.УзелИнформационнойБазы); - - СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = НСтр("ru = 'Обмен данными'"); - - // Выполняем проверку задания основных полей структуры настроек обмена. - ВыполнитьПроверкуОсновныхПолейСтруктурыНастроекОбмена(СтруктураНастроекОбмена); - - Если СтруктураНастроекОбмена.Отказ Тогда - Возврат; - КонецЕсли; - - // - СтруктураНастроекОбмена.ИмяПланаОбмена = СтруктураНастроекОбмена.УзелИнформационнойБазы.Метаданные().Имя; - СтруктураНастроекОбмена.ОбменПоПравиламКонвертацииОбъектов = ОбменДаннымиПовтИсп.ЭтоУзелУниверсальногоОбменаДанными(СтруктураНастроекОбмена.УзелИнформационнойБазы); - - СтруктураНастроекОбмена.ТекущийУзелПланаОбмена = ПланыОбмена[СтруктураНастроекОбмена.ИмяПланаОбмена].ЭтотУзел(); - СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод = СтруктураНастроекОбмена.ТекущийУзелПланаОбмена.Код; - - СтруктураНастроекОбмена.ИмяОбработкиТранспортаСообщенийОбмена = ИмяОбработкиТранспортаСообщенийОбмена(СтруктураНастроекОбмена.ВидТранспортаОбмена); - - // Получаем ключ сообщения для ЖР. - СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = ПолучитьКлючСообщенияЖурналаРегистрации(СтруктураНастроекОбмена.УзелИнформационнойБазы, СтруктураНастроекОбмена.ДействиеПриОбмене); - - // - СтруктураНастроекОбмена.НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспорта(СтруктураНастроекОбмена.УзелИнформационнойБазы, СтруктураНастроекОбмена.ВидТранспортаОбмена); - - СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции = КоличествоЭлементовВТранзакцииВыполняемогоДействия(СтруктураНастроекОбмена.ДействиеПриОбмене); - -КонецПроцедуры - -// Для внутреннего использования. -// -Процедура ВыполнитьИнициализациюСтруктурыНастроекОбменаДляУзлаИнформационнойБазы( - СтруктураНастроекОбмена, - ИспользоватьНастройкиТранспорта) - - СтруктураСвойств = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СтруктураНастроекОбмена.УзелИнформационнойБазы, "Код, Наименование"); - - СтруктураНастроекОбмена.УзелИнформационнойБазыКод = СтруктураСвойств.Код; - СтруктураНастроекОбмена.УзелИнформационнойБазыНаименование = СтруктураСвойств.Наименование; - - // Получаем настройки транспорта обмена. - СтруктураНастроекОбмена.НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.НастройкиТранспорта(СтруктураНастроекОбмена.УзелИнформационнойБазы); - - Если СтруктураНастроекОбмена.НастройкиТранспорта <> Неопределено Тогда - - Если ИспользоватьНастройкиТранспорта Тогда - - // Если не указан вид транспорта, то используем значение по умолчанию. - Если СтруктураНастроекОбмена.ВидТранспортаОбмена = Неопределено Тогда - СтруктураНастроекОбмена.ВидТранспортаОбмена = СтруктураНастроекОбмена.НастройкиТранспорта.ВидТранспортаСообщенийОбменаПоУмолчанию; - КонецЕсли; - - // Если вид транспорта не задан, то используем транспорт FILE. - Если Не ЗначениеЗаполнено(СтруктураНастроекОбмена.ВидТранспортаОбмена) Тогда - - СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.FILE; - - КонецЕсли; - - СтруктураНастроекОбмена.ИмяОбработкиТранспортаСообщенийОбмена = ИмяОбработкиТранспортаСообщенийОбмена(СтруктураНастроекОбмена.ВидТранспортаОбмена); - - КонецЕсли; - - СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции = КоличествоЭлементовВТранзакцииВыполняемогоДействия(СтруктураНастроекОбмена.ДействиеПриОбмене); - - Если СтруктураНастроекОбмена.НастройкиТранспорта.Свойство("WSИспользоватьПередачуБольшогоОбъемаДанных") Тогда - СтруктураНастроекОбмена.ИспользоватьПередачуБольшогоОбъемаДанных = СтруктураНастроекОбмена.НастройкиТранспорта.WSИспользоватьПередачуБольшогоОбъемаДанных; - КонецЕсли; - - КонецЕсли; - - // ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ - СтруктураНастроекОбмена.НастройкаВыполненияОбмена = Неопределено; - СтруктураНастроекОбмена.НастройкаВыполненияОбменаНаименование = ""; - - // ВЫЧИСЛЯЕМЫЕ ЗНАЧЕНИЯ - СтруктураНастроекОбмена.ПроизводитьЗагрузкуДанных = (СтруктураНастроекОбмена.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных); - СтруктураНастроекОбмена.ПроизводитьВыгрузкуДанных = (СтруктураНастроекОбмена.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных); - - СтруктураНастроекОбмена.ИмяПланаОбмена = СтруктураНастроекОбмена.УзелИнформационнойБазы.Метаданные().Имя; - СтруктураНастроекОбмена.ОбменПоПравиламКонвертацииОбъектов = ОбменДаннымиПовтИсп.ЭтоУзелУниверсальногоОбменаДанными(СтруктураНастроекОбмена.УзелИнформационнойБазы); - - СтруктураНастроекОбмена.ТекущийУзелПланаОбмена = ПланыОбмена[СтруктураНастроекОбмена.ИмяПланаОбмена].ЭтотУзел(); - СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод = СтруктураНастроекОбмена.ТекущийУзелПланаОбмена.Код; - - // Получаем ключ сообщения для ЖР. - СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации = ПолучитьКлючСообщенияЖурналаРегистрации(СтруктураНастроекОбмена.УзелИнформационнойБазы, СтруктураНастроекОбмена.ДействиеПриОбмене); - -КонецПроцедуры - -// Для внутреннего использования. -// -Функция СтруктураНастроекОбменаБазовая() - - СтруктураНастроекОбмена = Новый Структура; - - // Структура настроек по полям запроса. - - СтруктураНастроекОбмена.Вставить("ДатаНачала"); - СтруктураНастроекОбмена.Вставить("ДатаОкончания"); - - СтруктураНастроекОбмена.Вставить("НомерСтроки"); - СтруктураНастроекОбмена.Вставить("НастройкаВыполненияОбмена"); - СтруктураНастроекОбмена.Вставить("НастройкаВыполненияОбменаНаименование"); - СтруктураНастроекОбмена.Вставить("УзелИнформационнойБазы"); - СтруктураНастроекОбмена.Вставить("УзелИнформационнойБазыКод", ""); - СтруктураНастроекОбмена.Вставить("УзелИнформационнойБазыНаименование", ""); - СтруктураНастроекОбмена.Вставить("ВидТранспортаОбмена"); - СтруктураНастроекОбмена.Вставить("ДействиеПриОбмене"); - СтруктураНастроекОбмена.Вставить("КоличествоЭлементовВТранзакции", 1); // На каждый элемент отдельная транзакция. - СтруктураНастроекОбмена.Вставить("ПроизводитьЗагрузкуДанных", Ложь); - СтруктураНастроекОбмена.Вставить("ПроизводитьВыгрузкуДанных", Ложь); - СтруктураНастроекОбмена.Вставить("ИспользоватьПередачуБольшогоОбъемаДанных", Ложь); - - // Структура настроек дополнительная. - СтруктураНастроекОбмена.Вставить("Отказ", Ложь); - СтруктураНастроекОбмена.Вставить("ЭтоОбменВРИБ", Ложь); - - СтруктураНастроекОбмена.Вставить("ОбработкаОбменаДанными"); - СтруктураНастроекОбмена.Вставить("ОбработкаТранспортаСообщенийОбмена"); - - СтруктураНастроекОбмена.Вставить("ИмяПланаОбмена"); - СтруктураНастроекОбмена.Вставить("ТекущийУзелПланаОбмена"); - СтруктураНастроекОбмена.Вставить("ТекущийУзелПланаОбменаКод"); - - СтруктураНастроекОбмена.Вставить("ОбменПоПравиламКонвертацииОбъектов", Ложь); - - СтруктураНастроекОбмена.Вставить("ИмяОбработкиТранспортаСообщенийОбмена"); - - СтруктураНастроекОбмена.Вставить("КлючСообщенияЖурналаРегистрации"); - - СтруктураНастроекОбмена.Вставить("НастройкиТранспорта"); - - СтруктураНастроекОбмена.Вставить("ПравилаКонвертацииОбъектов"); - СтруктураНастроекОбмена.Вставить("ПравилаЗагружены", Ложь); - - СтруктураНастроекОбмена.Вставить("ОтладкаОбработчиковВыгрузки ", Ложь); - СтруктураНастроекОбмена.Вставить("ОтладкаОбработчиковЗагрузки", Ложь); - СтруктураНастроекОбмена.Вставить("ИмяФайлаВнешнейОбработкиОтладкиВыгрузки", ""); - СтруктураНастроекОбмена.Вставить("ИмяФайлаВнешнейОбработкиОтладкиЗагрузки", ""); - СтруктураНастроекОбмена.Вставить("РежимПротоколированияОбменаДанными", Ложь); - СтруктураНастроекОбмена.Вставить("ИмяФайлаПротоколаОбмена", ""); - СтруктураНастроекОбмена.Вставить("ПродолжитьПриОшибке", Ложь); - - // Структура для регистрации событий в ЖР. - СтруктураНастроекОбмена.Вставить("РезультатВыполненияОбмена"); - СтруктураНастроекОбмена.Вставить("ДействиеПриОбмене"); - СтруктураНастроекОбмена.Вставить("КоличествоОбъектовОбработано", 0); - СтруктураНастроекОбмена.Вставить("СообщениеПриОбмене", ""); - СтруктураНастроекОбмена.Вставить("СтрокаСообщенияОбОшибке", ""); - - Возврат СтруктураНастроекОбмена; -КонецФункции - -// Для внутреннего использования. -// -Процедура ВыполнитьПроверкуОсновныхПолейСтруктурыНастроекОбмена(СтруктураНастроекОбмена) - - Если НЕ ЗначениеЗаполнено(СтруктураНастроекОбмена.УзелИнформационнойБазы) Тогда - - // Узел информационной базы не должен быть пустым. - СтрокаСообщенияОбОшибке = НСтр( - "ru = 'Не задан узел информационной базы с которым нужно производить обмен информацией. Обмен отменен.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); - ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); - - ИначеЕсли НЕ ЗначениеЗаполнено(СтруктураНастроекОбмена.ВидТранспортаОбмена) Тогда - - СтрокаСообщенияОбОшибке = НСтр("ru = 'Не задан вид транспорта обмена. Обмен отменен.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); - - ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); - - ИначеЕсли НЕ ЗначениеЗаполнено(СтруктураНастроекОбмена.ДействиеПриОбмене) Тогда - - СтрокаСообщенияОбОшибке = НСтр("ru = 'Не указано выполняемое действие (выгрузка / загрузка). Обмен отменен.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); - - ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); - - КонецЕсли; - -КонецПроцедуры - -// Для внутреннего использования. -// -Процедура ВыполнитьПроверкуСтруктурыОбменаНаВалидность(СтруктураНастроекОбмена, ИспользоватьНастройкиТранспорта = Истина) - - Если НЕ ЗначениеЗаполнено(СтруктураНастроекОбмена.УзелИнформационнойБазы) Тогда - - // Узел информационной базы не должен быть пустым. - СтрокаСообщенияОбОшибке = НСтр( - "ru = 'Не задан узел информационной базы с которым нужно производить обмен информацией. Обмен отменен.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); - ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); - - ИначеЕсли ИспользоватьНастройкиТранспорта И НЕ ЗначениеЗаполнено(СтруктураНастроекОбмена.ВидТранспортаОбмена) Тогда - - СтрокаСообщенияОбОшибке = НСтр("ru = 'Не задан вид транспорта обмена. Обмен отменен.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); - - ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); - - ИначеЕсли НЕ ЗначениеЗаполнено(СтруктураНастроекОбмена.ДействиеПриОбмене) Тогда - - СтрокаСообщенияОбОшибке = НСтр("ru = 'Не указано выполняемое действие (выгрузка / загрузка). Обмен отменен.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); - - ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); - - ИначеЕсли СтруктураНастроекОбмена.УзелИнформационнойБазы.ПометкаУдаления Тогда - - // Узел информационной базы не должен быть помечен на удаление. - СтрокаСообщенияОбОшибке = НСтр("ru = 'Узел информационной базы помечен на удаление. Обмен отменен.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); - - ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); - - ИначеЕсли СтруктураНастроекОбмена.УзелИнформационнойБазы = СтруктураНастроекОбмена.ТекущийУзелПланаОбмена Тогда - - // Сами с собой не обмениваемся. - СтрокаСообщенияОбОшибке = НСтр( - "ru = 'Нельзя организовать обмен данными с текущим узлом информационной базы. Обмен отменен.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); - - ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); - - ИначеЕсли ПустаяСтрока(СтруктураНастроекОбмена.УзелИнформационнойБазыКод) - ИЛИ ПустаяСтрока(СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод) Тогда - - // У узлов участвующих в обмене должен быть не пустой код. - СтрокаСообщенияОбОшибке = НСтр("ru = 'Один из узлов обмена имеет пустой код. Обмен отменен.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); - - ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); - - ИначеЕсли СтруктураНастроекОбмена.ОтладкаОбработчиковВыгрузки Тогда - - ФайлОбработкиВыгрузки = Новый Файл(СтруктураНастроекОбмена.ИмяФайлаВнешнейОбработкиОтладкиВыгрузки); - - Если Не ФайлОбработкиВыгрузки.Существует() Тогда - - СтрокаСообщенияОбОшибке = НСтр("ru = 'Файл внешней обработки для отладки выгрузки не существует. Обмен отменен.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); - - ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); - - КонецЕсли; - - ИначеЕсли СтруктураНастроекОбмена.ОтладкаОбработчиковЗагрузки Тогда - - ФайлОбработкиЗагрузки = Новый Файл(СтруктураНастроекОбмена.ИмяФайлаВнешнейОбработкиОтладкиЗагрузки); - - Если Не ФайлОбработкиЗагрузки.Существует() Тогда - - СтрокаСообщенияОбОшибке = НСтр("ru = 'Файл внешней обработки для отладки загрузки не существует. Обмен отменен.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); - - ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -// Для внутреннего использования. -// -Процедура ВыполнитьИнициализациюОбработкиОбмена(СтруктураНастроекОбмена) - - // Если настройки содержат ошибки, то не производим инициализацию. - Если СтруктураНастроекОбмена.Отказ Тогда - Возврат; - КонецЕсли; - - // создание - ОбработкаОбменаДанными = Обработки.КонвертацияОбъектовРаспределенныхИнформационныхБаз.Создать(); - - // инициализация свойств - ОбработкаОбменаДанными.УзелИнформационнойБазы = СтруктураНастроекОбмена.УзелИнформационнойБазы; - ОбработкаОбменаДанными.КоличествоЭлементовВТранзакции = СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции; - ОбработкаОбменаДанными.КлючСообщенияЖурналаРегистрации = СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации; - - СтруктураНастроекОбмена.Вставить("ОбработкаОбменаДанными", ОбработкаОбменаДанными); - -КонецПроцедуры - -// Для внутреннего использования. -// -Процедура ВыполнитьИнициализациюОбработкиОбменаПоПравиламКонвертации(СтруктураНастроекОбмена) - - Перем ОбработкаОбменаДанными; - - // Если настройки содержат ошибки, то не производим инициализацию. - Если СтруктураНастроекОбмена.Отказ Тогда - Возврат; - КонецЕсли; - - Если СтруктураНастроекОбмена.ПроизводитьВыгрузкуДанных Тогда - - ОбработкаОбменаДанными = ПолучитьОбработкуОбменаДаннымиДляВыгрузки(СтруктураНастроекОбмена); - - ИначеЕсли СтруктураНастроекОбмена.ПроизводитьЗагрузкуДанных Тогда - - ОбработкаОбменаДанными = ПолучитьОбработкуОбменаДаннымиДляЗагрузки(СтруктураНастроекОбмена); - - КонецЕсли; - - СтруктураНастроекОбмена.Вставить("ОбработкаОбменаДанными", ОбработкаОбменаДанными); - -КонецПроцедуры - -// Для внутреннего использования. -// -Процедура ВыполнитьИнициализациюОбработкиТранспортаСообщенийОбмена(СтруктураНастроекОбмена) - - // Создаем обработку транспорта. - ОбработкаТранспортаСообщенийОбмена = Обработки[СтруктураНастроекОбмена.ИмяОбработкиТранспортаСообщенийОбмена].Создать(); - - ЭтоИсходящееСообщение = СтруктураНастроекОбмена.ПроизводитьВыгрузкуДанных; - - // Заполняем общие реквизиты, одинаковые для всех обработок транспорта. - ОбработкаТранспортаСообщенийОбмена.ШаблонИмениФайлаСообщения = ПолучитьШаблонИмениФайлаСообщения(СтруктураНастроекОбмена.ТекущийУзелПланаОбмена, СтруктураНастроекОбмена.УзелИнформационнойБазы, ЭтоИсходящееСообщение); - - // Заполняем настойки транспорта, различные для каждой обработки транспорта. - ЗаполнитьЗначенияСвойств(ОбработкаТранспортаСообщенийОбмена, СтруктураНастроекОбмена.НастройкиТранспорта); - - // Инициализируем транспорт - ОбработкаТранспортаСообщенийОбмена.Инициализация(); - - СтруктураНастроекОбмена.Вставить("ОбработкаТранспортаСообщенийОбмена", ОбработкаТранспортаСообщенийОбмена); - -КонецПроцедуры - -// Для внутреннего использования. -// -Функция ПолучитьОбработкуОбменаДаннымиДляВыгрузки(СтруктураНастроекОбмена) - - МенеджерОбработки = ?(ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(СтруктураНастроекОбмена.УзелИнформационнойБазы), - Обработки.КонвертацияОбъектовXDTO, - Обработки.КонвертацияОбъектовИнформационныхБаз); - - ОбработкаОбменаДанными = МенеджерОбработки.Создать(); - - ОбработкаОбменаДанными.РежимОбмена = "Выгрузка"; - - // Если обработка поддерживает механизм правил конвертации. - Если ОбработкаОбменаДанными.Метаданные().Реквизиты.Найти("ИмяФайлаПравилОбмена") <> Неопределено Тогда - УстановитьПравилаОбменаВыгрузкиДанных(ОбработкаОбменаДанными, СтруктураНастроекОбмена); - ОбработкаОбменаДанными.НеВыгружатьОбъектыПоСсылкам = Истина; - ОбработкаОбменаДанными.ИмяФайлаПравилОбмена = "1"; - КонецЕсли; - - // Если обработка поддерживает механизм фонового обмена. - Если ОбработкаОбменаДанными.Метаданные().Реквизиты.Найти("УзелДляФоновогоОбмена") <> Неопределено Тогда - ОбработкаОбменаДанными.УзелДляФоновогоОбмена = Неопределено; - КонецЕсли; - - ОбработкаОбменаДанными.УзелДляОбмена = СтруктураНастроекОбмена.УзелИнформационнойБазы; - - УстановитьОбщиеПараметрыДляОбработкиОбменаДанными(ОбработкаОбменаДанными, СтруктураНастроекОбмена); - - Возврат ОбработкаОбменаДанными; - -КонецФункции - -// Для внутреннего использования. -// -Функция ПолучитьОбработкуОбменаДаннымиДляЗагрузки(СтруктураНастроекОбмена) - - МенеджерОбработки = ?(ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(СтруктураНастроекОбмена.УзелИнформационнойБазы), - Обработки.КонвертацияОбъектовXDTO, - Обработки.КонвертацияОбъектовИнформационныхБаз); - - ОбработкаОбменаДанными = МенеджерОбработки.Создать(); - - ОбработкаОбменаДанными.РежимОбмена = "Загрузка"; - ОбработкаОбменаДанными.УзелОбменаЗагрузкаДанных = СтруктураНастроекОбмена.УзелИнформационнойБазы; - - Если ОбработкаОбменаДанными.Метаданные().Реквизиты.Найти("ИмяФайлаПравилОбмена") <> Неопределено Тогда - УстановитьПравилаОбменаЗагрузкиДанных(ОбработкаОбменаДанными, СтруктураНастроекОбмена); - КонецЕсли; - - УстановитьОбщиеПараметрыДляОбработкиОбменаДанными(ОбработкаОбменаДанными, СтруктураНастроекОбмена); - - Возврат ОбработкаОбменаДанными - -КонецФункции - -// Для внутреннего использования. -// -Процедура УстановитьОбщиеПараметрыДляОбработкиОбменаДанными(ОбработкаОбменаДанными, СтруктураНастроекОбмена, ОбменСБСП20 = Ложь) - - ОбработкаОбменаДанными.ДописыватьДанныеВПротоколОбмена = Ложь; - ОбработкаОбменаДанными.ВыгружатьТолькоРазрешенные = Ложь; - - ОбработкаОбменаДанными.ИспользоватьТранзакции = СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции <> 1; - ОбработкаОбменаДанными.КоличествоОбъектовНаТранзакцию = СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции; - - ОбработкаОбменаДанными.КлючСообщенияЖурналаРегистрации = СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации; - - Если Не ОбменСБСП20 Тогда - - УстановитьНастройкиРежимаОтладкиДляОбработки(ОбработкаОбменаДанными, СтруктураНастроекОбмена); - - КонецЕсли; - -КонецПроцедуры - -Процедура УстановитьПравилаОбменаВыгрузкиДанных(ОбработкаОбменаДаннымиXML, СтруктураНастроекОбмена) - - ПравилаКонвертацииОбъектов = РегистрыСведений.ПравилаДляОбменаДанными.ПолучитьЗачитанныеПравилаКонвертацииОбъектов(СтруктураНастроекОбмена.ИмяПланаОбмена); - - Если ПравилаКонвертацииОбъектов = Неопределено Тогда - - // Правила обмена должны быть указаны. - НСтрока = НСтр("ru = 'Не заданы правила конвертации для плана обмена %1. Выгрузка данных отменена.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтрока, СтруктураНастроекОбмена.ИмяПланаОбмена); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); - ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); - - Возврат; - КонецЕсли; - - ОбработкаОбменаДаннымиXML.СохраненныеНастройки = ПравилаКонвертацииОбъектов; - - Попытка - ОбработкаОбменаДаннымиXML.ВосстановитьПравилаИзВнутреннегоФормата(); - Исключение - ЗаписьЖурналаРегистрацииОбменаДанными(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), СтруктураНастроекОбмена, Истина); - ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); - Возврат; - КонецПопытки; - -КонецПроцедуры - -Процедура УстановитьПравилаОбменаЗагрузкиДанных(ОбработкаОбменаДаннымиXML, СтруктураНастроекОбмена) - - ПравилаКонвертацииОбъектов = РегистрыСведений.ПравилаДляОбменаДанными.ПолучитьЗачитанныеПравилаКонвертацииОбъектов(СтруктураНастроекОбмена.ИмяПланаОбмена, Истина); - - Если ПравилаКонвертацииОбъектов = Неопределено Тогда - - // Правила обмена должны быть указаны. - НСтрока = НСтр("ru = 'Не заданы правила конвертации для плана обмена %1. Загрузка данных отменена.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтрока, СтруктураНастроекОбмена.ИмяПланаОбмена); - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); - ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); - - Возврат; - КонецЕсли; - - ОбработкаОбменаДаннымиXML.СохраненныеНастройки = ПравилаКонвертацииОбъектов; - - Попытка - ОбработкаОбменаДаннымиXML.ВосстановитьПравилаИзВнутреннегоФормата(); - Исключение - ЗаписьЖурналаРегистрацииОбменаДанными(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), СтруктураНастроекОбмена, Истина); - ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); - Возврат; - КонецПопытки; - -КонецПроцедуры - -// Считывает настройки отладки из ИБ и устанавливает их для структуры обмена. -// -Процедура УстановитьНастройкиРежимаОтладкиДляСтруктуры(СтруктураНастроекОбмена, ЭтоВнешнееСоединение = Ложь) - - ТекстЗапроса = "ВЫБРАТЬ - | ВЫБОР - | КОГДА &ПроизводитьВыгрузку - | ТОГДА ПравилаДляОбменаДанными.РежимОтладкиВыгрузки - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ОтладкаОбработчиковВыгрузки, - | ВЫБОР - | КОГДА &ПроизводитьВыгрузку - | ТОГДА ПравилаДляОбменаДанными.ИмяФайлаОбработкиДляОтладкиВыгрузки - | ИНАЧЕ """" - | КОНЕЦ КАК ИмяФайлаВнешнейОбработкиОтладкиВыгрузки, - | ВЫБОР - | КОГДА &ПроизводитьЗагрузку - | ТОГДА ПравилаДляОбменаДанными.РежимОтладкиЗагрузки - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ОтладкаОбработчиковЗагрузки, - | ВЫБОР - | КОГДА &ПроизводитьЗагрузку - | ТОГДА ПравилаДляОбменаДанными.ИмяФайлаОбработкиДляОтладкиЗагрузки - | ИНАЧЕ """" - | КОНЕЦ КАК ИмяФайлаВнешнейОбработкиОтладкиЗагрузки, - | ПравилаДляОбменаДанными.РежимПротоколированияОбменаДанными КАК РежимПротоколированияОбменаДанными, - | ПравилаДляОбменаДанными.ИмяФайлаПротоколаОбмена КАК ИмяФайлаПротоколаОбмена, - | ПравилаДляОбменаДанными.НеОстанавливатьПоОшибке КАК ПродолжитьПриОшибке - |ИЗ - | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными - |ГДЕ - | ПравилаДляОбменаДанными.ИмяПланаОбмена = &ИмяПланаОбмена - | И ПравилаДляОбменаДанными.ВидПравил = ЗНАЧЕНИЕ(Перечисление.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов) - | И ПравилаДляОбменаДанными.РежимОтладки"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - - ПроизводитьВыгрузкуДанных = Ложь; - Если Не СтруктураНастроекОбмена.Свойство("ПроизводитьВыгрузкуДанных", ПроизводитьВыгрузкуДанных) Тогда - ПроизводитьВыгрузкуДанных = (СтруктураНастроекОбмена.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных); - КонецЕсли; - - ПроизводитьЗагрузкуДанных = Ложь; - Если Не СтруктураНастроекОбмена.Свойство("ПроизводитьЗагрузкуДанных", ПроизводитьЗагрузкуДанных) Тогда - ПроизводитьЗагрузкуДанных = (СтруктураНастроекОбмена.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных); - КонецЕсли; - - Запрос.УстановитьПараметр("ИмяПланаОбмена", СтруктураНастроекОбмена.ИмяПланаОбмена); - Запрос.УстановитьПараметр("ПроизводитьВыгрузку", ПроизводитьВыгрузкуДанных); - Запрос.УстановитьПараметр("ПроизводитьЗагрузку", ПроизводитьЗагрузкуДанных); - - Результат = Запрос.Выполнить(); - - ИмяФайлаПротокола = ""; - Если ЭтоВнешнееСоединение И СтруктураНастроекОбмена.Свойство("ИмяФайлаПротоколаОбмена", ИмяФайлаПротокола) - И Не ПустаяСтрока(ИмяФайлаПротокола) Тогда - - СтруктураНастроекОбмена.ИмяФайлаПротоколаОбмена = ДобавитьЛитералКИмениФайла(ИмяФайлаПротокола, "ВнешнееСоединение") - - КонецЕсли; - - Если Не Результат.Пустой() И Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - - ТаблицаНастроек = Результат.Выгрузить(); - СтрокаТаблицы = ТаблицаНастроек[0]; - - ЗаполнитьЗначенияСвойств(СтруктураНастроекОбмена, СтрокаТаблицы); - - КонецЕсли; - -КонецПроцедуры - -// Считывает настройки отладки из ИБ и устанавливает их для структуры настроек обмена. -// -Процедура УстановитьНастройкиРежимаОтладкиДляОбработки(ОбработкаОбменаДанными, СтруктураНастроекОбмена) - - Если СтруктураНастроекОбмена.Свойство("ИмяФайлаВнешнейОбработкиОтладкиВыгрузки") - И ОбработкаОбменаДанными.Метаданные().Реквизиты.Найти("ИмяФайлаВнешнейОбработкиОтладкиВыгрузки") <> Неопределено Тогда - - ОбработкаОбменаДанными.ОтладкаОбработчиковВыгрузки = СтруктураНастроекОбмена.ОтладкаОбработчиковВыгрузки; - ОбработкаОбменаДанными.ОтладкаОбработчиковЗагрузки = СтруктураНастроекОбмена.ОтладкаОбработчиковЗагрузки; - ОбработкаОбменаДанными.ИмяФайлаВнешнейОбработкиОтладкиВыгрузки = СтруктураНастроекОбмена.ИмяФайлаВнешнейОбработкиОтладкиВыгрузки; - ОбработкаОбменаДанными.ИмяФайлаВнешнейОбработкиОтладкиЗагрузки = СтруктураНастроекОбмена.ИмяФайлаВнешнейОбработкиОтладкиЗагрузки; - ОбработкаОбменаДанными.РежимПротоколированияОбменаДанными = СтруктураНастроекОбмена.РежимПротоколированияОбменаДанными; - ОбработкаОбменаДанными.ИмяФайлаПротоколаОбмена = СтруктураНастроекОбмена.ИмяФайлаПротоколаОбмена; - ОбработкаОбменаДанными.ПродолжитьПриОшибке = СтруктураНастроекОбмена.ПродолжитьПриОшибке; - - Если СтруктураНастроекОбмена.РежимПротоколированияОбменаДанными Тогда - - Если СтруктураНастроекОбмена.ИмяФайлаПротоколаОбмена = "" Тогда - ОбработкаОбменаДанными.ВыводВОкноСообщенийИнформационныхСообщений = Истина; - ОбработкаОбменаДанными.ВыводВПротоколИнформационныхСообщений = Ложь; - Иначе - ОбработкаОбменаДанными.ВыводВОкноСообщенийИнформационныхСообщений = Ложь; - ОбработкаОбменаДанными.ВыводВПротоколИнформационныхСообщений = Истина; - ОбработкаОбменаДанными.ИмяФайлаПротоколаОбмена = СтруктураНастроекОбмена.ИмяФайлаПротоколаОбмена; - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -// Устанавливает для обработки настройки выгрузки. -// -Процедура УстановитьНастройкиОтладкиВыгрузкиДляПравилОбмена(ОбработкаОбменаДанными, ИмяПланаОбмена, РежимОтладки) Экспорт - - ТекстЗапроса = "ВЫБРАТЬ - | ПравилаДляОбменаДанными.РежимОтладкиВыгрузки КАК ОтладкаОбработчиковВыгрузки, - | ПравилаДляОбменаДанными.ИмяФайлаОбработкиДляОтладкиВыгрузки КАК ИмяФайлаВнешнейОбработкиОтладкиВыгрузки - |ИЗ - | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными - |ГДЕ - | ПравилаДляОбменаДанными.ИмяПланаОбмена = &ИмяПланаОбмена - | И ПравилаДляОбменаДанными.ВидПравил = ЗНАЧЕНИЕ(Перечисление.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов) - | И &РежимОтладки = ИСТИНА"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("ИмяПланаОбмена", ИмяПланаОбмена); - Запрос.УстановитьПараметр("РежимОтладки", РежимОтладки); - - Результат = Запрос.Выполнить(); - - Если Результат.Пустой() Или ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - - ОбработкаОбменаДанными.ОтладкаОбработчиковВыгрузки = Ложь; - ОбработкаОбменаДанными.ИмяФайлаВнешнейОбработкиОтладкиВыгрузки = ""; - - Иначе - - ТаблицаНастроек = Результат.Выгрузить(); - НастройкиОтладки = ТаблицаНастроек[0]; - - ЗаполнитьЗначенияСвойств(ОбработкаОбменаДанными, НастройкиОтладки); - - КонецЕсли; - -КонецПроцедуры - -// Устанавливает для обработки настройки загрузки. -// -Процедура УстановитьНастройкиОтладкиЗагрузкиДляПравилОбмена(ОбработкаОбменаДанными, ИмяПланаОбмена) Экспорт - - ТекстЗапроса = "ВЫБРАТЬ - | ПравилаДляОбменаДанными.РежимОтладкиЗагрузки КАК ОтладкаОбработчиковЗагрузки, - | ПравилаДляОбменаДанными.ИмяФайлаОбработкиДляОтладкиЗагрузки КАК ИмяФайлаВнешнейОбработкиОтладкиЗагрузки - |ИЗ - | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными - |ГДЕ - | ПравилаДляОбменаДанными.ИмяПланаОбмена = &ИмяПланаОбмена - | И ПравилаДляОбменаДанными.ВидПравил = ЗНАЧЕНИЕ(Перечисление.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов) - | И ПравилаДляОбменаДанными.РежимОтладки"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("ИмяПланаОбмена", ИмяПланаОбмена); - - Результат = Запрос.Выполнить(); - - Если Результат.Пустой() Или ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - - ОбработкаОбменаДанными.ОтладкаОбработчиковЗагрузки = Ложь; - ОбработкаОбменаДанными.ИмяФайлаВнешнейОбработкиОтладкиЗагрузки = ""; - - Иначе - - ТаблицаНастроек = Результат.Выгрузить(); - НастройкиОтладки = ТаблицаНастроек[0]; - - ЗаполнитьЗначенияСвойств(ОбработкаОбменаДанными, НастройкиОтладки); - - КонецЕсли; - -КонецПроцедуры - -// Для внутреннего использования. -// -Процедура ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена) - - СтруктураНастроекОбмена.Отказ = Истина; - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Отменено; - -КонецПроцедуры - -// Для внутреннего использования. -// -Функция ПолучитьШаблонИмениФайлаСообщения(ТекущийУзелПланаОбмена, УзелИнформационнойБазы, ЭтоИсходящееСообщение) - - УзелОтправитель = ?(ЭтоИсходящееСообщение, ТекущийУзелПланаОбмена, УзелИнформационнойБазы); - УзелПолучатель = ?(ЭтоИсходящееСообщение, УзелИнформационнойБазы, ТекущийУзелПланаОбмена); - - Возврат ИмяФайлаСообщенияОбмена(СокрЛП(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелОтправитель, "Код")), - СокрЛП(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелПолучатель, "Код"))); - // -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Количество элементов в транзакции. - -Функция КоличествоЭлементовВТранзакцииЗагрузкиДанных() Экспорт - - УстановитьПривилегированныйРежим(Истина); - Возврат Константы.КоличествоЭлементовВТранзакцииЗагрузкиДанных.Получить(); - -КонецФункции - -Функция КоличествоЭлементовВТранзакцииВыгрузкиДанных() Экспорт - - Возврат 1; - -КонецФункции - -Функция КоличествоЭлементовВТранзакцииВыполняемогоДействия(Действие) - - Если Действие = Перечисления.ДействияПриОбмене.ВыгрузкаДанных Тогда - КоличествоЭлементов = КоличествоЭлементовВТранзакцииВыгрузкиДанных(); - Иначе - КоличествоЭлементов = КоличествоЭлементовВТранзакцииЗагрузкиДанных(); - КонецЕсли; - - Возврат КоличествоЭлементов; - -КонецФункции - -Процедура УстановитьКоличествоЭлементовВТранзакцииЗагрузкиДанных(Количество) Экспорт - - УстановитьПривилегированныйРежим(Истина); - Константы.КоличествоЭлементовВТранзакцииЗагрузкиДанных.Установить(Количество); - -КонецПроцедуры - -Процедура ДополнитьНастройкиТранспортаКоличествомЭлементовВТранзакции(Результат) Экспорт - - Результат.Вставить("КоличествоЭлементовВТранзакцииВыгрузкиДанных", КоличествоЭлементовВТранзакцииВыгрузкиДанных()); - Результат.Вставить("КоличествоЭлементовВТранзакцииЗагрузкиДанных", КоличествоЭлементовВТранзакцииЗагрузкиДанных()); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Работа с монитором проблем обмена данными. - -// Для внутреннего использования. -// -Функция КоличествоПроблемОбменаДанными(УзлыОбмена = Неопределено, ТипПроблемы = Неопределено, - УчитыватьПроигнорированные = Ложь, Период = Неопределено, СтрокаПоиска = "") Экспорт - - Возврат РегистрыСведений.РезультатыОбменаДанными.КоличествоПроблем(УзлыОбмена, - ТипПроблемы, УчитыватьПроигнорированные, Период, СтрокаПоиска); - -КонецФункции - -// Для внутреннего использования. -// -Функция КоличествоПроблемВерсионирования(УзлыОбмена = Неопределено, ЭтоКоличествоКоллизий = Неопределено, - УчитыватьПроигнорированные = Ложь, Период = Неопределено, СтрокаПоиска = "") Экспорт - - ИспользуетсяВерсионирование = ОбменДаннымиПовтИсп.ИспользуетсяВерсионирование(, Истина); - Если ИспользуетсяВерсионирование Тогда - МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); - Возврат МодульВерсионированиеОбъектов.КоличествоКоллизийИлиНепринятых(УзлыОбмена, - ЭтоКоличествоКоллизий, УчитыватьПроигнорированные, Период, СтрокаПоиска); - КонецЕсли; - - Возврат 0; - -КонецФункции - -// Регистрирует ошибки при отложенном проведении документа в мониторе проблем обмена. -// -// Параметры: -// Объект - ДокументОбъект - Документ при отложенном проведении которого возникли ошибки. -// УзелОбмена - ПланОбменаСсылка - Узел информационной базы из которой получен документ. -// СообщениеОбОшибке - Сообщение об ошибке для журнала регистрации. -// -// Примечание: СообщениеОбОшибке содержит в себе текст сообщения для журнала регистрации. -// Рекомендуется передавать в качестве этого параметра КраткоеПредставлениеОшибки(ИнформацияОбОшибке()). -// Текст сообщения для отображения в мониторе формируется из системных сообщений пользователю, которые -// были сформированы, но еще не были выведены пользователю. Поэтому рекомендуется, чтобы к моменту вызова -// данного метода в буфере сообщений системы не содержалось сообщений. -// -// Пример вызова процедуры при загрузке документа в информационную базу: -// -// Процедура ПровестиДокументПриЗагрузке(Документ, УзелОбмена) -// Документ.ОбменДанными.Загрузка = Истина; -// Документ.Записать(); -// Документ.ОбменДанными.Загрузка = Ложь; -// Отказ = Ложь; -// -// Попытка -// Документ.Записать(РежимЗаписиДокумента.Проведение); -// Исключение -// СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); -// Отказ = Истина; -// КонецПопытки; -// -// Если Отказ Тогда -// ЗарегистрироватьОшибкуПроведенияДокумента(Документ, УзелОбмена, СообщениеОбОшибке); -// КонецЕсли; -// -// КонецПроцедуры; -// -Процедура ЗарегистрироватьОшибкуПроведенияДокумента(Объект, УзелОбмена, ТекстИсключения) Экспорт - - СообщенияПользователю = ПолучитьСообщенияПользователю(Истина); - ТекстСообщения = ТекстИсключения; - Для Каждого Сообщение Из СообщенияПользователю Цикл - ТекстСообщения = ТекстСообщения + ?(ПустаяСТрока(ТекстСообщения), "", Символы.ПС) + Сообщение.Текст; - КонецЦикла; - - ПричинаОшибки = ТекстСообщения; - Если Не ПустаяСтрока(СокрЛП(ТекстСообщения)) Тогда - - ПричинаОшибки = " " + НСтр("ru = 'По причине %1.'"); - ПричинаОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПричинаОшибки, ТекстСообщения); - - КонецЕсли; - - СтрокаСообщения = НСтр("ru = 'Не удалось провести документ %1, полученный из другой информационной базы.%2 - |Возможно не заполнены все реквизиты, обязательные к заполнению.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(Объект), ПричинаОшибки); - - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Предупреждение,,, СтрокаСообщения); - - РегистрыСведений.РезультатыОбменаДанными.ЗарегистрироватьОшибкуПроверкиОбъекта(Объект.Ссылка, УзелОбмена, - ТекстСообщения, Перечисления.ТипыПроблемОбменаДанными.НепроведенныйДокумент); - -КонецПроцедуры - -// Регистрирует ошибки при отложенной записи объекта в мониторе проблем обмена. -// -// Параметры: -// Объект - Объект ссылочного типа - Объект при отложенной записи которого возникли ошибки. -// УзелОбмена - ПланОбменаСсылка - Узел информационной базы из которой получен объект. -// СообщениеОбОшибке - Сообщение об ошибке для журнала регистрации. -// -// Примечание: СообщениеОбОшибке содержит в себе текст сообщения для журнала регистрации. -// Рекомендуется передавать в качестве этого параметра КраткоеПредставлениеОшибки(ИнформацияОбОшибке()). -// Текст сообщения для отображения в мониторе формируется из системных сообщений пользователю, которые -// были сформированы, но еще не были выведены пользователю. Поэтому рекомендуется, чтобы к моменту вызова -// данного метода в буфере сообщений системы не содержалось сообщений. -// -// Пример вызова процедуры при записи объекта в информационную базу: -// -// Процедура ЗаписатьОбъектПриЗагрузке(Объект, УзелОбмена) -// Объект.ОбменДанными.Загрузка = Истина; -// Объект.Записать(); -// Объект.ОбменДанными.Загрузка = Ложь; -// Отказ = Ложь; -// -// Попытка -// Объект.Записать(); -// Исключение -// СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); -// Отказ = Истина; -// КонецПопытки; -// -// Если Отказ Тогда -// ЗарегистрироватьОшибкуЗаписиОбъекта(Объект, УзелОбмена, СообщениеОбОшибке); -// КонецЕсли; -// -// КонецПроцедуры; -// -Процедура ЗарегистрироватьОшибкуЗаписиОбъекта(Объект, УзелОбмена, ТекстИсключения) Экспорт - - СообщенияПользователю = ПолучитьСообщенияПользователю(Истина); - ТекстСообщения = ТекстИсключения; - Для Каждого Сообщение Из СообщенияПользователю Цикл - ТекстСообщения = ТекстСообщения + ?(ПустаяСТрока(ТекстСообщения), "", Символы.ПС) + Сообщение.Текст; - КонецЦикла; - - ПричинаОшибки = ТекстСообщения; - Если Не ПустаяСтрока(СокрЛП(ТекстСообщения)) Тогда - - ПричинаОшибки = " " + НСтр("ru = 'По причине %1.'"); - ПричинаОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПричинаОшибки, ТекстСообщения); - - КонецЕсли; - - СтрокаСообщения = НСтр("ru = 'Не удалось записать объект %1, полученный из другой информационной базы.%2 - |Возможно не заполнены все реквизиты, обязательные к заполнению.'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(Объект), ПричинаОшибки); - - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Предупреждение,,, СтрокаСообщения); - - РегистрыСведений.РезультатыОбменаДанными.ЗарегистрироватьОшибкуПроверкиОбъекта(Объект.Ссылка, УзелОбмена, - ТекстСообщения, Перечисления.ТипыПроблемОбменаДанными.НезаполненныеРеквизиты); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Прогресс-бар. - -// Подсчет количества объектов ИБ, подлежащих выгрузке при создании начального образа. -// -// Параметры: -// Получатель - План обмена объект. -// -// Возвращаемое значение - число. -Функция РассчитатьКоличествоОбъектовВБазе(Получатель) - - ИмяПланаОбмена = Получатель.Метаданные().Имя; - СчетчикОбъектов = 0; - СоставПланаОбмена = Метаданные.ПланыОбмена[ИмяПланаОбмена].Состав; - - // 1. "Ссылочные" объекты. - СтруктураСсылочныхОбъектов = Новый Структура; - СтруктураСсылочныхОбъектов.Вставить("Справочник", Метаданные.Справочники); - СтруктураСсылочныхОбъектов.Вставить("Документ", Метаданные.Документы); - СтруктураСсылочныхОбъектов.Вставить("ПланВидовХарактеристик", Метаданные.ПланыВидовХарактеристик); - СтруктураСсылочныхОбъектов.Вставить("ПланВидовРасчета", Метаданные.ПланыВидовРасчета); - СтруктураСсылочныхОбъектов.Вставить("ПланСчетов", Метаданные.ПланыСчетов); - СтруктураСсылочныхОбъектов.Вставить("БизнесПроцесс", Метаданные.БизнесПроцессы); - СтруктураСсылочныхОбъектов.Вставить("Задача", Метаданные.Задачи); - СтруктураСсылочныхОбъектов.Вставить("ПланСчетов", Метаданные.ПланыСчетов); - - ТекстЗапроса = "ВЫБРАТЬ - |Количество(Ссылка) КАК КоличествоОбъектов - |ИЗ "; - Для Каждого СсылочныйОбъект Из СтруктураСсылочныхОбъектов Цикл - Для Каждого ОбъектМетаданных Из СсылочныйОбъект.Значение Цикл - Если СоставПланаОбмена.Найти(ОбъектМетаданных) = Неопределено Тогда - Продолжить; - КонецЕсли; - ПолноеИмяОбъекта = СсылочныйОбъект.Ключ +"."+ОбъектМетаданных.Имя; - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса + ПолноеИмяОбъекта; - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - СчетчикОбъектов = СчетчикОбъектов + Выборка.КоличествоОбъектов; - КонецЕсли; - КонецЦикла; - КонецЦикла; - - // 2. Константы. - Для Каждого ОбъектМетаданных Из Метаданные.Константы Цикл - Если СоставПланаОбмена.Найти(ОбъектМетаданных) = Неопределено Тогда - Продолжить; - КонецЕсли; - СчетчикОбъектов = СчетчикОбъектов + 1; - КонецЦикла; - - // 3. Регистры сведений. - ТекстЗапроса = "ВЫБРАТЬ - |Количество(*) КАК КоличествоОбъектов - |ИЗ "; - ТекстЗапросаСРегистратором = "ВЫБРАТЬ - |Количество(РАЗЛИЧНЫЕ Регистратор) КАК КоличествоОбъектов - |ИЗ "; - Для Каждого ОбъектМетаданных Из Метаданные.РегистрыСведений Цикл - Если СоставПланаОбмена.Найти(ОбъектМетаданных) = Неопределено Тогда - Продолжить; - КонецЕсли; - ПолноеИмяОбъекта = "РегистрСведений."+ОбъектМетаданных.Имя; - Запрос = Новый Запрос; - Если ОбъектМетаданных.ПериодичностьРегистраСведений = Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.ПозицияРегистратора Тогда - Запрос.Текст = ТекстЗапросаСРегистратором + ПолноеИмяОбъекта; - Иначе - Запрос.Текст = ТекстЗапроса + ПолноеИмяОбъекта; - КонецЕсли; - - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - СчетчикОбъектов = СчетчикОбъектов + Выборка.КоличествоОбъектов; - КонецЕсли; - КонецЦикла; - - // 4. Регистры (подчиненные регистратору) и последовательности. - СтруктураРегистров = Новый Структура; - СтруктураРегистров.Вставить("РегистрНакопления", Метаданные.РегистрыНакопления); - СтруктураРегистров.Вставить("РегистрРасчета", Метаданные.РегистрыРасчета); - СтруктураРегистров.Вставить("РегистрБухгалтерии", Метаданные.РегистрыБухгалтерии); - СтруктураРегистров.Вставить("Последовательность", Метаданные.Последовательности); - - ТекстЗапроса = ТекстЗапросаСРегистратором; - Для Каждого Регистр Из СтруктураРегистров Цикл - Для Каждого ОбъектМетаданных Из Регистр.Значение Цикл - Если СоставПланаОбмена.Найти(ОбъектМетаданных) = Неопределено Тогда - Продолжить; - КонецЕсли; - ПолноеИмяОбъекта = Регистр.Ключ +"."+ОбъектМетаданных.Имя; - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса + ПолноеИмяОбъекта; - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - СчетчикОбъектов = СчетчикОбъектов + Выборка.КоличествоОбъектов; - КонецЕсли; - КонецЦикла; - КонецЦикла; - - Возврат СчетчикОбъектов; - -КонецФункции - -// Подсчет количества объектов, зарегистрированных в плане обмена. -// -// Параметры: -// Получатель - План обмена объект. -// -// Возвращаемое значение - число. -Функция РассчитатьКоличествоЗарегистрированныхОбъектов(Получатель) - - ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(Получатель.Ссылка, Получатель.НомерОтправленного + 1); - КоличествоОбъектовКВыгрузке = 0; - Пока ВыборкаИзменений.Следующий() Цикл - КоличествоОбъектовКВыгрузке = КоличествоОбъектовКВыгрузке + 1; - КонецЦикла; - Возврат КоличествоОбъектовКВыгрузке; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ - -// Для внутреннего использования. -// -Функция РезультатЗапросаВСтруктуру(Знач РезультатЗапроса) Экспорт - - Результат = Новый Структура; - Для Каждого Колонка Из РезультатЗапроса.Колонки Цикл - Результат.Вставить(Колонка.Имя); - КонецЦикла; - - Если РезультатЗапроса.Пустой() Тогда - Возврат Результат; - КонецЕсли; - - Выборка = РезультатЗапроса.Выбрать(); - Выборка.Следующий(); - - ЗаполнитьЗначенияСвойств(Результат, Выборка); - - Возврат Результат; -КонецФункции - -// Для внутреннего использования. -// Функция ТаблицаЗначенийИзДереваЗначений(Дерево) Результат = Новый ТаблицаЗначений; @@ -11278,8 +11644,6 @@ Возврат Результат; КонецФункции -// Для внутреннего использования. -// Процедура РазвернутьДеревоЗначений(Таблица, Дерево) Для Каждого СтрокаДерева Из Дерево Цикл @@ -11296,113 +11660,12 @@ КонецПроцедуры -// Возвращает представление даты синхронизации. -// -// Параметры: -// ДатаСинхронизации - Дата. Абсолютная дата синхронизации данных. -// -Функция ПредставлениеДатыСинхронизации(Знач ДатаСинхронизации) Экспорт - - Если Не ЗначениеЗаполнено(ДатаСинхронизации) Тогда - Возврат НСтр("ru = 'Синхронизация не выполнялась.'"); - КонецЕсли; - - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Последняя синхронизация: %1'"), ОтносительнаяДатаСинхронизации(ДатаСинхронизации)); -КонецФункции - -// Возвращает представление относительной даты синхронизации. -// -// Параметры: -// ДатаСинхронизации - Дата. Абсолютная дата синхронизации данных. -// -// Интервалы времени: -// Никогда (Т = пустая дата). -// Сейчас (Т < 5 мин) -// 5 минут назад (5 мин < Т < 15 мин) -// 15 минут назад (15 мин < Т < 30 мин) -// 30 минут назад (30 мин < Т < 1 час) -// 1 час назад (1 час < Т < 2 час) -// 2 часа назад (2 час < Т < 3 час). -// Сегодня, 12:44:12 (3 час < Т < вчера). -// Вчера, 22:30:45 (вчера < Т < позавчера). -// Позавчера, 21:22:54 (позавчера < Т < поза-позавчера). -// <12 Марта 2012г.> (поза-позавчера < Т). -// -Функция ОтносительнаяДатаСинхронизации(Знач ДатаСинхронизации) Экспорт - - Если Не ЗначениеЗаполнено(ДатаСинхронизации) Тогда - - Возврат НСтр("ru = 'Никогда'"); - - КонецЕсли; - - ДатаТекущая = ТекущаяДатаСеанса(); - - Интервал = ДатаТекущая - ДатаСинхронизации; - - Если Интервал < 0 Тогда // 0 мин - - Результат = Формат(ДатаСинхронизации, "ДЛФ=DD"); - - ИначеЕсли Интервал < 60 * 5 Тогда // 5 мин - - Результат = НСтр("ru = 'Сейчас'"); - - ИначеЕсли Интервал < 60 * 15 Тогда // 15 мин - - Результат = НСтр("ru = '5 минут назад'"); - - ИначеЕсли Интервал < 60 * 30 Тогда // 30 мин - - Результат = НСтр("ru = '15 минут назад'"); - - ИначеЕсли Интервал < 60 * 60 * 1 Тогда // 1 час - - Результат = НСтр("ru = '30 минут назад'"); - - ИначеЕсли Интервал < 60 * 60 * 2 Тогда // 2 часа - - Результат = НСтр("ru = '1 час назад'"); - - ИначеЕсли Интервал < 60 * 60 * 3 Тогда // 3 часа - - Результат = НСтр("ru = '2 часа назад'"); - - Иначе - - КоличествоДнейРазницы = КоличествоДнейРазницы(ДатаСинхронизации, ДатаТекущая); - - Если КоличествоДнейРазницы = 0 Тогда // сегодня - - Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Сегодня, %1'"), Формат(ДатаСинхронизации, "ДЛФ=T")); - - ИначеЕсли КоличествоДнейРазницы = 1 Тогда // вчера - - Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Вчера, %1'"), Формат(ДатаСинхронизации, "ДЛФ=T")); - - ИначеЕсли КоличествоДнейРазницы = 2 Тогда // позавчера - - Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Позавчера, %1'"), Формат(ДатаСинхронизации, "ДЛФ=T")); - - Иначе // давно - - Результат = Формат(ДатаСинхронизации, "ДЛФ=DD"); - - КонецЕсли; - - КонецЕсли; - - Возврат Результат; -КонецФункции - Функция КоличествоДнейРазницы(Знач Дата1, Знач Дата2) Возврат Цел((НачалоДня(Дата2) - НачалоДня(Дата1)) / 86400); КонецФункции -// Для внутреннего использования. -// Процедура ЗаполнитьТаблицуЗначений(Приемник, Знач Источник) Экспорт Приемник.Очистить(); @@ -11463,7 +11726,7 @@ СинонимПланаОбмена = Метаданные.ПланыОбмена[ИмяПланаОбмена].Синоним; - ШаблонСообщения = Нстр("ru = 'Синхронизация данных может быть выполнена некорректно, т.к. версия программы ""%1"" (%2) в правилах конвертации этой программы отличается от версии %3 в правилах конвертации в другой программе. Убедитесь, что загружены актуальные правила, подходящие для используемых версий обеих программ.'"); + ШаблонСообщения = НСтр("ru = 'Синхронизация данных может быть выполнена некорректно, т.к. версия программы ""%1"" (%2) в правилах конвертации этой программы отличается от версии %3 в правилах конвертации в другой программе. Убедитесь, что загружены актуальные правила, подходящие для используемых версий обеих программ.'"); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, СинонимПланаОбмена, ВерсияВЭтойПрограммеБезНомераСборки, ВерсияВДругойПрограммеБезНомераСборки); ЗаписьЖурналаРегистрации(КлючСообщенияЖурналаРегистрации, УровеньЖурналаРегистрации.Предупреждение,,, ТекстСообщения); @@ -11500,8 +11763,6 @@ КонецФункции -// Для внутреннего использования. -// Функция ИнициализироватьПараметрыПроверкиРасхожденияВерсий(ПроверятьРасхождениеВерсий) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -11515,8 +11776,6 @@ КонецФункции -// Для внутреннего использования. -// Функция ОшибкаРасхожденияВерсийПриПолученииДанных() Экспорт УстановитьПривилегированныйРежим(Истина); @@ -11559,117 +11818,6 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Константы - -// Функция-свойство: возвращает литерал обозначения строки неограниченной длины. -// -// Возвращаемое значение: -// Строка - литерал обозначения строки неограниченной длины. -// -Функция СтрокаНеограниченнойДлины() Экспорт - - Возврат "(снд)"; - -КонецФункции - -// Функция-свойство: возвращает литерал обозначения узла-XML, который содержит значение константы ПРО. -// -// Возвращаемое значение: -// Строка - литерал обозначения узла-XML, который содержит значение константы ПРО. -// -Функция ЭлементОтбораСвойствоЗначениеКонстанты() Экспорт - - Возврат "ЗначениеКонстанты"; - -КонецФункции - -// Функция-свойство: возвращает литерал обозначения узла-XML, который содержит алгоритм получения значения. -// -// Возвращаемое значение: -// Строка - возвращает литерал обозначения узла-XML, который содержит алгоритм получения значения. -// -Функция ЭлементОтбораСвойствоАлгоритмЗначения() Экспорт - - Возврат "АлгоритмЗначения"; - -КонецФункции - -// Функция-свойство: возвращает имя файла, который используется для проверки подключения обработки транспорта. -// -// Возвращаемое значение: -// Строка - возвращает имя файла, который используется для проверки подключения обработки транспорта. -// -Функция ИмяФайлаПроверкиПодключения() Экспорт - - Возврат "ConnectionCheckFile.tmp"; - -КонецФункции - -// Для внутреннего использования. -// -Функция ВариантРаботыИнформационнойБазыФайловый() Экспорт - - Возврат 0; - -КонецФункции - -// Для внутреннего использования. -// -Функция ВариантРаботыИнформационнойБазыКлиентСерверный() Экспорт - - Возврат 1; - -КонецФункции - -// Для внутреннего использования. -// -Функция ЭтоОшибкаНомерСообщенияМеньшеИлиРавенНомеруРанееПринятогоСообщения(ОписаниеОшибки) - - Возврат СтрНайти(НРег(ОписаниеОшибки), НРег("ru = 'Номер сообщения меньше или равен'")) > 0; - -КонецФункции - -// Для внутреннего использования. -// -Функция СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису() Экспорт - - Возврат НСтр("ru = 'Обмен данными.Установка подключения к web-сервису'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - -КонецФункции - -// Для внутреннего использования. -// -Функция СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными() Экспорт - - Возврат НСтр("ru = 'Обмен данными.Загрузка правил'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - -КонецФункции - -// Для внутреннего использования. -// -Функция СобытиеЖурналаРегистрацииСозданиеОбменаДанными() Экспорт - - Возврат НСтр("ru = 'Обмен данными.Создание обмена данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - -КонецФункции - -// Для внутреннего использования. -// -Функция СобытиеЖурналаРегистрацииУдалениеВременногоФайла() Экспорт - - Возврат НСтр("ru = 'Обмен данными.Удаление временного файла'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - -КонецФункции - -// Для внутреннего использования. -// -Функция СобытиеЖурналаРегистрацииОбменДанными() Экспорт - - Возврат НСтр("ru = 'Обмен данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - -КонецФункции - // Возвращает Истина при необходимости обновления конфигурации информационной базы подчиненного узла РИБ. // В главном узле всегда - Ложь. // @@ -11789,8 +11937,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ИнтерактивноеИзменениеВыгрузки_СформироватьДеревоЗначений(Параметры, АдресРезультата) Экспорт ОбъектОтчета = ИнтерактивноеИзменениеВыгрузки_ОбъектПоНастройкам(Параметры.СтруктураОбработки); @@ -11799,8 +11945,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Функция ИнтерактивноеИзменениеВыгрузки_ОбъектПоНастройкам(Знач Настройки) ОбъектОтчета = Обработки.ИнтерактивноеИзменениеВыгрузки.Создать(); @@ -11822,17 +11966,6 @@ Возврат ОбъектОтчета; КонецФункции -// Возвращает идентификатор поставляемого профиля групп доступа "Синхронизация данных с другими программами". -// -// Возвращаемое значение: -// Строка - идентификатор поставляемого профиля групп доступа. -// -Функция ПрофильДоступаСинхронизацияДанныхСДругимиПрограммами() Экспорт - - Возврат "04937803-5dba-11df-a1d4-005056c00008"; - -КонецФункции - // Возвращает список ролей профиля групп доступа "Синхронизация данных с другими программами". // Функция РолиПрофиляДоступаСинхронизацияДанныхСДругимиПрограммами() @@ -11845,9 +11978,283 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы с константой СообщениеОбменаДаннымиИзГлавногоУзла. +// Получает параметр защищенного соединения. // +Функция ЗащищенноеСоединение(Путь) Экспорт + + Возврат ?(НРег(Лев(Путь, 4)) = "ftps", Новый ЗащищенноеСоединениеOpenSSL, Неопределено); + +КонецФункции + +// Заполняет список текущих дел пользователя. +// +// Параметры: +// ТекущиеДела - ТаблицаЗначений - таблица значений с колонками: +// * Идентификатор - Строка - внутренний идентификатор дела, используемый механизмом "Текущие дела". +// * ЕстьДела - Булево - если Истина, дело выводится в списке текущих дел пользователя. +// * Важное - Булево - если Истина, дело будет выделено красным цветом. +// * Представление - Строка - представление дела, выводимое пользователю. +// * Количество - Число - количественный показатель дела, выводится в строке заголовка дела. +// * Форма - Строка - полный путь к форме, которую необходимо открыть при нажатии на гиперссылку +// дела на панели "Текущие дела". +// * ПараметрыФормы- Структура - параметры, с которыми нужно открывать форму показателя. +// * Владелец - Строка, объект метаданных - строковый идентификатор дела, которое будет владельцем для текущего +// или объект метаданных подсистема. +// * Подсказка - Строка - текст подсказки. +// +Процедура ПриЗаполненииСпискаТекущихДелПредупрежденияСинхронизации(ТекущиеДела) + + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); + Если Не ПравоДоступа("Просмотр", Метаданные.РегистрыСведений.РезультатыОбменаДанными) + Или МодульТекущиеДелаСервер.ДелоОтключено("ПредупрежденияПриСинхронизации") Тогда + Возврат; + КонецЕсли; + + КоличествоНерассмотренныхПроблем = КоличествоНерассмотренныхПроблем(); + + // Процедура вызывается только при наличии подсистемы "Текущие дела", поэтому здесь + // не делается проверка существования подсистемы. + Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.ОбщиеФормы.СинхронизацияДанных.ПолноеИмя()); + + Для Каждого Раздел Из Разделы Цикл + + ИдентификаторПредупрежденияПриСинхронизации = "ПредупрежденияПриСинхронизации" + СтрЗаменить(Раздел.ПолноеИмя(), ".", ""); + Дело = ТекущиеДела.Добавить(); + Дело.Идентификатор = ИдентификаторПредупрежденияПриСинхронизации; + Дело.ЕстьДела = КоличествоНерассмотренныхПроблем > 0; + Дело.Представление = НСтр("ru = 'Предупреждения при синхронизации'"); + Дело.Количество = КоличествоНерассмотренныхПроблем; + Дело.Форма = "РегистрСведений.РезультатыОбменаДанными.Форма.Форма"; + Дело.Владелец = Раздел; + + КонецЦикла; + +КонецПроцедуры + +// Заполняет список текущих дел пользователя. +// +// Параметры: +// ТекущиеДела - ТаблицаЗначений - таблица значений с колонками: +// * Идентификатор - Строка - внутренний идентификатор дела, используемый механизмом "Текущие дела". +// * ЕстьДела - Булево - если Истина, дело выводится в списке текущих дел пользователя. +// * Важное - Булево - если Истина, дело будет выделено красным цветом. +// * Представление - Строка - представление дела, выводимое пользователю. +// * Количество - Число - количественный показатель дела, выводится в строке заголовка дела. +// * Форма - Строка - полный путь к форме, которую необходимо открыть при нажатии на гиперссылку +// дела на панели "Текущие дела". +// * ПараметрыФормы- Структура - параметры, с которыми нужно открывать форму показателя. +// * Владелец - Строка, объект метаданных - строковый идентификатор дела, которое будет владельцем для текущего +// или объект метаданных подсистема. +// * Подсказка - Строка - текст подсказки. +// +Процедура ПриЗаполненииСпискаТекущихДелНеобходимоОбновление(ТекущиеДела) + + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); + Если Не ПравоДоступа("Администрирование", Метаданные) + Или МодульТекущиеДелаСервер.ДелоОтключено("НеобходимоОбновлениеОбменДанными") Тогда + Возврат; + КонецЕсли; + + ТребуетсяУстановкаОбновления = ТребуетсяУстановкаОбновления(); + + // Процедура вызывается только при наличии подсистемы "Текущие дела", поэтому здесь + // не делается проверка существования подсистемы. + Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.ОбщиеФормы.СинхронизацияДанных.ПолноеИмя()); + + Для Каждого Раздел Из Разделы Цикл + + ИдентификаторНеобходимоОбновление = "НеобходимоОбновлениеОбменДанными" + СтрЗаменить(Раздел.ПолноеИмя(), ".", ""); + Дело = ТекущиеДела.Добавить(); + Дело.Идентификатор = ИдентификаторНеобходимоОбновление; + Дело.ЕстьДела = ТребуетсяУстановкаОбновления; + Дело.Важное = Истина; + Дело.Представление = НСтр("ru = 'Обновить версию программы'"); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда + МодульОбновлениеКонфигурацииКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ОбновлениеКонфигурацииКлиентСервер"); + ПараметрыФормы = Новый Структура("ЗавершениеРаботыСистемы, ПолученоОбновлениеКонфигурации", Ложь, Ложь); + Дело.Форма = МодульОбновлениеКонфигурацииКлиентСервер.ИмяФормыОбработкиОбновлениеКонфигурации(); + Дело.ПараметрыФормы = ПараметрыФормы; + Иначе + Дело.Форма = "ОбщаяФорма.ДополнительноеОписание"; + Дело.ПараметрыФормы = Новый Структура("Заголовок,ИмяМакета", + НСтр("ru = 'Установка обновления'"), "ИнструкцияКакВыполнитьУстановкуОбновленияВручную"); + КонецЕсли; + Дело.Владелец = Раздел; + + КонецЦикла; + +КонецПроцедуры + +// Заполняет список текущих дел пользователя. +// +// Параметры: +// ТекущиеДела - ТаблицаЗначений - таблица значений с колонками: +// * Идентификатор - Строка - внутренний идентификатор дела, используемый механизмом "Текущие дела". +// * ЕстьДела - Булево - если Истина, дело выводится в списке текущих дел пользователя. +// * Важное - Булево - если Истина, дело будет выделено красным цветом. +// * Представление - Строка - представление дела, выводимое пользователю. +// * Количество - Число - количественный показатель дела, выводится в строке заголовка дела. +// * Форма - Строка - полный путь к форме, которую необходимо открыть при нажатии на гиперссылку +// дела на панели "Текущие дела". +// * ПараметрыФормы- Структура - параметры, с которыми нужно открывать форму показателя. +// * Владелец - Строка, объект метаданных - строковый идентификатор дела, которое будет владельцем для текущего +// или объект метаданных подсистема. +// * Подсказка - Строка - текст подсказки. +// +Процедура ПриЗаполненииСпискаТекущихДелПроверитьСовместимостьСТекущейВерсией(ТекущиеДела) + + МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); + Если Не ПравоДоступа("Редактирование", Метаданные.РегистрыСведений.ПравилаДляОбменаДанными) + Или МодульТекущиеДелаСервер.ДелоОтключено("ПравилаОбмена") Тогда + Возврат; + КонецЕсли; + + // Если в командном интерфейсе нет раздела к которому относится регистр сведений, дело не добавляется. + ПодсистемыКомандногоИнтерфейса = МодульТекущиеДелаСервер.РазделыДляОбъекта("РегистрСведений.ПравилаДляОбменаДанными"); + Если ПодсистемыКомандногоИнтерфейса.Количество() = 0 Тогда + Возврат; + КонецЕсли; + Подсистема = ПодсистемыКомандногоИнтерфейса[0]; + + ВывестиДело = Истина; + ПровереноНаВерсию = ХранилищеОбщихНастроек.Загрузить("ТекущиеДела", "ПланыОбмена"); + Если ПровереноНаВерсию <> Неопределено Тогда + ВерсияМассив = СтрРазделить(Метаданные.Версия, "."); + ТекущаяВерсия = ВерсияМассив[0] + ВерсияМассив[1] + ВерсияМассив[2]; + Если ПровереноНаВерсию = ТекущаяВерсия Тогда + ВывестиДело = Ложь; // Дополнительные отчеты и обработки проверены на текущей версии. + КонецЕсли; + КонецЕсли; + + ПланыОбменаСПравиламиИзФайла = ПланыОбменаСПравиламиИзФайла(); + + // Добавление дела. + Дело = ТекущиеДела.Добавить(); + Дело.Идентификатор = "ПравилаОбмена"; + Дело.ЕстьДела = ВывестиДело И ПланыОбменаСПравиламиИзФайла > 0; + Дело.Представление = НСтр("ru = 'Правила обмена'"); + Дело.Количество = ПланыОбменаСПравиламиИзФайла; + Дело.Форма = "РегистрСведений.ПравилаДляОбменаДанными.Форма.ПроверкаСинхронизацииДанных"; + Дело.Владелец = "ПроверитьСовместимостьСТекущейВерсией"; + + // Проверка наличия группы дела. Если группа отсутствует - добавляем. + ГруппаДела = ТекущиеДела.Найти("ПроверитьСовместимостьСТекущейВерсией", "Идентификатор"); + Если ГруппаДела = Неопределено Тогда + ГруппаДела = ТекущиеДела.Добавить(); + ГруппаДела.Идентификатор = "ПроверитьСовместимостьСТекущейВерсией"; + ГруппаДела.ЕстьДела = Дело.ЕстьДела; + ГруппаДела.Представление = НСтр("ru = 'Проверить совместимость'"); + Если Дело.ЕстьДела Тогда + ГруппаДела.Количество = Дело.Количество; + КонецЕсли; + ГруппаДела.Владелец = Подсистема; + Иначе + Если Не ГруппаДела.ЕстьДела Тогда + ГруппаДела.ЕстьДела = Дело.ЕстьДела; + КонецЕсли; + + Если Дело.ЕстьДела Тогда + ГруппаДела.Количество = ГруппаДела.Количество + Дело.Количество; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Функция СинонимДанныхСтрокиДереваСтатистики(СтрокаДерева, ТипИсточникаСтрокой) + + Синоним = СтрокаДерева.Синоним; + + Фильтр = Новый Структура("ПолноеИмя, Синоним", СтрокаДерева.ПолноеИмя, Синоним); + Существующие = СтрокаДерева.Владелец().Строки.НайтиСтроки(Фильтр, Истина); + Количество = Существующие.Количество(); + Если Количество = 0 Или (Количество = 1 И Существующие[0] = СтрокаДерева) Тогда + // Не было еще такого описания в этом дереве. + Возврат Синоним; + КонецЕсли; + + Синоним = "[СинонимТаблицыПриемника] ([ИмяТаблицыИсточника])"; // Не локализуется + Синоним = СтрЗаменить(Синоним, "[СинонимТаблицыПриемника]", СтрокаДерева.Синоним); + + Возврат СтрЗаменить(Синоним, "[ИмяТаблицыИсточника]", УдалитьИмяКлассаИзИмениОбъекта(ТипИсточникаСтрокой)); +КонецФункции + +Функция ОпределитьНаличиеДвиженийПоДокументу(ДокументСсылка) + ТекстЗапроса = ""; + // Для исключения падения для документов, проводящимся более чем по 256 таблицам. + счетчик_таблиц = 0; + + МетаданныеДокумента = ДокументСсылка.Метаданные(); + + Если МетаданныеДокумента.Движения.Количество() = 0 Тогда + Возврат Новый ТаблицаЗначений; + КонецЕсли; + + Для Каждого Движение Из МетаданныеДокумента.Движения Цикл + // В запросе получаем имена регистров, по которым есть хотя бы одно движение + // например, + // ВЫБРАТЬ Первые 1 «РегистрНакопления.ТоварыНаСкладах» + // ИЗ РегистрНакопления.ТоварыНаСкладах + // ГДЕ Регистратор = &Регистратор + + // Имя регистра приводим к Строка(200), см. ниже. + ТекстЗапроса = ТекстЗапроса + " + |" + ?(ТекстЗапроса = "", "", "ОБЪЕДИНИТЬ ВСЕ ") + " + |ВЫБРАТЬ ПЕРВЫЕ 1 ВЫРАЗИТЬ(""" + Движение.ПолноеИмя() + + """ КАК Строка(200)) КАК Имя ИЗ " + Движение.ПолноеИмя() + + " ГДЕ Регистратор = &Регистратор"; + + // Если в запрос попадает более 256 таблиц - разбиваем его на две части + // (вариант документа с проведением по 512 регистрам считаем нежизненным). + счетчик_таблиц = счетчик_таблиц + 1; + Если счетчик_таблиц = 256 Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + Запрос = Новый Запрос(ТекстЗапроса); + ЗАпрос.УстановитьПараметр("Регистратор", ДокументСсылка); + // При выгрузке для колонки «Имя» тип устанавливается по самой длинной строке из запроса + // при втором проходе по таблице новое имя может не «влезть», по этому сразу в запросе + // приводится к строка(200). + ТаблицаЗапроса = Запрос.Выполнить().Выгрузить(); + + // Если количество таблиц не превысило 256 - возвращаем таблицу. + Если счетчик_таблиц = МетаданныеДокумента.Движения.Количество() Тогда + Возврат ТаблицаЗапроса; + КонецЕсли; + + // Таблиц больше чем 256, делаем доп. запрос и дополняем строки таблицы. + + ТекстЗапроса = ""; + Для Каждого Движение Из МетаданныеДокумента.Движения Цикл + + Если счетчик_таблиц > 0 Тогда + счетчик_таблиц = счетчик_таблиц - 1; + Продолжить; + КонецЕсли; + + ТекстЗапроса = ТекстЗапроса + " + |" + ?(ТекстЗапроса = "", "", "ОБЪЕДИНИТЬ ВСЕ ") + " + |ВЫБРАТЬ ПЕРВЫЕ 1 """ + Движение.ПолноеИмя() + """ КАК Имя ИЗ " + + Движение.ПолноеИмя() + " ГДЕ Регистратор = &Регистратор"; + + + КонецЦикла; + Запрос.Текст = ТекстЗапроса; + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + СтрокаТаблицы = ТаблицаЗапроса.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаТаблицы, Выборка); + КонецЦикла; + + Возврат ТаблицаЗапроса; + +КонецФункции + +#КонецОбласти + +#Область РаботаСКонстантойСообщениеОбменаИзГлавногоУзла // Зачитывает из информационной базы информацию о сообщении обмена данными. // @@ -11902,9 +12309,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// Профили безопасности -// +#КонецОбласти + +#Область ПрофилиБезопасности Процедура СформироватьЗапросыНаИспользованиеВнешнихРесурсов(ЗапросыРазрешений) @@ -11919,14 +12326,6 @@ КонецПроцедуры -Функция ЗапросНаИспользованиеВнешнихРесурсовПриВключенииОбмена() Экспорт - - Запросы = Новый Массив(); - СформироватьЗапросыНаИспользованиеВнешнихРесурсов(Запросы); - Возврат Запросы; - -КонецФункции - Процедура ЗапросВнешнихРесурсовДляКаталогаСообщенийОбменаДанными(ЗапросыРазрешений, Объект) Экспорт ЗначениеКонстанты = Объект.Значение; @@ -11944,48 +12343,11 @@ КонецПроцедуры -Функция ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов() Экспорт - - Запросы = Новый Массив; - - Для Каждого ИмяПланаОбмена Из ОбменДаннымиПовтИсп.ПланыОбменаБСП() Цикл - - ТекстЗапроса = - "ВЫБРАТЬ - | ПланОбмена.Ссылка КАК Узел - |ИЗ - | ПланОбмена.[ИмяПланаОбмена] КАК ПланОбмена"; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", ИмяПланаОбмена); - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - - Результат = Запрос.Выполнить(); - Выборка = Результат.Выбрать(); - - Пока Выборка.Следующий() Цикл - - Запросы.Добавить(РаботаВБезопасномРежиме.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов(Выборка.Узел)); - - КонецЦикла; - - КонецЦикла; - - Запросы.Добавить(РаботаВБезопасномРежиме.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов( - ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Метаданные.Константы.КаталогСообщенийОбменаДаннымиДляLinux))); - Запросы.Добавить(РаботаВБезопасномРежиме.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов( - ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Метаданные.Константы.КаталогСообщенийОбменаДаннымиДляWindows))); - - Возврат Запросы; - -КонецФункции - // Возвращает шаблон имени профиля безопасности для внешнего модуля. // Функция должна возвращать одно и то же значение при многократном вызове. // // Параметры: -// ВнешнийМодуль - ЛюбаяСсылка, ссылка на внешний модуль, +// ВнешнийМодуль - ЛюбаяСсылка, ссылка на внешний модуль. // // Возвращаемое значение - Строка - шаблон имя профиля безопасности, содержащий символы // "%1", вместо которых в дальнейшем будет подставлен уникальный идентификатор. @@ -12028,9 +12390,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС ИНТЕРАКТИВНОГО ДОПОЛНЕНИЯ ВЫГРУЗКИ -// +#КонецОбласти + +#Область ИнтерактивноеИзменениеВыгрузки // Инициализирует дополнение выгрузки для мастера пошагового обмена. // @@ -12368,7 +12730,7 @@ // Возвращаемое значение: // Строка - представление. // -Функция ПредставлениеДополненияВыгрузкиПоСценариюУзла(Знач ДополнениеВыгрузки) Экспорт +Функция ПредставлениеДополненияВыгрузкиПоСценариюУзла(Знач ДополнениеВыгрузки) МетаУзел = ДополнениеВыгрузки.УзелИнформационнойБазы.Метаданные(); МодульМенеджера = ПланыОбмена[МетаУзел.Имя]; @@ -12380,7 +12742,7 @@ Возврат МодульМенеджера.ПредставлениеОтбораИнтерактивнойВыгрузки(ДополнениеВыгрузки.УзелИнформационнойБазы, Параметры); КонецФункции -// Возвращает описание периода и отбора строкой. +// Возвращает описание периода и отбора строкой. // // Параметры: // Период: период для описания отбора. @@ -12412,7 +12774,7 @@ Возврат ОтборСтрокой; КонецФункции -// Возвращает описание детального отбора по реквизиту "ДополнительнаяРегистрация". +// Возвращает описание детального отбора по реквизиту "ДополнительнаяРегистрация". // // Параметры: // ДополнительнаяРегистрация - ТаблицаЗначений, Массив - строки или структуры, описывающие отбор. @@ -12556,248 +12918,6 @@ Возврат Результат; КонецФункции -// Получает параметр защищенного соединения. -// -Функция ЗащищенноеСоединение(Путь) Экспорт - - Возврат ?(НРег(Лев(Путь, 4)) = "ftps", Новый ЗащищенноеСоединениеOpenSSL, Неопределено); - -КонецФункции - -// Заполняет список текущих дел пользователя. -// -// Параметры: -// ТекущиеДела - ТаблицаЗначений - таблица значений с колонками: -// * Идентификатор - Строка - внутренний идентификатор дела, используемый механизмом "Текущие дела". -// * ЕстьДела - Булево - если Истина, дело выводится в списке текущих дел пользователя. -// * Важное - Булево - если Истина, дело будет выделено красным цветом. -// * Представление - Строка - представление дела, выводимое пользователю. -// * Количество - Число - количественный показатель дела, выводится в строке заголовка дела. -// * Форма - Строка - полный путь к форме, которую необходимо открыть при нажатии на гиперссылку -// дела на панели "Текущие дела". -// * ПараметрыФормы- Структура - параметры, с которыми нужно открывать форму показателя. -// * Владелец - Строка, объект метаданных - строковый идентификатор дела, которое будет владельцем для текущего -// или объект метаданных подсистема. -// * Подсказка - Строка - текст подсказки. -// -Процедура ПриЗаполненииСпискаТекущихДелПредупрежденияСинхронизации(ТекущиеДела) - - МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); - Если Не ПравоДоступа("Просмотр", Метаданные.РегистрыСведений.РезультатыОбменаДанными) - Или МодульТекущиеДелаСервер.ДелоОтключено("ПредупрежденияПриСинхронизации") Тогда - Возврат; - КонецЕсли; - - КоличествоНерассмотренныхПроблем = КоличествоНерассмотренныхПроблем(); - - // Процедура вызывается только при наличии подсистемы "Текущие дела", поэтому здесь - // не делается проверка существования подсистемы. - Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.ОбщиеФормы.СинхронизацияДанных.ПолноеИмя()); - - Для Каждого Раздел Из Разделы Цикл - - ИдентификаторПредупрежденияПриСинхронизации = "ПредупрежденияПриСинхронизации" + СтрЗаменить(Раздел.ПолноеИмя(), ".", ""); - Дело = ТекущиеДела.Добавить(); - Дело.Идентификатор = ИдентификаторПредупрежденияПриСинхронизации; - Дело.ЕстьДела = КоличествоНерассмотренныхПроблем > 0; - Дело.Представление = НСтр("ru = 'Предупреждения при синхронизации'"); - Дело.Количество = КоличествоНерассмотренныхПроблем; - Дело.Форма = "РегистрСведений.РезультатыОбменаДанными.Форма.Форма"; - Дело.Владелец = Раздел; - - КонецЦикла; - -КонецПроцедуры - -// Заполняет список текущих дел пользователя. -// -// Параметры: -// ТекущиеДела - ТаблицаЗначений - таблица значений с колонками: -// * Идентификатор - Строка - внутренний идентификатор дела, используемый механизмом "Текущие дела". -// * ЕстьДела - Булево - если Истина, дело выводится в списке текущих дел пользователя. -// * Важное - Булево - если Истина, дело будет выделено красным цветом. -// * Представление - Строка - представление дела, выводимое пользователю. -// * Количество - Число - количественный показатель дела, выводится в строке заголовка дела. -// * Форма - Строка - полный путь к форме, которую необходимо открыть при нажатии на гиперссылку -// дела на панели "Текущие дела". -// * ПараметрыФормы- Структура - параметры, с которыми нужно открывать форму показателя. -// * Владелец - Строка, объект метаданных - строковый идентификатор дела, которое будет владельцем для текущего -// или объект метаданных подсистема. -// * Подсказка - Строка - текст подсказки. -// -Процедура ПриЗаполненииСпискаТекущихДелНеобходимоОбновление(ТекущиеДела) - - МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); - Если Не ПравоДоступа("Администрирование", Метаданные) - Или МодульТекущиеДелаСервер.ДелоОтключено("НеобходимоОбновлениеОбменДанными") Тогда - Возврат; - КонецЕсли; - - ТребуетсяУстановкаОбновления = ТребуетсяУстановкаОбновления(); - - // Процедура вызывается только при наличии подсистемы "Текущие дела", поэтому здесь - // не делается проверка существования подсистемы. - Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.ОбщиеФормы.СинхронизацияДанных.ПолноеИмя()); - - Для Каждого Раздел Из Разделы Цикл - - ИдентификаторНеобходимоОбновление = "НеобходимоОбновлениеОбменДанными" + СтрЗаменить(Раздел.ПолноеИмя(), ".", ""); - Дело = ТекущиеДела.Добавить(); - Дело.Идентификатор = ИдентификаторНеобходимоОбновление; - Дело.ЕстьДела = ТребуетсяУстановкаОбновления; - Дело.Важное = Истина; - Дело.Представление = НСтр("ru = 'Обновить версию программы'"); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда - МодульОбновлениеКонфигурацииКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ОбновлениеКонфигурацииКлиентСервер"); - ПараметрыФормы = Новый Структура("ЗавершениеРаботыСистемы, ПолученоОбновлениеКонфигурации", Ложь, Ложь); - Дело.Форма = МодульОбновлениеКонфигурацииКлиентСервер.ИмяФормыОбработкиОбновлениеКонфигурации(); - Дело.ПараметрыФормы = ПараметрыФормы; - Иначе - Дело.Форма = "ОбщаяФорма.ДополнительноеОписание"; - Дело.ПараметрыФормы = Новый Структура("Заголовок,ИмяМакета", - НСтр("ru = 'Установка обновления'"), "ИнструкцияКакВыполнитьУстановкуОбновленияВручную"); - КонецЕсли; - Дело.Владелец = Раздел; - - КонецЦикла; - -КонецПроцедуры - -// Заполняет список текущих дел пользователя. -// -// Параметры: -// ТекущиеДела - ТаблицаЗначений - таблица значений с колонками: -// * Идентификатор - Строка - внутренний идентификатор дела, используемый механизмом "Текущие дела". -// * ЕстьДела - Булево - если Истина, дело выводится в списке текущих дел пользователя. -// * Важное - Булево - если Истина, дело будет выделено красным цветом. -// * Представление - Строка - представление дела, выводимое пользователю. -// * Количество - Число - количественный показатель дела, выводится в строке заголовка дела. -// * Форма - Строка - полный путь к форме, которую необходимо открыть при нажатии на гиперссылку -// дела на панели "Текущие дела". -// * ПараметрыФормы- Структура - параметры, с которыми нужно открывать форму показателя. -// * Владелец - Строка, объект метаданных - строковый идентификатор дела, которое будет владельцем для текущего -// или объект метаданных подсистема. -// * Подсказка - Строка - текст подсказки. -// -Процедура ПриЗаполненииСпискаТекущихДелПроверитьСовместимостьСТекущейВерсией(ТекущиеДела) - - МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); - Если Не ПравоДоступа("Редактирование", Метаданные.РегистрыСведений.ПравилаДляОбменаДанными) - Или МодульТекущиеДелаСервер.ДелоОтключено("ПравилаОбмена") Тогда - Возврат; - КонецЕсли; - - // Если нет раздела администрирование, дело не добавляется. - Подсистема = Метаданные.Подсистемы.Найти("Администрирование"); - Если Подсистема <> Неопределено - И Не ПравоДоступа("Просмотр", Подсистема) - И Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(Подсистема) Тогда - Возврат; - КонецЕсли; - - ВывестиДело = Истина; - ПровереноНаВерсию = ХранилищеОбщихНастроек.Загрузить("ТекущиеДела", "ПланыОбмена"); - Если ПровереноНаВерсию <> Неопределено Тогда - ВерсияМассив = СтрРазделить(Метаданные.Версия, "."); - ТекущаяВерсия = ВерсияМассив[0] + ВерсияМассив[1] + ВерсияМассив[2]; - Если ПровереноНаВерсию = ТекущаяВерсия Тогда - ВывестиДело = Ложь; // Дополнительные отчеты и обработки проверены на текущей версии. - КонецЕсли; - КонецЕсли; - - ПланыОбменаСПравиламиИзФайла = ПланыОбменаСПравиламиИзФайла(); - - // Добавление дела. - Дело = ТекущиеДела.Добавить(); - Дело.Идентификатор = "ПравилаОбмена"; - Дело.ЕстьДела = ВывестиДело И ПланыОбменаСПравиламиИзФайла > 0; - Дело.Представление = НСтр("ru = 'Правила обмена'"); - Дело.Количество = ПланыОбменаСПравиламиИзФайла; - Дело.Форма = "РегистрСведений.ПравилаДляОбменаДанными.Форма.ПроверкаСинхронизацииДанных"; - Дело.Владелец = "ПроверитьСовместимостьСТекущейВерсией"; - - // Проверка наличия группы дела. Если группа отсутствует - добавляем. - ГруппаДела = ТекущиеДела.Найти("ПроверитьСовместимостьСТекущейВерсией", "Идентификатор"); - Если ГруппаДела = Неопределено Тогда - ГруппаДела = ТекущиеДела.Добавить(); - ГруппаДела.Идентификатор = "ПроверитьСовместимостьСТекущейВерсией"; - ГруппаДела.ЕстьДела = Дело.ЕстьДела; - ГруппаДела.Представление = НСтр("ru = 'Проверить совместимость'"); - Если Дело.ЕстьДела Тогда - ГруппаДела.Количество = Дело.Количество; - КонецЕсли; - ГруппаДела.Владелец = Подсистема; - Иначе - Если Не ГруппаДела.ЕстьДела Тогда - ГруппаДела.ЕстьДела = Дело.ЕстьДела; - КонецЕсли; - - Если Дело.ЕстьДела Тогда - ГруппаДела.Количество = ГруппаДела.Количество + Дело.Количество; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -// Для внутреннего использования. -// -Функция СинонимДанныхСтрокиДереваСтатистики(СтрокаДерева, ТипИсточникаСтрокой) - - Синоним = СтрокаДерева.Синоним; - - Фильтр = Новый Структура("ПолноеИмя, Синоним", СтрокаДерева.ПолноеИмя, Синоним); - Существующие = СтрокаДерева.Владелец().Строки.НайтиСтроки(Фильтр, Истина); - Количество = Существующие.Количество(); - Если Количество = 0 Или (Количество = 1 И Существующие[0] = СтрокаДерева) Тогда - // Не было еще такого описания в этом дереве. - Возврат Синоним; - КонецЕсли; - - Синоним = "[СинонимТаблицыПриемника] ([ИмяТаблицыИсточника])"; // Не локализуется - Синоним = СтрЗаменить(Синоним, "[СинонимТаблицыПриемника]", СтрокаДерева.Синоним); - - Возврат СтрЗаменить(Синоним, "[ИмяТаблицыИсточника]", УдалитьИмяКлассаИзИмениОбъекта(ТипИсточникаСтрокой)); -КонецФункции - -Процедура УдалитьФайлИзХранилища(ИдентификаторФайла) Экспорт - - УдалитьФайлы(ВременныйКаталогВыгрузки(ИдентификаторФайла)); - - // Удаляем информацию о файле сообщения обмена из хранилища. - СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("ИдентификаторСообщения", Строка(ИдентификаторФайла)); - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() - И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - - МодульОбменДаннымиВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиВМоделиСервиса"); - МодульОбменДаннымиВМоделиСервиса.ПриУдаленииФайлаИзХранилища(СтруктураЗаписи); - Иначе - - ПриУдаленииФайлаИзХранилища(СтруктураЗаписи); - - КонецЕсли; - -КонецПроцедуры - -// Удаление файла из хранилища. -// -Процедура ПриУдаленииФайлаИзХранилища(Знач СтруктураЗаписи) - - РегистрыСведений.СообщенияОбменаДанными.УдалитьЗапись(СтруктураЗаписи); - -КонецПроцедуры - -Функция ВременныйКаталогВыгрузки(Знач ИдентификаторСессии) - - УстановитьПривилегированныйРежим(Истина); - - ВременныйКаталог = "{ИдентификаторСессии}"; - ВременныйКаталог = СтрЗаменить(ВременныйКаталог, "ИдентификаторСессии", Строка(ИдентификаторСессии)); - - Результат = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ОбменДаннымиПовтИсп.КаталогВременногоХранилищаФайлов(), ВременныйКаталог); - - Возврат Результат; -КонецФункции +#КонецОбласти #КонецОбласти diff --git a/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl index c65f95613..1a3a7c253 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСлужебный/Module.bsl @@ -1,6 +1,5 @@ #Область СлужебныйПрограммныйИнтерфейс -// Для внутреннего использования. Функция ЗагрузитьЧастьФайла(ИдентификаторФайла, НомерЗагружаемойЧастиФайла, ЗагружаемаяЧастьФайла, СообщениеОбОшибке) Экспорт СообщениеОбОшибке = ""; @@ -34,7 +33,6 @@ КонецФункции -// Для внутреннего использования. Функция ВыгрузитьЧастьФайла(ИдентификаторФайла, НомерВыгружаемойЧастиФайла, СообщениеОбОшибке) Экспорт СообщениеОбОшибке = ""; @@ -68,7 +66,6 @@ КонецФункции -// Для внутреннего использования. Функция ПодготовитьФайлДляЗагрузки(ИдентификаторФайла, СообщениеОбОшибке) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -157,7 +154,6 @@ КонецФункции -// Для внутреннего использования. Процедура ПодготовитьДанныеДляВыгрузкиИзИнформационнойБазы(ПараметрыWEBСервиса, СообщениеОбОшибке) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -238,8 +234,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ЗагрузитьДанныеXDTOВИнформационнуюБазу(ПараметрыWEBСервиса, СообщениеОбОшибке) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -282,8 +276,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Функция ВременныйКаталогВыгрузки(Знач ИдентификаторСессии) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -297,11 +289,9 @@ КонецФункции -// Для внутреннего использования. -// Процедура ПроверитьВозможностьВыполненияОбменов() Экспорт - Если Не Пользователи.РолиДоступны("ВыполнениеСинхронизацииДанных, НастройкаСинхронизацииДанных") Тогда + Если Не Пользователи.РолиДоступны("ВыполнениеСинхронизацииДанных") Тогда ВызватьИсключение НСтр("ru = 'Недостаточно прав для синхронизации данных.'"); @@ -314,8 +304,6 @@ КонецПроцедуры -// Для внутреннего использования. -// Процедура ПроверитьБлокировкуИнформационнойБазыДляОбновления() Экспорт Если ЗначениеЗаполнено(ОбновлениеИнформационнойБазыСлужебный.ИнформационнаяБазаЗаблокированаДляОбновления()) Тогда @@ -326,7 +314,6 @@ КонецПроцедуры -// Для внутреннего использования. Функция ПолучитьСтатусВыполненияПолученияДанных(ИдентификаторДлительнойОперации, СообщениеОбОшибке) Экспорт СообщениеОбОшибке = ""; @@ -334,16 +321,22 @@ УстановитьПривилегированныйРежим(Истина); ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(ИдентификаторДлительнойОперации)); - Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда - СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); + СостоянияФоновогоЗадания = СостоянияФоновыхЗаданий(); + Если ФоновоеЗадание = Неопределено Тогда + СостояниеТекущегоФоновогоЗадания = СостоянияФоновогоЗадания.Получить(СостояниеФоновогоЗадания.Отменено); + Иначе + + Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда + СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); + КонецЕсли; + СостояниеТекущегоФоновогоЗадания = СостоянияФоновогоЗадания.Получить(ФоновоеЗадание.Состояние) + КонецЕсли; - СостоянияФоновогоЗадания = СостоянияФоновыхЗаданий(); - Возврат СостоянияФоновогоЗадания.Получить(ФоновоеЗадание.Состояние); + Возврат СостояниеТекущегоФоновогоЗадания; КонецФункции -// Для внутреннего использования. Функция ПолучитьСтатусВыполненияПодготовкиДанныхКОтправке(ИдентификаторФоновогоЗадания, СообщениеОбОшибке) Экспорт СообщениеОбОшибке = ""; @@ -355,26 +348,31 @@ ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(ИдентификаторФоновогоЗадания)); - СообщениеОбОшибке = ""; - КоличествоЧастейФайла = 0; - ИдентификаторФайла = ""; - СостояниеТекущегоФоновогоЗадания = СостоянияФоновыхЗаданий().Получить(ФоновоеЗадание.Состояние); - - Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда - СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); + Если ФоновоеЗадание = Неопределено Тогда + СостояниеТекущегоФоновогоЗадания = СостоянияФоновыхЗаданий().Получить(СостояниеФоновогоЗадания.Отменено); Иначе - Если ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Завершено Тогда - МассивСообщений = ФоновоеЗадание.ПолучитьСообщенияПользователю(Истина); - Для Каждого СообщениеФоновогоЗадания Из МассивСообщений Цикл - Если Найти(СообщениеФоновогоЗадания.Текст, "{WEBService}") > 0 Тогда - МассивРезультата = СтрРазделить(СообщениеФоновогоЗадания.Текст, "$", Истина); - КоличествоЧастейФайла = МассивРезультата[1]; - ИдентификаторФайла = МассивРезультата[2]; - Прервать; - Иначе - Продолжить; - КонецЕсли; - КонецЦикла; + + СообщениеОбОшибке = ""; + КоличествоЧастейФайла = 0; + ИдентификаторФайла = ""; + СостояниеТекущегоФоновогоЗадания = СостоянияФоновыхЗаданий().Получить(ФоновоеЗадание.Состояние); + + Если ФоновоеЗадание.ИнформацияОбОшибке <> Неопределено Тогда + СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); + Иначе + Если ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Завершено Тогда + МассивСообщений = ФоновоеЗадание.ПолучитьСообщенияПользователю(Истина); + Для Каждого СообщениеФоновогоЗадания Из МассивСообщений Цикл + Если СтрНайти(СообщениеФоновогоЗадания.Текст, "{WEBService}") > 0 Тогда + МассивРезультата = СтрРазделить(СообщениеФоновогоЗадания.Текст, "$", Истина); + КоличествоЧастейФайла = МассивРезультата[1]; + ИдентификаторФайла = МассивРезультата[2]; + Прервать; + Иначе + Продолжить; + КонецЕсли; + КонецЦикла; + КонецЕсли; КонецЕсли; КонецЕсли; @@ -387,8 +385,24 @@ КонецФункции -// Для внутреннего использования. -Функция КомпонентыОбмена(НаправлениеОбмена, ПараметрыWEBСервиса) Экспорт +Функция ИнициализироватьПараметрыWebСервиса() Экспорт + + СтруктураПараметров = Новый Структура; + СтруктураПараметров.Вставить("ИмяПланаОбмена"); + СтруктураПараметров.Вставить("КодУзлаПланаОбмена"); + СтруктураПараметров.Вставить("ИдентификаторФайлаВоВременномХранилище"); + СтруктураПараметров.Вставить("РазмерЧастиФайла"); + СтруктураПараметров.Вставить("ИмяWEBСервиса"); + + Возврат СтруктураПараметров; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция КомпонентыОбмена(НаправлениеОбмена, ПараметрыWEBСервиса) КомпонентыОбмена = ОбменДаннымиXDTOСервер.ИнициализироватьКомпонентыОбмена(НаправлениеОбмена); @@ -435,24 +449,6 @@ КонецФункции -// Для внутреннего использования. -Функция ИнициализироватьПараметрыWebСервиса() Экспорт - - СтруктураПараметров = Новый Структура; - СтруктураПараметров.Вставить("ИмяПланаОбмена"); - СтруктураПараметров.Вставить("КодУзлаПланаОбмена"); - СтруктураПараметров.Вставить("ИдентификаторФайлаВоВременномХранилище"); - СтруктураПараметров.Вставить("РазмерЧастиФайла"); - СтруктураПараметров.Вставить("ИмяWEBСервиса"); - - Возврат СтруктураПараметров; - -КонецФункции - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - Функция ПолучитьИмяЧастиФайла(НомерЧастиФайла, ИмяАрхива = "") Если Не ЗначениеЗаполнено(ИмяАрхива) Тогда diff --git a/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl index beb61923d..647f42930 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl @@ -243,7 +243,7 @@ // РегистрБухгалтерииНаборЗаписей.<Имя>, // РегистрРасчетаНаборЗаписей.<Имя> - набор записей. // -// УзелПланаОбмена - ПланыОбменаСсылка.<Имя плана обмена> - узел, +// УзелПланаОбмена - ПланыОбменаОбъект.<Имя плана обмена> - узел, // для которого будет выполнена проверка. // // Возвращаемое значение: @@ -337,6 +337,13 @@ // В режиме загрузки параметров работы программы игнорируем получение всех данных. ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; + Иначе + + Если ТипЗнч(ЭлементДанных) = Тип("КонстантаМенеджерЗначения.ДанныеДляОтложенногоОбновления") Тогда + ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; + ОбменДаннымиСервер.ОбработатьДанныеДляОбновленияВПодчиненномУзле(ЭлементДанных); + КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -454,11 +461,8 @@ #Область СлужебныеПроцедурыИФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики подписок на события. +#Область ОбработчикиПодписокНаСобытия -// Только для внутреннего использования. -// Процедура ЗарегистрироватьИзмененияФильтровОграниченияМиграцииДанных(Источник, Отказ) Экспорт Если Источник.ОбменДанными.Загрузка Тогда @@ -499,14 +503,16 @@ КонецПроцедуры -// Только для внутреннего использования. -// Процедура ПроверитьИзменениеФильтровОграниченияМиграцииДанныхПриЗаписи(Источник, Отказ) Экспорт Если Источник.ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; + Если Не ОбменДаннымиПовтИсп.ЭтоУзелОбменаДаннымиБСП(Источник.Ссылка) Тогда + Возврат; + КонецЕсли; + ЗарегистрированныеКВыгрузкеОбъекты = Неопределено; Если Источник.ДополнительныеСвойства.Свойство("ЗарегистрированныеКВыгрузкеОбъекты", ЗарегистрированныеКВыгрузкеОбъекты) Тогда @@ -537,10 +543,12 @@ КонецПроцедуры -// Только для внутреннего использования. -// Процедура ВключитьИспользованиеПланаОбмена(Источник, Отказ) Экспорт + // Проверка значения свойства ОбменДанными.Загрузка отсутствует по причине того, что в расположенным ниже коде, + // реализована логика, которая должна выполняться в том числе при установке этого свойства равным Истина + // (на стороне кода, который выполняет попытку записи в данный план обмена). + Если Источник.ЭтоНовый() И ОбменДаннымиПовтИсп.ЭтоУзелРазделенногоОбменаДаннымиБСП(Источник.Ссылка) Тогда // Кэш открытых сеансов для МРО стал неактуальным. @@ -550,10 +558,12 @@ КонецПроцедуры -// Только для внутреннего использования. -// Процедура ОтключитьИспользованиеПланаОбмена(Источник, Отказ) Экспорт + // Проверка значения свойства ОбменДанными.Загрузка отсутствует по причине того, что в расположенным ниже коде, + // реализована логика, которая должна выполняться в том числе при установке этого свойства равным Истина + // (на стороне кода, который выполняет попытку удаления узла данного плана обмена). + Если ОбменДаннымиПовтИсп.ЭтоУзелРазделенногоОбменаДаннымиБСП(Источник.Ссылка) Тогда // Кэш открытых сеансов для МРО стал неактуальным. @@ -563,18 +573,19 @@ КонецПроцедуры -// Только для внутреннего использования. -// Процедура ПроверитьВозможностьИзмененияНастроекОбменаДанными(Источник, Отказ) Экспорт Если Источник.ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; + Если Не ОбменДаннымиПовтИсп.ЭтоУзелОбменаДаннымиБСП(Источник.Ссылка) Тогда + Возврат; + КонецЕсли; + Если Не Источник.ДополнительныеСвойства.Свойство("ПолучениеСообщенияОбмена") И Не Источник.ЭтоНовый() И Не Источник.ЭтотУзел - И ОбменДаннымиПовтИсп.ЭтоУзелОбменаДаннымиБСП(Источник.Ссылка) И ДанныеРазличаются(Источник, Источник.Ссылка.ПолучитьОбъект(),, "НомерОтправленного, НомерПринятого, ПометкаУдаления, Код, Наименование") И ОбменДаннымиВызовСервера.ИзмененияЗарегистрированы(Источник.Ссылка) Тогда @@ -586,19 +597,20 @@ Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И НЕ ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() И Не Источник.ЭтоНовый() - И ОбменДаннымиПовтИсп.ЭтоУзелОбменаДаннымиБСП(Источник.Ссылка) И ДанныеРазличаются(Источник, Источник.Ссылка.ПолучитьОбъект(), "Код, Наименование") Тогда - ВызватьИсключение Нстр("ru = 'Изменение наименования и кода синхронизации данных недопустимо.'"); + ВызватьИсключение НСтр("ru = 'Изменение наименования и кода синхронизации данных недопустимо.'"); КонецЕсли; КонецПроцедуры -// Только для внутреннего использования. -// Процедура ОтключитьАвтоматическуюСинхронизациюДанныхПриЗаписи(Источник, Отказ, Замещение) Экспорт + Если Источник.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса") Тогда МодульАвтономнаяРаботаСлужебный = ОбщегоНазначения.ОбщийМодуль("АвтономнаяРаботаСлужебный"); МодульАвтономнаяРаботаСлужебный.ОтключитьАвтоматическуюСинхронизациюДанныхСПриложениемВИнтернете(Источник); @@ -707,16 +719,16 @@ Возврат Отправка = ОтправкаЭлементаДанных.Авто; КонецФункции -// Только для внутреннего использования. -// Процедура ОтменитьОтправкуДанныхУзлаВРаспределеннойИнформационнойБазе(Источник, ЭлементДанных, Игнорировать) Экспорт + Если Не ОбменДаннымиПовтИсп.ЭтоУзелОбменаДаннымиБСП(Источник.Ссылка) Тогда + Возврат; + КонецЕсли; + Игнорировать = Истина; КонецПроцедуры -// Только для внутреннего использования. -// Процедура ЗарегистрироватьИзмененияОбщихДанныхУзлов(Источник, Отказ) Экспорт Если Источник.ОбменДанными.Загрузка Тогда @@ -751,50 +763,25 @@ КонецПроцедуры -// Только для внутреннего использования. -// Процедура ОчиститьСсылкиНаУзелИнформационнойБазы(Источник, Отказ) Экспорт + // Проверка значения свойства ОбменДанными.Загрузка отсутствует по причине того, что в расположенным ниже коде, + // реализована логика, которая должна выполняться в том числе при установке этого свойства равным Истина + // (на стороне кода, который выполняет попытку удаления узла данного плана обмена). + + Если Не ОбменДаннымиПовтИсп.ЭтоУзелОбменаДаннымиБСП(Источник.Ссылка) Тогда + Возврат; + КонецЕсли; + РегистрыСведений.РезультатыОбменаДанными.ОчиститьСсылкиНаУзелИнформационнойБазы(Источник.Ссылка); Справочники.СценарииОбменовДанными.ОчиститьСсылкиНаУзелИнформационнойБазы(Источник.Ссылка); КонецПроцедуры -// Получает текущее значение набора записей в информационной базе. -// -// Параметры: -// Данные - Набор записей регистров. -// -// Возвращаемое значение: -// НаборЗаписей, содержащий текущее значение в информационной базе. -// -Функция ПолучитьНаборЗаписей(Знач Данные) Экспорт - - ОбъектМетаданных = Данные.Метаданные(); - - НаборЗаписей = НаборЗаписейПоТипу(ОбъектМетаданных); - - Для Каждого ЗначениеОтбора Из Данные.Отбор Цикл - - Если ЗначениеОтбора.Использование = Ложь Тогда - Продолжить; - КонецЕсли; - - СтрокаОтбора = НаборЗаписей.Отбор.Найти(ЗначениеОтбора.Имя); - СтрокаОтбора.Значение = ЗначениеОтбора.Значение; - СтрокаОтбора.Использование = Истина; - - КонецЦикла; - - НаборЗаписей.Прочитать(); - - Возврат НаборЗаписей; - -КонецФункции +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// Механизм регистрации объектов (МРО). +#Область МеханизмРегистрацииОбъектов // Определяет список узлов получателей плана обмена ИмяПланаОбмена, для которых необходимо выполнить // регистрацию объекта Объект для последующей его выгрузки. @@ -823,6 +810,10 @@ // Процедура ЗарегистрироватьИзменениеОбъекта(ИмяПланаОбмена, Объект, Отказ, ДополнительныеПараметры = Неопределено) + // Проверка значения свойства ОбменДанными.Загрузка отсутствует по причине того, что в расположенным ниже коде, + // реализована логика, регистрации изменений на узлах плана обмена, которая должна выполняться в том числе при + // установке этого свойства равным Истина (на стороне кода, который выполняет попытку изменения/удаления данных). + НеобязательныеПараметры = Новый Структура; НеобязательныеПараметры.Вставить("ЭтоРегистр", Ложь); НеобязательныеПараметры.Вставить("ЭтоУдалениеОбъекта", Ложь); @@ -842,12 +833,44 @@ Попытка - Если Объект.ДополнительныеСвойства.Свойство("ОтключитьМеханизмРегистрацииОбъектов") Тогда + УстановитьПривилегированныйРежим(Истина); + + // Обновляем повторно используемые значения Механизма регистрации объектов. + ОбменДаннымиВызовСервера.ПроверитьКэшМеханизмаРегистрацииОбъектов(); + + Если ЗначениеЗаполнено(ПараметрыСеанса.ПараметрыОбработчикаОбновления) + И Объект.ДополнительныеСвойства.Свойство("РегистрироватьНаУзлахПлановОбменаПриОбновленииИБ") Тогда + + ОтключитьРегистрацию = Истина; + Если Объект.ДополнительныеСвойства.РегистрироватьНаУзлахПлановОбменаПриОбновленииИБ = Неопределено Тогда + + НазначениеПланаОбмена = ОбменДаннымиПовтИсп.НазначениеПланаОбмена(ИмяПланаОбмена); + Если НазначениеПланаОбмена = "РИБСФильтром" Тогда + // Регистрация может включаться только при использовании параллельного механизма обновления. + // Если механизм используется, то регистрация определяется признаком выполнения обработчика в периферийном узле РИБ. + ПараметрыОбработчикаОбновления = ПараметрыСеанса.ПараметрыОбработчикаОбновления; + Если ПараметрыОбработчикаОбновления.РежимВыполненияОтложенныхОбработчиков = "Параллельно" Тогда + ОтключитьРегистрацию = ПараметрыОбработчикаОбновления.ЗапускатьИВПодчиненномУзлеРИБСФильтрами; + КонецЕсли; + ИначеЕсли НазначениеПланаОбмена = "РИБ" Тогда + ОтключитьРегистрацию = Не ПараметрыСеанса.ПараметрыОбработчикаОбновления.ЗапускатьТолькоВГлавномУзле; + ИначеЕсли НазначениеПланаОбмена = "СинхронизацияСДругойПрограммой" + И Не (ЭтоРегистр Или ЭтоУдалениеОбъекта Или ЭтоКонстанта) И Объект.ЭтоНовый() Тогда + ОтключитьРегистрацию = Ложь; + КонецЕсли; + + ИначеЕсли Объект.ДополнительныеСвойства.РегистрироватьНаУзлахПлановОбменаПриОбновленииИБ Тогда + ОтключитьРегистрацию = Ложь; + КонецЕсли; + + Если ОтключитьРегистрацию Тогда + Возврат; + КонецЕсли; + + ИначеЕсли Объект.ДополнительныеСвойства.Свойство("ОтключитьМеханизмРегистрацииОбъектов") Тогда Возврат; КонецЕсли; - УстановитьПривилегированныйРежим(Истина); - ОбъектМетаданных = Объект.Метаданные(); Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда @@ -887,13 +910,6 @@ Возврат; КонецЕсли; - // Игнорируем регистрацию объектов начального образа узла РИБ. - Если СтандартныеПодсистемыСервер.ЭтоОбъектНачальногоОбразаУзлаРИБ(ОбъектМетаданных) Тогда - Возврат; - КонецЕсли; - - ОбменДаннымиВызовСервера.ПроверитьКэшМеханизмаРегистрацииОбъектов(); - // При физическом удалении объекта ВРО не выполняем. ЗарегистрироватьОбъектКВыгрузке = ЭтоРегистр Или ЭтоУдалениеОбъекта Или ЭтоКонстанта; @@ -971,8 +987,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Выборочная регистрация объектов (ВРО). +#КонецОбласти + +#Область МеханизмВыборочнойРегистрацииОбъектов Функция ОбъектМодифицированДляПланаОбмена(Источник, ОбъектМетаданных, ИмяПланаОбмена, РежимЗаписи, ЗарегистрироватьОбъектКВыгрузке) @@ -1164,8 +1181,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Правила регистрации объектов (ПРО). +#КонецОбласти + +#Область ПравилаРегистрацииОбъектов // Процедура-обертка, выполняет код основной процедуры в режиме попытки // (см. ВыполнитьПравилаРегистрацииОбъектовДляПланаОбменаПопыткаИсключение). @@ -1273,7 +1291,7 @@ // то регистрируем объект на всех узлах плана обмена кроме предопределенного. Получатели = ВсеУзлыПланаОбмена(ИмяПланаОбмена); - ОбщегоНазначения.ЗаполнитьМассивУникальнымиЗначениями(МассивУзловРезультат, Получатели); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивУзловРезультат, Получатели, Истина); Иначе // Последовательно выполняем правила регистрации. @@ -1301,7 +1319,7 @@ #КонецЕсли - ОбщегоНазначения.ЗаполнитьМассивУникальнымиЗначениями(МассивУзловРезультат, Получатели); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивУзловРезультат, Получатели, Истина); // ОПРЕДЕЛЯЕМ ПОЛУЧАТЕЛЕЙ С РЕЖИМОМ ВЫГРУЗКИ "ПРИ НЕОБХОДИМОСТИ" // для наборов записей выполнение регистрации "при необходимости" не имеет физического смысла. @@ -1334,7 +1352,7 @@ #КонецЕсли - ОбщегоНазначения.ЗаполнитьМассивУникальнымиЗначениями(МассивУзловРезультат, Получатели); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивУзловРезультат, Получатели, Истина); // ОПРЕДЕЛЯЕМ ПОЛУЧАТЕЛЕЙ С РЕЖИМОМ ВЫГРУЗКИ "ПРИ НЕОБХОДИМОСТИ" @@ -1352,7 +1370,7 @@ #КонецЕсли - ОбщегоНазначения.ЗаполнитьМассивУникальнымиЗначениями(МассивУзловРезультат, Получатели); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивУзловРезультат, Получатели, Истина); КонецЕсли; @@ -1567,7 +1585,7 @@ КонецЕсли; // {Обработчик: После обработки} Окончание. - ОбщегоНазначения.ЗаполнитьМассивУникальнымиЗначениями(МассивУзловРезультат, Получатели); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивУзловРезультат, Получатели, Истина); КонецПроцедуры @@ -1603,7 +1621,7 @@ КонецЕсли; // {Обработчик: После обработки} Окончание. - ОбщегоНазначения.ЗаполнитьМассивУникальнымиЗначениями(МассивУзловРезультат, Получатели); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивУзловРезультат, Получатели, Истина); КонецПроцедуры @@ -1622,7 +1640,7 @@ МассивУзлов = ОпределитьМассивУзловПоЗначениямСвойств(ЗначенияСвойствОбъекта, ПРО, ИмяПланаОбмена, Источник, Выгрузка); // Добавляем узлы для регистрации. - ОбщегоНазначения.ЗаполнитьМассивУникальнымиЗначениями(МассивУзловРезультат, МассивУзлов); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивУзловРезультат, МассивУзлов, Истина); Если ПроверятьСсылку Тогда @@ -1643,7 +1661,7 @@ МассивУзлов = ОпределитьМассивУзловПоЗначениямСвойствДополнительный(ЗначенияСвойствСсылки, ПРО, ИмяПланаОбмена, Источник); // Добавляем узлы для регистрации. - ОбщегоНазначения.ЗаполнитьМассивУникальнымиЗначениями(МассивУзловРезультат, МассивУзлов); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивУзловРезультат, МассивУзлов, Истина); КонецЕсли; @@ -1711,7 +1729,7 @@ КонецЕсли; // Добавляем узлы для регистрации. - ОбщегоНазначения.ЗаполнитьМассивУникальнымиЗначениями(МассивУзловРезультат, МассивУзлов); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивУзловРезультат, МассивУзлов, Истина); КонецЦикла; @@ -1952,16 +1970,12 @@ КонецФункции -// Только для внутреннего использования. -// Функция ПравилаРегистрацииОбъектовПланаОбмена(Знач ИмяПланаОбмена) Экспорт Возврат ОбменДаннымиПовтИсп.ПравилаРегистрацииОбъектовПланаОбмена(ИмяПланаОбмена); КонецФункции -// Только для внутреннего использования. -// Функция ПравилаРегистрацииОбъекта(Знач ИмяПланаОбмена, Знач ПолноеИмяОбъекта) Экспорт Возврат ОбменДаннымиПовтИсп.ПравилаРегистрацииОбъекта(ИмяПланаОбмена, ПолноеИмяОбъекта); @@ -2011,8 +2025,7 @@ Функция РазделенныеДанные(ОбъектМетаданных) Возврат ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных( - ОбъектМетаданных.ПолноеИмя(), - ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных()); + ОбъектМетаданных.ПолноеИмя(), ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных()); КонецФункции @@ -2065,8 +2078,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Правила регистрации по свойствам объектов. +#КонецОбласти + +#Область ПравилаРегистрацииПоСвойствамОбъектов Процедура ЗаполнитьЗначенияСвойствИзОбъекта(ДеревоЗначений, Объект) @@ -2339,8 +2353,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// События правил регистрации объектов (события ПРО). +#КонецОбласти + +#Область СобытияПравилРегистрацииОбъектов Процедура ВыполнитьОбработчикПРОПередОбработкой(ПРО, Отказ, Объект, ОбъектМетаданных, Знач Выгрузка) @@ -2434,8 +2449,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции. +#КонецОбласти + +#Область ВспомогательныеПроцедурыИФункции Процедура ПриОтправкеДанных(ЭлементДанных, ОтправкаЭлемента, Знач Получатель, Знач СозданиеНачальногоОбраза, Знач Анализ) @@ -2471,35 +2487,32 @@ ИначеЕсли РежимВыгрузкиОбъекта = Перечисления.РежимыВыгрузкиОбъектовОбмена.ВыгружатьВручную Тогда - Если СозданиеНачальногоОбраза Тогда + Если ДанныеСоответствуютФильтруПравилРегистрации(ЭлементДанных, Получатель) Тогда - ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; - - Иначе - - Если ДанныеСоответствуютФильтруПравилРегистрации(ЭлементДанных, Получатель) Тогда + Если Не Анализ Тогда - Если Не Анализ Тогда - - // Удаляем регистрацию изменений данных, выгруженных вручную. - ПланыОбмена.УдалитьРегистрациюИзменений(Получатель, ЭлементДанных); - - КонецЕсли; - - Иначе - - ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; + // Удаляем регистрацию изменений данных, выгруженных вручную. + ПланыОбмена.УдалитьРегистрациюИзменений(Получатель, ЭлементДанных); КонецЕсли; + Иначе + + ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; + КонецЕсли; - + ИначеЕсли РежимВыгрузкиОбъекта = Перечисления.РежимыВыгрузкиОбъектовОбмена.НеВыгружать Тогда ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; КонецЕсли; + Если Не Анализ И ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда + // При отказе в выгрузке объекта необходимо удалить регистрацию изменений. + ПланыОбмена.УдалитьРегистрациюИзменений(Получатель, ЭлементДанных); + КонецЕсли; + КонецПроцедуры Функция ДанныеСоответствуютФильтруПравилРегистрации(ЭлементДанных, Знач Получатель) @@ -3035,8 +3048,6 @@ // -// Только для внутреннего использования. -// Процедура УстановитьЗначенияОтборовНаУзле(УзелПланаОбмена, Настройки) Экспорт ИмяПланаОбмена = УзелПланаОбмена.Метаданные().Имя; @@ -3045,8 +3056,6 @@ КонецПроцедуры -// Только для внутреннего использования. -// Процедура УстановитьЗначенияПоУмолчаниюНаУзле(УзелПланаОбмена, Настройки) Экспорт ИмяПланаОбмена = УзелПланаОбмена.Метаданные().Имя; @@ -3117,7 +3126,9 @@ Для Каждого Элемент Из СтруктураТабличнойЧасти Цикл - УстановитьКоличествоСтрокТаблицы(ТаблицаУзла, Элемент.Значение.Количество()); + Пока ТаблицаУзла.Количество() < Элемент.Значение.Количество() Цикл + ТаблицаУзла.Добавить(); + КонецЦикла; ТаблицаУзла.ЗагрузитьКолонку(Элемент.Значение, Элемент.Ключ); @@ -3125,16 +3136,6 @@ КонецПроцедуры -Процедура УстановитьКоличествоСтрокТаблицы(Таблица, КоличествоСтрок) - - Пока Таблица.Количество() < КоличествоСтрок Цикл - - Таблица.Добавить(); - - КонецЦикла; - -КонецПроцедуры - Функция ПолучитьСсылочныйТипИзПервогоРеквизитаТабличнойЧастиПланаОбмена(Знач ИмяПланаОбмена, Знач ИмяТабличнойЧасти) ТабличнаяЧасть = Метаданные.ПланыОбмена[ИмяПланаОбмена].ТабличныеЧасти[ИмяТабличнойЧасти]; @@ -3156,18 +3157,59 @@ Процедура ПроверитьУстранениеПроблемыДокументаОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт + // Проверка значения свойства ОбменДанными.Загрузка отсутствует по причине того, что в расположенным ниже коде, + // реализована логика, которая должна выполняться в том числе при установке этого свойства равным Истина + // (на стороне кода, который выполняет попытку записи документа, а также при загрузке документа). + РегистрыСведений.РезультатыОбменаДанными.ЗарегистрироватьУстранениеПроблемы(Источник, Перечисления.ТипыПроблемОбменаДанными.НепроведенныйДокумент); КонецПроцедуры Процедура ПроверитьУстранениеПроблемыОбъектаПриЗаписи(Источник, Отказ) Экспорт + // Проверка значения свойства ОбменДанными.Загрузка отсутствует по причине того, что в расположенным ниже коде, + // реализована логика, которая должна выполняться в том числе при установке этого свойства равным Истина + // (на стороне кода, который выполняет попытку записи объекта, а также при загрузке объекта). + РегистрыСведений.РезультатыОбменаДанными.ЗарегистрироватьУстранениеПроблемы(Источник, Перечисления.ТипыПроблемОбменаДанными.НезаполненныеРеквизиты); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Работа с коллизиями изменений данных при обмене. +// Получает текущее значение набора записей в информационной базе. +// +// Параметры: +// Данные - Набор записей регистров. +// +// Возвращаемое значение: +// НаборЗаписей, содержащий текущее значение в информационной базе. +// +Функция ПолучитьНаборЗаписей(Знач Данные) + + ОбъектМетаданных = Данные.Метаданные(); + + НаборЗаписей = НаборЗаписейПоТипу(ОбъектМетаданных); + + Для Каждого ЗначениеОтбора Из Данные.Отбор Цикл + + Если ЗначениеОтбора.Использование = Ложь Тогда + Продолжить; + КонецЕсли; + + СтрокаОтбора = НаборЗаписей.Отбор.Найти(ЗначениеОтбора.Имя); + СтрокаОтбора.Значение = ЗначениеОтбора.Значение; + СтрокаОтбора.Использование = Истина; + + КонецЦикла; + + НаборЗаписей.Прочитать(); + + Возврат НаборЗаписей; + +КонецФункции + +#КонецОбласти + +#Область РаботаСКоллизиямиИзмененияДанныхПриОбмене // Проверяет наличие коллизий при загрузке // и выдает информацию есть ли коллизия при обмене. @@ -3233,7 +3275,6 @@ КонецЕсли; Если ОбменДаннымиПовтИсп.ИспользуетсяВерсионирование(Отправитель) Тогда - Если СсылкаСуществует Тогда Если ЗаписатьОбъект Тогда @@ -3242,33 +3283,23 @@ Комментарий = НСтр("ru = 'Текущая версия (автоматическое разрешение конфликта).'"); КонецЕсли; - СведенияОВерсииОбъекта = Новый Структура("Комментарий", Комментарий); - ПриСозданииВерсииОбъекта(ОбъектВБазе, СведенияОВерсииОбъекта, СсылкаСуществует); + СведенияОВерсииОбъекта = Новый Структура("Комментарий, ТипВерсииОбъекта", Комментарий, "НепринятыеДанныеПоКоллизии"); + ПриСозданииВерсииОбъекта(ОбъектВБазе, СведенияОВерсииОбъекта, СсылкаСуществует, Отправитель); КонецЕсли; Если ЗаписатьОбъект Тогда - - СведенияОВерсииОбъекта = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру( - ЭлементДанных.ДополнительныеСвойства.СведенияОВерсииОбъекта); - - СведенияОВерсииОбъекта.ТипВерсииОбъекта = "ПринятыеДанныеПоКоллизии"; - СведенияОВерсииОбъекта.АвторВерсии = Отправитель; - СведенияОВерсииОбъекта.Комментарий = НСтр("ru = 'Принятая версия (автоматическое разрешение конфликта).'"); - - ЭлементДанных.ДополнительныеСвойства.СведенияОВерсииОбъекта = Новый ФиксированнаяСтруктура(СведенияОВерсииОбъекта); - + СведенияОВерсииОбъекта = Новый Структура; + СведенияОВерсииОбъекта.Вставить("АвторВерсии", Отправитель); + СведенияОВерсииОбъекта.Вставить("ТипВерсииОбъекта", "ПринятыеДанныеПоКоллизии"); + СведенияОВерсииОбъекта.Вставить("Комментарий", НСтр("ru = 'Текущая версия (автоматическое разрешение конфликта).'")); Иначе - - Комментарий = НСтр("ru = 'Отклоненная версия (автоматическое разрешение конфликта).'"); - СведенияОВерсииОбъекта = Новый Структура; СведенияОВерсииОбъекта.Вставить("АвторВерсии", Отправитель); СведенияОВерсииОбъекта.Вставить("ТипВерсииОбъекта", "НепринятыеДанныеПоКоллизии"); - СведенияОВерсииОбъекта.Вставить("Комментарий", Комментарий); - ПриСозданииВерсииОбъекта(ЭлементДанных, СведенияОВерсииОбъекта, СсылкаСуществует); - + СведенияОВерсииОбъекта.Вставить("Комментарий", НСтр("ru = 'Отклоненная версия (автоматическое разрешение конфликта).'")); КонецЕсли; + ПриСозданииВерсииОбъекта(ЭлементДанных, СведенияОВерсииОбъекта, СсылкаСуществует, Отправитель); КонецЕсли; @@ -3282,7 +3313,7 @@ // ЭлементДанных - СправочникОбъект, ДокументОбъект, РегистрСведенийНаборЗаписей и др. данные. // Данные, которые были зачитаны из сообщения обмена, но еще не были записаны в ИБ. // ПолучениеЭлемента - ПолучениеЭлементаДанных. -// Отправитель - ПланыОбменаСсылка. +// Отправитель - ПланыОбменаОбъект. // Процедура ПроверитьНаличиеЗапретаЗагрузкиПоДате(ЭлементДанных, ПолучениеЭлемента, Знач Отправитель) @@ -3301,7 +3332,7 @@ ОписаниеОшибки = ""; МодульДатыЗапретаИзменения.ПроверитьДатыЗапретаЗагрузкиДанных(ЭлементДанных, - Отправитель, Отказ, ОписаниеОшибки); + Отправитель.Ссылка, Отказ, ОписаниеОшибки); Если Отказ Тогда ЗарегистрироватьЗапретЗагрузкиДанныхПоДате(ЭлементДанных, Отправитель, ОписаниеОшибки); @@ -3331,72 +3362,50 @@ ЗаписьЖурналаРегистрации(ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(), УровеньЖурналаРегистрации.Предупреждение, , ЭлементДанных, СообщениеОбОшибке); - Если ОбменДаннымиПовтИсп.ИспользуетсяВерсионирование(Отправитель) И ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(ЭлементДанных.Метаданные()) Тогда + Если ОбменДаннымиПовтИсп.ИспользуетсяВерсионирование(Отправитель.Ссылка) И ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(ЭлементДанных.Метаданные()) Тогда СсылкаНаОбъект = ЭлементДанных.Ссылка; + СсылкаСуществует = ОбщегоНазначения.СсылкаСуществует(СсылкаНаОбъект); - Если ОбщегоНазначения.СсылкаСуществует(СсылкаНаОбъект) Тогда + Если СсылкаСуществует Тогда ОбъектВБазе = СсылкаНаОбъект.ПолучитьОбъект(); Комментарий = НСтр("ru = 'Версия создана при синхронизации данных.'"); СведенияОВерсииОбъекта = Новый Структура("Комментарий", Комментарий); - ПриСозданииВерсииОбъекта(ОбъектВБазе, СведенияОВерсииОбъекта, Истина); + ПриСозданииВерсииОбъекта(ОбъектВБазе, СведенияОВерсииОбъекта, СсылкаСуществует, Отправитель); СтрокаСообщенияОбОшибке = СообщениеОбОшибке; ТипВерсииОбъекта = "НепринятыйПоДатеЗапретаОбъектСуществуетВБазе"; Иначе - СтрокаСообщенияОбОшибке = Нстр("ru = '%1 запрещено загружать в запрещенный период.%2%2%3'"); + СтрокаСообщенияОбОшибке = НСтр("ru = '%1 запрещено загружать в запрещенный период.%2%2%3'"); СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, Строка(ЭлементДанных), Символы.ПС, СообщениеОбОшибке); ТипВерсииОбъекта = "НепринятыйПоДатеЗапретаОбъектНеСуществуетВБазе"; КонецЕсли; + НепринятыеПоДатеЗапрета = Новый Соответствие; + Если Не Отправитель.ДополнительныеСвойства.Свойство("НепринятыеПоДатеЗапрета") Тогда + Отправитель.ДополнительныеСвойства.Вставить("НепринятыеПоДатеЗапрета", НепринятыеПоДатеЗапрета); + Иначе + НепринятыеПоДатеЗапрета = Отправитель.ДополнительныеСвойства.НепринятыеПоДатеЗапрета; + КонецЕсли; + НепринятыеПоДатеЗапрета.Вставить(СсылкаНаОбъект, ТипВерсииОбъекта); + СведенияОВерсииОбъекта = Новый Структура; - СведенияОВерсииОбъекта.Вставить("Автор", Отправитель); + СведенияОВерсииОбъекта.Вставить("АвторВерсии", ОбщегоНазначения.МенеджерОбъектаПоСсылке(Отправитель.Ссылка).НайтиПоКоду(Отправитель.Код)); СведенияОВерсииОбъекта.Вставить("ТипВерсииОбъекта", ТипВерсииОбъекта); СведенияОВерсииОбъекта.Вставить("Комментарий", СтрокаСообщенияОбОшибке); - ПриСозданииВерсииОбъекта(ЭлементДанных, СведенияОВерсииОбъекта); + + ПриСозданииВерсииОбъекта(ЭлементДанных, СведенияОВерсииОбъекта, СсылкаСуществует, Отправитель); КонецЕсли; КонецПроцедуры -// Создает и записывает версию объекта в информационную базу. -// -// Параметры: -// Объект - записываемый объект ИБ. -// СсылкаСуществует - Булево - Признак наличия объекта по ссылке в информационной базе. -// СведенияОВерсииОбъекта - Структура - сведения о версии объекта: -// * АвторВерсии - Пользователь или Узел плана обмена - Источник версии. -// Необязательный, значение по умолчанию Неопределено. -// * ТипВерсииОбъекта - Строка - Тип создаваемой версии. -// Необязательный, значение по умолчанию "ИзмененоПользователем". -// * Комментарий - Строка - Комментарий к создаваемой версии. -// Необязательный, значение по умолчанию "". -// -Процедура ПриСозданииВерсииОбъекта(Объект, СведенияОВерсииОбъекта, СсылкаСуществует = Неопределено) - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда - - СведенияОНовойВерсииОбъекта = Новый Структура; - СведенияОНовойВерсииОбъекта.Вставить("АвторВерсии", Неопределено); - СведенияОНовойВерсииОбъекта.Вставить("ТипВерсииОбъекта", "ИзмененоПользователем"); - СведенияОНовойВерсииОбъекта.Вставить("Комментарий", ""); - ЗаполнитьЗначенияСвойств(СведенияОНовойВерсииОбъекта, СведенияОВерсииОбъекта); - - МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); - МодульВерсионированиеОбъектов.СоздатьВерсиюОбъектаПоОбменуДанными(Объект, СведенияОНовойВерсииОбъекта, СсылкаСуществует); - - КонецЕсли; - -КонецПроцедуры - -// Только для внутреннего использования. -// Процедура ЗарегистрироватьПредупреждениеОКоллизииВЖурналеРегистрации(Объект, МетаданныеОбъекта, ЗаписатьОбъект, ЭтоСсылочныйТип) Если ЗаписатьОбъект Тогда @@ -3418,8 +3427,6 @@ КонецПроцедуры -// Только для внутреннего использования. -// Функция ПолучитьДанныеОбъектаСтрокойДоИзменения(Объект, МетаданныеОбъекта, ЭтоСсылочныйТип, СсылкаСуществует, ОбъектВБазе) // Возвращаемое значение функции. @@ -3454,8 +3461,6 @@ КонецФункции -// Только для внутреннего использования. -// Функция ПолучитьДанныеОбъектаСтрокойПослеИзменения(Объект, МетаданныеОбъекта) // Возвращаемое значение функции. @@ -3475,4 +3480,36 @@ КонецФункции +// Создает и записывает версию объекта в информационную базу. +// +// Параметры: +// Объект - записываемый объект ИБ. +// СсылкаСуществует - Булево - Признак наличия объекта по ссылке в информационной базе. +// СведенияОВерсииОбъекта - Структура - сведения о версии объекта: +// * АвторВерсии - Пользователь или Узел плана обмена - Источник версии. +// Необязательный, значение по умолчанию Неопределено. +// * ТипВерсииОбъекта - Строка - Тип создаваемой версии. +// Необязательный, значение по умолчанию "ИзмененоПользователем". +// * Комментарий - Строка - Комментарий к создаваемой версии. +// Необязательный, значение по умолчанию "". +// +Процедура ПриСозданииВерсииОбъекта(Объект, СведенияОВерсииОбъекта, СсылкаСуществует, Отправитель) + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда + + СведенияОНовойВерсииОбъекта = Новый Структура; + СведенияОНовойВерсииОбъекта.Вставить("АвторВерсии", Неопределено); + СведенияОНовойВерсииОбъекта.Вставить("ТипВерсииОбъекта", "ИзмененоПользователем"); + СведенияОНовойВерсииОбъекта.Вставить("Комментарий", ""); + ЗаполнитьЗначенияСвойств(СведенияОНовойВерсииОбъекта, СведенияОВерсииОбъекта); + + МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); + МодульВерсионированиеОбъектов.СоздатьВерсиюОбъектаПоОбменуДанными(Объект, СведенияОНовойВерсииОбъекта, СсылкаСуществует, Отправитель); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти diff --git a/SSL/src/CommonModules/ОбменСообщениями/Module.bsl b/SSL/src/CommonModules/ОбменСообщениями/Module.bsl index e9351b71d..2dc15334e 100644 --- a/SSL/src/CommonModules/ОбменСообщениями/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениями/Module.bsl @@ -578,6 +578,8 @@ Функция НачатьОтправкуБыстрыхСообщений() + НачатьОтправку = Истина; + НачатьТранзакцию(); Попытка Блокировка = Новый БлокировкаДанных; @@ -590,19 +592,18 @@ // Метод ТекущаяДатаСеанса() использовать нельзя. // Текущая дата сервера в данном случае используется в качестве ключа уникальности. Если БлокировкаОтправкиБыстрыхСообщений >= ТекущаяДата() Тогда - ЗафиксироватьТранзакцию(); - Возврат Ложь; + НачатьОтправку = Ложь; + Иначе + Константы.БлокировкаОтправкиБыстрыхСообщений.Установить(ТекущаяДата() + 60 * 5); КонецЕсли; - Константы.БлокировкаОтправкиБыстрыхСообщений.Установить(ТекущаяДата() + 60 * 5); - ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; - Возврат Истина; + Возврат НачатьОтправку; КонецФункции Процедура ЗавершитьОтправкуБыстрыхСообщений() diff --git a/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl index e59daed23..bac424e92 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl @@ -279,7 +279,7 @@ КонецЕсли; ТребуетсяВосстановлениеРазделения = Ложь; - Если ОбластьДанных <> -1 Тогда + Если ОбластьДанных <> -1 И НЕ ВыполняетсяПолучениеСообщения Тогда Если МодульРаботаВМоделиСервиса.ОбластьДанныхЗаблокирована(ОбластьДанных) Тогда // Сообщение для заблокированной области не может быть принято. @@ -372,6 +372,16 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Экспортные служебные процедуры и функции. + +// Только для внутреннего использования. +Функция ЭтотУзел() Экспорт + + Возврат ПланыОбмена.ОбменСообщениями.ЭтотУзел(); + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -858,15 +868,6 @@ КонецПроцедуры -// Только для внутреннего использования. -Процедура ДобавитьОбработчикКаналаСообщений(Канал, ОбработчикКанала, Обработчики) Экспорт - - Обработчик = Обработчики.Добавить(); - Обработчик.Канал = Канал; - Обработчик.Обработчик = ОбработчикКанала; - -КонецПроцедуры - // Только для внутреннего использования. Функция КодЭтогоУзла() Экспорт @@ -881,13 +882,6 @@ КонецФункции -// Только для внутреннего использования. -Функция ЭтотУзел() Экспорт - - Возврат ПланыОбмена.ОбменСообщениями.ЭтотУзел(); - -КонецФункции - // Только для внутреннего использования. Функция ВсеПолучатели() Экспорт @@ -1056,7 +1050,7 @@ КонецФункции // Только для внутреннего использования. -Функция ПолучитьWSПрокси_2_0_1_6(СтруктураНастроек, СтрокаСообщенияОбОшибке = "", Таймаут = 60) Экспорт +Функция ПолучитьWSПрокси_2_0_1_6(СтруктураНастроек, СтрокаСообщенияОбОшибке = "", Таймаут = 60) СтруктураНастроек.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SSL/MessageExchange_2_0_1_6"); СтруктураНастроек.Вставить("WSИмяСервиса", "MessageExchange_2_0_1_6"); @@ -1070,7 +1064,7 @@ // обмена на стороне этой информационной базы не должно использоваться). // // Параметры: -// Отправитель - ПланОбменаСсылка.ОбменСообщениями, +// Отправитель - ПланОбменаСсылка.ОбменСообщениями. // // Возвращаемое значение: Булево. // @@ -1090,7 +1084,7 @@ // Возвращаемое значение: // Массив номеров версий, поддерживаемых интерфейсом корреспондента. // -Функция ВерсииКорреспондента(Знач Корреспондент) Экспорт +Функция ВерсииКорреспондента(Знач Корреспондент) Если ТипЗнч(Корреспондент) = Тип("Структура") Тогда СтруктураНастроек = Корреспондент; diff --git a/SSL/src/CommonModules/ОбменСообщениямиКлиент/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиКлиент/Module.bsl index 9e309ad7a..746d0438f 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениямиКлиент/Module.bsl @@ -3,7 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -#Область СлужебныеПроцедурыИФункции +#Область СлужебныйПрограммныйИнтерфейс // Выполняет отправку и получение сообщений системы. // @@ -31,6 +31,10 @@ КонецПроцедуры +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + // Только для внутреннего использования. // // Возвращаемое значение: diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl index 06136a557..c10f872b6 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl @@ -7,6 +7,2268 @@ #Область ПрограммныйИнтерфейс +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для использования в обработчиках обновления. +// + +// Записывает изменения в переданном объекте. +// Для использования в обработчиках обновления. +// +// Параметры: +// Данные - Произвольный - объект, набор записей или менеджер константы, который +// необходимо записать. +// РегистрироватьНаУзлахПлановОбмена - Булево - включает регистрацию на узлах планов обмена при записи объекта. +// ВключитьБизнесЛогику - Булево - включает бизнес-логику при записи объекта. +// +Процедура ЗаписатьДанные(Знач Данные, Знач РегистрироватьНаУзлахПлановОбмена = Неопределено, + Знач ВключитьБизнесЛогику = Ложь) Экспорт + + Данные.ОбменДанными.Загрузка = Не ВключитьБизнесЛогику; + Данные.ДополнительныеСвойства.Вставить("РегистрироватьНаУзлахПлановОбменаПриОбновленииИБ", РегистрироватьНаУзлахПлановОбмена); + + Если РегистрироватьНаУзлахПлановОбмена = Неопределено + Или Не РегистрироватьНаУзлахПлановОбмена Тогда + Данные.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; + КонецЕсли; + + Данные.Записать(); + + ОтметитьВыполнениеОбработки(Данные); + +КонецПроцедуры + +// Записывает изменения в переданном объекте ссылочного типа. +// Для использования в обработчиках обновления. +// +// Параметры: +// Объект - Произвольный - записываемый объект ссылочного типа. Например, СправочникОбъект. +// РегистрироватьНаУзлахПлановОбмена - Булево - включает регистрацию на узлах планов обмена при записи объекта. +// ВключитьБизнесЛогику - Булево - включает бизнес-логику при записи объекта. +// ДокументРежимЗаписи - ДокументРежимЗаписи - имеет смысл только для данных типа ДокументОбъект - режим записи документа. +// Если параметр не передан, то документ записывается в режиме "Запись". +// +Процедура ЗаписатьОбъект(Знач Объект, Знач РегистрироватьНаУзлахПлановОбмена = Неопределено, + Знач ВключитьБизнесЛогику = Ложь, ДокументРежимЗаписи = Неопределено) Экспорт + + Объект.ДополнительныеСвойства.Вставить("РегистрироватьНаУзлахПлановОбменаПриОбновленииИБ", РегистрироватьНаУзлахПлановОбмена); + Объект.ОбменДанными.Загрузка = Не ВключитьБизнесЛогику; + + Если РегистрироватьНаУзлахПлановОбмена = Неопределено + Или Не РегистрироватьНаУзлахПлановОбмена + И Не Объект.ЭтоНовый() Тогда + Объект.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; + КонецЕсли; + + Если ДокументРежимЗаписи <> Неопределено Тогда + Если ТипЗнч(ДокументРежимЗаписи) <> Тип("РежимЗаписиДокумента") Тогда + ТекстИсключения = НСтр("ru = 'Неправильный тип параметра ДокументРежимЗаписи'"); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + Объект.ОбменДанными.Загрузка = Объект.ОбменДанными.Загрузка + И Не ДокументРежимЗаписи = РежимЗаписиДокумента.Проведение + И Не ДокументРежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения; + Объект.Записать(ДокументРежимЗаписи); + Иначе + Объект.Записать(); + КонецЕсли; + + ОтметитьВыполнениеОбработки(Объект); + +КонецПроцедуры + +// Записывает изменения в переданном наборе записей. +// Для использования в обработчиках обновления. +// +// Параметры: +// НаборЗаписей - РегистрСведенийНаборЗаписей, +// РегистрНакопленияНаборЗаписей, +// РегистрБухгалтерииНаборЗаписей, +// РегистрРасчетаНаборЗаписей - набор записей, который необходимо записать. +// Замещать - Булево - Определяет режим замещения существующей записи в соответствии с текущими установками отбора. Истина - перед записью существующие записи будут удалены. Ложь - записи будут дописаны к уже существующим в информационной базе записям. +// РегистрироватьНаУзлахПлановОбмена - Булево - включает регистрацию на узлах планов обмена при записи объекта. +// ВключитьБизнесЛогику - Булево - включает бизнес-логику при записи объекта. +// +Процедура ЗаписатьНаборЗаписей(Знач НаборЗаписей, Замещать = Истина, Знач РегистрироватьНаУзлахПлановОбмена = Неопределено, + Знач ВключитьБизнесЛогику = Ложь) Экспорт + + НаборЗаписей.ДополнительныеСвойства.Вставить("РегистрироватьНаУзлахПлановОбменаПриОбновленииИБ", РегистрироватьНаУзлахПлановОбмена); + НаборЗаписей.ОбменДанными.Загрузка = Не ВключитьБизнесЛогику; + + Если РегистрироватьНаУзлахПлановОбмена = Неопределено + Или Не РегистрироватьНаУзлахПлановОбмена Тогда + НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + НаборЗаписей.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; + КонецЕсли; + + НаборЗаписей.Записать(Замещать); + + ОтметитьВыполнениеОбработки(НаборЗаписей); + +КонецПроцедуры + +// Удаляет переданный объект. +// Для использования в обработчиках обновления. +// +// Параметры: +// Данные - Произвольный - объект, который необходимо удалить. +// РегистрироватьНаУзлахПлановОбмена - Булево - включает регистрацию на узлах планов обмена при записи объекта. +// ВключитьБизнесЛогику - Булево - включает бизнес-логику при записи объекта. +// +Процедура УдалитьДанные(Знач Данные, Знач РегистрироватьНаУзлахПлановОбмена = Неопределено, + Знач ВключитьБизнесЛогику = Ложь) Экспорт + + Данные.ДополнительныеСвойства.Вставить("РегистрироватьНаУзлахПлановОбменаПриОбновленииИБ", РегистрироватьНаУзлахПлановОбмена); + + Данные.ОбменДанными.Загрузка = Не ВключитьБизнесЛогику; + Если РегистрироватьНаУзлахПлановОбмена = Неопределено + Или Не РегистрироватьНаУзлахПлановОбмена Тогда + Данные.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; + КонецЕсли; + + Данные.Удалить(); + +КонецПроцедуры + +// Возвращает строковую константу для формирования сообщений журнала регистрации. +// +// Возвращаемое значение: +// Строка +// +Функция СобытиеЖурналаРегистрации() Экспорт + + Возврат ОбновлениеИнформационнойБазыСлужебный.СобытиеЖурналаРегистрации(); + +КонецФункции + +// Получает версию конфигурации или родительской конфигурации (библиотеки), +// которая хранится в информационной базе. +// +// Параметры: +// ИдентификаторБиблиотеки - Строка - имя конфигурации или идентификатор библиотеки. +// +// Возвращаемое значение: +// Строка - версия. +// +// Пример использования: +// ВерсияКонфигурацииИБ = ВерсияИБ(Метаданные.Имя); +// +Функция ВерсияИБ(Знач ИдентификаторБиблиотеки) Экспорт + + Возврат ОбновлениеИнформационнойБазыСлужебный.ВерсияИБ(ИдентификаторБиблиотеки); + +КонецФункции + +// Записывает в информационную базу версию конфигурации или родительской конфигурации (библиотеки). +// +// Параметры: +// ИдентификаторБиблиотеки - Строка - имя конфигурации или родительской конфигурации (библиотеки), +// НомерВерсии - Строка - номер версии. +// ЭтоОсновнаяКонфигурация - Булево - признак, что ИдентификаторБиблиотеки соответствует имени конфигурации. +// +Процедура УстановитьВерсиюИБ(Знач ИдентификаторБиблиотеки, Знач НомерВерсии, Знач ЭтоОсновнаяКонфигурация) Экспорт + + ОбновлениеИнформационнойБазыСлужебный.УстановитьВерсиюИБ(ИдентификаторБиблиотеки, НомерВерсии, ЭтоОсновнаяКонфигурация); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для проверки доступности объекта для изменения при выполнении отложенного обновления. +// + +// Вызывает исключение или блокирует форму Форма от редактирования, если +// имеются незавершенные отложенные обработчики обновления, +// которые в данный момент обрабатывают переданный объект Данные. +// +// Параметры: +// Данные - ЛюбаяСсылка, НаборЗаписей, Объект, ДанныеФормыСтруктура - ссылка на объект, сам объект +// или набор записей, который необходимо проверить. +// Форма - УправляемаяФорма - если объект не обработан, то у переданной формы +// будет установлено свойство ТолькоПросмотр. Если форма не была +// передана, то будет вызвано исключение. +// +Процедура ПроверитьОбъектОбработан(Данные, Форма = Неопределено) Экспорт + + Результат = ОбъектОбработан(Данные); + Если Результат.Обработан Тогда + Возврат; + КонецЕсли; + + Если Форма = Неопределено Тогда + ВызватьИсключение Результат.ТекстИсключения; + КонецЕсли; + + Форма.ТолькоПросмотр = Истина; + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Результат.ТекстИсключения); + +КонецПроцедуры + +// Проверяет, имеются ли отложенные обработчики обновления, +// которые в данный момент обрабатывают переданный объект Данные. +// +// Параметры: +// Данные - ЛюбаяСсылка, НаборЗаписей, Объект, ДанныеФормыСтруктура, Строка - ссылка на объект, сам объект, +// набор записей или полное имя объекта метаданных (для отчетов и обработок), +// блокировку которого необходимо проверить. +// +// Возвращаемое значение: +// Структура - с полями: +// * Обработан - Булево - признак того, что переданный объект обработан. +// * ТекстИсключения - Строка - текст исключения, если объект еще не обработан, +// содержит список незавершенных обработчиков. +// +Функция ОбъектОбработан(Данные) Экспорт + + Результат = Новый Структура; + Результат.Вставить("Обработан", Истина); + Результат.Вставить("ТекстИсключения", ""); + Результат.Вставить("НевыполненныеОбработчикиСтрокой", ""); + + Если Данные = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + Если ПолучитьФункциональнуюОпцию("ОтложенноеОбновлениеЗавершеноУспешно") Тогда + + ЭтоПодчиненныйУзелРИБ = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ(); + Если Не ЭтоПодчиненныйУзелРИБ Тогда + Возврат Результат; + ИначеЕсли ПолучитьФункциональнуюОпцию("ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно") Тогда + Возврат Результат; + КонецЕсли; + + КонецЕсли; + + СведенияОБлокируемыхОбъектах = ОбновлениеИнформационнойБазыСлужебный.СведенияОБлокируемыхОбъектах(); + + Если ТипЗнч(Данные) = Тип("Строка") Тогда + ПолноеИмя = Данные; + Иначе + МетаданныеИОтбор = МетаданныеИОтборПоДанным(Данные); + ПолноеИмя = МетаданныеИОтбор.Метаданные.ПолноеИмя(); + КонецЕсли; + + ПроверяемыйОбъект = СтрЗаменить(ПолноеИмя, ".", ""); + + ОбработчикиОбъекта = СведенияОБлокируемыхОбъектах.БлокируемыеОбъекты[ПроверяемыйОбъект]; + Если ОбработчикиОбъекта = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + Обработан = Истина; + НезавершенныеОбработчики = Новый Массив; + Для Каждого Обработчик Из ОбработчикиОбъекта Цикл + СвойстваОбработчика = СведенияОБлокируемыхОбъектах.Обработчики[Обработчик]; + Если СвойстваОбработчика.Выполнен Тогда + Обработан = Истина; + ИначеЕсли ТипЗнч(Данные) = Тип("Строка") Тогда + Обработан = Ложь; + Иначе + Обработан = РаботаВБезопасномРежиме.ВычислитьВБезопасномРежиме( + СвойстваОбработчика.ПроцедураПроверки + "(Параметры)", МетаданныеИОтбор); + КонецЕсли; + + Результат.Обработан = Обработан И Результат.Обработан; + + Если Не Обработан Тогда + НезавершенныеОбработчики.Добавить(Обработчик); + КонецЕсли; + КонецЦикла; + + Если НезавершенныеОбработчики.Количество() > 0 Тогда + ТекстИсключения = НСтр("ru = 'Действия с объектом временно запрещены, так как не завершен переход на новую версию программы. + |Не завершены следующие процедуры обработки данных:'"); + + НевыполненныеОбработчикиСтрокой = ""; + Для Каждого НезавершенныйОбработчик Из НезавершенныеОбработчики Цикл + НевыполненныеОбработчикиСтрокой = НевыполненныеОбработчикиСтрокой + Символы.ПС + НезавершенныйОбработчик; + КонецЦикла; + Результат.ТекстИсключения = ТекстИсключения + НевыполненныеОбработчикиСтрокой; + Результат.НевыполненныеОбработчикиСтрокой = НевыполненныеОбработчикиСтрокой; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для использования в отложенных обработчиках обновления +// с режимом выполнения "Параллельно". +// + +// Отмечает, что переданные данные обновлены +// +// Параметры: +// Данные - Ссылка, Массив, НаборДанных - данные, по которым нужно зарегистрировать изменения +// - ТаблицаЗначений - значения измерений независимого регистра сведений. Требования: +// - все измерения регистра должны входить в основной отбор +// - в таблице должны быть только колонки, соответствующие по именам измерениям регистра, +// по которым ранее регистрировалась необходимость обработки +// - запись наборов в процессе обновления должна проходить с тем же отбором, +// что и регистрация необходимости обработки +// - в ДополнительныеПараметры нужно передать соответствующий признак и полное имя регистра +// ДополнительныеПараметры - Структура - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки +// Очередь - Число, Неопределено - очередь обработки, в которой выполняется текущий обработчик. По умолчанию очередь передавать +// не нужно, т.к. она будет взята из параметров сеанса, в котором запущен обработчик обновления. +// +Процедура ОтметитьВыполнениеОбработки(Данные, ДополнительныеПараметры = Неопределено, Очередь = Неопределено) Экспорт + Если Очередь = Неопределено Тогда + Если ПараметрыСеанса.ПараметрыОбработчикаОбновления.РежимВыполнения <> "Отложенно" + Или ПараметрыСеанса.ПараметрыОбработчикаОбновления.РежимВыполненияОтложенныхОбработчиков <> "Параллельно" Тогда + Возврат; + КонецЕсли; + + Очередь = ПараметрыСеанса.ПараметрыОбработчикаОбновления.ОчередьОтложеннойОбработки; + + Если Не ПараметрыСеанса.ПараметрыОбработчикаОбновления.ЕстьОбработанныеОбъекты Тогда + + НовыеПараметрыСеанса = ОбновлениеИнформационнойБазыСлужебный.НовыеПараметрыОбработчикаОбновления(); + ЗаполнитьЗначенияСвойств(НовыеПараметрыСеанса, ПараметрыСеанса.ПараметрыОбработчикаОбновления); + НовыеПараметрыСеанса.ЕстьОбработанныеОбъекты = Истина; + + ПараметрыСеанса.ПараметрыОбработчикаОбновления = Новый ФиксированнаяСтруктура(НовыеПараметрыСеанса); + + КонецЕсли; + + КонецЕсли; + + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = ДополнительныеПараметрыОтметкиОбработки(); + КонецЕсли; + + Если (ТипЗнч(Данные) = Тип("Массив") + Или ТипЗнч(Данные) = Тип("ТаблицаЗначений")) + И Данные.Количество() = 0 Тогда + + ТекстИсключения = НСтр("ru = 'В процедуру ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки передан пустой массив. Не возможно отметить выполнение обработки.'"); + ВызватьИсключение ТекстИсключения; + + КонецЕсли; + + Узел = ОчередьСсылкой(Очередь); + + Если ДополнительныеПараметры.ЭтоДвижения Тогда + + Набор = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ДополнительныеПараметры.ПолноеИмяРегистра).СоздатьНаборЗаписей(); + + Если ТипЗнч(Данные) = Тип("Массив") Тогда + Для Каждого СтрокаМассива Из Данные Цикл + Набор.Отбор.Регистратор.Установить(СтрокаМассива); + ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Набор); + КонецЦикла; + Иначе + Набор.Отбор.Регистратор.Установить(Данные); + ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Набор); + КонецЕсли; + + ИначеЕсли ДополнительныеПараметры.ЭтоНезависимыйРегистрСведений Тогда + + Набор = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ДополнительныеПараметры.ПолноеИмяРегистра).СоздатьНаборЗаписей(); + МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ДополнительныеПараметры.ПолноеИмяРегистра); + + УстановитьНедостающиеОтборыВНаборе(Набор, МетаданныеОбъекта, Данные); + + Для каждого СтрокаТаблицы Из Данные Цикл + Для Каждого Колонка Из Данные.Колонки Цикл + Набор.Отбор[Колонка.Имя].Установить(СтрокаТаблицы[Колонка.Имя]); + КонецЦикла; + + ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Набор); + КонецЦикла; + + Иначе + Если ТипЗнч(Данные) = Тип("ОбъектМетаданных") Тогда + ТекстИсключения = НСтр("ru = 'Не поддерживается отметка выполнения обработки обновления целиком объекта метаданных. Нужно отмечать обработку конкретных данных.'"); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + + Если ТипЗнч(Данные) <> Тип("Массив") Тогда + + ТипЗначенияОбъекта = ТипЗнч(Данные); + МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗначенияОбъекта); + + Если ОбщегоНазначения.ЭтоРегистрСведений(МетаданныеОбъекта) + И МетаданныеОбъекта.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый Тогда + + УстановитьНедостающиеОтборыВНаборе(Данные, МетаданныеОбъекта, Данные.Отбор); + ИначеЕсли ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(МетаданныеОбъекта) + И Не ОбщегоНазначения.ЭтоСсылка(ТипЗначенияОбъекта) + И Данные.ЭтоНовый() Тогда + + Возврат; + + КонецЕсли; + + ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Данные); + + Иначе + + ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Данные); + + КонецЕсли; + + КонецЕсли; + + Если Не ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда + РегистрыСведений.ДанныеОбработанныеВЦентральномУзлеРИБ.ОтметитьВыполнениеОбработки(Очередь, Данные, ДополнительныеПараметры); + КонецЕсли; + +КонецПроцедуры + +// Дополнительные параметры функций ОтметитьКОбработке и ОтметитьВыполнениеОбработки. +// +// Возвращаемое значение: +// Структура - структура со свойствами: +// * ЭтоДвижения - Булево - в параметре Данные функции переданы ссылки на регистраторы, по которым нужно обновить движения, +// Значение по умолчанию - ЛОЖЬ +// * ПолноеИмяРегистра - Строка - полное имя регистра, по которому нужно обновить данные. Например, РегистрНакопления.ТоварыНаСкладах +// * ОтметитьВсеРегистраторы - Булево - необходимо отметить к обработке все проведенные документы переданного во втором параметре типа +// В этом случае в параметре Данные процедуры можно передавать ОбъектМетаданных:Документ или ДокументСсылка +// * ЭтоНезависимыйРегистрСведений - Булево - в параметре Данные функции передана таблица со значениями измерений, по которым нужно обновлять данные, +// Значение по умолчанию - ЛОЖЬ. +// +Функция ДополнительныеПараметрыОтметкиОбработки() Экспорт + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ЭтоДвижения", Ложь); + ДополнительныеПараметры.Вставить("ОтметитьВсеРегистраторы", Ложь); + ДополнительныеПараметры.Вставить("ЭтоНезависимыйРегистрСведений", Ложь); + ДополнительныеПараметры.Вставить("ПолноеИмяРегистра", ""); + + Возврат ДополнительныеПараметры; + +КонецФункции + +// Основные параметры процедуры ОбновлениеИнформационнойБазы.ОтметитьКОбработке, которые инициализируются механизмом регистрации изменений +// и не должны переопределяться в коде процедур отметки к обработке обработчиков обновления. +// +// ВозвращаемоеЗначение - Структура: +// *Очередь - Число - очередь обработки, в которой выполняется текущий обработчик +// *ЗаписьИзмененийДляПодчиненногоУзлаРИБСФильтрами - ЗаписьFastInfoset - параметр существует, только если внедрена подсистема ОбменДанными. +// +Функция ОсновныеПараметрыОтметкиКОбработке() Экспорт + + Параметры = Новый Структура; + Параметры.Вставить("Очередь", 0); + Параметры.Вставить("ПовторнаяРегистрация", Ложь); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + + Параметры.Вставить("ЗаписьИзмененийДляПодчиненногоУзлаРИБСФильтрами", Неопределено); + + КонецЕсли; + + Возврат Параметры; + +КонецФункции + +// Возвращает информацию о переданных данных в нормализованном виде. +// Для использования в процедурах проверки блокировки данных отложенных обработчиков обновления. +// +// Параметры: +// Данные - ЛюбаяСсылка, НаборЗаписей, Объект, ДанныеФормыСтруктура - данные, которые нужно проанализировать. +// ДополнительныеПараметры - Структура, Неопределено - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки. +// +// Возвращаемое значение: +// Структура - со свойствами: +// * Данные - ЛюбаяСсылка, НаборЗаписей, Объект, ДанныеФормыСтруктура - значение входящего параметра Данные. +// * МетаданныеОбъекта - ОбъектМетаданных - объект метаданных, соответствующий параметру Данные. +// * ПолноеИмя - Строка - полное имя объекта метаданных (см. метод ОбъектМетаданных.ПолноеИмя). +// * Отбор - ЛюбаяСсылка - если Данные - это ссылочный объект, то значение ссылки, +// если регистр подчиненный регистратору - значение отбора по регистратору. +// - Структура - если Данные - это независимый регистр сведений, то структура, соответствующая +// установленным отборам по измерениям. +// * ЭтоНовый - Булево - если Данные - это ссылочный объект, то признак нового объекта. +// Для других типов - всегда Ложь. +// +Функция МетаданныеИОтборПоДанным(Данные, ДополнительныеПараметры = Неопределено) Экспорт + + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = ДополнительныеПараметрыОтметкиОбработки(); + КонецЕсли; + + Если ДополнительныеПараметры.ЭтоДвижения Тогда + МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ДополнительныеПараметры.ПолноеИмяРегистра); + Иначе + МетаданныеОбъекта = Неопределено; + КонецЕсли; + + Отбор = Неопределено; + ТипДанных = ТипЗнч(Данные); + ЭтоНовый = Ложь; + + Если ТипЗнч(Данные) = Тип("Строка") Тогда + МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(Данные); + ИначеЕсли ТипДанных = Тип("ДанныеФормыСтруктура") Тогда + + Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Данные, "Ссылка") Тогда + + Если МетаданныеОбъекта = Неопределено Тогда + МетаданныеОбъекта = Данные.Ссылка.Метаданные(); + КонецЕсли; + + Отбор = Данные.Ссылка; + + Если Не ЗначениеЗаполнено(Отбор) Тогда + ЭтоНовый = Истина; + КонецЕсли; + + ИначеЕсли ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Данные, "ИсходныйКлючЗаписи") Тогда + + Если МетаданныеОбъекта = Неопределено Тогда + МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(Данные.ИсходныйКлючЗаписи)); + КонецЕсли; + Отбор = Новый Структура; + Для Каждого Измерение Из МетаданныеОбъекта.Измерения Цикл + Отбор.Вставить(Измерение.Имя, Данные[Измерение.Имя]); + КонецЦикла; + + Иначе + ТекстИсключения = НСтр("ru = 'Процедура ОбновлениеИнформационнойБазы.МетаданныеИОтборПоДанным не может быть использована для этой формы.'"); + КонецЕсли; + + Иначе + + Если МетаданныеОбъекта = Неопределено Тогда + МетаданныеОбъекта = Данные.Метаданные(); + КонецЕсли; + + Если ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(МетаданныеОбъекта) Тогда + + Если ОбщегоНазначения.ЭтоСсылка(ТипДанных) Тогда + Отбор = Данные; + Иначе + Отбор = Данные.Ссылка; + + Если Данные.ЭтоНовый() Тогда + ЭтоНовый = Истина; + КонецЕсли; + + КонецЕсли; + + ИначеЕсли ОбщегоНазначения.ЭтоРегистрСведений(МетаданныеОбъекта) + И МетаданныеОбъекта.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый Тогда + + Отбор = Новый Структура; + Для Каждого ЭлементОтбора Из Данные.Отбор Цикл + Если ЭлементОтбора.Использование Тогда + Отбор.Вставить(ЭлементОтбора.Имя, ЭлементОтбора.Значение); + КонецЕсли; + КонецЦикла; + + ИначеЕсли ОбщегоНазначения.ЭтоРегистр(МетаданныеОбъекта) Тогда + Если ДополнительныеПараметры.ЭтоДвижения Тогда + Отбор = Данные; + Иначе + Отбор = Данные.Отбор.Регистратор.Значение; + КонецЕсли; + Иначе + ТекстИсключения = НСтр("ru = 'Для этого типа метаданных не поддерживается анализ в функции ОбновлениеИнформационнойБазы.МетаданныеИОтборПоДанным.'"); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("Данные", Данные); + Результат.Вставить("Метаданные", МетаданныеОбъекта); + Результат.Вставить("ПолноеИмя", МетаданныеОбъекта.ПолноеИмя()); + Результат.Вставить("Отбор", Отбор); + Результат.Вставить("ЭтоНовый", ЭтоНовый); + + Возврат Результат; +КонецФункции + +// Отмечает, что переданные данные необходимо обновить +// +// Параметры: +// Параметры - Структура - см. ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке +// Данные - Ссылка, Массив, НаборЗаписей - данные, по которым нужно зарегистрировать изменения +// - ТаблицаЗначений - значения измерений независимого регистра сведений. Требования: +// - все измерения регистра должны входить в основной отбор +// - в таблице должны быть только колонки, соответствующие по именам измерениям регистра, +// по которым нужно регистрировать необходимость обработки +// - запись наборов в процессе обновления должна проходить с тем же отбором, +// что и регистрация необходимости обработки +// - в ДополнительныеПараметры нужно передать соответствующий признак и полное имя регистра +// ДополнительныеПараметры - Структура - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки. +// +Процедура ОтметитьКОбработке(ОсновныеПараметры, Данные, ДополнительныеПараметры = Неопределено) Экспорт + + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = ДополнительныеПараметрыОтметкиОбработки(); + КонецЕсли; + + Если (ТипЗнч(Данные) = Тип("Массив") + Или ТипЗнч(Данные) = Тип("ТаблицаЗначений")) + И Данные.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Узел = ОчередьСсылкой(ОсновныеПараметры.Очередь); + + Если ДополнительныеПараметры.ЭтоДвижения Тогда + + Набор = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ДополнительныеПараметры.ПолноеИмяРегистра).СоздатьНаборЗаписей(); + + Если ДополнительныеПараметры.ОтметитьВсеРегистраторы Тогда + + Если ТипЗнч(Данные) = Тип("ОбъектМетаданных") Тогда + МетаданныеДокумента = Данные; + ИначеЕсли ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Данные)) Тогда + МетаданныеДокумента = Данные.Метаданные(); + Иначе + ТекстИсключения = НСтр("ru = 'Для регистрации всех регистраторов регистра необходимо в параметре ""Данные"" передать ОбъектМетаданных:Документ или ДокументСсылка.'"); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + ПолноеИмяДокумента = МетаданныеДокумента.ПолноеИмя(); + + ТекстЗапроса = + "ВЫБРАТЬ + | ТаблицаДокумента.Ссылка КАК Ссылка + |ИЗ + | #ТаблицаДокумента КАК ТаблицаДокумента + |ГДЕ + | ТаблицаДокумента.Проведен"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаДокумента", ПолноеИмяДокумента); + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + + МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + + Для Каждого ЭлементМассива Из МассивСсылок Цикл + Набор.Отбор.Регистратор.Установить(ЭлементМассива); + ЗарегистрироватьИзменения(ОсновныеПараметры, Узел, Набор, "ПодчиненныйРегистр", ДополнительныеПараметры.ПолноеИмяРегистра); + КонецЦикла; + + Иначе + + Если ТипЗнч(Данные) = Тип("Массив") Тогда + + Для Каждого ЭлементМассива Из Данные Цикл + Набор.Отбор.Регистратор.Установить(ЭлементМассива); + ЗарегистрироватьИзменения(ОсновныеПараметры, Узел, Набор, "ПодчиненныйРегистр", ДополнительныеПараметры.ПолноеИмяРегистра); + КонецЦикла; + + Иначе + + Набор.Отбор.Регистратор.Установить(Данные); + ЗарегистрироватьИзменения(ОсновныеПараметры, Узел, Набор, "ПодчиненныйРегистр", ДополнительныеПараметры.ПолноеИмяРегистра); + + КонецЕсли; + + КонецЕсли; + ИначеЕсли ДополнительныеПараметры.ЭтоНезависимыйРегистрСведений Тогда + + Набор = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ДополнительныеПараметры.ПолноеИмяРегистра).СоздатьНаборЗаписей(); + МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ДополнительныеПараметры.ПолноеИмяРегистра); + УстановитьНедостающиеОтборыВНаборе(Набор, МетаданныеОбъекта, Данные); + + Для Каждого СтрокаТаблицы Из Данные Цикл + + Для Каждого Колонка Из Данные.Колонки Цикл + Набор.Отбор[Колонка.Имя].Установить(СтрокаТаблицы[Колонка.Имя]); + КонецЦикла; + + ЗарегистрироватьИзменения(ОсновныеПараметры, Узел, Набор, "НезависимыйРегистр", ДополнительныеПараметры.ПолноеИмяРегистра); + + КонецЦикла; + Иначе + Если ТипЗнч(Данные) = Тип("Массив") Тогда + Для Каждого ЭлементМассива Из Данные Цикл + ЗарегистрироватьИзменения(ОсновныеПараметры, Узел, ЭлементМассива, "Ссылка"); + КонецЦикла; + ИначеЕсли ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Данные)) Тогда + ЗарегистрироватьИзменения(ОсновныеПараметры, Узел, Данные, "Ссылка"); + Иначе + Если ТипЗнч(Данные) = Тип("ОбъектМетаданных") Тогда + ТекстИсключения = НСтр("ru = 'Не поддерживается регистрация к обновлению целиком объекта метаданных. Нужно обновлять конкретные данные.'"); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + + МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(Данные)); + + Если ОбщегоНазначения.ЭтоРегистрСведений(МетаданныеОбъекта) + И МетаданныеОбъекта.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый Тогда + + УстановитьНедостающиеОтборыВНаборе(Данные, МетаданныеОбъекта, Данные.Отбор); + + КонецЕсли; + ЗарегистрироватьИзменения(ОсновныеПараметры, Узел, Данные, "НезависимыйРегистр", МетаданныеОбъекта.ПолноеИмя()); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Отмечает, что по переданным регистраторам нужно переформировать движения +// +// Параметры: +// Очередь - Число - очередь обработки, в которой выполняется текущий обработчик +// Регистраторы - Массив - массив ссылок регистраторов +// ПолноеИмяРегистра - Строка - полное имя регистра, для которого необходимо обновить движения. +// +Процедура ОтметитьРегистраторыКОбработке(Параметры, Регистраторы, ПолноеИмяРегистра) Экспорт + + ДополнительныеПараметры = ДополнительныеПараметрыОтметкиОбработки(); + ДополнительныеПараметры.ЭтоДвижения = Истина; + ДополнительныеПараметры.ПолноеИмяРегистра = ПолноеИмяРегистра; + ОтметитьКОбработке(Параметры, Регистраторы, ДополнительныеПараметры); + +КонецПроцедуры + +// Дополнительные параметры выборки данных для обработки +// +// Возвращаемое значение: +// Структура - поля структуры: +// *ВыбиратьПорциями - Булево - выбирать данные для обработки порциями. +// Если выбираются документы, то в порция определяется с учетом упорядочивания по убыванию по дате документа. +// Если выбираются регистраторы регистра, то в порция определяется с учетом упорядочивания по убыванию +// по дате регистратора , если передано полное имя документа. Если полное имя документа не передано +// - упорядочивание происходит по периоду регистра: +// - берется максимальная дата по каждому регистратору +// - если по регистратору нет записей - он в топе +// *ИмяВременнойТаблицы - Строка - параметр актуален для методов, создающих временные таблицы. Если имя не задано (поведение по умолчанию), +// то временная таблица будет создана с именем, указанным в описании каждого метода +// *ДополнительныеИсточникиДанных - Соответствие - параметр актуален для методов, выбирающих регистраторы и ссылки для обработки. +// В ключах соответствия лежат пути к реквизитам шапки документа или реквизитам табличных частей, +// которые участвуют в соединениях с другими таблицами (в т.ч. неявных соединениях при обращении +// "через точку"). Процедуры проверяют блокировку данных этих таблиц обработчиками меньших очередей. +// Формат имен <ИмяРеквизита> или <ИмяТабличной>.<ИмяРеквизитаТабличнойЧасти>. +// +Функция ДополнительныеПараметрыВыборкиДанныхДляОбработки() Экспорт + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ВыбиратьПорциями", Истина); + ДополнительныеПараметры.Вставить("ИмяВременнойТаблицы", ""); + ДополнительныеПараметры.Вставить("ДополнительныеИсточникиДанных", Новый Соответствие); + + Возврат ДополнительныеПараметры; + +КонецФункции + +// Создает временную таблицу ссылок, которые не обработаны в текущей очереди +// и не заблокированы меньшими очередями. +// Имя таблицы: ВТДляОбработки<ИмяРегистра>, например ВТДляОбработкиТоварыНаСкладах +// Колонки таблицы +// * Регистратор - ДокументСсылка. +// +// Параметры: +// Очередь - Число - очередь обработки, в которой выполняется текущий обработчик +// ПолноеИмяДокумента - Строка - имя документа, движения по которому нужно переформировать. Если движения формируются не по данным +// документа, то нужно передать Неопределено - тогда не будет проверяться блокировка таблицы документа +// Например, Документ.ПриходныйОрдерНаТовары +// ПолноеИмяРегистра - Строка - имя регистра, движения по которому нужно переформировать. +// Например, РегистрНакопления.ТоварыНаСкладах +// МенеджерВременныхТаблиц - МенеджерВременныхТаблиц - менеджер, в котором будет создана временная таблица +// ДополнительныеПараметры - Структура - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки. +// +// Возвращаемое значение: +// Структура - результат формирования временной таблицы: +// * ЕстьЗаписиВоВременнойТаблице - Булево - в создаваемой таблице есть хотя бы одна запись. Записей может не быть по двум причинам +// - все обработано или все, что нужно обработать, еще заблокировано обработчиками с меньшей очередью +// * ЕстьДанныеДляОбработки - Булево - в очереди есть ссылки для обработки, т.е. еще не все обработано +// * ИмяВременнойТаблицы - Строка - имя созданной временной таблицы. +// +Функция СоздатьВременнуюТаблицуРегистраторовРегистраДляОбработки(Очередь, ПолноеИмяДокумента, ПолноеИмяРегистра, МенеджерВременныхТаблиц, ДополнительныеПараметры = Неопределено) Экспорт + + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = ДополнительныеПараметрыВыборкиДанныхДляОбработки(); + КонецЕсли; + + ИмяРегистра = СтрРазделить(ПолноеИмяРегистра,".",Ложь)[1]; + + ТекущаяОчередь = ОчередьСсылкой(Очередь); + + Если ПолноеИмяДокумента = Неопределено Тогда + Если ДополнительныеПараметры.ВыбиратьПорциями Тогда + ТекстЗапроса = + "ВЫБРАТЬ + | ТаблицаРегистраИзменения.Регистратор КАК Регистратор, + | МАКСИМУМ(ЕСТЬNULL(ТаблицаРегистра.Период, ДАТАВРЕМЯ(3000, 1, 1))) КАК Период + |ПОМЕСТИТЬ ВТДляОбработкиРегистраторПолная + |ИЗ + | #ТаблицаРегистраИзменения КАК ТаблицаРегистраИзменения + | ЛЕВОЕ СОЕДИНЕНИЕ ВТЗаблокированоРегистратор КАК ВТЗаблокированоРегистратор + | ПО ТаблицаРегистраИзменения.Регистратор = ВТЗаблокированоРегистратор.Регистратор + | ЛЕВОЕ СОЕДИНЕНИЕ #ТаблицаДвиженийРегистра КАК ТаблицаРегистра + | ПО ТаблицаРегистраИзменения.Регистратор = ТаблицаРегистра.Регистратор + |ГДЕ + | ТаблицаРегистраИзменения.Узел = &ТекущаяОчередь + | И ВТЗаблокированоРегистратор.Регистратор ЕСТЬ NULL + | + |СГРУППИРОВАТЬ ПО + | ТаблицаРегистраИзменения.Регистратор + | + |ИНДЕКСИРОВАТЬ ПО + | Регистратор + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВТДляОбработкиРегистраторПолная.Регистратор КАК Регистратор + |ПОМЕСТИТЬ #ВТДляОбработкиРегистратор + |ИЗ + | ВТДляОбработкиРегистраторПолная КАК ВТДляОбработкиРегистраторПолная + |ГДЕ + | ВТДляОбработкиРегистраторПолная.Регистратор В + | (ВЫБРАТЬ ПЕРВЫЕ 500 + | ВТДляОбработкиРегистраторПолная.Регистратор КАК Регистратор + | ИЗ + | ВТДляОбработкиРегистраторПолная КАК ВТДляОбработкиРегистраторПолная + | УПОРЯДОЧИТЬ ПО + | ВТДляОбработкиРегистраторПолная.Период УБЫВ) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |УНИЧТОЖИТЬ ВТЗаблокированоРегистратор + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |УНИЧТОЖИТЬ ВТДляОбработкиРегистраторПолная"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"#ТаблицаДвиженийРегистра", ПолноеИмяРегистра); + Иначе + ТекстЗапроса = + "ВЫБРАТЬ + | ТаблицаРегистраИзменения.Регистратор КАК Регистратор + |ПОМЕСТИТЬ #ВТДляОбработкиРегистратор + |ИЗ + | #ТаблицаРегистраИзменения КАК ТаблицаРегистраИзменения + | ЛЕВОЕ СОЕДИНЕНИЕ ВТЗаблокированоРегистратор КАК ВТЗаблокированоРегистратор + | ПО ТаблицаРегистраИзменения.Регистратор = ВТЗаблокированоРегистратор.Регистратор + |ГДЕ + | ТаблицаРегистраИзменения.Узел = &ТекущаяОчередь + | И ВТЗаблокированоРегистратор.Регистратор ЕСТЬ NULL + | + |ИНДЕКСИРОВАТЬ ПО + | Регистратор + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |УНИЧТОЖИТЬ ВТЗаблокированоРегистратор"; + КонецЕсли; + Иначе + ИмяДокумента = СтрРазделить(ПолноеИмяДокумента,".",Ложь)[1]; + Если ДополнительныеПараметры.ВыбиратьПорциями Тогда + ТекстЗапроса = + "ВЫБРАТЬ + | ТаблицаРегистраИзменения.Регистратор КАК Регистратор + |ПОМЕСТИТЬ ВТДляОбработкиРегистраторПолная + |ИЗ + | #ТаблицаРегистраИзменения КАК ТаблицаРегистраИзменения + | ЛЕВОЕ СОЕДИНЕНИЕ ВТЗаблокированоРегистратор КАК ВТЗаблокированоРегистратор + | ПО ТаблицаРегистраИзменения.Регистратор = ВТЗаблокированоРегистратор.Регистратор + | ЛЕВОЕ СОЕДИНЕНИЕ ВТЗаблокированоСсылка КАК ВТЗаблокированоСсылка + | ПО ТаблицаРегистраИзменения.Регистратор = ВТЗаблокированоСсылка.Ссылка + | #ТекстЗапросаСоединениеСДопИсточникамиПоШапке + | #ТекстЗапросаСоединениеСДопИсточникамиПоТЧ + |ГДЕ + | ТаблицаРегистраИзменения.Узел = &ТекущаяОчередь + | И ТаблицаРегистраИзменения.Регистратор ССЫЛКА #ПолноеИмяДокумента + | И ВТЗаблокированоРегистратор.Регистратор ЕСТЬ NULL + | И ВТЗаблокированоСсылка.Ссылка ЕСТЬ NULL + | И &УсловиеПоДопИсточникам + | + |ИНДЕКСИРОВАТЬ ПО + | Регистратор + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВТДляОбработкиРегистраторПолная.Регистратор КАК Регистратор + |ПОМЕСТИТЬ #ВТДляОбработкиРегистратор + |ИЗ + | ВТДляОбработкиРегистраторПолная КАК ВТДляОбработкиРегистраторПолная + |ГДЕ + | ВТДляОбработкиРегистраторПолная.Регистратор В + | (ВЫБРАТЬ ПЕРВЫЕ 500 + | ВТДляОбработкиРегистраторПолная.Регистратор КАК Регистратор + | ИЗ + | ВТДляОбработкиРегистраторПолная КАК ВТДляОбработкиРегистраторПолная + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ #ПолноеИмяДокумента КАК ТаблицаДокумента + | ПО + | ВТДляОбработкиРегистраторПолная.Регистратор = ТаблицаДокумента.Ссылка + | УПОРЯДОЧИТЬ ПО + | ТаблицаДокумента.Дата УБЫВ) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |УНИЧТОЖИТЬ ВТЗаблокированоРегистратор + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |УНИЧТОЖИТЬ ВТЗаблокированоСсылка + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |УНИЧТОЖИТЬ ВТДляОбработкиРегистраторПолная"; + + Иначе + ТекстЗапроса = + "ВЫБРАТЬ + | ТаблицаРегистраИзменения.Регистратор КАК Регистратор + |ПОМЕСТИТЬ #ВТДляОбработкиРегистратор + |ИЗ + | #ТаблицаРегистраИзменения КАК ТаблицаРегистраИзменения + | ЛЕВОЕ СОЕДИНЕНИЕ ВТЗаблокированоРегистратор КАК ВТЗаблокированоРегистратор + | ПО ТаблицаРегистраИзменения.Регистратор = ВТЗаблокированоРегистратор.Регистратор + | ЛЕВОЕ СОЕДИНЕНИЕ ВТЗаблокированоСсылка КАК ВТЗаблокированоСсылка + | ПО ТаблицаРегистраИзменения.Регистратор = ВТЗаблокированоСсылка.Ссылка + | #ТекстЗапросаСоединениеСДопИсточникамиПоШапке + | #ТекстЗапросаСоединениеСДопИсточникамиПоТЧ + |ГДЕ + | ТаблицаРегистраИзменения.Узел = &ТекущаяОчередь + | И ТаблицаРегистраИзменения.Регистратор ССЫЛКА #ПолноеИмяДокумента + | И ВТЗаблокированоРегистратор.Регистратор ЕСТЬ NULL + | И ВТЗаблокированоСсылка.Ссылка ЕСТЬ NULL + | И &УсловиеПоДопИсточникам + | + |ИНДЕКСИРОВАТЬ ПО + | Регистратор + |; + |УНИЧТОЖИТЬ + | ВТЗаблокированоРегистратор + |; + |УНИЧТОЖИТЬ + | ВТЗаблокированоСсылка"; + КонецЕсли; + + ДополнительныеПараметрыСозданияВТ = ДополнительныеПараметрыВыборкиДанныхДляОбработки(); + ДополнительныеПараметрыСозданияВТ.ИмяВременнойТаблицы = "ВТЗаблокированоСсылка"; + СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияДанных(Очередь, ПолноеИмяДокумента, МенеджерВременныхТаблиц, ДополнительныеПараметрыСозданияВТ); + КонецЕсли; + + Если ПустаяСтрока(ДополнительныеПараметры.ИмяВременнойТаблицы) Тогда + ИмяВременнойТаблицы = "ВТДляОбработки" + ИмяРегистра; + Иначе + ИмяВременнойТаблицы = ДополнительныеПараметры.ИмяВременнойТаблицы; + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаРегистраИзменения", ПолноеИмяРегистра + ".Изменения"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ВТДляОбработкиРегистратор", ИмяВременнойТаблицы); + + ДополнительныеПараметрыСозданияВТ = ДополнительныеПараметрыВыборкиДанныхДляОбработки(); + ДополнительныеПараметрыСозданияВТ.ИмяВременнойТаблицы = "ВТЗаблокированоРегистратор"; + СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияДанных(Очередь, ПолноеИмяРегистра, МенеджерВременныхТаблиц, ДополнительныеПараметрыСозданияВТ); + + ДобавитьПроверкуБлокировкиДополнительныхИсточников(Очередь, ТекстЗапроса, ПолноеИмяДокумента, ПолноеИмяРегистра, МенеджерВременныхТаблиц, Истина, ДополнительныеПараметры); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПолноеИмяДокумента", ПолноеИмяДокумента); + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + Запрос.УстановитьПараметр("ТекущаяОчередь", ТекущаяОчередь); + РезультатЗапроса = Запрос.ВыполнитьПакет(); + + Результат = Новый Структура("ЕстьЗаписиВоВременнойТаблице,ЕстьДанныеДляОбработки,ИмяВременнойТаблицы", Ложь, Ложь, ""); + Результат.ИмяВременнойТаблицы = ИмяВременнойТаблицы; + Результат.ЕстьЗаписиВоВременнойТаблице = РезультатЗапроса[0].Выгрузить()[0].Количество <> 0; + + Если Результат.ЕстьЗаписиВоВременнойТаблице Тогда + Результат.ЕстьДанныеДляОбработки = Истина; + Иначе + Результат.ЕстьДанныеДляОбработки = ЕстьДанныеДляОбработки(Очередь, ПолноеИмяРегистра); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает порцию регистраторов, по которым нужно переформировать движения +// Данные берутся из зарегистрированных в очереди, учитываются заблокированные более приоритетными очередями данные. +// Блокировка по другим очередям делается по документу и по регистру. +// Регистраторы в выборке упорядочены по дате регистратора по убыванию, если передано полное имя документа. +// Если полное имя документа не передано - упорядочивание происходит по периоду регистра: +// - берется максимальная дата по каждому регистратору +// - если по регистратору нет записей - он в топе +// Параметры: +// Очередь - Число - очередь, к которой отнесен обработчик и в которой зарегистрированы данные, которые он будет обрабатывать. +// ПолноеИмяДокумента - Строка - имя документа, движения по которому нужно переформировать. Если движения формируются не по данным +// документа, то нужно передать Неопределено - тогда не будет проверяться блокировка таблицы документа +// Например, Документ.ПриходныйОрдерНаТовары +// ПолноеИмяРегистра - Строка - имя регистра, движения по которому нужно переформировать. +// Например, РегистрНакопления.ТоварыНаСкладах +// ДополнительныеПараметры - Структура - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки. +// +// Возвращаемое значение: +// ВыборкаИзРезультатаЗапроса - выборка регистраторов, которые нужно обработать, поля выборки: +// * Регистратор - ДокументСсылка +// * Период - Дата - дата документа, если передано полное имя документа, максимальный период по регистратору, +// если полное имя документа не передано +// * Проведен - Булево, Неопределено - значение реквизита Проведен документа, если передано полное имя документа, +// Неопределено - если имя документа не передано. +// +Функция ВыбратьРегистраторыРегистраДляОбработки(Очередь, ПолноеИмяДокумента, ПолноеИмяРегистра, ДополнительныеПараметры = Неопределено) Экспорт + + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = ДополнительныеПараметрыВыборкиДанныхДляОбработки(); + КонецЕсли; + + ИмяРегистра = СтрРазделить(ПолноеИмяРегистра,".",Ложь)[1]; + + ТекущаяОчередь = ОчередьСсылкой(Очередь); + МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц(); + + Если ПолноеИмяДокумента = Неопределено Тогда + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 500 + | ТаблицаРегистраИзменения.Регистратор КАК Регистратор + |ИЗ + | #ТаблицаРегистраИзменения КАК ТаблицаРегистраИзменения + | ЛЕВОЕ СОЕДИНЕНИЕ #ТаблицаДвиженийРегистра КАК ТаблицаРегистра + | ПО ТаблицаРегистраИзменения.Регистратор = ТаблицаРегистра.Регистратор + | ЛЕВОЕ СОЕДИНЕНИЕ ВТЗаблокированоРегистратор КАК ВТЗаблокированоРегистратор + | ПО ТаблицаРегистраИзменения.Регистратор = ВТЗаблокированоРегистратор.Регистратор + |ГДЕ + | ТаблицаРегистраИзменения.Узел = &ТекущаяОчередь + | И ВТЗаблокированоРегистратор.Регистратор ЕСТЬ NULL + | + |СГРУППИРОВАТЬ ПО + | ТаблицаРегистраИзменения.Регистратор + | + |УПОРЯДОЧИТЬ ПО + | МАКСИМУМ(ЕСТЬNULL(ТаблицаРегистра.Период, ДАТАВРЕМЯ(3000, 1, 1))) УБЫВ"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаДвиженийРегистра", ПолноеИмяРегистра); + Иначе + ИмяДокумента = СтрРазделить(ПолноеИмяДокумента,".",Ложь)[1]; + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 500 + | ТаблицаРегистраИзменения.Регистратор КАК Регистратор + |ИЗ + | #ТаблицаРегистраИзменения КАК ТаблицаРегистраИзменения + | ЛЕВОЕ СОЕДИНЕНИЕ ВТЗаблокированоРегистратор КАК ВТЗаблокированоРегистратор + | ПО ТаблицаРегистраИзменения.Регистратор = ВТЗаблокированоРегистратор.Регистратор + | ЛЕВОЕ СОЕДИНЕНИЕ ВТЗаблокированоСсылка КАК ВТЗаблокированоСсылка + | ПО ТаблицаРегистраИзменения.Регистратор = ВТЗаблокированоСсылка.Ссылка + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ #ПолноеИмяДокумента КАК ТаблицаДокумента + | #ТекстЗапросаСоединениеСДопИсточникамиПоШапке + | ПО ТаблицаРегистраИзменения.Регистратор = ТаблицаДокумента.Ссылка + | #ТекстЗапросаСоединениеСДопИсточникамиПоТЧ + | + |ГДЕ + | ТаблицаРегистраИзменения.Узел = &ТекущаяОчередь + | И ТаблицаРегистраИзменения.Регистратор ССЫЛКА #ПолноеИмяДокумента + | И ВТЗаблокированоРегистратор.Регистратор ЕСТЬ NULL + | И ВТЗаблокированоСсылка.Ссылка ЕСТЬ NULL + | И &УсловиеПоДопИсточникам + | + |УПОРЯДОЧИТЬ ПО + | ТаблицаДокумента.Дата УБЫВ"; + ДополнительныеПараметрыСозданияВТ = ДополнительныеПараметрыВыборкиДанныхДляОбработки(); + ДополнительныеПараметрыСозданияВТ.ИмяВременнойТаблицы = "ВТЗаблокированоСсылка"; + СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияДанных(Очередь, ПолноеИмяДокумента, МенеджерВременныхТаблиц, ДополнительныеПараметрыСозданияВТ); + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаРегистраИзменения", ПолноеИмяРегистра + ".Изменения"); + + ДополнительныеПараметрыСозданияВТ = ДополнительныеПараметрыВыборкиДанныхДляОбработки(); + ДополнительныеПараметрыСозданияВТ.ИмяВременнойТаблицы = "ВТЗаблокированоРегистратор"; + СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияДанных(Очередь, ПолноеИмяРегистра, МенеджерВременныхТаблиц, ДополнительныеПараметрыСозданияВТ); + + Если Не ДополнительныеПараметры.ВыбиратьПорциями Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫБРАТЬ ПЕРВЫЕ 500","ВЫБРАТЬ"); + КонецЕсли; + + ДобавитьПроверкуБлокировкиДополнительныхИсточников(Очередь, ТекстЗапроса, ПолноеИмяДокумента, ПолноеИмяРегистра, МенеджерВременныхТаблиц, Ложь, ДополнительныеПараметры); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПолноеИмяДокумента", ПолноеИмяДокумента); + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + Запрос.УстановитьПараметр("ТекущаяОчередь", ТекущаяОчередь); + ВыборкаПоРегистраторам = Запрос.Выполнить().Выбрать(); + + Возврат ВыборкаПоРегистраторам; + +КонецФункции + +// Возвращает порцию ссылок, по которым нужно произвести обработку. +// Данные берутся из зарегистрированных в очереди, учитываются заблокированные более приоритетными очередями данные. +// Ссылки на документы возвращаются упорядоченными по убыванию по дате. +// +// Параметры: +// Очередь - Число - очередь, к которой отнесен обработчик и в которой зарегистрированы данные, которые он будет +// обрабатывать. +// ПолноеИмяОбъекта - Строка - имя объекта, который нужно обработать. Например, Документ.ПриходныйОрдерНаТовары +// ДополнительныеПараметры - Структура - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки. +// +// Возвращаемое значение: +// ВыборкаИзРезультатаЗапроса - выборка ссылок, которые нужно обработать, поля выборки: +// * Ссылка - ЛюбаяСсылка. +// +Функция ВыбратьСсылкиДляОбработки(Очередь, ПолноеИмяОбъекта, ДополнительныеПараметры = Неопределено) Экспорт + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = ДополнительныеПараметрыВыборкиДанныхДляОбработки(); + КонецЕсли; + + ИмяОбъекта = СтрРазделить(ПолноеИмяОбъекта,".",Ложь)[1]; + МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъекта); + ЭтоДокумент = ОбщегоНазначения.ЭтоДокумент(МетаданныеОбъекта) + Или ОбщегоНазначения.ЭтоЗадача(МетаданныеОбъекта); + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 500 + | ТаблицаИзменения.Ссылка + |ИЗ + | #ТаблицаОбъектаИзменения КАК ТаблицаИзменения + | ЛЕВОЕ СОЕДИНЕНИЕ #ВТЗаблокированоСсылка КАК ВТЗаблокированоСсылка + | ПО ТаблицаИзменения.Ссылка = ВТЗаблокированоСсылка.Ссылка"; + Если ЭтоДокумент + Или ДополнительныеПараметры.ДополнительныеИсточникиДанных.Количество() > 0 Тогда + ТекстЗапроса = ТекстЗапроса + " + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ #ТаблицаОбъекта КАК ТаблицаОбъекта + | #ТекстЗапросаСоединениеСДопИсточникамиПоШапке + | ПО ТаблицаИзменения.Ссылка = ТаблицаОбъекта.Ссылка + | #ТекстЗапросаСоединениеСДопИсточникамиПоТЧ"; + КонецЕсли; + ТекстЗапроса = ТекстЗапроса + " + |ГДЕ + | ТаблицаИзменения.Узел = &ТекущаяОчередь + | И ВТЗаблокированоСсылка.Ссылка ЕСТЬ NULL + | И &УсловиеПоДопИсточникам"; + Если ЭтоДокумент Тогда + ТекстЗапроса = ТекстЗапроса + " + | + |УПОРЯДОЧИТЬ ПО + | ТаблицаОбъекта.Дата УБЫВ"; + КонецЕсли; + ТекстЗапроса = ТекстЗапроса + " + |; + |УНИЧТОЖИТЬ + | #ВТЗаблокированоСсылка"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ВТЗаблокированоСсылка","ВТЗаблокировано" + ИмяОбъекта); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"#ТаблицаОбъектаИзменения", ПолноеИмяОбъекта + ".Изменения"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"#ТаблицаОбъекта", ПолноеИмяОбъекта); + + Если Не ДополнительныеПараметры.ВыбиратьПорциями Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫБРАТЬ ПЕРВЫЕ 500","ВЫБРАТЬ"); + КонецЕсли; + + МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц(); + СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияДанных(Очередь, ПолноеИмяОбъекта, МенеджерВременныхТаблиц); + + ДобавитьПроверкуБлокировкиДополнительныхИсточников(Очередь, ТекстЗапроса, ПолноеИмяОбъекта, Неопределено, МенеджерВременныхТаблиц, Ложь, ДополнительныеПараметры); + ТекущаяОчередь = ОчередьСсылкой(Очередь); + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + Запрос.УстановитьПараметр("ТекущаяОчередь", ТекущаяОчередь); + ВыборкаПоСсылкам = Запрос.Выполнить().Выбрать(); + + Возврат ВыборкаПоСсылкам; +КонецФункции + +// Создает временную таблицу ссылок, которые не обработаны в текущей очереди +// и не заблокированы меньшими очередями. +// Имя таблицы: ВТДляОбработки<ИмяОбъекта>, например ВТДляОбработкиНоменклатура +// Колонки таблицы +// * Ссылка - ЛюбаяСсылка. +// +// Параметры: +// Очередь - Число - очередь обработки, в которой выполняется текущий обработчик +// ПолноеИмяОбъекта - Строка - полное имя объекта, для которого выполняется проверка, например, Справочник.Номенклатура +// МенеджерВременныхТаблиц - МенеджерВременныхТаблиц - менеджер, в котором будет создана временная таблица +// ДополнительныеПараметры - Структура - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки. +// +// Возвращаемое значение: +// Структура - результат формирования временной таблицы: +// * ЕстьЗаписиВоВременнойТаблице - Булево - в создаваемой таблице есть хотя бы одна запись. Записей может не быть по двум причинам +// - все обработано или все, что нужно обработать, еще заблокировано обработчиками с меньшей очередью +// * ЕстьДанныеДляОбработки - Булево - в очереди есть ссылки для обработки, т.е. еще не все обработано +// * ИмяВременнойТаблицы - Строка - имя созданной временной таблицы. +// +Функция СоздатьВременнуюТаблицуСсылокДляОбработки(Очередь, ПолноеИмяОбъекта, МенеджерВременныхТаблиц, ДополнительныеПараметры = Неопределено) Экспорт + + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = ДополнительныеПараметрыВыборкиДанныхДляОбработки(); + КонецЕсли; + + ИмяОбъекта = СтрРазделить(ПолноеИмяОбъекта,".",Ложь)[1]; + МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъекта); + + Если ДополнительныеПараметры.ВыбиратьПорциями Тогда + + ЭтоДокумент = ОбщегоНазначения.ЭтоДокумент(МетаданныеОбъекта) + Или ОбщегоНазначения.ЭтоЗадача(МетаданныеОбъекта); + + ТекстЗапроса = + "ВЫБРАТЬ + | ТаблицаИзменения.Ссылка КАК Ссылка"; + Если ЭтоДокумент Тогда + ТекстЗапроса = ТекстЗапроса + ", + | ТаблицаОбъекта.Дата КАК Дата"; + КонецЕсли; + ТекстЗапроса = ТекстЗапроса + " + |ПОМЕСТИТЬ ВТДляОбработкиСсылкаПолная + |ИЗ + | #ТаблицаОбъектаИзменения КАК ТаблицаИзменения + | ЛЕВОЕ СОЕДИНЕНИЕ #ВТЗаблокированоСсылка КАК ВТЗаблокированоСсылка + | ПО ТаблицаИзменения.Ссылка = ВТЗаблокированоСсылка.Ссылка"; + Если ЭтоДокумент + Или ДополнительныеПараметры.ДополнительныеИсточникиДанных.Количество() > 0 Тогда + ТекстЗапроса = ТекстЗапроса + " + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ #ТаблицаОбъекта КАК ТаблицаОбъекта + | #ТекстЗапросаСоединениеСДопИсточникамиПоШапке + | ПО ТаблицаИзменения.Ссылка = ТаблицаОбъекта.Ссылка + | #ТекстЗапросаСоединениеСДопИсточникамиПоТЧ"; + КонецЕсли; + ТекстЗапроса = ТекстЗапроса + " + |ГДЕ + | ТаблицаИзменения.Узел = &ТекущаяОчередь + | И ВТЗаблокированоСсылка.Ссылка ЕСТЬ NULL + | И &УсловиеПоДопИсточникам + | + |ИНДЕКСИРОВАТЬ ПО + | Ссылка + | + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВТДляОбработкиСсылкаПолная.Ссылка КАК Ссылка + |ПОМЕСТИТЬ #ВТДляОбработкиСсылка + |ИЗ + | ВТДляОбработкиСсылкаПолная КАК ВТДляОбработкиСсылкаПолная + |ГДЕ + | ВТДляОбработкиСсылкаПолная.Ссылка В + | (ВЫБРАТЬ ПЕРВЫЕ 500 + | ВТДляОбработкиСсылкаПолная.Ссылка КАК Ссылка + | ИЗ + | ВТДляОбработкиСсылкаПолная КАК ВТДляОбработкиСсылкаПолная"; + Если ЭтоДокумент Тогда + ТекстЗапроса = ТекстЗапроса + " + | УПОРЯДОЧИТЬ ПО + | ВТДляОбработкиСсылкаПолная.Дата УБЫВ"; + КонецЕсли; + + ТекстЗапроса = ТекстЗапроса + " + |) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |УНИЧТОЖИТЬ #ВТЗаблокированоСсылка + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |УНИЧТОЖИТЬ ВТДляОбработкиСсылкаПолная"; + + Иначе + ТекстЗапроса = + "ВЫБРАТЬ + | ТаблицаИзменений.Ссылка КАК Ссылка + |ПОМЕСТИТЬ #ВТДляОбработкиСсылка + |ИЗ + | #ТаблицаОбъектаИзменения КАК ТаблицаИзменений + | ЛЕВОЕ СОЕДИНЕНИЕ #ВТЗаблокированоСсылка КАК ВТЗаблокированоСсылка + | ПО ТаблицаИзменений.Ссылка = ВТЗаблокированоСсылка.Ссылка + |ГДЕ + | ТаблицаИзменений.Узел = &ТекущаяОчередь + | И ВТЗаблокированоСсылка.Ссылка ЕСТЬ NULL + | + |ИНДЕКСИРОВАТЬ ПО + | Ссылка + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |УНИЧТОЖИТЬ #ВТЗаблокированоСсылка"; + КонецЕсли; + + Если ПустаяСтрока(ДополнительныеПараметры.ИмяВременнойТаблицы) Тогда + ИмяВременнойТаблицы = "ВТДляОбработки" + ИмяОбъекта; + Иначе + ИмяВременнойТаблицы = ДополнительныеПараметры.ИмяВременнойТаблицы; + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ВТЗаблокированоСсылка","ВТЗаблокировано" + ИмяОбъекта); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ВТДляОбработкиСсылка",ИмяВременнойТаблицы); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"#ТаблицаОбъектаИзменения", ПолноеИмяОбъекта + ".Изменения"); + + СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияДанных(Очередь, ПолноеИмяОбъекта, МенеджерВременныхТаблиц); + + ДобавитьПроверкуБлокировкиДополнительныхИсточников(Очередь, ТекстЗапроса, ПолноеИмяОбъекта, Неопределено, МенеджерВременныхТаблиц, Истина, ДополнительныеПараметры); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"#ТаблицаОбъекта", ПолноеИмяОбъекта); + + ТекущаяОчередь = ОчередьСсылкой(Очередь); + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + Запрос.УстановитьПараметр("ТекущаяОчередь", ТекущаяОчередь); + РезультатЗапроса = Запрос.ВыполнитьПакет(); + + Результат = Новый Структура("ЕстьЗаписиВоВременнойТаблице,ЕстьДанныеДляОбработки,ИмяВременнойТаблицы", Ложь, Ложь,""); + Результат.ИмяВременнойТаблицы = ИмяВременнойТаблицы; + Результат.ЕстьЗаписиВоВременнойТаблице = РезультатЗапроса[0].Выгрузить()[0].Количество <> 0; + + Если Результат.ЕстьЗаписиВоВременнойТаблице Тогда + Результат.ЕстьДанныеДляОбработки = Истина; + Иначе + Результат.ЕстьДанныеДляОбработки = ЕстьДанныеДляОбработки(Очередь, ПолноеИмяОбъекта); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает значения измерений независимого регистра сведений для обработки. +// Данные берутся из зарегистрированных в очереди, учитываются заблокированные более приоритетными очередями данные. +// +// Параметры: +// Очередь - Число - очередь, к которой отнесен обработчик и в которой зарегистрированы данные, которые он будет +// обрабатывать. +// ПолноеИмяОбъекта - Строка - имя объекта, который нужно обработать. Например, РегистрСведений.ШтрихкодыНоменклатуры +// ДополнительныеПараметры - Структура - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки. +// +// Возвращаемое значение: +// ВыборкаИзРезультатаЗапроса - выборка значений измерений, которые нужно обработать, имена полей соответствует именам измерений регистра +// Если по измерению не регистрировалась необходимость обработки, то в выборке по этому измерению будет +// пустое значение. +// +Функция ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки(Очередь, ПолноеИмяОбъекта, ДополнительныеПараметры = Неопределено) Экспорт + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = ДополнительныеПараметрыВыборкиДанныхДляОбработки(); + КонецЕсли; + + ИмяОбъекта = СтрРазделить(ПолноеИмяОбъекта,".",Ложь)[1]; + МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъекта); + + Запрос = Новый Запрос; + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 500 + | &ТекстВыборкиИзмерений + |ИЗ + | #ТаблицаОбъектаИзменения КАК ТаблицаИзменений + | ЛЕВОЕ СОЕДИНЕНИЕ #ВТЗаблокированоИзмерения КАК ВТЗаблокированоИзмерения + | ПО &ТекстУсловияСоединенияИзмерений + | #ТекстЗапросаСоединениеСДопИсточниками + |ГДЕ + | ТаблицаИзменений.Узел = &ТекущаяОчередь + | И &ТекстУсловияПоОтборуНезаблокированных + | И &УсловиеПоДопИсточникам"; + + ТекстВыборкиИзмерений = ""; + ТекстУсловияСоединенияИзмерений = "ИСТИНА"; + ПервоеИзмерение = Истина; + Для Каждого Измерение Из МетаданныеОбъекта.Измерения Цикл + + Если Не Измерение.ОсновнойОтбор Тогда + Продолжить; + КонецЕсли; + + ТекстВыборкиИзмерений = ТекстВыборкиИзмерений + " + | ТаблицаИзменений." + Измерение.Имя + " КАК " + Измерение.Имя + ","; + + ТекстУсловияСоединенияИзмерений = ТекстУсловияСоединенияИзмерений + " + | И ТаблицаИзменений." + Измерение.Имя + " = ВТЗаблокированоИзмерения." + Измерение.Имя + " + | ИЛИ ТаблицаИзменений." + Измерение.Имя + " = &ПустоеЗначениеИзмерения"+ Измерение.Имя + " + | ИЛИ ВТЗаблокированоИзмерения." + Измерение.Имя + " = &ПустоеЗначениеИзмерения"+ Измерение.Имя; + + Запрос.УстановитьПараметр("ПустоеЗначениеИзмерения"+ Измерение.Имя, Измерение.Тип.ПривестиЗначение()); + Если ПервоеИзмерение Тогда + ТекстУсловияПоОтборуНезаблокированных = "ВТЗаблокированоИзмерения." + Измерение.Имя + " ЕСТЬ NULL "; + ПервоеИзмерение = Ложь; + КонецЕсли; + КонецЦикла; + + ТекстВыборкиИзмерений = Лев(ТекстВыборкиИзмерений, СтрДлина(ТекстВыборкиИзмерений) - 1); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстВыборкиИзмерений", ТекстВыборкиИзмерений); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстУсловияСоединенияИзмерений", ТекстУсловияСоединенияИзмерений); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстУсловияПоОтборуНезаблокированных", ТекстУсловияПоОтборуНезаблокированных); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"#ТаблицаОбъектаИзменения", ПолноеИмяОбъекта + ".Изменения"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ВТЗаблокированоИзмерения","ВТЗаблокировано" + ИмяОбъекта); + Если Не ДополнительныеПараметры.ВыбиратьПорциями Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫБРАТЬ ПЕРВЫЕ 500","ВЫБРАТЬ"); + КонецЕсли; + + МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц(); + + СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияДанных(Очередь, ПолноеИмяОбъекта, МенеджерВременныхТаблиц); + + ДобавитьПроверкуБлокировкиДополнительныхИсточниковДляНезависимогоРегистра(Очередь, + ТекстЗапроса, + ПолноеИмяОбъекта, + МенеджерВременныхТаблиц, + ДополнительныеПараметры); + + ТекущаяОчередь = ОчередьСсылкой(Очередь); + + Запрос.Текст = ТекстЗапроса; + Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + Запрос.УстановитьПараметр("ТекущаяОчередь", ТекущаяОчередь); + ВыборкаПоИзмерениям = Запрос.Выполнить().Выбрать(); + + Возврат ВыборкаПоИзмерениям; +КонецФункции + +// Создает временную таблицу значения измерений независимого регистра сведений для обработки. +// Имя таблицы: ВТДляОбработки<ИмяОбъекта>, например ВТДляОбработкиШтрихкодыНоменклатуры +// Колонки таблицы соответствуют измерениям регистра. Если по измерению не регистрировалась +// необходимость обработки, то в выборке по этому измерению будет пустое значение. +// +// Параметры: +// Очередь - Число - очередь обработки, в которой выполняется текущий обработчик +// ПолноеИмяОбъекта - Строка - полное имя объекта, для которого выполняется проверка, например, Справочник.Номенклатура +// МенеджерВременныхТаблиц - МенеджерВременныхТаблиц - менеджер, в котором будет создана временная таблица +// ДополнительныеПараметры - Структура - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки. +// +// Возвращаемое значение: +// Структура - результат формирования временной таблицы: +// * ЕстьЗаписиВоВременнойТаблице - Булево - в создаваемой таблице есть хотя бы одна запись. Записей может не быть по двум причинам +// - все обработано или все, что нужно обработать, еще заблокировано обработчиками с меньшей очередью +// * ЕстьДанныеДляОбработки - Булево - в очереди есть данные для обработки, т.е. еще не все обработано +// * ИмяВременнойТаблицы - Строка - имя созданной временной таблицы. +// +Функция СоздатьВременнуюТаблицуИзмеренийНезависимогоРегистраСведенийДляОбработки(Очередь, ПолноеИмяОбъекта, МенеджерВременныхТаблиц, ДополнительныеПараметры = Неопределено) Экспорт + + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = ДополнительныеПараметрыВыборкиДанныхДляОбработки(); + КонецЕсли; + + ИмяОбъекта = СтрРазделить(ПолноеИмяОбъекта,".",Ложь)[1]; + МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъекта); + + Запрос = Новый Запрос; + Если ДополнительныеПараметры.ВыбиратьПорциями Тогда + ТекстЗапроса = + "ВЫБРАТЬ + | &ТекстВыборкиИзмерений + |ПОМЕСТИТЬ ВТДляОбработкиИзмеренияПолная + |ИЗ + | #ТаблицаОбъектаИзменения КАК ТаблицаИзменений + | ЛЕВОЕ СОЕДИНЕНИЕ #ВТЗаблокированоИзмерения КАК ВТЗаблокированоИзмерения + | ПО (&ТекстУсловияСоединенияИзмерений) + | #ТекстЗапросаСоединениеСДопИсточниками + |ГДЕ + | ТаблицаИзменений.Узел = &ТекущаяОчередь + | И &ТекстУсловияПоОтборуНезаблокированных + | И &УсловиеПоДопИсточникам + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | &ТекстВыборкиИзмерений + |ПОМЕСТИТЬ #ВТДляОбработкиИзмерения + |ИЗ + | ВТДляОбработкиИзмеренияПолная КАК ТаблицаИзменений + |ГДЕ + | &ТекстУсловияОтбораПорции В + | (ВЫБРАТЬ ПЕРВЫЕ 500 + | &ТекстВыборкиИзмерений + | ИЗ + | ВТДляОбработкиИзмеренияПолная КАК ТаблицаИзменений) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |УНИЧТОЖИТЬ #ВТЗаблокированоИзмерения + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |УНИЧТОЖИТЬ ВТДляОбработкиИзмеренияПолная"; + Иначе + ТекстЗапроса = + "ВЫБРАТЬ + | &ТекстВыборкиИзмерений + |ПОМЕСТИТЬ #ВТДляОбработкиИзмерения + |ИЗ + | #ТаблицаОбъектаИзменения КАК ТаблицаИзменений + | ЛЕВОЕ СОЕДИНЕНИЕ #ВТЗаблокированоИзмерения КАК ВТЗаблокированоИзмерения + | ПО &ТекстУсловияСоединенияИзмерений + | #ТекстЗапросаСоединениеСДопИсточниками + |ГДЕ + | ТаблицаИзменений.Узел = &ТекущаяОчередь + | И &ТекстУсловияПоОтборуНезаблокированных + | И &УсловиеПоДопИсточникам + |; + |УНИЧТОЖИТЬ + | #ВТЗаблокированоИзмерения"; + КонецЕсли; + ТекстВыборкиИзмерений = ""; + ТекстУсловияСоединенияИзмерений = "ИСТИНА"; + ТекстУсловияОтбораПорции = ""; + + ПервоеИзмерение = Истина; + Для Каждого Измерение Из МетаданныеОбъекта.Измерения Цикл + ТекстВыборкиИзмерений = ТекстВыборкиИзмерений + " + | ТаблицаИзменений." + Измерение.Имя + " КАК " + Измерение.Имя + ","; + + ТекстУсловияОтбораПорции = ТекстУсловияОтбораПорции + " + | ТаблицаИзменений." + Измерение.Имя + ","; + + ТекстУсловияСоединенияИзмерений = ТекстУсловияСоединенияИзмерений + " + | И ТаблицаИзменений." + Измерение.Имя + " = ВТЗаблокированоИзмерения." + Измерение.Имя + " + | ИЛИ ТаблицаИзменений." + Измерение.Имя + " = &ПустоеЗначениеИзмерения"+ Измерение.Имя + " + | ИЛИ ВТЗаблокированоИзмерения." + Измерение.Имя + " = &ПустоеЗначениеИзмерения"+ Измерение.Имя; + Запрос.УстановитьПараметр("ПустоеЗначениеИзмерения"+ Измерение.Имя, Измерение.Тип.ПривестиЗначение()); + + Если ПервоеИзмерение Тогда + ТекстУсловияПоОтборуНезаблокированных = "ВТЗаблокированоИзмерения." + Измерение.Имя + " ЕСТЬ NULL "; + ПервоеИзмерение = Ложь; + КонецЕсли; + КонецЦикла; + + ТекстВыборкиИзмерений = Лев(ТекстВыборкиИзмерений, СтрДлина(ТекстВыборкиИзмерений) - 1); + ТекстУсловияОтбораПорции = Лев(ТекстУсловияОтбораПорции, СтрДлина(ТекстУсловияОтбораПорции) - 1); + ТекстУсловияОтбораПорции = "("+ТекстУсловияОтбораПорции+")"; + + Если ПустаяСтрока(ДополнительныеПараметры.ИмяВременнойТаблицы) Тогда + ИмяВременнойТаблицы = "ВТДляОбработки" + ИмяОбъекта; + Иначе + ИмяВременнойТаблицы = ДополнительныеПараметры.ИмяВременнойТаблицы; + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстВыборкиИзмерений", ТекстВыборкиИзмерений); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстУсловияСоединенияИзмерений", ТекстУсловияСоединенияИзмерений); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстУсловияПоОтборуНезаблокированных", ТекстУсловияПоОтборуНезаблокированных); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"#ТаблицаОбъектаИзменения", ПолноеИмяОбъекта + ".Изменения"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ВТЗаблокированоИзмерения","ВТЗаблокировано" + ИмяОбъекта); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ВТДляОбработкиИзмерения",ИмяВременнойТаблицы); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстУсловияОтбораПорции",ТекстУсловияОтбораПорции); + + СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияДанных(Очередь, ПолноеИмяОбъекта, МенеджерВременныхТаблиц); + ДобавитьПроверкуБлокировкиДополнительныхИсточниковДляНезависимогоРегистра(Очередь, + ТекстЗапроса, + ПолноеИмяОбъекта, + МенеджерВременныхТаблиц, + ДополнительныеПараметры); + + ТекущаяОчередь = ОчередьСсылкой(Очередь); + + Запрос.Текст = ТекстЗапроса; + Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + Запрос.УстановитьПараметр("ТекущаяОчередь", ТекущаяОчередь); + РезультатЗапроса = Запрос.ВыполнитьПакет(); + + Результат = Новый Структура("ЕстьЗаписиВоВременнойТаблице,ЕстьДанныеДляОбработки,ИмяВременнойТаблицы", Ложь, Ложь,""); + Результат.ИмяВременнойТаблицы = ИмяВременнойТаблицы; + Результат.ЕстьЗаписиВоВременнойТаблице = РезультатЗапроса[0].Выгрузить()[0].Количество <> 0; + + Если Результат.ЕстьЗаписиВоВременнойТаблице Тогда + Результат.ЕстьДанныеДляОбработки = Истина; + Иначе + Результат.ЕстьДанныеДляОбработки = ЕстьДанныеДляОбработки(Очередь, ПолноеИмяОбъекта); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Проверяет, есть ли еще необработанные данные. +// +// Параметры: +// Очередь - Число, Неопределено - очередь, к которой отнесен обработчик и в которой зарегистрированы данные, которые он будет обрабатывать. +// Неопределено - проверяется, завершена ли обработка в целом; +// Массив - проверяется есть данные для обработки в списке очередей +// ПолноеИмяМетаданныеОбъекта - Строка, ОбъектМетаданных - полное имя обрабатываемого объекта или его метаданные. +// Например, "Документ.ПриходныйОрдерНаТовары" +// - Массив - массив полных имен объектов или объектов метаданных, в массиве не должно быть независимых регистров сведений +// Отбор - ЛюбаяСсылка, Структура, Неопределено, Массив - отбор данных для проверки. +// Если передано Неопределено - проверяется по всему типу объекта, +// Если объект - регистр, подчиненный регистратору, то в отборе - ссылка на регистратор или массив ссылок +// Если объект ссылочного типа, то в отборе - или ссылка, или массив ссылок +// Если объект - независимый регистр сведений, то в отборе - структура со значениями измерений. +// Ключ структуры - имя измерения, значение - значение отбора (можно передать массив значений). +// +// Возвращаемое значение: +// Булево +// +Функция ЕстьДанныеДляОбработки(Очередь, ПолноеИмяМетаданныеОбъекта, Отбор = Неопределено) Экспорт + + Если ПолучитьФункциональнуюОпцию("ОтложенноеОбновлениеЗавершеноУспешно") Тогда + ЭтоПодчиненныйУзелРИБ = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ(); + Если Не ЭтоПодчиненныйУзелРИБ Тогда + Возврат Ложь; + ИначеЕсли ПолучитьФункциональнуюОпцию("ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно") Тогда + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + Если ТипЗнч(ПолноеИмяМетаданныеОбъекта) = Тип("Строка") Тогда + ПолныеИменаОбрабатываемыхОбъектов = СтрРазделить(ПолноеИмяМетаданныеОбъекта, ","); + ИначеЕсли ТипЗнч(ПолноеИмяМетаданныеОбъекта) = Тип("Массив") Тогда + ПолныеИменаОбрабатываемыхОбъектов = ПолноеИмяМетаданныеОбъекта; + ИначеЕсли ТипЗнч(ПолноеИмяМетаданныеОбъекта) = Тип("ОбъектМетаданных") Тогда + ПолныеИменаОбрабатываемыхОбъектов = Новый Массив; + ПолныеИменаОбрабатываемыхОбъектов.Добавить(ПолноеИмяМетаданныеОбъекта.ПолноеИмя()); + Иначе + ТекстИсключения = НСтр("ru = 'Передан неправильный тип параметра ""ПолноеИмяМетаданныеОбъекта"" в функцию ОбновлениеИнформационнойБазы.ЕстьДанныеДляОбработки'"); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + + Запрос = Новый Запрос; + + ТекстыЗапроса = Новый Массив; + ОтборУстановлен = Ложь; + + Для каждого ОбрабатываемыйТип Из ПолныеИменаОбрабатываемыхОбъектов Цикл + + Если ТипЗнч(ОбрабатываемыйТип) = Тип("ОбъектМетаданных") Тогда + МетаданныеОбъекта = ОбрабатываемыйТип; + ПолноеИмяОбъекта = ОбрабатываемыйТип.ПолноеИмя(); + Иначе + МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ОбрабатываемыйТип); + ПолноеИмяОбъекта = ОбрабатываемыйТип; + КонецЕсли; + + УсловиеОтбораДанных = "ИСТИНА"; + + Если ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(МетаданныеОбъекта) Тогда + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ТаблицаИзменений.Ссылка КАК Ссылка + |ИЗ + | #ТаблицаИзменения КАК ТаблицаИзменений + |ГДЕ + | &УсловиеОтбораУзла + | И &УсловиеОтбораДанных"; + + Запрос.УстановитьПараметр("Ссылка", Отбор); + + Если Отбор <> Неопределено Тогда + УсловиеОтбораДанных = "ТаблицаИзменений.Ссылка В (&Отбор)"; + КонецЕсли; + + ИначеЕсли ОбщегоНазначения.ЭтоРегистрСведений(МетаданныеОбъекта) + И МетаданныеОбъекта.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый Тогда + + Если ПолныеИменаОбрабатываемыхОбъектов.Количество() > 1 Тогда + ТекстИсключения = НСтр("ru = 'В массиве имен в параметре ""ПолноеИмяМетаданныеОбъекта"" в функцию ОбновлениеИнформационнойБазы.ЕстьДанныеДляОбработки передан независимый регистр сведений.'"); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + + ОтборУстановлен = Истина; + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | &ТекстВыборкиИзмерений + |ИЗ + | #ТаблицаИзменения КАК ТаблицаИзменений + |ГДЕ + | &УсловиеОтбораУзла + | И &УсловиеОтбораДанных"; + + ТекстВыборкиИзмерений = ""; + Для Каждого Измерение Из МетаданныеОбъекта.Измерения Цикл + ТекстВыборкиИзмерений = ТекстВыборкиИзмерений + " + | ТаблицаИзменений." + Измерение.Имя + " КАК " + Измерение.Имя + ","; + + Если Отбор <> Неопределено Тогда + УсловиеОтбораДанных = УсловиеОтбораДанных + " + | И (ТаблицаИзменений." + Измерение.Имя + " В (&ЗначениеОтбора" + Измерение.Имя + ") + | ИЛИ ТаблицаИзменений." + Измерение.Имя + " = &ПустоеЗначение" + Измерение.Имя + ")"; + + Если Отбор.Свойство(Измерение.Имя) Тогда + Запрос.УстановитьПараметр("ЗначениеОтбора" + Измерение.Имя, Отбор[Измерение.Имя]); + Иначе + Запрос.УстановитьПараметр("ЗначениеОтбора" + Измерение.Имя, Измерение.Тип.ПривестиЗначение()); + КонецЕсли; + + Запрос.УстановитьПараметр("ПустоеЗначение" + Измерение.Имя, Измерение.Тип.ПривестиЗначение()); + КонецЕсли; + КонецЦикла; + + ТекстВыборкиИзмерений = Лев(ТекстВыборкиИзмерений, СтрДлина(ТекстВыборкиИзмерений) - 1); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстВыборкиИзмерений", ТекстВыборкиИзмерений); + + ИначеЕсли ОбщегоНазначения.ЭтоРегистр(МетаданныеОбъекта) Тогда + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ТаблицаИзменений.Регистратор КАК Ссылка + |ИЗ + | #ТаблицаИзменения КАК ТаблицаИзменений + |ГДЕ + | &УсловиеОтбораУзла + | И &УсловиеОтбораДанных"; + + Если Отбор <> Неопределено Тогда + УсловиеОтбораДанных = "ТаблицаИзменений.Регистратор В (&Отбор)"; + КонецЕсли; + + Иначе + ТекстИсключения = НСтр("ru = 'Для типа метаданных ""%МетаданныеОбъекта%"" не поддерживается проверка в функции ОбновлениеИнформационнойБазы.ЕстьДанныеДляОбработки'"); + ТекстИсключения = СтрЗаменить(ТекстИсключения, "%МетаданныеОбъекта%", Строка(МетаданныеОбъекта)); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаИзменения", ПолноеИмяОбъекта + ".Изменения"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеОтбораДанных", УсловиеОтбораДанных); + + ТекстыЗапроса.Добавить(ТекстЗапроса); + + КонецЦикла; + + Соединитель = " + | + |ОБЪЕДИНИТЬ ВСЕ + |"; + + ТекстЗапроса = СтрСоединить(ТекстыЗапроса, Соединитель); + + Если Очередь = Неопределено Тогда + УсловиеОтбораУзла = " ТаблицаИзменений.Узел ССЫЛКА ПланОбмена.ОбновлениеИнформационнойБазы "; + Иначе + УсловиеОтбораУзла = " ТаблицаИзменений.Узел В (&Узлы) "; + Если ТипЗнч(Очередь) = Тип("Массив") Тогда + Запрос.УстановитьПараметр("Узлы", Очередь); + Иначе + Запрос.УстановитьПараметр("Узлы", ОчередьСсылкой(Очередь)); + КонецЕсли; + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеОтбораУзла", УсловиеОтбораУзла); + + Если Не ОтборУстановлен Тогда + Запрос.УстановитьПараметр("Отбор", Отбор); + КонецЕсли; + + Запрос.Текст = ТекстЗапроса; + + Возврат Не Запрос.Выполнить().Пустой(); + +КонецФункции + +// Проверяет, что все данные обработаны. +// +// Параметры: +// Очередь - Число, Неопределено - очередь, к которой отнесен обработчик и в которой зарегистрированы данные, которые он будет обрабатывать. +// Неопределено - проверяется, завершена ли обработка в целом; +// Массив - проверяется есть данные для обработки в списке очередей +// ПолноеИмяМетаданныеОбъекта - Строка, ОбъектМетаданных - полное имя обрабатываемого объекта или его метаданные. +// Например, "Документ.ПриходныйОрдерНаТовары" +// - Массив - массив полных имен объектов или объектов метаданных, в массиве не должно быть независимых регистров сведений +// Отбор - ЛюбаяСсылка, Структура, Неопределено, Массив - отбор данных для проверки. +// Если передано Неопределено - проверяется по всему типу объекта, +// Если объект - регистр, подчиненный регистратору, то в отборе - ссылка на регистратор или массив ссылок +// Если объект ссылочного типа, то в отборе - или ссылка, или массив ссылок +// Если объект - независимый регистр сведений, то в отборе - структура со значениями измерений. +// Ключ структуры - имя измерения, значение - значение отбора (можно передать массив значений). +// +// Возвращаемое значение: +// Булево +// +Функция ОбработкаДанныхЗавершена(Очередь, ПолноеИмяМетаданныеОбъекта, Отбор = Неопределено) Экспорт + + Возврат Не ЕстьДанныеДляОбработки(Очередь, ПолноеИмяМетаданныеОбъекта, Отбор); + +КонецФункции + +// Проверяет есть заблокированные меньшими очередями обработки данные. +// +// Параметры: +// Очередь - Число, Неопределено - очередь, к которой отнесен обработчик и в которой зарегистрированы данные, которые он будет +// обрабатывать. +// ПолноеИмяМетаданныеОбъекта - Строка, ОбъектМетаданных - полное имя обрабатываемого объекта или его метаданные. +// Например, "Документ.ПриходныйОрдерНаТовары" +// - Массив - массив полных имен объектов или объектов метаданных, в массиве не должно быть независимых регистров сведений. +// +// Возвращаемое значение: +// Булево +// +Функция ЕстьЗаблокированныеПредыдущимиОчередямиДанные(Очередь, ПолноеИмяМетаданныеОбъекта) Экспорт + + Возврат ЕстьДанныеДляОбработки(УзлыМеньшейОчереди(Очередь), ПолноеИмяМетаданныеОбъекта); + +КонецФункции + +// Проверяет завершилась ли обработка данных обработчиками, отнесенными на более раннюю очередь. +// +// Параметры: +// Очередь - Число, Неопределено - очередь, к которой отнесен обработчик и в которой зарегистрированы данные, которые он будет обрабатывать. +// Неопределено - проверяется, завершена ли обработка в целом; +// Массив - проверяется есть данные для обработки в списке очередей. +// Данные - ЛюбаяСсылка, НаборЗаписей, Объект, ДанныеФормыСтруктура - ссылка на объект, сам объект +// или набор записей, который необходимо проверить. Если ДополнительныеПараметры.ЭтоДвижения = Истина, то Данные - это регистратор +// указанного в ДополнительныеПараметры регистра. +// ДополнительныеПараметры - Структура - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки. +// МетаданныеИОтбор - Структура - см. ОбновлениеИнформационнойБазы.МетаданныеИОтборПоДанным. +// +// Возвращаемое значение: +// Булево +// +Функция МожноЧитатьИМенять(Очередь, Данные, ДополнительныеПараметры = Неопределено, МетаданныеИОтбор = Неопределено) Экспорт + + Если ПолучитьФункциональнуюОпцию("ОтложенноеОбновлениеЗавершеноУспешно") Тогда + Возврат Истина; + КонецЕсли; + + Если МетаданныеИОтбор = Неопределено Тогда + МетаданныеИОтбор = МетаданныеИОтборПоДанным(Данные, ДополнительныеПараметры); + КонецЕсли; + + Если МетаданныеИОтбор.ЭтоНовый Тогда + Возврат Истина; + КонецЕсли; + + Если Очередь = Неопределено Тогда + Возврат Не ЕстьДанныеДляОбработки(Неопределено, МетаданныеИОтбор.Метаданные, МетаданныеИОтбор.Отбор); + Иначе + Возврат Не ЕстьДанныеДляОбработки(УзлыМеньшейОчереди(Очередь), МетаданныеИОтбор.Метаданные, МетаданныеИОтбор.Отбор); + КонецЕсли; + +КонецФункции + +// Создает временную таблицу заблокированных данных. +// Имя таблицы: ВТЗаблокированы<ИмяОбъекта>, например ВТЗаблокированоНоменклатура +// Колонки таблицы +// для объектов ссылочного типа: +// * Ссылка +// для регистров, подчиненных регистратору +// * Регистратор +// для регистров с непосредственной записью +// * колонки, соответствующие измерениям регистра. +// +// Параметры: +// Очередь,Неопределено - Число - очередь обработки, в которой выполняется текущий обработчик. Если передано Неопределенно, то проверяется во всех очередях +// ПолноеИмяОбъекта - Строка - полное имя объекта, для которого выполняется проверка, например, Справочник.Номенклатура +// МенеджерВременныхТаблиц - МенеджерВременныхТаблиц - менеджер, в котором будет создана временная таблица +// ДополнительныеПараметры - Структура - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки, +// параметр ВыбиратьПорциями игнорируется, заблокированные данные всегда помещаются в таблицу целиком. +// +// +// Возвращаемое значение: +// Структура - результат формирования временной таблицы: +// * ЕстьЗаписиВоВременнойТаблице - Булево - в создаваемой таблице есть хотя бы одна запись. +// * ИмяВременнойТаблицы - Строка - имя созданной временной таблицы. +// +Функция СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияДанных(Очередь, ПолноеИмяОбъекта, МенеджерВременныхТаблиц, ДополнительныеПараметры = Неопределено) Экспорт + + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = ДополнительныеПараметрыВыборкиДанныхДляОбработки(); + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъекта); + + Если ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(МетаданныеОбъекта) Тогда + Если ПолучитьФункциональнуюОпцию("ОтложенноеОбновлениеЗавершеноУспешно") Тогда + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | &ПустоеЗначение КАК Ссылка + |ПОМЕСТИТЬ #ИмяВременнойТаблицы + |ГДЕ + | ЛОЖЬ"; + + Запрос.УстановитьПараметр("ПустоеЗначение", МетаданныеОбъекта.СтандартныеРеквизиты.Ссылка.Тип.ПривестиЗначение()); + Иначе + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ТаблицаИзменений.Ссылка КАК Ссылка + |ПОМЕСТИТЬ #ИмяВременнойТаблицы + |ИЗ + | #ТаблицаИзменения КАК ТаблицаИзменений + |ГДЕ + | &УсловиеОтбораУзла + | + |ИНДЕКСИРОВАТЬ ПО + | Ссылка"; + КонецЕсли; + ИначеЕсли ОбщегоНазначения.ЭтоРегистрСведений(МетаданныеОбъекта) + И МетаданныеОбъекта.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый Тогда + + Если ПолучитьФункциональнуюОпцию("ОтложенноеОбновлениеЗавершеноУспешно") Тогда + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | &ТекстВыборкиИзмерений + |ПОМЕСТИТЬ #ИмяВременнойТаблицы + |ГДЕ + | ЛОЖЬ"; + ТекстВыборкиИзмерений = ""; + Для Каждого Измерение Из МетаданныеОбъекта.Измерения Цикл + ТекстВыборкиИзмерений = ТекстВыборкиИзмерений + " + | &ПустоеЗначениеИзмерения"+ Измерение.Имя + " КАК " + Измерение.Имя + ","; + Запрос.УстановитьПараметр("ПустоеЗначениеИзмерения"+ Измерение.Имя, Измерение.Тип.ПривестиЗначение()); + КонецЦикла; + + Иначе + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | &ТекстВыборкиИзмерений + |ПОМЕСТИТЬ #ИмяВременнойТаблицы + |ИЗ + | #ТаблицаИзменения КАК ТаблицаИзменений + |ГДЕ + | &УсловиеОтбораУзла "; + ТекстВыборкиИзмерений = ""; + Для Каждого Измерение Из МетаданныеОбъекта.Измерения Цикл + ТекстВыборкиИзмерений = ТекстВыборкиИзмерений + " + | ТаблицаИзменений." + Измерение.Имя + " КАК " + Измерение.Имя + ","; + КонецЦикла; + КонецЕсли; + + ТекстВыборкиИзмерений = Лев(ТекстВыборкиИзмерений, СтрДлина(ТекстВыборкиИзмерений) - 1); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстВыборкиИзмерений", ТекстВыборкиИзмерений); + + ИначеЕсли ОбщегоНазначения.ЭтоРегистр(МетаданныеОбъекта) Тогда + + Если ПолучитьФункциональнуюОпцию("ОтложенноеОбновлениеЗавершеноУспешно") Тогда + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | &ПустоеЗначение КАК Регистратор + |ПОМЕСТИТЬ #ИмяВременнойТаблицы + |ГДЕ + | ЛОЖЬ"; + + Запрос.УстановитьПараметр("ПустоеЗначение", МетаданныеОбъекта.СтандартныеРеквизиты.Регистратор.Тип.ПривестиЗначение()); + + Иначе + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ТаблицаИзменений.Регистратор КАК Регистратор + |ПОМЕСТИТЬ #ИмяВременнойТаблицы + |ИЗ + | #ТаблицаИзменения КАК ТаблицаИзменений + |ГДЕ + | &УсловиеОтбораУзла + | + |ИНДЕКСИРОВАТЬ ПО + | Регистратор"; + КонецЕсли; + + Иначе + ТекстИсключения = НСтр("ru = 'Для этого типа метаданных не поддерживается проверка в функции ОбновлениеИнформационнойБазы.СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияДанных.'"); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + + Если Не ПолучитьФункциональнуюОпцию("ОтложенноеОбновлениеЗавершеноУспешно") Тогда + + Если Очередь = Неопределено Тогда + УсловиеОтбораУзла = " ТаблицаИзменений.Узел ССЫЛКА ПланОбмена.ОбновлениеИнформационнойБазы "; + Иначе + УсловиеОтбораУзла = " ТаблицаИзменений.Узел В (&Узлы) "; + Запрос.УстановитьПараметр("Узлы", УзлыМеньшейОчереди(Очередь)); + КонецЕсли; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеОтбораУзла", УсловиеОтбораУзла); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаИзменения", ПолноеИмяОбъекта + ".Изменения"); + + КонецЕсли; + + ИмяОбъекта = СтрРазделить(ПолноеИмяОбъекта, ".")[1]; + + Если ПустаяСтрока(ДополнительныеПараметры.ИмяВременнойТаблицы) Тогда + ИмяВременнойТаблицы = "ВТЗаблокировано"+ИмяОбъекта; + Иначе + ИмяВременнойТаблицы = ДополнительныеПараметры.ИмяВременнойТаблицы; + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ИмяВременнойТаблицы", ИмяВременнойТаблицы); + + Запрос.Текст = ТекстЗапроса; + + РезультатЗапроса = Запрос.Выполнить(); + + Результат = Новый Структура("ЕстьЗаписиВоВременнойТаблице,ИмяВременнойТаблицы", Ложь, ""); + Результат.ИмяВременнойТаблицы = ИмяВременнойТаблицы; + Результат.ЕстьЗаписиВоВременнойТаблице = РезультатЗапроса.Выгрузить()[0].Количество <> 0; + + Возврат Результат; + +КонецФункции + +// Создает временную таблицу заблокированных ссылок. +// Имя таблицы: ВТЗаблокировано +// Колонки таблицы +// * Ссылка +// +// Параметры: +// Очередь,Неопределено - Число - очередь обработки, в которой выполняется текущий обработчик. Если передано Неопределенно, то проверяется во всех очередях +// ПолныеИменаОбъектов - Строка, Массив - полные имена объектов, для которых выполняется проверка, например, Справочник.Номенклатура. +// Могут быть переданы объекты ссылочного типа, или регистры, подчиненные регистратору. +// МенеджерВременныхТаблиц - МенеджерВременныхТаблиц - менеджер, в котором будет создана временная таблица +// ДополнительныеПараметры - Структура - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки, +// параметр ВыбиратьПорциями игнорируется, заблокированные данные всегда помещаются в таблицу целиком. +// +// +// Возвращаемое значение: +// Структура - результат формирования временной таблицы: +// * ЕстьЗаписиВоВременнойТаблице - Булево - в создаваемой таблице есть хотя бы одна запись. +// * ИмяВременнойТаблицы - Строка - имя созданной временной таблицы. +// +Функция СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияСсылок(Очередь, ПолныеИменаОбъектов, МенеджерВременныхТаблиц, ДополнительныеПараметры = Неопределено) Экспорт + + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = ДополнительныеПараметрыВыборкиДанныхДляОбработки(); + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + + Если ПолучитьФункциональнуюОпцию("ОтложенноеОбновлениеЗавершеноУспешно") Тогда + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | НЕОПРЕДЕЛЕНО КАК Ссылка + |ПОМЕСТИТЬ #ИмяВременнойТаблицы + |ГДЕ + | ЛОЖЬ"; + Иначе + Если ТипЗнч(ПолныеИменаОбъектов) = Тип("Строка") Тогда + ПолныеИменаОбъектовМассив = СтрРазделить(ПолныеИменаОбъектов,",",Ложь); + ИначеЕсли ТипЗнч(ПолныеИменаОбъектов) = Тип("Массив") Тогда + ПолныеИменаОбъектовМассив = ПолныеИменаОбъектов; + Иначе + ПолныеИменаОбъектовМассив = Новый Массив; + ПолныеИменаОбъектовМассив.Добавить(ПолныеИменаОбъектов); + КонецЕсли; + + МассивТекстовЗапросов = Новый Массив; + + ЕстьРегистры = Ложь; + + Для Каждого ОбрабатываемыйТип Из ПолныеИменаОбъектовМассив Цикл + + Если ТипЗнч(ОбрабатываемыйТип) = Тип("ОбъектМетаданных") Тогда + МетаданныеОбъекта = ОбрабатываемыйТип; + ПолноеИмяОбъекта = ОбрабатываемыйТип.ПолноеИмя(); + Иначе + МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ОбрабатываемыйТип); + ПолноеИмяОбъекта = ОбрабатываемыйТип; + КонецЕсли; + + МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъекта); + + Если ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(МетаданныеОбъекта) Тогда + Если МассивТекстовЗапросов.Количество() = 0 Тогда + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ТаблицаИзменений.Ссылка КАК Ссылка + |//ПервыйЗапрос + |ИЗ + | #ТаблицаИзменения КАК ТаблицаИзменений + |ГДЕ + | &УсловиеОтбораУзла"; + Иначе + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ТаблицаИзменений.Ссылка КАК Ссылка + |ИЗ + | #ТаблицаИзменения КАК ТаблицаИзменений + |ГДЕ + | &УсловиеОтбораУзла"; + КонецЕсли; + ИначеЕсли ОбщегоНазначения.ЭтоРегистр(МетаданныеОбъекта) Тогда + Если МассивТекстовЗапросов.Количество() = 0 Тогда + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ТаблицаИзменений.Регистратор КАК Ссылка + |//ПервыйЗапрос + |ИЗ + | #ТаблицаИзменения КАК ТаблицаИзменений + |ГДЕ + | &УсловиеОтбораУзла"; + Иначе + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ТаблицаИзменений.Регистратор КАК Ссылка + |ИЗ + | #ТаблицаИзменения КАК ТаблицаИзменений + |ГДЕ + | &УсловиеОтбораУзла"; + КонецЕсли; + + ЕстьРегистры = Истина; + + Иначе + ТекстИсключения = НСтр("ru = 'Для типа метаданных ""%МетаданныеОбъекта%"" не поддерживается проверка в функции ОбновлениеИнформационнойБазы.СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияСсылок'"); + ТекстИсключения = СтрЗаменить(ТекстИсключения, "%МетаданныеОбъекта%", Строка(МетаданныеОбъекта)); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаИзменения", ПолноеИмяОбъекта + ".Изменения"); + + МассивТекстовЗапросов.Добавить(ТекстЗапроса); + КонецЦикла; + + Соединитель = " + | + |ОБЪЕДИНИТЬ ВСЕ + |"; + + ТекстЗапроса = СтрСоединить(МассивТекстовЗапросов, Соединитель); + + Если ЕстьРегистры + И МассивТекстовЗапросов.Количество() > 1 Тогда + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВложенныйЗапрос.Ссылка КАК Ссылка + |ПОМЕСТИТЬ #ИмяВременнойТаблицы + |ИЗ + | (" + ТекстЗапроса + ") КАК ВложенныйЗапрос + | + |ИНДЕКСИРОВАТЬ ПО + | Ссылка"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "//ПервыйЗапрос", ""); + Иначе + ТекстЗапроса = ТекстЗапроса + " + | + |ИНДЕКСИРОВАТЬ ПО + | Ссылка"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "//ПервыйЗапрос", "ПОМЕСТИТЬ #ИмяВременнойТаблицы"); + КонецЕсли; + + Если Очередь = Неопределено Тогда + УсловиеОтбораУзла = " ТаблицаИзменений.Узел ССЫЛКА ПланОбмена.ОбновлениеИнформационнойБазы "; + Иначе + УсловиеОтбораУзла = " ТаблицаИзменений.Узел В (&Узлы) "; + Запрос.УстановитьПараметр("Узлы", УзлыМеньшейОчереди(Очередь)); + КонецЕсли; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеОтбораУзла", УсловиеОтбораУзла); + КонецЕсли; + + Если ПустаяСтрока(ДополнительныеПараметры.ИмяВременнойТаблицы) Тогда + ИмяВременнойТаблицы = "ВТЗаблокировано"; + Иначе + ИмяВременнойТаблицы = ДополнительныеПараметры.ИмяВременнойТаблицы; + КонецЕсли; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ИмяВременнойТаблицы", ИмяВременнойТаблицы); + + Запрос.Текст = ТекстЗапроса; + РезультатЗапроса = Запрос.Выполнить(); + + Результат = Новый Структура("ЕстьЗаписиВоВременнойТаблице,ИмяВременнойТаблицы", Ложь, ""); + Результат.ИмяВременнойТаблицы = ИмяВременнойТаблицы; + Результат.ЕстьЗаписиВоВременнойТаблице = РезультатЗапроса.Выгрузить()[0].Количество <> 0; + + Возврат Результат; + +КонецФункции + +// Создает временную таблицу измерений регистров, подчиненных регистраторам, по которым еще есть необработанные регистраторы. +// Алгоритм вычисления +// - берутся заблокированные регистраторы +// - по ним соединяется с основной таблицей регистра +// - из основной таблицы получаются значения изменений +// - делается группировка +// Имя таблицы: ВТЗаблокированы<ИмяОбъекта>, например ВТЗаблокированоТоварыНаСкладах +// Колонки таблицы соответствуют переданным измерениям. +// +// Параметры: +// Очередь,Неопределено - Число - очередь обработки, в которой выполняется текущий обработчик. Если передано Неопределенно, то проверяется во всех очередях +// ПолноеИмяРегистра - Строка - имя регистра, движения по которому нужно переформировать. +// Например, РегистрНакопления.ТоварыНаСкладах +// Измерения - Строка, Массив - имя измерений, по которым нужно проверить блокировку перечисленные через запятую или массив имен +// МенеджерВременныхТаблиц - МенеджерВременныхТаблиц - менеджер, в котором будет создана временная таблица +// ДополнительныеПараметры - Структура - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки, +// параметр ВыбиратьПорциями игнорируется, заблокированные данные всегда помещаются в таблицу целиком. +// +// Возвращаемое значение: +// Структура - результат формирования временной таблицы: +// * ЕстьЗаписиВоВременнойТаблице - Булево - в создаваемой таблице есть хотя бы одна запись. +// * ИмяВременнойТаблицы - Строка - имя созданной временной таблицы. +// +Функция СоздатьВременнуюТаблицуЗначенийЗаблокированныхИзмерений(Очередь, ПолноеИмяРегистра, Измерения, МенеджерВременныхТаблиц, ДополнительныеПараметры = Неопределено) Экспорт + + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = ДополнительныеПараметрыВыборкиДанныхДляОбработки(); + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + + Если ТипЗнч(Измерения) = Тип("Строка") Тогда + ИзмеренияМассив = СтрРазделить(Измерения, ",", Ложь); + Иначе + ИзмеренияМассив = Измерения; + КонецЕсли; + + МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПолноеИмяРегистра); + + Если ПолучитьФункциональнуюОпцию("ОтложенноеОбновлениеЗавершеноУспешно") Тогда + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | &ЗначенияИзмерений + |ПОМЕСТИТЬ #ИмяВременнойТаблицы + |ГДЕ + | ЛОЖЬ"; + ЗначенияИзмерений = ""; + Для Каждого ИзмерениеСтр Из ИзмеренияМассив Цикл + + Измерение = МетаданныеОбъекта.Измерения.Найти(ИзмерениеСтр); + + ЗначенияИзмерений = ЗначенияИзмерений + " + | &ПустоеЗначениеИзмерения"+ Измерение.Имя + " КАК " + Измерение.Имя + ","; + Запрос.УстановитьПараметр("ПустоеЗначениеИзмерения"+ Измерение.Имя, Измерение.Тип.ПривестиЗначение()); + + КонецЦикла; + Иначе + + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | &ЗначенияИзмерений + |ПОМЕСТИТЬ #ИмяВременнойТаблицы + |ИЗ + | #ТаблицаИзменения КАК ТаблицаИзменений + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ #ТаблицаРегистра КАК ТаблицаРегистра + | ПО ТаблицаИзменений.Регистратор = ТаблицаРегистра.Регистратор + |ГДЕ + | &УсловиеОтбораУзла"; + + ЗначенияИзмерений = ""; + Для Каждого Измерение Из ИзмеренияМассив Цикл + + ЗначенияИзмерений = ЗначенияИзмерений + " + | ТаблицаРегистра." + Измерение + " КАК " + Измерение + ","; + + КонецЦикла; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаИзменения", ПолноеИмяРегистра + ".Изменения"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаРегистра", ПолноеИмяРегистра); + + Если Очередь = Неопределено Тогда + УсловиеОтбораУзла = " ТаблицаИзменений.Узел ССЫЛКА ПланОбмена.ОбновлениеИнформационнойБазы "; + Иначе + УсловиеОтбораУзла = " ТаблицаИзменений.Узел В (&Узлы) "; + Запрос.УстановитьПараметр("Узлы", УзлыМеньшейОчереди(Очередь)); + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеОтбораУзла", УсловиеОтбораУзла); + + + КонецЕсли; + + ИмяОбъекта = СтрРазделить(ПолноеИмяРегистра, ".")[1]; + Если ПустаяСтрока(ДополнительныеПараметры.ИмяВременнойТаблицы) Тогда + ИмяВременнойТаблицы = "ВТЗаблокировано" + ИмяОбъекта; + Иначе + ИмяВременнойТаблицы = ДополнительныеПараметры.ИмяВременнойТаблицы; + КонецЕсли; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ИмяВременнойТаблицы", ИмяВременнойТаблицы); + + ЗначенияИзмерений = Лев(ЗначенияИзмерений, СтрДлина(ЗначенияИзмерений) - 1); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ЗначенияИзмерений", ЗначенияИзмерений); + Запрос.Текст = ТекстЗапроса; + РезультатЗапроса = Запрос.Выполнить(); + + Результат = Новый Структура("ЕстьЗаписиВоВременнойТаблице,ИмяВременнойТаблицы", Ложь, ""); + Результат.ИмяВременнойТаблицы = ИмяВременнойТаблицы; + Результат.ЕстьЗаписиВоВременнойТаблице = РезультатЗапроса.Выгрузить()[0].Количество <> 0; + + Возврат Результат; + +КонецФункции + +// Функция для проверки объектов при открытии форм и перед записью. Может использоваться как функция проверки по умолчанию, если +// достаточно логики - заблокированные объекты зарегистрированы на узлах плана обмена ОбновлениеИнформационнойБазы. +// Данные - ЛюбаяСсылка, НаборЗаписей, Объект, ДанныеФормыСтруктура - ссылка на объект, сам объект +// или набор записей, который необходимо проверить. +// МетаданныеИОтбор - Структура - см. ОбновлениеИнформационнойБазы.МетаданныеИОтборПоДанным. +// +Функция ДанныеОбновленыНаНовуюВерсиюПрограммы(МетаданныеИОтбор) Экспорт + + Возврат МожноЧитатьИМенять(Неопределено, МетаданныеИОтбор.Данные,,МетаданныеИОтбор); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Прочие процедуры и функции. + // Проверить необходимость обновления информационной базы при смене версии конфигурации. // // Возвращаемое значение: @@ -55,6 +2317,9 @@ // // * ОбщиеДанные - Булево - если Истина, то обработчик должен срабатывать до // выполнения любых обработчиков, использующих разделенные данные. +// Допустимо указывать только для обработчиков с режимом выполнения Монопольно и Оперативно. +// Если указать значение Истина для обработчика с режимом +// выполнения Отложенно, будет выдано исключение. // * УправлениеОбработчиками - Булево - если Истина, то обработчик должен иметь параметр типа структура, в котором // есть свойство. // РазделенныеОбработчики - таблица значений со структурой, возвращаемой этой @@ -94,6 +2359,20 @@ // * Идентификатор - УникальныйИдентификатор - необходимо заполнять для обработчиков отложенного обновления, // для остальных заполнение не требуется. Требуется для идентификации // обработчика в случае его переименования. +// * БлокируемыеОбъекты - Строка - необходимо заполнять для обработчиков отложенного обновления, +// для остальных заполнение не требуется. Полные имена объектов через запятую, +// которые следует блокировать от изменения до завершения процедуры обработки данных. +// * ПроцедураПроверки - Строка - необходимо заполнять для обработчиков отложенного обновления, +// для остальных заполнение не требуется. Имя функции, которая для переданного объекта +// определяет, завершена ли для него процедура обработки данных. +// Если переданный объект обработан, то следует вернуть значение Истина. +// Вызывается из процедуры ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан. +// Параметры, передаваемые в функцию: +// Параметры - Структура - см. ОбновлениеИнформационнойБазы.МетаданныеИОтборПоДанным. +// * ЗапускатьТолькоВГлавномУзле - Булево - только для обработчиков отложенного обновления с режимом выполнения Параллельно. +// Указать Истина, если обработчик обновления должен выполняться только в главном узле РИБ. +// * ЗапускатьИВПодчиненномУзлеРИБСФильтрами - Булево - только для обработчиков отложенного обновления с режимом выполнения Параллельно. +// Указать Истина, если обработчик обновления должен также выполняться в подчиненном узле РИБ с фильтрами. // Функция НоваяТаблицаОбработчиковОбновления() Экспорт @@ -113,6 +2392,14 @@ Обработчики.Колонки.Добавить("МонопольныйРежим"); // Для отложенных обработчиков обновления. Обработчики.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("УникальныйИдентификатор")); + Обработчики.Колонки.Добавить("ПроцедураПроверки", Новый ОписаниеТипов("Строка")); + Обработчики.Колонки.Добавить("БлокируемыеОбъекты", Новый ОписаниеТипов("Строка")); + Обработчики.Колонки.Добавить("ЗапускатьТолькоВГлавномУзле", Новый ОписаниеТипов("Булево")); + Обработчики.Колонки.Добавить("ЗапускатьИВПодчиненномУзлеРИБСФильтрами", Новый ОписаниеТипов("Булево")); + + // Для поддержки параллельного отложенного обновления. + Обработчики.Колонки.Добавить("ПроцедураЗаполненияДанныхОбновления", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(0))); + Обработчики.Колонки.Добавить("ОчередьОтложеннойОбработки", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(4))); // Устарело. Обратная совместимость до редакции "2.2". Обработчики.Колонки.Добавить("Опциональный"); @@ -166,137 +2453,11 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для использования в обработчиках обновления. -// - -// Записывает изменения в переданном объекте. -// Для использования в обработчиках обновления. -// -// Параметры: -// Данные - Произвольный - объект, набор записей или менеджер константы, который -// необходимо записать. -// РегистрироватьНаУзлахПлановОбмена - Булево - включает регистрацию на узлах планов обмена при записи объекта. -// ВключитьБизнесЛогику - Булево - включает бизнес-логику при записи объекта. -// -Процедура ЗаписатьДанные(Знач Данные, Знач РегистрироватьНаУзлахПлановОбмена = Ложь, - Знач ВключитьБизнесЛогику = Ложь) Экспорт - - Данные.ОбменДанными.Загрузка = Не ВключитьБизнесЛогику; - Если Не РегистрироватьНаУзлахПлановОбмена Тогда - Данные.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); - Данные.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; - КонецЕсли; - - Данные.Записать(); - -КонецПроцедуры - -// Записывает изменения в переданном объекте ссылочного типа. -// Для использования в обработчиках обновления. -// -// Параметры: -// Объект - Произвольный - записываемый объект ссылочного типа. Например, СправочникОбъект. -// РегистрироватьНаУзлахПлановОбмена - Булево - включает регистрацию на узлах планов обмена при записи объекта. -// ВключитьБизнесЛогику - Булево - включает бизнес-логику при записи объекта. -// -Процедура ЗаписатьОбъект(Знач Объект, Знач РегистрироватьНаУзлахПлановОбмена = Неопределено, - Знач ВключитьБизнесЛогику = Ложь) Экспорт - - Если РегистрироватьНаУзлахПлановОбмена = Неопределено Тогда - РегистрироватьНаУзлахПлановОбмена = Объект.ЭтоНовый(); - КонецЕсли; - - Объект.ОбменДанными.Загрузка = Не ВключитьБизнесЛогику; - Если Не РегистрироватьНаУзлахПлановОбмена Тогда - Объект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); - Объект.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; - КонецЕсли; - - Объект.Записать(); - -КонецПроцедуры - -// Записывает изменения в переданном наборе записей. -// Для использования в обработчиках обновления. -// -// Параметры: -// НаборЗаписей - РегистрСведенийНаборЗаписей, -// РегистрНакопленияНаборЗаписей, -// РегистрБухгалтерииНаборЗаписей, -// РегистрРасчетаНаборЗаписей - набор записей, который необходимо записать. -// Замещать - Булево - Определяет режим замещения существующей записи в соответствии с текущими установками отбора. Истина - перед записью существующие записи будут удалены. Ложь - записи будут дописаны к уже существующим в информационной базе записям. -// РегистрироватьНаУзлахПлановОбмена - Булево - включает регистрацию на узлах планов обмена при записи объекта. -// ВключитьБизнесЛогику - Булево - включает бизнес-логику при записи объекта. -// -Процедура ЗаписатьНаборЗаписей(Знач НаборЗаписей, Замещать = Истина, Знач РегистрироватьНаУзлахПлановОбмена = Ложь, - Знач ВключитьБизнесЛогику = Ложь) Экспорт - - НаборЗаписей.ОбменДанными.Загрузка = Не ВключитьБизнесЛогику; - Если Не РегистрироватьНаУзлахПлановОбмена Тогда - НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); - НаборЗаписей.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; - КонецЕсли; - - НаборЗаписей.Записать(Замещать); - -КонецПроцедуры - -// Удаляет переданный объект. -// Для использования в обработчиках обновления. -// -// Параметры: -// Данные - Произвольный - объект, который необходимо удалить. -// РегистрироватьНаУзлахПлановОбмена - Булево - включает регистрацию на узлах планов обмена при записи объекта. -// ВключитьБизнесЛогику - Булево - включает бизнес-логику при записи объекта. -// -Процедура УдалитьДанные(Знач Данные, Знач РегистрироватьНаУзлахПлановОбмена = Ложь, - Знач ВключитьБизнесЛогику = Ложь) Экспорт - - Данные.ОбменДанными.Загрузка = Не ВключитьБизнесЛогику; - Если Не РегистрироватьНаУзлахПлановОбмена Тогда - Данные.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); - Данные.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; - КонецЕсли; - - Данные.Удалить(); - -КонецПроцедуры - -// Возвращает строковую константу для формирования сообщений журнала регистрации. -// -// Возвращаемое значение: -// Строка -// -Функция СобытиеЖурналаРегистрации() Экспорт - - Возврат ОбновлениеИнформационнойБазыСлужебный.СобытиеЖурналаРегистрации(); - -КонецФункции - -// Получить версию конфигурации или родительской конфигурации (библиотеки), -// которая хранится в информационной базе. -// -// Параметры: -// ИдентификаторБиблиотеки - Строка - имя конфигурации или идентификатор библиотеки. -// -// Возвращаемое значение: -// Строка - версия. -// -// Пример использования: -// ВерсияКонфигурацииИБ = ВерсияИБ(Метаданные.Имя); -// -Функция ВерсияИБ(Знач ИдентификаторБиблиотеки) Экспорт - - Возврат ОбновлениеИнформационнойБазыСлужебный.ВерсияИБ(ИдентификаторБиблиотеки); - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Прочие процедуры и функции. -// - -// Удаляет отложенный обработчики из очереди выполняемых обработчиков на новую версию. +// Удаляет отложенный обработчик из очереди выполняемых обработчиков на новую версию. +// Следует использовать, например, при переводе отложенного обработчика +// на монопольный (оперативный) режим выполнения. +// Для этого необходимо добавить новый разделенный обработчик обновления с режимом выполнения +// "Оперативно" и признаком "ОбщиеДанные = Ложь", после чего разместить в нем вызов данного метода. // // Параметры: // ИмяОбработчика - Строка - полное имя процедуры отложенного обработчика. @@ -314,6 +2475,14 @@ КонецЕсли; + Для Каждого ШагОбновления Из СведенияОбОбновлении.ПланОтложенногоОбновления Цикл + ОбработчикиШага = ШагОбновления.Обработчики; + НайденныйОбработчик = ОбработчикиШага.Найти(ИмяОбработчика); + Если НайденныйОбработчик <> Неопределено Тогда + ОбработчикиШага.Удалить(НайденныйОбработчик); + КонецЕсли; + КонецЦикла; + ОбновлениеИнформационнойБазыСлужебный.ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); КонецПроцедуры @@ -365,3 +2534,409 @@ #КонецОбласти +#Область СлужебныеПроцедурыИФункции + +Процедура ДобавитьПроверкуБлокировкиДополнительныхИсточников(Очередь, ТекстЗапроса, ПолноеИмяОбъекта, ПолноеИмяРегистра, МенеджерВременныхТаблиц, ЭтоСозданиеВременнойТаблицы, ДополнительныеПараметры) + + Если ДополнительныеПараметры.ДополнительныеИсточникиДанных.Количество() = 0 Тогда + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТекстЗапросаСоединениеСДопИсточникамиПоШапке", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТекстЗапросаСоединениеСДопИсточникамиПоТЧ", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеПоДопИсточникам", "ИСТИНА"); + + Иначе + Если ПолноеИмяОбъекта = Неопределено Тогда + ТекстИсключения = НСтр("ru = 'Ошибка вызова функции %ИмяФункции%: не передано имя документа, но переданы дополнительные источники данных.'"); + ТекстИсключения = СтрЗаменить(ТекстИсключения, "%ИмяФункции%", "ОбновлениеИнформационнойБазы.ДобавитьПроверкуБлокировкиДополнительныхИсточников"); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + + МетаданныеДокумента = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъекта); + ТекстЗапросаСоединениеСДопИсточникамиПоШапке = ""; + ТекстЗапросаСоединениеСДопИсточникамиПоТЧ = ""; + ТекстыЗапросаСоединениеСДопИсточникамиПоТЧ = Новый Соответствие; + УсловиеПоДопИсточникам = "ИСТИНА"; + + УсловиеПоДопИсточникамТЧ = "ЛОЖЬ"; + + ВременныеТаблицыЗаблокированныхДопИсточников = Новый Соответствие; + + Для Каждого КлючЗначение Из ДополнительныеПараметры.ДополнительныеИсточникиДанных Цикл + + ИсточникДанных = КлючЗначение.Ключ; + + Если СтрНайти(ИсточникДанных, ".") > 0 Тогда + ЧастиИмени = СтрРазделить(ИсточникДанных, "."); + ИмяТЧ = ЧастиИмени[0]; + ИмяРеквизита = ЧастиИмени[1]; + Иначе + ИмяТЧ = ""; + ИмяРеквизита = ИсточникДанных; + КонецЕсли; + + Если ЗначениеЗаполнено(ИмяТЧ) Тогда + ТипыИсточника = МетаданныеДокумента.ТабличныеЧасти[ИмяТЧ].Реквизиты[ИмяРеквизита].Тип.Типы(); + Иначе + ТипыИсточника = МетаданныеДокумента.Реквизиты[ИмяРеквизита].Тип.Типы(); + КонецЕсли; + + Для Каждого ТипИсточника Из ТипыИсточника Цикл + + Если ЭтоПримитивныйТип(ТипИсточника) Тогда + Продолжить; + КонецЕсли; + + Если ЗначениеЗаполнено(ИмяТЧ) + И СтрНайти(ТекстЗапросаСоединениеСДопИсточникамиПоТЧ, "КАК ТЧДокумента" + ИмяТЧ) = 0 Тогда + + Если ПолноеИмяРегистра <> Неопределено Тогда + + ТекстЗапросаСоединениеСДопИсточникамиПоТЧ = ТекстЗапросаСоединениеСДопИсточникамиПоТЧ + " + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ #ПолноеИмяДокумента." + ИмяТЧ + " КАК ТЧДокумента" + ИмяТЧ + " + |#ТекстЗапросаСоединениеСДопИсточникамиПоТЧ" + ИмяТЧ + " + | ПО ТаблицаРегистраИзменения.Регистратор = ТЧДокумента" + ИмяТЧ + ".Ссылка + |"; + + Иначе + + ТекстЗапросаСоединениеСДопИсточникамиПоТЧ = ТекстЗапросаСоединениеСДопИсточникамиПоТЧ + " + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ #ПолноеИмяДокумента." + ИмяТЧ + " КАК ТЧДокумента" + ИмяТЧ + " + |#ТекстЗапросаСоединениеСДопИсточникамиПоТЧ" + ИмяТЧ + " + | ПО ТаблицаИзменения.Ссылка = ТЧДокумента" + ИмяТЧ + ".Ссылка + |"; + + КонецЕсли; + КонецЕсли; + + МетаданныеИсточника = Метаданные.НайтиПоТипу(ТипИсточника); + + ИмяВТЗаблокированногоДопИсточника = ВременныеТаблицыЗаблокированныхДопИсточников.Получить(МетаданныеИсточника); + + Если ИмяВТЗаблокированногоДопИсточника = Неопределено Тогда + ПолноеИмяИсточника = МетаданныеИсточника.ПолноеИмя(); + ИмяВТЗаблокированногоДопИсточника = "ВТЗаблокировано" + СтрЗаменить(ПолноеИмяИсточника,".","_"); + + ДополнительныеПараметрыСозданияВТ = ДополнительныеПараметрыВыборкиДанныхДляОбработки(); + ДополнительныеПараметрыСозданияВТ.ИмяВременнойТаблицы = ИмяВТЗаблокированногоДопИсточника; + СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияДанных(Очередь, ПолноеИмяИсточника, МенеджерВременныхТаблиц, ДополнительныеПараметрыСозданияВТ); + + ВременныеТаблицыЗаблокированныхДопИсточников.Вставить(МетаданныеИсточника, ИмяВТЗаблокированногоДопИсточника); + + КонецЕсли; + + Если ЗначениеЗаполнено(ИмяТЧ) Тогда + + ТекстЗапросаСоединениеСДопИсточникамиПоТЧИмяТЧ = ТекстыЗапросаСоединениеСДопИсточникамиПоТЧ.Получить(ИмяТЧ); + + Если ТекстЗапросаСоединениеСДопИсточникамиПоТЧИмяТЧ = Неопределено Тогда + ТекстЗапросаСоединениеСДопИсточникамиПоТЧИмяТЧ = ""; + КонецЕсли; + + ТекстЗапросаСоединениеСДопИсточникамиПоТЧИмяТЧ = ТекстЗапросаСоединениеСДопИсточникамиПоТЧИмяТЧ + " + | ЛЕВОЕ СОЕДИНЕНИЕ #ИмяВТ КАК #СинонимВТ + | ПО ТЧДокумента" + ИмяТЧ + "." + ИмяРеквизита + " = #СинонимВТ.Ссылка"; + + ТекстЗапросаСоединениеСДопИсточникамиПоТЧИмяТЧ = СтрЗаменить(ТекстЗапросаСоединениеСДопИсточникамиПоТЧИмяТЧ, + "#ИмяВТ", + ИмяВТЗаблокированногоДопИсточника); + СинонимВТЗаблокированногоДопИсточника = ИмяВТЗаблокированногоДопИсточника + ИмяТЧ + ИмяРеквизита; + ТекстЗапросаСоединениеСДопИсточникамиПоТЧИмяТЧ = СтрЗаменить(ТекстЗапросаСоединениеСДопИсточникамиПоТЧИмяТЧ, + "#СинонимВТ", + СинонимВТЗаблокированногоДопИсточника); + ТекстыЗапросаСоединениеСДопИсточникамиПоТЧ.Вставить(ИмяТЧ, ТекстЗапросаСоединениеСДопИсточникамиПоТЧИмяТЧ); + + УсловиеПоДопИсточникамТЧ = УсловиеПоДопИсточникамТЧ + " + | ИЛИ НЕ " + СинонимВТЗаблокированногоДопИсточника + ".Ссылка ЕСТЬ NULL "; + Иначе + Если ПолноеИмяРегистра <> Неопределено Тогда + ТекстЗапросаСоединениеСДопИсточникамиПоШапке = ТекстЗапросаСоединениеСДопИсточникамиПоШапке + " + | ЛЕВОЕ СОЕДИНЕНИЕ #ИмяВТ КАК #СинонимВТ + | ПО ТаблицаДокумента." + ИмяРеквизита + " = #СинонимВТ.Ссылка"; + Иначе + ТекстЗапросаСоединениеСДопИсточникамиПоШапке = ТекстЗапросаСоединениеСДопИсточникамиПоШапке + " + | ЛЕВОЕ СОЕДИНЕНИЕ #ИмяВТ КАК #СинонимВТ + | ПО ТаблицаОбъекта." + ИмяРеквизита + " = #СинонимВТ.Ссылка"; + КонецЕсли; + ТекстЗапросаСоединениеСДопИсточникамиПоШапке = СтрЗаменить(ТекстЗапросаСоединениеСДопИсточникамиПоШапке, + "#ИмяВТ", + ИмяВТЗаблокированногоДопИсточника); + СинонимВТЗаблокированногоДопИсточника = ИмяВТЗаблокированногоДопИсточника + "Шапка"; + ТекстЗапросаСоединениеСДопИсточникамиПоШапке = СтрЗаменить(ТекстЗапросаСоединениеСДопИсточникамиПоШапке, + "#СинонимВТ", + СинонимВТЗаблокированногоДопИсточника); + + УсловиеПоДопИсточникам = УсловиеПоДопИсточникам + " + | И " + СинонимВТЗаблокированногоДопИсточника + ".Ссылка ЕСТЬ NULL "; + КонецЕсли; + КонецЦикла; + + КонецЦикла; + + Если Не ПустаяСтрока(ТекстЗапросаСоединениеСДопИсточникамиПоТЧ) Тогда + Для Каждого ТекстСоединения Из ТекстыЗапросаСоединениеСДопИсточникамиПоТЧ Цикл + + ТекстЗапросаСоединениеСДопИсточникамиПоТЧ = СтрЗаменить(ТекстЗапросаСоединениеСДопИсточникамиПоТЧ, + "#ТекстЗапросаСоединениеСДопИсточникамиПоТЧ" + ТекстСоединения.Ключ, + ТекстСоединения.Значение); + + КонецЦикла; + + Если ПолноеИмяРегистра <> Неопределено Тогда + ТекстЗапросаВременнойТаблицыЗаблокированныхПоТЧ = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ТаблицаРегистраИзменения.Регистратор КАК Ссылка + |ПОМЕСТИТЬ ЗаблокированныеПоТЧ + |ИЗ + | #ТаблицаИзменения КАК ТаблицаРегистраИзменения + | #ТекстЗапросаСоединениеСДопИсточникамиПоТЧ + |ГДЕ + | &УсловиеПоДопИсточникамТЧ"; + Иначе + ТекстЗапросаВременнойТаблицыЗаблокированныхПоТЧ = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ТаблицаИзменения.Ссылка КАК Ссылка + |ПОМЕСТИТЬ ЗаблокированныеПоТЧ + |ИЗ + | #ТаблицаИзменения КАК ТаблицаИзменения + | #ТекстЗапросаСоединениеСДопИсточникамиПоТЧ + |ГДЕ + | &УсловиеПоДопИсточникамТЧ"; + КонецЕсли; + + ТекстЗапросаВременнойТаблицыЗаблокированныхПоТЧ = СтрЗаменить(ТекстЗапросаВременнойТаблицыЗаблокированныхПоТЧ, + "#ТекстЗапросаСоединениеСДопИсточникамиПоТЧ", + ТекстЗапросаСоединениеСДопИсточникамиПоТЧ); + + ТекстЗапросаВременнойТаблицыЗаблокированныхПоТЧ = СтрЗаменить(ТекстЗапросаВременнойТаблицыЗаблокированныхПоТЧ, + "&УсловиеПоДопИсточникамТЧ", + УсловиеПоДопИсточникамТЧ); + Если ПолноеИмяРегистра <> Неопределено Тогда + ТекстЗапросаВременнойТаблицыЗаблокированныхПоТЧ = СтрЗаменить(ТекстЗапросаВременнойТаблицыЗаблокированныхПоТЧ, + "#ТаблицаИзменения", + ПолноеИмяРегистра + ".Изменения"); + Иначе + ТекстЗапросаВременнойТаблицыЗаблокированныхПоТЧ = СтрЗаменить(ТекстЗапросаВременнойТаблицыЗаблокированныхПоТЧ, + "#ТаблицаИзменения", + ПолноеИмяОбъекта + ".Изменения"); + КонецЕсли; + + ТекстЗапросаВременнойТаблицыЗаблокированныхПоТЧ = СтрЗаменить(ТекстЗапросаВременнойТаблицыЗаблокированныхПоТЧ, + "#ПолноеИмяДокумента", + ПолноеИмяОбъекта); + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапросаВременнойТаблицыЗаблокированныхПоТЧ; + Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + Запрос.Выполнить(); + + Если ПолноеИмяРегистра <> Неопределено Тогда + ТекстЗапросаСоединениеСДопИсточникамиПоТЧ = " + | ЛЕВОЕ СОЕДИНЕНИЕ ЗаблокированныеПоТЧ КАК ЗаблокированныеПоТЧ + | ПО ТаблицаРегистраИзменения.Регистратор = ЗаблокированныеПоТЧ.Ссылка + |"; + Иначе + ТекстЗапросаСоединениеСДопИсточникамиПоТЧ = " + | ЛЕВОЕ СОЕДИНЕНИЕ ЗаблокированныеПоТЧ КАК ЗаблокированныеПоТЧ + | ПО ТаблицаИзменения.Ссылка = ЗаблокированныеПоТЧ.Ссылка + |"; + КонецЕсли; + + УсловиеПоДопИсточникам = УсловиеПоДопИсточникам + " + | И ЗаблокированныеПоТЧ.Ссылка ЕСТЬ NULL "; + + ВременныеТаблицыЗаблокированныхДопИсточников.Вставить("ЗаблокированныеПоТЧ", "ЗаблокированныеПоТЧ"); + КонецЕсли; + + Если ЗначениеЗаполнено(ТекстЗапросаСоединениеСДопИсточникамиПоШапке) Тогда + Если ЭтоСозданиеВременнойТаблицы + И ПолноеИмяРегистра <> Неопределено Тогда + ТекстЗапросаСоединениеСДопИсточникамиПоШапке = СтрЗаменить(" + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ #ПолноеИмяДокумента КАК ТаблицаДокумента + | #ТекстЗапросаСоединениеСДопИсточникамиПоШапке + | ПО ТаблицаРегистраИзменения.Регистратор = ТаблицаДокумента.Ссылка", + "#ТекстЗапросаСоединениеСДопИсточникамиПоШапке", + ТекстЗапросаСоединениеСДопИсточникамиПоШапке); + КонецЕсли; + КонецЕсли; + + ШаблонТекстаЗапросаУничтоженияВременнойТаблицы = " + |УНИЧТОЖИТЬ + | #ИмяВТ + |"; + + ТекстыЗапроса = Новый Массив; + ТекстыЗапроса.Добавить(ТекстЗапроса); + + Для Каждого КлючЗначение Из ВременныеТаблицыЗаблокированныхДопИсточников Цикл + + ТекстЗапросаУничтоженияВременнойТаблицы = СтрЗаменить(ШаблонТекстаЗапросаУничтоженияВременнойТаблицы, "#ИмяВТ", КлючЗначение.Значение); + + ТекстыЗапроса.Добавить(ТекстЗапросаУничтоженияВременнойТаблицы); + + КонецЦикла; + + ТекстЗапроса = СтрСоединить(ТекстыЗапроса, ";"); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТекстЗапросаСоединениеСДопИсточникамиПоШапке", ТекстЗапросаСоединениеСДопИсточникамиПоШапке); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТекстЗапросаСоединениеСДопИсточникамиПоТЧ", ТекстЗапросаСоединениеСДопИсточникамиПоТЧ); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеПоДопИсточникам", УсловиеПоДопИсточникам); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПолноеИмяДокумента", ПолноеИмяОбъекта); + + КонецЕсли; +КонецПроцедуры + +Функция ЭтоПримитивныйТип(ПроверяемыйТип) + + Если ПроверяемыйТип = Тип("Неопределено") + Или ПроверяемыйТип = Тип("Булево") + Или ПроверяемыйТип = Тип("Строка") + Или ПроверяемыйТип = Тип("Число") + Или ПроверяемыйТип = Тип("Дата") + Или ПроверяемыйТип = Тип("УникальныйИдентификатор") Тогда + + Возврат Истина; + + Иначе + + Возврат Ложь; + + КонецЕсли; + +КонецФункции + +Процедура ДобавитьПроверкуБлокировкиДополнительныхИсточниковДляНезависимогоРегистра(Очередь, ТекстЗапроса, ПолноеИмяРегистра, МенеджерВременныхТаблиц, ДополнительныеПараметры) + + Если ДополнительныеПараметры.ДополнительныеИсточникиДанных.Количество() = 0 Тогда + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТекстЗапросаСоединениеСДопИсточниками", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеПоДопИсточникам", "ИСТИНА"); + + Иначе + + МетаданныеРегистра = Метаданные.НайтиПоПолномуИмени(ПолноеИмяРегистра); + ТекстЗапросаСоединениеСДопИсточниками = ""; + УсловиеПоДопИсточникам = "ИСТИНА"; + + ШаблонТекстаЗапросаУничтоженияВременнойТаблицы = " + |УНИЧТОЖИТЬ + | #ИмяВТ + |"; + + ТекстыЗапроса = Новый Массив; + ТекстыЗапроса.Добавить(ТекстЗапроса); + + Для Каждого КлючЗначение Из ДополнительныеПараметры.ДополнительныеИсточникиДанных Цикл + + ИсточникДанных = КлючЗначение.Ключ; + + ТипыИсточника = МетаданныеРегистра.Измерения[ИсточникДанных].Тип.Типы(); + МассивОбъектовМетаданных = Новый Массив; + + Для Каждого ТипИсточника Из ТипыИсточника Цикл + + Если ЭтоПримитивныйТип(ТипИсточника) Тогда + Продолжить; + КонецЕсли; + + МассивОбъектовМетаданных.Добавить(Метаданные.НайтиПоТипу(ТипИсточника)); + + КонецЦикла; + + ДополнительныеПараметрыСозданияВТ = ДополнительныеПараметрыВыборкиДанныхДляОбработки(); + ИмяВременнойТаблицы = "ВТЗаблокировано" + ИсточникДанных; + ДополнительныеПараметрыСозданияВТ.ИмяВременнойТаблицы = ИмяВременнойТаблицы; + + СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияСсылок(Очередь, МассивОбъектовМетаданных, МенеджерВременныхТаблиц, ДополнительныеПараметрыСозданияВТ); + + ТекстЗапросаСоединениеСДопИсточниками = ТекстЗапросаСоединениеСДопИсточниками + " + | ЛЕВОЕ СОЕДИНЕНИЕ " + ИмяВременнойТаблицы + " КАК " + ИмяВременнойТаблицы + " + | ПО ТаблицаИзменений." + ИсточникДанных + " = " + ИмяВременнойТаблицы + ".Ссылка"; + + УсловиеПоДопИсточникам = УсловиеПоДопИсточникам + " + | И " + ИмяВременнойТаблицы + ".Ссылка ЕСТЬ NULL "; + + ТекстЗапросаУничтоженияВременнойТаблицы = СтрЗаменить(ШаблонТекстаЗапросаУничтоженияВременнойТаблицы, "#ИмяВТ", ИмяВременнойТаблицы); + ТекстыЗапроса.Добавить(ТекстЗапросаУничтоженияВременнойТаблицы); + + КонецЦикла; + + ТекстЗапроса = СтрСоединить(ТекстыЗапроса, ";"); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТекстЗапросаСоединениеСДопИсточниками", ТекстЗапросаСоединениеСДопИсточниками); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеПоДопИсточникам", УсловиеПоДопИсточникам); + + КонецЕсли; +КонецПроцедуры + +Процедура УстановитьНедостающиеОтборыВНаборе(Набор, МетаданныеНабора, УстанавливаемыеОтборы) + Для Каждого Измерение Из МетаданныеНабора.Измерения Цикл + + ЕстьОтборПоИзмерению = Ложь; + + Если ТипЗнч(УстанавливаемыеОтборы) = Тип("ТаблицаЗначений") Тогда + ЕстьОтборПоИзмерению = УстанавливаемыеОтборы.Колонки.Найти(Измерение.Имя) <> Неопределено; + Иначе //Отбор + ЕстьОтборПоИзмерению = УстанавливаемыеОтборы[Измерение.Имя].Использование; + КонецЕсли; + + Если Не ЕстьОтборПоИзмерению Тогда + ПустоеЗначение = Измерение.Тип.ПривестиЗначение(); + Набор.Отбор[Измерение.Имя].Установить(ПустоеЗначение); + КонецЕсли; + КонецЦикла; + + Если МетаданныеНабора.ОсновнойОтборПоПериоду Тогда + + Если ТипЗнч(УстанавливаемыеОтборы) = Тип("ТаблицаЗначений") Тогда + ЕстьОтборПоИзмерению = УстанавливаемыеОтборы.Колонки.Найти("Период") <> Неопределено; + Иначе //Отбор + ЕстьОтборПоИзмерению = УстанавливаемыеОтборы.Период.Использование; + КонецЕсли; + + Если Не ЕстьОтборПоИзмерению Тогда + ПустоеЗначение = '00010101'; + Набор.Отбор.Период.Установить(ПустоеЗначение); + КонецЕсли; + + КонецЕсли; +КонецПроцедуры + +Процедура ЗарегистрироватьИзменения(Параметры, Узел, Данные, ВидДанных, ПолноеИмяОбъекта = "") + + ПланыОбмена.ЗарегистрироватьИзменения(Узел, Данные); + + Если Параметры.Свойство("ДанныеОбработчика") Тогда + Если Не ЗначениеЗаполнено(ПолноеИмяОбъекта) Тогда + ПолноеИмя = Данные.Метаданные().ПолноеИмя(); + Иначе + ПолноеИмя = ПолноеИмяОбъекта; + КонецЕсли; + + ДанныеПоОбъекту = Параметры.ДанныеОбработчика[ПолноеИмя]; + Если ДанныеПоОбъекту = Неопределено Тогда + ДанныеПоОбъекту = Новый Структура; + ДанныеПоОбъекту.Вставить("Количество", 1); + ДанныеПоОбъекту.Вставить("Очередь", Параметры.Очередь); + Параметры.ДанныеОбработчика.Вставить(ПолноеИмя, ДанныеПоОбъекту); + Иначе + Параметры.ДанныеОбработчика[ПолноеИмя].Количество = ДанныеПоОбъекту.Количество + 1; + КонецЕсли; + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") + И СтандартныеПодсистемыПовтИсп.ИспользуетсяРИБ("СФильтром") + И Не Параметры.ПовторнаяРегистрация + И Не ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда + МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); + МодульОбменДаннымиСервер.ЗаписатьДанныеДляОбновленияВФайл(Параметры, Данные, ВидДанных, ПолноеИмяОбъекта); + КонецЕсли; + +КонецПроцедуры + +Функция УзлыМеньшейОчереди(Очередь) + Возврат ПланыОбмена.ОбновлениеИнформационнойБазы.УзлыМеньшейОчереди(Очередь); +КонецФункции + +Функция ОчередьСсылкой(Очередь) + Возврат ПланыОбмена.ОбновлениеИнформационнойБазы.УзелПоОчереди(Очередь); +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl index 068c51a2f..6a2c8cb45 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыБСП/Module.bsl @@ -28,7 +28,7 @@ Процедура ПриДобавленииПодсистемы(Описание) Экспорт Описание.Имя = "СтандартныеПодсистемы"; - Описание.Версия = "2.3.1.88"; + Описание.Версия = "2.3.2.195"; КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl index 9092208d0..c0b6acf3a 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl @@ -18,12 +18,11 @@ КонецПроцедуры -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -// См. описание параметра ПриЗапускеКлиентскогоПриложения в модуле. -// ОбновлениеИнформационнойБазыСлужебный в описании функции ВыполнитьОбновлениеИнформационнойБазы. +// Вызывается из модуля СтандартныеПодсистемыКлиент в блоке ПередНачаломРаботыСистемы. +// +// Параметры: +// Параметры - Структура - См. описание первого параметра +// функции ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОбновлениеИнформационнойБазы(). // Процедура ОбновитьИнформационнуюБазу(Параметры) Экспорт @@ -50,6 +49,31 @@ КонецПроцедуры +// Вызывается перед интерактивным началом работы пользователя с областью данных. +// Соответствует событию ПередНачаломРаботыСистемы модулей приложения. +// +Процедура ПередНачаломРаботыСистемы(Параметры) Экспорт + + ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Если Не ПараметрыКлиента.РазделениеВключено Или Не ПараметрыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда + ОбновлениеИнформационнойБазыКлиентПереопределяемый.ПриОпределенииВозможностиОбновления(ПараметрыКлиента.ВерсияДанныхОсновнойКонфигурации); + КонецЕсли; + + Если ПараметрыКлиента.Свойство("ИнформационнаяБазаЗаблокированаДляОбновления") Тогда + Параметры.Отказ = Истина; + Параметры.ИнтерактивнаяОбработка = Новый ОписаниеОповещения( + "ПоказатьПредупреждениеИПродолжить", + СтандартныеПодсистемыКлиент.ЭтотОбъект, + ПараметрыКлиента.ИнформационнаяБазаЗаблокированаДляОбновления); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + // Для процедуры ОбновитьИнформационнуюБазу. Процедура ЗакрытьФормуИндикацииХодаОбновленияЕслиОткрыта(Параметры) @@ -112,7 +136,6 @@ КонецПроцедуры - // Только для внутреннего использования. Продолжение процедуры ПроверитьСтатусОбработчиковОтложенногоОбновления. Процедура ИнтерактивнаяОбработкаПроверкиСтатусаОтложенногоОбновления(Параметры, Неопределен) Экспорт @@ -154,6 +177,10 @@ // Процедура ОповеститьОтложенныеОбработчикиНеВыполнены() Экспорт + Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда + Возврат; + КонецЕсли; + ПоказатьОповещениеПользователя( НСтр("ru = 'Работа в программе временно ограничена'"), НавигационнаяСсылкаОбработки(), @@ -187,27 +214,6 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем БСП. -// Вызывается перед интерактивным началом работы пользователя с областью данных. -// Соответствует событию ПередНачаломРаботыСистемы модулей приложения. -// -Процедура ПередНачаломРаботыСистемы(Параметры) Экспорт - - ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); - Если Не ПараметрыКлиента.РазделениеВключено Или Не ПараметрыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда - ОбновлениеИнформационнойБазыКлиентПереопределяемый.ПриОпределенииВозможностиОбновления(ПараметрыКлиента.ВерсияДанныхОсновнойКонфигурации); - КонецЕсли; - - Если ПараметрыКлиента.Свойство("ИнформационнаяБазаЗаблокированаДляОбновления") Тогда - Параметры.Отказ = Истина; - Параметры.ИнтерактивнаяОбработка = Новый ОписаниеОповещения( - "ПоказатьПредупреждениеИПродолжить", - СтандартныеПодсистемыКлиент.ЭтотОбъект, - ПараметрыКлиента.ИнформационнаяБазаЗаблокированаДляОбновления); - - КонецЕсли; - -КонецПроцедуры - // Вызывается при интерактивном начале работы пользователя с областью данных. // Соответствует событию ПриНачалеРаботыСистемы модулей приложения. // diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl index 27cec2c45..90d70fb0b 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебный/Module.bsl @@ -112,33 +112,42 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена"].Добавить( "ОбновлениеИнформационнойБазыСлужебный"); + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииИсключенийПоискаСсылок"].Добавить( + "ОбновлениеИнформационнойБазыСлужебный"); + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовИсключенийПланаОбмена"].Добавить( + "ОбновлениеИнформационнойБазыСлужебный"); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда СерверныеОбработчики[ "СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриПолученииСпискаШаблонов"].Добавить( "ОбновлениеИнформационнойБазыСлужебный"); КонецЕсли; - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовИсключенийПланаОбмена"].Добавить( - "ОбновлениеИнформационнойБазыСлужебный"); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ТекущиеДела") Тогда СерверныеОбработчики["СтандартныеПодсистемы.ТекущиеДела\ПриЗаполненииСпискаТекущихДел"].Добавить( "ОбновлениеИнформационнойБазыСлужебный"); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда + СерверныеОбработчики["СтандартныеПодсистемы.ВариантыОтчетов\ПриНастройкеВариантовОтчетов"].Добавить( + "ОбновлениеИнформационнойБазыСлужебный"); + КонецЕсли; + КонецПроцедуры // Инициализирует параметр сеанса ВыполняетсяОбновлениеИБ. // Процедура УстановкаПараметровСеанса(Знач ИмяПараметра, УстановленныеПараметры) Экспорт - Если ИмяПараметра <> "ВыполняетсяОбновлениеИБ" Тогда - Возврат; + Если ИмяПараметра = "ВыполняетсяОбновлениеИБ" Тогда + ПараметрыСеанса.ВыполняетсяОбновлениеИБ = ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы(); + УстановленныеПараметры.Добавить("ВыполняетсяОбновлениеИБ"); + ИначеЕсли ИмяПараметра = "ПараметрыОбработчикаОбновления" Тогда + ПараметрыСеанса.ПараметрыОбработчикаОбновления = Новый ФиксированнаяСтруктура(НовыеПараметрыОбработчикаОбновления()); + УстановленныеПараметры.Добавить("ПараметрыОбработчикаОбновления"); КонецЕсли; - ПараметрыСеанса.ВыполняетсяОбновлениеИБ = ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы(); - УстановленныеПараметры.Добавить("ВыполняетсяОбновлениеИБ"); - КонецПроцедуры // Проверить необходимость обновления неразделенных данных информационной базы @@ -294,7 +303,7 @@ НСтр("ru = 'Изменился номер версии конфигурации: с ""%1"" на ""%2"". |Будет выполнено обновление информационной базы.'"), ВерсияДанных, ВерсияМетаданных); - Иначе + Иначе Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Выполняется начальное заполнение данных до версии ""%1"".'"), ВерсияМетаданных); @@ -335,46 +344,58 @@ РазблокироватьИБ(БлокировкаИБ); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") + И ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда + МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); + МодульОбменДаннымиСервер.ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); + КонецЕсли; + ВызватьИсключение; КонецПопытки; Если ПараметрыОбновления.ВФоне Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю("ШагПрогресса=20/75"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю("ШагПрогресса=20/80"); КонецЕсли; - Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() - Или ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - СформироватьСписокОтложенныхОбработчиковОбновления(ИтерацииОбновления); - КонецЕсли; + Попытка + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() + Или ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + СформироватьСписокОтложенныхОбработчиковОбновления(ИтерацииОбновления); + КонецЕсли; + Исключение + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") + И ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда + МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); + МодульОбменДаннымиСервер.ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); + КонецЕсли; + + ВызватьИсключение; + КонецПопытки; Попытка Параметры = Новый Структура; - Параметры.Вставить("ХодВыполненияОбработчиков", КоличествоОбработчиковНаТекущуюВерсию(ИтерацииОбновления)); + Параметры.Вставить("ХодВыполненияОбработчиков", КоличествоОбработчиковНаТекущуюВерсию(ИтерацииОбновления, РежимВыполненияОтложенногоОбновления)); Параметры.Вставить("ОперативноеОбновление", ОперативноеОбновление); Параметры.Вставить("ВФоне", ПараметрыОбновления.ВФоне); // Выполняем все обработчики обновления для подсистем конфигурации. Для Каждого ИтерацияОбновления Из ИтерацииОбновления Цикл - ИтерацияОбновления.ВыполненныеОбработчики = ВыполнитьИтерациюОбновления(ИтерацияОбновления, Параметры); + ИтерацияОбновления.ВыполненныеОбработчики = ВыполнитьИтерациюОбновления(ИтерацияОбновления, Параметры); КонецЦикла; // Очистка списка новых подсистем. СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); СведенияОбОбновлении.НовыеПодсистемы = Новый Массив; + ЗаполнитьДанныеДляПараллельногоОтложенногоОбновления(СведенияОбОбновлении, Параметры); ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); - Если ПараметрыОбновления.ВФоне Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю("ШагПрогресса=95/5"); - КонецЕсли; - // Для файловой базы отложенные обработчики выполняются в основном цикле обновления. - Если РежимВыполненияОтложенногоОбновления <> Неопределено - И РежимВыполненияОтложенногоОбновления = "Монопольно" Тогда + Если РежимВыполненияОтложенногоОбновления = "Монопольно" Тогда ПараметрЗапускаКлиента = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ПараметрЗапуска"); Если СтрНайти(НРег(ПараметрЗапускаКлиента), НРег("ОтладкаОтложенногоОбновления")) = 0 Тогда - ВыполнитьОтложенноеОбновлениеСейчас(); + ВыполнитьОтложенноеОбновлениеСейчас(Параметры); КонецЕсли; КонецЕсли; @@ -385,6 +406,12 @@ РазблокироватьИБ(БлокировкаИБ); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") + И ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда + МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); + МодульОбменДаннымиСервер.ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском(); + КонецЕсли; + ВызватьИсключение; КонецПопытки; @@ -628,9 +655,25 @@ КонецФункции // Для внутреннего использования. -Функция ОбработчикиОбновленияВИнтервале(Знач ИсходнаяТаблицаОбработчиков, Знач ВерсияОт, - Знач ВерсияДо, Знач ПолучатьРазделенные = Ложь, Знач Отбор = "Монопольно") Экспорт +Функция ПараметрыОтбораОбработчиков() Экспорт + Результат = Новый Структура; + Результат.Вставить("ПолучатьРазделенные", Ложь); + Результат.Вставить("РежимОбновления", "Монопольно"); + Результат.Вставить("УчитыватьПервыйОбменВРИБ", Ложь); + Результат.Вставить("ПервыйОбменВРИБ", Ложь); + Возврат Результат; + +КонецФункции + +// Для внутреннего использования. +Функция ОбработчикиОбновленияВИнтервале(Знач ИсходнаяТаблицаОбработчиков, Знач ВерсияОт, Знач ВерсияДо, + Знач ПараметрыОтбораОбработчиков = Неопределено) Экспорт + + ПараметрыОтбора = ПараметрыОтбораОбработчиков; + Если ПараметрыОтбора = Неопределено Тогда + ПараметрыОтбора = ПараметрыОтбораОбработчиков(); + КонецЕсли; // Добавление номера в таблицу, для упорядочивания в порядке добавления. ВсеОбработчики = ИсходнаяТаблицаОбработчиков.Скопировать(); @@ -640,6 +683,58 @@ СтрокаОбработчика.НомерПоПорядку = Индекс + 1; КонецЦикла; + ОтметитьОбработчикиНовыхПодсистем(ВсеОбработчики); + + // Подготовка параметров + ВыбиратьРазделенныеОбработчики = Истина; + ВыбиратьНеразделенныеОбработчики = Истина; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Если ПараметрыОтбора.ПолучатьРазделенные Тогда + ВыбиратьНеразделенныеОбработчики = Ложь; + Иначе + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ВыбиратьНеразделенныеОбработчики = Ложь; + Иначе + ВыбиратьРазделенныеОбработчики = Ложь; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + // Формирование дерева обработчиков. + Схема = ПолучитьОбщийМакет("ПолучениеДереваОбработчиковОбновления"); + Схема.Параметры.Найти("ВыбиратьРазделенныеОбработчики").Значение = ВыбиратьРазделенныеОбработчики; + Схема.Параметры.Найти("ВыбиратьНеразделенныеОбработчики").Значение = ВыбиратьНеразделенныеОбработчики; + Схема.Параметры.Найти("ВерсияОт").Значение = ВерсияОт; + Схема.Параметры.Найти("ВерсияДо").Значение = ВерсияДо; + Схема.Параметры.Найти("ВесВерсииОт").Значение = ВесВерсии(Схема.Параметры.Найти("ВерсияОт").Значение); + Схема.Параметры.Найти("ВесВерсииДо").Значение = ВесВерсии(Схема.Параметры.Найти("ВерсияДо").Значение); + Схема.Параметры.Найти("ОперативноеОбновление").Значение = (ПараметрыОтбора.РежимОбновления = "Оперативно"); + Схема.Параметры.Найти("ОтложенноеОбновление").Значение = (ПараметрыОтбора.РежимОбновления = "Отложенно"); + Если ПараметрыОтбора.УчитыватьПервыйОбменВРИБ И Не СтандартныеПодсистемыПовтИсп.ИспользуетсяРИБ("СФильтром") Тогда + Схема.Параметры.Найти("ПервыйОбменВРИБ").Значение = ПараметрыОтбора.ПервыйОбменВРИБ; + КонецЕсли; + + Компоновщик = Новый КомпоновщикМакетаКомпоновкиДанных; + Макет = Компоновщик.Выполнить(Схема, Схема.НастройкиПоУмолчанию, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); + + ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; + ПроцессорКомпоновки.Инициализировать(Макет, Новый Структура("Обработчики", ВсеОбработчики), , Истина); + + ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; + ПроцессорВывода.УстановитьОбъект(Новый ДеревоЗначений); + + ВыполняемыеОбработчики = ПроцессорВывода.Вывести(ПроцессорКомпоновки); + + ВыполняемыеОбработчики.Колонки.Версия.Имя = "ВерсияРегистрации"; + ВыполняемыеОбработчики.Колонки.ГруппаВерсии.Имя = "Версия"; + + Возврат ВыполняемыеОбработчики; + +КонецФункции + +Процедура ОтметитьОбработчикиНовыхПодсистем(ВсеОбработчики) + // Список объектов новых подсистем. ОбъектыНовыхПодсистем = Новый Массив; Для Каждого ИмяПодсистемы Из СведенияОбОбновленииИнформационнойБазы().НовыеПодсистемы Цикл @@ -662,50 +757,7 @@ КонецЕсли; КонецЦикла; - // Подготовка параметров - ВыбиратьРазделенныеОбработчики = Истина; - ВыбиратьНеразделенныеОбработчики = Истина; - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Если ПолучатьРазделенные Тогда - ВыбиратьНеразделенныеОбработчики = Ложь; - Иначе - Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - ВыбиратьНеразделенныеОбработчики = Ложь; - Иначе - ВыбиратьРазделенныеОбработчики = Ложь; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - // Формирование дерева обработчиков. - Схема = ПолучитьОбщийМакет("ПолучениеДереваОбработчиковОбновления"); - Схема.Параметры.Найти("ВыбиратьРазделенныеОбработчики").Значение = ВыбиратьРазделенныеОбработчики; - Схема.Параметры.Найти("ВыбиратьНеразделенныеОбработчики").Значение = ВыбиратьНеразделенныеОбработчики; - Схема.Параметры.Найти("ВерсияОт").Значение = ВерсияОт; - Схема.Параметры.Найти("ВерсияДо").Значение = ВерсияДо; - Схема.Параметры.Найти("ВесВерсииОт").Значение = ВесВерсии(Схема.Параметры.Найти("ВерсияОт").Значение); - Схема.Параметры.Найти("ВесВерсииДо").Значение = ВесВерсии(Схема.Параметры.Найти("ВерсияДо").Значение); - Схема.Параметры.Найти("ОперативноеОбновление").Значение = (Отбор = "Оперативно"); - Схема.Параметры.Найти("ОтложенноеОбновление").Значение = (Отбор = "Отложенно"); - - Компоновщик = Новый КомпоновщикМакетаКомпоновкиДанных; - Макет = Компоновщик.Выполнить(Схема, Схема.НастройкиПоУмолчанию, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); - - ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; - ПроцессорКомпоновки.Инициализировать(Макет, Новый Структура("Обработчики", ВсеОбработчики), , Истина); - - ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; - ПроцессорВывода.УстановитьОбъект(Новый ДеревоЗначений); - - ВыполняемыеОбработчики = ПроцессорВывода.Вывести(ПроцессорКомпоновки); - - ВыполняемыеОбработчики.Колонки.Версия.Имя = "ВерсияРегистрации"; - ВыполняемыеОбработчики.Колонки.ГруппаВерсии.Имя = "Версия"; - - Возврат ВыполняемыеОбработчики; - -КонецФункции +КонецПроцедуры // Для внутреннего использования. // @@ -713,6 +765,42 @@ Возврат НЕ ПустаяСтрока(ВерсияМетаданных) И ВерсияДанных <> ВерсияМетаданных; КонецФункции +// Для внутреннего использования. +// +Функция ВыполненаРегистрацияОтложенныхОбработчиковОбновления() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат Истина; // В неразделенном режиме отложенное обновление не выполняется. + КонецЕсли; + + СтандартнаяОбработка = Истина; + Результат = ""; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ПриПроверкеРегистрацииОтложенныхОбработчиковОбновления(Результат, СтандартнаяОбработка); + КонецЕсли; + + Если Не СтандартнаяОбработка Тогда + Возврат Результат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВерсииПодсистем.ИмяПодсистемы + |ИЗ + | РегистрСведений.ВерсииПодсистем КАК ВерсииПодсистем + |ГДЕ + | ВерсииПодсистем.ВыполненаРегистрацияОтложенныхОбработчиков = ЛОЖЬ"; + + Результат = Запрос.Выполнить().Выгрузить(); + Возврат Результат.Количество() = 0; + +КонецФункции + // Возвращает Истина, если у пользователя не отключен показ описания изменений // системы после обновления и есть непоказанные изменения. // @@ -732,6 +820,11 @@ Возврат Ложь; КонецЕсли; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + Возврат Ложь; + КонецЕсли; + ВывестиОписаниеИзмененийДляАдминистратора = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбновлениеИБ", "ВывестиОписаниеИзмененийДляАдминистратора",,, ИмяПользователя()); Если ВывестиОписаниеИзмененийДляАдминистратора = Истина Тогда Возврат Истина; @@ -813,7 +906,7 @@ // Выполняет все процедуры отложенного обновления в цикле за один вызов. // -Процедура ВыполнитьОтложенноеОбновлениеСейчас() Экспорт +Процедура ВыполнитьОтложенноеОбновлениеСейчас(ПараметрыОбновления = Неопределено) Экспорт СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); @@ -833,7 +926,7 @@ ОбработчикиВыполнялись = Истина; Пока ОбработчикиВыполнялись Цикл - ОбработчикиВыполнялись = ВыполнитьОтложенныйОбработчикОбновления(СведенияОбОбновлении); + ОбработчикиВыполнялись = ВыполнитьОтложенныйОбработчикОбновления(СведенияОбОбновлении, ПараметрыОбновления); КонецЦикла; КонецПроцедуры @@ -859,6 +952,38 @@ КонецФункции +// Используется при тестировании. +Функция ТребуетсяПроверитьЛегальностьПолученияОбновления() Экспорт + + Если НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПроверкаЛегальностиПолученияОбновления") Тогда + Возврат Ложь; + КонецЕсли; + + Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда + Возврат Ложь; + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат Ложь; + КонецЕсли; + + Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда + Возврат Ложь; + КонецЕсли; + + ЛегальнаяВерсия = ""; + + Если РежимОбновленияДанныхВЛокальномРежимеРаботы() = "НачальноеЗаполнение" Тогда + ЛегальнаяВерсия = Метаданные.Версия; + Иначе + СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + ЛегальнаяВерсия = СведенияОбОбновлении.ЛегальнаяВерсия; + КонецЕсли; + + Возврат ЛегальнаяВерсия <> Метаданные.Версия; + +КонецФункции + // Возвращает текст причины блокировки, если требуется обновление ИБ и у текущего пользователя // для этого недостаточно прав, иначе возвращает пустую строку. // @@ -1022,6 +1147,40 @@ КонецПроцедуры +// Перезапускает отложенные обработчики, выполняющиеся только в главном узле +// при получении первого сообщения обмена. +// +Процедура ПриПолученииПервогоСообщенияОбменаРИБПослеОбновления() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); + СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + Если СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = Неопределено + И Не ИнформационнаяБазаФайловая Тогда + ОтключитьОтложенноеОбновление(); + ПараметрыОтбора = Новый Структура; + ПараметрыОтбора.Вставить("ИмяМетода", "ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенноеОбновление"); + ПараметрыОтбора.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + МассивФоновыхЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(ПараметрыОтбора); + Если МассивФоновыхЗаданий.Количество() = 1 Тогда + ФоновоеЗадание = МассивФоновыхЗаданий[0]; + ФоновоеЗадание.Отменить(); + КонецЕсли; + КонецЕсли; + + ИтерацииОбновления = ИтерацииОбновления(); + СформироватьСписокОтложенныхОбработчиковОбновления(ИтерацииОбновления, Истина); + + ПеререгистрироватьДанныеДляОтложенногоОбновления(); + Если ИнформационнаяБазаФайловая Тогда + ВыполнитьОтложенноеОбновлениеСейчас(); + Иначе + ЗапланироватьОтложенноеОбновление(); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в эту подсистемы. @@ -1037,9 +1196,48 @@ Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт Обработчики.Вставить("ВыполняетсяОбновлениеИБ", "ОбновлениеИнформационнойБазыСлужебный.УстановкаПараметровСеанса"); + Обработчики.Вставить("ПараметрыОбработчикаОбновления", "ОбновлениеИнформационнойБазыСлужебный.УстановкаПараметровСеанса"); КонецПроцедуры +// Объекты метаданных, содержимое которых не должно учитывается в бизнес-логике приложения. +// +// Описание: +// Для документа "Реализация товаров и услуг" настроены подсистемы "Версионирование объектов" и "Свойства". +// При этом документ может быть указан в других объектах метаданных - документах или регистрах. +// Часть ссылок имеют значение для бизнес-логики (например движения по регистрам) и должны выводиться пользователю. +// Другая часть ссылок - "техногенные" ссылки на документ из данных подсистем "Версионирование объектов" и "Свойства", +// должны скрываться от пользователя при поиске ссылок на объект. +// Например, при анализе мест использования или в подсистеме запрета редактирования ключевых реквизитов. +// Список таких "техногенных" объектов нужно перечислить в этой процедуре. +// +// Важно: +// Для избежания появления пустых "битых" ссылок рекомендуется предусмотреть процедуру очистки указанных объектов +// метаданных. +// Для измерений регистров сведений - с помощью установки флажка "Ведущее", +// тогда запись регистра сведений будет удалена вместе с удалением ссылки, указанной в измерении. +// Для других реквизитов указанных объектов - с помощью подписки на событие ПередУдалением всех типов объектов +// метаданных, которые могут быть записаны в реквизиты указанных объектов метаданных. +// В обработчике необходимо найти "техногенные" объекты, в реквизитах которых указана ссылка удаляемого объекта, +// и выбрать как именно очищать ссылку: очищать значение реквизита, удалять строку таблицы или удалять весь объект. +// +// Параметры: +// ИсключенияПоискаСсылок - Массив - Объекты метаданных или их реквизиты, содержимое которых не должно учитывается в +// бизнес-логике приложения. +// * ОбъектМетаданных - Объект метаданных или его реквизит. +// * Строка - Полное имя объекта метаданных или его реквизита. +// +// Примеры: +// ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.ВерсииОбъектов); +// ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.ВерсииОбъектов.Реквизиты.АвторВерсии); +// ИсключенияПоискаСсылок.Добавить("РегистрСведений.ВерсииОбъектов"); +// +Процедура ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок) Экспорт + + ИсключенияПоискаСсылок.Добавить(Метаданные.РегистрыСведений.ДанныеОбработанныеВЦентральномУзлеРИБ.ПолноеИмя()); + +КонецПроцедуры + // См. описание процедуры СтандартныеПодсистемыСервер.СобратьСтатистикуКонфигурации. Процедура СобратьСтатистикуКонфигурации() Экспорт @@ -1240,7 +1438,7 @@ ПараметрыОбработчика.Вставить("РазделенныеОбработчики", ОбязательныеРазделенныеОбработчики); КонецЕсли; - Если Обработчик.МонопольныйРежим = Истина Тогда + Если Обработчик.МонопольныйРежим = Истина Или Обработчик.РежимВыполнения = "Монопольно" Тогда Если Параметры.ОперативноеОбновление Тогда // Проверки выполняются в ВозможноОперативноеОбновление, а само обновление для таких // обработчиков выполняется только при неоперативном обновлении. @@ -1621,6 +1819,18 @@ РезультатЗапроса = Запрос.Выполнить().Выгрузить()[0]; ПредыдущееИмяКонфигурации = РезультатЗапроса.ИмяПодсистемы; ПредыдущаяВерсияКонфигурации = РезультатЗапроса.Версия; + + Отбор = Новый Структура; + Отбор.Вставить("ИмяБиблиотеки", ПредыдущееИмяКонфигурации); + СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + РезультатПоиска = СведенияОбОбновлении.ДеревоОбработчиков.Строки.НайтиСтроки(Отбор, Истина); + Для Каждого НайденнаяСтрока Из РезультатПоиска Цикл + НайденнаяСтрока.ИмяБиблиотеки = Метаданные.Имя; + КонецЦикла; + Если РезультатПоиска.Количество() > 0 Тогда + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + КонецЕсли; + Обработчики = ОбработчикиПереходаСДругойПрограммы(ПредыдущееИмяКонфигурации); // Выполняем все обработчики перехода. @@ -1822,13 +2032,14 @@ // Формирует дерево отложенных обработчиков и записывает его в константу СведенияОбОбновленииИБ. // -Процедура СформироватьСписокОтложенныхОбработчиковОбновления(ИтерацииОбновления) +Процедура СформироватьСписокОтложенныхОбработчиковОбновления(ИтерацииОбновления, ПервыйОбменВРИБ = Ложь) ПроверитьУникальностьИдентификаторовОтложенныхОбработчиков(ИтерацииОбновления); ДеревоОбработчиков = ВыполненныеОбработчикиПрошлыхВерсий(ИтерацииОбновления); СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + Константы.ОтложенноеОбновлениеЗавершеноУспешно.Установить(Ложь); // Устанавливаем начальные значения полей. СведенияОбОбновлении.Вставить("ВремяНачалаОбновления"); СведенияОбОбновлении.Вставить("ВремяОкончанияОбновления"); @@ -1842,20 +2053,34 @@ СведенияОбОбновлении.Вставить("ВыводитьОписаниеОбновлений", Ложь); СведенияОбОбновлении.Вставить("ПриостановленныеПроцедурыОбновления", Новый Массив); СведенияОбОбновлении.Вставить("ЗапущенныеПроцедурыОбновления", Новый Массив); - СведенияОбОбновлении.Вставить("ФорсироватьОтложенноеОбновление", Ложь); + СведенияОбОбновлении.Вставить("УправлениеОтложеннымОбновлением", Новый Структура); + СведенияОбОбновлении.Вставить("ОбрабатываемыеДанные", Новый Соответствие); ИмяБиблиотеки = ""; НомерВерсии = ""; + ТекстОшибок = ""; + + ОписанияБиблиотек = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем().ПоИменам; Для каждого ИтерацияОбновления Из ИтерацииОбновления Цикл + ПредыдущаяВерсия = ?(ПервыйОбменВРИБ, "1.0.0.0", ИтерацияОбновления.ПредыдущаяВерсия); ИмяБиблиотеки = ИтерацияОбновления.Подсистема; + РежимВыполненияОтложенныхОбработчиков = ОписанияБиблиотек[ИмяБиблиотеки].РежимВыполненияОтложенныхОбработчиков; + + Если РежимВыполненияОтложенныхОбработчиков <> "Параллельно" + И ПервыйОбменВРИБ Тогда + Продолжить; + КонецЕсли; + + ПараметрыОтбора = ПараметрыОтбораОбработчиков(); + ПараметрыОтбора.ПолучатьРазделенные = Истина; + ПараметрыОтбора.РежимОбновления = "Отложенно"; + ПараметрыОтбора.УчитыватьПервыйОбменВРИБ = (РежимВыполненияОтложенныхОбработчиков = "Параллельно"); + ПараметрыОтбора.ПервыйОбменВРИБ = ПервыйОбменВРИБ; + ОбработчикиПоВерсиям = ОбработчикиОбновленияВИнтервале(ИтерацияОбновления.Обработчики, - ИтерацияОбновления.ПредыдущаяВерсия, - ИтерацияОбновления.Версия, - Истина, - "Отложенно"); - + ПредыдущаяВерсия, ИтерацияОбновления.Версия, ПараметрыОтбора); Если ОбработчикиПоВерсиям.Строки.Количество() = 0 Тогда Продолжить; КонецЕсли; @@ -1880,6 +2105,7 @@ Для Каждого НевыполненныйОбработчик Из НайденнаяСтрока.Строки Цикл ЕстьНевыполненныеОбработчики = Истина; НевыполненныйОбработчик.ЧислоПопыток = 0; + НевыполненныйОбработчик.СтатистикаВыполнения = Новый Соответствие; КонецЦикла; СтрокаДереваВерсии = НайденнаяСтрока; Иначе @@ -1888,55 +2114,118 @@ СтрокаДереваВерсии.Статус = ""; КонецЕсли; - Для Каждого СтрокаОбработчики Из СтрокаВерсия.Строки Цикл + Для Каждого Обработчик Из СтрокаВерсия.Строки Цикл + + ПроверитьСвойстваОтложенногоОбработчика(Обработчик, РежимВыполненияОтложенныхОбработчиков, ТекстОшибок); Если ЕстьНевыполненныеОбработчики Тогда - НайденнаяСтрока = СтрокаДереваВерсии.Строки.Найти(СтрокаОбработчики.Процедура, "ИмяОбработчика"); + НайденнаяСтрока = СтрокаДереваВерсии.Строки.Найти(Обработчик.Процедура, "ИмяОбработчика"); Если НайденнаяСтрока <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(НайденнаяСтрока, Обработчик); Продолжить; // Данный обработчик на эту версию уже существует. КонецЕсли; КонецЕсли; - Если СтрокаОбработчики.МонопольныйРежим = Истина Тогда - - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У отложенного обработчика ""%1"" - |не должен быть установлен признак ""МонопольныйРежим"".'"), - СтрокаОбработчики.Процедура); - ЗаписатьОшибку(ТекстОшибки); - ВызватьИсключение ТекстОшибки; - - КонецЕсли; - СтрокаДереваОбработчики = СтрокаДереваВерсии.Строки.Добавить(); + + ЗаполнитьЗначенияСвойств(СтрокаДереваОбработчики, Обработчик); СтрокаДереваОбработчики.ИмяБиблиотеки = ИмяБиблиотеки; - СтрокаДереваОбработчики.Идентификатор = СтрокаОбработчики.Идентификатор; - СтрокаДереваОбработчики.НомерВерсии = СтрокаОбработчики.Версия; - СтрокаДереваОбработчики.ВерсияРегистрации = СтрокаОбработчики.ВерсияРегистрации; - СтрокаДереваОбработчики.ИмяОбработчика = СтрокаОбработчики.Процедура; - СтрокаДереваОбработчики.Комментарий = СтрокаОбработчики.Комментарий; + СтрокаДереваОбработчики.НомерВерсии = Обработчик.Версия; + СтрокаДереваОбработчики.ИмяОбработчика = Обработчик.Процедура; СтрокаДереваОбработчики.Статус = "НеВыполнено"; СтрокаДереваОбработчики.ЧислоПопыток = 0; КонецЦикла; КонецЦикла; + СтрокаДереваБиблиотека.Строки.Сортировать("НомерВерсии Возр"); КонецЦикла; + Если Не ПустаяСтрока(ТекстОшибок) Тогда + ВызватьИсключение ТекстОшибок; + КонецЕсли; + + // Сортировка дерева обработчиков. + ПорядокБиблиотек = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем().Порядок; + Индекс = 0; + Для Каждого Библиотека Из ПорядокБиблиотек Цикл + НайденнаяСтрока = ДеревоОбработчиков.Строки.Найти(Библиотека, "ИмяБиблиотеки"); + Если НайденнаяСтрока <> Неопределено Тогда + ИндексСтроки = ДеревоОбработчиков.Строки.Индекс(НайденнаяСтрока); + Сдвиг = Индекс - ИндексСтроки; + Если Сдвиг <> 0 Тогда + ДеревоОбработчиков.Строки.Сдвинуть(НайденнаяСтрока, Сдвиг); + КонецЕсли; + Индекс = Индекс + 1 + КонецЕсли; + КонецЦикла; + СведенияОбОбновлении.ВерсияДереваОбработчиков = Метаданные.Версия; + ВыполнитьПроверкуДереваОтложенныхОбработчиков(ДеревоОбработчиков); СведенияОбОбновлении.ДеревоОбработчиков = ДеревоОбработчиков; + + СоставитьПланОтложенногоОбновления(СведенияОбОбновлении); ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); КонецПроцедуры +Процедура ПроверитьСвойстваОтложенногоОбработчика(Знач Обработчик, Знач РежимВыполненияОтложенныхОбработчиков, ТекстОшибок) + + Если РежимВыполненияОтложенныхОбработчиков = "Параллельно" + И Не ЗначениеЗаполнено(Обработчик.ПроцедураЗаполненияДанныхОбновления) Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не указана процедура заполнения данных + |отложенного обработчика обновления + |""%1"".'"), + Обработчик.Процедура); + + ЗаписатьОшибку(ТекстОшибки); + ТекстОшибок = ТекстОшибок + ТекстОшибки + Символы.ПС; + КонецЕсли; + + Если Обработчик.МонопольныйРежим = Истина Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У отложенного обработчика ""%1"" + |не должен быть установлен признак ""МонопольныйРежим"".'"), + Обработчик.Процедура); + ЗаписатьОшибку(ТекстОшибки); + ТекстОшибок = ТекстОшибок + ТекстОшибки + Символы.ПС; + КонецЕсли; + + Если РежимВыполненияОтложенныхОбработчиков = "Параллельно" И Обработчик.ЗапускатьТолькоВГлавномУзле + И Обработчик.ЗапускатьИВПодчиненномУзлеРИБСФильтрами Тогда + + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У отложенного обработчика ""%1"" + |некорректно заполнены значения свойств: + | - ""ЗапускатьТолькоВГлавномУзле"" + | - ""ЗапускатьИВПодчиненномУзлеРИБСФильтрами"". + | + |Данные свойства не могут одновременно принимать значение ""Истина"".'"), + Обработчик.Процедура); + ЗаписатьОшибку(ТекстОшибки); + ТекстОшибок = ТекстОшибок + ТекстОшибки + Символы.ПС; + КонецЕсли; + + Если Обработчик.ОбщиеДанные = Истина Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У отложенного обработчика ""%1"" + |указано недопустимое значение свойства ""ОбщиеДанные"". + | + |Данное свойство не может принимать значение ""Истина"" у отложенного обработчика.'"), + Обработчик.Процедура); + ЗаписатьОшибку(ТекстОшибки); + ТекстОшибок = ТекстОшибок + ТекстОшибки + Символы.ПС; + КонецЕсли; + +КонецПроцедуры + Процедура ПроверитьУникальностьИдентификаторовОтложенныхОбработчиков(ИтерацииОбновления) + ТаблицаПроверкиУникальности = Новый ТаблицаЗначений; + ТаблицаПроверкиУникальности.Колонки.Добавить("Идентификатор"); + ТаблицаПроверкиУникальности.Колонки.Добавить("Индекс"); + Для Каждого ИтерацияОбновления Из ИтерацииОбновления Цикл - ТаблицаПроверкиУникальности = Новый ТаблицаЗначений; - ТаблицаПроверкиУникальности.Колонки.Добавить("Идентификатор"); - ТаблицаПроверкиУникальности.Колонки.Добавить("Индекс"); - ПараметрыОтбора = Новый Структура; ПараметрыОтбора.Вставить("РежимВыполнения", "Отложенно"); ТаблицаОбработчиков = ИтерацияОбновления.Обработчики; @@ -1963,8 +2252,8 @@ КонецЕсли; ТаблицаПроверкиУникальности.Сортировать("Индекс Убыв"); - ТекстСообщения = НСтр("ru = 'Обнаружены неуникальные идентификаторы отложенных обработчиков: - |'"); + ТекстСообщения = НСтр("ru = 'Обнаружены отложенные обработчики обновления, + |у которых совпадают уникальные идентификаторы. Следующие идентификаторы не уникальны:'"); Для Каждого СтрокаИдентификатор Из ТаблицаПроверкиУникальности Цикл Если СтрокаИдентификатор.Индекс = 1 Тогда Прервать; @@ -2026,12 +2315,11 @@ МодульДатыЗапретаИзмененияСлужебный.ПропуститьПроверкуЗапретаИзменения(Истина); КонецЕсли; - ОбработчикиВыполнялись = Истина; Пока ОбработчикиВыполнялись Цикл ОбработчикиВыполнялись = ВыполнитьОтложенныйОбработчикОбновления(СведенияОбОбновлении); - Если СведенияОбОбновлении.ФорсироватьОтложенноеОбновление Тогда + Если СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Свойство("ФорсироватьОбновление") Тогда СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); Иначе Прервать; @@ -2044,38 +2332,6 @@ КонецПроцедуры -// Только для внутреннего использования. -Функция ТребуетсяПроверитьЛегальностьПолученияОбновления() Экспорт - - Если НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПроверкаЛегальностиПолученияОбновления") Тогда - Возврат Ложь; - КонецЕсли; - - Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда - Возврат Ложь; - КонецЕсли; - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Возврат Ложь; - КонецЕсли; - - Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда - Возврат Ложь; - КонецЕсли; - - ЛегальнаяВерсия = ""; - - Если РежимОбновленияДанныхВЛокальномРежимеРаботы() = "НачальноеЗаполнение" Тогда - ЛегальнаяВерсия = Метаданные.Версия; - Иначе - СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); - ЛегальнаяВерсия = СведенияОбОбновлении.ЛегальнаяВерсия; - КонецЕсли; - - Возврат ЛегальнаяВерсия <> Метаданные.Версия; - -КонецФункции - // Только для внутреннего использования. Процедура ЗаписатьПодтверждениеЛегальностиПолученияОбновлений() Экспорт @@ -2172,56 +2428,6 @@ КонецПроцедуры -// Используется для получения объектов метаданных обязательных для плана обмена. -// Если подсистема имеет объекты метаданных обязательные для включения в состав плана обмена, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты - Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. -// Истина - требуется получить список объектов плана обмена РИБ; -// Ложь - требуется получить список для плана обмена НЕ РИБ. -// -Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт - -КонецПроцедуры - -// Используется для получения объектов метаданных, которые должны входить в состав плана обмена -// и НЕ должны входить в состав подписок на события регистрации изменений для этого плана обмена. -// Эти объекты метаданных используются только в момент создания начального образа подчиненного узла -// и не мигрируют в процессе обмена. -// Если подсистема имеет объекты метаданных, которые участвуют только в создании начального образа подчиненного узла, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты - Массив. Массив объектов метаданных конфигурации. -// -Процедура ПриПолученииОбъектовНачальногоОбразаПланаОбмена(Объекты) Экспорт - - Объекты.Добавить(Метаданные.РегистрыСведений.ВерсииПодсистем); - -КонецПроцедуры - -// Используется для получения объектов метаданных, которые не следует включать в состав плана обмена. -// Если подсистема имеет объекты метаданных, которые не следует включать в состав плана обмена, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты - Массив. Массив объектов метаданных конфигурации, которые не следует включать в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. -// Истина - требуется получить список объектов-исключений плана обмена РИБ; -// Ложь - требуется получить список для плана обмена НЕ РИБ. -// -Процедура ПриПолученииОбъектовИсключенийПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт - - Если РаспределеннаяИнформационнаяБаза Тогда - - Объекты.Добавить(Метаданные.Константы.РазделыОписанияИзмененийСистемы); - - КонецЕсли; - -КонецПроцедуры - // Обработчик события ПриПолученииСпискаШаблонов. // // Формирует список шаблонов заданий очереди. @@ -2287,6 +2493,34 @@ КонецПроцедуры +// Содержит настройки размещения вариантов отчетов в панели отчетов. +// +// Параметры: +// Настройки - Коллекция - Содержит настройки всех отчетов и вариантов конфигурации. +// Используется для передачи в параметрах вспомогательных методов. +// +// Описание: +// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// +// Вспомогательные методы: +// 1. Функции ОписаниеОтчета и ОписаниеВарианта формируют описание настроек отчета и варианта для последующего изменения: +// НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.<ИмяОтчета>); +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// Возвращаемые коллекции содержат одинаковый набор свойств. +// НастройкиОтчета используются как умолчания для вариантов, описания которых еще не получены. +// Подробнее - см. "свойства для изменения" в комментарии к ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// 2. Процедура УстановитьРежимВыводаВПанеляхОтчетов позволяет настроить режим группировки вариантов в панелях отчетов: +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Отчеты.<ИмяОтчета>, Истина/Ложь); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Подсистемы.<ИмяПодсистемы>, Истина/Ложь); +// 3. Процедура НастроитьОтчетВМодулеМенеджера позволяет переопределять настройки отчета в его модуле менеджера: +// ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.<ИмяОтчета>); +// +Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ПрогрессОтложенногоОбновления); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в другие подсистемы. @@ -2333,6 +2567,56 @@ КонецПроцедуры +// Используется для получения объектов метаданных обязательных для плана обмена. +// Если подсистема имеет объекты метаданных обязательные для включения в состав плана обмена, +// то в параметр <Объект> необходимо добавить эти объекты метаданных. +// +// Параметры: +// Объекты - Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. +// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. +// Истина - требуется получить список объектов плана обмена РИБ; +// Ложь - требуется получить список для плана обмена НЕ РИБ. +// +Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт + +КонецПроцедуры + +// Используется для получения объектов метаданных, которые должны входить в состав плана обмена +// и НЕ должны входить в состав подписок на события регистрации изменений для этого плана обмена. +// Эти объекты метаданных используются только в момент создания начального образа подчиненного узла +// и не мигрируют в процессе обмена. +// Если подсистема имеет объекты метаданных, которые участвуют только в создании начального образа подчиненного узла, +// то в параметр <Объект> необходимо добавить эти объекты метаданных. +// +// Параметры: +// Объекты - Массив. Массив объектов метаданных конфигурации. +// +Процедура ПриПолученииОбъектовНачальногоОбразаПланаОбмена(Объекты) Экспорт + + Объекты.Добавить(Метаданные.РегистрыСведений.ВерсииПодсистем); + +КонецПроцедуры + +// Используется для получения объектов метаданных, которые не следует включать в состав плана обмена. +// Если подсистема имеет объекты метаданных, которые не следует включать в состав плана обмена, +// то в параметр <Объект> необходимо добавить эти объекты метаданных. +// +// Параметры: +// Объекты - Массив. Массив объектов метаданных конфигурации, которые не следует включать в состав плана обмена. +// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. +// Истина - требуется получить список объектов-исключений плана обмена РИБ; +// Ложь - требуется получить список для плана обмена НЕ РИБ. +// +Процедура ПриПолученииОбъектовИсключенийПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт + + Если РаспределеннаяИнформационнаяБаза Тогда + + Объекты.Добавить(Метаданные.Константы.РазделыОписанияИзмененийСистемы); + + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ ОБНОВЛЕНИЯ ИНФОРМАЦИОННОЙ БАЗЫ @@ -2519,7 +2803,15 @@ КонецФункции -Функция ВозможноОперативноеОбновление(ИтерацииОбновления) +Функция ВозможноОперативноеОбновление(ПроверяемыеИтерацииОбновления = Неопределено) Экспорт + + Если ПроверяемыеИтерацииОбновления = Неопределено Тогда + // Режим вызова для определения полного состава процедур обработчиков обновления, + // требующих монопольный режим (без записи сообщений в журнал регистрации). + ИтерацииОбновления = ИтерацииОбновления(); + Иначе + ИтерацииОбновления = ПроверяемыеИтерацииОбновления; + КонецЕсли; ФильтрыРазделенностиОбработчиков = Новый Массив; Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда @@ -2531,26 +2823,34 @@ ОбязательныеРазделенныеОбработчики = ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления(); ЗаписыватьВЖурнал = Константы.ДетализироватьОбновлениеИБВЖурналеРегистрации.Получить(); + ПроцедурыОбработчиков = Новый Массив; // Проверяем обработчики обновления с флагом МонопольныйРежим для подсистем конфигурации. Для каждого ИтерацияОбновления Из ИтерацииОбновления Цикл + ПараметрыОтбора = ПараметрыОтбораОбработчиков(); + ПараметрыОтбора.РежимОбновления = "Оперативно"; + Для каждого ФлагРазделенности Из ФильтрыРазделенностиОбработчиков Цикл - ДеревоОбработчиков = ОбработчикиОбновленияВИнтервале(ИтерацияОбновления.Обработчики, - ИтерацияОбновления.ПредыдущаяВерсия, - ИтерацияОбновления.Версия, - ФлагРазделенности, - "Оперативно"); - + ПараметрыОтбора.ПолучатьРазделенные = ФлагРазделенности; + + ДеревоОбработчиков = ОбработчикиОбновленияВИнтервале(ИтерацияОбновления.Обработчики, ИтерацияОбновления.ПредыдущаяВерсия, + ИтерацияОбновления.Версия, ПараметрыОтбора); Если ДеревоОбработчиков.Строки.Количество() = 0 Тогда Продолжить; КонецЕсли; Если ДеревоОбработчиков.Строки.Количество() > 1 ИЛИ ДеревоОбработчиков.Строки[0].Версия <> "*" Тогда - - Возврат Ложь; // Есть монопольные обработчики обновления на версию. + Для Каждого СтрокаВерсия Из ДеревоОбработчиков.Строки Цикл + Если СтрокаВерсия.Версия = "*" Тогда + Продолжить; + КонецЕсли; + Для Каждого Обработчик Из СтрокаВерсия.Строки Цикл + ПроцедурыОбработчиков.Добавить(Обработчик.Процедура); + КонецЦикла; + КонецЦикла; КонецЕсли; Если ФлагРазделенности @@ -2562,16 +2862,16 @@ Продолжить; КонецЕсли; - Если ДеревоОбработчиков.Строки[0].Строки.НайтиСтроки( - Новый Структура("МонопольныйРежим", Неопределено)).Количество() > 0 Тогда - - Возврат Ложь; // Есть обязательные обработчики с безусловным монопольным режимом. - КонецЕсли; + НайденныеОбработчики = ДеревоОбработчиков.Строки[0].Строки.НайтиСтроки(Новый Структура("МонопольныйРежим", Неопределено)); + Для Каждого Обработчик Из НайденныеОбработчики Цикл + ПроцедурыОбработчиков.Добавить(Обработчик.Процедура); + КонецЦикла; // Вызов обязательных обработчиков обновления в режиме проверки. Для каждого Обработчик Из ДеревоОбработчиков.Строки[0].Строки Цикл Если Обработчик.ВерсияРегистрации <> "*" Тогда - Возврат Ложь; // Есть монопольные обработчики обновления на версию. + ПроцедурыОбработчиков.Добавить(Обработчик.Процедура); + Продолжить; КонецЕсли; ПараметрыОбработчика = Новый Структура; @@ -2589,14 +2889,28 @@ ВыполнитьОбработчикОбновления(Обработчик, ПараметрыОбработчика, ДополнительныеПараметры); Если ПараметрыОбработчика.МонопольныйРежим = Истина Тогда - Возврат Ложь; // Требуется обновление в монопольном режиме. + ПроцедурыОбработчиков.Добавить(Обработчик.Процедура); КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; - Возврат Истина; + Если ПроверяемыеИтерацииОбновления = Неопределено Тогда + ПроверяемыеИтерацииОбновления = ПроцедурыОбработчиков; + Возврат ПроцедурыОбработчиков.Количество() = 0; + КонецЕсли; + + Если ПроцедурыОбработчиков.Количество() <> 0 Тогда + ТекстСообщения = НСтр("ru = 'Следующие обработчики не поддерживают обновление без установки монопольного режима:'"); + ТекстСообщения = ТекстСообщения + Символы.ПС; + Для Каждого ПроцедураОбработчика Из ПроцедурыОбработчиков Цикл + ТекстСообщения = ТекстСообщения + Символы.ПС + ПроцедураОбработчика; + КонецЦикла; + ЗаписатьОшибку(ТекстСообщения); + КонецЕсли; + + Возврат ПроцедурыОбработчиков.Количество() = 0; КонецФункции @@ -2967,9 +3281,11 @@ КонецПроцедуры -Функция КоличествоОбработчиковНаТекущуюВерсию(ИтерацииОбновления) +Функция КоличествоОбработчиковНаТекущуюВерсию(ИтерацииОбновления, РежимВыполненияОтложенногоОбновления) КоличествоОбработчиков = 0; + + // Монопольные обработчики обновления. Для Каждого ИтерацияОбновления Из ИтерацииОбновления Цикл ОбработчикиПоВерсиям = ОбработчикиОбновленияВИнтервале( @@ -2984,6 +3300,28 @@ Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, КоличествоОбработчиков); ЗаписатьИнформацию(Сообщение); + СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + // Отложенные обработчики обновления. + Если РежимВыполненияОтложенногоОбновления = "Монопольно" Тогда + ПланОтложенногоОбновления = СведенияОбОбновлении.ПланОтложенногоОбновления; + Для Каждого ЦиклОбновления Из ПланОтложенногоОбновления Цикл + КоличествоОбработчиков = КоличествоОбработчиков + ЦиклОбновления.Обработчики.Количество(); + КонецЦикла; + КонецЕсли; + + // Процедуры регистрации параллельных отложенных обработчиков обновления. + ОписанияБиблиотек = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем().ПоИменам; + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Для Каждого СтрокаБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл + Если ОписанияБиблиотек[СтрокаБиблиотека.ИмяБиблиотеки].РежимВыполненияОтложенныхОбработчиков <> "Параллельно" Тогда + Продолжить; + КонецЕсли; + Для Каждого СтрокаВерсия Из СтрокаБиблиотека.Строки Цикл + КоличествоОбработчиков = КоличествоОбработчиков + СтрокаВерсия.Строки.Количество(); + КонецЦикла; + КонецЦикла; + КонецЕсли; + Возврат Новый Структура("ВсегоОбработчиков, ВыполненоОбработчиков", КоличествоОбработчиков, 0); КонецФункции @@ -3212,11 +3550,6 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции отложенного обновления. - -// Только для внутреннего использования. -// Функция ВыполненныеОбработчикиПрошлыхВерсий(ИтерацииОбновления) СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); @@ -3244,6 +3577,11 @@ НевыполненныеОбработчики = СведенияОбОбновлении.ДеревоОбработчиков.Строки.НайтиСтроки(ПараметрыПоиска, Истина); ПроверитьОтложенныеОбработчики(НевыполненныеОбработчики, Библиотека, НеобходимоСохранитьНевыполненныеОбработчики); + // Поиск обработчиков со статусом "Выполняется". + ПараметрыПоиска.Статус = "Выполняется"; + ВыполняющиесяОбработчики = СведенияОбОбновлении.ДеревоОбработчиков.Строки.НайтиСтроки(ПараметрыПоиска, Истина); + ПроверитьОтложенныеОбработчики(ВыполняющиесяОбработчики, Библиотека, НеобходимоСохранитьНевыполненныеОбработчики); + Если НеобходимоСохранитьНевыполненныеОбработчики Тогда НеобходимоСохранитьНевыполненныеОбработчики = Ложь; Иначе @@ -3292,6 +3630,13 @@ Функция НеобходимоСохранитьНевыполненныйОтложенныйОбработчик(Библиотека, Обработчик) Если Обработчик.НомерВерсии <> "*" И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Библиотека.ПредыдущаяВерсия, Обработчик.НомерВерсии) >= 0 Тогда + + НайденныйОбработчик = Библиотека.Обработчики.Найти(Обработчик.ИмяОбработчика, "Процедура"); + Если НайденныйОбработчик = Неопределено Тогда + Возврат Истина; + КонецЕсли; + ЗаполнитьЗначенияСвойств(Обработчик, НайденныйОбработчик); + Обработчик.Статус = "НеВыполнено"; Обработчик.СтатистикаВыполнения.Очистить(); Обработчик.ИнформацияОбОшибке = ""; @@ -3310,11 +3655,9 @@ КонецЕсли; КонецПроцедуры -// Только для внутреннего использования. -// -Процедура ВыполнитьПроверкуДереваОтложенныхОбработчиков(ДеревоОбработчиков, ПроверятьСоставКолонок = Ложь) +Процедура ВыполнитьПроверкуДереваОтложенныхОбработчиков(ДеревоОбработчиков, НачальнаяПроверка = Ложь) - Если ПроверятьСоставКолонок Тогда + Если НачальнаяПроверка Тогда НовоеДеревоОбработчиков = НовыеСведенияОбОбработчикахОбновления(); Для Каждого Колонка Из НовоеДеревоОбработчиков.Колонки Цикл Если ДеревоОбработчиков.Колонки.Найти(Колонка.Имя) = Неопределено Тогда @@ -3322,6 +3665,20 @@ КонецЕсли; КонецЦикла; + УдаляемыеБиблиотеки = Новый Массив; + ОписанияПодсистем = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем().ПоИменам; + Для Каждого Библиотека Из ДеревоОбработчиков.Строки Цикл + БиблиотекаСуществует = (ОписанияПодсистем.Получить(Библиотека.ИмяБиблиотеки) <> Неопределено); + Если БиблиотекаСуществует Тогда + Продолжить; + КонецЕсли; + УдаляемыеБиблиотеки.Добавить(Библиотека); + КонецЦикла; + + Для Каждого УдаляемаяБиблиотека Из УдаляемыеБиблиотеки Цикл + ДеревоОбработчиков.Строки.Удалить(УдаляемаяБиблиотека); + КонецЦикла; + Возврат; КонецЕсли; @@ -3341,8 +3698,6 @@ КонецПроцедуры -// Только для внутреннего использования. -// Процедура ОтключитьОтложенноеОбновление() Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда @@ -3355,8 +3710,6 @@ КонецПроцедуры -// Только для внутреннего использования. -// Функция ВыполненыВсеОтложенныеОбработчики(СведенияОбОбновлении) ВыполненоОбработчиков = 0; @@ -3378,7 +3731,8 @@ СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления = ТекущаяДатаСеанса(); СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = Истина; ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); - + Константы.ОтложенноеОбновлениеЗавершеноУспешно.Установить(Истина); + Константы.ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно.Установить(Истина); Возврат Истина; Иначе Возврат Ложь; @@ -3386,232 +3740,146 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Вспомогательные процедуры и функции отложенного обновления. + // Только для внутреннего использования. // -Функция ВыполнитьОтложенныйОбработчикОбновления(СведенияОбОбновлении, ВыполнитьНеудачные = Ложь) +Функция ВыполнитьОтложенныйОбработчикОбновления(СведенияОбОбновлении, ПараметрыОбновления = Неопределено) - Для Каждого ПриостановленныйОбработчик Из СведенияОбОбновлении.ПриостановленныеПроцедурыОбновления Цикл - НайденныйОбработчик = СведенияОбОбновлении.ДеревоОбработчиков.Строки.Найти(ПриостановленныйОбработчик, "ИмяОбработчика", Истина); - Если НайденныйОбработчик <> Неопределено - И НайденныйОбработчик.Статус <> "Выполнено" Тогда - НайденныйОбработчик.Статус = "Приостановлен"; - КонецЕсли; - КонецЦикла; + ВключитьОтключитьОтложенныеОбработчикиОбновления(СведенияОбОбновлении); - Для Каждого ЗапущенныйОбработчик Из СведенияОбОбновлении.ЗапущенныеПроцедурыОбновления Цикл - НайденныйОбработчик = СведенияОбОбновлении.ДеревоОбработчиков.Строки.Найти(ЗапущенныйОбработчик, "ИмяОбработчика", Истина); - Если НайденныйОбработчик <> Неопределено Тогда - НайденныйОбработчик.Статус = "НеВыполнено"; - КонецЕсли; - КонецЦикла; + ПланОбновления = СведенияОбОбновлении.ПланОтложенногоОбновления; - Если СведенияОбОбновлении.ПриостановленныеПроцедурыОбновления.Количество() > 0 - Или СведенияОбОбновлении.ЗапущенныеПроцедурыОбновления.Количество() > 0 Тогда - СведенияОбОбновлении.ПриостановленныеПроцедурыОбновления.Очистить(); - СведенияОбОбновлении.ЗапущенныеПроцедурыОбновления.Очистить(); - ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); - КонецЕсли; - - // Инициализация параметров - ОбработчикиВыполнялись = Ложь; - ЕстьНеудачные = Ложь; - ЕстьПропущенныеОбработчики = Ложь; - ЗаписыватьВЖурнал = Константы.ДетализироватьОбновлениеИБВЖурналеРегистрации.Получить(); - - Для Каждого ДеревоОбработчиковБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл - - Если ДеревоОбработчиковБиблиотека.Статус = "Завершено" Тогда - Продолжить; - КонецЕсли; - - Для Каждого ДеревоОбработчиковВерсия Из ДеревоОбработчиковБиблиотека.Строки Цикл - - Если ДеревоОбработчиковВерсия.Статус = "Завершено" Тогда - Продолжить; - КонецЕсли; - - Для Каждого ОбработчикОбновления Из ДеревоОбработчиковВерсия.Строки Цикл - - Если ОбработчикОбновления.Статус = "Приостановлен" Тогда - ЕстьПропущенныеОбработчики = Истина; - Продолжить; - КонецЕсли; - - Если ОбработчикОбновления.Статус = "Выполнено" Тогда - Продолжить; - КонецЕсли; - - Если ОбработчикОбновления.ЧислоПопыток > 0 И Не ВыполнитьНеудачные Тогда - ЕстьНеудачные = Истина; - Продолжить; - КонецЕсли; - - Если ОбработчикОбновления.ЧислоПопыток >= 3 Тогда - ЕстьПропущенныеОбработчики = Истина; - Продолжить; - КонецЕсли; - - ТранзакцияАктивнаНаНачалоВыполнения = ТранзакцияАктивна(); - ОбработчикиВыполнялись = Истина; - ИмяОбработчика = ОбработчикОбновления.ИмяОбработчика; - Попытка - СообщениеОЗапущенномОбработчике = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выполняется процедура обновления ""%1"".'"), ИмяОбработчика); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), - УровеньЖурналаРегистрации.Информация,,, СообщениеОЗапущенномОбработчике); - - // Прогресс выполнения процедуры обработки данных. - ПрогрессВыполнения = Новый Структура; - ПрогрессВыполнения.Вставить("ВсегоОбъектов", 0); - ПрогрессВыполнения.Вставить("ОбработаноОбъектов", 0); - Если ОбработчикОбновления.СтатистикаВыполнения["ПрогрессВыполнения"] <> Неопределено - И ТипЗнч(ОбработчикОбновления.СтатистикаВыполнения["ПрогрессВыполнения"]) = Тип("Структура") Тогда - ЗаполнитьЗначенияСвойств(ПрогрессВыполнения, ОбработчикОбновления.СтатистикаВыполнения["ПрогрессВыполнения"]); - КонецЕсли; - - // Инициализация параметров обработчика. - Параметры = ОбработчикОбновления.СтатистикаВыполнения["ПараметрыОбработчика"]; - Если Параметры = Неопределено Тогда - Параметры = Новый Структура; - КонецЕсли; - Параметры.Вставить("ОбработкаЗавершена", Истина); - Параметры.Вставить("ПрогрессВыполнения", ПрогрессВыполнения); - - ПараметрыОбработчика = Новый Массив; - ПараметрыОбработчика.Добавить(Параметры); - - Если ЗаписыватьВЖурнал Тогда - ОписаниеОбработчика = ПодготовитьДетальнуюИнформациюОХодеОбновления(ОбработчикОбновления, Параметры, ОбработчикОбновления.ИмяБиблиотеки, Истина); - КонецЕсли; - - КоличествоЗапусковПроцедурыОбновления = ОбработчикОбновления.СтатистикаВыполнения["КоличествоЗапусков"]; - Если КоличествоЗапусковПроцедурыОбновления = Неопределено Тогда - КоличествоЗапусковПроцедурыОбновления = 0; - ИначеЕсли КоличествоЗапусковПроцедурыОбновления > 10000 Тогда // Защита от зацикливания. - ОбработчикОбновления.ЧислоПопыток = 3; - ТекстОшибки = НСтр("ru = 'Превышено допустимое количество запусков процедуры обновления. - |Выполнение прервано для предотвращения зацикливания механизма обработки данных.'"); - ВызватьИсключение ТекстОшибки; - КонецЕсли; - - // Запуск отложенного обработчика обновления. - ОбработчикОбновления.Статус = "Выполняется"; - Если ОбработчикОбновления.СтатистикаВыполнения["НачалоОбработкиДанных"] = Неопределено Тогда - ОбработчикОбновления.СтатистикаВыполнения.Вставить("НачалоОбработкиДанных", ТекущаяДатаСеанса()); - КонецЕсли; - НачалоОбработкиДанных = ТекущаяУниверсальнаяДатаВМиллисекундах(); - РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(ИмяОбработчика, ПараметрыОбработчика); - ЗавершениеОбработкиДанных = ТекущаяУниверсальнаяДатаВМиллисекундах(); - - // Если обработчик обновления передал параметры, их нужно сохранить. - ПереданныеПараметры = ПереданныеПараметрыОбработчикаОбновления(Параметры); - - Если Параметры.ОбработкаЗавершена Тогда - ОбработчикОбновления.Статус = "Выполнено"; - ОбработчикОбновления.СтатистикаВыполнения.Вставить("ЗавершениеОбработкиДанных", ТекущаяДатаСеанса()); - КонецЕсли; - - // Сохранение данных по процедуре обработки данных. - ОбработчикОбновления.СтатистикаВыполнения.Вставить("ПрогрессВыполнения", Параметры.ПрогрессВыполнения); - - КоличествоЗапусковПроцедурыОбновления = КоличествоЗапусковПроцедурыОбновления + 1; - ДлительностьВыполнения = ЗавершениеОбработкиДанных - НачалоОбработкиДанных; - Если ОбработчикОбновления.СтатистикаВыполнения["ДлительностьВыполнения"] <> Неопределено Тогда - ДлительностьВыполнения = ДлительностьВыполнения + ОбработчикОбновления.СтатистикаВыполнения["ДлительностьВыполнения"]; - КонецЕсли; - ОбработчикОбновления.СтатистикаВыполнения.Вставить("ДлительностьВыполнения", ДлительностьВыполнения); - ОбработчикОбновления.СтатистикаВыполнения.Вставить("КоличествоЗапусков", КоличествоЗапусковПроцедурыОбновления); - - Исключение - - Если ЗаписыватьВЖурнал Тогда - ЗаписатьДетальнуюИнформациюОХодеОбновления(ОписаниеОбработчика); - КонецЕсли; - - Пока ТранзакцияАктивна() Цикл - ОтменитьТранзакцию(); - КонецЦикла; - - ОбработчикОбновления.Статус = "Ошибка"; - ОбработчикОбновления.ЧислоПопыток = ОбработчикОбновления.ЧислоПопыток + 1; - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ОбработчикОбновления.ИнформацияОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписатьОшибку(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); - КонецПопытки; - - ОбработчикОбновления.СтатистикаВыполнения.Вставить("ПараметрыОбработчика", ПереданныеПараметры); - - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); - Иначе - НачатьТранзакцию(); - Попытка - Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Константа.СведенияОбОбновленииИБ"); - Блокировка.Заблокировать(); - - НовыеСведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); - СведенияОбОбновлении.ПриостановленныеПроцедурыОбновления = НовыеСведенияОбОбновлении.ПриостановленныеПроцедурыОбновления; - СведенияОбОбновлении.ЗапущенныеПроцедурыОбновления = НовыеСведенияОбОбновлении.ЗапущенныеПроцедурыОбновления; - СведенияОбОбновлении.ФорсироватьОтложенноеОбновление = НовыеСведенияОбОбновлении.ФорсироватьОтложенноеОбновление; - - ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - КонецЕсли; - - ПроверитьВложеннуюТранзакцию(ТранзакцияАктивнаНаНачалоВыполнения, ИмяОбработчика); - - Если ЗаписыватьВЖурнал Тогда - ЗаписатьДетальнуюИнформациюОХодеОбновления(ОписаниеОбработчика); - КонецЕсли; - - Прервать; - КонецЦикла; - - Если ЕстьНеудачные Или ОбработчикиВыполнялись Тогда - Прервать; - Иначе - - Если ЕстьПропущенныеОбработчики Тогда - ДеревоОбработчиковВерсия.Статус = "ЕстьПропущенныеОбработчики"; - Иначе - ДеревоОбработчиковВерсия.Статус = "Завершено"; - КонецЕсли; - - КонецЕсли; - - КонецЦикла; - - Если Не ОбработчикиВыполнялись И ЕстьНеудачные И Не ВыполнитьНеудачные Тогда - Возврат ВыполнитьОтложенныйОбработчикОбновления(СведенияОбОбновлении, Истина); - КонецЕсли; - - Если ЕстьНеудачные Или ОбработчикиВыполнялись Тогда + ТекущийЦиклОбновления = Неопределено; + ЗавершеноУспешно = Истина; + Для Каждого ОписаниеЦиклаОбновления Из ПланОбновления Цикл + Если ОписаниеЦиклаОбновления.Свойство("ЗавершеноСОшибками") + Или ОписаниеЦиклаОбновления.Свойство("ЕстьОстановленные") Тогда + ЗавершеноУспешно = Ложь; + ИначеЕсли ОписаниеЦиклаОбновления.Обработчики.Количество() <> 0 Тогда + ТекущийЦиклОбновления = ОписаниеЦиклаОбновления; + КоллекцияОбработчиков = ТекущийЦиклОбновления.Обработчики; + КоличествоОбработчиков = КоллекцияОбработчиков.Количество(); Прервать; - Иначе - - Если ЕстьПропущенныеОбработчики Тогда - ДеревоОбработчиковБиблиотека.Статус = "ЕстьПропущенныеОбработчики"; - Иначе - ДеревоОбработчиковБиблиотека.Статус = "Завершено"; - КонецЕсли; - КонецЕсли; - КонецЦикла; - Если Не ОбработчикиВыполнялись Тогда - + Если ТекущийЦиклОбновления = Неопределено Тогда СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления = ТекущаяДатаСеанса(); - СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = Не ЕстьПропущенныеОбработчики; + СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = ЗавершеноУспешно; ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); - + Константы.ОтложенноеОбновлениеЗавершеноУспешно.Установить(ЗавершеноУспешно); + Константы.ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно.Установить(ЗавершеноУспешно); + Возврат Ложь; КонецЕсли; - Возврат ОбработчикиВыполнялись; + + Индекс = 0; + Пока Истина Цикл + ИмяОбработчика = КоллекцияОбработчиков[Индекс]; + ОбработчикОбновления = СведенияОбОбновлении.ДеревоОбработчиков.Строки.Найти(ИмяОбработчика, "ИмяОбработчика", Истина); + Если ОбработчикОбновления.ЧислоПопыток >= 3 + Или ОбработчикОбновления.Статус = "Приостановлен" Тогда + Если КоличествоОбработчиков > 1 И Индекс + 1 < КоличествоОбработчиков Тогда + Индекс = Индекс + 1; + Иначе + // В текущем цикле обновления все доступные обработчики выполнены. + Причина = ?(ОбработчикОбновления.Статус = "Приостановлен", "ЕстьОстановленные", "ЗавершеноСОшибками"); + ТекущийЦиклОбновления.Вставить(Причина); + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + Возврат Истина; + КонецЕсли; + Иначе + Прервать; + КонецЕсли; + КонецЦикла; + + ПараллельныйРежим = СтрНайти(ТекущийЦиклОбновления.Режим, "Параллельно") > 0; + ПараметрыОбновления = ?(ПараметрыОбновления = Неопределено, Новый Структура, ПараметрыОбновления); + ПараметрыОбновления.Вставить("ПараллельныйРежим", ПараллельныйРежим); + Если ПараллельныйРежим Тогда + ПараметрыОбновления.Вставить("ОчередьОбработчиков", ТекущийЦиклОбновления.ОчередьОбработчиков); + КонецЕсли; + + УстановитьПараметрыОтложенногоОбработчикаОбновления(ОбработчикОбновления, Истина, ПараллельныйРежим); + ЗапуститьПроцедуруОбработкиДанных(ОбработчикОбновления, ПараметрыОбновления); + УстановитьПараметрыОтложенногоОбработчикаОбновления(Неопределено); + + Если ОбработчикОбновления.Статус = "Выполнено" Тогда + КоллекцияОбработчиков.Удалить(Индекс); + СведенияОБлокируемыхОбъектах = СведенияОБлокируемыхОбъектах(); + СведенияОбОбработчике = СведенияОБлокируемыхОбъектах.Обработчики[ОбработчикОбновления.ИмяОбработчика]; + Если СведенияОбОбработчике <> Неопределено Тогда + СведенияОбОбработчике.Выполнен = Истина; + ЗаписатьСведенияОБлокируемыхОбъектах(СведенияОБлокируемыхОбъектах); + КонецЕсли; + + // В параллельном режиме обработчик удаляется из очереди, чтобы можно было определить + // обработчики каких очередей еще не завершились. + Если ПараллельныйРежим Тогда + Строка = ТекущийЦиклОбновления.ОчередьОбработчиков.Найти(ОбработчикОбновления.ИмяОбработчика, "Обработчик"); + ТекущийЦиклОбновления.ОчередьОбработчиков.Удалить(Строка); + КонецЕсли; + ИначеЕсли (ОбработчикОбновления.Статус = "Выполняется" + И СтрНайти(ТекущийЦиклОбновления.Режим, "Параллельно") > 0) + Или ОбработчикОбновления.Статус = "Ошибка" Тогда + + // Если обработчик выполняется параллельно и у него стоит высокий приоритет, + // то он вызывается пять раз до перемещения в конец очереди. + ЗапускиСПриоритетом = Неопределено; + Если ОбработчикОбновления.Статус = "Выполняется" + И ОбработчикОбновления.Приоритет = "ЖелательноБыстрее" Тогда + ЗапускиСПриоритетом = ОбработчикОбновления.СтатистикаВыполнения["ЗапускиСПриоритетом"]; + ЗапускиСПриоритетом = ?(ЗапускиСПриоритетом = Неопределено, 1, ?(ЗапускиСПриоритетом = 4, 0, ЗапускиСПриоритетом + 1)); + ОбработчикОбновления.СтатистикаВыполнения.Вставить("ЗапускиСПриоритетом", ЗапускиСПриоритетом); + КонецЕсли; + + // При параллельном выполнении или ошибке обработчик перемещается в конец коллекции. + Если КоличествоОбработчиков > 1 + И Не (КоличествоОбработчиков = Индекс + 1) + И (ЗапускиСПриоритетом = Неопределено Или ЗапускиСПриоритетом = 0) Тогда + КоллекцияОбработчиков.Удалить(Индекс); + КоллекцияОбработчиков.Добавить(ИмяОбработчика); + КонецЕсли; + КонецЕсли; + + // В параллельном режиме обновление нужно останавливать, если обработчик не удалось выполнить, + // т.к. от данных, которые он обрабатывает, могут зависеть другие обработчики. + Если ПараллельныйРежим + И ОбработчикОбновления.Статус = "Ошибка" + И ОбработчикОбновления.ЧислоПопыток >= 3 Тогда + СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления = ТекущаяДатаСеанса(); + СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = Ложь; + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + Константы.ОтложенноеОбновлениеЗавершеноУспешно.Установить(Ложь); + Константы.ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно.Установить(Ложь); + Возврат Ложь; + КонецЕсли; + + СведенияОбОбновлении.ПланОтложенногоОбновления = ПланОбновления; + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + Иначе + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Константа.СведенияОбОбновленииИБ"); + Блокировка.Заблокировать(); + + НовыеСведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + СведенияОбОбновлении.УправлениеОтложеннымОбновлением = НовыеСведенияОбОбновлении.УправлениеОтложеннымОбновлением; + + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + КонецЕсли; + + Возврат Истина; КонецФункции @@ -3619,7 +3887,8 @@ ПереданныеПараметры = Новый Структура; Для Каждого Параметр Из Параметры Цикл Если Параметр.Ключ <> "ОбработкаЗавершена" - И Параметр.Ключ <> "ПрогрессВыполнения" Тогда + И Параметр.Ключ <> "ПрогрессВыполнения" + И Параметр.Ключ <> "Очередь" Тогда ПереданныеПараметры.Вставить(Параметр.Ключ, Параметр.Значение); КонецЕсли; КонецЦикла; @@ -3627,8 +3896,6 @@ Возврат ПереданныеПараметры; КонецФункции -// Только для внутреннего использования. -// Функция НовыеСведенияОбОбновлении(СтарыеСведения = Неопределено) СведенияОбОбновлении = Новый Структура; @@ -3645,10 +3912,9 @@ СведенияОбОбновлении.Вставить("ВыводитьОписаниеОбновлений", Ложь); СведенияОбОбновлении.Вставить("ЛегальнаяВерсия", ""); СведенияОбОбновлении.Вставить("НовыеПодсистемы", Новый Массив); - СведенияОбОбновлении.Вставить("ФорсироватьОтложенноеОбновление", Ложь); - СведенияОбОбновлении.Вставить("ПриостановленныеПроцедурыОбновления", Новый Массив); - СведенияОбОбновлении.Вставить("ЗапущенныеПроцедурыОбновления", Новый Массив); - + СведенияОбОбновлении.Вставить("УправлениеОтложеннымОбновлением", Новый Структура); + СведенияОбОбновлении.Вставить("ПланОтложенногоОбновления"); + СведенияОбОбновлении.Вставить("ОбрабатываемыеДанные", Новый Соответствие); Если ТипЗнч(СтарыеСведения) = Тип("Структура") Тогда ЗаполнитьЗначенияСвойств(СведенияОбОбновлении, СтарыеСведения); @@ -3658,8 +3924,6 @@ КонецФункции -// Только для внутреннего использования. -// Функция НовыеСведенияОбОбработчикахОбновления() ДеревоОбработчиков = Новый ДеревоЗначений; @@ -3673,6 +3937,13 @@ ДеревоОбработчиков.Колонки.Добавить("СтатистикаВыполнения", Новый ОписаниеТипов("Соответствие")); ДеревоОбработчиков.Колонки.Добавить("ИнформацияОбОшибке"); ДеревоОбработчиков.Колонки.Добавить("Комментарий"); + ДеревоОбработчиков.Колонки.Добавить("Приоритет"); + ДеревоОбработчиков.Колонки.Добавить("ПроцедураПроверки"); + ДеревоОбработчиков.Колонки.Добавить("БлокируемыеОбъекты"); + ДеревоОбработчиков.Колонки.Добавить("ПроцедураЗаполненияДанныхОбновления"); + ДеревоОбработчиков.Колонки.Добавить("ОчередьОтложеннойОбработки"); + ДеревоОбработчиков.Колонки.Добавить("ЗапускатьТолькоВГлавномУзле", Новый ОписаниеТипов("Булево")); + ДеревоОбработчиков.Колонки.Добавить("ЗапускатьИВПодчиненномУзлеРИБСФильтрами", Новый ОписаниеТипов("Булево")); Возврат ДеревоОбработчиков; @@ -3700,4 +3971,722 @@ КонецФункции -#КонецОбласти +// Получает сведения об обновлении информационной базы +// из константы "СведенияОбОбновленииИБ". +Функция СведенияОБлокируемыхОбъектах() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + Возврат НовыеСведенияОБлокируемыхОбъектах(); + КонецЕсли; + + СведенияОБлокируемыхОбъектах = Константы.СведенияОБлокируемыхОбъектах.Получить().Получить(); + Если ТипЗнч(СведенияОБлокируемыхОбъектах) <> Тип("Структура") Тогда + Возврат НовыеСведенияОБлокируемыхОбъектах(); + КонецЕсли; + + СведенияОБлокируемыхОбъектах = НовыеСведенияОБлокируемыхОбъектах(СведенияОБлокируемыхОбъектах); + Возврат СведенияОБлокируемыхОбъектах; + +КонецФункции + +Процедура ЗапуститьПроцедуруОбработкиДанных(ОбработчикОбновления, ПараметрыОбновления) + + ЗаписыватьВЖурнал = Константы.ДетализироватьОбновлениеИБВЖурналеРегистрации.Получить(); + ТранзакцияАктивнаНаНачалоВыполнения = ТранзакцияАктивна(); + ИмяОбработчика = ОбработчикОбновления.ИмяОбработчика; + Попытка + СообщениеОЗапущенномОбработчике = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выполняется процедура обновления ""%1"".'"), ИмяОбработчика); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Информация,,, СообщениеОЗапущенномОбработчике); + + // Прогресс выполнения процедуры обработки данных. + ПрогрессВыполнения = Новый Структура; + ПрогрессВыполнения.Вставить("ВсегоОбъектов", 0); + ПрогрессВыполнения.Вставить("ОбработаноОбъектов", 0); + Если ОбработчикОбновления.СтатистикаВыполнения["ПрогрессВыполнения"] <> Неопределено + И ТипЗнч(ОбработчикОбновления.СтатистикаВыполнения["ПрогрессВыполнения"]) = Тип("Структура") Тогда + ЗаполнитьЗначенияСвойств(ПрогрессВыполнения, ОбработчикОбновления.СтатистикаВыполнения["ПрогрессВыполнения"]); + КонецЕсли; + + // Инициализация параметров обработчика. + Параметры = ОбработчикОбновления.СтатистикаВыполнения["ПараметрыОбработчика"]; + Если Параметры = Неопределено Тогда + Параметры = Новый Структура; + КонецЕсли; + Если ПараметрыОбновления.ПараллельныйРежим Тогда + Параметры.Вставить("ОбработкаЗавершена", Неопределено); + Иначе + Параметры.Вставить("ОбработкаЗавершена", Истина); + КонецЕсли; + + Параметры.Вставить("ПрогрессВыполнения", ПрогрессВыполнения); + + Параметры.Вставить("Очередь", ОбработчикОбновления.ОчередьОтложеннойОбработки); + + ПараметрыОбработчика = Новый Массив; + ПараметрыОбработчика.Добавить(Параметры); + + Если ЗаписыватьВЖурнал Тогда + ОписаниеОбработчика = ПодготовитьДетальнуюИнформациюОХодеОбновления(ОбработчикОбновления, Параметры, ОбработчикОбновления.ИмяБиблиотеки, Истина); + КонецЕсли; + + КоличествоЗапусковПроцедурыОбновления = ОбработчикОбновления.СтатистикаВыполнения["КоличествоЗапусков"]; + Если КоличествоЗапусковПроцедурыОбновления = Неопределено Тогда + КоличествоЗапусковПроцедурыОбновления = 0; + ИначеЕсли КоличествоЗапусковПроцедурыОбновления > 10000 Тогда // Защита от зацикливания. + ОбработчикОбновления.ЧислоПопыток = 3; + ТекстОшибки = НСтр("ru = 'Превышено допустимое количество запусков процедуры обновления. + |Выполнение прервано для предотвращения зацикливания механизма обработки данных.'"); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + // Запуск отложенного обработчика обновления. + ОбработчикОбновления.Статус = "Выполняется"; + Если ОбработчикОбновления.СтатистикаВыполнения["НачалоОбработкиДанных"] = Неопределено Тогда + ОбработчикОбновления.СтатистикаВыполнения.Вставить("НачалоОбработкиДанных", ТекущаяДатаСеанса()); + КонецЕсли; + НачалоОбработкиДанных = ТекущаяУниверсальнаяДатаВМиллисекундах(); + РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(ИмяОбработчика, ПараметрыОбработчика); + ЗавершениеОбработкиДанных = ТекущаяУниверсальнаяДатаВМиллисекундах(); + + Если Параметры.ОбработкаЗавершена = Неопределено Тогда + ТекстОшибки = НСтр("ru = 'Обработчик обновления не инициализировал параметр ОбработкаЗавершена. + |Выполнение прервано из-за явной ошибки в коде обработчика.'"); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + Если Параметры.ОбработкаЗавершена Тогда + ОбработчикОбновления.Статус = "Выполнено"; + ОбработчикОбновления.Приоритет = "ВПлановомПорядке"; + ОбработчикОбновления.СтатистикаВыполнения.Вставить("ЗавершениеОбработкиДанных", ТекущаяДатаСеанса()); + + // Запись прогресса обновления. + Если ПараметрыОбновления.Свойство("ВФоне") + И ПараметрыОбновления.ВФоне Тогда + ХодВыполненияОбработчиков = ПараметрыОбновления.ХодВыполненияОбработчиков; + ХодВыполненияОбработчиков.ВыполненоОбработчиков = ХодВыполненияОбработчиков.ВыполненоОбработчиков + 1; + Прогресс = ХодВыполненияОбработчиков.ВыполненоОбработчиков / ХодВыполненияОбработчиков.ВсегоОбработчиков * 100; + ОбщегоНазначенияКлиентСервер.СообщитьПользователю("ПрибавкаНаШагеПрогресса=" + Прогресс); + КонецЕсли; + ИначеЕсли ПараметрыОбновления.ПараллельныйРежим Тогда + ЕстьОбработанныеОбъекты = ПараметрыСеанса.ПараметрыОбработчикаОбновления.ЕстьОбработанныеОбъекты; + ОбработчикИОчередь = ПараметрыОбновления.ОчередьОбработчиков.Найти(ОбработчикОбновления.ИмяОбработчика, "Обработчик"); + ОчередьОбработчика = ОбработчикИОчередь.Очередь; + МинимальнаяОчередь = ПараметрыОбновления.ОчередьОбработчиков[0].Очередь; + Если Не ЕстьОбработанныеОбъекты + И ОчередьОбработчика = МинимальнаяОчередь Тогда + ЧислоПопыток = ОбработчикОбновления.ЧислоПопыток; + Если ЧислоПопыток >= 2 Тогда + ТекстИсключения = НСтр("ru = 'Произошло зацикливание процедуры обработки данных. Выполнение прервано.'"); + ВызватьИсключение ТекстИсключения; + Иначе + ОбработчикОбновления.ЧислоПопыток = ЧислоПопыток + 1; + КонецЕсли; + Иначе + ОбработчикОбновления.ЧислоПопыток = 0; + КонецЕсли; + КонецЕсли; + + // Сохранение данных по процедуре обработки данных. + ОбработчикОбновления.СтатистикаВыполнения.Вставить("ПрогрессВыполнения", Параметры.ПрогрессВыполнения); + + КоличествоЗапусковПроцедурыОбновления = КоличествоЗапусковПроцедурыОбновления + 1; + ДлительностьВыполнения = ЗавершениеОбработкиДанных - НачалоОбработкиДанных; + Если ОбработчикОбновления.СтатистикаВыполнения["ДлительностьВыполнения"] <> Неопределено Тогда + ДлительностьВыполнения = ДлительностьВыполнения + ОбработчикОбновления.СтатистикаВыполнения["ДлительностьВыполнения"]; + КонецЕсли; + ОбработчикОбновления.СтатистикаВыполнения.Вставить("ДлительностьВыполнения", ДлительностьВыполнения); + ОбработчикОбновления.СтатистикаВыполнения.Вставить("КоличествоЗапусков", КоличествоЗапусковПроцедурыОбновления); + + Исключение + + Если ЗаписыватьВЖурнал Тогда + ЗаписатьДетальнуюИнформациюОХодеОбновления(ОписаниеОбработчика); + КонецЕсли; + + Пока ТранзакцияАктивна() Цикл + ОтменитьТранзакцию(); + КонецЦикла; + + ОбработчикОбновления.Статус = "Ошибка"; + ОбработчикОбновления.ЧислоПопыток = ОбработчикОбновления.ЧислоПопыток + 1; + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + ОбработчикОбновления.ИнформацияОбОшибке = ПодробноеПредставлениеОшибки; + ЗаписатьОшибку(ПодробноеПредставлениеОшибки); + КонецПопытки; + + // Если обработчик обновления передал параметры, их нужно сохранить. + ПереданныеПараметры = ПереданныеПараметрыОбработчикаОбновления(Параметры); + ОбработчикОбновления.СтатистикаВыполнения.Вставить("ПараметрыОбработчика", ПереданныеПараметры); + + Попытка + ПроверитьВложеннуюТранзакцию(ТранзакцияАктивнаНаНачалоВыполнения, ИмяОбработчика); + Исключение + // В случае нахождения вложенной транзакции обработчик обновления повторно не вызывается. + ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + + Если ОбработчикОбновления.Статус <> "Ошибка" Тогда + ОбработчикОбновления.ИнформацияОбОшибке = ПодробноеПредставлениеОшибки; + Иначе + ОбработчикОбновления.ИнформацияОбОшибке = ОбработчикОбновления.ИнформацияОбОшибке + + Символы.ПС + ПодробноеПредставлениеОшибки; + КонецЕсли; + + ОбработчикОбновления.ЧислоПопыток = 3; + КонецПопытки; + + Если ЗаписыватьВЖурнал Тогда + ЗаписатьДетальнуюИнформациюОХодеОбновления(ОписаниеОбработчика); + КонецЕсли; + +КонецПроцедуры + +Процедура СоставитьПланОтложенногоОбновления(СведенияОбОбновленииИБ) + + ЭтоПодчиненныйУзелРИБ = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ(); + ЭтоПодчиненныйУзелРИБСФильтром = ОбщегоНазначения.ЭтоПодчиненныйУзелРИБСФильтром(); + + ДеревоОбработчиков = СведенияОбОбновленииИБ.ДеревоОбработчиков; + ОписанияПодсистем = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем(); + + // Инициализация параметров. + ПланОбновления = Новый Массив; + ИндексПоследовательные = 1; + ИндексПараллельные = 1; + ТекущийРежимВыполнения = Неопределено; + СовместимыеПодсистемы = Новый Массив; + ЕстьОбработчикиТолькоГлавногоУзла = Ложь; + + Для Каждого Подсистема Из ОписанияПодсистем.Порядок Цикл + + ИмяКоллекции = ""; + ОписаниеПодсистемы = ОписанияПодсистем.ПоИменам[Подсистема]; + РежимВыполнения = ОписаниеПодсистемы.РежимВыполненияОтложенныхОбработчиков; + + Если РежимВыполнения = "Последовательно" Тогда + СовместимыеПодсистемы.Очистить(); + ИмяКоллекции = РежимВыполнения + "_" + ИндексПоследовательные; + ИндексПоследовательные = ИндексПоследовательные + 1; + ИначеЕсли ТекущийРежимВыполнения <> РежимВыполнения Тогда + СовместимыеПодсистемы.Добавить(Подсистема); + ИмяКоллекции = РежимВыполнения + "_" + ИндексПараллельные; + ИндексПараллельные = ИндексПараллельные + 1; + Иначе + ОбновлятьПараллельноСПодсистемами = ОписаниеПодсистемы.ОбновлятьПараллельноСПодсистемами; + Для Каждого СовместимаяПодсистема Из СовместимыеПодсистемы Цикл + Если ОбновлятьПараллельноСПодсистемами.Найти(СовместимаяПодсистема) = Неопределено Тогда + СовместимыеПодсистемы.Очистить(); + ИмяКоллекции = РежимВыполнения + "_" + ИндексПараллельные; + ИндексПараллельные = ИндексПараллельные + 1; + Прервать; + КонецЕсли; + КонецЦикла; + + СовместимыеПодсистемы.Добавить(Подсистема); + КонецЕсли; + + Если ИмяКоллекции <> "" Тогда + Структура = Новый Структура; + Структура.Вставить("Режим", ИмяКоллекции); + Если РежимВыполнения = "Параллельно" Тогда + Обработчики = Новый ТаблицаЗначений; + Обработчики.Колонки.Добавить("Обработчик", Новый ОписаниеТипов("Строка")); + Обработчики.Колонки.Добавить("Очередь", Новый ОписаниеТипов("Число")); + Иначе + Обработчики = Новый Массив; + КонецЕсли; + + Структура.Вставить("Обработчики", Обработчики); + + ПланОбновления.Добавить(Структура); + КонецЕсли; + + ДеревоОбработчиковБиблиотека = ДеревоОбработчиков.Строки.Найти(Подсистема, "ИмяБиблиотеки"); + Если ДеревоОбработчиковБиблиотека = Неопределено Тогда + ТекущийРежимВыполнения = РежимВыполнения; + Продолжить; + КонецЕсли; + + СведенияОБлокируемыхОбъектах = НовыеСведенияОБлокируемыхОбъектах(); + Для Каждого ДеревоОбработчиковВерсия Из ДеревоОбработчиковБиблиотека.Строки Цикл + ЗаполнитьБлокируемыеОбъекты(ДеревоОбработчиковВерсия, СведенияОбОбновленииИБ, СведенияОБлокируемыхОбъектах); + Для Каждого Обработчик Из ДеревоОбработчиковВерсия.Строки Цикл + Если ЭтоПодчиненныйУзелРИБ + И Обработчик.ЗапускатьТолькоВГлавномУзле = Истина Тогда + Продолжить; + КонецЕсли; + + Если Не ЭтоПодчиненныйУзелРИБ И Обработчик.ЗапускатьТолькоВГлавномУзле = Истина И РежимВыполнения = "Параллельно" Тогда + ЕстьОбработчикиТолькоГлавногоУзла = Истина; + КонецЕсли; + + Если ЭтоПодчиненныйУзелРИБСФильтром И РежимВыполнения = "Параллельно" + И Не Обработчик.ЗапускатьИВПодчиненномУзлеРИБСФильтрами Тогда + Продолжить; + КонецЕсли; + + Если РежимВыполнения = "Параллельно" Тогда + СтрокаОбработчик = Структура.Обработчики.Добавить(); + СтрокаОбработчик.Обработчик = Обработчик.ИмяОбработчика; + СтрокаОбработчик.Очередь = Обработчик.ОчередьОтложеннойОбработки; + Иначе + Структура.Обработчики.Добавить(Обработчик.ИмяОбработчика); + КонецЕсли; + КонецЦикла; + + // В параллельном режиме в РИБ с фильтрами в подчиненном узле выполняются только обработчики + // с признаком ЗапускатьИВПодчиненномУзлеРИБСФильтрами = Истина. + Если ЭтоПодчиненныйУзелРИБСФильтром И РежимВыполнения = "Параллельно" Тогда + ПараметрыОтбора = Новый Структура; + ПараметрыОтбора.Вставить("ЗапускатьИВПодчиненномУзлеРИБСФильтрами", Ложь); + ОбработчикиТолькоГлавногоУзла = ДеревоОбработчиковВерсия.Строки.НайтиСтроки(ПараметрыОтбора); + Для Каждого ОбработчикГлавногоУзла Из ОбработчикиТолькоГлавногоУзла Цикл + ДеревоОбработчиковВерсия.Строки.Удалить(ОбработчикГлавногоУзла); + КонецЦикла; + КонецЕсли; + + КонецЦикла; + + ТекущийРежимВыполнения = РежимВыполнения; + КонецЦикла; + + Константы.ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно.Установить(Не ЕстьОбработчикиТолькоГлавногоУзла); + + Для Каждого ЦиклОбновления Из ПланОбновления Цикл + Если ТипЗнч(ЦиклОбновления.Обработчики) = Тип("Массив") Тогда + Продолжить; + КонецЕсли; + ТаблицаОбработчиков = ЦиклОбновления.Обработчики; + ТаблицаОбработчиков.Сортировать("Очередь Возр"); + ЦиклОбновления.Обработчики = ТаблицаОбработчиков.ВыгрузитьКолонку("Обработчик"); + ЦиклОбновления.Вставить("ОчередьОбработчиков", ТаблицаОбработчиков); + КонецЦикла; + + СведенияОбОбновленииИБ.ПланОтложенногоОбновления = ПланОбновления; + +КонецПроцедуры + +Процедура ЗаполнитьБлокируемыеОбъекты(СтрокаВерсия, СведенияОбОбновлении, СведенияОБлокируемыхОбъектах) + + Для Каждого Обработчик Из СтрокаВерсия.Строки Цикл + ПроцедураПроверки = Обработчик.ПроцедураПроверки; + БлокируемыеОбъекты = Обработчик.БлокируемыеОбъекты; + Если ЗначениеЗаполнено(ПроцедураПроверки) И ЗначениеЗаполнено(БлокируемыеОбъекты) Тогда + СвойстваОбработчика = Новый Структура; + СвойстваОбработчика.Вставить("Выполнен", Ложь); + СвойстваОбработчика.Вставить("ПроцедураПроверки", ПроцедураПроверки); + + СведенияОБлокируемыхОбъектах.Обработчики.Вставить(Обработчик.ИмяОбработчика, СвойстваОбработчика); + МассивБлокируемыхОбъектов = СтрРазделить(БлокируемыеОбъекты, ","); + Для Каждого БлокируемыйОбъект Из МассивБлокируемыхОбъектов Цикл + БлокируемыйОбъект = СтрЗаменить(СокрЛП(БлокируемыйОбъект), ".", ""); + ИнформацияОбОбъекте = СведенияОБлокируемыхОбъектах.БлокируемыеОбъекты[БлокируемыйОбъект]; + Если ИнформацияОбОбъекте = Неопределено Тогда + МассивОбработчиков = Новый Массив; + МассивОбработчиков.Добавить(Обработчик.ИмяОбработчика); + СведенияОБлокируемыхОбъектах.БлокируемыеОбъекты.Вставить(БлокируемыйОбъект, МассивОбработчиков); + Иначе + СведенияОБлокируемыхОбъектах.БлокируемыеОбъекты[БлокируемыйОбъект].Добавить(Обработчик.ИмяОбработчика); + КонецЕсли; + КонецЦикла; + ИначеЕсли ЗначениеЗаполнено(БлокируемыеОбъекты) И Не ЗначениеЗаполнено(ПроцедураПроверки) Тогда + ТекстИсключения = НСтр("ru = 'У отложенного обработчика обновления ""%1"" + |заполнен список блокируемых объектов, но не задано свойство ""ПроцедураПроверки"".'"); + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, Обработчик.ИмяОбработчика); + КонецЕсли; + КонецЦикла; + + ЗаписатьСведенияОБлокируемыхОбъектах(СведенияОБлокируемыхОбъектах); + +КонецПроцедуры + +Процедура ВключитьОтключитьОтложенныеОбработчикиОбновления(СведенияОбОбновлении) + + ПланОбновления = СведенияОбОбновлении.ПланОтложенногоОбновления; + УправлениеОбработчиками = СведенияОбОбновлении.УправлениеОтложеннымОбновлением; + ЗапуститьОбработчики = Неопределено; + ОстановитьОбработчики = Неопределено; + ПриоритетЖелательноБыстрее = Неопределено; + ПриоритетВПлановомПорядке = Неопределено; + + СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Свойство("ЗапуститьОбработчики", ЗапуститьОбработчики); + СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Свойство("ОстановитьОбработчики", ОстановитьОбработчики); + СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Свойство("ПриоритетЖелательноБыстрее", ПриоритетЖелательноБыстрее); + СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Свойство("ПриоритетВПлановомПорядке", ПриоритетВПлановомПорядке); + + // Запуск остановленных отложенных обработчиков обновления. + Если ЗапуститьОбработчики <> Неопределено Тогда + Для Каждого ЗапущенныйОбработчик Из ЗапуститьОбработчики Цикл + НайденныйОбработчик = СведенияОбОбновлении.ДеревоОбработчиков.Строки.Найти(ЗапущенныйОбработчик, "ИмяОбработчика", Истина); + Если НайденныйОбработчик <> Неопределено Тогда + НайденныйОбработчик.Статус = "НеВыполнено"; + + Для Каждого ЦиклОбновления Из ПланОбновления Цикл + Если ЦиклОбновления.Обработчики.Найти(НайденныйОбработчик.ИмяОбработчика) <> Неопределено + И ЦиклОбновления.Свойство("ЕстьОстановленные") Тогда + ЦиклОбновления.Удалить("ЕстьОстановленные"); + КонецЕсли; + КонецЦикла; + + КонецЕсли; + КонецЦикла; + + СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Удалить("ЗапуститьОбработчики"); + КонецЕсли; + + // Остановка выполняющихся отложенных обработчиков обновления. + Если ОстановитьОбработчики <> Неопределено Тогда + Для Каждого ОстановленныйОбработчик Из ОстановитьОбработчики Цикл + НайденныйОбработчик = СведенияОбОбновлении.ДеревоОбработчиков.Строки.Найти(ОстановленныйОбработчик, "ИмяОбработчика", Истина); + Если НайденныйОбработчик <> Неопределено + И НайденныйОбработчик.Статус <> "Выполнено" Тогда + НайденныйОбработчик.Статус = "Приостановлен"; + КонецЕсли; + КонецЦикла; + + СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Удалить("ОстановитьОбработчики"); + КонецЕсли; + + // Повышение приоритета процедуры обработки данных. + Если ПриоритетЖелательноБыстрее <> Неопределено Тогда + Для Каждого Обработчик Из ПриоритетЖелательноБыстрее Цикл + НайденныйОбработчик = СведенияОбОбновлении.ДеревоОбработчиков.Строки.Найти(Обработчик, "ИмяОбработчика", Истина); + Если НайденныйОбработчик <> Неопределено + И НайденныйОбработчик.Статус <> "Выполнено" Тогда + НайденныйОбработчик.Приоритет = "ЖелательноБыстрее"; + + Родитель = НайденныйОбработчик.Родитель; + ИндексСтроки = Родитель.Строки.Индекс(НайденныйОбработчик); + Если Родитель.Строки.Количество() > 1 + И ИндексСтроки > 0 Тогда + Для Каждого ЦиклОбновления Из ПланОбновления Цикл + Если СтрНайти(ЦиклОбновления.Режим, "Параллельно") > 0 Тогда + Прервать; + КонецЕсли; + ИндексОбработчика = ЦиклОбновления.Обработчики.Найти(НайденныйОбработчик.ИмяОбработчика); + Если ИндексОбработчика <> Неопределено Тогда + НовыйИндекс = ИндексОбработчика - ИндексСтроки; + НовыйИндекс = ?(НовыйИндекс < 0, ?(ИндексОбработчика > 0, ИндексОбработчика, 0), НовыйИндекс); + Если НовыйИндекс > 0 Тогда + ЦиклОбновления.Обработчики.Удалить(ИндексОбработчика); + ЦиклОбновления.Обработчики.Вставить(НовыйИндекс, НайденныйОбработчик.ИмяОбработчика); + КонецЕсли; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + КонецЕсли; + КонецЦикла; + + СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Удалить("ПриоритетЖелательноБыстрее"); + КонецЕсли; + + // Понижение приоритета процедуры обработки данных. + Если ПриоритетВПлановомПорядке <> Неопределено Тогда + Для Каждого Обработчик Из ПриоритетВПлановомПорядке Цикл + НайденныйОбработчик = СведенияОбОбновлении.ДеревоОбработчиков.Строки.Найти(Обработчик, "ИмяОбработчика", Истина); + Если НайденныйОбработчик <> Неопределено + И НайденныйОбработчик.Статус <> "Выполнено" Тогда + НайденныйОбработчик.Приоритет = "ВПлановомПорядке"; + КонецЕсли; + КонецЦикла; + + СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Удалить("ПриоритетВПлановомПорядке"); + КонецЕсли; + + Если ЗапуститьОбработчики <> Неопределено + Или ОстановитьОбработчики <> Неопределено + Или ПриоритетЖелательноБыстрее <> Неопределено + Или ПриоритетВПлановомПорядке <> Неопределено Тогда + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + КонецЕсли; + +КонецПроцедуры + +Функция НовыеСведенияОБлокируемыхОбъектах(СтарыеСведения = Неопределено) + + СведенияОБлокируемыхОбъектах = Новый Структура; + СведенияОБлокируемыхОбъектах.Вставить("БлокируемыеОбъекты", Новый Соответствие); + СведенияОБлокируемыхОбъектах.Вставить("Обработчики", Новый Соответствие); + + Если ТипЗнч(СтарыеСведения) = Тип("Структура") Тогда + ЗаполнитьЗначенияСвойств(СведенияОБлокируемыхОбъектах, СтарыеСведения); + КонецЕсли; + + Возврат СведенияОБлокируемыхОбъектах; + +КонецФункции + +Процедура ЗаписатьСведенияОБлокируемыхОбъектах(Сведения) + + Если Сведения = Неопределено Тогда + НовоеЗначение = НовыеСведенияОБлокируемыхОбъектах(); + Иначе + НовоеЗначение = Сведения; + КонецЕсли; + + МенеджерКонстанты = Константы.СведенияОБлокируемыхОбъектах.СоздатьМенеджерЗначения(); + МенеджерКонстанты.Значение = Новый ХранилищеЗначения(НовоеЗначение); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(МенеджерКонстанты); + +КонецПроцедуры + +Процедура ПеререгистрироватьДанныеДляОтложенногоОбновления() + + СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы(); + ОписанияБиблиотек = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем().ПоИменам; + ОбрабатываемыеДанные = Новый Соответствие; + ПараметрыИнициализированы = Ложь; + + Для Каждого СтрокаБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл + + Если ОписанияБиблиотек[СтрокаБиблиотека.ИмяБиблиотеки].РежимВыполненияОтложенныхОбработчиков <> "Параллельно" Тогда + Продолжить; + КонецЕсли; + + Если Не ПараметрыИнициализированы Тогда + ПараметрыОбработчикаСтруктура = ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке(); + ПараметрыОбработчикаСтруктура.ПовторнаяРегистрация = Истина; + ПараметрыИнициализированы = Истина; + КонецЕсли; + + Для Каждого СтрокаВерсия Из СтрокаБиблиотека.Строки Цикл + Для Каждого Обработчик Из СтрокаВерсия.Строки Цикл + + ПараметрыОбработчикаСтруктура.Очередь = Обработчик.ОчередьОтложеннойОбработки; + ПараметрыОбработчикаСтруктура.Вставить("ДанныеОбработчика", Новый Соответствие); + + ПараметрыОбработчика = Новый Массив; + ПараметрыОбработчика.Добавить(ПараметрыОбработчикаСтруктура); + Попытка + Сообщение = НСтр("ru = 'Выполняется процедура заполнения данных + |""%1"" + |отложенного обработчика обновления + |""%2"".'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, + Обработчик.ПроцедураЗаполненияДанныхОбновления, + Обработчик.ИмяОбработчика); + ЗаписатьИнформацию(Сообщение); + + РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(Обработчик.ПроцедураЗаполненияДанныхОбновления, ПараметрыОбработчика); + Исключение + ЗаписатьОшибку(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При вызове процедуры заполнения данных + |""%1"" + |отложенного обработчика обновления + |""%2"" + |произошла ошибка: + |""%3"".'"), + Обработчик.ПроцедураЗаполненияДанныхОбновления, + Обработчик.ИмяОбработчика, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); + + ВызватьИсключение; + КонецПопытки; + + ОбрабатываемыеДанные.Вставить(Обработчик.ИмяОбработчика, ПараметрыОбработчикаСтруктура.ДанныеОбработчика); + КонецЦикла; + КонецЦикла; + + КонецЦикла; + + СведенияОбОбновлении.ОбрабатываемыеДанные = ОбрабатываемыеДанные; + ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + +КонецПроцедуры + +Процедура ЗаполнитьДанныеДляПараллельногоОтложенногоОбновления(СведенияОбОбновлении, Параметры) + + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ОтметитьРегистрациюОтложенныхОбработчиковОбновления(); + Возврат; + КонецЕсли; + + Если Не (СтандартныеПодсистемыПовтИсп.ИспользуетсяРИБ("СФильтром") И ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ()) Тогда + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОбновлениеИнформационнойБазы.Ссылка КАК Узел + |ИЗ + | ПланОбмена.ОбновлениеИнформационнойБазы КАК ОбновлениеИнформационнойБазы + |ГДЕ + | НЕ ОбновлениеИнформационнойБазы.ЭтотУзел"; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + ПланыОбмена.УдалитьРегистрациюИзменений(Выборка.Узел); + КонецЦикла; + КонецЕсли; + + ОбрабатываемыеДанные = Новый Соответствие; + ОписанияБиблиотек = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем().ПоИменам; + ПараметрыИнициализированы = Ложь; + + Для Каждого СтрокаБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл + + Если ОписанияБиблиотек[СтрокаБиблиотека.ИмяБиблиотеки].РежимВыполненияОтложенныхОбработчиков <> "Параллельно" Тогда + Продолжить; + КонецЕсли; + + Если Не ПараметрыИнициализированы Тогда + + ПараметрыОбработчикаСтруктура = ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке(); + ПараметрыИнициализированы = Истина; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); + МодульОбменДаннымиСервер.ИнициализироватьФайлСДаннымиОбновления(ПараметрыОбработчикаСтруктура); + КонецЕсли; + + КонецЕсли; + + Для Каждого СтрокаВерсия Из СтрокаБиблиотека.Строки Цикл + Для Каждого Обработчик Из СтрокаВерсия.Строки Цикл + + ПараметрыОбработчикаСтруктура.Очередь = Обработчик.ОчередьОтложеннойОбработки; + ПараметрыОбработчикаСтруктура.Вставить("ДанныеОбработчика", Новый Соответствие); + + ПараметрыОбработчика = Новый Массив; + ПараметрыОбработчика.Добавить(ПараметрыОбработчикаСтруктура); + Попытка + Сообщение = НСтр("ru = 'Выполняется процедура заполнения данных + |""%1"" + |отложенного обработчика обновления + |""%2"".'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, + Обработчик.ПроцедураЗаполненияДанныхОбновления, + Обработчик.ИмяОбработчика); + ЗаписатьИнформацию(Сообщение); + + РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(Обработчик.ПроцедураЗаполненияДанныхОбновления, ПараметрыОбработчика); + + // Запись прогресса обновления. + Если Параметры.ВФоне Тогда + ХодВыполненияОбработчиков = Параметры.ХодВыполненияОбработчиков; + ХодВыполненияОбработчиков.ВыполненоОбработчиков = ХодВыполненияОбработчиков.ВыполненоОбработчиков + 1; + Прогресс = ХодВыполненияОбработчиков.ВыполненоОбработчиков / ХодВыполненияОбработчиков.ВсегоОбработчиков * 100; + ОбщегоНазначенияКлиентСервер.СообщитьПользователю("ПрибавкаНаШагеПрогресса=" + Прогресс); + КонецЕсли; + Исключение + ОтметитьРегистрациюОтложенныхОбработчиковОбновления(СтрокаБиблиотека.ИмяБиблиотеки, Ложь); + ЗаписатьОшибку(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При вызове процедуры заполнения данных + |""%1"" + |отложенного обработчика обновления + |""%2"" + |произошла ошибка: + |""%3"".'"), + Обработчик.ПроцедураЗаполненияДанныхОбновления, + Обработчик.ИмяОбработчика, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); + + ВызватьИсключение; + КонецПопытки; + + ОбрабатываемыеДанные.Вставить(Обработчик.ИмяОбработчика, ПараметрыОбработчикаСтруктура.ДанныеОбработчика); + КонецЦикла; + КонецЦикла; + + КонецЦикла; + + СведенияОбОбновлении.ОбрабатываемыеДанные = ОбрабатываемыеДанные; + ОтметитьРегистрациюОтложенныхОбработчиковОбновления(); + + Если ПараметрыИнициализированы И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); + МодульОбменДаннымиСервер.ЗавершитьЗаписьФайлаСДаннымиОбновления(ПараметрыОбработчикаСтруктура); + КонецЕсли; + + Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда + ПараметрыОтбора = Новый Структура; + ПараметрыОтбора.Вставить("ЗапускатьТолькоВГлавномУзле", Истина); + ОбработчикиТолькоГлавногоУзла = СведенияОбОбновлении.ДеревоОбработчиков.Строки.НайтиСтроки(ПараметрыОтбора, Истина); + Для Каждого ОбработчикГлавногоУзла Из ОбработчикиТолькоГлавногоУзла Цикл + Родитель = ОбработчикГлавногоУзла.Родитель; + Родитель.Строки.Удалить(ОбработчикГлавногоУзла); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +Процедура ОтметитьРегистрациюОтложенныхОбработчиковОбновления(ИмяПодсистемы = Неопределено, Значение = Истина) + + СтандартнаяОбработка = Истина; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса") Тогда + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса"); + МодульОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ПриОтметкеРегистрацииОтложенныхОбработчиковОбновления(ИмяПодсистемы, Значение, СтандартнаяОбработка); + КонецЕсли; + + Если Не СтандартнаяОбработка Тогда + Возврат; + КонецЕсли; + + НаборЗаписей = РегистрыСведений.ВерсииПодсистем.СоздатьНаборЗаписей(); + Если ИмяПодсистемы <> Неопределено Тогда + НаборЗаписей.Отбор.ИмяПодсистемы.Установить(ИмяПодсистемы); + КонецЕсли; + НаборЗаписей.Прочитать(); + + Если НаборЗаписей.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Для Каждого ЗаписьРегистра Из НаборЗаписей Цикл + ЗаписьРегистра.ВыполненаРегистрацияОтложенныхОбработчиков = Значение; + КонецЦикла; + НаборЗаписей.Записать(); + +КонецПроцедуры + +Процедура УстановитьПараметрыОтложенногоОбработчикаОбновления(ОбработчикОбновления, Отложенно = Ложь, Параллельно = Ложь) + + Если ОбработчикОбновления = Неопределено Тогда + ПараметрыСеанса.ПараметрыОбработчикаОбновления = Новый ФиксированнаяСтруктура(НовыеПараметрыОбработчикаОбновления()); + Возврат; + КонецЕсли; + + Если Отложенно Тогда + РежимВыполнения = "Отложенно"; + Иначе + РежимВыполнения = "Монопольно"; + КонецЕсли; + + Если Параллельно Тогда + РежимВыполненияОтложенныхОбработчиков = "Параллельно"; + Иначе + РежимВыполненияОтложенныхОбработчиков = "Последовательно"; + КонецЕсли; + + ПараметрыОбработчикаОбновления = НовыеПараметрыОбработчикаОбновления(); + ПараметрыОбработчикаОбновления.ЗапускатьТолькоВГлавномУзле = ОбработчикОбновления.ЗапускатьТолькоВГлавномУзле; + ПараметрыОбработчикаОбновления.ЗапускатьИВПодчиненномУзлеРИБСФильтрами = ОбработчикОбновления.ЗапускатьИВПодчиненномУзлеРИБСФильтрами; + ПараметрыОбработчикаОбновления.ОчередьОтложеннойОбработки = ОбработчикОбновления.ОчередьОтложеннойОбработки; + ПараметрыОбработчикаОбновления.РежимВыполнения = РежимВыполнения; + ПараметрыОбработчикаОбновления.РежимВыполненияОтложенныхОбработчиков = РежимВыполненияОтложенныхОбработчиков; + ПараметрыОбработчикаОбновления.ЕстьОбработанныеОбъекты = Ложь; + + ПараметрыСеанса.ПараметрыОбработчикаОбновления = Новый ФиксированнаяСтруктура(ПараметрыОбработчикаОбновления); + +КонецПроцедуры + +Функция НовыеПараметрыОбработчикаОбновления() Экспорт + ПараметрыОбработчикаОбновления = Новый Структура; + ПараметрыОбработчикаОбновления.Вставить("ЗапускатьТолькоВГлавномУзле", Ложь); + ПараметрыОбработчикаОбновления.Вставить("ЗапускатьИВПодчиненномУзлеРИБСФильтрами", Ложь); + ПараметрыОбработчикаОбновления.Вставить("ОчередьОтложеннойОбработки", 0); + ПараметрыОбработчикаОбновления.Вставить("РежимВыполнения", ""); + ПараметрыОбработчикаОбновления.Вставить("РежимВыполненияОтложенныхОбработчиков", ""); + ПараметрыОбработчикаОбновления.Вставить("ЕстьОбработанныеОбъекты", Ложь); + + Возврат ПараметрыОбработчикаОбновления; +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl index 5f8aa85b5..545cb765f 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса/Module.bsl @@ -3,6 +3,210 @@ // /////////////////////////////////////////////////////////////////////////////////// +#Область ПрограммныйИнтерфейс + +// Выбирает все области данных с неактуальными версиями +// и при необходимости формирует фоновые задания по обновлению +// версии в них. +// +// Параметры: +// БлокироватьОбласти - Булево - устанавливать блокировку сеансов областей данных +// на время обновления областей. +// +Процедура ЗапланироватьОбновлениеОбластейДанных(Знач БлокироватьОбласти = Истина, Знач СообщениеБлокировки = "") Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + Если ПустаяСтрока(СообщениеБлокировки) Тогда + СообщениеБлокировки = Константы.СообщениеБлокировкиПриОбновленииКонфигурации.Получить(); + Если ПустаяСтрока(СообщениеБлокировки) Тогда + СообщениеБлокировки = НСтр("ru = 'Система заблокирована для выполнения обновления.'"); + КонецЕсли; + КонецЕсли; + ПараметрыБлокировки = СоединенияИБ.НовыеПараметрыБлокировкиСоединений(); + ПараметрыБлокировки.Начало = ТекущаяУниверсальнаяДата(); + ПараметрыБлокировки.Сообщение = СообщениеБлокировки; + ПараметрыБлокировки.Установлена = Истина; + ПараметрыБлокировки.Эксклюзивная = Истина; + + ВерсияМетаданных = Метаданные.Версия; + Если ПустаяСтрока(ВерсияМетаданных) Тогда + Возврат; + КонецЕсли; + + ВерсияОбщихДанных = ОбновлениеИнформационнойБазыСлужебный.ВерсияИБ(Метаданные.Имя, Истина); + Если ОбновлениеИнформационнойБазыСлужебный.НеобходимоВыполнитьОбновление(ВерсияМетаданных, ВерсияОбщихДанных) Тогда + // Не выполнено обновление общих данных смысла планировать + // обновление областей нет. + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОбластиДанных.ОбластьДанныхВспомогательныеДанные КАК ОбластьДанных + |ИЗ + | РегистрСведений.ОбластиДанных КАК ОбластиДанных + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВерсииПодсистемОбластейДанных КАК ВерсииПодсистемОбластейДанных + | ПО ОбластиДанных.ОбластьДанныхВспомогательныеДанные = ВерсииПодсистемОбластейДанных.ОбластьДанныхВспомогательныеДанные + | И (ВерсииПодсистемОбластейДанных.ИмяПодсистемы = &ИмяПодсистемы) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РейтингАктивностиОбластейДанных КАК РейтингАктивностиОбластейДанных + | ПО ОбластиДанных.ОбластьДанныхВспомогательныеДанные = РейтингАктивностиОбластейДанных.ОбластьДанныхВспомогательныеДанные + |ГДЕ + | ОбластиДанных.Статус В (ЗНАЧЕНИЕ(Перечисление.СтатусыОбластейДанных.Используется)) + | И ЕСТЬNULL(ВерсииПодсистемОбластейДанных.Версия, """") <> &Версия + | + |УПОРЯДОЧИТЬ ПО + | ЕСТЬNULL(РейтингАктивностиОбластейДанных.Рейтинг, 9999999), + | ОбластьДанных"; + Запрос.УстановитьПараметр("ИмяПодсистемы", Метаданные.Имя); + Запрос.УстановитьПараметр("Версия", ВерсияМетаданных); + Результат = ОбщегоНазначения.ВыполнитьЗапросВнеТранзакции(Запрос); + Если Результат.Пустой() Тогда // Предварительное чтение, возможно с проявлениями грязного чтения. + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ОбластиДанных.Статус КАК Статус + |ИЗ + | РегистрСведений.ОбластиДанных КАК ОбластиДанных + |ГДЕ + | ОбластиДанных.ОбластьДанныхВспомогательныеДанные = &ОбластьДанных + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ВерсииПодсистемОбластейДанных.Версия КАК Версия + |ИЗ + | РегистрСведений.ВерсииПодсистемОбластейДанных КАК ВерсииПодсистемОбластейДанных + |ГДЕ + | ВерсииПодсистемОбластейДанных.ОбластьДанныхВспомогательныеДанные = &ОбластьДанных + | И ВерсииПодсистемОбластейДанных.ИмяПодсистемы = &ИмяПодсистемы"; + Запрос.УстановитьПараметр("ИмяПодсистемы", Метаданные.Имя); + + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + ЗначенияКлюча = Новый Структура; + ЗначенияКлюча.Вставить("ОбластьДанныхВспомогательныеДанные", Выборка.ОбластьДанных); + ЗначенияКлюча.Вставить("ИмяПодсистемы", ""); + КлючЗаписи = РаботаВМоделиСервиса.СоздатьКлючЗаписиРегистраСведенийВспомогательныхДанных( + РегистрыСведений.ВерсииПодсистемОбластейДанных, ЗначенияКлюча); + + ОшибкаУстановкиБлокировки = Ложь; + + НачатьТранзакцию(); + Попытка + Попытка + ЗаблокироватьДанныеДляРедактирования(КлючЗаписи); // Будет снята при окончании транзакции. + Исключение + ОшибкаУстановкиБлокировки = Истина; + ВызватьИсключение; + КонецПопытки; + + Запрос.УстановитьПараметр("ОбластьДанных", Выборка.ОбластьДанных); + + Блокировка = Новый БлокировкаДанных; + + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ВерсииПодсистемОбластейДанных"); + ЭлементБлокировки.УстановитьЗначение("ОбластьДанныхВспомогательныеДанные", Выборка.ОбластьДанных); + ЭлементБлокировки.УстановитьЗначение("ИмяПодсистемы", Метаданные.Имя); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; + + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОбластиДанных"); + ЭлементБлокировки.УстановитьЗначение("ОбластьДанныхВспомогательныеДанные", Выборка.ОбластьДанных); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; + + Блокировка.Заблокировать(); + + Результаты = Запрос.ВыполнитьПакет(); + + СтрокаОбласти = Неопределено; + Если НЕ Результаты[0].Пустой() Тогда + СтрокаОбласти = Результаты[0].Выгрузить()[0]; + КонецЕсли; + СтрокаВерсии = Неопределено; + Если НЕ Результаты[1].Пустой() Тогда + СтрокаВерсии = Результаты[1].Выгрузить()[0]; + КонецЕсли; + + Если СтрокаОбласти = Неопределено + ИЛИ СтрокаОбласти.Статус <> Перечисления.СтатусыОбластейДанных.Используется + ИЛИ (СтрокаВерсии <> Неопределено И СтрокаВерсии.Версия = ВерсияМетаданных) Тогда + + // Записи не соответствуют исходному критерию. + ЗафиксироватьТранзакцию(); + Продолжить; + КонецЕсли; + + ОтборЗадания = Новый Структура; + ОтборЗадания.Вставить("ИмяМетода", "ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ВыполнитьОбновлениеТекущейОбластиДанных"); + ОтборЗадания.Вставить("Ключ", "1"); + ОтборЗадания.Вставить("ОбластьДанных", Выборка.ОбластьДанных); + Задания = ОчередьЗаданий.ПолучитьЗадания(ОтборЗадания); + Если Задания.Количество() > 0 Тогда + // Уже есть задание обновления области. + ЗафиксироватьТранзакцию(); + Продолжить; + КонецЕсли; + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("ИмяМетода" , "ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ВыполнитьОбновлениеТекущейОбластиДанных"); + ПараметрыЗадания.Вставить("Параметры" , Новый Массив); + ПараметрыЗадания.Вставить("Ключ" , "1"); + ПараметрыЗадания.Вставить("ОбластьДанных", Выборка.ОбластьДанных); + ПараметрыЗадания.Вставить("ЭксклюзивноеВыполнение", Истина); + ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", 3); + + ОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); + + Если БлокироватьОбласти Тогда + СоединенияИБ.УстановитьБлокировкуСеансовОбластиДанных(ПараметрыБлокировки, Ложь, Выборка.ОбластьДанных); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + + Исключение + + ОтменитьТранзакцию(); + Если ОшибкаУстановкиБлокировки Тогда + Продолжить; + Иначе + ВызватьИсключение; + КонецЕсли; + + КонецПопытки; + + КонецЦикла; + +КонецПроцедуры + +// Возвращает ключ записи для регистра сведений ВерсииПодсистемОбластейДанных. +// +// Возвращаемое значение: +// РегистрСведенийКлючЗаписи. +// +Функция КлючЗаписиВерсийПодсистем() Экспорт + + ЗначенияКлюча = Новый Структура; + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ЗначенияКлюча.Вставить("ОбластьДанныхВспомогательныеДанные", ОбщегоНазначения.ЗначениеРазделителяСеанса()); + ЗначенияКлюча.Вставить("ИмяПодсистемы", ""); + КлючЗаписи = РаботаВМоделиСервиса.СоздатьКлючЗаписиРегистраСведенийВспомогательныхДанных( + РегистрыСведений.ВерсииПодсистемОбластейДанных, ЗначенияКлюча); + КонецЕсли; + + Возврат КлючЗаписи; + +КонецФункции + +#КонецОбласти + #Область СлужебныйПрограммныйИнтерфейс // Формирует и сохраняет в ИБ план обновления областей данных. @@ -36,8 +240,10 @@ СтрокаОбработчика.Версия = "*"; КонецЦикла; + ПараметрыОтбора = ОбновлениеИнформационнойБазыСлужебный.ПараметрыОтбораОбработчиков(); + ПараметрыОтбора.ПолучатьРазделенные = Истина; ПланОбновленияОбластиДанных = ОбновлениеИнформационнойБазыСлужебный.ОбработчикиОбновленияВИнтервале( - ОбработчикиОбновления, ИсходнаяВерсияИБ, ВерсияМетаданныхИБ, Истина); + ОбработчикиОбновления, ИсходнаяВерсияИБ, ВерсияМетаданныхИБ, ПараметрыОтбора); ОписаниеПлана = Новый Структура; ОписаниеПлана.Вставить("ВерсияС", ИсходнаяВерсияИБ); @@ -68,7 +274,7 @@ ПланОбновленияПустой = ПланОбновленияОбластиДанных.Строки.Количество() = 0; Если ИдентификаторБиблиотеки = Метаданные.Имя Тогда - // Версию конфигурации можно устанавливать только если ни какие библиотеки не требует обновления + // Версию конфигурации можно устанавливать только если никакие библиотеки не требует обновления // иначе механизм обновления в областях не будет запущен и библиотеки останутся не обновленными. ПланОбновленияПустой = Ложь; @@ -195,7 +401,22 @@ КонецЕсли; Если ПланОбновленияПустой Тогда - УстановитьВерсиюВсехОбластейДанных(ИдентификаторБиблиотеки, ИсходнаяВерсияИБ, ВерсияМетаданныхИБ); + + // План обновления не содержит разделенных оперативных или монопольных обработчиков. + // Выполняется проверка наличия разделенных отложенных обработчиков. + ПараметрыОтбораОтложенных = ОбновлениеИнформационнойБазыСлужебный.ПараметрыОтбораОбработчиков(); + ПараметрыОтбораОтложенных.ПолучатьРазделенные = Истина; + ПараметрыОтбораОтложенных.РежимОбновления = "Отложенно"; + + ОтложенныеОбработчики = ОбновлениеИнформационнойБазыСлужебный.ОбработчикиОбновленияВИнтервале(ОбработчикиОбновления, ИсходнаяВерсияИБ, ВерсияМетаданныхИБ, ПараметрыОтбораОтложенных); + + // Нет разделенных отложенных обработчиков, установить новую версию библиотеки. + Если ОтложенныеОбработчики.Строки.Количество() = 0 Тогда + + УстановитьВерсиюВсехОбластейДанных(ИдентификаторБиблиотеки, ИсходнаяВерсияИБ, ВерсияМетаданныхИБ); + + КонецЕсли; + КонецЕсли; КонецЕсли; @@ -265,8 +486,8 @@ Попытка ЗаблокироватьДанныеДляРедактирования(КлючЗаписи); Исключение - ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации() + ". " - + НСтр("ru = 'Обновление области данных'", Метаданные.ОсновнойЯзык.КодЯзыка), + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации() + "." + + НСтр("ru = 'Обновление области данных'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение(НСтр("ru = 'Ошибка обновления области данных. Запись версий области данных заблокирована.'")); @@ -279,7 +500,7 @@ // Разблокирует запись в регистре сведений ВерсииПодсистемОбластейДанных. // // Параметры: -// КлючЗаписи - РегистрСведенийКлючЗаписи +// КлючЗаписи - РегистрСведенийКлючЗаписи. // Процедура РазблокироватьВерсииОбластиДанных(КлючЗаписи) Экспорт @@ -358,6 +579,52 @@ КонецПроцедуры +// Для внутреннего использования. +Процедура ПриПроверкеРегистрацииОтложенныхОбработчиковОбновления(РегистрацияВыполнена, СтандартнаяОбработка) Экспорт + + Если ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда + СтандартнаяОбработка = Ложь; + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВерсииПодсистемОбластейДанных.ИмяПодсистемы + |ИЗ + | РегистрСведений.ВерсииПодсистемОбластейДанных КАК ВерсииПодсистемОбластейДанных + |ГДЕ + | НЕ ВерсииПодсистемОбластейДанных.ВыполненаРегистрацияОтложенныхОбработчиков + | И ВерсииПодсистемОбластейДанных.ОбластьДанныхВспомогательныеДанные = &ОбластьДанныхВспомогательныеДанные"; + + Запрос.УстановитьПараметр("ОбластьДанныхВспомогательныеДанные", ОбщегоНазначения.ЗначениеРазделителяСеанса()); + Результат = Запрос.Выполнить().Выгрузить(); + РегистрацияВыполнена = (Результат.Количество() = 0); + КонецЕсли; + +КонецПроцедуры + +// Только для внутреннего использования. +Процедура ПриОтметкеРегистрацииОтложенныхОбработчиковОбновления(ИмяПодсистемы, Значение, СтандартнаяОбработка) Экспорт + + Если ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда + СтандартнаяОбработка = Ложь; + + НаборЗаписей = РегистрыСведений.ВерсииПодсистемОбластейДанных.СоздатьНаборЗаписей(); + Если ИмяПодсистемы <> Неопределено Тогда + НаборЗаписей.Отбор.ИмяПодсистемы.Установить(ИмяПодсистемы); + КонецЕсли; + НаборЗаписей.Прочитать(); + + Если НаборЗаписей.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Для Каждого ЗаписьРегистра Из НаборЗаписей Цикл + ЗаписьРегистра.ВыполненаРегистрацияОтложенныхОбработчиков = Значение; + КонецЦикла; + НаборЗаписей.Записать(); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -660,188 +927,6 @@ КонецПроцедуры -// Выбирает все области данных с неактуальными версиями -// и при необходимости формирует фоновые задания по обновлению -// версии в них. -// -// Параметры: -// БлокироватьОбласти - Булево - устанавливать блокировку сеансов областей данных -// на время обновления областей. -// -Процедура ЗапланироватьОбновлениеОбластейДанных(Знач БлокироватьОбласти = Истина, Знач СообщениеБлокировки = "") Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Возврат; - КонецЕсли; - - Если ПустаяСтрока(СообщениеБлокировки) Тогда - СообщениеБлокировки = Константы.СообщениеБлокировкиПриОбновленииКонфигурации.Получить(); - Если ПустаяСтрока(СообщениеБлокировки) Тогда - СообщениеБлокировки = НСтр("ru = 'Система заблокирована для выполнения обновления.'"); - КонецЕсли; - КонецЕсли; - ПараметрыБлокировки = СоединенияИБ.НовыеПараметрыБлокировкиСоединений(); - ПараметрыБлокировки.Начало = ТекущаяУниверсальнаяДата(); - ПараметрыБлокировки.Сообщение = СообщениеБлокировки; - ПараметрыБлокировки.Установлена = Истина; - ПараметрыБлокировки.Эксклюзивная = Истина; - - ВерсияМетаданных = Метаданные.Версия; - Если ПустаяСтрока(ВерсияМетаданных) Тогда - Возврат; - КонецЕсли; - - ВерсияОбщихДанных = ОбновлениеИнформационнойБазыСлужебный.ВерсияИБ(Метаданные.Имя, Истина); - Если ОбновлениеИнформационнойБазыСлужебный.НеобходимоВыполнитьОбновление(ВерсияМетаданных, ВерсияОбщихДанных) Тогда - // Не выполнено обновление общих данных смысла планировать - // обновление областей нет. - Возврат; - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ОбластиДанных.ОбластьДанныхВспомогательныеДанные КАК ОбластьДанных - |ИЗ - | РегистрСведений.ОбластиДанных КАК ОбластиДанных - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВерсииПодсистемОбластейДанных КАК ВерсииПодсистемОбластейДанных - | ПО ОбластиДанных.ОбластьДанныхВспомогательныеДанные = ВерсииПодсистемОбластейДанных.ОбластьДанныхВспомогательныеДанные - | И (ВерсииПодсистемОбластейДанных.ИмяПодсистемы = &ИмяПодсистемы) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РейтингАктивностиОбластейДанных КАК РейтингАктивностиОбластейДанных - | ПО ОбластиДанных.ОбластьДанныхВспомогательныеДанные = РейтингАктивностиОбластейДанных.ОбластьДанныхВспомогательныеДанные - |ГДЕ - | ОбластиДанных.Статус В (ЗНАЧЕНИЕ(Перечисление.СтатусыОбластейДанных.Используется)) - | И (ВерсииПодсистемОбластейДанных.ОбластьДанныхВспомогательныеДанные ЕСТЬ NULL - | ИЛИ ВерсииПодсистемОбластейДанных.Версия <> &Версия) - | - |УПОРЯДОЧИТЬ ПО - | ЕСТЬNULL(РейтингАктивностиОбластейДанных.Рейтинг, 9999999), - | ОбластьДанных"; - Запрос.УстановитьПараметр("ИмяПодсистемы", Метаданные.Имя); - Запрос.УстановитьПараметр("Версия", ВерсияМетаданных); - Результат = ОбщегоНазначения.ВыполнитьЗапросВнеТранзакции(Запрос); - Если Результат.Пустой() Тогда // Предварительное чтение, возможно с проявлениями грязного чтения. - Возврат; - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ОбластиДанных.Статус КАК Статус - |ИЗ - | РегистрСведений.ОбластиДанных КАК ОбластиДанных - |ГДЕ - | ОбластиДанных.ОбластьДанныхВспомогательныеДанные = &ОбластьДанных - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ВерсииПодсистемОбластейДанных.Версия КАК Версия - |ИЗ - | РегистрСведений.ВерсииПодсистемОбластейДанных КАК ВерсииПодсистемОбластейДанных - |ГДЕ - | ВерсииПодсистемОбластейДанных.ОбластьДанныхВспомогательныеДанные = &ОбластьДанных - | И ВерсииПодсистемОбластейДанных.ИмяПодсистемы = &ИмяПодсистемы"; - Запрос.УстановитьПараметр("ИмяПодсистемы", Метаданные.Имя); - - Выборка = Результат.Выбрать(); - Пока Выборка.Следующий() Цикл - ЗначенияКлюча = Новый Структура; - ЗначенияКлюча.Вставить("ОбластьДанныхВспомогательныеДанные", Выборка.ОбластьДанных); - ЗначенияКлюча.Вставить("ИмяПодсистемы", ""); - КлючЗаписи = РаботаВМоделиСервиса.СоздатьКлючЗаписиРегистраСведенийВспомогательныхДанных( - РегистрыСведений.ВерсииПодсистемОбластейДанных, ЗначенияКлюча); - - ОшибкаУстановкиБлокировки = Ложь; - - НачатьТранзакцию(); - Попытка - Попытка - ЗаблокироватьДанныеДляРедактирования(КлючЗаписи); // Будет снята при окончании транзакции. - Исключение - ОшибкаУстановкиБлокировки = Истина; - ВызватьИсключение; - КонецПопытки; - - Запрос.УстановитьПараметр("ОбластьДанных", Выборка.ОбластьДанных); - - Блокировка = Новый БлокировкаДанных; - - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ВерсииПодсистемОбластейДанных"); - ЭлементБлокировки.УстановитьЗначение("ОбластьДанныхВспомогательныеДанные", Выборка.ОбластьДанных); - ЭлементБлокировки.УстановитьЗначение("ИмяПодсистемы", Метаданные.Имя); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; - - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОбластиДанных"); - ЭлементБлокировки.УстановитьЗначение("ОбластьДанныхВспомогательныеДанные", Выборка.ОбластьДанных); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; - - Блокировка.Заблокировать(); - - Результаты = Запрос.ВыполнитьПакет(); - - СтрокаОбласти = Неопределено; - Если НЕ Результаты[0].Пустой() Тогда - СтрокаОбласти = Результаты[0].Выгрузить()[0]; - КонецЕсли; - СтрокаВерсии = Неопределено; - Если НЕ Результаты[1].Пустой() Тогда - СтрокаВерсии = Результаты[1].Выгрузить()[0]; - КонецЕсли; - - Если СтрокаОбласти = Неопределено - ИЛИ СтрокаОбласти.Статус <> Перечисления.СтатусыОбластейДанных.Используется - ИЛИ (СтрокаВерсии <> Неопределено И СтрокаВерсии.Версия = ВерсияМетаданных) Тогда - - // Записи не соответствуют исходному критерию. - ЗафиксироватьТранзакцию(); - Продолжить; - КонецЕсли; - - ОтборЗадания = Новый Структура; - ОтборЗадания.Вставить("ИмяМетода", "ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ВыполнитьОбновлениеТекущейОбластиДанных"); - ОтборЗадания.Вставить("Ключ", "1"); - ОтборЗадания.Вставить("ОбластьДанных", Выборка.ОбластьДанных); - Задания = ОчередьЗаданий.ПолучитьЗадания(ОтборЗадания); - Если Задания.Количество() > 0 Тогда - // Уже есть задание обновления области. - ЗафиксироватьТранзакцию(); - Продолжить; - КонецЕсли; - - ПараметрыЗадания = Новый Структура; - ПараметрыЗадания.Вставить("ИмяМетода" , "ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.ВыполнитьОбновлениеТекущейОбластиДанных"); - ПараметрыЗадания.Вставить("Параметры" , Новый Массив); - ПараметрыЗадания.Вставить("Ключ" , "1"); - ПараметрыЗадания.Вставить("ОбластьДанных", Выборка.ОбластьДанных); - ПараметрыЗадания.Вставить("ЭксклюзивноеВыполнение", Истина); - ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", 3); - - ОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); - - Если БлокироватьОбласти Тогда - СоединенияИБ.УстановитьБлокировкуСеансовОбластиДанных(ПараметрыБлокировки, Ложь, Выборка.ОбластьДанных); - КонецЕсли; - - ЗафиксироватьТранзакцию(); - - Исключение - - ОтменитьТранзакцию(); - Если ОшибкаУстановкиБлокировки Тогда - Продолжить; - Иначе - ВызватьИсключение; - КонецЕсли; - - КонецПопытки; - - КонецЦикла; - -КонецПроцедуры - // Обработчик регламентного задания ОбновлениеОбластейДанных. // Выбирает все области данных с неактуальными версиями // и при необходимости формирует фоновые задания ОбновлениеИБ в них. @@ -859,32 +944,13 @@ КонецПроцедуры -// Возвращает ключ записи для регистра сведений ВерсииПодсистемОбластейДанных. -// -// Возвращаемое значение: -// РегистрСведенийКлючЗаписи. -// -Функция КлючЗаписиВерсийПодсистем() Экспорт - - ЗначенияКлюча = Новый Структура; - Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - ЗначенияКлюча.Вставить("ОбластьДанныхВспомогательныеДанные", ОбщегоНазначения.ЗначениеРазделителяСеанса()); - ЗначенияКлюча.Вставить("ИмяПодсистемы", ""); - КлючЗаписи = РаботаВМоделиСервиса.СоздатьКлючЗаписиРегистраСведенийВспомогательныхДанных( - РегистрыСведений.ВерсииПодсистемОбластейДанных, ЗначенияКлюча); - КонецЕсли; - - Возврат КлючЗаписи; - -КонецФункции - // Только для внутреннего использования. Функция МинимальнаяВерсияОбластейДанных() Экспорт УстановитьПривилегированныйРежим(Истина); Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - ВызватьИсключение НСтр("ru = 'Вызов функции ОбновлениеИнформационнойБазыСлужебныйПовтИсп.МинимальнаяВерсияИБ() + ВызватьИсключение НСтр("ru = 'Вызов функции ОбновлениеИнформационнойБазыСлужебныйВМоделиСервиса.МинимальнаяВерсияОбластейДанных() |недоступен из сеансов с установленным значением разделителей модели сервиса!'"); КонецЕсли; diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйПовтИсп/Module.bsl index f212b0b63..e42fb0769 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСлужебныйПовтИсп/Module.bsl @@ -14,6 +14,10 @@ Возврат Истина; КонецЕсли; + Если Не ОбновлениеИнформационнойБазыСлужебный.ВыполненаРегистрацияОтложенныхОбработчиковОбновления() Тогда + Возврат Истина; + КонецЕсли; + УстановитьПривилегированныйРежим(Истина); Запустить = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ЗапуститьОбновлениеИнформационнойБазы"); УстановитьПривилегированныйРежим(Ложь); diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl index 626569d03..f9daeeef9 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl @@ -158,6 +158,24 @@ КонецПроцедуры +Функция КаталогСкрипта() Экспорт + + КаталогСкрипта = ""; + Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда + ПараметрЗапускаКлиента = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ПараметрЗапуска"); + Если СтрНайти(ПараметрЗапускаКлиента, "ВыполнитьОбновлениеИЗавершитьРаботу") > 0 Тогда + СтатусОбновления = Константы.СтатусОбновленияКонфигурации.Получить().Получить(); + Если СтатусОбновления <> Неопределено + И СтатусОбновления.Свойство("КаталогСкрипта") Тогда + КаталогСкрипта = СтатусОбновления.КаталогСкрипта; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Возврат КаталогСкрипта; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентГлобальный/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииГлобальный/Module.bsl similarity index 100% rename from SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентГлобальный/Module.bsl rename to SSL/src/CommonModules/ОбновлениеКонфигурацииГлобальный/Module.bsl 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 8d3f9cf3d..47d1f5d2a 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиентГлобальный/ОбновлениеКонфигурацииКлиентГлобальный.mdo +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииГлобальный/ОбновлениеКонфигурацииГлобальный.mdo @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> <mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="19b9cbbb-1fcc-4492-9385-687742cb3d0b"> - <name>ОбновлениеКонфигурацииКлиентГлобальный</name> + <name>ОбновлениеКонфигурацииГлобальный</name> <synonym> <key>ru</key> - <value>Обновление конфигурации клиент глобальный</value> + <value>Обновление конфигурации глобальный</value> </synonym> <global>true</global> <clientManagedApplication>true</clientManagedApplication> diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl index 1ece7f1b5..be8da5811 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl @@ -169,7 +169,7 @@ // Чтение данных по обновлению из файла ИмяФайлаПроверкиНаличияОбновления (UpdInfo.txt). // Вычисляются: // номер версии обновления на сервере, -// номера версий, с которых производится обновление (раздляются символом ";") +// номера версий, с которых производится обновление (разделяются символом ";") // дата публикации обновления. // // Параметры: @@ -195,15 +195,15 @@ Если ПустаяСтрока(ВременнаяСтрока) Тогда Продолжить; КонецЕсли; - Если СтрНайти(ВременнаяСтрока,"fromversions=")>0 Тогда - ВременнаяСтрока = СокрЛП(Сред(ВременнаяСтрока,Найти(ВременнаяСтрока,"fromversions=")+СтрДлина("fromversions="))); + Если СтрНайти(ВременнаяСтрока, "fromversions=") > 0 Тогда + ВременнаяСтрока = СокрЛП(Сред(ВременнаяСтрока, СтрНайти(ВременнаяСтрока, "fromversions=") + СтрДлина("fromversions="))); ВременнаяСтрока = ?(Лев(ВременнаяСтрока,1)=";","",";") + ВременнаяСтрока + ?(Прав(ВременнаяСтрока,1)=";","",";"); - ПараметрыКомплекта.Вставить("FromVersions",ВременнаяСтрока); + ПараметрыКомплекта.Вставить("FromVersions", ВременнаяСтрока); ИначеЕсли СтрНайти(ВременнаяСтрока,"version=")>0 Тогда - ПараметрыКомплекта.Вставить("Version",Сред(ВременнаяСтрока,Найти(ВременнаяСтрока,"version=")+СтрДлина("version="))); + ПараметрыКомплекта.Вставить("Version",Сред(ВременнаяСтрока, СтрНайти(ВременнаяСтрока, "version=") + СтрДлина("version="))); ИначеЕсли СтрНайти(ВременнаяСтрока,"updatedate=")>0 Тогда // формат даты = Дата, - ВременнаяСтрока = Сред(ВременнаяСтрока,Найти(ВременнаяСтрока,"updatedate=")+СтрДлина("updatedate=")); + ВременнаяСтрока = Сред(ВременнаяСтрока, СтрНайти(ВременнаяСтрока,"updatedate=") + СтрДлина("updatedate=")); Если СтрДлина(ВременнаяСтрока)>8 Тогда Если СтрНайти(ВременнаяСтрока,".")=5 Тогда // дата в формате ГГГГ.ММ.ДД @@ -226,6 +226,8 @@ Возврат ПараметрыКомплекта; КонецФункции +// Открывает форму установки обновлений. +// Процедура ПоказатьПоискИУстановкуОбновлений(ПараметрыФормы = Неопределено) Экспорт ОткрытьФорму("Обработка.ПоискИУстановкаОбновлений.Форма.Форма", ПараметрыФормы); @@ -234,7 +236,7 @@ #КонецОбласти -#Область СлужебныеПроцедурыИФункции +#Область СлужебныйПрограммныйИнтерфейс // Обновляет конфигурацию базы данных. // @@ -249,6 +251,19 @@ КонецПроцедуры +// Записывает в каталог скрипта файл-маркер ошибки. +// +Процедура ЗаписатьФайлПротоколаОшибки(КаталогСкрипта) Экспорт + + ФайлРегистрации = Новый ЗаписьТекста(КаталогСкрипта + "error.txt"); + ФайлРегистрации.Закрыть(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + // Возвращает общие параметры обновления. // Функция ПолучитьПараметрыОбновления(ПроверитьОбновленияДляНовойРедакции = Ложь) Экспорт @@ -387,7 +402,7 @@ // Возвращаемое значение: // Строка - адрес сервиса. // -Функция АдресСервисаПроверкиЛегальности() Экспорт +Функция АдресСервисаПроверкиЛегальности() Возврат СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НастройкиОбновления.АдресСервисаПроверкиЛегальности; @@ -436,7 +451,7 @@ // ВыдаватьСообщения: Булево, признак вывода пользователю сообщений об ошибках. Процедура ПроверитьНаличиеОбновленияЧерезИнтернет(ВыдаватьСообщения = Ложь, ДоступноОбновлениеДляНовойРедакции = Ложь) Экспорт - Состояние(Нстр("ru = 'Проверка наличия обновления в Интернете'")); + Состояние(НСтр("ru = 'Проверка наличия обновления в Интернете'")); Параметры = ПолучитьДоступноеОбновлениеКонфигурации(); Если Параметры.ИсточникОбновления <> -1 Тогда ВремяПолученияОбновления = Параметры.ВремяПолученияОбновления; @@ -780,7 +795,7 @@ Иначе - Результат = СтруктураОтветаВебСервера(Нстр("ru = 'Неожиданный ответ сервиса проверки легальности получения обновлений'"), Истина); + Результат = СтруктураОтветаВебСервера(НСтр("ru = 'Неожиданный ответ сервиса проверки легальности получения обновлений'"), Истина); КонецЕсли; @@ -801,7 +816,7 @@ Если ЗаписьВЖурналРегистрации Тогда Если ПустаяСтрока(ТекстСообщения) Тогда - ТекстСообщения = Нстр("ru = '%ТекстОшибки. Код ошибки: %КодОшибки.'"); + ТекстСообщения = НСтр("ru = '%ТекстОшибки. Код ошибки: %КодОшибки.'"); ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ТекстОшибки", ТекстОшибки); ТекстСообщения = СтрЗаменить(ТекстСообщения, "%КодОшибки", КодОшибки); КонецЕсли; diff --git a/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl index 84b82ef46..cc240b3b1 100644 --- a/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl @@ -441,17 +441,9 @@ ОшибкиЗамены.Индексы.Добавить("Ссылка"); ОшибкиЗамены.Индексы.Добавить("Ссылка, ОбъектОшибки, ТипОшибки"); - ТаблицаОшибок = Новый ТаблицаЗначений; - ТаблицаОшибок.Колонки.Добавить("Дубль"); - ТаблицаОшибок.Колонки.Добавить("Оригинал"); - ТаблицаОшибок.Колонки.Добавить("МестоИспользованияПолноеИмя"); - ТаблицаОшибок.Колонки.Добавить("Кратко"); - ТаблицаОшибок.Колонки.Добавить("ИнформацияОбОшибке"); - Результат = Новый Структура; Результат.Вставить("ЕстьОшибки", Ложь); Результат.Вставить("Ошибки", ОшибкиЗамены); - Результат.Вставить("ТаблицаОшибок", ТаблицаОшибок); // Значения по умолчанию. ПараметрыВыполнения = Новый Структура; @@ -754,6 +746,9 @@ КонецФункции +// Устарела. Следует использовать ОбщегоНазначенияКлиентСервер.ДополнитьМассив, +// установив параметра ТолькоУникальныеЗначения в значение Истина. +// // Заполняет массив-приемник уникальными значениями из массива-источника. // Если элемент в массиве-приемнике уже существует, то добавления нового элемента не происходит. // @@ -763,18 +758,7 @@ // Процедура ЗаполнитьМассивУникальнымиЗначениями(МассивПриемник, МассивИсточник) Экспорт - УникальныеЗначения = Новый Соответствие; - - Для каждого Значение Из МассивПриемник Цикл - УникальныеЗначения.Вставить(Значение, Истина); - КонецЦикла; - - Для каждого Значение Из МассивИсточник Цикл - Если УникальныеЗначения[Значение] = Неопределено Тогда - МассивПриемник.Добавить(Значение); - УникальныеЗначения.Вставить(Значение, Истина); - КонецЕсли; - КонецЦикла; + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивПриемник, МассивИсточник, Истина); КонецПроцедуры @@ -812,7 +796,7 @@ // с большим количеством строк. // // Параметры: -// ТаблицаЗначений - ТаблицаЗначений +// ТаблицаЗначений - ТаблицаЗначений. // // Возвращаемое значение: // Массив @@ -845,7 +829,7 @@ // из строки таблицы значений. // // Параметры: -// СтрокаТаблицыЗначений - СтрокаТаблицыЗначений +// СтрокаТаблицыЗначений - СтрокаТаблицыЗначений. // // ВозвращаемоеЗначение: // Структура @@ -1011,9 +995,10 @@ // Функция выполняет сравнение двух коллекций строк, для которых доступен обход // посредством оператора Для каждого … Из … Цикл. // Сравниваемые коллекции должны отвечать следующим требованиям: -// - доступен обход посредством оператора Для каждого … Из … Цикл, -// - наличие в обеих коллекциях всех колонок, перечисленных в параметре ИменаКолонок +// - доступен обход посредством оператора Для каждого … Из … Цикл, +// - наличие в обеих коллекциях всех колонок, перечисленных в параметре ИменаКолонок // (если ИменаКолонок не заполнен - всех колонок). +// Так же позволяет сравнивать массивы. // // Параметры: // КоллекцияСтрок1 - КоллекцияЗначений - коллекция, отвечающая вышеописанным требованиям; @@ -1035,45 +1020,51 @@ // Функция КоллекцииИдентичны(КоллекцияСтрок1, КоллекцияСтрок2, ИменаКолонок = "", ИсключаяКолонки = "", УчитыватьПоследовательностьСтрок = Ложь) Экспорт - // Типы коллекций, для которых доступен состав колонок, - // и можно выявить, если он не задан. - ТипыОсобыхКоллекций = Новый Массив; - ТипыОсобыхКоллекций.Добавить(Тип("ТаблицаЗначений")); - ТипыОсобыхКоллекций.Добавить(Тип("СписокЗначений")); + СравниваютсяМассивы = (ТипЗнч(КоллекцияСтрок1) = Тип("Массив") + Или ТипЗнч(КоллекцияСтрок1) = Тип("ФиксированныйМассив")); - ТипыКоллекцийКлючИЗначение = Новый Массив; - ТипыКоллекцийКлючИЗначение.Добавить(Тип("Соответствие")); - ТипыКоллекцийКлючИЗначение.Добавить(Тип("Структура")); - ТипыКоллекцийКлючИЗначение.Добавить(Тип("ФиксированноеСоответствие")); - ТипыКоллекцийКлючИЗначение.Добавить(Тип("ФиксированнаяСтруктура")); - - Если ПустаяСтрока(ИменаКолонок) Тогда - Если ТипыОсобыхКоллекций.Найти(ТипЗнч(КоллекцияСтрок1)) <> Неопределено - Или ТипыКоллекцийКлючИЗначение.Найти(ТипЗнч(КоллекцияСтрок1)) <> Неопределено Тогда - СравниваемыеКолонки = Новый Массив; - Если ТипЗнч(КоллекцияСтрок1) = Тип("ТаблицаЗначений") Тогда - Для Каждого Колонка Из КоллекцияСтрок1.Колонки Цикл - СравниваемыеКолонки.Добавить(Колонка.Имя); - КонецЦикла; - ИначеЕсли ТипЗнч(КоллекцияСтрок1) = Тип("СписокЗначений") Тогда - СравниваемыеКолонки.Добавить("Значение"); - СравниваемыеКолонки.Добавить("Картинка"); - СравниваемыеКолонки.Добавить("Пометка"); - СравниваемыеКолонки.Добавить("Представление"); - ИначеЕсли ТипыКоллекцийКлючИЗначение.Найти(ТипЗнч(КоллекцияСтрок1)) <> Неопределено Тогда - СравниваемыеКолонки.Добавить("Ключ"); - СравниваемыеКолонки.Добавить("Значение"); + Если Не СравниваютсяМассивы Тогда + + // Типы коллекций, для которых доступен состав колонок, + // и можно выявить, если он не задан. + ТипыОсобыхКоллекций = Новый Массив; + ТипыОсобыхКоллекций.Добавить(Тип("ТаблицаЗначений")); + ТипыОсобыхКоллекций.Добавить(Тип("СписокЗначений")); + + ТипыКоллекцийКлючИЗначение = Новый Массив; + ТипыКоллекцийКлючИЗначение.Добавить(Тип("Соответствие")); + ТипыКоллекцийКлючИЗначение.Добавить(Тип("Структура")); + ТипыКоллекцийКлючИЗначение.Добавить(Тип("ФиксированноеСоответствие")); + ТипыКоллекцийКлючИЗначение.Добавить(Тип("ФиксированнаяСтруктура")); + + Если ПустаяСтрока(ИменаКолонок) Тогда + Если ТипыОсобыхКоллекций.Найти(ТипЗнч(КоллекцияСтрок1)) <> Неопределено + Или ТипыКоллекцийКлючИЗначение.Найти(ТипЗнч(КоллекцияСтрок1)) <> Неопределено Тогда + СравниваемыеКолонки = Новый Массив; + Если ТипЗнч(КоллекцияСтрок1) = Тип("ТаблицаЗначений") Тогда + Для Каждого Колонка Из КоллекцияСтрок1.Колонки Цикл + СравниваемыеКолонки.Добавить(Колонка.Имя); + КонецЦикла; + ИначеЕсли ТипЗнч(КоллекцияСтрок1) = Тип("СписокЗначений") Тогда + СравниваемыеКолонки.Добавить("Значение"); + СравниваемыеКолонки.Добавить("Картинка"); + СравниваемыеКолонки.Добавить("Пометка"); + СравниваемыеКолонки.Добавить("Представление"); + ИначеЕсли ТипыКоллекцийКлючИЗначение.Найти(ТипЗнч(КоллекцияСтрок1)) <> Неопределено Тогда + СравниваемыеКолонки.Добавить("Ключ"); + СравниваемыеКолонки.Добавить("Значение"); + КонецЕсли; + Иначе + ТекстИсключения = НСтр("ru = 'Для коллекции типа %1 необходимо указать имена полей, по которым производится сравнение'"); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, ТипЗнч(КоллекцияСтрок1)); КонецЕсли; Иначе - ТекстИсключения = НСтр("ru = 'Для коллекции типа %1 необходимо указать имена полей, по которым производится сравнение'"); - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, ТипЗнч(КоллекцияСтрок1)); + СравниваемыеКолонки = СтрРазделить(ИменаКолонок, ","); КонецЕсли; - Иначе - СравниваемыеКолонки = СтрРазделить(ИменаКолонок, ","); + + // Вычитаем исключаемые поля + СравниваемыеКолонки = ОбщегоНазначенияКлиентСервер.СократитьМассив(СравниваемыеКолонки, СтрРазделить(ИсключаяКолонки, ",")); КонецЕсли; - - // Вычитаем исключаемые поля - СравниваемыеКолонки = ОбщегоНазначенияКлиентСервер.СократитьМассив(СравниваемыеКолонки, СтрРазделить(ИсключаяКолонки, ",")); Если УчитыватьПоследовательностьСтрок Тогда @@ -1095,11 +1086,17 @@ Возврат Ложь; КонецЕсли; // Сравниваем значения полей двух строк. - Для Каждого ИмяКолонки Из СравниваемыеКолонки Цикл - Если СтрокаКоллекции1[ИмяКолонки] <> СтрокаКоллекции2[ИмяКолонки] Тогда + Если СравниваютсяМассивы Тогда + Если СтрокаКоллекции1 <> СтрокаКоллекции2 Тогда Возврат Ложь; КонецЕсли; - КонецЦикла; + Иначе + Для Каждого ИмяКолонки Из СравниваемыеКолонки Цикл + Если СтрокаКоллекции1[ИмяКолонки] <> СтрокаКоллекции2[ИмяКолонки] Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + КонецЕсли; НомерСтрокиКоллекции1 = НомерСтрокиКоллекции1 + 1; КонецЦикла; @@ -1126,89 +1123,106 @@ КонецЕсли; Иначе - - // Проверяем идентичность состава одинаковых строк без учета их последовательности. - // Строки отбора накапливаем по первой коллекции для того, чтобы: - // - повторно не искать одинаковые строки, - // - убедиться, что во второй коллекции ни одной такой строки, которой нет в накопленных. - - СтрокиОтбора = Новый ТаблицаЗначений; - ПараметрыОтбора = Новый Структура; - Для Каждого ИмяКолонки Из СравниваемыеКолонки Цикл - СтрокиОтбора.Колонки.Добавить(ИмяКолонки); - ПараметрыОтбора.Вставить(ИмяКолонки); - КонецЦикла; - - ЕстьСтрокиКоллекции1 = Ложь; - Для Каждого СтрокаОтбора Из КоллекцияСтрок1 Цикл + // Для массивов используется более простой алгоритм. + Если СравниваютсяМассивы Тогда - ЗаполнитьЗначенияСвойств(ПараметрыОтбора, СтрокаОтбора); - Если СтрокиОтбора.НайтиСтроки(ПараметрыОтбора).Количество() > 0 Тогда - // Строку с такими полями уже искали. - Продолжить; + Если КоллекцияСтрок1.Количество() <> КоллекцияСтрок2.Количество() Тогда + Возврат Ложь; КонецЕсли; - ЗаполнитьЗначенияСвойств(СтрокиОтбора.Добавить(), СтрокаОтбора); - // Подсчитаем количество таких строк в первой коллекции. - НайденоСтрокКоллекции1 = 0; Для Каждого СтрокаКоллекции1 Из КоллекцияСтрок1 Цикл - СтрокаПодходит = Истина; - Для Каждого ИмяКолонки Из СравниваемыеКолонки Цикл - Если СтрокаКоллекции1[ИмяКолонки] <> СтрокаОтбора[ИмяКолонки] Тогда - СтрокаПодходит = Ложь; - Прервать; - КонецЕсли; - КонецЦикла; - Если СтрокаПодходит Тогда - НайденоСтрокКоллекции1 = НайденоСтрокКоллекции1 + 1; + Если КоллекцияСтрок2.Найти(СтрокаКоллекции1) = Неопределено Тогда + Возврат Ложь; КонецЕсли; КонецЦикла; - // Подсчитаем количество таких строк во второй коллекции. - НайденоСтрокКоллекции2 = 0; - Для Каждого СтрокаКоллекции2 Из КоллекцияСтрок2 Цикл - СтрокаПодходит = Истина; - Для Каждого ИмяКолонки Из СравниваемыеКолонки Цикл - Если СтрокаКоллекции2[ИмяКолонки] <> СтрокаОтбора[ИмяКолонки] Тогда - СтрокаПодходит = Ложь; - Прервать; - КонецЕсли; - КонецЦикла; - Если СтрокаПодходит Тогда - НайденоСтрокКоллекции2 = НайденоСтрокКоллекции2 + 1; - // Если количество таких строк во второй коллекции превысило количество в первой, - // то уже можно сделать вывод, что коллекции не идентичны. - Если НайденоСтрокКоллекции2 > НайденоСтрокКоллекции1 Тогда - Возврат Ложь; - КонецЕсли; - КонецЕсли; + Иначе + + // Проверяем идентичность состава одинаковых строк без учета их последовательности. + + // Строки отбора накапливаем по первой коллекции для того, чтобы: + // - повторно не искать одинаковые строки, + // - убедиться, что во второй коллекции ни одной такой строки, которой нет в накопленных. + + СтрокиОтбора = Новый ТаблицаЗначений; + ПараметрыОтбора = Новый Структура; + Для Каждого ИмяКолонки Из СравниваемыеКолонки Цикл + СтрокиОтбора.Колонки.Добавить(ИмяКолонки); + ПараметрыОтбора.Вставить(ИмяКолонки); КонецЦикла; - // Количество таких строк не должно отличаться. - Если НайденоСтрокКоллекции1 <> НайденоСтрокКоллекции2 Тогда - Возврат Ложь; + ЕстьСтрокиКоллекции1 = Ложь; + Для Каждого СтрокаОтбора Из КоллекцияСтрок1 Цикл + + ЗаполнитьЗначенияСвойств(ПараметрыОтбора, СтрокаОтбора); + Если СтрокиОтбора.НайтиСтроки(ПараметрыОтбора).Количество() > 0 Тогда + // Строку с такими полями уже искали. + Продолжить; + КонецЕсли; + ЗаполнитьЗначенияСвойств(СтрокиОтбора.Добавить(), СтрокаОтбора); + + // Подсчитаем количество таких строк в первой коллекции. + НайденоСтрокКоллекции1 = 0; + Для Каждого СтрокаКоллекции1 Из КоллекцияСтрок1 Цикл + СтрокаПодходит = Истина; + Для Каждого ИмяКолонки Из СравниваемыеКолонки Цикл + Если СтрокаКоллекции1[ИмяКолонки] <> СтрокаОтбора[ИмяКолонки] Тогда + СтрокаПодходит = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + Если СтрокаПодходит Тогда + НайденоСтрокКоллекции1 = НайденоСтрокКоллекции1 + 1; + КонецЕсли; + КонецЦикла; + + // Подсчитаем количество таких строк во второй коллекции. + НайденоСтрокКоллекции2 = 0; + Для Каждого СтрокаКоллекции2 Из КоллекцияСтрок2 Цикл + СтрокаПодходит = Истина; + Для Каждого ИмяКолонки Из СравниваемыеКолонки Цикл + Если СтрокаКоллекции2[ИмяКолонки] <> СтрокаОтбора[ИмяКолонки] Тогда + СтрокаПодходит = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + Если СтрокаПодходит Тогда + НайденоСтрокКоллекции2 = НайденоСтрокКоллекции2 + 1; + // Если количество таких строк во второй коллекции превысило количество в первой, + // то уже можно сделать вывод, что коллекции не идентичны. + Если НайденоСтрокКоллекции2 > НайденоСтрокКоллекции1 Тогда + Возврат Ложь; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + // Количество таких строк не должно отличаться. + Если НайденоСтрокКоллекции1 <> НайденоСтрокКоллекции2 Тогда + Возврат Ложь; + КонецЕсли; + + ЕстьСтрокиКоллекции1 = Истина; + + КонецЦикла; + + // Если в первой коллекции не оказалось строк, + // то их не должно быть и во второй. + Если Не ЕстьСтрокиКоллекции1 Тогда + Для Каждого СтрокаКоллекции2 Из КоллекцияСтрок2 Цикл + Возврат Ложь; + КонецЦикла; КонецЕсли; - ЕстьСтрокиКоллекции1 = Истина; - - КонецЦикла; - - // Если в первой коллекции не оказалось строк, - // то их не должно быть и во второй. - Если Не ЕстьСтрокиКоллекции1 Тогда + // Проверим, что во второй коллекции нет ни одной такой строки, которой нет в накопленных. Для Каждого СтрокаКоллекции2 Из КоллекцияСтрок2 Цикл - Возврат Ложь; + ЗаполнитьЗначенияСвойств(ПараметрыОтбора, СтрокаКоллекции2); + Если СтрокиОтбора.НайтиСтроки(ПараметрыОтбора).Количество() = 0 Тогда + Возврат Ложь; + КонецЕсли; КонецЦикла; + КонецЕсли; - - // Проверим, что во второй коллекции нет ни одной такой строки, которой нет в накопленных. - Для Каждого СтрокаКоллекции2 Из КоллекцияСтрок2 Цикл - ЗаполнитьЗначенияСвойств(ПараметрыОтбора, СтрокаКоллекции2); - Если СтрокиОтбора.НайтиСтроки(ПараметрыОтбора).Количество() = 0 Тогда - Возврат Ложь; - КонецЕсли; - КонецЦикла; КонецЕсли; @@ -1445,7 +1459,7 @@ // // Параметры: // ТипXDTO - ТипОбъектаXDTO, ТипЗначенияXDTO - тип XDTO для которого требуется получить. -// XML представление +// XML представление. // // Возвращаемое значение: // Строка - XML представление типа XDTO. @@ -1517,7 +1531,7 @@ Если ПустаяСтрока(СтрокаСоединенияИнформационнойБазы) Тогда СтрокаСоединенияИнформационнойБазы = СтрокаСоединенияИнформационнойБазы(); КонецЕсли; - Возврат СтрНайти(Врег(СтрокаСоединенияИнформационнойБазы), "FILE=") = 1; + Возврат СтрНайти(ВРег(СтрокаСоединенияИнформационнойБазы), "FILE=") = 1; КонецФункции @@ -1890,6 +1904,28 @@ КонецФункции +// Определяет, что эта информационная база является подчиненным узлом +// распределенной информационной базы (РИБ) с фильтром. +// +// Возвращаемое значение: +// Булево +// +Функция ЭтоПодчиненныйУзелРИБСФильтром() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ПланыОбмена.ГлавныйУзел() <> Неопределено + И ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + ОбщийМодульОбменДаннымиСервер = ОбщийМодуль("ОбменДаннымиСервер"); + Если ОбщийМодульОбменДаннымиСервер.НазначениеПланаОбмена(ПланыОбмена.ГлавныйУзел().Метаданные().Имя) = "РИБСФильтром" Тогда + Возврат Истина; + КонецЕсли; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + // Определяет, что эта информационная база является подчиненным узлом // распределенной информационной базы (РИБ). // @@ -1904,6 +1940,20 @@ КонецФункции +// Возвращает признак принадлежности узла к плану обмена РИБ. +// +// Параметры: +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого требуется получить значение функции. +// +// Возвращаемое значение: +// Истина - узел принадлежит плану обмена РИБ, иначе Ложь. +// +Функция ЭтоУзелРаспределеннойИнформационнойБазы(Знач УзелИнформационнойБазы) Экспорт + + Возврат ОбщегоНазначенияПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(УзелИнформационнойБазы); + +КонецФункции + // Возвращает Истина при необходимости обновления конфигурации информационной базы подчиненного узла РИБ. // В главном узле всегда - Ложь. // @@ -2010,13 +2060,21 @@ Если РегламентноеЗадание <> Неопределено И ПодсистемаСуществует("СтандартныеПодсистемы.РегламентныеЗадания") Тогда МодульРегламентныеЗаданияСлужебный = ОбщийМодуль("РегламентныеЗаданияСлужебный"); - Доступно = МодульРегламентныеЗаданияСлужебный.РегламентноеЗаданиеДоступноПоФункциональнымОпциям(РегламентноеЗадание); + + ЗависимостиЗаданий = Неопределено; + МодульРегламентныеЗаданияСлужебный.ПроверитьВозможностьРаботыСВнешнимиРесурсами( + РегламентноеЗадание, ЗависимостиЗаданий); + + Доступно = МодульРегламентныеЗаданияСлужебный.РегламентноеЗаданиеДоступноПоФункциональнымОпциям( + РегламентноеЗадание, ЗависимостиЗаданий); Если Не Доступно Тогда ВызватьИсключение НСтр("ru = 'Регламентное задание недоступно по функциональным опциям |или не поддерживает работу в текущем режиме работы программы. |Выполнение прервано.'"); КонецЕсли; + + КонецЕсли; КонецПроцедуры @@ -2087,6 +2145,23 @@ КонецФункции +// Возвращает фрагмент текста запроса, отделяющего один запрос от другого. +// +// Возвращаемое значение: +// Строка - разделитель запросов. +// +Функция РазделительПакетаЗапросов() Экспорт + + Возврат " + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |"; + +КонецФункции + +// Устарела. Следует использовать СклонениеПредставленийОбъектов.Просклонять +// // Функция склоняет переданную фразу. // Только для работы на ОС Windows. // @@ -2109,52 +2184,20 @@ // Функция Просклонять(Знач ФИО, Падеж, Результат, Пол = Неопределено) Экспорт - ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаСклоненияФИО", "Decl"); - Компонента = Новый("AddIn.Decl.CNameDecl"); - - Результат = ""; - - МассивСтрок = СтрРазделить(ФИО, " ", Ложь); - - // Выделим первые 3 слова, так как компонента не умеет склонять фразу большую 3х символов. - НомерНесклоняемогоСимвола = 4; - Для Номер = 1 По Мин(МассивСтрок.Количество(), 3) Цикл - Если Не ФизическиеЛицаКлиентСервер.ФИОНаписаноВерно(МассивСтрок[Номер-1], Истина) Тогда - НомерНесклоняемогоСимвола = Номер; - Прервать; - КонецЕсли; - - Результат = Результат + ?(Номер > 1, " ", "") + МассивСтрок[Номер-1]; - КонецЦикла; - - Если ПустаяСтрока(Результат) Тогда - Результат = ФИО; - Возврат Ложь; + Если ПодсистемаСуществует("СтандартныеПодсистемы.СклонениеПредставленийОбъектов") Тогда + МодульСклонениеПредставленийОбъектов = ОбщийМодуль("СклонениеПредставленийОбъектов"); + + Результат = МодульСклонениеПредставленийОбъектов.ПросклонятьФИО(ФИО, Падеж, , Пол); + Если ЗначениеЗаполнено(Результат) Тогда + Возврат Истина; + Иначе + Результат = ФИО; + Возврат Ложь; + КонецЕсли; + КонецЕсли; - Попытка - Если Пол = Неопределено Тогда - Результат = Компонента.Просклонять(Результат, Падеж) + " "; - - Иначе - Результат = Компонента.Просклонять(Результат, Падеж, Пол) + " "; - - КонецЕсли; - - Исключение - Результат = ФИО; - Возврат Ложь; - - КонецПопытки; - - // Остальные символы добавим без склонения. - Для Номер = НомерНесклоняемогоСимвола По МассивСтрок.Количество() Цикл - Результат = Результат + " " + МассивСтрок[Номер-1]; - КонецЦикла; - - Результат = СокрЛП(Результат); - - Возврат Истина; + ВызватьИсключение НСтр("ru = 'Для вызова ОбщегоНазначения.Просклонять необходима подсистема «Склонение представлений объектов».'"); КонецФункции @@ -2328,7 +2371,7 @@ КонецЕсли; // Прибавить к имени сервера имя пути информационной базы. - ПозицияПоиска = СтрНайти(Врег(СтрокаСоединенияСБД), "SRVR="); + ПозицияПоиска = СтрНайти(ВРег(СтрокаСоединенияСБД), "SRVR="); Если ПозицияПоиска <> 1 Тогда Возврат Неопределено; КонецЕсли; @@ -2342,7 +2385,7 @@ СтрокаСоединенияСБД = Сред(СтрокаСоединенияСБД, ПозицияТочкиСЗапятой + 1); // Позиция имени сервера - ПозицияПоиска = СтрНайти(Врег(СтрокаСоединенияСБД), "REF="); + ПозицияПоиска = СтрНайти(ВРег(СтрокаСоединенияСБД), "REF="); Если ПозицияПоиска <> 1 Тогда Возврат Неопределено; КонецЕсли; @@ -2843,7 +2886,7 @@ // - РегистрыБухгалтерии // - РегистрыРасчета // - БизнесПроцессы -// - Задачи +// - Задачи. // // Подробнее см. в функции СвойстваКоллекцийОбъектовМетаданных() // модуля менеджера справочника ИдентификаторыОбъектовМетаданных. @@ -4545,7 +4588,7 @@ // Параметры: // ПодстрокаПоискаИдентификаторов - Строка - подстрока поиска // идентификаторов. Строка не может содержать символов -// %, _ и [ +// %, _ и [. // Процедура УдалитьЗаписиКэшаВерсий(Знач ПодстрокаПоискаИдентификаторов) Экспорт @@ -4598,10 +4641,10 @@ // // Параметры: // Владелец - ПланОбменаСсылка, СправочникСсылка - ссылка на объект информационной базы, -// представляющий объект-владелец сохраняемого пароля. -// Для объектов других типов в качестве Владельца рекомендуется использовать ссылку на -// элемент метаданных этого типа в справочнике ИдентификаторыОбъектовМетаданных. -// Например, Владелец = ОбщегоНазначения.ИдентификаторОбъектаМетаданных("РегистрСведений.АдресныеОбъекты"); +// представляющий объект-владелец сохраняемого пароля. +// Для объектов других типов в качестве Владельца рекомендуется использовать ссылку на +// элемент метаданных этого типа в справочнике ИдентификаторыОбъектовМетаданных. +// Например, Владелец = ОбщегоНазначения.ИдентификаторОбъектаМетаданных("РегистрСведений.АдресныеОбъекты"); // Данные - Произвольный - Данные помещаемые в безопасное хранилище. Неопределенно - удаляет данные. // Ключ - Строка - Ключ сохраняемых настроек, по умолчанию "Пароль". // @@ -4625,6 +4668,9 @@ Если Данные <> Неопределено Тогда Если БезопасноеХранилищеДанных.Выбран() Тогда ДанныеДляСохранения = БезопасноеХранилищеДанных.Данные.Получить(); + Если ТипЗнч(ДанныеДляСохранения) <> Тип("Структура") Тогда + ДанныеДляСохранения = Новый Структура(); + КонецЕсли; ДанныеДляСохранения.Вставить(Ключ, Данные); ДанныеДляХранилищеЗначения = Новый ХранилищеЗначения(ДанныеДляСохранения, Новый СжатиеДанных(6)); БезопасноеХранилищеДанных.Данные = ДанныеДляХранилищеЗначения; @@ -4715,7 +4761,7 @@ ДанныеДляСохранения = БезопасноеХранилищеДанных.Данные.Получить(); Для каждого КлючДляУдаления Из СписокКлючей Цикл Если ДанныеДляСохранения.Свойство(КлючДляУдаления) Тогда - ДанныеДляСохранения.Удалить(Ключи); + ДанныеДляСохранения.Удалить(КлючДляУдаления); КонецЕсли; КонецЦикла; ДанныеДляХранилищеЗначения = Новый ХранилищеЗначения(ДанныеДляСохранения, Новый СжатиеДанных(6)); @@ -4786,6 +4832,122 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для работы с буфером обмена. + +// Помещает выделенные строки табличной части в буфер обмена. +// +// Параметры: +// ТабличнаяЧасть - ДанныеФормыКоллекция - Табличная часть, строки которой +// необходимо поместить в буфер обмена. +// ВыделенныеСтроки - Массив - Массив идентификаторов выделенных строк. +// Источник - Строка - Произвольный строковый идентификатор, например, имя объекта, +// строки табличной части которого помещаются в буфер обмена. +// +Процедура СкопироватьСтрокиВБуферОбмена(ТабличнаяЧасть, ВыделенныеСтроки, Источник = Неопределено) Экспорт + + Если ВыделенныеСтроки = Неопределено Тогда + Возврат; + КонецЕсли; + + ТаблицаЗначений = ТабличнаяЧасть.Выгрузить(); + ТаблицаЗначений.Очистить(); + + УдаляемыеКолонки = Новый Массив; + УдаляемыеКолонки.Добавить("ИсходныйНомерСтроки"); + УдаляемыеКолонки.Добавить("НомерСтроки"); + + Для Каждого ИмяКолонки Из УдаляемыеКолонки Цикл + Колонка = ТаблицаЗначений.Колонки.Найти(ИмяКолонки); + Если Колонка = Неопределено Тогда + Продолжить; + КонецЕсли; + + ТаблицаЗначений.Колонки.Удалить(Колонка); + КонецЦикла; + + Для Каждого ИдентификаторСтроки Из ВыделенныеСтроки Цикл + КопируемаяСтрока = ТабличнаяЧасть.НайтиПоИдентификатору(ИдентификаторСтроки); + ЗаполнитьЗначенияСвойств(ТаблицаЗначений.Добавить(), КопируемаяСтрока); + КонецЦикла; + + СкопироватьВБуферОбмена(ТаблицаЗначений, Источник); + +КонецПроцедуры + +// Помещает произвольные данные в буфер обмена. +// +// Параметры: +// Данные - Произвольный - Данные, которые необходимо поместить в буфер обмена. +// Источник - Строка - Произвольный строковый идентификатор, например, имя объекта, +// строки табличной части которого помещаются в буфер обмена. +// +Процедура СкопироватьВБуферОбмена(Данные, Источник = Неопределено) Экспорт + + ТекущийБуферОбмена = ПараметрыСеанса.БуферОбмена; + + Если ЗначениеЗаполнено(ТекущийБуферОбмена.Данные) Тогда + Адрес = ТекущийБуферОбмена.Данные; + Иначе + Адрес = Новый УникальныйИдентификатор; + КонецЕсли; + + ДанныеВХранилище = ПоместитьВоВременноеХранилище(Данные, Адрес); + + СтруктураБуфераОбмена = Новый Структура; + СтруктураБуфераОбмена.Вставить("Источник", Источник); + СтруктураБуфераОбмена.Вставить("Данные", ДанныеВХранилище); + + ПараметрыСеанса.БуферОбмена = Новый ФиксированнаяСтруктура(СтруктураБуфераОбмена); + +КонецПроцедуры + +// Получает строки табличной части, помещенные в буфер обмена. +// +// Возвращаемое значение: +// Структура - со свойствами: +// * Данные - Произвольный - Данные из буфера обмена. +// Например, ТаблицаЗначений при вызове СкопироватьСтрокиВБуферОбмена. +// * Источник - Строка - Объект, к которому относятся данные. +// Если при помещении в буфер не был указан, то Неопределено. +// +Функция СтрокиИзБуфераОбмена() Экспорт + + Результат = Новый Структура; + Результат.Вставить("Источник", Неопределено); + Результат.Вставить("Данные", Неопределено); + + Если ПустойБуферОбмена() Тогда + Возврат Результат; + КонецЕсли; + + ТекущийБуферОбмена = ПараметрыСеанса.БуферОбмена; + Результат.Источник = ТекущийБуферОбмена.Источник; + Результат.Данные = ПолучитьИзВременногоХранилища(ТекущийБуферОбмена.Данные); + + Возврат Результат; +КонецФункции + +// Проверяет наличие сохраненных данных в буфере обмена. +// +// Параметры: +// Источник - Строка - Если передан, то проверяется наличие данных +// в буфере обмена с этим ключем. +// По умолчанию - Неопределено. +// Возвращаемое значение: +// Булево. +// +Функция ПустойБуферОбмена(Источник = Неопределено) Экспорт + + ТекущийБуферОбмена = ПараметрыСеанса.БуферОбмена; + ИсточникСовпадает = Истина; + Если Источник <> Неопределено Тогда + ИсточникСовпадает = (Источник = ТекущийБуферОбмена.Источник); + КонецЕсли; + Возврат (Не ИсточникСовпадает Или Не ЗначениеЗаполнено(ТекущийБуферОбмена.Данные)); + +КонецФункции + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -4810,6 +4972,27 @@ КонецФункции +// Выгружает запрос в строку XML, которую можно вставить в Консоль запросов. +// Для переноса запроса и всех его параметров в Консоль запросов, необходимо вызвать функцию в окне +// «Вычислить выражение»(Shift + F9), скопировать полученный XML в поле "Текст запроса" +// консоли запросов и выполнить команду "Заполнить из XML" из меню "Еще". +// Подробнее об использование функции смотрите в справке к консоли запросов. +// +// Параметры: +// Запрос - Запрос - Запрос, который необходимо выгрузить в формат строки XML. +// +// Возвращаемое значение: +// Строка - строка в формате XML, которую можно извлечь при помощи метода "ОбщегоНазначения.ЗначениеИзСтрокиXML". +// После извлечения получится объект типа "Структура" с полями: +// * Текст - Строка - Текст запроса. +// * Параметры - Структура - Параметры запроса. +// +Функция ЗапросВСтрокуXML(Запрос) Экспорт + Структура = Новый Структура("Текст, Параметры"); + ЗаполнитьЗначенияСвойств(Структура, Запрос); + Возврат ЗначениеВСтрокуXML(Структура); +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -4846,6 +5029,7 @@ |ГДЕ | ТаблицаКэша.Идентификатор = &Идентификатор | И ТаблицаКэша.ТипДанных = &ТипДанных"; + Идентификатор = Идентификатор; Запрос.УстановитьПараметр("Идентификатор", Идентификатор); Запрос.УстановитьПараметр("ТипДанных", ТипДанных); @@ -4960,7 +5144,7 @@ // Возвращаемое значение: // Строка - идентификатор записи кэша версий. // -Функция ИдентификаторЗаписиКэшаВерсий(Знач Адрес, Знач Имя) Экспорт +Функция ИдентификаторЗаписиКэшаВерсий(Знач Адрес, Знач Имя) Возврат Адрес + "|" + Имя; @@ -5088,8 +5272,12 @@ РезультатЗапроса = Запрос.Выполнить().Выбрать(); Если РезультатЗапроса.Следующий() Тогда - СохраненныеДанные = РезультатЗапроса.Данные.Получить(); - ЗаполнитьЗначенияСвойств(Результат, СохраненныеДанные); + Если ЗначениеЗаполнено(РезультатЗапроса.Данные) Тогда + СохраненныеДанные = РезультатЗапроса.Данные.Получить(); + Если ЗначениеЗаполнено(СохраненныеДанные) Тогда + ЗаполнитьЗначенияСвойств(Результат, СохраненныеДанные); + КонецЕсли; + КонецЕсли; КонецЕсли; Возврат Результат; @@ -5449,7 +5637,7 @@ // Параметры: // ИспользованиеРазделителя - Булево - Истина разделение используется, иначе нет. Возвращаемый параметр. // -Процедура ПриПолученииИспользованияРазделителяСеанса(ИспользованиеРазделителя) Экспорт +Процедура ПриПолученииИспользованияРазделителяСеанса(ИспользованиеРазделителя) Если ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда МодульРаботаВМоделиСервиса = ОбщийМодуль("РаботаВМоделиСервиса"); @@ -6768,7 +6956,7 @@ КонецПроцедуры Функция СобытиеЖурналаРегистрацииЗаменыСсылок() - Возврат НСтр("ru='Поиск и удаление ссылок'", Метаданные.ОсновнойЯзык.КодЯзыка); + Возврат НСтр("ru='Поиск и удаление ссылок'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); КонецФункции Процедура ЗаменитьСсылкиКороткимиТранзакциями(Результат, Знач ПараметрыВыполнения, Знач Дубли, Знач ТаблицаПоиска) @@ -7028,14 +7216,6 @@ Процедура ЗарегистрироватьОшибкуВТаблицу(Результат, Дубль, Оригинал, Данные, Информация, ТипОшибки, ИнформацияОбОшибке) Результат.ЕстьОшибки = Истина; - ОшибкаВНовомФормате = Результат.ТаблицаОшибок.Добавить(); - ОшибкаВНовомФормате.Дубль = Дубль; - ОшибкаВНовомФормате.Оригинал = Оригинал; - ОшибкаВНовомФормате.Данные = Данные; - ОшибкаВНовомФормате.Информация = Информация; - ОшибкаВНовомФормате.ТипОшибки = ТипОшибки; - ОшибкаВНовомФормате.ИнформацияОбОшибке = ИнформацияОбОшибке; - ЗаписьЖурналаРегистрации( СобытиеЖурналаРегистрацииЗаменыСсылок(), УровеньЖурналаРегистрации.Ошибка, @@ -7044,37 +7224,37 @@ ПолноеПредставлениеДанных = Строка(Данные) + " (" + Информация.ПредставлениеЭлемента + ")"; - ОшибкаВСтаромФормате = Результат.Ошибки.Добавить(); - ОшибкаВСтаромФормате.Ссылка = Дубль; - ОшибкаВСтаромФормате.ОбъектОшибки = Данные; - ОшибкаВСтаромФормате.ПредставлениеОбъектаОшибки = ПолноеПредставлениеДанных; + Ошибка = Результат.Ошибки.Добавить(); + Ошибка.Ссылка = Дубль; + Ошибка.ОбъектОшибки = Данные; + Ошибка.ПредставлениеОбъектаОшибки = ПолноеПредставлениеДанных; Если ТипОшибки = "БлокировкаДляРегистра" Тогда НовыйШаблон = НСтр("ru = 'Не удалось начать редактирование %1: %2'"); - ОшибкаВСтаромФормате.ТипОшибки = "ОшибкаБлокировки"; + Ошибка.ТипОшибки = "ОшибкаБлокировки"; ИначеЕсли ТипОшибки = "БлокировкаДляУдаленияДубля" Тогда НовыйШаблон = НСтр("ru = 'Не удалось начать удаление: %2'"); - ОшибкаВСтаромФормате.ТипОшибки = "ОшибкаБлокировки"; + Ошибка.ТипОшибки = "ОшибкаБлокировки"; ИначеЕсли ТипОшибки = "УдалитьНаборДубля" Тогда НовыйШаблон = НСтр("ru = 'Не удалось очистить сведения о дубле в %1: %2'"); - ОшибкаВСтаромФормате.ТипОшибки = "ОшибкаЗаписи"; + Ошибка.ТипОшибки = "ОшибкаЗаписи"; ИначеЕсли ТипОшибки = "ЗаписатьНаборОригинала" Тогда НовыйШаблон = НСтр("ru = 'Не удалось обновить сведения в %1: %2'"); - ОшибкаВСтаромФормате.ТипОшибки = "ОшибкаЗаписи"; + Ошибка.ТипОшибки = "ОшибкаЗаписи"; Иначе НовыйШаблон = ТипОшибки + " (%1): %2"; - ОшибкаВСтаромФормате.ТипОшибки = ТипОшибки; + Ошибка.ТипОшибки = ТипОшибки; КонецЕсли; НовыйШаблон = НовыйШаблон + Символы.ПС + Символы.ПС + НСтр("ru = 'Подробности в журнале регистрации.'"); КраткоеПредставление = СтандартныеПодсистемыКлиентСервер.ИсходнаяПричинаОшибки(ИнформацияОбОшибке); - ОшибкаВСтаромФормате.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НовыйШаблон, ПолноеПредставлениеДанных, КраткоеПредставление); + Ошибка.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НовыйШаблон, ПолноеПредставлениеДанных, КраткоеПредставление); КонецПроцедуры // Формирует информацию о типе объекта метаданных, как то: полное имя, представления, вид и т.п. -Функция ИнформацияОТипе(ПолноеИмяИлиМетаданныеИлиТип, ПараметрыВыполнения) Экспорт +Функция ИнформацияОТипе(ПолноеИмяИлиМетаданныеИлиТип, Кэш) ТипПервогоПараметра = ТипЗнч(ПолноеИмяИлиМетаданныеИлиТип); Если ТипПервогоПараметра = Тип("Строка") Тогда ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмяИлиМетаданныеИлиТип); @@ -7087,12 +7267,15 @@ КонецЕсли; ПолноеИмя = ВРег(ОбъектМетаданных.ПолноеИмя()); - Если Не ПараметрыВыполнения.Свойство("ИнформацияОТипах") Тогда - ПараметрыВыполнения.Вставить("ИнформацияОТипах", Новый Соответствие); - КонецЕсли; - Информация = ПараметрыВыполнения.ИнформацияОТипах.Получить(ПолноеИмя); // Кэш. - Если Информация <> Неопределено Тогда - Возврат Информация; + ИнформацияОТипах = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Кэш, "ИнформацияОТипах"); + Если ИнформацияОТипах = Неопределено Тогда + ИнформацияОТипах = Новый Соответствие; + Кэш.Вставить("ИнформацияОТипах", ИнформацияОТипах); + Иначе + Информация = ИнформацияОТипах.Получить(ПолноеИмя); + Если Информация <> Неопределено Тогда + Возврат Информация; + КонецЕсли; КонецЕсли; Информация = Новый Структура("ПолноеИмя, ПредставлениеЭлемента, ПредставлениеСписка, @@ -7100,7 +7283,7 @@ |Иерархический, |ЕстьПодчиненные, ИменаПодчиненных, |Измерения, Реквизиты, Ресурсы"); - ПараметрыВыполнения.ИнформацияОТипах.Вставить(ПолноеИмя, Информация); + ИнформацияОТипах.Вставить(ПолноеИмя, Информация); // Заполнение базовой информации. Информация.ПолноеИмя = ПолноеИмя; @@ -7171,17 +7354,17 @@ Информация.Разделенный = Ложь; Иначе Информация.Технический = Ложь; - Если Не ПараметрыВыполнения.Свойство("МодельСервиса") Тогда - ПараметрыВыполнения.Вставить("МодельСервиса", ОбщегоНазначенияПовтИсп.РазделениеВключено()); - Если ПараметрыВыполнения.МодельСервиса Тогда - ПараметрыВыполнения.Вставить("ВОбластиДанных", ИспользованиеРазделителяСеанса()); - ПараметрыВыполнения.Вставить("РазделительОсновныхДанных", ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных()); - ПараметрыВыполнения.Вставить("РазделительВспомогательныхДанных", ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных()); + Если Не Кэш.Свойство("МодельСервиса") Тогда + Кэш.Вставить("МодельСервиса", ОбщегоНазначенияПовтИсп.РазделениеВключено()); + Если Кэш.МодельСервиса Тогда + Кэш.Вставить("ВОбластиДанных", ИспользованиеРазделителяСеанса()); + Кэш.Вставить("РазделительОсновныхДанных", ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных()); + Кэш.Вставить("РазделительВспомогательныхДанных", ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных()); КонецЕсли; КонецЕсли; - Если ПараметрыВыполнения.МодельСервиса Тогда - Информация.Разделенный = ЭтоРазделенныйОбъектМетаданных(ОбъектМетаданных, ПараметрыВыполнения.РазделительОсновныхДанных) - Или ЭтоРазделенныйОбъектМетаданных(ОбъектМетаданных, ПараметрыВыполнения.РазделительВспомогательныхДанных); + Если Кэш.МодельСервиса Тогда + Информация.Разделенный = ЭтоРазделенныйОбъектМетаданных(ОбъектМетаданных, Кэш.РазделительОсновныхДанных) + Или ЭтоРазделенныйОбъектМетаданных(ОбъектМетаданных, Кэш.РазделительВспомогательныхДанных); КонецЕсли; КонецЕсли; @@ -7200,6 +7383,20 @@ КонецЦикла; КонецЕсли; КонецЦикла; + Если Информация.Вид = "РЕГИСТРСВЕДЕНИЙ" + И ОбъектМетаданных.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда + ИнформацияПоРеквизиту = Новый Структура("Ведущее, Представление, Формат, Тип, ЗначениеПоУмолчанию, ЗаполнятьИзДанныхЗаполнения"); + ИнформацияПоРеквизиту.Ведущее = Ложь; + ИнформацияПоРеквизиту.ЗаполнятьИзДанныхЗаполнения = Ложь; + Если ОбъектМетаданных.ПериодичностьРегистраСведений = Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.ПозицияРегистратора Тогда + ИнформацияПоРеквизиту.Тип = Новый ОписаниеТипов("МоментВремени"); + ИначеЕсли ОбъектМетаданных.ПериодичностьРегистраСведений = Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Секунда Тогда + ИнформацияПоРеквизиту.Тип = Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя)); + Иначе + ИнформацияПоРеквизиту.Тип = Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.Дата)); + КонецЕсли; + Информация.Измерения.Вставить("Период", ИнформацияПоРеквизиту); + КонецЕсли; Возврат Информация; КонецФункции diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl index 098968589..7a4a8d386 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl @@ -244,7 +244,7 @@ // Функция КлиентПодключенЧерезВебСервер() Экспорт - Возврат СтрНайти(Врег(СтрокаСоединенияИнформационнойБазы()), "WS=") = 1; + Возврат СтрНайти(ВРег(СтрокаСоединенияИнформационнойБазы()), "WS=") = 1; КонецФункции @@ -547,24 +547,6 @@ //////////////////////////////////////////////////////////////////////////////// // Получение обработчиков клиентских событий. -// Возвращает обработчики указанного клиентского события. -// -// Параметры: -// Событие - Строка, например, -// "СтандартныеПодсистемы.БазоваяФункциональность\ПриНачалеРаботыСистемы". -// -// Возвращаемое значение: -// ФиксированныйМассив со значениями типа. -// ФиксированнаяСтруктура со свойствами: -// * Версия - Строка - версия обработчика, например, "2.1.3.4". Пустая строка, если не указана. -// * Модуль - ОбщийМодуль - серверный общий модуль. -// -Функция ОбработчикиСобытия(Событие) Экспорт - - Возврат СтандартныеПодсистемыКлиентПовтИсп.ОбработчикиКлиентскогоСобытия(Событие, Ложь); - -КонецФункции - // Возвращает обработчики указанного клиентского служебного события. // // Параметры: diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl index 5d295abda..d71ec6e45 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl @@ -137,6 +137,8 @@ // ПриЗапуске - Булево - Истина, если вызывается при начале работы программы. Процедура ПриУстановкеЗаголовкаКлиентскогоПриложения(ЗаголовокПриложения, ПриЗапуске) Экспорт + + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl index 750a18e2b..06c078446 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl @@ -301,11 +301,28 @@ // Процедура ДополнитьМассив(МассивПриемник, МассивИсточник, ТолькоУникальныеЗначения = Ложь) Экспорт - Для Каждого Значение Из МассивИсточник Цикл - Если Не ТолькоУникальныеЗначения Или МассивПриемник.Найти(Значение) = Неопределено Тогда + Если ТолькоУникальныеЗначения Тогда + + УникальныеЗначения = Новый Соответствие; + + Для Каждого Значение Из МассивПриемник Цикл + УникальныеЗначения.Вставить(Значение, Истина); + КонецЦикла; + + Для Каждого Значение Из МассивИсточник Цикл + Если УникальныеЗначения[Значение] = Неопределено Тогда + МассивПриемник.Добавить(Значение); + УникальныеЗначения.Вставить(Значение, Истина); + КонецЕсли; + КонецЦикла; + + Иначе + + Для Каждого Значение Из МассивИсточник Цикл МассивПриемник.Добавить(Значение); - КонецЕсли; - КонецЦикла; + КонецЦикла; + + КонецЕсли; КонецПроцедуры @@ -1163,7 +1180,7 @@ // Примеры использования: // Результат = ДобавитьКонечныйРазделительПути("C:\Мой каталог"); // возвращает "C:\Мой каталог\". // Результат = ДобавитьКонечныйРазделительПути("C:\Мой каталог\"); // возвращает "C:\Мой каталог\". -// Результат = ДобавитьКонечныйРазделительПути("%APPDATA%"); // возвращает "%APPDATA%\" +// Результат = ДобавитьКонечныйРазделительПути("%APPDATA%"); // возвращает "%APPDATA%\". // Функция ДобавитьКонечныйРазделительПути(Знач ПутьКаталога, Знач Удалить_Платформа = Неопределено) Экспорт Если ПустаяСтрока(ПутьКаталога) Тогда @@ -1194,7 +1211,7 @@ Слэш = ""; Если (Прав(ИмяКаталога, 1) <> "\") И (Прав(ИмяКаталога, 1) <> "/") Тогда - Слэш = ?(Найти(ИмяКаталога, "\") = 0, "/", "\"); + Слэш = ?(СтрНайти(ИмяКаталога, "\") = 0, "/", "\"); КонецЕсли; Возврат ИмяКаталога + Слэш + ИмяФайла; @@ -1471,6 +1488,7 @@ Функция ПолучитьНедопустимыеСимволыВИмениФайла() Экспорт НедопустимыеСимволы = """/\[]:;|=?*<>"; + НедопустимыеСимволы = НедопустимыеСимволы + Символы.Таб; Возврат НедопустимыеСимволы; КонецФункции @@ -1560,10 +1578,13 @@ // Допустимые символы для псевдонима (display-name). Буквы = "abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя"; Цифры = "0123456789"; - ДополнительныеСимволы = "._- "; + ДополнительныеСимволы = "._- :+"""; // Выделяем из строки адреса (mailbox'а) псевдоним (display-name) и адрес (addr-spec). Для Каждого СтрокаАдреса Из МассивАдресов Цикл + Если ПустаяСтрока(СтрокаАдреса) Тогда + Продолжить; + КонецЕсли; Псевдоним = ""; Адрес = ""; @@ -1615,6 +1636,7 @@ // // Параметры: // Адрес - Строка - проверяемый email. +// РазрешитьЛокальныеАдреса - Булево - не выдавать ошибку в случае отсутствия зоны домена в адресе. // // Возвращаемое значение: // Булево - Истина, если ошибок нет. @@ -1624,28 +1646,18 @@ // Допустимые символы для email. Буквы = "abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя"; Цифры = "0123456789"; - СпецСимволы = ".@_-"; - - // Проверяем любые сочетания спецсимволов. - Если СтрДлина(СпецСимволы) > 1 Тогда - Для Позиция1 = 1 По СтрДлина(СпецСимволы)-1 Цикл - Символ1 = Сред(СпецСимволы, Позиция1, 1); - Для Позиция2 = Позиция1 + 1 По СтрДлина(СпецСимволы) Цикл - Символ2 = Сред(СпецСимволы, Позиция2, 1); - Комбинация1 = Символ1 + Символ2; - Комбинация2 = Символ2 + Символ1; - Если СтрНайти(Адрес, Комбинация1) > 0 Или СтрНайти(Адрес, Комбинация2) > 0 Тогда - Возврат Ложь; - КонецЕсли; - КонецЦикла; - КонецЦикла; - КонецЕсли; + СпецСимволы = ".@_-:+"; // проверяем символ @ Если СтрЧислоВхождений(Адрес, "@") <> 1 Тогда Возврат Ложь; КонецЕсли; - + + // Разрешаем двоеточие только один раз. + Если СтрЧислоВхождений(Адрес, ":") > 1 Тогда + Возврат Ложь; + КонецЕсли; + // проверяем две точки подряд Если СтрНайти(Адрес, "..") > 0 Тогда Возврат Ложь; @@ -1673,8 +1685,8 @@ Возврат Ложь; КонецЕсли; - // Проверяем наличие спецсимволов в начале и в конце частей адреса. - Если ЕстьСимволыВНачалеВКонце(ЛокальноеИмя, СпецСимволы) Или ЕстьСимволыВНачалеВКонце(Домен, СпецСимволы) Тогда + // Проверяем наличие спецсимволов в начале и в конце домена. + Если ЕстьСимволыВНачалеВКонце(Домен, СпецСимволы) Тогда Возврат Ложь; КонецЕсли; @@ -1688,6 +1700,16 @@ Возврат Ложь; КонецЕсли; + // В домене не должно быть символа двоеточие. + Если СтрНайти(Домен,":") > 0 Тогда + Возврат Ложь; + КонецЕсли; + + // В домене не должно быть символа "плюс". + Если СтрНайти(Домен,"+") > 0 Тогда + Возврат Ложь; + КонецЕсли; + // Выделяем зону (TLD) из имени домена. Зона = Домен; Позиция = СтрНайти(Зона,"."); @@ -1730,7 +1752,7 @@ Результат = Новый Массив; - НедопустимыеСимволы = "!#$%^&*()+`~|\/="; + НедопустимыеСимволы = "!#$%^&*()`~|\/="; СообщениеНедопустимыеСимволы = НСтр("ru = 'Недопустимый символ ""%1"" в адресе электронной почты ""%2""'"); СообщениеНеверныйФорматПочтовогоАдреса = НСтр("ru = 'Некорректный адрес электронной почты ""%1""'"); @@ -2291,7 +2313,7 @@ // Например: // "Справочник.ВидыКонтактнойИнформации.EmailПользователя" // "ПланСчетов.Хозрасчетный.Материалы" -// "ПланВидовРасчета.Начисления.ОплатаПоОкладу" +// "ПланВидовРасчета.Начисления.ОплатаПоОкладу". // // Возвращаемое значение: // ЛюбаяСсылка - ссылка на предопределенный элемент. @@ -2638,10 +2660,6 @@ Процедура ПроверитьПараметр(Знач ИмяПроцедурыИлиФункции, Знач ИмяПараметра, Знач ЗначениеПараметра, Знач ОжидаемыеТипы, Знач ОжидаемыеТипыСвойств = Неопределено) Экспорт - Если Не РежимОтладки() Тогда - Возврат; - КонецЕсли; - Контекст = "ОбщегоНазначенияКлиентСервер.ПроверитьПараметр"; Проверить(ТипЗнч(ИмяПроцедурыИлиФункции) = Тип("Строка"), НСтр("ru = 'Недопустимо значение параметра ИмяПроцедурыИлиФункции'"), Контекст); diff --git a/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl index 2091f8c44..8db0eae85 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl @@ -16,6 +16,8 @@ // Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт + + КонецПроцедуры // Объекты метаданных, содержимое которых не должно учитывается в бизнес-логике приложения. @@ -111,6 +113,8 @@ // Процедура ПараметрыРаботыКлиента(Параметры) Экспорт + + КонецПроцедуры // Возвращает структуру параметров, необходимых для работы клиентского кода diff --git a/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl index 3cdfdd68a..42f762a0a 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl @@ -413,6 +413,20 @@ КонецФункции +// Возвращает признак принадлежности узла к плану обмена РИБ. +// +// Параметры: +// УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого требуется получить значение функции. +// +// Возвращаемое значение: +// Истина - узел принадлежит плану обмена РИБ, иначе Ложь. +// +Функция ЭтоУзелРаспределеннойИнформационнойБазы(УзелИнформационнойБазы) Экспорт + + Возврат УзелИнформационнойБазы.Метаданные().РаспределеннаяИнформационнаяБаза; + +КонецФункции + // Возвращает Истина, если программа работает в режиме автономного рабочего места. Функция ЭтоАвтономноеРабочееМесто() Экспорт @@ -521,7 +535,7 @@ Задания = ФоновыеЗадания.ПолучитьФоновыеЗадания(ОтборЗаданий); Если Задания.Количество() = 0 Тогда // Запустим новое. - СтандартныеПодсистемыСервер.ЗапуститьФоновоеЗаданиеСКонтекстомКлиента(ИмяМетодаЗадания, + ДлительныеОперации.ЗапуститьФоновоеЗаданиеСКонтекстомКлиента(ИмяМетодаЗадания, ПараметрыЗадания,, НаименованиеЗадания); КонецЕсли; КонецЕсли; @@ -556,7 +570,6 @@ Возврат Выборка.Данные.Получить(); КонецФункции - // Возвращает объект WSОпределения созданный с переданными параметрами. // // Параметры: diff --git a/SSL/src/CommonModules/ОтправкаSMSКлиент/Module.bsl b/SSL/src/CommonModules/ОтправкаSMSКлиент/Module.bsl index 0d2a7c24a..9d164debf 100644 --- a/SSL/src/CommonModules/ОтправкаSMSКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОтправкаSMSКлиент/Module.bsl @@ -16,7 +16,18 @@ ПараметрыОтправки = Новый Структура("НомераПолучателей, Текст, ДополнительныеПараметры, ПараметрыРаботыКлиента"); ПараметрыОтправки.НомераПолучателей = НомераПолучателей; ПараметрыОтправки.Текст = Текст; - ПараметрыОтправки.ДополнительныеПараметры = ДополнительныеПараметры; + Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") Тогда + ПараметрыОтправки.ДополнительныеПараметры = ДополнительныеПараметры; + Иначе + ПараметрыОтправки.ДополнительныеПараметры = Новый Структура; + КонецЕсли; + Если НЕ ПараметрыОтправки.ДополнительныеПараметры.Свойство("ПеревестиВТранслит") Тогда + ПараметрыОтправки.ДополнительныеПараметры.Добавить("ПеревестиВТранслит", Ложь); + КонецЕсли; + Если НЕ ПараметрыОтправки.ДополнительныеПараметры.Свойство("ИсточникКонтактнойИнформации") Тогда + ПараметрыОтправки.ДополнительныеПараметры.Добавить("ИсточникКонтактнойИнформации", ""); + КонецЕсли; + ОписаниеОповещения = Новый ОписаниеОповещения("СоздатьНовоеSMSПроверкаНастроекВыполнена", ЭтотОбъект, ПараметрыОтправки); ПроверитьНаличиеНастроекДляОтправкиSMS(ОписаниеОповещения); КонецЕсли; @@ -33,7 +44,7 @@ // Параметры: // ОбработчикРезультата - ОписаниеОповещение - процедура, в которую необходимо передать выполнение кода после проверки. // -Процедура ПроверитьНаличиеНастроекДляОтправкиSMS(ОбработчикРезультата) Экспорт +Процедура ПроверитьНаличиеНастроекДляОтправкиSMS(ОбработчикРезультата) ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); Если ПараметрыРаботыКлиента.ДоступнаОтправкаSMS Тогда @@ -66,7 +77,7 @@ И ПараметрыРаботыКлиента.ИспользоватьПрочиеВзаимодействия Тогда Адресаты = Новый Массив; Для каждого ЭлементМассива Из ПараметрыОтправки.НомераПолучателей Цикл - Телефон = Новый Структура("Телефон, Представление, ИсточникКонтактнойИнформации", ЭлементМассива, ЭлементМассива, ""); + Телефон = Новый Структура("Телефон, Представление, ИсточникКонтактнойИнформации", ЭлементМассива, ЭлементМассива, ПараметрыОтправки.ДополнительныеПараметры.ИсточникКонтактнойИнформации); Адресаты.Добавить(Телефон); КонецЦикла; МодульВзаимодействияКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВзаимодействияКлиент"); diff --git a/SSL/src/CommonModules/ОтправкаSMSКлиент/ОтправкаSMSКлиент.mdo b/SSL/src/CommonModules/ОтправкаSMSКлиент/ОтправкаSMSКлиент.mdo index 5b9796cb4..147c7a89d 100644 --- a/SSL/src/CommonModules/ОтправкаSMSКлиент/ОтправкаSMSКлиент.mdo +++ b/SSL/src/CommonModules/ОтправкаSMSКлиент/ОтправкаSMSКлиент.mdo @@ -6,4 +6,5 @@ <value>Отправка SMSКлиент</value> </synonym> <clientManagedApplication>true</clientManagedApplication> + <clientOrdinaryApplication>true</clientOrdinaryApplication> </mdclass:CommonModule> diff --git a/SSL/src/CommonModules/ОтправкаSMSКлиентПереопределяемый/ОтправкаSMSКлиентПереопределяемый.mdo b/SSL/src/CommonModules/ОтправкаSMSКлиентПереопределяемый/ОтправкаSMSКлиентПереопределяемый.mdo index 6f202104c..25e522dd6 100644 --- a/SSL/src/CommonModules/ОтправкаSMSКлиентПереопределяемый/ОтправкаSMSКлиентПереопределяемый.mdo +++ b/SSL/src/CommonModules/ОтправкаSMSКлиентПереопределяемый/ОтправкаSMSКлиентПереопределяемый.mdo @@ -6,4 +6,5 @@ <value>Отправка SMSКлиент переопределяемый</value> </synonym> <clientManagedApplication>true</clientManagedApplication> + <clientOrdinaryApplication>true</clientOrdinaryApplication> </mdclass:CommonModule> diff --git a/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl b/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl index 451c7c2eb..f56abb59e 100644 --- a/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыКлиент/Module.bsl @@ -1,10 +1,99 @@ //////////////////////////////////////////////////////////////////////////////// -// Методы работы с СКД из формы отчета (клиент). +// Методы работы с СКД. // //////////////////////////////////////////////////////////////////////////////// +#Область СлужебныйПрограммныйИнтерфейс + +//////////////////////////////////////////////////////////////////////////////// +// Клиентские события рассылок отчетов. + +// Обработчик активизации строки пользовательской настройки СКД отчета. +// +// Параметры: +// Отчет - ДанныеФормыЭлементКоллекции - Строка табличной части, описывающая отчет. +// Свойства для чтения: +// * ПолноеИмя - Строка - Полное имя отчета. Например: "Отчет.ИмяОтчета". +// * КлючВарианта - Строка - Ключ варианта отчета. +// * Отчет - СправочникСсылка.ВариантыОтчетов - Ссылка варианта отчета. +// * Представление - Строка - Наименование варианта отчета. +// Свойства для изменения: +// * ВнесеныИзменения - Булево - Следует установить Истина когда меняются пользовательские настройки отчета. +// КомпоновщикНастроекКД - КомпоновщикНастроекКомпоновкиДанных - Все настройки отчета. +// Свойства для изменения: +// * ПользовательскиеНастройки - ПользовательскиеНастройкиКомпоновкиДанных - Все пользовательские настройки отчета. +// Все прочие свойства - только для чтения. +// ИдентификаторКД - ИдентификаторКомпоновкиДанных - Идентификатор пользовательской настройки отчета. +// Может использоваться для получения данных пользовательской настройки. Например: +// ПользовательскаяНастройкаКД = КомпоновщикНастроекКД.НайтиПоИдентификатору(ИдентификаторКД); +// ТолькоПросмотрЗначения - Булево - Флажок возможности непосредственного редактирования колонки "Значение". +// Если установить в Истина, то следует определить обработчик выбора значения в событии "ПриНачалеВыбораНастройки". +// +Процедура ПриАктивизацииСтрокиНастройки(Отчет, КомпоновщикНастроекКД, ИдентификаторКД, ТолькоПросмотрЗначения) Экспорт + +КонецПроцедуры + +// Обработчик начала выбора значения для строки пользовательской настройки СКД отчета. +// +// Параметры: +// Отчет - ДанныеФормыЭлементКоллекции - Строка табличной части, описывающая отчет. +// Свойства для чтения: +// * ПолноеИмя - Строка - Полное имя отчета. Например: "Отчет.ИмяОтчета". +// * КлючВарианта - Строка - Ключ варианта отчета. +// * Отчет - СправочникСсылка.ВариантыОтчетов - Ссылка варианта отчета. +// * Представление - Строка - Наименование варианта отчета. +// Свойства для изменения: +// * ВнесеныИзменения - Булево - Следует установить Истина когда меняются пользовательские настройки отчета. +// КомпоновщикНастроекКД - КомпоновщикНастроекКомпоновкиДанных - Все настройки отчета. +// Свойства для изменения: +// * ПользовательскиеНастройки - ПользовательскиеНастройкиКомпоновкиДанных - Все пользовательские настройки отчета. +// Все прочие свойства - только для чтения. +// ИдентификаторКД - ИдентификаторКомпоновкиДанных - Идентификатор пользовательской настройки отчета. +// Может использоваться для получения данных пользовательской настройки. Например: +// ПользовательскаяНастройкаКД = КомпоновщикНастроекКД.НайтиПоИдентификатору(ИдентификаторКД); +// СтандартнаяОбработка - Булево - Если Истина, то будет использован стандартный диалог выбора. +// Если используется собственная обработка события, то следует установить в Ложь. +// ОбработчикРезультата - Обработчик результата выбора прикладной формы. +// В качестве результата в ОбработчикРезультата могут быть переданы значения типов: +// Неопределено - Пользователь отказался от выбора. +// ПользовательскиеНастройкиКомпоновкиДанных - Новые настройки отчета. +// +Процедура ПриНачалеВыбораНастройки(Отчет, КомпоновщикНастроекКД, ИдентификаторКД, СтандартнаяОбработка, Обработчик) Экспорт + +КонецПроцедуры + +// Обработчик очистки значения для строки пользовательской настройки СКД отчета. +// +// Параметры: +// Отчет - ДанныеФормыЭлементКоллекции - Строка табличной части, описывающая отчет. +// Свойства для чтения: +// * ПолноеИмя - Строка - Полное имя отчета. Например: "Отчет.ИмяОтчета". +// * КлючВарианта - Строка - Ключ варианта отчета. +// * Отчет - СправочникСсылка.ВариантыОтчетов - Ссылка варианта отчета. +// * Представление - Строка - Наименование варианта отчета. +// Свойства для изменения: +// * ВнесеныИзменения - Булево - Следует установить Истина когда меняются пользовательские настройки отчета. +// КомпоновщикНастроекКД - КомпоновщикНастроекКомпоновкиДанных - Все настройки отчета. +// Свойства для изменения: +// * ПользовательскиеНастройки - ПользовательскиеНастройкиКомпоновкиДанных - Все пользовательские настройки отчета. +// Все прочие свойства - только для чтения. +// ИдентификаторКД - ИдентификаторКомпоновкиДанных - Идентификатор пользовательской настройки отчета. +// Может использоваться для получения данных пользовательской настройки. Например: +// ПользовательскаяНастройкаКД = КомпоновщикНастроекКД.НайтиПоИдентификатору(ИдентификаторКД); +// СтандартнаяОбработка - Булево - Если Истина, то значение настройки будет очищено. +// Если значение настройки не должно быть очищено, то следует установить в Ложь. +// +Процедура ПриОчисткеНастройки(Отчет, КомпоновщикНастроекКД, ИдентификаторКД, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции +//////////////////////////////////////////////////////////////////////////////// +// Методы работы с СКД из формы отчета. + Функция ПараметрыВыбораОтбора(Форма, Элемент) ИдентификаторЭлемента = Прав(Элемент.Имя, 32); @@ -88,12 +177,7 @@ УсловиеВедущего = ВидСравненияКомпоновкиДанных.Равно; КонецЕсли; КонецЕсли; - Попытка - ЗначениеЗаполнено = ЗначениеЗаполнено(ЗначениеВедущего); - Исключение - ЗначениеЗаполнено = Истина; - КонецПопытки; - Если Не ЗначениеЗаполнено Тогда + Если Не ЗначениеЗаполнено(ЗначениеВедущего) Тогда Продолжить; КонецЕсли; ТипЗначенияВедущего = ТипЗнч(ЗначениеВедущего); @@ -373,4 +457,45 @@ #КонецЕсли КонецПроцедуры +Процедура ВыбратьПериод(Форма, ЗначениеИмя, ИдентификаторЭлемента) Экспорт + Значение = Форма[ЗначениеИмя]; + + Контекст = Новый Структура; + Контекст.Вставить("Форма", Форма); + Контекст.Вставить("ЗначениеИмя", ЗначениеИмя); + Контекст.Вставить("ИдентификаторЭлемента", ИдентификаторЭлемента); + Обработчик = Новый ОписаниеОповещения("ВыбратьПериодЗавершение", ЭтотОбъект, Контекст); + + СтандартнаяОбработка = Истина; + ОтчетыКлиентПереопределяемый.ПриНажатииКнопкиВыбораПериода(Форма, Значение, СтандартнаяОбработка, Обработчик); + Если Не СтандартнаяОбработка Тогда + Возврат; + КонецЕсли; + + Диалог = Новый ДиалогРедактированияСтандартногоПериода; + Диалог.Период = Значение; + Диалог.Показать(Обработчик); +КонецПроцедуры + +Процедура ВыбратьПериодЗавершение(Период, Контекст) Экспорт + Если ТипЗнч(Период) <> Тип("СтандартныйПериод") Тогда + Возврат; + КонецЕсли; + + Контекст.Форма[Контекст.ЗначениеИмя] = Период; + + ЭлементКД = Контекст.Форма.НайтиПользовательскуюНастройкуЭлемента(Контекст.ИдентификаторЭлемента); + Если ТипЗнч(ЭлементКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ЭлементКД.ПравоеЗначение = Период; + ИначеЕсли ТипЗнч(ЭлементКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ЭлементКД.Значение = Период; + КонецЕсли; + ЭлементКД.Использование = Истина; + + Контекст.Форма.ПользовательскиеНастройкиМодифицированы = Истина; + #Если ВебКлиент Тогда + Контекст.Форма.ОбновитьОтображениеДанных(); // Для платформы. + #КонецЕсли +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОтчетыКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОтчетыКлиентПереопределяемый/Module.bsl index c7169f327..5f249798f 100644 --- a/SSL/src/CommonModules/ОтчетыКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыКлиентПереопределяемый/Module.bsl @@ -42,9 +42,6 @@ // Команда - КомандаФормы - Команда, которая была вызвана. // Результат - Булево - Истина, если вызов команды обработан. // -// Вспомогательные методы: -// ФормаОтчета.ВыполнитьКонтекстныйВызовСервера() <-> ОтчетыПереопределяемый.КонтекстныйВызовСервера(). -// // См. также: // Пример добавления команды в комментарии к обработчику ПриСозданииНаСервере(). // @@ -82,4 +79,24 @@ КонецПроцедуры +// Обработчик нажатия на кнопку выбора периода в отдельной форме. +// +// Параметры: +// ФормаОтчета - УправляемаяФорма - Форма отчета. +// Период - СтандартныйПериод - Значение настройки компоновщика, соответствующей выбранному периоду. +// СтандартнаяОбработка - Булево - Если Истина, то будет использован стандартный диалог выбора периода. +// Если установить в Ложь то стандартный диалог не откроется. +// ОбработчикРезультата - ОписаниеОповещения - Обработчик результата выбора периода. +// В качестве результата в ОбработчикРезультата могут быть переданы значения типов: +// Неопределено - Пользователь отказался от ввода периода. +// СтандартныйПериод - Выбранный период. +// +// Если в конфигурации используется собственный диалог выбора периода, +// тогда параметр СтандартнаяОбработка следует установить в Ложь, +// а выбранный период следует вернуть в ОбработчикРезультата. +// +Процедура ПриНажатииКнопкиВыбораПериода(ФормаОтчета, Период, СтандартнаяОбработка, ОбработчикРезультата) Экспорт + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl index f3e2ebf3c..1c53a0f3f 100644 --- a/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыКлиентСервер/Module.bsl @@ -18,10 +18,6 @@ // // * ВыводитьСуммуВыделенныхЯчеек - Булево - Если Истина, то в отчете будет выводиться поле автосуммы. // -// * СоответствиеПериодичностиПараметров - Соответствие - Ограничение списка выбора полей "СтандартныйПериод". -// ** Ключ - ПараметрКомпоновкиДанных - Имя параметра отчета, к которому применятся ограничения. -// ** Значение - ПеречислениеСсылка.ДоступныеПериодыОтчета - Ограничение периода отчета "снизу". -// // * Печать - Структура - Параметры печати табличного документа "по умолчанию". // ** ПолеСверху - Число - Отступ сверху при печати (в миллиметрах). // ** ПолеСлева - Число - Отступ слева при печати (в миллиметрах). @@ -45,13 +41,14 @@ // // // // См. также: // // "УправляемаяФорма.ПриСозданииНаСервере" в синтакс-помощнике. +// // ОтчетыПереопределяемый.ПриСозданииНаСервере(). // // // // Пример 1 - Добавление команды с обработчиком в ОтчетыКлиентПереопределяемый.ОбработчикКоманды: // // Команда = Форма.Команды.Добавить("МояОсобеннаяКоманда"); // // Команда.Действие = "Подключаемый_Команда"; // // Команда.Заголовок = НСтр("ru = 'Моя команда...'"); // // -// // Кнопка = Форма.Элементы.Добавить(Команда.Имя, Тип("КнопкаФормы"), Форма.Элементы.<ИмяПодменю>); +// // Кнопка = Форма.Элементы.Добавить(Команда.Имя, Тип("КнопкаФормы"), Форма.Элементы.ГруппаПрограммныйИнтерфейс); // // Кнопка.ИмяКоманды = Команда.Имя; // // // // Форма.ПостоянныеКоманды.Добавить(КомандаСоздать.Имя); @@ -60,6 +57,63 @@ // // Обработка события. // КонецПроцедуры // +// ** ПередЗагрузкойНастроекВКомпоновщик - Булево - Если Истина, то в модуле объекта отчета +// следует определить обработчик события по шаблону: +// +// // Вызывается перед загрузкой новых настроек. Используется для изменения схемы компоновки. +// // Например, если схема отчета зависит от ключа варианта или параметров отчета. +// // Чтобы изменения схемы вступили в силу следует вызывать метод ОтчетыСервер.ПодключитьСхему(). +// // +// // Параметры: +// // Контекст - Произвольный - +// // Параметры контекста, в котором используется отчет. +// // Используется для передачи в параметрах метода ОтчетыСервер.ПодключитьСхему(). +// // КлючСхемы - Строка - +// // Идентификатор текущей схемы компоновщика настроек. +// // По умолчанию не заполнен (это означает что компоновщик инициализирован на основании основной схемы). +// // Используется для оптимизации, чтобы переинициализировать компоновщик как можно реже). +// // Может не использоваться если переинициализация выполняется безусловно. +// // КлючВарианта - Строка, Неопределено - +// // Имя предопределенного или уникальный идентификатор пользовательского варианта отчета. +// // Неопределено когда вызов для варианта расшифровки или без контекста. +// // НовыеНастройкиКД - НастройкиКомпоновкиДанных, Неопределено - +// // Настройки варианта отчета, которые будут загружены в компоновщик настроек после его инициализации. +// // Неопределено когда настройки варианта не надо загружать (уже загружены ранее). +// // НовыеПользовательскиеНастройкиКД - ПользовательскиеНастройкиКомпоновкиДанных, Неопределено - +// // Пользовательские настройки, которые будут загружены в компоновщик настроек после его инициализации. +// // Неопределено когда пользовательские настройки не надо загружать (уже загружены ранее). +// // +// // Примеры: +// // 1. Компоновщик отчета инициализируется на основании схемы из общих макетов: +// // Если КлючСхемы <> "1" Тогда +// // КлючСхемы = "1"; +// // СхемаКД = ПолучитьОбщийМакет("МояОбщаяСхемаКомпоновки"); +// // ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКД, КлючСхемы); +// // КонецЕсли; +// // +// // 2. Схема зависит от значения параметра, выведенного в пользовательские настройки отчета: +// // Если ТипЗнч(НовыеПользовательскиеНастройкиКД) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда +// // ПолноеИмяОбъектаМетаданных = ""; +// // Для Каждого ЭлементКД Из НовыеПользовательскиеНастройкиКД.Элементы Цикл +// // Если ТипЗнч(ЭлементКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда +// // ИмяПараметра = Строка(ЭлементКД.Параметр); +// // Если ИмяПараметра = "ОбъектМетаданных" Тогда +// // ПолноеИмяОбъектаМетаданных = ЭлементКД.Значение; +// // КонецЕсли; +// // КонецЕсли; +// // КонецЦикла; +// // Если КлючСхемы <> ПолноеИмяОбъектаМетаданных Тогда +// // КлючСхемы = ПолноеИмяОбъектаМетаданных; +// // СхемаКД = Новый СхемаКомпоновкиДанных; +// // // Наполнение схемы... +// // ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, СхемаКД, КлючСхемы); +// // КонецЕсли; +// // КонецЕсли; +// // +// Процедура ПередЗагрузкойНастроекВКомпоновщик(Контекст, КлючСхемы, КлючВарианта, НовыеНастройкиКД, НовыеПользовательскиеНастройкиКД) Экспорт +// // Обработка события. +// КонецПроцедуры +// // ** ПередЗагрузкойВариантаНаСервере - Булево - Если Истина, то в модуле объекта отчета // следует определить обработчик события по шаблону: // @@ -70,7 +124,8 @@ // // НовыеНастройкиКД - НастройкиКомпоновкиДанных - Настройки для загрузки в компоновщик настроек. // // // // См. также: -// // "Расширение управляемой формы для отчета.ПриЗагрузкеВариантаНаСервере" в синтакс-помощнике. +// // "Расширение управляемой формы для отчета.ПередЗагрузкойВариантаНаСервере" в синтакс-помощнике. +// // ОтчетыПереопределяемый.ПередЗагрузкойВариантаНаСервере(). // // // Процедура ПередЗагрузкойВариантаНаСервере(Форма, НовыеНастройкиКД) Экспорт // // Обработка события. @@ -136,41 +191,72 @@ // // Обработка события. // КонецПроцедуры // -// ** КонтекстныйВызовСервера - Булево - Если Истина, то в модуле объекта отчета -// следует определить обработчик события по шаблону: -// -// // Обработчик контекстного вызова сервера. -// // Позволяет выполнить контекстный вызов сервера когда это требуется из клиентского общего модуля. -// // Например, из ОтчетыКлиентПереопределяемый.ОбработчикКоманды(). -// // -// // Параметры: -// // Форма - УправляемаяФорма -// // Ключ - Строка - Ключ операции, которую необходимо выполнить в контекстном вызове. -// // Параметры - Структура - Параметры вызова сервера. -// // Результат - Структура - Результат работы сервера, возвращается на клиент. -// // -// // См. также: -// // ОбщаяФорма.ФормаОтчета.ВыполнитьКонтекстныйВызовСервера(). -// // -// Процедура КонтекстныйВызовСервера(Форма, Ключ, Параметры, Результат) Экспорт -// // Обработка события. -// КонецПроцедуры -// // ** ПриОпределенииПараметровВыбора - Булево - Если Истина, то в модуле объекта отчета // следует определить обработчик события по шаблону: // // // Вызывается в форме отчета перед выводом настройки. -// // Подробнее - см. ОтчетыПереопределяемый.ПриОпределенииПараметровВыбора(). +// // +// // Параметры: +// // Форма - УправляемаяФорма, Неопределено - Форма отчета. +// // СвойстваНастройки - Структура - Описание настройки отчета, которая будет выведена в форме отчета. +// // * ОписаниеТипов - ОписаниеТипов - +// // Тип настройки. +// // * ЗначенияДляВыбора - СписокЗначений - +// // Объекты, которые будут предложены пользователю в списке выбора. +// // Дополняет список объектов, уже выбранных пользователем ранее. +// // * ЗапросЗначенийВыбора - Запрос - +// // Возвращает объекты, которыми необходимо дополнить ЗначенияДляВыбора. +// // Первой колонкой (с 0м индексом) должен выбираться объект, +// // который следует добавить в ЗначенияДляВыбора.Значение. +// // Для отключения автозаполнения +// // в свойство ЗапросЗначенийВыбора.Текст следует записать пустую строку. +// // * ОграничиватьВыборУказаннымиЗначениями - Булево - +// // Когда Истина, то выбор пользователя будет ограничен значениями, +// // указанными в ЗначенияДляВыбора (его конечным состоянием). +// // +// // См. также: +// // ОтчетыПереопределяемый.ПриОпределенииПараметровВыбора(). // // // Процедура ПриОпределенииПараметровВыбора(Форма, СвойстваНастройки) Экспорт // // Обработка события. // КонецПроцедуры // +// ** ПриОпределенииИспользуемыхТаблиц - Булево - Если Истина, то в модуле объекта отчета +// следует определить обработчик события по шаблону: +// +// // Список регистров и других объектов метаданных, по которым формируется отчет. +// // Используется для проверки что отчет может содержать не обновленные данные. +// // +// // Параметры: +// // КлючВарианта - Строка, Неопределено - +// // Имя предопределенного или уникальный идентификатор пользовательского варианта отчета. +// // Неопределено когда вызов для варианта расшифровки или без контекста. +// // ИспользуемыеТаблицы - Массив из Строка - +// // Полные имена объектов метаданных (регистров, документов и других таблиц), +// // данные которых выводятся в отчете. +// // +// // Пример: +// // ИспользуемыеТаблицы.Добавить(Метаданные.Документы._ДемоЗаказПокупателя.ПолноеИмя()); +// // +// Процедура ПриОпределенииИспользуемыхТаблиц(КлючВарианта, ИспользуемыеТаблицы) Экспорт +// // Обработка события. +// КонецПроцедуры +// // ** ДополнитьСвязиОбъектовМетаданных - Булево - Если Истина, то в модуле объекта отчета // следует определить обработчик события по шаблону: // // // Дополнительные связи настроек этого отчета. -// // Подробнее - см. ОтчетыПереопределяемый.ДополнитьСвязиОбъектовМетаданных(). +// // В данной процедуре следует описать дополнительные зависимости объектов метаданных +// // конфигурации, которые будут использоваться для связи настроек отчетов. +// // +// // Параметры: +// // СвязиОбъектовМетаданных - ТаблицаЗначений - Таблица связей. +// // * ПодчиненныйРеквизит - Строка - Имя реквизита подчиненного объекта метаданных. +// // * ПодчиненныйТип - Тип - Тип подчиненного объекта метаданных. +// // * ВедущийТип - Тип - Тип ведущего объекта метаданных. +// // +// // См. также: +// // ОтчетыПереопределяемый.ДополнитьСвязиОбъектовМетаданных(). // // // Процедура ДополнитьСвязиОбъектовМетаданных(СвязиОбъектовМетаданных) Экспорт // // Обработка события. @@ -188,24 +274,28 @@ События = Новый Структура; События.Вставить("ПриСозданииНаСервере", Ложь); + События.Вставить("ПередЗагрузкойНастроекВКомпоновщик", Ложь); События.Вставить("ПередЗагрузкойВариантаНаСервере", Ложь); События.Вставить("ПриЗагрузкеВариантаНаСервере", Ложь); События.Вставить("ПриЗагрузкеПользовательскихНастроекНаСервере", Ложь); События.Вставить("ПередЗаполнениемПанелиБыстрыхНастроек", Ложь); События.Вставить("ПослеЗаполненияПанелиБыстрыхНастроек", Ложь); - События.Вставить("КонтекстныйВызовСервера", Ложь); События.Вставить("ПриОпределенииПараметровВыбора", Ложь); + События.Вставить("ПриОпределенииИспользуемыхТаблиц", Ложь); События.Вставить("ДополнитьСвязиОбъектовМетаданных", Ложь); Настройки = Новый Структура; Настройки.Вставить("ФормироватьСразу", Ложь); Настройки.Вставить("ВыводитьСуммуВыделенныхЯчеек", Истина); - Настройки.Вставить("СоответствиеПериодичностиПараметров", Новый Соответствие); Настройки.Вставить("Печать", Печать); Настройки.Вставить("События", События); // Устарели: - Настройки.Вставить("ПараметрыПечатиПоУмолчанию", Печать); // См. Настройки.Печать. + // Вместо свойства "ПараметрыПечатиПоУмолчанию" следует использовать свойство "Печать". + Настройки.Вставить("ПараметрыПечатиПоУмолчанию", Печать); + // Вместо свойства "СоответствиеПериодичностиПараметров" следует использовать событие + // ПриНажатииКнопкиВыбораПериода общего модуля ОтчетыКлиентПереопределяемый. + Настройки.Вставить("СоответствиеПериодичностиПараметров", Новый Соответствие); Возврат Настройки; @@ -213,179 +303,84 @@ #КонецОбласти -#Область СлужебныеПроцедурыИФункции +#Область СлужебныйПрограммныйИнтерфейс -// Находит доступную настройку для отбора или параметра. +// Находит параметр в настройках компоновки по его имени. +// Если пользовательская настройка не найдена (например, +// если параметр не выведен в пользовательские настройки), +// то ищет значение параметра в настройках варианта. // // Параметры: -// НастройкиКД - НастройкиКомпоновкиДанных - Коллекции настроек. -// ОбщаяНастройка - ЭлементОтбораКомпоновкиДанных, ЗначениеПараметраНастроекКомпоновкиДанных, -// НастройкиВложенногоОбъектаКомпоновкиДанных - Значение элемента настройки. +// НастройкиКД - НастройкиКомпоновкиДанных, Неопределено - +// Настройки варианта отчета, в которых будет осуществляться вторая итерация поиска значения. +// ПользовательскиеНастройкиКД - ПользовательскиеНастройкиКомпоновкиДанных, Неопределено - +// Пользовательские настройки, в которых будет осуществляться первая итерация поиска значения. +// ИмяПараметра - Строка - Имя параметра. Должно удовлетворять требованиям образования имен переменных. // // Возвращаемое значение: -// ДоступноеПолеКомпоновкиДанных, ДоступныйПараметрКомпоновкиДанных, ДоступныйОбъектНастройкиКомпоновкиДанных - -// Доступная настройка. -// Неопределено - Если доступная настройка не найдена. +// Структура - Найденные значения параметров. +// Ключ - имя параметра; +// Значение - значение параметра. Неопределено если параметр не найден. // -Функция НайтиДоступнуюНастройку(НастройкиКД, ОбщаяНастройка) Экспорт - ТипОбщейНастройки = ТипЗнч(ОбщаяНастройка); - Если ТипОбщейНастройки = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - Возврат НайтиДоступноеПолеКД(НастройкиКД, ОбщаяНастройка.ЛевоеЗначение); - ИначеЕсли ТипОбщейНастройки = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - Возврат НайтиДоступныйПараметрКД(НастройкиКД, ОбщаяНастройка.Параметр); - ИначеЕсли ТипОбщейНастройки = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда - Возврат НастройкиКД.ДоступныеОбъекты.Элементы.Найти(ОбщаяНастройка.ИдентификаторОбъекта); - КонецЕсли; - - Возврат Неопределено; +Функция НайтиПараметр(НастройкиКД, ПользовательскиеНастройкиКД, ИмяПараметра) Экспорт + Возврат НайтиПараметры(НастройкиКД, ПользовательскиеНастройкиКД, ИмяПараметра)[ИмяПараметра]; КонецФункции -// Находит доступную настройку поля компоновки данных. +// Находит параметры в настройках компоновки по его имени. +// Если параметр не найден в пользовательских настройках, +// то его поиск выполняется в настройках варианта. // // Параметры: -// НастройкиКД - НастройкиКомпоновкиДанных - Коллекции настроек. -// ПолеКД - ПолеКомпоновкиДанных - Имя поля. +// НастройкиКД - НастройкиКомпоновкиДанных, Неопределено - +// Настройки варианта отчета, в которых будет осуществляться вторая итерация поиска значения. +// ПользовательскиеНастройкиКД - ПользовательскиеНастройкиКомпоновкиДанных, Неопределено - +// Пользовательские настройки, в которых будет осуществляться первая итерация поиска значения. +// ИменаПараметров - Строка - Имена параметров, перечисленные через запятую. +// Имя каждого параметра должно удовлетворять требованиям образования имен переменных. // // Возвращаемое значение: -// ДоступноеПолеКомпоновкиДанных, Неопределено - Доступная настройка для поля. +// Структура - Найденные значения параметров. +// Ключ - имя параметра; +// Значение - найденный параметр. Неопределено если параметр не найден. // -Функция НайтиДоступноеПолеКД(НастройкиКД, ПолеКД) Экспорт - Если ПолеКД = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - - ДоступнаяНастройка = НастройкиКД.ДоступныеПоляОтбора.НайтиПоле(ПолеКД); - Если ДоступнаяНастройка <> Неопределено Тогда - Возврат ДоступнаяНастройка; - КонецЕсли; - - МассивСтруктур = Новый Массив; - МассивСтруктур.Добавить(НастройкиКД.Структура); - Пока МассивСтруктур.Количество() > 0 Цикл - - СтруктураКД = МассивСтруктур[0]; - МассивСтруктур.Удалить(0); - - Для Каждого ЭлементСтруктурыКД Из СтруктураКД Цикл - - Если ТипЗнч(ЭлементСтруктурыКД) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда - - ДоступнаяНастройка = ЭлементСтруктурыКД.Настройки.ДоступныеПоляОтбора.НайтиПоле(ПолеКД); - Если ДоступнаяНастройка <> Неопределено Тогда - Возврат ДоступнаяНастройка; - КонецЕсли; - - МассивСтруктур.Добавить(ЭлементСтруктурыКД.Настройки.Структура); - - ИначеЕсли ТипЗнч(ЭлементСтруктурыКД) = Тип("ГруппировкаКомпоновкиДанных") Тогда - - ДоступнаяНастройка = ЭлементСтруктурыКД.Отбор.ДоступныеПоляОтбора.НайтиПоле(ПолеКД); - Если ДоступнаяНастройка <> Неопределено Тогда - Возврат ДоступнаяНастройка; - КонецЕсли; - - МассивСтруктур.Добавить(ЭлементСтруктурыКД.Структура); - - КонецЕсли; - - КонецЦикла; - +Функция НайтиПараметры(НастройкиКД, ПользовательскиеНастройкиКД, ИменаПараметров) + Результат = Новый Структура; + ИскомыеПараметры = Новый Соответствие; + МассивИмен = СтрРазделить(ИменаПараметров, ",", Ложь); + Количество = 0; + Для Каждого ИмяПараметра Из МассивИмен Цикл + ИскомыеПараметры.Вставить(СокрЛП(ИмяПараметра), Истина); + Количество = Количество + 1; КонецЦикла; - Возврат Неопределено; -КонецФункции - -// Находит доступную настройку параметра компоновки данных. -// -// Параметры: -// НастройкиКД - НастройкиКомпоновкиДанных - Коллекции настроек. -// ПараметрКД - ПараметрКомпоновкиДанных - Имя параметра. -// -// Возвращаемое значение: -// ДоступныйПараметрКомпоновкиДанных, Неопределено - Доступная настройка для параметра. -// -Функция НайтиДоступныйПараметрКД(НастройкиКД, ПараметрКД) Экспорт - Если ПараметрКД = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - - Если НастройкиКД.ПараметрыДанных.ДоступныеПараметры <> Неопределено Тогда - // Настройки, которым принадлежат параметры данных, связаны с источником доступных настроек. - ДоступнаяНастройка = НастройкиКД.ПараметрыДанных.ДоступныеПараметры.НайтиПараметр(ПараметрКД); - Если ДоступнаяНастройка <> Неопределено Тогда - Возврат ДоступнаяНастройка; - КонецЕсли; - КонецЕсли; - - МассивСтруктур = Новый Массив; - МассивСтруктур.Добавить(НастройкиКД.Структура); - Пока МассивСтруктур.Количество() > 0 Цикл - - СтруктураКД = МассивСтруктур[0]; - МассивСтруктур.Удалить(0); - - Для Каждого ЭлементСтруктурыКД Из СтруктураКД Цикл - - Если ТипЗнч(ЭлементСтруктурыКД) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда - - Если ЭлементСтруктурыКД.Настройки.ПараметрыДанных.ДоступныеПараметры <> Неопределено Тогда - // Настройки, которым принадлежат параметры данных, связаны с источником доступных настроек. - ДоступнаяНастройка = ЭлементСтруктурыКД.Настройки.ПараметрыДанных.ДоступныеПараметры.НайтиПараметр(ПараметрКД); - Если ДоступнаяНастройка <> Неопределено Тогда - Возврат ДоступнаяНастройка; + Если ПользовательскиеНастройкиКД <> Неопределено Тогда + Для Каждого ЭлементКД Из ПользовательскиеНастройкиКД.Элементы Цикл + Если ТипЗнч(ЭлементКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ИмяПараметра = Строка(ЭлементКД.Параметр); + Если ИскомыеПараметры[ИмяПараметра] = Истина Тогда + Результат.Вставить(ИмяПараметра, ЭлементКД); + ИскомыеПараметры.Удалить(ИмяПараметра); + Количество = Количество - 1; + Если Количество = 0 Тогда + Прервать; КонецЕсли; КонецЕсли; - - МассивСтруктур.Добавить(ЭлементСтруктурыКД.Настройки.Структура); - - ИначеЕсли ТипЗнч(ЭлементСтруктурыКД) = Тип("ГруппировкаКомпоновкиДанных") Тогда - - МассивСтруктур.Добавить(ЭлементСтруктурыКД.Структура); - КонецЕсли; - КонецЦикла; - - КонецЦикла; - - Возврат Неопределено; -КонецФункции - -// Находит пользовательскую настройку по ее идентификатору. -// -// Параметры: -// ПользовательскиеНастройкиКД - ПользовательскиеНастройкиКомпоновкиДанных - Коллекция пользовательских настроек. -// Идентификатор - Строка - -// -Функция НайтиПользовательскуюНастройку(ПользовательскиеНастройкиКД, Идентификатор) Экспорт - Для Каждого ПользовательскаяНастройка Из ПользовательскиеНастройкиКД.Элементы Цикл - Если ПользовательскаяНастройка.ИдентификаторПользовательскойНастройки = Идентификатор Тогда - Возврат ПользовательскаяНастройка; - КонецЕсли; - КонецЦикла; - - Возврат Неопределено; -КонецФункции - -// Находит вложенную пользовательскую настройку по ее идентификатору. -Функция НайтиВложеннуюПользовательскуюНастройку(ПользовательскаяНастройка, Идентификатор) Экспорт - Если Не ЗначениеЗаполнено(Идентификатор) Тогда - Возврат Неопределено; КонецЕсли; - Для Каждого ВложеннаяНастройка Из ПользовательскаяНастройка.Элементы Цикл - Если Строка(ПользовательскаяНастройка.ПолучитьИдентификаторПоОбъекту(ВложеннаяНастройка)) = Идентификатор Тогда - Возврат ВложеннаяНастройка; - КонецЕсли; - Если ТипЗнч(ВложеннаяНастройка) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда - РезультатПоиска = НайтиПолеВыбора(ПользовательскаяНастройка, Идентификатор, ВложеннаяНастройка); - Если РезультатПоиска <> Неопределено Тогда - Возврат РезультатПоиска; + Если Количество > 0 Тогда + Для Каждого КлючИЗначение Из ИскомыеПараметры Цикл + Если НастройкиКД <> Неопределено Тогда + ЭлементКД = НастройкиКД.ПараметрыДанных.Элементы.Найти(КлючИЗначение.Ключ); + Иначе + ЭлементКД = Неопределено; КонецЕсли; - КонецЕсли; - КонецЦикла; + Результат.Вставить(КлючИЗначение.Ключ, ЭлементКД); + КонецЦикла; + КонецЕсли; - Возврат Неопределено; + Возврат Результат; КонецФункции // Находит общую настройку по идентификатору пользовательской настройки. @@ -506,12 +501,147 @@ КонецФункции -// Функция возвращает доступное поле компоновки данных. +// Находит пользовательскую настройку по ее идентификатору. // // Параметры: -// Доступные поля - доступные поля компоновки данные, доступные поля отбора компоновки данные и т.д. -// Поле - Имя поля компоновки данных. +// ПользовательскиеНастройкиКД - ПользовательскиеНастройкиКомпоновкиДанных - Коллекция пользовательских настроек. +// Идентификатор - Строка - Идентификатор настройки, которую нужно найти. // +// Возвращаемое значение: +// Неопределено - Когда настройка не найдена. +// ЭлементОтбораКомпоновкиДанных, ЗначениеПараметраНастроекКомпоновкиДанных +// и прочие типы элементов из КоллекцияЭлементовПользовательскихНастроекКомпоновкиДанных - Пользовательская настройка. +// +Функция НайтиПользовательскуюНастройку(ПользовательскиеНастройкиКД, Идентификатор) Экспорт + Для Каждого ПользовательскаяНастройка Из ПользовательскиеНастройкиКД.Элементы Цикл + Если ПользовательскаяНастройка.ИдентификаторПользовательскойНастройки = Идентификатор Тогда + Возврат ПользовательскаяНастройка; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; +КонецФункции + +// Находит доступную настройку для отбора или параметра. +// +// Параметры: +// НастройкиКД - НастройкиКомпоновкиДанных - Коллекции настроек. +// ЭлементКД - ЭлементОтбораКомпоновкиДанных, ЗначениеПараметраНастроекКомпоновкиДанных, +// НастройкиВложенногоОбъектаКомпоновкиДанных - Значение элемента настройки. +// +// Возвращаемое значение: +// ДоступноеПолеКомпоновкиДанных, ДоступныйПараметрКомпоновкиДанных, +// ДоступныйОбъектНастройкиКомпоновкиДанных - Найденная доступная настройка. +// Неопределено - Если доступная настройка не найдена. +// +Функция НайтиДоступнуюНастройку(НастройкиКД, ЭлементКД) Экспорт + Тип = ТипЗнч(ЭлементКД); + Если Тип = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Возврат НайтиДоступноеПолеКД(НастройкиКД, ЭлементКД.ЛевоеЗначение); + ИначеЕсли Тип = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + Возврат НайтиДоступныйПараметрКД(НастройкиКД, ЭлементКД.Параметр); + ИначеЕсли Тип = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + Возврат НастройкиКД.ДоступныеОбъекты.Элементы.Найти(ЭлементКД.ИдентификаторОбъекта); + КонецЕсли; + + Возврат Неопределено; +КонецФункции + +// Находит пользовательскую настройку по имени параметра. +// Если пользовательская настройка не найдена (например, +// если параметр не выведен в пользовательские настройки), +// то получает общую настройку параметра. +// +// Параметры: +// КомпоновщикНастроекКД - КомпоновщикНастроекКомпоновкиДанных - Компоновщик настроек. +// ИмяПараметра - Строка - Имя параметра. +// +// Возвращаемое значение: +// ЗначениеПараметраНастроекКомпоновкиДанных - Пользовательская настройка параметра. +// Неопределено - Если параметр не найден. +// +Функция ПолучитьПараметр(КомпоновщикНастроекКД, ИмяПараметра) Экспорт + ПараметрКД = Новый ПараметрКомпоновкиДанных(ИмяПараметра); + + Для Каждого ПользовательскаяНастройка Из КомпоновщикНастроекКД.ПользовательскиеНастройки.Элементы Цикл + Если ТипЗнч(ПользовательскаяНастройка) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") + И ПользовательскаяНастройка.Параметр = ПараметрКД Тогда + Возврат ПользовательскаяНастройка; + КонецЕсли; + КонецЦикла; + + Возврат КомпоновщикНастроекКД.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(ПараметрКД); +КонецФункции + +// Возвращает вид периода. +Функция ПолучитьВидПериода(НачалоПериода, КонецПериода, ДоступныеПериоды = Неопределено) Экспорт + + ВидПериода = Неопределено; + Если НачалоПериода = НачалоДня(НачалоПериода) + И КонецПериода = КонецДня(КонецПериода) Тогда + + РазностьДней = (КонецПериода - НачалоПериода + 1) / (60*60*24); + Если РазностьДней = 1 Тогда + + ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.День"); + + ИначеЕсли РазностьДней = 7 Тогда + + Если НачалоПериода = НачалоНедели(НачалоПериода) Тогда + ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Неделя"); + КонецЕсли; + + ИначеЕсли РазностьДней <= 11 Тогда + + Если (День(НачалоПериода) = 1 И День(КонецПериода) = 10) + ИЛИ (День(НачалоПериода) = 11 И День(КонецПериода) = 20) + ИЛИ (День(НачалоПериода) = 21 И КонецПериода = КонецМесяца(НачалоПериода)) Тогда + ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Декада"); + КонецЕсли; + + ИначеЕсли РазностьДней <= 31 Тогда + + Если НачалоПериода = НачалоМесяца(НачалоПериода) И КонецПериода = КонецМесяца(НачалоПериода) Тогда + ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Месяц"); + КонецЕсли; + + ИначеЕсли РазностьДней <= 92 Тогда + + Если НачалоПериода = НачалоКвартала(НачалоПериода) И КонецПериода = КонецКвартала(НачалоПериода) Тогда + ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Квартал"); + КонецЕсли; + + ИначеЕсли РазностьДней <= 190 Тогда + + Если Месяц(НачалоПериода) + 5 = Месяц(КонецПериода) + И НачалоПериода = НачалоМесяца(НачалоПериода) + И КонецПериода = КонецМесяца(КонецПериода) + И (НачалоПериода = НачалоГода(НачалоПериода) ИЛИ КонецПериода = КонецГода(НачалоПериода)) Тогда + ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Полугодие"); + КонецЕсли; + + ИначеЕсли РазностьДней <= 366 Тогда + + Если НачалоПериода = НачалоГода(НачалоПериода) И КонецПериода = КонецГода(НачалоПериода) Тогда + ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Год"); + КонецЕсли; + + КонецЕсли; + КонецЕсли; + + Если ВидПериода = Неопределено Тогда + ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.ПроизвольныйПериод"); + КонецЕсли; + + Если ДоступныеПериоды <> Неопределено И ДоступныеПериоды.НайтиПоЗначению(ВидПериода) = Неопределено Тогда + ВидПериода = ДоступныеПериоды[0].Значение; + КонецЕсли; + + Возврат ВидПериода; + +КонецФункции + +// Устарела. Следует использовать НайтиДоступнуюНастройку(). Функция ПолучитьДоступноеПоле(ДоступныеПоля, Поле) Экспорт Если ТипЗнч(Поле) = Тип("Строка") Тогда @@ -526,12 +656,7 @@ КонецФункции -// Функция возвращает доступный параметр компоновки данных. -// -// Параметры: -// Доступные поля - доступные поля компоновки данные, доступные поля отбора компоновки данные и т.д. -// Параметр - Имя параметра компоновки данных. -// +// Устарела. Следует использовать НайтиДоступнуюНастройку(). Функция ПолучитьДоступныйПараметр(ДоступныеПараметры, Параметр) Экспорт Если ТипЗнч(ДоступныеПараметры) <> Тип("ДоступныеПараметрыКомпоновкиДанных") Тогда @@ -550,82 +675,120 @@ КонецФункции -// Загружает значения элемента настроек в таблицу. -Процедура ДобавитьЭлементыНастройки(ФормаОтчета, Таблица, ЭлементНастройки, ЭлементВыбора, ДобавлятьИерархическиеПоля, Отступ = "") Экспорт - - Для каждого ПолеВыбора Из ЭлементВыбора.Элементы Цикл - Заголовок = ПолеВыбора.Заголовок; - Если Заголовок = "" Тогда - ДоступноеПоле = ПолучитьДоступноеПоле(ФормаОтчета.Отчет.КомпоновщикНастроек.Настройки.ДоступныеПоляВыбора, ПолеВыбора.Поле); - Если ДоступноеПоле <> Неопределено Тогда - Заголовок = ДоступноеПоле.Заголовок; - Иначе - Продолжить; - КонецЕсли; - КонецЕсли; - СтрокаПоляВыбора = Таблица.Добавить(); - СтрокаПоляВыбора.Представление = Отступ + Заголовок; - СтрокаПоляВыбора.Использование = ПолеВыбора.Использование; - СтрокаПоляВыбора.Идентификатор = Строка(ЭлементНастройки.ПолучитьИдентификаторПоОбъекту(ПолеВыбора)); - Если ТипЗнч(ПолеВыбора) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда - СтрокаПоляВыбора.ЭтоГруппа = Истина; - КонецЕсли; - Если ДобавлятьИерархическиеПоля И ТипЗнч(ПолеВыбора) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") И ПолеВыбора.Элементы.Количество() > 0 Тогда - ДобавитьЭлементыНастройки(ФормаОтчета, Таблица, ЭлементНастройки, ПолеВыбора, Истина, Отступ + " "); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры +#КонецОбласти -// Возвращает список периодов в диапазоне периода. -Функция ПолучитьСтруктуруОтборов(ФормаОтчета, КомпоновщикНастроек, СтрокаИдентификатора, ТипОтбора = Неопределено, СтрокаТипаОтбора = Неопределено) Экспорт - - СтруктураПараметров = Новый Структура(); - - Если ТипОтбора = Неопределено И (СтрокаТипаОтбора = Неопределено Или СтрокаТипаОтбора = "") Тогда +#Область СлужебныеПроцедурыИФункции + +// Находит доступную настройку поля компоновки данных. +// +// Параметры: +// НастройкиКД - НастройкиКомпоновкиДанных - Коллекции настроек. +// Поле - Строка, ПолеКомпоновкиДанных - Имя поля. +// +// Возвращаемое значение: +// Неопределено - Когда доступная настройка поля не найдена. +// ДоступноеПолеКомпоновкиДанных - Доступная настройка для поля. +// +Функция НайтиДоступноеПолеКД(НастройкиКД, ПолеКД) + Если ПолеКД = Неопределено Тогда Возврат Неопределено; КонецЕсли; - Если ТипОтбора = Неопределено И СтрокаТипаОтбора <> Неопределено И СтрокаТипаОтбора = "" Тогда - ТипОтбора = Тип(СтрокаТипаОтбора); + ДоступнаяНастройка = НастройкиКД.ДоступныеПоляОтбора.НайтиПоле(ПолеКД); + Если ДоступнаяНастройка <> Неопределено Тогда + Возврат ДоступнаяНастройка; КонецЕсли; - // Получим таблицу связей - СтрокиСвязей = ФормаОтчета.СвязиОтборов.НайтиСтроки(Новый Структура("ИдентификаторОтбора", СтрокаИдентификатора)); - МассивСтрокСвязи = Новый Массив; - Для каждого СтрокаСвязи Из СтрокиСвязей Цикл - Если Тип(СтрокаСвязи.Тип) = ТипОтбора Тогда - МассивСтрокСвязи.Добавить(СтрокаСвязи); - КонецЕсли; - КонецЦикла; - - // Добавим отборы и параметры из элементов настройки отчета по таблице связей полей. - Для Каждого СтрокаСвязи Из МассивСтрокСвязи Цикл - ЭлементНастройки = НайтиПользовательскуюНастройку(КомпоновщикНастроек.ПользовательскиеНастройки, СтрокаСвязи.ИдентификаторЗначенияОтбора); - Если ЭлементНастройки = Неопределено Или Не ЭлементНастройки.Использование Тогда - Продолжить; - КонецЕсли; - ЗначениеОтбора = НеОпределено; - Если ТипЗнч(ЭлементНастройки) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - ЗначениеОтбора = ЭлементНастройки.ПравоеЗначение; - ИначеЕсли ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - ЗначениеОтбора = ЭлементНастройки.Значение; - КонецЕсли; - Если ЗначениеОтбора <> НеОпределено Тогда - ПараметрВыбораИмена = СтрРазделить(СтрокаСвязи.РеквизитПоля, "."); - Если ПараметрВыбораИмена.Количество() = 1 Тогда - СтруктураПараметров.Вставить(ПараметрВыбораИмена[0], ЗначениеОтбора); - ИначеЕсли ПараметрВыбораИмена[0] = "Отбор" Тогда - Если Не СтруктураПараметров.Свойство("Отбор") Тогда - СтруктураПараметров.Вставить("Отбор", Новый Структура()); + МассивСтруктур = Новый Массив; + МассивСтруктур.Добавить(НастройкиКД.Структура); + Пока МассивСтруктур.Количество() > 0 Цикл + + СтруктураКД = МассивСтруктур[0]; + МассивСтруктур.Удалить(0); + + Для Каждого ЭлементСтруктурыКД Из СтруктураКД Цикл + + Если ТипЗнч(ЭлементСтруктурыКД) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + + ДоступнаяНастройка = ЭлементСтруктурыКД.Настройки.ДоступныеПоляОтбора.НайтиПоле(ПолеКД); + Если ДоступнаяНастройка <> Неопределено Тогда + Возврат ДоступнаяНастройка; КонецЕсли; - СтруктураПараметров.Отбор.Вставить(ПараметрВыбораИмена[1], ЗначениеОтбора); + + МассивСтруктур.Добавить(ЭлементСтруктурыКД.Настройки.Структура); + + ИначеЕсли ТипЗнч(ЭлементСтруктурыКД) = Тип("ГруппировкаКомпоновкиДанных") Тогда + + ДоступнаяНастройка = ЭлементСтруктурыКД.Отбор.ДоступныеПоляОтбора.НайтиПоле(ПолеКД); + Если ДоступнаяНастройка <> Неопределено Тогда + Возврат ДоступнаяНастройка; + КонецЕсли; + + МассивСтруктур.Добавить(ЭлементСтруктурыКД.Структура); + КонецЕсли; - КонецЕсли; + + КонецЦикла; + КонецЦикла; - Возврат СтруктураПараметров; + Возврат Неопределено; +КонецФункции + +// Находит доступную настройку параметра компоновки данных. +// +// Параметры: +// НастройкиКД - НастройкиКомпоновкиДанных - Коллекции настроек. +// ПараметрКД - ПараметрКомпоновкиДанных - Имя параметра. +// +// Возвращаемое значение: +// ДоступныйПараметрКомпоновкиДанных, Неопределено - Доступная настройка для параметра. +// +Функция НайтиДоступныйПараметрКД(НастройкиКД, ПараметрКД) + Если ПараметрКД = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + Если НастройкиКД.ПараметрыДанных.ДоступныеПараметры <> Неопределено Тогда + // Настройки, которым принадлежат параметры данных, связаны с источником доступных настроек. + ДоступнаяНастройка = НастройкиКД.ПараметрыДанных.ДоступныеПараметры.НайтиПараметр(ПараметрКД); + Если ДоступнаяНастройка <> Неопределено Тогда + Возврат ДоступнаяНастройка; + КонецЕсли; + КонецЕсли; + + МассивСтруктур = Новый Массив; + МассивСтруктур.Добавить(НастройкиКД.Структура); + Пока МассивСтруктур.Количество() > 0 Цикл + + СтруктураКД = МассивСтруктур[0]; + МассивСтруктур.Удалить(0); + + Для Каждого ЭлементСтруктурыКД Из СтруктураКД Цикл + + Если ТипЗнч(ЭлементСтруктурыКД) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + + Если ЭлементСтруктурыКД.Настройки.ПараметрыДанных.ДоступныеПараметры <> Неопределено Тогда + // Настройки, которым принадлежат параметры данных, связаны с источником доступных настроек. + ДоступнаяНастройка = ЭлементСтруктурыКД.Настройки.ПараметрыДанных.ДоступныеПараметры.НайтиПараметр(ПараметрКД); + Если ДоступнаяНастройка <> Неопределено Тогда + Возврат ДоступнаяНастройка; + КонецЕсли; + КонецЕсли; + + МассивСтруктур.Добавить(ЭлементСтруктурыКД.Настройки.Структура); + + ИначеЕсли ТипЗнч(ЭлементСтруктурыКД) = Тип("ГруппировкаКомпоновкиДанных") Тогда + + МассивСтруктур.Добавить(ЭлементСтруктурыКД.Структура); + + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + + Возврат Неопределено; КонецФункции // Добавляет выбранное поле компоновки данных. @@ -665,139 +828,6 @@ КонецФункции -// Возвращает список всех группировок компоновщика настроек. -// -// Параметры: -// ЭлементСтруктуры - элемент структуры настройки СКД, настройка СКД или компоновщик настроек. -// ПоказыватьГруппировкиТаблиц - признак добавления в список группировки колонок (по умолчанию Истина). -// -Функция ПолучитьГруппировки(ЭлементСтруктуры, ПоказыватьГруппировкиТаблиц = Истина) Экспорт - - СписокПолей = Новый СписокЗначений; - Если ТипЗнч(ЭлементСтруктуры) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда - Структура = ЭлементСтруктуры.Настройки.Структура; - ДобавитьГруппировки(Структура, СписокПолей); - ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("НастройкиКомпоновкиДанных") Тогда - Структура = ЭлементСтруктуры.Структура; - ДобавитьГруппировки(Структура, СписокПолей); - ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("ТаблицаКомпоновкиДанных") Тогда - ДобавитьГруппировки(ЭлементСтруктуры.Строки, СписокПолей); - ДобавитьГруппировки(ЭлементСтруктуры.Колонки, СписокПолей); - ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("ДиаграммаКомпоновкиДанных") Тогда - ДобавитьГруппировки(ЭлементСтруктуры.Серии, СписокПолей); - ДобавитьГруппировки(ЭлементСтруктуры.Точки, СписокПолей); - Иначе - ДобавитьГруппировки(ЭлементСтруктуры.Структура, СписокПолей, ПоказыватьГруппировкиТаблиц); - КонецЕсли; - Возврат СписокПолей; - -КонецФункции - -// Находит пользовательскую настройку по имени параметра. -// Если пользовательская настройка не найдена (например, -// если параметр не выведен в пользовательские настройки), -// то получает общую настройку параметра. -// -// Параметры: -// КомпоновщикНастроекКД - КомпоновщикНастроекКомпоновкиДанных - Компоновщик настроек. -// ИмяПараметра - Строка - Имя параметра. -// -// Возвращаемое значение: -// ЗначениеПараметраНастроекКомпоновкиДанных - Пользовательская настройка параметра. -// Неопределено - Если параметр не найден. -// -Функция ПолучитьПараметр(КомпоновщикНастроекКД, ИмяПараметра) Экспорт - ПараметрКД = Новый ПараметрКомпоновкиДанных(ИмяПараметра); - - Для Каждого ПользовательскаяНастройка Из КомпоновщикНастроекКД.ПользовательскиеНастройки.Элементы Цикл - Если ТипЗнч(ПользовательскаяНастройка) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") - И ПользовательскаяНастройка.Параметр = ПараметрКД Тогда - Возврат ПользовательскаяНастройка; - КонецЕсли; - КонецЦикла; - - Возврат КомпоновщикНастроекКД.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(ПараметрКД); -КонецФункции - -// Возвращает список полей группировок всех группировок компоновщика настроек. -// -// Параметры: -// КомпоновщикНастроек - компоновщик настроек. -// БезПользовательскихПолей - признак не включения пользовательских настроек СКД. -// -Функция ПолучитьПоляГруппировок(КомпоновщикНастроек, БезПользовательскихПолей = Ложь) Экспорт - - СписокПолей = Новый СписокЗначений; - - Структура = КомпоновщикНастроек.Настройки.Структура; - ДобавитьПоляГруппировки(Структура, СписокПолей, БезПользовательскихПолей); - Возврат СписокПолей; - -КонецФункции - -// Возвращает последний элемент структуры - группировку. -// -// Параметры: -// ЭлементСтруктурыНастроек - элемент структуры компоновки данных. -// Строки - признак для получения последний группировки строк (Серий) или колонок (точек). -// -Функция ПолучитьПоследнийЭлементСтруктуры(ЭлементСтруктурыНастроек, Строки = Истина) Экспорт - - Если ТипЗнч(ЭлементСтруктурыНастроек) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда - Настройки = ЭлементСтруктурыНастроек.Настройки; - ИначеЕсли ТипЗнч(ЭлементСтруктурыНастроек) = Тип("НастройкиКомпоновкиДанных") Тогда - Настройки = ЭлементСтруктурыНастроек; - Иначе - Возврат Неопределено; - КонецЕсли; - - Структура = Настройки.Структура; - Если Структура.Количество() = 0 Тогда - Возврат Настройки; - КонецЕсли; - - Если Строки Тогда - ИмяСтруктурыТаблицы = "Строки"; - ИмяСтруктурыДиаграммы = "Серии"; - Иначе - ИмяСтруктурыТаблицы = "Колонки"; - ИмяСтруктурыДиаграммы = "Точки"; - КонецЕсли; - - Пока Истина Цикл - ЭлементСтруктуры = Структура[0]; - Если ТипЗнч(ЭлементСтруктуры) = Тип("ТаблицаКомпоновкиДанных") И ЭлементСтруктуры[ИмяСтруктурыТаблицы].Количество() > 0 Тогда - Если ЭлементСтруктуры[ИмяСтруктурыТаблицы][0].Структура.Количество() = 0 Тогда - Структура = ЭлементСтруктуры[ИмяСтруктурыТаблицы]; - Прервать; - КонецЕсли; - Структура = ЭлементСтруктуры[ИмяСтруктурыТаблицы][0].Структура; - ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("ДиаграммаКомпоновкиДанных") И ЭлементСтруктуры[ИмяСтруктурыДиаграммы].Количество() > 0 Тогда - Если ЭлементСтруктуры[ИмяСтруктурыДиаграммы][0].Структура.Количество() = 0 Тогда - Структура = ЭлементСтруктуры[ИмяСтруктурыДиаграммы]; - Прервать; - КонецЕсли; - Структура = ЭлементСтруктуры[ИмяСтруктурыДиаграммы][0].Структура; - ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаКомпоновкиДанных") - ИЛИ ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаТаблицыКомпоновкиДанных") - ИЛИ ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда - Если ЭлементСтруктуры.Структура.Количество() = 0 Тогда - Прервать; - КонецЕсли; - Структура = ЭлементСтруктуры.Структура; - ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("ТаблицаКомпоновкиДанных") Тогда - Возврат ЭлементСтруктуры[ИмяСтруктурыТаблицы]; - ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("ДиаграммаКомпоновкиДанных") Тогда - Возврат ЭлементСтруктуры[ИмяСтруктурыДиаграммы]; - Иначе - Возврат ЭлементСтруктуры; - КонецЕсли; - КонецЦикла; - - Возврат Структура[0]; - -КонецФункции - // Приводит значение типа ИспользованиеГруппИЭлементов к типу ГруппыИЭлементы. // Для других типов возвращает значение Авто. // @@ -844,110 +874,6 @@ КонецЕсли; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Локальные служебные процедуры и функции. - -// Добавляет вложенные поля группировки. -Процедура ДобавитьПоляГруппировки(Структура, СписокПолей, БезПользовательскихПолей) - - Для каждого ЭлементСтруктуры Из Структура Цикл - Если ТипЗнч(ЭлементСтруктуры) = Тип("ТаблицаКомпоновкиДанных") Тогда - ДобавитьПоляГруппировки(ЭлементСтруктуры.Строки, СписокПолей, БезПользовательскихПолей); - ДобавитьПоляГруппировки(ЭлементСтруктуры.Колонки, СписокПолей, БезПользовательскихПолей); - ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("ДиаграммаКомпоновкиДанных") Тогда - ДобавитьПоляГруппировки(ЭлементСтруктуры.Серии, СписокПолей, БезПользовательскихПолей); - ДобавитьПоляГруппировки(ЭлементСтруктуры.Точки, СписокПолей, БезПользовательскихПолей); - Иначе - Для каждого ТекущееПолеГруппировки Из ЭлементСтруктуры.ПоляГруппировки.Элементы Цикл - ДоступноеПоле = ЭлементСтруктуры.Выбор.ДоступныеПоляВыбора.НайтиПоле(ТекущееПолеГруппировки.Поле); - Если ДоступноеПоле <> Неопределено - И (ДоступноеПоле.Родитель = Неопределено ИЛИ Не БезПользовательскихПолей ИЛИ ДоступноеПоле.Родитель.Поле <> Новый ПолеКомпоновкиДанных("UserFields")) Тогда - СписокПолей.Добавить(Строка(ДоступноеПоле.Поле), ДоступноеПоле.Заголовок); - КонецЕсли; - КонецЦикла; - ДобавитьПоляГруппировки(ЭлементСтруктуры.Структура, СписокПолей, БезПользовательскихПолей); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -// Добавляет вложенные группировки элемента структуры. -Процедура ДобавитьГруппировки(Структура, СписокГруппировок, ПоказыватьГруппировкиТаблиц = Истина) - - Для каждого ЭлементСтруктуры Из Структура Цикл - Если ТипЗнч(ЭлементСтруктуры) = Тип("ТаблицаКомпоновкиДанных") Тогда - ДобавитьГруппировки(ЭлементСтруктуры.Строки, СписокГруппировок); - ДобавитьГруппировки(ЭлементСтруктуры.Колонки, СписокГруппировок); - ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("ДиаграммаКомпоновкиДанных") Тогда - ДобавитьГруппировки(ЭлементСтруктуры.Серии, СписокГруппировок); - ДобавитьГруппировки(ЭлементСтруктуры.Точки, СписокГруппировок); - Иначе - СписокГруппировок.Добавить(ЭлементСтруктуры); - Если ПоказыватьГруппировкиТаблиц Тогда - ДобавитьГруппировки(ЭлементСтруктуры.Структура, СписокГруппировок); - КонецЕсли; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -// Находит выбранное поле компоновки данных по идентификатору. -Функция НайтиПолеВыбора(ЭлементНастроек, Идентификатор, Группа) - - НайденноеПолеВыбора = Неопределено; - - Для каждого ПолеВыбора Из Группа.Элементы Цикл - Если Строка(ЭлементНастроек.ПолучитьИдентификаторПоОбъекту(ПолеВыбора)) = Идентификатор Тогда - НайденноеПолеВыбора = ПолеВыбора; - Прервать; - КонецЕсли; - Если ТипЗнч(ПолеВыбора) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда - НайденноеПолеВыбора = НайтиПолеВыбора(ЭлементНастроек, Идентификатор, ПолеВыбора); - Если НайденноеПолеВыбора <> Неопределено Тогда - Прервать; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Возврат НайденноеПолеВыбора; -КонецФункции - -// Находит общую настройку компоновки данных по идентификатору. -Функция НайтиЭлементНастройки(ЭлементНастройки, ИдентификаторПользовательскойНастройки) - // Поиск элемента с заданным значением свойства ИдентификаторПользовательскойНастройки (ИПН). - - МассивГрупп = Новый Массив; - МассивГрупп.Добавить(ЭлементНастройки.Элементы); - - Пока МассивГрупп.Количество() > 0 Цикл - - КоллекцияЭлементов = МассивГрупп.Получить(0); - МассивГрупп.Удалить(0); - - Для Каждого ПодчиненныйЭлемент Из КоллекцияЭлементов Цикл - Если ТипЗнч(ПодчиненныйЭлемент) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда - // Не содержит ИПН; Коллекция вложенных элементов не содержит ИПН. - ИначеЕсли ТипЗнч(ПодчиненныйЭлемент) = Тип("ЗначениеПараметраКомпоновкиДанных") Тогда - // Не содержит ИПН; Коллекция вложенных элементов может содержать ИПН. - МассивГрупп.Добавить(ПодчиненныйЭлемент.ЗначенияВложенныхПараметров); - ИначеЕсли ПодчиненныйЭлемент.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки Тогда - // Найден нужный элемент. - Возврат ПодчиненныйЭлемент; - Иначе - // Содержит ИПН; Коллекция вложенных элементов может содержать ИПН. - Если ТипЗнч(ПодчиненныйЭлемент) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда - МассивГрупп.Добавить(ПодчиненныйЭлемент.Элементы); - ИначеЕсли ТипЗнч(ПодчиненныйЭлемент) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - МассивГрупп.Добавить(ПодчиненныйЭлемент.ЗначенияВложенныхПараметров); - КонецЕсли; - КонецЕсли; - КонецЦикла; - - КонецЦикла; - - Возврат Неопределено; -КонецФункции - // Определяет полный путь к элементу компоновки данных. // // Параметры: @@ -1031,6 +957,45 @@ Возврат ЭлементКД; КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Локальные служебные процедуры и функции. + +// Находит общую настройку компоновки данных по идентификатору. +Функция НайтиЭлементНастройки(ЭлементНастройки, ИдентификаторПользовательскойНастройки) + // Поиск элемента с заданным значением свойства ИдентификаторПользовательскойНастройки (ИПН). + + МассивГрупп = Новый Массив; + МассивГрупп.Добавить(ЭлементНастройки.Элементы); + + Пока МассивГрупп.Количество() > 0 Цикл + + КоллекцияЭлементов = МассивГрупп.Получить(0); + МассивГрупп.Удалить(0); + + Для Каждого ПодчиненныйЭлемент Из КоллекцияЭлементов Цикл + Если ТипЗнч(ПодчиненныйЭлемент) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда + // Не содержит ИПН; Коллекция вложенных элементов не содержит ИПН. + ИначеЕсли ТипЗнч(ПодчиненныйЭлемент) = Тип("ЗначениеПараметраКомпоновкиДанных") Тогда + // Не содержит ИПН; Коллекция вложенных элементов может содержать ИПН. + МассивГрупп.Добавить(ПодчиненныйЭлемент.ЗначенияВложенныхПараметров); + ИначеЕсли ПодчиненныйЭлемент.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки Тогда + // Найден нужный элемент. + Возврат ПодчиненныйЭлемент; + Иначе + // Содержит ИПН; Коллекция вложенных элементов может содержать ИПН. + Если ТипЗнч(ПодчиненныйЭлемент) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда + МассивГрупп.Добавить(ПодчиненныйЭлемент.Элементы); + ИначеЕсли ТипЗнч(ПодчиненныйЭлемент) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + МассивГрупп.Добавить(ПодчиненныйЭлемент.ЗначенияВложенныхПараметров); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + КонецЦикла; + + Возврат Неопределено; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Для работы с механизмом периодичности. @@ -1106,424 +1071,6 @@ КонецФункции -// Возвращает список периодов в диапазоне начала периода. -Функция СписокФиксированныхПериодов(Знач НачалоПериода, ВидПериода) Экспорт - СписокПериодов = Новый СписокЗначений; - - Если НачалоПериода = '00010101' Тогда - Возврат СписокПериодов; - КонецЕсли; - - НачалоПериода = НачалоДня(НачалоПериода); - ВыборОтносительногоПериода = (НачалоПериода = "ВыборОтносительногоПериода"); - ПоказыватьВсеОтносительныеПериоды = Ложь; - - #Если Клиент Тогда - Сегодня = ОбщегоНазначенияКлиент.ДатаСеанса(); - #Иначе - Сегодня = ТекущаяДатаСеанса(); - #КонецЕсли - Сегодня = НачалоДня(Сегодня); - - НавигационныйПунктРанееПредставление = НСтр("ru = 'Ранее...'"); - НавигационныйПунктПозжеПредставление = НСтр("ru = 'Позже...'"); - - Если ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.День") Тогда - ТекущийДеньНедели = ДеньНедели(Сегодня); - ВыбранныйДеньНедели = ДеньНедели(НачалоПериода); - - // Вычисление начального и конечного периода по формуле. В 1 дне 86400 секунд. - НачальныйДеньНедели = ТекущийДеньНедели - 5; - КонечныйДеньНедели = ТекущийДеньНедели + 1; - Если ВыбранныйДеньНедели > КонечныйДеньНедели Тогда - ВыбранныйДеньНедели = ВыбранныйДеньНедели - 7; - КонецЕсли; - - Период = НачалоПериода - 86400 * (ВыбранныйДеньНедели - НачальныйДеньНедели); - - // Добавление навигационного пункта "<Ранее>..." для перехода к более ранним периодам. - СписокПериодов.Добавить(Период - 86400 * 7, НавигационныйПунктРанееПредставление); - - // Добавление значений. - Для Счетчик = 1 По 7 Цикл - СписокПериодов.Добавить(Период, Формат(Период, "ДФ='dd MMMM yyyy, dddd'") + ?(Период = Сегодня, " - " + НСтр("ru = 'сегодня'"), "")); - Период = Период + 86400; - КонецЦикла; - - // Добавление навигационного пункта "<Позже>..." для перехода к более поздним периодам. - СписокПериодов.Добавить(Период + 86400 * 6, НавигационныйПунктПозжеПредставление); - - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Неделя") Тогда - ТекущееНачалоНедели = НачалоНедели(Сегодня); - ВыбранноеНачалоНедели = НачалоНедели(НачалоПериода); - - // Вычисление начального и конечного периода по формуле. В 7 днях 604800 секунд. - РазностьНедель = (ВыбранноеНачалоНедели - ТекущееНачалоНедели) / 604800; - Коэффициент = (РазностьНедель - 2)/7; - Коэффициент = Цел(Коэффициент - ?(Коэффициент < 0, 0.9, 0)); // Отрицательные числа округляются в большую часть. - НачальнаяНеделя = ТекущееНачалоНедели + (2 + Коэффициент*7) * 604800; - - // Добавление навигационного пункта "<Ранее>..." для перехода к более ранним периодам. - СписокПериодов.Добавить(НачальнаяНеделя - 7 * 604800, НавигационныйПунктРанееПредставление); - - // Добавление значений. - Для Счетчик = 0 По 6 Цикл - Период = НачальнаяНеделя + Счетчик * 604800; - КонецПериода = КонецНедели(Период); - ПредставлениеПериода = Формат(Период, "ДФ=dd.MM") + " - " + Формат(КонецПериода, "ДЛФ=D") + " (" + НеделяГода(КонецПериода) + " " + НСтр("ru = 'неделя года'") + ")"; - Если Период = ТекущееНачалоНедели Тогда - ПредставлениеПериода = ПредставлениеПериода + " - " + НСтр("ru = 'эта неделя'"); - КонецЕсли; - СписокПериодов.Добавить(Период, ПредставлениеПериода); - КонецЦикла; - - // Добавление навигационного пункта "<Позже>..." для перехода к более поздним периодам. - СписокПериодов.Добавить(НачальнаяНеделя + 13 * 604800, НавигационныйПунктПозжеПредставление); - - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Декада") Тогда - ТекущийГод = Год(Сегодня); - ВыбранныйГод = Год(НачалоПериода); - ТекущийМесяц = Месяц(Сегодня); - ВыбранныйМесяц = Месяц(НачалоПериода); - ТекущийДень = День(Сегодня); - ВыбранныйДень = День(НачалоПериода); - ТекущаяДекада = ?(ТекущийДень <= 10, 1, ?(ТекущийДень <= 20, 2, 3)); - ВыбраннаяДекада = ?(ВыбранныйДень <= 10, 1, ?(ВыбранныйДень <= 20, 2, 3)); - ТекущаяДекадаАбсолютно = ТекущийГод*36 + (ТекущийМесяц-1)*3 + (ТекущаяДекада-1); - ВыбраннаяДекадаАбсолютно = ВыбранныйГод*36 + (ВыбранныйМесяц-1)*3 + (ВыбраннаяДекада-1); - СтрокаДекада = НСтр("ru = 'декада'"); - - // Вычисление начального и конечного периода по формуле. - Коэффициент = (ВыбраннаяДекадаАбсолютно - ТекущаяДекадаАбсолютно - 2)/7; - Коэффициент = Цел(Коэффициент - ?(Коэффициент < 0, 0.9, 0)); // Отрицательные числа округляются в большую часть. - НачальнаяДекада = ТекущаяДекадаАбсолютно + 2 + Коэффициент*7; - КонечнаяДекада = НачальнаяДекада + 6; - - // Добавление навигационного пункта "<Ранее>..." для перехода к более ранним периодам. - Декада = НачальнаяДекада - 7; - Год = Цел(Декада/36); - ДекадаВГоду = Декада - Год*36; - МесяцВГоду = Цел(ДекадаВГоду/3) + 1; - ДекадаВМесяце = ДекадаВГоду - (МесяцВГоду-1)*3 + 1; - Период = Дата(Год, МесяцВГоду, (ДекадаВМесяце - 1) * 10 + 1); - СписокПериодов.Добавить(Период, НавигационныйПунктРанееПредставление); - - // Добавление значений. - Для Декада = НачальнаяДекада По КонечнаяДекада Цикл - Год = Цел(Декада/36); - ДекадаВГоду = Декада - Год*36; - МесяцВГоду = Цел(ДекадаВГоду/3) + 1; - ДекадаВМесяце = ДекадаВГоду - (МесяцВГоду-1)*3 + 1; - Период = Дата(Год, МесяцВГоду, (ДекадаВМесяце - 1) * 10 + 1); - Представление = Формат(Период, "ДФ='MMMM yyyy'") + ", " + Лев("III", ДекадаВМесяце) + " " + СтрокаДекада + ?(Декада = ТекущаяДекадаАбсолютно, " - " + НСтр("ru = 'эта декада'"), ""); - СписокПериодов.Добавить(Период, Представление); - КонецЦикла; - - // Добавление навигационного пункта "<Позже>..." для перехода к более поздним периодам. - Декада = КонечнаяДекада + 1; - Год = Цел(Декада/36); - ДекадаВГоду = Декада - Год*36; - МесяцВГоду = Цел(ДекадаВГоду/3) + 1; - ДекадаВМесяце = ДекадаВГоду - (МесяцВГоду-1)*3 + 1; - Период = Дата(Год, МесяцВГоду, (ДекадаВМесяце - 1) * 10 + 1); - СписокПериодов.Добавить(Период, НавигационныйПунктПозжеПредставление); - - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Месяц") Тогда - ТекущийГод = Год(Сегодня); - ВыбранныйГод = Год(НачалоПериода); - ТекущийМесяц = ТекущийГод*12 + Месяц(Сегодня); - ВыбранныйМесяц = ВыбранныйГод*12 + Месяц(НачалоПериода); - - // Вычисление начального и конечного периода по формуле. - Коэффициент = (ВыбранныйМесяц - ТекущийМесяц - 2)/7; - Коэффициент = Цел(Коэффициент - ?(Коэффициент < 0, 0.9, 0)); // Отрицательные числа округляются в большую часть. - НачальныйМесяц = ТекущийМесяц + 2 + Коэффициент*7; - КонечныйМесяц = НачальныйМесяц + 6; - - // Добавление навигационного пункта "<Ранее>..." для перехода к более ранним периодам. - Месяц = НачальныйМесяц - 7; - Год = Цел((Месяц - 1) / 12); - МесяцВГоду = Месяц - Год * 12; - Период = Дата(Год, МесяцВГоду, 1); - СписокПериодов.Добавить(Период, НавигационныйПунктРанееПредставление); - - // Добавление значений. - Для Месяц = НачальныйМесяц По КонечныйМесяц Цикл - Год = Цел((Месяц - 1) / 12); - МесяцВГоду = Месяц - Год * 12; - Период = Дата(Год, МесяцВГоду, 1); - СписокПериодов.Добавить(Период, Формат(Период, "ДФ='MMMM yyyy'") + ?(Год = ТекущийГод И ТекущийМесяц = Месяц, " - " + НСтр("ru = 'этот месяц'"), "")); - КонецЦикла; - - // Добавление навигационного пункта "<Позже>..." для перехода к более поздним периодам. - Месяц = КонечныйМесяц + 1; - Год = Цел((Месяц - 1) / 12); - МесяцВГоду = Месяц - Год * 12; - Период = Дата(Год, МесяцВГоду, 1); - СписокПериодов.Добавить(Период, НавигационныйПунктПозжеПредставление); - - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Квартал") Тогда - ТекущийГод = Год(Сегодня); - ВыбранныйГод = Год(НачалоПериода); - ТекущийКвартал = 1 + Цел((Месяц(Сегодня)-1)/3); - ВыбранныйКвартал = 1 + Цел((Месяц(НачалоПериода)-1)/3); - ТекущийКварталАбсолютно = ТекущийГод*4 + ТекущийКвартал - 1; - ВыбранныйКварталАбсолютно = ВыбранныйГод*4 + ВыбранныйКвартал - 1; - СтрокаКвартал = НСтр("ru = 'квартал'"); - - // Вычисление начального и конечного периода по формуле. - Коэффициент = (ВыбранныйКварталАбсолютно - ТекущийКварталАбсолютно - 2)/7; - Коэффициент = Цел(Коэффициент - ?(Коэффициент < 0, 0.9, 0)); // Отрицательные числа округляются в большую часть. - НачальныйКвартал = ТекущийКварталАбсолютно + 2 + Коэффициент*7; - КонечныйКвартал = НачальныйКвартал + 6; - - // Добавление навигационного пункта "<Ранее>..." для перехода к более ранним периодам. - Квартал = НачальныйКвартал - 7; - Год = Цел(Квартал/4); - КварталВГоду = Квартал - Год*4 + 1; - МесяцВГоду = (КварталВГоду-1)*3 + 1; - Период = Дата(Год, МесяцВГоду, 1); - СписокПериодов.Добавить(Период, НавигационныйПунктРанееПредставление); - - // Добавление значений. - Для Квартал = НачальныйКвартал По КонечныйКвартал Цикл - Год = Цел(Квартал/4); - КварталВГоду = Квартал - Год*4 + 1; - МесяцВГоду = (КварталВГоду-1)*3 + 1; - Период = Дата(Год, МесяцВГоду, 1); - Представление = ?(КварталВГоду = 4, "IV", Лев("III", КварталВГоду)) + " " + СтрокаКвартал + " " + Формат(Период, "ДФ='yyyy'") + ?(Квартал = ТекущийКварталАбсолютно, " - " + НСтр("ru = 'этот квартал'"), ""); - СписокПериодов.Добавить(Период, Представление); - КонецЦикла; - - // Добавление навигационного пункта "<Позже>..." для перехода к более поздним периодам. - Квартал = КонечныйКвартал + 1; - Год = Цел(Квартал/4); - КварталВГоду = Квартал - Год*4 + 1; - МесяцВГоду = (КварталВГоду-1)*3 + 1; - Период = Дата(Год, МесяцВГоду, 1); - СписокПериодов.Добавить(Период, НавигационныйПунктПозжеПредставление); - - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Полугодие") Тогда - ТекущийГод = Год(Сегодня); - ВыбранныйГод = Год(НачалоПериода); - ТекущееПолугодие = 1 + Цел((Месяц(Сегодня)-1)/6); - ВыбранноеПолугодие = 1 + Цел((Месяц(НачалоПериода)-1)/6); - ТекущееПолугодиеАбсолютно = ТекущийГод*2 + ТекущееПолугодие - 1; - ВыбранноеПолугодиеАбсолютно = ВыбранныйГод*2 + ВыбранноеПолугодие - 1; - СтрокаПолугодие = НСтр("ru = 'полугодие'"); - - // Вычисление начального и конечного периода по формуле. - Коэффициент = (ВыбранноеПолугодиеАбсолютно - ТекущееПолугодиеАбсолютно - 2)/7; - Коэффициент = Цел(Коэффициент - ?(Коэффициент < 0, 0.9, 0)); // Отрицательные числа округляются в большую часть. - НачальноеПолугодие = ТекущееПолугодиеАбсолютно + 2 + Коэффициент*7; - КонечноеПолугодие = НачальноеПолугодие + 6; - - // Добавление навигационного пункта "<Ранее>..." для перехода к более ранним периодам. - Полугодие = НачальноеПолугодие - 7; - Год = Цел(Полугодие/2); - ПолугодиеВГоду = Полугодие - Год*2 + 1; - МесяцВГоду = (ПолугодиеВГоду-1)*6 + 1; - Период = Дата(Год, МесяцВГоду, 1); - СписокПериодов.Добавить(Период, НавигационныйПунктРанееПредставление); - - // Добавление значений. - Для Полугодие = НачальноеПолугодие По КонечноеПолугодие Цикл - Год = Цел(Полугодие/2); - ПолугодиеВГоду = Полугодие - Год*2 + 1; - МесяцВГоду = (ПолугодиеВГоду-1)*6 + 1; - Период = Дата(Год, МесяцВГоду, 1); - Представление = Лев("II", ПолугодиеВГоду) + " " + СтрокаПолугодие + " " + Формат(Период, "ДФ='yyyy'") + ?(Полугодие = ТекущееПолугодиеАбсолютно, " - " + НСтр("ru = 'это полугодие'"), ""); - СписокПериодов.Добавить(Период, Представление); - КонецЦикла; - - // Добавление навигационного пункта "<Позже>..." для перехода к более поздним периодам. - Полугодие = КонечноеПолугодие + 1; - Год = Цел(Полугодие/2); - ПолугодиеВГоду = Полугодие - Год*2 + 1; - МесяцВГоду = (ПолугодиеВГоду-1)*6 + 1; - Период = Дата(Год, МесяцВГоду, 1); - СписокПериодов.Добавить(Период, НавигационныйПунктПозжеПредставление); - - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Год") Тогда - ТекущийГод = Год(Сегодня); - ВыбранныйГод = Год(НачалоПериода); - - // Вычисление начального и конечного периода по формуле. - Коэффициент = (ВыбранныйГод - ТекущийГод - 2)/7; - Коэффициент = Цел(Коэффициент - ?(Коэффициент < 0, 0.9, 0)); // Отрицательные числа округляются в большую часть. - НачальныйГод = ТекущийГод + 2 + Коэффициент*7; - КонечныйГод = НачальныйГод + 6; - - // Добавление навигационного пункта "<Ранее>..." для перехода к более ранним периодам. - СписокПериодов.Добавить(Дата(НачальныйГод-7, 1, 1), НавигационныйПунктРанееПредставление); - - // Добавление значений. - Для Год = НачальныйГод По КонечныйГод Цикл - СписокПериодов.Добавить(Дата(Год, 1, 1), Формат(Год, "ЧГ=") + ?(Год = ТекущийГод, " - " + НСтр("ru = 'этот год'"), "")); - КонецЦикла; - - // Добавление навигационного пункта "<Позже>..." для перехода к более поздним периодам. - СписокПериодов.Добавить(Дата(КонечныйГод+7, 1, 1), НавигационныйПунктПозжеПредставление); - - КонецЕсли; - - Возврат СписокПериодов; -КонецФункции - -// Возвращает список периодов в диапазоне начала периода. -Функция СписокВычисляемыхПериодов(ВидПериода) Экспорт - СписокПериодов = Новый СписокЗначений; - - Если ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.День") Тогда - СписокПериодов.Добавить(ВариантСтандартногоПериода.Вчера); - СписокПериодов.Добавить(ВариантСтандартногоПериода.Сегодня); - СписокПериодов.Добавить(ВариантСтандартногоПериода.Завтра); - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Неделя") Тогда - СписокПериодов.Добавить(ВариантСтандартногоПериода.ПрошлаяНеделя); - СписокПериодов.Добавить(ВариантСтандартногоПериода.ПрошлаяНеделяДоТакогоЖеДняНедели); - СписокПериодов.Добавить(ВариантСтандартногоПериода.Последние7Дней); - СписокПериодов.Добавить(ВариантСтандартногоПериода.ЭтаНеделя); - СписокПериодов.Добавить(ВариантСтандартногоПериода.СНачалаЭтойНедели); - СписокПериодов.Добавить(ВариантСтандартногоПериода.ДоКонцаЭтойНедели); - СписокПериодов.Добавить(ВариантСтандартногоПериода.СледующаяНеделя); - СписокПериодов.Добавить(ВариантСтандартногоПериода.СледующаяНеделяДоТакогоЖеДняНедели); - СписокПериодов.Добавить(ВариантСтандартногоПериода.Следующие7Дней); - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Декада") Тогда - СписокПериодов.Добавить(ВариантСтандартногоПериода.ПрошлаяДекада); - СписокПериодов.Добавить(ВариантСтандартногоПериода.ПрошлаяДекадаДоТакогоЖеНомераДня); - СписокПериодов.Добавить(ВариантСтандартногоПериода.ЭтаДекада); - СписокПериодов.Добавить(ВариантСтандартногоПериода.СНачалаЭтойДекады); - СписокПериодов.Добавить(ВариантСтандартногоПериода.ДоКонцаЭтойДекады); - СписокПериодов.Добавить(ВариантСтандартногоПериода.СледующаяДекада); - СписокПериодов.Добавить(ВариантСтандартногоПериода.СледующаяДекадаДоТакогоЖеНомераДня); - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Месяц") Тогда - СписокПериодов.Добавить(ВариантСтандартногоПериода.ПрошлыйМесяц); - СписокПериодов.Добавить(ВариантСтандартногоПериода.ПрошлыйМесяцДоТакойЖеДаты); - СписокПериодов.Добавить(ВариантСтандартногоПериода.Месяц, НСтр("ru = 'С такой же даты прошлого месяца'")); - СписокПериодов.Добавить(ВариантСтандартногоПериода.ЭтотМесяц); - СписокПериодов.Добавить(ВариантСтандартногоПериода.СНачалаЭтогоМесяца); - СписокПериодов.Добавить(ВариантСтандартногоПериода.ДоКонцаЭтогоМесяца); - СписокПериодов.Добавить(ВариантСтандартногоПериода.СледующийМесяц); - СписокПериодов.Добавить(ВариантСтандартногоПериода.СледующийМесяцДоТакойЖеДаты); - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Квартал") Тогда - СписокПериодов.Добавить(ВариантСтандартногоПериода.ПрошлыйКвартал); - СписокПериодов.Добавить(ВариантСтандартногоПериода.ПрошлыйКварталДоТакойЖеДаты); - СписокПериодов.Добавить(ВариантСтандартногоПериода.ЭтотКвартал); - СписокПериодов.Добавить(ВариантСтандартногоПериода.СНачалаЭтогоКвартала); - СписокПериодов.Добавить(ВариантСтандартногоПериода.ДоКонцаЭтогоКвартала); - СписокПериодов.Добавить(ВариантСтандартногоПериода.СледующийКвартал); - СписокПериодов.Добавить(ВариантСтандартногоПериода.СледующийКварталДоТакойЖеДаты); - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Полугодие") Тогда - СписокПериодов.Добавить(ВариантСтандартногоПериода.ПрошлоеПолугодие); - СписокПериодов.Добавить(ВариантСтандартногоПериода.ЭтоПолугодие); - СписокПериодов.Добавить(ВариантСтандартногоПериода.СледующееПолугодие); - СписокПериодов.Добавить(ВариантСтандартногоПериода.СНачалаЭтогоПолугодия); - СписокПериодов.Добавить(ВариантСтандартногоПериода.ДоКонцаЭтогоПолугодия); - СписокПериодов.Добавить(ВариантСтандартногоПериода.ПрошлоеПолугодиеДоТакойЖеДаты); - СписокПериодов.Добавить(ВариантСтандартногоПериода.СледующееПолугодиеДоТакойЖеДаты); - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Год") Тогда - СписокПериодов.Добавить(ВариантСтандартногоПериода.ПрошлыйГод); - СписокПериодов.Добавить(ВариантСтандартногоПериода.ПрошлыйГодДоТакойЖеДаты); - СписокПериодов.Добавить(ВариантСтандартногоПериода.ЭтотГод); - СписокПериодов.Добавить(ВариантСтандартногоПериода.СНачалаЭтогоГода); - СписокПериодов.Добавить(ВариантСтандартногоПериода.ДоКонцаЭтогоГода); - СписокПериодов.Добавить(ВариантСтандартногоПериода.СледующийГод); - СписокПериодов.Добавить(ВариантСтандартногоПериода.СледующийГодДоТакойЖеДаты); - КонецЕсли; - - Возврат СписокПериодов; -КонецФункции - -// Возвращает представление периода, используя его вид и указанное значение. -Функция ПредставлениеСтандартногоПериода(СтандартныйПериод, ВидПериода) Экспорт - - Если СтандартныйПериод.Вариант = ВариантСтандартногоПериода.Месяц Тогда - Возврат НСтр("ru = 'С такой же даты прошлого месяца'"); - ИначеЕсли СтандартныйПериод.Вариант <> ВариантСтандартногоПериода.ПроизвольныйПериод Тогда - Возврат Строка(СтандартныйПериод.Вариант); - КонецЕсли; - - Если ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.ПроизвольныйПериод") Тогда - Возврат Формат(СтандартныйПериод.ДатаНачала, "ДФ='dd MMMM yyyy'") + " - " + Формат(СтандартныйПериод.ДатаОкончания, "ДФ='dd MMMM yyyy'"); - КонецЕсли; - - СписокПериодов = СписокФиксированныхПериодов(СтандартныйПериод.ДатаНачала, ВидПериода); - ЭлементСписка = СписокПериодов.НайтиПоЗначению(СтандартныйПериод.ДатаНачала); - Если ЭлементСписка <> Неопределено Тогда - Возврат ЭлементСписка.Представление; - КонецЕсли; - - Возврат ""; -КонецФункции - -// Возвращает вид периода. -Функция ПолучитьВидПериода(НачалоПериода, КонецПериода, ДоступныеПериоды = Неопределено) Экспорт - - ВидПериода = Неопределено; - Если НачалоПериода = НачалоДня(НачалоПериода) - И КонецПериода = КонецДня(КонецПериода) Тогда - - РазностьДней = (КонецПериода - НачалоПериода + 1) / (60*60*24); - Если РазностьДней = 1 Тогда - - ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.День"); - - ИначеЕсли РазностьДней = 7 Тогда - - Если НачалоПериода = НачалоНедели(НачалоПериода) Тогда - ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Неделя"); - КонецЕсли; - - ИначеЕсли РазностьДней <= 11 Тогда - - Если (День(НачалоПериода) = 1 И День(КонецПериода) = 10) - ИЛИ (День(НачалоПериода) = 11 И День(КонецПериода) = 20) - ИЛИ (День(НачалоПериода) = 21 И КонецПериода = КонецМесяца(НачалоПериода)) Тогда - ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Декада"); - КонецЕсли; - - ИначеЕсли РазностьДней <= 31 Тогда - - Если НачалоПериода = НачалоМесяца(НачалоПериода) И КонецПериода = КонецМесяца(НачалоПериода) Тогда - ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Месяц"); - КонецЕсли; - - ИначеЕсли РазностьДней <= 92 Тогда - - Если НачалоПериода = НачалоКвартала(НачалоПериода) И КонецПериода = КонецКвартала(НачалоПериода) Тогда - ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Квартал"); - КонецЕсли; - - ИначеЕсли РазностьДней <= 190 Тогда - - Если Месяц(НачалоПериода) + 5 = Месяц(КонецПериода) - И НачалоПериода = НачалоМесяца(НачалоПериода) - И КонецПериода = КонецМесяца(КонецПериода) - И (НачалоПериода = НачалоГода(НачалоПериода) ИЛИ КонецПериода = КонецГода(НачалоПериода)) Тогда - ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Полугодие"); - КонецЕсли; - - ИначеЕсли РазностьДней <= 366 Тогда - - Если НачалоПериода = НачалоГода(НачалоПериода) И КонецПериода = КонецГода(НачалоПериода) Тогда - ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Год"); - КонецЕсли; - - КонецЕсли; - КонецЕсли; - - Если ВидПериода = Неопределено Тогда - ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.ПроизвольныйПериод"); - КонецЕсли; - - Если ДоступныеПериоды <> Неопределено И ДоступныеПериоды.НайтиПоЗначению(ВидПериода) = Неопределено Тогда - ВидПериода = ДоступныеПериоды[0].Значение; - КонецЕсли; - - Возврат ВидПериода; - -КонецФункции - // Возвращает вид периода. В отличии от функции ПолучитьВидПериода на вход принимает СтандартныйПериод. Функция ПолучитьВидСтандартногоПериода(СтандартныйПериод, ДоступныеПериоды = Неопределено) Экспорт @@ -1604,42 +1151,6 @@ КонецФункции -// Возвращает доступные периоды в порядке возрастания периодичности. -Функция ПолучитьСписокДоступныхПериодов() Экспорт - - СписокДоступныхПериодов = Новый Массив; - СписокДоступныхПериодов.Добавить(ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.День")); - СписокДоступныхПериодов.Добавить(ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Неделя")); - СписокДоступныхПериодов.Добавить(ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Декада")); - СписокДоступныхПериодов.Добавить(ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Месяц")); - СписокДоступныхПериодов.Добавить(ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Квартал")); - СписокДоступныхПериодов.Добавить(ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Полугодие")); - СписокДоступныхПериодов.Добавить(ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Год")); - СписокДоступныхПериодов.Добавить(ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.ПроизвольныйПериод")); - - Возврат СписокДоступныхПериодов; - -КонецФункции - -// Приводит значение перечисления ДоступныеПериодыОтчета к варианту стандартного периода. -Функция ПривестиВидПериодаКСтандартному(ВидПериода) Экспорт - Если ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.День") Тогда - Возврат ВариантСтандартногоПериода.Сегодня; - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Неделя") Тогда - Возврат ВариантСтандартногоПериода.ЭтаНеделя; - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Декада") Тогда - Возврат ВариантСтандартногоПериода.ЭтаДекада; - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Месяц") Тогда - Возврат ВариантСтандартногоПериода.ЭтотМесяц; - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Квартал") Тогда - Возврат ВариантСтандартногоПериода.ЭтотКвартал; - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Полугодие") Тогда - Возврат ВариантСтандартногоПериода.ЭтоПолугодие; - ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Год") Тогда - Возврат ВариантСтандартногоПериода.ЭтотГод; - КонецЕсли; -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Унификация формы отчета и формы настроек отчета. @@ -1832,162 +1343,6 @@ Возврат Представление; КонецФункции -Функция ПредставленияОбъектаКД(УзелКД, ЭлементКД, СвойстваНастройки = Неопределено) Экспорт - Результат = Новый Структура("Тип, Подтип, ПользовательскаяНастройкаКД, ДоступнаяНастройкаКД, - |Представление, ПредставлениеПоУмолчанию, ВыводитьТолькоФлажок"); - Если СвойстваНастройки <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(Результат, СвойстваНастройки); - КонецЕсли; - Если Результат.Тип = Неопределено Тогда - Результат.Тип = ТипНастройкиСтрокой(ТипЗнч(ЭлементКД)); - КонецЕсли; - Если Результат.ДоступнаяНастройкаКД = Неопределено Тогда - Если Результат.Тип = "ЗначениеПараметраНастроек" И УзелКД.ДоступныеПараметры <> Неопределено Тогда - Результат.ДоступнаяНастройкаКД = УзелКД.ДоступныеПараметры.НайтиПараметр(ЭлементКД.Параметр); - ИначеЕсли Результат.Тип = "ЭлементОтбора" И УзелКД.ДоступныеПоляОтбора <> Неопределено Тогда - Результат.ДоступнаяНастройкаКД = УзелКД.ДоступныеПоляОтбора.НайтиПоле(ЭлементКД.ЛевоеЗначение); - КонецЕсли; - КонецЕсли; - - // Представление "По умолчанию". - Результат.ПредставлениеПоУмолчанию = ПредставлениеПоУмолчанию(УзелКД, ЭлементКД, Результат); - - // Чтение представления, заданного вручную. - СтруктураПредставлений = Новый Структура("Представление, ПредставлениеПользовательскойНастройки", "", ""); - ЗаполнитьЗначенияСвойств(СтруктураПредставлений, ЭлементКД); - - Результат.ВыводитьТолькоФлажок = ЗначениеЗаполнено(СтруктураПредставлений.Представление); - Если ЗначениеЗаполнено(СтруктураПредставлений.ПредставлениеПользовательскойНастройки) Тогда - Результат.Представление = СтруктураПредставлений.ПредставлениеПользовательскойНастройки; - ИначеЕсли ЗначениеЗаполнено(СтруктураПредставлений.Представление) И СтруктураПредставлений.Представление <> "1" Тогда - Результат.Представление = СтруктураПредставлений.Представление; - КонецЕсли; - - // Если ничего не задано, то "По умолчанию". - Если Не ЗначениеЗаполнено(Результат.Представление) Тогда - Результат.Представление = Результат.ПредставлениеПоУмолчанию; - КонецЕсли; - - Возврат Результат; -КонецФункции - -Функция ПредставлениеПоУмолчанию(УзелКД, ЭлементКД, СвойстваНастройки) Экспорт - Тип = СвойстваНастройки.Тип; - Если Тип = Неопределено Тогда - Тип = ТипНастройкиСтрокой(ТипЗнч(ЭлементКД)); - КонецЕсли; - Подтип = СвойстваНастройки.Подтип; - ПользовательскаяНастройкаКД = СвойстваНастройки.ЭлементКД; - Если ПользовательскаяНастройкаКД = Неопределено Тогда - ПользовательскаяНастройкаКД = ЭлементКД; - КонецЕсли; - ДоступнаяНастройкаКД = СвойстваНастройки.ДоступнаяНастройкаКД; - - Представление = ""; - - Если ЗначениеЗаполнено(СвойстваНастройки.Подтип) Тогда - - Если СвойстваНастройки.Подтип = "ДиаграммаСерии" Тогда - - Представление = НСтр("ru = 'Серии'"); - - ИначеЕсли СвойстваНастройки.Подтип = "ДиаграммаТочки" Тогда - - Представление = НСтр("ru = 'Точки'"); - - ИначеЕсли СвойстваНастройки.Подтип = "ТаблицаСтроки" Тогда - - Представление = НСтр("ru = 'Строки'"); - - ИначеЕсли СвойстваНастройки.Подтип = "ТаблицаКолонки" Тогда - - Представление = НСтр("ru = 'Колонки'"); - - Иначе - - Представление = Строка(Подтип); - - КонецЕсли; - - ИначеЕсли Тип = "Отбор" Тогда - - Представление = НСтр("ru = 'Отбор'"); - - ИначеЕсли Тип = "ГруппаЭлементовОтбора" Тогда - - Представление = Строка(ПользовательскаяНастройкаКД.ТипГруппы); - - ИначеЕсли Тип = "ЭлементОтбора" Тогда - - Если ДоступнаяНастройкаКД <> Неопределено Тогда - Представление = ДоступнаяНастройкаКД.Заголовок; - КонецЕсли; - Если ПустаяСтрока(Представление) Тогда - Представление = ИмяВПредставление(Строка(ЭлементКД.ЛевоеЗначение)); - КонецЕсли; - - ИначеЕсли Тип = "ЗначениеПараметраНастроек" Тогда - - Если ДоступнаяНастройкаКД <> Неопределено Тогда - Представление = ДоступнаяНастройкаКД.Заголовок; - КонецЕсли; - Если ПустаяСтрока(Представление) Тогда - Представление = ИмяВПредставление(Строка(ЭлементКД.Параметр)); - КонецЕсли; - - ИначеЕсли Тип = "Порядок" Тогда - - Представление = НСтр("ru = 'Сортировка'"); - - ИначеЕсли Тип = "ВыбранныеПоля" Тогда - - Представление = НСтр("ru = 'Поля'"); - - ИначеЕсли Тип = "УсловноеОформление" Тогда - - Представление = НСтр("ru = 'Оформление'"); - - ИначеЕсли Тип = "ЭлементУсловногоОформления" Тогда - - Представление = ПредставлениеЭлементаУсловногоОформления(ПользовательскаяНастройкаКД); - - ИначеЕсли Тип = "Группировка" - Или Тип = "ГруппировкаТаблицы" - Или Тип = "ГруппировкаДиаграммы" Тогда - - Представление = СокрЛП(Строка(ЭлементКД.ПоляГруппировки)); - Если ПустаяСтрока(Представление) Тогда - Представление = НСтр("ru = '<Детальные записи>'"); - КонецЕсли; - - ИначеЕсли Тип = "Таблица" Тогда - - Представление = НСтр("ru = 'Таблица'"); - - ИначеЕсли Тип = "Диаграмма" Тогда - - Представление = НСтр("ru = 'Диаграмма'"); - - ИначеЕсли Тип = "НастройкиВложенногоОбъекта" Тогда - - Представление = Строка(ПользовательскаяНастройкаКД); - Если ПустаяСтрока(Представление) Тогда - Представление = НСтр("ru = 'Вложенная группировка'"); - КонецЕсли; - - ИначеЕсли Тип = "СтруктураНастроек" Тогда - - Представление = НСтр("ru = 'Структура'"); - - Иначе - - Представление = Строка(Тип); - - КонецЕсли; - - Возврат Представление; -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Прочее @@ -2066,7 +1421,7 @@ КонецЕсли; КонецФункции -Функция СкопироватьРекурсивно(Узел, ЧтоКопировать, КудаВставить, Индекс, Соответствие) Экспорт +Функция СкопироватьРекурсивно(Знач Узел, Знач ЧтоКопировать, Знач КудаВставить, Знач Индекс, Соответствие) Экспорт ТипЭлемента = ТипЗнч(ЧтоКопировать); ПараметрыКопирования = ПараметрыКопирования(ТипЭлемента, КудаВставить); @@ -2074,14 +1429,12 @@ Если Индекс = Неопределено Тогда НоваяСтрока = КудаВставить.Добавить(ТипЭлемента); Иначе - Индекс = Индекс + 1; НоваяСтрока = КудаВставить.Вставить(Индекс, ТипЭлемента); КонецЕсли; Иначе Если Индекс = Неопределено Тогда НоваяСтрока = КудаВставить.Добавить(); Иначе - Индекс = Индекс + 1; НоваяСтрока = КудаВставить.Вставить(Индекс); КонецЕсли; КонецЕсли; @@ -2130,6 +1483,11 @@ Результат.ИсключаяСвойства = "Родитель"; Результат.НужноУказыватьТипЭлемента = Истина; + ИначеЕсли ТипЭлемента = Тип("ЗначениеПараметраКомпоновкиДанных") + Или ТипЭлемента = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + + Результат.ИсключаяСвойства = "Родитель"; + ИначеЕсли ТипЭлемента = Тип("ПолеГруппировкиКомпоновкиДанных") Или ТипЭлемента = Тип("АвтоПолеГруппировкиКомпоновкиДанных") Или ТипЭлемента = Тип("ЭлементПорядкаКомпоновкиДанных") @@ -2190,7 +1548,6 @@ Результат.ЕстьПараметрыВывода = Истина; Результат.ЕстьПараметрыДанных = Истина; Результат.ЕстьПользовательскиеПоля = Истина; - Результат.ЕстьПоляГруппировки = Истина; Результат.ЕстьПорядок = Истина; Результат.ЕстьСтруктура = Истина; Результат.ЕстьУсловноеОформление = Истина; @@ -2238,13 +1595,14 @@ Соответствие.Вставить(СтарыйИдентификатор, НовыйИдентификатор); Если ПараметрыКопирования.ЕстьНастройки Тогда + ЧтоЗаполнить.УстановитьИдентификатор(ЧемЗаполнить.ИдентификаторОбъекта); ЧтоЗаполнить = ЧтоЗаполнить.Настройки; - ПодчиненнаяСтрока = ПодчиненнаяСтрока.Настройки; + ЧемЗаполнить = ЧемЗаполнить.Настройки; КонецЕсли; Если ПараметрыКопирования.ЕстьЭлементы Тогда // Элементы (КоллекцияВыбранныхПолейКомпоновкиДанных, - // КоллекцияЭлементовОтбораКомпоновкиДанных) + // КоллекцияЭлементовОтбораКомпоновкиДанных). КоллекцияВложенных = ЧемЗаполнить.Элементы; Если КоллекцияВложенных.Количество() > 0 Тогда НоваяКоллекцияВложенных = ЧтоЗаполнить.Элементы; @@ -2256,7 +1614,7 @@ Если ПараметрыКопирования.ЕстьВыбор Тогда // Выбор (ВыбранныеПоляКомпоновкиДанных) - // Выбор.Элементы (КоллекцияВыбранныхПолейКомпоновкиДанных) + // Выбор.Элементы (КоллекцияВыбранныхПолейКомпоновкиДанных). ЗаполнитьЗначенияСвойств(ЧтоЗаполнить.Выбор, ЧемЗаполнить.Выбор, , "ДоступныеПоляВыбора, Элементы"); КоллекцияВложенных = ЧемЗаполнить.Выбор.Элементы; Если КоллекцияВложенных.Количество() > 0 Тогда @@ -2269,7 +1627,7 @@ Если ПараметрыКопирования.ЕстьОтбор Тогда // Отбор (ОтборКомпоновкиДанных) - // Отбор.Элементы (КоллекцияЭлементовОтбораКомпоновкиДанных) + // Отбор.Элементы (КоллекцияЭлементовОтбораКомпоновкиДанных). ЗаполнитьЗначенияСвойств(ЧтоЗаполнить.Отбор, ЧемЗаполнить.Отбор, , "ДоступныеПоляОтбора, Элементы"); КоллекцияВложенных = ЧемЗаполнить.Отбор.Элементы; Если КоллекцияВложенных.Количество() > 0 Тогда @@ -2287,7 +1645,7 @@ // ЗначенияПараметровВыводаГруппировкиДиаграммыКомпоновкиДанных, // ЗначенияПараметровВыводаТаблицыКомпоновкиДанных, // ЗначенияПараметровВыводаДиаграммыКомпоновкиДанных) - // ПараметрыВывода.Элементы (КоллекцияЗначенийПараметровКомпоновкиДанных) + // ПараметрыВывода.Элементы (КоллекцияЗначенийПараметровКомпоновкиДанных). КоллекцияВложенных = ЧемЗаполнить.ПараметрыВывода.Элементы; Если КоллекцияВложенных.Количество() > 0 Тогда УзелВложенных = ЧтоЗаполнить.ПараметрыВывода; @@ -2302,19 +1660,22 @@ Если ПараметрыКопирования.ЕстьПараметрыДанных Тогда // ПараметрыДанных (ЗначенияПараметровДанныхКомпоновкиДанных) - // ПараметрыДанных.Элементы (КоллекцияЗначенийПараметровКомпоновкиДанных) + // ПараметрыДанных.Элементы (КоллекцияЗначенийПараметровКомпоновкиДанных). КоллекцияВложенных = ЧемЗаполнить.ПараметрыДанных.Элементы; Если КоллекцияВложенных.Количество() > 0 Тогда - НоваяКоллекцияВложенных = ЧтоЗаполнить.ПараметрыДанных.Элементы; + УзелВложенных = ЧтоЗаполнить.ПараметрыДанных; Для Каждого ПодчиненнаяСтрока Из КоллекцияВложенных Цикл - СкопироватьРекурсивно(Узел, ПодчиненнаяСтрока, НоваяКоллекцияВложенных, Неопределено, Соответствие); + ЗначениеПараметраКД = УзелВложенных.НайтиЗначениеПараметра(ПодчиненнаяСтрока.Параметр); + Если ЗначениеПараметраКД <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(ЗначениеПараметраКД, ПодчиненнаяСтрока); + КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; Если ПараметрыКопирования.ЕстьПользовательскиеПоля Тогда // ПользовательскиеПоля (ПользовательскиеПоляКомпоновкиДанных) - // ПользовательскиеПоля.Элементы (КоллекцияПользовательскихПолейКомпоновкиДанных) + // ПользовательскиеПоля.Элементы (КоллекцияПользовательскихПолейКомпоновкиДанных). КоллекцияВложенных = ЧемЗаполнить.ПользовательскиеПоля.Элементы; Если КоллекцияВложенных.Количество() > 0 Тогда НоваяКоллекцияВложенных = ЧтоЗаполнить.ПользовательскиеПоля.Элементы; @@ -2326,7 +1687,7 @@ Если ПараметрыКопирования.ЕстьПоляГруппировки Тогда // ПоляГруппировки (ПоляГруппировкиКомпоновкиДанных) - // ПоляГруппировки.Элементы (КоллекцияПолейГруппировкиКомпоновкиДанных) + // ПоляГруппировки.Элементы (КоллекцияПолейГруппировкиКомпоновкиДанных). КоллекцияВложенных = ЧемЗаполнить.ПоляГруппировки.Элементы; Если КоллекцияВложенных.Количество() > 0 Тогда НоваяКоллекцияВложенных = ЧтоЗаполнить.ПоляГруппировки.Элементы; @@ -2338,7 +1699,7 @@ Если ПараметрыКопирования.ЕстьПорядок Тогда // Порядок (ПорядокКомпоновкиДанных) - // Порядок.Элементы (КоллекцияЭлементовПорядкаКомпоновкиДанных) + // Порядок.Элементы (КоллекцияЭлементовПорядкаКомпоновкиДанных). ЗаполнитьЗначенияСвойств(ЧтоЗаполнить.Порядок, ЧемЗаполнить.Порядок, , "ДоступныеПоляПорядка, Элементы"); КоллекцияВложенных = ЧемЗаполнить.Порядок.Элементы; Если КоллекцияВложенных.Количество() > 0 Тогда @@ -2365,7 +1726,7 @@ Если ПараметрыКопирования.ЕстьУсловноеОформление Тогда // УсловноеОформление (УсловноеОформлениеКомпоновкиДанных) - // УсловноеОформление.Элементы (КоллекцияЭлементовУсловногоОформленияКомпоновкиДанных) + // УсловноеОформление.Элементы (КоллекцияЭлементовУсловногоОформленияКомпоновкиДанных). ЗаполнитьЗначенияСвойств(ЧтоЗаполнить.УсловноеОформление, ЧемЗаполнить.УсловноеОформление, , "ДоступныеПоляОтбора, ДоступныеПоляПолей, Элементы"); КоллекцияВложенных = ЧемЗаполнить.УсловноеОформление.Элементы; Если КоллекцияВложенных.Количество() > 0 Тогда @@ -2451,26 +1812,6 @@ Возврат ЧтоЗаполнить; КонецФункции -Функция ПриДобавленииЭлементаНужноУказыватьТип(ТипЭлемента) Экспорт - Если ТипЭлемента = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") - Или ТипЭлемента = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") - Или ТипЭлемента = Тип("ВыбранноеПолеКомпоновкиДанных") - Или ТипЭлемента = Тип("ЭлементОтбораКомпоновкиДанных") - Или ТипЭлемента = Тип("ПолеГруппировкиКомпоновкиДанных") - Или ТипЭлемента = Тип("ЭлементПорядкаКомпоновкиДанных") - Или ТипЭлемента = Тип("АвтоВыбранноеПолеКомпоновкиДанных") - Или ТипЭлемента = Тип("АвтоПолеГруппировкиКомпоновкиДанных") - Или ТипЭлемента = Тип("АвтоЭлементПорядкаКомпоновкиДанных") - Или ТипЭлемента = Тип("ГруппировкаКомпоновкиДанных") - Или ТипЭлемента = Тип("ТаблицаКомпоновкиДанных") - Или ТипЭлемента = Тип("ДиаграммаКомпоновкиДанных") - Или ТипЭлемента = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда - Возврат Истина; - Иначе - Возврат Ложь; - КонецЕсли; -КонецФункции - Функция ПриДобавленииВКоллекциюНужноУказыватьТипЭлемента(ТипКоллекции) Экспорт Если ТипКоллекции = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") Или ТипКоллекции = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") @@ -2515,7 +1856,7 @@ КонецЕсли; КонецФункции -Функция ОписанияТиповСовпадают(ОписаниеТипов1, ОписаниеТипов2) Экспорт +Функция ОписанияТиповСовпадают(ОписаниеТипов1, ОписаниеТипов2) Если ОписаниеТипов1 = Неопределено Или ОписаниеТипов2 = Неопределено Тогда Возврат Ложь; КонецЕсли; @@ -2532,17 +1873,19 @@ Возврат Ложь; КонецФункции -Функция ДополнитьСписок(СписокПриемник, СписокИсточник, КонтролироватьТип = Неопределено, Заменять = Истина) Экспорт +Функция ДополнитьСписок(СписокПриемник, СписокИсточник, КонтролироватьТип = Неопределено, ДобавлятьНовые = Истина) Экспорт Если СписокПриемник = Неопределено Или СписокИсточник = Неопределено Тогда Возврат Неопределено; КонецЕсли; + ЗаменятьСуществующие = Истина; + Результат = Новый Структура; Результат.Вставить("Всего", 0); Результат.Вставить("Добавлено", 0); Результат.Вставить("Обновлено", 0); Результат.Вставить("Пропущено", 0); - + Если КонтролироватьТип = Неопределено Тогда КонтролироватьТип = Не ОписанияТиповСовпадают(СписокПриемник.ТипЗначения, СписокИсточник.ТипЗначения); КонецЕсли; @@ -2558,18 +1901,20 @@ КонецЕсли; ЭлементПриемник = СписокПриемник.НайтиПоЗначению(Значение); Если ЭлементПриемник = Неопределено Тогда - Результат.Добавлено = Результат.Добавлено + 1; - ЭлементПриемник = СписокПриемник.Добавить(); - ЭлементПриемник.Значение = Значение; - Иначе - Если Не Заменять Тогда - Результат.Пропущено = Результат.Пропущено + 1; - Продолжить; + Если ДобавлятьНовые Тогда + Результат.Добавлено = Результат.Добавлено + 1; + ЗаполнитьЗначенияСвойств(СписокПриемник.Добавить(), ЭлементИсточник); Иначе + Результат.Пропущено = Результат.Пропущено + 1; + КонецЕсли; + Иначе + Если ЗаменятьСуществующие Тогда Результат.Обновлено = Результат.Обновлено + 1; + ЗаполнитьЗначенияСвойств(ЭлементПриемник, ЭлементИсточник); + Иначе + Результат.Пропущено = Результат.Пропущено + 1; КонецЕсли; КонецЕсли; - ЗаполнитьЗначенияСвойств(ЭлементПриемник, ЭлементИсточник); КонецЦикла; Возврат Результат; КонецФункции @@ -2747,15 +2092,6 @@ Возврат Список; КонецФункции -Процедура УдалитьКлючиСтруктуры(Структура, Ключи) Экспорт - Если ТипЗнч("Ключи") = Тип("Строка") Тогда - Ключи = СтрРазделить(Ключи, ",", Ложь); - КонецЕсли; - Для Каждого ИмяКлюча Из Ключи Цикл - Структура.Удалить(СокрЛП(ИмяКлюча)); - КонецЦикла; -КонецПроцедуры - Функция НайтиСтрокиТаблицы(ТаблицаРеквизит, ДанныеСтроки) Экспорт Если ТипЗнч(ТаблицаРеквизит) = Тип("ДанныеФормыКоллекция") Тогда // Таблица значений. Возврат ТаблицаРеквизит.НайтиСтроки(ДанныеСтроки); @@ -2792,4 +2128,107 @@ КонецЕсли; КонецПроцедуры +// Возвращает список полей группировок всех группировок компоновщика настроек. +// +// Параметры: +// КомпоновщикНастроек - компоновщик настроек. +// БезПользовательскихПолей - признак не включения пользовательских настроек СКД. +// +Функция ПолучитьПоляГруппировок(КомпоновщикНастроек, БезПользовательскихПолей = Ложь) Экспорт + + СписокПолей = Новый СписокЗначений; + + Структура = КомпоновщикНастроек.Настройки.Структура; + ДобавитьПоляГруппировки(Структура, СписокПолей, БезПользовательскихПолей); + Возврат СписокПолей; + +КонецФункции + +// Добавляет вложенные поля группировки. +Процедура ДобавитьПоляГруппировки(Структура, СписокПолей, БезПользовательскихПолей) + + Для каждого ЭлементСтруктуры Из Структура Цикл + Если ТипЗнч(ЭлементСтруктуры) = Тип("ТаблицаКомпоновкиДанных") Тогда + ДобавитьПоляГруппировки(ЭлементСтруктуры.Строки, СписокПолей, БезПользовательскихПолей); + ДобавитьПоляГруппировки(ЭлементСтруктуры.Колонки, СписокПолей, БезПользовательскихПолей); + ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("ДиаграммаКомпоновкиДанных") Тогда + ДобавитьПоляГруппировки(ЭлементСтруктуры.Серии, СписокПолей, БезПользовательскихПолей); + ДобавитьПоляГруппировки(ЭлементСтруктуры.Точки, СписокПолей, БезПользовательскихПолей); + Иначе + Для каждого ТекущееПолеГруппировки Из ЭлементСтруктуры.ПоляГруппировки.Элементы Цикл + ДоступноеПоле = ЭлементСтруктуры.Выбор.ДоступныеПоляВыбора.НайтиПоле(ТекущееПолеГруппировки.Поле); + Если ДоступноеПоле <> Неопределено + И (ДоступноеПоле.Родитель = Неопределено ИЛИ Не БезПользовательскихПолей ИЛИ ДоступноеПоле.Родитель.Поле <> Новый ПолеКомпоновкиДанных("UserFields")) Тогда + СписокПолей.Добавить(Строка(ДоступноеПоле.Поле), ДоступноеПоле.Заголовок); + КонецЕсли; + КонецЦикла; + ДобавитьПоляГруппировки(ЭлементСтруктуры.Структура, СписокПолей, БезПользовательскихПолей); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Возвращает последний элемент структуры - группировку. +// +// Параметры: +// ЭлементСтруктурыНастроек - элемент структуры компоновки данных. +// Строки - признак для получения последний группировки строк (Серий) или колонок (точек). +// +Функция ПолучитьПоследнийЭлементСтруктуры(ЭлементСтруктурыНастроек, Строки = Истина) Экспорт + + Если ТипЗнч(ЭлементСтруктурыНастроек) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда + Настройки = ЭлементСтруктурыНастроек.Настройки; + ИначеЕсли ТипЗнч(ЭлементСтруктурыНастроек) = Тип("НастройкиКомпоновкиДанных") Тогда + Настройки = ЭлементСтруктурыНастроек; + Иначе + Возврат Неопределено; + КонецЕсли; + + Структура = Настройки.Структура; + Если Структура.Количество() = 0 Тогда + Возврат Настройки; + КонецЕсли; + + Если Строки Тогда + ИмяСтруктурыТаблицы = "Строки"; + ИмяСтруктурыДиаграммы = "Серии"; + Иначе + ИмяСтруктурыТаблицы = "Колонки"; + ИмяСтруктурыДиаграммы = "Точки"; + КонецЕсли; + + Пока Истина Цикл + ЭлементСтруктуры = Структура[0]; + Если ТипЗнч(ЭлементСтруктуры) = Тип("ТаблицаКомпоновкиДанных") И ЭлементСтруктуры[ИмяСтруктурыТаблицы].Количество() > 0 Тогда + Если ЭлементСтруктуры[ИмяСтруктурыТаблицы][0].Структура.Количество() = 0 Тогда + Структура = ЭлементСтруктуры[ИмяСтруктурыТаблицы]; + Прервать; + КонецЕсли; + Структура = ЭлементСтруктуры[ИмяСтруктурыТаблицы][0].Структура; + ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("ДиаграммаКомпоновкиДанных") И ЭлементСтруктуры[ИмяСтруктурыДиаграммы].Количество() > 0 Тогда + Если ЭлементСтруктуры[ИмяСтруктурыДиаграммы][0].Структура.Количество() = 0 Тогда + Структура = ЭлементСтруктуры[ИмяСтруктурыДиаграммы]; + Прервать; + КонецЕсли; + Структура = ЭлементСтруктуры[ИмяСтруктурыДиаграммы][0].Структура; + ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаКомпоновкиДанных") + ИЛИ ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаТаблицыКомпоновкиДанных") + ИЛИ ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда + Если ЭлементСтруктуры.Структура.Количество() = 0 Тогда + Прервать; + КонецЕсли; + Структура = ЭлементСтруктуры.Структура; + ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("ТаблицаКомпоновкиДанных") Тогда + Возврат ЭлементСтруктуры[ИмяСтруктурыТаблицы]; + ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("ДиаграммаКомпоновкиДанных") Тогда + Возврат ЭлементСтруктуры[ИмяСтруктурыДиаграммы]; + Иначе + Возврат ЭлементСтруктуры; + КонецЕсли; + КонецЦикла; + + Возврат Структура[0]; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ОтчетыПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОтчетыПереопределяемый/Module.bsl index 5a902e48a..b19e32bf3 100644 --- a/SSL/src/CommonModules/ОтчетыПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыПереопределяемый/Module.bsl @@ -76,7 +76,7 @@ // НовыеНастройкиКД - НастройкиКомпоновкиДанных - Настройки для загрузки в компоновщик настроек. // // См. также: -// "Расширение управляемой формы для отчета.ПриЗагрузкеВариантаНаСервере" в синтакс-помощнике. +// "Расширение управляемой формы для отчета.ПередЗагрузкойВариантаНаСервере" в синтакс-помощнике. // Процедура ПередЗагрузкойВариантаНаСервере(Форма, НовыеНастройкиКД) Экспорт diff --git a/SSL/src/CommonModules/ОтчетыСервер/Module.bsl b/SSL/src/CommonModules/ОтчетыСервер/Module.bsl index 4decd44af..e77ce7a6b 100644 --- a/SSL/src/CommonModules/ОтчетыСервер/Module.bsl +++ b/SSL/src/CommonModules/ОтчетыСервер/Module.bsl @@ -3,6 +3,52 @@ // //////////////////////////////////////////////////////////////////////////////// +#Область ПрограммныйИнтерфейс + +// Инициализирует компоновщик на основании схемы и загружает новые настройки. +// Для вызова из обработчика события ПередЗагрузкойНастроекВКомпоновщик() формы отчета, расположенного в модуле объекта отчета. +// +// Параметры: +// ОтчетОбъект - ОтчетОбъект.*, ВнешнийОтчетОбъект.* - Отчет, для которого необходимо подключить схему. +// Контекст - Произвольный - Передается "как есть" из одноименного параметра события ПередЗагрузкойНастроекВКомпоновщик. +// СхемаКД - СхемаКомпоновкиДанных - Схема, которую необходимо подключить. +// КлючСхемы - Строка - Идентификатор новой схемы, который будет записан в дополнительные свойства пользовательских настроек. +// +Процедура ПодключитьСхему(ОтчетОбъект, Контекст, СхемаКД, КлючСхемы) Экспорт + СобытиеИзФормыОтчета = (ТипЗнч(Контекст) = Тип("УправляемаяФорма")); + + ОтчетОбъект.СхемаКомпоновкиДанных = СхемаКД; + Если СобытиеИзФормыОтчета Тогда + НастройкиОтчета = Контекст.НастройкиОтчета; + АдресСхемы = НастройкиОтчета.АдресСхемы; + НастройкиОтчета.Вставить("СхемаМодифицирована", Истина); + Иначе + АдресСхемыЗаполнен = (ТипЗнч(Контекст.АдресСхемы) = Тип("Строка") И ЭтоАдресВременногоХранилища(Контекст.АдресСхемы)); + Если Не АдресСхемыЗаполнен Тогда + ИдентификаторФормы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Контекст, "ИдентификаторФормы"); + Если ТипЗнч(ИдентификаторФормы) = Тип("УникальныйИдентификатор") Тогда + АдресСхемыЗаполнен = Истина; + Контекст.АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКД, ИдентификаторФормы); + КонецЕсли; + КонецЕсли; + Если АдресСхемыЗаполнен Тогда + АдресСхемы = Контекст.АдресСхемы; + Иначе + АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКД); + КонецЕсли; + Контекст.СхемаМодифицирована = Истина; + КонецЕсли; + ПоместитьВоВременноеХранилище(СхемаКД, АдресСхемы); + + ОтчетОбъект.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы)); + + Если СобытиеИзФормыОтчета Тогда + ЗначениеВДанныеФормы(ОтчетОбъект, Контекст.Отчет); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + #Область СлужебныйПрограммныйИнтерфейс // Формирует описание периода для целей сбора статистики. @@ -112,6 +158,7 @@ // Узлы СКД. Результат.Колонки.Добавить("УзелКД"); + Результат.Колонки.Добавить("ДоступнаяНастройкаКД"); Результат.Колонки.Добавить("ПользовательскаяНастройкаКД"); // Прикладная структура. @@ -139,6 +186,7 @@ // Вывод. Результат.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ПредставлениеПоУмолчанию", Новый ОписаниеТипов("Строка")); Результат.Колонки.Добавить("Заголовок", Новый ОписаниеТипов("Строка")); Результат.Колонки.Добавить("ВыводРазрешен", Новый ОписаниеТипов("Булево")); Результат.Колонки.Добавить("ВыводитьТолькоФлажок", Новый ОписаниеТипов("Булево")); @@ -170,9 +218,10 @@ СтрокаДерева.ЕстьПоляИОформление = Истина; ИначеЕсли СтрокаДерева.Тип = "Диаграмма" Тогда СтрокаДерева.ЕстьПоляИОформление = Истина; + ИначеЕсли СтрокаДерева.Тип = "НастройкиВложенногоОбъекта" Тогда + СтрокаДерева.ДоступнаяНастройкаКД = НастройкиКД.ДоступныеОбъекты.Элементы.Найти(УзелКД.ИдентификаторОбъекта); ИначеЕсли СтрокаДерева.Тип = "КоллекцияЭлементовСтруктурыТаблицы" - Или СтрокаДерева.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" - Или СтрокаДерева.Тип = "НастройкиВложенногоОбъекта" Тогда + Или СтрокаДерева.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" Тогда // см. далее. Иначе Возврат СтрокаДерева; @@ -182,7 +231,7 @@ СтрокаДерева, СтрокаДерева.УзелКД, Неопределено, - Неопределено); + СтрокаДерева.ДоступнаяНастройкаКД); Если СтрокаДерева.ЕстьПоляИОформление Тогда СтрокаДерева.Заголовок = ЗаголовокИзПараметровВывода(УзелКД.ПараметрыВывода); @@ -319,6 +368,9 @@ Результат.Колонки.Добавить("ЗапросЗначенийВыбора"); Результат.Колонки.Добавить("СписокЗначенийПереопределен", Новый ОписаниеТипов("Булево")); Результат.Колонки.Добавить("ОграничиватьВыборУказаннымиЗначениями", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("СобытиеПриИзменении", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("Ширина", Новый ОписаниеТипов("Число")); + Результат.Колонки.Добавить("ВыводитьВГруппеОсновныхНастроек", Новый ОписаниеТипов("Булево")); // Вывод. Результат.Колонки.Добавить("ПредставлениеПоУмолчанию", Новый ОписаниеТипов("Строка")); @@ -502,7 +554,7 @@ // Диаграмма, свойство ПараметрыВывода // Группировка, свойство ПараметрыВывода // ГруппировкаДиаграммы, свойство ПараметрыВывода - // ГруппировкаТаблицы, свойство ПараметрыВывода + // ГруппировкаТаблицы, свойство ПараметрыВывода. ЗарегистрироватьУзелНастроек(НастройкиКД, Информация, СтрокаДерева, "ПараметрыВывода"); @@ -598,6 +650,7 @@ НастройкаВарианта.ВыводРазрешен = Ложь; Продолжить; КонецЕсли; + ЗарегистрироватьТипыИСвязи(Информация, УзелКД, ЭлементКД, НастройкаВарианта); КонецЕсли; СвойстваНастройки = Неопределено; @@ -620,23 +673,22 @@ НастройкаВарианта.ЭлементКД, Неопределено, НастройкаВарианта.ДоступнаяНастройкаКД); + Если НастройкаВарианта.Тип = "ЭлементОтбора" + Или НастройкаВарианта.Тип = "ЗначениеПараметраНастроек" Тогда + ПриОпределенииПараметровВыбора(Информация, НастройкаВарианта); + КонецЕсли; КонецЕсли; - Если НастройкаВарианта.Тип = "ЭлементОтбора" Тогда - ЗарегистрироватьТипыИСвязи(Информация, УзелКД, ЭлементКД, НастройкаВарианта); - ИначеЕсли НастройкаВарианта.Тип = "ГруппаЭлементовОтбора" Тогда + Если НастройкаВарианта.Тип = "ГруппаЭлементовОтбора" Тогда НастройкаВарианта.Значение = ЭлементКД.ТипГруппы; ЗарегистрироватьЭлементыНастроек(Информация, УзелКД, ЭлементКД.Элементы, Владелец, НастройкаВарианта); ИначеЕсли НастройкаВарианта.Тип = "ЗначениеПараметраНастроек" Тогда - ЗарегистрироватьТипыИСвязи(Информация, УзелКД, ЭлементКД, НастройкаВарианта); ЗарегистрироватьЭлементыНастроек(Информация, УзелКД, ЭлементКД.ЗначенияВложенныхПараметров, Владелец, НастройкаВарианта); КонецЕсли; Если СвойстваНастройки <> Неопределено Тогда - СвойстваНастройки.ОписаниеТипов = НастройкаВарианта.ОписаниеТипов; - СвойстваНастройки.ИнформацияОТипах = НастройкаВарианта.ИнформацияОТипах; - СвойстваНастройки.ЗначенияДляВыбора = НастройкаВарианта.ЗначенияДляВыбора; - СвойстваНастройки.ПараметрыВыбора = НастройкаВарианта.ПараметрыВыбора; + СвойстваНастройки.ЗначенияДляВыбора = НастройкаВарианта.ЗначенияДляВыбора; + СвойстваНастройки.ПараметрыВыбора = НастройкаВарианта.ПараметрыВыбора; СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями = НастройкаВарианта.ОграничиватьВыборУказаннымиЗначениями; КонецЕсли; КонецЦикла; @@ -715,7 +767,9 @@ НастройкаВарианта.ОписаниеТипов = ДоступнаяНастройкаКД.ТипЗначения; НастройкаВарианта.ФормаВыбора = ДоступнаяНастройкаКД.ФормаВыбора; - Информация.Поиск.НастройкиВариантаПоПолюКД.Вставить(НастройкаВарианта.ПолеКД, НастройкаВарианта); + Если Информация.Поиск.НастройкиВариантаПоПолюКД.Получить(НастройкаВарианта.ПолеКД) = Неопределено Тогда + Информация.Поиск.НастройкиВариантаПоПолюКД.Вставить(НастройкаВарианта.ПолеКД, НастройкаВарианта); + КонецЕсли; КонецПроцедуры @@ -834,17 +888,28 @@ НастройкаВарианта.ЗначенияДляВыбора = Новый СписокЗначений; НастройкиСохраненныеРанее = Информация.ДополнительныеНастройкиЭлементов[НастройкаВарианта.ИдентификаторЭлемента]; - Если НастройкиСохраненныеРанее <> Неопределено - И ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиСохраненныеРанее, "ОграничиватьВыборУказаннымиЗначениями") = Ложь Тогда - СтарыеЗначенияДляВыбора = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиСохраненныеРанее, "ЗначенияДляВыбора"); - СтароеОписаниеТипов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиСохраненныеРанее, "ОписаниеТипов"); - Если ТипЗнч(СтарыеЗначенияДляВыбора) = Тип("СписокЗначений") И ТипЗнч(СтароеОписаниеТипов) = Тип("ОписаниеТипов") Тогда + Ограничивать = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиСохраненныеРанее, "ОграничиватьВыборУказаннымиЗначениями"); + Если НастройкиСохраненныеРанее <> Неопределено И Ограничивать = Ложь Тогда + СтарыеЗначенияДляВыбора = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиСохраненныеРанее, "ЗначенияДляВыбора"); + Если ТипЗнч(СтарыеЗначенияДляВыбора) = Тип("СписокЗначений") Тогда НастройкаВарианта.ЗначенияДляВыбора.ТипЗначения = НастройкаВарианта.ОписаниеТипов; - ОтчетыКлиентСервер.ДополнитьСписок(НастройкаВарианта.ЗначенияДляВыбора, СтарыеЗначенияДляВыбора, Неопределено, Истина); + Для Каждого СтарыйЭлементСписка Из СтарыеЗначенияДляВыбора Цикл + Если Не НастройкаВарианта.ОписаниеТипов.СодержитТип(ТипЗнч(СтарыйЭлементСписка.Значение)) Тогда + Продолжить; + КонецЕсли; + Если НастройкаВарианта.ЗначенияДляВыбора.НайтиПоЗначению(СтарыйЭлементСписка.Значение) <> Неопределено Тогда + Продолжить; + КонецЕсли; + ЭлементПриемник = НастройкаВарианта.ЗначенияДляВыбора.Добавить(); + ЭлементПриемник.Значение = СтарыйЭлементСписка.Значение; + КонецЦикла; КонецЕсли; КонецЕсли; КонецЕсли; +КонецПроцедуры + +Процедура ПриОпределенииПараметровВыбора(Информация, НастройкаВарианта) ПредставлениеДо = Строка(НастройкаВарианта.ЗначенияДляВыбора); КоличествоДо = НастройкаВарианта.ЗначенияДляВыбора.Количество(); @@ -865,11 +930,26 @@ НастройкаВарианта.ЗначенияДляВыбора.СортироватьПоПредставлению(НаправлениеСортировки.Возр); КонецЕсли; + // Удаление значений, выбор которых запрещен. + Если НастройкаВарианта.ВводСписком + И НастройкаВарианта.ОграничиватьВыборУказаннымиЗначениями + И ТипЗнч(НастройкаВарианта.Значение) = Тип("СписокЗначений") + И ТипЗнч(НастройкаВарианта.ЗначенияДляВыбора) = Тип("СписокЗначений") Тогда + Список = НастройкаВарианта.Значение; + Количество = Список.Количество(); + Для Номер = 1 По Количество Цикл + ОбратныйИндекс = Количество - Номер; + Значение = Список[ОбратныйИндекс].Значение; + Если НастройкаВарианта.ЗначенияДляВыбора.НайтиПоЗначению(Значение) = Неопределено Тогда + Список.Удалить(ОбратныйИндекс); + КонецЕсли; + КонецЦикла; + КонецЕсли; + Если КоличествоДо <> НастройкаВарианта.ЗначенияДляВыбора.Количество() Или ПредставлениеДо <> Строка(НастройкаВарианта.ЗначенияДляВыбора) Тогда НастройкаВарианта.СписокЗначенийПереопределен = Истина; КонецЕсли; - КонецПроцедуры Процедура ЗарегистрироватьСвязиОтВедущих(Информация) @@ -995,6 +1075,38 @@ КонецЦикла; КонецПроцедуры +Процедура УстановитьФиксированныеОтборы(СтруктураОтборов, НастройкиКД, НастройкиОтчета) Экспорт + ПараметрыКД = НастройкиКД.ПараметрыДанных; + ОтборыКД = НастройкиКД.Отбор; + Недоступный = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + Для Каждого КлючИЗначение Из СтруктураОтборов Цикл + Имя = КлючИЗначение.Ключ; + Значение = КлючИЗначение.Значение; + Если ТипЗнч(Значение) = Тип("ФиксированныйМассив") Тогда + Значение = Новый Массив(Значение); + КонецЕсли; + Если ТипЗнч(Значение) = Тип("Массив") Тогда + Список = Новый СписокЗначений; + Список.ЗагрузитьЗначения(Значение); + Значение = Список; + КонецЕсли; + ПараметрКД = ПараметрыКД.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(Имя)); + Если ТипЗнч(ПараметрКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ПараметрКД.ИдентификаторПользовательскойНастройки = ""; + ПараметрКД.Использование = Истина; + ПараметрКД.РежимОтображения = Недоступный; + ПараметрКД.Значение = Значение; + Продолжить; + КонецЕсли; + Если ТипЗнч(Значение) = Тип("СписокЗначений") Тогда + ВидСравненияКД = ВидСравненияКомпоновкиДанных.ВСписке; + Иначе + ВидСравненияКД = ВидСравненияКомпоновкиДанных.Равно; + КонецЕсли; + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(ОтборыКД, Имя, Значение, ВидСравненияКД, , Истина, Недоступный, ""); + КонецЦикла; +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Пользовательские настройки @@ -1021,6 +1133,8 @@ СвойстваНастройки.Подтип = НастройкаВарианта.Подтип; СвойстваНастройки.ПолеКД = НастройкаВарианта.ПолеКД; СвойстваНастройки.ДоступнаяНастройкаКД = НастройкаВарианта.ДоступнаяНастройкаКД; + СвойстваНастройки.ИнформацияОТипах = НастройкаВарианта.ИнформацияОТипах; + СвойстваНастройки.ОписаниеТипов = НастройкаВарианта.ОписаниеТипов; Если РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Авто Тогда РежимОтображения = СвойстваНастройки.НастройкаВариантаКД.РежимОтображения; КонецЕсли; @@ -1072,8 +1186,6 @@ СвойстваНастройки.ПользовательскаяНастройкаКД, СвойстваНастройки.ДоступнаяНастройкаКД); - СвойстваНастройки.ПредставлениеПоУмолчанию = СвойстваНастройки.Представление; - Если СвойстваНастройки.Тип = "ГруппаЭлементовОтбора" Или СвойстваНастройки.Тип = "НастройкиВложенногоОбъекта" Или СвойстваНастройки.Тип = "Группировка" @@ -1095,10 +1207,6 @@ КонецЕсли; // Определение типа значения настройки. - ИнформацияОТипах = ОтчетыКлиентСервер.АнализТипов(СвойстваНастройки.ДоступнаяНастройкаКД.ТипЗначения, Истина); - СвойстваНастройки.ИнформацияОТипах = ИнформацияОТипах; - СвойстваНастройки.ОписаниеТипов = ИнформацияОТипах.ОписаниеТиповДляФормы; - Если СвойстваНастройки.Тип = "ЗначениеПараметраНастроек" Тогда Если СвойстваНастройки.ДоступнаяНастройкаКД.Использование = ИспользованиеПараметраКомпоновкиДанных.Всегда Тогда СвойстваНастройки.ВыводитьФлажок = Ложь; @@ -1179,7 +1287,6 @@ КонецФункции Процедура ЗаполнитьПредставлениеНастройки(СвойстваНастройки, НастройкаВариантаКД, ПользовательскаяНастройкаКД, ДоступнаяНастройкаКД) - ЭлементЗаголовок = ""; Если ПользовательскаяНастройкаКД = Неопределено Тогда ПользовательскаяНастройкаКД = НастройкаВариантаКД; КонецЕсли; @@ -1190,115 +1297,73 @@ СвойстваНастройки.ВыводитьТолькоФлажок = ЗначениеЗаполнено(СтруктураПредставлений.Представление); Если ЗначениеЗаполнено(СтруктураПредставлений.ПредставлениеПользовательскойНастройки) Тогда - - ЭлементЗаголовок = СтруктураПредставлений.ПредставлениеПользовательскойНастройки; - + Представление = СтруктураПредставлений.ПредставлениеПользовательскойНастройки; ИначеЕсли ЗначениеЗаполнено(СтруктураПредставлений.Представление) И СтруктураПредставлений.Представление <> "1" Тогда - - ЭлементЗаголовок = СтруктураПредставлений.Представление; - - ИначеЕсли ДоступнаяНастройкаКД <> Неопределено И ЗначениеЗаполнено(ДоступнаяНастройкаКД.Заголовок) Тогда - - ЭлементЗаголовок = ДоступнаяНастройкаКД.Заголовок; - + Представление = СтруктураПредставлений.Представление; + Иначе + Представление = ""; КонецЕсли; + СвойстваНастройки.Представление = СокрЛП(Представление); // Представление "По умолчанию". - Если Не ЗначениеЗаполнено(ЭлементЗаголовок) Тогда - - Если ЗначениеЗаполнено(СвойстваНастройки.Подтип) Тогда - - Если СвойстваНастройки.Подтип = "ДиаграммаСерии" Тогда - - ЭлементЗаголовок = НСтр("ru = 'Серии'"); - - ИначеЕсли СвойстваНастройки.Подтип = "ДиаграммаТочки" Тогда - - ЭлементЗаголовок = НСтр("ru = 'Точки'"); - - ИначеЕсли СвойстваНастройки.Подтип = "ТаблицаСтроки" Тогда - - ЭлементЗаголовок = НСтр("ru = 'Строки'"); - - ИначеЕсли СвойстваНастройки.Подтип = "ТаблицаКолонки" Тогда - - ЭлементЗаголовок = НСтр("ru = 'Колонки'"); - - Иначе - - ЭлементЗаголовок = Строка(СвойстваНастройки.Подтип); - - КонецЕсли; - - ИначеЕсли СвойстваНастройки.Тип = "Отбор" Тогда - - ЭлементЗаголовок = НСтр("ru = 'Отбор'"); - - ИначеЕсли СвойстваНастройки.Тип = "ГруппаЭлементовОтбора" Тогда - - ЭлементЗаголовок = Строка(НастройкаВариантаКД.ТипГруппы); - - ИначеЕсли СвойстваНастройки.Тип = "ЭлементОтбора" Тогда - - ЭлементЗаголовок = Строка(НастройкаВариантаКД.ЛевоеЗначение); - - ИначеЕсли СвойстваНастройки.Тип = "Порядок" Тогда - - ЭлементЗаголовок = НСтр("ru = 'Сортировка'"); - - ИначеЕсли СвойстваНастройки.Тип = "ВыбранныеПоля" Тогда - - ЭлементЗаголовок = НСтр("ru = 'Поля'"); - - ИначеЕсли СвойстваНастройки.Тип = "УсловноеОформление" Тогда - - ЭлементЗаголовок = НСтр("ru = 'Оформление'"); - - ИначеЕсли СвойстваНастройки.Тип = "ЭлементУсловногоОформления" Тогда - - ЭлементЗаголовок = ОтчетыКлиентСервер.ПредставлениеЭлементаУсловногоОформления(ПользовательскаяНастройкаКД); - - ИначеЕсли СвойстваНастройки.Тип = "ЗначениеПараметраНастроек" Тогда - - ЭлементЗаголовок = Строка(НастройкаВариантаКД.Параметр); - - ИначеЕсли СвойстваНастройки.Тип = "Группировка" - Или СвойстваНастройки.Тип = "ГруппировкаТаблицы" - Или СвойстваНастройки.Тип = "ГруппировкаДиаграммы" Тогда - - ЭлементЗаголовок = СокрЛП(Строка(НастройкаВариантаКД.ПоляГруппировки)); - Если ПустаяСтрока(ЭлементЗаголовок) Тогда - ЭлементЗаголовок = НСтр("ru = '<Детальные записи>'"); - КонецЕсли; - - ИначеЕсли СвойстваНастройки.Тип = "Таблица" Тогда - - ЭлементЗаголовок = НСтр("ru = 'Таблица'"); - - ИначеЕсли СвойстваНастройки.Тип = "Диаграмма" Тогда - - ЭлементЗаголовок = НСтр("ru = 'Диаграмма'"); - - ИначеЕсли СвойстваНастройки.Тип = "НастройкиВложенногоОбъекта" Тогда - - ЭлементЗаголовок = Строка(ПользовательскаяНастройкаКД); - Если ПустаяСтрока(ЭлементЗаголовок) Тогда - ЭлементЗаголовок = НСтр("ru = 'Вложенная группировка'"); - КонецЕсли; - - ИначеЕсли СвойстваНастройки.Тип = "СтруктураНастроек" Тогда - - ЭлементЗаголовок = НСтр("ru = 'Структура'"); - + Если ДоступнаяНастройкаКД <> Неопределено И ЗначениеЗаполнено(ДоступнаяНастройкаКД.Заголовок) Тогда + ПредставлениеПоУмолчанию = ДоступнаяНастройкаКД.Заголовок; + ИначеЕсли ЗначениеЗаполнено(СвойстваНастройки.Подтип) Тогда + Если СвойстваНастройки.Подтип = "ДиаграммаСерии" Тогда + ПредставлениеПоУмолчанию = НСтр("ru = 'Серии'"); + ИначеЕсли СвойстваНастройки.Подтип = "ДиаграммаТочки" Тогда + ПредставлениеПоУмолчанию = НСтр("ru = 'Точки'"); + ИначеЕсли СвойстваНастройки.Подтип = "ТаблицаСтроки" Тогда + ПредставлениеПоУмолчанию = НСтр("ru = 'Строки'"); + ИначеЕсли СвойстваНастройки.Подтип = "ТаблицаКолонки" Тогда + ПредставлениеПоУмолчанию = НСтр("ru = 'Колонки'"); + ИначеЕсли СвойстваНастройки.Подтип = "Отчет" Тогда + ПредставлениеПоУмолчанию = НСтр("ru = 'Отчет'"); Иначе - - ЭлементЗаголовок = Строка(СвойстваНастройки.Тип); - + ПредставлениеПоУмолчанию = Строка(СвойстваНастройки.Подтип); КонецЕсли; - + ИначеЕсли СвойстваНастройки.Тип = "Отбор" Тогда + ПредставлениеПоУмолчанию = НСтр("ru = 'Отбор'"); + ИначеЕсли СвойстваНастройки.Тип = "ГруппаЭлементовОтбора" Тогда + ПредставлениеПоУмолчанию = Строка(НастройкаВариантаКД.ТипГруппы); + ИначеЕсли СвойстваНастройки.Тип = "ЭлементОтбора" Тогда + ПредставлениеПоУмолчанию = Строка(НастройкаВариантаКД.ЛевоеЗначение); + ИначеЕсли СвойстваНастройки.Тип = "Порядок" Тогда + ПредставлениеПоУмолчанию = НСтр("ru = 'Сортировка'"); + ИначеЕсли СвойстваНастройки.Тип = "ВыбранныеПоля" Тогда + ПредставлениеПоУмолчанию = НСтр("ru = 'Поля'"); + ИначеЕсли СвойстваНастройки.Тип = "УсловноеОформление" Тогда + ПредставлениеПоУмолчанию = НСтр("ru = 'Оформление'"); + ИначеЕсли СвойстваНастройки.Тип = "ЭлементУсловногоОформления" Тогда + ПредставлениеПоУмолчанию = ОтчетыКлиентСервер.ПредставлениеЭлементаУсловногоОформления(ПользовательскаяНастройкаКД); + ИначеЕсли СвойстваНастройки.Тип = "ЗначениеПараметраНастроек" Тогда + ПредставлениеПоУмолчанию = Строка(НастройкаВариантаКД.Параметр); + ИначеЕсли СвойстваНастройки.Тип = "Группировка" + Или СвойстваНастройки.Тип = "ГруппировкаТаблицы" + Или СвойстваНастройки.Тип = "ГруппировкаДиаграммы" Тогда + ПредставлениеПоУмолчанию = СокрЛП(Строка(НастройкаВариантаКД.ПоляГруппировки)); + Если ПустаяСтрока(ПредставлениеПоУмолчанию) Тогда + ПредставлениеПоУмолчанию = НСтр("ru = '<Детальные записи>'"); + КонецЕсли; + ИначеЕсли СвойстваНастройки.Тип = "Таблица" Тогда + ПредставлениеПоУмолчанию = НСтр("ru = 'Таблица'"); + ИначеЕсли СвойстваНастройки.Тип = "Диаграмма" Тогда + ПредставлениеПоУмолчанию = НСтр("ru = 'Диаграмма'"); + ИначеЕсли СвойстваНастройки.Тип = "НастройкиВложенногоОбъекта" Тогда + ПредставлениеПоУмолчанию = Строка(ПользовательскаяНастройкаКД); + Если ПустаяСтрока(ПредставлениеПоУмолчанию) Тогда + ПредставлениеПоУмолчанию = НСтр("ru = 'Вложенная группировка'"); + КонецЕсли; + ИначеЕсли СвойстваНастройки.Тип = "СтруктураНастроек" Тогда + ПредставлениеПоУмолчанию = НСтр("ru = 'Структура'"); + Иначе + ПредставлениеПоУмолчанию = Строка(СвойстваНастройки.Тип); КонецЕсли; + СвойстваНастройки.ПредставлениеПоУмолчанию = СокрЛП(ПредставлениеПоУмолчанию); - СвойстваНастройки.Представление = СокрЛП(ЭлементЗаголовок); + Если Не ЗначениеЗаполнено(СвойстваНастройки.Представление) Тогда + СвойстваНастройки.Представление = СвойстваНастройки.ПредставлениеПоУмолчанию; + КонецЕсли; КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -1344,7 +1409,8 @@ // Условие. ВыводитьУсловие = (СвойстваНастройки.Тип = "ЭлементОтбора" И СвойстваНастройки.ТипЭлементов <> "СтандартныйПериод" - И СвойстваНастройки.ТипЭлементов <> "ТолькоФлажокЗначения"); + И СвойстваНастройки.ТипЭлементов <> "ТолькоФлажокЗначения" + И Не СвойстваНастройки.ВыводитьТолькоФлажок); Если ВыводитьУсловие Тогда Прочее.ЕстьОтборыСУсловиями = Истина; @@ -1545,75 +1611,16 @@ ЭлементВывода.Размер = 1; ЭлементВывода.ИмяЭлемента2 = ГруппаИмя; - ВидПериодаИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Вид"); - ПредставлениеИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Представление"); - ПериодНачалоИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Начало"); - ПериодОкончаниеИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Окончание"); - ДекорацияИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Декорация"); - СтраницыИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Страницы"); - СтраницаСтандартныйИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "СтраницаСтандартный"); - СтраницаПроизвольныйИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "СтраницаПроизвольный"); + ПериодНачалоИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Начало"); + ПериодОкончаниеИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Окончание"); + ТиреИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Тире"); + КнопкаВыбораИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "КнопкаВыбора"); // Реквизиты. - БыстрыеНастройкиДобавитьРеквизит(Прочее.ПараметрыЗаполнения, ЗначениеИмя, "СтандартныйПериод"); - БыстрыеНастройкиДобавитьРеквизит(Прочее.ПараметрыЗаполнения, ВидПериодаИмя, "ПеречислениеСсылка.ДоступныеПериодыОтчета"); - БыстрыеНастройкиДобавитьРеквизит(Прочее.ПараметрыЗаполнения, ПредставлениеИмя, "Строка"); - - // Вид периода - Элемент. - ВидПериодаЭлемент = Элементы.Добавить(ВидПериодаИмя, Тип("ПолеФормы"), Группа); - ВидПериодаЭлемент.Вид = ВидПоляФормы.ПолеВвода; - ВидПериодаЭлемент.Заголовок = СвойстваНастройки.Представление; - ВидПериодаЭлемент.РежимВыбораИзСписка = Истина; - ВидПериодаЭлемент.РастягиватьПоГоризонтали = Ложь; - ВидПериодаЭлемент.Ширина = 11; - ВидПериодаЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; - ВидПериодаЭлемент.УстановитьДействие("ПриИзменении", "Подключаемый_СтандартныйПериод_Вид_ПриИзменении"); - - // Вид периода - Список выбора. - МинимальнаяПериодичность = Форма.НастройкиОтчета.СоответствиеПериодичностиПараметров[СвойстваНастройки.ПолеКД]; - Если МинимальнаяПериодичность = Неопределено Тогда - МинимальнаяПериодичность = Перечисления.ДоступныеПериодыОтчета.День; - КонецЕсли; - - ДоступныеПериоды = ОтчетыКлиентСервер.ПолучитьСписокДоступныхПериодов(); - Для Индекс = ДоступныеПериоды.Найти(МинимальнаяПериодичность) По ДоступныеПериоды.ВГраница() Цикл - ВидПериодаЭлемент.СписокВыбора.Добавить(ДоступныеПериоды[Индекс]); - КонецЦикла; - - // Страницы. - ГруппаСтраниц = Элементы.Добавить(СтраницыИмя, Тип("ГруппаФормы"), Группа); - ГруппаСтраниц.Вид = ВидГруппыФормы.Страницы; - ГруппаСтраниц.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; - - // Страница СтандартныйПериод. - СтраницаСтандартныйПериод = Элементы.Добавить(СтраницаСтандартныйИмя, Тип("ГруппаФормы"), ГруппаСтраниц); - СтраницаСтандартныйПериод.Вид = ВидГруппыФормы.Страница; - СтраницаСтандартныйПериод.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; - СтраницаСтандартныйПериод.ОтображатьЗаголовок = Ложь; - - // Страница Произвольный. - СтраницаПроизвольныйПериод = Элементы.Добавить(СтраницаПроизвольныйИмя, Тип("ГруппаФормы"), ГруппаСтраниц); - СтраницаПроизвольныйПериод.Вид = ВидГруппыФормы.Страница; - СтраницаПроизвольныйПериод.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; - СтраницаПроизвольныйПериод.ОтображатьЗаголовок = Ложь; - - // Стандартный период. - Период = Элементы.Добавить(ПредставлениеИмя, Тип("ПолеФормы"), СтраницаСтандартныйПериод); - Период.Вид = ВидПоляФормы.ПолеВвода; - Период.Заголовок = НСтр("ru = 'Период'"); - Период.Ширина = 22; - Период.РастягиватьПоГоризонтали = Ложь; - Период.КнопкаВыбора = Истина; - Период.КнопкаОткрытия = Ложь; - Период.КнопкаОчистки = Ложь; - Период.КнопкаРегулирования = Ложь; - Период.РедактированиеТекста = Ложь; - Период.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; - Период.УстановитьДействие("Очистка", "Подключаемый_СтандартныйПериод_Значение_Очистка"); - Период.УстановитьДействие("НачалоВыбора", "Подключаемый_СтандартныйПериод_Значение_НачалоВыбора"); + БыстрыеНастройкиДобавитьРеквизит(Прочее.ПараметрыЗаполнения, ЗначениеИмя, "СтандартныйПериод"); // Начало произвольного периода. - ПериодНачало = Элементы.Добавить(ПериодНачалоИмя, Тип("ПолеФормы"), СтраницаПроизвольныйПериод); + ПериодНачало = Элементы.Добавить(ПериодНачалоИмя, Тип("ПолеФормы"), Группа); ПериодНачало.Вид = ВидПоляФормы.ПолеВвода; ПериодНачало.Ширина = 9; ПериодНачало.РастягиватьПоГоризонтали = Ложь; @@ -1629,41 +1636,35 @@ ПериодНачало.АвтоОтметкаНезаполненного = СвойстваНастройки.ДоступнаяНастройкаКД.ЗапрещатьНезаполненныеЗначения; КонецЕсли; - Тире = Элементы.Добавить(ДекорацияИмя, Тип("ДекорацияФормы"), СтраницаПроизвольныйПериод); + Тире = Элементы.Добавить(ТиреИмя, Тип("ДекорацияФормы"), Группа); Тире.Вид = ВидДекорацииФормы.Надпись; Тире.Заголовок = Символ(8211); // Среднее тире (en dash). // Окончание произвольного периода. - ПериодОкончание = Элементы.Добавить(ПериодОкончаниеИмя, Тип("ПолеФормы"), СтраницаПроизвольныйПериод); + ПериодОкончание = Элементы.Добавить(ПериодОкончаниеИмя, Тип("ПолеФормы"), Группа); ПериодОкончание.Вид = ВидПоляФормы.ПолеВвода; ЗаполнитьЗначенияСвойств(ПериодОкончание, ПериодНачало, "РастягиватьПоГоризонтали, Ширина, ПоложениеЗаголовка, |РедактированиеТекста, КнопкаВыбора, КнопкаОткрытия, КнопкаОчистки, КнопкаРегулирования, АвтоОтметкаНезаполненного"); ПериодОкончание.УстановитьДействие("ПриИзменении", "Подключаемый_СтандартныйПериод_КонецПериода_ПриИзменении"); - // Значения. - НачалоПериода = СвойстваНастройки.Значение.ДатаНачала; - КонецПериода = СвойстваНастройки.Значение.ДатаОкончания; - ВидПериода = ОтчетыКлиентСервер.ПолучитьВидСтандартногоПериода(СвойстваНастройки.Значение, ВидПериодаЭлемент.СписокВыбора); - Представление = ОтчетыКлиентСервер.ПредставлениеСтандартногоПериода(СвойстваНастройки.Значение, ВидПериода); + // Кнопка выбора. + КомандаВыбора = Форма.Команды.Добавить(КнопкаВыбораИмя); + КомандаВыбора.Действие = "Подключаемый_ВыбратьПериод"; + КомандаВыбора.Заголовок = НСтр("ru = 'Выбрать период...'"); + КомандаВыбора.Подсказка = КомандаВыбора.Заголовок; // Для платформы. + КомандаВыбора.Отображение = ОтображениеКнопки.Картинка; + КомандаВыбора.Картинка = БиблиотекаКартинок.Выбрать; + + КнопкаВыбора = Элементы.Добавить(КнопкаВыбораИмя, Тип("КнопкаФормы"), Группа); + КнопкаВыбора.ИмяКоманды = КнопкаВыбораИмя; Дополнительно = Новый Структура; Дополнительно.Вставить("ЗначениеИмя", ЗначениеИмя); - Дополнительно.Вставить("ВидПериодаИмя", ВидПериодаИмя); Дополнительно.Вставить("ПериодНачалоИмя", ПериодНачалоИмя); Дополнительно.Вставить("ПериодОкончаниеИмя", ПериодОкончаниеИмя); - Дополнительно.Вставить("ПредставлениеИмя", ПредставлениеИмя); - Дополнительно.Вставить("ВидПериода", ВидПериода); - Дополнительно.Вставить("Представление", Представление); СвойстваНастройки.Дополнительно = Дополнительно; Прочее.ДобавленныеСтандартныеПериоды.Добавить(СвойстваНастройки); - // Активация страницы. - Если ВидПериода = Перечисления.ДоступныеПериодыОтчета.ПроизвольныйПериод Тогда - ГруппаСтраниц.ТекущаяСтраница = СтраницаПроизвольныйПериод; - Иначе - ГруппаСтраниц.ТекущаяСтраница = СтраницаСтандартныйПериод; - КонецЕсли; - ИначеЕсли СвойстваНастройки.ТипЭлементов = "СписокСПодбором" Тогда Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; @@ -1727,7 +1728,7 @@ КомандаВставить.Действие = "Подключаемый_СписокСПодбором_ВставитьИзБуфера"; КомандаВставить.Заголовок = НСтр("ru = 'Вставить из буфера обмена...'"); КомандаВставить.Подсказка = КомандаВставить.Заголовок; // Для платформы. - КомандаВставить.Картинка = БиблиотекаКартинок.ЗаполнитьФорму; + КомандаВставить.Картинка = БиблиотекаКартинок.ВставитьИзБуфераОбмена; КнопкаВставить = Элементы.Добавить(КнопкаВставитьИмя, Тип("КнопкаФормы"), ГруппаЗаголовокТаблицы); КнопкаВставить.ИмяКоманды = КнопкаВставитьИмя; @@ -2414,42 +2415,4 @@ Возврат Результат; КонецФункции -Процедура УстановитьФиксированныеОтборы(СтруктураОтборов, КомпоновщикНастроек, НастройкиОтчета) Экспорт - ПараметрыКД = КомпоновщикНастроек.Настройки.ПараметрыДанных; - ОтборыКД = КомпоновщикНастроек.Настройки.Отбор; - Недоступный = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; - Для Каждого КлючИЗначение Из СтруктураОтборов Цикл - Имя = КлючИЗначение.Ключ; - Значение = КлючИЗначение.Значение; - Если ТипЗнч(Значение) = Тип("ФиксированныйМассив") Тогда - Значение = Новый Массив(Значение); - КонецЕсли; - Если ТипЗнч(Значение) = Тип("Массив") Тогда - Список = Новый СписокЗначений; - Список.ЗагрузитьЗначения(Значение); - Значение = Список; - КонецЕсли; - ПараметрКД = ПараметрыКД.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(Имя)); - Если ТипЗнч(ПараметрКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда - ПараметрКД.ИдентификаторПользовательскойНастройки = ""; - ПараметрКД.Использование = Истина; - ПараметрКД.РежимОтображения = Недоступный; - ПараметрКД.Значение = Значение; - Продолжить; - КонецЕсли; - ДоступноеПолеКД = ОтборыКД.ДоступныеПоляОтбора.НайтиПоле(Новый ПолеКомпоновкиДанных(Имя)); - Если ТипЗнч(ДоступноеПолеКД) = Тип("ДоступноеПолеОтбораКомпоновкиДанных") Тогда - Если ТипЗнч(Значение) = Тип("СписокЗначений") Тогда - ВидСравненияКД = ВидСравненияКомпоновкиДанных.ВСписке; - Иначе - ВидСравненияКД = ВидСравненияКомпоновкиДанных.Равно; - КонецЕсли; - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(ОтборыКД, Имя, Значение, ВидСравненияКД, , Истина, Недоступный, ""); - Продолжить; - КонецЕсли; - ТекстОшибки = НСтр("ru = 'Не удалось установить фиксированный отбор ""%1"".'"); - ВариантыОтчетов.ОшибкаПоВарианту(НастройкиОтчета.ВариантСсылка, ТекстОшибки, Имя); - КонецЦикла; -КонецПроцедуры - #КонецОбласти 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 bbbfd4b52..706fce611 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПолныеПрава/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительности/Module.bsl @@ -1,81 +1,26 @@ -//////////////////////////////////////////////////////////////////////////////// -// Методы, связанные с записью на сервере результатов замеров времени выполнения -// ключевых операций и их дальнейшем экспортом. -//////////////////////////////////////////////////////////////////////////////// #Область СлужебныйПрограммныйИнтерфейс -// Функция определяет необходимость выполнения замеров. +// Получает признак выполнения замеров производительности. // // Возвращаемое значение: -// Булево - Истина выполнять, Ложь не выполнять. -// +// Булево Функция ВыполнятьЗамерыПроизводительности() Экспорт - - УстановитьПривилегированныйРежим(Истина); Возврат Константы.ВыполнятьЗамерыПроизводительности.Получить(); - КонецФункции // Процедура включает/выключает замеры производительности // Процедура ВключитьЗамерыПроизводительности(Параметр) Экспорт - УстановитьПривилегированныйРежим(Истина); Константы.ВыполнятьЗамерыПроизводительности.Установить(Параметр); КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции -// Процедура записи массива замеров. -// -// Параметры: -// Замеры - Массив элементов типа Структура. -// -// Возвращаемое значение: -// Число - текущее значение периода записи замеров на сервере в секундах в случае записи замеров. -// Неопределено - в случае невозможности записи замеров в монопольном режиме. -// -Функция ЗафиксироватьДлительностьКлючевыхОпераций(Замеры) Экспорт - - Если МонопольныйРежим() Тогда - Возврат Неопределено; - КонецЕсли; - - Для Каждого КлючеваяОперацияЗамер Из Замеры Цикл - КлючеваяОперацияСсылка = КлючеваяОперацияЗамер.Ключ; - Буфер = КлючеваяОперацияЗамер.Значение; - Для Каждого ДатаДанные Из Буфер Цикл - Данные = ДатаДанные.Значение; - Длительность = Данные.Получить("Длительность"); - Если Длительность = Неопределено Тогда - // Неоконченный замер, писать его пока рано - Продолжить; - КонецЕсли; - ЗафиксироватьДлительностьКлючевойОперации( - КлючеваяОперацияСсылка, - Длительность, - Данные["ДатаНачала"], - Данные["ДатаОкончания"], - Данные["Комментарий"], - Данные["Технологический"]); - КонецЦикла; - КонецЦикла; - - Возврат ПериодЗаписи(); - -КонецФункции - -// Текущее значение периода записи результатов замеров на сервере -// -// Возвращаемое значение: -// Число - значение в секундах. -Функция ПериодЗаписи() Экспорт - ТекущийПериод = Константы.ОценкаПроизводительностиПериодЗаписи.Получить(); - Возврат ?(ТекущийПериод >= 1, ТекущийПериод, 60); -КонецФункции // Процедура обработки регламентного задания по выгрузке данных // @@ -109,18 +54,10 @@ КонецПроцедуры -// Текущая дата на сервере -// -// Возвращаемое значение: -// Дата - Дата и время на сервере в формате UTC. -Функция ДатаИВремяНаСервере() Экспорт - Возврат Дата(1,1,1) + ТекущаяУниверсальнаяДатаВМиллисекундах()/1000; -КонецФункции - // Функция создает новый элемент справочника "Ключевые операции". // // Параметры: -// ИмяКлючевойОперации - Строка - название ключевой операции +// ИмяКлючевойОперации - Строка - название ключевой операции. // // Возвращаемое значение: // СправочникСсылка.КлючевыеОперации @@ -185,7 +122,7 @@ // КлючеваяОперация - СправочникСсылка.КлючевыеОперации - ключевая операция // либо Строка - название ключевой операции // Длительность - Число -// ДатаНачалаКлючевойОперации - Дата +// ДатаНачалаКлючевойОперации - Дата. Процедура ЗафиксироватьДлительностьКлючевойОперации( КлючеваяОперация, Длительность, @@ -200,9 +137,11 @@ Возврат; КонецЕсли; - + + УстановитьПривилегированныйРежим(Истина); + Если ТипЗнч(КлючеваяОперация) = Тип("Строка") Тогда - КлючеваяОперацияСсылка = ОценкаПроизводительностиВызовСервераПовтИсп.ПолучитьКлючевуюОперациюПоИмени(КлючеваяОперация); + КлючеваяОперацияСсылка = ОценкаПроизводительностиПовтИсп.ПолучитьКлючевуюОперациюПоИмени(КлючеваяОперация); Иначе КлючеваяОперацияСсылка = КлючеваяОперация; КонецЕсли; @@ -242,7 +181,7 @@ // // Параметры: // ДатаЗамера - Дата -// либо Число - результат ТекущаяУниверсальнаяДатаВМиллисекундах() +// либо Число - результат ТекущаяУниверсальнаяДатаВМиллисекундах(). Функция ДатаПоТипуЗамера(ДатаЗамера) Если ТипЗнч(ДатаЗамера) = Тип("Число") Тогда ДатаЗамера = Дата("00010101") + ДатаЗамера / 1000; @@ -424,7 +363,7 @@ // ДатаФормированияФайла - Дата, дата и время выполнения замера // РасширениеСТочкой - Строка, задающая расширение файла, в виде ".xxx". // Возвращаемое значение: -// Строка - полный путь к файлу экспорта +// Строка - полный путь к файлу экспорта. // Функция ПолноеИмяФайлаЭкспорта(Каталог, ДатаФормированияФайла, РасширениеСТочкой) @@ -464,7 +403,8 @@ // Строка - строка, разделенная по словам. // // Примеры: -// РазложитьСтрокуПоСловам("ОдинДваТри") - возвратит строку "Один два три"; +// РазложитьСтрокуПоСловам("ОдинДваТри") - возвратит строку "Один два три". +// РазложитьСтрокуПоСловам("одиндватри") - возвратит строку "одиндватри". // Функция РазложитьСтрокуПоСловам(Знач Строка) @@ -502,10 +442,14 @@ МассивСлов[Индекс] = НРег(МассивСлов[Индекс]); КонецЦикла; - Результат = СтрСоединить(МассивСлов, " "); - + Если МассивСлов.Количество() <> 0 Тогда + Результат = СтрСоединить(МассивСлов, " "); + Иначе + Результат = Строка; + КонецЕсли; + Возврат Результат; КонецФункции -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОценкаПроизводительности/ОценкаПроизводительности.mdo b/SSL/src/CommonModules/ОценкаПроизводительности/ОценкаПроизводительности.mdo new file mode 100644 index 000000000..03d4bfe20 --- /dev/null +++ b/SSL/src/CommonModules/ОценкаПроизводительности/ОценкаПроизводительности.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="c24f0014-fc8c-485b-9743-0a1398d02749"> + <name>ОценкаПроизводительности</name> + <synonym> + <key>ru</key> + <value>Оценка производительности</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/Module.bsl new file mode 100644 index 000000000..71d62f165 --- /dev/null +++ b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/Module.bsl @@ -0,0 +1,69 @@ +//////////////////////////////////////////////////////////////////////////////// +// Методы, связанные с записью на сервере результатов замеров времени выполнения +// ключевых операций и их дальнейшем экспортом. +//////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +// Функция записи массива замеров +// +// Параметры: +// Замеры - Массив элементов типа Структура. +// +// Возвращаемое значение: +// Число - текущее значение периода записи замеров на сервере в секундах в случае записи замеров. +// +Функция ЗафиксироватьДлительностьКлючевыхОпераций(АдресХранилища) Экспорт + + Если МонопольныйРежим() Тогда + Возврат Неопределено; + КонецЕсли; + + Замеры = ПолучитьИзВременногоХранилища(АдресХранилища); + + Для Каждого КлючеваяОперацияЗамер Из Замеры Цикл + КлючеваяОперацияСсылка = КлючеваяОперацияЗамер.Ключ; + Буфер = КлючеваяОперацияЗамер.Значение; + Для Каждого ДатаДанные Из Буфер Цикл + Данные = ДатаДанные.Значение; + Длительность = Данные.Получить("Длительность"); + Если Длительность = Неопределено Тогда + // Неоконченный замер, писать его пока рано + Продолжить; + КонецЕсли; + ОценкаПроизводительности.ЗафиксироватьДлительностьКлючевойОперации( + КлючеваяОперацияСсылка, + Длительность, + Данные["ДатаНачала"], + Данные["ДатаОкончания"], + Данные["Комментарий"], + Данные["Технологический"]); + КонецЦикла; + КонецЦикла; + + Возврат ПериодЗаписи(); + +КонецФункции + +// Текущее значение периода записи результатов замеров на сервере +// +// Возвращаемое значение: +// Число - значение в секундах. +Функция ПериодЗаписи() Экспорт + + УстановитьПривилегированныйРежим(Истина); + ТекущийПериод = Константы.ОценкаПроизводительностиПериодЗаписи.Получить(); + + Возврат ?(ТекущийПериод >= 1, ТекущийПериод, 60); + +КонецФункции + +// Текущая дата на сервере +// +// Возвращаемое значение: +// Число - текущая универсальная дата в миллисекундах. +Функция ДатаИВремяНаСервере() Экспорт + Возврат Дата(1,1,1) + ТекущаяУниверсальнаяДатаВМиллисекундах()/1000; +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПолныеПрава/ОценкаПроизводительностиВызовСервераПолныеПрава.mdo b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/ОценкаПроизводительностиВызовСервера.mdo similarity index 64% rename from SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПолныеПрава/ОценкаПроизводительностиВызовСервераПолныеПрава.mdo rename to SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/ОценкаПроизводительностиВызовСервера.mdo index c55a688c4..5976b77b8 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПолныеПрава/ОценкаПроизводительностиВызовСервераПолныеПрава.mdo +++ b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервера/ОценкаПроизводительностиВызовСервера.mdo @@ -1,11 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> -<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="12cf9412-baf5-4d32-a563-a11ac3d5e0ed"> - <name>ОценкаПроизводительностиВызовСервераПолныеПрава</name> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="8b81b415-adaf-42ca-bc89-1857d00b96b3"> + <name>ОценкаПроизводительностиВызовСервера</name> <synonym> <key>ru</key> - <value>Оценка производительности вызов сервера полные права</value> + <value>Оценка производительности вызов сервера</value> </synonym> <server>true</server> <serverCall>true</serverCall> - <privileged>true</privileged> </mdclass:CommonModule> diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПовтИсп/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПовтИсп/Module.bsl index 2bd48efbc..56f3a915f 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПовтИсп/Module.bsl @@ -17,48 +17,4 @@ КонецФункции -// Функция возвращает ссылку на ключевую операцию по имени. -// Если ключевая операция с таким названием отсутствует в справочнике, -// то создает новый элемент. -// -// Параметры: -// ИмяКлючевойОперации - Строка - название ключевой операции -// -// Возвращаемое значение: -// СправочникСсылка.КлючевыеОперации -// -Функция ПолучитьКлючевуюОперациюПоИмени(ИмяКлючевойОперации) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | КлючевыеОперации.Ссылка КАК Ссылка - |ИЗ - | Справочник.КлючевыеОперации КАК КлючевыеОперации - |ГДЕ - | КлючевыеОперации.ИмяХеш = &ИмяХеш - | - |УПОРЯДОЧИТЬ ПО - | Ссылка"; - - ХешMD5 = Новый ХешированиеДанных(ХешФункция.MD5); - ХешMD5.Добавить(ИмяКлючевойОперации); - ИмяХеш = ХешMD5.ХешСумма; - ИмяХеш = СтрЗаменить(Строка(ИмяХеш), " ", ""); - - Запрос.УстановитьПараметр("ИмяХеш", ИмяХеш); - РезультатЗапроса = Запрос.Выполнить(); - Если РезультатЗапроса.Пустой() Тогда - КлючеваяОперацияСсылка = ОценкаПроизводительностиВызовСервераПолныеПрава.СоздатьКлючевуюОперацию(ИмяКлючевойОперации); - Иначе - Выборка = РезультатЗапроса.Выбрать(); - Выборка.Следующий(); - КлючеваяОперацияСсылка = Выборка.Ссылка; - КонецЕсли; - - Возврат КлючеваяОперацияСсылка; - -КонецФункции - #КонецОбласти 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 f62f75f44..37546402a 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентГлобальный/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиГлобальный/Module.bsl @@ -6,7 +6,7 @@ #Область СлужебныеПроцедурыИФункции // Процедура заканчивает замер времени выполнения ключевой операции -// Вызывается из обработчика ожидания +// Вызывается из обработчика ожидания. Процедура ЗакончитьЗамерВремениАвто() Экспорт ОценкаПроизводительностиКлиент.ЗакончитьЗамерВремениАвтоНеГлобальный(); @@ -14,7 +14,7 @@ КонецПроцедуры // Процедура вызывает функцию записи результатов замеров на сервере -// Вызывается из обработчика ожидания +// Вызывается из обработчика ожидания. Процедура ЗаписатьРезультатыАвто() Экспорт ОценкаПроизводительностиКлиент.ЗаписатьРезультатыАвтоНеГлобальный(); diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентГлобальный/ОценкаПроизводительностиКлиентГлобальный.mdo b/SSL/src/CommonModules/ОценкаПроизводительностиГлобальный/ОценкаПроизводительностиГлобальный.mdo similarity index 65% rename from SSL/src/CommonModules/ОценкаПроизводительностиКлиентГлобальный/ОценкаПроизводительностиКлиентГлобальный.mdo rename to SSL/src/CommonModules/ОценкаПроизводительностиГлобальный/ОценкаПроизводительностиГлобальный.mdo index 95454d02b..efc0abbdb 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентГлобальный/ОценкаПроизводительностиКлиентГлобальный.mdo +++ b/SSL/src/CommonModules/ОценкаПроизводительностиГлобальный/ОценкаПроизводительностиГлобальный.mdo @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> <mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ed137e05-1996-411d-9927-45a3d7e3ee3b"> - <name>ОценкаПроизводительностиКлиентГлобальный</name> + <name>ОценкаПроизводительностиГлобальный</name> <synonym> <key>ru</key> - <value>Оценка производительности клиент глобальный</value> + <value>Оценка производительности глобальный</value> </synonym> <global>true</global> <clientManagedApplication>true</clientManagedApplication> diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl index 3ed50bdff..54ebefb1a 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl @@ -21,10 +21,10 @@ КонецЕсли; КонецПроцедуры -// Произвести запись накопленных замеров времени выполнения ключевых операций на сервере +// Произвести запись накопленных замеров времени выполнения ключевых операций на сервере. // // Параметры: -// ПередЗавершением - Булево - Истина, если метод вызывается перед закрытием приложения +// ПередЗавершением - Булево - Истина, если метод вызывается перед закрытием приложения. // Процедура ЗаписатьРезультатыАвтоНеГлобальный(ПередЗавершением = Ложь) Экспорт @@ -35,7 +35,8 @@ НовыйПериодЗаписи = ОценкаПроизводительностиЗамерВремени["ПериодЗаписи"]; Иначе Замеры = ОценкаПроизводительностиЗамерВремени["Замеры"]; - НовыйПериодЗаписи = ОценкаПроизводительностиВызовСервераПолныеПрава.ЗафиксироватьДлительностьКлючевыхОпераций(Замеры); + АдресХранилища = ПоместитьВоВременноеХранилище(Замеры, Новый УникальныйИдентификатор("cd097b4b-fcda-4ac8-bf4f-f99e42ed928c")); + НовыйПериодЗаписи = ОценкаПроизводительностиВызовСервера.ЗафиксироватьДлительностьКлючевыхОпераций(АдресХранилища); Если НовыйПериодЗаписи = Неопределено Тогда НовыйПериодЗаписи = ОценкаПроизводительностиЗамерВремени["ПериодЗаписи"]; diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl index 36ad83a2d..433689891 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// Методы, позволяющие начать и закончить замер времени выполнения ключевой операции +// Методы, позволяющие начать и закончить замер времени выполнения ключевой операции. // //////////////////////////////////////////////////////////////////////////////// #Область ПрограммныйИнтерфейс @@ -28,7 +28,7 @@ Запрос.УстановитьПараметр("Имя", КлючеваяОперация.ИмяКлючевойОперации); РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда - ОценкаПроизводительностиВызовСервераПолныеПрава.СоздатьКлючевуюОперацию(КлючеваяОперация.ИмяКлючевойОперации, КлючеваяОперация.ЦелевоеВремя); + ОценкаПроизводительности.СоздатьКлючевуюОперацию(КлючеваяОперация.ИмяКлючевойОперации, КлючеваяОперация.ЦелевоеВремя); КонецЕсли; КонецЦикла; КонецПроцедуры @@ -37,11 +37,11 @@ // Активизирует замер времени выполнения ключевой операции. // Может вызываться как с клиента, так и с сервера. -// Результат замера будет записан в <РегистрСведений.ЗамерыВремени> +// Результат замера будет записан в <РегистрСведений.ЗамерыВремени>. // // В случае вызова с клиента, заканчивать замер не нужно, время завершения замера зафиксируется // через глобальный обработчик ожидания <ЗакончитьЗамерВремениАвто>. -// Возвращает время начала замера +// Возвращает время начала замера. // // В случае вызова с сервера функция только возвращает время начала // Закончить замер нужно явно вызовом процедуры @@ -66,11 +66,11 @@ // Активизирует замер времени выполнения ключевой операции с произвольным комментарием // Может вызываться как с клиента, так и с сервера. -// Результат замера будет записан в <РегистрСведений.ЗамерыВремени> +// Результат замера будет записан в <РегистрСведений.ЗамерыВремени>. // // В случае вызова с клиента, заканчивать замер не нужно, время завершения замера зафиксируется // через глобальный обработчик ожидания <ЗакончитьЗамерВремениАвто>. -// Возвращает время начала замера +// Возвращает время начала замера. // // В случае вызова с сервера функция только возвращает время начала // Закончить замер нужно явно вызовом процедуры @@ -82,7 +82,7 @@ // При вызове с сервера аргумент игнорируется // Комментарий - Строка(256) для записи произвольной информации // при выполнении замера -// При вызове с сервера аргумент игнорируется +// При вызове с сервера аргумент игнорируется. // // Возвращаемое значение: // Число - время начала с точностью до миллисекунд. @@ -100,14 +100,14 @@ #Если Сервер Тогда // Процедура завершает замер времени ключевой операции на сервере // и записывает результат на сервере в <РегистрСведений.ЗамерыВремени> -// Вызывается только с сервера +// Вызывается только с сервера. // // Параметры: // КлючеваяОперация - СправочникСсылка.КлючевыеОперации - ключевая операция // либо Строка - название ключевой операции // ВремяНачала - Число (Формат ТекущаяУниверсальнаяДатаВМиллисекундах()/1000) или Дата начала замера // Комментарий - Строка(256) для записи произвольной информации -// при выполнении замера +// при выполнении замера. Процедура ЗакончитьЗамерВремени(КлючеваяОперация, ВремяНачала, Комментарий = Неопределено) Экспорт Если ОценкаПроизводительностиВызовСервераПовтИсп.ВыполнятьЗамерыПроизводительности() Тогда ДатаОкончания = ЗначениеТаймера(Ложь); @@ -119,7 +119,7 @@ Длительность = (ДатаОкончания - ВремяНачала); ДатаНачала = ВремяНачала; КонецЕсли; - ОценкаПроизводительностиВызовСервераПолныеПрава.ЗафиксироватьДлительностьКлючевойОперации( + ОценкаПроизводительности.ЗафиксироватьДлительностьКлючевойОперации( КлючеваяОперация, Длительность, ДатаНачала, @@ -131,7 +131,7 @@ #Если Клиент Тогда // Активизирует замер времени выполнения ключевой операции. Для завершения замера необходимо -// явно вызвать в общем модуле <ОценкаПроизводительностиКлиентГлобальный> +// явно вызвать в общем модуле <ОценкаПроизводительностиГлобальный> // процедуру <Процедура ЗакончитьРучнойЗамерВремени(УИДЗамера)>, необходимо передать точно такой же // УИДЗамера, как и в данной функции. // Результат замера будет записан в <РегистрСведений.ЗамерыВремени>. @@ -164,10 +164,10 @@ #Если Клиент Тогда // Процедура завершает ручной замер времени ключевой операции -// Вызывается только на клиенте +// Вызывается только на клиенте. // // Параметры: -// УИДЗамера - УникальныйИдентификатор +// УИДЗамера - УникальныйИдентификатор. // Процедура ЗакончитьРучнойЗамерВремени(УИДЗамера) Экспорт ОценкаПроизводительностиКлиент.ЗакончитьРучнойЗамерВремениНеГлобальный(УИДЗамера); @@ -180,21 +180,21 @@ // Активизирует замер времени выполнения технологической ключевой операции. // Может вызываться как с клиента, так и с сервера. -// Результат замера будет записан в <РегистрСведений.ЗамерыВремениТехнологические> +// Результат замера будет записан в <РегистрСведений.ЗамерыВремениТехнологические>. // // В случае вызова с клиента, заканчивать замер не нужно, время завершения замера зафиксируется // через глобальный обработчик ожидания <ЗакончитьЗамерВремениАвто>. -// Возвращает время начала +// Возвращает время начала. // // В случае вызова с сервера функция только возвращает время начала -// Закончить замер нужно явно вызовом процедуры <ЗакончитьЗамерВремени(КлючеваяОперация, ВремяНачала, Комментарий = Неопределено)> +// Закончить замер нужно явно вызовом процедуры <ЗакончитьЗамерВремени(КлючеваяОперация, ВремяНачала, Комментарий = Неопределено)>. // // Параметры: // КлючеваяОперация - СправочникСсылка.КлючевыеОперации - ключевая операция // либо Строка - название ключевой операции // При вызове с сервера аргумент игнорируется. // Комментарий - Строка(256) для записи произвольной информации -// при выполнении замера +// при выполнении замера. // // Возвращаемое значение: // Дата или число - время начала с точностью до миллисекунд или секунд в зависимости от версии платформы. @@ -213,14 +213,14 @@ #Если Сервер Тогда // Процедура завершает замер времени технологической ключевой операции на сервере // и записывает результат на сервере в <РегистрСведений.ЗамерыВремениТехнологические> -// Вызывается только с сервера +// Вызывается только с сервера. // // Параметры: // КлючеваяОперация - СправочникСсылка.КлючевыеОперации - ключевая операция // либо Строка - название ключевой операции // ВремяНачала - Число (Формат ТекущаяУниверсальнаяДатаВМиллисекундах()/1000) или Дата начала замера // Комментарий - Строка(256) для записи произвольной информации -// при выполнении замера +// при выполнении замера. Процедура ЗакончитьЗамерВремениТехнологический(КлючеваяОперация, ВремяНачала, Комментарий = Неопределено) Экспорт Если ОценкаПроизводительностиВызовСервераПовтИсп.ВыполнятьЗамерыПроизводительности() Тогда ДатаОкончания = ЗначениеТаймера(Ложь); @@ -232,7 +232,7 @@ Длительность = (ДатаОкончания - ВремяНачала); ДатаНачала = ВремяНачала; КонецЕсли; - ОценкаПроизводительностиВызовСервераПолныеПрава.ЗафиксироватьДлительностьКлючевойОперации( + ОценкаПроизводительности.ЗафиксироватьДлительностьКлючевойОперации( КлючеваяОперация, Длительность, ДатаНачала, @@ -245,7 +245,7 @@ // Активизирует замер времени выполнения технологической ключевой операции с явным завершением времени // длительности ключевой операции. Вызывается только с клиента. -// Для завершения замера необходимо вызвать в общем модуле <ОценкаПроизводительностиКлиентГлобальный> +// Для завершения замера необходимо вызвать в общем модуле <ОценкаПроизводительностиГлобальный> // процедуру <Процедура ЗакончитьРучнойЗамерВремени(УИДЗамера)>, необходимо передать точно такой же // УИДЗамера, как и в данную процедуру. // Результат замера будет записан в <РегистрСведений.ЗамерыВремениТехнологические>. @@ -277,6 +277,12 @@ #КонецЕсли #Если Клиент Тогда +// Процедура завершает ручной технологический замер времени ключевой операции +// Вызывается только на клиенте. +// +// Параметры: +// УИДЗамера - УникальныйИдентификатор. +// Процедура ЗакончитьРучнойЗамерВремениТехнологический(УИДЗамера) Экспорт ОценкаПроизводительностиКлиент.ЗакончитьРучнойЗамерВремениНеГлобальный(УИДЗамера); КонецПроцедуры @@ -345,10 +351,10 @@ ПараметрыПриложения.Вставить(ИмяПараметра, Новый Структура); ПараметрыПриложения[ИмяПараметра].Вставить("Замеры", Новый Соответствие); - ТекущийПериодЗаписи = ОценкаПроизводительностиВызовСервераПолныеПрава.ПериодЗаписи(); + ТекущийПериодЗаписи = ОценкаПроизводительностиВызовСервера.ПериодЗаписи(); ПараметрыПриложения[ИмяПараметра].Вставить("ПериодЗаписи", ТекущийПериодЗаписи); - ДатаИВремяНаСервере = ОценкаПроизводительностиВызовСервераПолныеПрава.ДатаИВремяНаСервере(); + ДатаИВремяНаСервере = ОценкаПроизводительностиВызовСервера.ДатаИВремяНаСервере(); // Получаем дату в UTC ДатаИВремяНаКлиенте = Дата(1,1,1) + ТекущаяУниверсальнаяДатаВМиллисекундах()/1000; ПараметрыПриложения[ИмяПараметра].Вставить( @@ -395,10 +401,10 @@ Возврат ТекущаяУниверсальнаяДатаВМиллисекундах() / 1000.0; КонецФункции -// Получает имя дополнительного свойства не проверять приоритеты при записи ключевой операции +// Получает имя дополнительного свойства не проверять приоритеты при записи ключевой операции. // // Возвращаемое значение: -// Строка - имя дополнительного свойства +// Строка - имя дополнительного свойства. // Функция НеПроверятьПриоритет() Экспорт @@ -412,7 +418,7 @@ // Параметры: // ИмяСобытия - Строка // Уровень - УровеньЖурналаРегистрации -// ТекстСообщения - Строка +// ТекстСообщения - Строка. // Процедура ЗаписатьВЖурналРегистрации(ИмяСобытия, Уровень, ТекстСообщения) Экспорт @@ -425,7 +431,7 @@ КонецПроцедуры #КонецЕсли -// Ключ параметра регламентного задания, соответствующий локальному каталогу экспорта +// Ключ параметра регламентного задания, соответствующий локальному каталогу экспорта. // Функция ЛокальныйКаталогЭкспортаКлючЗадания() Экспорт diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиПовтИсп/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиПовтИсп/Module.bsl new file mode 100644 index 000000000..75d653ea2 --- /dev/null +++ b/SSL/src/CommonModules/ОценкаПроизводительностиПовтИсп/Module.bsl @@ -0,0 +1,53 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Оценка производительности". +// +//////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +// Функция возвращает ссылку на ключевую операцию по имени. +// Если ключевая операция с таким названием отсутствует в справочнике, +// то создает новый элемент. +// +// Параметры: +// ИмяКлючевойОперации - Строка - название ключевой операции. +// ВыполненаСОшибкой - Булево - признак ключевой операции. +// +// Возвращаемое значение: +// СправочникСсылка.КлючевыеОперации +// +Функция ПолучитьКлючевуюОперациюПоИмени(ИмяКлючевойОперации) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 + | КлючевыеОперации.Ссылка КАК Ссылка + |ИЗ + | Справочник.КлючевыеОперации КАК КлючевыеОперации + |ГДЕ + | КлючевыеОперации.ИмяХеш = &ИмяХеш + | + |УПОРЯДОЧИТЬ ПО + | Ссылка"; + + ХешMD5 = Новый ХешированиеДанных(ХешФункция.MD5); + ХешMD5.Добавить(ИмяКлючевойОперации); + ИмяХеш = ХешMD5.ХешСумма; + ИмяХеш = СтрЗаменить(Строка(ИмяХеш), " ", ""); + + Запрос.УстановитьПараметр("ИмяХеш", ИмяХеш); + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + КлючеваяОперацияСсылка = ОценкаПроизводительности.СоздатьКлючевуюОперацию(ИмяКлючевойОперации, 1); + Иначе + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + КлючеваяОперацияСсылка = Выборка.Ссылка; + КонецЕсли; + + Возврат КлючеваяОперацияСсылка; + +КонецФункции + +#КонецОбласти \ No newline at end of file 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 137bf3c72..a988a27fd 100644 --- a/SSL/src/CommonModules/ДлительныеОперацииКлиентПовтИсп/ДлительныеОперацииКлиентПовтИсп.mdo +++ b/SSL/src/CommonModules/ОценкаПроизводительностиПовтИсп/ОценкаПроизводительностиПовтИсп.mdo @@ -1,11 +1,12 @@ <?xml version="1.0" encoding="UTF-8"?> -<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="a3d599b9-89d1-4386-8c5b-1c2a9905e6e2"> - <name>ДлительныеОперацииКлиентПовтИсп</name> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="b3e0efae-67f6-409a-93dd-750b7f860831"> + <name>ОценкаПроизводительностиПовтИсп</name> <synonym> <key>ru</key> - <value>Длительные операции клиент повт исп</value> + <value>Оценка производительности повт исп</value> </synonym> - <clientManagedApplication>true</clientManagedApplication> + <server>true</server> + <externalConnection>true</externalConnection> <clientOrdinaryApplication>true</clientOrdinaryApplication> <returnValuesReuse>DuringSession</returnValuesReuse> </mdclass:CommonModule> diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl index 3c23482f9..48ebb511f 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиСлужебный/Module.bsl @@ -56,7 +56,7 @@ // Параметры: // ДатаНачала - ДатаВремя - Начало периода выборки // ДатаОкончания - ДатаВремя - Окончание периода выборка -// ТопApdexКоличество - Число - Количество худших замеров, если но, то возвращаются все замеры +// ТопApdexКоличество - Число - Количество худших замеров, если но, то возвращаются все замеры. // Функция ПолучитьТопAPDEX(ДатаНачала, ДатаОкончания, ПериодАгрегации, ТопApdexКоличество) Экспорт Возврат РегистрыСведений.ЗамерыВремени.ПолучитьТопAPDEX(ДатаНачала, ДатаОкончания, ПериодАгрегации, ТопApdexКоличество); @@ -66,12 +66,32 @@ // Параметры: // ДатаНачала - ДатаВремя - Начало периода выборки // ДатаОкончания - ДатаВремя - Окончание периода выборка -// ТопApdexКоличество - Число - Количество худших замеров, если но, то возвращаются все замеры +// ТопApdexКоличество - Число - Количество худших замеров, если но, то возвращаются все замеры. // Функция ПолучитьТопAPDEXТехнологический(ДатаНачала, ДатаОкончания, ПериодАгрегации, ТопApdexКоличество) Экспорт Возврат РегистрыСведений.ЗамерыВремениТехнологические.ПолучитьТопAPDEX(ДатаНачала, ДатаОкончания, ПериодАгрегации, ТопApdexКоличество); КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов в эту подсистему. + +// См. одноименную процедуру в общем модуле ПользователиПереопределяемый. +Процедура ПриОпределенииНазначенияРолей(НазначениеРолей) Экспорт + + // ТолькоДляПользователейСистемы. + НазначениеРолей.ТолькоДляПользователейСистемы.Добавить( + Метаданные.Роли.НастройкаИОценкаПроизводительности.Имя); + +КонецПроцедуры + +// См. описание одноименной процедуры в общем модуле РегламентныеЗаданияПереопределяемый. +// +Процедура ПриОпределенииНастроекРегламентныхЗаданий(Зависимости) Экспорт + Зависимость = Зависимости.Добавить(); + Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ЭкспортОценкиПроизводительности; + Зависимость.РаботаетСВнешнимиРесурсами = Истина; +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -128,9 +148,9 @@ КонецПроцедуры // Заполняет параметр сеанса "КомментарийЗамераВремени" -// при запуске программы +// при запуске программы. // -Функция ПолучитьКомментарийЗамераВремени() Экспорт +Функция ПолучитьКомментарийЗамераВремени() СистемнаяИнформация = Новый СистемнаяИнформация(); ВерсияПриложения = СистемнаяИнформация.ВерсияПриложения; ВерсияКонфигурации = Метаданные.Синоним + ", версия " + Метаданные.Версия; @@ -170,7 +190,7 @@ // Находит и возвращает регламентное задание экспорта замеров времени // // Возвращаемое значение: -// РегламентноеЗадание - РегламентноеЗадание.ЭкспортОценкиПроизводительности, найденное задание +// РегламентноеЗадание - РегламентноеЗадание.ЭкспортОценкиПроизводительности, найденное задание. // Функция РегламентноеЗаданиеЭкспортаОценкиПроизводительности() Экспорт @@ -198,7 +218,7 @@ // "ВыполнятьЭкспортНаFTP" - Булево - Признак выполнения экспорта на FTP // "FTPКаталогЭкспорта" - Строка - FTP-каталог экспорта // "ВыполнятьЭкспортВЛокальныйКаталог" - Булево - Признак выполнения экспорта в локальный каталог -// "ЛокальныйКаталогЭкспорта" - Строка - Локальный каталог экспорта +// "ЛокальныйКаталогЭкспорта" - Строка - Локальный каталог экспорта. // Функция КаталогиЭкспортаОценкиПроизводительности() Экспорт @@ -250,7 +270,7 @@ // Возвращает ссылку на элемент "Общая производительность", // Если существует предопределенный элемент "ОбщаяПроизводительностьСистемы", то возвращается этот элемент -// В противном случае возвращается пустая ссылка +// В противном случае возвращается пустая ссылка. // // Параметры: // Нет @@ -347,97 +367,47 @@ Возврат Разрешения; КонецФункции -Функция СформироватьПрограммноНаСервере(СхемаКомпоновкиДанных, Настройки, УникальныйИдентификатор, АдресХранилища) Экспорт - КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; - ДанныеРасшифровкиОбъект = Новый ДанныеРасшифровкиКомпоновкиДанных; - - ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; - МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); - - ПКД = Новый ПроцессорКомпоновкиДанных; - ПКД.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки); - ПВ = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; - - Результат = Новый ТабличныйДокумент; - - ПВ.УстановитьДокумент(Результат); - ПВ.Вывести(ПКД); - - Если Результат.Рисунки.Количество() = 1 Тогда - Результат.Рисунки[0].Объект.Обновление = Ложь; - Результат.Рисунки[0].Объект.Анимация = АнимацияДиаграммы.НеИспользовать; - Результат.Рисунки[0].Объект.ОбластьПостроения.Лево = 0; - Результат.Рисунки[0].Высота = 60; - Результат.Рисунки[0].Ширина = 250; - Результат.Рисунки[0].Объект.Обновление = Истина; - - Результат.Рисунки[0].Объект.ОбластьПостроения.ОриентацияМеток = ОриентацияМетокДиаграммы.Горизонтально; - Для Каждого ТекСерия Из Результат.Рисунки[0].Объект.Серии Цикл - ТекСерия.Маркер = ТипМаркераДиаграммы.Нет; - КонецЦикла; - Результат.УдалитьОбласть(Результат.Область("R20:R35"), ТипСмещенияТабличногоДокумента.ПоВертикали); - КонецЕсли; - - Результат.ПоказатьУровеньГруппировокСтрок(1); - Результат.ПоказатьУровеньГруппировокСтрок(0); - - ДанныеФЗ = Новый Структура; - ДанныеФЗ.Вставить("ТабличныйДокумент", Результат); - ДанныеФЗ.Вставить("ДанныеРасшифровки", ДанныеРасшифровки); - - ПоместитьВоВременноеХранилище(ДанныеФЗ, АдресХранилища); -КонецФункции - -Функция РезультатЗапросаВМассив(Результат) Экспорт - РезультатМассив = Новый Массив; - - Выборка = Результат.Выбрать(); - Пока Выборка.Следующий() Цикл - ДанныеСтроки = Новый Структура; - - Для Каждого ТекКолонка Из Результат.Колонки Цикл - ДанныеСтроки.Вставить(ТекКолонка.Имя, Выборка[ТекКолонка.Имя]); - КонецЦикла; - - РезультатМассив.Добавить(ДанныеСтроки); - КонецЦикла; - - Возврат РезультатМассив; -КонецФункции - Процедура ЗаполнитьИмяХеш() Экспорт + НачатьТранзакцию(); - Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Справочник.КлючевыеОперации"); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; - Блокировка.Заблокировать(); - - Запрос = Новый Запрос; - Запрос.Текст = " - |ВЫБРАТЬ - | Ссылка - |ИЗ - | Справочник.КлючевыеОперации - |ГДЕ - | ИмяХеш = """" - |"; - - Результат = Запрос.Выполнить(); - Выборка = Результат.Выбрать(); - Пока Выборка.Следующий() Цикл - СпрОбъект = Выборка.Ссылка.ПолучитьОбъект(); - СпрОбъект.ОбменДанными.Загрузка = Истина; + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.КлючевыеОперации"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + Блокировка.Заблокировать(); - ХешMD5 = Новый ХешированиеДанных(ХешФункция.MD5); - ХешMD5.Добавить(СпрОбъект.Имя); - ИмяХешТемп = ХешMD5.ХешСумма; - СпрОбъект.ИмяХеш = СтрЗаменить(Строка(ИмяХешТемп), " ", ""); + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | Ссылка + |ИЗ + | Справочник.КлючевыеОперации + |ГДЕ + | ИмяХеш = """" + |"; + + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + СпрОбъект = Выборка.Ссылка.ПолучитьОбъект(); + СпрОбъект.ОбменДанными.Загрузка = Истина; + + ХешMD5 = Новый ХешированиеДанных(ХешФункция.MD5); + ХешMD5.Добавить(СпрОбъект.Имя); + ИмяХешТемп = ХешMD5.ХешСумма; + СпрОбъект.ИмяХеш = СтрЗаменить(Строка(ИмяХешТемп), " ", ""); + + СпрОбъект.Записать(); + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; - СпрОбъект.Записать(); - КонецЦикла; - - ЗафиксироватьТранзакцию(); КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl index da486b600..6bdee0244 100644 --- a/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl @@ -288,7 +288,7 @@ // Ключ // ИнтервалПовтораПриАварийномЗавершении. // Расписание -// КоличествоПовторовПриАварийномЗавершении +// КоличествоПовторовПриАварийномЗавершении. // // Возвращаемое значение: // СправочникСсылка.ОчередьЗаданий, СправочникСсылка.ОчередьЗаданийОбластейДанных - Идентификатор добавленного задания. @@ -436,7 +436,7 @@ // Ключ // ИнтервалПовтораПриАварийномЗавершении. // Расписание -// КоличествоПовторовПриАварийномЗавершении +// КоличествоПовторовПриАварийномЗавершении. // // В случае если задание создано на основе шаблона, могут быть указаны // только следующие ключи: Использование. @@ -594,7 +594,7 @@ // В случае вызова в транзакции на задание устанавливается объектная блокировка. // // Параметры: -// Идентификатор - СправочникСсылка.ОчередьЗаданий, СправочникСсылка.ОчередьЗаданийОбластейДанных, - Идентификатор задания +// Идентификатор - СправочникСсылка.ОчередьЗаданий, СправочникСсылка.ОчередьЗаданийОбластейДанных, - Идентификатор задания. // Процедура УдалитьЗадание(Идентификатор) Экспорт @@ -658,6 +658,17 @@ КонецФункции +// Возвращает текст ошибки при попытке выполнить одновременно два задания с одним ключом. +// +// Возвращаемое значение: +// Строка. +// +Функция ПолучитьТекстИсключенияДублированиеЗаданийСОдинаковымКлючом() Экспорт + + Возврат НСтр("ru = 'Дублирование заданий с одинаковым значения поля ''Ключ'' не допустимо.'"); + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -665,7 +676,7 @@ // Проверяет переданную структуру параметров на соответствие требованиям // подсистемы: // - состав ключей -// - типы параметров +// - типы параметров. // // Параметры: // Параметры - Структура - параметры заданий. @@ -827,17 +838,6 @@ КонецФункции -// Возвращает текст ошибки при попытке выполнить одновременно два задания с одним ключом. -// -// Возвращаемое значение: -// Строка. -// -Функция ПолучитьТекстИсключенияДублированиеЗаданийСОдинаковымКлючом() Экспорт - - Возврат НСтр("ru = 'Дублирование заданий с одинаковым значения поля ''Ключ'' не допустимо.'"); - -КонецФункции - // Возвращает текст ошибки при попытке получить перечень заданий другой области из сеанса с // с установленными значениями разделителя. // diff --git a/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl index 4e40f0c1e..d0686bbc0 100644 --- a/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданийСлужебный/Module.bsl @@ -3,6 +3,364 @@ // //////////////////////////////////////////////////////////////////////////////// +#Область ПрограммныйИнтерфейс + +// Возвращает следующую дата выполнения расписания. +// +// Параметры: +// Расписание - РасписаниеРегламентногоЗадания - расписание по которому +// будет рассчитываться дата. +// ДатаДляПроверки - Дата (ДатаВремя) - минимальная дата на которую может +// быть запланировано выполнение. +// ДатаНачалаПоследнегоЗапуска - Дата (ДатаВремя) - Дата начала последнего +// запуска задания. Если дата задана, то используется для проверки таких +// условий как ПериодПовтораДней, ПериодНедель, ПериодПовтораВТечениеДня. +// Если дата не задана, то считается, что задание не выполнялось ни разу +// и проверка этих условий не производится. +// ДатаЗавершенияПоследнегоЗапуска - Дата (ДатаВремя) - Дата завершения +// последнего запуска задания. Если дата задана, то используется для +// проверки условия ПаузаПовтора. Если дата не задана, то считается, что +// задание ни разу не завершалось, и проверка этого условия не производится. +// МаксимальныйГоризонтПланирования - Число - Максимальное количество секунд +// относительно ДатаДляПроверки на которое может быть выполнено планирование. +// Увеличение значения может привести к замедлению расчета на сложных +// расписаниях. +// +Функция СледующаяДатаВыполненияРасписания(Знач Расписание, Знач ДатаДляПроверки, + Знач ДатаНачалаПоследнегоЗапуска = Неопределено, Знач ДатаЗавершенияПоследнегоЗапуска = Неопределено, + Знач МаксимальныйГоризонтПланирования = Неопределено) Экспорт + + Если МаксимальныйГоризонтПланирования = Неопределено Тогда + МаксимальныйГоризонтПланирования = 366 * 86400 * 10; + КонецЕсли; + + ИсходнаяДатаДляПроверки = ДатаДляПроверки; + ВремяНачалаПоследнегоЗапуска = '00010101' + (ДатаНачалаПоследнегоЗапуска - НачалоДня(ДатаНачалаПоследнегоЗапуска)); + + // Границы по датам + Если ЗначениеЗаполнено(Расписание.ДатаКонца) + И ДатаДляПроверки > Расписание.ДатаКонца Тогда + + // Интервал выполнения по дням закончился. + Возврат '00010101'; + КонецЕсли; + + Если ДатаДляПроверки < Расписание.ДатаНачала Тогда + ДатаДляПроверки = Расписание.ДатаНачала; + КонецЕсли; + + МожноМенятьДень = Истина; + + // Учет периодичности + Если ЗначениеЗаполнено(ДатаНачалаПоследнегоЗапуска) Тогда + + // Период недель + Если Расписание.ПериодНедель > 1 + И (НачалоНедели(ДатаДляПроверки) - НачалоНедели(ДатаНачалаПоследнегоЗапуска)) / (7 * 86400) < Расписание.ПериодНедель Тогда + + ДатаДляПроверки = НачалоНедели(ДатаНачалаПоследнегоЗапуска) + 7 * 86400 * Расписание.ПериодНедель; + КонецЕсли; + + // Период дней + Если Расписание.ПериодПовтораДней = 0 Тогда + Если НачалоДня(ДатаДляПроверки) <> НачалоДня(ДатаНачалаПоследнегоЗапуска) Тогда + // Повторения не установлено и задание уже выполнялось. + Возврат '00010101'; + КонецЕсли; + + МожноМенятьДень = Ложь; + КонецЕсли; + + Если Расписание.ПериодПовтораДней > 1 + И НачалоДня(ДатаДляПроверки) - НачалоДня(ДатаНачалаПоследнегоЗапуска) < (Расписание.ПериодПовтораДней - 1)* 86400 Тогда + + ДатаДляПроверки = НачалоДня(ДатаНачалаПоследнегоЗапуска) + Расписание.ПериодПовтораДней * 86400; + КонецЕсли; + + // Если задание повторяется раз в день (но не чаще) то сдвигаем на следующий день после последнего запуска. + Если Расписание.ПериодПовтораДней = 1 И Расписание.ПериодПовтораВТечениеДня = 0 Тогда + ДатаДляПроверки = Макс(ДатаДляПроверки, НачалоДня(ДатаНачалаПоследнегоЗапуска+86400)); + КонецЕсли; + + КонецЕсли; + + // Учет допустимых интервалов запуска. + ПоменятьМесяц = Ложь; + ПоменятьДень = Ложь; + Пока Истина Цикл + + Если ДатаДляПроверки - ИсходнаяДатаДляПроверки > МаксимальныйГоризонтПланирования Тогда + // Отложить планирование + Возврат '00010101'; + КонецЕсли; + + Если НЕ МожноМенятьДень + И (ПоменятьДень ИЛИ ПоменятьМесяц) Тогда + + // Повторения не установлено и задание уже выполнялось. + Возврат '00010101'; + КонецЕсли; + + // Месяцы + Пока ПоменятьМесяц + ИЛИ Расписание.Месяцы.Количество() > 0 + И Расписание.Месяцы.Найти(Месяц(ДатаДляПроверки)) = Неопределено Цикл + + ПоменятьМесяц = Ложь; + + // Переход на следующий месяц + ДатаДляПроверки = НачалоМесяца(ДобавитьМесяц(ДатаДляПроверки, 1)); + КонецЦикла; + + // День месяца + ДнейВМесяце = День(КонецМесяца(ДатаДляПроверки)); + Если Расписание.ДеньВМесяце <> 0 Тогда + + ТекущийДень = День(ДатаДляПроверки); + + Если Расписание.ДеньВМесяце > 0 + И (ДнейВМесяце < Расписание.ДеньВМесяце ИЛИ ТекущийДень > Расписание.ДеньВМесяце) + ИЛИ Расписание.ДеньВМесяце < 0 + И (ДнейВМесяце < -Расписание.ДеньВМесяце ИЛИ ТекущийДень > ДнейВМесяце - -Расписание.ДеньВМесяце) Тогда + + // В этом месяце нет такого числа или оно уже прошло. + ПоменятьМесяц = Истина; + Продолжить; + КонецЕсли; + + Если Расписание.ДеньВМесяце > 0 Тогда + ДатаДляПроверки = НачалоМесяца(ДатаДляПроверки) + (Расписание.ДеньВМесяце - 1) * 86400; + КонецЕсли; + + Если Расписание.ДеньВМесяце < 0 Тогда + ДатаДляПроверки = НачалоДня(КонецМесяца(ДатаДляПроверки)) - (-Расписание.ДеньВМесяце -1) * 86400; + КонецЕсли; + КонецЕсли; + + // День недели в месяце + Если Расписание.ДеньНеделиВМесяце <> 0 Тогда + Если Расписание.ДеньНеделиВМесяце > 0 Тогда + ДеньНачалаНедели = (Расписание.ДеньНеделиВМесяце - 1) * 7 + 1; + КонецЕсли; + Если Расписание.ДеньНеделиВМесяце < 0 Тогда + ДеньНачалаНедели = ДнейВМесяце - (-Расписание.ДеньНеделиВМесяце) * 7 + 1; + КонецЕсли; + + ДеньКонцаНедели = Мин(ДеньНачалаНедели + 6, ДнейВМесяце); + + Если День(ДатаДляПроверки) > ДеньКонцаНедели + ИЛИ ДеньНачалаНедели > ДнейВМесяце Тогда + // В этом месяце нужная неделя уже прошла (или ее не было). + ПоменятьМесяц = Истина; + Продолжить; + КонецЕсли; + + Если День(ДатаДляПроверки) < ДеньНачалаНедели Тогда + Если Расписание.ДеньВМесяце <> 0 Тогда + + // День зафиксирован и он не подходит. + ПоменятьМесяц = Истина; + Продолжить; + КонецЕсли; + ДатаДляПроверки = НачалоМесяца(ДатаДляПроверки) + (ДеньНачалаНедели - 1) * 86400; + КонецЕсли; + КонецЕсли; + + // День недели + Пока ПоменятьДень + ИЛИ Расписание.ДниНедели.Найти(ДеньНедели(ДатаДляПроверки)) = Неопределено + И Расписание.ДниНедели.Количество() > 0 Цикл + + ПоменятьДень = Ложь; + + Если Расписание.ДеньВМесяце <> 0 Тогда + // День зафиксирован и он не подходит. + ПоменятьМесяц = Истина; + Прервать; + КонецЕсли; + + Если День(ДатаДляПроверки) = ДнейВМесяце Тогда + // Месяц кончился + ПоменятьМесяц = Истина; + Прервать; + КонецЕсли; + + Если Расписание.ДеньНеделиВМесяце <> 0 + И День(ДатаДляПроверки) = ДеньКонцаНедели Тогда + + // Нужная неделя кончилась + ПоменятьМесяц = Истина; + Прервать; + КонецЕсли; + + ДатаДляПроверки = НачалоДня(ДатаДляПроверки) + 86400; + КонецЦикла; + Если ПоменятьМесяц Тогда + Продолжить; + КонецЕсли; + + // Учет времени + ВремяДляПроверки = '00010101' + (ДатаДляПроверки - НачалоДня(ДатаДляПроверки)); + + Если Расписание.ДетальныеРасписанияДня.Количество() = 0 Тогда + ДетальныеРасписания = Новый Массив; + ДетальныеРасписания.Добавить(Расписание); + Иначе + ДетальныеРасписания = Расписание.ДетальныеРасписанияДня; + КонецЕсли; + + // Если у нас есть промежутки, с переходом через полночь, то разбиваем их на два промежутка. + Индекс = 0; + Пока Индекс < ДетальныеРасписания.Количество() Цикл + + РасписаниеДня = ДетальныеРасписания[Индекс]; + + Если НЕ ЗначениеЗаполнено(РасписаниеДня.ВремяНачала) ИЛИ НЕ ЗначениеЗаполнено(РасписаниеДня.ВремяКонца) Тогда + Индекс = Индекс + 1; + Продолжить; + КонецЕсли; + + Если РасписаниеДня.ВремяНачала > РасписаниеДня.ВремяКонца Тогда + + РасписаниеДняПерваяПоловина = Новый РасписаниеРегламентногоЗадания(); + ЗаполнитьЗначенияСвойств(РасписаниеДняПерваяПоловина,РасписаниеДня); + РасписаниеДняПерваяПоловина.ВремяНачала = НачалоДня(РасписаниеДняПерваяПоловина.ВремяНачала); + ДетальныеРасписания.Добавить(РасписаниеДняПерваяПоловина); + + РасписаниеДняВтораяПоловина = Новый РасписаниеРегламентногоЗадания(); + ЗаполнитьЗначенияСвойств(РасписаниеДняВтораяПоловина,РасписаниеДня); + РасписаниеДняВтораяПоловина.ВремяКонца = КонецДня(РасписаниеДняВтораяПоловина.ВремяНачала); + ДетальныеРасписания.Добавить(РасписаниеДняВтораяПоловина); + + ДетальныеРасписания.Удалить(Индекс); + + Иначе + + Индекс = Индекс + 1; + + КонецЕсли; + + КонецЦикла; + + Для Индекс = 0 По ДетальныеРасписания.ВГраница() Цикл + РасписаниеДня = ДетальныеРасписания[Индекс]; + + // Границы по времени + Если ЗначениеЗаполнено(РасписаниеДня.ВремяНачала) + И ВремяДляПроверки < РасписаниеДня.ВремяНачала Тогда + + ВремяДляПроверки = РасписаниеДня.ВремяНачала; + КонецЕсли; + + Если ЗначениеЗаполнено(РасписаниеДня.ВремяКонца) + И ВремяДляПроверки > РасписаниеДня.ВремяКонца Тогда + + Если Индекс < ДетальныеРасписания.ВГраница() Тогда + // Есть еще расписания дня + Продолжить; + КонецЕсли; + + // В этом дне подходящее время уже прошло. + ПоменятьДень = Истина; + Прервать; + КонецЕсли; + + // Период повтора в течении дня. + Если ЗначениеЗаполнено(ДатаНачалаПоследнегоЗапуска) Тогда + + Если РасписаниеДня.ПериодПовтораВТечениеДня = 0 + И НачалоДня(ДатаДляПроверки) = НачалоДня(ДатаНачалаПоследнегоЗапуска) + И (НЕ ЗначениеЗаполнено(РасписаниеДня.ВремяНачала) + ИЛИ ЗначениеЗаполнено(РасписаниеДня.ВремяНачала) И ВремяНачалаПоследнегоЗапуска >= РасписаниеДня.ВремяНачала) + И (НЕ ЗначениеЗаполнено(РасписаниеДня.ВремяКонца) + ИЛИ ЗначениеЗаполнено(РасписаниеДня.ВремяКонца) И ВремяНачалаПоследнегоЗапуска <= РасписаниеДня.ВремяКонца) Тогда + + // В этом интервале (расписании дня) задание уже выполнялось и повторы не установлены. + Если Индекс < ДетальныеРасписания.ВГраница() Тогда + Продолжить; + КонецЕсли; + + ПоменятьДень = Истина; + Прервать; + КонецЕсли; + + Если НачалоДня(ДатаДляПроверки) = НачалоДня(ДатаНачалаПоследнегоЗапуска) + И ВремяДляПроверки - ВремяНачалаПоследнегоЗапуска < РасписаниеДня.ПериодПовтораВТечениеДня Тогда + + НовоеВремяДляПроверки = ВремяНачалаПоследнегоЗапуска + РасписаниеДня.ПериодПовтораВТечениеДня; + + Если ЗначениеЗаполнено(РасписаниеДня.ВремяКонца) И НовоеВремяДляПроверки > РасписаниеДня.ВремяКонца + ИЛИ НачалоДня(НовоеВремяДляПроверки) <> НачалоДня(ВремяДляПроверки) Тогда + + // Время ушло за интервал + Если Индекс < ДетальныеРасписания.ВГраница() Тогда + Продолжить; + КонецЕсли; + + ПоменятьДень = Истина; + Прервать; + КонецЕсли; + + ВремяДляПроверки = НовоеВремяДляПроверки; + + КонецЕсли; + + КонецЕсли; + + // Пауза + Если ЗначениеЗаполнено(ДатаЗавершенияПоследнегоЗапуска) + И ЗначениеЗаполнено(РасписаниеДня.ПаузаПовтора) Тогда + + ВремяЗавершенияПоследнегоЗапуска = '00010101' + (ДатаЗавершенияПоследнегоЗапуска - НачалоДня(ДатаЗавершенияПоследнегоЗапуска)); + + Если НачалоДня(ДатаДляПроверки) = НачалоДня(ДатаНачалаПоследнегоЗапуска) + И ВремяДляПроверки - ВремяЗавершенияПоследнегоЗапуска < РасписаниеДня.ПаузаПовтора Тогда + + НовоеВремяДляПроверки = ВремяЗавершенияПоследнегоЗапуска + РасписаниеДня.ПаузаПовтора; + + Если ЗначениеЗаполнено(РасписаниеДня.ВремяКонца) И НовоеВремяДляПроверки > РасписаниеДня.ВремяКонца + ИЛИ НачалоДня(НовоеВремяДляПроверки) <> НачалоДня(ВремяДляПроверки) Тогда + + // Время ушло за интервал + Если Индекс < ДетальныеРасписания.ВГраница() Тогда + Продолжить; + КонецЕсли; + + ПоменятьДень = Истина; + Прервать; + КонецЕсли; + + ВремяДляПроверки = НовоеВремяДляПроверки; + + КонецЕсли; + КонецЕсли; + + // Нашли подходящее время + Прервать; + + КонецЦикла; + + Если ПоменятьДень Тогда + Продолжить; + КонецЕсли; + + Если ЗначениеЗаполнено(Расписание.ВремяЗавершения) + И ВремяДляПроверки > Расписание.ВремяЗавершения Тогда + // В этом дне выполнять поздно. + ПоменятьДень = Истина; + Продолжить; + КонецЕсли; + + ДатаДляПроверки = НачалоДня(ДатаДляПроверки) + (ВремяДляПроверки - НачалоДня(ВремяДляПроверки)); + + Возврат ДатаДляПроверки; + + КонецЦикла; + +КонецФункции + +#КонецОбласти + #Область СлужебныйПрограммныйИнтерфейс // Рассчитывает следующий момент запуска задания. @@ -361,6 +719,7 @@ СправочникиЗаданий = ОчередьЗаданийСлужебныйПовтИсп.ПолучитьСправочникиЗаданий(); ТекстЗапроса = ""; + ТекстЗапросаБлокировки = ""; Для Каждого СправочникЗаданий Из СправочникиЗаданий Цикл ПерваяСтрока = ПустаяСтрока(ТекстЗапроса); @@ -376,16 +735,34 @@ Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() И ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(СправочникЗаданий.СоздатьЭлемент().Метаданные().ПолноеИмя(), ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных()) Тогда + Если ПустаяСтрока(ТекстЗапросаБлокировки) Тогда + + ТекстЗапросаБлокировки = + "ВЫБРАТЬ + | Блокировки.ОбластьДанныхВспомогательныеДанные КАК ОбластьДанныхВспомогательныеДанные + |ПОМЕСТИТЬ Блокировки + |ИЗ + | РегистрСведений.БлокировкиСеансовОбластейДанных КАК Блокировки + |ГДЕ + | (Блокировки.НачалоБлокировки > &ТекущаяУниверсальнаяДата + | ИЛИ Блокировки.КонецБлокировки <> ДАТАВРЕМЯ(1, 1, 1) + | И Блокировки.КонецБлокировки < &ТекущаяУниверсальнаяДата) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |"; + + КонецЕсли; + ТекстЗапроса = ТекстЗапроса + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( "ВЫБРАТЬ | Очередь.ОбластьДанныхВспомогательныеДанные КАК ОбластьДанных, | Очередь.Ссылка КАК Идентификатор, - | Очередь.Использование, + | Очередь.Использование КАК Использование, | Очередь.ЗапланированныйМоментЗапуска КАК ЗапланированныйМоментЗапуска, - | Очередь.СостояниеЗадания, - | Очередь.ИсполняющееФоновоеЗадание, + | Очередь.ИсполняющееФоновоеЗадание КАК ИсполняющееФоновоеЗадание, | Очередь.ЭксклюзивноеВыполнение КАК ЭксклюзивноеВыполнение, - | Очередь.НомерПопытки, + | Очередь.НомерПопытки КАК НомерПопытки, | Очередь.Шаблон КАК Шаблон, | ЕСТЬNULL(Очередь.Шаблон.Ссылка, НЕОПРЕДЕЛЕНО) КАК СсылкаШаблона, | ЕСТЬNULL(ЧасовыеПояса.Значение, """") КАК ЧасовойПояс, @@ -399,10 +776,48 @@ | ТОГДА Очередь.ИмяМетода | ИНАЧЕ Очередь.Шаблон.ИмяМетода | КОНЕЦ КАК ИмяМетода, + | Очередь.Параметры КАК Параметры, + | Очередь.ДатаНачалаПоследнегоЗапуска КАК ДатаНачалаПоследнегоЗапуска, + | Очередь.ДатаЗавершенияПоследнегоЗапуска КАК ДатаЗавершенияПоследнегоЗапуска + |ИЗ + | %1 КАК Очередь + | ЛЕВОЕ СОЕДИНЕНИЕ Константа.ЧасовойПоясОбластиДанных КАК ЧасовыеПояса + | ПО Очередь.ОбластьДанныхВспомогательныеДанные = ЧасовыеПояса.ОбластьДанныхВспомогательныеДанные + |ГДЕ + | Очередь.Использование + | И Очередь.ЗапланированныйМоментЗапуска <= &ТекущаяУниверсальнаяДата + | И Очередь.СостояниеЗадания = ЗНАЧЕНИЕ(Перечисление.СостоянияЗаданий.Запланировано) + | И Очередь.ЭксклюзивноеВыполнение + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | Очередь.ОбластьДанныхВспомогательныеДанные, + | Очередь.Ссылка, + | Очередь.Использование, + | Очередь.ЗапланированныйМоментЗапуска, + | Очередь.ИсполняющееФоновоеЗадание, + | Очередь.ЭксклюзивноеВыполнение, + | Очередь.НомерПопытки, + | Очередь.Шаблон, + | ЕСТЬNULL(Очередь.Шаблон.Ссылка, НЕОПРЕДЕЛЕНО), + | ЕСТЬNULL(ЧасовыеПояса.Значение, """"), + | ВЫБОР + | КОГДА Очередь.Шаблон = ЗНАЧЕНИЕ(Справочник.ШаблоныЗаданийОчереди.ПустаяСсылка) + | ТОГДА Очередь.Расписание + | ИНАЧЕ Очередь.Шаблон.Расписание + | КОНЕЦ, + | ВЫБОР + | КОГДА Очередь.Шаблон = ЗНАЧЕНИЕ(Справочник.ШаблоныЗаданийОчереди.ПустаяСсылка) + | ТОГДА Очередь.ИмяМетода + | ИНАЧЕ Очередь.Шаблон.ИмяМетода + | КОНЕЦ, | Очередь.Параметры, | Очередь.ДатаНачалаПоследнегоЗапуска, | Очередь.ДатаЗавершенияПоследнегоЗапуска - |ИЗ %1 КАК ОЧЕРЕДЬ ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.БлокировкиСеансовОбластейДанных КАК Блокировки + |ИЗ + | %1 КАК Очередь + | ЛЕВОЕ СОЕДИНЕНИЕ Блокировки КАК Блокировки | ПО Очередь.ОбластьДанныхВспомогательныеДанные = Блокировки.ОбластьДанныхВспомогательныеДанные | ЛЕВОЕ СОЕДИНЕНИЕ Константа.ЧасовойПоясОбластиДанных КАК ЧасовыеПояса | ПО Очередь.ОбластьДанныхВспомогательныеДанные = ЧасовыеПояса.ОбластьДанныхВспомогательныеДанные @@ -410,10 +825,8 @@ | Очередь.Использование | И Очередь.ЗапланированныйМоментЗапуска <= &ТекущаяУниверсальнаяДата | И Очередь.СостояниеЗадания = ЗНАЧЕНИЕ(Перечисление.СостоянияЗаданий.Запланировано) - | И (Очередь.ЭксклюзивноеВыполнение - | ИЛИ Блокировки.ОбластьДанныхВспомогательныеДанные ЕСТЬ NULL - | ИЛИ Блокировки.НачалоБлокировки > &ТекущаяУниверсальнаяДата - | ИЛИ Блокировки.КонецБлокировки < &ТекущаяУниверсальнаяДата)" + | И НЕ Очередь.ЭксклюзивноеВыполнение + | И Блокировки.ОбластьДанныхВспомогательныеДанные ЕСТЬ NULL " , СправочникЗаданий.ПустаяСсылка().Метаданные().ПолноеИмя()); Иначе @@ -422,21 +835,20 @@ "ВЫБРАТЬ | -1 КАК ОбластьДанных, | Очередь.Ссылка КАК Идентификатор, - | Очередь.Использование, + | Очередь.Использование КАК Использование, | Очередь.ЗапланированныйМоментЗапуска КАК ЗапланированныйМоментЗапуска, - | Очередь.СостояниеЗадания, - | Очередь.ИсполняющееФоновоеЗадание, + | Очередь.ИсполняющееФоновоеЗадание КАК ИсполняющееФоновоеЗадание, | Очередь.ЭксклюзивноеВыполнение КАК ЭксклюзивноеВыполнение, - | Очередь.НомерПопытки, + | Очередь.НомерПопытки КАК НомерПопытки, | НЕОПРЕДЕЛЕНО КАК Шаблон, | НЕОПРЕДЕЛЕНО КАК СсылкаШаблона, | """" КАК ЧасовойПояс, | Очередь.Расписание КАК Расписание, | Очередь.ИмяМетода КАК ИмяМетода, - | Очередь.Параметры, - | Очередь.ДатаНачалаПоследнегоЗапуска, - | Очередь.ДатаЗавершенияПоследнегоЗапуска - |ИЗ %1 КАК ОЧЕРЕДЬ + | Очередь.Параметры КАК Параметры, + | Очередь.ДатаНачалаПоследнегоЗапуска КАК ДатаНачалаПоследнегоЗапуска, + | Очередь.ДатаЗавершенияПоследнегоЗапуска КАК ДатаЗавершенияПоследнегоЗапуска + |ИЗ %1 КАК Очередь |ГДЕ | Очередь.Использование | И Очередь.ЗапланированныйМоментЗапуска <= &ТекущаяУниверсальнаяДата @@ -447,30 +859,31 @@ КонецЦикла; - ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 111 - | ВложенныйЗапрос.ОбластьДанных, - | ВложенныйЗапрос.Идентификатор КАК Идентификатор, - | ВложенныйЗапрос.Использование, - | ВложенныйЗапрос.ЗапланированныйМоментЗапуска КАК ЗапланированныйМоментЗапуска, - | ВложенныйЗапрос.ИсполняющееФоновоеЗадание, - | ВложенныйЗапрос.ЭксклюзивноеВыполнение КАК ЭксклюзивноеВыполнение, - | ВложенныйЗапрос.НомерПопытки, - | ВложенныйЗапрос.Шаблон, - | ВложенныйЗапрос.СсылкаШаблона, - | ВложенныйЗапрос.ЧасовойПояс, - | ВложенныйЗапрос.Расписание, - | ВложенныйЗапрос.ИмяМетода, - | ВложенныйЗапрос.Параметры, - | ВложенныйЗапрос.ДатаНачалаПоследнегоЗапуска, - | ВложенныйЗапрос.ДатаЗавершенияПоследнегоЗапуска - |ИЗ - | (" + ТекстЗапроса + ") КАК ВложенныйЗапрос - | - |УПОРЯДОЧИТЬ ПО - | ЭксклюзивноеВыполнение УБЫВ, - | ЗапланированныйМоментЗапуска, - | ДатаЗавершенияПоследнегоЗапуска, - | Идентификатор"; + ТекстЗапроса = ТекстЗапросаБлокировки + + "ВЫБРАТЬ ПЕРВЫЕ 111 + | ВложенныйЗапрос.ОбластьДанных КАК ОбластьДанных, + | ВложенныйЗапрос.Идентификатор КАК Идентификатор, + | ВложенныйЗапрос.Использование КАК Использование, + | ВложенныйЗапрос.ЗапланированныйМоментЗапуска КАК ЗапланированныйМоментЗапуска, + | ВложенныйЗапрос.ИсполняющееФоновоеЗадание КАК ИсполняющееФоновоеЗадание, + | ВложенныйЗапрос.ЭксклюзивноеВыполнение КАК ЭксклюзивноеВыполнение, + | ВложенныйЗапрос.НомерПопытки КАК НомерПопытки, + | ВложенныйЗапрос.Шаблон КАК Шаблон, + | ВложенныйЗапрос.СсылкаШаблона КАК СсылкаШаблона, + | ВложенныйЗапрос.ЧасовойПояс КАК ЧасовойПояс, + | ВложенныйЗапрос.Расписание КАК Расписание, + | ВложенныйЗапрос.ИмяМетода КАК ИмяМетода, + | ВложенныйЗапрос.Параметры КАК Параметры, + | ВложенныйЗапрос.ДатаНачалаПоследнегоЗапуска КАК ДатаНачалаПоследнегоЗапуска, + | ВложенныйЗапрос.ДатаЗавершенияПоследнегоЗапуска КАК ДатаЗавершенияПоследнегоЗапуска + |ИЗ + | (" + ТекстЗапроса + ") КАК ВложенныйЗапрос + | + |УПОРЯДОЧИТЬ ПО + | ЭксклюзивноеВыполнение УБЫВ, + | ЗапланированныйМоментЗапуска, + | ВложенныйЗапрос.ДатаЗавершенияПоследнегоЗапуска, + | Идентификатор"; Запрос.Текст = ТекстЗапроса; РазмерВыборкиТекст = Формат(МаксимальноеКоличествоИсполняющихФоновыхЗаданий * 3, "ЧН=; ЧГ="); @@ -1036,360 +1449,6 @@ КонецПроцедуры -// Возвращает следующую дата выполнения расписания. -// -// Параметры: -// Расписание - РасписаниеРегламентногоЗадания - расписание по которому -// будет рассчитываться дата. -// ДатаДляПроверки - Дата (ДатаВремя) - минимальная дата на которую может -// быть запланировано выполнение. -// ДатаНачалаПоследнегоЗапуска - Дата (ДатаВремя) - Дата начала последнего -// запуска задания. Если дата задана, то используется для проверки таких -// условий как ПериодПовтораДней, ПериодНедель, ПериодПовтораВТечениеДня. -// Если дата не задана, то считается, что задание не выполнялось ни разу -// и проверка этих условий не производится. -// ДатаЗавершенияПоследнегоЗапуска - Дата (ДатаВремя) - Дата завершения -// последнего запуска задания. Если дата задана, то используется для -// проверки условия ПаузаПовтора. Если дата не задана, то считается, что -// задание ни разу не завершалось, и проверка этого условия не производится. -// МаксимальныйГоризонтПланирования - Число - Максимальное количество секунд -// относительно ДатаДляПроверки на которое может быть выполнено планирование. -// Увеличение значения может привести к замедлению расчета на сложных -// расписаниях. -// -Функция СледующаяДатаВыполненияРасписания(Знач Расписание, Знач ДатаДляПроверки, - Знач ДатаНачалаПоследнегоЗапуска = Неопределено, Знач ДатаЗавершенияПоследнегоЗапуска = Неопределено, - Знач МаксимальныйГоризонтПланирования = Неопределено) Экспорт - - Если МаксимальныйГоризонтПланирования = Неопределено Тогда - МаксимальныйГоризонтПланирования = 366 * 86400 * 10; - КонецЕсли; - - ИсходнаяДатаДляПроверки = ДатаДляПроверки; - ВремяНачалаПоследнегоЗапуска = '00010101' + (ДатаНачалаПоследнегоЗапуска - НачалоДня(ДатаНачалаПоследнегоЗапуска)); - - // Границы по датам - Если ЗначениеЗаполнено(Расписание.ДатаКонца) - И ДатаДляПроверки > Расписание.ДатаКонца Тогда - - // Интервал выполнения по дням закончился. - Возврат '00010101'; - КонецЕсли; - - Если ДатаДляПроверки < Расписание.ДатаНачала Тогда - ДатаДляПроверки = Расписание.ДатаНачала; - КонецЕсли; - - МожноМенятьДень = Истина; - - // Учет периодичности - Если ЗначениеЗаполнено(ДатаНачалаПоследнегоЗапуска) Тогда - - // Период недель - Если Расписание.ПериодНедель > 1 - И (НачалоНедели(ДатаДляПроверки) - НачалоНедели(ДатаНачалаПоследнегоЗапуска)) / (7 * 86400) < Расписание.ПериодНедель Тогда - - ДатаДляПроверки = НачалоНедели(ДатаНачалаПоследнегоЗапуска) + 7 * 86400 * Расписание.ПериодНедель; - КонецЕсли; - - // Период дней - Если Расписание.ПериодПовтораДней = 0 Тогда - Если НачалоДня(ДатаДляПроверки) <> НачалоДня(ДатаНачалаПоследнегоЗапуска) Тогда - // Повторения не установлено и задание уже выполнялось. - Возврат '00010101'; - КонецЕсли; - - МожноМенятьДень = Ложь; - КонецЕсли; - - Если Расписание.ПериодПовтораДней > 1 - И НачалоДня(ДатаДляПроверки) - НачалоДня(ДатаНачалаПоследнегоЗапуска) < (Расписание.ПериодПовтораДней - 1)* 86400 Тогда - - ДатаДляПроверки = НачалоДня(ДатаНачалаПоследнегоЗапуска) + Расписание.ПериодПовтораДней * 86400; - КонецЕсли; - - // Если задание повторяется раз в день (но не чаще) то сдвигаем на следующий день после последнего запуска. - Если Расписание.ПериодПовтораДней = 1 И Расписание.ПериодПовтораВТечениеДня = 0 Тогда - ДатаДляПроверки = Макс(ДатаДляПроверки, НачалоДня(ДатаНачалаПоследнегоЗапуска+86400)); - КонецЕсли; - - КонецЕсли; - - // Учет допустимых интервалов запуска. - ПоменятьМесяц = Ложь; - ПоменятьДень = Ложь; - Пока Истина Цикл - - Если ДатаДляПроверки - ИсходнаяДатаДляПроверки > МаксимальныйГоризонтПланирования Тогда - // Отложить планирование - Возврат '00010101'; - КонецЕсли; - - Если НЕ МожноМенятьДень - И (ПоменятьДень ИЛИ ПоменятьМесяц) Тогда - - // Повторения не установлено и задание уже выполнялось. - Возврат '00010101'; - КонецЕсли; - - // Месяцы - Пока ПоменятьМесяц - ИЛИ Расписание.Месяцы.Количество() > 0 - И Расписание.Месяцы.Найти(Месяц(ДатаДляПроверки)) = Неопределено Цикл - - ПоменятьМесяц = Ложь; - - // Переход на следующий месяц - ДатаДляПроверки = НачалоМесяца(ДобавитьМесяц(ДатаДляПроверки, 1)); - КонецЦикла; - - // День месяца - ДнейВМесяце = День(КонецМесяца(ДатаДляПроверки)); - Если Расписание.ДеньВМесяце <> 0 Тогда - - ТекущийДень = День(ДатаДляПроверки); - - Если Расписание.ДеньВМесяце > 0 - И (ДнейВМесяце < Расписание.ДеньВМесяце ИЛИ ТекущийДень > Расписание.ДеньВМесяце) - ИЛИ Расписание.ДеньВМесяце < 0 - И (ДнейВМесяце < -Расписание.ДеньВМесяце ИЛИ ТекущийДень > ДнейВМесяце - -Расписание.ДеньВМесяце) Тогда - - // В этом месяце нет такого числа или оно уже прошло. - ПоменятьМесяц = Истина; - Продолжить; - КонецЕсли; - - Если Расписание.ДеньВМесяце > 0 Тогда - ДатаДляПроверки = НачалоМесяца(ДатаДляПроверки) + (Расписание.ДеньВМесяце - 1) * 86400; - КонецЕсли; - - Если Расписание.ДеньВМесяце < 0 Тогда - ДатаДляПроверки = НачалоДня(КонецМесяца(ДатаДляПроверки)) - (-Расписание.ДеньВМесяце -1) * 86400; - КонецЕсли; - КонецЕсли; - - // День недели в месяце - Если Расписание.ДеньНеделиВМесяце <> 0 Тогда - Если Расписание.ДеньНеделиВМесяце > 0 Тогда - ДеньНачалаНедели = (Расписание.ДеньНеделиВМесяце - 1) * 7 + 1; - КонецЕсли; - Если Расписание.ДеньНеделиВМесяце < 0 Тогда - ДеньНачалаНедели = ДнейВМесяце - (-Расписание.ДеньНеделиВМесяце) * 7 + 1; - КонецЕсли; - - ДеньКонцаНедели = Мин(ДеньНачалаНедели + 6, ДнейВМесяце); - - Если День(ДатаДляПроверки) > ДеньКонцаНедели - ИЛИ ДеньНачалаНедели > ДнейВМесяце Тогда - // В этом месяце нужная неделя уже прошла (или ее не было). - ПоменятьМесяц = Истина; - Продолжить; - КонецЕсли; - - Если День(ДатаДляПроверки) < ДеньНачалаНедели Тогда - Если Расписание.ДеньВМесяце <> 0 Тогда - - // День зафиксирован и он не подходит. - ПоменятьМесяц = Истина; - Продолжить; - КонецЕсли; - ДатаДляПроверки = НачалоМесяца(ДатаДляПроверки) + (ДеньНачалаНедели - 1) * 86400; - КонецЕсли; - КонецЕсли; - - // День недели - Пока ПоменятьДень - ИЛИ Расписание.ДниНедели.Найти(ДеньНедели(ДатаДляПроверки)) = Неопределено - И Расписание.ДниНедели.Количество() > 0 Цикл - - ПоменятьДень = Ложь; - - Если Расписание.ДеньВМесяце <> 0 Тогда - // День зафиксирован и он не подходит. - ПоменятьМесяц = Истина; - Прервать; - КонецЕсли; - - Если День(ДатаДляПроверки) = ДнейВМесяце Тогда - // Месяц кончился - ПоменятьМесяц = Истина; - Прервать; - КонецЕсли; - - Если Расписание.ДеньНеделиВМесяце <> 0 - И День(ДатаДляПроверки) = ДеньКонцаНедели Тогда - - // Нужная неделя кончилась - ПоменятьМесяц = Истина; - Прервать; - КонецЕсли; - - ДатаДляПроверки = НачалоДня(ДатаДляПроверки) + 86400; - КонецЦикла; - Если ПоменятьМесяц Тогда - Продолжить; - КонецЕсли; - - // Учет времени - ВремяДляПроверки = '00010101' + (ДатаДляПроверки - НачалоДня(ДатаДляПроверки)); - - Если Расписание.ДетальныеРасписанияДня.Количество() = 0 Тогда - ДетальныеРасписания = Новый Массив; - ДетальныеРасписания.Добавить(Расписание); - Иначе - ДетальныеРасписания = Расписание.ДетальныеРасписанияДня; - КонецЕсли; - - // Если у нас есть промежутки, с переходом через полночь, то разбиваем их на два промежутка. - Индекс = 0; - Пока Индекс < ДетальныеРасписания.Количество() Цикл - - РасписаниеДня = ДетальныеРасписания[Индекс]; - - Если НЕ ЗначениеЗаполнено(РасписаниеДня.ВремяНачала) ИЛИ НЕ ЗначениеЗаполнено(РасписаниеДня.ВремяКонца) Тогда - Индекс = Индекс + 1; - Продолжить; - КонецЕсли; - - Если РасписаниеДня.ВремяНачала > РасписаниеДня.ВремяКонца Тогда - - РасписаниеДняПерваяПоловина = Новый РасписаниеРегламентногоЗадания(); - ЗаполнитьЗначенияСвойств(РасписаниеДняПерваяПоловина,РасписаниеДня); - РасписаниеДняПерваяПоловина.ВремяНачала = НачалоДня(РасписаниеДняПерваяПоловина.ВремяНачала); - ДетальныеРасписания.Добавить(РасписаниеДняПерваяПоловина); - - РасписаниеДняВтораяПоловина = Новый РасписаниеРегламентногоЗадания(); - ЗаполнитьЗначенияСвойств(РасписаниеДняВтораяПоловина,РасписаниеДня); - РасписаниеДняВтораяПоловина.ВремяКонца = КонецДня(РасписаниеДняВтораяПоловина.ВремяНачала); - ДетальныеРасписания.Добавить(РасписаниеДняВтораяПоловина); - - ДетальныеРасписания.Удалить(Индекс); - - Иначе - - Индекс = Индекс + 1; - - КонецЕсли; - - КонецЦикла; - - Для Индекс = 0 По ДетальныеРасписания.ВГраница() Цикл - РасписаниеДня = ДетальныеРасписания[Индекс]; - - // Границы по времени - Если ЗначениеЗаполнено(РасписаниеДня.ВремяНачала) - И ВремяДляПроверки < РасписаниеДня.ВремяНачала Тогда - - ВремяДляПроверки = РасписаниеДня.ВремяНачала; - КонецЕсли; - - Если ЗначениеЗаполнено(РасписаниеДня.ВремяКонца) - И ВремяДляПроверки > РасписаниеДня.ВремяКонца Тогда - - Если Индекс < ДетальныеРасписания.ВГраница() Тогда - // Есть еще расписания дня - Продолжить; - КонецЕсли; - - // В этом дне подходящее время уже прошло. - ПоменятьДень = Истина; - Прервать; - КонецЕсли; - - // Период повтора в течении дня. - Если ЗначениеЗаполнено(ДатаНачалаПоследнегоЗапуска) Тогда - - Если РасписаниеДня.ПериодПовтораВТечениеДня = 0 - И НачалоДня(ДатаДляПроверки) = НачалоДня(ДатаНачалаПоследнегоЗапуска) - И (НЕ ЗначениеЗаполнено(РасписаниеДня.ВремяНачала) - ИЛИ ЗначениеЗаполнено(РасписаниеДня.ВремяНачала) И ВремяНачалаПоследнегоЗапуска >= РасписаниеДня.ВремяНачала) - И (НЕ ЗначениеЗаполнено(РасписаниеДня.ВремяКонца) - ИЛИ ЗначениеЗаполнено(РасписаниеДня.ВремяКонца) И ВремяНачалаПоследнегоЗапуска <= РасписаниеДня.ВремяКонца) Тогда - - // В этом интервале (расписании дня) задание уже выполнялось и повторы не установлены. - Если Индекс < ДетальныеРасписания.ВГраница() Тогда - Продолжить; - КонецЕсли; - - ПоменятьДень = Истина; - Прервать; - КонецЕсли; - - Если НачалоДня(ДатаДляПроверки) = НачалоДня(ДатаНачалаПоследнегоЗапуска) - И ВремяДляПроверки - ВремяНачалаПоследнегоЗапуска < РасписаниеДня.ПериодПовтораВТечениеДня Тогда - - НовоеВремяДляПроверки = ВремяНачалаПоследнегоЗапуска + РасписаниеДня.ПериодПовтораВТечениеДня; - - Если ЗначениеЗаполнено(РасписаниеДня.ВремяКонца) И НовоеВремяДляПроверки > РасписаниеДня.ВремяКонца - ИЛИ НачалоДня(НовоеВремяДляПроверки) <> НачалоДня(ВремяДляПроверки) Тогда - - // Время ушло за интервал - Если Индекс < ДетальныеРасписания.ВГраница() Тогда - Продолжить; - КонецЕсли; - - ПоменятьДень = Истина; - Прервать; - КонецЕсли; - - ВремяДляПроверки = НовоеВремяДляПроверки; - - КонецЕсли; - - КонецЕсли; - - // Пауза - Если ЗначениеЗаполнено(ДатаЗавершенияПоследнегоЗапуска) - И ЗначениеЗаполнено(РасписаниеДня.ПаузаПовтора) Тогда - - ВремяЗавершенияПоследнегоЗапуска = '00010101' + (ДатаЗавершенияПоследнегоЗапуска - НачалоДня(ДатаЗавершенияПоследнегоЗапуска)); - - Если НачалоДня(ДатаДляПроверки) = НачалоДня(ДатаНачалаПоследнегоЗапуска) - И ВремяДляПроверки - ВремяЗавершенияПоследнегоЗапуска < РасписаниеДня.ПаузаПовтора Тогда - - НовоеВремяДляПроверки = ВремяЗавершенияПоследнегоЗапуска + РасписаниеДня.ПаузаПовтора; - - Если ЗначениеЗаполнено(РасписаниеДня.ВремяКонца) И НовоеВремяДляПроверки > РасписаниеДня.ВремяКонца - ИЛИ НачалоДня(НовоеВремяДляПроверки) <> НачалоДня(ВремяДляПроверки) Тогда - - // Время ушло за интервал - Если Индекс < ДетальныеРасписания.ВГраница() Тогда - Продолжить; - КонецЕсли; - - ПоменятьДень = Истина; - Прервать; - КонецЕсли; - - ВремяДляПроверки = НовоеВремяДляПроверки; - - КонецЕсли; - КонецЕсли; - - // Нашли подходящее время - Прервать; - - КонецЦикла; - - Если ПоменятьДень Тогда - Продолжить; - КонецЕсли; - - Если ЗначениеЗаполнено(Расписание.ВремяЗавершения) - И ВремяДляПроверки > Расписание.ВремяЗавершения Тогда - // В этом дне выполнять поздно. - ПоменятьДень = Истина; - Продолжить; - КонецЕсли; - - ДатаДляПроверки = НачалоДня(ДатаДляПроверки) + (ВремяДляПроверки - НачалоДня(ВремяДляПроверки)); - - Возврат ДатаДляПроверки; - - КонецЦикла; - -КонецФункции - Процедура ЗапланироватьЗадание(Знач Выборка) Если ЗначениеЗаполнено(Выборка.ЧасовойПояс) Тогда diff --git a/SSL/src/CommonModules/ПерепрефиксацияОбъектов/Module.bsl b/SSL/src/CommonModules/ПерепрефиксацияОбъектов/Module.bsl index a5a92d2aa..534aac807 100644 --- a/SSL/src/CommonModules/ПерепрефиксацияОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ПерепрефиксацияОбъектов/Module.bsl @@ -808,7 +808,8 @@ Объект = СоздатьОбъект(ОписаниеОбъекта); - Объект.Организация = ?(Организация = ОрганизацияБезПрефикса, Неопределено, Организация); + Объект[ПрефиксацияОбъектовСобытия.ИмяРеквизитаОрганизация( + Объект.Метаданные())] = ?(Организация = ОрганизацияБезПрефикса, Неопределено, Организация); Если ОписаниеОбъекта.ЭтоДокумент Тогда @@ -1462,9 +1463,7 @@ Процедура ПроверитьВозможностьУстановкиПрефикса() - ФункциональнаяОпцияИспользуется = Неопределено; - ПриОпределенииФункциональнойОпцииПрефиксИнформационнойБазы(ФункциональнаяОпцияИспользуется); - Если Не ФункциональнаяОпцияИспользуется Тогда + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда ВызватьИсключение НСтр("ru='Перепрефиксация объектов недоступна.'"); @@ -1481,37 +1480,6 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в другие подсистемы. -// Возвращает признак наличия в конфигурации функциональной опции ПрефиксыОрганизаций. -// -// Параметры: -// ФункциональнаяОпцияИспользуется - Булево - признак наличия в конфигурации функциональной опции ПрефиксыОрганизаций. -// -Процедура ПриОпределенииФункциональнойОпцииПрефиксыОрганизаций(ФункциональнаяОпцияИспользуется) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Организации") Тогда - ФункциональнаяОпцияИспользуется = Истина; - Иначе - ФункциональнаяОпцияИспользуется = Ложь; - КонецЕсли; - -КонецПроцедуры - -// Возвращает признак наличия в конфигурации функциональной опции ПрефиксИнформационнойБазы. -// -// Параметры: -// ФункциональнаяОпцияИспользуется - Булево - признак наличия в конфигурации функциональной опции -// ПрефиксИнформационнойБазы. -// -Процедура ПриОпределенииФункциональнойОпцииПрефиксИнформационнойБазы(ФункциональнаяОпцияИспользуется) Экспорт - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда - ФункциональнаяОпцияИспользуется = Истина; - Иначе - ФункциональнаяОпцияИспользуется = Ложь; - КонецЕсли; - -КонецПроцедуры - // Возвращает префикс этой информационной базы. // Процедура ПриОпределенииПрефиксаИнформационнойБазы(ПрефиксИнформационнойБазы) Экспорт @@ -1544,7 +1512,7 @@ // Устанавливает префикс этой информационной базы. // -Процедура УстановитьПрефиксИнформационнойБазы(Знач Префикс) Экспорт +Процедура УстановитьПрефиксИнформационнойБазы(Знач Префикс) Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); diff --git a/SSL/src/CommonModules/ПоискИУдалениеДублей/Module.bsl b/SSL/src/CommonModules/ПоискИУдалениеДублей/Module.bsl index f714baad3..d70925f76 100644 --- a/SSL/src/CommonModules/ПоискИУдалениеДублей/Module.bsl +++ b/SSL/src/CommonModules/ПоискИУдалениеДублей/Module.bsl @@ -139,12 +139,26 @@ // Содержит настройки размещения вариантов отчетов в панели отчетов. // // Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// Настройки - Коллекция - Содержит настройки всех отчетов и вариантов конфигурации. +// Используется для передачи в параметрах вспомогательных методов. // // Описание: // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // +// Вспомогательные методы: +// 1. Функции ОписаниеОтчета и ОписаниеВарианта формируют описание настроек отчета и варианта для последующего изменения: +// НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.<ИмяОтчета>); +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// Возвращаемые коллекции содержат одинаковый набор свойств. +// НастройкиОтчета используются как умолчания для вариантов, описания которых еще не получены. +// Подробнее - см. "свойства для изменения" в комментарии к ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// 2. Процедура УстановитьРежимВыводаВПанеляхОтчетов позволяет настроить режим группировки вариантов в панелях отчетов: +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Отчеты.<ИмяОтчета>, Истина/Ложь); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Подсистемы.<ИмяПодсистемы>, Истина/Ложь); +// 3. Процедура НастроитьОтчетВМодулеМенеджера позволяет переопределять настройки отчета в его модуле менеджера: +// ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.<ИмяОтчета>); +// Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.МестаИспользованияСсылок); @@ -212,4 +226,92 @@ КонецПроцедуры +// Формирует таблицу обслуживаемых объектов метаданных и их общие настройки. +// +// Возвращаемое значение: +// ТаблицаЗначений - Заполняемый список, в котором устанавливаются: +// * ПолноеИмя - Строка - Полное имя метаданных объекта-таблицы. +// * ПредставлениеЭлемента - Строка - Представление элемента для пользователя. +// * ПредставлениеСписка - Строка - Представление списка для пользователя. +// * Удален - Булево - Флаг того, что объект метаданных с префиксом "Удалить". +// * СобытиеПараметрыПоискаДублей - Булево - Флаг подписки на соответствующее событие. +// * СобытиеПриПоискеДублей - Булево - Флаг подписки на соответствующее событие. +// * СобытиеВозможностьЗаменыЭлементов - Булево - Флаг подписки на соответствующее событие. +// +Функция НастройкиОбъектовМетаданных() Экспорт + Настройки = Новый ТаблицаЗначений; + Настройки.Колонки.Добавить("Вид", Новый ОписаниеТипов("Строка")); + Настройки.Колонки.Добавить("ПолноеИмя", Новый ОписаниеТипов("Строка")); + Настройки.Колонки.Добавить("ПредставлениеЭлемента", Новый ОписаниеТипов("Строка")); + Настройки.Колонки.Добавить("ПредставлениеСписка", Новый ОписаниеТипов("Строка")); + Настройки.Колонки.Добавить("Удален", Новый ОписаниеТипов("Булево")); + Настройки.Колонки.Добавить("СобытиеПараметрыПоискаДублей", Новый ОписаниеТипов("Булево")); + Настройки.Колонки.Добавить("СобытиеПриПоискеДублей", Новый ОписаниеТипов("Булево")); + Настройки.Колонки.Добавить("СобытиеВозможностьЗаменыЭлементов", Новый ОписаниеТипов("Булево")); + + ВсеПодключенныеСобытия = Новый Соответствие; + ПоискИУдалениеДублейПереопределяемый.ПриОпределенииОбъектовСПоискомДублей(ВсеПодключенныеСобытия); + + ЗарегистрироватьКоллекциюМетаданных(Настройки, ВсеПодключенныеСобытия, Метаданные.Справочники, "Справочник"); + ЗарегистрироватьКоллекциюМетаданных(Настройки, ВсеПодключенныеСобытия, Метаданные.Документы, "Документ"); + ЗарегистрироватьКоллекциюМетаданных(Настройки, ВсеПодключенныеСобытия, Метаданные.ПланыСчетов, "ПланСчетов"); + ЗарегистрироватьКоллекциюМетаданных(Настройки, ВсеПодключенныеСобытия, Метаданные.ПланыВидовРасчета, "ПланВидовРасчета"); + + Результат = Настройки.Скопировать(Новый Структура("Удален", Ложь)); + Результат.Сортировать("ПредставлениеСписка"); + + Возврат Результат; +КонецФункции + +Процедура ЗарегистрироватьКоллекциюМетаданных(Настройки, ВсеПодключенныеСобытия, КоллекцияМетаданных, Вид) + СтандартныеСвойства = Новый Структура("ПредставлениеОбъекта, РасширенноеПредставлениеОбъекта, ПредставлениеСписка, РасширенноеПредставлениеСписка"); + + Для Каждого ОбъектМетаданных Из КоллекцияМетаданных Цикл + Если Не ПравоДоступа("Просмотр", ОбъектМетаданных) + Или Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(ОбъектМетаданных) Тогда + Продолжить; // Нет доступа, не выводим в список. + КонецЕсли; + + СтрокаТаблицы = Настройки.Добавить(); + СтрокаТаблицы.Вид = Вид; + СтрокаТаблицы.ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + СтрокаТаблицы.Удален = СтрНачинаетсяС(ОбъектМетаданных.Имя, "Удалить"); + + ЗаполнитьЗначенияСвойств(СтандартныеСвойства, ОбъектМетаданных); + Если ЗначениеЗаполнено(СтандартныеСвойства.ПредставлениеОбъекта) Тогда + СтрокаТаблицы.ПредставлениеЭлемента = СтандартныеСвойства.ПредставлениеОбъекта; + ИначеЕсли ЗначениеЗаполнено(СтандартныеСвойства.РасширенноеПредставлениеОбъекта) Тогда + СтрокаТаблицы.ПредставлениеЭлемента = СтандартныеСвойства.РасширенноеПредставлениеОбъекта; + Иначе + СтрокаТаблицы.ПредставлениеЭлемента = ОбъектМетаданных.Представление(); + КонецЕсли; + Если ЗначениеЗаполнено(СтандартныеСвойства.ПредставлениеСписка) Тогда + СтрокаТаблицы.ПредставлениеСписка = СтандартныеСвойства.ПредставлениеСписка; + ИначеЕсли ЗначениеЗаполнено(СтандартныеСвойства.РасширенноеПредставлениеСписка) Тогда + СтрокаТаблицы.ПредставлениеСписка = СтандартныеСвойства.РасширенноеПредставлениеСписка; + Иначе + СтрокаТаблицы.ПредставлениеСписка = ОбъектМетаданных.Представление(); + КонецЕсли; + + События = ВсеПодключенныеСобытия[СтрокаТаблицы.ПолноеИмя]; + Если ТипЗнч(События) = Тип("Строка") Тогда + Если ПустаяСтрока(События) Тогда + СтрокаТаблицы.СобытиеПараметрыПоискаДублей = Истина; + СтрокаТаблицы.СобытиеПриПоискеДублей = Истина; + СтрокаТаблицы.СобытиеВозможностьЗаменыЭлементов = Истина; + Иначе + СтрокаТаблицы.СобытиеПараметрыПоискаДублей = СтрНайти(События, "ПараметрыПоискаДублей") > 0; + СтрокаТаблицы.СобытиеПриПоискеДублей = СтрНайти(События, "ПриПоискеДублей") > 0; + СтрокаТаблицы.СобытиеВозможностьЗаменыЭлементов = СтрНайти(События, "ВозможностьЗаменыЭлементов") > 0; + КонецЕсли; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +// Представление подсистемы. Используется при записи в журнал регистрации и в других местах. +Функция НаименованиеПодсистемы(ДляПользователя) Экспорт + КодЯзыка = ?(ДляПользователя, ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(), ""); + Возврат НСтр("ru = 'Поиск и удаление дублей'", КодЯзыка); +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ПоискИУдалениеДублейКлиент/Module.bsl b/SSL/src/CommonModules/ПоискИУдалениеДублейКлиент/Module.bsl index b5c35b8f4..01ed15ea0 100644 --- a/SSL/src/CommonModules/ПоискИУдалениеДублейКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПоискИУдалениеДублейКлиент/Module.bsl @@ -47,7 +47,8 @@ Процедура ПоказатьМестаИспользования(Знач Элементы, Знач ПараметрыОткрытия = Неопределено) Экспорт ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("НаборСсылок", МассивСсылок(Элементы)); + ПараметрыФормы.Вставить("Отбор", Новый Структура); + ПараметрыФормы.Отбор.Вставить("НаборСсылок", МассивСсылок(Элементы)); ПараметрыОткрытияФормы = Новый Структура("Владелец, Уникальность, Окно, НавигационнаяСсылка, ОписаниеОповещенияОЗакрытии, РежимОткрытияОкна"); Если ПараметрыОткрытия <> Неопределено Тогда diff --git a/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl b/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl index fe58736f4..47e756ff4 100644 --- a/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl +++ b/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl @@ -86,7 +86,12 @@ ДатаАктуальностиИндекса = ПолнотекстовыйПоиск.ДатаАктуальности(); // Исключение, должна использоваться ТекущаяДата(). - Интервал = ОбщегоНазначения.ИнтервалВремениСтрокой(ДатаАктуальностиИндекса, ТекущаяДата()); + Если ДатаАктуальностиИндекса > ТекущаяДата() Тогда + Интервал = НСтр("ru = 'менее одного дня'"); + Иначе + // Исключение, должна использоваться ТекущаяДата(). + Интервал = ОбщегоНазначения.ИнтервалВремениСтрокой(ДатаАктуальностиИндекса, ТекущаяДата()); + КонецЕсли; // Исключение, должна использоваться ТекущаяДата(). ДнейСПоследнегоОбновления = Цел((ТекущаяДата() - ДатаАктуальностиИндекса)/60/60/24); @@ -131,12 +136,19 @@ КонецПроцедуры +// Возвращает разрешены ли операции полнотекстового поиска: обновление индексов, очистка индексов, поиск. +Функция ОперацииРазрешены() Экспорт + + Возврат ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов. // См. описание одноименной процедуры в общем модуле РегламентныеЗаданияПереопределяемый. // -Процедура ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости) Экспорт +Процедура ПриОпределенииНастроекРегламентныхЗаданий(Зависимости) Экспорт Зависимость = Зависимости.Добавить(); Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОбновлениеИндексаППД; Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьПолнотекстовыйПоиск; @@ -161,6 +173,16 @@ ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.ОбновлениеИндексаППД); + РегламентноеЗадание = Метаданные.РегламентныеЗадания.СлияниеИндексаППД; + + Отбор = Новый Структура; + Отбор.Вставить("ИмяМетода", РегламентноеЗадание.ИмяМетода); + Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + ФоновыеЗаданияСлияниеИндексаППД = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); + Если ФоновыеЗаданияСлияниеИндексаППД.Количество() > 0 Тогда + Возврат; + КонецЕсли; + ОбновлениеИндексаППД(); КонецПроцедуры @@ -170,6 +192,16 @@ ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.СлияниеИндексаППД); + РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОбновлениеИндексаППД; + + Отбор = Новый Структура; + Отбор.Вставить("ИмяМетода", РегламентноеЗадание.ИмяМетода); + Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + ФоновыеЗаданияОбновлениеИндексаППД = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); + Если ФоновыеЗаданияОбновлениеИндексаППД.Количество() > 0 Тогда + Возврат; + КонецЕсли; + СлияниеИндексаППД(); КонецПроцедуры @@ -194,13 +226,6 @@ КонецПроцедуры -// Возвращает разрешены ли операции полнотекстового поиска: обновление индексов, очистка индексов, поиск. -Функция ОперацииРазрешены() Экспорт - - Возврат ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить; - -КонецФункции - // Создает запись в журнале регистрации и сообщениях пользователю; // // Параметры: diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl index f89659137..74cb38728 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl @@ -29,7 +29,8 @@ // * Статус - Булево - результат получения файла. // * Путь - Строка - путь к файлу на сервере, ключ используется только если статус Истина. // * СообщениеОбОшибке - Строка - сообщение об ошибке, если статус Ложь. -// * Заголовки - Соответствие - см. описание параметра Заголовки объекта HTTPОтвет. +// * КодСостояния - Число - Добавляется при возникновении ошибки. +// См. описание параметра КодСостояния объекта HTTPОтвет. // Функция СкачатьФайлНаСервере(Знач URL, ПараметрыПолучения = Неопределено, Знач ЗаписыватьОшибку = Истина) Экспорт @@ -74,7 +75,8 @@ // * Путь - Строка - адрес временного хранилища с двоичными данными файла, ключ используется только если // статус Истина. // * СообщениеОбОшибке - Строка - сообщение об ошибке, если статус Ложь. -// * Заголовки - Соответствие - см. описание параметра Заголовки объекта HTTPОтвет. +// * КодСостояния - Число - Добавляется при возникновении ошибки. +// См. описание параметра КодСостояния объекта HTTPОтвет. // Функция СкачатьФайлВоВременноеХранилище(Знач URL, ПараметрыПолучения = Неопределено, Знач ЗаписыватьОшибку = Истина) Экспорт diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl index 2c661a824..07bbac5a5 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl @@ -29,7 +29,8 @@ // * Статус - Булево - результат получения файла. // * Путь - Строка - путь к файлу на сервере, ключ используется только если статус Истина. // * СообщениеОбОшибке - Строка - сообщение об ошибке, если статус Ложь. -// * Заголовки - Соответствие - см. описание параметра Заголовки объекта HTTPОтвет. +// * КодСостояния - Число - Добавляется при возникновении ошибки. +// См. описание параметра КодСостояния объекта HTTPОтвет. // Функция СкачатьФайлНаКлиенте(Знач URL, Знач ПараметрыПолучения = Неопределено, Знач ЗаписыватьОшибку = Истина) Экспорт diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl index f4ff2ffbf..da3f6291a 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl @@ -265,15 +265,17 @@ ПутьДляСохранения = НастройкаСохранения["Путь"]; Иначе #Если НЕ ВебКлиент Тогда + // Временный файл должен удаляться вызывающим кодом. ПутьДляСохранения = ПолучитьИмяВременногоФайла(); #КонецЕсли КонецЕсли; + HTTPОтвет = Неопределено; + Попытка Если ИспользуетсяFTPПротокол Тогда Соединение.Получить(ПутьКФайлуНаСервере, ПутьДляСохранения); - ЗаголовкиОтвета = Неопределено; Иначе HTTPЗапрос = Новый HTTPЗапрос(ПутьКФайлуНаСервере, Заголовки); @@ -287,11 +289,14 @@ Если HTTPОтвет.КодСостояния < 200 Или HTTPОтвет.КодСостояния >= 300 Тогда ФайлОтвета = Новый ЧтениеТекста(ПутьДляСохранения, КодировкаТекста.UTF8); + Если HTTPОтвет.КодСостояния = 304 + И (HTTPЗапрос.Заголовки["If-Modified-Since"] <> Неопределено + Или HTTPЗапрос.Заголовки["If-None-Match"] <> Неопределено) Тогда + ЗаписыватьОшибку = Ложь; + КонецЕсли; ВызватьИсключение СтроковыеФункцииКлиентСервер.ИзвлечьТекстИзHTML(ФайлОтвета.Прочитать(5 * 1024)); КонецЕсли; - ЗаголовкиОтвета = HTTPОтвет.Заголовки; - КонецЕсли; Исключение @@ -301,17 +306,17 @@ ЗаписатьОшибкуВЖурналРегистрации( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеОбОшибке, ИмяСервера, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке))); КонецЕсли; - Возврат СформироватьРезультат(Ложь, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + Возврат СформироватьРезультат(Ложь, КраткоеПредставлениеОшибки(ИнформацияОбОшибке), HTTPОтвет); КонецПопытки; // Если сохраняем файл в соответствии с настройкой. Если НастройкаСохранения["МестоХранения"] = "ВременноеХранилище" Тогда КлючУникальности = Новый УникальныйИдентификатор; Адрес = ПоместитьВоВременноеХранилище (Новый ДвоичныеДанные(ПутьДляСохранения), КлючУникальности); - Возврат СформироватьРезультат(Истина, Адрес, ЗаголовкиОтвета); + Возврат СформироватьРезультат(Истина, Адрес, HTTPОтвет); ИначеЕсли НастройкаСохранения["МестоХранения"] = "Клиент" ИЛИ НастройкаСохранения["МестоХранения"] = "Сервер" Тогда - Возврат СформироватьРезультат(Истина, ПутьДляСохранения, ЗаголовкиОтвета); + Возврат СформироватьРезультат(Истина, ПутьДляСохранения, HTTPОтвет); Иначе Возврат Неопределено; КонецЕсли; @@ -395,7 +400,7 @@ // поле успех - булево // поле путь - строка. // -Функция СформироватьРезультат(Знач Статус, Знач СообщениеПуть, ЗаголовкиОтвета = Неопределено) +Функция СформироватьРезультат(Знач Статус, Знач СообщениеПуть, HTTPОтвет = Неопределено) Результат = Новый Структура("Статус", Статус); @@ -403,11 +408,16 @@ Результат.Вставить("Путь", СообщениеПуть); Иначе Результат.Вставить("СообщениеОбОшибке", СообщениеПуть); + Результат.Вставить("КодСостояния", 1); КонецЕсли; - Если ЗаголовкиОтвета <> Неопределено Тогда + Если HTTPОтвет <> Неопределено Тогда + ЗаголовкиОтвета = HTTPОтвет.Заголовки; + Если ЗаголовкиОтвета <> Неопределено Тогда + Результат.Вставить("Заголовки", ЗаголовкиОтвета); + КонецЕсли; - Результат.Вставить("Заголовки", ЗаголовкиОтвета); + Результат.Вставить("КодСостояния", HTTPОтвет.КодСостояния); КонецЕсли; diff --git a/SSL/src/CommonModules/Пользователи/Module.bsl b/SSL/src/CommonModules/Пользователи/Module.bsl index 7dc17091c..5693687fc 100644 --- a/SSL/src/CommonModules/Пользователи/Module.bsl +++ b/SSL/src/CommonModules/Пользователи/Module.bsl @@ -136,7 +136,27 @@ Пользователь = Неопределено, УчитыватьПривилегированныйРежим = Истина) Экспорт - Если ЭтоПолноправныйПользователь(Пользователь, , УчитыватьПривилегированныйРежим) Тогда + РольАдминистраторСистемы = ЭтоПолноправныйПользователь(Пользователь, Истина, УчитыватьПривилегированныйРежим); + РольПолныеПрава = ЭтоПолноправныйПользователь(Пользователь, Ложь, УчитыватьПривилегированныйРежим); + + Если РольАдминистраторСистемы И РольПолныеПрава Тогда + Возврат Истина; + КонецЕсли; + + МассивИменРолей = СтрРазделить(ИменаРолей, ",", Ложь); + + ТребуетсяРольАдминистраторСистемы = Ложь; + НазначениеРолей = ПользователиСлужебныйПовтИсп.Параметры().НазначениеРолей; + + Для Каждого ИмяРоли Из МассивИменРолей Цикл + Если НазначениеРолей.ТолькоДляАдминистраторовСистемы.Получить(ИмяРоли) <> Неопределено Тогда + ТребуетсяРольАдминистраторСистемы = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если РольАдминистраторСистемы И ТребуетсяРольАдминистраторСистемы + Или РольПолныеПрава И Не ТребуетсяРольАдминистраторСистемы Тогда Возврат Истина; КонецЕсли; @@ -148,14 +168,12 @@ Возврат Ложь; КонецЕсли; - МассивИменРолей = СтрРазделить(ИменаРолей, ",", Ложь); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); МодульУправлениеДоступомСлужебный.ПередПроверкойДоступностиРолей(МассивИменРолей); КонецЕсли; - Для каждого ИмяРоли Из МассивИменРолей Цикл + Для Каждого ИмяРоли Из МассивИменРолей Цикл Если Свойства.УказанТекущийПользовательИБ Тогда Если РольДоступна(СокрЛП(ИмяРоли)) Тогда // Не заменять на РолиДоступны. @@ -485,7 +503,6 @@ Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда ВызватьИсключение НСтр("ru = 'Справочник Пользователи недоступен в неразделенном режиме.'"); КонецЕсли; - РазделениеВключено = ОбщегоНазначенияПовтИсп.РазделениеВключено(); УстановитьПривилегированныйРежим(Истина); @@ -494,7 +511,7 @@ ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); Если ПользователиИБ.Количество() = 0 Тогда - Если РазделениеВключено Тогда + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда ВызватьИсключение НСтр("ru = 'Невозможно автоматически создать первого администратора области данных.'"); КонецЕсли; @@ -512,9 +529,7 @@ // Если существует пользователь с правами администратора, // тогда первый администратор уже создан и его не требуется создавать. Для Каждого ТекущийПользовательИБ Из ПользователиИБ Цикл - Если ТекущийПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава) - И (ТекущийПользовательИБ.Роли.Содержит(РольАдминистратораСистемы(Истина)) - ИЛИ РазделениеВключено) Тогда + Если ПользователиСлужебный.РолиАдминистратораДоступны(ТекущийПользовательИБ) Тогда Возврат Неопределено; // Первый администратор уже создан. КонецЕсли; КонецЦикла; @@ -537,9 +552,7 @@ ВызватьИсключение ТекстОшибки; КонецЕсли; Иначе - Если НЕ (ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава) - И (ПользовательИБ.Роли.Содержит(РольАдминистратораСистемы(Истина)) - ИЛИ РазделениеВключено)) Тогда + Если Не ПользователиСлужебный.РолиАдминистратораДоступны(ПользовательИБ) Тогда Если Метаданные.Роли.ПолныеПрава = РольАдминистратораСистемы(Истина) Тогда ТекстОшибки = @@ -616,6 +629,14 @@ Пользователь.ДополнительныеСвойства.Вставить( "ОписаниеПользователяИБ", ОписаниеПользователяИБ); + Пользователь.ДополнительныеСвойства.Вставить( + "СозданиеАдминистратора", + ?(ПользовательИБ = Неопределено, + НСтр("ru = 'Выполнено создание первого администратора.'"), + ?(ПользовательСоздан, + НСтр("ru = 'Администратор сопоставлен с новым пользователем справочника.'"), + НСтр("ru = 'Администратор сопоставлен с существующим пользователем справочника.'")) ) ); + Пользователь.Записать(); Возврат Пользователь.Ссылка; @@ -665,14 +686,23 @@ КонецФункции // Возвращает ссылку неуказанного пользователя. +// Параметры: +// СоздатьЕслиНеСуществует - Булево - начальное значение Ложь. Если указать Истина, +// тогда будет выполнено создание пользователя "<Не указан>". // // Возвращаемое значение: // СправочникСсылка.Пользователи - неуказанный пользователь существует в справочнике. // Неопределено - неуказанный пользователь не существует в справочнике. // -Функция СсылкаНеуказанногоПользователя() Экспорт +Функция СсылкаНеуказанногоПользователя(СоздатьЕслиНеСуществует = Ложь) Экспорт - Возврат ПользователиСлужебный.СвойстваНеуказанногоПользователя().Ссылка; + Ссылка = ПользователиСлужебный.СвойстваНеуказанногоПользователя().Ссылка; + + Если Ссылка = Неопределено И СоздатьЕслиНеСуществует Тогда + Ссылка = ПользователиСлужебный.СоздатьНеуказанногоПользователя(); + КонецЕсли; + + Возврат Ссылка; КонецФункции @@ -852,9 +882,10 @@ // // ОписаниеОшибки - Строка - содержит описание ошибки, если чтение не удалось. // -// Пользователь - СправочникСсылка.Пользователи, СправочникОбъект.Пользователи -// СправочникСсылка.ВнешниеПользователи, СправочникОбъект.ВнешниеПользователи -// Неопределено - ссылка или объект пользователя в справочнике, если существует. +// Пользователь - СправочникСсылка.Пользователи, СправочникОбъект.Пользователи, +// СправочникСсылка.ВнешниеПользователи, СправочникОбъект.ВнешниеПользователи - это +// пользователь с которым сопоставлен ПользовательИБ. +// - Неопределено - ссылка или объект пользователя в справочнике, если существует. // - ПользовательИнформационнойБазы - (Возвращаемое значение), если запись удалась. // // Возвращаемое значение: @@ -930,7 +961,7 @@ // Попытка записи нового или измененного пользователяИБ. Попытка - ПользователиСлужебный.ЗаписатьПользователяИнформационнойБазы(ПользовательИБ); + ПользователиСлужебный.ЗаписатьПользователяИнформационнойБазы(ПользовательИБ, Пользователь); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); ОписаниеОшибки = ОписаниеОшибкиПриЗаписиПользователяИБ( @@ -1272,6 +1303,7 @@ // Функция НайтиПоИмени(Знач ИмяДляВхода) Экспорт + УстановитьПривилегированныйРежим(Истина); ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяДляВхода); Если ПользовательИБ = Неопределено Тогда @@ -1298,6 +1330,8 @@ // Функция РольАдминистратораСистемы(ДляПроверки = Ложь) Экспорт + УстановитьПривилегированныйРежим(Истина); + РольАдминистратораСистемы = Метаданные.Роли.АдминистраторСистемы; Если ДляПроверки @@ -1512,6 +1546,28 @@ КонецФункции +// Возвращает назначение ролей, указанное разработчиками библиотек и прикладных решений. +// Область применения: только для автоматизированной проверки конфигурации. +// +// Возвращаемое значение: +// Структура - смотри одноименный параметр в процедуре ПриОпределенииНазначенияРолей +// общего модуля ПользователиПереопределяемый. +// +Функция НазначениеРолей() Экспорт + + НазначениеРолей = Новый Структура; + НазначениеРолей.Вставить("ТолькоДляАдминистраторовСистемы", Новый Массив); + НазначениеРолей.Вставить("ТолькоДляПользователейСистемы", Новый Массив); + НазначениеРолей.Вставить("ТолькоДляВнешнихПользователей", Новый Массив); + НазначениеРолей.Вставить("СовместноДляПользователейИВнешнихПользователей", Новый Массив); + + ПользователиПереопределяемый.ПриОпределенииНазначенияРолей(НазначениеРолей); + ИнтеграцияСтандартныхПодсистем.ПриОпределенииНазначенияРолей(НазначениеРолей); + + Возврат НазначениеРолей; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/CommonModules/ПользователиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПользователиКлиентСервер/Module.bsl index 182c333e1..ac8a38590 100644 --- a/SSL/src/CommonModules/ПользователиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПользователиКлиентСервер/Module.bsl @@ -32,7 +32,7 @@ // Если вход в сеанс выполнил внешний пользователь, тогда будет вызвано исключение. // // Возвращаемое значение: -// СправочникСсылка.Пользователи +// СправочникСсылка.Пользователи. // Функция ТекущийПользователь() Экспорт @@ -54,7 +54,7 @@ // Если вход в сеанс выполнил не внешний пользователь, тогда будет вызвано исключение. // // Возвращаемое значение: -// СправочникСсылка.ВнешниеПользователи +// СправочникСсылка.ВнешниеПользователи. // Функция ТекущийВнешнийПользователь() Экспорт @@ -77,8 +77,11 @@ // Функция ЭтоСеансВнешнегоПользователя() Экспорт - Возврат ТипЗнч(АвторизованныйПользователь()) - = Тип("СправочникСсылка.ВнешниеПользователи"); +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Возврат ПользователиСлужебныйПовтИсп.ЭтоСеансВнешнегоПользователя(); +#Иначе + Возврат СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске().ЭтоСеансВнешнегоПользователя; +#КонецЕсли КонецФункции diff --git a/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl index 81bb59e9b..2a216fbdb 100644 --- a/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl @@ -20,6 +20,51 @@ // Процедура ПриОпределенииНастроек(Настройки) Экспорт +КонецПроцедуры + +// Позволяет указать роли специального назначения. Все остальные роли не требуется указывать - +// это роли, которые предназначены для любых пользователей, кроме внешних пользователей. +// +// Параметры: +// НазначениеРолей - Структура - со свойствами: +// * ТолькоДляАдминистраторовСистемы - Массив - имена ролей, которые при выключенном разделении +// предназначены для любых пользователей, кроме внешних пользователей, а в разделенном режиме +// предназначены только для администраторов сервиса, например: +// Администрирование, ОбновлениеКонфигурацииБазыДанных, АдминистраторСистемы, +// а также все роли с правами: +// Администрирование, +// Администрирование расширений конфигурации, +// Обновление конфигурации базы данных. +// Такие роли, как правило, существуют только в БСП и не встречаются в прикладных решениях. +// +// * ТолькоДляПользователейСистемы - Массив - имена ролей, которые при выключенном разделении +// предназначены для любых пользователей, кроме внешних пользователей, а в разделенном режиме +// предназначены только для неразделенных пользователей (сотрудников технической поддержки сервиса и +// администраторов сервиса), например: +// ДобавлениеИзменениеАдресныхСведений, ДобавлениеИзменениеБанков, +// а также все роли с правами изменения неразделенных данных и следующими правами: +// Толстый клиент, +// Внешнее соединение, +// Automation, +// Режим все функции, +// Интерактивное открытие внешних обработок, +// Интерактивное открытие внешних отчетов. +// Такие роли в большей части существует в БСП, но могут встречаться и в прикладных решениях. +// +// * ТолькоДляВнешнихПользователей - Массив - имена ролей, которые предназначены +// только для внешних пользователей (роли со специально разработанным набором прав), например: +// ДобавлениеИзменениеОтветовНаВопросыАнкет, БазовыеПраваВнешнегоПользователя. +// Такие роли существуют и в БСП, и в прикладных решениях (если используются внешние пользователи). +// +// * СовместноДляПользователейИВнешнихПользователей - Массив - имена ролей, которые предназначены +// для любых пользователей (и внутренних, и внешних, и неразделенных), например: +// ЧтениеОтветовНаВопросыАнкет, ИспользованиеВариантовОтчетов. +// Такие роли существуют и в БСП, и в прикладных решениях (если используются внешние пользователи). +// +Процедура ПриОпределенииНазначенияРолей(НазначениеРолей) Экспорт + + + КонецПроцедуры // Переопределяет поведение формы пользователя и формы внешнего пользователя, diff --git a/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl index c1b2fc495..4928cc1a2 100644 --- a/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl @@ -24,7 +24,7 @@ // Вызывается при создании элемента справочника "Пользователи" в момент интерактивного входа пользователя. // // Параметры: - // НовыйПользователь - СправочникОбъект.Пользователи, + // НовыйПользователь - СправочникОбъект.Пользователи. // // Синтаксис: // Процедура ПриСозданииПользователяВМоментВхода(НовыйПользователь) Экспорт @@ -94,15 +94,6 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПослеПолученияДанныхОтГлавного"].Добавить( "ПользователиСлужебный"); - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбязательныхОбъектовПланаОбмена"].Добавить( - "ПользователиСлужебный"); - - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовИсключенийПланаОбмена"].Добавить( - "ПользователиСлужебный"); - - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена"].Добавить( - "ПользователиСлужебный"); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда СерверныеОбработчики["СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииВидовОграниченийПравОбъектовМетаданных"].Добавить( "ПользователиСлужебный"); @@ -150,12 +141,47 @@ УстановитьПривилегированныйРежим(Истина); + Попытка + Значения = ЗначенияПараметровСеансаТекущийПользователь(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось установить параметр сеанса ТекущийПользователь по причине: + |""%1"". + | + |Обратитесь к администратору.'"), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецПопытки; + + Если ТипЗнч(Значения) = Тип("Строка") Тогда + ВызватьИсключение Значения; + КонецЕсли; + + ПараметрыСеанса.ТекущийПользователь = Значения.ТекущийПользователь; + ПараметрыСеанса.ТекущийВнешнийПользователь = Значения.ТекущийВнешнийПользователь; + + Если ЗначениеЗаполнено(Значения.ТекущийПользователь) Тогда + ПараметрыСеанса.АвторизованныйПользователь = Значения.ТекущийПользователь; + Иначе + ПараметрыСеанса.АвторизованныйПользователь = Значения.ТекущийВнешнийПользователь; + КонецЕсли; + + УстановленныеПараметры.Добавить("ТекущийПользователь"); + УстановленныеПараметры.Добавить("ТекущийВнешнийПользователь"); + УстановленныеПараметры.Добавить("АвторизованныйПользователь"); + +КонецПроцедуры + +Функция ЗначенияПараметровСеансаТекущийПользователь() + Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - ВызватьИсключение + Возврат НСтр("ru = 'Недопустимое получение параметра сеанса ТекущийПользователь |в сеансе без указания всех разделителей.'"); КонецЕсли; + ЗаголовокОшибки = НСтр("ru = 'Не удалось установить параметр сеанса ТекущийПользователь.'") + Символы.ПС; + НачатьТранзакцию(); Попытка ПользовательНеНайден = Ложь; @@ -221,8 +247,7 @@ ТекущийВнешнийПользователь = Выборка.Ссылка; Если НЕ ВнешниеПользователи.ИспользоватьВнешнихПользователей() Тогда - - ВызватьИсключение НСтр("ru = 'Внешние пользователи отключены.'"); + Возврат НСтр("ru = 'Внешние пользователи отключены.'"); КонецЕсли; Иначе ТекущийВнешнийПользователь = Справочники.ВнешниеПользователи.ПустаяСсылка(); @@ -230,7 +255,7 @@ Если РезультатПользователи.Пустой() Тогда РазделениеВключено = ОбщегоНазначенияПовтИсп.РазделениеВключено(); - Если Пользователи.ЭтоПолноправныйПользователь( , Не РазделениеВключено, Ложь) Тогда + Если РолиАдминистратораДоступны() Тогда ИдентификаторПользователяИБ = ТекущийПользовательИБ.УникальныйИдентификатор; ПолноеИмяПользователя = ТекущийПользовательИБ.ПолноеИмя; @@ -298,20 +323,8 @@ ОчищаемыеПараметры.Добавить("ТекущийВнешнийПользователь"); ОчищаемыеПараметры.Добавить("АвторизованныйПользователь"); ПараметрыСеанса.Очистить(ОчищаемыеПараметры); - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Авторизация не выполнена. Работа системы будет завершена. - |Пользователь: %1 не найден в справочнике ""Пользователи"". - | - |При попытке добавления пользователя в справочник возникла ошибка: - |""%2"". - | - |Обратитесь к администратору.'"), - ИмяПользователя, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; КонецПопытки; - - ИначеЕсли ПользовательНеНайден Тогда - ВызватьИсключение ТекстСообщенияПользовательНеНайденВСправочнике(ИмяПользователя); КонецЕсли; ЗафиксироватьТранзакцию(); @@ -320,24 +333,24 @@ ВызватьИсключение; КонецПопытки; + Если Не СоздатьПользователя И ПользовательНеНайден Тогда + Возврат ЗаголовокОшибки + ТекстСообщенияПользовательНеНайденВСправочнике(ИмяПользователя); + КонецЕсли; + Если ТекущийПользователь = Неопределено ИЛИ ТекущийВнешнийПользователь = Неопределено Тогда - ВызватьИсключение ТекстСообщенияПользовательНеНайденВСправочнике(ИмяПользователя) + Символы.ПС + Возврат ЗаголовокОшибки + ТекстСообщенияПользовательНеНайденВСправочнике(ИмяПользователя) + Символы.ПС + НСтр("ru = 'Возникла внутренняя ошибка при поиске пользователя.'"); КонецЕсли; - ПараметрыСеанса.ТекущийПользователь = ТекущийПользователь; - ПараметрыСеанса.ТекущийВнешнийПользователь = ТекущийВнешнийПользователь; + Значения = Новый Структура; + Значения.Вставить("ТекущийПользователь", ТекущийПользователь); + Значения.Вставить("ТекущийВнешнийПользователь", ТекущийВнешнийПользователь); - ПараметрыСеанса.АвторизованныйПользователь = ?(ЗначениеЗаполнено(ТекущийПользователь), - ТекущийПользователь, ТекущийВнешнийПользователь); + Возврат Значения; - УстановленныеПараметры.Добавить("ТекущийПользователь"); - УстановленныеПараметры.Добавить("ТекущийВнешнийПользователь"); - УстановленныеПараметры.Добавить("АвторизованныйПользователь"); - -КонецПроцедуры +КонецФункции // Вызывается при начале работы системы, чтобы проверить возможность выполнения авторизации и // вызвать заполнение значений параметров сеанса ТекущийПользователь и ТекущийВнешнийПользователь. @@ -349,7 +362,7 @@ // При начале работы системы следует // завершить работу 1С:Предприятия. // -Функция АвторизоватьТекущегоПользователя(ПриНачалеРаботыСистемы = Ложь) Экспорт +Функция АвторизоватьТекущегоПользователя(ПриНачалеРаботыСистемы = Ложь, РегистрироватьВЖурнале = Ложь) Экспорт Если НЕ ПриНачалеРаботыСистемы Тогда ОбновитьПовторноИспользуемыеЗначения(); @@ -358,12 +371,27 @@ УстановитьПривилегированныйРежим(Истина); ТекущийПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь(); - ПроверитьПраваПользователя(ТекущийПользовательИБ, "ПриЗапуске"); + ЭтоВнешнийПользователь = ЗначениеЗаполнено(Справочники.ВнешниеПользователи.НайтиПоРеквизиту( + "ИдентификаторПользователяИБ", ТекущийПользовательИБ.УникальныйИдентификатор)); + ПроверитьПраваПользователя(ТекущийПользовательИБ, "ПриЗапуске", ЭтоВнешнийПользователь); Если ПустаяСтрока(ТекущийПользовательИБ.Имя) Тогда // Авторизуется пользователь по умолчанию. - Пользователи.АвторизованныйПользователь(); - Возврат ""; + Попытка + Значения = ЗначенияПараметровСеансаТекущийПользователь(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Возврат КраткоеПредставлениеОшибкиАвторизацииПослеРегистрацииВЖурнале(ИнформацияОбОшибке, + НСтр("ru = 'Не удалось установить параметр сеанса ТекущийПользователь по причине: + |""%1"". + | + |Обратитесь к администратору.'"), + РегистрироватьВЖурнале); + КонецПопытки; + Если ТипЗнч(Значения) = Тип("Строка") Тогда + Возврат КраткоеПредставлениеОшибкиАвторизацииПослеРегистрацииВЖурнале(Значения, , РегистрироватьВЖурнале); + КонецЕсли; + Возврат РезультатУстановкиПараметровСеанса(РегистрироватьВЖурнале); КонецЕсли; Обработчики = ОбщегоНазначения.ОбработчикиСлужебногоСобытия("СтандартныеПодсистемы.Пользователи\ПриАвторизацииНовогоПользователяИБ"); @@ -381,67 +409,69 @@ ТекущийПользовательИБ.УникальныйИдентификатор, , НайденныйПользователь) Тогда // ПользовательИБ найден в справочнике. - РазделениеВключено = ОбщегоНазначенияПовтИсп.РазделениеВключено(); - - Если ПриНачалеРаботыСистемы - И Пользователи.ЭтоПолноправныйПользователь(ТекущийПользовательИБ, Не РазделениеВключено, Ложь) Тогда - - ИнтеграцияСтандартныхПодсистем.ПриАвторизацииАдминистратораПриНачалеРаботыСистемы(НайденныйПользователь); + Если ПриНачалеРаботыСистемы И РолиАдминистратораДоступны() Тогда + ИнтеграцияСтандартныхПодсистем.ПриСозданииАдминистратора(НайденныйПользователь, + НСтр("ru = 'При авторизации у пользователя найдены роли администратора.'")); КонецЕсли; - - Возврат ""; + Возврат РезультатУстановкиПараметровСеанса(РегистрироватьВЖурнале); КонецЕсли; // Требуется либо создать администратора, либо сообщить об отказе авторизации. - ТекстСообщенияОбОшибке = ""; - ТребуетсяСоздатьАдминистратора = Ложь; - ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); - Если ПользователиИБ.Количество() = 1 Или Пользователи.ЭтоПолноправныйПользователь(, Истина, Ложь) Тогда - // Авторизуется администратор, созданный в конфигураторе. - ТребуетсяСоздатьАдминистратора = Истина; - Иначе - // Авторизуется обычный пользователь, созданный в конфигураторе. - ТекстСообщенияОбОшибке = ТекстСообщенияПользовательНеНайденВСправочнике(ТекущийПользовательИБ.Имя); - КонецЕсли; - - Если ТребуетсяСоздатьАдминистратора Тогда + Если ПользователиИБ.Количество() > 1 + И Не РолиАдминистратораДоступны() + И Не ПравоДоступа("Администрирование", Метаданные, ТекущийПользовательИБ) Тогда - Если РольДоступна(Метаданные.Роли.ПолныеПрава) // Не заменять на РолиДоступны. - И (РольДоступна(Пользователи.РольАдминистратораСистемы(Истина)) // Не заменять на РолиДоступны. - ИЛИ ОбщегоНазначенияПовтИсп.РазделениеВключено() ) Тогда - - Пользователь = Пользователи.СоздатьАдминистратора(ТекущийПользовательИБ); - - Комментарий = - НСтр("ru = 'Выполняется запуск от имени пользователя с ролью ""Полные права"", - |который не зарегистрирован в списке пользователей. - |Выполнена автоматическая регистрация в списке пользователей. - | - |Для ведения списка и настройки прав пользователей предназначен список Пользователи, - |режим конфигурирования 1С:Предприятия для этого использовать не следует.'"); - - ИнтеграцияСтандартныхПодсистем.ПослеЗаписиАдминистратораПриАвторизации(Комментарий); - - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Пользователи.Администратор зарегистрирован в справочнике Пользователи'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Предупреждение, - Метаданные.Справочники.Пользователи, - Пользователь, - Комментарий); - Иначе - ТекстСообщенияОбОшибке = - НСтр("ru = 'Запуск от имени пользователя с правом Администрирование невозможен, - |так как он не зарегистрирован в списке пользователей. - | - |Для ведения списка и настройки прав пользователей предназначен список Пользователи, - |режим конфигурирования 1С:Предприятия для этого использовать не следует.'"); - КонецЕсли; + // Авторизуется обычный пользователь, созданный в конфигураторе. + Возврат КраткоеПредставлениеОшибкиАвторизацииПослеРегистрацииВЖурнале( + ТекстСообщенияПользовательНеНайденВСправочнике(ТекущийПользовательИБ.Имя), + , РегистрироватьВЖурнале); КонецЕсли; - Возврат ТекстСообщенияОбОшибке; + // Авторизуется администратор, созданный в конфигураторе. + Если Не РолиАдминистратораДоступны() Тогда + Возврат КраткоеПредставлениеОшибкиАвторизацииПослеРегистрацииВЖурнале( + НСтр("ru = 'Запуск от имени пользователя с правом Администрирование невозможен, + |так как он не зарегистрирован в списке пользователей. + | + |Для ведения списка и настройки прав пользователей предназначен список Пользователи, + |режим конфигурирования 1С:Предприятия для этого использовать не следует.'"), + , РегистрироватьВЖурнале); + КонецЕсли; + + Попытка + Пользователь = Пользователи.СоздатьАдминистратора(ТекущийПользовательИБ); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Возврат КраткоеПредставлениеОшибкиАвторизацииПослеРегистрацииВЖурнале(ИнформацияОбОшибке, + НСтр("ru = 'Не удалось выполнить автоматическую регистрацию администратора в списке по причине: + |""%1"". + | + |Для ведения списка и настройки прав пользователей предназначен список Пользователи, + |режим конфигурирования 1С:Предприятия для этого использовать не следует.'"), + РегистрироватьВЖурнале); + КонецПопытки; + + Комментарий = + НСтр("ru = 'Выполнен запуск от имени пользователя с ролью ""Полные права"", + |который не зарегистрирован в списке пользователей. + |Выполнена автоматическая регистрация в списке пользователей. + | + |Для ведения списка и настройки прав пользователей предназначен список Пользователи, + |режим конфигурирования 1С:Предприятия для этого использовать не следует.'"); + + ИнтеграцияСтандартныхПодсистем.ПослеЗаписиАдминистратораПриАвторизации(Комментарий); + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Пользователи.Администратор зарегистрирован в справочнике Пользователи'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Предупреждение, + Метаданные.Справочники.Пользователи, + Пользователь, + Комментарий); + + Возврат РезультатУстановкиПараметровСеанса(РегистрироватьВЖурнале); КонецФункции @@ -519,6 +549,33 @@ КонецПроцедуры +// Возвращает текст ошибки, если у текущего пользователя нет ни роли базовые права, ни ролей администратора. +// Регистрирует ошибку в журнале. +// +Функция ОшибкаНедостаточноПравДляВходаВПрограмму(РегистрироватьВЖурнале = Истина) Экспорт + + Если РольДоступна(Метаданные.Роли.ПолныеПрава) Тогда // Не заменять на РолиДоступны. + Возврат ""; + КонецЕсли; + + Если ПользователиСлужебныйПовтИсп.ЭтоСеансВнешнегоПользователя() Тогда + ИмяРолиБазовыеПрава = Метаданные.Роли.БазовыеПраваВнешнегоПользователя.Имя; + Иначе + ИмяРолиБазовыеПрава = Метаданные.Роли.БазовыеПрава.Имя; + КонецЕсли; + + Если РольДоступна(ИмяРолиБазовыеПрава) Тогда // Не заменять на РолиДоступны. + Возврат ""; + КонецЕсли; + + Возврат КраткоеПредставлениеОшибкиАвторизацииПослеРегистрацииВЖурнале( + НСтр("ru = 'Недостаточно прав для входа в программу. + | + |Обратитесь к администратору.'"), + , РегистрироватьВЖурнале); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Для работы интерфейса ролей в управляемой форме. @@ -535,6 +592,9 @@ ИначеЕсли Действие = "НастроитьИнтерфейсРолейПриСозданииФормы" Тогда НастроитьИнтерфейсРолейПриСозданииФормы(Параметры); + ИначеЕсли Действие = "НастроитьИнтерфейсРолейПриЧтенииНаСервере" Тогда + НастроитьИнтерфейсРолейПриЧтенииНаСервере(Параметры); + ИначеЕсли Действие = "ТолькоВыбранныеРоли" Тогда ТолькоВыбранныеРоли(Параметры); @@ -578,27 +638,6 @@ КонецФункции -// Возвращает недоступные роли для указанного типа пользователей. -// -// Параметры: -// ТипПользователей - ПеречислениеСсылка.ТипыПользователей. -// -// Возвращаемое значение: -// ФиксированноеСоответствие, где Ключ - имя роли, а Значение - Истина. -// -Функция НедоступныеРолиПоТипуПользователей(ТипПользователей) Экспорт - - // При работе в локальном режиме у администратора системы - нет ограничений. - Если ТипПользователей = Перечисления.ТипыПользователей.ПользовательЛокальногоРешения - И Пользователи.ЭтоПолноправныйПользователь(, Истина, Ложь) Тогда - Возврат Новый ФиксированноеСоответствие(Новый Соответствие()); - КонецЕсли; - - НедоступныеРоли = ПользователиСлужебныйПовтИсп.Параметры().НедоступныеРолиПоТипамПользователей; - Возврат НедоступныеРоли.Получить(ТипПользователей); - -КонецФункции - // Возвращает свойства пользователя для пользователя ИБ с пустым именем. Функция СвойстваНеуказанногоПользователя() Экспорт @@ -724,23 +763,15 @@ Результат = Ложь; НайденныйПользователь = Неопределено; - НачатьТранзакцию(); - Попытка - РезультатЗапроса = Запрос.Выполнить(); - - Если НЕ РезультатЗапроса.Пустой() Тогда - Выборка = РезультатЗапроса.Выбрать(); - Выборка.Следующий(); - НайденныйПользователь = Выборка.Пользователь; - Результат = Истина; - Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено, УникальныйИдентификатор); - КонецЕсли; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; + РезультатЗапроса = Запрос.Выполнить(); + + Если Не РезультатЗапроса.Пустой() Тогда + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + НайденныйПользователь = Выборка.Пользователь; + Результат = Истина; + Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено, УникальныйИдентификатор); + КонецЕсли; Возврат Результат; @@ -780,7 +811,7 @@ Индекс = Назначение.Количество() - 1; Пока Индекс >= 0 Цикл ТипПользователей = Назначение.Получить(Индекс).ТипПользователей; - Если ТипПользователей =Неопределено Тогда + Если ТипПользователей = Неопределено Тогда Назначение.Удалить(Индекс); Иначе МассивПредставлений.Добавить(ТипПользователей.Метаданные().Синоним); @@ -792,21 +823,26 @@ КонецПроцедуры -// Записывает указанного Пользователя ИБ с учетом режима разделения данных. -// Если режим разделения данных включен, тогда перед записью проверяются -// права записываемого пользователя. +// Обрабатывает служебное событие ПередЗаписьюПользователяИБ, проверяет права с учетом +// режима разделения данных и записывает указанного пользователя ИБ. // // Параметры: -// ПользовательИБ - ПользовательИнформационнойБазы - объект, который требуется записать. +// ПользовательИБ - ПользовательИнформационнойБазы - объект, который требуется записать. +// Пользователь - СправочникСсылка.Пользователи, СправочникОбъект.Пользователи, +// СправочникСсылка.ВнешниеПользователи, СправочникОбъект.ВнешниеПользователи - это +// пользователь с которым сопоставлен ПользовательИБ. // -Процедура ЗаписатьПользователяИнформационнойБазы(ПользовательИБ) Экспорт +Процедура ЗаписатьПользователяИнформационнойБазы(ПользовательИБ, Пользователь) Экспорт Обработчики = ОбщегоНазначения.ОбработчикиСлужебногоСобытия("СтандартныеПодсистемы.Пользователи\ПередЗаписьюПользователяИБ"); Для Каждого Обработчик Из Обработчики Цикл Обработчик.Модуль.ПередЗаписьюПользователяИБ(ПользовательИБ.УникальныйИдентификатор); КонецЦикла; - ПроверитьПраваПользователя(ПользовательИБ, "ПередЗаписью"); + ЭтоВнешнийПользователь = ТипЗнч(Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") + Или ТипЗнч(Пользователь) = Тип("СправочникОбъект.ВнешниеПользователи"); + + ПроверитьПраваПользователя(ПользовательИБ, "ПередЗаписью", ЭтоВнешнийПользователь); ОбновлениеИнформационнойБазыСлужебный.УстановитьФлагОтображенияОписанийДляНовогоПользователя(ПользовательИБ.Имя); @@ -814,6 +850,35 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Универсальные процедуры и функции. + +// Возвращает ссылку старого объекта или ссылку нового объекта. +// +// Параметры: +// Объект - СправочникОбъект, ... +// ЭтоНовый - Булево (Возвращаемое значение). +// +Функция СсылкаОбъекта(Знач Объект, ЭтоНовый = Неопределено) Экспорт + + Ссылка = Объект.Ссылка; + ЭтоНовый = НЕ ЗначениеЗаполнено(Ссылка); + + Если ЭтоНовый Тогда + Ссылка = Объект.ПолучитьСсылкуНового(); + + Если НЕ ЗначениеЗаполнено(Ссылка) Тогда + + Менеджер = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Объект.Ссылка); + Ссылка = Менеджер.ПолучитьСсылку(); + Объект.УстановитьСсылкуНового(Ссылка); + КонецЕсли; + КонецЕсли; + + Возврат Ссылка; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов из других подсистем. @@ -824,23 +889,38 @@ // Отказ - Булево - если указать Истина, значит не удалось добавить параметры и // требуются действия на стороне клиента для успешного продолжения. // -Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры, Отказ) Экспорт +Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры, Отказ, ЭтоВызовПередНачаломРаботыСистемы) Экспорт - ОшибкаАвторизации = АвторизоватьТекущегоПользователя(Истина); - Если ОшибкаАвторизации <> "" Тогда - Параметры.Вставить("ОшибкаАвторизации", ОшибкаАвторизации); - Отказ = Истина; - Возврат; - КонецЕсли; - - Если ТребуетсяСменитьПароль(ОшибкаАвторизации, Истина) Тогда - Параметры.Вставить("ТребуетсяСменитьПароль"); - СтандартныеПодсистемыВызовСервера.СкрытьРабочийСтолПриНачалеРаботыСистемы(); + Если ЭтоВызовПередНачаломРаботыСистемы Тогда + + РегистрироватьВЖурнале = Параметры.ПолученныеПараметрыКлиента <> Неопределено + И Не Параметры.ПолученныеПараметрыКлиента.Свойство("ОшибкаАвторизации"); + + ОшибкаАвторизации = АвторизоватьТекущегоПользователя(Истина, РегистрироватьВЖурнале); + + Если ОшибкаАвторизации <> "" Тогда + Параметры.Вставить("ОшибкаАвторизации", ОшибкаАвторизации); + Отказ = Истина; + Возврат; + КонецЕсли; + + Если ТребуетсяСменитьПароль(ОшибкаАвторизации, Истина, РегистрироватьВЖурнале) Тогда + Параметры.Вставить("ТребуетсяСменитьПароль"); + СтандартныеПодсистемыВызовСервера.СкрытьРабочийСтолПриНачалеРаботыСистемы(); + + ИначеЕсли ОшибкаАвторизации <> "" Тогда + Параметры.Вставить("ОшибкаАвторизации", ОшибкаАвторизации); + Отказ = Истина; + Возврат; + КонецЕсли; + + Иначе + + КлючПредупрежденияБезопасности = КлючПредупрежденияБезопасностиПриЗапуске(); + Если ЗначениеЗаполнено(КлючПредупрежденияБезопасности) Тогда + Параметры.Вставить("КлючПредупрежденияБезопасности", КлючПредупрежденияБезопасности); + КонецЕсли; - ИначеЕсли ОшибкаАвторизации <> "" Тогда - Параметры.Вставить("ОшибкаАвторизации", ОшибкаАвторизации); - Отказ = Истина; - Возврат; КонецЕсли; КонецПроцедуры @@ -936,6 +1016,32 @@ КонецПроцедуры +// Определить список справочников, доступных для загрузки с помощью подсистемы "Загрузка данных из файла". +// +// Параметры: +// ЗагружаемыеСправочники - ТаблицаЗначений - список справочников, в которые возможна загрузка данных. +// * ПолноеИмя - Строка - полное имя справочника (как в метаданных). +// * Представление - Строка - представление справочника в списке выбора. +// * ПрикладнаяЗагрузка - Булево - если Истина, значит справочник использует собственный алгоритм загрузки и +// в модуле менеджера справочника определены функции. +// +Процедура ПриОпределенииСправочниковДляЗагрузкиДанных(ЗагружаемыеСправочники) Экспорт + + // Загрузка в справочник ВнешниеПользователи запрещена. + СтрокаТаблицы = ЗагружаемыеСправочники.Найти(Метаданные.Справочники.ВнешниеПользователи.ПолноеИмя(), "ПолноеИмя"); + Если СтрокаТаблицы <> Неопределено Тогда + ЗагружаемыеСправочники.Удалить(СтрокаТаблицы); + КонецЕсли; + + // Загрузка в справочник Пользователи запрещена. + СтрокаТаблицы = ЗагружаемыеСправочники.Найти(Метаданные.Справочники.Пользователи.ПолноеИмя(), "ПолноеИмя"); + Если СтрокаТаблицы <> Неопределено Тогда + ЗагружаемыеСправочники.Удалить(СтрокаТаблицы); + КонецЕсли; + + +КонецПроцедуры + // См. описание процедуры СтандартныеПодсистемыСервер.СобратьСтатистикуКонфигурации. Процедура СобратьСтатистикуКонфигурации() Экспорт @@ -1018,6 +1124,28 @@ КонецПроцедуры +// Вызывается после загрузки данных. +// +// Параметры: +// Контейнер - ОбработкаОбъект.ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера - менеджер +// контейнера, используемый в процессе загрузки данных. Подробнее см. комментарий +// к программному интерфейсу обработки ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера. +Процедура ПослеЗагрузкиДанных(Контейнер) Экспорт + + // Сброс общего решения, принятого администратором в форме "Предупреждение безопасности". + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + ПараметрыАдминистрирования = СтандартныеПодсистемыСервер.ПараметрыАдминистрирования(); + ПараметрыАдминистрирования.Удалить("РазрешеноОткрытиеВнешнихОтчетовИОбработок"); + ПараметрыАдминистрирования.Удалить("ПринятоРешениеПоОткрытиюВнешнихОтчетовИОбработок"); + СтандартныеПодсистемыСервер.УстановитьПараметрыАдминистрирования(ПараметрыАдминистрирования); + + ДобавитьАдминистраторамПравоОткрытияВнешнихОтчетовИОбработок(); + + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1090,6 +1218,23 @@ Обработчик.РежимВыполнения = "Оперативно"; Обработчик.Процедура = "ПользователиСлужебный.ЗаполнитьНазначениеГруппВнешнихПользователей"; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.2.4"; + Обработчик.ОбщиеДанные = Истина; + Обработчик.Процедура = "ПользователиСлужебный.УдалитьКэшНедоступныеРолиПоТипамПользователей"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.2.30"; + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.Процедура = "ПользователиСлужебный.ПеренестиНастройкиДлиныИСложностиПаролейКонфигуратора"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.2.72"; + Обработчик.ОбщиеДанные = Истина; + Обработчик.РежимВыполнения = "Оперативно"; + Обработчик.Процедура = "ПользователиСлужебный.ДобавитьАдминистраторамПравоОткрытияВнешнихОтчетовИОбработок"; + КонецПроцедуры // Доопределяет структуру параметров, необходимых для работы клиентского кода @@ -1203,59 +1348,6 @@ КонецПроцедуры -// Используется для получения объектов метаданных обязательных для плана обмена. -// Если подсистема имеет объекты метаданных обязательные для включения в состав плана обмена, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты - Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. -// Истина - требуется получить список объектов плана обмена РИБ; -// Ложь - требуется получить список для плана обмена НЕ РИБ. -// -Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт - - Если РаспределеннаяИнформационнаяБаза Тогда - - Объекты.Добавить(Метаданные.Константы.ПараметрыРаботыПользователей); - - КонецЕсли; - -КонецПроцедуры - -// Используется для получения объектов метаданных, которые не следует включать в состав плана обмена. -// Если подсистема имеет объекты метаданных, которые не следует включать в состав плана обмена, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты - Массив. Массив объектов метаданных конфигурации, которые не следует включать в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. -// Истина - требуется получить список объектов-исключений плана обмена РИБ; -// Ложь - требуется получить список для плана обмена НЕ РИБ. -// -Процедура ПриПолученииОбъектовИсключенийПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт - - Объекты.Добавить(Метаданные.Константы.НастройкиВходаПользователей); - Объекты.Добавить(Метаданные.РегистрыСведений.СведенияОПользователях); - -КонецПроцедуры - -// Используется для получения объектов метаданных, которые должны входить в состав плана обмена -// и НЕ должны входить в состав подписок на события регистрации изменений для этого плана обмена. -// Эти объекты метаданных используются только в момент создания начального образа подчиненного узла -// и не мигрируют в процессе обмена. -// Если подсистема имеет объекты метаданных, которые участвуют только в создании начального образа подчиненного узла, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты - Массив. Массив объектов метаданных конфигурации. -// -Процедура ПриПолученииОбъектовНачальногоОбразаПланаОбмена(Объекты) Экспорт - - Объекты.Добавить(Метаданные.Константы.ПараметрыРаботыПользователей); - -КонецПроцедуры - // Заполняет список текущих дел пользователя. // // Параметры: @@ -1305,32 +1397,6 @@ КонецПроцедуры -// Определить список справочников, доступных для загрузки с помощью подсистемы "Загрузка данных из файла". -// -// Параметры: -// ЗагружаемыеСправочники - ТаблицаЗначений - список справочников, в которые возможна загрузка данных. -// * ПолноеИмя - Строка - полное имя справочника (как в метаданных). -// * Представление - Строка - представление справочника в списке выбора. -// * ПрикладнаяЗагрузка - Булево - если Истина, значит справочник использует собственный алгоритм загрузки и -// в модуле менеджера справочника определены функции. -// -Процедура ПриОпределенииСправочниковДляЗагрузкиДанных(ЗагружаемыеСправочники) Экспорт - - // Загрузка в справочник ВнешниеПользователи запрещена. - СтрокаТаблицы = ЗагружаемыеСправочники.Найти(Метаданные.Справочники.ВнешниеПользователи.ПолноеИмя(), "ПолноеИмя"); - Если СтрокаТаблицы <> Неопределено Тогда - ЗагружаемыеСправочники.Удалить(СтрокаТаблицы); - КонецЕсли; - - // Загрузка в справочник Пользователи запрещена. - СтрокаТаблицы = ЗагружаемыеСправочники.Найти(Метаданные.Справочники.Пользователи.ПолноеИмя(), "ПолноеИмя"); - Если СтрокаТаблицы <> Неопределено Тогда - ЗагружаемыеСправочники.Удалить(СтрокаТаблицы); - КонецЕсли; - - -КонецПроцедуры - // Обработчики событий подсистемы Управление доступом. // Заполняет состав видов доступа, используемых при ограничении прав объектов метаданных. @@ -1401,93 +1467,25 @@ // Содержит настройки размещения вариантов отчетов в панели отчетов. // // Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// Настройки - Коллекция - Содержит настройки всех отчетов и вариантов конфигурации. +// Используется для передачи в параметрах вспомогательных методов. // // Описание: -// В данной процедуре необходимо указать каким именно образом предопределенные варианты отчетов -// будут регистрироваться в программе и показываться в панели отчетов. +// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Вспомогательные методы: -// НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.<ИмяОтчета>); -// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// -// Данные функции получают соответственно настройки отчета и настройки варианта отчета следующей структуры: -// * Включен - Булево - -// Если Ложь, то вариант отчета не регистрируется в подсистеме. -// Используется для удаления технических и контекстных вариантов отчетов из всех интерфейсов. -// Эти варианты отчета по прежнему можно открывать в форме отчета программно при помощи -// параметров открытия (см. справку по "Расширение управляемой формы для отчета.КлючВарианта"). -// * ВидимостьПоУмолчанию - Булево - -// Если Ложь, то вариант отчета по умолчанию скрыт в панели отчетов. -// Пользователь может "включить" его в режиме настройки панели отчетов -// или открыть через форму "Все отчеты". -// * Описание - Строка - Дополнительная информация по варианту отчета. -// В панели отчетов выводится в качестве подсказки. -// Должно расшифровывать для пользователя содержимое варианта отчета -// и не должно дублировать наименование варианта отчета. -// * Размещение - Соответствие - Настройки размещения варианта отчета в разделах. -// ** Ключ - ОбъектМетаданных: Подсистема - Подсистема, в которой размещается отчет или вариант отчета. -// ** Значение - Строка - Необязательный. Настройки размещения в подсистеме. -// "" - Выводить отчет в своей группе обычным шрифтом. -// "Важный" - Выводить отчет в своей группе жирным шрифтом. -// "СмТакже" - Выводить отчет в группе "См. также". -// * ФункциональныеОпции - Массив из Строка - -// Имена функциональных опций варианта отчета. -// -// Например: -// -// (1) Добавить в подсистему вариант отчета. -// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Метаданные.Отчеты.ИмяОтчета, "ИмяВарианта1"); -// Вариант.Размещение.Вставить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); -// -// (2) Отключить вариант отчета. -// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Метаданные.Отчеты.ИмяОтчета, "ИмяВарианта1"); -// Вариант.Включен = Ложь; -// -// (3) Отключить все варианты отчета, кроме требуемого. -// Отчет = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ИмяОтчета); -// Отчет.Включен = Ложь; -// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта"); -// Вариант.Включен = Истина; -// -// (4) Результат исполнения 4.1 и 4.2 будет одинаковым: -// (4.1) -// Отчет = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ИмяОтчета); -// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта1"); -// Вариант.Размещение.Удалить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); -// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта2"); -// Вариант.Размещение.Удалить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); -// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта3"); -// Вариант.Размещение.Удалить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); -// -// (4.2) -// Отчет = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ИмяОтчета); -// Отчет.Размещение.Удалить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); -// ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта1"); -// ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта2"); -// ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта3"); -// Отчет.Размещение.Вставить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); -// -// Важно: -// Отчет выступает в качестве контейнера вариантов. -// Изменяя настройки отчета можно сразу изменять настройки всех его вариантов. -// Однако, если явно получить настройки варианта отчета, то они станут самостоятельными, -// т.е. более не будут наследовать изменения настроек от отчета. См. примеры 3 и 4. -// -// Начальная настройка размещения отчетов по подсистемам зачитывается из метаданных, -// ее дублирование в коде не требуется. -// -// Функциональные опции вариантов объединяются с функциональными опциями отчетов по следующим правилам: -// (ФункциональнаяОпция1Отчета ИЛИ ФункциональнаяОпция2Отчета) И (ФункциональнаяОпция3Варианта ИЛИ -// ФункциональнаяОпция4Варианта). -// Функциональные опции отчетов не зачитываются из метаданных, -// они применяются на этапе использования подсистемы пользователем. -// Через ОписаниеОтчета можно добавлять функциональные опции, которые будут соединяться по указанным выше правилам, -// но надо помнить, что эти функциональные опции будут действовать только для предопределенных вариантов этого -// отчета. -// Для пользовательских вариантов отчета действуют только функциональные опции отчета -// - они отключаются только с отключением всего отчета. +// 1. Функции ОписаниеОтчета и ОписаниеВарианта формируют описание настроек отчета и варианта для последующего изменения: +// НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.<ИмяОтчета>); +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// Возвращаемые коллекции содержат одинаковый набор свойств. +// НастройкиОтчета используются как умолчания для вариантов, описания которых еще не получены. +// Подробнее - см. "свойства для изменения" в комментарии к ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// 2. Процедура УстановитьРежимВыводаВПанеляхОтчетов позволяет настроить режим группировки вариантов в панелях отчетов: +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Отчеты.<ИмяОтчета>, Истина/Ложь); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Подсистемы.<ИмяПодсистемы>, Истина/Ложь); +// 3. Процедура НастроитьОтчетВМодулеМенеджера позволяет переопределять настройки отчета в его модуле менеджера: +// ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.<ИмяОтчета>); // Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); @@ -1529,7 +1527,7 @@ // // В состав подписки следует включить типы объектов авторизации: // Метаданные.Справочники.ВнешниеПользователи.Реквизиты.ОбъектАвторизации.Тип. -// Например: Справочник.ФизическиеЛица, Справочник.Контрагенты +// Например: Справочник.ФизическиеЛица, Справочник.Контрагенты. // Процедура ОбновитьПредставлениеВнешнегоПользователяПриЗаписи(Знач Объект, Отказ) Экспорт @@ -1657,7 +1655,7 @@ // Процедуры и функции работы с паролем. // Создает новый пароль, соответствующий заданным правилам проверки сложности. -// Для облегчения запоминания, пароль формируется из слогов (согласная-гласная) +// Для облегчения запоминания, пароль формируется из слогов (согласная-гласная). // // Параметры: // ПараметрыПароля - Структура - возвращается функций ПараметрыПароля. @@ -1837,83 +1835,6 @@ КонецФункции -// Проверяет пароль на требования сложности, реализованными в 1С:Предприятии. -// -// Параметры: -// Пароль - Строка - проверяемый пароль. -// -// Возвращаемое значение: -// Булево - Истина, если соответствует. -// -Функция ПарольОтвечаетТребованиямСложности(Пароль) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ТекущаяПроверкаСложности = ПолучитьПроверкуСложностиПаролейПользователей(); - ТекущаяМинимальнаяДлина = ПолучитьМинимальнуюДлинуПаролейПользователей(); - - НачатьТранзакцию(); - Попытка - Если ТекущаяМинимальнаяДлина > 0 Тогда - УстановитьМинимальнуюДлинуПаролейПользователей(0); - КонецЕсли; - Если ТекущаяПроверкаСложности Тогда - УстановитьПроверкуСложностиПаролейПользователей(Ложь); - КонецЕсли; - - ВременныйПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); - ВременныйПользовательИБ.АутентификацияСтандартная = Истина; - ВременныйПользовательИБ.Пароль = Пароль; - - ВременныйПользовательИБ.Имя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Временный пользователь (%1)'"), - Новый УникальныйИдентификатор); - - ВременныйПользовательИБ.Записать(); - - ВременныйПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( - ВременныйПользовательИБ.УникальныйИдентификатор); - - УстановитьПроверкуСложностиПаролейПользователей(Истина); - Отвечает = Истина; - Попытка - ВременныйПользовательИБ.Пароль = Пароль; - ВременныйПользовательИБ.Записать(); - Исключение - Отвечает = Ложь; - КонецПопытки; - - ВременныйПользовательИБ.Удалить(); - - Если ТекущаяМинимальнаяДлина > 0 Тогда - УстановитьМинимальнуюДлинуПаролейПользователей(ТекущаяМинимальнаяДлина); - КонецЕсли; - Если Не ТекущаяПроверкаСложности Тогда - УстановитьПроверкуСложностиПаролейПользователей(Ложь); - КонецЕсли; - - ЗафиксироватьТранзакцию(); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - - Если ТекущаяМинимальнаяДлина <> ПолучитьМинимальнуюДлинуПаролейПользователей() Тогда - УстановитьМинимальнуюДлинуПаролейПользователей(ТекущаяМинимальнаяДлина); - КонецЕсли; - Если ТекущаяПроверкаСложности <> ПолучитьПроверкуСложностиПаролейПользователей() Тогда - УстановитьПроверкуСложностиПаролейПользователей(ТекущаяПроверкаСложности); - КонецЕсли; - - ОтменитьТранзакцию(); - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось проверить отвечает ли пароль требованиям сложности по причине: - |%1'"), - КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - КонецПопытки; - - Возврат Отвечает; - -КонецФункции - // Проверяет наличие учетной записи и прав, необходимых для изменения пароля. // // Параметры: @@ -1953,23 +1874,30 @@ РеквизитыПользователя = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( Пользователь, "Ссылка, Недействителен, ИдентификаторПользователяИБ, Подготовлен"); - Если РеквизитыПользователя.Недействителен <> Ложь Тогда + Если РеквизитыПользователя.Ссылка <> Пользователь Тогда + РеквизитыПользователя.Ссылка = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Пользователь).ПустаяСсылка(); + РеквизитыПользователя.Недействителен = Ложь; + РеквизитыПользователя.Подготовлен = Ложь; + РеквизитыПользователя.ИдентификаторПользователяИБ = + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + КонецЕсли; + + Если ДополнительныеПараметры.Свойство("ПроверятьДействительностьПользователя") + И РеквизитыПользователя.Недействителен <> Ложь Тогда + ДополнительныеПараметры.Вставить("ТекстОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Пользователь ""%1"" недействителен.'"), Пользователь)); Возврат Ложь; КонецЕсли; ИдентификаторПользователяИБ = РеквизитыПользователя.ИдентификаторПользователяИБ; - - Если ТипЗнч(ИдентификаторПользователяИБ) <> Тип("УникальныйИдентификатор") Тогда - ПользовательИБ = Неопределено; - Иначе - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентификаторПользователяИБ); - КонецЕсли; + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентификаторПользователяИБ); УстановитьПривилегированныйРежим(Ложь); - Если ПользовательИБ = Неопределено Тогда + Если ДополнительныеПараметры.Свойство("ПроверятьНаличиеПользователяИБ") + И ПользовательИБ = Неопределено Тогда + ДополнительныеПараметры.Вставить("ТекстОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не найдена учетная запись пользователя ""%1"".'"), Пользователь)); Возврат Ложь; @@ -1990,9 +1918,10 @@ Возврат Ложь; КонецЕсли; - ДополнительныеПараметры.Вставить("ПарольУстановлен", ПользовательИБ.ПарольУстановлен); + ДополнительныеПараметры.Вставить("ПарольУстановлен", + ПользовательИБ <> Неопределено И ПользовательИБ.ПарольУстановлен); - Если ПользовательИБ.ЗапрещеноИзменятьПароль Тогда + Если ПользовательИБ <> Неопределено И ПользовательИБ.ЗапрещеноИзменятьПароль Тогда Если УровеньДоступа.НастройкиДляВхода Тогда Если ДополнительныеПараметры.Свойство("УчитыватьСвойствоЗапрещеноИзменятьПароль") Тогда ДополнительныеПараметры.Вставить("ТекстОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -2007,6 +1936,12 @@ КонецЕсли; КонецЕсли; + Если ДополнительныеПараметры.Свойство("УчитыватьСвойствоАутентификацияСтандартная") + И ПользовательИБ <> Неопределено + И Не ПользовательИБ.АутентификацияСтандартная Тогда + Возврат Ложь; + КонецЕсли; + // Проверка минимального срока действия пароля. Если УровеньДоступа.НастройкиДляВхода Тогда Возврат Истина; @@ -2022,9 +1957,11 @@ Возврат Истина; КонецЕсли; + УстановитьПривилегированныйРежим(Истина); НаборЗаписей = РегистрыСведений.СведенияОПользователях.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Пользователь.Установить(Пользователь); НаборЗаписей.Прочитать(); + УстановитьПривилегированныйРежим(Ложь); Если НаборЗаписей.Количество() = 0 Тогда Возврат Истина; @@ -2144,6 +2081,216 @@ КонецПроцедуры +// Для формы СменаПароля и перед записью пользователя ИБ. +// Выполняет проверку нового пароля, старого пароля и в случае успеха +// регистрирует новый пароль в списке использованных паролей, +// а также устанавливает его, если вызов выполнен из формы СменаПароля. +// +// Параметры: +// Параметры - Структура - со свойствами: +// * Пользователь - СправочникСсылка.Пользователи, +// СправочникСсылка.ВнешниеПользователи - при вызове из формы СменаПароля. +// - СправочникОбъект.Пользователи, +// СправочникОбъект.ВнешниеПользователи - при записи объекта. +// +// * НовыйПароль - Строка - пароль, который планируется установить пользователю ИБ. +// * СтарыйПароль - Строка - пароль, который установлен пользователю ИБ (для проверки). +// +// * ПриВходеВПрограмму - Булево - может быть Истина при вызове из формы СменаПароля. +// * ТолькоПроверить - Булево - может быть Истина при вызове из формы СменаПароля. +// * СтарыйПарольСовпадает - Булево - (возвращаемое значение) - если Ложь, значит не совпадает. +// +// * ПарольПользователяСервиса - Строка - пароль текущего пользователя при вызове +// из формы СменаПароля, сбрасывается при ошибке. +// +// Возвращаемое значение: +// Строка - текст ошибки, если не пустая строка. +// +Функция ОбработатьНовыйПароль(Параметры) Экспорт + + НовыйПароль = Параметры.НовыйПароль; + СтарыйПароль = Параметры.СтарыйПароль; + + Если ТипЗнч(Параметры.Пользователь) = Тип("СправочникОбъект.Пользователи") + Или ТипЗнч(Параметры.Пользователь) = Тип("СправочникОбъект.ВнешниеПользователи") Тогда + + СсылкаОбъекта = Параметры.Пользователь.Ссылка; + Пользователь = СсылкаОбъекта(Параметры.Пользователь); + ВызовИзФормыСменаПароля = Ложь; + Иначе + СсылкаОбъекта = Параметры.Пользователь; + Пользователь = Параметры.Пользователь; + ВызовИзФормыСменаПароля = Истина; + КонецЕсли; + + Параметры.Вставить("СтарыйПарольСовпадает", Ложь); + + ДополнительныеПараметры = Новый Структура; + Если Не ВозможноИзменитьПароль(СсылкаОбъекта, ДополнительныеПараметры) Тогда + Возврат ДополнительныеПараметры.ТекстОшибки; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Если ДополнительныеПараметры.ЭтоТекущийПользовательИБ + И ДополнительныеПараметры.ПарольУстановлен + И (ВызовИзФормыСменаПароля Или СтарыйПароль <> Неопределено) Тогда + + СохраняемоеЗначениеСтрокиПароля(СтарыйПароль, + ДополнительныеПараметры.ИдентификаторПользователяИБ, Параметры.СтарыйПарольСовпадает); + + Если Не Параметры.СтарыйПарольСовпадает Тогда + Возврат НСтр("ru = 'Старый пароль указан неверно.'"); + КонецЕсли; + КонецЕсли; + + Если ПользователиСлужебныйПовтИсп.Настройки().ОбщиеНастройкиВхода Тогда + Если ТипЗнч(Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().ВнешниеПользователи; + Иначе + НастройкиВхода = ПользователиСлужебныйПовтИсп.Настройки().Пользователи; + КонецЕсли; + + ТекстОшибки = ОшибкаДлиныИлиСложностиПароля(НовыйПароль, + НастройкиВхода.МинимальнаяДлинаПароля, + НастройкиВхода.ПарольДолженОтвечатьТребованиямСложности); + + Если ЗначениеЗаполнено(ТекстОшибки) Тогда + Возврат ТекстОшибки; + КонецЕсли; + КонецЕсли; + + ТекстОшибки = ОшибкаДлиныИлиСложностиПароля(НовыйПароль, + ПолучитьМинимальнуюДлинуПаролейПользователей(), + ПолучитьПроверкуСложностиПаролейПользователей()); + + Если ЗначениеЗаполнено(ТекстОшибки) Тогда + Если Не ПользователиСлужебныйПовтИсп.Настройки().ОбщиеНастройкиВхода Тогда + Возврат ТекстОшибки; + КонецЕсли; + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + | + |Ограничение установлено в конфигураторе в меню ""Администрирование"" пункт ""Параметры информационной базы ..."". + |Следует очистить минимальную длину и требование сложности пароля в конфигураторе и + |задать настройки входа пользователей в настройках программы.'"), + ТекстОшибки); + КонецЕсли; + + СохраняемоеЗначениеПароля = СохраняемоеЗначениеСтрокиПароля(НовыйПароль); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(Пользователь)).ПолноеИмя()); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + ЭлементБлокировки.УстановитьЗначение("Ссылка", Пользователь); + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СведенияОПользователях"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + ЭлементБлокировки.УстановитьЗначение("Пользователь", Пользователь); + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + НаборЗаписей = РегистрыСведений.СведенияОПользователях.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Пользователь.Установить(Пользователь); + НаборЗаписей.Прочитать(); + Если НаборЗаписей.Количество() = 0 Тогда + СведенияОПользователе = НаборЗаписей.Добавить(); + СведенияОПользователе.Пользователь = Пользователь; + Иначе + СведенияОПользователе = НаборЗаписей[0]; + КонецЕсли; + ИспользованныеПароли = СведенияОПользователе.ИспользованныеПароли.Получить(); + Если ИспользованныеПароли = Неопределено Тогда + ИспользованныеПароли = Новый Массив; + КонецЕсли; + + Если ПользователиСлужебныйПовтИсп.Настройки().ОбщиеНастройкиВхода + И ЗначениеЗаполнено(НастройкиВхода.ЗапретитьПовторениеПароляСредиПоследних) Тогда + + Если ИспользованныеПароли.Найти(СохраняемоеЗначениеПароля) <> Неопределено Тогда + ОтменитьТранзакцию(); + Возврат НСтр("ru = 'Новый пароль использовался ранее.'"); + КонецЕсли; + ИспользованныеПароли.Добавить(СохраняемоеЗначениеПароля); + Пока ИспользованныеПароли.Количество() > НастройкиВхода.ЗапретитьПовторениеПароляСредиПоследних Цикл + ИспользованныеПароли.Удалить(0); + КонецЦикла; + Иначе + ИспользованныеПароли.Очистить(); + КонецЕсли; + Если ВызовИзФормыСменаПароля И Параметры.ТолькоПроверить Тогда + ОтменитьТранзакцию(); + Возврат ""; + КонецЕсли; + + Если ВызовИзФормыСменаПароля Тогда + ОписаниеПользователяИБ = Новый Структура; + ОписаниеПользователяИБ.Вставить("Действие", "Записать"); + ОписаниеПользователяИБ.Вставить("Пароль", НовыйПароль); + + ТекущийОбъект = Пользователь.ПолучитьОбъект(); + ТекущийОбъект.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ); + Если Параметры.ПриВходеВПрограмму Тогда + ТекущийОбъект.ДополнительныеСвойства.Вставить("СменаПароляПриВходеВПрограмму"); + КонецЕсли; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Если ДополнительныеПараметры.ЭтоТекущийПользовательИБ Тогда + ТекущийОбъект.ДополнительныеСвойства.Вставить("ПарольПользователяСервиса", СтарыйПароль); + Иначе + ТекущийОбъект.ДополнительныеСвойства.Вставить("ПарольПользователяСервиса", Параметры.ПарольПользователяСервиса); + КонецЕсли; + ТекущийОбъект.ДополнительныеСвойства.Вставить("СинхронизироватьССервисом", Истина); + КонецЕсли; + Попытка + ТекущийОбъект.Записать(); + Исключение + Параметры.ПарольПользователяСервиса = Неопределено; + ВызватьИсключение; + КонецПопытки; + Иначе + СведенияОПользователе.ДатаНачалаИспользованияПароля = Неопределено; + Если Параметры.Пользователь.ДополнительныеСвойства.Свойство("СменаПароляПриВходеВПрограмму") Тогда + СведенияОПользователе.ПотребоватьСменуПароляПриВходе = Ложь; + КонецЕсли; + СведенияОПользователе.ИспользованныеПароли = Новый ХранилищеЗначения(ИспользованныеПароли); + НаборЗаписей.Записать(); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ОтменитьТранзакцию(); + Если ВызовИзФормыСменаПароля Тогда + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Пользователи.Ошибка смены пароля'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.НайтиПоТипу(ТипЗнч(Пользователь)), + Пользователь, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось сменить пароль пользователя ""%1"" по причине: + |%2'"), + Пользователь, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке))); + Возврат КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + КонецЕсли; + ВызватьИсключение; + КонецПопытки; + + Возврат ""; + +КонецФункции + +// Для формы СменаПароля и функции НовыйПарольМожноУстановить. +Функция ПодсказкаДляНовогоПароля() Экспорт + + Возврат + НСтр("ru = 'Надежный пароль: + |- имеет не менее 7 символов; + |- содержит любые 3 из 4-х типов символов: заглавные буквы, + | строчные буквы, цифры, специальные символы; + |- не совпадает с именем (для входа).'"); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции работы с пользователями. @@ -2189,12 +2336,25 @@ УстановитьПроверкуСложностиПаролейПользователей(Ложь); КонецЕсли; + Если Не ЗначениеЗаполнено(ИмяПользователя()) + И ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() = 0 Тогда + + ВременныйАдминистраторИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); + ВременныйАдминистраторИБ.АутентификацияСтандартная = Истина; + ВременныйАдминистраторИБ.Роли.Добавить(Метаданные.Роли.Администрирование); + ВременныйАдминистраторИБ.Имя = НСтр("ru = 'Временный первый администратор'") + + " (" + Строка(Новый УникальныйИдентификатор) + ")"; + ВременныйАдминистраторИБ.Записать(); + Иначе + ВременныйАдминистраторИБ = Неопределено; + КонецЕсли; + ВременныйПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); ВременныйПользовательИБ.АутентификацияСтандартная = Ложь; ВременныйПользовательИБ.Пароль = Пароль; - ВременныйПользовательИБ.Имя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Временный пользователь (%1)'"), - Новый УникальныйИдентификатор); + ВременныйПользовательИБ.Имя = НСтр("ru = 'Временный пользователь'") + + " (" + Строка(Новый УникальныйИдентификатор) + ")"; ВременныйПользовательИБ.Записать(); @@ -2205,6 +2365,10 @@ ВременныйПользовательИБ.Удалить(); + Если ВременныйАдминистраторИБ <> Неопределено Тогда + ВременныйАдминистраторИБ.Удалить(); + КонецЕсли; + Если ТекущаяМинимальнаяДлина > 0 Тогда УстановитьМинимальнуюДлинуПаролейПользователей(ТекущаяМинимальнаяДлина); КонецЕсли; @@ -2227,6 +2391,7 @@ КонецЕсли; Если ТипЗнч(ИдентификаторПользователяИБ) = Тип("УникальныйИдентификатор") Тогда + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( ИдентификаторПользователяИБ); @@ -2625,6 +2790,13 @@ МодульПользователиСлужебныйВМоделиСервиса.ПослеНачалаОбработкиПользователяИБ(ПользовательОбъект, ПараметрыОбработки); КонецЕсли; + Если ПараметрыОбработки.Свойство("СозданиеАдминистратора") Тогда + УстановитьПривилегированныйРежим(Истина); + ИнтеграцияСтандартныхПодсистем.ПриСозданииАдминистратора(СсылкаОбъекта(ПользовательОбъект), + ПараметрыОбработки.СозданиеАдминистратора); + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + КонецПроцедуры // Вызывается ПриЗаписи Пользователя или Внешнего пользователя. @@ -2642,12 +2814,6 @@ Возврат; КонецЕсли; - Если ПараметрыОбработки.Свойство("ЗаписьАдминистратора") Тогда - УстановитьПривилегированныйРежим(Истина); - ИнтеграцияСтандартныхПодсистем.ПриЗаписиАдминистратора(ПользовательОбъект.Ссылка); - УстановитьПривилегированныйРежим(Ложь); - КонецЕсли; - ОбновлятьРоли = Истина; // ПриЗавершенииОбработкиПользователяИБ - поддержка модели сервиса. @@ -2798,10 +2964,27 @@ КонецФункции +// Проверяет наличие ролей администратора с учетом модели сервиса и базовых версий. +Функция РолиАдминистратораДоступны(ПользовательИБ = Неопределено) Экспорт + + Если ПользовательИБ = Неопределено + Или ПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь() Тогда + + Возврат РольДоступна(Метаданные.Роли.ПолныеПрава) // Не заменять на РолиДоступны. + И (РольДоступна(Пользователи.РольАдминистратораСистемы(Истина)) // Не заменять на РолиДоступны. + Или ОбщегоНазначенияПовтИсп.РазделениеВключено() ); + КонецЕсли; + + Возврат ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава) + И (ПользовательИБ.Роли.Содержит(Пользователи.РольАдминистратораСистемы(Истина)) + Или ОбщегоНазначенияПовтИсп.РазделениеВключено() ); + +КонецФункции + // Создает пользователя <Не указан>. // // Возвращаемое значение: -// СправочникСсылка.Пользователи +// СправочникСсылка.Пользователи. // Функция СоздатьНеуказанногоПользователя() Экспорт @@ -2864,7 +3047,7 @@ , Отказ); - ИначеЕсли Найти(Имя, ":") > 0 Тогда + ИначеЕсли СтрНайти(Имя, ":") > 0 Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Имя (для входа) содержит запрещенный символ "":"".'"), , @@ -2901,22 +3084,6 @@ КонецЕсли; КонецЕсли; - Если ОписаниеПользователяИБ.Свойство("Пароль") Тогда - - Если ОписаниеПользователяИБ.Пароль <> Неопределено - И ОписаниеПользователяИБ.Пароль - <> ОписаниеПользователяИБ.ПодтверждениеПароля Тогда - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Пароль и подтверждение пароля не совпадают.'"), - , - "Пароль", - , - Отказ); - КонецЕсли; - - КонецЕсли; - Если ОписаниеПользователяИБ.Свойство("ПользовательОС") Тогда Если Не ПустаяСтрока(ОписаниеПользователяИБ.ПользовательОС) @@ -3146,9 +3313,9 @@ // Когда указана группа ВсеВнешниеПользователи обновляются также все // автоматические группы внешних пользователей по типам объектов авторизации. // -// ВнешнийПользователь - Неопределено - для всех внешних пользователей. -// - Массив значений СправочникСсылка.ВнешниеПользователи -// - для указанных внешних пользователей. +// ВнешнийПользователь - Неопределено - для всех внешних пользователей. +// - Массив значений СправочникСсылка.ВнешниеПользователи - для указанных +// внешних пользователей. // - СправочникСсылка.ВнешниеПользователи - для указанного внешнего пользователя. // // УчастникиИзменений - Неопределено - никаких действий. @@ -3196,24 +3363,28 @@ ОбновитьСоставыГруппПоТипамОбъектовАвторизации( , ВнешнийПользователь, ТекущиеУчастникиИзменений, ТекущиеИзмененныеГруппы); - ИначеЕсли ОбщегоНазначения.ЗначениеРеквизитаОбъекта( - ГруппаВнешнихПользователей, "ВсеОбъектыАвторизации") = Истина Тогда - - ОбновитьСоставыГруппПоТипамОбъектовАвторизации( - ГруппаВнешнихПользователей, - ВнешнийПользователь, - ТекущиеУчастникиИзменений, - ТекущиеИзмененныеГруппы); Иначе - ОбновитьСоставыИерархическихГруппПользователей( - ГруппаВнешнихПользователей, - ВнешнийПользователь, - ТекущиеУчастникиИзменений, - ТекущиеИзмененныеГруппы); + ВсеОбъектыАвторизации = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ГруппаВнешнихПользователей, + "ВсеОбъектыАвторизации"); + ВсеОбъектыАвторизации = ?(ВсеОбъектыАвторизации = Неопределено, Ложь, ВсеОбъектыАвторизации); + + Если ВсеОбъектыАвторизации Тогда + ОбновитьСоставыГруппПоТипамОбъектовАвторизации( + ГруппаВнешнихПользователей, + ВнешнийПользователь, + ТекущиеУчастникиИзменений, + ТекущиеИзмененныеГруппы); + Иначе + ОбновитьСоставыИерархическихГруппПользователей( + ГруппаВнешнихПользователей, + ВнешнийПользователь, + ТекущиеУчастникиИзменений, + ТекущиеИзмененныеГруппы); + КонецЕсли; КонецЕсли; Если УчастникиИзменений = Неопределено - И ИзмененныеГруппы = Неопределено Тогда + И ИзмененныеГруппы = Неопределено Тогда ПослеОбновленияСоставовГруппВнешнихПользователей( ТекущиеУчастникиИзменений, ТекущиеИзмененныеГруппы); @@ -4325,13 +4496,14 @@ Процедура ЗаполнитьНазначениеГруппВнешнихПользователей() Экспорт Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ + Запрос.Текст = + "ВЫБРАТЬ | ГруппыВнешнихПользователей.Ссылка КАК Ссылка |ИЗ | Справочник.ГруппыВнешнихПользователей КАК ГруппыВнешнихПользователей |ГДЕ - | (ГруппыВнешнихПользователей.Предопределенный - | ИЛИ НЕ ГруппыВнешнихПользователей.Ссылка В + | НЕ(НЕ ГруппыВнешнихПользователей.Предопределенный + | И ГруппыВнешнихПользователей.Ссылка В | (ВЫБРАТЬ РАЗЛИЧНЫЕ | ГруппыВнешнихПользователей.Ссылка | ИЗ @@ -4369,6 +4541,117 @@ КонецПроцедуры +// Вызывается при переходе на новую версию конфигурации 2.3.2.4. +Процедура УдалитьКэшНедоступныеРолиПоТипамПользователей() Экспорт + + СтандартныеПодсистемыСервер.УдалитьПараметрРаботыПрограммы( + "ПараметрыРаботыПользователей", "НедоступныеРолиПоТипамПользователей"); + +КонецПроцедуры + +// Вызывается при переходе на новую версию конфигурации 2.3.2.30. +Процедура ПеренестиНастройкиДлиныИСложностиПаролейКонфигуратора() Экспорт + + ВсеНастройки = ПользователиСлужебныйПовтИсп.Настройки(); + + Если Не ВсеНастройки.ОбщиеНастройкиВхода + Или ПолучитьМинимальнуюДлинуПаролейПользователей() = 0 + И Не ПолучитьПроверкуСложностиПаролейПользователей() + Или ВсеНастройки.Пользователи.МинимальнаяДлинаПароля <> 0 + Или ВсеНастройки.Пользователи.ПарольДолженОтвечатьТребованиямСложности <> 0 + Или ВсеНастройки.ВнешниеПользователи.МинимальнаяДлинаПароля <> 0 + Или ВсеНастройки.ВнешниеПользователи.ПарольДолженОтвечатьТребованиямСложности <> 0 Тогда + + Возврат; + КонецЕсли; + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Константа.НастройкиВходаПользователей"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + НастройкиВхода = НастройкиВхода(); + + СложныйПароль = ПолучитьПроверкуСложностиПаролейПользователей(); + МинимальнаяДлинаПароля = ПолучитьМинимальнуюДлинуПаролейПользователей(); + + НастройкиВхода.Пользователи.МинимальнаяДлинаПароля = МинимальнаяДлинаПароля; + НастройкиВхода.Пользователи.ПарольДолженОтвечатьТребованиямСложности = СложныйПароль; + Если Константы.ИспользоватьВнешнихПользователей.Получить() Тогда + НастройкиВхода.ВнешниеПользователи.МинимальнаяДлинаПароля = МинимальнаяДлинаПароля; + НастройкиВхода.ВнешниеПользователи.ПарольДолженОтвечатьТребованиямСложности = СложныйПароль; + КонецЕсли; + + Константы.НастройкиВходаПользователей.Установить(Новый ХранилищеЗначения(НастройкиВхода)); + + Если ПолучитьМинимальнуюДлинуПаролейПользователей() <> 0 Тогда + УстановитьМинимальнуюДлинуПаролейПользователей(0); + КонецЕсли; + Если ПолучитьПроверкуСложностиПаролейПользователей() Тогда + УстановитьПроверкуСложностиПаролейПользователей(Ложь); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Вызывается при переходе на новую версию конфигурации 2.3.2.72. +Процедура ДобавитьАдминистраторамПравоОткрытияВнешнихОтчетовИОбработок() Экспорт + Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() + И Не ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + Возврат; // В подчиненных узлах изменения в профилях загружаются из главного узла. + КонецЕсли; + + // Чтение общего решения, принятого администратором в форме "Предупреждение безопасности". + ПараметрыАдминистрирования = СтандартныеПодсистемыСервер.ПараметрыАдминистрирования(); + РешениеПринято = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыАдминистрирования, + "ПринятоРешениеПоОткрытиюВнешнихОтчетовИОбработок"); + Если РешениеПринято <> Неопределено Тогда + Возврат; + КонецЕсли; + ОткрытиеРазрешено = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыАдминистрирования, + "РазрешеноОткрытиеВнешнихОтчетовИОбработок"); + + // Удаление старого ключа и регистрация нового ключа. + ПараметрыАдминистрирования.Удалить("РазрешеноОткрытиеВнешнихОтчетовИОбработок"); + Если ОткрытиеРазрешено <> Неопределено Тогда + ПараметрыАдминистрирования.Вставить("ПринятоРешениеПоОткрытиюВнешнихОтчетовИОбработок", Истина); + КонецЕсли; + СтандартныеПодсистемыСервер.УстановитьПараметрыАдминистрирования(ПараметрыАдминистрирования); + + // Если решение не принято, то право интерактивного открытия включается для всех администраторов. + Если ОткрытиеРазрешено = Неопределено Тогда + ОткрытиеРазрешено = Истина; + КонецЕсли; + + // Если открытие разрешено, то включаем администраторам соответствующую роль. + Если ОткрытиеРазрешено Тогда + ДобавляемаяРоль = Метаданные.Роли.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок; + РольАдминистратора = Метаданные.Роли.АдминистраторСистемы; + ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); + Для Каждого ПользовательИБ Из ПользователиИБ Цикл + Если ПользовательИБ.Роли.Содержит(РольАдминистратора) + И Не ПользовательИБ.Роли.Содержит(ДобавляемаяРоль) Тогда + ПользовательИБ.Роли.Добавить(ДобавляемаяРоль); + ПользовательИБ.Записать(); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + // Создание профиля и включение пользователей с правом в группу доступа. + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + МодульУправлениеДоступомСлужебный.УстановитьПравоОткрытияВнешнихОтчетовИОбработок(ОткрытиеРазрешено); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Прочие пользовательские настройки. @@ -4487,21 +4770,24 @@ КонецПроцедуры +Функция ЗаголовокСообщенияАвторизацияНеВыполненаСПереводомСтроки() + + Возврат НСтр("ru = 'Авторизация не выполнена. Работа системы будет завершена.'") + + Символы.ПС + Символы.ПС; + +КонецФункции + Функция ТекстСообщенияПользовательНеНайденВСправочнике(ИмяПользователя) Если ВнешниеПользователи.ИспользоватьВнешнихПользователей() Тогда ШаблонСообщенияОбОшибке = - НСтр("ru = 'Авторизация не выполнена. Работа системы будет завершена. - | - |Пользователь ""%1"" не найден в справочниках + НСтр("ru = 'Пользователь ""%1"" не найден в справочниках |""Пользователи"" и ""Внешние пользователи"". | |Обратитесь к администратору.'"); Иначе ШаблонСообщенияОбОшибке - = НСтр("ru = 'Авторизация не выполнена. Работа системы будет завершена. - | - |Пользователь ""%1"" не найден в справочнике ""Пользователи"". + = НСтр("ru = 'Пользователь ""%1"" не найден в справочнике ""Пользователи"". | |Обратитесь к администратору.'"); КонецЕсли; @@ -4547,7 +4833,52 @@ ВызватьИсключение; КонецПопытки; - Возврат Неопределено; + Возврат Результат; + +КонецФункции + +Функция РезультатУстановкиПараметровСеанса(РегистрироватьВЖурнале) + + Попытка + Пользователи.АвторизованныйПользователь(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Возврат КраткоеПредставлениеОшибкиАвторизацииПослеРегистрацииВЖурнале(ИнформацияОбОшибке, + , РегистрироватьВЖурнале); + КонецПопытки; + + Возврат ""; + +КонецФункции + +Функция КраткоеПредставлениеОшибкиАвторизацииПослеРегистрацииВЖурнале(ИнформацияОбОшибке, ШаблонОшибки = "", РегистрироватьВЖурнале = Истина) + + Если ТипЗнч(ИнформацияОбОшибке) = Тип("ИнформацияОбОшибке") Тогда + КраткоеПредставление = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + ПодробноеПредставление = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + Иначе + КраткоеПредставление = ИнформацияОбОшибке; + ПодробноеПредставление = ИнформацияОбОшибке; + КонецЕсли; + + Если ЗначениеЗаполнено(ШаблонОшибки) Тогда + КраткоеПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонОшибки, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + + ПодробноеПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонОшибки, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецЕсли; + + КраткоеПредставление = ЗаголовокСообщенияАвторизацияНеВыполненаСПереводомСтроки() + КраткоеПредставление; + ПодробноеПредставление = ЗаголовокСообщенияАвторизацияНеВыполненаСПереводомСтроки() + ПодробноеПредставление; + + Если РегистрироватьВЖурнале Тогда + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Пользователи.Ошибка входа в программу'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставление); + КонецЕсли; + + Возврат КраткоеПредставление; КонецФункции @@ -4558,7 +4889,7 @@ // Таблица - полное имя объекта метаданных. // // Возвращаемое значение: -// ТаблицаЗначений (Ссылка, Родитель) +// ТаблицаЗначений (Ссылка, Родитель). // Функция СсылкиВИерархииРодителей(Таблица) @@ -5048,171 +5379,210 @@ // Проверяет права указанного пользователя ИБ. // // Параметры: -// ПользовательИБ - ПользовательИнформационнойБазы. -// РежимПроверки - Строка - ПриЗаписи или ПриЗапуске. +// ПользовательИБ - ПользовательИнформационнойБазы - проверяемый пользователь. +// РежимПроверки - Строка - ПриЗаписи или ПриЗапуске. +// ЭтоВнешнийПользователь - Булево - проверять права для внешнего пользователя. // -Процедура ПроверитьПраваПользователя(ПользовательИБ, РежимПроверки) +Процедура ПроверитьПраваПользователя(ПользовательИБ, РежимПроверки, ЭтоВнешнийПользователь) РазделениеВключено = ОбщегоНазначенияПовтИсп.РазделениеВключено(); Если РазделениеВключено И ПользовательИБ.РазделениеДанных.Количество() = 0 Тогда Возврат; // Не нужно проверять неразделенных пользователей в модели сервиса. КонецЕсли; - Если Не РазделениеВключено И РежимПроверки = "ПриЗапуске" Тогда + Если Не РазделениеВключено И РежимПроверки = "ПриЗапуске" И Не ЭтоВнешнийПользователь Тогда Возврат; // Не нужно проверять права пользователей при запуске в локальном режиме. КонецЕсли; - ТипыПользователей = ?(РазделениеВключено, - Перечисления.ТипыПользователей.ПользовательОбластиДанных, - Перечисления.ТипыПользователей.ПользовательЛокальногоРешения); + Если ЭтоВнешнийПользователь Тогда - НедоступныеРоли = НедоступныеРолиПоТипуПользователей(ТипыПользователей); - Если НедоступныеРоли.Количество() = 0 Тогда - Возврат; + НазначениеРолейПользователя = "ДляВнешнихПользователей"; + + ИначеЕсли Не РазделениеВключено И Пользователи.ЭтоПолноправныйПользователь(, Истина, Ложь) Тогда + // Пользователь с ролью АдминистраторСистемы в локальном режиме работы + // может выдавать административные права. + НазначениеРолейПользователя = "ДляАдминистраторов"; + Иначе + НазначениеРолейПользователя = "ДляПользователей"; КонецЕсли; + НедоступныеРоли = ПользователиСлужебныйПовтИсп.НедоступныеРоли(НазначениеРолейПользователя); + РолиДляПроверки = Новый ТаблицаЗначений; РолиДляПроверки.Колонки.Добавить("Роль", Новый ОписаниеТипов("ОбъектМетаданных")); РолиДляПроверки.Колонки.Добавить("ЭтоУдаляемаяРоль", Новый ОписаниеТипов("Булево")); - Для каждого Роль Из ПользовательИБ.Роли Цикл + Для Каждого Роль Из ПользовательИБ.Роли Цикл РолиДляПроверки.Добавить().Роль = Роль; КонецЦикла; РолиДляПроверки.Индексы.Добавить("Роль"); - Если РежимПроверки = "ПередЗаписью" И Не РазделениеВключено Тогда - ПрежнийПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( - ПользовательИБ.УникальныйИдентификатор); - - Если ПрежнийПользовательИБ <> Неопределено Тогда - Для каждого Роль Из ПрежнийПользовательИБ.Роли Цикл - Строка = РолиДляПроверки.Найти(Роль, "Роль"); + ПрежнийПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ПользовательИБ.УникальныйИдентификатор); + + Если ПрежнийПользовательИБ <> Неопределено Тогда + Для Каждого Роль Из ПрежнийПользовательИБ.Роли Цикл + Строка = РолиДляПроверки.Найти(Роль, "Роль"); + Если Не РазделениеВключено И РежимПроверки = "ПередЗаписью" Тогда Если Строка <> Неопределено Тогда РолиДляПроверки.Удалить(Строка); КонецЕсли; - КонецЦикла; - КонецЕсли; + ИначеЕсли Строка = Неопределено Тогда + Строка = РолиДляПроверки.Добавить(); + Строка.Роль = Роль; + Строка.ЭтоУдаляемаяРоль = Истина; + КонецЕсли; + КонецЦикла; КонецЕсли; - НайденныеНедоступныеРоли = Новый ТаблицаЗначений; - НайденныеНедоступныеРоли.Колонки.Добавить("Роль", Новый ОписаниеТипов("ОбъектМетаданных")); - НайденныеНедоступныеРоли.Колонки.Добавить("ЭтоУдаляемаяРоль", Новый ОписаниеТипов("Булево")); + УдаляемыеНедоступныеРоли = ""; + ДобавляемыеНедоступныеРоли = ""; + НазначениеРолей = Неопределено; - Для каждого ОписаниеРоли Из РолиДляПроверки Цикл + Для Каждого ОписаниеРоли Из РолиДляПроверки Цикл Роль = ОписаниеРоли.Роль; ИмяРоли = Роль.Имя; - СвойстваНедоступнойРоли = НедоступныеРоли.Получить(ИмяРоли); - Если СвойстваНедоступнойРоли = Неопределено Тогда + Если НедоступныеРоли.Получить(ИмяРоли) = Неопределено Тогда + Продолжить; + ИначеЕсли РежимПроверки = "ПередЗаписью" + И Не ОписаниеРоли.ЭтоУдаляемаяРоль Тогда + Если ПользовательИБ.Роли.Содержит(Роль) Тогда + ПользовательИБ.Роли.Удалить(Роль); + КонецЕсли; Продолжить; КонецЕсли; - ЗаполнитьЗначенияСвойств(НайденныеНедоступныеРоли.Добавить(), ОписаниеРоли); - Если СвойстваНедоступнойРоли.Свойство("ИзменяемыеНеразделенныеДанные") Тогда - Запись = Новый ЗаписьXML; - Запись.УстановитьСтроку(); - СериализаторXDTO.ЗаписатьXML(Запись, СвойстваНедоступнойРоли.ИзменяемыеНеразделенныеДанные); - ТаблицаСтрокой = Запись.Закрыть(); - - Если ОписаниеРоли.ЭтоУдаляемаяРоль Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Попытка изменить состав ролей у пользователя %1 с ролью - |""%2"", - |предоставляющей права на изменение общих данных: - |""%3"".'"), - ПользовательИБ.ПолноеИмя, - Роль.Представление(), - ТаблицаСтрокой); - Иначе - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Попытка назначить пользователю %1 недопустимую роль - |""%2"", - |предоставляющую права на изменение общих данных: - |""%3"".'"), - ПользовательИБ.ПолноеИмя, - Роль.Представление(), - ТаблицаСтрокой); - КонецЕсли; - - ИмяСобытия = НСтр("ru = 'Пользователи.Ошибка при установке ролей пользователю ИБ'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка,, ПользовательИБ, ТекстСообщения); + Если НазначениеРолей = Неопределено Тогда + НазначениеРолей = ПользователиСлужебныйПовтИсп.Параметры().НазначениеРолей; КонецЕсли; - Если СвойстваНедоступнойРоли.Свойство("Права") Тогда + Если НазначениеРолей.ТолькоДляАдминистраторовСистемы.Получить(ИмяРоли) <> Неопределено Тогда + ТекстШаблона = НСтр("ru = '""%1"" (предназначена только для администраторов системы)'"); + + ИначеЕсли РазделениеВключено + И НазначениеРолей.ТолькоДляПользователейСистемы.Получить(ИмяРоли) <> Неопределено Тогда - ИмяСобытия = НСтр("ru = 'Пользователи.Ошибка при установке ролей пользователю ИБ'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - - Для каждого Право Из СвойстваНедоступнойРоли.Права Цикл + ТекстШаблона = НСтр("ru = '""%1"" (предназначена только для пользователей системы)'"); + + Иначе + Если ОписаниеРоли.ЭтоУдаляемаяРоль Тогда + Продолжить; + КонецЕсли; + Если НазначениеРолей.ТолькоДляВнешнихПользователей.Получить(ИмяРоли) <> Неопределено Тогда + ТекстШаблона = НСтр("ru = '""%1"" (предназначена только для внешних пользователей)'"); - Если ОписаниеРоли.ЭтоУдаляемаяРоль Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Попытка изменить состав ролей у пользователя ""%1"" с ролью - |""%2"", - |предоставляющей право ""%3"".'"), - Строка(ПользовательИБ), - Роль.Представление(), - Право); - Иначе - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Попытка назначить пользователю ""%1"" недопустимую роль - |""%2"", - |предоставляющую право ""%3"".'"), - Строка(ПользовательИБ), - Роль.Представление(), - Право); - КонецЕсли; - ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка,, ПользовательИБ, ТекстСообщения); - - КонецЦикла; + Иначе // Это внешний пользователь. + ТекстШаблона = НСтр("ru = '""%1"" (предназначена только для пользователей)'"); + КонецЕсли; + КонецЕсли; + + Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстШаблона, Роль.Представление()) + Символы.ПС; + + Если ОписаниеРоли.ЭтоУдаляемаяРоль Тогда + УдаляемыеНедоступныеРоли = УдаляемыеНедоступныеРоли + Представление; + Иначе + ДобавляемыеНедоступныеРоли = ДобавляемыеНедоступныеРоли + Представление; КонецЕсли; КонецЦикла; - Если НайденныеНедоступныеРоли.Количество() = 0 Тогда + УдаляемыеНедоступныеРоли = СокрЛП(УдаляемыеНедоступныеРоли); + ДобавляемыеНедоступныеРоли = СокрЛП(ДобавляемыеНедоступныеРоли); + + Если Не ЗначениеЗаполнено(УдаляемыеНедоступныеРоли) + И Не ЗначениеЗаполнено(ДобавляемыеНедоступныеРоли) Тогда + Возврат; КонецЕсли; - Отбор = Новый Структура("ЭтоУдаляемаяРоль", Истина); - УдаляемыеРоли = НайденныеНедоступныеРоли.НайтиСтроки(Отбор); + ИмяСобытия = НСтр("ru = 'Пользователи.Ошибка при установке ролей пользователю ИБ'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - Отбор = Новый Структура("ЭтоУдаляемаяРоль", Ложь); - ДобавляемыеРоли = НайденныеНедоступныеРоли.НайтиСтроки(Отбор); - - Если УдаляемыеРоли.Количество() = 1 Тогда - ТекстСообщенияУдаления = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Невозможно удалить недоступную роль у пользователя ""%1"".'"), - ПользовательИБ.ПолноеИмя); - ИначеЕсли УдаляемыеРоли.Количество() > 1 Тогда - ТекстСообщенияУдаления = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Невозможно удалить недоступные роли у пользователя ""%1"".'"), - ПользовательИБ.ПолноеИмя); - КонецЕсли; - - Если ДобавляемыеРоли.Количество() = 1 Тогда - ТекстСообщенияДобавления = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Пользователю ""%1"" не может быть добавлена роль - |""%2"".'"), - ПользовательИБ.ПолноеИмя, - ДобавляемыеРоли[0].Роль.Представление()); + Если РежимПроверки = "ПриЗапуске" Тогда + Если СтрЧислоСтрок(ДобавляемыеНедоступныеРоли) = 1 Тогда + ТекстРегистрацииВхода = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Попытка входа пользователя %1 с недоступной ролью: + |%2.'"), + ПользовательИБ.ПолноеИмя, ДобавляемыеНедоступныеРоли); + Иначе + ТекстРегистрацииВхода = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Попытка входа пользователя %1 с недоступными ролями: + |%2.'"), + ПользовательИБ.ПолноеИмя, ДобавляемыеНедоступныеРоли); + КонецЕсли; + ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , ПользовательИБ, + ТекстРегистрацииВхода); - ИначеЕсли ДобавляемыеРоли.Количество() > 1 Тогда - Роли = ""; - Для каждого ОписаниеРоли Из ДобавляемыеРоли Цикл - Роли = Роли + " - |" + ОписаниеРоли.Роль.Представление(); - КонецЦикла; - ТекстСообщенияДобавления = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Пользователю ""%1"" не могут быть добавлены роли:%2.'"), - ПользовательИБ.ПолноеИмя, - Роли); + ТекстСообщенияВхода = + НСтр("ru = 'Невозможно выполнить вход из-за наличия недоступных ролей. + |Обратитесь к администратору.'"); + ВызватьИсключение ТекстСообщенияВхода; КонецЕсли; - Если ЗначениеЗаполнено(ТекстСообщенияУдаления) Тогда - ВызватьИсключение ТекстСообщенияУдаления + Символы.ПС + ТекстСообщенияДобавления; + Если СтрЧислоСтрок(УдаляемыеНедоступныеРоли) = 1 И ЗначениеЗаполнено(УдаляемыеНедоступныеРоли) Тогда + ТекстРегистрацииУдаления = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Попытка удалить пользователю %1 недоступную роль + |""%2"".'"), + ПользовательИБ.ПолноеИмя, УдаляемыеНедоступныеРоли); + + ИначеЕсли СтрЧислоСтрок(УдаляемыеНедоступныеРоли) > 1 Тогда + ТекстРегистрацииУдаления = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Попытка удалить пользователю %1 недоступные роли: + |%2.'"), + ПользовательИБ.ПолноеИмя, УдаляемыеНедоступныеРоли); Иначе - ВызватьИсключение ТекстСообщенияДобавления; + ТекстРегистрацииУдаления = ""; КонецЕсли; + Если СтрЧислоСтрок(ДобавляемыеНедоступныеРоли) = 1 И ЗначениеЗаполнено(ДобавляемыеНедоступныеРоли) Тогда + ТекстРегистрацииДобавления = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Попытка назначить пользователю %1 недоступную роль: + |%2.'"), + ПользовательИБ.ПолноеИмя, ДобавляемыеНедоступныеРоли); + + ИначеЕсли СтрЧислоСтрок(ДобавляемыеНедоступныеРоли) > 1 Тогда + ТекстРегистрацииДобавления = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Попытка назначить пользователю %1 недоступные роли: + |%2.'"), + ПользовательИБ.ПолноеИмя, ДобавляемыеНедоступныеРоли); + Иначе + ТекстРегистрацииДобавления = ""; + КонецЕсли; + + ТекстРегистрации = СокрЛП(ТекстРегистрацииУдаления + Символы.ПС + Символы.ПС + ТекстРегистрацииДобавления); + ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , ПользовательИБ, + ТекстРегистрации); + + Если СтрЧислоСтрок(УдаляемыеНедоступныеРоли) = 1 И ЗначениеЗаполнено(УдаляемыеНедоступныеРоли) Тогда + ТекстСообщенияУдаления = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Пользователю ""%1"" невозможно удалить недоступную роль.'"), + ПользовательИБ.ПолноеИмя); + ИначеЕсли СтрЧислоСтрок(УдаляемыеНедоступныеРоли) > 1 Тогда + ТекстСообщенияУдаления = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Пользователю ""%1"" невозможно удалить недоступные роли.'"), + ПользовательИБ.ПолноеИмя); + Иначе + ТекстСообщенияУдаления = ""; + КонецЕсли; + + Если СтрЧислоСтрок(ДобавляемыеНедоступныеРоли) = 1 И ЗначениеЗаполнено(ДобавляемыеНедоступныеРоли) Тогда + ТекстСообщенияДобавления = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Пользователю ""%1"" невозможно назначить недоступную роль + |%2.'"), + ПользовательИБ.ПолноеИмя, ДобавляемыеНедоступныеРоли); + + ИначеЕсли СтрЧислоСтрок(ДобавляемыеНедоступныеРоли) > 1 Тогда + ТекстСообщенияДобавления = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Пользователю ""%1"" невозможно назначить недоступные роли: + |%2.'"), + ПользовательИБ.ПолноеИмя, ДобавляемыеНедоступныеРоли); + Иначе + ТекстСообщенияДобавления = ""; + КонецЕсли; + + ТекстСообщения = СокрЛП(ТекстСообщенияУдаления + Символы.ПС + Символы.ПС + ТекстСообщенияДобавления); + + ВызватьИсключение ТекстСообщения; + КонецПроцедуры Функция СписокНастроек(ИмяПользователяИБ, МенеджерНастроек) @@ -5343,6 +5713,44 @@ КонецПроцедуры +Функция КлючПредупрежденияБезопасностиПриЗапуске() + Если ПустаяСтрока(ПользователиИнформационнойБазы.ТекущийПользователь().Имя) Тогда + Возврат Неопределено; // В базе без пользователей предупреждение не требуется. + КонецЕсли; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат Неопределено; // В модели сервиса предупреждение не требуется. + КонецЕсли; + Если ПривилегированныйРежим() Тогда + Возврат Неопределено; // С ключом запуска "/UsePrivilegedMode" предупреждение не требуется. + КонецЕсли; + Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() + И Не ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда + Возврат Неопределено; // В подчиненных узлах предупреждение не требуется. + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + ПараметрыАдминистрирования = СтандартныеПодсистемыСервер.ПараметрыАдминистрирования(); + РешениеПринято = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыАдминистрирования, "ПринятоРешениеПоОткрытиюВнешнихОтчетовИОбработок"); + УстановитьПривилегированныйРежим(Ложь); + + ЭтоАдминистраторСистемы = Пользователи.ЭтоПолноправныйПользователь(, Истина, Ложь); + Если ЭтоАдминистраторСистемы И РешениеПринято = Неопределено Тогда + Возврат "ПослеОбновления"; + КонецЕсли; + + Если РешениеПринято <> Неопределено Тогда + Если ПравоДоступа("ИнтерактивноеОткрытиеВнешнихОбработок", Метаданные) + Или ПравоДоступа("ИнтерактивноеОткрытиеВнешнихОтчетов", Метаданные) Тогда + ПользовательОзнакомлен = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПредупреждениеБезопасности", "ПользовательОзнакомлен", Ложь); + Если Не ПользовательОзнакомлен Тогда + Возврат "ПослеПоявленияПрава"; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Возврат Неопределено; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Процедуры используемые при обмене данными. @@ -5438,7 +5846,7 @@ // - ПриВыполненииСтандартныхПериодическихПроверокНаСервере. // Обновляет дату последней активности и проверяет необходимость смены пароля. -Функция ТребуетсяСменитьПароль(ОписаниеОшибки = "", ПриЗапуске = Ложь) +Функция ТребуетсяСменитьПароль(ОписаниеОшибки = "", ПриЗапуске = Ложь, РегистрироватьВЖурнале = Истина) Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда Возврат Ложь; @@ -5496,43 +5904,37 @@ Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); ОтменитьТранзакцию(); + ШаблонТекстаОшибки = + НСтр("ru = 'Не удалось записать сведения о текущем пользователе по причине: + |%1 + | + |Обратитесь к администратору.'"); Если ПриЗапуске Тогда - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Авторизация не выполнена. Работа системы будет завершена. - |Не удалось записать сведения о текущем пользователе по причине: - |%1 - | - |Обратитесь к администратору.'"), - КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + ОписаниеОшибки = ЗаголовокСообщенияАвторизацияНеВыполненаСПереводомСтроки() + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаОшибки, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Пользователи.Ошибка входа в программу'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - Метаданные.НайтиПоТипу(ТипЗнч(ТекущийПользователь)), - ТекущийПользователь, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось записать сведения о пользователе ""%1"" по причине: - |%2'"), - ТекущийПользователь, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке))); + Если РегистрироватьВЖурнале Тогда + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Пользователи.Ошибка входа в программу'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.НайтиПоТипу(ТипЗнч(ТекущийПользователь)), + ТекущийПользователь, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаОшибки, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке))); + КонецЕсли; Иначе - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось записать сведения о текущем пользователе по причине: - |%1 - | - |Обратитесь к администратору.'"), - КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); - - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Пользователи.Ошибка обновления даты последней активности'", - ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - Метаданные.НайтиПоТипу(ТипЗнч(ТекущийПользователь)), - ТекущийПользователь, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось записать сведения о пользователе ""%1"" по причине: - |%2'"), - ТекущийПользователь, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке))); + Если РегистрироватьВЖурнале Тогда + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Пользователи.Ошибка обновления даты последней активности'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.НайтиПоТипу(ТипЗнч(ТекущийПользователь)), + ТекущийПользователь, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекстаОшибки, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке))); + КонецЕсли; КонецЕсли; Возврат Ложь; КонецПопытки; @@ -5540,6 +5942,7 @@ ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("УчитыватьСвойствоЗапрещеноИзменятьПароль"); + ДополнительныеПараметры.Вставить("УчитыватьСвойствоАутентификацияСтандартная"); Если Не ВозможноИзменитьПароль(ТекущийПользователь, ДополнительныеПараметры) Тогда Возврат Ложь; КонецЕсли; @@ -5573,6 +5976,124 @@ КонецФункции +// Для функции ОбработатьНовыйПароль. +Функция ОшибкаДлиныИлиСложностиПароля(Пароль, МинимальнаяДлинаПароля, СложныйПароль) + + Если СложныйПароль И МинимальнаяДлинаПароля < 7 Тогда + МинимальнаяДлинаПароля = 7; + КонецЕсли; + Если СтрДлина(Пароль) < МинимальнаяДлинаПароля Тогда + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Количество символов нового пароля должно быть не менее %1.'"), + Формат(МинимальнаяДлинаПароля, "ЧГ=")); + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат ""; // Проверка сложности пароля в разделенном режиме невозможна. + КонецЕсли; + + Если СложныйПароль И Не ПарольОтвечаетТребованиямСложности(Пароль) Тогда + Возврат НСтр("ru = 'Пароль не отвечает требованиям сложности.'") + + Символы.ПС + Символы.ПС + + ПодсказкаДляНовогоПароля(); + КонецЕсли; + +КонецФункции + +// Для функции ОшибкаДлиныИлиСложностиПароля. +// Проверяет пароль на требования сложности, реализованными в 1С:Предприятии. +// +// Параметры: +// Пароль - Строка - проверяемый пароль. +// +// Возвращаемое значение: +// Булево - Истина, если соответствует. +// +Функция ПарольОтвечаетТребованиямСложности(Пароль) + + УстановитьПривилегированныйРежим(Истина); + + ТекущаяПроверкаСложности = ПолучитьПроверкуСложностиПаролейПользователей(); + ТекущаяМинимальнаяДлина = ПолучитьМинимальнуюДлинуПаролейПользователей(); + + НачатьТранзакцию(); + Попытка + Если ТекущаяМинимальнаяДлина > 0 Тогда + УстановитьМинимальнуюДлинуПаролейПользователей(0); + КонецЕсли; + Если ТекущаяПроверкаСложности Тогда + УстановитьПроверкуСложностиПаролейПользователей(Ложь); + КонецЕсли; + + Если Не ЗначениеЗаполнено(ИмяПользователя()) + И ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() = 0 Тогда + + ВременныйАдминистраторИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); + ВременныйАдминистраторИБ.АутентификацияСтандартная = Истина; + ВременныйАдминистраторИБ.Роли.Добавить(Метаданные.Роли.Администрирование); + ВременныйАдминистраторИБ.Имя = НСтр("ru = 'Временный первый администратор'") + + " (" + Строка(Новый УникальныйИдентификатор) + ")"; + ВременныйАдминистраторИБ.Записать(); + Иначе + ВременныйАдминистраторИБ = Неопределено; + КонецЕсли; + + ВременныйПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); + ВременныйПользовательИБ.АутентификацияСтандартная = Истина; + ВременныйПользовательИБ.Пароль = Пароль; + + ВременныйПользовательИБ.Имя = НСтр("ru = 'Временный пользователь'") + + " (" + Строка(Новый УникальныйИдентификатор) + ")"; + + ВременныйПользовательИБ.Записать(); + + ВременныйПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ВременныйПользовательИБ.УникальныйИдентификатор); + + УстановитьПроверкуСложностиПаролейПользователей(Истина); + Отвечает = Истина; + Попытка + ВременныйПользовательИБ.Пароль = Пароль; + ВременныйПользовательИБ.Записать(); + Исключение + Отвечает = Ложь; + КонецПопытки; + + ВременныйПользовательИБ.Удалить(); + + Если ВременныйАдминистраторИБ <> Неопределено Тогда + ВременныйАдминистраторИБ.Удалить(); + КонецЕсли; + + Если ТекущаяМинимальнаяДлина > 0 Тогда + УстановитьМинимальнуюДлинуПаролейПользователей(ТекущаяМинимальнаяДлина); + КонецЕсли; + Если Не ТекущаяПроверкаСложности Тогда + УстановитьПроверкуСложностиПаролейПользователей(Ложь); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + + Если ТекущаяМинимальнаяДлина <> ПолучитьМинимальнуюДлинуПаролейПользователей() Тогда + УстановитьМинимальнуюДлинуПаролейПользователей(ТекущаяМинимальнаяДлина); + КонецЕсли; + Если ТекущаяПроверкаСложности <> ПолучитьПроверкуСложностиПаролейПользователей() Тогда + УстановитьПроверкуСложностиПаролейПользователей(ТекущаяПроверкаСложности); + КонецЕсли; + + ОтменитьТранзакцию(); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось проверить отвечает ли пароль требованиям сложности по причине: + |%1'"), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецПопытки; + + Возврат Отвечает; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Для процедуры НачатьОбработкуПользователяИБ. @@ -5757,32 +6278,19 @@ КонецЕсли; КонецЕсли; - Если Не ПараметрыОбработки.СтарыйПользовательИБСуществует - И ОписаниеПользователяИБ.Свойство("Пароль") - И ОписаниеПользователяИБ.Свойство("ЗаполнитьПароль") - И ОписаниеПользователяИБ.Пароль = Неопределено - И ОписаниеПользователяИБ.ЗаполнитьПароль Тогда + Если ОписаниеПользователяИБ.Свойство("Пароль") + И ОписаниеПользователяИБ.Пароль <> Неопределено Тогда - СложныйПароль = ПолучитьПроверкуСложностиПаролейПользователей(); - ДлинаПароля = ПолучитьМинимальнуюДлинуПаролейПользователей(); + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("Пользователь", ПользовательОбъект); + ПараметрыВыполнения.Вставить("НовыйПароль", ОписаниеПользователяИБ.Пароль); + ПараметрыВыполнения.Вставить("СтарыйПароль", Неопределено); - Настройки = ПользователиСлужебныйПовтИсп.Настройки(); - Если Настройки.ОбщиеНастройкиВхода Тогда - Если ТипЗнч(ПользовательОбъект) = Тип("СправочникОбъект.ВнешниеПользователи") Тогда - НастройкиВхода = Настройки.ВнешниеПользователи; - Иначе - НастройкиВхода = Настройки.Пользователи; - КонецЕсли; - СложныйПароль = СложныйПароль Или НастройкиВхода.ПарольДолженОтвечатьТребованиямСложности; - Если ДлинаПароля < НастройкиВхода.МинимальнаяДлинаПароля Тогда - ДлинаПароля = НастройкиВхода.МинимальнаяДлинаПароля; - КонецЕсли; - КонецЕсли; + ОписаниеПользователяИБ.Свойство("СтарыйПароль", ПараметрыВыполнения.СтарыйПароль); - Если СложныйПароль Или ДлинаПароля > 0 Тогда - ДлинаПароля = ?(ДлинаПароля < 7, 7, ДлинаПароля); - - ОписаниеПользователяИБ.Пароль = СоздатьПароль(ПараметрыПароля(ДлинаПароля, СложныйПароль)); + ТекстОшибки = ОбработатьНовыйПароль(ПараметрыВыполнения); + Если ЗначениеЗаполнено(ТекстОшибки) Тогда + ВызватьИсключение ТекстОшибки; КонецЕсли; КонецЕсли; @@ -5799,11 +6307,21 @@ ВызватьИсключение ТекстОшибки; КонецЕсли; - Если ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава) - И (ПользовательИБ.Роли.Содержит(Метаданные.Роли.АдминистраторСистемы) - Или ОбщегоНазначенияПовтИсп.РазделениеВключено()) Тогда + // Поддержка обратной совместимости до версии "2.3.3" (начало). + Если Не ПользовательОбъект.ДополнительныеСвойства.Свойство("СозданиеАдминистратора") + И РолиАдминистратораДоступны(ПользовательИБ) Тогда - ПараметрыОбработки.Вставить("ЗаписьАдминистратора"); + ПользовательОбъект.ДополнительныеСвойства.Вставить("СозданиеАдминистратора", + НСтр("ru = 'Запись пользователя с ролями администратора.'")); + КонецЕсли; + // Поддержка обратной совместимости до версии "2.3.3" (окончание). + + Если ПользовательОбъект.ДополнительныеСвойства.Свойство("СозданиеАдминистратора") + И ЗначениеЗаполнено(ПользовательОбъект.ДополнительныеСвойства.СозданиеАдминистратора) + И РолиАдминистратораДоступны(ПользовательИБ) Тогда + + ПараметрыОбработки.Вставить("СозданиеАдминистратора", + ПользовательОбъект.ДополнительныеСвойства.СозданиеАдминистратора); КонецЕсли; Если СоздатьНовогоПользователяИБ Тогда @@ -6181,32 +6699,23 @@ КоллекцияРолей = Параметры.КоллекцияРолей; КоллекцияРолей.Очистить(); + ДобавленныеРоли = Новый Соответствие; - Если ТипЗнч(ПрочитанныеРоли) = Тип("Массив") Тогда - Для каждого Роль Из ПрочитанныеРоли Цикл - Если ТипЗнч(Роль) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда - Если ЗначениеЗаполнено(Роль) Тогда - ИмяРоли = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Роль, "Имя"); - КоллекцияРолей.Добавить().Роль = СокрЛП( - ?(Лев(ИмяРоли, 1) = "?", Сред(ИмяРоли, 2), ИмяРоли)); - КонецЕсли; - Иначе - КоллекцияРолей.Добавить().Роль = Роль; - КонецЕсли; - КонецЦикла; - Иначе - Для каждого Строка Из ПрочитанныеРоли Цикл - Если ТипЗнч(Строка.Роль) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда - Если ЗначениеЗаполнено(Строка.Роль) Тогда - ИмяРоли = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Строка.Роль, "Имя"); - КоллекцияРолей.Добавить().Роль = СокрЛП( - ?(Лев(ИмяРоли, 1) = "?", Сред(ИмяРоли, 2), ИмяРоли)); - КонецЕсли; - Иначе - КоллекцияРолей.Добавить().Роль = Строка.Роль; - КонецЕсли; - КонецЦикла; - КонецЕсли; + Для Каждого ОписаниеРоли Из ПрочитанныеРоли Цикл + Роль = ?(ТипЗнч(ПрочитанныеРоли) = Тип("Массив"), ОписаниеРоли, ОписаниеРоли.Роль); + Если ДобавленныеРоли.Получить(Роль) <> Неопределено Тогда + Продолжить; + КонецЕсли; + ДобавленныеРоли.Вставить(Роль, Истина); + Если ТипЗнч(Роль) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + ИмяРоли = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Роль, "Имя"); + ИмяРоли = ?(ИмяРоли = Неопределено, "(" + Роль.УникальныйИдентификатор() + ")", ИмяРоли); + ИмяРоли = ?(Лев(ИмяРоли, 1) = "?", Сред(ИмяРоли, 2), ИмяРоли); + КоллекцияРолей.Добавить().Роль = СокрЛП(ИмяРоли); + Иначе + КоллекцияРолей.Добавить().Роль = Роль; + КонецЕсли; + КонецЦикла; ОбновитьДеревоРолей(Параметры); @@ -6217,6 +6726,49 @@ Форма = Параметры.Форма; Элементы = Форма.Элементы; + // Условное оформление недоступных ролей. + ЭлементУсловногоОформления = Форма.УсловноеОформление.Элементы.Добавить(); + + ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("TextColor"); + ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.ПоясняющийОшибкуТекст.Значение; + ЭлементЦветаОформления.Использование = Истина; + + ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Роли.ЭтоНедоступнаяРоль"); + ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбораДанных.ПравоеЗначение = Истина; + ЭлементОтбораДанных.Использование = Истина; + + ЭлементОформляемогоПоля = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); + ЭлементОформляемогоПоля.Поле = Новый ПолеКомпоновкиДанных("Роли"); + ЭлементОформляемогоПоля.Использование = Истина; + + // Условное оформление несуществующих ролей. + ЭлементУсловногоОформления = Форма.УсловноеОформление.Элементы.Добавить(); + + ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("TextColor"); + ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет.Значение; + ЭлементЦветаОформления.Использование = Истина; + + ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Роли.ЭтоНесуществующаяРоль"); + ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбораДанных.ПравоеЗначение = Истина; + ЭлементОтбораДанных.Использование = Истина; + + ЭлементОформляемогоПоля = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); + ЭлементОформляемогоПоля.Поле = Новый ПолеКомпоновкиДанных("Роли"); + ЭлементОформляемогоПоля.Использование = Истина; + + НастроитьИнтерфейсРолейПриЧтенииНаСервере(Параметры); + +КонецПроцедуры + +Процедура НастроитьИнтерфейсРолейПриЧтенииНаСервере(Параметры) + + Форма = Параметры.Форма; + Элементы = Форма.Элементы; + // Установка начальных значений перед загрузкой данных из настроек на сервере // для случая, когда данные еще не были записаны и не загружаются. Форма.ПоказатьПодсистемыРолей = Ложь; @@ -6260,7 +6812,7 @@ Если ТолькоПросмотрРолей <> Неопределено Тогда - Элементы.Роли.ТолькоПросмотр = ТолькоПросмотрРолей; + Элементы.Роли.ТолькоПросмотр = ТолькоПросмотрРолей; Если Элементы.Найти("РолиУстановитьФлажки") <> Неопределено Тогда Элементы.РолиУстановитьФлажки.Доступность = НЕ ТолькоПросмотрРолей; @@ -6292,11 +6844,11 @@ Процедура ОбновитьДеревоРолей(Параметры) - Форма = Параметры.Форма; - Элементы = Форма.Элементы; - Роли = Форма.Роли; - ТипПользователей = Параметры.ТипПользователей; - КоллекцияРолей = Параметры.КоллекцияРолей; + Форма = Параметры.Форма; + Элементы = Форма.Элементы; + Роли = Форма.Роли; + КоллекцияРолей = Параметры.КоллекцияРолей; + НазначениеРолей = Параметры.НазначениеРолей; СкрытьРольПолныеПрава = Параметры.Свойство("СкрытьРольПолныеПрава") И Параметры.СкрытьРольПолныеПрава = Истина; @@ -6323,38 +6875,51 @@ Элементы.Роли.ТекущаяСтрока = Неопределено; ИначеЕсли ТекущиеДанные.ЭтоРоль Тогда - ТекущаяПодсистема = ?(ТекущиеДанные.ПолучитьРодителя() = Неопределено, "", ТекущиеДанные.ПолучитьРодителя().Имя); ТекущаяРоль = ТекущиеДанные.Имя; + ТекущаяПодсистема = ?(ТекущиеДанные.ПолучитьРодителя() = Неопределено, "", + ТекущиеДанные.ПолучитьРодителя().Имя); Иначе - ТекущаяПодсистема = ТекущиеДанные.Имя; ТекущаяРоль = ""; + ТекущаяПодсистема = ТекущиеДанные.Имя; КонецЕсли; КонецЕсли; ДеревоРолей = ПользователиСлужебныйПовтИсп.ДеревоРолей( - ПоказатьПодсистемыРолей, ТипПользователей).Скопировать(); + ПоказатьПодсистемыРолей, НазначениеРолей).Скопировать(); - ДобавитьИменаНесуществующихРолей(Параметры, ДеревоРолей); + ДеревоРолей.Колонки.Добавить("ЭтоНедоступнаяРоль", Новый ОписаниеТипов("Булево")); + ДеревоРолей.Колонки.Добавить("ЭтоНесуществующаяРоль", Новый ОписаниеТипов("Булево")); + ДобавитьИменаНесуществующихИНедоступныхРолей(Параметры, ДеревоРолей); ДеревоРолей.Колонки.Добавить("Пометка", Новый ОписаниеТипов("Булево")); ДеревоРолей.Колонки.Добавить("НомерКартинки", Новый ОписаниеТипов("Число")); - ПодготовитьДеревоРолей(ДеревоРолей.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли, Параметры.КоллекцияРолей); + ПодготовитьДеревоРолей(ДеревоРолей.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли, + Параметры.КоллекцияРолей); Параметры.Форма.ЗначениеВРеквизитФормы(ДеревоРолей, "Роли"); - Элементы.Роли.Отображение = ?(ДеревоРолей.Строки.Найти(Ложь, "ЭтоРоль") = Неопределено, ОтображениеТаблицы.Список, ОтображениеТаблицы.Дерево); + Элементы.Роли.Отображение = ?(ДеревоРолей.Строки.Найти(Ложь, "ЭтоРоль") = Неопределено, + ОтображениеТаблицы.Список, ОтображениеТаблицы.Дерево); // Восстановление текущей строки. - НайденныеСтроки = ДеревоРолей.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Ложь, ТекущаяПодсистема), Истина); + Отбор = Новый Структура("ЭтоРоль, Имя", Ложь, ТекущаяПодсистема); + НайденныеСтроки = ДеревоРолей.Строки.НайтиСтроки(Отбор, Истина); Если НайденныеСтроки.Количество() <> 0 Тогда ОписаниеПодсистемы = НайденныеСтроки[0]; - ИндексПодсистемы = ?(ОписаниеПодсистемы.Родитель = Неопределено, ДеревоРолей.Строки, ОписаниеПодсистемы.Родитель.Строки).Индекс(ОписаниеПодсистемы); - СтрокаПодсистемы = ДанныеФормыКоллекцияЭлементовДерева(Роли, ОписаниеПодсистемы).Получить(ИндексПодсистемы); + + ИндексПодсистемы = ?(ОписаниеПодсистемы.Родитель = Неопределено, + ДеревоРолей.Строки, ОписаниеПодсистемы.Родитель.Строки).Индекс(ОписаниеПодсистемы); + + СтрокаПодсистемы = ДанныеФормыКоллекцияЭлементовДерева(Роли, + ОписаниеПодсистемы).Получить(ИндексПодсистемы); + Если ЗначениеЗаполнено(ТекущаяРоль) Тогда - НайденныеСтроки = ОписаниеПодсистемы.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, ТекущаяРоль)); + Отбор = Новый Структура("ЭтоРоль, Имя", Истина, ТекущаяРоль); + НайденныеСтроки = ОписаниеПодсистемы.Строки.НайтиСтроки(Отбор); Если НайденныеСтроки.Количество() <> 0 Тогда ОписаниеРоли = НайденныеСтроки[0]; - Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьЭлементы().Получить(ОписаниеПодсистемы.Строки.Индекс(ОписаниеРоли)).ПолучитьИдентификатор(); + Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьЭлементы().Получить( + ОписаниеПодсистемы.Строки.Индекс(ОписаниеРоли)).ПолучитьИдентификатор(); Иначе Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьИдентификатор(); КонецЕсли; @@ -6362,10 +6927,14 @@ Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьИдентификатор(); КонецЕсли; Иначе - НайденныеСтроки = ДеревоРолей.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, ТекущаяРоль), Истина); + Отбор = Новый Структура("ЭтоРоль, Имя", Истина, ТекущаяРоль); + НайденныеСтроки = ДеревоРолей.Строки.НайтиСтроки(Отбор, Истина); Если НайденныеСтроки.Количество() <> 0 Тогда ОписаниеРоли = НайденныеСтроки[0]; - ИндексРоли = ?(ОписаниеРоли.Родитель = Неопределено, ДеревоРолей.Строки, ОписаниеРоли.Родитель.Строки).Индекс(ОписаниеРоли); + + ИндексРоли = ?(ОписаниеРоли.Родитель = Неопределено, + ДеревоРолей.Строки, ОписаниеРоли.Родитель.Строки).Индекс(ОписаниеРоли); + СтрокаРоли = ДанныеФормыКоллекцияЭлементовДерева(Роли, ОписаниеРоли).Получить(ИндексРоли); Элементы.Роли.ТекущаяСтрока = СтрокаРоли.ПолучитьИдентификатор(); КонецЕсли; @@ -6373,19 +6942,46 @@ КонецПроцедуры -Процедура ДобавитьИменаНесуществующихРолей(Параметры, ДеревоРолей) +Процедура ДобавитьИменаНесуществующихИНедоступныхРолей(Параметры, ДеревоРолей) КоллекцияРолей = Параметры.КоллекцияРолей; + ВсеРоли = ВсеРоли().Соответствие; + + НедоступныеРоли = Новый СписокЗначений; + НесуществующиеРоли = Новый СписокЗначений; // Добавление несуществующих ролей. Для каждого Строка Из КоллекцияРолей Цикл Отбор = Новый Структура("ЭтоРоль, Имя", Истина, Строка.Роль); - Если ДеревоРолей.Строки.НайтиСтроки(Отбор, Истина).Количество() = 0 Тогда - СтрокаДерева = ДеревоРолей.Строки.Вставить(0); - СтрокаДерева.ЭтоРоль = Истина; - СтрокаДерева.Имя = Строка.Роль; - СтрокаДерева.Синоним = "? " + Строка.Роль; + Если ДеревоРолей.Строки.НайтиСтроки(Отбор, Истина).Количество() > 0 Тогда + Продолжить; КонецЕсли; + Синоним = ВсеРоли.Получить(Строка.Роль); + Если Синоним = Неопределено Тогда + НесуществующиеРоли.Добавить(Строка.Роль, "? " + Строка.Роль); + Иначе + НедоступныеРоли.Добавить(Строка.Роль, Синоним); + КонецЕсли; + КонецЦикла; + + НедоступныеРоли.СортироватьПоПредставлению(); + Для Каждого ОписаниеРоли Из НедоступныеРоли Цикл + Индекс = НедоступныеРоли.Индекс(ОписаниеРоли); + СтрокаДерева = ДеревоРолей.Строки.Вставить(Индекс); + СтрокаДерева.Имя = ОписаниеРоли.Значение; + СтрокаДерева.Синоним = ОписаниеРоли.Представление; + СтрокаДерева.ЭтоРоль = Истина; + СтрокаДерева.ЭтоНедоступнаяРоль = Истина; + КонецЦикла; + + НесуществующиеРоли.СортироватьПоПредставлению(); + Для Каждого ОписаниеРоли Из НесуществующиеРоли Цикл + Индекс = НесуществующиеРоли.Индекс(ОписаниеРоли); + СтрокаДерева = ДеревоРолей.Строки.Вставить(Индекс); + СтрокаДерева.Имя = ОписаниеРоли.Значение; + СтрокаДерева.Синоним = ОписаниеРоли.Представление; + СтрокаДерева.ЭтоРоль = Истина; + СтрокаДерева.ЭтоНесуществующаяРоль = Истина; КонецЦикла; КонецПроцедуры @@ -6397,7 +6993,8 @@ Пока Индекс >= 0 Цикл Строка = Коллекция[Индекс]; - ПодготовитьДеревоРолей(Строка.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли, КоллекцияРолей); + ПодготовитьДеревоРолей(Строка.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли, + КоллекцияРолей); Если Строка.ЭтоРоль Тогда Если СкрытьРольПолныеПрава @@ -6433,8 +7030,12 @@ Если СтрокаДереваЗначений.Родитель = Неопределено Тогда ДанныеФормыКоллекцияЭлементовДерева = ДанныеФормыДерево.ПолучитьЭлементы(); Иначе - ИндексРодителя = ?(СтрокаДереваЗначений.Родитель.Родитель = Неопределено, СтрокаДереваЗначений.Владелец().Строки, СтрокаДереваЗначений.Родитель.Родитель.Строки).Индекс(СтрокаДереваЗначений.Родитель); - ДанныеФормыКоллекцияЭлементовДерева = ДанныеФормыКоллекцияЭлементовДерева(ДанныеФормыДерево, СтрокаДереваЗначений.Родитель).Получить(ИндексРодителя).ПолучитьЭлементы(); + ИндексРодителя = ?(СтрокаДереваЗначений.Родитель.Родитель = Неопределено, + СтрокаДереваЗначений.Владелец().Строки, СтрокаДереваЗначений.Родитель.Родитель.Строки).Индекс( + СтрокаДереваЗначений.Родитель); + + ДанныеФормыКоллекцияЭлементовДерева = ДанныеФормыКоллекцияЭлементовДерева(ДанныеФормыДерево, + СтрокаДереваЗначений.Родитель).Получить(ИндексРодителя).ПолучитьЭлементы(); КонецЕсли; Возврат ДанныеФормыКоллекцияЭлементовДерева; @@ -6445,10 +7046,10 @@ Роли = Параметры.Форма.Роли; ПоказатьТолькоВыбранныеРоли = Параметры.Форма.Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка; - ТипПользователей = Параметры.ТипПользователей; + НазначениеРолей = Параметры.НазначениеРолей; ВсеРоли = ВсеРоли().Массив; - НедоступныеРоли = НедоступныеРолиПоТипуПользователей(ТипПользователей); + НедоступныеРоли = ПользователиСлужебныйПовтИсп.НедоступныеРоли(НазначениеРолей); Если Параметры.ОсновнойПараметр = "ВключитьВсе" Тогда ИдентификаторСтроки = Неопределено; @@ -6466,19 +7067,28 @@ БылУстановленАдминистративныйДоступ = Параметры.КоллекцияРолей.НайтиСтроки( Новый Структура("Роль", "ПолныеПрава")).Количество() > 0; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + Иначе + МодульУправлениеДоступомСлужебный = Неопределено; + КонецЕсли; + // Обработка всех. КоллекцияРолей = Параметры.КоллекцияРолей; КоллекцияРолей.Очистить(); Если Добавить Тогда - Для каждого Роль Из ВсеРоли Цикл + Для Каждого ИмяРоли Из ВсеРоли Цикл - Если НедоступныеРоли.Получить(Роль) = Неопределено - И ВРег(Лев(Роль, СтрДлина("Удалить"))) <> ВРег("Удалить") - И Роль <> "ПолныеПрава" - И Роль <> "АдминистраторСистемы" Тогда + Если ИмяРоли = "ПолныеПрава" + Или ИмяРоли = "АдминистраторСистемы" + Или НедоступныеРоли.Получить(ИмяРоли) <> Неопределено + Или ВРег(Лев(ИмяРоли, СтрДлина("Удалить"))) = ВРег("Удалить") + Или МодульУправлениеДоступомСлужебный <> Неопределено + И МодульУправлениеДоступомСлужебный.ЭтоПрофильнаяРоль(ИмяРоли) Тогда - КоллекцияРолей.Добавить().Роль = Роль; + Продолжить; КонецЕсли; + КоллекцияРолей.Добавить().Роль = ИмяРоли; КонецЦикла; КонецЕсли; @@ -6489,7 +7099,9 @@ Новый Структура("Роль", "ПолныеПрава")).Количество() > 0; Если УстановленАдминистративныйДоступ И НЕ БылУстановленАдминистративныйДоступ Тогда - Параметры.КоллекцияРолей.НайтиСтроки(Новый Структура("Роль", "ПолныеПрава")).Удалить(0); + Отбор = Новый Структура("Роль", "ПолныеПрава"); + Параметры.КоллекцияРолей.НайтиСтроки(Отбор).Удалить(0); + ИначеЕсли БылУстановленАдминистративныйДоступ И НЕ УстановленАдминистративныйДоступ Тогда КоллекцияРолей.Добавить().Роль = "ПолныеПрава"; КонецЕсли; @@ -6501,9 +7113,8 @@ Иначе Роли.ПолучитьЭлементы().Очистить(); КонецЕсли; - // Возврат + Возврат; - // Возврат КонецЕсли; Иначе ТекущиеДанные = Роли.НайтиПоИдентификатору(ИдентификаторСтроки); @@ -6558,7 +7169,8 @@ Строка = Коллекция[Индекс]; Если Строка.ЭтоРоль Тогда - Строка.Пометка = Параметры.КоллекцияРолей.НайтиСтроки(Новый Структура("Роль", Строка.Имя)).Количество() > 0; + Отбор = Новый Структура("Роль", Строка.Имя); + Строка.Пометка = Параметры.КоллекцияРолей.НайтиСтроки(Отбор).Количество() > 0; Если ПоказатьТолькоВыбранныеРоли И НЕ Строка.Пометка Тогда Коллекция.Удалить(Индекс); КонецЕсли; diff --git a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl index 06cc0f6e6..4d4452b34 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйВМоделиСервиса/Module.bsl @@ -3,6 +3,106 @@ // /////////////////////////////////////////////////////////////////////////////////// +#Область ПрограммныйИнтерфейс + +// Только для внутреннего использования. +Процедура ОбновитьОписаниеWebСервисаМенеджераСервиса() Экспорт + + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + // Кэш должен быть заполнен до записи пользователя ИБ. + РаботаВМоделиСервиса.ПолучитьПроксиМенеджераСервиса(); + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +// Только для внутреннего использования. +Функция ЕстьПравоДобавленияПользователей() Экспорт + + УстановитьПривилегированныйРежим(Истина); + Прокси = РаботаВМоделиСервиса.ПолучитьПроксиМенеджераСервиса(); + УстановитьПривилегированныйРежим(Ложь); + + ОбластьДанных = Прокси.ФабрикаXDTO.Создать( + Прокси.ФабрикаXDTO.Тип("http://www.1c.ru/SaaS/ApplicationAccess", "Zone")); + ОбластьДанных.Zone = РаботаВМоделиСервиса.ЗначениеРазделителяСеанса(); + + ИнформацияОбОшибке = Неопределено; + ПраваДоступаXDTO = Прокси.GetAccessRights(ОбластьДанных, + ИдентификаторСервисаТекущегоПользователя(), ИнформацияОбОшибке); + ОбработатьИнформациюОбОшибкеWebСервиса(ИнформацияОбОшибке, "GetAccessRights"); // Имя операции не локализуется. + + Для каждого ЭлементСпискаПрав Из ПраваДоступаXDTO.Item Цикл + Если ЭлементСпискаПрав.AccessRight = "CreateUser" Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +// Только для внутреннего использования. +Функция ДействияСНовымПользователемСервиса() Экспорт + + ДействияСПользователемСервиса = НовыеДействияСПользователемСервиса(); + ДействияСПользователемСервиса.ИзменениеПароля = Истина; + ДействияСПользователемСервиса.ИзменениеИмени = Истина; + ДействияСПользователемСервиса.ИзменениеПолногоИмени = Истина; + ДействияСПользователемСервиса.ИзменениеДоступа = Истина; + ДействияСПользователемСервиса.ИзменениеАдминистративногоДоступа = Истина; + + ДействияСКИ = ДействияСПользователемСервиса.КонтактнаяИнформация; + Для каждого КлючИЗначение Из РаботаВМоделиСервисаПовтИсп.СоответствиеВидовКИПользователяXDTO() Цикл + ДействияСКИ[КлючИЗначение.Ключ].Изменение = Истина; + КонецЦикла; + + Возврат ДействияСПользователемСервиса; + +КонецФункции + +// Только для внутреннего использования. +Функция ДействияССуществующимПользователемСервиса(Знач Пользователь) Экспорт + + УстановитьПривилегированныйРежим(Истина); + Прокси = РаботаВМоделиСервиса.ПолучитьПроксиМенеджераСервиса(); + УстановитьПривилегированныйРежим(Ложь); + + ОбъектыДоступа = ПодготовитьОбъектыДоступаПользователя(Прокси.ФабрикаXDTO, Пользователь); + + ИнформацияОбОшибке = Неопределено; + ПраваДоступаОбъектовXDTO = Прокси.GetObjectsAccessRights(ОбъектыДоступа, + ИдентификаторСервисаТекущегоПользователя(), ИнформацияОбОшибке); + ОбработатьИнформациюОбОшибкеWebСервиса(ИнформацияОбОшибке, "GetObjectsAccessRights"); // Имя операции не локализуется. + + Возврат ПраваДоступаОбъектовXDTOВДействияСПользователемСервиса(Прокси.ФабрикаXDTO, ПраваДоступаОбъектовXDTO); + +КонецФункции + +// Только для внутреннего использования. +Функция ДействияСПользователемСервисаПриНедоступностиНастройкиПользователей() Экспорт + + ДействияСПользователемСервиса = НовыеДействияСПользователемСервиса(); + ДействияСПользователемСервиса.ИзменениеПароля = Ложь; + ДействияСПользователемСервиса.ИзменениеИмени = Ложь; + ДействияСПользователемСервиса.ИзменениеПолногоИмени = Ложь; + ДействияСПользователемСервиса.ИзменениеДоступа = Ложь; + ДействияСПользователемСервиса.ИзменениеАдминистративногоДоступа = Ложь; + + ДействияСКИ = ДействияСПользователемСервиса.КонтактнаяИнформация; + Для каждого КлючИЗначение Из РаботаВМоделиСервисаПовтИсп.СоответствиеВидовКИПользователяXDTO() Цикл + ДействияСКИ[КлючИЗначение.Ключ].Изменение = Ложь; + КонецЦикла; + + Возврат ДействияСПользователемСервиса; + +КонецФункции + +#КонецОбласти + #Область СлужебныйПрограммныйИнтерфейс // Возвращает флаг доступности действий изменения пользователей. @@ -127,7 +227,6 @@ ПользовательСервиса.Zone = РаботаВМоделиСервиса.ЗначениеРазделителяСеанса(); ПользовательСервиса.UserServiceID = ПользовательОбъект.ИдентификаторПользователяСервиса; ПользовательСервиса.FullName = ПользовательОбъект.Наименование; - ПользовательСервиса.FullName = ПользовательОбъект.Наименование; ПользовательСервиса.Name = ПользовательИБ.Имя; ПользовательСервиса.StoredPasswordValue = ПользовательИБ.СохраняемоеЗначениеПароля; ПользовательСервиса.Language = ПолучитьКодЯзыка(ПользовательИБ.Язык); @@ -319,20 +418,6 @@ #Область СлужебныеПроцедурыИФункции -// Только для внутреннего использования. -Процедура ОбновитьОписаниеWebСервисаМенеджераСервиса() Экспорт - - Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Возврат; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - // Кэш должен быть заполнен до записи пользователя ИБ. - РаботаВМоделиСервиса.ПолучитьПроксиМенеджераСервиса(); - УстановитьПривилегированныйРежим(Ложь); - -КонецПроцедуры - // Для процедуры ПриЗавершенииОбработкиПользователяИБ. Процедура ОбновитьПользователяСервиса(ПользовательОбъект, СоздатьПользователяСервиса) @@ -350,88 +435,6 @@ КонецПроцедуры -// Только для внутреннего использования. -Функция ЕстьПравоДобавленияПользователей() Экспорт - - УстановитьПривилегированныйРежим(Истина); - Прокси = РаботаВМоделиСервиса.ПолучитьПроксиМенеджераСервиса(); - УстановитьПривилегированныйРежим(Ложь); - - ОбластьДанных = Прокси.ФабрикаXDTO.Создать( - Прокси.ФабрикаXDTO.Тип("http://www.1c.ru/SaaS/ApplicationAccess", "Zone")); - ОбластьДанных.Zone = РаботаВМоделиСервиса.ЗначениеРазделителяСеанса(); - - ИнформацияОбОшибке = Неопределено; - ПраваДоступаXDTO = Прокси.GetAccessRights(ОбластьДанных, - ИдентификаторСервисаТекущегоПользователя(), ИнформацияОбОшибке); - ОбработатьИнформациюОбОшибкеWebСервиса(ИнформацияОбОшибке, "GetAccessRights"); // Имя операции не локализуется. - - Для каждого ЭлементСпискаПрав Из ПраваДоступаXDTO.Item Цикл - Если ЭлементСпискаПрав.AccessRight = "CreateUser" Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - - Возврат Ложь; - -КонецФункции - -// Только для внутреннего использования. -Функция ДействияСНовымПользователемСервиса() Экспорт - - ДействияСПользователемСервиса = НовыеДействияСПользователемСервиса(); - ДействияСПользователемСервиса.ИзменениеПароля = Истина; - ДействияСПользователемСервиса.ИзменениеИмени = Истина; - ДействияСПользователемСервиса.ИзменениеПолногоИмени = Истина; - ДействияСПользователемСервиса.ИзменениеДоступа = Истина; - ДействияСПользователемСервиса.ИзменениеАдминистративногоДоступа = Истина; - - ДействияСКИ = ДействияСПользователемСервиса.КонтактнаяИнформация; - Для каждого КлючИЗначение Из РаботаВМоделиСервисаПовтИсп.СоответствиеВидовКИПользователяXDTO() Цикл - ДействияСКИ[КлючИЗначение.Ключ].Изменение = Истина; - КонецЦикла; - - Возврат ДействияСПользователемСервиса; - -КонецФункции - -// Только для внутреннего использования. -Функция ДействияССуществующимПользователемСервиса(Знач Пользователь) Экспорт - - УстановитьПривилегированныйРежим(Истина); - Прокси = РаботаВМоделиСервиса.ПолучитьПроксиМенеджераСервиса(); - УстановитьПривилегированныйРежим(Ложь); - - ОбъектыДоступа = ПодготовитьОбъектыДоступаПользователя(Прокси.ФабрикаXDTO, Пользователь); - - ИнформацияОбОшибке = Неопределено; - ПраваДоступаОбъектовXDTO = Прокси.GetObjectsAccessRights(ОбъектыДоступа, - ИдентификаторСервисаТекущегоПользователя(), ИнформацияОбОшибке); - ОбработатьИнформациюОбОшибкеWebСервиса(ИнформацияОбОшибке, "GetObjectsAccessRights"); // Имя операции не локализуется. - - Возврат ПраваДоступаОбъектовXDTOВДействияСПользователемСервиса(Прокси.ФабрикаXDTO, ПраваДоступаОбъектовXDTO); - -КонецФункции - -// Только для внутреннего использования. -Функция ДействияСПользователемСервисаПриНедоступностиНастройкиПользователей() Экспорт - - ДействияСПользователемСервиса = НовыеДействияСПользователемСервиса(); - ДействияСПользователемСервиса.ИзменениеПароля = Ложь; - ДействияСПользователемСервиса.ИзменениеИмени = Ложь; - ДействияСПользователемСервиса.ИзменениеПолногоИмени = Ложь; - ДействияСПользователемСервиса.ИзменениеДоступа = Ложь; - ДействияСПользователемСервиса.ИзменениеАдминистративногоДоступа = Ложь; - - ДействияСКИ = ДействияСПользователемСервиса.КонтактнаяИнформация; - Для каждого КлючИЗначение Из РаботаВМоделиСервисаПовтИсп.СоответствиеВидовКИПользователяXDTO() Цикл - ДействияСКИ[КлючИЗначение.Ключ].Изменение = Ложь; - КонецЦикла; - - Возврат ДействияСПользователемСервиса; - -КонецФункции - // Только для внутреннего использования. Функция ПолучитьПользователейСервиса(ПарольПользователяСервиса) Экспорт diff --git a/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl index 19be000ff..2c1f1bb33 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl @@ -6,9 +6,14 @@ #Область СлужебныйПрограммныйИнтерфейс // Открывает форму, в которой пользователь может сменить пароль. -Процедура ОткрытьФормуСменыПароля(Пользователь = Неопределено, ОбработкаПродолжения = Неопределено) Экспорт +Процедура ОткрытьФормуСменыПароля(Пользователь = Неопределено, ОбработкаПродолжения = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ВернутьПарольБезУстановки", Ложь); + ПараметрыФормы.Вставить("СтарыйПароль", Неопределено); + Если ДополнительныеПараметры <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(ПараметрыФормы, ДополнительныеПараметры); + КонецЕсли; ПараметрыФормы.Вставить("Пользователь", Пользователь); ОткрытьФорму("ОбщаяФорма.СменаПароля", ПараметрыФормы,,,,, ОбработкаПродолжения); @@ -62,12 +67,53 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов из других подсистем. +// Вызывается перед интерактивным началом работы пользователя с областью данных. +// Соответствует событию ПередНачаломРаботыСистемы модулей приложения. +// +Процедура ПередНачаломРаботыСистемы(Параметры) Экспорт + + ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + + Если ПараметрыКлиента.Свойство("ОшибкаНедостаточноПравДляВходаВПрограмму") Тогда + Параметры.ПолученныеПараметрыКлиента.Вставить("ОшибкаНедостаточноПравДляВходаВПрограмму"); + Параметры.Отказ = Истина; + Параметры.ИнтерактивнаяОбработка = Новый ОписаниеОповещения( + "ИнтерактивнаяОбработкаПриОшибкеНедостаточноПравДляВходаВПрограмму", + ЭтотОбъект, + ПараметрыКлиента.ОшибкаНедостаточноПравДляВходаВПрограмму); + КонецЕсли; + +КонецПроцедуры + +// Выполняется при интерактивном начале работы пользователя с областью данных или в локальном режиме. +// Вызывается после завершения действий ПриНачалеРаботыСистемы. +// Используется для подключения обработчиков ожидания, которые не должны вызываться +// в случае интерактивных действий перед и при начале работы системы. +// +// Начальная страница (рабочий стол) в этот момент еще не открыта, поэтому запрещено открывать +// формы напрямую, а следует использовать для этих целей обработчик ожидания. +// Запрещено использовать это событие для интерактивного взаимодействия с пользователем +// (ПоказатьВопрос и аналогичные действия). Для этих целей следует использовать +// событие ПриНачалеРаботыСистемы, который поддерживает продолжение своего выполнения. +// +Процедура ПослеНачалаРаботыСистемы() Экспорт + + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Ключ = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыРаботыКлиента, "КлючПредупрежденияБезопасности"); + Если ЗначениеЗаполнено(Ключ) Тогда + // Небольшая задержка чтобы платформа успела отрисовать текущее окно, поверх которого выводится окно предупреждения. + ПодключитьОбработчикОжидания("ПоказатьПредупреждениеБезопасностиПослеЗапуска", 0.3, Истина); + КонецЕсли; + +КонецПроцедуры + // Проверяет авторизацию пользователя и уведомляет об ошибке. Процедура ПередНачаломРаботыСистемыДоАвторизации(Параметры) Экспорт ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); Если ПараметрыКлиента.Свойство("ОшибкаАвторизации") Тогда + Параметры.ПолученныеПараметрыКлиента.Вставить("ОшибкаАвторизации"); Параметры.Отказ = Истина; Параметры.ИнтерактивнаяОбработка = Новый ОписаниеОповещения( "ИнтерактивнаяОбработкаПриОшибкеАвторизации", ЭтотОбъект); @@ -101,6 +147,20 @@ КонецПроцедуры +/////////////////////////////////////////////////////////////////////////////// +// Обработчики ожидания. + +// Открывает окно предупреждения безопасности. +Процедура ПоказатьПредупреждениеБезопасности() Экспорт + + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Ключ = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыРаботыКлиента, "КлючПредупрежденияБезопасности"); + Если ЗначениеЗаполнено(Ключ) Тогда + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", Новый Структура("Ключ", Ключ)); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -108,21 +168,30 @@ /////////////////////////////////////////////////////////////////////////////// // Обработчики оповещений. +// Предупреждает пользователя об ошибке недостатка прав для входа в программу. +Процедура ИнтерактивнаяОбработкаПриОшибкеНедостаточноПравДляВходаВПрограмму(Параметры, ОписаниеОшибки) Экспорт + + ПоказатьПредупреждение( + Новый ОписаниеОповещения("ИнтерактивнаяОбработкаПриОшибкеНедостаточноПравДляВходаВПрограммуПослеПредупреждения", + ЭтотОбъект, Параметры), + ОписаниеОшибки); + +КонецПроцедуры + +// Завершает работу после предупреждения пользователя об ошибке недостатка прав для входа в программу. +Процедура ИнтерактивнаяОбработкаПриОшибкеНедостаточноПравДляВходаВПрограммуПослеПредупреждения(Параметры) Экспорт + + ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения); + +КонецПроцедуры + // Предупреждает пользователя об ошибке авторизации. Процедура ИнтерактивнаяОбработкаПриОшибкеАвторизации(Параметры, Неопределен) Экспорт ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); - ПоказатьПредупреждение(Новый ОписаниеОповещения( - "ИнтерактивнаяОбработкаПриОшибкеАвторизацииПослеПредупреждения", ЭтотОбъект, Параметры), - ПараметрыКлиента.ОшибкаАвторизации); - -КонецПроцедуры - -// Завершает работу после предупреждения пользователя об ошибке авторизации. -Процедура ИнтерактивнаяОбработкаПриОшибкеАвторизацииПослеПредупреждения(Параметры) Экспорт - - ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения); + СтандартныеПодсистемыКлиент.ПоказатьПредупреждениеИПродолжить( + Параметры, ПараметрыКлиента.ОшибкаАвторизации); КонецПроцедуры @@ -156,7 +225,7 @@ КонецЕсли; Если Не ДополнительныеПараметры.ЭтоОтбор Тогда - Назначение =ДополнительныеПараметры.ДанныеФормы.Объект.Назначение; + Назначение = ДополнительныеПараметры.ДанныеФормы.Объект.Назначение; Назначение.Очистить(); КонецЕсли; diff --git a/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl index d1bffbe0a..f088014d0 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl @@ -100,7 +100,7 @@ ИначеЕсли ЗначениеЗаполнено(Форма.СрокДействия) Тогда ЗаголовокСОграничением = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Вход в программу разрешен (до %1)'"), - Формат(Форма.СрокДействия, "ДФ=dd.MM.yyyy")); + Формат(Форма.СрокДействия, "ДЛФ=D")); ИначеЕсли ЗначениеЗаполнено(Форма.ПросрочкаРаботыВПрограммеДоЗапрещенияВхода) Тогда ЗаголовокСОграничением = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( diff --git a/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl index 8fa4933a7..d37e1b76b 100644 --- a/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl @@ -15,12 +15,12 @@ СтандартныеПодсистемыСервер.ПроверитьОбновлениеПараметровРаботыПрограммы( "ПараметрыРаботыПользователей", - "НедоступныеРолиПоТипамПользователей, + "НазначениеРолей, |ВсеРоли"); ПредставлениеПараметра = ""; - Если НЕ СохраненныеПараметры.Свойство("НедоступныеРолиПоТипамПользователей") Тогда + Если НЕ СохраненныеПараметры.Свойство("НазначениеРолей") Тогда ПредставлениеПараметра = НСтр("ru = 'Недоступные роли'"); ИначеЕсли НЕ СохраненныеПараметры.Свойство("ВсеРоли") Тогда @@ -40,6 +40,90 @@ КонецФункции +// Возвращает роли, недоступные для указанного назначения (с учетом или без учета модели сервиса). +// +// Параметры: +// Назначение - Строка - "ДляАдминистраторов", "ДляПользователей", "ДляВнешнихПользователей", +// "СовместноДляПользователейИВнешнихПользователей". +// +// Сервис - Неопределено - определить текущий режим автоматически. +// - Булево - Ложь - для локального режима (недоступные роли только для назначения), +// Истина - для модели сервиса (включая роли неразделенных пользователей). +// +// Возвращаемое значение: +// Соответствие - со свойствами: +// * Ключ - Строка - имя роли. +// * Значение - Булево - Истина. +// +Функция НедоступныеРоли(Назначение = "ДляПользователей", Сервис = Неопределено) Экспорт + + ПроверитьНазначение(Назначение, + НСтр("ru = 'Ошибка в функции НедоступныеРоли общего модуля ПользователиСлужебныйПовтИсп.'")); + + Если Сервис = Неопределено Тогда + Сервис = ОбщегоНазначенияПовтИсп.РазделениеВключено(); + КонецЕсли; + + НазначениеРолей = ПользователиСлужебныйПовтИсп.Параметры().НазначениеРолей; + НедоступныеРоли = Новый Соответствие; + + Для Каждого Роль Из Метаданные.Роли Цикл + Если Назначение <> "ДляАдминистраторов" + И НазначениеРолей.ТолькоДляАдминистраторовСистемы.Получить(Роль.Имя) <> Неопределено + // Для внешних пользователей. + Или Назначение = "ДляВнешнихПользователей" + И НазначениеРолей.ТолькоДляВнешнихПользователей.Получить(Роль.Имя) = Неопределено + И НазначениеРолей.СовместноДляПользователейИВнешнихПользователей.Получить(Роль.Имя) = Неопределено + // Для пользователей. + Или (Назначение = "ДляПользователей" Или Назначение = "ДляАдминистраторов") + И НазначениеРолей.ТолькоДляВнешнихПользователей.Получить(Роль.Имя) <> Неопределено + // Совместно для пользователей и внешних пользователей. + Или Назначение = "СовместноДляПользователейИВнешнихПользователей" + И Не НазначениеРолей.СовместноДляПользователейИВнешнихПользователей.Получить(Роль.Имя) <> Неопределено + // С учетом модели сервиса. + Или Сервис + И НазначениеРолей.ТолькоДляПользователейСистемы.Получить(Роль.Имя) <> Неопределено Тогда + + НедоступныеРоли.Вставить(Роль.Имя, Истина); + КонецЕсли; + КонецЦикла; + + Возврат НедоступныеРоли; + +КонецФункции + +// См. комментарий к одноименной процедуре в модуле ПользователиКлиентСервер. +Функция ЭтоСеансВнешнегоПользователя() Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() Тогда + // Неразделенные пользователи не могут быть внешними. + Возврат Ложь; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + ПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь(); + ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор; + + Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено, ИдентификаторПользователяИБ); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ИдентификаторПользователяИБ", ИдентификаторПользователяИБ); + + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | Справочник.ВнешниеПользователи КАК ВнешниеПользователи + |ГДЕ + | ВнешниеПользователи.ИдентификаторПользователяИБ = &ИдентификаторПользователяИБ"; + + // Пользователь, который не найден в справочнике ВнешниеПользователи не может быть внешним. + Возврат Не Запрос.Выполнить().Пустой(); + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -100,10 +184,12 @@ КонецФункции // Возвращает дерево ролей с подсистемами или без них. -// Если роль не принадлежит ни одной подсистеме она добавляется "в корень". +// Если роль не принадлежит ни одной подсистеме она добавляется "в корень". // // Параметры: // ПоПодсистемам - Булево, если Ложь, все роли добавляются в "корень". +// Назначение - Строка - "ДляАдминистраторов", "ДляПользователей", "ДляВнешнихПользователей", +// "СовместноДляПользователейИВнешнихПользователей". // // Возвращаемое значение: // ДеревоЗначений с колонками: @@ -111,13 +197,12 @@ // Имя - Строка - имя роли или подсистемы. // Синоним - Строка - синоним роли или подсистемы. // -Функция ДеревоРолей(ПоПодсистемам = Истина, Знач ТипПользователей = Неопределено) Экспорт +Функция ДеревоРолей(ПоПодсистемам = Истина, Назначение = "ДляПользователей") Экспорт - Если ТипПользователей = Неопределено Тогда - ТипПользователей = ?(ОбщегоНазначенияПовтИсп.РазделениеВключено(), - Перечисления.ТипыПользователей.ПользовательОбластиДанных, - Перечисления.ТипыПользователей.ПользовательЛокальногоРешения); - КонецЕсли; + ПроверитьНазначение(Назначение, + НСтр("ru = 'Ошибка в функции ДеревоРолей общего модуля ПользователиСлужебныйПовтИсп.'")); + + НедоступныеРоли = ПользователиСлужебныйПовтИсп.НедоступныеРоли(Назначение); Дерево = Новый ДеревоЗначений; Дерево.Колонки.Добавить("ЭтоРоль", Новый ОписаниеТипов("Булево")); @@ -125,22 +210,28 @@ Дерево.Колонки.Добавить("Синоним", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(1000))); Если ПоПодсистемам Тогда - ЗаполнитьПодсистемыИРоли(Дерево.Строки, , ТипПользователей); + ЗаполнитьПодсистемыИРоли(Дерево.Строки, , НедоступныеРоли); КонецЕсли; - НедоступныеРоли = ПользователиСлужебный.НедоступныеРолиПоТипуПользователей(ТипПользователей); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда + МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); + Иначе + МодульУправлениеДоступомСлужебный = Неопределено; + КонецЕсли; // Добавление ненайденных ролей. - Для каждого Роль Из Метаданные.Роли Цикл + Для Каждого Роль Из Метаданные.Роли Цикл Если НедоступныеРоли.Получить(Роль.Имя) <> Неопределено - ИЛИ ВРег(Лев(Роль.Имя, СтрДлина("Удалить"))) = ВРег("Удалить") - ИЛИ ВРег(Лев(Роль.Имя, СтрДлина("Профиль"))) = ВРег("Профиль") Тогда + Или ВРег(Лев(Роль.Имя, СтрДлина("Удалить"))) = ВРег("Удалить") + Или МодульУправлениеДоступомСлужебный <> Неопределено + И МодульУправлениеДоступомСлужебный.ЭтоПрофильнаяРоль(Роль.Имя) Тогда Продолжить; КонецЕсли; - Если Дерево.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, Роль.Имя), Истина).Количество() = 0 Тогда + Отбор = Новый Структура("ЭтоРоль, Имя", Истина, Роль.Имя); + Если Дерево.Строки.НайтиСтроки(Отбор, Истина).Количество() = 0 Тогда СтрокаДерева = Дерево.Строки.Добавить(); СтрокаДерева.ЭтоРоль = Истина; СтрокаДерева.Имя = Роль.Имя; @@ -157,9 +248,7 @@ //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. -Процедура ЗаполнитьПодсистемыИРоли(КоллекцияСтрокДерева, Подсистемы, ТипПользователей, ВсеРоли = Неопределено) - - НедоступныеРоли = ПользователиСлужебный.НедоступныеРолиПоТипуПользователей(ТипПользователей); +Процедура ЗаполнитьПодсистемыИРоли(КоллекцияСтрокДерева, Подсистемы, НедоступныеРоли, ВсеРоли = Неопределено) Если Подсистемы = Неопределено Тогда Подсистемы = Метаданные.Подсистемы; @@ -178,13 +267,13 @@ КонецЦикла; КонецЕсли; - Для каждого Подсистема Из Подсистемы Цикл + Для Каждого Подсистема Из Подсистемы Цикл ОписаниеПодсистемы = КоллекцияСтрокДерева.Добавить(); - ОписаниеПодсистемы.Имя = Подсистема.Имя; - ОписаниеПодсистемы.Синоним = ?(ЗначениеЗаполнено(Подсистема.Синоним), Подсистема.Синоним, Подсистема.Имя); + ОписаниеПодсистемы.Имя = Подсистема.Имя; + ОписаниеПодсистемы.Синоним = ?(ЗначениеЗаполнено(Подсистема.Синоним), Подсистема.Синоним, Подсистема.Имя); - ЗаполнитьПодсистемыИРоли(ОписаниеПодсистемы.Строки, Подсистема.Подсистемы, ТипПользователей, ВсеРоли); + ЗаполнитьПодсистемыИРоли(ОписаниеПодсистемы.Строки, Подсистема.Подсистемы, НедоступныеРоли, ВсеРоли); Для Каждого ОбъектМетаданных Из Подсистема.Состав Цикл Если ВсеРоли[ОбъектМетаданных] = Неопределено Тогда @@ -197,11 +286,32 @@ ОписаниеРоли.Синоним = ?(ЗначениеЗаполнено(Роль.Синоним), Роль.Синоним, Роль.Имя); КонецЦикла; - Если ОписаниеПодсистемы.Строки.НайтиСтроки(Новый Структура("ЭтоРоль", Истина), Истина).Количество() = 0 Тогда + Отбор = Новый Структура("ЭтоРоль", Истина); + Если ОписаниеПодсистемы.Строки.НайтиСтроки(Отбор, Истина).Количество() = 0 Тогда КоллекцияСтрокДерева.Удалить(ОписаниеПодсистемы); КонецЕсли; КонецЦикла; КонецПроцедуры +Процедура ПроверитьНазначение(Назначение, ЗаголовокОшибки) + + Если Назначение <> "ДляАдминистраторов" + И Назначение <> "ДляПользователей" + И Назначение <> "ДляВнешнихПользователей" + И Назначение <> "СовместноДляПользователейИВнешнихПользователей" Тогда + + ВызватьИсключение ЗаголовокОшибки + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Параметр Назначение ""%1"" указан некорректно. + | + |Допустимы только следующие значения: + |- ""ДляАдминистраторов"", + |- ""ДляПользователей"", + |- ""ДляВнешнихПользователей"", + |- ""СовместноДляПользователейИВнешнихПользователей"".'"), + Назначение); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl b/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl index 4945f44bd..bff582f89 100644 --- a/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl +++ b/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl @@ -179,22 +179,47 @@ Данные.Записать(); Если ПутьКСтаромуФайлу <> Неопределено Тогда - УдалитьФайлы(ПутьКСтаромуФайлу); + + ФайлВременный = Новый Файл(ПутьКСтаромуФайлу); + Если ФайлВременный.Существует() Тогда + + Попытка + ФайлВременный.УстановитьТолькоЧтение(Ложь); + УдалитьФайлы(ПутьКСтаромуФайлу); + Исключение + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Поставляемые данные.Удаление файлов в томе'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + ИнформацияОбОшибке()); + КонецПопытки; + + КонецЕсли; + + КонецЕсли; + + Если ИсходнаяОбластьДанных <> Неопределено Тогда + + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ИсходнаяОбластьДанных); + КонецЕсли; ЗафиксироватьТранзакцию(); - Если ИсходнаяОбластьДанных <> Неопределено Тогда - ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ИсходнаяОбластьДанных); - КонецЕсли; Исключение + ОтменитьТранзакцию(); Если ИсходнаяОбластьДанных <> Неопределено Тогда + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ИсходнаяОбластьДанных); + КонецЕсли; ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -651,7 +676,7 @@ // ИЗ Характеристики // ГДЕ (ИмяХарактеристики = '' И ЗначениеХарактеристики = '') ИЛИ ..(N) // СГРУППИРОВАТЬ ПО ДанныеИд -// ИМЕЮЩИЕ Количество(*) = N +// ИМЕЮЩИЕ Количество(*) = N. Запрос = Новый Запрос(); Запрос.Текст = "ВЫБРАТЬ diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl index 20f525e12..7aa541fd5 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl @@ -18,10 +18,8 @@ ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайла", "ПрисоединенныйФайл", ПрисоединенныйФайл, Метаданные.РегистрыСведений.ПрисоединенныеФайлы.Измерения.ПрисоединенныйФайл.Тип); - ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); - ОбщегоНазначенияКлиентСервер.Проверить(ФайлОбъект <> Неопределено, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не найден присоединенный файл ""%1"" (%2)'"), - Строка(ПрисоединенныйФайл), ПрисоединенныйФайл.Метаданные())); + ФайлОбъект = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ПрисоединенныйФайл, + "ТипХраненияФайла,ВладелецФайла,Наименование,Расширение,Том,ПутьКФайлу"); УстановитьПривилегированныйРежим(Истина); @@ -41,29 +39,29 @@ Если Выборка.Следующий() Тогда Возврат Выборка.ХранимыйФайл.Получить(); - Иначе - // Запись в журнал регистрации. - СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Двоичные данные файла отсутствуют в регистре ПрисоединенныеФайлы - | - |Ссылка на файл: ""%1"".'"), - ПолучитьНавигационнуюСсылку(ПрисоединенныйФайл)); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Открытие файла'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - Метаданные.Справочники[ПрисоединенныйФайл.Метаданные().Имя], - ПрисоединенныйФайл, - СообщениеОбОшибке); - - ПредставлениеВладельцаФайла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Присоединен к %1 : %2'"), - Строка(ТипЗнч(ФайлОбъект.ВладелецФайла)), - ФайлОбъект.ВладелецФайла); - - ВызватьИсключение ФайловыеФункцииСлужебныйКлиентСервер.ОшибкаФайлНеНайденВХранилищеФайлов( - ФайлОбъект.Наименование + "." + ФайлОбъект.Расширение, - Ложь, - ПредставлениеВладельцаФайла); КонецЕсли; + + // Запись в журнал регистрации. + СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Двоичные данные файла отсутствуют в регистре ПрисоединенныеФайлы + | + |Ссылка на файл: ""%1"".'"), + ПолучитьНавигационнуюСсылку(ПрисоединенныйФайл)); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Открытие файла'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.Справочники[ПрисоединенныйФайл.Метаданные().Имя], + ПрисоединенныйФайл, + СообщениеОбОшибке); + + ПредставлениеВладельцаФайла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Присоединен к %1 : %2'"), + Строка(ТипЗнч(ФайлОбъект.ВладелецФайла)), + ФайлОбъект.ВладелецФайла); + + ВызватьИсключение ФайловыеФункцииСлужебныйКлиентСервер.ОшибкаФайлНеНайденВХранилищеФайлов( + ФайлОбъект.Наименование + "." + ФайлОбъект.Расширение, + Ложь, + ПредставлениеВладельцаФайла); Иначе ПолныйПуть = ФайловыеФункцииСлужебный.ПолныйПутьТома(ФайлОбъект.Том) + ФайлОбъект.ПутьКФайлу; @@ -207,6 +205,165 @@ КонецПроцедуры +// Создает объект в справочнике для хранения файла и заполняет его реквизиты переданными свойствами. +// +// Параметры: +// ПараметрыФайла - Структура - Параметры с данными файла. +// * Автор - Ссылка - пользователь, создавший файл. +// * ВладелецФайлов - Ссылка - объект, к которому добавляется файл. +// * ИмяБезРасширения - Строка - имя файла без расширения. +// * РасширениеБезТочки - Строка - расширение файла (без точки вначале). +// * ВремяИзмененияУниверсальное - Дата - дата и время изменения файла (UTC+0:00), +// если не указана, тогда используется ТекущаяУниверсальнаяДата(). +// АдресФайлаВоВременномХранилище - Строка - адрес, указывающий на двоичные данные во временном хранилище. +// АдресВременногоХранилищаТекста - Строка - адрес, указывающий на извлеченный текст из файла во временном хранилище. +// Описание - Строка - текстовое описание файла. +// +// НоваяСсылкаНаФайл - Неопределено - создать новую ссылку на файл в стандартном справочнике +// или в нестандартном, но единственном справочнике. Когда у владельца файла несколько +// справочников, требуется обязательно передать ссылку, иначе будет вызвано +// исключение. +// - Ссылка - ссылка на элемент справочника хранения файлов, +// которую следует использовать для добавляемого файла. +// Должна соответствовать одному из типов справочников хранения файлов владельца +// файлов. +// Возвращаемое значение: +// СправочникСсылка - ссылка на созданный присоединенный файл. +// +Функция ДобавитьПрисоединенныйФайл(ПараметрыФайла, + Знач АдресФайлаВоВременномХранилище, + Знач АдресВременногоХранилищаТекста = "", + Знач Описание = "", + Знач НоваяСсылкаНаФайл = Неопределено) Экспорт + + Автор = ПараметрыФайла.Автор; + ВладелецФайлов = ПараметрыФайла.ВладелецФайлов; + ИмяБезРасширения = ПараметрыФайла.ИмяБезРасширения; + РасширениеБезТочки = ПараметрыФайла.РасширениеБезТочки; + ВремяИзмененияУниверсальное = ПараметрыФайла.ВремяИзмененияУниверсальное; + + Если РасширениеБезТочки = Неопределено Тогда + ЧастиИмениФайла = СтрРазделить(ИмяБезРасширения, ".", Ложь); + Если ЧастиИмениФайла.Количество() > 1 Тогда + РасширениеБезТочки = ЧастиИмениФайла[ЧастиИмениФайла.Количество()-1]; + ИмяБезРасширения = Лев(ИмяБезРасширения, СтрДлина(ИмяБезРасширения) - (СтрДлина(РасширениеБезТочки)+1)); + КонецЕсли; + КонецЕсли; + + Если Не ЗначениеЗаполнено(ВремяИзмененияУниверсальное) + Или ВремяИзмененияУниверсальное > ТекущаяУниверсальнаяДата() Тогда + ВремяИзмененияУниверсальное = ТекущаяУниверсальнаяДата(); + КонецЕсли; + + ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайлаВоВременномХранилище); + + ЗаголовокОшибки = НСтр("ru = 'Ошибка при добавлении присоединенного файла.'"); + + Если НоваяСсылкаНаФайл = Неопределено Тогда + ИмяСправочника = ПрисоединенныеФайлыСлужебный.ИмяСправочникаХраненияФайлов(ВладелецФайлов, "", ЗаголовокОшибки, + НСтр("ru = 'В этом случае параметр ""НоваяСсылкаНаФайл"" должен быть указан.'")); + + НоваяСсылкаНаФайл = Справочники[ИмяСправочника].ПолучитьСсылку(); + Иначе + Если Не Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(НоваяСсылкаНаФайл)) + Или Не ЗначениеЗаполнено(НоваяСсылкаНаФайл) Тогда + + ВызватьИсключение НСтр("ru = 'Ошибка при добавлении присоединенного файла. + |Ссылка на новый файл не заполнена.'"); + КонецЕсли; + + ИмяСправочника = ПрисоединенныеФайлыСлужебный.ИмяСправочникаХраненияФайлов( + ВладелецФайлов, НоваяСсылкаНаФайл.Метаданные().Имя, ЗаголовокОшибки); + КонецЕсли; + + ПрисоединенныйФайл = Справочники[ИмяСправочника].СоздатьЭлемент(); + ПрисоединенныйФайл.УстановитьСсылкуНового(НоваяСсылкаНаФайл); + + ПрисоединенныйФайл.ВладелецФайла = ВладелецФайлов; + ПрисоединенныйФайл.ДатаМодификацииУниверсальная = ВремяИзмененияУниверсальное; + ПрисоединенныйФайл.ДатаСоздания = ТекущаяДатаСеанса(); + ПрисоединенныйФайл.Описание = Описание; + ПрисоединенныйФайл.ПодписанЭП = Ложь; + ПрисоединенныйФайл.Наименование = ИмяБезРасширения; + ПрисоединенныйФайл.Расширение = РасширениеБезТочки; + ПрисоединенныйФайл.ТипХраненияФайла = ФайловыеФункцииСлужебный.ТипХраненияФайлов(); + ПрисоединенныйФайл.Размер = ДвоичныеДанные.Размер(); + + СвояТранзакцияОткрыта = Ложь; + + Попытка + Если ПрисоединенныйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + НачатьТранзакцию(); + СвояТранзакцияОткрыта = Истина; + ПрисоединенныеФайлыСлужебный.ЗаписатьФайлВИнформационнуюБазу(НоваяСсылкаНаФайл, ДвоичныеДанные); + ПрисоединенныйФайл.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); + ПрисоединенныйФайл.ПутьКФайлу = ""; + Иначе + // Добавление в один из томов (где есть свободное место). + СведенияОФайле = ФайловыеФункцииСлужебный.ДобавитьФайлВТом(ДвоичныеДанные, ВремяИзмененияУниверсальное, + ИмяБезРасширения, РасширениеБезТочки, , ПрисоединенныйФайл.Зашифрован); + ПрисоединенныйФайл.Том = СведенияОФайле.Том; + ПрисоединенныйФайл.ПутьКФайлу = СведенияОФайле.ПутьКФайлу; + КонецЕсли; + + СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; + ИзвлеченныйТекст = ""; + + Если ЭтоАдресВременногоХранилища(АдресВременногоХранилищаТекста) Тогда + ИзвлеченныйТекст = ФайловыеФункцииСлужебный.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); + СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; + + ИначеЕсли НЕ ФайловыеФункцииСлужебный.ИзвлекатьТекстыФайловНаСервере() Тогда + // Тексты извлекаются сразу, а не в фоновом задании. + СтатусИзвлеченияТекста = ПрисоединенныеФайлыСлужебный.ИзвлечьТекст( + ДвоичныеДанные, ПрисоединенныйФайл.Расширение, ИзвлеченныйТекст); + КонецЕсли; + + ПрисоединенныйФайл.СтатусИзвлеченияТекста = СтатусИзвлеченияТекста; + ПрисоединенныйФайл.ТекстХранилище = Новый ХранилищеЗначения(ИзвлеченныйТекст); + ПрисоединенныйФайл.Автор = Автор; + + ПрисоединенныйФайл.Заполнить(Неопределено); + ПрисоединенныйФайл.Записать(); + + Если СвояТранзакцияОткрыта Тогда + ЗафиксироватьТранзакцию(); + КонецЕсли; + + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + + Если СвояТранзакцияОткрыта Тогда + ОтменитьТранзакцию(); + КонецЕсли; + + ШаблонСообщения = НСтр("ru = 'Ошибка при добавлении присоединенного файла ""%1"": + |%2'"); + КомментарийЖурналаРегистрации = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонСообщения, + ИмяБезРасширения + "." + РасширениеБезТочки, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Файлы.Добавление присоединенного файла'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + КомментарийЖурналаРегистрации); + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонСообщения, + ИмяБезРасширения + "." + РасширениеБезТочки, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецПопытки; + + Возврат ПрисоединенныйФайл.Ссылка; + +КонецФункции + +// Устарела. Следует использовать функцию ДобавитьПрисоединенныйФайл. +// // Создает объект в справочнике для хранения файла и заполняет его реквизиты переданными свойствами. // // Параметры: @@ -323,6 +480,7 @@ ПрисоединенныйФайл.СтатусИзвлеченияТекста = СтатусИзвлеченияТекста; ПрисоединенныйФайл.ТекстХранилище = Новый ХранилищеЗначения(ИзвлеченныйТекст); + ПрисоединенныйФайл.Заполнить(Неопределено); ПрисоединенныйФайл.Записать(); Если СвояТранзакцияОткрыта Тогда @@ -593,6 +751,7 @@ ЗаполнитьЗначенияСвойств(НоваяСтрока, ЭПСтрока); КонецЦикла; + ПрисоединенныйФайл.Заполнить(Неопределено); ПрисоединенныйФайл.Записать(); Если ПрисоединенныйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда @@ -627,14 +786,14 @@ КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); ОтменитьТранзакцию(); ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); КонецПопытки; - ЗафиксироватьТранзакцию(); - КонецПроцедуры // Возвращает ссылки на объекты с файлами из подсистемы Работа с файлами. @@ -686,14 +845,12 @@ //////////////////////////////////////////////////////////////////////////////// // Процедуры, вызываемые из модуля менеджера справочников с присоединенными файлами. -// Возвращает список реквизитов, которые разрешается редактировать -// с помощью обработки группового изменения объектов. + +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив - значения: -// * Строка - имя реквизита присоединенного файла, который можно редактировать -// в групповой обработке. -// +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт РедактируемыеРеквизиты = Новый Массив; @@ -795,6 +952,25 @@ КонецПроцедуры +// Обработчик подписки на событие ПередЗаписью владельца присоединенного файла. +// Помечает на удаление связанные файлы. +// +// Параметры: +// Источник - ДокументОбъект - владелец присоединенного файла. +// Отказ - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. +// РежимЗаписи - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. +// РежимПроведения - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. +// +Процедура УстановитьПометкуУдаленияПрисоединенныхФайловДокументов(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт + + Если Источник.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + ПометитьНаУдалениеПрисоединенныеФайлы(Источник); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -842,10 +1018,35 @@ Источник.ИндексКартинки = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Источник.Расширение); - Если Источник.ЭтоНовый() Тогда + Если Источник.ЭтоНовый() И Не ЗначениеЗаполнено(Источник.Автор) Тогда Источник.Автор = Пользователи.АвторизованныйПользователь(); КонецЕсли; + Если Не Источник.ЭтоНовый() Тогда + + ИзмененаПометкаУдаления = + Источник.ПометкаУдаления <> ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Источник.Ссылка, "ПометкаУдаления"); + + Если ИзмененаПометкаУдаления И ЗначениеЗаполнено(Источник.Редактирует) Тогда + + Если Источник.Редактирует = Пользователи.АвторизованныйПользователь() Тогда + + ТекстОшибки = НСтр("ru = 'Действие недоступно, так как файл ""%1"" занят для редактирования.'"); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, Источник.Наименование); + + Иначе + ТекстОшибки = НСтр("ru = 'Действие недоступно, так как файл ""%1"" занят для редактирования + |пользователем %2.'"); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, + Источник.Наименование, + Строка(Источник.Редактирует)); + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + КонецПроцедуры // Обработчик подписки на событие ПередУдалением для удаления данных, связанных с присоединенным файлом. @@ -898,25 +1099,6 @@ КонецПроцедуры -// Обработчик подписки на событие ПередЗаписью владельца присоединенного файла. -// Помечает на удаление связанные файлы. -// -// Параметры: -// Источник - ДокументОбъект - владелец присоединенного файла. -// Отказ - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. -// РежимЗаписи - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. -// РежимПроведения - Булево - параметр, передаваемый в подписку на событие ПередЗаписью. -// -Процедура УстановитьПометкуУдаленияПрисоединенныхФайловДокументов(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт - - Если Источник.ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - ПометитьНаУдалениеПрисоединенныеФайлы(Источник); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl index d32f5c6b1..e31f60236 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl @@ -293,6 +293,12 @@ КонецПроцедуры +// Выполняет печать файлов. +// +// Параметры: +// ДанныеФайлов - Массив - массив структур с данными файлов. +// ИдентификаторФормы - УникальныйИдентификатор - идентификатор управляемой формы. +// Процедура НапечататьФайлы(ДанныеФайлов, ИдентификаторФормы) Экспорт ПараметрыВыполнения = Новый Структура; @@ -306,6 +312,15 @@ КонецПроцедуры +// Процедура печати Файла +// +// Параметры: +// ОбработчикРезультата - ОписаниеОповещения для дальнейшего вызова. +// ПараметрыВыполнения - Структура - со свойствами: +// * НомерФайла - Число - номер текущего файла, +// * ДанныеФайла - Структура - данные файла, +// * УникальныйИдентификатор - УникальныйИдентификатор. +// Процедура НапечататьФайлыВыполнение(ОбработчикРезультата, ПараметрыВыполнения) Экспорт Если ПараметрыВыполнения.НомерФайла >= ПараметрыВыполнения.ДанныеФайлов.Количество() Тогда @@ -326,6 +341,14 @@ КонецПроцедуры +// Процедура печати Файла после получения на диск +// +// Параметры: +// ПараметрыВыполнения - Структура - со свойствами: +// * НомерФайла - Число - номер текущего файла, +// * ДанныеФайла - Структура - данные файла, +// * УникальныйИдентификатор - УникальныйИдентификатор. +// Процедура НапечататьФайлПослеПолученияВерсииВРабочийКаталог(Результат, ПараметрыВыполнения) Экспорт Если ЗначениеЗаполнено(Результат.ОписаниеОшибки) Тогда @@ -345,6 +368,38 @@ КонецПроцедуры +// Выполняет печать файла внешним приложением. +// +// Параметры +// ИмяОткрываемогоФайла - Строка - полное имя файла. +// +Процедура НапечататьИзПриложенияПоИмениФайла(ИмяОткрываемогоФайла) Экспорт + + Если Не ЗначениеЗаполнено(ИмяОткрываемогоФайла) Тогда + Возврат; + КонецЕсли; + + СистемнаяИнфо = Новый СистемнаяИнформация; + Если СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86 + Или СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда + + Shell = Новый COMОбъект("Shell.Application"); + Shell.ShellExecute(ИмяОткрываемогоФайла, "", "", "print", 1); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Процедура предназначена для печати файла соответствующим приложением +// +// Параметры +// ДанныеФайла - Структура - данные файла. +// ИмяОткрываемогоФайла - Строка - полное имя файла. +// Процедура НапечататьФайлПриложением(ДанныеФайла, ИмяОткрываемогоФайла) РасширенияИсключения = @@ -396,21 +451,4 @@ КонецПроцедуры -Процедура НапечататьИзПриложенияПоИмениФайла(ИмяОткрываемогоФайла) Экспорт - - Если Не ЗначениеЗаполнено(ИмяОткрываемогоФайла) Тогда - Возврат; - КонецЕсли; - - СистемнаяИнфо = Новый СистемнаяИнформация; - Если СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86 - Или СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда - - Shell = Новый COMОбъект("Shell.Application"); - Shell.ShellExecute(ИмяОткрываемогоФайла, "", "", "print", 1); - - КонецЕсли; - -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлыПереопределяемый/Module.bsl index dd463832d..74027095e 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлыПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыПереопределяемый/Module.bsl @@ -24,8 +24,29 @@ // Формирует массив метаданных, которые не должны выводиться в настройках очистки файлов. // -// Возвращаемое значение: -// Массив - массив, содержащий метаданные, которые не должны выводиться в настройках очистки файлов. +// Параметры: +// МассивИсключений - Массив - метаданные, которые не должны выводиться в настройках очистки файлов. +// +// Например: +// МассивИсключений.Добавить(Метаданные.Справочники._ДемоНоменклатураПрисоединенныеФайлы); +// +Процедура ПриОпределенииОбъектовИсключенияОчисткиФайлов(МассивИсключений) Экспорт + +КонецПроцедуры + +// Формирует массив метаданных, которые не должны выводиться в настройках синхронизации файлов. +// +// Параметры: +// МассивИсключений -Массив - метаданные, которые не должны выводиться в настройках синхронизации файлов. +// +// Например: +// МассивИсключений.Добавить(Метаданные.Справочники._ДемоНоменклатураПрисоединенныеФайлы); +// +Процедура ПриОпределенииОбъектовИсключенияСинхронизацииФайлов(МассивИсключений) Экспорт + +КонецПроцедуры + +// Устарела.Следует использовать ПриОпределенииОбъектовИсключенияОчисткиФайлов. // Функция ОбъектыИсключенияПриОчисткеФайлов() Экспорт diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебный/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебный/Module.bsl index 16e49bd51..5579471cb 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебный/Module.bsl @@ -90,9 +90,6 @@ "ПрисоединенныеФайлыСлужебный"); КонецЕсли; - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена"].Добавить( - "ПрисоединенныеФайлыСлужебный"); - Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ФайловыеФункцииВМоделиСервиса") Тогда СерверныеОбработчики["ТехнологияСервиса.РаботаВМоделиСервиса.ФайловыеФункцииВМоделиСервиса\ПриЗаполненииОбработчиковИнтеграцииФайловыхФункцийВМоделиСервиса"].Добавить( @@ -105,7 +102,7 @@ // Размещает файлы из сформированного образа. Процедура ДобавитьФайлыВТомаПриРазмещении(Знач СоответствиеПутейФайлов, Знач ТипХраненияФайлов, - Знач Файлы) Экспорт + Знач Файлы) Для Каждого ЭлементСоответствия Из СоответствиеПутейФайлов Цикл @@ -180,7 +177,7 @@ // ПланОбменаСсылка - Ссылка на план обмена. // ТипыФайлов - Массив Типов справочников с присоединенными файлами. // -Процедура УдалитьРегистрациюИзменений(ПланОбменаСсылка, ТипыФайлов) Экспорт +Процедура УдалитьРегистрациюИзменений(ПланОбменаСсылка, ТипыФайлов) Для Каждого Тип Из ТипыФайлов Цикл ПланыОбмена.УдалитьРегистрациюИзменений(ПланОбменаСсылка, Метаданные.НайтиПоТипу(Тип)); @@ -189,7 +186,7 @@ КонецПроцедуры // Проверяет, что переданный элемент данных - это объект присоединенного файла. -Функция ЭтоЭлементПрисоединенныеФайлы(ЭлементДанных) Экспорт +Функция ЭтоЭлементПрисоединенныеФайлы(ЭлементДанных) Если ТипЗнч(ЭлементДанных) = Тип("УдалениеОбъекта") Тогда Возврат Ложь; @@ -202,32 +199,8 @@ КонецФункции -// Возвращает свойства присоединенного файла: двоичные данные и подпись. -// -// Параметры: -// ПрисоединенныйФайл - Ссылка на присоединенный файл. -// АдресПодписи - Строка - адрес подписи во временном хранилище. -// -// Возвращаемое значение: -// Структура со свойствами: -// ДвоичныеДанные - ДвоичныеДанные присоединенного файла. -// ДвоичныеДанныеПодписи - ДвоичныеДанные подписи. -// -Функция ПолучитьДвоичныеДанныеФайлаИПодписи(Знач ПрисоединенныйФайл, Знач АдресПодписи) Экспорт - - Свойства = Новый Структура; - - Свойства.Вставить("ДвоичныеДанные", ПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайла( - ПрисоединенныйФайл)); - - Свойства.Вставить("ДвоичныеДанныеПодписи", ПолучитьИзВременногоХранилища(АдресПодписи)); - - Возврат Свойства; - -КонецФункции - // Возвращает количество версий с неизвлеченным текстом. -Функция ПолучитьКоличествоВерсийСНеизвлеченнымТекстом() Экспорт +Функция ПолучитьКоличествоВерсийСНеизвлеченнымТекстом() КоличествоФайлов = 0; @@ -272,7 +245,7 @@ // Возвращаемое значение: // Строка - полный путь к файлу на диске. // -Функция ПолучитьИмяФайлаСПутемКДвоичнымДанным(Знач ПрисоединенныйФайл, ПустойПутьДляПустыхДанных = Ложь) Экспорт +Функция ПолучитьИмяФайлаСПутемКДвоичнымДанным(Знач ПрисоединенныйФайл, ПустойПутьДляПустыхДанных = Ложь) ИмяФайлаСПутем = ПолучитьИмяВременногоФайла(ПрисоединенныйФайл.Расширение); @@ -316,7 +289,7 @@ КонецФункции // Заполняет параметр КоличествоФайловВТомах. -Процедура ОпределитьКоличествоФайловВТомах(КоличествоФайловВТомах) Экспорт +Процедура ОпределитьКоличествоФайловВТомах(КоличествоФайловВТомах) ТипыВладельцев = Метаданные.РегистрыСведений.НаличиеПрисоединенныхФайлов.Измерения.ОбъектСФайлами.Тип.Типы(); ВсеИменаСправочников = Новый Соответствие; @@ -413,7 +386,7 @@ // Истина - возврат, // Ложь - устанавливает Истина, если объект имеет хранимые файлы. // -Процедура ОпределитьНаличиеХранимыхФайлов(Знач ВнешнийОбъект, ЕстьХранимыеФайлы) Экспорт +Процедура ОпределитьНаличиеХранимыхФайлов(Знач ВнешнийОбъект, ЕстьХранимыеФайлы) Если ЕстьХранимыеФайлы = Истина Тогда Возврат; @@ -431,7 +404,7 @@ КонецПроцедуры // Заполняет массив ХранимыеФайлы данными хранимых файлов объекта ВнешнийОбъект. -Процедура ПолучитьХранимыеФайлы(Знач ВнешнийОбъект, Знач ХранимыеФайлы) Экспорт +Процедура ПолучитьХранимыеФайлы(Знач ВнешнийОбъект, Знач ХранимыеФайлы) Если ТипЗнч(ВнешнийОбъект) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда Возврат; @@ -545,7 +518,14 @@ Процедура ПриОтправкеФайла(ЭлементДанных, ОтправкаЭлемента, Знач СозданиеНачальногоОбраза = Ложь, - Получатель = Неопределено) Экспорт + Получатель = Неопределено) + + // Для обменов не РИБ используется алгоритм обычного сеанса обмена, а не создания начального образа, + // т.к. параметра СозданиеНачальногоОбраза равный Истина означает начальную выгрузку данных. + Если СозданиеНачальногоОбраза И Получатель <> Неопределено + И Не ОбщегоНазначения.ЭтоУзелРаспределеннойИнформационнойБазы(Получатель.Ссылка) Тогда + СозданиеНачальногоОбраза = Ложь; + КонецЕсли; Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить ИЛИ ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда @@ -657,7 +637,7 @@ КонецПроцедуры // Для служебного использования. -Процедура ПриПолученииФайла(ЭлементДанных, ПолучениеЭлемента) Экспорт +Процедура ПриПолученииФайла(ЭлементДанных, ПолучениеЭлемента) Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда @@ -766,6 +746,50 @@ КонецПроцедуры +// Отменяет редактирование файла. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка или Объект присоединенного файла, который требуется освободить. +// +Процедура ОсвободитьФайл(Знач ПрисоединенныйФайл) Экспорт + + Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда + ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); + ФайлОбъект.Заблокировать(); + Иначе + ФайлОбъект = ПрисоединенныйФайл; + КонецЕсли; + + Если ЗначениеЗаполнено(ФайлОбъект.Редактирует) Тогда + ФайлОбъект.Редактирует = Справочники.Пользователи.ПустаяСсылка(); + ФайлОбъект.Записать(); + КонецЕсли; + +КонецПроцедуры + +// Отмечает файл, как редактируемый. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка или Объект присоединенного файла, который требуется отметить. +// +Процедура ЗанятьФайлДляРедактированияСервер(Знач ПрисоединенныйФайл, Пользователь = Неопределено) Экспорт + + Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда + ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); + ФайлОбъект.Заблокировать(); + Иначе + ФайлОбъект = ПрисоединенныйФайл; + КонецЕсли; + + Если Пользователь = Неопределено Тогда + ФайлОбъект.Редактирует = Пользователи.АвторизованныйПользователь(); + Иначе + ФайлОбъект.Редактирует = Пользователь; + КонецЕсли; + ФайлОбъект.Записать(); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Очистка ненужных файлов @@ -936,10 +960,16 @@ Пока Выборка.Следующий() Цикл ВерсияСсылка = Выборка.Ссылка; + ПутьКФайлу = Выборка.ПутьКФайлу; Если ЗначениеЗаполнено(Выборка.ПутьКФайлу) И ЗначениеЗаполнено(Выборка.Том) Тогда - ПолныйПутьФайла = ФайловыеФункцииСлужебный.ПолныйПутьТома(Выборка.Том) + Выборка.ПутьКФайлу; + // Удаляем лишнюю точку, если у файла нет расширения. + Если ВерсияСсылка.Расширение = "" И СтрЗаканчиваетсяНа(ПутьКФайлу, ".") Тогда + ПутьКФайлу = Лев(ПутьКФайлу, СтрДлина(ПутьКФайлу) - 1); + КонецЕсли; + + ПолныйПутьФайла = ФайловыеФункцииСлужебный.ПолныйПутьТома(Выборка.Том) + ПутьКФайлу; Файл = Новый Файл(ПолныйПутьФайла); Если Не Файл.Существует() Тогда @@ -976,10 +1006,10 @@ ИмяФайлаСПутем = ""; ИмяФайлаСПутемДляУдаления = ""; + НачатьТранзакцию(); + Попытка - НачатьТранзакцию(); - Если ФайлОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда ИмяФайлаСПутем = ФайловыеФункцииСлужебный.ПолныйПутьТома(ФайлОбъект.Том) + ФайлОбъект.ПутьКФайлу; ИмяФайлаСПутемДляУдаления = ИмяФайлаСПутем + ".del"; @@ -991,7 +1021,7 @@ ФайлОбъект.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); ФайлОбъект.ПутьКФайлу = ""; ТекстОписания = НСтр("ru = 'Файл удален при очистке ненужных файлов.'") - + " " + Формат(ТекущаяДатаСеанса(),"ДФ=dd.MM.yyyy") + Символы.ПС; + + " " + Формат(ТекущаяДатаСеанса(),"ДЛФ=D") + Символы.ПС; ФайлОбъект.Описание = ТекстОписания + ФайлОбъект.Описание; ФайлОбъект.Записать(); ФайлОбъект.УстановитьПометкуУдаления(Истина); @@ -1024,6 +1054,135 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Синхронизация файлов с облачным сервисом + +Функция ТекстЗапросаДляСинхронизацииФайлов(ВладелецФайла, НастройкаСинхронизации, МассивИсключений, ЭлементИсключение) Экспорт + + ТипОбъекта = ВладелецФайла; + ПредставлениеТипаВладельца = ОбщегоНазначения.ВидОбъектаПоТипу(ТипЗнч(ТипОбъекта.ЗначениеПустойСсылки)); + ЕстьТипДата = Ложь; + + ТекстЗапроса = ""; + + СправочникФайлов = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(НастройкаСинхронизации.ТипВладельцаФайла); + Если ТипЗнч(ВладелецФайла) <> Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + СправочникПапок = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(НастройкаСинхронизации.ИдентификаторВладельца); + Иначе + СправочникПапок = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(ВладелецФайла); + КонецЕсли; + + Если Не ПустаяСтрока(ТекстЗапроса) Тогда + ТекстЗапроса= ТекстЗапроса + " + | + |ОБЪЕДИНИТЬ ВСЕ + |"; + КонецЕсли; + ТекстЗапроса = ТекстЗапроса + "ВЫБРАТЬ + | СправочникПапок.Ссылка,"; + + ФайловыеФункцииСлужебный.ДобавитьДоступныеПоляОтбора(ТекстЗапроса, ТипОбъекта); + + ТекстЗапроса = ТекстЗапроса + " + | СправочникФайлов.Ссылка КАК ФайлСсылка, + | СправочникФайлов.Наименование + ""."" + СправочникФайлов.Расширение КАК Наименование, + | СправочникФайлов.ПометкаУдаления КАК ПометкаУдаления, + | СправочникФайлов.ВладелецФайла КАК Родитель, + | ЛОЖЬ КАК ЭтоПапка, + | ИСТИНА КАК ЕстьВБазе, + | ЛОЖЬ КАК ЕстьНаСервере, + | НЕОПРЕДЕЛЕНО КАК Изменения, + | ЕСТЬNULL(СтатусыСинхронизацииФайловСОблачнымСервисом.Href, """") КАК Href, + | ЕСТЬNULL(СтатусыСинхронизацииФайловСОблачнымСервисом.Etag, """") КАК Etag, + | ЛОЖЬ КАК Обработан, + | ВЫРАЗИТЬ("""" КАК СТРОКА(36)) КАК UID1C, + | """" КАК ToHref, + | """" КАК ToEtag, + | """" КАК РодительСервер, + | """" КАК НаименованиеСервер, + | ЛОЖЬ КАК ИзмененНаСервере, + | НЕОПРЕДЕЛЕНО КАК Уровень, + | """" КАК РодительСортировка, + | ЛОЖЬ КАК ЭтоФайл + |ИЗ + | Справочник." + СправочникФайлов.Имя + " КАК СправочникФайлов + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом + | ПО (СтатусыСинхронизацииФайловСОблачнымСервисом.Файл = СправочникФайлов.Ссылка) + | ЛЕВОЕ СОЕДИНЕНИЕ " + ПредставлениеТипаВладельца + "." + СправочникПапок.Имя + " КАК СправочникПапок + | ПО (СправочникФайлов.ВладелецФайла = СправочникПапок.Ссылка) + | ГДЕ + | ИСТИНА"; + + Если МассивИсключений.Количество() > 0 Тогда + ТекстЗапроса = ТекстЗапроса + " + | И НЕ СправочникПапок.Ссылка В ИЕРАРХИИ (&МассивИсключений)"; + КонецЕсли; + Если ЭлементИсключение <> Неопределено Тогда + ТекстЗапроса = ТекстЗапроса + " + | И СправочникПапок.Ссылка В ИЕРАРХИИ (&ЭлементИсключение)"; + КонецЕсли; + + ТекстЗапроса = ТекстЗапроса + " + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | СправочникПапок.Ссылка,"; + + ФайловыеФункцииСлужебный.ДобавитьДоступныеПоляОтбора(ТекстЗапроса, ТипОбъекта); + + ТекстЗапроса = ТекстЗапроса + " + | СправочникПапок.Ссылка, + | " + ?(ПредставлениеТипаВладельца = "Документ", + "СправочникПапок.Представление", "СправочникПапок.Наименование") + ", + | СправочникПапок.ПометкаУдаления,"; + Если ОбщегоНазначения.ЭтоСправочник(СправочникПапок) И СправочникПапок.Иерархический Тогда + ТекстЗапроса = ТекстЗапроса + " + | ВЫБОР + | КОГДА СправочникПапок.Родитель = ЗНАЧЕНИЕ(Справочник." + СправочникПапок.Имя + ".ПустаяСсылка) + | ТОГДА НЕОПРЕДЕЛЕНО + | ИНАЧЕ СправочникПапок.Родитель + | КОНЕЦ,"; + Иначе + ТекстЗапроса = ТекстЗапроса + "Неопределено,"; + КонецЕсли; + ТекстЗапроса = ТекстЗапроса + " + | ИСТИНА, + | ИСТИНА, + | ЛОЖЬ, + | НЕОПРЕДЕЛЕНО, + | ЕСТЬNULL(СтатусыСинхронизацииФайловСОблачнымСервисом.Href, """"), + | """", + | ЛОЖЬ, + | """", + | """", + | """", + | """", + | """", + | ЛОЖЬ, + | НЕОПРЕДЕЛЕНО, + | """", + | ЛОЖЬ + |ИЗ + | " + ПредставлениеТипаВладельца + "." + СправочникПапок.Имя + " КАК СправочникПапок + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом + | ПО (СтатусыСинхронизацииФайловСОблачнымСервисом.Файл = СправочникПапок.Ссылка + | И СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись = &УчетнаяЗапись) + | ГДЕ + | ИСТИНА"; + + Если МассивИсключений.Количество() > 0 Тогда + ТекстЗапроса = ТекстЗапроса + " + | И НЕ СправочникПапок.Ссылка В ИЕРАРХИИ (&МассивИсключений)"; + КонецЕсли; + Если ЭлементИсключение <> Неопределено Тогда + ТекстЗапроса = ТекстЗапроса + " + | И СправочникПапок.Ссылка В ИЕРАРХИИ (&ЭлементИсключение)"; + КонецЕсли; + + Возврат ТекстЗапроса; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1051,46 +1210,6 @@ КонецПроцедуры -// Отменяет редактирование файла. -// -// Параметры: -// ПрисоединенныйФайл - Ссылка или Объект присоединенного файла, который требуется освободить. -// -Процедура ОсвободитьФайл(Знач ПрисоединенныйФайл) Экспорт - - Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда - ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); - ФайлОбъект.Заблокировать(); - Иначе - ФайлОбъект = ПрисоединенныйФайл; - КонецЕсли; - - Если ЗначениеЗаполнено(ФайлОбъект.Редактирует) Тогда - ФайлОбъект.Редактирует = Справочники.Пользователи.ПустаяСсылка(); - ФайлОбъект.Записать(); - КонецЕсли; - -КонецПроцедуры - -// Отмечает файл, как редактируемый. -// -// Параметры: -// ПрисоединенныйФайл - Ссылка или Объект присоединенного файла, который требуется отметить. -// -Процедура ЗанятьФайлДляРедактированияСервер(Знач ПрисоединенныйФайл) Экспорт - - Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда - ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); - ФайлОбъект.Заблокировать(); - Иначе - ФайлОбъект = ПрисоединенныйФайл; - КонецЕсли; - - ФайлОбъект.Редактирует = Пользователи.АвторизованныйПользователь(); - ФайлОбъект.Записать(); - -КонецПроцедуры - // Помещает зашифрованные данные файла в хранилище и устанавливает файлу признак Зашифрован. // // Параметры: @@ -1288,7 +1407,7 @@ КонецПроцедуры // Определяет, что к объекту присоединен по крайней мере один файл. -Функция ОбъектИмеетФайлы(Знач ВладелецФайлов, Знач ФайлИсключение = Неопределено) Экспорт +Функция ОбъектИмеетФайлы(Знач ВладелецФайлов, Знач ФайлИсключение = Неопределено) УстановитьПривилегированныйРежим(Истина); @@ -1933,27 +2052,11 @@ КонецПроцедуры -// Используется для получения объектов метаданных, которые должны входить в состав плана обмена -// и НЕ должны входить в состав подписок на события регистрации изменений для этого плана обмена. -// Эти объекты метаданных используются только в момент создания начального образа подчиненного узла -// и не мигрируют в процессе обмена. -// Если подсистема имеет объекты метаданных, которые участвуют только в создании начального образа подчиненного узла, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты - Массив. Массив объектов метаданных конфигурации. -// -Процедура ПриПолученииОбъектовНачальногоОбразаПланаОбмена(Объекты) Экспорт - - Объекты.Добавить(Метаданные.РегистрыСведений.ПрисоединенныеФайлы); - -КонецПроцедуры - // Заполняет перечень обработчиков интеграции подсистемы. -// "ТехнологияСервиса.РаботаВМоделиСервиса.ФайловыеФункцииВМоделиСервиса" +// "ТехнологияСервиса.РаботаВМоделиСервиса.ФайловыеФункцииВМоделиСервиса". // // Параметры: -// Обработчики - Массив(Строка), имя общего модуля обработчика, +// Обработчики - Массив(Строка), имя общего модуля обработчика. // Процедура ПриЗаполненииОбработчиковИнтеграцииФайловыхФункцийВМоделиСервиса(Обработчики) Экспорт @@ -2100,8 +2203,7 @@ |ИЗ | &ИмяСправочника КАК ПрисоединенныеФайлы |ГДЕ - | (ПрисоединенныеФайлы.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен) - | ИЛИ ПрисоединенныеФайлы.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка))"; + | ПрисоединенныеФайлы.СтатусИзвлеченияТекста В (ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен), ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка))"; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда ТекстЗапроса = ТекстЗапроса + " @@ -2127,8 +2229,7 @@ |ИЗ | &ИмяСправочника КАК ПрисоединенныеФайлы |ГДЕ - | (ПрисоединенныеФайлы.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен) - | ИЛИ ПрисоединенныеФайлы.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка))"; + | ПрисоединенныеФайлы.СтатусИзвлеченияТекста В (ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен), ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка))"; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда ТекстЗапроса = ТекстЗапроса + " diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйВызовСервера/Module.bsl index d111ef2f6..6b65675fb 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйВызовСервера/Module.bsl @@ -15,7 +15,7 @@ ПрисоединенныйФайл, ИдентификаторФормы, ПолучатьСсылкуНаДвоичныеДанные, ДляРедактирования); КонецФункции - + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -27,7 +27,7 @@ КонецПроцедуры -// См. эту функцию в модуле ПрисоединенныеФайлы. +// См. функцию ДобавитьПрисоединенныйФайл в модуле ПрисоединенныеФайлы. Функция ДобавитьФайл(Знач ВладелецФайла, Знач ИмяБезРасширения, Знач РасширениеБезТочки = Неопределено, @@ -37,12 +37,16 @@ Знач АдресВременногоХранилищаТекста = "", Знач Описание = "") Экспорт - Возврат ПрисоединенныеФайлы.ДобавитьФайл( - ВладелецФайла, - ИмяБезРасширения, - РасширениеБезТочки, - ВремяИзменения, - ВремяИзмененияУниверсальное, + ПараметрыФайла = Новый Структура; + ПараметрыФайла.Вставить("ВладелецФайлов", ВладелецФайла); + ПараметрыФайла.Вставить("Автор", Неопределено); + ПараметрыФайла.Вставить("ИмяБезРасширения", ИмяБезРасширения); + ПараметрыФайла.Вставить("РасширениеБезТочки", РасширениеБезТочки); + ПараметрыФайла.Вставить("ВремяИзменения", ВремяИзменения); + ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", ВремяИзмененияУниверсальное); + + Возврат ПрисоединенныеФайлы.ДобавитьПрисоединенныйФайл( + ПараметрыФайла, АдресФайлаВоВременномХранилище, АдресВременногоХранилищаТекста, Описание); diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйКлиент/Module.bsl index bce156406..dc5d64947 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйКлиент/Module.bsl @@ -14,14 +14,15 @@ Если Не ДополнительныеПараметры.Свойство("Фильтр") Тогда ДополнительныеПараметры.Вставить("Фильтр",""); КонецЕсли; - ОткрыватьКарточкуПослеСозданияИзФайла = Ложь; - Если ДополнительныеПараметры.Свойство("НеОткрыватьКарточкуПослеСозданияИзФайла") Тогда - ОткрыватьКарточкуПослеСозданияИзФайла = Не ДополнительныеПараметры.НеОткрыватьКарточкуПослеСозданияИзФайла; - КонецЕсли; - Фильтр = ДополнительныеПараметры.Фильтр; Если РасширениеРаботыСФайламиПодключено Тогда + Фильтр = ДополнительныеПараметры.Фильтр; + ОткрыватьКарточкуПослеСозданияИзФайла = Ложь; + Если ДополнительныеПараметры.Свойство("НеОткрыватьКарточкуПослеСозданияИзФайла") Тогда + ОткрыватьКарточкуПослеСозданияИзФайла = Не ДополнительныеПараметры.НеОткрыватьКарточкуПослеСозданияИзФайла; + КонецЕсли; + ВыбранныеФайлы = Новый Массив; Если Не ДополнительныеПараметры.Свойство("ПолноеИмяФайла") Тогда @@ -88,7 +89,7 @@ Знач ДатаМодификацииУниверсальная, Знач ИмяФайла, Знач РабочийКаталогПользователя, - ПолноеИмяФайлаНаКлиенте) Экспорт + ПолноеИмяФайлаНаКлиенте) Если РабочийКаталогПользователя = Неопределено ИЛИ ПустаяСтрока(РабочийКаталогПользователя) Тогда @@ -131,7 +132,7 @@ КонецФункции // См. одноименную функцию в общем модуле ПрисоединенныеФайлыКлиент. -Функция ПоместитьФайлВХранилище(Знач ПутьКФайлу, Знач ИдентификаторФормы) Экспорт +Функция ПоместитьФайлВХранилище(Знач ПутьКФайлу, Знач ИдентификаторФормы) Результат = Новый Структура; Результат.Вставить("ФайлПомещенВХранилище", Ложь); @@ -504,16 +505,16 @@ ПолныйПуть = РабочийКаталогПользователя + ДанныеФайла.ОтносительныйПуть + ДанныеФайла.ИмяФайла; Файл = Новый Файл(ПолныйПуть); Если Не Файл.Существует() Тогда - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Файл ""%1"" - |отсутствует в рабочем каталоге. - | - |Получить файл из хранилища файлов?'"), + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Каталог файла не существует. Возможно, на данном компьютере файл ""%1"" еще не открывался. + |Сохранить файл на компьютер и открыть его каталог?'"), Файл.Имя); + КнопкиВопроса = Новый СписокЗначений; + КнопкиВопроса.Добавить(КодВозвратаДиалога.Да, НСтр("ru= 'Сохранить и открыть каталог'")); + КнопкиВопроса.Добавить(КодВозвратаДиалога.Нет, НСтр("ru= 'Отмена'")); ДополнительныеПараметры.Вставить("РабочийКаталогПользователя", РабочийКаталогПользователя); ДополнительныеПараметры.Вставить("ПолныйПуть", ПолныйПуть); ОписаниеОповещения = Новый ОписаниеОповещения("ОткрытьКаталогСФайломОтветПолучен", ЭтотОбъект, ДополнительныеПараметры); - ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет); + ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, КнопкиВопроса); КонецЕсли; ФайловыеФункцииСлужебныйКлиент.ОткрытьПроводникСФайлом(ПолныйПуть); @@ -880,7 +881,8 @@ // Работа с электронными подписями. // Подписывает файл с помощью подсистемы ЭлектроннаяПодпись. -Процедура ПодписатьФайл(ПрисоединенныйФайл, ДанныеФайла, ИдентификаторФормы, ОбработчикЗавершения, ОбработчикПриПолученииПодписи = Неопределено) Экспорт +Процедура ПодписатьФайл(ПрисоединенныйФайл, ДанныеФайла, ИдентификаторФормы, + ОбработчикЗавершения = Неопределено, ОбработчикПриПолученииПодписи = Неопределено) Экспорт Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда Возврат; @@ -888,9 +890,9 @@ ПараметрыВыполнения = Новый Структура; ПараметрыВыполнения.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); - ПараметрыВыполнения.Вставить("ПрисоединенныйФайл", ПрисоединенныйФайл); - ПараметрыВыполнения.Вставить("ДанныеФайла", ДанныеФайла); - ПараметрыВыполнения.Вставить("ИдентификаторФормы", ИдентификаторФормы); + ПараметрыВыполнения.Вставить("ПрисоединенныйФайл", ПрисоединенныйФайл); + ПараметрыВыполнения.Вставить("ДанныеФайла", ДанныеФайла); + ПараметрыВыполнения.Вставить("ИдентификаторФормы", ИдентификаторФормы); ОписаниеДанных = Новый Структура; ОписаниеДанных.Вставить("Операция", НСтр("ru = 'Подписание файла'")); @@ -914,7 +916,8 @@ КонецПроцедуры // Добавляет электронные подписи к файлу-объекту из файлов-подписей на диске. -Процедура ДобавитьПодписьИзФайла(ПрисоединенныйФайл, ИдентификаторФормы, ОбработчикЗавершения, ОбработчикПриПолученииПодписи = Неопределено) Экспорт +Процедура ДобавитьПодписьИзФайла(ПрисоединенныйФайл, ДанныеФайла, ИдентификаторФормы, + ОбработчикЗавершения = Неопределено, ОбработчикПриПолученииПодписи = Неопределено) Экспорт Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда Возврат; @@ -929,6 +932,8 @@ ОписаниеДанных.Вставить("Представление", ПрисоединенныйФайл); ОписаниеДанных.Вставить("ПоказатьКомментарий", Истина); + ОписаниеДанных.Вставить("Данные", ДанныеФайла.СсылкаНаДвоичныеДанныеФайла); + Если ОбработчикПриПолученииПодписи = Неопределено Тогда ОписаниеДанных.Вставить("Объект", ПрисоединенныйФайл); Иначе @@ -1489,17 +1494,27 @@ КонецЕсли; ВладелецФайла = ДополнительныеПараметры.ВладелецФайла; - - ПоказатьОповещениеПользователя( - НСтр("ru = 'Создание'"), - ПолучитьНавигационнуюСсылку(ПрисоединенныйФайл), - ПрисоединенныйФайл, - БиблиотекаКартинок.Информация32); - ОповеститьОбИзменении(ПрисоединенныйФайл); Оповестить("Запись_ПрисоединенныйФайл", Новый Структура("ЭтоНовый, ВладелецФайла", Истина, ВладелецФайла), ПрисоединенныйФайл); + ОткрыватьКарточкуПослеСозданияИзФайла = Ложь; + Если ДополнительныеПараметры.Свойство("НеОткрыватьКарточкуПослеСозданияИзФайла") Тогда + ОткрыватьКарточкуПослеСозданияИзФайла = Не ДополнительныеПараметры.НеОткрыватьКарточкуПослеСозданияИзФайла; + КонецЕсли; + Если ОткрыватьКарточкуПослеСозданияИзФайла Тогда + + ПоказатьОповещениеПользователя( + НСтр("ru = 'Создание'"), + ПолучитьНавигационнуюСсылку(ПрисоединенныйФайл), + ПрисоединенныйФайл, + БиблиотекаКартинок.Информация32); + + ПараметрыФормы = Новый Структура("ПрисоединенныйФайл", ПрисоединенныйФайл); + ОткрытьФорму("ОбщаяФорма.ПрисоединенныйФайл", ПараметрыФормы, , ПрисоединенныйФайл); + + КонецЕсли; + КонецПроцедуры // Продолжение процедуры ПрисоединенныеФайлыКлиент.СохранитьВместеСЭП. diff --git a/SSL/src/CommonModules/ПроверкаКонтрагентов/Module.bsl b/SSL/src/CommonModules/ПроверкаКонтрагентов/Module.bsl index 74e324a67..32aadb09a 100644 --- a/SSL/src/CommonModules/ПроверкаКонтрагентов/Module.bsl +++ b/SSL/src/CommonModules/ПроверкаКонтрагентов/Module.bsl @@ -9,7 +9,7 @@ #Область ПроверкаОдногоКонтрагента -// Процедура - Проверка одного контрагента по ИНН, КПП и Дате. +// Проверка одного контрагента по ИНН, КПП и Дате. // // Параметры: // Параметры - Структура - Параметры запуска фонового задания. Ключи структуры: @@ -33,11 +33,18 @@ КонецЕсли; ЗаполнитьЗначенияСвойств(НоваяСтрока, Параметры); - ПроверитьКонтрагентов(ДанныеКонтрагентов, АдресХранилища, Истина, Параметры.СохранятьРезультатСразуПослеПроверки); + ДополнительныеПараметры = Новый Структура(); + ДополнительныеПараметры.Вставить("АдресХранилища", АдресХранилища); + ДополнительныеПараметры.Вставить("ЭтоПроверкаСправочника", Истина); + ДополнительныеПараметры.Вставить("СохранятьРезультатСразуПослеПроверки", Параметры.СохранятьРезультатСразуПослеПроверки); + ДополнительныеПараметры.Вставить("ВыполнятьПредварительнуюПроверкуКонтрагента", + Параметры.Свойство("ВыполнятьПредварительнуюПроверкуКонтрагента") И Параметры.ВыполнятьПредварительнуюПроверкуКонтрагента); + + ПроверитьВебСервисомФНС(ДанныеКонтрагентов, ДополнительныеПараметры); КонецПроцедуры -// Функция - Состояние контрагента +// Состояние контрагента // // Параметры: // "ИНН" - Строка - ИНН Контрагента. @@ -46,7 +53,7 @@ // тогда берется текущая дата. // // Возвращаемое значение: -// Перечисление.СостоянияСуществованияКонтрагента - Состояния контрагента согласно данным ФНС +// Перечисление.СостоянияСуществованияКонтрагента - Состояния контрагента согласно данным ФНС. // Функция СостояниеКонтрагента(ИНН, КПП, Дата = Неопределено) Экспорт @@ -70,55 +77,57 @@ #Область ПроверкаНесколькихКонтрагентов -// Процедура - Проверка нескольких контрагентов. +// Проверка нескольких контрагентов. // // Параметры: -// ДанныеКонтрагентов - ТаблицаЗначений - Содержит данные проверяемых контрагентов. +// ДанныеКонтрагентов - ТаблицаЗначений - Содержит данные проверяемых контрагентов. // Структуру колонок таблицы см в функции ШаблонТаблицыДанныеКонтрагента. -// АдресХранилища - Строка - Адрес, в который будет помещен результат проверки контрагента. -// ЭтоПроверкаСправочника - Булево - Указывает, выполняется ли проверка справочника. -// Для справочника результат проверки сохраняется во временное хранилище, либо записывается в регистр. -// Для остальных объектов результат проверки заполняется в колонке Состояние таблицы ДанныеКонтрагентов. -// СохранятьРезультатСразуПослеПроверки - Булево - Признак, указывающий нужно ли результат проверки контрагента. -Процедура ПроверитьКонтрагентов(ДанныеКонтрагентов, АдресХранилища = Неопределено, ЭтоПроверкаСправочника = Истина, СохранятьРезультатСразуПослеПроверки = Ложь) Экспорт +// ДополнительныеПараметры - Структура - Дополнительные параметры проверки. +// Структура может быть пустой или иметь следующие элементы: +// - ЭтоПроверкаСправочника/ЭтоПроверкаДокумента/ЭтоПроверкаОтчета для указания вида +// проверяемого объекта. +// - СохранятьРезультатСразуПослеПроверки - флаг, позволяющий сразу после проверки +// контрагента сохранить результат в регистр СостоянияКонтрагентов при проверке +// в режиме ЭтоПроверкаСправочника = Истина. +// - АдресХранилища - адрес, по которому будет сохранен результат проверки при проверке +// в режиме ЭтоПроверкаСправочника = Истина. +// - ВыполнятьПредварительнуюПроверкуКонтрагента - флаг, действующий при проверке +// в режиме ЭтоПроверкаСправочника = Истина, который показывает, что предварительная проверка +// ИНН, КПП и Даты уже была выполнена ранее и здесь проверку можно пропустить. +Процедура ПроверитьВебСервисомФНС(ДанныеКонтрагентов, ДополнительныеПараметры) Экспорт - // Если нет доступа к веб-сервису, то проверку не выполняем. - Если НЕ ЕстьДоступКВебСервисуФНС() Тогда - Возврат; + ЭтоПроверкаОтчета = ДополнительныеПараметры.Свойство("ЭтоПроверкаОтчета") И ДополнительныеПараметры.ЭтоПроверкаОтчета; + БратьСостоянияТолькоИзКэша = ДополнительныеПараметры.Свойство("ИзКэша") И ДополнительныеПараметры.ИзКэша; + + ЕстьДоступКВебСервисуФНС = БратьСостоянияТолькоИзКэша ИЛИ ЕстьДоступКВебСервисуФНС(); + ДополнительныеПараметры.Вставить("ЕстьДоступКВебСервисуФНС", ЕстьДоступКВебСервисуФНС); + + // Проверяем данные в контрагентах, справочниках, документах предварительными проверками + // даже при отсутствующем доступе к веб-сервису. + // В отчет из-за большого количества данных при отсутствующем доступе к веб-сервису данные не проверяем. + Если ЕстьДоступКВебСервисуФНС + ИЛИ НЕ ЕстьДоступКВебСервисуФНС И НЕ ЭтоПроверкаОтчета Тогда + + // Приведение данных к нужному формату, выявление записей с ошибками. + ПодготовитьДанныеИВыполнитьПредварительнуюПроверку(ДанныеКонтрагентов, ДополнительныеПараметры); + КонецЕсли; - ИспользоватьКэш = Истина; - Если ДанныеКонтрагентов.Количество() = 1 И ДанныеКонтрагентов.Колонки.Найти("ДополнительныеПараметры") <> Неопределено Тогда - Если ТипЗнч(ДанныеКонтрагентов) = Тип("Структура") И ДанныеКонтрагентов[0].ДополнительныеПараметры.Свойство("НеИспользоватьКэш") Тогда - ИспользоватьКэш = НЕ ДанныеКонтрагентов[0].ДополнительныеПараметры.Свойство("НеИспользоватьКэш"); - КонецЕсли; + Если ЕстьДоступКВебСервисуФНС И НЕ БратьСостоянияТолькоИзКэша Тогда + // Получение результатов проверки от веб-сервиса. + // Проверяем только тех контрагентов, у которых неопределено состояние существования и у которых нет ошибок. + Отбор = Новый Структура(); + Отбор.Вставить("Состояние", Перечисления.СостоянияСуществованияКонтрагента.ПустаяСсылка()); + ПолучитьРезультатПроверкиВебСервисом(ДанныеКонтрагентов, Отбор); КонецЕсли; - // - // Если по некоторым контрагентам можно определить, что они не существуют, не обращаясь к сервису, то к сервису по ним - // обращаться не будем. - Если ЭтоПроверкаСправочника И ИспользоватьКэш Тогда - ПолучитьСостоянияКонтрагентовИзКэша(ДанныеКонтрагентов); - КонецЕсли; - - // Приведение данных к нужному формату, выявление записей с ошибками. - ПодготовитьДанныеКПроверке(ДанныеКонтрагентов); - - // Получение результатов проверки от веб-сервиса. - // Проверяем только тех контрагентов, у которых неопределено состояние существования и у которых нет ошибок. - Отбор = Новый Структура(); - Отбор.Вставить("Состояние", Перечисления.СостоянияСуществованияКонтрагента.ПустаяСсылка()); - ПолучитьРезультатПроверкиВебСервисом(ДанныеКонтрагентов, Отбор); - - // Сохраняем результаты проверки, если это справочник. - Если ЭтоПроверкаСправочника Тогда - УстановитьПривилегированныйРежим(Истина); - СохранитьРезультатыПроверкиСправочника(ДанныеКонтрагентов, АдресХранилища, СохранятьРезультатСразуПослеПроверки); - КонецЕсли; + // Даже при отсутствии доступа к веб-сервису запоминаем результат, так + // как предварительная проверка выявляет ошибки и без доступа к веб-сервису. + ЗапомнитьРезультатыПроверкиСправочника(ДанныеКонтрагентов, ДополнительныеПараметры); КонецПроцедуры -// Процедура - Метод фонового задания по проверки контрагентов в документе. +// Метод фонового задания по проверки контрагентов в документе. // // Параметры: // Параметры - Структура - Параметры фонового задания. Ключи: @@ -132,28 +141,25 @@ ПроверяемыеКонтрагенты = Параметры.ДанныеКонтрагентов; АдресХранилища = Параметры.АдресХранилища; - // Если нет доступа к веб-сервису, то проверку не выполняем. - Если ЕстьДоступКВебСервисуФНС() Тогда - - ДанныеКонтрагентов = ПроверяемыеКонтрагенты.Скопировать(); - ПроверитьКонтрагентов(ДанныеКонтрагентов, , Ложь); - - ЗаполнитьСостояния(ПроверяемыеКонтрагенты, ДанныеКонтрагентов); - - Результат = Новый Структура; - Результат.Вставить("ДанныеКонтрагентов", ПроверяемыеКонтрагенты); - Иначе - Результат = Новый Структура; - Результат.Вставить("НетДоступаКВебСервисуФНС", Истина); - КонецЕсли; + ДанныеКонтрагентов = ПроверяемыеКонтрагенты.Скопировать(); + ДополнительныеПараметры = Новый Структура(); + ДополнительныеПараметры.Вставить("ЭтоПроверкаДокумента", Истина); + + ПроверитьВебСервисомФНС(ДанныеКонтрагентов, ДополнительныеПараметры); + + ЗаполнитьСостоянияВДокументе(ПроверяемыеКонтрагенты, ДанныеКонтрагентов); + + Результат = Новый Структура; + Результат.Вставить("ДанныеКонтрагентов", ПроверяемыеКонтрагенты); + Результат.Вставить("ЕстьДоступКВебСервисуФНС", ДополнительныеПараметры.ЕстьДоступКВебСервисуФНС); Результат.Вставить("СохранятьРезультатСразуПослеПроверки", Параметры.СохранятьРезультатСразуПослеПроверки); ПоместитьВоВременноеХранилище(Результат, АдресХранилища); КонецПроцедуры -// Процедура - метод регламентного задания по проверке контрагентов в справочнике. +// Метод регламентного задания по проверке контрагентов в справочнике. // В модели сервиса обновляет состояния контрагентов по каждой записи регистра. // В локальном режима записывает недостающих контрагентов в регистр и обновляет состояния по каждой записи регистра. Процедура ПроверитьКонтрагентовРегламентноеЗадание() Экспорт @@ -171,8 +177,15 @@ | СостоянияКонтрагентов.Контрагент, | СостоянияКонтрагентов.ИНН, | СостоянияКонтрагентов.КПП, + | ЛОЖЬ КАК ЭтоИностранныйКонтрагент, + | ВЫБОР + | КОГДА ПОДСТРОКА(СостоянияКонтрагентов.ИНН, 12, 1) <> """" + | ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ КАК ЭтоЮридическоеЛицо, + | &Дата КАК Дата, | СостоянияКонтрагентов.ОбластьДанныхВспомогательныеДанные КАК ОбластьДанныхВспомогательныеДанные, - | &Дата КАК Дата + | ЗНАЧЕНИЕ(Перечисление.СостоянияСуществованияКонтрагента.ПустаяСсылка) КАК Состояние |ИЗ | РегистрСведений.СостоянияКонтрагентов КАК СостоянияКонтрагентов |ГДЕ @@ -194,7 +207,10 @@ ДанныеКонтрагентов.Колонки.Добавить("ДополнительныеПараметры", Новый ОписаниеТипов("Структура")); // Выполняется проверка только тех ИНН и КПП, которые записаны в регистр. - ПроверитьКонтрагентов(ДанныеКонтрагентов); + ДополнительныеПараметры = Новый Структура(); + ДополнительныеПараметры.Вставить("ЭтоПроверкаСправочника", Истина); + + ПроверитьВебСервисомФНС(ДанныеКонтрагентов, ДополнительныеПараметры); // Дозаписываем недостающие ИНН и КПП в регистр в локальном режиме. Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда @@ -203,7 +219,7 @@ КонецПроцедуры -// Процедура - Выполняет первоначальное заполнение регистра на основе справочника контрагентов. +// Выполняет первоначальное заполнение регистра на основе справочника контрагентов. // Заполнение выполняется: // 1. После ручного включения проверки фоновым заданием. // 2. В режиме сервисов - обновлением ИБ в каждой области отдельно. @@ -236,7 +252,7 @@ КонецПроцедуры -// Процедура - Запуск фонового задания по проверке контрагентов после +// Запуск фонового задания по проверке контрагентов после // включения проверки в предложении на подключение или из настроек. Процедура ПроверитьКонтрагентовПослеВключенияПроверкиФоновоеЗадание() Экспорт @@ -259,7 +275,7 @@ КонецПроцедуры -// Процедура - Контрагенты проверяются по данным ФНС. +// Вспомогательный API. Контрагенты проверяются по данным ФНС. // По завершению проверки в переданную таблицу добавляется колонка c состоянием контрагента. // // Параметры: @@ -269,36 +285,36 @@ // - ИзКэша - результат проверки выбирается только из кэша. // - АктуальныеДанные - результат проверки получается только на основе данных, возвращенных веб-сервисом проверки. // - Смешанный - сначала выбираются данные из кэша, затем идет обращение к веб-сервису проверки. -Процедура ВыполнитьПроверкуКонтрагентов(ПроверяемыеКонтрагенты, Знач ВидПроверки = "Смешанный") Экспорт - - ВидПроверки = ВРег(ВидПроверки); +Процедура ВыполнитьПроверкуКонтрагентов(ПроверяемыеКонтрагенты, Знач ВидПроверки = "Смешанный", Знач ДополнительныеПараметры = Неопределено) Экспорт // Проверка корректности переданного параметра. - Если ВидПроверки <> "ИЗКЭША" И ВидПроверки <> "АКТУАЛЬНЫЕДАННЫЕ" И ВидПроверки <> "СМЕШАННЫЙ" Тогда + Если ВидПроверки <> "ИзКэша" И ВидПроверки <> "АктуальныеДанные" И ВидПроверки <> "Смешанный" Тогда ВызватьИсключение(НСтр("ru = 'Недопустимое значение параметра (параметр номер ''2'')'")); КонецЕсли; - // Добавляем колонку с результатом проверки. - ПроверяемыеКонтрагенты.Колонки.Добавить("Состояние",Новый ОписаниеТипов("ПеречислениеСсылка.СостоянияСуществованияКонтрагента")); + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = Новый Структура; + КонецЕсли; + ДополнительныеПараметры.Вставить("ИзКэша", ВидПроверки = "ИзКэша"); + ДополнительныеПараметры.Вставить("АктуальныеДанные", ВидПроверки = "АктуальныеДанные"); + ДополнительныеПараметры.Вставить("Смешанный", ВидПроверки = "Смешанный"); + + Если ПроверяемыеКонтрагенты.Колонки.Найти("Состояние") = Неопределено Тогда + ПроверяемыеКонтрагенты.Колонки.Добавить("Состояние",Новый ОписаниеТипов("ПеречислениеСсылка.СостоянияСуществованияКонтрагента")); + КонецЕсли; + ДанныеКонтрагентов = ПроверяемыеКонтрагенты.Скопировать(); - // Приведение данных к нужному формату, выявление записей с ошибками. - ПодготовитьДанныеКПроверке(ДанныеКонтрагентов); + ПроверитьВебСервисомФНС(ДанныеКонтрагентов, ДополнительныеПараметры); - Если ВидПроверки = "ИЗКЭША" ИЛИ ВидПроверки = "СМЕШАННЫЙ" Тогда - ПолучитьСостоянияКонтрагентовИзКэша(ДанныеКонтрагентов, Истина); + ЭтоПроверкаДокумента = ДополнительныеПараметры.Свойство("ЭтоПроверкаДокумента") И ДополнительныеПараметры.ЭтоПроверкаДокумента; + + Если ЭтоПроверкаДокумента Тогда + ЗаполнитьСостоянияВДокументе(ПроверяемыеКонтрагенты, ДанныеКонтрагентов); + Иначе + ЗаполнитьСостояния(ПроверяемыеКонтрагенты, ДанныеКонтрагентов); КонецЕсли; - - // Получение результатов проверки от веб-сервиса. - // Проверяем только тех контрагентов, у которых неопределено состояние существования и у которых нет ошибок. - Если ВидПроверки = "АКТУАЛЬНЫЕДАННЫЕ" ИЛИ ВидПроверки = "СМЕШАННЫЙ" Тогда - Отбор = Новый Структура(); - Отбор.Вставить("Состояние", Перечисления.СостоянияСуществованияКонтрагента.ПустаяСсылка()); - ПолучитьРезультатПроверкиВебСервисом(ДанныеКонтрагентов, Отбор); - КонецЕсли; - - ЗаполнитьСостояния(ПроверяемыеКонтрагенты, ДанныеКонтрагентов); - + КонецПроцедуры #КонецОбласти @@ -307,7 +323,7 @@ #Область ВспомогательныеПроцедурыИФункции -// Процедура - Добавление описания расположения контрагента в документе в таблицу описаний. +// Добавление описания расположения контрагента в документе в таблицу описаний. // // Параметры: // Описание - ТаблицаЗначений - таблица, хранящая описание расположения контрагентов в документе. @@ -332,7 +348,7 @@ КонецПроцедуры -// Процедура - Добавление записи к таблице описания расположения контрагентов в табличных частях документа. +// Добавление записи к таблице описания расположения контрагентов в табличных частях документа. // // Параметры: // Форма - УправляемаяФорма - Форма документа, в котором выполняется проверка контрагентов. @@ -364,7 +380,7 @@ КонецПроцедуры -// Процедура - Устанавливает текст и видимость предупреждения про тестовый режим работы сервиса. +// Устанавливает текст и видимость предупреждения про тестовый режим работы сервиса. Процедура УстановитьВидимостьИЗаголовокПредупрежденияПроТестовыйРежим(Элемент) Экспорт Если ТестовыйРежимРаботыСервисаЗавершился() Тогда @@ -372,12 +388,12 @@ Иначе Элемент.Видимость = Истина; Элемент.Заголовок = - НСтр("ru = 'В настоящее время веб-сервис ФНС работает в тестовом режиме'"); + НСтр("ru = 'В настоящее время веб-сервис ФНС работает в тестовом режиме.'"); КонецЕсли; КонецПроцедуры -// Функция - Тестовый режим работы сервиса завершился. +// Тестовый режим работы сервиса завершился. // Возвращаемое значение: // Булево - Истина, если тестовый режим работы сервиса завершился. Функция ТестовыйРежимРаботыСервисаЗавершился() Экспорт @@ -386,7 +402,7 @@ КонецФункции -// Процедура - Установка надписей в панели проверки контрагентов в отчета при создании на сервере. +// Установка надписей в панели проверки контрагентов в отчета при создании на сервере. // // Параметры: // Форма - УправляемаяФорма - Форма отчета, в котором выводится результат проверки контрагентов. @@ -424,7 +440,7 @@ #Область ПроверкаКонтрагентовВДокументах -// Процедура - Запуск фонового задания по проверке контрагента. +// Запуск фонового задания по проверке контрагента. // // Параметры: // Форма - УправляемаяФорма - Форма документа, в котором выполняется проверка контрагентов. @@ -436,12 +452,10 @@ // - Булево - если это запуск проверки контрагента при создании на сервере. Процедура ПроверитьКонтрагентовВДокументеФоновоеЗадание(Форма, ПараметрыФоновогоЗадания) Экспорт - ОчиститьРезультатыПредыдущихПроверок(Форма, ПараметрыФоновогоЗадания); - ПоказатьПредварительныйРезультатПроверкиКонтрагентовИзКэша(Форма, ПараметрыФоновогоЗадания); - - // Заполняем данные проверяемых контрагентов. - ДанныеКонтрагентов = ДанныеКонтрагентовВДокументе(Форма); - ДанныеКонтрагентов.ЗаполнитьЗначения(Перечисления.СостоянияСуществованияКонтрагента.ПустаяСсылка(), "Состояние"); + ДанныеКонтрагентов = ДанныеКонтрагентовВДокументеДляПроверкиФоновымЗаданием(Форма, ПараметрыФоновогоЗадания); + Если ДанныеКонтрагентов = Неопределено Тогда + Возврат; + КонецЕсли; Если ДанныеКонтрагентов.Количество() > 0 Тогда @@ -454,9 +468,9 @@ И ПараметрыФоновогоЗадания.СохранятьРезультатСразуПослеПроверки; ПараметрыЗапуска = Новый Структура; - ПараметрыЗапуска.Вставить("ДанныеКонтрагентов", ДанныеКонтрагентов); - ПараметрыЗапуска.Вставить("АдресХранилища", Форма.РеквизитыПроверкиКонтрагентов.АдресХранилища); - ПараметрыЗапуска.Вставить("СохранятьРезультатСразуПослеПроверки", СохранятьРезультатСразуПослеПроверки); + ПараметрыЗапуска.Вставить("ДанныеКонтрагентов", ДанныеКонтрагентов); + ПараметрыЗапуска.Вставить("АдресХранилища", Форма.РеквизитыПроверкиКонтрагентов.АдресХранилища); + ПараметрыЗапуска.Вставить("СохранятьРезультатСразуПослеПроверки", СохранятьРезультатСразуПослеПроверки); Параметры = Новый Массив; Параметры.Добавить(ПараметрыЗапуска); @@ -487,39 +501,13 @@ КонецПроцедуры -Процедура ПоказатьПредварительныйРезультатПроверкиКонтрагентовИзКэша(Форма, ПараметрыФоновогоЗадания) - - ДанныеКонтрагентов = ДанныеКонтрагентовВДокументе(Форма); - ПроверяемыеКонтрагенты = ДанныеКонтрагентов.Скопировать(); - - СвернутьДанныеКонтрагентов(ДанныеКонтрагентов); - ПолучитьСостоянияКонтрагентовИзКэша(ДанныеКонтрагентов, Истина); - - ЗаполнитьСостояния(ПроверяемыеКонтрагенты, ДанныеКонтрагентов); - - СохранятьРезультатСразуПослеПроверки = ПараметрыФоновогоЗадания.Свойство("СохранятьРезультатСразуПослеПроверки") - И ПараметрыФоновогоЗадания.СохранятьРезультатСразуПослеПроверки; - - // Формируем результат в формате, необходимом для отображения в документе. - Результат = Новый Структура; - Результат.Вставить("ДанныеКонтрагентов", ПроверяемыеКонтрагенты); - Результат.Вставить("СохранятьРезультатСразуПослеПроверки", СохранятьРезультатСразуПослеПроверки); - - Форма.РеквизитыПроверкиКонтрагентов.АдресХранилища = ПоместитьВоВременноеХранилище(Результат, Новый УникальныйИдентификатор); - ОтобразитьРезультатПроверкиКонтрагентаВДокументе(Форма); - - Форма.РеквизитыПроверкиКонтрагентов.АдресДанныхКонтрагентовИзКэша = ПоместитьВоВременноеХранилище(ПроверяемыеКонтрагенты, Новый УникальныйИдентификатор); - Форма.РеквизитыПроверкиКонтрагентов.АдресХранилища = Неопределено; - -КонецПроцедуры - -// Процедура - Отображение результата проверки контрагентов в документе. +// Отображение результата проверки контрагентов в документе. // // Параметры: // Форма - УправляемаяФорма - Форма документа, в котором выполняется проверка контрагентов. Процедура ОтобразитьРезультатПроверкиКонтрагентаВДокументе(Форма) Экспорт - Если Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется Тогда + Если Форма.РеквизитыПроверкиКонтрагентов.ИнициализацияВыполненаПолностью Тогда СтандартнаяОбработка = Истина; РаботаСКонтрагентамиПереопределяемый.ОтобразитьРезультатПроверкиКонтрагентаВДокументе(Форма, СтандартнаяОбработка); @@ -529,35 +517,36 @@ Возврат; КонецЕсли; - ПредотвратитьСбросРедактируемогоЗначения(Форма); + ПроверкаКонтрагентовКлиентСервер.ПредотвратитьСбросРедактируемогоЗначения(Форма); СостояниеПроверки = Перечисления.СостоянияПроверкиКонтрагентов.ПроверкаВыполнена; Если ЗначениеЗаполнено(Форма.РеквизитыПроверкиКонтрагентов.АдресХранилища) И ЭтоАдресВременногоХранилища(Форма.РеквизитыПроверкиКонтрагентов.АдресХранилища) Тогда + РезультатРаботыФоновогоЗадания = ПолучитьИзВременногоХранилища(Форма.РеквизитыПроверкиКонтрагентов.АдресХранилища); Если РезультатРаботыФоновогоЗадания <> Неопределено Тогда - Если РезультатРаботыФоновогоЗадания.Свойство("НетДоступаКВебСервисуФНС") Тогда - // Нет доступа к сервису - СостояниеПроверки = Перечисления.СостоянияПроверкиКонтрагентов.НетДоступаКВебСервису; - Иначе + ЕстьДоступКВебСервисуФНС = РезультатРаботыФоновогоЗадания.ЕстьДоступКВебСервисуФНС; + + Если ЕстьДоступКВебСервисуФНС Тогда СостояниеПроверки = Перечисления.СостоянияПроверкиКонтрагентов.ПроверкаВыполнена; + Иначе + СостояниеПроверки = Перечисления.СостоянияПроверкиКонтрагентов.НетДоступаКВебСервису; + КонецЕсли; - // Фоновое задание отработало - ДанныеКонтрагентов = РезультатРаботыФоновогоЗадания.ДанныеКонтрагентов; - ЗапомнитьРезультатПроверкиКонтрагентов(Форма, ДанныеКонтрагентов); + // Фоновое задание отработало + ДанныеКонтрагентов = РезультатРаботыФоновогоЗадания.ДанныеКонтрагентов; + ЗапомнитьРезультатПроверкиКонтрагентов(Форма, ДанныеКонтрагентов); + + Если РезультатРаботыФоновогоЗадания.СохранятьРезультатСразуПослеПроверки Тогда - Если РезультатРаботыФоновогоЗадания.СохранятьРезультатСразуПослеПроверки Тогда - - // Определение объекта и ссылки. - ОбъектИСсылкаПоФорме = ПроверкаКонтрагентовКлиентСервер.ОбъектИСсылкаПоФорме(Форма); - ДокументОбъект = ОбъектИСсылкаПоФорме.Объект; - - СохранитьРезультатПроверкиКонтрагентов(Форма, ДокументОбъект); - - КонецЕсли; + // Определение объекта и ссылки. + ОбъектИСсылкаПоФорме = ПроверкаКонтрагентовКлиентСервер.ОбъектИСсылкаПоФорме(Форма); + ДокументОбъект = ОбъектИСсылкаПоФорме.Объект; + + СохранитьРезультатПроверкиКонтрагентов(Форма, ДокументОбъект); КонецЕсли; @@ -576,7 +565,7 @@ КонецПроцедуры -// Процедура - Устанавливаются параметры динамического списка документов и применяется условное оформление. +// Устанавливаются параметры динамического списка документов и применяется условное оформление. // // Параметры: // Список - ДинамическийСписок - Список документов. @@ -587,7 +576,7 @@ КонецПроцедуры -// Процедура - Запоминание результатов проверки контрагентов в дополнительные свойства для последующего сохранения +// Запоминание результатов проверки контрагентов в дополнительные свойства для последующего сохранения // в регистр при помощи подписки на события. // // Параметры: @@ -595,7 +584,7 @@ // ТекущийОбъект - ДокументОбъект - документ, запись которого выполняется. Процедура ПередЗаписьюНаСервереДокумент(Форма, ТекущийОбъект) Экспорт - Если Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется Тогда + Если Форма.РеквизитыПроверкиКонтрагентов.ИнициализацияВыполненаПолностью Тогда // Для документов с табличными частями. Если ПроверкаКонтрагентовКлиентСервер.ЭтоДокументСКонтрагентомВТабличнойЧасти(Форма) Тогда @@ -609,7 +598,7 @@ КонецПроцедуры -// Процедура - Запуск проверки контрагента, установка условного оформления. +// Запуск проверки контрагента, установка условного оформления. // // Параметры: // Форма - УправляемаяФорма - Форма документа, в котором выполняется проверка контрагентов. @@ -623,41 +612,33 @@ ИнициализироватьРеквизитыФормыДокумент(Форма); - Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется = ПроверкаКонтрагентовВызовСервера.ИспользованиеПроверкиВозможно(); - Форма.РеквизитыПроверкиКонтрагентов.НужноПоказатьПредложениеВключитьПроверкуКонтрагентов = - НужноПоказатьПредложениеВключитьПроверкуКонтрагентов(); - - // Определение объекта и ссылки. - ОбъектИСсылкаПоФорме = ПроверкаКонтрагентовКлиентСервер.ОбъектИСсылкаПоФорме(Форма); - ДокументСсылка = ОбъектИСсылкаПоФорме.Ссылка; - + // В режиме проверки по кнопке инициализацию при открытии не выполняем. Если Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется Тогда - УправлениеФормойПриСозданииНаСервере(Форма); + УправлениеФормойДокументаПриИнициализации(Форма); - // Фоновое задание не запускаем, если это новый документ. - Если ЗначениеЗаполнено(ДокументСсылка) ИЛИ ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда - - ДополнительныеПараметры = Истина; - ПараметрыФоновогоЗадания = ПроверкаКонтрагентовКлиентСервер.ПараметрыФоновогоЗадания(ДополнительныеПараметры); - Форма.ПроверитьКонтрагентовФоновоеЗадание(ПараметрыФоновогоЗадания); + // Определение объекта и ссылки. + Если НЕ ЭтоМедленныйРежимРаботы() Тогда + ОбъектИСсылкаПоФорме = ПроверкаКонтрагентовКлиентСервер.ОбъектИСсылкаПоФорме(Форма); + ДокументСсылка = ОбъектИСсылкаПоФорме.Ссылка; + + Форма.РеквизитыПроверкиКонтрагентов.ЭтотДокументБылСОшибкой = ЭтоДокументСОшибкамиПроверкиКонтрагентов(ДокументСсылка); + ПоказатьПредварительныйРезультатИзКэшаПриОткрытииДокумента(Форма); КонецЕсли; - Иначе - ПрорисоватьСостоянияКонтрагентовВДокументе(Форма, Перечисления.СостоянияПроверкиКонтрагентов.ПроверкаНеИспользуется); КонецЕсли; КонецПроцедуры -// Процедура - Восстановление результатов проверки контрагентов в табличной части после записи. +// Восстановление результатов проверки контрагентов в табличной части после записи. // // Параметры: // Форма - УправляемаяФорма - Форма документа, в котором выполняется проверка контрагентов. // ТекущийОбъект - ДокументОбъект - документ, запись которого выполняется. Процедура ПослеЗаписиНаСервере(Форма, ТекущийОбъект) Экспорт - Если Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется Тогда + Если Форма.РеквизитыПроверкиКонтрагентов.ИнициализацияВыполненаПолностью Тогда Если ПроверкаКонтрагентовКлиентСервер.ЭтоДокументСКонтрагентомВТабличнойЧасти(Форма) Тогда ВосстановитьРезультатПроверкиКонтрагентовВТабличныхЧастяхПослеЗаписи(Форма, ТекущийОбъект); @@ -667,85 +648,31 @@ КонецПроцедуры -// Процедура - Сохранение результатов проверки контрагентов в регистр при записи. +// Сохранение результатов проверки контрагентов в регистр при записи. // // Параметры: // Форма - УправляемаяФорма - Форма документа, в котором выполняется проверка контрагентов. // ТекущийОбъект - ДокументОбъект - документ, запись которого выполняется. Процедура ПриЗаписиНаСервере(Форма, ТекущийОбъект) Экспорт - Если Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется Тогда + Если Форма.РеквизитыПроверкиКонтрагентов.ИнициализацияВыполненаПолностью Тогда + СохранитьРезультатПроверкиКонтрагентов(Форма, ТекущийОбъект); КонецЕсли; КонецПроцедуры -// Процедура - Вспомогательный API. Инициализировать реквизиты проверки контрагента в форме документа. +// Вспомогательный API. Инициализировать реквизиты проверки контрагента в форме документа. // // Параметры: // Форма - УправляемаяФорма - Форма документа, в котором выполняется проверка контрагентов. Процедура ИнициализироватьРеквизитыФормыДокумент(Форма) Экспорт - НовыеРеквизиты = Новый Структура; - - ЭтоДокументСКонтрагентомВШапке = ПроверкаКонтрагентовКлиентСервер.ЭтоДокументСКонтрагентомВШапке(Форма); - ЭтоДокументСКонтрагентомВТабличнойЧасти = ПроверкаКонтрагентовКлиентСервер.ЭтоДокументСКонтрагентомВТабличнойЧасти(Форма); - ЭтоДокументСоСчетомФактуройВПодвале = ПроверкаКонтрагентовКлиентСервер.ЭтоДокументСоСчетомФактуройВПодвале(Форма); - ЭтоСчетФактура = ПроверкаКонтрагентовКлиентСервер.ЭтоСчетФактура(Форма); - - // Служебный реквизит для работы фонового задания. - НовыеРеквизиты.Вставить("АдресХранилища"); - // Служебный реквизит для работы фонового задания. - НовыеРеквизиты.Вставить("ИдентификаторЗадания", Новый УникальныйИдентификатор); - // Служебный реквизит для работы фонового задания. - НовыеРеквизиты.Вставить("ЗаданиеВыполнено", Истина); - // Включена ли проверка и есть ли доступ на использование проверки. - НовыеРеквизиты.Вставить("ПроверкаИспользуется", Ложь); - // Результат проверки контрагентов в документе. Содержит ли документ некорректных контрагентов. - НовыеРеквизиты.Вставить("ЭтоДокументСОшибкой", Ложь); - // Результат проверки контрагентов в документе. Итоговое состояние контрагентов в документе. - НовыеРеквизиты.Вставить("СостояниеКонтрагентов", Перечисления.СостоянияПроверкиКонтрагентов.ПустаяСсылка()); - // Служебный реквизит - НовыеРеквизиты.Вставить("НужноПоказатьПредложениеВключитьПроверкуКонтрагентов"); - // Позволяет не прорисовывать результат проверки контрагентов, - // если начато редактирование табличной части документа. - // Позволяет избежать ошибки сброса редактируемого значений при выводе результатов проверки. - НовыеРеквизиты.Вставить("ОтложитьПрорисовкуРезультатаПроверкиКонтрагентов", Ложь); - // Служебный реквизит - НовыеРеквизиты.Вставить("АдресДанныхКонтрагентовИзКэша", Неопределено); - - Если ЭтоДокументСКонтрагентомВШапке Тогда - // Результат проверки контрагента в шапке документа. - НовыеРеквизиты.Вставить("СостояниеКонтрагента", Перечисления.СостоянияПроверкиКонтрагентов.ПустаяСсылка()); - КонецЕсли; - - // Результат проверки контрагентов в счете-фактуре. - Если ЭтоДокументСоСчетомФактуройВПодвале ИЛИ ЭтоСчетФактура Тогда - // Итоговое состояние контрагентов в счете-фактуре. - НовыеРеквизиты.Вставить("СостояниеКонтрагентовВСчетеФактуре", Перечисления.СостоянияПроверкиКонтрагентов.ПустаяСсылка()); - // Итоговое состояние счета-фактуры. - НовыеРеквизиты.Вставить("ЭтоСчетФактураСОшибкой", Ложь); - КонецЕсли; - - Если ЭтоСчетФактура Тогда - - // Состояния проверки каждого контрагента в счете-фактуре. - Описание = ОписаниеДокументов(Форма); - Для Каждого СтрокаОписания Из Описание Цикл - ИмяРеквизитаСчетаФактуры = ИмяРеквизита(Форма, СтрокаОписания.Элемент.Имя); - НовыеРеквизиты.Вставить(ИмяРеквизитаСостоянияКонтрагентаВСчетеФактуре(ИмяРеквизитаСчетаФактуры), - Перечисления.СостоянияПроверкиКонтрагентов.ПустаяСсылка()); - КонецЦикла; - - КонецЕсли; - - РаботаСКонтрагентамиПереопределяемый.ДополнитьРеквизитыФормыДокумент(Форма, НовыеРеквизиты); - - Форма.РеквизитыПроверкиКонтрагентов = НовыеРеквизиты; + ИнициализироватьРеквизитыПроверкиКонтрагентовВДокументе(Форма, Ложь); КонецПроцедуры -// Функция - Формирует описание документа, согласно которому осуществляется проверка контрагентов и вывод +// Формирует описание документа, согласно которому осуществляется проверка контрагентов и вывод // информации о результатах проверки в форму документа. // // Параметры: @@ -791,8 +718,10 @@ Если Форма.РеквизитыПроверкиКонтрагентов <> Неопределено Тогда Для Каждого СтрокаОписания Из Описание Цикл - ИмяРеквизитаСчетаФактуры = ИмяРеквизита(Форма, СтрокаОписания.Элемент.Имя); - СтрокаОписания.СостояниеКонтрагента = Форма.РеквизитыПроверкиКонтрагентов[ИмяРеквизитаСостоянияКонтрагентаВСчетеФактуре(ИмяРеквизитаСчетаФактуры)]; + ИмяРеквизитаСчетаФактуры = ИмяРеквизита(Форма, СтрокаОписания.Элемент.Имя); + Свойство = ИмяРеквизитаСостоянияКонтрагентаВСчетеФактуре(ИмяРеквизитаСчетаФактуры); + + СтрокаОписания.СостояниеКонтрагента = Форма.РеквизитыПроверкиКонтрагентов[Свойство]; КонецЦикла; КонецЕсли; @@ -805,7 +734,7 @@ КонецФункции -// Процедура - Заполнение данных контрагента в документе. +// Заполнение данных контрагента в документе. // // Параметры: // Ссылка - ДокументСсылка - Документ, в котором выполняется проверка контрагентов. @@ -834,7 +763,7 @@ КонецПроцедуры -// Процедура - Определяет итоговое состояние контрагентов в документе. +// Определяет итоговое состояние контрагентов в документе. // // Параметры: // ДанныеКонтрагентов - ТаблицаЗначений - Содержит данные проверяемых контрагентов. @@ -848,7 +777,7 @@ Функция ИтоговоеСостояниеКонтрагентаВДокументе(ДанныеКонтрагентов, Отбор = Неопределено) Экспорт // Инициализируем - СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустаяСсылка"); + СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустаяСсылка"); ЕстьНепустойКонтрагент = Ложь; КонтрагентовНесколько = Ложь; @@ -859,11 +788,7 @@ ДанныеПоКонтрагентам = ДанныеКонтрагентов.Скопировать(Отбор); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - ДанныеПоКонтрагентам.Свернуть("Ссылка, Контрагент, ИНН, КПП, Дата, ОбластьДанныхВспомогательныеДанные, Состояние"); - Иначе - ДанныеПоКонтрагентам.Свернуть("Ссылка, Контрагент, ИНН, КПП, Дата, Состояние"); - КонецЕсли; + СвернутьДанныеКонтрагентов(ДанныеПоКонтрагентам, "Ссылка"); Если ДанныеПоКонтрагентам.Количество() = 1 Тогда @@ -891,25 +816,15 @@ // Состояние существования Если ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоСостояниеНедействующегоКонтрагента(ДанныеПоКонтрагенту.Состояние) Тогда ЕстьНедействующиеКонтрагенты = Истина; - КонецЕсли; - - Если ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоСостояниеДействующегоКонтрагента(ДанныеПоКонтрагенту.Состояние) - И ДанныеПоКонтрагенту.Состояние <> ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных") - И ДанныеПоКонтрагенту.Состояние <> ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустаяСсылка") - И ДанныеПоКонтрагенту.Состояние <> ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентНеПодлежитПроверке") Тогда - ЕстьДействующиеКонтрагенты = Истина; - КонецЕсли; - - Если ДанныеПоКонтрагенту.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных") Тогда + ИначеЕсли ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоСостояниеКонтрагентаСОшибкой(ДанныеПоКонтрагенту.Состояние) Тогда ЕстьКонтрагентыСОшибками = Истина; - КонецЕсли; - - Если ДанныеПоКонтрагенту.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентНеПодлежитПроверке") Тогда + ИначеЕсли ДанныеПоКонтрагенту.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентНеПодлежитПроверке") Тогда ЕстьКонтрагентыНеПодлежащиеПроверке = Истина; - КонецЕсли; - - Если ДанныеПоКонтрагенту.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустойИННИлиКПП") Тогда + ИначеЕсли ДанныеПоКонтрагенту.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустойИННИлиКПП") Тогда ЕстьКонтрагентыСПустымИННКПП = Истина; + ИначеЕсли ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоСостояниеДействующегоКонтрагента(ДанныеПоКонтрагенту.Состояние) + И ДанныеПоКонтрагенту.Состояние <> ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустаяСсылка") Тогда + ЕстьДействующиеКонтрагенты = Истина; КонецЕсли; КонецЦикла; @@ -944,27 +859,53 @@ КонецФункции - #КонецОбласти #Область ПроверкаКонтрагентовВОтчетах -// Процедура - Инициализация данных для проверки. +// Инициализация данных для проверки. // // Параметры: // Форма - УправляемаяФорма - Форма отчета, в котором выполняется проверка контрагентов. Процедура ПередФормированиемОтчета(Форма) Экспорт Если Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется Тогда - Форма.РеквизитыПроверкиКонтрагентов.ЕстьДоступКВебСервисуФНС = ЕстьДоступКВебСервисуФНС(); - Форма.РеквизитыПроверкиКонтрагентов.ВыведеныВсеСтроки = Истина; - Форма.ПроверкаКонтрагентовПереключательРежимаОтображения = "Все"; - Форма.ПроверкаКонтрагентовНедействующиеКонтрагенты.Очистить(); + + Форма.РеквизитыПроверкиКонтрагентов.ЕстьДоступКВебСервисуФНС = ЕстьДоступКВебСервисуФНС(); + Форма.РеквизитыПроверкиКонтрагентов.ВыведеныВсеСтроки = Истина; + Форма.ПроверкаКонтрагентовПереключательРежимаОтображения = "Все"; + + Если Форма.РеквизитыПроверкиКонтрагентов.ОтчетСРазделами Тогда + + Форма.РеквизитыПроверкиКонтрагентов.НедействующиеКонтрагентыКоличество = 0; + Форма.РеквизитыПроверкиКонтрагентов.КонтрагентыСПустымСостояниемКоличество = 0; + + Если ЭтоАдресВременногоХранилища(Форма.РеквизитыПроверкиКонтрагентов.АдресХранилища) Тогда + УдалитьИзВременногоХранилища(Форма.РеквизитыПроверкиКонтрагентов.АдресХранилища); + КонецЕсли; + + Если ЭтоАдресВременногоХранилища(Форма.РеквизитыПроверкиКонтрагентов.АдресДанныхОтчета) Тогда + УдалитьИзВременногоХранилища(Форма.РеквизитыПроверкиКонтрагентов.АдресДанныхОтчета); + КонецЕсли; + + Если ЭтоАдресВременногоХранилища(Форма.РеквизитыПроверкиКонтрагентов.АдресРезультатаЗаполненияОтчета) Тогда + УдалитьИзВременногоХранилища(Форма.РеквизитыПроверкиКонтрагентов.АдресРезультатаЗаполненияОтчета); + КонецЕсли; + + Форма.РеквизитыПроверкиКонтрагентов.АдресХранилища = ""; + Форма.РеквизитыПроверкиКонтрагентов.АдресДанныхОтчета = ""; + Форма.РеквизитыПроверкиКонтрагентов.АдресРезультатаЗаполненияОтчета = ""; + + Иначе + + Форма.ПроверкаКонтрагентовНедействующиеКонтрагенты.Очистить(); + + КонецЕсли; КонецЕсли; КонецПроцедуры -// Процедура - Добавление контрагента на проверку. +// Добавление контрагента на проверку. // // Параметры: // СтруктураПараметров - Структура - Параметры формирования отчета. @@ -975,7 +916,8 @@ // ИНН - Строка - ИНН контрагента. // КПП - Строка - ИНН контрагента. // Дата - Дата - Дата, на которую необходимо выполнять проверку контрагента. -Процедура ДобавитьКонтрагентаНаПроверку(СтруктураПараметров, НомерСтрокиТабличногоДокумента, Контрагент, ИНН, КПП, Дата) Экспорт +// НомерРаздела - Число - Номер раздела отчета, в котором выводится контрагент. +Процедура ДобавитьКонтрагентаНаПроверку(СтруктураПараметров, НомерСтрокиТабличногоДокумента, Контрагент, ИНН, КПП, Дата, НомерРаздела = 0) Экспорт ДанныеДляПроверкиКонтрагентов = СтруктураПараметров.ДанныеДляПроверкиКонтрагентов; @@ -1005,9 +947,15 @@ НоваяСтрока.ИНН = ИНН; НоваяСтрока.КПП = КПП; + // Дополнительная колонка, которая используется + // для проверки в отчете, выводимом блоками. + Если НедействующиеКонтрагенты.Колонки.Найти("НомерРаздела") <> Неопределено Тогда + НоваяСтрока.НомерРаздела = НомерРаздела; + КонецЕсли; + КонецПроцедуры -// Функция - Определяет, нужно ли выводить данную строку в отчете по некорректным контрагентам. +// Определяет, нужно ли выводить данную строку в отчете по некорректным контрагентам. // // Параметры: // СтруктураПараметров - Структура - Параметры формирования отчета. @@ -1050,7 +998,7 @@ КонецФункции -// Процедура - Запоминает данные отчета полученные при первоначальном формировании отчета +// Запоминает данные отчета полученные при первоначальном формировании отчета // и используемые в дальнейшем для проверки контрагентов в отчете. // // Параметры: @@ -1072,13 +1020,24 @@ КонецПроцедуры -// Процедура - Сохранение таблицы с контрагентами, участвующими в отчете. +// Сохранение таблицы с контрагентами, участвующими в отчете. // // Параметры: // Форма - УправляемаяФорма - Форма отчета, в котором выполняется проверка контрагентов. // РезультатВыполнения - Структура - Результат формирования отчета, содержащий свойство ДанныеДляПроверкиКонтрагентов. -Процедура ЗапомнитьРезультатФормированияОтчета(Форма, РезультатВыполнения) Экспорт +// АдресХранилища - Строка - Адрес временного хранилища с результатом заполнения отчета. +// Во временном хранилище хранится структура с обязательным ключом +// "ДанныеДляПроверкиКонтрагентов". +Процедура ЗапомнитьРезультатФормированияОтчета(Форма, РезультатВыполнения, АдресХранилища = Неопределено) Экспорт + Если Форма.РеквизитыПроверкиКонтрагентов.ОтчетСРазделами Тогда + + // Адрес хранилища с результатами заполнения отчета запоминаем всегда, + // чтобы из него получать данные разделов отчета для вывода. + Форма.РеквизитыПроверкиКонтрагентов.АдресРезультатаЗаполненияОтчета = АдресХранилища; + + КонецЕсли; + Если Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется И РезультатВыполнения.Свойство("ДанныеДляПроверкиКонтрагентов") Тогда ДанныеДляПроверкиКонтрагентов = РезультатВыполнения.ДанныеДляПроверкиКонтрагентов; @@ -1087,13 +1046,36 @@ Форма.РеквизитыПроверкиКонтрагентов.АдресДанныхОтчета = ДанныеДляПроверкиКонтрагентов.ПроверкаКонтрагентовАдресДанныхОтчета; КонецЕсли; - Форма.ЗначениеВРеквизитФормы(ДанныеДляПроверкиКонтрагентов.НедействующиеКонтрагенты, "ПроверкаКонтрагентовНедействующиеКонтрагенты"); - + // Сразу после формирования отчета все контрагенты в нем непроверенные, запоминаем их количество. + Форма.РеквизитыПроверкиКонтрагентов.НедействующиеКонтрагентыКоличество = ДанныеДляПроверкиКонтрагентов.НедействующиеКонтрагенты.Количество(); + Форма.РеквизитыПроверкиКонтрагентов.КонтрагентыСПустымСостояниемКоличество = Форма.РеквизитыПроверкиКонтрагентов.НедействующиеКонтрагентыКоличество; + + Если НЕ Форма.РеквизитыПроверкиКонтрагентов.ОтчетСРазделами Тогда + Форма.ЗначениеВРеквизитФормы(ДанныеДляПроверкиКонтрагентов.НедействующиеКонтрагенты, "ПроверкаКонтрагентовНедействующиеКонтрагенты"); + КонецЕсли; + КонецЕсли; КонецПроцедуры -// Процедура - Добавление в параметры формирования отчета данных, необходимых для проверки контрагентов в отчете. +// Добавление в параметры формирования отчета обязательных данных, необходимых для проверки контрагентов в отчете. +// +// Параметры: +// ПараметрыОтчета - Структура - Структура параметров отчета, +// в которую будут добавлены данные для проверки контрагентов. +// +Процедура ДобавитьОбщиеПараметрыДляПроверкиКонтрагентовВОтчете(ПараметрыОтчета) Экспорт + + ДанныеДляПроверкиКонтрагентов = Новый Структура; + ДанныеДляПроверкиКонтрагентов.Вставить("ПроверкаКонтрагентовИспользуется", Ложь); + ДанныеДляПроверкиКонтрагентов.Вставить("ОтчетСРазделами", Ложь); + ДанныеДляПроверкиКонтрагентов.Вставить("РазделыОтчета", НоваяТаблицаРазделыОтчета()); + + ПараметрыОтчета.Вставить("ДанныеДляПроверкиКонтрагентов", ДанныеДляПроверкиКонтрагентов); + +КонецПроцедуры + +// Добавление в параметры формирования отчета данных, необходимых для проверки контрагентов в отчете. // // Параметры: // Форма - УправляемаяФорма - Форма отчета, в котором выполняется проверка контрагентов. @@ -1105,25 +1087,57 @@ // передавать. Процедура ДобавитьПараметрыДляПроверкиКонтрагентов(Форма, ПараметрыОтчета, ЭтоПервоеФормированиеОтчета, ПолныйОтчет = Неопределено) Экспорт - ДанныеДляПроверкиКонтрагентов = Новый Структура; - ДанныеДляПроверкиКонтрагентов.Вставить("ПроверкаКонтрагентовИспользуется", Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется); - - Если ЭтоПервоеФормированиеОтчета Тогда - ДанныеДляПроверкиКонтрагентов.Вставить("ПроверкаКонтрагентовАдресДанныхОтчета", ПоместитьВоВременноеХранилище(Неопределено, Форма.УникальныйИдентификатор)); - Иначе - ДанныеДляПроверкиКонтрагентов.Вставить("ДанныеОтчета", ПолучитьИзВременногоХранилища(Форма.РеквизитыПроверкиКонтрагентов.АдресДанныхОтчета)); - ДанныеДляПроверкиКонтрагентов.Вставить("ПолныйОтчет", ПолныйОтчет); - КонецЕсли; - - ДанныеДляПроверкиКонтрагентов.Вставить("НедействующиеКонтрагенты", - Форма.РеквизитФормыВЗначение("ПроверкаКонтрагентовНедействующиеКонтрагенты", Тип("ТаблицаЗначений"))); + ДобавитьОбщиеПараметрыДляПроверкиКонтрагентовВОтчете(ПараметрыОтчета); + + ДанныеДляПроверкиКонтрагентов = ПараметрыОтчета.ДанныеДляПроверкиКонтрагентов; + ДанныеДляПроверкиКонтрагентов.ПроверкаКонтрагентовИспользуется = Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется; + ДанныеДляПроверкиКонтрагентов.ОтчетСРазделами = Форма.РеквизитыПроверкиКонтрагентов.ОтчетСРазделами; ДанныеДляПроверкиКонтрагентов.Вставить("ВыводитьТолькоНекорректныхКонтрагентов", НЕ ЭтоПервоеФормированиеОтчета); + НедействующиеКонтрагенты = ШаблонТаблицыДанныеКонтрагентаДляОтчета(); + + Если ЭтоПервоеФормированиеОтчета Тогда + + ДанныеДляПроверкиКонтрагентов.Вставить("ПроверкаКонтрагентовАдресДанныхОтчета", ПоместитьВоВременноеХранилище(Неопределено, Форма.УникальныйИдентификатор)); + + Иначе + + ДанныеДляПроверкиКонтрагентов.Вставить("ДанныеОтчета", ПолучитьИзВременногоХранилища(Форма.РеквизитыПроверкиКонтрагентов.АдресДанныхОтчета)); + ДанныеДляПроверкиКонтрагентов.Вставить("ПолныйОтчет", ПолныйОтчет); + + Если Форма.РеквизитыПроверкиКонтрагентов.ОтчетСРазделами Тогда + + РезультатЗаполненияОтчета = ПолучитьИзВременногоХранилища(Форма.РеквизитыПроверкиКонтрагентов.АдресРезультатаЗаполненияОтчета); + + Если ТипЗнч(РезультатЗаполненияОтчета) = Тип("Структура") + И РезультатЗаполненияОтчета.Свойство("ДанныеДляПроверкиКонтрагентов") Тогда + + Если РезультатЗаполненияОтчета.ДанныеДляПроверкиКонтрагентов.Свойство("НедействующиеКонтрагенты") Тогда + НедействующиеКонтрагенты = РезультатЗаполненияОтчета.ДанныеДляПроверкиКонтрагентов.НедействующиеКонтрагенты; + КонецЕсли; + + Если РезультатЗаполненияОтчета.ДанныеДляПроверкиКонтрагентов.Свойство("РазделыОтчета") Тогда + ДанныеДляПроверкиКонтрагентов.Вставить("ПолныеРазделыОтчета", РезультатЗаполненияОтчета.ДанныеДляПроверкиКонтрагентов.РазделыОтчета); + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Если Форма.РеквизитыПроверкиКонтрагентов.ОтчетСРазделами Тогда + ДанныеДляПроверкиКонтрагентов.Вставить("НедействующиеКонтрагенты", НедействующиеКонтрагенты); + Иначе + ДанныеДляПроверкиКонтрагентов.Вставить("НедействующиеКонтрагенты", + Форма.РеквизитФормыВЗначение("ПроверкаКонтрагентовНедействующиеКонтрагенты", Тип("ТаблицаЗначений"))); + КонецЕсли; + ПараметрыОтчета.Вставить("ДанныеДляПроверкиКонтрагентов", ДанныеДляПроверкиКонтрагентов); КонецПроцедуры -// Функция - Определяем, формируется ли отчет стандартным способом. +// Определяем, формируется ли отчет стандартным способом. // // Параметры: // СтруктураПараметров - Структура - Параметры формирования отчета. @@ -1146,7 +1160,7 @@ КонецФункции -// Процедура - Дополнение результата формирования отчета результатами проверки контрагентов. +// Дополнение результата формирования отчета результатами проверки контрагентов. // // Параметры: // РезультатФормирования - Структура - Результат формирования отчета. @@ -1159,7 +1173,7 @@ КонецПроцедуры -// Процедура - Метод фонового задания по проверке контрагентов в отчете. +// Метод фонового задания по проверке контрагентов в отчете. // // Параметры: // СтруктураПараметров - Структура - Параметры формирования отчета. @@ -1171,50 +1185,69 @@ Процедура ОпределитьНедействующихКонтрагентовВОтчетеФоновоеЗадание(СтруктураПараметров, АдресХранилища) Экспорт ДанныеДляПроверкиКонтрагентов = СтруктураПараметров.ДанныеДляПроверкиКонтрагентов; - ПолныйОтчет = ДанныеДляПроверкиКонтрагентов.ПолныйОтчет; + ПолныйОтчет = ДанныеДляПроверкиКонтрагентов.ПолныйОтчет; + Результат = Новый Структура; - Если ЕстьДоступКВебСервисуФНС() Тогда + // Проверяем контрагентов на корректность. + ПроверяемыеКонтрагенты = ДанныеДляПроверкиКонтрагентов.НедействующиеКонтрагенты; + РезультатПроверки = ОпределитьНедействующихКонтрагентовВОтчете(ПроверяемыеКонтрагенты); + + Если РезультатПроверки.ЕстьДоступКВебСервисуФНС Тогда - // Проверяем контрагентов на корректность. - ПроверяемыеКонтрагенты = ДанныеДляПроверкиКонтрагентов.НедействующиеКонтрагенты; - - Если НедействующиеКонтрагентыОпределены(ПроверяемыеКонтрагенты) Тогда + Если ПроверяемыеКонтрагенты.Количество() > 0 Тогда - Если ПроверяемыеКонтрагенты.Количество() > 0 Тогда - - ВыделитьКонтрагентовСОшибкамиВОтчете(ПроверяемыеКонтрагенты, ПолныйОтчет); - - ДанныеДляПроверкиКонтрагентов.НедействующиеКонтрагенты = ПроверяемыеКонтрагенты; - - // Формируем отчет, в котором оставляем только некорректных контрагентов. - ПроверкаКонтрагентовОтчетПоНекорректнымКонтрагентам = Новый ТабличныйДокумент; - РаботаСКонтрагентамиПереопределяемый.СформироватьОтчет(СтруктураПараметров, ПроверкаКонтрагентовОтчетПоНекорректнымКонтрагентам); - - Результат = Новый Структура; - Результат.Вставить("НедействующиеКонтрагенты", ПроверяемыеКонтрагенты); - // Отчет, содержащий только некорректных контрагентов. - Результат.Вставить("ПроверкаКонтрагентовОтчетПоНекорректнымКонтрагентам", ПроверкаКонтрагентовОтчетПоНекорректнымКонтрагентам); - // Отчет, содержащий всех контрагентов; некорректные подсвечены красным. - Результат.Вставить("РезультатФормированияОтчета", ПолныйОтчет); + ДанныеДляПроверкиКонтрагентов.НедействующиеКонтрагенты = ПроверяемыеКонтрагенты; + Если ДанныеДляПроверкиКонтрагентов.ОтчетСРазделами Тогда + + // Выделяем в разделах отчета строки с некорректными контрагентами. + ВыделитьКонтрагентовСОшибкамиВРазделеОтчета(ПроверяемыеКонтрагенты, СтруктураПараметров); + + // Формируем отчет, в котором оставляем только некорректных контрагентов. + ОставитьНедействующихКонтрагентовВОтчете(СтруктураПараметров); + + Результат.Вставить("РазделыОтчетаПоНекорректнымКонтрагентам", ДанныеДляПроверкиКонтрагентов.РазделыОтчета); + Результат.Вставить("РазделыОтчета", ДанныеДляПроверкиКонтрагентов.ПолныеРазделыОтчета); + Иначе - Результат = Новый Структура; - Результат.Вставить("НедействующиеКонтрагенты", ПроверяемыеКонтрагенты); - Результат.Вставить("ПроверкаКонтрагентовОтчетПоНекорректнымКонтрагентам", Новый ТабличныйДокумент); - Результат.Вставить("РезультатФормированияОтчета", ПолныйОтчет);// Исходный отчет без изменений. + // Простой отчет без разделов. Выделяем в нем строки с некорректными контрагентами. + ВыделитьКонтрагентовСОшибкамиВОтчете(ПроверяемыеКонтрагенты, ПолныйОтчет); + + // Формируем отчет, в котором оставляем только некорректных контрагентов. + ОтчетПоНекорректнымКонтрагентам = ОставитьНедействующихКонтрагентовВОтчете(СтруктураПараметров); + + // Отчет, содержащий только некорректных контрагентов. + Результат.Вставить("ОтчетПоНекорректнымКонтрагентам", ОтчетПоНекорректнымКонтрагентам); + // Отчет, содержащий всех контрагентов; некорректные подсвечены красным. + Результат.Вставить("РезультатФормированияОтчета", ПолныйОтчет); КонецЕсли; - + Иначе - Результат = Новый Структура; - Результат.Вставить("НетДоступаКВебСервисуФНС", Истина); + Если ДанныеДляПроверкиКонтрагентов.ОтчетСРазделами Тогда + Результат.Вставить("РазделыОтчетаПоНекорректнымКонтрагентам", НоваяТаблицаРазделыОтчета()); + Результат.Вставить("РазделыОтчета", ДанныеДляПроверкиКонтрагентов.ПолныеРазделыОтчета); // Исходные разделы отчета без изменений. + Иначе + Результат.Вставить("ОтчетПоНекорректнымКонтрагентам", Новый ТабличныйДокумент); + Результат.Вставить("РезультатФормированияОтчета", ПолныйОтчет); // Исходный отчет без изменений. + КонецЕсли; КонецЕсли; + + Результат.Вставить("НедействующиеКонтрагенты", ПроверяемыеКонтрагенты); + + // Сохраним общее число некорректных и непроведенных контрагентов + // для отображения соответствующего сообщения на форме отчета. + Результат.Вставить("НедействующиеКонтрагентыКоличество", ПроверяемыеКонтрагенты.Количество()); + + ПустоеСостояние = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустаяСсылка"); + КонтрагентыСПустымСостоянием = ПроверяемыеКонтрагенты.НайтиСтроки(Новый Структура("Состояние", ПустоеСостояние)); + + Результат.Вставить("КонтрагентыСПустымСостояниемКоличество", КонтрагентыСПустымСостоянием.Количество()); Иначе - Результат = Новый Структура; Результат.Вставить("НетДоступаКВебСервисуФНС", Истина); КонецЕсли; @@ -1222,7 +1255,7 @@ КонецПроцедуры -// Процедура - Запуск фонового задания по проверке контрагентов в отчете. +// Запуск фонового задания по проверке контрагентов в отчете. // // Параметры: // Форма - УправляемаяФорма - Форма отчета, в котором выполняется проверка контрагентов. @@ -1233,8 +1266,12 @@ Форма.РеквизитыПроверкиКонтрагентов.ИдентификаторЗадания = Неопределено; - Если Форма.РеквизитыПроверкиКонтрагентов.ОтчетПоНекорректнымКонтрагентам <> Неопределено Тогда - Форма.РеквизитыПроверкиКонтрагентов.ОтчетПоНекорректнымКонтрагентам.Очистить(); + Если НЕ Форма.РеквизитыПроверкиКонтрагентов.ОтчетСРазделами Тогда + + Если Форма.РеквизитыПроверкиКонтрагентов.ОтчетПоНекорректнымКонтрагентам <> Неопределено Тогда + Форма.РеквизитыПроверкиКонтрагентов.ОтчетПоНекорректнымКонтрагентам.Очистить(); + КонецЕсли; + КонецЕсли; НаименованиеЗадания = НСтр("ru = 'Проверка контрагентов в отчете'"); @@ -1251,31 +1288,64 @@ КонецПроцедуры -// Процедура - Отображение результата проверки контрагента в отчете. +// Отображение результата проверки контрагента в отчете. // // Параметры: // Форма - УправляемаяФорма - Форма отчета, в котором выполняется проверка контрагентов. // ПолеТабличногоДокумента - ПолеФормы с видом ПолеТабличногоДокумента - поле, в которое необходимо выводить отчет. // РезультатФормированияОтчета - ТабличныйДокумент - Документ, предназначенный для вывода в поле формы. -Процедура ОтобразитьРезультатПроверкиКонтрагентаВОтчете(Форма, ПолеТабличногоДокумента, РезультатФормированияОтчета) Экспорт +// ТекущийНомерРаздела - Число - Номер раздела для вывода (для отчетов с разделами). +Процедура ОтобразитьРезультатПроверкиКонтрагентаВОтчете(Форма, ПолеТабличногоДокумента, РезультатФормированияОтчета, ТекущийНомерРаздела = Неопределено) Экспорт - РезультатПроверки = ПолучитьИзВременногоХранилища(Форма.РеквизитыПроверкиКонтрагентов.АдресХранилища); + РеквизитыПроверкиКонтрагентов = Форма.РеквизитыПроверкиКонтрагентов; + + РезультатПроверки = ПолучитьИзВременногоХранилища(РеквизитыПроверкиКонтрагентов.АдресХранилища); Если РезультатПроверки.Свойство("НетДоступаКВебСервисуФНС") Тогда // Не удалось проверить контрагентов. - Форма.РеквизитыПроверкиКонтрагентов.ЕстьДоступКВебСервисуФНС = Ложь; + РеквизитыПроверкиКонтрагентов.ЕстьДоступКВебСервисуФНС = Ложь; Иначе - // Множество некорректных контрагентов. - Форма.ЗначениеВРеквизитФормы( - РезультатПроверки.НедействующиеКонтрагенты, "ПроверкаКонтрагентовНедействующиеКонтрагенты"); - // Отчет, содержащий только некорректных контрагентов. - Форма.РеквизитыПроверкиКонтрагентов.ОтчетПоНекорректнымКонтрагентам = - РезультатПроверки.ПроверкаКонтрагентовОтчетПоНекорректнымКонтрагентам; - // Отчет, содержащий всех контрагентов, некорректные подсвечены красным. - РезультатФормированияОтчета = - РезультатПроверки.РезультатФормированияОтчета; + // Удаляем старые временные хранилища, которые больше не нужны. + Если ЭтоАдресВременногоХранилища(РеквизитыПроверкиКонтрагентов.АдресРезультатаЗаполненияОтчета) Тогда + УдалитьИзВременногоХранилища(РеквизитыПроверкиКонтрагентов.АдресРезультатаЗаполненияОтчета); + КонецЕсли; + Если ЭтоАдресВременногоХранилища(РеквизитыПроверкиКонтрагентов.АдресДанныхОтчета) Тогда + УдалитьИзВременногоХранилища(РеквизитыПроверкиКонтрагентов.АдресДанныхОтчета); + КонецЕсли; + + // Запоминаем новый адрес хранилища с отчетом + РеквизитыПроверкиКонтрагентов.АдресРезультатаЗаполненияОтчета = РеквизитыПроверкиКонтрагентов.АдресХранилища; + + // Количество некорректных контрагентов. + РеквизитыПроверкиКонтрагентов.НедействующиеКонтрагентыКоличество = РезультатПроверки.НедействующиеКонтрагентыКоличество; + // Количество непроверенных контрагентов. + РеквизитыПроверкиКонтрагентов.КонтрагентыСПустымСостояниемКоличество = РезультатПроверки.КонтрагентыСПустымСостояниемКоличество; + + // Отчет (раздел отчета), содержащий всех контрагентов, некорректные подсвечены красным. + Если РеквизитыПроверкиКонтрагентов.ОтчетСРазделами Тогда + + Если ТекущийНомерРаздела = Неопределено + И РезультатПроверки.Свойство("ПолныеРазделыОтчета") + И РезультатПроверки.ПолныеРазделыОтчета.Количество() > 0 Тогда + + ТекущийНомерРаздела = РезультатПроверки.ПолныеРазделыОтчета[0].НомерРаздела; + + КонецЕсли; + + Иначе + + // Отчет, содержащий только некорректных контрагентов. + РеквизитыПроверкиКонтрагентов.ОтчетПоНекорректнымКонтрагентам = + РезультатПроверки.ОтчетПоНекорректнымКонтрагентам; + // Отчет, содержащий всех контрагентов, некорректные подсвечены красным. + РезультатФормированияОтчета = + РезультатПроверки.РезультатФормированияОтчета; + + КонецЕсли; + КонецЕсли; - Форма.РеквизитыПроверкиКонтрагентов.ПроверкаВыполнялась = Истина; + + РеквизитыПроверкиКонтрагентов.ПроверкаВыполнялась = Истина; СтандартнаяОбработка = Истина; РаботаСКонтрагентамиПереопределяемый.ОтобразитьРезультатПроверкиКонтрагентаВОтчете(Форма, СтандартнаяОбработка); @@ -1286,11 +1356,16 @@ КонецЕсли; ПроверкаКонтрагентовКлиентСервер.ВывестиНужнуюПанельПроверкиКонтрагентовВОтчете(Форма); - ВывестиОтчет(Форма, ПолеТабличногоДокумента, РезультатФормированияОтчета); + + Если РеквизитыПроверкиКонтрагентов.ОтчетСРазделами Тогда + ВывестиРазделОтчета(Форма, ПолеТабличногоДокумента, ТекущийНомерРаздела); + Иначе + ВывестиОтчет(Форма, ПолеТабличногоДокумента, РезультатФормированияОтчета); + КонецЕсли; КонецПроцедуры -// Процедура - Вывод результата проверки контрагента в поле табличного документа. +// Вывод результата проверки контрагента в поле табличного документа. // // Параметры: // Форма - УправляемаяФорма - Форма отчета, в котором выполняется проверка контрагентов. @@ -1316,12 +1391,44 @@ // Выводим только контрагентов с ошибками. ПолеТабличногоДокумента.Вывести(Форма.РеквизитыПроверкиКонтрагентов.ОтчетПоНекорректнымКонтрагентам); Иначе - ПолеТабличногоДокумента.Вывести(РезультатФормированияОтчета); + ПолеТабличногоДокумента.Вывести(РезультатФормированияОтчета); КонецЕсли; КонецПроцедуры -// Процедура - Отображение результата проверки контрагента в отчете. +// Вывод раздела отчета после проверки контрагента в поле табличного документа. +// +// Параметры: +// Форма - УправляемаяФорма - Форма отчета, в котором выполняется проверка контрагентов. +// ПолеТабличногоДокумента - ПолеФормы с видом ПолеТабличногоДокумента - поле, в которое необходимо выводить отчет. +// НомерРаздела - Число - Номер раздела для вывода. +// +Процедура ВывестиРазделОтчета(Форма, ПолеТабличногоДокумента, НомерРаздела) Экспорт + + СтандартнаяОбработка = Истина; + + РаботаСКонтрагентамиПереопределяемый.ВывестиРазделОтчета(Форма, ПолеТабличногоДокумента, НомерРаздела, СтандартнаяОбработка); + + // Если действия переопределили, то стандартную обработку не выполняем. + Если НЕ СтандартнаяОбработка Тогда + Возврат; + КонецЕсли; + + ПолеТабличногоДокумента.Очистить(); + + РазделыОтчета = РазделыОтчетаВФорме(Форма); + + СтрокаРаздела = РазделыОтчета.Найти(НомерРаздела, "НомерРаздела"); + Если СтрокаРаздела = Неопределено Тогда + Возврат; + КонецЕсли; + + РезультатФормированияОтчета = СтрокаРаздела.ХранилищеОтчета.Получить(); + ПолеТабличногоДокумента.Вывести(РезультатФормированияОтчета); + +КонецПроцедуры + +// Отображение результата проверки контрагента в отчете. // // Параметры: // Форма - УправляемаяФорма - Форма отчета, в котором выполняется проверка контрагентов. @@ -1337,28 +1444,42 @@ КонецПроцедуры -// Процедура - Устанавливается вид панели с результатом проверки. +// Отображение результата проверки контрагента в отчете. +// +// Параметры: +// Форма - УправляемаяФорма - Форма отчета, в котором выполняется проверка контрагентов. +// ПолеТабличногоДокумента - ПолеФормы с видом ПолеТабличногоДокумента - поле, в которое необходимо выводить отчет. +// НомерРаздела - Число - Номер раздела, который необходимо отобразить. +Процедура ПереключитьРежимОтображенияРазделаОтчета(Форма, ПолеТабличногоДокумента, НомерРаздела) Экспорт + + Форма.РеквизитыПроверкиКонтрагентов.ВыведеныВсеСтроки = НЕ Форма.РеквизитыПроверкиКонтрагентов.ВыведеныВсеСтроки; + + ПроверкаКонтрагентовКлиентСервер.УстановитьВидПанелиПроверкиКонтрагентовВОтчете(Форма, "НайденыНекорректныеКонтрагенты"); + + ВывестиРазделОтчета(Форма, ПолеТабличногоДокумента, НомерРаздела); + +КонецПроцедуры + +// Устанавливается вид панели с результатом проверки. // // Параметры: // Форма - УправляемаяФорма - Форма отчета, в котором выполняется проверка контрагентов. -Процедура ПриСозданииНаСервереОтчет(Форма) Экспорт +// ОтчетСРазделами - Булево - Признак того, что отчет имеет разделы. +Процедура ПриСозданииНаСервереОтчет(Форма, ОтчетСРазделами = Ложь) Экспорт - ИнициализироватьРеквизитыФормыОтчета(Форма); + ИнициализироватьРеквизитыФормыОтчета(Форма, ОтчетСРазделами); - Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется = ПроверкаКонтрагентовВызовСервера.ИспользованиеПроверкиВозможно(); - Форма.РеквизитыПроверкиКонтрагентов.НужноПоказатьПредложениеВключитьПроверкуКонтрагентов = - НужноПоказатьПредложениеВключитьПроверкуКонтрагентов(); - УстановитьНадписиВПанелиОтчетаПриСозданииНаСервере(Форма); ПроверкаКонтрагентовКлиентСервер.УстановитьВидПанелиПроверкиКонтрагентовВОтчете(Форма); КонецПроцедуры -// Процедура - Вспомогательный API. Инициализировать реквизиты проверки контрагента в форме отчета. +// Вспомогательный API. Инициализировать реквизиты проверки контрагента в форме отчета. // // Параметры: // Форма - УправляемаяФорма - Форма отчета, в котором выполняется проверка контрагентов. -Процедура ИнициализироватьРеквизитыФормыОтчета(Форма) Экспорт +// ОтчетСРазделами - Булево - Признак того, что отчет имеет разделы. +Процедура ИнициализироватьРеквизитыФормыОтчета(Форма, ОтчетСРазделами = Ложь) Экспорт НовыеРеквизиты = Новый Структура; @@ -1377,21 +1498,159 @@ // Наличие доступа к сервису проверки. НовыеРеквизиты.Вставить("ЕстьДоступКВебСервисуФНС", Истина); // Включена ли проверка и есть ли доступ на использование проверки. - НовыеРеквизиты.Вставить("ПроверкаИспользуется", Ложь); + НовыеРеквизиты.Вставить("ПроверкаИспользуется", ПроверкаКонтрагентовВызовСервера.ИспользованиеПроверкиВозможно()); // Табличный документ, отчет, содержащий только некорректных контрагентов. - НовыеРеквизиты.Вставить("ОтчетПоНекорректнымКонтрагентам", Новый ТабличныйДокумент); + НовыеРеквизиты.Вставить("ОтчетПоНекорректнымКонтрагентам", Новый ТабличныйДокумент); + // Признак того, что отчет содержит разделы. + НовыеРеквизиты.Вставить("ОтчетСРазделами", ОтчетСРазделами); + // Адрес временного хранилища, где содержаться разделы отчета. + НовыеРеквизиты.Вставить("АдресРезультатаЗаполненияОтчета", ""); + // Количество недействующих контрагентов. + НовыеРеквизиты.Вставить("НедействующиеКонтрагентыКоличество", 0); + // Количество контрагентов с пустым состоянием. + НовыеРеквизиты.Вставить("КонтрагентыСПустымСостояниемКоличество", 0); // Служебный реквизит - НовыеРеквизиты.Вставить("НужноПоказатьПредложениеВключитьПроверкуКонтрагентов"); + НовыеРеквизиты.Вставить("НужноПоказатьПредложениеВключитьПроверкуКонтрагентов", НужноПоказатьПредложениеВключитьПроверкуКонтрагентов()); Форма.РеквизитыПроверкиКонтрагентов = НовыеРеквизиты; КонецПроцедуры +// Функция возвращает новую таблицу разделов отчета. +// +// Возвращаемое значение: +// ТаблицаЗначений, содержащая колонки: +// * НазваниеРаздела - Строка - Название раздела отчета. +// * НомерРаздела - Число - Номер раздела отчета. +// * ХранилищеОтчета - ХранилищеЗначения - Содержит табличный документ. +// * ДополнительныеПараметры - Произвольный - Содержит дополнительную информацию по разделу. +// +Функция НоваяТаблицаРазделыОтчета() Экспорт + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("НазваниеРаздела", ОбщегоНазначения.ОписаниеТипаСтрока(0)); + Результат.Колонки.Добавить("НомерРаздела", ОбщегоНазначения.ОписаниеТипаЧисло(10)); + Результат.Колонки.Добавить("ХранилищеОтчета", Новый ОписаниеТипов("ХранилищеЗначения")); + Результат.Колонки.Добавить("ДополнительныеПараметры"); + + Результат.Индексы.Добавить("НомерРаздела"); + + Возврат Результат; + +КонецФункции + +// Процедура добавляет новый раздел в отчет. +// +// Параметры: +// СтруктураПараметров - Структура - Параметры формирования отчета. +// Для проверки контрагентов в отчете важно наличие ключа "ДанныеДляПроверкиКонтрагентов". +// Данный ключ формируется в процедуре ДобавитьПараметрыДляПроверкиКонтрагентов. +// НазваниеРаздела - Строка - Название раздела отчета. +// НомерРаздела - Число - Номер раздела отчета. +// ТабличныйДокумент - ТабличныйДокумент - Раздел отчета. +// ДополнительныеПараметры - Произвольный - Дополнительные данные, связанные с разделом отчета. +// +Процедура ДобавитьРазделОтчета(СтруктураПараметров, НазваниеРаздела, НомерРаздела, ТабличныйДокумент, ДополнительныеПараметры = Неопределено) Экспорт + + ДанныеДляПроверкиКонтрагентов = СтруктураПараметров.ДанныеДляПроверкиКонтрагентов; + + НовыйРаздел = ДанныеДляПроверкиКонтрагентов.РазделыОтчета.Добавить(); + НовыйРаздел.НазваниеРаздела = НазваниеРаздела; + НовыйРаздел.НомерРаздела = НомерРаздела; + НовыйРаздел.ХранилищеОтчета = Новый ХранилищеЗначения(ТабличныйДокумент, Новый СжатиеДанных(9)); + НовыйРаздел.ДополнительныеПараметры = ДополнительныеПараметры; + +КонецПроцедуры + +// Функция возвращает таблицу разделов отчета из результата выполнения фонового задания. +// +// Параметры: +// РезультатВыполненияЗадания - Структура - Результат выполнения фонового задания. +// ТолькоНекорректныеКонтрагенты - Булево - Признак вывода только строк с некорректными контрагентами. +// +Функция РазделыОтчета(РезультатВыполненияЗадания, ТолькоНекорректныеКонтрагенты = Ложь) Экспорт + + Результат = Неопределено; + + Если ТипЗнч(РезультатВыполненияЗадания) = Тип("Структура") Тогда + + // АдресРезультатаЗаполненияОтчета может указывать на один из следующих адресов: + // 1. После заполнения отчета, но до выполнения фонового задания по проверке контрагентов. + // В этом случае в РезультатВыполненияЗадания содержится структура ДанныеДляПроверкиКонтрагентов, + // в которой лежит таблица разделов. + // + // ИЛИ + // + // 2. После выполнения фонового задания проверки контрагентов. В этом случае структура + // в РезультатВыполненияЗадания содержит сами данные. + + Если РезультатВыполненияЗадания.Свойство("ДанныеДляПроверкиКонтрагентов") Тогда + Если РезультатВыполненияЗадания.ДанныеДляПроверкиКонтрагентов.Свойство("РазделыОтчета") Тогда + Результат = РезультатВыполненияЗадания.ДанныеДляПроверкиКонтрагентов.РазделыОтчета; + КонецЕсли; + Иначе + Если ТолькоНекорректныеКонтрагенты + И РезультатВыполненияЗадания.Свойство("РазделыОтчетаПоНекорректнымКонтрагентам") Тогда + Результат = РезультатВыполненияЗадания.РазделыОтчетаПоНекорректнымКонтрагентам; + ИначеЕсли НЕ ТолькоНекорректныеКонтрагенты + И РезультатВыполненияЗадания.Свойство("РазделыОтчета") Тогда + Результат = РезультатВыполненияЗадания.РазделыОтчета; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если Результат = Неопределено Тогда + Результат = НоваяТаблицаРазделыОтчета(); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Функция возвращает таблицу разделов отчета для формы. +// +// Параметры: +// Форма - УправляемаяФорма - Форма отчета. +// РезультатВыполненияЗадания - Структура, Неопределено - Результат выполнения фонового задания. +// Если не Неопределено, то результат будет прочитан из временного хранилища. +// ТолькоНекорректныеКонтрагенты - Булево, Неопределено - Признак вывода только строк с некорректными контрагентами. +// Если Неопределено, то используется настройка формы "ВыведеныВсеСтроки". +// +Функция РазделыОтчетаВФорме(Форма, Знач РезультатВыполненияЗадания = Неопределено, Знач ТолькоНекорректныеКонтрагенты = Неопределено) Экспорт + + // Если параметр не передан, определим его значение по умолчанию, исходя из переключателя на форме. + Если ТолькоНекорректныеКонтрагенты = Неопределено Тогда + Если Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется + И Форма.РеквизитыПроверкиКонтрагентов.ВыведеныВсеСтроки Тогда + + ТолькоНекорректныеКонтрагенты = Ложь; + + Иначе + + ТолькоНекорректныеКонтрагенты = Истина; + + КонецЕсли; + КонецЕсли; + + Если РезультатВыполненияЗадания = Неопределено Тогда + + Если ЭтоАдресВременногоХранилища(Форма.РеквизитыПроверкиКонтрагентов.АдресРезультатаЗаполненияОтчета) Тогда + РезультатВыполненияЗадания = ПолучитьИзВременногоХранилища(Форма.РеквизитыПроверкиКонтрагентов.АдресРезультатаЗаполненияОтчета); + КонецЕсли; + + КонецЕсли; + + Результат = РазделыОтчета(РезультатВыполненияЗадания, ТолькоНекорректныеКонтрагенты); + + Возврат Результат; + +КонецФункции + #КонецОбласти #Область ПроверкаКонтрагентовВСправочнике -// Процедура - Проверка наличия доступа к проверке контрагентов, запуск проверки. +// Проверка наличия доступа к проверке контрагентов, запуск проверки. // // Параметры: // Форма - УправляемаяФорма - Карточка контрагента. @@ -1399,44 +1658,37 @@ ИнициализироватьРеквизитыФормыКонтрагент(Форма); - // Определение объекта и ссылки. - ОбъектИСсылкаПоФорме = ПроверкаКонтрагентовКлиентСервер.ОбъектИСсылкаПоФорме(Форма); - КонтрагентОбъект = ОбъектИСсылкаПоФорме.Объект; - КонтрагентСсылка = ОбъектИСсылкаПоФорме.Ссылка; - - ПроверкаКонтрагентовИспользуется = ПроверкаКонтрагентовВызовСервера.ИспользованиеПроверкиВозможно(); - - Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется = ПроверкаКонтрагентовИспользуется; - Форма.РеквизитыПроверкиКонтрагентов.НужноПоказатьПредложениеВключитьПроверкуКонтрагентов = - НужноПоказатьПредложениеВключитьПроверкуКонтрагентов(); - - Если ПроверкаКонтрагентовИспользуется Тогда + Если Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется Тогда + + // Определение объекта и ссылки. + ОбъектИСсылкаПоФорме = ПроверкаКонтрагентовКлиентСервер.ОбъектИСсылкаПоФорме(Форма); + КонтрагентОбъект = ОбъектИСсылкаПоФорме.Объект; + КонтрагентСсылка = ОбъектИСсылкаПоФорме.Ссылка; СвойстваСправочникаКонтрагенты = ПроверкаКонтрагентовКлиентСервер.СвойстваСправочникаКонтрагенты(); ИНН = КонтрагентОбъект[СвойстваСправочникаКонтрагенты.ИНН]; КПП = КонтрагентОбъект[СвойстваСправочникаКонтрагенты.КПП]; - + Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагента = ПроверкаКонтрагентовВызовСервера.ТекущееСохраненноеСостояниеКонтрагента(КонтрагентСсылка, ИНН, КПП); Если ЗначениеЗаполнено(Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагента) Тогда ПроверкаКонтрагентовКлиентСервер.ОтобразитьРезультатПроверкиКонтрагентаВСправочнике(Форма); Иначе - - Если ЗначениеЗаполнено(КонтрагентСсылка) ИЛИ ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда - - ПроверкаКонтрагентовКлиентСервер.ПроверитьКонтрагентаИзКарточки(Форма, Истина); - + // В режиме при проверке по кнопке показываем только результат из кэша. + // Если в кэше нет результата, то ничего не показываем и проверку не запускаем. + // Если нужно, пользователь сам проверит по кнопке. + Если Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется Тогда + ЗапуститьПроверкуПриСозданииНаСервереКонтрагента(Форма, Параметры, КонтрагентСсылка); КонецЕсли; - КонецЕсли; - - КонецЕсли; + КонецЕсли; + КонецПроцедуры -// Процедура - Устанавливаются параметры динамического списка документов. +// Устанавливаются параметры динамического списка документов. // // Параметры: // Список - ДинамическийСписок - Список документов. @@ -1445,32 +1697,25 @@ УстановитьПараметрыДинамическогоСписка(Список); УстановитьУсловноеОформлениеСпискаКонтрагентов(Список); - Состояния = Новый Массив; - Состояния.Добавить(Перечисления.СостоянияСуществованияКонтрагента.КППНеСоответствуетДаннымБазыФНС); - Состояния.Добавить(Перечисления.СостоянияСуществованияКонтрагента.КонтрагентОтсутствуетВБазеФНС); - Состояния.Добавить(Перечисления.СостоянияСуществованияКонтрагента.НеДействуетИлиИзмененКПП); + Состояния = ПроверкаКонтрагентовКлиентСерверПовтИсп.СостоянияНедействующегоКонтрагента(); Список.Параметры.УстановитьЗначениеПараметра("Состояния", Состояния); КонецПроцедуры -// Процедура - Добавляет в дополнительные свойства результат проверки контрагента +// Добавляет в дополнительные свойства результат проверки контрагента // для последующей записи его в регистр в подписке на событие. // // Параметры: // Форма - УправляемаяФорма - Форма карточки контрагента. -// Объект - ДанныеФормыСтруктура - Контрагент-объект +// Объект - ДанныеФормыСтруктура - Контрагент-объект. Процедура ПередЗаписьюНаСервереКонтрагент(Форма, Объект) Экспорт - Если Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется Тогда - - Объект.ДополнительныеСвойства.Вставить("ПроверкаКонтрагентовСостояниеКонтрагента", Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагента); - - КонецЕсли; + Объект.ДополнительныеСвойства.Вставить("ПроверкаКонтрагентовСостояниеКонтрагента", Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагента); КонецПроцедуры -// Процедура - Вспомогательный API. Инициализировать реквизиты проверки контрагента в карточке контрагента. +// Вспомогательный API. Инициализировать реквизиты проверки контрагента в карточке контрагента. // // Параметры: // Форма - УправляемаяФорма - Карточка контрагента, проверка которого выполняется. @@ -1478,23 +1723,29 @@ НовыеРеквизиты = Новый Структура; + ПроверкаИспользуется = ПроверкаКонтрагентовВызовСервера.ИспользованиеПроверкиВозможно(); + // Включена ли проверка и есть ли доступ на использование проверки. + НовыеРеквизиты.Вставить("ПроверкаИспользуется", ПроверкаИспользуется); + // Служебный реквизит + НовыеРеквизиты.Вставить("НужноПоказатьПредложениеВключитьПроверкуКонтрагентов", + НЕ ПроверкаИспользуется И НужноПоказатьПредложениеВключитьПроверкуКонтрагентов()); // Результат проверки контрагента. НовыеРеквизиты.Вставить("СостояниеКонтрагента"); - // Включена ли проверка и есть ли доступ на использование проверки. - НовыеРеквизиты.Вставить("ПроверкаИспользуется", Ложь); - // Служебный реквизит для работы фонового задания. + // Служебные реквизиты для работы фонового задания. НовыеРеквизиты.Вставить("ИнтервалПроверкиРезультата", 1); - // Служебный реквизит для работы фонового задания. НовыеРеквизиты.Вставить("ИдентификаторЗадания", Новый УникальныйИдентификатор); - // Служебный реквизит для работы фонового задания. НовыеРеквизиты.Вставить("ФоновоеЗаданиеЗапущено", Ложь); - // Служебный реквизит для работы фонового задания. НовыеРеквизиты.Вставить("АдресХранилища"); - // Служебный реквизит - НовыеРеквизиты.Вставить("НужноПоказатьПредложениеВключитьПроверкуКонтрагентов"); + // Если Истина, то перед запуском фонового задания по проверке контрагентов из + // карточки контрагента выполняется предварительная проверка ИНН и КПП. + НовыеРеквизиты.Вставить("ВыполнятьПредварительнуюПроверкуКонтрагента", Истина); + НовыеРеквизиты.Вставить("ЭтоИностранныйКонтрагент", Неопределено); + НовыеРеквизиты.Вставить("ЭтоЮридическоеЛицо", Неопределено); + // Результат проверки контрагента. + НовыеРеквизиты.Вставить("ЭтоПроверкаПоКнопке", Ложь); РаботаСКонтрагентамиПереопределяемый.ДополнитьРеквизитыФормыКонтрагент(Форма, НовыеРеквизиты); - + Форма.РеквизитыПроверкиКонтрагентов = НовыеРеквизиты; КонецПроцедуры @@ -1503,7 +1754,7 @@ #Область РаботаСРегистромСостоянияКонтрагентов -// Процедура - Вспомогательный API. Позволяет очистить регистр СостоянияКонтрагентов. +// Вспомогательный API. Позволяет очистить состояния по контрагентам в регистре СостоянияКонтрагентов. // // Параметры: // Контрагенты - Массив - Массив контрагентов. Если нужно очистить весь регистр, то параметр не указывается. @@ -1512,20 +1763,38 @@ НачатьТранзакцию(); Попытка - + + // Не удаляем строки, а очищаем состояния. + // В модели сервисов для контрагентов не подлежащих проверке не очищаем состояние, + // так как в регламентном задании признак иностранного контрагента больше неоткуда получить. Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ | СостоянияКонтрагентов.Контрагент, - | ЗНАЧЕНИЕ(Перечисление.СостоянияСуществованияКонтрагента.ПустаяСсылка) КАК Состояние, + | ВЫБОР + | КОГДА &ОчищатьПоВсемКонтрагентам + | ТОГДА ВЫБОР + | КОГДА &ЭтоМодельСервисов + | И СостоянияКонтрагентов.Состояние = &КонтрагентНеПодлежитПроверке + | ТОГДА &КонтрагентНеПодлежитПроверке + | ИНАЧЕ &ПустаяСсылка + | КОНЕЦ + | ИНАЧЕ ВЫБОР + | КОГДА СостоянияКонтрагентов.Контрагент В (&Контрагенты) + | ТОГДА ВЫБОР + | КОГДА &ЭтоМодельСервисов + | И СостоянияКонтрагентов.Состояние = &КонтрагентНеПодлежитПроверке + | ТОГДА &КонтрагентНеПодлежитПроверке + | ИНАЧЕ &ПустаяСсылка + | КОНЕЦ + | ИНАЧЕ СостоянияКонтрагентов.Состояние + | КОНЕЦ + | КОНЕЦ КАК Состояние, | СостоянияКонтрагентов.ОбластьДанныхВспомогательныеДанные, | СостоянияКонтрагентов.ИНН, | СостоянияКонтрагентов.КПП |ИЗ - | РегистрСведений.СостоянияКонтрагентов КАК СостоянияКонтрагентов - |ГДЕ - | (&ОчищатьПоВсемКонтрагентам - | ИЛИ СостоянияКонтрагентов.Контрагент В (&Контрагенты))"; + | РегистрСведений.СостоянияКонтрагентов КАК СостоянияКонтрагентов"; Если НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда @@ -1535,7 +1804,8 @@ ""); КонецЕсли; - + + // Параметры Если Контрагенты = Неопределено Тогда Запрос.УстановитьПараметр("ОчищатьПоВсемКонтрагентам", Истина); Запрос.УстановитьПараметр("Контрагенты", Новый Массив); @@ -1543,6 +1813,10 @@ Запрос.УстановитьПараметр("ОчищатьПоВсемКонтрагентам", Ложь); Запрос.УстановитьПараметр("Контрагенты", Контрагенты); КонецЕсли; + + Запрос.УстановитьПараметр("ЭтоМодельСервисов", ОбщегоНазначенияПовтИсп.РазделениеВключено()); + Запрос.УстановитьПараметр("КонтрагентНеПодлежитПроверке", Перечисления.СостоянияСуществованияКонтрагента.КонтрагентНеПодлежитПроверке); + Запрос.УстановитьПараметр("ПустаяСсылка", Перечисления.СостоянияСуществованияКонтрагента.ПустаяСсылка()); УстановитьПривилегированныйРежим(Истина); ДанныеКонтрагентов = Запрос.Выполнить().Выгрузить(); @@ -1571,7 +1845,7 @@ #Область РаботаСРегистромДокументыСОшибкамиПроверкиКонтрагентов -// Процедура - Вспомогательный API. Позволяет очистить регистр ДокументыСОшибкамиПроверкиКонтрагентов. +// Вспомогательный API. Позволяет очистить регистр ДокументыСОшибкамиПроверкиКонтрагентов. // // Параметры: // Документы - Массив - Документы, по которым нужно очистить результат проверки. @@ -1717,25 +1991,33 @@ #Область НастройкиПроверки -// Процедура - Включение или отключение использования сервиса путем установки значения константе +// Включение или отключение использования сервиса путем установки значения константе // ИспользоватьПроверкуКонтрагентов. // // Параметры: // ИспользоватьСервис - Булево - Истина, чтобы включить использование сервиса. Ложь - чтобы отключить. Процедура ВключитьВыключитьПроверкуКонтрагентов(ВключитьПроверку) Экспорт - // Устанавливаем значение константы. - Константы.ИспользоватьПроверкуКонтрагентов.Установить(ВключитьПроверку); + Если ВключитьПроверку Тогда + НовоеЗначение = 1; + Иначе + // Принудительно отключили. + // В этом случае больше не показываем предложение на подключение. + НовоеЗначение = 2; + КонецЕсли; + + Константы.ИспользоватьПроверкуКонтрагентов.Установить(НовоеЗначение); КонецПроцедуры -// Процедура - Запуск проверки контрагентов в фоне после включения проверки. +// Запуск проверки контрагентов в фоне после включения проверки. Процедура ЗапуститьФоновуюПроверкуКонтрагентовПослеИзмененияНастройкиПриНеобходимости() Экспорт - ИспользоватьСервис = Константы.ИспользоватьПроверкуКонтрагентов.Получить(); + ПроверкаКонтрагентовВключена = ПроверкаКонтрагентовВключена(); - ЗапуститьФоновуюПроверку = ИспользоватьСервис - И НЕ ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы(); + ЗапуститьФоновуюПроверку = ПроверкаКонтрагентовВключена + И НЕ ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы() + И НЕ МонопольныйРежим(); Если ЗапуститьФоновуюПроверку Тогда ПроверитьКонтрагентовПослеВключенияПроверкиФоновоеЗадание(); @@ -1743,7 +2025,7 @@ КонецПроцедуры -// Процедура - Метод обновления информационной базы для режима сервисов. +// Метод обновления информационной базы для режима сервисов. Процедура ВключитьПроверкуКонтрагентовДляРежимаСервисов() Экспорт Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда @@ -1753,20 +2035,16 @@ КонецПроцедуры -// Функция - Показывает, включена ли проверка контрагентов. +// Показывает, включена ли проверка контрагентов. // Возвращаемое значение: // Булево - Значение константы ИспользоватьПроверкуКонтрагентов - включена ли проверка контрагентов в базе. Функция ПроверкаКонтрагентовВключена() Экспорт - // Проверка, что сервис включен. - НастройкиСервиса = ПараметрыРаботыСервиса(); - ИспользоватьСервис = НастройкиСервиса.ИспользоватьСервис; - - Возврат ИспользоватьСервис; + Возврат ЗначениеКонстантыИспользоватьПроверкуКонтрагентов() = 1; КонецФункции -// Функция - Определяем наличие права на использование проверки контрагентов. +// Определяем наличие права на использование проверки контрагентов. // Возвращаемое значение: // Булево - наличие права на использование проверки контрагентов. Функция ЕстьПравоНаИспользованиеПроверки() Экспорт @@ -1775,7 +2053,7 @@ КонецФункции -// Функция - Определяем наличие права на включение проверки контрагентов. +// Определяем наличие права на включение проверки контрагентов. // Возвращаемое значение: // Булево - наличие права на включение проверки контрагентов. Функция ЕстьПравоНаРедактированиеНастроек() Экспорт @@ -1784,12 +2062,13 @@ КонецФункции -// Функция - Проверяет наличие доступа к веб-сервису ФНС. +// Проверяет наличие доступа к веб-сервису ФНС. // Возвращаемое значение: // Булево - наличие доступа к веб-сервису ФНС. Функция ЕстьДоступКВебСервисуФНС() Экспорт - Прокси = ПроксиСервиса(); + Таймаут = 5; + Прокси = ПроксиСервиса(Таймаут); Если Прокси = Неопределено Тогда Возврат Ложь; @@ -1801,10 +2080,17 @@ ДанныеКонтрагента.Вставить("КПП", "770901001"); ДанныеКонтрагента.Вставить("Дата", ДатаСтрокой(ТекущаяДатаСеанса())); - ПространствоИмен = ПространствоИменОтвета(); - WSЗапрос = Прокси.ФабрикаXDTO.Создать(Прокси.ФабрикаXDTO.Тип(ПространствоИмен, "NdsRequest2")); + Параметры = ПараметрыРаботыСервиса(); + ЗапросФабрикиXDTO = Прокси.ФабрикаXDTO.Тип( + Параметры.ПространствоИменОтвета, + Параметры.ИмяТипаЗапросаФабрикиXDTO); + + WSЗапрос = Прокси.ФабрикаXDTO.Создать(ЗапросФабрикиXDTO); - ДобавитьКонтрагентаВЗапросКСервису(WSЗапрос, Прокси, ПространствоИмен, ДанныеКонтрагента); + ДобавитьКонтрагентаВЗапросКСервису( + WSЗапрос, + Прокси, + ДанныеКонтрагента); NdsResponse = ОтветСервисаФНС(Прокси, WSЗапрос); @@ -1816,16 +2102,16 @@ КонецФункции -// Функция - Определяет, отказался ли пользователь от использования сервиса в предложении на подключение. +// Определяет, отказался ли пользователь от использования сервиса в предложении на подключение. // Возвращаемое значение: // Булево - пользователь отказался от использования сервиса в предложении на подключение. Функция БольшеНеПоказыватьПредложениеПодключиться() Экспорт - Возврат ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПроверкаКонтрагентов", "ПроверкаКонтрагентов_БольшеНеПоказыватьПредложениеИспользоватьСервис") = Истина; + Возврат ПроверкуОтключили(); КонецФункции -// Процедура - Сохраняет дату последнего отображения предложения на использование сервиса. +// Сохраняет дату последнего отображения предложения на использование сервиса. Процедура СохранитьДатуПоследнегоОтображенияПредложенияПодключиться() Экспорт ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ПроверкаКонтрагентов", "ПроверкаКонтрагентов_ДатаПоследнегоОтображенияПредложенияНаВключениеСервиса", ТекущаяДатаСеанса()); @@ -1834,6 +2120,50 @@ #КонецОбласти +#Область УстаревшиеПроцедурыИФункции + +// Проверка нескольких контрагентов. +// +// Параметры: +// ДанныеКонтрагентов - ТаблицаЗначений - Содержит данные проверяемых контрагентов. +// Структуру колонок таблицы см в функции ШаблонТаблицыДанныеКонтрагента. +// АдресХранилища - Строка - Адрес, в который будет помещен результат проверки контрагента. +// ЭтоПроверкаСправочника - Булево - Указывает, выполняется ли проверка справочника. +// Для справочника результат проверки сохраняется во временное хранилище, либо записывается в регистр. +// Для остальных объектов результат проверки заполняется в колонке Состояние таблицы ДанныеКонтрагентов. +// СохранятьРезультатСразуПослеПроверки - Булево - Признак, указывающий нужно ли результат проверки контрагента. +Процедура ПроверитьКонтрагентов(ДанныеКонтрагентов, АдресХранилища = Неопределено, ЭтоПроверкаСправочника = Истина, СохранятьРезультатСразуПослеПроверки = Ложь) Экспорт + + // Если нет доступа к веб-сервису, то проверку не выполняем. + Если НЕ ЕстьДоступКВебСервисуФНС() Тогда + Возврат; + КонецЕсли; + + // Если по некоторым контрагентам можно определить, что они не существуют, не обращаясь к сервису, то к сервису по ним + // обращаться не будем. + Если ЭтоПроверкаСправочника И ИспользоватьКэш(ДанныеКонтрагентов) Тогда + ПолучитьСостоянияКонтрагентовИзКэша(ДанныеКонтрагентов); + КонецЕсли; + + // Приведение данных к нужному формату, выявление записей с ошибками. + ПодготовитьДанныеИВыполнитьПредварительнуюПроверку(ДанныеКонтрагентов); + + // Получение результатов проверки от веб-сервиса. + // Проверяем только тех контрагентов, у которых неопределено состояние существования и у которых нет ошибок. + Отбор = Новый Структура(); + Отбор.Вставить("Состояние", Перечисления.СостоянияСуществованияКонтрагента.ПустаяСсылка()); + ПолучитьРезультатПроверкиВебСервисом(ДанныеКонтрагентов, Отбор); + + // Сохраняем результаты проверки, если это справочник. + Если ЭтоПроверкаСправочника Тогда + УстановитьПривилегированныйРежим(Истина); + СохранитьРезультатыПроверкиСправочника(ДанныеКонтрагентов, АдресХранилища, СохранятьРезультатСразуПослеПроверки); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -1851,7 +2181,7 @@ КонецПроцедуры -// Процедура - Метод фонового задания по проверке контрагента из формы контрагента. +// Метод фонового задания по проверке контрагента из формы контрагента. // // Параметры: // Параметры - Структура - Параметры запуска фонового задания. Ключи структуры: @@ -1888,30 +2218,34 @@ #Область РаботаСВебСервисом -// Функция - Значения настроек +// Значения настроек // Возвращаемое значение: // Структура - Признак использования сервиса и адрес веб-сервиса ФНС. Ключи - "ИспользоватьСервис", "АдресСервиса". Функция ПараметрыРаботыСервиса() - // заполняем общие настройки - ИспользоватьСервис = Константы.ИспользоватьПроверкуКонтрагентов.Получить(); - АдресСервиса = "http://npchk.nalog.ru/FNSNDSCAWS_2?wsdl"; + АдресСервиса = "http://npchk.nalog.ru/FNSNDSCAWS_2?wsdl"; - Возврат Новый Структура("ИспользоватьСервис, АдресСервиса", ИспользоватьСервис, АдресСервиса); + // заполняем общие настройки + Результат = Новый Структура(); + Результат.Вставить("АдресСервиса", АдресСервиса); + Результат.Вставить("ИмяТипаКонтрагентаФабрикиXDTO", "NdsRequest2_NP"); + Результат.Вставить("ИмяТипаЗапросаФабрикиXDTO", "NdsRequest2"); + Результат.Вставить("АдресWSDL", "http://npchk.nalog.ru/FNSNDSCAWS_2?wsdl"); + Результат.Вставить("URIПространстваИмен", "http://ws.unisoft"); + Результат.Вставить("ИмяСервиса", "FNSNDSCAWS2"); + Результат.Вставить("ИмяТочкиПодключения", "FNSNDSCAWS2_Port"); + Результат.Вставить("ПространствоИменОтвета", "http://ws.unisoft/FNSNDSCAWS2/Request"); + + Возврат Результат; КонецФункции -Функция ПроксиСервиса() +Функция ПроксиСервиса(Таймаут = 120) WSПрокси = Неопределено; Попытка - НастройкиСервиса = ПараметрыРаботыСервиса(); - АдресСервиса = НастройкиСервиса.АдресСервиса; - - Если ЗначениеЗаполнено(АдресСервиса) Тогда - WSПрокси = ПолучитьWSПрокси(АдресСервиса); - КонецЕсли; + WSПрокси = ПолучитьWSПрокси(Таймаут); Исключение @@ -1937,14 +2271,12 @@ Возврат; КонецЕсли; - Если НЕ ЕстьДоступКВебСервисуФНС() Тогда - // Нет доступа к веб-сервису - Возврат; - КонецЕсли; - - Прокси = ПроксиСервиса(); - - ПространствоИмен = ПространствоИменОтвета(); + // Объявляем перед циклом. + Прокси = ПроксиСервиса(); + Параметры = ПараметрыРаботыСервиса(); + ЗапросФабрикиXDTO = Прокси.ФабрикаXDTO.Тип( + Параметры.ПространствоИменОтвета, + Параметры.ИмяТипаЗапросаФабрикиXDTO); РазмерПорции = 10000; @@ -1957,12 +2289,16 @@ МинимальныйНомерКонтрагента = Мин(РазмерПорции * (НомерПорции - 1), КоличествоКонтрагентов); МаксимальныйНомерКонтрагента = Мин(РазмерПорции * НомерПорции, КоличествоКонтрагентов) - 1; - WSЗапрос = Прокси.ФабрикаXDTO.Создать(Прокси.ФабрикаXDTO.Тип(ПространствоИмен, "NdsRequest2")); + WSЗапрос = Прокси.ФабрикаXDTO.Создать(ЗапросФабрикиXDTO); Для ИндексТекущегоКонтрагента = МинимальныйНомерКонтрагента По МаксимальныйНомерКонтрагента Цикл ДанныеКонтрагента = ДанныеКонтрагентовДляПроверкиСервисом[ИндексТекущегоКонтрагента]; - ДобавитьКонтрагентаВЗапросКСервису(WSЗапрос, Прокси, ПространствоИмен, ДанныеКонтрагента); + + ДобавитьКонтрагентаВЗапросКСервису( + WSЗапрос, + Прокси, + ДанныеКонтрагента); КонецЦикла; @@ -1988,7 +2324,7 @@ Исключение // Страхуемся от ошибки "Timeout was reached". - ЗаписьЖурналаРегистрации(НСтр("ru = 'Проверка контрагентов.NdsRequest'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru = 'Проверка контрагентов.NdsRequest2'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); NdsResponse = Неопределено; @@ -1999,11 +2335,17 @@ КонецФункции -Процедура ДобавитьКонтрагентаВЗапросКСервису(WSЗапрос, Прокси, ПространствоИмен, ДанныеКонтрагента) +Процедура ДобавитьКонтрагентаВЗапросКСервису(WSЗапрос, Прокси, ДанныеКонтрагента) Попытка - - WSКонтрагент = Прокси.ФабрикаXDTO.Создать(Прокси.ФабрикаXDTO.Тип(ПространствоИмен, "NdsRequest2_NP")); + + Параметры = ПараметрыРаботыСервиса(); + + КонтрагентФабрикиXDTO = Прокси.ФабрикаXDTO.Тип( + Параметры.ПространствоИменОтвета, + Параметры.ИмяТипаКонтрагентаФабрикиXDTO); + + WSКонтрагент = Прокси.ФабрикаXDTO.Создать(КонтрагентФабрикиXDTO); // Указываем ИНН, КПП и Дату WSКонтрагент.INN = ДанныеКонтрагента.ИНН; @@ -2030,7 +2372,11 @@ КонецПроцедуры -Процедура ОбработатьОтветСервиса(NdsResponse, ДанныеКонтрагентовДляПроверкиСервисом, МинимальныйНомерКонтрагента, МаксимальныйНомерКонтрагента) Экспорт +Процедура ОбработатьОтветСервиса( + NdsResponse, + ДанныеКонтрагентовДляПроверкиСервисом, + МинимальныйНомерКонтрагента, + МаксимальныйНомерКонтрагента) ИндексТекущегоОтвета = 0; Для ИндексТекущегоКонтрагента = МинимальныйНомерКонтрагента По МаксимальныйНомерКонтрагента Цикл @@ -2065,44 +2411,88 @@ #Область НастройкиВебСервиса -Функция ПространствоИменОтвета() +Функция ПолучитьWSПрокси(Таймаут) - Возврат "http://ws.unisoft/FNSNDSCAWS2/Request"; - -КонецФункции - -Функция ПолучитьWSПрокси(АдресСервиса) + Параметры = ПараметрыРаботыСервиса(); WSПрокси = ОбщегоНазначения.WSПрокси( - АдресWSDL(АдресСервиса), - "http://ws.unisoft", - "FNSNDSCAWS2", - "FNSNDSCAWS2_Port", + Параметры.АдресWSDL, + Параметры.URIПространстваИмен, + Параметры.ИмяСервиса, + Параметры.ИмяТочкиПодключения, Неопределено, Неопределено, - 120); + Таймаут); Возврат WSПрокси; КонецФункции -Функция АдресWSDL(URI) - - Адрес = СокрЛП(URI); - Если СтрНайти(НРег(Адрес), "?wsdl") = СтрДлина(Адрес) - 4 Тогда - Возврат Адрес; - Иначе - Возврат Адрес + "?wsdl"; - КонецЕсли; - -КонецФункции - #КонецОбласти #КонецОбласти #Область ПрочиеПроцедуры +Функция ЭтоМедленныйРежимРаботы() Экспорт + + ОперативнаяПамять = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ОперативнаяПамять"); + СтрокаСоединенияИБ = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("СтрокаСоединенияИнформационнойБазы"); + РекомендуемыйОбъем = ОбщегоНазначения.ОбщиеПараметрыБазовойФункциональности().РекомендуемыйОбъемОперативнойПамяти; + + ИБФайловая = СтрНайти(ВРег(СтрокаСоединенияИБ), "FILE=") = 1; + + // Проверка объема доступной оперативной памяти. + Если ИБФайловая Тогда + Если ЗначениеЗаполнено(ОперативнаяПамять) + И ОперативнаяПамять < РекомендуемыйОбъем Тогда + Возврат Истина; + КонецЕсли; + Иначе + // В клиент-серверной базе данных проверим режим низкой скорости соединения. + СкоростьТекущегоСоединения = ПолучитьСкоростьКлиентскогоСоединения(); + Возврат СкоростьТекущегоСоединения = СкоростьКлиентскогоСоединения.Низкая; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +// Показывает, включена ли проверка контрагентов. +// Возвращаемое значение: +// Булево - Значение константы ИспользоватьПроверкуКонтрагентов - включена ли проверка контрагентов в базе. +Функция ЗначениеКонстантыИспользоватьПроверкуКонтрагентов() + + Возврат Константы.ИспользоватьПроверкуКонтрагентов.Получить(); + +КонецФункции + +Функция ПроверкуНикогдаНеВключали() + + Возврат ЗначениеКонстантыИспользоватьПроверкуКонтрагентов() = 0; + +КонецФункции + +Функция ПроверкуОтключили() + + Возврат ЗначениеКонстантыИспользоватьПроверкуКонтрагентов() = 2; + +КонецФункции + +Функция ИспользоватьКэш(ДанныеКонтрагентов) + + ИспользоватьКэш = Истина; + Если ДанныеКонтрагентов.Количество() = 1 И ДанныеКонтрагентов.Колонки.Найти("ДополнительныеПараметры") <> Неопределено Тогда + ДополнительныеПараметры = ДанныеКонтрагентов[0].ДополнительныеПараметры; + Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") И ДополнительныеПараметры.Свойство("НеИспользоватьКэш") Тогда + ИспользоватьКэш = НЕ ДополнительныеПараметры.Свойство("НеИспользоватьКэш"); + КонецЕсли; + КонецЕсли; + + Возврат ИспользоватьКэш; + +КонецФункции + Процедура СохранитьРезультатыПроверкиКонтрагентаВРегистр(ДанныеКонтрагента) Попытка @@ -2157,12 +2547,31 @@ КонецПроцедуры -// Процедура - Сохраняет документ в регистр ДокументыСОшибкамиПроверкиКонтрагентов, +Функция ЭтоДокументСОшибкамиПроверкиКонтрагентов(ДокументСсылка) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ДокументыСОшибкамиПроверкиКонтрагентов.Документ + |ИЗ + | РегистрСведений.ДокументыСОшибкамиПроверкиКонтрагентов КАК ДокументыСОшибкамиПроверкиКонтрагентов + |ГДЕ + | ДокументыСОшибкамиПроверкиКонтрагентов.Документ = &ДокументСсылка"; + + Запрос.УстановитьПараметр("ДокументСсылка", ДокументСсылка); + + РезультатЗапроса = Запрос.Выполнить(); + + Возврат НЕ РезультатЗапроса.Пустой(); + +КонецФункции + +// Сохраняет документ в регистр ДокументыСОшибкамиПроверкиКонтрагентов, // если в контрагентах есть ошибка; и удаляет из регистра - если ошибки нет. // // Параметры: // СохраняемыйРезультат - Соответствие - Ключ - сохраняемый документ, Значение - признак наличия ошибки в документе. -Процедура СохранитьРезультатыПроверкиКонтрагентовВДокументеВРегистр(СохраняемыйРезультат) Экспорт +Процедура СохранитьРезультатыПроверкиКонтрагентовВДокументеВРегистр(СохраняемыйРезультат) Если СохраняемыйРезультат = Неопределено Тогда Возврат; @@ -2239,24 +2648,36 @@ КонецПроцедуры -// Проверка ошибок, удаление дублей. -Процедура ПодготовитьДанныеКПроверке(ДанныеКонтрагентовДляПроверки) +Процедура ПодготовитьДанныеИВыполнитьПредварительнуюПроверку(ДанныеКонтрагентовДляПроверки, ДополнительныеПараметры = Неопределено) - ДанныеКонтрагентов = ДанныеКонтрагентовТипизированные(ДанныеКонтрагентовДляПроверки); + // Все данные приводятся к нужному типу, чтобы по ним можно было делать запрос. + ДанныеКонтрагентов = ТипизироватьДанныеКонтрагентов(ДанныеКонтрагентовДляПроверки); + + // Определяем значения ЭтоИностранныйКонтрагент и ЭтоЮридическоеЛицо. + ДополнитьДанныеКонтрагентов(ДанныеКонтрагентовДляПроверки, ДанныеКонтрагентов); + + // Состояния с ошибками получаем из кэша. + ВзятьСостоянияИзКэшаПриПроверкеСправочника(ДанныеКонтрагентов, ДополнительныеПараметры); + + // Исключаем из проверяемых контрагентов тех, к которым нет доступа. ОставитьРазрешенныхКонтрагентов(ДанныеКонтрагентов); - ПодготовитьДанныеКПроверкеПоВсемКонтрагентам(ДанныеКонтрагентов); + + // Проверяем ИНН, КПП и Дату своими проверками перед подачей на веб-сервис ФНС. + ВыполнитьПредварительнуюПроверкуДанныхПоВсемКонтрагентам(ДанныеКонтрагентов, ДополнительныеПараметры); ДанныеКонтрагентовДляПроверки = ДанныеКонтрагентов; КонецПроцедуры -Процедура ПодготовитьДанныеКПроверкеПоВсемКонтрагентам(ДанныеКонтрагентов) +Процедура ВыполнитьПредварительнуюПроверкуДанныхПоВсемКонтрагентам(ДанныеКонтрагентов, ДополнительныеПараметры = Неопределено) Для каждого ДанныеКонтрагента Из ДанныеКонтрагентов Цикл - Если ДанныеКонтрагента.Состояние <> Перечисления.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных Тогда + Если НЕ ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоСостояниеКонтрагентаСОшибкой(ДанныеКонтрагента.Состояние) Тогда + // Проверяем ошибки, приводим данные к нужному формату. - ПодготовитьДанныеКПроверкеПоКаждомуКонтрагенту(ДанныеКонтрагента); + ВыполнитьПредварительнуюПроверкуДанныхПоКаждомуКонтрагенту(ДанныеКонтрагента, ДополнительныеПараметры); + КонецЕсли; КонецЦикла; @@ -2265,44 +2686,89 @@ КонецПроцедуры -Функция ДанныеКонтрагентовТипизированные(ДанныеКонтрагентовДляПроверки) +Функция ТипизироватьДанныеКонтрагентов(ДанныеКонтрагентовДляПроверки) // Создаем таблицу ДанныеКонтрагентов = ШаблонТаблицыДанныеКонтрагента(); - ЕстьОбластьДанных = ДанныеКонтрагентовДляПроверки.Колонки.Найти("ОбластьДанныхВспомогательныеДанные") <> Неопределено И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса"); // Копируем таблицу, сохраняя типы колонок. Для каждого ДанныеКонтрагентаДляПроверки Из ДанныеКонтрагентовДляПроверки Цикл // Копируем данные из таблицы с "сырыми данными" в таблицу с "типизированными" колонками. ДанныеКонтрагента = ДанныеКонтрагентов.Добавить(); - - // В зависимости от наличия колонки ОбластьДанныхВспомогательныеДанные, копируем разный набор данных. - СписокСвойств = "Контрагент, ИНН, КПП, Состояние, Дата, ДополнительныеПараметры"; - Если ЕстьОбластьДанных Тогда - СписокСвойств = СписокСвойств + ", ОбластьДанныхВспомогательныеДанные"; - КонецЕсли; - - ЗаполнитьЗначенияСвойств(ДанныеКонтрагента, ДанныеКонтрагентаДляПроверки, СписокСвойств); + ЗаполнитьЗначенияСвойств(ДанныеКонтрагента, ДанныеКонтрагентаДляПроверки); КонецЦикла; - + Возврат ДанныеКонтрагентов; КонецФункции -Процедура СвернутьДанныеКонтрагентов(ДанныеКонтрагентов) +Процедура ДополнитьДанныеКонтрагентов(ДанныеКонтрагентовДляПроверки, ДанныеКонтрагентов) - // Удаляем из таблицы дубли - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда - ДанныеКонтрагентов.Свернуть("Контрагент, ИНН, КПП, Дата, Состояние, ОбластьДанныхВспомогательныеДанные"); + ЕстьКолонкаЭтоЮридическоеЛицо = ДанныеКонтрагентовДляПроверки.Колонки.Найти("ЭтоЮридическоеЛицо") <> Неопределено; + ЕстьКолонкаЭтоИностранныйКонтрагент = ДанныеКонтрагентовДляПроверки.Колонки.Найти("ЭтоИностранныйКонтрагент") <> Неопределено; + + Если ДанныеКонтрагентов.Количество() = 1 + И НЕ ЗначениеЗаполнено(ДанныеКонтрагентов[0].Контрагент) + И ЗначениеЗаполнено(ДанныеКонтрагентов[0].ЭтоЮридическоеЛицо) + И ЗначениеЗаполнено(ДанныеКонтрагентов[0].ЭтоИностранныйКонтрагент) Тогда + + // Это проверка нового незаписанного элемента справочника. + // При заходе в эту процедуру признаки ЭтоЮридическоеЛицо и + // ЭтоИностранныйКонтрагент уже определенные в других процедурах. + Иначе - ДанныеКонтрагентов.Свернуть("Контрагент, ИНН, КПП, Дата, Состояние"); + + // Запоминаем значение поля "Дополнительные параметры". + ДополнительныеПараметрыДанныхКонтрагентов = ЗапомнитьДополнительныеПараметрыДанныхКонтрагентов(ДанныеКонтрагентов); + + СтандартнаяОбработка = Истина; + РаботаСКонтрагентамиПереопределяемый.ДополнитьДанныеКонтрагентов(ДанныеКонтрагентов, СтандартнаяОбработка); + + // В результате запроса поле "Дополнительные параметры" было "отрезано", + // так как оно имеет тип Структура. Здесь мы восстанавливаем это поле. + ВосстановитьДополнительныеПараметрыДанныхКонтрагентов(ДанныеКонтрагентов, ДополнительныеПараметрыДанныхКонтрагентов); + + // Для случая, если переопределяемая не заполнена, то для обеспечения обратной совместимости + // проверяем заполненность колонок и заполняем их при помощи старых переопределяемых процедур. + Если СтандартнаяОбработка Тогда + + Для каждого ДанныеКонтрагента Из ДанныеКонтрагентов Цикл + + // Заполняем только пустые значения + Если ЕстьКолонкаЭтоЮридическоеЛицо И НЕ ЗначениеЗаполнено(ДанныеКонтрагента.ЭтоЮридическоеЛицо) Тогда + ДанныеКонтрагента.ЭтоЮридическоеЛицо = ЭтоЮридическоеЛицо(ДанныеКонтрагента); + КонецЕсли; + + // Заполняем только пустые значения + Если ЕстьКолонкаЭтоИностранныйКонтрагент И НЕ ЗначениеЗаполнено(ДанныеКонтрагента.ЭтоИностранныйКонтрагент) Тогда + ДанныеКонтрагента.ЭтоИностранныйКонтрагент = ЭтоИностранныйКонтрагент(ДанныеКонтрагента); + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + КонецЕсли; КонецПроцедуры -// Процедура - В таблице ДанныеКонтрагентов оставляет только записи по контрагентам, +Процедура СвернутьДанныеКонтрагентов(ДанныеКонтрагентов, ДополнительныеКолонкиГруппировок = "") + + // Удаляем из таблицы дубли + КолонкиГруппировок = "Контрагент, ИНН, КПП, Дата, Состояние, ЭтоЮридическоеЛицо, ЭтоИностранныйКонтрагент" + + ?(ДополнительныеКолонкиГруппировок = "", "", ", " + ДополнительныеКолонкиГруппировок); + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + КолонкиГруппировок = КолонкиГруппировок + ", ОбластьДанныхВспомогательныеДанные"; + КонецЕсли; + + ДанныеКонтрагентов.Свернуть(КолонкиГруппировок); + +КонецПроцедуры + +// В таблице ДанныеКонтрагентов оставляет только записи по контрагентам, // к которым есть доступ. В модели сервиса из неразделенной области проверку делать // не нужно, поскольку регламентное задание выполняется под администратором // и нет доступа к разделенному справочнику контрагентов. @@ -2313,10 +2779,7 @@ И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() ИЛИ НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - СоответствиеДляДополнительныхПараметров = Новый Соответствие; - Для Каждого ДанныеКонтрагента Из ДанныеКонтрагентов Цикл - СоответствиеДляДополнительныхПараметров.Вставить(ДанныеКонтрагента.Контрагент, ДанныеКонтрагента.ДополнительныеПараметры); - КонецЦикла; + ДополнительныеПараметрыДанныхКонтрагентов = ЗапомнитьДополнительныеПараметрыДанныхКонтрагентов(ДанныеКонтрагентов); Запрос = Новый Запрос; Запрос.Текст = @@ -2324,6 +2787,8 @@ | ДанныеКонтрагентов.Контрагент, | ДанныеКонтрагентов.ИНН, | ДанныеКонтрагентов.КПП, + | ДанныеКонтрагентов.ЭтоЮридическоеЛицо, + | ДанныеКонтрагентов.ЭтоИностранныйКонтрагент, | ДанныеКонтрагентов.Дата, | ДанныеКонтрагентов.ОбластьДанныхВспомогательныеДанные, | ДанныеКонтрагентов.Состояние @@ -2347,6 +2812,8 @@ | ВсеДанныеКонтрагентов.Контрагент, | ВсеДанныеКонтрагентов.ИНН, | ВсеДанныеКонтрагентов.КПП, + | ВсеДанныеКонтрагентов.ЭтоЮридическоеЛицо, + | ВсеДанныеКонтрагентов.ЭтоИностранныйКонтрагент, | ВсеДанныеКонтрагентов.Дата, | ВсеДанныеКонтрагентов.ОбластьДанныхВспомогательныеДанные, | ВсеДанныеКонтрагентов.Состояние @@ -2361,6 +2828,8 @@ | ВсеДанныеКонтрагентов.Контрагент, | ВсеДанныеКонтрагентов.ИНН, | ВсеДанныеКонтрагентов.КПП, + | ВсеДанныеКонтрагентов.ЭтоЮридическоеЛицо, + | ВсеДанныеКонтрагентов.ЭтоИностранныйКонтрагент, | ВсеДанныеКонтрагентов.Дата, | ВсеДанныеКонтрагентов.ОбластьДанныхВспомогательныеДанные, | ВсеДанныеКонтрагентов.Состояние @@ -2389,9 +2858,43 @@ Запрос.УстановитьПараметр("ДанныеКонтрагентов", ДанныеКонтрагентов); ДанныеКонтрагентов = Запрос.Выполнить().Выгрузить(); - ДанныеКонтрагентов.Колонки.Добавить("ДополнительныеПараметры", Новый ОписаниеТипов("Структура")); - Для Каждого ДанныеКонтрагента Из ДанныеКонтрагентов Цикл - ДополнительныеПараметры = СоответствиеДляДополнительныхПараметров.Получить(ДанныеКонтрагента.Контрагент); + // В результате запроса поле "Дополнительные параметры" было "отрезано", + // так как оно имеет тип Структура. Здесь мы восстанавливаем это поле. + ВосстановитьДополнительныеПараметрыДанныхКонтрагентов(ДанныеКонтрагентов, ДополнительныеПараметрыДанныхКонтрагентов); + + КонецЕсли; + +КонецПроцедуры + +Функция ЗапомнитьДополнительныеПараметрыДанныхКонтрагентов(ДанныеКонтрагентов) + + Если ДанныеКонтрагентов.Колонки.Найти("ДополнительныеПараметры") = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + // Сохраняем дополнительные параметры в структуру, потому что + // после запроса эта колонка будет потеряна. + СоответствиеДляДополнительныхПараметров = Новый Соответствие; + Для Каждого ДанныеКонтрагента Из ДанныеКонтрагентов Цикл + СоответствиеДляДополнительныхПараметров.Вставить(ДанныеКонтрагента.Контрагент, ДанныеКонтрагента.ДополнительныеПараметры); + КонецЦикла; + + Возврат СоответствиеДляДополнительныхПараметров; + +КонецФункции + +Процедура ВосстановитьДополнительныеПараметрыДанныхКонтрагентов(ДанныеКонтрагентовБезДополнительныхПараметров, СохраненныеДополнительныеПараметры) + + Если СохраненныеДополнительныеПараметры = Неопределено Тогда + // Означает, что в данных контрагента дополнительных параметров изначально не было. + Возврат; + КонецЕсли; + + Если ДанныеКонтрагентовБезДополнительныхПараметров.Колонки.Найти("ДополнительныеПараметры") = Неопределено Тогда + + ДанныеКонтрагентовБезДополнительныхПараметров.Колонки.Добавить("ДополнительныеПараметры", Новый ОписаниеТипов("Структура")); + Для Каждого ДанныеКонтрагента Из ДанныеКонтрагентовБезДополнительныхПараметров Цикл + ДополнительныеПараметры = СохраненныеДополнительныеПараметры.Получить(ДанныеКонтрагента.Контрагент); Если ДополнительныеПараметры <> Неопределено Тогда ДанныеКонтрагента.ДополнительныеПараметры = ДополнительныеПараметры; КонецЕсли; @@ -2399,103 +2902,141 @@ КонецЕсли; + СохраненныеДополнительныеПараметры = Неопределено; + КонецПроцедуры -// Проверка ошибок по одному контрагенту. -Процедура ПодготовитьДанныеКПроверкеПоКаждомуКонтрагенту(ДанныеКонтрагента) +Процедура ВыполнитьПредварительнуюПроверкуДанныхПоКаждомуКонтрагенту(ДанныеКонтрагента, ДополнительныеПараметрыПроверки = Неопределено) - Ошибка = ""; + // Предотвращаем проверку иностранного контрагента. + + Если ДанныеКонтрагента.ЭтоИностранныйКонтрагент = Истина Тогда // Может равняться Неопределено. + + ДанныеКонтрагента.Состояние = Перечисления.СостоянияСуществованияКонтрагента.КонтрагентНеПодлежитПроверке; + Возврат; + + КонецЕсли; + + Если ТипЗнч(ДополнительныеПараметрыПроверки) = Тип("Структура") + И ДополнительныеПараметрыПроверки.Свойство("ВыполнятьПредварительнуюПроверкуКонтрагента") + И ДополнительныеПараметрыПроверки.ВыполнятьПредварительнуюПроверкуКонтрагента Тогда + + Возврат; + + Иначе + + ДанныеКонтрагента.ИНН = СокрЛП(ДанныеКонтрагента.ИНН); + ДанныеКонтрагента.КПП = СокрЛП(ДанныеКонтрагента.КПП); + + ПроверкаКонтрагентовКлиентСервер.НайденыОшибкиВДанных(ДанныеКонтрагента, ДополнительныеПараметрыПроверки); + + КонецЕсли; + +КонецПроцедуры + +Функция ЭтоЮридическоеЛицо(ДанныеКонтрагента) + + ДлинаИНН = СтрДлина(СокрЛП(ДанныеКонтрагента.ИНН)); // Обращение к реквизитам справочника возможно только из разделенного сеанса. - // При запуске из неразделенного сеанса проверка будет выполнена веб-сервисом. Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() ИЛИ НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - // Проверяем только российских контрагентов. - Если ЭтоИностранныйКонтрагент(ДанныеКонтрагента)Тогда - ДанныеКонтрагента.Состояние = Перечисления.СостоянияСуществованияКонтрагента.КонтрагентНеПодлежитПроверке; - Возврат; + ЭтоЮридическоеЛицо = Ложь; + СтандартнаяОбработка = Истина; + РаботаСКонтрагентамиПереопределяемый.ОпределитьЮрИлиФизЛицоКонтрагент(СтандартнаяОбработка, ЭтоЮридическоеЛицо, ДанныеКонтрагента); + + Если СтандартнаяОбработка Тогда + ЭтоЮридическоеЛицо = ДлинаИНН <> 12; КонецЕсли; - КонецЕсли; - - // ЭтоЮридическоеЛицо - ДлинаИНН = СтрДлина(СокрЛП(ДанныеКонтрагента.ИНН)); - ДлинаКПП = СтрДлина(СокрЛП(ДанныеКонтрагента.КПП)); - - ЭтоЮридическоеЛицо = Ложь; - СтандартнаяОбработка = Истина; - РаботаСКонтрагентамиПереопределяемый.ОпределитьЮрИлиФизЛицоКонтрагент(СтандартнаяОбработка, ЭтоЮридическоеЛицо, ДанныеКонтрагента); - - Если СтандартнаяОбработка Тогда - Если ДлинаИНН = 10 И ДлинаКПП = 9 Тогда - ЭтоЮридическоеЛицо = Истина; - ИначеЕсли ДлинаИНН = 12 И ДлинаКПП = 0 Тогда - ЭтоЮридическоеЛицо = Ложь; - ИначеЕсли ДлинаИНН = 0 ИЛИ ДлинаКПП = 0 Тогда - ДанныеКонтрагента.Состояние = Перечисления.СостоянияСуществованияКонтрагента.ПустойИННИлиКПП; - Возврат; - Иначе - ДанныеКонтрагента.Состояние = Перечисления.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных; - Возврат; - КонецЕсли; Иначе - Если ДлинаИНН = 0 Тогда - ДанныеКонтрагента.Состояние = Перечисления.СостоянияСуществованияКонтрагента.ПустойИННИлиКПП; - Возврат; - ИначеЕсли ЭтоЮридическоеЛицо И ДлинаКПП = 0 Тогда - ДанныеКонтрагента.Состояние = Перечисления.СостоянияСуществованияКонтрагента.ПустойИННИлиКПП; - Возврат; - КонецЕсли; + ЭтоЮридическоеЛицо = ДлинаИНН <> 12; КонецЕсли; - // Дата - Если Не ЗначениеЗаполнено(ДанныеКонтрагента.Дата) Тогда - ДанныеКонтрагента.Дата = НачалоДня(ТекущаяДатаСеанса()); - ИначеЕсли ТипЗнч(ДанныеКонтрагента.Дата) = Тип("Дата") - И (ДанныеКонтрагента.Дата < Дата(1991, 1, 1) ИЛИ ДанныеКонтрагента.Дата > КонецДня(ТекущаяДатаСеанса())) Тогда - ДанныеКонтрагента.Состояние = Перечисления.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных; - Возврат; - КонецЕсли; + Возврат ЭтоЮридическоеЛицо; - // ИНН - ДанныеКонтрагента.ИНН = СокрЛП(ДанныеКонтрагента.ИНН); - ИНН = ДанныеКонтрагента.ИНН; - ИННСоответствуетТребованиям = РегламентированныеДанныеКлиентСервер.ИННСоответствуетТребованиям(ИНН, ЭтоЮридическоеЛицо, Ошибка); - Если СтрНачинаетсяС(ИНН, "00") ИЛИ НЕ ИННСоответствуетТребованиям Тогда - ДанныеКонтрагента.Состояние = Перечисления.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных; - Возврат; - КонецЕсли; - - // КПП - Если ЭтоЮридическоеЛицо Тогда - ДанныеКонтрагента.КПП = СокрЛП(ДанныеКонтрагента.КПП); - КПП = ДанныеКонтрагента.КПП; - КППСоответствуетТребованиям = РегламентированныеДанныеКлиентСервер.КППСоответствуетТребованиям(КПП, Ошибка); - Если НЕ КППСоответствуетТребованиям Тогда - ДанныеКонтрагента.Состояние = Перечисления.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных; - Возврат; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры +КонецФункции Функция ЭтоИностранныйКонтрагент(ДанныеКонтрагента) ЯвляетсяИностранным = Ложь; - РаботаСКонтрагентамиПереопределяемый.ОпределитьЯвляетсяЛиКонтрагентИностранным(ДанныеКонтрагента, ЯвляетсяИностранным); + + // Обращение к реквизитам справочника возможно только из разделенного сеанса. + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() + ИЛИ НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + РаботаСКонтрагентамиПереопределяемый.ОпределитьЯвляетсяЛиКонтрагентИностранным(ДанныеКонтрагента, ЯвляетсяИностранным); + + Иначе + + ЯвляетсяИностранным = ДанныеКонтрагента.Состояние = Перечисления.СостоянияСуществованияКонтрагента.КонтрагентНеПодлежитПроверке; + + КонецЕсли; + Возврат ЯвляетсяИностранным; КонецФункции +Процедура ВзятьСостоянияИзКэшаПриПроверкеСправочника(ДанныеКонтрагентов, ДополнительныеПараметрыПроверки = Неопределено) + + // Если по некоторым контрагентам можно определить, что они не существуют, не обращаясь к сервису, то к сервису по ним + // обращаться не будем. + + Если ДополнительныеПараметрыПроверки <> Неопределено + И ТипЗнч(ДополнительныеПараметрыПроверки) = Тип("Структура") + И ИспользоватьКэш(ДанныеКонтрагентов) Тогда + + ЭтоПроверкаСправочника = ДополнительныеПараметрыПроверки.Свойство("ЭтоПроверкаСправочника") + И ДополнительныеПараметрыПроверки.ЭтоПроверкаСправочника; + + ЭтоПроверкаДокумента = ДополнительныеПараметрыПроверки.Свойство("ЭтоПроверкаДокумента") + И ДополнительныеПараметрыПроверки.ЭтоПроверкаДокумента; + + БратьСостоянияТолькоИзКэша = ДополнительныеПараметрыПроверки.Свойство("ИзКэша") + И ДополнительныеПараметрыПроверки.ИзКэша; + + ЭтоСмешанныйРежимПолученияСостояний = ДополнительныеПараметрыПроверки.Свойство("Смешанный") + И ДополнительныеПараметрыПроверки.Смешанный; + + ЕстьДоступКВебСервисуФНС = + НЕ ДополнительныеПараметрыПроверки.Свойство("ЕстьДоступКВебСервисуФНС") + ИЛИ ДополнительныеПараметрыПроверки.Свойство("ЕстьДоступКВебСервисуФНС") + И ДополнительныеПараметрыПроверки.ЕстьДоступКВебСервисуФНС; + + Если ЭтоПроверкаСправочника + ИЛИ БратьСостоянияТолькоИзКэша + ИЛИ ЭтоСмешанныйРежимПолученияСостояний + ИЛИ ЭтоПроверкаДокумента И НЕ ЕстьДоступКВебСервисуФНС Тогда + + ПолучатьВсеСостоянияИзРегистра = БратьСостоянияТолькоИзКэша + ИЛИ ЭтоПроверкаДокумента И НЕ ЕстьДоступКВебСервисуФНС; + + ПолучитьСостоянияКонтрагентовИзКэша(ДанныеКонтрагентов, ПолучатьВсеСостоянияИзРегистра); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + Процедура ПолучитьСостоянияКонтрагентовИзКэша(ДанныеКонтрагентов, ПолучатьВсеСостоянияИзРегистра = Ложь) + ДополнительныеПараметрыДанныхКонтрагентов = ЗапомнитьДополнительныеПараметрыДанныхКонтрагентов(ДанныеКонтрагентов); + + // В запросе поле ОбластьДанныхВспомогательныеДанные располагается не обычному по порядку. + // Это сделано для того, чтобы при отсутствии подсистемы РаботаВМоделиСервиса поле + // ОбластьДанныхВспомогательныеДанные можно было легко удалить из запроса. + Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ДанныеКонтрагентов.Контрагент, | ДанныеКонтрагентов.ИНН, | ДанныеКонтрагентов.КПП, + | ДанныеКонтрагентов.ЭтоЮридическоеЛицо, + | ДанныеКонтрагентов.ЭтоИностранныйКонтрагент, | ДанныеКонтрагентов.ОбластьДанныхВспомогательныеДанные, | ДанныеКонтрагентов.Дата |ПОМЕСТИТЬ ДанныеКонтрагентов @@ -2508,17 +3049,20 @@ | ДанныеКонтрагентов.Контрагент, | ДанныеКонтрагентов.ИНН, | ДанныеКонтрагентов.КПП, - | ДанныеКонтрагентов.Дата, + | ДанныеКонтрагентов.ЭтоЮридическоеЛицо, + | ДанныеКонтрагентов.ЭтоИностранныйКонтрагент, | ДанныеКонтрагентов.ОбластьДанныхВспомогательныеДанные, + | ДанныеКонтрагентов.Дата, | ВЫБОР | КОГДА &ПолучатьВсеСостоянияИзРегистра | ТОГДА СостоянияКонтрагентов.Состояние | ИНАЧЕ ВЫБОР - | КОГДА СостоянияКонтрагентов.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных) - | ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных) + | КОГДА СостоянияКонтрагентов.Состояние В (&СостоянияСОшибками) + | ТОГДА СостоянияКонтрагентов.Состояние | ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СостоянияСуществованияКонтрагента.ПустаяСсылка) | КОНЕЦ - | КОНЕЦ КАК Состояние + | КОНЕЦ КАК Состояние, + | СостоянияКонтрагентов.ИНН КАК ИНН2 |ИЗ | ДанныеКонтрагентов КАК ДанныеКонтрагентов | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияКонтрагентов КАК СостоянияКонтрагентов @@ -2541,20 +3085,29 @@ КонецЕсли; - Запрос.УстановитьПараметр("ПолучатьВсеСостоянияИзРегистра", ПолучатьВсеСостоянияИзРегистра); + Запрос.УстановитьПараметр("ПолучатьВсеСостоянияИзРегистра", ПолучатьВсеСостоянияИзРегистра); + Запрос.УстановитьПараметр("СостоянияСОшибками", ПроверкаКонтрагентовКлиентСерверПовтИсп.ВсеОшибочныеСостоянияКонтрагента(Ложь)); + Запрос.УстановитьПараметр("ДанныеКонтрагентов", ДанныеКонтрагентов); - Запрос.УстановитьПараметр("ДанныеКонтрагентов", ДанныеКонтрагентов); ДанныеКонтрагентов = Запрос.Выполнить().Выгрузить(); - ДанныеКонтрагентов.Колонки.Добавить("ДополнительныеПараметры", Новый ОписаниеТипов("Структура")); + // В результате запроса поле "Дополнительные параметры" было "отрезано", + // так как оно имеет тип Структура. Здесь мы восстанавливаем это поле. + ВосстановитьДополнительныеПараметрыДанныхКонтрагентов(ДанныеКонтрагентов, ДополнительныеПараметрыДанныхКонтрагентов); КонецПроцедуры -Функция ДатаСтрокой(Дата) +Функция ДатаСтрокой(Знач Дата) Результат = Неопределено; + + // Для предотвращения ошибки + // "Неверная дата (ранее 01.01.1991 или позднее текущей даты)". + ПривестиДатуКЧасовомуПоясуСервераФНС(Дата); + Если ТипЗнч(Дата) = Тип("Строка") Тогда // Дата уже в нужном формате в виде строки. + // Дата строкой может прийти только при проверке отчета. Результат = Дата; ИначеЕсли ТипЗнч(Дата) = Тип("Дата") Тогда Результат = Формат(Дата, "ДФ=dd.MM.yyyy"); @@ -2564,6 +3117,38 @@ КонецФункции +Процедура ПривестиДатуКЧасовомуПоясуСервераФНС(Дата) + + // Обе даты вычисляем одновременно, + // чтобы между ними не оказалось сдвига в несколько секунд. + ТекущаяДатаНаКомпьютере = ТекущаяДатаСеанса(); + ТекущаяУниверсальнаяДата = ТекущаяУниверсальнаяДата(); + + КонтрагентПроверяетсяНаТекущийДень = + ТипЗнч(Дата) = Тип("Строка") И Дата = Формат(ТекущаяДатаНаКомпьютере, "ДФ=dd.MM.yyyy") + ИЛИ ТипЗнч(Дата) = Тип("Дата") И НачалоДня(Дата) = НачалоДня(ТекущаяДатаНаКомпьютере); + + Если КонтрагентПроверяетсяНаТекущийДень Тогда + + РазницаВЧасовыхПоясахСервераФНСИВсемирного = 3; + РазницаВЧасовыхПоясахКомпьютераИВсемирного = (ТекущаяДатаНаКомпьютере - ТекущаяУниверсальнаяДата)/60/60; + РазницаВЧасовыхПоясахКомпьютераИСервераФНС = РазницаВЧасовыхПоясахКомпьютераИВсемирного - РазницаВЧасовыхПоясахСервераФНСИВсемирного; + + ЧасовойПоясКомпьютераВосточнееСервераФНС = РазницаВЧасовыхПоясахКомпьютераИСервераФНС > 0; + + Если ЧасовойПоясКомпьютераВосточнееСервераФНС Тогда + + РазницаВЧасовыхПоясахВСекундах = РазницаВЧасовыхПоясахКомпьютераИСервераФНС*60*60; + ТекущаяДатаНаСервере = ТекущаяДатаНаКомпьютере - РазницаВЧасовыхПоясахВСекундах; + + Дата = НачалоДня(ТекущаяДатаНаСервере); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + Функция СостояниеНаОсновеОтветаСервиса(ДанныеКонтрагента, Ответ) Если Ответ = "0" Тогда @@ -2574,8 +3159,22 @@ Состояние = Перечисления.СостоянияСуществованияКонтрагента.КППНеСоответствуетДаннымБазыФНС; ИначеЕсли Ответ = "4" Тогда Состояние = Перечисления.СостоянияСуществованияКонтрагента.КонтрагентОтсутствуетВБазеФНС; - Иначе - Состояние = Перечисления.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных; + ИначеЕсли Ответ = "5" Тогда + Состояние = Перечисления.СостоянияСуществованияКонтрагента.НеверныйИНН; + ИначеЕсли Ответ = "6" Тогда + Состояние = Перечисления.СостоянияСуществованияКонтрагента.НевернаяДлинаИНН; + ИначеЕсли Ответ = "7" Тогда + Состояние = Перечисления.СостоянияСуществованияКонтрагента.НевернаяДлинаКПП; + ИначеЕсли Ответ = "8" Тогда + Состояние = Перечисления.СостоянияСуществованияКонтрагента.НедопустимыеСимволыВИНН; + ИначеЕсли Ответ = "9" Тогда + Состояние = Перечисления.СостоянияСуществованияКонтрагента.НедопустимыеСимволыВКПП; + ИначеЕсли Ответ = "10" Тогда + Состояние = Перечисления.СостоянияСуществованияКонтрагента.ИПНеМожетИметьКПП; + ИначеЕсли Ответ = "11" Тогда + Состояние = Перечисления.СостоянияСуществованияКонтрагента.НекорректныйФорматДаты; + ИначеЕсли Ответ = "12" Тогда + Состояние = Перечисления.СостоянияСуществованияКонтрагента.НевернаяДата; КонецЕсли; Возврат Состояние; @@ -2592,14 +3191,41 @@ | Контрагенты.%1 КАК ИНН, | Контрагенты.%2 КАК КПП, | &ОбластьДанныхВспомогательныеДанные КАК ОбластьДанныхВспомогательныеДанные, + | ЛОЖЬ КАК ЭтоИностранныйКонтрагент, + | ВЫБОР + | КОГДА ПОДСТРОКА(Контрагенты.%1, 12, 1) <> """" + | ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ КАК ЭтоЮридическоеЛицо, | &Дата КАК Дата |ИЗ | Справочник.%3 КАК Контрагенты | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияКонтрагентов КАК СостоянияКонтрагентов | ПО Контрагенты.Ссылка = СостоянияКонтрагентов.Контрагент |ГДЕ - | (СостоянияКонтрагентов.Состояние ЕСТЬ NULL - | ИЛИ СостоянияКонтрагентов.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияСуществованияКонтрагента.ПустаяСсылка)) + | СостоянияКонтрагентов.Состояние ЕСТЬ NULL + | %4 + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ %5 + | Контрагенты.Ссылка КАК Контрагент, + | Контрагенты.%1 КАК ИНН, + | Контрагенты.%2 КАК КПП, + | &ОбластьДанныхВспомогательныеДанные КАК ОбластьДанныхВспомогательныеДанные, + | ЛОЖЬ КАК ЭтоИностранныйКонтрагент, + | ВЫБОР + | КОГДА ПОДСТРОКА(Контрагенты.%1, 12, 1) <> """" + | ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ КАК ЭтоЮридическоеЛицо, + | &Дата КАК Дата + |ИЗ + | Справочник.%3 КАК Контрагенты + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияКонтрагентов КАК СостоянияКонтрагентов + | ПО Контрагенты.Ссылка = СостоянияКонтрагентов.Контрагент + |ГДЕ + | СостоянияКонтрагентов.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияСуществованияКонтрагента.ПустаяСсылка) | %4"; Если НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда @@ -2648,7 +3274,15 @@ КонецЕсли; КонецЕсли; - ПроверитьКонтрагентов(ДанныеКонтрагентов); + Если ДанныеКонтрагентов.Количество() > 0 Тогда + + ДанныеКонтрагентов.Колонки.Добавить("ДополнительныеПараметры", Новый ОписаниеТипов("Структура")); + + ДополнительныеПараметры = Новый Структура(); + ДополнительныеПараметры.Вставить("ЭтоПроверкаСправочника", Истина); + ПроверитьВебСервисомФНС(ДанныеКонтрагентов, ДополнительныеПараметры); + + КонецЕсли; КонецПроцедуры @@ -2676,7 +3310,9 @@ | И ПроверяемыеКонтрагенты.ИНН = ДанныеКонтрагентов.ИНН | И ПроверяемыеКонтрагенты.КПП = ДанныеКонтрагентов.КПП | И (НАЧАЛОПЕРИОДА(ПроверяемыеКонтрагенты.Дата, День) = НАЧАЛОПЕРИОДА(ДанныеКонтрагентов.Дата, День) - | ИЛИ НАЧАЛОПЕРИОДА(ПроверяемыеКонтрагенты.Дата, День) = ДатаВремя(1,1,1))"; + | ИЛИ НАЧАЛОПЕРИОДА(ПроверяемыеКонтрагенты.Дата, День) = ДатаВремя(1,1,1) + | ИЛИ НАЧАЛОПЕРИОДА(ПроверяемыеКонтрагенты.Дата, День) > &ТекущаяДата + | И НАЧАЛОПЕРИОДА(ДанныеКонтрагентов.Дата, День) = &ТекущаяДата)"; Если Состояния <> Неопределено Тогда Запрос.Текст = Запрос.Текст + " @@ -2686,10 +3322,55 @@ Запрос.УстановитьПараметр("Состояния", Состояния); КонецЕсли; + + Запрос.УстановитьПараметр("ТекущаяДата", НачалоДня(ТекущаяДатаСеанса())); ПроверяемыеКонтрагенты = Запрос.Выполнить().Выгрузить(); ПроверяемыеКонтрагенты.Колонки.Добавить("ДополнительныеПараметры", Новый ОписаниеТипов("Структура")); + ДобавитьИндексыТаблицыДанныеКонтрагента(ПроверяемыеКонтрагенты); + +КонецПроцедуры + +Процедура ЗаполнитьСостоянияВДокументе(ПроверяемыеКонтрагенты, ДанныеКонтрагентов) + + Если ПроверяемыеКонтрагенты.Колонки.Найти("Состояние") <> Неопределено Тогда + ПроверяемыеКонтрагенты.ЗаполнитьЗначения( + Перечисления.СостоянияСуществованияКонтрагента.ПустаяСсылка(), + "Состояние"); + КонецЕсли; + + ДобавитьИндексыТаблицыДанныеКонтрагента(ДанныеКонтрагентов); + + Для каждого ПроверяемыйКонтрагент Из ПроверяемыеКонтрагенты Цикл + + ДополнительныеПараметры = Новый Структура(); + ДополнительныеПараметры.Вставить("Контрагент", ПроверяемыйКонтрагент.Контрагент); + ДополнительныеПараметры.Вставить("ИНН", ПроверяемыйКонтрагент.ИНН); + ДополнительныеПараметры.Вставить("КПП", ПроверяемыйКонтрагент.КПП); + + ДанныеКонтрагента = ДанныеКонтрагентов.НайтиСтроки(ДополнительныеПараметры); + + Для каждого СтрокаДанныхКонтрагента Из ДанныеКонтрагента Цикл + + ДатаВДокументе = НачалоДня(ПроверяемыйКонтрагент.Дата); + НачалоСегодняшнегоДня = НачалоДня(ТекущаяДатаСеанса()); + ДатаНаКоторуюПроверялось = НачалоДня(СтрокаДанныхКонтрагента.Дата); + + ДатыСовпадают = ДатаВДокументе = ДатаНаКоторуюПроверялось; + ДатаПустая = ДатаВДокументе = Дата(1,1,1); + ДатаДокументаБольшеТекущей = ДатаВДокументе > НачалоСегодняшнегоДня + И ДатаНаКоторуюПроверялось = НачалоСегодняшнегоДня; + + Если ДатыСовпадают ИЛИ ДатаПустая ИЛИ ДатаДокументаБольшеТекущей Тогда + ПроверяемыйКонтрагент.Состояние = СтрокаДанныхКонтрагента.Состояние; + Прервать; + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + КонецПроцедуры Процедура ПоместитьТаблицуЗначенийВоВременнуюТаблицу(Таблица, Запрос, ИмяВременнойТаблицы, ПостфиксСинонима = "", ИсключаяКолонки = "") @@ -2754,7 +3435,7 @@ КонецФункции -Функция НедействующиеКонтрагентыОпределены(ПроверяемыеКонтрагенты) +Функция ОпределитьНедействующихКонтрагентовВОтчете(ПроверяемыеКонтрагенты) // Подготавливаем данные для проверки. ДанныеКонтрагентов = ПроверяемыеКонтрагенты.Скопировать(); @@ -2770,17 +3451,23 @@ КонецЕсли; // Проверка веб-сервисом ФНС - ПроверитьКонтрагентов(ДанныеКонтрагентов, , Ложь); + ДополнительныеПараметры = Новый Структура(); + ДополнительныеПараметры.Вставить("ЭтоПроверкаОтчета", Истина); - Если ЕстьНепроверенныеКонтрагенты(ДанныеКонтрагентов) Тогда - Возврат Ложь; - КонецЕсли; - - Состояния = ПроверкаКонтрагентовКлиентСерверПовтИсп.СостоянияНедействующегоКонтрагента(Истина); + ПроверитьВебСервисомФНС(ДанныеКонтрагентов, ДополнительныеПараметры); + ЕстьДоступКВебСервисуФНС = ДополнительныеПараметры.ЕстьДоступКВебСервисуФНС + И НЕ ЕстьНепроверенныеКонтрагенты(ДанныеКонтрагентов); + + // Копируем полученные состояния в исходную таблицу. + Состояния = ПроверкаКонтрагентовКлиентСерверПовтИсп.НекорректныеСостоянияКонтрагента(); ЗаполнитьСостояния(ПроверяемыеКонтрагенты, ДанныеКонтрагентов, Состояния); - Возврат Истина; + Результат = Новый Структура; + Результат.Вставить("ДанныеКонтрагентов", ПроверяемыеКонтрагенты); + Результат.Вставить("ЕстьДоступКВебСервисуФНС", ЕстьДоступКВебСервисуФНС); + + Возврат Результат; КонецФункции @@ -2791,7 +3478,7 @@ КонецФункции -// Функция - Нужно показать предложение включить проверку контрагентов. +// Нужно показать предложение включить проверку контрагентов. // Определяет, нужно ли показывать предложение на включение проверки с учетом следующего: // 1. Что есть право на использование или настройку проверки. // 2. Что проверка еще не включена. @@ -2800,7 +3487,7 @@ // Возвращаемое значение: // Булево - Истина, если предложение нужно показывать. // -Функция НужноПоказатьПредложениеВключитьПроверкуКонтрагентов() Экспорт +Функция НужноПоказатьПредложениеВключитьПроверкуКонтрагентов() НужноПоказатьПредложение = // В модели сервисов предложение не показываем. @@ -2809,7 +3496,7 @@ И (ЕстьПравоНаИспользованиеПроверки() ИЛИ ЕстьПравоНаРедактированиеНастроек()) // Определяем, включен ли сервис. - И НЕ ПроверкаКонтрагентовВключена() + И ПроверкуНикогдаНеВключали() // Проверяем, не нажал ли пользователь кнопку "Больше не показывать" в предложении на включение сервиса. И НЕ БольшеНеПоказыватьПредложениеПодключиться() // Проверяем, давно ли в последний раз показывалось предложение на включение сервиса. @@ -2849,7 +3536,7 @@ #Область ШаблоныИЗаполнениеТаблиц -// Функция - Шаблон таблицы, используемой для передачи данных в веб-сервис ФНС. +// Шаблон таблицы, используемой для передачи данных в веб-сервис ФНС. // Возвращаемое значение: // ТаблицаЗначений - пустая таблица с колонками "Контрагент", "ИНН", "КПП", "Дата", "Состояние", "ДополнительныеПараметры" // "ОбластьДанныхВспомогательныеДанные"(если есть подсистема РаботаВМоделиСервиса). @@ -2861,20 +3548,27 @@ СвойстваСправочника = ПроверкаКонтрагентовКлиентСервер.СвойстваСправочникаКонтрагенты(); Тип = "СправочникСсылка." + СвойстваСправочника.Имя; + МассивТипов = Новый Массив; + МассивТипов.Добавить(Тип("Булево")); + МассивТипов.Добавить(Тип("Null")); + ТипБулевоИНеопределено = Новый ОписаниеТипов(МассивТипов); + // Проверяемый контрагент - ДанныеКонтрагентов.Колонки.Добавить("Контрагент", Новый ОписаниеТипов(Тип)); - // ИНН контрагента - ДанныеКонтрагентов.Колонки.Добавить("ИНН", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(12))); - // КПП контрагента - ДанныеКонтрагентов.Колонки.Добавить("КПП", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(9))); + ДанныеКонтрагентов.Колонки.Добавить("Контрагент", Новый ОписаниеТипов(Тип)); + ДанныеКонтрагентов.Колонки.Добавить("ИНН", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(12))); + ДанныеКонтрагентов.Колонки.Добавить("КПП", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(9))); + ДанныеКонтрагентов.Колонки.Добавить("ЭтоЮридическоеЛицо", ТипБулевоИНеопределено); + ДанныеКонтрагентов.Колонки.Добавить("ЭтоИностранныйКонтрагент", ТипБулевоИНеопределено); // Дата, на которую выполняется проверка контрагента. - ДанныеКонтрагентов.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата",,,Новый КвалификаторыДаты(ЧастиДаты.Дата))); + ДанныеКонтрагентов.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата",,,Новый КвалификаторыДаты(ЧастиДаты.Дата))); + // Дополнительные сведения о контрагенте. + ДанныеКонтрагентов.Колонки.Добавить("ДополнительныеПараметры", Новый ОписаниеТипов("Структура")); // Результат проверки контрагента. - ДанныеКонтрагентов.Колонки.Добавить("Состояние", Новый ОписаниеТипов("ПеречислениеСсылка.СостоянияСуществованияКонтрагента")); - // Результат проверки контрагента. - ДанныеКонтрагентов.Колонки.Добавить("ДополнительныеПараметры", Новый ОписаниеТипов("Структура")); + ДанныеКонтрагентов.Колонки.Добавить("Состояние", Новый ОписаниеТипов("ПеречислениеСсылка.СостоянияСуществованияКонтрагента")); // Область данных ДобавитьКолонкуОбластьДанных(ДанныеКонтрагентов); + + ДобавитьИндексыТаблицыДанныеКонтрагента(ДанныеКонтрагентов); Возврат ДанныеКонтрагентов; @@ -2891,6 +3585,19 @@ КонецФункции +Функция ШаблонТаблицыДанныеКонтрагентаДляОтчета() + + ДанныеКонтрагентов = ШаблонТаблицыДанныеКонтрагента(); + + ДанныеКонтрагентов.Колонки.Добавить("НомерРаздела", ОбщегоНазначения.ОписаниеТипаЧисло(10)); + ДанныеКонтрагентов.Колонки.Добавить("СтрокаТабличногоДокумента", ОбщегоНазначения.ОписаниеТипаЧисло(10)); + + ДанныеКонтрагентов.Индексы.Добавить("НомерРаздела"); + + Возврат ДанныеКонтрагентов; + +КонецФункции + Процедура ДобавитьСтрокуВДанныеКонтрагентовВДокументе( Ссылка, ДанныеКонтрагентов, @@ -3026,13 +3733,7 @@ КонецФункции -// Функция - Описание табличных частей. -// -// Параметры: -// Форма - УправляемаяФорма - Форма документа, в котором выполняется проверка контрагентов. -// Возвращаемое значение: -// Описание - ТаблицаЗначений - Таблица с описанием расположения контрагентов в табличной части документа. -Функция ОписаниеТабличныхЧастей(Форма) Экспорт +Функция ОписаниеТабличныхЧастей(Форма) ОписаниеТабличныхЧастей = ШаблонТаблицыОписанияТабличныхЧастей(); РаботаСКонтрагентамиПереопределяемый.СформироватьОписаниеДокументовСТабличнымиЧастями(Форма, ОписаниеТабличныхЧастей); @@ -3043,16 +3744,184 @@ Процедура ДобавитьКолонкуОбластьДанных(Таблица) - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") + И Таблица.Колонки.Найти("ОбластьДанныхВспомогательныеДанные") = Неопределено Тогда Таблица.Колонки.Добавить("ОбластьДанныхВспомогательныеДанные", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(7, 0, ДопустимыйЗнак.Неотрицательный))); КонецЕсли; КонецПроцедуры +Процедура ДобавитьИндексыТаблицыДанныеКонтрагента(Таблица) + + Таблица.Индексы.Добавить("Контрагент, ИНН, КПП, Дата"); + + Если Таблица.Колонки.Найти("НомерРаздела") <> Неопределено Тогда + Таблица.Индексы.Добавить("НомерРаздела"); + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область ПроверкаКонтрагентовВДокументах +Процедура ОчиститьРезультатПроверкиВДокументе(Форма) + + ОчиститьРезультатыПредыдущихПроверок(Форма, Неопределено); + ПрорисоватьСостоянияКонтрагентовВДокументе( + Форма, + Перечисления.СостоянияПроверкиКонтрагентов.ПроверкаВыполнена); + +КонецПроцедуры + +Функция ДанныеКонтрагентовВДокументеДляПроверкиФоновымЗаданием(Форма, ПараметрыФоновогоЗадания) + + // При отключенной автоматической проверке инициализация при открытии документа не выполняется + // для того, чтобы ускорить открытие документа. + // Поэтому инициализация выполняется сейчас непосредственно перед проверкой. + Если НЕ Форма.РеквизитыПроверкиКонтрагентов.ИнициализацияВыполненаПолностью Тогда + + // При инициализации признак ЭтоПроверкаПоКнопке сбрасывается, поэтому запоминаем его. + ЭтоПроверкаПоКнопке = Форма.РеквизитыПроверкиКонтрагентов.ЭтоПроверкаПоКнопке; + // Принудительная инициализация. + ИнициализироватьРеквизитыПроверкиКонтрагентовВДокументе(Форма, Истина); + Форма.РеквизитыПроверкиКонтрагентов.ЭтоПроверкаПоКнопке = ЭтоПроверкаПоКнопке; + + УправлениеФормойДокументаПриИнициализации(Форма); + КонецЕсли; + + Если Форма.РеквизитыПроверкиКонтрагентов.ЭтоПроверкаПоКнопке Тогда + ОчиститьРезультатПроверкиВДокументе(Форма); + КонецЕсли; + + Если Форма.РеквизитыПроверкиКонтрагентов.ЭтоПроверкаКонтрагентовПриОткрытии + И Форма.РеквизитыПроверкиКонтрагентов.Свойство("АдресДанныхКонтрагентовПриОткрытии") + И ЭтоАдресВременногоХранилища(Форма.РеквизитыПроверкиКонтрагентов.АдресДанныхКонтрагентовПриОткрытии) Тогда + + // При открытии данные и так пустые, очищать их не нужно. + ДанныеКонтрагентов = ПолучитьИзВременногоХранилища( + Форма.РеквизитыПроверкиКонтрагентов.АдресДанныхКонтрагентовПриОткрытии); + Форма.РеквизитыПроверкиКонтрагентов.Удалить("АдресДанныхКонтрагентовПриОткрытии"); + + Иначе + + ОчиститьРезультатыПредыдущихПроверок(Форма, ПараметрыФоновогоЗадания); + ДанныеКонтрагентов = ДанныеКонтрагентовВДокументе(Форма); + + КонецЕсли; + + // Заполняем данные проверяемых контрагентов. + ДанныеКонтрагентов.ЗаполнитьЗначения(Перечисления.СостоянияСуществованияКонтрагента.ПустаяСсылка(), "Состояние"); + + Возврат ДанныеКонтрагентов; + +КонецФункции + +Процедура ИнициализироватьРеквизитыПроверкиКонтрагентовВДокументе(Форма, ЭтоПринудительнаяИнициализация = Ложь) + + Форма.РеквизитыПроверкиКонтрагентов = Новый Структура; + + НовыеРеквизиты = Форма.РеквизитыПроверкиКонтрагентов; + + ПроверкаИспользуется = ПроверкаКонтрагентовВызовСервера.ИспользованиеПроверкиВозможно(); + // Включена ли проверка и есть ли доступ на использование проверки. + НовыеРеквизиты.Вставить("ПроверкаИспользуется", ПроверкаИспользуется); + // Служебный реквизит + НовыеРеквизиты.Вставить("НужноПоказатьПредложениеВключитьПроверкуКонтрагентов", + НЕ ПроверкаИспользуется И НужноПоказатьПредложениеВключитьПроверкуКонтрагентов()); + + // Служебный реквизит для работы фонового задания. + НовыеРеквизиты.Вставить("АдресХранилища"); + // Служебный реквизит для работы фонового задания. + НовыеРеквизиты.Вставить("ИдентификаторЗадания", Новый УникальныйИдентификатор); + // Служебный реквизит для работы фонового задания. + НовыеРеквизиты.Вставить("ЗаданиеВыполнено", Истина); + // Результат проверки контрагентов в документе. Содержит ли документ некорректных контрагентов. + НовыеРеквизиты.Вставить("ЭтоДокументСОшибкой", Ложь); + // Реквизит, предназначенный для определения необходимости перерисовывать список + // после проверки контрагентов. + НовыеРеквизиты.Вставить("ЭтотДокументБылСОшибкой", Ложь); + // Результат проверки контрагентов в документе. Итоговое состояние контрагентов в документе. + НовыеРеквизиты.Вставить("СостояниеКонтрагентов", Перечисления.СостоянияСуществованияКонтрагента.ПустаяСсылка()); + // Позволяет не прорисовывать результат проверки контрагентов, + // если начато редактирование табличной части документа. + // Позволяет избежать ошибки сброса редактируемого значений при выводе результатов проверки. + НовыеРеквизиты.Вставить("ОтложитьПрорисовкуРезультатаПроверкиКонтрагентов", Ложь); + // Служебный реквизит + НовыеРеквизиты.Вставить("АдресДанныхКонтрагентовИзКэша", Неопределено); + НовыеРеквизиты.Вставить("СохранятьРезультатСразуПослеПроверки", Истина); + НовыеРеквизиты.Вставить("ЭтоПроверкаКонтрагентовПриОткрытии", НЕ ЭтоПринудительнаяИнициализация); + НовыеРеквизиты.Вставить("АдресДанныхКонтрагентовПриОткрытии", Неопределено); + НовыеРеквизиты.Вставить("УникальныйИдентификаторФормы", Форма.УникальныйИдентификатор); + НовыеРеквизиты.Вставить("ЭтоПроверкаПоКнопке", Ложь); + + НовыеРеквизиты.Вставить("ИнициализацияВыполненаПолностью", Ложь); + + Если ПроверкаИспользуется + ИЛИ ЭтоПринудительнаяИнициализация Тогда + + НовыеРеквизиты.Вставить("ИнициализацияВыполненаПолностью", Истина); + + ВидДокумента = ПроверкаКонтрагентовКлиентСервер.ВидДокумента(Форма); + + ЭтоДокументСКонтрагентомВШапке = + ВидДокумента.Свойство("КонтрагентНаходитсяВШапке") + И ВидДокумента.КонтрагентНаходитсяВШапке; + + ЭтоДокументСКонтрагентомВТабличнойЧасти = + ВидДокумента.Свойство("КонтрагентНаходитсяВТабличнойЧасти") + И ВидДокумента.КонтрагентНаходитсяВТабличнойЧасти; + + ЭтоДокументСоСчетомФактуройВПодвале = + ВидДокумента.Свойство("СчетФактураНаходитсяВПодвале") + И ВидДокумента.СчетФактураНаходитсяВПодвале; + + ЭтоСчетФактура = + ВидДокумента.Свойство("ЯвляетсяСчетомФактурой") + И ВидДокумента.ЯвляетсяСчетомФактурой; + + НовыеРеквизиты.Вставить("ЭтоДокументСКонтрагентомВШапке", ЭтоДокументСКонтрагентомВШапке); + НовыеРеквизиты.Вставить("ЭтоДокументСКонтрагентомВТабличнойЧасти", ЭтоДокументСКонтрагентомВТабличнойЧасти); + НовыеРеквизиты.Вставить("ЭтоДокументСоСчетомФактуройВПодвале", ЭтоДокументСоСчетомФактуройВПодвале); + НовыеРеквизиты.Вставить("ЭтоСчетФактура", ЭтоСчетФактура); + + Если ЭтоДокументСКонтрагентомВШапке Тогда + // Результат проверки контрагента в шапке документа. + НовыеРеквизиты.Вставить("СостояниеКонтрагента", Перечисления.СостоянияСуществованияКонтрагента.ПустаяСсылка()); + КонецЕсли; + + // Результат проверки контрагентов в счете-фактуре. + Если ЭтоДокументСоСчетомФактуройВПодвале ИЛИ ЭтоСчетФактура Тогда + // Итоговое состояние контрагентов в счете-фактуре. + НовыеРеквизиты.Вставить("СостояниеКонтрагентовВСчетеФактуре", Перечисления.СостоянияСуществованияКонтрагента.ПустаяСсылка()); + // Итоговое состояние счета-фактуры. + НовыеРеквизиты.Вставить("ЭтоСчетФактураСОшибкой", Ложь); + КонецЕсли; + + Если ЭтоСчетФактура Тогда + + // Состояния проверки каждого контрагента в счете-фактуре. + Описание = ШаблонТаблицыОписания(); + РаботаСКонтрагентамиПереопределяемый.СформироватьОписаниеСчетовФактур(Форма, Описание); + + Для Каждого СтрокаОписания Из Описание Цикл + + ИмяРеквизитаСчетаФактуры = ИмяРеквизита(Форма, СтрокаОписания.Элемент.Имя); + Свойство = ИмяРеквизитаСостоянияКонтрагентаВСчетеФактуре(ИмяРеквизитаСчетаФактуры); + + Форма.РеквизитыПроверкиКонтрагентов.Вставить(Свойство, Перечисления.СостоянияСуществованияКонтрагента.ПустаяСсылка()); + + КонецЦикла; + + КонецЕсли; + + КонецЕсли; + + // Доопределение реквизитов потребителем. + РаботаСКонтрагентамиПереопределяемый.ДополнитьРеквизитыФормыДокумент(Форма, Форма.РеквизитыПроверкиКонтрагентов); + +КонецПроцедуры + Процедура УстановитьУсловноеОформлениеСпискаДокументов(Список) СтандартнаяОбработка = Истина; @@ -3078,8 +3947,9 @@ Процедура УстановитьПараметрыДинамическогоСписка(Список) - ИспользованиеПроверкиВозможно = ПроверкаКонтрагентовВызовСервера.ИспользованиеПроверкиВозможно(); - Список.Параметры.УстановитьЗначениеПараметра("ИспользованиеПроверкиВозможно", ИспользованиеПроверкиВозможно); + Список.Параметры.УстановитьЗначениеПараметра( + "ИспользованиеПроверкиВозможно", + ЕстьПравоНаИспользованиеПроверки()); КонецПроцедуры @@ -3088,7 +3958,7 @@ Если ПроверкаКонтрагентовКлиентСервер.ЭтоСчетФактура(Форма) Тогда Форма.РеквизитыПроверкиКонтрагентов.ЭтоСчетФактураСОшибкой = - ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоСостояниеНедействующегоКонтрагента(Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагентов, Истина); + ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоНекорректноеСостояниеКонтрагента(Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагентов); Иначе @@ -3096,7 +3966,7 @@ Если ПроверкаКонтрагентовКлиентСервер.ЭтоДокументСоСчетомФактуройВПодвале(Форма) Тогда Форма.РеквизитыПроверкиКонтрагентов.ЭтоСчетФактураСОшибкой = - ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоСостояниеНедействующегоКонтрагента(Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагентовВСчетеФактуре, Истина); + ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоНекорректноеСостояниеКонтрагента(Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагентовВСчетеФактуре); КонецЕсли; КонецЕсли; @@ -3107,7 +3977,7 @@ ДанныеКонтрагентов = ШаблонТаблицыДанныеКонтрагентаДляДокумента(); - Если Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется Тогда + Если Форма.РеквизитыПроверкиКонтрагентов.ИнициализацияВыполненаПолностью Тогда Если ПроверкаКонтрагентовКлиентСервер.ЭтоСчетФактура(Форма) Тогда @@ -3142,6 +4012,10 @@ КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + ДанныеКонтрагентов.ЗаполнитьЗначения(ОбщегоНазначения.ЗначениеРазделителяСеанса(), "ОбластьДанныхВспомогательныеДанные"); + КонецЕсли; + Возврат ДанныеКонтрагентов; КонецФункции @@ -3227,11 +4101,13 @@ Новый Структура("Контрагент, Дата", Контрагент, Дата)); Для каждого СтрокиДанныхКонтрагента Из СтрокиДанныхКонтрагентов Цикл + СтрокаТабличнойЧасти.Состояние = СтрокиДанныхКонтрагента.Состояние; СтрокаТабличнойЧасти.ЭтоНекорректныйКонтрагент = - ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоСостояниеНедействующегоКонтрагента(СтрокиДанныхКонтрагента.Состояние, Истина); + ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоНекорректноеСостояниеКонтрагента(СтрокиДанныхКонтрагента.Состояние); + КонецЦикла; - + КонецЦикла; КонецЦикла; @@ -3273,9 +4149,9 @@ РаботаСКонтрагентамиПереопределяемый.СохраняемыеРезультатыПроверкиСчетФактурыВДокументе(СтандартнаяОбработка, СохраняемоеЗначение, Форма); Если СтандартнаяОбработка Тогда - СчетФактура = ПроверкаКонтрагентовКлиентСервер.СчетФактура(Форма); - Если ЗначениеЗаполнено(СчетФактура) И ЗначениеЗаполнено(Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагентовВСчетеФактуре) Тогда - СохраняемоеЗначение.Вставить(СчетФактура, Форма.РеквизитыПроверкиКонтрагентов.ЭтоСчетФактураСОшибкой); + + Если ЗначениеЗаполнено(Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагентов) Тогда + СохраняемоеЗначение.Вставить(ДокументСсылка, Форма.РеквизитыПроверкиКонтрагентов.ЭтоСчетФактураСОшибкой); КонецЕсли; КонецЕсли; @@ -3423,7 +4299,7 @@ Процедура ОчиститьРезультатПроверкиВСтроках(Форма, ДополнительныеПараметры) - Если Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется Тогда + Если Форма.РеквизитыПроверкиКонтрагентов.ИнициализацияВыполненаПолностью Тогда // Определение объекта и ссылки. ОбъектИСсылкаПоФорме = ПроверкаКонтрагентовКлиентСервер.ОбъектИСсылкаПоФорме(Форма); @@ -3443,7 +4319,9 @@ ТабличнаяЧасть = ДокументОбъект[ОписаниеТабличнойЧасти.ИмяТабличнойЧасти]; СтрокиТабличнойЧасти = ТабличнаяЧасть; - Если ДополнительныеПараметры.Свойство("ИзменившийсяСчетФактура") Тогда // Произошла запись счета-фактуры. + Если ДополнительныеПараметры = Неопределено Тогда + СтрокиТабличнойЧасти = ТабличнаяЧасть; + ИначеЕсли ДополнительныеПараметры.Свойство("ИзменившийсяСчетФактура") Тогда // Произошла запись счета-фактуры. // Очищаем все строки СтрокиТабличнойЧасти = ТабличнаяЧасть; ИначеЕсли ДополнительныеПараметры.Свойство("ИзменившаясяДата") @@ -3489,6 +4367,13 @@ Дата = Дата(1,1,1); РаботаСКонтрагентамиПереопределяемый.ОпределитьДатуВДокументе(ДокументОбъект, Дата); + // Если в документе указана будущая дата, то проверяем + // контрагентов на текущую дату. + ТекущаяДата = НачалоДня(ТекущаяДатаСеанса()); + Если Дата > ТекущаяДата Тогда + Дата = ТекущаяДата; + КонецЕсли; + Возврат НачалоДня(Дата); КонецФункции @@ -3506,7 +4391,7 @@ ЕстьОшибкаВТабличнойЧасти = Ложь; Если ЭтоДокументСКонтрагентомВШапке Тогда - ЕстьОшибкаВШапке = ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоСостояниеНедействующегоКонтрагента(Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагента, Истина); + ЕстьОшибкаВШапке = ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоНекорректноеСостояниеКонтрагента(Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагента); Если ЕстьОшибкаВШапке Тогда Возврат Истина; КонецЕсли; @@ -3523,7 +4408,7 @@ ТабличнаяЧасть = ДокументОбъект[ОписаниеТабличнойЧасти.ИмяТабличнойЧасти]; Для каждого СтрокаТабличнойЧасти Из ТабличнаяЧасть Цикл - ЕстьОшибкаВТабличнойЧасти = ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоСостояниеНедействующегоКонтрагента(СтрокаТабличнойЧасти.Состояние, Истина); + ЕстьОшибкаВТабличнойЧасти = ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоНекорректноеСостояниеКонтрагента(СтрокаТабличнойЧасти.Состояние); Если ЕстьОшибкаВТабличнойЧасти Тогда Возврат Истина; КонецЕсли; @@ -3538,7 +4423,7 @@ Процедура ОчиститьРеквизитФормы(Форма, ИмяРеквизита, НовоеЗначение) - Если ЕстьРеквизитФормы(Форма, "РеквизитыПроверкиКонтрагентов") + Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Форма, "РеквизитыПроверкиКонтрагентов") И Форма.РеквизитыПроверкиКонтрагентов.Свойство(ИмяРеквизита) Тогда Форма.РеквизитыПроверкиКонтрагентов[ИмяРеквизита] = НовоеЗначение; @@ -3572,7 +4457,7 @@ КонецПроцедуры -Процедура УправлениеФормойПриСозданииНаСервере(Форма) +Процедура УправлениеФормойДокументаПриИнициализации(Форма) ЭтоДокументСКонтрагентомВТабличнойЧасти = ПроверкаКонтрагентовКлиентСервер.ЭтоДокументСКонтрагентомВТабличнойЧасти(Форма); @@ -3609,11 +4494,11 @@ ЗапомнитьНаличиеНекорректныхКонтрагентов(Форма); // Обновляем кэш - ЗапомнитьСостояниеКонтрагентовНеСовпадающихСКэшем(Форма, ДанныеКонтрагентов); + ОбновитьВРегистреСостоянияКонтрагентовНеСовпадающихСКэшем(Форма, ДанныеКонтрагентов); КонецПроцедуры -Процедура ЗапомнитьСостояниеКонтрагентовНеСовпадающихСКэшем(Форма, ДанныеКонтрагентов) +Процедура ОбновитьВРегистреСостоянияКонтрагентовНеСовпадающихСКэшем(Форма, ДанныеКонтрагентов) // Получаем результат проверки контрагента из кэша ДанныеКонтрагентовИзКэша = Неопределено; @@ -3635,6 +4520,7 @@ Если ЗначениеЗаполнено(ДанныеКонтрагента.Дата) И НачалоДня(ДанныеКонтрагента.Дата) = СегодняшнийДень Тогда + УстановитьПривилегированныйРежим(Истина); СохранитьРезультатыПроверкиКонтрагентаВРегистр(ДанныеКонтрагента); КонецЕсли; @@ -3707,35 +4593,11 @@ КонецЕсли; - Если ЭтоДокументСКонтрагентомВТабличнойЧасти Тогда - - // Скрываем колонку с картинкой в табличной части, если проверка не используется. - Если НЕ Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется Тогда - - ОписаниеТабличныхЧастей = ОписаниеТабличныхЧастей(Форма); - Для каждого ОписаниеТабличнойЧасти Из ОписаниеТабличныхЧастей Цикл - - Элементы = Форма.Элементы; - ТаблицаФормы = Элементы[ОписаниеТабличнойЧасти.ИмяТаблицыФормы]; - - ПолеКартинки = Элементы.Найти(ПроверкаКонтрагентовКлиентСервер.ИмяПоляКартинки(ТаблицаФормы)); - Если ПолеКартинки <> Неопределено Тогда - - ПолеКартинки.Видимость = Ложь; - - КонецЕсли; - - КонецЦикла; - - КонецЕсли; - - КонецЕсли; - КонецПроцедуры Процедура СохранитьРезультатПроверкиКонтрагентов(Форма, ТекущийОбъект) - Если Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется Тогда + Если Форма.РеквизитыПроверкиКонтрагентов.ИнициализацияВыполненаПолностью Тогда СохраняемоеЗначение = РезультатПроверкиКонтрагентовВДокументе(Форма, ТекущийОбъект); @@ -3746,7 +4608,9 @@ КонецПроцедуры -Функция РезультатПроверкиКонтрагентовВДокументеСовпадаетСДаннымиФНС(РеквизитыПроверкиКонтрагентов) Экспорт +Функция РезультатПроверкиКонтрагентовВДокументеСовпадаетСДаннымиФНС(РеквизитыПроверкиКонтрагентов, ЕстьДоступКВебСервисуФНС) Экспорт + + ЕстьДоступКВебСервисуФНС = Истина; // Соединяем результаты проверки с исходной таблицей. Запрос = Новый Запрос; @@ -3762,13 +4626,8 @@ // Если фоновое задание завершилось, но результат пустой, то прорисовываем результат из кэша. Возврат Истина; Иначе - Если РезультатРаботыФоновогоЗадания.Свойство("НетДоступаКВебСервисуФНС") Тогда - // Если нет доступа к сервису ФНС, то прорисовываем результат из кэша. - Возврат Истина; - Иначе - // Фоновое задание отработало - ДанныеКонтрагентов = РезультатРаботыФоновогоЗадания.ДанныеКонтрагентов; - КонецЕсли; + ЕстьДоступКВебСервисуФНС = РезультатРаботыФоновогоЗадания.ЕстьДоступКВебСервисуФНС; + ДанныеКонтрагентов = РезультатРаботыФоновогоЗадания.ДанныеКонтрагентов; КонецЕсли; Иначе // Если фоновое задание завершилось, но результат пустой, то прорисовываем результат из кэша. @@ -3825,16 +4684,44 @@ КонецФункции -Процедура ПредотвратитьСбросРедактируемогоЗначения(Форма) +Процедура ПоказатьПредварительныйРезультатИзКэшаПриОткрытииДокумента(Форма) - // Обход особенности платформы, когда затирается редактируемое значение - // в текущем элементе при изменении формы. - Если НЕ ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда - Если ТипЗнч(Форма.ТекущийЭлемент) = Тип("ПолеФормы") И Форма.ТекущийЭлемент.Вид = ВидПоляФормы.ПолеВвода Тогда - Форма.ТекущийЭлемент.ОбновлениеТекстаРедактирования = ОбновлениеТекстаРедактирования.ПриИзмененииЗначения; - КонецЕсли; - КонецЕсли; + ДанныеКонтрагентов = ДанныеКонтрагентовВДокументе(Форма); + ДанныеКонтрагентовПриОткрытии = ДанныеКонтрагентов.Скопировать(); + АдресДанныхКонтрагентовПриОткрытии = ПоместитьВоВременноеХранилище( + ДанныеКонтрагентовПриОткрытии, + Форма.УникальныйИдентификатор); + + // Запоминаем данные контрагента для первой проверки сразу после открытия. + Форма.РеквизитыПроверкиКонтрагентов.Вставить( + "АдресДанныхКонтрагентовПриОткрытии", + АдресДанныхКонтрагентовПриОткрытии); + + ДополнительныеПараметры = Новый Структура(); + ДополнительныеПараметры.Вставить("ЭтоПроверкаДокумента", Истина); + + ВыполнитьПроверкуКонтрагентов(ДанныеКонтрагентов, "ИзКэша", ДополнительныеПараметры); + + // Формируем результат в формате, необходимом для отображения в документе. + Результат = Новый Структура; + Результат.Вставить("ДанныеКонтрагентов", ДанныеКонтрагентов); + // Результат сохраняем сразу в регистр для того, чтобы + // после получения результата проверки не записывать в регистр и не делать серверного вызова, + // который может привести к сбросу редактируемого значения. + Результат.Вставить("СохранятьРезультатСразуПослеПроверки", Истина); + Результат.Вставить("ЕстьДоступКВебСервисуФНС", Истина); + + АдресХранилища = ПоместитьВоВременноеХранилище(Результат, Новый УникальныйИдентификатор); + Форма.РеквизитыПроверкиКонтрагентов.АдресХранилища = АдресХранилища; + + ОтобразитьРезультатПроверкиКонтрагентаВДокументе(Форма); + + АдресДанныхКонтрагентовИзКэша = ПоместитьВоВременноеХранилище(ДанныеКонтрагентов, Новый УникальныйИдентификатор); + Форма.РеквизитыПроверкиКонтрагентов.АдресДанныхКонтрагентовИзКэша = АдресДанныхКонтрагентовИзКэша; + + Форма.РеквизитыПроверкиКонтрагентов.АдресХранилища = Неопределено; + КонецПроцедуры #Область УправлениеФормами @@ -3849,9 +4736,9 @@ Возврат; КонецЕсли; - СостоянияНедействующегоКонтрагента = ПроверкаКонтрагентовКлиентСерверПовтИсп.СостоянияНедействующегоКонтрагента(Истина); - СписокСостоянийНедействующегоКонтрагента = Новый СписокЗначений; - СписокСостоянийНедействующегоКонтрагента.ЗагрузитьЗначения(СостоянияНедействующегоКонтрагента); + Состояния = ПроверкаКонтрагентовКлиентСерверПовтИсп.НекорректныеСостоянияКонтрагента(); + НекорректныеСостоянияКонтрагента = Новый СписокЗначений; + НекорректныеСостоянияКонтрагента.ЗагрузитьЗначения(Состояния); ОписаниеТабличныхЧастей = ОписаниеТабличныхЧастей(Форма); Для каждого ОписаниеТабличнойЧасти Из ОписаниеТабличныхЧастей Цикл @@ -3875,7 +4762,7 @@ ПутьКСостоянию = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПутьКСостоянию, ИмяТабличнойЧасти); Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ПутьКСостоянию); - Отбор.ПравоеЗначение = СписокСостоянийНедействующегоКонтрагента; + Отбор.ПравоеЗначение = НекорректныеСостоянияКонтрагента; ЦветФона = Оформление.Оформление.Элементы.Найти("ЦветТекста"); Цвета = ПроверкаКонтрагентовВызовСервераПовтИсп.ЦветаРезультатовПроверки(); @@ -3916,7 +4803,7 @@ КонецЕсли; // Колонка с результатом проверки. - ЕстьСостояние = ЕстьРеквизитФормы(ТабличнаяЧасть, "Состояние"); + ЕстьСостояние = РеквизитТабличнойЧастиУжеЕсть(Форма, ОписаниеТабличнойЧасти, "Состояние"); Если НЕ ЕстьСостояние Тогда ДобавитьРеквизитСостояние(Форма, ОписаниеТабличнойЧасти, ТаблицаФормы.ПутьКДанным); КонецЕсли; @@ -4114,10 +5001,18 @@ ОбъектИСсылкаПоФорме = ПроверкаКонтрагентовКлиентСервер.ОбъектИСсылкаПоФорме(Форма); ДокументОбъект = ОбъектИСсылкаПоФорме.Объект; - ТабличнаяЧасть = ДокументОбъект[ОписаниеТабличнойЧасти.ИмяТабличнойЧасти]; - ВыгрузкаТабличнойЧасти = ТабличнаяЧасть.Выгрузить();// Преобразуем в таблицу значений. - РеквизитУжеЕсть = ВыгрузкаТабличнойЧасти.Колонки.Найти(ИмяРеквизита) <> Неопределено; - ВыгрузкаТабличнойЧасти = Неопределено; + ТабличнаяЧасть = ДокументОбъект[ОписаниеТабличнойЧасти.ИмяТабличнойЧасти]; + + Если ТабличнаяЧасть.Количество() >= 1 Тогда + // Для заполненной табличной части определяем по первой строке. + ПерваяСтрока = ТабличнаяЧасть[0]; + РеквизитУжеЕсть = ПерваяСтрока.Свойство(ИмяРеквизита); + Иначе + // Для пустой табличной части определяем путем выгрузки. + ВыгрузкаТабличнойЧасти = ТабличнаяЧасть.Выгрузить();// Преобразуем в таблицу значений. + РеквизитУжеЕсть = ВыгрузкаТабличнойЧасти.Колонки.Найти(ИмяРеквизита) <> Неопределено; + ВыгрузкаТабличнойЧасти = Неопределено; + КонецЕсли; Возврат РеквизитУжеЕсть; @@ -4137,8 +5032,15 @@ // В табличной части нет колонки с датой, то берем дату из шапки документа. Дата = ДатаВДокументе; КонецЕсли; + + // Если в документе указана будущая дата, то проверяем + // контрагентов на текущую дату. + ТекущаяДата = НачалоДня(ТекущаяДатаСеанса()); + Если Дата > ТекущаяДата Тогда + Дата = ТекущаяДата; + КонецЕсли; - Возврат Дата; + Возврат Дата; КонецФункции @@ -4168,20 +5070,6 @@ КонецПроцедуры -Функция ЕстьРеквизитФормы(Источник, ИмяРеквизита) Экспорт - - ИскомыеРеквизиты = Новый Структура(ИмяРеквизита, NULL); - ЗаполнитьЗначенияСвойств(ИскомыеРеквизиты, Источник); - - РеквизитСуществует = Ложь; - Если ИскомыеРеквизиты[ИмяРеквизита] <> NULL Тогда - РеквизитСуществует = Истина; - КонецЕсли; - - Возврат РеквизитСуществует; - -КонецФункции - #КонецОбласти #Область СчетаФактуры @@ -4211,13 +5099,6 @@ КонецЕсли; - // Если контрагент в ТЧ - Если ПроверкаКонтрагентовКлиентСервер.ЭтоДокументСКонтрагентомВТабличнойЧасти(Форма) Тогда - - ЗапомнитьРезультатПроверкиКонтрагентовВТабличнойЧасти(Форма, ДанныеКонтрагентов); - - КонецЕсли; - КонецПроцедуры Процедура ЗаполнитьДанныеКонтрагентовВСчетеФактуре(ДокументОбъект, ДанныеКонтрагентов, Форма = Неопределено) @@ -4233,14 +5114,21 @@ Возврат; КонецЕсли; - ДокументСсылка = ДокументОбъект.Ссылка; - Дата = ДатаВСчетеФактуре(ДокументОбъект); + ДокументСсылка = ДокументОбъект.Ссылка; + Дата = ДатаВСчетеФактуре(ДокументОбъект); + + ЭтоСсылка = Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(ДокументОбъект)); Описание = ОписаниеКонтрагентовВСчетеФактуре(ТипЗнч(ДокументСсылка)); Для каждого СтрокаОписания Из Описание Цикл ИмяРеквизитаКонтрагента = СтрокаОписания.ИмяРеквизита; - Контрагент = ДокументОбъект[ИмяРеквизитаКонтрагента]; + + Если ЭтоСсылка Тогда + Контрагент = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДокументОбъект, ИмяРеквизитаКонтрагента); + Иначе + Контрагент = ДокументОбъект[ИмяРеквизитаКонтрагента]; + КонецЕсли; Если ЗначениеЗаполнено(Контрагент) Тогда @@ -4271,7 +5159,7 @@ КонецФункции -// Функция - Определяет, заполнен ли хотя бы один контрагент в счете-фактуре. +// Определяет, заполнен ли хотя бы один контрагент в счете-фактуре. // // Параметры: // СчетФактураСсылка - ДокументСсылка - счет-фактура, для которой необходимо определить заполненность @@ -4310,7 +5198,8 @@ #Область ПроверкаКонтрагентовВСправочнике -// Подписка на событие. Добавление в регистр набора ИНН и КПП для последующей проверки регламентным заданием. +// Подписка на событие. Добавление в регистр набора ИНН и КПП для последующей проверки регламентным заданием +// и отображения результата проверки в списке контрагентов. // // Параметры: // КонтрагентОбъект - СправочникОбъект.<Контрагенты> - записываемый контрагент. @@ -4321,7 +5210,9 @@ Возврат; КонецЕсли; - Если НЕ ПроверкаКонтрагентовВызовСервера.ИспользованиеПроверкиВозможно() + ИспользованиеПроверкиВозможно = ПроверкаКонтрагентовВызовСервера.ИспользованиеПроверкиВозможно(); + + Если НЕ ИспользованиеПроверкиВозможно ИЛИ СправочникКонтрагентовИерархический() И КонтрагентОбъект.ЭтоГруппа Тогда Возврат; КонецЕсли; @@ -4333,6 +5224,9 @@ СостояниеКонтрагента = Перечисления.СостоянияСуществованияКонтрагента.ПустаяСсылка(); КонтрагентОбъект.ДополнительныеСвойства.Свойство("ПроверкаКонтрагентовСостояниеКонтрагента", СостояниеКонтрагента); + // Если в режиме проверки по кнопке не записывать в регистр пустое состояние, + // то получится, что у контрагента сохранится старое состояние. + // Лучше пусть оно будет пустым, чем старым. Так пользователь не будет введен в заблуждение. Если НЕ ЗначениеЗаполнено(СостояниеКонтрагента) Тогда Возврат; КонецЕсли; @@ -4366,66 +5260,139 @@ Возврат; КонецЕсли; + ВыделитьКраснымИННиКППНекорректныхКонтрагентов(Список); + ВыделитьКраснымНекорректныеИНН(Список); + ВыделитьКраснымНекорректныеКПП(Список); + ВыделитьСерымНедействующихКонтрагентов(Список); + +КонецПроцедуры + +Процедура ВыделитьСерымНедействующихКонтрагентов(Список) + + НовоеУсловноеОформление = Список.УсловноеОформление.Элементы.Добавить(); + + // Условие отбора + ДобавитьНовыйОтбор( + НовоеУсловноеОформление, + ВидСравненияКомпоновкиДанных.Равно, + "ПроверкаКонтрагентовСостояние", + Перечисления.СостоянияСуществованияКонтрагента.НеДействуетИлиИзмененКПП); + + // Цвет ЦветаРезультатовПроверки = ПроверкаКонтрагентовВызовСервераПовтИсп.ЦветаРезультатовПроверки(); + ДобавитьНовоеОформление(НовоеУсловноеОформление, ЦветаРезультатовПроверки.ЦветТекстаКонтрагентаПрекратившегоДеятельность); - // Условное оформление - НовоеУсловноеОформление = Список.УсловноеОформление.Элементы.Добавить(); - - // ПроверкаКонтрагентовКонтрагентНеСуществует Равно "Истина" - Отбор = НовоеУсловноеОформление.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - Отбор.Использование = Истина; - Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПроверкаКонтрагентовКонтрагентНеСуществует"); - Отбор.ПравоеЗначение = Истина; - - // ПроверкаКонтрагентовСостояние Не равно "Перечисление.СостоянияСуществованияКонтрагента.НеДействуетИлиИзмененКПП". - Отбор = НовоеУсловноеОформление.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно; - Отбор.Использование = Истина; - Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПроверкаКонтрагентовСостояние"); - Отбор.ПравоеЗначение = Перечисления.СостоянияСуществованияКонтрагента.НеДействуетИлиИзмененКПП; - - // Красные ИНН и КПП - Оформление = НовоеУсловноеОформление.Оформление.Элементы.Найти("ЦветТекста"); - Оформление.Значение = ЦветаРезультатовПроверки.ЦветТекстаНекорректногоКонтрагента; - Оформление.Использование = Истина; - - СвойстваСправочникаКонтрагенты = ПроверкаКонтрагентовКлиентСервер.СвойстваСправочникаКонтрагенты(); - // ИНН - ОформляемоеПоле = НовоеУсловноеОформление.Поля.Элементы.Добавить(); - ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(СвойстваСправочникаКонтрагенты.ИНН); - ОформляемоеПоле.Использование = Истина; - - // КПП - ОформляемоеПоле = НовоеУсловноеОформление.Поля.Элементы.Добавить(); - ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(СвойстваСправочникаКонтрагенты.КПП); - ОформляемоеПоле.Использование = Истина; +КонецПроцедуры + +Процедура ВыделитьКраснымИННиКППНекорректныхКонтрагентов(Список) НовоеУсловноеОформление = Список.УсловноеОформление.Элементы.Добавить(); - // ПроверкаКонтрагентовКонтрагентНеСуществует Равно "Истина" - Отбор = НовоеУсловноеОформление.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - Отбор.Использование = Истина; - Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПроверкаКонтрагентовКонтрагентНеСуществует"); - Отбор.ПравоеЗначение = Истина; + // Выделяемые состояния + МассивСостояний = Новый Массив; + МассивСостояний.Добавить(Перечисления.СостоянияСуществованияКонтрагента.КППНеСоответствуетДаннымБазыФНС); + МассивСостояний.Добавить(Перечисления.СостоянияСуществованияКонтрагента.КонтрагентОтсутствуетВБазеФНС); - // ПроверкаКонтрагентовСостояние Равно "Перечисление.СостоянияСуществованияКонтрагента.НеДействуетИлиИзмененКПП" + // Условие отбора + ДобавитьНовыйОтбор( + НовоеУсловноеОформление, + ВидСравненияКомпоновкиДанных.ВСписке, + "ПроверкаКонтрагентовСостояние", + МассивСостояний); + + // Оформляемые поля + ДобавитьНовоеОформляемоеПоле(НовоеУсловноеОформление, "ИНН"); + ДобавитьНовоеОформляемоеПоле(НовоеУсловноеОформление, "КПП"); + + // Цвет + ЦветаРезультатовПроверки = ПроверкаКонтрагентовВызовСервераПовтИсп.ЦветаРезультатовПроверки(); + ДобавитьНовоеОформление(НовоеУсловноеОформление, ЦветаРезультатовПроверки.ЦветТекстаНекорректногоКонтрагента); + +КонецПроцедуры + +Процедура ВыделитьКраснымНекорректныеИНН(Список) + + НовоеУсловноеОформление = Список.УсловноеОформление.Элементы.Добавить(); + + // Выделяемые состояния + МассивСостояний = Новый Массив; + МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.НеверныйИНН")); + МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.НевернаяДлинаИНН")); + МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.НедопустимыеСимволыВИНН")); + + // Условие отбора + ДобавитьНовыйОтбор( + НовоеУсловноеОформление, + ВидСравненияКомпоновкиДанных.ВСписке, + "ПроверкаКонтрагентовСостояние", + МассивСостояний); + + // Оформляемые поля + ДобавитьНовоеОформляемоеПоле(НовоеУсловноеОформление, "ИНН"); + + // Цвет + ЦветаРезультатовПроверки = ПроверкаКонтрагентовВызовСервераПовтИсп.ЦветаРезультатовПроверки(); + ДобавитьНовоеОформление(НовоеУсловноеОформление, ЦветаРезультатовПроверки.ЦветТекстаНекорректногоКонтрагента); + +КонецПроцедуры + +Процедура ВыделитьКраснымНекорректныеКПП(Список) + + НовоеУсловноеОформление = Список.УсловноеОформление.Элементы.Добавить(); + + // Выделяемые состояния + МассивСостояний = Новый Массив; + МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.НевернаяДлинаКПП")); + МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.НедопустимыеСимволыВКПП")); + МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ИПНеМожетИметьКПП")); + + // Условие отбора + ДобавитьНовыйОтбор( + НовоеУсловноеОформление, + ВидСравненияКомпоновкиДанных.ВСписке, + "ПроверкаКонтрагентовСостояние", + МассивСостояний); + + // Оформляемые поля + ДобавитьНовоеОформляемоеПоле(НовоеУсловноеОформление, "КПП"); + + // Цвет + ЦветаРезультатовПроверки = ПроверкаКонтрагентовВызовСервераПовтИсп.ЦветаРезультатовПроверки(); + ДобавитьНовоеОформление(НовоеУсловноеОформление, ЦветаРезультатовПроверки.ЦветТекстаНекорректногоКонтрагента); + +КонецПроцедуры + +Процедура ДобавитьНовыйОтбор(НовоеУсловноеОформление, ВидСравнения, ПутьКДаннымПоля, ПравоеЗначение) + Отбор = НовоеУсловноеОформление.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + Отбор.ВидСравнения = ВидСравнения; Отбор.Использование = Истина; - Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПроверкаКонтрагентовСостояние"); - Отбор.ПравоеЗначение = Перечисления.СостоянияСуществованияКонтрагента.НеДействуетИлиИзмененКПП; + Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ПутьКДаннымПоля); + Отбор.ПравоеЗначение = ПравоеЗначение; + +КонецПроцедуры + +Процедура ДобавитьНовоеОформляемоеПоле(НовоеУсловноеОформление, Свойство) + + СвойстваСправочникаКонтрагенты = ПроверкаКонтрагентовКлиентСервер.СвойстваСправочникаКонтрагенты(); + ОформляемоеПоле = НовоеУсловноеОформление.Поля.Элементы.Добавить(); + ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(СвойстваСправочникаКонтрагенты[Свойство]); + ОформляемоеПоле.Использование = Истина; + +КонецПроцедуры + +Процедура ДобавитьНовоеОформление(НовоеУсловноеОформление, Цвет) - // Серым вся строка Оформление = НовоеУсловноеОформление.Оформление.Элементы.Найти("ЦветТекста"); - Оформление.Значение = ЦветаРезультатовПроверки.ЦветТекстаКонтрагентаПрекратившегоДеятельность; + Оформление.Значение = Цвет; Оформление.Использование = Истина; КонецПроцедуры -// Проверка нескольких контрагентов. -Процедура СохранитьРезультатыПроверкиСправочника(ДанныеКонтрагентов, АдресХранилища = Неопределено, СохранятьРезультатСразуПослеПроверки = Ложь) +Процедура СохранитьРезультатыПроверкиСправочника( + ДанныеКонтрагентов, + АдресХранилища = Неопределено, + СохранятьРезультатСразуПослеПроверки = Ложь) Если ДанныеКонтрагентов.Количество() = 1 Тогда @@ -4452,6 +5419,52 @@ КонецПроцедуры +Процедура ЗапомнитьРезультатыПроверкиСправочника(ДанныеКонтрагентов, ДополнительныеПараметры = Неопределено) Экспорт + + // Сохраняем результаты проверки (только для справочника). + Если ДополнительныеПараметры <> Неопределено + И ТипЗнч(ДополнительныеПараметры) = Тип("Структура") + И ДополнительныеПараметры.Свойство("ЭтоПроверкаСправочника") + И ДополнительныеПараметры.ЭтоПроверкаСправочника Тогда + + АдресХранилища = + ?(ДополнительныеПараметры.Свойство("АдресХранилища"), + ДополнительныеПараметры.АдресХранилища, + Неопределено); + + СохранятьРезультатСразуПослеПроверки = + ?(ДополнительныеПараметры.Свойство("СохранятьРезультатСразуПослеПроверки"), + ДополнительныеПараметры.СохранятьРезультатСразуПослеПроверки, + Ложь); + + УстановитьПривилегированныйРежим(Истина); + СохранитьРезультатыПроверкиСправочника(ДанныеКонтрагентов, АдресХранилища, СохранятьРезультатСразуПослеПроверки); + + КонецЕсли; + +КонецПроцедуры + +Процедура ЗапуститьПроверкуПриСозданииНаСервереКонтрагента(Форма, Параметры, КонтрагентСсылка) + + Если ЗначениеЗаполнено(КонтрагентСсылка) ИЛИ ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда + + ДополнительныеПараметры = Новый Структура(); + ДополнительныеПараметры.Вставить("ЭтоПроверкаСправочника", Истина); + ДополнительныеПараметры.Вставить("СохранятьРезультатСразуПослеПроверки", Истина); + + // По необходимости выполняем предварительную проверку данных. + // Если предварительная проверка показала ошибки, что дальше не проверяем, + // иначе запускаем проверку веб-сервисом ФНС. + Если ПроверкаКонтрагентовКлиентСервер.ПрерватьПроверкуКонтрагентовИзЗаОшибокПредварительнойПроверки(Форма, ДополнительныеПараметры) Тогда + ПроверкаКонтрагентовКлиентСервер.ОтобразитьРезультатПроверкиКонтрагентаВСправочнике(Форма); + Иначе + ПроверкаКонтрагентовКлиентСервер.ПроверитьКонтрагентаИзКарточки(Форма, Истина); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область ПроверкаКонтрагентовВОтчетах @@ -4483,10 +5496,46 @@ КонецФункции -Процедура ВыделитьКонтрагентовСОшибкамиВОтчете(НедействующиеКонтрагенты, ТабличныйДокумент) Экспорт +Процедура ВыделитьКонтрагентовСОшибкамиВРазделеОтчета(ПроверяемыеКонтрагенты, СтруктураПараметров) + ДанныеДляПроверкиКонтрагентов = СтруктураПараметров.ДанныеДляПроверкиКонтрагентов; + + // Выделяем в разделах отчета строки с некорректными контрагентами. + Для Каждого РазделОтчета Из ДанныеДляПроверкиКонтрагентов.ПолныеРазделыОтчета Цикл + + СтандартнаяОбработка = Истина; + + РаботаСКонтрагентамиПереопределяемый.ОпределитьНужноЛиПроверятьКонтрагентовВРазделеОтчета( + СтруктураПараметров, + РазделОтчета.НомерРаздела, + РазделОтчета.ДополнительныеПараметры, + СтандартнаяОбработка); + + Если НЕ СтандартнаяОбработка Тогда + Продолжить; + КонецЕсли; + + ТабличныйДокумент = РазделОтчета.ХранилищеОтчета.Получить(); + ВыделитьКонтрагентовСОшибкамиВОтчете(ПроверяемыеКонтрагенты, ТабличныйДокумент, РазделОтчета.НомерРаздела); + РазделОтчета.ХранилищеОтчета = Новый ХранилищеЗначения(ТабличныйДокумент, Новый СжатиеДанных(9)); + + КонецЦикла; + +КонецПроцедуры + +Процедура ВыделитьКонтрагентовСОшибкамиВОтчете(НедействующиеКонтрагенты, ТабличныйДокумент, НомерРаздела = Неопределено) + + // Если указан номер раздела, то отбираем только контрагентов, которые в нем встречаются. + Если НомерРаздела <> Неопределено Тогда + Отбор = Новый Структура(); + Отбор.Вставить("НомерРаздела", НомерРаздела); + КонтрагентыРаздела = НедействующиеКонтрагенты.НайтиСтроки(Отбор); + Иначе + КонтрагентыРаздела = НедействующиеКонтрагенты; + КонецЕсли; + // Подкрашиваем контрагентов с ошибками. - Для каждого СтрокаСНедействующимКонтрагентом Из НедействующиеКонтрагенты Цикл + Для каждого СтрокаСНедействующимКонтрагентом Из КонтрагентыРаздела Цикл РаботаСКонтрагентамиПереопределяемый.ВыделитьКонтрагентаСОшибкойВСтрокеОтчета(ТабличныйДокумент, СтрокаСНедействующимКонтрагентом.СтрокаТабличногоДокумента); @@ -4495,6 +5544,27 @@ КонецПроцедуры -#КонецОбласти +Функция ОставитьНедействующихКонтрагентовВОтчете(СтруктураПараметров) + + ДанныеДляПроверкиКонтрагентов = СтруктураПараметров.ДанныеДляПроверкиКонтрагентов; + + Если ДанныеДляПроверкиКонтрагентов.ОтчетСРазделами Тогда + + // Формируем отчет, в котором оставляем только некорректных контрагентов. + РаботаСКонтрагентамиПереопределяемый.СформироватьОтчет(СтруктураПараметров); + + Иначе + + // Формируем отчет, в котором оставляем только некорректных контрагентов. + ОтчетПоНекорректнымКонтрагентам = Новый ТабличныйДокумент; + РаботаСКонтрагентамиПереопределяемый.СформироватьОтчет(СтруктураПараметров, ОтчетПоНекорректнымКонтрагентам); + + Возврат ОтчетПоНекорректнымКонтрагентам; + + КонецЕсли; + +КонецФункции #КонецОбласти + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ПроверкаКонтрагентовВызовСервера/Module.bsl b/SSL/src/CommonModules/ПроверкаКонтрагентовВызовСервера/Module.bsl index b00ccb868..299b6bcb4 100644 --- a/SSL/src/CommonModules/ПроверкаКонтрагентовВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ПроверкаКонтрагентовВызовСервера/Module.bsl @@ -5,7 +5,7 @@ #Область ПрограммныйИнтерфейс -// Процедура - Запуск фонового задания по проверке контрагента в карточке контрагента. +// Запуск фонового задания по проверке контрагента в карточке контрагента. // Запускается при редактировании реквизитов внутри карточки контрагента. // // Параметры: @@ -39,14 +39,14 @@ КонецПроцедуры -// Функция - Определяет, завершилось ли фоновое задание. +// Определяет, завершилось ли фоновое задание. // // Параметры: // ИдентификаторЗадания - УникальныйИдентификатор - Идентификатор фонового задания по проверке контрагента. // Возвращаемое значение: // Булево - Истина, если фоновое задание завершилось. // -Функция ЗаданиеВыполнено(ИдентификаторЗадания) Экспорт +Функция ЗаданиеВыполнено(Знач ИдентификаторЗадания) Экспорт Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); @@ -54,7 +54,7 @@ #Область ОпределениеСостоянияКонтрагента -// Функция - На основе результата предыдущей проверки (записи в регистр) определяет, +// На основе результата предыдущей проверки (записи в регистр) определяет, // существует ли контрагент. // // Параметры: @@ -68,25 +68,17 @@ КонтрагентСуществует = Истина; - // Определяем, включен ли сервис. - ИспользованиеПроверкиВозможно = ИспользованиеПроверкиВозможно(); - Если ИспользованиеПроверкиВозможно Тогда - - // Получаем состояние контрагента из регистра сведений. - Состояние = ТекущееСохраненноеСостояниеКонтрагента(КонтрагентСсылка, ИНН, КПП); - - // По состоянию определяем, существует ли контрагент или нет. - КонтрагентСуществует = ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоСостояниеДействующегоКонтрагента(Состояние); - - Иначе - КонтрагентСуществует = Истина; - КонецЕсли; + // Получаем состояние контрагента из регистра сведений. + Состояние = ТекущееСохраненноеСостояниеКонтрагента(КонтрагентСсылка, ИНН, КПП); + + // По состоянию определяем, существует ли контрагент или нет. + КонтрагентСуществует = ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоСостояниеДействующегоКонтрагента(Состояние); Возврат КонтрагентСуществует; КонецФункции -// Функция - Получает состояние контрагента из регистра сведений. +// Получает состояние контрагента из регистра сведений. // // Параметры: // КонтрагентСсылка - СправочникСсылка.<Контрагенты> - Проверяемый контрагент. @@ -126,43 +118,56 @@ КонецФункции -// Функция - Определяет, завершилось ли фоновое задание по проверке контрагента в карточке контрагента. +// Определяет, завершилось ли фоновое задание по проверке контрагента в карточке контрагента. // // Параметры: // ИдентификаторЗадания - УникальныйИдентификатор - Идентификатор фонового задания по проверке контрагента. // Возвращаемое значение: // Булево - Истина, если фоновое задание завершилось. // -Функция ПроверкаКонтрагентовЗавершилась(ИдентификаторЗадания) Экспорт +Функция ПроверкаКонтрагентовЗавершилась(Знач ИдентификаторЗадания) Экспорт - Если ЗначениеЗаполнено(ИдентификаторЗадания) Тогда - - ФоновоеЗаданиеСуществует = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания) <> Неопределено; - Если ФоновоеЗаданиеСуществует Тогда - Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); - Иначе - Возврат Истина; - КонецЕсли; - - Иначе + Если НЕ ЗначениеЗаполнено(ИдентификаторЗадания) Тогда Возврат Истина; КонецЕсли; + Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания); + + Если Задание <> Неопределено + И Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда + Возврат Ложь; + КонецЕсли; + + ОперацияНеВыполнена = Истина; + + Если Задание = Неопределено Тогда + Возврат Истина; + Иначе + Если Задание.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда + Возврат Истина; + ИначеЕсли Задание.Состояние = СостояниеФоновогоЗадания.Отменено Тогда + Возврат Истина; + Иначе + Возврат Истина; + КонецЕсли; + КонецЕсли; + КонецФункции #КонецОбласти #Область НастройкиПроверки -// Процедура - Запоминает, что больше не нужно показывать предложение использовать сервис. +// Запоминает, что больше не нужно показывать предложение использовать сервис. // Процедура ЗапомнитьЧтоБольшеНеНужноПоказыватьПредложениеИспользоватьСервис() Экспорт - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ПроверкаКонтрагентов", "ПроверкаКонтрагентов_БольшеНеПоказыватьПредложениеИспользоватьСервис", Истина); + УстановитьПривилегированныйРежим(Истина); + ПроверкаКонтрагентов.ВключитьВыключитьПроверкуКонтрагентов(Ложь); КонецПроцедуры -// Функция - Проверяет, что проверка включена и есть необходимые права. +// Проверяет, что проверка включена и есть необходимые права. // Возвращаемое значение: // Булево - Истина, если есть нужные права на проверку и проверка включена. // @@ -173,7 +178,7 @@ КонецФункции -// Процедура - Выполняет действия при включении и отключении проверки. +// Выполняет действия при включении и отключении проверки. // // Параметры: // ВключитьПроверку - Булево - Истина, если проверку необходимо включить. @@ -185,7 +190,7 @@ КонецПроцедуры -// Функция - Результат проверки параметров доступа к веб-сервису ФНС. +// Результат проверки параметров доступа к веб-сервису ФНС. // Возвращаемое значение: // Булево - Доступ к веб-сервису ФНС по проверке контрагентов есть. // @@ -226,16 +231,34 @@ Функция РезультатРаботыФоновогоЗаданияПроверкиКонтрагентовВДокументе(Знач РеквизитыПроверкиКонтрагентов) Экспорт ЗаданиеВыполнено = ПроверкаКонтрагентовЗавершилась(РеквизитыПроверкиКонтрагентов.ИдентификаторЗадания); - ДанныеКонтрагентовИзКэшаСовпадаютСДаннымиФНС = ЗаданиеВыполнено - И ПроверкаКонтрагентов.РезультатПроверкиКонтрагентовВДокументеСовпадаетСДаннымиФНС(РеквизитыПроверкиКонтрагентов); + + ЕстьДоступКВебСервисуФНС = Ложь; + ДанныеВКэшСовпадаютСФНС = + ЗаданиеВыполнено + И ПроверкаКонтрагентов.РезультатПроверкиКонтрагентовВДокументеСовпадаетСДаннымиФНС( + РеквизитыПроверкиКонтрагентов, + ЕстьДоступКВебСервисуФНС); Результат = Новый Структура(); - Результат.Вставить("ЗаданиеВыполнено", ЗаданиеВыполнено); - Результат.Вставить("ДанныеКонтрагентовИзКэшаСовпадаютСДаннымиФНС", ДанныеКонтрагентовИзКэшаСовпадаютСДаннымиФНС); + Результат.Вставить("ЗаданиеВыполнено", ЗаданиеВыполнено); + Результат.Вставить("ЕстьДоступКВебСервисуФНС", ЕстьДоступКВебСервисуФНС); + Результат.Вставить("ДанныеВКэшСовпадаютСФНС", ДанныеВКэшСовпадаютСФНС); Возврат Результат; КонецФункции +Процедура ЗапомнитьРезультатПроверкиСправочникаПослеПредварительнойПроверки(ДанныеКонтрагента, ДополнительныеПараметры) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + ДанныеКонтрагента.Вставить("ОбластьДанныхВспомогательныеДанные", ОбщегоНазначения.ЗначениеРазделителяСеанса()); + КонецЕсли; + + ДанныеКонтрагентов = Новый Массив; + ДанныеКонтрагентов.Добавить(ДанныеКонтрагента); + + ПроверкаКонтрагентов.ЗапомнитьРезультатыПроверкиСправочника(ДанныеКонтрагентов, ДополнительныеПараметры); + +КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/ПроверкаКонтрагентовВызовСервераПовтИсп/Module.bsl b/SSL/src/CommonModules/ПроверкаКонтрагентовВызовСервераПовтИсп/Module.bsl index 590af91b0..b601b12af 100644 --- a/SSL/src/CommonModules/ПроверкаКонтрагентовВызовСервераПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ПроверкаКонтрагентовВызовСервераПовтИсп/Module.bsl @@ -5,7 +5,7 @@ #Область ПрограммныйИнтерфейс -// Функция - Определение цветов выделения результатов проверки контрагентов. +// Определение цветов выделения результатов проверки контрагентов. // // Возвращаемое значение: // Структура - Имена ключей - это названия цветов, которые необходимо определить. diff --git a/SSL/src/CommonModules/ПроверкаКонтрагентовКлиент/Module.bsl b/SSL/src/CommonModules/ПроверкаКонтрагентовКлиент/Module.bsl index 58c04ae92..07f962dc8 100644 --- a/SSL/src/CommonModules/ПроверкаКонтрагентовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПроверкаКонтрагентовКлиент/Module.bsl @@ -7,7 +7,7 @@ #Область Проверка -// Процедура - Отображение формы с предложением включить проверку контрагентов. +// Отображение формы с предложением включить проверку контрагентов. // // Параметры: // Форма - УправляемаяФорма - Форма объекта, в котором выполняется проверка контрагентов. @@ -15,13 +15,18 @@ Если Форма.РеквизитыПроверкиКонтрагентов.НужноПоказатьПредложениеВключитьПроверкуКонтрагентов Тогда - ОткрытьФорму("ОбщаяФорма.ВключениеПроверкиКонтрагентов", , Форма); + СтандартнаяОбработка = Истина; + РаботаСКонтрагентамиКлиентПереопределяемый.ПредложитьВключитьПроверкуКонтрагентов(СтандартнаяОбработка); + + Если СтандартнаяОбработка Тогда + ОткрытьФорму("ОбщаяФорма.ВключениеПроверкиКонтрагентов", , Форма); + КонецЕсли; КонецЕсли; КонецПроцедуры -// Процедура - Проверка доступа к сервису. +// Проверка доступа к сервису. Процедура ПроверитьДоступКСервису() Экспорт ТекстПредупреждения = ПроверкаКонтрагентовВызовСервера.РезультатПроверкиПараметровДоступа(); @@ -29,7 +34,7 @@ КонецПроцедуры -// Процедура - Настройка параметров прокси сервера. +// Настройка параметров прокси сервера. Процедура НастроитьПараметрыПроксиСервера() Экспорт Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда @@ -39,7 +44,7 @@ КонецПроцедуры -// Функция - Вспомогательный API. Получает состояние контрагента из регистра сведений или из временного хранилища, если +// Вспомогательный API. Получает состояние контрагента из регистра сведений или из временного хранилища, если // передан адрес. // // Параметры: @@ -69,7 +74,7 @@ КонецФункции -// Процедура - Открыть настройки сервиса. +// Открыть настройки сервиса. Процедура ОткрытьНастройкиСервиса() Экспорт ОткрытьФорму("ОбщаяФорма.НастройкиПроверкиКонтрагентов"); @@ -80,24 +85,29 @@ #Область ПроверкаКонтрагентовВДокументах -// Процедура - Подключение обработчиков результата проверки контрагентов из формы документа. +// Подключение обработчиков результата проверки контрагентов из формы документа. // // Параметры: // Форма - УправляемаяФорма - Форма документа, в котором выполняется проверка контрагентов. Процедура ПриОткрытииДокумент(Форма) Экспорт Если Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется Тогда - ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(Форма.ПроверкаКонтрагентовПараметрыОбработчикаОжидания); + + // Не сразу запускаем проверку, а через обработчик, чтобы + // ускорить открытие формы документа. Форма.ПодключитьОбработчикОжидания("Подключаемый_ОбработатьРезультатПроверкиКонтрагентов", ИнтервалОбработкиРезультата(), Истина); + Иначе + Если Форма.РеквизитыПроверкиКонтрагентов.НужноПоказатьПредложениеВключитьПроверкуКонтрагентов Тогда Форма.ПодключитьОбработчикОжидания("Подключаемый_ПоказатьПредложениеИспользоватьПроверкуКонтрагентов", ИнтервалОбработкиРезультата(), Истина); КонецЕсли; + КонецЕсли; КонецПроцедуры -// Процедура - Отображение предупреждения о причине выделения контрагента в строке таблице как некорректного. +// Отображение предупреждения о причине выделения контрагента в строке таблице как некорректного. // // Параметры: // Форма - УправляемаяФорма - Форма документа, в котором выполняется проверка контрагентов. @@ -107,12 +117,12 @@ // контрагента. Процедура ТаблицаФормыВыбор(Форма, Элемент, Поле) Экспорт - Если Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется Тогда + Если Форма.РеквизитыПроверкиКонтрагентов.ИнициализацияВыполненаПолностью Тогда ТекущиеДанные = Элемент.ТекущиеДанные; Если ТекущиеДанные <> Неопределено Тогда Если Поле.Имя = ПроверкаКонтрагентовКлиентСервер.ИмяПоляКартинки(Элемент) Тогда - Если ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоСостояниеНедействующегоКонтрагента(ТекущиеДанные.Состояние, Истина) Тогда + Если ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоНекорректноеСостояниеКонтрагента(ТекущиеДанные.Состояние) Тогда Описание = Новый Структура; Описание.Вставить("ДокументПустой", Ложь); @@ -132,7 +142,7 @@ КонецПроцедуры -// Функция - Определяет, требует ли событие, вызванное оповещением, запуска проверки контрагентов. +// Определяет, требует ли событие, вызванное оповещением, запуска проверки контрагентов. // // Параметры: // Форма - УправляемаяФорма - Форма документа, в котором выполняется проверка контрагентов. @@ -152,64 +162,115 @@ КонецФункции -// Процедура - Запуск проверки контрагентов в документе после возникновения определенного события. +// Запуск проверки контрагентов в документе после возникновения определенного события. // // Параметры: // Форма - УправляемаяФорма - Форма документа, в котором выполняется проверка контрагентов. // ДополнительныеПараметры - Дата - Дата документа, в случае если произошло изменение даты. // - ТаблицаФормы - Если изменения произошли в табличной части. // - ПолеФормы - Если изменился контрагент в определенном поле произошли в табличной части. -Процедура ЗапуститьПроверкуКонтрагентовВДокументе(Форма, ДополнительныеПараметры) Экспорт +Процедура ЗапуститьПроверкуКонтрагентовВДокументе(Форма, ДополнительныеПараметры = Неопределено) Экспорт - Если Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется Тогда + Форма.РеквизитыПроверкиКонтрагентов.ЭтоПроверкаПоКнопке = + ТипЗнч(ДополнительныеПараметры) = Тип("Структура") + И ДополнительныеПараметры.Свойство("ЭтоПроверкаПоКнопке") + И ДополнительныеПараметры.ЭтоПроверкаПоКнопке; + + // Для предотвращения проверки при отключенной автоматической проверке, + // когда меняется контрагент в документе. + Если Форма.РеквизитыПроверкиКонтрагентов.ЭтоПроверкаПоКнопке + ИЛИ Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется Тогда ПараметрыФоновогоЗадания = ПроверкаКонтрагентовКлиентСервер.ПараметрыФоновогоЗадания(ДополнительныеПараметры); Форма.ПроверитьКонтрагентовФоновоеЗадание(ПараметрыФоновогоЗадания); - ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(Форма.ПроверкаКонтрагентовПараметрыОбработчикаОжидания); - - Форма.ПодключитьОбработчикОжидания("Подключаемый_ОбработатьРезультатПроверкиКонтрагентов", ИнтервалОбработкиРезультата(), Истина); + Если Форма.РеквизитыПроверкиКонтрагентов.ИнициализацияВыполненаПолностью Тогда + + Форма.РеквизитыПроверкиКонтрагентов.СохранятьРезультатСразуПослеПроверки = + ПараметрыФоновогоЗадания.Свойство("СохранятьРезультатСразуПослеПроверки") + И ПараметрыФоновогоЗадания.СохранятьРезультатСразуПослеПроверки; + + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(Форма.ПроверкаКонтрагентовПараметрыОбработчикаОжидания); + Форма.ПодключитьОбработчикОжидания("Подключаемый_ОбработатьРезультатПроверкиКонтрагентов", ИнтервалОбработкиРезультата(), Истина); + + КонецЕсли; КонецЕсли; КонецПроцедуры -// Процедура - Обработка результата работы фонового задания по проверке контрагентов. +// Обработка результата работы фонового задания по проверке контрагентов. // // Параметры: // Форма - УправляемаяФорма - Форма документа, в котором выполняется проверка контрагентов. Процедура ОбработатьРезультатПроверкиКонтрагентовВДокументе(Форма) Экспорт - Если Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется Тогда + Если Форма.РеквизитыПроверкиКонтрагентов.ИнициализацияВыполненаПолностью Тогда - // Если в настоящий момент выполняется редактирование табличной части, то результат проверки не прорисовываем, - // чтобы не затереть данные, вводимые пользователем. - Если НЕ Форма.РеквизитыПроверкиКонтрагентов.ОтложитьПрорисовкуРезультатаПроверкиКонтрагентов Тогда + ОтложитьПрорисовкуРезультатаПроверкиКонтрагентов = Форма.РеквизитыПроверкиКонтрагентов.ОтложитьПрорисовкуРезультатаПроверкиКонтрагентов; + + Если Форма.РеквизитыПроверкиКонтрагентов.ЭтоПроверкаКонтрагентовПриОткрытии Тогда + + ПроверкаКонтрагентовКлиентСервер.ПредотвратитьСбросРедактируемогоЗначения(Форма); + + // Вход в данную ветку возможен только сразу после открытия документа. + // Дополнительный параметр предназначен для того, чтобы сразу после проверки сохранить + // результат проверки в регистр. + ДополнительныеПараметры = Истина; + ЗапуститьПроверкуКонтрагентовВДокументе(Форма, ДополнительныеПараметры); + Форма.РеквизитыПроверкиКонтрагентов.ЭтоПроверкаКонтрагентовПриОткрытии = Ложь; + + ИначеЕсли НЕ ОтложитьПрорисовкуРезультатаПроверкиКонтрагентов Тогда Результат = ПроверкаКонтрагентовВызовСервера.РезультатРаботыФоновогоЗаданияПроверкиКонтрагентовВДокументе(Форма.РеквизитыПроверкиКонтрагентов); - // Если есть незавершившиеся фоновые задания, то продолжаем ждать результат. Если Результат.ЗаданиеВыполнено Тогда + // Закрытие формы длительной операции. + Если Форма.ФормаДлительнойОперации <> Неопределено + И Форма.ФормаДлительнойОперации.Открыта() Тогда + ДлительныеОперацииКлиент.ЗакрытьФормуДлительнойОперации(Форма.ФормаДлительнойОперации); + КонецЕсли; + + // Уведомление должно идти после закрытия формы длительной операции, + // иначе обе формы закроются одновременно. + Если НЕ Результат.ЕстьДоступКВебСервисуФНС Тогда + Если Форма.РеквизитыПроверкиКонтрагентов.ЭтоПроверкаПоКнопке Тогда + УведомитьОбОтсутствииДоступа(); // в документе + Возврат; + КонецЕсли; + КонецЕсли; + + // Отображение результата проверки на форме. + // Результат проверки перерисовывается на форме: + // - при проверке по кнопке - всегда. + // - при автоматической проверке - только если данные в кэше отличаются от данных, + // полученных от ФНС. Форма.ПроверкаКонтрагентовПараметрыОбработчикаОжидания = Неопределено; - Если НЕ Результат.ДанныеКонтрагентовИзКэшаСовпадаютСДаннымиФНС Тогда + Если НЕ Результат.ДанныеВКэшСовпадаютСФНС + ИЛИ Форма.РеквизитыПроверкиКонтрагентов.ЭтоПроверкаПоКнопке Тогда - // Контекстный серверный вызов + // Контекстный серверный вызов, который из-за особенности платформы + // приводит к сбрасыванию редактируемого значения. Форма.ОтобразитьРезультатПроверкиКонтрагента(); КонецЕсли; - // Определение объекта и ссылки. - ОбъектИСсылкаПоФорме = ПроверкаКонтрагентовКлиентСервер.ОбъектИСсылкаПоФорме(Форма); - ДокументСсылка = ОбъектИСсылкаПоФорме.Ссылка; - - ОповеститьОбИзменении(ДокументСсылка); + // Перерисовка списка документов. + ОповеститьОбИзмененииСостоянияДокумента(Форма); Иначе + // Если есть незавершившиеся фоновые задания, то продолжаем ждать результат. Если Форма.ПроверкаКонтрагентовПараметрыОбработчикаОжидания <> Неопределено Тогда + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(Форма.ПроверкаКонтрагентовПараметрыОбработчикаОжидания); - Форма.ПодключитьОбработчикОжидания("Подключаемый_ОбработатьРезультатПроверкиКонтрагентов", Форма.ПроверкаКонтрагентовПараметрыОбработчикаОжидания.ТекущийИнтервал, Истина); + + Форма.ПодключитьОбработчикОжидания( + "Подключаемый_ОбработатьРезультатПроверкиКонтрагентов", + Форма.ПроверкаКонтрагентовПараметрыОбработчикаОжидания.ТекущийИнтервал, + Истина); + КонецЕсли; КонецЕсли; @@ -220,7 +281,7 @@ КонецПроцедуры -// Процедура - Запускает проверку контрагента из документа, если было определено, что возникло событие, +// Запускает проверку контрагента из документа, если было определено, что возникло событие, // требующее обновления результата проверки контрагентов. // // Параметры: @@ -245,7 +306,7 @@ КонецПроцедуры -// Процедура - Взводит флаг, что редактируется табличная часть. +// Взводит флаг, что редактируется табличная часть. // Если взведен флаг, то результат проверки контрагента не будет отображен до тех пор, // пока не завершится редактирование табличной части. // @@ -262,7 +323,7 @@ КонецПроцедуры -// Процедура - Сбрасывает флаг, что редактируется табличная часть. +// Сбрасывает флаг, что редактируется табличная часть. // Если взведен флаг, то результат проверки контрагента не будет отображен до тех пор, // пока не завершится редактирование табличной части. // @@ -283,11 +344,31 @@ КонецПроцедуры +// Проверка контрагентов по кнопке в открытом документе. +// +// Параметры: +// Форма - УправляемаяФорма - Форма документа, в котором выполняется проверка контрагентов. +// +Процедура ПроверитьКонтрагентовВДокументеПоКнопке(Форма) Экспорт + + ДополнительныеПараметры = Новый Структура(); + ДополнительныеПараметры.Вставить("СохранятьРезультатСразуПослеПроверки", НЕ Форма.Модифицированность); + ДополнительныеПараметры.Вставить("ЭтоПроверкаПоКнопке", Истина); + + ЗапуститьПроверкуКонтрагентовВДокументе(Форма, ДополнительныеПараметры); + + Форма.ФормаДлительнойОперации = + ДлительныеОперацииКлиент.ОткрытьФормуДлительнойОперации( + Форма, + Форма.РеквизитыПроверкиКонтрагентов.ИдентификаторЗадания); + +КонецПроцедуры + #КонецОбласти #Область ПроверкаКонтрагентовВОтчетах -// Процедура - Подключение обработчика ожидания для отображения предложения на использование проверки. +// Подключение обработчика ожидания для отображения предложения на использование проверки. // // Параметры: // Форма - УправляемаяФорма - Форма отчета, в котором выполняется проверка контрагентов. @@ -300,39 +381,41 @@ КонецПроцедуры -// Процедура - Сброс актуальности, сброс вида панели проверки контрагентов при изменении отборов отчета. -// -// Параметры: -// Форма - УправляемаяФорма - Форма отчета, в котором выполняется проверка контрагентов. -Процедура СброситьАктуальностьОтчета(Форма) Экспорт - - ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Форма.Элементы.Результат, "НеАктуальность"); - ПроверкаКонтрагентовКлиентСервер.УстановитьВидПанелиПроверкиКонтрагентовВОтчете(Форма); - -КонецПроцедуры - -// Процедура - Запуск проверки контрагентов в отчете после первичного формирования отчета. +// Запуск проверки контрагентов в отчете после первичного формирования отчета. // // Параметры: // Форма - УправляемаяФорма - Форма отчета, в котором выполняется проверка контрагентов. Процедура ЗапуститьПроверкуКонтрагентовВОтчете(Форма) Экспорт Форма.РеквизитыПроверкиКонтрагентов.ПроверкаВыполнялась = Ложь; - Если Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется И Форма.ПроверкаКонтрагентовНедействующиеКонтрагенты.Количество() > 0 Тогда + Если Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется + И Форма.РеквизитыПроверкиКонтрагентов.НедействующиеКонтрагентыКоличество > 0 Тогда Если Форма.РеквизитыПроверкиКонтрагентов.ЕстьДоступКВебСервисуФНС Тогда + Форма.ОтключитьОбработчикОжидания("Подключаемый_ОбработатьРезультатПроверкиКонтрагентов"); - ПроверкаКонтрагентовКлиентСервер.УстановитьВидПанелиПроверкиКонтрагентовВОтчете(Форма, "ПроверкаВПроцессеВыполнения"); Форма.ПроверитьКонтрагентов(); + ПроверкаКонтрагентовКлиентСервер.УстановитьВидПанелиПроверкиКонтрагентовВОтчете(Форма, "ПроверкаВПроцессеВыполнения"); + Если Форма.РеквизитыПроверкиКонтрагентов.ЗаданиеВыполнено Тогда + Форма.ОтобразитьРезультатПроверкиКонтрагента(); Форма.РеквизитыПроверкиКонтрагентов.ИдентификаторЗадания = Неопределено; + Иначе + // Результата еще нет, но есть шансы дождаться. - ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(Форма.ПроверкаКонтрагентовПараметрыОбработчикаОжидания); - Форма.ПодключитьОбработчикОжидания("Подключаемый_ОбработатьРезультатПроверкиКонтрагентов", ИнтервалОбработкиРезультата(), Истина); + ИнициализироватьПараметрыОбработчикаОжиданияВОтчете( + Форма.ПроверкаКонтрагентовПараметрыОбработчикаОжидания, + Форма.РеквизитыПроверкиКонтрагентов.НедействующиеКонтрагентыКоличество); + + Форма.ПодключитьОбработчикОжидания( + "Подключаемый_ОбработатьРезультатПроверкиКонтрагентов", + Форма.ПроверкаКонтрагентовПараметрыОбработчикаОжидания.ТекущийИнтервал, + Истина); + КонецЕсли; Иначе ПроверкаКонтрагентовКлиентСервер.ВывестиНужнуюПанельПроверкиКонтрагентовВОтчете(Форма); @@ -343,10 +426,10 @@ КонецПроцедуры -// Процедура - Обработка результата проверки контрагентов в отчете. +// Обработка результата проверки контрагентов в отчете. // // Параметры: -// Форма - УправляемаяФорма - Форма документа, в котором выполняется проверка контрагентов. +// Форма - УправляемаяФорма - Форма документа, в котором выполняется проверка контрагентов. Процедура ОбработатьРезультатПроверкиКонтрагентовВОтчете(Форма) Экспорт Попытка @@ -368,7 +451,7 @@ #Область ПроверкаКонтрагентовВСправочнике -// Процедура - Подключение обработчиков результата проверки контрагента из карточки контрагента. +// Подключение обработчиков результата проверки контрагента из карточки контрагента. // // Параметры: // Форма - УправляемаяФорма - Карточка контрагента. @@ -388,7 +471,7 @@ КонецПроцедуры -// Процедура - Запуск проверки из карточки контрагента. +// Запуск проверки из карточки контрагента. // // Параметры: // Форма - УправляемаяФорма - Карточка контрагента. @@ -397,17 +480,37 @@ // Если ИНН или КПП некорректные, или проверка не включена, то не запускаем проверку. Если Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется Тогда - ПроверкаКонтрагентовКлиентСервер.ПроверитьКонтрагентаИзКарточки(Форма); + Форма.РеквизитыПроверкиКонтрагентов.ЭтоПроверкаПоКнопке = Ложь; - // Прерываем предыдущую проверку. - Форма.РеквизитыПроверкиКонтрагентов.ИнтервалПроверкиРезультата = 1; - Форма.ПодключитьОбработчикОжидания("Подключаемый_ОбработатьРезультатПроверкиКонтрагентов", Форма.РеквизитыПроверкиКонтрагентов.ИнтервалПроверкиРезультата, Истина); + ДополнительныеПараметры = Новый Структура(); + ДополнительныеПараметры.Вставить("ЭтоПроверкаСправочника", Истина); + + Если ПроверкаКонтрагентовКлиентСервер.ПрерватьПроверкуКонтрагентовИзЗаОшибокПредварительнойПроверки(Форма, ДополнительныеПараметры) Тогда + + ОбработатьСостояниеКонтрагентаВСправочнике(Форма); + + Иначе + + ПроверкаКонтрагентовКлиентСервер.ПроверитьКонтрагентаИзКарточки(Форма, Ложь); + + // Прерываем предыдущую проверку. + Форма.РеквизитыПроверкиКонтрагентов.ИнтервалПроверкиРезультата = 1; + Форма.ПодключитьОбработчикОжидания("Подключаемый_ОбработатьРезультатПроверкиКонтрагентов", Форма.РеквизитыПроверкиКонтрагентов.ИнтервалПроверкиРезультата, Истина); + + КонецЕсли; + + Иначе + + // При возникновении любого события, приводящего к необходимости перепроверить контрагента + // в режиме проверки по кнопке сбрасываем предыдущий результат проверки, но не перепроверяем. + // Если нужно, перепроверку пользователь сможет сделать по кнопке. + ОчиститьРезультатПроверкиКонтрагента(Форма); КонецЕсли; КонецПроцедуры -// Процедура - Обработка результата фонового задания по проверке контрагента из карточки контрагента. +// Обработка результата фонового задания по проверке контрагента из карточки контрагента. // // Параметры: // Форма - УправляемаяФорма - Карточка контрагента. @@ -426,33 +529,188 @@ Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагента = ТекущееСостояниеКонтрагента(КонтрагентСсылка, ИНН, КПП, Форма.РеквизитыПроверкиКонтрагентов.АдресХранилища); - // Проверяем готовность результата фонового задания. - Если НЕ ЗначениеЗаполнено(Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагента) Тогда - ПроверкаКонтрагентовКлиентСервер.ОтобразитьРезультатПроверкиКонтрагентаВСправочнике(Форма); - // Проверяем результат через 1,3 и 9 сек. - Если Форма.РеквизитыПроверкиКонтрагентов.ИнтервалПроверкиРезультата < 9 Тогда - Форма.РеквизитыПроверкиКонтрагентов.ИнтервалПроверкиРезультата = Форма.РеквизитыПроверкиКонтрагентов.ИнтервалПроверкиРезультата * 3; - Форма.ПодключитьОбработчикОжидания("Подключаемый_ОбработатьРезультатПроверкиКонтрагентов", Форма.РеквизитыПроверкиКонтрагентов.ИнтервалПроверкиРезультата, Истина); - Возврат; - КонецЕсли; + ОбработатьСостояниеКонтрагентаВСправочнике(Форма); + +КонецПроцедуры + +// Проверка контрагента по кнопке в карточке контрагента. +// +// Параметры: +// Форма - УправляемаяФорма - Карточка контрагента. +// +Процедура ПроверитьКонтрагентаПоКнопке(Форма) Экспорт + + Форма.РеквизитыПроверкиКонтрагентов.ЭтоПроверкаПоКнопке = Истина; + + ОчиститьРезультатПроверкиКонтрагента(Форма); + + ДополнительныеПараметры = Новый Структура(); + ДополнительныеПараметры.Вставить("ЭтоПроверкаСправочника", Истина); + ДополнительныеПараметры.Вставить("СохранятьРезультатСразуПослеПроверки", НЕ Форма.Модифицированность); + + ЕстьОшибкиПредварительнойПроверки = + ПроверкаКонтрагентовКлиентСервер.ПрерватьПроверкуКонтрагентовИзЗаОшибокПредварительнойПроверки(Форма, ДополнительныеПараметры); + + Если ЕстьОшибкиПредварительнойПроверки Тогда + + ОбработатьСостояниеКонтрагентаВСправочнике(Форма); + Иначе - // Результат получен - Форма.РеквизитыПроверкиКонтрагентов.ФоновоеЗаданиеЗапущено = Ложь; - ПроверкаКонтрагентовКлиентСервер.ОтобразитьРезультатПроверкиКонтрагентаВСправочнике(Форма); + + // Если форма модифицирована, то результат запишется при записи карточки. + // Сразу результат не записываем для модифицированного контрагента на тот случай, + // если в карточке сделают изменение, а потом закроют форму без сохранения. + СохранятьРезультатСразуПослеПроверки = НЕ Форма.Модифицированность; + ПроверкаКонтрагентовКлиентСервер.ПроверитьКонтрагентаИзКарточки(Форма, СохранятьРезультатСразуПослеПроверки); + + // Прерываем предыдущую проверку. + Форма.РеквизитыПроверкиКонтрагентов.ИнтервалПроверкиРезультата = 1; + + Форма.ПодключитьОбработчикОжидания( + "Подключаемый_ОбработатьРезультатПроверкиКонтрагентов", + Форма.РеквизитыПроверкиКонтрагентов.ИнтервалПроверкиРезультата, + Истина); + + // Открываем форму длительной операции. + Форма.ФормаДлительнойОперации = + ДлительныеОперацииКлиент.ОткрытьФормуДлительнойОперации( + Форма, + Форма.РеквизитыПроверкиКонтрагентов.ИдентификаторЗадания); + КонецЕсли; КонецПроцедуры #КонецОбласти +#Область УстаревшиеПроцедурыИФункции + +// Сброс актуальности, сброс вида панели проверки контрагентов при изменении отборов отчета. +// +// Параметры: +// Форма - УправляемаяФорма - Форма отчета, в котором выполняется проверка контрагентов. +Процедура СброситьАктуальностьОтчета(Форма) Экспорт + + ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Форма.Элементы.Результат, "НеАктуальность"); + ПроверкаКонтрагентовКлиентСервер.УстановитьВидПанелиПроверкиКонтрагентовВОтчете(Форма); + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти #Область СлужебныеПроцедурыИФункции +Процедура ОповеститьОбИзмененииСостоянияДокумента(Форма) + + // Перерисовка списка выполняется всегда, не только когда данные в регистре не совпадают с + // данными веб-сервиса, так как при следующих условиях перерисовка требуется, + // но в ветку для кэша не заходит: документ еще ни разу не проверялся, но данные контрагента + // совпадают с кэшем. + Если Форма.РеквизитыПроверкиКонтрагентов.СохранятьРезультатСразуПослеПроверки + И Форма.РеквизитыПроверкиКонтрагентов.ЭтотДокументБылСОшибкой <> Форма.РеквизитыПроверкиКонтрагентов.ЭтоДокументСОшибкой Тогда + + // Определение объекта и ссылки. + ОбъектИСсылкаПоФорме = ПроверкаКонтрагентовКлиентСервер.ОбъектИСсылкаПоФорме(Форма); + ДокументСсылка = ОбъектИСсылкаПоФорме.Ссылка; + + ОповеститьОбИзменении(ДокументСсылка); + + КонецЕсли; + +КонецПроцедуры + +Процедура УведомитьОбОтсутствииДоступа() + + ПоказатьПредупреждение(, НСтр("ru = 'Проверка контрагентов сервисом ФНС не выполнена из-за ошибки подключения к сервису'")); + +КонецПроцедуры + Функция ИнтервалОбработкиРезультата() - Возврат 0.1; + // Более короткий интервал приводит к замедлению при открытии форм. + Возврат 1; КонецФункции +Процедура ОбработатьСостояниеКонтрагентаВСправочнике(Форма) + + ПроверкаКонтрагентовКлиентСервер.ПредотвратитьСбросРедактируемогоЗначения(Форма); + + // Проверяем готовность результата фонового задания. + Если ЗначениеЗаполнено(Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагента) Тогда + + // Результат получен + Форма.РеквизитыПроверкиКонтрагентов.ФоновоеЗаданиеЗапущено = Ложь; + ПроверкаКонтрагентовКлиентСервер.ОтобразитьРезультатПроверкиКонтрагентаВСправочнике(Форма); + + ЗакрытьФормуДлительнойОперацииВСправочнике(Форма); + + Если Форма.РеквизитыПроверкиКонтрагентов.ЭтоПроверкаПоКнопке + И НЕ ЗначениеЗаполнено(Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагента) Тогда + УведомитьОбОтсутствииДоступа(); // в справочнике + КонецЕсли; + + Иначе + + ПроверкаКонтрагентовКлиентСервер.ОтобразитьРезультатПроверкиКонтрагентаВСправочнике(Форма); + // Проверяем результат через 1,3 и 9 сек. + Если Форма.РеквизитыПроверкиКонтрагентов.ИнтервалПроверкиРезультата < 9 Тогда + Форма.РеквизитыПроверкиКонтрагентов.ИнтервалПроверкиРезультата = Форма.РеквизитыПроверкиКонтрагентов.ИнтервалПроверкиРезультата * 3; + Форма.ПодключитьОбработчикОжидания("Подключаемый_ОбработатьРезультатПроверкиКонтрагентов", Форма.РеквизитыПроверкиКонтрагентов.ИнтервалПроверкиРезультата, Истина); + Возврат; + Иначе + + ЗакрытьФормуДлительнойОперацииВСправочнике(Форма); + + // Была выполнена проверка по кнопке. + // Пользователь ждет результата. + // Если результат через 9 секунд не получен - предупреждаем пользователя. + Если Форма.РеквизитыПроверкиКонтрагентов.ЭтоПроверкаПоКнопке Тогда + УведомитьОбОтсутствииДоступа(); // в справочнике + КонецЕсли; + + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Процедура ЗакрытьФормуДлительнойОперацииВСправочнике(Форма) + + Если Форма.РеквизитыПроверкиКонтрагентов.ЭтоПроверкаПоКнопке Тогда + + Если Форма.ФормаДлительнойОперации <> Неопределено + И Форма.ФормаДлительнойОперации.Открыта() Тогда + ДлительныеОперацииКлиент.ЗакрытьФормуДлительнойОперации(Форма.ФормаДлительнойОперации); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Процедура ИнициализироватьПараметрыОбработчикаОжиданияВОтчете(ПараметрыОбработчикаОжидания, КоличествоКонтрагентов) + + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + + Если КоличествоКонтрагентов >= 10000 Тогда + ПараметрыОбработчикаОжидания.МаксимальныйИнтервал = 60; + ПараметрыОбработчикаОжидания.ТекущийИнтервал = 30; + ИначеЕсли КоличествоКонтрагентов >= 1000 Тогда + ПараметрыОбработчикаОжидания.ТекущийИнтервал = Мин(2 * Цел(КоличествоКонтрагентов / 1000), ПараметрыОбработчикаОжидания.МаксимальныйИнтервал); + КонецЕсли; + +КонецПроцедуры + +Процедура ОчиститьРезультатПроверкиКонтрагента(Форма) + + Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагента = + ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустаяСсылка"); + + ПроверкаКонтрагентовКлиентСервер.ОтобразитьРезультатПроверкиКонтрагентаВСправочнике(Форма); + +КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ПроверкаКонтрагентовКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПроверкаКонтрагентовКлиентСервер/Module.bsl index 129aaf702..e5ff66f48 100644 --- a/SSL/src/CommonModules/ПроверкаКонтрагентовКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПроверкаКонтрагентовКлиентСервер/Module.bsl @@ -5,7 +5,7 @@ #Область ПрограммныйИнтерфейс -// Процедура - Установить текст подсказки в документе. +// Установить текст подсказки в документе. // // Параметры: // ПараметрыПрорисовки - Структура - Описание см ПроверкаКонтрагентов.ДополнитьОписание. @@ -30,7 +30,7 @@ КонецПроцедуры -// Процедура - Вывод панели проверки в отчете. +// Вывод панели проверки в отчете. // // Параметры: // Форма - УправляемаяФорма - Форма отчета, для которого выводится результат проверки контрагента. @@ -86,7 +86,7 @@ КонецПроцедуры -// Функция - Определяет, есть ли у формы документа контрагент в шапке. +// Определяет, есть ли у формы документа контрагент в шапке. // // Параметры: // Форма - УправляемаяФорма - Форма документа, в котором выполняется проверка контрагентов. @@ -102,7 +102,7 @@ КонецФункции -// Функция - Определяет, является ли форма документа формой счета-фактуры. +// Определяет, является ли форма документа формой счета-фактуры. // // Параметры: // Источник - Произвольный - Источник обработки оповещения. @@ -121,7 +121,7 @@ КонецФункции -// Функция - Определяет, есть ли в форме документа счет-фактура в подвале. +// Определяет, есть ли в форме документа счет-фактура в подвале. // // Параметры: // Форма - УправляемаяФорма - Форма документа, в котором выполняется проверка контрагентов. @@ -137,7 +137,7 @@ КонецФункции -// Функция - Определяет, есть ли в форме документа табличные части с контрагентами. +// Определяет, есть ли в форме документа табличные части с контрагентами. // // Параметры: // Форма - УправляемаяФорма - Форма документа, в котором выполняется проверка контрагентов. @@ -153,7 +153,7 @@ КонецФункции -// Функция - Определяет, является ли источник контрагентом. +// Определяет, является ли источник контрагентом. // // Параметры: // Источник - Произвольный - Источник обработки оповещения. @@ -166,7 +166,7 @@ КонецФункции -// Функция - Определяет имя колонки с признаком, корректный ли это контрагент. +// Определяет имя колонки с признаком, корректный ли это контрагент. // // Параметры: // ТаблицаФормы - ТаблицаФормы - Таблица формы, в которой располагается колонка с контрагентом. @@ -177,7 +177,7 @@ Возврат ТаблицаФормы.Имя + "ЭтоНекорректныйКонтрагент"; КонецФункции -// Функция - Подсказка в документе. +// Подсказка в документе. // // Параметры: // ПараметрыПрорисовки - Структура - Параметры прорисовки результата проверки контрагента в документе. @@ -198,7 +198,8 @@ ЦветФона = Новый Цвет(); Подстроки = Новый Массив; - РекламаСервиса = Новый ФорматированнаяСтрока(НСтр("ru = 'В программе появилась возможность использовать веб-сервис ФНС для проверки регистрации контрагентов в ЕГРН'")); + РекламаСервиса = Новый ФорматированнаяСтрока( + НСтр("ru = 'Проверьте контрагента по кнопке в подменю Еще'")); Если СостояниеПроверки = ПредопределенноеЗначение("Перечисление.СостоянияПроверкиКонтрагентов.ПроверкаНеИспользуется") Тогда // Выводим предложение на подключение. @@ -207,13 +208,16 @@ // Проверка не завершилась Подстроки.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = 'Выполняется проверка контрагентов согласно данным ФНС'"))); - ИначеЕсли СостояниеПроверки = ПредопределенноеЗначение("Перечисление.СостоянияПроверкиКонтрагентов.НетДоступаКВебСервису") Тогда + ИначеЕсли СостояниеПроверки = ПредопределенноеЗначение("Перечисление.СостоянияПроверкиКонтрагентов.НетДоступаКВебСервису") + И НЕ ЗначениеЗаполнено(СостояниеКонтрагента) Тогда // Нет доступа к сервису Подстроки.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = 'Не удалось произвести проверку контрагентов: |сервис ФНС временно недоступен'"))); - ИначеЕсли СостояниеПроверки = ПредопределенноеЗначение("Перечисление.СостоянияПроверкиКонтрагентов.ПроверкаВыполнена") Тогда + ИначеЕсли СостояниеПроверки = ПредопределенноеЗначение("Перечисление.СостоянияПроверкиКонтрагентов.ПроверкаВыполнена") + ИЛИ СостояниеПроверки = ПредопределенноеЗначение("Перечисление.СостоянияПроверкиКонтрагентов.НетДоступаКВебСервису") + И ЗначениеЗаполнено(СостояниеКонтрагента) Тогда // Проверка завершилась Цвета = ПроверкаКонтрагентовВызовСервераПовтИсп.ЦветаРезультатовПроверки(); @@ -222,17 +226,26 @@ ЦветКорректногоКонтрагента = Цвета.ЦветФонаКорректногоКонтрагентаВДокументе; Если НЕ КонтрагентЗаполнен Тогда + // Не заполнен контрагент Подстроки.Добавить(НСтр("ru = 'Проверка контрагента по базе ФНС не выполнена: не заполнен контрагент'")); + ИначеЕсли НЕ ЗначениеЗаполнено(СостояниеКонтрагента) Тогда + Подстроки.Добавить(РекламаСервиса); + ИначеЕсли СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентНеПодлежитПроверке") Тогда + // Иностранный контрагент Подстроки.Добавить(НСтр("ru = 'Проверка контрагента по базе ФНС не выполнена: проверке подлежат только российские контрагенты'")); + ИначеЕсли СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустойИННИлиКПП") Тогда + // Контрагенты с пустым ИНН и КПП не проверяются. - Подстроки.Добавить(НСтр("ru = 'Проверка контрагента по базе ФНС не выполнена: не заполнен ИНН/КПП'")); + Подстроки.Добавить(НСтр("ru = 'Не заполнен ИНН или КПП'")); + ИначеЕсли ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоСостояниеНедействующегоКонтрагента(СостояниеКонтрагента) Тогда + // Недействующий контрагент Если КонтрагентовНесколько Тогда // Выводим обобщенно @@ -242,11 +255,21 @@ Подстроки.Добавить(Строка(СостояниеКонтрагента)); КонецЕсли; ЦветФона = ЦветНекорректногоКонтрагента; + ИначеЕсли СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных") Тогда + // Контрагент с ошибками в ИНН/КПП или дате. - Подстроки.Добавить(НСтр("ru = 'Проверка контрагента по базе ФНС не выполнена: обнаружены ошибки в заполнении ИНН/КПП/даты документа'")); + // Устаревшее состояние проверки. + Подстроки.Добавить(НСтр("ru = 'Обнаружены ошибки в заполнении ИНН, КПП или даты документа'")); ЦветФона = ЦветНекорректногоКонтрагента; + + ИначеЕсли ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоСостояниеКонтрагентаСОшибкой(СостояниеКонтрагента) Тогда + + Подстроки.Добавить(Строка(СостояниеКонтрагента)); + ЦветФона = ЦветНекорректногоКонтрагента; + ИначеЕсли СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентЕстьВБазеФНС") Тогда + // Действующий корректный контрагент. Если КонтрагентовНесколько Тогда // Выводим обобщенно @@ -256,6 +279,7 @@ Подстроки.Добавить(Строка(СостояниеКонтрагента)); КонецЕсли; ЦветФона = ЦветКорректногоКонтрагента; + КонецЕсли; КонецЕсли; @@ -273,7 +297,7 @@ КонецФункции -// Функция - Получение счета-фактуры, находящегося в подвале документа-основания, чья форма передана в качестве +// Получение счета-фактуры, находящегося в подвале документа-основания, чья форма передана в качестве // параметра. // // Параметры: @@ -292,7 +316,7 @@ КонецФункции -// Функция - Свойства справочника контрагенты. +// Свойства справочника контрагенты. // Предназначена для определения имени справочника, имени реквизитов ИНН и КПП. // // Возвращаемое значение: @@ -311,12 +335,21 @@ КонецФункции -// Процедура - Вывод нужной панели проверки контрагентов в отчете. +// Вывод нужной панели проверки контрагентов в отчете. // // Параметры: // Форма - УправляемаяФорма - Форма отчета, в котором выполняется проверка контрагентов. +// ПроверкаИспользуетсяВРазделеОтчета - Булево - Признак того, что в текущем разделе используется +// проверка контрагентов. Если отчет не содержит разделов, +// то значение игнорируется. // -Процедура ВывестиНужнуюПанельПроверкиКонтрагентовВОтчете(Форма) Экспорт +Процедура ВывестиНужнуюПанельПроверкиКонтрагентовВОтчете(Форма, ПроверкаИспользуетсяВРазделеОтчета = Истина) Экспорт + + Элементы = Форма.Элементы; + + Если Элементы.Найти("ПроверкаКонтрагента") = Неопределено Тогда + Возврат; + КонецЕсли; Если Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется Тогда @@ -324,23 +357,27 @@ Если Форма.РеквизитыПроверкиКонтрагентов.ПроверкаВыполнялась Тогда - НедействующиеКонтрагенты = Форма.ПроверкаКонтрагентовНедействующиеКонтрагенты; - - КонтрагентыСПустымСостоянием = НедействующиеКонтрагенты.НайтиСтроки(Новый Структура("Состояние", - ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустаяСсылка"))); - Если НедействующиеКонтрагенты.Количество() = 0 Тогда + НедействующиеКонтрагентыКоличество = Форма.РеквизитыПроверкиКонтрагентов.НедействующиеКонтрагентыКоличество; + КонтрагентыСПустымСостояниемКоличество = Форма.РеквизитыПроверкиКонтрагентов.КонтрагентыСПустымСостояниемКоличество; + + Если Форма.РеквизитыПроверкиКонтрагентов.ОтчетСРазделами И НЕ ПроверкаИспользуетсяВРазделеОтчета Тогда + // В текущем разделе отчета проверка не используется. + УстановитьВидПанелиПроверкиКонтрагентовВОтчете(Форма); + ИначеЕсли НедействующиеКонтрагентыКоличество = 0 Тогда УстановитьВидПанелиПроверкиКонтрагентовВОтчете(Форма, "ВсеКонтрагентыКорректные"); - ИначеЕсли НедействующиеКонтрагенты.Количество() > 0 И КонтрагентыСПустымСостоянием.Количество() = НедействующиеКонтрагенты.Количество() Тогда + ИначеЕсли НедействующиеКонтрагентыКоличество > 0 И КонтрагентыСПустымСостояниемКоличество = НедействующиеКонтрагентыКоличество Тогда // Ни один контрагенты не проверен. УстановитьВидПанелиПроверкиКонтрагентовВОтчете(Форма, "НетДоступаКСервису"); - ИначеЕсли НедействующиеКонтрагенты.Количество() > 0 Тогда + ИначеЕсли НедействующиеКонтрагентыКоличество > 0 Тогда // Контрагенты проверены УстановитьВидПанелиПроверкиКонтрагентовВОтчете(Форма, "НайденыНекорректныеКонтрагенты"); КонецЕсли; Иначе - // Проверка не выполнилась, например, потому что в отчете не было ни одной записи. - УстановитьВидПанелиПроверкиКонтрагентовВОтчете(Форма); + // Проверка не выполнилась, например, потому что в отчете не было ни одной записи, или проверка просто еще не закончилась. + Если Элементы.ПроверкаКонтрагента.ТекущаяСтраница <> Элементы.ПроверкаВПроцессеВыполнения Тогда + УстановитьВидПанелиПроверкиКонтрагентовВОтчете(Форма); + КонецЕсли; КонецЕсли; Иначе @@ -353,7 +390,7 @@ КонецПроцедуры -// Функция - Параметры фонового задания. +// Параметры фонового задания. // // Параметры: // Параметр - Структура - Если изменения произошли в табличной части. @@ -424,7 +461,7 @@ КонецФункции -// Функция - Получение объекта (ДанныеФормыСтруктура) и ссылки(ДокументСсылка, СправочникСсылка) документа или +// Получение объекта (ДанныеФормыСтруктура) и ссылки(ДокументСсылка, СправочникСсылка) документа или // справочника, в котором выполняется проверка контрагента, по форме. // Обязательна к заполнению. // Параметры: @@ -441,27 +478,226 @@ КонецФункции -// Процедура - Отображение результата проверки контрагента в справочнике. +// Отображение результата проверки контрагента в справочнике. // // Параметры: // Форма - УправляемаяФорма - Карточка проверяемого контрагента. Процедура ОтобразитьРезультатПроверкиКонтрагентаВСправочнике(Форма) Экспорт - Если Форма.РеквизитыПроверкиКонтрагентов.ПроверкаИспользуется Тогда - ПредставлениеРезультатаПроверки = ПредставлениеРезультатаПроверкиКонтрагента(Форма); - Иначе - ПредставлениеРезультатаПроверки = ""; - КонецЕсли; + ПредставлениеРезультатаПроверки = ПредставлениеРезультатаПроверкиКонтрагента(Форма); РаботаСКонтрагентамиКлиентСерверПереопределяемый.ОтобразитьРезультатПроверкиКонтрагентаВСправочнике(Форма, ПредставлениеРезультатаПроверки); КонецПроцедуры +// Сброс актуальности, сброс вида панели проверки контрагентов при изменении отборов отчета. +// +// Параметры: +// Форма - УправляемаяФорма - Форма отчета, в котором выполняется проверка контрагентов. +Процедура СброситьАктуальностьОтчета(Форма) Экспорт + + ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Форма.Элементы.Результат, "НеАктуальность"); + УстановитьВидПанелиПроверкиКонтрагентовВОтчете(Форма); + +КонецПроцедуры + #КонецОбласти #Область ВспомогательныеПроцедурыИФункции -Процедура ПроверитьКонтрагентаИзКарточки(Форма, ДополнительныеПараметры = Неопределено) Экспорт +Процедура ПредотвратитьСбросРедактируемогоЗначения(Форма) Экспорт + + // Обход особенности платформы, когда затирается редактируемое значение + // в текущем элементе при изменении формы. + Если НЕ ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + Если ТипЗнч(Форма.ТекущийЭлемент) = Тип("ПолеФормы") И Форма.ТекущийЭлемент.Вид = ВидПоляФормы.ПолеВвода Тогда + Форма.ТекущийЭлемент.ОбновлениеТекстаРедактирования = ОбновлениеТекстаРедактирования.ПриИзмененииЗначения; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Функция ВидДокумента(Форма) Экспорт + + Результат = РезультатОпределенияВидаДокумента(); + РаботаСКонтрагентамиКлиентСерверПереопределяемый.ОпределитьВидДокумента(Форма, Результат); + + Возврат Результат; + +КонецФункции + +Функция ПрерватьПроверкуКонтрагентовИзЗаОшибокПредварительнойПроверки(Форма, ДополнительныеПараметрыПроверки) Экспорт + + ВыполнятьПредварительнуюПроверку = + Форма.РеквизитыПроверкиКонтрагентов.ВыполнятьПредварительнуюПроверкуКонтрагента + И Форма.РеквизитыПроверкиКонтрагентов.Свойство("ЭтоЮридическоеЛицо") + И Форма.РеквизитыПроверкиКонтрагентов.Свойство("ЭтоИностранныйКонтрагент"); + + Если НЕ ВыполнятьПредварительнуюПроверку Тогда + Возврат Ложь; + КонецЕсли; + + // Не проверяем иностранных контрагентов. + ЭтоИностранныйКонтрагент = Форма.РеквизитыПроверкиКонтрагентов.ЭтоИностранныйКонтрагент = Истина; // Может быть незаполненным + НайденыОшибки = Ложь; + + СвойстваСправочникаКонтрагенты = СвойстваСправочникаКонтрагенты(); + + // Определение объекта и ссылки. + ОбъектИСсылкаПоФорме = ОбъектИСсылкаПоФорме(Форма); + КонтрагентОбъект = ОбъектИСсылкаПоФорме.Объект; + КонтрагентСсылка = ОбъектИСсылкаПоФорме.Ссылка; + + ДанныеКонтрагента = Новый Структура; + ДанныеКонтрагента.Вставить("Контрагент", КонтрагентСсылка); + ДанныеКонтрагента.Вставить("ИНН", СокрЛП(КонтрагентОбъект[СвойстваСправочникаКонтрагенты.ИНН])); + ДанныеКонтрагента.Вставить("КПП", СокрЛП(КонтрагентОбъект[СвойстваСправочникаКонтрагенты.КПП])); + ДанныеКонтрагента.Вставить("Дата", Неопределено); + ДанныеКонтрагента.Вставить("Состояние", ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустаяСсылка")); + ДанныеКонтрагента.Вставить("ЭтоЮридическоеЛицо", Форма.РеквизитыПроверкиКонтрагентов.ЭтоЮридическоеЛицо); + + Если ЭтоИностранныйКонтрагент Тогда + + КонтрагентНеПодлежитПроверке = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентНеПодлежитПроверке"); + + Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагента = КонтрагентНеПодлежитПроверке; + ДанныеКонтрагента.Вставить("Состояние", КонтрагентНеПодлежитПроверке); + + Иначе + + // Предварительная проверка + НайденыОшибки = НайденыОшибкиВДанных(ДанныеКонтрагента, ДополнительныеПараметрыПроверки); + + // Сохранение результатов проверки + Если НайденыОшибки Тогда + + // Сохранение результата в реквизит. + Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагента = ДанныеКонтрагента.Состояние; + + КонецЕсли; + + КонецЕсли; + + Если НайденыОшибки ИЛИ ЭтоИностранныйКонтрагент Тогда + + // Сохранение результата в регистр. + // Вы эту ветку зайдет только если проверка выполняется на сервере. + Если ДополнительныеПараметрыПроверки.Свойство("СохранятьРезультатСразуПослеПроверки") + И ДополнительныеПараметрыПроверки.СохранятьРезультатСразуПослеПроверки Тогда + + ПроверкаКонтрагентовВызовСервера.ЗапомнитьРезультатПроверкиСправочникаПослеПредварительнойПроверки(ДанныеКонтрагента, ДополнительныеПараметрыПроверки); + + КонецЕсли; + + КонецЕсли; + + Возврат НайденыОшибки ИЛИ ЭтоИностранныйКонтрагент; + +КонецФункции + +Функция НайденыОшибкиВДанных(ДанныеКонтрагента, ДополнительныеПараметрыПроверки = Неопределено) Экспорт + + Если НЕ ДатаКорректная(ДанныеКонтрагента, ДополнительныеПараметрыПроверки) Тогда + Возврат Истина; + КонецЕсли; + + Если НайденыОшибкиВИНН(ДанныеКонтрагента, ДополнительныеПараметрыПроверки) Тогда + Возврат Истина; + КонецЕсли; + + Если НайденыОшибкиВКПП(ДанныеКонтрагента, ДополнительныеПараметрыПроверки) Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Функция НайденыОшибкиВИНН(ДанныеКонтрагента, ДополнительныеПараметрыПроверки = Неопределено) + + // Отчет не проверяется предварительной проверкой. + // Отчет проверяется веб-сервисом с целью увеличения скорости проверки. + ЭтоПроверкаОтчета = ТипЗнч(ДополнительныеПараметрыПроверки) = Тип("Структура") + И ДополнительныеПараметрыПроверки.Свойство("ЭтоПроверкаОтчета"); + + ЭтоЮридическоеЛицо = ДанныеКонтрагента.ЭтоЮридическоеЛицо = Истина ИЛИ НЕ ЗначениеЗаполнено(ДанныеКонтрагента.ЭтоЮридическоеЛицо); // Может быть незаполненным + + Если ИННИПустой(ДанныеКонтрагента, ЭтоЮридическоеЛицо, ДополнительныеПараметрыПроверки) Тогда + Возврат Истина; + КонецЕсли; + + Если НЕ ЭтоПроверкаОтчета И НевернаяДлинаИНН(ДанныеКонтрагента, ЭтоЮридическоеЛицо, ДополнительныеПараметрыПроверки) Тогда + Возврат Истина; + КонецЕсли; + + Если НЕ ЭтоПроверкаОтчета И ЕстьНедопустимыеСимволыВИНН(ДанныеКонтрагента, ДополнительныеПараметрыПроверки)Тогда + Возврат Истина; + КонецЕсли; + + Если НЕ ЭтоПроверкаОтчета И ИНННекорректный(ДанныеКонтрагента, ЭтоЮридическоеЛицо, ДополнительныеПараметрыПроверки) Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Функция НайденыОшибкиВКПП(ДанныеКонтрагента, ДополнительныеПараметрыПроверки = Неопределено) + + // Отчет не проверяется предварительной проверкой. + // Отчет проверяется веб-сервисом с целью увеличения скорости проверки. + ЭтоПроверкаОтчета = ТипЗнч(ДополнительныеПараметрыПроверки) = Тип("Структура") + И ДополнительныеПараметрыПроверки.Свойство("ЭтоПроверкаОтчета"); + + ЭтоЮридическоеЛицо = ДанныеКонтрагента.ЭтоЮридическоеЛицо = Истина ИЛИ НЕ ЗначениеЗаполнено(ДанныеКонтрагента.ЭтоЮридическоеЛицо); // Может быть незаполненным + + Если НЕ ЭтоПроверкаОтчета И ЭтоИПСКПП(ДанныеКонтрагента, ЭтоЮридическоеЛицо, ДополнительныеПараметрыПроверки) Тогда + Возврат Истина; + КонецЕсли; + + Если ЭтоЮридическоеЛицо И КПППустой(ДанныеКонтрагента, ЭтоЮридическоеЛицо, ДополнительныеПараметрыПроверки) Тогда + Возврат Истина; + КонецЕсли; + + Если НЕ ЭтоПроверкаОтчета И НевернаяДлинаКПП(ДанныеКонтрагента, ЭтоЮридическоеЛицо, ДополнительныеПараметрыПроверки) Тогда + Возврат Истина; + КонецЕсли; + + Если НЕ ЭтоПроверкаОтчета И ЕстьНедопустимыеСимволыВКПП(ДанныеКонтрагента, ЭтоЮридическоеЛицо, ДополнительныеПараметрыПроверки) Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Функция ДатаКорректная(ДанныеКонтрагента, ДополнительныеПараметрыПроверки = Неопределено) + + // Если в документе будущая дата, то проверяем на текущую, иначе документы + // с будущей датой подкрасятся красным, что не верно. + ЭтоПроверкаДокумента = ТипЗнч(ДополнительныеПараметрыПроверки) = Тип("Структура") + И ДополнительныеПараметрыПроверки.Свойство("ЭтоПроверкаДокумента"); + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + ТекущаяДата = ТекущаяДатаСеанса(); +#Иначе + ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); +#КонецЕсли + + Если Не ЗначениеЗаполнено(ДанныеКонтрагента.Дата) + ИЛИ ЭтоПроверкаДокумента И ДанныеКонтрагента.Дата > КонецДня(ТекущаяДата) Тогда + ДанныеКонтрагента.Дата = НачалоДня(ТекущаяДата); + ИначеЕсли ТипЗнч(ДанныеКонтрагента.Дата) = Тип("Дата") + И (ДанныеКонтрагента.Дата < Дата(1991, 1, 1) ИЛИ ДанныеКонтрагента.Дата > КонецДня(ТекущаяДата)) Тогда + ДанныеКонтрагента.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.НевернаяДата"); + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Процедура ПроверитьКонтрагентаИзКарточки(Форма, СохранятьРезультатСразуПослеПроверки) Экспорт СвойстваСправочникаКонтрагенты = СвойстваСправочникаКонтрагенты(); @@ -473,18 +709,22 @@ ИНН = КонтрагентОбъект[СвойстваСправочникаКонтрагенты.ИНН]; КПП = КонтрагентОбъект[СвойстваСправочникаКонтрагенты.КПП]; - Форма.РеквизитыПроверкиКонтрагентов.АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, Форма.УникальныйИдентификатор); - Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустаяСсылка"); - Форма.РеквизитыПроверкиКонтрагентов.ФоновоеЗаданиеЗапущено = Истина; + Форма.РеквизитыПроверкиКонтрагентов.АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, Форма.УникальныйИдентификатор); + Форма.РеквизитыПроверкиКонтрагентов.СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустаяСсылка"); + Форма.РеквизитыПроверкиКонтрагентов.ФоновоеЗаданиеЗапущено = Истина; // Запуск фонового задания для проверки контрагента. ПараметрыЗапуска = Новый Структура; - ПараметрыЗапуска.Вставить("Контрагент", КонтрагентСсылка); - ПараметрыЗапуска.Вставить("ИНН", ИНН); - ПараметрыЗапуска.Вставить("КПП", КПП); - ПараметрыЗапуска.Вставить("СохранятьРезультатСразуПослеПроверки", ТипЗнч(ДополнительныеПараметры) = Тип("Булево") И ДополнительныеПараметры); - ПараметрыЗапуска.Вставить("АдресХранилища", Форма.РеквизитыПроверкиКонтрагентов.АдресХранилища); - ПараметрыЗапуска.Вставить("ДополнительныеПараметры", Новый Структура); + ПараметрыЗапуска.Вставить("Контрагент", КонтрагентСсылка); + ПараметрыЗапуска.Вставить("ИНН", ИНН); + ПараметрыЗапуска.Вставить("КПП", КПП); + ПараметрыЗапуска.Вставить("АдресХранилища", Форма.РеквизитыПроверкиКонтрагентов.АдресХранилища); + ПараметрыЗапуска.Вставить("ДополнительныеПараметры", Новый Структура); + ПараметрыЗапуска.Вставить("СохранятьРезультатСразуПослеПроверки", СохранятьРезультатСразуПослеПроверки); + ПараметрыЗапуска.Вставить("ВыполнятьПредварительнуюПроверкуКонтрагента", + Форма.РеквизитыПроверкиКонтрагентов.ВыполнятьПредварительнуюПроверкуКонтрагента); + ПараметрыЗапуска.Вставить("ЭтоЮридическоеЛицо", Форма.РеквизитыПроверкиКонтрагентов.ЭтоЮридическоеЛицо); + ПараметрыЗапуска.Вставить("ЭтоИностранныйКонтрагент", Форма.РеквизитыПроверкиКонтрагентов.ЭтоИностранныйКонтрагент); РаботаСКонтрагентамиКлиентСерверПереопределяемый.ДополнитьПараметрыЗапускаФоновогоЗадания(ПараметрыЗапуска.ДополнительныеПараметры, Форма); @@ -511,8 +751,9 @@ Результат = ""; - Если ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоСостояниеНедействующегоКонтрагента(СостояниеКонтрагента, Ложь, Ложь) - ИЛИ ПроверкаКонтрагентовКлиентСерверПовтИсп.ЭтоСостояниеДействующегоКонтрагента(СостояниеКонтрагента, Ложь, Ложь) Тогда + Если СостояниеКонтрагента <> ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных") + И СостояниеКонтрагента <> ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентНеПодлежитПроверке") + И СостояниеКонтрагента <> ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустойИННИлиКПП") Тогда ЦветТекста = ЦветНадписиРезультатаПроверкиПоСостояниюКонтрагента(СостояниеКонтрагента); СтрокаСРезультатом = СтрокаСРезультатомПроверкиКонтрагента(Форма); @@ -563,15 +804,131 @@ Если СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.НеДействуетИлиИзмененКПП") Тогда ЦветТекста = Цвета.ЦветТекстаКонтрагентаПрекратившегоДеятельность; - ИначеЕсли СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентОтсутствуетВБазеФНС") - ИЛИ СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КППНеСоответствуетДаннымБазыФНС") Тогда - ЦветТекста = Цвета.ЦветТекстаНекорректногоКонтрагента; ИначеЕсли СостояниеКонтрагента = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентЕстьВБазеФНС") Тогда ЦветТекста = Цвета.ЦветТекстаКонтрагентаДействующего; + Иначе + ЦветТекста = Цвета.ЦветТекстаНекорректногоКонтрагента; КонецЕсли; Возврат ЦветТекста; КонецФункции +Функция ИНННекорректный(ДанныеКонтрагента, ЭтоЮридическоеЛицо, ДополнительныеПараметрыПроверки = Неопределено) + + Ошибка = ""; + + ИННСоответствуетТребованиям = РегламентированныеДанныеКлиентСервер.ИННСоответствуетТребованиям(ДанныеКонтрагента.ИНН, ЭтоЮридическоеЛицо, Ошибка); + Если НЕ ИННСоответствуетТребованиям Тогда + + ДанныеКонтрагента.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.НеверныйИНН"); + Возврат Истина; + + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Функция ЕстьНедопустимыеСимволыВИНН(ДанныеКонтрагента, ДополнительныеПараметрыПроверки = Неопределено) + + Если НЕ СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(ДанныеКонтрагента.ИНН) Тогда + ДанныеКонтрагента.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.НедопустимыеСимволыВИНН"); + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Функция ЕстьНедопустимыеСимволыВКПП(ДанныеКонтрагента, ЭтоЮридическоеЛицо, ДополнительныеПараметрыПроверки = Неопределено) + + Ошибка = ""; + + Если ЭтоЮридическоеЛицо Тогда + + КППСоответствуетТребованиям = РегламентированныеДанныеКлиентСервер.КППСоответствуетТребованиям(ДанныеКонтрагента.КПП, Ошибка); + Если НЕ КППСоответствуетТребованиям Тогда + ДанныеКонтрагента.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.НедопустимыеСимволыВКПП"); + Возврат Истина; + КонецЕсли; + + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Функция НевернаяДлинаИНН(ДанныеКонтрагента, ЭтоЮридическоеЛицо, ДополнительныеПараметрыПроверки = Неопределено) + + ДлинаИНН = СтрДлина(СокрЛП(ДанныеКонтрагента.ИНН)); + + Если ЭтоЮридическоеЛицо И ДлинаИНН <> 10 + ИЛИ НЕ ЭтоЮридическоеЛицо И ДлинаИНН <> 12 Тогда + + ДанныеКонтрагента.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.НевернаяДлинаИНН"); + Возврат Истина; + + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Функция НевернаяДлинаКПП(ДанныеКонтрагента, ЭтоЮридическоеЛицо, ДополнительныеПараметрыПроверки = Неопределено) + + ДлинаКПП = СтрДлина(СокрЛП(ДанныеКонтрагента.КПП)); + + Если ЭтоЮридическоеЛицо И ДлинаКПП <> 9 Тогда + + ДанныеКонтрагента.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.НевернаяДлинаКПП"); + Возврат Истина; + + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Функция ЭтоИПСКПП(ДанныеКонтрагента, ЭтоЮридическоеЛицо, ДополнительныеПараметрыПроверки = Неопределено) + + ДлинаКПП = СтрДлина(СокрЛП(ДанныеКонтрагента.КПП)); + + Если НЕ ЭтоЮридическоеЛицо И ДлинаКПП <> 0 Тогда + + ДанныеКонтрагента.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ИПНеМожетИметьКПП"); + Возврат Истина; + + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Функция ИННИПустой(ДанныеКонтрагента, ЭтоЮридическоеЛицо, ДополнительныеПараметрыПроверки = Неопределено) + + ДлинаИНН = СтрДлина(СокрЛП(ДанныеКонтрагента.ИНН)); + + Если ДлинаИНН = 0 Тогда + ДанныеКонтрагента.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустойИННИлиКПП"); + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Функция КПППустой(ДанныеКонтрагента, ЭтоЮридическоеЛицо, ДополнительныеПараметрыПроверки = Неопределено) + + ДлинаКПП = СтрДлина(СокрЛП(ДанныеКонтрагента.КПП)); + + Если ЭтоЮридическоеЛицо И ДлинаКПП = 0 Тогда + ДанныеКонтрагента.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ПустойИННИлиКПП"); + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ПроверкаКонтрагентовКлиентСерверПовтИсп/Module.bsl b/SSL/src/CommonModules/ПроверкаКонтрагентовКлиентСерверПовтИсп/Module.bsl index 122caeee5..29e450655 100644 --- a/SSL/src/CommonModules/ПроверкаКонтрагентовКлиентСерверПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ПроверкаКонтрагентовКлиентСерверПовтИсп/Module.bsl @@ -5,7 +5,7 @@ #Область ПрограммныйИнтерфейс -// Функция - Определение по состоянию, является ли контрагент действующим. +// Определение по состоянию, является ли контрагент действующим. // // Параметры: // Состояние - Перечисления.СостоянияСуществованияКонтрагента - Состояние контрагента. @@ -16,13 +16,13 @@ // Функция ЭтоСостояниеДействующегоКонтрагента(Состояние, ДополнятьСостояниемСОшибкой = Истина, ДополнятьПустымСостоянием = Истина) Экспорт - СостоянияДействующегоКонтрагента = ПроверкаКонтрагентовКлиентСерверПовтИсп.СостоянияДействующегоКонтрагента( + Состояния = ПроверкаКонтрагентовКлиентСерверПовтИсп.СостоянияДействующегоКонтрагента( ДополнятьСостояниемСОшибкой, ДополнятьПустымСостоянием); - Возврат СостоянияДействующегоКонтрагента.Найти(Состояние) <> Неопределено; + Возврат Состояния.Найти(Состояние) <> Неопределено; КонецФункции -// Функция - Перечень состояний действующего контрагента. +// Перечень состояний действующего контрагента. // // Параметры: // ДополнятьСостояниемСОшибкой - Булево - Если Истина, то контрагент с ошибкой считается действующим. @@ -41,7 +41,7 @@ КонецФункции -// Функция - Определение по состоянию, является ли контрагент недействующим. +// Определение по состоянию, является ли контрагент недействующим. // // Параметры: // Состояние - Перечисления.СостоянияСуществованияКонтрагента - Состояние контрагента. @@ -52,13 +52,13 @@ // Функция ЭтоСостояниеНедействующегоКонтрагента(Состояние, ДополнятьСостояниемСОшибкой = Ложь, ДополнятьПустымСостоянием = Ложь) Экспорт - СостоянияНедействующегоКонтрагента = ПроверкаКонтрагентовКлиентСерверПовтИсп.СостоянияНедействующегоКонтрагента( + Состояния = ПроверкаКонтрагентовКлиентСерверПовтИсп.СостоянияНедействующегоКонтрагента( ДополнятьСостояниемСОшибкой, ДополнятьПустымСостоянием); - Возврат СостоянияНедействующегоКонтрагента.Найти(Состояние) <> Неопределено; + Возврат Состояния.Найти(Состояние) <> Неопределено; КонецФункции -// Функция - Перечень состояний недействующего контрагента. +// Перечень состояний недействующего контрагента. // // Параметры: // ДополнятьСостояниемСОшибкой - Булево - Если Истина, то контрагент с ошибкой считается действующим. @@ -78,7 +78,69 @@ КонецФункции -// Функция - Ссылка на инструкцию по проверке контрагентов. +// Определение по состоянию, имеет ли контрагент ошибки в данных. +// +// Параметры: +// Состояние - Перечисления.СостоянияСуществованияКонтрагента - Состояние контрагента. +// +// Возвращаемое значение: +// Булево - Имеет ли контрагент ошибки. +// +Функция ЭтоСостояниеКонтрагентаСОшибкой(Состояние) Экспорт + + Состояния = ПроверкаКонтрагентовКлиентСерверПовтИсп.СостоянияКонтрагентаСОшибкой(); + Возврат Состояния.Найти(Состояние) <> Неопределено; + +КонецФункции + +// Перечень состояний контрагента с ошибками в данных. +// +// Возвращаемое значение: +// Массив - Состояния контрагента, при которых он имеет ошибки в данных. +// +Функция СостоянияКонтрагентаСОшибкой() Экспорт + + Возврат ВсеОшибочныеСостоянияКонтрагента(); + +КонецФункции + +// Перечень недействующих состояний и состояний с ошибками. +// +// Возвращаемое значение: +// Массив - Состояния контрагента, при которых он имеет ошибки в данных. +// +Функция НекорректныеСостоянияКонтрагента() Экспорт + + МассивСостояний = Новый Массив; + + Состояния = ПроверкаКонтрагентовКлиентСерверПовтИсп.СостоянияНедействующегоКонтрагента(Истина); + Для каждого Состояние Из Состояния Цикл + МассивСостояний.Добавить(Состояние); + КонецЦикла; + + Состояния = ПроверкаКонтрагентовКлиентСерверПовтИсп.СостоянияКонтрагентаСОшибкой(); + Для каждого Состояние Из Состояния Цикл + МассивСостояний.Добавить(Состояние); + КонецЦикла; + + Возврат МассивСостояний; + +КонецФункции + +// Является ли состояние некорректным (недействующее состояние или с ошибкой). +// +// Возвращаемое значение: +// Булево - Имеет ли контрагент ошибки. +// +Функция ЭтоНекорректноеСостояниеКонтрагента(Состояние) Экспорт + + Состояния = ПроверкаКонтрагентовКлиентСерверПовтИсп.НекорректныеСостоянияКонтрагента(); + Возврат Состояния.Найти(Состояние) <> Неопределено; + +КонецФункции + + +// Ссылка на инструкцию по проверке контрагентов. // Возвращаемое значение: // ФорматированнаяСтрока - Ссылка на инструкцию. // @@ -86,7 +148,7 @@ Возврат Новый ФорматированнаяСтрока(НСтр("ru = 'Подробнее о проверке'"),,,, ПутьКИнструкции()); КонецФункции -// Функция - Путь к инструкции по проверке контрагентов. +// Путь к инструкции по проверке контрагентов. // Возвращаемое значение: // Строка - Путь к инструкции по проверке контрагентов. // @@ -109,4 +171,24 @@ КонецПроцедуры +Функция ВсеОшибочныеСостоянияКонтрагента(НевернуюДатуСчитатьОшибкой = Истина) Экспорт + + МассивСостояний = Новый Массив; + МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.КонтрагентСодержитОшибкиВДанных")); + МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.НеверныйИНН")); + МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.НевернаяДлинаИНН")); + МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.НевернаяДлинаКПП")); + МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.НедопустимыеСимволыВИНН")); + МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.НедопустимыеСимволыВКПП")); + МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.ИПНеМожетИметьКПП")); + + Если НевернуюДатуСчитатьОшибкой Тогда + МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.НекорректныйФорматДаты")); + МассивСостояний.Добавить(ПредопределенноеЗначение("Перечисление.СостоянияСуществованияКонтрагента.НевернаяДата")); + КонецЕсли; + + Возврат МассивСостояний; + +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl b/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl index 2185becce..58f6ffb1e 100644 --- a/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl @@ -20,6 +20,7 @@ Процедура ПоказатьПроверкуЛегальностиПолученияОбновления(Оповещение, ЗавершатьРаботуСистемы = Ложь) Экспорт Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ЭтоБазоваяВерсияКонфигурации Тогда + ВыполнитьОбработкуОповещения(Оповещение, Истина); Возврат; КонецЕсли; diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежиме/Module.bsl b/SSL/src/CommonModules/РаботаВБезопасномРежиме/Module.bsl index 0f8bfeea8..76cdec065 100644 --- a/SSL/src/CommonModules/РаботаВБезопасномРежиме/Module.bsl +++ b/SSL/src/CommonModules/РаботаВБезопасномРежиме/Module.bsl @@ -153,7 +153,7 @@ // // Параметры: // Имя - Строка - имя расширения конфигурации, -// КонтрольнаяСумма - Строка - контрольная сумма расширения конфигурации +// КонтрольнаяСумма - Строка - контрольная сумма расширения конфигурации. // // Возвращаемое значение: // ОбъектXDTO - внутреннее описание запрашиваемого разрешения. @@ -605,7 +605,7 @@ ВременнаяСтруктура = Новый Структура; Попытка // Проверка того, что ИмяМетодаОбъекта является допустимым идентификатором. - // Например: МояПроцедура + // Например: МояПроцедура. ВременнаяСтруктура.Вставить(ИмяМетодаОбъекта); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Безопасное выполнение метода'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), @@ -737,6 +737,46 @@ #КонецОбласти +#Область ПрограммныйИнтерфейс + +// Проверяет возможность выполнения обработчиков установки параметров сеанса без установки безопасного режима. +// +// Возвращаемое значение: Булево. +// +Функция ВозможноВыполнениеОбработчиковУстановкиПараметровСеансаБезУстановкиБезопасногоРежима() Экспорт + + Попытка + + Результат = Вычислить("ДоступенПереходВПривилегированныйРежим()"); + Возврат Результат; + + Исключение + + ШаблонЗаписиЖР = НСтр("ru = 'При установке параметров сеанса произошла ошибка: + | + |-------------------------------------------------------------------------------------------- + |%1 + |-------------------------------------------------------------------------------------------- + | + |Запуск программы будет невозможен.'"); + + ТекстЗаписиЖР = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаписиЖР, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Установка параметров сеанса'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + ТекстЗаписиЖР); + + Возврат Ложь; + + КонецПопытки; + +КонецФункции + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Возвращает менеджер объекта по имени. @@ -869,42 +909,6 @@ КонецФункции -// Проверяет возможность выполнения обработчиков установки параметров сеанса без установки безопасного режима. -// -// Возвращаемое значение: Булево. -// -Функция ВозможноВыполнениеОбработчиковУстановкиПараметровСеансаБезУстановкиБезопасногоРежима() Экспорт - - Попытка - - Результат = Вычислить("ДоступенПереходВПривилегированныйРежим()"); - Возврат Результат; - - Исключение - - ШаблонЗаписиЖР = НСтр("ru = 'При установке параметров сеанса произошла ошибка: - | - |-------------------------------------------------------------------------------------------- - |%1 - |-------------------------------------------------------------------------------------------- - | - |Запуск программы будет невозможен.'"); - - ТекстЗаписиЖР = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаписиЖР, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Установка параметров сеанса'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка, - , - , - ТекстЗаписиЖР); - - Возврат Ложь; - - КонецПопытки; - -КонецФункции - // Проверяет возможность перехода в привилегированный режим из текущего безопасного режима. // // Возвращаемое значение: Булево. diff --git a/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl index 018ffc6ab..359563c44 100644 --- a/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаВБезопасномРежимеСлужебный/Module.bsl @@ -5,7 +5,74 @@ // //////////////////////////////////////////////////////////////////////////////// -#Область СлужебныеПроцедурыИФункции +#Область СлужебныйПрограммныйИнтерфейс + +// Создает запрос на создание профиля безопасности для внешнего модуля. +// Только для внутреннего использования. +// +// Параметры: +// ВнешнийМодуль - ЛюбаяСсылка - ссылка, соответствующая внешнему модулю, для которого запрашиваются +// разрешения. (Неопределено при запросе разрешений для конфигурации, а не для внешних модулей). +// +// Возвращаемое значение - УникальныйИдентификатор - идентификатор созданного запроса. +// +Функция ЗапросСозданияПрофиляБезопасности(Знач ПрограммныйМодуль) Экспорт + + СтандартнаяОбработка = Истина; + Результат = Неопределено; + Операция = Перечисления.ОперацииАдминистрированияПрофилейБезопасности.Создание; + + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриЗапросеСозданияПрофиляБезопасности"); + Для Каждого Обработчик Из ОбработчикиСобытия Цикл + + Обработчик.Модуль.ПриЗапросеСозданияПрофиляБезопасности( + ПрограммныйМодуль, СтандартнаяОбработка, Результат); + + Если Не СтандартнаяОбработка Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + Если СтандартнаяОбработка Тогда + РаботаВБезопасномРежимеПереопределяемый.ПриЗапросеСозданияПрофиляБезопасности( + ПрограммныйМодуль, СтандартнаяОбработка, Результат); + КонецЕсли; + + Если СтандартнаяОбработка Тогда + + Результат = РегистрыСведений.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.ЗапросАдминистрированияРазрешений( + ПрограммныйМодуль, Операция); + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +//////////////////////////////////////////////////////////////////////////////// +// Внешние модули +// + +// Возвращает режим подключения внешнего модуля. +// +// Параметры: +// ВнешнийМодуль - ЛюбаяСсылка, ссылка, соответствующая внешнему модулю, для которого запрашиваются +// режим подключения. +// +// Возвращаемое значение: Строка - имя профиля безопасности, который должен использоваться для подключения +// внешнего модуля. Если для внешнего модуля не зарегистрирован режим подключения - возвращается Неопределено. +// +Функция РежимПодключенияВнешнегоМодуля(Знач ВнешнийМодуль) Экспорт + + Возврат РегистрыСведений.РежимыПодключенияВнешнихМодулей.РежимПодключенияВнешнегоМодуля(ВнешнийМодуль); + +КонецФункции //////////////////////////////////////////////////////////////////////////////// // Использование профилей безопасности. @@ -22,6 +89,61 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Создание запросов разрешений. +// + +// Создает запросы на использование внешних ресурсов для внешнего модуля. +// +// Параметры: +// ВнешнийМодуль - ЛюбаяСсылка - ссылка, соответствующая внешнему модулю, для которого запрашиваются разрешения, +// НовыеРазрешения - Массив(ОбъектXDTO) - массив ОбъектовXDTO, соответствующих внутренним описаниям +// запрашиваемых разрешений на доступ к внешним ресурсам. Предполагается, что все ОбъектыXDTO, передаваемые +// в качестве параметра, сформированы с помощью вызова функций РаботаВБезопасномРежиме.Разрешение*(). +// При запросе разрешений для внешних модулей добавление разрешений всегда выполняется в режиме замещения. +// +// Возвращаемое значение - Массив(УникальныйИдентификатор) - идентификаторы созданных запросов. +// +Функция ЗапросРазрешенийДляВнешнегоМодуля(Знач ПрограммныйМодуль, Знач НовыеРазрешения = Неопределено) Экспорт + + Результат = Новый Массив(); + + Если НовыеРазрешения = Неопределено Тогда + НовыеРазрешения = Новый Массив(); + КонецЕсли; + + Если НовыеРазрешения.Количество() > 0 Тогда + + // Если профиля безопасности еще нет - его требуется создать. + Если РежимПодключенияВнешнегоМодуля(ПрограммныйМодуль) = Неопределено Тогда + Результат.Добавить(ЗапросСозданияПрофиляБезопасности(ПрограммныйМодуль)); + КонецЕсли; + + Результат.Добавить( + ЗапросИзмененияРазрешений( + ПрограммныйМодуль, Истина, НовыеРазрешения, Неопределено, ПрограммныйМодуль)); + + Иначе + + // Если профиль безопасности есть - его требуется удалить. + Если РежимПодключенияВнешнегоМодуля(ПрограммныйМодуль) <> Неопределено Тогда + Результат.Добавить(ЗапросУдаленияПрофиляБезопасности(ПрограммныйМодуль)); + КонецЕсли; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +//////////////////////////////////////////////////////////////////////////////// +// Использование профилей безопасности. +// + // Проверяет возможность использования профилей безопасности для текущей информационной базы. // // Возвращаемое значение: Булево. @@ -133,7 +255,7 @@ Если Макет = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось сформировать разрешение на использование внешней компоненты, - |поставляемой в макете %1: макет %1 не обнаружден в составе конфигурации!'"), ИмяМакета); + |поставляемой в макете %1: макет %1 не обнаружен в составе конфигурации!'"), ИмяМакета); КонецЕсли; Если Метаданные.НайтиПоПолномуИмени(ИмяМакета).ТипМакета <> Метаданные.СвойстваОбъектов.ТипМакета.ДвоичныеДанные Тогда @@ -331,93 +453,6 @@ КонецФункции -// Создает запросы на использование внешних ресурсов для внешнего модуля. -// -// Параметры: -// ВнешнийМодуль - ЛюбаяСсылка - ссылка, соответствующая внешнему модулю, для которого запрашиваются разрешения, -// НовыеРазрешения - Массив(ОбъектXDTO) - массив ОбъектовXDTO, соответствующих внутренним описаниям -// запрашиваемых разрешений на доступ к внешним ресурсам. Предполагается, что все ОбъектыXDTO, передаваемые -// в качестве параметра, сформированы с помощью вызова функций РаботаВБезопасномРежиме.Разрешение*(). -// При запросе разрешений для внешних модулей добавление разрешений всегда выполняется в режиме замещения. -// -// Возвращаемое значение - Массив(УникальныйИдентификатор) - идентификаторы созданных запросов. -// -Функция ЗапросРазрешенийДляВнешнегоМодуля(Знач ПрограммныйМодуль, Знач НовыеРазрешения = Неопределено) Экспорт - - Результат = Новый Массив(); - - Если НовыеРазрешения = Неопределено Тогда - НовыеРазрешения = Новый Массив(); - КонецЕсли; - - Если НовыеРазрешения.Количество() > 0 Тогда - - // Если профиля безопасности еще нет - его требуется создать. - Если РежимПодключенияВнешнегоМодуля(ПрограммныйМодуль) = Неопределено Тогда - Результат.Добавить(ЗапросСозданияПрофиляБезопасности(ПрограммныйМодуль)); - КонецЕсли; - - Результат.Добавить( - ЗапросИзмененияРазрешений( - ПрограммныйМодуль, Истина, НовыеРазрешения, Неопределено, ПрограммныйМодуль)); - - Иначе - - // Если профиль безопасности есть - его требуется удалить. - Если РежимПодключенияВнешнегоМодуля(ПрограммныйМодуль) <> Неопределено Тогда - Результат.Добавить(ЗапросУдаленияПрофиляБезопасности(ПрограммныйМодуль)); - КонецЕсли; - - КонецЕсли; - - Возврат Результат; - -КонецФункции - -// Создает запрос на создание профиля безопасности для внешнего модуля. -// Только для внутреннего использования. -// -// Параметры: -// ВнешнийМодуль - ЛюбаяСсылка - ссылка, соответствующая внешнему модулю, для которого запрашиваются -// разрешения. (Неопределено при запросе разрешений для конфигурации, а не для внешних модулей). -// -// Возвращаемое значение - УникальныйИдентификатор - идентификатор созданного запроса. -// -Функция ЗапросСозданияПрофиляБезопасности(Знач ПрограммныйМодуль) Экспорт - - СтандартнаяОбработка = Истина; - Результат = Неопределено; - Операция = Перечисления.ОперацииАдминистрированияПрофилейБезопасности.Создание; - - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.БазоваяФункциональность\ПриЗапросеСозданияПрофиляБезопасности"); - Для Каждого Обработчик Из ОбработчикиСобытия Цикл - - Обработчик.Модуль.ПриЗапросеСозданияПрофиляБезопасности( - ПрограммныйМодуль, СтандартнаяОбработка, Результат); - - Если Не СтандартнаяОбработка Тогда - Прервать; - КонецЕсли; - - КонецЦикла; - - Если СтандартнаяОбработка Тогда - РаботаВБезопасномРежимеПереопределяемый.ПриЗапросеСозданияПрофиляБезопасности( - ПрограммныйМодуль, СтандартнаяОбработка, Результат); - КонецЕсли; - - Если СтандартнаяОбработка Тогда - - Результат = РегистрыСведений.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.ЗапросАдминистрированияРазрешений( - ПрограммныйМодуль, Операция); - - КонецЕсли; - - Возврат Результат; - -КонецФункции - // Создает запрос на удаление профиля безопасности для внешнего модуля. // Только для внутреннего использования. // @@ -543,21 +578,6 @@ // Внешние модули // -// Возвращает режим подключения внешнего модуля. -// -// Параметры: -// ВнешнийМодуль - ЛюбаяСсылка, ссылка, соответствующая внешнему модулю, для которого запрашиваются -// режим подключения. -// -// Возвращаемое значение: Строка - имя профиля безопасности, который должен использоваться для подключения -// внешнего модуля. Если для внешнего модуля не зарегистрирован режим подключения - возвращается Неопределено. -// -Функция РежимПодключенияВнешнегоМодуля(Знач ВнешнийМодуль) Экспорт - - Возврат РегистрыСведений.РежимыПодключенияВнешнихМодулей.РежимПодключенияВнешнегоМодуля(ВнешнийМодуль); - -КонецФункции - // Возвращает программный модуль, выполняющий функции менеджера внешнего модуля. // // ВнешнийМодуль - ЛюбаяСсылка, ссылка, соответствующая внешнему модулю, для которого запрашиваются @@ -638,12 +658,26 @@ // Содержит настройки размещения вариантов отчетов в панели отчетов. // // Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// Настройки - Коллекция - Содержит настройки всех отчетов и вариантов конфигурации. +// Используется для передачи в параметрах вспомогательных методов. // // Описание: // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // +// Вспомогательные методы: +// 1. Функции ОписаниеОтчета и ОписаниеВарианта формируют описание настроек отчета и варианта для последующего изменения: +// НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.<ИмяОтчета>); +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// Возвращаемые коллекции содержат одинаковый набор свойств. +// НастройкиОтчета используются как умолчания для вариантов, описания которых еще не получены. +// Подробнее - см. "свойства для изменения" в комментарии к ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// 2. Процедура УстановитьРежимВыводаВПанеляхОтчетов позволяет настроить режим группировки вариантов в панелях отчетов: +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Отчеты.<ИмяОтчета>, Истина/Ложь); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Подсистемы.<ИмяПодсистемы>, Истина/Ложь); +// 3. Процедура НастроитьОтчетВМодулеМенеджера позволяет переопределять настройки отчета в его модуле менеджера: +// ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.<ИмяОтчета>); +// Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ИспользуемыеВнешниеРесурсы); diff --git a/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl index 77137536a..49b91ed1d 100644 --- a/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl @@ -107,6 +107,8 @@ Если КонфликтующиеСеансы.Количество() > 0 Тогда + РазблокироватьДанныеДляРедактирования(Ключ); + ТекстСеансы = ""; Для Каждого КонфликтующийСеанс Из КонфликтующиеСеансы Цикл @@ -255,7 +257,9 @@ Попытка МенеджерЗаписи = ПолучитьМенеджерЗаписиОбластиДанных(ОбластьДанных, Перечисления.СтатусыОбластейДанных.Новая); - Если ТекущийРежимЗапуска() <> Неопределено Тогда + // Список пользователей не пустой и не фоновое задание из регламентного. + // В этом случае требуется авторизовать пользователя. + Если ПользователиИнформационнойБазы.ТекущийПользователь().Имя <> "" Тогда ПользователиСлужебный.АвторизоватьТекущегоПользователя(); @@ -313,8 +317,6 @@ МодульВыгрузкаЗагрузкаОбластейДанных = ОбщегоНазначения.ОбщийМодуль("ВыгрузкаЗагрузкаОбластейДанных"); - НачатьТранзакцию(); - Попытка ИмяФайлаВыгрузки = МодульВыгрузкаЗагрузкаОбластейДанных.ВыгрузитьТекущуюОбластьДанныхВАрхив(); Исключение @@ -331,7 +333,7 @@ ВызватьИсключение; КонецПопытки; - ОбщегоНазначения.УстановитьРазделениеСеанса(, ОбластьПриемник); + ОбщегоНазначения.УстановитьРазделениеСеанса(Неопределено, ОбластьПриемник); Попытка МодульВыгрузкаЗагрузкаОбластейДанных.ЗагрузитьТекущуюОбластьДанныхИзАрхива(ИмяФайлаВыгрузки); @@ -501,21 +503,81 @@ ИначеЕсли ЭтоПолноеИмяРегистра(ПолноеИмяОбъектаМетаданных) ИЛИ ЭтоПолноеИмяПерерасчета(ПолноеИмяОбъектаМетаданных) Тогда + ЭтоРегистрНакопления = ЭтоПолноеИмяРегистраНакопления(ПолноеИмяОбъектаМетаданных); + ЭтоРегистрБухгалтерии = ЭтоПолноеИмяРегистраБухгалтерии(ПолноеИмяОбъектаМетаданных); ЭтоРегистрСведений = ЭтоПолноеИмяРегистраСведений(ПолноеИмяОбъектаМетаданных); - Если ЭтоРегистрСведений Тогда + Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяОбъектаМетаданных); + + ЭтоНезависимыйРегистрСведений = Ложь; + + Если ЭтоРегистрНакопления Тогда - ОбъектМетаданныхОбласти = Метаданные.РегистрыСведений.Найти(ОписаниеОбъектаМетаданных.Имя); - ЭтоНезависимыйРегистрСведений = (ОбъектМетаданныхОбласти.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый); + РегистрМетаданные = Метаданные.РегистрыНакопления.Найти(ОписаниеОбъектаМетаданных.Имя); - Иначе + Если РегистрМетаданные.ВидРегистра = Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Остатки Тогда + + Если Менеджер.ПолучитьМинимальныйПериодРассчитанныхИтогов() <> '00010101' + ИЛИ Менеджер.ПолучитьМаксимальныйПериодРассчитанныхИтогов() <> КонецМесяца('00010101') Тогда + + Менеджер.УстановитьМинимальныйИМаксимальныйПериодыРассчитанныхИтогов('00010101', '00010101'); + + КонецЕсли; + + Если Менеджер.ПолучитьИспользованиеТекущихИтогов() Тогда + + Менеджер.УстановитьИспользованиеТекущихИтогов(Ложь); + + КонецЕсли; + + Если Менеджер.ПолучитьИспользованиеИтогов() Тогда + + Менеджер.УстановитьИспользованиеИтогов(Ложь); + + КонецЕсли; + + КонецЕсли; - ЭтоНезависимыйРегистрСведений = Ложь; + ИначеЕсли ЭтоРегистрБухгалтерии Тогда + + Если Менеджер.ПолучитьМинимальныйПериодРассчитанныхИтогов() <> '00010101' + ИЛИ Менеджер.ПолучитьМаксимальныйПериодРассчитанныхИтогов() <> '00010101' Тогда + + Менеджер.УстановитьМинимальныйИМаксимальныйПериодыРассчитанныхИтогов('00010101', '00010101'); + + КонецЕсли; + + Если Менеджер.ПолучитьИспользованиеТекущихИтогов() Тогда + + Менеджер.УстановитьИспользованиеТекущихИтогов(Ложь); + + КонецЕсли; + + Если Менеджер.ПолучитьИспользованиеИтогов() Тогда + + Менеджер.УстановитьИспользованиеИтогов(Ложь); + + КонецЕсли; + + ИначеЕсли ЭтоРегистрСведений Тогда + + РегистрМетаданные = Метаданные.РегистрыСведений.Найти(ОписаниеОбъектаМетаданных.Имя); + + Если РегистрМетаданные.РазрешитьИтогиСрезПервых + ИЛИ РегистрМетаданные.РазрешитьИтогиСрезПоследних Тогда + + Если Менеджер.ПолучитьИспользованиеИтогов() Тогда + + Менеджер.УстановитьИспользованиеИтогов(Ложь); + + КонецЕсли; + + КонецЕсли; + + ЭтоНезависимыйРегистрСведений = (РегистрМетаданные.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый); КонецЕсли; - Менеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяОбъектаМетаданных); - Если ЭтоНезависимыйРегистрСведений Тогда НаборЗаписей = Менеджер.СоздатьНаборЗаписей(); @@ -1130,427 +1192,6 @@ КонецФункции -#КонецОбласти - -#Область СлужебныйПрограммныйИнтерфейс - -// Параметры: -// ЗаданиеМетаданные - ОбъектМетаданных - метаданные предопределенного регламентного задания. -// Использование - Булево - Истина, если задание нужно включить, иначе Ложь. -// -Процедура УстановитьИспользованиеПредопределенногоРегламентногоЗадания(ЗаданиеМетаданные, Использование) Экспорт - - Шаблон = ОчередьЗаданий.ШаблонПоИмени(ЗаданиеМетаданные.Имя); - - ОтборЗадания = Новый Структура; - ОтборЗадания.Вставить("Шаблон", Шаблон); - Задания = ОчередьЗаданий.ПолучитьЗадания(ОтборЗадания); - - ПараметрыЗадания = Новый Структура("Использование", Использование); - ОчередьЗаданий.ИзменитьЗадание(Задания[0].Идентификатор, ПараметрыЗадания); - -КонецПроцедуры - -// Проверяет возможность использования конфигурации в модели сервиса. -// При невозможности использования - генерируется исключение с указанием причины, -// из-за которой использование конфигурации в модели сервиса невозможно. -// -Процедура ПроверитьВозможностьИспользованияКонфигурацииВМоделиСервиса() Экспорт - - ОписанияПодсистем = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем().ПоИменам; - ОписаниеБТС = ОписанияПодсистем.Получить("БиблиотекаТехнологииСервиса"); - - Если ОписаниеБТС = Неопределено Тогда - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В конфигурацию не внедрена библиотека ""1С:Библиотека технологии сервиса"". - |Без внедрения этой библиотеки конфигурация не может использоваться в модели сервиса. - | - |Для использования этой конфигурации в модели сервиса требуется внедрить библиотеку - |""1С:Библиотека технологии сервиса"" версии не младше %1!'", Метаданные.ОсновнойЯзык.КодЯзыка), - ТребуемаяВерсияБТС()); - - Иначе - - ВерсияБТС = ОписаниеБТС.Версия; - - Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияБТС, ТребуемаяВерсияБТС()) < 0 Тогда - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для использования конфигурации в модели сервиса с текущей версией БСП требуется - |обновить используемую версию библиотеки ""1С:Библиотека технологии сервиса""! - | - |Используемая версия: %1, требуется версия не младше %2!'", Метаданные.ОсновнойЯзык.КодЯзыка), - ВерсияБТС, ТребуемаяВерсияБТС()); - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -// Вызывает исключение при отсутствии требуемой подсистемы из библиотеки технологии сервиса. -// -// Параметры: -// ИмяПодсистемы - Строка. -// -Процедура ВызватьИсключениеОтсутствуетПодсистемаБТС(Знач ИмяПодсистемы) Экспорт - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Невозможно выполнить операцию по причине - в конфигурации не внедрена подсистема ""%1"". - |Данная подсистема поставляется в состав библиотеки технологии сервиса, которая должна отдельно внедряться в состав конфигурации. - |Проверьте наличие и корректность внедрения подсистемы ""%1"".'"), - ИмяПодсистемы); - -КонецПроцедуры - -// Объявляет события подсистемы РаботаВМоделиСервиса: -// -// Серверные события: -// ПриУдаленииОбластиДанных, -// ПриПолученииТаблицыПараметровИБ, -// ПриУстановкеЗначенийПараметровИБ, -// ПриЗаполненииТаблицыПараметровИБ, -// ПриУстановкеПравПоУмолчанию, -// ПослеЗагрузкиДанныхИзДругойМодели. -// -// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. -Процедура ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия) Экспорт - - // СЕРВЕРНЫЕ СОБЫТИЯ. - - // Вызывается при удалении области данных. - // В процедуре необходимо удалить данные области данных, которые не - // могут быть удалены стандартным механизмом. - // - // Параметры: - // ОбластьДанных - Тип значения разделителя - значение разделителя - // удаляемой области данных. - // - // Синтаксис: - // Процедура ПриУдаленииОбластиДанных(Знач ОбластьДанных) Экспорт - // - // (То же, что РаботаВМоделиСервисаПереопределяемый.ПриУдаленииОбластиДанных). - // - СерверныеСобытия.Добавить( - "СтандартныеПодсистемы.РаботаВМоделиСервиса\ПриУдаленииОбластиДанных"); - - // Формирует список параметров ИБ. - // - // Параметры: - // ТаблицаПараметров - ТаблицаЗначений - таблица описания параметров. - // Описание состав колонок - см. РаботаВМоделиСервиса.ПолучитьТаблицуПараметровИБ(). - // - // Синтаксис: - // Процедура ПриПолученииТаблицыПараметровИБ(Знач ТаблицаПараметров) Экспорт - // - // (То же, что РаботаВМоделиСервисаПереопределяемый.ПолучитьТаблицуПараметровИБ). - // - СерверныеСобытия.Добавить( - "СтандартныеПодсистемы.РаботаВМоделиСервиса\ПриПолученииТаблицыПараметровИБ"); - - // Вызывается перед попыткой записи значений параметров ИБ в одноименные - // константы. - // - // Параметры: - // ЗначенияПараметров - Структура - значения параметров которые требуется установить. - // В случае если значение параметра устанавливается в данной процедуре из структуры - // необходимо удалить соответствующую пару КлючИЗначение. - // - // Синтаксис: - // Процедура ПриУстановкеЗначенийПараметровИБ(Знач ЗначенияПараметров) Экспорт - // - // (То же, что РаботаВМоделиСервисаПереопределяемый.ПриУстановкеЗначенийПараметровИБ). - // - СерверныеСобытия.Добавить( - "СтандартныеПодсистемы.РаботаВМоделиСервиса\ПриУстановкеЗначенийПараметровИБ"); - - // Формирует список параметров ИБ. - // - // Параметры: - // ТаблицаПараметров - ТаблицаЗначений - таблица описания параметров. - // Описание состав колонок - см. РаботаВМоделиСервиса.ПолучитьТаблицуПараметровИБ(). - // - // Синтаксис: - // Процедура ПриЗаполненииТаблицыПараметровИБ(Знач ТаблицаПараметров) Экспорт - // - // Для использования в других библиотеках. - // - // (То же, что РаботаВМоделиСервисаПереопределяемый.ПолучитьТаблицуПараметровИБ). - // - СерверныеСобытия.Добавить( - "СтандартныеПодсистемы.РаботаВМоделиСервиса\ПриЗаполненииТаблицыПараметровИБ"); - - // Устанавливает пользователю права по умолчанию. - // Вызывается при работе в модели сервиса, в случае обновления в менеджере - // сервиса прав пользователя без прав администрирования. - // - // Параметры: - // Пользователь - СправочникСсылка.Пользователи - пользователь, которому - // требуется установить права по умолчанию. - // - // Синтаксис: - // Процедура ПриУстановкеПравПоУмолчанию(Пользователь) Экспорт - // - // (То же, что РаботаВМоделиСервисаПереопределяемый.УстановитьПраваПоУмолчанию). - // - СерверныеСобытия.Добавить( - "СтандартныеПодсистемы.РаботаВМоделиСервиса\ПриУстановкеПравПоУмолчанию"); - - // Вызывается при определении псевдонима пользователя для отображения в интерфейсе. - // - // Параметры: - // ИдентификаторПользователя - УникальныйИдентификатор, - // Псевдоним - Строка, псевдоним пользователя. - // - // Синтаксис: - // Процедура ПриОпределенииПсевдонимаПользователя(ИдентификаторПользователя, Псевдоним) Экспорт - // - СерверныеСобытия.Добавить( - "СтандартныеПодсистемы.РаботаВМоделиСервиса\ПриОпределенииПсевдонимаПользователя"); - -КонецПроцедуры - -// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. -Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт - - // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные") Тогда - СерверныеОбработчики[ - "СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные\ПриОпределенииОбработчиковПоставляемыхДанных"].Добавить( - "РаботаВМоделиСервиса"); - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда - СерверныеОбработчики[ - "СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриОпределенииПсевдонимовОбработчиков"].Добавить( - "РаботаВМоделиСервиса"); - - СерверныеОбработчики[ - "СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриОпределенииИспользованияРегламентныхЗаданий"].Добавить( - "РаботаВМоделиСервиса"); - КонецЕсли; - - СерверныеОбработчики[ - "СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( - "РаботаВМоделиСервиса"); - - СерверныеОбработчики[ - "СтандартныеПодсистемы.БазоваяФункциональность\ПриВключенииРазделенияПоОбластямДанных"].Добавить( - "РаботаВМоделиСервиса"); - - СерверныеОбработчики[ - "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентаПриЗапуске"].Добавить( - "РаботаВМоделиСервиса"); - - СерверныеОбработчики[ - "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиента"].Добавить( - "РаботаВМоделиСервиса"); - - Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ВыгрузкаЗагрузкаДанных") Тогда - СерверныеОбработчики[ - "ТехнологияСервиса.ВыгрузкаЗагрузкаДанных\ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки"].Добавить( - "РаботаВМоделиСервиса"); - СерверныеОбработчики[ - "ТехнологияСервиса.ВыгрузкаЗагрузкаДанных\ПослеЗагрузкиДанных"].Добавить( - "РаботаВМоделиСервиса"); - КонецЕсли; - - СерверныеОбработчики[ - "СтандартныеПодсистемы.РаботаВМоделиСервиса\ПриУстановкеЗначенийПараметровИБ"].Добавить( - "РаботаВМоделиСервиса"); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов в эту подсистему. - -// Определяет заголовок общей формы "ИнформационныйЦентрРабочийСтол". -// -// Параметры: -// ЗаголовокФормы - Строка - заголовок формы. -// -Процедура ПриОпределенииЗаголовкаОсновнойФормыИнформационныйЦентр(ЗаголовокФормы) Экспорт - - ПолученныйЗаголовок = ПолучитьИмяПриложения(); - Если Не ПустаяСтрока(ПолученныйЗаголовок) Тогда - ЗаголовокФормы = ПолученныйЗаголовок; - КонецЕсли; - -КонецПроцедуры - -// Заполняет соответствие имен методов их псевдонимам для вызова из очереди заданий. -// -// Параметры: -// СоответствиеИменПсевдонимам - Соответствие -// Ключ - Псевдоним метода, например ОчиститьОбластьДанных. -// Значение - Имя метода для вызова, например РаботаВМоделиСервиса.ОчиститьОбластьДанных. -// В качестве значения можно указать Неопределено, в этом случае считается что имя -// совпадает с псевдонимом. -// -Процедура ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам) Экспорт - - СоответствиеИменПсевдонимам.Вставить("РаботаВМоделиСервиса.ПодготовитьОбластьДанныхКИспользованию"); - - СоответствиеИменПсевдонимам.Вставить("РаботаВМоделиСервиса.ОчиститьОбластьДанных"); - -КонецПроцедуры - -// Формирует таблицу регламентных заданий -// с признаком использования в модели сервиса. -// -// Параметры: -// ТаблицаИспользования - ТаблицаЗначений - таблица, которую необходимо -// заполнить регламентными заданиями и признаком использования, колонки: -// РегламентноеЗадание - Строка - имя предопределенного регламентного задания. -// Использование - Булево - Истина, если регламентное задание должно -// выполняться в модели сервиса. Ложь - если не должно. -// -Процедура ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования) Экспорт - - НоваяСтрока = ТаблицаИспользования.Добавить(); - НоваяСтрока.РегламентноеЗадание = "ОбслуживаниеОбластейДанных"; - НоваяСтрока.Использование = Истина; - -КонецПроцедуры - -/////////////////////////////////////////////////////////////////////////////// -// Проверка безопасного режима разделения данных. - -// Проверка безопасного режима разделения данных. -// Только для вызова из модуля сеанса. -// -Процедура ПриПроверкеВключенияБезопасногоРежимаРазделенияДанных() Экспорт - - Если БезопасныйРежим() = Ложь - И ОбщегоНазначенияПовтИсп.РазделениеВключено() - И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() - И НЕ ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() Тогда - - Если НЕ БезопасныйРежимРазделенияДанных(РазделительВспомогательныхДанных()) Тогда - - УстановитьБезопасныйРежимРазделенияДанных(РазделительВспомогательныхДанных(), Истина); - - КонецЕсли; - - Если НЕ БезопасныйРежимРазделенияДанных(РазделительОсновныхДанных()) Тогда - - УстановитьБезопасныйРежимРазделенияДанных(РазделительОсновныхДанных(), Истина); - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -/////////////////////////////////////////////////////////////////////////////// -// Проверка блокировки области данных при запуске. - -// Проверка заблокированности области данных при запуске. -// Только для вызова из СтандартныеПодсистемыСервер.ДобавитьПараметрыРаботыКлиентаПриЗапуске(). -// -Процедура ПриПроверкеБлокировкиОбластиДанныхПриЗапуске(ОписаниеОшибки) Экспорт - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() - И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() - И ОбластьДанныхЗаблокирована(ОбщегоНазначения.ЗначениеРазделителяСеанса()) Тогда - - ОписаниеОшибки = - НСтр("ru = 'Запуск приложения временно недоступен. - |Выполняются регламентные операции по обслуживанию приложения. - | - |Попробуйте запустить приложение через несколько минут.'"); - - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Контроль неразделенных данных. - -// Обработчик подписки на событие КонтрольНеразделенныхОбъектовПриЗаписи. -// -Процедура КонтрольНеразделенныхОбъектовПриЗаписи(Источник, Отказ) Экспорт - - КонтрольНеразделенныхДанныхПриЗаписи(Источник); - -КонецПроцедуры - -// Обработчик подписки на событие КонтрольНеразделенныхНаборовЗаписейПриЗаписи. -// -Процедура КонтрольНеразделенныхНаборовЗаписейПриЗаписи(Источник, Отказ, Замещение) Экспорт - - КонтрольНеразделенныхДанныхПриЗаписи(Источник); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Обработка вспомогательных данных области. - -// Выполняет запись значения ссылочного типа, разделенных разделителем РазделительВспомогательныхДанных -// с переключением разделения сеанса на время записи. -// -// Параметры: -// ОбъектВспомогательныхДанных - значение ссылочного типа или УдалениеОбъекта. -// -Процедура ЗаписатьВспомогательныеДанные(ОбъектВспомогательныхДанных) Экспорт - - ОбработатьВспомогательныеДанные( - ОбъектВспомогательныхДанных, - Истина, - Ложь); - -КонецПроцедуры - -// Выполняет удаление значения ссылочного типа, разделенных разделителем РазделительВспомогательныхДанных -// с переключением разделения сеанса на время записи. -// -// Параметры: -// ОбъектВспомогательныхДанных - значение ссылочного типа. -// -Процедура УдалитьВспомогательныеДанные(ОбъектВспомогательныхДанных) Экспорт - - ОбработатьВспомогательныеДанные( - ОбъектВспомогательныхДанных, - Ложь, - Истина); - -КонецПроцедуры - -// Создает ключ записи для регистра сведений, включенного в состав разделителя ОбластьДанныхВспомогательныеДанные. -// -// Параметры: -// Менеджер - РегистрСведенийМенеджер, менеджер регистра сведений, для которого требуется -// получить ключ записи, -// ЗначенияКлюча - Структура, содержащая значения для заполнения свойств ключа записи. -// Имена элементов структуры должны соответствовать именам ключевых полей, -// -// Возвращаемое значение: РегистрСведенийКлючЗаписи. -// -Функция СоздатьКлючЗаписиРегистраСведенийВспомогательныхДанных(Знач Менеджер, Знач ЗначенияКлюча) Экспорт - - Ключ = Менеджер.СоздатьКлючЗаписи(ЗначенияКлюча); - - ОбластьДанных = Неопределено; - Разделитель = РазделительВспомогательныхДанных(); - - Если ЗначенияКлюча.Свойство(Разделитель, ОбластьДанных) Тогда - - Если Ключ[Разделитель] <> ОбластьДанных Тогда - - Объект = СериализаторXDTO.ЗаписатьXDTO(Ключ); - Объект[Разделитель] = ОбластьДанных; - Ключ = СериализаторXDTO.ПрочитатьXDTO(Объект); - - КонецЕсли; - - КонецЕсли; - - Возврат Ключ; - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Функции определения типов объектов метаданных по полному имени объекта // метаданных. @@ -1930,31 +1571,6 @@ КонецФункции -// Для внутреннего использования. -// -Функция ОбластьДанныхОсновныеДанныеСостав() Экспорт - Возврат Метаданные.ОбщиеРеквизиты.ОбластьДанныхОсновныеДанные.Состав; -КонецФункции - -// Для внутреннего использования. -// -Функция ПолучитьОбластиДанныхРезультатЗапроса() Экспорт - Запрос = Новый Запрос(); - Запрос.Текст = - "ВЫБРАТЬ - | ОбластиДанных.ОбластьДанныхВспомогательныеДанные КАК ОбластьДанных - |ИЗ - | РегистрСведений.ОбластиДанных КАК ОбластиДанных - |ГДЕ - | ОбластиДанных.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОбластейДанных.Используется) - |УПОРЯДОЧИТЬ ПО - | ОбластьДанных"; - - Результат = Запрос.Выполнить(); - - Возврат Результат; -КонецФункции - // Для внутреннего использования. // Функция СобытиеЖурналаРегистрацииКопированиеОбластиДанных() Экспорт @@ -2011,6 +1627,905 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Вызовы в другие подсистемы + +// Формирует список параметров ИБ. +// +// Параметры: +// ТаблицаПараметров - ТаблицаЗначений - таблица описания параметров. +// Описание состав колонок - см. РаботаВМоделиСервиса.ПолучитьТаблицуПараметровИБ(). +// +Процедура ПриЗаполненииТаблицыПараметровИБ(Знач ТаблицаПараметров) Экспорт + + Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда + ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ИспользоватьРазделениеПоОбластямДанных"); + + ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "РежимИспользованияИнформационнойБазы"); + + ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "КопироватьОбластиДанныхИзЭталонной"); + КонецЕсли; + + ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ВнутреннийАдресМенеджераСервиса"); + + СтрокаПараметра = ТаблицаПараметров.Добавить(); + СтрокаПараметра.Имя = "ИмяСлужебногоПользователяМенеджераСервиса"; + СтрокаПараметра.Описание = "ИмяСлужебногоПользователяМенеджераСервиса"; + СтрокаПараметра.Тип = Новый ОписаниеТипов("Строка"); + + СтрокаПараметра = ТаблицаПараметров.Добавить(); + СтрокаПараметра.Имя = "ПарольСлужебногоПользователяМенеджераСервиса"; + СтрокаПараметра.Описание = "ПарольСлужебногоПользователяМенеджераСервиса"; + СтрокаПараметра.Тип = Новый ОписаниеТипов("Строка"); + СтрокаПараметра.ЗапретЧтения = Истина; + + // Для совместимости с предыдущими версиями. + СтрокаПараметра = ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ВнутреннийАдресМенеджераСервиса"); + СтрокаПараметра.Имя = "URLСервиса"; + + СтрокаПараметра = ТаблицаПараметров.Добавить(); + СтрокаПараметра.Имя = "ИмяСлужебногоПользователяСервиса"; + СтрокаПараметра.Описание = "ИмяСлужебногоПользователяСервиса"; + СтрокаПараметра.Тип = Новый ОписаниеТипов("Строка"); + + СтрокаПараметра = ТаблицаПараметров.Добавить(); + СтрокаПараметра.Имя = "ПарольСлужебногоПользователяСервиса"; + СтрокаПараметра.Описание = "ПарольСлужебногоПользователяСервиса"; + СтрокаПараметра.Тип = Новый ОписаниеТипов("Строка"); + СтрокаПараметра.ЗапретЧтения = Истина; + // Конец Для совместимости с предыдущими версиями. + + СтрокаПараметра = ТаблицаПараметров.Добавить(); + СтрокаПараметра.Имя = "ВерсияКонфигурации"; + СтрокаПараметра.Описание = НСтр("ru = 'Версия конфигурации'"); + СтрокаПараметра.ЗапретЗаписи = Истина; + СтрокаПараметра.Тип = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0, ДопустимаяДлина.Переменная)); + + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.РаботаВМоделиСервиса\ПриЗаполненииТаблицыПараметровИБ"); + + Для каждого Обработчик Из ОбработчикиСобытия Цикл + Обработчик.Модуль.ПриЗаполненииТаблицыПараметровИБ(ТаблицаПараметров); + КонецЦикла; + +КонецПроцедуры + +// Получает описание файла по его идентификатору в регистре Файлы. +// Если хранение на диске и ПутьВместоДанных = Истина, +// в выходной структуре Данные = Неопределено, ПолноеИмя = Полное имя файла, +// иначе Данные - двоичные данные файла, ПолноеИмя - Неопределено. +// Значение ключа Имя всегда содержит имя в хранилище. +// +// Параметры: +// ИдентификаторФайла - УникальныйИдентификатор. +// ПараметрыПодключения - Структура: +// - URL - Строка - URL сервиса. Обязательно должно присутствовать и быть заполненным. +// - UserName - Строка - Имя пользователя сервиса. +// - Password - Строка - Пароль пользователя сервиса. +// ПутьВместоДанных - Булево - Что возвращать. +// ПроверятьСуществование - Булево - Проверять ли существования файла в случае ошибки его получения. +// +// Возвращаемое значение: +// ОписаниеФайла - Структура: +// Имя - Строка - имя файла в хранилище. +// Данные - ДвоичныеДанные - данные файла. +// ПолноеИмя - Строка - полное имя файла. +// - Файл будет удален автоматически по истечении срока хранения временных файлов. +// +Функция ПолучитьФайлИзХранилища(Знач ИдентификаторФайла, Знач ПараметрыПодключения, + Знач ПутьВместоДанных = Ложь, Знач ПроверятьСуществование = Ложь) Экспорт + + НачалоВыполнения = ТекущаяУниверсальнаяДата(); + + ОписаниеПрокси = ОписаниеПроксиСервисаПередачиФайлов(ПараметрыПодключения); + + ОбменЧерезФС = МожноПередаватьЧерезФСССервера(ОписаниеПрокси.Прокси, ОписаниеПрокси.ЕстьПоддержка2йВерсии); + + Если ОбменЧерезФС Тогда + + Попытка + Попытка + ИмяФайла = ОписаниеПрокси.Прокси.WriteFileToFS(ИдентификаторФайла); + Исключение + ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Если ПроверятьСуществование И Не ОписаниеПрокси.Прокси.FileExists(ИдентификаторФайла) Тогда + Возврат Неопределено; + КонецЕсли; + ВызватьИсключение ОписаниеОшибки; + КонецПопытки; + + СвойстваФайла = Новый Файл(ПолучитьОбщийКаталогВременныхФайлов() + ИмяФайла); + Если СвойстваФайла.Существует() Тогда + ОписаниеФайла = СоздатьОписаниеФайла(); + ОписаниеФайла.Имя = СвойстваФайла.Имя; + + РазмерПолученногоФайла = СвойстваФайла.Размер(); + + Если ПутьВместоДанных Тогда + ОписаниеФайла.Данные = Неопределено; + ОписаниеФайла.ПолноеИмя = СвойстваФайла.ПолноеИмя; + Иначе + ОписаниеФайла.Данные = Новый ДвоичныеДанные(СвойстваФайла.ПолноеИмя); + ОписаниеФайла.ПолноеИмя = Неопределено; + Попытка + УдалитьФайлы(СвойстваФайла.ПолноеИмя); + Исключение + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПолучениеФайлаИзХранилища(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + КонецЕсли; + + ЗаписатьВЖурналСобытиеФайловогоХранилища( + НСтр("ru = 'Извлечение'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ИдентификаторФайла, + РазмерПолученногоФайла, + ТекущаяУниверсальнаяДата() - НачалоВыполнения, + ОбменЧерезФС); + + Возврат ОписаниеФайла; + Иначе + ОбменЧерезФС = Ложь; + КонецЕсли; + Исключение + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПолучениеФайлаИзХранилища(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ОбменЧерезФС = Ложь; + КонецПопытки; + + КонецЕсли; // ОбменЧерезФС + + КоличествоЧастей = Неопределено; + ИмяФайлаВСправочнике = Неопределено; + РазмерБлокаПередачиФайла = ПолучитьРазмерБлокаПередачиФайла(); + Попытка + Если ОписаниеПрокси.ЕстьПоддержка2йВерсии Тогда + ИдентификаторПередачи = ОписаниеПрокси.Прокси.PrepareGetFile(ИдентификаторФайла, РазмерБлокаПередачиФайла * 1024, КоличествоЧастей); + Иначе + ИдентификаторПередачи = Неопределено; + ОписаниеПрокси.Прокси.PrepareGetFile(ИдентификаторФайла, РазмерБлокаПередачиФайла * 1024, ИдентификаторПередачи, КоличествоЧастей); + КонецЕсли; + Исключение + ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Если ПроверятьСуществование И Не ОписаниеПрокси.Прокси.FileExists(ИдентификаторФайла) Тогда + Возврат Неопределено; + КонецЕсли; + ВызватьИсключение ОписаниеОшибки; + КонецПопытки; + + ИменаФайлов = Новый Массив; + + КаталогСборки = СоздатьКаталогСборки(); + + Если ОписаниеПрокси.ЕстьПоддержка2йВерсии Тогда + Для НомерЧасти = 1 По КоличествоЧастей Цикл + ДанныеЧасти = ОписаниеПрокси.Прокси.GetFilePart(ИдентификаторПередачи, НомерЧасти, КоличествоЧастей); + ИмяФайлаЧасти = КаталогСборки + "part" + Формат(НомерЧасти, "ЧЦ=4; ЧВН=; ЧГ="); + ДанныеЧасти.Записать(ИмяФайлаЧасти); + ИменаФайлов.Добавить(ИмяФайлаЧасти); + КонецЦикла; + Иначе // 1-я версия. + Для НомерЧасти = 1 По КоличествоЧастей Цикл + ДанныеЧасти = Неопределено; + ОписаниеПрокси.Прокси.GetFilePart(ИдентификаторПередачи, НомерЧасти, ДанныеЧасти); + ИмяФайлаЧасти = КаталогСборки + "part" + Формат(НомерЧасти, "ЧЦ=4; ЧВН=; ЧГ="); + ДанныеЧасти.Записать(ИмяФайлаЧасти); + ИменаФайлов.Добавить(ИмяФайлаЧасти); + КонецЦикла; + КонецЕсли; + ДанныеЧасти = Неопределено; + + ОписаниеПрокси.Прокси.ReleaseFile(ИдентификаторПередачи); + + ИмяАрхива = ПолучитьИмяВременногоФайла("zip"); + + Попытка + + ОбъединитьФайлы(ИменаФайлов, ИмяАрхива); + ФайлОбъединен = Истина; + + Исключение + + ФайлОбъединен = Ложь; + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции объединения файлов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + + Если ФайлОбъединен Тогда + + Попытка + + ЧтениеZipФайла = Новый ЧтениеZipФайла(ИмяАрхива); + ПрочитанZipФайл = Истина; + + Исключение + + ПрочитанZipФайл = Ложь; + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции чтения zip файла'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + + Если ПрочитанZipФайл Тогда + + ВПолученномАрхивеБолееОдногоФайла = ЧтениеZipФайла.Элементы.Количество() > 1; + + Если НЕ ВПолученномАрхивеБолееОдногоФайла Тогда + + ИмяФайла = КаталогСборки + ЧтениеZipФайла.Элементы[0].Имя; + ЧтениеZipФайла.Извлечь(ЧтениеZipФайла.Элементы[0], КаталогСборки); + ЧтениеZipФайла.Закрыть(); + + ФайлРезультата = Новый Файл(ПолучитьИмяВременногоФайла()); + ПереместитьФайл(ИмяФайла, ФайлРезультата.ПолноеИмя); + РазмерПолученногоФайла = ФайлРезультата.Размер(); + + ОписаниеФайла = СоздатьОписаниеФайла(); + ОписаниеФайла.Имя = ФайлРезультата.Имя; + + Если ПутьВместоДанных Тогда + + ОписаниеФайла.Данные = Неопределено; + ОписаниеФайла.ПолноеИмя = ФайлРезультата.ПолноеИмя; + + Иначе + + ОписаниеФайла.Данные = Новый ДвоичныеДанные(ФайлРезультата.ПолноеИмя); + ОписаниеФайла.ПолноеИмя = Неопределено; + + Попытка + + УдалитьФайлы(ФайлРезультата.ПолноеИмя); + + Исключение + + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПолучениеФайлаИзХранилища(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + ФайлВременный = Новый Файл(ИмяАрхива); + + Если ФайлВременный.Существует() Тогда + + Попытка + + ФайлВременный.УстановитьТолькоЧтение(Ложь); + УдалитьФайлы(ИмяАрхива); + + Исключение + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции удаления временного файла'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + + КонецЕсли; + + Попытка + + УдалитьФайлы(КаталогСборки); + + Исключение + + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПолучениеФайлаИзХранилища(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + + Если НЕ ПрочитанZipФайл Тогда + + ВызватьИсключение(НСтр("ru = 'При чтении zip файла произошла ошибка.'")); + + КонецЕсли; + + Если ВПолученномАрхивеБолееОдногоФайла Тогда + + ВызватьИсключение(НСтр("ru = 'В полученном архиве содержится более одного файла.'")); + + КонецЕсли; + + ЗаписатьВЖурналСобытиеФайловогоХранилища( + НСтр("ru = 'Извлечение'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ИдентификаторФайла, + РазмерПолученногоФайла, + ТекущаяУниверсальнаяДата() - НачалоВыполнения, + ОбменЧерезФС); + + Возврат ОписаниеФайла; + +КонецФункции + +// Записывает тестовый файл на диск, возвращая его имя и размер. +// Файл должна удалять вызывающая сторона. +// +// Параметры: +// РазмерФайла - Число. +// +// Возвращаемое значение: +// Строка - Имя пробного файла без пути. +// +Функция ЗаписатьПробныйФайл() Экспорт + + НовыйИД = Новый УникальныйИдентификатор; + СвойстваФайла = Новый Файл(ПолучитьОбщийКаталогВременныхФайлов() + НовыйИД + ".tmp"); + + Текст = Новый ЗаписьТекста(СвойстваФайла.ПолноеИмя, КодировкаТекста.ANSI); + Текст.Записать(НовыйИД); + Текст.Закрыть(); + + Возврат СвойстваФайла.Имя; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов в другие подсистемы. + +// Дополнительные действия, выполняемые при изменении разделения сеанса. +// +Процедура ПриИзмененииОбластиДанных() Экспорт + + ОчиститьВсеПараметрыСеансаКромеРазделителей(); + + Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + Возврат; + + КонецЕсли; + + // Пустой список пользователей или фоновое задание из регламентного. + // В этом случае авторизовать пользователя не требуется. + Если ПользователиИнформационнойБазы.ТекущийПользователь().Имя = "" Тогда + + Возврат; + + КонецЕсли; + + МенеджерЗаписи = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.Прочитать(); + + Если МенеджерЗаписи.Выбран() Тогда + + Если НЕ (МенеджерЗаписи.ОшибкаОбработки + ИЛИ МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.КУдалению + ИЛИ МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Удалена) Тогда + + ПользователиСлужебный.АвторизоватьТекущегоПользователя(); + + КонецЕсли; + + Иначе + + ПользователиСлужебный.АвторизоватьТекущегоПользователя(); + + КонецЕсли; + +КонецПроцедуры + +// Регистрирует обработчики поставляемых данных за день и за все время. +// +Процедура ЗарегистрироватьОбработчикиПоставляемыхДанных(Знач Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.ВидДанных = "ЭталонОбластиДанных"; + Обработчик.КодОбработчика = "ЭталонОбластиДанных"; + Обработчик.Обработчик = РаботаВМоделиСервиса; + +КонецПроцедуры + +// Вызывается при получении уведомления о новых данных. +// В теле следует проверить, необходимы ли эти данные приложению, +// и если да - установить флажок Загружать. +// +// Параметры: +// Дескриптор - ОбъектXDTO Descriptor. +// Загружать - булево, возвращаемое. +// +Процедура ДоступныНовыеДанные(Знач Дескриптор, Загружать) Экспорт + + Если Дескриптор.DataType = "ЭталонОбластиДанных" Тогда + Для каждого Характеристика Из Дескриптор.Properties.Property Цикл + Если Характеристика.Code = "ИмяКонфигурации" И Характеристика.Value = Метаданные.Имя Тогда + Загружать = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +// Вызывается после вызова ДоступныНовыеДанные, позволяет разобрать данные. +// +// Параметры: +// Дескриптор - ОбъектXDTO Дескриптор. +// ПутьКФайлу - Строка или Неопределено. Полное имя извлеченного файла. Файл будет автоматически удален +// после завершения процедуры. Если в менеджере сервиса не был +// указан файл - значение аргумента равно Неопределено. +// +Процедура ОбработатьНовыеДанные(Знач Дескриптор, Знач ПутьКФайлу) Экспорт + + Если Дескриптор.DataType = "ЭталонОбластиДанных" Тогда + ОбработатьПоставляемыйЭталонКонфигурации(Дескриптор, ПутьКФайлу); + КонецЕсли; + +КонецПроцедуры + +// Вызывается при отмене обработки данных в случае сбоя. +// +Процедура ОбработкаДанныхОтменена(Знач Дескриптор) Экспорт + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Параметры: +// ЗаданиеМетаданные - ОбъектМетаданных - метаданные предопределенного регламентного задания. +// Использование - Булево - Истина, если задание нужно включить, иначе Ложь. +// +Процедура УстановитьИспользованиеПредопределенногоРегламентногоЗадания(ЗаданиеМетаданные, Использование) Экспорт + + Шаблон = ОчередьЗаданий.ШаблонПоИмени(ЗаданиеМетаданные.Имя); + + ОтборЗадания = Новый Структура; + ОтборЗадания.Вставить("Шаблон", Шаблон); + Задания = ОчередьЗаданий.ПолучитьЗадания(ОтборЗадания); + + ПараметрыЗадания = Новый Структура("Использование", Использование); + ОчередьЗаданий.ИзменитьЗадание(Задания[0].Идентификатор, ПараметрыЗадания); + +КонецПроцедуры + +// Проверяет возможность использования конфигурации в модели сервиса. +// При невозможности использования - генерируется исключение с указанием причины, +// из-за которой использование конфигурации в модели сервиса невозможно. +// +Процедура ПроверитьВозможностьИспользованияКонфигурацииВМоделиСервиса() Экспорт + + ОписанияПодсистем = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем().ПоИменам; + ОписаниеБТС = ОписанияПодсистем.Получить("БиблиотекаТехнологииСервиса"); + + Если ОписаниеБТС = Неопределено Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В конфигурацию не внедрена библиотека ""1С:Библиотека технологии сервиса"". + |Без внедрения этой библиотеки конфигурация не может использоваться в модели сервиса. + | + |Для использования этой конфигурации в модели сервиса требуется внедрить библиотеку + |""1С:Библиотека технологии сервиса"" версии не младше %1!'", Метаданные.ОсновнойЯзык.КодЯзыка), + ТребуемаяВерсияБТС()); + + Иначе + + ВерсияБТС = ОписаниеБТС.Версия; + + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияБТС, ТребуемаяВерсияБТС()) < 0 Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для использования конфигурации в модели сервиса с текущей версией БСП требуется + |обновить используемую версию библиотеки ""1С:Библиотека технологии сервиса""! + | + |Используемая версия: %1, требуется версия не младше %2!'", Метаданные.ОсновнойЯзык.КодЯзыка), + ВерсияБТС, ТребуемаяВерсияБТС()); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Вызывает исключение при отсутствии требуемой подсистемы из библиотеки технологии сервиса. +// +// Параметры: +// ИмяПодсистемы - Строка. +// +Процедура ВызватьИсключениеОтсутствуетПодсистемаБТС(Знач ИмяПодсистемы) Экспорт + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Невозможно выполнить операцию по причине - в конфигурации не внедрена подсистема ""%1"". + |Данная подсистема поставляется в состав библиотеки технологии сервиса, которая должна отдельно внедряться в состав конфигурации. + |Проверьте наличие и корректность внедрения подсистемы ""%1"".'"), + ИмяПодсистемы); + +КонецПроцедуры + +// Объявляет события подсистемы РаботаВМоделиСервиса: +// +// Серверные события: +// ПриУдаленииОбластиДанных, +// ПриПолученииТаблицыПараметровИБ, +// ПриУстановкеЗначенийПараметровИБ, +// ПриЗаполненииТаблицыПараметровИБ, +// ПриУстановкеПравПоУмолчанию, +// ПослеЗагрузкиДанныхИзДругойМодели. +// +// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. +Процедура ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия) Экспорт + + // СЕРВЕРНЫЕ СОБЫТИЯ. + + // Вызывается при удалении области данных. + // В процедуре необходимо удалить данные области данных, которые не + // могут быть удалены стандартным механизмом. + // + // Параметры: + // ОбластьДанных - Тип значения разделителя - значение разделителя + // удаляемой области данных. + // + // Синтаксис: + // Процедура ПриУдаленииОбластиДанных(Знач ОбластьДанных) Экспорт + // + // (То же, что РаботаВМоделиСервисаПереопределяемый.ПриУдаленииОбластиДанных). + // + СерверныеСобытия.Добавить( + "СтандартныеПодсистемы.РаботаВМоделиСервиса\ПриУдаленииОбластиДанных"); + + // Формирует список параметров ИБ. + // + // Параметры: + // ТаблицаПараметров - ТаблицаЗначений - таблица описания параметров. + // Описание состав колонок - см. РаботаВМоделиСервиса.ПолучитьТаблицуПараметровИБ(). + // + // Синтаксис: + // Процедура ПриПолученииТаблицыПараметровИБ(Знач ТаблицаПараметров) Экспорт + // + // (То же, что РаботаВМоделиСервисаПереопределяемый.ПолучитьТаблицуПараметровИБ). + // + СерверныеСобытия.Добавить( + "СтандартныеПодсистемы.РаботаВМоделиСервиса\ПриПолученииТаблицыПараметровИБ"); + + // Вызывается перед попыткой записи значений параметров ИБ в одноименные + // константы. + // + // Параметры: + // ЗначенияПараметров - Структура - значения параметров которые требуется установить. + // В случае если значение параметра устанавливается в данной процедуре из структуры + // необходимо удалить соответствующую пару КлючИЗначение. + // + // Синтаксис: + // Процедура ПриУстановкеЗначенийПараметровИБ(Знач ЗначенияПараметров) Экспорт + // + // (То же, что РаботаВМоделиСервисаПереопределяемый.ПриУстановкеЗначенийПараметровИБ). + // + СерверныеСобытия.Добавить( + "СтандартныеПодсистемы.РаботаВМоделиСервиса\ПриУстановкеЗначенийПараметровИБ"); + + // Формирует список параметров ИБ. + // + // Параметры: + // ТаблицаПараметров - ТаблицаЗначений - таблица описания параметров. + // Описание состав колонок - см. РаботаВМоделиСервиса.ПолучитьТаблицуПараметровИБ(). + // + // Синтаксис: + // Процедура ПриЗаполненииТаблицыПараметровИБ(Знач ТаблицаПараметров) Экспорт + // + // Для использования в других библиотеках. + // + // (То же, что РаботаВМоделиСервисаПереопределяемый.ПолучитьТаблицуПараметровИБ). + // + СерверныеСобытия.Добавить( + "СтандартныеПодсистемы.РаботаВМоделиСервиса\ПриЗаполненииТаблицыПараметровИБ"); + + // Устанавливает пользователю права по умолчанию. + // Вызывается при работе в модели сервиса, в случае обновления в менеджере + // сервиса прав пользователя без прав администрирования. + // + // Параметры: + // Пользователь - СправочникСсылка.Пользователи - пользователь, которому + // требуется установить права по умолчанию. + // + // Синтаксис: + // Процедура ПриУстановкеПравПоУмолчанию(Пользователь) Экспорт + // + // (То же, что РаботаВМоделиСервисаПереопределяемый.УстановитьПраваПоУмолчанию). + // + СерверныеСобытия.Добавить( + "СтандартныеПодсистемы.РаботаВМоделиСервиса\ПриУстановкеПравПоУмолчанию"); + + // Вызывается при определении псевдонима пользователя для отображения в интерфейсе. + // + // Параметры: + // ИдентификаторПользователя - УникальныйИдентификатор, + // Псевдоним - Строка, псевдоним пользователя. + // + // Синтаксис: + // Процедура ПриОпределенииПсевдонимаПользователя(ИдентификаторПользователя, Псевдоним) Экспорт + // + СерверныеСобытия.Добавить( + "СтандартныеПодсистемы.РаботаВМоделиСервиса\ПриОпределенииПсевдонимаПользователя"); + + // Вызывается при определении списка метаданных, которые являются не разделенными + // и которые можно записывать из разделенного сеанса. Процедура должна в массив Исключения добавить ссылки + // на исключаемые при проверке объекты метаданных. Эти метаданные могут отсутствовать в подписках, которые + // проверяют запрет на запись неразделенных данных из разделенного сеанса. + + // Синтаксис: + // Процедура ПриОпределенииИсключенийНеразделенныхДанных(Исключения) + + СерверныеСобытия.Добавить( + "СтандартныеПодсистемы.РаботаВМоделиСервиса\ПриОпределенииИсключенийНеразделенныхДанных"); + +КонецПроцедуры + +// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. +Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт + + // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные") Тогда + СерверныеОбработчики[ + "СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные\ПриОпределенииОбработчиковПоставляемыхДанных"].Добавить( + "РаботаВМоделиСервиса"); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда + СерверныеОбработчики[ + "СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриОпределенииПсевдонимовОбработчиков"].Добавить( + "РаботаВМоделиСервиса"); + + СерверныеОбработчики[ + "СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриОпределенииИспользованияРегламентныхЗаданий"].Добавить( + "РаботаВМоделиСервиса"); + КонецЕсли; + + СерверныеОбработчики[ + "СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( + "РаботаВМоделиСервиса"); + + СерверныеОбработчики[ + "СтандартныеПодсистемы.БазоваяФункциональность\ПриВключенииРазделенияПоОбластямДанных"].Добавить( + "РаботаВМоделиСервиса"); + + СерверныеОбработчики[ + "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентаПриЗапуске"].Добавить( + "РаботаВМоделиСервиса"); + + СерверныеОбработчики[ + "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиента"].Добавить( + "РаботаВМоделиСервиса"); + + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ВыгрузкаЗагрузкаДанных") Тогда + СерверныеОбработчики[ + "ТехнологияСервиса.ВыгрузкаЗагрузкаДанных\ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки"].Добавить( + "РаботаВМоделиСервиса"); + СерверныеОбработчики[ + "ТехнологияСервиса.ВыгрузкаЗагрузкаДанных\ПослеЗагрузкиДанных"].Добавить( + "РаботаВМоделиСервиса"); + КонецЕсли; + + СерверныеОбработчики[ + "СтандартныеПодсистемы.РаботаВМоделиСервиса\ПриУстановкеЗначенийПараметровИБ"].Добавить( + "РаботаВМоделиСервиса"); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов в эту подсистему. + +// Заполняет соответствие имен методов их псевдонимам для вызова из очереди заданий. +// +// Параметры: +// СоответствиеИменПсевдонимам - Соответствие +// Ключ - Псевдоним метода, например ОчиститьОбластьДанных. +// Значение - Имя метода для вызова, например РаботаВМоделиСервиса.ОчиститьОбластьДанных. +// В качестве значения можно указать Неопределено, в этом случае считается что имя +// совпадает с псевдонимом. +// +Процедура ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам) Экспорт + + СоответствиеИменПсевдонимам.Вставить("РаботаВМоделиСервиса.ПодготовитьОбластьДанныхКИспользованию"); + + СоответствиеИменПсевдонимам.Вставить("РаботаВМоделиСервиса.ОчиститьОбластьДанных"); + +КонецПроцедуры + +// Формирует таблицу регламентных заданий +// с признаком использования в модели сервиса. +// +// Параметры: +// ТаблицаИспользования - ТаблицаЗначений - таблица, которую необходимо +// заполнить регламентными заданиями и признаком использования, колонки: +// РегламентноеЗадание - Строка - имя предопределенного регламентного задания. +// Использование - Булево - Истина, если регламентное задание должно +// выполняться в модели сервиса. Ложь - если не должно. +// +Процедура ПриОпределенииИспользованияРегламентныхЗаданий(ТаблицаИспользования) Экспорт + + НоваяСтрока = ТаблицаИспользования.Добавить(); + НоваяСтрока.РегламентноеЗадание = "ОбслуживаниеОбластейДанных"; + НоваяСтрока.Использование = Истина; + +КонецПроцедуры + +// Определить список справочников, доступных для загрузки с помощью подсистемы "Загрузка данных из файла". +// +// Параметры: +// ЗагружаемыеСправочники - ТаблицаЗначений - список справочников, в которые возможна загрузка данных. +// * ПолноеИмя - Строка - полное имя справочника (как в метаданных). +// * Представление - Строка - представление справочника в списке выбора. +// * ПрикладнаяЗагрузка - Булево - если Истина, значит справочник использует собственный алгоритм загрузки и +// в модуле менеджера справочника определены функции. +// +Процедура ПриОпределенииСправочниковДляЗагрузкиДанных(ЗагружаемыеСправочники) Экспорт + + // Загрузка в классификатор валюты запрещена. + СтрокаТаблицы = ЗагружаемыеСправочники.Найти(Метаданные.Справочники.ОчередьЗаданийОбластейДанных.ПолноеИмя(), "ПолноеИмя"); + Если СтрокаТаблицы <> Неопределено Тогда + ЗагружаемыеСправочники.Удалить(СтрокаТаблицы); + КонецЕсли; + +КонецПроцедуры + +/////////////////////////////////////////////////////////////////////////////// +// Проверка безопасного режима разделения данных. + +// Проверка безопасного режима разделения данных. +// Только для вызова из модуля сеанса. +// +Процедура ПриПроверкеВключенияБезопасногоРежимаРазделенияДанных() Экспорт + + Если БезопасныйРежим() = Ложь + И ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() + И НЕ ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() Тогда + + Если НЕ БезопасныйРежимРазделенияДанных(РазделительВспомогательныхДанных()) Тогда + + УстановитьБезопасныйРежимРазделенияДанных(РазделительВспомогательныхДанных(), Истина); + + КонецЕсли; + + Если НЕ БезопасныйРежимРазделенияДанных(РазделительОсновныхДанных()) Тогда + + УстановитьБезопасныйРежимРазделенияДанных(РазделительОсновныхДанных(), Истина); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +/////////////////////////////////////////////////////////////////////////////// +// Проверка блокировки области данных при запуске. + +// Проверка заблокированности области данных при запуске. +// Только для вызова из СтандартныеПодсистемыСервер.ДобавитьПараметрыРаботыКлиентаПриЗапуске(). +// +Процедура ПриПроверкеБлокировкиОбластиДанныхПриЗапуске(ОписаниеОшибки) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() + И ОбластьДанныхЗаблокирована(ОбщегоНазначения.ЗначениеРазделителяСеанса()) Тогда + + ОписаниеОшибки = + НСтр("ru = 'Запуск приложения временно недоступен. + |Выполняются регламентные операции по обслуживанию приложения. + | + |Попробуйте запустить приложение через несколько минут.'"); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Контроль неразделенных данных. + +// Обработчик подписки на событие КонтрольНеразделенныхОбъектовПриЗаписи. +// +Процедура КонтрольНеразделенныхОбъектовПриЗаписи(Источник, Отказ) Экспорт + + КонтрольНеразделенныхДанныхПриЗаписи(Источник); + +КонецПроцедуры + +// Обработчик подписки на событие КонтрольНеразделенныхНаборовЗаписейПриЗаписи. +// +Процедура КонтрольНеразделенныхНаборовЗаписейПриЗаписи(Источник, Отказ, Замещение) Экспорт + + КонтрольНеразделенныхДанныхПриЗаписи(Источник); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработка вспомогательных данных области. + +// Выполняет запись значения ссылочного типа, разделенных разделителем РазделительВспомогательныхДанных +// с переключением разделения сеанса на время записи. +// +// Параметры: +// ОбъектВспомогательныхДанных - значение ссылочного типа или УдалениеОбъекта. +// +Процедура ЗаписатьВспомогательныеДанные(ОбъектВспомогательныхДанных) Экспорт + + ОбработатьВспомогательныеДанные( + ОбъектВспомогательныхДанных, + Истина, + Ложь); + +КонецПроцедуры + +// Выполняет удаление значения ссылочного типа, разделенных разделителем РазделительВспомогательныхДанных +// с переключением разделения сеанса на время записи. +// +// Параметры: +// ОбъектВспомогательныхДанных - значение ссылочного типа. +// +Процедура УдалитьВспомогательныеДанные(ОбъектВспомогательныхДанных) Экспорт + + ОбработатьВспомогательныеДанные( + ОбъектВспомогательныхДанных, + Ложь, + Истина); + +КонецПроцедуры + +// Создает ключ записи для регистра сведений, включенного в состав разделителя ОбластьДанныхВспомогательныеДанные. +// +// Параметры: +// Менеджер - РегистрСведенийМенеджер, менеджер регистра сведений, для которого требуется +// получить ключ записи, +// ЗначенияКлюча - Структура, содержащая значения для заполнения свойств ключа записи. +// Имена элементов структуры должны соответствовать именам ключевых полей. +// +// Возвращаемое значение: РегистрСведенийКлючЗаписи. +// +Функция СоздатьКлючЗаписиРегистраСведенийВспомогательныхДанных(Знач Менеджер, Знач ЗначенияКлюча) Экспорт + + Ключ = Менеджер.СоздатьКлючЗаписи(ЗначенияКлюча); + + ОбластьДанных = Неопределено; + Разделитель = РазделительВспомогательныхДанных(); + + Если ЗначенияКлюча.Свойство(Разделитель, ОбластьДанных) Тогда + + Если Ключ[Разделитель] <> ОбластьДанных Тогда + + Объект = СериализаторXDTO.ЗаписатьXDTO(Ключ); + Объект[Разделитель] = ОбластьДанных; + Ключ = СериализаторXDTO.ПрочитатьXDTO(Объект); + + КонецЕсли; + + КонецЕсли; + + Возврат Ключ; + +КонецФункции + +// Для внутреннего использования. +// +Функция ОбластьДанныхОсновныеДанныеСостав() Экспорт + Возврат Метаданные.ОбщиеРеквизиты.ОбластьДанныхОсновныеДанные.Состав; +КонецФункции + +// Для внутреннего использования. +// +Функция ПолучитьОбластиДанныхРезультатЗапроса() Экспорт + Запрос = Новый Запрос(); + Запрос.Текст = + "ВЫБРАТЬ + | ОбластиДанных.ОбластьДанныхВспомогательныеДанные КАК ОбластьДанных + |ИЗ + | РегистрСведений.ОбластиДанных КАК ОбластиДанных + |ГДЕ + | ОбластиДанных.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОбластейДанных.Используется) + |УПОРЯДОЧИТЬ ПО + | ОбластьДанных"; + + Результат = Запрос.Выполнить(); + + Возврат Результат; +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -2060,7 +2575,7 @@ // Статус - Перечисления.СтатусыОбластейДанных, ожидаемый статус области. // // Возвращаемое значение: -// РегистрыСведений.ОбластиДанных.МенеджерЗаписи +// РегистрыСведений.ОбластиДанных.МенеджерЗаписи. // Функция ПолучитьМенеджерЗаписиОбластиДанных(Знач ОбластьДанных, Знач Статус) @@ -2422,25 +2937,6 @@ КонецПроцедуры -// Определить список справочников, доступных для загрузки с помощью подсистемы "Загрузка данных из файла". -// -// Параметры: -// ЗагружаемыеСправочники - ТаблицаЗначений - список справочников, в которые возможна загрузка данных. -// * ПолноеИмя - Строка - полное имя справочника (как в метаданных). -// * Представление - Строка - представление справочника в списке выбора. -// * ПрикладнаяЗагрузка - Булево - если Истина, значит справочник использует собственный алгоритм загрузки и -// в модуле менеджера справочника определены функции. -// -Процедура ПриОпределенииСправочниковДляЗагрузкиДанных(ЗагружаемыеСправочники) Экспорт - - // Загрузка в классификатор валюты запрещена. - СтрокаТаблицы = ЗагружаемыеСправочники.Найти(Метаданные.Справочники.ОчередьЗаданийОбластейДанных.ПолноеИмя(), "ПолноеИмя"); - Если СтрокаТаблицы <> Неопределено Тогда - ЗагружаемыеСправочники.Удалить(СтрокаТаблицы); - КонецЕсли; - -КонецПроцедуры - // Вызывается перед попыткой записи значений параметров ИБ в одноименные // константы. // @@ -2477,78 +2973,17 @@ // к программному интерфейсу обработки ВыгрузкаЗагрузкаДанныхМенеджерКонтейнера. Процедура ПослеЗагрузкиДанных(Контейнер) Экспорт + ПользователиСлужебный.ПослеЗагрузкиДанных(Контейнер); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеИтогамиИАгрегатами") Тогда МодульУправлениеИтогамиИАгрегатамиСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеИтогамиИАгрегатамиСлужебный"); - МодульУправлениеИтогамиИАгрегатамиСлужебный.УстановитьПериодРассчитанныхИтогов(); + МодульУправлениеИтогамиИАгрегатамиСлужебный.РассчитатьИтоги(); КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Вызовы в другие подсистемы - -// Формирует список параметров ИБ. -// -// Параметры: -// ТаблицаПараметров - ТаблицаЗначений - таблица описания параметров. -// Описание состав колонок - см. РаботаВМоделиСервиса.ПолучитьТаблицуПараметровИБ(). -// -Процедура ПриЗаполненииТаблицыПараметровИБ(Знач ТаблицаПараметров) Экспорт - - Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда - ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ИспользоватьРазделениеПоОбластямДанных"); - - ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "РежимИспользованияИнформационнойБазы"); - - ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "КопироватьОбластиДанныхИзЭталонной"); - КонецЕсли; - - ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ВнутреннийАдресМенеджераСервиса"); - - СтрокаПараметра = ТаблицаПараметров.Добавить(); - СтрокаПараметра.Имя = "ИмяСлужебногоПользователяМенеджераСервиса"; - СтрокаПараметра.Описание = "ИмяСлужебногоПользователяМенеджераСервиса"; - СтрокаПараметра.Тип = Новый ОписаниеТипов("Строка"); - - СтрокаПараметра = ТаблицаПараметров.Добавить(); - СтрокаПараметра.Имя = "ПарольСлужебногоПользователяМенеджераСервиса"; - СтрокаПараметра.Описание = "ПарольСлужебногоПользователяМенеджераСервиса"; - СтрокаПараметра.Тип = Новый ОписаниеТипов("Строка"); - СтрокаПараметра.ЗапретЧтения = Истина; - - // Для совместимости с предыдущими версиями. - СтрокаПараметра = ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ВнутреннийАдресМенеджераСервиса"); - СтрокаПараметра.Имя = "URLСервиса"; - - СтрокаПараметра = ТаблицаПараметров.Добавить(); - СтрокаПараметра.Имя = "ИмяСлужебногоПользователяСервиса"; - СтрокаПараметра.Описание = "ИмяСлужебногоПользователяСервиса"; - СтрокаПараметра.Тип = Новый ОписаниеТипов("Строка"); - - СтрокаПараметра = ТаблицаПараметров.Добавить(); - СтрокаПараметра.Имя = "ПарольСлужебногоПользователяСервиса"; - СтрокаПараметра.Описание = "ПарольСлужебногоПользователяСервиса"; - СтрокаПараметра.Тип = Новый ОписаниеТипов("Строка"); - СтрокаПараметра.ЗапретЧтения = Истина; - // Конец Для совместимости с предыдущими версиями. - - СтрокаПараметра = ТаблицаПараметров.Добавить(); - СтрокаПараметра.Имя = "ВерсияКонфигурации"; - СтрокаПараметра.Описание = НСтр("ru = 'Версия конфигурации'"); - СтрокаПараметра.ЗапретЗаписи = Истина; - СтрокаПараметра.Тип = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0, ДопустимаяДлина.Переменная)); - - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.РаботаВМоделиСервиса\ПриЗаполненииТаблицыПараметровИБ"); - - Для каждого Обработчик Из ОбработчикиСобытия Цикл - Обработчик.Модуль.ПриЗаполненииТаблицыПараметровИБ(ТаблицаПараметров); - КонецЦикла; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Работа с параметрами ИБ @@ -2569,260 +3004,6 @@ //////////////////////////////////////////////////////////////////////////////// // Работа с файлами -// Получает описание файла по его идентификатору в регистре Файлы. -// Если хранение на диске и ПутьВместоДанных = Истина, -// в выходной структуре Данные = Неопределено, ПолноеИмя = Полное имя файла, -// иначе Данные - двоичные данные файла, ПолноеИмя - Неопределено. -// Значение ключа Имя всегда содержит имя в хранилище. -// -// Параметры: -// ИдентификаторФайла - УникальныйИдентификатор. -// ПараметрыПодключения - Структура: -// - URL - Строка - URL сервиса. Обязательно должно присутствовать и быть заполненным. -// - UserName - Строка - Имя пользователя сервиса. -// - Password - Строка - Пароль пользователя сервиса. -// ПутьВместоДанных - Булево - Что возвращать. -// ПроверятьСуществование - Булево - Проверять ли существования файла в случае ошибки его получения. -// -// Возвращаемое значение: -// ОписаниеФайла - Структура: -// Имя - Строка - имя файла в хранилище. -// Данные - ДвоичныеДанные - данные файла. -// ПолноеИмя - Строка - полное имя файла. -// - Файл будет удален автоматически по истечении срока хранения временных файлов. -// -Функция ПолучитьФайлИзХранилища(Знач ИдентификаторФайла, Знач ПараметрыПодключения, - Знач ПутьВместоДанных = Ложь, Знач ПроверятьСуществование = Ложь) Экспорт - - НачалоВыполнения = ТекущаяУниверсальнаяДата(); - - ОписаниеПрокси = ОписаниеПроксиСервисаПередачиФайлов(ПараметрыПодключения); - - ОбменЧерезФС = МожноПередаватьЧерезФСССервера(ОписаниеПрокси.Прокси, ОписаниеПрокси.ЕстьПоддержка2йВерсии); - - Если ОбменЧерезФС Тогда - - Попытка - Попытка - ИмяФайла = ОписаниеПрокси.Прокси.WriteFileToFS(ИдентификаторФайла); - Исключение - ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - Если ПроверятьСуществование И Не ОписаниеПрокси.Прокси.FileExists(ИдентификаторФайла) Тогда - Возврат Неопределено; - КонецЕсли; - ВызватьИсключение ОписаниеОшибки; - КонецПопытки; - - СвойстваФайла = Новый Файл(ПолучитьОбщийКаталогВременныхФайлов() + ИмяФайла); - Если СвойстваФайла.Существует() Тогда - ОписаниеФайла = СоздатьОписаниеФайла(); - ОписаниеФайла.Имя = СвойстваФайла.Имя; - - РазмерПолученногоФайла = СвойстваФайла.Размер(); - - Если ПутьВместоДанных Тогда - ОписаниеФайла.Данные = Неопределено; - ОписаниеФайла.ПолноеИмя = СвойстваФайла.ПолноеИмя; - Иначе - ОписаниеФайла.Данные = Новый ДвоичныеДанные(СвойстваФайла.ПолноеИмя); - ОписаниеФайла.ПолноеИмя = Неопределено; - Попытка - УдалитьФайлы(СвойстваФайла.ПолноеИмя); - Исключение - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПолучениеФайлаИзХранилища(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - КонецЕсли; - - ЗаписатьВЖурналСобытиеФайловогоХранилища( - НСтр("ru = 'Извлечение'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - ИдентификаторФайла, - РазмерПолученногоФайла, - ТекущаяУниверсальнаяДата() - НачалоВыполнения, - ОбменЧерезФС); - - Возврат ОписаниеФайла; - Иначе - ОбменЧерезФС = Ложь; - КонецЕсли; - Исключение - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПолучениеФайлаИзХранилища(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ОбменЧерезФС = Ложь; - КонецПопытки; - - КонецЕсли; // ОбменЧерезФС - - КоличествоЧастей = Неопределено; - ИмяФайлаВСправочнике = Неопределено; - РазмерБлокаПередачиФайла = ПолучитьРазмерБлокаПередачиФайла(); - Попытка - Если ОписаниеПрокси.ЕстьПоддержка2йВерсии Тогда - ИдентификаторПередачи = ОписаниеПрокси.Прокси.PrepareGetFile(ИдентификаторФайла, РазмерБлокаПередачиФайла * 1024, КоличествоЧастей); - Иначе - ИдентификаторПередачи = Неопределено; - ОписаниеПрокси.Прокси.PrepareGetFile(ИдентификаторФайла, РазмерБлокаПередачиФайла * 1024, ИдентификаторПередачи, КоличествоЧастей); - КонецЕсли; - Исключение - ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - Если ПроверятьСуществование И Не ОписаниеПрокси.Прокси.FileExists(ИдентификаторФайла) Тогда - Возврат Неопределено; - КонецЕсли; - ВызватьИсключение ОписаниеОшибки; - КонецПопытки; - - ИменаФайлов = Новый Массив; - - КаталогСборки = СоздатьКаталогСборки(); - - Если ОписаниеПрокси.ЕстьПоддержка2йВерсии Тогда - Для НомерЧасти = 1 По КоличествоЧастей Цикл - ДанныеЧасти = ОписаниеПрокси.Прокси.GetFilePart(ИдентификаторПередачи, НомерЧасти, КоличествоЧастей); - ИмяФайлаЧасти = КаталогСборки + "part" + Формат(НомерЧасти, "ЧЦ=4; ЧВН=; ЧГ="); - ДанныеЧасти.Записать(ИмяФайлаЧасти); - ИменаФайлов.Добавить(ИмяФайлаЧасти); - КонецЦикла; - Иначе // 1-я версия. - Для НомерЧасти = 1 По КоличествоЧастей Цикл - ДанныеЧасти = Неопределено; - ОписаниеПрокси.Прокси.GetFilePart(ИдентификаторПередачи, НомерЧасти, ДанныеЧасти); - ИмяФайлаЧасти = КаталогСборки + "part" + Формат(НомерЧасти, "ЧЦ=4; ЧВН=; ЧГ="); - ДанныеЧасти.Записать(ИмяФайлаЧасти); - ИменаФайлов.Добавить(ИмяФайлаЧасти); - КонецЦикла; - КонецЕсли; - ДанныеЧасти = Неопределено; - - ОписаниеПрокси.Прокси.ReleaseFile(ИдентификаторПередачи); - - ИмяАрхива = ПолучитьИмяВременногоФайла("zip"); - - Попытка - - ОбъединитьФайлы(ИменаФайлов, ИмяАрхива); - ФайлОбъединен = Истина; - - Исключение - - ФайлОбъединен = Ложь; - ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции объединения файлов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - КонецПопытки; - - Если ФайлОбъединен Тогда - - Попытка - - ЧтениеZipФайла = Новый ЧтениеZipФайла(ИмяАрхива); - ПрочитанZipФайл = Истина; - - Исключение - - ПрочитанZipФайл = Ложь; - ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции чтения zip файла'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - КонецПопытки; - - Если ПрочитанZipФайл Тогда - - ВПолученномАрхивеБолееОдногоФайла = ЧтениеZipФайла.Элементы.Количество() > 1; - - Если НЕ ВПолученномАрхивеБолееОдногоФайла Тогда - - ИмяФайла = КаталогСборки + ЧтениеZipФайла.Элементы[0].Имя; - ЧтениеZipФайла.Извлечь(ЧтениеZipФайла.Элементы[0], КаталогСборки); - ЧтениеZipФайла.Закрыть(); - - ФайлРезультата = Новый Файл(ПолучитьИмяВременногоФайла()); - ПереместитьФайл(ИмяФайла, ФайлРезультата.ПолноеИмя); - РазмерПолученногоФайла = ФайлРезультата.Размер(); - - ОписаниеФайла = СоздатьОписаниеФайла(); - ОписаниеФайла.Имя = ФайлРезультата.Имя; - - Если ПутьВместоДанных Тогда - - ОписаниеФайла.Данные = Неопределено; - ОписаниеФайла.ПолноеИмя = ФайлРезультата.ПолноеИмя; - - Иначе - - ОписаниеФайла.Данные = Новый ДвоичныеДанные(ФайлРезультата.ПолноеИмя); - ОписаниеФайла.ПолноеИмя = Неопределено; - - Попытка - - УдалитьФайлы(ФайлРезультата.ПолноеИмя); - - Исключение - - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПолучениеФайлаИзХранилища(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - КонецПопытки; - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - ФайлВременный = Новый Файл(ИмяАрхива); - - Если ФайлВременный.Существует() Тогда - - Попытка - - ФайлВременный.УстановитьТолькоЧтение(Ложь); - УдалитьФайлы(ИмяАрхива); - - Исключение - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции удаления временного файла'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - КонецПопытки; - - КонецЕсли; - - Попытка - - УдалитьФайлы(КаталогСборки); - - Исключение - - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииПолучениеФайлаИзХранилища(), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - КонецПопытки; - - Если НЕ ПрочитанZipФайл Тогда - - ВызватьИсключение(НСтр("ru = 'При чтении zip файла произошла ошибка.'")); - - КонецЕсли; - - Если ВПолученномАрхивеБолееОдногоФайла Тогда - - ВызватьИсключение(НСтр("ru = 'В полученном архиве содержится более одного файла.'")); - - КонецЕсли; - - ЗаписатьВЖурналСобытиеФайловогоХранилища( - НСтр("ru = 'Извлечение'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - ИдентификаторФайла, - РазмерПолученногоФайла, - ТекущаяУниверсальнаяДата() - НачалоВыполнения, - ОбменЧерезФС); - - Возврат ОписаниеФайла; - -КонецФункции - // Добавляет файл в хранилище менеджера сервиса. // // Параметры: @@ -3122,28 +3303,6 @@ КонецФункции -// Записывает тестовый файл на диск, возвращая его имя и размер. -// Файл должна удалять вызывающая сторона. -// -// Параметры: -// РазмерФайла - Число. -// -// Возвращаемое значение: -// Строка - Имя пробного файла без пути. -// -Функция ЗаписатьПробныйФайл() Экспорт - - НовыйИД = Новый УникальныйИдентификатор; - СвойстваФайла = Новый Файл(ПолучитьОбщийКаталогВременныхФайлов() + НовыйИД + ".tmp"); - - Текст = Новый ЗаписьТекста(СвойстваФайла.ПолноеИмя, КодировкаТекста.ANSI); - Текст.Записать(НовыйИД); - Текст.Закрыть(); - - Возврат СвойстваФайла.Имя; - -КонецФункции - // Создает незаполненную структуру нужного формата. // // Возвращаемое значение: @@ -3173,7 +3332,7 @@ // Возвращаемое значение: // Структура // Прокси - WSПрокси -// ЕстьПоддержка2йВерсии - Булево +// ЕстьПоддержка2йВерсии - Булево. // Функция ОписаниеПроксиСервисаПередачиФайлов(Знач ПараметрыПодключения) @@ -3828,98 +3987,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов в другие подсистемы. - -// Дополнительные действия, выполняемые при изменении разделения сеанса. -// -Процедура ПриИзмененииОбластиДанных() Экспорт - - ОчиститьВсеПараметрыСеансаКромеРазделителей(); - - Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() - И ТекущийРежимЗапуска() <> Неопределено Тогда - - МенеджерЗаписи = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.Прочитать(); - - Если МенеджерЗаписи.Выбран() Тогда - - Если НЕ (МенеджерЗаписи.ОшибкаОбработки - ИЛИ МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.КУдалению - ИЛИ МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Удалена) Тогда - - ПользователиСлужебный.АвторизоватьТекущегоПользователя(); - - КонецЕсли; - - Иначе - - ПользователиСлужебный.АвторизоватьТекущегоПользователя(); - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ ПОЛУЧЕНИЯ ПОСТАВЛЯЕМЫХ ДАННЫХ -// Регистрирует обработчики поставляемых данных за день и за все время. -// -Процедура ЗарегистрироватьОбработчикиПоставляемыхДанных(Знач Обработчики) Экспорт - - Обработчик = Обработчики.Добавить(); - Обработчик.ВидДанных = "ЭталонОбластиДанных"; - Обработчик.КодОбработчика = "ЭталонОбластиДанных"; - Обработчик.Обработчик = РаботаВМоделиСервиса; - -КонецПроцедуры - -// Вызывается при получении уведомления о новых данных. -// В теле следует проверить, необходимы ли эти данные приложению, -// и если да - установить флажок Загружать. -// -// Параметры: -// Дескриптор - ОбъектXDTO Descriptor. -// Загружать - булево, возвращаемое. -// -Процедура ДоступныНовыеДанные(Знач Дескриптор, Загружать) Экспорт - - Если Дескриптор.DataType = "ЭталонОбластиДанных" Тогда - Для каждого Характеристика Из Дескриптор.Properties.Property Цикл - Если Характеристика.Code = "ИмяКонфигурации" И Характеристика.Value = Метаданные.Имя Тогда - Загружать = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - -КонецПроцедуры - -// Вызывается после вызова ДоступныНовыеДанные, позволяет разобрать данные. -// -// Параметры: -// Дескриптор - ОбъектXDTO Дескриптор. -// ПутьКФайлу - Строка или Неопределено. Полное имя извлеченного файла. Файл будет автоматически удален -// после завершения процедуры. Если в менеджере сервиса не был -// указан файл - значение аргумента равно Неопределено. -// -Процедура ОбработатьНовыеДанные(Знач Дескриптор, Знач ПутьКФайлу) Экспорт - - Если Дескриптор.DataType = "ЭталонОбластиДанных" Тогда - ОбработатьПоставляемыйЭталонКонфигурации(Дескриптор, ПутьКФайлу); - КонецЕсли; - -КонецПроцедуры - -// Вызывается при отмене обработки данных в случае сбоя. -// -Процедура ОбработкаДанныхОтменена(Знач Дескриптор) Экспорт - -КонецПроцедуры - Процедура ОбработатьПоставляемыйЭталонКонфигурации(Знач Дескриптор, Знач ПутьКФайлу) Если ЗначениеЗаполнено(ПутьКФайлу) Тогда @@ -4101,6 +4171,12 @@ Исключения.Добавить(Метаданные.РегистрыСведений.Найти("ПакетыДляОтправки")); КонецЕсли; + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.РаботаВМоделиСервиса\ПриОпределенииИсключенийНеразделенныхДанных"); + Для каждого Обработчик Из ОбработчикиСобытия Цикл + Обработчик.Модуль.ПриОпределенииИсключенийНеразделенныхДанных(Исключения) + КонецЦикла; + СтандартныеРазделители = Новый Массив; СтандартныеРазделители.Добавить(Метаданные.ОбщиеРеквизиты.ОбластьДанныхОсновныеДанные); СтандартныеРазделители.Добавить(Метаданные.ОбщиеРеквизиты.ОбластьДанныхВспомогательныеДанные); diff --git a/SSL/src/CommonModules/РаботаВМоделиСервисаКлиент/Module.bsl b/SSL/src/CommonModules/РаботаВМоделиСервисаКлиент/Module.bsl index 46328526b..59ec7b44c 100644 --- a/SSL/src/CommonModules/РаботаВМоделиСервисаКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаВМоделиСервисаКлиент/Module.bsl @@ -3,7 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -#Область СлужебныеПроцедурыИФункции +#Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистем БСП. diff --git a/SSL/src/CommonModules/РаботаСБанками/Module.bsl b/SSL/src/CommonModules/РаботаСБанками/Module.bsl index e3de10152..fee329069 100644 --- a/SSL/src/CommonModules/РаботаСБанками/Module.bsl +++ b/SSL/src/CommonModules/РаботаСБанками/Module.bsl @@ -27,6 +27,51 @@ КонецЕсли; КонецПроцедуры +// Возвращает текстовое описание причины, по которой банк отмечен недействительным. +// +// Параметры: +// Параметры: +// Банк - СправочникСсылка.КлассификаторБанковРФ - банк, для которого необходимо получить текст пояснения. +// +// Возвращаемое значение: +// ФорматированнаяСтрока. +Функция ПояснениеНедействительногоБанка(Банк) Экспорт + + НаименованиеБанка = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Банк, "Наименование"); + + ТекстЗапроса = + "ВЫБРАТЬ + | КлассификаторБанковРФ.Ссылка, + | КлассификаторБанковРФ.Код КАК БИК + |ИЗ + | Справочник.КлассификаторБанковРФ КАК КлассификаторБанковРФ + |ГДЕ + | КлассификаторБанковРФ.Ссылка <> &Ссылка + | И КлассификаторБанковРФ.Наименование = &Наименование + | И НЕ КлассификаторБанковРФ.ДеятельностьПрекращена"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Ссылка", Банк); + Запрос.УстановитьПараметр("Наименование", НаименованиеБанка); + Выборка = Запрос.Выполнить().Выбрать(); + + НовыеРеквизитыБанка = Неопределено; + Если Выборка.Следующий() Тогда + НовыеРеквизитыБанка = Новый Структура("Ссылка, БИК", Выборка.Ссылка, Выборка.БИК); + КонецЕсли; + + Если ЗначениеЗаполнено(Банк) И ЗначениеЗаполнено(НовыеРеквизитыБанка) Тогда + Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'БИК банка изменился на <a href = ""%1"">%2</a>'"), + ПолучитьНавигационнуюСсылку(НовыеРеквизитыБанка.Ссылка), НовыеРеквизитыБанка.БИК); + Иначе + Результат = НСтр("ru = 'Деятельность банка прекращена'"); + КонецЕсли; + + Возврат СтроковыеФункцииКлиентСервер.ФорматированнаяСтрока(Результат); + +КонецФункции + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -97,9 +142,18 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в эту подсистему. +// См. одноименную процедуру в общем модуле ПользователиПереопределяемый. +Процедура ПриОпределенииНазначенияРолей(НазначениеРолей) Экспорт + + // ТолькоДляПользователейСистемы. + НазначениеРолей.ТолькоДляПользователейСистемы.Добавить( + Метаданные.Роли.ДобавлениеИзменениеБанков.Имя); + +КонецПроцедуры + // См. описание одноименной процедуры в общем модуле РегламентныеЗаданияПереопределяемый. // -Процедура ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости) Экспорт +Процедура ПриОпределенииНастроекРегламентныхЗаданий(Зависимости) Экспорт Зависимость = Зависимости.Добавить(); Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ЗагрузкаКлассификатораБанковРФССайтаРБК; Зависимость.ДоступноВМоделиСервиса = Ложь; @@ -183,7 +237,7 @@ // при загрузке данных в другую информационную базу. // // Параметры: -// Типы - Массив(ОбъектМетаданных) +// Типы - Массив(ОбъектМетаданных). // Процедура ПриЗаполненииТиповОбщихДанныхПоддерживающихСопоставлениеСсылокПриЗагрузке(Типы) Экспорт @@ -241,31 +295,33 @@ // ТекстСообщения - Строка - тест сообщения о результатах загрузки. // ЗагрузкаВыполнена - Булево - флаг успешного завершения загрузки данных классификатора. // -Процедура ДополнитьТекстСообщения(ПараметрыЗагрузкиКлассификатора) Экспорт +Процедура ДополнитьТекстСообщения(ПараметрыЗагрузкиКлассификатора) - Если ПустаяСтрока(ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]) Тогда - ТекстСообщения = НСтр("ru ='Загрузка классификатора банков РФ выполнена успешно.'"); - Иначе - ТекстСообщения = ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]; + ТекстСообщения = ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]; + Загружено = ПараметрыЗагрузкиКлассификатора["Загружено"]; + Обновлено = ПараметрыЗагрузкиКлассификатора["Обновлено"]; + + Если ПустаяСтрока(ТекстСообщения) Тогда + Если Загружено = 0 И Обновлено = 0 Тогда + ТекстСообщения = НСтр("ru ='Загрузка завершена. Изменений в классификаторе нет.'"); + Иначе + ТекстСообщения = НСтр("ru ='Загрузка классификатора банков РФ выполнена успешно.'"); + КонецЕсли; КонецЕсли; - Если ПараметрыЗагрузкиКлассификатора["Загружено"] > 0 Тогда - - ТекстСообщения = ТекстСообщения + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Символы.ПС - + НСтр("ru ='Загружено новых: %1.'"), ПараметрыЗагрузкиКлассификатора["Загружено"]); - + Если Загружено > 0 Тогда + ТекстСообщения = ТекстСообщения + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru ='Загружено новых: %1.'"), Загружено); КонецЕсли; - Если ПараметрыЗагрузкиКлассификатора["Обновлено"] > 0 Тогда - - ТекстСообщения = ТекстСообщения + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Символы.ПС - + НСтр("ru ='Обновлено записей: %1.'"), ПараметрыЗагрузкиКлассификатора["Обновлено"]); - + Если Обновлено > 0 Тогда + ТекстСообщения = ТекстСообщения + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru ='Обновлено записей: %1.'"), Обновлено); КонецЕсли; ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); -КонецПроцедуры +КонецПроцедуры // Получает, сортирует, записывает данные классификатора БИК РФ с сайта РБК. // @@ -278,6 +334,10 @@ // АдресХранилища - Строка - адрес внутреннего хранилища. Процедура ПолучитьДанныеРБК(ПараметрыЗагрузкиКлассификатора, АдресХранилища = "") Экспорт + УстановитьПривилегированныйРежим(Истина); + ТекущаяВерсияКлассификатора = Константы.ВерсияКлассификатораБанковРФ.Получить(); + УстановитьПривилегированныйРежим(Ложь); + ВременныйКаталог = ПолучитьИмяВременногоФайла(); СоздатьКаталог(ВременныйКаталог); @@ -285,109 +345,122 @@ ПараметрыПолученияФайловРБК.Вставить("ПутьКФайлуРБК", ""); ПараметрыПолученияФайловРБК.Вставить("ТекстСообщения", ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]); ПараметрыПолученияФайловРБК.Вставить("ВременныйКаталог", ВременныйКаталог); + ПараметрыПолученияФайловРБК.Вставить("ЕстьОбновлениеНаСервере", Истина); + ПараметрыПолученияФайловРБК.Вставить("ВерсияКлассификатора", ТекущаяВерсияКлассификатора); ПолучитьДанныеРБКИзИнтернета(ПараметрыПолученияФайловРБК); Если Не ПустаяСтрока(ПараметрыПолученияФайловРБК["ТекстСообщения"]) Тогда ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ПараметрыПолученияФайловРБК["ТекстСообщения"]); - Если НЕ ПустаяСтрока(АдресХранилища) Тогда - ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); - КонецЕсли; - Возврат; - КонецЕсли; - - Попытка - ZIPФайлРБК = Новый ЧтениеZipФайла(ПараметрыПолученияФайловРБК["ПутьКФайлуРБК"]); - Исключение - ТекстСообщения = НСтр("ru ='Возникли проблемы с файлом классификатора банков, полученным с сайта РБК.'"); - ТекстСообщения = ТекстСообщения + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - КонецПопытки; - - Если Не ПустаяСтрока(ТекстСообщения) Тогда - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); - Если НЕ ПустаяСтрока(АдресХранилища) Тогда - ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); - КонецЕсли; - Возврат; - КонецЕсли; - - Попытка - ZIPФайлРБК.ИзвлечьВсе(ВременныйКаталог); - Исключение - ТекстСообщения = НСтр("ru ='Возникли проблемы с файлом классификатора банков, полученным с сайта РБК.'"); - ТекстСообщения = ТекстСообщения + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - КонецПопытки; - - Если Не ПустаяСтрока(ТекстСообщения) Тогда - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); - Если НЕ ПустаяСтрока(АдресХранилища) Тогда - ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); - КонецЕсли; - Возврат; - КонецЕсли; - - ПутьКФайлуБИКРБК = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ВременныйКаталог) + "bnkseek.txt"; - ФайлБИКРБК = Новый Файл(ПутьКФайлуБИКРБК); - Если Не ФайлБИКРБК.Существует() Тогда - ТекстСообщения = НСтр("ru ='Возникли проблемы с файлом классификатора банков, полученным с сайта РБК. - |Архив не содержит информацию - классификатор банков.'"); - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); - Если НЕ ПустаяСтрока(АдресХранилища) Тогда - ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); - КонецЕсли; - Возврат; - КонецЕсли; - - ПутьКФайлуРегионовРБК = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ВременныйКаталог) + "reg.txt"; - ФайлРегионовРБК = Новый Файл(ПутьКФайлуРегионовРБК); - Если Не ФайлРегионовРБК.Существует() Тогда - ТекстСообщения = НСтр("ru ='Возникли проблемы с файлом классификатора банков, полученным с сайта РБК. - |Архив не содержит информацию о регионах.'"); - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); Если НЕ ПустаяСтрока(АдресХранилища) Тогда ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); КонецЕсли; Возврат; КонецЕсли; - ПутьКФайлуНедействующихБанков = ИмяФайлаНедействующихБанков(ВременныйКаталог); - ФайлНедействующихБанков = Новый Файл(ПутьКФайлуНедействующихБанков); - Если Не ФайлНедействующихБанков.Существует() Тогда - ТекстСообщения = НСтр("ru ='Возникли проблемы с файлом классификатора банков, полученным с сайта РБК. - |Архив не содержит информацию о недействующих банках.'"); - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); - Если НЕ ПустаяСтрока(АдресХранилища) Тогда - ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); + Если ПараметрыПолученияФайловРБК["ЕстьОбновлениеНаСервере"] Тогда + Попытка + ZIPФайлРБК = Новый ЧтениеZipФайла(ПараметрыПолученияФайловРБК["ПутьКФайлуРБК"]); + Исключение + ТекстСообщения = НСтр("ru ='Возникли проблемы с файлом классификатора банков, полученным с сайта РБК.'"); + ТекстСообщения = ТекстСообщения + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + Если Не ПустаяСтрока(ТекстСообщения) Тогда + ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); + Если НЕ ПустаяСтрока(АдресХранилища) Тогда + ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); + КонецЕсли; + Возврат; КонецЕсли; - Возврат; + + Попытка + ZIPФайлРБК.ИзвлечьВсе(ВременныйКаталог); + Исключение + ТекстСообщения = НСтр("ru ='Возникли проблемы с файлом классификатора банков, полученным с сайта РБК.'"); + ТекстСообщения = ТекстСообщения + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + Если Не ПустаяСтрока(ТекстСообщения) Тогда + ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); + Если НЕ ПустаяСтрока(АдресХранилища) Тогда + ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); + КонецЕсли; + Возврат; + КонецЕсли; + + ПутьКФайлуБИКРБК = ИмяФайлаБИКСВИФТРБК(ВременныйКаталог); + ФайлБИКРБК = Новый Файл(ИмяФайлаБИКСВИФТРБК(ВременныйКаталог)); + Если Не ФайлБИКРБК.Существует() Тогда + ПутьКФайлуБИКРБК = ИмяФайлаБИКРБК(ВременныйКаталог); + КонецЕсли; + + ФайлБИКРБК = Новый Файл(ПутьКФайлуБИКРБК); + Если Не ФайлБИКРБК.Существует() Тогда + ТекстСообщения = НСтр("ru ='Возникли проблемы с файлом классификатора банков, полученным с сайта РБК. + |Архив не содержит информацию - классификатор банков.'"); + ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); + Если НЕ ПустаяСтрока(АдресХранилища) Тогда + ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); + КонецЕсли; + Возврат; + КонецЕсли; + + ПутьКФайлуРегионовРБК = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ВременныйКаталог) + "reg.txt"; + ФайлРегионовРБК = Новый Файл(ПутьКФайлуРегионовРБК); + Если Не ФайлРегионовРБК.Существует() Тогда + ТекстСообщения = НСтр("ru ='Возникли проблемы с файлом классификатора банков, полученным с сайта РБК. + |Архив не содержит информацию о регионах.'"); + ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); + Если НЕ ПустаяСтрока(АдресХранилища) Тогда + ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); + КонецЕсли; + Возврат; + КонецЕсли; + + ПутьКФайлуНедействующихБанков = ИмяФайлаНедействующихБанков(ВременныйКаталог); + ФайлНедействующихБанков = Новый Файл(ПутьКФайлуНедействующихБанков); + Если Не ФайлНедействующихБанков.Существует() Тогда + ТекстСообщения = НСтр("ru ='Возникли проблемы с файлом классификатора банков, полученным с сайта РБК. + |Архив не содержит информацию о недействующих банках.'"); + ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); + Если НЕ ПустаяСтрока(АдресХранилища) Тогда + ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); + КонецЕсли; + Возврат; + КонецЕсли; + + ПараметрыЗагрузкиФайловРБК = Новый Соответствие; + ПараметрыЗагрузкиФайловРБК.Вставить("ПутьКФайлуБИКРБК", ПутьКФайлуБИКРБК); + ПараметрыЗагрузкиФайловРБК.Вставить("ПутьКФайлуРегионовРБК", ПутьКФайлуРегионовРБК); + ПараметрыЗагрузкиФайловРБК.Вставить("ПутьКФайлуНедействующихБанков", ПутьКФайлуНедействующихБанков); + ПараметрыЗагрузкиФайловРБК.Вставить("ВременныйКаталог", ВременныйКаталог); + ПараметрыЗагрузкиФайловРБК.Вставить("Загружено", ПараметрыЗагрузкиКлассификатора["Загружено"]); + ПараметрыЗагрузкиФайловРБК.Вставить("Обновлено", ПараметрыЗагрузкиКлассификатора["Обновлено"]); + ПараметрыЗагрузкиФайловРБК.Вставить("ТекстСообщения", ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]); + + ЗагрузитьДанныеРБК(ПараметрыЗагрузкиФайловРБК); + + Если Не ПустаяСтрока(ПараметрыЗагрузкиФайловРБК["ТекстСообщения"]) Тогда + Если НЕ ПустаяСтрока(АдресХранилища) Тогда + ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); + КонецЕсли; + Возврат; + КонецЕсли; + + УдалитьФайлы(ВременныйКаталог); + + ПараметрыЗагрузкиКлассификатора.Вставить("Загружено", ПараметрыЗагрузкиФайловРБК["Загружено"]); + ПараметрыЗагрузкиКлассификатора.Вставить("Обновлено", ПараметрыЗагрузкиФайловРБК["Обновлено"]); + ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ПараметрыЗагрузкиФайловРБК["ТекстСообщения"]); + КонецЕсли; - ПараметрыЗагрузкиФайловРБК = Новый Соответствие; - ПараметрыЗагрузкиФайловРБК.Вставить("ПутьКФайлуБИКРБК", ПутьКФайлуБИКРБК); - ПараметрыЗагрузкиФайловРБК.Вставить("ПутьКФайлуРегионовРБК", ПутьКФайлуРегионовРБК); - ПараметрыЗагрузкиФайловРБК.Вставить("ПутьКФайлуНедействующихБанков", ПутьКФайлуНедействующихБанков); - ПараметрыЗагрузкиФайловРБК.Вставить("ВременныйКаталог", ВременныйКаталог); - ПараметрыЗагрузкиФайловРБК.Вставить("Загружено", ПараметрыЗагрузкиКлассификатора["Загружено"]); - ПараметрыЗагрузкиФайловРБК.Вставить("Обновлено", ПараметрыЗагрузкиКлассификатора["Обновлено"]); - ПараметрыЗагрузкиФайловРБК.Вставить("ТекстСообщения", ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]); - - ЗагрузитьДанныеРБК(ПараметрыЗагрузкиФайловРБК); - - Если Не ПустаяСтрока(ПараметрыЗагрузкиФайловРБК["ТекстСообщения"]) Тогда - Если НЕ ПустаяСтрока(АдресХранилища) Тогда - ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); - КонецЕсли; - Возврат; + Если ПараметрыПолученияФайловРБК["ВерсияКлассификатора"] > ТекущаяВерсияКлассификатора Тогда + УстановитьВерсиюКлассификатораБанков(ПараметрыПолученияФайловРБК["ВерсияКлассификатора"]); КонецЕсли; - УстановитьВерсиюКлассификатораБанков(); - УдалитьФайлы(ВременныйКаталог); - - ПараметрыЗагрузкиКлассификатора.Вставить("Загружено", ПараметрыЗагрузкиФайловРБК["Загружено"]); - ПараметрыЗагрузкиКлассификатора.Вставить("Обновлено", ПараметрыЗагрузкиФайловРБК["Обновлено"]); - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ПараметрыЗагрузкиФайловРБК["ТекстСообщения"]); ПараметрыЗагрузкиКлассификатора.Вставить("ЗагрузкаВыполнена", Истина); - ДополнитьТекстСообщения(ПараметрыЗагрузкиКлассификатора); Если НЕ ПустаяСтрока(АдресХранилища) Тогда @@ -440,7 +513,7 @@ // ТекстСообщения - Строка - тест сообщения о результатах загрузки. // ЗагрузкаВыполнена - Булево - флаг успешного завершения загрузки данных классификатора. // -Процедура ЗагрузитьДанныеРБК(ПараметрыЗагрузкиФайловРБК) Экспорт +Процедура ЗагрузитьДанныеРБК(ПараметрыЗагрузкиФайловРБК) СоответствиеРегионов = ПолучитьСоответствиеРегионов(ПараметрыЗагрузкиФайловРБК["ПутьКФайлуРегионовРБК"]); @@ -489,40 +562,87 @@ // ПутьКФайлуРБК - Строка - путь к полученному файлу, размещенному во временном каталоге. // ВременныйКаталог - Строка - путь к временному каталогу. // ТекстСообщения - Строка - текст сообщения об ошибке. -Процедура ПолучитьДанныеРБКИзИнтернета(ПараметрыПолученияФайловРБК) Экспорт +Процедура ПолучитьДанныеРБКИзИнтернета(ПараметрыПолученияФайловРБК) - ТекстСообщения = ""; - ПутьКФайлуРБК = ""; - СерверИсточник = "cbrates.rbc.ru"; Адрес = "bnk"; - ФайлБИК = "bnk.zip"; - + ФайлБИК = "bnk.zip"; ФайлРБКНаВебСервере = "http://" + СерверИсточник + "/" + Адрес+ "/" + ФайлБИК; - ВременныйФайлРБК = ПараметрыПолученияФайловРБК["ВременныйКаталог"]+ "\" + ФайлБИК; - ПараметрыПолучения = Новый Структура("ПутьДляСохранения"); - ПараметрыПолучения. Вставить("ПутьДляСохранения", ВременныйФайлРБК); + ВременныйФайлРБК = ПараметрыПолученияФайловРБК["ВременныйКаталог"]+ "\" + ФайлБИК; + + ПараметрыПолучения = Новый Структура; + ПараметрыПолучения.Вставить("ПутьДляСохранения", ВременныйФайлРБК); + + ДатаПоследнегоОбновления = ПараметрыПолученияФайловРБК["ВерсияКлассификатора"]; + ПараметрыПолучения.Вставить("Заголовки", Новый Соответствие); + ПараметрыПолучения.Заголовки.Вставить("If-Modified-Since", ДатаHTTP(ДатаПоследнегоОбновления)); + РезультатИзИнтернета = ПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(ФайлРБКНаВебСервере, ПараметрыПолучения); - + Если РезультатИзИнтернета.Статус Тогда - ПараметрыПолученияФайловРБК.Вставить("ПутьКФайлуРБК", РезультатИзИнтернета.Путь); - + ВерсияКлассификатора = РезультатИзИнтернета.Заголовки["Last-Modified"]; + Если ВерсияКлассификатора <> Неопределено Тогда + ВерсияКлассификатора = ПрочитатьДатуHTTP(ВерсияКлассификатора); + ПараметрыПолученияФайловРБК["ВерсияКлассификатора"] = ВерсияКлассификатора; + КонецЕсли; Иначе - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - ДополнительноеСообщение = Символы.ПС - + НСтр("ru ='Возможно неточные или неправильные настройки подключения к Интернету.'"); + Если РезультатИзИнтернета.КодСостояния = 304 Тогда + ПараметрыПолученияФайловРБК["ЕстьОбновлениеНаСервере"] = Ложь; Иначе - ДополнительноеСообщение = Символы.ПС - + НСтр("ru ='Возможно неточные или неправильные настройки подключения к Интернету на сервере 1С:Предприятие.'"); - КонецЕсли; - - СообщениеОбОшибке = РезультатИзИнтернета.СообщениеОбОшибке + ДополнительноеСообщение; - - ПараметрыПолученияФайловРБК.Вставить("ТекстСообщения", СообщениеОбОшибке); + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + ДополнительноеСообщение = Символы.ПС + + НСтр("ru ='Возможно неточные или неправильные настройки подключения к Интернету.'"); + Иначе + ДополнительноеСообщение = Символы.ПС + + НСтр("ru ='Возможно неточные или неправильные настройки подключения к Интернету на сервере 1С:Предприятие.'"); + КонецЕсли; + СообщениеОбОшибке = РезультатИзИнтернета.СообщениеОбОшибке + ДополнительноеСообщение; + ПараметрыПолученияФайловРБК.Вставить("ТекстСообщения", СообщениеОбОшибке); + КонецЕсли; КонецЕсли; - -КонецПроцедуры + +КонецПроцедуры + +// Преобразует дату формата rfc1123-date в обычную универсальную дату. +// См. https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html, п. 3.3.1. +Функция ПрочитатьДатуHTTP(ДатаHTTP) + Месяцы = СтрРазделить("Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", ","); + ДатаВремя = СтрРазделить(ДатаHTTP, " ", Ложь); + + День = ДатаВремя[1]; + Месяц = Месяцы.Найти(ДатаВремя[2]) + 1; + Год = ДатаВремя[3]; + Время = СтрРазделить(ДатаВремя[4], ":", Истина); + Час = Время[0]; + Минута = Время[1]; + Секунда = Время[2]; + + УниверсальноеВремя = Дата(Год, Месяц, День, Час, Минута, Секунда); + Возврат УниверсальноеВремя; +КонецФункции + +// Преобразует универсальную дату в дату формата rfc1123-date. +// См. https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html, п. 3.3.1. +Функция ДатаHTTP(Знач Дата) + ДниНедели = СтрРазделить("Mon,Tue,Wed,Thu,Fri,Sat,Sun", ","); + Месяцы = СтрРазделить("Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", ","); + + ШаблонДаты = "[ДеньНедели], [День] [Месяц] [Год] [Час]:[Минута]:[Секунда] GMT"; + + ПараметрыДаты = Новый Структура; + ПараметрыДаты.Вставить("ДеньНедели", ДниНедели[ДеньНедели(Дата)-1]); + ПараметрыДаты.Вставить("День", Формат(День(Дата), "ЧЦ=2; ЧВН=")); + ПараметрыДаты.Вставить("Месяц", Месяцы[Месяц(Дата)-1]); + ПараметрыДаты.Вставить("Год", Формат(Год(Дата), "ЧЦ=4; ЧВН=; ЧГ=0")); + ПараметрыДаты.Вставить("Час", Формат(Час(Дата), "ЧЦ=2; ЧН=00; ЧВН=")); + ПараметрыДаты.Вставить("Минута", Формат(Минута(Дата), "ЧЦ=2; ЧН=00; ЧВН=")); + ПараметрыДаты.Вставить("Секунда", Формат(Секунда(Дата), "ЧЦ=2; ЧН=00; ЧВН=")); + + ДатаHTTP = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(ШаблонДаты, ПараметрыДаты); + + Возврат ДатаHTTP; +КонецФункции // Определяет по коду типа города строку типа города. // Параметры: @@ -604,51 +724,48 @@ // Функция ПолучитьСтруктуруПолейБанка(Знач Строка, Регионы) - Банк = Новый Структура; - Разделитель = Символы.Таб; - - Пункт = ""; - ТипПункта = ""; - Наименование = ""; - ПризнакКода = ""; - БИК = ""; - КорСчет = ""; + Результат = Новый Структура; - МассивПодстрок = СтрРазделить(Строка, Разделитель); + СписокПолей = Новый Массив; + СписокПолей.Добавить("ТипУчастникаРасчетов"); + СписокПолей.Добавить("ИмяНаселенногоПункта"); + СписокПолей.Добавить("ТипПункта"); + СписокПолей.Добавить("Наименование"); + СписокПолей.Добавить("ПризнакКода"); + СписокПолей.Добавить("БИК"); + СписокПолей.Добавить("КоррСчет"); + СписокПолей.Добавить("СВИФТБИК"); + СписокПолей.Добавить("ИНН"); - Если МассивПодстрок.Количество() < 7 Тогда + КоллекцияЗначений = СтрРазделить(Строка, Символы.Таб, Истина); + Для Индекс = 0 По СписокПолей.Количество() - 1 Цикл; + Значение = ""; + Если Индекс <= КоллекцияЗначений.ВГраница() Тогда + Значение = СокрЛП(КоллекцияЗначений[Индекс]); + КонецЕсли; + Результат.Вставить(СписокПолей[Индекс], Значение); + КонецЦикла; + + Если СтрДлина(Результат.БИК) <> 9 Тогда Возврат ""; - КонецЕсли; + КонецЕсли; - Пункт = СокрЛП(МассивПодстрок[1]); - ТипПункта = ОпределитьТипГородаПоКоду(СокрЛП(МассивПодстрок[2])); - Наименование = СокрЛП(МассивПодстрок[3]); - ПризнакКода = СокрЛП(МассивПодстрок[4]); - БИК = СокрЛП(МассивПодстрок[5]); - КоррСчет = СокрЛП(МассивПодстрок[6]); - - Если СтрДлина(БИК) <> 9 Тогда - Возврат ""; - КонецЕсли; - - Банк.Вставить("БИК", БИК); - Банк.Вставить("КоррСчет", КоррСчет); - Банк.Вставить("Наименование", Наименование); - Банк.Вставить("Город", СокрЛП(ТипПункта + " " + Пункт)); - Банк.Вставить("Телефоны", ""); - Банк.Вставить("Адрес", ""); + Результат.ТипПункта = ОпределитьТипГородаПоКоду(Результат.ТипПункта); + Результат.Вставить("Город", СокрЛП(Результат.ТипПункта + " " + Результат.ИмяНаселенногоПункта)); + Результат.Вставить("Телефоны", ""); + Результат.Вставить("Адрес", ""); - КодРегиона = Сред(Банк.БИК, 3, 2); + КодРегиона = Сред(Результат.БИК, 3, 2); Регион = Регионы[КодРегиона]; Если Регион = Неопределено Тогда Регион = НСтр("ru = 'Другие территории'"); КодРегиона = ""; КонецЕсли; - Банк.Вставить("КодРегиона", КодРегиона); - Банк.Вставить("Регион", Регион); + Результат.Вставить("КодРегиона", КодРегиона); + Результат.Вставить("Регион", Регион); - Возврат Банк; + Возврат Результат; КонецФункции @@ -658,7 +775,12 @@ ПапкаСИзвлеченнымиФайлами = ИзвлечьФайлыИзАрхива(ИмяФайла); Если ФайлыКлассификатораПолучены(ПапкаСИзвлеченнымиФайлами) Тогда Параметры = Новый Соответствие; - Параметры.Вставить("ПутьКФайлуБИКРБК", ИмяФайлаБИКРБК(ПапкаСИзвлеченнымиФайлами)); + ФайлБИКСВИФТ = Новый Файл(ИмяФайлаБИКСВИФТРБК(ПапкаСИзвлеченнымиФайлами)); + Если ФайлБИКСВИФТ.Существует() Тогда + Параметры.Вставить("ПутьКФайлуБИКРБК", ИмяФайлаБИКСВИФТРБК(ПапкаСИзвлеченнымиФайлами)); + Иначе + Параметры.Вставить("ПутьКФайлуБИКРБК", ИмяФайлаБИКРБК(ПапкаСИзвлеченнымиФайлами)); + КонецЕсли; Параметры.Вставить("ПутьКФайлуРегионовРБК", ИмяФайлаРегионовРБК(ПапкаСИзвлеченнымиФайлами)); Параметры.Вставить("ПутьКФайлуНедействующихБанков", ИмяФайлаНедействующихБанков(ПапкаСИзвлеченнымиФайлами)); Параметры.Вставить("Загружено", 0); @@ -722,6 +844,12 @@ КонецФункции +Функция ИмяФайлаБИКСВИФТРБК(ПапкаСФайламиКлассификатора) + + Возврат ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПапкаСФайламиКлассификатора) + "bnkseek_swift.txt"; + +КонецФункции + Функция ИмяФайлаНедействующихБанков(ПапкаСФайламиКлассификатора) Возврат ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПапкаСФайламиКлассификатора) + "bnkdel.txt"; @@ -736,7 +864,7 @@ Функция ИмяСобытияВЖурналеРегистрации() - Возврат НСтр("ru = 'Загрузка классификатора банков. Сайт РБК'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Возврат НСтр("ru = 'Загрузка классификатора банков.РБК'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); КонецФункции @@ -778,14 +906,14 @@ Строка = ЧтениеТекста.ПрочитатьСтроку(); Пока Строка <> Неопределено Цикл СведенияОБанке = СтрРазделить(Строка, Символы.Таб); - Если СведенияОБанке.Количество() <> 7 Тогда + Строка = ЧтениеТекста.ПрочитатьСтроку(); + + Если СведенияОБанке.Количество() < 7 Тогда Продолжить; КонецЕсли; Банк = Результат.Добавить(); Банк.БИК = СведенияОБанке[5]; Банк.Наименование = СведенияОБанке[3]; - - Строка = ЧтениеТекста.ПрочитатьСтроку(); КонецЦикла; Возврат Результат; @@ -977,10 +1105,26 @@ Если КлассификаторБанковОбъект.Код <> СтруктураБанк.БИК Тогда КлассификаторБанковОбъект.Код = СтруктураБанк.БИК; КонецЕсли; - + + Если СтруктураБанк.Свойство("СВИФТБИК") Тогда + Если КлассификаторБанковОбъект.СВИФТБИК <> СтруктураБанк.СВИФТБИК Тогда + Если Не ПустаяСтрока(СтруктураБанк.СВИФТБИК) Тогда + КлассификаторБанковОбъект.СВИФТБИК = СтруктураБанк.СВИФТБИК; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если СтруктураБанк.Свойство("ИНН") Тогда + Если КлассификаторБанковОбъект.ИНН <> СтруктураБанк.ИНН Тогда + Если Не ПустаяСтрока(СтруктураБанк.ИНН) Тогда + КлассификаторБанковОбъект.ИНН = СтруктураБанк.ИНН; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если КлассификаторБанковОбъект.Наименование <> СтруктураБанк.Наименование Тогда Если Не ПустаяСтрока(СтруктураБанк.Наименование) Тогда - КлассификаторБанковОбъект.Наименование = СтруктураБанк.Наименование; + КлассификаторБанковОбъект.Наименование = СтруктураБанк.Наименование; КонецЕсли; КонецЕсли; @@ -1049,7 +1193,7 @@ СтрокаТаблицыБанков = ТаблицаБанков.Получить(СчетчикБанков - 1); - ПараметрыЗагрузкиДанных.Вставить("СтруктураБанк", СтрокаТаблицыБанков); + ПараметрыЗагрузкиДанных.Вставить("СтруктураБанк", СтрокаТаблицыЗначенийВСтруктуру(СтрокаТаблицыБанков)); ЗаписатьЭлементКлассификатораБанковРФ(ПараметрыЗагрузкиДанных); КонецЦикла; @@ -1059,6 +1203,14 @@ КонецПроцедуры +Функция СтрокаТаблицыЗначенийВСтруктуру(СтрокаТаблицы) + Результат = Новый Структура; + Для Каждого Колонка Из СтрокаТаблицы.Владелец().Колонки Цикл + Результат.Вставить(Колонка.Имя, СтрокаТаблицы[Колонка.Имя]); + КонецЦикла; + Возврат Результат; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Прочие процедуры и функции @@ -1066,7 +1218,7 @@ // // Параметры: // ДатаВерсии - ДатаВремя - Дата загрузки данных классификатора. -Процедура УстановитьВерсиюКлассификатораБанков(ДатаВерсии = "") Экспорт +Процедура УстановитьВерсиюКлассификатораБанков(ДатаВерсии = "") УстановитьПривилегированныйРежим(Истина); Если ТипЗнч(ДатаВерсии) <> Тип("Дата") Тогда Константы.ВерсияКлассификатораБанковРФ.Установить(ТекущаяУниверсальнаяДата()); diff --git a/SSL/src/CommonModules/РаботаСКонтрагентамиКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСКонтрагентамиКлиентПереопределяемый/Module.bsl index 78f55e6ec..a5b16d2b7 100644 --- a/SSL/src/CommonModules/РаботаСКонтрагентамиКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКонтрагентамиКлиентПереопределяемый/Module.bsl @@ -7,7 +7,7 @@ #Область ПроверкаКонтрагентов -// Процедура - Определение по имени события обработки оповещения необходимости выполнить запуск проверки контрагентов. +// Определение по имени события обработки оповещения необходимости выполнить запуск проверки контрагентов. // // Параметры: // Форма - УправляемаяФорма - Форма документа, в котором возникло событие обработки оповещения. @@ -21,6 +21,15 @@ +КонецПроцедуры + +// Позволяет заменить стандартное предложение включить проверку контрагентов. +// +// Параметры: +// СтандартнаяОбработка - Булево - Истина, если нужно сохранить стандартное поведение +// +Процедура ПредложитьВключитьПроверкуКонтрагентов(СтандартнаяОбработка) Экспорт + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСКонтрагентамиКлиентСерверПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСКонтрагентамиКлиентСерверПереопределяемый/Module.bsl index 1f994510f..ea3697eb9 100644 --- a/SSL/src/CommonModules/РаботаСКонтрагентамиКлиентСерверПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКонтрагентамиКлиентСерверПереопределяемый/Module.bsl @@ -7,7 +7,7 @@ #Область ПроверкаКонтрагентовВДокументах -// Процедура - Определение вида документа. +// Определение вида документа. // // Параметры: // Форма - УправляемаяФорма - Форма документа, для которого необходимо получить описание. @@ -22,7 +22,7 @@ КонецПроцедуры -// Процедура - Получение счета-фактуры, находящегося в подвале документа-основания, чья форма передана в качестве +// Получение счета-фактуры, находящегося в подвале документа-основания, чья форма передана в качестве // параметра. // // Параметры: @@ -34,11 +34,11 @@ КонецПроцедуры -// Процедура - Возможность доопределить сформированную подсказку для формы документа. +// Возможность доопределить сформированную подсказку для формы документа. // // Параметры: // Результат - Структура - содержит текст подсказки и цвет фона подсказки. -// СостояниеКонтрагента - ПеречислениеСсылка.СостоянияПроверкиКонтрагентов - текущее состояние контрагента. +// СостояниеКонтрагента - ПеречислениеСсылка.СостоянияСуществованияКонтрагента - текущее состояние контрагента. // Цвета - Структура - содержит цвета, используемые при выводе информации о состоянии контрагента. // Процедура ПослеФормированияПодсказкиВДокументе(Результат, СостояниеКонтрагента, Цвета) Экспорт @@ -51,7 +51,7 @@ #Область ПроверкаКонтрагентовВОтчетах -// Процедура - Вывод панели проверки в отчете. +// Вывод панели проверки в отчете. // // Параметры: // Форма - УправляемаяФорма - Форма отчета, для которого выводится результат проверки контрагента. @@ -71,7 +71,7 @@ #Область ПроверкаКонтрагентовВСправочнике -// Процедура - Свойства справочника контрагенты. Обязательна для заполнения! +// Свойства справочника контрагенты. Обязательна для заполнения! // Предназначена для определения имени справочника, имени реквизитов ИНН и КПП. // // Параметры: @@ -82,7 +82,7 @@ КонецПроцедуры -// Процедура - Отображение результата проверки контрагента в справочнике. +// Отображение результата проверки контрагента в справочнике. // Обязательна к заполнению. // // Параметры: @@ -102,7 +102,7 @@ #Область ПрочиеПроцедуры -// Процедура - Получение объекта (ДанныеФормыСтруктура) и ссылки(ДокументСсылка, СправочникСсылка) документа или +// Получение объекта (ДанныеФормыСтруктура) и ссылки(ДокументСсылка, СправочникСсылка) документа или // справочника, в котором выполняется проверка контрагента, по форме. // Обязательна к заполнению. // Параметры: diff --git a/SSL/src/CommonModules/РаботаСКонтрагентамиПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСКонтрагентамиПереопределяемый/Module.bsl index 7ff513a4c..40314f7bf 100644 --- a/SSL/src/CommonModules/РаботаСКонтрагентамиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКонтрагентамиПереопределяемый/Module.bsl @@ -7,7 +7,7 @@ #Область ПроверкаКонтрагентовВДокументах -// Процедура - Формирование описания расположения счета-фактуры в документе. +// Формирование описания расположения счета-фактуры в документе. // // Параметры: // Форма - УправляемаяФорма - Форма документа-основания, для которого необходимо получить описание счета-фактуры. @@ -19,7 +19,7 @@ КонецПроцедуры -// Процедура - Формирование описания расположения контрагента, находящегося в шапке документа. +// Формирование описания расположения контрагента, находящегося в шапке документа. // // Параметры: // Форма - УправляемаяФорма - Форма документа, для которой необходимо получить описание расположения контрагента. @@ -31,7 +31,7 @@ КонецПроцедуры -// Процедура - Формирование описания расположения контрагентов, находящихся в табличной части документа. +// Формирование описания расположения контрагентов, находящихся в табличной части документа. // // Параметры: // Форма - УправляемаяФорма - Форма документа, для которой необходимо получить описание. @@ -43,7 +43,7 @@ КонецПроцедуры -// Процедура - Формирование описания расположения контрагентов в счете-фактуре. +// Формирование описания расположения контрагентов в счете-фактуре. // // Параметры: // Форма - УправляемаяФорма - Форма счета-фактуры, для которой необходимо получить описание. @@ -55,7 +55,7 @@ КонецПроцедуры -// Процедура - Возвращает массив имен реквизитов счета-фактуры, содержащих контрагентов. +// Возвращает массив имен реквизитов счета-фактуры, содержащих контрагентов. // // Параметры: // Тип - Тип - Тип счета-фактуры, для которой необходимо получить описание. @@ -66,7 +66,7 @@ КонецПроцедуры -// Процедура - Получение даты документа, в котором используется проверка контрагентов. +// Получение даты документа, в котором используется проверка контрагентов. // Проверка контрагентов будет выполняться по состоянию на эту дату. // // Параметры: @@ -78,7 +78,7 @@ КонецПроцедуры -// Процедура - Определение даты в счете-фактуре. +// Определение даты в счете-фактуре. // // Параметры: // СчетФактураОбъект - ДанныеФормыСтруктура или ДокументОбъект - Счет-фактура, чью дату необходимо получить. @@ -89,7 +89,7 @@ КонецПроцедуры -// Процедура - Возможность переопределить стандартное заполнение данных о контрагентах в счет-фактурах, созданных на основании документа +// Возможность переопределить стандартное заполнение данных о контрагентах в счет-фактурах, созданных на основании документа // // Параметры: // СтандартнаяОбработка - Булево - необходимо установить в Ложь, если стандартная обработка переопределяется. @@ -103,7 +103,7 @@ КонецПроцедуры -// Процедура - Возможность переопределить стандартное сохранение результатов проверки контрагентов счет-фактур, выписанных на основании +// Возможность переопределить стандартное сохранение результатов проверки контрагентов счет-фактур, выписанных на основании // документа основания в форме документа основания // // Параметры: @@ -117,7 +117,7 @@ КонецПроцедуры -// Процедура - Возможность дополнить структуру РеквизитыПроверкиКонтрагентов при создании в форме документа +// Возможность дополнить структуру РеквизитыПроверкиКонтрагентов при создании в форме документа // // Параметры: // Форма - УправляемаяФорма, Неопределено - Форма из которой выполняется вызов. @@ -128,7 +128,7 @@ КонецПроцедуры -// Процедура - Возможность переопределить сохраняемые результаты проверки контрагентов в документе. +// Возможность переопределить сохраняемые результаты проверки контрагентов в документе. // // Параметры: // СтандартнаяОбработка - Булево - необходимо установить в Ложь, если стандартная обработка переопределяется. @@ -141,7 +141,7 @@ КонецПроцедуры -// Процедура - Отображения результата проверки контрагента в документе. +// Отображения результата проверки контрагента в документе. // // Параметры: // Форма - УправляемаяФорма - Форма документа, для которого выводится результат проверки контрагента. @@ -154,7 +154,7 @@ КонецПроцедуры -// Процедура - Прорисовать состояния контрагентов в документе. +// Прорисовать состояния контрагентов в документе. // // Параметры: // Форма - УправляемаяФорма - Форма документа, в котором выполняется проверка контрагентов. @@ -170,7 +170,7 @@ КонецПроцедуры -// Процедура - Установка условного оформления в форме выбора или списка документов. +// Установка условного оформления в форме выбора или списка документов. // // Параметры: // Список - ДинамическийСписок - Динамический список формы выбора или списка документов. @@ -180,7 +180,7 @@ КонецПроцедуры -// Процедура - Установка условного оформления в табличной части документа. +// Установка условного оформления в табличной части документа. // // Параметры: // Форма - УправляемаяФорма - Форма документа, в котором выполняется проверка контрагентов. @@ -190,7 +190,7 @@ КонецПроцедуры -// Процедура - Добавление колонки с результатом проверки контрагента в таблицу формы документа. +// Добавление колонки с результатом проверки контрагента в таблицу формы документа. // // Параметры: // Форма - УправляемаяФорма - Форма документа, в котором выполняется проверка контрагентов. @@ -204,7 +204,7 @@ #Область ПроверкаКонтрагентовВОтчетах -// Процедура - Выделение контрагента с ошибкой в строке отчета. +// Выделение контрагента с ошибкой в строке отчета. // // Параметры: // ТабличныйДокумент - ТабличныйДокумент - Табличный документ отчета, в котором выделяется строка с некорректным @@ -216,18 +216,18 @@ КонецПроцедуры -// Процедура - Предназначена для формирования отчета, в котором используется проверка контрагентов, из общего модуля. +// Предназначена для формирования отчета, в котором используется проверка контрагентов, из общего модуля. // // Параметры: // ПараметрыФормированияОтчета - Структура - Параметры, с которыми необходимо сформировать отчет. // Отчет - ТабличныйДокумент - результат формирования отчета. -Процедура СформироватьОтчет(ПараметрыФормированияОтчета, Отчет) Экспорт +Процедура СформироватьОтчет(ПараметрыФормированияОтчета, Отчет = Неопределено) Экспорт КонецПроцедуры -// Процедура - Вывод результата проверки контрагента в поле табличного документа. +// Вывод результата проверки контрагента в поле табличного документа. // // Параметры: // Форма - УправляемаяФорма - Форма отчета, в котором выполняется проверка контрагентов. @@ -239,7 +239,21 @@ КонецПроцедуры -// Процедура - Определяет, нужно ли выводить данную строку в отчете по некорректным контрагентам. +// Вывод раздела отчета с проверкой контрагента в поле табличного документа. +// +// Параметры: +// Форма - УправляемаяФорма - Форма отчета, в котором выполняется проверка контрагентов. +// ПолеТабличногоДокумента - ПолеФормы с видом ПолеТабличногоДокумента - поле, в которое необходимо выводить отчет. +// НомерРаздела - Число - Номер раздела отчета. +// СтандартнаяОбработка - Булево - Определяет, выполнять ли действие, определенное в данной процедуре или выполнить +// стандартную обработку. +Процедура ВывестиРазделОтчета(Форма, ПолеТабличногоДокумента, НомерРаздела, СтандартнаяОбработка) Экспорт + + + +КонецПроцедуры + +// Определяет, нужно ли выводить данную строку в отчете по некорректным контрагентам. // Пример см. в ПроверкаКонтрагентов.ВыводитьСтрокуОтчета. // // Параметры: @@ -257,7 +271,21 @@ КонецПроцедуры -// Процедура - Отображения результата проверки контрагента в отчете. +// Определяет, нужно ли проверять контрагентов в разделе отчета. +// +// Параметры: +// СтруктураПараметров - Структура - Параметры формирования отчета. +// Для проверки контрагентов в отчете важно наличие ключа "ДанныеДляПроверкиКонтрагентов". +// Данный ключ формируется в процедуре ДобавитьПараметрыДляПроверкиКонтрагентов. +// НомерРаздела - Число - Номер раздела отчета. +// ДополнительныеПараметры - Произвольный - Дополнительная информация, связанная с разделом. +// СтандартнаяОбработка - Булево - Определяет, выполнять ли действие, определенное в данной процедуре или выполнить +// стандартную обработку. +Процедура ОпределитьНужноЛиПроверятьКонтрагентовВРазделеОтчета(СтруктураПараметров, НомерРаздела, ДополнительныеПараметры, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Отображения результата проверки контрагента в отчете. // // Параметры: // Форма - УправляемаяФорма - Форма отчета, для которого выводится результат проверки контрагента. @@ -271,7 +299,7 @@ КонецПроцедуры -// Процедура - Установка условного оформления в форме выбора или списка справочника контрагентов. +// Установка условного оформления в форме выбора или списка справочника контрагентов. // // Параметры: // Список - ДинамическийСписок - Динамический список формы выбора или списка справочника контрагентов. @@ -285,7 +313,7 @@ #Область ПроверкаКонтрагентовВСправочнике -// Процедура - Определяется, является ли контрагент иностранным. +// Определяется, является ли контрагент иностранным. // // Параметры: // ДанныеКонтрагента - СтрокаТаблицыЗначений - Содержит информацию о контрагенте. @@ -312,7 +340,7 @@ // Определяет, является ли контрагент физическим или юридическим лицом // // Параметры: -// СтандартнаяОбработка - Булево - если стандартный механим переопределяется, то должно быть установлено значение "Ложь". +// СтандартнаяОбработка - Булево - если стандартный механизм переопределяется, то должно быть установлено значение "Ложь". // ЭтоЮрЛицо - Булево - Истина, если юридическое лицо, и Ложь, если физическое. // ДанныеКонтрагента - Структура - структура, которая содержит данные обрабатываемого контрагента. // @@ -325,79 +353,64 @@ #КонецОбласти #Область ЗаполнениеИнформацииДляДосьеКонтрагента + +// Определение состава и порядка вывода в отчет "Досье контрагента" данных из информационной базы. +// +// Параметры: +// ТаблицаОписания - ТаблицаЗначений - описание см. Отчеты.ДосьеКонтрагента.НоваяТаблицаОписаниеДанныхПрограммы. +// +Процедура ЗаполнитьОписаниеДанныхПрограммы(ТаблицаОписания) Экспорт + -// Заполнение ссылки на контрагента по данным информации о нем для отчета "Досье контрагента". + +КонецПроцедуры + +// Заполнение информации о контрагенте по данным информационной базы для отчета "Досье контрагента". // // Параметры: -// Контрагент - ОпределяемыеТипы.Контрагент - ссылка на контрагента, которая должна быть заполнена. // ИнформацияОСвязях - Структура - описание см. ДанныеЕдиныхГосРеестров.НоваяИнформацияОСвязяхЮридическогоЛица // и ДанныеЕдиныхГосРеестров.НоваяИнформацияОСвязяхПредпринимателя. +// При заполнении в структуру ИнформацияОСвязях.ДанныеПрограммы добавляются данные о контрагенте. +// Ключи структуры должны соответствовать полям ИмяДанных таблицы, заполненной +// в процедуре ЗаполнитьОписаниеДанныхПрограммы. +// Контрагент - ОпределяемыйТип.Контрагент - ссылка на контрагента в информационной базе. +// Если при вызове процедуры ссылка пустая, необходимо найти контрагента до данным, +// содержащимся в структуре ИнформацияОСвязях. // -Процедура ЗаполнитьКонтрагентаПоИнформацииОСвязях(Контрагент, ИнформацияОСвязях) Экспорт - +Процедура ДополнитьИнформациюДаннымиПрограммы(ИнформацияОСвязях, Контрагент) Экспорт -КонецПроцедуры - -// Заполнение таблицы расчетных счетов контрагента для вывода в отчет "Досье контрагента". -// -// Параметры: -// РасчетныеСчета - ТаблицаЗначений - заполняемая таблица. -// Структуру таблицы см. Отчеты.ДосьеКонтрагентов.НоваяТаблицаРасчетныеСчета. -// Контрагент - ОпределяемыеТипы.Контрагент - ссылка на контрагента из информационной базы. -// ИнформацияОСвязях - Структура - описание см. ДанныеЕдиныхГосРеестров.НоваяИнформацияОСвязяхЮридическогоЛица и -// ДанныеЕдиныхГосРеестров.НоваяИнформацияОСвязяхПредпринимателя. -// -Процедура ЗаполнитьРасчетныеСчетаИнформацииОСвязяхКонтрагента(РасчетныеСчета, Контрагент, ИнформацияОСвязях) Экспорт - - - -КонецПроцедуры - -// Заполнение таблицы контактных лиц контрагента для вывода в отчет "Досье контрагента". -// -// Параметры: -// КонтактныеЛица - ТаблицаЗначений - заполняемая таблица. -// Структуру таблицы см. Отчеты.ДосьеКонтрагентов.НоваяТаблицаКонтактныеЛица. -// Контрагент - ОпределяемыеТипы.Контрагент - ссылка на контрагента из информационной базы. -// ИнформацияОСвязях - Структура - описание см. ДанныеЕдиныхГосРеестров.НоваяИнформацияОСвязяхЮридическогоЛица и -// ДанныеЕдиныхГосРеестров.НоваяИнформацияОСвязяхПредпринимателя. -// -Процедура ЗаполнитьКонтактныеЛицаИнформацииОСвязяхКонтрагента(КонтактныеЛица, Контрагент, ИнформацияОСвязях) Экспорт - - - -КонецПроцедуры - -// Заполнение почтового адреса контрагента по данным информации о нем для вывода в отчет "Досье контрагента". -// -// Параметры: -// ПочтовыйАдрес - Строка - заполняемый адрес. -// Контрагент - ОпределяемыеТипы.Контрагент - ссылка на контрагента из информационной базы. -// ИнформацияОСвязях - Структура - описание см. ДанныеЕдиныхГосРеестров.НоваяИнформацияОСвязяхЮридическогоЛица и -// ДанныеЕдиныхГосРеестров.НоваяИнформацияОСвязяхПредпринимателя. -// -Процедура ЗаполнитьПочтовыйАдресИнформацииОСвязяхКонтрагента(ПочтовыйАдрес, Контрагент, ИнформацияОСвязях) Экспорт - - - -КонецПроцедуры + +КонецПроцедуры // Заполнение наименований видов деятельности по ОКВЭД для вывода в отчет "Досье контрагента". // // Параметры: // ВидыДеятельности - ТаблицаЗначений - см. ДанныеЕдиныхГосРеестров.НоваяТаблицаВидыДеятельности. -// В процедуре необходимо заполнить поле НаименованиеОКВЭД строк таблицы по заполненному полю КодОКВЭД. +// В процедуре необходимо заполнить в строках таблицы поле НаименованиеОКВЭД, +// соответствующее заполненному полю КодОКВЭД. // Процедура ЗаполнитьНаименованияВидовДеятельностиКонтрагента(ВидыДеятельности) Экспорт +КонецПроцедуры + +// Заполнение идентификатора конфигурации для статистики переходов по ссылкам сервиса 1С:Контрагент. +// +// Параметры: +// ИдентификаторКонфигурации - Строка - идентификатор. +// Рекомендуется использовать латинские строчные буквы и цифры. +// +Процедура ЗаполнитьИдентификаторКонфигурации(ИдентификаторКонфигурации) Экспорт + + + КонецПроцедуры #КонецОбласти #Область ПрочиеПроцедуры -// Процедура - Определение цветов выделения результатов проверки контрагентов. +// Определение цветов выделения результатов проверки контрагентов. // Для примера см. функцию ЦветаРезультатовПроверки ОМ ПроверкаКонтрагентовКлиентСервер. // // Параметры: @@ -405,6 +418,21 @@ // Список ключей см ПроверкаКонтрагентовВызовСервераПовтИсп.ЦветаРезультатовПроверки(). Процедура ОпределитьЦветаРезультатовПроверки(Цвета) Экспорт +КонецПроцедуры + +// Заполнение значений колонок ЭтоЮридическоеЛицо и ЭтоИностранныйКонтрагент +// в таблице с данными контрагента. +// Заполнять следует запросом и только те строки, в которых значения не заполнены. +// +// Параметры: +// ДанныеКонтрагентов - ТаблицаЗначений - Таблица с данными контрагентов. +// СтандартнаяОбработка - Булево - Если Истина, то заполнение будет выполнено стандартным +// образом путем перебора каждой строки таблицы. +// +Процедура ДополнитьДанныеКонтрагентов(ДанныеКонтрагентов, СтандартнаяОбработка) Экспорт + + + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl index e48397356..eb35c6a13 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl @@ -164,11 +164,9 @@ КонецПериода = ТекущаяДата; Пока Выборка.Следующий() Цикл - НачалоПериода = ?(Выборка.ДатаКурса = '198001010000', НачалоГода(ТекущаяДата), Выборка.ДатаКурса + 60*60*24); + НачалоПериода = ?(Выборка.ДатаКурса = '198001010000', НачалоГода(ДобавитьМесяц(ТекущаяДата, -12)), Выборка.ДатаКурса + 60*60*24); СписокВалют = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Выборка); - - ЗагрузитьКурсыВалютПоПараметрам( - СписокВалют, НачалоПериода, КонецПериода, ПриЗагрузкеВозниклиОшибки); + ЗагрузитьКурсыВалютПоПараметрам(СписокВалют, НачалоПериода, КонецПериода, ПриЗагрузкеВозниклиОшибки); КонецЦикла; Иначе Результат = ЗагрузитьКурсыВалютПоПараметрам(ПараметрыЗагрузки.СписокВалют, @@ -250,6 +248,7 @@ МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); Если ОбщегоНазначенияПовтИсп.РазделениеВключено() // В модели сервиса обновляется автоматически. + Или ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Или Не ПравоДоступа("Изменение", Метаданные.РегистрыСведений.КурсыВалют) Или МодульТекущиеДелаСервер.ДелоОтключено("КлассификаторВалют") Тогда Возврат; @@ -317,13 +316,22 @@ // См. описание одноименной процедуры в общем модуле РегламентныеЗаданияПереопределяемый. // -Процедура ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости) Экспорт +Процедура ПриОпределенииНастроекРегламентныхЗаданий(Зависимости) Экспорт Зависимость = Зависимости.Добавить(); Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ЗагрузкаКурсовВалют; Зависимость.ДоступноВМоделиСервиса = Ложь; Зависимость.ДоступноВАвтономномРабочемМесте = Ложь; КонецПроцедуры +// См. одноименную процедуру в общем модуле ПользователиПереопределяемый. +Процедура ПриОпределенииНазначенияРолей(НазначениеРолей) Экспорт + + // СовместноДляПользователейИВнешнихПользователей. + НазначениеРолей.СовместноДляПользователейИВнешнихПользователей.Добавить( + Метаданные.Роли.ЧтениеКурсовВалют.Имя); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -338,7 +346,7 @@ // Процедура ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры) Экспорт - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Или ОбщегоНазначенияПовтИсп.ЭтоАвтономноеРабочееМесто() Тогда КурсыОбновляютсяОтветственными = Ложь; // В модели сервиса обновляются автоматически. ИначеЕсли НЕ ПравоДоступа("Изменение", Метаданные.РегистрыСведений.КурсыВалют) Тогда КурсыОбновляютсяОтветственными = Ложь; // Пользователь не может обновлять курсы валют. @@ -420,6 +428,7 @@ Если (СтруктураКурса.Курс = 0) Или (СтруктураКурса.Кратность = 0) Тогда НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Валюта.Установить(Валюта); + НаборЗаписей.Отбор.Период.Установить(ДатаКурса); Запись = НаборЗаписей.Добавить(); Запись.Валюта = Валюта; Запись.Период = ДатаКурса; @@ -431,99 +440,6 @@ КонецПроцедуры -// Загружает информацию о курсе валюты Валюта из файла ПутьКФайлу в регистр -// сведений курсов валют. При этом файл с курсами разбирается, и записываются -// только те данные, которые удовлетворяют периоду (НачалоПериодаЗагрузки, ОкончаниеПериодаЗагрузки). -// -Функция ЗагрузитьКурсВалютыИзФайла(Знач Валюта, Знач ПутьКФайлу, Знач НачалоПериодаЗагрузки, Знач ОкончаниеПериодаЗагрузки) Экспорт - - СтатусЗагрузки = 1; - - ЧислоЗагружаемыхДнейВсего = 1 + (ОкончаниеПериодаЗагрузки - НачалоПериодаЗагрузки) / ( 24 * 60 * 60); - - ЧислоЗагруженныхДней = 0; - - Если ЭтоАдресВременногоХранилища(ПутьКФайлу) Тогда - ИмяФайла = ПолучитьИмяВременногоФайла(); - ДвоичныеДанные = ПолучитьИзВременногоХранилища(ПутьКФайлу); - ДвоичныеДанные.Записать(ИмяФайла); - Иначе - ИмяФайла = ПутьКФайлу; - КонецЕсли; - - Текст = Новый ТекстовыйДокумент(); - - РегистрКурсыВалют = РегистрыСведений.КурсыВалют; - - Текст.Прочитать(ИмяФайла, КодировкаТекста.ANSI); - КолСтрок = Текст.КоличествоСтрок(); - - Для Инд = 1 По КолСтрок Цикл - - Стр = Текст.ПолучитьСтроку(Инд); - Если (Стр = "") ИЛИ (Найти(Стр,Символы.Таб) = 0) Тогда - Продолжить; - КонецЕсли; - - Если НачалоПериодаЗагрузки = ОкончаниеПериодаЗагрузки Тогда - ДатаКурса = ОкончаниеПериодаЗагрузки; - Иначе - ДатаКурсаСтр = ВыделитьПодСтроку(Стр); - ДатаКурса = Дата(Лев(ДатаКурсаСтр,4), Сред(ДатаКурсаСтр,5,2), Сред(ДатаКурсаСтр,7,2)); - КонецЕсли; - - Кратность = Число(ВыделитьПодСтроку(Стр)); - Курс = Число(ВыделитьПодСтроку(Стр)); - - Если ДатаКурса > ОкончаниеПериодаЗагрузки Тогда - Прервать; - КонецЕсли; - - Если ДатаКурса < НачалоПериодаЗагрузки Тогда - Продолжить; - КонецЕсли; - - ЗаписьКурсовВалют = РегистрКурсыВалют.СоздатьМенеджерЗаписи(); - - ЗаписьКурсовВалют.Валюта = Валюта; - ЗаписьКурсовВалют.Период = ДатаКурса; - ЗаписьКурсовВалют.Курс = Курс; - ЗаписьКурсовВалют.Кратность = Кратность; - ЗаписьКурсовВалют.Записать(); - - ЧислоЗагруженныхДней = ЧислоЗагруженныхДней + 1; - КонецЦикла; - - Если ЭтоАдресВременногоХранилища(ПутьКФайлу) Тогда - УдалитьФайлы(ИмяФайла); - УдалитьИзВременногоХранилища(ПутьКФайлу); - КонецЕсли; - - ПояснениеОЗагрузке = ""; - Если ЧислоЗагружаемыхДнейВсего <> ЧислоЗагруженныхДней Тогда - Если ЧислоЗагруженныхДней = 0 Тогда - ПояснениеОЗагрузке = НСтр("ru = 'Курсы валюты %1 - %2 не загружены. Нет данных.'"); - Иначе - ПояснениеОЗагрузке = НСтр("ru = 'Загружены не все курсы по валюте %1 - %2.'"); - КонецЕсли; - КонецЕсли; - - Если Не ПустаяСтрока(ПояснениеОЗагрузке) Тогда - ПояснениеОЗагрузке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПояснениеОЗагрузке, Валюта.Код, Валюта.Наименование); - КонецЕсли; - - СообщенияПользователю = ПолучитьСообщенияПользователю(Истина); - СписокОшибок = Новый Массив; - Для Каждого СообщениеПользователю Из СообщенияПользователю Цикл - СписокОшибок.Добавить(СообщениеПользователю.Текст); - КонецЦикла; - СписокОшибок = ОбщегоНазначенияКлиентСервер.СвернутьМассив(СписокОшибок); - ПояснениеОЗагрузке = ?(ПустаяСтрока(ПояснениеОЗагрузке), "", Символы.ПС) + СтрСоединить(СписокОшибок, Символы.ПС); - - Возврат ПояснениеОЗагрузке; - -КонецФункции - // Возвращает массив валют, курсы которых загружаются с сайта РБК. // Функция ПолучитьМассивЗагружаемыхВалют() Экспорт @@ -583,7 +499,7 @@ // Возвращаемое значение // ТаблицаЗначений // колонка "Ссылка" - СправочникСсылка.Валюты -// колонка "Наценка" - число +// колонка "Наценка" - число. // Функция СписокЗависимыхВалют(ВалютаБазовая, ДополнительныеСвойства = Неопределено) Экспорт @@ -609,8 +525,19 @@ |ИЗ | Справочник.Валюты КАК СпрВалюты |ГДЕ - | (СпрВалюты.ОсновнаяВалюта = &ВалютаБазовая - | ИЛИ СпрВалюты.ФормулаРасчетаКурса ПОДОБНО &СимвольныйКод)"; + | СпрВалюты.ОсновнаяВалюта = &ВалютаБазовая + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | СпрВалюты.Ссылка, + | СпрВалюты.Наценка, + | СпрВалюты.СпособУстановкиКурса, + | СпрВалюты.ФормулаРасчетаКурса + |ИЗ + | Справочник.Валюты КАК СпрВалюты + |ГДЕ + | СпрВалюты.ФормулаРасчетаКурса ПОДОБНО &СимвольныйКод"; Запрос.УстановитьПараметр("ВалютаБазовая", ВалютаБазовая); Запрос.УстановитьПараметр("СимвольныйКод", "%" + ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВалютаБазовая, "Наименование") + "%"); @@ -627,65 +554,103 @@ КонецФункции -// Процедура для загрузки курсов валют по определенному периоду. -// -// Параметры: -// Валюты - Любая коллекция - со следующими полями: -// КодВалюты - числовой код валюты. -// Валюта - ссылка на валюту. -// НачалоПериодаЗагрузки - Дата - начало периода загрузки курсов. -// ОкончаниеПериодаЗагрузки - Дата - окончание периода загрузки курсов. -// -// Возвращаемое значение: -// Массив состояния загрузки - каждый элемент - структура с полями. -// Валюта - загружаемая валюта. -// СтатусОперации - завершилась ли загрузка успешно. -// Сообщение - пояснение о загрузке (текст сообщения об ошибке или поясняющее сообщение). -// -Функция ЗагрузитьКурсыВалютПоПараметрам(Знач Валюты, Знач НачалоПериодаЗагрузки, Знач ОкончаниеПериодаЗагрузки, - ПриЗагрузкеВозниклиОшибки = Ложь) Экспорт +Процедура ОбновитьКурсВалюты(Параметры, АдресРезультата) Экспорт - СостояниеЗагрузки = Новый Массив; + ПодчиненнаяВалюта = Параметры.ПодчиненнаяВалюта; + СпособУстановкиКурса = Параметры.СпособУстановкиКурса; - ПриЗагрузкеВозниклиОшибки = Ложь; + // Ожидание завершения транзакции записи валюты. + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.Валюты"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ПодчиненнаяВалюта.Ссылка); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + Блокировка.Заблокировать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; - СерверИсточник = "cbrates.rbc.ru"; - - Если НачалоПериодаЗагрузки = ОкончаниеПериодаЗагрузки Тогда - Адрес = "tsv/"; - ТМП = Формат(ОкончаниеПериодаЗагрузки, "ДФ=/yyyy/MM/dd"); // Не локализуется - путь к файлу на сервере. - Иначе - Адрес = "tsv/cb/"; - ТМП = ""; - КонецЕсли; - - Для Каждого Валюта Из Валюты Цикл - ФайлНаВебСервере = "http://" + СерверИсточник + "/" + Адрес + Прав(Валюта.КодВалюты, 3) + ТМП + ".tsv"; - Результат = ПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(ФайлНаВебСервере); + Если СпособУстановкиКурса = Перечисления.СпособыУстановкиКурсаВалюты.НаценкаНаКурсДругойВалюты Тогда + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | КурсыВалют.Период, + | КурсыВалют.Валюта, + | КурсыВалют.Курс, + | КурсыВалют.Кратность + |ИЗ + | РегистрСведений.КурсыВалют КАК КурсыВалют + |ГДЕ + | КурсыВалют.Валюта = &ВалютаИсточник"; + Запрос.УстановитьПараметр("ВалютаИсточник", ПодчиненнаяВалюта.ОсновнаяВалюта); - Если Результат.Статус Тогда - ПоясняющееСообщение = ЗагрузитьКурсВалютыИзФайла(Валюта.Валюта, Результат.Путь, НачалоПериодаЗагрузки, ОкончаниеПериодаЗагрузки) + Символы.ПС; - УдалитьФайлы(Результат.Путь); - СтатусОперации = ПустаяСтрока(ПоясняющееСообщение); - Иначе - ПоясняющееСообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Невозможно получить файл данных с курсами валюты (%1 - %2): - |%3 - |Возможно, нет доступа к веб сайту с курсами валют, либо указана несуществующая валюта.'"), - Валюта.КодВалюты, - Валюта.Валюта, - Результат.СообщениеОбОшибке); - СтатусОперации = Ложь; - ПриЗагрузкеВозниклиОшибки = Истина; + Выборка = Запрос.Выполнить().Выбрать(); + + НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Валюта.Установить(ПодчиненнаяВалюта.Ссылка); + + Наценка = ПодчиненнаяВалюта.Наценка; + + Пока Выборка.Следующий() Цикл + + НоваяЗаписьНабораКурсов = НаборЗаписей.Добавить(); + НоваяЗаписьНабораКурсов.Валюта = ПодчиненнаяВалюта.Ссылка; + НоваяЗаписьНабораКурсов.Кратность = Выборка.Кратность; + НоваяЗаписьНабораКурсов.Курс = Выборка.Курс + Выборка.Курс * Наценка / 100; + НоваяЗаписьНабораКурсов.Период = Выборка.Период; + + КонецЦикла; + + НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьКонтрольПодчиненныхВалют"); + Если ПодчиненнаяВалюта.ДополнительныеСвойства.Свойство("ЭтоНовый") Тогда + НаборЗаписей.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); + КонецЕсли; + + НаборЗаписей.Записать(); + + ИначеЕсли СпособУстановкиКурса = Перечисления.СпособыУстановкиКурсаВалюты.РасчетПоФормуле Тогда + + // Получить основные валюты для ПодчиненнаяВалюта. + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Валюты.Ссылка КАК Ссылка + |ИЗ + | Справочник.Валюты КАК Валюты + |ГДЕ + | &ФормулаРасчетаКурса ПОДОБНО ""%"" + Валюты.Наименование + ""%"""; + + Запрос.УстановитьПараметр("ФормулаРасчетаКурса", ПодчиненнаяВалюта.ФормулаРасчетаКурса); + ОсновныеВалюты = Запрос.Выполнить().Выгрузить(); + + Если ОсновныеВалюты.Количество() = 0 Тогда + ТекстОшибки = НСтр("ru = 'В формуле должна быть использована хотя бы одна основная валюта.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.ФормулаРасчетаКурса"); + ВызватьИсключение ТекстОшибки; КонецЕсли; - СостояниеЗагрузки.Добавить(Новый Структура("Валюта,СтатусОперации,Сообщение", Валюта.Валюта, СтатусОперации, ПоясняющееСообщение)); + ОбновленныеПериоды = Новый Соответствие; // Кэш для однократного пересчета курса за один и тот же период. + // Перезаписать курсы основных валют для обновления курса валюты ПодчиненнаяВалюта. + Для каждого ЗаписьОсновнойВалюты Из ОсновныеВалюты Цикл + НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Валюта.Установить(ЗаписьОсновнойВалюты.Ссылка); + НаборЗаписей.Прочитать(); + НаборЗаписей.ДополнительныеСвойства.Вставить("ОбновитьКурсЗависимойВалюты", ПодчиненнаяВалюта.Ссылка); + НаборЗаписей.ДополнительныеСвойства.Вставить("ОбновленныеПериоды", ОбновленныеПериоды); + + Если ПодчиненнаяВалюта.ДополнительныеСвойства.Свойство("ЭтоНовый") Тогда + НаборЗаписей.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); + КонецЕсли; + + НаборЗаписей.Записать(); + КонецЦикла - КонецЦикла; + КонецЕсли; - Возврат СостояниеЗагрузки; - -КонецФункции +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы. @@ -712,6 +677,13 @@ Обработчик.Процедура = "РаботаСКурсамиВалют.ЗаполнитьСпособУстановкиКурсаВалют"; Обработчик.РежимВыполнения = "Монопольно"; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.2.76"; + Обработчик.Процедура = "Справочники.Валюты.ОтключитьЗагрузкуКурсаВалюты643ИзИнтернета"; + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("dc79c561-8657-4852-bbc5-38ced6996fff"); + Обработчик.Комментарий = НСтр("ru = 'Отключает ошибочно включенную загрузку курсов валюты ""Российский рубль (643)"" из интернета.'"); + КонецПроцедуры // Обработчик обновления формата хранения прописей при переходе на более новую версию БСП. @@ -819,6 +791,186 @@ Возврат НЕ Запрос.Выполнить().Пустой(); КонецФункции +// Процедура для загрузки курсов валют по определенному периоду. +// +// Параметры: +// Валюты - Любая коллекция - со следующими полями: +// КодВалюты - числовой код валюты. +// Валюта - ссылка на валюту. +// НачалоПериодаЗагрузки - Дата - начало периода загрузки курсов. +// ОкончаниеПериодаЗагрузки - Дата - окончание периода загрузки курсов. +// +// Возвращаемое значение: +// Массив состояния загрузки - каждый элемент - структура с полями. +// Валюта - загружаемая валюта. +// СтатусОперации - завершилась ли загрузка успешно. +// Сообщение - пояснение о загрузке (текст сообщения об ошибке или поясняющее сообщение). +// +Функция ЗагрузитьКурсыВалютПоПараметрам(Знач Валюты, Знач НачалоПериодаЗагрузки, Знач ОкончаниеПериодаЗагрузки, + ПриЗагрузкеВозниклиОшибки = Ложь) + + СостояниеЗагрузки = Новый Массив; + + ПриЗагрузкеВозниклиОшибки = Ложь; + + СерверИсточник = "cbrates.rbc.ru"; + + Если НачалоПериодаЗагрузки = ОкончаниеПериодаЗагрузки Тогда + Адрес = "tsv/"; + ТМП = Формат(ОкончаниеПериодаЗагрузки, "ДФ=/yyyy/MM/dd"); // Не локализуется - путь к файлу на сервере. + Иначе + Адрес = "tsv/cb/"; + ТМП = ""; + КонецЕсли; + + Для Каждого Валюта Из Валюты Цикл + ФайлНаВебСервере = "http://" + СерверИсточник + "/" + Адрес + Прав(Валюта.КодВалюты, 3) + ТМП + ".tsv"; + Результат = ПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(ФайлНаВебСервере); + + Если Результат.Статус Тогда + ПоясняющееСообщение = ЗагрузитьКурсВалютыИзФайла(Валюта.Валюта, Результат.Путь, НачалоПериодаЗагрузки, ОкончаниеПериодаЗагрузки) + Символы.ПС; + УдалитьФайлы(Результат.Путь); + СтатусОперации = ПустаяСтрока(ПоясняющееСообщение); + Иначе + ПоясняющееСообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Невозможно получить файл данных с курсами валюты (%1 - %2): + |%3 + |Возможно, нет доступа к веб сайту с курсами валют, либо указана несуществующая валюта.'"), + Валюта.КодВалюты, + Валюта.Валюта, + Результат.СообщениеОбОшибке); + СтатусОперации = Ложь; + ПриЗагрузкеВозниклиОшибки = Истина; + КонецЕсли; + + СостояниеЗагрузки.Добавить(Новый Структура("Валюта,СтатусОперации,Сообщение", Валюта.Валюта, СтатусОперации, ПоясняющееСообщение)); + + КонецЦикла; + + Возврат СостояниеЗагрузки; + +КонецФункции + +// Загружает информацию о курсе валюты Валюта из файла ПутьКФайлу в регистр +// сведений курсов валют. При этом файл с курсами разбирается, и записываются +// только те данные, которые удовлетворяют периоду (НачалоПериодаЗагрузки, ОкончаниеПериодаЗагрузки). +// +Функция ЗагрузитьКурсВалютыИзФайла(Знач Валюта, Знач ПутьКФайлу, Знач НачалоПериодаЗагрузки, Знач ОкончаниеПериодаЗагрузки) + + СтатусЗагрузки = 1; + + ЧислоЗагружаемыхДнейВсего = 1 + (ОкончаниеПериодаЗагрузки - НачалоПериодаЗагрузки) / ( 24 * 60 * 60); + + ЧислоЗагруженныхДней = 0; + + Если ЭтоАдресВременногоХранилища(ПутьКФайлу) Тогда + ИмяФайла = ПолучитьИмяВременногоФайла(); + ДвоичныеДанные = ПолучитьИзВременногоХранилища(ПутьКФайлу); + ДвоичныеДанные.Записать(ИмяФайла); + Иначе + ИмяФайла = ПутьКФайлу; + КонецЕсли; + + Текст = Новый ТекстовыйДокумент(); + + + Текст.Прочитать(ИмяФайла, КодировкаТекста.ANSI); + + ДатаЗапрета = Неопределено; + Для НомерСтроки = 1 По Текст.КоличествоСтрок() Цикл + + Стр = Текст.ПолучитьСтроку(НомерСтроки); + Если (Стр = "") ИЛИ (СтрНайти(Стр, Символы.Таб) = 0) Тогда + Продолжить; + КонецЕсли; + + Если НачалоПериодаЗагрузки = ОкончаниеПериодаЗагрузки Тогда + ДатаКурса = ОкончаниеПериодаЗагрузки; + Иначе + ДатаКурсаСтр = ВыделитьПодСтроку(Стр); + ДатаКурса = Дата(Лев(ДатаКурсаСтр,4), Сред(ДатаКурсаСтр,5,2), Сред(ДатаКурсаСтр,7,2)); + КонецЕсли; + + Кратность = Число(ВыделитьПодСтроку(Стр)); + Курс = Число(ВыделитьПодСтроку(Стр)); + + Если ДатаКурса > ОкончаниеПериодаЗагрузки Тогда + Прервать; + КонецЕсли; + + Если ДатаКурса < НачалоПериодаЗагрузки Тогда + Продолжить; + КонецЕсли; + + НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Валюта.Установить(Валюта); + НаборЗаписей.Отбор.Период.Установить(ДатаКурса); + Запись = НаборЗаписей.Добавить(); + Запись.Валюта = Валюта; + Запись.Период = ДатаКурса; + Запись.Курс = Курс; + Запись.Кратность = Кратность; + + Записывать = Истина; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда + МодульДатыЗапретаИзмененияСлужебный = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзмененияСлужебный"); + Если МодульДатыЗапретаИзмененияСлужебный.ЗапретИзмененияПроверяется(Метаданные.РегистрыСведений.КурсыВалют) Тогда + МодульДатыЗапретаИзменения = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзменения"); + Записывать = Не МодульДатыЗапретаИзменения.ИзменениеЗапрещено(НаборЗаписей); + Если Не Записывать Тогда + Если ДатаЗапрета = Неопределено Тогда + ДатаЗапрета = ДатаКурса; + Иначе + ДатаЗапрета = Макс(ДатаЗапрета, ДатаКурса); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если Записывать Тогда + НаборЗаписей.Записать(); + КонецЕсли; + + ЧислоЗагруженныхДней = ЧислоЗагруженныхДней + 1; + КонецЦикла; + + Если ЭтоАдресВременногоХранилища(ПутьКФайлу) Тогда + УдалитьФайлы(ИмяФайла); + УдалитьИзВременногоХранилища(ПутьКФайлу); + КонецЕсли; + + ПояснениеОЗагрузке = ""; + Если ЧислоЗагружаемыхДнейВсего <> ЧислоЗагруженныхДней Тогда + Если ЧислоЗагруженныхДней = 0 Тогда + ПояснениеОЗагрузке = НСтр("ru = 'Курсы валюты %1 (%2) не загружены. Нет данных.'"); + Иначе + ПояснениеОЗагрузке = НСтр("ru = 'Загружены не все курсы по валюте %1 (%2).'"); + КонецЕсли; + КонецЕсли; + + Если Не ПустаяСтрока(ПояснениеОЗагрузке) Тогда + ПояснениеОЗагрузке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПояснениеОЗагрузке, Валюта.Наименование, Валюта.Код); + КонецЕсли; + + Если ДатаЗапрета <> Неопределено Тогда + ПояснениеОЗагрузке = ПояснениеОЗагрузке + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Загрузка курсов валюты %1(%2) ограничена датой запрета изменений %3. + |Курсы запрещенного периода были пропущены при загрузке.'"), Валюта.Наименование, Валюта.Код, Формат(ДатаЗапрета, "ДЛФ=D")); + КонецЕсли; + + ПояснениеОЗагрузке = СокрЛП(ПояснениеОЗагрузке); + + СообщенияПользователю = ПолучитьСообщенияПользователю(Истина); + СписокОшибок = Новый Массив; + Для Каждого СообщениеПользователю Из СообщенияПользователю Цикл + СписокОшибок.Добавить(СообщениеПользователю.Текст); + КонецЦикла; + СписокОшибок = ОбщегоНазначенияКлиентСервер.СвернутьМассив(СписокОшибок); + ПояснениеОЗагрузке = ПояснениеОЗагрузке + ?(ПустаяСтрока(ПояснениеОЗагрузке), "", Символы.ПС) + СтрСоединить(СписокОшибок, Символы.ПС); + + Возврат ПояснениеОЗагрузке; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Локальные служебные процедуры и функции. @@ -848,27 +1000,6 @@ КонецФункции -// Возвращает список валют, курсы которых загружаются из Интернета. -Функция ВалютыЗагружаемыеИзИнтернета() Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | Валюты.Ссылка КАК Валюта, - | Валюты.Код КАК КодВалюты - |ИЗ - | Справочник.Валюты КАК Валюты - |ГДЕ - | Валюты.СпособУстановкиКурса = ЗНАЧЕНИЕ(Перечисление.СпособыУстановкиКурсаВалюты.ЗагрузкаИзИнтернета) - | И НЕ Валюты.ПометкаУдаления - | - |УПОРЯДОЧИТЬ ПО - | Валюты.НаименованиеПолное"; - - Возврат Запрос.Выполнить().Выгрузить(); - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в другие подсистемы. @@ -876,7 +1007,7 @@ // в зависимости от способа установки курса валют. // // Параметры: -// Валюта - СправочникОбъект.Валюты +// Валюта - СправочникОбъект.Валюты. // Функция ПриОбновленииКурсовВалютВМоделиСервиса(Валюта) Экспорт diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалютВызовСервера/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалютВызовСервера/Module.bsl index 15d6959fa..5530f8cf0 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалютВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалютВызовСервера/Module.bsl @@ -5,12 +5,6 @@ #Область СлужебныеПроцедурыИФункции -// Загружает информацию о курсе валюты. -// -Функция ЗагрузитьКурсВалютыИзФайла(Валюта, ПутьКФайлу, НачалоПериодаЗагрузки, ОкончаниеПериодаЗагрузки) Экспорт - Возврат РаботаСКурсамиВалют.ЗагрузитьКурсВалютыИзФайла(Валюта, ПутьКФайлу, НачалоПериодаЗагрузки, ОкончаниеПериодаЗагрузки); -КонецФункции - // Проверяет актуальность курсов всех валют. // Функция КурсыАктуальны() Экспорт diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl index a4a6acfe3..615556cf6 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl @@ -48,7 +48,7 @@ Возврат Окр((Сумма * ПараметрыТекущегоКурса.Курс * ПараметрыНовогоКурса.Кратность) / (ПараметрыНовогоКурса.Курс * ПараметрыТекущегоКурса.Кратность), 2); КонецФункции -// Устарела: Следует использовать функцию ПересчитатьПоКурсу. +// Устарела. Следует использовать функцию ПересчитатьПоКурсу. // // Пересчитывает сумму из валюты ВалютаНач по курсу ПоКурсуНач // в валюту ВалютаКон по курсу ПоКурсуКон. diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl index e742644e1..25ad66cc7 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/Module.bsl @@ -17,6 +17,11 @@ // Адрес - строка - почтовый адрес. // Представление - строка - имя адресата. // +// * ПолучателиСообщения - Массив - массив структур, описывающий получателей: +// * ИсточникКонтактнойИнформации - СправочникСсылка - владелец контактной информации. +// * Адрес - Строка - Почтовый адрес получателя сообщения. +// * Представление - Строка - представление адресата. +// // * Копии - Массив - коллекция структур адресов: // * Адрес - строка - почтовый адрес (должно быть обязательно заполнено). // * Представление - строка - имя адресата. @@ -113,7 +118,13 @@ КонецЕсли; КонецЕсли; - Возврат РаботаСПочтовымиСообщениямиСлужебный.ОтправитьСообщение(УчетнаяЗапись, ПараметрыПисьма, Соединение); + ИдентификаторСообщения = РаботаСПочтовымиСообщениямиСлужебный.ОтправитьСообщение(УчетнаяЗапись, ПараметрыПисьма, Соединение); + + Если ЗначениеЗаполнено(ИдентификаторСообщения) Тогда + РаботаСПочтовымиСообщениямиПереопределяемый.ПослеОтправкиПисьма(ПараметрыПисьма); + КонецЕсли; + + Возврат ИдентификаторСообщения; КонецФункции @@ -167,7 +178,12 @@ "ВЫБРАТЬ РАЗРЕШЕННЫЕ | УчетныеЗаписиЭлектроннойПочты.Ссылка КАК Ссылка, | УчетныеЗаписиЭлектроннойПочты.Наименование КАК Наименование, - | УчетныеЗаписиЭлектроннойПочты.АдресЭлектроннойПочты КАК Адрес + | УчетныеЗаписиЭлектроннойПочты.АдресЭлектроннойПочты КАК Адрес, + | ВЫБОР + | КОГДА УчетныеЗаписиЭлектроннойПочты.Ссылка = ЗНАЧЕНИЕ(Справочник.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты) + | ТОГДА 0 + | ИНАЧЕ 1 + | КОНЕЦ КАК Приоритет |ИЗ | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты |ГДЕ @@ -197,7 +213,11 @@ | КОГДА УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляОтправки | ТОГДА УчетныеЗаписиЭлектроннойПочты.СерверИсходящейПочты <> """" | ИНАЧЕ ИСТИНА - | КОНЕЦ"; + | КОНЕЦ + | + |УПОРЯДОЧИТЬ ПО + | Приоритет, + | Наименование"; Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; @@ -231,10 +251,50 @@ КонецФункции -// Возвращает Истину, если есть по меньшей мере одна настроенная учетная запись для отправки почты. +// Возвращает Истину, если доступна по меньшей мере одна настроенная учетная запись для отправки почты, +// либо достаточно прав на настройку учетной записи. Функция ДоступнаОтправкаПисем() Экспорт - Возврат ДоступныеУчетныеЗаписи(Истина).Количество() > 0 - Или ПравоДоступа("Изменение", Метаданные.Справочники.УчетныеЗаписиЭлектроннойПочты); + + Если ПравоДоступа("Изменение", Метаданные.Справочники.УчетныеЗаписиЭлектроннойПочты) Тогда + Возврат Истина; + КонецЕсли; + + Если Не ПравоДоступа("Чтение", Метаданные.Справочники.УчетныеЗаписиЭлектроннойПочты) Тогда + Возврат Ложь; + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 + | 1 КАК Количество + |ИЗ + | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты + |ГДЕ + | НЕ УчетныеЗаписиЭлектроннойПочты.ПометкаУдаления + | И УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляОтправки + | И УчетныеЗаписиЭлектроннойПочты.АдресЭлектроннойПочты <> """" + | И УчетныеЗаписиЭлектроннойПочты.СерверИсходящейПочты <> """""; + + Запрос = Новый Запрос(ТекстЗапроса); + Выборка = Запрос.Выполнить().Выбрать(); + + Возврат Выборка.Следующий(); + +КонецФункции + +// Проверяет, настроена ли учетная запись для отправки и/или получения почты. +// +// Параметры: +// УчетнаяЗапись - Справочники.УчетныеЗаписиЭлектроннойПочты - проверяемая учетная запись; +// ДляОтправки - Булево - проверять параметры, необходимые для отправки почты; +// ДляПолучения - Булево - проверять параметры, необходимые для получения почты. +// +// Возвращаемое значение: +// Булево. +Функция УчетнаяЗаписьНастроена(УчетнаяЗапись, ДляОтправки = Истина, ДляПолучения = Истина) Экспорт + Параметры = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(УчетнаяЗапись, "АдресЭлектроннойПочты,СерверВходящейПочты,СерверИсходящейПочты"); + Возврат Не (ПустаяСтрока(Параметры.АдресЭлектроннойПочты) + Или ДляПолучения И ПустаяСтрока(Параметры.СерверВходящейПочты) + Или ДляОтправки И ПустаяСтрока(Параметры.СерверИсходящейПочты)); КонецФункции #КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиВызовСервера/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиВызовСервера/Module.bsl index b7c4f655e..92e36e7f3 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиВызовСервера/Module.bsl @@ -5,16 +5,6 @@ #Область СлужебныеПроцедурыИФункции -// Возвращает указан ли в учетной записи пароль или нет. -// -// См. описание функции РаботаСПочтовымиСообщениямиСлужебный.ПарольЗадан. -// -Функция ПарольЗадан(УчетнаяЗапись) Экспорт - - Возврат РаботаСПочтовымиСообщениямиСлужебный.ПарольЗадан(УчетнаяЗапись); - -КонецФункции - // Проверка учетной записи электронной почты. // // См. описание процедуры РаботаСПочтовымиСообщениямиСлужебный.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты. @@ -36,7 +26,7 @@ КонецФункции Функция УчетнаяЗаписьНастроена(УчетнаяЗапись) Экспорт - Возврат Справочники.УчетныеЗаписиЭлектроннойПочты.УчетнаяЗаписьНастроена(УчетнаяЗапись); + Возврат РаботаСПочтовымиСообщениями.УчетнаяЗаписьНастроена(УчетнаяЗапись); КонецФункции #КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl index b656411f6..2c956d9bd 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl @@ -31,7 +31,8 @@ // *** Представление - Строка - имя файла вложения; // *** АдресВоВременномХранилище - Строка - адрес двоичных данных вложения во временном хранилище. // *** Кодировка - Строка - кодировка вложения (используется, если отличается от кодировки письма). -// +// *** Идентификатор - Строка - (необязательный) используется для отметки картинок, отображаемых в теле письма. +// // * УдалятьФайлыПослеОтправки - Булево - удалять временные файлы после отправки сообщения. // // ОповещениеОЗакрытииФормы - ОписаниеОповещения - процедура, в которую необходимо передать управление после закрытия @@ -118,6 +119,15 @@ Возврат; КонецЕсли; + ОповещениеОЗакрытииФормы = ПараметрыОтправки.ОповещениеОЗакрытииФормы; + + СтандартнаяОбработка = Истина; + РаботаСПочтовымиСообщениямиКлиентПереопределяемый.ПередОткрытиемФормыОтправкиПисьма(ПараметрыОтправки, ОповещениеОЗакрытииФормы, СтандартнаяОбработка); + + Если Не СтандартнаяОбработка Тогда + Возврат; + КонецЕсли; + ПараметрыОтправки.Свойство("Отправитель", Отправитель); ПараметрыОтправки.Свойство("Получатель", Получатель); ПараметрыОтправки.Свойство("Тема", Тема); @@ -125,13 +135,12 @@ ПараметрыОтправки.Свойство("Вложения", Вложения); ПараметрыОтправки.Свойство("УдалятьФайлыПослеОтправки", УдалятьФайлыПослеОтправки); - ОповещениеОЗакрытииФормы = ПараметрыОтправки.ОповещениеОЗакрытииФормы; Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") И СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().СозданиеИсходящихПисемДоступно Тогда МодульВзаимодействияКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВзаимодействияКлиент"); МодульВзаимодействияКлиент.ОткрытьФормуОтправкиПочтовогоСообщения(Отправитель, - Получатель, Тема, Текст, Вложения, ОповещениеОЗакрытииФормы); + Получатель, Тема, Текст, Вложения, , ОповещениеОЗакрытииФормы); Иначе ОткрытьПростуюФормуОтправкиПочтовогоСообщения(Отправитель, Получатель, Тема,Текст, Вложения, УдалятьФайлыПослеОтправки, ОповещениеОЗакрытииФормы); @@ -176,7 +185,7 @@ // // См. описание процедуры РаботаСПочтовымиСообщениямиСлужебный.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты. // -Процедура ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(ОбработчикРезультата, УчетнаяЗапись) Экспорт +Процедура ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(ОбработчикРезультата, УчетнаяЗапись) СообщениеОбОшибке = ""; ДополнительноеСообщение = ""; diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиентПереопределяемый/Module.bsl new file mode 100644 index 000000000..45a0c494b --- /dev/null +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиентПереопределяемый/Module.bsl @@ -0,0 +1,21 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Работа с почтовыми сообщениями". +// +//////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Вызывается перед открытием формы нового письма. +// Открытие формы может быть отменено изменением параметра СтандартнаяОбработка. +// +// Параметры: +// ПараметрыОтправки - Структура - см. описание в РаботаСПочтовымиСообщениямиКлиент.СоздатьНовоеПисьмо; +// ОбработчикЗавершения - ОписаниеОповещения - описание процедуры, которая будет вызвана после завершения +// отправки письма. +// СтандартнаяОбработка - Булево - признак продолжения открытия формы нового письма после выхода из этой +// процедуры. Если установить Ложь, форма письма открыта не будет. +Процедура ПередОткрытиемФормыОтправкиПисьма(ПараметрыОтправки, ОбработчикЗавершения, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиентПереопределяемый/РаботаСПочтовымиСообщениямиКлиентПереопределяемый.mdo b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиентПереопределяемый/РаботаСПочтовымиСообщениямиКлиентПереопределяемый.mdo new file mode 100644 index 000000000..ff3775662 --- /dev/null +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиентПереопределяемый/РаботаСПочтовымиСообщениямиКлиентПереопределяемый.mdo @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="80eb2a49-8c0e-4f92-b99c-7fdadca03e7b"> + <name>РаботаСПочтовымиСообщениямиКлиентПереопределяемый</name> + <synonym> + <key>ru</key> + <value>Работа с почтовыми сообщениями клиент переопределяемый</value> + </synonym> + <clientManagedApplication>true</clientManagedApplication> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиПереопределяемый/Module.bsl new file mode 100644 index 000000000..4b20a5950 --- /dev/null +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиПереопределяемый/Module.bsl @@ -0,0 +1,61 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Работа с почтовыми сообщениями". +// +//////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Позволяет выполнить дополнительные операции после отправки почтового сообщения. +// +// Параметры: +// ПараметрыПисьма - Структура - содержит всю необходимую информацию о письме: +// * Кому - Массив структур, строка - (обязательный) Интернет адрес получателя письма. +// Адрес - строка - почтовый адрес. +// Представление - строка - имя адресата. +// +// * ПолучателиСообщения - Массив - массив структур, описывающий получателей: +// * ИсточникКонтактнойИнформации - СправочникСсылка - владелец контактной информации. +// * Адрес - Строка - Почтовый адрес получателя сообщения. +// * Представление - Строка - представление адресата. +// +// * Копии - Массив - коллекция структур адресов: +// * Адрес - строка - почтовый адрес (должно быть обязательно заполнено). +// * Представление - строка - имя адресата. +// +// - Строка - интернет адреса получателей письма, разделитель - ";". +// +// * СлепыеКопии - Массив, Строка - см. описание поля Копии. +// +// * Тема - Строка - (обязательный) тема почтового сообщения. +// * Тело - Строка - (обязательный) текст почтового сообщения (простой текст в кодировке win-1251). +// * Важность - ВажностьИнтернетПочтовогоСообщения. +// * Вложения - Соответствие - список вложений, где: +// * ключ - Строка - наименование вложения +// * значение - ДвоичныеДанные, АдресВоВременномХранилище - данные вложения; +// - Структура - содержащая следующие свойства: +// * ДвоичныеДанные - ДвоичныеДанные - двоичные данные вложения +// * Идентификатор - Строка - идентификатор вложения, используется для хранения картинок, +// отображаемых в теле письма. +// +// * АдресОтвета - Соответствие - см. описание поля Кому. +// * Пароль - Строка - пароль для доступа к учетной записи. +// * ИдентификаторыОснований - Строка - идентификаторы оснований данного письма. +// * ОбрабатыватьТексты - Булево - необходимость обрабатывать тексты письма при отправке. +// * УведомитьОДоставке - Булево - необходимость запроса уведомления о доставке. +// * УведомитьОПрочтении - Булево - необходимость запроса уведомления о прочтении. +// * ТипТекста - Строка, Перечисление.ТипыТекстовЭлектронныхПисем, ТипТекстаПочтовогоСообщения - определяет тип +// переданного теста допустимые значения: +// HTML/ТипыТекстовЭлектронныхПисем.HTML - текст почтового сообщения в формате HTML. +// ПростойТекст/ТипыТекстовЭлектронныхПисем.ПростойТекст - простой текст почтового сообщения. +// Отображается "как есть" (значение по +// умолчанию). +// РазмеченныйТекст/ТипыТекстовЭлектронныхПисем.РазмеченныйТекст - текст почтового сообщения в формате +// Rich Text. +// +Процедура ПослеОтправкиПисьма(ПараметрыПисьма) Экспорт + + + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиПереопределяемый/РаботаСПочтовымиСообщениямиПереопределяемый.mdo b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиПереопределяемый/РаботаСПочтовымиСообщениямиПереопределяемый.mdo new file mode 100644 index 000000000..84f46f632 --- /dev/null +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиПереопределяемый/РаботаСПочтовымиСообщениямиПереопределяемый.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="3f7ee937-d853-47b7-a1f5-d821208e3531"> + <name>РаботаСПочтовымиСообщениямиПереопределяемый</name> + <synonym> + <key>ru</key> + <value>Работа с почтовыми сообщениями переопределяемый</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl index 90aee0270..f36739bb5 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиСлужебный/Module.bsl @@ -368,9 +368,12 @@ Для Каждого Вложение Из Вложения Цикл Если ТипЗнч(Вложение) = Тип("Структура") Тогда НовоеВложение = Письмо.Вложения.Добавить(ПолучитьИзВременногоХранилища(Вложение.АдресВоВременномХранилище), Вложение.Представление); - Если Не ПустаяСтрока(Вложение.Кодировка) Тогда + Если Вложение.Свойство("Кодировка") И Не ПустаяСтрока(Вложение.Кодировка) Тогда НовоеВложение.Кодировка = Вложение.Кодировка; КонецЕсли; + Если Вложение.Свойство("Идентификатор") Тогда + НовоеВложение.Идентификатор = Вложение.Идентификатор; + КонецЕсли; Иначе // Поддержка обратной совместимости с 2.2.1. Если ТипЗнч(Вложение.Значение) = Тип("Структура") Тогда НовоеВложение = Письмо.Вложения.Добавить(Вложение.Значение.ДвоичныеДанные, Вложение.Ключ); @@ -597,23 +600,6 @@ КонецФункции -// Устанавливает соединение с сервером электронной почты. -// Параметры: -// Профиль - ИнтернетПочтовыйПрофиль - профиль учетной записи электронной -// почты, через который необходимо установить соединение. -// -// Возвращаемое значение: -// Соединение (тип ИнтернетПочта) -// -Функция УстановитьСоединениеССерверомЭлектроннойПочты(Профиль) Экспорт - - Соединение = Новый ИнтернетПочта; - Соединение.Подключиться(Профиль); - - Возврат Соединение; - -КонецФункции - // Функция записывает адаптированный набор писем по переданным колонкам. // Значения колонок, типы которых не поддерживаются для оперирования на клиенте // преобразуются к строковому виду. @@ -843,17 +829,6 @@ // Проверка учетной записи // -// Возвращает указан ли в учетной записи пароль или нет. -// -Функция ПарольЗадан(УчетнаяЗапись) Экспорт - - УстановитьПривилегированныйРежим(Истина); - Пароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(УчетнаяЗапись, "Пароль"); - УстановитьПривилегированныйРежим(Ложь); - Возврат ЗначениеЗаполнено(Пароль); - -КонецФункции - // Служебная функция используется для проверки учетной записи электронной почты. // Процедура ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, СообщениеОбОшибке, ДополнительноеСообщение) Экспорт @@ -958,15 +933,25 @@ КонецПроцедуры // Отключает все учетные записи. Используется при начальной настройке узла РИБ. -Процедура ОтключитьИспользованиеУчетныхЗаписей() Экспорт +Процедура ОтключитьИспользованиеУчетныхЗаписей() + ТекстЗапроса = "ВЫБРАТЬ | УчетныеЗаписиЭлектроннойПочты.Ссылка |ИЗ | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты |ГДЕ - | (УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляОтправки - | ИЛИ УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляПолучения)"; + | УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляПолучения + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | УчетныеЗаписиЭлектроннойПочты.Ссылка + |ИЗ + | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты + |ГДЕ + | УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляОтправки"; + Запрос = Новый Запрос(ТекстЗапроса); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл @@ -976,6 +961,7 @@ УчетнаяЗапись.ОбменДанными.Загрузка = Истина; УчетнаяЗапись.Записать(); КонецЦикла; + КонецПроцедуры // Обработчики событий подсистемы Обмен данными. diff --git a/SSL/src/CommonModules/РаботаСФайлами/Module.bsl b/SSL/src/CommonModules/РаботаСФайлами/Module.bsl index eca97aa15..2cecd13f1 100644 --- a/SSL/src/CommonModules/РаботаСФайлами/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайлами/Module.bsl @@ -113,7 +113,7 @@ Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл - Если ПометкаУдаления И Не Выборка.Редактирует.Пустая() Тогда + Если ПометкаУдаления И ЗначениеЗаполнено(Выборка.Редактирует) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = '""%1"" не может быть удален, |т.к. содержит файл ""%2"", diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl index dc262d60c..f214bb7da 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl @@ -142,6 +142,12 @@ КонецПроцедуры +// Выполняет печать файлов. +// +// Параметры: +// ДанныеФайлов - Массив - массив структур с данными файлов. +// ИдентификаторФормы - УникальныйИдентификатор - идентификатор управляемой формы. +// Процедура НапечататьФайлы(ДанныеФайлов, УникальныйИдентификатор = Неопределено) Экспорт ПараметрыВыполнения = Новый Структура; @@ -153,6 +159,15 @@ КонецПроцедуры +// Процедура печати Файла +// +// Параметры: +// ОбработчикРезультата - ОписаниеОповещения для дальнейшего вызова. +// ПараметрыВыполнения - Структура - со свойствами: +// * НомерФайла - Число - номер текущего файла, +// * ДанныеФайла - Структура - данные файла, +// * УникальныйИдентификатор - УникальныйИдентификатор. +// Процедура НапечататьФайлыВыполнение(ОбработчикРезультата, ПараметрыВыполнения) Экспорт ОбработкаПрерыванияПользователя(); @@ -171,6 +186,14 @@ КонецПроцедуры +// Процедура печати Файла после получения на диск +// +// Параметры: +// ПараметрыВыполнения - Структура - со свойствами: +// * НомерФайла - Число - номер текущего файла, +// * ДанныеФайла - Структура - данные файла, +// * УникальныйИдентификатор - УникальныйИдентификатор. +// Процедура НапечататьФайлПослеПолученияВерсииВРабочийКаталог(Результат, ПараметрыВыполнения) Экспорт Если Результат.ФайлПолучен Тогда @@ -191,6 +214,38 @@ КонецПроцедуры +// Выполняет печать файла внешним приложением. +// +// Параметры +// ИмяОткрываемогоФайла - Строка - полное имя файла. +// +Процедура НапечататьИзПриложенияПоИмениФайла(ИмяОткрываемогоФайла) Экспорт + + Если Не ЗначениеЗаполнено(ИмяОткрываемогоФайла) Тогда + Возврат; + КонецЕсли; + + СистемнаяИнфо = Новый СистемнаяИнформация; + Если СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86 + Или СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда + + Shell = Новый COMОбъект("Shell.Application"); + Shell.ShellExecute(ИмяОткрываемогоФайла, "", "", "print", 1); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Процедура предназначена для печати файла соответствующим приложением +// +// Параметры +// ДанныеФайла - Структура - данные файла. +// ИмяОткрываемогоФайла - Строка - полное имя файла. +// Процедура НапечататьФайлПриложением(ДанныеФайла, ИмяОткрываемогоФайла) РасширенияИсключения = @@ -242,21 +297,4 @@ КонецПроцедуры -Процедура НапечататьИзПриложенияПоИмениФайла(ИмяОткрываемогоФайла) Экспорт - - Если Не ЗначениеЗаполнено(ИмяОткрываемогоФайла) Тогда - Возврат; - КонецЕсли; - - СистемнаяИнфо = Новый СистемнаяИнформация; - Если СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86 - Или СистемнаяИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда - - Shell = Новый COMОбъект("Shell.Application"); - Shell.ShellExecute(ИмяОткрываемогоФайла, "", "", "print", 1); - - КонецЕсли; - -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl index c2c284a05..de6118059 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl @@ -3,54 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -#Область СлужебныеПроцедурыИФункции - -// Определить, можно ли занять файл и, если нет, то сформировать текст ошибки. -// -// Параметры: -// ДанныеФайла - Структура - структура с данными файла. -// СтрокаОшибки - Строка - (возвращаемое значение) - если файл занять нельзя, -// тогда содержит описание ошибки. -// -// Возвращаемое значение: -// Булево - если Истина, тогда текущий пользователь может занять файл или -// файл уже занят текущим пользователем. -// -Функция МожноЛиЗанятьФайл(ДанныеФайла, СтрокаОшибки = "") Экспорт - - Если ДанныеФайла.ПометкаУдаления = Истина Тогда - СтрокаОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Нельзя занять файл ""%1"", - |т.к. он помечен на удаление.'"), - Строка(ДанныеФайла.Ссылка)); - Возврат Ложь; - КонецЕсли; - - Результат = ДанныеФайла.Редактирует.Пустая() Или ДанныеФайла.РедактируетТекущийПользователь; - Если Не Результат Тогда - СтрокаОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Файл ""%1"" - |уже занят для редактирования пользователем - |""%2"" с %3.'"), - Строка(ДанныеФайла.Ссылка), - Строка(ДанныеФайла.Редактирует), - Формат(ДанныеФайла.ДатаЗаема, "ДЛФ=ДВ")); - КонецЕсли; - - Возврат Результат; - -КонецФункции - -// Возвращает строковую константу для формирования сообщений журнала регистрации. -// -// Возвращаемое значение: -// Строка -// -Функция СобытиеЖурналаРегистрации() Экспорт - - Возврат НСтр("ru = 'Файлы'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - -КонецФункции +#Область СлужебныйПрограммныйИнтерфейс // Инициализирует структуру со сведениями о файле. // @@ -116,3 +69,54 @@ КонецФункции #КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Определить, можно ли занять файл и, если нет, то сформировать текст ошибки. +// +// Параметры: +// ДанныеФайла - Структура - структура с данными файла. +// СтрокаОшибки - Строка - (возвращаемое значение) - если файл занять нельзя, +// тогда содержит описание ошибки. +// +// Возвращаемое значение: +// Булево - если Истина, тогда текущий пользователь может занять файл или +// файл уже занят текущим пользователем. +// +Функция МожноЛиЗанятьФайл(ДанныеФайла, СтрокаОшибки = "") Экспорт + + Если ДанныеФайла.ПометкаУдаления = Истина Тогда + СтрокаОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Нельзя занять файл ""%1"", + |т.к. он помечен на удаление.'"), + Строка(ДанныеФайла.Ссылка)); + Возврат Ложь; + КонецЕсли; + + Результат = Не ЗначениеЗаполнено(ДанныеФайла.Редактирует) Или ДанныеФайла.РедактируетТекущийПользователь; + Если Не Результат Тогда + СтрокаОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Файл ""%1"" + |уже занят для редактирования пользователем + |""%2"" с %3.'"), + Строка(ДанныеФайла.Ссылка), + Строка(ДанныеФайла.Редактирует), + Формат(ДанныеФайла.ДатаЗаема, "ДЛФ=ДВ")); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает строковую константу для формирования сообщений журнала регистрации. +// +// Возвращаемое значение: +// Строка +// +Функция СобытиеЖурналаРегистрации() Экспорт + + Возврат НСтр("ru = 'Файлы'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + +КонецФункции + +#КонецОбласти diff --git a/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl index e77b7f7bb..b9cfb633c 100644 --- a/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl @@ -64,8 +64,29 @@ // Формирует массив метаданных, которые не должны выводиться в настройках очистки файлов. // -// Возвращаемое значение: -// Массив - массив, содержащий метаданные, которые не должны выводиться в настройках очистки файлов. +// Параметры: +// МассивИсключений - Массив - метаданные, которые не должны выводиться в настройках очистки файлов. +// +// Например: +// МассивИсключений.Добавить(Метаданные.Справочники._ДемоНоменклатураПрисоединенныеФайлы); +// +Процедура ПриОпределенииОбъектовИсключенияОчисткиФайлов(МассивИсключений) Экспорт + +КонецПроцедуры + +// Формирует массив метаданных, которые не должны выводиться в настройках синхронизации файлов. +// +// Параметры: +// МассивИсключений - Массив - метаданные, которые не должны выводиться в настройках синхронизации файлов. +// +// Например: +// МассивИсключений.Добавить(Метаданные.Справочники._ДемоНоменклатураПрисоединенныеФайлы); +// +Процедура ПриОпределенииОбъектовИсключенияСинхронизацииФайлов(МассивИсключений) Экспорт + +КонецПроцедуры + +// Устарела.Следует использовать ПриОпределенииОбъектовИсключенияОчисткиФайлов. // Функция ОбъектыИсключенияПриОчисткеФайлов() Экспорт diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl index c0943472c..bed4c8d36 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl @@ -77,9 +77,6 @@ "РаботаСФайламиСлужебный"); КонецЕсли; - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена"].Добавить( - "РаботаСФайламиСлужебный"); - Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.РаботаВМоделиСервиса.ФайловыеФункцииВМоделиСервиса") Тогда СерверныеОбработчики["ТехнологияСервиса.РаботаВМоделиСервиса.ФайловыеФункцииВМоделиСервиса\ПриЗаполненииОбработчиковИнтеграцииФайловыхФункцийВМоделиСервиса"].Добавить( @@ -96,7 +93,7 @@ // Возвращает Истина, если это элемент данных, относящийся к подсистеме РаботаСФайлами. // -Функция ЭтоЭлементРаботаСФайлами(ЭлементДанных) Экспорт +Функция ЭтоЭлементРаботаСФайлами(ЭлементДанных) Возврат ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ВерсииФайлов") ИЛИ ТипЗнч(ЭлементДанных) = Тип("СправочникСсылка.ВерсииФайлов"); @@ -143,7 +140,14 @@ // Только для внутреннего использования. // -Процедура ПриОтправкеФайла(ЭлементДанных, ОтправкаЭлемента, Знач СозданиеНачальногоОбраза = Ложь, Получатель = Неопределено) Экспорт +Процедура ПриОтправкеФайла(ЭлементДанных, ОтправкаЭлемента, Знач СозданиеНачальногоОбраза = Ложь, Получатель = Неопределено) + + // Для обменов не РИБ используется алгоритм обычного сеанса обмена, а не создания начального образа, + // т.к. параметра СозданиеНачальногоОбраза равный Истина означает начальную выгрузку данных. + Если СозданиеНачальногоОбраза И Получатель <> Неопределено + И Не ОбщегоНазначения.ЭтоУзелРаспределеннойИнформационнойБазы(Получатель.Ссылка) Тогда + СозданиеНачальногоОбраза = Ложь; + КонецЕсли; Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить ИЛИ ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда @@ -242,7 +246,7 @@ // Только для внутреннего использования. // -Процедура ПриПолученииФайла(ЭлементДанных, ПолучениеЭлемента) Экспорт +Процедура ПриПолученииФайла(ЭлементДанных, ПолучениеЭлемента) Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда @@ -654,10 +658,16 @@ Пока Выборка.Следующий() Цикл ВерсияСсылка = Выборка.Ссылка; + ПутьКФайлу = Выборка.ПутьКФайлу; Если ЗначениеЗаполнено(Выборка.ПутьКФайлу) И ЗначениеЗаполнено(Выборка.Том) Тогда - ПолныйПутьФайла = ФайловыеФункцииСлужебный.ПолныйПутьТома(Выборка.Том) + Выборка.ПутьКФайлу; + // Удаляем лишнюю точку, если у файла нет расширения. + Если ВерсияСсылка.Расширение = "" И СтрЗаканчиваетсяНа(ПутьКФайлу, ".") Тогда + ПутьКФайлу = Лев(ПутьКФайлу, СтрДлина(ПутьКФайлу) - 1); + КонецЕсли; + + ПолныйПутьФайла = ФайловыеФункцииСлужебный.ПолныйПутьТома(Выборка.Том) + ПутьКФайлу; Файл = Новый Файл(ПолныйПутьФайла); Если Не Файл.Существует() Тогда @@ -692,10 +702,10 @@ ИмяФайлаСПутем = ""; ИмяФайлаСПутемДляУдаления = ""; + НачатьТранзакцию(); + Попытка - НачатьТранзакцию(); - Если ФайлОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда ИмяФайлаСПутем = ФайловыеФункцииСлужебный.ПолныйПутьТома(ФайлОбъект.Том) + ФайлОбъект.ПутьКФайлу; ИмяФайлаСПутемДляУдаления = ИмяФайлаСПутем + ".del"; @@ -707,7 +717,7 @@ ФайлОбъект.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); ФайлОбъект.ПутьКФайлу = ""; ТекстКомментария = НСтр("ru = 'Файл удален при очистке ненужных файлов.'") - + " " + Формат(ТекущаяДатаСеанса(),"ДФ=dd.MM.yyyy") + Символы.ПС; + + " " + Формат(ТекущаяДатаСеанса(),"ДЛФ=D") + Символы.ПС; ФайлОбъект.Комментарий = ТекстКомментария + ФайлОбъект.Комментарий; ФайлОбъект.Записать(); ФайлОбъект.УстановитьПометкуУдаления(Истина); @@ -743,6 +753,153 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Синхронизация файлов с облачным сервисом + +Функция ТекстЗапросаДляСинхронизацииФайлов(ВладелецФайла, НастройкаСинхронизации, МассивИсключений, ЭлементИсключение) Экспорт + + ТипОбъекта = ВладелецФайла; + ПредставлениеТипаВладельца = ОбщегоНазначения.ВидОбъектаПоТипу(ТипЗнч(ТипОбъекта.ЗначениеПустойСсылки)); + ЕстьТипДата = Ложь; + + ТекстЗапроса = ""; + + СправочникФайлов = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(НастройкаСинхронизации.ТипВладельцаФайла); + + Если ТипЗнч(ВладелецФайла) <> Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + СправочникПапок = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(НастройкаСинхронизации.ИдентификаторВладельца); + Иначе + СправочникПапок = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(ВладелецФайла); + КонецЕсли; + + Если Не ПустаяСтрока(ТекстЗапроса) Тогда + ТекстЗапроса= ТекстЗапроса + " + | + |ОБЪЕДИНИТЬ ВСЕ + |"; + КонецЕсли; + ТекстЗапроса = ТекстЗапроса + "ВЫБРАТЬ + | СправочникПапок.Ссылка,"; + + ФайловыеФункцииСлужебный.ДобавитьДоступныеПоляОтбора(ТекстЗапроса, ТипОбъекта); + + ТекстЗапроса = ТекстЗапроса + " + | СправочникФайлов.Ссылка КАК ФайлСсылка, + | СправочникФайлов.Наименование + ""."" + СправочникФайлов.ТекущаяВерсияРасширение КАК Наименование, + | СправочникФайлов.ПометкаУдаления КАК ПометкаУдаления, + | СправочникФайлов.ВладелецФайла КАК Родитель, + | ЛОЖЬ КАК ЭтоПапка, + | ИСТИНА КАК ЕстьВБазе, + | ЛОЖЬ КАК ЕстьНаСервере, + | НЕОПРЕДЕЛЕНО КАК Изменения, + | ЕСТЬNULL(СтатусыСинхронизацииФайловСОблачнымСервисом.Href, """") КАК Href, + | ЕСТЬNULL(СтатусыСинхронизацииФайловСОблачнымСервисом.Etag, """") КАК Etag, + | ЛОЖЬ КАК Обработан, + | ВЫРАЗИТЬ("""" КАК СТРОКА(36)) КАК UID1C, + | """" КАК ToHref, + | """" КАК ToEtag, + | """" КАК РодительСервер, + | """" КАК НаименованиеСервер, + | ЛОЖЬ КАК ИзмененНаСервере, + | НЕОПРЕДЕЛЕНО КАК Уровень, + | """" КАК РодительСортировка, + | ИСТИНА КАК ЭтоФайл + |ИЗ + | Справочник." + СправочникФайлов.Имя + " КАК СправочникФайлов + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом + | ПО (СтатусыСинхронизацииФайловСОблачнымСервисом.Файл = СправочникФайлов.Ссылка) + | ЛЕВОЕ СОЕДИНЕНИЕ " + ПредставлениеТипаВладельца+ "." + СправочникПапок.Имя + " КАК СправочникПапок + | ПО (СправочникФайлов.ВладелецФайла = СправочникПапок.Ссылка) + |ГДЕ + | ТИПЗНАЧЕНИЯ(СправочникФайлов.ВладелецФайла) = &ТипВладельца"; + + Если МассивИсключений.Количество() > 0 Тогда + ТекстЗапроса = ТекстЗапроса + " + | И НЕ СправочникПапок.Ссылка В ИЕРАРХИИ (&МассивИсключений)"; + КонецЕсли; + Если ЭлементИсключение <> Неопределено Тогда + ТекстЗапроса = ТекстЗапроса + " + | И СправочникПапок.Ссылка В ИЕРАРХИИ (&ЭлементИсключение)"; + КонецЕсли; + + ТекстЗапроса = ТекстЗапроса + " + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | СправочникПапок.Ссылка,"; + + ФайловыеФункцииСлужебный.ДобавитьДоступныеПоляОтбора(ТекстЗапроса, ТипОбъекта); + + ТекстЗапроса = ТекстЗапроса + " + | СправочникПапок.Ссылка, + | " + ?(ПредставлениеТипаВладельца = "Документ", + "СправочникПапок.Представление", "СправочникПапок.Наименование") + ", + | СправочникПапок.ПометкаУдаления,"; + Если ОбщегоНазначения.ЭтоСправочник(СправочникПапок) И СправочникПапок.Иерархический Тогда + ТекстЗапроса = ТекстЗапроса + " + | ВЫБОР + | КОГДА СправочникПапок.Родитель = ЗНАЧЕНИЕ(Справочник." + СправочникПапок.Имя + ".ПустаяСсылка) + | ТОГДА НЕОПРЕДЕЛЕНО + | ИНАЧЕ СправочникПапок.Родитель + | КОНЕЦ,"; + Иначе + ТекстЗапроса = ТекстЗапроса + "Неопределено,"; + КонецЕсли; + ТекстЗапроса = ТекстЗапроса + " + | ИСТИНА, + | ИСТИНА, + | ЛОЖЬ, + | НЕОПРЕДЕЛЕНО, + | ЕСТЬNULL(СтатусыСинхронизацииФайловСОблачнымСервисом.Href, """"), + | """", + | ЛОЖЬ, + | """", + | """", + | """", + | """", + | """", + | ЛОЖЬ, + | НЕОПРЕДЕЛЕНО, + | """", + | ИСТИНА + |ИЗ + | " + ПредставлениеТипаВладельца + "." + СправочникПапок.Имя + " КАК СправочникПапок + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом + | ПО (СтатусыСинхронизацииФайловСОблачнымСервисом.Файл = СправочникПапок.Ссылка + | И СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись = &УчетнаяЗапись) + | ГДЕ + | ИСТИНА"; + + Если МассивИсключений.Количество() > 0 Тогда + ТекстЗапроса = ТекстЗапроса + " + | И НЕ СправочникПапок.Ссылка В ИЕРАРХИИ (&МассивИсключений)"; + КонецЕсли; + Если ЭлементИсключение <> Неопределено Тогда + ТекстЗапроса = ТекстЗапроса + " + | И СправочникПапок.Ссылка В ИЕРАРХИИ (&ЭлементИсключение)"; + КонецЕсли; + + Возврат ТекстЗапроса; + +КонецФункции + +Функция ВозможностьСозданияПапки(ОбъектВладелец) Экспорт + + Если ОбъектВладелец = Неопределено Тогда + Возврат Ложь; + Иначе + Возврат ТипЗнч(ОбъектВладелец) = Тип("СправочникСсылка.ПапкиФайлов"); + КонецЕсли; + +КонецФункции + +Функция ОбъектЯвляетсяФайлом(ОбъектВладелец) Экспорт + + МассивТиповФайлов = Метаданные.Справочники.Файлы.Реквизиты.ВладелецФайла.Тип.Типы(); + Возврат МассивТиповФайлов.Найти(ТипЗнч(ОбъектВладелец)) <> Неопределено; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -753,7 +910,7 @@ // Заполняет структуру параметров, необходимых для работы клиентского кода // при завершении работы конфигурации, т.е. в обработчиках: // - ПередЗавершениемРаботыСистемы, -// - ПриЗавершенииРаботыСистемы +// - ПриЗавершенииРаботыСистемы. // // Параметры: // Параметры - Структура - структура параметров. @@ -1039,27 +1196,11 @@ КонецПроцедуры -// Используется для получения объектов метаданных, которые должны входить в состав плана обмена -// и НЕ должны входить в состав подписок на события регистрации изменений для этого плана обмена. -// Эти объекты метаданных используются только в момент создания начального образа подчиненного узла -// и не мигрируют в процессе обмена. -// Если подсистема имеет объекты метаданных, которые участвуют только в создании начального образа подчиненного узла, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты - Массив. Массив объектов метаданных конфигурации. -// -Процедура ПриПолученииОбъектовНачальногоОбразаПланаОбмена(Объекты) Экспорт - - Объекты.Добавить(Метаданные.РегистрыСведений.ХранимыеФайлыВерсий); - -КонецПроцедуры - // Заполняет перечень обработчиков интеграции подсистемы. -// "ТехнологияСервиса.РаботаВМоделиСервиса.ФайловыеФункцииВМоделиСервиса" +// "ТехнологияСервиса.РаботаВМоделиСервиса.ФайловыеФункцииВМоделиСервиса". // // Параметры: -// Обработчики - Массив(Строка), имя общего модуля обработчика, +// Обработчики - Массив(Строка), имя общего модуля обработчика. // Процедура ПриЗаполненииОбработчиковИнтеграцииФайловыхФункцийВМоделиСервиса(Обработчики) Экспорт @@ -1283,7 +1424,7 @@ // СостояниеИзвлеченияТекста - ПеречислениеСсылка.СтатусыИзвлеченияТекстаФайлов, новый // статус извлечения текста у файла. // -Процедура ПриОбновленииСостоянияОчередиИзвлеченияТекста(ИсточникТекста, СостояниеИзвлеченияТекста) Экспорт +Процедура ПриОбновленииСостоянияОчередиИзвлеченияТекста(ИсточникТекста, СостояниеИзвлеченияТекста) Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ФайловыеФункцииВМоделиСервиса") Тогда diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl index aab5c9342..908b8bc71 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйВызовСервера/Module.bsl @@ -14,7 +14,7 @@ // Возвращаемое значение: // СправочникСсылка.Файлы - новый файл. // -Функция СкопироватьФайл(ИсходныйФайл, ВладелецНовогоФайла) Экспорт +Функция СкопироватьФайл(ИсходныйФайл, ВладелецНовогоФайла) Если ИсходныйФайл = Неопределено Или ИсходныйФайл.Пустая() Или ИсходныйФайл.ТекущаяВерсия.Пустая()Тогда Возврат Неопределено; @@ -272,171 +272,32 @@ КонецФункции -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -// Освобождает файл. -// +// Создать папку файлов // Параметры: -// ДанныеФайла - Структура - см. ДанныеФайла. -// УникальныйИдентификатор - УникальныйИдентификатор - уникальный идентификатор формы. -// -Процедура ОсвободитьФайл(ДанныеФайла, УникальныйИдентификатор = Неопределено) Экспорт - - ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект(); - - ЗаблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, , УникальныйИдентификатор); - ФайлОбъект.Редактирует = Справочники.Пользователи.ПустаяСсылка(); - ФайлОбъект.ДатаЗаема = Дата("00010101000000"); - ФайлОбъект.Записать(); - РазблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, УникальныйИдентификатор); - - РаботаСФайламиПереопределяемый.ПриОсвобожденииФайла(ДанныеФайла, УникальныйИдентификатор); - -КонецПроцедуры - -// Занимает файл на редактирование (checkout). -// -// Параметры: -// ДанныеФайла - структура с данными файла. -// СтрокаОшибки - строка, в которой возвращается причина ошибки в случае неуспеха (скажем "Файл занят другим -// пользователем"). -// УникальныйИдентификатор - уникальный идентификатор формы. +// Имя - Строка - имя папки +// Родитель - СправочникСсылка.ПапкиФайлов - родительская папка. +// Пользователь - СправочникСсылка.Пользователи - ответственный за папку. // // Возвращаемое значение: -// Булево - успешно ли выполнена операция. +// СправочникСсылка.ПапкиФайлов. // -Функция ЗанятьФайл(ДанныеФайла, СтрокаОшибки = "", УникальныйИдентификатор = Неопределено) Экспорт +Функция СправочникиПапкиСоздатьЭлемент(Имя, Родитель, Пользователь = Неопределено) Экспорт - СтрокаОшибки = ""; - РаботаСФайламиПереопределяемый.ПриПопыткеЗанятьФайл(ДанныеФайла, СтрокаОшибки); - Если Не ПустаяСтрока(СтрокаОшибки) Тогда - Возврат Ложь; + Папка = Справочники.ПапкиФайлов.СоздатьЭлемент(); + Папка.Наименование = Имя; + Папка.Родитель = Родитель; + Папка.ДатаСоздания = ТекущаяДатаСеанса(); + + Если Пользователь = Неопределено Тогда + Папка.Ответственный = Пользователи.ТекущийПользователь(); + Иначе + Папка.Ответственный = Пользователь; КонецЕсли; - ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект(); + Папка.Заполнить(Неопределено); + Папка.Записать(); + Возврат Папка.Ссылка; - ЗаблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, , УникальныйИдентификатор); - ФайлОбъект.Редактирует = Пользователи.ТекущийПользователь(); - ФайлОбъект.ДатаЗаема = ТекущаяДатаСеанса(); - ФайлОбъект.Записать(); - РазблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, УникальныйИдентификатор); - - НавигационнаяСсылкаТекущейВерсии = ДанныеФайла.НавигационнаяСсылкаТекущейВерсии; - РабочийКаталогВладельца = ДанныеФайла.РабочийКаталогВладельца; - - ДанныеФайла = ДанныеФайла(ДанныеФайла.Версия); - ДанныеФайла.НавигационнаяСсылкаТекущейВерсии = НавигационнаяСсылкаТекущейВерсии; - ДанныеФайла.РабочийКаталогВладельца = РабочийКаталогВладельца; - - РаботаСФайламиПереопределяемый.ПриЗахватеФайла(ДанныеФайла, УникальныйИдентификатор); - - Возврат Истина; - -КонецФункции - -// Переносит Файл в другую папку. -// -// Параметры: -// ДанныеФайла - структура с данными файла. -// Папка - СправочникСсылка.ПапкиФайлов - ссылка на папку, куда нужно переместить файл. -// -Процедура ПеренестиФайл(ДанныеФайла, Папка) Экспорт - - ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект(); - ФайлОбъект.Заблокировать(); - ФайлОбъект.ВладелецФайла = Папка; - ФайлОбъект.Записать(); - -КонецПроцедуры - -// Переносит Файлы в другую папку. -// -// Параметры: -// ОбъектыСсылка - Массив - массив ссылок на файлы. -// Папка - СправочникСсылка.ПапкиФайлов - ссылка на папку, куда нужно переместить файлы. -// -Функция ПеренестиФайлы(ОбъектыСсылка, Папка) Экспорт - - ДанныеФайлов = Новый Массив; - - Для Каждого ФайлСсылка Из ОбъектыСсылка Цикл - ПеренестиФайл(ФайлСсылка, Папка); - ДанныеФайла = ДанныеФайла(ФайлСсылка); - ДанныеФайлов.Добавить(ДанныеФайла); - КонецЦикла; - - Возврат ДанныеФайлов; - -КонецФункции - -// Создает файл в ИБ. -// -// Параметры: -// Владелец - СправочникСсылка.ПапкиФайлов, ЛюбаяСсылка - будет установлен в реквизит ВладелецФайла у -// созданного файла. -// СведенияОФайле - Структура - см. РаботаСФайламиКлиентСервер.СведенияОФайле, в режиме "Файл". -// -// Возвращаемое значение: -// СправочникСсылка.Файлы - созданный файл. -// -Функция СоздатьФайл(Знач Владелец, Знач СведенияОФайле) Экспорт - - Файл = Справочники.Файлы.СоздатьЭлемент(); - Файл.ВладелецФайла = Владелец; - Файл.Наименование = СведенияОФайле.ИмяБезРасширения; - Файл.ПолноеНаименование = СведенияОФайле.ИмяБезРасширения; - Файл.Автор = ?(СведенияОФайле.Автор <> Неопределено, СведенияОФайле.Автор, Пользователи.ТекущийПользователь()); - Файл.ДатаСоздания = ТекущаяДатаСеанса(); - Файл.Описание = СведенияОФайле.Комментарий; - Файл.ИндексКартинки = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Неопределено); - Файл.ХранитьВерсии = СведенияОФайле.ХранитьВерсии; - - Если ТипЗнч(СведенияОФайле.АдресВременногоХранилищаТекста) = Тип("ХранилищеЗначения") Тогда - // При создании Файла из шаблона хранилище значения копируется напрямую. - Файл.ТекстХранилище = СведенияОФайле.АдресВременногоХранилищаТекста; - ИначеЕсли Не ПустаяСтрока(СведенияОФайле.АдресВременногоХранилищаТекста) Тогда - Текст = ФайловыеФункцииСлужебный.ПолучитьСтрокуИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаТекста); - Файл.ТекстХранилище = Новый ХранилищеЗначения(Текст); - КонецЕсли; - - Файл.Записать(); - Возврат Файл.Ссылка; - -КонецФункции - -// Находит максимальный номер версии для данного объекта Файл. Если нет версий - то 0. -// Параметры: -// ФайлСсылка - СправочникСсылка.Файлы - ссылка на файл. -// -// Возвращаемое значение: -// Число - максимальный номер версии. -// -Функция НайтиМаксимальныйНомерВерсии(ФайлСсылка) - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ЕСТЬNULL(МАКСИМУМ(Версии.НомерВерсии), 0) КАК МаксимальныйНомер - |ИЗ - | Справочник.ВерсииФайлов КАК Версии - |ГДЕ - | Версии.Владелец = &Файл"; - - Запрос.Параметры.Вставить("Файл", ФайлСсылка); - - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - - Если Выборка.МаксимальныйНомер = Null Тогда - Возврат 0; - КонецЕсли; - - Возврат Число(Выборка.МаксимальныйНомер); - КонецЕсли; - - Возврат 0; КонецФункции // Создает версию сохраняемого файла для сохранения в ИБ. @@ -593,6 +454,7 @@ КонецЕсли; КонецЕсли; + Версия.Заполнить(Неопределено); Версия.Записать(); Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда @@ -603,62 +465,295 @@ КонецФункции -// Подставляет ссылку на версию в карточку Файла. +// Создает файл в ИБ вместе с версией. // // Параметры: -// ФайлСсылка - СправочникСсылка.Файлы - Файл, в котором создается версия. -// Версия - СправочникСсылка.ВерсииФайлов - версия файла. -// АдресВременногоХранилищаТекста - Строка - содержит адрес во временном хранилище, где находятся двоичные данные с -// файлом текста или ХранилищеЗначения - непосредственно содержит двоичные -// данные с файлом текста. -// УникальныйИдентификатор - уникальный идентификатор формы. +// Владелец - СправочникСсылка.ПапкиФайлов, ЛюбаяСсылка - будет установлен в реквизит ВладелецФайла у +// созданного файла. +// СведенияОФайле - Структура - см. РаботаСФайламиКлиентСервер.СведенияОФайле, в режиме "ФайлСВерсией". // -Процедура ОбновитьВерсиюВФайле(ФайлСсылка, - Версия, - Знач АдресВременногоХранилищаТекста, - УникальныйИдентификатор = Неопределено) Экспорт +// Возвращаемое значение: +// СправочникСсылка.Файлы - созданный файл. +// +Функция СоздатьФайлСВерсией(ВладелецФайла, СведенияОФайле) Экспорт + + НачатьТранзакцию(); + Попытка + + // Создадим карточку Файла в БД. + ФайлСсылка = СоздатьФайл(ВладелецФайла, СведенияОФайле); + // Создадим версию сохраняемого файла для сохранения в карточке Файла. + Версия = СоздатьВерсию(ФайлСсылка, СведенияОФайле); + // Подставим ссылку на версию в карточку Файла. + ОбновитьВерсиюВФайле(ФайлСсылка, Версия, СведенияОФайле.АдресВременногоХранилищаТекста); + + Если СведенияОФайле.Кодировка <> Неопределено Тогда + ЗаписатьКодировкуВерсииФайла(Версия, СведенияОФайле.Кодировка); + КонецЕсли; + + ЕстьПравоСохранения = ПравоДоступа("СохранениеДанныхПользователя", Метаданные); + Если СведенияОФайле.ЗаписатьВИсторию И ЕстьПравоСохранения Тогда + НавигационнаяСсылкаФайла = ПолучитьНавигационнуюСсылку(ФайлСсылка); + ИсторияРаботыПользователя.Добавить(НавигационнаяСсылкаФайла); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + РаботаСФайламиПереопределяемый.ПриСозданииФайла(ФайлСсылка); + + Возврат ФайлСсылка; + +КонецФункции + +// Освобождает файл. +// +// Параметры: +// ДанныеФайла - Структура - см. ДанныеФайла. +// УникальныйИдентификатор - УникальныйИдентификатор - уникальный идентификатор формы. +// +Процедура ОсвободитьФайл(ДанныеФайла, УникальныйИдентификатор = Неопределено) Экспорт + + ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект(); - ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); ЗаблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, , УникальныйИдентификатор); - - ФайлОбъект.ТекущаяВерсия = Версия.Ссылка; - - Если ТипЗнч(АдресВременногоХранилищаТекста) = Тип("ХранилищеЗначения") Тогда - // При создании Файла из шаблона хранилище значения копируется напрямую. - ФайлОбъект.ТекстХранилище = АдресВременногоХранилищаТекста; - Иначе - Текст = ФайловыеФункцииСлужебный.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); - ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(Текст); - КонецЕсли; - + ФайлОбъект.Редактирует = Справочники.Пользователи.ПустаяСсылка(); + ФайлОбъект.ДатаЗаема = Дата("00010101000000"); ФайлОбъект.Записать(); РазблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, УникальныйИдентификатор); + РаботаСФайламиПереопределяемый.ПриОсвобожденииФайла(ДанныеФайла, УникальныйИдентификатор); + КонецПроцедуры -// Обновляет текстовую порцию из файла в карточке файла. +// Занимает файл на редактирование (checkout). // // Параметры: -// ФайлСсылка - СправочникСсылка.Файлы - Файл, в котором создается версия. -// АдресВременногоХранилищаТекста - Строка - содержит адрес во временном хранилище, где находятся двоичные данные с -// файлом текста или ХранилищеЗначения - непосредственно содержит двоичные -// данные с файлом текста. +// ДанныеФайла - структура с данными файла. +// СтрокаОшибки - строка, в которой возвращается причина ошибки в случае неуспеха (скажем "Файл занят другим +// пользователем"). // УникальныйИдентификатор - уникальный идентификатор формы. // -Процедура ОбновитьТекстВФайле(ФайлСсылка, - Знач АдресВременногоХранилищаТекста, - УникальныйИдентификатор = Неопределено) +// Возвращаемое значение: +// Булево - успешно ли выполнена операция. +// +Функция ЗанятьФайл(ДанныеФайла, СтрокаОшибки = "", УникальныйИдентификатор = Неопределено, Пользователь = Неопределено) Экспорт + + СтрокаОшибки = ""; + РаботаСФайламиПереопределяемый.ПриПопыткеЗанятьФайл(ДанныеФайла, СтрокаОшибки); + Если Не ПустаяСтрока(СтрокаОшибки) Тогда + Возврат Ложь; + КонецЕсли; + + ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект(); - ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); ЗаблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, , УникальныйИдентификатор); - - Текст = ФайловыеФункцииСлужебный.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); - ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(Текст); - + Если Пользователь = Неопределено Тогда + ФайлОбъект.Редактирует = Пользователи.ТекущийПользователь(); + Иначе + ФайлОбъект.Редактирует = Пользователь; + КонецЕсли; + ФайлОбъект.ДатаЗаема = ТекущаяДатаСеанса(); ФайлОбъект.Записать(); РазблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, УникальныйИдентификатор); + + НавигационнаяСсылкаТекущейВерсии = ДанныеФайла.НавигационнаяСсылкаТекущейВерсии; + РабочийКаталогВладельца = ДанныеФайла.РабочийКаталогВладельца; -КонецПроцедуры + ДанныеФайла = ДанныеФайла(ДанныеФайла.Версия); + ДанныеФайла.НавигационнаяСсылкаТекущейВерсии = НавигационнаяСсылкаТекущейВерсии; + ДанныеФайла.РабочийКаталогВладельца = РабочийКаталогВладельца; + + РаботаСФайламиПереопределяемый.ПриЗахватеФайла(ДанныеФайла, УникальныйИдентификатор); + + Возврат Истина; + +КонецФункции + +// Функция возвращает структуру, содержащую различные сведения о файле и версии. +// +// Параметры: +// ФайлИлиВерсияСсылка - СправочникСсылка.Файлы, СправочникСсылка.ВерсииФайлов - файл или версия файла. +// +// Возвращаемое значение: +// Структура - структура с данными файла. +// +Функция ДанныеФайла(ФайлИлиВерсияСсылка) Экспорт + + Если ТипЗнч(ФайлИлиВерсияСсылка) = Тип("СправочникСсылка.Файлы") Тогда + ФайлСсылка = ФайлИлиВерсияСсылка; + ВерсияСсылка = Неопределено; + Иначе + ФайлСсылка = Неопределено; + ВерсияСсылка = ФайлИлиВерсияСсылка; + КонецЕсли; + + Запрос = Новый Запрос; + Если ФайлСсылка <> Неопределено Тогда + + Запрос.Текст = + "ВЫБРАТЬ + | Файлы.Ссылка КАК Ссылка, + | Файлы.Код КАК Код, + | Файлы.Редактирует КАК Редактирует, + | Файлы.ТекущаяВерсия КАК ТекущаяВерсия, + | Файлы.ВладелецФайла КАК ВладелецФайла, + | Файлы.ХранитьВерсии КАК ХранитьВерсии, + | Файлы.ПометкаУдаления КАК ПометкаУдаления, + | ВерсииФайлов.ПолноеНаименование КАК ПолноеНаименование, + | ВерсииФайлов.Расширение КАК Расширение, + | ВерсииФайлов.Размер КАК Размер, + | ВерсииФайлов.НомерВерсии КАК НомерВерсии, + | ВерсииФайлов.ПутьКФайлу КАК ПутьКФайлу, + | ВерсииФайлов.Том КАК Том, + | ВерсииФайлов.ДатаМодификацииУниверсальная КАК ДатаМодификацииУниверсальная, + | ВерсииФайлов.Автор КАК Автор, + | ВерсииФайлов.СтатусИзвлеченияТекста КАК СтатусИзвлеченияТекста, + | Файлы.Зашифрован КАК Зашифрован, + | Файлы.ДатаЗаема КАК ДатаЗаема + |ИЗ + | Справочник.Файлы КАК Файлы + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВерсииФайлов КАК ВерсииФайлов + | ПО Файлы.ТекущаяВерсия = ВерсииФайлов.Ссылка"; + + Если ТипЗнч(ФайлСсылка) = Тип("Массив") Тогда + Запрос.Текст = Запрос.Текст + " ГДЕ Файлы.Ссылка В (&Файл) "; + Иначе + Запрос.Текст = Запрос.Текст + " ГДЕ Файлы.Ссылка = &Файл "; + КонецЕсли; + + Запрос.Параметры.Вставить("Файл", ФайлСсылка); + + Иначе + + Запрос.Текст = + "ВЫБРАТЬ + | Файлы.Ссылка КАК Ссылка, + | Файлы.Код КАК Код, + | Файлы.Редактирует КАК Редактирует, + | Файлы.ТекущаяВерсия КАК ТекущаяВерсия, + | Файлы.ВладелецФайла КАК ВладелецФайла, + | Файлы.ХранитьВерсии КАК ХранитьВерсии, + | Файлы.ПометкаУдаления КАК ПометкаУдаления, + | ВерсииФайлов.ПолноеНаименование КАК ПолноеНаименование, + | ВерсииФайлов.Расширение КАК Расширение, + | ВерсииФайлов.Размер КАК Размер, + | ВерсииФайлов.НомерВерсии КАК НомерВерсии, + | ВерсииФайлов.ПутьКФайлу КАК ПутьКФайлу, + | ВерсииФайлов.Том КАК Том, + | ВерсииФайлов.ДатаМодификацииУниверсальная КАК ДатаМодификацииУниверсальная, + | ВерсииФайлов.Автор КАК Автор, + | ВерсииФайлов.СтатусИзвлеченияТекста КАК СтатусИзвлеченияТекста, + | Файлы.Зашифрован КАК Зашифрован, + | Файлы.ДатаЗаема КАК ДатаЗаема + |ИЗ + | Справочник.Файлы КАК Файлы + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВерсииФайлов КАК ВерсииФайлов + | ПО (ИСТИНА) + |ГДЕ + | ВерсииФайлов.Ссылка = &Версия + | И Файлы.Ссылка = ВерсииФайлов.Владелец"; + + Запрос.Параметры.Вставить("Версия", ВерсияСсылка); + + КонецЕсли; + + МассивДанныеФайла = Новый Массив; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + + ДанныеФайла = Новый Структура; + ДанныеФайла.Вставить("Ссылка", Выборка.Ссылка); + ДанныеФайла.Вставить("КодФайла", Выборка.Код); + ДанныеФайла.Вставить("Редактирует", Выборка.Редактирует); + ДанныеФайла.Вставить("Владелец", Выборка.ВладелецФайла); + ДанныеФайла.Вставить("НавигационнаяСсылка", ПолучитьНавигационнуюСсылку(Выборка.Ссылка)); + + Если ВерсияСсылка <> Неопределено Тогда + ДанныеФайла.Вставить("Версия", ВерсияСсылка); + Иначе + ДанныеФайла.Вставить("Версия", Выборка.ТекущаяВерсия); + КонецЕсли; + + ДанныеФайла.Вставить("ТекущаяВерсия", Выборка.ТекущаяВерсия); + + СтруктураКлюча = Новый Структура("ВерсияФайла", ДанныеФайла.ТекущаяВерсия); + КлючЗаписи = РегистрыСведений.ХранимыеФайлыВерсий.СоздатьКлючЗаписи(СтруктураКлюча); + НавигационнаяСсылкаТекущейВерсии = ПолучитьНавигационнуюСсылку(КлючЗаписи, "ХранимыйФайл"); + ДанныеФайла.Вставить("НавигационнаяСсылкаТекущейВерсии", НавигационнаяСсылкаТекущейВерсии); + + КодировкаТекущейВерсии = ПолучитьКодировкуВерсииФайла(ДанныеФайла.ТекущаяВерсия); + ДанныеФайла.Вставить("КодировкаТекущейВерсии", КодировкаТекущейВерсии); + + ДанныеФайла.Вставить("Размер", Выборка.Размер); + ДанныеФайла.Вставить("НомерВерсии", Выборка.НомерВерсии); + ДанныеФайла.Вставить("ДатаМодификацииУниверсальная", Выборка.ДатаМодификацииУниверсальная); + ДанныеФайла.Вставить("Расширение", Выборка.Расширение); + ДанныеФайла.Вставить("ПолноеНаименованиеВерсии", СокрЛП(Выборка.ПолноеНаименование)); + ДанныеФайла.Вставить("ХранитьВерсии", Выборка.ХранитьВерсии); + ДанныеФайла.Вставить("ПометкаУдаления", Выборка.ПометкаУдаления); + ДанныеФайла.Вставить("АвторТекущейВерсии", Выборка.Автор); + ДанныеФайла.Вставить("Зашифрован", Выборка.Зашифрован); + ДанныеФайла.Вставить("ДатаЗаема", Выборка.ДатаЗаема); + + Если ДанныеФайла.Зашифрован Тогда + МассивСертификатовШифрования = ПолучитьМассивСертификатовШифрования(ДанныеФайла.Ссылка); + ДанныеФайла.Вставить("МассивСертификатовШифрования", МассивСертификатовШифрования); + КонецЕсли; + + НаЧтение = ДанныеФайла.Редактирует <> Пользователи.ТекущийПользователь(); + ДанныеФайла.Вставить("НаЧтение", НаЧтение); + + ВРабочемКаталогеНаЧтение = Истина; + ВРабочемКаталогеВладельца = Ложь; + ИмяКаталога = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЛокальныйКэшФайлов", "ПутьКЛокальномуКэшуФайлов"); + Если ИмяКаталога = Неопределено Тогда + ИмяКаталога = ""; + КонецЕсли; + + Если ВерсияСсылка <> Неопределено Тогда + ПолноеИмяФайлаВРабочемКаталоге = ПолучитьПолноеИмяФайлаИзРегистра(ВерсияСсылка, ИмяКаталога, ВРабочемКаталогеНаЧтение, ВРабочемКаталогеВладельца); + Иначе + ПолноеИмяФайлаВРабочемКаталоге = ПолучитьПолноеИмяФайлаИзРегистра(Выборка.ТекущаяВерсия, ИмяКаталога, ВРабочемКаталогеНаЧтение, ВРабочемКаталогеВладельца); + КонецЕсли; + + ДанныеФайла.Вставить("ПолноеИмяФайлаВРабочемКаталоге", ПолноеИмяФайлаВРабочемКаталоге); + ДанныеФайла.Вставить("ВРабочемКаталогеНаЧтение", ВРабочемКаталогеНаЧтение); + ДанныеФайла.Вставить("РабочийКаталогВладельца", ""); + + РедактируетТекущийПользователь = (ДанныеФайла.Редактирует = Пользователи.ТекущийПользователь()); + ДанныеФайла.Вставить("РедактируетТекущийПользователь", РедактируетТекущийПользователь); + + СтатусИзвлеченияТекстаСтрока = "НеИзвлечен"; + Если Выборка.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен Тогда + СтатусИзвлеченияТекстаСтрока = "НеИзвлечен"; + ИначеЕсли Выборка.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен Тогда + СтатусИзвлеченияТекстаСтрока = "Извлечен"; + ИначеЕсли Выборка.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.ИзвлечьНеУдалось Тогда + СтатусИзвлеченияТекстаСтрока = "ИзвлечьНеУдалось"; + КонецЕсли; + ДанныеФайла.Вставить("СтатусИзвлеченияТекста", СтатусИзвлеченияТекстаСтрока); + + МассивДанныеФайла.Добавить(ДанныеФайла); + + КонецЦикла; + + // Если был передан массив - возвращаем массив. + Если ТипЗнч(ФайлСсылка) = Тип("Массив") Тогда + Возврат МассивДанныеФайла; + КонецЕсли; + + Если МассивДанныеФайла.Количество() > 0 Тогда + Возврат МассивДанныеФайла[0]; + Иначе + Возврат Новый Структура; + КонецЕсли; + +КонецФункции // Обновляет или создает версию Файла и возвращает ссылку на обновленную версию (или Ложь, если файл бинарно не // изменен). @@ -674,7 +769,11 @@ // Возвращаемое значение: // СправочникСсылка.ВерсииФайлов - созданная или измененная версия; Неопределено, если файл бинарно не был изменен. // -Функция ОбновитьВерсиюФайла(ФайлСсылка, СведенияОФайле, ВерсияСсылка = Неопределено, УникальныйИдентификаторФормы = Неопределено) +Функция ОбновитьВерсиюФайла(ФайлСсылка, + СведенияОФайле, + ВерсияСсылка = Неопределено, + УникальныйИдентификаторФормы = Неопределено, + Пользователь = Неопределено) Экспорт ЕстьПравоСохранения = ПравоДоступа("СохранениеДанныхПользователя", Метаданные); @@ -776,7 +875,11 @@ КонецЕсли; Версия.Владелец = ФайлСсылка; - Версия.Автор = Пользователи.ТекущийПользователь(); + Если Пользователь = Неопределено Тогда + Версия.Автор = Пользователи.ТекущийПользователь(); + Иначе + Версия.Автор = Пользователь; + КонецЕсли; Версия.ДатаМодификацииУниверсальная = ВремяИзмененияУниверсальное; Версия.ДатаМодификацииФайла = ВремяИзменения; Версия.ДатаСоздания = ТекущаяДатаСеанса(); @@ -854,6 +957,7 @@ Версия.Зашифрован = СведенияОФайле.Зашифрован; КонецЕсли; + Версия.Заполнить(Неопределено); Версия.Записать(); Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда @@ -875,6 +979,171 @@ КонецФункции +// Подставляет ссылку на версию в карточку Файла. +// +// Параметры: +// ФайлСсылка - СправочникСсылка.Файлы - Файл, в котором создается версия. +// Версия - СправочникСсылка.ВерсииФайлов - версия файла. +// АдресВременногоХранилищаТекста - Строка - содержит адрес во временном хранилище, где находятся двоичные данные с +// файлом текста или ХранилищеЗначения - непосредственно содержит двоичные +// данные с файлом текста. +// УникальныйИдентификатор - уникальный идентификатор формы. +// +Процедура ОбновитьВерсиюВФайле(ФайлСсылка, + Версия, + Знач АдресВременногоХранилищаТекста, + УникальныйИдентификатор = Неопределено) Экспорт + + ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); + ЗаблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, , УникальныйИдентификатор); + + ФайлОбъект.ТекущаяВерсия = Версия.Ссылка; + + Если ТипЗнч(АдресВременногоХранилищаТекста) = Тип("ХранилищеЗначения") Тогда + // При создании Файла из шаблона хранилище значения копируется напрямую. + ФайлОбъект.ТекстХранилище = АдресВременногоХранилищаТекста; + Иначе + Текст = ФайловыеФункцииСлужебный.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); + ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(Текст); + КонецЕсли; + + ФайлОбъект.Записать(); + РазблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, УникальныйИдентификатор); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Переносит Файл в другую папку. +// +// Параметры: +// ДанныеФайла - структура с данными файла. +// Папка - СправочникСсылка.ПапкиФайлов - ссылка на папку, куда нужно переместить файл. +// +Процедура ПеренестиФайл(ДанныеФайла, Папка) + + ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект(); + ФайлОбъект.Заблокировать(); + ФайлОбъект.ВладелецФайла = Папка; + ФайлОбъект.Записать(); + +КонецПроцедуры + +// Переносит Файлы в другую папку. +// +// Параметры: +// ОбъектыСсылка - Массив - массив ссылок на файлы. +// Папка - СправочникСсылка.ПапкиФайлов - ссылка на папку, куда нужно переместить файлы. +// +Функция ПеренестиФайлы(ОбъектыСсылка, Папка) Экспорт + + ДанныеФайлов = Новый Массив; + + Для Каждого ФайлСсылка Из ОбъектыСсылка Цикл + ПеренестиФайл(ФайлСсылка, Папка); + ДанныеФайла = ДанныеФайла(ФайлСсылка); + ДанныеФайлов.Добавить(ДанныеФайла); + КонецЦикла; + + Возврат ДанныеФайлов; + +КонецФункции + +// Создает файл в ИБ. +// +// Параметры: +// Владелец - СправочникСсылка.ПапкиФайлов, ЛюбаяСсылка - будет установлен в реквизит ВладелецФайла у +// созданного файла. +// СведенияОФайле - Структура - см. РаботаСФайламиКлиентСервер.СведенияОФайле, в режиме "Файл". +// +// Возвращаемое значение: +// СправочникСсылка.Файлы - созданный файл. +// +Функция СоздатьФайл(Знач Владелец, Знач СведенияОФайле) + + Файл = Справочники.Файлы.СоздатьЭлемент(); + Файл.ВладелецФайла = Владелец; + Файл.Наименование = СведенияОФайле.ИмяБезРасширения; + Файл.ПолноеНаименование = СведенияОФайле.ИмяБезРасширения; + Файл.Автор = ?(СведенияОФайле.Автор <> Неопределено, СведенияОФайле.Автор, Пользователи.ТекущийПользователь()); + Файл.ДатаСоздания = ТекущаяДатаСеанса(); + Файл.Описание = СведенияОФайле.Комментарий; + Файл.ИндексКартинки = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Неопределено); + Файл.ХранитьВерсии = СведенияОФайле.ХранитьВерсии; + + Если ТипЗнч(СведенияОФайле.АдресВременногоХранилищаТекста) = Тип("ХранилищеЗначения") Тогда + // При создании Файла из шаблона хранилище значения копируется напрямую. + Файл.ТекстХранилище = СведенияОФайле.АдресВременногоХранилищаТекста; + ИначеЕсли Не ПустаяСтрока(СведенияОФайле.АдресВременногоХранилищаТекста) Тогда + Текст = ФайловыеФункцииСлужебный.ПолучитьСтрокуИзВременногоХранилища(СведенияОФайле.АдресВременногоХранилищаТекста); + Файл.ТекстХранилище = Новый ХранилищеЗначения(Текст); + КонецЕсли; + + Файл.Заполнить(Неопределено); + Файл.Записать(); + Возврат Файл.Ссылка; + +КонецФункции + +// Находит максимальный номер версии для данного объекта Файл. Если нет версий - то 0. +// Параметры: +// ФайлСсылка - СправочникСсылка.Файлы - ссылка на файл. +// +// Возвращаемое значение: +// Число - максимальный номер версии. +// +Функция НайтиМаксимальныйНомерВерсии(ФайлСсылка) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ЕСТЬNULL(МАКСИМУМ(Версии.НомерВерсии), 0) КАК МаксимальныйНомер + |ИЗ + | Справочник.ВерсииФайлов КАК Версии + |ГДЕ + | Версии.Владелец = &Файл"; + + Запрос.Параметры.Вставить("Файл", ФайлСсылка); + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + + Если Выборка.МаксимальныйНомер = Null Тогда + Возврат 0; + КонецЕсли; + + Возврат Число(Выборка.МаксимальныйНомер); + КонецЕсли; + + Возврат 0; +КонецФункции + +// Обновляет текстовую порцию из файла в карточке файла. +// +// Параметры: +// ФайлСсылка - СправочникСсылка.Файлы - Файл, в котором создается версия. +// АдресВременногоХранилищаТекста - Строка - содержит адрес во временном хранилище, где находятся двоичные данные с +// файлом текста или ХранилищеЗначения - непосредственно содержит двоичные +// данные с файлом текста. +// УникальныйИдентификатор - уникальный идентификатор формы. +// +Процедура ОбновитьТекстВФайле(ФайлСсылка, + Знач АдресВременногоХранилищаТекста, + УникальныйИдентификатор = Неопределено) + + ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); + ЗаблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, , УникальныйИдентификатор); + + Текст = ФайловыеФункцииСлужебный.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); + ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(Текст); + + ФайлОбъект.Записать(); + РазблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, УникальныйИдентификатор); + +КонецПроцедуры + // Обновляет или создает версию файла и снимает блокировку. // // Параметры: @@ -1062,232 +1331,6 @@ КонецФункции -// Функция возвращает структуру, содержащую различные сведения о файле и версии. -// -// Параметры: -// ФайлИлиВерсияСсылка - СправочникСсылка.Файлы, СправочникСсылка.ВерсииФайлов - файл или версия файла. -// -// Возвращаемое значение: -// Структура - структура с данными файла. -// -Функция ДанныеФайла(ФайлИлиВерсияСсылка) Экспорт - - Если ТипЗнч(ФайлИлиВерсияСсылка) = Тип("СправочникСсылка.Файлы") Тогда - ФайлСсылка = ФайлИлиВерсияСсылка; - ВерсияСсылка = Неопределено; - Иначе - ФайлСсылка = Неопределено; - ВерсияСсылка = ФайлИлиВерсияСсылка; - КонецЕсли; - - Запрос = Новый Запрос; - Если ФайлСсылка <> Неопределено Тогда - - Запрос.Текст = - "ВЫБРАТЬ - | Файлы.Ссылка КАК Ссылка, - | Файлы.Код КАК Код, - | Файлы.Редактирует КАК Редактирует, - | Файлы.ТекущаяВерсия КАК ТекущаяВерсия, - | Файлы.ВладелецФайла КАК ВладелецФайла, - | Файлы.ХранитьВерсии КАК ХранитьВерсии, - | Файлы.ПометкаУдаления КАК ПометкаУдаления, - | ВерсииФайлов.ПолноеНаименование КАК ПолноеНаименование, - | ВерсииФайлов.Расширение КАК Расширение, - | ВерсииФайлов.Размер КАК Размер, - | ВерсииФайлов.НомерВерсии КАК НомерВерсии, - | ВерсииФайлов.ПутьКФайлу КАК ПутьКФайлу, - | ВерсииФайлов.Том КАК Том, - | ВерсииФайлов.ДатаМодификацииУниверсальная КАК ДатаМодификацииУниверсальная, - | ВерсииФайлов.Автор КАК Автор, - | ВерсииФайлов.СтатусИзвлеченияТекста КАК СтатусИзвлеченияТекста, - | Файлы.Зашифрован КАК Зашифрован, - | Файлы.ДатаЗаема КАК ДатаЗаема - |ИЗ - | Справочник.Файлы КАК Файлы - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВерсииФайлов КАК ВерсииФайлов - | ПО Файлы.ТекущаяВерсия = ВерсииФайлов.Ссылка"; - - Если ТипЗнч(ФайлСсылка) = Тип("Массив") Тогда - Запрос.Текст = Запрос.Текст + " ГДЕ Файлы.Ссылка В (&Файл) "; - Иначе - Запрос.Текст = Запрос.Текст + " ГДЕ Файлы.Ссылка = &Файл "; - КонецЕсли; - - Запрос.Параметры.Вставить("Файл", ФайлСсылка); - - Иначе - - Запрос.Текст = - "ВЫБРАТЬ - | Файлы.Ссылка КАК Ссылка, - | Файлы.Код КАК Код, - | Файлы.Редактирует КАК Редактирует, - | Файлы.ТекущаяВерсия КАК ТекущаяВерсия, - | Файлы.ВладелецФайла КАК ВладелецФайла, - | Файлы.ХранитьВерсии КАК ХранитьВерсии, - | Файлы.ПометкаУдаления КАК ПометкаУдаления, - | ВерсииФайлов.ПолноеНаименование КАК ПолноеНаименование, - | ВерсииФайлов.Расширение КАК Расширение, - | ВерсииФайлов.Размер КАК Размер, - | ВерсииФайлов.НомерВерсии КАК НомерВерсии, - | ВерсииФайлов.ПутьКФайлу КАК ПутьКФайлу, - | ВерсииФайлов.Том КАК Том, - | ВерсииФайлов.ДатаМодификацииУниверсальная КАК ДатаМодификацииУниверсальная, - | ВерсииФайлов.Автор КАК Автор, - | ВерсииФайлов.СтатусИзвлеченияТекста КАК СтатусИзвлеченияТекста, - | Файлы.Зашифрован КАК Зашифрован, - | Файлы.ДатаЗаема КАК ДатаЗаема - |ИЗ - | Справочник.Файлы КАК Файлы - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВерсииФайлов КАК ВерсииФайлов - | ПО (ИСТИНА) - |ГДЕ - | ВерсииФайлов.Ссылка = &Версия - | И Файлы.Ссылка = ВерсииФайлов.Владелец"; - - Запрос.Параметры.Вставить("Версия", ВерсияСсылка); - - КонецЕсли; - - МассивДанныеФайла = Новый Массив; - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - - ДанныеФайла = Новый Структура; - ДанныеФайла.Вставить("Ссылка", Выборка.Ссылка); - ДанныеФайла.Вставить("КодФайла", Выборка.Код); - ДанныеФайла.Вставить("Редактирует", Выборка.Редактирует); - ДанныеФайла.Вставить("Владелец", Выборка.ВладелецФайла); - ДанныеФайла.Вставить("НавигационнаяСсылка", ПолучитьНавигационнуюСсылку(Выборка.Ссылка)); - - Если ВерсияСсылка <> Неопределено Тогда - ДанныеФайла.Вставить("Версия", ВерсияСсылка); - Иначе - ДанныеФайла.Вставить("Версия", Выборка.ТекущаяВерсия); - КонецЕсли; - - ДанныеФайла.Вставить("ТекущаяВерсия", Выборка.ТекущаяВерсия); - - СтруктураКлюча = Новый Структура("ВерсияФайла", ДанныеФайла.ТекущаяВерсия); - КлючЗаписи = РегистрыСведений.ХранимыеФайлыВерсий.СоздатьКлючЗаписи(СтруктураКлюча); - НавигационнаяСсылкаТекущейВерсии = ПолучитьНавигационнуюСсылку(КлючЗаписи, "ХранимыйФайл"); - ДанныеФайла.Вставить("НавигационнаяСсылкаТекущейВерсии", НавигационнаяСсылкаТекущейВерсии); - - КодировкаТекущейВерсии = ПолучитьКодировкуВерсииФайла(ДанныеФайла.ТекущаяВерсия); - ДанныеФайла.Вставить("КодировкаТекущейВерсии", КодировкаТекущейВерсии); - - ДанныеФайла.Вставить("Размер", Выборка.Размер); - ДанныеФайла.Вставить("НомерВерсии", Выборка.НомерВерсии); - ДанныеФайла.Вставить("ДатаМодификацииУниверсальная", Выборка.ДатаМодификацииУниверсальная); - ДанныеФайла.Вставить("Расширение", Выборка.Расширение); - ДанныеФайла.Вставить("ПолноеНаименованиеВерсии", СокрЛП(Выборка.ПолноеНаименование)); - ДанныеФайла.Вставить("ХранитьВерсии", Выборка.ХранитьВерсии); - ДанныеФайла.Вставить("ПометкаУдаления", Выборка.ПометкаУдаления); - ДанныеФайла.Вставить("АвторТекущейВерсии", Выборка.Автор); - ДанныеФайла.Вставить("Зашифрован", Выборка.Зашифрован); - ДанныеФайла.Вставить("ДатаЗаема", Выборка.ДатаЗаема); - - Если ДанныеФайла.Зашифрован Тогда - МассивСертификатовШифрования = ПолучитьМассивСертификатовШифрования(ДанныеФайла.Ссылка); - ДанныеФайла.Вставить("МассивСертификатовШифрования", МассивСертификатовШифрования); - КонецЕсли; - - НаЧтение = ДанныеФайла.Редактирует <> Пользователи.ТекущийПользователь(); - ДанныеФайла.Вставить("НаЧтение", НаЧтение); - - ВРабочемКаталогеНаЧтение = Истина; - ВРабочемКаталогеВладельца = Ложь; - ИмяКаталога = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЛокальныйКэшФайлов", "ПутьКЛокальномуКэшуФайлов"); - Если ИмяКаталога = Неопределено Тогда - ИмяКаталога = ""; - КонецЕсли; - - Если ВерсияСсылка <> Неопределено Тогда - ПолноеИмяФайлаВРабочемКаталоге = ПолучитьПолноеИмяФайлаИзРегистра(ВерсияСсылка, ИмяКаталога, ВРабочемКаталогеНаЧтение, ВРабочемКаталогеВладельца); - Иначе - ПолноеИмяФайлаВРабочемКаталоге = ПолучитьПолноеИмяФайлаИзРегистра(Выборка.ТекущаяВерсия, ИмяКаталога, ВРабочемКаталогеНаЧтение, ВРабочемКаталогеВладельца); - КонецЕсли; - - ДанныеФайла.Вставить("ПолноеИмяФайлаВРабочемКаталоге", ПолноеИмяФайлаВРабочемКаталоге); - ДанныеФайла.Вставить("ВРабочемКаталогеНаЧтение", ВРабочемКаталогеНаЧтение); - ДанныеФайла.Вставить("РабочийКаталогВладельца", ""); - - РедактируетТекущийПользователь = (ДанныеФайла.Редактирует = Пользователи.ТекущийПользователь()); - ДанныеФайла.Вставить("РедактируетТекущийПользователь", РедактируетТекущийПользователь); - - СтатусИзвлеченияТекстаСтрока = "НеИзвлечен"; - Если Выборка.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен Тогда - СтатусИзвлеченияТекстаСтрока = "НеИзвлечен"; - ИначеЕсли Выборка.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен Тогда - СтатусИзвлеченияТекстаСтрока = "Извлечен"; - ИначеЕсли Выборка.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.ИзвлечьНеУдалось Тогда - СтатусИзвлеченияТекстаСтрока = "ИзвлечьНеУдалось"; - КонецЕсли; - ДанныеФайла.Вставить("СтатусИзвлеченияТекста", СтатусИзвлеченияТекстаСтрока); - - МассивДанныеФайла.Добавить(ДанныеФайла); - - КонецЦикла; - - // Если был передан массив - возвращаем массив. - Если ТипЗнч(ФайлСсылка) = Тип("Массив") Тогда - Возврат МассивДанныеФайла; - КонецЕсли; - - Если МассивДанныеФайла.Количество() > 0 Тогда - Возврат МассивДанныеФайла[0]; - Иначе - Возврат Новый Структура; - КонецЕсли; - -КонецФункции - -// Создает файл в ИБ вместе с версией. -// -// Параметры: -// Владелец - СправочникСсылка.ПапкиФайлов, ЛюбаяСсылка - будет установлен в реквизит ВладелецФайла у -// созданного файла. -// СведенияОФайле - Структура - см. РаботаСФайламиКлиентСервер.СведенияОФайле, в режиме "ФайлСВерсией". -// -// Возвращаемое значение: -// СправочникСсылка.Файлы - созданный файл. -// -Функция СоздатьФайлСВерсией(ВладелецФайла, СведенияОФайле) Экспорт - - НачатьТранзакцию(); - Попытка - - // Создадим карточку Файла в БД. - ФайлСсылка = СоздатьФайл(ВладелецФайла, СведенияОФайле); - // Создадим версию сохраняемого файла для сохранения в карточке Файла. - Версия = СоздатьВерсию(ФайлСсылка, СведенияОФайле); - // Подставим ссылку на версию в карточку Файла. - ОбновитьВерсиюВФайле(ФайлСсылка, Версия, СведенияОФайле.АдресВременногоХранилищаТекста); - - Если СведенияОФайле.Кодировка <> Неопределено Тогда - ЗаписатьКодировкуВерсииФайла(Версия, СведенияОФайле.Кодировка); - КонецЕсли; - - ЕстьПравоСохранения = ПравоДоступа("СохранениеДанныхПользователя", Метаданные); - Если СведенияОФайле.ЗаписатьВИсторию И ЕстьПравоСохранения Тогда - НавигационнаяСсылкаФайла = ПолучитьНавигационнуюСсылку(ФайлСсылка); - ИсторияРаботыПользователя.Добавить(НавигационнаяСсылкаФайла); - КонецЕсли; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - - РаботаСФайламиПереопределяемый.ПриСозданииФайла(ФайлСсылка); - - Возврат ФайлСсылка; - -КонецФункции - // Получает данные файла и делает заем (checkout) - для экономии вызовов // клиент сервер поместили ПолучитьДанныеФайла и ЗанятьФайл в одну функцию. // Параметры: @@ -1309,7 +1352,7 @@ Возврат Ложь; КонецЕсли; - Если ДанныеФайла.Редактирует.Пустая() Тогда + Если Не ЗначениеЗаполнено(ДанныеФайла.Редактирует) Тогда СтрокаОшибки = ""; Если Не ЗанятьФайл(ДанныеФайла, СтрокаОшибки, УникальныйИдентификатор) Тогда @@ -1357,7 +1400,7 @@ Возврат Ложь; КонецЕсли; - Если ДанныеФайла.Редактирует.Пустая() Тогда + Если Не ЗначениеЗаполнено(ДанныеФайла.Редактирует) Тогда СтрокаОшибки = ""; Если Не ЗанятьФайл(ДанныеФайла, СтрокаОшибки, УникальныйИдентификатор) Тогда @@ -1484,7 +1527,7 @@ // Возвращаемое значение: // Строка - описание ошибки // -Функция СформироватьТекстОшибкиПолученияФайлСТомаДляАдминистратора(ИнформацияОбОшибкеФункции, ФайлСсылка) Экспорт +Функция СформироватьТекстОшибкиПолученияФайлСТомаДляАдминистратора(ИнформацияОбОшибкеФункции, ФайлСсылка) Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ссылка на файл: ""%1"". @@ -1855,7 +1898,7 @@ Размер, ДатаПомещенияВРабочийКаталог, НаЧтение, - ВРабочемКаталогеВладельца) Экспорт + ВРабочемКаталогеВладельца) УстановитьПривилегированныйРежим(Истина); @@ -1978,16 +2021,6 @@ КонецФункции -// Возвращает с сервера на клиент идентификатор текущего пользователя. -// Возвращаемое значение: -// УникальныйИдентификатор - Уникальный идентификатор текущего пользователя. -// -Функция ПараметрыСеансаИдентификаторТекущегоПользователя() Экспорт - - Возврат Пользователи.ТекущийПользователь().УникальныйИдентификатор(); - -КонецФункции - // Находит в регистре сведений ФайлыВРабочемКаталоге информацию о ВерсииФайла (путь к файлу версии в рабочем каталоге, // и статус - на чтение или на редактирование). // Параметры: @@ -2025,34 +2058,6 @@ КонецФункции -// Находит в регистре сведений ФайлыВРабочемКаталоге информацию о ВерсииФайла (путь к файлу версии в рабочем каталоге). -// Параметры: -// Ссылка - СправочникСсылка.ВерсииФайлов - версия файла. -// -// Возвращаемое значение: -// Строка - имя с путем в рабочем каталоге. -// -Функция ПолучитьИмяФайлаИзРегистра(Ссылка) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ПолноеИмяФайла = ""; - - // Подготовить структуру отбора по измерениям. - СтруктураОтбора = Новый Структура; - СтруктураОтбора.Вставить("Версия", Ссылка); - СтруктураОтбора.Вставить("Пользователь", Пользователи.ТекущийПользователь()); - - // Получить структуру с данными ресурсов записи. - СтруктураРесурсов = РегистрыСведений.ФайлыВРабочемКаталоге.Получить(СтруктураОтбора); - - // Получить путь из регистра - ПолноеИмяФайла = СтруктураРесурсов.Путь; - - Возврат ПолноеИмяФайла; - -КонецФункции - // Записать в регистр сведений ФайлыВРабочемКаталоге информацию о пути файла. // Параметры: // ТекущаяВерсия - СправочникСсылка.ВерсииФайлов - версия. @@ -2226,33 +2231,6 @@ КонецПроцедуры -// Создать папку файлов -// Параметры: -// Имя - Строка - имя папки -// Родитель - СправочникСсылка.ПапкиФайлов - родительская папка. -// Пользователь - СправочникСсылка.Пользователи - ответственный за папку. -// -// Возвращаемое значение: -// СправочникСсылка.ПапкиФайлов -// -Функция СправочникиПапкиСоздатьЭлемент(Имя, Родитель, Пользователь = Неопределено) Экспорт - - Папка = Справочники.ПапкиФайлов.СоздатьЭлемент(); - Папка.Наименование = Имя; - Папка.Родитель = Родитель; - Папка.ДатаСоздания = ТекущаяДатаСеанса(); - - Если Пользователь = Неопределено Тогда - Папка.Ответственный = Пользователи.ТекущийПользователь(); - Иначе - Папка.Ответственный = Пользователь; - КонецЕсли; - - Папка.Записать(); - Возврат Папка.Ссылка; - -КонецФункции - // Формирует отчет для файлов с ошибками. // // Параметры: @@ -2928,9 +2906,8 @@ Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); Отбор.Использование = Истина; - Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно; + Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Редактирует"); - Отбор.ПравоеЗначение = Справочники.Пользователи.ПустаяСсылка(); Если ЕстьДублирующийсяЭлемент(УсловноеОформлениеКД.Элементы, Элемент) Тогда УсловноеОформлениеКД.Элементы.Удалить(Элемент); @@ -2952,139 +2929,32 @@ КонецПроцедуры -// Возвращает объект, для которого проверяется право доступа - для Файл это ПапкиФайлов (реквизит ВладелецФайла). +// Заполняет условное оформление списка папок. +// // Параметры: -// Объект - ЛюбаяСсылка - ссылка на объект. +// Список - динамический список. // -// Возвращаемое значение: -// ЛюбаяСсылка - объект для которого вычисляются права доступа. -// -Функция ПолучитьОбъектДоступа(Объект) Экспорт - Если ТипЗнч(Объект) <> Тип("СправочникСсылка.Файлы") Тогда - Возврат Неопределено; +Процедура ЗаполнитьУсловноеОформлениеСпискаПапок(Папки) Экспорт + + УсловноеОформлениеКД = Папки.КомпоновщикНастроек.Настройки.УсловноеОформление; + УсловноеОформлениеКД.ИдентификаторПользовательскойНастройки = "ОсновноеОформление"; + + Элемент = УсловноеОформлениеКД.Элементы.Добавить(); + Элемент.Использование = Истина; + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + + Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + Отбор.Использование = Истина; + Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; + + Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПапкаСинхронизируется"); + Отбор.ПравоеЗначение = Истина; + + Если ЕстьДублирующийсяЭлемент(УсловноеОформлениеКД.Элементы, Элемент) Тогда + УсловноеОформлениеКД.Элементы.Удалить(Элемент); КонецЕсли; - Если ТипЗнч(Объект.ВладелецФайла) = Тип("СправочникСсылка.ПапкиФайлов") Тогда - Возврат Объект.ВладелецФайла; - КонецЕсли; - - Возврат Неопределено; - -КонецФункции - -// Очищает настройки форм ФормаНового. -Процедура ОчиститьНастройкиФормНовогоФайла() Экспорт - - УстановитьПривилегированныйРежим(Истина); - // Очистка настроек окна ФормаНового. - ХранилищеСистемныхНастроек.Удалить("Справочник.Файлы.Форма.ФормаНового/НастройкиОкна", "", Неопределено); - - ОбновитьПовторноИспользуемыеЗначения(); - -КонецПроцедуры - -// Получает первые 100 версий файлов, у которых еще не извлечен текст. -// -// Возвращаемое значение: -// Массив - массив версий файлов. -// -Функция ПолучитьМассивВерсийДляИзвлеченияТекста() Экспорт - - МассивВерсий = Новый Массив; - - Запрос = Новый Запрос; - - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 100 - | ВерсииФайлов.Ссылка КАК Ссылка, - | ВерсииФайлов.СтатусИзвлеченияТекста КАК СтатусИзвлеченияТекста - |ИЗ - | Справочник.ВерсииФайлов КАК ВерсииФайлов - |ГДЕ - | (ВерсииФайлов.СтатусИзвлеченияТекста = &Статус - | ИЛИ ВерсииФайлов.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка))"; - - Запрос.УстановитьПараметр("Статус", Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен); - - Результат = Запрос.Выполнить(); - ТаблицаВыгрузки = Результат.Выгрузить(); - - Для Каждого Строка Из ТаблицаВыгрузки Цикл - ВерсияСсылка = Строка.Ссылка; - МассивВерсий.Добавить(ВерсияСсылка); - КонецЦикла; - - Возврат МассивВерсий; - -КонецФункции - -// Получает массив ссылок всех файлов в папке (если Рекурсивно, то и в подпапках тоже). -// Параметры: -// Папка - СправочникСсылка.ПапкиФайлов - папка файлов. -// Рекурсивно - Булево - обходить ли подпапки. -// -// Возвращаемое значение: -// Массив - массив файлов -// -Функция ПолучитьВсеФайлыВПапке(Папка, Рекурсивно) Экспорт - - МассивФайлов = Новый Массив; - - ПолучитьВсеФайлыВОднойПапке(Папка, МассивФайлов); - - Если Рекурсивно Тогда - - МассивПапок = Новый Массив; - - ЗапросВПапки = Новый Запрос; - ЗапросВПапки.УстановитьПараметр("Родитель", Папка); - ЗапросВПапки.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ПапкиФайлов.Ссылка КАК Ссылка - |ИЗ - | Справочник.ПапкиФайлов КАК ПапкиФайлов - |ГДЕ - | ПапкиФайлов.Родитель В ИЕРАРХИИ(&Родитель)"; - - Результат = ЗапросВПапки.Выполнить(); - Выборка = Результат.Выбрать(); - Пока Выборка.Следующий() Цикл - МассивПапок.Добавить(Выборка.Ссылка); - КонецЦикла; - - Для Каждого Подпапка Из МассивПапок Цикл - ПолучитьВсеФайлыВОднойПапке(Подпапка, МассивФайлов); - КонецЦикла; - - КонецЕсли; - - Возврат МассивФайлов; - -КонецФункции - -// Получает массив ссылок всех файлов в папке. -// Параметры: -// Папка - СправочникСсылка.ПапкиФайлов - папка файлов. -// МассивФайлов - Массив - массив файлов. -// -Процедура ПолучитьВсеФайлыВОднойПапке(Папка, МассивФайлов) Экспорт - - ЗапросВПапки = Новый Запрос; - ЗапросВПапки.УстановитьПараметр("Родитель", Папка); - ЗапросВПапки.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | Файлы.Ссылка КАК Ссылка - |ИЗ - | Справочник.Файлы КАК Файлы - |ГДЕ - | Файлы.ВладелецФайла = &Родитель"; - - Результат = ЗапросВПапки.Выполнить(); - Выборка = Результат.Выбрать(); - Пока Выборка.Следующий() Цикл - МассивФайлов.Добавить(Выборка.Ссылка); - КонецЦикла; - КонецПроцедуры // Получает данные файла для открытия и читает из общих настроек ПапкаДляСохранитьКак. @@ -3113,7 +2983,7 @@ // // Возвращаемое значение: // Число - число версий -Функция ПолучитьКоличествоВерсий(ФайлСсылка) Экспорт +Функция ПолучитьКоличествоВерсий(ФайлСсылка) УстановитьПривилегированныйРежим(Истина); @@ -3315,28 +3185,6 @@ КонецФункции -// Получает ДанныеФайла и НавигационнуюСсылкуВерсии, предварительно поместив файл версии во временное хранилище. -// -// Параметры: -// ФайлИлиВерсияСсылка - СправочникСсылка.Файлы, СправочникСсылка.ВерсииФайлов - файл или версия файла. -// ИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы. -// -// Возвращаемое значение: -// Структура - данные файла и навигационная ссылка. -// -Функция ДанныеФайлаИНавигационнаяСсылкаВерсииВоВременномХранилище(ФайлИлиВерсияСсылка, ИдентификаторФормы) Экспорт - - ДанныеФайла = ДанныеФайла(ФайлИлиВерсияСсылка); - Если ТипЗнч(ФайлИлиВерсияСсылка) = Тип("СправочникСсылка.Файлы") Тогда - ВерсияСсылка = ФайлИлиВерсияСсылка.ТекущаяВерсия; - Иначе - ВерсияСсылка = ФайлИлиВерсияСсылка; - КонецЕсли; - НавигационнаяСсылкаВерсии = ПолучитьНавигационнуюСсылкуВоВременномХранилище(ВерсияСсылка, ИдентификаторФормы); - Результат = Новый Структура("ДанныеФайла, НавигационнаяСсылкаВерсии", ДанныеФайла, НавигационнаяСсылкаВерсии); - Возврат Результат; -КонецФункции - // Получает массив сертификатов шифрования. // Параметры: // Ссылка - СправочникСсылка.Файлы - файл. @@ -3377,7 +3225,7 @@ СтруктураРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ФайлСсылка, "Редактирует, Зашифрован"); Редактирует = СтруктураРеквизитов.Редактирует; - Если НЕ Редактирует.Пустая() Тогда + Если ЗначениеЗаполнено(Редактирует) Тогда ВызватьИсключение ФайловыеФункцииСлужебныйКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗанятогоФайла(ФайлСсылка); КонецЕсли; @@ -3562,8 +3410,7 @@ |ИЗ | Справочник.ВерсииФайлов КАК ВерсииФайлов |ГДЕ - | (ВерсииФайлов.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен) - | ИЛИ ВерсииФайлов.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка))"; + | ВерсииФайлов.СтатусИзвлеченияТекста В (ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен), ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка))"; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда ТекстЗапроса = ТекстЗапроса + " @@ -3660,7 +3507,7 @@ // Возвращаемое значение: // Число - число файлов в томах. // -Функция ПодсчитатьКоличествоФайловВТомах() Экспорт +Функция ПодсчитатьКоличествоФайловВТомах() Запрос = Новый Запрос; @@ -3969,43 +3816,13 @@ КонецПроцедуры -// Возвращает массив ссылок на файлы. -// Параметры: -// Объект - ЛюбаяСсылка - владелец файла. -// -// Возвращаемое значение: -// Массив - массив файлов -Процедура ПолучитьПрикрепленныеФайлыКОбъекту(Объект, МассивФайлов) Экспорт - - Если ТипЗнч(Объект) = Тип("СправочникСсылка.Файлы") Тогда - МассивФайлов.Добавить(Объект); - Возврат; - КонецЕсли; - - ТипыПараметраКоманды = Метаданные.ОбщиеКоманды.ПрисоединенныеФайлы.ТипПараметраКоманды.Типы(); - ТипыВладельцев = Метаданные.Справочники.Файлы.Реквизиты.ВладелецФайла.Тип.Типы(); - - Если ТипыВладельцев.Найти(ТипЗнч(Объект)) <> Неопределено - И ТипыПараметраКоманды.Найти(ТипЗнч(Объект)) <> Неопределено Тогда - - МассивФайловЛокальный = ПолучитьВсеПодчиненныеФайлы(Объект); - Для Каждого Строка Из МассивФайловЛокальный Цикл - МассивФайлов.Добавить(Строка); - КонецЦикла; - - Возврат; - - КонецЕсли; - -КонецПроцедуры - // Записывает ХранилищеФайла в информационную базу. // // Параметры: // ВерсияСсылка - ссылка на версию файла. // ХранилищеФайла - ХранилищеЗначения, с двоичными данными файла, которые требуется записать. // -Процедура ЗаписатьФайлВИнформационнуюБазу(ВерсияСсылка, ХранилищеФайла) Экспорт +Процедура ЗаписатьФайлВИнформационнуюБазу(ВерсияСсылка, ХранилищеФайла) УстановитьПривилегированныйРежим(Истина); @@ -4079,7 +3896,7 @@ Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл - Если НЕ Выборка.Ссылка.Редактирует.Пустая() Тогда + Если ЗначениеЗаполнено(Выборка.Ссылка.Редактирует) Тогда Объект = Выборка.Ссылка.ПолучитьОбъект(); // Чтобы прошла запись ранее подписанного объекта. Объект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); @@ -4144,35 +3961,6 @@ КонецПроцедуры -// Помещает информацию о сертификатах шифрования в табличную часть файла. -Процедура ЗанестиИнформациюОСертификатахШифрования(ФайлСсылка, МассивОтпечатков, УникальныйИдентификатор) Экспорт - - НачатьТранзакцию(); - Попытка - - ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); - ЗаблокироватьДанныеДляРедактирования(ФайлСсылка, , УникальныйИдентификатор); - - Для Каждого ОтпечатокСтруктура Из МассивОтпечатков Цикл - НоваяСтрока = ФайлОбъект.СертификатыШифрования.Добавить(); - НоваяСтрока.Отпечаток = ОтпечатокСтруктура.Отпечаток; - НоваяСтрока.Представление = ОтпечатокСтруктура.Представление; - НоваяСтрока.Сертификат = Новый ХранилищеЗначения(ОтпечатокСтруктура.Сертификат); - КонецЦикла; - - // Чтобы прошла запись ранее подписанного объекта. - ФайлОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); - ФайлОбъект.Записать(); - РазблокироватьДанныеДляРедактирования(ФайлСсылка, УникальныйИдентификатор); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - // Обновляет размер файла и текущей версии. Нужно при загрузке шифрованного файла в почте. Процедура ОбновитьРазмерФайлаИВерсии(ДанныеФайла, РазмерФайла, УникальныйИдентификатор) Экспорт @@ -4213,8 +4001,7 @@ |ИЗ | Справочник.ВерсииФайлов КАК ВерсииФайлов |ГДЕ - | (ВерсииФайлов.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен) - | ИЛИ ВерсииФайлов.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка))"; + | ВерсииФайлов.СтатусИзвлеченияТекста В (ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен), ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка))"; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда Запрос.Текст = Запрос.Текст + " @@ -4236,7 +4023,7 @@ // ВерсияСсылка - СправочникСсылка.ВерсииФайлов - ссылка на версию файла. // Кодировка - Строка - новая кодировка версии файла. // -Процедура ЗаписатьКодировкуВерсииФайла(ВерсияСсылка, Кодировка) Экспорт +Процедура ЗаписатьКодировкуВерсииФайла(ВерсияСсылка, Кодировка) УстановитьПривилегированныйРежим(Истина); @@ -4263,7 +4050,7 @@ КонецПроцедуры // Записывает на сервер результат извлечения текста - извлеченный текст и СтатусИзвлеченияТекста. -Процедура ЗаписатьРезультатИзвлеченияТекста(ВерсияСсылка, РезультатИзвлечения, АдресВременногоХранилищаТекста) Экспорт +Процедура ЗаписатьРезультатИзвлеченияТекста(ВерсияСсылка, РезультатИзвлечения, АдресВременногоХранилищаТекста) ФайлЗаблокирован = Ложь; Файл = ВерсияСсылка.Владелец; @@ -4303,11 +4090,11 @@ ВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; ИначеЕсли РезультатИзвлечения = "ИзвлечьНеУдалось" Тогда ВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.ИзвлечьНеУдалось; - КонецЕсли; + КонецЕсли; + + НачатьТранзакцию(); Попытка - НачатьТранзакцию(); - // Чтобы прошла запись ранее подписанного объекта. ВерсияОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); ВерсияОбъект.Записать(); diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl index 3d126a283..f91ffa4c5 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебныйКлиент/Module.bsl @@ -27,7 +27,7 @@ // Параметры: // см. ПриПолученииСпискаПредупрежденийЗавершенияРаботы. // -Процедура ПриЗавершенииРаботыСистемы(Предупреждения) Экспорт +Процедура ПриЗавершенииРаботыСистемы(Предупреждения) Ответ = ПроверитьЗанятыеФайлыПриЗавершенииРаботы(); Если Ответ = Неопределено Тогда @@ -255,11 +255,11 @@ Функция ВозможностьОсвободитьФайл(ОбъектСсылка, РедактируетТекущийПользователь, Редактирует, - СтрокаОшибки = "") Экспорт + СтрокаОшибки = "") Если РедактируетТекущийПользователь Тогда Возврат Истина; - ИначеЕсли Редактирует.Пустая() Тогда + ИначеЕсли Не ЗначениеЗаполнено(Редактирует) Тогда СтрокаОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Невозможно освободить файл ""%1"", |т.к. он никем не занят.'"), @@ -286,7 +286,7 @@ // ДанныеФайла - Структура с данными файла. // УникальныйИдентификатор - УникальныйИдентификатор управляемой формы. // -Процедура ОсвободитьФайлБезВопроса(ДанныеФайла, УникальныйИдентификатор = Неопределено) Экспорт +Процедура ОсвободитьФайлБезВопроса(ДанныеФайла, УникальныйИдентификатор = Неопределено) РаботаСФайламиСлужебныйВызовСервера.ОсвободитьФайл(ДанныеФайла, УникальныйИдентификатор); РасширениеПодключено = ФайловыеФункцииСлужебныйКлиент.РасширениеРаботыСФайламиПодключено(); @@ -514,7 +514,7 @@ КонецПроцедуры // Продолжение процедуры (см. выше). -Процедура ЗакончитьРедактированиеСРасширениемПослеПроверкиНовойВерсии(ПараметрыВыполнения) Экспорт +Процедура ЗакончитьРедактированиеСРасширениемПослеПроверкиНовойВерсии(ПараметрыВыполнения) СтараяВерсия = ПараметрыВыполнения.ДанныеФайла.ТекущаяВерсия; @@ -816,7 +816,7 @@ КонецПроцедуры // Продолжение процедуры (см. выше). -Процедура ЗакончитьРедактированиеБезРасширенияПослеПроверкиНовойВерсии(ПараметрыВыполнения) Экспорт +Процедура ЗакончитьРедактированиеБезРасширенияПослеПроверкиНовойВерсии(ПараметрыВыполнения) Обработчик = Новый ОписаниеОповещения("ЗакончитьРедактированиеБезРасширенияПослеНапоминания", ЭтотОбъект, ПараметрыВыполнения); ПоказатьНапоминаниеПередПоместитьФайл(Обработчик); @@ -960,7 +960,7 @@ КонецПроцедуры // Продолжение процедуры (см. выше). -Процедура ЗакончитьРедактированиеОбработчикИсключения(ИнформацияОбОшибке, ПараметрыВыполнения) Экспорт +Процедура ЗакончитьРедактированиеОбработчикИсключения(ИнформацияОбОшибке, ПараметрыВыполнения) ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось поместить файл ""%1"" @@ -998,7 +998,7 @@ // Возвращаемое значение: // Булево. Истина, если операция выполнена успешно. // -Процедура ОбновитьИзФайлаНаДиске(ОбработчикРезультата, ДанныеФайла, ИдентификаторФормы) Экспорт +Процедура ОбновитьИзФайлаНаДиске(ОбработчикРезультата, ДанныеФайла, ИдентификаторФормы) Если Не ФайловыеФункцииСлужебныйКлиент.РасширениеРаботыСФайламиПодключено() Тогда ВернутьРезультат(ОбработчикРезультата, Ложь); @@ -1383,7 +1383,7 @@ // Возвращаемое значение: // Булево. Истина, если операция выполнена успешно. // -Процедура ЗанятьФайлПоСсылке(ОбработчикРезультата, ОбъектСсылка, УникальныйИдентификатор = Неопределено) Экспорт +Процедура ЗанятьФайлПоСсылке(ОбработчикРезультата, ОбъектСсылка, УникальныйИдентификатор = Неопределено) ПараметрыОбработчика = Новый Структура; ПараметрыОбработчика.Вставить("ОбработчикРезультата", ОбработчикРезультата); @@ -1436,7 +1436,7 @@ // ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. // МассивФайлов - Массив - массив файлов. // -Процедура ЗанятьФайлыПоСсылкам(ОбработчикРезультата, Знач МассивФайлов) Экспорт +Процедура ЗанятьФайлыПоСсылкам(ОбработчикРезультата, Знач МассивФайлов) ПараметрыОбработчика = Новый Структура; ПараметрыОбработчика.Вставить("ОбработчикРезультата", ОбработчикРезультата); @@ -1461,7 +1461,7 @@ СтрокаОшибки = ""; Если Не РаботаСФайламиКлиентСервер.МожноЛиЗанятьФайл(ДанныеФайла, СтрокаОшибки) - Или Не ДанныеФайла.Редактирует.Пустая() Тогда // Занять невозможно. + Или ЗначениеЗаполнено(ДанныеФайла.Редактирует) Тогда // Занять невозможно. ДанныеФайлов.Удалить(ВГраницаМассива - Инд); КонецЕсли; @@ -1515,7 +1515,7 @@ Процедура РедактироватьФайлПоСсылке(ОбработчикРезультата, ОбъектСсылка, УникальныйИдентификатор = Неопределено, - РабочийКаталогВладельца = Неопределено) Экспорт + РабочийКаталогВладельца = Неопределено) ПараметрыОбработчика = Новый Структура; ПараметрыОбработчика.Вставить("ОбработчикРезультата", ОбработчикРезультата); @@ -1645,7 +1645,7 @@ КонецЕсли; // Если Файл не занят, тогда занять файл. - Если ПараметрыВыполнения.ДанныеФайла.Редактирует.Пустая() Тогда + Если Не ЗначениеЗаполнено(ПараметрыВыполнения.ДанныеФайла.Редактирует) Тогда Обработчик = Новый ОписаниеОповещения("РедактироватьФайлПослеЗанятияФайла", ЭтотОбъект, ПараметрыВыполнения); ЗанятьФайл(Обработчик, ПараметрыВыполнения.ДанныеФайла); Возврат; @@ -1776,7 +1776,7 @@ // ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. // МассивФайлов - Массив - массив файлов. // -Процедура ОсвободитьФайлыПоСсылкам(ОбработчикРезультата, Знач МассивФайлов) Экспорт +Процедура ОсвободитьФайлыПоСсылкам(ОбработчикРезультата, Знач МассивФайлов) ПараметрыОбработчика = Новый Структура; ПараметрыОбработчика.Вставить("ОбработчикРезультата", ОбработчикРезультата); @@ -2390,7 +2390,7 @@ КонецПроцедуры // Продолжение процедуры (см. выше). -Процедура СохранитьИзмененияФайлаБезРасширенияПослеПроверкиНовойВерсии(ПараметрыВыполнения) Экспорт +Процедура СохранитьИзмененияФайлаБезРасширенияПослеПроверкиНовойВерсии(ПараметрыВыполнения) Обработчик = Новый ОписаниеОповещения("СохранитьИзмененияФайлаБезРасширенияПослеНапоминания", ЭтотОбъект, ПараметрыВыполнения); ПоказатьНапоминаниеПередПоместитьФайл(Обработчик); @@ -2637,122 +2637,6 @@ //////////////////////////////////////////////////////////////////////////////// // Освобождение файлов без обновления. -// Освобождает файлы без обновления. -// -// Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. -// ОбъектыСсылка - Массив - массив файлов. -// -Процедура ОсвободитьФайлы(ОбработчикРезультата, ОбъектыСсылка) Экспорт - - СписокНевозможноОсвободить = Новый СписокЗначений; - - // Получение массива данных Файлов. - ДанныеФайлов = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла(ОбъектыСсылка); - ВГраницаМассива = ДанныеФайлов.ВГраница(); - - // Проверка возможности освобождения файлов. - Для Инд = 0 По ВГраницаМассива Цикл - ДанныеФайла = ДанныеФайлов[ВГраницаМассива - Инд]; - - ТекстОшибки = ""; - МожноОсвободитьФайл = ВозможностьОсвободитьФайл( - ДанныеФайла.Ссылка, - ДанныеФайла.РедактируетТекущийПользователь, - ДанныеФайла.Редактирует, - ТекстОшибки); - Если Не МожноОсвободитьФайл Тогда // Освободить невозможно. - СписокНевозможноОсвободить.Добавить(ДанныеФайла.Ссылка, ТекстОшибки); - ДанныеФайлов.Удалить(ВГраницаМассива - Инд); - КонецЕсли; - - КонецЦикла; - - // Если освободить нельзя, тогда открывается диалог. - ПараметрыОбработчика = Новый Структура; - ПараметрыОбработчика.Вставить("ОбработчикРезультата", ОбработчикРезультата); - ПараметрыОбработчика.Вставить("ОбъектыСсылка", ОбъектыСсылка); - ПараметрыОбработчика.Вставить("ДанныеФайлов", ДанныеФайлов); - Обработчик = Новый ОписаниеОповещения("ОсвободитьФайлыПослеОтветаНаВопрос", ЭтотОбъект, ПараметрыОбработчика); - - Если СписокНевозможноОсвободить.Количество() > 0 Тогда - ДиалогВопросаСоСписком( - Обработчик, - СписокНевозможноОсвободить, - НСтр("ru = 'Освободить остальные файлы?'"), - НСтр("ru = 'При попытке освободить файлы возникли следующие ошибки:'"), - НСтр("ru = 'Освободить файлы'")); - Иначе - ПоказатьВопрос( - Обработчик, - НСтр("ru = 'Освобождение файлов может привести - |к потере ваших изменений. - | - |Освободить файлы?'"), - РежимДиалогаВопрос.ДаНет, - , - КодВозвратаДиалога.Нет); - КонецЕсли; - -КонецПроцедуры - -// Продолжение процедуры (см. выше). -Процедура ОсвободитьФайлыПослеОтветаНаВопрос(Ответ, ПараметрыВыполнения) Экспорт - - Если Ответ <> КодВозвратаДиалога.Да Тогда - ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Неопределено); - Возврат; - КонецЕсли; - - // Освобождение файлов. - Для Каждого ДанныеФайла Из ПараметрыВыполнения.ДанныеФайлов Цикл - - РаботаСФайламиСлужебныйВызовСервера.ОсвободитьФайл(ДанныеФайла); - - Если ФайловыеФункцииСлужебныйКлиент.РасширениеРаботыСФайламиПодключено() Тогда - НаЧтение = Истина; - ВРабочемКаталогеВладельца = ДанныеФайла.РабочийКаталогВладельца <> ""; - ПеререгистрироватьФайлВРабочемКаталоге(ДанныеФайла, НаЧтение, ВРабочемКаталогеВладельца); - КонецЕсли; - - ПоказатьОповещениеПользователя( - НСтр("ru = 'Файл освобожден'"), - ДанныеФайла.НавигационнаяСсылка, - ДанныеФайла.ПолноеНаименованиеВерсии, - БиблиотекаКартинок.Информация32); - - КонецЦикла; - - ВернутьРезультат(ПараметрыВыполнения.ОбработчикРезультата, Неопределено); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Открытие диалога вопроса со списком файлов или информацией. - -// Открывает диалог вопроса со списком Файлов или информации о Файлах. -// -// Параметры: -// ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. -// Список - СписокЗначений - список файлов. -// СообщениеВопрос - Строка - текст вопроса. -// СообщениеЗаголовок - Строка - текст заголовка вопроса. -// Заголовок - Строка - заголовок формы. -// -Процедура ДиалогВопросаСоСписком(ОбработчикРезультата, Список, СообщениеВопрос, СообщениеЗаголовок, Заголовок) - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("СообщениеВопрос", СообщениеВопрос); - ПараметрыФормы.Вставить("СообщениеЗаголовок", СообщениеЗаголовок); - ПараметрыФормы.Вставить("Заголовок", Заголовок); - ПараметрыФормы.Вставить("Файлы", Список); - - РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс; - - ОткрытьФорму("Справочник.Файлы.Форма.ФормаВопроса", ПараметрыФормы, , , , , ОбработчикРезультата, РежимОткрытияОкна); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Удаление файла. Перед удалением снимается атрибут "Только для чтения". @@ -2780,7 +2664,7 @@ // ЗадаватьВопрос - Булево- Задавать вопрос об удалении. // ШапкаВопроса - Строка - Шапка вопроса - добавляет текст к вопросу об удалении. // -Процедура УдалитьФайл(ОбработчикРезультата, ПолноеИмяФайла, ЗадаватьВопрос = Неопределено, ШапкаВопроса = Неопределено) Экспорт +Процедура УдалитьФайл(ОбработчикРезультата, ПолноеИмяФайла, ЗадаватьВопрос = Неопределено, ШапкаВопроса = Неопределено) Если ЗадаватьВопрос = Неопределено Тогда ПерсональныеНастройки = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); @@ -3044,15 +2928,14 @@ ПараметрыОбработчика.Вставить("ПолноеИмяФайла", ПолноеИмяФайла); Обработчик = Новый ОписаниеОповещения("КаталогФайлаПослеОтветаНаВопросПолучитьФайл", ЭтотОбъект, ПараметрыОбработчика); - ПоказатьВопрос( - Обработчик, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Файл ""%1"" - |отсутствует в рабочем каталоге. - | - |Получить файл из хранилища файлов?'"), + КнопкиВопроса = Новый СписокЗначений; + КнопкиВопроса.Добавить(КодВозвратаДиалога.Да, НСтр("ru= 'Сохранить и открыть каталог'")); + КнопкиВопроса.Добавить(КодВозвратаДиалога.Нет, НСтр("ru= 'Отмена'")); + ПоказатьВопрос(Обработчик, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Каталог файла не существует. Возможно, на данном компьютере файл ""%1"" еще не открывался. + |Сохранить файл на компьютер и открыть его каталог?'"), ИмяФайла), - РежимДиалогаВопрос.ДаНет); + КнопкиВопроса); КонецПроцедуры @@ -3566,7 +3449,7 @@ КонецПроцедуры // Продолжение процедуры (см. выше). -Процедура ПолучитьССервераИЗарегистрироватьВЛокальномКэшеФайловПредложитьВыборКаталога(Ответ, ПараметрыВыполнения) Экспорт +Процедура ПолучитьССервераИЗарегистрироватьВЛокальномКэшеФайловПредложитьВыборКаталога(Ответ, ПараметрыВыполнения) ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Длина пути к файлу превышает %1 символов: @@ -3725,7 +3608,7 @@ КонецПроцедуры // Продолжение процедуры (см. выше). -Процедура ПолучитьССервераИЗарегистрироватьВЛокальномКэшеФайловПередачаФайла(ПараметрыВыполнения, АдресФайла = Неопределено) Экспорт +Процедура ПолучитьССервераИЗарегистрироватьВЛокальномКэшеФайловПередачаФайла(ПараметрыВыполнения, АдресФайла = Неопределено) Если АдресФайла = Неопределено Тогда Если ПараметрыВыполнения.ДанныеФайла.Версия <> ПараметрыВыполнения.ДанныеФайла.ТекущаяВерсия Тогда @@ -4863,7 +4746,7 @@ КонецПроцедуры // Продолжение процедуры (см. выше). -Процедура СохранитьКакСРасширением(ПараметрыВыполнения) Экспорт +Процедура СохранитьКакСРасширением(ПараметрыВыполнения) // Проверим - если файл уже есть в кэше, и он новее чем в базе - дадим диалог с выбором. ПараметрыВыполнения.Вставить("ПутьКФайлуВКэше", ""); @@ -5114,7 +4997,7 @@ КонецПроцедуры // Продолжение процедуры (см. выше). -Процедура СохранитьКакБезРасширения(ПараметрыВыполнения) Экспорт +Процедура СохранитьКакБезРасширения(ПараметрыВыполнения) ПараметрыВыполнения.Вставить("СохранятьСРасшифровкой", Ложь); ПараметрыВыполнения.Вставить("РасширениеДляЗашифрованныхФайлов", ""); @@ -5411,7 +5294,7 @@ // Параметры: // ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода. // ПараметрКоманды - либо ссылка на файл, либо массив ссылок на файлы. -// УникальныйИдентификатор +// УникальныйИдентификатор. // Процедура ЗанятьСОповещением(ОбработчикРезультата, ПараметрКоманды, УникальныйИдентификатор = Неопределено) Экспорт @@ -5816,7 +5699,7 @@ Возврат; КонецЕсли; - Если Не ПараметрыВыполнения.ДанныеФайла.Редактирует.Пустая() Тогда + Если ЗначениеЗаполнено(ПараметрыВыполнения.ДанныеФайла.Редактирует) Тогда ТекстПредупреждения = НСтр("ru = 'Нельзя зашифровать занятый файл.'"); ВернутьРезультатПослеПоказаПредупреждения(ПараметрыВыполнения.ОбработчикРезультата, ТекстПредупреждения, ПараметрыВыполнения); Возврат; @@ -6317,7 +6200,7 @@ Для каждого Файл Из МассивФайлов Цикл ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаИРабочийКаталог(Файл); - Если НЕ ДанныеФайла.Редактирует.Пустая() Тогда + Если ЗначениеЗаполнено(ДанныеФайла.Редактирует) Тогда ТекстПредупреждения = ФайловыеФункцииСлужебныйКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗанятогоФайла(Файл); ВернутьРезультатПослеПоказаПредупреждения(ОбработчикЗавершения, ТекстПредупреждения, ПараметрыВыполнения); Возврат; @@ -6403,14 +6286,14 @@ // Добавляет электронные подписи к файлу-объекту из файлов-подписей на диске. Процедура ДобавитьПодписьИзФайла(Файл, ИдентификаторФормы, ОбработчикЗавершения) Экспорт - ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаИРабочийКаталог(Файл); + СвойстваФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаИДвоичныеДанные(Файл, , ИдентификаторФормы); ПараметрыВыполнения = Новый Структура; ПараметрыВыполнения.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); - ПараметрыВыполнения.Вставить("ДанныеФайла", ДанныеФайла); + ПараметрыВыполнения.Вставить("ДанныеФайла", СвойстваФайла.ДанныеФайла); ПараметрыВыполнения.Вставить("ИдентификаторФормы", ИдентификаторФормы); - Если НЕ ПараметрыВыполнения.ДанныеФайла.Редактирует.Пустая() Тогда + Если ЗначениеЗаполнено(ПараметрыВыполнения.ДанныеФайла.Редактирует) Тогда ТекстПредупреждения = ФайловыеФункцииСлужебныйКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗанятогоФайла(); ВернутьРезультатПослеПоказаПредупреждения(ПараметрыВыполнения.ОбработчикРезультата, ТекстПредупреждения, ПараметрыВыполнения); Возврат; @@ -6430,6 +6313,7 @@ ОписаниеДанных.Вставить("ЗаголовокДанных", НСтр("ru = 'Файл'")); ОписаниеДанных.Вставить("Представление", ПараметрыВыполнения.ДанныеФайла.Ссылка); ОписаниеДанных.Вставить("ПоказатьКомментарий", Истина); + ОписаниеДанных.Вставить("Данные", СвойстваФайла.ДвоичныеДанные); ОписаниеДанных.Вставить("Объект", Новый ОписаниеОповещения("ПриПолученииПодписей", ЭтотОбъект, ПараметрыВыполнения)); @@ -6907,7 +6791,7 @@ // Параметры: // ДанныеФайла - структура с данными файла. // ИмяОткрываемогоФайла - Строка - полное имя файла. -Процедура ОткрытьФайлПриложением(ДанныеФайла, ИмяОткрываемогоФайла, ОбработчикРезультата = Неопределено) Экспорт +Процедура ОткрытьФайлПриложением(ДанныеФайла, ИмяОткрываемогоФайла, ОбработчикРезультата = Неопределено) РасширениеПодключено = ФайловыеФункцииСлужебныйКлиент.РасширениеРаботыСФайламиПодключено(); Если РасширениеПодключено Тогда @@ -7441,7 +7325,7 @@ // // Возвращаемое значение: // Строка - на что ссылается lnk файл. -Функция РазыменоватьLnkФайл(ВыбранныйФайл) Экспорт +Функция РазыменоватьLnkФайл(ВыбранныйФайл) #Если Не ВебКлиент Тогда Если Не СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ЭтоБазоваяВерсияКонфигурации Тогда @@ -7606,7 +7490,7 @@ // // Показывает окно предупреждение, а после его закрытия вызывает обработчик с заданным результатом. -Процедура ВернутьРезультатПослеПоказаПредупреждения(Обработчик, ТекстПредупреждения, Результат) Экспорт +Процедура ВернутьРезультатПослеПоказаПредупреждения(Обработчик, ТекстПредупреждения, Результат) Если Обработчик <> Неопределено Тогда ПараметрыОбработчика = Новый Структура; @@ -7621,7 +7505,7 @@ КонецПроцедуры // Показывает окно просмотра значения, а после его закрытия вызывает обработчик с заданным результатом. -Процедура ВернутьРезультатПослеПоказаЗначения(Обработчик, Значение, Результат) Экспорт +Процедура ВернутьРезультатПослеПоказаЗначения(Обработчик, Значение, Результат) Если Обработчик <> Неопределено Тогда ПараметрыОбработчика = Новый Структура; @@ -7693,7 +7577,7 @@ КонецФункции // Подготовка обработчика прямого вызова без открытия диалога. -Функция ПодготовитьОбработчикДляПрямогоВызова(ОбработчикИлиСтруктура, Результат) Экспорт +Функция ПодготовитьОбработчикДляПрямогоВызова(ОбработчикИлиСтруктура, Результат) Если ТипЗнч(ОбработчикИлиСтруктура) = Тип("Структура") Тогда Если ОбработчикИлиСтруктура.Свойство("АсинхронныйДиалог") Тогда diff --git a/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl index 283ce8293..130fcc7b3 100644 --- a/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl @@ -29,29 +29,29 @@ ПараметрыЖурнала = Новый Структура; КонецЕсли; - Если НЕ ПараметрыЖурнала.Свойство("ИмяСобытия") Тогда + Если Не ПараметрыЖурнала.Свойство("ИмяСобытия") Тогда ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Запуск по требованию'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); КонецЕсли; - Если НЕ ПараметрыЖурнала.Свойство("Данные") Тогда + Если Не ПараметрыЖурнала.Свойство("Данные") Тогда ПараметрыЖурнала.Вставить("Данные", Рассылка); КонецЕсли; - Если НЕ ПараметрыЖурнала.Свойство("Метаданные") Тогда + Если Не ПараметрыЖурнала.Свойство("Метаданные") Тогда ПараметрыЖурнала.Вставить("Метаданные", ПараметрыЖурнала.Данные.Метаданные()); КонецЕсли; // Проверка прав доступа - Если НЕ ПравоВывода(ПараметрыЖурнала) Тогда + Если Не ПравоВывода(ПараметрыЖурнала) Тогда Возврат Ложь; КонецЕсли; // Проверка базовых реквизитов рассылки. - Если НЕ Рассылка.Подготовлена - ИЛИ Рассылка.ПометкаУдаления Тогда + Если Не Рассылка.Подготовлена + Или Рассылка.ПометкаУдаления Тогда Причина = ""; - Если НЕ Рассылка.Подготовлена Тогда + Если Не Рассылка.Подготовлена Тогда Причина = Причина + Символы.ПС + НСтр("ru = 'Рассылка не подготовлена'"); КонецЕсли; Если Рассылка.ПометкаУдаления Тогда @@ -201,9 +201,9 @@ ПараметрыДоставки.ИспользоватьЭлектроннуюПочту = Ложь; - Если НЕ ПараметрыДоставки.ИспользоватьПапку - И НЕ ПараметрыДоставки.ИспользоватьСетевойКаталог - И НЕ ПараметрыДоставки.ИспользоватьFTPРесурс Тогда + Если Не ПараметрыДоставки.ИспользоватьПапку + И Не ПараметрыДоставки.ИспользоватьСетевойКаталог + И Не ПараметрыДоставки.ИспользоватьFTPРесурс Тогда Возврат Ложь; @@ -229,6 +229,26 @@ Если Рассылка.ПисьмоВФорматеHTML Тогда СтруктураКартинок = Рассылка.КартинкиПисьмаВФорматеHTML.Получить(); Если ТипЗнч(СтруктураКартинок) = Тип("Структура") Тогда + // Конвертация HTML текста в ДокументHTML. + Построитель = Новый ПостроительDOM; + ЧтениеHTML = Новый ЧтениеHTML; + ЧтениеHTML.УстановитьСтроку(ПараметрыДоставки.ШаблонТекста); + ДокументHTML = Построитель.Прочитать(ЧтениеHTML); + + // Замена имен картинок в документе HTML на идентификаторы. + Для Каждого Картинка Из ДокументHTML.Картинки Цикл + АтрибутИсточникКартинки = Картинка.Атрибуты.ПолучитьИменованныйЭлемент("src"); + АтрибутИсточникКартинки.ТекстовоеСодержимое = "cid:" + АтрибутИсточникКартинки.ТекстовоеСодержимое; + КонецЦикла; + + // Конвертация ДокументHTML обратно в текст HTML. + ЗаписьDOM = Новый ЗаписьDOM; + ЗаписьHTML = Новый ЗаписьHTML; + ЗаписьHTML.УстановитьСтроку(); + ЗаписьDOM.Записать(ДокументHTML, ЗаписьHTML); + ПараметрыДоставки.ШаблонТекста = ЗаписьHTML.Закрыть(); + + // Запись картинок с именами в качестве идентификаторов. Для Каждого КлючИЗначение Из СтруктураКартинок Цикл ПараметрыДоставки.ПараметрыПисьма.Вложения.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); КонецЦикла; @@ -344,7 +364,7 @@ Функция ВыполнитьРассылку(ТаблицаОтчетов, ПараметрыДоставки, Рассылка, ПараметрыЖурнала = Неопределено) Экспорт РассылкаВыполнена = Ложь; - Если НЕ ПараметрыДоставки.Свойство("ЗапускЗафиксирован") ИЛИ НЕ ПараметрыДоставки.ЗапускЗафиксирован Тогда + Если Не ПараметрыДоставки.Свойство("ЗапускЗафиксирован") Или Не ПараметрыДоставки.ЗапускЗафиксирован Тогда РегистрыСведений.СостоянияРассылокОтчетов.ЗафиксироватьЗапускРассылки(Рассылка); КонецЕсли; @@ -352,7 +372,7 @@ ДеревоОтчетов = СоздатьДеревоОтчетов(); // Заполнение параметрами по умолчанию и проверка на заполненность ключевых параметров доставки. - Если НЕ ЗаполнитьПараметрыРассылкиПараметрамиПоУмолчанию(ТаблицаОтчетов, ПараметрыДоставки, Рассылка, ПараметрыЖурнала) Тогда + Если Не ЗаполнитьПараметрыРассылкиПараметрамиПоУмолчанию(ТаблицаОтчетов, ПараметрыДоставки, Рассылка, ПараметрыЖурнала) Тогда Возврат Ложь; КонецЕсли; @@ -378,7 +398,7 @@ // Инициализация отчета. ПараметрыОтчета = Новый Структура("Отчет, Настройки, Форматы, ОтправлятьЕслиПустой"); ЗаполнитьЗначенияСвойств(ПараметрыОтчета, СтрокаОтчет); - Если НЕ ИнициализироватьОтчет(ПараметрыЖурнала, ПараметрыОтчета, ПараметрыДоставки.Персонализирована) Тогда + Если Не ИнициализироватьОтчет(ПараметрыЖурнала, ПараметрыОтчета, ПараметрыДоставки.Персонализирована) Тогда Продолжить; КонецЕсли; @@ -589,7 +609,7 @@ КонецЕсли; // Основной вид контактной информации "E-mail" для объекта. - Если Настройки.Свойство("ВидКИ") И НЕ Настройки.ВидКИ.ЭтоГруппа Тогда + Если Настройки.Свойство("ВидКИ") И Не Настройки.ВидКИ.ЭтоГруппа Тогда СтрокаТаблицы.ОсновнойВидКИ = Настройки.ВидКИ; СтрокаТаблицы.ГруппаКИ = Настройки.ВидКИ.Родитель; Иначе @@ -690,9 +710,9 @@ ИначеЕсли Всего <= 5 Тогда ТекстСообщения = ""; Для Каждого СтрокаТаблицы Из ТаблицаРассылок Цикл - Если НЕ СтрокаТаблицы.Подготовлена Тогда + Если Не СтрокаТаблицы.Подготовлена Тогда ШаблонСообщения = НСтр("ru = 'Рассылка ""%1"" не подготовлена.'"); - ИначеЕсли НЕ СтрокаТаблицы.Выполнена Тогда + ИначеЕсли Не СтрокаТаблицы.Выполнена Тогда ШаблонСообщения = НСтр("ru = 'Рассылка ""%1"" не выполнена.'"); ИначеЕсли СтрокаТаблицы.СОшибками Тогда ШаблонСообщения = НСтр("ru = 'Рассылка ""%1"" выполнена с ошибками.'"); @@ -741,12 +761,14 @@ // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам"].Добавить( - "РассылкаОтчетов"); - + СерверныйМодуль = "РассылкаОтчетов"; + + Событие = "СтандартныеПодсистемы.БазоваяФункциональность\ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам"; + СерверныеОбработчики[Событие].Добавить(СерверныйМодуль); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ТекущиеДела") Тогда - СерверныеОбработчики["СтандартныеПодсистемы.ТекущиеДела\ПриЗаполненииСпискаТекущихДел"].Добавить( - "РассылкаОтчетов"); + Событие = "СтандартныеПодсистемы.ТекущиеДела\ПриЗаполненииСпискаТекущихДел"; + СерверныеОбработчики[Событие].Добавить(СерверныйМодуль); КонецЕсли; КонецПроцедуры @@ -767,7 +789,7 @@ Возврат; КонецЕсли; - ТекстЗапроса = + ТекстЗапроса = // ОБЪЕДИНИТЬ ВСЕ используется вместо ИЛИ (требование стандартов). "ВЫБРАТЬ | РассылкиОтчетов.Ссылка, | РассылкиОтчетов.ИспользоватьFTPРесурс, @@ -781,8 +803,24 @@ | Справочник.РассылкиОтчетов КАК РассылкиОтчетов |ГДЕ | РассылкиОтчетов.ПометкаУдаления = ЛОЖЬ - | И (РассылкиОтчетов.ИспользоватьСетевойКаталог = ИСТИНА - | ИЛИ РассылкиОтчетов.ИспользоватьFTPРесурс = ИСТИНА)"; + | И РассылкиОтчетов.ИспользоватьСетевойКаталог = ИСТИНА + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | РассылкиОтчетов.Ссылка, + | РассылкиОтчетов.ИспользоватьFTPРесурс, + | РассылкиОтчетов.FTPСервер, + | РассылкиОтчетов.FTPКаталог, + | РассылкиОтчетов.FTPПорт, + | РассылкиОтчетов.ИспользоватьСетевойКаталог, + | РассылкиОтчетов.СетевойКаталогWindows, + | РассылкиОтчетов.СетевойКаталогLinux + |ИЗ + | Справочник.РассылкиОтчетов КАК РассылкиОтчетов + |ГДЕ + | РассылкиОтчетов.ПометкаУдаления = ЛОЖЬ + | И РассылкиОтчетов.ИспользоватьFTPРесурс = ИСТИНА"; Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; @@ -815,10 +853,13 @@ // * Подсказка - Строка - текст подсказки. // Процедура ПриЗаполненииСпискаТекущихДел(ТекущиеДела) Экспорт + Если Не ПравоДобавления() Тогда + Возврат; + КонецЕсли; + ИмяДела = "ПроблемыСРассылкамиОтчетов"; МодульТекущиеДелаСервер = ОбщегоНазначения.ОбщийМодуль("ТекущиеДелаСервер"); - Если Не ПравоДоступа("Просмотр", Метаданные.Справочники.РассылкиОтчетов) - Или МодульТекущиеДелаСервер.ДелоОтключено("ПроблемыСРассылкамиОтчетов") Тогда + Если МодульТекущиеДелаСервер.ДелоОтключено(ИмяДела) Тогда Возврат; КонецЕсли; @@ -826,20 +867,15 @@ Разделы = МодульТекущиеДелаСервер.РазделыДляОбъекта(Метаданные.Справочники.РассылкиОтчетов.ПолноеИмя()); Для Каждого Раздел Из Разделы Цикл - - ИдентификаторМоихЗадач = "ПроблемыСРассылкамиОтчетов" + СтрЗаменить(Раздел.ПолноеИмя(), ".", ""); - Дело = ТекущиеДела.Добавить(); - Дело.Идентификатор = ИдентификаторМоихЗадач; + Дело.Идентификатор = ИмяДела + СтрЗаменить(Раздел.ПолноеИмя(), ".", ""); Дело.ЕстьДела = КоличествоПроблем > 0; Дело.Представление = НСтр("ru = 'Проблемы с рассылками отчетов'"); Дело.Количество = КоличествоПроблем; Дело.Форма = "Справочник.РассылкиОтчетов.ФормаСписка"; Дело.Важное = Истина; Дело.Владелец = Раздел; - КонецЦикла; - КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -911,6 +947,15 @@ Объекты.Вставить(Метаданные.Справочники.РассылкиОтчетов.ПолноеИмя(), "РеквизитыНеРедактируемыеВГрупповойОбработке"); КонецПроцедуры +// См. описание одноименной процедуры в общем модуле РегламентныеЗаданияПереопределяемый. +// +Процедура ПриОпределенииНастроекРегламентныхЗаданий(Зависимости) Экспорт + Зависимость = Зависимости.Добавить(); + Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.РассылкаОтчетов; + Зависимость.РаботаетСВнешнимиРесурсами = Истина; + Зависимость.Параметризуется = Истина; +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обновление ИБ. @@ -927,8 +972,8 @@ РезультатЗапроса = Запрос.Выполнить().Выбрать(); Пока РезультатЗапроса.Следующий() Цикл - Если НЕ ПустаяСтрока(РезультатЗапроса.УдалитьFTPПароль) - ИЛИ НЕ ПустаяСтрока(РезультатЗапроса.УдалитьПарольАрхива) Тогда + Если Не ПустаяСтрока(РезультатЗапроса.УдалитьFTPПароль) + Или Не ПустаяСтрока(РезультатЗапроса.УдалитьПарольАрхива) Тогда НачатьТранзакцию(); Попытка УстановитьПривилегированныйРежим(Истина); @@ -973,7 +1018,7 @@ ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.РассылкаОтчетов); // Проверки - Если НЕ Рассылка.ВыполнятьПоРасписанию Тогда + Если Не Рассылка.ВыполнятьПоРасписанию Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'У рассылки отчетов ""%1"" отключен флажок ""Выполнять по расписанию""'"), Строка(Рассылка)); @@ -1113,7 +1158,7 @@ ПолучателиМД = Метаданные.НайтиПоТипу(ТипПолучателей); УстановитьПривилегированныйРежим(Ложь); - Если НЕ ПолучателиМД.Иерархический Тогда + Если Не ПолучателиМД.Иерархический Тогда // Не иерархический ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "В ИЕРАРХИИ", "В"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И &ЭтоНеГруппа", ""); @@ -1165,7 +1210,7 @@ КонецПопытки; Для Каждого СтрИтог Из ТЗИтог Цикл - Если НЕ ЗначениеЗаполнено(СтрИтог.EMail) Тогда + Если Не ЗначениеЗаполнено(СтрИтог.EMail) Тогда Продолжить; КонецЕсли; @@ -1202,7 +1247,7 @@ // // Параметры: // ПараметрыОтчета - Структура - Отчет, настройки и результат его инициализации. -// * Отчет - СправочникСсылка.ВариантыОтчетов, СправочникСсылка.ДополнительныеОтчетыИОбработки - Ссылка отчета. +// * Отчет - СправочникСсылка.ВариантыОтчетов - Ссылка отчета. // * Настройки - Неопределено, ПользовательскиеНастройкиКомпоновкиДанных, ТаблицаЗначений - // Настройки отчета, которые необходимо использовать, // подробнее см. процедуру "ЗаписатьНастройкиСтрокиОтчеты" модуля "Справочник.РассылкиОтчетов.ФормаОбъекта". @@ -1224,7 +1269,7 @@ // * СхемаКД - СхемаКомпоновкиДанных - // * КомпоновщикНастроекКД - КомпоновщикНастроекКомпоновкиДанных - // * НастройкиКД - НастройкиКомпоновкиДанных - -// * АдресСхемыКД - Строка - Адрес схемы компоновки данных во временном хранилище. +// * АдресСхемы - Строка - Адрес схемы компоновки данных во временном хранилище. // Свойства произвольных отчетов: // * ДоступныеРеквизиты - Структура - Имя и параметры реквизита. // ** <Имя реквизита> - Структура - Параметры реквизита. @@ -1246,80 +1291,46 @@ ПараметрыОтчета.Вставить("Персонализирован", Ложь); ПараметрыОтчета.Вставить("ПерсональныеОтборы", Новый Соответствие); ПараметрыОтчета.Вставить("ЭтоВариант", ТипЗнч(ПараметрыОтчета.Отчет) = Тип("СправочникСсылка.ВариантыОтчетов")); + ПараметрыОтчета.Вставить("СКД", Ложь); + ПараметрыОтчета.Вставить("ДоступныеРеквизиты", Неопределено); + ПараметрыОтчета.Вставить("КомпоновщикНастроекКД", Неопределено); - // Определение структуры настроек. Общие параметры. - ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПараметрыОтчета, "Имя"); - ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПараметрыОтчета, "ПолноеИмя"); - ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПараметрыОтчета, "КлючВарианта"); - ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПараметрыОтчета, "СКД"); - ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПараметрыОтчета, "Метаданные"); - ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПараметрыОтчета, "Объект"); - // Определение структуры настроек. Параметры СКД отчетов. - ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПараметрыОтчета, "СхемаКД"); - ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПараметрыОтчета, "КомпоновщикНастроекКД"); - ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПараметрыОтчета, "АдресСхемыКД"); - ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПараметрыОтчета, "НастройкиКД"); - // Определение структуры настроек. Параметры произвольных отчетов. - ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПараметрыОтчета, "ДоступныеРеквизиты"); - - // Базовые проверки и настройки отчета. - Если ПараметрыОтчета.ЭтоВариант Тогда - ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ПараметрыОтчета.Отчет, "Отчет, КлючВарианта"); - ЗаполнитьЗначенияСвойств(ПараметрыОтчета, ЗначенияРеквизитов, "КлючВарианта"); - - // В существующих рассылках формируем только отчеты, готовые к рассылке. - Если РассылкаОтчетовПовтИсп.ИсключаемыеОтчеты().Найти(ЗначенияРеквизитов.Отчет) <> Неопределено Тогда - ПараметрыОтчета.Ошибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Отчет ""%1"" не поддерживает рассылку. - |Подробнее см. в процедуре ОпределитьИсключаемыеОтчеты модуля РассылкаОтчетовПереопределяемый.'"), - Строка(ЗначенияРеквизитов.Отчет)); - ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, ПараметрыОтчета.Ошибки); - Возврат Ложь; - КонецЕсли; - - Подключение = ВариантыОтчетов.ПодключитьОтчетОбъект(ЗначенияРеквизитов.Отчет, Истина); - Если Не Подключение.Успех Тогда - ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, Подключение.ТекстОшибки); - Возврат Ложь; - КонецЕсли; - ЗаполнитьЗначенияСвойств(ПараметрыОтчета, Подключение, "Имя, ПолноеИмя, Метаданные, Объект"); - - Иначе - - ЗаголовокСообщенияОбОшибке = НСтр("ru = 'Ошибка подключения дополнительного отчета %1:'"); - - Результат = Неопределено; - СведенияОВнешнейОбработке = Неопределено; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда - МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); - Попытка - МодульДополнительныеОтчетыИОбработки.ПриПодключенииДопОтчета(ПараметрыОтчета.Отчет, ПараметрыОтчета, Результат); - СведенияОВнешнейОбработке = ПараметрыОтчета.Объект.СведенияОВнешнейОбработке(); - Исключение - ЗаписьЖурнала(ПараметрыЖурнала, , - ЗаголовокСообщенияОбОшибке, ИнформацияОбОшибке(), - "'"+ Строка(ПараметрыОтчета.Отчет) +"'"); - КонецПопытки; - КонецЕсли; - - Если Результат <> Истина Тогда - Если Результат = Неопределено Тогда - ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, - ЗаголовокСообщенияОбОшибке, НСтр("ru = 'Подсистема ''Дополнительные отчеты и обработки'' недоступна.'"), - "'"+ Строка(ПараметрыОтчета.Отчет) +"'"); - КонецЕсли; - Возврат Ложь; - КонецЕсли; - - // Проверки на соответствия требованиям подсистемы. - Если ТипЗнч(СведенияОВнешнейОбработке) <> Тип("Структура") Тогда - ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, - ЗаголовокСообщенияОбОшибке, НСтр("ru = 'Неверно заполнены сведения о внешней обработке.'"), - "'"+ Строка(ПараметрыОтчета.Отчет) +"'"); - Возврат Ложь; - КонецЕсли; - + ПараметрыПодключения = Новый Структура; + ПараметрыПодключения.Вставить("СсылкаВарианта", ПараметрыОтчета.Отчет); + ПараметрыПодключения.Вставить("ИдентификаторФормы", УникальныйИдентификаторФормы); + ПараметрыПодключения.Вставить("ПользовательскиеНастройкиКД", ПараметрыОтчета.Настройки); + Если ТипЗнч(ПараметрыПодключения.ПользовательскиеНастройкиКД) <> Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда + ПараметрыПодключения.ПользовательскиеНастройкиКД = Новый ПользовательскиеНастройкиКомпоновкиДанных; КонецЕсли; + Попытка + Подключение = ВариантыОтчетов.ПодключитьОтчетИЗагрузитьНастройки(ПараметрыПодключения); + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыОтчета, Подключение, Истина); + Исключение + ПараметрыОтчета.Ошибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При подключении и загрузке настроек отчета ""%1"" возникла ошибка.'"), + Строка(ПараметрыОтчета.Отчет)); + ЗаписьЖурнала( + ПараметрыЖурнала, + УровеньЖурналаРегистрации.Ошибка, + ПараметрыОтчета.Ошибки, + ИнформацияОбОшибке()); + Возврат ПараметрыОтчета.Инициализирован; + КонецПопытки; + + // В существующих рассылках формируем только отчеты, готовые к рассылке. + Если РассылкаОтчетовПовтИсп.ИсключаемыеОтчеты().Найти(Подключение.СсылкаОтчета) <> Неопределено Тогда + ПараметрыОтчета.Ошибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Отчет ""%1"" не поддерживает рассылку. + |Подробнее см. в процедуре ОпределитьИсключаемыеОтчеты модуля РассылкаОтчетовПереопределяемый.'"), + Строка(Подключение.СсылкаОтчета)); + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, ПараметрыОтчета.Ошибки); + Возврат Ложь; + КонецЕсли; + Если Не Подключение.Успех Тогда + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, Подключение.ТекстОшибки); + Возврат Ложь; + КонецЕсли; + ПараметрыОтчета.КомпоновщикНастроекКД = Подключение.Объект.КомпоновщикНастроек; // Определение принадлежности отчета к Системе Компоновки Данных. Если ТипЗнч(ПараметрыОтчета.Настройки) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда @@ -1334,66 +1345,10 @@ // Инициализация отчета и заполнение его параметров. Если ПараметрыОтчета.СКД Тогда - // - ОпределенИдентификаторФормы = (ТипЗнч(УникальныйИдентификаторФормы) = Тип("УникальныйИдентификатор")); - // Схема компоновки, на основании которой будет выполняться отчет. - ПараметрыОтчета.СхемаКД = ПараметрыОтчета.Объект.СхемаКомпоновкиДанных; - - // Если передан идентификатор формы, то схема должна хранится пока живет форма (особенность СКД). - Если ОпределенИдентификаторФормы Тогда - ПараметрыОтчета.АдресСхемыКД = ПоместитьВоВременноеХранилище( - ПараметрыОтчета.Объект.СхемаКомпоновкиДанных, - УникальныйИдентификаторФормы); - КонецЕсли; - - // Описывает связь настроек компоновки данных и схемы компоновки данных. - ПараметрыОтчета.КомпоновщикНастроекКД = ПараметрыОтчета.Объект.КомпоновщикНастроек; - - // Краткий синоним - КомпоновщикНастроекКД = ПараметрыОтчета.КомпоновщикНастроекКД; - - // Выполняет инициализацию компоновщика и его настроек (Настройки) источником доступных настроек. - КомпоновщикНастроекКД.Инициализировать( - Новый ИсточникДоступныхНастроекКомпоновкиДанных( - ?(ОпределенИдентификаторФормы, ПараметрыОтчета.АдресСхемыКД, ПараметрыОтчета.СхемаКД))); - - // Настройка компоновки данных в целом. - Если ПараметрыОтчета.ЭтоВариант Тогда - ПараметрыОтчета.НастройкиКД = ПараметрыОтчета.Отчет.Настройки.Получить(); - Если ПараметрыОтчета.НастройкиКД = Неопределено Тогда - ВариантыНастроекКД = ПараметрыОтчета.СхемаКД.ВариантыНастроек; - КлючВарианта = ПараметрыОтчета.Отчет.КлючВарианта; - ВариантНастроекКД = ВариантыНастроекКД.Найти(КлючВарианта); - Если ВариантНастроекКД = Неопределено Тогда - Если КлючВарианта = "" Тогда - Комментарий = НСтр("ru = 'Отчет ""%2"" не содержит настроек. Выберите один из его вариантов.'"); - Иначе - Комментарий = НСтр("ru = 'Предопределенный вариант ""%1"" не найден для отчета ""%2""'"); - КонецЕсли; - ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, - Комментарий, , - КлючВарианта, - ПараметрыОтчета.Имя); - Возврат ПараметрыОтчета.Инициализирован; - КонецЕсли; - ПараметрыОтчета.НастройкиКД = ВариантНастроекКД.Настройки; - КонецЕсли; - Иначе - ПараметрыОтчета.НастройкиКД = ПараметрыОтчета.СхемаКД.НастройкиПоУмолчанию; - КонецЕсли; - - // Загружает настройки в компоновщик. - КомпоновщикНастроекКД.ЗагрузитьНастройки(ПараметрыОтчета.НастройкиКД); - - // Восстановление сохраненных значений. - Если ТипЗнч(ПараметрыОтчета.Настройки) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда - КомпоновщикНастроекКД.ЗагрузитьПользовательскиеНастройки(ПараметрыОтчета.Настройки); - КонецЕсли; - - // Персональные отборы + // Установка персональных отборов. Если ПерсонализацияВозможна Тогда - ПользовательскиеНастройкиКД = КомпоновщикНастроекКД.ПользовательскиеНастройки; + ПользовательскиеНастройкиКД = ПараметрыОтчета.КомпоновщикНастроекКД.ПользовательскиеНастройки; Для Каждого Настройка Из ПользовательскиеНастройкиКД.Элементы Цикл Если ТипЗнч(Настройка) = Тип("ЭлементОтбораКомпоновкиДанных") @@ -1420,7 +1375,7 @@ КонецЦикла; КонецЕсли; - Иначе // ПараметрыОтчета.СКД: + Иначе // Не СКД Отчет. // Доступные реквизиты отчета ПараметрыОтчета.ДоступныеРеквизиты = Новый Структура; @@ -1439,7 +1394,7 @@ ЗначениеНастройки = ОписаниеНастройки.Значение; // Доступность реквизита - Если НЕ ПараметрыОтчета.ДоступныеРеквизиты.Свойство(ИмяРеквизита) Тогда + Если Не ПараметрыОтчета.ДоступныеРеквизиты.Свойство(ИмяРеквизита) Тогда Продолжить; КонецЕсли; @@ -1476,7 +1431,7 @@ // * ТабДок - ТабличныйДокумент - Табличный документ. // * Пустой - Булево - Истина, если отчет не содержал ни одного значения параметра. // -Функция СформироватьОтчет(ПараметрыЖурнала, ПараметрыОтчета, Получатель = Неопределено) Экспорт +Функция СформироватьОтчет(ПараметрыЖурнала, ПараметрыОтчета, Получатель = Неопределено) Результат = Новый Структура("ТабДок, СФормирован, Пустой", Новый ТабличныйДокумент, Ложь, Истина); Если Не ПараметрыОтчета.Свойство("Инициализирован") Тогда @@ -1486,38 +1441,28 @@ Возврат Результат; КонецЕсли; - ОтчетОбъект = ПараметрыОтчета.Объект; + // Настройки подключения отчета. + ПараметрыФормирования = Новый Структура("Объект, ПолноеИмя, СсылкаОтчета, СсылкаВарианта, КлючВарианта, Метаданные, НастройкиКД, АдресСхемы"); + ЗаполнитьЗначенияСвойств(ПараметрыФормирования, ПараметрыОтчета); - ПараметрыФормирования = Новый Структура; - ПараметрыФормирования.Вставить("ВариантСсылка", ПараметрыОтчета.Отчет); - ПараметрыФормирования.Вставить("ОтчетОбъект", ОтчетОбъект); - - Если ПараметрыОтчета.СКД Тогда - ПараметрыФормирования.Вставить("НастройкиКД", Неопределено); - - // Заполнение персонализированных данных получателей. - Если Получатель <> Неопределено И ПараметрыОтчета.Свойство("ПерсональныеОтборы") Тогда + // Заполнение персонализированных данных получателей. + Если Получатель <> Неопределено И ПараметрыОтчета.Свойство("ПерсональныеОтборы") Тогда + Если ПараметрыОтчета.СКД Тогда ПользовательскиеНастройкиКД = ПараметрыОтчета.КомпоновщикНастроекКД.ПользовательскиеНастройки; Для Каждого КлючИЗначение Из ПараметрыОтчета.ПерсональныеОтборы Цикл Настройка = ПользовательскиеНастройкиКД.ПолучитьОбъектПоИдентификатору(КлючИЗначение.Ключ); - Если ТипЗнч(Настройка) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Если ТипЗнч(Настройка) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда Настройка.ПравоеЗначение = Получатель; ИначеЕсли ТипЗнч(Настройка) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда Настройка.Значение = Получатель; КонецЕсли; КонецЦикла; ПараметрыФормирования.Вставить("ПользовательскиеНастройкиКД", ПользовательскиеНастройкиКД); - КонецЕсли; - - Иначе - - // Заполнение значения персонализированных отборов произвольных отчетов. - Если Получатель <> Неопределено И ПараметрыОтчета.Свойство("ПерсональныеОтборы") Тогда + Иначе Для Каждого КлючИЗначение Из ПараметрыОтчета.ПерсональныеОтборы Цикл - ОтчетОбъект[КлючИЗначение.Ключ] = Получатель; + ПараметрыОтчета.Объект[КлючИЗначение.Ключ] = Получатель; КонецЦикла; КонецЕсли; - КонецЕсли; Формирование = ВариантыОтчетов.СформироватьОтчет(ПараметрыФормирования, Истина, Не ПараметрыОтчета.ОтправлятьЕслиПустой); @@ -1566,7 +1511,7 @@ ТипПлатформыСервера = ОбщегоНазначенияПовтИсп.ТипПлатформыСервера(); Если ТипПлатформыСервера = ТипПлатформы.Linux_x86 - ИЛИ ТипПлатформыСервера = ТипПлатформы.Linux_x86_64 Тогда + Или ТипПлатформыСервера = ТипПлатформы.Linux_x86_64 Тогда СетевойКаталогСервера = ПараметрыДоставки.СетевойКаталогLinux; КонецЕсли; @@ -1673,7 +1618,7 @@ Попытка ОтправитьОтчетыПолучателю(ВложенияПисьма, ПараметрыДоставки); - Если НЕ ПараметрыДоставки.ТолькоУведомить Тогда + Если Не ПараметрыДоставки.ТолькоУведомить Тогда Результат = Истина; КонецЕсли; Если Результат = Истина Тогда @@ -1698,7 +1643,7 @@ // Строка - Имя пользователя программы. // Функция ПолучитьИмяПользователяИБ(Пользователь) Экспорт - Если НЕ ЗначениеЗаполнено(Пользователь) Тогда + Если Не ЗначениеЗаполнено(Пользователь) Тогда Возврат Неопределено; КонецЕсли; @@ -1875,7 +1820,7 @@ Результат = СформироватьОтчет(ПараметрыЖурнала, ПараметрыОтчета, ПолучательСсылка); // Проверка результата - Если НЕ Результат.Сформирован ИЛИ (Результат.Пустой И НЕ ПараметрыОтчета.ОтправлятьЕслиПустой) Тогда + Если Не Результат.Сформирован Или (Результат.Пустой И Не ПараметрыОтчета.ОтправлятьЕслиПустой) Тогда Возврат; КонецЕсли; @@ -1945,7 +1890,7 @@ // Проверки и регистрация результата. ВременныйФайл = Новый Файл(ПолноеИмяФайла); - Если НЕ ВременныйФайл.Существует() Тогда + Если Не ВременныйФайл.Существует() Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, ЗаголовокОшибки + Символы.ПС + НСтр("ru = 'Файл %3 не найден.'"), , "'"+ СтрокаОтчет.Ключ +"'", @@ -1979,7 +1924,7 @@ СтрокаФайл.Настройки.ФайлСКаталогом = (КаталогФайла.Существует() И КаталогФайла.ЭтоКаталог()); - Если СтрокаФайл.Настройки.ФайлСКаталогом И НЕ ПараметрыДоставки.Архивировать Тогда + Если СтрокаФайл.Настройки.ФайлСКаталогом И Не ПараметрыДоставки.Архивировать Тогда // Каталог вместе с файлом архивируются, а вместо файла отправляется архив файла с каталогом. ИмяАрхива = ВременныйФайл.ИмяБезРасширения + ".zip"; ПолноеИмяАрхива = КаталогПолучателя + ИмяАрхива; @@ -2035,15 +1980,15 @@ ПараметрыЖурнала = Новый Структура; КонецЕсли; - Если НЕ ПараметрыЖурнала.Свойство("ИмяСобытия") Тогда + Если Не ПараметрыЖурнала.Свойство("ИмяСобытия") Тогда ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Запуск по требованию'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка())); КонецЕсли; - Если НЕ ПараметрыЖурнала.Свойство("Данные") Тогда + Если Не ПараметрыЖурнала.Свойство("Данные") Тогда ПараметрыЖурнала.Вставить("Данные", Рассылка); КонецЕсли; - Если НЕ ПараметрыЖурнала.Свойство("Метаданные") Тогда + Если Не ПараметрыЖурнала.Свойство("Метаданные") Тогда ПараметрыЖурнала.Вставить("Метаданные", Неопределено); ТипДанных = ТипЗнч(ПараметрыЖурнала.Данные); Если ТипДанных <> Тип("Структура") И ОбщегоНазначения.ЭтоСсылка(ТипДанных) Тогда @@ -2052,7 +1997,7 @@ КонецЕсли; // Проверка прав доступа - Если НЕ ПравоВывода(ПараметрыЖурнала) Тогда + Если Не ПравоВывода(ПараметрыЖурнала) Тогда Возврат Ложь; КонецЕсли; @@ -2067,7 +2012,7 @@ ПараметрыДоставки.Вставить("ВыполненныеСпособыПубликации", ""); Если ПараметрыДоставки.ИспользоватьПапку Тогда - Если НЕ ЗначениеЗаполнено(ПараметрыДоставки.Папка) Тогда + Если Не ЗначениеЗаполнено(ПараметрыДоставки.Папка) Тогда ПараметрыДоставки.ИспользоватьПапку = Ложь; ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Предупреждение, НСтр("ru = 'Папка не заполнена, доставка в папку отключена'")); @@ -2078,7 +2023,7 @@ Иначе ПравоДоступа = Истина; КонецЕсли; - Если НЕ ПравоДоступа Тогда + Если Не ПравоДоступа Тогда ПараметрыДоставки.ИспользоватьПапку = Ложь; УстановитьПривилегированныйРежим(Истина); ПредставлениеПапки = Строка(ПараметрыДоставки.Папка); @@ -2091,8 +2036,8 @@ КонецЕсли; Если ПараметрыДоставки.ИспользоватьСетевойКаталог Тогда - Если НЕ ЗначениеЗаполнено(ПараметрыДоставки.СетевойКаталогWindows) - ИЛИ НЕ ЗначениеЗаполнено(ПараметрыДоставки.СетевойКаталогLinux) Тогда + Если Не ЗначениеЗаполнено(ПараметрыДоставки.СетевойКаталогWindows) + Или Не ЗначениеЗаполнено(ПараметрыДоставки.СетевойКаталогLinux) Тогда Если ЗначениеЗаполнено(ПараметрыДоставки.СетевойКаталогWindows) Тогда ЗначениеПодстановки = НСтр("ru = 'Linux'"); @@ -2117,24 +2062,24 @@ КонецЕсли; КонецЕсли; - Если ПараметрыДоставки.ИспользоватьFTPРесурс И НЕ ЗначениеЗаполнено(ПараметрыДоставки.Сервер) Тогда + Если ПараметрыДоставки.ИспользоватьFTPРесурс И Не ЗначениеЗаполнено(ПараметрыДоставки.Сервер) Тогда ПараметрыДоставки.ИспользоватьFTPРесурс = Ложь; ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, НСтр("ru = 'FTP сервер не заполнен, доставка в папку на FTP ресурс отключена'")); КонецЕсли; - Если ПараметрыДоставки.ИспользоватьЭлектроннуюПочту И НЕ ЗначениеЗаполнено(ПараметрыДоставки.УчетнаяЗапись) Тогда + Если ПараметрыДоставки.ИспользоватьЭлектроннуюПочту И Не ЗначениеЗаполнено(ПараметрыДоставки.УчетнаяЗапись) Тогда ПараметрыДоставки.ИспользоватьЭлектроннуюПочту = Ложь; ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, НСтр("ru = 'Учетная запись не выбрана, доставка по электронной почте отключена'")); КонецЕсли; - Если НЕ ПараметрыДоставки.Свойство("Персонализирована") Тогда + Если Не ПараметрыДоставки.Свойство("Персонализирована") Тогда ПараметрыДоставки.Вставить("Персонализирована", Ложь); КонецЕсли; Если ПараметрыДоставки.Персонализирована Тогда - Если НЕ ПараметрыДоставки.ИспользоватьЭлектроннуюПочту Тогда + Если Не ПараметрыДоставки.ИспользоватьЭлектроннуюПочту Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, НСтр("ru = 'Персонализированная рассылка может быть отправлена только по электронной почте'")); Возврат Ложь; @@ -2147,12 +2092,12 @@ Если ПараметрыДоставки.ИспользоватьЭлектроннуюПочту Тогда // Соединение с почтовым сервером поднимается дольше всего. - Если НЕ ПараметрыДоставки.Свойство("Соединение") Тогда + Если Не ПараметрыДоставки.Свойство("Соединение") Тогда ПараметрыДоставки.Вставить("Соединение", Неопределено); КонецЕсли; // Уведомления о доставке по электронной почте. - Если НЕ ПараметрыДоставки.Свойство("ТолькоУведомить") Тогда + Если Не ПараметрыДоставки.Свойство("ТолькоУведомить") Тогда ПараметрыДоставки.Вставить("ТолькоУведомить", Ложь); КонецЕсли; @@ -2166,12 +2111,12 @@ КонецЕсли; // - Если НЕ ПараметрыДоставки.Свойство("СкрытыеКопии") Тогда + Если Не ПараметрыДоставки.Свойство("СкрытыеКопии") Тогда ПараметрыДоставки.Вставить("СкрытыеКопии", Ложь); КонецЕсли; // Параметры письма - Если НЕ ПараметрыДоставки.Свойство("ПараметрыПисьма") Тогда + Если Не ПараметрыДоставки.Свойство("ПараметрыПисьма") Тогда ПараметрыДоставки.Вставить("ПараметрыПисьма", Новый Структура); КонецЕсли; @@ -2180,40 +2125,24 @@ ПараметрыПисьма.Вставить("ОбрабатыватьТексты", Ложь); // Тип текста почтового сообщения. - Если НЕ ПараметрыПисьма.Свойство("ТипТекста") ИЛИ НЕ ЗначениеЗаполнено(ПараметрыПисьма.ТипТекста) Тогда + Если Не ПараметрыПисьма.Свойство("ТипТекста") Или Не ЗначениеЗаполнено(ПараметрыПисьма.ТипТекста) Тогда ПараметрыПисьма.Вставить("ТипТекста", ТипТекстаПочтовогоСообщения.ПростойТекст); КонецЕсли; - ПараметрыДоставки.Вставить("ПисьмоВФорматеHTML", ПараметрыПисьма.ТипТекста = "HTML" ИЛИ ПараметрыПисьма.ТипТекста = ТипТекстаПочтовогоСообщения.HTML); + ПараметрыДоставки.Вставить("ПисьмоВФорматеHTML", ПараметрыПисьма.ТипТекста = "HTML" Или ПараметрыПисьма.ТипТекста = ТипТекстаПочтовогоСообщения.HTML); // Тип текста почтового сообщения. Если ПараметрыПисьма.Свойство("Вложения") Тогда ПараметрыПисьма.Вставить("ПредустановленныеВложения", ПараметрыПисьма.Вложения); - - // Приведение кода HTML документа к "правильным" ссылкам на вложенные картинки. - Если ПараметрыДоставки.ПисьмоВФорматеHTML Тогда - Для Каждого КлючИЗначение Из ПараметрыПисьма.ПредустановленныеВложения Цикл - Если ТипЗнч(КлючИЗначение.Значение) = Тип("Картинка") И СтрНайти(КлючИЗначение.Ключ, ".") = 0 Тогда - ФорматЭтойКартинки = КлючИЗначение.Значение.Формат(); - Если ФорматЭтойКартинки <> ФорматКартинки.НеизвестныйФормат Тогда - НовыйКлюч = КлючИЗначение.Ключ +"."+ НРег(Строка(ФорматЭтойКартинки)); - ПараметрыДоставки.ШаблонТекста = СтрЗаменить( - ПараметрыДоставки.ШаблонТекста, - "<img src='"+ КлючИЗначение.Ключ +"' width='", - "<img src='"+ НовыйКлюч +"' width='"); - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЕсли; КонецЕсли; // Шаблон темы - Если НЕ ПараметрыДоставки.Свойство("ШаблонТемы") ИЛИ НЕ ЗначениеЗаполнено(ПараметрыДоставки.ШаблонТемы) Тогда + Если Не ПараметрыДоставки.Свойство("ШаблонТемы") Или Не ЗначениеЗаполнено(ПараметрыДоставки.ШаблонТемы) Тогда ПараметрыДоставки.Вставить("ШаблонТемы", РассылкаОтчетовКлиентСервер.ШаблонТемы()); КонецЕсли; // Шаблон сообщения - Если НЕ ПараметрыДоставки.Свойство("ШаблонТекста") ИЛИ НЕ ЗначениеЗаполнено(ПараметрыДоставки.ШаблонТекста) Тогда + Если Не ПараметрыДоставки.Свойство("ШаблонТекста") Или Не ЗначениеЗаполнено(ПараметрыДоставки.ШаблонТекста) Тогда ПараметрыДоставки.Вставить("ШаблонТекста", РассылкаОтчетовКлиентСервер.ШаблонТекста()); Если ПараметрыДоставки.ПисьмоВФорматеHTML Тогда Документ = Новый ФорматированныйДокумент; @@ -2237,7 +2166,7 @@ СтруктураЗаполненияШаблонов.Автор = ПараметрыДоставки.Автор; СтруктураЗаполненияШаблонов.ЗаголовокСистемы = РассылкаОтчетовПовтИсп.ИмяЭтойИнформационнойБазы(); СтруктураЗаполненияШаблонов.ДатаВыполнения = ПараметрыДоставки.ДатаВыполнения; - Если НЕ ПараметрыДоставки.Персонализирована Тогда + Если Не ПараметрыДоставки.Персонализирована Тогда СтруктураЗаполненияШаблонов.Вставить("Получатель", ""); КонецЕсли; @@ -2276,16 +2205,16 @@ ПараметрыДоставки.Вставить("НастройкиПолучателей", Новый Соответствие); // Признак архивирования и пароль архива. - Если НЕ ПараметрыДоставки.Свойство("Архивировать") Тогда + Если Не ПараметрыДоставки.Свойство("Архивировать") Тогда ПараметрыДоставки.Вставить("Архивировать", Ложь); ПараметрыДоставки.Вставить("ПарольАрхива", ""); - ИначеЕсли НЕ ПараметрыДоставки.Свойство("ПарольАрхива") Тогда + ИначеЕсли Не ПараметрыДоставки.Свойство("ПарольАрхива") Тогда ПараметрыДоставки.Вставить("ПарольАрхива", ""); КонецЕсли; Если ПараметрыДоставки.Архивировать Тогда // Имя архива - Если НЕ ПараметрыДоставки.Свойство("ИмяАрхива") ИЛИ НЕ ЗначениеЗаполнено(ПараметрыДоставки.ИмяАрхива) Тогда + Если Не ПараметрыДоставки.Свойство("ИмяАрхива") Или Не ЗначениеЗаполнено(ПараметрыДоставки.ИмяАрхива) Тогда ПараметрыДоставки.Вставить("ИмяАрхива", РассылкаОтчетовКлиентСервер.ШаблонИмениАрхива()); КонецЕсли; @@ -2315,8 +2244,8 @@ ПараметрыДоставки.Вставить("ДобавлятьСсылки", ""); Если ПараметрыДоставки.ИспользоватьЭлектроннуюПочту И (ПараметрыДоставки.ИспользоватьПапку - ИЛИ ПараметрыДоставки.ИспользоватьСетевойКаталог - ИЛИ ПараметрыДоставки.ИспользоватьFTPРесурс) + Или ПараметрыДоставки.ИспользоватьСетевойКаталог + Или ПараметрыДоставки.ИспользоватьFTPРесурс) И ПараметрыДоставки.ЗаполнитьСформированныеОтчетыВШаблонеСообщения Тогда Если ПараметрыДоставки.Архивировать Тогда @@ -2355,10 +2284,11 @@ Для Каждого КлючИЗначение Из ПараметрыПисьма.ПредустановленныеВложения Цикл Вложение = КлючИЗначение.Значение; РаботаСПочтовымиСообщениямиСлужебный.ПривестиВложениеДляВставкиВПисьмо(Вложение); + ИнформацияОКартинке = Новый Структура("ДвоичныеДанные, Идентификатор", Вложение, КлючИЗначение.Ключ); Если ЭтоМассив Тогда - ПараметрыПисьма.Вложения.Добавить(Новый Структура("Ключ, Значение", КлючИЗначение.Ключ, Вложение)); + ПараметрыПисьма.Вложения.Добавить(Новый Структура("Ключ, Значение", КлючИЗначение.Ключ, ИнформацияОКартинке)); Иначе - ПараметрыПисьма.Вложения.Вставить(КлючИЗначение.Ключ, Вложение); + ПараметрыПисьма.Вложения.Вставить(КлючИЗначение.Ключ, ИнформацияОКартинке); КонецЕсли; КонецЦикла; КонецЕсли; @@ -2396,7 +2326,7 @@ КонецЕсли; // Доставка всем получателям - Если ПараметрыДоставки.ЗаполнитьПолучателяВШаблонеТемы ИЛИ ПараметрыДоставки.ЗаполнитьПолучателяВШаблонеСообщения Тогда + Если ПараметрыДоставки.ЗаполнитьПолучателяВШаблонеТемы Или ПараметрыДоставки.ЗаполнитьПолучателяВШаблонеСообщения Тогда // Шаблоны персонализированы - доставка каждому получателю. Для Каждого КлючИЗначение Из ПараметрыДоставки.Получатели Цикл // Тема и тело сообщения @@ -2465,7 +2395,7 @@ // КаталогВременныхФайлов - Строка - Каталог, в который будет выполнена архивация. // Процедура АрхивацияВложений(Вложения, ПараметрыДоставки, КаталогВременныхФайлов) - Если НЕ ПараметрыДоставки.Архивировать Тогда + Если Не ПараметрыДоставки.Архивировать Тогда Возврат; КонецЕсли; @@ -2643,7 +2573,7 @@ // 3 - Файлы получателей // Ключ - имя файла // Значение - полный путь к файлу. - // Настройки - ФайлСКаталогом, ИмяФайла, ПолноеИмяФайла, ИмяКаталога, ПолноеИмяКаталога, Формат, Имя, Расширение, ТипФайла + // Настройки - ФайлСКаталогом, ИмяФайла, ПолноеИмяФайла, ИмяКаталога, ПолноеИмяКаталога, Формат, Имя, Расширение, ТипФайла. // ДеревоОтчетов = Новый ДеревоЗначений; @@ -2658,7 +2588,7 @@ // Проверяет право текущего пользователя на вывод информации. Если прав нет - производится запись в журнал регистрации. Функция ПравоВывода(ПараметрыЖурнала) ПравоВывода = ПравоДоступа("Вывод", Метаданные); - Если НЕ ПравоВывода Тогда + Если Не ПравоВывода Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, НСтр("ru = 'У пользователя %1 недостаточно прав на вывод информации'"), , "'"+ Строка(Пользователи.ТекущийПользователь()) +"'"); @@ -2679,7 +2609,7 @@ ТекстПредставления = ""; Суффикс = ""; - Если НЕ ПараметрыДоставки.ТолькоУведомить Тогда + Если Не ПараметрыДоставки.ТолькоУведомить Тогда ТекстПредставления = ТекстПредставления + ?(ТекстПредставления = "", Префикс, " " + НСтр("ru = 'и'")) @@ -2782,7 +2712,7 @@ Процедура НайтиСвободноеИмяФайла(ПолноеИмяФайла) Файл = Новый Файл(ПолноеИмяФайла); - Если НЕ Файл.Существует() Тогда + Если Не Файл.Существует() Тогда Возврат; КонецЕсли; @@ -2798,7 +2728,7 @@ Если Код = КодТочки Тогда ШаблонИмени = Лев(ПолноеИмяФайла, Индекс - 1) + "<шаблон>" + Сред(ПолноеИмяФайла, Индекс); Прервать; - ИначеЕсли Код = КодСлэша ИЛИ Код = КодОбратногоСлэша Тогда + ИначеЕсли Код = КодСлэша Или Код = КодОбратногоСлэша Тогда Прервать; КонецЕсли; КонецЦикла; @@ -2922,7 +2852,8 @@ КонецФункции -// Формирует количество проблем с рассылками отчетов. +// По регистру СостоянияРассылокОтчетов определяет количество рассылок, выполнявшихся с ошибками. +// Функция КоличествоПроблемСРассылкамиОтчетов() Запрос = Новый Запрос; Запрос.Текст = @@ -2930,17 +2861,19 @@ | КОЛИЧЕСТВО(РассылкиОтчетов.Ссылка) КАК Количество |ИЗ | РегистрСведений.СостоянияРассылокОтчетов КАК СостоянияРассылокОтчетов - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.РассылкиОтчетов КАК РассылкиОтчетов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.РассылкиОтчетов КАК РассылкиОтчетов | ПО СостоянияРассылокОтчетов.Рассылка = РассылкиОтчетов.Ссылка |ГДЕ | РассылкиОтчетов.Подготовлена = ИСТИНА | И СостоянияРассылокОтчетов.СОшибками = ИСТИНА | И РассылкиОтчетов.Автор = &Автор"; + Если Пользователи.ЭтоПолноправныйПользователь() Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "И РассылкиОтчетов.Автор = &Автор", ""); Иначе Запрос.УстановитьПараметр("Автор", Пользователи.ТекущийПользователь()); КонецЕсли; + Возврат Запрос.Выполнить().Выгрузить()[0].Количество; КонецФункции diff --git a/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl index 1625eaeb3..54ed95a06 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl @@ -15,14 +15,13 @@ ПараметрыЖурнала.Данные = Параметры.Ссылка; ПараметрыЖурнала.Метаданные = Метаданные.Справочники.РассылкиОтчетов; - РезультатВыполнения = Новый Структура("Получатели, БылиКритичныеОшибки", , Ложь); + РезультатВыполнения = Новый Структура("Получатели, БылиКритичныеОшибки, Текст, Подробно"); РезультатВыполнения.Получатели = РассылкаОтчетов.СформироватьСписокПолучателейРассылки(ПараметрыЖурнала, Параметры); РезультатВыполнения.БылиКритичныеОшибки = РезультатВыполнения.Получатели.Количество() = 0; Если РезультатВыполнения.БылиКритичныеОшибки Тогда - Текст = НСтр("ru = 'Не удалось сформировать список получателей'"); - ТекстОшибок = РассылкаОтчетовКлиентСервер.СтрокаСообщенийПользователю(ПараметрыЖурнала.МассивОшибок, Ложь); - СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(РезультатВыполнения, Текст, ТекстОшибок); + РезультатВыполнения.Текст = НСтр("ru = 'Не удалось сформировать список получателей'"); + РезультатВыполнения.Подробно = РассылкаОтчетовКлиентСервер.СтрокаСообщенийПользователю(ПараметрыЖурнала.МассивОшибок, Ложь); КонецЕсли; Возврат РезультатВыполнения; diff --git a/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl index 1ffc1e06f..ed68280b8 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl @@ -95,8 +95,7 @@ РезультатВыполнения = РассылкаОтчетовВызовСервера.СформироватьСписокПолучателейРассылки(ПараметрыПолучателей); Если РезультатВыполнения.БылиКритичныеОшибки Тогда - СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(Неопределено, РезультатВыполнения); - ВыполнитьОбработкуОповещения(ОбработчикРезультата, Неопределено); + СтандартныеПодсистемыКлиент.ВывестиПредупреждение(Неопределено, РезультатВыполнения, ОбработчикРезультата); Возврат; КонецЕсли; diff --git a/SSL/src/CommonModules/РассылкаОтчетовКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовКлиентПереопределяемый/Module.bsl new file mode 100644 index 000000000..270e56061 --- /dev/null +++ b/SSL/src/CommonModules/РассылкаОтчетовКлиентПереопределяемый/Module.bsl @@ -0,0 +1,87 @@ +//////////////////////////////////////////////////////////////////////////////// +// Клиентские события рассылок отчетов. +// +//////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Обработчик активизации строки пользовательской настройки СКД отчета. +// +// Параметры: +// Отчет - ДанныеФормыЭлементКоллекции - Строка табличной части, описывающая отчет. +// Свойства для чтения: +// * ПолноеИмя - Строка - Полное имя отчета. Например: "Отчет.ИмяОтчета". +// * КлючВарианта - Строка - Ключ варианта отчета. +// * Отчет - СправочникСсылка.ВариантыОтчетов - Ссылка варианта отчета. +// * Представление - Строка - Наименование варианта отчета. +// Свойства для изменения: +// * ВнесеныИзменения - Булево - Следует установить Истина когда меняются пользовательские настройки отчета. +// КомпоновщикНастроекКД - КомпоновщикНастроекКомпоновкиДанных - Все настройки отчета. +// Свойства для изменения: +// * ПользовательскиеНастройки - ПользовательскиеНастройкиКомпоновкиДанных - Все пользовательские настройки отчета. +// Все прочие свойства - только для чтения. +// ИдентификаторКД - ИдентификаторКомпоновкиДанных - Идентификатор пользовательской настройки отчета. +// Может использоваться для получения данных пользовательской настройки. Например: +// ПользовательскаяНастройкаКД = КомпоновщикНастроекКД.НайтиПоИдентификатору(ИдентификаторКД); +// ТолькоПросмотрЗначения - Булево - Флажок возможности непосредственного редактирования колонки "Значение". +// Если установить в Истина, то следует определить обработчик выбора значения в событии "ПриНачалеВыбораНастройки". +// +Процедура ПриАктивизацииСтрокиНастройки(Отчет, КомпоновщикНастроекКД, ИдентификаторКД, ТолькоПросмотрЗначения) Экспорт + +КонецПроцедуры + +// Обработчик начала выбора значения для строки пользовательской настройки СКД отчета. +// +// Параметры: +// Отчет - ДанныеФормыЭлементКоллекции - Строка табличной части, описывающая отчет. +// Свойства для чтения: +// * ПолноеИмя - Строка - Полное имя отчета. Например: "Отчет.ИмяОтчета". +// * КлючВарианта - Строка - Ключ варианта отчета. +// * Отчет - СправочникСсылка.ВариантыОтчетов - Ссылка варианта отчета. +// * Представление - Строка - Наименование варианта отчета. +// Свойства для изменения: +// * ВнесеныИзменения - Булево - Следует установить Истина когда меняются пользовательские настройки отчета. +// КомпоновщикНастроекКД - КомпоновщикНастроекКомпоновкиДанных - Все настройки отчета. +// Свойства для изменения: +// * ПользовательскиеНастройки - ПользовательскиеНастройкиКомпоновкиДанных - Все пользовательские настройки отчета. +// Все прочие свойства - только для чтения. +// ИдентификаторКД - ИдентификаторКомпоновкиДанных - Идентификатор пользовательской настройки отчета. +// Может использоваться для получения данных пользовательской настройки. Например: +// ПользовательскаяНастройкаКД = КомпоновщикНастроекКД.НайтиПоИдентификатору(ИдентификаторКД); +// СтандартнаяОбработка - Булево - Если Истина, то будет использован стандартный диалог выбора. +// Если используется собственная обработка события, то следует установить в Ложь. +// ОбработчикРезультата - Обработчик результата выбора прикладной формы. +// В качестве результата в ОбработчикРезультата могут быть переданы значения типов: +// Неопределено - Пользователь отказался от выбора. +// ПользовательскиеНастройкиКомпоновкиДанных - Новые настройки отчета. +// +Процедура ПриНачалеВыбораНастройки(Отчет, КомпоновщикНастроекКД, ИдентификаторКД, СтандартнаяОбработка, Обработчик) Экспорт + +КонецПроцедуры + +// Обработчик очистки значения для строки пользовательской настройки СКД отчета. +// +// Параметры: +// Отчет - ДанныеФормыЭлементКоллекции - Строка табличной части, описывающая отчет. +// Свойства для чтения: +// * ПолноеИмя - Строка - Полное имя отчета. Например: "Отчет.ИмяОтчета". +// * КлючВарианта - Строка - Ключ варианта отчета. +// * Отчет - СправочникСсылка.ВариантыОтчетов - Ссылка варианта отчета. +// * Представление - Строка - Наименование варианта отчета. +// Свойства для изменения: +// * ВнесеныИзменения - Булево - Следует установить Истина когда меняются пользовательские настройки отчета. +// КомпоновщикНастроекКД - КомпоновщикНастроекКомпоновкиДанных - Все настройки отчета. +// Свойства для изменения: +// * ПользовательскиеНастройки - ПользовательскиеНастройкиКомпоновкиДанных - Все пользовательские настройки отчета. +// Все прочие свойства - только для чтения. +// ИдентификаторКД - ИдентификаторКомпоновкиДанных - Идентификатор пользовательской настройки отчета. +// Может использоваться для получения данных пользовательской настройки. Например: +// ПользовательскаяНастройкаКД = КомпоновщикНастроекКД.НайтиПоИдентификатору(ИдентификаторКД); +// СтандартнаяОбработка - Булево - Если Истина, то значение настройки будет очищено. +// Если значение настройки не должно быть очищено, то следует установить в Ложь. +// +Процедура ПриОчисткеНастройки(Отчет, КомпоновщикНастроекКД, ИдентификаторКД, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/РассылкаОтчетовКлиентПереопределяемый/РассылкаОтчетовКлиентПереопределяемый.mdo b/SSL/src/CommonModules/РассылкаОтчетовКлиентПереопределяемый/РассылкаОтчетовКлиентПереопределяемый.mdo new file mode 100644 index 000000000..f940eeb4e --- /dev/null +++ b/SSL/src/CommonModules/РассылкаОтчетовКлиентПереопределяемый/РассылкаОтчетовКлиентПереопределяемый.mdo @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="90032ffa-f117-4a34-82f8-cc7e5a22a542"> + <name>РассылкаОтчетовКлиентПереопределяемый</name> + <synonym> + <key>ru</key> + <value>Рассылка отчетов клиент переопределяемый</value> + </synonym> + <clientManagedApplication>true</clientManagedApplication> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/РегламентныеЗаданияКлиент/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияКлиент/Module.bsl new file mode 100644 index 000000000..c3e8f9404 --- /dev/null +++ b/SSL/src/CommonModules/РегламентныеЗаданияКлиент/Module.bsl @@ -0,0 +1,36 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Регламентные задания". +// +//////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныйПрограммныйИнтерфейс + + +// Вызывается при интерактивном начале работы пользователя с областью данных. +// Соответствует событию ПриНачалеРаботыСистемы модулей приложения. +// +Процедура ПриНачалеРаботыСистемы(Параметры) Экспорт + + ПараметрыРаботыКлиентаПриЗапуске = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Если ПараметрыРаботыКлиентаПриЗапуске.ПоказатьФормуБлокировкиРаботыСВнешнимиРесурсами Тогда + Параметры.ИнтерактивнаяОбработка = Новый ОписаниеОповещения("ПоказатьФормуБлокировкиРаботыСВнешнимиРесурсами", ЭтотОбъект); + КонецЕсли; + +КонецПроцедуры + +// Только для внутреннего использования. +Процедура ПоказатьФормуБлокировкиРаботыСВнешнимиРесурсами(Параметры, ДополнительныеПараметры) Экспорт + + Оповещение = Новый ОписаниеОповещения("ПослеОткрытияОкнаБлокировкиРаботыСВнешнимиРесурсами", ЭтотОбъект, Параметры); + Форма = ОткрытьФорму("ОбщаяФорма.БлокировкаРаботыСВнешнимиРесурсами",,,,,, Оповещение); + +КонецПроцедуры + +// Только для внутреннего использования. +Процедура ПослеОткрытияОкнаБлокировкиРаботыСВнешнимиРесурсами(Результат, Параметры) Экспорт + + ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РегламентныеЗаданияКлиент/РегламентныеЗаданияКлиент.mdo b/SSL/src/CommonModules/РегламентныеЗаданияКлиент/РегламентныеЗаданияКлиент.mdo new file mode 100644 index 000000000..8608e96a3 --- /dev/null +++ b/SSL/src/CommonModules/РегламентныеЗаданияКлиент/РегламентныеЗаданияКлиент.mdo @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="49e787c9-753a-468a-b8dd-2e970d9a1fed"> + <name>РегламентныеЗаданияКлиент</name> + <synonym> + <key>ru</key> + <value>Регламентные задания клиент</value> + </synonym> + <clientManagedApplication>true</clientManagedApplication> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/РегламентныеЗаданияПереопределяемый/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияПереопределяемый/Module.bsl index 7a77f90ed..c571758e7 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияПереопределяемый/Module.bsl @@ -5,10 +5,13 @@ #Область ПрограммныйИнтерфейс -// Определяет зависимость между регламентными заданиями и функциональными опциями. +// Определяет следующие свойств регламентных заданий: +// - зависимость от функциональных опций. +// - возможность выполнения в различных режимах работы программы. +// - прочие параметры. // // Параметры: -// Зависимости - ТаблицаЗначений - таблица значений с колонками: +// Настройки - ТаблицаЗначений - таблица значений с колонками: // * РегламентноеЗадание - ОбъектМетаданных:РегламентноеЗадание - регламентное задание. // * ФункциональнаяОпция - ОбъектМетаданных:ФункциональнаяОпция - функциональная опция, // от которой зависит регламентное задание. @@ -31,16 +34,35 @@ // * ДоступноВМоделиСервиса - Булево, Неопределено - Истина или Неопределено, если регламентное // задание доступно в модели сервиса. // По умолчанию - неопределено. +// * РаботаетСВнешнимиРесурсами - Булево - Истина, если регламентное задание модифицирует данные +// во внешних источниках (получение почты, синхронизация данных и т.п.). +// По умолчанию - Ложь. +// * Параметризуется - Булево - Истина, если регламентное задание параметризованное. +// По умолчанию - Ложь. // // Например: -// Зависимость = Зависимости.Добавить(); -// Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОбновлениеСтатусовДоставкиSMS; -// Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьПочтовыйКлиент; -// Зависимость.ДоступноВМоделиСервиса = Ложь; +// Настройка = Настройки.Добавить(); +// Настройка.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОбновлениеСтатусовДоставкиSMS; +// Настройка.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьПочтовыйКлиент; +// Настройка.ДоступноВМоделиСервиса = Ложь; // -Процедура ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости) Экспорт +Процедура ПриОпределенииНастроекРегламентныхЗаданий(Настройки) Экспорт КонецПроцедуры +// Позволяет переопределить настройки подсистемы, заданные по умолчанию. +// Значения настроек по умолчанию см. в РегламентныеЗаданияСлужебный.НастройкиПланаОбменаПоУмолчанию. +// +// Параметры: +// Настройки - Структура - Структура с ключами: +// * РасположениеКомандыСнятияБлокировки - Строка - определяет расположение команды снятия +// блокировки работы с внешними ресурсами +// при перемещении информационной базы. +// +Процедура ПриОпределенииНастроек(Настройки) Экспорт + +КонецПроцедуры + + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl index 87b1f7262..2d13a4ae5 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl @@ -1,6 +1,7 @@ //////////////////////////////////////////////////////////////////////////////// -// Подсистема "Регламентные задания". -// +// Подсистема "Базовая функциональность". +// Программный интерфейс для управления регламентными заданиями. +// //////////////////////////////////////////////////////////////////////////////// #Область ПрограммныйИнтерфейс @@ -38,7 +39,7 @@ // Функция НайтиЗадания(Знач Отбор) Экспорт - РегламентныеЗаданияСлужебный.ВызватьИсключениеЕслиНетПраваАдминистрирования(); + ВызватьИсключениеЕслиНетПраваАдминистрирования(); УстановитьПривилегированныйРежим(Истина); Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда @@ -57,19 +58,21 @@ Если Отбор.Свойство("Метаданные") Тогда Если ТипЗнч(Отбор.Метаданные) = Тип("ОбъектМетаданных") Тогда - Если Отбор.Метаданные.Предопределенное Тогда - Отбор.Вставить("Шаблон", МодульОчередьЗаданий.ШаблонПоИмени(Отбор.Метаданные.Имя)); - Иначе + Попытка + Шаблон = МодульОчередьЗаданий.ШаблонПоИмени(Отбор.Метаданные.Имя); + Отбор.Вставить("Шаблон", Шаблон); + Исключение Отбор.Вставить("ИмяМетода", Отбор.Метаданные.ИмяМетода); - КонецЕсли; + КонецПопытки; Иначе МетаданныеРегламентноеЗадание = Метаданные.РегламентныеЗадания.Найти(Отбор.Метаданные); Если МетаданныеРегламентноеЗадание <> Неопределено Тогда - Если МетаданныеРегламентноеЗадание.Предопределенное Тогда - Отбор.Вставить("Шаблон", МодульОчередьЗаданий.ШаблонПоИмени(МетаданныеРегламентноеЗадание.Имя)); - Иначе + Попытка + Шаблон = МодульОчередьЗаданий.ШаблонПоИмени(МетаданныеРегламентноеЗадание.Имя); + Отбор.Вставить("Шаблон", Шаблон); + Исключение Отбор.Вставить("ИмяМетода", МетаданныеРегламентноеЗадание.ИмяМетода); - КонецЕсли; + КонецПопытки; КонецЕсли; КонецЕсли; ИначеЕсли Отбор.Свойство("Идентификатор") @@ -125,7 +128,7 @@ // Функция Задание(Знач Идентификатор) Экспорт - РегламентныеЗаданияСлужебный.ВызватьИсключениеЕслиНетПраваАдминистрирования(); + ВызватьИсключениеЕслиНетПраваАдминистрирования(); УстановитьПривилегированныйРежим(Истина); Если ТипЗнч(Идентификатор) = Тип("РегламентноеЗадание") Тогда @@ -207,14 +210,14 @@ // Ключ // ИнтервалПовтораПриАварийномЗавершении. // Расписание -// КоличествоПовторовПриАварийномЗавершении +// КоличествоПовторовПриАварийномЗавершении. // // Возвращаемое значение: // РегламентноеЗадание, СправочникСсылка.ОчередьЗаданий, СправочникСсылка.ОчередьЗаданийОбластейДанных - Идентификатор добавленного задания. // Функция ДобавитьЗадание(ПараметрыЗадания) Экспорт - РегламентныеЗаданияСлужебный.ВызватьИсключениеЕслиНетПраваАдминистрирования(); + ВызватьИсключениеЕслиНетПраваАдминистрирования(); УстановитьПривилегированныйРежим(Истина); Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда @@ -306,7 +309,7 @@ // Процедура УдалитьЗадание(Знач Идентификатор) Экспорт - РегламентныеЗаданияСлужебный.ВызватьИсключениеЕслиНетПраваАдминистрирования(); + ВызватьИсключениеЕслиНетПраваАдминистрирования(); УстановитьПривилегированныйРежим(Истина); Если ТипЗнч(Идентификатор) = Тип("РегламентноеЗадание") Тогда @@ -388,14 +391,14 @@ // Ключ // ИнтервалПовтораПриАварийномЗавершении. // Расписание -// КоличествоПовторовПриАварийномЗавершении +// КоличествоПовторовПриАварийномЗавершении. // // В случае если задание создано на основе шаблона или предопределенное, могут быть указаны // только следующие ключи: Использование. // Процедура ИзменитьЗадание(Знач Идентификатор, Знач ПараметрыЗадания) Экспорт - РегламентныеЗаданияСлужебный.ВызватьИсключениеЕслиНетПраваАдминистрирования(); + ВызватьИсключениеЕслиНетПраваАдминистрирования(); УстановитьПривилегированныйРежим(Истина); Если ТипЗнч(Идентификатор) = Тип("РегламентноеЗадание") Тогда @@ -424,7 +427,7 @@ ИмяМетода = Идентификатор.ИмяМетода; ПараметрыПоиска.Вставить("ИмяМетода", ИмяМетода); - // Если рег.задание предопределенное и есть шаблон очереди - можно изменять только "Использование" + // Если рег.задание предопределенное и есть шаблон очереди - можно изменять только "Использование". Если Идентификатор.Предопределенное Тогда Шаблоны = Новый Массив; @@ -442,17 +445,17 @@ КонецЕсли; ПараметрыЗадания.Удалить(ПараметрЗадания.Ключ); - КонецЦикла; - КонецЕсли; - КонецЕсли; - + КонецЦикла; + КонецЕсли; + КонецЕсли; + ИначеЕсли ТипЗнч(Идентификатор) = Тип("УникальныйИдентификатор") Тогда МодульОчередьЗаданийСлужебный = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданийСлужебный"); СправочникДляЗадания = МодульОчередьЗаданийСлужебный.СправочникОчередьЗаданий(); Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда МодульОчередьЗаданийСлужебныйРазделениеДанных = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданийСлужебныйРазделениеДанных"); - ПереопределенныйСправочник = МодульОчередьЗаданийСлужебныйРазделениеДанных.ПриВыбореСправочникаДляЗадания(ПараметрыЗадания); + ПереопределенныйСправочник = МодульОчередьЗаданийСлужебныйРазделениеДанных.ПриВыбореСправочникаДляЗадания(ПараметрыПоиска); Если ПереопределенныйСправочник <> Неопределено Тогда СправочникДляЗадания = ПереопределенныйСправочник; КонецЕсли; @@ -466,19 +469,19 @@ И (ПараметрыЗадания.Количество() > 1 ИЛИ НЕ ПараметрыЗадания.Свойство("Использование")) Тогда - Для каждого ПараметрЗадания Из ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ПараметрыЗадания) Цикл + Для Каждого ПараметрЗадания Из ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ПараметрыЗадания) Цикл Если ПараметрЗадания.Ключ = "Использование" Тогда Продолжить; КонецЕсли; ПараметрыЗадания.Удалить(ПараметрЗадания.Ключ); - КонецЦикла; - КонецЕсли; + КонецЦикла; + КонецЕсли; Если ПараметрыЗадания.Количество() = 0 Тогда Возврат; - КонецЕсли; + КонецЕсли; МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); МодульОчередьЗаданий.ИзменитьЗадание(Идентификатор.Идентификатор, ПараметрыЗадания); @@ -490,7 +493,7 @@ Если ПараметрыЗадания.Количество() = 0 Тогда Возврат; - КонецЕсли; + КонецЕсли; МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); СписокЗаданий = МодульОчередьЗаданий.ПолучитьЗадания(ПараметрыПоиска); @@ -555,7 +558,7 @@ // - РегламентноеЗадание - регламентное задание. // // Возвращаемое значение: -// УникальныйИдентификатор - УИ объекта регламентного задания +// УникальныйИдентификатор - УИ объекта регламентного задания. // Функция УникальныйИдентификатор(Знач Идентификатор) Экспорт @@ -613,6 +616,9 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции без поддержки модели сервиса. + // Возвращает использование регламентного задания. // Перед вызовом требуется иметь право Администрирования или УстановитьПривилегированныйРежим. // @@ -628,7 +634,7 @@ // Функция РегламентноеЗаданиеИспользуется(Знач Идентификатор) Экспорт - РегламентныеЗаданияСлужебный.ВызватьИсключениеЕслиНетПраваАдминистрирования(); + ВызватьИсключениеЕслиНетПраваАдминистрирования(); УстановитьПривилегированныйРежим(Истина); Задание = ПолучитьРегламентноеЗадание(Идентификатор); @@ -655,7 +661,7 @@ // Функция РасписаниеРегламентногоЗадания(Знач Идентификатор, Знач ВСтруктуре = Ложь) Экспорт - РегламентныеЗаданияСлужебный.ВызватьИсключениеЕслиНетПраваАдминистрирования(); + ВызватьИсключениеЕслиНетПраваАдминистрирования(); УстановитьПривилегированныйРежим(Истина); Задание = ПолучитьРегламентноеЗадание(Идентификатор); @@ -682,7 +688,7 @@ // Процедура УстановитьИспользованиеРегламентногоЗадания(Знач Идентификатор, Знач Использование) Экспорт - РегламентныеЗаданияСлужебный.ВызватьИсключениеЕслиНетПраваАдминистрирования(); + ВызватьИсключениеЕслиНетПраваАдминистрирования(); УстановитьПривилегированныйРежим(Истина); Задание = ПолучитьРегламентноеЗадание(Идентификатор); @@ -711,7 +717,7 @@ // Процедура УстановитьРасписаниеРегламентногоЗадания(Знач Идентификатор, Знач Расписание) Экспорт - РегламентныеЗаданияСлужебный.ВызватьИсключениеЕслиНетПраваАдминистрирования(); + ВызватьИсключениеЕслиНетПраваАдминистрирования(); УстановитьПривилегированныйРежим(Истина); Задание = ПолучитьРегламентноеЗадание(Идентификатор); @@ -741,7 +747,7 @@ // Функция ПолучитьРегламентноеЗадание(Знач Идентификатор) Экспорт - РегламентныеЗаданияСлужебный.ВызватьИсключениеЕслиНетПраваАдминистрирования(); + ВызватьИсключениеЕслиНетПраваАдминистрирования(); УстановитьПривилегированныйРежим(Истина); Если ТипЗнч(Идентификатор) = Тип("РегламентноеЗадание") Тогда @@ -767,4 +773,59 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Прочие процедуры и функции. + +// Возвращает признак установленной блокировки работы с внешними ресурсами. +// +// Возвращаемое значение: +// Булево - Истина, если работа с внешними ресурсами заблокирована. +// +Функция РаботаСВнешнимиРесурсамиЗаблокирована() Экспорт + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РегламентныеЗадания") Тогда + МодульРегламентныеЗаданияСлужебный = ОбщегоНазначения.ОбщийМодуль("РегламентныеЗаданияСлужебный"); + Возврат МодульРегламентныеЗаданияСлужебный.РаботаСВнешнимиРесурсамиЗаблокирована(); + КонецЕсли; + + Возврат Ложь; +КонецФункции + +// Разрешает работу с внешними ресурсами. +// +Процедура РазблокироватьРаботуСВнешнимиРесурсами() Экспорт + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РегламентныеЗадания") Тогда + МодульРегламентныеЗаданияСлужебный = ОбщегоНазначения.ОбщийМодуль("РегламентныеЗаданияСлужебный"); + МодульРегламентныеЗаданияСлужебный.РазрешитьРаботуСВнешнимиРесурсами(); + КонецЕсли; +КонецПроцедуры + +// Запрещает работу с внешними ресурсами. +// +Процедура ЗаблокироватьРаботуСВнешнимиРесурсами() Экспорт + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РегламентныеЗадания") Тогда + МодульРегламентныеЗаданияСлужебный = ОбщегоНазначения.ОбщийМодуль("РегламентныеЗаданияСлужебный"); + МодульРегламентныеЗаданияСлужебный.ЗапретитьРаботуСВнешнимиРесурсами(); + КонецЕсли; +КонецПроцедуры + #КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Вызывает исключение, если у пользователя нет права администрирования. +Процедура ВызватьИсключениеЕслиНетПраваАдминистрирования() + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда + ВызватьИсключение НСтр("ru = 'Нарушение прав доступа.'"); + КонецЕсли; + Иначе + Если НЕ ПривилегированныйРежим() Тогда + ВыполнитьПроверкуПравДоступа("Администрирование", Метаданные); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl index 97e265edc..6f1b4f3c4 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl @@ -8,6 +8,12 @@ // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт + // КЛИЕНТСКИЕ ОБРАБОТЧИКИ. + + КлиентскиеОбработчики[ + "СтандартныеПодсистемы.БазоваяФункциональность\ПриНачалеРаботыСистемы"].Добавить( + "РегламентныеЗаданияКлиент"); + // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( @@ -92,6 +98,91 @@ КонецФункции +// Проверяет факт перемещения базы или восстановления из резервной копии. +// Если расположение информационной базы изменилось, то регламентное задание отключается +// и его выполнение прерывается с записью в журнал регистрации. +// +// Параметры: +// Задание - ОбъектМетаданных: РегламентноеЗадание - регламентное задание. +// ЗависимостиЗаданий - ТаблицаЗначений - таблица зависимостей регламентных +// заданий, полученная методом РегламентныеЗаданияСлужебный.РегламентныеЗаданияЗависимыеОтФункциональныхОпций. +// Если не указано, получается автоматически. +// +Процедура ПроверитьВозможностьРаботыСВнешнимиРесурсами(РегламентноеЗадание, ЗависимостиЗаданий = Неопределено) Экспорт + + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + Если ЗависимостиЗаданий = Неопределено Тогда + ЗависимостиЗаданий = РегламентныеЗаданияЗависимыеОтФункциональныхОпций(); + КонецЕсли; + + Отбор = Новый Структура; + Отбор.Вставить("РегламентноеЗадание", РегламентноеЗадание); + Отбор.Вставить("РаботаетСВнешнимиРесурсами", Истина); + + НайденныеСтроки = ЗависимостиЗаданий.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Если Не РаботаСВнешнимиРесурсамиЗаблокирована() Тогда + Возврат; + КонецЕсли; + + ПараметрыБлокировки = Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Получить().Получить(); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + ИмяМетода = РегламентноеЗадание.ИмяМетода; + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("ОбластьДанных", ОбластьДанных); + ПараметрыЗадания.Вставить("ИмяМетода", ИмяМетода); + ПараметрыЗадания.Вставить("Использование", Истина); + МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); + СписокЗаданий = МодульОчередьЗаданий.ПолучитьЗадания(ПараметрыЗадания); + + ПараметрыЗадания = Новый Структура("Использование", Ложь); + Для Каждого Задание Из СписокЗаданий Цикл + МодульОчередьЗаданий.ИзменитьЗадание(Задание.Идентификатор, ПараметрыЗадания); + ПараметрыБлокировки.ОтключенныеЗадания.Добавить(Задание.Идентификатор); + КонецЦикла; + КонецЕсли; + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Приложение было перемещено. + |Регламентное задание ""%1"", работающее с внешними ресурсами, отключено.'"), РегламентноеЗадание.Синоним); + + Иначе + + Отбор = Новый Структура; + Отбор.Вставить("Метаданные", РегламентноеЗадание); + Отбор.Вставить("Использование", Истина); + МассивЗаданий = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Отбор); + + Для Каждого Задание Из МассивЗаданий Цикл + + Задание.Использование = Ложь; + Задание.Записать(); + + ПараметрыБлокировки.ОтключенныеЗадания.Добавить(Задание.УникальныйИдентификатор); + + КонецЦикла; + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Изменилась строка соединения информационной базы. + |Возможно информационная база была перемещена. + |Регламентное задание ""%1"" отключено.'"), РегламентноеЗадание.Синоним); + + КонецЕсли; + + ХранилищеЗначения = Новый ХранилищеЗначения(ПараметрыБлокировки); + Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Установить(ХранилищеЗначения); + +КонецПроцедуры + // Формирует таблицу зависимостей регламентных заданий от функциональных опций. // // Возвращаемое значение: @@ -115,6 +206,9 @@ // * ДоступноВМоделиСервиса - Булево, Неопределено - Истина или Неопределено, если регламентное // задание доступно в модели сервиса. // По умолчанию - неопределено. +// * РаботаетСВнешнимиРесурсами - Булево - Истина, если регламентное задание работает +// с внешними ресурсами (получение почты, синхронизация данных и т.п.). +// По умолчанию - Ложь. // Функция РегламентныеЗаданияЗависимыеОтФункциональныхОпций() Экспорт @@ -126,9 +220,11 @@ Зависимости.Колонки.Добавить("ДоступноВПодчиненномУзлеРИБ"); Зависимости.Колонки.Добавить("ВключатьПриВключенииФункциональнойОпции"); Зависимости.Колонки.Добавить("ДоступноВАвтономномРабочемМесте"); + Зависимости.Колонки.Добавить("РаботаетСВнешнимиРесурсами", Новый ОписаниеТипов("Булево")); + Зависимости.Колонки.Добавить("Параметризуется", Новый ОписаниеТипов("Булево")); - ИнтеграцияСтандартныхПодсистем.ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости); - РегламентныеЗаданияПереопределяемый.ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости); + ИнтеграцияСтандартныхПодсистем.ПриОпределенииНастроекРегламентныхЗаданий(Зависимости); + РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий(Зависимости); Зависимости.Сортировать("РегламентноеЗадание"); @@ -136,6 +232,15 @@ КонецФункции +// Возвращает соответствие имен параметров сеанса и обработчиков для их инициализации. +// +Процедура ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики) Экспорт + + Обработчики.Вставить("РаботаСВнешнимиРесурсамиЗаблокирована", + "РегламентныеЗаданияСлужебный.УстановкаПараметровСеанса"); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обработчики подписок на события. @@ -144,7 +249,7 @@ // // Параметры: // Источник - КонстантаМенеджерЗначения - константа хранения значения ФО -// Отказ - Булево - Отказ при записи константы +// Отказ - Булево - Отказ при записи константы. // Процедура ВключитьРегламентноеЗаданиеПриИзмененииФункциональнойОпции(Источник, Отказ) Экспорт @@ -160,6 +265,45 @@ #Область СлужебныеПроцедурыИФункции +Функция ЗначениеНастройки(ИмяНастройки) Экспорт + + Настройки = НастройкиПоУмолчанию(); + РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроек(Настройки); + + Возврат Настройки[ИмяНастройки]; + +КонецФункции + +// Содержит значения настроек по умолчанию. +// +// Возвращаемое значение: +// Структура - Структура с ключами: +// * РасположениеКомандыСнятияБлокировки - Строка - определяет расположение команды снятия +// блокировки работы с внешними ресурсами. +// +Функция НастройкиПоУмолчанию() + + НастройкиПодсистемы = Новый Структура; + НастройкиПодсистемы.Вставить("РасположениеКомандыСнятияБлокировки", + НСтр("ru = 'Блокировку также можно снять позднее в разделе <b>Администрирование - Поддержка и обслуживание</b>.'")); + + Возврат НастройкиПодсистемы; + +КонецФункции + +// Устанавливает параметры сеанса. +// +// Параметры: +// ИмяПараметра - Строка - имя параметра сеанса, значение которого необходимо установить. +// УстановленныеПараметры - массив - в данный параметр помещается информация об установленных параметрах сеанса. +// +Процедура УстановкаПараметровСеанса(ИмяПараметра, УстановленныеПараметры) Экспорт + Если ИмяПараметра = "РаботаСВнешнимиРесурсамиЗаблокирована" Тогда + ПараметрыСеанса.РаботаСВнешнимиРесурсамиЗаблокирована = УстановленаБлокировкаРаботыСВнешнимиРесурсами(); + УстановленныеПараметры.Добавить("РаботаСВнешнимиРесурсамиЗаблокирована"); + КонецЕсли; +КонецПроцедуры + // Вызывает исключение, если у пользователя нет права администрирования. Процедура ВызватьИсключениеЕслиНетПраваАдминистрирования() Экспорт @@ -208,6 +352,12 @@ Обработчик.Процедура = "РегламентныеЗаданияСлужебный.УстановитьИспользованиеРегламентныхЗаданийПоФункциональнымОпциям"; Обработчик.РежимВыполнения = "Монопольно"; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.2.42"; + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.РежимВыполнения = "Монопольно"; + Обработчик.Процедура = "РегламентныеЗаданияСлужебный.ОбновитьПараметрыБлокировкиРаботыСВнешнимиРесурсами"; + КонецПроцедуры // Формирует таблицу регламентных заданий @@ -805,6 +955,10 @@ Процедура ИзменитьИспользованиеРегламентныхЗаданийПоФункциональнымОпциям(Источник, Знач Использование) + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + ТипИсточника = ТипЗнч(Источник); ХранениеФО = Метаданные.НайтиПоТипу(ТипИсточника); ФункциональнаяОпция = Неопределено; @@ -852,6 +1006,10 @@ Прервать; КонецЕсли; + Если СтрокаЗависимости.ФункциональнаяОпция = Неопределено Тогда + Продолжить; + КонецЕсли; + Если СтрокаЗависимости.ФункциональнаяОпция = ФункциональнаяОпция Тогда ЗначениеФО = Использование; Иначе @@ -886,43 +1044,12 @@ КонецЕсли; КонецЕсли; - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - - Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - Продолжить; - КонецЕсли; - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда - ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); - ИмяМетода = СтрокаЗадание.РегламентноеЗадание.ИмяМетода; - - ПараметрыЗадания = Новый Структура; - ПараметрыЗадания.Вставить("ОбластьДанных", ОбластьДанных); - ПараметрыЗадания.Вставить("ИмяМетода", ИмяМетода); - - МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); - СписокЗаданий = МодульОчередьЗаданий.ПолучитьЗадания(ПараметрыЗадания); - ПараметрыЗадания = Новый Структура("Использование", Использование); - Для Каждого Задание Из СписокЗаданий Цикл - МодульОчередьЗаданий.ИзменитьЗадание(Задание.Идентификатор, ПараметрыЗадания); - КонецЦикла; - КонецЕсли; - - Иначе - - МассивЗаданий = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Новый Структура("Метаданные", СтрокаЗадание.РегламентноеЗадание)); - - Для каждого Задание Из МассивЗаданий Цикл - - Если Задание.Использование <> Использование Тогда - - Задание.Использование = Использование; - Задание.Записать(); - - КонецЕсли; - КонецЦикла; - - КонецЕсли; + СписокЗаданий = РегламентныеЗаданияСервер.НайтиЗадания(Новый Структура("Метаданные", СтрокаЗадание.РегламентноеЗадание)); + Для Каждого РегламентноеЗадание Из СписокЗаданий Цикл + ПараметрыЗадания = Новый Структура("Использование", Использование); + РегламентныеЗаданияСервер.ИзменитьЗадание(РегламентноеЗадание, ПараметрыЗадания); + КонецЦикла; + КонецЦикла; КонецПроцедуры @@ -1009,4 +1136,287 @@ КонецФункции -#КонецОбласти +//////////////////////////////////////////////////////////////////////////////// +// Блокировка работы с внешними ресурсами. + +// Создает файл для контроля за перемещением файловой информационной базы. +// +Функция ИдентификаторФайловойБазы(ЭтоФайловаяБаза) + + ИдентификаторБазы = ""; + Если ЭтоФайловаяБаза Тогда + ИдентификаторБазы = Строка(Новый УникальныйИдентификатор); + СодержимоеФайла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 + | + |Файл создан автоматически прикладным решением ""%2"". + |Он содержит идентификатор информационной базы и позволяет определить, что эта информационная база была скопирована. + | + |При копировании файлов информационной базы, в том числе при создании резервной копии, не следует копировать этот файл. + |Одновременное использование двух копий информационной базы с одинаковым идентификатором может привести к конфликтам + |при синхронизации данных, отправке почты и другой работе с внешними ресурсами. + | + |Если файл отсутствует в каталоге с информационной базой, то программа запросит администратора, должна ли эта + |информационная база работать с внешними ресурсами.'"), ИдентификаторБазы, Метаданные.Синоним); + ИмяФайла = ОбщегоНазначенияКлиентСервер.КаталогФайловойИнформационнойБазы() + "\DoNotCopy.txt"; + ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла); + ЗаписьТекста.Записать(СодержимоеФайла); + ЗаписьТекста.Закрыть(); + КонецЕсли; + + Возврат ИдентификаторБазы; + +КонецФункции + +// Устанавливает признак необходимости принять решение о блокировке работы с внешними ресурсами. +// +Процедура УстановитьПризнакНеобходимостиПринятияРешенияОБлокировке(ПараметрыБлокировки, ТекстСообщения) + + ПараметрыБлокировки.РаботаСВнешнимиРесурсамиЗаблокирована = Неопределено; + ХранилищеЗначения = Новый ХранилищеЗначения(ПараметрыБлокировки); + Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Установить(ХранилищеЗначения); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Работа с внешними ресурсами заблокирована'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Предупреждение, , , ТекстСообщения); + +КонецПроцедуры + +// Разрешает работу с внешними ресурсами после перемещения базы. +// +Процедура РазрешитьРаботуСВнешнимиРесурсами(ПараметрыБлокировки = Неопределено) Экспорт + + Если ПараметрыБлокировки = Неопределено Тогда + ПараметрыБлокировки = Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Получить().Получить(); + КонецЕсли; + + Отбор = Новый Структура("УникальныйИдентификатор"); + Для Каждого ИдентификаторЗадания Из ПараметрыБлокировки.ОтключенныеЗадания Цикл + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("ОбластьДанных", ОбщегоНазначения.ЗначениеРазделителяСеанса()); + ПараметрыЗадания.Вставить("Идентификатор", ИдентификаторЗадания); + ПараметрыЗадания.Вставить("Использование", Ложь); + МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); + СписокЗаданий = МодульОчередьЗаданий.ПолучитьЗадания(ПараметрыЗадания); + + ПараметрыЗадания = Новый Структура("Использование", Истина); + Для Каждого Задание Из СписокЗаданий Цикл + МодульОчередьЗаданий.ИзменитьЗадание(Задание.Идентификатор, ПараметрыЗадания); + КонецЦикла; + КонецЕсли; + Иначе + Отбор.УникальныйИдентификатор = ИдентификаторЗадания; + НайденныеЗадания = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Отбор); + + Для Каждого ОтключенноеЗадание Из НайденныеЗадания Цикл + ОтключенноеЗадание.Использование = Истина; + ОтключенноеЗадание.Записать(); + КонецЦикла; + КонецЕсли; + + КонецЦикла; + + СтрокаСоединения = СтрокаСоединенияИнформационнойБазы(); + ЭтоФайловаяБаза = ОбщегоНазначения.ИнформационнаяБазаФайловая(СтрокаСоединения); + + ПараметрыБлокировки.ЭтоФайловаяБаза = ЭтоФайловаяБаза; + ПараметрыБлокировки.СтрокаСоединения = СтрокаСоединения; + ПараметрыБлокировки.РаботаСВнешнимиРесурсамиЗаблокирована = Ложь; + ПараметрыБлокировки.ОтключенныеЗадания.Очистить(); + ПараметрыБлокировки.ИдентификаторБазы = ИдентификаторФайловойБазы(ЭтоФайловаяБаза); + ПараметрыБлокировки.РазделениеВключено = ОбщегоНазначенияПовтИсп.РазделениеВключено(); + ПараметрыБлокировки.ИмяКомпьютера = ИмяКомпьютера(); + + ХранилищеЗначения = Новый ХранилищеЗначения(ПараметрыБлокировки); + Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Установить(ХранилищеЗначения); + + ПараметрыСеанса.РаботаСВнешнимиРесурсамиЗаблокирована = Ложь; + +КонецПроцедуры + +// Запрещает работу с внешними ресурсами. +// +Процедура ЗапретитьРаботуСВнешнимиРесурсами() Экспорт + + ПараметрыБлокировки = Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Получить().Получить(); + + Если ПараметрыБлокировки = Неопределено Тогда + ИнициализироватьПараметрыБлокировкиРаботыСВнешнимиРесурсами(Истина); + Иначе + ПараметрыБлокировки.РаботаСВнешнимиРесурсамиЗаблокирована = Истина; + ХранилищеЗначения = Новый ХранилищеЗначения(ПараметрыБлокировки); + Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Установить(ХранилищеЗначения); + КонецЕсли; + + ПараметрыСеанса.РаботаСВнешнимиРесурсамиЗаблокирована = Истина; + +КонецПроцедуры + +// Определяет установлена ли блокировка работы с внешними ресурсами. +// +Функция УстановленаБлокировкаРаботыСВнешнимиРесурсами(ЭтоВызовПередНачаломРаботыСистемы = Ложь, ПоказатьФорму = Ложь) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат Ложь; + КонецЕсли; + + СохраненныеПараметры = Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Получить().Получить(); + + Если СохраненныеПараметры = Неопределено Тогда + Если ЭтоВызовПередНачаломРаботыСистемы Тогда + ИнициализироватьПараметрыБлокировкиРаботыСВнешнимиРесурсами(); + КонецЕсли; + Возврат Ложь; + КонецЕсли; + + ПараметрыБлокировки = ПараметрыБлокировкиРаботыСВнешнимиРесурсами(); + ЗаполнитьЗначенияСвойств(ПараметрыБлокировки, СохраненныеПараметры); + + Если ПараметрыБлокировки.РаботаСВнешнимиРесурсамиЗаблокирована = Неопределено Тогда + Возврат Истина; // Если признак уже был взведен ранее в регламентном задании. + ИначеЕсли ПараметрыБлокировки.РаботаСВнешнимиРесурсамиЗаблокирована = Истина Тогда + Возврат Не ПоказатьФорму; // Блокировка работы с внешними ресурсами подтверждена администратором. + КонецЕсли; + + РазделениеВключено = ОбщегоНазначенияПовтИсп.РазделениеВключено(); + // При работе в модели сервиса факт переноса базы определяется менеджером сервиса. + Если РазделениеВключено Тогда + Возврат Ложь; + КонецЕсли; + + Если ПараметрыБлокировки.Свойство("РазделениеВключено") + И РазделениеВключено <> ПараметрыБлокировки.РазделениеВключено Тогда + // Разделение не включено. + ТекстСообщения = НСтр("ru = 'Информационная база была перемещена из приложения в Интернете.'"); + УстановитьПризнакНеобходимостиПринятияРешенияОБлокировке(ПараметрыБлокировки, ТекстСообщения); + Возврат Истина; + КонецЕсли; + + СтрокаСоединения = СтрокаСоединенияИнформационнойБазы(); + ЭтоФайловаяБаза = ОбщегоНазначения.ИнформационнаяБазаФайловая(СтрокаСоединения); + + Если ЭтоФайловаяБаза <> ПараметрыБлокировки.ЭтоФайловаяБаза Тогда + ТекстСообщения = ?(ЭтоФайловаяБаза, НСтр("ru = 'Информационная база была перемещена из клиент-серверного режима работы в файловый.'"), + НСтр("ru = 'Информационная база была перемещена из файловый режима работы в клиент-серверный.'")); + УстановитьПризнакНеобходимостиПринятияРешенияОБлокировке(ПараметрыБлокировки, ТекстСообщения); + Возврат Истина; + КонецЕсли; + + // Если строка соединения совпадает, то дальнейшую проверку не выполняем. + Если СтрокаСоединения = ПараметрыБлокировки.СтрокаСоединения Тогда + Возврат Ложь; + КонецЕсли; + + Если ЭтоФайловаяБаза Тогда + // Для файловой базы через строка соединения может быть разной при подключении с различных + // компьютеров, поэтому проверку перемещения базы осуществляем через файл. + ИмяФайлаПроверки = "DoNotCopy.txt"; + НайденныеФайлы = НайтиФайлы(ОбщегоНазначенияКлиентСервер.КаталогФайловойИнформационнойБазы(), "DoNotCopy.txt"); + Если НайденныеФайлы.Количество() = 0 Тогда + // В каталоге базы отсутствует файл проверки. + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В каталоге информационной базы отсутствует файл проверки %1.'"), ИмяФайлаПроверки); + УстановитьПризнакНеобходимостиПринятияРешенияОБлокировке(ПараметрыБлокировки, ТекстСообщения); + Возврат Истина; + КонецЕсли; + ЧтениеТекста = Новый ЧтениеТекста(НайденныеФайлы[0].ПолноеИмя); + ИдентификаторБазы =ЧтениеТекста.ПрочитатьСтроку(); + // Файл присутствует, но идентификатор внутри не соответствует ожидаемому. + Если ИдентификаторБазы <> ПараметрыБлокировки.ИдентификаторБазы Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Идентификатор информационной базы в файле проверки %1 не соответствует идентификатору в текущей базе.'"), ИмяФайлаПроверки); + УстановитьПризнакНеобходимостиПринятияРешенияОБлокировке(ПараметрыБлокировки, ТекстСообщения); + Возврат Истина; + КонецЕсли; + Иначе // Клиент-серверная база + ИмяБазы = НРег(СтроковыеФункцииКлиентСервер.ПолучитьПараметрыИзСтроки(СтрокаСоединения).Ref); + ИмяКомпьютера = НРег(ИмяКомпьютера()); + ИмяСервера = НРег(СтроковыеФункцииКлиентСервер.ПолучитьПараметрыИзСтроки(СтрокаСоединения).Srvr); + СохраненноеИмяБазы = НРег(СтроковыеФункцииКлиентСервер.ПолучитьПараметрыИзСтроки(ПараметрыБлокировки.СтрокаСоединения).Ref); + СохраненноеИмяКомпьютера = НРег(ПараметрыБлокировки.ИмяКомпьютера); + СохраненноеИмяСервера = НРег(СтроковыеФункцииКлиентСервер.ПолучитьПараметрыИзСтроки(ПараметрыБлокировки.СтрокаСоединения).Srvr); + Если ИмяБазы <> СохраненноеИмяБазы + Или (ПараметрыБлокировки.ПроверятьИмяСервера + И (ИмяКомпьютера <> СохраненноеИмяКомпьютера + И ИмяСервера <> СохраненноеИмяСервера)) Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Различаются имя информационной базы или имя компьютера. + |Сохраненное имя базы: %1, текущее имя базы: %2. + |Сохраненное имя компьютера: %3, текущее имя компьютера: %4'"), + СохраненноеИмяБазы, ИмяБазы, СохраненноеИмяКомпьютера, ИмяКомпьютера); + УстановитьПризнакНеобходимостиПринятияРешенияОБлокировке(ПараметрыБлокировки, ТекстСообщения); + Возврат Истина; + КонецЕсли; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +// Возвращает признак установленной блокировки работы с внешними ресурсами. +// +// Возвращаемое значение: +// Булево - Истина, если работа с внешними ресурсами заблокирована. +// +Функция РаботаСВнешнимиРесурсамиЗаблокирована() Экспорт + + Возврат ПараметрыСеанса.РаботаСВнешнимиРесурсамиЗаблокирована; + +КонецФункции + +// Инициализирует константу ПараметрыБлокировкиРаботыСВнешнимиРесурсами. +// +Процедура ИнициализироватьПараметрыБлокировкиРаботыСВнешнимиРесурсами(РаботаСВнешнимиРесурсамиЗаблокирована = Ложь) + + ПараметрыБлокировки = ПараметрыБлокировкиРаботыСВнешнимиРесурсами(РаботаСВнешнимиРесурсамиЗаблокирована, Истина); + ХранилищеЗначения = Новый ХранилищеЗначения(ПараметрыБлокировки); + Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Установить(ХранилищеЗначения); + +КонецПроцедуры + +Процедура ОбновитьПараметрыБлокировкиРаботыСВнешнимиРесурсами() Экспорт + + ПараметрыБлокировки = Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Получить().Получить(); + + Если ПараметрыБлокировки = Неопределено Тогда + ИнициализироватьПараметрыБлокировкиРаботыСВнешнимиРесурсами(); + Иначе + РазделениеВключено = ОбщегоНазначенияПовтИсп.РазделениеВключено(); + ПараметрыБлокировки.Вставить("РазделениеВключено", РазделениеВключено); + Если РазделениеВключено Тогда + ПараметрыБлокировки.Вставить("СтрокаСоединения", ""); + ПараметрыБлокировки.Вставить("ИмяКомпьютера", ""); + КонецЕсли; + ХранилищеЗначения = Новый ХранилищеЗначения(ПараметрыБлокировки); + Константы.ПараметрыБлокировкиРаботыСВнешнимиРесурсами.Установить(ХранилищеЗначения); + КонецЕсли; + +КонецПроцедуры + +Функция ПараметрыБлокировкиРаботыСВнешнимиРесурсами(РаботаСВнешнимиРесурсамиЗаблокирована = Ложь, + ИнициализироватьПараметрыБлокировки = Ложь) Экспорт + + СтрокаСоединения = СтрокаСоединенияИнформационнойБазы(); + ЭтоФайловаяБаза = ОбщегоНазначения.ИнформационнаяБазаФайловая(СтрокаСоединения); + РазделениеВключено = ОбщегоНазначенияПовтИсп.РазделениеВключено(); + ИдентификаторБазы = ?(ИнициализироватьПараметрыБлокировки, ИдентификаторФайловойБазы(ЭтоФайловаяБаза), ""); + + ПараметрыБлокировки = Новый Структура; + ПараметрыБлокировки.Вставить("РазделениеВключено", РазделениеВключено); + ПараметрыБлокировки.Вставить("РаботаСВнешнимиРесурсамиЗаблокирована", РаботаСВнешнимиРесурсамиЗаблокирована); + ПараметрыБлокировки.Вставить("ОтключенныеЗадания", Новый Массив); + ПараметрыБлокировки.Вставить("ЭтоФайловаяБаза", ЭтоФайловаяБаза); + ПараметрыБлокировки.Вставить("СтрокаСоединения", ?(РазделениеВключено, "", СтрокаСоединения)); + ПараметрыБлокировки.Вставить("ИмяКомпьютера", ?(РазделениеВключено, "", ИмяКомпьютера())); + ПараметрыБлокировки.Вставить("ПроверятьИмяСервера", Истина); + ПараметрыБлокировки.Вставить("ИдентификаторБазы", ИдентификаторБазы); + + Возврат ПараметрыБлокировки; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/Module.bsl index 826ae5695..f70f6f4c7 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/Module.bsl @@ -22,7 +22,7 @@ // Параметры: // НачальнаяНастройка - Булево - признак начальной настройки. // -Функция СформироватьДатыСледующегоАвтоматическогоКопирования() Экспорт +Функция ДатаСледующегоАвтоматическогоКопирования(ОтложитьРезервноеКопирование = Ложь) Экспорт Результат = Новый Структура; НастройкиРезервногоКопирования = РезервноеКопированиеИБСервер.НастройкиРезервногоКопирования(); @@ -33,7 +33,9 @@ ПериодПовтораВТечениеДня = РасписаниеКопирования.ПериодПовтораВТечениеДня; ПериодПовтораДней = РасписаниеКопирования.ПериодПовтораДней; - Если ПериодПовтораВТечениеДня <> 0 Тогда + Если ОтложитьРезервноеКопирование Тогда + Значение = ТекущаяДата + 60 * 15; + ИначеЕсли ПериодПовтораВТечениеДня <> 0 Тогда Значение = ТекущаяДата + ПериодПовтораВТечениеДня; ИначеЕсли ПериодПовтораДней <> 0 Тогда Значение = ТекущаяДата + ПериодПовтораДней * 3600 * 24; @@ -45,9 +47,6 @@ ЗаполнитьЗначенияСвойств(НастройкиРезервногоКопирования, Результат); РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(НастройкиРезервногоКопирования); - ЕстьАктивныеПользователи = СоединенияИБ.КоличествоСеансовИнформационнойБазы(Ложь, Ложь) > 1; - Результат.Вставить("ЕстьАктивныеПользователи", ЕстьАктивныеПользователи); - Возврат Результат; КонецФункции diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБКлиентГлобальный/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБГлобальный/Module.bsl similarity index 100% rename from SSL/src/CommonModules/РезервноеКопированиеИБКлиентГлобальный/Module.bsl rename to SSL/src/CommonModules/РезервноеКопированиеИБГлобальный/Module.bsl 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 70d3d2b39..e3420da8d 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБКлиентГлобальный/РезервноеКопированиеИБКлиентГлобальный.mdo +++ b/SSL/src/CommonModules/РезервноеКопированиеИБГлобальный/РезервноеКопированиеИБГлобальный.mdo @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> <mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="d91441cf-d793-4dfa-9225-f0c16818edde"> - <name>РезервноеКопированиеИБКлиентГлобальный</name> + <name>РезервноеКопированиеИБГлобальный</name> <synonym> <key>ru</key> - <value>Резервное копирование ИБ клиент глобальный</value> + <value>Резервное копирование ИБ глобальный</value> </synonym> <global>true</global> <clientManagedApplication>true</clientManagedApplication> diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl index 8e44123e9..21f4dc741 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl @@ -122,17 +122,22 @@ // Процедура ПриПолученииСпискаПредупрежденийЗавершенияРаботы(Предупреждения) Экспорт + #Если ВебКлиент Тогда + Возврат; + #КонецЕсли + Если ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент() Тогда Возврат; КонецЕсли; ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); - Если ПараметрыРаботыКлиента.РазделениеВключено Или Не ПараметрыРаботыКлиента.ИнформационнаяБазаФайловая Тогда Возврат; КонецЕсли; - Если ПроверитьНаличиеРезервногоКопирования() <> Истина Тогда + Параметры = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗавершении(); + Если Не Параметры.РезервноеКопированиеИБ.ДоступностьРолейОповещения + Или Не Параметры.РезервноеКопированиеИБ.ВыполнятьПриЗавершенииРаботы Тогда Возврат; КонецЕсли; @@ -222,7 +227,9 @@ КонецЕсли; ДатаПроверки = ОбщегоНазначенияКлиент.ДатаСеанса(); - Если ПараметрыРезервногоКопированияИБ.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = '29990101' Тогда + + ДатаСледующегоКопирования = ПараметрыРезервногоКопированияИБ.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования; + Если ДатаСледующегоКопирования = '29990101' Или ДатаСледующегоКопирования > ДатаПроверки Тогда Возврат Ложь; КонецЕсли; @@ -233,13 +240,32 @@ // Процедура ПровестиРезервноеКопирование() - // Затем резервное копирование. - ДатыСледующегоАвтоматическогоКопирования = РезервноеКопированиеИБВызовСервера.СформироватьДатыСледующегоАвтоматическогоКопирования(); - ЗаполнитьЗначенияСвойств(ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыРезервногоКопированияИБ"], - ДатыСледующегоАвтоматическогоКопирования); + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("Да", НСтр("ru = 'Да'")); + Кнопки.Добавить("Нет", НСтр("ru = 'Нет'")); + Кнопки.Добавить("Отложить", НСтр("ru = 'Отложить на 15 минут'")); - ПараметрыФормы = Новый Структура("РежимРаботы", "ВыполнитьСейчас"); - ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма.РезервноеКопированиеДанных", ПараметрыФормы); + ОписаниеОповещение = Новый ОписаниеОповещения("ПровестиРезервноеКопированиеЗавершение", ЭтотОбъект); + ПоказатьВопрос(ОписаниеОповещение, НСтр("ru = 'Все готово для выполнения резервного копирования по расписанию. + |Выполнить резервное копирование сейчас?'"), + Кнопки, 30, "Да", НСтр("ru = 'Резервное копирование по расписанию'"), "Да"); + +КонецПроцедуры + +Процедура ПровестиРезервноеКопированиеЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт + + ВыполнитьРезервноеКопирование = РезультатВопроса = "Да" Или РезультатВопроса = КодВозвратаДиалога.Таймаут; + ОтложитьРезервноеКопирование = РезультатВопроса = "Отложить"; + + ДатаСледующегоАвтоматическогоКопирования = РезервноеКопированиеИБВызовСервера.ДатаСледующегоАвтоматическогоКопирования( + ОтложитьРезервноеКопирование); + ЗаполнитьЗначенияСвойств(ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыРезервногоКопированияИБ"], + ДатаСледующегоАвтоматическогоКопирования); + + Если ВыполнитьРезервноеКопирование Тогда + ПараметрыФормы = Новый Структура("РежимРаботы", "ВыполнитьСейчас"); + ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма.РезервноеКопированиеДанных", ПараметрыФормы); + КонецЕсли; КонецПроцедуры @@ -394,8 +420,6 @@ СтруктураПараметров.Вставить("ИмяФайлаПрограммы", СтандартныеПодсистемыКлиент.ИмяИсполняемогоФайлаПриложения()); СтруктураПараметров.Вставить("СобытиеЖурналаРегистрации", НСтр("ru = 'Резервное копирование ИБ'")); - // Определение каталога временных файлов. Использование метода ТекущаяДата оправдано, - // т.к. резервное копирование не работает в клиент-серверном режиме. КаталогВременныхФайловОбновления = КаталогВременныхФайлов() + "1Cv8Backup." + Формат(ОбщегоНазначенияКлиент.ДатаСеанса(), "ДФ=ггММддЧЧммсс") + "\"; СтруктураПараметров.Вставить("КаталогВременныхФайловОбновления", КаталогВременныхФайловОбновления); @@ -498,27 +522,6 @@ //////////////////////////////////////////////////////////////////////////////// // Локальные служебные процедуры и функции. -// Функция проверяет настройки резервного копирования. -// -// Возвращаемое значение: -// Неопределено - если резервное копирование не запланировано, -// Дата - если запланировано резервное копирование на определенную дату, -// Булево - если резервное копирование запланировано сразу при завершении работы. -// -Функция ПроверитьНаличиеРезервногоКопирования() -#Если ВебКлиент Тогда - Возврат Неопределено; -#КонецЕсли - - Параметры = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗавершении(); - Если Не Параметры.РезервноеКопированиеИБ.ДоступностьРолейОповещения Тогда - Возврат Неопределено; - КонецЕсли; - - Возврат Параметры.РезервноеКопированиеИБ.ВыполнятьПриЗавершенииРаботы; - -КонецФункции - Функция КоличествоСекундВПериоде(Период, ТипПериода) Если ТипПериода = "День" Тогда diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl index 3f40b5595..e92835117 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl @@ -246,14 +246,13 @@ Возврат Ложь; КонецЕсли; - Если Параметры.Свойство("ПроцессВыполняется") Тогда - Если Параметры.ПроцессВыполняется Тогда - Возврат Ложь; - КонецЕсли; + Если Параметры.Свойство("ПроцессВыполняется") И Параметры.ПроцессВыполняется Тогда + Возврат Ложь; КонецЕсли; ДатаПроверки = ТекущаяДатаСеанса(); - Если Параметры.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования > ДатаПроверки Тогда + ДатаСледующегоКопирования = Параметры.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования; + Если ДатаСледующегоКопирования = '29990101' Или ДатаСледующегоКопирования > ДатаПроверки Тогда Возврат Ложь; КонецЕсли; @@ -735,7 +734,7 @@ // Заполняет структуру параметров, необходимых для работы клиентского кода // при завершении работы конфигурации, т.е. в обработчиках: // - ПередЗавершениемРаботыСистемы, -// - ПриЗавершенииРаботыСистемы +// - ПриЗавершенииРаботыСистемы. // // Параметры: // Параметры - Структура - структура параметров. diff --git a/SSL/src/CommonModules/СклонениеПредставленийОбъектов/Module.bsl b/SSL/src/CommonModules/СклонениеПредставленийОбъектов/Module.bsl new file mode 100644 index 000000000..7f67f9024 --- /dev/null +++ b/SSL/src/CommonModules/СклонениеПредставленийОбъектов/Module.bsl @@ -0,0 +1,689 @@ + +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "СклоненияПредставленийОбъектов". +// +//////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Склоняет ФИО +// Только для работы на ОС Windows. +// +// Параметры: +// ФИО - Строка - Строка, в которой содержится ФИО для склонения +// Падеж - Число - падеж, в который необходимо просклонять представление объекта +// 1 - Именительный +// 2 - Родительный +// 3 - Дательный +// 4 - Винительный +// 5 - Творительный +// 6 - Предложный +// Объект - ОбъектСклонения - Ссылка на объект, реквизит которого склоняется +// Пол - Число - Число - пол физического лица, +// 1 - мужской, +// 2 - женский. +// +// Возвращаемое значение: +// Строка - Результат склонения ФИО в падеже. +// +Функция ПросклонятьФИО(ФИО, Падеж, Объект = Неопределено, Пол = Неопределено) Экспорт + + Возврат Просклонять(ФИО, Падеж, Объект, Истина, Пол); + +КонецФункции + +// Склоняет представление объекта +// Только для работы на ОС Windows. +// +// Параметры: +// Представление - Строка - Строка, в которой содержится ФИО для склонения +// Падеж - Число - падеж, в который необходимо просклонять представление объекта +// 1 - Именительный +// 2 - Родительный +// 3 - Дательный +// 4 - Винительный +// 5 - Творительный +// 6 - Предложный +// Объект - ОбъектСклонения - Ссылка на объект, реквизит которого склоняется. +// +// Возвращаемое значение: +// Строка - Результат склонения представления объекта в падеже. +// +Функция ПросклонятьПредставление(Представление, Падеж, Объект = Неопределено) Экспорт + + Возврат Просклонять(Представление, Падеж, Объект); + +КонецФункции + +// Выполняет с формой действия, необходимые для подключения подсистемы Склонения. +// +// Параметры: +// Форма - УправляемаяФорма - форма для подключения механизма склонения +// Представление - Строка - Строка для склонения +// ИмяОсновногоРеквизитаФормы - Строка - Имя основного реквизита формы. +// +Процедура ПриСозданииНаСервере(Форма, Представление, ИмяОсновногоРеквизитаФормы = "Объект") Экспорт + + МассивРеквизитов = Новый Массив; + + РеквизитИзмененоПредставление = Новый РеквизитФормы("ИзмененоПредставление", Новый ОписаниеТипов("Булево"), , "Изменено представление"); + МассивРеквизитов.Добавить(РеквизитИзмененоПредставление); + + РеквизитСклонения = Новый РеквизитФормы("Склонения", Новый ОписаниеТипов(), , "Склонения"); + МассивРеквизитов.Добавить(РеквизитСклонения); + + Форма.ИзменитьРеквизиты(МассивРеквизитов); + + СтруктураСклонения = СклоненияИзРегистра(Представление, Форма[ИмяОсновногоРеквизитаФормы].Ссылка); + Если СтруктураСклонения <> Неопределено Тогда + Форма.Склонения = Новый ФиксированнаяСтруктура(СтруктураСклонения); + КонецЕсли; + +КонецПроцедуры + +// Обработчик события ПриЗаписиНаСервере управляемой формы объекта для склонения +// +// Параметры: +// Форма - Управляемая форма - форма объекта склонения +// Представление - Строка - Строка для склонения +// Объект - ОбъектСклонения - Объект для склонения +// ЭтоФИО - Булево - Признак склонения ФИО +// Пол - Число - Пол физического лица (в случае склонения ФИО) +// 1 - мужской +// 2 - женский. +// +Процедура ПриЗаписиНаСервере(Форма, Представление, Объект, ЭтоФИО = Ложь, Пол = Неопределено) Экспорт + + Если Форма.ИзмененоПредставление Тогда + СтруктураСклонений = ПросклонятьПредставлениеПоВсемПадежам(Представление, ЭтоФИО, Пол); + Форма.Склонения = Новый ФиксированнаяСтруктура(СтруктураСклонений); + Форма.ИзмененоПредставление = Ложь; + КонецЕсли; + + Если ТипЗнч(Форма.Склонения) = Тип("ФиксированнаяСтруктура") Тогда + ЗаписатьВРегистрСклонения(Представление, Объект, Форма.Склонения); + КонецЕсли; + +КонецПроцедуры + +// Устанавливает признак доступности сервиса склонения +// +// Параметры: +// Доступность - Булево - Признак доступности сервиса склонения. +// +Процедура УстановитьДоступностьСервисаСклонения(Доступность) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ТекущиеПараметры = Новый Соответствие(ПараметрыСеанса.ПараметрыКлиентаНаСервере); + + ТекущиеПараметры.Вставить("ДоступенСервисСклонения", Доступность); + + ПараметрыСеанса.ПараметрыКлиентаНаСервере = Новый ФиксированноеСоответствие(ТекущиеПараметры); + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +// Склоняет переданную фразу. +// Только для работы на ОС Windows. +// +// Параметры: +// ФИО - Строка - фамилия, имя и отчество в именительном падеже, +// которые необходимо просклонять. +// Падеж - Число - падеж, в который необходимо поставить ФИО: +// 1 - Именительный +// 2 - Родительный +// 3 - Дательный +// 4 - Винительный +// 5 - Творительный +// 6 - Предложный +// Результат - Строка - в этот параметр помещается результат склонения. +// Если ФИО не удалось просклонять, то возвращается значение ФИО. +// Пол - Число - пол физического лица, 1 - мужской, 2 - женский. +// +// Возвращаемое значение: +// Булево - Истина, если ФИО удалось просклонять. +// +Функция ПросклонятьФИОСПомощьюКомпоненты(Знач ФИО, Падеж, Результат, Пол = Неопределено) Экспорт + + ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаСклоненияФИО", "Decl"); + Компонента = Новый("AddIn.Decl.CNameDecl"); + + Результат = ""; + + МассивСтрок = СтрРазделить(ФИО, " ", Ложь); + + // Выделим первые 3 слова, так как компонента не умеет склонять фразу большую 3х символов. + НомерНесклоняемогоСимвола = 4; + Для Номер = 1 По Мин(МассивСтрок.Количество(), 3) Цикл + Если Не ФизическиеЛицаКлиентСервер.ФИОНаписаноВерно(МассивСтрок[Номер-1], Истина) Тогда + НомерНесклоняемогоСимвола = Номер; + Прервать; + КонецЕсли; + + Результат = Результат + ?(Номер > 1, " ", "") + МассивСтрок[Номер-1]; + КонецЦикла; + + Если ПустаяСтрока(Результат) Тогда + Результат = ФИО; + Возврат Ложь; + КонецЕсли; + + Попытка + Если Пол = Неопределено Тогда + Результат = Компонента.Просклонять(Результат, Падеж) + " "; + + Иначе + Результат = Компонента.Просклонять(Результат, Падеж, Пол) + " "; + + КонецЕсли; + + Исключение + Результат = ФИО; + Возврат Ложь; + + КонецПопытки; + + // Остальные символы добавим без склонения. + Для Номер = НомерНесклоняемогоСимвола По МассивСтрок.Количество() Цикл + Результат = Результат + " " + МассивСтрок[Номер-1]; + КонецЦикла; + + Результат = СокрЛП(Результат); + + Возврат Истина; + +КонецФункции + +// Определяет доступен ли сервис склонения +// +// Возвращаемое значение: +// Булево - Истина, если веб-сервис склонения доступен. +// +Функция ДоступенСервисСклонения() Экспорт + + Результат = ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить("ДоступенСервисСклонения"); + + Если Результат = Неопределено Тогда + Возврат Истина; + Иначе + Возврат Результат; + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Склоняет переданную фразу по всем падежам +// +// Параметры: +// Представление - Строка - Строка для склонения +// ЭтоФИО - Булево - Признак склонения ФИО +// Пол - Число - Пол физического лица (в случае склонения ФИО) +// 1 - мужской +// 2 - женский +// ПоказыватьСообщения - Булево - Признак, определяющий нужно ли показывать пользователю сообщения об ошибках. +// +// Возвращаемое значение: +// Структура - со свойствами: +// *ИменительныйПадеж - Строка +// *РодительныйПадеж - Строка +// *ДательныйПадеж - Строка +// *ВинительныйПадеж - Строка +// *ТворительныйПадеж - Строка +// *ПредложныйПадеж - Строка +// +Функция ПросклонятьПредставлениеПоВсемПадежам(Представление, ЭтоФИО = Ложь, Пол = Неопределено, ПоказыватьСообщения = Ложь) Экспорт + + СтруктураСклонения = СклоненияИзРегистра(Представление); + + Если СтруктураСклонения <> Неопределено Тогда + Возврат СтруктураСклонения; + КонецЕсли; + + СтруктураСклонения = ДанныеСклонения(Представление, ЭтоФИО, Пол, ПоказыватьСообщения); + + Возврат СтруктураСклонения; + +КонецФункции + +// Получает данные склонения по всем падежам +// +// Параметры: +// Представление - Строка - Строка для склонения +// ЭтоФИО - Булево - Признак склонения ФИО +// Пол - Число - Пол физического лица (в случае склонения ФИО) +// 1 - мужской +// 2 - женский +// ПоказыватьСообщения - Булево - Признак, определяющий нужно ли показывать пользователю сообщения об ошибках. +// +// Возвращаемое значение: +// Структура - со свойствами: +// *ИменительныйПадеж - Строка +// *РодительныйПадеж - Строка +// *ДательныйПадеж - Строка +// *ВинительныйПадеж - Строка +// *ТворительныйПадеж - Строка +// *ПредложныйПадеж - Строка +// +Функция ДанныеСклонения(Представление, ЭтоФИО = Ложь, Пол = Неопределено, ПоказыватьСообщения = Ложь) Экспорт + + ИспользоватьСервисСклонения = Константы.ИспользоватьСервисСклоненияMorpher.Получить(); + + Если Не ЭтоФИО И ИспользоватьСервисСклонения Тогда + + СтруктураСклонения = СтруктураСклоненияЧерезЗапросКСервису(Представление, ПоказыватьСообщения); + + Если СтруктураСклонения <> Неопределено Тогда + УстановитьДоступностьСервисаСклонения(Истина); + Возврат СтруктураСклонения; + Иначе + УстановитьДоступностьСервисаСклонения(Ложь); + КонецЕсли; + + КонецЕсли; + + Если СтруктураСклонения = Неопределено Тогда + СтруктураСклонения = СклонениеПредставленийОбъектовКлиентСервер.СтруктураСклонения(); + КонецЕсли; + + ПросклонятьСПомощьюКомпоненты = Ложь; + + Если ЭтоФИО Тогда + ПросклонятьСПомощьюКомпоненты = Истина; + Иначе + МассивСтрок = СтрРазделить(Представление, " ", Ложь); + Если МассивСтрок.Количество() = 1 + И СтроковыеФункцииКлиентСервер.ТолькоКириллицаВСтроке(Представление) Тогда + + ПросклонятьСПомощьюКомпоненты = Истина; + КонецЕсли; + КонецЕсли; + + Если ПросклонятьСПомощьюКомпоненты Тогда + ПросклонятьСПомощьюКомпоненты(Представление, СтруктураСклонения, , Пол); + Иначе + ЗаполнитьСтруктуруСклоненияПоПредставлению(СтруктураСклонения, Представление); + КонецЕсли; + + Возврат СтруктураСклонения; + +КонецФункции + +// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. +Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт + + // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам"].Добавить( + "СклонениеПредставленийОбъектов"); + +КонецПроцедуры + +Процедура ПросклонятьПредставлениеПоВсемПадежамДлительнаяОперация(Параметры, АдресРезультата) Экспорт + + Если Параметры.ИзмененоПредставление Или Параметры.Склонения = Неопределено Тогда + + СтруктураСклонения = ПросклонятьПредставлениеПоВсемПадежам(Параметры.Представление, Параметры.ЭтоФИО, Параметры.Пол, Истина); + + ПоместитьВоВременноеХранилище(СтруктураСклонения, АдресРезультата); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Склоняет представление объекта +// Только для работы на ОС Windows. +// +// Параметры: +// Объект - ОбъектСклонения - Ссылка на объект, в котором содержится реквизит для склонения +// ВидПредставления - Строка - Имя реквизита объекта для склонения +// Падеж - Число - падеж, в который необходимо просклонять представление объекта +// 1 - Именительный +// 2 - Родительный +// 3 - Дательный +// 4 - Винительный +// 5 - Творительный +// 6 - Предложный. +// +// Возвращаемое значение: +// Строка - Результат склонения представления объекта в падеже. +// +Функция Просклонять(Представление, Падеж, Объект = Неопределено, ЭтоФИО = Ложь, Пол = Неопределено) + + ПредставлениеВПадеже = ""; + + СтруктураСклонения = СклонениеПредставленийОбъектовКлиентСервер.СтруктураСклонения(); + + СоответствиеПадежей = СоответствиеПадежей(); + + ИмяПадежа = СоответствиеПадежей.Получить(Падеж); + + Если ИмяПадежа = Неопределено Тогда + Возврат ПредставлениеВПадеже; + КонецЕсли; + + // сначала получаем склонения из регистра СклоненияПредставленийОбъектов + СтруктураСклоненияИзРегистра = СклоненияИзРегистра(Представление, Объект); + + Если СтруктураСклоненияИзРегистра <> Неопределено И ЗначениеЗаполнено(СтруктураСклоненияИзРегистра[ИмяПадежа]) Тогда + Возврат СтруктураСклоненияИзРегистра[ИмяПадежа]; + КонецЕсли; + + Если ЭтоФИО Тогда + + // Если склоняем ФИО, то используем компоненту склонения ФИО + ПросклонятьСПомощьюКомпоненты(Представление, СтруктураСклонения, , Пол); + + // Запись в регистр СклоненияПредставленийОбъектов успешного склонения + Если ЗначениеЗаполнено(Объект) Тогда + ЗаписатьВРегистрСклонения(Представление, Объект, СтруктураСклонения); + КонецЕсли; + + Возврат СтруктураСклонения[ИмяПадежа]; + + КонецЕсли; + + // Если склоняем не ФИО, тогда обращаемся к веб-сервису, если разрешено и сервис доступен. + ИспользоватьСервисСклонения = Константы.ИспользоватьСервисСклоненияMorpher.Получить(); + + Если Не ИспользоватьСервисСклонения Тогда + Возврат Представление; + КонецЕсли; + + СтруктураСклонения = СтруктураСклоненияЧерезЗапросКСервису(Представление, Ложь); + + Если СтруктураСклонения = Неопределено Тогда + + УстановитьДоступностьСервисаСклонения(Ложь); + Возврат Представление; + + КонецЕсли; + + УстановитьДоступностьСервисаСклонения(Истина); + + // Запись в регистр СклоненияПредставленийОбъектов успешного склонения + Если ЗначениеЗаполнено(Объект) Тогда + ЗаписатьВРегистрСклонения(Представление, Объект, СтруктураСклонения); + КонецЕсли; + + Если Не ЗначениеЗаполнено(СтруктураСклонения[ИмяПадежа]) Тогда + Возврат Представление; + КонецЕсли; + + Возврат СтруктураСклонения[ИмяПадежа]; + +КонецФункции + +Процедура ЗаписатьВРегистрСклонения(Представление, Объект, Склонения) + + Если Не Метаданные.ОпределяемыеТипы.ОбъектСклонения.Тип.СодержитТип(ТипЗнч(Объект)) Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + ХешПредставления = ХешПредставления(Представление); + + НаборЗаписейСклонения = РегистрыСведений.СклоненияПредставленийОбъектов.СоздатьНаборЗаписей(); + + НаборЗаписейСклонения.Отбор.Объект.Установить(Объект.Ссылка); + + НоваяСтрока = НаборЗаписейСклонения.Добавить(); + + НоваяСтрока.Объект = Объект.Ссылка; + НоваяСтрока.ХешПредставления = ХешПредставления; + ЗаполнитьЗначенияСвойств(НоваяСтрока, Склонения); + + НаборЗаписейСклонения.Записать(); + + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + +Функция ХешПредставления(Представление) + + ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.MD5); + ХешированиеДанных.Добавить(Представление); + ХешПредставления = СтрЗаменить(Строка(ХешированиеДанных.ХешСумма), " ", ""); + + Возврат ХешПредставления; + +КонецФункции + +Функция СтруктураСклоненияЧерезЗапросКСервису(Представление, ПоказыватьСообщения) + + СообщениеОбОшибке = ""; + + СтруктураСклонения = Неопределено; + + Результат = Неопределено; + + Логин = Константы.ЛогинДоступаКСервисуMorpher.Получить(); + + Результат = РезультатОбращенияКСервису("http://morpher.ru/WebService.asmx?WSDL", Представление, Логин, СообщениеОбОшибке); + + Если Результат = Неопределено Тогда + + Результат = РезультатОбращенияКСервису("http://morphapi.ru/WebService.asmx?WSDL", Представление, Логин, СообщениеОбОшибке); + + КонецЕсли; + + Если Результат <> Неопределено Тогда + + СтруктураСклонения = СклонениеПредставленийОбъектовКлиентСервер.СтруктураСклонения(); + + СтруктураСклонения.ИменительныйПадеж = Представление; + СтруктураСклонения.РодительныйПадеж = Результат.Р; + СтруктураСклонения.ДательныйПадеж = Результат.Д; + СтруктураСклонения.ВинительныйПадеж = Результат.В; + СтруктураСклонения.ТворительныйПадеж = Результат.Т; + СтруктураСклонения.ПредложныйПадеж = Результат.П; + + Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда + КодОсновногоЯзыка = ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Вызов веб-сервиса склонения'", КодОсновногоЯзыка), УровеньЖурналаРегистрации.Предупреждение, , ,СообщениеОбОшибке); + КонецЕсли; + + Иначе + + КодОсновногоЯзыка = ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Вызов веб-сервиса склонения'", КодОсновногоЯзыка), УровеньЖурналаРегистрации.Ошибка, , ,СообщениеОбОшибке); + + Если ПоказыватьСообщения Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Ошибка при вызове сервиса склонения. Обратитесь к администратору.'") + Символы.ПС + НСтр("ru = 'Техническая информация:'") + Символы.ПС + СообщениеОбОшибке); + КонецЕсли; + + КонецЕсли; + + Возврат СтруктураСклонения; + +КонецФункции + +Функция РезультатОбращенияКСервису(URL, Представление, Логин, СообщениеОбОшибке) + + Результат = Неопределено; + + Попытка + + Если ЗначениеЗаполнено(Логин) Тогда + + Пароль = ""; + + УстановитьПривилегированныйРежим(Истина); + Пароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(ОбщегоНазначения.ИдентификаторОбъектаМетаданных("РегистрСведений.СклоненияПредставленийОбъектов"), "ПарольДоступаКСервисуMorpher"); + УстановитьПривилегированныйРежим(Ложь); + + Морфер = ОбщегоНазначения.WSПрокси(URL, "http://morpher.ru/", "WebService", + "WebServiceSoap", Логин, Пароль, 10); + + Иначе + Морфер = ОбщегоНазначения.WSПрокси(URL, "http://morpher.ru/", "WebService", + "WebServiceSoap", "", "", 10); + КонецЕсли; + + Результат = Морфер.GetXml(Представление); + + Исключение + + Если НЕ ПустаяСтрока(СообщениеОбОшибке) Тогда + СообщениеОбОшибке = СообщениеОбОшибке + Символы.ПС; + КонецЕсли; + + СообщениеОбОшибке = СообщениеОбОшибке + URL + Символы.ПС + ОписаниеОшибки(); + + КонецПопытки; + + Возврат Результат; + +КонецФункции + +Функция СклоненияИзРегистра(Представление, Объект = Неопределено) + + УстановитьПривилегированныйРежим(Истина); + + СтруктураСклонения = Неопределено; + Запрос = Новый Запрос; + + Запрос.Текст = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(ВЫРАЗИТЬ(СклоненияПредставленийОбъектов.ИменительныйПадеж КАК СТРОКА(255))) КАК КоличествоНаборовСклонений, + | СклоненияПредставленийОбъектов.ХешПредставления + |ПОМЕСТИТЬ ТаблицаРегистраБезОтбораПоОбъекту + |ИЗ + | РегистрСведений.СклоненияПредставленийОбъектов КАК СклоненияПредставленийОбъектов + |ГДЕ + | СклоненияПредставленийОбъектов.ХешПредставления = &ХешПредставления + | + |СГРУППИРОВАТЬ ПО + | СклоненияПредставленийОбъектов.ХешПредставления + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СклоненияПредставленийОбъектов.ИменительныйПадеж, + | СклоненияПредставленийОбъектов.РодительныйПадеж, + | СклоненияПредставленийОбъектов.ДательныйПадеж, + | СклоненияПредставленийОбъектов.ВинительныйПадеж, + | СклоненияПредставленийОбъектов.ТворительныйПадеж, + | СклоненияПредставленийОбъектов.ПредложныйПадеж, + | 0 КАК Приоритет + |ИЗ + | РегистрСведений.СклоненияПредставленийОбъектов КАК СклоненияПредставленийОбъектов + |ГДЕ + | &ИспользуетсяОтборПоОбъекту + | И СклоненияПредставленийОбъектов.Объект = &Объект + | И СклоненияПредставленийОбъектов.ХешПредставления = &ХешПредставления + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | СклоненияПредставленийОбъектов.ИменительныйПадеж, + | СклоненияПредставленийОбъектов.РодительныйПадеж, + | СклоненияПредставленийОбъектов.ДательныйПадеж, + | СклоненияПредставленийОбъектов.ВинительныйПадеж, + | СклоненияПредставленийОбъектов.ТворительныйПадеж, + | СклоненияПредставленийОбъектов.ПредложныйПадеж, + | 1 + |ИЗ + | РегистрСведений.СклоненияПредставленийОбъектов КАК СклоненияПредставленийОбъектов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаРегистраБезОтбораПоОбъекту КАК ТаблицаРегистраБезОтбораПоОбъекту + | ПО СклоненияПредставленийОбъектов.ХешПредставления = ТаблицаРегистраБезОтбораПоОбъекту.ХешПредставления + | И (ТаблицаРегистраБезОтбораПоОбъекту.КоличествоНаборовСклонений = 1) + |ГДЕ + | СклоненияПредставленийОбъектов.ХешПредставления = &ХешПредставления + | + |УПОРЯДОЧИТЬ ПО + | Приоритет"; + + Запрос.УстановитьПараметр("ХешПредставления", ХешПредставления(Представление)); + Запрос.УстановитьПараметр("Объект", Объект); + Запрос.УстановитьПараметр("ИспользуетсяОтборПоОбъекту", ЗначениеЗаполнено(Объект)); + + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Следующий() Тогда + СтруктураСклонения = СклонениеПредставленийОбъектовКлиентСервер.СтруктураСклонения(); + ЗаполнитьЗначенияСвойств(СтруктураСклонения, Выборка); + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + + Возврат СтруктураСклонения; + +КонецФункции + +Процедура ПросклонятьСПомощьюКомпоненты(Представление, СтруктураСклонения, Падеж = 0, Пол = Неопределено) + + СоответствиеПадежей = СоответствиеПадежей(); + + Если Падеж = 0 Тогда + СтруктураСклонения.ИменительныйПадеж = Представление; + + Для НомерПадежа = 2 По 6 Цикл + + ПросклонятьФИОСПомощьюКомпоненты(Представление, НомерПадежа, СтруктураСклонения[СоответствиеПадежей.Получить(НомерПадежа)], Пол); + + КонецЦикла; + + Иначе + + ИмяПадежа = СоответствиеПадежей.Получить(Падеж); + Если ИмяПадежа <> Неопределено Тогда + ПросклонятьФИОСПомощьюКомпоненты(Представление, Падеж, СтруктураСклонения[ИмяПадежа], Пол); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Функция СоответствиеПадежей() + + СоответствиеПадежей = Новый Соответствие; + + СоответствиеПадежей.Вставить(1, "ИменительныйПадеж"); + СоответствиеПадежей.Вставить(2, "РодительныйПадеж"); + СоответствиеПадежей.Вставить(3, "ДательныйПадеж"); + СоответствиеПадежей.Вставить(4, "ВинительныйПадеж"); + СоответствиеПадежей.Вставить(5, "ТворительныйПадеж"); + СоответствиеПадежей.Вставить(6, "ПредложныйПадеж"); + + Возврат СоответствиеПадежей; + +КонецФункции + +// Заполняет перечень запросов внешних разрешений, которые обязательно должны быть предоставлены +// при создании информационной базы или обновлении программы. +// +// Параметры: +// ЗапросыРазрешений - Массив - список значений, возвращенных функцией. +// РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(). +// +Процедура ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам(ЗапросыРазрешений) Экспорт + + Разрешения = Новый Массив(); + + Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнейКомпоненты("ОбщийМакет.КомпонентаСклоненияФИО", + НСтр("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..e3d1100ff --- /dev/null +++ b/SSL/src/CommonModules/СклонениеПредставленийОбъектов/СклонениеПредставленийОбъектов.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="7172bed5-b12b-4e83-b15d-1d95b63a6272"> + <name>СклонениеПредставленийОбъектов</name> + <synonym> + <key>ru</key> + <value>Склонение представлений объектов</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/СклонениеПредставленийОбъектовВызовСервера/Module.bsl b/SSL/src/CommonModules/СклонениеПредставленийОбъектовВызовСервера/Module.bsl new file mode 100644 index 000000000..21b7c522f --- /dev/null +++ b/SSL/src/CommonModules/СклонениеПредставленийОбъектовВызовСервера/Module.bsl @@ -0,0 +1,27 @@ + +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "СклоненияПредставленийОбъектов". +// +//////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +// Склоняет переданную фразу по всем падежам +// +// Параметры: +// Форма - Управляемая форма - форма объекта склонения +// Представление - Строка - Строка для склонения +// ЭтоФИО - Булево - Признак склонения ФИО +// Пол - Число - Пол физического лица (в случае склонения ФИО) +// 1 - мужской +// 2 - женский +// ПоказыватьСообщения - Булево - Признак, определяющий нужно ли показывать пользователю сообщения об ошибках. +// +Процедура ПросклонятьПредставлениеПоВсемПадежам(Представление, Склонения, ЭтоФИО = Ложь, Пол = Неопределено, ПоказыватьСообщения = Ложь) Экспорт + + СтруктураСклонений = СклонениеПредставленийОбъектов.ПросклонятьПредставлениеПоВсемПадежам(Представление, ЭтоФИО, Пол, ПоказыватьСообщения); + Склонения = Новый ФиксированнаяСтруктура(СтруктураСклонений); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/СклонениеПредставленийОбъектовВызовСервера/СклонениеПредставленийОбъектовВызовСервера.mdo b/SSL/src/CommonModules/СклонениеПредставленийОбъектовВызовСервера/СклонениеПредставленийОбъектовВызовСервера.mdo new file mode 100644 index 000000000..a1399842e --- /dev/null +++ b/SSL/src/CommonModules/СклонениеПредставленийОбъектовВызовСервера/СклонениеПредставленийОбъектовВызовСервера.mdo @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="25d75a3c-b801-4b1e-aed8-90e667f36c67"> + <name>СклонениеПредставленийОбъектовВызовСервера</name> + <synonym> + <key>ru</key> + <value>Склонение представлений объектов вызов сервера</value> + </synonym> + <server>true</server> + <serverCall>true</serverCall> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиент/Module.bsl b/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиент/Module.bsl new file mode 100644 index 000000000..0237e00fd --- /dev/null +++ b/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиент/Module.bsl @@ -0,0 +1,90 @@ + +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "СклоненияПредставленийОбъектов". +// +//////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Обработчик события ПриИзменении элемента формы, подлежащего склонению +// +// Параметры: +// Форма - Управляемая форма - форма, содержащая элемент, подлежащий склонению. +// +Процедура ПриИзмененииПредставления(Форма) Экспорт + + Форма.ИзмененоПредставление = Истина; + Форма.ПодключитьОбработчикОжидания("Подключаемый_ПросклонятьПредставлениеПоВсемПадежам", 2, Истина); + +КонецПроцедуры + +// Склоняет переданную фразу по всем падежам +// +// Параметры: +// Форма - Управляемая форма - форма объекта склонения +// Представление - Строка - Строка для склонения +// ЭтоФИО - Булево - Признак склонения ФИО +// Пол - Число - Пол физического лица (в случае склонения ФИО) +// 1 - мужской +// 2 - женский +// ПоказыватьСообщения - Булево - Признак, определяющий нужно ли показывать пользователю сообщения об ошибках. +// +Процедура ПросклонятьПредставлениеПоВсемПадежам(Форма, Представление, ЭтоФИО = Ложь, Пол = Неопределено, ПоказыватьСообщения = Ложь) Экспорт + + Если Форма.ИзмененоПредставление Или Форма.Склонения = Неопределено Тогда + СклонениеПредставленийОбъектовВызовСервера.ПросклонятьПредставлениеПоВсемПадежам(Представление, Форма.Склонения, ЭтоФИО, Пол, ПоказыватьСообщения); + Форма.ИзмененоПредставление = Ложь; + КонецЕсли; + +КонецПроцедуры + +// Обработчик команды "Склонения" формы объекта склонения +// +// Параметры: +// Форма - Управляемая форма - форма объекта склонения +// Представление - Строка - Строка для склонения +// ЭтоФИО - Булево - Признак склонения ФИО +// Пол - Число - Пол физического лица (в случае склонения ФИО) +// 1 - мужской +// 2 - женский. +// +Процедура ОбработатьКомандуСклонения(Форма, Представление, ЭтоФИО = Ложь, Пол = Неопределено) Экспорт + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Форма", Форма); + + Оповещение = Новый ОписаниеОповещения("ОткрытьФормуСклоненияЗавершение", ЭтотОбъект, ДополнительныеПараметры); + + СтруктураПараметров = Новый Структура; + СтруктураПараметров.Вставить("Склонения", Форма.Склонения); + СтруктураПараметров.Вставить("ЭтоФИО", ЭтоФИО); + СтруктураПараметров.Вставить("Пол", Пол); + СтруктураПараметров.Вставить("Представление", Представление); + СтруктураПараметров.Вставить("ИзмененоПредставление", Форма.ИзмененоПредставление); + + ОткрытьФорму("ОбщаяФорма.Склонения", СтруктураПараметров, Форма, , , , Оповещение); + + Форма.ИзмененоПредставление = Ложь; + Форма.ОтключитьОбработчикОжидания("Подключаемый_ПросклонятьПредставлениеПоВсемПадежам"); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Завершение процедуры ОбработатьКомандуСклонения +// +Процедура ОткрытьФормуСклоненияЗавершение(РезультатРедактирования, ДополнительныеПараметры) Экспорт + + Форма = ДополнительныеПараметры.Форма; + Если РезультатРедактирования <> Неопределено Тогда + + Форма.Склонения = Новый ФиксированнаяСтруктура(РезультатРедактирования); + Форма.Модифицированность = Истина; + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиент/СклонениеПредставленийОбъектовКлиент.mdo b/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиент/СклонениеПредставленийОбъектовКлиент.mdo new file mode 100644 index 000000000..1b2940806 --- /dev/null +++ b/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиент/СклонениеПредставленийОбъектовКлиент.mdo @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="addb3aa1-a9d6-4d30-b5db-7f3ce46bc1b2"> + <name>СклонениеПредставленийОбъектовКлиент</name> + <synonym> + <key>ru</key> + <value>Склонение представлений объектов клиент</value> + </synonym> + <clientManagedApplication>true</clientManagedApplication> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиентСервер/Module.bsl b/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиентСервер/Module.bsl new file mode 100644 index 000000000..5d4bee7d1 --- /dev/null +++ b/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиентСервер/Module.bsl @@ -0,0 +1,32 @@ + +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "СклоненияПредставленийОбъектов". +// +//////////////////////////////////////////////////////////////////////////////// + +#Область СлужебныеПроцедурыИФункции + +// Возвращает пустую структуру склонения +// +// Возвращаемое значение: +// Структура - со свойствами: +// *ИменительныйПадеж - Строка +// *РодительныйПадеж - Строка +// *ДательныйПадеж - Строка +// *ВинительныйПадеж - Строка +// *ТворительныйПадеж - Строка +// *ПредложныйПадеж - Строка +// +Функция СтруктураСклонения() Экспорт + + СтруктураСклонений = Новый Структура("ИменительныйПадеж, + |РодительныйПадеж, + |ДательныйПадеж, + |ВинительныйПадеж, + |ТворительныйПадеж, + |ПредложныйПадеж"); + Возврат СтруктураСклонений; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиентСервер/СклонениеПредставленийОбъектовКлиентСервер.mdo b/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиентСервер/СклонениеПредставленийОбъектовКлиентСервер.mdo new file mode 100644 index 000000000..41570b3ac --- /dev/null +++ b/SSL/src/CommonModules/СклонениеПредставленийОбъектовКлиентСервер/СклонениеПредставленийОбъектовКлиентСервер.mdo @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="63ebf7fd-d514-4fce-abc1-fb3f253d01cd"> + <name>СклонениеПредставленийОбъектовКлиентСервер</name> + <synonym> + <key>ru</key> + <value>Склонение представлений объектов клиент сервер</value> + </synonym> + <clientManagedApplication>true</clientManagedApplication> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/СоединенияИБ/Module.bsl b/SSL/src/CommonModules/СоединенияИБ/Module.bsl index 280551bbe..8175424b7 100644 --- a/SSL/src/CommonModules/СоединенияИБ/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБ/Module.bsl @@ -123,6 +123,9 @@ Результат.Вставить("ИнтервалОжиданияЗавершенияРаботыПользователей", 15 * 60); Результат.Вставить("КоличествоСеансов", ?(ПолучитьКоличествоСеансов, КоличествоСеансовИнформационнойБазы(), 0)); Результат.Вставить("ТекущаяДатаСеанса", ПараметрыБлокировки.ТекущаяДата); + Результат.Вставить("ПерезапуститьПриЗавершении", Истина); + + СоединенияИБПереопределяемый.ПриОпределенииПараметровБлокировкиСеансов(Результат); Возврат Результат; @@ -562,7 +565,7 @@ // Заполнить структуру параметров, необходимых для работы клиентского кода // данной подсистемы при запуске конфигурации, т.е. в обработчиках событий. // - ПередНачаломРаботыСистемы, -// - ПриНачалеРаботыСистемы +// - ПриНачалеРаботыСистемы. // // Параметры: // Параметры - Структура - структура параметров запуска. @@ -717,7 +720,7 @@ Сообщение = НСтр("ru = 'Не действует'"); Важность = Ложь; КонецЕсли; - + Для Каждого Раздел Из Разделы Цикл diff --git a/SSL/src/CommonModules/СоединенияИБВызовСервера/Module.bsl b/SSL/src/CommonModules/СоединенияИБВызовСервера/Module.bsl index 797038174..d26ef296e 100644 --- a/SSL/src/CommonModules/СоединенияИБВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБВызовСервера/Module.bsl @@ -90,22 +90,6 @@ КонецПроцедуры -// Получить информацию о блокировке сеансов области данных. -// -// Параметры: -// ПоМестномуВремени - Булево - время начала и окончания блокировки необходимо вернуть -// в местном времени сеанса. Если Ложь, то -// возвращается в универсальном времени. -// -// Возвращаемое значение: -// Структура - см. НовыеПараметрыБлокировкиСоединений. -// -Функция ПолучитьБлокировкуСеансовОбластиДанных(ПоМестномуВремени = Истина) Экспорт - - Возврат СоединенияИБ.ПолучитьБлокировкуСеансовОбластиДанных(ПоМестномуВремени); - -КонецФункции - // Возвращает номер текущего сеанса информационной базы // Функция НомерТекущегоСеанса() Экспорт @@ -114,4 +98,10 @@ КонецФункции +// Получает сохраненные параметры администрирования. +// +Функция ПараметрыАдминистрирования() Экспорт + Возврат СтандартныеПодсистемыСервер.ПараметрыАдминистрирования(); +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl b/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl index f1c296b99..6e87d2f47 100644 --- a/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl @@ -13,12 +13,11 @@ // Получим текущее значение параметров блокировки. ТекущийРежим = СоединенияИБВызовСервера.ПараметрыБлокировкиСеансов(); БлокировкаУстановлена = ТекущийРежим.Установлена; - ПараметрыРаботы = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); - Если НЕ БлокировкаУстановлена Тогда + Если Не БлокировкаУстановлена Тогда Возврат; КонецЕсли; - + ВремяНачалаБлокировки = ТекущийРежим.Начало; ВремяОкончанияБлокировки = ТекущийРежим.Конец; @@ -43,13 +42,14 @@ |%3'"); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ДатаВремениНачалаБлокировки, ВремяВремениНачалаБлокировки, ТекстСообщения); - Если Не ПараметрыРаботы.РазделениеВключено + РазделениеВключено = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().РазделениеВключено; + Если Не РазделениеВключено И (Не ЗначениеЗаполнено(ВремяНачалаБлокировки) Или ВремяНачалаБлокировки - ТекущийМомент < ИнтервалПрекратить) Тогда СтандартныеПодсистемыКлиент.ПропуститьПредупреждениеПередЗавершениемРаботыСистемы(); - ЗавершитьРаботуСистемы(Ложь, Истина); + ЗавершитьРаботуСистемы(Ложь, ТекущийРежим.ПерезапуститьПриЗавершении); - ИначеЕсли ПараметрыРаботы.РазделениеВключено + ИначеЕсли РазделениеВключено И (Не ЗначениеЗаполнено(ВремяНачалаБлокировки) Или ВремяНачалаБлокировки - ТекущийМомент < ИнтервалПрекратитьВМоделиСервиса) Тогда СтандартныеПодсистемыКлиент.ПропуститьПредупреждениеПередЗавершениемРаботыСистемы(); @@ -124,7 +124,6 @@ // если этого не произошло пробуем принудительно прервать соединения. ОтключитьОбработчикОжидания("ЗавершитьРаботуПользователей"); - Результат = Истина; Попытка ПараметрыАдминистрирования = СоединенияИБКлиент.СохраненныеПараметрыАдминистрирования(); @@ -132,23 +131,22 @@ СоединенияИБКлиент.СохранитьПараметрыАдминистрирования(Неопределено); Исключение - Результат = Ложь; + СоединенияИБКлиент.УстановитьПризнакРаботаПользователейЗавершается(Ложь); + ПоказатьОповещениеПользователя(НСтр("ru = 'Завершение работы пользователей'"), + "e1cib/app/Обработка.БлокировкаРаботыПользователей", + НСтр("ru = 'Завершение сеансов не выполнено. Подробности см. в Журнале регистрации.'"), БиблиотекаКартинок.Предупреждение32); + ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СоединенияИБКлиентСервер.СобытиеЖурналаРегистрации(), + "Ошибка", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),, Истина); + Оповестить("ЗавершениеРаботыПользователей", Новый Структура("Статус,КоличествоСеансов", "Ошибка", КоличествоСеансов)); + Возврат; КонецПопытки; - Если Результат Тогда - СоединенияИБКлиент.УстановитьПризнакРаботаПользователейЗавершается(Ложь); - ПоказатьОповещениеПользователя(НСтр("ru = 'Завершение работы пользователей'"), - "e1cib/app/Обработка.БлокировкаРаботыПользователей", - НСтр("ru = 'Завершение сеансов выполнено успешно'"), БиблиотекаКартинок.Информация32); - Оповестить("ЗавершениеРаботыПользователей", Новый Структура("Статус,КоличествоСеансов", "Готово", КоличествоСеансов)); - СоединенияИБКлиент.ЗавершитьРаботуЭтогоСеанса(); - Иначе - СоединенияИБКлиент.УстановитьПризнакРаботаПользователейЗавершается(Ложь); - ПоказатьОповещениеПользователя(НСтр("ru = 'Завершение работы пользователей'"), - "e1cib/app/Обработка.БлокировкаРаботыПользователей", - НСтр("ru = 'Завершение сеансов не выполнено! Подробности см. в Журнале регистрации.'"), БиблиотекаКартинок.Предупреждение32); - Оповестить("ЗавершениеРаботыПользователей", Новый Структура("Статус,КоличествоСеансов", "Ошибка", КоличествоСеансов)); - КонецЕсли; + СоединенияИБКлиент.УстановитьПризнакРаботаПользователейЗавершается(Ложь); + ПоказатьОповещениеПользователя(НСтр("ru = 'Завершение работы пользователей'"), + "e1cib/app/Обработка.БлокировкаРаботыПользователей", + НСтр("ru = 'Завершение сеансов выполнено успешно'"), БиблиотекаКартинок.Информация32); + Оповестить("ЗавершениеРаботыПользователей", Новый Структура("Статус,КоличествоСеансов", "Готово", КоличествоСеансов)); + СоединенияИБКлиент.ЗавершитьРаботуЭтогоСеанса(); КонецПроцедуры diff --git a/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl b/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl index a57bfeec0..6dd2f5d49 100644 --- a/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl @@ -73,6 +73,10 @@ Возврат; КонецЕсли; + Если СтрНайти(ВРег(ПараметрЗапуска), ВРег("ЗавершитьРаботуПользователей")) > 0 Тогда + Возврат; + КонецЕсли; + ПодключитьОбработчикОжидания("КонтрольРежимаЗавершенияРаботыПользователей", 60); КонецПроцедуры @@ -96,7 +100,7 @@ // Обработка параметров запуска программы - // ЗапретитьРаботуПользователей и РазрешитьРаботуПользователей. - Если ЗначениеПараметраЗапуска = Врег("РазрешитьРаботуПользователей") Тогда + Если ЗначениеПараметраЗапуска = ВРег("РазрешитьРаботуПользователей") Тогда Если НЕ СоединенияИБВызовСервера.РазрешитьРаботуПользователей() Тогда ТекстСообщения = НСтр("ru = 'Параметр запуска РазрешитьРаботуПользователей не отработан. Нет прав на администрирование информационной базы.'"); @@ -105,7 +109,7 @@ КонецЕсли; ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СоединенияИБКлиентСервер.СобытиеЖурналаРегистрации(),, - Нстр("ru = 'Выполнен запуск с параметром ""РазрешитьРаботуПользователей"". Работа программы будет завершена.'"), ,Истина); + НСтр("ru = 'Выполнен запуск с параметром ""РазрешитьРаботуПользователей"". Работа программы будет завершена.'"), ,Истина); ЗавершитьРаботуСистемы(Ложь); Возврат Истина; @@ -114,21 +118,17 @@ // в клиент-серверном варианте развертывания системы. Их необходимо передавать в случае, // если текущий пользователь не является администратором ИБ. // См. использование в процедуре ЗавершитьРаботуПользователей(). - ИначеЕсли ЗначениеПараметраЗапуска = Врег("ЗавершитьРаботуПользователей") Тогда + ИначеЕсли ЗначениеПараметраЗапуска = ВРег("ЗавершитьРаботуПользователей") Тогда - // Поскольку блокировка еще не установлена, то при входе в систему - // для данного пользователя был подключен обработчик ожидания завершения работы. - // Отключаем его. Так как для этого пользователя подключается специализированный обработчики ожидания - // "ЗавершитьРаботуПользователей", который ориентирован на то, что данный пользователь - // должен быть отключен последним. - ОтключитьОбработчикОжидания("КонтрольРежимаЗавершенияРаботыПользователей"); - - Если НЕ СоединенияИБВызовСервера.УстановитьБлокировкуСоединений() Тогда + Если Не СоединенияИБВызовСервера.УстановитьБлокировкуСоединений() Тогда ТекстСообщения = НСтр("ru = 'Параметр запуска ЗавершитьРаботуПользователей не отработан. Нет прав на администрирование информационной базы.'"); ПоказатьПредупреждение(,ТекстСообщения); Возврат Ложь; КонецЕсли; + // Если выполнен запуск с ключом, то нужно зачитать параметры администрирования кластера. + ЗаполнитьПараметрыАдминистрированияКластера(ПараметрыЗапуска); + ПодключитьОбработчикОжидания("ЗавершитьРаботуПользователей", 60); ЗавершитьРаботуПользователей(); Возврат Ложь; // Продолжить запуск программы. @@ -240,6 +240,17 @@ КонецПроцедуры +// Переопределяет стандартное предупреждение открытием произвольной формы активных пользователей. +// +// Параметры: +// ИмяФормы - Строка (возвращаемое значение). +// +Процедура ПриОпределенииФормыАктивныхПользователей(ИмяФормы) Экспорт + + ИмяФормы = "Обработка.АктивныеПользователи.Форма.АктивныеПользователи"; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -263,17 +274,6 @@ КонецПроцедуры -// Переопределяет стандартное предупреждение открытием произвольной формы активных пользователей. -// -// Параметры: -// ИмяФормы - Строка (возвращаемое значение). -// -Процедура ПриОпределенииФормыАктивныхПользователей(ИмяФормы) Экспорт - - ИмяФормы = "Обработка.АктивныеПользователи.Форма.АктивныеПользователи"; - -КонецПроцедуры - /////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистемы БазоваяФункциональность. @@ -287,7 +287,7 @@ КонецФункции -Функция ЗавершитьВсеСеансыКромеТекущего() Экспорт +Функция ЗавершитьВсеСеансыКромеТекущего() ПараметрыЗавершенияРаботыПользователей = ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыЗавершенияРаботыПользователей"]; @@ -324,6 +324,21 @@ КонецПроцедуры +Процедура ЗаполнитьПараметрыАдминистрированияКластера(ПараметрыЗапуска) + ПараметрыАдминистрирования = СоединенияИБВызовСервера.ПараметрыАдминистрирования(); + + КоличествоПараметров = ПараметрыЗапуска.Количество(); + Если КоличествоПараметров > 1 Тогда + ПараметрыАдминистрирования.ИмяАдминистратораКластера = ПараметрыЗапуска[1]; + КонецЕсли; + + Если КоличествоПараметров > 2 Тогда + ПараметрыАдминистрирования.ПарольАдминистратораКластера = ПараметрыЗапуска[2]; + КонецЕсли; + СохранитьПараметрыАдминистрирования(ПараметрыАдминистрирования); + +КонецПроцедуры + /////////////////////////////////////////////////////////////////////////////// // Обработчики оповещений. diff --git a/SSL/src/CommonModules/СоединенияИБКлиентСервер/Module.bsl b/SSL/src/CommonModules/СоединенияИБКлиентСервер/Module.bsl index f0c6c0b31..06fb8c3b6 100644 --- a/SSL/src/CommonModules/СоединенияИБКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБКлиентСервер/Module.bsl @@ -23,7 +23,7 @@ СтрокаСоединения = ПолучитьСтрокуСоединенияИнформационнойБазы(ПортКластераСерверов); - ПозицияПоиска = СтрНайти(Врег(СтрокаСоединения), "FILE="); + ПозицияПоиска = СтрНайти(ВРег(СтрокаСоединения), "FILE="); Если ПозицияПоиска = 1 Тогда // файловая ИБ @@ -33,7 +33,7 @@ Иначе ПризнакФайловогоРежима = Ложь; - ПозицияПоиска = СтрНайти(Врег(СтрокаСоединения), "SRVR="); + ПозицияПоиска = СтрНайти(ВРег(СтрокаСоединения), "SRVR="); Если НЕ (ПозицияПоиска = 1) Тогда Возврат Неопределено; @@ -48,7 +48,7 @@ СтрокаСоединения = Сред(СтрокаСоединения, ПозицияТочкиСЗапятой + 1); // позиция имени сервера - ПозицияПоиска = СтрНайти(Врег(СтрокаСоединения), "REF="); + ПозицияПоиска = СтрНайти(ВРег(СтрокаСоединения), "REF="); Если НЕ (ПозицияПоиска = 1) Тогда Возврат Неопределено; @@ -111,7 +111,7 @@ ПодстрокиСтрокиСоединения = СтрРазделить(Результат, ";"); ИмяСервера = СтроковыеФункцииКлиентСервер.СократитьДвойныеКавычки(Сред(ПодстрокиСтрокиСоединения[0], 7)); ИмяИБ = СтроковыеФункцииКлиентСервер.СократитьДвойныеКавычки(Сред(ПодстрокиСтрокиСоединения[1], 6)); - ПортКластера = ?(Найти(ИмяСервера, ":") > 0, "", ":" + Формат(ПортКластераСерверов, "ЧГ=0")); + ПортКластера = ?(СтрНайти(ИмяСервера, ":") > 0, "", ":" + Формат(ПортКластераСерверов, "ЧГ=0")); Результат = "Srvr=""%1%2"";Ref=""%3"";"; Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Результат, ИмяСервера, ПортКластера, ИмяИБ); diff --git a/SSL/src/CommonModules/СоединенияИБПереопределяемый/Module.bsl b/SSL/src/CommonModules/СоединенияИБПереопределяемый/Module.bsl new file mode 100644 index 000000000..2da52d10f --- /dev/null +++ b/SSL/src/CommonModules/СоединенияИБПереопределяемый/Module.bsl @@ -0,0 +1,18 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Завершение работы пользователей". +// +//////////////////////////////////////////////////////////////////////////////// + +#Область ПрограммныйИнтерфейс + +// Позволяет модифицировать параметры блокировки сеансов. +// +// Параметры: +// ПараметрыБлокировкиСеансов - Структура - См. описание в процедуре СоединенияИБ.ПараметрыБлокировкиСеансов. +// +Процедура ПриОпределенииПараметровБлокировкиСеансов(ПараметрыБлокировкиСеансов) Экспорт + +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/CommonModules/СоединенияИБПереопределяемый/СоединенияИБПереопределяемый.mdo b/SSL/src/CommonModules/СоединенияИБПереопределяемый/СоединенияИБПереопределяемый.mdo new file mode 100644 index 000000000..66eb9d8c6 --- /dev/null +++ b/SSL/src/CommonModules/СоединенияИБПереопределяемый/СоединенияИБПереопределяемый.mdo @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="49e21b87-beae-4640-a497-ef468da0cbbc"> + <name>СоединенияИБПереопределяемый</name> + <synonym> + <key>ru</key> + <value>Соединения ИБ переопределяемый</value> + </synonym> + <server>true</server> + <externalConnection>true</externalConnection> + <clientOrdinaryApplication>true</clientOrdinaryApplication> +</mdclass:CommonModule> diff --git a/SSL/src/CommonModules/СообщенияВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/СообщенияВМоделиСервиса/Module.bsl index c8a4fde87..fbb9321d2 100644 --- a/SSL/src/CommonModules/СообщенияВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/СообщенияВМоделиСервиса/Module.bsl @@ -125,7 +125,7 @@ // НетипизированноеТело - Строка - нетипизированное тело сообщения. // // Возвращаемое значение: -// {http://www.1c.ru/SaaS/Messages}Message - сообщение +// {http://www.1c.ru/SaaS/Messages}Message - сообщение. // Функция ПрочитатьСообщениеИзНетипизированногоТела(Знач НетипизированноеТело) Экспорт @@ -239,7 +239,7 @@ #КонецОбласти -#Область СлужебныеПроцедурыИФункции +#Область СлужебныйПрограммныйИнтерфейс // Обработчик события перед отправкой сообщения. // Обработчик данного события вызывается перед запись сообщения для последующей отправки. @@ -276,6 +276,10 @@ КонецПроцедуры +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + // Обработчик события при отправке сообщения. // Обработчик данного события вызывается перед помещением сообщения в XML-поток. // Обработчик вызывается для каждого отправляемого сообщения. @@ -425,7 +429,7 @@ // Возвращаемое значение: // ОбъектXDTO, сообщение, транслированное в версию ИБ-получателя. // -Процедура ТранслироватьСообщениеВВерсиюКорреспондентаПриНеобходимости(Сообщение, Знач ИнформацияПодключения, Знач ПредставлениеПолучателя) Экспорт +Процедура ТранслироватьСообщениеВВерсиюКорреспондентаПриНеобходимости(Сообщение, Знач ИнформацияПодключения, Знач ПредставлениеПолучателя) ИнтерфейсСообщения = ТрансляцияXDTOСлужебный.ПолучитьИнтерфейсСообщения(Сообщение); Если ИнтерфейсСообщения = Неопределено Тогда diff --git a/SSL/src/CommonModules/СообщенияПоставляемыхДанныхОбработчикСообщения/Module.bsl b/SSL/src/CommonModules/СообщенияПоставляемыхДанныхОбработчикСообщения/Module.bsl index c2f54bb0e..282a6e09b 100644 --- a/SSL/src/CommonModules/СообщенияПоставляемыхДанныхОбработчикСообщения/Module.bsl +++ b/SSL/src/CommonModules/СообщенияПоставляемыхДанныхОбработчикСообщения/Module.bsl @@ -3,6 +3,39 @@ // //////////////////////////////////////////////////////////////////////////////// +#Область ПрограммныйИнтерфейс + +// Запланировать загрузку данных, соответствующих дескриптору. +// +// Параметры: +// Дескриптор - ОбъектXDTO Descriptor. +// +Процедура ЗапланироватьЗагрузкуДанных(Знач Дескриптор) Экспорт + Перем ДескрипторXML, ПараметрыМетода; + + Если Дескриптор.RecommendedUpdateDate = Неопределено Тогда + Дескриптор.RecommendedUpdateDate = ТекущаяУниверсальнаяДата(); + КонецЕсли; + + ДескрипторXML = СериализоватьXDTO(Дескриптор); + + ПараметрыМетода = Новый Массив; + ПараметрыМетода.Добавить(ДескрипторXML); + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("ИмяМетода" , "СообщенияПоставляемыхДанныхОбработчикСообщения.ЗагрузитьДанные"); + ПараметрыЗадания.Вставить("Параметры" , ПараметрыМетода); + ПараметрыЗадания.Вставить("ОбластьДанных", -1); + ПараметрыЗадания.Вставить("ЗапланированныйМоментЗапуска", Дескриптор.RecommendedUpdateDate); + ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", 3); + + УстановитьПривилегированныйРежим(Истина); + ОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); + +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Получает список обработчиков сообщений, которые обрабатывает данная подсистема. @@ -46,7 +79,7 @@ // Обрабатывает новые данные. Вызывается из ОбработатьСообщение и из ПоставляемыеДанные.ЗагрузитьИОбработатьДанные. // // Параметры: -// Дескриптор - ОбъектXDTO Descriptor +// Дескриптор - ОбъектXDTO Descriptor. Процедура ОбработатьНовыйДескриптор(Знач Дескриптор) Экспорт Загружать = Ложь; @@ -84,35 +117,6 @@ КонецПроцедуры -// Запланировать загрузку данных, соответствующих дескриптору. -// -// Параметры: -// Дескриптор - ОбъектXDTO Descriptor. -// -Процедура ЗапланироватьЗагрузкуДанных(Знач Дескриптор) Экспорт - Перем ДескрипторXML, ПараметрыМетода; - - Если Дескриптор.RecommendedUpdateDate = Неопределено Тогда - Дескриптор.RecommendedUpdateDate = ТекущаяУниверсальнаяДата(); - КонецЕсли; - - ДескрипторXML = СериализоватьXDTO(Дескриптор); - - ПараметрыМетода = Новый Массив; - ПараметрыМетода.Добавить(ДескрипторXML); - - ПараметрыЗадания = Новый Структура; - ПараметрыЗадания.Вставить("ИмяМетода" , "СообщенияПоставляемыхДанныхОбработчикСообщения.ЗагрузитьДанные"); - ПараметрыЗадания.Вставить("Параметры" , ПараметрыМетода); - ПараметрыЗадания.Вставить("ОбластьДанных", -1); - ПараметрыЗадания.Вставить("ЗапланированныйМоментЗапуска", Дескриптор.RecommendedUpdateDate); - ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", 3); - - УстановитьПривилегированныйРежим(Истина); - ОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); - -КонецПроцедуры - // Произвести загрузку данных, соответствующих дескриптору. // // Параметры: diff --git a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияРеализация/Module.bsl b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияРеализация/Module.bsl index ec45c1c61..e2729a801 100644 --- a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияРеализация/Module.bsl +++ b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияРеализация/Module.bsl @@ -396,11 +396,12 @@ ОбновитьПараметрыТекущейОбластиДанных(ПредставлениеОбластиДанных, ЧасовойПоясОбластиДанных); КонецПроцедуры + // Обработка входящих сообщений с типом http://www.1c.ru/SaaS/RemoteAdministration/App/a.b.c.d}SetFullControl. // // Параметры: // ИдентификаторПользователяСервиса - УникальныйИдентификатор, -// ДоступРазрешен - булево, флаг предоставления доступа пользователю к области данных, +// ДоступРазрешен - булево, флаг предоставления доступа пользователю к области данных. // Процедура УстановитьПолныеПраваОбластиДанных(Знач ИдентификаторПользователяСервиса, Знач ДоступРазрешен) Экспорт @@ -431,7 +432,7 @@ КонецЕсли; КонецЕсли; - ПользователиСлужебный.ЗаписатьПользователяИнформационнойБазы(ПользовательИБ); + ПользователиСлужебный.ЗаписатьПользователяИнформационнойБазы(ПользовательИБ, ПользовательОбластиДанных); КонецЕсли; @@ -446,7 +447,7 @@ // Обработка входящих сообщений с типом http://www.1c.ru/SaaS/RemoteAdministration/App/a.b.c.d}SetDefaultUserRights. // // Параметры: -// ИдентификаторПользователяСервиса - УникальныйИдентификатор +// ИдентификаторПользователяСервиса - УникальныйИдентификатор. // Процедура УстановитьПраваПользователяПоУмолчанию(Знач ИдентификаторПользователяСервиса) Экспорт @@ -618,6 +619,8 @@ ОписаниеПользователяИБ.Вставить("Действие", "Записать"); ПользовательОбъект.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ); + ПользовательОбъект.ДополнительныеСвойства.Вставить("СозданиеАдминистратора", + НСтр("ru = 'Создание администратора области данных из менеджера сервиса.'")); ПользовательОбъект.ДополнительныеСвойства.Вставить("ОбработкаСообщенияКаналаУдаленногоАдминистрирования"); ПользовательОбъект.Записать(); @@ -656,6 +659,26 @@ КонецПроцедуры +// Генерирует код узла плана обмена для заданной области данных. +// +// Параметры: +// НомерОбласти - Число - Значение разделителя. +// +// Возвращаемое значение: +// Строка - Код узла плана обмена для заданной области. +// +Функция КодУзлаПланаОбменаВСервисе(Знач НомерОбласти) Экспорт + + Если ТипЗнч(НомерОбласти) <> Тип("Число") Тогда + ВызватьИсключение НСтр("ru = 'Неправильный тип параметра номер [1].'"); + КонецЕсли; + + Результат = "S0[НомерОбласти]"; + + Возврат СтрЗаменить(Результат, "[НомерОбласти]", Формат(НомерОбласти, "ЧЦ=7; ЧВН=; ЧГ=0")); + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -882,26 +905,6 @@ КонецПроцедуры -// Генерирует код узла плана обмена для заданной области данных. -// -// Параметры: -// НомерОбласти - Число - Значение разделителя. -// -// Возвращаемое значение: -// Строка - Код узла плана обмена для заданной области. -// -Функция КодУзлаПланаОбменаВСервисе(Знач НомерОбласти) Экспорт - - Если ТипЗнч(НомерОбласти) <> Тип("Число") Тогда - ВызватьИсключение НСтр("ru = 'Неправильный тип параметра номер [1].'"); - КонецЕсли; - - Результат = "S0[НомерОбласти]"; - - Возврат СтрЗаменить(Результат, "[НомерОбласти]", Формат(НомерОбласти, "ЧЦ=7; ЧВН=; ЧГ=0")); - -КонецФункции - Функция СобытиеЖурналаРегистрацииУдаленноеАдминистрирование() Возврат НСтр("ru = 'Удаленное администрирование в модели сервиса.Установить параметры'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl index 4e06b60d3..aa9c4edd7 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl @@ -3,7 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -#Область СлужебныйПрограммныйИнтерфейс +#Область ПрограммныйИнтерфейс // Записать настройку подтверждения завершения работы программы // для текущего пользователя. @@ -12,15 +12,17 @@ // Значение - Булево - значение настройки. // Процедура СохранитьНастройкуПодтвержденияПриЗавершенииПрограммы(Значение) Экспорт - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ОбщиеНастройкиПользователя", "ЗапрашиватьПодтверждениеПриЗавершенииПрограммы", Значение); - КонецПроцедуры +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + // Возвращает структуру параметров, необходимых для работы клиентского кода // при запуске конфигурации, т.е. в обработчиках событий. // - ПередНачаломРаботыСистемы, -// - ПриНачалеРаботыСистемы +// - ПриНачалеРаботыСистемы. // Функция ПараметрыРаботыКлиентаПриЗапуске(Параметры) Экспорт @@ -46,6 +48,7 @@ ПараметрыКлиента.Вставить("ЭтоLinuxКлиент", Параметры.ЭтоLinuxКлиент); ПараметрыКлиента.Вставить("ИспользуемыйКлиент", Параметры.ИспользуемыйКлиент); ПараметрыКлиента.Вставить("ОперативнаяПамять", Параметры.ОперативнаяПамять); + ПараметрыКлиента.Вставить("КаталогПрограммы", Параметры.КаталогПрограммы); ПараметрыСеанса.ПараметрыКлиентаНаСервере = Новый ФиксированноеСоответствие(ПараметрыКлиента); Если СтрНайти(НРег(Параметры.ПараметрЗапуска), НРег("ЗапуститьОбновлениеИнформационнойБазы")) > 0 Тогда @@ -80,6 +83,8 @@ Возврат ФиксированныеПараметры; КонецЕсли; + ПользователиСлужебный.ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры, Неопределено, Ложь); + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиентаПриЗапуске"); @@ -186,24 +191,6 @@ КонецФункции -// Возвращает массив имен клиентских модулей. -Функция МассивИменКлиентскихМодулей() Экспорт - - КлиентскиеМодули = Новый Массив; - - Для каждого ОбщийМодуль Из Метаданные.ОбщиеМодули Цикл - Если ОбщийМодуль.Глобальный Тогда - Продолжить; - КонецЕсли; - Если ОбщийМодуль.КлиентУправляемоеПриложение Тогда - КлиентскиеМодули.Добавить(ОбщийМодуль.Имя); - КонецЕсли; - КонецЦикла; - - Возврат КлиентскиеМодули; - -КонецФункции - #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -265,23 +252,6 @@ КонецПроцедуры -// Возвращает Ложь, если установка монопольного режима возможна. -Функция ОшибкаУстановкиМонопольногоРежима() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Отказ = Ложь; - Попытка - УстановитьМонопольныйРежим(Истина); - УстановитьМонопольныйРежим(Ложь); - Исключение - Отказ = Истина - КонецПопытки; - - Возврат Отказ; - -КонецФункции - // Только для внутреннего использования. Функция ЗаписатьОшибкуВЖурналРегистрацииПриЗапускеИлиЗавершении(ПрекратитьРаботу, Знач Событие, Знач ТекстОшибки) Экспорт diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыГлобальный/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыГлобальный/Module.bsl index 48c42ac91..11ff54230 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыГлобальный/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыГлобальный/Module.bsl @@ -36,6 +36,12 @@ МодульИнформацияПриЗапускеКлиент.Показать(); КонецПроцедуры +// Вызывается после запуска конфигурации, открывает окно предупреждения безопасности. +Процедура ПоказатьПредупреждениеБезопасностиПослеЗапуска() Экспорт + МодульПользователиСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПользователиСлужебныйКлиент"); + МодульПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасности(); +КонецПроцедуры + // Показывает сообщение пользователю о недостаточном объеме оперативной памяти. Процедура ПоказатьРекомендациюПоОбъемуОперативнойПамяти() Экспорт СтандартныеПодсистемыКлиент.ОповеститьОНехваткеПамяти(); diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl index a7ba72dd6..6fc812551 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl @@ -217,7 +217,21 @@ Параметры.Вставить("ОбработкаПродолжения", Новый ОписаниеОповещения( "ДействияПередНачаломРаботыСистемыПослеПроверкиВерсииПлатформы", ЭтотОбъект, Параметры)); - + + Если ОтключенаЛогикаНачалаРаботыСистемы() Тогда + СкрытьРабочийСтолПриНачалеРаботыСистемы(); + Возврат; + КонецЕсли; + + Попытка + ПользователиСлужебныйКлиент.ПередНачаломРаботыСистемы(Параметры); + Исключение + ОбработатьОшибкуПриЗапускеИлиЗавершении(Параметры, ИнформацияОбОшибке(), "Запуск", Истина); + КонецПопытки; + Если ИнтерактивнаяОбработкаПередНачаломРаботыСистемы(Параметры) Тогда + Возврат; + КонецЕсли; + Попытка ОбновлениеИнформационнойБазыКлиент.ПередНачаломРаботыСистемы(Параметры); Исключение @@ -261,6 +275,10 @@ // Процедура ПриНачалеРаботыСистемы(Знач ОповещениеЗавершения = Неопределено, НепрерывноеВыполнение = Истина) Экспорт + Если ОтключенаЛогикаНачалаРаботыСистемы() Тогда + Возврат; + КонецЕсли; + Если ОповещениеЗавершения <> Неопределено Тогда ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("СтандартныеПодсистемыКлиент.ПриНачалеРаботыСистемы", "ОповещениеЗавершения", ОповещениеЗавершения, Тип("ОписаниеОповещения")); @@ -332,6 +350,10 @@ // Процедура ПередЗавершениемРаботыСистемы(Отказ = Ложь, Знач ОповещениеЗавершения = Неопределено) Экспорт + Если ОтключенаЛогикаНачалаРаботыСистемы() Тогда + Возврат; + КонецЕсли; + ПараметрыПриЗапускеИЗавершенииПрограммы = ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыПриЗапускеИЗавершенииПрограммы"]; Если ПараметрыПриЗапускеИЗавершенииПрограммы.Свойство("СкрытьРабочийСтолПриНачалеРаботыСистемы") Тогда @@ -403,7 +425,7 @@ // Возвращает структуру параметров, необходимых для работы // конфигурации на клиенте при завершении, т.е. в обработчиках событий. // - ПередЗавершениемРаботыСистемы, -// - ПриЗавершенииРаботыСистемы +// - ПриЗавершенииРаботыСистемы. // // Возвращаемое значение: // ФиксированнаяСтруктура - структура параметров работы клиента при завершении. @@ -421,39 +443,6 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Вывод результата выполнения. - -// Выводит результат работы прикладного кода. -// -// Параметры: -// Форма - УправляемаяФорма - Форма, для которой требуется вывод. -// Результат - Структура - Результат выполнения операции, который необходимо вывести. -// * Шаги - СписокЗначений - Информация, которую необходимо вывести на клиенте. -// Шаги добавляются только при помощи процедур: -// ** СтандартныеПодсистемыКлиентСервер.ОповеститьДинамическиеСписки() -// ** СтандартныеПодсистемыКлиентСервер.ОповеститьОткрытыеФормы() -// ** СтандартныеПодсистемыКлиентСервер.РазвернутьУзлыДерева() -// ** СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение() -// ** СтандартныеПодсистемыКлиентСервер.ВывестиСообщение() -// ** СтандартныеПодсистемыКлиентСервер.ВывестиОповещение() -// ** СтандартныеПодсистемыКлиентСервер.ВывестиФорму() -// Ручное редактирование коллекции Шаги не рекомендуется. -// ОбработчикЗавершения - ОписаниеОповещения - Описание процедуры, -// которая будет вызвана после завершения показа (со значением Неопределено). -// -Процедура ПоказатьРезультатВыполнения(Форма, Результат, ОбработчикЗавершения = Неопределено) Экспорт - Сценарий = Новый Структура; - Сценарий.Вставить("Форма", Форма); - Сценарий.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); - Сценарий.Вставить("Шаги", ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Результат, "Шаги")); - Если ТипЗнч(Сценарий.Шаги) = Тип("СписокЗначений") Тогда - ЗапуститьСценарий(Сценарий); - Иначе - ВернутьРезультат(Сценарий); - КонецЕсли; -КонецПроцедуры - #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -720,7 +709,7 @@ // См. также: // СтандартныеПодсистемыВызовСервера.РасчетЯчеек(). // -Функция ВыделенныеОбласти(ТабличныйДокумент) Экспорт +Функция ВыделенныеОбласти(ТабличныйДокумент) Результат = Новый Массив; Для Каждого ВыделеннаяОбласть Из ТабличныйДокумент.ВыделенныеОбласти Цикл Если ТипЗнч(ВыделеннаяОбласть) <> Тип("ОбластьЯчеекТабличногоДокумента") Тогда @@ -766,6 +755,116 @@ //////////////////////////////////////////////////////////////////////////////// // Вывод результата выполнения. +// Выводит результат работы прикладного кода. +// +// Параметры: +// Форма - УправляемаяФорма - Форма, для которой требуется вывод. +// Результат - Структура - Результат выполнения операции, который необходимо вывести. +// * Шаги - СписокЗначений - Информация, которую необходимо вывести на клиенте. +// Шаги добавляются только при помощи процедур: +// ** СтандартныеПодсистемыКлиентСервер.ОповеститьДинамическиеСписки() +// ** СтандартныеПодсистемыКлиентСервер.РазвернутьУзлыДерева() +// ** СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение() +// ** СтандартныеПодсистемыКлиентСервер.ВывестиСообщение() +// ** СтандартныеПодсистемыКлиентСервер.ВывестиОповещение() +// ** СтандартныеПодсистемыКлиентСервер.ВывестиФорму() +// Ручное редактирование коллекции Шаги не рекомендуется. +// ОбработчикЗавершения - ОписаниеОповещения - Описание процедуры, +// которая будет вызвана после завершения показа (со значением Неопределено). +// +Процедура ПоказатьРезультатВыполнения(Форма, Результат, ОбработчикЗавершения = Неопределено) Экспорт + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Результат, "Шаги")); + Сценарий.Вставить("Форма", Форма); + Сценарий.Вставить("ОбработчикЗавершения", ОбработчикЗавершения); + Если ТипЗнч(Сценарий.Шаги) <> Тип("СписокЗначений") Тогда + ВернутьРезультат(Сценарий); + Возврат; + КонецЕсли; + Сценарий.Вставить("КоличествоШагов", Сценарий.Шаги.Количество()); + Сценарий.Вставить("НомерШага", 0); + Сценарий.Вставить("ТекущийШаг", Неопределено); + Сценарий.Вставить("Параметры", Неопределено); + Сценарий.Вставить("МестоОстановки", Неопределено); + Сценарий.Вставить("Результат", Неопределено); + + ВыполнитьСценарий(Сценарий); +КонецПроцедуры + +// Выводит предупреждение или текст ошибки. +// +// Параметры: +// Форма - УправляемаяФорма - Форма, для которой требуется вывод. +// ПараметрыПредупреждения - Структура - Параметры предупреждения. +// * Текст - Строка - Текст предупреждения. +// * Подробно - Строка - Необязательный. Тексты ошибок, которые при желании может просмотреть пользователь. +// * Заголовок - Строка - Необязательный. Заголовок окна. +// * ПутьКРеквизитуФормы - Строка - Необязательный. Путь к реквизиту формы, значение которого вызывало ошибку. +// ОбработчикЗавершения - ОписаниеОповещения - Описание процедуры, +// которая будет вызвана после завершения показа (со значением Неопределено). +// +Процедура ВывестиПредупреждение(Форма, ПараметрыПредупреждения, ОбработчикЗавершения = Неопределено) Экспорт + Контекст = Новый Структура("Текст, Подробно, Заголовок, ПутьКРеквизитуФормы, Форма, ОбработчикЗавершения"); + Контекст.Форма = Форма; + Контекст.ОбработчикЗавершения = ОбработчикЗавершения; + Если ПараметрыПредупреждения <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(Контекст, ПараметрыПредупреждения); + КонецЕсли; + + Если Не ЗначениеЗаполнено(Контекст.Текст) Тогда + ВывестиПредупреждениеЗавершение(Неопределено, Контекст); + Возврат; + КонецЕсли; + Если Контекст.Заголовок = Неопределено Тогда + Контекст.Заголовок = ""; + КонецЕсли; + + КнопкаПоУмолчанию = КодВозвратаДиалога.ОК; + + Кнопки = Новый СписокЗначений; + Если ЗначениеЗаполнено(Контекст.Подробно) Тогда + КнопкаПоУмолчанию = 1; + Кнопки.Добавить(1, НСтр("ru = 'Подробнее...'")); + КонецЕсли; + Если ТипЗнч(Форма) = Тип("УправляемаяФорма") И ЗначениеЗаполнено(Контекст.ПутьКРеквизитуФормы) Тогда + Кнопки.Добавить(2, НСтр("ru = 'Перейти к реквизиту'")); + КонецЕсли; + Кнопки.Добавить(КодВозвратаДиалога.ОК, НСтр("ru = 'Закрыть'")); + + Обработчик = Новый ОписаниеОповещения("ВывестиПредупреждениеПродолжение", ЭтотОбъект, Контекст); + ПоказатьВопрос(Обработчик, Контекст.Текст, Кнопки, , КнопкаПоУмолчанию, Контекст.Заголовок); +КонецПроцедуры + +// Продолжение процедуры ВывестиПредупреждение. +Процедура ВывестиПредупреждениеПродолжение(Ответ, Контекст) Экспорт + Если Ответ = 1 Тогда + + Обработчик = Новый ОписаниеОповещения("ВывестиПредупреждениеЗавершение", ЭтотОбъект, Контекст); + ПолныйТекст = Строка(Контекст.Текст) + Символы.ПС + Символы.ПС + Контекст.Подробно; + ПоказатьПодробнуюИнформацию(Обработчик, ПолныйТекст, Контекст.Заголовок); + + Возврат; + + ИначеЕсли Ответ = 2 Тогда + + Сообщение = Новый СообщениеПользователю; + Сообщение.ИдентификаторНазначения = Контекст.Форма.УникальныйИдентификатор; + Сообщение.Текст = Контекст.Текст; + Сообщение.Поле = Контекст.ПутьКРеквизитуФормы; + Сообщение.Сообщить(); + + КонецЕсли; + + ВывестиПредупреждениеЗавершение(Неопределено, Контекст); +КонецПроцедуры + +// Продолжение процедуры ВывестиПредупреждение. +Процедура ВывестиПредупреждениеЗавершение(Ответ, Контекст) Экспорт + Если ТипЗнч(Контекст.ОбработчикЗавершения) = Тип("ОписаниеОповещения") Тогда + ВыполнитьОбработкуОповещения(Контекст.ОбработчикЗавершения, Неопределено); + КонецЕсли; +КонецПроцедуры + // Выводит текст, который пользователь может скопировать. // // Параметры: @@ -794,6 +893,31 @@ ПоказатьВопросПользователю(Обработчик, Текст, Кнопки, НастройкиДиалога); КонецПроцедуры +// Разворачивает узлы дерева. +// +// Параметры: +// Форма - УправляемаяФорма - Форма, для которой требуется вывод. +// РазворачиваемыйУзел - Структура - Параметры разворачивания. +// * ИмяТаблицы - Строка - Имя таблицы формы (дерева значений), в которой требуется развернуть узел. +// * Идентификатор - Произвольный - Необязательный. Идентификатор строки дерева, которую требуется развернуть. +// Если указано "*", то будут развернуты все узлы верхнего уровня. +// Если указано Неопределено, то строки дерева развернуты не будут. +// Значение по умолчанию: "*". +// * СПодчиненными - Булево - Необязательный. Раскрывать ли подчиненные узлы. +// Значение по умолчанию: Ложь (не раскрывать подчиненные узлы). +// +Процедура РазвернутьУзлыДерева(Форма, РазворачиваемыйУзел) Экспорт + ТаблицаЭлемент = Форма.Элементы[РазворачиваемыйУзел.ИмяТаблицы]; + Если РазворачиваемыйУзел.Идентификатор = "*" Тогда + Узлы = Форма[РазворачиваемыйУзел.ИмяТаблицы].ПолучитьЭлементы(); + Для Каждого Узел Из Узлы Цикл + ТаблицаЭлемент.Развернуть(Узел.ПолучитьИдентификатор(), РазворачиваемыйУзел.СПодчиненными); + КонецЦикла; + Иначе + ТаблицаЭлемент.Развернуть(РазворачиваемыйУзел.Идентификатор, РазворачиваемыйУзел.СПодчиненными); + КонецЕсли; +КонецПроцедуры + // Открывает форму списка объекта с позиционированием на объекте. // // Параметры: @@ -1012,15 +1136,6 @@ Возврат; КонецЕсли; - Попытка - УстановитьРасширенныйЗаголовокПриложения(Истина); // Для вспомогательных окон. - Исключение - ОбработатьОшибкуПриЗапускеИлиЗавершении(Параметры, ИнформацияОбОшибке(), "Запуск", Истина); - КонецПопытки; - Если ИнтерактивнаяОбработкаПередНачаломРаботыСистемы(Параметры) Тогда - Возврат; - КонецЕсли; - Параметры.Вставить("ОбработкаПродолжения", Новый ОписаниеОповещения( "ДействияПередНачаломРаботыСистемыПослеОбработкиВходаСРазблокирующимКодом", ЭтотОбъект, Параметры)); @@ -1266,6 +1381,15 @@ КонецЕсли; КонецЦикла; + Попытка + ПользователиСлужебныйКлиент.ПослеНачалаРаботыСистемы(); + Исключение + ОбработатьОшибкуПриЗапускеИлиЗавершении(Параметры, ИнформацияОбОшибке(), "Запуск"); + КонецПопытки; + Если ИнтерактивнаяОбработкаПриНачалеРаботыСистемы(Параметры) Тогда + Возврат; + КонецЕсли; + Параметры.Вставить("ОбработкаПродолжения", Параметры.ОбработкаЗавершения); Попытка ОбщегоНазначенияКлиентПереопределяемый.ПослеНачалаРаботыСистемы(); @@ -1725,45 +1849,37 @@ Параметры = Новый Структура; СтандартныеПодсистемыВызовСервера.ПриВыполненииСтандартныхПериодическихПроверокНаСервере(Параметры); - - Модули = Новый Массив; + Контекст = Новый Структура("Параметры", Параметры); // СтандартныеПодсистемы.БазоваяФункциональность - Модули.Добавить(КонтрольДинамическогоОбновленияКонфигурацииСлужебныйКлиент); + ОбработкаПродолжения = Новый ОписаниеОповещения( + "ПриВыполненииСтандартныхПериодическихПроверокПодсистемаПользователи", ЭтотОбъект, Контекст); + + КонтрольДинамическогоОбновленияКонфигурацииСлужебныйКлиент.ПриВыполненииСтандартныхПериодическихПроверок( + Контекст.Параметры, ОбработкаПродолжения); + +КонецПроцедуры + +// Продолжение процедуры ПриВыполненииСтандартныхПериодическихПроверок. +Процедура ПриВыполненииСтандартныхПериодическихПроверокПодсистемаПользователи(Результат, Контекст) Экспорт + // Конец СтандартныеПодсистемы.БазоваяФункциональность // СтандартныеПодсистемы.Пользователи - Модули.Добавить(ПользователиСлужебныйКлиент); + ОбработкаПродолжения = Новый ОписаниеОповещения( + "ПриВыполненииСтандартныхПериодическихПроверокЗавершение", ЭтотОбъект, Контекст); + + ПользователиСлужебныйКлиент.ПриВыполненииСтандартныхПериодическихПроверок( + Контекст.Параметры, ОбработкаПродолжения); + +КонецПроцедуры + +// Продолжение процедуры ПриВыполненииСтандартныхПериодическихПроверок. +Процедура ПриВыполненииСтандартныхПериодическихПроверокЗавершение(Результат, Контекст) Экспорт + // Конец СтандартныеПодсистемы.Пользователи - Контекст = Новый Структура; - Контекст.Вставить("Параметры", Параметры); - Контекст.Вставить("Модули", Модули); - Контекст.Вставить("Индекс", -1); - - ПриВыполненииСтандартныхПериодическихПроверокЦиклНачало(Контекст); - -КонецПроцедуры - -// Продолжение процедуры ПриВыполненииСтандартныхПериодическихПроверок. -Процедура ПриВыполненииСтандартныхПериодическихПроверокЦиклНачало(Контекст) - - Если Контекст.Модули.Количество() <= Контекст.Индекс + 1 Тогда - ПодключитьОбработчикОжиданияСтандартныхПериодическихПроверок(); - Возврат; - КонецЕсли; - Контекст.Индекс = Контекст.Индекс + 1; - Контекст.Вставить("Модуль", Контекст.Модули[Контекст.Индекс]); - - Контекст.Модуль.ПриВыполненииСтандартныхПериодическихПроверок(Контекст.Параметры, Новый ОписаниеОповещения( - "ПриВыполненииСтандартныхПериодическихПроверокЦиклПродолжение", ЭтотОбъект, Контекст)); - -КонецПроцедуры - -// Продолжение процедуры ПриВыполненииСтандартныхПериодическихПроверок. -Процедура ПриВыполненииСтандартныхПериодическихПроверокЦиклПродолжение(Результат, Контекст) Экспорт - - ПриВыполненииСтандартныхПериодическихПроверокЦиклНачало(Контекст); + ПодключитьОбработчикОжиданияСтандартныхПериодическихПроверок(); КонецПроцедуры @@ -2357,20 +2473,6 @@ //////////////////////////////////////////////////////////////////////////////// // Движок сценария по выводу результата выполнения. -// Только для внутреннего использования из процедуры ПоказатьРезультатВыполнения. -Процедура ЗапуститьСценарий(Сценарий) - Сценарий.Вставить("КоличествоШагов", Сценарий.Шаги.Количество()); - Сценарий.Вставить("НомерШага", 0); - - Сценарий.Вставить("ТекущийШаг", Неопределено); - Сценарий.Вставить("Параметры", Неопределено); - Сценарий.Вставить("МестоОстановки", Неопределено); - - Сценарий.Вставить("Результат", Неопределено); - - ВыполнитьСценарий(Сценарий); -КонецПроцедуры - // Только для внутреннего использования. Процедура ВыполнитьСценарий(Сценарий) Пока НайтиСледующийШаг(Сценарий) Цикл @@ -2444,7 +2546,17 @@ Возврат ВывестиСообщение(Сценарий); ИначеЕсли Сценарий.ТекущийШаг = "ВывестиПредупреждение" Тогда - Возврат ВывестиПредупреждение(Сценарий); + + Если Сценарий.МестоОстановки = Неопределено Тогда + Сценарий.МестоОстановки = "ЗаданВопрос"; + ВывестиПредупреждение( + Сценарий.Форма, + Сценарий.Параметры, + Обработчик(Сценарий)); + Возврат Ложь; // Приостановить сценарий + Иначе + Возврат Истина; // Продолжить сценарий. + КонецЕсли; ИначеЕсли Сценарий.ТекущийШаг = "ОповеститьОткрытыеФормы" Тогда Возврат ОповеститьОткрытыеФормы(Сценарий); @@ -2453,7 +2565,8 @@ Возврат ОповеститьДинамическиеСписки(Сценарий); ИначеЕсли Сценарий.ТекущийШаг = "РазвернутьУзлыДерева" Тогда - Возврат РазвернутьУзлыДерева(Сценарий); + РазвернутьУзлыДерева(Сценарий.Форма, Сценарий.Параметры); + Возврат Истина; // Продолжить сценарий. ИначеЕсли Сценарий.ТекущийШаг = "ВывестиФорму" Тогда Возврат ВывестиФорму(Сценарий); @@ -2486,55 +2599,6 @@ Возврат Истина; // Продолжить сценарий. КонецФункции -// Только для внутреннего использования. -Функция ВывестиПредупреждение(Сценарий) - ВыводПредупреждения = Сценарий.Параметры; - Если Сценарий.МестоОстановки = Неопределено Тогда - - КнопкаПоУмолчанию = КодВозвратаДиалога.ОК; - - Кнопки = Новый СписокЗначений; - Если ЗначениеЗаполнено(ВыводПредупреждения.Подробно) Тогда - КнопкаПоУмолчанию = 1; - Кнопки.Добавить(1, НСтр("ru = 'Подробнее...'")); - КонецЕсли; - Если ТипЗнч(Сценарий.Форма) = Тип("УправляемаяФорма") И ЗначениеЗаполнено(ВыводПредупреждения.ПутьКРеквизитуФормы) Тогда - Кнопки.Добавить(2, НСтр("ru = 'Перейти к реквизиту'")); - КонецЕсли; - Кнопки.Добавить(КодВозвратаДиалога.ОК, НСтр("ru = 'Закрыть'")); - - ПоказатьВопрос(Обработчик(Сценарий), ВыводПредупреждения.Текст, Кнопки, , КнопкаПоУмолчанию, ВыводПредупреждения.Заголовок); - Сценарий.МестоОстановки = "ЗаданВопрос"; - Возврат Ложь; // Приостановить сценарий. - - ИначеЕсли Сценарий.МестоОстановки = "ЗаданВопрос" Тогда - - Ответ = Сценарий.Результат; - Если ТипЗнч(Ответ) = Тип("Число") Тогда - Если Ответ = 1 Тогда - - ПолныйТекст = Строка(ВыводПредупреждения.Текст) + Символы.ПС + Символы.ПС + ВыводПредупреждения.Подробно; - ПоказатьПодробнуюИнформацию(Обработчик(Сценарий), ПолныйТекст, ВыводПредупреждения.Заголовок); - - Сценарий.МестоОстановки = "КонецШага"; - Возврат Ложь; // Приостановить сценарий. - - ИначеЕсли Ответ = 2 Тогда - - Сообщение = Новый СообщениеПользователю; - Сообщение.ИдентификаторНазначения = Сценарий.Форма.УникальныйИдентификатор; - Сообщение.Текст = ВыводПредупреждения.Текст; - Сообщение.Поле = ВыводПредупреждения.ПутьКРеквизитуФормы; - Сообщение.Сообщить(); - - КонецЕсли; - КонецЕсли; - - КонецЕсли; - - Возврат Истина; // Продолжить сценарий. -КонецФункции - // Только для внутреннего использования. Функция ОповеститьОткрытыеФормы(Сценарий) ОповещениеФорм = Сценарий.Параметры; @@ -2551,21 +2615,6 @@ Возврат Истина; // Продолжить сценарий. КонецФункции -// Только для внутреннего использования. -Функция РазвернутьУзлыДерева(Сценарий) - РазворачиваемыйУзел = Сценарий.Параметры; - ТаблицаЭлемент = Сценарий.Форма.Элементы[РазворачиваемыйУзел.ИмяТаблицы]; - Если РазворачиваемыйУзел.Идентификатор = "*" Тогда - Узлы = Сценарий.Форма[РазворачиваемыйУзел.ИмяТаблицы].ПолучитьЭлементы(); - Для Каждого Узел Из Узлы Цикл - ТаблицаЭлемент.Развернуть(Узел.ПолучитьИдентификатор(), РазворачиваемыйУзел.СПодчиненными); - КонецЦикла; - Иначе - ТаблицаЭлемент.Развернуть(РазворачиваемыйУзел.Идентификатор, РазворачиваемыйУзел.СПодчиненными); - КонецЕсли; - Возврат Истина; // Продолжить сценарий. -КонецФункции - // Только для внутреннего использования. Функция ВывестиФорму(Сценарий) ВыводФормы = Сценарий.Параметры; @@ -2577,4 +2626,8 @@ Возврат Истина; // Продолжить сценарий. КонецФункции +Функция ОтключенаЛогикаНачалаРаботыСистемы() + Возврат СтрНайти(ПараметрЗапуска, "ОтключитьЛогикуНачалаРаботыСистемы") > 0; +КонецФункции + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl index 1c065a61e..a9e7e0777 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl @@ -8,7 +8,7 @@ // Возвращает структуру параметров, необходимых для работы // конфигурации на клиенте при запуске, т.е. в обработчиках событий. // - ПередНачаломРаботыСистемы, -// - ПриНачалеРаботыСистемы +// - ПриНачалеРаботыСистемы. // // Важно: при запуске недопустимо использовать команды сброса кэша // повторно используемых модулей, иначе запуск может привести @@ -41,8 +41,10 @@ #Если ВебКлиент Тогда ЭтоВебКлиент = Истина; + КаталогПрограммы = ""; #Иначе ЭтоВебКлиент = Ложь; + КаталогПрограммы = КаталогПрограммы(); #КонецЕсли ИспользуемыйКлиент = ""; @@ -72,6 +74,7 @@ Параметры.Вставить("ЭтоLinuxКлиент", ЭтоLinuxКлиент); Параметры.Вставить("ИспользуемыйКлиент", ИспользуемыйКлиент); Параметры.Вставить("СкрытьРабочийСтолПриНачалеРаботыСистемы", Ложь); + Параметры.Вставить("КаталогПрограммы", КаталогПрограммы); СистемнаяИнформация = Новый СистемнаяИнформация; ОперативнаяПамять = Окр(СистемнаяИнформация.ОперативнаяПамять / 1024, 1); @@ -129,21 +132,6 @@ КонецФункции -// Возвращает соответствие имен и клиентских модулей. -Функция ИменаКлиентскихМодулей() Экспорт - - МассивИмен = СтандартныеПодсистемыВызовСервера.МассивИменКлиентскихМодулей(); - - КлиентскиеМодули = Новый Соответствие; - - Для каждого Имя Из МассивИмен Цикл - КлиентскиеМодули.Вставить(Вычислить(Имя), Имя); - КонецЦикла; - - Возврат Новый ФиксированноеСоответствие(КлиентскиеМодули); - -КонецФункции - Функция ТекущийБраузер() Результат = Новый Структура("Название,Версия", "Другой", ""); diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl index e6d523d36..b6424b8f8 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСервер/Module.bsl @@ -3,7 +3,7 @@ // //////////////////////////////////////////////////////////////////////////////// -#Область ПрограммныйИнтерфейс +#Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Регистрация результата работы для вывода на клиенте. @@ -30,24 +30,37 @@ КонецФункции // Добавляет в структуру информацию о типах, которые необходимо обновить в динамических списках. -// Действие выполняется на клиенте после вызова СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(Результат). +// Действие выполняется после вызова процедуры СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(Форма, Результат). +// Для этого структуру Результат следует передать на клиент и передать в соответствующем параметре указанной процедуры. // // Параметры: -// Результат - Структура - См. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). -// СсылкаИлиТипИлиМассив - Массив - Тип или ссылки измененных объектов. +// Результат - Структура - Структура, которая может быть использована для передачи информации на клиент. +// При вызове данного метода в этой структуре будет создан ключ "Шаги": +// * Шаги - СписокЗначений - Необязательный. Список, в который будет добавлена информация для вывода на клиенте. +// Структуру Результат допустимо использовать для хранения параметров вызывающего кода, +// но при этом следует контролировать чтобы вызывающий код не использовал ключ "Шаги", +// поскольку он зарезервирован для хранения и вывода результата выполнения. +// СсылкаИлиТипИлиМассив - Массив - Тип или ссылки измененных объектов, +// которые требуется обновить в динамических списках. +// ИсточникОповещенияФорм - Произвольный - Источник широковещательного оповещения открытых форм. +// Заполняется в случае, если помимо оповещения динамических списков +// также требуется разослать широковещательное оповещение открытых форм с именем события "Запись_<ИмяОбъектаМетаданных>". +// Используется только при вызове с сервера. // -// См. также: -// СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). -// -Процедура ОповеститьДинамическиеСписки(Результат, СсылкаИлиТипИлиМассив) Экспорт +Процедура ОповеститьДинамическиеСписки(Результат, СсылкаИлиТипИлиМассив, ПараметрОповещенияФорм = Неопределено) Экспорт Если СсылкаИлиТипИлиМассив = Неопределено Тогда Возврат; КонецЕсли; // Преобразование оповещения в массив. + МассивТипов = Новый Массив; - ТипЗначения = ТипЗнч(СсылкаИлиТипИлиМассив); - Если ТипЗначения = Тип("Массив") Тогда + ИспользоватьШироковещательноеОповещение = (ПараметрОповещенияФорм <> Неопределено); + Если ИспользоватьШироковещательноеОповещение Тогда + МассивСсылокВРазрезахТипов = Новый Соответствие; + КонецЕсли; + ТипСсылкиИлиТипаИлиМассива = ТипЗнч(СсылкаИлиТипИлиМассив); + Если ТипСсылкиИлиТипаИлиМассива = Тип("Массив") Тогда Для Каждого Элемент Из СсылкаИлиТипИлиМассив Цикл ТипЭлемента = ТипЗнч(Элемент); Если ТипЭлемента = Тип("Тип") Тогда @@ -55,45 +68,49 @@ КонецЕсли; Если МассивТипов.Найти(ТипЭлемента) = Неопределено Тогда МассивТипов.Добавить(ТипЭлемента); + Если ИспользоватьШироковещательноеОповещение Тогда + МассивСсылокВРазрезахТипов.Вставить(ТипЭлемента, Новый Массив); + КонецЕсли; + КонецЕсли; + Если ИспользоватьШироковещательноеОповещение И ТипЭлемента <> Тип("Тип") Тогда + МассивСсылокВРазрезахТипов[ТипЭлемента].Добавить(Элемент); КонецЕсли; КонецЦикла; Иначе МассивТипов.Добавить(СсылкаИлиТипИлиМассив); + Если ИспользоватьШироковещательноеОповещение Тогда + Если ТипСсылкиИлиТипаИлиМассива = Тип("Тип") Тогда + ТипЭлемента = СсылкаИлиТипИлиМассив; + Иначе + ТипЭлемента = ТипСсылкиИлиТипаИлиМассива; + КонецЕсли; + МассивСсылокВРазрезахТипов.Вставить(ТипЭлемента, Новый Массив); + Если ТипСсылкиИлиТипаИлиМассива <> Тип("Тип") Тогда + МассивСсылокВРазрезахТипов[ТипЭлемента].Добавить(ТипСсылкиИлиТипаИлиМассива); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ИспользоватьШироковещательноеОповещение Тогда + Для Каждого КлючИЗначение Из МассивСсылокВРазрезахТипов Цикл + ОповеститьОткрытыеФормы(Результат, КлючИЗначение.Ключ, ПараметрОповещенияФорм, КлючИЗначение.Значение); + КонецЦикла; КонецЕсли; ДобавитьШаг(Результат, "ОповеститьДинамическиеСписки", Новый Структура("МассивТипов", МассивТипов)); КонецПроцедуры -// Добавляет в структуру информацию о событии, о котором надо оповестить все открытые формы. -// Действие выполняется на клиенте после вызова СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(Результат). -// -// Параметры: -// Результат - Структура - См. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). -// ИмяСобытия - Строка - Имя события, которое используется для первичной идентификации сообщения принимающими формами. -// Параметр - Произвольный - Набор данных, который может использоваться принимающей формой для обновления. -// Источник - Произвольный - Источник оповещения. -// -// См. также: -// СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). -// -Процедура ОповеститьОткрытыеФормы(Результат, ИмяСобытия, Параметр = Неопределено, Источник = Неопределено) Экспорт - Если ИмяСобытия = Неопределено Тогда - Возврат; - КонецЕсли; - - ОповещениеФорм = Новый Структура("ИмяСобытия, Параметр, Источник"); - ОповещениеФорм.ИмяСобытия = ИмяСобытия; - ОповещениеФорм.Параметр = Параметр; - ОповещениеФорм.Источник = Источник; - - ДобавитьШаг(Результат, "ОповеститьОткрытыеФормы", ОповещениеФорм); -КонецПроцедуры - // Добавляет в структуру информацию об узлах дерева, которые необходимо "развернуть". -// Действие выполняется на клиенте после вызова СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(Результат). +// Действие выполняется после вызова процедуры СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(Форма, Результат). +// Для этого структуру Результат следует передать на клиент и передать в соответствующем параметре указанной процедуры. // // Параметры: -// Результат - Структура - См. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). +// Результат - Структура - Структура, которая может быть использована для передачи информации на клиент. +// При вызове данного метода в этой структуре будет создан ключ "Шаги": +// * Шаги - СписокЗначений - Необязательный. Список, в который будет добавлена информация для вывода на клиенте. +// Структуру Результат допустимо использовать для хранения параметров вызывающего кода, +// но при этом следует контролировать чтобы вызывающий код не использовал ключ "Шаги", +// поскольку он зарезервирован для хранения и вывода результата выполнения. // ИмяТаблицы - Строка - Имя таблицы формы (дерева значений), в которой требуется развернуть узел. // Идентификатор - Произвольный - Необязательный. Идентификатор строки дерева, которую требуется развернуть. // Если указано "*", то будут развернуты все узлы верхнего уровня. @@ -102,9 +119,6 @@ // СПодчиненными - Булево - Необязательный. Раскрывать ли подчиненные узлы. // Значение по умолчанию: Ложь (не раскрывать подчиненные узлы). // -// См. также: -// СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). -// Процедура РазвернутьУзлыДерева(Результат, ИмяТаблицы, Идентификатор = "*", СПодчиненными = Ложь) Экспорт Если ИмяТаблицы = Неопределено Тогда Возврат; @@ -119,18 +133,21 @@ КонецПроцедуры // Добавляет в структуру информацию, необходимую для вывода предупреждения или текста ошибки. -// Действие выполняется на клиенте после вызова СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(Результат). +// Действие выполняется после вызова процедуры СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(Форма, Результат). +// Для этого структуру Результат следует передать на клиент и передать в соответствующем параметре указанной процедуры. // // Параметры: -// Результат - Структура - См. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). +// Результат - Структура - Структура, которая может быть использована для передачи информации на клиент. +// При вызове данного метода в этой структуре будет создан ключ "Шаги": +// * Шаги - СписокЗначений - Необязательный. Список, в который будет добавлена информация для вывода на клиенте. +// Структуру Результат допустимо использовать для хранения параметров вызывающего кода, +// но при этом следует контролировать чтобы вызывающий код не использовал ключ "Шаги", +// поскольку он зарезервирован для хранения и вывода результата выполнения. // Текст - Строка - Текст предупреждения. // Подробно - Строка - Необязательный. Тексты ошибок, которые при желании может просмотреть пользователь. // Заголовок - Строка - Необязательный. Заголовок окна. // ПутьКРеквизитуФормы - Строка - Необязательный. Путь к реквизиту формы, значение которого вызывало ошибку. // -// См. также: -// СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). -// Процедура ВывестиПредупреждение(Результат, Текст, Подробно = "", Заголовок = "", ПутьКРеквизитуФормы = "") Экспорт Если ПустаяСтрока(Текст) Тогда Возврат; @@ -146,16 +163,19 @@ КонецПроцедуры // Добавляет в структуру информацию, необходимую для вывода сообщения о неверно заполненных полях формы. -// Действие выполняется на клиенте после вызова СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(Результат). +// Действие выполняется после вызова процедуры СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(Форма, Результат). +// Для этого структуру Результат следует передать на клиент и передать в соответствующем параметре указанной процедуры. // // Параметры: -// Результат - Структура - См. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). +// Результат - Структура - Структура, которая может быть использована для передачи информации на клиент. +// При вызове данного метода в этой структуре будет создан ключ "Шаги": +// * Шаги - СписокЗначений - Необязательный. Список, в который будет добавлена информация для вывода на клиенте. +// Структуру Результат допустимо использовать для хранения параметров вызывающего кода, +// но при этом следует контролировать чтобы вызывающий код не использовал ключ "Шаги", +// поскольку он зарезервирован для хранения и вывода результата выполнения. // Текст - Строка - Текст сообщения. // ПутьКРеквизитуФормы - Строка - Необязательный. Путь к реквизиту формы, значение которого вызывало ошибку. // -// См. также: -// СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). -// Процедура ВывестиСообщение(Результат, Текст, ПутьКРеквизитуФормы = "") Экспорт Если ПустаяСтрока(Текст) Тогда Возврат; @@ -169,17 +189,28 @@ КонецПроцедуры // Добавляет в структуру информацию, необходимую для вывода всплывающего оповещения. -// Действие выполняется на клиенте после вызова СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(Результат). +// Действие выполняется после вызова процедуры СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(Форма, Результат). +// Для этого структуру Результат следует передать на клиент и передать в соответствующем параметре указанной процедуры. // // Параметры: -// Результат - Структура - См. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). -// Заголовок - Строка - Заголовок оповещения. Чтобы выводилась вся строка рекомендуется длина 40 или меньше. -// Текст - Строка - Текст оповещения. Чтобы выводилась вся строка рекомендуется длина 40 или меньше. -// Ссылка - Строка - Навигационная ссылка для перехода к объекту конфигурации. -// Картинка - Картинка - Картинка оповещения. -// -// См. также: -// СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). +// Результат - Структура - Структура, которая может быть использована для передачи информации на клиент. +// При вызове данного метода в этой структуре будет создан ключ "Шаги": +// * Шаги - СписокЗначений - Необязательный. Список, в который будет добавлена информация для вывода на клиенте. +// Структуру Результат допустимо использовать для хранения параметров вызывающего кода, +// но при этом следует контролировать чтобы вызывающий код не использовал ключ "Шаги", +// поскольку он зарезервирован для хранения и вывода результата выполнения. +// Заголовок - Строка - Заголовок оповещения. Чтобы выводилась вся строка рекомендуется длина 40 или меньше. +// См. также в синтакс-помощнике описание метода глобального контекста "ПоказатьОповещениеПользователя", +// параметр "Текст". +// Текст - Строка - Текст оповещения. Чтобы выводилась вся строка рекомендуется длина 40 или меньше. +// См. также в синтакс-помощнике описание метода глобального контекста "ПоказатьОповещениеПользователя", +// параметр "Пояснение". +// Ссылка - Строка - Навигационная ссылка для перехода к объекту конфигурации. +// См. также в синтакс-помощнике описание метода глобального контекста "ПоказатьОповещениеПользователя", +// параметр "НавигационнаяСсылка". +// Картинка - Картинка - Картинка оповещения. +// См. также в синтакс-помощнике описание метода глобального контекста "ПоказатьОповещениеПользователя", +// параметр "Картинка". // Процедура ВывестиОповещение(Результат, Заголовок, Текст = "", Картинка = Неопределено, Ссылка = "") Экспорт Если ПустаяСтрока(Заголовок) И ПустаяСтрока(Текст) Тогда @@ -196,17 +227,20 @@ КонецПроцедуры // Добавляет в структуру информацию, необходимую для открытия формы. -// Действие выполняется на клиенте после вызова СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(Результат). +// Действие выполняется после вызова процедуры СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(Форма, Результат). +// Для этого структуру Результат следует передать на клиент и передать в соответствующем параметре указанной процедуры. // // Параметры: -// Результат - Структура - См. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). +// Результат - Структура - Структура, которая может быть использована для передачи информации на клиент. +// При вызове данного метода в этой структуре будет создан ключ "Шаги": +// * Шаги - СписокЗначений - Необязательный. Список, в который будет добавлена информация для вывода на клиенте. +// Структуру Результат допустимо использовать для хранения параметров вызывающего кода, +// но при этом следует контролировать чтобы вызывающий код не использовал ключ "Шаги", +// поскольку он зарезервирован для хранения и вывода результата выполнения. // ПолноеИмя - Строка - Полный путь к открываемой форме. // Параметры - Структура - Необязательный. Параметры открываемой формы. // РежимОкна - РежимОткрытияОкнаФормы - Необязательный. Блокировать ли окно владельца. // -// См. также: -// СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). -// Процедура ВывестиФорму(Результат, ПолноеИмя, Параметры = Неопределено, РежимОкна = Неопределено) Экспорт Если ПустаяСтрока(ПолноеИмя) Тогда Возврат; @@ -220,9 +254,70 @@ ДобавитьШаг(Результат, "ВывестиФорму", ВыводФормы); КонецПроцедуры -#КонецОбласти +// Добавляет в структуру информацию, необходимую для вывода предупреждения и текста ошибки. +// Действие выполняется на клиенте после вызова СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(Результат). +// +// Параметры: +// Результат - Структура - См. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). +// ВводныйТекст - Строка - Текст предупреждения. +// ИнформацияОбОшибке - ИнформацияОбОшибке - Необязательный. Тексты ошибок, которые при желании может просмотреть пользователь. +// +// См. также: +// СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). +// +Процедура ВывестиИнформациюОбОшибке(Результат, ВводныйТекст, ИнформацияОбОшибке) Экспорт + Кратко = ВводныйТекст + Символы.ПС + ИсходнаяПричинаОшибки(ИнформацияОбОшибке); + Подробно = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + ВывестиПредупреждение(Результат, Кратко, Подробно); +КонецПроцедуры -#Область СлужебныйПрограммныйИнтерфейс +// Устарела. Следует использовать метод глобального контекста Оповестить. +// +// Добавляет в структуру информацию о событии, о котором надо оповестить все открытые формы. +// Действие выполняется после вызова процедуры СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(Форма, Результат). +// Для этого структуру Результат следует передать на клиент и передать в соответствующем параметре указанной процедуры. +// +// Параметры: +// Результат - Структура - Структура, которая может быть использована для передачи информации на клиент. +// При вызове данного метода в этой структуре будет создан ключ "Шаги": +// * Шаги - СписокЗначений - Необязательный. Список, в который будет добавлена информация для вывода на клиенте. +// Структуру Результат допустимо использовать для хранения параметров вызывающего кода, +// но при этом следует контролировать чтобы вызывающий код не использовал ключ "Шаги", +// поскольку он зарезервирован для хранения и вывода результата выполнения. +// ИмяСобытия - Строка - Имя события, которое используется для первичной идентификации сообщения принимающими формами. +// Параметр - Произвольный - Набор данных, который может использоваться принимающей формой для обновления. +// Источник - Произвольный - Источник оповещения. +// +Процедура ОповеститьОткрытыеФормы(Результат, Знач ИмяСобытия, Знач Параметр = Неопределено, Знач Источник = Неопределено) Экспорт + Если ИмяСобытия = Неопределено Тогда + Возврат; + КонецЕсли; + Если ТипЗнч(ИмяСобытия) = Тип("Тип") Тогда + #Если Сервер Тогда + ОбъектМетаданных = Метаданные.НайтиПоТипу(ИмяСобытия); + Если ТипЗнч(ОбъектМетаданных) <> Тип("ОбъектМетаданных") Тогда + Возврат; + КонецЕсли; + ИмяСобытия = "Запись_" + ОбъектМетаданных.Имя; + Если Параметр = Неопределено Тогда + Попытка + Параметр = ПредопределенноеЗначение(ОбъектМетаданных.ПолноеИмя() + ".ПустаяСсылка"); + Исключение + Параметр = Неопределено; + КонецПопытки; + КонецЕсли; + #Иначе + Возврат; + #КонецЕсли + КонецЕсли; + + ОповещениеФорм = Новый Структура("ИмяСобытия, Параметр, Источник"); + ОповещениеФорм.ИмяСобытия = ИмяСобытия; + ОповещениеФорм.Параметр = Параметр; + ОповещениеФорм.Источник = Источник; + + ДобавитьШаг(Результат, "ОповеститьОткрытыеФормы", ОповещениеФорм); +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Табличный документ @@ -245,7 +340,7 @@ // * Среднее - Число - Сумма выделенных ячеек с числами. // * Минимум - Число - Сумма выделенных ячеек с числами. // * Максимум - Число - Максимум выделенных ячеек с числами. -// * НуженВызовСервера - Булево - Ложь когда вычисление на клиенте нецелесообразно и нужен вызов сервера. +// * НуженВызовСервера - Булево - Истина когда вычисление на клиенте нецелесообразно и нужен вызов сервера. // // См. также: // ОтчетыКлиент.ВыделенныеОбласти(). @@ -256,6 +351,7 @@ Результат.Вставить("КоличествоНеПустых", 0); Результат.Вставить("КоличествоЧисловых", 0); Результат.Вставить("Сумма", 0); + Результат.Вставить("Среднее", 0); Результат.Вставить("Минимум", Неопределено); Результат.Вставить("Максимум", Неопределено); Результат.Вставить("НуженВызовСервера", Ложь); @@ -348,30 +444,14 @@ КонецЦикла; КонецЦикла; + Если Результат.КоличествоЧисловых > 0 Тогда + Результат.Среднее = Результат.Сумма / Результат.КоличествоЧисловых; + КонецЕсли; + Возврат Результат; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Регистрация результата работы для вывода на клиенте. - -// Добавляет в структуру информацию, необходимую для вывода предупреждения и текста ошибки. -// Действие выполняется на клиенте после вызова СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(Результат). -// -// Параметры: -// Результат - Структура - См. СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). -// ВводныйТекст - Строка - Текст предупреждения. -// ИнформацияОбОшибке - ИнформацияОбОшибке - Необязательный. Тексты ошибок, которые при желании может просмотреть пользователь. -// -// См. также: -// СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(). -// -Процедура ВывестиИнформациюОбОшибке(Результат, ВводныйТекст, ИнформацияОбОшибке) Экспорт - Кратко = ВводныйТекст + Символы.ПС + ИсходнаяПричинаОшибки(ИнформацияОбОшибке); - Подробно = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); - ВывестиПредупреждение(Результат, Кратко, Подробно); -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Работа с ошибками. diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl index b95fa604e..ec3da96cd 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыПовтИсп/Module.bsl @@ -144,6 +144,139 @@ КонецФункции +// Возвращает Истина, если привилегированный режим был установлен +// при запуске с помощью параметра UsePrivilegedMode. +// +// Поддерживается только при запуске клиентских приложений +// (внешнее соединение не поддерживается). +// +Функция ПривилегированныйРежимУстановленПриЗапуске() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Возврат ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить( + "ПривилегированныйРежимУстановленПриЗапуске") = Истина; + +КонецФункции + +// Возвращает соответствие имен предопределенных значений ссылкам на них. +// +// Параметры: +// ПолноеИмяОбъектаМетаданных - Строка, например, "Справочник.ВидыНоменклатуры", +// Поддерживаются только таблицы +// с предопределенными элементами: +// - Справочники, +// - Планы видов характеристик, +// - Планы счетов, +// - Планы видов расчета. +// +// Возвращаемое значение: +// Соответствие, где +// Ключ - Строка - имя предопределенного, +// Значение - Ссылка предопределенного. +// +Функция СсылкиПоИменамПредопределенных(ПолноеИмяОбъектаМетаданных) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ТекущаяТаблица.Ссылка КАК Ссылка, + | ТекущаяТаблица.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных + |ИЗ + | &ТекущаяТаблица КАК ТекущаяТаблица + |ГДЕ + | ТекущаяТаблица.Предопределенный = ИСТИНА"; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекущаяТаблица", ПолноеИмяОбъектаМетаданных); + + Выборка = Запрос.Выполнить().Выбрать(); + + ПредопределенныеЗначения = Новый Соответствие; + + Пока Выборка.Следующий() Цикл + ИмяПредопределенного = Выборка.ИмяПредопределенныхДанных; + ПредопределенныеЗначения.Вставить(ИмяПредопределенного, Выборка.Ссылка); + КонецЦикла; + + Возврат ПредопределенныеЗначения; + +КонецФункции + +// Возвращает признак использования в информационной базе полного РИБ (без фильтров). +// Проверка выполняется по более точному алгоритму, если используется подсистема "Обмен данными". +// +// Параметры: +// ФильтрПоНазначению - Строка - Уточняет, наличие какого РИБ проверяется. +// Допустимые значения: +// - Пустая строка - любого РИБ +// - "СФильтром" - РИБ с фильтром +// - "Полный" - РИБ без фильтров. +// +// Возвращаемое значение: Булево. +// +Функция ИспользуетсяРИБ(ФильтрПоНазначению = "") Экспорт + + Если УзлыРИБ(ФильтрПоНазначению).Количество() > 0 Тогда + Возврат Истина; + Иначе + Возврат Ложь; + КонецЕсли; + +КонецФункции + +// Возвращает список используемых в информационной базе узлов РИБ (без фильтров). +// Проверка выполняется по более точному алгоритму, если используется подсистема "Обмен данными". +// +// Параметры: +// ФильтрПоНазначению - Строка - Задает назначение узлов планов обмена РИБ, которые необходимо вернуть. +// Допустимые значения: +// - Пустая строка - будут возвращены все узлы РИБ +// - "СФильтром" - будут возвращены узлы РИБ с фильтром +// - "Полный" - будут возвращены узлы РИБ без фильтров. +// +// Возвращаемое значение: СписокЗначений. +// +Функция УзлыРИБ(ФильтрПоНазначению = "") Экспорт + + ФильтрПоНазначению = ВРег(ФильтрПоНазначению); + + СписокУзлов = Новый СписокЗначений; + + ПланыОбменаРИБ = ПланыОбменаРИБ(); + Запрос = Новый Запрос(); + Для Каждого ИмяПланаОбмена Из ПланыОбменаРИБ Цикл + + Если ЗначениеЗаполнено(ФильтрПоНазначению) + И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + + ОбщийМодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); + НазначениеРИБ = ВРег(ОбщийМодульОбменДаннымиСервер.НазначениеПланаОбмена(ИмяПланаОбмена)); + + Если ФильтрПоНазначению = "СФИЛЬТРОМ" И НазначениеРИБ <> "РИБСФИЛЬТРОМ" + Или ФильтрПоНазначению = "ПОЛНЫЙ" И НазначениеРИБ <> "РИБ" Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + + Запрос.Текст = + "ВЫБРАТЬ + | ПланОбмена.Ссылка КАК Ссылка + |ИЗ + | ПланОбмена.[ИмяПланаОбмена] КАК ПланОбмена + |ГДЕ + | НЕ ПланОбмена.ЭтотУзел + | И НЕ ПланОбмена.ПометкаУдаления"; + Запрос.Текст = СтрЗаменить(Запрос.Текст, "[ИмяПланаОбмена]", ИмяПланаОбмена); + ВыборкаУзлов = Запрос.Выполнить().Выбрать(); + Пока ВыборкаУзлов.Следующий() Цикл + СписокУзлов.Добавить(ВыборкаУзлов.Ссылка); + КонецЦикла; + КонецЦикла; + + Возврат СписокУзлов; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Использование идентификаторов объектов метаданных конфигурации и расширений. @@ -185,6 +318,100 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции работы с обменом данными. + +// Возвращает список планов обмена РИБ. +// Если конфигурация работает в модели сервиса, +// то возвращает список разделенных планов обмена РИБ. +// +Функция ПланыОбменаРИБ() Экспорт + + Результат = Новый Массив; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Для Каждого ПланОбмена Из Метаданные.ПланыОбмена Цикл + + Если Лев(ПланОбмена.Имя, 7) = "Удалить" Тогда + Продолжить; + КонецЕсли; + + Если ПланОбмена.РаспределеннаяИнформационнаяБаза + И ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(ПланОбмена.ПолноеИмя(), + ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных()) Тогда + + Результат.Добавить(ПланОбмена.Имя); + + КонецЕсли; + + КонецЦикла; + + Иначе + + Для Каждого ПланОбмена Из Метаданные.ПланыОбмена Цикл + + Если Лев(ПланОбмена.Имя, 7) = "Удалить" Тогда + Продолжить; + КонецЕсли; + + Если ПланОбмена.РаспределеннаяИнформационнаяБаза Тогда + + Результат.Добавить(ПланОбмена.Имя); + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Определяет режим регистрации данных на узлах плана обмена. +// +// Параметры: +// ПолноеИмяОбъекта - Строка - Полное имя проверяемого объекта метаданных. +// ИмяПланаОбмена - Строка - Проверяемый план обмена. +// +// Возвращаемое значение: +// Неопределено - объект не включен в состав плана обмена, +// "АвторегистрацияВключена" - объект включен в состав плана обмена, авторегистрация включена, +// "АвторегистрацияОтключена" - объект включен в состав плана обмена, авторегистрация отключена, +// объекты обрабатываются при создания начального образа РИБ. +// "ПрограммнаяРегистрация" - объект включен в состав плана обмена, авторегистрация отключена, +// регистрация осуществляется программно с помощью подписок на события, +// объекты обрабатываются при создания начального образа РИБ. +// +Функция РежимРегистрацииДанныхДляПланаОбмена(ПолноеИмяОбъекта, ИмяПланаОбмена) Экспорт + + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъекта); + + ЭлементСоставаПланаОбмена = Метаданные.ПланыОбмена[ИмяПланаОбмена].Состав.Найти(ОбъектМетаданных); + Если ЭлементСоставаПланаОбмена = Неопределено Тогда + Возврат Неопределено; + ИначеЕсли ЭлементСоставаПланаОбмена.Авторегистрация = АвторегистрацияИзменений.Разрешить Тогда + Возврат "АвторегистрацияВключена"; + КонецЕсли; + + // Анализ подписок на события для более сложных вариантов использования, + // когда механизм платформенной авторегистрации отключен для объекта метаданных. + Для каждого Подписка Из Метаданные.ПодпискиНаСобытия Цикл + НачалоНазванияПодписки = ИмяПланаОбмена + "Зарегистрировать"; + Если ВРег(Лев(Подписка.Имя, СтрДлина(НачалоНазванияПодписки))) = ВРег(НачалоНазванияПодписки) Тогда + Для каждого Тип Из Подписка.Источник.Типы() Цикл + Если ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип) Тогда + Возврат "ПрограммнаяРегистрация"; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЦикла; + + Возврат "АвторегистрацияОтключена"; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -259,137 +486,6 @@ КонецФункции -// Возвращает список объектов метаданных, которые используются в РИБ -// только в момент создания начального образа подчиненного узла. -// Список объектов получается для всех подсистем, для которых определено событие. -// "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена". -// -// Возвращаемое значение: -// Тип: ФиксированноеСоответствие. Ключ - объект метаданных; Значение - Истина. -// -Функция ОбъектыНачальногоОбраза() Экспорт - - Результат = Новый Соответствие; - - Объекты = Новый Массив; - - // Получаем объекты начального образа. - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена"); - Для Каждого Обработчик Из ОбработчикиСобытия Цикл - - Обработчик.Модуль.ПриПолученииОбъектовНачальногоОбразаПланаОбмена(Объекты); - - КонецЦикла; - - Для Каждого Объект Из Объекты Цикл - - Результат.Вставить(Объект.ПолноеИмя(), Истина); - - КонецЦикла; - - Возврат Новый ФиксированноеСоответствие(Результат); - -КонецФункции - -// Возвращает список планов обмена РИБ. -// Если конфигурация работает в модели сервиса, -// то возвращает список разделенных планов обмена РИБ. -// -Функция ПланыОбменаРИБ() Экспорт - - Результат = Новый Массив; - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - - Для Каждого ПланОбмена Из Метаданные.ПланыОбмена Цикл - - Если ПланОбмена.РаспределеннаяИнформационнаяБаза - И ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(ПланОбмена.ПолноеИмя(), - ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных()) Тогда - - Результат.Добавить(ПланОбмена.Имя); - - КонецЕсли; - - КонецЦикла; - - Иначе - - Для Каждого ПланОбмена Из Метаданные.ПланыОбмена Цикл - - Если ПланОбмена.РаспределеннаяИнформационнаяБаза Тогда - - Результат.Добавить(ПланОбмена.Имя); - - КонецЕсли; - - КонецЦикла; - - КонецЕсли; - - Возврат Результат; - -КонецФункции - -// Возвращает соответствие имен предопределенных значений ссылкам на них. -// -// Параметры: -// ПолноеИмяОбъектаМетаданных - Строка, например, "Справочник.ВидыНоменклатуры", -// Поддерживаются только таблицы -// с предопределенными элементами: -// - Справочники, -// - Планы видов характеристик, -// - Планы счетов, -// - Планы видов расчета. -// -// Возвращаемое значение: -// Соответствие, где -// Ключ - Строка - имя предопределенного, -// Значение - Ссылка предопределенного. -// -Функция СсылкиПоИменамПредопределенных(ПолноеИмяОбъектаМетаданных) Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ТекущаяТаблица.Ссылка КАК Ссылка, - | ТекущаяТаблица.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных - |ИЗ - | &ТекущаяТаблица КАК ТекущаяТаблица - |ГДЕ - | ТекущаяТаблица.Предопределенный = ИСТИНА"; - - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекущаяТаблица", ПолноеИмяОбъектаМетаданных); - - Выборка = Запрос.Выполнить().Выбрать(); - - ПредопределенныеЗначения = Новый Соответствие; - - Пока Выборка.Следующий() Цикл - ИмяПредопределенного = Выборка.ИмяПредопределенныхДанных; - ПредопределенныеЗначения.Вставить(ИмяПредопределенного, Выборка.Ссылка); - КонецЦикла; - - Возврат ПредопределенныеЗначения; - -КонецФункции - -// Возвращает Истина, если привилегированный режим был установлен -// при запуске с помощью параметра UsePrivilegedMode. -// -// Поддерживается только при запуске клиентских приложений -// (внешнее соединение не поддерживается). -// -Функция ПривилегированныйРежимУстановленПриЗапуске() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Возврат ПараметрыСеанса.ПараметрыКлиентаНаСервере.Получить( - "ПривилегированныйРежимУстановленПриЗапуске") = Истина; - -КонецФункции - // Только для внутреннего использования. Функция ПараметрыРаботыПрограммы(ИмяКонстанты) Экспорт @@ -478,16 +574,21 @@ // Может быть пустым для конфигурации. Описание.Вставить("ОсновнойСерверныйМодуль", ""); + // Режим выполнения отложенных обработчиков обновления. + // По умолчанию Последовательно. + Описание.Вставить("РежимВыполненияОтложенныхОбработчиков", "Последовательно"); + Описание.Вставить("ОбновлятьПараллельноСПодсистемами", Новый Массив); + // <СВОЙСТВА ТОЛЬКО ДЛЯ БИБЛИОТЕКИ СТАНДАРТНЫХ ПОДСИСТЕМ> Описание.Вставить("ДобавлятьСобытия", Ложь); Описание.Вставить("ДобавлятьОбработчикиСобытий", Ложь); - // ДобавлятьСлужебныеСобытия - Булево - если Истина, будет вызвана стандартная процедура. + // ДобавлятьСлужебныеСобытия - Булево - если Истина, будет вызвана стандартная процедура // ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия) // из основного модуля библиотеки. // - // ДобавлятьОбработчикиСлужебныхСобытий - Булево - если Истина, будет вызвана стандартная процедура. + // ДобавлятьОбработчикиСлужебныхСобытий - Булево - если Истина, будет вызвана стандартная процедура // ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) // из основного модуля библиотеки. diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl index 1969cb9fb..d821d220d 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl @@ -54,9 +54,19 @@ УстановленныеПараметры.Добавить("АдресСвойствРасширений"); КонецЕсли; + Если ИменаПараметровСеанса.Найти("БуферОбмена") <> Неопределено Тогда + ПараметрыСеанса.БуферОбмена = Новый ФиксированнаяСтруктура(Новый Структура("Источник, Данные")); + УстановленныеПараметры.Добавить("БуферОбмена"); + КонецЕсли; + Обработчики = Новый Соответствие; ОбновлениеИнформационнойБазыСлужебный.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда + МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); + МодульВерсионированиеОбъектов.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда МодульДатыЗапретаИзмененияСлужебный = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзмененияСлужебный"); МодульДатыЗапретаИзмененияСлужебный.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); @@ -77,6 +87,11 @@ МодульПользователиСлужебный.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РегламентныеЗадания") Тогда + МодульРегламентныеЗаданияСлужебный = ОбщегоНазначения.ОбщийМодуль("РегламентныеЗаданияСлужебный"); + МодульРегламентныеЗаданияСлужебный.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); МодульУправлениеДоступомСлужебный.ПриДобавленииОбработчиковУстановкиПараметровСеанса(Обработчики); @@ -115,7 +130,7 @@ // Процедура ОбновитьВсеПараметрыРаботыПрограммы() Экспорт - ОбновитьПараметрыРаботыПрограммы(Ложь); + ОбновитьПараметрыРаботыПрограммы(); КонецПроцедуры @@ -224,6 +239,240 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции работы с формами. + +// Устанавливает размер шрифта заголовков групп формы для их корректного отображения в интерфейсе 8.2. +// +// Параметры: +// Форма - УправляемаяФорма - Форма для изменения шрифта заголовков групп; +// ИменаГрупп - Строка - Список имен групп формы, разделенных запятыми. +// +Процедура УстановитьОтображениеЗаголовковГрупп(Форма, ИменаГрупп = "") Экспорт + + Если ТекущийВариантИнтерфейсаКлиентскогоПриложения() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда + ЖирныйШрифт = Новый Шрифт(,, Истина); + Если НЕ ЗначениеЗаполнено(ИменаГрупп) Тогда + Для Каждого Элемент Из Форма.Элементы Цикл + Если Тип(Элемент) = Тип("ГруппаФормы") + И Элемент.Вид = ВидГруппыФормы.ОбычнаяГруппа + И Элемент.ОтображатьЗаголовок = Истина + И (Элемент.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение + Или Элемент.Отображение = ОтображениеОбычнойГруппы.Нет) Тогда + Элемент.ШрифтЗаголовка = ЖирныйШрифт; + КонецЕсли; + КонецЦикла; + Иначе + МассивЗаголовков = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаГрупп,,, Истина); + Для Каждого ИмяЗаголовка Из МассивЗаголовков Цикл + Элемент = Форма.Элементы[ИмяЗаголовка]; + Если Элемент.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение ИЛИ Элемент.Отображение = ОтображениеОбычнойГруппы.Нет Тогда + Элемент.ШрифтЗаголовка = ЖирныйШрифт; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Подтверждение завершения работы программы. + +// Прочитать настройку подтверждения завершения работы программы +// для текущего пользователя. +// +// Возвращаемое значение: +// Булево - значение настройки. +// +Функция ЗапрашиватьПодтверждениеПриЗавершенииПрограммы() Экспорт + Результат = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбщиеНастройкиПользователя", "ЗапрашиватьПодтверждениеПриЗавершенииПрограммы"); + + Если Результат = Неопределено Тогда + Результат = ОбщегоНазначения.ОбщиеПараметрыБазовойФункциональности().ЗапрашиватьПодтверждениеПриЗавершенииПрограммы; + СтандартныеПодсистемыВызовСервера.СохранитьНастройкуПодтвержденияПриЗавершенииПрограммы(Результат); + КонецЕсли; + + Возврат Результат; +КонецФункции + +#Область УстаревшиеПроцедурыИФункции + +// Устарела. Следует использовать СтандартныеПодсистемыПовтИсп.РежимРегистрацииДанныхДляПланаОбмена. +// +// Параметры: +// Объект - ОбъектМетаданных - проверяемый объект. +// +// Возвращаемое значение: +// Булево - Истина, если объект используется в РИБ только в момент создания начального образа подчиненного узла. +// +Функция ЭтоОбъектНачальногоОбразаУзлаРИБ(Знач Объект) Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда + МодульОбменДаннымиПовтИсп = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиПовтИсп"); + Если МодульОбменДаннымиПовтИсп.АвтономнаяРаботаПоддерживается() Тогда + РежимРегистрации = СтандартныеПодсистемыПовтИсп.РежимРегистрацииДанныхДляПланаОбмена( + Объект.ПолноеИмя(), МодульОбменДаннымиПовтИсп.ПланОбменаАвтономнойРаботы()); + Если РежимРегистрации = "АвторегистрацияОтключена" Тогда + Возврат Истина; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +// Выполняет проверку состава плана обмена на наличие обязательных объектов метаданных +// и объектов-исключений из состава плана обмена. +// +// Параметры: +// ИмяПланаОбмена - Строка, ПланОбменаСсылка. Имя плана обмена или ссылка на узел плана обмена, +// для которого необходимо выполнить проверку. +// +Процедура ПроверитьСоставПланаОбмена(Знач ИмяПланаОбмена) Экспорт + + Если ТипЗнч(ИмяПланаОбмена) <> Тип("Строка") Тогда + ИмяПланаОбмена = ИмяПланаОбмена.Метаданные().Имя; + КонецЕсли; + + РаспределеннаяИнформационнаяБаза = Метаданные.ПланыОбмена[ИмяПланаОбмена].РаспределеннаяИнформационнаяБаза; + СоставПланаОбмена = Метаданные.ПланыОбмена[ИмяПланаОбмена].Состав; + + ВключитьВСостав = Новый Массив; + ИсключитьИзСостава = Новый Массив; + ОтключитьАвторегистрацию = Новый Массив; + + // Получаем список обязательных объектов и объектов-исключений. + ОбязательныеОбъекты = Новый Массив; + ОбъектыИсключения = Новый Массив; + ОбъектыНачальногоОбраза = Новый Массив; + + // Получаем обязательные объекты. + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбязательныхОбъектовПланаОбмена"); + Для Каждого Обработчик Из ОбработчикиСобытия Цикл + + ПризнакРаспределеннаяИнформационнаяБаза = РаспределеннаяИнформационнаяБаза; + + Обработчик.Модуль.ПриПолученииОбязательныхОбъектовПланаОбмена(ОбязательныеОбъекты, ПризнакРаспределеннаяИнформационнаяБаза); + КонецЦикла; + + // Получаем объекты-исключения. + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовИсключенийПланаОбмена"); + Для Каждого Обработчик Из ОбработчикиСобытия Цикл + + ПризнакРаспределеннаяИнформационнаяБаза = РаспределеннаяИнформационнаяБаза; + + Обработчик.Модуль.ПриПолученииОбъектовИсключенийПланаОбмена(ОбъектыИсключения, ПризнакРаспределеннаяИнформационнаяБаза); + КонецЦикла; + + Если РаспределеннаяИнформационнаяБаза Тогда + + // Получаем объекты начального образа. + ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( + "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена"); + Для Каждого Обработчик Из ОбработчикиСобытия Цикл + + Обработчик.Модуль.ПриПолученииОбъектовНачальногоОбразаПланаОбмена(ОбъектыНачальногоОбраза); + + КонецЦикла; + + Для Каждого Объект Из ОбъектыНачальногоОбраза Цикл + + ОбязательныеОбъекты.Добавить(Объект); + + КонецЦикла; + + КонецЕсли; + + // Проверяем список обязательных объектов для состава плана обмена. + Для Каждого Объект Из ОбязательныеОбъекты Цикл + + Если СоставПланаОбмена.Найти(Объект) = Неопределено Тогда + + ВключитьВСостав.Добавить(Объект); + + КонецЕсли; + + КонецЦикла; + + // Проверяем список объектов-исключений из состава плана обмена. + Для Каждого Объект Из ОбъектыИсключения Цикл + + Если СоставПланаОбмена.Найти(Объект) <> Неопределено Тогда + + ИсключитьИзСостава.Добавить(Объект); + + КонецЕсли; + + КонецЦикла; + + // Проверяем признак авторегистрации. + // Авторегистрация должна быть отключена у всех объектов начального образа. + Для Каждого ЭлементСостава Из СоставПланаОбмена Цикл + + Если ОбъектыНачальногоОбраза.Найти(ЭлементСостава.Метаданные) <> Неопределено + И ЭлементСостава.АвтоРегистрация <> АвтоРегистрацияИзменений.Запретить Тогда + + ОтключитьАвторегистрацию.Добавить(ЭлементСостава.Метаданные); + + КонецЕсли; + + КонецЦикла; + + // Формируем и выводим текст исключения при необходимости. + Если ВключитьВСостав.Количество() <> 0 + ИЛИ ИсключитьИзСостава.Количество() <> 0 + ИЛИ ОтключитьАвторегистрацию.Количество() <> 0 Тогда + + Если ВключитьВСостав.Количество() <> 0 Тогда + + ОписаниеИсключения1 = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В состав плана обмена %1 должны входить следующие объекты метаданных: %2'"), + ИмяПланаОбмена, + СтрСоединить(ПредставлениеОбъектовМетаданных(ВключитьВСостав), ", ")); + + КонецЕсли; + + Если ИсключитьИзСостава.Количество() <> 0 Тогда + + ОписаниеИсключения2 = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В состав плана обмена %1 НЕ должны входить следующие объекты метаданных: %2'"), + ИмяПланаОбмена, + СтрСоединить(ПредставлениеОбъектовМетаданных(ИсключитьИзСостава), ", ")); + + КонецЕсли; + + Если ОтключитьАвторегистрацию.Количество() <> 0 Тогда + + ОписаниеИсключения3 = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В составе плана обмена %1 не должно быть объектов с установленным признаком авторегистрации. + |Требуется запретить авторегистрацию для следующих объектов метаданных: %2'"), + ИмяПланаОбмена, + СтрСоединить(ПредставлениеОбъектовМетаданных(ОтключитьАвторегистрацию), ", ")); + + КонецЕсли; + + ОписаниеИсключения = "[ОписаниеИсключения1] + | + |[ОписаниеИсключения2] + | + |[ОписаниеИсключения3] + |"; + + ОписаниеИсключения = СтрЗаменить(ОписаниеИсключения, "[ОписаниеИсключения1]", ОписаниеИсключения1); + ОписаниеИсключения = СтрЗаменить(ОписаниеИсключения, "[ОписаниеИсключения2]", ОписаниеИсключения2); + ОписаниеИсключения = СтрЗаменить(ОписаниеИсключения, "[ОписаниеИсключения3]", ОписаниеИсключения3); + + ВызватьИсключение СокрЛП(ОписаниеИсключения); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -522,6 +771,11 @@ МодульОценкаПроизводительностиСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда + МодульЦентрМониторингаСлужебный = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторингаСлужебный"); + МодульЦентрМониторингаСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); МодульУправлениеПечатью.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); @@ -656,6 +910,11 @@ МодульУправлениеСвойствамиСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УдалениеПомеченныхОбъектов") Тогда + МодульУдалениеПомеченныхОбъектовСлужебный = ОбщегоНазначения.ОбщийМодуль("УдалениеПомеченныхОбъектовСлужебный"); + МодульУдалениеПомеченныхОбъектовСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); МодульУправлениеДоступомСлужебный.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); @@ -681,6 +940,11 @@ МодульПроверкаКонтрагентов.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.СклонениеПредставленийОбъектов") Тогда + МодульСклонениеПредставленийОбъектов = ОбщегоНазначения.ОбщийМодуль("СклонениеПредставленийОбъектов"); + МодульСклонениеПредставленийОбъектов.ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики); + КонецЕсли; + КонецПроцедуры // Определить список справочников, доступных для загрузки с помощью подсистемы "Загрузка данных из файла". @@ -772,37 +1036,6 @@ КонецФункции -// Запуск фонового задания с контекстом клиента. Например, передаются ПараметрыКлиентаНаСервере. -// Запуск выполняется с помощью процедуры ВыполнитьМетодКонфигурации общего модуля РаботаВБезопасномРежиме. -// -// Параметры: -// ИмяМетода - Строка - как в функции Выполнить менеджера фоновых заданий. -// Параметры - Массив - как в функции Выполнить менеджера фоновых заданий. -// Ключ - Строка - как в функции Выполнить менеджера фоновых заданий. -// Наименование - Строка - как в функции Выполнить менеджера фоновых заданий. -// -// Возвращаемое значение: -// ФоновоеЗадание. -// -Функция ЗапуститьФоновоеЗаданиеСКонтекстомКлиента(ИмяМетода, Параметры = Неопределено, Ключ = "", Наименование = "") Экспорт - - Если ТекущийРежимЗапуска() = Неопределено Тогда - ВызватьИсключение НСтр("ru = 'Запуск фонового задания с контекстом клиента возможен только при наличии клиента.'"); - КонецЕсли; - - ВсеПараметры = Новый Структура; - ВсеПараметры.Вставить("ИмяМетода", ИмяМетода); - ВсеПараметры.Вставить("Параметры", Параметры); - ВсеПараметры.Вставить("ПараметрыКлиентаНаСервере", ПараметрыКлиентаНаСервере()); - - ПараметрыПроцедурыФоновогоЗадания = Новый Массив; - ПараметрыПроцедурыФоновогоЗадания.Добавить(ВсеПараметры); - - Возврат ФоновыеЗадания.Выполнить("СтандартныеПодсистемыСервер.ПередЗапускомФоновогоЗаданияСКонтекстомКлиента", - ПараметрыПроцедурыФоновогоЗадания, Ключ, Наименование); - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Процедуры для установки/обновления/получения параметров работы программы (кэшей). @@ -1334,7 +1567,7 @@ // или обновление в главном узле ИБ // или обновление при первом запуске подчиненного узла // или обновление после загрузки справочника "Идентификаторы объектов метаданных" из главного узла. - ОбновитьПараметрыРаботыПрограммы(Ложь, ОшибкаУстановкиМонопольногоРежима, ВФоне); + ОбновитьПараметрыРаботыПрограммы(ОшибкаУстановкиМонопольногоРежима, ВФоне); // Заполнение параметров работы расширений ЗаполнитьВсеПараметрыРаботыРасширений(); @@ -1518,7 +1751,7 @@ КонецПроцедуры // Вызывает принудительное заполнение всех параметров работы для текущей версии расширений. -Процедура ЗаполнитьВсеПараметрыРаботыРасширений() Экспорт +Процедура ЗаполнитьВсеПараметрыРаботыРасширений() Если УстановленныеРасширенияНедоступны() Тогда Возврат; @@ -1545,7 +1778,7 @@ // требуется только, если используются собственные регистры сведений, которых хранят версии // кэшей объектов метаданных расширений. // -Процедура ОчиститьВсеПараметрыРаботыРасширений() Экспорт +Процедура ОчиститьВсеПараметрыРаботыРасширений() Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда Возврат; @@ -1594,7 +1827,7 @@ // - ДанныеФормыКоллекция - получить контрольные суммы из указанного списка. // // Возвращаемое значение: -// Строка - строки вида "<Имя расширения> (<Версия расширения>) <Контрольная сумма>" +// Строка - строки вида "<Имя расширения> (<Версия расширения>) <Контрольная сумма>". // Функция КонтрольныеСуммыРасширений(Расширения = Неопределено) Экспорт @@ -1645,169 +1878,6 @@ //////////////////////////////////////////////////////////////////////////////// // Дополнительная базовая функциональность для обмена данными. -// Выполняет проверку состава плана обмена на наличие обязательных объектов метаданных -// и объектов-исключений из состава плана обмена. -// -// Параметры: -// ИмяПланаОбмена - Строка, ПланОбменаСсылка. Имя плана обмена или ссылка на узел плана обмена, -// для которого необходимо выполнить проверку. -// -Процедура ПроверитьСоставПланаОбмена(Знач ИмяПланаОбмена) Экспорт - - Если ТипЗнч(ИмяПланаОбмена) <> Тип("Строка") Тогда - ИмяПланаОбмена = ИмяПланаОбмена.Метаданные().Имя; - КонецЕсли; - - РаспределеннаяИнформационнаяБаза = Метаданные.ПланыОбмена[ИмяПланаОбмена].РаспределеннаяИнформационнаяБаза; - СоставПланаОбмена = Метаданные.ПланыОбмена[ИмяПланаОбмена].Состав; - - ВключитьВСостав = Новый Массив; - ИсключитьИзСостава = Новый Массив; - ОтключитьАвторегистрацию = Новый Массив; - - // Получаем список обязательных объектов и объектов-исключений. - ОбязательныеОбъекты = Новый Массив; - ОбъектыИсключения = Новый Массив; - ОбъектыНачальногоОбраза = Новый Массив; - - // Получаем обязательные объекты. - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбязательныхОбъектовПланаОбмена"); - Для Каждого Обработчик Из ОбработчикиСобытия Цикл - - ПризнакРаспределеннаяИнформационнаяБаза = РаспределеннаяИнформационнаяБаза; - - Обработчик.Модуль.ПриПолученииОбязательныхОбъектовПланаОбмена(ОбязательныеОбъекты, ПризнакРаспределеннаяИнформационнаяБаза); - КонецЦикла; - - // Получаем объекты-исключения. - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовИсключенийПланаОбмена"); - Для Каждого Обработчик Из ОбработчикиСобытия Цикл - - ПризнакРаспределеннаяИнформационнаяБаза = РаспределеннаяИнформационнаяБаза; - - Обработчик.Модуль.ПриПолученииОбъектовИсключенийПланаОбмена(ОбъектыИсключения, ПризнакРаспределеннаяИнформационнаяБаза); - КонецЦикла; - - Если ПризнакРаспределеннаяИнформационнаяБаза Тогда - - // Получаем объекты начального образа. - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена"); - Для Каждого Обработчик Из ОбработчикиСобытия Цикл - - Обработчик.Модуль.ПриПолученииОбъектовНачальногоОбразаПланаОбмена(ОбъектыНачальногоОбраза); - - КонецЦикла; - - Для Каждого Объект Из ОбъектыНачальногоОбраза Цикл - - ОбязательныеОбъекты.Добавить(Объект); - - КонецЦикла; - - КонецЕсли; - - // Проверяем список обязательных объектов для состава плана обмена. - Для Каждого Объект Из ОбязательныеОбъекты Цикл - - Если СоставПланаОбмена.Найти(Объект) = Неопределено Тогда - - ВключитьВСостав.Добавить(Объект); - - КонецЕсли; - - КонецЦикла; - - // Проверяем список объектов-исключений из состава плана обмена. - Для Каждого Объект Из ОбъектыИсключения Цикл - - Если СоставПланаОбмена.Найти(Объект) <> Неопределено Тогда - - ИсключитьИзСостава.Добавить(Объект); - - КонецЕсли; - - КонецЦикла; - - // Проверяем признак авторегистрации. - // Авторегистрация должна быть отключена у всех объектов начального образа. - Для Каждого ЭлементСостава Из СоставПланаОбмена Цикл - - Если ОбъектыНачальногоОбраза.Найти(ЭлементСостава.Метаданные) <> Неопределено - И ЭлементСостава.АвтоРегистрация <> АвтоРегистрацияИзменений.Запретить Тогда - - ОтключитьАвторегистрацию.Добавить(ЭлементСостава.Метаданные); - - КонецЕсли; - - КонецЦикла; - - // Формируем и выводим текст исключения при необходимости. - Если ВключитьВСостав.Количество() <> 0 - ИЛИ ИсключитьИзСостава.Количество() <> 0 - ИЛИ ОтключитьАвторегистрацию.Количество() <> 0 Тогда - - Если ВключитьВСостав.Количество() <> 0 Тогда - - ОписаниеИсключения1 = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В состав плана обмена %1 должны входить следующие объекты метаданных: %2'"), - ИмяПланаОбмена, - СтрСоединить(ПредставлениеОбъектовМетаданных(ВключитьВСостав), ", ")); - - КонецЕсли; - - Если ИсключитьИзСостава.Количество() <> 0 Тогда - - ОписаниеИсключения2 = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В состав плана обмена %1 НЕ должны входить следующие объекты метаданных: %2'"), - ИмяПланаОбмена, - СтрСоединить(ПредставлениеОбъектовМетаданных(ИсключитьИзСостава), ", ")); - - КонецЕсли; - - Если ОтключитьАвторегистрацию.Количество() <> 0 Тогда - - ОписаниеИсключения3 = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В составе плана обмена %1 не должно быть объектов с установленным признаком авторегистрации. - |Требуется запретить авторегистрацию для следующих объектов метаданных: %2'"), - ИмяПланаОбмена, - СтрСоединить(ПредставлениеОбъектовМетаданных(ОтключитьАвторегистрацию), ", ")); - - КонецЕсли; - - ОписаниеИсключения = "[ОписаниеИсключения1] - | - |[ОписаниеИсключения2] - | - |[ОписаниеИсключения3] - |"; - - ОписаниеИсключения = СтрЗаменить(ОписаниеИсключения, "[ОписаниеИсключения1]", ОписаниеИсключения1); - ОписаниеИсключения = СтрЗаменить(ОписаниеИсключения, "[ОписаниеИсключения2]", ОписаниеИсключения2); - ОписаниеИсключения = СтрЗаменить(ОписаниеИсключения, "[ОписаниеИсключения3]", ОписаниеИсключения3); - - ВызватьИсключение СокрЛП(ОписаниеИсключения); - - КонецЕсли; - -КонецПроцедуры - -// Определяет, является ли переданный объект объектом начального образа подчиненного узла РИБ. -// -// Параметры: -// Объект - ОбъектМетаданных - проверяемый объект. -// -// Возвращаемое значение: -// Булево - Истина, если объект используется в РИБ только в момент создания начального образа подчиненного узла. -// -Функция ЭтоОбъектНачальногоОбразаУзлаРИБ(Знач Объект) Экспорт - - Возврат СтандартныеПодсистемыПовтИсп.ОбъектыНачальногоОбраза().Получить(Объект.ПолноеИмя()) <> Неопределено; - -КонецФункции - // Выполняет регистрацию изменений объекта на всех узлах плана обмена. // Для разделенных конфигураций должны выполняться условия: // план обмена должен быть разделенным, @@ -1930,7 +2000,7 @@ // Параметры: // см. описание обработчика события ПриОтправкеДанныхПодчиненному() в синтаксис-помощнике. // -Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, Знач СозданиеНачальногоОбраза, Знач Получатель = Неопределено) Экспорт +Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель) Экспорт ПодсистемаОбменДаннымиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными"); Если ПодсистемаОбменДаннымиСуществует Тогда @@ -1938,8 +2008,6 @@ МодульОбменДаннымиСервер.РассчитатьПроцентВыгрузкиРИБ(Получатель, СозданиеНачальногоОбраза); КонецЕсли; - ИгнорироватьОтправкуОбъектовНачальногоОбраза(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза); - Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда Возврат; КонецЕсли; @@ -1947,6 +2015,8 @@ // Отправка идентификаторов объектов метаданных выполняется в другой секции сообщения обмена. ИгнорироватьОтправкуИдентификаторовОбъектовМетаданных(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза); + ИгнорироватьОтправкуДанныхОбработанныхВЦентральномУзлеРИБПриОбновленииИБ(ЭлементДанных, СозданиеНачальногоОбраза, Получатель); + Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда Возврат; КонецЕсли; @@ -1990,15 +2060,13 @@ // Параметры: // см. описание обработчика события ПриОтправкеДанныхГлавному() в синтаксис-помощнике. // -Процедура ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Знач Получатель = Неопределено) Экспорт +Процедура ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Получатель) Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер"); МодульОбменДаннымиСервер.РассчитатьПроцентВыгрузкиРИБ(Получатель, Ложь); КонецЕсли; - ИгнорироватьОтправкуОбъектовНачальногоОбраза(ЭлементДанных, ОтправкаЭлемента); - Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда Возврат; КонецЕсли; @@ -2032,7 +2100,7 @@ // Параметры: // см. описание обработчика события ПриПолученииДанныхОтПодчиненного() в синтаксис-помощнике. // -Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Знач Отправитель = Неопределено) Экспорт +Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт ПодсистемаОбменДаннымиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными"); Если ПодсистемаОбменДаннымиСуществует Тогда @@ -2040,8 +2108,6 @@ МодульОбменДаннымиСервер.РассчитатьПроцентЗагрузкиРИБ(Отправитель); КонецЕсли; - ПроверитьПолучениеОбъектовНачальногоОбраза(ЭлементДанных, ПолучениеЭлемента, Отправитель); - Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда Возврат; КонецЕсли; @@ -2070,8 +2136,9 @@ // // Параметры: // см. описание обработчика события ПриПолученииДанныхОтГлавного() в синтаксис-помощнике. +// Параметр Отправитель может быть не заполнен, например, при получении сообщения начального образа в АРМе. // -Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Знач Отправитель = Неопределено) Экспорт +Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель = Неопределено) Экспорт ПодсистемаОбменДаннымиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными"); Если ПодсистемаОбменДаннымиСуществует Тогда @@ -2079,8 +2146,6 @@ МодульОбменДаннымиСервер.РассчитатьПроцентЗагрузкиРИБ(Отправитель); КонецЕсли; - ПроверитьПолучениеОбъектовНачальногоОбраза(ЭлементДанных, ПолучениеЭлемента, Отправитель); - Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда Возврат; КонецЕсли; @@ -2152,7 +2217,7 @@ // при загрузке данных в другую информационную базу. // // Параметры: -// Типы - Массив(ОбъектМетаданных) +// Типы - Массив(ОбъектМетаданных). // Процедура ПриЗаполненииТиповОбщихДанныхПоддерживающихСопоставлениеСсылокПриЗагрузке(Типы) Экспорт @@ -2160,64 +2225,18 @@ КонецПроцедуры -// Используется для получения объектов метаданных обязательных для плана обмена. -// Если подсистема имеет объекты метаданных обязательные для включения в состав плана обмена, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. +// Заполняет массив типов, исключаемых из выгрузки и загрузки данных. // // Параметры: -// Объекты - Массив - список объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. -// РаспределеннаяИнформационнаяБаза - Булево - (только чтение) Признак получения объектов для плана обмена РИБ. -// Истина - требуется получить список объектов плана обмена РИБ; -// Ложь - требуется получить список для плана обмена НЕ РИБ. +// Типы - Массив(Типы). // -Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт +Процедура ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки(Типы) Экспорт - Если РаспределеннаяИнформационнаяБаза Тогда - Объекты.Добавить(Метаданные.Справочники.ИдентификаторыОбъектовМетаданных); - КонецЕсли; - -КонецПроцедуры - -// Используется для получения объектов метаданных, которые не следует включать в состав плана обмена. -// Если подсистема имеет объекты метаданных, которые не следует включать в состав плана обмена, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты - Массив - список объектов метаданных конфигурации, которые не следует включать в состав плана обмена. -// РаспределеннаяИнформационнаяБаза - Булево - (только чтение) Признак получения объектов для плана обмена РИБ. -// Истина - требуется получить список объектов-исключений плана обмена РИБ; -// Ложь - требуется получить список для плана обмена НЕ РИБ. -// -Процедура ПриПолученииОбъектовИсключенийПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт - - Объекты.Добавить(Метаданные.Константы.ЗаголовокСистемы); - Объекты.Добавить(Метаданные.Константы.ИспользоватьРазделениеПоОбластямДанных); - Объекты.Добавить(Метаданные.Константы.НеИспользоватьРазделениеПоОбластямДанных); - Объекты.Добавить(Метаданные.Константы.ЭтоАвтономноеРабочееМесто); - - Объекты.Добавить(Метаданные.Справочники.ВерсииРасширений); - Объекты.Добавить(Метаданные.Справочники.ИдентификаторыОбъектовРасширений); - - Объекты.Добавить(Метаданные.РегистрыСведений.ИдентификаторыОбъектовВерсийРасширений); - Объекты.Добавить(Метаданные.РегистрыСведений.КэшПрограммныхИнтерфейсов); - Объекты.Добавить(Метаданные.РегистрыСведений.ПараметрыРаботыВерсийРасширений); - Объекты.Добавить(Метаданные.РегистрыСведений.СеансыВерсийРасширений); - -КонецПроцедуры - -// Используется для получения объектов метаданных, которые должны входить в состав плана обмена -// и НЕ должны входить в состав подписок на события регистрации изменений для этого плана обмена. -// Эти объекты метаданных используются только в момент создания начального образа подчиненного узла -// и не мигрируют в процессе обмена. -// Если подсистема имеет объекты метаданных, которые участвуют только в создании начального образа подчиненного узла, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты - Массив - список объектов метаданных конфигурации. -// -Процедура ПриПолученииОбъектовНачальногоОбразаПланаОбмена(Объекты) Экспорт - - Объекты.Добавить(Метаданные.Константы.ПараметрыСлужебныхСобытий); + Типы.Добавить(Метаданные.Справочники.ВерсииРасширений); + Типы.Добавить(Метаданные.Справочники.ИдентификаторыОбъектовРасширений); + Типы.Добавить(Метаданные.РегистрыСведений.ИдентификаторыОбъектовВерсийРасширений); + Типы.Добавить(Метаданные.РегистрыСведений.ПараметрыРаботыВерсийРасширений); + Типы.Добавить(Метаданные.РегистрыСведений.СеансыВерсийРасширений); КонецПроцедуры @@ -2234,8 +2253,6 @@ Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(Истина, Истина, НСтр("ru = 'Для возможности работы программы.'"))); - Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнейКомпоненты("ОбщийМакет.КомпонентаСклоненияФИО", - НСтр("ru = 'Для использования функций по склонению ФИО.'"))); Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеПривилегированногоРежима()); ЗапросыРазрешений.Добавить( @@ -2279,6 +2296,60 @@ КонецПроцедуры +// См. одноименную процедуру в общем модуле ПользователиПереопределяемый. +Процедура ПриОпределенииНазначенияРолей(НазначениеРолей) Экспорт + + // ТолькоДляАдминистраторовСистемы. + НазначениеРолей.ТолькоДляАдминистраторовСистемы.Добавить( + Метаданные.Роли.АдминистраторСистемы.Имя); + + НазначениеРолей.ТолькоДляАдминистраторовСистемы.Добавить( + Метаданные.Роли.Администрирование.Имя); + + НазначениеРолей.ТолькоДляАдминистраторовСистемы.Добавить( + Метаданные.Роли.ОбновлениеКонфигурацииБазыДанных.Имя); + + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ЭтоБазоваяВерсияКонфигурации() Тогда + + НазначениеРолей.ТолькоДляАдминистраторовСистемы.Добавить( + Метаданные.Роли.ПолныеПрава.Имя); + КонецЕсли; + + // ТолькоДляПользователейСистемы. + НазначениеРолей.ТолькоДляПользователейСистемы.Добавить( + Метаданные.Роли.ЗапускТолстогоКлиента.Имя); + + НазначениеРолей.ТолькоДляПользователейСистемы.Добавить( + Метаданные.Роли.ЗапускВнешнегоСоединения.Имя); + + НазначениеРолей.ТолькоДляПользователейСистемы.Добавить( + Метаданные.Роли.ЗапускAutomation.Имя); + + НазначениеРолей.ТолькоДляПользователейСистемы.Добавить( + Метаданные.Роли.РежимВсеФункции.Имя); + + НазначениеРолей.ТолькоДляПользователейСистемы.Добавить( + Метаданные.Роли.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок.Имя); + + // ТолькоДляВнешнихПользователей. + НазначениеРолей.ТолькоДляВнешнихПользователей.Добавить( + Метаданные.Роли.БазовыеПраваВнешнегоПользователя.Имя); + + // СовместноДляПользователейИВнешнихПользователей. + НазначениеРолей.СовместноДляПользователейИВнешнихПользователей.Добавить( + Метаданные.Роли.ЗапускТонкогоКлиента.Имя); + + НазначениеРолей.СовместноДляПользователейИВнешнихПользователей.Добавить( + Метаданные.Роли.ЗапускВебКлиента.Имя); + + НазначениеРолей.СовместноДляПользователейИВнешнихПользователей.Добавить( + Метаданные.Роли.ВыводНаПринтерФайлБуферОбмена.Имя); + + НазначениеРолей.СовместноДляПользователейИВнешнихПользователей.Добавить( + Метаданные.Роли.СохранениеДанныхПользователя.Имя); + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Дополнительные функции для работы с типами. @@ -2351,7 +2422,7 @@ КонецФункции -// Выполняет проверку, что переданный объект имеет тип СправочникОбъект.ИдентификаторыОбъектовМетаданных +// Выполняет проверку, что переданный объект имеет тип СправочникОбъект.ИдентификаторыОбъектовМетаданных. // Функция ЭтоИдентификаторОбъектаМетаданных(Объект) Экспорт @@ -2362,39 +2433,6 @@ //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции работы с формами. -// Устанавливает размер шрифта заголовков групп формы для их корректного отображения в интерфейсе 8.2. -// -// Параметры: -// Форма - УправляемаяФорма - Форма для изменения шрифта заголовков групп; -// ИменаГрупп - Строка - Список имен групп формы, разделенных запятыми. -// -Процедура УстановитьОтображениеЗаголовковГрупп(Форма, ИменаГрупп = "") Экспорт - - Если ТекущийВариантИнтерфейсаКлиентскогоПриложения() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда - ЖирныйШрифт = Новый Шрифт(,, Истина); - Если НЕ ЗначениеЗаполнено(ИменаГрупп) Тогда - Для Каждого Элемент Из Форма.Элементы Цикл - Если Тип(Элемент) = Тип("ГруппаФормы") - И Элемент.Вид = ВидГруппыФормы.ОбычнаяГруппа - И Элемент.ОтображатьЗаголовок = Истина - И (Элемент.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение - Или Элемент.Отображение = ОтображениеОбычнойГруппы.Нет) Тогда - Элемент.ШрифтЗаголовка = ЖирныйШрифт; - КонецЕсли; - КонецЦикла; - Иначе - МассивЗаголовков = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаГрупп,,, Истина); - Для Каждого ИмяЗаголовка Из МассивЗаголовков Цикл - Элемент = Форма.Элементы[ИмяЗаголовка]; - Если Элемент.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение ИЛИ Элемент.Отображение = ОтображениеОбычнойГруппы.Нет Тогда - Элемент.ШрифтЗаголовка = ЖирныйШрифт; - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - // Устанавливает ключ назначения формы (ключ назначения использования и // ключ сохранения положения окна). При необходимости копирует текущие настройки формы, // если для соответствующего нового ключа они еще не были записаны. @@ -2465,8 +2503,8 @@ Процедура УстановитьИспользованиеПредопределенногоРегламентногоЗадания(ЗаданиеМетаданные, Использование) Экспорт Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональность") Тогда - МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебныйВМоделиСервиса"); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); МодульРаботаВМоделиСервиса.УстановитьИспользованиеПредопределенногоРегламентногоЗадания(ЗаданиеМетаданные, Использование); КонецЕсли; Иначе @@ -2521,6 +2559,58 @@ КонецФункции +// Преобразует строку в допустимое наименование колонки таблицы значений, заменяя недопустимые +// символы на код символа ограниченного символом подчеркивания. +// +// Параметры: +// Строка - Строка - Строка для преобразования. +// +// Возвращаемое значение: +// Строка - Строка, содержащая только допустимые символы для наименования колонок таблицы значений. +// +Функция ПреобразоватьСтрокуВДопустимоеНаименованиеКолонки(Строка) Экспорт + + НедопустимыеСимволы = ":;!@#$%^&-~`'.,?{}[]+=*/|\ ()_"""; + Результат = ""; + Для Индекс = 1 По СтрДлина(Строка) Цикл + Символ = Сред(Строка, Индекс, 1); + Если СтрНайти(НедопустимыеСимволы, Символ) > 0 Тогда + Результат = Результат + "_" + КодСимвола(Символ) + "_"; + Иначе + Результат = Результат + Символ; + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +// Преобразовать адаптированное наименование колонки, в котором недопустимые +// символы заменены на код символа, ограниченного символом подчеркивания в обычную строку. +// +// Параметры: +// НаименованиеКолонки - Строка - Адаптированное наименование колонки. +// +// Возвращаемое значение: +// Строка - преобразованная строка. +// +Функция ПреобразоватьАдаптированноеНаименованиеКолонкиВСтроку(НаименованиеКолонки) Экспорт + + Результат = ""; + Для Индекс = 1 По СтрДлина(НаименованиеКолонки) Цикл + Символ = Сред(НаименованиеКолонки, Индекс, 1); + Если Символ = "_" Тогда + ПозицияЗакрывающегоСимвола = СтрНайти(НаименованиеКолонки, "_", НаправлениеПоиска.СНачала, Индекс + 1); + КодСимвола = Сред(НаименованиеКолонки, Индекс + 1, ПозицияЗакрывающегоСимвола - Индекс - 1); + Результат = Результат + Символ(КодСимвола); + Индекс = ПозицияЗакрывающегоСимвола; + Иначе + Результат = Результат + Символ; + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Условное оформление управляемой формы. @@ -2653,16 +2743,16 @@ МодульВариантыОтчетов.СобратьСтатистикуКонфигурации(); КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда - МодульДатыЗапретаИзмененияСлужебный = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзмененияСлужебный"); - МодульДатыЗапретаИзмененияСлужебный.СобратьСтатистикуКонфигурации(); - КонецЕсли; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСКонтрагентами") Тогда МодульПроверкаКонтрагентов = ОбщегоНазначения.ОбщийМодуль("ПроверкаКонтрагентов"); МодульПроверкаКонтрагентов.СобратьСтатистикуКонфигурации(); КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ФайловыеФункции") Тогда + МодульФайловыеФункции = ОбщегоНазначения.ОбщийМодуль("ФайловыеФункции"); + МодульФайловыеФункции.СобратьСтатистикуКонфигурации(); + КонецЕсли; + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -2711,7 +2801,7 @@ // Заполняет структуру параметров, необходимых для работы клиентского кода // данной подсистемы при запуске конфигурации, т.е. в обработчиках событий. // - ПередНачаломРаботыСистемы, -// - ПриНачалеРаботыСистемы +// - ПриНачалеРаботыСистемы. // // Важно: при запуске недопустимо использовать команды сброса кэша // повторно используемых модулей, иначе запуск может привести @@ -2725,6 +2815,8 @@ // Функция ДобавитьПараметрыРаботыКлиентаПриЗапуске(Параметры) Экспорт + ЭтоВызовПередНачаломРаботыСистемы = Параметры.ПолученныеПараметрыКлиента <> Неопределено; + // Обязательные параметры для продолжения работы. Параметры.Вставить("РазделениеВключено", ОбщегоНазначенияПовтИсп.РазделениеВключено()); @@ -2749,15 +2841,36 @@ Параметры.Вставить("ТребуетсяПоказРекомендацииПоОбъемуОперативнойПамяти", ТребуетсяПоказРекомендацииПоОбъемуОперативнойПамяти() И Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ТекущиеДела")); - Если Параметры.ПолученныеПараметрыКлиента <> Неопределено Тогда + Параметры.Вставить("ЭтоСеансВнешнегоПользователя", ПользователиСлужебныйПовтИсп.ЭтоСеансВнешнегоПользователя()); + + Если ЭтоВызовПередНачаломРаботыСистемы Тогда Параметры.Вставить("ОпцииИнтерфейса", ОбщегоНазначенияПовтИсп.ОпцииИнтерфейса()); КонецЕсли; - Если Не ОбновлениеИнформационнойБазыСлужебный.ДобавитьПараметрыРаботыКлиентаПриЗапуске(Параметры) Тогда + Если ЭтоВызовПередНачаломРаботыСистемы Тогда + ОшибкаНедостаточноПравДляВходаВПрограмму = ПользователиСлужебный.ОшибкаНедостаточноПравДляВходаВПрограмму( + Не Параметры.ПолученныеПараметрыКлиента.Свойство("ОшибкаНедостаточноПравДляВходаВПрограмму")); + + Если ЗначениеЗаполнено(ОшибкаНедостаточноПравДляВходаВПрограмму) Тогда + Параметры.Вставить("ОшибкаНедостаточноПравДляВходаВПрограмму", ОшибкаНедостаточноПравДляВходаВПрограмму); + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РегламентныеЗадания") Тогда + МодульРегламентныеЗаданияСлужебный = ОбщегоНазначения.ОбщийМодуль("РегламентныеЗаданияСлужебный"); + // Форма показывается только администратору. + ПоказатьФормуБлокировки = МодульРегламентныеЗаданияСлужебный.УстановленаБлокировкаРаботыСВнешнимиРесурсами( + ЭтоВызовПередНачаломРаботыСистемы, Истина) И Пользователи.ЭтоПолноправныйПользователь(); + Параметры.Вставить("ПоказатьФормуБлокировкиРаботыСВнешнимиРесурсами", ПоказатьФормуБлокировки); + КонецЕсли; + + Если Не ОбновлениеИнформационнойБазыСлужебный.ДобавитьПараметрыРаботыКлиентаПриЗапуске(Параметры) + И ЭтоВызовПередНачаломРаботыСистемы Тогда Возврат Ложь; КонецЕсли; - Если Параметры.ПолученныеПараметрыКлиента <> Неопределено + Если ЭтоВызовПередНачаломРаботыСистемы И Не Параметры.ПолученныеПараметрыКлиента.Свойство("ПоказатьНерекомендуемуюВерсиюПлатформы") И ПоказатьНерекомендуемуюВерсиюПлатформы(Параметры) Тогда @@ -2767,7 +2880,7 @@ КонецЕсли; УстановитьПривилегированныйРежим(Истина); - Если Параметры.ПолученныеПараметрыКлиента <> Неопределено + Если ЭтоВызовПередНачаломРаботыСистемы И Не Параметры.ПолученныеПараметрыКлиента.Свойство("ВосстановитьСвязьСГлавнымУзлом") И Не ОбщегоНазначенияПовтИсп.РазделениеВключено() И ПланыОбмена.ГлавныйУзел() = Неопределено @@ -2780,7 +2893,7 @@ КонецЕсли; УстановитьПривилегированныйРежим(Ложь); - Если Параметры.ПолученныеПараметрыКлиента <> Неопределено + Если ЭтоВызовПередНачаломРаботыСистемы И НЕ (Параметры.РазделениеВключено И Не Параметры.ДоступноИспользованиеРазделенныхДанных) И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда @@ -2802,7 +2915,7 @@ РаботаВБезопасномРежимеСлужебный.ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры, Истина); - Если Параметры.ПолученныеПараметрыКлиента <> Неопределено + Если ЭтоВызовПередНачаломРаботыСистемы И НЕ Параметры.ПолученныеПараметрыКлиента.Свойство("ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском") И ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда @@ -2827,7 +2940,7 @@ КонецЕсли; // Проверка необходимости предварительного обновления параметров работы программы. - Если Параметры.ПолученныеПараметрыКлиента <> Неопределено + Если ЭтоВызовПередНачаломРаботыСистемы И НЕ Параметры.ПолученныеПараметрыКлиента.Свойство("НеобходимоОбновлениеПараметровРаботыПрограммы") Тогда Если НеобходимоОбновлениеПараметровРаботыПрограммы() Тогда @@ -2882,8 +2995,8 @@ КонецЕсли; Отказ = Ложь; - Если Параметры.ПолученныеПараметрыКлиента <> Неопределено Тогда - ПользователиСлужебный.ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры, Отказ); + Если ЭтоВызовПередНачаломРаботыСистемы Тогда + ПользователиСлужебный.ПриДобавленииПараметровРаботыКлиентаПриЗапуске(Параметры, Отказ, Истина); КонецЕсли; Если Отказ Тогда Возврат Ложь; @@ -2891,6 +3004,13 @@ ДобавитьОбщиеПараметрыРаботыКлиента(Параметры); + Если ЭтоВызовПередНачаломРаботыСистемы + И Параметры.Свойство("НеобходимоОбновлениеИнформационнойБазы") Тогда + // Не следует добавлять остальные параметры до окончания обновления ИБ, + // так как они могут рассчитывать, что обновление ИБ уже выполнено. + Возврат Ложь; + КонецЕсли; + Возврат Истина; КонецФункции @@ -3193,45 +3313,6 @@ КонецФункции -// Возвращает соответствие имен и серверных модулей. -Функция ИменаСерверныхМодулей() Экспорт - - СерверныеМодули = Новый Соответствие; - ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); - - Для Каждого ОбщийМодуль Из Метаданные.ОбщиеМодули Цикл - Если ОбщийМодуль.Глобальный Тогда - Продолжить; - КонецЕсли; - - ЭтоСерверныйМодуль = ОбщийМодуль.Сервер; - #Если ТолстыйКлиентУправляемоеПриложение Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - ЭтоСерверныйМодуль = ЭтоСерверныйМодуль Или ИнформационнаяБазаФайловая; - #КонецЕсли - - Если ЭтоСерверныйМодуль Тогда - СерверныеМодули.Вставить(Вычислить(ОбщийМодуль.Имя), ОбщийМодуль.Имя); - КонецЕсли; - КонецЦикла; - - Возврат Новый ФиксированноеСоответствие(СерверныеМодули); - -КонецФункции - -// Продолжение процедуры ЗапуститьФоновоеЗаданиеСКонтекстомКлиента. -Процедура ПередЗапускомФоновогоЗаданияСКонтекстомКлиента(ВсеПараметры) Экспорт - - УстановитьПривилегированныйРежим(Истина); - Если ПравоДоступа("Установка", Метаданные.ПараметрыСеанса.ПараметрыКлиентаНаСервере) Тогда - ПараметрыСеанса.ПараметрыКлиентаНаСервере = ВсеПараметры.ПараметрыКлиентаНаСервере; - КонецЕсли; - Справочники.ВерсииРасширений.ЗарегистрироватьИспользованиеВерсииРасширений(); - УстановитьПривилегированныйРежим(Ложь); - - РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации(ВсеПараметры.ИмяМетода, ВсеПараметры.Параметры); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Для справочника ИдентификаторыОбъектовМетаданных. @@ -3450,27 +3531,6 @@ КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Подтверждение завершения работы программы. - -// Прочитать настройку подтверждения завершения работы программы -// для текущего пользователя. -// -// Возвращаемое значение: -// Булево - значение настройки. -// -Функция ЗапрашиватьПодтверждениеПриЗавершенииПрограммы() Экспорт - Результат = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбщиеНастройкиПользователя", "ЗапрашиватьПодтверждениеПриЗавершенииПрограммы"); - - Если Результат = Неопределено Тогда - Результат = ОбщегоНазначения.ОбщиеПараметрыБазовойФункциональности().ЗапрашиватьПодтверждениеПриЗавершенииПрограммы; - СтандартныеПодсистемыВызовСервера.СохранитьНастройкуПодтвержденияПриЗавершенииПрограммы(Результат); - КонецЕсли; - - Возврат Результат; -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Обработчики подписок на события. @@ -3730,7 +3790,7 @@ КонецЕсли; КонецЕсли; - Если Метаданные.ОсновныеРоли.Количество() <> 2 + Если (Метаданные.ОсновныеРоли.Количество() <> 2 И Метаданные.ОсновныеРоли.Количество() <> 3) Или Не Метаданные.ОсновныеРоли.Содержит(Метаданные.Роли.АдминистраторСистемы) Или Не Метаданные.ОсновныеРоли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда ВызватьИсключение @@ -3828,42 +3888,6 @@ КонецПроцедуры -Процедура ИгнорироватьОтправкуОбъектовНачальногоОбраза(ЭлементДанных, ОтправкаЭлемента, Знач СозданиеНачальногоОбраза = Ложь) - - Если Не СозданиеНачальногоОбраза - И ЭтоОбъектНачальногоОбразаУзлаРИБ(ОбъектМетаданных(ЭлементДанных)) - И Не ЭтоПредопределенныйЭлемент(ЭлементДанных) Тогда - - ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; - - КонецЕсли; - -КонецПроцедуры - -Функция ПроверитьПолучениеОбъектовНачальногоОбраза(Знач ЭлементДанных, ПолучениеЭлемента, Отправитель) - - Если Отправитель = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - - Если ОбщегоНазначенияКлиентСервер.РежимОтладки() Тогда - - Если Отправитель.Метаданные().РаспределеннаяИнформационнаяБаза - И Не СозданиеНачальногоОбраза(ЭлементДанных) - И ЭтоОбъектНачальногоОбразаУзлаРИБ(ОбъектМетаданных(ЭлементДанных)) Тогда - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Объект ""%1"" (%2) входит в состав начального образа (см. служебное событие ПриПолученииОбъектовНачальногоОбразаПланаОбмена) - |для плана обмена ""%3"", но не исключен из подписок на события регистрации изменений для этого плана обмена.'"), - Строка(ЭлементДанных), - Строка(ОбъектМетаданных(ЭлементДанных)), - Строка(Отправитель)); - КонецЕсли; - - КонецЕсли; - -КонецФункции - Функция ОбъектМетаданных(Знач ЭлементДанных) Возврат ?(ТипЗнч(ЭлементДанных) = Тип("УдалениеОбъекта"), ЭлементДанных.Ссылка.Метаданные(), ЭлементДанных.Метаданные()); @@ -3907,28 +3931,6 @@ КонецФункции -Функция ЭтоПредопределенныйЭлемент(ЭлементДанных) - - ЭтоПредопределенный = Ложь; - ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(ЭлементДанных.Метаданные()); - - Если ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаСправочники() - ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаПланыВидовХарактеристик() - ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаПланыСчетов() - ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаПланыВидовРасчета() Тогда - - Если ЭлементДанных.Предопределенный Тогда - - ЭтоПредопределенный = Истина; - - КонецЕсли; - - КонецЕсли; - - Возврат ЭтоПредопределенный; - -КонецФункции - Функция ПараметрыАдминистрированияПоУмолчанию() ПараметрыАдминистрированияКластера = АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(); @@ -3954,7 +3956,20 @@ СписокСерверовКластера = СтрРазделить(СтрокаИмениСервера, ","); ИмяСервера = СписокСерверовКластера[0]; - РазделительПорта = СтрНайти(ИмяСервера, ":"); + + // Протокол может быть только tcp. Можно отбросить. + Если СтрНачинаетсяС(ВРег(ИмяСервера), "TCP://") Тогда + ИмяСервера = Сред(ИмяСервера, 7); + КонецЕсли; + + // Если в качестве имени сервера передается адрес IPv6, то порт может быть только после закрывающей квадратной скобки. + НачальнаяПозиция = СтрНайти(ИмяСервера, "]"); + Если НачальнаяПозиция <> 0 Тогда + РазделительПорта = СтрНайти(ИмяСервера, ":",, НачальнаяПозиция); + Иначе + РазделительПорта = СтрНайти(ИмяСервера, ":"); + КонецЕсли; + Если РазделительПорта > 0 Тогда АдресАгентаСервера = Сред(ИмяСервера, 1, РазделительПорта - 1); ПортКластера = Число(Сред(ИмяСервера, РазделительПорта + 1)); @@ -4149,7 +4164,7 @@ // ПослеОтправкиДанныхПодчиненному, // ПриОпределенииПоддерживаемыхВерсийПрограммныхИнтерфейсов. // -Процедура ПриДобавленииСлужебныхСобытийБазовойФункциональности(КлиентскиеСобытия, СерверныеСобытия) Экспорт +Процедура ПриДобавленииСлужебныхСобытийБазовойФункциональности(КлиентскиеСобытия, СерверныеСобытия) // КЛИЕНТСКИЕ СОБЫТИЯ. @@ -4572,7 +4587,7 @@ // Добавление обработчиков событий. // Доопределяет обработчики подсистемы БазоваяФункциональность. -Процедура ПриДобавленииОбработчиковСлужебныхСобытийБазовойФункциональности(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт +Процедура ПриДобавленииОбработчиковСлужебныхСобытийБазовойФункциональности(КлиентскиеОбработчики, СерверныеОбработчики) // КЛИЕНТСКИЕ ОБРАБОТЧИКИ. @@ -4588,25 +4603,25 @@ СерверныеОбработчики["СтандартныеПодсистемы.ОбновлениеВерсииИБ\ПриДобавленииОбработчиковОбновления"].Добавить( "СтандартныеПодсистемыСервер"); - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбязательныхОбъектовПланаОбмена"].Добавить( - "СтандартныеПодсистемыСервер"); - - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовИсключенийПланаОбмена"].Добавить( - "СтандартныеПодсистемыСервер"); - - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена"].Добавить( - "СтандартныеПодсистемыСервер"); - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПереименованийОбъектовМетаданных"].Добавить( "СтандартныеПодсистемыСервер"); СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам"].Добавить( "СтандартныеПодсистемыСервер"); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда + СерверныеОбработчики["СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриПолученииСпискаШаблонов"].Добавить( + "СтандартныеПодсистемыСервер"); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ВыгрузкаЗагрузкаДанных") Тогда СерверныеОбработчики[ "ТехнологияСервиса.ВыгрузкаЗагрузкаДанных\ПриЗаполненииТиповОбщихДанныхПоддерживающихСопоставлениеСсылокПриЗагрузке"].Добавить( "СтандартныеПодсистемыСервер"); + + СерверныеОбработчики[ + "ТехнологияСервиса.ВыгрузкаЗагрузкаДанных\ПриЗаполненииТиповИсключаемыхИзВыгрузкиЗагрузки"].Добавить( + "СтандартныеПодсистемыСервер"); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ТекущиеДела") Тогда @@ -4780,30 +4795,25 @@ // Дополнительная базовая функциональность обновления информационной базы. // Для процедур ЗагрузитьОбновитьПараметрыРаботыПрограммы, ОбновитьВсеПараметрыРаботыПрограммы. -Процедура ОбновитьПараметрыРаботыПрограммы(НайтиИзменения = Ложь, - ОшибкаУстановкиМонопольногоРежима = Неопределено, - ВФоне = Ложь) +Процедура ОбновитьПараметрыРаботыПрограммы(ОшибкаУстановкиМонопольногоРежима = Неопределено, ВФоне = Ложь) - ЕстьИзменения = Ложь; - ТолькоПроверка = Ложь; + ЕстьКритичныеИзменения = Ложь; + РежимОбновления = "Полный"; СнятьМонопольныйРежим = Ложь; - Если НайтиИзменения Тогда - ТолькоПроверка = Истина; - - ИначеЕсли НЕ МонопольныйРежим() Тогда + Если Не МонопольныйРежим() Тогда Попытка УстановитьМонопольныйРежим(Истина); СнятьМонопольныйРежим = Истина; Исключение СнятьМонопольныйРежим = Ложь; - ТолькоПроверка = Истина; + РежимОбновления = "Частичный"; КонецПопытки; КонецЕсли; БезИзменений = Новый Структура; Попытка - ПроверитьОбновитьПараметрыРаботыПрограммы(ЕстьИзменения, ТолькоПроверка, БезИзменений, ВФоне); + ПроверитьОбновитьПараметрыРаботыПрограммы(ЕстьКритичныеИзменения, РежимОбновления, БезИзменений, ВФоне); Исключение Если СнятьМонопольныйРежим Тогда УстановитьМонопольныйРежим(Ложь); @@ -4815,50 +4825,53 @@ УстановитьМонопольныйРежим(Ложь); КонецЕсли; - Если Не НайтиИзменения И ТолькоПроверка Тогда - Если ЕстьИзменения Тогда - Попытка - УстановитьМонопольныйРежим(Истина); - Исключение - ТекстОшибки = - НСтр("ru = 'Невозможно выполнить обновление информационной базы: - |- Невозможно установить монопольный режим - |- Версия конфигурации не предусматривает обновление без установки монопольного режима.'"); - - Если ОшибкаУстановкиМонопольногоРежима = Неопределено Тогда - ВызватьИсключение ТекстОшибки; - Иначе - ОшибкаУстановкиМонопольногоРежима = ТекстОшибки; - Возврат; - КонецЕсли; - КонецПопытки; - Попытка - ОбновитьПараметрыРаботыПрограммы(ЕстьИзменения); - Исключение - УстановитьМонопольныйРежим(Ложь); - ВызватьИсключение; - КонецПопытки; - УстановитьМонопольныйРежим(Ложь); - Иначе - // Монопольный режим не требуется. - ПроверитьОбновитьПараметрыРаботыПрограммы(ЕстьИзменения, Ложь, БезИзменений, ВФоне); - КонецЕсли; + Если РежимОбновления = "Полный" Или Не ЕстьКритичныеИзменения Тогда + Возврат; КонецЕсли; + РежимОбновления = "Полный"; + + Попытка + УстановитьМонопольныйРежим(Истина); // Повторная попытка установки монопольного режима. + Исключение + ТекстОшибки = + НСтр("ru = 'Невозможно выполнить обновление информационной базы: + |- Невозможно установить монопольный режим + |- Версия конфигурации не предусматривает обновление без установки монопольного режима.'"); + + Если ОшибкаУстановкиМонопольногоРежима = Неопределено Тогда + ВызватьИсключение ТекстОшибки; + Иначе + ОшибкаУстановкиМонопольногоРежима = ТекстОшибки; + Возврат; + КонецЕсли; + КонецПопытки; + + Попытка + ПроверитьОбновитьПараметрыРаботыПрограммы(ЕстьКритичныеИзменения, РежимОбновления, БезИзменений, ВФоне); + Исключение + УстановитьМонопольныйРежим(Ложь); + ВызватьИсключение; + КонецПопытки; + + УстановитьМонопольныйРежим(Ложь); + КонецПроцедуры // Для процедуры ОбновитьПараметрыРаботыПрограммы. -Процедура ПроверитьОбновитьПараметрыРаботыПрограммы(ЕстьИзменения, ТолькоПроверка, БезИзменений, ВФоне) +Процедура ПроверитьОбновитьПараметрыРаботыПрограммы(ЕстьКритичныеИзменения, РежимОбновления, БезИзменений, ВФоне) Если ТипЗнч(БезИзменений) <> Тип("Структура") Тогда БезИзменений = Новый Структура; КонецЕсли; - Если НЕ БезИзменений.Свойство("БазоваяФункциональностьСлужебныеСобытия") Тогда + ТолькоПроверка = РежимОбновления <> "Полный"; + + Если Не БезИзменений.Свойство("БазоваяФункциональностьСлужебныеСобытия") Тогда ЕстьТекущиеИзменения = Ложь; Константы.ПараметрыСлужебныхСобытий.СоздатьМенеджерЗначения().Обновить(ЕстьТекущиеИзменения, ТолькоПроверка); Если ЕстьТекущиеИзменения Тогда - ЕстьИзменения = Истина; + ЕстьКритичныеИзменения = Истина; Если ТолькоПроверка Тогда Возврат; КонецЕсли; @@ -4870,21 +4883,17 @@ КонецЕсли; КонецЕсли; - Если НЕ БезИзменений.Свойство("БазоваяФункциональностьИдентификаторыОбъектовМетаданных") Тогда + Если Не БезИзменений.Свойство("БазоваяФункциональностьИдентификаторыОбъектовМетаданных") Тогда Если СтандартныеПодсистемыПовтИсп.ОтключитьИдентификаторыОбъектовМетаданных() Тогда БезИзменений.Вставить("БазоваяФункциональностьИдентификаторыОбъектовМетаданных"); Иначе + // Критичные изменения: добавление, удаление или переименование объектов метаданных. ЕстьТекущиеИзменения = Ложь; - Если ТолькоПроверка Тогда - // Проверка только критичных изменений: добавление, удаление или переименование объектов метаданных. - Справочники.ИдентификаторыОбъектовМетаданных.ВыполнитьОбновлениеДанных(Ложь, ЕстьТекущиеИзменения, ТолькоПроверка, ЕстьТекущиеИзменения); - Иначе - Справочники.ИдентификаторыОбъектовМетаданных.ВыполнитьОбновлениеДанных(ЕстьТекущиеИзменения, Ложь, Ложь); - КонецЕсли; + Справочники.ИдентификаторыОбъектовМетаданных.ВыполнитьОбновлениеДанных(Ложь, ЕстьТекущиеИзменения, РежимОбновления, ЕстьТекущиеИзменения); Если ЕстьТекущиеИзменения Тогда - ЕстьИзменения = Истина; - Если ТолькоПроверка Тогда + ЕстьКритичныеИзменения = Истина; + Если РежимОбновления <> "Полный" Тогда Возврат; КонецЕсли; Иначе @@ -4901,7 +4910,7 @@ ЕстьТекущиеИзменения = Ложь; ПользователиСлужебный.ОбновитьПараметрыРаботыПользователей(ЕстьТекущиеИзменения, ТолькоПроверка); Если ЕстьТекущиеИзменения Тогда - ЕстьИзменения = Истина; + ЕстьКритичныеИзменения = Истина; Если ТолькоПроверка Тогда Возврат; КонецЕсли; @@ -4923,7 +4932,7 @@ ЕстьТекущиеИзменения = Ложь; МодульУправлениеДоступомСлужебный.ОбновитьПараметрыОграниченияДоступа(ЕстьТекущиеИзменения, ТолькоПроверка); Если ЕстьТекущиеИзменения Тогда - ЕстьИзменения = Истина; + ЕстьКритичныеИзменения = Истина; Если ТолькоПроверка Тогда Возврат; КонецЕсли; @@ -4985,4 +4994,37 @@ И ОперативнаяПамять < РекомендуемыйОбъем; КонецФункции +Процедура ИгнорироватьОтправкуДанныхОбработанныхВЦентральномУзлеРИБПриОбновленииИБ(ЭлементДанных, СозданиеНачальногоОбраза, Получатель) + + Перем Индекс, СтрокаНабора; + + Если Получатель <> Неопределено + И Не СозданиеНачальногоОбраза + И ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ДанныеОбработанныеВЦентральномУзлеРИБ") Тогда + + Индекс = ЭлементДанных.Количество() - 1; + + Пока Индекс > 0 Цикл + + СтрокаНабора = ЭлементДанных[Индекс]; + + Если СтрокаНабора.УзелПланаОбмена <> Получатель Тогда + ЭлементДанных.Удалить(СтрокаНабора); + КонецЕсли; + + Индекс = Индекс - 1; + + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +// См. одноименную процедуру в общем модуле ОчередьЗаданийПереопределяемый. +Процедура ПриПолученииСпискаШаблонов(Шаблоны) Экспорт + + Шаблоны.Добавить(Метаданные.РегламентныеЗадания.УдалениеУстаревшихПараметровРаботыВерсийРасширений.Имя); + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl b/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl index 9a37bf95e..bc30cfca5 100644 --- a/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl @@ -269,17 +269,18 @@ // кавычки ("). // Например: // "File=""c:\InfoBases\Trade""; Usr=""Director"";" +// Разделитель - Строка - символ, которым фрагменты отделяются друг от друга. // // Возвращаемое значение: // Структура - структура параметров, где ключ - имя параметра, значение - значение параметра. // -Функция ПолучитьПараметрыИзСтроки(Знач СтрокаПараметров) Экспорт +Функция ПолучитьПараметрыИзСтроки(Знач СтрокаПараметров, Знач Разделитель = ";") Экспорт Результат = Новый Структура; СимволДвойныеКавычки = Символ(34); // (") - МассивПодстрок = СтрРазделить(СтрокаПараметров, ";", Ложь); + МассивПодстрок = СтрРазделить(СтрокаПараметров, Разделитель, Ложь); Для Каждого СтрокаПараметра Из МассивПодстрок Цикл @@ -529,11 +530,11 @@ // // Пример 1: // Строка = "1234"; ДлинаСтроки = 10; Символ = "0"; Режим = "Слева" -// Возврат: "0000001234" +// Возврат: "0000001234". // // Пример 2: // Строка = " 1234 "; ДлинаСтроки = 10; Символ = "#"; Режим = "Справа" -// Возврат: "1234######" +// Возврат: "1234######". // Функция ДополнитьСтроку(Знач Строка, Знач ДлинаСтроки, Знач Символ = "0", Знач Режим = "Слева") Экспорт @@ -735,9 +736,10 @@ // Примеры: // ЧислоЦифрамиПредметИсчисленияПрописью(23, "минуту,минуты,минут") = "23 минуты"; // ЧислоЦифрамиПредметИсчисленияПрописью(15, "минуту,минуты,минут") = "15 минут". -Функция ЧислоЦифрамиПредметИсчисленияПрописью(Знач Число, Знач ПараметрыПредметаИсчисления) Экспорт - - Результат = Формат(Число, "ЧН=0"); +Функция ЧислоЦифрамиПредметИсчисленияПрописью(Знач Число, Знач ПараметрыПредметаИсчисления, + Знач ДобавлятьЧислоКРезультату = Истина) Экспорт + + Результат = ?(ДобавлятьЧислоКРезультату, Формат(Число, "ЧН=0") + " ", ""); ПредставленияПредмета = Новый Массив; ПараметрыПредметаИсчисления = СтрРазделить(ПараметрыПредметаИсчисления, ","); @@ -751,7 +753,7 @@ КонецЕсли; Индекс = ?(Число = 1, 0, ?(Число > 1 И Число < 5, 1, 2)); - Результат = Результат + " " + ПредставленияПредмета[Индекс]; + Результат = Результат + ПредставленияПредмета[Индекс]; Возврат Результат; @@ -1024,7 +1026,6 @@ КонецФункции - #Область УстаревшиеПроцедурыИФункции // Устарела. Следует использовать СтрСоединить. diff --git a/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl b/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl index 8b5354ca4..a85aa6439 100644 --- a/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/СтруктураПодчиненностиПереопределяемый/Module.bsl @@ -29,8 +29,8 @@ // Параметры: // Выборка - КоллекцияДанных - структура или выборка из результатов запроса // в которой содержатся дополнительные реквизиты, на основании -// которых можно сформировать переопределенное представление до- -// кумента для вывода в отчет "Структура подчиненности". +// которых можно сформировать переопределенное представление +// документа для вывода в отчет "Структура подчиненности". // // Возвращаемое значение: // Строка,Неопределено - переопределенное представление документа, или Неопределено, diff --git a/SSL/src/CommonModules/ТекущиеДелаПереопределяемый/Module.bsl b/SSL/src/CommonModules/ТекущиеДелаПереопределяемый/Module.bsl index 1a27cdd4a..5fc4e133c 100644 --- a/SSL/src/CommonModules/ТекущиеДелаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ТекущиеДелаПереопределяемый/Module.bsl @@ -39,7 +39,7 @@ КонецПроцедуры // Устанавливает общие параметры запросов для расчета текущих дел. -// См. ТекущиеДелаСлужебный.УстановитьОбщиеПараметрыЗапросов(). +// См. ТекущиеДела.УстановитьОбщиеПараметрыЗапросов(). // // Параметры: // Запрос - выполняемый запрос. diff --git a/SSL/src/CommonModules/ТекущиеДелаСервер/Module.bsl b/SSL/src/CommonModules/ТекущиеДелаСервер/Module.bsl index 1c849b673..dc5f68ba7 100644 --- a/SSL/src/CommonModules/ТекущиеДелаСервер/Module.bsl +++ b/SSL/src/CommonModules/ТекущиеДелаСервер/Module.bsl @@ -37,5 +37,52 @@ КонецФункции +// Возвращает структуру общих значений, используемых для расчета текущих дел. +// +// Возвращаемое значение: +// Структура с ключами: +// * Пользователь - СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи - текущий пользователь. +// * ЭтоПолноправныйПользователь - Булево - Истина, если пользователь полноправный. +// * ТекущаяДата - Дата - текущая дата сеанса. +// * ПустаяДата - Дата - пустая дата. +// +Функция ОбщиеПараметрыЗапросов() Экспорт + Возврат ТекущиеДелаСлужебный.ОбщиеПараметрыЗапросов(); +КонецФункции + +// Устанавливает общие параметры запросов для расчета текущих дел. +// +// Параметры: +// Запрос - выполняемый запрос. +// ОбщиеПараметрыЗапросов - Структура - общие значения для расчета показателей. +// +Процедура УстановитьПараметрыЗапросов(Запрос, ОбщиеПараметрыЗапросов) Экспорт + ТекущиеДелаСлужебный.УстановитьОбщиеПараметрыЗапросов(Запрос, ОбщиеПараметрыЗапросов); +КонецПроцедуры + +// Получает числовые значения дел из переданного запроса. +// +// Запрос с данными должен содержать только одну строку с произвольным количеством полей. +// Значения этих полей должны являться значениями соответствующих показателей. +// +// Пример простейшего запроса: +// ВЫБРАТЬ +// Количество(*) КАК <Имя предопределенного элемента - показателя количества документов>. +// ИЗ +// Документ.<Имя документа>. +// +// Параметры: +// Запрос - выполняемый запрос. +// ОбщиеПараметрыЗапросов - Структура - общие значения для расчета текущих дел. +// +// Возвращаемое значение: +// Структура со свойствами: +// * Ключ - Строка - имя показателя текущих дел. +// * Значение - Число - числовое значение показателя. +// +Функция ЧисловыеПоказателиТекущихДел(Запрос, ОбщиеПараметрыЗапросов = Неопределено) Экспорт + Возврат ТекущиеДелаСлужебный.ЧисловыеПоказателиТекущихДел(Запрос, ОбщиеПараметрыЗапросов); +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl b/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl index aada72435..b05219763 100644 --- a/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ТекущиеДелаСлужебный/Module.bsl @@ -41,12 +41,9 @@ // Заполняет список текущих дел пользователя. // // Параметры: -// АдресХранилища - Строка - адрес временного хранилища, куда будет помещен -// результат выполнения функции. -// Если не задано, возвращает таблицу значения. -// -// Возвращаемое значение: -// ТекущиеДела - ТаблицаЗначений - таблица значений с колонками: +// Параметры - Структура - пустая структура. +// АдресРезультата - Строка - адрес временного хранилища, куда будет помещен +// список текущих дел пользователя - ТаблицаЗначений: // * Идентификатор - Строка - внутренний идентификатор дела, используемый механизмом "Текущие дела". // * ЕстьДела - Булево - если Истина, дело выводится в списке текущих дел пользователя. // * Важное - Булево - если Истина, дело будет выделено красным цветом. @@ -59,14 +56,7 @@ // или объект метаданных подсистема. // * Подсказка - Строка - текст подсказки. // -Функция СписокТекущихДелПользователя(АдресХранилища, ПараметрыКлиентаНаСервере = Неопределено) Экспорт - - // Проброс параметров клиента в фоновое задание. - Если ПараметрыКлиентаНаСервере <> Неопределено Тогда - УстановитьПривилегированныйРежим(Истина); - ПараметрыСеанса.ПараметрыКлиентаНаСервере = ПараметрыКлиентаНаСервере; - УстановитьПривилегированныйРежим(Ложь); - КонецЕсли; +Процедура СформироватьСписокТекущихДелПользователя(Параметры, АдресРезультата) Экспорт ТекущиеДела = НоваяТаблицаТекущихДел(); @@ -89,9 +79,9 @@ // Постобработка результата. ПреобразоватьТаблицуТекущихДел(ТекущиеДела); - ПоместитьВоВременноеХранилище(ТекущиеДела, АдресХранилища); + ПоместитьВоВременноеХранилище(ТекущиеДела, АдресРезультата); -КонецФункции +КонецПроцедуры // Возвращает структуру сохраненных настроек отображения дел // для текущего пользователя. @@ -117,6 +107,22 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов. + +// См. одноименную процедуру в общем модуле ПользователиПереопределяемый. +Процедура ПриОпределенииНазначенияРолей(НазначениеРолей) Экспорт + + // СовместноДляПользователейИВнешнихПользователей. + НазначениеРолей.СовместноДляПользователейИВнешнихПользователей.Добавить( + Метаданные.Роли.ИспользованиеТекущихДел.Имя); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + // Получает числовые значения дел из переданного запроса. // // Запрос с данными должен содержать только одну строку с произвольным количеством полей. @@ -126,7 +132,7 @@ // ВЫБРАТЬ // Количество(*) КАК <Имя предопределенного элемента - показателя количества документов>. // ИЗ -// Документ.<Имя документа> +// Документ.<Имя документа>. // // Параметры: // Запрос - выполняемый запрос. @@ -199,10 +205,6 @@ КонецПроцедуры -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - // Только для внутреннего использования. // Процедура УстановитьНачальныйПорядокРазделов(ТекущиеДела) Экспорт diff --git a/SSL/src/CommonModules/ТрансляцияXDTO/Module.bsl b/SSL/src/CommonModules/ТрансляцияXDTO/Module.bsl index 6add9ef46..a4311f8eb 100644 --- a/SSL/src/CommonModules/ТрансляцияXDTO/Module.bsl +++ b/SSL/src/CommonModules/ТрансляцияXDTO/Module.bsl @@ -41,7 +41,7 @@ // // Параметры: // ИсходныйОбъект - ОбъектXDTO, транслируемый объект, -// РезультирующаяВерсия - строка, пространство имен результирующей версии, +// РезультирующаяВерсия - строка, пространство имен результирующей версии. // // Возвращаемое значение: // ОбъектXDTO - результат трансляции объекта. diff --git a/SSL/src/CommonModules/ТрансляцияXDTOСлужебный/Module.bsl b/SSL/src/CommonModules/ТрансляцияXDTOСлужебный/Module.bsl index 608bab552..948d4c26f 100644 --- a/SSL/src/CommonModules/ТрансляцияXDTOСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ТрансляцияXDTOСлужебный/Module.bsl @@ -22,72 +22,6 @@ КонецФункции // СформироватьОписаниеВерсии() -// Формирует человекочитаемое представление версии интерфейса сообщений. -// -// Параметры: -// ОписаниеВерсии - Структура, результат выполнения функции СформироватьОписаниеВерсии(). -// -// Возвращаемое значение: строка. -// -Функция СформироватьПредставлениеВерсии(ОписаниеВерсии) Экспорт - - Результат = ""; - - Если ЗначениеЗаполнено(ОписаниеВерсии.Номер) Тогда - - Результат = ОписаниеВерсии.Номер; - - КонецЕсли; - - Если ЗначениеЗаполнено(ОписаниеВерсии.Пакет) Тогда - - ПредставлениеПакета = "{" + ОписаниеВерсии.Пакет + "}"; - - Если Не ПустаяСтрока(Результат) Тогда - Результат = Результат + " (" + ПредставлениеПакета + ")"; - Иначе - Результат = ПредставлениеПакета; - КонецЕсли; - - КонецЕсли; - - Возврат Результат; - -КонецФункции - -// При наличии нескольких цепочек трансляции сообщения из одной версии в другую, -// возвращает наиболее оптимальную (содержащую меньше всего этапов). -// -// Параметры: -// ЦепочкиТрансляции - Массив, полученные в результате работы функции НайтиЦепочкиТрансляции(). -// -// Возвращаемое значение: -// ТаблицаЗначений - элемент массива, цепочка трансляции, содержащая наименьшее количество этапов. -Функция ВыбратьЦепочкуТрансляции(Знач ЦепочкиТрансляции) Экспорт - - Если ЦепочкиТрансляции.Количество() = 1 Тогда - Возврат ЦепочкиТрансляции.Получить(0); - Иначе - - ТекущийВыбор = Неопределено; - - Для Каждого ЦепочкаТрансляции Из ЦепочкиТрансляции Цикл - - Если ТекущийВыбор = Неопределено Тогда - ТекущийВыбор = ЦепочкаТрансляции; - Иначе - ТекущийВыбор = ?(ЦепочкаТрансляции.Количество() < ТекущийВыбор.Количество(), - ЦепочкаТрансляции, ТекущийВыбор); - КонецЕсли; - - КонецЦикла; - - Возврат ТекущийВыбор; - - КонецЕсли; - -КонецФункции - // Для внутреннего использования. Функция ПолучитьИнтерфейсСообщения(Знач Сообщение) Экспорт @@ -167,6 +101,36 @@ КонецФункции +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Возвращает пакеты, входящие в зависимости исходного пакета. +// +// Параметры: +// ПакетОбъектаСообщения - строка, пространство имен пакета, для которого выполняется +// поиск зависимостей. +// +// Возвращаемое значение: +// ФиксированныйМассив, элементы - строка. +// +Функция ПолучитьЗависимостиПакета(Знач ПакетОбъектаСообщения) + + Результат = Новый Массив(); + ЗависимостиПакета = ФабрикаXDTO.Пакеты.Получить(ПакетОбъектаСообщения).Зависимости; + Для Каждого Зависимость Из ЗависимостиПакета Цикл + + ПакетЗависимостиСообщения = Зависимость.URIПространстваИмен; + Результат.Добавить(ПакетЗависимостиСообщения); + ВложенныеЗависимости = ПолучитьЗависимостиПакета(ПакетЗависимостиСообщения); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, ВложенныеЗависимости, Истина); + + КонецЦикла; + + Возврат Новый ФиксированныйМассив(Результат); + +КонецФункции + // Возвращает цепочку выполнения обработчиков трансляции между версиями интерфейса сообщений. // Если в конфигурации зарегистрировано несколько возможных цепочек трансляции между версиями // интерфейса сообщений - вернет оптимальную (содержащую меньшее число этапов). @@ -191,7 +155,7 @@ // Ключ - Пакет результирующей версии сообщения. // Значение - ОбщийМодуль, обработчик трансляции. // -Функция ПолучитьЦепочкуТрансляции(Знач ОписаниеИсходнойВерсии, Знач ОписаниеРезультирующейВерсии) Экспорт +Функция ПолучитьЦепочкуТрансляции(Знач ОписаниеИсходнойВерсии, Знач ОписаниеРезультирующейВерсии) ЗарегистрированныеОбработчикиТрансляции = ПолучитьОбработчикиТрансляции(); @@ -210,35 +174,71 @@ КонецФункции -// Возвращает пакеты, входящие в зависимости исходного пакета. +// При наличии нескольких цепочек трансляции сообщения из одной версии в другую, +// возвращает наиболее оптимальную (содержащую меньше всего этапов). // // Параметры: -// ПакетОбъектаСообщения - строка, пространство имен пакета, для которого выполняется -// поиск зависимостей. +// ЦепочкиТрансляции - Массив, полученные в результате работы функции НайтиЦепочкиТрансляции(). // // Возвращаемое значение: -// ФиксированныйМассив, элементы - строка. -// -Функция ПолучитьЗависимостиПакета(Знач ПакетОбъектаСообщения) Экспорт +// ТаблицаЗначений - элемент массива, цепочка трансляции, содержащая наименьшее количество этапов. +Функция ВыбратьЦепочкуТрансляции(Знач ЦепочкиТрансляции) - Результат = Новый Массив(); - ЗависимостиПакета = ФабрикаXDTO.Пакеты.Получить(ПакетОбъектаСообщения).Зависимости; - Для Каждого Зависимость Из ЗависимостиПакета Цикл + Если ЦепочкиТрансляции.Количество() = 1 Тогда + Возврат ЦепочкиТрансляции.Получить(0); + Иначе - ПакетЗависимостиСообщения = Зависимость.URIПространстваИмен; - Результат.Добавить(ПакетЗависимостиСообщения); - ВложенныеЗависимости = ПолучитьЗависимостиПакета(ПакетЗависимостиСообщения); - ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, ВложенныеЗависимости, Истина); + ТекущийВыбор = Неопределено; - КонецЦикла; - - Возврат Новый ФиксированныйМассив(Результат); + Для Каждого ЦепочкаТрансляции Из ЦепочкиТрансляции Цикл + + Если ТекущийВыбор = Неопределено Тогда + ТекущийВыбор = ЦепочкаТрансляции; + Иначе + ТекущийВыбор = ?(ЦепочкаТрансляции.Количество() < ТекущийВыбор.Количество(), + ЦепочкаТрансляции, ТекущийВыбор); + КонецЕсли; + + КонецЦикла; + + Возврат ТекущийВыбор; + + КонецЕсли; КонецФункции -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции +// Формирует человекочитаемое представление версии интерфейса сообщений. +// +// Параметры: +// ОписаниеВерсии - Структура, результат выполнения функции СформироватьОписаниеВерсии(). +// +// Возвращаемое значение: строка. +// +Функция СформироватьПредставлениеВерсии(ОписаниеВерсии) + + Результат = ""; + + Если ЗначениеЗаполнено(ОписаниеВерсии.Номер) Тогда + + Результат = ОписаниеВерсии.Номер; + + КонецЕсли; + + Если ЗначениеЗаполнено(ОписаниеВерсии.Пакет) Тогда + + ПредставлениеПакета = "{" + ОписаниеВерсии.Пакет + "}"; + + Если Не ПустаяСтрока(Результат) Тогда + Результат = Результат + " (" + ПредставлениеПакета + ")"; + Иначе + Результат = ПредставлениеПакета; + КонецЕсли; + + КонецЕсли; + + Возврат Результат; + +КонецФункции // Для внутреннего использования. Функция ТранслироватьОбъект(Знач Объект, Знач ПравилаТрансляцииИнтерфейсов) diff --git a/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебный/Module.bsl b/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебный/Module.bsl index cad42d99c..87d63488d 100644 --- a/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УдалениеПомеченныхОбъектовСлужебный/Module.bsl @@ -24,6 +24,36 @@ КонецПроцедуры +// См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. +Процедура ПриДобавленииОбработчиковСлужебныхСобытий(КлиентскиеОбработчики, СерверныеОбработчики) Экспорт + // СЕРВЕРНЫЕ ОБРАБОТЧИКИ. + СерверныйМодуль = "УдалениеПомеченныхОбъектовСлужебный"; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда + Событие = "СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриПолученииСпискаШаблонов"; + СерверныеОбработчики[Событие].Добавить(СерверныйМодуль); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики служебных событий. + +// Обработчик события ПриПолученииСпискаШаблонов. +// +// Формирует список шаблонов заданий очереди. +// +// Параметры: +// Шаблоны - Массив строк. В параметр следует добавить имена предопределенных +// неразделенных регламентных заданий, которые должны использоваться в качестве +// шаблонов для заданий очереди. +// +Процедура ПриПолученииСпискаШаблонов(Шаблоны) Экспорт + + Шаблоны.Добавить("УдалениеПомеченных"); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/SSL/src/CommonModules/УправлениеДоступом/Module.bsl b/SSL/src/CommonModules/УправлениеДоступом/Module.bsl index 19063f374..2170e48f2 100644 --- a/SSL/src/CommonModules/УправлениеДоступом/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступом/Module.bsl @@ -109,7 +109,7 @@ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка в функции ЕстьРоль модуля УправлениеДоступом. |В наборе значений доступа указан вид доступа ПравоИзменения - |таблицы с идентификтором ""%1"". + |таблицы с идентификатором ""%1"". |В ограничении проверки роли (как дополнительного права) |может быть зависимость только от права Чтения.'"), Строка.ЗначениеДоступа); @@ -1455,13 +1455,16 @@ // ОписаниеПрофиля = УправлениеДоступом.НовоеОписаниеПрофиляГруппДоступа(); // ОписаниеПрофиля.Имя = "Пользователь"; // ОписаниеПрофиля.Идентификатор = "09e56dbf-90a0-11de-862c-001d600d9ad2"; -// ОписаниеПрофиля.Наименование = НСтр("ru = 'Пользователь'"); +// ОписаниеПрофиля.Наименование = +// НСтр("ru = 'Пользователь'", +// Метаданные.ОсновнойЯзык.КодЯзыка); // // Переопределение назначения. // ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ОписаниеПрофиля.Назначение, // Метаданные.ОпределяемыеТипы.ВнешнийПользователь.Тип.Типы()); // ОписаниеПрофиля.Описание = // НСтр("ru = 'Общие разрешенные действия для большинства пользователей. -// |Как правило, это права на просмотр данных информационной системы.'"); +// |Как правило, это права на просмотр данных информационной системы.'", +// Метаданные.ОсновнойЯзык.КодЯзыка); // // Использование 1С:Предприятия. // ОписаниеПрофиля.Роли.Добавить("ЗапускТонкогоКлиента"); // ОписаниеПрофиля.Роли.Добавить("ВыводНаПринтерФайлБуферОбмена"); @@ -1823,7 +1826,7 @@ // // Параметры: // СсылкаНаОбъект - СправочникСсылка.*, ДокументСсылка.*, ... -// Таблица - РегистрСведенийНаборЗаписей.НаборыЗначенийДоступа +// Таблица - РегистрСведенийНаборЗаписей.НаборыЗначенийДоступа. // Процедура УточнитьНаборыЗначенийДоступа(СсылкаНаОбъект, Таблица) @@ -2236,7 +2239,7 @@ // Дополнение к процедурам: // - ПриСозданииФормыЗначенияДоступа -// - ГруппыЗначенийДоступаРазрешающиеИзменениеЗначенийДоступа +// - ГруппыЗначенийДоступаРазрешающиеИзменениеЗначенийДоступа. Функция СвойстваГруппЗначенияДоступа(ТипЗначенияДоступа, ЗаголовокОшибки) diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl index 64609bf41..bb8d9a517 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl @@ -17,7 +17,7 @@ // ПриЗаполненииВидовДоступа, // ПриЗаполненииПоставляемыхПрофилейГруппДоступа, // ПриЗаполненииИспользованияВидаДоступа, -// ПриИзмененииНаборовЗначенийДоступа, +// ПриИзмененииНаборовЗначенийДоступа. // // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия) Экспорт @@ -234,6 +234,12 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриОбнаруженииНеУникальностиПредопределенного"].Добавить( "УправлениеДоступомСлужебный"); + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриОтправкеДанныхГлавному"].Добавить( + "УправлениеДоступомСлужебный"); + + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриОтправкеДанныхПодчиненному"].Добавить( + "УправлениеДоступомСлужебный"); + СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииДанныхОтГлавного"].Добавить( "УправлениеДоступомСлужебный"); @@ -246,12 +252,6 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПослеПолученияДанныхОтГлавного"].Добавить( "УправлениеДоступомСлужебный"); - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбязательныхОбъектовПланаОбмена"].Добавить( - "УправлениеДоступомСлужебный"); - - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена"].Добавить( - "УправлениеДоступомСлужебный"); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда СерверныеОбработчики["СтандартныеПодсистемы.ВариантыОтчетов\ПриНастройкеВариантовОтчетов"].Добавить( "УправлениеДоступомСлужебный"); @@ -546,12 +546,22 @@ КонецФункции +// Возвращает вид интерфейса пользователя для настройки доступа. +Функция УпрощенныйИнтерфейсНастройкиПравДоступа() Экспорт + + УпрощенныйИнтерфейс = Ложь; + УправлениеДоступомПереопределяемый.ПриОпределенииИнтерфейсаНастройкиДоступа(УпрощенныйИнтерфейс); + + Возврат УпрощенныйИнтерфейс = Истина; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в эту подсистему. // См. описание одноименной процедуры в общем модуле РегламентныеЗаданияПереопределяемый. // -Процедура ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости) Экспорт +Процедура ПриОпределенииНастроекРегламентныхЗаданий(Зависимости) Экспорт Зависимость = Зависимости.Добавить(); Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа; Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ОграничиватьДоступНаУровнеЗаписей; @@ -592,6 +602,17 @@ КонецПроцедуры +// См. одноименную процедуру в общем модуле ПользователиПереопределяемый. +Процедура ПриОпределенииНазначенияРолей(НазначениеРолей) Экспорт + + Для Каждого Роль Из Метаданные.Роли Цикл + Если ЭтоПрофильнаяРоль(Роль.Имя) Тогда + НазначениеРолей.ТолькоДляПользователейСистемы.Добавить(Роль.Имя); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + // См. процедуру ИзменитьДействияВФорме в общем модуле ПользователиПереопределяемый. Процедура ПриОпределенииДействийВФорме(Ссылка, ДействияВФорме) Экспорт @@ -599,46 +620,6 @@ КонецПроцедуры -// Переопределяет действие при авторизации администратора локальной ИБ -// или администратора области данных. -// -Процедура ПриАвторизацииАдминистратораПриНачалеРаботыСистемы(Администратор) Экспорт - - // Администратор автоматически добавляется в группу доступа Администраторы при авторизации. - Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Не ОбщегоНазначенияПовтИсп.РазделениеВключено()) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Недостаточно прав для добавления пользователя ""%1"" - |в группу доступа Администраторы.'"), - Строка(Администратор)); - КонецЕсли; - - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( - ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор); - - Если ПользовательИБ = Неопределено - Или Не ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда - Возврат; - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Пользователь", Администратор); - Запрос.Текст = - "ВЫБРАТЬ - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи - |ГДЕ - | ГруппыДоступаПользователи.Ссылка = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.Администраторы) - | И ГруппыДоступаПользователи.Пользователь = &Пользователь"; - - Если Запрос.Выполнить().Пустой() Тогда - Объект = Справочники.ГруппыДоступа.Администраторы.ПолучитьОбъект(); - Объект.Пользователи.Добавить().Пользователь = Администратор; - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); - КонецЕсли; - -КонецПроцедуры - // Переопределяет текст комментария при авторизации пользователя ИБ, // созданного в конфигураторе с административными правами. // Вызывается из Пользователи.АвторизоватьТекущегоПользователя(). @@ -649,14 +630,14 @@ // Процедура ПослеЗаписиАдминистратораПриАвторизации(Комментарий) Экспорт - Комментарий = НСтр("ru = 'Обнаружено, что пользователь информационной базы - |с ролью ""Полные права"" был создан в Конфигураторе: - | - |- пользователь не найден в справочнике Пользователи, - |- пользователь зарегистрирован в справочнике Пользователи, - |- пользователь добавлен в группу доступа Администраторы. - | - |Пользователей информационной базы следует создавать в режиме 1С:Предприятия.'"); + Комментарий = + НСтр("ru = 'Выполнен запуск от имени пользователя с ролью ""Полные права"", + |который не зарегистрирован в списке пользователей. + |Выполнена автоматическая регистрация в списке пользователей. + |Пользователь добавлен в группу доступа Администраторы. + | + |Для ведения списка и настройки прав пользователей предназначен список Пользователи, + |режим конфигурирования 1С:Предприятия для этого использовать не следует.'"); КонецПроцедуры @@ -691,23 +672,64 @@ КонецПроцедуры -// Доопределяет действия при записи пользователя, когда он записывается -// совместно с пользователем ИБ, у которого есть роль ПолныеПрава. +// Доопределяет действия при создании администратора в подсистеме Пользователи. // // Параметры: -// Пользователь - СправочникСсылка.Пользователи (изменение объекта запрещено). +// Администратор - СправочникСсылка.Пользователи (изменение объекта запрещено). +// Уточнение - Строка - поясняет при каких условиях был создан администратор. // -Процедура ПриЗаписиАдминистратора(Пользователь) Экспорт +Процедура ПриСозданииАдминистратора(Администратор, Уточнение) Экспорт - // Администраторы автоматически добавляются в группу доступа Администраторы. - Если ПривилегированныйРежим() Тогда - Объект = Справочники.ГруппыДоступа.Администраторы.ПолучитьОбъект(); - Если Объект.Пользователи.Найти(Пользователь, "Пользователь") = Неопределено Тогда - Объект.Пользователи.Добавить().Пользователь = Пользователь; - ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); - КонецЕсли; + Если ТипЗнч(Администратор) <> Тип("СправочникСсылка.Пользователи") Тогда + Возврат; КонецЕсли; + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Пользователь", Администратор); + Запрос.Текст = + "ВЫБРАТЬ + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи + |ГДЕ + | ГруппыДоступаПользователи.Ссылка = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.Администраторы) + | И ГруппыДоступаПользователи.Пользователь = &Пользователь"; + + Если Не Запрос.Выполнить().Пустой() Тогда + Возврат; + КонецЕсли; + + КомментарийДляЖурнала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Пользователь ""%1"" добавлен в группу доступа Администраторы по причине: + |%2'"), + Администратор, + Уточнение); + + Объект = Справочники.ГруппыДоступа.Администраторы.ПолучитьОбъект(); + + НачатьТранзакцию(); + Попытка + ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка, Объект.ВерсияДанных); + Если Объект.Пользователи.Найти(Администратор, "Пользователь") = Неопределено Тогда + Объект.Пользователи.Добавить().Пользователь = Администратор; + ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Управление доступом.Автоматическое изменение группы доступа Администраторы'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Информация, + Метаданные.Справочники.Пользователи, + Администратор, + КомментарийДляЖурнала, + РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); + КонецЕсли; + РазблокироватьДанныеДляРедактирования(Объект.Ссылка); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + КонецПроцедуры // Обновляет связь для новой группы пользователей (группы внешних пользователей). @@ -811,9 +833,133 @@ КонецПроцедуры +// Добавляет администраторов системы в группу, связанную с предопределенным профилем ОткрытиеВнешнихОтчетовИОбработок. +Процедура УстановитьПравоОткрытияВнешнихОтчетовИОбработок(ОткрытиеРазрешено) Экспорт + // В модели сервиса право открытия внешних отчетов и обработок не используется для пользователей областей данных. + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + // Поиск предопределенного профиля с ролью "ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок". + СвойстваПрофиля = СвойстваПрофиляОткрытиеВнешнихОтчетовИОбработок(); + + // Удаление роли "ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок" из профиля "Администратор". + ПрофильАдминистратора = ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент("Справочник.ПрофилиГруппДоступа.Администратор"); + Если ПрофильАдминистратора <> Неопределено Тогда + ПрофильОбъект = ПрофильАдминистратора.ПолучитьОбъект(); + Найденные = ПрофильОбъект.Роли.НайтиСтроки(Новый Структура("Роль", СвойстваПрофиля.Роль)); + Если Найденные.Количество() > 0 Тогда + Для Каждого СтрокаТаблицы Из Найденные Цикл + ПрофильОбъект.Роли.Удалить(СтрокаТаблицы); + КонецЦикла; + // При обновлении ИБ важно, чтобы изменения уехали в подчиненный узел. + ПрофильОбъект.Записать(); + КонецЕсли; + КонецЕсли; + + // В расширенном интерфейсе группа профиля создается безусловно (вне зависимости от принятого решения). + УпрощенныйИнтерфейс = УпрощенныйИнтерфейсНастройкиПравДоступа(); + ГруппаДоступаМодифицирована = Ложь; + Если Не УпрощенныйИнтерфейс Тогда + ГруппаПрофиля = ГруппаДоступаОткрытиеВнешнихОтчетовИОбработок(СвойстваПрофиля); + КонецЕсли; + + Если ОткрытиеРазрешено Тогда + + // Включение администраторов в группы с этим профилем. + ГруппаДоступаМодифицирована = Ложь; + Если Не УпрощенныйИнтерфейс Тогда + ГруппаДоступаОбъект = ГруппаПрофиля.ПолучитьОбъект() + КонецЕсли; + РольАдминистратора = Метаданные.Роли.АдминистраторСистемы; + АдминистраторыСРолью = Новый Массив; + ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); + Для Каждого ПользовательИБ Из ПользователиИБ Цикл + Если ПользовательИБ.Роли.Содержит(РольАдминистратора) Тогда + Пользователь = Справочники.Пользователи.НайтиПоРеквизиту( + "ИдентификаторПользователяИБ", + ПользовательИБ.УникальныйИдентификатор); + Если Пользователь = Неопределено Тогда + Продолжить; + КонецЕсли; + Если УпрощенныйИнтерфейс Тогда + // В упрощенном интерфейсе каждый администратор включаются в отдельную группу. + ВключитьОтключитьПрофильПользователя(Пользователь, СвойстваПрофиля.Ссылка, Истина); + Иначе + // В расширенном интерфейсе администраторы включаются в одну группу, связанную с предопределенным профилем. + Если ГруппаДоступаОбъект.Пользователи.Найти(Пользователь, "Пользователь") = Неопределено Тогда + ГруппаДоступаМодифицирована = Истина; + ГруппаДоступаОбъект.Пользователи.Добавить().Пользователь = Пользователь; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + Если Не УпрощенныйИнтерфейс И ГруппаДоступаМодифицирована Тогда + // При обновлении ИБ важно, чтобы изменения уехали в подчиненный узел. + ГруппаДоступаОбъект.Записать(); + КонецЕсли; + + Иначе + + // Удаление роли из всех профилей, за исключением предопределенного. + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ПрофилиГруппДоступаРоли.Ссылка + |ИЗ + | Справочник.ПрофилиГруппДоступа.Роли КАК ПрофилиГруппДоступаРоли + |ГДЕ + | ПрофилиГруппДоступаРоли.Роль = &Роль + | И ПрофилиГруппДоступаРоли.Ссылка <> &ИсключаемыйПрофиль"; + Запрос.УстановитьПараметр("Роль", СвойстваПрофиля.Роль); + Запрос.УстановитьПараметр("ИсключаемыйПрофиль", СвойстваПрофиля.Ссылка); + МассивПрофилей = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + Для Каждого Профиль Из МассивПрофилей Цикл + ПрофильОбъект = Профиль.ПолучитьОбъект(); + Найденные = ПрофильОбъект.Роли.НайтиСтроки(Новый Структура("Роль", СвойстваПрофиля.Роль)); + Для Каждого СтрокаТаблицы Из Найденные Цикл + ПрофильОбъект.Роли.Удалить(СтрокаТаблицы); + КонецЦикла; + // При обновлении ИБ важно, чтобы изменения уехали в подчиненный узел. + ПрофильОбъект.Записать(); + КонецЦикла; + + // Очистка состава групп доступа, связанных с предопределенным профилем. + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ГруппыДоступа.Ссылка + |ИЗ + | Справочник.ГруппыДоступа КАК ГруппыДоступа + |ГДЕ + | ГруппыДоступа.Профиль = &Профиль"; + Запрос.УстановитьПараметр("Профиль", СвойстваПрофиля.Ссылка); + МассивГрупп = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + Для Каждого ГруппаДоступа Из МассивГрупп Цикл + ГруппаДоступаОбъект = ГруппаДоступа.ПолучитьОбъект(); + ГруппаДоступаОбъект.Пользователи.Очистить(); + // При обновлении ИБ важно, чтобы изменения уехали в подчиненный узел. + ГруппаДоступаОбъект.Записать(); + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Прочие процедуры и функции. +// Определяет принадлежность роли специальной группе профильных ролей. +// +// Возвращаемое значение: +// Булево. +// +Функция ЭтоПрофильнаяРоль(ИмяРоли) Экспорт + + Возврат ВРег(Лев(ИмяРоли, СтрДлина("Профиль"))) = ВРег("Профиль"); + +КонецФункции + // Возвращает профили текущего пользователя у которых есть роль БазовыеПрава или // или это профиль Администратор. // @@ -960,6 +1106,14 @@ НовыеРоли.Индексы.Добавить("Роль"); + Если НовыеРоли.Найти("ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок", "Роль") = Неопределено Тогда + РолиТекущегоАдминистратора = РолиАдминистратора; + Иначе + РолиТекущегоАдминистратора = Новый ФиксированноеСоответствие(РолиАдминистратора); + РолиТекущегоАдминистратора = Новый Соответствие(РолиТекущегоАдминистратора); + РолиТекущегоАдминистратора.Вставить("ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок", Истина); + КонецЕсли; + // Проверка старых ролей. СтарыеРоли = Новый Соответствие; РолиДляДобавления = Новый Соответствие; @@ -977,12 +1131,12 @@ Для каждого Роль Из ПользовательИБ.Роли Цикл ИмяРоли = Роль.Имя; СтарыеРоли.Вставить(ИмяРоли, Истина); - Если РолиАдминистратора[ИмяРоли] = Неопределено Тогда + Если РолиТекущегоАдминистратора[ИмяРоли] = Неопределено Тогда РолиДляУдаления.Вставить(ИмяРоли, Истина); КонецЕсли; КонецЦикла; - Для каждого КлючИЗначение Из РолиАдминистратора Цикл + Для каждого КлючИЗначение Из РолиТекущегоАдминистратора Цикл Если СтарыеРоли[КлючИЗначение.Ключ] = Неопределено Тогда РолиДляДобавления.Вставить(КлючИЗначение.Ключ, Истина); @@ -1236,10 +1390,14 @@ Обработчик.РежимВыполнения = "Оперативно"; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.3.1.79"; + Обработчик.Версия = "2.3.2.23"; Обработчик.Процедура = "РегистрыСведений.ЗначенияГруппДоступа.ОбновитьДанныеРегистра"; Обработчик.РежимВыполнения = "Оперативно"; + Обработчик = Обработчики.Добавить(); + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.Процедура = "УправлениеДоступомСлужебный.СоздатьПрофильОткрытияВнешнихОтчетовИОбработок"; + КонецПроцедуры // См. комментарий одноименной процедуры общего модуля ОбновлениеИнформационнойБазыПереопределяемый. @@ -1385,6 +1543,36 @@ КонецПроцедуры +// Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной информационной базе. +// +// Параметры: +// см. описание обработчика события ПриОтправкеДанныхГлавному() в синтаксис-помощнике. +// +Процедура ПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента, Получатель) Экспорт + + Если ИмяОбъектаПодсистемыУправлениеДоступомНачинаетсяСУдалить(ЭлементДанных) Тогда + ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; + КонецЕсли; + +КонецПроцедуры + +// Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной информационной базе. +// +// Параметры: +// см. описание обработчика события ПриОтправкеДанныхПодчиненному() в синтаксис-помощнике. +// +Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель) Экспорт + + Если СозданиеНачальногоОбраза Тогда + Возврат; + КонецЕсли; + + Если ИмяОбъектаПодсистемыУправлениеДоступомНачинаетсяСУдалить(ЭлементДанных) Тогда + ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; + КонецЕсли; + +КонецПроцедуры + // Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной // информационной базе. // @@ -1393,13 +1581,19 @@ // Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт + // Стандартная обработка не переопределяется. Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда - // Стандартная обработка не переопределяется. - Иначе - // Администраторы назначаются во всех подчиненных РИБ-узлах независимо. - Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ГруппыДоступа") Тогда - Справочники.ГруппыДоступа.ВосстановитьСоставУчастниковГруппыДоступаАдминистраторы(ЭлементДанных, ОтправкаНазад); - КонецЕсли; + Возврат; + КонецЕсли; + + Если ИмяОбъектаПодсистемыУправлениеДоступомНачинаетсяСУдалить(ЭлементДанных) Тогда + ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; + Возврат; + КонецЕсли; + + // Администраторы назначаются во всех подчиненных РИБ-узлах независимо. + Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ГруппыДоступа") Тогда + Справочники.ГруппыДоступа.ВосстановитьСоставУчастниковГруппыДоступаАдминистраторы(ЭлементДанных, ОтправкаНазад); КонецЕсли; КонецПроцедуры @@ -1412,10 +1606,17 @@ // Процедура ПриПолученииДанныхОтПодчиненного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад, Отправитель) Экспорт + // Стандартная обработка не переопределяется. Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда - // Стандартная обработка не переопределяется. - - ИначеЕсли Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + Если ИмяОбъектаПодсистемыУправлениеДоступомНачинаетсяСУдалить(ЭлементДанных) Тогда + ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; + Возврат; + КонецЕсли; + + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда // Администраторы назначаются во всех подчиненных РИБ-узлах независимо. Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ГруппыДоступа") Тогда @@ -1429,7 +1630,6 @@ ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ЗначенияГруппДоступа") ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.НаборыЗначенийДоступа") ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.НастройкиПравОбъектов") - ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.УдалитьПраваПоЗначениямДоступа") ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ТаблицыГруппДоступа") Тогда // Получение данных из автономного рабочего места пропускается, а для соответствия @@ -1474,138 +1674,30 @@ КонецПроцедуры -// Используется для получения объектов метаданных обязательных для плана обмена. -// Если подсистема имеет объекты метаданных обязательные для включения в состав плана обмена, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты - Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. -// Истина - требуется получить список объектов плана обмена РИБ; -// Ложь - требуется получить список для плана обмена НЕ РИБ. -// -Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт - - Если РаспределеннаяИнформационнаяБаза Тогда - - Объекты.Добавить(Метаданные.Константы.ПараметрыОграниченияДоступа); - Объекты.Добавить(Метаданные.РегистрыСведений.ПраваРолей); - Объекты.Добавить(Метаданные.РегистрыСведений.ЗависимостиПравДоступа); - - КонецЕсли; - -КонецПроцедуры - -// Используется для получения объектов метаданных, которые должны входить в состав плана обмена -// и НЕ должны входить в состав подписок на события регистрации изменений для этого плана обмена. -// Эти объекты метаданных используются только в момент создания начального образа подчиненного узла -// и не мигрируют в процессе обмена. -// Если подсистема имеет объекты метаданных, которые участвуют только в создании начального образа подчиненного узла, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты - Массив. Массив объектов метаданных конфигурации. -// -Процедура ПриПолученииОбъектовНачальногоОбразаПланаОбмена(Объекты) Экспорт - - Объекты.Добавить(Метаданные.Константы.ПараметрыОграниченияДоступа); - Объекты.Добавить(Метаданные.РегистрыСведений.ЗависимостиПравДоступа); - Объекты.Добавить(Метаданные.РегистрыСведений.ПраваРолей); - -КонецПроцедуры - // Обработчики событий подсистемы ВариантыОтчетов. // Содержит настройки размещения вариантов отчетов в панели отчетов. // // Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// Настройки - Коллекция - Содержит настройки всех отчетов и вариантов конфигурации. +// Используется для передачи в параметрах вспомогательных методов. // // Описание: -// В данной процедуре необходимо указать каким именно образом предопределенные варианты отчетов -// будут регистрироваться в программе и показываться в панели отчетов. +// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Вспомогательные методы: -// НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.<ИмяОтчета>); -// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// -// Данные функции получают соответственно настройки отчета и настройки варианта отчета следующей структуры: -// * Включен - Булево - -// Если Ложь, то вариант отчета не регистрируется в подсистеме. -// Используется для удаления технических и контекстных вариантов отчетов из всех интерфейсов. -// Эти варианты отчета по прежнему можно открывать в форме отчета программно при помощи -// параметров открытия (см. справку по "Расширение управляемой формы для отчета.КлючВарианта"). -// * ВидимостьПоУмолчанию - Булево - -// Если Ложь, то вариант отчета по умолчанию скрыт в панели отчетов. -// Пользователь может "включить" его в режиме настройки панели отчетов -// или открыть через форму "Все отчеты". -// * Описание - Строка - Дополнительная информация по варианту отчета. -// В панели отчетов выводится в качестве подсказки. -// Должно расшифровывать для пользователя содержимое варианта отчета -// и не должно дублировать наименование варианта отчета. -// * Размещение - Соответствие - Настройки размещения варианта отчета в разделах. -// ** Ключ - ОбъектМетаданных: Подсистема - Подсистема, в которой размещается отчет или вариант отчета. -// ** Значение - Строка - Необязательный. Настройки размещения в подсистеме. -// "" - Выводить отчет в своей группе обычным шрифтом. -// "Важный" - Выводить отчет в своей группе жирным шрифтом. -// "СмТакже" - Выводить отчет в группе "См. также". -// * ФункциональныеОпции - Массив из Строка - -// Имена функциональных опций варианта отчета. -// -// Например: -// -// (1) Добавить в подсистему вариант отчета. -// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Метаданные.Отчеты.ИмяОтчета, "ИмяВарианта1"); -// Вариант.Размещение.Вставить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); -// -// (2) Отключить вариант отчета. -// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Метаданные.Отчеты.ИмяОтчета, "ИмяВарианта1"); -// Вариант.Включен = Ложь; -// -// (3) Отключить все варианты отчета, кроме требуемого. -// Отчет = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ИмяОтчета); -// Отчет.Включен = Ложь; -// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта"); -// Вариант.Включен = Истина; -// -// (4) Результат исполнения 4.1 и 4.2 будет одинаковым: -// (4.1) -// Отчет = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ИмяОтчета); -// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта1"); -// Вариант.Размещение.Удалить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); -// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта2"); -// Вариант.Размещение.Удалить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); -// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта3"); -// Вариант.Размещение.Удалить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); -// -// (4.2) -// Отчет = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ИмяОтчета); -// Отчет.Размещение.Удалить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); -// ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта1"); -// ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта2"); -// ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта3"); -// Отчет.Размещение.Вставить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); -// -// Важно: -// Отчет выступает в качестве контейнера вариантов. -// Изменяя настройки отчета можно сразу изменять настройки всех его вариантов. -// Однако, если явно получить настройки варианта отчета, то они станут самостоятельными, -// т.е. более не будут наследовать изменения настроек от отчета. См. примеры 3 и 4. -// -// Начальная настройка размещения отчетов по подсистемам зачитывается из метаданных, -// ее дублирование в коде не требуется. -// -// Функциональные опции вариантов объединяются с функциональными опциями отчетов по следующим правилам: -// (ФункциональнаяОпция1Отчета ИЛИ ФункциональнаяОпция2Отчета) И (ФункциональнаяОпция3Варианта ИЛИ -// ФункциональнаяОпция4Варианта). -// Функциональные опции отчетов не зачитываются из метаданных, -// они применяются на этапе использования подсистемы пользователем. -// Через ОписаниеОтчета можно добавлять функциональные опции, которые будут соединяться по указанным выше правилам, -// но надо помнить, что эти функциональные опции будут действовать только для предопределенных вариантов этого -// отчета. -// Для пользовательских вариантов отчета действуют только функциональные опции отчета -// - они отключаются только с отключением всего отчета. +// 1. Функции ОписаниеОтчета и ОписаниеВарианта формируют описание настроек отчета и варианта для последующего изменения: +// НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.<ИмяОтчета>); +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// Возвращаемые коллекции содержат одинаковый набор свойств. +// НастройкиОтчета используются как умолчания для вариантов, описания которых еще не получены. +// Подробнее - см. "свойства для изменения" в комментарии к ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// 2. Процедура УстановитьРежимВыводаВПанеляхОтчетов позволяет настроить режим группировки вариантов в панелях отчетов: +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Отчеты.<ИмяОтчета>, Истина/Ложь); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Подсистемы.<ИмяПодсистемы>, Истина/Ложь); +// 3. Процедура НастроитьОтчетВМодулеМенеджера позволяет переопределять настройки отчета в его модуле менеджера: +// ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.<ИмяОтчета>); // Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); @@ -1619,7 +1711,7 @@ // гарантируется с помощью других механизмов. // // Параметры: -// Типы - Массив(ОбъектМетаданных) +// Типы - Массив(ОбъектМетаданных). // Процедура ПриЗаполненииТиповОбщихДанныхНеТребующихСопоставлениеСсылокПриЗагрузке(Типы) Экспорт @@ -2232,16 +2324,6 @@ КонецПроцедуры -// Возвращает вид интерфейса пользователя для настройки доступа. -Функция УпрощенныйИнтерфейсНастройкиПравДоступа() Экспорт - - УпрощенныйИнтерфейс = Ложь; - УправлениеДоступомПереопределяемый.ПриОпределенииИнтерфейсаНастройкиДоступа(УпрощенныйИнтерфейс); - - Возврат УпрощенныйИнтерфейс = Истина; - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Обслуживание таблиц ВидыДоступа и ЗначенияДоступа в формах редактирования. @@ -2375,7 +2457,7 @@ УправлениеДоступомСлужебныйКлиентСервер.ЗаполнитьСвойстваВидовДоступаВФорме(Форма); - УправлениеДоступомСлужебныйКлиентСервер.ПриИзмененииТекущегоВидаДоступа(Форма, Ложь); + УправлениеДоступомСлужебныйКлиентСервер.ПриИзмененииТекущегоВидаДоступа(Форма); КонецПроцедуры @@ -2434,32 +2516,6 @@ //////////////////////////////////////////////////////////////////////////////// // Универсальные процедуры и функции. -// Возвращает ссылку старого объекта или ссылку нового объекта. -// -// Параметры: -// Объект - СправочникОбъект, ... -// ЭтоНовый - Булево (Возвращаемое значение). -// -Функция СсылкаОбъекта(Знач Объект, ЭтоНовый = Неопределено) Экспорт - - Ссылка = Объект.Ссылка; - ЭтоНовый = НЕ ЗначениеЗаполнено(Ссылка); - - Если ЭтоНовый Тогда - Ссылка = Объект.ПолучитьСсылкуНового(); - - Если НЕ ЗначениеЗаполнено(Ссылка) Тогда - - Менеджер = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Объект.Ссылка); - Ссылка = Менеджер.ПолучитьСсылку(); - Объект.УстановитьСсылкуНового(Ссылка); - КонецЕсли; - КонецЕсли; - - Возврат Ссылка; - -КонецФункции - // Только для внутреннего использования. Процедура УстановитьУсловиеОтбораВЗапросе(Знач Запрос, Знач Значения, Знач ИмяПараметраЗначений, Знач ИмяПараметраУсловияОтбораИмяПоля) Экспорт @@ -2481,7 +2537,7 @@ Если НЕ ЗначениеЗаполнено(ТекущаяСтрока) Тогда Продолжить; КонецЕсли; - ИндексРазделителя = Найти(ТекущаяСтрока, ":"); + ИндексРазделителя = СтрНайти(ТекущаяСтрока, ":"); Если ИндексРазделителя = 0 Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка при выполнении процедуры УправлениеДоступом.УстановитьУсловиеОтбораВЗапросе(). @@ -3088,7 +3144,7 @@ НСтр("ru = 'Ошибка в функции ПустаяСсылкаОбъектаМетаданных |общего модуля УправлениеДоступомСлужебный. | - |Наверный параметр ОписаниеОбъектаМетаданных.'"); + |Неверный параметр ОписаниеОбъектаМетаданных.'"); КонецЕсли; ПустаяСсылка = Неопределено; @@ -3177,7 +3233,7 @@ ТекстЗапросаВыбораСтарых = СтрЗаменить(ТекстЗапросаВыбораСтарых, "ПолноеИмяРегистра", ПолноеИмяРегистра); - Если Найти(ТекстЗапросаВыбораНовых, "&ПодстановкаПоляВидИзмененияСтроки") = 0 Тогда + Если СтрНайти(ТекстЗапросаВыбораНовых, "&ПодстановкаПоляВидИзмененияСтроки") = 0 Тогда ВызватьИсключение НСтр("ru = 'Ошибка в значении параметра ТекстЗапросаВыбораСтарых |процедуры ТекстЗапросаВыбораИзменений модуля УправлениеДоступомСлужебный. @@ -3188,7 +3244,7 @@ ТекстЗапросаВыбораСтарых = СтрЗаменить( ТекстЗапросаВыбораСтарых, "&ПодстановкаПоляВидИзмененияСтроки", "-1 КАК ВидИзмененияСтроки"); - Если Найти(ТекстЗапросаВыбораНовых, "&ПодстановкаПоляВидИзмененияСтроки") = 0 Тогда + Если СтрНайти(ТекстЗапросаВыбораНовых, "&ПодстановкаПоляВидИзмененияСтроки") = 0 Тогда ВызватьИсключение НСтр("ru = 'Ошибка в значении параметра ТекстЗапросаВыбораНовых |процедуры ТекстЗапросаВыбораИзменений модуля УправлениеДоступомСлужебный. @@ -3349,60 +3405,6 @@ КонецПроцедуры -// Очищает вспомогательные данные, которые зависят только -// от конфигурации. -// Используется как обработчик очистки вспомогательных данных, -// которые зависят только от конфигурации, чтобы вызвать проверку и -// обновление остальных вспомогательных данных при обновлении ИБ, -// например, в обработчике ОбновитьВспомогательныеДанныеПриОбновленииИБ. -// -Процедура ОчиститьПараметрыОграниченияДоступа() Экспорт - - Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("Константа.ПараметрыОграниченияДоступа"); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ПраваРолей"); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ЗависимостиПравДоступа"); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; - - Если МонопольныйРежим() Тогда - СнятьМонопольныйРежим = Ложь; - Иначе - СнятьМонопольныйРежим = Истина; - УстановитьМонопольныйРежим(Истина); - КонецЕсли; - - НачатьТранзакцию(); - Попытка - Блокировка.Заблокировать(); - - // Очистка прав ролей. - НаборЗаписей = РегистрыСведений.ПраваРолей.СоздатьНаборЗаписей(); - НаборЗаписей.Записать(); - - // Очистка зависимостей прав. - НаборЗаписей = РегистрыСведений.ЗависимостиПравДоступа.СоздатьНаборЗаписей(); - НаборЗаписей.Записать(); - - // Очистка остальных данных построенных по метаданным и их изменений. - Константы.ПараметрыОграниченияДоступа.Установить(Новый ХранилищеЗначения(Неопределено)); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - Если СнятьМонопольныйРежим Тогда - УстановитьМонопольныйРежим(Ложь); - КонецЕсли; - ВызватьИсключение; - КонецПопытки; - - Если СнятьМонопольныйРежим Тогда - УстановитьМонопольныйРежим(Ложь); - КонецЕсли; - -КонецПроцедуры - // Обновляет вспомогательные данные, которые зависят от конфигурации частично. // // Обновляется при наличии изменений конфигурации, записанных в параметры @@ -3525,18 +3527,14 @@ Процедура ЗаполнитьНазначениеПрофилейГруппДоступа() Экспорт Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ПрофилиГруппДоступа.Ссылка, - | ПрофилиГруппДоступа.Назначение.( - | Ссылка, - | НомерСтроки, - | ТипПользователей - | ) + Запрос.Текст = + "ВЫБРАТЬ + | ПрофилиГруппДоступа.Ссылка КАК Ссылка |ИЗ | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа |ГДЕ - | (ПрофилиГруппДоступа.ИдентификаторПоставляемыхДанных = &ПустойУникальныйИдентификатор - | ИЛИ ПрофилиГруппДоступа.ПоставляемыйПрофильИзменен) + | НЕ(ПрофилиГруппДоступа.ИдентификаторПоставляемыхДанных <> &ПустойУникальныйИдентификатор + | И НЕ ПрофилиГруппДоступа.ПоставляемыйПрофильИзменен) | И НЕ ПрофилиГруппДоступа.ЭтоГруппа | И НЕ ПрофилиГруппДоступа.Ссылка В | (ВЫБРАТЬ РАЗЛИЧНЫЕ @@ -3551,12 +3549,10 @@ Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл - ПрофильОбъект = Выборка.Ссылка.ПолучитьОбъект(); НоваяСтрока = ПрофильОбъект.Назначение.Добавить(); НоваяСтрока.ТипПользователей = Справочники.Пользователи.ПустаяСсылка(); ОбновлениеИнформационнойБазы.ЗаписатьДанные(ПрофильОбъект); - КонецЦикла; КонецПроцедуры @@ -3704,6 +3700,24 @@ КонецПроцедуры +// Создает профиль с ролью "ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок" в случае его отсутствия. +Процедура СоздатьПрофильОткрытияВнешнихОтчетовИОбработок() Экспорт + // В модели сервиса право открытия внешних отчетов и обработок не используется для пользователей областей данных. + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + // Создание профиля. + СвойстваПрофиля = СвойстваПрофиляОткрытиеВнешнихОтчетовИОбработок(); + + // Создание группы доступа. + УпрощенныйИнтерфейс = УпрощенныйИнтерфейсНастройкиПравДоступа(); + Если Не УпрощенныйИнтерфейс Тогда + ГруппаДоступаОткрытиеВнешнихОтчетовИОбработок(СвойстваПрофиля); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. @@ -3762,6 +3776,253 @@ КонецПроцедуры +Функция СвойстваПрофиляОткрытиеВнешнихОтчетовИОбработок() + Результат = Новый Структура("Ссылка, УникальныйИдентификатор, Наименование, Комментарий, Роль"); + Результат.Наименование = НСтр("ru = 'Открытие внешних отчетов и обработок'", Метаданные.ОсновнойЯзык.КодЯзыка); + Результат.Комментарий = НСтр( + "ru = 'Предоставляет право открытия внешних отчетов и обработок из меню ""Файл - Открыть"". + |Состав ролей профиля не рекомендуется изменять.'", + Метаданные.ОсновнойЯзык.КодЯзыка); + Результат.УникальныйИдентификатор = Новый УникальныйИдентификатор("1b3472f6-4d87-11e6-8264-5404a6a6895d"); + Результат.Ссылка = Справочники.ПрофилиГруппДоступа.ПолучитьСсылку(Результат.УникальныйИдентификатор); + Результат.Роль = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Метаданные.Роли.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок); + ПрофильСуществует = (ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Результат.Ссылка, "Ссылка") <> Неопределено); + Если Не ПрофильСуществует Тогда + // Профиль создается в случае отсутствия. + ПрофильОбъект = Справочники.ПрофилиГруппДоступа.СоздатьЭлемент(); + ПрофильОбъект.УстановитьСсылкуНового(Результат.Ссылка); + ПрофильОбъект.Наименование = Результат.Наименование; + ПрофильОбъект.Комментарий = Результат.Комментарий; + ПрофильОбъект.Назначение.Добавить().ТипПользователей = Справочники.Пользователи.ПустаяСсылка(); + ПрофильОбъект.Роли.Добавить().Роль = Результат.Роль; + // При обновлении ИБ важно, чтобы изменения уехали в подчиненный узел. + ПрофильОбъект.Записать(); + КонецЕсли; + Возврат Результат; +КонецФункции + +Функция ГруппаДоступаОткрытиеВнешнихОтчетовИОбработок(СвойстваПрофиля) + // Поиск по идентификатору. + УникальныйИдентификатор = Новый УникальныйИдентификатор("f6929bcb-532f-11e6-a20f-5404a6a6895d"); + Ссылка = Справочники.ГруппыДоступа.ПолучитьСсылку(УникальныйИдентификатор); + СсылкаСуществует = (ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Ссылка") <> Неопределено); + Если СсылкаСуществует Тогда + Возврат Ссылка; + КонецЕсли; + + // Поиск по профилю. + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ГруппыДоступа.Ссылка + |ИЗ + | Справочник.ГруппыДоступа КАК ГруппыДоступа + |ГДЕ + | ГруппыДоступа.Профиль = &Профиль + | + |УПОРЯДОЧИТЬ ПО + | ГруппыДоступа.ПометкаУдаления"; + Запрос.УстановитьПараметр("Профиль", СвойстваПрофиля.Ссылка); + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + Возврат Выборка.Ссылка; + КонецЕсли; + + // Создание новой группы. + ГруппаДоступаОбъект = Справочники.ГруппыДоступа.СоздатьЭлемент(); + ГруппаДоступаОбъект.УстановитьСсылкуНового(Ссылка); + ГруппаДоступаОбъект.Наименование = СвойстваПрофиля.Наименование; + ГруппаДоступаОбъект.Описание = СвойстваПрофиля.Комментарий; + ГруппаДоступаОбъект.Профиль = СвойстваПрофиля.Ссылка; + // При обновлении ИБ важно, чтобы изменения уехали в подчиненный узел. + ГруппаДоступаОбъект.Записать(); + Возврат ГруппаДоступаОбъект.Ссылка; +КонецФункции + +// Для процедур ВключитьПрофильПользователю и ВыключитьПрофильПользователю. +Процедура ВключитьОтключитьПрофильПользователя(Пользователь, Профиль, Включить) + + Если Не УпрощенныйИнтерфейсНастройкиПравДоступа() Тогда + ВызватьИсключение + НСтр("ru = 'Данная операция возможна только для упрощенного + |интерфейса настройки прав доступа.'"); + КонецЕсли; + + Если Включить Тогда + ИмяПроцедурыИлиФункции = "ВключитьПрофильПользователю"; + Иначе + ИмяПроцедурыИлиФункции = "ВыключитьПрофильПользователю"; + КонецЕсли; + + // Проверка типов значения параметра Пользователь. + Если ТипЗнч(Пользователь) <> Тип("СправочникСсылка.Пользователи") + И ТипЗнч(Пользователь) <> Тип("СправочникСсылка.ВнешниеПользователи") Тогда + + ИмяПараметра = "Пользователь"; + ЗначениеПараметра = Пользователь; + Типы = Новый Массив; + Типы.Добавить(Тип("СправочникСсылка.Пользователи")); + Типы.Добавить(Тип("СправочникСсылка.ВнешниеПользователи")); + ОжидаемыеТипы = Новый ОписаниеТипов(Типы); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недопустимое значение параметра %1 в %2. + |Ожидалось: %3; передано значение: %4 (тип %5).'"), + ИмяПараметра, + ИмяПроцедурыИлиФункции, + ОжидаемыеТипы, + ?(ЗначениеПараметра <> Неопределено, ЗначениеПараметра, НСтр("ru = 'Неопределено'")), + ТипЗнч(ЗначениеПараметра)); + КонецЕсли; + + // Проверка типов значения параметра Профиль. + Если ТипЗнч(Профиль) <> Тип("СправочникСсылка.ПрофилиГруппДоступа") + И ТипЗнч(Профиль) <> Тип("Строка") + И ТипЗнч(Профиль) <> Тип("УникальныйИдентификатор") + И Не (Не Включить И ТипЗнч(Профиль) = Тип("Неопределено")) Тогда + + ИмяПараметра = "Профиль"; + ЗначениеПараметра = Профиль; + Типы = Новый Массив; + Типы.Добавить(Тип("СправочникСсылка.ПрофилиГруппДоступа")); + Типы.Добавить(Тип("Строка")); + Типы.Добавить(Тип("УникальныйИдентификатор")); + Если Не Включить Тогда + Типы.Добавить(Тип("Неопределено")); + КонецЕсли; + ОжидаемыеТипы = Новый ОписаниеТипов(Типы); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недопустимое значение параметра %1 в %2. + |Ожидалось: %3; передано значение: %4 (тип %5).'"), + ИмяПараметра, + ИмяПроцедурыИлиФункции, + ОжидаемыеТипы, + ?(ЗначениеПараметра <> Неопределено, ЗначениеПараметра, НСтр("ru = 'Неопределено'")), + ТипЗнч(ЗначениеПараметра)); + КонецЕсли; + + Если ТипЗнч(Профиль) = Тип("СправочникСсылка.ПрофилиГруппДоступа") + Или ТипЗнч(Профиль) = Тип("Неопределено") Тогда + ТекущийПрофиль = Профиль; + Иначе + ТекущийПрофиль = Справочники.ПрофилиГруппДоступа.ПоставляемыйПрофильПоИдентификатору(Профиль); + КонецЕсли; + + Если ТекущийПрофиль <> Неопределено Тогда + СвойстваПрофиля = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ТекущийПрофиль, + "Наименование, ВидыДоступа"); + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ГруппыДоступа.Ссылка КАК Ссылка + |ИЗ + | Справочник.ГруппыДоступа КАК ГруппыДоступа + |ГДЕ + | &УсловиеОтбора"; + Запрос.УстановитьПараметр("Пользователь", Пользователь); + Если ТекущийПрофиль = Справочники.ПрофилиГруппДоступа.Администратор Тогда + УсловиеОтбора = "ГруппыДоступа.Ссылка = Значение(Справочник.ГруппыДоступа.Администраторы)"; + Иначе + УсловиеОтбора = "ГруппыДоступа.Пользователь = &Пользователь"; + Если Включить Или ТекущийПрофиль <> Неопределено Тогда + УсловиеОтбора = УсловиеОтбора + Символы.ПС + " И ГруппыДоступа.Профиль = &Профиль"; + Запрос.УстановитьПараметр("Профиль", ТекущийПрофиль); + КонецЕсли; + КонецЕсли; + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеОтбора", УсловиеОтбора); + + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + + Блокировка = Новый БлокировкаДанных(); + ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыДоступа"); + ЭлементБлокировки.ИсточникДанных = РезультатЗапроса; + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + Выборка.Следующий(); + Пока Истина Цикл + ПерсональнаяГруппаДоступа = Выборка.Ссылка; + Если ЗначениеЗаполнено(ПерсональнаяГруппаДоступа) Тогда + ГруппаДоступаОбъект = ПерсональнаяГруппаДоступа.ПолучитьОбъект(); + ГруппаДоступаОбъект.ПометкаУдаления = Ложь; + + ИначеЕсли ТекущийПрофиль <> Неопределено Тогда + // Создание персональной группы доступа. + ГруппаДоступаОбъект = Справочники.ГруппыДоступа.СоздатьЭлемент(); + ГруппаДоступаОбъект.Родитель = Справочники.ГруппыДоступа.РодительПерсональныхГруппДоступа(); + ГруппаДоступаОбъект.Наименование = СвойстваПрофиля.Наименование; + ГруппаДоступаОбъект.Пользователь = Пользователь; + ГруппаДоступаОбъект.Профиль = ТекущийПрофиль; + ГруппаДоступаОбъект.ВидыДоступа.Загрузить(ВидыДоступаДляНовойГруппыДоступа(СвойстваПрофиля)); + Иначе + ГруппаДоступаОбъект = Неопределено; + КонецЕсли; + + Если ПерсональнаяГруппаДоступа = Справочники.ГруппыДоступа.Администраторы Тогда + ОписаниеПользователя = ГруппаДоступаОбъект.Пользователи.Найти( + Пользователь, "Пользователь"); + + Если Включить И ОписаниеПользователя = Неопределено Тогда + ГруппаДоступаОбъект.Пользователи.Добавить().Пользователь = Пользователь; + ИначеЕсли Не Включить И ОписаниеПользователя <> Неопределено Тогда + ГруппаДоступаОбъект.Пользователи.Удалить(ОписаниеПользователя); + КонецЕсли; + + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + // Проверка пустого списка пользователей ИБ в группе доступа Администраторы. + ОписаниеОшибки = ""; + ПроверитьНаличиеПользователяИБВГруппеДоступаАдминистраторы( + ГруппаДоступаОбъект.Пользователи, ОписаниеОшибки); + + Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда + ВызватьИсключение + НСтр("ru = 'Профиль Администратор должен быть хотя бы у одного пользователя, + |которому разрешен вход в программу.'"); + КонецЕсли; + КонецЕсли; + ИначеЕсли ГруппаДоступаОбъект <> Неопределено Тогда + ГруппаДоступаОбъект.Пользователи.Очистить(); + Если Включить Тогда + ГруппаДоступаОбъект.Пользователи.Добавить().Пользователь = Пользователь; + КонецЕсли; + КонецЕсли; + + Если ГруппаДоступаОбъект <> Неопределено Тогда + // При обновлении ИБ важно, чтобы изменения уехали в подчиненный узел. + ГруппаДоступаОбъект.Записать(); + КонецЕсли; + + Если Не Выборка.Следующий() Тогда + Прервать; + КонецЕсли; + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Функция ВидыДоступаДляНовойГруппыДоступа(СвойстваПрофиля) + + ВидыДоступа = СвойстваПрофиля.ВидыДоступа.Выгрузить(); + + Отбор = Новый Структура; + Отбор.Вставить("Предустановленный", Истина); + Предустановленные = ВидыДоступа.НайтиСтроки(Отбор); + + Для Каждого Предустановленный Из Предустановленные Цикл + ВидыДоступа.Удалить(Предустановленный); + КонецЦикла; + + Возврат ВидыДоступа; + +КонецФункции + // Для процедур ОбновитьНаборЗаписей, ОбновитьНаборыЗаписей, ОбновитьРегистрСведений. Процедура ЗаполнитьПараметры(ВходныеПараметры, Знач ВсеПараметры, Знач ОбязательныеПараметры = "") @@ -3807,6 +4068,15 @@ КонецПроцедуры +Функция ИмяОбъектаПодсистемыУправлениеДоступомНачинаетсяСУдалить(ЭлементДанных) + + Возврат ТипЗнч(ЭлементДанных) = Тип("ПланВидовХарактеристикОбъект.УдалитьВидыДоступа") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.УдалитьГруппыЗначенийДоступа") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.УдалитьНаборыЗначенийДоступа") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.УдалитьПраваПоЗначениямДоступа"); + +КонецФункции + // Для процедур ВключитьПользователяВГруппуДоступа, ИсключитьПользователяИзГруппыДоступа // и функции НайтиПользователяВГруппеДоступа. @@ -4164,15 +4434,6 @@ УстановитьПривилегированныйРежим(Истина); - ПоследниеИзменения = СтандартныеПодсистемыСервер.ИзмененияПараметраРаботыПрограммы( - ПользователиСлужебныйПовтИсп.Параметры(), "НедоступныеРолиПоТипамПользователей"); - - Если ПоследниеИзменения = Неопределено - ИЛИ ПоследниеИзменения.Количество() > 0 Тогда - - Возврат Истина; - КонецЕсли; - ПроверяемыеПараметры = Новый Массив; ПроверяемыеПараметры.Добавить("ОбъектыМетаданныхПравРолей"); ПроверяемыеПараметры.Добавить("ВозможныеПраваДляНастройкиПравОбъектов"); @@ -4199,7 +4460,6 @@ КонецФункции - // Для процедуры ОбновитьРолиПользователей. Функция ТекущиеСвойстваПользователей(МассивПользователей) @@ -4484,7 +4744,7 @@ НачатьТранзакцию(); Попытка - ПользователиСлужебный.ЗаписатьПользователяИнформационнойБазы(ПользовательИБ); + ПользователиСлужебный.ЗаписатьПользователяИнформационнойБазы(ПользовательИБ, ПользовательСсылка); Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда ЗафиксироватьТранзакцию(); diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl index 356f23c16..080a18e64 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйКлиентСервер/Module.bsl @@ -5,6 +5,72 @@ #Область СлужебныйПрограммныйИнтерфейс +// Определяет назначение профиля. +// +// Параметры: +// Профиль - СправочникОбъект.ПрофилиГруппДоступа - профиль с табличной частью Назначение. +// - ДанныеФормыСтруктура - структура объекта профиля в форме. +// - Структура, ФиксированнаяСтруктура - описание поставляемого профиля. +// +// Возвращаемое значение: +// Строка - "ДляАдминистраторов", "ДляПользователей", "ДляВнешнихПользователей", +// "СовместноДляПользователейИВнешнихПользователей". +// +Функция НазначениеПрофиля(Профиль) Экспорт + + НазначениеДляПользователей = Ложь; + НазначениеДляВнешнихПользователей = Ложь; + + Для Каждого ОписаниеНазначения Из Профиль.Назначение Цикл + Если ТипЗнч(Профиль.Назначение) = Тип("Массив") + Или ТипЗнч(Профиль.Назначение) = Тип("ФиксированныйМассив") Тогда + Тип = ТипЗнч(ОписаниеНазначения); + Иначе + Тип = ТипЗнч(ОписаниеНазначения.ТипПользователей); + КонецЕсли; + Если Тип = Тип("СправочникСсылка.Пользователи") Тогда + НазначениеДляПользователей = Истина; + КонецЕсли; + Если Тип <> Тип("СправочникСсылка.Пользователи") И Тип <> Неопределено Тогда + НазначениеДляВнешнихПользователей = Истина; + КонецЕсли; + КонецЦикла; + + Если НазначениеДляПользователей И НазначениеДляВнешнихПользователей Тогда + Возврат "СовместноДляПользователейИВнешнихПользователей"; + + ИначеЕсли НазначениеДляВнешнихПользователей Тогда + Возврат "ДляВнешнихПользователей"; + КонецЕсли; + + Возврат "ДляАдминистраторов"; + +КонецФункции + +// Проверяет соответствие вида доступа назначению профиля. +// +// Параметры: +// ВидДоступа - Строка, Ссылка - описание вида доступа. +// НазначениеПрофиля - Строка - возвращается функцией НазначениеПрофиля. +// +Функция ВидДоступаСоответствуетНазначениюПрофиля(Знач ВидДоступа, НазначениеПрофиля) Экспорт + + Если ВидДоступа = "Пользователи" + Или ТипЗнч(ВидДоступа) = Тип("СправочникСсылка.Пользователи") Тогда + + Возврат НазначениеПрофиля <> "СовместноДляПользователейИВнешнихПользователей" + И НазначениеПрофиля <> "ДляВнешнихПользователей"; + + ИначеЕсли ВидДоступа = "ВнешниеПользователи" + Или ТипЗнч(ВидДоступа) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + + Возврат НазначениеПрофиля = "ДляВнешнихПользователей"; + КонецЕсли; + + Возврат Истина; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обслуживание таблиц ВидыДоступа и ЗначенияДоступа в формах редактирования. @@ -94,21 +160,21 @@ КонецПроцедуры // Только для внутреннего использования. -Процедура ПриИзмененииТекущегоВидаДоступа(Форма, НаКлиенте = Истина) Экспорт +Процедура ПриИзмененииТекущегоВидаДоступа(Форма) Экспорт Элементы = Форма.Элементы; Параметры = ПараметрыФормыРедактированияРазрешенныхЗначений(Форма); ЗначенияРедактируются = Ложь; - Если НаКлиенте Тогда + #Если Клиент Тогда ТекущиеДанные = Элементы.ВидыДоступа.ТекущиеДанные; - Иначе + #Иначе ТекущиеДанные = Параметры.ВидыДоступа.НайтиПоИдентификатору( ?(Элементы.ВидыДоступа.ТекущаяСтрока = Неопределено, -1, Элементы.ВидыДоступа.ТекущаяСтрока)); - КонецЕсли; + #КонецЕсли Если ТекущиеДанные <> Неопределено Тогда @@ -246,6 +312,9 @@ ХранилищеТаблиц = Форма; КонецЕсли; + НеобязательныеРеквизиты = Новый Структура("Назначение"); + ЗаполнитьЗначенияСвойств(НеобязательныеРеквизиты, ХранилищеТаблиц); + Параметры.Вставить("Назначение", НеобязательныеРеквизиты.Назначение); Параметры.Вставить("ВидыДоступа", ХранилищеТаблиц.ВидыДоступа); Параметры.Вставить("ЗначенияДоступа", ХранилищеТаблиц.ЗначенияДоступа); @@ -307,6 +376,9 @@ Элементы = Форма.Элементы; Параметры = ПараметрыФормыРедактированияРазрешенныхЗначений(Форма); + Если Параметры.Назначение <> Неопределено Тогда + НазначениеПрофиля = НазначениеПрофиля(Параметры); + КонецЕсли; ПроверенныеРеквизитыТаблиц.Добавить(Параметры.ПутьКТаблицам + "ВидыДоступа.ВидДоступа"); ПроверенныеРеквизитыТаблиц.Добавить(Параметры.ПутьКТаблицам + "ЗначенияДоступа.ВидДоступа"); @@ -316,8 +388,7 @@ Возврат; КонецЕсли; - ОтборВидовДоступа = ОтборВТаблицахФормыРедактированияРазрешенныхЗначений( - Форма); + ОтборВидовДоступа = ОтборВТаблицахФормыРедактированияРазрешенныхЗначений(Форма); ВидыДоступа = Параметры.ВидыДоступа.НайтиСтроки(ОтборВидовДоступа); ИндексВидаДоступа = ВидыДоступа.Количество()-1; @@ -340,6 +411,23 @@ Прервать; КонецЕсли; + // Проверка соответствия вида доступа назначению профиля. + Если Параметры.Назначение <> Неопределено + И Не ВидДоступаСоответствуетНазначениюПрофиля(СтрокаВидаДоступа.ВидДоступа, НазначениеПрофиля) Тогда + + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + Параметры.ПутьКТаблицам + "ВидыДоступа[%1].ВидДоступа", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Вид доступа ""%1"" не соответствует назначению профиля.'"), + СтрокаВидаДоступа.ВидДоступаПредставление), + "ВидыДоступа", + ВидыДоступа.Найти(СтрокаВидаДоступа), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Вид доступа ""%1"" в строке %%1 не соответствует назначению профиля.'"), + СтрокаВидаДоступа.ВидДоступаПредставление), + Параметры.ВидыДоступа.Индекс(СтрокаВидаДоступа)); + Отказ = Истина; + Прервать; + КонецЕсли; + // Проверка наличия повторяющихся видов доступа. ОтборВидовДоступа.Вставить("ВидДоступа", СтрокаВидаДоступа.ВидДоступа); НайденныеВидыДоступа = Параметры.ВидыДоступа.НайтиСтроки(ОтборВидовДоступа); @@ -347,10 +435,12 @@ Если НайденныеВидыДоступа.Количество() > 1 Тогда ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, Параметры.ПутьКТаблицам + "ВидыДоступа[%1].ВидДоступа", - НСтр("ru = 'Вид доступа повторяется.'"), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Вид доступа ""%1"" повторяется.'"), + СтрокаВидаДоступа.ВидДоступаПредставление), "ВидыДоступа", ВидыДоступа.Найти(СтрокаВидаДоступа), - НСтр("ru = 'Вид доступа в строке %1 повторяется.'"), + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Вид доступа ""%1"" в строке %%1 повторяется.'"), + СтрокаВидаДоступа.ВидДоступаПредставление), Параметры.ВидыДоступа.Индекс(СтрокаВидаДоступа)); Отказ = Истина; Прервать; diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl index 8f060dfce..c1d2b2874 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl @@ -48,10 +48,6 @@ КонецФункции -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - // Возвращает таблицу значений, содержащую вид ограничений доступа по каждому праву // объектов метаданных. // Если записи по праву нет, значит ограничений по праву нет. @@ -61,6 +57,10 @@ // значений доступа может быть использовано // текущее состояние регистра сведений НаборыЗначенийДоступа. // +// Параметры: +// ДляПроверки - Булево - не добавлять виды ограничений, которые вычисляются +// на основе связей через вид доступа Объект. +// // Возвращаемое значение: // ТаблицаЗначений: // Таблица - Строка - имя таблицы объекта метаданных, например, Справочник.Файлы. @@ -72,7 +72,7 @@ // используя наборы значений доступа, например, Справочник.ПапкиФайлов. // - Неопределено, если ВидДоступа <> Неопределено. // -Функция ПостоянныеВидыОграниченийПравОбъектовМетаданных() Экспорт +Функция ПостоянныеВидыОграниченийПравОбъектовМетаданных(ДляПроверки = Ложь) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -82,6 +82,12 @@ ВидыДоступаПрав.Колонки.Добавить("ВидДоступа", ОписаниеТиповЗначенийДоступаИВладельцевНастроекПрав()); ВидыДоступаПрав.Колонки.Добавить("ТаблицаОбъекта", Метаданные.РегистрыСведений.НаборыЗначенийДоступа.Измерения.Объект.Тип); + Если ДляПроверки Тогда + ВидыДоступаПрав.Колонки.Добавить("ПолноеИмяТаблицы", Новый ОписаниеТипов("Строка")); + ВидыДоступаПрав.Колонки.Добавить("ИмяВидаДоступа", Новый ОписаниеТипов("Строка")); + ВидыДоступаПрав.Колонки.Добавить("ПолноеИмяТаблицыОбъекта", Новый ОписаниеТипов("Строка")); + КонецЕсли; + ОграниченияПрав = ""; ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( @@ -96,7 +102,7 @@ ВидыДоступаПоИменам = УправлениеДоступомСлужебныйПовтИсп.Параметры().СвойстваВидовДоступа.ПоИменам; Для НомерСтроки = 1 По СтрЧислоСтрок(ОграниченияПрав) Цикл - ТекущаяСтрока = СтрПолучитьСтроку(ОграниченияПрав, НомерСтроки); + ТекущаяСтрока = СокрЛП(СтрПолучитьСтроку(ОграниченияПрав, НомерСтроки)); Если ЗначениеЗаполнено(ТекущаяСтрока) Тогда ПояснениеОшибки = ""; Если СтрЧислоВхождений(ТекущаяСтрока, ".") <> 3 И СтрЧислоВхождений(ТекущаяСтрока, ".") <> 5 Тогда @@ -170,10 +176,19 @@ НовоеОписание.Право = Право; НовоеОписание.ВидДоступа = ВидДоступаСсылка; НовоеОписание.ТаблицаОбъекта = ТаблицаОбъектаСсылка; + Если ДляПроверки Тогда + НовоеОписание.ПолноеИмяТаблицы = Таблица; + НовоеОписание.ИмяВидаДоступа = ВидДоступа; + НовоеОписание.ПолноеИмяТаблицыОбъекта = ТаблицаОбъекта; + КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; + Если ДляПроверки Тогда + Возврат ВидыДоступаПрав; + КонецЕсли; + // Добавление видов доступа объектов, которые определяются не только через наборы значений доступа. Запрос = Новый Запрос; Запрос.Текст = @@ -224,6 +239,10 @@ КонецФункции +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + // Только для внутреннего использования. Функция ОписаниеКлючаЗаписи(ТипИлиПолноеИмя) Экспорт diff --git a/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl index 39083ce4c..4af1dded8 100644 --- a/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСлужебный/Module.bsl @@ -148,7 +148,7 @@ // Обработчики условных вызовов. // Рассчитывает итоги всех регистров бухгалтерии и накопления, у которых они включены. -Процедура УстановитьПериодРассчитанныхИтогов() Экспорт +Процедура РассчитатьИтоги() Экспорт ДатаСеанса = ТекущаяДатаСеанса(); РегистрНакопленияПериод = КонецМесяца(ДобавитьМесяц(ДатаСеанса, -1)); // Конец прошлого месяца. @@ -212,7 +212,7 @@ ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.УстановкаПериодаРассчитанныхИтогов); - УстановитьПериодРассчитанныхИтогов(); + РассчитатьИтоги(); КонецПроцедуры @@ -235,7 +235,7 @@ КонецПроцедуры // Для внутреннего использования. -Процедура ОбновитьАгрегаты() Экспорт +Процедура ОбновитьАгрегаты() Кэш = КэшПроверкиРазделения(); @@ -259,7 +259,7 @@ КонецПроцедуры // Для внутреннего использования. -Процедура ПерестроитьАгрегаты() Экспорт +Процедура ПерестроитьАгрегаты() Кэш = КэшПроверкиРазделения(); @@ -430,7 +430,7 @@ Возврат Кэш; КонецФункции -Функция ОбъектМетаданныхДоступенПоРазделению(Кэш, ОбъектМетаданных) Экспорт +Функция ОбъектМетаданныхДоступенПоРазделению(Кэш, ОбъектМетаданных) Если Не Кэш.МодельСервиса Тогда Возврат Истина; КонецЕсли; diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl index 65c111c87..1b2ce3850 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl @@ -38,112 +38,161 @@ ГруппаВидовКИ = Справочники.ВидыКонтактнойИнформации[ИмяГруппыВидовКИ]; ИмяОбъекта = МетаданныеОбъекта.Имя; - Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ГруппаВидовКИ, "Используется") = Ложь Тогда + ИспользуетсяКонтактнаяИнформация = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ГруппаВидовКИ, "Используется"); + Если ИспользуетсяКонтактнаяИнформация = Ложь Тогда // Добавим новые реквизиты Если МассивДобавляемыхРеквизитов.Количество() > 0 Тогда Форма.ИзменитьРеквизиты(МассивДобавляемыхРеквизитов); КонецЕсли; - Форма.ПараметрыКонтактнойИнформации = Новый Структура("ГруппаДляРазмещения", ИмяЭлементаДляРазмещения); + ДобавленныеРеквизиты = Новый Массив; + Для Каждого СтрокаРеквизита Из МассивДобавляемыхРеквизитов Цикл + Если ПустаяСтрока(СтрокаРеквизита.Путь) Тогда + ДобавленныеРеквизиты.Добавить(СтрокаРеквизита.Имя); + КонецЕсли; + КонецЦикла; + Форма.ПараметрыКонтактнойИнформации = Новый Структура; + Форма.ПараметрыКонтактнойИнформации.Вставить("ГруппаДляРазмещения", ИмяЭлементаДляРазмещения); + Форма.ПараметрыКонтактнойИнформации.Вставить("ПоложениеЗаголовка", ЗначениеПоложенияЗаголовкаКИ(ПоложениеЗаголовкаКИ)); + Форма.ПараметрыКонтактнойИнформации.Вставить("ДобавленныеРеквизиты", ДобавленныеРеквизиты); + Форма.ПараметрыКонтактнойИнформации.Вставить("ОтложеннаяИнициализация", ОтложеннаяИнициализация); + Форма.ПараметрыКонтактнойИнформации.Вставить("ИсключаемыеВиды", ИсключаемыеВиды); + Форма.ПараметрыКонтактнойИнформации.Вставить("ВыполненаОтложеннаяИнициализация", Ложь); + Форма.ПараметрыКонтактнойИнформации.Вставить("ДобавленныеЭлементы", Новый СписокЗначений); + Форма.ПараметрыКонтактнойИнформации.Вставить("Владелец", СсылкаНаОбъект); Если Не ПустаяСтрока(ИмяЭлементаДляРазмещения) Тогда Форма.Элементы[ИмяЭлементаДляРазмещения].Видимость = Ложь; КонецЕсли; Возврат; КонецЕсли; - Если МетаданныеОбъекта.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ИдентификаторСтрокиТабличнойЧасти") = Неопределено Тогда - ДанныеИдентификатораСтрокиТабличнойЧасти = "0"; + РеквизитыОбъекта = МетаданныеОбъекта.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты; + ЕстьКолонкаДействуетС = (РеквизитыОбъекта.Найти("ДействуетС") <> Неопределено); + ЕстьКолонкаИдентификаторСтрокиТабличнойЧасти = (РеквизитыОбъекта.Найти("ИдентификаторСтрокиТабличнойЧасти") <> Неопределено); + + Если ЗначениеЗаполнено(СсылкаНаОбъект) Тогда + ТекстЗапроса = "ВЫБРАТЬ + | КонтактнаяИнформация.Представление КАК Представление, + | КонтактнаяИнформация.НомерСтроки КАК НомерСтроки, + | КонтактнаяИнформация.Вид КАК Вид, + | ВидыКонтактнойИнформации.ХранитьИсториюИзменений КАК ХранитьИсториюИзменений, + | КонтактнаяИнформация.ЗначенияПолей, + | """" КАК ДействуетС, + | 0 КАК ИдентификаторСтрокиТабличнойЧасти, + | ЛОЖЬ КАК ЭтоИсторическаяКонтактнаяИнформация + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + | ЛЕВОЕ СОЕДИНЕНИЕ " + ПолноеИмяОбъектаМетаданных + ".КонтактнаяИнформация КАК КонтактнаяИнформация + | ПО (КонтактнаяИнформация.Вид = ВидыКонтактнойИнформации.Ссылка) + |ГДЕ + | КонтактнаяИнформация.Ссылка = &Ссылка УПОРЯДОЧИТЬ ПО Вид, ДействуетС"; + + ПоляКонтактнойИнформации = ""; + Если ЕстьКолонкаИдентификаторСтрокиТабличнойЧасти Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "0 КАК ИдентификаторСтрокиТабличнойЧасти", + "ЕСТЬNULL(КонтактнаяИнформация.ИдентификаторСтрокиТабличнойЧасти, 0) КАК ИдентификаторСтрокиТабличнойЧасти"); + КонецЕсли; + + Если ЕстьКолонкаДействуетС Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, """"" КАК ДействуетС", "КонтактнаяИнформация.ДействуетС КАК ДействуетС"); + КонецЕсли; + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект); + КонтактнаяИнформация = Запрос.Выполнить().Выгрузить(); Иначе - ДанныеИдентификатораСтрокиТабличнойЧасти = "ЕСТЬNULL(КонтактнаяИнформация.ИдентификаторСтрокиТабличнойЧасти, 0)"; + КонтактнаяИнформация = Объект.КонтактнаяИнформация.Выгрузить(); + + Если ЕстьКолонкаДействуетС Тогда + ТипБулево = Новый ОписаниеТипов("Булево"); + КонтактнаяИнформация.Колонки.Добавить("ХранитьИсториюИзменений", ТипБулево); + КонтактнаяИнформация.Колонки.Добавить("ЭтоИсторическаяКонтактнаяИнформация", ТипБулево); + КонтактнаяИнформация.Сортировать("Вид, ДействуетС"); + Для каждого СтрокаКонтактнойИнформации Из КонтактнаяИнформация Цикл + СтрокаКонтактнойИнформации.ХранитьИсториюИзменений = СтрокаКонтактнойИнформации.Вид.ХранитьИсториюИзменений; + КонецЦикла; + КонецЕсли; КонецЕсли; - Запрос = Новый Запрос; - Если ЗначениеЗаполнено(СсылкаНаОбъект) Тогда - Запрос.Текст =" - |ВЫБРАТЬ - | ВидыКонтактнойИнформации.Ссылка КАК Вид, - | ВидыКонтактнойИнформации.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных, - | ВидыКонтактнойИнформации.Тип КАК Тип, - | ВидыКонтактнойИнформации.ОбязательноеЗаполнение КАК ОбязательноеЗаполнение, - | ВидыКонтактнойИнформации.Подсказка КАК Подсказка, - | ВидыКонтактнойИнформации.Наименование КАК Наименование, - | ВидыКонтактнойИнформации.РедактированиеТолькоВДиалоге КАК РедактированиеТолькоВДиалоге, - | ВидыКонтактнойИнформации.ЭтоГруппа КАК ЭтоРеквизитТабличнойЧасти, - | ВидыКонтактнойИнформации.РеквизитДопУпорядочивания КАК РеквизитДопУпорядочивания, - | ЕСТЬNULL(КонтактнаяИнформация.Представление, """") КАК Представление, - | ЕСТЬNULL(КонтактнаяИнформация.ЗначенияПолей, """") КАК ЗначенияПолей, - | ЕСТЬNULL(КонтактнаяИнформация.НомерСтроки, 0) КАК НомерСтроки, - | " + ДанныеИдентификатораСтрокиТабличнойЧасти + " КАК ИдентификаторСтроки, - | ВЫРАЗИТЬ("""""""" КАК СТРОКА(200)) КАК ИмяРеквизита, - | ВЫРАЗИТЬ("""" КАК СТРОКА) КАК Комментарий - |ИЗ - | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации - |ЛЕВОЕ СОЕДИНЕНИЕ - | " + ПолноеИмяОбъектаМетаданных + ".КонтактнаяИнформация КАК КонтактнаяИнформация - |ПО - | КонтактнаяИнформация.Ссылка = &Владелец - | И ВидыКонтактнойИнформации.Ссылка = КонтактнаяИнформация.Вид - |ГДЕ - | НЕ ВидыКонтактнойИнформации.ПометкаУдаления - | И ВидыКонтактнойИнформации.Используется - | И ЕстьNULL(ВидыКонтактнойИнформации.Родитель.Используется, Истина) - | И ( - | ВидыКонтактнойИнформации.Родитель = &ГруппаВидовКИ - | ИЛИ ВидыКонтактнойИнформации.Родитель.Родитель = &ГруппаВидовКИ) - |УПОРЯДОЧИТЬ ПО - | ВидыКонтактнойИнформации.Ссылка ИЕРАРХИЯ - |"; + Если ЕстьКолонкаДействуетС Тогда + ПредыдущийВид = Неопределено; + Для каждого СтрокаКонтактнойИнформации Из КонтактнаяИнформация Цикл + Если СтрокаКонтактнойИнформации.ХранитьИсториюИзменений + И (ПредыдущийВид = Неопределено ИЛИ ПредыдущийВид <> СтрокаКонтактнойИнформации.Вид) Тогда + Отбор = Новый Структура("Вид", СтрокаКонтактнойИнформации.Вид); + НайденныеСтроки = КонтактнаяИнформация.НайтиСтроки(Отбор); + ПоследняяДата = НайденныеСтроки.Получить(НайденныеСтроки.Количество() - 1).ДействуетС; + Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл + Если НайденнаяСтрока.ДействуетС < ПоследняяДата Тогда + НайденнаяСтрока.ЭтоИсторическаяКонтактнаяИнформация = Истина; + КонецЕсли; + КонецЦикла; + ПредыдущийВид = СтрокаКонтактнойИнформации.Вид; + КонецЕсли; + КонецЦикла; + ТекстЗапросаИсторическаяИнформация = " КонтактнаяИнформация.ЭтоИсторическаяКонтактнаяИнформация КАК ЭтоИсторическаяКонтактнаяИнформация, + | КонтактнаяИнформация.ДействуетС КАК ДействуетС,"; Иначе - Запрос.Текст =" - |ВЫБРАТЬ - | КонтактнаяИнформация.Представление КАК Представление, - | КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей, - | КонтактнаяИнформация.НомерСтроки КАК НомерСтроки, - | КонтактнаяИнформация.Вид КАК Вид, - | " + ДанныеИдентификатораСтрокиТабличнойЧасти + " КАК ИдентификаторСтрокиТабличнойЧасти - |ПОМЕСТИТЬ - | КонтактнаяИнформация - |ИЗ - | &ТаблицаКонтактнойИнформации КАК КонтактнаяИнформация - |ИНДЕКСИРОВАТЬ ПО - | Вид - |;//////////////////////////////////////////////////////////////////////////////// - | - |ВЫБРАТЬ - | ВидыКонтактнойИнформации.Ссылка КАК Вид, - | ВидыКонтактнойИнформации.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных, - | ВидыКонтактнойИнформации.Тип КАК Тип, - | ВидыКонтактнойИнформации.ОбязательноеЗаполнение КАК ОбязательноеЗаполнение, - | ВидыКонтактнойИнформации.Подсказка КАК Подсказка, - | ВидыКонтактнойИнформации.Наименование КАК Наименование, - | ВидыКонтактнойИнформации.РедактированиеТолькоВДиалоге КАК РедактированиеТолькоВДиалоге, - | ВидыКонтактнойИнформации.ЭтоГруппа КАК ЭтоРеквизитТабличнойЧасти, - | ВидыКонтактнойИнформации.РеквизитДопУпорядочивания КАК РеквизитДопУпорядочивания, - | ЕСТЬNULL(КонтактнаяИнформация.Представление, """") КАК Представление, - | ЕСТЬNULL(КонтактнаяИнформация.ЗначенияПолей, """") КАК ЗначенияПолей, - | ЕСТЬNULL(КонтактнаяИнформация.НомерСтроки, 0) КАК НомерСтроки, - | " + ДанныеИдентификатораСтрокиТабличнойЧасти + " КАК ИдентификаторСтроки, - | ВЫРАЗИТЬ("""""""" КАК СТРОКА(200)) КАК ИмяРеквизита, - | ВЫРАЗИТЬ("""" КАК СТРОКА) КАК Комментарий - |ИЗ - | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации - |ЛЕВОЕ СОЕДИНЕНИЕ - | КонтактнаяИнформация КАК КонтактнаяИнформация - |ПО - | ВидыКонтактнойИнформации.Ссылка = КонтактнаяИнформация.Вид - |ГДЕ - | НЕ ВидыКонтактнойИнформации.ПометкаУдаления - | И ВидыКонтактнойИнформации.Используется - | И ЕстьNULL(ВидыКонтактнойИнформации.Родитель.Используется, Истина) - | И ( - | ВидыКонтактнойИнформации.Родитель = &ГруппаВидовКИ - | ИЛИ ВидыКонтактнойИнформации.Родитель.Родитель = &ГруппаВидовКИ) - |УПОРЯДОЧИТЬ ПО - | ВидыКонтактнойИнформации.Ссылка ИЕРАРХИЯ - |"; - - Запрос.УстановитьПараметр("ТаблицаКонтактнойИнформации", Объект.КонтактнаяИнформация.Выгрузить()); + ТекстЗапросаИсторическаяИнформация = "ЛОЖЬ КАК ЭтоИсторическаяКонтактнаяИнформация,0 КАК ДействуетС, "; КонецЕсли; + ТекстЗапроса =" ВЫБРАТЬ + | КонтактнаяИнформация.Представление КАК Представление, + | КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей, + | КонтактнаяИнформация.НомерСтроки КАК НомерСтроки, " + ТекстЗапросаИсторическаяИнформация + " + | КонтактнаяИнформация.Вид КАК Вид, + | 0 КАК ИдентификаторСтрокиТабличнойЧасти + |ПОМЕСТИТЬ + | КонтактнаяИнформация + |ИЗ + | &ТаблицаКонтактнойИнформации КАК КонтактнаяИнформация + |ИНДЕКСИРОВАТЬ ПО + | Вид + |;//////////////////////////////////////////////////////////////////////////////// + | + |ВЫБРАТЬ + | ВидыКонтактнойИнформации.Ссылка КАК Вид, + | ВидыКонтактнойИнформации.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных, + | ВидыКонтактнойИнформации.Тип КАК Тип, + | ВидыКонтактнойИнформации.ОбязательноеЗаполнение КАК ОбязательноеЗаполнение, + | ВидыКонтактнойИнформации.МногострочноеПоле КАК МногострочноеПоле, + | ВидыКонтактнойИнформации.Подсказка КАК Подсказка, + | ВидыКонтактнойИнформации.Наименование КАК Наименование, + | ВидыКонтактнойИнформации.ХранитьИсториюИзменений КАК ХранитьИсториюИзменений, + | ВидыКонтактнойИнформации.РедактированиеТолькоВДиалоге КАК РедактированиеТолькоВДиалоге, + | ВидыКонтактнойИнформации.ЭтоГруппа КАК ЭтоРеквизитТабличнойЧасти, + | ВидыКонтактнойИнформации.РеквизитДопУпорядочивания КАК РеквизитДопУпорядочивания, + | ЕСТЬNULL(КонтактнаяИнформация.ЭтоИсторическаяКонтактнаяИнформация, ЛОЖЬ) КАК ЭтоИсторическаяКонтактнаяИнформация, + | ЕСТЬNULL(КонтактнаяИнформация.Представление, """") КАК Представление, + | ЕСТЬNULL(КонтактнаяИнформация.ЗначенияПолей, """") КАК ЗначенияПолей, + | ЕСТЬNULL(КонтактнаяИнформация.ДействуетС, 0) КАК ДействуетС, + | ЕСТЬNULL(КонтактнаяИнформация.НомерСтроки, 0) КАК НомерСтроки, + | 0 КАК ИдентификаторСтрокиТабличнойЧасти, + | ВЫРАЗИТЬ("""""""" КАК СТРОКА(200)) КАК ИмяРеквизита, + | ВЫРАЗИТЬ("""" КАК СТРОКА) КАК Комментарий + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + |ЛЕВОЕ СОЕДИНЕНИЕ + | КонтактнаяИнформация КАК КонтактнаяИнформация + |ПО + | ВидыКонтактнойИнформации.Ссылка = КонтактнаяИнформация.Вид + |ГДЕ + | НЕ ВидыКонтактнойИнформации.ПометкаУдаления + | И ВидыКонтактнойИнформации.Используется + | И ЕстьNULL(ВидыКонтактнойИнформации.Родитель.Используется, Истина) + | И ( + | ВидыКонтактнойИнформации.Родитель = &ГруппаВидовКИ + | ИЛИ ВидыКонтактнойИнформации.Родитель.Родитель = &ГруппаВидовКИ) + |УПОРЯДОЧИТЬ ПО + | ВидыКонтактнойИнформации.Ссылка ИЕРАРХИЯ + |"; + + Если ЕстьКолонкаИдентификаторСтрокиТабличнойЧасти Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "0 КАК ИдентификаторСтрокиТабличнойЧасти", + "ЕСТЬNULL(КонтактнаяИнформация.ИдентификаторСтрокиТабличнойЧасти, 0) КАК ИдентификаторСтрокиТабличнойЧасти"); + КонецЕсли; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ТаблицаКонтактнойИнформации", КонтактнаяИнформация); + Запрос.УстановитьПараметр("ГруппаВидовКИ", ГруппаВидовКИ); Запрос.УстановитьПараметр("Владелец", СсылкаНаОбъект); @@ -155,9 +204,15 @@ Строка500 = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(500)); СозданныеРеквизиты = ОбщегоНазначенияКлиентСервер.СкопироватьМассив(ИсключаемыеВиды); + ПредыдущийВид = Неопределено; + ПорядковыйНомер = 1; Для Каждого ОбъектКонтактнойИнформации Из КонтактнаяИнформация Цикл + Если ОбъектКонтактнойИнформации.ЭтоИсторическаяКонтактнаяИнформация Тогда + Продолжить; + КонецЕсли; + Если ОбъектКонтактнойИнформации.ЭтоРеквизитТабличнойЧасти Тогда ИмяВидаКИ = ОбъектКонтактнойИнформации.ИмяПредопределенныхДанных; @@ -178,7 +233,11 @@ Если ТекущийВид <> ПредыдущийВид Тогда - ИмяРеквизита = "КонтактнаяИнформацияПоле" + ИмяТабличнойЧасти + ОбъектКонтактнойИнформации.Строки.Индекс(СтрокаКИ); + ИмяРеквизита = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1%2%3%4", + "КонтактнаяИнформацияПоле", + ИмяТабличнойЧасти, + СтрЗаменить(ТекущийВид.УникальныйИдентификатор(), "-", "x"), + ОбъектКонтактнойИнформации.Строки.Индекс(СтрокаКИ)); ПутьРеквизитов = "Объект." + ИмяТабличнойЧасти; @@ -194,10 +253,25 @@ Иначе - Индекс = СозданныеРеквизиты.Найти(ОбъектКонтактнойИнформации.Вид); + ТекущийВид = ОбъектКонтактнойИнформации.Вид; + + Если ТекущийВид <> ПредыдущийВид Тогда + ПредыдущийВид = ТекущийВид; + ПорядковыйНомер = 1; + Иначе + ПорядковыйНомер = ПорядковыйНомер + 1; + КонецЕсли; + + Индекс = СозданныеРеквизиты.Найти(ТекущийВид); Если Индекс = Неопределено Тогда - ОбъектКонтактнойИнформации.ИмяРеквизита = "КонтактнаяИнформацияПоле" + КонтактнаяИнформация.Индекс(ОбъектКонтактнойИнформации); + + ИмяРеквизита = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1%2%3", + "КонтактнаяИнформацияПоле", + СтрЗаменить(ТекущийВид.УникальныйИдентификатор(), "-", "x"), + ПорядковыйНомер); + + ОбъектКонтактнойИнформации.ИмяРеквизита = ИмяРеквизита; Если Не ОтложеннаяИнициализация Тогда МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(ОбъектКонтактнойИнформации.ИмяРеквизита, Строка500, , ОбъектКонтактнойИнформации.Наименование, Истина)); КонецЕсли; @@ -227,13 +301,14 @@ КонецЕсли; Форма.ПараметрыКонтактнойИнформации = Новый Структура; - Форма.ПараметрыКонтактнойИнформации.Вставить("ПоложениеЗаголовка", Строка(ПоложениеЗаголовкаКИ)); + Форма.ПараметрыКонтактнойИнформации.Вставить("ПоложениеЗаголовка", ЗначениеПоложенияЗаголовкаКИ(ПоложениеЗаголовкаКИ)); Форма.ПараметрыКонтактнойИнформации.Вставить("ГруппаДляРазмещения", ИмяЭлементаДляРазмещения); Форма.ПараметрыКонтактнойИнформации.Вставить("СписокДобавляемыхЭлементов", Новый СписокЗначений); Форма.ПараметрыКонтактнойИнформации.Вставить("ДобавленныеЭлементы", Новый СписокЗначений); Форма.ПараметрыКонтактнойИнформации.Вставить("ИсключаемыеВиды", ИсключаемыеВиды); Форма.ПараметрыКонтактнойИнформации.Вставить("ОтложеннаяИнициализация", ОтложеннаяИнициализация); Форма.ПараметрыКонтактнойИнформации.Вставить("ВыполненаОтложеннаяИнициализация", Ложь); + Форма.ПараметрыКонтактнойИнформации.Вставить("Владелец", СсылкаНаОбъект); ПредыдущийВид = Неопределено; @@ -253,7 +328,7 @@ ГруппаДействий = Группа("ГруппаДействийКонтактнойИнформации", Форма, ГруппаКомпоновки, ГруппировкаПодчиненныхЭлементовФормы.Вертикальная, 4); - ЗаголовокСлева = ЗаголовокСлева(Форма, ПоложениеЗаголовкаКИ); + ЗаголовокСлева = ЗаголовокСлева(Форма.ПараметрыКонтактнойИнформации.ПоложениеЗаголовка); СозданныеЭлементы = ОбщегоНазначенияКлиентСервер.СкопироватьМассив(ИсключаемыеВиды); СтатусКонтекстногоМеню = 0; ПредыдущийЭлемент = Неопределено; @@ -302,7 +377,7 @@ КонецЕсли; Отбор = Новый Структура; - Отбор.Вставить("ИдентификаторСтрокиТабличнойЧасти", СтрокаТабличнойЧастиКИ.ИдентификаторСтроки); + Отбор.Вставить("ИдентификаторСтрокиТабличнойЧасти", СтрокаТабличнойЧастиКИ.ИдентификаторСтрокиТабличнойЧасти); СтрокиТаблицы = Форма.Объект[ИмяТабличнойЧасти].НайтиСтроки(Отбор); @@ -335,7 +410,7 @@ КонецЕсли; - ДобавитьРеквизитВОписание(Форма, СтрокаКИ, ЭтоНовыйВидКИ); + ДобавитьРеквизитВОписание(Форма, СтрокаКИ, ЭтоНовыйВидКИ,, НЕ СтрокаКИ.ЭтоИсторическаяКонтактнаяИнформация); Если СтатическийЭлемент Тогда @@ -343,32 +418,25 @@ Иначе - СледующаяСтрока = Неопределено; - Если СозданныеЭлементы.Количество() <> 0 Тогда - Для Счетчик = КонтактнаяИнформация.Индекс(СтрокаКИ) + 1 По КонтактнаяИнформация.Количество() - 1 Цикл - СтрокаПоиска = КонтактнаяИнформация.Получить(Счетчик); - Если СозданныеЭлементы.Найти(СтрокаПоиска.Вид) <> Неопределено - И Форма.Элементы[СтрокаПоиска.ИмяРеквизита].Родитель = ГруппаПолейВвода Тогда - СледующаяСтрока = СтрокаПоиска; - Прервать; - КонецЕсли; - КонецЦикла; + СледующаяСтрока = ?(СозданныеЭлементы.Количество() = 0, Неопределено, + ОпределитьСледующуюСтроку(Форма, КонтактнаяИнформация, СтрокаКИ)); + + Если НЕ СтрокаКИ.ЭтоИсторическаяКонтактнаяИнформация Тогда + ДобавитьСтрокуКонтактнойИнформации(Форма, СтрокаКИ, ЭтоНовыйВидКИ, КоличествоАдресов, СледующаяСтрока); КонецЕсли; - ДобавитьСтрокуКонтактнойИнформации(Форма, СтрокаКИ, ЭтоНовыйВидКИ, КоличествоАдресов, СледующаяСтрока); - КонецЕсли; - ПредыдущийВид = СтрокаКИ.Вид; + Если НЕ СтрокаКИ.ЭтоИсторическаяКонтактнаяИнформация Тогда + ПредыдущийВид = СтрокаКИ.Вид; + КонецЕсли; КонецЦикла; - Если НЕ ОтложеннаяИнициализация - И Форма.ПараметрыКонтактнойИнформации.СписокДобавляемыхЭлементов.Количество() > 0 - И НЕ Форма.ТолькоПросмотр Тогда + Если Не ОтложеннаяИнициализация И Форма.ПараметрыКонтактнойИнформации.СписокДобавляемыхЭлементов.Количество() > 0 Тогда ГруппаКоманды = Группа("ГруппаКонтактнаяИнформацияДобавитьПолеВвода", - Форма, Родитель, ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная, 5); + Форма, Родитель, ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная, 5); ГруппаКоманды.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение; ИмяКоманды = "КонтактнаяИнформацияДобавитьПолеВвода"; @@ -377,15 +445,37 @@ Команда.Отображение = ОтображениеКнопки.КартинкаИТекст; Команда.Картинка = БиблиотекаКартинок.ДобавитьЭлементСписка; Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду"; - Команда.ИзменяетСохраняемыеДанные = Истина; ДобавитьОписаниеЭлемента(Форма, ИмяКоманды, 9, Истина); + Кнопка = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), ГруппаКоманды); Кнопка.Заголовок = НСтр("ru = 'Добавить'"); - + Команда.ИзменяетСохраняемыеДанные = Истина; Кнопка.ИмяКоманды = ИмяКоманды; ДобавитьОписаниеЭлемента(Форма, ИмяКоманды, 2); + ИначеЕсли ОтложеннаяИнициализация + И Форма.Элементы.Найти("КонтактнаяИнформацияЗаглушка") = Неопределено + И Родитель.Вид = ВидГруппыФормы.Страница Тогда + + // Если отложенная инициализация и на странице нет элементов, то платформа скрывает страницу, + // поэтому надо создавать временный элемент, который при переходе на страницу удаляется. + ГруппаСтраниц = Родитель.Родитель; + ЗаголовокСтраницы = ?(ЗначениеЗаполнено(Родитель.Заголовок), Родитель.Заголовок, Родитель.Имя); + ЗаголовокГруппыСтраниц = ?(ЗначениеЗаполнено(ГруппаСтраниц.Заголовок), ГруппаСтраниц.Заголовок, ГруппаСтраниц.Имя); + + ПредупреждениеОРазмещении = НСтр("ru = 'Для отображения контактной информации необходимо разместить группу ""%1"" не первым элементом (после любой другой группы) в группе ""%2"" (меню Еще - Изменить форму).'"); + ПредупреждениеОРазмещении = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПредупреждениеОРазмещении, + ЗаголовокСтраницы, ЗаголовокГруппыСтраниц); + ТекстПодсказки = НСтр("ru = 'Также можно установить стандартные настройки формы: + | • в меню Еще выбрать пункт Изменить форму...; + | • в открывшейся форме ""Настройка формы"" в меню Еще выбрать пункт ""Установить стандартные настройки"".'"); + + Декорация = Форма.Элементы.Добавить("КонтактнаяИнформацияЗаглушка", Тип("ДекорацияФормы"), Родитель); + Декорация.Заголовок = ПредупреждениеОРазмещении; + Декорация.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка; + Декорация.Подсказка = ТекстПодсказки; + Декорация.ЦветТекста = ЦветаСтиля.ПоясняющийОшибкуТекст; КонецЕсли; КонецПроцедуры @@ -413,57 +503,63 @@ Возврат; КонецЕсли; + СсылкаНаОбъект = Объект.Ссылка; + МетаданныеОбъекта = СсылкаНаОбъект.Метаданные(); + ПолноеИмяОбъектаМетаданных = МетаданныеОбъекта.ПолноеИмя(); + ИмяГруппыВидовКИ = СтрЗаменить(ПолноеИмяОбъектаМетаданных, ".", ""); + ГруппаВидовКИ = Справочники.ВидыКонтактнойИнформации[ИмяГруппыВидовКИ]; + Параметры = Форма.ПараметрыКонтактнойИнформации; + ИмяЭлементаДляРазмещения = Параметры.ГруппаДляРазмещения; ПоложениеЗаголовкаКИ = Параметры.ПоложениеЗаголовка; ПоложениеЗаголовкаКИ = ?(ЗначениеЗаполнено(ПоложениеЗаголовкаКИ), ПоложениеЗаголовкаЭлементаФормы[ПоложениеЗаголовкаКИ], ПоложениеЗаголовкаЭлементаФормы.Верх); - - ИмяЭлементаДляРазмещения = Параметры.ГруппаДляРазмещения; - ВыполненаОтложеннаяИнициализация = Параметры.ВыполненаОтложеннаяИнициализация; - - УдалитьКомандыИЭлементыФормы(Форма); - - МассивУдаляемыхРеквизитов = Новый Массив; - - ИмяОбъекта = Объект.Ссылка.Метаданные().Имя; - - СтатическиеРеквизиты = ОбщегоНазначенияКлиентСервер.СкопироватьМассив(Параметры.ИсключаемыеВиды); - ОтложеннаяИнициализация = Параметры.ОтложеннаяИнициализация И Не ВыполненаОтложеннаяИнициализация; - ИменаТабличныхЧастейПоВидамКИ = Неопределено; - - Для Каждого РеквизитФормы Из Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл + ИспользуетсяКонтактнаяИнформация = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ГруппаВидовКИ, "Используется"); + Если ИспользуетсяКонтактнаяИнформация = Ложь Тогда + МассивУдаляемыхРеквизитов = Параметры.ДобавленныеРеквизиты; + Иначе + УдалитьКомандыИЭлементыФормы(Форма); - Если РеквизитФормы.ЭтоРеквизитТабличнойЧасти Тогда + МассивУдаляемыхРеквизитов = Новый Массив; + ИмяОбъекта = Объект.Ссылка.Метаданные().Имя; + + СтатическиеРеквизиты = ОбщегоНазначенияКлиентСервер.СкопироватьМассив(Параметры.ИсключаемыеВиды); + ИменаТабличныхЧастейПоВидамКИ = Неопределено; + + Для Каждого РеквизитФормы Из Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл - Если ИменаТабличныхЧастейПоВидамКИ = Неопределено Тогда - Отбор = Новый Структура("ЭтоРеквизитТабличнойЧасти", Истина); - ВидыКИТабличнойЧасти = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Выгрузить(Отбор , "Вид"); - ИменаТабличныхЧастейПоВидамКИ = ИменаТабличныхЧастейПоВидамКИ(ВидыКИТабличнойЧасти, ИмяОбъекта); - КонецЕсли; - - ИмяТабличнойЧасти = ИменаТабличныхЧастейПоВидамКИ[РеквизитФормы.Вид]; - МассивУдаляемыхРеквизитов.Добавить("Объект." + ИмяТабличнойЧасти + "." + РеквизитФормы.ИмяРеквизита); - МассивУдаляемыхРеквизитов.Добавить("Объект." + ИмяТабличнойЧасти + "." + РеквизитФормы.ИмяРеквизита + "ЗначенияПолей"); - - Иначе - - Индекс = СтатическиеРеквизиты.Найти(РеквизитФормы.Вид); - - Если Индекс = Неопределено Тогда // Реквизит создается динамически - Если Не ОтложеннаяИнициализация Тогда - МассивУдаляемыхРеквизитов.Добавить(РеквизитФормы.ИмяРеквизита); + Если РеквизитФормы.ЭтоРеквизитТабличнойЧасти Тогда + + Если ИменаТабличныхЧастейПоВидамКИ = Неопределено Тогда + Отбор = Новый Структура("ЭтоРеквизитТабличнойЧасти", Истина); + ВидыКИТабличнойЧасти = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Выгрузить(Отбор , "Вид"); + ИменаТабличныхЧастейПоВидамКИ = ИменаТабличныхЧастейПоВидамКИ(ВидыКИТабличнойЧасти, ИмяОбъекта); КонецЕсли; - Иначе - СтатическиеРеквизиты.Удалить(Индекс); + + ИмяТабличнойЧасти = ИменаТабличныхЧастейПоВидамКИ[РеквизитФормы.Вид]; + МассивУдаляемыхРеквизитов.Добавить("Объект." + ИмяТабличнойЧасти + "." + РеквизитФормы.ИмяРеквизита); + МассивУдаляемыхРеквизитов.Добавить("Объект." + ИмяТабличнойЧасти + "." + РеквизитФормы.ИмяРеквизита + "ЗначенияПолей"); + + ИначеЕсли НЕ РеквизитФормы.Свойство("ЭтоИсторическаяКонтактнаяИнформация") + ИЛИ НЕ РеквизитФормы.ЭтоИсторическаяКонтактнаяИнформация Тогда + + Индекс = СтатическиеРеквизиты.Найти(РеквизитФормы.Вид); + + Если Индекс = Неопределено Тогда // Реквизит создается динамически + Если Не ОтложеннаяИнициализация Тогда + МассивУдаляемыхРеквизитов.Добавить(РеквизитФормы.ИмяРеквизита); + КонецЕсли; + Иначе + СтатическиеРеквизиты.Удалить(Индекс); + КонецЕсли; + КонецЕсли; - - КонецЕсли; - КонецЦикла; - - Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Очистить(); + КонецЦикла; + Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Очистить(); + КонецЕсли; Форма.ИзменитьРеквизиты(, МассивУдаляемыхРеквизитов); ПриСозданииНаСервере(Форма, Объект, ИмяЭлементаДляРазмещения, ПоложениеЗаголовкаКИ, Параметры.ИсключаемыеВиды, ОтложеннаяИнициализация); @@ -542,7 +638,7 @@ ИменаТабличныхЧастейПоВидамКИ = ИменаТабличныхЧастейПоВидамКИ(ВидыКИТабличнойЧасти, ИмяОбъекта); КонецЕсли; - ИмяТабличнойЧасти = ИменаТабличныхЧастейПоВидамКИ[ВидИнформации]; // ИмяТабличнойЧастиПоВидуКИ(ВидИнформации, ИмяОбъекта); + ИмяТабличнойЧасти = ИменаТабличныхЧастейПоВидамКИ[ВидИнформации]; ТабличнаяЧастьФормы = Форма.Объект[ИмяТабличнойЧасти]; Для Каждого СтрокаТабличнойЧастиФормы Из ТабличнаяЧастьФормы Цикл @@ -553,14 +649,14 @@ Если ОбязательноеЗаполнение И ПустаяСтрока(Представление) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Нстр("ru = 'Поле ""%1"" не заполнено.'"), ВидИнформации.Наименование),,Поле); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), ВидИнформации.Наименование),,Поле); ТекущийУровеньОшибок = 2; Иначе ЗначенияПолей = СтрокаТабличнойЧастиФормы[ИмяРеквизита + "ЗначенияПолей"]; - ТекущийУровеньОшибок = ПроверитьКонтактнуюИнформацию(Представление, ЗначенияПолей, ВидИнформации, + ТекущийУровеньОшибок = ПроверитьЗаполнениеКонтактнойИнформации(Представление, ЗначенияПолей, ВидИнформации, ТипИнформации, ИмяРеквизита, , Поле); СтрокаТабличнойЧастиФормы[ИмяРеквизита] = Представление; @@ -586,12 +682,12 @@ // И нет других строк с данными для видов КИ с множественными значениями. ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Нстр("ru = 'Поле ""%1"" не заполнено.'"), ВидИнформации.Наименование),,, ИмяРеквизита); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не заполнено.'"), ВидИнформации.Наименование),,, ИмяРеквизита); ТекущийУровеньОшибок = 2; Иначе - ТекущийУровеньОшибок = ПроверитьКонтактнуюИнформацию(Представление, СтрокаТаблицы.ЗначенияПолей, + ТекущийУровеньОшибок = ПроверитьЗаполнениеКонтактнойИнформации(Представление, СтрокаТаблицы.ЗначенияПолей, ВидИнформации, ТипИнформации, ИмяРеквизита, Комментарий); КонецЕсли; @@ -632,6 +728,16 @@ ИмяРеквизита = СтрокаТаблицы.ИмяРеквизита; ОбязательноеЗаполнение = ВидИнформации.ОбязательноеЗаполнение; + Если НЕ Форма.Элементы.Найти(СтрокаТаблицы.ИмяРеквизита) = Неопределено Тогда + Элемент = Форма.Элементы[СтрокаТаблицы.ИмяРеквизита]; + Если Элемент.Вид = ВидПоляФормы.ПолеНадписи И Элемент.Гиперссылка Тогда + Если ПустаяСтрока(СтрокаТаблицы.Представление) + ИЛИ СтрокаТаблицы.Представление = УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки() Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если СтрокаТаблицы.ЭтоРеквизитТабличнойЧасти Тогда Если ИменаТабличныхЧастейПоВидамКИ = Неопределено Тогда @@ -655,9 +761,10 @@ ЗаписатьКонтактнуюИнформацию(Объект, ЗначенияПолей, ВидИнформации, ТипИнформации, ИдентификаторСтроки); КонецЦикла; - + Иначе - ЗаписатьКонтактнуюИнформацию(Объект, СтрокаТаблицы.ЗначенияПолей, ВидИнформации, ТипИнформации); + ДействуетС = ?(СтрокаТаблицы.Свойство("ДействуетС"), СтрокаТаблицы.ДействуетС, Неопределено); + ЗаписатьКонтактнуюИнформацию(Объект, СтрокаТаблицы.ЗначенияПолей, ВидИнформации, ТипИнформации,, ДействуетС); КонецЕсли; ПредыдущийВид = ВидИнформации; @@ -678,11 +785,12 @@ // Неопределено // Функция ОбновитьКонтактнуюИнформацию(Форма, Объект, Результат = Неопределено) Экспорт - + Если Результат = Неопределено Тогда Возврат Неопределено; - - ИначеЕсли Результат.Свойство("ЭтоДобавлениеКомментария") Тогда + КонецЕсли; + + Если Результат.Свойство("ЭтоДобавлениеКомментария") Тогда ИзменитьКомментарий(Форма, Результат.ИмяРеквизита, Результат.ЭтоДобавлениеКомментария); ИначеЕсли Результат.Свойство("ДобавляемыйВид") Тогда @@ -703,8 +811,12 @@ КомментарийПервыйЭлемент = НайденнаяСтрокаПервыйЭлемент.Комментарий; НайденнаяСтрокаПервыйЭлемент.Комментарий = НайденнаяСтрокаВторойЭлемент.Комментарий; НайденнаяСтрокаВторойЭлемент.Комментарий = КомментарийПервыйЭлемент; - Форма.Элементы["Комментарий" + Результат.ПервыйЭлемент].Заголовок = НайденнаяСтрокаПервыйЭлемент.Комментарий; - Форма.Элементы["Комментарий" + Результат.ВторойЭлемент].Заголовок = НайденнаяСтрокаВторойЭлемент.Комментарий; + Если Форма.Элементы.Найти("Комментарий" + Результат.ПервыйЭлемент) <> Неопределено Тогда + Форма.Элементы["Комментарий" + Результат.ПервыйЭлемент].Заголовок = НайденнаяСтрокаПервыйЭлемент.Комментарий; + КонецЕсли; + Если Форма.Элементы.Найти("Комментарий" + Результат.ВторойЭлемент) <> Неопределено Тогда + Форма.Элементы["Комментарий" + Результат.ВторойЭлемент].Заголовок = НайденнаяСтрокаВторойЭлемент.Комментарий; + КонецЕсли; ИначеЕсли ЗначениеЗаполнено(НайденнаяСтрокаПервыйЭлемент.Комментарий) ИЛИ ЗначениеЗаполнено(НайденнаяСтрокаВторойЭлемент.Комментарий) Тогда @@ -715,8 +827,6 @@ ИзменитьКомментарий(Форма, Результат.ПервыйЭлемент, ЗначениеЗаполнено(НайденнаяСтрокаПервыйЭлемент.Комментарий)); ИзменитьКомментарий(Форма, Результат.ВторойЭлемент, ЗначениеЗаполнено(НайденнаяСтрокаВторойЭлемент.Комментарий)); КонецЕсли; - - КонецЕсли; Возврат Неопределено; @@ -759,6 +869,11 @@ // Процедура ВыполнитьОтложеннуюИнициализацию(Форма, Объект) Экспорт + КонтактнаяИнформацияЗаглушка = Форма.Элементы.Найти("КонтактнаяИнформацияЗаглушка"); // временный элемент + Если КонтактнаяИнформацияЗаглушка <> Неопределено Тогда + Форма.Элементы.Удалить(КонтактнаяИнформацияЗаглушка); + КонецЕсли; + КонтактнаяИнформацияОписаниеДополнительныхРеквизитов = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Выгрузить(, "Вид, Представление, ЗначенияПолей, Комментарий"); Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Очистить(); ИмяЭлементаДляРазмещения = Форма.ПараметрыКонтактнойИнформации.ГруппаДляРазмещения; @@ -798,7 +913,7 @@ // АдресВXML - Строка - строка XML контактной информации. // ПараметрыПроверки - Структура, СправочникСсылка.ВидыКонтактнойИнформации - флаги проверки адреса. // АдресТолькоРоссийский - Булево - Адрес должен быть только Российским. По умолчанию ИСТИНА. -// ФорматАдреса - Строка - По какому классифткатору проверять "КЛАДР" или "ФИАС". По умолчанию "КЛАДР". +// ФорматАдреса - Строка - По какому классификатору проверять "КЛАДР" или "ФИАС". По умолчанию "КЛАДР". // Возвращаемое значение: // Структура - содержит структуру с полями: // * Результат - Строка - результат проверки: "Корректный", "НеПроверен", "СодержитОшибки". @@ -846,7 +961,7 @@ // // Параметры: // Представление - Строка - строковое представление контактной информации, выводимое пользователю. -// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации, Структура +// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации, Структура. // // Возвращаемое значение: // Строка - контактная информация в XML. @@ -936,7 +1051,7 @@ // * КодАльфа3 - Строка - часть описания страны. // // Если передана пустая строка, то возвращается пустая структура. -// Если страна не найдена в справочнике, то но найдена в классфикаторе, то поле "Ссылка" результата не заполнено. +// Если страна не найдена в справочнике, то но найдена в классификаторе, то поле "Ссылка" результата не заполнено. // Если страна не найдена ни в адресе, ни в классификаторе, то будет заполнено только поле "Наименование". // Функция СтранаАдресаКонтактнойИнформации(Знач XMLСтрока) Экспорт @@ -1128,12 +1243,12 @@ // Возвращаемое значение: // Строка - строковое представление значения. // -Функция КонтактнаяИнформацияОбъекта(Ссылка, ВидКонтактнойИнформации) Экспорт +Функция КонтактнаяИнформацияОбъекта(Ссылка, ВидКонтактнойИнформации, Дата = Неопределено) Экспорт МассивОбъектов = Новый Массив; МассивОбъектов.Добавить(Ссылка); - КонтактнаяИнформацияОбъекта = КонтактнаяИнформацияОбъектов(МассивОбъектов,, ВидКонтактнойИнформации); + КонтактнаяИнформацияОбъекта = КонтактнаяИнформацияОбъектов(МассивОбъектов,, ВидКонтактнойИнформации, Дата); Если КонтактнаяИнформацияОбъекта.Количество() > 0 Тогда Возврат КонтактнаяИнформацияОбъекта[0].Представление; @@ -1149,7 +1264,11 @@ // МенеджерВременныхТаблиц - МенеджерВременныхТаблиц - для формирования. // МассивОбъектов - Массив - владельцы контактной информации, все элементы должны быть одного типа. // ТипыКИ - Массив - необязательный, используется если не задан все типы. -// ВидыКИ - Массив - необязательный, используется если не задан все виды. +// ВидыКИ - Массив - необязательный, используется если не задан все виды. +// Дата - Дата - необязательный, дата с которой действует запись контактной информации, +// используется при хранении истории изменения контактной информации. +// Если владелец хранит историю изменений, то при несоответствии параметра +// дате будет вызвано исключение. // // В менеджере создается временная таблица ВТКонтактнаяИнформация с полями: // * Объект - Ссылка - владелец КИ. @@ -1158,7 +1277,7 @@ // * ЗначенияПолей - Строка - данные значений полей. // * Представление - Строка - представление КИ. // -Процедура СоздатьВТКонтактнаяИнформация(МенеджерВременныхТаблиц, МассивОбъектов, ТипыКИ = Неопределено, ВидыКИ = Неопределено) Экспорт +Процедура СоздатьВТКонтактнаяИнформация(МенеджерВременныхТаблиц, МассивОбъектов, ТипыКИ = Неопределено, ВидыКИ = Неопределено, Дата = Неопределено) Экспорт Если ТипЗнч(МассивОбъектов) = Тип("Массив") И МассивОбъектов.Количество() > 0 Тогда Ссылка = МассивОбъектов.Получить(0); @@ -1166,21 +1285,80 @@ ВызватьИсключение НСтр("ru = 'Неверное значение для массива владельцев контактной информации.'"); КонецЕсли; - Запрос = Новый Запрос(" - |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | КонтактнаяИнформация.Ссылка КАК Объект, - | КонтактнаяИнформация.Вид КАК Вид, - | КонтактнаяИнформация.Тип КАК Тип, - | КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей, - | КонтактнаяИнформация.Представление КАК Представление - |ПОМЕСТИТЬ ВТКонтактнаяИнформация - |ИЗ - | " + Ссылка.Метаданные().ПолноеИмя() + ".КонтактнаяИнформация КАК КонтактнаяИнформация - |ГДЕ - | КонтактнаяИнформация.Ссылка В (&МассивОбъектов) - | " + ?(ТипыКИ = Неопределено, "", "И КонтактнаяИнформация.Тип В (&ТипыКИ)") + " - | " + ?(ВидыКИ = Неопределено, "", "И КонтактнаяИнформация.Вид В (&ВидыКИ)") + " - |"); + МетаданныеОбъекта = Ссылка.Метаданные(); + Если МетаданныеОбъекта.ТабличныеЧасти.Найти("КонтактнаяИнформация") = Неопределено Тогда + ВызватьИсключение МетаданныеОбъекта.Имя + " " + НСтр("ru = 'не содержит контактную информацию.'"); + КонецЕсли; + + Если МетаданныеОбъекта.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ДействуетС") <> Неопределено Тогда + Если ТипЗнч(Дата) <> Тип("Дата") Тогда + Дата = ТекущаяДатаСеанса(); + КонецЕсли; + + УсловияОтбора = ?(ВидыКИ = Неопределено, "", " КонтактнаяИнформация.Вид В (&ВидыКИ)"); + Если ПустаяСтрока(УсловияОтбора) Тогда + УсловиеИ = ""; + Иначе + УсловиеИ = " И "; + КонецЕсли; + УсловияОтбора = УсловияОтбора + ?(ТипыКИ = Неопределено, "", УсловиеИ + " КонтактнаяИнформация.Тип В (&ТипыКИ)"); + Если НЕ ПустаяСтрока(УсловияОтбора) Тогда + УсловияОтбора = " ГДЕ " + УсловияОтбора; + КонецЕсли; + + Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ + | КонтактнаяИнформация.Ссылка КАК Объект, + | КонтактнаяИнформация.Вид КАК Вид, + | МАКСИМУМ(КонтактнаяИнформация.ДействуетС) КАК ДействуетС + |ПОМЕСТИТЬ СрезКонтактнойИнформации + |ИЗ + | " + МетаданныеОбъекта.ПолноеИмя() + ".КонтактнаяИнформация КАК КонтактнаяИнформация + |ГДЕ + | КонтактнаяИнформация.Ссылка В (&МассивОбъектов) + | И КонтактнаяИнформация.ДействуетС <= &ДействуетС + | И КонтактнаяИнформация.Вид <> ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ПустаяСсылка) + | + |СГРУППИРОВАТЬ ПО + | КонтактнаяИнформация.Вид, КонтактнаяИнформация.Ссылка + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | КонтактнаяИнформация.Ссылка КАК Объект, + | КонтактнаяИнформация.Вид КАК Вид, + | КонтактнаяИнформация.Тип КАК Тип, + | КонтактнаяИнформация.ДействуетС КАК ДействуетС, + | КонтактнаяИнформация.Представление КАК Представление, + | КонтактнаяИнформация.ЗначенияПолей + |ПОМЕСТИТЬ ВТКонтактнаяИнформация + |ИЗ + | СрезКонтактнойИнформации КАК СрезКонтактнойИнформации + | ЛЕВОЕ СОЕДИНЕНИЕ " + МетаданныеОбъекта.ПолноеИмя() + ".КонтактнаяИнформация КАК КонтактнаяИнформация + | ПО СрезКонтактнойИнформации.Вид = КонтактнаяИнформация.Вид + | И СрезКонтактнойИнформации.ДействуетС = КонтактнаяИнформация.ДействуетС + | И СрезКонтактнойИнформации.Объект = КонтактнаяИнформация.Ссылка " + УсловияОтбора); + + Запрос.УстановитьПараметр("ДействуетС", Дата); + Иначе + Дата = ""; + Запрос = Новый Запрос(" + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | КонтактнаяИнформация.Ссылка КАК Объект, + | КонтактнаяИнформация.Вид КАК Вид, + | КонтактнаяИнформация.Тип КАК Тип, + | КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей, " + Дата + " + | КонтактнаяИнформация.Представление КАК Представление + |ПОМЕСТИТЬ ВТКонтактнаяИнформация + |ИЗ + | " + МетаданныеОбъекта.ПолноеИмя() + ".КонтактнаяИнформация КАК КонтактнаяИнформация + |ГДЕ + | КонтактнаяИнформация.Ссылка В (&МассивОбъектов) + | И КонтактнаяИнформация.Вид <> ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ПустаяСсылка) + | " + ?(ТипыКИ = Неопределено, "", "И КонтактнаяИнформация.Тип В (&ТипыКИ)") + " + | " + ?(ВидыКИ = Неопределено, "", "И КонтактнаяИнформация.Вид В (&ВидыКИ)") + " + |"); + + КонецЕсли; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; @@ -1197,6 +1375,10 @@ // МассивОбъектов - Массив - владельцы контактной информации, все элементы должны быть одного типа. // ТипыКИ - Массив - необязательный, используется если не задан все типы. // ВидыКИ - Массив - необязательный, используется если не задан все виды. +// Дата - Дата - необязательный, дата с которой действует запись контактной информации, +// используется при хранении истории изменения контактной информации. +// Если владелец хранит историю изменений, то при несоответствии параметра +// дате будет вызвано исключение. // // Возвращаемое значение // Таблица значений - результат. Колонки: @@ -1205,23 +1387,42 @@ // * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации // * ЗначенияПолей - Строка - данные значений полей. // * Представление - Строка - представление КИ. +// * ДействуетС - Дата - Дата с которой действует запись контактной информации, +// поле присутствует только для владельцев контактной +// информации которые хранят историю изменений. // -Функция КонтактнаяИнформацияОбъектов(МассивОбъектов, ТипыКИ = Неопределено, ВидыКИ = Неопределено) Экспорт +Функция КонтактнаяИнформацияОбъектов(МассивОбъектов, ТипыКИ = Неопределено, ВидыКИ = Неопределено, Дата = Неопределено) Экспорт + + Если Дата = Неопределено Тогда + Дата = ТекущаяДатаСеанса(); + КонецЕсли; + + Если ТипЗнч(МассивОбъектов) = Тип("Массив") И МассивОбъектов.Количество() > 0 Тогда + Ссылка = МассивОбъектов.Получить(0); + Иначе + ВызватьИсключение НСтр("ru = 'Неверное значение для массива владельцев контактной информации.'"); + КонецЕсли; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; - СоздатьВТКонтактнаяИнформация(Запрос.МенеджерВременныхТаблиц, МассивОбъектов, ТипыКИ, ВидыКИ); + СоздатьВТКонтактнаяИнформация(Запрос.МенеджерВременныхТаблиц, МассивОбъектов, ТипыКИ, ВидыКИ, Дата); + + Если ТипЗнч(Дата) = Тип("Дата") Тогда + ДействуетС = " КонтактнаяИнформация.ДействуетС КАК ДействуетС, "; + Иначе + ДействуетС = ""; + КонецЕсли; Запрос.Текст = - "ВЫБРАТЬ - | КонтактнаяИнформация.Объект КАК Объект, - | КонтактнаяИнформация.Вид КАК Вид, - | КонтактнаяИнформация.Тип КАК Тип, - | КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей, - | КонтактнаяИнформация.Представление КАК Представление - |ИЗ - | ВТКонтактнаяИнформация КАК КонтактнаяИнформация"; + "ВЫБРАТЬ + | КонтактнаяИнформация.Объект КАК Объект, + | КонтактнаяИнформация.Вид КАК Вид, + | КонтактнаяИнформация.Тип КАК Тип, + | КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей, " + ДействуетС + " + | КонтактнаяИнформация.Представление КАК Представление + |ИЗ + | ВТКонтактнаяИнформация КАК КонтактнаяИнформация"; Возврат Запрос.Выполнить().Выгрузить(); @@ -1238,7 +1439,7 @@ // * КлючСтроки - Структура - фильтр для поиска строки в табличной части, где Ключ - имя колонки в табличной // части, Значение - значение отбора. // -Процедура ЗаполнитьКонтактнуюИнформациюОбъектов(ДанныеЗаполнения) Экспорт +Процедура ЗаполнитьКонтактнуюИнформациюОбъектов(ДанныеЗаполнения, Дата = Неопределено) Экспорт ПредыдущийПриемник = Неопределено; ДанныеЗаполнения.Сортировать("Приемник, ВидКИ"); @@ -1263,24 +1464,25 @@ ИмяТабличнойЧасти = ИмяТабличнойЧастиПоВидуКИ(ВидКИ, ИмяОбъектаПриемника); Если ПустаяСтрока(ИмяТабличнойЧасти) Тогда - ИмяТабличнойЧасти = "КонтактнаяИнформация"; - КонецЕсли; - Если ТипЗнч(СтрокаЗаполнения.КлючСтроки) = Тип("Структура") Тогда + ЗаполнитьКонтактнуюИнформациюТабличнойЧасти(Приемник, ВидКИ, СтрокаЗаполнения.СтруктураКИ, Дата); + Иначе + Если ТипЗнч(СтрокаЗаполнения.КлючСтроки) <> Тип("Структура") Тогда + Продолжить; + КонецЕсли; + Если СтрокаЗаполнения.КлючСтроки.Свойство("НомерСтроки") Тогда КоличествоСтрокТабличнойЧасти = Приемник[ИмяТабличнойЧасти].Количество(); НомерСтроки = СтрокаЗаполнения.КлючСтроки.НомерСтроки; Если НомерСтроки > 0 И НомерСтроки <= КоличествоСтрокТабличнойЧасти Тогда СтрокаТабличнойЧасти = Приемник[ИмяТабличнойЧасти][НомерСтроки - 1]; - ЗаполнитьКонтактнуюИнформациюТабличнойЧасти(Приемник, ВидКИ, СтрокаЗаполнения.СтруктураКИ, СтрокаТабличнойЧасти); + ЗаполнитьКонтактнуюИнформациюТабличнойЧасти(Приемник, ВидКИ, СтрокаЗаполнения.СтруктураКИ, СтрокаТабличнойЧасти, Дата); КонецЕсли; Иначе СтрокиТабличнойЧасти = Приемник[ИмяТабличнойЧасти].НайтиСтроки(СтрокаЗаполнения.КлючСтроки); Для каждого СтрокаТабличнойЧасти Из СтрокиТабличнойЧасти Цикл - ЗаполнитьКонтактнуюИнформациюТабличнойЧасти(Приемник, ВидКИ, СтрокаЗаполнения.СтруктураКИ, СтрокаТабличнойЧасти); + ЗаполнитьКонтактнуюИнформациюТабличнойЧасти(Приемник, ВидКИ, СтрокаЗаполнения.СтруктураКИ, СтрокаТабличнойЧасти, Дата); КонецЦикла; КонецЕсли; - Иначе - ЗаполнитьКонтактнуюИнформациюТабличнойЧасти(Приемник, ВидКИ, СтрокаЗаполнения.СтруктураКИ); КонецЕсли; ПредыдущийПриемник = Приемник; @@ -1302,7 +1504,7 @@ // КлючСтроки - Структура - отбор для поиска строки в табличной части, Ключ - Имя колонки в табличной части, // значение - значение отбора. // -Процедура ЗаполнитьКонтактнуюИнформациюОбъекта(Приемник, ВидКИ, СтруктураКИ, КлючСтроки = Неопределено) Экспорт +Процедура ЗаполнитьКонтактнуюИнформациюОбъекта(Приемник, ВидКИ, СтруктураКИ, КлючСтроки = Неопределено, Дата = Неопределено) Экспорт ДанныеЗаполнения = Новый ТаблицаЗначений; ДанныеЗаполнения.Колонки.Добавить("Приемник"); @@ -1316,10 +1518,125 @@ СтрокаЗаполнения.СтруктураКИ = СтруктураКИ; СтрокаЗаполнения.КлючСтроки = КлючСтроки; - ЗаполнитьКонтактнуюИнформациюОбъектов(ДанныеЗаполнения); + ЗаполнитьКонтактнуюИнформациюОбъектов(ДанныеЗаполнения, Дата); КонецПроцедуры +// Проверяет контактную информацию +// +// Параметры: +// Представление - Строка - Строка - представления. Используется, если невозможно определить представление из параметра. +// ЗначенияПолей (отсутствие поля "Представление"). +// ЗначенияПолей - Строка, Структура, Соответствие, СписокЗначений - описание полей контактной информации. +// ВидИнформации - СправочникСсылка.ВидыКонтактнойИнформации - Используется для определения типа, если его невозможно вычислить по полю ЗначенияПолей. +// ТипИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации - Тип контактной информации +// ИмяРеквизита - Строка - Имя реквизита на форме +// Комментарий - Строка - Комментарий +// ПутьКРеквизиту - Строка - Путь к реквизиту. +// +// Возвращаемое значение: +// Число - уровень ошибок, 0 - ошибки отсутствуют. +// +Функция ПроверитьКонтактнуюИнформацию(Представление, ЗначенияПолей, ВидИнформации, ТипИнформации, + ИмяРеквизита, Комментарий = Неопределено, ПутьКРеквизиту = "") Экспорт + + ТекстСериализации = ?(ПустаяСтрока(ЗначенияПолей), Представление, ЗначенияПолей); + + ОбъектКИ = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(ТекстСериализации, ВидИнформации); + Если Комментарий <> Неопределено Тогда + ОбъектКИ.Комментарий = Комментарий; + КонецЕсли; + ОбъектКИ.Представление = Представление; + + Если ПустаяСтрока(Представление) И ПустаяСтрока(ОбъектКИ.Комментарий) Тогда + Возврат 0; + КонецЕсли; + + // Проверка + Если ТипИнформации = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда + УровеньОшибок = ОшибкиЗаполненияЭлектроннойПочты(ОбъектКИ, ВидИнформации, ИмяРеквизита, ПутьКРеквизиту); + ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда + УровеньОшибок = ОшибкиЗаполненияАдреса(ОбъектКИ.Состав, ВидИнформации, ИмяРеквизита); + ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда + УровеньОшибок = ОшибкиЗаполненияТелефона(ОбъектКИ, ВидИнформации, ИмяРеквизита); + ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.Факс Тогда + УровеньОшибок = ОшибкиЗаполненияТелефона(ОбъектКИ, ВидИнформации, ИмяРеквизита); + ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда + УровеньОшибок = ОшибкиЗаполненияВебСтраницы(ОбъектКИ, ВидИнформации, ИмяРеквизита); + Иначе + // Другое (прочее) не проверяем. + УровеньОшибок = 0; + КонецЕсли; + + Возврат УровеньОшибок; + +КонецФункции + +// Возвращает сведения об адресах в виде структуру частей адреса и кодов КЛАДР +// +// Параметры: +// Адреса - Массив - XDTO объекты или строки XML контактной информации +// ДополнительныеПараметры - Структура - параметры контактной информации. +// * БезПредставлений - Булево - Если Истина, то поле представления адреса будет отсутствовать. +// * КодыКЛАДР - Булево - Если Истина, то возвращает структуру с кодами КЛАДР по всем частям адреса +// * ПолныеНаименованияСокращений - Булево - Если Истина, то возвращает полное наименование адресных объектов +// * НаименованиеВключаетСокращение - Булево - Если Истина, то поля содержат сокращениям в наименованиях адресных объектов. +// Возвращаемое значение: +// Массив - содержит массив структур, содержимое структуры см. описание функции СведенияОбАдресе. +// +Функция СведенияОбАдресах(Адреса, ДополнительныеПараметры = Неопределено) Экспорт + Возврат УправлениеКонтактнойИнформациейСлужебный.СведенияОбАдресахВВидеСтруктуры(Адреса, ДополнительныеПараметры); +КонецФункции + +// Возвращает сведения об адресах в виде структуру частей адреса и кодов КЛАДР +// +// Параметры: +// Адрес - Строка, ОбъектXDTO - XDTO объект или строка XML контактной информации +// ДополнительныеПараметры - Структура - параметры контактной информации. +// * БезПредставлений - Булево - Если Истина, то поле представления адреса будет отсутствовать. +// * КодыКЛАДР - Булево - Если Истина, то возвращает структуру с кодами КЛАДР по всем частям адреса +// * ПолныеНаименованияСокращений - Булево - Если Истина, то возвращает полное наименование адресных объектов +// * НаименованиеВключаетСокращение - Булево - Если Истина, то поля содержат сокращениям в наименованиях адресных объектов. +// Возвращаемое значение: +// Структура - набор пар ключ-значение. Состав свойств для адреса: +// * Страна - Строка - текстовое представление страны. +// * КодСтраны - Строка - код страны по ОКСМ. +// * Индекс - Строка - почтовый индекс. +// * КодРегиона - Строка - код региона РФ. +// * Регион - Строка - текстовое представление региона РФ. +// * РегионСокращение - Строка - сокращение региона. +// * Округ - Строка - текстовое представление округа. +// * ОкругСокращение - Строка - сокращение округа. +// * Район - Строка - текстовое представление района. +// * РайонСокращение - Строка - сокращение района. +// * Город - Строка - текстовое представление города +// * ГородСокращение - Строка - сокращение города. +// * ВнутригородскойРайон - Строка - текстовое представление внутригородского района +// * ВнутригородскойРайонСокращение - Строка - сокращение внутригородского района. +// * НаселенныйПункт - Строка - текстовое представление населенного пункта. +// * НаселенныйПунктСокращение - Строка - сокращение населенного пункта. +// * Улица - Строка - текстовое представление улицы. +// * УлицаСокращение - Строка - сокращение улицы. +// * ДополнительнаяТерритория - Строка - текстовое представление дополнительной территории. +// * ДополнительнаяТерриторияСокращение - Строка - сокращение дополнительной территории. +// * ЭлементДополнительнойТерритории - Строка - текстовое представление элемента дополнительной территории. +// * ЭлементДополнительнойТерриторииСокращение - Строка - сокращение элемента дополнительной территории. +// * Здание - Структура - структура с информацией о здании адреса +// ** ТипЗдания - Строка - тип объекта адресации адреса РФ согласно приказу ФНС ММВ-7-1/525 от 31.08.2011. +// ** Номер - Строка - текстовое представление номера дома (только для адресов РФ). +// * Корпуса - Массив - содержит структуры(поля структуры: ТипКорпуса, Номер) с перечнем корпусов адреса. +// * Помещения - Массив - содержит структуры(поля структуры: ТипПомещения, Номер) с перечнем помещений адреса. +// * КодыКЛАДР - Структура - Коды КЛАДР, если установлен параметр КодыКЛАДР. +// ** Регион - Строка - код КЛАДР региона. +// ** Район - Строка - код КЛАДР район. +// ** Город - Строка - код КЛАДР города. +// ** НаселенныйПункт - Строка - код КЛАДР населенного пункта. +// ** Улица - Строка - код КЛАДР улица. +// * ДополнительныеКоды - Структура - Коды ОКТМО, ОКТМО, ОКАТО, КодИФНСФЛ, КодИФНСЮЛ, КодУчасткаИФНСФЛ, КодУчасткаИФНСЮЛ. +Функция СведенияОбАдресе(Адрес, ДополнительныеПараметры = Неопределено) Экспорт + Возврат УправлениеКонтактнойИнформациейСлужебный.СведенияОбАдресеВВидеСтруктуры(Адрес, ДополнительныеПараметры); +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обратная совместимость. @@ -1336,20 +1653,62 @@ // * Представление - Строка - представление КИ, введенное пользователем. // * СтруктураПолей - Структура - пары ключ-значение данных информации. // -Функция ТаблицаКонтактнойИнформацииОбъекта(Ссылка, ВидКонтактнойИнформации) Экспорт +Функция ТаблицаКонтактнойИнформацииОбъекта(Ссылка, ВидКонтактнойИнформации, Дата = Неопределено) Экспорт - Запрос = Новый Запрос(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВЫБРАТЬ - | Данные.ИдентификаторСтрокиТабличнойЧасти КАК НомерСтроки, - | Данные.Представление КАК Представление, - | Данные.ЗначенияПолей КАК ЗначенияПолей + МетаданныеОбъекта = Ссылка.Метаданные(); + + Запрос = Новый Запрос; + Если МетаданныеОбъекта.ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ДействуетС") <> Неопределено Тогда + ДействуетС = ?(ЗначениеЗаполнено(Дата), Дата, ТекущаяДатаСеанса()); + ТекстЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВЫБРАТЬ РАЗРЕШЕННЫЕ + | КонтактнаяИнформация.Ссылка КАК Объект, + | КонтактнаяИнформация.Вид КАК Вид, + | МАКСИМУМ(КонтактнаяИнформация.ДействуетС) КАК ДействуетС + |ПОМЕСТИТЬ СрезКонтактнойИнформации + |ИЗ + | %1.КонтактнаяИнформация КАК КонтактнаяИнформация + |ГДЕ + | КонтактнаяИнформация.Ссылка = &Ссылка + | И КонтактнаяИнформация.ДействуетС <= &ДействуетС + | И КонтактнаяИнформация.Вид <> ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ПустаяСсылка) + | И КонтактнаяИнформация.Вид = &Вид + | + |СГРУППИРОВАТЬ ПО + | КонтактнаяИнформация.Вид, + | КонтактнаяИнформация.Ссылка + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | КонтактнаяИнформация.ИдентификаторСтрокиТабличнойЧасти КАК НомерСтроки, + | КонтактнаяИнформация.Представление КАК Представление, + | КонтактнаяИнформация.ЗначенияПолей + |ИЗ + | СрезКонтактнойИнформации КАК СрезКонтактнойИнформации + | ЛЕВОЕ СОЕДИНЕНИЕ %1.КонтактнаяИнформация КАК КонтактнаяИнформация + | ПО СрезКонтактнойИнформации.Вид = КонтактнаяИнформация.Вид + | И СрезКонтактнойИнформации.ДействуетС = КонтактнаяИнформация.ДействуетС + | И СрезКонтактнойИнформации.Объект = КонтактнаяИнформация.Ссылка + |УПОРЯДОЧИТЬ ПО + | КонтактнаяИнформация.ИдентификаторСтрокиТабличнойЧасти", МетаданныеОбъекта.ПолноеИмя()); + + Запрос.УстановитьПараметр("ДействуетС", ДействуетС); + Иначе + ТекстЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ВЫБРАТЬ + | КонтактнаяИнформация.ИдентификаторСтрокиТабличнойЧасти КАК НомерСтроки, + | КонтактнаяИнформация.Представление КАК Представление, + | КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей |ИЗ - | %1.КонтактнаяИнформация КАК Данные + | %1.КонтактнаяИнформация КАК КонтактнаяИнформация |ГДЕ - | Данные.Ссылка = &Ссылка - | И Данные.Вид = &Вид - |УПОРЯДОЧИТЬ ПО - | Данные.ИдентификаторСтрокиТабличнойЧасти - |", Ссылка.Метаданные().ПолноеИмя())); + | КонтактнаяИнформация.Ссылка = &Ссылка + | И КонтактнаяИнформация.Вид = &Вид + |УПОРЯДОЧИТЬ ПО + | КонтактнаяИнформация.ИдентификаторСтрокиТабличнойЧасти", МетаданныеОбъекта.ПолноеИмя()); + + КонецЕсли; + + Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("Вид", ВидКонтактнойИнформации); @@ -1370,7 +1729,6 @@ Возврат Результат; КонецФункции - // Преобразует данные формата XML в предыдущий формат контактной информации. // // Параметры: @@ -1444,72 +1802,6 @@ Возврат УправлениеКонтактнойИнформациейКлиентСервер.СтруктураЗначенийПолей(Данные, ВидКонтактнойИнформации); КонецФункции -// Возвращает сведения об адресах в виде структуру частей адреса и кодов КЛАДР -// -// Параметры: -// Адреса - Массив - XDTO объекты или строки XML контактной информации -// ДополнительныеПараметры - Структура - параметры контактной информации. -// * БезПредставлений - Булево - Если Истина, то поле представления адреса будет отсутствовать. -// * КодыКЛАДР - Булево - Если Истина, то возвращает структуру с кодами КЛАДР по всем частям адреса -// * ПолныеНаименованияСокращений - Булево - Если Истина, то возвращает полное наименование адресных объектов -// * НаименованиеВключаетСокращение - Булево - Если Истина, то поля содержат сокращениям в наименованиях адресных объектов. -// Возвращаемое значение: -// Массив - содержит массив структур, содержимое структуры см. описание функции СведенияОбАдресе -// -Функция СведенияОбАдресах(Адреса, ДополнительныеПараметры = Неопределено) Экспорт - Возврат УправлениеКонтактнойИнформациейСлужебный.СведенияОбАдресахВВидеСтруктуры(Адреса, ДополнительныеПараметры); -КонецФункции - -// Возвращает сведения об адресах в виде структуру частей адреса и кодов КЛАДР -// -// Параметры: -// Адрес - Строка, ОбъектXDTO - XDTO объект или строка XML контактной информации -// ДополнительныеПараметры - Структура - параметры контактной информации. -// * БезПредставлений - Булево - Если Истина, то поле представления адреса будет отсутствовать. -// * КодыКЛАДР - Булево - Если Истина, то возвращает структуру с кодами КЛАДР по всем частям адреса -// * ПолныеНаименованияСокращений - Булево - Если Истина, то возвращает полное наименование адресных объектов -// * НаименованиеВключаетСокращение - Булево - Если Истина, то поля содержат сокращениям в наименованиях адресных объектов. -// Возвращаемое значение: -// Структура - набор пар ключ-значение. Состав свойств для адреса: -// * Страна - Строка - текстовое представление страны. -// * КодСтраны - Строка - код страны по ОКСМ. -// * Индекс - Строка - почтовый индекс. -// * Регион - Строка - текстовое представление региона РФ. -// * КодРегиона - Строка - код региона РФ. -// * РегионСокращение - Строка - сокращение региона. -// * Округ - Строка - текстовое представление округа. -// * ОкругСокращение - Строка - сокращение округа. -// * РегионСокращение - Строка - сокращение региона. -// * Район - Строка - текстовое представление района. -// * РайонСокращение - Строка - сокращение района. -// * Город - Строка - текстовое представление города -// * ГородСокращение - Строка - сокращение города. -// * ВнутригородскойРайон - Строка - текстовое представление внутригородского района -// * ВнутригородскойРайонСокращение - Строка - сокращение внутригородского района. -// * НаселенныйПункт - Строка - текстовое представление населенного пункта. -// * НаселенныйПунктСокращение - Строка - сокращение населенного пункта. -// * Улица - Строка - текстовое представление улицы. -// * УлицаСокращение - Строка - сокращение улицы. -// * ДополнительнаяТерритория - Строка - текстовое представление дополнительной территории. -// * ДополнительнаяТерриторияСокращение - Строка - сокращение дополнительной территории. -// * ЭлементДополнительнойТерритории - Строка - текстовое представление элемента дополнительной территории. -// * ЭлементДополнительнойТерриторииСокращение - Строка - сокращение элемента дополнительной территории. -// * Здание - Структура - структура с информацией о здании адреса -// ** ТипЗдания - Строка - тип объекта адресации адреса РФ согласно приказу ФНС ММВ-7-1/525 от 31.08.2011. -// ** Номер - Строка - текстовое представление номера дома (только для адресов РФ). -// * Корпуса - Массив - содержит структуры(поля структуры: ТипКорпуса, Номер) с перечнем корпусов адреса. -// * Помещения - Массив - содержит структуры(поля структуры: ТипПомещения, Номер) с перечнем помещений адреса. -// * КодыКЛАДР - Структура - Коды КЛАДР, если установлен параметр КодыКЛАДР. -// ** Регион - Строка - код КЛАДР региона. -// ** Район - Строка - код КЛАДР район. -// ** Город - Строка - код КЛАДР города. -// ** НаселенныйПункт - Строка - код КЛАДР населенного пункта. -// ** Улица - Строка - код КЛАДР улица. -// * ДополнительныеКоды - Структура - Коды ОКТМО, ОКТМО, ОКАТО, КодИФНСФЛ, КодИФНСЮЛ, КодУчасткаИФНСФЛ, КодУчасткаИФНСЮЛ. -Функция СведенияОбАдресе(Адрес, ДополнительныеПараметры = Неопределено) Экспорт - Возврат УправлениеКонтактнойИнформациейСлужебный.СведенияОбАдресеВВидеСтруктуры(Адрес, ДополнительныеПараметры); -КонецФункции - //////////////////////////////////////////////////////////////////////////////////////////////////// // Определяет данные страны по справочнику стран или классификатору ОКСМ. @@ -1535,7 +1827,9 @@ // Определяет данные страны по классификатору ОКСМ. // // Параметры: -// КодСтраны - Строка, Число - код страны. +// Параметры: +// Код - Строка, Число - код ОКСМ страны. +// ТипКода - Строка - Варианты: КодСтраны (по умолчанию), Альфа2, Альфа3. // // Возвращаемое значение: // Структура - описание страны. Содержит поля: @@ -1546,8 +1840,8 @@ // * КодАльфа3 - Строка - часть описания страны. // Неопределено - страна не найдена в классификаторе. // -Функция ДанныеКлассификатораСтранМираПоКоду(Знач КодСтраны) Экспорт - Возврат Справочники.СтраныМира.ДанныеКлассификатораСтранМираПоКоду(КодСтраны); +Функция ДанныеКлассификатораСтранМираПоКоду(Знач Код, Знач ТипКода = "КодСтраны") Экспорт + Возврат Справочники.СтраныМира.ДанныеКлассификатораСтранМираПоКоду(Код, ТипКода); КонецФункции // Определяет данные страны по классификатору ОКСМ. @@ -1575,12 +1869,12 @@ // // Параметры // Ссылка - ЛюбаяСсылка - ссылка на объект-владелец контактной информации (организация, контрагент, партнер и т.д.) -// ТипКонтактнойИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации +// ТипКонтактнойИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации. // // Возвращаемое значение: // ТаблицаЗначений - колонки // * Значение - строка - строковое представление значения -// * Вид - строка - представление вида контактной информации +// * Вид - строка - представление вида контактной информации. // Функция ЗначенияКонтактнойИнформацииОбъекта(Ссылка, ТипКонтактнойИнформации) Экспорт @@ -1691,26 +1985,26 @@ Объект.РазрешитьВводНесколькихЗначений = Параметры.РазрешитьВводНесколькихЗначений; Объект.ЗапретитьРедактированиеПользователем = Параметры.ЗапретитьРедактированиеПользователем; Объект.Используется = Параметры.Используется; + Объект.ХранитьИсториюИзменений = Параметры.ХранитьИсториюИзменений; + Объект.МногострочноеПоле = Параметры.МногострочноеПоле; НастройкиПроверки = Параметры.НастройкиПроверки; ПроверятьНастройки = ТипЗнч(НастройкиПроверки) = Тип("Структура"); - ОшибкаПараметров = НСтр("ru = 'Некорректно заполнены настройки проверки адреса'"); Если ПроверятьНастройки И Параметры.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда - Если НЕ НастройкиПроверки.АдресТолькоРоссийский - И (НастройкиПроверки.ПроверятьКорректность - ИЛИ НастройкиПроверки.СкрыватьНеактуальныеАдреса) Тогда - ВызватьИсключение ОшибкаПараметров; - КонецЕсли; - ЗаполнитьЗначенияСвойств(Объект, НастройкиПроверки); - ИначеЕсли ПроверятьНастройки И Параметры.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда УстановитьЗначенияРеквизитовПроверки(Объект, НастройкиПроверки); Иначе УстановитьЗначенияРеквизитовПроверки(Объект); КонецЕсли; + Результат = УправлениеКонтактнойИнформациейСлужебный.ПроверитьПараметрыВидаКонтактнойИнформации(Объект); + + Если Результат.ЕстьОшибки Тогда + ВызватьИсключение Результат.ТекстОшибки; + КонецЕсли; + Если Параметры.Порядок <> Неопределено Тогда Объект.РеквизитДопУпорядочивания = Параметры.Порядок; КонецЕсли; @@ -1719,7 +2013,7 @@ КонецПроцедуры -// Возвращает структуру параметров вида контактной информации для определенного типа +// Возвращает структуру параметров вида контактной информации для определенного типа. // // Параметры: // Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации, Строка - тип контактной информации для @@ -1785,7 +2079,9 @@ ПараметрыВида.Вставить("ОбязательноеЗаполнение", Ложь); ПараметрыВида.Вставить("РазрешитьВводНесколькихЗначений", Ложь); ПараметрыВида.Вставить("ЗапретитьРедактированиеПользователем", Ложь); + ПараметрыВида.Вставить("ХранитьИсториюИзменений", Ложь); ПараметрыВида.Вставить("Используется", Истина); + ПараметрыВида.Вставить("МногострочноеПоле", Ложь); Если УстанавливаемыйТип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда НастройкиПроверки = Новый Структура; @@ -1794,6 +2090,7 @@ НастройкиПроверки.Вставить("ПроверятьПоФИАС", Ложь); НастройкиПроверки.Вставить("СкрыватьНеактуальныеАдреса", Ложь); НастройкиПроверки.Вставить("ВключатьСтрануВПредставление", Ложь); + НастройкиПроверки.Вставить("УказыватьОКТМО", Ложь); ИначеЕсли УстанавливаемыйТип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда НастройкиПроверки = Новый Структура; НастройкиПроверки.Вставить("ПроверятьКорректность", Ложь); @@ -1818,7 +2115,9 @@ // ВидИнформации - Справочник.ВидыКонтактнойИнформация - ссылка на вид контактной информации. // ТипИнформации - Перечисление.ТипыКонтактнойИнформация - тип контактной информации. // ИдентификаторСтроки - Число - идентификатор строки табличной части. -Процедура ЗаписатьКонтактнуюИнформацию(Объект, ЗначенияПолей, ВидИнформации, ТипИнформации, ИдентификаторСтроки = 0) Экспорт +// Дата - Дата - Дата с которой действует запись контактной информации, +// используется при хранение истории изменения контактной информации. +Процедура ЗаписатьКонтактнуюИнформацию(Объект, ЗначенияПолей, ВидИнформации, ТипИнформации, ИдентификаторСтроки = 0, Дата = Неопределено) Экспорт ОбъектКИ = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(ЗначенияПолей, ВидИнформации); @@ -1831,6 +2130,9 @@ НоваяСтрока.ЗначенияПолей = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(ОбъектКИ); НоваяСтрока.Вид = ВидИнформации; НоваяСтрока.Тип = ТипИнформации; + Если ЗначениеЗаполнено(Дата) Тогда + НоваяСтрока.ДействуетС = Дата; + КонецЕсли; Если ЗначениеЗаполнено(ИдентификаторСтроки) Тогда НоваяСтрока.ИдентификаторСтрокиТабличнойЧасти = ИдентификаторСтроки; @@ -1857,10 +2159,10 @@ КонецПроцедуры // Обновляет представление в поле агрегате ВидДляСписка для вывода в контактной информации -// в динамических списках и отчетах +// в динамических списках и отчетах. // // Параметры: -// Объект - ОбъектСсылка - ссылка на объект конфигурации, содержащий табличную часть контактная информация +// Объект - ОбъектСсылка - ссылка на объект конфигурации, содержащий табличную часть контактная информация. // Процедура ОбновитьКонтактнуюИнформациюДляСписков(Объект = Неопределено) Экспорт @@ -1871,13 +2173,13 @@ УправлениеКонтактнойИнформациейСлужебный.ОбновитьКонтактнуюИнформациюДляСписковДляОбъекта(Объект); КонецЕсли; КонецЕсли; - + КонецПроцедуры -// Выполняет отложенное обновление контактной информации для списков и отчетов +// Выполняет отложенное обновление контактной информации для списков // // Параметры: -// Параметры - Структура - Параметры обработчика обновления +// Параметры - Структура - Параметры обработчика обновления // РазмерПорции - Число - Необязательный параметр размер порции обрабатываемых данных за один запуск. // Процедура ОбновитьКонтактнуюИнформациюДляСписковОтложенно(Параметры, РазмерПорции = 1000) Экспорт @@ -2039,8 +2341,116 @@ КонецПроцедуры -#КонецОбласти +// Дополняет список колонки для загрузки данных колонками контактной информации +// +// Параметры: +// МетаданныеСправочника - ОбъектМетаданных - Метаданные справочника +// ИнформацияПоКолонкам - ТаблицаЗначение - колонки макета. +// +Процедура КолонкиДляЗагрузкиДанных(МетаданныеСправочника, ИнформацияПоКолонкам) Экспорт + + Если МетаданныеСправочника.ТабличныеЧасти.Найти("КонтактнаяИнформация") = Неопределено Тогда + Возврат; + КонецЕсли; + + Позиция = ИнформацияПоКолонкам.Количество() + 1; + + ВидыКонтактнойИнформации = ВидыКонтактнойИнформацияОбъекта(Справочники[МетаданныеСправочника.Имя].ПустаяСсылка()); + + Для каждого ВидКонтактнойИнформации Из ВидыКонтактнойИнформации Цикл + ИмяКолонки = "КонтактнаяИнформация_" + СтандартныеПодсистемыСервер.ПреобразоватьСтрокуВДопустимоеНаименованиеКолонки(ВидКонтактнойИнформации.Наименование); + Если ИнформацияПоКолонкам.Найти(ИмяКолонки, "ИмяКолонки") = Неопределено Тогда + СтрокаИнфоПроКолонки = ИнформацияПоКолонкам.Добавить(); + СтрокаИнфоПроКолонки.ИмяКолонки = ИмяКолонки; + СтрокаИнфоПроКолонки.ПредставлениеКолонки = ВидКонтактнойИнформации.Представление; + СтрокаИнфоПроКолонки.ТипКолонки = Новый ОписаниеТипов("Строка"); + СтрокаИнфоПроКолонки.ОбязательнаДляЗаполнения = Ложь; + СтрокаИнфоПроКолонки.Позиция = Позиция; + СтрокаИнфоПроКолонки.Группа = НСтр("ru = 'Контактная информация'"); + СтрокаИнфоПроКолонки.Видимость = Истина; + СтрокаИнфоПроКолонки.Примечание = ВидКонтактнойИнформации.Подсказка; + СтрокаИнфоПроКолонки.Ширина = 30; + Позиция = Позиция + 1; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры +// Виды контактной информация объекта +// +// Параметры: +// ВладелецКонтактнойИнформации - Ссылка на владельца контактной информации. +// Объект владельца контактной информации. +// ДанныеФормыСтруктура (по типу объекта владельца свойств). +// Возвращаемое значение: +// ТаблицаЗначений - виды контактной информации. +// +Функция ВидыКонтактнойИнформацияОбъекта(ВладелецКонтактнойИнформации) Экспорт + + Если ТипЗнч(ВладелецКонтактнойИнформации) = Тип("ДанныеФормыСтруктура") Тогда + ТипСсылки = ТипЗнч(ВладелецКонтактнойИнформации.Ссылка) + + ИначеЕсли ОбщегоНазначения.ЭтоСсылка(ТипЗнч(ВладелецКонтактнойИнформации)) Тогда + ТипСсылки = ТипЗнч(ВладелецКонтактнойИнформации); + Иначе + ТипСсылки = ТипЗнч(ВладелецКонтактнойИнформации.Ссылка) + КонецЕсли; + + МетаданныеСправочника = Метаданные.НайтиПоТипу(ТипСсылки); + ПолноеИмяОбъектаМетаданных = МетаданныеСправочника.ПолноеИмя(); + ИмяГруппыВидовКИ = СтрЗаменить(ПолноеИмяОбъектаМетаданных, ".", ""); + ГруппаВидовКИ = Неопределено; + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ВидыКонтактнойИнформации.Ссылка КАК Ссылка, + | ВидыКонтактнойИнформации.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + |ГДЕ + | ВидыКонтактнойИнформации.ЭтоГруппа = ИСТИНА + | И ВидыКонтактнойИнформации.ПометкаУдаления = ЛОЖЬ + | И ВидыКонтактнойИнформации.Используется = ИСТИНА"; + + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + Пока РезультатЗапроса.Следующий() Цикл + Если СтрСравнить(РезультатЗапроса.ИмяПредопределенныхДанных, ИмяГруппыВидовКИ) = 0 Тогда + ГруппаВидовКИ = РезультатЗапроса.Ссылка; + Прервать; + КонецЕсли; + КонецЦикла; + + Если НЕ ЗначениеЗаполнено(ГруппаВидовКИ) Тогда + Возврат Новый ТаблицаЗначений; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВидыКонтактнойИнформации.Ссылка, + | ВидыКонтактнойИнформации.Представление, + | ВидыКонтактнойИнформации.Подсказка, + | ВидыКонтактнойИнформации.Наименование, + | ВидыКонтактнойИнформации.РазрешитьВводНесколькихЗначений, + | ВидыКонтактнойИнформации.РеквизитДопУпорядочивания КАК РеквизитДопУпорядочивания, + | ВидыКонтактнойИнформации.Тип + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + |ГДЕ + | ВидыКонтактнойИнформации.Родитель = &ГруппаВидовКИ + | И ВидыКонтактнойИнформации.ПометкаУдаления = ЛОЖЬ + | И ВидыКонтактнойИнформации.Используется = ИСТИНА + | + |УПОРЯДОЧИТЬ ПО + | РеквизитДопУпорядочивания"; + + Запрос.УстановитьПараметр("ГруппаВидовКИ", ГруппаВидовКИ); + РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + Возврат РезультатЗапроса; + +КонецФункции + +#КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -2061,35 +2471,46 @@ КонецПроцедуры -Функция ЗаголовокСлева(Форма, Знач ПоложениеЗаголовкаКИ = Неопределено) +Функция ЗаголовокСлева(Знач ПоложениеЗаголовкаКИ = Неопределено) - Если Не ЗначениеЗаполнено(ПоложениеЗаголовкаКИ) Тогда - - СохраненноеПоложениеЗаголовка = Форма.ПараметрыКонтактнойИнформации.ПоложениеЗаголовка; - Если ЗначениеЗаполнено(СохраненноеПоложениеЗаголовка) Тогда - Если СохраненноеПоложениеЗаголовка = Строка(ПоложениеЗаголовкаЭлементаФормы.Верх) Тогда - ПоложениеЗаголовкаКИ = ПоложениеЗаголовкаЭлементаФормы.Верх; - ИначеЕсли СохраненноеПоложениеЗаголовка = Строка(ПоложениеЗаголовкаЭлементаФормы.Лево) Тогда - ПоложениеЗаголовкаКИ = ПоложениеЗаголовкаЭлементаФормы.Лево; - ИначеЕсли СохраненноеПоложениеЗаголовка = Строка(ПоложениеЗаголовкаЭлементаФормы.Право) Тогда - ПоложениеЗаголовкаКИ = ПоложениеЗаголовкаЭлементаФормы.Право; - ИначеЕсли СохраненноеПоложениеЗаголовка = Строка(ПоложениеЗаголовкаЭлементаФормы.Низ) Тогда - ПоложениеЗаголовкаКИ = ПоложениеЗаголовкаЭлементаФормы.Низ; - ИначеЕсли СохраненноеПоложениеЗаголовка = Строка(ПоложениеЗаголовкаЭлементаФормы.Нет) Тогда - ПоложениеЗаголовкаКИ = ПоложениеЗаголовкаЭлементаФормы.Нет; - Иначе - ПоложениеЗаголовкаКИ = ПоложениеЗаголовкаЭлементаФормы.Авто; - КонецЕсли; - Иначе - ПоложениеЗаголовкаКИ = ПоложениеЗаголовкаЭлементаФормы.Верх; - КонецЕсли; - + Если ЗначениеЗаполнено(ПоложениеЗаголовкаКИ) Тогда + ПоложениеЗаголовкаКИ = ПоложениеЗаголовкаЭлементаФормы[ПоложениеЗаголовкаКИ]; + Иначе + ПоложениеЗаголовкаКИ = ПоложениеЗаголовкаЭлементаФормы.Верх; КонецЕсли; Возврат (ПоложениеЗаголовкаКИ = ПоложениеЗаголовкаЭлементаФормы.Лево); КонецФункции +// Определяет значение положения заголовка. Для поддержки локализованных конфигураций. +// +// Параметры: +// ПоложениеЗаголовкаКИ - Строка - положение заголовка в текстовом представление на языке локализации. +// +// Возвращаемое значение: +// Строка - положение заголовка. +// +Функция ЗначениеПоложенияЗаголовкаКИ(ПоложениеЗаголовкаКИ) + + Если СтрСравнить(Строка(ПоложениеЗаголовкаЭлементаФормы.Лево), ПоложениеЗаголовкаКИ) = 0 Тогда + Возврат "Лево"; + ИначеЕсли СтрСравнить(Строка(ПоложениеЗаголовкаЭлементаФормы.Верх), ПоложениеЗаголовкаКИ) = 0 Тогда + Возврат "Верх"; + ИначеЕсли СтрСравнить(Строка(ПоложениеЗаголовкаЭлементаФормы.Низ), ПоложениеЗаголовкаКИ) = 0 Тогда + Возврат "Низ"; + ИначеЕсли СтрСравнить(Строка(ПоложениеЗаголовкаЭлементаФормы.Право), ПоложениеЗаголовкаКИ) = 0 Тогда + Возврат "Право"; + ИначеЕсли СтрСравнить(Строка(ПоложениеЗаголовкаЭлементаФормы.Нет), ПоложениеЗаголовкаКИ) = 0 Тогда + Возврат "Нет"; + ИначеЕсли СтрСравнить(Строка(ПоложениеЗаголовкаЭлементаФормы.Авто), ПоложениеЗаголовкаКИ) = 0 Тогда + Возврат "Авто"; + КонецЕсли; + + Возврат ""; + +КонецФункции + Процедура ИзменитьКомментарий(Форма, ИмяРеквизита, ЭтоДобавлениеКомментария) Если Форма.ПараметрыКонтактнойИнформации.ДобавленныеЭлементы.НайтиПоЗначению(ИмяРеквизита) = Неопределено Тогда @@ -2100,16 +2521,21 @@ Отбор = Новый Структура("ИмяРеквизита", ИмяРеквизита); НайденнаяСтрока = ОписаниеКонтактнойИнформации.НайтиСтроки(Отбор)[0]; + ИмяКомментария = "Комментарий" + ИмяРеквизита; + + Если ЭтоДобавлениеКомментария И Форма.Элементы.Найти(ИмяКомментария) <> Неопределено Тогда + // Комментарий уже существует, просто обновим его + Форма.Элементы[ИмяКомментария].Заголовок = НайденнаяСтрока.Комментарий; + Возврат; + КонецЕсли; // Заголовок и поле ввода ЗаголовокЭлемента = Форма.Элементы.Найти("Заголовок" + ИмяРеквизита); - ИмяКомментария = "Комментарий" + ИмяРеквизита; - - ЗаголовокСлева = ЗаголовокСлева(Форма); + ЗаголовокСлева = ЗаголовокСлева(Форма.ПараметрыКонтактнойИнформации.ПоложениеЗаголовка); Если ЭтоДобавлениеКомментария Тогда - ПолеВвода = Форма.Элементы.Найти(ИмяРеквизита); + ГруппаПолейВвода = Форма.Элементы.ГруппаПолейВводаКонтактнойИнформации; ТекущийЭлемент = ?(ГруппаПолейВвода.ПодчиненныеЭлементы.Найти(ПолеВвода.Имя) = Неопределено, ПолеВвода.Родитель, ПолеВвода); @@ -2118,7 +2544,6 @@ Комментарий = Комментарий(Форма, НайденнаяСтрока.Комментарий, ИмяКомментария, ГруппаПолейВвода); Форма.Элементы.Переместить(Комментарий, ГруппаПолейВвода, СледующийЭлемент); - Если ЗаголовокСлева Тогда ГруппаЗаголовков = Форма.Элементы.ГруппаЗаголовковКонтактнойИнформации; @@ -2129,11 +2554,8 @@ Заглушка = Форма.Элементы.Добавить(ИмяЗаглушки, Тип("ДекорацияФормы"), ГруппаЗаголовков); Форма.Элементы.Переместить(Заглушка, ГруппаЗаголовков, СледующийЗаголовок); ДобавитьОписаниеЭлемента(Форма, ИмяЗаглушки, 2); - КонецЕсли; - Иначе - Комментарий = Форма.Элементы[ИмяКомментария]; Форма.Элементы.Удалить(Комментарий); УдалитьОписаниеЭлемента(Форма, ИмяКомментария); @@ -2200,7 +2622,7 @@ Если ДобавлениеНовогоЗначения Тогда ДобавляемыйВид = Результат.ДобавляемыйВид; Если ТипЗнч(ДобавляемыйВид)= Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда - ИнформацияОВидеКИ = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДобавляемыйВид, "Тип, Наименование, РедактированиеТолькоВДиалоге, Подсказка"); + ИнформацияОВидеКИ = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДобавляемыйВид, "Тип, Наименование, РедактированиеТолькоВДиалоге, Подсказка, МногострочноеПоле"); Иначе ИнформацияОВидеКИ = ДобавляемыйВид; ДобавляемыйВид = ДобавляемыйВид.Ссылка; @@ -2211,33 +2633,27 @@ КонецЕсли; ТаблицаКонтактнойИнформации = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; - ОтборПоВиду = Новый Структура("Вид", ДобавляемыйВид); - - ГруппаПолейВвода = Форма.Элементы.ГруппаПолейВводаКонтактнойИнформации; + ОтборПоВиду = Новый Структура("Вид, ЭтоИсторическаяКонтактнаяИнформация", ДобавляемыйВид, Ложь); Если ДобавлениеНовогоЗначения Тогда НайденныеСтроки = ТаблицаКонтактнойИнформации.НайтиСтроки(ОтборПоВиду); - ПоследняяСтрока = НайденныеСтроки.Получить(НайденныеСтроки.Количество() - 1); + КоличествоСтрокВида = НайденныеСтроки.Количество(); + ПоследняяСтрока = НайденныеСтроки.Получить(КоличествоСтрокВида - 1); ИндексДобавляемойСтроки = ТаблицаКонтактнойИнформации.Индекс(ПоследняяСтрока) + 1; - ЭтоПоследняяСтрока = Истина; - Если ИндексДобавляемойСтроки <> ТаблицаКонтактнойИнформации.Количество() Тогда - - Для Счетчик = ИндексДобавляемойСтроки По ТаблицаКонтактнойИнформации.Количество() - 1 Цикл - СтрокаПоиска = ТаблицаКонтактнойИнформации.Получить(Счетчик); - Если Форма.Элементы[СтрокаПоиска.ИмяРеквизита].Родитель = ГруппаПолейВвода Тогда - ИмяСледующегоРеквизита = СтрокаПоиска.ИмяРеквизита; - ЭтоПоследняяСтрока = Ложь; - ИндексДобавляемойСтроки = Счетчик; - Прервать; - КонецЕсли; - КонецЦикла; - + ЭтоПоследняяСтрока = Ложь; + Если ИндексДобавляемойСтроки = ТаблицаКонтактнойИнформации.Количество() Тогда + ЭтоПоследняяСтрока = Истина; + Иначе + ИмяСледующегоРеквизита = ТаблицаКонтактнойИнформации[ИндексДобавляемойСтроки].ИмяРеквизита; КонецЕсли; НоваяСтрока = ТаблицаКонтактнойИнформации.Вставить(ИндексДобавляемойСтроки); - ИмяРеквизита = "КонтактнаяИнформацияПоле" + НоваяСтрока.ПолучитьИдентификатор(); + ИмяРеквизита = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1%2%3", + "КонтактнаяИнформацияПоле", + СтрЗаменить(ДобавляемыйВид.УникальныйИдентификатор(), "-", "x"), + КоличествоСтрокВида + 1); НоваяСтрока.ИмяРеквизита = ИмяРеквизита; НоваяСтрока.Вид = ДобавляемыйВид; НоваяСтрока.Тип = ИнформацияОВидеКИ.Тип; @@ -2259,28 +2675,30 @@ ОбязательноеЗаполнение = ИнформацияОВидеКИ.ОбязательноеЗаполнение; КонецЕсли; - ЗаголовокСлева = ЗаголовокСлева(Форма); + ЗаголовокСлева = ЗаголовокСлева(Форма.ПараметрыКонтактнойИнформации.ПоложениеЗаголовка); // Отрисовка на форме Если ЗаголовокСлева Тогда ГруппаЗаголовков = Форма.Элементы.ГруппаЗаголовковКонтактнойИнформации; - Заголовок = Заголовок(Форма, ИнформацияОВидеКИ.Тип, ИмяРеквизита, ГруппаЗаголовков, ИнформацияОВидеКИ.Наименование, ЭтоНовыйВидКИ, ЕстьКомментарий); + Заголовок = Заголовок(Форма, ИнформацияОВидеКИ, ИмяРеквизита, ГруппаЗаголовков, ЭтоНовыйВидКИ); Если Не ЭтоПоследняяСтрока Тогда СледующийЗаголовок = Форма.Элементы["Заголовок" + ИмяСледующегоРеквизита]; Форма.Элементы.Переместить(Заголовок, ГруппаЗаголовков, СледующийЗаголовок); Если ЕстьКомментарий Тогда - // есть комментарий и поэтому надо сдвинуть еще на одну строку заглушкой + ИмяЗаглушки = "ЗаглушкаЗаголовка" + ИмяРеквизита; - ЭлементЗаглушка = Форма.Элементы[ИмяЗаглушки]; - Форма.Элементы.Переместить(ЭлементЗаглушка, ГруппаЗаголовков, СледующийЗаголовок); + Заглушка = Форма.Элементы.Добавить(ИмяЗаглушки, Тип("ДекорацияФормы"), ГруппаЗаголовков); + ДобавитьОписаниеЭлемента(Форма, ИмяЗаглушки, 2); + Форма.Элементы.Переместить(Заглушка, ГруппаЗаголовков, СледующийЗаголовок); + КонецЕсли; КонецЕсли; КонецЕсли; - - ПолеВвода = ПолеВвода(Форма, ИнформацияОВидеКИ.РедактированиеТолькоВДиалоге, ИнформацияОВидеКИ.Тип, ИмяРеквизита, ИнформацияОВидеКИ.Подсказка, ЭтоНовыйВидКИ, ОбязательноеЗаполнение); + ГруппаПолейВвода = Форма.Элементы.ГруппаПолейВводаКонтактнойИнформации; + ПолеВвода = ПолеВвода(Форма, ИнформацияОВидеКИ, ИмяРеквизита, ЭтоНовыйВидКИ, ОбязательноеЗаполнение); Если Не ЭтоПоследняяСтрока Тогда @@ -2296,9 +2714,7 @@ СледующийЭлемент = ГруппаПолейВвода.ПодчиненныеЭлементы.Получить(ИндексСледующегоЭлемента); Иначе - СледующийЭлемент = Форма.Элементы[СледующаяСтрока.ИмяРеквизита]; - КонецЕсли; Форма.Элементы.Переместить(ПолеВвода, ГруппаПолейВвода, СледующийЭлемент); @@ -2324,12 +2740,33 @@ // Выводим комментарий Если ЕстьКомментарий Тогда + ИмяКомментария = "Комментарий" + ИмяРеквизита; Комментарий = Комментарий(Форма, Результат.Комментарий, ИмяКомментария, ГруппаПолейВвода); Если Не ЭтоПоследняяСтрока Тогда + + Если ЗначениеЗаполнено(ПоследняяСтрока) Тогда + ИмяСледующегоЭлемента = ПоследняяСтрока.ИмяРеквизита; + + Если ЗначениеЗаполнено(ПоследняяСтрока.Комментарий) Тогда + ИмяСледующегоЭлемента = "Комментарий" + ИмяСледующегоЭлемента; + КонецЕсли; + + ИндексСледующегоЭлемента = ГруппаПолейВвода.ПодчиненныеЭлементы.Индекс(Форма.Элементы[ИмяСледующегоЭлемента]) + 1; + СледующийЭлемент = ГруппаПолейВвода.ПодчиненныеЭлементы.Получить(ИндексСледующегоЭлемента); + Иначе + Если СледующаяСтрока <> Неопределено Тогда + СледующийЭлемент = Форма.Элементы[СледующаяСтрока.ИмяРеквизита]; + Иначе + СледующийЭлемент = Неопределено; + КонецЕсли; + КонецЕсли; + Форма.Элементы.Переместить(Комментарий, ГруппаПолейВвода, СледующийЭлемент); + КонецЕсли; + КонецЕсли; // Заглушка , если заголовок у поля сверху. @@ -2341,19 +2778,23 @@ КонецЕсли; - Действие = Действие(Форма, ИнформацияОВидеКИ, ИмяРеквизита, ГруппаДействий, КоличествоАдресов, ЕстьКомментарий); Если Не ЭтоПоследняяСтрока Тогда СледующееДействие = Форма.Элементы.Найти(ИмяСледующегоДействия); - Если СледующееДействие <> Неопределено Тогда - Форма.Элементы.Переместить(Действие, ГруппаДействий, СледующееДействие); - КонецЕсли; + Иначе + СледующееДействие = Неопределено; КонецЕсли; + Действие = Действие(Форма, ИнформацияОВидеКИ, ИмяРеквизита, ГруппаДействий, КоличествоАдресов, ЕстьКомментарий, СледующееДействие); + Если Не ЭтоНовыйВидКИ Тогда - ПунктКонтекстногоМенюПеремещения(ПолеВвода, Форма, 1); - НайденныеСтроки = ТаблицаКонтактнойИнформации.НайтиСтроки(ОтборПоВиду); - ПредыдущаяСтрока = НайденныеСтроки.Получить(НайденныеСтроки.Количество() - 2); - ПунктКонтекстногоМенюПеремещения(Форма.Элементы[ПредыдущаяСтрока.ИмяРеквизита], Форма, - 1); + Если ТаблицаКонтактнойИнформации.Количество() > 1 И ТаблицаКонтактнойИнформации[0].Свойство("ЭтоИсторическаяКонтактнаяИнформация") Тогда + ПунктКонтекстногоМенюПеремещения(ПолеВвода, Форма, 1); + НайденныеСтроки = ТаблицаКонтактнойИнформации.НайтиСтроки(ОтборПоВиду); + Если НайденныеСтроки.Количество() > 1 Тогда + ПредыдущаяСтрока = НайденныеСтроки.Получить(НайденныеСтроки.Количество() - 2); + ПунктКонтекстногоМенюПеремещения(Форма.Элементы[ПредыдущаяСтрока.ИмяРеквизита], Форма, - 1); + КонецЕсли; + КонецЕсли; КонецЕсли; Если ДобавлениеНовогоЗначения Тогда @@ -2362,23 +2803,20 @@ Если ИнформацияОВидеКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес И ИнформацияОВидеКИ.РедактированиеТолькоВДиалоге Тогда - - Результат.Вставить("ЭлементФормыАдреса", ИмяРеквизита); - + Результат.Вставить("ЭлементФормыАдреса", ИмяРеквизита); КонецЕсли; - КонецЕсли; КонецПроцедуры -Функция Заголовок(Форма, Тип, ИмяРеквизита, ГруппаЗаголовков, Наименование, ЭтоНовыйВидКИ = Ложь, ЕстьКомментарий = Ложь) +Функция Заголовок(Форма, ИнформацияОВидеКИ, ИмяРеквизита, ГруппаЗаголовков, ЭтоНовыйВидКИ = Ложь) ИмяЗаголовка = "Заголовок" + ИмяРеквизита; Элемент = Форма.Элементы.Добавить(ИмяЗаголовка, Тип("ДекорацияФормы"), ГруппаЗаголовков); - Элемент.Заголовок = ?(ЭтоНовыйВидКИ, Наименование + ":", ""); + Элемент.Заголовок = ?(ЭтоНовыйВидКИ, ИнформацияОВидеКИ.Наименование + ":", ""); - Если Тип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда - Элемент.Высота = 5; + Если ИнформацияОВидеКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда + Элемент.Высота = ?(ИнформацияОВидеКИ.МногострочноеПоле, 5, 1); Элемент.ВертикальноеПоложение = ВертикальноеПоложениеЭлемента.Верх; Иначе Элемент.ВертикальноеПоложение = ВертикальноеПоложениеЭлемента.Центр; @@ -2386,69 +2824,120 @@ ДобавитьОписаниеЭлемента(Форма, ИмяЗаголовка, 2); - Если ЕстьКомментарий Тогда - - ИмяЗаглушки = "ЗаглушкаЗаголовка" + ИмяРеквизита; - Заглушка = Форма.Элементы.Добавить(ИмяЗаглушки, Тип("ДекорацияФормы"), ГруппаЗаголовков); - ДобавитьОписаниеЭлемента(Форма, ИмяЗаглушки, 2); - - КонецЕсли; - Возврат Элемент; КонецФункции -Функция ПолеВвода(Форма, РедактированиеТолькоВДиалоге, Тип, ИмяРеквизита, Подсказка, ЭтоНовыйВидКИ = Ложь, ОбязательноеЗаполнение = Ложь) - - ЗаголовокСлева = ЗаголовокСлева(Форма); +Функция ПолеВвода(Форма, ИнформацияОВидеКИ, ИмяРеквизита, ЭтоНовыйВидКИ = Ложь, ОбязательноеЗаполнение = Ложь) + ЗаголовокСлева = ЗаголовокСлева(Форма.ПараметрыКонтактнойИнформации.ПоложениеЗаголовка); Элемент = Форма.Элементы.Добавить(ИмяРеквизита, Тип("ПолеФормы"), Форма.Элементы.ГруппаПолейВводаКонтактнойИнформации); - Элемент.Вид = ВидПоляФормы.ПолеВвода; - Элемент.Подсказка = Подсказка; + Элемент.Подсказка = ИнформацияОВидеКИ.Подсказка; Элемент.ПутьКДанным = ИмяРеквизита; - Элемент.РедактированиеТекста = НЕ Форма.ТолькоПросмотр; Элемент.РастягиватьПоГоризонтали = Истина; Элемент.ПоложениеЗаголовка = ?(ЗаголовокСлева Или Не ЭтоНовыйВидКИ, ПоложениеЗаголовкаЭлементаФормы.Нет, ПоложениеЗаголовкаЭлементаФормы.Верх); - Элемент.УстановитьДействие("Очистка", "Подключаемый_КонтактнаяИнформацияОчистка"); + + Если ИнформацияОВидеКИ.РедактированиеТолькоВДиалоге И ИнформацияОВидеКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда + Элемент.Вид = ВидПоляФормы.ПолеНадписи; + Элемент.Гиперссылка = Истина; + Элемент.УстановитьДействие("Нажатие", "Подключаемый_КонтактнаяИнформацияПриНажатии"); + Если ПустаяСтрока(Форма[ИмяРеквизита]) Тогда + Форма[ИмяРеквизита] = УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки(); + КонецЕсли; + Иначе + Элемент.Вид = ВидПоляФормы.ПолеВвода; + Элемент.УстановитьДействие("Очистка", "Подключаемый_КонтактнаяИнформацияОчистка"); + КонецЕсли; ДобавитьОписаниеЭлемента(Форма, ИмяРеквизита, 2); // Устанавливаем свойства поля ввода. - Если Тип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда - Элемент.Высота = 5; - Элемент.МногострочныйРежим = Истина; + Если ИнформацияОВидеКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда + Если ИнформацияОВидеКИ.МногострочноеПоле Тогда + Элемент.Высота = 5; + Элемент.МногострочныйРежим = Истина; + Иначе + Элемент.Высота = 1; + Элемент.МногострочныйРежим = Ложь; + КонецЕсли; Элемент.РастягиватьПоВертикали = Ложь; Иначе // Ввод комментария через контекстное меню. ИмяКоманды = "КонтекстноеМеню" + ИмяРеквизита; - Команда = Форма.Команды.Добавить(ИмяКоманды); Кнопка = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), Элемент.КонтекстноеМеню); - Команда.Подсказка = НСтр("ru = 'Ввести комментарий'"); - Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду"; Кнопка.Заголовок = НСтр("ru = 'Ввести комментарий'"); - Кнопка.ИмяКоманды = ИмяКоманды; + Команда = Форма.Команды.Добавить(ИмяКоманды); + Команда.Подсказка = НСтр("ru = 'Ввести комментарий'"); + Команда.Картинка = БиблиотекаКартинок.Комментарий; + Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду"; Команда.ИзменяетСохраняемыеДанные = Истина; + Кнопка.ИмяКоманды = ИмяКоманды; ДобавитьОписаниеЭлемента(Форма, ИмяКоманды, 1); ДобавитьОписаниеЭлемента(Форма, ИмяКоманды, 9, Истина); КонецЕсли; - Если ОбязательноеЗаполнение И ЭтоНовыйВидКИ Тогда + Если ИнформацияОВидеКИ.ХранитьИсториюИзменений Тогда + // Вывод истории контактной информации через контекстное меню. + ИмяКоманды = "КонтекстноеМенюИстория" + ИмяРеквизита; + Кнопка = Форма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), Элемент.КонтекстноеМеню); + Кнопка.Заголовок = НСтр("ru = 'История изменений...'"); + Команда = Форма.Команды.Добавить(ИмяКоманды); + Команда.Картинка = БиблиотекаКартинок.ИсторияИзменений; + Команда.Подсказка = НСтр("ru = 'Показывает историю изменения контактной информации'"); + Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду"; + Команда.ИзменяетСохраняемыеДанные = Ложь; + Кнопка.ИмяКоманды = ИмяКоманды; + + ДобавитьОписаниеЭлемента(Форма, ИмяКоманды, 1); + ДобавитьОписаниеЭлемента(Форма, ИмяКоманды, 9, Истина); + КонецЕсли; + + Если ИнформацияОВидеКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда + ИмяКоманды = "КонтекстноеМенюКартаЯндекс" + ИмяРеквизита; + Кнопка = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), Элемент.КонтекстноеМеню); + Кнопка.Заголовок = НСтр("ru = 'Адрес на Яндекс.Картах'"); + Команда = Форма.Команды.Добавить(ИмяКоманды); + Команда.Картинка = БиблиотекаКартинок.ЯндексКарты; + Команда.Подсказка = НСтр("ru = 'Показывает адрес на картах Яндекс.Карты'"); + Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду"; + Кнопка.ИмяКоманды = ИмяКоманды; + + ДобавитьОписаниеЭлемента(Форма, ИмяКоманды, 1); + ДобавитьОписаниеЭлемента(Форма, ИмяКоманды, 9, Истина); + + ИмяКоманды = "КонтекстноеМенюКартаGoogle" + ИмяРеквизита; + Кнопка = Форма.Элементы.Добавить(ИмяКоманды,Тип("КнопкаФормы"), Элемент.КонтекстноеМеню); + Кнопка.Заголовок = НСтр("ru = 'Адрес на Google Maps'"); + Команда = Форма.Команды.Добавить(ИмяКоманды); + Команда.Картинка = БиблиотекаКартинок.GoogleMaps; + Команда.Подсказка = НСтр("ru = 'Показывает адрес на карте Google Maps'"); + Команда.Действие = "Подключаемый_КонтактнаяИнформацияВыполнитьКоманду"; + Кнопка.ИмяКоманды = ИмяКоманды; + + ДобавитьОписаниеЭлемента(Форма, ИмяКоманды, 1); + ДобавитьОписаниеЭлемента(Форма, ИмяКоманды, 9, Истина); + + КонецЕсли; + + + Если ОбязательноеЗаполнение И ЭтоНовыйВидКИ И Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда Элемент.АвтоОтметкаНезаполненного = Истина; КонецЕсли; // Редактирование в диалоге - Если ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(Тип) Тогда - - Элемент.КнопкаВыбора = Истина; - - Если РедактированиеТолькоВДиалоге Тогда - Элемент.РедактированиеТекста = Ложь; - Элемент.ЦветФона = ЦветаСтиля.КонтактнаяИнформацияСРедактированиемВДиалогеЦвет; - КонецЕсли; - Элемент.УстановитьДействие("НачалоВыбора", "Подключаемый_КонтактнаяИнформацияНачалоВыбора"); + Если ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(ИнформацияОВидеКИ.Тип) + И Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда + Элемент.КнопкаВыбора = Истина; + + Если ИнформацияОВидеКИ.РедактированиеТолькоВДиалоге Тогда + Элемент.РедактированиеТекста = Ложь; + Элемент.ЦветФона = ЦветаСтиля.КонтактнаяИнформацияСРедактированиемВДиалогеЦвет; + КонецЕсли; + Элемент.УстановитьДействие("НачалоВыбора", "Подключаемый_КонтактнаяИнформацияНачалоВыбора"); + КонецЕсли; Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_КонтактнаяИнформацияПриИзменении"); @@ -2479,11 +2968,12 @@ Кнопка.ИмяКоманды = ИмяКоманды; Команда.ИзменяетСохраняемыеДанные = Истина; Кнопка.Доступность = Истина; + ДобавитьОписаниеЭлемента(Форма, ИмяКоманды, 1); ДобавитьОписаниеЭлемента(Форма, ИмяКоманды, 9, Истина); - + КонецПроцедуры -Функция Действие(Форма, ВидКонтактнойИнформации, ИмяРеквизита, ГруппаДействий, КоличествоАдресов, ЕстьКомментарий = Ложь) +Функция Действие(Форма, ВидКонтактнойИнформации, ИмяРеквизита, ГруппаДействий, КоличествоАдресов, ЕстьКомментарий = Ложь, СледующееДействие = Неопределено) Тип = ВидКонтактнойИнформации.Тип; СоздаватьДействиеДляТипа = Новый Соответствие(); @@ -2505,6 +2995,8 @@ ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда СоздаватьДействиеДляТипа[Тип] = Истина; + ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.Адрес И ВидКонтактнойИнформации.РедактированиеТолькоВДиалоге Тогда + СоздаватьДействиеДляТипа[Тип] = Ложь; КонецЕсли; Если СоздаватьДействиеДляТипа[Тип] = Истина Тогда @@ -2520,7 +3012,8 @@ ДобавитьОписаниеЭлемента(Форма, ИмяКоманды, 2); Элемент.ИмяКоманды = ИмяКоманды; - Если Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда + Если Тип = Перечисления.ТипыКонтактнойИнформации.Адрес + И НЕ ВидКонтактнойИнформации.РедактированиеТолькоВДиалоге Тогда Элемент.Заголовок = НСтр("ru = 'Заполнить'"); Команда.Подсказка = НСтр("ru = 'Заполнить адрес из другого поля'"); @@ -2564,6 +3057,9 @@ ЗаглушкаДействия.Высота = 1; ДобавитьОписаниеЭлемента(Форма, ИмяЗаглушкиДействия, 2); + Если СледующееДействие <> Неопределено Тогда + Форма.Элементы.Переместить(ЗаглушкаДействия, ГруппаДействий, СледующееДействие); + КонецЕсли; КонецЕсли; Иначе @@ -2575,9 +3071,8 @@ Если ЕстьКомментарий Тогда Элемент.Высота = 2; ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда - Элемент.Высота = 5; + Элемент.Высота = ?(ВидКонтактнойИнформации.МногострочноеПоле, 5, 1); КонецЕсли; - КонецЕсли; Возврат Элемент; @@ -2658,12 +3153,10 @@ КонецЕсли; КонецЦикла; + Строка500 = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(500)); + ИмяОписания = "КонтактнаяИнформацияОписаниеДополнительныхРеквизитов"; Если СоздатьТаблицуКонтактнойИнформации Тогда - - Строка500 = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(500)); - // Создадим таблицу значений - ИмяОписания = "КонтактнаяИнформацияОписаниеДополнительныхРеквизитов"; МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(ИмяОписания, Новый ОписаниеТипов("ТаблицаЗначений"))); МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ИмяРеквизита", Строка500, ИмяОписания)); МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Вид", Новый ОписаниеТипов("СправочникСсылка.ВидыКонтактнойИнформации"), ИмяОписания)); @@ -2672,7 +3165,31 @@ МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Представление", Строка500, ИмяОписания)); МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Комментарий", Новый ОписаниеТипов("Строка"), ИмяОписания)); МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ЭтоРеквизитТабличнойЧасти", Новый ОписаниеТипов("Булево"), ИмяОписания)); + МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ЭтоИсторическаяКонтактнаяИнформация", Новый ОписаниеТипов("Булево"), ИмяОписания)); + МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ДействуетС", Новый ОписаниеТипов("Дата"), ИмяОписания)); + МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ХранитьИсториюИзменений", Новый ОписаниеТипов("Булево"), ИмяОписания)); + Иначе + РеквизитыТаблицы = Форма.ПолучитьРеквизиты("КонтактнаяИнформацияОписаниеДополнительныхРеквизитов"); + РеквизитыДляСоздания = Новый Соответствие; + РеквизитыДляСоздания.Вставить("ХранитьИсториюИзменений", Истина); + РеквизитыДляСоздания.Вставить("ДействуетС", Истина); + РеквизитыДляСоздания.Вставить("ЭтоИсторическаяКонтактнаяИнформация", Истина); + Для Каждого Реквизит Из РеквизитыТаблицы Цикл + Если РеквизитыДляСоздания[Реквизит.Имя] <> Неопределено Тогда + РеквизитыДляСоздания[Реквизит.Имя] = Ложь; + КонецЕсли; + КонецЦикла; + + Если РеквизитыДляСоздания["ХранитьИсториюИзменений"] Тогда + МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ХранитьИсториюИзменений", Новый ОписаниеТипов("Булево"), ИмяОписания)); + КонецЕсли; + Если РеквизитыДляСоздания["ДействуетС"] Тогда + МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ДействуетС", Новый ОписаниеТипов("Дата"), ИмяОписания)); + КонецЕсли; + Если РеквизитыДляСоздания["ЭтоИсторическаяКонтактнаяИнформация"] Тогда + МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ЭтоИсторическаяКонтактнаяИнформация", Новый ОписаниеТипов("Булево"), ИмяОписания)); + КонецЕсли; КонецЕсли; Если СоздатьПараметрыКонтактнойИнформации Тогда @@ -2696,6 +3213,24 @@ КонецПроцедуры +Функция ОпределитьСледующуюСтроку(Форма, КонтактнаяИнформация, СтрокаКИ) + + Позиция = КонтактнаяИнформация.Индекс(СтрокаКИ) + 1; + Пока Позиция < КонтактнаяИнформация.Количество() Цикл + СледующаяСтрока = КонтактнаяИнформация.Получить(Позиция); + Если СледующаяСтрока = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + Если Форма.Элементы.Найти(СледующаяСтрока.ИмяРеквизита) <> Неопределено Тогда + Возврат СледующаяСтрока; + КонецЕсли; + Позиция = Позиция + 1; + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + Процедура ДобавитьРеквизитВОписание(Форма, СтрокаКИ, ЭтоНовыйВидКИ, ЭтоРеквизитТабличнойЧасти = Ложь, ЗаполнятьЗначениеРеквизита = Истина) НоваяСтрока = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); @@ -2703,6 +3238,15 @@ НоваяСтрока.Вид = СтрокаКИ.Вид; НоваяСтрока.Тип = СтрокаКИ.Тип; НоваяСтрока.ЭтоРеквизитТабличнойЧасти = ЭтоРеквизитТабличнойЧасти; + Если НоваяСтрока.Свойство("ЭтоИсторическаяКонтактнаяИнформация") Тогда + НоваяСтрока.ЭтоИсторическаяКонтактнаяИнформация = СтрокаКИ.ЭтоИсторическаяКонтактнаяИнформация; + КонецЕсли; + Если НоваяСтрока.Свойство("ДействуетС") Тогда + НоваяСтрока.ДействуетС = СтрокаКИ.ДействуетС; + КонецЕсли; + Если НоваяСтрока.Свойство("ХранитьИсториюИзменений") Тогда + НоваяСтрока.ХранитьИсториюИзменений = СтрокаКИ.ХранитьИсториюИзменений; + КонецЕсли; Если ПустаяСтрока(СтрокаКИ.ЗначенияПолей) Тогда НоваяСтрока.ЗначенияПолей = ""; @@ -2714,9 +3258,13 @@ НоваяСтрока.Комментарий = СтрокаКИ.Комментарий; Если ЗаполнятьЗначениеРеквизита И Не ЭтоРеквизитТабличнойЧасти Тогда - - Форма[СтрокаКИ.ИмяРеквизита] = СтрокаКИ.Представление; - + Если СтрокаКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес + И СтрокаКИ.РедактированиеТолькоВДиалоге + И ПустаяСтрока(СтрокаКИ.Представление) Тогда + Форма[СтрокаКИ.ИмяРеквизита] = УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки(); + Иначе + Форма[СтрокаКИ.ИмяРеквизита] = СтрокаКИ.Представление; + КонецЕсли; КонецЕсли; СтруктураВидаКИ = УправлениеКонтактнойИнформациейСлужебный.СтруктураВидаКонтактнойИнформации(СтрокаКИ.Вид); @@ -2778,7 +3326,7 @@ // Возвращаемое значение: // Строка - имя табличной части или пустая строка, если табличной части нет. // -Функция ИмяТабличнойЧастиПоВидуКИ(ВидКИ, ИмяОбъекта) Экспорт +Функция ИмяТабличнойЧастиПоВидуКИ(ВидКИ, ИмяОбъекта) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ @@ -2810,7 +3358,7 @@ // Возвращаемое значение: // Соответствие - имена табличных части или пустая строка, если табличной части нет. // -Функция ИменаТабличныхЧастейПоВидамКИ(ТаблицаВидовКонтактнойИнформации, ИмяОбъекта) Экспорт +Функция ИменаТабличныхЧастейПоВидамКИ(ТаблицаВидовКонтактнойИнформации, ИмяОбъекта) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ @@ -2848,7 +3396,6 @@ КонецФункции - // Проверяет на наличие в форме заполненных строк КИ того же вида (за исключением текущей). // Функция ЕстьДругиеЗаполненныеСтрокКИДанногоВида(Знач Форма, Знач ПроверяемаяСтрока, Знач ВидКонтактнойИнформации) @@ -2873,7 +3420,7 @@ Процедура ВывестиСообщениеПользователю(ТекстСообщения, ИмяРеквизита, ПолеРеквизита) ИмяРеквизита = ?(ПустаяСтрока(ПолеРеквизита), ИмяРеквизита, ""); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,,ПолеРеквизита, ИмяРеквизита); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, ПолеРеквизита, ИмяРеквизита); КонецПроцедуры @@ -2905,6 +3452,7 @@ СтрокаТабличнойЧасти.Регион = АдресРФ.СубъектРФ; СтрокаТабличнойЧасти.Город = АдресРФ.Город; КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -3008,32 +3556,28 @@ // заполняется для строки. // Неопределено, если контактная информация // заполняется для приемника. +// * Дата - Дата - Дата с который действует контактная информация. Используется только +// если у вида КИ установлен флаг ХранитьИсториюИзменений. // -Процедура ЗаполнитьКонтактнуюИнформациюТабличнойЧасти(Приемник, ВидКИ, СтруктураКИ, СтрокаТабличнойЧасти = Неопределено) +Процедура ЗаполнитьКонтактнуюИнформациюТабличнойЧасти(Приемник, ВидКИ, СтруктураКИ, СтрокаТабличнойЧасти = Неопределено, Дата = Неопределено) ПараметрыОтбора = Новый Структура; - НуженПоискСтрокиВТабличнойЧасти = Истина; - Если СтрокаТабличнойЧасти <> Неопределено Тогда - Если Метаданные.НайтиПоТипу(ТипЗнч(СтрокаТабличнойЧасти)).Реквизиты.Найти("ИдентификаторСтрокиТабличнойЧасти") <> Неопределено Тогда - ПараметрыОтбора.Вставить("ИдентификаторСтрокиТабличнойЧасти", СтрокаТабличнойЧасти.ИдентификаторСтрокиТабличнойЧасти); - Иначе - НуженПоискСтрокиВТабличнойЧасти = Ложь; - КонецЕсли; + Если СтрокаТабличнойЧасти = Неопределено Тогда + ДанныеЗаполнения = Приемник; + Иначе + ДанныеЗаполнения = СтрокаТабличнойЧасти; + ПараметрыОтбора.Вставить("ИдентификаторСтрокиТабличнойЧасти", СтрокаТабличнойЧасти.ИдентификаторСтрокиТабличнойЧасти); КонецЕсли; - Если НуженПоискСтрокиВТабличнойЧасти = Истина Тогда - ПараметрыОтбора.Вставить("Вид", ВидКИ); - НайденныеСтрокиКИ = Приемник.КонтактнаяИнформация.НайтиСтроки(ПараметрыОтбора); - Если НайденныеСтрокиКИ.Количество() = 0 Тогда - СтрокаКИ = Приемник.КонтактнаяИнформация.Добавить(); - Если СтрокаТабличнойЧасти <> Неопределено Тогда - СтрокаКИ.ИдентификаторСтрокиТабличнойЧасти = СтрокаТабличнойЧасти.ИдентификаторСтрокиТабличнойЧасти; - КонецЕсли; - Иначе - СтрокаКИ = НайденныеСтрокиКИ[0]; + ПараметрыОтбора.Вставить("Вид", ВидКИ); + НайденныеСтрокиКИ = Приемник.КонтактнаяИнформация.НайтиСтроки(ПараметрыОтбора); + Если НайденныеСтрокиКИ.Количество() = 0 Тогда + СтрокаКИ = Приемник.КонтактнаяИнформация.Добавить(); + Если СтрокаТабличнойЧасти <> Неопределено Тогда + СтрокаКИ.ИдентификаторСтрокиТабличнойЧасти = СтрокаТабличнойЧасти.ИдентификаторСтрокиТабличнойЧасти; КонецЕсли; Иначе - СтрокаКИ = СтрокаТабличнойЧасти; + СтрокаКИ = НайденныеСтрокиКИ[0]; КонецЕсли; // Из любого понимаемого - в XML. @@ -3045,8 +3589,11 @@ СтрокаКИ.Представление = Представление; СтрокаКИ.ЗначенияПолей = ЗначенияПолей; + Если ВидКИ.ХранитьИсториюИзменений Тогда + СтрокаКИ.ДействуетС = ?(ЗначениеЗаполнено(Дата), Дата, ТекущаяДатаСеанса()); + КонецЕсли; + ЗаполнитьДополнительныеРеквизитыКонтактнойИнформации(СтрокаКИ, Представление, ЗначенияПолей); - КонецПроцедуры // Проверяет контактную информацию электронной почты и сообщает об ошибках. @@ -3074,7 +3621,7 @@ Результат = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(АдресЭП.Значение); Если Результат.Количество() > 1 Тогда - СтрокаОшибки = Нстр("ru = 'Допускается ввод только одного адреса электронной почты'"); + СтрокаОшибки = НСтр("ru = 'Допускается ввод только одного адреса электронной почты'"); КонецЕсли; Исключение @@ -3129,10 +3676,10 @@ КонецПроцедуры -// Проверяет контактную информацию и записывает ее в таблицу значений. +// Проверяет контактную информацию и перезаполняет значение полей // -Функция ПроверитьКонтактнуюИнформацию(Представление, ЗначенияПолей, ВидИнформации, ТипИнформации, - ИмяРеквизита, Комментарий = Неопределено, ПутьКРеквизиту = "") +Функция ПроверитьЗаполнениеКонтактнойИнформации(Представление, ЗначенияПолей, ВидИнформации, ТипИнформации, + ИмяРеквизита, Комментарий = Неопределено, ПутьКРеквизиту = "") Экспорт ТекстСериализации = ?(ПустаяСтрока(ЗначенияПолей), Представление, ЗначенияПолей); @@ -3142,17 +3689,17 @@ КонецЕсли; ОбъектКИ.Представление = Представление; - ЗначенияПолей = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(ОбъектКИ); - Если ПустаяСтрока(Представление) И ПустаяСтрока(ОбъектКИ.Комментарий) Тогда Возврат 0; КонецЕсли; + ЗначенияПолей = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(ОбъектКИ); + // Проверка Если ТипИнформации = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда УровеньОшибок = ОшибкиЗаполненияЭлектроннойПочты(ОбъектКИ, ВидИнформации, ИмяРеквизита, ПутьКРеквизиту); ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда - УровеньОшибок = ОшибкиЗаполненияАдреса(ОбъектКИ.Состав, ВидИнформации, ИмяРеквизита); + УровеньОшибок = ОшибкиЗаполненияАдреса(ОбъектКИ.Состав, ВидИнформации, ИмяРеквизита, ПутьКРеквизиту); ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда УровеньОшибок = ОшибкиЗаполненияТелефона(ОбъектКИ, ВидИнформации, ИмяРеквизита); ИначеЕсли ТипИнформации = Перечисления.ТипыКонтактнойИнформации.Факс Тогда @@ -3178,7 +3725,7 @@ // Возвращаемое значение: // Число - уровень ошибок: 0 - нет, 1 - неблокирующие, 2 - блокирующие. // -Функция ОшибкиЗаполненияАдреса(Источник, ВидИнформации, ИмяРеквизита = "", ПолеРеквизита = "") Экспорт +Функция ОшибкиЗаполненияАдреса(Источник, ВидИнформации, ИмяРеквизита = "", ПолеРеквизита = "") Если Не ВидИнформации.ПроверятьКорректность Тогда Возврат 0; @@ -3279,4 +3826,4 @@ КонецПроцедуры -#КонецОбласти +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl index f5dac98a6..e1435981d 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиент/Module.bsl @@ -13,7 +13,7 @@ // Элемент - ПолеФормы - Элемент формы, содержащий представление контактной информации. // ЭтоТабличнаяЧасть - Булево - Флаг того, что элемент является частью таблицы формы. // -Процедура ПредставлениеПриИзменении(Форма, Элемент, ЭтоТабличнаяЧасть = Ложь) Экспорт +Процедура ПриИзменении(Форма, Элемент, ЭтоТабличнаяЧасть = Ложь) Экспорт ЭтоТабличнаяЧасть = ЭтоТабличнаяЧасть(Элемент); @@ -43,6 +43,14 @@ Возврат; КонецЕсли; + Если ДанныеСтроки.ХранитьИсториюИзменений И НачалоДня(ДанныеСтроки.ДействуетС) <> НачалоДня(ОбщегоНазначенияКлиент.ДатаСеанса()) Тогда + ИсторическаяКонтактнаяИнформация = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); + ЗаполнитьЗначенияСвойств(ИсторическаяКонтактнаяИнформация, ДанныеСтроки); + ИсторическаяКонтактнаяИнформация.ЭтоИсторическаяКонтактнаяИнформация = Истина; + ИсторическаяКонтактнаяИнформация.ИмяРеквизита = ""; + ДанныеСтроки.ДействуетС = НачалоДня(ОбщегоНазначенияКлиент.ДатаСеанса()); + КонецЕсли; + ДанныеСтроки.ЗначенияПолей = УправлениеКонтактнойИнформациейСлужебныйВызовСервера.КонтактнаяИнформацияXMLПоПредставлению(Текст, ДанныеСтроки.Вид); ДанныеСтроки.Представление = Текст; @@ -61,10 +69,7 @@ // Модифицированность - Булево - Устанавливаемый флаг модифицированности формы. // СтандартнаяОбработка - Булево - Устанавливаемый флаг стандартной обработки события формы. // -// Возвращаемое значение: -// Неопределено -// -Функция ПредставлениеНачалоВыбора(Форма, Элемент, Модифицированность = Истина, СтандартнаяОбработка = Ложь) Экспорт +Процедура НачалоВыбора(Форма, Элемент, Модифицированность = Истина, СтандартнаяОбработка = Ложь) Экспорт СтандартнаяОбработка = Ложь; Результат = Новый Структура; @@ -75,7 +80,7 @@ Если ЭтоТабличнаяЧасть Тогда ДанныеЗаполнения = Форма.Элементы[Форма.ТекущийЭлемент.Имя].ТекущиеДанные; Если ДанныеЗаполнения = Неопределено Тогда - Возврат Неопределено; + Возврат; КонецЕсли; Иначе ДанныеЗаполнения = Форма; @@ -84,17 +89,23 @@ ДанныеСтроки = ПолучитьСтрокуДополнительныхЗначений(Форма, Элемент, ЭтоТабличнаяЧасть); // Если представление было изменено в поле и не соответствует реквизиту, то приводим в соответствие. - Если ДанныеЗаполнения[Элемент.Имя] <> Элемент.ТекстРедактирования Тогда - ДанныеЗаполнения[Элемент.Имя] = Элемент.ТекстРедактирования; - ПредставлениеПриИзменении(Форма, Элемент, ЭтоТабличнаяЧасть); - Форма.Модифицированность = Истина; + Если Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда + Если ДанныеЗаполнения[Элемент.Имя] <> Элемент.ТекстРедактирования Тогда + ДанныеЗаполнения[Элемент.Имя] = Элемент.ТекстРедактирования; + ПриИзменении(Форма, Элемент, ЭтоТабличнаяЧасть); + Форма.Модифицированность = Истина; + КонецЕсли; + ТекстРедактирования = Элемент.ТекстРедактирования; + Иначе + ТекстРедактирования = ?(ЗначениеЗаполнено(ДанныеСтроки.ЗначенияПолей), Форма[Элемент.Имя], ""); КонецЕсли; ПараметрыОткрытия = Новый Структура; ПараметрыОткрытия.Вставить("ВидКонтактнойИнформации", ДанныеСтроки.Вид); ПараметрыОткрытия.Вставить("ЗначенияПолей", ДанныеСтроки.ЗначенияПолей); - ПараметрыОткрытия.Вставить("Представление", Элемент.ТекстРедактирования); + ПараметрыОткрытия.Вставить("Представление", ТекстРедактирования); ПараметрыОткрытия.Вставить("ТолькоПросмотр", Форма.ТолькоПросмотр); + ПараметрыОткрытия.Вставить("КонтактнаяИнформацияОписаниеДополнительныхРеквизитов", Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов); Если Не ЭтоТабличнаяЧасть Тогда ПараметрыОткрытия.Вставить("Комментарий", ДанныеСтроки.Комментарий); @@ -109,9 +120,7 @@ Оповещение.ДополнительныеПараметры.Вставить("Форма", Форма); ОткрытьФормуКонтактнойИнформации(ПараметрыОткрытия,, Оповещение); - - Возврат Неопределено; -КонецФункции +КонецПроцедуры // Обработчик события Очистка поля формы контактной информации. // Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация". @@ -120,10 +129,7 @@ // Форма - УправляемаяФорма - Форма владельца контактной информации. // ИмяРеквизита - Строка - Имя реквизита формы, связанного с представление контактной информации. // -// Возвращаемое значение: -// Неопределено -// -Функция ПредставлениеОчистка(Знач Форма, Знач ИмяРеквизита) Экспорт +Процедура Очистка(Знач Форма, Знач ИмяРеквизита) Экспорт Результат = Новый Структура("ИмяРеквизита", ИмяРеквизита); НайденнаяСтрока = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Результат)[0]; @@ -135,8 +141,7 @@ Форма.Модифицированность = Истина; ОбновитьКонтактнуюИнформациюФормы(Форма, Результат); - Возврат Неопределено; -КонецФункции +КонецПроцедуры // Обработчик команды, связанной с контактной информации (написать письмо, открыть адрес, и т.п.). // Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация". @@ -145,47 +150,40 @@ // Форма - УправляемаяФорма - Форма владельца контактной информации. // ИмяКоманды - Строка - Имя автоматически сгенерированной команды действия. // -// Возвращаемое значение: -// Неопределено -// -Функция ПодключаемаяКоманда(Знач Форма, Знач ИмяКоманды) Экспорт +Процедура ВыполнитьКоманду(Знач Форма, Знач ИмяКоманды) Экспорт Если ИмяКоманды = "КонтактнаяИнформацияДобавитьПолеВвода" Тогда Оповещение = Новый ОписаниеОповещения("КонтактнаяИнформацияДобавитьПолеВводаЗавершение", ЭтотОбъект, Новый Структура); Оповещение.ДополнительныеПараметры.Вставить("Форма", Форма); Форма.ПоказатьВыборИзМеню(Оповещение, Форма.ПараметрыКонтактнойИнформации.СписокДобавляемыхЭлементов, Форма.Элементы.КонтактнаяИнформацияДобавитьПолеВвода); - Возврат Неопределено; + Возврат; ИначеЕсли СтрНачинаетсяС(ИмяКоманды, "Команда") Тогда ИмяРеквизита = СтрЗаменить(ИмяКоманды, "Команда", ""); - КомандаКонтекстногоМеню = Ложь; - + КомандаКонтекстногоМеню = Неопределено; Иначе - ИмяРеквизита = СтрЗаменить(ИмяКоманды, "КонтекстноеМеню", ""); - НаправлениеПеремещения = 0; - Если СтрНачинаетсяС(ИмяРеквизита, "Вверх") Тогда - ИмяРеквизита = СтрЗаменить(ИмяРеквизита, "Вверх", ""); - НаправлениеПеремещения = -1; - ИначеЕсли СтрНачинаетсяС(ИмяРеквизита, "Вниз") Тогда - ИмяРеквизита = СтрЗаменить(ИмяРеквизита, "Вниз", ""); - НаправлениеПеремещения = 1; - КонецЕсли; - КомандаКонтекстногоМеню = Истина; - + КомандаКонтекстногоМеню = КомандаКонтекстногоМеню(ИмяКоманды); + ИмяРеквизита = КомандаКонтекстногоМеню.ИмяРеквизита; КонецЕсли; Результат = Новый Структура("ИмяРеквизита", ИмяРеквизита); НайденнаяСтрока = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Результат)[0]; ТипКонтактнойИнформации = НайденнаяСтрока.Тип; - Если КомандаКонтекстногоМеню Тогда - Если НаправлениеПеремещения = 0 Тогда - ВвестиКомментарий(Форма, ИмяРеквизита, НайденнаяСтрока, Результат); + Если КомандаКонтекстногоМеню <> Неопределено Тогда + Если КомандаКонтекстногоМеню.Команда = "Комментарий" Тогда + ВвестиКомментарий(Форма, КомандаКонтекстногоМеню.ИмяРеквизита, НайденнаяСтрока, Результат); + ИначеЕсли КомандаКонтекстногоМеню.Команда = "История" Тогда + ОткрытьФормуИсторииИзменений(Форма, НайденнаяСтрока); + ИначеЕсли КомандаКонтекстногоМеню.Команда = "КартаЯндекс" Тогда + ПоказатьАдресНаКарте(НайденнаяСтрока.Представление, "Яндекс.Карты"); + ИначеЕсли КомандаКонтекстногоМеню.Команда = "КартаGoogle" Тогда + ПоказатьАдресНаКарте(НайденнаяСтрока.Представление, "GoogleMaps"); Иначе ПервыйЭлемент = НайденнаяСтрока.ИмяРеквизита; Индекс =Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Индекс(НайденнаяСтрока); - Если НаправлениеПеремещения = 1 Тогда + Если КомандаКонтекстногоМеню.НаправлениеПеремещения = 1 Тогда Если Индекс < Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Количество() - 1 Тогда ВторойЭлемент = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Получить(Индекс + 1).ИмяРеквизита; КонецЕсли; @@ -206,13 +204,14 @@ СоздатьЭлектронноеПисьмо("", АдресПочты, ТипКонтактнойИнформации); ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") Тогда - Параметры = Новый Структура("НомерТелефона, ТипКонтактнойИнформации"); + Параметры = Новый Структура("НомерТелефона, ТипКонтактнойИнформации, ИсточникКонтактнойИнформации"); Параметры.НомерТелефона = Форма.Элементы[ИмяРеквизита].ТекстРедактирования; Параметры.ТипКонтактнойИнформации = ТипКонтактнойИнформации; + Параметры.ИсточникКонтактнойИнформации = Форма.ПараметрыКонтактнойИнформации.Владелец; Если ПустаяСтрока(Параметры.НомерТелефона) Тогда ПоказатьПредупреждение(,НСтр("ru = 'Для совершения звонка или отправки SMS требуется ввести номер телефона.'")); - Возврат Неопределено; + Возврат; КонецЕсли; Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОтправкаSMS") Тогда @@ -220,6 +219,7 @@ Список.Добавить("Позвонить", НСтр("ru = 'Позвонить'"),, БиблиотекаКартинок.Позвонить); Список.Добавить("ОтправитьSMS", НСтр("ru = 'Отправить SMS...'"),, БиблиотекаКартинок.ОтправитьSMS); ОповещениеМеню = Новый ОписаниеОповещения("ПослеВыбораИзМенюТелефон", ЭтотОбъект, Параметры); + Форма.ПоказатьВыборИзМеню(ОповещениеМеню, Список, Форма.Элементы[ИмяКоманды]); Иначе ПозвонитьПоТелефону(Параметры.НомерТелефона); @@ -239,97 +239,6 @@ ПерейтиПоВебСсылке("", АдресСсылки, ТипКонтактнойИнформации); КонецЕсли; - Возврат Неопределено; -КонецФункции - -Процедура ПослеВыбораИзМенюSkype(ВыбранныйЭлемент, Параметры) Экспорт - - Если ВыбранныйЭлемент = Неопределено Тогда - Возврат; - КонецЕсли; - - #Если НЕ ВебКлиент Тогда - Если ПустаяСтрока(ПрограммаТелефонииУстановлена("skype")) Тогда - ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Для совершения звонка по Skype требуется установить программу.'")); - Возврат; - КонецЕсли; - #КонецЕсли - - СтрокаЗапуска = "skype:" + Параметры.ЛогинSkype; - Если ВыбранныйЭлемент.Значение = "Позвонить" Тогда - СтрокаЗапуска = СтрокаЗапуска + "?call"; - ИначеЕсли ВыбранныйЭлемент.Значение = "НачатьЧат" Тогда - СтрокаЗапуска = СтрокаЗапуска + "?chat"; - Иначе - СтрокаЗапуска = СтрокаЗапуска + "?userinfo"; - КонецЕсли; - - Оповещение = Новый ОписаниеОповещения("ЗапускSkype", ЭтотОбъект, СтрокаЗапуска); - ТекстСообщения = НСтр("ru = 'Для запуска Skype необходимо установить расширение работы с файлами.'"); - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстСообщения); - -КонецПроцедуры - -Процедура ЗапускSkype(РасширениеПодключено, СтрокаЗапуска) Экспорт - - Если РасширениеПодключено Тогда - Оповещение = Новый ОписаниеОповещения("ПослеЗвонка", ЭтотОбъект); - НачатьЗапускПриложения(Оповещение, СтрокаЗапуска); - КонецЕсли; - -КонецПроцедуры - -Процедура ПослеВыбораИзМенюТелефон(ВыбранныйЭлемент, Параметры) Экспорт - - Если ВыбранныйЭлемент <> Неопределено Тогда - Если ВыбранныйЭлемент.Значение = "ОтправитьSMS" Тогда - СоздатьSMS("", Параметры.НомерТелефона, Параметры.ТипКонтактнойИнформации); - Иначе - ПозвонитьПоТелефону(Параметры.НомерТелефона); - КонецЕсли; - КонецЕсли; -КонецПроцедуры - -Процедура ПозвонитьПоТелефону(НомерТелефона) - - НомерТелефона = СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("()_- ", НомерТелефона, ""); - - // по умолчанию используем "tel" - ИмяПротокола = "tel"; - - #Если НЕ ВебКлиент Тогда - ДоступноеИмяПротокола = ПрограммаТелефонииУстановлена(); - Если ДоступноеИмяПротокола = Неопределено Тогда - СтрокаСПредупреждением = Новый ФорматированнаяСтрока( - НСтр("ru = 'Для совершения звонка требуется установить программу телефонии, например'"), - " ", Новый ФорматированнаяСтрока("Skype",,,, "http://www.skype.com"), "."); - ПоказатьПредупреждение(Неопределено, СтрокаСПредупреждением); - Возврат; - ИначеЕсли НЕ ПустаяСтрока(ДоступноеИмяПротокола) Тогда - ИмяПротокола = ДоступноеИмяПротокола; - КонецЕсли; - #КонецЕсли - - СтрокаЗапуска = ИмяПротокола + ":" + НомерТелефона; - - Оповещение = Новый ОписаниеОповещения("СовершитьЗвонок", ЭтотОбъект, СтрокаЗапуска); - ТекстСообщения = НСтр("ru = 'Для совершения звонка необходимо установить расширение работы с файлами.'"); - ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстСообщения); - -КонецПроцедуры - -Процедура СовершитьЗвонок(РасширениеПодключено, СтрокаЗапуска) Экспорт - - Если РасширениеПодключено Тогда - Оповещение = Новый ОписаниеОповещения("ПослеЗвонка", ЭтотОбъект); - НачатьЗапускПриложения(Оповещение, СтрокаЗапуска); - КонецЕсли; - -КонецПроцедуры - - -Процедура ПослеЗвонка(ВыбранныйЭлемент, Параметры) Экспорт - // Процедура заглушка, т.к. НачатьЗапускПриложения требуется наличие обработчика оповещения. КонецПроцедуры // Открытие формы адреса формы контактной информации. @@ -342,11 +251,9 @@ Процедура ОткрытьФормуВводаАдреса(Форма, Результат) Экспорт Если Результат <> Неопределено Тогда - Если Результат.Свойство("ЭлементФормыАдреса") Тогда - ПредставлениеНачалоВыбора(Форма, Форма.Элементы[Результат.ЭлементФормыАдреса]); + НачалоВыбора(Форма, Форма.Элементы[Результат.ЭлементФормыАдреса]); КонецЕсли; - КонецЕсли; КонецПроцедуры @@ -490,7 +397,7 @@ // ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации, Структура // Используется для определения типа, если его невозможно вычислить по полю ЗначенияПолей. // -Процедура СоздатьSMS(Знач ЗначенияПолей, Знач Представление = "", ОжидаемыйВид = Неопределено) Экспорт +Процедура СоздатьSMS(Знач ЗначенияПолей, Знач Представление = "", ОжидаемыйВид = Неопределено, ИсточникКонтактнойИнформации = "") Экспорт Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОтправкаSMS") Тогда ВызватьИсключение НСтр("ru = 'Отправка SMS недоступна.'"); @@ -522,6 +429,7 @@ ДополнительныеПараметры = Новый Структура(); ДополнительныеПараметры.Вставить("ИмяОтправителя", Неопределено); ДополнительныеПараметры.Вставить("ПеревестиВТранслит", Ложь); + ДополнительныеПараметры.Вставить("ИсточникКонтактнойИнформации", ИсточникКонтактнойИнформации); МодульОтправкаSMSКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОтправкаSMSКлиент"); МодульОтправкаSMSКлиент.ОтправитьSMS(НомераПолучателей, "", ДополнительныеПараметры); @@ -560,36 +468,202 @@ КонецЕсли; КонецПроцедуры +// Показывает адрес в браузере на картах Яндекс или Google +// +// Параметры: +// Адрес - Строка - Текстовое представление адреса +// ИмяКартографическогоСервиса - Строка - Имя картографического сервиса в котором необходимо показать адрес: Яндекс.Карты или GoogleMaps. +// +Процедура ПоказатьАдресНаКарте(Адрес, ИмяКартографическогоСервиса) Экспорт + АдресКодированный = Адрес; + Если ИмяКартографическогоСервиса = "GoogleMaps" Тогда + СтрокаЗапуска = "https://maps.google.ru/?q=" + АдресКодированный; + Иначе + СтрокаЗапуска = "https://maps.yandex.ru/?text=" + АдресКодированный; + КонецЕсли; + + ПерейтиПоНавигационнойСсылке(СтрокаЗапуска); + +КонецПроцедуры + +// Отображает форму с историей изменения контактной информации +// +Процедура ОткрытьФормуИсторииИзменений(Форма, ПараметрыКонтактнойИнформации) Экспорт + + Результат = Новый Структура("Вид", ПараметрыКонтактнойИнформации.Вид); + НайденныеСтроки = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Результат); + + СписокКонтактнойИнформации = Новый Массив; + Для каждого СтрокаКонтактнойИнформации Из НайденныеСтроки Цикл + КонтактнаяИнформация = Новый Структура("Представление, ЗначенияПолей, ДействуетС"); + ЗаполнитьЗначенияСвойств(КонтактнаяИнформация, СтрокаКонтактнойИнформации); + СписокКонтактнойИнформации.Добавить(КонтактнаяИнформация); + КонецЦикла; + + ДополнительныеПараметры = Новый Структура("Форма"); + ДополнительныеПараметры.Вставить("ИмяЭлемента", ПараметрыКонтактнойИнформации.ИмяРеквизита); + ДополнительныеПараметры.Вставить("Вид", ПараметрыКонтактнойИнформации.Вид); + ДополнительныеПараметры.Форма = Форма; + + ПараметрыФормы = Новый Структура("СписокКонтактнойИнформации", СписокКонтактнойИнформации); + ПараметрыФормы.Вставить("ВидКонтактнойИнформации", ПараметрыКонтактнойИнформации.Вид); + ПараметрыФормы.Вставить("ТолькоПросмотр", Форма.ТолькоПросмотр); + + ОповещениеОЗакрытие = Новый ОписаниеОповещения("ПослеЗакрытияФормыИстории", УправлениеКонтактнойИнформациейКлиент, ДополнительныеПараметры); + ОткрытьФорму("Обработка.ВводКонтактнойИнформации.Форма.ИсторияКонтактнойИнформации", ПараметрыФормы, Форма,,,, ОповещениеОЗакрытие); + +КонецПроцедуры + +// Устарела. Следует использовать ПриИзменении(). +// +Процедура ПредставлениеПриИзменении(Форма, Элемент, ЭтоТабличнаяЧасть = Ложь) Экспорт + ПриИзменении(Форма, Элемент, ЭтоТабличнаяЧасть); +КонецПроцедуры + +// Устарела. Следует использовать НачалоВыбора() +// +Функция ПредставлениеНачалоВыбора(Форма, Элемент, Модифицированность = Истина, СтандартнаяОбработка = Ложь) Экспорт + НачалоВыбора(Форма, Элемент, Модифицированность, СтандартнаяОбработка); + Возврат Неопределено; +КонецФункции + +// Устарела. Следует использовать Очистка() +Функция ПредставлениеОчистка(Форма, ИмяРеквизита) Экспорт + Очистка(Форма, ИмяРеквизита); + Возврат Неопределено; +КонецФункции + +// Устарела. Следует использовать ВыполнитьКоманду() +// +Функция ПодключаемаяКоманда(Форма, ИмяКоманды) Экспорт + ВыполнитьКоманду(Форма, ИмяКоманды); + Возврат Неопределено; +КонецФункции + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс // Завершение немодальных диалогов. + +Процедура ПослеЗакрытияФормыИстории(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + Форма = ДополнительныеПараметры.Форма; + + Отбор = Новый Структура("Вид", ДополнительныеПараметры.Вид); + НайденныеСтроки = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); + + СтарыйКомментарий = Неопределено; + Для каждого СтрокаКонтактнойИнформации Из НайденныеСтроки Цикл + Если НЕ СтрокаКонтактнойИнформации.ЭтоИсторическаяКонтактнаяИнформация Тогда + СтарыйКомментарий = СтрокаКонтактнойИнформации.Комментарий; + КонецЕсли; + Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Удалить(СтрокаКонтактнойИнформации); + КонецЦикла; + + ЭтоИсторическаяКонтактнаяИнформация = Ложь; + ПараметрыОбновления = Новый Структура; + Для Каждого СтрокаКонтактнойИнформации Из Результат Цикл + ДанныеСтроки = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); + ЗаполнитьЗначенияСвойств(ДанныеСтроки, СтрокаКонтактнойИнформации); + Если НЕ СтрокаКонтактнойИнформации.ЭтоИсторическаяКонтактнаяИнформация Тогда + Форма[ДополнительныеПараметры.ИмяЭлемента] = СтрокаКонтактнойИнформации.Представление; + ДанныеСтроки.ИмяРеквизита = ДополнительныеПараметры.ИмяЭлемента; + Если ДанныеСтроки.Комментарий <> СтарыйКомментарий Тогда + ПараметрыОбновления.Вставить("ЭтоДобавлениеКомментария", ЗначениеЗаполнено(ДанныеСтроки.Комментарий)); + ПараметрыОбновления.Вставить("ИмяРеквизита", ДополнительныеПараметры.ИмяЭлемента); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Форма.Модифицированность = Истина; + Если ЗначениеЗаполнено(ПараметрыОбновления) Тогда + ОбновитьКонтактнуюИнформациюФормы(Форма, ПараметрыОбновления); + КонецЕсли; +КонецПроцедуры + Процедура ПредставлениеНачалоВыбораЗавершение(Знач РезультатЗакрытия, Знач ДополнительныеПараметры) Экспорт + Если ТипЗнч(РезультатЗакрытия) <> Тип("Структура") Тогда Возврат; КонецЕсли; ДанныеЗаполнения = ДополнительныеПараметры.ДанныеЗаполнения; - ДанныеСтроки = ДополнительныеПараметры.ДанныеСтроки; + НоваяСтрока = ДополнительныеПараметры.ДанныеСтроки; Результат = ДополнительныеПараметры.Результат; Элемент = ДополнительныеПараметры.Элемент; Форма = ДополнительныеПараметры.Форма; ТекстПредставления = РезультатЗакрытия.Представление; + Если НоваяСтрока.Свойство("ХранитьИсториюИзменений") И НоваяСтрока.ХранитьИсториюИзменений Тогда + КонтактнаяИнформацияОписаниеДополнительныхРеквизитов = ДанныеЗаполнения.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; + Отбор = Новый Структура("Вид", НоваяСтрока.Вид); + НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); + Для Каждого СтрокаКонтактнойИнформации Из НайденныеСтроки Цикл + КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Удалить(СтрокаКонтактнойИнформации); + КонецЦикла; + + Отбор = Новый Структура("Вид", НоваяСтрока.Вид); + НайденныеСтроки = РезультатЗакрытия.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); + ЭтоИсторическаяКонтактнаяИнформация = Ложь; + ПоследниеЗначениеПолей = ""; + + Если НайденныеСтроки.Количество() = 1 И ПустаяСтрока(НайденныеСтроки[0].ЗначенияПолей) Тогда + // Новая контактная информация (первый адрес). + НоваяКонтактнаяИнформация = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяКонтактнаяИнформация, РезультатЗакрытия); + НоваяКонтактнаяИнформация.ЗначенияПолей = РезультатЗакрытия.КонтактнаяИнформация; + НоваяКонтактнаяИнформация.ИмяРеквизита = Элемент.Имя; + НоваяКонтактнаяИнформация.ХранитьИсториюИзменений = Истина; + НоваяКонтактнаяИнформация.ЭтоИсторическаяКонтактнаяИнформация = Ложь; + Иначе + Для Каждого СтрокаКонтактнойИнформации Из НайденныеСтроки Цикл + Если НЕ СтрокаКонтактнойИнформации.ЭтоИсторическаяКонтактнаяИнформация Тогда + Если СтрСравнить(СтрокаКонтактнойИнформации.ЗначенияПолей, РезультатЗакрытия.КонтактнаяИнформация) <> 0 Тогда + Если СтрокаКонтактнойИнформации.ДействуетС < НачалоДня(ОбщегоНазначенияКлиент.ДатаСеанса()) Тогда + // Контактная информация стала историей. + НоваяКонтактнаяИнформация = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяКонтактнаяИнформация, СтрокаКонтактнойИнформации); + НоваяКонтактнаяИнформация.ЭтоИсторическаяКонтактнаяИнформация = Истина; + НоваяКонтактнаяИнформация.ИмяРеквизита= ""; + КонецЕсли; + // Новая контактная информация. + НоваяКонтактнаяИнформация = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяКонтактнаяИнформация, РезультатЗакрытия); + НоваяКонтактнаяИнформация.ЗначенияПолей = РезультатЗакрытия.КонтактнаяИнформация; + НоваяКонтактнаяИнформация.ДействуетС = НачалоДня(ОбщегоНазначенияКлиент.ДатаСеанса()); + НоваяКонтактнаяИнформация.ИмяРеквизита = Элемент.Имя; + НоваяКонтактнаяИнформация.ХранитьИсториюИзменений = Истина; + НоваяКонтактнаяИнформация.ЭтоИсторическаяКонтактнаяИнформация = Ложь; + Иначе + НоваяКонтактнаяИнформация = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяКонтактнаяИнформация, СтрокаКонтактнойИнформации); + КонецЕсли; + Иначе + НоваяКонтактнаяИнформация = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяКонтактнаяИнформация, СтрокаКонтактнойИнформации); + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; + Если ДополнительныеПараметры.ЭтоТабличнаяЧасть Тогда ДанныеЗаполнения[Элемент.Имя + "ЗначенияПолей"] = РезультатЗакрытия.КонтактнаяИнформация; Иначе - Если ПустаяСтрока(ДанныеСтроки.Комментарий) И Не ПустаяСтрока(РезультатЗакрытия.Комментарий) Тогда + Если ПустаяСтрока(НоваяСтрока.Комментарий) И Не ПустаяСтрока(РезультатЗакрытия.Комментарий) Тогда Результат.Вставить("ЭтоДобавлениеКомментария", Истина); - ИначеЕсли Не ПустаяСтрока(ДанныеСтроки.Комментарий) И ПустаяСтрока(РезультатЗакрытия.Комментарий) Тогда + ИначеЕсли Не ПустаяСтрока(НоваяСтрока.Комментарий) И ПустаяСтрока(РезультатЗакрытия.Комментарий) Тогда Результат.Вставить("ЭтоДобавлениеКомментария", Ложь); Иначе - Если Не ПустаяСтрока(ДанныеСтроки.Комментарий) Тогда + Если Не ПустаяСтрока(НоваяСтрока.Комментарий) Тогда ЭлементКомментария = Форма.Элементы.Найти("Комментарий" + Элемент.Имя); Если ЭлементКомментария <> Неопределено Тогда ЭлементКомментария.Заголовок = РезультатЗакрытия.Комментарий; @@ -598,18 +672,23 @@ КонецЕсли; - ДанныеСтроки.Представление = ТекстПредставления; - ДанныеСтроки.ЗначенияПолей = РезультатЗакрытия.КонтактнаяИнформация; - ДанныеСтроки.Комментарий = РезультатЗакрытия.Комментарий; + НоваяСтрока.Представление = ТекстПредставления; + НоваяСтрока.ЗначенияПолей = РезультатЗакрытия.КонтактнаяИнформация; + НоваяСтрока.Комментарий = РезультатЗакрытия.Комментарий; КонецЕсли; - ДанныеЗаполнения[Элемент.Имя] = ТекстПредставления; + Если РезультатЗакрытия.Свойство("АдресВВидеГиперссылки") + И РезультатЗакрытия.АдресВВидеГиперссылки + И НЕ ЗначениеЗаполнено(ТекстПредставления) Тогда + ДанныеЗаполнения[Элемент.Имя] = УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки(); + Иначе + ДанныеЗаполнения[Элемент.Имя] = ТекстПредставления; + КонецЕсли; Форма.Модифицированность = Истина; ОбновитьКонтактнуюИнформациюФормы(Форма, Результат); КонецПроцедуры -// Завершение немодальных диалогов. Процедура КонтактнаяИнформацияДобавитьПолеВводаЗавершение(Знач ВыбранныйЭлемент, Знач ДополнительныеПараметры) Экспорт Если ВыбранныйЭлемент = Неопределено Тогда // Отказ от выбора @@ -621,6 +700,10 @@ ОбновитьКонтактнуюИнформациюФормы(ДополнительныеПараметры.Форма, Результат); КонецПроцедуры +Процедура ПослеЗапускаПриложения(ВыбранныйЭлемент, Параметры) Экспорт + // Процедура заглушка, т.к. НачатьЗапускПриложения требуется наличие обработчика оповещения. +КонецПроцедуры + // Обработчик события НачалоВыбора для улицы. // // Параметры: @@ -652,22 +735,6 @@ ,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецПроцедуры -// Обработчик события НачалоВыбора для элемента адреса (субъект РФ, район, город и т.п.). -// -// Параметры: -// Элемент - Произвольный - вызывающий элемент формы. -// КодЧастиАдреса - Число - идентификатор обрабатываемой части адреса, зависит от классификатора. -// ЧастиАдреса - Произвольный - значения для других частей адреса, зависит от классификатора. -// ПараметрыФормы - Структура - необязательная дополнительная структура параметров для формы подбора. -// -Процедура НачалоВыбораЭлементаАдреса(Элемент, КодЧастиАдреса, ЧастиАдреса, ПараметрыФормы = Неопределено) Экспорт - - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - НачалоВыбораЭлементаАдресаКЛАДР(Элемент, КодЧастиАдреса, ЧастиАдреса, ПараметрыФормы); - КонецЕсли; - -КонецПроцедуры - // Предлагает загрузить адресный классификатор. // // Параметры: @@ -739,71 +806,95 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////////////////////////// -// Реализация КЛАДР -// - -Функция КлиентскийМодульКЛАДР() - - Возврат ОбщегоНазначенияКлиент.ОбщийМодуль("АдресныйКлассификаторКлиент"); - -КонецФункции - -Процедура НачалоВыбораЭлементаАдресаКЛАДР(Элемент, КодЧастиАдреса, ЧастиАдреса, Параметры = Неопределено) - - КодРеквизита = ВРег(КодЧастиАдреса); - Если КодРеквизита = "РЕГИОН" Тогда - Уровень = 1; - - ИначеЕсли КодРеквизита = "РАЙОН" Тогда - Уровень = 2; - - ИначеЕсли КодРеквизита = "ГОРОД" Тогда - Уровень = 3; - - ИначеЕсли КодРеквизита = "НАСЕЛЕННЫЙПУНКТ" Тогда - Уровень = 4; - - ИначеЕсли КодРеквизита = "УЛИЦА" Тогда - Уровень = 5; - - Иначе - Возврат; - - КонецЕсли; - - ПараметрыФормы = ?(Параметры = Неопределено, Новый Структура, Параметры); - - ПараметрыФормы.Вставить("Регион", ЧастиАдреса.Регион.Значение); - Если ЧастиАдреса.Регион.Свойство("КодКлассификатора") Тогда - ПараметрыФормы.Вставить("РегионКодКлассификатора", ЧастиАдреса.Регион.КодКлассификатора); - КонецЕсли; - - ПараметрыФормы.Вставить("Район", ЧастиАдреса.Район.Значение); - Если ЧастиАдреса.Район.Свойство("КодКлассификатора") Тогда - ПараметрыФормы.Вставить("РайонКодКлассификатора", ЧастиАдреса.Район.КодКлассификатора); - КонецЕсли; - - ПараметрыФормы.Вставить("Город", ЧастиАдреса.Город.Значение); - Если ЧастиАдреса.Город.Свойство("КодКлассификатора") Тогда - ПараметрыФормы.Вставить("ГородКодКлассификатора", ЧастиАдреса.Город.КодКлассификатора); - КонецЕсли; - - ПараметрыФормы.Вставить("НаселенныйПункт", ЧастиАдреса.НаселенныйПункт.Значение); - Если ЧастиАдреса.НаселенныйПункт.Свойство("КодКлассификатора") Тогда - ПараметрыФормы.Вставить("НаселенныйПунктКодКлассификатора", ЧастиАдреса.НаселенныйПункт.КодКлассификатора); - КонецЕсли; - - ПараметрыФормы.Вставить("Уровень", Уровень); - - МодульКЛАДР = КлиентскийМодульКЛАДР(); - МодульКЛАДР.ОткрытьФормуВыбораКЛАДР(ПараметрыФормы, Элемент); -КонецПроцедуры - #КонецОбласти #Область СлужебныеПроцедурыИФункции +Процедура ПослеВыбораИзМенюSkype(ВыбранныйЭлемент, Параметры) Экспорт + + Если ВыбранныйЭлемент = Неопределено Тогда + Возврат; + КонецЕсли; + + #Если НЕ ВебКлиент Тогда + Если ПустаяСтрока(ПрограммаТелефонииУстановлена("skype")) Тогда + ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Для совершения звонка по Skype требуется установить программу.'")); + Возврат; + КонецЕсли; + #КонецЕсли + + СтрокаЗапуска = "skype:" + Параметры.ЛогинSkype; + Если ВыбранныйЭлемент.Значение = "Позвонить" Тогда + СтрокаЗапуска = СтрокаЗапуска + "?call"; + ИначеЕсли ВыбранныйЭлемент.Значение = "НачатьЧат" Тогда + СтрокаЗапуска = СтрокаЗапуска + "?chat"; + Иначе + СтрокаЗапуска = СтрокаЗапуска + "?userinfo"; + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения("ЗапускSkype", ЭтотОбъект, СтрокаЗапуска); + ТекстСообщения = НСтр("ru = 'Для запуска Skype необходимо установить расширение работы с файлами.'"); + ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстСообщения); + +КонецПроцедуры + +Процедура ПослеВыбораИзМенюТелефон(ВыбранныйЭлемент, Параметры) Экспорт + + Если ВыбранныйЭлемент <> Неопределено Тогда + Если ВыбранныйЭлемент.Значение = "ОтправитьSMS" Тогда + СоздатьSMS("", Параметры.НомерТелефона, Параметры.ТипКонтактнойИнформации, Параметры.ИсточникКонтактнойИнформации); + Иначе + ПозвонитьПоТелефону(Параметры.НомерТелефона); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +Процедура ЗапускSkype(РасширениеПодключено, СтрокаЗапуска) Экспорт + + Если РасширениеПодключено Тогда + Оповещение = Новый ОписаниеОповещения("ПослеЗапускаПриложения", ЭтотОбъект); + НачатьЗапускПриложения(Оповещение, СтрокаЗапуска); + КонецЕсли; + +КонецПроцедуры + +Процедура ПозвонитьПоТелефону(НомерТелефона) + + НомерТелефона = СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими("()_- ", НомерТелефона, ""); + + // по умолчанию используем "tel" + ИмяПротокола = "tel"; + + #Если НЕ ВебКлиент Тогда + ДоступноеИмяПротокола = ПрограммаТелефонииУстановлена(); + Если ДоступноеИмяПротокола = Неопределено Тогда + СтрокаСПредупреждением = Новый ФорматированнаяСтрока( + НСтр("ru = 'Для совершения звонка требуется установить программу телефонии, например'"), + " ", Новый ФорматированнаяСтрока("Skype",,,, "http://www.skype.com"), "."); + ПоказатьПредупреждение(Неопределено, СтрокаСПредупреждением); + Возврат; + ИначеЕсли НЕ ПустаяСтрока(ДоступноеИмяПротокола) Тогда + ИмяПротокола = ДоступноеИмяПротокола; + КонецЕсли; + #КонецЕсли + + СтрокаЗапуска = ИмяПротокола + ":" + НомерТелефона; + + Оповещение = Новый ОписаниеОповещения("СовершитьЗвонок", ЭтотОбъект, СтрокаЗапуска); + ТекстСообщения = НСтр("ru = 'Для совершения звонка необходимо установить расширение работы с файлами.'"); + ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстСообщения); + +КонецПроцедуры + +Процедура СовершитьЗвонок(РасширениеПодключено, СтрокаЗапуска) Экспорт + + Если РасширениеПодключено Тогда + Оповещение = Новый ОписаниеОповещения("ПослеЗапускаПриложения", ЭтотОбъект); + НачатьЗапускПриложения(Оповещение, СтрокаЗапуска); + КонецЕсли; + +КонецПроцедуры + // Возвращает строку дополнительных значений по имени реквизита. // // Параметры: @@ -833,27 +924,6 @@ КонецФункции -// Формирует строковое представление телефона. -// -// Параметры: -// КодСтраны - Строка - код страны. -// КодГорода - Строка - код города. -// НомерТелефона - Строка - номер телефона. -// Добавочный - Строка - добавочный номер. -// Комментарий - Строка - комментарий. -// -// Возвращаемое значение: -// Строка - представление телефона. -// -Функция СформироватьПредставлениеТелефона(КодСтраны, КодГорода, НомерТелефона, Добавочный, Комментарий) Экспорт - - Представление = УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПредставлениеТелефона( - КодСтраны, КодГорода, НомерТелефона, Добавочный, Комментарий); - - Возврат Представление; - -КонецФункции - // Заполнение адреса другим адресом. Процедура ЗаполнитьАдрес(Знач Форма, Знач ИмяРеквизита, Знач НайденнаяСтрока, Знач Результат) @@ -955,7 +1025,7 @@ // Контекстный вызов Процедура ОбновитьКонтактнуюИнформациюФормы(Форма, Результат) - Форма.ОбновитьКонтактнуюИнформацию(Результат); + Форма.Подключаемый_ОбновитьКонтактнуюИнформацию(Результат); КонецПроцедуры @@ -977,19 +1047,40 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики условных вызовов в другие подсистемы. - -// Открывает форму загрузки адресного классификатора. -// -Процедура ПриЗагрузкеАдресногоКлассификатора() Экспорт +// определение команды контекстного меню +Функция КомандаКонтекстногоМеню(ИмяКоманды) - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - МодульАдресныйКлассификаторКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("АдресныйКлассификаторКлиент"); - МодульАдресныйКлассификаторКлиент.ЗагрузитьАдресныйКлассификатор(); + Результат = Новый Структура("Команда, НаправлениеПеремещения, ИмяРеквизита", Неопределено, 0, Неопределено); + + ИмяРеквизита = СтрЗаменить(ИмяКоманды, "КонтекстноеМеню", ""); + Если СтрНачинаетсяС(ИмяРеквизита, "Вверх") Тогда + Результат.ИмяРеквизита = СтрЗаменить(ИмяРеквизита, "Вверх", ""); + Результат.НаправлениеПеремещения = -1; + Результат.Команда = "Вверх"; + ИначеЕсли СтрНачинаетсяС(ИмяРеквизита, "История") Тогда + Результат.ИмяРеквизита = СтрЗаменить(ИмяРеквизита, "История", ""); + Результат.Команда = "История"; + ИначеЕсли СтрНачинаетсяС(ИмяРеквизита, "Вниз") Тогда + Результат.ИмяРеквизита = СтрЗаменить(ИмяРеквизита, "Вниз", ""); + Результат.НаправлениеПеремещения = 1; + Результат.Команда = "Вниз"; + ИначеЕсли СтрНачинаетсяС(ИмяРеквизита, "КартаЯндекс") Тогда + Результат.ИмяРеквизита = СтрЗаменить(ИмяРеквизита, "КартаЯндекс", ""); + Результат.Команда = "КартаЯндекс"; + ИначеЕсли СтрНачинаетсяС(ИмяРеквизита, "КартаGoogle") Тогда + Результат.ИмяРеквизита = СтрЗаменить(ИмяРеквизита, "КартаGoogle", ""); + Результат.Команда = "КартаGoogle"; + Иначе + Результат.ИмяРеквизита = СтрЗаменить(ИмяРеквизита, "Комментарий", ""); + Результат.Команда = "Комментарий"; КонецЕсли; -КонецПроцедуры + Возврат Результат; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов в другие подсистемы. Процедура СоздатьПисьмоПоКонтактнойИнформацииПослеЗапускаПриложения(КодВозврата, ДополнительныеПараметры) Экспорт // Действие не требуется diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl index 7f3998711..ddce5dd83 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl @@ -16,49 +16,51 @@ // Возвращаемое значение: // Строка - Представление адреса с видом. // -Функция СформироватьПредставлениеАдреса(СтруктураАдреса, Представление, НаименованиеВида = Неопределено) Экспорт +Функция СформироватьПредставлениеАдреса(СтруктураАдреса, Представление, НаименованиеВида = Неопределено) Экспорт Представление = ""; - Страна = ЗначениеПоКлючуСтруктуры("Страна", СтруктураАдреса); - - Если Страна <> Неопределено Тогда - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("НаименованиеСтраны", СтруктураАдреса)), ", ", Представление); + Если ТипЗнч(СтруктураАдреса) <> Тип("Структура") Тогда + Возврат Представление; КонецЕсли; - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Индекс", СтруктураАдреса)), ", ", Представление); - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Регион", СтруктураАдреса)), ", ", Представление); - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Район", СтруктураАдреса)), ", ", Представление); - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Город", СтруктураАдреса)), ", ", Представление); - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("НаселенныйПункт", СтруктураАдреса)), ", ", Представление); - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Улица", СтруктураАдреса)), ", ", Представление); - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("ДополнительнаяТерритория", СтруктураАдреса)), ", ", Представление); - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("ЭлементДополнительнойТерритории", СтруктураАдреса)), ", ", Представление); + ФорматФИАС = СтруктураАдреса.Свойство("Округ"); + + Если СтруктураАдреса.Свойство("Страна") Тогда + Представление = СтруктураАдреса.Страна; + КонецЕсли; + + ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "Индекс", Представление); + ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "Регион", Представление, "РегионСокращение", ФорматФИАС); + ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "Округ", Представление, "ОкругСокращение", ФорматФИАС); + ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "Район", Представление, "РайонСокращение", ФорматФИАС); + ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "Город", Представление, "ГородСокращение", ФорматФИАС); + ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "ВнутригородскойРайон", Представление, "ВнутригородскойРайонСокращение", ФорматФИАС); + ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "НаселенныйПункт", Представление, "НаселенныйПунктСокращение", ФорматФИАС); + ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "Улица", Представление, "УлицаСокращение", ФорматФИАС); + ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "ДополнительнаяТерритория", Представление, "ДополнительнаяТерриторияСокращение", ФорматФИАС); + ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, "ЭлементДополнительнойТерритории", Представление, "ЭлементДополнительнойТерриторииСокращение", ФорматФИАС); Если СтруктураАдреса.Свойство("Здание") Тогда - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Номер", СтруктураАдреса.Здание)), ", " + ЗначениеПоКлючуСтруктуры("ТипЗдания", СтруктураАдреса) + " № ", Представление); + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Номер", СтруктураАдреса.Здание)), ", " + ЗначениеПоКлючуСтруктуры("ТипЗдания", СтруктураАдреса) + " № ", Представление); Иначе - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Дом", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("ТипДома", СтруктураАдреса) + " № ", Представление); + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Дом", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("ТипДома", СтруктураАдреса) + " № ", Представление); КонецЕсли; Если СтруктураАдреса.Свойство("Корпуса") Тогда Для каждого Корпус Из СтруктураАдреса.Корпуса Цикл - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Номер", Корпус )), ", " + ЗначениеПоКлючуСтруктуры("ТипКорпуса", Корпус)+ " ", Представление); + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Номер", Корпус )), ", " + ЗначениеПоКлючуСтруктуры("ТипКорпуса", Корпус)+ " ", Представление); КонецЦикла; Иначе - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Корпус", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("ТипКорпуса", СтруктураАдреса)+ " ", Представление); + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Корпус", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("ТипКорпуса", СтруктураАдреса)+ " ", Представление); КонецЕсли; Если СтруктураАдреса.Свойство("Помещения") Тогда Для каждого Помещение Из СтруктураАдреса.Помещения Цикл - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Номер", Помещение)), ", " + ЗначениеПоКлючуСтруктуры("ТипПомещения", Помещение)+ " ", Представление); + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Номер", Помещение)), ", " + ЗначениеПоКлючуСтруктуры("ТипПомещения", Помещение)+ " ", Представление); КонецЦикла; Иначе - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Квартира", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("ТипКвартиры", СтруктураАдреса) + " ", Представление); - КонецЕсли; - - Если СтрДлина(Представление) > 2 Тогда - Представление = Сред(Представление, 3); + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Квартира", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("ТипКвартиры", СтруктураАдреса) + " ", Представление); КонецЕсли; НаименованиеВида = ЗначениеПоКлючуСтруктуры("НаименованиеВида", СтруктураАдреса); @@ -114,10 +116,10 @@ // Возвращаемое значение: // Структура - пустая структура контактной информации, ключи - имена полей, значения поля. // -Функция СтруктураКонтактнойИнформацииПоТипу(ТипКИ) Экспорт +Функция СтруктураКонтактнойИнформацииПоТипу(ТипКИ, ФорматАдреса = "КЛАДР") Экспорт Если ТипКИ = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") Тогда - Возврат СтруктураПолейАдреса(); + Возврат СтруктураПолейАдреса(ФорматАдреса); ИначеЕсли ТипКИ = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") Тогда Возврат СтруктураПолейТелефона(); Иначе @@ -144,40 +146,6 @@ #Область СлужебныйПрограммныйИнтерфейс -// Функция - Представление адреса -// -// Параметры: -// СтруктураАдреса - Структура - Структура адреса -// -// Возвращаемое значение: -// Строка - представление адреса -// -Функция ПредставлениеАдреса(СтруктураАдреса) Экспорт - - Представление = ""; - Страна = ЗначениеПоКлючуСтруктуры("Страна", СтруктураАдреса); - - Если Страна <> Неопределено Тогда - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("НаименованиеСтраны", СтруктураАдреса)), ", ", Представление); - КонецЕсли; - - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Индекс", СтруктураАдреса)), ", ", Представление); - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("РегионСокращение", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("Регион", СтруктураАдреса) + " ", Представление); - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("РайонСокращение", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("Район", СтруктураАдреса) + " ", Представление); - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("ГородСокращение", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("Город", СтруктураАдреса) + " ", Представление); - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("НаселенныйПунктСокращение", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("НаселенныйПункт", СтруктураАдреса) + " ", Представление); - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("УлицаСокращение", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("Улица", СтруктураАдреса) + " ", Представление); - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Дом", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("ТипДома", СтруктураАдреса) + " № ", Представление); - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Корпус", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("ТипКорпуса", СтруктураАдреса)+ " ", Представление); - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтруктуры("Квартира", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтруктуры("ТипКвартиры", СтруктураАдреса) + " ", Представление); - - Если СтрДлина(Представление) > 2 Тогда - Представление = Сред(Представление, 3); - КонецЕсли; - Возврат Представление; - -КонецФункции - // Возвращает XPath для района. // // Возвращаемое значение: @@ -189,6 +157,59 @@ КонецФункции +// Возвращает пространство имен для оперирования с XDTO контактной информации. +// +// Возвращаемое значение: +// Строка - пространство имен. +// +Функция ПространствоИмен() Экспорт + Возврат "http://www.v8.1c.ru/ssl/contactinfo"; +КонецФункции + +// Возвращает массив структур с информацией о частях адреса согласно приказу ФНС ММВ-7-1/525 от 31.08.2011. +// +// Возвращаемое значение: +// Массив - содержит структуры - описания. +// +Функция ТипыОбъектовАдресацииАдресаРФ() Экспорт + + Результат = Новый Массив; + + // Код, Наименование, Тип, Порядок, КодФИАС + // Тип: 1 - владение, 2 - здание, 3 - помещение. + + Результат.Добавить(СтрокаОбъектаАдресации("1010", НСтр("ru = 'Дом'"), 1, 1, 2)); + Результат.Добавить(СтрокаОбъектаАдресации("1020", НСтр("ru = 'Владение'"), 1, 2, 1)); + Результат.Добавить(СтрокаОбъектаАдресации("1030", НСтр("ru = 'Домовладение'"), 1, 3, 3)); + + Результат.Добавить(СтрокаОбъектаАдресации("1050", НСтр("ru = 'Корпус'"), 2, 1)); + Результат.Добавить(СтрокаОбъектаАдресации("1060", НСтр("ru = 'Строение'"), 2, 2, 1)); + Результат.Добавить(СтрокаОбъектаАдресации("1080", НСтр("ru = 'Литера'"), 2, 3, 3)); + Результат.Добавить(СтрокаОбъектаАдресации("1070", НСтр("ru = 'Сооружение'"), 2, 4, 2)); + Результат.Добавить(СтрокаОбъектаАдресации("1040", НСтр("ru = 'Участок'"), 2, 5)); + + Результат.Добавить(СтрокаОбъектаАдресации("2010", НСтр("ru = 'Квартира'"), 3, 1)); + Результат.Добавить(СтрокаОбъектаАдресации("2030", НСтр("ru = 'Офис'"), 3, 2)); + Результат.Добавить(СтрокаОбъектаАдресации("2040", НСтр("ru = 'Бокс'"), 3, 3)); + Результат.Добавить(СтрокаОбъектаАдресации("2020", НСтр("ru = 'Помещение'"), 3, 4)); + Результат.Добавить(СтрокаОбъектаАдресации("2050", НСтр("ru = 'Комната'"), 3, 5)); + Результат.Добавить(СтрокаОбъектаАдресации("2060", НСтр("ru = 'Этаж'"), 3, 6)); + // Наши сокращения для поддержки обратной совместимости при парсинге. + Результат.Добавить(СтрокаОбъектаАдресации("2010", НСтр("ru = 'кв.'"), 3, 6)); + Результат.Добавить(СтрокаОбъектаАдресации("2030", НСтр("ru = 'оф.'"), 3, 7)); + + // Уточняющие объекты + Результат.Добавить(СтрокаОбъектаАдресации("10100000", НСтр("ru = 'Почтовый индекс'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10200000", НСтр("ru = 'Адресная точка'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10300000", НСтр("ru = 'Садовое товарищество'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10400000", НСтр("ru = 'Элемент улично-дорожной сети, планировочной структуры дополнительного адресного элемента'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10500000", НСтр("ru = 'Промышленная зона'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10600000", НСтр("ru = 'Гаражно-строительный кооператив'"))); + Результат.Добавить(СтрокаОбъектаАдресации("10700000", НСтр("ru = 'Территория'"))); + + Возврат Результат; +КонецФункции + #КонецОбласти @@ -336,49 +357,36 @@ Возврат Результат; КонецФункции -// Возвращает массив структур с информацией о частях адреса согласно приказу ФНС ММВ-7-1/525 от 31.08.2011. +// Возвращает сокращения частей адреса // // Возвращаемое значение: -// Массив - содержит структуры - описания. +// Соответствие - Список сокращений. // -Функция ТипыОбъектовАдресацииАдресаРФ() Экспорт +Функция СокращенияОбъектовАдресацииАдресаРФ() Экспорт - Результат = Новый Массив; + Результат = Новый Соответствие; - // Код, Наименование, Тип, Порядок, КодФИАС - // Тип: 1 - владение, 2 - здание, 3 - помещение. + Результат.Вставить(НСтр("ru = 'Дом'"), НСтр("ru = 'Д.'")); + Результат.Вставить(НСтр("ru = 'Владение'"), НСтр("ru = 'Вл.'")); + Результат.Вставить(НСтр("ru = 'Домовладение'"), НСтр("ru = 'Домовл.'")); - Результат.Добавить(СтрокаОбъектаАдресации("1010", НСтр("ru = 'Дом'"), 1, 1, 2)); - Результат.Добавить(СтрокаОбъектаАдресации("1020", НСтр("ru = 'Владение'"), 1, 2, 1)); - Результат.Добавить(СтрокаОбъектаАдресации("1030", НСтр("ru = 'Домовладение'"), 1, 3, 3)); + Результат.Вставить(НСтр("ru = 'Корпус'"), НСтр("ru = 'Корп.'")); + Результат.Вставить(НСтр("ru = 'Строение'"), НСтр("ru = 'Стр.'")); + Результат.Вставить(НСтр("ru = 'Литера'"), НСтр("ru = 'Лит.'")); + Результат.Вставить(НСтр("ru = 'Сооружение'"), НСтр("ru = 'Сооруж.'")); + Результат.Вставить(НСтр("ru = 'Участок'"), НСтр("ru = 'Уч.'")); - Результат.Добавить(СтрокаОбъектаАдресации("1050", НСтр("ru = 'Корпус'"), 2, 1)); - Результат.Добавить(СтрокаОбъектаАдресации("1060", НСтр("ru = 'Строение'"), 2, 2, 1)); - Результат.Добавить(СтрокаОбъектаАдресации("1080", НСтр("ru = 'Литера'"), 2, 3, 3)); - Результат.Добавить(СтрокаОбъектаАдресации("1070", НСтр("ru = 'Сооружение'"), 2, 4, 2)); - Результат.Добавить(СтрокаОбъектаАдресации("1040", НСтр("ru = 'Участок'"), 2, 5)); - - Результат.Добавить(СтрокаОбъектаАдресации("2010", НСтр("ru = 'Квартира'"), 3, 1)); - Результат.Добавить(СтрокаОбъектаАдресации("2030", НСтр("ru = 'Офис'"), 3, 2)); - Результат.Добавить(СтрокаОбъектаАдресации("2040", НСтр("ru = 'Бокс'"), 3, 3)); - Результат.Добавить(СтрокаОбъектаАдресации("2020", НСтр("ru = 'Помещение'"), 3, 4)); - Результат.Добавить(СтрокаОбъектаАдресации("2050", НСтр("ru = 'Комната'"), 3, 5)); - // Наши сокращения для поддержки обратной совместимости при парсинге. - Результат.Добавить(СтрокаОбъектаАдресации("2010", НСтр("ru = 'кв.'"), 3, 6)); - Результат.Добавить(СтрокаОбъектаАдресации("2030", НСтр("ru = 'оф.'"), 3, 7)); - - // Уточняющие объекты - Результат.Добавить(СтрокаОбъектаАдресации("10100000", НСтр("ru = 'Почтовый индекс'"))); - Результат.Добавить(СтрокаОбъектаАдресации("10200000", НСтр("ru = 'Адресная точка'"))); - Результат.Добавить(СтрокаОбъектаАдресации("10300000", НСтр("ru = 'Садовое товарищество'"))); - Результат.Добавить(СтрокаОбъектаАдресации("10400000", НСтр("ru = 'Элемент улично-дорожной сети, планировочной структуры дополнительного адресного элемента'"))); - Результат.Добавить(СтрокаОбъектаАдресации("10500000", НСтр("ru = 'Промышленная зона'"))); - Результат.Добавить(СтрокаОбъектаАдресации("10600000", НСтр("ru = 'Гаражно-строительный кооператив'"))); - Результат.Добавить(СтрокаОбъектаАдресации("10700000", НСтр("ru = 'Территория'"))); + Результат.Вставить(НСтр("ru = 'Квартира'"), НСтр("ru = 'Кв.'")); + Результат.Вставить(НСтр("ru = 'Офис'"), НСтр("ru = 'Оф.'")); + Результат.Вставить(НСтр("ru = 'Бокс'"), НСтр("ru = 'Бокс'")); + Результат.Вставить(НСтр("ru = 'Помещение'"), НСтр("ru = 'Пом.'")); + Результат.Вставить(НСтр("ru = 'Комната'"), НСтр("ru = 'Ком.'")); + Результат.Вставить(НСтр("ru = 'Этаж'"), НСтр("ru = 'Этаж'")); Возврат Результат; КонецФункции + Функция СтрокаОбъектаАдресации(Код, Наименование, Тип = 0, Порядок = 0, КодФИАС = 0) СтруктураОбъектаАдресации = Новый Структура; @@ -414,15 +422,6 @@ Возврат ПолноеНаименование; КонецФункции -// Возвращает пространство имен для оперирования с XDTO контактной информации. -// -// Возвращаемое значение: -// Строка - пространство имен. -// -Функция ПространствоИмен() Экспорт - Возврат "http://www.v8.1c.ru/ssl/contactinfo"; -КонецФункции - #Область СлужебныеПроцедурыИФункцииПоРаботеСXMLАдресами @@ -473,7 +472,7 @@ // Возвращаемое значение: // Массив - строки, слова // -Функция СловаТекста(Знач Текст, Знач Разделители = Неопределено) Экспорт +Функция СловаТекста(Знач Текст, Знач Разделители = Неопределено) НачалоСлова = 0; Состояние = 0; @@ -506,9 +505,9 @@ // ВыделятьСокращения - Булево - Опциональный параметр режима работы. // // Возвращаемое значение: -// Массив - содержит стурктуры "Наименование, Сокращение". +// Массив - содержит структуры "Наименование, Сокращение". // -Функция НаборНаименованийИСокращений(Знач Текст, Знач ВыделятьСокращения = Истина) Экспорт +Функция НаборНаименованийИСокращений(Знач Текст, Знач ВыделятьСокращения = Истина) Результат = Новый Массив; Для Каждого Часть Из СловаТекста(Текст, ",") Цикл @@ -539,7 +538,7 @@ // Возвращает первый элемент из списка. // // Параметры: -// СписокДанных - СписокЗначений, Массив, ПолеФормы +// СписокДанных - СписокЗначений, Массив, ПолеФормы. // // Возвращаемое значение: // Произвольный - первый элемент. @@ -562,7 +561,7 @@ // Возвращает структуру, описывающую населенный пункт в иерархии младший-старший. // // Параметры: -// ВариантКлассификатора Строка - Требуемый вид классификатора ФИАС, КЛАДР +// ВариантКлассификатора Строка - Требуемый вид классификатора ФИАС, КЛАДР. // // Возвращаемое значение: // Структура - описание населенного пункта. @@ -640,10 +639,13 @@ // Возвращаемое значение: // УникальныйИдентификатор - идентификатор. // -Функция ИдентификаторЭлементаПоЧастямАдреса(ЧастиАдреса) Экспорт +Функция ИдентификаторЭлементаПоЧастямАдреса(ЧастиАдреса, ИскатьПоУлицам = Истина) Экспорт Порядок = Новый СписокЗначений; Для Каждого КлючЗначение Из ЧастиАдреса Цикл + Если НЕ ИскатьПоУлицам И КлючЗначение.Значение.Уровень > 6 Тогда + Продолжить; + КонецЕсли; Порядок.Добавить(КлючЗначение.Значение.Уровень, КлючЗначение.Ключ); КонецЦикла; Порядок.СортироватьПоЗначению(НаправлениеСортировки.Убыв); @@ -714,25 +716,6 @@ КонецФункции -// Возвращает полное наименование для улицы. Под улицей понимается синтетическое -// поле, характеризующее все, что меньше или равно улице. -// -// Параметры: -// ЧастиАдреса - Структура - Описание текущего состояния адреса. -// ВариантКлассификатора - Строка - Вариант классификатора. -// -Функция ПредставлениеУлицыПоЧастямАдреса(ЧастиАдреса, ВариантКлассификатора = "ФИАС") Экспорт - - Уровни = Новый Массив; - Уровни.Добавить(7); - Если ВариантКлассификатора = "ФИАС" Тогда - Уровни.Добавить(90); - Уровни.Добавить(91); - КонецЕсли; - Возврат ПредставлениеПоЧастямАдреса(ЧастиАдреса, Уровни); - -КонецФункции - // Конструктор внутренней структуры элемента адреса. // Функция ЭлементАдреснойСтруктуры(Заголовок, Подсказка, ПутьXPath, Уровень, Предопределенный = Ложь) @@ -808,7 +791,7 @@ Значение = Неопределено; - Если Структура.Свойство(Ключ, Значение) Тогда + Если Структура.Свойство(Ключ, Значение) Тогда Возврат Строка(Значение); КонецЕсли; @@ -816,31 +799,30 @@ КонецФункции -// Возвращает строку дополнительных значений по имени реквизита. -// -// Параметры: -// Форма - УправляемаяФорма - передаваемая форма. -// ИмяРеквизита - Строка - имя реквизита. -// -// Возвращаемое значение: -// СтрокаКоллекции - строка коллекции. -// Неопределено - нет данных. -// -Функция ПолучитьСтрокуДополнительныхЗначений(Форма, ИмяРеквизита) Экспорт +Процедура ПредставлениеАдресаПоСтруктуре(СтруктураАдреса, КлючНаименование, Представление, КлючСокращения = "", ДобавлятьСокращения = Ложь, СтрокаКонкатенации = ", ") - Отбор = Новый Структура("ИмяРеквизита", ИмяРеквизита); - Строки = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); - - Возврат ?(Строки.Количество() = 0, Неопределено, Строки[0]); - -КонецФункции + Если СтруктураАдреса.Свойство(КлючНаименование) Тогда + Дополнение = СокрЛП(СтруктураАдреса[КлючНаименование]); + Если ЗначениеЗаполнено(Дополнение) Тогда + Если ДобавлятьСокращения И СтруктураАдреса.Свойство(КлючСокращения) Тогда + Дополнение = Дополнение + " " + СокрЛП(СтруктураАдреса[КлючСокращения]); + КонецЕсли; + Если ЗначениеЗаполнено(Представление) Тогда + Представление = Представление + СтрокаКонкатенации + Дополнение; + Иначе + Представление = Дополнение; + КонецЕсли; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + // Возвращает пустую структура адреса. // // Возвращаемое значение: // Структура - адрес, ключи - имена полей, значения поля. // -Функция СтруктураПолейАдреса() Экспорт +Функция СтруктураПолейАдреса(ФорматАдреса) СтруктураАдреса = Новый Структура; СтруктураАдреса.Вставить("Представление", ""); @@ -866,6 +848,13 @@ СтруктураАдреса.Вставить("ТипКвартиры",""); СтруктураАдреса.Вставить("НаименованиеВида",""); + Если ВРег(ФорматАдреса) = "ФИАС" Тогда + СтруктураАдреса.Вставить("Округ",""); + СтруктураАдреса.Вставить("ОкругСокращение",""); + СтруктураАдреса.Вставить("ВнутригородскойРайон",""); + СтруктураАдреса.Вставить("ВнутригородскойРайонСокращение",""); + КонецЕсли; + Возврат СтруктураАдреса; КонецФункции @@ -875,7 +864,7 @@ // Возвращаемое значение: // Структура - ключи - имена полей, значения поля. // -Функция СтруктураПолейТелефона() Экспорт +Функция СтруктураПолейТелефона() СтруктураТелефона = Новый Структура; СтруктураТелефона.Вставить("Представление", ""); @@ -897,7 +886,7 @@ // Возвращаемое значение: // Строка - пустая строка или последнее слово в географическом названии. // -Функция АдресноеСокращение(Знач ГеографическоеНазвание) Экспорт +Функция АдресноеСокращение(Знач ГеографическоеНазвание) Сокращение = ""; МассивСлов = СтрРазделить(ГеографическоеНазвание, " ", Ложь); @@ -1048,6 +1037,12 @@ Возврат Результат; КонецФункции +// Текст, который выводит в поле адрес, когда он не заполнен и отображается в виде гиперссылки. +// +Функция ТекстПустогоАдресаВВидеГиперссылки() Экспорт + Возврат НСтр("ru = 'Заполнить'"); +КонецФункции + #КонецОбласти #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl index 46b300ab9..06d11729c 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебный/Module.bsl @@ -233,7 +233,7 @@ СоответствиеСокращений.Вставить(4, Город.Сокращение); ВнутригРайон = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЭлементыАдреса["ВнутригРайон"]); - Результат.Вставить("ВнутригородскойРайон", ?(НаименованиеВключаетСокращение, ЭлементыАдреса[" ВнутригРайон"], ВнутригРайон.Наименование)); + Результат.Вставить("ВнутригородскойРайон", ?(НаименованиеВключаетСокращение, ЭлементыАдреса["ВнутригРайон"], ВнутригРайон.Наименование)); СоответствиеСокращений.Вставить(5, ВнутригРайон.Сокращение); НаселПункт = УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ЭлементыАдреса["НаселенныйПункт"]); @@ -301,9 +301,12 @@ КонецЕсли; Если ЗаполнятьКоды И ЭтоРоссийскийАдрес Тогда - ЗаполнитьКодыАдреса(Результат); + ЗаполнитьКодыАдреса(Результат, Адрес); + ОпределитьФорматКодов(Результат, АдресРФ); КонецЕсли; + // Из XDTO пустые значение приходят как Неопределено + ЗаменитьВСтруктуреНеопределеноНаПустуюСтроку(Результат); Возврат Результат; КонецФункции @@ -328,66 +331,50 @@ КонецФункции -// Заполняет коды по структуре адреса +// Заполняет коды по структуре адреса. // -Процедура ЗаполнитьКодыАдреса(Адрес) +Процедура ЗаполнитьКодыАдреса(Результат, Адрес) КодыКЛАДР = Новый Структура("Регион, Округ, Город, ВнутригородскойРайон, НаселенныйПункт, Улица"); ДополнительныеКоды = Новый Структура("ОКТМО, ОКАТО, КодИФНСФЛ, КодИФНСЮЛ, КодУчасткаИФНСФЛ, КодУчасткаИФНСЮЛ"); - Адрес.Вставить("КодыКЛАДР", КодыКЛАДР); - Адрес.Вставить("ДополнительныеКоды", ДополнительныеКоды); + Результат.Вставить("КодыКЛАДР", КодыКЛАДР); + Результат.Вставить("ДополнительныеКоды", ДополнительныеКоды); - Если ПустаяСтрока(Адрес.Регион) Тогда + Если ПустаяСтрока(Результат.Регион) Тогда Возврат; КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - МодульАдресныйКлассификаторСлужебный.ЗаполнитьКодыАдреса(Адрес); + АдресныеКоды = МодульАдресныйКлассификаторСлужебный.КодыАдресаИКодыКЛАДР(Адрес); + Результат.ДополнительныеКоды = АдресныеКоды.КодыАдреса; + Результат.КодыКЛАДР = АдресныеКоды.КодыКЛАДР; КонецЕсли; КонецПроцедуры -// Возвращает имя формы для редактирования типа контактной информации. +// Возвращает ОКТОМ в правильном формате 8 или 11 символов. // // Параметры: -// ВидИнформации - ПеречислениеСсылка.ТипыКонтактнойИнформации, СправочникСсылка.ВидыКонтактнойИнформации - -// запрашиваемый тип. -// +// ОКТМО - Строка, Число - Код ОКТМО. +// // Возвращаемое значение: -// Строка - полное имя формы. +// Строка - Код ОКТМО. // -Функция ИмяФормыВводаКонтактнойИнформации(Знач ВидИнформации) Экспорт +Функция ОКТМО(ОКТМО) Экспорт - ТипИнформации = ТипВидаКонтактнойИнформации(ВидИнформации); + ОКТМОСтрока = Формат(ОКТМО, "ЧГ=0"); - ВсеТипы = "Перечисление.ТипыКонтактнойИнформации."; - Если ТипИнформации = ПредопределенноеЗначение(ВсеТипы + "Адрес") Тогда - Возврат "Обработка.ВводКонтактнойИнформации.Форма.ВводАдреса"; - - ИначеЕсли ТипИнформации = ПредопределенноеЗначение(ВсеТипы + "Телефон") Тогда - Возврат "Обработка.ВводКонтактнойИнформации.Форма.ВводТелефона"; - - ИначеЕсли ТипИнформации = ПредопределенноеЗначение(ВсеТипы + "Факс") Тогда - Возврат "Обработка.ВводКонтактнойИнформации.Форма.ВводТелефона"; - + Если СтрДлина(ОКТМОСтрока) < 8 Тогда + Возврат Формат(ОКТМО, "ЧЦ=8; ЧВН=; ЧГ=0"); + ИначеЕсли СтрДлина(ОКТМОСтрока) = 10 Тогда + Возврат Формат(ОКТМО, "ЧЦ=11; ЧВН=; ЧГ=0"); КонецЕсли; - Возврат Неопределено; -КонецФункции - -// Возвращает XPath для района. -// -// Возвращаемое значение: -// Строка - XPath -// -Функция XPathРайона() Экспорт - - Возврат "СвРайМО/Район"; + Возврат ОКТМОСтрока; КонецФункции - // Получить первое значение определенного вида контактной информации у объекта. // // Параметры: @@ -448,10 +435,58 @@ КонецФункции +// Дополняет объект реквизитами, хранящимися отдельно от объекта, либо в служебной части самого объекта, +// не предназначенной для вывода в отчетах. +Процедура ПриПодготовкеДанныхОбъекта(Объект, ДополнительныеРеквизиты) Экспорт + + Если Объект.Метаданные().ТабличныеЧасти.Найти("КонтактнаяИнформация") <> Неопределено Тогда + Для Каждого Контакт Из УправлениеКонтактнойИнформацией.ЗначенияКонтактнойИнформацииОбъекта(Объект.Ссылка, Неопределено) Цикл + Если ЗначениеЗаполнено(Контакт.Вид) Тогда + Реквизит = ДополнительныеРеквизиты.Добавить(); + Реквизит.Наименование = Контакт.Вид; + Реквизит.Значение = Контакт.Значение; + КонецЕсли; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +// Обновляет поля контактной информации из ТаблицыЗначений (например объекта другого вида справочника). +// +// Параметры: +// Источник - ТаблицаЗначений - таблица значений с контактной информацией. +// Приемник - УправляемаяФорма - форма объекта. куда надо передать контактную информацию. +// +Процедура ЗаполнитьКонтактнуюИнформацию(Источник, Приемник) Экспорт + КоллекцияПолейКонтактнойИнформации = Приемник.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; + + Для Каждого ЭлементКоллекцияПолейКонтактнойИнформации Из КоллекцияПолейКонтактнойИнформации Цикл + + СтрокаВКИ = Источник.Найти(ЭлементКоллекцияПолейКонтактнойИнформации.Вид, "Вид"); + Если СтрокаВКИ <> Неопределено Тогда + Приемник[ЭлементКоллекцияПолейКонтактнойИнформации.ИмяРеквизита] = СтрокаВКИ.Представление; + ЭлементКоллекцияПолейКонтактнойИнформации.ЗначенияПолей = УправлениеКонтактнойИнформациейКлиентСервер.ПреобразоватьСтрокуВСписокПолей(СтрокаВКИ.ЗначенияПолей); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции +Процедура ОпределитьФорматКодов(Результат, АдресРФ) + Если ТипЗнч(АдресРФ) = Тип("ОбъектXDTO") Тогда + Если ЗначениеЗаполнено(АдресРФ.ОКТМО) Тогда + Результат.ДополнительныеКоды.ОКТМО = ОКТМО(АдресРФ.ОКТМО); + КонецЕсли; + Если ЗначениеЗаполнено(АдресРФ.ОКАТО) Тогда + Результат.ДополнительныеКоды.ОКАТО = Формат(АдресРФ.ОКАТО, "ЧГ=0"); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + #Область ОбновлениеИнформационнойБазы // Добавляет процедуры-обработчики обновления, необходимые данной подсистеме. @@ -498,6 +533,33 @@ Обработчик.ОбщиеДанные = Ложь; Обработчик.НачальноеЗаполнение = Истина; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.2.39"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("f663ee3c-68b7-45db-bd6c-eebe6665fc7c"); + Обработчик.Процедура = "УправлениеКонтактнойИнформациейСлужебный.УдалитьАдресаСТекстомЗаполнить"; + Обработчик.Комментарий = НСтр("ru = 'Обновление сведений контактной информации. + |До завершения обработки некоторая контактная информация может отображаться некорректно.'"); + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.НачальноеЗаполнение = Ложь; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.2.156"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("143e1eb1-4fce-4cd2-b307-56f759d144d4"); + Обработчик.Процедура = "УправлениеКонтактнойИнформациейСлужебный.ИсправитьДатуДействияУАдресов"; + Обработчик.Комментарий = НСтр("ru = 'Обновление сведений контактной информации содержащих адреса с историей. + |До завершения обработки некоторая контактная информация может отображаться некорректно.'"); + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.НачальноеЗаполнение = Ложь; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.2.195"; + Обработчик.Идентификатор = Новый УникальныйИдентификатор("dfc6a0fa-7c7b-4096-9d04-2c67d5eb17a4"); + Обработчик.Процедура = "УправлениеКонтактнойИнформациейСлужебный.ОбновитьСтраныМираПоОКСМ"; + Обработчик.Комментарий = НСтр("ru = 'Обновление сведений о странах мирах в соответствии с общероссийским классификатором стран мира. + |До завершения обработки данные документов будут отображаться некорректно.'"); + Обработчик.РежимВыполнения = "Отложенно"; + Обработчик.НачальноеЗаполнение = Ложь; + КонецПроцедуры // Неразделенный монопольный обработчик для копирования стран мира из нулевой области. @@ -610,12 +672,6 @@ КонецПроцедуры -// Загружаем все страны мира из классификатора принудительно. -// -Процедура ЗагрузитьСтраныМира() Экспорт - Справочники.СтраныМира.ОбновитьСтраныМираПоКлассификатору(Истина); -КонецПроцедуры - // Обновляем только существующие элементы стран мира по классификатору. Процедура ОбновитьСуществующиеСтраныМира() Экспорт @@ -645,7 +701,7 @@ КонецПроцедуры -// Инициализирует значение реквизита Используется справочника ВидыКонтактнойИнформации +// Инициализирует значение реквизита Используется справочника ВидыКонтактнойИнформации. // Процедура УстановитьЗначениеПризнакаИспользуется() Экспорт @@ -670,6 +726,253 @@ КонецПроцедуры +Процедура УдалитьАдресаСТекстомЗаполнить(Параметры, РазмерПорции = 1000) Экспорт + + ОбъектыСАдресом = Неопределено; + Параметры.Свойство("ОбъектыСАдресом", ОбъектыСАдресом); + Если Параметры.ПрогрессВыполнения.ВсегоОбъектов = 0 Тогда + + // получение адресов для обработки + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВидыКонтактнойИнформации.Родитель.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + |ГДЕ + | ВидыКонтактнойИнформации.Тип = &Тип + | И ВидыКонтактнойИнформации.РедактированиеТолькоВДиалоге = &РедактированиеТолькоВДиалоге"; + Запрос.УстановитьПараметр("РедактированиеТолькоВДиалоге", Истина); + Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес); + РезультатЗапроса = Запрос.Выполнить(); + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + ТекстЗапроса = ""; + Разделитель = ""; + ШаблонЗапроса = "ВЫБРАТЬ + | ТаблицаСКонтактнойИнформацией.Ссылка КАК Ссылка + |ИЗ + | %1.%2.КонтактнаяИнформация КАК ТаблицаСКонтактнойИнформацией + |ГДЕ + | ТаблицаСКонтактнойИнформацией.Представление = &Заполнить + | + |СГРУППИРОВАТЬ ПО + | ТаблицаСКонтактнойИнформацией.Ссылка"; + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Если СтрНачинаетсяС(ВыборкаДетальныеЗаписи.ИмяПредопределенныхДанных, "Справочник") Тогда + ИмяОбъекта = Сред(ВыборкаДетальныеЗаписи.ИмяПредопределенныхДанных, 11); + Если Метаданные.Справочники.Найти(ИмяОбъекта) <> Неопределено Тогда + ТекстЗапроса = ТекстЗапроса + Разделитель + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗапроса, "Справочник", ИмяОбъекта); + Разделитель = " ОБЪЕДИНИТЬ ВСЕ "; + КонецЕсли; + КонецЕсли; + КонецЦикла; + Если ПустаяСтрока(ТекстЗапроса) Тогда + Возврат; + КонецЕсли; + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.Параметры.Вставить("Заполнить", УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки()); + ОбъектыСАдресом = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + Параметры.ПрогрессВыполнения.ВсегоОбъектов = ОбъектыСАдресом.Количество(); + Параметры.Вставить("ОбъектыСАдресом", ОбъектыСАдресом); + КонецЕсли; + + Если ОбъектыСАдресом = Неопределено ИЛИ ОбъектыСАдресом.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Позиция = ОбъектыСАдресом.Количество() - 1; + КоличествоОбработанных = 0; + + Пока Позиция >= 0 И КоличествоОбработанных < РазмерПорции Цикл + ОбъектКонтактнойИнформации = ОбъектыСАдресом.Получить(Позиция).ПолучитьОбъект(); + КонтактнаяИнформация = ОбъектКонтактнойИнформации.КонтактнаяИнформация; + МассивДляУдаления = Новый Массив; + Для каждого СтрокаКонтактнойИнформации Из КонтактнаяИнформация Цикл + Если СтрокаКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес + И СтрокаКонтактнойИнформации.Представление = УправлениеКонтактнойИнформациейКлиентСервер.ТекстПустогоАдресаВВидеГиперссылки() Тогда + МассивДляУдаления.Добавить(СтрокаКонтактнойИнформации); + КонецЕсли; + КонецЦикла; + Для каждого СтрокаКонтактнойИнформации Из МассивДляУдаления Цикл + КонтактнаяИнформация.Удалить(СтрокаКонтактнойИнформации); + КонецЦикла; + ОбъектКонтактнойИнформации.Записать(); + ОбъектыСАдресом.Удалить(Позиция); + Позиция = Позиция - 1; + КоличествоОбработанных = КоличествоОбработанных + 1; + КонецЦикла; + Если ОбъектыСАдресом.Количество() > 0 Тогда + Параметры.ОбработкаЗавершена = Ложь; + КонецЕсли; + Параметры.ПрогрессВыполнения.ОбработаноОбъектов = Параметры.ПрогрессВыполнения.ОбработаноОбъектов + КоличествоОбработанных; + Параметры.Вставить("ОбъектыСАдресом", ОбъектыСАдресом); + +КонецПроцедуры + +Процедура ИсправитьДатуДействияУАдресов(Параметры, РазмерПорции = 1000) Экспорт + + ОбъектыСАдресом = Неопределено; + Параметры.Свойство("ОбъектыСАдресом", ОбъектыСАдресом); + Если Параметры.ПрогрессВыполнения.ВсегоОбъектов = 0 Тогда + + // получение адресов для обработки (первый проход) + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВидыКонтактнойИнформации.Родитель.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных + |ИЗ + | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации + |ГДЕ + | ВидыКонтактнойИнформации.ХранитьИсториюИзменений = ИСТИНА"; + + ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать(); + + ТекстЗапроса = ""; + Разделитель = ""; + + ШаблонЗапроса = "ВЫБРАТЬ + | ТаблицаСКонтактнойИнформацией.Ссылка КАК Ссылка + |ИЗ + | %1.%2.КонтактнаяИнформация КАК ТаблицаСКонтактнойИнформацией + |ГДЕ + | ТаблицаСКонтактнойИнформацией.Вид.ХранитьИсториюИзменений = ИСТИНА + | И ТаблицаСКонтактнойИнформацией.ДействуетС <> ДАТАВРЕМЯ(1, 1, 1) + | + |СГРУППИРОВАТЬ ПО + | ТаблицаСКонтактнойИнформацией.Вид, + | ТаблицаСКонтактнойИнформацией.Ссылка"; + + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Если СтрНачинаетсяС(ВыборкаДетальныеЗаписи.ИмяПредопределенныхДанных, "Справочник") Тогда + ИмяОбъекта = Сред(ВыборкаДетальныеЗаписи.ИмяПредопределенныхДанных, 11); + Если Метаданные.Справочники.Найти(ИмяОбъекта) <> Неопределено Тогда + ТекстЗапроса = ТекстЗапроса + Разделитель + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗапроса, "Справочник", ИмяОбъекта); + Разделитель = " ОБЪЕДИНИТЬ ВСЕ "; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если ПустаяСтрока(ТекстЗапроса) Тогда + Возврат; + КонецЕсли; + + Запрос = Новый Запрос(ТекстЗапроса); + ОбъектыСАдресом = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + Параметры.ПрогрессВыполнения.ВсегоОбъектов = ОбъектыСАдресом.Количество(); + Параметры.Вставить("ОбъектыСАдресом", ОбъектыСАдресом); + + КонецЕсли; + + Если ОбъектыСАдресом = Неопределено ИЛИ ОбъектыСАдресом.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Позиция = ОбъектыСАдресом.Количество() - 1; + КоличествоОбработанных = 0; + + Пока Позиция >= 0 И КоличествоОбработанных < РазмерПорции Цикл + + ОбъектКонтактнойИнформации = ОбъектыСАдресом.Получить(Позиция).ПолучитьОбъект(); + КонтактнаяИнформация = ОбъектКонтактнойИнформации.КонтактнаяИнформация; + ВидыКонтактнойИнформации = КонтактнаяИнформация.Выгрузить(, "Вид"); + ВидыКонтактнойИнформации.Свернуть("Вид"); + + ТребуетсяЗаписьОбъекта = Ложь; + + Для каждого ВидКонтактнойИнформации Из ВидыКонтактнойИнформации Цикл + Если НЕ ЗначениеЗаполнено(ВидКонтактнойИнформации.Вид) + ИЛИ НЕ ВидКонтактнойИнформации.Вид.ХранитьИсториюИзменений Тогда + Продолжить; + КонецЕсли; + Отбор = Новый Структура("Вид", ВидКонтактнойИнформации.Вид); + НайденныеСтроки = КонтактнаяИнформация.НайтиСтроки(Отбор); + + Если НайденныеСтроки.Количество() = 1 Тогда + Если ЗначениеЗаполнено(НайденныеСтроки[0].ДействуетС) Тогда + НайденныеСтроки[0].ДействуетС = Дата(1, 1, 1); + ТребуетсяЗаписьОбъекта = Истина; + КонецЕсли; + ИначеЕсли НайденныеСтроки.Количество() > 0 Тогда + + СтрокаДляИзменения = НайденныеСтроки[0]; + Если НЕ ЗначениеЗаполнено(СтрокаДляИзменения.ДействуетС) Тогда + СтрокаДляИзменения = Неопределено; + Иначе + Для Индекс = 1 По НайденныеСтроки.Количество() - 1 Цикл + Если НЕ ЗначениеЗаполнено(НайденныеСтроки[Индекс].ДействуетС) Тогда + СтрокаДляИзменения = Неопределено; + Прервать; + ИначеЕсли НайденныеСтроки[Индекс].ДействуетС < СтрокаДляИзменения.ДействуетС Тогда + СтрокаДляИзменения = НайденныеСтроки[Индекс]; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Если СтрокаДляИзменения <> Неопределено Тогда + СтрокаДляИзменения.ДействуетС = Дата(1, 1, 1); + ТребуетсяЗаписьОбъекта = Истина; + КонецЕсли; + КонецЕсли; + + КонецЦикла; + + Если ТребуетсяЗаписьОбъекта Тогда + ОбъектКонтактнойИнформации.Записать(); + КонецЕсли; + + ОбъектыСАдресом.Удалить(Позиция); + Позиция = Позиция - 1; + КоличествоОбработанных = КоличествоОбработанных + 1; + КонецЦикла; + + Если ОбъектыСАдресом.Количество() > 0 Тогда + Параметры.ОбработкаЗавершена = Ложь; + КонецЕсли; + + Параметры.ПрогрессВыполнения.ОбработаноОбъектов = Параметры.ПрогрессВыполнения.ОбработаноОбъектов + КоличествоОбработанных; + Параметры.Вставить("ОбъектыСАдресом", ОбъектыСАдресом); + +КонецПроцедуры + +Процедура ОбновитьСтраныМираПоОКСМ(Параметры, РазмерПорции = 1000) Экспорт + + ОбновляемыеСтраныМира = Неопределено; + Параметры.Свойство("ОбновляемыеСтраныМира", ОбновляемыеСтраныМира); + + Если Параметры.ПрогрессВыполнения.ВсегоОбъектов = 0 Тогда + ОбновляемыеСтраныМира = СписокСтранКОбработке(); + Параметры.ПрогрессВыполнения.ВсегоОбъектов = ОбновляемыеСтраныМира.Количество(); + КонецЕсли; + + Если ОбновляемыеСтраныМира = Неопределено ИЛИ ОбновляемыеСтраныМира.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Позиция = ОбновляемыеСтраныМира.Количество() - 1; + КоличествоОбработанных = 0; + + Пока Позиция >= 0 И КоличествоОбработанных < РазмерПорции Цикл + + ДанныеОКСМ = УправлениеКонтактнойИнформацией.ДанныеКлассификатораСтранМираПоКоду(ОбновляемыеСтраныМира.Получить(Позиция).Код); + + Если ДанныеОКСМ <> Неопределено Тогда + СтранаМира = ОбновляемыеСтраныМира.Получить(Позиция).ПолучитьОбъект(); + ЗаполнитьЗначенияСвойств(СтранаМира, ДанныеОКСМ); + ОбновлениеИнформационнойБазы.ЗаписатьДанные(СтранаМира); + КонецЕсли; + + ОбновляемыеСтраныМира.Удалить(Позиция); + Позиция = Позиция - 1; + КоличествоОбработанных = КоличествоОбработанных + 1; + + КонецЦикла; + + Если ОбновляемыеСтраныМира.Количество() > 0 Тогда + Параметры.ОбработкаЗавершена = Ложь; + КонецЕсли; + + Параметры.ПрогрессВыполнения.ОбработаноОбъектов = Параметры.ПрогрессВыполнения.ОбработаноОбъектов + КоличествоОбработанных; + Параметры.Вставить("ОбновляемыеСтраныМира", ОбновляемыеСтраныМира); + +КонецПроцедуры + #КонецОбласти #Область ВзаимодействиеСАдреснымКлассификатором @@ -901,45 +1204,6 @@ Возврат Результат; КонецФункции -// Возвращает структуру, описывающую населенный пункт в иерархии младший-старший -// для текущего адресного классификатора. Имена ключей структуры зависят от -// классификатора. -// -// Параметры: -// Идентификатор - УникальныйИдентификатор - Идентификатор объекта. Если указан, то структура -// заполняется данными для этого объекта. -// ВариантКлассификатора - Строка - Требуемый вид классификатора. -// -// Возвращаемое значение: -// Структура - описание населенного пункта. -// -Функция СписокРеквизитовУлицы(Идентификатор = Неопределено, ВариантКлассификатора = "КЛАДР") Экспорт - - Результат = УправлениеКонтактнойИнформациейКлиентСервер.СтруктураЧастейАдресаНаселенногоПункта(ВариантКлассификатора); - - Если Идентификатор = Неопределено Тогда - Возврат Результат; - КонецЕсли; - - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - Возврат Неопределено; - КонецЕсли; - - // Заполняем данные по идентификатору. - МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - СтруктураДанных = МодульАдресныйКлассификаторСлужебный.АктуальныеАдресныеСведения(Идентификатор); - - Если Не СтруктураДанных.Отказ Тогда - Адрес = СтруктураДанных.Данные; - Для Каждого КлючЗначение Из Результат Цикл - Часть = КлючЗначение.Значение; - Часть.Представление = СокрЛП(ПолучитьXDTOРеквизитОбъекта(Адрес, Часть.ПутьXPath)); - КонецЦикла; - КонецЕсли; - - Возврат Результат; -КонецФункции - // Устанавливает значения полей населенного пункта в XDTO адресе. // // Параметры: @@ -1045,7 +1309,7 @@ // = Ложь. // * Данные - Строка - Описание версии поставщика. // -Функция ВерсияПоставщикаДанныхКлассификатора() Экспорт +Функция ВерсияПоставщикаДанныхКлассификатора() Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); @@ -1361,21 +1625,47 @@ // // Параметры: // ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - Населенный пункт или улица. -// Текст - Строка - Текст автоподбора. +// СтрокаПоиска - Строка - Текст автоподбора. // Возвращаемое значение: // СписокЗначений - результат для автоподбора. // -Функция СписокАвтоподбораНомераДомов(ИдентификаторАдресногоОбъекта, Текст) Экспорт +Функция СписокАвтоподбораНомераДомов(ИдентификаторАдресногоОбъекта, СтрокаПоиска) Экспорт ВариантыДомов = Новый СписокЗначений; - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - ВариантыДомов = МодульАдресныйКлассификаторСлужебный.ВариантыАвтоподбораНомеровДомов(ИдентификаторАдресногоОбъекта, Текст); + + СписокДомов = СписокДомов(ИдентификаторАдресногоОбъекта, СтрокаПоиска); + Если СписокДомов <> Неопределено Тогда + ВариантыДомов = Новый СписокЗначений; + Для каждого Строка Из СписокДомов Цикл + ВариантыДомов.Добавить(Строка.Значение, Строка.Представление); + КонецЦикла; КонецЕсли; Возврат ВариантыДомов; КонецФункции +// Возвращает список домов по идентификатору адресного объекта, поиск по подобию. +// +// Параметры: +// ИдентификаторАдресногоОбъекта - УникальныйИдентификатор - Родительский объект. +// СтрокаПоиска - Строка - Текст, отбора в списке домов. +// +// Возвращаемое значение: +// ТаблицаЗначений - найденные варианты. +// +Функция СписокДомов(ИдентификаторАдресногоОбъекта, СтрокаПоиска = "") Экспорт + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); + СписокДомов = МодульАдресныйКлассификаторСлужебный.СписокДомов(ИдентификаторАдресногоОбъекта, СтрокаПоиска); + Возврат СписокДомов; + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + + #КонецОбласти #Область ОбщиеСлужебныеПроцедурыИФункции @@ -1444,103 +1734,6 @@ КонецФункции -Функция АдресИзСтрокиФормата9Запятых(Строка9Запятых) Экспорт - СтруктураАдреса = РазложитьАдресВСтруктуру(Строка9Запятых); - ВозвращаемаяСтрока = ""; - Для Каждого КлючИЗначение Из СтруктураАдреса Цикл - Если ПустаяСтрока(КлючИЗначение.Значение) Тогда - Продолжить; - КонецЕсли; - ВозвращаемаяСтрока = ВозвращаемаяСтрока + ?(ПустаяСтрока(ВозвращаемаяСтрока), "", Символы.ПС) + КлючИЗначение.Ключ + "=" + СокрЛП(КлючИЗначение.Значение); - КонецЦикла; - Если Не ПустаяСтрока(СтруктураАдреса.Дом) Тогда - ВозвращаемаяСтрока = ВозвращаемаяСтрока + Символы.ПС + "ТипДома=дом"; - КонецЕсли; - Если Не ПустаяСтрока(СтруктураАдреса.Корпус) Тогда - ВозвращаемаяСтрока = ВозвращаемаяСтрока + Символы.ПС + "ТипКорпуса=корпус"; - КонецЕсли; - Если Не ПустаяСтрока(СтруктураАдреса.Квартира) Тогда - ВозвращаемаяСтрока = ВозвращаемаяСтрока + Символы.ПС + "ТипКвартиры=кв."; - КонецЕсли; - Возврат ВозвращаемаяСтрока; -КонецФункции - -// Обновляет поля контактной информации из ТаблицыЗначений (например объекта другого вида справочника). -// -// Параметры: -// Источник - ТаблицаЗначений - таблица значений с контактной информацией. -// Приемник - УправляемаяФорма - форма объекта. куда надо передать контактную информацию. -// -Процедура ЗаполнитьКонтактнуюИнформацию(Источник, Приемник) Экспорт - КоллекцияПолейКонтактнойИнформации = Приемник.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; - - Для Каждого ЭлементКоллекцияПолейКонтактнойИнформации Из КоллекцияПолейКонтактнойИнформации Цикл - - СтрокаВКИ = Источник.Найти(ЭлементКоллекцияПолейКонтактнойИнформации.Вид, "Вид"); - Если СтрокаВКИ <> Неопределено Тогда - Приемник[ЭлементКоллекцияПолейКонтактнойИнформации.ИмяРеквизита] = СтрокаВКИ.Представление; - ЭлементКоллекцияПолейКонтактнойИнформации.ЗначенияПолей = УправлениеКонтактнойИнформациейКлиентСервер.ПреобразоватьСтрокуВСписокПолей(СтрокаВКИ.ЗначенияПолей); - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -// Возвращает пустую структура адреса. -// -// Возвращаемое значение: -// Структура - описание адреса, ключи - имена полей, значения поля. -// -Функция ПолучитьПустуюСтруктуруАдреса() Экспорт - - Возврат УправлениеКонтактнойИнформациейКлиентСервер.СтруктураПолейАдреса(); - -КонецФункции - -// Получить значения поля адреса. -// -// Параметры: -// СтрокаЗначенийПолей - Строка - значения полей адреса. -// ИмяПоля - Строка - имя поля. Например, "Район". -// -// Возвращаемое значение: -// Строка - значение поля. -// -Функция ПолучитьЗначениеПоляАдреса(СтрокаЗначенийПолей, ИмяПоля) Экспорт - - ПозицияПоля = СтрНайти(СтрокаЗначенийПолей, ИмяПоля); - Значение = ""; - Если ПозицияПоля <> 0 Тогда - ЗначенияПолей = Прав(СтрокаЗначенийПолей, СтрДлина(СтрокаЗначенийПолей) - ПозицияПоля - СтрДлина(ИмяПоля)); - ПозицияПС = СтрНайти(ЗначенияПолей, Символы.ПС); - Значение = Сред(ЗначенияПолей, 0 ,ПозицияПС - 1); - КонецЕсли; - Возврат Значение; - -КонецФункции - -// Получает значения поля адреса. -// -// Параметры: -// СтрокаЗначенийПолей - Строка - строка значений полей. -// ИмяПоля - Строка - имя поля. -// -// Возвращаемое значение - Строка - значение контактной информации. -// -Функция ПолучитьЗначениеКонтактнойИнформации(СтрокаЗначенийПолей, ИмяПоля) Экспорт - - ПозицияПоля = СтрНайти(СтрокаЗначенийПолей, ИмяПоля); - Значение = ""; - Если ПозицияПоля <> 0 Тогда - ЗначенияПолей = Прав(СтрокаЗначенийПолей, СтрДлина(СтрокаЗначенийПолей) - ПозицияПоля - СтрДлина(ИмяПоля)); - ПозицияПС = СтрНайти(ЗначенияПолей, Символы.ПС); - Значение = Сред(ЗначенияПолей, 0 , ПозицияПС - 1); - КонецЕсли; - - Возврат Значение; - -КонецФункции - // Возвращает список значений Функция ДоступныеДляКопированияАдреса(Знач ЗначенияПолейДляАнализа, Знач ВидАдреса) Экспорт @@ -1819,7 +2012,10 @@ КонецЕсли; Иначе - ВызватьИсключение НСтр("ru = 'Ошибка десериализации контактной информации, не указан ожидаемый тип'"); + + ТекстОшибки = НСтр("ru = 'Сведения о виде контактной информации %1 были повреждены или некорректно заполнены, + |т.к. обязательное поле тип не заполнено.'"); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ?(ЗначениеЗаполнено(ОжидаемыйВид), """" + ОжидаемыйВид.Наименование + """", "")); КонецЕсли; Возврат Результат; @@ -1829,7 +2025,7 @@ // // Параметры: // Текст - Строка - XML -// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации, Структура +// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации, Структура. // // Возвращаемое значение: // ОбъектXDTO - контактная информация. @@ -2047,7 +2243,7 @@ Классификатор = Справочники.СтраныМира.ТаблицаКлассификатора(); Для каждого ЭлементАдреса Из ДанныеАдреса Цикл - Индекс = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ЭлементАдреса.Наименование); + Индекс = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ЭлементАдреса.Наименование); Если Индекс <> Неопределено И Индекс >= 100000 И Индекс < 1000000 Тогда ЭлементАдреса.Уровень = -1; Иначе @@ -2115,7 +2311,7 @@ КонецПроцедуры // Установка глубокого свойства объекта. -Процедура УстановитьСвойствоПоXPath(ОбъектXTDO, XPath, Значение) Экспорт +Процедура УстановитьСвойствоПоXPath(ОбъектXTDO, XPath, Значение) // Переносов строки в XPath не ожидаем. СтрокаСвойств = СтрЗаменить(СтрЗаменить(XPath, "/", Символы.ПС), Символы.ПС + Символы.ПС, "/"); @@ -2240,7 +2436,7 @@ // Возвращаемое значение: // ОбъектXDTO - контактной информации. // -Функция ДесериализацияПрочейКонтактнойИнформации(ЗначенияПолей, Представление = "", ОжидаемыйТип = Неопределено) Экспорт +Функция ДесериализацияПрочейКонтактнойИнформации(ЗначенияПолей, Представление = "", ОжидаемыйТип = Неопределено) Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначенияПолей) Тогда // Общий формат контактной информации. @@ -2450,7 +2646,7 @@ // Возвращает значения уровней 90(дополнительный элемент) и 91(подчиненный) из адреса. // -Функция ЗначениеДополнительныхЭлементов(Знач XDTOАдрес) Экспорт +Функция ЗначениеДополнительныхЭлементов(Знач XDTOАдрес) Результат = Новый Структура("ДополнительныйЭлемент, ПодчиненныйЭлемент"); @@ -2515,7 +2711,7 @@ // // Возвращаемое значение: // Строка - значение элемента. -Функция ДополнительныйЭлементАдреса(XDTOАдрес, XPathЭлемента) Экспорт +Функция ДополнительныйЭлементАдреса(XDTOАдрес, XPathЭлемента) АдресРФ = РоссийскийАдрес(XDTOАдрес); Если АдресРФ = Неопределено Тогда @@ -2620,7 +2816,7 @@ // Возвращаемое значение: // Строка - новое значение. // -Функция РайонАдреса(XDTOАдрес, НовоеЗначение = Неопределено) Экспорт +Функция РайонАдреса(XDTOАдрес, НовоеЗначение = Неопределено) Если НовоеЗначение = Неопределено Тогда // Чтение @@ -2749,7 +2945,7 @@ Районы = Новый Массив(АдресРФ.СвРайМО.СвМО.МунОбр2, АдресРФ.СвРайМО.СвМО.МунОбр1); Район = УправлениеКонтактнойИнформациейКлиентСервер.СформироватьПолноеНаименование(Районы); Иначе - Район = "";; + Район = ""; КонецЕсли; Адрес = Новый Массив; @@ -2803,7 +2999,7 @@ // Формирует представление для адреса по правилу: // 1) Страна, если надо. // 2) Индекс, субъект рф, округ, район, город, внутригородской район, населенный пункт, улица. -// 3) Здания, помещения +// 3) Здания, помещения. // Функция ПредставлениеАдреса(Знач XDTOАдрес, Знач ВидИнформации) Экспорт @@ -3058,7 +3254,7 @@ // ** ИмяПоля - внутренний идентификатор ошибочного поля. // ** Сообщение - подробный текст ошибки для поля. // -Функция ОбщиеГруппыОшибокЗаполненияАдреса(Знач ДанныеАдреса, Знач ВидИнформации) Экспорт +Функция ОбщиеГруппыОшибокЗаполненияАдреса(Знач ДанныеАдреса, Знач ВидИнформации) Результат = Новый Массив; Если ТипЗнч(ДанныеАдреса) = Тип("ОбъектXDTO") Тогда @@ -3150,7 +3346,7 @@ // 3) Регион, Район, Город, НаселенныйПункт, Улица должны: // - иметь сокращение // - не длинней 50 символов - // - только кириллица + // - только кириллица. ДопустимоКромеКириллицы = "/,-. 0123456789_N"; @@ -3347,7 +3543,11 @@ Если ВРег(СокрЛП(АдресРФ.СубъектРФ)) = НСтр("ru = 'МОСКВА Г'") И ВРег(СокрЛП(АдресРФ.Город)) = НСтр("ru = 'ЗЕЛЕНОГРАД Г'") Тогда Результат = Истина; КонецЕсли; - + + Если ВРег(СокрЛП(АдресРФ.СубъектРФ)) = НСтр("ru = 'САМАРСКАЯ ОБЛ'") И ВРег(СокрЛП(АдресРФ.Город)) = НСтр("ru = 'САМАРА Г'") Тогда + Результат = Истина; + КонецЕсли; + Возврат Результат; КонецФункции @@ -3371,7 +3571,7 @@ КонецФункции // Возвращает массив наименований регионов - городов федерального значения. -Функция НазванияГородовФедеральногоЗначения() Экспорт +Функция НазванияГородовФедеральногоЗначения() Результат = Новый Массив; Результат.Добавить("МОСКВА Г"); @@ -3462,7 +3662,7 @@ // Обновляет агрегатное поле ВидДляСписка контактной информацию у объекта. // // Параметры: -// Объект - СправочникОбъект - Объект с табличной часть КонтактнаяИнформация +// Объект - СправочникОбъект - Объект с табличной часть КонтактнаяИнформация. // Процедура ОбновитьКонтактнуюИнформациюДляСписковДляОбъекта(Объект) Экспорт @@ -3472,27 +3672,66 @@ Возврат; КонецЕсли; - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | КонтактнаяИнформация.Представление КАК Представление, - | КонтактнаяИнформация.Вид КАК Вид - |ПОМЕСТИТЬ КонтактнаяИнформация - |ИЗ - | &КонтактнаяИнформация КАК КонтактнаяИнформация - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | КонтактнаяИнформация.Представление КАК Представление, - | КонтактнаяИнформация.Вид КАК Вид, - | КОЛИЧЕСТВО(КонтактнаяИнформация.Вид) КАК Количество - |ИЗ - | КонтактнаяИнформация КАК КонтактнаяИнформация - | - |СГРУППИРОВАТЬ ПО - | КонтактнаяИнформация.Вид, - | КонтактнаяИнформация.Представление ИТОГИ ПО Вид"; + Индекс = КонтактнаяИнформация.Количество() - 1; + Пока Индекс >= 0 Цикл + Если НЕ ЗначениеЗаполнено(КонтактнаяИнформация[Индекс].Вид) Тогда + КонтактнаяИнформация.Удалить(Индекс); + КонецЕсли; + Индекс = Индекс -1; + КонецЦикла; + + КолонкаДействуетСОтсутствует = (Объект.Метаданные().ТабличныеЧасти.КонтактнаяИнформация.Реквизиты.Найти("ДействуетС") = Неопределено); + + Запрос = Новый Запрос("ВЫБРАТЬ + | КонтактнаяИнформация.Представление КАК Представление, + | КонтактнаяИнформация.Вид КАК Вид" + ?(КолонкаДействуетСОтсутствует, "", ", КонтактнаяИнформация.ДействуетС КАК ДействуетС") + " + |ПОМЕСТИТЬ КонтактнаяИнформация + |ИЗ + | &КонтактнаяИнформация КАК КонтактнаяИнформация + |;"); + + Если КолонкаДействуетСОтсутствует Тогда + Запрос.Текст = Запрос.Текст + "ВЫБРАТЬ + | КонтактнаяИнформация.Представление КАК Представление, + | КонтактнаяИнформация.Вид КАК Вид, + | КОЛИЧЕСТВО(КонтактнаяИнформация.Вид) КАК Количество + |ИЗ + | КонтактнаяИнформация КАК КонтактнаяИнформация + | + |СГРУППИРОВАТЬ ПО + | КонтактнаяИнформация.Вид, + | КонтактнаяИнформация.Представление ИТОГИ ПО Вид"; + Иначе + Запрос.Текст = Запрос.Текст + "ВЫБРАТЬ + | КонтактнаяИнформация.Вид КАК Вид, + | МАКСИМУМ(КонтактнаяИнформация.ДействуетС) КАК ДействуетС + |ПОМЕСТИТЬ АктуальнаяКонтактнаяИнформация + |ИЗ + | КонтактнаяИнформация КАК КонтактнаяИнформация + | + |СГРУППИРОВАТЬ ПО + | КонтактнаяИнформация.Вид + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | КонтактнаяИнформация.Представление КАК Представление, + | КонтактнаяИнформация.Вид КАК Вид, + | КонтактнаяИнформация.ДействуетС КАК ДействуетС, + | КОЛИЧЕСТВО(КонтактнаяИнформация.Вид) КАК Количество + |ИЗ + | АктуальнаяКонтактнаяИнформация КАК АктуальнаяКонтактнаяИнформация + | ЛЕВОЕ СОЕДИНЕНИЕ КонтактнаяИнформация КАК КонтактнаяИнформация + | ПО АктуальнаяКонтактнаяИнформация.ДействуетС = КонтактнаяИнформация.ДействуетС + | И АктуальнаяКонтактнаяИнформация.Вид = КонтактнаяИнформация.Вид + | + |СГРУППИРОВАТЬ ПО + | КонтактнаяИнформация.Вид, + | КонтактнаяИнформация.Представление, + | КонтактнаяИнформация.ДействуетС + |ИТОГИ ПО + | Вид, ДействуетС"; + КонецЕсли; Запрос.УстановитьПараметр("КонтактнаяИнформация", КонтактнаяИнформация); РезультатЗапроса = Запрос.Выполнить(); @@ -3501,8 +3740,23 @@ Пока ВыборкаВид.Следующий() Цикл ВыборкаДетальныеЗаписи = ВыборкаВид.Выбрать(); Если ВыборкаВид.Количество = 1 Тогда - СтрокаТаблиц = КонтактнаяИнформация.Найти(ВыборкаВид.Вид, "Вид"); - СтрокаТаблиц.ВидДляСписка = ВыборкаВид.Вид; + Если КолонкаДействуетСОтсутствует Тогда + СтрокаТаблиц = КонтактнаяИнформация.Найти(ВыборкаВид.Вид, "Вид"); + СтрокаТаблиц.ВидДляСписка = ВыборкаВид.Вид; + Иначе + ДействуетС = Дата(1,1,1); + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Если ЗначениеЗаполнено(ВыборкаВид.ДействуетС) Тогда + ДействуетС = ВыборкаВид.ДействуетС; + КонецЕсли; + КонецЦикла; + Для каждого СтрокаСКонтактнойИнформацией Из КонтактнаяИнформация Цикл + Если СтрокаСКонтактнойИнформацией.Вид = ВыборкаВид.Вид + И СтрокаСКонтактнойИнформацией.ДействуетС = ДействуетС Тогда + СтрокаСКонтактнойИнформацией.ВидДляСписка = ВыборкаВид.Вид; + КонецЕсли; + КонецЦикла; + КонецЕсли; ИначеЕсли ВыборкаВид.Количество > 1 Тогда СтрокаТаблиц = КонтактнаяИнформация.Добавить(); СтрокаТаблиц.ВидДляСписка = ВыборкаВид.Вид; @@ -3642,6 +3896,49 @@ КонецФункции +// Проверяет корректность параметров вида контактной информации. +// +// Параметры: +// ВидКонтактнойИнформации - СправочникСсылка.ВидыКонтактнойИнформации - Проверяемый вид контактной информации. +// +// Возвращаемое значение: +// Структура - Результат проверки вида контактной информации +// * ЕстьОшибки - Булево - признак наличия ошибок в виде контактной информации. +// * ТекстОшибки - Строка - информация об ошибке. +Функция ПроверитьПараметрыВидаКонтактнойИнформации(ВидКонтактнойИнформации) Экспорт + + Результат = Новый Структура("ЕстьОшибки, ТекстОшибки", Ложь, ""); + + Если НЕ ЗначениеЗаполнено(ВидКонтактнойИнформации.Тип) Тогда + Результат.ЕстьОшибки = Истина; + Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не заполонено обязательное поле тип у вида контактной информации ""%1"".'"), + Строка(ВидКонтактнойИнформации.Наименование)); + Возврат Результат; + КонецЕсли; + + Разделитель = ""; + Если ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда + + Если НЕ ВидКонтактнойИнформации.АдресТолькоРоссийский + И (ВидКонтактнойИнформации.ПроверятьКорректность + ИЛИ ВидКонтактнойИнформации.СкрыватьНеактуальныеАдреса) Тогда + Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Некорректно заполнены настройки проверки адреса у вида контактной информации %1. + | Проверка корректности адреса доступна только для российских адресов'"), Строка(ВидКонтактнойИнформации.Наименование)); + Разделитель = Символы.ПС; + КонецЕсли; + + Если ВидКонтактнойИнформации.РазрешитьВводНесколькихЗначений + И ВидКонтактнойИнформации.ХранитьИсториюИзменений Тогда + Результат.ТекстОшибки = Результат.ТекстОшибки + Разделитель + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Некорректно заполнены настройки адреса у вида контактной информации %1. + | Не допускается возможность ввода нескольких значений контактной информации при включенной истории хранения изменений.'"), + Строка(ВидКонтактнойИнформации.Наименование)); + КонецЕсли; + КонецЕсли; + + Результат.ЕстьОшибки = ЗначениеЗаполнено(Результат.ТекстОшибки); + Возврат Результат; + +КонецФункции #КонецОбласти @@ -3723,7 +4020,7 @@ // Возвращаемое значение: // СписокЗначений // -Функция АдресВСтарыйСписокПолей(XDTOАдрес, РасширенныйСоставПолей = Истина) Экспорт +Функция АдресВСтарыйСписокПолей(XDTOАдрес, РасширенныйСоставПолей = Истина) Список = Новый СписокЗначений; ПространствоИмен = УправлениеКонтактнойИнформациейКлиентСервер.ПространствоИмен(); @@ -3773,14 +4070,36 @@ ДобавитьЗначение(Список, "ГородСокращение", УправлениеКонтактнойИнформациейКлиентСервер.Сокращение(АдресРФ.Город)); КонецЕсли; - ДобавитьЗначение(Список, "НаселенныйПункт", АдресРФ.НаселПункт); - Если РасширенныйСоставПолей Тогда - ДобавитьЗначение(Список, "НаселенныйПунктСокращение", УправлениеКонтактнойИнформациейКлиентСервер.Сокращение(АдресРФ.НаселПункт)); + // преобразование ФИАС в КЛАДР + НаселПункт = АдресРФ.НаселПункт; + Улица = АдресРФ.Улица; + ДополнительныйЭлементАдреса = НайтиДополнительныйЭлементАдреса(АдресРФ); + ПодчиненныйЭлементЭлементАдреса = ДополнительныйЭлементАдреса(АдресРФ, + УправлениеКонтактнойИнформациейКлиентСервер.XPathДополнительногоОбъектаАдресации(91)); + + ЕстьУлица = ЗначениеЗаполнено(Улица); + ЕстьДополнительныйЭлементАдреса = ЗначениеЗаполнено(ДополнительныйЭлементАдреса); + ЕстьПодчиненныйЭлементЭлементАдреса = ЗначениеЗаполнено(ПодчиненныйЭлементЭлементАдреса); + + Если ЕстьДополнительныйЭлементАдреса Тогда + Если ЕстьПодчиненныйЭлементЭлементАдреса Тогда + НаселПункт = ДополнительныйЭлементАдреса; + Улица = ПодчиненныйЭлементЭлементАдреса; + Иначе + Улица = ДополнительныйЭлементАдреса; + КонецЕсли; + ИначеЕсли ЕстьПодчиненныйЭлементЭлементАдреса Тогда + Улица = ПодчиненныйЭлементЭлементАдреса; КонецЕсли; - ДобавитьЗначение(Список, "Улица", АдресРФ.Улица); + ДобавитьЗначение(Список, "НаселенныйПункт", НаселПункт); Если РасширенныйСоставПолей Тогда - ДобавитьЗначение(Список, "УлицаСокращение", УправлениеКонтактнойИнформациейКлиентСервер.Сокращение(АдресРФ.Улица)); + ДобавитьЗначение(Список, "НаселенныйПунктСокращение", УправлениеКонтактнойИнформациейКлиентСервер.Сокращение(НаселПункт)); + КонецЕсли; + + ДобавитьЗначение(Список, "Улица", Улица); + Если РасширенныйСоставПолей Тогда + ДобавитьЗначение(Список, "УлицаСокращение", УправлениеКонтактнойИнформациейКлиентСервер.Сокращение(Улица)); КонецЕсли; // Дом и корпус @@ -3799,24 +4118,46 @@ ПараметрыОбъекта = ЗначениеЗданияИлиПомещения(ЗданияИПомещения.Здания, ВариантыДанныхСтроение(), РасширенныйСоставПолей); Если ПараметрыОбъекта.Количество() = 0 Тогда - ДобавитьЗначение(Список, "ТипКорпуса", ""); - ДобавитьЗначение(Список, "Корпус", ""); + ДобавитьЗначение(Список, "ТипКорпуса", ""); + ДобавитьЗначение(Список, "Корпус", ""); + ИначеЕсли ПараметрыОбъекта.Количество() = 1 Тогда + СтрокаОбъекта = ПараметрыОбъекта[0]; + ДобавитьЗначение(Список, "ТипКорпуса", СтрокаОбъекта.Тип, РасширенныйСоставПолей); + ДобавитьЗначение(Список, "Корпус", СтрокаОбъекта.Значение, РасширенныйСоставПолей); Иначе + ТипКорпуса = ПараметрыОбъекта[0].Тип; + ЗначениеКорпуса = ""; + Разделитель = ""; + Сокращения = УправлениеКонтактнойИнформациейКлиентСервер.СокращенияОбъектовАдресацииАдресаРФ(); Для Каждого СтрокаОбъекта Из ПараметрыОбъекта Цикл - ДобавитьЗначение(Список, "ТипКорпуса", СтрокаОбъекта.Тип, РасширенныйСоставПолей); - ДобавитьЗначение(Список, "Корпус", СтрокаОбъекта.Значение, РасширенныйСоставПолей); + ИмяЗдания = ?(ЗначениеЗаполнено(Сокращения[СтрокаОбъекта.Тип]), Сокращения[СтрокаОбъекта.Тип], СтрокаОбъекта.Тип); + ЗначениеКорпуса = ЗначениеКорпуса + Разделитель + ИмяЗдания + " " + СтрокаОбъекта.Значение; + Разделитель = ", " ; КонецЦикла; + ДобавитьЗначение(Список, "ТипКорпуса", ТипКорпуса, РасширенныйСоставПолей); + ДобавитьЗначение(Список, "Корпус", ЗначениеКорпуса , РасширенныйСоставПолей); КонецЕсли; ПараметрыОбъекта = ЗначениеЗданияИлиПомещения(ЗданияИПомещения.Помещения, ВариантыДанныхПомещение(), РасширенныйСоставПолей); Если ПараметрыОбъекта.Количество() = 0 Тогда ДобавитьЗначение(Список, "ТипКвартиры", ""); ДобавитьЗначение(Список, "Квартира", ""); + ИначеЕсли ПараметрыОбъекта.Количество() = 1 Тогда + СтрокаОбъекта = ПараметрыОбъекта[0]; + ДобавитьЗначение(Список, "ТипКвартиры", СтрокаОбъекта.Тип, РасширенныйСоставПолей); + ДобавитьЗначение(Список, "Квартира", СтрокаОбъекта.Значение, РасширенныйСоставПолей); Иначе + ТипПомещения = ПараметрыОбъекта[0].Тип; + ЗначениеПомещения = ""; + Разделитель = ""; + Сокращения = УправлениеКонтактнойИнформациейКлиентСервер.СокращенияОбъектовАдресацииАдресаРФ(); Для Каждого СтрокаОбъекта Из ПараметрыОбъекта Цикл - ДобавитьЗначение(Список, "ТипКвартиры", СтрокаОбъекта.Тип, РасширенныйСоставПолей); - ДобавитьЗначение(Список, "Квартира", СтрокаОбъекта.Значение, РасширенныйСоставПолей); + ИмяПомещения = ?(ЗначениеЗаполнено(Сокращения[СтрокаОбъекта.Тип]), Сокращения[СтрокаОбъекта.Тип], СтрокаОбъекта.Тип); + ЗначениеПомещения = ЗначениеПомещения + Разделитель + ИмяПомещения + " " + СтрокаОбъекта.Значение; + Разделитель = ", " ; КонецЦикла; + ДобавитьЗначение(Список, "ТипКвартиры", ТипПомещения, РасширенныйСоставПолей); + ДобавитьЗначение(Список, "Квартира", ЗначениеПомещения, РасширенныйСоставПолей); КонецЕсли; Возврат Список; @@ -4214,6 +4555,18 @@ Возврат АдресРФ.СвРайМО; КонецФункции +Процедура ЗаменитьВСтруктуреНеопределеноНаПустуюСтроку(Результат) + + Для каждого КлючЗначение Из Результат Цикл + Если ТипЗнч(КлючЗначение.Значение) = Тип("Структура")Тогда + ЗаменитьВСтруктуреНеопределеноНаПустуюСтроку(Результат[КлючЗначение.Ключ]); + ИначеЕсли КлючЗначение.Значение = Неопределено Тогда + Результат[КлючЗначение.Ключ] = ""; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + Функция ДесериализацияТелефонаФакса(ЗначенияПолей, Представление = "", ОжидаемыйТип = Неопределено) Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(ЗначенияПолей) Тогда @@ -4473,22 +4826,6 @@ #Область СлужебныеПроцедурыИФункцииПоРаботеСXML -// Сравнивает два XML и возвращает результат в виде таблицы значений. -// -// Параметры: -// Текст1 - Строка - XML данные. -// Текст1 - Строка - XML данные. -// -// Возвращаемое значение: -// ТаблицаЗначений с колонками: -// * Путь - Строка - XPath путь к месту различия. -// * Значение1 - Строка - значение в XML из параметра Текст1. -// * Значение2 - Строка - значение в XML из параметра Текст2. -// -Функция РазличияXML(Знач Текст1, Знач Текст2) Экспорт - Возврат ЗначениеИзСтрокиXML( XSLT_ТаблицаЗначенийРазличияXML(Текст1, Текст2) ); -КонецФункции - // Возвращает соответствующее значение перечисления "ТипыКонтактнойИнформации" по строке XML. // // Параметры: @@ -4527,83 +4864,6 @@ Возврат Неопределено; КонецФункции -// Преобразует строку пар ключ = значение (см старый формат адреса) в структуру. -// -// Параметры: -// Текст - Строка - пары ключ = значение, разделенные переносом строки. -// -// Возвращаемое значение: -// Структура - результат преобразования. -// -Функция СтрокаКлючЗначениеВСтруктуру(Знач Текст) Экспорт - Возврат ЗначениеИзСтрокиXML( XSLT_СтрокаКлючЗначениеВСтруктуру(Текст) ); -КонецФункции - -// Преобразует строку пар ключ-значение (см старый формат адреса) в список значений. -// В возвращаемом списке значений представление - исходный ключ, значение - исходное значение. -// -// Параметры: -// Текст - Строка - пары ключ = значение, разделенные переносом строки. -// УникальностьПолей - Булево - флаг того, что из неуникальных ключей будет оставлен только последний. -// -// Возвращаемое значение: -// СписокЗначений - результат преобразования. -// -Функция СтрокаКлючЗначениеВСписокЗначений(Знач Текст, Знач УникальностьПолей = Истина) Экспорт - Если УникальностьПолей Тогда - Возврат ЗначениеИзСтрокиXML( XSLT_УникальныеПоПредставлениюВСписке(XSLT_СтрокаКлючЗначениеВСписокЗначений(Текст)) ); - КонецЕсли; - Возврат ЗначениеИзСтрокиXML( XSLT_СтрокаКлючЗначениеВСписокЗначений(Текст) ); -КонецФункции - -// Преобразует структуру в строку пар ключ-значение, разделенный запятыми. -// -// Параметры: -// Структура - Структура - исходная структура. -// -// Возвращаемое значение: -// Строка - результат преобразования. -// -Функция СтруктураВСтрокуКлючЗначение(Знач Структура) Экспорт - Возврат XSLT_СтруктураВСтрокуКлючЗначение( ЗначениеВСтрокуXML(Структура) ); -КонецФункции - -// Преобразует список значений в строку пар ключ-значение, разделенный запятыми. -// -// Параметры: -// Список - СписокЗначений - исходный данные. -// -// Возвращаемое значение: -// Строка - результат преобразования. -// -Функция СписокЗначенийВСтрокуКлючЗначение(Знач Список) Экспорт - Возврат XSLT_СписокЗначенийВСтрокуКлючЗначение( ЗначениеВСтрокуXML(Список) ); -КонецФункции - -// Преобразует структуру в список значений. Ключ преобразуется в представление. -// -// Параметры: -// Структура - Структура - исходная структура. -// -// Возвращаемое значение: -// СписокЗначений - результат преобразования. -// -Функция СтруктураВСписокЗначений(Знач Структура) Экспорт - Возврат ЗначениеИзСтрокиXML( XSLT_СтруктураВСписокЗначений( ЗначениеВСтрокуXML(Структура) ) ); -КонецФункции - -// Преобразует список значений в структуру. Представление преобразуется в ключ. -// -// Параметры: -// Список - СписокЗначений - исходные данные. -// -// Возвращаемое значение: -// Структура - результат преобразования. -// -Функция СписокЗначенийВСтруктуру(Знач Список) Экспорт - Возврат ЗначениеИзСтрокиXML( XSLT_СписокЗначенийВСтруктуру( ЗначениеВСтрокуXML(Список) ) ); -КонецФункции - // Сравнивает два экземпляра контактной информации. // // Параметры: @@ -4753,6 +5013,9 @@ ИначеЕсли ТипКонтактнойИнформации = ВсеТипы.Другое Тогда Результат.ДанныеXML = XSLT_СтруктураВДругое(СтрокаXMLСтруктуры, Данные.Представление, Комментарий); + ИначеЕсли ТипКонтактнойИнформации = ВсеТипы.Skype Тогда + Результат.ДанныеXML = XSLT_СтруктураВДругое(СтрокаXMLСтруктуры, Данные.Представление, Комментарий); + Иначе ВызватьИсключение НСтр("ru = 'Ошибка параметров преобразования, не определен тип контактной информации'"); @@ -4765,27 +5028,12 @@ #Область СлужебныеПроцедурыИФункцииПоРаботеСXSLT -// Преобразует список значений, оставляя из него только последние значения пар ключ-значение по ключу-представлению. -// -// Параметры: -// Текст - Строка - сериализованный список значений. -// -// Возвращаемое значение: -// Строка - XML сериализованного списка значений. -// -Функция XSLT_УникальныеПоПредставлениюВСписке(Знач Текст) - - Преобразователь = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.XSLT_УникальныеПоПредставлениюВСписке(); - Возврат Преобразователь.ПреобразоватьИзСтроки(Текст); - -КонецФункции - // Производит сравнение двух строк XML. // Проверяются только строки и атрибуты, без пробельных, CDATA и т.п. Порядок важен. // // Параметры: // Текст1 - Строка - Строка XML -// Текст2 - Строка - Строка XML +// Текст2 - Строка - Строка XML. // // Возвращаемое значение: // Строка - сериализованый ValueTable (http://v8.1c.ru/8.1/data/core), в котором три колонки: @@ -4825,52 +5073,6 @@ КонецФункции -// Преобразует текст с парами Ключ = Значение, разделенных переносами строк (см формат адреса) в XML. -// В случае повторных ключей все включаются в результат. -// -// Параметры: -// Текст - Строка - пары Ключ = Значение. -// -// Возвращаемое значение: -// Строка - XML сериализованного списка значений. -// -Функция XSLT_СтрокаКлючЗначениеВСписокЗначений(Знач Текст) - - Преобразователь = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.XSLT_СтрокаКлючЗначениеВСписокЗначений(); - Возврат Преобразователь.ПреобразоватьИзСтроки(XSLT_УзелСтрокиПараметра(Текст)); - -КонецФункции - -// Преобразует список значений в строку пар ключ = значение, разделенных переносом строки. -// -// Параметры: -// Текст - Строка - сериализованный список значений. -// -// Возвращаемое значение: -// Строка - результат преобразования. -// -Функция XSLT_СписокЗначенийВСтрокуКлючЗначение(Знач Текст) - - Преобразователь = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.XSLT_СписокЗначенийВСтрокуКлючЗначение(); - Возврат Преобразователь.ПреобразоватьИзСтроки(Текст); - -КонецФункции - -// Преобразует структуру в строку пар ключ = значение, разделенных переносом строки. -// -// Параметры: -// Текст - Строка - сериализованная структура. -// -// Возвращаемое значение: -// Строка - результат преобразования. -// -Функция XSLT_СтруктураВСтрокуКлючЗначение(Знач Текст) - - Преобразователь = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.XSLT_СтруктураВСтрокуКлючЗначение(); - Возврат Преобразователь.ПреобразоватьИзСтроки(Текст); - -КонецФункции - // Преобразует список значений в структуру. Представление преобразуется в ключ. // // Параметры: @@ -4886,21 +5088,6 @@ КонецФункции -// Преобразует структуру в список значений. Ключ преобразуется в представление. -// -// Параметры: -// Текст - Строка - сериализованная структура. -// -// Возвращаемое значение: -// Строка - результат преобразования. -// -Функция XSLT_СтруктураВСписокЗначений(Текст) - - Преобразователь = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.XSLT_СтруктураВСписокЗначений(); - Возврат Преобразователь.ПреобразоватьИзСтроки(Текст); - -КонецФункции - // Преобразует соответствие в структуру. Ключ преобразуется в ключ, значение - в значение. // // Параметры: @@ -5287,6 +5474,62 @@ КонецФункции +#КонецОбласти + +#Область ОбновлениеИнформационнойБазы + +// Регистрирует к обработке страны мира. +// +Функция СписокСтранКОбработке() + + ПредыдущиеЗначенияОКСМ = Новый ТаблицаЗначений; + ПредыдущиеЗначенияОКСМ.Колонки.Добавить("Код", ОбщегоНазначения.ОписаниеТипаСтрока(3)); + ПредыдущиеЗначенияОКСМ.Колонки.Добавить("Наименование", ОбщегоНазначения.ОписаниеТипаСтрока(60)); + ПредыдущиеЗначенияОКСМ.Колонки.Добавить("КодАльфа2", ОбщегоНазначения.ОписаниеТипаСтрока(2)); + ПредыдущиеЗначенияОКСМ.Колонки.Добавить("КодАльфа3", ОбщегоНазначения.ОписаниеТипаСтрока(3)); + ПредыдущиеЗначенияОКСМ.Колонки.Добавить("НаименованиеПолное", ОбщегоНазначения.ОписаниеТипаСтрока(100)); + + НоваяСтрока = ПредыдущиеЗначенияОКСМ.Добавить(); + НоваяСтрока.Код = "203"; + НоваяСтрока.Наименование = "ЧЕШСКАЯ РЕСПУБЛИКА"; + НоваяСтрока.КодАльфа2 = "CZ"; + НоваяСтрока.КодАльфа3 = "CZE"; + + НоваяСтрока = ПредыдущиеЗначенияОКСМ.Добавить(); + НоваяСтрока.Код = "270"; + НоваяСтрока.Наименование = "ГАМБИЯ"; + НоваяСтрока.КодАльфа2 = "GM"; + НоваяСтрока.КодАльфа3 = "GMB"; + НоваяСтрока.НаименованиеПолное = "Республика Гамбия"; + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | СписокСтран.Код КАК Код, + | СписокСтран.Наименование КАК Наименование, + | СписокСтран.КодАльфа2 КАК КодАльфа2, + | СписокСтран.КодАльфа3 КАК КодАльфа3, + | СписокСтран.НаименованиеПолное КАК НаименованиеПолное + |ПОМЕСТИТЬ СписокСтран + |ИЗ + | &СписокСтран КАК СписокСтран + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СтраныМира.Ссылка КАК Ссылка + |ИЗ + | СписокСтран КАК СписокСтран + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СтраныМира КАК СтраныМира + | ПО (СтраныМира.Код = СписокСтран.Код) + | И (СтраныМира.Наименование = СписокСтран.Наименование) + | И (СтраныМира.КодАльфа2 = СписокСтран.КодАльфа2) + | И (СтраныМира.КодАльфа3 = СписокСтран.КодАльфа3) + | И (СтраныМира.НаименованиеПолное = СписокСтран.НаименованиеПолное)"; + + Запрос.УстановитьПараметр("СписокСтран", ПредыдущиеЗначенияОКСМ); + Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + +КонецФункции #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl index e5691ed97..83dcc41df 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейСлужебныйПовтИсп/Module.bsl @@ -12,45 +12,12 @@ ЕстьКлассификатор = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор"); Если ЕстьКлассификатор И НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); - МодульАдресныйКлассификаторСлужебный.ПроверитьНачальноеЗаполнение(); + ЕстьКлассификатор = МодульАдресныйКлассификаторСлужебный.ПроверитьНачальноеЗаполнение(); КонецЕсли; Возврат ЕстьКлассификатор; КонецФункции -// Преобразование для списка значений, оставляя из него только последние значения пар ключ-значение. -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// -Функция XSLT_УникальныеПоПредставлениюВСписке() Экспорт - - Преобразователь = Новый ПреобразованиеXSL; - Преобразователь.ЗагрузитьИзСтроки(" - |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" - | xmlns:tns=""http://v8.1c.ru/8.1/data/core"" - |> - |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> - | - | <xsl:template match=""node() | @*""> - | <xsl:copy> - | <xsl:apply-templates select=""node() | @*"" /> - | </xsl:copy> - | </xsl:template> - | - | <xsl:template match=""//tns:ValueListType/tns:item""> - | <xsl:variable name=""presentation"" select=""string(tns:presentation)"" /> - | <xsl:if test=""0=count(following-sibling::tns:item[tns:presentation=$presentation])"" > - | <xsl:copy-of select=""."" /> - | </xsl:if> - | </xsl:template> - | - |</xsl:stylesheet> - |"); - - Возврат Преобразователь; -КонецФункции - // Преобразование для сравнения двух строк XML. // // Возвращаемое значение: @@ -298,150 +265,6 @@ Возврат Преобразователь; КонецФункции -// Преобразование для текста с парами Ключ=Значение, разделенных переносами строк (см формат адреса) в XML. -// В случае повторных ключей все включаются в результат. -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// -Функция XSLT_СтрокаКлючЗначениеВСписокЗначений() Экспорт - Преобразователь = Новый ПреобразованиеXSL; - Преобразователь.ЗагрузитьИзСтроки(" - |<xsl:stylesheet version=""1.0"" - | xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" - | xmlns:str=""http://exslt.org/strings"" - | extension-element-prefixes=""str"" - |> - |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> - |" + XSLT_ШаблоныСтроковыхФункций() + " - | - | <xsl:template match=""ExternalParamNode""> - | - | <xsl:variable name=""source""> - | <xsl:call-template name=""str-replace-all""> - | <xsl:with-param name=""str"" select=""."" /> - | <xsl:with-param name=""search-for"" select=""' '"" /> - | <xsl:with-param name=""replace-by"" select=""' '"" /> - | </xsl:call-template> - | </xsl:variable> - | - | <ValueListType xmlns=""http://v8.1c.ru/8.1/data/core"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:type=""ValueListType""> - | <valueType/> - | - | <xsl:for-each select=""str:tokenize($source, ' ')"" > - | <xsl:if test=""contains(., '=')""> - | - | <item> - | <value xsi:type=""xs:string""> - | <xsl:call-template name=""str-replace-all""> - | <xsl:with-param name=""str"" select=""substring-after(., '=')"" /> - | <xsl:with-param name=""search-for"" select=""' '"" /> - | <xsl:with-param name=""replace-by"" select=""' '"" /> - | </xsl:call-template> - | </value> - | <presentation> - | <xsl:call-template name=""str-trim-left""> - | <xsl:with-param name=""str"" select=""substring-before(., '=')"" /> - | </xsl:call-template> - | </presentation> - | </item> - | - | </xsl:if> - | </xsl:for-each> - | - | </ValueListType > - | - | </xsl:template> - | - |</xsl:stylesheet> - |"); - - Возврат Преобразователь; -КонецФункции - -// Преобразование для списка значений в строку пар ключ=значение, разделенных переносом строки. -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// -Функция XSLT_СписокЗначенийВСтрокуКлючЗначение() Экспорт - Преобразователь = Новый ПреобразованиеXSL; - Преобразователь.ЗагрузитьИзСтроки(" - |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" - | xmlns:tns=""http://v8.1c.ru/8.1/data/core"" - |> - |<xsl:output method=""text"" encoding=""utf-8""/> - |" + XSLT_ШаблоныСтроковыхФункций() + " - | - | <xsl:template match=""/""> - | <xsl:apply-templates select=""//tns:ValueListType/tns:item"" /> - | </xsl:template> - | - | <xsl:template match=""//tns:ValueListType/tns:item""> - | - | <xsl:call-template name=""str-trim-all""> - | <xsl:with-param name=""str"" select=""tns:presentation"" /> - | </xsl:call-template> - | <xsl:text/>=<xsl:text/> - | - | <xsl:call-template name=""str-replace-all""> - | <xsl:with-param name=""str"" select=""tns:value"" /> - | <xsl:with-param name=""search-for"" select=""' '"" /> - | <xsl:with-param name=""replace-by"" select=""' '"" /> - | </xsl:call-template> - | - | <xsl:if test=""position()!=last()""> - | <xsl:text/> - | <xsl:value-of select=""' '""/> - | <xsl:text/> - | </xsl:if> - | </xsl:template> - | - |</xsl:stylesheet> - |"); - Возврат Преобразователь; -КонецФункции - -// Преобразование для структуры в строку пар ключ=значение, разделенных переносом строки. -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// -Функция XSLT_СтруктураВСтрокуКлючЗначение() Экспорт - Преобразователь = Новый ПреобразованиеXSL; - Преобразователь.ЗагрузитьИзСтроки(" - |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" - | xmlns:tns=""http://v8.1c.ru/8.1/data/core"" - |> - |<xsl:output method=""text"" encoding=""utf-8""/> - |" + XSLT_ШаблоныСтроковыхФункций() + " - | - | <xsl:template match=""/""> - | <xsl:apply-templates select=""//tns:Structure/tns:Property"" /> - | </xsl:template> - | - | <xsl:template match=""//tns:Property""> - | - | <xsl:value-of select=""@name"" /> - | <xsl:text/>=<xsl:text/> - | - | <xsl:call-template name=""str-replace-all""> - | <xsl:with-param name=""str"" select=""tns:Value"" /> - | <xsl:with-param name=""search-for"" select=""' '"" /> - | <xsl:with-param name=""replace-by"" select=""' '"" /> - | </xsl:call-template> - | - | <xsl:if test=""position()!=last()""> - | <xsl:text/> - | <xsl:value-of select=""' '""/> - | <xsl:text/> - | </xsl:if> - | </xsl:template> - |</xsl:stylesheet> - |"); - Возврат Преобразователь; -КонецФункции - // Преобразование для списка значений в структуру. Представление преобразуется в ключ. // // Возвращаемое значение: @@ -487,45 +310,6 @@ Возврат Преобразователь; КонецФункции -// Преобразование для структуры в список значений. Ключ преобразуется в представление. -// -// Возвращаемое значение: -// ПреобразованиеXSL - подготовленный объект. -// -Функция XSLT_СтруктураВСписокЗначений() Экспорт - Преобразователь = Новый ПреобразованиеXSL; - Преобразователь.ЗагрузитьИзСтроки(" - |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" - | xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" - | xmlns:tns=""http://v8.1c.ru/8.1/data/core"" - | xmlns=""http://v8.1c.ru/8.1/data/core"" - |> - |<xsl:output method=""xml"" omit-xml-declaration=""yes"" indent=""yes"" encoding=""utf-8""/> - |" + XSLT_ШаблоныСтроковыхФункций() + " - | - | <xsl:template match=""/""> - | <ValueListType xmlns=""http://v8.1c.ru/8.1/data/core"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:type=""ValueListType""> - | <valueType/> - | <xsl:apply-templates select=""//tns:Structure/tns:Property"" /> - | </ValueListType> - | </xsl:template> - | - | <xsl:template match=""//tns:Property""> - | <item> - | <value xsi:type=""xs:string""> - | <xsl:value-of select=""tns:Value"" /> - | </value> - | <presentation> - | <xsl:value-of select=""@name"" /> - | </presentation> - | </item> - | </xsl:template> - | - |</xsl:stylesheet> - |"); - Возврат Преобразователь; -КонецФункции - // Преобразование для соответствия в структуру. Ключ преобразуется в ключ, значение - в значение. // // Возвращаемое значение: @@ -1020,7 +804,7 @@ // Возвращаемое значение: // ПреобразованиеXSL - подготовленный объект. // -Функция XSLT_СтруктураВТелефонФакс(Знач ИмяXDTOТипа) Экспорт +Функция XSLT_СтруктураВТелефонФакс(Знач ИмяXDTOТипа) Преобразователь = Новый ПреобразованиеXSL; Преобразователь.ЗагрузитьИзСтроки(" |<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" diff --git a/SSL/src/CommonModules/УправлениеПечатью/Module.bsl b/SSL/src/CommonModules/УправлениеПечатью/Module.bsl index 96e9a5c2d..6381b94ce 100644 --- a/SSL/src/CommonModules/УправлениеПечатью/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатью/Module.bsl @@ -416,7 +416,6 @@ Результат.Колонки.Добавить("ФорматСохранения"); // ТипФайлаТабличногоДокумента // настройки комплектов - // Запрет сохранения настроек пользователя. Результат.Колонки.Добавить("ПереопределитьПользовательскиеНастройкиКоличества", Новый ОписаниеТипов("Булево")); Результат.Колонки.Добавить("ДополнитьКомплектВнешнимиПечатнымиФормами", Новый ОписаниеТипов("Булево")); Результат.Колонки.Добавить("ФиксированныйКомплект", Новый ОписаниеТипов("Булево")); // запрет изменения комплекта @@ -494,7 +493,7 @@ МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ИмяМенеджераПечати); МакетыИДанные = МенеджерОбъекта.ПолучитьДанныеПечати(СоставДокументов, МассивИменМакетов); - МакетыИДанные.Вставить("ЛокальныйКаталогФайловПечати", ПолучитьЛокальныйКаталогФайловПечати()); + МакетыИДанные.Вставить("ЛокальныйКаталогФайловПечати", Неопределено); // Для обратной совместимости. Возврат МакетыИДанные; @@ -578,7 +577,13 @@ ДвоичныеДанныеДокумента.Записать(ИмяВременногоФайла); ТабличныйДокумент = Новый ТабличныйДокумент; ТабличныйДокумент.Прочитать(ИмяВременногоФайла); - Если БезопасныйРежим() = Ложь Тогда + + УстановленБезопасныйРежим = БезопасныйРежим(); + Если ТипЗнч(УстановленБезопасныйРежим) = Тип("Строка") Тогда + УстановленБезопасныйРежим = Истина; + КонецЕсли; + + Если Не УстановленБезопасныйРежим Тогда УдалитьФайлы(ИмяВременногоФайла); КонецЕсли; @@ -721,7 +726,7 @@ // 12 Инвестиции и страхование. // 13 Спорт и здоровье // 14 Благотворительные и общественные организации. -// 15 Прочие услуги +// 15 Прочие услуги. // // Возвращаемое значение: // Строка - строка данных в формате УФЭБС. @@ -919,6 +924,54 @@ Возврат Результат; КонецФункции +// Подготовить коллекцию печатных форм - таблицу значений используемые при формировании печатных форм. +// +Функция ПодготовитьКоллекциюПечатныхФорм(Знач ИменаМакетов) Экспорт + + Макеты = Новый ТаблицаЗначений; + Макеты.Колонки.Добавить("ИмяМакета"); + Макеты.Колонки.Добавить("ИмяВРЕГ"); + Макеты.Колонки.Добавить("СинонимМакета"); + Макеты.Колонки.Добавить("ТабличныйДокумент"); + Макеты.Колонки.Добавить("Экземпляров"); + Макеты.Колонки.Добавить("Картинка"); + Макеты.Колонки.Добавить("ПолныйПутьКМакету"); + Макеты.Колонки.Добавить("ИмяФайлаПечатнойФормы"); + + Если ТипЗнч(ИменаМакетов) = Тип("Строка") Тогда + ИменаМакетов = СтрРазделить(ИменаМакетов, ","); + КонецЕсли; + + Для Каждого ИмяМакета Из ИменаМакетов Цикл + Макет = Макеты.Найти(ИмяМакета, "ИмяМакета"); + Если Макет = Неопределено Тогда + Макет = Макеты.Добавить(); + Макет.ИмяМакета = ИмяМакета; + Макет.ИмяВРЕГ = ВРег(ИмяМакета); + Макет.Экземпляров = 1; + Иначе + Макет.Экземпляров = Макет.Экземпляров + 1; + КонецЕсли; + КонецЦикла; + + Возврат Макеты; + +КонецФункции + +// Подготовить структуру параметров вывода для менеджера объекта формирующего печатные формы. +// +Функция ПодготовитьСтруктуруПараметровВывода() Экспорт + + ПараметрыВывода = Новый Структура; + ПараметрыВывода.Вставить("ДоступнаПечатьПоКомплектно", Ложь); // не используется + + СтруктураПараметровПисьма = Новый Структура("Получатель,Тема,Текст", Неопределено, "", ""); + ПараметрыВывода.Вставить("ПараметрыОтправки", СтруктураПараметровПисьма); + + Возврат ПараметрыВывода; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -1273,6 +1326,8 @@ КонецЦикла; + УправлениеПечатьюПереопределяемый.ПриПечати(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); + // Установка количества экземпляров табличным документам. Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл Если ДобавленныеВнешниеПечатныеФормы.Найти(ПечатнаяФорма.ИмяМакета) <> Неопределено Тогда @@ -1351,73 +1406,6 @@ КонецФункции -// Подготовить коллекцию печатных форм - таблицу значений используемые при формировании печатных форм. -// -Функция ПодготовитьКоллекциюПечатныхФорм(Знач ИменаМакетов) Экспорт - - Макеты = Новый ТаблицаЗначений; - Макеты.Колонки.Добавить("ИмяМакета"); - Макеты.Колонки.Добавить("ИмяВРЕГ"); - Макеты.Колонки.Добавить("СинонимМакета"); - Макеты.Колонки.Добавить("ТабличныйДокумент"); - Макеты.Колонки.Добавить("Экземпляров"); - Макеты.Колонки.Добавить("Картинка"); - Макеты.Колонки.Добавить("ПолныйПутьКМакету"); - Макеты.Колонки.Добавить("ИмяФайлаПечатнойФормы"); - - Если ТипЗнч(ИменаМакетов) = Тип("Строка") Тогда - ИменаМакетов = СтрРазделить(ИменаМакетов, ","); - КонецЕсли; - - Для Каждого ИмяМакета Из ИменаМакетов Цикл - Макет = Макеты.Найти(ИмяМакета, "ИмяМакета"); - Если Макет = Неопределено Тогда - Макет = Макеты.Добавить(); - Макет.ИмяМакета = ИмяМакета; - Макет.ИмяВРЕГ = ВРег(ИмяМакета); - Макет.Экземпляров = 1; - Иначе - Макет.Экземпляров = Макет.Экземпляров + 1; - КонецЕсли; - КонецЦикла; - - Возврат Макеты; - -КонецФункции - -// Подготовить структуру параметров вывода для менеджера объекта формирующего печатные формы. -// -Функция ПодготовитьСтруктуруПараметровВывода() Экспорт - - ПараметрыВывода = Новый Структура; - ПараметрыВывода.Вставить("ДоступнаПечатьПоКомплектно", Ложь); // не используется - - СтруктураПараметровПисьма = Новый Структура("Получатель,Тема,Текст", Неопределено, "", ""); - ПараметрыВывода.Вставить("ПараметрыОтправки", СтруктураПараметровПисьма); - - Возврат ПараметрыВывода; - -КонецФункции - -// Возвращает путь к каталогу, используемому при печати, из временного хранилища. -// -Функция ПолучитьЛокальныйКаталогФайловПечати() Экспорт - - Значение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЛокальныйКаталогФайловПечати", ""); - Возврат ?(Значение = Неопределено, "", Значение); - -КонецФункции - -// Сохраняет путь к каталогу, используемому при печати, во временном хранилище. -// Параметры: -// Каталог - строка - путь к каталогу печати. -// -Процедура СохранитьЛокальныйКаталогФайловПечати(Каталог) Экспорт - - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ЛокальныйКаталогФайловПечати", "", Каталог); - -КонецПроцедуры - // Возвращает таблицу возможных форматов для сохранения табличного документа. // // Возвращаемое значение @@ -1642,7 +1630,7 @@ Для Каждого Элемент Из ОбязательныеРеквизиты Цикл Если Не ЗначениеЗаполнено(ДанныеДокумента[Элемент.Ключ]) Тогда - ТекстСообщения = Нстр("ru = 'Не заполнен обязательный реквизит: %1'"); + ТекстСообщения = НСтр("ru = 'Не заполнен обязательный реквизит: %1'"); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Элемент.Ключ); Возврат ""; КонецЕсли; @@ -2039,6 +2027,12 @@ КонецФункции +// Устарела. Настройка ЛокальныйКаталогФайловПечати больше не используется. +// Возвращает путь к каталогу, используемому при печати. +Функция ПолучитьЛокальныйКаталогФайловПечати() Экспорт + Возврат ""; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в другие подсистемы. @@ -2067,7 +2061,7 @@ // ПолноеИмяОбъектаМетаданных - Строка - полное имя объекта метаданных, для которого требуется получить список // печатных форм. // -Процедура ПриПолученииСпискаВнешнихПечатныхФорм(ВнешниеПечатныеФормы, ПолноеИмяОбъектаМетаданных) Экспорт +Процедура ПриПолученииСпискаВнешнихПечатныхФорм(ВнешниеПечатныеФормы, ПолноеИмяОбъектаМетаданных) Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); @@ -2078,7 +2072,7 @@ // Возвращает ссылку на объект внешней печатной формы. // -Процедура ПриПолученииВнешнейПечатнойФормы(Идентификатор, ПолноеИмяОбъектаМетаданных, ВнешняяПечатнаяФормаСсылка) Экспорт +Процедура ПриПолученииВнешнейПечатнойФормы(Идентификатор, ПолноеИмяОбъектаМетаданных, ВнешняяПечатнаяФормаСсылка) Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); diff --git a/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl index e7ecbbb02..2f659c4b4 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl @@ -84,9 +84,9 @@ // Параметры: // ДвоичныеДанныеМакета - ДвоичныеДанные - двоичные данные макета. // Возвращаемое значение: -// структура - ссылка макет +// структура - ссылка макет. // -Функция ПолучитьМакетMSWord(Знач ДвоичныеДанныеМакета, Знач ИмяВременногоФайла = "") Экспорт +Функция ПолучитьМакетMSWord(Знач ДвоичныеДанныеМакета, Знач ИмяВременногоФайла) Экспорт Handler = Новый Структура("Тип", "DOC"); Попытка @@ -97,7 +97,14 @@ НеУдалосьСформироватьПечатнуюФорму(ИнформацияОбОшибке()); КонецПопытки; -#Если НЕ ВебКлиент Тогда +#Если ВебКлиент Тогда + ОписанияФайлов = Новый Массив; + ОписанияФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяВременногоФайла, ПоместитьВоВременноеХранилище(ДвоичныеДанныеМакета))); + Если НЕ ПолучитьФайлы(ОписанияФайлов, , КаталогВременныхФайлов(), Ложь) Тогда + Возврат Неопределено; + КонецЕсли; + ИмяВременногоФайла = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КаталогВременныхФайлов()) + ИмяВременногоФайла; +#Иначе ИмяВременногоФайла = ПолучитьИмяВременногоФайла("DOC"); ДвоичныеДанныеМакета.Записать(ИмяВременногоФайла); #КонецЕсли @@ -217,7 +224,7 @@ // Параметры: // Handler - ссылка на макет // Возвращаемое значение -// ссылка на верхний колонтитул +// ссылка на верхний колонтитул. // Функция ПолучитьОбластьВерхнегоКолонтитула(Знач Handler) Экспорт @@ -229,7 +236,7 @@ // Параметры: // Handler - ссылка на макет // Возвращаемое значение -// ссылка на нижний колонтитул +// ссылка на нижний колонтитул. // Функция ПолучитьОбластьНижнегоКолонтитула(Handler) Экспорт @@ -371,7 +378,7 @@ // // Параметры: // ОбластьПечатнойФормы - ссылка на область в печатной форме. -// ДанныеОбъекта - ДанныеОбъекта +// ДанныеОбъекта - ДанныеОбъекта. // Процедура ЗаполнитьПараметры(Знач ОбластьПечатнойФормы, Знач ДанныеОбъекта = Неопределено) Экспорт diff --git a/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl index 22af37cf8..9054e5fef 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюOOWriterКлиент/Module.bsl @@ -80,7 +80,7 @@ // Параметры: // ДвоичныеДанныеМакета - ДвоичныеДанные - двоичные данные макета. // Возвращаемое значение: -// структура - ссылка макет +// структура - ссылка макет. // Функция ПолучитьМакетOOWriter(Знач ДвоичныеДанныеШаблона, ИмяВременногоФайла) Экспорт @@ -104,7 +104,14 @@ НеУдалосьСформироватьПечатнуюФорму(ИнформацияОбОшибке()); КонецПопытки; -#Если НЕ ВебКлиент Тогда +#Если ВебКлиент Тогда + ОписанияФайлов = Новый Массив; + ОписанияФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяВременногоФайла, ПоместитьВоВременноеХранилище(ДвоичныеДанныеШаблона))); + Если НЕ ПолучитьФайлы(ОписанияФайлов, , КаталогВременныхФайлов(), Ложь) Тогда + Возврат Неопределено; + КонецЕсли; + ИмяВременногоФайла = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КаталогВременныхФайлов()) + ИмяВременногоФайла; +#Иначе ИмяВременногоФайла = ПолучитьИмяВременногоФайла("ODT"); ДвоичныеДанныеШаблона.Записать(ИмяВременногоФайла); #КонецЕсли diff --git a/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl index f4d540cf8..eff455353 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl @@ -49,16 +49,6 @@ КонецФункции -// Сохраняет во временное хранилище путь к каталогу, который используется при печати. -// -// Подробнее - см. описание УправлениеПечатью.СохранитьЛокальныйКаталогФайловПечати(). -// -Процедура СохранитьЛокальныйКаталогФайловПечати(Каталог) Экспорт - - УправлениеПечатью.СохранитьЛокальныйКаталогФайловПечати(Каталог); - -КонецПроцедуры - // Возвращает описание команды по имени элемента формы. // // См. УправлениеПечатью.ОписаниеКомандыПечати diff --git a/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl index 4aecf51cd..bc5bace17 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl @@ -312,15 +312,6 @@ Иначе ИмяВременногоФайла = ИмяМакета + "." + НРег(ТипМакета); КонецЕсли; - - ОписанияФайлов = Новый Массив; - ОписанияФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяВременногоФайла, ПоместитьВоВременноеХранилище(ДвоичныеДанныеМакета))); - - Если НЕ ПолучитьФайлы(ОписанияФайлов, , КаталогВременныхФайлов(), Ложь) Тогда - Возврат Неопределено; - КонецЕсли; - - ИмяВременногоФайла = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КаталогВременныхФайлов()) + ИмяВременногоФайла; #КонецЕсли Если ВРег(ТипМакета) = "DOC" Тогда @@ -364,7 +355,7 @@ // Показывает сформированный документ пользователю. // Фактически устанавливает ему признак видимости. // Параметры: -// Handler - СсылкаПечатнаяФорма +// Handler - СсылкаПечатнаяФорма. // Процедура ПоказатьДокумент(Знач Handler) Экспорт @@ -515,7 +506,7 @@ // // Параметры: // ПечатнаяФорма - СсылкаПечатнаяФорма, Область - область печатной формы, либо сама печатная форма. -// Данные - ДанныеЗаполнения +// Данные - ДанныеЗаполнения. // Процедура ЗаполнитьПараметры(Знач ПечатнаяФорма, Знач Данные) Экспорт @@ -612,7 +603,7 @@ // Вставляет разрыв между строками в виде символа перевода строки. // Параметры: -// ПечатнаяФорма - СсылкаПечатнаяФорма +// ПечатнаяФорма - СсылкаПечатнаяФорма. // Процедура ВставитьРазрывНаНовуюСтроку(Знач ПечатнаяФорма) Экспорт @@ -628,6 +619,15 @@ #КонецОбласти +#Область СлужебныйПрограммныйИнтерфейс + +// Открывает форму диалога загрузки файла макета для редактирования во внешней программе. +Процедура РедактироватьМакетВоВнешнейПрограмме(ОписаниеОповещения, ПараметрыМакета, Форма) Экспорт + ОткрытьФорму("РегистрСведений.ПользовательскиеМакетыПечати.Форма.РедактированиеМакета", ПараметрыМакета, Форма, , , , ОписаниеОповещения); +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Перед выполнением команды печати проверить, был ли передан хотя бы один объект, так как @@ -652,13 +652,4 @@ КонецФункции -// Открывает форму диалога загрузки файла макета для редактирования во внешней программе. -Процедура РедактироватьМакетВоВнешнейПрограмме(ОписаниеОповещения, ПараметрыМакета, Форма) Экспорт - ОткрытьФорму("РегистрСведений.ПользовательскиеМакетыПечати.Форма.РедактированиеМакета", ПараметрыМакета, Форма, , , , ОписаниеОповещения); -КонецПроцедуры - -#Область ИспользованиеМодальности - -#КонецОбласти - #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl index 762ef5ce4..ba321dbb2 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl @@ -54,6 +54,47 @@ +КонецПроцедуры + +// Вызывается после завершения вызова процедуры Печать менеджера печати объекта, имеет те же параметры. +// +// Параметры: +// МассивОбъектов - Массив - список объектов, для которых была выполнена процедура Печать; +// ПараметрыПечати - Структура - произвольные параметры, переданные при вызове команды печати; +// КоллекцияПечатныхФорм - ТаблицаЗначений - содержит табличные документы и дополнительную информацию; +// ОбъектыПечати - СписокЗначений - соответствие между объектами и именами областей в табличных документах, где +// значение - Объект, представление - имя области с объектом в табличных документах; +// ПараметрыВывода - Структура - параметры, связанные с выводом табличных документов: +// * ПараметрыОтправки - Структура - информация для заполнения письма при отправке печатной формы по электронной почте. +// Содержит следующие поля (описание см. в общем модуле конфигурации +// РаботаСПочтовымиСообщениямиКлиент в процедуре СоздатьНовоеПисьмо): +// ** Получатель; +// ** Тема, +// ** Текст. +Процедура ПриПечати(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт + + + +КонецПроцедуры + +// Переопределяет параметры отправки печатных форм при подготовке письма. +// +// Параметры: +// +// ПараметрыОтправки +// * Получатель - Массив +// * Тема - Строка +// * Текст - Строка +// * Вложения - Структура: +// ** АдресВоВременномХранилище - Строка +// ** Представление - Строка - имя файла. +// ОбъектыПечати - Массив - параметр МассивСсылок в вызове процедуры Печать +// ПараметрыВывода - Структура - параметр ПараметрыВывода в вызове процедуры Печать +// ПечатныеФормы - ТаблицаЗначений - коллекция табличных документов: +// * Название - Строка - название печатной формы; +// * ТабличныйДокумент - ТабличныйДокумент - печатая форма. +Процедура ПередОтправкойПоПочте(ПараметрыОтправки, ПараметрыВывода, ОбъектыПечати, ПечатныеФормы) Экспорт + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl index 12d5fa430..cef87ac93 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюСлужебныйКлиент/Module.bsl @@ -99,8 +99,7 @@ Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности") Тогда МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); - // Не локализуется - ИмяПоказателя = "Печать" + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("/%1/%2/%3/%4/%5/%6/%7", + ИмяПоказателя = НСтр("ru = 'Печать'") + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("/%1/%2/%3/%4/%5/%6/%7", ОписаниеКоманды.Идентификатор, ОписаниеКоманды.МенеджерПечати, ОписаниеКоманды.Обработчик, @@ -266,7 +265,7 @@ // Результат - (не используется); // ДополнительныеПараметры - (не используется). // -Процедура ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(ОписаниеОповещения) Экспорт +Процедура ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(ОписаниеОповещения) #Если ВебКлиент Тогда ТекстСообщения = НСтр("ru = 'Для продолжения печати необходимо установить расширение для веб-клиента 1С:Предприятие.'"); ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(ОписаниеОповещения, ТекстСообщения, Ложь); diff --git a/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl index eecbd4319..5e125dc3f 100644 --- a/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl @@ -16,7 +16,7 @@ // Форма - УправляемаяФорма - в которой будут отображаться дополнительные реквизиты. // // ДополнительныеПараметры - Неопределено - все дополнительные параметры имеют значения по умолчанию. -// Ранее реквизит называлася "Объект" и имел смысл, +// Ранее реквизит назывался "Объект" и имел смысл, // как одноименное свойство структуры, указанной ниже. // - Структура - с необязательными свойствами: // @@ -129,6 +129,11 @@ ЗаполнитьЗначенияСвойств(Структура, Форма); Если ТипЗнч(Структура.Свойства_ИспользоватьСвойства) = Тип("Булево") Тогда + Если Форма.ПараметрыСвойств.Свойство("ВыполненаОтложеннаяИнициализация") + И Не Форма.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация Тогда + Возврат; + КонецЕсли; + ЗаполнитьДополнительныеРеквизитыВФорме(Форма, ТекущийОбъект); КонецЕсли; @@ -164,6 +169,16 @@ Возврат; КонецЕсли; + Приемник = Новый Структура; + Приемник.Вставить("ПараметрыСвойств", Неопределено); + ЗаполнитьЗначенияСвойств(Приемник, Форма); + + Если ТипЗнч(Приемник.ПараметрыСвойств) = Тип("Структура") + И Приемник.ПараметрыСвойств.Свойство("ВыполненаОтложеннаяИнициализация") + И Не Приемник.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация Тогда + ЗаполнитьДополнительныеРеквизитыВФорме(Форма); + КонецЕсли; + Ошибки = Неопределено; Для каждого Строка Из Форма.Свойства_ОписаниеДополнительныхРеквизитов Цикл @@ -387,7 +402,7 @@ ТипЗначенияСвойства = Новый ОписаниеТипов("Строка"); ИначеЕсли ТипЗначенияСвойства.СодержитТип(Тип("Строка")) И ТипЗначенияСвойства.КвалификаторыСтроки.Длина = 0 Тогда - // Если нельзя использовать строку, а в свойствах реквизита она неограниченная, + // Если нельзя использовать неограниченную строку, а в свойствах реквизита она неограниченная, // то устанавливаем ограничение в 1024 символа. ТипЗначенияСвойства = Новый ОписаниеТипов(ОписаниеСвойства.ТипЗначения, ,,, Новый КвалификаторыСтроки(1024)); @@ -533,7 +548,8 @@ ФормаОписаниеСвойства.ЭлементФормыДобавлен = Истина; Если ОписаниеСвойства.Булево И ПустаяСтрока(ОписаниеСвойства.ФорматСвойства) Тогда - Элемент.Вид = ВидПоляФормы.ПолеФлажка + Элемент.Вид = ВидПоляФормы.ПолеФлажка; + Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право; Иначе Если ПоляНадписей Тогда Элемент.Вид = ВидПоляФормы.ПолеНадписи; @@ -544,10 +560,6 @@ КонецЕсли; КонецЕсли; - // Предварительная установка видимости и доступности без учета условий. - Элемент.Видимость = ?(НЕ ОписаниеСвойства.Удалено, ОписаниеСвойства.Виден, Истина); - Элемент.Доступность = ?(НЕ ОписаниеСвойства.Удалено, ОписаниеСвойства.Доступен, Истина); - Элемент.ПутьКДанным = ОписаниеСвойства.ИмяРеквизитаЗначение; Элемент.Подсказка = ОписаниеСвойства.Свойство.Подсказка; Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_ПриИзмененииДополнительногоРеквизита"); @@ -655,9 +667,6 @@ // Установка видимости, доступности и обязательности заполнения дополнительных реквизитов. Для Каждого ОписаниеЗависимогоРеквизита Из Форма.Свойства_ОписаниеЗависимыхДополнительныхРеквизитов Цикл Если ОписаниеЗависимогоРеквизита.УсловиеДоступности <> Неопределено Тогда - Если Не ОписаниеЗависимогоРеквизита.Доступен Тогда - Продолжить; - КонецЕсли; Результат = РезультатВычисленияУсловия(Форма, ОписаниеОбъекта, ОписаниеЗависимогоРеквизита.УсловиеДоступности); Элемент = Форма.Элементы[ОписаниеЗависимогоРеквизита.ИмяРеквизитаЗначение]; Если Элемент.Доступность <> Результат Тогда @@ -665,9 +674,6 @@ КонецЕсли; КонецЕсли; Если ОписаниеЗависимогоРеквизита.УсловиеВидимости <> Неопределено Тогда - Если Не ОписаниеЗависимогоРеквизита.Виден Тогда - Продолжить; - КонецЕсли; Результат = РезультатВычисленияУсловия(Форма, ОписаниеОбъекта, ОписаниеЗависимогоРеквизита.УсловиеВидимости); Элемент = Форма.Элементы[ОписаниеЗависимогоРеквизита.ИмяРеквизитаЗначение]; Если Элемент.Видимость <> Результат Тогда @@ -679,6 +685,7 @@ Если Не ОписаниеЗависимогоРеквизита.ЗаполнятьОбязательно Тогда Продолжить; КонецЕсли; + Результат = РезультатВычисленияУсловия(Форма, ОписаниеОбъекта, ОписаниеЗависимогоРеквизита.УсловиеОбязательностиЗаполнения); Элемент = Форма.Элементы[ОписаниеЗависимогоРеквизита.ИмяРеквизитаЗначение]; Если Элемент.АвтоОтметкаНезаполненного <> Результат Тогда @@ -1151,7 +1158,7 @@ // // Параметры: // ИмяНабораСвойств - Строка - Имя предопределенного набора свойств -// Параметры - Структура - см. описание функции СтруктураПараметровНабораСвойств +// Параметры - Структура - см. описание функции СтруктураПараметровНабораСвойств. // Процедура УстановитьПараметрыНабораСвойств(ИмяНабораСвойств, Параметры) Экспорт @@ -1335,32 +1342,51 @@ И ОтложеннаяИнициализация И ИмяЭлементаДляРазмещения <> "" Тогда ГруппаФормы = Форма.Элементы[Контекст.ИмяЭлементаДляРазмещения]; - Если ГруппаФормы.Вид = ВидГруппыФормы.Страница Тогда - Форма.Элементы.Добавить("Свойства_ПустаяДекорация", Тип("ДекорацияФормы"), ГруппаФормы); - Форма.ПараметрыСвойств.Вставить("ДобавленаПустаяДекорация", Истина); + Форма.Элементы.Добавить("Свойства_ПустаяДекорация", Тип("ДекорацияФормы"), ГруппаФормы); + Форма.ПараметрыСвойств.Вставить("ДобавленаПустаяДекорация", Истина); + Если ГруппаФормы.Вид <> ВидГруппыФормы.Страница Тогда + Родитель = СтраницаРодитель(ГруппаФормы); Иначе - ЗапретитьПеретаскиваниеРодительскихГрупп(ГруппаФормы); + Родитель = ГруппаФормы; КонецЕсли; + + Если Родитель <> Неопределено Тогда + ГруппаСтраниц = Родитель.Родитель; + ЗаголовокСтраницы = ?(ЗначениеЗаполнено(Родитель.Заголовок), Родитель.Заголовок, Родитель.Имя); + ЗаголовокГруппыСтраниц = ?(ЗначениеЗаполнено(ГруппаСтраниц.Заголовок), ГруппаСтраниц.Заголовок, ГруппаСтраниц.Имя); + + ПредупреждениеОРазмещении = НСтр("ru = 'Для отображения дополнительных реквизитов необходимо разместить группу ""%1"" не первым элементом (после любой другой группы) в группе ""%2"" (меню Еще - Изменить форму).'"); + ТекстПодсказки = НСтр("ru = 'Также можно установить стандартные настройки формы: + | • в меню Еще выбрать пункт Изменить форму... + | • в открывшейся форме ""Настройка формы"" в меню Еще выбрать пункт ""Установить стандартные настройки""'"); + ПредупреждениеОРазмещении = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПредупреждениеОРазмещении, + ЗаголовокСтраницы, ЗаголовокГруппыСтраниц); + Форма.Элементы.Свойства_ПустаяДекорация.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка; + Форма.Элементы.Свойства_ПустаяДекорация.Заголовок = ПредупреждениеОРазмещении; + Форма.Элементы.Свойства_ПустаяДекорация.Подсказка = ТекстПодсказки; + Форма.Элементы.Свойства_ПустаяДекорация.ЦветТекста = Метаданные.ЭлементыСтиля.ПоясняющийОшибкуТекст.Значение; + КонецЕсли; + ГруппаФормы.РазрешитьИзменениеСостава = Ложь; КонецЕсли; КонецПроцедуры -Процедура ЗапретитьПеретаскиваниеРодительскихГрупп(ГруппаФормы) +Функция СтраницаРодитель(ГруппаФормы) Родитель = ГруппаФормы.Родитель; Если ТипЗнч(Родитель) = Тип("ГруппаФормы") Тогда Родитель.РазрешитьИзменениеСостава = Ложь; Если Родитель.Вид = ВидГруппыФормы.Страница Тогда - Возврат; + Возврат Родитель; Иначе - ЗапретитьПеретаскиваниеРодительскихГрупп(Родитель); + СтраницаРодитель(Родитель); КонецЕсли; Иначе - Возврат; + Возврат Неопределено; КонецЕсли; -КонецПроцедуры +КонецФункции Процедура УстановитьУсловиеЗависимости(СтруктураЗависимостей, ПутьКРеквизиту, СтрокаТаблицы, КодУсловия) Если СтруктураЗависимостей = Неопределено Тогда @@ -1498,6 +1524,7 @@ МассивРеквизитов.Добавить(РеквизитПараметрыСвойств); ПараметрыСвойствДобавлены = Истина; КонецЕсли; + КонецЕсли; Форма.ИзменитьРеквизиты(МассивРеквизитов); diff --git a/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl index acbdd11c2..9a6de9aec 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl @@ -9,7 +9,7 @@ // // Параметры: // Форма - УправляемаяФорма, предварительно настроенная в процедуре. -// УправлениеСвойствами.ПриСозданииНаСервере() +// УправлениеСвойствами.ПриСозданииНаСервере(). // Процедура РедактироватьСоставСвойств(Форма, Ссылка = Неопределено) Экспорт @@ -70,11 +70,17 @@ КонецЕсли; Если ИмяСобытия = "Запись_НаборыДополнительныхРеквизитовИСведений" Тогда - Возврат Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта.НайтиПоЗначению(Параметр.Ссылка) <> Неопределено; + Если Не Параметр.Свойство("Ссылка") Тогда + Возврат Истина; + Иначе + Возврат Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта.НайтиПоЗначению(Параметр.Ссылка) <> Неопределено; + КонецЕсли; ИначеЕсли ИмяСобытия = "Запись_ДополнительныеРеквизитыИСведения" Тогда + Если Форма.ПараметрыСвойств.Свойство("ВыполненаОтложеннаяИнициализация") - И Не Форма.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация Тогда + И Не Форма.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация + Или Не Параметр.Свойство("Ссылка") Тогда Возврат Истина; Иначе Отбор = Новый Структура("Свойство", Параметр.Ссылка); @@ -109,9 +115,6 @@ Для Каждого ОписаниеЗависимогоРеквизита Из Форма.Свойства_ОписаниеЗависимыхДополнительныхРеквизитов Цикл Если ОписаниеЗависимогоРеквизита.УсловиеДоступности <> Неопределено Тогда - Если Не ОписаниеЗависимогоРеквизита.Доступен Тогда - Продолжить; - КонецЕсли; ЗначенияПараметров = ОписаниеЗависимогоРеквизита.УсловиеДоступности.ЗначенияПараметров; Результат = Вычислить(ОписаниеЗависимогоРеквизита.УсловиеДоступности.КодУсловия); Элемент = Форма.Элементы[ОписаниеЗависимогоРеквизита.ИмяРеквизитаЗначение]; @@ -120,9 +123,6 @@ КонецЕсли; КонецЕсли; Если ОписаниеЗависимогоРеквизита.УсловиеВидимости <> Неопределено Тогда - Если Не ОписаниеЗависимогоРеквизита.Виден Тогда - Продолжить; - КонецЕсли; ЗначенияПараметров = ОписаниеЗависимогоРеквизита.УсловиеВидимости.ЗначенияПараметров; Результат = Вычислить(ОписаниеЗависимогоРеквизита.УсловиеВидимости.КодУсловия); Элемент = Форма.Элементы[ОписаниеЗависимогоРеквизита.ИмяРеквизитаЗначение]; diff --git a/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl index 4ebada7e1..abe65dc1f 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl @@ -71,6 +71,10 @@ КонецПроцедуры - - #КонецОбласти + +#Область СлужебныеПроцедурыИФункции + + + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl index e69958d3c..c4de45909 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиСлужебный/Module.bsl @@ -16,12 +16,6 @@ СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииИсключенийПоискаСсылок"].Добавить( "УправлениеСвойствамиСлужебный"); - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбязательныхОбъектовПланаОбмена"].Добавить( - "УправлениеСвойствамиСлужебный"); - - СерверныеОбработчики["СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовНачальногоОбразаПланаОбмена"].Добавить( - "УправлениеСвойствамиСлужебный"); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда СерверныеОбработчики["СтандартныеПодсистемы.УправлениеДоступом\ПриЗаполненииВидовДоступа"].Добавить( "УправлениеСвойствамиСлужебный"); @@ -79,7 +73,7 @@ Обработчик.РежимВыполнения = "Монопольно"; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.3.1.76"; + Обработчик.Версия = "2.3.1.21"; Обработчик.Процедура = "УправлениеСвойствамиСлужебный.УстановитьЗначениеПризнакаИспользуется"; Обработчик.РежимВыполнения = "Оперативно"; Обработчик.НачальноеЗаполнение = Истина; @@ -147,6 +141,77 @@ КонецФункции +// Дополняет список колонки для загрузки данных колонками дополнительных реквизитов и свойств. +// +// Параметры: +// МетаданныеСправочника - ОбъектМетаданных - Метаданные справочника +// ИнформацияПоКолонкам - ТаблицаЗначение - колонки макета. +// +Процедура КолонкиДляЗагрузкиДанных(МетаданныеСправочника, ИнформацияПоКолонкам) Экспорт + + Если МетаданныеСправочника.ТабличныеЧасти.Найти("ДополнительныеРеквизиты") <> Неопределено Тогда + + Позиция = ИнформацияПоКолонкам.Количество() + 1; + Свойства = УправлениеСвойствами.ПолучитьСписокСвойств(Справочники[МетаданныеСправочника.Имя].ПустаяСсылка()); + + ДополнительныеСведения = Новый Массив; + Для каждого Свойство Из Свойства Цикл + Если НЕ Свойство.ЭтоДополнительноеСведение Тогда + СтрокаИнфоПроКолонки = ИнформацияПоКолонкам.Добавить(); + ИмяКолонки = СтандартныеПодсистемыСервер.ПреобразоватьСтрокуВДопустимоеНаименованиеКолонки(Свойство.Наименование); + СтрокаИнфоПроКолонки.ИмяКолонки = "ДополнительныйРеквизит_" + ИмяКолонки; + СтрокаИнфоПроКолонки.ПредставлениеКолонки = Свойство.Наименование; + СтрокаИнфоПроКолонки.ТипКолонки = Свойство.ТипЗначения; + СтрокаИнфоПроКолонки.ОбязательнаДляЗаполнения = Свойство.ЗаполнятьОбязательно; + СтрокаИнфоПроКолонки.Позиция = Позиция; + СтрокаИнфоПроКолонки.Группа = НСтр("ru = 'Доп. реквизиты'"); + СтрокаИнфоПроКолонки.Видимость = Истина; + СтрокаИнфоПроКолонки.Примечание = Свойство.Наименование; + СтрокаИнфоПроКолонки.Ширина = 30; + Позиция = Позиция + 1; + + Значения = УправлениеСвойствами.ПолучитьСписокЗначенийСвойств(Свойство); + Если Значения.Количество() > 0 Тогда + СтрокаИнфоПроКолонки.Примечание = СтрокаИнфоПроКолонки.Примечание + Символы.ПС + НСтр("ru = 'Варианты значений:'") + Символы.ПС; + Для каждого Значение Из Значения Цикл + Код = ?(ЗначениеЗаполнено(Значение.Код), " (" + Значение.Код + ")", ""); + СтрокаИнфоПроКолонки.Примечание = СтрокаИнфоПроКолонки.Примечание + Значение.Наименование + Код +Символы.ПС; + КонецЦикла; + КонецЕсли; + Иначе + ДополнительныеСведения.Добавить(Свойство); + КонецЕсли; + КонецЦикла; + + Для каждого Свойство Из ДополнительныеСведения Цикл + СтрокаИнфоПроКолонки = ИнформацияПоКолонкам.Добавить(); + ИмяКолонки = СтандартныеПодсистемыСервер.ПреобразоватьСтрокуВДопустимоеНаименованиеКолонки(Свойство.Наименование); + СтрокаИнфоПроКолонки.ИмяКолонки = "Свойство_" + ИмяКолонки; + СтрокаИнфоПроКолонки.ПредставлениеКолонки = Свойство.Наименование; + СтрокаИнфоПроКолонки.ТипКолонки = Свойство.ТипЗначения; + СтрокаИнфоПроКолонки.ОбязательнаДляЗаполнения = Свойство.ЗаполнятьОбязательно; + СтрокаИнфоПроКолонки.Позиция = Позиция; + СтрокаИнфоПроКолонки.Группа = НСтр("ru = 'Доп. свойства'"); + СтрокаИнфоПроКолонки.Видимость = Истина; + СтрокаИнфоПроКолонки.Примечание = Свойство.Наименование; + СтрокаИнфоПроКолонки.Ширина = 30; + Позиция = Позиция + 1; + + Значения = УправлениеСвойствами.ПолучитьСписокЗначенийСвойств(Свойство); + Если Значения.Количество() > 0 Тогда + СтрокаИнфоПроКолонки.Примечание = СтрокаИнфоПроКолонки.Примечание + Символы.ПС + НСтр("ru = 'Варианты значений:'") + Символы.ПС; + Для каждого Значение Из Значения Цикл + Код = ?(ЗначениеЗаполнено(Значение.Код), " (" + Значение.Код + ")", ""); + СтрокаИнфоПроКолонки.Примечание = СтрокаИнфоПроКолонки.Примечание + Значение.Наименование + Код +Символы.ПС; + КонецЦикла; + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + // Определить объекты метаданных, в модулях менеджеров которых ограничивается возможность редактирования реквизитов // с помощью экспортной функции ПолучитьБлокируемыеРеквизитыОбъекта. // @@ -178,6 +243,48 @@ Объекты.Вставить(Метаданные.Справочники.НаборыДополнительныхРеквизитовИСведений.ПолноеИмя(), "РеквизитыРедактируемыеВГрупповойОбработке"); КонецПроцедуры +// Дополняет объект реквизитами, хранящимися отдельно от объекта, либо в служебной части самого объекта, +// не предназначенной для вывода в отчетах. +Процедура ПриПодготовкеДанныхОбъекта(Объект, ДополнительныеРеквизиты) Экспорт + + Если УправлениеСвойствами.ИспользоватьДопРеквизиты(Объект.Ссылка) Тогда + Для Каждого ЗначениеСвойства Из УправлениеСвойствами.ПолучитьЗначенияСвойств(Объект.Ссылка, Истина, Ложь) Цикл + Реквизит = ДополнительныеРеквизиты.Добавить(); + Реквизит.Наименование = ЗначениеСвойства.Свойство; + Реквизит.Значение = ЗначениеСвойства.Значение; + КонецЦикла; + КонецЕсли; + + Если УправлениеСвойствами.ИспользоватьДопСведения(Объект.Ссылка) Тогда + Для Каждого ЗначениеСвойства Из УправлениеСвойствами.ПолучитьЗначенияСвойств(Объект.Ссылка, Ложь, Истина) Цикл + Реквизит = ДополнительныеРеквизиты.Добавить(); + Реквизит.Идентификатор = ЗначениеСвойства.Свойство; + Реквизит.Наименование = ЗначениеСвойства.Свойство; + Реквизит.Значение = ЗначениеСвойства.Значение; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +// Восстанавливает значения реквизитов объекта, хранящихся отдельно от объекта. +Процедура ПриВосстановленииВерсииОбъекта(Объект, ДополнительныеРеквизиты) Экспорт + + Для Каждого Реквизит Из ДополнительныеРеквизиты Цикл + Если ТипЗнч(Реквизит.Идентификатор) = Тип("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения") Тогда + НаборЗаписей = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Объект.Установить(Объект.Ссылка); + НаборЗаписей.Отбор.Свойство.Установить(Реквизит.Идентификатор); + + Запись = НаборЗаписей.Добавить(); + Запись.Свойство = Реквизит.Идентификатор; + Запись.Значение = Реквизит.Значение; + Запись.Объект = Объект.Ссылка; + НаборЗаписей.Записать(); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -492,8 +599,6 @@ КонецФункции -// Только для внутреннего использования. -// // Только для внутреннего использования. // Функция ДополнительныеРеквизитыИСведенияНеНайдены(Наборы, ЭтоДополнительноеСведение, ОтложеннаяИнициализация = Ложь) Экспорт @@ -509,10 +614,6 @@ | СвойстваНаборов.Ссылка В(&НаборыСвойств) | И НЕ СвойстваНаборов.ПометкаУдаления"; - Если ОтложеннаяИнициализация Тогда - Запрос.Текст = Запрос.Текст + Символы.ПС + "И Свойство.Виден"; - КонецЕсли; - Если ЭтоДополнительноеСведение Тогда Запрос.Текст = СтрЗаменить( Запрос.Текст, @@ -527,24 +628,6 @@ Возврат СвойстваНеНайдены; КонецФункции -// Возвращает значения дополнительных сведений. -Функция ПрочитатьЗначенияСвойствИзРегистраСведений(ВладелецСвойства) Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ДополнительныеСведения.Свойство, - | ДополнительныеСведения.Значение - |ИЗ - | РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения - |ГДЕ - | ДополнительныеСведения.Объект = &Объект"; - Запрос.УстановитьПараметр("Объект", ВладелецСвойства); - - Возврат Запрос.Выполнить().Выгрузить(); - -КонецФункции - // Возвращает объект метаданных, который является владельцем значений // свойств набора дополнительных реквизитов и сведений. // @@ -643,13 +726,15 @@ // Проверяет наличие объектов, использующих свойство. // // Параметры: -// Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения +// Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения. // // Возвращаемое значение: // Булево. Истина, если найден хотя бы один объект. // Функция ДополнительноеСвойствоИспользуется(Свойство) Экспорт + УстановитьПривилегированныйРежим(Истина); + Запрос = Новый Запрос; Запрос.УстановитьПараметр("Свойство", Свойство); Запрос.Текст = @@ -767,8 +852,8 @@ КонецЕсли; КонецЕсли; - Если ЗначениеЗаполнено(ОбъектМетаданных.ПредставлениеОбъекта) Тогда - Наименование = ОбъектМетаданных.ПредставлениеОбъекта; + Если ЗначениеЗаполнено(ОбъектМетаданных.ПредставлениеСписка) Тогда + Наименование = ОбъектМетаданных.ПредставлениеСписка; ИначеЕсли ЗначениеЗаполнено(ОбъектМетаданных.Синоним) Тогда Наименование = ОбъектМетаданных.Синоним; @@ -978,40 +1063,6 @@ КонецПроцедуры -// Используется для получения объектов метаданных обязательных для плана обмена. -// Если подсистема имеет объекты метаданных обязательные для включения в состав плана обмена, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты - Массив. Массив объектов метаданных конфигурации, которые необходимо включить в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. -// Истина - требуется получить список объектов плана обмена РИБ; -// Ложь - требуется получить список для плана обмена НЕ РИБ. -// -Процедура ПриПолученииОбязательныхОбъектовПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт - - Если РаспределеннаяИнформационнаяБаза Тогда - Объекты.Добавить(Метаданные.Константы.ПараметрыДополнительныхРеквизитовИСведений); - КонецЕсли; - -КонецПроцедуры - -// Используется для получения объектов метаданных, которые должны входить в состав плана обмена -// и НЕ должны входить в состав подписок на события регистрации изменений для этого плана обмена. -// Эти объекты метаданных используются только в момент создания начального образа подчиненного узла -// и не мигрируют в процессе обмена. -// Если подсистема имеет объекты метаданных, которые участвуют только в создании начального образа подчиненного узла, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты - Массив. Массив объектов метаданных конфигурации. -// -Процедура ПриПолученииОбъектовНачальногоОбразаПланаОбмена(Объекты) Экспорт - - Объекты.Добавить(Метаданные.Константы.ПараметрыДополнительныхРеквизитовИСведений); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. @@ -1033,13 +1084,11 @@ КонецЕсли; ОписаниеЗависимогоРеквизита = РезультатПоиска[0]; - Если ОписаниеЗависимогоРеквизита.УсловиеДоступности <> Неопределено - И ОписаниеЗависимогоРеквизита.Доступен Тогда + Если ОписаниеЗависимогоРеквизита.УсловиеДоступности <> Неопределено Тогда ЗначенияПараметров = ОписаниеЗависимогоРеквизита.УсловиеДоступности.ЗначенияПараметров; Доступен = Вычислить(ОписаниеЗависимогоРеквизита.УсловиеДоступности.КодУсловия); КонецЕсли; - Если ОписаниеЗависимогоРеквизита.УсловиеВидимости <> Неопределено - И ОписаниеЗависимогоРеквизита.Виден Тогда + Если ОписаниеЗависимогоРеквизита.УсловиеВидимости <> Неопределено Тогда ЗначенияПараметров = ОписаниеЗависимогоРеквизита.УсловиеВидимости.ЗначенияПараметров; Виден = Вычислить(ОписаниеЗависимогоРеквизита.УсловиеВидимости.КодУсловия); КонецЕсли; @@ -1194,7 +1243,7 @@ // - ДополнительныеРеквизиты (очищает, если изменено встраивание). // - ДополнительныеСведения (очищает, если изменено встраивание). // ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения. -// - Наименование +// - Наименование. // Процедура ЗаполнитьНовыеДанные_2_1_5() Экспорт diff --git a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl index af2f2e58b..96506cdc3 100644 --- a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl +++ b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl @@ -656,32 +656,34 @@ // ----------------------------------------------------------------- // Удалим ненужные сообщения на сервере. - Если Не ДанныеУчетнойЗаписи.ОставлятьКопии Тогда - // удалять все - МассивКУдалению = Идентификаторы; - УдалятьВсе = Истина; - Иначе - УдалятьВсе = Ложь; - Если ДанныеУчетнойЗаписи.ОставлятьДней > 0 Тогда - МассивКУдалению = ПолучитьИдентификаторыПисемДляУдаленияНаСервере( - Идентификаторы, - ДанныеУчетнойЗаписи.Ссылка, - ТекущаяДатаСеанса() - ДанныеУчетнойЗаписи.ОставлятьДней * 24 * 60 * 60); + Если Протокол = ПротоколИнтернетПочты.POP3 Тогда + Если Не ДанныеУчетнойЗаписи.ОставлятьКопии Тогда + // удалять все + МассивКУдалению = Идентификаторы; + УдалятьВсе = Истина; Иначе - МассивКУдалению = Новый Массив; + УдалятьВсе = Ложь; + Если ДанныеУчетнойЗаписи.ОставлятьДней > 0 Тогда + МассивКУдалению = ПолучитьИдентификаторыПисемДляУдаленияНаСервере( + Идентификаторы, + ДанныеУчетнойЗаписи.Ссылка, + ТекущаяДатаСеанса() - ДанныеУчетнойЗаписи.ОставлятьДней * 24 * 60 * 60); + Иначе + МассивКУдалению = Новый Массив; + КонецЕсли; + КонецЕсли; + + Если МассивКУдалению.Количество() <> 0 Тогда + Почта.УдалитьСообщения(МассивКУдалению); + КонецЕсли; + + // ----------------------------------------------------------------- + // Удалим ненужные идентификаторы в регистре сведений. + Если УдалятьВсе Тогда + УдалитьИдентификаторыВсехРанееПолученныхПисем(ДанныеУчетнойЗаписи.Ссылка); + Иначе + УдалитьИдентификаторыРанееПолученныхПисем(ДанныеУчетнойЗаписи.Ссылка, Идентификаторы, МассивКУдалению); КонецЕсли; - КонецЕсли; - - Если МассивКУдалению.Количество() <> 0 Тогда - Почта.УдалитьСообщения(МассивКУдалению); - КонецЕсли; - - // ----------------------------------------------------------------- - // Удалим ненужные идентификаторы в регистре сведений. - Если УдалятьВсе Тогда - УдалитьИдентификаторыВсехРанееПолученныхПисем(ДанныеУчетнойЗаписи.Ссылка); - Иначе - УдалитьИдентификаторыРанееПолученныхПисем(ДанныеУчетнойЗаписи.Ссылка, Идентификаторы, МассивКУдалению); КонецЕсли; // ----------------------------------------------------------------- @@ -1300,8 +1302,11 @@ Иначе Письмо.ОтправительАдрес = Сообщение.Отправитель; КонецЕсли; + Письмо.ОтправительАдрес = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(Письмо.ОтправительАдрес, ""); + ИмяОтправителя = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(Сообщение.ИмяОтправителя, ""); + Письмо.ОтправительПредставление = - ?(ПустаяСтрока(Сообщение.ИмяОтправителя), Письмо.ОтправительАдрес, Сообщение.ИмяОтправителя + " <"+ Письмо.ОтправительАдрес +">"); + ?(ПустаяСтрока(ИмяОтправителя), Письмо.ОтправительАдрес, ИмяОтправителя + " <"+ Письмо.ОтправительАдрес +">"); Письмо.Размер = Сообщение.Размер; Письмо.Тема = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(Сообщение.Тема); @@ -1584,12 +1589,15 @@ Лев(ИмяБезРасширения, СтрДлина(ИмяБезРасширения) - СтрДлина(РасширениеБезТочки) - 1)); КонецЕсли; - Возврат ПрисоединенныеФайлы.ДобавитьФайл( - Письмо, - ИмяБезРасширения, - РасширениеБезТочки, - , - , + ПараметрыФайла = Новый Структура; + ПараметрыФайла.Вставить("ВладелецФайлов", Письмо); + ПараметрыФайла.Вставить("Автор", Неопределено); + ПараметрыФайла.Вставить("ИмяБезРасширения", ИмяБезРасширения); + ПараметрыФайла.Вставить("РасширениеБезТочки", РасширениеБезТочки); + ПараметрыФайла.Вставить("ВремяИзменения", Неопределено); + ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", Неопределено); + Возврат ПрисоединенныеФайлы.ДобавитьПрисоединенныйФайл( + ПараметрыФайла, АдресВоВременномХранилище, ""); @@ -1604,12 +1612,15 @@ ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла( СсылкаНаФайл, УникальныйИдентификаторФормы, Истина); - Возврат ПрисоединенныеФайлы.ДобавитьФайл( - Письмо, - ДанныеФайла.Наименование, - ДанныеФайла.Расширение, - , - ДанныеФайла.ДатаМодификацииУниверсальная, + ПараметрыФайла = Новый Структура; + ПараметрыФайла.Вставить("ВладелецФайлов", Письмо); + ПараметрыФайла.Вставить("Автор", Неопределено); + ПараметрыФайла.Вставить("ИмяБезРасширения", ДанныеФайла.Наименование); + ПараметрыФайла.Вставить("РасширениеБезТочки", ДанныеФайла.Расширение); + ПараметрыФайла.Вставить("ВремяИзменения", Неопределено); + ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", ДанныеФайла.ДатаМодификацииУниверсальная); + Возврат ПрисоединенныеФайлы.ДобавитьПрисоединенныйФайл( + ПараметрыФайла, ДанныеФайла.СсылкаНаДвоичныеДанныеФайла, ""); @@ -1841,7 +1852,7 @@ |Has been read " + Выборка.ДатаПрочтения + " |By Recipient " +Выборка.ИмяПользователя + "<" + Выборка.АдресЭлектроннойПочты + ">"; - ЛокализованноеУведомление = Символы.ПС + Нстр("ru='Сообщение от %1 < %2 > + ЛокализованноеУведомление = Символы.ПС + НСтр("ru='Сообщение от %1 < %2 > |Тема: %3 |Отправленное %4 |Было прочитано %5 @@ -1899,10 +1910,10 @@ // перечисления ВариантыВажностиВзаимодействия. // // Параметры: -// ВажностьВзаимодействия - Перечисление.ВариантыВажностиВзаимодействия +// ВажностьВзаимодействия - Перечисление.ВариантыВажностиВзаимодействия. // // Возвращаемое значение: -// ВажностьИнтернетПочтовогоСообщения +// ВажностьИнтернетПочтовогоСообщения. // Функция ПолучитьВажность(ВажностьВзаимодействия) Экспорт diff --git a/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl index a1d16c2b7..ea4b46065 100644 --- a/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl @@ -74,41 +74,4 @@ КонецПроцедуры -// Возвращает полное представление почтового адреса. -// -// Параметры: -// Адрес - Строка - адрес электронной почты. -// Представление - Строка - представление контакта. -// -Функция ПолучитьПолноеПредставлениеПоАдресуИПредставлению(Адрес, Представление) Экспорт - - Если ПустаяСтрока(Представление) Тогда - Возврат Адрес; - ИначеЕсли ПустаяСтрока(Адрес) Тогда - Возврат Представление; - Иначе - Возврат Представление + " <" + Адрес + ">"; - КонецЕсли; - -КонецФункции - -// По адресу и представлению ищет в соответствии контакт. -// -// Параметры: -// Адрес - Строка - адрес электронной почты. -// Представление - Строка - представление контакта. -// Контакт - СправочникСсылка - контакт, значение которого будет изменено, если будет -// найдено по адресу и представлению значение в соответствии. -// СоотвКонтактов - Соответствие - соответствие в котором будет происходить поиск. -// -Процедура ИсправитьКонтакт(Адрес, Представление, Контакт, соотвКонтактов) Экспорт - - ЗначениеКонтакта = соотвКонтактов.Получить( - ПолучитьПолноеПредставлениеПоАдресуИПредставлению(Адрес, Представление)); - Если ЗначениеКонтакта <> Неопределено Тогда - Контакт = ЗначениеКонтакта; - КонецЕсли; - -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/CommonModules/ФайловыеФункции/Module.bsl b/SSL/src/CommonModules/ФайловыеФункции/Module.bsl index 5f923df26..9ef516dcf 100644 --- a/SSL/src/CommonModules/ФайловыеФункции/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункции/Module.bsl @@ -93,3 +93,28 @@ КонецФункции #КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура СобратьСтатистикуКонфигурации() Экспорт + + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга") Тогда + Возврат; + КонецЕсли; + + МодульЦентрМониторинга = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторинга"); + + ТекстЗапроса = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(1) КАК Количество + |ИЗ + | Справочник.УчетныеЗаписиСинхронизацииФайлов КАК УчетныеЗаписиСинхронизацииФайлов"; + + Запрос = Новый Запрос(ТекстЗапроса); + Выборка = Запрос.Выполнить().Выбрать(); + + МодульЦентрМониторинга.ЗаписатьСтатистикуОбъектаКонфигурации("Справочник.УчетныеЗаписиСинхронизацииФайлов", Выборка.Количество()); + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебный/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебный/Module.bsl index 043471ea1..a1597b171 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебный/Module.bsl @@ -17,7 +17,7 @@ // ПриОпределенииНаличияХранимыхФайлов, // ПриПолученииХранимыхФайлов, // ПриОпределенииНавигационнойСсылкиФайла, -// ПриОпределенииИмениФайлаСПутемКДвоичнымДанным, +// ПриОпределенииИмениФайлаСПутемКДвоичнымДанным. // // См. описание этой же процедуры в модуле СтандартныеПодсистемыСервер. Процедура ПриДобавленииСлужебныхСобытий(КлиентскиеСобытия, СерверныеСобытия) Экспорт @@ -119,10 +119,6 @@ "СтандартныеПодсистемы.БазоваяФункциональность\ПриДобавленииПараметровРаботыКлиента"].Добавить( "ФайловыеФункцииСлужебный"); - СерверныеОбработчики[ - "СтандартныеПодсистемы.БазоваяФункциональность\ПриПолученииОбъектовИсключенийПланаОбмена"].Добавить( - "ФайловыеФункцииСлужебный"); - СерверныеОбработчики[ "СтандартныеПодсистемы.БазоваяФункциональность\ПриЗаполненииРазрешенийНаДоступКВнешнимРесурсам"].Добавить( "ФайловыеФункцииСлужебный"); @@ -487,7 +483,7 @@ КонецФункции // Возвращает количество файлов, хранящихся в томах. -Функция КоличествоФайловВТомах() Экспорт +Функция КоличествоФайловВТомах() КоличествоФайловВТомах = 0; @@ -589,6 +585,53 @@ КонецЕсли; КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда + МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный"); + МодульЭлектроннаяПодписьСлужебный.ОформитьСписокПодписей(Форма, "ЭлектронныеПодписи"); + КонецЕсли; + +КонецПроцедуры + +// Только для внутреннего использования. +Процедура ПеренестиРезультатыПроверкиПодписей(ПодписиВФорме, ПодписиВОбъекте) Экспорт + + Если ПодписиВФорме.Количество() <> ПодписиВОбъекте.Количество() Тогда + Возврат; // Если объект был изменен, результаты проверки не переносятся. + КонецЕсли; + + Если ПодписиВФорме.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Свойства = Новый Структура("ДатаПроверкиПодписи, ПодписьВерна", Null, Null); + ЗаполнитьЗначенияСвойств(Свойства, ПодписиВОбъекте[0]); + Если Свойства.ДатаПроверкиПодписи = Null + Или Свойства.ПодписьВерна = Null Тогда + Возврат; // Если в объекте нет реквизитов проверки, результаты проверки не переносятся. + КонецЕсли; + + Для Каждого Строка Из ПодписиВФорме Цикл + СтрокаВОбъекте = ПодписиВОбъекте.Получить(ПодписиВФорме.Индекс(Строка)); + Если Строка.ДатаПодписи <> СтрокаВОбъекте.ДатаПодписи + Или Строка.Комментарий <> СтрокаВОбъекте.Комментарий + Или Строка.КомуВыданСертификат <> СтрокаВОбъекте.КомуВыданСертификат + Или Строка.Отпечаток <> СтрокаВОбъекте.Отпечаток + Или Строка.УстановившийПодпись <> СтрокаВОбъекте.УстановившийПодпись Тогда + Возврат; // Если объект был изменен, результаты проверки не переносятся. + КонецЕсли; + КонецЦикла; + + Для Каждого Строка Из ПодписиВФорме Цикл + СтрокаВОбъекте = ПодписиВОбъекте.Получить(ПодписиВФорме.Индекс(Строка)); + ЗаполнитьЗначенияСвойств(Свойства, СтрокаВОбъекте); + Если Строка.ДатаПроверкиПодписи = Свойства.ДатаПроверкиПодписи + И Строка.ПодписьВерна = Свойства.ПодписьВерна Тогда + Продолжить; // Не нужно устанавливать модифицированность, если результаты проверки совпадают. + КонецЕсли; + ЗаполнитьЗначенияСвойств(Свойства, Строка); + ЗаполнитьЗначенияСвойств(СтрокаВОбъекте, Свойства); + КонецЦикла; + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -705,39 +748,6 @@ КонецПроцедуры -// Возвращает Истина, если есть хранимые файлы к объекту ВнешнийОбъект. -Функция ЕстьХранимыеФайлы(ВнешнийОбъект) Экспорт - - Результат = Ложь; - - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.ФайловыеФункции\ПриОпределенииНаличияХранимыхФайлов"); - - Для каждого Обработчик Из ОбработчикиСобытия Цикл - Обработчик.Модуль.ПриОпределенииНаличияХранимыхФайлов(ВнешнийОбъект, Результат); - КонецЦикла; - - Возврат Результат; - -КонецФункции - -// Возвращает хранимые файлы к объекту ВнешнийОбъект. -// -Функция ПолучитьХранимыеФайлы(ВнешнийОбъект) Экспорт - - МассивДанных = Новый Массив; - - ОбработчикиСобытия = ОбщегоНазначения.ОбработчикиСлужебногоСобытия( - "СтандартныеПодсистемы.ФайловыеФункции\ПриПолученииХранимыхФайлов"); - - Для каждого Обработчик Из ОбработчикиСобытия Цикл - Обработчик.Модуль.ПриПолученииХранимыхФайлов(ВнешнийОбъект, МассивДанных); - КонецЦикла; - - Возврат МассивДанных; - -КонецФункции - // Получает кодировку текстового файла, указанную пользователем (если есть). // // Параметры: @@ -755,36 +765,123 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Сканирование - Функция СписокРасширенийДляПредпросмотра() Экспорт + // См. также перечисление ФорматКартинки РасширенияДляПредпросмотра = Новый СписокЗначений; + РасширенияДляПредпросмотра.Добавить("bmp"); + РасширенияДляПредпросмотра.Добавить("emf"); + РасширенияДляПредпросмотра.Добавить("gif"); + РасширенияДляПредпросмотра.Добавить("ico"); + РасширенияДляПредпросмотра.Добавить("icon"); РасширенияДляПредпросмотра.Добавить("jpg"); РасширенияДляПредпросмотра.Добавить("jpeg"); + РасширенияДляПредпросмотра.Добавить("png"); РасширенияДляПредпросмотра.Добавить("tiff"); РасширенияДляПредпросмотра.Добавить("tif"); - РасширенияДляПредпросмотра.Добавить("gif"); - РасширенияДляПредпросмотра.Добавить("bmp"); - РасширенияДляПредпросмотра.Добавить("png"); + РасширенияДляПредпросмотра.Добавить("wmf"); Возврат РасширенияДляПредпросмотра; КонецФункции +Функция СписокЗапрещенныхРасширений() Экспорт + + СписокЗапрещенныхРасширений = Новый СписокЗначений; + СписокЗапрещенныхРасширений.Добавить("ade"); + СписокЗапрещенныхРасширений.Добавить("adp"); + СписокЗапрещенныхРасширений.Добавить("app"); + СписокЗапрещенныхРасширений.Добавить("bas"); + СписокЗапрещенныхРасширений.Добавить("bat"); + СписокЗапрещенныхРасширений.Добавить("chm"); + СписокЗапрещенныхРасширений.Добавить("class"); + СписокЗапрещенныхРасширений.Добавить("cmd"); + СписокЗапрещенныхРасширений.Добавить("com"); + СписокЗапрещенныхРасширений.Добавить("cpl"); + СписокЗапрещенныхРасширений.Добавить("crt"); + СписокЗапрещенныхРасширений.Добавить("dll"); + СписокЗапрещенныхРасширений.Добавить("exe"); + СписокЗапрещенныхРасширений.Добавить("fxp"); + СписокЗапрещенныхРасширений.Добавить("hlp"); + СписокЗапрещенныхРасширений.Добавить("hta"); + СписокЗапрещенныхРасширений.Добавить("ins"); + СписокЗапрещенныхРасширений.Добавить("isp"); + СписокЗапрещенныхРасширений.Добавить("jse"); + СписокЗапрещенныхРасширений.Добавить("js"); + СписокЗапрещенныхРасширений.Добавить("lnk"); + СписокЗапрещенныхРасширений.Добавить("mda"); + СписокЗапрещенныхРасширений.Добавить("mdb"); + СписокЗапрещенныхРасширений.Добавить("mde"); + СписокЗапрещенныхРасширений.Добавить("mdt"); + СписокЗапрещенныхРасширений.Добавить("mdw"); + СписокЗапрещенныхРасширений.Добавить("mdz"); + СписокЗапрещенныхРасширений.Добавить("msc"); + СписокЗапрещенныхРасширений.Добавить("msi"); + СписокЗапрещенныхРасширений.Добавить("msp"); + СписокЗапрещенныхРасширений.Добавить("mst"); + СписокЗапрещенныхРасширений.Добавить("ops"); + СписокЗапрещенныхРасширений.Добавить("pcd"); + СписокЗапрещенныхРасширений.Добавить("pif"); + СписокЗапрещенныхРасширений.Добавить("prf"); + СписокЗапрещенныхРасширений.Добавить("prg"); + СписокЗапрещенныхРасширений.Добавить("reg"); + СписокЗапрещенныхРасширений.Добавить("scf"); + СписокЗапрещенныхРасширений.Добавить("scr"); + СписокЗапрещенныхРасширений.Добавить("sct"); + СписокЗапрещенныхРасширений.Добавить("shb"); + СписокЗапрещенныхРасширений.Добавить("shs"); + СписокЗапрещенныхРасширений.Добавить("url"); + СписокЗапрещенныхРасширений.Добавить("vb"); + СписокЗапрещенныхРасширений.Добавить("vbe"); + СписокЗапрещенныхРасширений.Добавить("vbs"); + СписокЗапрещенныхРасширений.Добавить("wsc"); + СписокЗапрещенныхРасширений.Добавить("wsf"); + СписокЗапрещенныхРасширений.Добавить("wsh"); + + Возврат СписокЗапрещенныхРасширений; + +КонецФункции + Функция ПодготовитьСтруктуруПараметровОтправки() Экспорт Возврат Новый Структура("Получатель,Тема,Текст", Неопределено, "", ""); КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Синхронизация файлов + +Функция ФайлРедактируетсяВОблаке(Файл) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | СтатусыСинхронизацииФайловСОблачнымСервисом.Файл + |ИЗ + | РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом + |ГДЕ + | СтатусыСинхронизацииФайловСОблачнымСервисом.Файл = &Файл"; + + Запрос.УстановитьПараметр("Файл", Файл); + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Возврат Истина; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в эту подсистему. // См. описание одноименной процедуры в общем модуле РегламентныеЗаданияПереопределяемый. // -Процедура ПриОпределенииЗависимостейРегламентныхЗаданий(Зависимости) Экспорт +Процедура ПриОпределенииНастроекРегламентныхЗаданий(Зависимости) Экспорт Зависимость = Зависимости.Добавить(); Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ИзвлечениеТекста; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда @@ -792,8 +889,40 @@ Зависимость.ФункциональнаяОпция = МодульПолнотекстовыйПоискСервер.ИспользоватьПолнотекстовыйПоиск(); КонецЕсли; Зависимость.ДоступноВМоделиСервиса = Ложь; + + Зависимость = Зависимости.Добавить(); + Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОчисткаНенужныхФайлов; + Зависимость.РаботаетСВнешнимиРесурсами = Истина; + + Зависимость = Зависимости.Добавить(); + Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.СинхронизацияФайлов; + Зависимость.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьСинхронизациюФайлов; + Зависимость.РаботаетСВнешнимиРесурсами = Истина; КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Синхронизация файлов с облачным сервисом +Процедура ДобавитьДоступныеПоляОтбора(ТекстЗапроса, ТипОбъекта) Экспорт + + ВсеСправочники = Справочники.ТипВсеСсылки(); + ВсеДокументы = Документы.ТипВсеСсылки(); + + Если ВсеСправочники.СодержитТип(ТипЗнч(ТипОбъекта.ЗначениеПустойСсылки)) Тогда + Справочник = Метаданные.Справочники[ТипОбъекта.Имя]; + Для Каждого Реквизит Из Справочник.Реквизиты Цикл + ТекстЗапроса = ТекстЗапроса + Символы.ПС + "СправочникПапок." + Реквизит.Имя + " КАК " + Реквизит.Имя +","; + КонецЦикла; + ИначеЕсли ВсеДокументы.СодержитТип(ТипЗнч(ТипОбъекта.ЗначениеПустойСсылки)) Тогда + Документ = Метаданные.Документы[ТипОбъекта.Имя]; + Для Каждого Реквизит Из Документ.Реквизиты Цикл + Если Реквизит.Тип = Новый ОписаниеТипов("Дата") Тогда + ТекстЗапроса = ТекстЗапроса + Символы.ПС + "РАЗНОСТЬДАТ(" + Реквизит.Имя + ", &ТекущаяДата, ДЕНЬ) Как ДнейДоУдаленияОт" + Реквизит.Имя + ","; + КонецЕсли; + ТекстЗапроса = ТекстЗапроса + Символы.ПС + "СправочникПапок." + Реквизит.Имя + ","; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -813,7 +942,26 @@ Обработчик.Версия = "2.1.1.6"; Обработчик.Процедура = "ФайловыеФункцииСлужебный.ПеренестиКонстантыРасширений"; -КонецПроцедуры + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.2.70"; + Обработчик.ОбщиеДанные = Истина; + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.Процедура = "ФайловыеФункцииСлужебный.ОбновитьСписокЗапрещенныхРасширений"; + Обработчик.РежимВыполнения = "Оперативно"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.2.70"; + Обработчик.НачальноеЗаполнение = Истина; + Обработчик.Процедура = "ФайловыеФункцииСлужебный.ОбновитьСписокЗапрещенныхРасширенийВОбластиДанных"; + Обработчик.РежимВыполнения = "Оперативно"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.3.2.105"; + Обработчик.ОбщиеДанные = Истина; + Обработчик.Процедура = "ФайловыеФункцииСлужебный.ОбновитьПутьТомаLinux"; + Обработчик.РежимВыполнения = "Оперативно"; + +КонецПроцедуры // Заполняет структуру параметров, необходимых для работы клиентского кода // конфигурации. @@ -837,25 +985,6 @@ КонецПроцедуры -// Используется для получения объектов метаданных, которые не следует включать в состав плана обмена. -// Если подсистема имеет объекты метаданных, которые не следует включать в состав плана обмена, -// то в параметр <Объект> необходимо добавить эти объекты метаданных. -// -// Параметры: -// Объекты - Массив. Массив объектов метаданных конфигурации, которые не следует включать в состав плана обмена. -// РаспределеннаяИнформационнаяБаза (только чтение) - Булево. Признак получения объектов для плана обмена РИБ. -// Истина - требуется получить список объектов-исключений плана обмена РИБ; -// Ложь - требуется получить список для плана обмена НЕ РИБ. -// -Процедура ПриПолученииОбъектовИсключенийПланаОбмена(Объекты, Знач РаспределеннаяИнформационнаяБаза) Экспорт - - Объекты.Добавить(Метаданные.Константы.ИзвлекатьТекстыФайловНаСервере); - Объекты.Добавить(Метаданные.Константы.ХранитьФайлыВТомахНаДиске); - - Объекты.Добавить(Метаданные.Справочники.ТомаХраненияФайлов); - -КонецПроцедуры - // Заполняет перечень запросов внешних разрешений, которые обязательно должны быть предоставлены // при создании информационной базы или обновлении программы. // @@ -876,7 +1005,7 @@ // гарантируется с помощью других механизмов. // // Параметры: -// Типы - Массив(ОбъектМетаданных) +// Типы - Массив(ОбъектМетаданных). // Процедура ПриЗаполненииТиповОбщихДанныхНеТребующихСопоставлениеСсылокПриЗагрузке(Типы) Экспорт @@ -891,12 +1020,26 @@ // Содержит настройки размещения вариантов отчетов в панели отчетов. // // Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// Настройки - Коллекция - Содержит настройки всех отчетов и вариантов конфигурации. +// Используется для передачи в параметрах вспомогательных методов. // // Описание: // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // +// Вспомогательные методы: +// 1. Функции ОписаниеОтчета и ОписаниеВарианта формируют описание настроек отчета и варианта для последующего изменения: +// НастройкиОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.<ИмяОтчета>); +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// Возвращаемые коллекции содержат одинаковый набор свойств. +// НастройкиОтчета используются как умолчания для вариантов, описания которых еще не получены. +// Подробнее - см. "свойства для изменения" в комментарии к ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// 2. Процедура УстановитьРежимВыводаВПанеляхОтчетов позволяет настроить режим группировки вариантов в панелях отчетов: +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Отчеты.<ИмяОтчета>, Истина/Ложь); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, Метаданные.Подсистемы.<ИмяПодсистемы>, Истина/Ложь); +// 3. Процедура НастроитьОтчетВМодулеМенеджера позволяет переопределять настройки отчета в его модуле менеджера: +// ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.<ИмяОтчета>); +// Процедура ПриНастройкеВариантовОтчетов(Настройки) Экспорт МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); МодульВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ОбъемНенужныхФайлов); @@ -909,6 +1052,9 @@ // Подготовка параметров и предварительные проверки перед созданием файлового начального образа. // Функция ПодготовитьДанныеДляСозданияФайловогоНачальногоОбраза(СтруктураПараметров) Экспорт + + Результат = Новый Структура("ДанныеПодготовлены, ТребуетсяПодтверждение, ТекстВопроса", Истина, Ложь, ""); + Узел = СтруктураПараметров.Узел; УникальныйИдентификаторФормы = СтруктураПараметров.УникальныйИдентификаторФормы; Язык = СтруктураПараметров.Язык; @@ -917,9 +1063,6 @@ ПутьКАрхивуСФайламиТомовWindows = СтруктураПараметров.ПутьКАрхивуСФайламиТомовWindows; ПутьКАрхивуСФайламиТомовLinux = СтруктураПараметров.ПутьКАрхивуСФайламиТомовLinux; - // Проверяем состав плана обмена. - СтандартныеПодсистемыСервер.ПроверитьСоставПланаОбмена(Узел); - ПутьКАрхивуСФайламиТомов = ""; ПолноеИмяФайловойБазы = ""; @@ -938,99 +1081,88 @@ ПараметрыРаботыКлиента = СтандартныеПодсистемыВызовСервера.ПараметрыРаботыКлиента(); Если НЕ ПараметрыРаботыКлиента.ИнформационнаяБазаФайловая Тогда - Если ЕстьФайлыВТомах Тогда + Если ЕстьФайлыВТомах И Не ПустаяСтрока(ПутьКАрхивуСФайламиТомов) И (Лев(ПутьКАрхивуСФайламиТомов, 2) <> "\\" + ИЛИ СтрНайти(ПутьКАрхивуСФайламиТомов, ":") <> 0) Тогда - Если Не ПустаяСтрока(ПутьКАрхивуСФайламиТомов) - И (Лев(ПутьКАрхивуСФайламиТомов, 2) <> "\\" - ИЛИ СтрНайти(ПутьКАрхивуСФайламиТомов, ":") <> 0) Тогда - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Путь к архиву с файлами томов должен быть - |в формате UNC (\\servername\resource)'"), - , - "ПутьКАрхивуСФайламиТомовWindows"); - Возврат Ложь; - КонецЕсли; + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Путь к архиву с файлами томов должен быть + |в формате UNC (\\servername\resource)'"), + , + "ПутьКАрхивуСФайламиТомовWindows"); + Результат.ДанныеПодготовлены = Ложь; КонецЕсли; - КонецЕсли; - - Если НЕ ПараметрыРаботыКлиента.ИнформационнаяБазаФайловая Тогда Если Не ПустаяСтрока(ПолноеИмяФайловойБазы) И (Лев(ПолноеИмяФайловойБазы, 2) <> "\\" ИЛИ СтрНайти(ПолноеИмяФайловойБазы, ":") <> 0) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Путь к файловой базе должен быть |в формате UNC (\\servername\resource)'"), , "ПолноеИмяФайловойБазыWindows"); - Возврат Ложь; + Результат.ДанныеПодготовлены = Ложь; КонецЕсли; КонецЕсли; - Иначе ПутьКАрхивуСФайламиТомов = ПутьКАрхивуСФайламиТомовLinux; ПолноеИмяФайловойБазы = ПолноеИмяФайловойБазыLinux; КонецЕсли; Если ПустаяСтрока(ПолноеИмяФайловойБазы) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Укажите полное имя файловой базы (файл 1cv8.1cd)'"),, "ПолноеИмяФайловойБазыWindows"); - Возврат Ложь; + Результат.ДанныеПодготовлены = Ложь; + ИначеЕсли Результат.ДанныеПодготовлены Тогда + ФайлБазы = Новый Файл(ПолноеИмяФайловойБазы); - КонецЕсли; - - ФайлБазы = Новый Файл(ПолноеИмяФайловойБазы); - - Если ФайлБазы.Существует() Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Файл ""%1"" уже существует. - |Введите другое имя файла.'"), - ПолноеИмяФайловойБазы),, "ПолноеИмяФайловойБазыWindows"); - Возврат Ложь; - КонецЕсли; - - Если ЕстьФайлыВТомах Тогда - - Если ПустаяСтрока(ПутьКАрхивуСФайламиТомов) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Укажите полное имя архива с файлами томов (файл *.zip)'"),, - "ПутьКАрхивуСФайламиТомовWindows"); - Возврат Ложь; + Если ЕстьФайлыВТомах Тогда + Если ПустаяСтрока(ПутьКАрхивуСФайламиТомов) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Укажите полное имя архива с файлами томов (файл *.zip)'"),, + "ПутьКАрхивуСФайламиТомовWindows"); + Результат.ДанныеПодготовлены = Ложь; + Иначе + Файл = Новый Файл(ПутьКАрхивуСФайламиТомов); + + Если Файл.Существует() И ФайлБазы.Существует() Тогда + Результат.ТекстВопроса = СтрШаблон(НСтр("ru = 'Файлы ""%1"" и ""%2"" уже существуют. + |Заменить существующие файлы?'"), ПутьКАрхивуСФайламиТомов, ПолноеИмяФайловойБазы); + Результат.ТребуетсяПодтверждение = Истина; + ИначеЕсли Файл.Существует() Тогда + Результат.ТекстВопроса = СтрШаблон(НСтр("ru = 'Файл ""%1"" уже существует. + |Заменить существующий файл?'"), ПутьКАрхивуСФайламиТомов); + Результат.ТребуетсяПодтверждение = Истина; + КонецЕсли; + КонецЕсли; КонецЕсли; - Файл = Новый Файл(ПутьКАрхивуСФайламиТомов); - - Если Файл.Существует() Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Файл ""%1"" уже существует. - |Введите другое имя файла.'"), - ПутьКАрхивуСФайламиТомов),, "ПутьКАрхивуСФайламиТомовWindows"); - Возврат Ложь; + Если Результат.ДанныеПодготовлены Тогда + Если ФайлБазы.Существует() И НЕ Результат.ТребуетсяПодтверждение Тогда + Результат.ТекстВопроса = СтрШаблон(НСтр("ru = 'Файл ""%1"" уже существует. + |Заменить существующий файл?'"), ПолноеИмяФайловойБазы); + Результат.ТребуетсяПодтверждение = Истина; + КонецЕсли; + + // Создать временный каталог. + ИмяКаталога = ПолучитьИмяВременногоФайла(); + СоздатьКаталог(ИмяКаталога); + + // Создать временный каталог для файлов. + ИмяКаталогаФайлов = ПолучитьИмяВременногоФайла(); + СоздатьКаталог(ИмяКаталогаФайлов); + + // Для передачи пути каталога файлов в обработчик ПриОтправкеДанныхФайла. + СохранитьНастройку("ОбменФайлами", "ВременныйКаталог", ИмяКаталогаФайлов); + + // Добавляем в параметры переменные, которые потребуются для создания начального образа. + СтруктураПараметров.Вставить("ИмяКаталога", ИмяКаталога); + СтруктураПараметров.Вставить("ИмяКаталогаФайлов", ИмяКаталогаФайлов); + СтруктураПараметров.Вставить("ЕстьФайлыВТомах", ЕстьФайлыВТомах); + СтруктураПараметров.Вставить("ПутьКАрхивуСФайламиТомов", ПутьКАрхивуСФайламиТомов); + СтруктураПараметров.Вставить("ПолноеИмяФайловойБазы", ПолноеИмяФайловойБазы); КонецЕсли; - КонецЕсли; - // создать временный каталог - ИмяКаталога = ПолучитьИмяВременногоФайла(); - СоздатьКаталог(ИмяКаталога); + Возврат Результат; - // Создать временный каталог для файлов. - ИмяКаталогаФайлов = ПолучитьИмяВременногоФайла(); - СоздатьКаталог(ИмяКаталогаФайлов); - - // Для передачи пути каталога файлов в обработчик ПриОтправкеДанныхФайла. - СохранитьНастройку("ОбменФайлами", "ВременныйКаталог", ИмяКаталогаФайлов); - - // Добавляем в параметры переменные, которые потребуются для создания начального образа. - СтруктураПараметров.Вставить("ИмяКаталога", ИмяКаталога); - СтруктураПараметров.Вставить("ИмяКаталогаФайлов", ИмяКаталогаФайлов); - СтруктураПараметров.Вставить("ЕстьФайлыВТомах", ЕстьФайлыВТомах); - СтруктураПараметров.Вставить("ПутьКАрхивуСФайламиТомов", ПутьКАрхивуСФайламиТомов); - СтруктураПараметров.Вставить("ПолноеИмяФайловойБазы", ПолноеИмяФайловойБазы); - Возврат Истина; КонецФункции // Создать файловый начальный образ на сервере. . Запускается регламентным заданием. @@ -1092,14 +1224,14 @@ // Подготовка параметров и предварительные проверки перед созданием серверного начального образа. // Функция ПодготовитьДанныеДляСозданияСерверногоНачальногоОбраза(СтруктураПараметров) Экспорт + + Результат = Новый Структура("ДанныеПодготовлены, ТребуетсяПодтверждение, ТекстВопроса", Истина, Ложь, ""); + Узел = СтруктураПараметров.Узел; СтрокаСоединения = СтруктураПараметров.СтрокаСоединения; ПутьКАрхивуСФайламиТомовWindows = СтруктураПараметров.ПутьКАрхивуСФайламиТомовWindows; ПутьКАрхивуСФайламиТомовLinux = СтруктураПараметров.ПутьКАрхивуСФайламиТомовLinux; - // Проверяем состав плана обмена. - СтандартныеПодсистемыСервер.ПроверитьСоставПланаОбмена(Узел); - ПутьКАрхивуСФайламиТомов = ""; ПолноеИмяФайловойБазы = ""; @@ -1125,7 +1257,7 @@ |в формате UNC (\\servername\resource).'"), , "ПутьКАрхивуСФайламиТомовWindows"); - Возврат Ложь; + Результат.ДанныеПодготовлены = Ложь; КонецЕсли; КонецЕсли; @@ -1133,45 +1265,44 @@ ПутьКАрхивуСФайламиТомов = ПутьКАрхивуСФайламиТомовLinux; КонецЕсли; - Если ЕстьФайлыВТомах Тогда - Если ПустаяСтрока(ПутьКАрхивуСФайламиТомов) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Укажите полное имя архива с файлами томов (файл *.zip)'"), - , - "ПутьКАрхивуСФайламиТомовWindows"); - Возврат Ложь; - КонецЕсли; - - ПутьФайла = ПутьКАрхивуСФайламиТомов; - Файл = Новый Файл(ПутьФайла); - Если Файл.Существует() Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Файл ""%1"" уже существует. - |Введите другое имя файла.'"), - ПутьФайла)); - Возврат Ложь; + Если Результат.ДанныеПодготовлены Тогда + Если ЕстьФайлыВТомах И ПустаяСтрока(ПутьКАрхивуСФайламиТомов) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Укажите полное имя архива с файлами томов (файл *.zip)'"), + , + "ПутьКАрхивуСФайламиТомовWindows"); + Результат.ДанныеПодготовлены = Ложь; + Иначе + Если ЕстьФайлыВТомах Тогда + Файл = Новый Файл(ПутьКАрхивуСФайламиТомов); + Если Файл.Существует() Тогда + Результат.ТекстВопроса = СтрШаблон(НСтр("ru = 'Файл ""%1"" уже существует. + |Заменить существующий файл?'"), ПутьКАрхивуСФайламиТомов); + Результат.ТребуетсяПодтверждение = Истина; + КонецЕсли; + КонецЕсли; + + // Создать временный каталог. + ИмяКаталога = ПолучитьИмяВременногоФайла(); + СоздатьКаталог(ИмяКаталога); + + // Создать временный каталог для файлов. + ИмяКаталогаФайлов = ПолучитьИмяВременногоФайла(); + СоздатьКаталог(ИмяКаталогаФайлов); + + // Для передачи пути каталога файлов в обработчик ПриОтправкеДанныхФайла. + СохранитьНастройку("ОбменФайлами", "ВременныйКаталог", ИмяКаталогаФайлов); + + // Добавляем в параметры переменные, которые потребуются для создания начального образа. + СтруктураПараметров.Вставить("ЕстьФайлыВТомах", ЕстьФайлыВТомах); + СтруктураПараметров.Вставить("ПутьФайла", ПутьКАрхивуСФайламиТомов); + СтруктураПараметров.Вставить("ИмяКаталога", ИмяКаталога); + СтруктураПараметров.Вставить("ИмяКаталогаФайлов", ИмяКаталогаФайлов); КонецЕсли; КонецЕсли; - // создать временный каталог - ИмяКаталога = ПолучитьИмяВременногоФайла(); - СоздатьКаталог(ИмяКаталога); + Возврат Результат; - // Создать временный каталог для файлов. - ИмяКаталогаФайлов = ПолучитьИмяВременногоФайла(); - СоздатьКаталог(ИмяКаталогаФайлов); - - // Для передачи пути каталога файлов в обработчик ПриОтправкеДанныхФайла. - СохранитьНастройку("ОбменФайлами", "ВременныйКаталог", ИмяКаталогаФайлов); - - // Добавляем в параметры переменные, которые потребуются для создания начального образа. - СтруктураПараметров.Вставить("ЕстьФайлыВТомах", ЕстьФайлыВТомах); - СтруктураПараметров.Вставить("ПутьФайла", ПутьФайла); - СтруктураПараметров.Вставить("ИмяКаталога", ИмяКаталога); - СтруктураПараметров.Вставить("ИмяКаталогаФайлов", ИмяКаталогаФайлов); - - Возврат Истина; КонецФункции // Создать серверный начальный образ на сервере. Запускается регламентным заданием. @@ -1468,9 +1599,86 @@ СписокРасширенийФайловOpenDocument = Константы.СписокРасширенийФайловOpenDocument.Получить(); Константы.СписокРасширенийФайловOpenDocumentОбластиДанных.Установить(СписокРасширенийФайловOpenDocument); - КонецЕсли; + КонецЕсли; -КонецПроцедуры +КонецПроцедуры + +Процедура ОбновитьСписокЗапрещенныхРасширений() Экспорт + + СписокЗапрещенныхРасширенийДляЗагрузки = СписокЗапрещенныхРасширений(); + + СписокЗапрещенныхРасширенийВБазе = Константы.СписокЗапрещенныхРасширений.Получить(); + МассивЗапрещенныхРасширений = СтрРазделить(СписокЗапрещенныхРасширенийВБазе, " "); + ОбновитьСписокЗапрещенныхРасширений = Ложь; + Для Каждого Расширение Из СписокЗапрещенныхРасширенийДляЗагрузки Цикл + Если МассивЗапрещенныхРасширений.Найти(ВРег(Расширение)) = Неопределено Тогда + ОбновитьСписокЗапрещенныхРасширений = Истина; + МассивЗапрещенныхРасширений.Добавить(ВРег(Расширение)); + КонецЕсли; + КонецЦикла; + СписокЗапрещенныхРасширенийВБазе = СтрСоединить(МассивЗапрещенныхРасширений, " "); + Если ОбновитьСписокЗапрещенныхРасширений Тогда + Константы.СписокЗапрещенныхРасширений.Установить(СписокЗапрещенныхРасширенийВБазе); + КонецЕсли; + +КонецПроцедуры + +Процедура ОбновитьСписокЗапрещенныхРасширенийВОбластиДанных() Экспорт + + СписокЗапрещенныхРасширенийДляЗагрузки = СписокЗапрещенныхРасширений(); + + ОбновитьСписокЗапрещенныхРасширенийОбластиДанных = Ложь; + СписокЗапрещенныхРасширенийОбластиДанных = Константы.СписокЗапрещенныхРасширенийОбластиДанных.Получить(); + МассивЗапрещенныхРасширенийОбластиДанных = СтрРазделить(СписокЗапрещенныхРасширенийОбластиДанных, " "); + Для Каждого Расширение Из СписокЗапрещенныхРасширенийДляЗагрузки Цикл + Если МассивЗапрещенныхРасширенийОбластиДанных.Найти(ВРег(Расширение)) = Неопределено Тогда + МассивЗапрещенныхРасширенийОбластиДанных.Добавить(ВРег(Расширение)); + ОбновитьСписокЗапрещенныхРасширенийОбластиДанных = Истина; + КонецЕсли; + КонецЦикла; + СписокЗапрещенныхРасширенийОбластиДанных = СтрСоединить(МассивЗапрещенныхРасширенийОбластиДанных, " "); + Если ОбновитьСписокЗапрещенныхРасширенийОбластиДанных Тогда + Константы.СписокЗапрещенныхРасширенийОбластиДанных.Установить(СписокЗапрещенныхРасширенийОбластиДанных); + КонецЕсли; + +КонецПроцедуры + +Процедура ОбновитьПутьТомаLinux() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ТомаХраненияФайлов.Ссылка + |ИЗ + | Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов + |ГДЕ + | ТомаХраненияФайлов.ПолныйПутьLinux ПОДОБНО ""%/\"""; + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + НачатьТранзакцию(); + Попытка + Том = Выборка.Ссылка.ПолучитьОбъект(); + Том.ПолныйПутьLinux = СтрЗаменить(Том.ПолныйПутьLinux , "/\", "/"); + Том.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось обработать том хранения файлов: %1 по причине: + |%2'"), + Выборка.Ссылка, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, + Выборка.Ссылка.Метаданные(), Выборка.Ссылка, ТекстСообщения); + КонецПопытки; + + КонецЦикла; + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Обработчики условных вызовов в другие подсистемы. @@ -1509,7 +1717,7 @@ // // Возвращаемое значение: // Строка кодировки -Процедура ПриОпределенииКодировкиВерсииФайла(ВерсияСсылка, Кодировка) Экспорт +Процедура ПриОпределенииКодировкиВерсииФайла(ВерсияСсылка, Кодировка) Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда МодульРаботаСФайламиСлужебныйВызовСервера = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебныйВызовСервера"); @@ -1672,7 +1880,7 @@ Если НастройкаОчистки.Действие = Перечисления.ВариантыОчисткиФайлов.ОчиститьФайлыИВерсии Тогда ФайлДляПометки = Файл.ФайлСсылка.ПолучитьОбъект(); // Пропускаем удаление, если файл занят для редактирования - Если Не ФайлДляПометки.Редактирует.Пустая() Тогда + Если ЗначениеЗаполнено(ФайлДляПометки.Редактирует) Тогда Продолжить; КонецЕсли; ФайлДляПометки.УстановитьПометкуУдаления(Истина); @@ -1876,6 +2084,7 @@ МодульРаботаСФайламиПереопределяемый = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиПереопределяемый"); МассивОбъектов = МодульРаботаСФайламиПереопределяемый.ОбъектыИсключенияПриОчисткеФайлов(); + МодульРаботаСФайламиПереопределяемый.ПриОпределенииОбъектовИсключенияОчисткиФайлов(МассивОбъектов); Для Каждого ОбъектМетаданных Из МассивОбъектов Цикл Массив.Добавить(ОбъектМетаданных); КонецЦикла; @@ -1885,7 +2094,8 @@ Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрисоединенныеФайлы") Тогда МодульПрисоединенныеПереопределяемый = ОбщегоНазначения.ОбщийМодуль("ПрисоединенныеФайлыПереопределяемый"); - МассивОбъектов = МодульПрисоединенныеПереопределяемый.ОбъектыИсключенияПриОчисткеФайлов(); + МассивОбъектов = МодульПрисоединенныеПереопределяемый.ОбъектыИсключенияПриОчисткеФайлов(); + МодульПрисоединенныеПереопределяемый.ПриОпределенииОбъектовИсключенияОчисткиФайлов(МассивОбъектов); Для Каждого ОбъектМетаданных Из МассивОбъектов Цикл Массив.Добавить(ОбъектМетаданных); КонецЦикла; @@ -1896,4 +2106,1935 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Синхронизация файлов + +Функция ПриОпределенииОбъектовИсключенияСинхронизацииФайлов() Экспорт + + Массив = Новый Массив; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + + МодульРаботаСФайламиПереопределяемый = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиПереопределяемый"); + МодульРаботаСФайламиПереопределяемый.ПриОпределенииОбъектовИсключенияСинхронизацииФайлов(Массив); + + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрисоединенныеФайлы") Тогда + + МодульПрисоединенныеПереопределяемый = ОбщегоНазначения.ОбщийМодуль("ПрисоединенныеФайлыПереопределяемый"); + МодульПрисоединенныеПереопределяемый.ПриОпределенииОбъектовИсключенияСинхронизацииФайлов(Массив); + + КонецЕсли; + + Возврат Массив; + +КонецФункции + +// Проверяет, была ли ошибка при выполнении HTTP запроса, и вызывает соответствующее исключение. +Процедура ПроверитьИсключениеHTTP1С(Ответ, АдресСервера) + Если (Ответ.КодСостояния >= 400) И (Ответ.КодСостояния <= 599) Тогда + ШаблонОшибки = НСтр("ru = 'Ошибка HTTP 1С : %1 в %2'"); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, Ответ.КодСостояния, РаскодироватьСтроку(АдресСервера, СпособКодированияСтроки.URLВКодировкеURL)); + КонецЕсли; +КонецПроцедуры + +// Выполняет метод протокола webdav +Процедура ВыполнитьМетодWebdav(ИмяМетода, Href, СоответствиеЗаголовков, СтруктураОбмена, XMLЗапрос="", ТекстПротокола = Неопределено) + + СтруктураHref = СтруктураURIРаскодированная(Href); + + HTTP = СоздатьHTTPСоединениеWebdav(СтруктураHref, СтруктураОбмена); + + HTTPЗапросWebdav = Новый HTTPЗапрос(КодироватьСтроку(СтруктураHref.ПутьНаСервере, СпособКодированияСтроки.URLВКодировкеURL), СоответствиеЗаголовков); + + Если ЗначениеЗаполнено(XMLЗапрос) Тогда + HTTPЗапросWebdav.УстановитьТелоИзСтроки(XMLЗапрос); + КонецЕсли; + + Если ТекстПротокола<>Неопределено Тогда + ТекстПротокола = ТекстПротокола + ?(ПустаяСтрока(ТекстПротокола), "", Символы.ПС) + + ИмяМетода + " " + Href + Символы.ПС + Символы.ПС + XMLЗапрос + Символы.ПС; + КонецЕсли; + + СтруктураОбмена.Ответ = HTTP.ВызватьHTTPМетод(ИмяМетода,HTTPЗапросWebdav); + + Если ТекстПротокола<>Неопределено Тогда + ТекстПротокола = ТекстПротокола + ?(ПустаяСтрока(ТекстПротокола), "", Символы.ПС) + "HTTP RESPONSE " + + СтруктураОбмена.Ответ.КодСостояния + Символы.ПС + Символы.ПС; + Для каждого ЗаголовокОтвета Из СтруктураОбмена.Ответ.Заголовки Цикл + ТекстПротокола = ТекстПротокола+ЗаголовокОтвета.Ключ+": " + ЗаголовокОтвета.Значение + Символы.ПС; + КонецЦикла; + ТекстПротокола = ТекстПротокола+Символы.ПС+СтруктураОбмена.Ответ.ПолучитьТелоКакСтроку() + Символы.ПС; + КонецЕсли; + + ПроверитьИсключениеHTTP1С(СтруктураОбмена.Ответ,Href); + +КонецПроцедуры + +// Обновляет уникальный служебный реквизит файла на сервере webdav +Процедура ОбновитьUID1CФайла(Href, UID1C, ПараметрыСинхронизации) + + ЗаголовкиHTTP = Новый Соответствие; + ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; + ЗаголовкиHTTP["Content-type"] = "text/xml"; + ЗаголовкиHTTP["Accept"] = "text/xml"; + + ВыполнитьМетодWebdav("PROPPATCH",Href,ЗаголовкиHTTP,ПараметрыСинхронизации, + "<?xml version=""1.0"" encoding=""utf-8""?> + |<D:propertyupdate xmlns:D=""DAV:"" xmlns:U=""tsov.pro""> + | <D:set><D:prop> + | <U:UID1C>"+UID1C+"</U:UID1C> + | </D:prop></D:set> + |</D:propertyupdate>"); + +КонецПроцедуры + +// Считывает уникальный служебный реквизит файла на сервере webdav +Функция ПолучитьUID1C(Href,ПараметрыСинхронизации) + + ЗаголовкиHTTP = Новый Соответствие; + ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; + ЗаголовкиHTTP["Content-type"] = "text/xml"; + ЗаголовкиHTTP["Accept"] = "text/xml"; + ЗаголовкиHTTP["Depth"] = "0"; + + ВыполнитьМетодWebdav("PROPFIND",Href,ЗаголовкиHTTP,ПараметрыСинхронизации, + "<?xml version=""1.0"" encoding=""utf-8""?> + |<D:propfind xmlns:D=""DAV:"" xmlns:U=""tsov.pro""><D:prop> + |<U:UID1C /> + |</D:prop></D:propfind>"); + + КонтекстXml = ОпределитьКонтекстXML(ПараметрыСинхронизации.Ответ.ПолучитьТелоКакСтроку()); + + НайденныеEtag = ВычислитьXPath("//*[local-name()='propstat'][contains(./*[local-name()='status'],'200 OK')]/*[local-name()='prop']/*[local-name()='UID1C']",КонтекстXml).ПолучитьСледующий(); + Если НайденныеEtag<>Неопределено Тогда + Возврат НайденныеEtag.ТекстовоеСодержимое; + КонецЕсли; + + Возврат ""; + +КонецФункции + +// Проверяет, поддерживает ли сервер webdav пользовательские свойства для файла +Функция ПроверитьВозможностьUID1C(Href, UID1C, ПараметрыСинхронизации) + + Попытка + + ОбновитьUID1CФайла(Href, UID1C, ПараметрыСинхронизации); + Возврат ЗначениеЗаполнено(ПолучитьUID1C(Href, ПараметрыСинхронизации)); + + Исключение + + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки(), ПараметрыСинхронизации); + + КонецПопытки; + + Возврат Ложь; + +КонецФункции + +// Выполняет MCKOL на сервере webdav +Процедура ВызватьМетодMKCOL(Href, ПараметрыСинхронизации) + + ЗаголовкиHTTP = Новый Соответствие; + ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; + ВыполнитьМетодWebdav("MKCOL",Href,ЗаголовкиHTTP,ПараметрыСинхронизации); + +КонецПроцедуры // ВызватьМетодMKCOL() + +// Выполняет DELETE на сервере webdav +Процедура ВызватьМетодDELETE(Href, ПараметрыСинхронизации) + + HrefБезСлеша = ЗакончитьБезСлеша(Href); + ЗаголовкиHTTP = Новый Соответствие; + ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; + ВыполнитьМетодWebdav("DELETE", HrefБезСлеша, ЗаголовкиHTTP, ПараметрыСинхронизации); + +КонецПроцедуры + +// Получает Etag файла на сервере +Функция ПолучитьEtag(Href,ПараметрыСинхронизации) + + ЗаголовкиHTTP = Новый Соответствие; + ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; + ЗаголовкиHTTP["Content-type"] = "text/xml"; + ЗаголовкиHTTP["Accept"] = "text/xml"; + ЗаголовкиHTTP["Depth"] = "0"; + + ВыполнитьМетодWebdav("PROPFIND",Href,ЗаголовкиHTTP,ПараметрыСинхронизации, + "<?xml version=""1.0"" encoding=""utf-8""?> + |<D:propfind xmlns:D=""DAV:""><D:prop> + |<D:getetag /> + |</D:prop></D:propfind>"); + + КонтекстXml = ОпределитьКонтекстXML(ПараметрыСинхронизации.Ответ.ПолучитьТелоКакСтроку()); + + НайденныеEtag = ВычислитьXPath("//*[local-name()='propstat'][contains(./*[local-name()='status'],'200 OK')]/*[local-name()='prop']/*[local-name()='getetag']",КонтекстXml).ПолучитьСледующий(); + Если НайденныеEtag<>Неопределено Тогда + Возврат НайденныеEtag.ТекстовоеСодержимое; + КонецЕсли; + + Возврат ""; +КонецФункции + +// Инициализирует объект HTTPСоединение +Функция СоздатьHTTPСоединениеWebdav(СтруктураHref,ПараметрыСинхронизации) + + Если НЕ ЗначениеЗаполнено(СтруктураHref.Порт) Тогда + HTTP = Новый HTTPСоединение( + СтруктураHref.Хост, + , + ПараметрыСинхронизации.Логин, + ПараметрыСинхронизации.Пароль, + , + , + ?(СтруктураHref.Схема="https",Новый(Тип("ЗащищенноеСоединениеOpenSSL")),Неопределено)); + Иначе + HTTP = Новый HTTPСоединение( + СтруктураHref.Хост, + СтруктураHref.Порт, + ПараметрыСинхронизации.Логин, + ПараметрыСинхронизации.Пароль, + , + , + ?(СтруктураHref.Схема="https",Новый(Тип("ЗащищенноеСоединениеOpenSSL")),Неопределено)); + КонецЕсли; + + Возврат HTTP; + +КонецФункции // + +// Вызывает метод GET на сервере webdav и возвращает адрес загруженного файла во временном хранилище. +Функция ВызватьМетодGET(Href, Etag, ПараметрыСинхронизации, ДатаМодификацииФайла = Неопределено, ДлинаФайла = Неопределено) + + СтруктураHref = СтруктураURIРаскодированная(Href); + + HTTP = СоздатьHTTPСоединениеWebdav(СтруктураHref,ПараметрыСинхронизации); + + ЗаголовкиHTTP = Новый Соответствие; + ЗаголовкиHTTP["User-Agent"]="1C Enterprise 8.3"; + ЗаголовкиHTTP["Accept"]="application/octet-stream"; + + HTTPЗапросWebdav = Новый HTTPЗапрос(КодироватьСтроку(СтруктураHref.ПутьНаСервере,СпособКодированияСтроки.URLВКодировкеURL),ЗаголовкиHTTP); + + ПараметрыСинхронизации.Ответ = HTTP.Получить(HTTPЗапросWebdav); + + ПроверитьИсключениеHTTP1С(ПараметрыСинхронизации.Ответ, Href); + + ФайлСДвоичнымиДанными = ПараметрыСинхронизации.Ответ.ПолучитьТелоКакДвоичныеДанные(); + + Etag = ?(ПараметрыСинхронизации.Ответ.Заголовки["ETag"] = Неопределено, "", ПараметрыСинхронизации.Ответ.Заголовки["ETag"]); + ДатаМодификацииФайла = ?(ПараметрыСинхронизации.Ответ.Заголовки["Last-Modified"] = Неопределено,ТекущаяУниверсальнаяДата(),ДатаRFC1123(ПараметрыСинхронизации.Ответ.Заголовки["Last-Modified"])); + ДлинаФайла = ФайлСДвоичнымиДанными.Размер(); + + АдресВременныхДанных = ПоместитьВоВременноеХранилище(ФайлСДвоичнымиДанными); + + Возврат АдресВременныхДанных; + +КонецФункции + +// Помещает файл на сервер webdav с помощью метода PUT и возвращает присвоенный etag в переменную. +Функция ВызватьМетодPUT(Href, ФайлСсылка, ПараметрыСинхронизации, ЭтоФайл) + + Если ЭтоФайл Тогда + МодульРаботаСФайламиСлужебныйВызовСервера = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебныйВызовСервера"); + ФайлСДвоичнымиДанными = МодульРаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаИДвоичныеДанные(ФайлСсылка).ДвоичныеДанные; + Иначе + МодульПрисоединенныеФайлы = ОбщегоНазначения.ОбщийМодуль("ПрисоединенныеФайлы"); + ФайлСДвоичнымиДанными = МодульПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайла(ФайлСсылка); + КонецЕсли; + + СтруктураHref = СтруктураURIРаскодированная(Href); + + HTTP = СоздатьHTTPСоединениеWebdav(СтруктураHref,ПараметрыСинхронизации); + + ЗаголовкиHTTP = Новый Соответствие; + ЗаголовкиHTTP["User-Agent"]="1C Enterprise 8.3"; + ЗаголовкиHTTP["Content-Type"]="application/octet-stream"; + + HTTPЗапросWebdav = Новый HTTPЗапрос(КодироватьСтроку(СтруктураHref.ПутьНаСервере,СпособКодированияСтроки.URLВКодировкеURL),ЗаголовкиHTTP); + + HTTPЗапросWebdav.УстановитьТелоИзДвоичныхДанных(ФайлСДвоичнымиДанными); + + ПараметрыСинхронизации.Ответ = HTTP.Записать(HTTPЗапросWebdav); + + ПроверитьИсключениеHTTP1С(ПараметрыСинхронизации.Ответ,Href); + + Возврат ПолучитьEtag(Href,ПараметрыСинхронизации); + +КонецФункции + +// Загружает файл с сервера с созданием новой версии. +Процедура ЗагрузитьФайлССервера(ПараметрыФайла, ЭтоФайл = Неопределено) + + Перем АдресЗагруженногоФайла, НовыйФайл, СтруктураИмениФайла, ФайлUID1C; + + ИмяФайла = ПараметрыФайла.ИмяФайла; + Href = ПараметрыФайла.Href; + Etag = ПараметрыФайла.Etag; + ДатаМодификацииФайла = ПараметрыФайла.ДатаМодификацииФайла; + ДлинаФайла = ПараметрыФайла.ДлинаФайла; + ДляПользователя = ПараметрыФайла.ДляПользователя; + ОбъектВладелец = ПараметрыФайла.ОбъектВладелец; + СсылкаСуществующегоФайла = ПараметрыФайла.СсылкаСуществующегоФайла; + ПараметрыСинхронизации = ПараметрыФайла.ПараметрыСинхронизации; + ТекстСобытия = НСтр("ru = 'Загрузка файла с сервера: %1'"); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, ИмяФайла), ПараметрыСинхронизации); + АдресЗагруженногоФайла = ВызватьМетодGET(Href, Etag, ПараметрыСинхронизации, ДатаМодификацииФайла, ДлинаФайла); + + Если ЭтоФайл = Неопределено Тогда + ЭтоФайл = ОбъектЯвляетсяФайлом(ПараметрыФайла.ОбъектВладелец); + КонецЕсли; + + Если АдресЗагруженногоФайла <> Неопределено Тогда + + СтруктураИмениФайла = Новый Файл(ИмяФайла); + + Если СсылкаСуществующегоФайла = Неопределено Тогда + + Если ЭтоФайл Тогда + + МодульРаботаСФайламиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиКлиентСервер"); + ОписаниеФайла = МодульРаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией"); + + ОписаниеФайла.ИмяБезРасширения = СтруктураИмениФайла.ИмяБезРасширения; + ОписаниеФайла.РасширениеБезТочки = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СтруктураИмениФайла.Расширение); + ОписаниеФайла.ВремяИзменения = МестноеВремя(ДатаМодификацииФайла,ЧасовойПоясСеанса()); + ОписаниеФайла.ВремяИзмененияУниверсальное = ДатаМодификацииФайла; + ОписаниеФайла.Размер = ДлинаФайла; + ОписаниеФайла.АдресВременногоХранилищаФайла = АдресЗагруженногоФайла; + ОписаниеФайла.Автор = ПараметрыСинхронизации.АвторФайлов; + ОписаниеФайла.НоваяВерсияАвтор = ДляПользователя; + + МодульРаботаСФайламиСлужебныйВызовСервера = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебныйВызовСервера"); + НовыйФайл = МодульРаботаСФайламиСлужебныйВызовСервера.СоздатьФайлСВерсией(ОбъектВладелец, ОписаниеФайла); + ДанныеФайла = МодульРаботаСФайламиСлужебныйВызовСервера.ДанныеФайла(НовыйФайл); + МодульРаботаСФайламиСлужебныйВызовСервера.ЗанятьФайл(ДанныеФайла, , , ПараметрыФайла.ДляПользователя); + Иначе + МодульПрисоединенныеФайлы = ОбщегоНазначения.ОбщийМодуль("ПрисоединенныеФайлы"); + ПараметрыФайла = Новый Структура; + ПараметрыФайла.Вставить("ВладелецФайлов", ОбъектВладелец); + ПараметрыФайла.Вставить("Автор", ПараметрыСинхронизации.АвторФайлов); + ПараметрыФайла.Вставить("ИмяБезРасширения", СтруктураИмениФайла.ИмяБезРасширения); + ПараметрыФайла.Вставить("РасширениеБезТочки", ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СтруктураИмениФайла.Расширение)); + ПараметрыФайла.Вставить("ВремяИзменения", МестноеВремя(ДатаМодификацииФайла,ЧасовойПоясСеанса())); + ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", ДатаМодификацииФайла); + + НовыйФайл = МодульПрисоединенныеФайлы.ДобавитьПрисоединенныйФайл(ПараметрыФайла, АдресЗагруженногоФайла); + + МодульПрисоединенныеФайлыСлужебный = ОбщегоНазначения.ОбщийМодуль("ПрисоединенныеФайлыСлужебный"); + МодульПрисоединенныеФайлыСлужебный.ЗанятьФайлДляРедактированияСервер(НовыйФайл, ПараметрыСинхронизации.АвторФайлов); + КонецЕсли; + + Иначе + + Если ЭтоФайл Тогда + + МодульРаботаСФайламиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиКлиентСервер"); + ОписаниеФайла = МодульРаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией"); + + ОписаниеФайла.ИмяБезРасширения = СтруктураИмениФайла.ИмяБезРасширения; + ОписаниеФайла.РасширениеБезТочки = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СтруктураИмениФайла.Расширение); + ОписаниеФайла.ВремяИзменения = МестноеВремя(ДатаМодификацииФайла,ЧасовойПоясСеанса()); + ОписаниеФайла.ВремяИзмененияУниверсальное = ДатаМодификацииФайла; + ОписаниеФайла.Размер = ДлинаФайла; + ОписаниеФайла.АдресВременногоХранилищаФайла = АдресЗагруженногоФайла; + ОписаниеФайла.Автор = ПараметрыСинхронизации.АвторФайлов; + ОписаниеФайла.НоваяВерсияАвтор = ПараметрыСинхронизации.АвторФайлов; + + МодульРаботаСФайламиСлужебныйВызовСервера = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебныйВызовСервера"); + ВерсияФайла = МодульРаботаСФайламиСлужебныйВызовСервера.ОбновитьВерсиюФайла(СсылкаСуществующегоФайла, ОписаниеФайла, , , ПараметрыСинхронизации.АвторФайлов); + МодульРаботаСФайламиСлужебныйВызовСервера.ОбновитьВерсиюВФайле(СсылкаСуществующегоФайла, ВерсияФайла, Неопределено); + ДанныеФайла = МодульРаботаСФайламиСлужебныйВызовСервера.ДанныеФайла(СсылкаСуществующегоФайла); + МодульРаботаСФайламиСлужебныйВызовСервера.ЗанятьФайл(ДанныеФайла, , , ПараметрыФайла.ДляПользователя); + + НовыйФайл = СсылкаСуществующегоФайла; + Иначе + ИнформацияОФайле = Новый Структура; + ИнформацияОФайле.Вставить("АдресФайлаВоВременномХранилище", АдресЗагруженногоФайла); + ИнформацияОФайле.Вставить("АдресВременногоХранилищаТекста", Неопределено); + ИнформацияОФайле.Вставить("ИмяБезРасширения", СтруктураИмениФайла.ИмяБезРасширения); + ИнформацияОФайле.Вставить("ДатаМодификацииУниверсальная", ДатаМодификацииФайла); + ИнформацияОФайле.Вставить("Расширение", ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СтруктураИмениФайла.Расширение)); + ИнформацияОФайле.Вставить("Редактирует", ПараметрыСинхронизации.АвторФайлов); + + МодульПрисоединенныеФайлы = ОбщегоНазначения.ОбщийМодуль("ПрисоединенныеФайлы"); + МодульПрисоединенныеФайлы.ОбновитьПрисоединенныйФайл(СсылкаСуществующегоФайла, ИнформацияОФайле); + НовыйФайл = СсылкаСуществующегоФайла; + КонецЕсли; + + КонецЕсли; + + ФайлUID1C = Строка(НовыйФайл.Ссылка.УникальныйИдентификатор()); + ОбновитьUID1CФайла(Href, ФайлUID1C, ПараметрыСинхронизации); + + ЗапомнитьСерверныеДанныеСсылки( + НовыйФайл.Ссылка, + Href, + Etag, + ЭтоФайл, + ОбъектВладелец, + Ложь, + ПараметрыСинхронизации.УчетнаяЗапись); + + ТекстСообщения = НСтр("ru = 'Загружен файл с сервера: %1'"); + Иначе + ТекстСообщения = НСтр("ru = 'Не удалось загрузить файл с сервера: %1'"); + КонецЕсли; + + ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ИмяФайла), ПараметрыСинхронизации); + +КонецПроцедуры + +// Записывает событие в журнал регистрации +Процедура ЗаписатьВЖурналСобытийСинхронизацииФайлов(ТекстСообщения, ПараметрыСинхронизации) + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Синхронизация файлов с облачным сервисом:'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Информация, + , + ПараметрыСинхронизации.УчетнаяЗапись, + ТекстСообщения); + +КонецПроцедуры + +// Возвращает дату, преобразованную из формата RFC 1123 в тип Дата +Функция ДатаRFC1123(ДатаСтрокойHTTP) + + ИменаМесяцев = "janfebmaraprmayjunjulaugsepoctnovdec"; + // rfc1123-date = wkday "," SP date1 SP time SP "GMT" + ПозицияПервогоПробела = СтрНайти(ДатаСтрокойHTTP, " ");//с первого пробела до второго пробела идет дата + ПодстрокаДата = Сред(ДатаСтрокойHTTP,ПозицияПервогоПробела+1); + ПодстрокаВремя = Сред(ПодстрокаДата,13); + ПодстрокаДата = Лев(ПодстрокаДата,11); + ПозицияПервогоПробела = СтрНайти(ПодстрокаВремя, " "); + ПодстрокаВремя = Лев(ПодстрокаВремя,ПозицияПервогоПробела-1); + // date1 = 2DIGIT SP month SP 4DIGIT + ПодстрокаДень = Лев(ПодстрокаДата,2); + ПодстрокаМесяц = Формат(Цел(СтрНайти(ИменаМесяцев,НРег(Сред(ПодстрокаДата,4,3))) / 3)+1,"ЧЦ=2; ЧН=00; ЧВН="); + ПодстрокаГод = Сред(ПодстрокаДата,8); + // time = 2DIGIT ":" 2DIGIT ":" 2DIGIT + ПодстрокаЧас = Лев(ПодстрокаВремя,2); + ПодстрокаМинута = Сред(ПодстрокаВремя,4,2); + ПодстрокаСекунда = Прав(ПодстрокаВремя,2); + + Возврат Дата(ПодстрокаГод+ПодстрокаМесяц+ПодстрокаДень+ПодстрокаЧас+ПодстрокаМинута+ПодстрокаСекунда); + +КонецФункции + +// Считывает основные данные о состоянии каталога на сервере. Используется для проверки подключения. +Процедура ПрочитатьПараметрыКаталога(РезультатПроверки, HttpАдрес, СтруктураОбмена) + + СтруктураАдресаHTTP = СтруктураURIРаскодированная(HttpАдрес); + АдресСервера = КодироватьURIПоСтруктуре(СтруктураАдресаHTTP); + + Попытка + // получаем каталог + ЗаголовкиHTTP = Новый Соответствие; + ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; + ЗаголовкиHTTP["Content-type"] = "text/xml"; + ЗаголовкиHTTP["Accept"] = "text/xml"; + ЗаголовкиHTTP["Depth"] = "0"; + + ВыполнитьМетодWebdav("PROPFIND", АдресСервера, ЗаголовкиHTTP, СтруктураОбмена, + "<?xml version=""1.0"" encoding=""utf-8""?> + |<D:propfind xmlns:D=""DAV:"" xmlns:U=""tsov.pro""><D:prop> + |<D:quota-used-bytes /><D:quota-available-bytes /> + |</D:prop></D:propfind>" + ,РезультатПроверки.РезультатПротокол); + + КонтекстДокументаXML = ОпределитьКонтекстXML(СтруктураОбмена.Ответ.ПолучитьТелоКакСтроку()); + + РезультатXPath = ВычислитьXPath("//*[local-name()='response']",КонтекстДокументаXML); + + НайденныйResponse = РезультатXPath.ПолучитьСледующий(); + + Пока НайденныйResponse <> Неопределено Цикл + + НайденныйPropstat = ВычислитьXPath("./*[local-name()='propstat'][contains(./*[local-name()='status'],'200 OK')]/*[local-name()='prop']", КонтекстДокументаXML, НайденныйResponse).ПолучитьСледующий(); + + Если НайденныйPropstat<>Неопределено Тогда + Для каждого ДочернийУзелPropstat Из НайденныйPropstat.ДочерниеУзлы Цикл + Если ДочернийУзелPropstat.ЛокальноеИмя = "quota-available-bytes" Тогда + Попытка + РазмерВМегабайтах = Окр(Число(ДочернийУзелPropstat.ТекстовоеСодержимое)/1024/1024, 1); + Исключение + РазмерВМегабайтах = 0; + КонецПопытки; + + ИнформацияОСвободномМесте = НСтр("ru = 'Свободное место (байт): %1(%2 Мб)'"); + + РезультатПроверки.РезультатТекст = РезультатПроверки.РезультатТекст + ?(ПустаяСтрока(РезультатПроверки.РезультатТекст), "", Символы.ПС) + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИнформацияОСвободномМесте, ДочернийУзелPropstat.ТекстовоеСодержимое, РазмерВМегабайтах); + ИначеЕсли ДочернийУзелPropstat.ЛокальноеИмя = "quota-used-bytes" Тогда + Попытка + РазмерВМегабайтах = Окр(Число(ДочернийУзелPropstat.ТекстовоеСодержимое)/1024/1024, 1); + Исключение + РазмерВМегабайтах = 0; + КонецПопытки; + + ИнформацияОЗанятомМесте = НСтр("ru = 'Занято (байт): %1(%2 Мб)'"); + + РезультатПроверки.РезультатТекст = РезультатПроверки.РезультатТекст + ?(ПустаяСтрока(РезультатПроверки.РезультатТекст), "", Символы.ПС) + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИнформацияОЗанятомМесте, ДочернийУзелPropstat.ТекстовоеСодержимое, РазмерВМегабайтах); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + НайденныйResponse = РезультатXPath.ПолучитьСледующий(); + + КонецЦикла; + + Исключение + ОписаниеОшибки = ОписаниеОшибки(); + РезультатПроверки.РезультатТекст = РезультатПроверки.РезультатТекст + ?(ПустаяСтрока(РезультатПроверки.РезультатТекст), "", Символы.ПС) + ОписаниеОшибки; + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки,СтруктураОбмена); + Отказ = Истина; + РезультатПроверки.Отказ = Истина; + КонецПопытки; + +КонецПроцедуры + +// Возвращает структуру URI +Функция СтруктураURIРаскодированная(Знач СтрокаURI) + + СтрокаURI = СокрЛП(СтрокаURI); + + // Схема + Схема = ""; + Позиция = СтрНайти(СтрокаURI, "://"); + Если Позиция > 0 Тогда + Схема = НРег(Лев(СтрокаURI, Позиция - 1)); + СтрокаURI = Сред(СтрокаURI, Позиция + 3); + КонецЕсли; + + // Строка соединения и путь на сервере + СтрокаСоединения = СтрокаURI; + ПутьНаСервере = ""; + Позиция = СтрНайти(СтрокаСоединения, "/"); + Если Позиция > 0 Тогда + // Включая первый слэш + ПутьНаСервере = Сред(СтрокаСоединения, Позиция); + СтрокаСоединения = Лев(СтрокаСоединения, Позиция - 1); + КонецЕсли; + + // Информация пользователя и имя сервера + СтрокаАвторизации = ""; + ИмяСервера = СтрокаСоединения; + Позиция = СтрНайти(СтрокаСоединения, "@"); + Если Позиция > 0 Тогда + СтрокаАвторизации = Лев(СтрокаСоединения, Позиция - 1); + ИмяСервера = Сред(СтрокаСоединения, Позиция + 1); + КонецЕсли; + + // Логин и пароль + Логин = СтрокаАвторизации; + Пароль = ""; + Позиция = СтрНайти(СтрокаАвторизации, ":"); + Если Позиция > 0 Тогда + Логин = Лев(СтрокаАвторизации, Позиция - 1); + Пароль = Сред(СтрокаАвторизации, Позиция + 1); + КонецЕсли; + + // Хост и порт + Хост = ИмяСервера; + Порт = ""; + Позиция = СтрНайти(ИмяСервера, ":"); + Если Позиция > 0 Тогда + Хост = Лев(ИмяСервера, Позиция - 1); + Порт = Сред(ИмяСервера, Позиция + 1); + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("Схема", НРег(Схема)); + Результат.Вставить("Логин", Логин); + Результат.Вставить("Пароль", Пароль); + Результат.Вставить("ИмяСервера", НРег(ИмяСервера)); + Результат.Вставить("Хост", НРег(Хост)); + Результат.Вставить("Порт", ?(ПустаяСтрока(Порт), Неопределено, Число(Порт))); + Результат.Вставить("ПутьНаСервере", РаскодироватьСтроку(ЗакончитьБезСлеша(ПутьНаСервере),СпособКодированияСтроки.URLВКодировкеURL)); + + // Путь на сервере всегда будет с начальным, но без конечного слэша, универсально для файлов и папок. + Возврат Результат; + +КонецФункции + +// Возвращает URI, составленный из структуры +Функция КодироватьURIПоСтруктуре(Знач СтруктураURI, ВключаяПутьНаСервере = Истина) + Результат = ""; + + // Протокол + Если Не ПустаяСтрока(СтруктураURI.Схема) Тогда + Результат = Результат + СтруктураURI.Схема + "://"; + КонецЕсли; + + // Авторизация + Если Не ПустаяСтрока(СтруктураURI.Логин) Тогда + Результат = Результат + СтруктураURI.Логин + ":" + СтруктураURI.Пароль + "@"; + КонецЕсли; + + // Все остальное + Результат = Результат + СтруктураURI.Хост; + Если ЗначениеЗаполнено(СтруктураURI.Порт) Тогда + Результат = Результат + ":" + ?(ТипЗнч(СтруктураURI.Порт) = Тип("Число"), Формат(СтруктураURI.Порт, "ЧГ=0"), СтруктураURI.Порт); + КонецЕсли; + + Результат = Результат + ?(ВключаяПутьНаСервере, КодироватьСтроку(ЗакончитьБезСлеша(СтруктураURI.ПутьНаСервере), СпособКодированияСтроки.URLВКодировкеURL),""); + + // Всегда без конечного слеша + Возврат Результат; + +КонецФункции + +// Возвращает строку, гарантированно начинающуюся прямым слешем +Функция НачатьСлешем(Знач ИсходнаяСтрока) + Возврат ?(Лев(ИсходнаяСтрока,1)="/",ИсходнаяСтрока,"/"+ИсходнаяСтрока); +КонецФункции + +// Возвращает строку, гарантированно заканчивающуюся без прямого слэша +Функция ЗакончитьБезСлеша(Знач ИсходнаяСтрока) + Возврат ?(Прав(ИсходнаяСтрока,1)="/",Лев(ИсходнаяСтрока,СтрДлина(ИсходнаяСтрока)-1),ИсходнаяСтрока); +КонецФункции + +// Возвращает результат сравнения путей двух URI, вне зависимости от наличия начального и конечного прямого слеша, +// кодирования спецсимволов, а так же адреса сервера. +Функция ЭтоОдинаковыеПутиURI(URI1,URI2,ЧувствительноКРегистру = Истина) + + // Гарантирует идентичность вне зависимости от слэшей и кодирования + СтруктураURI1 = СтруктураURIРаскодированная(URI1); + СтруктураURI2 = СтруктураURIРаскодированная(URI2); + Если НЕ ЧувствительноКРегистру Тогда + СтруктураURI1.ПутьНаСервере = НРег(СтруктураURI1.ПутьНаСервере); + СтруктураURI2.ПутьНаСервере = НРег(СтруктураURI2.ПутьНаСервере); + КонецЕсли; + + Возврат КодироватьURIПоСтруктуре(СтруктураURI1,Истина) = КодироватьURIПоСтруктуре(СтруктураURI2,Истина); + +КонецФункции + +// Возвращает имя файла по Href +Функция ИмяФайлаПоHref(Href) + + URI = ЗакончитьБезСлеша(Href); + ДлинаURI = СтрДлина(URI); + + // Находим последний слэш, после него будет имя файла + + Для Сч = 1 По ДлинаURI Цикл + СимволURI = Сред(URI,ДлинаURI - Сч + 1, 1); + Если СимволURI = "/" Тогда + Возврат РаскодироватьСтроку(Сред(URI,ДлинаURI - Сч + 2), СпособКодированияСтроки.КодировкаURL); + КонецЕсли; + КонецЦикла; + + Возврат РаскодироватьСтроку(URI,СпособКодированияСтроки.КодировкаURL); + +КонецФункции + +// Сохраняет данные о Href и Etag файла или папки в базе данных +Процедура ЗапомнитьСерверныеДанныеСсылки( + Ссылка, + Href, + Etag, + ЭтоФайл, + ВладелецФайла, + ЭтоПапка, + УчетнаяЗапись = Неопределено) + + ЗаписьРегистра = РегистрыСведений.СтатусыСинхронизацииФайловСОблачнымСервисом.СоздатьМенеджерЗаписи(); + ЗаписьРегистра.Файл = Ссылка; + ЗаписьРегистра.Href = Href; + ЗаписьРегистра.Etag = Etag; + ЗаписьРегистра.УникальныйИдентификатор1С = Ссылка.УникальныйИдентификатор(); + ЗаписьРегистра.ЭтоФайл = ЭтоФайл; + ЗаписьРегистра.ЭтоВладелецФайла = ЭтоПапка; + ЗаписьРегистра.ВладелецФайла = ВладелецФайла; + ЗаписьРегистра.УчетнаяЗапись = УчетнаяЗапись; + ЗаписьРегистра.Записать(Истина); + +КонецПроцедуры + +// Удаляет данные о Href и Etag файла или папки в базе данных +Процедура УдалитьСерверныеДанныеСсылки(Ссылка, УчетнаяЗапись) + + НаборРегистра = РегистрыСведений.СтатусыСинхронизацииФайловСОблачнымСервисом.СоздатьНаборЗаписей(); + НаборРегистра.Отбор.Файл.Установить(Ссылка); + НаборРегистра.Отбор.УчетнаяЗапись.Установить(УчетнаяЗапись); + НаборРегистра.Записать(Истина); + +КонецПроцедуры + +// Определяет контекст xml +Функция ОпределитьКонтекстXML(ТекстXML) + + ЧтениеXMLТекста = Новый ЧтениеXML; + ЧтениеXMLТекста.УстановитьСтроку(ТекстXML); + ПостроительDOMДляXML = Новый ПостроительDOM; + ДокументDOMДляXML = ПостроительDOMДляXML.Прочитать(ЧтениеXMLТекста); + РазыменовательИменДляXML = Новый РазыменовательПространствИменDOM(ДокументDOMДляXML); + Возврат Новый Структура("ДокументDOM,РазыменовательDOM", ДокументDOMДляXML, РазыменовательИменДляXML); + +КонецФункции + +// Вычисляет выражение xpath для контекста xml +Функция ВычислитьXPath(Выражение, Контекст, УзелКонтекста = Неопределено) + + Возврат Контекст.ДокументDOM.ВычислитьВыражениеXPath(Выражение,?(УзелКонтекста=Неопределено,Контекст.ДокументDOM,УзелКонтекста),Контекст.РазыменовательDOM); + +КонецФункции + +// Возвращает Href, рассчитанный для строки из таблицы файлов, методом поиска всех родителей. +Функция РассчитатьHref(СтрокаФайлов,ТаблицаФайлов) + // Рекурсивно собираем наименования + НайденыСтрокиФайлов = ТаблицаФайлов.Найти(СтрокаФайлов.Родитель,"ФайлСсылка"); + Если НайденыСтрокиФайлов = Неопределено Тогда + Возврат ?(ЗначениеЗаполнено(СтрокаФайлов.Наименование), КодироватьСтроку(СтрокаФайлов.Наименование,СпособКодированияСтроки.КодировкаURL)+"/",""); + Иначе + Возврат РассчитатьHref(НайденыСтрокиФайлов,ТаблицаФайлов) + КодироватьСтроку(СтрокаФайлов.Наименование,СпособКодированияСтроки.КодировкаURL)+"/"; + КонецЕсли; +КонецФункции + +// Возвращает строку таблицы файлов по URI, при этом, учитывается возможное различное написание URI +// (например, закодированное, относительное или абсолютное и т.п.). +Функция НайтиСтрокуПоURI(ИскомоеURI, ТаблицаСURI, КолонкаURI) + + Для каждого СтрокаТаблицы Из ТаблицаСURI Цикл + Если ЭтоОдинаковыеПутиURI(ИскомоеURI,СтрокаТаблицы[КолонкаURI]) Тогда + Возврат СтрокаТаблицы; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +// Вычисляется уровень строки файлов, рекурсивным алгоритмом +Функция РекурсивноУровень(СтрокаФайлов,ТаблицаФайлов) + + // Равен уровню в базе или на сервере, в зависимости от того, где он меньше + НайденыСтрокиФайлов = ТаблицаФайлов.НайтиСтроки(Новый Структура("ФайлСсылка", СтрокаФайлов.Родитель)); + КоличествоПрибавления = ?(НайденыСтрокиФайлов.Количество()=0,0,1); + Для каждого НайденнаяСтрокаФайлов Из НайденыСтрокиФайлов Цикл + КоличествоПрибавления = КоличествоПрибавления + РекурсивноУровень(НайденнаяСтрокаФайлов,ТаблицаФайлов); + КонецЦикла; + + Возврат КоличествоПрибавления; + +КонецФункции + +// Вычисляется уровень файла на сервере webdav, рекурсивным алгоритмом +Функция РекурсивноУровеньНаСервере(СтрокаФайлов,ТаблицаФайлов) + + НайденыСтрокиФайлов = ТаблицаФайлов.НайтиСтроки(Новый Структура("ФайлСсылка", СтрокаФайлов.РодительСервер)); + КоличествоПрибавления = ?(НайденыСтрокиФайлов.Количество() =0, 0, 1); + Для каждого НайденнаяСтрокаФайлов Из НайденыСтрокиФайлов Цикл + КоличествоПрибавления = КоличествоПрибавления + РекурсивноУровеньНаСервере(НайденнаяСтрокаФайлов, ТаблицаФайлов); + КонецЦикла; + + Возврат КоличествоПрибавления; + +КонецФункции + +// Вычисляет уровни всех строк таблицы файлов +Процедура ВычислитьУровеньРекурсивно(ТаблицаФайлов) + + Для каждого СтрокаФайлов Из ТаблицаФайлов Цикл + // Равен уровню в базе или на сервере, в зависимости от того, где он меньше + УровеньВБазе = РекурсивноУровень(СтрокаФайлов, ТаблицаФайлов); + УровеньНаСервере = РекурсивноУровеньНаСервере(СтрокаФайлов, ТаблицаФайлов); + Если УровеньНаСервере = 0 Тогда + СтрокаФайлов.Уровень = УровеньВБазе; + СтрокаФайлов.РодительСортировка = СтрокаФайлов.Родитель; + Иначе + Если УровеньВБазе <= УровеньНаСервере Тогда + СтрокаФайлов.Уровень = УровеньВБазе; + СтрокаФайлов.РодительСортировка = СтрокаФайлов.Родитель; + Иначе + СтрокаФайлов.Уровень = УровеньНаСервере; + СтрокаФайлов.РодительСортировка = СтрокаФайлов.РодительСервер; + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// При изменении серверного пути к папке необходимо заменить пути к подчиненным файлам, что и делает эта процедура. +Процедура РекурсивноОбновитьСсылкиПодчиненных(СтрокаФайлов,знач ToHref,знач ToHref2,ТаблицаФайлов) + + // Меняем корневую ссылку, всегда должна быть закодирована + СтрокаФайлов.ToHref = КодироватьСтроку( + СтрЗаменить( + РаскодироватьСтроку(ЗакончитьБезСлеша(СтрокаФайлов.ToHref), СпособКодированияСтроки.URLВКодировкеURL), + РаскодироватьСтроку(ЗакончитьБезСлеша(ToHref), СпособКодированияСтроки.URLВКодировкеURL), + РаскодироватьСтроку(ЗакончитьБезСлеша(ToHref2), СпособКодированияСтроки.URLВКодировкеURL)) + ,СпособКодированияСтроки.URLВКодировкеURL); + + НайденныеПодчиненныеСтроки = ТаблицаФайлов.НайтиСтроки(Новый Структура("РодительСервер", СтрокаФайлов.Ссылка)); + Для каждого ПодчиненнаяСтрока Из НайденныеПодчиненныеСтроки Цикл + РекурсивноОбновитьСсылкиПодчиненных(ПодчиненнаяСтрока,ToHref,ToHref2,ТаблицаФайлов); + КонецЦикла; + +КонецПроцедуры + +// Рекурсивно загружает перечень файлов с сервера в таблицу файлов +Процедура СкачатьДеревоФайловРекурсивно(ТекущиеСтрокиДереваФайлов, HttpАдрес, ПараметрыСинхронизации, Отказ=Ложь) + + СтруктураАдресаHTTP = СтруктураURIРаскодированная(HttpАдрес); + АдресОблачногоСервиса = КодироватьURIПоСтруктуре(СтруктураАдресаHTTP, Ложь); + АдресСервера = КодироватьURIПоСтруктуре(СтруктураАдресаHTTP); + + Попытка + // Получаем каталог + ЗаголовкиHTTP = Новый Соответствие; + ЗаголовкиHTTP["User-Agent"] = "1C Enterprise 8.3"; + ЗаголовкиHTTP["Content-type"] = "text/xml"; + ЗаголовкиHTTP["Accept"] = "text/xml"; + ЗаголовкиHTTP["Depth"] = "1"; + + ВыполнитьМетодWebdav("PROPFIND",АдресСервера,ЗаголовкиHTTP,ПараметрыСинхронизации, + "<?xml version=""1.0"" encoding=""utf-8""?> + |<D:propfind xmlns:D=""DAV:"" xmlns:U=""tsov.pro""><D:prop> + |<D:getetag /><U:UID1C /><D:resourcetype /> + |<D:getlastmodified /><D:getcontentlength /> + |</D:prop></D:propfind>"); + + КонтекстДокументаXML = ОпределитьКонтекстXML(ПараметрыСинхронизации.Ответ.ПолучитьТелоКакСтроку()); + + РезультатXPath = ВычислитьXPath("//*[local-name()='response']", КонтекстДокументаXML); + + НайденныйResponse = РезультатXPath.ПолучитьСледующий(); + + Пока НайденныйResponse <> Неопределено Цикл + + // Href есть всегда, иначе это критическая ошибка + НайденныйHref = ВычислитьXPath("./*[local-name()='href']", КонтекстДокументаXML, НайденныйResponse).ПолучитьСледующий(); + Если НайденныйHref = Неопределено Тогда + ТекстОшибки = НСтр("ru = 'Ошибка ответа от сервера: не найден HREF в %1'"); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, АдресСервера); + КонецЕсли; + + ТекстHref = ЗакончитьБезСлеша(НачатьСлешем(НайденныйHref.ТекстовоеСодержимое)); + + Если ЭтоОдинаковыеПутиURI(АдресОблачногоСервиса + ТекстHref, АдресСервера) Тогда + НайденныйResponse = РезультатXPath.ПолучитьСледующий(); + Продолжить; + КонецЕсли; + + НоваяСтрокаДереваФайлов = ТекущиеСтрокиДереваФайлов.Добавить(); + // Всегда закодирована + НоваяСтрокаДереваФайлов.Href = КодироватьСтроку(АдресОблачногоСервиса + ТекстHref, СпособКодированияСтроки.URLВКодировкеURL); + НоваяСтрокаДереваФайлов.ИмяФайла = ИмяФайлаПоHref(НоваяСтрокаДереваФайлов.Href); + НоваяСтрокаДереваФайлов.Etag = ""; + НоваяСтрокаДереваФайлов.UID1C = ""; + НоваяСтрокаДереваФайлов.ЭтоПапка = Неопределено; + + НайденныйPropstat = ВычислитьXPath("./*[local-name()='propstat'][contains(./*[local-name()='status'],'200 OK')]/*[local-name()='prop']", КонтекстДокументаXML, НайденныйResponse).ПолучитьСледующий(); + + Если НайденныйPropstat <> Неопределено Тогда + Для каждого ДочернийУзелPropstat Из НайденныйPropstat.ДочерниеУзлы Цикл + Если ДочернийУзелPropstat.ЛокальноеИмя = "resourcetype" Тогда + НоваяСтрокаДереваФайлов.ЭтоПапка = ВычислитьXPath("./*[local-name()='collection']", КонтекстДокументаXML, ДочернийУзелPropstat).ПолучитьСледующий() <> Неопределено; + ИначеЕсли ДочернийУзелPropstat.ЛокальноеИмя = "UID1C" Тогда + НоваяСтрокаДереваФайлов.UID1C = ДочернийУзелPropstat.ТекстовоеСодержимое; + ИначеЕсли ДочернийУзелPropstat.ЛокальноеИмя = "getetag" Тогда + НоваяСтрокаДереваФайлов.Etag = ДочернийУзелPropstat.ТекстовоеСодержимое; + ИначеЕсли ДочернийУзелPropstat.ЛокальноеИмя = "getlastmodified" Тогда + НоваяСтрокаДереваФайлов.ДатаМодификации = ДатаRFC1123(ДочернийУзелPropstat.ТекстовоеСодержимое);//UTC + ИначеЕсли ДочернийУзелPropstat.ЛокальноеИмя = "getcontentlength" Тогда + НоваяСтрокаДереваФайлов.Длина = Число(СтрЗаменить(ДочернийУзелPropstat.ТекстовоеСодержимое," ","")); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + // Если не было UID, пробуем получить его отдельно, это нужно, например, для owncloud. + Если НЕ ЗначениеЗаполнено(НоваяСтрокаДереваФайлов.UID1C) Тогда + НоваяСтрокаДереваФайлов.UID1C = ПолучитьUID1C(НоваяСтрокаДереваФайлов.Href, ПараметрыСинхронизации); + КонецЕсли; + + НайденныйResponse = РезультатXPath.ПолучитьСледующий(); + + КонецЦикла; + + Исключение + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки(),ПараметрыСинхронизации); + Отказ = Истина; + КонецПопытки; + + Для каждого СтрокаДереваФайлов Из ТекущиеСтрокиДереваФайлов Цикл + Если СтрокаДереваФайлов.ЭтоПапка = Истина Тогда + СкачатьДеревоФайловРекурсивно(СтрокаДереваФайлов.Строки, СтрокаДереваФайлов.Href, ПараметрыСинхронизации, Отказ); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Загружает с сервера webdav новые папки и файлы, которых еще нет в базе, и отражает их в таблице файлов. +Процедура ЗагрузитьНовыеПрисоединенныеФайлы(СтрокиДереваФайлов, ТаблицаФайлов, ПараметрыСинхронизации, ОбъектВладелец = Неопределено) + + ПодсистемаРаботаСФайламиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами"); + + Для каждого СтрокаДереваФайлов Из СтрокиДереваФайлов Цикл + + Если СтрокаДереваФайлов.ЭтоПапка Тогда + // Папка определяется сначала по UID1C, если не найдена, то по старому Href, т.к. UID может теряться при редактировании, а новый Href еще не может быть найден в базе, + // если UID потерялся при редактировали и папку переместили в другую папку (Href поменялся), то она будет загружена в новую карточку папки + // поиск по Href оправдан, т.к. он уникален на файловом сервере для каждой папки. + ТекущаяПапкаФайлов = Неопределено; + // Теоретически еще можно искать файлы по Etag, но встанет вопрос дублей, поэтому дальше не ищем. + + Если Не ПустаяСтрока(СтрокаДереваФайлов.UID1C) Тогда + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | СтатусыСинхронизацииФайловСОблачнымСервисом.Файл КАК Ссылка + |ИЗ + | РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом + |ГДЕ + | СтатусыСинхронизацииФайловСОблачнымСервисом.УникальныйИдентификатор1С = &УникальныйИдентификатор1С"; + + Запрос.УстановитьПараметр("УникальныйИдентификатор1С", Новый УникальныйИдентификатор(СтрокаДереваФайлов.UID1C)); + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + ТекущаяПапкаФайлов = ВыборкаДетальныеЗаписи; + КонецЦикла; + + КонецЕсли; + + Если (ТекущаяПапкаФайлов = Неопределено) И (ТаблицаФайлов.Найти(СтрокаДереваФайлов.Href, "Href") = Неопределено) Тогда + // Это новая папка на сервере - грузим ее, + // но сначала проверим возможность хранения UID1C, и если нельзя - то папка не грузится. + + Если ПодсистемаРаботаСФайламиСуществует Тогда + + МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); + ВозможностьСозданияПапки = МодульРаботаСФайламиСлужебный.ВозможностьСозданияПапки(ОбъектВладелец); + + Если Не ВозможностьСозданияПапки Тогда + Продолжить; + КонецЕсли; + + Если НЕ ПроверитьВозможностьUID1C(СтрокаДереваФайлов.Href,Строка(Новый УникальныйИдентификатор), ПараметрыСинхронизации) Тогда + ТекстСобытия = НСтр("ru = 'Невозможно сохранение дополнительных свойств файла, он не будет загружен: %1'"); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, СтрокаДереваФайлов.ИмяФайла), ПараметрыСинхронизации); + Продолжить; + КонецЕсли; + + Попытка + + МодульРаботаСФайламиСлужебныйВызовСервера = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебныйВызовСервера"); + ТекущаяПапкаФайлов = МодульРаботаСФайламиСлужебныйВызовСервера.СправочникиПапкиСоздатьЭлемент(СтрокаДереваФайлов.ИмяФайла, ОбъектВладелец, ПараметрыСинхронизации.АвторФайлов); + + СтрокаДереваФайлов.UID1C = Строка(ТекущаяПапкаФайлов.УникальныйИдентификатор()); + ОбновитьUID1CФайла(СтрокаДереваФайлов.Href,СтрокаДереваФайлов.UID1C,ПараметрыСинхронизации); + + НоваяСтрокаТаблицыФайлов = ТаблицаФайлов.Добавить(); + НоваяСтрокаТаблицыФайлов.ФайлСсылка = ТекущаяПапкаФайлов; + НоваяСтрокаТаблицыФайлов.ПометкаУдаления = Ложь; + НоваяСтрокаТаблицыФайлов.Родитель = ОбъектВладелец; + НоваяСтрокаТаблицыФайлов.ЭтоПапка = Истина; + НоваяСтрокаТаблицыФайлов.UID1C = СтрокаДереваФайлов.UID1C; + НоваяСтрокаТаблицыФайлов.ЕстьВБазе = Истина; + НоваяСтрокаТаблицыФайлов.ЕстьНаСервере = Истина; + НоваяСтрокаТаблицыФайлов.ИзмененНаСервере = Ложь; + НоваяСтрокаТаблицыФайлов.Изменения = ТекущаяПапкаФайлов; + НоваяСтрокаТаблицыФайлов.Href = ""; + НоваяСтрокаТаблицыФайлов.Etag = ""; + НоваяСтрокаТаблицыФайлов.ToHref = СтрокаДереваФайлов.Href; + НоваяСтрокаТаблицыФайлов.ToEtag = СтрокаДереваФайлов.Etag; + НоваяСтрокаТаблицыФайлов.РодительСервер = ОбъектВладелец; + НоваяСтрокаТаблицыФайлов.Наименование = СтрокаДереваФайлов.ИмяФайла; + НоваяСтрокаТаблицыФайлов.НаименованиеСервер = СтрокаДереваФайлов.ИмяФайла; + НоваяСтрокаТаблицыФайлов.Обработан = Истина; + НоваяСтрокаТаблицыФайлов.ЭтоФайл = Истина; + + ЗапомнитьСерверныеДанныеСсылки( + НоваяСтрокаТаблицыФайлов.ФайлСсылка, + НоваяСтрокаТаблицыФайлов.ToHref, + НоваяСтрокаТаблицыФайлов.ToEtag, + НоваяСтрокаТаблицыФайлов.ЭтоФайл, + НоваяСтрокаТаблицыФайлов.Родитель, + НоваяСтрокаТаблицыФайлов.ЭтоПапка, + ПараметрыСинхронизации.УчетнаяЗапись); + + ТекстСобытия = НСтр("ru = 'Загружена папка с сервера: %1'"); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, НоваяСтрокаТаблицыФайлов.НаименованиеСервер), ПараметрыСинхронизации); + + Исключение + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки(),ПараметрыСинхронизации); + КонецПопытки; + КонецЕсли; + + Иначе + // Обновим ToHref + СтараяСтрокаТаблицыФайлов = ТаблицаФайлов.Найти(ТекущаяПапкаФайлов.Ссылка, "ФайлСсылка"); + СтараяСтрокаТаблицыФайлов.ToHref = СтрокаДереваФайлов.Href; + СтараяСтрокаТаблицыФайлов.ToEtag = СтрокаДереваФайлов.Etag; + СтараяСтрокаТаблицыФайлов.РодительСервер = ОбъектВладелец; + СтараяСтрокаТаблицыФайлов.НаименованиеСервер = СтрокаДереваФайлов.ИмяФайла; + СтараяСтрокаТаблицыФайлов.ЕстьНаСервере = Истина; + СтараяСтрокаТаблицыФайлов.ИзмененНаСервере = НЕ ЭтоОдинаковыеПутиURI(СтараяСтрокаТаблицыФайлов.ToHref,СтараяСтрокаТаблицыФайлов.Href); + КонецЕсли; + // Для подчиненных строк это теперь родитель + ЗагрузитьНовыеПрисоединенныеФайлы(СтрокаДереваФайлов.Строки, ТаблицаФайлов, ПараметрыСинхронизации, ТекущаяПапкаФайлов.Ссылка); + + Иначе + // Это файл + // Файл определяется сначала по UID1C, если не найден, то по старому Href, т.к. UID может теряться при редактировании, а новый Href еще не может быть найден в базе, + // если UID потерялся при редактировали и файл переместили в другую папку (Href поменялся), то он будет загружен в новую карточку файла + // поиск по Href оправдан, т.к. он уникален на файловом сервере для каждого файла. + + ТекущийФайл = НайтиСтрокуПоURI(СтрокаДереваФайлов.Href, ТаблицаФайлов, "Href"); + + Если (ТекущийФайл = Неопределено) ИЛИ (ТаблицаФайлов.Найти(ТекущийФайл.ФайлСсылка ,"ФайлСсылка") = Неопределено) Тогда + // Это новый файл на сервере - грузим его + Если НЕ ПроверитьВозможностьUID1C(СтрокаДереваФайлов.Href, Строка(Новый УникальныйИдентификатор), ПараметрыСинхронизации) Тогда + ТекстСобытия = НСтр("ru = 'Невозможно сохранение дополнительных свойств файла, он не будет загружен: %1'"); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, СтрокаДереваФайлов.ИмяФайла), ПараметрыСинхронизации); + Продолжить; + КонецЕсли; + + Попытка + + ПараметрыФайла = Новый Структура; + ПараметрыФайла.Вставить("ИмяФайла", СтрокаДереваФайлов.ИмяФайла); + ПараметрыФайла.Вставить("Href", СтрокаДереваФайлов.Href); + ПараметрыФайла.Вставить("Etag", СтрокаДереваФайлов.Etag); + ПараметрыФайла.Вставить("ДатаМодификацииФайла", СтрокаДереваФайлов.ДатаМодификации); + ПараметрыФайла.Вставить("ДлинаФайла", СтрокаДереваФайлов.Длина); + ПараметрыФайла.Вставить("ДляПользователя", ПараметрыСинхронизации.АвторФайлов); + ПараметрыФайла.Вставить("ОбъектВладелец", ОбъектВладелец); + ПараметрыФайла.Вставить("СсылкаСуществующегоФайла", Неопределено); + ПараметрыФайла.Вставить("ПараметрыСинхронизации", ПараметрыСинхронизации); + ЗагрузитьФайлССервера(ПараметрыФайла); + + Исключение + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки(),ПараметрыСинхронизации); + КонецПопытки; + + Иначе + // Обновим ToHref + СтараяСтрокаТаблицыФайлов = ТаблицаФайлов.Найти(ТекущийФайл.ФайлСсылка,"ФайлСсылка"); + СтараяСтрокаТаблицыФайлов.ToHref = СтрокаДереваФайлов.Href; + СтараяСтрокаТаблицыФайлов.ToEtag = СтрокаДереваФайлов.Etag; + СтараяСтрокаТаблицыФайлов.РодительСервер = ОбъектВладелец; + СтараяСтрокаТаблицыФайлов.НаименованиеСервер = СтрокаДереваФайлов.ИмяФайла; + СтараяСтрокаТаблицыФайлов.ЕстьНаСервере = Истина; + СтараяСтрокаТаблицыФайлов.ИзмененНаСервере = НЕ ЭтоОдинаковыеПутиURI(СтараяСтрокаТаблицыФайлов.ToHref,СтараяСтрокаТаблицыФайлов.Href); + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ЗаполнитьДанныеИзОблачногоСервиса(СтрокиДереваФайлов, ТаблицаФайлов, ПараметрыСинхронизации, ОбъектВладелец = Неопределено) + + ПодсистемаРаботаСФайламиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами"); + + Для каждого СтрокаДереваФайлов Из СтрокиДереваФайлов Цикл + + Если СтрокаДереваФайлов.ЭтоПапка = Истина Тогда //папки + // Папка определяется сначала по UID1C, если не найдена, то по старому Href, т.к. UID может теряться при редактировании, а новый Href еще не может быть найден в базе, + // если UID потерялся при редактировали и папку переместили в другую папку (Href поменялся), то она будет загружена в новую карточку папки + // поиск по Href оправдан, т.к. он уникален на файловом сервере для каждой папки. + ТекущаяПапкаФайлов = Неопределено; + // Теоретически еще можно искать файлы по Etag, но встанет вопрос дублей, поэтому дальше не ищем. + + Если Не ПустаяСтрока(СтрокаДереваФайлов.UID1C) Тогда + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | СтатусыСинхронизацииФайловСОблачнымСервисом.Файл + |ИЗ + | РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом + |ГДЕ + | СтатусыСинхронизацииФайловСОблачнымСервисом.УникальныйИдентификатор1С = &УникальныйИдентификатор1С"; + + Запрос.УстановитьПараметр("УникальныйИдентификатор1С", Новый УникальныйИдентификатор(СтрокаДереваФайлов.UID1C)); + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + ТекущаяПапкаФайлов = ВыборкаДетальныеЗаписи.Файл; + КонецЦикла; + + КонецЕсли; + + Если ТекущаяПапкаФайлов = Неопределено Тогда + ТекущаяПапкаФайлов = НайтиСтрокуПоURI(СтрокаДереваФайлов.Href, ТаблицаФайлов,"Href");// может быть помечена на удаление, тогда у нее нет Href, и тут она не будет найдена + КонецЕсли; + + Если (ТекущаяПапкаФайлов <> Неопределено) ИЛИ (ТаблицаФайлов.Найти(ТекущаяПапкаФайлов.Ссылка,"ФайлСсылка") <> Неопределено) Тогда + СтараяСтрокаТаблицыФайлов = ТаблицаФайлов.Найти(ТекущаяПапкаФайлов.Ссылка, "ФайлСсылка"); + СтараяСтрокаТаблицыФайлов.ToHref = СтрокаДереваФайлов.Href; + СтараяСтрокаТаблицыФайлов.ToEtag = СтрокаДереваФайлов.Etag; + СтараяСтрокаТаблицыФайлов.РодительСервер = ОбъектВладелец; + СтараяСтрокаТаблицыФайлов.НаименованиеСервер = СтрокаДереваФайлов.ИмяФайла; + СтараяСтрокаТаблицыФайлов.ЕстьНаСервере = Истина; + СтараяСтрокаТаблицыФайлов.ИзмененНаСервере = НЕ ЭтоОдинаковыеПутиURI(СтараяСтрокаТаблицыФайлов.ToHref,СтараяСтрокаТаблицыФайлов.Href); + КонецЕсли; + // Для подчиненных строк это теперь родитель + ЗаполнитьДанныеИзОблачногоСервиса(СтрокаДереваФайлов.Строки, ТаблицаФайлов, ПараметрыСинхронизации, ТекущаяПапкаФайлов.Ссылка); + + Иначе + // Это файл + // Файл определяется сначала по UID1C, если не найден, то по старому Href, т.к. UID может теряться при редактировании, а новый Href еще не может быть найден в базе, + // если UID потерялся при редактировали и файл переместили в другую папку (Href поменялся), то он будет загружен в новую карточку файла + // поиск по Href оправдан, т.к. он уникален на файловом сервере для каждого файла. + + ТекущийФайл = НайтиСтрокуПоURI(СтрокаДереваФайлов.Href,ТаблицаФайлов,"Href"); + + Если (ТекущийФайл <> Неопределено) ИЛИ (ТаблицаФайлов.Найти(ТекущийФайл.ФайлСсылка,"ФайлСсылка") <> Неопределено) Тогда + // Обновим ToHref + СтараяСтрокаТаблицыФайлов = ТаблицаФайлов.Найти(ТекущийФайл.ФайлСсылка,"ФайлСсылка"); + СтараяСтрокаТаблицыФайлов.ToHref = СтрокаДереваФайлов.Href; + СтараяСтрокаТаблицыФайлов.ToEtag = СтрокаДереваФайлов.Etag; + СтараяСтрокаТаблицыФайлов.РодительСервер = ОбъектВладелец; + СтараяСтрокаТаблицыФайлов.НаименованиеСервер = СтрокаДереваФайлов.ИмяФайла; + СтараяСтрокаТаблицыФайлов.ЕстьНаСервере = Истина; + СтараяСтрокаТаблицыФайлов.ИзмененНаСервере = НЕ ЭтоОдинаковыеПутиURI(СтараяСтрокаТаблицыФайлов.ToHref,СтараяСтрокаТаблицыФайлов.Href); + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Подготавливает структуру обмена, содержащую значения на время сеанса обмена +Функция ОсновныеОбъектыСинхронизации(УчетнаяЗапись) + + СтруктураВозврата = Новый Структура("СтруктураАдресаСервера, Ответ, Логин, Пароль"); + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | УчетныеЗаписиСинхронизацииФайлов.Ссылка КАК УчетнаяЗапись, + | УчетныеЗаписиСинхронизацииФайлов.Сервис КАК АдресСервера, + | УчетныеЗаписиСинхронизацииФайлов.КорневаяПапка, + | УчетныеЗаписиСинхронизацииФайлов.АвторФайлов + |ИЗ + | Справочник.УчетныеЗаписиСинхронизацииФайлов КАК УчетныеЗаписиСинхронизацииФайлов + |ГДЕ + | УчетныеЗаписиСинхронизацииФайлов.Ссылка = &Ссылка"; + + Запрос.УстановитьПараметр("Ссылка", УчетнаяЗапись); + + Результат = Запрос.Выполнить().Выгрузить(); + + Если Результат.Количество() = 0 Тогда + Возврат Неопределено; + КонецЕсли; + + Для каждого КолонкаРезультата Из Результат.Колонки Цикл + СтруктураВозврата.Вставить(КолонкаРезультата.Имя,Результат[0][КолонкаРезультата.Имя]); + КонецЦикла; + + Если Не ПустаяСтрока(СтруктураВозврата.КорневаяПапка) Тогда + СтруктураВозврата.АдресСервера = СтруктураВозврата.АдресСервера + "/" + СтруктураВозврата.КорневаяПапка; + КонецЕсли; + + Если ПустаяСтрока(СтруктураВозврата.АвторФайлов) Тогда + СтруктураВозврата.АвторФайлов = УчетнаяЗапись; + КонецЕсли; + + СтруктураВозврата.СтруктураАдресаСервера = СтруктураURIРаскодированная(СтруктураВозврата.АдресСервера); + + УстановитьПривилегированныйРежим(Истина); + СтруктураВозврата.Логин = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(УчетнаяЗапись, "Логин"); + СтруктураВозврата.Пароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(УчетнаяЗапись); + УстановитьПривилегированныйРежим(Ложь); + + Возврат СтруктураВозврата; + +КонецФункции + +Процедура СинхронизироватьФайлыСОблачнымСервисом(УчетнаяЗапись) + + ПараметрыСинхронизации = ОсновныеОбъектыСинхронизации(УчетнаяЗапись); + + Если ПараметрыСинхронизации = Неопределено Тогда + Возврат; + КонецЕсли; + + АдресОблачногоСервиса = КодироватьURIПоСтруктуре(ПараметрыСинхронизации.СтруктураАдресаСервера, Ложь); + АдресСервера = КодироватьURIПоСтруктуре(ПараметрыСинхронизации.СтруктураАдресаСервера); + + ТекстСобытия = НСтр("ru = 'Начало синхронизации файлов с облачным сервисом.'"); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ТекстСобытия, ПараметрыСинхронизации); + + Попытка + + ДеревоФайловСервера = Новый ДеревоЗначений; + ДеревоФайловСервера.Колонки.Добавить("Href"); + ДеревоФайловСервера.Колонки.Добавить("UID1C"); + ДеревоФайловСервера.Колонки.Добавить("Etag"); + ДеревоФайловСервера.Колонки.Добавить("ИмяФайла"); + ДеревоФайловСервера.Колонки.Добавить("ЭтоПапка"); + ДеревоФайловСервера.Колонки.Добавить("ДатаМодификации"); + ДеревоФайловСервера.Колонки.Добавить("Длина"); + + Отказ = Ложь; + СкачатьДеревоФайловРекурсивно(ДеревоФайловСервера.Строки, АдресСервера, ПараметрыСинхронизации, Отказ); + Если Отказ = Истина Тогда + ТекстОшибки = НСтр("ru = 'При загрузке структуры файлов с сервера произошла ошибка, синхронизация не выполнена.'"); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + // Сравниваем с деревом файлов в системе, синхронизация идет по уникальному идентификатору. + МассивИсключений = Новый Массив; + ТаблицаФайлов = ВыбратьДанныеПоПравилам(УчетнаяЗапись, МассивИсключений); + + Для каждого СтрокаТаблицы Из ТаблицаФайлов Цикл + СтрокаТаблицы.UID1C = Строка(СтрокаТаблицы.ФайлСсылка.УникальныйИдентификатор()); + КонецЦикла; + + // Перебираем дерево, загружаем и добавляем те, которых нет в базе, в таблицу, а по старым заполняем реквизиты с сервера. + ЗагрузитьНовыеПрисоединенныеФайлы(ДеревоФайловСервера.Строки, ТаблицаФайлов, ПараметрыСинхронизации); + + ВычислитьУровеньРекурсивно(ТаблицаФайлов); + ТаблицаФайлов.Сортировать("ЭтоПапка УБЫВ, Уровень, РодительСортировка"); + // Перебираем таблицу и решаем что делать с файлами и папками. + Для Каждого СтрокаТаблицы Из ТаблицаФайлов Цикл + + Если СтрокаТаблицы.Обработан Тогда + Продолжить; + КонецЕсли; + + ОбновитьСтатусСинхронизацииФайла = Ложь; + + СозданНовыйВБазе = (НЕ ЗначениеЗаполнено(СтрокаТаблицы.Href)) И (НЕ ЗначениеЗаполнено(СтрокаТаблицы.ToHref)); + + ИзмененВБазе = ЗначениеЗаполнено(СтрокаТаблицы.Изменения);// что-то поменялось + ИзмененоСодержимоеНаСервере = ЗначениеЗаполнено(СтрокаТаблицы.Etag) И ЗначениеЗаполнено(СтрокаТаблицы.ToEtag) И (СтрокаТаблицы.Etag <> СтрокаТаблицы.ToEtag);// поменялось содержимое + ИзмененНаСервере = ИзмененоСодержимоеНаСервере ИЛИ СтрокаТаблицы.ИзмененНаСервере;// поменялось имя/подчиненность или содержание + + УдаленВБазе = СтрокаТаблицы.ПометкаУдаления; + УдаленНаСервере = ЗначениеЗаполнено(СтрокаТаблицы.Href) И НЕ ЗначениеЗаполнено(СтрокаТаблицы.ToHref); + + НачатьТранзакцию(); + + Попытка + + Если СозданНовыйВБазе И НЕ УдаленВБазе Тогда + + // отправим новый на сервер + СтрокаТаблицы.ToHref = ЗакончитьБезСлеша(АдресСервера) + НачатьСлешем(ЗакончитьБезСлеша(РассчитатьHref(СтрокаТаблицы,ТаблицаФайлов))); + Если СтрокаТаблицы.ЭтоПапка Тогда + ВызватьМетодMKCOL(СтрокаТаблицы.ToHref, ПараметрыСинхронизации); + Иначе + СтрокаТаблицы.ToEtag = ВызватьМетодPUT(СтрокаТаблицы.ToHref, СтрокаТаблицы.ФайлСсылка, ПараметрыСинхронизации, СтрокаТаблицы.ЭтоФайл); + КонецЕсли; + ОбновитьUID1CФайла(СтрокаТаблицы.ToHref, СтрокаТаблицы.UID1C, ПараметрыСинхронизации); + СтрокаТаблицы.РодительСервер = СтрокаТаблицы.Родитель; + СтрокаТаблицы.НаименованиеСервер = СтрокаТаблицы.Наименование; + СтрокаТаблицы.ЕстьНаСервере = Истина; + СтрокаТаблицы.Обработан = Истина; + + Если Не СтрокаТаблицы.ЭтоФайл + И Не СтрокаТаблицы.ЭтоПапка Тогда + Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрокаТаблицы.ФайлСсылка, "Редактирует") <> ПараметрыСинхронизации.АвторФайлов Тогда + МодульПрисоединенныеФайлыСлужебный = ОбщегоНазначения.ОбщийМодуль("ПрисоединенныеФайлыСлужебный"); + МодульПрисоединенныеФайлыСлужебный.ЗанятьФайлДляРедактированияСервер(СтрокаТаблицы.ФайлСсылка, ПараметрыСинхронизации.АвторФайлов); + КонецЕсли; + ИначеЕсли Не СтрокаТаблицы.ЭтоПапка Тогда + МодульРаботаСФайламиСлужебныйВызовСервера = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебныйВызовСервера"); + ДанныеФайла = МодульРаботаСФайламиСлужебныйВызовСервера.ДанныеФайла(СтрокаТаблицы.ФайлСсылка); + МодульРаботаСФайламиСлужебныйВызовСервера.ЗанятьФайл(ДанныеФайла, , , ПараметрыСинхронизации.АвторФайлов); + КонецЕсли; + + ТекстСобытия = НСтр("ru = 'Создан объект в облачном сервисе %1'"); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, СтрокаТаблицы.Наименование), ПараметрыСинхронизации); + + ОбновитьСтатусСинхронизацииФайла = Истина; + + ИначеЕсли УдаленНаСервере И НЕ УдаленВБазе Тогда + + Если Не ЗначениеЗаполнено(СтрокаТаблицы.ФайлСсылка) Тогда + Продолжить; + КонецЕсли; + + // Если это элемент справочника ИдентификаторыОбъектовМетаданных, то не удаляем. + Если ТипЗнч(СтрокаТаблицы.ФайлСсылка) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + СтрокаТаблицы.Обработан = Истина; + Продолжить; + КонецЕсли; + // удаляем в базе + СтрокаТаблицы.ФайлСсылка.ПолучитьОбъект().УстановитьПометкуУдаления(Истина,Ложь); + СтрокаТаблицы.ПометкаУдаления = Истина; + СтрокаТаблицы.Изменения = СтрокаТаблицы.ФайлСсылка; + СтрокаТаблицы.Обработан = Истина; + + ТекстСобытия = НСтр("ru = 'Удалено в базе: %1'"); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, СтрокаТаблицы.Наименование), ПараметрыСинхронизации); + + ОбновитьСтатусСинхронизацииФайла = Истина; + + ИначеЕсли (ИзмененВБазе ИЛИ ИзмененНаСервере) И НЕ (УдаленВБазе ИЛИ УдаленНаСервере) Тогда + + Если ИзмененНаСервере И НЕ ИзмененВБазе Тогда + // загрузим с сервера + Если СтрокаТаблицы.ЭтоПапка Тогда + // Возможно можно отследить переименование + ОбъектСтрокиТаблицы = СтрокаТаблицы.ФайлСсылка.ПолучитьОбъект(); + ОбъектСтрокиТаблицы.Наименование = СтрокаТаблицы.НаименованиеСервер; + ОбъектСтрокиТаблицы.Родитель = Неопределено; + ОбъектСтрокиТаблицы.ПометкаУдаления = Ложь; + ОбъектСтрокиТаблицы.Записать(); + + СтрокаТаблицы.Наименование = СтрокаТаблицы.НаименованиеСервер; + СтрокаТаблицы.Изменения = СтрокаТаблицы.ФайлСсылка; + СтрокаТаблицы.Родитель = СтрокаТаблицы.РодительСервер; + СтрокаТаблицы.ПометкаУдаления = Ложь; + + ОбновитьСтатусСинхронизацииФайла = Истина; + Иначе + + СтруктураИмениФайла = Новый Файл(СтрокаТаблицы.НаименованиеСервер); + НовоеРасширениеФайла = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СтруктураИмениФайла.Расширение); + // Загружаем только если поменялось содержимое, т.е. Etag, иначе обновляем реквизиты. + Если СтрокаТаблицы.ЭтоФайл Тогда + Если ИзмененоСодержимоеНаСервере ИЛИ (НовоеРасширениеФайла <> СтрокаТаблицы.ФайлСсылка.ТекущаяВерсияРасширение) Тогда + + ПараметрыФайла = Новый Структура; + ПараметрыФайла.Вставить("ИмяФайла", СтрокаТаблицы.НаименованиеСервер); + ПараметрыФайла.Вставить("Href", СтрокаТаблицы.ToHref); + ПараметрыФайла.Вставить("Etag", СтрокаТаблицы.ToEtag); + ПараметрыФайла.Вставить("ДатаМодификацииФайла", Неопределено); + ПараметрыФайла.Вставить("ДлинаФайла", Неопределено); + ПараметрыФайла.Вставить("ДляПользователя", ПараметрыСинхронизации.АвторФайлов); + ПараметрыФайла.Вставить("ОбъектВладелец", СтрокаТаблицы.Родитель); + ПараметрыФайла.Вставить("СсылкаСуществующегоФайла", СтрокаТаблицы.ФайлСсылка); + ПараметрыФайла.Вставить("ПараметрыСинхронизации", ПараметрыСинхронизации); + + ЗагрузитьФайлССервера(ПараметрыФайла, СтрокаТаблицы.ЭтоФайл); + + КонецЕсли; + Иначе + Если ИзмененоСодержимоеНаСервере ИЛИ (НовоеРасширениеФайла <> СтрокаТаблицы.ФайлСсылка.Расширение) Тогда + + ПараметрыФайла = Новый Структура; + ПараметрыФайла.Вставить("ИмяФайла", СтрокаТаблицы.НаименованиеСервер); + ПараметрыФайла.Вставить("Href", СтрокаТаблицы.ToHref); + ПараметрыФайла.Вставить("Etag", СтрокаТаблицы.ToEtag); + ПараметрыФайла.Вставить("ЭтоФайл", СтрокаТаблицы.ЭтоФайл); + ПараметрыФайла.Вставить("ДатаМодификацииФайла", Неопределено); + ПараметрыФайла.Вставить("ДлинаФайла", Неопределено); + ПараметрыФайла.Вставить("ДляПользователя", ПараметрыСинхронизации.АвторФайлов); + ПараметрыФайла.Вставить("ОбъектВладелец", СтрокаТаблицы.Родитель); + ПараметрыФайла.Вставить("СсылкаСуществующегоФайла", СтрокаТаблицы.ФайлСсылка); + ПараметрыФайла.Вставить("ПараметрыСинхронизации", ПараметрыСинхронизации); + + ЗагрузитьФайлССервера(ПараметрыФайла, СтрокаТаблицы.ЭтоФайл); + + КонецЕсли; + КонецЕсли; + + ОбъектСтрокиТаблицы = СтрокаТаблицы.ФайлСсылка.ПолучитьОбъект(); + Если СтрокаТаблицы.ЭтоФайл Тогда + ОбъектСтрокиТаблицы.ПолноеНаименование = СтруктураИмениФайла.ИмяБезРасширения; + Иначе + ОбъектСтрокиТаблицы.Наименование = СтруктураИмениФайла.ИмяБезРасширения; + КонецЕсли; + ОбъектСтрокиТаблицы.ВладелецФайла = СтрокаТаблицы.РодительСервер; + ОбъектСтрокиТаблицы.ПометкаУдаления = Ложь; + ОбъектСтрокиТаблицы.Записать(); + + СтрокаТаблицы.Наименование = СтрокаТаблицы.НаименованиеСервер; + СтрокаТаблицы.Изменения = СтрокаТаблицы.ФайлСсылка; + СтрокаТаблицы.Родитель = СтрокаТаблицы.РодительСервер; + СтрокаТаблицы.ПометкаУдаления = Ложь; + + КонецЕсли; + + СтрокаТаблицы.Обработан = Истина; + ТекстСобытия = НСтр("ru = 'Обновлен объект в базе: %1'"); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, СтрокаТаблицы.Наименование), ПараметрыСинхронизации); + + ОбновитьСтатусСинхронизацииФайла = Истина; + + КонецЕсли; + + КонецЕсли; + + Если ОбновитьСтатусСинхронизацииФайла Тогда + // Записываем обновления в регистр сведений статусов + Если СтрокаТаблицы.ПометкаУдаления Тогда + // Удаляем последний Href, чтобы повторно не идентифицировать + УдалитьСерверныеДанныеСсылки(СтрокаТаблицы.ФайлСсылка, УчетнаяЗапись); + Иначе + ЗапомнитьСерверныеДанныеСсылки( + СтрокаТаблицы.ФайлСсылка, + СтрокаТаблицы.ToHref, + СтрокаТаблицы.ToEtag, + СтрокаТаблицы.ЭтоФайл, + СтрокаТаблицы.Родитель, + СтрокаТаблицы.ЭтоПапка, + УчетнаяЗапись); + КонецЕсли; + КонецЕсли; + + ЗафиксироватьТранзакцию(); + + Исключение + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки(),ПараметрыСинхронизации); + ОтменитьТранзакцию(); + КонецПопытки; + + КонецЦикла; + + Исключение + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки(),ПараметрыСинхронизации); + КонецПопытки; + + ТекстСобытия = НСтр("ru = 'Завершена синхронизация файлов с облачным сервисом'"); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ТекстСобытия, ПараметрыСинхронизации); + +КонецПроцедуры + +Функция ВыбратьДанныеПоПравилам(УчетнаяЗапись, МассивИсключений) + + ЗапросНастройкиСинхронизации = Новый Запрос; + ЗапросНастройкиСинхронизации.Текст = "ВЫБРАТЬ + | НастройкиСинхронизацииФайлов.ВладелецФайла, + | НастройкиСинхронизацииФайлов.ТипВладельцаФайла, + | ИдентификаторыОбъектовМетаданных.Ссылка КАК ИдентификаторВладельца, + | ВЫБОР + | КОГДА ТИПЗНАЧЕНИЯ(ИдентификаторыОбъектовМетаданных.Ссылка) <> ТИПЗНАЧЕНИЯ(НастройкиСинхронизацииФайлов.ВладелецФайла) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ЭтоНастройкаДляЭлементаСправочника, + | НастройкиСинхронизацииФайлов.ПравилоОтбора, + | НастройкиСинхронизацииФайлов.ЭтоФайл, + | НастройкиСинхронизацииФайлов.УчетнаяЗапись + |ИЗ + | РегистрСведений.НастройкиСинхронизацииФайлов КАК НастройкиСинхронизацииФайлов + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданных + | ПО (ТИПЗНАЧЕНИЯ(НастройкиСинхронизацииФайлов.ВладелецФайла) = ТИПЗНАЧЕНИЯ(ИдентификаторыОбъектовМетаданных.ЗначениеПустойСсылки)) + |ГДЕ + | НастройкиСинхронизацииФайлов.Синхронизировать + | И НастройкиСинхронизацииФайлов.УчетнаяЗапись = &УчетнаяЗапись"; + ЗапросНастройкиСинхронизации.УстановитьПараметр("УчетнаяЗапись", УчетнаяЗапись); + НастройкиСинхронизации = ЗапросНастройкиСинхронизации.Выполнить().Выгрузить(); + + ТаблицаФайлов = Неопределено; + + Для Каждого Настройка Из НастройкиСинхронизации Цикл + ДеревоФайлов = ВыбратьДанныеПоПравилуСинхронизации(Настройка, МассивИсключений); + Если ТаблицаФайлов = Неопределено Тогда + ТаблицаФайлов = Новый ТаблицаЗначений; + Для Каждого Колонка Из ДеревоФайлов.Колонки Цикл + ТаблицаФайлов.Колонки.Добавить(Колонка.Имя); + КонецЦикла; + КонецЕсли; + + Если Настройка.ЭтоНастройкаДляЭлементаСправочника Тогда + КорневаяПапка = Настройка.ИдентификаторВладельца; + Иначе + КорневаяПапка = Настройка.ВладелецФайла; + КонецЕсли; + + Для Каждого СтрокаФайлов Из ДеревоФайлов.Строки Цикл + НоваяСтрока = ТаблицаФайлов.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаФайлов); + Если НоваяСтрока.ФайлСсылка = Неопределено Тогда + НоваяСтрока.ФайлСсылка = КорневаяПапка; + КонецЕсли; + Если НоваяСтрока.Родитель = Неопределено Тогда + НоваяСтрока.Родитель = КорневаяПапка; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВЫБОР + | КОГДА ТИПЗНАЧЕНИЯ(НастройкиСинхронизацииФайлов.ВладелецФайла) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) + | ТОГДА НастройкиСинхронизацииФайлов.ВладелецФайла + | ИНАЧЕ ИдентификаторыОбъектовМетаданных.Ссылка + | КОНЕЦ КАК ФайлСсылка, + | НастройкиСинхронизацииФайлов.ЭтоФайл КАК ЭтоФайл, + | НастройкиСинхронизацииФайлов.УчетнаяЗапись КАК УчетнаяЗапись, + | НастройкиСинхронизацииФайлов.ВладелецФайла КАК ВладелецФайла, + | НастройкиСинхронизацииФайлов.ТипВладельцаФайла КАК ТипВладельцаФайла + |ПОМЕСТИТЬ ВТВиртуальныеКорневыеПапки + |ИЗ + | РегистрСведений.НастройкиСинхронизацииФайлов КАК НастройкиСинхронизацииФайлов + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданных + | ПО (ТИПЗНАЧЕНИЯ(НастройкиСинхронизацииФайлов.ВладелецФайла) = ТИПЗНАЧЕНИЯ(ИдентификаторыОбъектовМетаданных.ЗначениеПустойСсылки)) + |ГДЕ + | НастройкиСинхронизацииФайлов.Синхронизировать + | И НастройкиСинхронизацииФайлов.УчетнаяЗапись = &УчетнаяЗапись + | + |ИНДЕКСИРОВАТЬ ПО + | УчетнаяЗапись + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВТВиртуальныеКорневыеПапки.ФайлСсылка КАК ФайлСсылка, + | ВТВиртуальныеКорневыеПапки.ЭтоФайл КАК ЭтоФайл, + | ЛОЖЬ КАК ПометкаУдаления, + | ИСТИНА КАК ЭтоПапка, + | ИСТИНА КАК ЕстьВБазе, + | ЛОЖЬ КАК ЕстьНаСервере, + | ЛОЖЬ КАК Обработан, + | ЛОЖЬ КАК ИзмененНаСервере, + | СтатусыСинхронизацииФайловСОблачнымСервисом.Href КАК Href, + | СтатусыСинхронизацииФайловСОблачнымСервисом.Etag КАК Etag, + | СтатусыСинхронизацииФайловСОблачнымСервисом.УникальныйИдентификатор1С КАК УникальныйИдентификатор1С, + | ВТВиртуальныеКорневыеПапки.ВладелецФайла, + | ВТВиртуальныеКорневыеПапки.ТипВладельцаФайла + |ИЗ + | ВТВиртуальныеКорневыеПапки КАК ВТВиртуальныеКорневыеПапки + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом + | ПО ВТВиртуальныеКорневыеПапки.УчетнаяЗапись = СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись + | И ВТВиртуальныеКорневыеПапки.ФайлСсылка = СтатусыСинхронизацииФайловСОблачнымСервисом.Файл + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |УНИЧТОЖИТЬ ВТВиртуальныеКорневыеПапки"; + + Запрос.УстановитьПараметр("УчетнаяЗапись", УчетнаяЗапись); + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + МассивВиртуальныхПапок = Новый Массив; + + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Если МассивВиртуальныхПапок.Найти(ВыборкаДетальныеЗаписи.ФайлСсылка) <> Неопределено Тогда + Продолжить; + КонецЕсли; + МассивВиртуальныхПапок.Добавить(ВыборкаДетальныеЗаписи.ФайлСсылка); + СтрокаВиртуальнойКорневойПапки = ТаблицаФайлов.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаВиртуальнойКорневойПапки, ВыборкаДетальныеЗаписи); + СтрокаВиртуальнойКорневойПапки.Наименование = СтрЗаменить(ВыборкаДетальныеЗаписи.ФайлСсылка.Синоним, ":", ""); + КонецЦикла; + + Возврат ТаблицаФайлов; + +КонецФункции + +Функция ВыбратьДанныеПоПравилуСинхронизации(НастройкаСинхронизации, МассивИсключений) + + КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; + + НастройкиКомпоновщика = НастройкаСинхронизации.ПравилоОтбора.Получить(); + Если НастройкиКомпоновщика <> Неопределено Тогда + КомпоновщикНастроек.ЗагрузитьНастройки(НастройкаСинхронизации.ПравилоОтбора.Получить()); + КонецЕсли; + + СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных; + ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить(); + ИсточникДанных.Имя = "ИсточникДанных1"; + ИсточникДанных.ТипИсточникаДанных = "Local"; + + НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); + НаборДанных.Имя = "НаборДанных1"; + НаборДанных.ИсточникДанных = ИсточникДанных.Имя; + + СхемаКомпоновкиДанных.ПоляИтога.Очистить(); + + Если НастройкаСинхронизации.ЭтоНастройкаДляЭлементаСправочника Тогда + ВладелецФайла = НастройкаСинхронизации.ИдентификаторВладельца; + ЭлементИсключение = НастройкаСинхронизации.ВладелецФайла; + Иначе + ВладелецФайла = НастройкаСинхронизации.ВладелецФайла; + ЭлементИсключение = Неопределено; + КонецЕсли; + + СхемаКомпоновкиДанных.НаборыДанных[0].Запрос = ТекстЗапросаДляСинхронизацииФайлов( + ВладелецФайла, + НастройкаСинхронизации, + МассивИсключений, + ЭлементИсключение); + + Структура = КомпоновщикНастроек.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); + + ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ФайлСсылка"); + + ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Наименование"); + + ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ПометкаУдаления"); + + ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Родитель"); + + ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ЭтоПапка"); + + ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ЕстьВБазе"); + + ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ЕстьНаСервере"); + + ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Изменения"); + + ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Href"); + + ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Etag"); + + ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Обработан"); + + ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("UID1C"); + + ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ToHref"); + + ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ToEtag"); + + ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("РодительСервер"); + + ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("НаименованиеСервер"); + + ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ИзмененНаСервере"); + + ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Уровень"); + + ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("РодительСортировка"); + + ВыбранноеПоле = Структура.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("ЭтоФайл"); + + КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); + + Настройки = КомпоновщикНастроек.ПолучитьНастройки(); + + Параметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("УчетнаяЗапись"); + Параметр.Значение = НастройкаСинхронизации.УчетнаяЗапись; + Параметр.Использование = Истина; + + Если НастройкаСинхронизации.ЭтоФайл Тогда + Параметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ТипВладельца"); + Параметр.Значение = ТипЗнч(ВладелецФайла.ЗначениеПустойСсылки); + Параметр.Использование = Истина; + КонецЕсли; + + Если МассивИсключений.Количество() > 0 Тогда + Параметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("МассивИсключений"); + Параметр.Значение = МассивИсключений; + Параметр.Использование = Истина; + КонецЕсли; + + Если НастройкаСинхронизации.ЭтоНастройкаДляЭлементаСправочника Тогда + Параметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ЭлементИсключение"); + Параметр.Значение = ЭлементИсключение; + Параметр.Использование = Истина; + КонецЕсли; + + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; + ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; + ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; + ДеревоЗначений = Новый ДеревоЗначений; + + МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); + ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных); + ПроцессорВывода.УстановитьОбъект(ДеревоЗначений); + ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); + + Возврат ДеревоЗначений; + +КонецФункции + +Функция ТекстЗапросаДляСинхронизацииФайлов(ВладелецФайла, НастройкаСинхронизации, МассивИсключений, ЭлементИсключение) + + Если НастройкаСинхронизации.ЭтоФайл И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + + МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); + Возврат МодульРаботаСФайламиСлужебный.ТекстЗапросаДляСинхронизацииФайлов(ВладелецФайла, НастройкаСинхронизации, МассивИсключений, ЭлементИсключение); + + КонецЕсли; + + Если Не НастройкаСинхронизации.ЭтоФайл И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрисоединенныеФайлы") Тогда + + МодульПрисоединенныеФайлыСлужебный = ОбщегоНазначения.ОбщийМодуль("ПрисоединенныеФайлыСлужебный"); + Возврат МодульПрисоединенныеФайлыСлужебный.ТекстЗапросаДляСинхронизацииФайлов(ВладелецФайла, НастройкаСинхронизации, МассивИсключений, ЭлементИсключение); + + КонецЕсли; + +КонецФункции + +Процедура РегламентнаяСинхронизацияФайловWebdav(УчетнаяЗапись = Неопределено) Экспорт + + ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.СинхронизацияФайлов); + + УстановитьПривилегированныйРежим(Истина); + + Если УчетнаяЗапись = Неопределено Тогда + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ + | УчетныеЗаписиСинхронизацииФайлов.Ссылка, + | УчетныеЗаписиСинхронизацииФайлов.Сервис + |ИЗ + | РегистрСведений.НастройкиСинхронизацииФайлов КАК НастройкиСинхронизацииФайлов + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УчетныеЗаписиСинхронизацииФайлов КАК УчетныеЗаписиСинхронизацииФайлов + | ПО НастройкиСинхронизацииФайлов.УчетнаяЗапись = УчетныеЗаписиСинхронизацииФайлов.Ссылка + |ГДЕ + | НЕ УчетныеЗаписиСинхронизацииФайлов.ПометкаУдаления + | И НастройкиСинхронизацииФайлов.Синхронизировать"; + + Результат = Запрос.Выполнить().Выгрузить(); + Для каждого Выборка Из Результат Цикл + Если ПустаяСтрока(Выборка.Сервис) Тогда + Продолжить; + КонецЕсли; + СинхронизироватьФайлыСОблачнымСервисом(Выборка.Ссылка); + КонецЦикла; + Иначе + СинхронизироватьФайлыСОблачнымСервисом(УчетнаяЗапись); + КонецЕсли; + + ОсвободитьЗахваченныеФайлы(); + +КонецПроцедуры + +Процедура ВыполнитьПроверкуПодключения(УчетнаяЗапись, РезультатПроверки) Экспорт + + РезультатПроверки = Новый Структура("РезультатТекст,РезультатПротокол,Отказ","","",Ложь); + + ПараметрыСинхронизации = ОсновныеОбъектыСинхронизации(УчетнаяЗапись); + + АдресСервера = КодироватьURIПоСтруктуре(ПараметрыСинхронизации.СтруктураАдресаСервера); + + ТекстСобытия = НСтр("ru = 'Начата проверка синхронизации файлов'") + " " + УчетнаяЗапись.Наименование; + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ТекстСобытия, ПараметрыСинхронизации); + + ПрочитатьПараметрыКаталога(РезультатПроверки,АдресСервера, ПараметрыСинхронизации); + + ТекстСобытия = НСтр("ru = 'Завершена проверка синхронизации файлов'") + " " + УчетнаяЗапись.Наименование; + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ТекстСобытия, ПараметрыСинхронизации); + +КонецПроцедуры + +Процедура ОсвободитьЗахваченныеФайлы() + + Запрос = Новый Запрос; + + Запрос.Текст = + "ВЫБРАТЬ + | УчетныеЗаписиСинхронизацииФайлов.Ссылка КАК УчетнаяЗапись + |ПОМЕСТИТЬ НеактивныеУчетныеЗаписи + |ИЗ + | Справочник.УчетныеЗаписиСинхронизацииФайлов КАК УчетныеЗаписиСинхронизацииФайлов + |ГДЕ + | УчетныеЗаписиСинхронизацииФайлов.ПометкаУдаления + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | УчетныеЗаписиСинхронизацииФайлов.Ссылка + |ИЗ + | Справочник.УчетныеЗаписиСинхронизацииФайлов КАК УчетныеЗаписиСинхронизацииФайлов + |ГДЕ + | НЕ УчетныеЗаписиСинхронизацииФайлов.ПометкаУдаления + | И НЕ УчетныеЗаписиСинхронизацииФайлов.Ссылка В + | (ВЫБРАТЬ + | НастройкиСинхронизацииФайлов.УчетнаяЗапись + | ИЗ + | РегистрСведений.НастройкиСинхронизацииФайлов КАК НастройкиСинхронизацииФайлов + | ГДЕ + | НастройкиСинхронизацииФайлов.Синхронизировать) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | НеактивныеУчетныеЗаписи.УчетнаяЗапись + |ИЗ + | НеактивныеУчетныеЗаписи КАК НеактивныеУчетныеЗаписи + |ГДЕ + | НеактивныеУчетныеЗаписи.УчетнаяЗапись В + | (ВЫБРАТЬ + | СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись + | ИЗ + | РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом)"; + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаУчетнаяЗапись = РезультатЗапроса.Выбрать(); + + Пока ВыборкаУчетнаяЗапись.Следующий() Цикл + ОсвободитьЗахваченныеФайлыУчетнойЗаписи(ВыборкаУчетнаяЗапись.УчетнаяЗапись); + КонецЦикла; + +КонецПроцедуры + +// Освобождение файлов, захваченных учетными записями с пометкой на удаление или с отключенными настройками синхронизации. +// +Процедура ОсвободитьЗахваченныеФайлыУчетнойЗаписи(УчетнаяЗапись = Неопределено) + + ПараметрыСинхронизации = ОсновныеОбъектыСинхронизации(УчетнаяЗапись); + + Если ПараметрыСинхронизации = Неопределено Тогда + Возврат; + КонецЕсли; + + АдресОблачногоСервиса = КодироватьURIПоСтруктуре(ПараметрыСинхронизации.СтруктураАдресаСервера, Ложь); + АдресСервера = КодироватьURIПоСтруктуре(ПараметрыСинхронизации.СтруктураАдресаСервера); + + ТекстСобытия = НСтр("ru = 'Начало освобождения файлов, захваченных облачным сервисом.'"); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ТекстСобытия, ПараметрыСинхронизации); + + Попытка + + ДеревоФайловСервера = Новый ДеревоЗначений; + ДеревоФайловСервера.Колонки.Добавить("Href"); + ДеревоФайловСервера.Колонки.Добавить("UID1C"); + ДеревоФайловСервера.Колонки.Добавить("Etag"); + ДеревоФайловСервера.Колонки.Добавить("ИмяФайла"); + ДеревоФайловСервера.Колонки.Добавить("ЭтоПапка"); + ДеревоФайловСервера.Колонки.Добавить("ДатаМодификации"); + ДеревоФайловСервера.Колонки.Добавить("Длина"); + + Отказ = Ложь; + СкачатьДеревоФайловРекурсивно(ДеревоФайловСервера.Строки, АдресСервера, ПараметрыСинхронизации, Отказ); + Если Отказ = Истина Тогда + ТекстОшибки = НСтр("ru = 'При загрузке структуры файлов с сервера произошла ошибка, синхронизация не выполнена.'"); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + // Сравниваем с деревом файлов в системе, синхронизация идет по уникальному идентификатору. + ТаблицаФайлов = ЗахваченныеФайлы(УчетнаяЗапись); + + // Перебираем дерево, загружаем и добавляем те, которых нет в базе, в таблицу, а по старым заполняем реквизиты с сервера. + ЗаполнитьДанныеИзОблачногоСервиса(ДеревоФайловСервера.Строки, ТаблицаФайлов, ПараметрыСинхронизации); + + ВычислитьУровеньРекурсивно(ТаблицаФайлов); + ТаблицаФайлов.Сортировать("ЭтоПапка ВОЗР, Уровень УБЫВ, РодительСортировка УБЫВ"); + // Перебираем таблицу и решаем что делать с файлами и папками. + Для Каждого СтрокаТаблицы Из ТаблицаФайлов Цикл + + Если СтрокаТаблицы.Обработан Тогда + Продолжить; + КонецЕсли; + + НачатьТранзакцию(); + + Попытка + + // удаляем на сервере + ВызватьМетодDELETE(СтрокаТаблицы.Href, ПараметрыСинхронизации); + + ТекстСобытия = НСтр("ru = 'Удален объект в облачном сервисе %1'"); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСобытия, СтрокаТаблицы.НаименованиеСервер), ПараметрыСинхронизации); + + СтрокаТаблицы.РодительСервер = Неопределено; + СтрокаТаблицы.НаименованиеСервер = ""; + СтрокаТаблицы.ЕстьНаСервере = Ложь; + СтрокаТаблицы.Обработан = Истина; + + Если Не СтрокаТаблицы.ЭтоПапка Тогда + + Если Не СтрокаТаблицы.ЭтоФайл И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрисоединенныеФайлы") Тогда + + МодульПрисоединенныеФайлыСлужебный = ОбщегоНазначения.ОбщийМодуль("ПрисоединенныеФайлыСлужебный"); + МодульПрисоединенныеФайлыСлужебный.ОсвободитьФайл(СтрокаТаблицы.ФайлСсылка); + + КонецЕсли; + + Если СтрокаТаблицы.ЭтоФайл И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + + МодульРаботаСФайламиСлужебныйВызовСервера = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебныйВызовСервера"); + МодульРаботаСФайламиСлужебныйВызовСервера.ОсвободитьФайл(СтрокаТаблицы.ФайлСсылка); + + КонецЕсли; + + КонецЕсли; + + // Удаляем последний Href, чтобы повторно не идентифицировать + УдалитьСерверныеДанныеСсылки(СтрокаТаблицы.ФайлСсылка, УчетнаяЗапись); + + ЗафиксироватьТранзакцию(); + + Исключение + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки(),ПараметрыСинхронизации); + ОтменитьТранзакцию(); + КонецПопытки; + + КонецЦикла; + + Исключение + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ОписаниеОшибки(),ПараметрыСинхронизации); + КонецПопытки; + + ТекстСобытия = НСтр("ru = 'Завершено освобождения файлов, захваченных облачным сервисом'"); + ЗаписатьВЖурналСобытийСинхронизацииФайлов(ТекстСобытия, ПараметрыСинхронизации); + +КонецПроцедуры + +Функция ОбъектЯвляетсяФайлом(ОбъектВладелец) + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда + МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный"); + Возврат МодульРаботаСФайламиСлужебный.ОбъектЯвляетсяФайлом(ОбъектВладелец); + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Функция ЗахваченныеФайлы(УчетнаяЗапись) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | СтатусыСинхронизацииФайловСОблачнымСервисом.Файл КАК ФайлСсылка, + | СтатусыСинхронизацииФайловСОблачнымСервисом.Файл.Наименование КАК Наименование, + | СтатусыСинхронизацииФайловСОблачнымСервисом.Href, + | СтатусыСинхронизацииФайловСОблачнымСервисом.Etag, + | СтатусыСинхронизацииФайловСОблачнымСервисом.УникальныйИдентификатор1С КАК UID1C, + | СтатусыСинхронизацииФайловСОблачнымСервисом.ЭтоФайл, + | СтатусыСинхронизацииФайловСОблачнымСервисом.ЭтоВладелецФайла КАК ЭтоПапка, + | СтатусыСинхронизацииФайловСОблачнымСервисом.ВладелецФайла КАК Родитель, + | ИСТИНА КАК ЕстьВБазе, + | ЛОЖЬ КАК ЕстьНаСервере, + | НЕОПРЕДЕЛЕНО КАК Изменения, + | ЕСТЬNULL(СтатусыСинхронизацииФайловСОблачнымСервисом.Href, """") КАК Href, + | ЕСТЬNULL(СтатусыСинхронизацииФайловСОблачнымСервисом.Etag, """") КАК Etag, + | ЛОЖЬ КАК Обработан, + | ВЫРАЗИТЬ("""" КАК СТРОКА(255)) КАК ToHref, + | ВЫРАЗИТЬ("""" КАК СТРОКА(255)) КАК ToEtag, + | ВЫРАЗИТЬ("""" КАК СТРОКА(255)) КАК РодительСервер, + | ВЫРАЗИТЬ("""" КАК СТРОКА(255)) КАК НаименованиеСервер, + | ЛОЖЬ КАК ИзмененНаСервере, + | НЕОПРЕДЕЛЕНО КАК Уровень, + | ВЫРАЗИТЬ("""" КАК СТРОКА(255)) КАК РодительСортировка + |ИЗ + | РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом + |ГДЕ + | СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись = &УчетнаяЗапись"; + + Запрос.УстановитьПараметр("УчетнаяЗапись", УчетнаяЗапись); + + РезультатЗапроса = Запрос.Выполнить(); + + ЗахваченныеФайлы = РезультатЗапроса.Выгрузить(); + + Возврат ЗахваченныеФайлы; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl index 983ab4494..5346584f5 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВМоделиСервиса/Module.bsl @@ -22,6 +22,10 @@ СерверныеОбработчики[ "СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриОпределенииИспользованияРегламентныхЗаданий"].Добавить( "ФайловыеФункцииСлужебныйВМоделиСервиса"); + + СерверныеОбработчики[ + "СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий\ПриПолученииСпискаШаблонов"].Добавить( + "ФайловыеФункцииСлужебныйВМоделиСервиса"); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.ВыгрузкаЗагрузкаДанных") Тогда @@ -47,6 +51,7 @@ СоответствиеИменПсевдонимам.Вставить("ФайловыеФункцииСлужебный.ИзвлечьТекстИзФайлов"); СоответствиеИменПсевдонимам.Вставить("ФайловыеФункцииСлужебный.ОчиститьНенужныеФайлы"); + СоответствиеИменПсевдонимам.Вставить("ФайловыеФункцииСлужебный.РегламентнаяСинхронизацияФайловWebdav"); КонецПроцедуры @@ -68,6 +73,22 @@ КонецПроцедуры +// Обработчик события ПриПолученииСпискаШаблонов. +// +// Формирует список шаблонов заданий очереди. +// +// Параметры: +// Шаблоны - Массив строк. В параметр следует добавить имена предопределенных +// неразделенных регламентных заданий, которые должны использоваться в качестве +// шаблонов для заданий очереди. +// +Процедура ПриПолученииСпискаШаблонов(Шаблоны) Экспорт + + Шаблоны.Добавить("ОчисткаНенужныхФайлов"); + Шаблоны.Добавить("СинхронизацияФайлов"); + +КонецПроцедуры + // Заполняет массив типов, исключаемых из выгрузки и загрузки данных. // // Параметры: diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВызовСервера/Module.bsl index 7aaa0a99d..815fcf685 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВызовСервера/Module.bsl @@ -20,6 +20,8 @@ // Только для внутреннего использования. Процедура ПроверитьПодписи(ИсходныеДанные, ДанныеСтрок) Экспорт + ДатаПроверкиПодписи = ТекущаяДатаСеанса(); + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда Возврат; КонецЕсли; @@ -28,18 +30,13 @@ МенеджерКриптографии = МодульЭлектроннаяПодпись.МенеджерКриптографии("ПроверкаПодписи"); Для каждого СтрокаПодписи Из ДанныеСтрок Цикл - ОписаниеОшибки = ""; - ПодписьПроверена = МодульЭлектроннаяПодпись.ПроверитьПодпись(МенеджерКриптографии, + ПодписьВерна = МодульЭлектроннаяПодпись.ПроверитьПодпись(МенеджерКриптографии, ИсходныеДанные, СтрокаПодписи.АдресПодписи, ОписаниеОшибки, СтрокаПодписи.ДатаПодписи); - Если ПодписьПроверена Тогда - СтрокаПодписи.Статус = НСтр("ru = 'Верна'"); - СтрокаПодписи.Неверна = Ложь; - Иначе - СтрокаПодписи.Статус = НСтр("ru = 'Неверна'") + ". " + ОписаниеОшибки; - СтрокаПодписи.Неверна = Истина; - КонецЕсли; + СтрокаПодписи.ДатаПроверкиПодписи = ТекущаяДатаСеанса(); + СтрокаПодписи.ПодписьВерна = ПодписьВерна; + ФайловыеФункцииСлужебныйКлиентСервер.ЗаполнитьСтатусПодписи(СтрокаПодписи, ОписаниеОшибки); КонецЦикла; КонецПроцедуры @@ -183,8 +180,6 @@ Результат = Новый Массив; - ИмяВременнойПапки = ПолучитьИмяВременногоФайла(); - СоздатьКаталог(ИмяВременнойПапки); ИспользованныеИменаФайлов = Новый Соответствие; Для Каждого ФайлВложение Из Параметры.МассивФайлов Цикл diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиент/Module.bsl index 94e241b72..0ca08c5d6 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиент/Module.bsl @@ -63,7 +63,71 @@ // Процедура ПолучитьРабочийКаталогПользователя(Оповещение) Экспорт - ФайловыеФункцииСлужебныйКлиентПовтИсп.ПолучитьРабочийКаталогПользователя(Оповещение); + ИмяПараметра = "СтандартныеПодсистемы.ПроверкаДоступаКРабочемуКаталогуВыполнена"; + Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда + ПараметрыПриложения.Вставить(ИмяПараметра, Ложь); + КонецЕсли; + + ИмяКаталога = + СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ПерсональныеНастройкиРаботыСФайлами.ПутьКЛокальномуКэшуФайлов; + + // Уже установлен. + Если ИмяКаталога <> Неопределено + И НЕ ПустаяСтрока(ИмяКаталога) + И ПараметрыПриложения["СтандартныеПодсистемы.ПроверкаДоступаКРабочемуКаталогуВыполнена"] Тогда + + Результат = Новый Структура; + Результат.Вставить("Каталог", ИмяКаталога); + Результат.Вставить("ОписаниеОшибки", ""); + + ВыполнитьОбработкуОповещения(Оповещение, Результат); + Возврат; + КонецЕсли; + + Контекст = Новый Структура; + Контекст.Вставить("Оповещение", Оповещение); + Контекст.Вставить("Каталог", ИмяКаталога); + + ПолучитьРабочийКаталогДанныхПользователя(Новый ОписаниеОповещения( + "ПолучитьРабочийКаталогПользователяПослеПолученияКаталогаДанных", ЭтотОбъект, Контекст)); + +КонецПроцедуры + +// Продолжение процедуры ПолучитьРабочийКаталогПользователя. +Процедура ПолучитьРабочийКаталогПользователяПослеПолученияКаталогаДанных(Результат, Контекст) Экспорт + + Если ЗначениеЗаполнено(Результат.ОписаниеОшибки) Тогда + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); + Возврат; + КонецЕсли; + +#Если НЕ ВебКлиент Тогда + + Если Результат.Каталог <> Контекст.Каталог Тогда + // Создать каталог для файлов. + Попытка + СоздатьКаталог(Контекст.Каталог); + ИмяКаталогаТестовое = Контекст.Каталог + "ПроверкаДоступа\"; + СоздатьКаталог(ИмяКаталогаТестовое); + УдалитьФайлы(ИмяКаталогаТестовое); + Исключение + // Нет прав на создание каталога, или такой путь отсутствует, + // тогда установка настроек по умолчанию. + Контекст.Каталог = Неопределено; + КонецПопытки; + КонецЕсли; + +#КонецЕсли + + ПараметрыПриложения["СтандартныеПодсистемы.ПроверкаДоступаКРабочемуКаталогуВыполнена"] = Истина; + + Если Контекст.Каталог = Неопределено Тогда + УстановитьРабочийКаталогПользователя(Результат.Каталог); + Иначе + Результат.Каталог = Контекст.Каталог; + КонецЕсли; + + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); КонецПроцедуры @@ -256,52 +320,6 @@ КонецФункции -// Возвращает путь к рабочему каталогу данных пользователя. Этот каталог используется -// в качестве начального значения для рабочего каталога пользователя. -// -// Параметры: -// Оповещение - ОписаниеОповещения - оповещение, которое выполняется после получения рабочего -// каталога пользователя. В качестве результата возвращается Структура со свойствами: -// * Каталог - Строка - полное имя рабочего каталога данных пользователя. -// * ОписаниеОшибки - Строка - текст ошибки, если каталог получить не удалось. -// -Процедура ПолучитьРабочийКаталогДанныхПользователя(Оповещение) Экспорт - - Контекст = Новый Структура; - Контекст.Вставить("Оповещение", Оповещение); - - НачатьПолучениеРабочегоКаталогаДанныхПользователя(Новый ОписаниеОповещения( - "ПолучитьРабочийКаталогДанныхПользователяПослеПолучения", ЭтотОбъект, Контекст, - "ПолучитьРабочийКаталогДанныхПользователяПослеОшибкиПолучения", ЭтотОбъект)); - -КонецПроцедуры - -// Продолжение процедуры ПолучитьРабочийКаталогДанныхПользователя. -Процедура ПолучитьРабочийКаталогДанныхПользователяПослеОшибкиПолучения(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт - - СтандартнаяОбработка = Ложь; - - Результат = Новый Структура; - Результат.Вставить("Каталог", ""); - Результат.Вставить("ОписаниеОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось получить рабочий каталог данных пользователя по причине: - |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке))); - - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); - -КонецПроцедуры - -// Продолжение процедуры ПолучитьРабочийКаталогДанныхПользователя. -Процедура ПолучитьРабочийКаталогДанныхПользователяПослеПолучения(КаталогДанныхПользователя, Контекст) Экспорт - - Результат = Новый Структура; - Результат.Вставить("Каталог", КаталогДанныхПользователя); - Результат.Вставить("ОписаниеОшибки", ""); - - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); - -КонецПроцедуры - // Открывает Проводник Windows и выделяет указанный файл. Функция ОткрытьПроводникСФайлом(Знач ПолноеИмяФайла) Экспорт @@ -521,8 +539,9 @@ // Например, СправочникОбъект.Файл, СправочникОбъект.ДокументПрисоединенныеФайлы. // // * ЭлектронныеПодписи - ДанныеФормыКоллекция - с полями: -// * Статус - Строка - (возвращаемое значение) - результат проверки. -// * АдресПодписи - адрес данных подписи во временном хранилище. +// * ДатаПроверкиПодписи - Дата - (возвращаемое значение) - дата проверки. +// * Статус - Строка - (возвращаемое значение) - результат проверки. +// * АдресПодписи - Строка - адрес данных подписи во временном хранилище. // // СсылкаНаДвоичныеДанные - ДвоичныеДанные - двоичные данные файла. // - Строка - адрес во временном хранилище или навигационная ссылка. @@ -616,10 +635,11 @@ ДополнительныеПараметры.Форма.ЭлектронныеПодписи.НайтиПоИдентификатору(Элемент)); ДанныеСтроки = Новый Структура; - ДанныеСтроки.Вставить("АдресПодписи", СтрокаПодписи.АдресПодписи); - ДанныеСтроки.Вставить("Статус", СтрокаПодписи.Статус); - ДанныеСтроки.Вставить("Неверна", СтрокаПодписи.Неверна); - ДанныеСтроки.Вставить("ДатаПодписи", СтрокаПодписи.ДатаПодписи); + ДанныеСтроки.Вставить("АдресПодписи", СтрокаПодписи.АдресПодписи); + ДанныеСтроки.Вставить("Статус", СтрокаПодписи.Статус); + ДанныеСтроки.Вставить("ПодписьВерна", СтрокаПодписи.ПодписьВерна); + ДанныеСтроки.Вставить("ДатаПодписи", СтрокаПодписи.ДатаПодписи); + ДанныеСтроки.Вставить("ДатаПроверкиПодписи", СтрокаПодписи.ДатаПроверкиПодписи); ДанныеСтрок.Добавить(ДанныеСтроки); КонецЦикла; @@ -630,8 +650,9 @@ СтрокаПодписи = ?(ТипЗнч(Элемент) <> Тип("Число"), Элемент, ДополнительныеПараметры.Форма.ЭлектронныеПодписи.НайтиПоИдентификатору(Элемент)); - СтрокаПодписи.Статус = ДанныеСтрок[Индекс].Статус; - СтрокаПодписи.Неверна = ДанныеСтрок[Индекс].Неверна; + СтрокаПодписи.Статус = ДанныеСтрок[Индекс].Статус; + СтрокаПодписи.ПодписьВерна = ДанныеСтрок[Индекс].ПодписьВерна; + СтрокаПодписи.ДатаПроверкиПодписи = ДанныеСтрок[Индекс].ДатаПроверкиПодписи; Индекс = Индекс + 1; КонецЦикла; @@ -679,14 +700,9 @@ Процедура ПроверитьПодписиПослеПроверкиСтроки(Результат, ДополнительныеПараметры) Экспорт СтрокаПодписи = ДополнительныеПараметры.СтрокаПодписи; - - Если Результат = Истина Тогда - СтрокаПодписи.Статус = НСтр("ru = 'Верна'"); - СтрокаПодписи.Неверна = Ложь; - Иначе - СтрокаПодписи.Статус = НСтр("ru = 'Неверна'") + ". " + Строка(Результат); - СтрокаПодписи.Неверна = Истина; - КонецЕсли; + СтрокаПодписи.ДатаПроверкиПодписи = ОбщегоНазначенияКлиент.ДатаСеанса(); + СтрокаПодписи.ПодписьВерна = (Результат = Истина); + ФайловыеФункцииСлужебныйКлиентСервер.ЗаполнитьСтатусПодписи(СтрокаПодписи, Результат); ПроверитьПодписиЦиклНачало(ДополнительныеПараметры); @@ -808,6 +824,52 @@ #Область СлужебныеПроцедурыИФункции +// Возвращает путь к рабочему каталогу данных пользователя. Этот каталог используется +// в качестве начального значения для рабочего каталога пользователя. +// +// Параметры: +// Оповещение - ОписаниеОповещения - оповещение, которое выполняется после получения рабочего +// каталога пользователя. В качестве результата возвращается Структура со свойствами: +// * Каталог - Строка - полное имя рабочего каталога данных пользователя. +// * ОписаниеОшибки - Строка - текст ошибки, если каталог получить не удалось. +// +Процедура ПолучитьРабочийКаталогДанныхПользователя(Оповещение) + + Контекст = Новый Структура; + Контекст.Вставить("Оповещение", Оповещение); + + НачатьПолучениеРабочегоКаталогаДанныхПользователя(Новый ОписаниеОповещения( + "ПолучитьРабочийКаталогДанныхПользователяПослеПолучения", ЭтотОбъект, Контекст, + "ПолучитьРабочийКаталогДанныхПользователяПослеОшибкиПолучения", ЭтотОбъект)); + +КонецПроцедуры + +// Продолжение процедуры ПолучитьРабочийКаталогДанныхПользователя. +Процедура ПолучитьРабочийКаталогДанныхПользователяПослеОшибкиПолучения(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + + Результат = Новый Структура; + Результат.Вставить("Каталог", ""); + Результат.Вставить("ОписаниеОшибки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось получить рабочий каталог данных пользователя по причине: + |%1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке))); + + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); + +КонецПроцедуры + +// Продолжение процедуры ПолучитьРабочийКаталогДанныхПользователя. +Процедура ПолучитьРабочийКаталогДанныхПользователяПослеПолучения(КаталогДанныхПользователя, Контекст) Экспорт + + Результат = Новый Структура; + Результат.Вставить("Каталог", КаталогДанныхПользователя); + Результат.Вставить("ОписаниеОшибки", ""); + + ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); + +КонецПроцедуры + // Продолжение процедуры ОбработатьФайл. Процедура ОбработатьФайлЦиклНачало(Контекст) @@ -1334,17 +1396,6 @@ КонецПроцедуры -// Возвращает версию компоненты сканирования. -Функция ВерсияКомпонентыСканирования() Экспорт - - Если Не ПроинициализироватьКомпоненту() Тогда - Возврат НСтр("ru= 'Компонента сканирования не установлена'"); - КонецЕсли; - - Возврат ПараметрыПриложения["СтандартныеПодсистемы.КомпонентаTwain"].Версия(); - -КонецФункции - // Возвращает устройства TWAIN (массив строк). Функция ПолучитьУстройства() Экспорт @@ -1390,7 +1441,7 @@ КонецФункции // Подготовка обработчика асинхронного диалога. -Функция ПодготовитьОбработчикДляДиалога(ОбработчикИлиСтруктура) Экспорт +Функция ПодготовитьОбработчикДляДиалога(ОбработчикИлиСтруктура) Если ТипЗнч(ОбработчикИлиСтруктура) = Тип("Структура") Тогда // Рекурсивная регистрация всех обработчиков вызывающего кода. @@ -1426,7 +1477,7 @@ // Результат - Произвольный - Значение, которое необходимо вернуть в ОбработчикРезультата. // Показывает текст и вызывает обработчик с заданным результатом. -Процедура ВернутьРезультатПослеПоказаПредупреждения(ОбработчикРезультата, ТекстПредупреждения, Результат) Экспорт +Процедура ВернутьРезультатПослеПоказаПредупреждения(ОбработчикРезультата, ТекстПредупреждения, Результат) Если ТипЗнч(ОбработчикРезультата) = Тип("ОписаниеОповещения") Тогда ПараметрыОбработчика = Новый Структура; ПараметрыОбработчика.Вставить("ОбработчикРезультата", ОбработчикРезультата); @@ -1439,12 +1490,12 @@ КонецПроцедуры // Обработчик результата работы процедуры ВернутьРезультатПослеПоказаПредупреждения. -Процедура ВернутьРезультатПослеЗакрытияПростогоДиалога(Структура) Экспорт +Процедура ВернутьРезультатПослеЗакрытияПростогоДиалога(Структура) ВыполнитьОбработкуОповещения(Структура.ОбработчикРезультата, Структура.Результат); КонецПроцедуры // Возвращает результат прямого вызова, когда не потребовалось открывать диалог. -Процедура ВернутьРезультат(ОбработчикРезультата, Результат) Экспорт +Процедура ВернутьРезультат(ОбработчикРезультата, Результат) Если ТипЗнч(ОбработчикРезультата) = Тип("ОписаниеОповещения") Тогда ВыполнитьОбработкуОповещения(ОбработчикРезультата, Результат); КонецЕсли; @@ -1460,13 +1511,15 @@ Функция КлиентПоддерживаетСинхронныеВызовы() #Если ВебКлиент Тогда - // В Chrome расширение не подключается. + // В Firefox для платформы 8.3.7 и Chrome синхронные методы не поддерживаются. СистемнаяИнформация = Новый СистемнаяИнформация; ИнформацияПрограммыМассив = СтрРазделить(СистемнаяИнформация.ИнформацияПрограммыПросмотра, " ", Ложь); Для Каждого ИнформацияПрограммы Из ИнформацияПрограммыМассив Цикл Если СтрНайти(ИнформацияПрограммы, "Chrome") > 0 Тогда Возврат Ложь; + ИначеЕсли СтрНайти(ИнформацияПрограммы, "Firefox") > 0 И СтрНайти(СистемнаяИнформация.ВерсияПриложения, "8.3.7.") > 0 Тогда + Возврат Ложь; КонецЕсли; КонецЦикла; #КонецЕсли diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентПовтИсп/Module.bsl index 3be55f442..964daf9f8 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентПовтИсп/Module.bsl @@ -92,75 +92,4 @@ КонецФункции -// См. одноименную процедуру в общем модуле ФайловыеФункцииСлужебныйКлиент. -Процедура ПолучитьРабочийКаталогПользователя(Оповещение) Экспорт - - ИмяПараметра = "СтандартныеПодсистемы.ПроверкаДоступаКРабочемуКаталогуВыполнена"; - Если ПараметрыПриложения[ИмяПараметра] = Неопределено Тогда - ПараметрыПриложения.Вставить(ИмяПараметра, Ложь); - КонецЕсли; - - ИмяКаталога = - СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ПерсональныеНастройкиРаботыСФайлами.ПутьКЛокальномуКэшуФайлов; - - // Уже установлен. - Если ИмяКаталога <> Неопределено - И НЕ ПустаяСтрока(ИмяКаталога) - И ПараметрыПриложения["СтандартныеПодсистемы.ПроверкаДоступаКРабочемуКаталогуВыполнена"] Тогда - - Результат = Новый Структура; - Результат.Вставить("Каталог", ИмяКаталога); - Результат.Вставить("ОписаниеОшибки", ""); - - ВыполнитьОбработкуОповещения(Оповещение, Результат); - Возврат; - КонецЕсли; - - Контекст = Новый Структура; - Контекст.Вставить("Оповещение", Оповещение); - Контекст.Вставить("Каталог", ИмяКаталога); - - ФайловыеФункцииСлужебныйКлиент.ПолучитьРабочийКаталогДанныхПользователя(Новый ОписаниеОповещения( - "ПолучитьРабочийКаталогПользователяПослеПолученияКаталогаДанных", ЭтотОбъект, Контекст)); - -КонецПроцедуры - -// Продолжение процедуры ПолучитьРабочийКаталогПользователя. -Процедура ПолучитьРабочийКаталогПользователяПослеПолученияКаталогаДанных(Результат, Контекст) Экспорт - - Если ЗначениеЗаполнено(Результат.ОписаниеОшибки) Тогда - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); - Возврат; - КонецЕсли; - -#Если НЕ ВебКлиент Тогда - - Если Результат.Каталог <> Контекст.Каталог Тогда - // Создать каталог для файлов. - Попытка - СоздатьКаталог(Контекст.Каталог); - ИмяКаталогаТестовое = Контекст.Каталог + "ПроверкаДоступа\"; - СоздатьКаталог(ИмяКаталогаТестовое); - УдалитьФайлы(ИмяКаталогаТестовое); - Исключение - // Нет прав на создание каталога, или такой путь отсутствует, - // тогда установка настроек по умолчанию. - Контекст.Каталог = Неопределено; - КонецПопытки; - КонецЕсли; - -#КонецЕсли - - ПараметрыПриложения["СтандартныеПодсистемы.ПроверкаДоступаКРабочемуКаталогуВыполнена"] = Истина; - - Если Контекст.Каталог = Неопределено Тогда - ФайловыеФункцииСлужебныйКлиент.УстановитьРабочийКаталогПользователя(Результат.Каталог); - Иначе - Результат.Каталог = Контекст.Каталог; - КонецЕсли; - - ВыполнитьОбработкуОповещения(Контекст.Оповещение, Результат); - -КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентСервер/Module.bsl index 38cb563ab..5b17b6344 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентСервер/Module.bsl @@ -613,6 +613,30 @@ КонецФункции +// Только для внутреннего использования. +Процедура ЗаполнитьСтатусПодписи(СтрокаПодписи, ТекстОшибки = "") Экспорт + + Если Не ЗначениеЗаполнено(СтрокаПодписи.ДатаПроверкиПодписи) Тогда + СтрокаПодписи.Статус = ""; + Возврат; + КонецЕсли; + + ДатаПроверки = Формат(СтрокаПодписи.ДатаПроверкиПодписи, "ДЛФ=DT"); + + Если СтрокаПодписи.ПодписьВерна Тогда + СтрокаПодписи.Статус = НСтр("ru = 'Верна'"); + + ИначеЕсли ЗначениеЗаполнено(ТекстОшибки) Тогда + СтрокаПодписи.Статус = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Неверна. %1'"), ТекстОшибки); + Если Прав(СтрокаПодписи.Статус, 1) = "." Тогда + СтрокаПодписи.Статус = Лев(СтрокаПодписи.Статус, СтрДлина(СтрокаПодписи.Статус)-1); + КонецЕсли; + Иначе + СтрокаПодписи.Статус = НСтр("ru = 'Неверна'"); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. @@ -755,6 +779,29 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Синхронизация файлов + +Функция АдресВОблачномСервисе(Сервис, Href) Экспорт + + АдресОбъекта = Href; + + Если Не ПустаяСтрока(Сервис) Тогда + Если Сервис = "https://webdav.yandex.ru" Тогда + АдресОбъекта = СтрЗаменить(Href, "https://webdav.yandex.ru", "https://disk.yandex.ru/client/disk"); + ИначеЕсли Сервис = "https://webdav.4shared.com" Тогда + АдресОбъекта = "http://www.4shared.com/folder"; + ИначеЕсли Сервис = "https://dav.box.com/dav" Тогда + АдресОбъекта = "https://app.box.com/files/0/"; + ИначеЕсли Сервис = "https://dav.dropdav.com" Тогда + АдресОбъекта = "https://www.dropbox.com/home/"; + КонецЕсли; + КонецЕсли; + + Возврат АдресОбъекта; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -779,11 +826,4 @@ КонецФункции -Процедура УстановитьВидимостьПредпросмотра(Элементы, ИспользоватьПредпросмотр) Экспорт - - Элементы.АдресДанныхФайла.Видимость = ИспользоватьПредпросмотр; - Элементы.Предпросмотр.Пометка = ИспользоватьПредпросмотр; - -КонецПроцедуры - #КонецОбласти \ No newline at end of file diff --git a/SSL/src/CommonModules/ЦентрМониторинга/Module.bsl b/SSL/src/CommonModules/ЦентрМониторинга/Module.bsl index 855745190..31064c8f7 100644 --- a/SSL/src/CommonModules/ЦентрМониторинга/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторинга/Module.bsl @@ -11,7 +11,7 @@ // ИмяОперации - Строка(1000) - имя операции статистики, в случае отсутствия - создается новое; // Значение - Число(15,3) - количественное значение операции статистики; // Комментарий - Строка(1000) - произвольный комментарий -// Разделитель - Строка - разделитель значений в <ИмяОперации>, если разделитель не точка +// Разделитель - Строка - разделитель значений в <ИмяОперации>, если разделитель не точка. // Процедура ЗаписатьОперациюБизнесСтатистики(ИмяОперации, Значение, Комментарий = Неопределено, Разделитель = ".") Экспорт Если ЦентрМониторингаВызовСервераПовтИсп.ЗаписыватьОперацииБизнесСтатистики() Тогда @@ -27,7 +27,7 @@ // * Значение - Строка - Текст запроса выборки данных, обязательно должно // присутствовать поле <Количество> // Ограничения -// можно вызывать только из ЦентрМониторингаПереопределяемый.ПриСбореПоказателейСтатистикиКонфигурации +// можно вызывать только из ЦентрМониторингаПереопределяемый.ПриСбореПоказателейСтатистикиКонфигурации. // Процедура ЗаписатьСтатистикуКонфигурации(СоответствиеИменМетаданных) Экспорт Параметры = Новый Соответствие; @@ -51,7 +51,7 @@ // ИмяОбъекта - Строка(1000) - имя операции статистики, в случае отсутствия - создается новое; // Значение - Число(15,3) - количественное значение операции статистики; // Ограничения -// можно вызывать только из ЦентрМониторингаПереопределяемый.ПриСбореПоказателейСтатистикиКонфигурации +// можно вызывать только из ЦентрМониторингаПереопределяемый.ПриСбореПоказателейСтатистикиКонфигурации. // Процедура ЗаписатьСтатистикуОбъектаКонфигурации(ИмяОбъекта, Значение) Экспорт ОперацияСтатистики = РегистрыСведений.ОперацииСтатистики.ПолучитьСсылку(ИмяОбъекта); diff --git a/SSL/src/CommonModules/ЦентрМониторингаВызовСервераПовтИсп/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаВызовСервераПовтИсп/Module.bsl index 30c3e1f14..a2e80f1eb 100644 --- a/SSL/src/CommonModules/ЦентрМониторингаВызовСервераПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторингаВызовСервераПовтИсп/Module.bsl @@ -7,10 +7,6 @@ #Область РаботаСПараметрамиЦентраМониторинга -Функция ПолучитьПараметрыПоУмолчанию() Экспорт - Возврат ЦентрМониторингаСлужебный.ПолучитьПараметрыПоУмолчанию(); -КонецФункции - Функция ПолучитьПараметрыЦентраМониторинга(Параметры = Неопределено) Экспорт Возврат ЦентрМониторингаСлужебный.ПолучитьПараметрыЦентраМониторинга(Параметры); КонецФункции @@ -23,22 +19,6 @@ Возврат (ПараметрыЦентраМониторинга.ВключитьЦентрМониторинга ИЛИ ПараметрыЦентраМониторинга.ЦентрОбработкиИнформацииОПрограмме) И ПараметрыЦентраМониторинга.РегистрироватьБизнесСтатистику; КонецФункции -Функция ИспользоватьЦентрМониторинга() Экспорт - Возврат ЦентрМониторингаСлужебный.ИспользоватьЦентрМониторинга(); -КонецФункции - -Функция ПолучитьПараметрыСервисаОтправки() Экспорт - Возврат ЦентрМониторингаСлужебный.ПолучитьПараметрыСервисаОтправки(); -КонецФункции - -#КонецОбласти - -#Область РаботаВРежимеРИБ - -Функция ЭтоГлавныйУзел() Экспорт - Возврат ЦентрМониторингаСлужебный.ЭтоГлавныйУзел(); -КонецФункции - #КонецОбласти #КонецОбласти diff --git a/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl b/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl index c37ef168c..811aad74a 100644 --- a/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЦентрМониторингаСлужебный/Module.bsl @@ -29,46 +29,46 @@ КонецПроцедуры -// Получает регламентное задание по имени +// Получает регламентное задание по имени. // // Параметры: -// ИмяРегламентногоЗадания - Строка - имя регламентного задания -// СоздатьНовое - Булево - в случае отсутствия создается новое +// ИмяРегламентногоЗадания - Строка - имя регламентного задания. +// СоздатьНовое - Булево - в случае отсутствия создается новое. // Функция ПолучитьРегламентноеЗаданиеВнешнийВызов(ИмяРегламентногоЗадания, СоздатьНовое = Истина) Экспорт Возврат ПолучитьРегламентноеЗадание(ИмяРегламентногоЗадания, СоздатьНовое); КонецФункции -// Устанавливает расписание регламентного задания по умолчанию +// Устанавливает расписание регламентного задания по умолчанию. // // Параметры: -// ИмяРегламентногоЗадания - РегламентноеЗадание +// ИмяРегламентногоЗадания - РегламентноеЗадание. // Процедура УстановитьРасписаниеПоУмолчаниюВнешнийВызов(Задание) Экспорт УстановитьРасписаниеПоУмолчанию(Задание); КонецПроцедуры -// Удаляет регламентное задание по имени +// Удаляет регламентное задание по имени. // // Параметры: -// ИмяРегламентногоЗадания - Строка - имя регламентного задания +// ИмяРегламентногоЗадания - Строка - имя регламентного задания. // Процедура УдалитьРегламентноеЗаданиеВнешнийВызов(ИмяРегламентногоЗадания) Экспорт УдалитьРегламентноеЗадание(ИмяРегламентногоЗадания); КонецПроцедуры -// Устанавливает значение параметра центра мониторинга +// Устанавливает значение параметра центра мониторинга. // // Параметры: // Параметр - Строка - Ключ параметра центра мониторинга, возможные значения ключа -// см. в процедуре ПолучитьПараметрыПоУмолчанию в модуле ЦентрМониторингаСлужебный -// Значение - Произвольный тип - значение параметра центра мониторинга +// см. в процедуре ПолучитьПараметрыПоУмолчанию в модуле ЦентрМониторингаСлужебный. +// Значение - Произвольный тип - значение параметра центра мониторинга. // Функция УстановитьПараметрЦентраМониторингаВнешнийВызов(Параметр, Значение) Экспорт УстановитьПараметрЦентраМониторинга(Параметр, Значение); КонецФункции -// Получает параметры центра мониторинга по умолчанию +// Получает параметры центра мониторинга по умолчанию. // Возвращаемое значение // Структура // @@ -76,31 +76,42 @@ Возврат ПолучитьПараметрыПоУмолчанию(); КонецФункции -// Получает параметры центра мониторинга +// Получает параметры центра мониторинга. // Параметры: -// Параметры - Структура - где ключи необходимые параметры, значения которых необходимо получить +// Параметры - Структура - где ключи необходимые параметры, значения которых необходимо получить. // Возвращаемое значение -// Структура - значение константы ПараметрыЦентраМониторинга +// Структура - значение константы ПараметрыЦентраМониторинга. // Функция ПолучитьПараметрыЦентраМониторингаВнешнийВызов(Параметры = Неопределено) Экспорт Возврат ПолучитьПараметрыЦентраМониторинга(Параметры); КонецФункции -// Устанавливает параметры центра мониторинга +// Устанавливает параметры центра мониторинга. // Параметры: -// Параметры - Структура - необходимые параметры, значения которых необходимо получить +// Параметры - Структура - необходимые параметры, значения которых необходимо получить. // Функция УстановитьПараметрыЦентраМониторингаВнешнийВызов(НовыеПараметры) Экспорт УстановитьПараметрыЦентраМониторинга(НовыеПараметры); КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Обработчики условных вызовов из других подсистем. + +// См. описание одноименной процедуры в общем модуле РегламентныеЗаданияПереопределяемый. +// +Процедура ПриОпределенииНастроекРегламентныхЗаданий(Зависимости) Экспорт + Зависимость = Зависимости.Добавить(); + Зависимость.РегламентноеЗадание = Метаданные.РегламентныеЗадания.СборИОтправкаСтатистики; + Зависимость.РаботаетСВнешнимиРесурсами = Истина; +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции #Область РаботаСРегламентнымиЗаданиями -Функция ПолучитьРегламентноеЗадание(ИмяРегламентногоЗадания, СоздатьНовое = Истина) Экспорт +Функция ПолучитьРегламентноеЗадание(ИмяРегламентногоЗадания, СоздатьНовое = Истина) Результат = Неопределено; УстановитьПривилегированныйРежим(Истина); @@ -118,13 +129,13 @@ Возврат Результат; КонецФункции -Процедура УстановитьРасписаниеПоУмолчанию(Задание) Экспорт +Процедура УстановитьРасписаниеПоУмолчанию(Задание) Задание.Расписание.ПериодПовтораДней = 1; Задание.Расписание.ПериодПовтораВТечениеДня = 600; Задание.Записать(); КонецПроцедуры -Процедура УдалитьРегламентноеЗадание(ИмяРегламентногоЗадания) Экспорт +Процедура УдалитьРегламентноеЗадание(ИмяРегламентногоЗадания) РегЗадание = ПолучитьРегламентноеЗадание(ИмяРегламентногоЗадания, Ложь); Если РегЗадание <> Неопределено Тогда РегЗадание.Удалить(); @@ -134,6 +145,8 @@ Процедура ЦентрМониторингаРегламентноеЗадание() Экспорт ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.СборИОтправкаСтатистики); + НеобходимаЗаписьОценкиПроизводительности = Ложь; + ОценкаПроизводительностиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности"); Если ОценкаПроизводительностиСуществует Тогда МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); @@ -165,32 +178,99 @@ Если (ПараметрыЦентраМониторинга.ВключитьЦентрМониторинга ИЛИ ПараметрыЦентраМониторинга.ЦентрОбработкиИнформацииОПрограмме) И ЭтоГлавныйУзел() Тогда Если ПараметрыЦентраМониторинга.РегистрироватьДампы И ДатаЗапуска >= ПараметрыЦентраМониторинга.РегистрацияДамповСледующееФормирование Тогда - РегистрацияДампов(); + Попытка + РегистрацияДампов(); + Исключение + Комментарий = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Центр мониторинга - регистрация дампов'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + Комментарий); + ЦентрМониторинга.ЗаписатьОперациюБизнесСтатистики("ЦентрМониторинга.РегистрацияДампов.Ошибка", 1, Комментарий); + КонецПопытки; ПараметрыЦентраМониторинга.РегистрацияДамповСледующееФормирование = ТекущаяУниверсальнаяДата() - + ПараметрыЦентраМониторинга.РегистрацияДамповПериодФормирования; + + ПараметрыЦентраМониторинга.РегистрацияДамповПериодФормирования; + + НеобходимаЗаписьОценкиПроизводительности = Истина; КонецЕсли; Если ПараметрыЦентраМониторинга.РегистрироватьБизнесСтатистику И ДатаЗапуска >= ПараметрыЦентраМониторинга.БизнесСтатистикаСледующееФормирование Тогда - РегистрацияОперацийСтатистики(); - + Попытка + РегистрацияОперацийСтатистики(); + Исключение + Комментарий = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Центр мониторинга - регистрация операций статистики'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + Комментарий); + ЦентрМониторинга.ЗаписатьОперациюБизнесСтатистики("ЦентрМониторинга.РегистрацияОперацийСтатистики.Ошибка", 1, Комментарий); + КонецПопытки; + ПараметрыЦентраМониторинга.БизнесСтатистикаСледующееФормирование = ТекущаяУниверсальнаяДата() + ПараметрыЦентраМониторинга.БизнесСтатистикаПериодФормирования; + + НеобходимаЗаписьОценкиПроизводительности = Истина; КонецЕсли; Если (ПараметрыЦентраМониторинга.РегистрироватьСтатистикуКонфигурации ИЛИ ПараметрыЦентраМониторинга.РегистрироватьНастройкуКонфигурации) И ДатаЗапуска >= ПараметрыЦентраМониторинга.СтатистикаКонфигурацииСледующееФормирование Тогда - СобратьСтатистикуКонфигурации(Новый Структура("РегистрироватьСтатистикуКонфигурации, РегистрироватьНастройкуКонфигурации", ПараметрыЦентраМониторинга.РегистрироватьСтатистикуКонфигурации, ПараметрыЦентраМониторинга.РегистрироватьНастройкуКонфигурации)); - + Попытка + СобратьСтатистикуКонфигурации(Новый Структура("РегистрироватьСтатистикуКонфигурации, РегистрироватьНастройкуКонфигурации", ПараметрыЦентраМониторинга.РегистрироватьСтатистикуКонфигурации, ПараметрыЦентраМониторинга.РегистрироватьНастройкуКонфигурации)); + Исключение + Комментарий = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Центр мониторинга - собрать статистику конфигурации'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + Комментарий); + ЦентрМониторинга.ЗаписатьОперациюБизнесСтатистики("ЦентрМониторинга.СобратьСтатистикуКонфигурации.Ошибка", 1, Комментарий); + КонецПопытки; + ПараметрыЦентраМониторинга.СтатистикаКонфигурацииСледующееФормирование = ТекущаяУниверсальнаяДата() + ПараметрыЦентраМониторинга.СтатистикаКонфигурацииПериодФормирования; + + НеобходимаЗаписьОценкиПроизводительности = Истина; КонецЕсли; Если ДатаЗапуска >= ПараметрыЦентраМониторинга.ОтправкаДанныхСледующееФормирование Тогда - СформироватьПакетДляОтправки(); - HTTPОтвет = ОтправитьДанныеМониторинга(); + Попытка + СформироватьПакетДляОтправки(); + Исключение + Комментарий = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Центр мониторинга - сформировать пакет для отправки'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + Комментарий); + ЦентрМониторинга.ЗаписатьОперациюБизнесСтатистики("ЦентрМониторинга.СформироватьПакетДляОтправки.Ошибка", 1, Комментарий); + КонецПопытки; + + Попытка + HTTPОтвет = ОтправитьДанныеМониторинга(); + Исключение + Комментарий = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Центр мониторинга - отправить данные мониторинга'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + Комментарий); + ЦентрМониторинга.ЗаписатьОперациюБизнесСтатистики("ЦентрМониторинга.ОтправитьДанныеМониторинга.Ошибка", 1, Комментарий); + КонецПопытки; ПараметрыЦентраМониторинга.ОтправкаДанныхСледующееФормирование = ТекущаяУниверсальнаяДата() + ПолучитьПараметрыЦентраМониторинга("ОтправкаДанныхПериодФормирования"); @@ -203,6 +283,8 @@ ПараметрыЦентраМониторинга.Удалить("СтатистикаКонфигурацииСледующееФормирование"); ПараметрыЦентраМониторинга.Удалить("СтатистикаКонфигурацииПериодФормирования"); + + НеобходимаЗаписьОценкиПроизводительности = Истина; КонецЕсли; // Что бы не было записи параметров, которые установились при обработке ответа от сервиса, @@ -218,7 +300,7 @@ УдалитьРегламентноеЗадание("СборИОтправкаСтатистики"); КонецЕсли; - Если ОценкаПроизводительностиСуществует Тогда + Если ОценкаПроизводительностиСуществует И НеобходимаЗаписьОценкиПроизводительности Тогда МодульОценкаПроизводительностиКлиентСервер.ЗакончитьЗамерВремени("ЦентрМониторингаСборИОтправкаСтатистики", ВремяНачала); КонецЕсли; КонецПроцедуры @@ -227,7 +309,7 @@ #Область РаботаСБизнесСтатистикой -Процедура РазобратьБуферОперацийСтатистики(ТекущаяДата) Экспорт +Процедура РазобратьБуферОперацийСтатистики(ТекущаяДата) ОценкаПроизводительностиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности"); Если ОценкаПроизводительностиСуществует Тогда МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); @@ -263,7 +345,7 @@ КонецЕсли; КонецПроцедуры -Процедура АгрегироватьЗамерыОперацийСтатистики(ТекущаяДата) Экспорт +Процедура АгрегироватьЗамерыОперацийСтатистики(ТекущаяДата) ОценкаПроизводительностиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности"); Если ОценкаПроизводительностиСуществует Тогда МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); @@ -307,7 +389,7 @@ КонецЕсли; КонецПроцедуры -Процедура РегистрацияОперацийСтатистики() Экспорт +Процедура РегистрацияОперацийСтатистики() ОценкаПроизводительностиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности"); Если ОценкаПроизводительностиСуществует Тогда МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); @@ -362,16 +444,16 @@ #Область РаботаСJSON -Функция СформироватьJSON(ИмяСекции, Данные, ДатаНачала = Неопределено, ДатаОкончания = Неопределено, ДопПараметры = Неопределено, КолонкиИндекса = Неопределено) Экспорт - Если ТипЗнч(Данные) = Тип("РезультатЗапроса") Тогда - JSONСтруктура = СформироватьJSONСтруктуруРезультатЗапроса(ИмяСекции, Данные, ДатаНачала, ДатаОкончания, ДопПараметры, КолонкиИндекса); - ТелоJSON = СтруктураJSONВСтроку(JSONСтруктура); +Функция СформироватьJSONСтруктуру(ИмяСекции, Данные, ДополнительныеПараметры = Неопределено) + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = Новый Соответствие; КонецЕсли; - Возврат ТелоJSON; -КонецФункции - -Функция СформироватьJSONСтруктуру(ИмяСекции, Данные, ДатаНачала = Неопределено, ДатаОкончания = Неопределено, ДопПараметры = Неопределено, КолонкиИндекса = Неопределено) Экспорт + ДатаНачала = ДополнительныеПараметры["ДатаНачала"]; + ДатаОкончания = ДополнительныеПараметры["ДатаОкончания"]; + ДопПараметры = ДополнительныеПараметры["ДопПараметры"]; + КолонкиИндекса = ДополнительныеПараметры["КолонкиИндекса"]; + Если ТипЗнч(Данные) = Тип("РезультатЗапроса") Тогда JSONСтруктура = СформироватьJSONСтруктуруРезультатЗапроса(ИмяСекции, Данные, ДатаНачала, ДатаОкончания, ДопПараметры, КолонкиИндекса) КонецЕсли; @@ -440,7 +522,7 @@ Возврат JSONСтруктура; КонецФункции -Функция СформироватьСтруктуруJSONДляОтправки(Параметры) Экспорт +Функция СформироватьСтруктуруJSONДляОтправки(Параметры) ДатаНачала = Параметры.ДатаНачала; ДатаОкончания = Параметры.ДатаОкончания; @@ -472,7 +554,11 @@ Если ПараметрыЦентраМониторинга.РегистрироватьДампы Тогда ТопДампов = РегистрыСведений.ДампыПлатформы.ПолучитьТопВариантов(ДатаНачала, ДатаОкончания, ТопДамповКоличество); - СекцияDUMPS = СформироватьJSONСтруктуру("dumps", ТопДампов, ДатаНачала, ДатаОкончания); + + ДополнительныеПараметры = Новый Соответствие; + ДополнительныеПараметры.Вставить("ДатаНачала", ДатаНачала); + ДополнительныеПараметры.Вставить("ДатаОкончания", ДатаОкончания); + СекцияDUMPS = СформироватьJSONСтруктуру("dumps", ТопДампов, ДополнительныеПараметры); КонецЕсли; Если ПараметрыЦентраМониторинга.РегистрироватьБизнесСтатистику Тогда @@ -480,7 +566,12 @@ КолонкиИндекса = Новый Соответствие; КолонкиИндекса.Вставить("ОперацияСтатистики", Новый Соответствие); КолонкиИндекса.Вставить("Период", Новый Соответствие); - СекцияОперацииСтатистики = СформироватьJSONСтруктуру("OperationStatistics", РезультатЗапроса, ДатаНачала, ДатаОкончания,,КолонкиИндекса); + + ДополнительныеПараметры = Новый Соответствие; + ДополнительныеПараметры.Вставить("ДатаНачала", ДатаНачала); + ДополнительныеПараметры.Вставить("ДатаОкончания", ДатаОкончания); + ДополнительныеПараметры.Вставить("КолонкиИндекса", КолонкиИндекса); + СекцияОперацииСтатистики = СформироватьJSONСтруктуру("OperationStatistics", РезультатЗапроса, ДополнительныеПараметры); СекцияОперацииСтатистики["OperationStatistics"].Вставить("AggregationPeriod", ПериодУдаления); РезультатЗапроса = РегистрыСведений.ЗамерыКомментарииСтатистики.ПолучитьЗамеры(ДатаНачала, ДатаОкончания, ПериодУдаления); @@ -488,7 +579,13 @@ КолонкиИндекса.Вставить("ОперацияСтатистики", Новый Соответствие); КолонкиИндекса.Вставить("Период", Новый Соответствие); КолонкиИндекса.Вставить("КомментарийСтатистики", Новый Соответствие); - СекцияКомментарииСтатистики = СформироватьJSONСтруктуру("CommentsStatistics", РезультатЗапроса, ДатаНачала, ДатаОкончания,,КолонкиИндекса); + + ДополнительныеПараметры = Новый Соответствие; + ДополнительныеПараметры.Вставить("ДатаНачала", ДатаНачала); + ДополнительныеПараметры.Вставить("ДатаОкончания", ДатаОкончания); + ДополнительныеПараметры.Вставить("КолонкиИндекса", КолонкиИндекса); + СекцияКомментарииСтатистики = СформироватьJSONСтруктуру("CommentsStatistics", РезультатЗапроса, ДополнительныеПараметры); + СекцияКомментарииСтатистики["CommentsStatistics"]["columnsValueIndex"].Удалить("ОперацияСтатистики"); СекцияКомментарииСтатистики["CommentsStatistics"]["columnsValueIndex"].Удалить("Период"); СекцияКомментарииСтатистики["CommentsStatistics"].Вставить("AggregationPeriod", ПериодУдаления); @@ -498,7 +595,12 @@ КолонкиИндекса.Вставить("ОперацияСтатистики", Новый Соответствие); КолонкиИндекса.Вставить("Период", Новый Соответствие); КолонкиИндекса.Вставить("ОбластьСтатистики", Новый Соответствие); - СекцияОбластиСтатистики = СформироватьJSONСтруктуру("StatisticalAreas", РезультатЗапроса, ДатаНачала, ДатаОкончания,,КолонкиИндекса); + + ДополнительныеПараметры = Новый Соответствие; + ДополнительныеПараметры.Вставить("ДатаНачала", ДатаНачала); + ДополнительныеПараметры.Вставить("ДатаОкончания", ДатаОкончания); + ДополнительныеПараметры.Вставить("КолонкиИндекса", КолонкиИндекса); + СекцияОбластиСтатистики = СформироватьJSONСтруктуру("StatisticalAreas", РезультатЗапроса, ДополнительныеПараметры); СекцияОбластиСтатистики["StatisticalAreas"]["columnsValueIndex"].Удалить("ОперацияСтатистики"); СекцияОбластиСтатистики["StatisticalAreas"]["columnsValueIndex"].Удалить("Период"); СекцияОбластиСтатистики["StatisticalAreas"].Вставить("AggregationPeriod", ПериодУдаления); @@ -552,7 +654,11 @@ ДопПараметры = Новый Структура("MetadataName", Метаданные.Имя); ДопПараметры.Вставить("WorkingMode", ?(ОбщегоНазначения.ИнформационнаяБазаФайловая(), "F", "S")); ДопПараметры.Вставить("DivisionByRegions", РазделениеПоОбластямДанныхВключено); - СекцияСтатистикаКонфигурации = СформироватьJSONСтруктуру("StatisticsConfiguration", РезультатЗапроса, ДатаНачала,,ДопПараметры); + + ДополнительныеПараметры = Новый Соответствие; + ДополнительныеПараметры.Вставить("ДатаНачала", ДатаНачала); + ДополнительныеПараметры.Вставить("ДопПараметры", ДопПараметры); + СекцияСтатистикаКонфигурации = СформироватьJSONСтруктуру("StatisticsConfiguration", РезультатЗапроса, ДополнительныеПараметры); КонецЕсли; КонецЕсли; #КонецОбласти @@ -602,7 +708,11 @@ РезультатЗапроса = РегистрыСведений.СтатистикаКонфигурации.ПолучитьСтатистику(1); ДопПараметры = Новый Структура("MetadataName", Метаданные.Имя); ДопПараметры.Вставить("WorkingMode", ?(ОбщегоНазначения.ИнформационнаяБазаФайловая(), 0, 1)); - СекцияНастройкаКонфигурации = СформироватьJSONСтруктуру("Options", РезультатЗапроса, ДатаНачала,,ДопПараметры); + + ДополнительныеПараметры = Новый Соответствие; + ДополнительныеПараметры.Вставить("ДатаНачала", ДатаНачала); + ДополнительныеПараметры.Вставить("ДопПараметры", ДопПараметры); + СекцияНастройкаКонфигурации = СформироватьJSONСтруктуру("Options", РезультатЗапроса, ДополнительныеПараметры); КонецЕсли; КонецЕсли; #КонецОбласти @@ -616,7 +726,12 @@ КолонкиИндекса = Новый Соответствие; КолонкиИндекса.Вставить("Период", Новый Соответствие); КолонкиИндекса.Вставить("КлючеваяОперация", Новый Соответствие); - СекцияТопAPDEX = СформироватьJSONСтруктуру("TopApdex", РезультатЗапроса, ДатаНачала, ДатаОкончания,,КолонкиИндекса); + + ДополнительныеПараметры = Новый Соответствие; + ДополнительныеПараметры.Вставить("ДатаНачала", ДатаНачала); + ДополнительныеПараметры.Вставить("ДатаОкончания", ДопПараметры); + ДополнительныеПараметры.Вставить("КолонкиИндекса", КолонкиИндекса); + СекцияТопAPDEX = СформироватьJSONСтруктуру("TopApdex", РезультатЗапроса, ДополнительныеПараметры); СекцияТопAPDEX["TopApdex"].Вставить("AggregationPeriod", ПериодУдаления); КонецЕсли; @@ -625,7 +740,12 @@ КолонкиИндекса = Новый Соответствие; КолонкиИндекса.Вставить("Период", Новый Соответствие); КолонкиИндекса.Вставить("КлючеваяОперация", Новый Соответствие); - СекцияТопAPDEXСлужебные = СформироватьJSONСтруктуру("TopApdexTechnology", РезультатЗапроса, ДатаНачала, ДатаОкончания,,КолонкиИндекса); + + ДополнительныеПараметры = Новый Соответствие; + ДополнительныеПараметры.Вставить("ДатаНачала", ДатаНачала); + ДополнительныеПараметры.Вставить("ДатаОкончания", ДопПараметры); + ДополнительныеПараметры.Вставить("КолонкиИндекса", КолонкиИндекса); + СекцияТопAPDEXСлужебные = СформироватьJSONСтруктуру("TopApdexTechnology", РезультатЗапроса, ДополнительныеПараметры); СекцияТопAPDEXСлужебные["TopApdexTechnology"].Вставить("AggregationPeriod", ПериодУдаления); КонецЕсли; КонецЕсли; @@ -633,7 +753,7 @@ ИдентификаторИнформационнойБазы = Строка(ПараметрыЦентраМониторинга.ИдентификаторИнформационнойБазы); JSONСтруктура = Новый Структура; JSONСтруктура.Вставить("ib", ИдентификаторИнформационнойБазы); - JSONСтруктура.Вставить("versionPacket", "1.0.0.0"); + JSONСтруктура.Вставить("versionPacket", "1.0.2.0"); JSONСтруктура.Вставить("datePacket", ТекущаяУниверсальнаяДата()); Если ПараметрыЦентраМониторинга.РегистрироватьИнформациюОСистеме Тогда @@ -677,7 +797,7 @@ Возврат JSONСтруктура; КонецФункции -Функция СтрокаJSONВСтруктуру(СтрокаJSON) Экспорт +Функция СтрокаJSONВСтруктуру(СтрокаJSON) ЧтениеJSON = Новый ЧтениеJSON(); ЧтениеJSON.УстановитьСтроку(СтрокаJSON); @@ -698,7 +818,7 @@ #Область РаботаСHTTPСервисом -Функция HTTPСервисОтправитьКакТекст(Сервер, АдресРесурса, Данные, Порт = 80, ЗащищенноеСоединение = Ложь) Экспорт +Функция HTTPСервисОтправитьКакТекст(Сервер, АдресРесурса, Данные, Порт = 80, ЗащищенноеСоединение = Ложь) Параметры = Новый Структура; Параметры.Вставить("Сервер", Сервер); Параметры.Вставить("Порт", Порт); @@ -713,19 +833,6 @@ Возврат HTTPОтветСтруктура; КонецФункции -Функция HTTPСервисОтправитьКакZIP(Сервер, АдресРесурса, Данные, Порт = 80) Экспорт - Параметры = Новый Структура; - Параметры.Вставить("Сервер", Сервер); - Параметры.Вставить("АдресРесурса", АдресРесурса); - Параметры.Вставить("Данные", Данные); - Параметры.Вставить("Метод", "POST"); - Параметры.Вставить("ТипДанных", "ZIP"); - - HTTPОтветСтруктура = HTTPСервисОтправитьДанныеСлужебный(Параметры); - - Возврат HTTPОтветСтруктура; -КонецФункции - Функция HTTPСервисОтправитьДанныеСлужебный(Параметры) Если Параметры.ЗащищенноеСоединение Тогда HTTPСоединение = Новый HTTPСоединение(Параметры.Сервер, Параметры.Порт,,,,20, Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено)); @@ -782,7 +889,7 @@ Возврат ИмяФайлаАрхива; КонецФункции -Функция HTTPОтветВСтруктуру(Ответ) Экспорт +Функция HTTPОтветВСтруктуру(Ответ) Результат = Новый Структура; Результат.Вставить("КодСостояния", Ответ.КодСостояния); @@ -815,7 +922,7 @@ #Область РаботаСРегистрациейДампов -Процедура РегистрацияДампов() Экспорт +Процедура РегистрацияДампов() ОценкаПроизводительностиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности"); Если ОценкаПроизводительностиСуществует Тогда МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); @@ -856,7 +963,7 @@ Для Каждого ФайлДампа Из ФайлыДампов Цикл Если ФайлыДамповЗарегистрированные[ФайлДампа.ПолноеИмя] = Неопределено Тогда ДампНовый = Новый Структура; - СтруктураДампа = ПолучитьСтруктуруДампа(ФайлДампа.Имя); + СтруктураДампа = ОписаниеДампа(ФайлДампа.Имя); ДампНовый.Вставить("ДатаРегистрации", ТекущаяУниверсальнаяДатаВМиллисекундах()); ДампНовый.Вставить("ВариантДампа", СтруктураДампа.Процесс + "_" + СтруктураДампа.ВерсияПлатформы + "_" + СтруктураДампа.Смещение); @@ -885,7 +992,7 @@ // Собирает базовую статистику по конфигурации // в случае существования подсистемы оценки производительности - // замеряет длительность выполнения + // замеряет длительность выполнения. // #Область СтатистикаКонфигурацииБазовая @@ -916,7 +1023,7 @@ // Собирает статистику по стандартным подсистемам конфигурации // в случае существования подсистемы оценки производительности - // замеряет длительность выполнения + // замеряет длительность выполнения. // #Область СтатистикаКонфигурацииСтандартныеПодсистемы @@ -963,7 +1070,7 @@ // Собирает переопределенную статистику по конфигурации // в случае существования подсистемы оценки производительности - // замеряет длительность выполнения + // замеряет длительность выполнения. // #Область СтатистикаКонфигурацииПереопределяемая @@ -1013,7 +1120,7 @@ #Область РаботаСПакетыДляОтправки -Процедура СформироватьПакетДляОтправки() Экспорт +Процедура СформироватьПакетДляОтправки() ОценкаПроизводительностиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности"); Если ОценкаПроизводительностиСуществует Тогда МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); @@ -1025,8 +1132,8 @@ ПараметрыЦентраМониторинга = ПолучитьПараметрыЦентраМониторинга(); Параметры = Новый Структура; - Параметры.Вставить("ДатаНачала", ПараметрыЦентраМониторинга.ДатаКрайнегоПакета + 1); - Параметры.Вставить("ДатаОкончания", ТекДата); + Параметры.Вставить("ДатаНачала", Дата(1,1,1) + Цел((ПараметрыЦентраМониторинга.ДатаКрайнегоПакета - Дата(1,1,1))/ПараметрыЦентраМониторинга.ПериодУдаления) * ПараметрыЦентраМониторинга.ПериодУдаления); + Параметры.Вставить("ДатаОкончания", Дата(1,1,1) + Цел((ТекДата - Дата(1,1,1))/ПараметрыЦентраМониторинга.ПериодУдаления) * ПараметрыЦентраМониторинга.ПериодУдаления - 1); Параметры.Вставить("ТопДамповКоличество", 5); Параметры.Вставить("TopApdex", ПараметрыЦентраМониторинга.TopApdex); Параметры.Вставить("TopApdexTech", ПараметрыЦентраМониторинга.TopApdexTech); @@ -1057,7 +1164,7 @@ КонецЕсли; КонецПроцедуры -Функция ОтправитьДанныеМониторинга() Экспорт +Функция ОтправитьДанныеМониторинга() Параметры = ПолучитьПараметрыСервисаОтправки(); ОценкаПроизводительностиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности"); @@ -1115,8 +1222,8 @@ Функция ВыполнятьЗамерыПроизводительности() ОценкаПроизводительностиСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОценкаПроизводительности"); Если ОценкаПроизводительностиСуществует Тогда - МодульОценкаПроизводительностиВызовСервераПолныеПрава = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиВызовСервераПолныеПрава"); - ВыполнятьЗамерыПроизводительности = МодульОценкаПроизводительностиВызовСервераПолныеПрава.ВыполнятьЗамерыПроизводительности(); + МодульОценкаПроизводительности = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительности"); + ВыполнятьЗамерыПроизводительности = МодульОценкаПроизводительности.ВыполнятьЗамерыПроизводительности(); Иначе ВыполнятьЗамерыПроизводительности = Неопределено; КонецЕсли; @@ -1124,26 +1231,26 @@ Возврат ВыполнятьЗамерыПроизводительности; КонецФункции -Функция ПолучитьПараметрыПоУмолчанию() Экспорт +Функция ПолучитьПараметрыПоУмолчанию() ПараметрыКонстанты = Новый Структура; - // Параметры сбора информации о системе + // Параметры сбора информации о системе. // ПараметрыКонстанты.Вставить("ВключитьЦентрМониторинга", Ложь); // Признак центра обработки - // Истина - сторонний разработчик + // Истина - сторонний разработчик. ПараметрыКонстанты.Вставить("ЦентрОбработкиИнформацииОПрограмме", Ложь); - // Идентификатор информационной базы + // Идентификатор информационной базы. // ПараметрыКонстанты.Вставить("ИдентификаторИнформационнойБазы", Новый УникальныйИдентификатор()); - // Параметры сбора информации о системе + // Параметры сбора информации о системе. // ПараметрыКонстанты.Вставить("РегистрироватьИнформациюОСистеме", Ложь); - // Параметры сбора информации о версиях подсистем + // Параметры сбора информации о версиях подсистем. // ПараметрыКонстанты.Вставить("РегистрироватьВерсииПодсистем", Ложь); @@ -1153,7 +1260,7 @@ ПараметрыКонстанты.Вставить("РегистрацияДамповПериодФормирования", 600); ПараметрыКонстанты.Вставить("РегистрироватьДампы", Ложь); - // Параметры сбора бизнес статистики + // Параметры сбора бизнес статистики. // ПараметрыКонстанты.Вставить("ПериодАгрегацииМалый", 60); ПараметрыКонстанты.Вставить("ПериодАгрегации", 600); @@ -1163,17 +1270,18 @@ ПараметрыКонстанты.Вставить("БизнесСтатистикаПериодФормирования", 600); ПараметрыКонстанты.Вставить("РегистрироватьБизнесСтатистику", Ложь); - // Параметры сбора статистики конфигурации + // Параметры сбора статистики конфигурации. // ПараметрыКонстанты.Вставить("СтатистикаКонфигурацииСледующееФормирование", Дата(1,1,1)); ПараметрыКонстанты.Вставить("СтатистикаКонфигурацииПериодФормирования", 86400); ПараметрыКонстанты.Вставить("РегистрироватьСтатистикуКонфигурации", Ложь); ПараметрыКонстанты.Вставить("РегистрироватьНастройкуКонфигурации", Ложь); - // Параметры сбора производительности - // ОценкаПроизводительностиВключена = 0 - Выключена - // ОценкаПроизводительностиВключена = 1 - Включена центром мониторинга - // ОценкаПроизводительностиВключена = 2 - Включена оценкой производительности + // Параметры сбора производительности. + // Если параметр ОценкаПроизводительностиВключена равен нулю, тогда выключена. + // Если параметр ОценкаПроизводительностиВключена равна единице, тогда включена центром мониторинга. + // Если параметр ОценкаПроизводительностиВключена равна двум, тогда включена оценкой производительности. + // ПараметрыКонстанты.Вставить("ОценкаПроизводительностиВключена", 0); ПараметрыКонстанты.Вставить("РегистрироватьПроизводительность", Ложь); ПараметрыКонстанты.Вставить("TopApdex", 10); @@ -1231,7 +1339,7 @@ Возврат Параметры; КонецФункции -Функция УстановитьПараметрыОтправки(Параметры) Экспорт +Функция УстановитьПараметрыОтправки(Параметры) ПараметрыОтправки = Новый Структура; ПараметрыОтправки.Вставить("ОценкаПроизводительностиВключена"); ПараметрыОтправки.Вставить("ВыполнятьЗамерыПроизводительности"); @@ -1347,26 +1455,27 @@ НачатьТранзакцию(); Попытка Если ПараметрыОтправки.ОценкаПроизводительностиВключена = 0 И НЕ ПараметрыОтправки.ВыполнятьЗамерыПроизводительности = Неопределено Тогда - МодульОценкаПроизводительностиВызовСервераПолныеПрава = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиВызовСервераПолныеПрава"); - МодульОценкаПроизводительностиВызовСервераПолныеПрава.ВключитьЗамерыПроизводительности(Ложь); + МодульОценкаПроизводительности = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительности"); + МодульОценкаПроизводительности.ВключитьЗамерыПроизводительности(Ложь); ИначеЕсли ПараметрыОтправки.ОценкаПроизводительностиВключена = 1 И НЕ ПараметрыОтправки.ВыполнятьЗамерыПроизводительности = Неопределено Тогда - МодульОценкаПроизводительностиВызовСервераПолныеПрава = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительностиВызовСервераПолныеПрава"); - МодульОценкаПроизводительностиВызовСервераПолныеПрава.ВключитьЗамерыПроизводительности(Истина); + МодульОценкаПроизводительности = ОбщегоНазначения.ОбщийМодуль("ОценкаПроизводительности"); + МодульОценкаПроизводительности.ВключитьЗамерыПроизводительности(Истина); КонецЕсли; УстановитьПараметрыЦентраМониторинга(ПараметрыОтправки); ЗафиксироватьТранзакцию(); - - Возврат ПараметрыОтправки; Исключение ОтменитьТранзакцию(); Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации(НСтр("ru = 'Центр мониторинга.Установка параметров отправки'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); ВызватьИсключение Ошибка; КонецПопытки; + + Возврат ПараметрыОтправки; + КонецФункции -Функция УстановитьПараметрыЦентраМониторинга(НовыеПараметры) Экспорт +Функция УстановитьПараметрыЦентраМониторинга(НовыеПараметры) Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Константа.ПараметрыЦентраМониторинга"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; @@ -1402,7 +1511,7 @@ КонецПопытки; КонецФункции -Функция УдалитьПараметрыЦентраМониторинга() Экспорт +Функция УдалитьПараметрыЦентраМониторинга() Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Константа.ПараметрыЦентраМониторинга"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; @@ -1427,8 +1536,7 @@ КонецПопытки; КонецФункции -Функция УстановитьПараметрЦентраМониторинга(Параметр, Значение) Экспорт - +Функция УстановитьПараметрЦентраМониторинга(Параметр, Значение) Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Константа.ПараметрыЦентраМониторинга"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; @@ -1457,15 +1565,7 @@ КонецПопытки; КонецФункции -Функция ИспользоватьЦентрМониторинга() Экспорт - ПараметрыЦентраМониторинга = Новый Структура("ВключитьЦентрМониторинга, ЦентрОбработкиИнформацииОПрограмме"); - - ПолучитьПараметрыЦентраМониторинга(ПараметрыЦентраМониторинга); - - Возврат ПараметрыЦентраМониторинга.ВключитьЦентрМониторинга ИЛИ ПараметрыЦентраМониторинга.ЦентрОбработкиИнформацииОПрограмме; -КонецФункции - -Функция ПолучитьПараметрыСервисаОтправки() Экспорт +Функция ПолучитьПараметрыСервисаОтправки() ПараметрыСервиса = Новый Структура; ПараметрыСервиса.Вставить("ВключитьЦентрМониторинга"); @@ -1497,7 +1597,7 @@ #Область РаботаСФайломНастроек -Функция ПолучитьКаталогДампов() Экспорт +Функция ПолучитьКаталогДампов() КаталогНастроек = ПолучитьКаталогНастроекТехнологическогоЖурнала(); КаталогДампов = НайтиКаталогДампов(КаталогНастроек); @@ -1523,24 +1623,72 @@ Файл = Новый Файл(ПутьКаталога + ИмяФайлаНастроек); Если Файл.Существует() Тогда - ЧтениеXML = Новый ЧтениеXML; - ЧтениеXML.ОткрытьФайл(Файл.ПолноеИмя, Новый ПараметрыЧтенияXML(,,,,,,,Истина, Истина)); - Префикс = ?(ЗначениеЗаполнено(ЧтениеXML.Префикс), ЧтениеXML.Префикс + ":", ЧтениеXML.Префикс); - Пока ЧтениеXML.Прочитать() Цикл - Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.ИмеетИмя И ВРЕГ(ЧтениеXML.Имя) = "DUMP" Тогда - ПараметрыДампов = Новый Структура; - Если ЧтениеXML.КоличествоАтрибутов() > 0 Тогда - Пока ЧтениеXML.ПрочитатьАтрибут() Цикл - ПараметрыДампов.Вставить(ЧтениеXML.ЛокальноеИмя, ЧтениеXML.Значение); - КонецЦикла; + Попытка + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.ОткрытьФайл(Файл.ПолноеИмя, Новый ПараметрыЧтенияXML(,,,,,,,Истина, Истина)); + Префикс = ?(ЗначениеЗаполнено(ЧтениеXML.Префикс), ЧтениеXML.Префикс + ":", ЧтениеXML.Префикс); + Пока ЧтениеXML.Прочитать() Цикл + Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.ИмеетИмя И ВРЕГ(ЧтениеXML.Имя) = "DUMP" Тогда + ПараметрыДампов = Новый Структура; + Если ЧтениеXML.КоличествоАтрибутов() > 0 Тогда + Пока ЧтениеXML.ПрочитатьАтрибут() Цикл + ПараметрыДампов.Вставить(ЧтениеXML.ЛокальноеИмя, ЧтениеXML.Значение); + КонецЦикла; + КонецЕсли; + КонецЕсли; + КонецЦикла; + Исключение + Сообщение = НСтр("ru='Ошибка чтения файла настроек технологического журнала'"); + Сообщение = Сообщение + " """ +Файл.ПолноеИмя + """."; + Сообщение = Сообщение + НСтр("ru='Скорее всего файл поврежден. Регистрация дампов не возможна. Удалите поврежденный файл или восстановите настройки.'"); + ВызватьИсключение Сообщение; + КонецПопытки; + + Если ПараметрыДампов <> Неопределено Тогда + КаталогДампов.Путь = СформироватьПутьСРазделителем(ПараметрыДампов.Location); + Если ПараметрыДампов.type = "0" ИЛИ СтрНайти(КаталогДампов.Путь, "80af5716-b134-4b1c-a38d-4658d1ac4196") > 0 Тогда + КаталогДампов.УдалятьДампы = Истина; + КонецЕсли; + ЧтениеXML.Закрыть(); + Иначе + ЧтениеXML.Закрыть(); + ЧтениеXML.ОткрытьФайл(Файл.ПолноеИмя, Новый ПараметрыЧтенияXML(,,,,,,,Ложь, Ложь)); + + ПостроительDOM = Новый ПостроительDOM; + ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML); + ДокументDOM.Нормализовать(); + ЧтениеXML.Закрыть(); + + Если ДокументDOM.ЕстьДочерниеУзлы() Тогда + ПервыйДочерний = ДокументDOM.ПервыйДочерний; + Если ВРЕГ(ПервыйДочерний.ИмяУзла) = "CONFIG" Тогда + КаталогДампов.Путь = СформироватьПутьСРазделителем(СформироватьПутьСРазделителем(КаталогВременныхФайлов() + "Dumps") + "80af5716-b134-4b1c-a38d-4658d1ac4196"); + КаталогДампов.УдалятьДампы = Истина; + + ЭлементДампы = ДокументDOM.СоздатьЭлемент("dump"); + ЭлементДампы.УстановитьАтрибут("location", КаталогДампов.Путь); + ЭлементДампы.УстановитьАтрибут("create", "1"); + ЭлементДампы.УстановитьАтрибут("type", "0"); + ЭлементДампы.УстановитьАтрибут("externaldump", "1"); + ПервыйДочерний.ДобавитьДочерний(ЭлементДампы); + + Попытка + ЗаписьXML = Новый ЗаписьXML; + ЗаписьDOM = Новый ЗаписьDOM; + ЗаписьXML.ОткрытьФайл(Файл.ПолноеИмя, Новый ПараметрыЗаписиXML(,,Истина,Истина)); + ЗаписьDOM.Записать(ДокументDOM, ЗаписьXML); + ЗаписьXML.Закрыть(); + Исключение + Сообщение = НСтр("ru='Ошибка записи файла настроек технологического журнала'"); + Сообщение = Сообщение + " """ +Файл.ПолноеИмя + """."; + Сообщение = Сообщение + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение Сообщение; + КонецПопытки; КонецЕсли; КонецЕсли; - КонецЦикла; - - КаталогДампов.Путь = СформироватьПутьСРазделителем(ПараметрыДампов.Location); - Если ПараметрыДампов.type = "0" ИЛИ Найти(КаталогДампов.Путь, "80af5716-b134-4b1c-a38d-4658d1ac4196") > 0 Тогда - КаталогДампов.УдалятьДампы = Истина; + КонецЕсли; + Иначе КаталогДампов.Путь = СоздатьФайлНастроекСбораДампов(ПутьКаталога); КаталогДампов.УдалятьДампы = Истина; @@ -1554,14 +1702,21 @@ КаталогДампов = СформироватьПутьСРазделителем(СформироватьПутьСРазделителем(КаталогВременныхФайлов() + "Dumps") + "80af5716-b134-4b1c-a38d-4658d1ac4196"); - ЗаписьXML = Новый ЗаписьXML; - ЗаписьXML.ОткрытьФайл(ПутьКаталога + ИмяФайлаНастроек); - СборДампов = - "<config xmlns=""http://v8.1c.ru/v8/tech-log""> - | <dump location=""" + КаталогДампов + """ create=""1"" type=""0""/> - |</config>"; - ЗаписьXML.ЗаписатьБезОбработки(СборДампов); - ЗаписьXML.Закрыть(); + Попытка + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.ОткрытьФайл(ПутьКаталога + ИмяФайлаНастроек); + СборДампов = + "<config xmlns=""http://v8.1c.ru/v8/tech-log""> + | <dump location=""" + КаталогДампов + """ create=""1"" type=""0"" externaldump=""1""/> + |</config>"; + ЗаписьXML.ЗаписатьБезОбработки(СборДампов); + ЗаписьXML.Закрыть(); + Исключение + Сообщение = НСтр("ru='Ошибка записи файла настроек технологического журнала'"); + Сообщение = Сообщение + " """ +ПутьКаталога + ИмяФайлаНастроек + """."; + Сообщение = Сообщение + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение Сообщение; + КонецПопытки; Возврат КаталогДампов; КонецФункции @@ -1643,10 +1798,10 @@ Текст = Новый ЧтениеТекста(ФайлКонфигурацииНастроек.ПолноеИмя); Данные = Текст.Прочитать(); - ИндексПоиска = Найти(Данные, СтрокаПоиска); + ИндексПоиска = СтрНайти(Данные, СтрокаПоиска); Если ИндексПоиска > 0 Тогда ДанныеБуфер = Прав(Данные, СтрДлина(Данные) - (ИндексПоиска + ДлинаСтрокиПоиска - 1)); - ИндексПоиска = Найти(ДанныеБуфер, Символы.ПС); + ИндексПоиска = СтрНайти(ДанныеБуфер, Символы.ПС); Если ИндексПоиска > 0 Тогда КаталогНастроек.Путь = СформироватьПутьСРазделителем(Лев(ДанныеБуфер, ИндексПоиска - 1)); Иначе @@ -1667,13 +1822,20 @@ #Область РаботаСДампами -Функция ПолучитьСтруктуруДампа(Знач ИмяФайла) Экспорт +Функция ОписаниеДампа(Знач ИмяФайла) ИмяФайла = СтрЗаменить(ИмяФайла, "_", Символы.ПС); - + СтруктураДампа = Новый Структура; - СтруктураДампа.Вставить("Процесс", СтрПолучитьСтроку(ИмяФайла, 1)); - СтруктураДампа.Вставить("ВерсияПлатформы", СтрПолучитьСтроку(ИмяФайла, 2)); - СтруктураДампа.Вставить("Смещение", СтрПолучитьСтроку(ИмяФайла, 3)); + Если СтрЧислоСтрок(ИмяФайла) = 3 Тогда + СтруктураДампа.Вставить("Процесс", СтрПолучитьСтроку(ИмяФайла, 1)); + СтруктураДампа.Вставить("ВерсияПлатформы", СтрПолучитьСтроку(ИмяФайла, 2)); + СтруктураДампа.Вставить("Смещение", СтрПолучитьСтроку(ИмяФайла, 3)); + Иначе + СисИнфо = Новый СистемнаяИнформация; + СтруктураДампа.Вставить("Процесс", "userdump"); + СтруктураДампа.Вставить("ВерсияПлатформы", СисИнфо.ВерсияПриложения); + СтруктураДампа.Вставить("Смещение", "ffffffff"); + КонецЕсли; Возврат СтруктураДампа; КонецФункции @@ -1691,7 +1853,7 @@ #КонецОбласти #Область РаботаССистемнойИнформацией -Функция ПолучитьСистемнуюИнформацию() Экспорт +Функция ПолучитьСистемнуюИнформацию() СисИнфо = Новый СистемнаяИнформация; Результат = Новый Структура; @@ -1711,7 +1873,7 @@ Возврат Результат; КонецФункции -Функция ВерсииПодсистем() Экспорт +Функция ВерсииПодсистем() Запрос = Новый Запрос; Запрос.Текст = @@ -1746,7 +1908,7 @@ #Область РаботаВРежимеРИБ -Функция ЭтоГлавныйУзел() Экспорт +Функция ЭтоГлавныйУзел() УстановитьПривилегированныйРежим(Истина); Возврат НЕ ПланыОбмена.ГлавныйУзел() <> Неопределено; @@ -1764,17 +1926,21 @@ Возврат ХешСумма; КонецФункции -Функция СобытиеЖурналаРегистрацииЦентрМониторингаУдалениеДампа() Экспорт +Функция СобытиеЖурналаРегистрацииЦентрМониторингаУдалениеДампа() Возврат НСтр("ru = 'Центр мониторинга.Удаление дампа'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); КонецФункции -Функция СобытиеЖурналаРегистрацииЦентрМониторингаРазобратьБуферОперацийСтатистики() Экспорт +Функция СобытиеЖурналаРегистрацииЦентрМониторингаРазобратьБуферОперацийСтатистики() Возврат НСтр("ru = 'Центр мониторинга.Разобрать буфер операций статистики'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); КонецФункции #КонецОбласти Процедура ПервоначальноеЗаполнение() Экспорт - + + Если РазделениеПоОбластямДанныхВключено() Тогда + Возврат; + КонецЕсли; + ТекДата = ТекущаяУниверсальнаяДата(); УдалитьПараметрыЦентраМониторинга(); diff --git a/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl index 306022956..bcc06228f 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодпись/Module.bsl @@ -80,11 +80,16 @@ // - Строка - адрес временного хранилища, содержащего двоичные данные. // - Строка - полное имя файла, содержащего двоичные данные, // которые были подписаны. +// - Структура - со свойствами: +// * ПараметрыXMLDSig - Структура - как возвращает функция ПараметрыXMLDSig общего +// модуля ЭлектроннаяПодписьКлиентСервер. +// * КонвертSOAP - Строка - шаблон сообщения <soap:Envelope>. // // Подпись - ДвоичныеДанные - двоичные данные электронной подписи. // - Строка - адрес временного хранилища, содержащего двоичные данные. // - Строка - полное имя файла, содержащего двоичные данные // электронной подписи. +// - Неопределено - если ИсходныеДанные конверт SOAP. // // ОписаниеОшибки - Null - вызвать исключение при ошибке проверки. // - Строка - содержит описание ошибки, если произошла ошибка. @@ -119,20 +124,40 @@ ПодписьДляПроверки = ПолучитьИзВременногоХранилища(Подпись); КонецЕсли; - Сертификат = Неопределено; - Попытка - МенеджерКриптографииДляПроверки.ПроверитьПодпись(ИсходныеДанныеДляПроверки, ПодписьДляПроверки, Сертификат); - Исключение - Если ОписаниеОшибки = Null Тогда - ВызватьИсключение; + Если ТипЗнч(ИсходныеДанныеДляПроверки) = Тип("Структура") + И ИсходныеДанныеДляПроверки.Свойство("ПараметрыXMLDSig") Тогда + + Попытка + Результат = ЭлектроннаяПодписьСлужебный.ПроверитьПодпись( + ИсходныеДанныеДляПроверки.КонвертSOAP, + ИсходныеДанныеДляПроверки.ПараметрыXMLDSig, + МенеджерКриптографииДляПроверки); + Исключение + ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Возврат Ложь; + КонецПопытки; + + Сертификат = Результат.Сертификат; + ДатаПодписания = Результат.ДатаПодписания; + + Иначе + + Сертификат = Неопределено; + Попытка + МенеджерКриптографииДляПроверки.ПроверитьПодпись(ИсходныеДанныеДляПроверки, ПодписьДляПроверки, Сертификат); + Исключение + Если ОписаниеОшибки = Null Тогда + ВызватьИсключение; + КонецЕсли; + ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Возврат Ложь; + КонецПопытки; + + ДатаПодписания = ДатаПодписания(ПодписьДляПроверки); + Если Не ЗначениеЗаполнено(ДатаПодписания) Тогда + ДатаПодписания = НаДату; КонецЕсли; - ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - Возврат Ложь; - КонецПопытки; - - ДатаПодписания = ДатаПодписания(ПодписьДляПроверки); - Если Не ЗначениеЗаполнено(ДатаПодписания) Тогда - ДатаПодписания = НаДату; + КонецЕсли; Возврат ПроверитьСертификат(МенеджерКриптографииДляПроверки, Сертификат, ОписаниеОшибки, ДатаПодписания); @@ -236,6 +261,9 @@ // * ДатаПодписи - Дата - дата, когда подпись была сделана. Имеет смысл для случая, // когда дату невозможно извлечь из данных подписи. Если не // указана или пустая, тогда используется текущая дата сеанса. +// * ДатаПроверкиПодписи - Дата - дата последней проверки подписи. +// * ПодписьВерна - Булево - результат последней проверки подписи. +// // Производные свойства: // * Сертификат - ДвоичныеДанные - содержит выгрузку сертификата, // который использовался для подписания (содержится в подписи). @@ -452,6 +480,284 @@ КонецФункции +// Позволяет заполнить справочник ПрограммыЭлектроннойПодписиИШифрования, например, при обновлении ИБ. +// Дополняет стандартный список из двух программ: ViPNet и КриптоПро. +// Если программа с указанными именем и типом уже существует, то ее свойства перезаполняются +// указанными. При заполнении не проверяется корректность указанных свойств. +// +// При заполнении можно использовать поставляемые описания программ, список которых находится в процедуре +// ПоставляемыеНастройкиПрограмм модуля менеджера справочника ПрограммыЭлектроннойПодписиИШифрования. +// +// Параметры: +// ОписаниеПрограмм - Массив - содержит значения типа Структура со свойствами: +// * ИмяПрограммы - Строка - уникальное имя программы, присвоенное ее разработчиком, +// например, "Signal-COM CPGOST Cryptographic Provider". +// * ТипПрограммы - Число - специальное число, которое описывает тип программы и +// дополняет имя программы, например, 75. +// +// Следующие параметры требуются, если указано Имя и Тип программы, +// описание которой не поставляется, либо требуется обновить отдельные свойства. +// +// * Представление - Строка - наименование программы, которое увидит пользователь, +// например, "Сигнал-КОМ CSP (RFC 4357)". +// * АлгоритмПодписи - Строка - имя алгоритма подписи, который поддерживает +// указанная программа, например, "ECR3410-CP". +// * АлгоритмХеширования - Строка - имя алгоритма хеширования данных, который поддерживает +// указанная программа, например, "RUS-HASH-CP". Используется для подготовки +// данных при формировании подписи с помощью алгоритма подписания. +// * АлгоритмШифрования - Строка - имя алгоритма шифрования, который поддерживает +// указанная программа, например, "GOST28147". +// +// Пример: +// ОписаниеПрограмм = Новый Массив; +// +// // Заполнение дополнительной программы "Сигнал-КОМ CSP (RFC 4357)". +// ОписаниеПрограммы = ЭлектроннаяПодпись.НовоеОписаниеПрограммы(); +// ОписаниеПрограммы.ИмяПрограммы = "Signal-COM CPGOST Cryptographic Provider"; +// ОписаниеПрограммы.ТипПрограммы = 75; +// ОписаниеПрограмм.Добавить(ОписаниеПрограммы); +// +// // Изменение алгоритма поставляемой программы ViPNet CSP. +// ОписаниеПрограммы = ЭлектроннаяПодпись.НовоеОписаниеПрограммы(); +// ОписаниеПрограммы.ИмяПрограммы = "Infotecs Cryptographic Service Provider"; +// ОписаниеПрограммы.ТипПрограммы = 2; +// ОписаниеПрограммы.АлгоритмПодписи = "GOST 34.10-2012 512"; +// ОписаниеПрограмм.Добавить(ОписаниеПрограммы); +// +// ЭлектроннаяПодпись.ЗаполнитьСписокПрограмм(ОписаниеПрограмм); +// +Процедура ЗаполнитьСписокПрограмм(ОписаниеПрограмм) Экспорт + + ПоставляемыеНастройки = Справочники.ПрограммыЭлектроннойПодписиИШифрования.ПоставляемыеНастройкиПрограмм(); + ВыполняетсяОбновлениеИнформационнойБазы = ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Программы.Ссылка КАК Ссылка, + | Программы.ИмяПрограммы, + | Программы.ТипПрограммы + |ИЗ + | Справочник.ПрограммыЭлектроннойПодписиИШифрования КАК Программы"; + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ПрограммыЭлектроннойПодписиИШифрования"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + Выгрузка = Запрос.Выполнить().Выгрузить(); + + Для Каждого ОписаниеПрограммы Из ОписаниеПрограмм Цикл + Отбор = Новый Структура; + Отбор.Вставить("ИмяПрограммы", ОписаниеПрограммы.ИмяПрограммы); + Отбор.Вставить("ТипПрограммы", ОписаниеПрограммы.ТипПрограммы); + + Строки = Выгрузка.НайтиСтроки(Отбор); + Если Строки.Количество() > 0 Тогда + ПрограммаОбъект = Строки[0].Ссылка.ПолучитьОбъект(); + Иначе + ПрограммаОбъект = Справочники.ПрограммыЭлектроннойПодписиИШифрования.СоздатьЭлемент(); + КонецЕсли; + ОбновитьЗначение(ПрограммаОбъект.ПометкаУдаления, Ложь); + + Строки = ПоставляемыеНастройки.НайтиСтроки(Отбор); + Для Каждого КлючИЗначение Из ОписаниеПрограммы Цикл + ИмяПоля = ?(КлючИЗначение.Ключ = "Представление", "Наименование", КлючИЗначение.Ключ); + Если КлючИЗначение.Значение <> Неопределено Тогда + ОбновитьЗначение(ПрограммаОбъект[ИмяПоля], КлючИЗначение.Значение, Истина); + ИначеЕсли Строки.Количество() > 0 Тогда + ОбновитьЗначение(ПрограммаОбъект[ИмяПоля], Строки[0][КлючИЗначение.Ключ], Истина); + КонецЕсли; + КонецЦикла; + + Если Не ПрограммаОбъект.Модифицированность() Тогда + Продолжить; + КонецЕсли; + + Если ВыполняетсяОбновлениеИнформационнойБазы Тогда + ОбновлениеИнформационнойБазы.ЗаписатьДанные(ПрограммаОбъект); + Иначе + ПрограммаОбъект.Записать(); + КонецЕсли; + КонецЦикла; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Для использования в процедуре ЗаполнитьСписокПрограмм (см. выше). +// +// Параметры: +// ИмяПрограммы - Строка - можно указать имя программы сразу при создании описания. +// ТипПрограммы - Строка - можно указать тип программы сразу при создании описания. +// +// Возвращаемое значение: +// Структура со свойствами для использования в процедуре ЗаполнитьСписокПрограмм. +// +Функция НовоеОписаниеПрограммы(ИмяПрограммы = Неопределено, ТипПрограммы = Неопределено) Экспорт + + ОписаниеПрограммы = Новый Структура; + ОписаниеПрограммы.Вставить("ИмяПрограммы", ИмяПрограммы); + ОписаниеПрограммы.Вставить("ТипПрограммы", ТипПрограммы); + ОписаниеПрограммы.Вставить("Представление"); + ОписаниеПрограммы.Вставить("АлгоритмПодписи"); + ОписаниеПрограммы.Вставить("АлгоритмХеширования"); + ОписаниеПрограммы.Вставить("АлгоритмШифрования"); + + Возврат ОписаниеПрограммы; + +КонецФункции + +// Выполняет поиск сертификата в справочнике, возвращает ссылку, если сертификат найден. +// +// Параметры: +// Сертификат - СертификатКриптографии - сертификат. +// - ДвоичныеДанные - двоичные данные сертификата. +// - Строка (28) - отпечаток сертификата в формате Base64. +// - Строка - адрес временного хранилища, содержащего двоичные данные сертификата. +// +// Возвращаемое значение: +// Неопределено - сертификат не найден в справочнике. +// СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования - ссылка на найденный сертификат. +// +Функция СсылкаНаСертификат(Знач Сертификат) Экспорт + + Если ТипЗнч(Сертификат) = Тип("Строка") И ЭтоАдресВременногоХранилища(Сертификат) Тогда + Сертификат = ПолучитьИзВременногоХранилища(Сертификат); + КонецЕсли; + + Если ТипЗнч(Сертификат) = Тип("ДвоичныеДанные") Тогда + Сертификат = Новый СертификатКриптографии(Сертификат); + КонецЕсли; + + Если ТипЗнч(Сертификат) = Тип("СертификатКриптографии") Тогда + ОтпечатокСтрокой = Base64Строка(Сертификат.Отпечаток); + Иначе + ОтпечатокСтрокой = Строка(Сертификат); + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Отпечаток", ОтпечатокСтрокой); + Запрос.Текст = + "ВЫБРАТЬ + | Сертификаты.Ссылка КАК Ссылка + |ИЗ + | Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования КАК Сертификаты + |ГДЕ + | Сертификаты.Отпечаток = &Отпечаток"; + + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Следующий() Тогда + Возврат Выборка.Ссылка; + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +// Позволяет создать и обновить элемент справочника СертификатыКлючейЭлектроннойПодписиИШифрования по +// указанному сертификату криптографии. +// +// Параметры: +// Сертификат - СертификатКриптографии - сертификат. +// - ДвоичныеДанные - двоичные данные сертификата. +// - Строка - адрес временного хранилища, содержащего двоичные данные сертификата. +// +// ДополнительныеПараметры - Неопределено - без дополнительных параметров. +// - Структура - со произвольным составом из следующих свойств: +// * Наименование - Строка - представление сертификата в списке. +// +// * Пользователь - СправочникСсылка.Пользователь - пользователь, которому принадлежит сертификат. +// Значение используется при получении списка личных сертификатов пользователя +// в формах подписания и шифрования данных. +// +// * Организация - СправочникСсылка.Организация - организация к которой относится сертификат. +// +// * Программа - СправочникСсылка.ПрограммыЭлектроннойПодписиИШифрования - программа, которая +// требуется для подписания и расшифровки. +// +// * УсиленнаяЗащитаЗакрытогоКлюча - Булево - сертификат был установлен на компьютере с усиленной +// защитой закрытого ключа, которая означает поддержку только пустого пароля на +// уровне 1С:Предприятия (пароль у пользователя не запрашивается - это делает +// операционная система, которая не принимает от 1С:Предприятия непустой пароль). +// +// Возвращаемое значение: +// СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования - ссылка на сертификат. +// +Функция ЗаписатьСертификатВСправочник(Знач Сертификат, ДополнительныеПараметры = Неопределено) Экспорт + + Если ТипЗнч(ДополнительныеПараметры) <> Тип("Структура") Тогда + ДополнительныеПараметры = Новый Структура; + КонецЕсли; + + Если ТипЗнч(Сертификат) = Тип("Строка") И ЭтоАдресВременногоХранилища(Сертификат) Тогда + ДвоичныеДанныеСертификата = ПолучитьИзВременногоХранилища(Сертификат); + + ИначеЕсли ТипЗнч(Сертификат) = Тип("ДвоичныеДанные") Тогда + ДвоичныеДанныеСертификата = Сертификат; + КонецЕсли; + + Если ДвоичныеДанныеСертификата = Неопределено Тогда + СертификатКриптографии = Сертификат; + ДвоичныеДанныеСертификата = СертификатКриптографии.Выгрузить(); + Иначе + СертификатКриптографии = Новый СертификатКриптографии(ДвоичныеДанныеСертификата); + КонецЕсли; + + СертификатСсылка = СсылкаНаСертификат(Сертификат); + + Если ЗначениеЗаполнено(СертификатСсылка) Тогда + СертификатОбъект = СертификатСсылка.ПолучитьОбъект(); + ОбновитьЗначение(СертификатОбъект.ПометкаУдаления, Ложь); + Иначе + СертификатОбъект = Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования.СоздатьЭлемент(); + СертификатОбъект.ДанныеСертификата = Новый ХранилищеЗначения(ДвоичныеДанныеСертификата); + СертификатОбъект.Отпечаток = Base64Строка(СертификатКриптографии.Отпечаток); + + СертификатОбъект.Добавил = ПользователиКлиентСервер.АвторизованныйПользователь(); + КонецЕсли; + + Если СертификатОбъект.ДанныеСертификата.Получить() <> ДвоичныеДанныеСертификата Тогда + СертификатОбъект.ДанныеСертификата = Новый ХранилищеЗначения(ДвоичныеДанныеСертификата); + КонецЕсли; + + ОбновитьЗначение(СертификатОбъект.Подписание, СертификатКриптографии.ИспользоватьДляПодписи); + ОбновитьЗначение(СертификатОбъект.Шифрование, СертификатКриптографии.ИспользоватьДляШифрования); + + СтруктураСертификата = ЭлектроннаяПодписьКлиентСервер.ЗаполнитьСтруктуруСертификата(СертификатКриптографии); + ОбновитьЗначение(СертификатОбъект.КомуВыдан, СтруктураСертификата.КомуВыдан); + ОбновитьЗначение(СертификатОбъект.КемВыдан, СтруктураСертификата.КемВыдан); + ОбновитьЗначение(СертификатОбъект.ДействителенДо, СтруктураСертификата.ДействителенДо); + + Если Не ДополнительныеПараметры.Свойство("Наименование") Тогда + ОбновитьЗначение(СертификатОбъект.Наименование, СтруктураСертификата.Представление); + КонецЕсли; + + СвойстваСубъекта = ЭлектроннаяПодписьКлиентСервер.СвойстваСубъектаСертификата(СертификатКриптографии); + ОбновитьЗначение(СертификатОбъект.Фамилия, СвойстваСубъекта.Фамилия, Истина); + ОбновитьЗначение(СертификатОбъект.Имя, СвойстваСубъекта.Имя, Истина); + ОбновитьЗначение(СертификатОбъект.Отчество, СвойстваСубъекта.Отчество, Истина); + ОбновитьЗначение(СертификатОбъект.Должность, СвойстваСубъекта.Должность, Истина); + ОбновитьЗначение(СертификатОбъект.Фирма, СвойстваСубъекта.Организация, Истина); + + Для Каждого КлючИЗначение Из ДополнительныеПараметры Цикл + ОбновитьЗначение(СертификатОбъект[КлючИЗначение.Ключ], КлючИЗначение.Значение); + КонецЦикла; + + Если СертификатОбъект.Модифицированность() Тогда + СертификатОбъект.Записать(); + КонецЕсли; + + Возврат СертификатОбъект.Ссылка; + +КонецФункции + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -478,6 +784,50 @@ КонецФункции +// Извлекает сертификаты из данных подписи. +// +// Параметры: +// Подпись - ДвоичныеДанные - Файл подписи. +// +// Возвращаемое значение: +// Неопределено - Если при разборе возникла ошибка. +// Структура - Данные подписи. +// * Отпечаток - Строка. +// * КомуВыданСертификат - Строка. +// * ДвоичныеДанныеСертификата - ДвоичныеДанные. +// * Подпись - ХранилищеЗначения. +// * Сертификат - ХранилищеЗначения. +// +Функция ПрочитатьДанныеПодписи(Подпись) Экспорт + + Результат = Неопределено; + + МенеджерКриптографии = МенеджерКриптографии("ПолучениеСертификатов"); + Если МенеджерКриптографии = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + Попытка + Сертификаты = МенеджерКриптографии.ПолучитьСертификатыИзПодписи(Подпись); + Исключение + Возврат Результат; + КонецПопытки; + + Если Сертификаты.Количество() > 0 Тогда + Сертификат = Сертификаты[0]; + + Результат = Новый Структура; + Результат.Вставить("Отпечаток", Base64Строка(Сертификат.Отпечаток)); + Результат.Вставить("КомуВыданСертификат", ЭлектроннаяПодписьКлиентСервер.ПредставлениеСубъекта(Сертификат)); + Результат.Вставить("ДвоичныеДанныеСертификата", Сертификат.Выгрузить()); + Результат.Вставить("Подпись", Новый ХранилищеЗначения(Подпись)); + Результат.Вставить("Сертификат", Новый ХранилищеЗначения(Сертификат.Выгрузить())); + КонецЕсли; + + Возврат Результат; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -525,50 +875,6 @@ КонецФункции -// Извлекает сертификаты из данных подписи. -// -// Параметры: -// Подпись - ДвоичныеДанные - Файл подписи. -// -// Возвращаемое значение: -// Неопределено - Если при разборе возникла ошибка. -// Структура - Данные подписи. -// * Отпечаток - Строка. -// * КомуВыданСертификат - Строка. -// * ДвоичныеДанныеСертификата - ДвоичныеДанные. -// * Подпись - ХранилищеЗначения. -// * Сертификат - ХранилищеЗначения. -// -Функция ПрочитатьДанныеПодписи(Подпись) Экспорт - - Результат = Неопределено; - - МенеджерКриптографии = МенеджерКриптографии("ПолучениеСертификатов"); - Если МенеджерКриптографии = Неопределено Тогда - Возврат Результат; - КонецЕсли; - - Попытка - Сертификаты = МенеджерКриптографии.ПолучитьСертификатыИзПодписи(Подпись); - Исключение - Возврат Результат; - КонецПопытки; - - Если Сертификаты.Количество() > 0 Тогда - Сертификат = Сертификаты[0]; - - Результат = Новый Структура; - Результат.Вставить("Отпечаток", Base64Строка(Сертификат.Отпечаток)); - Результат.Вставить("КомуВыданСертификат", ЭлектроннаяПодписьКлиентСервер.ПредставлениеСубъекта(Сертификат)); - Результат.Вставить("ДвоичныеДанныеСертификата", Сертификат.Выгрузить()); - Результат.Вставить("Подпись", Новый ХранилищеЗначения(Подпись)); - Результат.Вставить("Сертификат", Новый ХранилищеЗначения(Сертификат.Выгрузить())); - КонецЕсли; - - Возврат Результат; - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. @@ -615,4 +921,17 @@ КонецПроцедуры +// Для процедуры ЗаписатьСертификатВСправочник. +Процедура ОбновитьЗначение(СтароеЗначение, НовоеЗначение, ПропускатьНеопределенныеЗначения = Ложь) + + Если НовоеЗначение = Неопределено И ПропускатьНеопределенныеЗначения Тогда + Возврат; + КонецЕсли; + + Если СтароеЗначение <> НовоеЗначение Тогда + СтароеЗначение = НовоеЗначение; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl index d804aee7b..2e4ae4509 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиент/Module.bsl @@ -1,4 +1,4 @@ -//////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // Подсистема "Электронная подпись". // //////////////////////////////////////////////////////////////////////////////// @@ -134,6 +134,10 @@ // * -- // -- - ОписаниеОповещения - обработчик получения данных, который возвращает // их в свойстве Данные (см. выше общий подход). В момент вызова // в ОписаниеДанных уже вставлен параметр ВыбранныйСертификат (см. ниже). +// - Структура - со свойствами: +// * ПараметрыXMLDSig - Структура - как возвращает функция ПараметрыXMLDSig общего +// модуля ЭлектроннаяПодписьКлиентСервер. +// * КонвертSOAP - Строка - шаблон сообщения <soap:Envelope>. // * Объект - Ссылка - (необязательный) - ссылка на объект с табличной частью. // ЭлектронныеПодписи, в которую нужно добавить подпись. // Если не указан, то подпись не требуется добавлять. @@ -179,6 +183,7 @@ // При передаче параметра НаборДанных, свойство нужно проверять в нем. // - Структура - развернутое описание подписи: // * Подпись - ДвоичныеДанные - результат подписания. +// - Строка - подписанный конверт SOAP, если передавался в данных. // * УстановившийПодпись - СправочникСсылка.Пользователи - пользователь, который // подписал объект информационной базы. // * Комментарий - Строка - комментарий, если он был введен при подписании. @@ -186,6 +191,9 @@ // * ДатаПодписи - Дата - дата, когда подпись была сделана. Имеет смысл для случая, // когда дату невозможно извлечь из данных подписи. Если не // указана или пустая, тогда используется текущая дата сеанса. +// * ДатаПроверкиПодписи - Дата - дата проверки подписи после подписания. +// * ПодписьВерна - Булево - результат проверки подписи после подписания. +// // Производные свойства: // * Сертификат - ДвоичныеДанные - содержит выгрузку сертификата, // который использовался для подписания (содержится в подписи). @@ -245,15 +253,19 @@ // * ЗаголовокДанных - Строка - заголовок элемента данных, например Файл. // * ПоказатьКомментарий - Булево - (необязательный) - разрешает ввод комментария в форме // добавления подписей. Если не указан, значит Ложь. -// * Объект - Ссылка - (необязательный) - ссылка на объект с табличной частью. +// * Объект - Ссылка - (необязательный) - ссылка на объект с табличной частью. // ЭлектронныеПодписи, в которую нужно добавить подпись. -// * -- // -- - ОписаниеОповещения - (необязательный) - обработчик добавления подписи в +// * -- // -- - ОписаниеОповещения - (необязательный) - обработчик добавления подписи в // табличную часть ЭлектронныеПодписи. Следует учесть общий подход (см. выше). // В момент вызова в ОписаниеДанных уже вставлен параметр Подписи. -// * ВерсияОбъекта - Строка - (необязательный) - версия данных объекта для проверки и +// * ВерсияОбъекта - Строка - (необязательный) - версия данных объекта для проверки и // блокировки объекта перед добавлением подписи. -// * Представление - Ссылка, Строка - (необязательный), если не указан, тогда +// * Представление - Ссылка, Строка - (необязательный), если не указан, тогда // представление вычисляется по значению свойства Объект. +// * Данные - ДвоичныеДанные - (необязательный) - данные для проверки подписи. +// * -- // -- - Строка - (необязательный) - адрес временного хранилища, содержащего двоичные данные. +// * -- // -- - ОписаниеОповещения (необязательный) - обработчик получения данных, который +// возвращает их в свойстве Данные (см. выше общий подход). // // Форма - УправляемаяФорма - форма из которой нужно получить уникальный идентификатор, который будет // использоваться при блокировке объекта. @@ -274,6 +286,13 @@ // * ДатаПодписи - Дата - дата, когда подпись была сделана. Имеет смысл для случая, // когда дату невозможно извлечь из данных подписи. Если не // указана или пустая, тогда используется текущая дата сеанса. +// * ДатаПроверкиПодписи - Дата - дата проверки подписи после добавления из файла, если +// не указано свойство Данные в параметре ОписаниеДанных, +// возвращает пустую дату. +// * ПодписьВерна - Булево - результат проверки подписи после добавления из файла, если +// не указано свойство Данные в параметре ОписаниеДанных, +// возвращает Ложь. +// // Производные свойства: // * Сертификат - ДвоичныеДанные - содержит выгрузку сертификата, // который использовался для подписания (содержится в подписи). @@ -398,9 +417,14 @@ // Это повышает производительность, а также безопасность когда проверяется // подпись в расшифрованном файле (он не будет передан на сервер). // - Строка - адрес временного хранилища, содержащего исходные двоичные данные. +// - Структура - со свойствами: +// * ПараметрыXMLDSig - Структура - как возвращает функция ПараметрыXMLDSig общего +// модуля ЭлектроннаяПодписьКлиентСервер. +// * КонвертSOAP - Строка - шаблон сообщения <soap:Envelope>. // // Подпись - ДвоичныеДанные - двоичные данные электронной подписи. // - Строка - адрес временного хранилища, содержащего двоичные данные. +// - Неопределено - если ИсходныеДанные конверт SOAP. // // МенеджерКриптографии - Неопределено - получить менеджер криптографии по-умолчанию // (менеджер первой программы в списке, как настроил администратор). @@ -1008,7 +1032,8 @@ СвойстваПодписи = Новый Структура( "ДатаПодписи, Комментарий, КомуВыданСертификат, Отпечаток, - |АдресПодписи, УстановившийПодпись, АдресСертификата"); + |АдресПодписи, УстановившийПодпись, АдресСертификата, + |Статус, ПодписьВерна, ДатаПроверкиПодписи"); ЗаполнитьЗначенияСвойств(СвойстваПодписи, ТекущиеДанные); diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСервер/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСервер/Module.bsl index 4be6fb602..66dd256fd 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьКлиентСервер/Module.bsl @@ -134,6 +134,35 @@ КонецФункции +// Формирует структуру свойств для уточнения данных конверта SOAP и +// алгоритмов подписания и хеширования. +// +// Возвращаемое значение: +// Структура - со свойствами: +// * XPathSignedInfo - Строка - например, "(//. | //@* | //namespace::*)[ancestor-or-self::*[local-name()='SignedInfo']]". +// * XPathПодписываемыйТег - Строка - например, "(//. | //@* | //namespace::*)[ancestor-or-self::soap:Body]". +// * ИмяАлгоритмаПодписи - Строка - например, "GOST R 34.10-2001". +// * OIDАлгоритмаПодписи - Строка - например, "1.2.643.2.2.3" - ГОСТ R 34.11/34.10-2001. +// * ИмяАлгоритмаХеширования - Строка - например, "GOST R 34.11-94". +// * OIDАлгоритмаХеширования - Строка - например, "1.2.643.2.2.9" - ГОСТ R 34.11-94. +// +Функция ПараметрыXMLDSig() Экспорт + + ДанныеАлгоритмаПодписания = Новый Структура; + + ДанныеАлгоритмаПодписания.Вставить("XPathSignedInfo", ""); + ДанныеАлгоритмаПодписания.Вставить("XPathПодписываемыйТег", ""); + + ДанныеАлгоритмаПодписания.Вставить("ИмяАлгоритмаПодписи", ""); + ДанныеАлгоритмаПодписания.Вставить("OIDАлгоритмаПодписи", ""); + + ДанныеАлгоритмаПодписания.Вставить("ИмяАлгоритмаХеширования", ""); + ДанныеАлгоритмаПодписания.Вставить("OIDАлгоритмаХеширования", ""); + + Возврат ДанныеАлгоритмаПодписания; + +КонецФункции + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -155,10 +184,6 @@ #КонецЕсли КонецФункции -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - // Возвращает структуру, содержащую различные персональные настройки. // // Возвращаемое значение: @@ -184,6 +209,10 @@ #КонецЕсли КонецФункции +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + // Возвращает свойства субъекта сертификата криптографии с учетом их состава (ЮЛ,ИП,ФЛ). // // Параметры: @@ -512,7 +541,7 @@ Строка = Таблица.Добавить(); Строка.Свойство = НСтр("ru = 'Действителен до:'"); - Строка.Значение = Формат(СтруктураСертификата.ДействителенДо, "ДФ=dd.MM.yyyy"); + Строка.Значение = Формат(СтруктураСертификата.ДействителенДо, "ДЛФ=D"); Строка = Таблица.Добавить(); Строка.Свойство = НСтр("ru = 'Назначение:'"); diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl index 736298cac..4499a6ad4 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебный/Module.bsl @@ -88,6 +88,8 @@ Параметры.Вставить("ЭлектроннаяПодпись", НастройкиПодсистемы); КонецЕсли; + Параметры.Вставить("ТипыПрограммЭлектроннойПодписи", ЭлектроннаяПодписьСлужебныйПовтИсп.ТипыПрограммЭлектроннойПодписи()); + КонецПроцедуры // Определить список справочников, доступных для загрузки с помощью подсистемы "Загрузка данных из файла". @@ -132,6 +134,26 @@ Объекты.Вставить(Метаданные.Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования.ПолноеИмя(), "РеквизитыНеРедактируемыеВГрупповойОбработке"); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Прочие процедуры и функции. + +// Только для внутреннего использования. +Процедура ОформитьСписокПодписей(Форма, ИмяСпискаПодписей) Экспорт + + Элемент = Форма.УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ИмяСпискаПодписей); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяСпискаПодписей + ".ПодписьВерна"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Ложь; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОсобогоТекста); + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -693,52 +715,18 @@ // Только для внутреннего использования. Процедура ЗаписатьСертификатВСправочник(Форма, Программа = Неопределено, ДляШифрования = Ложь) Экспорт - ДвоичныеДанныеСертификата = ПолучитьИзВременногоХранилища(Форма.СертификатАдрес); - СертификатКриптографии = Новый СертификатКриптографии(ДвоичныеДанныеСертификата); - - Если ЗначениеЗаполнено(Форма.Сертификат) Тогда - СертификатОбъект = Форма.Сертификат.ПолучитьОбъект(); - ОбновитьЗначение(СертификатОбъект.ПометкаУдаления, Ложь); - Иначе - СертификатОбъект = Справочники.СертификатыКлючейЭлектроннойПодписиИШифрования.СоздатьЭлемент(); - СертификатОбъект.ДанныеСертификата = Новый ХранилищеЗначения(ДвоичныеДанныеСертификата); - СертификатОбъект.Отпечаток = Форма.СертификатОтпечаток; - - СертификатОбъект.Добавил = ПользователиКлиентСервер.ТекущийПользователь(); - КонецЕсли; + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Наименование", Форма.СертификатНаименование); + ДополнительныеПараметры.Вставить("Пользователь", Форма.СертификатПользователь); + ДополнительныеПараметры.Вставить("Организация", Форма.СертификатОрганизация); Если Не ДляШифрования Тогда - ОбновитьЗначение(СертификатОбъект.Программа, Программа); + ДополнительныеПараметры.Вставить("Программа", Программа); + ДополнительныеПараметры.Вставить("УсиленнаяЗащитаЗакрытогоКлюча", + Форма.СертификатУсиленнаяЗащитаЗакрытогоКлюча); КонецЕсли; - Если СертификатОбъект.ДанныеСертификата.Получить() <> ДвоичныеДанныеСертификата Тогда - СертификатОбъект.ДанныеСертификата = Новый ХранилищеЗначения(ДвоичныеДанныеСертификата); - КонецЕсли; - - ОбновитьЗначение(СертификатОбъект.Подписание, СертификатКриптографии.ИспользоватьДляПодписи); - ОбновитьЗначение(СертификатОбъект.Шифрование, СертификатКриптографии.ИспользоватьДляШифрования); - - ОбновитьЗначение(СертификатОбъект.Наименование, Форма.СертификатНаименование); - ОбновитьЗначение(СертификатОбъект.Организация, Форма.СертификатОрганизация); - ОбновитьЗначение(СертификатОбъект.Пользователь, Форма.СертификатПользователь); - - Если Не ДляШифрования Тогда - ОбновитьЗначение(СертификатОбъект.УсиленнаяЗащитаЗакрытогоКлюча, Форма.СертификатУсиленнаяЗащитаЗакрытогоКлюча); - КонецЕсли; - - СтруктураСертификата = ЭлектроннаяПодписьКлиентСервер.ЗаполнитьСтруктуруСертификата(СертификатКриптографии); - ОбновитьЗначение(СертификатОбъект.КомуВыдан, СтруктураСертификата.КомуВыдан); - ОбновитьЗначение(СертификатОбъект.КемВыдан, СтруктураСертификата.КемВыдан); - ОбновитьЗначение(СертификатОбъект.ДействителенДо, СтруктураСертификата.ДействителенДо); - - СвойстваСубъекта = ЭлектроннаяПодписьКлиентСервер.СвойстваСубъектаСертификата(СертификатКриптографии); - ОбновитьЗначение(СертификатОбъект.Фамилия, СвойстваСубъекта.Фамилия, Истина); - ОбновитьЗначение(СертификатОбъект.Имя, СвойстваСубъекта.Имя, Истина); - ОбновитьЗначение(СертификатОбъект.Отчество, СвойстваСубъекта.Отчество, Истина); - ОбновитьЗначение(СертификатОбъект.Должность, СвойстваСубъекта.Должность, Истина); - ОбновитьЗначение(СертификатОбъект.Фирма, СвойстваСубъекта.Организация, Истина); - - Если СертификатОбъект.ЭтоНовый() Тогда + Если Не ЗначениеЗаполнено(Форма.Сертификат) Тогда ПропускаемыеРеквизиты = Новый Соответствие; ПропускаемыеРеквизиты.Вставить("Ссылка", Истина); ПропускаемыеРеквизиты.Вставить("Наименование", Истина); @@ -753,14 +741,15 @@ Если ПропускаемыеРеквизиты.Получить(ИмяРеквизита) <> Неопределено Тогда Продолжить; КонецЕсли; - ОбновитьЗначение(СертификатОбъект[ИмяРеквизита], Свойства.ЗначениеЗаполнения, Истина); + Если Свойства.ЗначениеЗаполнения = Неопределено Тогда + Продолжить; + КонецЕсли; + ДополнительныеПараметры.Вставить(ИмяРеквизита, Свойства.ЗначениеЗаполнения); КонецЦикла; КонецЕсли; - Если СертификатОбъект.Модифицированность() Тогда - СертификатОбъект.Записать(); - Форма.Сертификат = СертификатОбъект.Ссылка; - КонецЕсли; + Форма.Сертификат = ЭлектроннаяПодпись.ЗаписатьСертификатВСправочник(Форма.СертификатАдрес, + ДополнительныеПараметры); КонецПроцедуры @@ -828,6 +817,16 @@ Текст = Новый ТекстовыйДокумент; Текст.Прочитать(ПолноеИмяВременногоФайла); + Попытка + УдалитьФайлы(ПолноеИмяВременногоФайла); + Исключение + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Электронная подпись.Удаление временного файла'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, , , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + Если Текст.КоличествоСтрок() < 3 Или Текст.ПолучитьСтроку(1) <> "-----BEGIN CERTIFICATE-----" Или Текст.ПолучитьСтроку(Текст.КоличествоСтрок()) <> "-----END CERTIFICATE-----" Тогда @@ -903,9 +902,285 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Работа с XMLDSig + +// Подписывает сообщение, подставляя в шаблон SOAP данные подписи. +// +// Параметры: +// КонвертSOAP - Строка - шаблон формируемого сообщения в формате SOAP +// ДанныеАлгоритмаПодписания - Структура: +// XPathПодписываемыйТег - Строка - запрос для получения тега подписи. +// XPathSignedInfo - Строка - запрос для получения тега подписываемой информации. +// OIDАлгоритмаХеширования - Строка - идентификатор алгоритма хеширования. +// ИмяАлгоритмаПодписи - Строка - имя алгоритма подписи. +// СертификатКриптографии - СертификатКриптографии - используемый сертификат криптографии. +// МенеджерКриптографии - МенеджерКриптографии - используемый менеджер криптографии. +// +// Возвращаемое значение: +// Строка - шаблон SOAP, со вставленными данными подписи. +// +Функция Подписать(Знач КонвертSOAP, ДанныеАлгоритмаПодписания, СертификатКриптографии, МенеджерКриптографии) Экспорт + + XPathПодписываемыйТег = ДанныеАлгоритмаПодписания.XPathПодписываемыйТег; + XPathSignedInfo = ДанныеАлгоритмаПодписания.XPathSignedInfo; + OIDАлгоритмаХеширования = ДанныеАлгоритмаПодписания.OIDАлгоритмаХеширования; + ИмяАлгоритмаПодписи = ДанныеАлгоритмаПодписания.ИмяАлгоритмаПодписи; + + Пароль = МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу; + + ОбъектКомпоненты = ОбъектВнешнейКомпонентыXMLDSig(); + + ТипКриптопровайдера = ТипКриптопровайдера(МенеджерКриптографии); + + КонвертSOAP = СтрЗаменить( + КонвертSOAP, + "%BinarySecurityToken%", + ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатКриптографииBase64(СертификатКриптографии.Выгрузить())); + + ПроверитьАлгоритмПодписи(ОбъектКомпоненты, + ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатКриптографииBase64(СертификатКриптографии.Выгрузить()), + ДанныеАлгоритмаПодписания); + + DigestValue = Hash( + ОбъектКомпоненты, + C14N(ОбъектКомпоненты, КонвертSOAP, XPathПодписываемыйТег), + OIDАлгоритмаХеширования, + ТипКриптопровайдера); + + КонвертSOAP = СтрЗаменить(КонвертSOAP, "%DigestValue%", DigestValue); + + SignatureValue = Sign( + ОбъектКомпоненты, + C14N(ОбъектКомпоненты, КонвертSOAP, XPathSignedInfo), + СертификатКриптографии, + Пароль); + + КонвертSOAP = СтрЗаменить(КонвертSOAP, "%SignatureValue%", SignatureValue); + + Возврат КонвертSOAP; + +КонецФункции + +// В параметре возвращается сертификат, с помощью которого была произведена подпись (если сертификат включен в данные подписи). +// Если проверка подписи завершилась неудачно, генерируется исключительная ситуация. +Функция ПроверитьПодпись(Знач КонвертSOAP, ДанныеАлгоритмаПодписания, МенеджерКриптографии) Экспорт + + XPathПодписываемыйТег = ДанныеАлгоритмаПодписания.XPathПодписываемыйТег; + XPathSignedInfo = ДанныеАлгоритмаПодписания.XPathSignedInfo; + OIDАлгоритмаХеширования = ДанныеАлгоритмаПодписания.OIDАлгоритмаХеширования; + ИмяАлгоритмаПодписи = ДанныеАлгоритмаПодписания.ИмяАлгоритмаПодписи; + + ОбъектКомпоненты = ОбъектВнешнейКомпонентыXMLDSig(); + + ТипКриптопровайдера = ТипКриптопровайдера(МенеджерКриптографии); + + СертификатКриптографииBase64 = ЭлектроннаяПодписьСлужебныйКлиентСервер.НайтиВXML(КонвертSOAP, "wsse:BinarySecurityToken"); + + ПроверитьАлгоритмПодписи(ОбъектКомпоненты, СертификатКриптографииBase64, ДанныеАлгоритмаПодписания); + + ПодписьВерна = VerifySign( + ОбъектКомпоненты, + C14N(ОбъектКомпоненты, КонвертSOAP, XPathSignedInfo), + ЭлектроннаяПодписьСлужебныйКлиентСервер.НайтиВXML(КонвертSOAP, "SignatureValue"), + СертификатКриптографииBase64, + ТипКриптопровайдера); + + DigestValue = Hash( + ОбъектКомпоненты, + C14N(ОбъектКомпоненты, КонвертSOAP, XPathПодписываемыйТег), + OIDАлгоритмаХеширования, + ТипКриптопровайдера); + + ХешСовпадает = Ложь; + Если DigestValue = ЭлектроннаяПодписьСлужебныйКлиентСервер.НайтиВXML(КонвертSOAP, "DigestValue") Тогда + ХешСовпадает = Истина; + КонецЕсли; + + Если ХешСовпадает И ПодписьВерна Тогда + + ДвоичныеДанные = Base64Значение(СертификатКриптографииBase64); + + ДатаПодписания = ЭлектроннаяПодпись.ДатаПодписания(ДвоичныеДанные); + Если Не ЗначениеЗаполнено(ДатаПодписания) Тогда + ДатаПодписания = Неопределено; + КонецЕсли; + + ВозвращаемоеЗначение = Новый Структура; + ВозвращаемоеЗначение.Вставить("Сертификат", Новый СертификатКриптографии(ДвоичныеДанные)); + ВозвращаемоеЗначение.Вставить("ДатаПодписания", ДатаПодписания); + + Возврат ВозвращаемоеЗначение; + + Иначе + + Если ПодписьВерна Тогда + ВызватьИсключение НСтр("ru = 'Подпись не верна (SignatureValue корректно, отличается DigestValue).'") + Иначе + ВызватьИсключение НСтр("ru = 'Подпись не верна (SignatureValue не корректно.'"); + КонецЕсли; + + КонецЕсли; + +КонецФункции + + +Функция ПодключитьВнешнююКомпонентуXMLDSig() + + ВнешняяКомпонента = Неопределено; + + ИмяКомпоненты = "Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования.Макет.КомпонентаXMLDSig"; + ПодключениеВыполнено = ПодключитьВнешнююКомпоненту(ИмяКомпоненты, "ОбъектXMLDSig", ТипВнешнейКомпоненты.Native); + + // Создадим объект внешней компоненты. + Если ПодключениеВыполнено Тогда + + Попытка + ВнешняяКомпонента = Новый("Addin.ОбъектXMLDSig.XMLDSignAddIn"); + Исключение + ВнешняяКомпонента = Неопределено; + КонецПопытки; + + КонецЕсли; + + Возврат ВнешняяКомпонента; + +КонецФункции + +Функция ОбъектВнешнейКомпонентыXMLDSig() + + ОбъектКомпоненты = ПодключитьВнешнююКомпонентуXMLDSig(); + + Если ОбъектКомпоненты = Неопределено Тогда + ВызватьИсключение НСтр("ru='Не удалось подключить внешнюю компоненту XMLDSig.'"); + КонецЕсли; + + Возврат ОбъектКомпоненты; + +КонецФункции + +Функция ТипКриптопровайдера(МенеджерКриптографии) + + ИнформацияМодуляКриптографии = МенеджерКриптографии.ПолучитьИнформациюМодуляКриптографии(); + + ИмяКриптопровайдера = ИнформацияМодуляКриптографии.Имя; + ТипКриптопровайдера = ЭлектроннаяПодписьСлужебныйПовтИсп.ТипыПрограммЭлектроннойПодписи()[ИмяКриптопровайдера]; + + Если ТипКриптопровайдера = Неопределено Тогда + ВызватьИсключение СтрШаблон(НСтр("ru = 'Не удалось определить тип криптопровайдера %1'"), ИмяКриптопровайдера); + КонецЕсли; + + Возврат ТипКриптопровайдера; + +КонецФункции + +Функция GetSignOIDFromCert(ОбъектКомпоненты, СертификатКриптографииBase64) + + Попытка + OIDАлгоритмаПодписи = ОбъектКомпоненты.GetSignOIDFromCert(СертификатКриптографииBase64); + Исключение + ВызватьИсключение НСтр("ru = 'Ошибка вызова метода GetSignOIDFromCert компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + Если OIDАлгоритмаПодписи = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Ошибка вызова метода GetSignOIDFromCert компоненты XMLDSig.'") + Символы.ПС + ОбъектКомпоненты.GetLastError(); + КонецЕсли; + + Возврат OIDАлгоритмаПодписи; + +КонецФункции + +Функция C14N(ОбъектКомпоненты, КонвертSOAP, XPath) + + Попытка + КаноникализированныйТекстXML = ОбъектКомпоненты.C14N( + КонвертSOAP, + XPath); + Исключение + ВызватьИсключение НСтр("ru = 'Ошибка вызова метода C14N компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + Если КаноникализированныйТекстXML = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Ошибка вызова метода C14N компоненты XMLDSig.'") + Символы.ПС + ОбъектКомпоненты.GetLastError(); + КонецЕсли; + + Возврат КаноникализированныйТекстXML; + +КонецФункции + +Функция Hash(ОбъектКомпоненты, КаноникализированныйТекстXML, OIDАлгоритмаХеширования, ТипКриптопровайдера) + + Попытка + DigestValue = ОбъектКомпоненты.Hash( + КаноникализированныйТекстXML, + OIDАлгоритмаХеширования, + ТипКриптопровайдера); + Исключение + ВызватьИсключение НСтр("ru = 'Ошибка вызова метода Hash компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + Если DigestValue = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Ошибка вызова метода Hash компоненты XMLDSig.'") + Символы.ПС + ОбъектКомпоненты.GetLastError(); + КонецЕсли; + + Возврат DigestValue; + +КонецФункции + +Функция Sign(ОбъектКомпоненты, КаноникализированныйТекстXMLSignedInfo, СертификатКриптографии, ПарольДоступаКЗакрытомуКлючу) + + Попытка + SignatureValue = ОбъектКомпоненты.Sign( + КаноникализированныйТекстXMLSignedInfo, + ЭлектроннаяПодписьСлужебныйКлиентСервер.СертификатКриптографииBase64(СертификатКриптографии.Выгрузить()), + ПарольДоступаКЗакрытомуКлючу); + Исключение + ВызватьИсключение НСтр("ru = 'Ошибка вызова метода Sign компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + Если SignatureValue = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Ошибка вызова метода Sign компоненты XMLDSig.'") + Символы.ПС + ОбъектКомпоненты.GetLastError(); + КонецЕсли; + + Возврат SignatureValue; + +КонецФункции + +Функция VerifySign(ОбъектКомпоненты, КаноникализированныйТекстXMLSignedInfo, SignatureValue, СертификатКриптографииBase64, ТипКриптопровайдера) + + Попытка + ПодписьВерна = ОбъектКомпоненты.VerifySign( + КаноникализированныйТекстXMLSignedInfo, + SignatureValue, + СертификатКриптографииBase64, + ТипКриптопровайдера); + Исключение + ВызватьИсключение НСтр("ru = 'Ошибка вызова метода VerifySign компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + Если ПодписьВерна = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Ошибка вызова метода VerifySign компоненты XMLDSig.'") + Символы.ПС + ОбъектКомпоненты.GetLastError(); + КонецЕсли; + + Возврат ПодписьВерна; + +КонецФункции + +Процедура ПроверитьАлгоритмПодписи(ОбъектКомпоненты, СертификатКриптографииBase64, ДанныеАлгоритмаПодписания) + + OIDАлгоритмаПодписи = GetSignOIDFromCert(ОбъектКомпоненты, СертификатКриптографииBase64); + Если OIDАлгоритмаПодписи <> ДанныеАлгоритмаПодписания.OIDАлгоритмаПодписи Тогда + ВызватьИсключение СтрШаблон( + НСтр("ru = 'Алгоритм подписи сертификата криптографии отличается от алгоритма %1.'"), + ДанныеАлгоритмаПодписания.ИмяАлгоритмаПодписи); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. + // Для процедуры обновления ПеренестиНастройкиМенеджераКриптографии. Процедура ОчиститьКонстанту(Константа) @@ -1076,7 +1351,7 @@ КонецПроцедуры -// Для процедуры ОбновитьСписокСертификатов, ЗаписатьСертификатВСправочник. +// Для процедуры ОбновитьСписокСертификатов. Процедура ОбновитьЗначение(СтароеЗначение, НовоеЗначение, ПропускатьНеопределенныеЗначения = Ложь) Если НовоеЗначение = Неопределено И ПропускатьНеопределенныеЗначения Тогда diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl index bd95cf326..3ec3ecfb8 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйВызовСервера/Module.bsl @@ -92,30 +92,56 @@ Возврат Ложь; КонецПопытки; - ОписаниеОшибки = ""; - Если Параметры.Операция = "Подписание" Тогда - МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = Параметры.ЗначениеПароля; + ЭтоXMLDSig = (ТипЗнч(Данные) = Тип("Структура") + И Данные.Свойство("ПараметрыXMLDSig")); + + Если ЭтоXMLDSig Тогда + + Если Параметры.Операция <> "Подписание" Тогда + ОшибкаНаСервере.Вставить("ОписаниеОшибки", + ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаголовокОшибкиПолученияДанных(Параметры.Операция) + + Символы.ПС + НСтр("ru = 'Внешняя компонента XMLDSig может использоваться только для подписания.'")); + Возврат Ложь; + КонецЕсли; + Попытка - ДвоичныеДанныеРезультата = МенеджерКриптографии.Подписать(Данные, СертификатКриптографии); - ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(ДвоичныеДанныеРезультата, ОписаниеОшибки); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - КонецПопытки; - ИначеЕсли Параметры.Операция = "Шифрование" Тогда - Сертификаты = СертификатыКриптографии(Параметры.АдресСертификатов); - Попытка - ДвоичныеДанныеРезультата = МенеджерКриптографии.Зашифровать(Данные, Сертификаты); - ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеЗашифрованныеДанные(ДвоичныеДанныеРезультата, ОписаниеОшибки); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - КонецПопытки; - Иначе // Расшифровка. - МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = Параметры.ЗначениеПароля; - Попытка - ДвоичныеДанныеРезультата = МенеджерКриптографии.Расшифровать(Данные); + ДвоичныеДанныеРезультата = ЭлектроннаяПодписьСлужебный.Подписать( + Данные.КонвертSOAP, + Данные.ПараметрыXMLDSig, + СертификатКриптографии, + МенеджерКриптографии); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); КонецПопытки; + + Иначе + + ОписаниеОшибки = ""; + Если Параметры.Операция = "Подписание" Тогда + МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = Параметры.ЗначениеПароля; + Попытка + ДвоичныеДанныеРезультата = МенеджерКриптографии.Подписать(Данные, СертификатКриптографии); + ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеДанныеПодписи(ДвоичныеДанныеРезультата, ОписаниеОшибки); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + КонецПопытки; + ИначеЕсли Параметры.Операция = "Шифрование" Тогда + Сертификаты = СертификатыКриптографии(Параметры.АдресСертификатов); + Попытка + ДвоичныеДанныеРезультата = МенеджерКриптографии.Зашифровать(Данные, Сертификаты); + ЭлектроннаяПодписьСлужебныйКлиентСервер.ПустыеЗашифрованныеДанные(ДвоичныеДанныеРезультата, ОписаниеОшибки); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + КонецПопытки; + Иначе // Расшифровка. + МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = Параметры.ЗначениеПароля; + Попытка + ДвоичныеДанныеРезультата = МенеджерКриптографии.Расшифровать(Данные); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + КонецПопытки; + КонецЕсли; + КонецЕсли; Если ИнформацияОбОшибке <> Неопределено Тогда @@ -138,6 +164,12 @@ СвойстваПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваПодписи(ДвоичныеДанныеРезультата, СвойстваСертификата, Параметры.Комментарий); + Если Параметры.СертификатВерен <> Неопределено Тогда + СвойстваПодписи.ДатаПодписи = ТекущаяДатаСеанса(); + СвойстваПодписи.ДатаПроверкиПодписи = СвойстваПодписи.ДатаПодписи; + СвойстваПодписи.ПодписьВерна = Параметры.СертификатВерен; + КонецЕсли; + АдресРезультата = ПоместитьВоВременноеХранилище(СвойстваПодписи, Параметры.ИдентификаторФормы); Если Параметры.ЭлементДанныхДляСервера.Свойство("Объект") Тогда diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl index a9ffc8c72..5c2c6ce49 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиент/Module.bsl @@ -599,7 +599,9 @@ // Если параметр не заполнен, тогда проверять на текущую дату, // если дату не удалось извлечь из подписи автоматически. // -Процедура ПроверитьПодпись(Оповещение, ИсходныеДанные, Подпись, МенеджерКриптографии = Неопределено, НаДату = Неопределено) Экспорт +// ПоказатьОшибку - Булево - показать ошибку создания менеджера криптографии (когда не указан). +// +Процедура ПроверитьПодпись(Оповещение, ИсходныеДанные, Подпись, МенеджерКриптографии = Неопределено, НаДату = Неопределено, ПоказатьОшибку = Истина) Экспорт Контекст = Новый Структура; Контекст.Вставить("Оповещение", Оповещение); @@ -612,7 +614,7 @@ Если МенеджерКриптографии = Неопределено Тогда СоздатьМенеджерКриптографии(Новый ОписаниеОповещения( "ПроверитьПодписьПослеСозданияМенеджераКриптографии", ЭтотОбъект, Контекст), - "ПроверкаПодписи", Не Контекст.ПроверятьНаСервере); + "ПроверкаПодписи", ПоказатьОшибку И Не Контекст.ПроверятьНаСервере); Иначе ПроверитьПодписьПослеСозданияМенеджераКриптографии(МенеджерКриптографии, Контекст); КонецЕсли; @@ -702,10 +704,58 @@ Контекст.Вставить("ДанныеПодписи", Подпись); - Контекст.МенеджерКриптографии.НачатьПроверкуПодписи(Новый ОписаниеОповещения( - "ПроверитьПодписьНаКлиентеПослеПроверкиПодписи", ЭтотОбъект, Контекст, - "ПроверитьПодписьНаКлиентеПослеОшибкиПроверкиПодписи", ЭтотОбъект), - Контекст.ИсходныеДанные, Контекст.ДанныеПодписи); + ЭтоXMLDSig = (ТипЗнч(Контекст) = Тип("Структура") + И ТипЗнч(Контекст.ИсходныеДанные) = Тип("Структура") + И Контекст.ИсходныеДанные.Свойство("ПараметрыXMLDSig")); + + Если ЭтоXMLDSig Тогда + + ОповещениеУспех = Новый ОписаниеОповещения( + "ПроверитьПодписьНаКлиентеПослеПроверкиПодписиXMLDSig", ЭтотОбъект, Контекст); + + ОповещениеОшибка = Новый ОписаниеОповещения( + "ПроверитьПодписьНаКлиентеПослеОшибкиПроверкиПодписиXMLDSig", ЭтотОбъект, Контекст); + + Оповещения = Новый Структура; + Оповещения.Вставить("Успех", ОповещениеУспех); + Оповещения.Вставить("Ошибка", ОповещениеОшибка); + + НачатьПроверкуПодписи( + Оповещения, + Контекст.ИсходныеДанные.КонвертSOAP, + Контекст.ИсходныеДанные.ПараметрыXMLDSig, + Контекст.МенеджерКриптографии); + + Иначе + + Контекст.МенеджерКриптографии.НачатьПроверкуПодписи(Новый ОписаниеОповещения( + "ПроверитьПодписьНаКлиентеПослеПроверкиПодписи", ЭтотОбъект, Контекст, + "ПроверитьПодписьНаКлиентеПослеОшибкиПроверкиПодписи", ЭтотОбъект), + Контекст.ИсходныеДанные, Контекст.ДанныеПодписи); + + КонецЕсли; + +КонецПроцедуры + +// Продолжение процедуры ПроверитьПодпись. +Процедура ПроверитьПодписьНаКлиентеПослеОшибкиПроверкиПодписиXMLDSig(ТекстОшибки, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + ВыполнитьОбработкуОповещения(Контекст.Оповещение, ТекстОшибки); + +КонецПроцедуры + +// Продолжение процедуры ПроверитьПодпись. +Процедура ПроверитьПодписьНаКлиентеПослеПроверкиПодписиXMLDSig(Данные, Контекст) Экспорт + + Если Контекст.Свойство("ПроверитьСертификатНаКлиенте") Тогда + МенеджерКриптографии = Контекст.МенеджерКриптографии; + Иначе + // Проверка сертификата на сервере и на клиенте. + МенеджерКриптографии = Неопределено; + КонецЕсли; + + ПроверитьСертификат(Контекст.Оповещение, Данные.Сертификат, МенеджерКриптографии, Данные.ДатаПодписания); КонецПроцедуры @@ -762,13 +812,16 @@ // НаДату - Дата - проверить сертификат на указанную дату. // Если параметр не указан или указана пустая дата, тогда проверять на текущую. // -Процедура ПроверитьСертификат(Оповещение, Сертификат, МенеджерКриптографии = Неопределено, НаДату = Неопределено) Экспорт +// ПоказатьОшибку - Булево - показать ошибку создания менеджера криптографии (когда не указан). +// +Процедура ПроверитьСертификат(Оповещение, Сертификат, МенеджерКриптографии = Неопределено, НаДату = Неопределено, ПоказатьОшибку = Истина) Экспорт Контекст = Новый Структура; - Контекст.Вставить("Оповещение", Оповещение); - Контекст.Вставить("Сертификат", Сертификат); - Контекст.Вставить("МенеджерКриптографии", МенеджерКриптографии); - Контекст.Вставить("НаДату", НаДату); + Контекст.Вставить("Оповещение", Оповещение); + Контекст.Вставить("Сертификат", Сертификат); + Контекст.Вставить("МенеджерКриптографии", МенеджерКриптографии); + Контекст.Вставить("НаДату", НаДату); + Контекст.Вставить("ПоказатьОшибку", ПоказатьОшибку); Контекст.Вставить("ОписаниеОшибкиНаСервере", Неопределено); Если Контекст.МенеджерКриптографии = Неопределено @@ -815,7 +868,7 @@ Если Контекст.МенеджерКриптографии = Неопределено Тогда СоздатьМенеджерКриптографии(Новый ОписаниеОповещения( "ПроверитьСертификатПослеСозданияМенеджераКриптографии", ЭтотОбъект, Контекст), - "ПроверкаСертификата", Контекст.ОписаниеОшибкиНаСервере = Неопределено); + "ПроверкаСертификата", Контекст.ПоказатьОшибку И Контекст.ОписаниеОшибкиНаСервере = Неопределено); Иначе ПроверитьСертификатПослеСозданияМенеджераКриптографии(Контекст.МенеджерКриптографии, Контекст); КонецЕсли; @@ -2541,7 +2594,7 @@ Если НоваяФорма = Неопределено Тогда Возврат; КонецЕсли; - НоваяФорма.УстановитьСписокПредставлений(ТекущийСписокПредставлений,); + НоваяФорма.УстановитьСписокПредставлений(ТекущийСписокПредставлений, Неопределено); Иначе Значение = ТекущийСписокПредставлений[0].Значение; Если ТипЗнч(Значение) = Тип("ОписаниеОповещения") Тогда @@ -2590,7 +2643,7 @@ // Только для внутреннего использования. Процедура ВыполнитьНаСтороне(Оповещение, Операция, СторонаВыполнения, ПараметрыВыполнения) Экспорт - Контекст = Новый Структура("ОписаниеДанных, Форма, ИдентификаторФормы, ЗначениеПароля"); + Контекст = Новый Структура("ОписаниеДанных, Форма, ИдентификаторФормы, ЗначениеПароля, СертификатВерен"); ЗаполнитьЗначенияСвойств(Контекст, ПараметрыВыполнения); Контекст.Вставить("Оповещение", Оповещение); @@ -2748,10 +2801,47 @@ КонецПроцедуры + +// Продолжение процедуры ВыполнитьНаСтороне. +Процедура ВыполнитьНаСторонеЦиклПослеОперацииНаКлиентеXMLDSig(КонвертSOAP, Контекст) Экспорт + + Контекст.ОперацияНачалась = Истина; + + СвойстваПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваПодписи( + КонвертSOAP, + Контекст.СвойстваСертификата, + Контекст.Форма.Комментарий); + + Если Контекст.СертификатВерен <> Неопределено Тогда + СвойстваПодписи.ДатаПодписи = ОбщегоНазначенияКлиент.ДатаСеанса(); + СвойстваПодписи.ДатаПроверкиПодписи = СвойстваПодписи.ДатаПодписи; + СвойстваПодписи.ПодписьВерна = Контекст.СертификатВерен; + КонецЕсли; + + ВыполнитьНаСторонеЦиклПослеПодписания(СвойстваПодписи, Контекст); + +КонецПроцедуры + +// Продолжение процедуры ВыполнитьНаСтороне. +Процедура ВыполнитьНаСторонеЦиклПослеОшибкиОперацииНаКлиентеXMLDSig(ТекстОшибки, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + + ОшибкаНаКлиенте = Новый Структура("ОписаниеОшибки", ТекстОшибки); + ОшибкаНаКлиенте.Вставить("Инструкция", Истина); + + ВыполнитьНаСторонеПослеЦикла(ОшибкаНаКлиенте, Контекст); + +КонецПроцедуры + + // Продолжение процедуры ВыполнитьНаСтороне. Процедура ВыполнитьНаСторонеЦиклПослеПолученияДанных(Результат, Контекст) Экспорт - Если ТипЗнч(Результат) = Тип("Структура") Тогда + ЭтоXMLDSig = (ТипЗнч(Результат) = Тип("Структура") И Результат.Свойство("ПараметрыXMLDSig")); + + Если ТипЗнч(Результат) = Тип("Структура") + И Не ЭтоXMLDSig Тогда Ошибка = Новый Структура("ОписаниеОшибки", ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаголовокОшибкиПолученияДанных(Контекст.Операция) + Символы.ПС + Результат.ОписаниеОшибки); @@ -2761,18 +2851,51 @@ Данные = Результат; Если Контекст.НаСторонеКлиента Тогда - МенеджерКриптографии = Контекст.МенеджерКриптографии; - Оповещение = Новый ОписаниеОповещения( - "ВыполнитьНаСторонеЦиклПослеОперацииНаКлиенте", ЭтотОбъект, Контекст, - "ВыполнитьНаСторонеЦиклПослеОшибкиОперацииНаКлиенте", ЭтотОбъект); - Если Контекст.Операция = "Подписание" Тогда - МенеджерКриптографии.НачатьПодписывание(Оповещение, Данные, Контекст.СертификатКриптографии); + МенеджерКриптографии = Контекст.МенеджерКриптографии; + + Если ЭтоXMLDSig Тогда + + Если Контекст.Операция <> "Подписание" Тогда + Ошибка = Новый Структура("ОписаниеОшибки", + ЭлектроннаяПодписьСлужебныйКлиентСервер.ЗаголовокОшибкиПолученияДанных(Контекст.Операция) + + Символы.ПС + НСтр("ru = 'Внешняя компонента XMLDSig может использоваться только для подписания.'")); + ВыполнитьНаСторонеПослеЦикла(Ошибка, Контекст); + Возврат; + КонецЕсли; + + ОповещениеУспех = Новый ОписаниеОповещения( + "ВыполнитьНаСторонеЦиклПослеОперацииНаКлиентеXMLDSig", ЭтотОбъект, Контекст); + + ОповещениеОшибка = Новый ОписаниеОповещения( + "ВыполнитьНаСторонеЦиклПослеОшибкиОперацииНаКлиентеXMLDSig", ЭтотОбъект, Контекст); + + Оповещения = Новый Структура; + Оповещения.Вставить("Успех", ОповещениеУспех); + Оповещения.Вставить("Ошибка", ОповещениеОшибка); + + НачатьПодписание( + Оповещения, + Результат.КонвертSOAP, + Результат.ПараметрыXMLDSig, + Контекст.СертификатКриптографии, + Контекст.МенеджерКриптографии); - ИначеЕсли Контекст.Операция = "Шифрование" Тогда - МенеджерКриптографии.НачатьШифрование(Оповещение, Данные, Контекст.СертификатыШифрования); Иначе - МенеджерКриптографии.НачатьРасшифровку(Оповещение, Данные); + + Оповещение = Новый ОписаниеОповещения( + "ВыполнитьНаСторонеЦиклПослеОперацииНаКлиенте", ЭтотОбъект, Контекст, + "ВыполнитьНаСторонеЦиклПослеОшибкиОперацииНаКлиенте", ЭтотОбъект); + + Если Контекст.Операция = "Подписание" Тогда + МенеджерКриптографии.НачатьПодписывание(Оповещение, Данные, Контекст.СертификатКриптографии); + + ИначеЕсли Контекст.Операция = "Шифрование" Тогда + МенеджерКриптографии.НачатьШифрование(Оповещение, Данные, Контекст.СертификатыШифрования); + Иначе + МенеджерКриптографии.НачатьРасшифровку(Оповещение, Данные); + КонецЕсли; + КонецЕсли; Возврат; @@ -2784,6 +2907,7 @@ ПараметрыДляСервера = Новый Структура; ПараметрыДляСервера.Вставить("Операция", Контекст.Операция); ПараметрыДляСервера.Вставить("ИдентификаторФормы", Контекст.ИдентификаторФормы); + ПараметрыДляСервера.Вставить("СертификатВерен", Контекст.СертификатВерен); ПараметрыДляСервера.Вставить("СертификатПрограмма", Контекст.Форма.СертификатПрограмма); ПараметрыДляСервера.Вставить("СертификатОтпечаток", Контекст.Форма.СертификатОтпечаток); ПараметрыДляСервера.Вставить("ЭлементДанныхДляСервера", ЭлементДанныхДляСервера); @@ -2859,6 +2983,11 @@ Если Контекст.Операция = "Подписание" Тогда СвойстваПодписи = ЭлектроннаяПодписьСлужебныйКлиентСервер.СвойстваПодписи(ДвоичныеДанные, Контекст.СвойстваСертификата, Контекст.Форма.Комментарий); + Если Контекст.СертификатВерен <> Неопределено Тогда + СвойстваПодписи.ДатаПодписи = ОбщегоНазначенияКлиент.ДатаСеанса(); + СвойстваПодписи.ДатаПроверкиПодписи = СвойстваПодписи.ДатаПодписи; + СвойстваПодписи.ПодписьВерна = Контекст.СертификатВерен; + КонецЕсли; ВыполнитьНаСторонеЦиклПослеПодписания(СвойстваПодписи, Контекст); ИначеЕсли Контекст.Операция = "Шифрование" Тогда @@ -3042,7 +3171,7 @@ // Только для внутреннего использования. -Процедура ПолучитьДанныеИзОписанияДанных(Оповещение, Форма, ОписаниеДанных, ИсточникДанных, ДляСтороныКлиента) +Процедура ПолучитьДанныеИзОписанияДанных(Оповещение, Форма, ОписаниеДанных, ИсточникДанных, ДляСтороныКлиента) Экспорт Контекст = Новый Структура; Контекст.Вставить("Форма", Форма); @@ -3070,10 +3199,15 @@ // Продолжение процедуры ПолучитьДанныеИзОписанияДанных. Процедура ПолучитьДанныеИзОписанияДанныхПродолжение(Результат, Контекст) Экспорт + ЭтоXMLDSig = (ТипЗнч(Результат) = Тип("Структура") + И ТипЗнч(Результат.Данные) = Тип("Структура") + И Результат.Данные.Свойство("ПараметрыXMLDSig")); + Если ТипЗнч(Результат) <> Тип("Структура") Или Не Результат.Свойство("Данные") Или ТипЗнч(Результат.Данные) <> Тип("ДвоичныеДанные") - И ТипЗнч(Результат.Данные) <> Тип("Строка") Тогда + И ТипЗнч(Результат.Данные) <> Тип("Строка") + И (Не ЭтоXMLDSig) Тогда Если ТипЗнч(Результат) <> Тип("Структура") Или Не Результат.Свойство("ОписаниеОшибки") Тогда Ошибка = Новый Структура("ОписаниеОшибки", НСтр("ru = 'Некорректный тип данных.'")); @@ -3089,7 +3223,8 @@ Если Контекст.ДляСтороныКлиента Тогда // Для стороны клиента требуются двоичные данные или путь к файлу. - Если ТипЗнч(Данные) = Тип("ДвоичныеДанные") Тогда + Если ТипЗнч(Данные) = Тип("ДвоичныеДанные") + Или ЭтоXMLDSig Тогда ВыполнитьОбработкуОповещения(Контекст.Оповещение, Данные); ИначеЕсли ЭтоАдресВременногоХранилища(Данные) Тогда @@ -3108,7 +3243,8 @@ Иначе // Для стороны сервера требуется адрес двоичных данных во временном хранилище. - Если ТипЗнч(Данные) = Тип("ДвоичныеДанные") Тогда + Если ТипЗнч(Данные) = Тип("ДвоичныеДанные") + Или ЭтоXMLDSig Тогда ВыполнитьОбработкуОповещения(Контекст.Оповещение, ПоместитьВоВременноеХранилище(Данные, Контекст.Форма.УникальныйИдентификатор)); @@ -3165,6 +3301,753 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Работа с XMLDSig + +// Начинает подписание XML сообщения. +// +// Параметры: +// ОповещенияПриЗавершении - ОписаниеОповещения - процедура, которая будет вызвана после подписания сообщения. +// КонвертSOAP - Строка - Шаблон подписываемого сообщения. +// СертификатКриптографии - СертификатКриптографии. +// МенеджерКриптографии - МенеджерКриптографии. +// +Процедура НачатьПодписание(ОповещенияПриЗавершении, КонвертSOAP, ДанныеАлгоритмаПодписания, СертификатКриптографии, МенеджерКриптографии) + + Контекст = Новый Структура; + Контекст.Вставить("Режим", "РежимПодписание"); + Контекст.Вставить("ОповещенияПриЗавершении", ОповещенияПриЗавершении); + Контекст.Вставить("УстанавливатьКомпоненту", Истина); + + Контекст.Вставить("КонвертSOAP", КонвертSOAP); + + Контекст.Вставить("ДанныеАлгоритмаПодписания", ДанныеАлгоритмаПодписания); + Контекст.Вставить("СертификатКриптографии", СертификатКриптографии); + Контекст.Вставить("СертификатКриптографииBase64", Неопределено); + Контекст.Вставить("МенеджерКриптографии", МенеджерКриптографии); + + Контекст.Вставить("ТипКриптопровайдера", Неопределено); + Контекст.Вставить("ИмяКриптопровайдера", Неопределено); + + СертификатКриптографии.НачатьВыгрузку( + Новый ОписаниеОповещения("НачатьПодписание_ПослеВыгрузкиСертификатаКриптографии", ЭтотОбъект, Контекст)); + +КонецПроцедуры + +// Начинает подписание XML сообщения. +// +// Параметры: +// ОповещенияПриЗавершении - ОписаниеОповещения - процедура, которая будет вызвана после подписания сообщения. +// КонвертSOAP - Строка - Шаблон подписываемого сообщения. +// ДанныеАлгоритмаПодписания - Структура со свойствами: +// МенеджерКриптографии - МенеджерКриптографии. +// +Процедура НачатьПроверкуПодписи(ОповещенияПриЗавершении, КонвертSOAP, ДанныеАлгоритмаПодписания, МенеджерКриптографии) + + СертификатКриптографииBase64 = ЭлектроннаяПодписьСлужебныйКлиентСервер.НайтиВXML(КонвертSOAP, "wsse:BinarySecurityToken"); + ДвоичныеДанные = Base64Значение(СертификатКриптографииBase64); + + Контекст = Новый Структура; + Контекст.Вставить("Режим", "РежимПроверка"); + Контекст.Вставить("ОповещенияПриЗавершении", ОповещенияПриЗавершении); + Контекст.Вставить("УстанавливатьКомпоненту", Истина); + + Контекст.Вставить("КонвертSOAP", КонвертSOAP); + + Контекст.Вставить("ДанныеАлгоритмаПодписания", ДанныеАлгоритмаПодписания); + Контекст.Вставить("СертификатКриптографии", Новый СертификатКриптографии(ДвоичныеДанные)); + Контекст.Вставить("СертификатКриптографииBase64", СертификатКриптографииBase64); + Контекст.Вставить("МенеджерКриптографии", МенеджерКриптографии); + + Контекст.Вставить("ТипКриптопровайдера", Неопределено); + Контекст.Вставить("ИмяКриптопровайдера", Неопределено); + + ИмяКомпоненты = "Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования.Макет.КомпонентаXMLDSig"; + НачатьПодключениеВнешнейКомпоненты( + Новый ОписаниеОповещения("ПослеПодключенияКомпоненты", ЭтотОбъект, Контекст), + ИмяКомпоненты, + "ОбъектXMLDSig", + ТипВнешнейКомпоненты.Native); + +КонецПроцедуры + + +// Начинает установку компоненты XMLDSig. +// +// Параметры: +// ОповещениеПриЗавершении - ОписаниеОповещения - процедура, которая будет вызвана после установки компоненты. +// +Процедура НачатьУстановкуКомпоненты(ОповещениеПриЗавершении = Неопределено) + + ДополнительныеПараметры = Новый Структура("ОповещениеПриЗавершении", ОповещениеПриЗавершении); + + ИмяКомпоненты = "Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования.Макет.КомпонентаXMLDSig"; + НачатьУстановкуВнешнейКомпоненты( + Новый ОписаниеОповещения("УстановкаКомпоненты_Завершение", ЭтотОбъект, ДополнительныеПараметры), + ИмяКомпоненты); + +КонецПроцедуры + +Процедура УстановкаКомпоненты_Завершение(ДополнительныеПараметры) Экспорт + + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеПриЗавершении, Неопределено); + +КонецПроцедуры + +Процедура ПослеУстановкиКомпоненты(Результат, Контекст) Экспорт + + Контекст.Вставить("УстанавливатьКомпоненту", Ложь); + + ИмяКомпоненты = "Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования.Макет.КомпонентаXMLDSig"; + НачатьПодключениеВнешнейКомпоненты( + Новый ОписаниеОповещения("ПослеПодключенияКомпоненты", ЭтотОбъект, Контекст), + ИмяКомпоненты, + "ОбъектXMLDSig", + ТипВнешнейКомпоненты.Native); + +КонецПроцедуры + +Процедура ПослеПодключенияКомпоненты(Подключено, Контекст) Экспорт + + Если Подключено Тогда + + Выполнено = Ложь; + Попытка + + ОбъектКомпоненты = Новый("Addin.ОбъектXMLDSig.XMLDSignAddIn"); + + Выполнено = Истина; + + Исключение + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Ошибка инициализации компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + Выполнено = Ложь; + + КонецПопытки; + + Если Выполнено Тогда + + Контекст.Вставить("ОбъектКомпоненты", ОбъектКомпоненты); + + Если Контекст.Режим = "РежимПроверка" Тогда + ОповещениеПриЗавершении = Новый ОписаниеОповещения("НачатьПроверкуПодписиСообщенияSOAP", ЭтотОбъект, Контекст); + Контекст.МенеджерКриптографии.НачатьПолучениеИнформацииМодуляКриптографии(ОповещениеПриЗавершении); + ИначеЕсли Контекст.Режим = "РежимПодписание" Тогда + ОповещениеПриЗавершении = Новый ОписаниеОповещения("НачатьПодписаниеСообщенияSOAP", ЭтотОбъект, Контекст); + Контекст.МенеджерКриптографии.НачатьПолучениеИнформацииМодуляКриптографии(ОповещениеПриЗавершении); + Иначе + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Не установлен режим работы компоненты XMLDSig.'")); + КонецЕсли; + + КонецЕсли; + + ИначеЕсли Контекст.УстанавливатьКомпоненту Тогда + + ТекстВопроса = НСтр("ru = 'Для подписания XML необходима установка компоненты XMLDSig. + |Перейти к установке данной компоненты?'"); + ПоказатьВопрос( + Новый ОписаниеОповещения("ПередУстановкойКомпоненты", ЭтотОбъект, Контекст), + ТекстВопроса, + РежимДиалогаВопрос.ДаНет); + + Иначе + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Операция невозможна. Требуется установка компоненты XMLDSig.'")); + + КонецЕсли; + +КонецПроцедуры + +Процедура ПередУстановкойКомпоненты(РезультатВопроса, Контекст) Экспорт + + Если НЕ РезультатВопроса = КодВозвратаДиалога.Да Тогда + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Операция невозможна. Требуется установка компоненты для HTTP-запросов.'")); + + Иначе + + НачатьУстановкуКомпоненты(Новый ОписаниеОповещения("ПослеУстановкиКомпоненты", ЭтотОбъект, Контекст)); + + КонецЕсли; + +КонецПроцедуры + + +Процедура НачатьПодписание_ПослеВыгрузкиСертификатаКриптографии(ДвоичныеДанныеСертификата, Контекст) Экспорт + + СертификатКриптографииBase64 = ОтформатироватьСтрокуBase64(Base64Строка(ДвоичныеДанныеСертификата)); + + Контекст.КонвертSOAP = СтрЗаменить( + Контекст.КонвертSOAP, + "%BinarySecurityToken%", + СертификатКриптографииBase64); + + Контекст.СертификатКриптографииBase64 = СертификатКриптографииBase64; + + ИмяКомпоненты = "Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования.Макет.КомпонентаXMLDSig"; + НачатьПодключениеВнешнейКомпоненты( + Новый ОписаниеОповещения("ПослеПодключенияКомпоненты", ЭтотОбъект, Контекст), + ИмяКомпоненты, + "ОбъектXMLDSIG", + ТипВнешнейКомпоненты.Native); + +КонецПроцедуры + +Процедура НачатьПодписаниеСообщенияSOAP(ИнформацияМодуляКриптографии, Контекст) Экспорт + + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); + ИмяКриптопровайдера = ИнформацияМодуляКриптографии.Имя; + ТипКриптопровайдера = ПараметрыРаботыКлиента.ТипыПрограммЭлектроннойПодписи[ИмяКриптопровайдера]; + + Если ТипКриптопровайдера = Неопределено Тогда + + ЗавершитьОперациюСОшибкой( + Контекст, + СтрШаблон( + НСтр("ru = 'Не удалось определить тип криптопровайдера %1'"), ИнформацияМодуляКриптографии.Имя) + + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат; + + КонецЕсли; + + Контекст.ТипКриптопровайдера = ТипКриптопровайдера; + Контекст.ИмяКриптопровайдера = ИмяКриптопровайдера; + + Попытка + + ОписаниеОповещения = Новый ОписаниеОповещения( + "Подписание_ПослеВыполненияGetSignOIDFromCert", ЭтотОбъект, Контекст, + "Подписание_ПослеВыполненияGetSignOIDFromCert_Ошибка", ЭтотОбъект); + + Контекст.ОбъектКомпоненты.НачатьВызовGetSignOIDFromCert( + ОписаниеОповещения, + Контекст.СертификатКриптографииBase64); + + Исключение + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Ошибка вызова метода GetSignOIDFromCert компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + +КонецПроцедуры + +Процедура Подписание_ПослеВыполненияGetSignOIDFromCert_Ошибка(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Ошибка вызова метода GetSignOIDFromCert компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + +КонецПроцедуры + +Процедура Подписание_ПослеВыполненияGetSignOIDFromCert(OIDАлгоритмаПодписи, Параметры, Контекст) Экспорт + + Если OIDАлгоритмаПодписи = Неопределено Тогда + НачатьПолучениеТекстаОшибки(НСтр("ru = 'При выполнении метода GetSignOIDFromCert произошла ошибка:'"), Контекст); + Возврат; + КонецЕсли; + + Если OIDАлгоритмаПодписи <> Контекст.ДанныеАлгоритмаПодписания.OIDАлгоритмаПодписи Тогда + + ЗавершитьОперациюСОшибкой( + Контекст, + СтрШаблон( + НСтр("ru = 'Алгоритм подписи сертификата криптографии отличается от алгоритма %1.'"), + Контекст.ДанныеАлгоритмаПодписания.ИмяАлгоритмаПодписи)); + + Иначе + + Попытка + + ОписаниеОповещения = Новый ОписаниеОповещения( + "Подписание_ПослеВыполненияC14N_ПодписываемыйТег", ЭтотОбъект, Контекст, + "Подписание_ПослеВыполненияC14N_ПодписываемыйТег_Ошибка", ЭтотОбъект); + + Контекст.ОбъектКомпоненты.НачатьВызовC14N( + ОписаниеОповещения, + Контекст.КонвертSOAP, + Контекст.ДанныеАлгоритмаПодписания.XPathПодписываемыйТег); + + Исключение + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Ошибка вызова метода C14N компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + + КонецЕсли; + +КонецПроцедуры + +Процедура Подписание_ПослеВыполненияC14N_ПодписываемыйТег_Ошибка(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Ошибка вызова метода C14N компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + +КонецПроцедуры + +Процедура Подписание_ПослеВыполненияC14N_ПодписываемыйТег(КаноникализированныйТекстXML, Параметры, Контекст) Экспорт + + Если КаноникализированныйТекстXML = Неопределено Тогда + НачатьПолучениеТекстаОшибки(НСтр("ru = 'При выполнении метода C14N произошла ошибка:'"), Контекст); + Возврат; + КонецЕсли; + + Попытка + + ОписаниеОповещения = Новый ОписаниеОповещения( + "Подписание_ПослеВыполненияHash_ПодписываемыйТег", ЭтотОбъект, Контекст, + "Подписание_ПослеВыполненияHash_ПодписываемыйТег_Ошибка", ЭтотОбъект); + + Контекст.ОбъектКомпоненты.НачатьВызовHash( + ОписаниеОповещения, + КаноникализированныйТекстXML, + Контекст.ДанныеАлгоритмаПодписания.OIDАлгоритмаХеширования, + Контекст.ТипКриптопровайдера); + + Исключение + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Ошибка вызова метода Hash компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + +КонецПроцедуры + +Процедура Подписание_ПослеВыполненияHash_ПодписываемыйТег_Ошибка(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Ошибка вызова метода Hash компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + +КонецПроцедуры + +Процедура Подписание_ПослеВыполненияHash_ПодписываемыйТег(DigestValue, Параметры, Контекст) Экспорт + + Если DigestValue = Неопределено Тогда + НачатьПолучениеТекстаОшибки(НСтр("ru = 'При выполнении метода Hash произошла ошибка:'"), Контекст); + Возврат; + КонецЕсли; + + Контекст.КонвертSOAP = СтрЗаменить(Контекст.КонвертSOAP, "%DigestValue%", DigestValue); + + Попытка + + ОписаниеОповещения = Новый ОписаниеОповещения( + "Подписание_ПослеВыполненияC14N_SignedInfo", ЭтотОбъект, Контекст, + "Подписание_ПослеВыполненияC14N_SignedInfo_Ошибка", ЭтотОбъект); + + Контекст.ОбъектКомпоненты.НачатьВызовC14N( + ОписаниеОповещения, + Контекст.КонвертSOAP, + Контекст.ДанныеАлгоритмаПодписания.XPathSignedInfo); + + Исключение + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Ошибка вызова метода C14N компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + +КонецПроцедуры + +Процедура Подписание_ПослеВыполненияC14N_SignedInfo_Ошибка(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Ошибка вызова метода C14N компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + +КонецПроцедуры + +Процедура Подписание_ПослеВыполненияC14N_SignedInfo(КаноникализированныйТекстXMLSignedInfo, Параметры, Контекст) Экспорт + + Если КаноникализированныйТекстXMLSignedInfo = Неопределено Тогда + НачатьПолучениеТекстаОшибки(НСтр("ru = 'При выполнении метода C14N произошла ошибка:'"), Контекст); + Возврат; + КонецЕсли; + + Попытка + + Контекст.ОбъектКомпоненты.НачатьВызовSign( + Новый ОписаниеОповещения("Подписание_ПослеВыполненияSign", ЭтотОбъект, Контекст), + КаноникализированныйТекстXMLSignedInfo, + Контекст.СертификатКриптографииBase64, + Контекст.МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу); + + Исключение + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Ошибка вызова метода Sign компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + +КонецПроцедуры + +Процедура Подписание_ПослеВыполненияSign(SignatureValue, Параметры, Контекст) Экспорт + + Если SignatureValue = Неопределено Тогда + НачатьПолучениеТекстаОшибки(НСтр("ru = 'При выполнении метода Sign произошла ошибка:'"), Контекст); + Возврат; + КонецЕсли; + + КонвертSOAP = СтрЗаменить(Контекст.КонвертSOAP, "%SignatureValue%", SignatureValue); + ВыполнитьОбработкуОповещения(Контекст.ОповещенияПриЗавершении.Успех, КонвертSOAP); + +КонецПроцедуры + + +Процедура НачатьПроверкуПодписиСообщенияSOAP(ИнформацияМодуляКриптографии, Контекст) Экспорт + + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); + + ИмяКриптопровайдера = ИнформацияМодуляКриптографии.Имя; + ТипКриптопровайдера = ПараметрыРаботыКлиента.ТипыПрограммЭлектроннойПодписи[ИмяКриптопровайдера]; + + Если ТипКриптопровайдера = Неопределено Тогда + + ЗавершитьОперациюСОшибкой( + Контекст, + СтрШаблон( + НСтр("ru = 'Не удалось определить тип криптопровайдера %1'"), ИнформацияМодуляКриптографии.Имя) + + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат; + + КонецЕсли; + + Контекст.ТипКриптопровайдера = ТипКриптопровайдера; + Контекст.ИмяКриптопровайдера = ИмяКриптопровайдера; + + Попытка + + ОписаниеОповещения = Новый ОписаниеОповещения( + "Проверка_ПослеВыполненияGetSignOIDFromCert", ЭтотОбъект, Контекст, + "Проверка_ПослеВыполненияGetSignOIDFromCert_Ошибка", ЭтотОбъект); + + Контекст.ОбъектКомпоненты.НачатьВызовGetSignOIDFromCert( + ОписаниеОповещения, + Контекст.СертификатКриптографииBase64); + + Исключение + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Ошибка вызова метода GetSignOIDFromCert компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + +КонецПроцедуры + +Процедура Проверка_ПослеВыполненияGetSignOIDFromCert_Ошибка(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Ошибка вызова метода GetSignOIDFromCert компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + +КонецПроцедуры + +Процедура Проверка_ПослеВыполненияGetSignOIDFromCert(OIDАлгоритмаПодписи, Параметры, Контекст) Экспорт + + Если OIDАлгоритмаПодписи = Неопределено Тогда + НачатьПолучениеТекстаОшибки(НСтр("ru = 'При выполнении метода GetSignOIDFromCert произошла ошибка:'"), Контекст); + Возврат; + КонецЕсли; + + Если OIDАлгоритмаПодписи <> Контекст.ДанныеАлгоритмаПодписания.OIDАлгоритмаПодписи Тогда + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Ошибка вызова метода Hash компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + Иначе + + Попытка + + ОписаниеОповещения = Новый ОписаниеОповещения( + "Проверка_ПослеВыполненияC14N_SignedInfo", ЭтотОбъект, Контекст, + "Проверка_ПослеВыполненияC14N_SignedInfo_Ошибка", ЭтотОбъект); + + Контекст.ОбъектКомпоненты.НачатьВызовC14N( + ОписаниеОповещения, + Контекст.КонвертSOAP, + Контекст.ДанныеАлгоритмаПодписания.XPathSignedInfo); + + Исключение + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Ошибка вызова метода C14N компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + + КонецЕсли; + +КонецПроцедуры + +Процедура Проверка_ПослеВыполненияC14N_SignedInfo_Ошибка(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Ошибка вызова метода C14N компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + +КонецПроцедуры + +Процедура Проверка_ПослеВыполненияC14N_SignedInfo(КаноникализированныйТекстXMLSignedInfo, Параметры, Контекст) Экспорт + + Если КаноникализированныйТекстXMLSignedInfo = Неопределено Тогда + НачатьПолучениеТекстаОшибки(НСтр("ru = 'При выполнении метода C14N произошла ошибка:'"), Контекст); + Возврат; + КонецЕсли; + + SignatureValue = ЭлектроннаяПодписьСлужебныйКлиентСервер.НайтиВXML(Контекст.КонвертSOAP, "SignatureValue"); + СертификатКриптографииBase64 = ЭлектроннаяПодписьСлужебныйКлиентСервер.НайтиВXML(Контекст.КонвертSOAP, "wsse:BinarySecurityToken"); + + Попытка + + ОписаниеОповещения = Новый ОписаниеОповещения( + "Проверка_ПослеВыполненияVerifySign", ЭтотОбъект, Контекст, + "Проверка_ПослеВыполненияVerifySign_Ошибка", ЭтотОбъект); + + Контекст.ОбъектКомпоненты.НачатьВызовVerifySign( + ОписаниеОповещения, + КаноникализированныйТекстXMLSignedInfo, + SignatureValue, + СертификатКриптографииBase64, + Контекст.ТипКриптопровайдера); + + Исключение + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Ошибка вызова метода VerifySign компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + +КонецПроцедуры + +Процедура Проверка_ПослеВыполненияVerifySign_Ошибка(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Ошибка вызова метода VerifySign компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + +КонецПроцедуры + +Процедура Проверка_ПослеВыполненияVerifySign(ПодписьВерна, Параметры, Контекст) Экспорт + + Если ПодписьВерна = Неопределено Тогда + НачатьПолучениеТекстаОшибки(НСтр("ru = 'При выполнении метода VerifySign произошла ошибка:'"), Контекст); + Возврат; + КонецЕсли; + + Если Не ПодписьВерна Тогда + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Подпись не верна (SignatureValue не корректно.'")); + + Иначе + + Попытка + + ОписаниеОповещения = Новый ОписаниеОповещения( + "Проверка_ПослеВыполненияC14N_ПодписываемыйТег", ЭтотОбъект, Контекст, + "Проверка_ПослеВыполненияC14N_ПодписываемыйТег_Ошибка", ЭтотОбъект); + + Контекст.ОбъектКомпоненты.НачатьВызовC14N( + ОписаниеОповещения, + Контекст.КонвертSOAP, + Контекст.ДанныеАлгоритмаПодписания.XPathПодписываемыйТег); + + Исключение + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Ошибка вызова метода C14N компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + + КонецЕсли; + +КонецПроцедуры + +Процедура Проверка_ПослеВыполненияC14N_ПодписываемыйТег_Ошибка(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Ошибка вызова метода C14N компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + +КонецПроцедуры + +Процедура Проверка_ПослеВыполненияC14N_ПодписываемыйТег(КаноникализированныйТекстXMLПодписываемыйТег, Параметры, Контекст) Экспорт + + Если КаноникализированныйТекстXMLПодписываемыйТег = Неопределено Тогда + НачатьПолучениеТекстаОшибки(НСтр("ru = 'При выполнении метода C14N произошла ошибка:'"), Контекст); + Возврат; + КонецЕсли; + + Попытка + + ОписаниеОповещения = Новый ОписаниеОповещения( + "Проверка_ПослеВыполненияHash_ПодписываемыйТег", ЭтотОбъект, Контекст, + "Проверка_ПослеВыполненияHash_ПодписываемыйТег_Ошибка", ЭтотОбъект); + + Контекст.ОбъектКомпоненты.НачатьВызовHash( + ОписаниеОповещения, + КаноникализированныйТекстXMLПодписываемыйТег, + Контекст.ДанныеАлгоритмаПодписания.OIDАлгоритмаХеширования, + Контекст.ТипКриптопровайдера); + + Исключение + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Ошибка вызова метода Hash компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + +КонецПроцедуры + +Процедура Проверка_ПослеВыполненияHash_ПодписываемыйТег_Ошибка(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Ошибка вызова метода Hash компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + +КонецПроцедуры + +Процедура Проверка_ПослеВыполненияHash_ПодписываемыйТег(HashValue, Параметры, Контекст) Экспорт + + Если HashValue = Неопределено Тогда + НачатьПолучениеТекстаОшибки(НСтр("ru = 'При выполнении метода Hash произошла ошибка:'"), Контекст); + Возврат; + КонецЕсли; + + DigestValue = ЭлектроннаяПодписьСлужебныйКлиентСервер.НайтиВXML(Контекст.КонвертSOAP, "DigestValue"); + + ПодписьВерна = (DigestValue = HashValue); + + Если Не ПодписьВерна Тогда + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Подпись не верна (SignatureValue корректно, отличается DigestValue).'")); + + Иначе + + ДвоичныеДанные = Base64Значение(Контекст.СертификатКриптографииBase64); + + ДатаПодписания = ЭлектроннаяПодписьКлиент.ДатаПодписания(ДвоичныеДанные); + Если Не ЗначениеЗаполнено(ДатаПодписания) Тогда + ДатаПодписания = Неопределено; + КонецЕсли; + + ВозвращаемоеЗначение = Новый Структура; + ВозвращаемоеЗначение.Вставить("Сертификат", Контекст.СертификатКриптографии); + ВозвращаемоеЗначение.Вставить("ДатаПодписания", ДатаПодписания); + + ВыполнитьОбработкуОповещения(Контекст.ОповещенияПриЗавершении.Успех, ВозвращаемоеЗначение); + + КонецЕсли; + +КонецПроцедуры + + +Процедура НачатьПолучениеТекстаОшибки(НачалоОписанияТекстаОшибки, Контекст) + + Попытка + + Контекст.Вставить("НачалоОписанияТекстаОшибки", НачалоОписанияТекстаОшибки); + + ОписаниеОповещения = Новый ОписаниеОповещения( + "ПослеВыполненияGetLastError", ЭтотОбъект, Контекст, + "ПослеВыполненияGetLastError_Ошибка", ЭтотОбъект); + + Контекст.ОбъектКомпоненты.НачатьВызовGetLastError(ОписаниеОповещения); + + Исключение + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Ошибка вызова метода GetLastError компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + +КонецПроцедуры + +Процедура ПослеВыполненияGetLastError_Ошибка(ИнформацияОбОшибке, СтандартнаяОбработка, Контекст) Экспорт + + СтандартнаяОбработка = Ложь; + + ЗавершитьОперациюСОшибкой( + Контекст, + НСтр("ru = 'Ошибка вызова метода GetLastError компоненты XMLDSig.'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + +КонецПроцедуры + +Процедура ПослеВыполненияGetLastError(ТекстОшибки, Параметры, Контекст) Экспорт + + ЗавершитьОперациюСОшибкой( + Контекст, + Контекст.НачалоОписанияТекстаОшибки + Символы.ПС + ТекстОшибки); + +КонецПроцедуры + +// Форматирует строку в формате base64, удаляя символы перевода строки и возврата каретки. +// +// Параметры: +// СтрокаBase64 - Строка - строка, которая подлежит преобразования. +// +// Возвращаемое значение: +// Строка - строка, из которой удалены символы перевода строки и возврата каретки. +// +Функция ОтформатироватьСтрокуBase64(СтрокаBase64) + + Значение = СтрЗаменить(СтрокаBase64, Символы.ВК, ""); + Значение = СтрЗаменить(Значение, Символы.ПС, ""); + + Возврат Значение; + +КонецФункции + +Процедура ЗавершитьОперациюСОшибкой(Контекст, ТекстОшибки) + + ВыполнитьОбработкуОповещения(Контекст.ОповещенияПриЗавершении.Ошибка, ТекстОшибки); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl index 2bcbcb397..b6b61bce7 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйКлиентСервер/Module.bsl @@ -355,6 +355,8 @@ СвойстваПодписи.Вставить("Комментарий", Комментарий); СвойстваПодписи.Вставить("ИмяФайлаПодписи", ИмяФайлаПодписи); СвойстваПодписи.Вставить("ДатаПодписи", Дата('00010101')); // Устанавливается перед записью. + СвойстваПодписи.Вставить("ДатаПроверкиПодписи", Дата('00010101')); // Дата последней проверки подписи. + СвойстваПодписи.Вставить("ПодписьВерна", Ложь); // Результат последней проверки подписи. // Производные свойства: СвойстваПодписи.Вставить("Сертификат", СвойстваСертификата.ДвоичныеДанные); СвойстваПодписи.Вставить("Отпечаток", СвойстваСертификата.Отпечаток); @@ -418,51 +420,102 @@ Функция ДатаПодписанияУниверсальная(Подпись) Экспорт #Если ВебКлиент Тогда - - СимволыБайт = СимволыБайтДвоичныхДанных(Подпись); - ЗаголовокДаты = Символ(15) + Символ(23) + Символ(13); - Позиция = СтрНайти(СимволыБайт, ЗаголовокДаты); - - Если Позиция = 0 Тогда - Возврат Неопределено; - КонецЕсли; - - ДатаСтрокой = Сред(СимволыБайт, Позиция + 3, 12); // Дата в формате ASCII. - ДатаПодписания = Дата("20" + ДатаСтрокой); // Универсальное время. - - Возврат ДатаПодписания; - + СимволыПодписи = СимволыБайтДвоичныхДанных(Подпись); #Иначе - - ДатаПодписания = Неопределено; - ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); Подпись.Записать(ИмяВременногоФайла); ЧтениеТекста = Новый ЧтениеТекста(ИмяВременногоФайла); - Символ = ЧтениеТекста.Прочитать(1); - - Пока Символ <> Неопределено Цикл - Если КодСимвола(Символ) = 15 Тогда - Символ = ЧтениеТекста.Прочитать(2); - Если КодСимвола(Символ, 1) = 23 И КодСимвола(Символ, 2) = 13 Тогда - ДатаСтрокой = ЧтениеТекста.Прочитать(12); - ДатаПодписания = Дата("20" + ДатаСтрокой); - Прервать; - КонецЕсли; - КонецЕсли; - Символ = ЧтениеТекста.Прочитать(1); - КонецЦикла; + СимволыПодписи = ЧтениеТекста.Прочитать(); ЧтениеТекста.Закрыть(); УдалитьФайлы(ИмяВременногоФайла); - #КонецЕсли + ДатаПодписания = Неопределено; + ЗаголовокДаты = Символ(15) + Символ(23) + Символ(13); + Позиция = СтрНайти(СимволыПодписи, ЗаголовокДаты); + + Пока Позиция > 0 Цикл + ДатаСтрокой = Сред(СимволыПодписи, Позиция + 3, 12); // Дата в формате ASCII. + Если ЭтоЦифры(ДатаСтрокой) Тогда + Попытка + ДатаПодписания = Дата("20" + ДатаСтрокой); // Универсальное время. + Прервать; + Исключение + ДатаПодписания = Неопределено; + КонецПопытки; + КонецЕсли; + СимволыПодписи = Сред(СимволыПодписи, Позиция + 1); + Позиция = СтрНайти(СимволыПодписи, ЗаголовокДаты); + КонецЦикла; + Возврат ДатаПодписания; КонецФункции +// Находит в XML содержимое находящееся в теге. +// +// Параметры: +// Текст - Строка - текст XML, в котором выполняется поиск. +// ИмяТега - Строка - тег, содержимое которого необходимо найти. +// ВключатьОткрывающийЗакрывающийТег - Булево - признак необходимости найденного тегом, по которому выполнялся поиск, по умолчанию Ложь. +// НомерПоПорядку - Число - позиция, с которой начинается поиск, по умолчанию 1. +// +// Возвращаемое значение: +// Строка - строка, из которой удалены символы перевода строки и возврата каретки. +// +Функция НайтиВXML(Текст, ИмяТега, ВключатьОткрывающийЗакрывающийТег = Ложь, НомерПоПорядку = 1) Экспорт + + Результат = Неопределено; + + Начало = "<" + ИмяТега; + Окончание = "</" + ИмяТега + ">"; + + Содержимое = Сред( + Текст, + СтрНайти(Текст, Начало, НаправлениеПоиска.СНачала, 1, НомерПоПорядку), + СтрНайти(Текст, Окончание, НаправлениеПоиска.СНачала, 1, НомерПоПорядку) + СтрДлина(Окончание) - СтрНайти(Текст, Начало, НаправлениеПоиска.СНачала, 1, НомерПоПорядку)); + + Если ВключатьОткрывающийЗакрывающийТег Тогда + + Результат = СокрЛП(Содержимое); + + Иначе + + ОткрывающийТег = Лев(Содержимое, СтрНайти(Содержимое, ">")); + Содержимое = СтрЗаменить(Содержимое, ОткрывающийТег, ""); + + ЗакрывающийТег = Прав(Содержимое, СтрДлина(Содержимое) - СтрНайти(Содержимое, "<", НаправлениеПоиска.СКонца) + 1); + Содержимое = СтрЗаменить(Содержимое, ЗакрывающийТег, ""); + + Результат = СокрЛП(Содержимое); + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Преобразует сертификат криптографии в корректно отформатированную строку в формате Base64. +// +// Параметры: +// ДанныеСертификата - ДвоичныеДанные - данные сертификата, которые подлежат преобразованию. +// +// Возвращаемое значение: +// Строка - преобразованный в строку в формате Base64 сертификат. +// +Функция СертификатКриптографииBase64(ДанныеСертификата) Экспорт + + СтрокаBase64 = Base64Строка(ДанныеСертификата); + + Значение = СтрЗаменить(СтрокаBase64, Символы.ВК, ""); + Значение = СтрЗаменить(Значение, Символы.ПС, ""); + + Возврат Значение; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции. @@ -488,7 +541,7 @@ КонецФункции -// Для процедуры ДатаПодписания. +// Для процедуры ДатаПодписанияУниверсальная. Функция СимволыБайтДвоичныхДанных(ДвоичныеДанные) Строки = СтрРазделить(Base64Строка(ДвоичныеДанные), Символы.ПС, Ложь); @@ -558,4 +611,18 @@ КонецФункции +// Для процедуры ДатаПодписанияУниверсальная. +Функция ЭтоЦифры(Строка) + + Для НомерСимвола = 1 По СтрДлина(Строка) Цикл + ТекущийСимвол = Сред(Строка, НомерСимвола, 1); + Если ТекущийСимвол < "0" Или ТекущийСимвол > "9" Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйПовтИсп/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйПовтИсп/Module.bsl index 35493e023..082250beb 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПодписьСлужебныйПовтИсп/Module.bsl @@ -89,4 +89,38 @@ КонецФункции +// Возвращает соответствие типов программ электронной подписи по именам. +// +// Возвращаемое значение: +// Соответствие со свойствами: +// * Ключ - Строка - Уникальное имя программы, присвоенное ее разработчиком. +// * Значение - Число - Число, которое описывает тип программы и дополняет имя программы. +// +Функция ТипыПрограммЭлектроннойПодписи() Экспорт + + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат Новый ФиксированноеСоответствие(Новый Соответствие); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ПрограммыЭлектроннойПодписиИШифрования.ИмяПрограммы, + | ПрограммыЭлектроннойПодписиИШифрования.ТипПрограммы + |ИЗ + | Справочник.ПрограммыЭлектроннойПодписиИШифрования КАК ПрограммыЭлектроннойПодписиИШифрования"); + + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + + ТипыПрограммЭлектроннойПодписи = Новый Соответствие; + Пока Выборка.Следующий() Цикл + ТипыПрограммЭлектроннойПодписи.Вставить(Выборка.ИмяПрограммы, Выборка.ТипПрограммы); + КонецЦикла; + + Возврат Новый ФиксированноеСоответствие(ТипыПрограммЭлектроннойПодписи); + +КонецФункции + #КонецОбласти diff --git a/SSL/src/CommonPictures/Логотип1СБухфон/Логотип1СБухфон.mdo b/SSL/src/CommonPictures/GoogleMaps/GoogleMaps.mdo similarity index 52% rename from SSL/src/CommonPictures/Логотип1СБухфон/Логотип1СБухфон.mdo rename to SSL/src/CommonPictures/GoogleMaps/GoogleMaps.mdo index cfe039d7a..ff37dbc29 100644 --- a/SSL/src/CommonPictures/Логотип1СБухфон/Логотип1СБухфон.mdo +++ b/SSL/src/CommonPictures/GoogleMaps/GoogleMaps.mdo @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> -<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="74e1bfac-18ea-48c2-b7e9-fd374a90a35d"> - <name>Логотип1СБухфон</name> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="5a88f624-7b7e-43fe-8bc4-ae85d832a855"> + <name>GoogleMaps</name> <synonym> <key>ru</key> - <value>Логотип 1С-Бухфон</value> + <value>Google maps</value> </synonym> </mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/GoogleMaps/Picture.png b/SSL/src/CommonPictures/GoogleMaps/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..c9909f81918cc6a6ba4e437e68ad01e4821ce384 GIT binary patch literal 1419 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`<jAm(=3qqRfJl%=|nBkco*&`K2Yc zN<f!FypUVq>kBtHuNWFoz#!AFNG#Ad)HBe}%?0@jth%@)C>7xhtg4GcDhpEegHnt0 zON)|$@sXws(+mtd{1$-}0$pR}Uz7=ql*AmD{N&Qy)VvZ;7h5Huj9yA+ij}#6fu)nF zv7@oGv5Bjxp`oLhiLsNpiJ`NRk)@fNn-R<mY<i7N91TreEZj`YO@J}sYU*fU4%Fmg z<Y?|@YHVU=4%6$IS6q^qmz)Z-Hxp<tRIe*uy;jaesfi`|MIrh5Ij|HEkda@KU!0L& zpx_*Arl1j?nU|7ZUaSd<9*A#UQj0RnQd8WD@^cly;cJzN#eSeOO^uul%#DGr2l?C5 z+|b$5*vP`vz`)hOzyRoPh~5-(!b~6N7=2LUKuRnyAz%swG2uxc$bn~`)I4C0DFS8< z=OosC1_s96o-U3d6}NgOo%eQf6gVCp{30M_f|F}%nV?O{g(e<VCH}IP{x1Y1#av`x z$-fXPnXa?T<>JB>-Wo|EB2(I37AY*$(dgiE{l)0?>)yB6o9f+bE*xsF{G9fDxAErH zi>FMAdVTzL@nM|?#RR6x0;VvjbB{Q;xrci{xNR)dz}aZ!8NqnD_qls^P~-Z8iPmR$ z4H|Sfn!GRYA3DI}bs%xVT)&l82Pfa0mAT8}?&JIH^YgCp-hBSib7jM-ReT41Lyo%K zU$|Z|fT88_%C5?m2uG{tHJ9(QUuG?H?Bn&BaZoGcVf6FUOpEL4jpw8aTyW`W$yu}i z>GqG6F^{L!J1)QGBxB*|uOfBz;I3Diva`3&*t2Sp4wF*i<w;(9UKjr25Xw2w{=|J5 z+ia5{tGFwIthH_}^Gv%MLSy!El@$qjR&Lz4HbUo9(tF>>N4I#N;xApY-q>Zw>r+my z4^Qdry6y4eVd{dc)9ewKWXzgXRyXlanreUa`2+3v=#^i%Iu6YF`p+y}@W3<Wh-=j{ zN`7&zzN-&?n^G4h@>D<|?cw{5r!Ri4)RRyvX-)ZNU}Q7zQNKDz+{~$as(<Ofi&~p@ d^S?bK8^c{yg{><3%m09iM^9Hjmvv4FO#rLu{7e7< literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ВосклицательныйЗнакКрасный/Picture.png b/SSL/src/CommonPictures/ВосклицательныйЗнакКрасный/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..2ae0c4615be06be9ce4b30c3e2252cd7bb75beb6 GIT binary patch literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^{6H+g!3HExhN-duDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9F5he4R}c>anMprBZZYeY$Kep*R+Vo@qXL1JcJiC$i6iGqoq zf%S{8nLrgcJY5_^Ec}yy{QqyyY;{lZ*n`i<PQUrD%l-7ff|;2qk3xel(~^(px32yF zUvA!i`6Ftc#wU)=zpdVE*x@@VZ9%a9{+J72{{K89HDR;<<W-fI{w~|{UxDX}O=rm2 zedeE>|1}!~Y}Q{n%hdn3#DDh01!=yMOqxZQO>LPHbEF)TEEaREsuT_QtW{)so7wdC z<fW3+)n-`urSJb_(pizD`JJc5F=rCfo7T0Drpv2`|M|an;p6|Aq4(CSWdGZ|@$>)t zsaOB^YZmQO06J>ra+8+*%*;IdH!BLd$uTf^aJX;(_wm9LpdT4LUHx3vIVCg!05Q{# A-~a#s literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ВосклицательныйЗнакКрасный/ВосклицательныйЗнакКрасный.mdo b/SSL/src/CommonPictures/ВосклицательныйЗнакКрасный/ВосклицательныйЗнакКрасный.mdo new file mode 100644 index 000000000..f13bde97f --- /dev/null +++ b/SSL/src/CommonPictures/ВосклицательныйЗнакКрасный/ВосклицательныйЗнакКрасный.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="8b4614aa-c769-49f4-a281-a0ffb101abf1"> + <name>ВосклицательныйЗнакКрасный</name> + <synonym> + <key>ru</key> + <value>Восклицательный знак красный</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ВставитьИзБуфераОбмена/Picture.png b/SSL/src/CommonPictures/ВставитьИзБуфераОбмена/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..8ae4176c95510dd7cada5688a474a1b48c5ddc17 GIT binary patch literal 1348 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NSs56Z83KGlT!G@1m6g@i)wQ*?b#-;i>JxjLDwa1St!PYM*_^VfC3Q_}+S;~^ z^&OcTI<q!*WpC=v+1!)6qc>~!gxn32D)&t;IxxNL@a*a-oek5v8t2ZP+qQh?{>8oP z)~#Ez|Lm3{=eHlbu<zpS1M`}XFK9Tmr1i{-&f}{lo!Ywe!KD*VubqB=<IIbj=U(1E z|M=#GS9dPHzIXZM-79bJUwQlR+OucR9=!Sb=JU_5U%!6*_T$sHpI?6b{`Tw7kKccP z{Q;tXfByda`|lsn{i9$s1jr776LM^4f%$}?B*-uL|HuXm!Qa_cfdR=`;1OBOz`%DH zgc*<LuSfw3N|m@qlmzFem6RtIr7{F0X6BXX`MHKDlo{)p>KPgsd?{K8R5jbv#W6%9 z*!Fz1cw>M-+rz+<GmEZWvv5BVdBgSp|L~>fj};qd@6CReq~RNU+<-@Yw)~TsyQJF| zuAV)QYg<{ENi=Krgy3J(xOy|KH}f<#uXn0tRBz*S%H?zSoAjj3>8j+LpED2gg;s5N z?BUg^tyP|Q`V(Wh<5Iqyh(1Ryt!)WsKXFBBm>hhb!7_0{qFk6vyn@)5+DY-J>^tV0 X7e@Fd%76R=awdbPtDnm{r-UW|jLP%- literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ВставитьИзБуфераОбмена/ВставитьИзБуфераОбмена.mdo b/SSL/src/CommonPictures/ВставитьИзБуфераОбмена/ВставитьИзБуфераОбмена.mdo new file mode 100644 index 000000000..71d2d3d15 --- /dev/null +++ b/SSL/src/CommonPictures/ВставитьИзБуфераОбмена/ВставитьИзБуфераОбмена.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="b7a0d00f-fbf3-41fe-b72f-c17e163264f9"> + <name>ВставитьИзБуфераОбмена</name> + <synonym> + <key>ru</key> + <value>Вставить из буфера обмена</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ДобавитьВложенный/Picture.png b/SSL/src/CommonPictures/ДобавитьВложенный/Picture.png deleted file mode 100644 index 53dc449e542434e1e858598cf28c164c58d3ae24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 452 zcmV;#0XzPQP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00004XF*Lt006O% z3;baP00009a7bBm000ic000ic0Tn1pfB*mh8gxZibW?9;ba!ELWdKlNX>N2bPDNB8 zb~7$DE-^7j^FlWO00BTrL_t(IPh+t5&-`!ZneyMlC+)wbZ~A`_pMezM8d>!J-nak% z?|lbiAPwR}rHBK0^)vpTy>RRQ_T8tz8bN%p1hJsHcPWYnbUr~)-oD`f)Fr$BPhY<8 z|IC#K{?A^0h%^JJ0y4@QDYI4G#*01%1n-qk2-++EKWLA90#pbBKwj8)<OJLhTm}a2 zkW28}B>UfIjSQ**n|AK|ADo;IHw0t=vLS)n!5R|+w#m)*T_^M3Yq|7nkRj%^VhDpa z9=h;9y=&2bHUFIdYVPr1tdi6ZHpF+m?0?Ut(*He|N&k1ADf!=ig7|;?e)0dNm7-W( z%Aguv1=kD$p37tsoM%Xa@NDZ=vHvDz!n2JEg%eClMNz#11IU_@fzvdJ1j{DT{|0$N u*fkOY+7Y4&I&mWZbyI}NGXN7XFaQ9b^_k>3eqk^G0000<MNUMnLSTZ~2g3aT diff --git a/SSL/src/CommonPictures/ДобавитьРодительский/Picture.png b/SSL/src/CommonPictures/ДобавитьРодительский/Picture.png index f6d86ef0378a5b37be668049411203bc1ca547e2..03304877c83b86fadbc31deb906912bbdd9d7fb8 100644 GIT binary patch delta 572 zcmV-C0>k~u1MLKmJb%Fe01m+cxRGn^0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-)@O{ETDY0005&Nkl<ZI8VKg-%Hw27{+b?N^AQMVq@J(6t$3OW1FlrGlR&q#I3@w z8Z)$-UMN<>8ELktHNV|xDqqclR=JXG8tWqZ0p&$R&{$XX^nX1ky(s(P)jsfW&U@bX zd3cWi0F^)Fl5mUcujo?Xh>OoA{lQTQdA}EiVIFvWu1Gxn4XJ|_tnJR@cV-#f&q=sG zJ6Y1tj^2#JVSVdaFd~@pVR%7@!@n7fEa?zT`#|1}3?t5t3LZ+W`73=GQu}RD6)ao} zG}9t}YoN_9gnv1rz{jW(2D{Qj=7_oEWmkTH#w<;!rYmuHlA-4F^D}zx9RET4*9x>- z#4IsCDzCp(O)Hu$V_@US%P^x&<u!$x&=sgfxuuwzg{ES3`s&a(Cx_myijuj<WtAWz zcW&`JY8#c9o#P;o$s{i#>mGbb3_w5Afc=wg7-t$Wo`0|+wCaXNt&kEEAs0X(AquU5 z)<yDGS^xZo8=<rt?7AJ{jWNXdd#_11#V=Gu9XCJ&`2i}C==q!X`i`}pUhSU2{BGj4 zxK5ty-Nu!GyL215FZ@5A)wH0rLWU<*ay+eW2C1{H!VtbvW9uKVb;^rBNu6yKMjJDP zAIVJw!Zj<@NNU<Bl<vXtD~9X!y=ePJ;qZpxoZv7#8N;WkI4%H1wOMdTl=(dX0000< KMNUMnLSTYs7Zk?; delta 407 zcmV;I0cig11jz%CJb%If01m<d6(~x80000QbVXQnQ*UN;cVTj608n9RZgehAMN}Ym zGcGkQF)>H;LN@>a0YynfK~y+TW1t$)O%YDei4*y+9U+<k6(S87<OwBMHi`asnkIqO z0F|Wv|4=3>Few#HFe(&IFewwBZQUyN-+6}QY#>hXTqXlI2!EtmHM|PD0j8Cr|Lyz5 z|JzRx|L;6g^1tUY>HnTfrT_b`mj!D8X;yQOhhYDl|LI+e{%<^V0b!VVtyqH38kq#I z<<hf#*U9`3*d{mIZ<B07;C4B<3)F4A{(~@xz3<40|G~-m|2OU2hw37bAwZ4)19u=a zA_JHKAOJEXqkp^+)qtQq@(DqE<^Kool_x3|kPRdYP;3B(7w7`4{WJfYd8Yig@Jah` z>6`u^#D_`|2V5hI{@?rd|Np)3Kn$coe5e$0Ag_ML|Faiv{olU(6j&pO50)SnRQE1L z(SXh;2+G?R{GYmH_y6h3_x+!_^1%Pus}KDL0FWS=<Pc0m(P;nx002ovPDHLkV1kqy By{7;G diff --git a/SSL/src/CommonPictures/ДосьеУвеличениеПоказателя/Picture.png b/SSL/src/CommonPictures/ДосьеУвеличениеПоказателя/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..9a7019f1d9ff0a00793047e13f430e18784b97a4 GIT binary patch literal 581 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9F5M?jcysy3fAP>{XE z)7O>#J{t#z66>C3E0A*b64!_l$I_CF{33>x>&|!pg?K<hE~&-IMVSR9nfZAP!kmiA zKyfaRxO09%Wl?5&MhU|j{xeoUQ9iI}QEDPcsX|F+ZYqQ6cYaQw3@1n?I6tkVJh3R1 zA-3Q@NI5sy@XX@moJ63~B8Ke;w)6vqIY7eUiA8ytdFc!Xq@T3|#lTJr&Mz%WPG$J| zzxg#xnR9+_Zfaf$!?!cj_5;P(Kw3jGOL9^fR=m5U&cMLP;OXKRQZXm_&;S4S%$g0I zDp#3TJiK_^eQLG##@9dkc~x?~k~9)-l#~iD6A|Ox{r+9rij;&ENdl|ItABmcoTamC z^1lE7=517MZUln453f!SznQ&>^T)z>4tMXWmrLG|l=x?C@WC)=$L_>q4<%1<Nla9J zcja>MG-I9rhJT%Be4gL<nf>|7o?t63s~2W}{(LshExxsX|9^=H2?>eBj+qawPk%qs z+iAb=zr*zlg<Bp!y4uaNUqZspz@VmOAwLh#e93cjtb=#0`|^MPe;ytlodVu{S^I7o z-s;b{|M&mBy|S{h&4ro&jW-u<+Eloy_UEV8>HXqI`F|X|zrTLw%$c4S8s4!hF*3Yu g=Whju4htwOW&~}}(f%ZM63A!pboFyt=akR{0MX6kq5uE@ literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ДосьеУвеличениеПоказателя/ДосьеУвеличениеПоказателя.mdo b/SSL/src/CommonPictures/ДосьеУвеличениеПоказателя/ДосьеУвеличениеПоказателя.mdo new file mode 100644 index 000000000..33b388871 --- /dev/null +++ b/SSL/src/CommonPictures/ДосьеУвеличениеПоказателя/ДосьеУвеличениеПоказателя.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="2782420a-65fe-4714-bc91-732c88ba5b14"> + <name>ДосьеУвеличениеПоказателя</name> + <synonym> + <key>ru</key> + <value>Досье: увеличение показателя</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ДосьеУменьшениеПоказателя/Picture.png b/SSL/src/CommonPictures/ДосьеУменьшениеПоказателя/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..90f18100f49ac0165bb78100e3ff32bf19b5861b GIT binary patch literal 545 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9F5M?jcysy3fAP>{XE z)7O>#J{t#zq3k(^$H%}zt`Q}Ur6n2pMGPy~o$&w)@st3CTvCgZi!uvJGV}8oggF(J zf#O^sap(Mk%A(Blj1q=5{Aa9yqI_V{qSQo?QiYPt+*AhB@BExV8BUN)aDG}zd16s2 zLu|o+kaBLY;hDwBIf+1}MGV^yZ0QFIbAW`y6N~aP^U@g(NIz=_im^lVmlh?bGJO5t z{2HdrIX^cyHLrx>+nH(mfnsbRWg(d*IjIaQ-d$1$ioEf3aSW-Lb9Ry;*C7W1*Yfgh z-ENCJIXn;i?(m#=Py5DAN&N@BTef^vnWVg8Zo+oAgQd=8IwGcqy}cGbh9CYn|2!Pv zqH<s4_o=_a4ff0b6dX9+$}mND%AzS3UK(81VOah&=uFy~ZJr-_G*q|TzI*i*-=45l z{OxzXZxvW^W%c@SU6*2;XY<0(G4v(-E>}6Nku1`{6mafijakzIG1sdLd+Y9VIL}?y zpE@OJ+SRVd<^DgtuB9+->-7?JDw$>GrhM<UsLYSR<42QTTUcMe%g<(Y+AE8-p>iL8 vQ*Y)em7gN38C-V8$v^+>)%oxK=erE^s?RbnR0#maH3NgEtDnm{r-UW|Pwdb0 literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ДосьеУменьшениеПоказателя/ДосьеУменьшениеПоказателя.mdo b/SSL/src/CommonPictures/ДосьеУменьшениеПоказателя/ДосьеУменьшениеПоказателя.mdo new file mode 100644 index 000000000..a4483d335 --- /dev/null +++ b/SSL/src/CommonPictures/ДосьеУменьшениеПоказателя/ДосьеУменьшениеПоказателя.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="3d170774-bd17-45a2-9d8a-4af3dbabeec4"> + <name>ДосьеУменьшениеПоказателя</name> + <synonym> + <key>ru</key> + <value>Досье: уменьшение показателя</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/Запустить1СБухфонТакси/Picture.png b/SSL/src/CommonPictures/Запустить1СБухфонТакси/Picture.png deleted file mode 100644 index 4e4cb51d0a5cce02c602f386a2334ba754628d94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6170 zcmV+#80F`QP)<h;3K|Lk000e1NJLTq005i-001ip1^@s6jd$UI00009a7bBm000id z000id0mpBsWB>pPPiaF#P*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-oy)XH-+^7Crag z^g>IBfRsybQWXdwQbLP>6p<z>Aqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uh<iVD~V z<RPMtgQJLw%KPDaqifc@_vX$1wbwr9tn;0-&j-K=43<bUQ8j=JsX`tR;Dg7+#^K~H zK!FM*Z~zbpvt%K2{UZSY_<lS*D<Z%Lz5oGu(+dayz)hRLFdT>f59&ghTmgWD0l;*T zI7<kC6aYYajzXpYKt=(8otP$50H6c_V9R4-;{Z@C0AMG7=F<Rxo%or10RUT+Ar%3j zkpLhQWr#!oXgdI`&sK^>09Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-<?i z0%4j!F2Z@488U%158(66005wo6%pWr^Zj_v4zAA5HjcIqUoGmt2LB>rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_<lS*MWK+n+1cgf z<k(8YLR(?VSAG6x!e78w{cQPuJpA|d;J)G{fihizM+Erb!p!tcr5w+a34~(Y=8s4G zw+sLL9n&JjNn*KJDiq^U5^;`1nvC-@r6P$!k}1U{(*I=Q-z@tBKHoI}uxdU5dyy@u zU1J0GOD7Ombim^G008p4Z^6_k2m^p<gW=D2|L;HjN1!DDfM!XOaR2~bL?kX$%CkSm z2mk;?pn)o|K^yeJ7%adB9Ki+L!3+FgHiSYX#KJ-lLJDMn9CBbOtb#%)hRv`YDqt_v zKpix|QD}yfa1JiQRk#j4a1Z)n2%f<xynzV>LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_Ifq<Ex{*7`05XF7hP+2Hl!3BQJ=6@fL%FCo z8iYoo3(#bAF`ADSpqtQgv>H8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ<AYmRsNLWl*PS{AOARHt#5!wki2?K;t z!Y3k=s7tgax)J%r7-BLphge7~Bi0g+6E6^Zh(p9TBoc{3GAFr^0!gu?RMHaCM$&Fl zBk3%un>0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 z<uv66WtcKSRim0x-Ke2d5jBrmLam{;Qm;{ms1r1GnmNsb7D-E`t)i9F8fX`2_i3-_ zbh;7Ul^#x)&{xvS=|||7=mYe33=M`AgU5(xC>fg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vF<Q0r40Q)j6=sE4X&sBct1q<&fbi3VB2Ov6t@q*0);U*o*SAPZv|vv@2aYYnT0 zb%8a+Cb7-ge0D0knEf5Qi#@8Tp*ce{N;6lpQuCB%KL_KOarm5cP6_8Ir<e17iry6O zDdH&`rZh~sF=bq9s+O0QSgS~@QL9Jmy*94xr=6y~MY~!1fet~(N+(<=M`w@D1)b+p z*;C!83a1uLJv#NSE~;y#8=<>IcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a<fJbF^|4I#xQ~n$Dc= zKYhjYmgz5NSkDm8*fZm{6U!;YX`NG>(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-k<Mujg;0Lz*3buG=3$G&ehepthlN*$KaOySSQ^nWmo<0M+(UEUMEXRQ zMBbZcF;6+KElM>iKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BK<z=<L*0kfKU@CX*zeqbYQT4(^U>T#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot<a{81DF0~rvGr5Xr~8u`lav1h z1DNytV>2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000d|Nkl<Zc-ripdvH_NoyR}c>q@dDTiC)6VFbh&8%Q8HrtxO7A(*byz$U{a>5y#8 zHX)(K!(;+GNr!BPZl`qE-Ii?AaiCkEq}e6VSu(Uh!#XtulQe*B2mxaQHsA-6A2OCK z$+Bd<_77XvmLI`3wzHYu?~G@3kIp&w-rxD2@9%N1#&J8!^Ju8@n1Kzz_W&~zBupHv zz<a>1cV4Wv#=ZKRoSAWPG$c${p-WUESH?*uk}zQi1tNHy0Xo}yh(xd`fDH-LRV0{H zl653ZIONJWkz3Bzo((c!ozAF~EF)o3(Z{iMGQcEPNN!ZZBr9Dn$4oNG6cVNq65%9B zgp(i<PJ#r9a1y?LP)ziMf?Q9g@i9!=xtO$BV*73P1?=AI)H%u|t4oBN7^3ByUuH?l z^8hqBD`|J%ro&?;%`lJb#3#v5e}zt;jk4SSArVg^+`W<Q+u6G?2x*+Wv5V5GeRKz0 z2x<j0rseQS!+#P8gfMBcD418oQ<*>GQp*uao3=?SAQ5ith?4DBpMH;aR}<g7|0NzY zKTU#=CiZdpo4L?>kdJQtkjBn$vohz0w0o>vbnKH>K_cAfu_WbrOxi5oDSL)cFw9%u zI)R|j59wzR(pWZg6WPWm`LMQ#b4@c?p1FZbpB^DB+_~o)F=?|<%VW>$3%Rj-uaBt8 z(+9+uZQkqnL+-mOxj{%9aZU+SLbx@YYub<7>*V!s{(e}p4MeJb9;@$rmk(=;n3w!G zkIY!l$>yJ;P~2O>ylmzsGW5AIZH=AhIZ(A8rAjWgW$1Hx*!=R4z5q?G^PIKqp~-!I z*bP%Sdn<xmPwkykoNL)5v1h8wBALd=FbHY<x#m4qE_(H@WQ!s_A)8crK4+VElQ(NM zJ>JQAQ>CXTgwx@VA?0(~yM`qjK!zcg=dyS4X!>hIzDrQ0)9Sf~l6bnkL0nG1#Ga{C zxJ=_?JeabER?js;p)e1oKRu@L1zAPxz3@Cw%=r<8_q|Sy`w;EE+A&{8lsspxd-z{R zF|E!<);zSGOw-bseucBQvLJaC03BUcN@|L!vYwzj;6kG`u+UsUVa`UT#hb}9zd$e; z=1ki!`_<2Vo;2-)T(zI1%2ql={i1UZhRfeflly$k_ZM0Yitan#{K~N7q9r6ju4hT= z8nOLK`!QVp=9s<%H__V_OGmVoK}cgs${Mj;W%pj^hU0XMqAy5Zg`qF@K4aZ2wnwki z<!|On`?0AboJpI-)0saLFX}J1{)>6350Cl8)8fqpy9L_3*U6i;nmkt1*m<6#H{Q5w zEH&8J1Mz9&uTcr|A*75hc%8kRgOyu&V!=jMFMboXLXSV>rnaMu{g>AB%={gsCuEav z`3_g@CvikBi}RGX?!o2s6OKfPk5|U1Uw-=V#Hn{wQeJ<U=jN>>K}ZL{?+a0B--{*T zA#t3u+s4_({X8-6_1^e1=%%)H6-#EX5&P6TDk*6#Mype@DD^4kC$D6>HVa`u?7Crb zDeb;ms@wk<LyUa$D?_d^L!Zl%l;^qBdX&<}p8zmFd8J6+k}Jg+5{2IJ1FoUG{xI>n z@x9VECYL&}{2}f{*KLvwGsboD1R;&a&PwrkW<oCCvivLIaAe#&sLRtsI21enVe`wP zvK_44!n#M^<)N9YQTK%af?Ur+(<+`_u!EyF-oW9t0`REi`}lpKSd~Z=NHnTr;=(UO zFc`+$72vF`Kj!;J#tQ_!0`rqsifyN^|CT@3?4#b%YY(+T&)?2?O<d^ifQ#Lyi}3qH zteEpp6wcmChCVljYycXifed{vg|oL(knxu2jRumfqsxlbStA}lkn;B|HoiDiojd&_ z-p`c8a0`-G4Y@&^vj&-L{O{BG0-l)TIZ1h_{FYIVf4gESn-67EXD=W2d!yFezhi5P zd1Apv(hS+X$JNE`EL%%Sbuj>GhHP?8FL9=i9GRx2V~#INs*BltC|ms7S+-Vmg-)MM zBt=frN-~X)iDas%Ka5VVqO|EJ_yWBOpJ!Pu&U>)pP5dD@>8aDj;(GLaQSw-wH5{ni zLU+Igz@pTr5CWDMvQ^X{X4~-s-Z}LQ|MU4j_bZ^~AEqQOm5t4v&K<U0E}z&(vNIEM z3G{?U-G7F~fS?{;ag3UD@pF~+1PjwwhznIxT})fg7hJfrk5e~))w`)umvf<^r2n4P zbH}8(d6w0@TJYa&D%{VyWj`l>;p3Q6v;drI?pL{|AJ`&p-qW@3;}5yf>Xf+r%^bh^ z<Cr-w+e*1?E5(?kAyqdoroE)Pm_VefkGO6w+KzCk<!FECqRNbU#Q6I!wxiW4Nj2+e z3jT=}&oyxqq^K9iZsupNvN^Au&3WZtP0}#Xl};u!N<DsGXw+_NwCE1FL^pcFUXCF_ z5Mz`&&vCd3eqRu0r-RR|yK#5=>F`>S%fcfPdbrqhT72IR-}Jp+VgIG|wE8b{rTrM+ zNPC$?b$ZO0iiTcwi+YM+AAttCNsU&4Mmu!5G+G4%-`JMP;!vt&UuuK&)P64&i1d4y zNH{_y{QpSdMk;tVI4j3>@{!zNhu3;faoos6Hi!wyeWs-dYDG*oS>C#bGuGYc^eWEU zc5}wMo1mhdvAlv`QGb}7Wox-SAd}6|JR-(|163~CzoW~Fwl4@5<a!EcZ;h=8n3j@n z`L0-?j^h6G6%@=Z5)0lMrJfa8MKLbd=Da#&Lqv%^xcJ>2a1RL&qJLkB!d+-R7;`fK z>4`bibRNPNbc^aS8blXFE5wfJ=(18}J%QRVF>cz?Z4*B)G#60YQN}{kDhlUsM7XKI z-t)yEA3WgmC~jwPk+{Qa#n$~ft-eLv&kB*~-Q58MwVXOf8HKa^`=73RAFWO)7QUCw z+$4IE%eGSP?+XD6vNmwDybQmpos$i3^SEU*0L$kViF26~b1*07#E{wQtfBVKDdr|E z1K`E{V#-_h;t95ppZ<#I)(0mNQNkG#dObkl{EbsjIG4YfkLrHR<CaZml!o3NqfIB! z9^!_xY{XjBaHz7KK%-T}6k$8Mtn53pkwC<QQ5!!og!5Wybe(6WA(z6OjqJa)o+KfY zG($Ga=KSEE=imNGZVWLC=WiUcICbsiqGAuUQJuXUtFwlbw0JR_jDFu8aB;BWP23MO z^Eb1<i$-Z+W!As&VO<fQw;iPEPBl5xR$`1dV@}K#*Q3r}PItgXmF)x-^@q{wl$>qZ zLxv$2wNj5cF^AQOKOb@*fB0fM3WbcgLHj%!a(rb^8m>D2Nb%WK{Nd7eF561E&$N_a zD9jn#ZZW&M8#=nIRMa0vtx@6&xw+DEf&-OX*mk^tR?jt(OqzSjd<WxPU)DJ--pn)e zcW|Wc4L-g3J{?`wd!F0g+V!RJQb~0&74?S^gx<ZqB&ENI`*C$Kf?9!6B_HBSqgm<s zJNxhj`@?|whUWli4_%_PX&djIUq`d+nmBG}*;+oh@ETQZM=>U8n3kl$?!C@|E8nNX zYaMni_I<XI%eGPyjOs~`&*NVGO-{tJP&ej*;cx`6C&04{cW~tLzoANSve>kS<+C>5 zb?nZvwbVN*Nj2;G7R`%H25OCR+y%vGwY{Xen0aXrGt2l8b@p=ho_h&Xik3&yUn9@_ zf~b0*xBZTbO&`;8r;%Xr-Xi5076X1?Xjt;eWO3;9su-ncv3kUFno{D$gd`k}&|>w7 zYM5lwqR}dbv?m(X=nSes#P{O&1;y(b4uPH!LXU+6Asw|!kE6><oxL1|LPmm7EhZ%+ z&2_t>x7;GA6=LQ+7Bp0O#{XzbCW}L7P|@W53xAhgL}}ADF4_;0BxJHE?WqyR9jM$w zoxL1WO25k-&&7`wpV)puFc>D^@*Rv?Gs|af9@XZU6y)*sL|%XGbIM%mU|eZG#+>A( z#7BA~;S;yF@zK?P7mJSrrF&=DS}N)fV@%SFy38<<IMen^_EoNn$si?+9Z{v5QkOaq z8TwpS%zTUARsR5Qq!j><s|S;65s`3&?tmMsvj&AiHfdxtX|wRTl(ae<Nj4@SkHq8Z za?<Xr9ipIqUkH!ek2!vc#GY}Mvqo~;ljc$fmj>z_W&Go!4>;NIHn&`-!QiHw8q}na zDx?wAG){OScW{j`5Dp>Nfh*EUBpe|uK%!=7mL;g=2x=`pt`2!tDq$3xJ7xS8gbDi* z%_p{Bpooj-$;=-C(CKfEdByztol_jU`NpIgVmyTYDqQ<tGbZ#Q=t=8O#rQ2@&|@%J zSj!!|SF-qDIVSvfsaM^HsQT<E7Tu%FNy@_*Z>Bro;^XRf35O+vON5(@Nwt2Of`8)r zt>gIpK|;X@G8rTq1<B$P;U>vf%i@UFjlYm9L5krdNRS98;p;~@dng!@EFoc1(Z?~n z4A|>&1SE?{m{fE*0|4*IfL)z!J-FHfNJ=MRGL+5L9>Ce!1F%bBS*UAlsPfEpwD>nT sTKq2nsgju_Odwi-59s|*G`Ie50KHLGaiO?RwEzGB07*qoM6N<$f>|B;<^TWy diff --git a/SSL/src/CommonPictures/Запустить1СБухфонТакси/Запустить1СБухфонТакси.mdo b/SSL/src/CommonPictures/Запустить1СБухфонТакси/Запустить1СБухфонТакси.mdo deleted file mode 100644 index 188bbd7d6..000000000 --- a/SSL/src/CommonPictures/Запустить1СБухфонТакси/Запустить1СБухфонТакси.mdo +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="9fc7e672-6c80-418a-a973-937a4a172a2b"> - <name>Запустить1СБухфонТакси</name> - <synonym> - <key>ru</key> - <value>Запустить 1С-Бухфон Такси</value> - </synonym> -</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ИсторияИзменений/Picture.png b/SSL/src/CommonPictures/ИсторияИзменений/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..1313b17fddd0473ea10fc379611791b3340958ff GIT binary patch literal 1576 zcmbVMdrT8|96ux$qA*}Cqqql0&4!E6d-Xw2N-ZtbW`G2ll7#`+_J9lYuDd&=fXZvS zVcaHa1cy=M+-9N<-9w!^%GL>!IdQr;oHzvMBpDGE2SZA`UxB*)Vf<s4yZb%v`}ur7 z-^cG7voe>5&s#VTf}n8o3S%}HBmGaP1iWKMeH0jC#I#&-6;~uyP&^IkZJdRM&33Ao z&Za3_<(uc|WC#i_VsdiD+>CV6%Gu?V-$w4VI{+Gjl66i8Wi6#e*g_XGtX4L1+9iV- zn^v|)nSo|F40H*zqKc<iRb}Q_t4ggJn@pDiCp$?%V5db2cG}BWfpltR)4U{@`?nDp zJZ&PDYGpH`ax=1E1IN>_QcfgVQ4E7sDmkW5s#I74jH4Kipx{;|VhU2JB5^f5d&z(| z-d03r8%?vmz)CAC5k&`yAQcrA@(M!E@x=(H(P;b}IGzYB5`{`uq@0PYuqeP_qy;O_ zI7EhHVLu~f;mSp=3@Dum!S2Y&ctp$!vxx#JL!6WY!Q?1nxBKIowid)}`d=B3wH9(J z9W;_n3tTyG1@$Oe6aa(VJ=u}p5U3$n@(d^nRc7R@<#w7C%|@*Ze39E28>vQ7O{$X6 z69z(&ro=G4N<pNm6_^3XH7b({4{$sVODOc1!kDC1s1=|RX-Yk+1|TD@SDTcCLZuF1 z&8#3&td$P<Wq{vVtm=ta(!kS{$niNGR~G1itP)P-gc8mH8&;{{#cLSW##IQf_{%dB zt&!%LwY1H|b9Q(-za;Y*|3Ib^H=t_5q)_|g)~GRqhQO1QD4K?%D2RIoYx_SrLx32> z-yHvGmcSP1K>zen>x0Fk!$Y&+#PHx~$VaFN2%3{?HtKVnzgj##pDy^N+Qz!nj-i5- zm^Aq8FYk?vZEqfpO|H4=y?;HP-P&?8(ic6~+;qJgA8Z^|#d<=YzIL%Gcy&+xVNLHh zy;av5U#<3fCb|abkGl3HBzE477;-ONnSXzntkgu79DTd(NYjshxNl#eoN;|u({Bvj zT3St?eJkk{zerlPrCfUIxg|0ADK*`N2M(RfYJK)wIPQE;<=Dfi54~eAuaioWt0yV1 ztHyVgXm~@q!B=ei``#qtKG9ZC_aJsto6C!xne^_B>+EV8=;?PokMyt4tED=oin%=f z1@HW49{zP(=N@rw?VT8n{?6NV_hyf7Q-sb(B(?sDCs*C;3}>PE=%n4!+K>4Lk7vQb z$OAz|9iPX)FTK-uvit7D<>F1;vgXArHe+Y%CGy_dk^c4zb1wO6d=o!pEiHY)J$NJ} zW<!wS&baQKppfH-sa(z1tpn#8PKVXhGLju-ExV$QMQom%wXP)S*q1x^D+~t@Dc$3) zNMy%20xf(HF&MtDE+KtOSi~NeB{J&9RQ>SAf@P#Jed|aj+p;7W30cy+Q@1R<&=Z|X z;5Zuk8G#RL%XjHb=}vVO+&+YCxiT;?c;^0?d$}ZEB{^#M?b|k-kRG<JFCnaS?TeN| zi_H@!`@Xq0YW`2<m+PqWH!xwUz3qr_1@HT6eQVvVu6W7u{=G4KQciYVbUC!{o6%g& z(82Djtajbl0$$po&zpMi$y1%LUn+3<^1hh-nZA7@w%yUNTQ2Jue{FTDGdez`dhoaH k&AR=+Zw%^r7YdR<`5!Ep7`>bl<^Ok^(=v^prWV%!1CqmF6aWAK literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ДобавитьВложенный/ДобавитьВложенный.mdo b/SSL/src/CommonPictures/ИсторияИзменений/ИсторияИзменений.mdo similarity index 51% rename from SSL/src/CommonPictures/ДобавитьВложенный/ДобавитьВложенный.mdo rename to SSL/src/CommonPictures/ИсторияИзменений/ИсторияИзменений.mdo index bfc7571ea..714dffb49 100644 --- a/SSL/src/CommonPictures/ДобавитьВложенный/ДобавитьВложенный.mdo +++ b/SSL/src/CommonPictures/ИсторияИзменений/ИсторияИзменений.mdo @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> -<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="6338aed6-ee7a-48e8-afc3-9d0bf5166399"> - <name>ДобавитьВложенный</name> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="691f9902-6b95-4579-a3d9-3b2b5b548776"> + <name>ИсторияИзменений</name> <synonym> <key>ru</key> - <value>Добавить вложенный</value> + <value>История изменений</value> </synonym> </mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/Консультант1СБухфон/Picture.png b/SSL/src/CommonPictures/Консультант1СБухфон/Picture.png deleted file mode 100644 index d9bc99990c4f89f8bb2a12bc8bda57a7a850a59f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142743 zcmXVXby$<{`}XKg=@3Q;LsFE^Q6mHy-6bV0-Q7qz=}x6{NOwz1NFxox=!U&~e&6?x z9nbbGj{CmuE6(e@&P9JvRUp8n!36*S1d0$@C;)(>{QOYF#(cg*8c6i*`GVsN(Q^d= z@Lv4)KmlZAQ2_wBYPK>mA3oSPxjDJoI5{&a%E&M}e|EC6wYLNSycV-HtTi?EDa5Z= zFTl!CK`><}C^<GG6dW5wmh_4Ph(oLt1<e0LuHH=|Cx=culoy2-A0HG)uFi=cgS&vW z1uTdUEsTm8x!>?Dw3}<Y-WhvpoR`?GIM1%1!0N)rPl52OzYD_u0e(rc9y-`Ju(8E0 z6^zT`3?Rm?{|Iz_WJUqp1c-^fX6nM~0HAoy;9�-e-34(nTVP4#4S#C_!N;U2aK2 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 diff --git a/SSL/src/CommonPictures/Логотип1СБухфон/Picture.png b/SSL/src/CommonPictures/Логотип1СБухфон/Picture.png deleted file mode 100644 index 7caee7f946a2dbc80b57510ddc276acc5142e4b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6081 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%0DiWN zd&D2m76RlM)>p3cb)iiyGtHoqtlCrqpfh&^=C6;8(j(46UW(DVe(h_={jNHGUWN~h zPbb*sR(`a{u9O9pH$Ec-DCAKwR8~{MYOK%-wak35y$iC7$=um4G4oKk@8UT4pbP3z zTtc6YtXhGCecdG}0PsGK%0=i++`71Bt)(VMW_(C4W;|=!QC}}x%!4ZYuOWG!#GL9= z(7i0R>w<@42<k8lZF*7sAivO+t8BRL)~taG(neiP(L8Z?#H>8<gYi4_Hn%GkE(acX zw#Rljc1`}SiE>*b&+>PDSc~7GT|(>O%WqJf7jk2izB|+8&8Duf1#n9-8dtuJVm{NS z$REHshU0Lb+Lnf1l51FJha0BynH#0QBaey3;1wGTXki{RRiZ7$-V&zEI%v?(H!bIH z6@GEr!mS8#d4x$*MKbSF|7j=Cb|CQu?N`Y<+<B<1`xfuvRHt=KD5u?!jdE3>A`*RK zklYe)1pv7&?V{ASgh?7+#R5pVMvPzmactwg?Ae4Fm41G3Nc=~+l=SGzEdwv<u<<ol zRB$n3*p;htEI?Hd7$lq=xog)I{l)3)s9ZY9p=>w=m!Sv2{9_PST}r`s&((W`{O-T0 z1mZi5Rd~f?z$?&q-|+bZ@Pgdi8<jZknb+A1k?`<{q!lBN54P#Yaa}?%#nEoTzl3Jf zhY-v$(i-Yw1n=tZFl!+N^t>gVU$X^&|G!gq-MT6fQ@CdAJ9rxwKJVqYI2ju3D0-wY z{I0<j+VqxUON!wd4(mwEC_M!KI=HS-dqb3G4%~ni^rYm@eFm?vVsZQyeV7ynCoJml zxMroF8>Kge`cxZ_0a67+9pLoQl(3!{36Pb>=}DBFawkoX;jG}^0I>M8Jjx92f`0>} z^sR#&GUV664dA|^skI9T{sqA^Pr`}NE`M>+mutU{mDcd!Af0K+a3<(M@vt)i+jV2q zD=WJ8zUpekB#7CLdnY$cvY&H~BT*fzYXE;CPpZAc+ZA0+kkH>Rke`eEi)y;DNMTE) z2eOBCx$5b;xrCgOyK~xpj*Fy4s$ndgvNt52<T7U(yqCJ7xC_S>tSfgs1Fv=#`_4)F z9_xxWAN1yDIz}|Xes{~)Bo=yuV<wKeeB#IQ>PMY-jrNr%1-r>=$R!tYlT-)eTty-- zcPB%2V0xPZz#-qLO%muaL9t%W&S(?d^^L5KN?6p{b+SF6SWL7-?q8vslDUGnfa=gw z331fb#y9ps<T2p5u8e0dz`u+&I>o^wFXRh&=?)xN<n_a5ef+-1KAPjY-FHh`qp~y) zZF)zwvA5*4jVrW?Eu52@T2udj32l1oLsrboB>>M<29Ip^gj4mCQM9qF=z~)nOqvhZ z@Hpa9K~$5_reFGaMg10^j@;4KC_Qud;Q<-b9rE3ZY=`teCxUV*(@KNvaHl6j{q=Cg z)xY!S`Y7wrrgyZhzi$i~-|Y};E2cR$LS73jqEDHOV`|e+<ngs8eUvc1x9!lblMBa+ z_f)Zxz6&7M1RPm`M#{<^GYxvyhx^e40>SyYgxi&Yo3;=juWj_NQF>*R9?8)hf#7`5 zn*x5GX$t`gw{a9Q+<%rNuRtL9I7oU`ag<0agMWcEMW3SkI+yVk2tE{smwjsyZKwL& ziXspQ&IFfzY!q#)c9~lu5D0{@_DWjC+>%&^N+1wi_Pv30@N`IuYb~y#Kybb|nQOi% z>2U&JLg&~9cuR~^GL!;=5LVTtqqg*O)$s?rFV$6c6X{q-Q20;fp9KQJX~SN;zP?H~ z2n2$Yz@>D7Kp+sp5(oqWAuNGFAcQ3l2n0e{0)ar#4gNm>R*24&$SR1u00000NkvXX Hu0mjfTr7>? diff --git a/SSL/src/CommonPictures/ПапкаОблачногоСервиса/Picture.png b/SSL/src/CommonPictures/ПапкаОблачногоСервиса/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..2e8aa1e4a4e4c6c01a9dd145021e2b3291a3974e GIT binary patch literal 15546 zcmeI3Yg7|w8pj6&K~NX#je}G}l&*4{NeBc&2oVB8Y%oF;6s&|~fLW4E%!LGw%cWAS z^@dt62;NX!Wf%3R$CV;px>(mmY`rY9Vv#E9inhqYwxU*cCgJje;Iw=CadJ*F5AXZ` zKhHbA_riRcwbIym<DA@_AP5>46D^7(t_b;c98LTt*mkcWE@QOOOY{)rJdym`K)Xs^ zAt-1TCQCFVN<QQ%aJ8RYiKn7|X0?`3Ll8gAtd%P=Q3E3tO~*8$%=YT@Oa`V5WhMkj z5Q#Pd&A_5_bZC4|tW1%UsR&jw!vs!zGml81Mh$X?S*_COdFD{2B`=SN$!3_zut*G< zq0G5tK}MoP%80;qC?mix&{u&3av9uUKUM&j%i;Pk*a#~CM*Lxa#Fy>Q;~+c^o6-AW z3Y>_DuT!S+;zUus<%qvRnHdIymIuQolgZEI?}zKsVODT(FpRKaHrtm_`0BGY2D#Z+ zqn~L_(w9es>J>UnYrt>~gUl;W#f^qgCX+1G|LMIiwYI;IM&HYhpa`4gTA1aBz{8o8 zihhsQs8d;nrc}VF3RR;TgP!oQhV^MPa09N-z(*+A-#ubsVooHI{@TNiSFIklwB8Vz zMIh)!I;>MK%hsZB9ID5SIt3b;Mcm5F;qKmmr43BZpiE@Xh+{|1*a$YV$7-`I1?vp) ziF@Tm=uo)<*U4~PC9tkCX&*vHM1*BkF=i)V8YOPh&*8&EEd%pCkPQ{d4XA)zkG@E- zFT#?s*gTd$F97jI{CNlhB(W-o<dEP>EG>Ju92_3P0&@V$p*e{Cqm&!uzbFf+1@b5r zyfj>=mKy|^TAq%=T1`419%uxV{i})>fva#GF)UQz&xeO=23(ev#*5MD4RVbFjS&fm z20si_^3cH4V5JfX@@4r4uzclQ4%=6rs^t2z(KLlJh!uozg18ol5(#L3E42t$7|Gqz zn_BrRQv>$5QZLY9#7QSt0UC1jzqZ6MY2GRojp>Q?nGLL4V)a_ivUqgG;MTql6=pe; zv~ryuC3jpXvv14wA7cGy6zQ?-T%KG(o@N3Cxgk&`A0E^?Fsy!OuMPWuC(xQ7u#a5B zl!0pAwV|x3EUJ-{=<zgzNv=cZrW0%8m+W<G*1@)+>G?2u`m3<P6Jc!~JU@La_U-xP zlZP6QSPR6s<d!*L@!_}H1}a<iiR7HBj21nYjSwH0MgI0$!S12fCGWO^-9xPd&P5u` zAYk`a8`2E8$dlK4EW{HJ38)}2AizI>4-ah~>X2e)RFx>gi2bW4S0yK?*E6(ZSmTnB zj6g@P(K=PYzjMn>T3d;S1>!jc?tf4jJjwkV;WrKj?&vp845p)tfHWv$8W$xZP(b4X zX;8*AE=ok8fW`&Vpp0o;l!!n9jSHkf8Pm8Z5rG047f6FLrg2ds0tGZKkOpN;<Dx_a z3TRv)4a%6tMTrO$(6~SvlrfEq5)mk%ae*`_V;UDFB2Yl%0%=gjG%iX+pn%2&(x8lK zT$G4F0gVf!K^fDyC=r1I8W%`|GNy4+A_4_8E|3OgOyi<N1PW+eAPvfx#zlz;6wtUp z8k8}OixLqipmBjTC}SEIB_dEj;{s_=#xyQUM4*7i1=665X<U?uKmm;lq(K?K6PMG# ztAD75c;C-Nyx5mqR;?sn3S=mv<0KH2;|W3et01Vmhqyk0AS3a%VOt6W@peMcRD8?w zOHmMH=Mp2DD>L7DwsXE}TBPgcJjJoj6B9#L+~*v-vmw5$HBRIyGkz!a*v4GAFh>}E zf6~F`GkC&TyVUB^?+ROluof!JnbWra_fv{0PBRMkMXGPkl0>hHDBZEuoW6Qg%)+F{ z4};du>^}L`otw|zq`kTK`h0g`!>$^4n;*?G$P1dB?<BNOnJ@nf-_b)XsCsC=TyWq* zywIU&)Eg+**01_>c6DP_!q`N<dA3LXL-R4)_EWRItm$~<IPSVzxJN-lQOQrmSFf(< zdE-;n{W`lvayxKMo$UqPS+AC-*N*;s-H{(YXlon0*n81>Y0>_RSneyM%Encz?p(Lb z{<!<sP;N}v^}Bmxxy<sVrr64Ws?z&Ew9NWx^-289>F$m+8*y>%)SC_^ui}r)j;nBh zmt;b>WX?C91a&-mK5zSj_nV&0U)O9?*I_I4E^@eb@QVjCy4+Qw$qT>rDlfkBs453F zyM0=9`Uv-nQBf1(g6+pbYYOa&78tn=S)S9Lm-~o63l~QCh$=#w5pziA^yiDOn23Sf zJ<m>E{`1<_f}ZzoA-0ZoPM@^DN~)V#Ic9W3^0}@*{q9!v=_=`o_m8{7PRZ@x-@D!1 zFkx=Y4C#w=FY`QIj+a+&7K&r$XV&g?-5WYSd3O24yxTWRGH|SNu6S+KK28(Dk<`oc z)4AW*W){aK&FhLznrBxzx#^Ggl@)AgsdzNBvT^fzkH1!QjEhn?LP4tFX739G)I2}0 zwL2D+n3_Tktl9FUapUB4G4|;3%C9b`?JQZ6s>$jwT`;OUU$5TXs5|@h(xp!wcw0Bf z5}Z#pgq(P}sg+ZZl3yNKU$Z~Yb=s9&=hBZlK3%lHqprj6S(r=Mzl#6BINy4p>u<Fo zQ`|n^;<!KN(6lk1tdEZ{v72?qq{Q&;4{Dm5|M>z-@cIn?dH3@F2GqwQf$X}!x3o4L zRiEqGS$J*FD-TEIUjCM`4uw8{-n4w75OKYKXVa?aBZ|k@rq>JFM!}aRZq^D9tND-D z&2TGde|0LW7W&9rsf24MPWU|T>Eg}Rf#1~bYJ>K8w~ks<QLzJNpm*VAi?dF+2t}D2 z%FdS5h`sYG!XeYavIU1juSZ{*^pAq}^g~mm;*(`%x@lre7d%E=<8mP(uV<U5OuetJ zYbxjC57)=qtgPC#dD-22H+5x!@A-tyknXx<U*EE!!~3XOP;;j|H>FE6It-ScSh+FY zbF$busy%J`fATLw$xZH^oo$WJE5}Tk3QZ7t)nq>M+!p10@y3>v7mHVy+xMWi1M#Ct zu}K?mJFL9%&7|B98r&};c1!2D9RK#q8+Cc%c13Yp>#wr66<3cgU7_x5JLHzM{lRX# zJq|DP8^_n>x}C8})~P#7j3N4MKjzr)vz6K$hREGm?b0(ITCTOz`)}=#l5ZEsM8=Aa IhNpb|KLA#gPXGV_ literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ПапкаОблачногоСервиса/ПапкаОблачногоСервиса.mdo b/SSL/src/CommonPictures/ПапкаОблачногоСервиса/ПапкаОблачногоСервиса.mdo new file mode 100644 index 000000000..3204dc8d4 --- /dev/null +++ b/SSL/src/CommonPictures/ПапкаОблачногоСервиса/ПапкаОблачногоСервиса.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="14583452-805e-423d-be9a-e04683c7c46f"> + <name>ПапкаОблачногоСервиса</name> + <synonym> + <key>ru</key> + <value>Папка облачного сервиса</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/Папки/Picture.png b/SSL/src/CommonPictures/Папки/Picture.png index a217e192f11c849a4d5f2375fbe120c956dd27c4..046c0c5470fd0d562983ec05740e786b0f74d8a3 100644 GIT binary patch literal 1025 zcmV+c1pfPpP)<h;3K|Lk000e1NJLTq001xm000mO1^@s6P_F#3000BXNkl<ZNQuRk zO-x)>6vuz>F*BWUpwMZdFtmJ{@{x=ZOw=|;iY(M>I<aMe4GqcDg}Y{qwKZ{XVhn6t z;G$G3##$T6XiS@!xF8lo{7C5s(Ub~}1u3l-%XB{8ymya_nL&m!QzDrDle4(@od0>} zf6u*nM-veqBs5K16JKAaIvyAt0Ovp5wI6NM5#4RJEP6!ndbGFepZn(B`z2W`KNpNp z_#L1py*x3{7d(1TkcjZZsi(hGiEE<blcEw6q7oBgM=#6Vg*VmcM=zcb5%Squ_<4#S z={^3FoEe>wGov%od;DiHLg91E;~W5D`gY=QBKCBar)c|bZS!AxaJc`On*~lMPNys5 z9dkMVJl*p0NdJ29mlR!^KJnd+&HkN%KqVQ8fq);SWS0>NzcJ7kd@oBtA{IsL7<Tej zc6Zbr>RQ`2*0r`}?ay7C?D+B9&!h$V*Mpxf-Va=Sq@~(dT2{m+pBu|oka^<*4NVn{ zU%LJ(kS)NnER?l?6`N)`;$~#=6f(I?H3!0@nV8&sowylI^HolM8t=D0Uhk`}E<w{Y zluB2<1O<))fLbFI4h-}KFD?pDwuM-Cv17CM2*{{ksz4=fXSs9nokeZv`c`yT>gvR9 z4&o{8rnELmQ?kLEi8DgsWA!`AU#hD1VT*zsZ$s=PEsxc>Ca=z2Fhb$Mfxh6u)Els^ zl$o)W1uR!!nadKd#Mf}RDw*vzkcD|F!e8Lod;pZ<*8WaP{C*D~c436VuQxPrGa8#K zFq77O{|lAdebm&I@yq3zZX*=_RR_>@9Zd?*)P@}9PFre?IJ1(j%y$7g9xH+E-N>bV z2LPR^t{!Y}G12SOnMw~=)s_-ZBvA@%Tk@L{;_)Qa^<@BuQXNnNxPjul>i<P{r*iWP zC_Z_L*?pZ9x?D{493)~UnU9+UJ{e4=gUUgzc;{DvEhzz_5FBWZEvsT_dK8wlIu}2F zV;FaN2Mt4EzI%Sp;{FriA)=ALGt2RXg=DkaQ?Tl>LPRhV3Sc7L0X25}#+459?wwU7 zh(w}jx_*8!VGe%Tj=fk(o8f0)U_O@WT3Lygv+a9mKRXmjhaH)^I{Q^!LnXRqr$pq@ zk?OY2)NgYDM>P>){PdH?)QqP~L|SrFmq63Ts{H23K<Bw*Ku&(sQ?Gfy?|SPYSK$T# zI==oqIn=(_2@r{z9Qu7)(=-hu6n+Ib4ER^|efR_D9q0>wkat8_59{AnInrNKB}?}P vAFh$!@~v0aWfK0s1$^9CSNLCMq1ECam^AbfXuPb>00000NkvXXu0mjf1ZU@V literal 731 zcmV<10wn#3P)<h;3K|Lk000e1NJLTq001BW000mO1^@s6cL04^0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!eMv+?RCwCNRZUM5K^T5!+byjHT0}l9 zLJ*C}!PsyydJt+4DjH0H0}>30f54l@#9!dSn@NwT^#e3En3xbvJTwMl)Px#6VFE;( z@TF8JyX}6=IJ^CT)fSpGhDn~;yz|a8`|L9_?-IrscC!iC<z_d!>Bpz~L27OYPQ{<k zaA({ua_i8!*SB|Cq%6L%1s}#wzo6-PMpLtlroWlcrLS!1^L6_E-o^XIob6B!-*kW} zdr!hHg6VOKH&xBur1qC^DH=MnY!gL@q9d1$ImDmO{FkRf<?>AdX<6cA8M?Y+b%(B@ zt+T6|!!o`!KO6k`W{h#aL*?>K0h*?PYU|MC_&-~eQj*Bs6Ow%@bcwHy<GDG-`2y!l zSw1buHw92#1JgF3%L_#gid6wkuUgW@_+nKT1fc<fBV)b19EPiI7<C6#bg1p_yZ~k_ zU_g;kk^)V!W()EO?2aZZ3||FXPhkJVbGT}UxLS&p{sDM>J{Lv@Gj%`^1Q2Eep%q2o z%pwzmiB_Wv@*U<DxU@8McQwBB4Vm%W;0TXBkbcC;rUTUYLMMl(#PT8kb=ZpWZSXu9 z$3ou#D)~0dja)%eQISX~IQB5CZVF%&#*HNQeI>n~2omqemReGnpIVH<*%(B7WCCx` z_vFV<Ohh0he`AXSG`6}p6I3?VN)nJvN?e36z3D(<e*KYNXsV9r*$YU>8Q1E)ZcGMx z5SWZ4^8$R$c=YMjUCJwyzcdR-ti`8{<-%h84tU+~25;_hR92XA@a0oA66iG#&}e6O z&9(1wV5c%$E<y*Irb4YPZ0lI~a4Wmh*f3-MiT}5N2S?i~x6A(#U;tvIQi;YTY%~A> N002ovPDHLkV1lFlPCftt diff --git a/SSL/src/CommonPictures/Сервис1СКонтрагент/Picture.png b/SSL/src/CommonPictures/Сервис1СКонтрагент/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..3775b34d5d3c5ee849243e61509cfbe37a89d802 GIT binary patch literal 1189 zcmV;W1X}xvP)<h;3K|Lk000e1NJLTq002Y)002V>0ssI2s&q7600001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1UgAXK~!i%?OMHh zBOwgT)8?J_o#<V;a_7#SyE}mvtq_6*1c}e*d?}L6I@U0w(a-wJeY>~${(2iE0OSMa zRh9W+=Kp18a}K}PAHf=#ZSH=*KcCM(*%w^DTrP{SEdis#5V#(X$8<<bz&Ph1*4ym{ zKkOO<nK=iXz;%uah?)p#4VZd*Y#tS{2S3ch^BZ6gYRD^OX%?OZV936Lv=XJ|j5&vR zrjRoUOo*FKIyW(5z$cP$>UqX(1GBm7_1fZHIlLX!)Z#M=hAEx`1*ZaRQdgup=Kz2} z{u*u;wGK%3iqT%<1D~8LUq)w8WMani(2hZbn?jmWLr1}!9we&k)Xg?uUS}EfY%rUW z7&56cGP&x;sh&1zcG{XEs%<YgmYQQ`Cd+2<D_KmU<U}EokRl%65S+?byTJrTm{OC^ zhD729o#-my@gRQ`%$5Yy1S5@)AB1<sq3Fe{`k6_~WzAA~lcqX2JCP}PI>E5FFSfcN zi^SZ5hNiSI%$n_ZI>11kCX>~5#Ud;9nn%aLbVVs-@#UT+VBI>iR?W+gkC~Zwi@ZlX z!#;+|)65L{Os;;06QZf_D>%Kmj{zQw*qXr<+=iQyPl*;&Dv*q6W+BG}rr1`+Sq*Q1 z1d}ak#FLbicyTy$M!~RL7w#-7socdx>PT-qbj+MqhBFlmfnf$Mj+U2p_!Dx%yBK~y z-psE642#nG!7#-q$;z%P#vQt8WXb;(4>jLr*!CNJV3J-PVj-g2dS0SvmsXx6wzTO0 zQ%U#MsuyFWIT^X~9K~~y?6ufqyr&rq_n)-X5J(;q-|_JjCx64}k2WU;MC1<?oMtfJ zUiA6qfsly&5nC9-gG!^c5x?T5lV014rvr>Eh{By&{!lcOBzstqUNT>Dh2)>d|C~_W zptn&l?EFMo5L~J4^C7%S#`o`i`oW~Fu~3(yx^#>KjR~z{+6+&ZoYGD(Z1*SUnTpnF z=Y)N9Di~@7dNU;N13SS4RR9e6#)hngn21l~DzFnwa2s(Xl*E<>o~PEpMxk?_QO$(y zS(GU{>;M3&2(+}+<%e>#JPjsBhdabf_9!ObfK__uBjdF>4`0}8%7e_DEb`K-hY9A7 zIebB`i<gfvP#OWdnL+c}AH|5HO<lVteWuSTraZ`uek$ogqv?TbdAw_yy(h0{Lw@Iv z0gF$Lw2Geh2bKp<-7?#cjSVm~80$8bYEP*otPm%oTaS;~WLBRmF^=+1P#r~&CsX|} zY+$f@mU_YTIR`D%7JV?oP-iN~7CuKJ(jaeqxH}IQd(|XHb0&k7r*iE{KkMbj>f>54 zWCMUoZfNOYEmvlc;)^nKd=!h5rg^~d!t%8KOp}@NPMUoi&9{zcIhf?RKyZkElNoLJ zIhBg#hLy~W*1lmpA22_D<c(Z?nE5c%C>6_XZzZ$8Xk;1F<E$E>00000NkvXXu0mjf D6U8h) literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/Консультант1СБухфон/Консультант1СБухфон.mdo b/SSL/src/CommonPictures/Сервис1СКонтрагент/Сервис1СКонтрагент.mdo similarity index 50% rename from SSL/src/CommonPictures/Консультант1СБухфон/Консультант1СБухфон.mdo rename to SSL/src/CommonPictures/Сервис1СКонтрагент/Сервис1СКонтрагент.mdo index 7a02027e1..5d2fe6add 100644 --- a/SSL/src/CommonPictures/Консультант1СБухфон/Консультант1СБухфон.mdo +++ b/SSL/src/CommonPictures/Сервис1СКонтрагент/Сервис1СКонтрагент.mdo @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> -<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="23d4aa7d-8a2c-4e18-9d5d-43a155de9bf0"> - <name>Консультант1СБухфон</name> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="f595539d-bdd1-4e7a-8279-3bb8a9344f45"> + <name>Сервис1СКонтрагент</name> <synonym> <key>ru</key> - <value>Консультант 1С-Бухфон</value> + <value>Сервис 1С:Контрагент</value> </synonym> </mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/СкопироватьВБуферОбмена/Picture.png b/SSL/src/CommonPictures/СкопироватьВБуферОбмена/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..6dc16e5587aeedb01ab716597df33db5a93641e2 GIT binary patch literal 1299 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NSs56Z83KGlT!G?k%Xco>e|GcX^V^P|-*@r${!6zHT)uPv_18C_zP|eO<KwrV zAHV<p`t#5CUw^*+`upSe-=BZ}{{Hjt@4tUQy`x|>1cr17Y+zjD0?a22B|(0{|3@}p z2>#Bl3XDw70*}aI1_r*vAk26?e?<yVP^!c=q9iy!t)x7$D3u`~F*C13&(AePq0Cs% zRL{`B;7id$psFlS7sn8d;MfW7d<_NyM-;y7<NRNrEurr!XcuMIv+R`pDw#PCzX~m% zVW&JXNK30TBP>K{TW&~6?Kz?2yMk77FLZvB>&@!@Hfi3<2L*|~&aAt;E&4(VxZf^f oa=y~UrNmStv8U<PGtDk;y`ting!xO98bPVg)78&qol`;+0J2kt4gdfE literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/СкопироватьВБуферОбмена/СкопироватьВБуферОбмена.mdo b/SSL/src/CommonPictures/СкопироватьВБуферОбмена/СкопироватьВБуферОбмена.mdo new file mode 100644 index 000000000..897dc68df --- /dev/null +++ b/SSL/src/CommonPictures/СкопироватьВБуферОбмена/СкопироватьВБуферОбмена.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="62ef3558-5ad3-44ab-8578-1acbbfa54135"> + <name>СкопироватьВБуферОбмена</name> + <synonym> + <key>ru</key> + <value>Скопировать в буфер обмена</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonPictures/ЯндексКарты/Picture.png b/SSL/src/CommonPictures/ЯндексКарты/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..d9ee0fa65b4a7cb59dc3c07ce1acf6b86927470f GIT binary patch literal 1382 zcmbVMeM}o=96mmW+n9{_0VHOZBVCxTy^mg7dZFU=u61=3u~flm9M|@s7r47}cU@b+ zOfZu`(16Tk1Y9O0+Yo2eFm!5!WG+t4vW=Nx94ah+M9Cn!$&yXQ_kf~*kp1E1?%t34 zJ<sp?eZ1FEQT}N5#)6Fy1Z8`6u|6>7=ucKAcyGJD#DO7Sb5(1Va;+BQ6ds~Oa)5_D zB3H-zcrKJ^{G2a=ptM@SU#(Sp%c!6%nmFCY6c-}^4M8QP@dy{J=QTLM*9npXS@>ui zfrXF*sj_%6Z-n8)!mcKTuWTy!2b=1H_7GC~FkBL+0D;JB92^%LB$bLgkY!#9%=K*) zftO9RdIz#1s@hutGqS?N7L(Z+#Bdz8T1_}<v0Cw+FoEF&ih<i|#7W9xr3f3mdLh7@ z5~`(qtb5fLSUHferbQ?ejm2W7nAs#NbtrDP+jS0tFaissnvgUuZj{u*Bm>K<K}CpY zf-J#0BNvdPngan!S3(dYUhf*Qq^>3kqzsL75fnFJs3_`jEnBOakN;Q3y4I>c5#doE zugXy+2<lN=m;{5|-Pw_D2-HxID*`AA*TBlbsK`s2hjk#}izy_8C>w^^ofb1~X3V6^ zg5$K6G&^l1&Jcv%>UI-Jj`gr+lEz84*h$(*PzjfX#%ut@612^2F_TtX66=vvjgx|W z(ysvgu43ssVkt)9IZamlvfPmDfQqoJ$!b`Rz)YnTE~*lwkQ`HY=;c|7mgN;;FCTI% zvIsBdmlD?T4`f;h2D6#nq)m_8Zo?V7nJBhkm<z)&5cdi;^nY@O0x_uG9RF#S<QC{a zeY)2AV6k?1cnO>s1ssjr+uu72K`944EbWhf)73k^yN%BKY~ic1!L|cRR%7P?62`i^ z3mRnM<=joTaCXUgaljvBdfdhyhJK>LG}+x<k-s%#Kf=R5-X2;=yZMFTru*)e`275- z=J`|T`Nm6R-|NqB*}P%)z6m&-Vu++ZRdD{5$<g*JhNAYDw$EOj7|xojdGnV)<4oVo zQ0a6=Ec@9bP+%taMr(8?vmomO|NH$%anqJwuWir3eCKa}H+MgGdXa5$_Dx`2FOc4; zGe0CIxZWeFhhYExn>_D!`d)O(7an@7CEb-<Hd&KB+HvCg$@IdWv&VCezxI>kNwHz9 z`n$m5Vm9@_)pxd;QU=?H?>Tm|?%2?`7ov+B`VWuX7%?D*n&N@C{z&<GPds?<>C7|N zMn7TGc7M7#n*ZR_qkH|uQ=0dgj52z<|J?M_uk0JN^Fu?yc=KSVGEsP9yjA*M94o4N z#C_MR2Qx!o`w3Fa#5(MA5o2pkPwvjC(#uQTS1v~Xg0SBY$zL{(q~0n{OdswEB!&}# pnf)IRE}YxfcxhH0xx6nu5881ckK20m+MNF9^SH{{x1BX@{{ZrA>bd{` literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ЯндексКарты/ЯндексКарты.mdo b/SSL/src/CommonPictures/ЯндексКарты/ЯндексКарты.mdo new file mode 100644 index 000000000..0b8b52d4f --- /dev/null +++ b/SSL/src/CommonPictures/ЯндексКарты/ЯндексКарты.mdo @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonPicture xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ea07cd11-418c-4e4f-be9f-c160ee8a64e8"> + <name>ЯндексКарты</name> + <synonym> + <key>ru</key> + <value>Яндекс карты</value> + </synonym> +</mdclass:CommonPicture> diff --git a/SSL/src/CommonTemplates/ИнструкцияКакВыполнитьУстановкуОбновленияВручную/ru.html b/SSL/src/CommonTemplates/ИнструкцияКакВыполнитьУстановкуОбновленияВручную/ru.html index 061baa131..229dbf12f 100644 --- a/SSL/src/CommonTemplates/ИнструкцияКакВыполнитьУстановкуОбновленияВручную/ru.html +++ b/SSL/src/CommonTemplates/ИнструкцияКакВыполнитьУстановкуОбновленияВручную/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></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 11.00.9600.18427"></meta></head><body> <h1><font color="#00008b">Установка обновления конфигурации <hr></hr></font></h1> <p>Для установки обновления конфигурации необходимо выполнить следующие действия:</p> diff --git a/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/12.png b/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/12.png new file mode 100644 index 0000000000000000000000000000000000000000..619b0d2478a47f21fedacf58373584f8f78b4e35 GIT binary patch literal 30639 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]#8@J!v? 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 U+^Kx|TrNmNK$5@gtG3Vo0DWG8fdBvi literal 0 HcmV?d00001 diff --git a/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/13.png b/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/13.png new file mode 100644 index 0000000000000000000000000000000000000000..e9c01a6b6234e3c81c6ad44b708fd924e4bd173c GIT binary patch literal 30104 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 (>#`H?Nj*})tT+X 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 Ipsw$K0JXQyx&QzG literal 0 HcmV?d00001 diff --git a/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/23.png b/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/23.png new file mode 100644 index 0000000000000000000000000000000000000000..185c81e5c99983cf970aaf99d32e2fc39a16aeca GIT binary patch literal 87832 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�hC?DpqZ3JBo!_4RGx8XdjpA;Y=+ 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 HlfeH68v)m- literal 0 HcmV?d00001 diff --git a/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/24.png b/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/24.png new file mode 100644 index 0000000000000000000000000000000000000000..af432f69aceb96938ba64ffe5900937c37ed0af3 GIT binary patch literal 86009 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%0D6Aj+~K3_l<RT=@oEigc}4il57KY+E9 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 F{{aBQrf2{F literal 0 HcmV?d00001 diff --git a/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/Книга покупок.jpg b/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/Книга покупок.jpg new file mode 100644 index 0000000000000000000000000000000000000000..826a7d4c7dda0c5428def921f047ebbadd29dfe8 GIT binary patch literal 165000 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Ιa!u8b3)*LH$ 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 PtORiVPr*=-e|-EOH(l@z literal 0 HcmV?d00001 diff --git a/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/Книга покупок1.jpg b/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/Книга покупок1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b5d34f69991af86b3203fb7e566b9f24159ed805 GIT binary patch literal 152589 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%0A6(o&2hM!Xfnl}hUto3QA;&O~B?K8s3T|0_ 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 DhavNQ literal 0 HcmV?d00001 diff --git a/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/Поступленние товаров и услуг.png b/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/Поступленние товаров и услуг.png new file mode 100644 index 0000000000000000000000000000000000000000..e6c49728b2488842cced5e6ef6afd0f0a40bfdb8 GIT binary patch literal 62332 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 literal 0 HcmV?d00001 diff --git a/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/Предложение. Полные права.jpg b/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/Предложение. Полные права.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e1781693f1d40a3f4c0f06846a2b8767ccac1176 GIT binary patch literal 58675 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 literal 0 HcmV?d00001 diff --git a/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/Предложение.png b/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/Предложение.png new file mode 100644 index 0000000000000000000000000000000000000000..60ef612f8c61c14e2de5804439c3b209c2939e8b GIT binary patch literal 30120 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 literal 0 HcmV?d00001 diff --git a/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/Проверка в документе по кнопке.png b/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/Проверка в документе по кнопке.png new file mode 100644 index 0000000000000000000000000000000000000000..98ce13e9a5035055843249055cd131cb147770c4 GIT binary patch literal 73872 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⁢s7Pg# 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 literal 0 HcmV?d00001 diff --git a/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/Проверка контрагента по кнопке.png b/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/_files/Проверка контрагента по кнопке.png new file mode 100644 index 0000000000000000000000000000000000000000..b78fced2807d02eed2b0c74e2a497d6ff701d1d7 GIT binary patch literal 73721 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 =QE%k%@GxNVq{%W| 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 U?R1`^p8x;=07*qoM6N<$f&#c%{{R30 literal 0 HcmV?d00001 diff --git a/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/ru.html b/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/ru.html index 6a67379d1..77fc7141e 100644 --- a/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/ru.html +++ b/SSL/src/CommonTemplates/ИнструкцияПоПроверкеКонтрагентов/ru.html @@ -1,26 +1,46 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html xmlns:o="urn:schemas-microsoft-com:office:office"><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></meta></head><body> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html xmlns:o="urn:schemas-microsoft-com:office:office"><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><meta name="GENERATOR" content="MSHTML 11.00.9600.18427"></meta></head><body> <p align="left"><font size="4" face="Verdana">О сервисе проверки контрагентов ФНС</font></p> -<p><font size="2" face="Verdana">В программе реализована проверка контрагентов через Интернет посредством специализированного веб-сервиса ФНС. Сервис "Проверка реквизитов контрагентов" ФНС позволяет в <span class="SpellE">онлайн-режиме</span> проверять существование контрагента по его ключевым реквизитам - ИНН и КПП.</font></p><span style="mso-ansi-language: X-NONE" lang="X-NONE"><o:p><!--сообщение про тестовый режим--><p></p> -<div><font size="2"><font face="Verdana">Проверка контрагентов осуществляется по ЕГРН (Единому государственному реестру налогоплательщиков), р</font></font><font size="2"><font face="Verdana">езультатом проверки может являться один из следующих статусов:</font></font></div> -<p><span style="COLOR: black"><font face="Verdana"><font size="2"> -<table width="100%"><tbody><tr><td valign="top" width="20%"><font color="#64b010" size="2">Контрагент есть в базе ФНС</font></td> +<p align="left"><font size="2" face="Verdana"><a href="#stih1">Общие сведения</a><br></font><font size="2" face="Verdana"><a href="#stih2">Включение и настройка проверки</a><br></font><font size="2" face="Verdana"><a href="#stih3">Проверка контрагента в справочнике</a><br></font><font size="2" face="Verdana"><a href="#stih4">Проверка контрагентов в документах</a><br></font><font face="Verdana"><font size="2" face="Verdana"><a href="#stih5">Проверка контрагентов в отчетах</a></font></font></p> +<p align="left"><font face="Verdana"><a name="stih1">Общие сведения</a></font></p> +<p align="left"><font size="2" face="Verdana">В программе реализована проверка контрагентов через Интернет посредством специализированного веб-сервиса ФНС. Сервис "Проверка реквизитов контрагентов" ФНС позволяет в <span class="SpellE">онлайн-режиме</span> проверять существование контрагента по его ключевым реквизитам - ИНН и КПП.</font></p><span lang="X-NONE" style="mso-ansi-language: X-NONE"><o:p><!--сообщение про тестовый режим--><p></p> +<div><font size="2"><font face="Verdana">Проверка контрагентов осуществляется по ЕГРН (Единому государственному реестру налогоплательщиков), р</font></font><font size="2"><font face="Verdana">езультатом проверки может являться один из следующих статусов:</font></font></div><span style="COLOR: black"><font face="Verdana"><font size="2"> +<p></p> +<table width="100%" border="0"><tbody><tr><td valign="top" width="30%"><font color="#64b010" size="2">Контрагент есть в базе ФНС</font></td> <td valign="top" width="2%">-</td> <td valign="top"><font size="2">означает, что налогоплательщик зарегистрирован в ЕГРН и имеет статус действующего в интервале ± 6 дней от даты запроса</font></td></tr><tr><td valign="top"><font color="#807a59" size="2">Не действует или изменен КПП</font></td> <td valign="top">-</td> <td valign="top"><font size="2">означает, что налогоплательщик зарегистрирован в ЕГРН, но не имеет статус действующего в интервале ± 6 дней от даты запроса. <br>Такой ответ можно интерпретировать следующим образом: либо контрагент с указанной комбинацией ИНН и КПП прекратил деятельность, либо указанный КПП был изменен, то есть, ранее комбинация ИНН и КПП была действительной, но теперь она недействительна</font></td></tr><tr><td valign="top"><font color="#e12828" size="2">КПП не соответствует данным базы ФНС</font></td> <td valign="top">-</td> -<td valign="top"><font size="2">означает, что КПП налогоплательщика не соотвествует тому ИНН, который был указан в запросе. <br>Такое сообщение означает, что такой комбинации ИНН и КПП в ЕГРН нет и никогда не было</font></td></tr><tr><td valign="top"><font color="#e12828" size="2">Контрагент отсутствует в базе ФНС</font></td> +<td valign="top"><font size="2">означает, что КПП налогоплательщика не соотвествует тому ИНН, который был указан в запросе. <br>Такое сообщение означает, что такой комбинации ИНН и КПП в ЕГРН нет и никогда не было</font></td></tr><tr><td valign="top"><font color="#e12828" size="2">Контрагент отсутствует в базе ФНС<br></font></td> <td valign="top">-</td> -<td valign="top"><font size="2">означает, что налогоплательщик с указанным ИНН не зарегистрирован в ЕГРН</font></td></tr></tbody></table></font></font></span></p> -<p><span style="COLOR: black"><font face="Verdana"><font size="2">Проверка производится при вводе нового контрагента и изменении реквизитов существующего. Статус проверки отображается в карточке контрагента, формах списка и выбора справочника контрагентов.<br></font></font></span><font face="Verdana"><font size="2"><span style="COLOR: black">Результат проверки контрагента выводится в карточке в явном виде</span><span style="FONT-FAMILY: Verdana; COLOR: black; FONT-SIZE: 7.5pt">.<o:p></o:p></span></font></font></p> +<td valign="top"><font size="2">означает, что налогоплательщик с указанным ИНН не зарегистрирован в ЕГРН</font></td></tr><tr><td valign="top"> +<p><font color="#e12828" size="2">Неверный ИНН<br>Неверная длина ИНН<br></font><font color="#e12828" size="2">Неверная длина КПП<br>ИП не может иметь КПП<br>Недопустимые символы в ИНН<br>Недопустимые символы в КПП<br>Некорректный формат даты<br>Неверная дата (ранее 01.01.1991 или позднее текущей даты)</font></p></td> +<td valign="top">-</td> +<td valign="top"><font size="2">означает, что в проверяемых данных (ИНН, КПП или дате) найдены ошибки</font></td></tr></tbody></table><p></p> +<p></p></font></font></span><span style="COLOR: black"><font face="Verdana"><span style="COLOR: black"><font face="Verdana"><a name="stih2">Включение и настройка проверки</a></font></span></font></span> +<p><span style="COLOR: black"><font size="2" face="Verdana"><span style="COLOR: black">При открытии документа или контрагента предлагается включить автоматическую проверку контрагентов. В автоматическом режиме контрагенты проверяются при открытии карточки контрагента или документа, а так же при их изменении. Автоматическая проверка на медленных компьютерах может привести к замедлению открытия контрагентов или документов, поэтому для таких компьютеров рекомендуется использовать режим ручной проверки по кнопке в подменю Еще.</span></font></span></p> +<p><span style="COLOR: black"><font size="2" face="Verdana"><span style="COLOR: black"><img src="_files/Предложение.png"></img></span></font></span></p> +<p><span style="COLOR: black"><font size="2" face="Verdana"><span style="COLOR: black">Управление автоматическим режимом проверки контрагентов выполняется в настройках администрирования:</span></font></span></p> +<p><span style="COLOR: black"><font size="2" face="Verdana"><span style="COLOR: black"><img src="_files/24.png"></img></span></font></span></p> +<p><span style="COLOR: black"><font size="2" face="Verdana"><span style="COLOR: black">В режиме сервиса «1С:Предприятие через Интернет» автоматическая проверка включена по умолчанию и не требует дополнительных настроек.</span></font></span></p> +<p><span style="COLOR: black"><font face="Verdana"><span style="COLOR: black"><a name="stih3">Проверка контрагента в справочнике</a></span></font></span></p> +<p><span style="COLOR: black"><font face="Verdana"><font size="2">Проверка производится при вводе нового контрагента и изменении реквизитов существующего. Статус проверки отображается в карточке контрагента, формах списка и выбора справочника контрагентов.<br></font></font></span><font face="Verdana"><font size="2"><span style="COLOR: black">Результат проверки контрагента выводится в карточке в явном виде</span><span style="FONT-SIZE: 7.5pt; FONT-FAMILY: Verdana; COLOR: black">.<o:p></o:p></span></font></font> </p> <p><span style="COLOR: black"><font size="2" face="Verdana"><img src="_files/Контрагент4.png"></img></font></span></p> <p><span style="COLOR: black"><font face="Verdana"><font size="2">При отрицательном результате проверки в формах списка и выбора справочника ИНН и КПП контрагента окрашивается в красный цвет.<o:p></o:p></font></font></span></p> <p><span style="COLOR: black"><font size="2" face="Verdana"><img src="_files/Список контрагентов.png"></img></font></span></p> -<p><span style="COLOR: black"><font face="Verdana"><font size="2">Если от ФНС получен ответ, что контрагент прекратил деятельность, то в форме списка контрагент будут выделен серым цветом.</font></font></span></p> -<p><span style="COLOR: black"><font face="Verdana"><font size="2">Если контрагент уже был проверен ранее, то при открытии карточки контрагента повторная проверка не выполняется, а актуализация результата проверки контрагента выполняется регламентным заданием </font></font></span><span style="COLOR: black"><font face="Verdana"><font size="2">с периодичностью раз в неделю в фоновом режиме.</font></font></span><span style="COLOR: black"><br><font size="2" face="Verdana">В режиме сервиса «1С:Предприятие через Интернет» проверка включена по умолчанию и не требует дополнительных настроек.</font></span></p> -<p><span style="COLOR: black"><span style="COLOR: black"><font face="Verdana"><font size="2">В отчетах проверка контрагентов выполняется в режиме реального времени, результат проверки выводится на специальной панели</font></font></span></span><span style="COLOR: black"><span style="COLOR: black"><font face="Verdana"><font size="2">. </font></font></span></span><span style="COLOR: black"><span style="COLOR: black"><font face="Verdana"><font size="2">Если в отчетах есть строки с документами от контрагентов, которые не были действующими на даты документов +-6 дней, то такие строки в отчете выделяются красным фоном, а в панели проверки появляется кнопка для отбора таких строк.</font></font></span></span></p><span style="COLOR: black"> -<p><span style="COLOR: black"><font size="2" face="Verdana"><img src="_files/Отчет.png"></img></font></span></p> +<p><span style="COLOR: black"><font face="Verdana"><font size="2">Если от ФНС получен ответ, что контрагент прекратил деятельность, то в форме списка контрагент будет выделен серым цветом.</font></font></span></p> +<p><span style="COLOR: black"><font face="Verdana"><font size="2">Если контрагент уже был проверен ранее, то при открытии карточки контрагента повторная проверка не выполняется, а актуализация результата проверки контрагента выполняется регламентным заданием </font></font></span><span style="COLOR: black"><font face="Verdana"><font size="2">с периодичностью раз в неделю в фоновом режиме.</font></font></span></p> +<p><span style="COLOR: black"><span style="COLOR: black"><span style="COLOR: black"><font size="2" face="Verdana"><span style="COLOR: black"><span style="COLOR: black">При отключенной автоматической проверке контрагента можно проверить по кнопке в подменю Еще. При проверке по кнопке <span style="COLOR: black"><span style="COLOR: black"><span style="COLOR: black"><font face="Verdana"><font size="2">проверка контрагента выполняется в режиме реального времени.</font></font></span></span></span></span></span></font></span></span></span></p> +<p><span style="COLOR: black"><span style="COLOR: black"><span style="COLOR: black"><font size="2" face="Verdana"><span style="COLOR: black"><span style="COLOR: black"></span></span></font></span></span></span><span style="COLOR: black"><br></span><span style="COLOR: black"><img src="_files/Проверка контрагента по кнопке.png"></img></span></p></o:p></span> +<p><span style="COLOR: black"><span style="COLOR: black"><font size="2" face="Verdana"><span style="COLOR: black"><font size="3" face="Verdana"><span style="COLOR: black"><a name="stih4">Проверка контрагента в документах</a></span></font></span></font></span></span></p> <p><span style="COLOR: black"><font size="2" face="Verdana">В документах в зависимости от результатов проверки контрагент и счет-фактура выделяются красным или зеленым фоном. </font></span><span style="COLOR: black"><span style="COLOR: black"><span style="COLOR: black"><font face="Verdana"><font size="2">Проверка контрагентов в документах выполняется в режиме реального времени.</font></font></span></span></span></p> -<p><span style="COLOR: black"><font size="2" face="Verdana"><img src="_files/Документ (2).png"></img></font></span></p> +<p><span style="COLOR: black"><font size="2" face="Verdana"><img src="_files/Поступленние товаров и услуг.png"></img></font></span></p> <p><font face="Verdana"><font size="2"><span style="COLOR: black">Проверка производится при открытии документа, а так же при изменении контрагента, даты или при вводе счета-фактуры.<br></span><span style="COLOR: black">Документ выделяется красным фоном в списке, если на дату документа +- 6 дней контрагент не являлся действующим.</span></font></font></p> -<p><span style="COLOR: black"><span style="COLOR: black"><font size="2" face="Verdana"><span style="COLOR: black"><span style="COLOR: black"><font size="2" face="Verdana"><img src="_files/Список документов.png"></img></font></span></span></font></span></span></p></span></o:p></span></body></html> \ No newline at end of file +<p><span style="COLOR: black"><span style="COLOR: black"><font size="2" face="Verdana"><span style="COLOR: black"><span style="COLOR: black"><font size="2" face="Verdana"><img src="_files/Список документов.png"></img></font></span></span></font></span></span></p> +<p><span style="COLOR: black"><span style="COLOR: black"><font size="2" face="Verdana"><span style="COLOR: black"><span style="COLOR: black">При отключенной автоматической проверке контрагентов в документе можно проверить по кнопке в подменю Еще.</span></span></font></span></span></p> +<p><span style="COLOR: black"><span style="COLOR: black"><font size="2" face="Verdana"><span style="COLOR: black"><span style="COLOR: black"><img src="_files/Проверка в документе по кнопке.png"></img></span></span></font></span></span></p><span style="COLOR: black"><span style="COLOR: black"><font size="2" face="Verdana"><span style="COLOR: black"><span style="COLOR: black"><font size="2" face="Verdana"> +<p><span style="COLOR: black"><span style="COLOR: black"><font size="3" face="Verdana"><span style="COLOR: black"><a name="stih5">Проверка контрагента в отчетах</a></span></font></span></span></p> +<p><span style="COLOR: black"><span style="COLOR: black"><font face="Verdana"><font size="2">В отчетах проверка контрагентов выполняется в режиме реального времени, результат проверки выводится на специальной панели</font></font></span></span><span style="COLOR: black"><span style="COLOR: black"><font face="Verdana"><font size="2">. </font></font></span></span><span style="COLOR: black"><span style="COLOR: black"><font face="Verdana"><font size="2">Если в отчетах есть строки с документами от контрагентов, которые не были действующими на даты документов +-6 дней, то такие строки в отчете выделяются красным фоном, а в панели проверки появляется кнопка для отбора таких строк.</font></font></span></span></p><span style="COLOR: black"> +<p><span style="COLOR: black"><font size="2" face="Verdana"><img src="_files/Книга покупок1.jpg"></img></font></span></p></span></font></span></span></font></span></span> +<p><span style="COLOR: black"><span style="COLOR: black"><font size="2" face="Verdana"><span style="COLOR: black"><span style="COLOR: black"><font size="2" face="Verdana"><span style="COLOR: black"><span style="COLOR: black"><font size="2" face="Verdana"><span style="COLOR: black"><span style="COLOR: black">При отключенной автоматической проверке контрагенты в отчетах не проверяются.</span></span></font></span></span></font></span></span></font></span></span></p> +<p><span style="COLOR: black"><span style="COLOR: black"><font size="2" face="Verdana"><span style="COLOR: black"><span style="COLOR: black"><font size="2" face="Verdana"><span style="COLOR: black"><span style="COLOR: black"><font size="2" face="Verdana"><span style="COLOR: black"><span style="COLOR: black"></span></span></font></span></span></font></span></span></font></span></span></p></body></html> \ No newline at end of file diff --git a/SSL/src/CommonTemplates/КомпонентаПечатиQRКода/Template.bin b/SSL/src/CommonTemplates/КомпонентаПечатиQRКода/Template.bin index 163f485b009efc2325c61921adfa02b4e88abe02..e1af1078ead28dcd0bb9c89eb46509533c4aeea5 100644 GIT binary patch delta 386743 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 J(PNh?jkB#H*n3 zzCKA6GTVx`4u$U3qd}{lqlgoq6C<Wl(2$}Eyn5wB9v+i*rqz$+AZhKItJNui1PSOq zSfRPDbV_0o2A_12t8i-kQB$q>^%1<1>(F6IybIm72SDCPd<gv84m_(vT?11Im{W&- zMFa4s-hV(BdXNuriC6EQmko-KODx(A#P11q6yOz8NdMxpi~5j@J9J}$Tt=g7LO+Ue z{U6iI-!L+hSj5Kz9{31}MSRG_B4Zd0idvCMPus`#qo;ea^rPvq>MZWG-9SVkkpu%x z`q<|bY*|(sOkQOnu%cZufs)++b;1 rD_XLVr2ua`PN%>}b+k{5^7|=?SjXfsrN6 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%0Aos<l!valNeiQNDngA1Km#up5<yc++B zU4UQSKu2AZ@o@rv#D8K!HZGHI+E){di`KJk65Fkg1DXjZ+I<^Pz<z-q!+(rXH1!M9 zKEDp1%inmKgw)q*dD<<u(k>Q1F5=$9Ptf4?Xw3ayIUN@fTk&cS=H6c(M6ZXy66XH2 zJcx&Z1AdwP0(Z<jj$MH|kgl?TN?LpTBfX40OKXg~YX#Z&r83LFz<9J;J2o~PL@}gB zR@|@1%3KOMU81uSWSXF})=InCW*2#TynK|SnEJaY62m(M**4tD=)dHbcE`_O!<YOu ze92$Km;5!{`nsMk44tsft5R@7wkLYfj6wEJJc^L+N3Jg7b(@1YlWlGpe?$Z!wHe6P z3u6BQ*Wt2IN8QcPRUcc=ySn~JT30dL-%pD9-Qsnnk%XHO7kbL66|wb7RB`c`hx&RC z(7SIn2ojuV>FCD>iM`Dwig|D23NfQjAD&j4TU5|{B9%hkGxHnz&XScG5uTxVm!=uB zry!_h`K>{1Kx&3Tm;uUwf6nRa!j0qGD8gSn7sd(lW(9@@7wr-JDJ8nF#3Gfay~5MR z?8mg}X=zm-6V&wv)S(2_zdD`@H40ub8(%<1A*8N)cj-YMo>iIAj3pY$8PgknC<K4a zNmr(;{;2PW-hj(mql>wly-My2_W&crvz9#6KMn3vf7Wy6(gG;4e^Y!om^WFky6y@= z2-Dc3D@7}ip{x9%GXElFO1AooM%oI;wjW}?vCzy?qnT*TCh_}_aj-(b{C#6XvI%~i zAvp_vTp`&EKXOR6h%4Q6@Y5NZV1?(Z(1ZbM?{nO`Q`H)gMHd-;D3;MS^{OjKsOj~x zMLgc-Qks{z0esX~e|(heE$4DaCYc@Qky^EGIe2W!{3=XNPc$`L?PHefsrm9Ca%BHt zuQJK0uG)jkyjrsx?*iI@)+3B_^j!R0K9?$S9_sU|g67q7BBu$Z5tO5fQuQYf8`BAr z>7u(W0v+r){6GFe88jis`i4)viuIwp5oh^#(GOC>fn7Lne;&${JAtWS1r%tsop%#t zpBW`yHlt8xfdWtQE+02GR-^H$&Rcv0`tM}}3`efswEizhIR2&dzuKqdK>sV93Cbw( zFv}433tFCVYI~Sz3d<S7iRR_K++10MCbT-dVHDM0XuQVbc!z{UaoIu?k<Nf90KXB5 ze>f2TiUjfhf97bC_ygCWcd?RtYE~-Ax=SPcl>G-l-|>7LeWZf;V1pKLegJo-fW0U| z4!9f_mxn-AcxXEg$yMl(<H6&}y>js(ndRK1esURR8GRE52Hj21SL2y@G<trBG5*^x zBRS5duDy&e(dy4$K)d^*I*Q<c#h%44bdG)##uLTce?b%~g;rIv-20xD*_}_z;XGZ+ zH1Rc+T<&zmG(tj&LLv%?j7@nYGNK5>FO$6E&UTJK7cQOnPkeit{p%JqehH|00m<MM zfiOhY*I!9k!46SFJ7mRLh)5;QOL*V0Nz*!8=pIZGHCpVbD%$uXo}JNChnn;gIEv1+ zi&%>te@_r0O?cQwwebku)uQUE^?uAtr?r+`%A=t_!_(lG->tcv?segL?zohH;iq(- zvC}afh2N2*e()T>hKF8;JdZEW5a#HZJIcoxaI^rcFyeco9eFu*8qs;BNa#fLaK9P! z1WosMH$u6i^aUTiY$M3DUPs&9Tv^He{x*xCe};Opgw5XKHm{?@BUT(jd+F^^Pa%)5 ztlVakgS~kTRsbb##t29Hn;GBQW%G`SN{-E24BFl<_0(7#j9CTV;t%BDlEOT1cve9J zWE)=5VHqyy0&iz(sCT+wM8C0IW_w$D{8!4s1%-JHmr+<yT7%g&K2G_&)Ms!HgKbr( zf1f4L8UGTwvy$$nlfw%OI$RE$z&*f>b1l3sfK~!6K!Jby$^Tv+@70OqRY>H8H$ws_ zrSMd)OvzKrMsk;(d^){UCWjksbfl&Lx*xw*CIg2;w*<giuKra-apQs)|H~|pQV;BJ z+s`@sD^j=g(w+>zq|pfwCfYAaYrl%Oe_vkipP<}orkw%xXE01&Hr!Lb(B>~p^5058 zQW^a)+2#pPvdNBZ0hIu3wDFS9LrEm0k-6MJPm#EJuu9Mu(ojP9lEYIA8U`ZHIxKlY zdxvX?%}|`kGf6-7g%MTd;PKP*kdoSO1xlK{4Je6|4hG;qA_JKXMygZS<HTO<e{PBR z?}Q?Gb8n?PR%G@-fefrwtoV|s>Ixila&z>ui)4`QpzsFt!TR%!Jf!lSIRYJ*fq6Qo zz!-XG$X{%u5Ki$Cz<vY6<nT`lsJ;O*yA2PU!Q^p<O7#Fw<kq5zzsz(!0QyhBh~>V2 z3-qQQd(-E?K3Aucat3AO#OV1ze>NqZQ4Ver<=~0a^MLr?jb8^?021$#cf@463K0L3 zkA5QW_!5NddFRTV?VPo>%f(TzBQoDIQ5j*9l}RSRA~2FEu%2o2bJdqdB+OD{@wOxq z^oV)s@v4c;F2jLVtd~D+7IXnNf6@wr20cfB2Jx=pCcO6NIXelLfR#qvf0YT*lKiQE z1WjK=;H`*2(0YBSOKnw$mm@R6Z$KbZZ0e>#*wh3bM;^rGS%u#4{eb-wd9qm90n@$^ z9YJMc_3eaTjFifQcpZlx$-rQD52pzhxIQ6h7a~4!>qt;<&!PEr$FI#ONwoZwccait zE^>>$7l7cP{=|6;z}1Lpf1Ex|c%S=TjlAaG9!U<Vg?Aio??2wH-GLk!^t>4`=yNt@ zVa6gon@e0571y=l1w~8uo6uo-5QdfxcAb{Ah#REYU#4H#BCgxG^dribt#t>xPixWE z?$kV3-|Aat%$Ok^RrTNiisfdP!>9<`f-KP959Lb!N136~MDC3ee~U(ABh4GhtIOQ= zgU}?~6JJg=h@rI;Z5DTB=(l9<GHUtXmOm3%9N)Y<F4pZv-<zYc6dV+HRVWtIrF!Wu zs8EZz%+Sh5Ml0PCR4Hjuci+C!c(e7juCQDP|L_PfeNGD`g^X~u&C8CJ9+ciJ34j`V zN>;A>!%Y?pqVgKKf36$%17)L;5xOtW-h+g;(1sjJB{{^4j<C0q#P;cRFzKM|HjJxL zCW)(diL3Z6Uurj5gD)h4#?TvOZgEwI5j8<v#ht0eRhv}0tQty^1G;*%g#x(jUz`oq z?iW{mjoR_=1`7gS*3n@LYBq8CUAX5UuEIN|(we0EHN|xse}L#Wjl)|tEm7UYeOr3t zo7CZgZub*1dUQKy=;kR5wk@uUc-hDQFu4>b`gH>@{3bNrUXL}q;2*ohRGczTt~YV7 zdu}qCiCfHc3a<$RQ?EOwOtvQUi_(29J(B3&6FfCQbj4~{NRFeT@;bq`6FR1ChZQ9o z_iHYX4=nAee<&MzIo`-Ndw>tm-Ob*DJ{;cJaT&<SW8PBH++?z7;!_bQB)0Sbb!h03 zP!V#OECxJ^PlKv6*Nc_nd5+m#&;q%K{QG(V;3mIOxdAjVrrBFsB2Wte2Nfsk!V{b3 zEmU2=5}Mv0tkRyA2!McP(xK>A62l_YgE%!r+thfGe^E{B&C~oALwwQN9YAto>kBDq zXb-nT7oKVh9?YT(MsWl|NBe2RX@2suQNL{(J&^g)tkf&EelT9FxauPx+v6_n28Bml z^)66m%nhhe#?_V^{)L|4@d5rZ9&z2<9-_}27)&$dnbR$L%w1(e%RS0O3kJN@qP*Lc zpwdL3f4@1n86P}8u<2jE**hfKf2Z@8!D9pbpmar`y3M@Gp;4$3eIZC_n$rUn0}MGK zSDEET4D1UPjSsm7T0C0!f{3^d_h;RunleXI<{tIV-r!@~U5<{$_b3Z{W#!73$}9pm zQM(+SemnFnwIN>nZdX~(D5yCqX&oM|6IusWN{Cy~1`N>n_>gyq73y8`4`>K5G9Btw zruF(}@AA&x=y+#|2ddlxf9rAg#H(1kd~+hA&)nuUcNTx?Qf3(bXP()EvC7gOsVonZ zJb4>`S6tPFq37ygv?BOWAGX-hoNGh=`sDptd<s|LnA2@^=u5~Ctd!uiF2XJ2LY&(L zZuXIj^``sR_+}UT*j$@OdBg&M9%Q}f*5hT{B}LLa=C9z*BC&7cXC==EtpX4v@vWJo zEWs0|z@S=KPim37)FZ^JfUdT~&mQ>ea*VZqi>;{Wu@krl|KtgziFIv`4pG6qOu%Mj zqT(&XhPQakTPwu3Tth65-hc}k8M={QOqEMo`<b%(->H>?C#+3p!%sY`)@7QB);|~9 z6CXg(>`4>^ZrdiCH(+@zoM+*+G(jzU0#1TzQ9-TNR!f9Ud3ip^9{)#B`!Q?N`51G5 zy{;CWS!*S8H?{*K14;40^o3gNN*11(XVE(%F1O-!qcC?l;#|yP2L;~Za<na~a2#KB zlSi3iP4C*CfF1I>Mp@zMd`h!YBk-D68;qKH!#oWwrZ%lp+X^!WdAQ^_CN7_Lns18M zNVqTFDQTP0F~#kO@)4w4KE>syPI0DxQh+`Pg~(ZoP`odZ`3{#qapeP07{~(M*rDG@ zM~?;7tT~Zuxx>FXQfrRl*%8wBn8z0TwWZHBP$~C^IdT^~YY_rN<Y+Xn_Gnbo0$GRK z<!E<aEIJQmNuB;>IoM>c5(3uP@1YbKs?}$gkn)CR#GqQj&y(WzA#;wn6oaaNVHBWS zC?(i9!sMUS=VO+?-1unrUj^cM^HMIJ7XsIiR*xa+J^w_rSs;VBDv__JDPZ1Q8sSw{ zjo^2A{@M+IaF`xkLd$Ye{?*|x<2QjW%HwvfLad+=PbX)(kClXAeh@Ubl7O<&2~G7T zUVBlpP(t(JWiZnkq%9C?g8NN>pd=6CiLag3{gKm)Z<bRl;L&X5V1%N%1InZDuwC7= zg!VKBp-P2g7PsLO@>q<&lirIA@Zf2Le(>1;6L=CxnB1%*0be_vHliGS>2T)pBYiUC zhgj8xCjAqy*p;py$~-DU?x`h-3JJAPc%U4Xd4f?X8YeQt^VX6dgon0&#SxgZgfw6> z_ODDXhYT222uqCC!7me6I`hcJ!FyMwQvhyG#n0w-^7z9Zn*n%VTxO&v^O6*LdQ0d_ zPe%R%oj@CHf?wp%%n2=7?D4@cRkkd~S}b;uRPFjnfsFJ7lU5e|H*?>~2)b}+5uN@) zXH?&+;TzkqMoBiE_^`!)i}cG4rt^v7L{o}tTFg=71SFdbqD$|ej<mCM{6L`xhZrN! zZ<wgxeP~s|0}iPO;j<!lQM*OZ@{i8f83gvLQ1Dwc0C3HDIPWdM&h*=>R9g@dg3AcC zedjkh<R*zS!QDU$X-smkgyTUyHHRBBbuQZWL!&qGoJ#~Uh?bFmf`lC-I!WO?Khz#g z^twbVHHlWLU4|R2&aZyirx&T`{q_1*mjNv5pD+MV@qU?E|MFi6TX4}OXeQ>DatqwL z`>bIg3BGBs!A=AQkyBCZQ9LyQ5>1PJ^~D%p*ka;VlvfH7sapOM^UP?lAMaJH!<Lza zwHDoQi{DiY(v6sZD56%NGh@j|F!ygwX85tbwUmq%Q{V@5zanzUZlRJ0<<q*6n6`Z5 z7>pv=>l7dRMQZZfuOwe!u%zZhL8Bt$V{sSm`S0jmLjdY;`y~o-=4IC3{u1@O?TLyv z&F%xan?rthAwh28kiWi!Ab;4x5m$|f^IwOR;G=rI4)nZ#ixWwg=m6sj0{j>POs8#+ z{Q-zYfVcG*V}IeTlSTyUbwcJWSc?_wbeiBT_Aba17a`$CDG8{Y;Mj?)1Rf8EzvAcZ zMt)JxzrA1n;b{$RTEz41F$(TVNk}h<*`LzC?l-bOpOS#6sUp-6OjSBes*!i0o>xuF zi`8DKe>r4-WUWd`z^rnzT3N5Q*T`$v^Y*6Y#cDg6_!r?4J?pWQ1k6ekgICM9z*_7! z%sVzY%Ji{XZ!^!R=oP&pOu!6zmn2IkD@GV@T)=Y{7)1k3$%JGxm{nWIzZ4o-CpIM$ z<k>AWY_NvhfK{@mI4y*YEB&70V;!bz0iWXI7p8lE1)t)hgS&?KqUtX-_;N^psm7OH z{iO<D2uESulY<wV{^G=!0{x{7Ukde?62nSD9+?Rf3QVQON6o-bG!Zzokf$>Zk{@3Z za2h<zX`dL=q6zA|&+rLZrccO{8e%lL_cWTxV+YOA4=>`+SbG-L4uA`5&qX$DQ*moa zMK=<En0`3N!nQ>9$h{T-_R<0Ae5nr)n9X^>*Yk-72#bgZ{C6YqfFBFU9nS{&3)03R zP)0S87pOmxi>W{OV-5^mgFvb7=Rj!2JuG$7?-O4wfox*Eak{o^Ip@};o7FlzFR^qz zvi0^1{2td2SpS?tAS-@JVj(Fc_dQ&<tCP2X-~doSufM1dU6yJ6a2fGI(yH?h#YG>4 zA*VkNS0Q>DfD3;7a&j+7G(&d})bX33anVu-Tt@4kv;TsdgnH=#A`U=ry`VqH#zU3y z&}b}8FOWXeLc4=FA|O*QF`~S<OCx9{!Tr}e3;Gbt6|^MeZdj5emftK%63Yck(ut)@ zjiVq8fBml){MTSZqXZiI*A`<&)H_J3;Jdw7U&XZtnafoH3~_piB?+OHj6;K>1FqsA zj;tBh2gcDH#*0#5{C;r~#x;xj!Z_hHdZhTzU7MwYBCF4p;c6ZGGr5kSw4hrun<AVK zAxlWf9w_5z#bgfm95e2>zR5dO$H|B_M+BZwe{CeJ))Q)y1E=6;5?u_11iRgwJ}}Sy zvrnfd@J^3job0ra(rH&y-%j65H}6pxS&Vfqul`D-|CS($*3ZLqx>$!$t+)h>v}Ov8 zowXP0()-?}vP*dfs&oYw%RQo(tD>m$XkqEoDPt^~Q^&Fq#&XL)`gH3S-mMvnlHIx@ ze}y@1d9-i07M|=gmR0JW>uD_a>Z%99;aro0!#S=VRqWY%WSu#YLN2Wbn@m-L|GbPJ zYJ@<|8A=4sRD#s+pERbb-!;^+{H7*D{cZ!Ulu*CVP|bw?ADGKjgBr1RNQ~OFZWaX@ zvM@DU0uhkcYpPK<UdPc;$C}ZVFt|Spe@Z;WtUbT52&BTEp?m+2nxAx?K^t^pY#^v= z{VOH!{pqF*fY7D9@TrQA-}?{q+8WU<7!ul(_7ocWanlTY1ZgyZTAn;_FFD8D!mO4T zj9y>PtVf@Rmo8J-`qlHe>zBI?e$*Q|1<t<1ET|9fp+Q^qys@|W(6#78k$=}*e<NWg z)Eo~Q)(^QosVXYgf`vK(@Q}f{`N(^vUVljU(1wOSel($bXW;kgp{KB;(6MS0zp+Ps zI8Ob-IrtY`q@R49-gDFqahd{8VPf}}0_b|BKgMRPZ}&hKC&Um-RvUKr4nobMA?n4T z@TdweHxtW!^D%yD8mjKuPY;7(f4*M%D>9v&tA6?+<oNn^+&|?-u7DzBr&eP=n3&c- z{SRoEk+Ai*@EglUCrE%>2;3GN7lIUFv5Q%oF-uq2+6ceFapPWx<bYNEuV115gVnFV z>Q8)$GZqTNJUlBnZsgCPjNhvI;aeR0jkg(L1RSbAOKg1-L74X%mpk6&e~Zua3lfV@ zSC#?hKQ8B_Qi7G2kWvpq7t4KX1**m;>rgxM7vUB!D$-+KM<jkwXC~S%37Zm1I8Fxr z+6$ibwrdd~@!@d`{F@&?3js637<H@KYCTYMQm^edzD1C|%mjG2_Djwyok{bHDD*XN zWS|ejmc{X%7aUjcXN$f@e~r|K!Q{^-Yy~FE!EsB0O$q)2^1|ik6kx_^`Ewu{X_s3D zhNXX2?>j}&p!rv-yIp7PDVb`9B{Ef;0&br7Cd$Oo3iEXsKZcY@$T@}L!?*+U5va3M zKWX`UAdz~-!8h{@pi&y#Mr%R9W~`$e_KTsuXXa<@<YV)BCuyiGe~C$)$=;L@TT0Z% zlH@S-ktbzcG?Tdt{liZrOa~>p<mJ>?x++65!=qEE6`}pWWJnW_X6w2Pea!7_p)n=l zcCh|}|1tikU)&D)$z3CWt50x#>grR=SD(}KjMc~WRdV%7lyj<oTY=g$F0Bb+L|RkJ z#enEM65D@HKe?AcfBouKJfP7T!6^{qfhC@z)6>WstJUoTQhF%147C~`CfG2m5NsSO zh^^lXx?YUsP(~JmYxE@SJ*dj#@JfWmSE+df+$aK$uM>0|6IJ<IHZOvyv9WrL3nz+k zbgtD*W(zbQV3jKehHNSI8|irK8wPEx=B|`>UIieRN4Lage|&l~m=b%(YBa-*fX>($ z&EV@{J#ZqG8m5=Rl-M7jRLpEKzB#fvE>`1>_a?rdl%R!q7a&G!bjLu1OC6rg1=5-X znvYR$>7@$kFU5qmoU)M|WnhBz75#%($3bZilPy~Q3$-w^Pje4PuE9*>GM+aBGR3!? zn&JKo2<YO)e~iAbPV{~F0N!^@iTw$~EqI<x9mYu7Fdnq>+?W~*K<?PyETg6&|Hu85 z)^Ncyt(R^0_3h<VyqA|JyV7FsN_60M9VASNeQYMK0=Wlk`RYBuk9r^VU!~4dQoFQ0 ztxM<Y<uNt(M{_@7e>*XdC05=+G&Cj>hg;9oYf^D>e=j1OV{~5OBDUUnlhAL7H{44M z&kKF<ayANb?^Wu`<*D%RNrV4(3kP`*^*@XH?-iN`%d_#$p<u6d9`rx0{QmU*>*e=T z|8X>_AW3(8S~@sB<|QYbn!x^hI>Im|c5fE3PEvE@!%({h2}8d%I57#~*$bGJ7u|;q z8D}P+f6_^Jhs-vLD_bmxrjRKkU8m3eLkUo(>Y!i>DHpLvHSXBJnMWiG^W$^uywfRs zpf^#2sMmlgv0r1xP-2`*%_%&wO~<5RXHGPt8)@T1F@^Mhz1gSrT->b&MVA>VuLcL* z`b6qD;d+uBr-m$E1E$7~>(!AF4-v~B<DoRme_jIk>-Dmj62ncH*vrZJlXWHnHY`Lb zOHGFPdiFhi=c`V(#i|xg?M_}=cmAaN0AXtUs?@1nkN|s$o(EIngLv8;o!OS?9?-=f zlko@_^!Bv<pj&P=HXf=voCN~O<@$1_?s`erMd{iIuKhUk^ed%xqkySjI=2n*jU#x^ ze-+TBvfSn`O5|j@BObE|T#>s3Rj*w2jpK=?j2d%)jbcZ+Z1Z1{Qu5>0w3273(x*uv zZOM!&TH>g_sa;t*te!mm1_{0Urg#ym{Dl;-(QmJ&>(~xIr>8YxkwZorHx#Td!*I)+ zle?JWN@oF(?M3<?W)hN9*rqMn=HdSGf0@3y*>}H=HvNip#$e-08g2678(*?)IBqu7 z{h7tiC(c=X6A<T>#UAg`GhCd=5E!QKALiH-n<LOh+{#-^-97B*&x?{I2xQ5-M!7_} z@_S>O?hNwe(|o#=7(yeN^ZbMH5rqn2eqkatkW8g5?&-uWQ6{D<NucHF$TPXce+?zY zV-KZDigd7F$$$GnLsC5d(-cXO3f-hW_E-inkuD`ttpD{OiHX67NKAYNe$?k-<X2<v z*th0X_!k?ZR0mH*pf!J;yi|YGv?c!AjSr@IQw$jj$FAI3zR)7fg~76xEac}hs^fX7 zIk?$Pm)^7pnR3^jCZg?9$Mo_hf1f2lL_>6xI}`ktswwB9$UHHTg0{POt|6mvQ=YNq zSSBxRqC>Px<_|LB2odJ%1djQ-#M(=kzxu&c%zHWJZ=Yje{@IVyFz-do;|;6*Fz@A< zFPuY|A4mg`+XHWOeuHDaF^k(3y9BPM(O$!9U5r2!sn;AvuT+E0YGUgze}(^dgSC8t zK3Ks8e6Z^K4OV@h!KzOT*5gM2yt7+yn=kf?sgKZ|V%-jyQil$utH&nk;xrDHCbnE| zO3Ls5tA4C+)cf&9BkxCJzkW3K=|^LtAM3t1U@zw-=AmYXqDVrsYt~nM-CYt5tz6zj zdfE0sD!tsx>1EUd2EEkpe@~+qDCAJzTZZ&<aXP)+%jxA%9ns6)2Z&x8;72``1N4Hq z<C9V;-if@YN=VVFsDC6dbvU(@nUt59N!$&>MrIP-Sa&9U8Q0N-Fp$1~p9q7+1v&M- z<HRWwR<geSFu3_LZZhf_fy<2!;}%O*!UF?sZhsG1fZnm2h4Bl|e~_)T+pxE!n&e!W z`7=!<{kQ}_XYmy04|G1J^Qfk+Kpbr+9GzpR1F}9J(fkKryXb4KF83u!!Vm&=$qU+k z5JvYwP7?2>k;GlpWd5xQlDPAOG?IWqQ`GL}3@ijo0!dszw2*(AC?j_XlEjyTXzB3_ ziSEd~<dEf$?XZ&3e_;>7eUbi@)ig+dvM<KIJf(wAeR)dn7~_vP>uIlu`chJt+Lu|p zFRae!%g^3V>q|ZM<<yc4eVN7kGL@6}wY)Do?}xrz$otZm>`T*8>PutHnxf{BS<qnH zx+9Jd()HUCo$-|L3Kn9p4Uiff{PjVKy<w>Hi!bG=w?Ha}e@AwDS!68*B>3(WnQcgz zAA@dZPI!AJ0oJ8ZKw6DCfkfy4{|;mzTTdoR88PPl7oHKo*zG`x;#-g$?7cEDTGzoq zhzs+lGZu_rqL(Vh>lM$C$r$*iq56}_pB#9{4^unfwkbIVz2DOqG{u&JbP%6rR2=Z= zP?XS|z_dY#f39meNN<7e-RRFvzElT{Y<UK`;fqa366yc@D)RypjVc4qGuCohI^moN zrKLTqQGq%78dVJ`V-3o9Hi4|c-y>yMIAuJWpp4g!lVScW4vboY(nx&1QT(|?@y*|1 zakGhvKbI&T;Ke1qFLyT$*Pk9;GDNSkP&b6db0|T7f76$`pn3zfXpQ}WCt?R+1uko_ z#uT2yY0sw99&~#we6MRLG@b&Z)4R{wu>AaUQEU=l<~5oj1-Dn@7bYsS7{qK4Tp%m{ z15@I~gr6o~tV@iF_S-<Rzcfj<xfz*3?58Q6*>8a&HznS1Q)zDEEem}^K^(+l&GQRV z(*r(Ce@8)MUZv_-Xe`jF6_Mm#M_UVp=~e2GG;_I<_HPp~=Ow2a-p~SzZ(32r<k3Bd zKN3at^D#sgfp1|7>IqBN<7$?+4V7}AFWc)I9PxwZv++n<w!i3!td>Z~GDK|o1dCF< zLVq@V349*U@v!!G(4mG<a3+@J397bvmwDD`f2Zlc#a?rlmu>e1ztw!DJ3MOy6aBZ; z*Sf>s?FmL~Vhe*h_3B%a)i<_$8nO@Z2lUqm<fxiQx%~I&Nw@GE)AZK~$sA5SX$;SC zjsALRBEv{M<s6<NkH3noV*%6DAM-}Jw8w*oKix;7+5SNo`ECegiGKtAD{MGV4iAyT ze^YJnN5@>{V6+fF%>4qogip4HftV#2wPA^f4U$X^*`Xm&Py8^pusOqjY513mcZkb= zZ^E-Iy|#wC5sK@NL{0v|Pgn+Fz;+DqeI%OY7i$?L1l6qCunA4uN1_&gE>E&hip9se zJkgjnFqJ=;{X;>?9VF978wQ&@<O%N2fA;Yk0@~a0ybH8J4PcB(0=G{*Q+Qkf|Mx6C zCctVuw*o8lvgw0thzL0>?e~VKsxScu9m3RJXao`uL1J&<ZD?#{>?eTe)cRJ)OOGS> zZFqe(F7IN2Wsq3l8swChMv+<pj05u080J{*B>d#?_Pk>IK=_+#12J+?9wrsQf2$`C z(=al~ph8Robv^3D^!=EwVmb#*>%!DSnA#iot7oZ-EqIpp;*S_aAP+U?*oD}d(*$mx z{=?r2kGZSw0LfanF-9~%G9I-^4iXIzUi6k2Bx8W8k^>Zs*$}6MI8$<fviSfBDNX!` z<Kr6Ci#<LBHRAvkc#(1;6%aR+e>Wr9yx}2%cW8L#YJK`k<8w&U=JWA^v1m>mCO$sV zl=1QE?IC`95x<8pO~o`E1dobo`!Q_~rfmnfXoPV1rsiQfLB<CNhk3{kjn7&bpLGAJ zgx7r7Iug`?KJzW3d{6EL)^8rS=o`k!UA6o*6U}KG$o8azGsXDvCLEmke{SP+6s&$Y zkD5y>S;`jV8Q>}6E(L3cS%e6ej?w8+%fAm`qC{BKwfrdvVfub?nyVT{zR06p73=zk z5<8U`w*r=w!U3ok=YW`iPwFMd$lV!(>2k@f#eOe|%)O<NH7Ls;{wt<Yuw5P_L+@z9 z9}P-ZB}#kk^;-TH9y7_@e|5TPTegzV6M9KkTe-l9N$MlrS@hj$<?B5D3Vu1^ID~E0 z=rVc2??_2{n=hvlXjhi0T3$UUczIB9ypT-512_nL_cHm87H#-kG=Kze>>a$7@V9$) zmBGl1p|Z97<1%frRH2Xe=dzgxY0>g`Vlu}7Zi!+K0vB*C{oMZ8e}4Ta?>>$NTA}~E ziLB5#Sm_Z3lJt>AuDY#>bZCk}Sk3a6lBYIO*)T(_F-}>?XYglCbt)(^FwMRBk&e@S z`IA(9gI+(KmnahgBlrZ#S0^_J{Bj!A1yAHiVdDov3>ePPekOlO!(FmUy+6?(-Vg;R zEQxcIeBgZiZA5D+e^$~d<OsUzgKn5uyqbH>49k$OG!oB>FH6BtW_&jq8~X__On!Q5 zt49!41jii@!rQ#Nnf2Qsdc2fd--6#jrTWwJsA1H7-=3MO`!3<8ohdU7-S?MUle%xG zbs^S=qWD?NIycDuZ05i(vtCqdLE@_pj=Q)P9c6Nv^?Y~$e@VJJVA?DP$8DN#K}*@c zxV(uPB&P#oSBH;mHOKUFvS)a8!LYQ4b`-Vz5Yz!+HzobD$DOGz=-JJ8Bzr~<jWF+y ze4jje7QY%YS?@?hlCXYrd;bC(QVPUIn+bS?EphZMANqcu;o60wvD2h01qk{}^QI=x zgY#Bq_icrHe+A7<X((ycI?J$XajJ;@HLEWK7XPif8->a5>kHgi{gc^$EwudVZOOh` zGefcKyVRq3I^e;`7~R|qb6TzZPDt~^yztD>o<tsI9dIuvl+&{<0^dig;af3=$(x>& zhl=neFY(gpEO>M6d#CjcA!D0aF4RAcFefvT880@BfBap@HAF79{;L^ykArt)-i3)S zvE1kI1K$P?TYn8N@xgMZ^$B>;wB)IA$oOJv#^2)$vo67(a_b8CnTIyn$MHREt;3(- zIQ*gG2G&{47GtMNw#9RJC&JbeO6FT;W2vYu0~VmOoSbF8lcyha3CjhUk)h9;usnjl zdSN!ne?>-{Z!fV3;!11y9s{CabhNI{Z&&~DAv&j6A545?`dI|UJESC$YXQ&YNvWd5 zn4|Fd_74rngAroYGUr8qbn|o!0os^>-}jMsh^pq<OM74t_v26;r3>qTH_R2)#~w6@ z3+C@E?qn;ztcN44PB80Ci$wnMCpp~JYTj|af8k)T?IE;9V|d*C`~#g$pJ9EH|Bn}_ z6gdmeD`#AxUYcX9P=B10X@$xl8fMtW=AIYnO;!xdwCJ9xKYYxdtc3Lg>(_Vg`gTZ3 z)NVJHKwj|m%1p>RQ+rDfAjKvQ5E!lnOh|075StHNhD*XL`jSA_pQn<xe)T6uH7$0t ze~siDI)3fHgm2gfh9~mzxujk{kbFij#mwX0YtmQ8x10Ft_-qrcjz2j&u{y4tk-9qe zkV{bhH8YIWaeim&>Ud{Ua&?^1#F?J230Ft+ELt7wg5xZ+^wsg?U9>vZ@zwEf^|U&+ z@zwE_lojoTl-04$SRJ3$hnf6Kuww*{f0loLJuQ%nlbdJb&Qu+AZeVr)_3oXo`Ye!d z-kMxAwomI{;JK6nfZ0vtdI!jVNqp?rLh3fUqTsgRWD{wn&qbZf?S>84b$(o3Av z7bspLC#8fsr7p=fVnqWI$CONB%bz*QpG{d&#g-NQ60`hEl3j8B08+o3krA9le+N@K zfQzyH<|JMlZ_Zf8lUnBCgm{C&wu7pTTj|A>`KxAHXp`^9BAHU%edVCDGeZ<Vkb<DA z?l-nG072Q-lo{hcH!&F&Oi!H*=b33TU_ba|`0@Iba|H=tc|3tCS{N`u0Le(Q?k6k@ zesb}vTG~jfd|<GiuZW*ym_IGGf5l69i~pEvwAkC8Y%$hqESxEU2?8V1N6{1*tUGXK zC6`%eAuQ#;#O>97s9TqLU|xx*pziQ}DX80QPT@kMb=P_jpYWV2a?2x!1^rkKR}s+V z_G#RFxU+xW<KOhp`=FUmd|Iq>g%Em-U+h3-TOE@)IE(%`>72AQ0z-J5e_0pa&biXu z+btaZV(Us8rEyPzXsyky<|`_qgyk-SB;C&>Yz^Q`LaMqS-(X30&Ks_8%;rv?pCTqr zn6JxIH_kWYsbsykr`GG6Z!z|EbEVWO#?S|A{(O?OE}O4QS{KYGN$d1HUaZ=XHENPA z;Qsr(@hL6helWEsuFPG2e;XF0)$8U$S}DEeHV>d24_JCx1a~FKBcMxtVi$=!x87zE z5=TO6xFcUeB&yw|({W(5-k`oitqX0{`nshHZFu6mP8Z6m^^Iz|&>)zAEAga@il{!( zMA$kdbs{i65&kmSm<V4-Qm0;`WHz5-gJ^3zR-!vF0M5z;|1cc}e=ZUk(GTKYy|{IG zz{2O?IcZHl!<)V;(X_u$)73n@fz=yGj1UGQI5+u?w>J=kUfk>FtzB=l_R!?i)}H6B zMSMnU1Nygy<Z#qag7?>cL-79GugiK#!5bc}tNaE~EVtdC5WK5X1#isvyq>Q{Ub-G7 zl=d^)!>W@4V8SSrf6&Q;xC=Ay@-$Jl4(Cn%+_Tj;?oL^gex)~FPtt5%LO87<7a>%; zW@hWA4PD1G3`{6|yGZV3)47GPMlC#&>QE#2ujdjOZfngQ#f3`Rr{R;3N54S-1fp%2 z1f@NyveWRn(Bsdf83DPh_dq!aiAi6w^Myq4mX|4(Vw(Lgf3-ZwK{a!A*{gakm%Z$B zN%s2QmRN3X^rn)6jhy)NU!P=<!ij&S%3dEeBxSF?4V=sEXs`(UL}<Vo69>>tZ8YK0 zEJSqQWwd?<Uq&w>2>i~3!4wyQ)0r27=RZqX2)>+UECjJXlD%-;?pmbB2T~~{aWYvD zxZ_77+8qIjfAw^#Sj&H|mPEKQ(CFPMBEpP`{Y9@UQd*B)ZRO%{z1ntG0)?GvC>+I6 z*f7yR;p#WjXH$Lpa@{ZdPgOGfPgTG0KUInFKTFF~TP@+Op7a>4R;0Abte;M^@C{9| z^{SN9oVsob<Fb1i9~U-&2U$OmSh<6Zc>;)K36&F9e@*5YvGgN^OP<{gt^P_j^9$|V z%vpfi2c6uh@-b(gH>?YhWqN;#xHxCoXyClOD&wI4<C7Gz?Cu|Iewb_)ez1x0Q!+L& z<&#u1j3K3v&aJpiB?;WTaWluwBi8=~ZXTWRe}S9#eHj7&)yMxaZcdE<H@NxIo3V+~ zkNe<;f27I<KO{yLrcHwfI6=;tU=ZZ1Yx=I9h;0zXKwh|GszuPn0y@vRRnSe@UXTG} zYxN}+VaN)IoWG!e+nA6qaf+AABM6S_NvUwm=Wu*7-hktZjBv2rD;`b}m_|H|3gzFc zEPQiaY#n4ujJdI_SLw@oRsUuE^@sF@_L+&Pf3Q5pVYxK{%kNhAhXt4Qz(bY<g&E6w zm9eZ>^<CCy8Lgf6q_(z#w-$37tzF%}HC)yU6OAPYWaE^y0r_mRF(7Zm@HQR8EGW<f zu|6{;#a2bfeZ8!r5CpfsZKf5fE+yVl|MPYfJY8SL(ieTcG^0<1E8%O4A>Pqef>X)K zf9((0^?h<`*Z1(Qf8{c|K4w*#bD0wl!##Uj2In#?=~b++xyZTfUtV%9TMU(}(NAEx z*AK(pWkSnF)`R-$dVCIFT|4H`>iTO_Vrh8Kl?v7e`uHcn`rXRZ)ipRLxw<Z#qw5gx z%UAomuc7d9D0z%eF5i>Jr#5haH*loVe`sLr%Jd<xG1ea92W9=%p0ecHQ`T?oDNC$9 z*3#5gzvZnqCtB@zJ-yYk#Kf)R6SvNoxMf6hNyFBAB}v0pwPBA7rG`T*Kok_<4Gm%Z z1sTGQZcuc}!X~a9h~#I(yBC0zY>qBJ9{tRYZ=n6u!|l2)j9GVjjok!2o)hv3e-1<M z)qrUA+AjpY)dE_fCbryU;%945i!G%lB0$_kA@9cHV#`0dqFsN&zYu>;`jIm0Px-B} zjo4Ae`l&Z5WE_(E3mNO*OA#_Q@G_y4GH+%mvm&+3&v=>9DP=+#%FIkD6R&|xJ0~Rz z+?t_4acTjyR5hd&xGY0~<NJ~Ye_*6%B0<M;EF_N2<dfd|_d34SUKP(x@}b0DhuHGI znX=cI`WqW8`f(Ye(+m2^NQ0AW)kSF^<)>jDfAu5Wkmiwg>Ofyf^5?q#648c<eAQn- zfi=X|x6)Vr*?pJY0-#4ZaejvGG0d>=CgPYWR_BEN*n9Kc6m(BWv-6+1f1>-x_pfN~ zyJ^EvBP5{DEaU9<=<?sm|1b6SY<GVkx9<I4^tRm9zoOQ?XXq_Zf*`iOk?f4#0Su=P zz5Ybzz5eA1-s_*I_u7}K*JWwFHg0&b{v*R^ezhm1f7hh-4~u-AVcg!>)4wOQ4C<!_ zlfd2gpA3oqR>)80^~2=_e;FVsPX*eO-pCJB_16sJ`_=9YykHPe7-zI!k0M4oGpYV> zPB=JNubn`~{1Rjdn*V$RgU|B)UAmtnnE^;9DAV^((0OzW6d1#0f^`#8SE&Wrv`W1@ z)>x$qUrv(=pwL)#`P2+D0hR=r;MuVx6G#(CCb$QF)W7Z1G-iE#f4oJA-_QH>#ucco zTm9oxp&v)2i0YR=r_<Us+rqv7&&K3vZyxn4Y<&&VJFSanb0Gk~g{`B<8_R#&6_nOz z$ETkwMS&jcabTy#PK{*41J&0j@?{@+jPKC}aJ3w(FTiREjN{r8qPi~i=NbiHzzo9^ z8OVwOvh(|B3&_vDf2^NBQo<IY$BY_eoKxc`*7T0ziM5n-FvHShxxd+H+|d5Y$F1&f zeb2#^t8Y)qFm6~9#!bDE#_czJ+}7f_eZLokxOYs(ia(%8kIY*SeHn6(MfYJR^HLoB zYMpctnZ!-&q9QzaOjD~K8jEtHLs}A9x#FGZcXc;k>14jrf64kvr$@vx4lF@}u}%RO zTF!(%iNRj$q6KLwu$)n23>rh{XN+2vrum_*16tZ>J5w>5(6Vfn3eQ})B(}@|h4UPb zUR!~|p=CPYYA^%iqEPF>49wu8ohf|f%Czji%8>mZDcNHY-K`tP=YbkTsa$QmOZ>ft z59Mz!OVc>ge+-C)d|ALSJrvwWT+dGv7pcG8fc0<Z(scoeQkZ<x20D#Yof>bpuT?U| z9cbO9NJffv%J`&+WG?I9wcS0bPAH_~<Z|KMpblnb#${BTaGc5ATGU>|mhLQLVCW!R z%NqUNnWP!Bza%XMxX;KwS+W9WGi#TGqHrGG-y3_#f2fAWTWon&AeX(hh9m}X$a(5x zv|RcN(v!9Pvo5BnI@jo}6zDj(Jj3wr+>t^J<5CLf+m1R}Vevf~7W}7nq?;$4TvEX7 zzsr#QzW&)00;Smc7a@r|gB|N}vbZ|y#BB_U;79=SSPWJnLqjLGrw;A7&3B?{G7+b` zL`PVcf0qAAA%%y%An{4x{FquupPzz)aZzvEYp+u;!K3%v3_wx(4OI0l%h%?Fcu`iF zLH<vLFIhWk9C3d?;<)F3ft8<E^l$a^Z5dm|_;axfPZ{C>1>FSst|B>mHjL?C*>6%S zOPieO^K<EeUaoC)RU~|0_fyJK6a)dIX&`y4e>TwRGjV$(;z6*nFmKUN;|;`TJ$?wC z7s3a0qtZ{4&}39zG$mGq<x~hXR8vVvKT~Y9TNvd>%Up?+v!ZFI%Zd{pzK`Gmv*lDC z&zRi`-_;eJ<fghALAg;}$!ibmCq#^rZ$$7w(5?JH5PsnYg6{1|lnuT~KZ1WqN*!+- zfBnOULSunL5HKOM+=2p|dY5d3=Eb)v*$B;RRD{$rr`rrm%33^)DHr3;2af-o9!Ttw zmFYvPFd!?Q{c*7_SgY?vjS@lR2Z9jP*lvnoHbFf!K}ZiKI09X6lw4bBGML~=XEK;z z!KHm8onG~lrm26Kz$2YvM{TiOTv@Phe;qB<C-N|=;wzfM_kavyT;c3bj5%9Uh|$1# z_BtF!{ieUt&1&Z#$h)^!$Z&u3(gQrsg7so&f=Z3ZLQeHxM|iZ&IsrHZmv!=)b=X*) zVf)>D)7n1{z`MqooHxof{XxBZbBYT|xB79frlo~beMN`%JPvIaL2F2r%zE~1e<0CX z?0v*YW<6e=>SPaX|HhG$KoRZ6UDtvKc0u&L0v}+BiJuc3R|wBT7Y*vP4#fu|F>5Y7 z;zGR?>0HU3_oGB$H=9lk`|ys<uyy@h+KPM=_qPI*JFVM;i8{K2yp9%L$F=?I_%*Mi znb*-sbqrdK8*8zXLNX8o@q!ZKe+4MVmki~SUx_>iIIfcW>Wztg^x4RDS^m{nVc4=U z-g%}f%%bu%7kNvfy;ibGtgW{QxThHWcqC4VIX%^6p$Lx6()>54X8hS1GoJQek(#mY zj2VSML23`aE=Nq6M&OC&*fjWu7;1WaG*Asx46Y`=Wo^6<_sslOHT#`Jf3VbC2T1<v z_)m=Z7D;^q=1aMSj_H>)RKeRae6y~=t!7M{KNiv+F6VY*V~_MVYe?HTdMp^p!~K>K zx-k$W197cNTeKx%sld2UfL1<OEdOv`Lhne8`dh>Y&5n6_g%|1-mZel!mZ-2SQQ_o7 zg{l3Cl%@9PA7y>}lYsP4e*#j-_e9wb_Ax#@c|n5F{O*Du>`$@>hY~$V_VK?G6(;-h zSV7<ZB*bA-u}FQ+civ|lAlS9d@Z9XHai(3B;1mJ_fs-_1c%2#CNf1?hj6zE%J>yP8 zuDeulQu>uV*XJ83w(HA#lNWVR{zPOyC{{>(sc*o{MEgl`KH;Rsf6#r;SrFWB2H8by z{V)A1rd?_ylf2ksxG&ND2}NWl0l~UB3KiI)M|NQ`g%mAPD>vwuS?L+4B5v>6CkPHm z;|G4J;%46AbCRu7Jewk<s^N*mu0kWx=xZM!xQ9fM?jXTj#x*7620$BfXAAu{`;+#P z1UihpZ(ioA^SFPhe?7sA?8J-g%=)Lr<QQoel@t2v4n56%2=~B(W1}GXf0&Yd%ftMV zH|%gw;Fw&O^8I@HJ~Rs5v8xMCVl)K(%ZPp@{b)0HngE4*mSeR2loM5-J%xI`Mh967 z3C_ZJB`347M&`{ACF<j+UN1Jj{KKf`HeL<wGZYc3^&Bf6e@cP!PXJ{MgIRM--CICr zHh{}Uv^RjlMHcm=zy7YgjdJ*2dnW%BBYZT`cTK|PQKJuVP5S=TrnKGs>q!F0pIn~s z|9PhG{*^=Be^UmV$Mv-8S%;RB&ExwrvUxlVZ>p&q8GLN39x)}9fbHG{Z1?K0-3x%Y zpcxm3?Wbj_f3V%aVf#m!0o$J6rorYy*j$-lyMe>jNI>P^#$me_e$@NA2)1kW@GS@% z1#0u3InGW>grm+IQsFD(@SUB2uk5#dBOE!@=f-7#uZ+XD=LUjr4gKW)7=F|Zodh46 zht&tZ7lef8P>B!_)my1DG#h{}`;)|FeH3Z#Qnfs-e<>apRLQRpxHeU-{^ckgo3xj> z47W(8-^Hr?9jU+mQZV-Lalf?g7-t`4JS0_Bs>6TZQ-n@|TRill<4*OtFXjyKTB`Y3 zDRPD!jwXTRPVCskXpGfIW2_<F@X^?tiCU&7M&qx)NgE9)bd!4S*fUeh`J7r#@X=^O zYPq2Ue?(XE0HT9b+_FfHfQ`5o*NMTYChovl$4?v7sP?}nG7d6M55*HUK3qf6O~?K; zk{ZW5@zWcOPJH%sU(@kT>QqODPK@K7n88Wvdftg)NKy?Oj83f8*CY;n!<o0c%lKgi zgzvfQQ{lUb!}s;|27K;x_{xyvU%fFysGyrTe|)cBPw@SUesU+kkJ_^y;G<AM7Z8~7 zb1B#nw+#|btD?HZn4*H8fu3YtPqFEdo{_G$3WDyt_XBj5(&hh7+jI8uE<cm#^3A{Q z+vPI#t?~>*;^SSuhj+P>ci9D%s~@&whvH@2I&sbSu#R~%o#MS*FgO5Z-1B|%Zm>Sr ze;J)A-rEcM0>M3)2OANrIAXrgkHK~&ICOmiH}yJh@TADS(9L@}Zd$KR#m!GRZkn$% zaC7~y(r|MxlEWX%GT`PX95>^yBiwvJKe<Ivx!T@F9B`5jTQdHfKLMLxhs}@ssa$DA z*mk6iTLXvf(=i5Y|Mkl>*y<3r0hwTHf8enFbqv8aiNof{al4$u_Ob;JF&ggEM_=RN z&-4&)6tS%_0c)cUYhySq+|s|sq{2Fv!&;Vr^{c1)hFfx|x8INf*0~(k)1?IK9|+{! z8u(Ec(xl-5f>R=JRU0vMWsHRq(NpDwmAu3VSAv364hggVA;~m5S&BJ7%j46ke*|Q> zU+Mu#je>?0Jl>Q{M+YOZWlW!xMgFum#Ld)eQgPG5aWkUSz)jCD($6L6ZIbBA0|TKx z#PnGsb8QHQOCP7$H(9B$+DNIIOX@SU*@U*x#5YWU4^6mhgbSdHMfBOJhjd{!^`CE2 z(4neS)hi8;xMk|J6-SfM*_eLbe~;=go00*IOh!%BhT}YpSnS#?{T3GlRb2K9Qzm4i z4W3t{IuDc8eB=)x;Q;qCaSHzHxL#u%&DG23XAzHnBeS-Yp6LO?<AVuZ{3YqYoamGK z@M^BqP{g%rP-v8`{G<>vOf69MzZti3?hS+2-;~YErCrMw`*H)CGW~_|e;;UTEOPd~ zqhh3`;@7Bj?*9s`KjJ?t^p&+5WU(;u@TZKyuTj7GC)&fbz=$)~Vw`>C(S@pcMm?}l za(;l)I5c%C>albOrv!RS#&&bYW}V~*UulvrU5`t_8TOa@E9ohV&>uT9>F8+(CW#O7 zV7h~hU2?u(u5-UW`{h3xf1NtRui`WO{1Rh^ANpxup~s=lyfy>(yNYwa{Z|wBi_%Z- z$Hl<?7Qw9KrU94k-vMfz)3^c=Pa$Is7)ArT`0_#2BopT!jTN^_t^JB7cZLNwA;4lU zjsDmCkkB_4GK|&roZ+eczfJG|)rtN;nb!ZYDD=&|CPV*k)BArFfA!zP`+x0l?Ef2j z|6@<;q*;?3!xSBPHW$~=`kHQ7(1rIyaY6T({GZpze)0#42`%G;jJ|TeOu!0y<Qg}% zQ0;P&`p0dCl%gNurWYOK+*$;JT<U>Q0D4O$?(2^nfJS-iYL^~|m11}#F0*>IH7nJ7 z%P*zH?a)^*CFLk#e`6)DhfcayC9dGADeYEgL0$2S4HZxhTV2?uVTTV!&^LBRB^_BB zMbKD(i<>)%^JLa%D$$3c0TKsVgh;3L!3yqc0R^H(7Q@xc`Y-*tUdtb4H49<udytP? z0?vPp-`_aMO2hWzm1e-e_ZG7d9JjK9EX6$ExBtX*1aHHKf3*XRfGlspTZ%KwzmfkE zs};KZ>TyMRf)`)VETzMn$XF)p+})5Jn9~y6UyH6wmaKG%qAWFrtux7=XgpHw(gwDf zK<ij=rAc=*nG?yA_0#SQZ@4GbYT3^-f41qG*W3)BgH0yfORmoRDaRBTWE@tEmu9Fs zM>gvR&g&CFe{B^nko<HKgSjDKQ4UB|gUl#M2>M|$@yX9qFtxO7_S}c|2d<QZ<4)u8 zD*q*Tj~G0ud#olh;pv;Rd?!T9-wWR|K$FLZM_;En;Tg<18F7~mb!uOv49RRdZ7$F0 z&NK9T3|u9fX{?{p2l!^Eej8vSp$HRTrgV9Yig0&qe>pXz<-eW<@OMEovC*f2saUg8 z$%<-r7V2bFof3UE=^~dxMTICCzA9wi|L993Vd2a~Qr+;tnFyqM{^X3r5x5}Jxa-nS zydcvs;Cddn#%|NYNc@My{mBo&4aB`J^Jjy&pA~dxJn~2D2NGne@n4>>`(2c&PvyK% z0ZaUjfB5vwxERO5Ps%y+4^E0IgYI56!HlSiX{Ys#y?(+4-_J?4756g?qYd0HDnAtr z<1V(U<o@y!JjrUZnF4b$xe$_Zw{>wv>K2%th+E08yM(sEQp~uiRZWDiYo8U7_;O5I z{s}D$&154|vs{i9bmD!qWKkOwo2eOH>bD<|e<CHtQ(8nPIQyc-2C!J`j*H2*Z4&(V zq$aPuSnryDQfl&_E+#{>N#9!V+KaUOTLIR@MNma*RTsA{8%63bPJ&Hw?#>L@^we@? z3BVkw$rl-b1?;KGgHix1(L<HJbsCn<-)1mBr0x$CaRiPlnS`s@dFs@Gg0SX7<WooS ze+jRUP_MjN&>a_eW52t|08RIj-%0|`xh4{D{&1Ooao`#hDAcOgxkPGQ&UUtXQ&Gy{ zOT3?W4TfV?F=D}r)Ml<Xnh8wPNds0*E&sz)L>u-5&I{G|Iy6oF;&P)}W4j}MUTSq; z6k2pQukcV)JTImA@1Xb!4nzZ=>U~W7e~InB*~XMpa-S|Vpc_Wg*9&yLB*+0nu%0ik z;3zY4|Cky_(zXHkeRpg!)nAq<@xjTyC6WO{@NRbXPK_jD<6w~366LbZ49SRHr&uNZ zxhy`2?*b-m)&55lx(+|IRBj7gs2{_iEo|d*cI@UyPk}_~;ROtLzY=PegynlKe@zvZ zt7%cr-(oj}<@R7o&;Y-_;Z;R<oQIw=-t_G*-nWnFX3_p6yg4;Krd+(k%Qj-j#o<qw zDxMfR@W!^lEwUDEiTH1ok4CeRwSK<B^M(;^bfPkJVC~Y6HL-T-@m_KMCYhNgvY`WI zM_XW>XKgZ6X^$K{q)}MR(l$?Pf4jdkF3Q6ra&V8<UK+t5iz`}s{Fk>J0jVMSWga{a zhv#AXvk1?F`J<)fNPs~Jqi}!Gk4v&fWUYMJ2=qJ;g&=Q2Mez!pKE3JNMBX&4pUttp zDuH$1vcB6yH>qpv8B`Q32{U++om7-t=qLAU_)*{eyJ44pLBGraS3N;&f4xArZy?}$ zY<&b=kF8ISiP-x1rpMN&00|UZzwSIew*IX1jN>19sX6#smbjFLj!7nB>(BmG3NWP3 zRVQ#&t>daXecP(~l2lxs!*RtfF>rO!(!SePH>t`c8E|zD$JNwJ2v?)%C-=m~fUCd% z&A?StRuVZ0^T5+WLKN4ne>VudemxnABX8-R0a}zh?&&$`oj-zHI*d<Hjvzgt(Y&nq zi~LD!wg2Ca%l2XVxO5KV<5JUaTx$A^OHE>2Ha&%CwXVO&OmUU+Fb2kdwre-_qSWEJ zkPpv+i;Uq}wxs{PBwt;WVGH9zK0N=ph=zyJPwsbxFg)T*`W8m)e|;eZF=ESRl8%zd z5nGHsn6gB84{n?SG0dS~vlRT*ne(J4lv@{_tE1F^u5lg475`CDuH^L3XhbPfTqaZc z<rx!yfvan})|tXDq3qGU@?VfK`o-E6Pvk+Hz^7)tkR3SeS#2=DB*T<ho{x2*s_ivz zl#lj!N_TiJ+38nhe^%8C<)#9wo1nA3a(KR4f4&IWA%7eMEN~41s<q?4r|I8Q^zTXf z_XPcWoc=vV|MsT(i<KqDmRau{uAkEL58|sfGD!9Q(R^O%f(Cq}OT+Vuu*j(4`k7sS zz8*w1Ul5%9GVu@os%iY`yNfailbiYZ)1=Sa2j_F2HxLt!e{N?v{~y+_20p6d+TXpq z3!A{Yn~zNb1X#jCLL#p**cyS<1VQ3+u|X*6uY5!)ND<3QHV`UkLROo+C7R!ZmZ((G z(w|trsC|zB1x<WPLZuq&x1x>s!CfyXB2|=+`{tZ8bH6qb?R)$*d+*HLGc#w-ocZ6m z=bQ<R?v8`?e?S3Xi_r(;e;w4>?B31F7)EhuuYonBpF(rHXg1wCPoc}^@W!(Gi(HbU zHggx4nkf(_pP(0h80pWxBZoV2s2)}o1Cp%1g;3|IteRrHA|!Ej0efY2IoNwhur|w- z{-Xlez+vw(s!M$aKiLTbK5_mKsxS8g*}4s4y-X44f7y?+O0xuV^Tl2u|2*8}Vbcf- zL2sf9`3-a^I;W9tMo{pfVv9W@?V&tyo2Ie4z>S*~MsMzDHotO2Wi{h~b=#81GXkwQ z#VJmRfAmXY^hmnB?@Myh2cNITvW#NJY~P(v0-I059$DbwFJ!AFeTzgNOv;&J0J}r6 z_#$c#e<NxS)0uW<Cs_k(#?uXZ;R$0f5Z?~hl%}bJtMzm5ihb>_3O3fVDyw_;#X_?X zf40D$^DVIVE5thtq1oZvh1g3g*8*ow$WmglY+<V}_EU_A=Dy<+0HPfw7|52AmO&C5 zC%hG>Rqe`j8VV&Aitx1w%RrP{85QQJB8J|ve`Jey3?ri)zfiIU&+sG6_cj$eq5KVn zs9^s%&Ix;u8|v}nFRyxWbAv~QeGr#}_CX*KcF|&=BZR+_J)Z_}m}OCO=s9JLz0ORk zGn48(HV*6DQGj)htS7r#=zwyf2v;LE2PXUO+8~)|zF9;!)ySf$75^bRtusMn>c@Mr ze}sshP=SKPYJciWXmO8T<z=UBjU7sjy=fdawwxN<oR5uN!PYO9xZ!JA=kl{ZWL*B{ zq>adMB9cc$P8T4N=f@(E@psVqxy6FS8X(bbCozIZ{G$L#>?9JOk3kZj+ztld{-6WW zTE^h&_#>cFkx!g}nGSZpqiWFZ7gT}Sf4?j_UT?!uJQ*<VUY?<=3pg~9O<Xu>k4?AH zoY@!)2~mq~RLzgrz?PGBdA)?+N8nOy3Zp3uo_)Cy55R?Hf-oxc1~`O;yEqlWcjxP{ ziU%fsCgW+H?!;P$5&MPdoBn8}5v^B=7W_Z}8$2IvAteJ5IylFB@i^Uzn7eQ&e>0!3 zXhrrc2tV(i<9l?f$(__GMyy?;hV<};{DK<tSV2-lx*vyWfliqYZueOV$7Iy;(;^sz zYpYyH*8jMXh+y;}hZ!EF`<zXjmQhtb`6y10=A$^3kXYZphQTs%CXml`EcTRk{IDH& zn9d9`=jXMHPal8`DS`qCjO@Gfe}rTf7~!YEf61qSRu0Cy0`g@57HWY*$7JB$A>!R3 z<ejXp2F4xYy;(=SS&^?ZPUeie=P{F=K816`OJd)}5CZa$sUhLGWUqeSF;s6d9#!6I z&=x)LC`CJHf6~+w`T({_ozMF()z0ps6Hq0R8mPjzTNz$~NI2X=neiUIf7*|aVzu1L zc9`HCxMx7gCeMTp)xDF<OxM#9r)+|kFUJWElh+oHBTn)1r(cp3FMo0C0ZWQ4z9>eS z-`QIQ_BWt)i+Y(_xX!1mg`O&k3m?>He04EhvUM?nhS02cw_?x-2sE$xAkaL^s}AzK z8-mun2_1{^J&`GtYbgEPe@OmJq+HM|w?4!8d>riV@Z>7Ea;`}wQ7lYBxq&n$g~#xD z_i;b}7IfU#>CrmloeWOgeNcjT4ZxrkJJH0VWg~U~g1FCQ-CvmPuudY{BlAuggOljh zBAi5Pi*ORnSq+Yd-ph*M+tMgi#&?rb&_oEU7Q;()1Yy6b58`dWf8#s>zfe?x7##UT z25sJ32xQ*IoAuZzEpULcIx*{6cB7P>(=<L5*!4^gy%PCnBE%R-x+_ve!=p52a@U?H z3~p_vaP7f>_%kK(0dGA%U$IkVjNVOrS&svu$XTe>fFP>{>8_owT$m|YeRv8TxUOY} z3?H6tg@zB$Y=$4Ke?B}*>oiUIC<8eUZEN=E<gZ|i{ykIF)`qP9lrWb*GUI7v9vY1! zGm&7;D+Dq2tU~pM0#Um{=T9_^4MJN14Z=<_D$7j?@OcJ)jk?)5C})q^>Mo(W$57qR z5Mo$Gs<nI-AO@0SE13aKn{ZuBWZug|GOLJ84`GI{R~lXLf8F^9zKp;v<8AH*@V3%G z?^M9A4P%|Q%I=kIm0e1e-Aa|EQe_!b+4_};a;`71Q<-I_GLfhh5tZi&qpT&2a>Yv6 z`r}i;7YmXs)(KhsDvitH8j!_Anl6hiq(sPsB!&}_w(G?dnu<cCg+TRdW)TJbqWt3_ z^mVHv5v}7Qf7+a86VVD1(OX9uBI+(MMD$Oe+C{XhmWk+;G!)S_LPYCy5tZ_twuZc} z+QeikG3#6qnYD>l;4Pz(Swk3gb$Xch-Abs%PN<Ry{WlT1nh1TBhlF~fP?){yRq5Kf ziC^M73Le(XDGQ}H8&vOld_<`)M)tuo7Jkh@ez_}xe}+HWYh#`IXe35i-SXBW1?4}Z zD7M&w=;f@j6{B=Efz8J?K^sc>33cu5k=V7GvDmfALG0Q;0n0X){iX~)bzH!%8sW+p zLwv#d*{1h17HZ|!yWluT<@6EUVR!$m%!P9sO7i2lQTM{PdVUT2N!Z$}A=)jc0^_o! ziq;2Ue;lm8RirkduvP_!AP?gUAxDW&zL``rdu80f=;A6_dmC%Vi<7Axt$I6JP3>sq z?Z7@nuVQ4kn%c3oiVvBo5v~0-VymSQza?(WID&(M&GFs&K3ZFs{a`XUHBV!YZ!=Z4 zExFTLz&#mV#)ep{+GbQ`5RW-5imE2Xq^Opde=?S)kc)~Iy+#-NEKsuxc_&)})1gT7 z#!yF<X`>J%`SB{Sf9nv<L<<Sz%iwM;(C~q5Zoml-Z-9*ENxUj8u)<pGMN!NpoMHsB zVO^7O?U?axxS_~r(~}R9SUZQKSZ}6H=V>(cN8F0TL1fbn^%o0ugLn)EaqbqP%~ukA zf1&owq*bcBieAw{L-K)A+#AdzLaSdYo3|egbV<iGIA^XZNXP>a9e~L%evV)gpr84~ znm+NN)WE7J871&xsoQvMtS5Zv*ENv9hk)~V_gF_(=m?R}9_3d1DfdRdHFqDlSpY(u zX-AHPN04Hb^%+>{VfP0yB3$VhaZ@TXe+AMEjCf$c_rr+b(W)%SwT<;L8td#~IM%)S z=KX_`<%kiB@&UmG-Y1Nh(;x|q2$#UZj(Uzp-XH7K6JVs^R|~w;i$L(d#sZm_dd(QI zgR*{uS$}3X$^|D0Bl<Z;Y)B#XQrv*+GVWL|O%=c}!tUm#nt@?ygGt`tAv-Vxe_2Zz zM!+yaz%W9qZbqtY6>;M3jra5rW7U0jtg-4&I$~dSXa16{x(8AS7)AszjEGhD>5pYw zL!_a$6=i@-`&~nDIA+p{@^%P^<M+4V)I%vCV2DgXV0cf6INvRXVvZ>Rr(C@q(Zz<? z>K;UO52m_b!+n~-e46(8w{T#Xe}pfeIBX;1B{DDMAep;~OgpXjy~~U)7{Cy28E>5~ z8!)^*&kpIz?UkidW!F(<qo}fPMqy<&%McirhU`?ndEZ7Qlc=N<m3Qci<j;x9_+<nP zb4UOMFpQ9nP~ICTfFa0Y&%pkGA<RAj40CiDZSj5_bn>Zcz$icXOJox;e<TsD<02Xv zXcN&~64C3j4H3-^86w*Dp<P6uyqSsUxPb%=g^1SaBI^54wl!p4wvAaMh*=+HA+w&O z)!`DhBr#@5H}?$;fl#KMP#zK5OoSE@q1#6y*V~t(8mNy5kYomfehV0!uwO}u5$4p{ zQb25}$TH#O(FR*qkFesue{N;dQv3{1Pwd8O5dr!}SP<a$UK_YAq&~bEz&<>bhkY12 z9Q*LaFAxE4m>>{f!vqTgY}Gr*5G=nY%=7iTgaEIfz>!x(M_v&V@``Ze6%oj*En<Kn zxE9C@Cm4U4Bd<7>XeL!_0!M(nboh5WYs7&PYDAOXh$d4bns_6ye**|ZH=7!<Il>W{ z9|cadqsh{a&Hc4w199W3cg+Yef+hiF<4XVmP660!s&9*}(^_Ca3BkWOWhU2SP|k8% z)KOG(>gvcBJL#}w-lRDR0{UWaTXSYWPJD1DTle0=jlrIJ+Eisfa#U7t)+fZDGvGna zm6kvzJP46U>TQs5e`~~mjDBJumO;q)%eP=3F6vIq!fm<sH(?8U0K31OOWF4N^Gu<Q zq3scxrchMbTW_07x6xesXSy+$c8xUV((i`Y=h9U-;au8D{e~YYTFtMjqH~P?r%Teo zUK0n>&k+ZDzXJz)bq<7Cm(}agBMhoqiKl_XB^nO!OJjVVe>m&xi#RVQxPb$B;tkpS z<ifK~I~)g;5;$!wHdz!yINm9lfg~Kmh--F#fE+>E?sOYSyO*@giZs+RlSZJH`H-|s z%Oac|K@Q7IfLy5;fLs7$K%Bo3GQd}G9Uv7n5IRum36R6e#HWrjbpZ||Ocxz>03e@z z#wh@~pI{z9XaM9lUVo2(9I*C+Bzv|}1r1-rq4H)AMqq$gDbNn(eo7BEd+>Ak`Mx)g zugS-&7O#8;INgcgn$vjNr>DVWy3?gjQoG>Oe8vht+B>dF*$F3~sv$M6f!*(6*DEsM z3Zmn(Ot1n|2dZwgrLjaQ#I|qBlg!`yYX>n#sH}Q*keUK}*MAVS+ONk;C{=Fiqx`eB z@|je=AAeO0CQ%s%gZubw3aVMEz)Om-LM_nk`;%R#!8{`_HTIqora#r(1Rv8o6`4R5 z8iYhD7nZxwotE3tLU_LTm7cHOf;fDmJL$=V+(NHh7=8vR^k%%=&trlwsdQF&bXSsU zJs?K0Z%4T^<bU(+0JEI2dP;}l!bC6+Xrm|;y5m)W9-1OpIYA@_$$s+e99uv<BOFLs zCD@Bahr+%#yHeJ@PQg9syY_{Uv^;<xA&<X-?;ZQukFv*2a!7_817L8}t61j6v)Lqg zxg0f98<ijTIx9b!j(pf!1Pf4*rQXl3lq{;t50UENlYa?(d0xjdk^_i{@f9)c@YB>A z4t-3Gvv)CO(q4yTHOdgrD;e);8a}+6U62LG7R}~dFYH<3?%^Z2%Zqw}5I~RFf@LI6 zEtR5~y5CL^z8|UgGf?-Uh_>_Ea2Lf}sO)mTFq{H~LOkW+|0?<Q7V?XM{AwaUhm#k1 zQy_01%YPFI;~*gnh2vg#A@~XX`k-ulTq_|m14S#l+$VGCQrQGyc$(ck<Is_3KU3Me zU~R-#>HY93T?>Jx8@^_m_EPsBS$1@!sB|;CQ{K1_UX9(=P@vh}d=|Zv)|~~-XgBJy zoQDi?NR_2Bp4s|zE*OTyAW~bG`+;2Y5`ws8pnt8K-0O4k=%zY`OvqW*n>P-+xV1+% zs}^4@K)GiMAonhwTWW*@K}L(|kG8l46FM4Cv8vzUxS&!1gevg>n@x&GHyp&HmP%Ko zDb>RyiN5n*>Zp~~*Nn^>ccMjqHtx{^XJ4j<6e~sgL(SkGz|@2HI&ACPya-cn-XCL1 z_kYX6kt;6ZN}5hcDxkpIm3n8&bwyNVQXA0f#88+CErB1riWAqvew0Ss6b@WSNy8xt zyxJL-90mw|EJ}cK_7S$8f+tEe(B<|Iqft@X&#<h&Kh0pd?pxtjo+J23x3Zek<vui& zmw$vNc0`#^%6duiddS-FP!{Zay!f(ZK!2n8@I40JT*w4{E6>LGxCK%aS5IxWZZ<CT z0jh!rHPQ)MVC~D?kQ?p6V0lv>KA5Z>xV;$WAMP)ot!G2TdWK4P$z+L}vtQ6iU;cy2 z#fQb!Cw>Rd?T|#dD<F;5$D~!Rlsv8TxOsP}I9^%vi=b4ruBd-cZk^3v)e@A61b?Vz zJT1Xvd92D(e*SW~<`>daE~+S3yGTu$X0YY^^uQr>Pz78&P1jnEaeX?+@(tT`fU`c& z$orLMI@q?tg4w9Za0$*mnZ93V;#&ot!0G+fvU3{K3yxQR>tGKx>|sBZ&Q7ft&dtkl z852eXu?Jt~O0*iQOf04^A=jR-+<%X$+$HBLmqq2W&sXkK5U3lt)QB@s`F7?FvaTpv zw@8RMff33&4D&)GVI`b+isdKnLoCgWd;1O<G?!I0myCN~%`hAHo}kJ9lMG?p`-fQ; z<KDSo+?)2LrX|^4pTHebcOU~%_cQq8UB!Nsl6qlJa*u=LoXtD;i?S&;kADNhX+&@h zM-!b?G7<dhD^@$6+2(=$i<b<=;)!PRt3lCJe&wpYlJlz`-8Kzn-h~O0p@@VxMZA7H z$rgga(k{GRZ!ULr+}#kugXF_zJHxnpIczt27qP$2?l_?9@Y*0*7NY+bhM#ZVLQHa? z_k`M^dX=dG;sH~|4(i%K)_=9T|Awz8RAm-5trgmWDhHMWbr2taxcOEl7$=%B#ox5e z+!-HHhLez+wxgI}NTT~TIHZXi9nvT4H=X@H$A0f-zmnVGmf8RCpWEq%e=gaqPxMgc zw4$(A3-%TQitN%#SG2Gat!)`I@U6ss1#B&G-Ut+XsVh_?tNU4QL4QBF0Tanu58S9O z9&j$lhToW$^!_dr7RX1slN@@IkJ=><Q1`5(PVte0j~2OHD)(jZeaTAUxxjvxSusFk z+2xtATSazJE#52AV5utJPr@DHr>%i-FUI|WKp>4)tO$E=?xs@JrcgWOGD%0Z7Erq& z+x;P!?zIH|=GULw4S&yp6Z3v5@mDIb!6?xtN<2a(wo{3jMv0Yr-Bj7_RB#g%Y%IGc z13-Hodt`v|$mN3QHB@$C2I=x*2K}yO*S?sD;|D1-FohhTy`>p2DCu2PXB|uVH%yT* zMVzV*ATD~n5smF?Ch2u%fAt^2mm)mIAXu>roXW!BtgfF=RDY$>A>D9jG^kkP2>NBX zg9Tw=qS@Tk&bM0$a8tfSgQ?wX(_MH_sW+MqEu6oPS}1&hC>GmbZKED<mY+r%y-ZNJ z94K7GC`?2Oxtu~Pr_hQN($FJc+o-#tzzK|Br@;g23-mx6e*k@sq6Jgq!Y)vF4Q~ty z+yI227@rx!Ie%rs0p-g|+-m?)|1R;4ApTPeKjyDkw*@aSHiG&JvUKBV#BTk>cgW$u znskG&9X5^F*mTO3&4WX1sATmBf5&0Tx|y%mZJ*!&-~L%=ynXm*Wq&5~b?=FAvVYc) z&-z&RxPR8Wp8{MC+~vh}??LvXOkAzU4YT@ZL4<G`CVy!9;%0~83AD`O2{hmE1e#^_ z1lsq3liXJJe&FoiLks>K?A2XT7}FsnHTa__d#g=N`fgrYPal($y|g|$COCH6Rmomj zM~?NuG47@H*fHeT?7_&fpRzl}Qztmq^gX<^+EW%cb2qJaf)^xSW<M=VIG>}|HsPpM z_<tXuF@J~o0OcNb_V20%fBG4q+y#gr14rfW>#p^%Y91%<u2ptajMFPuCcA50b`-{` zZ+9){Q5>hoQ*oT8G2%+~O5v{6Yf@60FNR_7E$&)-B^|`}>#lWg|7Gm%S}*l-w!YBo z{FmIdBFJw9XB&AwggO`J##gq4|J@jawt2}OTYuJnCjYI*qyBJnCQ~zWL!KEE-U+wN z4&{W4dS>{hys{`9&m9Ask~1c~Qj@i~qT#S~d`8Rt(s50z*yn`Q+T-Ckdp157bmsH^ z|LHd#$(wwPXwQOiz85EOI$R!yON0@M%bb~`XRh>;Soa!Yjn>RjZx@9iLD?F_Z&18= zpnrLOz8Xo`_7t=3oJJB>lp@|4Zk=wCF!oTn@@}FJO)!ll>~jykGdzbs-dT)}a<0ZW z!Vk6`&<uvgCse9P)%39$yXT9gJ4ME-8z?M)T_&5wf09UtK+oyb`3_xiK(7g8`gTZW zj`UFgql1pnSHlQZb)cFbbdtEuDc}P|pMNSg%+ot$VI!Yd!9A;s2?8OFCQhR+aS6mj znI?;VJcSt&HwnkjNxJoW7|;)Xp^B5a`R)`Lr%IO=*s_;R)i$#mdA<<|i^D9W@2e(T zcSuS61^mDQTlbPz#w4XgfuSmtgboy}=^_|}#_C9A{{o@{sfk({h2=O23x>i`xPQK` zR{5bR#2<K#Ujjfv+s`_)1U~=V#Wg@R8x5xBens>jT|iqU)p%H7kMgL5;a{%hCCdTc zl_`x!`fYBjrMW|Sb0Iack4d_%S&3_Tgc58w?(|d4HU=PxLe7G39Tqsgc$q#b4lydJ zdu*dpJ4t!z<9-|6W@+@I`P3#zO@E|0grtd=6)aQ1%Rov3%$^eO>3Q@#&WPHJgkUT8 zz;QW@#x}j&*?B|*QW9{?3T`7%-YB9WKDC)9aNlA$<S+IPk5}IPNOTy#wp#kw!0U!o zwO9?AWmb<Nr2LGR!f<b?ls0`H!rM3dP|yA7Pk_#5^@;8;wSx?0Ia*JR8h@#)KtIN~ zN<{q_lXN4=7#DdXkf!7|>&O44?djvADz3eIHy0Dgx&c{4{9qNtC@4`vyA*;ON$Z8i zAFBeUh!T|_<_A^tU{|RHldy@hE-S+0y@LHIvC{fc-;)Q3iB{bJ5)`VDs)!#1@#`)N z0`-FwE&Jx2Gc$MgW`nhTFMoez@12=DA7{>-Idi_|DAC70d4fJ(eT6fS=6LJHPjb-5 zqeLIybR&ISoQL%BG4^Bay<KohtMinBkdGvx)Vnr~hcRTr5!jjcX`FSrRb;sCoFNGo zvMzJ>usxO?P>h@QxaHv|eVSTGiEV|y#KYj;r1CIT)2MG92u=(P*?)l}L^!H6J!p-X zuDIWfAwqIzKbaz8^%Y5qF3wa6ml!Y`7Gi+4I-IaonzEs-;<LxsQY<T)=*ZVpmdQmz zu<5#(u;!pMn&@P!@Z%g4<{}}OU&jf16MsCrUS%xP#kXOUneYHP;P`Y5jTcVs)<sgw zbXZR4_l5ik5h4Ptm47})UTh>T$atHc*Z!|(zIHdC`CE6>%s1zn`DPCF=9A3)ji41w zeZ)qniR~_Et^Ng$ctPq@PRAtaRfe&`MYR(i0HMEku8Rf=)6SU8D_#HcK<|5p5A>dQ zXrNEz8mNf<_QXjB8oAcdUBtX~D(0=TF^>xyYe_5wn72q%Nq@zegn9cif>|FnJ`3~M zN0ru!eL0x*GYRwlkU?hsIt?+;&wi{8a}e_uo+mM{ZxznN!gRI0yjahHEQYd>2!s92 zj#XTJ!d}Hiauwqa8Ox7TB-46X{d%^Ka^6DTPSc~jAs{U{q&ggZFsmv_u+4S)j6NJk zt&3DRfV>a1$A4Qlc8}cyf1{G!^fRV)9ou%T-)+RGK!sK-4mPz0d+vE3*`TIpbuDI0 z_yD2^j${8bkpgQumP_9a&?Y#0{yU=!AI0suxWoZ?JeB$Kq1Sob^Y!~66dbh?T>%TM zE2z5R6!E;ox*71*R|w;Pcfo|V2lF#ZG%aVe9lU0wY=1RW9Uc((EXOw9V3o8R4e$&~ zx+NQJO;vY&5?n0v8JxajOPV?SOWK1)n*Ds1OFq|c=O~S@+v*{h^aTEVOg@7>*!x%` z?9#1ZN@88RiAO?Wd~rP_AIb2X)hq|)c-Baz3~E4^Bt=tZv<05E$Z0&^Gw%~@!7dTU zXKT8tX@3t=eV1?QrlN!S&-h+iuVZx5xTpF(0N4W?gdUh5{g?4&C5?*Sp$UKS?>Q#i ztfdL(Ux%k+0ROlr59_{SJ=&ZV(>w>PyW#d8-_Z3m&jH~A%;z~hP`cm-tTn$@tjkDY z@*RFh(Lc>CT;F&>COeQ<?^c*TOY5X_g{q;m1%G@(4=jU3d?MM(=mIv1)3V}`2CRO+ zmQm9en9gj|`toi&yULkeWxb_j*Eq9ltY?+%T4#2x^`A=i0%!ID>n=MR4d}G+0JX#t zNVBfF8;uaYEpT(`(3pni?nNQVx_}iW+<bV018Y^?aw+ONoTd=xutx5D*R7EbzDS8b z*MIRV2xf-${(ghN`LSvXN#24`ZjU8(@a~^M6-NC>RI49CVH*ARi8mikGB`o^q4KBL zOJLjvX#fI5=Bi&gVs=SV5G|Xs8;HoIoLBD~_f$ZFZ{9ktq8qg<?zt3`?s$e1DeJ$S z_fznzmm-~L3j%VQ@JQ;(HDC__{8T4yN`D(zmi5IX7_ad-d!|B(_0IYvy_$9%2zxmX z@B}Qp@N5)a;^XzWL%WD+grx995Mlexc$XR9h&iorr^}aXc`|)y#*c{PIDIFW(xv!j z6;|N(1?|qf(Q&_1l^r-&oF!0&v#>Ax7<D}hpcOIQj&D_-a~P?IzBw*-{t-Xwet#Fr zs&{knoWm$c$e)hm&VR$VXtr@X`>|SYMo0e`4Cl|^5~T=Qr%fWH55|$EN4KNOEf{Oy zM<f5GWJdY^ab1mHfY7pf{n8O&=2U<$&fwg29G`<`{K2F|ywVeZ`&i=1brj{fgone! zdq3hlq)Lf}4#o;CZhRPbKD>8gFn=4`r1xk6*I3Q}gYnsWw;Kn#+_)=I1J*OL3r3Rj zFL1AxRcDIsG)>4JJy@wmhR2Po-f~m?B9ipTF(f?hy$oN+vkI(<np|CbSxadjRe9M2 zQTdVzemk+O{jdUCLA}W)k1gvbKZF6*7vs2%37u#iwUQEpl-P?B>sVsE9)E5Vh#78{ zw1w+K)RQe%6E_;)km^i`S;5u`2IC3Of+d52wZp^U$PSO}h!JoR&V#kRwIq+uRd6ax zp9{vim_0Y?7e&|@T&5_3-n*P|m834t%ZjPNV}{@&5iNTgzv1^Bz^nHqE!tJ-ZF)#o z(}J#O*931<Q+A>r?V9Ors()1yW$=lFFZMTG%J8hULtSLn%Nr*7<`_HD1DEZ|pgTu2 z`*gwCTPT3N8;jD^DmM<NgO4m-B*Jwhvx9*cb<;&05C*e>aDU7<Ix6h24F+xML7~eU zKLkWskzz;r&%f3w{|iRF#VHuW6D^g3DL69m$As_xE?o}EYCV^Ro_{r>$m!W53d4x* z)$LAum)(bJk%U@OniJIoKYz{h4wmR)A`p{ca0%n%V@P;r97ETZ^8<8@hq|^^<ONAb z%ZA>eDTp>0CK9w7Jn{-c@-2>1N7QMO(VO>a_CbqooKlW!$($v;O`U&7vkF8+(E9M^ z>+=bJU^>b48z+{3uYb7&N`paRoEAZr8Wbru0cZ+c9Say~6%=Y(7IEz5l8B?76mh)E zqV}5>4l8J(EWIgg>EVntKaKRSEGKNYXaw7SPT1mM^j)<tS=p(X86{v$e_7wPr|?mw zf06@~qfa4F=1WlKE1=95poDu4`4?_cpOm!&odRX`#EVdx2Y-ZYOLzK4@t};guSxnA zf|PcmLD-@)k=6%ak%)63mnYz_u~4@uM>|nSL&HgiNM<<6iAD<ggD24h-3n~ac1Q$b zvd-*{a7GGI)JsF(2B<{L84)W!XCdq0Q+Vn;CwDPMRZ}|*jr&g>c?LGhq#<y$y!9Au z@>hN-?RJ-9j(^p30}Zo_uX%(8_GzKfQ=d2q#|=Xi;F<A?1_<Uo)RpyZFZpev!ZozK zr5E;~1AIG502D{2(W1v1f_bchuhg{^wep|>>S9|SU~LHG`LU-QZeqF{3Cq!=NLViV z3JJ@GFOjh997SzVEy+A^h@tMi>X*UFVimnj?{ggQM1KLE8LPOz@cYJ;SV^C<_RgAy zs{u;u-loZX=fM$DaG#i&7bgtDuuVb{02jD200eYIup{bnJ0h0b5kfimmeY7|Vv|N7 z7u2s-x3`RV-sUmod69{7ml~^<l+7vulDcKD#2%Tk{%z^WX*1{NVploIx3*S?Mwl9w zL0OMFl7FV&E{Zwm(iE5l`wPvOKoY*zMC37ld25}9NIvhdPAuoBSFLU5z&`11TtVv< z%%dbY;RV5oMpL)&-)L7Ic)rk^_vOY4XyE(|M+iuq9c!$F#Pkd0Efky6cO4Lw1Se37 z&&IvEuh>i4gBU5CE;ix`TCN0@$G}le%mc%OMt>Pd59g94F3ESvIEt=Fzix<?uiz=L z1s!O4v2>`ZXX6IEXQt?Izx1uSmpVnkVrLhZDd`5RAggRH1Y&S3{*}1!V^bOml`g?j zX1LBM3Pk`iHoxx1!xjd=YTT^#OlGPaM`Ul)N{wt&Bg3;d)9X=%>pLc`NiM!nxui;| zUVn~)+Ng9@S@Y&7L&;U7+M4VrB6Hg-T-=b4lTNtbhKNi%iMx6LEAhQkTva`jSoVTD z6x-SE7=k++Y+=s(d258}P1c!Gnm`A|Lr6YMb;FJjMp|i%KBPpt4_S9!$B%jZ)?e5N z=5qaX5Xq*np9vvZCbt5Xw2hacQNyVgaerRDpn(TM_tPcXb6;hc>HASy$75XW#CU~f ziXbvazR-p9Tw(9>7B_ZJdS|WZg~#O*!<$%4D}F2Bw_TvE)xmH!(7v!Ijr+nJGPN4@ z1?~$QFQyxY7!SBg?VX?Be>g=q$?hXwnQvONA4ASbS~;aA>e!hoMz_x3Vz62gWPjbr zKMOjsI8u=dgYPE{9-S5#Ja?Fl!BWyxi!!m~t=x8iwN$ONRQ(UNw2WHXaX_@>>Zzq_ zYnp7SJy@;DtoC5Yej!6)vr4`N*c)L*Y9xb6>U@`G<5<wrmEQkwI6XwY_sHH)IKM|Y zt(yI>z-bM&^jJ!?v}b6KaJppn_kY8wJy@l_m<j~zQAKK`UjGiIST#M{@6dVM*!!~N zVu9pammFXp8bQ7nR+BCSE(I5iGQ1T_vp#q$rF9ON9OXT!HVq6$iK`mONtDx!8bRam z7>-mSrBe#t=0mFPkj&hfb^6xuME;znrh)N=x9KrjzZC~5U~GsB6QEA(kAKY$?(Q{O z#iv=gioZ(ZD*k;MSMe7Yl0^?v!tjNpf`XUXF_-#Mu4ldF!8dqgGtup8MUK~q-AK9k z28SoK->fC_SObdU8i3CHQs_7Wo*}ns{d5fw2yY|JlbsW^hVvW<;R+{>f#RIQ&k>rY ze39V38q;*TWu3uvfs35)>wh^l49P-$2O`4(g|6i^DCB*PyiH4DF7=}T^>SHW*8H#* zF0w~7SQU{B<Q3Kkfe?m0DV^)q)WZ>;z#w2eUS340+`gBc|DSS@<Kr}ulRm?V9Dab# z|0z2E7poIFP@EO`!3k2W&6B7|wJ4Iui{N1p#f)nvQ8Zn%8&*wy#D9TRa6c#LXFkQw zJd(oB)LGb>RTt2z#=Y3jPnjQ|iF<Ltm2ETP@DIS{E9{}s=DbAg&$uZDa8nGxq65Fa zMN_#NB5C{fmQ==rU5cIbf%OhJo=#oYsq1}cLF5q}KV&pL{Ts#7ue*J<>dIW+0yYrh z4&{BNeA3Bw4G^nRw||qOU6(|{`~}uAV;&Jhz-SV5x(#iBZsizO0u<e-Q>uKz(ff<2 z_Z6RD@1G@W-ggdS?*|Vfz*ldp2Zb7FS$DX4xUVYVd-xz}6>6+wr@C@^LM`J+9N-Sr z+-`3P8FZIuksGjlaQ;;9OOV!eN%-fWL=K>Y`S~E<x~i@F9)EWXB0z(v`xpmtgiKw_ zi6%{F8&hh(M$C#UauaXk7rc#`;mLv&2fH=K&X3Nf#!^%Lsi`Jvs@DN*>M+}x(sx5U zdgPbbPSN~X*ba!fd4nS&S92m?uaPM}Z?cFt`Q#rQO^&A~AKi~l_M;}Z(AroCP4c+3 zm&q3N^ibX`dw)EG&;mJvL`6ROv)81`PjtUbdS@>G`hZh~zxpA^+MPoEb7l4K-wFC3 z4B>arFdPjcfg`3h8RU`~&&_F}pitTv{hj=*9>B!D96?_q)Wo;v<@)w--zp{saunA7 zSNP?YLF;r;g>~o^hl*A5^Jd)Bd=Qjn=dBdF<+$fwOn)g_DLr|)JEu8skVI^LsVUNs zXjlGxShjOi)+=D$H%qYhxjq6nPHz-E++j1o`-SHh66X*0yXgXQWGbS?MAY4mCJ>^M ztdh{YOJQ~v;pXo7?Ew{3A?nEM*JOv(o-7U+{+v}cQdOZ`RYe_Dv6E){&Tivt>vEIw zHj&pRL4PQ&JAx|)eJ`v)x1^zI>9O?W3Zg3}54UX!@{IFsW_(NNlhgsXVEk<lWZOUm zXZ{fAJK-)V5g!Isd&q1$6zz(=0hHKDL!X+G+BER!YlSbZmXH`a>G->rV}EYK{ut8_ zpx6A*;fFwTN(<ZpN}&TvxD_2PMRQBG|83`oZhxmiq%s~)@<YJJ#mloDsy!xmnf9}B z!Yml-O>SBG*yzCpurGqW$3_c)%=WpXtw8!npQ?B@*=`%vAV2jByL@Y8U(tM=d*0XB z?oPwShY+44pL;%pwBTx2x`^94<ck!zogoC5B?D5G5+wI7N2{O(sJf-`Hyk9L3Fg1U z@_%7=>S=aHT5@)(<m?QZOrq5!=bhnKZb{eoBF+gjW5y$&xwUrVLG~X$rT9<uU9w8n z5jXB)1x!QhqsiOO>8e6ed|NQzuC<*^WMx)CZ}Hq7EYy^*yqki7q4gL^ki9J_4`gN3 z<;d6;9Mju={)tj?NXzO@rIxysb;A2x#edLw!2DLCCliKSXbf_>!U7EJ_O!;|NXj7Y z(i9nVSEsGc0flJ8pD<Hn3t|xn^x%anMo?GL!85tmgg4SomWNUk2QMfFga=;B7^C1* zx8_ZZBc{XOLep%1mSdVnU6pH^`^AlIpSVSvsW16paIzAfXTStWIN-(lx5bUsEPsVj zznJkLd+1^Q?eFiv?-?a?;KF_Xf4J~NrhGhL_@fktTsTgrf6Of*5!S*q5+{|^Z|iu{ zb{clRm}M~~^pQ7F;8M#4GTz3&W_=kr;ceWfR1XX*1s8kGnaT)5<P7;GgwuE+p`*Nb z4K)lcwsjfiDu_?H-whH@^oQO**nhlbmpOM=mFWhd_GWvDieG-Ae7wLU5w1wZwl@_l zG4quvF5-6~ZqNAMUW!(JoJx$=?K<PZLh?$2msojW>S+gni<|%ka~JmG_9i;HJ_f-) zHwn(7BfzgrE~l){GoVuB(WC%q(><;%#A@JGYY`9E(|-e7S_w~fVKOKJzkh~gp*Q@B zg#GW*T7<9IXi$gf`zB6Kt1WyH!7rQH50qC%G5*Yfh`GM~aSZ&nmPWdkiah0*1v0&Y zFj`RHd|+;(T{>I^&++}GV19Ia&_?+D^ziJ$?#Q6*!ud+!+>=-oS8r{Y-_s0&>se2| zP*&~<dG&)R>V4iiMJbzdvwtFS&$NB8E0?mi(dP_yt8Dv48MVWCO=-}Z_#?E1myaeq zefLq+JqFHYO7ihePIN#@OH4#D(I<G|h2HMWrc5jg1PbgYx}XpP+R|4=2&ls`T}y8g z->&X-3ud*j&3YgBI-XMpwYKNALFZG!OtvMj9A8zm?6!~CrV=r%8-LHS@2z6{=I5`t zRn59sUT^SoVF}4VE)&nuuClOlNGIc*->x8UBDmt*MVGRsH&Y>V6+kwk;U+QUqbyDh z4pv21Dr`4nrj5`40uV0i{EOS>2(BQ>-Z;_Kv=2saQj?O)F0uQ|0}Em2PAq3tBqd)< zWAHXU%cl=H$$O}O(SLoq^In<SpV82QoYBSbEs<d&6w?^iO{?;1jPi6LbXnt9o6z0% zP(QzFri0r)<y(iAI?ifM)cSvP;#uwXPCToP?8LKL$pAVG*#TlwuwTjeQ(Ia4J44w1 z8C$7+Do!kHyK#LdnQ<xSN<2zQ>$<WjorD-aJ&O@Aqu*O@d4Gph!slXR0#opY7}~!5 zbr)-{3>D91w;hI1XN+1Hv)B`%3Am3=J1pF$3(bU)+~roowBSr9cmyRsu$KY63XM(z zZWqBUV4@V7{S7w9w$1NDvmNcq%;O00xF!nT0%s67xZndT%u6(ND^cG10K(aLd#@6q ztGO)uh{OrgM1L7>j*dkMJnB^PE?35rT&M=UzDmP`N+7d6X87Ku^A0;c86NhGP_M~( zUf}16)8FiNp6D@t034*+<s8?vORMpaJZw~H;WOnCwAv)^?J9vhRjNmTAD6;;k;~EY z7LQ-bHFFvtRg6cq@{?4kgpL&CT;fkX!t1JyYb4^T1%ICrydC^3lBj_3ti0{h_Dbog zM(-vtA>VEl_eY1s@_)MWtO{98LvWPdCLMTgNQ-v)!>9760&mlS6Fi;mPF`LE`jY$8 zeR-n=BzFsDG$$BEBtrtJKkTtz3S@26pY(3~qll5ZUMH^qd*%)2TY#Y^=3*Tf!L^B{ z+4DIga(_lvd+fOs$zN&uJ$2UqZPYHvLiNqDqw&qGH&>Af_Sw7`m<yig?EQt%GSUr+ zG~*=FjN?c%4v;3RerO+FS?^2HH?@?3Y$S)PkKn4!=r)V$%%@*gpnWbiKe$Jr8>u&_ zlOxzxy<Q_Av$p1lLJY^Y_C*{U^AF=vH)K4?hkxl3rKRcA(%IizoAcdXX}wR7g|7lH z?WFKZ&HOuk!BA@uVUtZedd95W{xAz<?4FFzvsj4Q$aorrX=6FNVA{0a`<$lA7IjBX z<kak(^lMz50P&mbU?oZHV>g@dZVs~*!m-JOn3Wk{axr?NP*jre2)r4+ymb=o0Dbl- zJAc3<KUSUpG(dQiV4c$d++uoG_r_s=6=adzs+_G~u^72r+wY{>x?m#h`qdgwVokhI zuk$&CP*KYMFk@&wNP-xDclPdCU_VpV0Y76q=MV4>W}mph3Q^B=n9(iyEOp)?Gd=^h zu&w@?TO8j%PTx2GkncG^44sD<p&-_TQGbo7M;Y4JJCH*=v;)`%5N3_e_zGAS+Z6F! z;N6srcJ*2`sJt}~!Od!d4c_zO4q(D}*Xf!n{Mu>9m%{uvSUzKBmhRxpOs;r)uoucO zdo7p!uJhv6aPit0WB;RWEj)lRA$!<^d8~u=b~k%U?b1j*<<Iz*)e+25ELNQH-G5bw zJ;%^kGSVwc-@Pbz`sF#xbJ^D*UU^Bk{1)P8XzGj2Axe(jfA-4IuVs`-5J*-GasM7A z&Z3xxrNJv-s;d7)aRXyxZuwu*o&-9oBHLb}!DPA<i3AN2q#fh1wSwAc&<-~6qJfDA z&M~9&{c%u?!XE?aCV(Ks4w#-Mf`1Sl#}#K(Z~<|H#Bm|wKtOcRuMB>jWAy(yR;Kj~ zez%~~{p;RaRj*zzarqpe->bTHtLoPBZr!>|(|`1W?h{x{0SkPBO*t?^e~h}l1-tM7 z&3|EmgUh)|TxnHE|9CKiuXWgTp=R_1r9>k=uA)bFtA@;(;`<hIgSIpPiGO(aI0yQM z%51yj_51CrYUOG!AQIq)irlUts@PJO$Ghe(&?I&T594|dT5b^CKj*25!ZQB9a3mKb zM{+^a9a@$nIjl=LuS2G*yd}ta$KBCkm`9%M;6AwTYuS{R;D$_q763SG0^FVn0FwK@ z=S+Z2nE=4U_H~#5?Ep}u0e^sw4+->n?)uDJ@cfXh6S*5RbAJc9=ZoCu92vP_@tiCZ zxz9qbSIfOkw5h`CNH0Wbd}|{Yc*zl#5yuzsVjv-jy`}-BK#g=l`5ymwo-FrwGr^&1 zPWN{Qc<z~batkz!u#LG0tJOD_ln=0v_sL~~oh)pA5bQ=kk~OBAG=JuC36Vu5pOrRg zq`7^Cu$-yT%-#4}aliAhG&cK<xF(o{B+Asl8Oe`P%N~@lW;oGu_Mg+}a0t8Stq&{X zP>y@q!%po6K$(T!!rPK8%5ID_afBU}jeI2I{!Lkmfs!434bcMj@Lq9pV(+J<si0=h zCw001>Ohg!YPq8%LVvC)^y+Qh<bb>I*$(_DuYF5=l)K==!v+T|+mg5S8i7I80{Z$! z;ux5lK?$-#<0&hkb1DsIt>Am+n$0S8;_?m(+ted=EAq@S7|X}t%Lhy=M}Wz&a)cyS zRi#J)lTD6?#X=WfH5)1KnmXLVPJckyNqN_R9X^d%<8nEBK!35<eaEX#Nk&iHoiN`D z;_epymQRf3UOAcsM)N@TqP?UFOL9ticZFyA=Eq%^B;UwY7W~tL=LOm}Rq>$@%Hli2 zgUi}nLz4&dm4-9w$}yJG@0+Dt2Sem%K(L?B+C6{F_JTc{Q~sv=(em*jo*gNYqK`ZI z8+-F2xdP(uHGh8;)KJrX(=tBYC&Cb?qo6!F>3(TK>eWn0+c^$)*Jf$|XFdK3)l&1a z>!9+di!zit5J8&ENCK|m+5zjXllZ{xb02(#_!#gokc$3%pZm|RkUS<`Qqt_8FAT!} zZ8$1h8p-9!-vID&0KQED_bx%;8UlWdfNPSolIH;McYo0d``lLxU;^1UoE++)I(RLm zHBqtJ<VkQ=;OTQI{YpxoD`XY={=1Y9%euRSMjbd95{gy*DGFC(GaXPz(Xa*7_1N7m zR7^R^h5LnH%?m%y3qL#=v3|EVcEFBg_VfK2Zam-Gj28)jZptvbcg-VtG+Thlfoa)v zVnP_YK!3G+!}c;;^4)xEz~zl~*(}w~+bjkB37nbX9$$t8*I{n?<Uc7Yo>94{L1v&( zQrEnZK;RpzxsoyxyQ!9v|9Jr9Wd%dwnyU>N=CGsegl@cE?N02M$!+1GWy#0;76Dgu zcG~m@C59kwxMT|dz)Fh%1Tb8zQ|RWwd%UV3AAd~-HJz=|W6lFQJzy@^2$X!AFkJJi z;^A6f@<lbw&p2_IC-S=bPE9E{ySB)L7J6dG`O9eW(g!cYz=j0gK*l{LqTlE+6ghI{ zKy)x&@@*4cIX(GProlkuDiBLDWcRLhV6|cY4ASKInLHjl)bY5EhW;Ayj6;99%*ZwL zb$@E;C&;0fjpJi&FN^iKat?M^@|Ilc;m}PuST*It=E;feC4D{+)2!x0#>^pm3y}b{ z$v<C8AYqcKX@0zBnhzvPVoHF4H|M2B#iqXVqLaL_iX31^wUFE(<(hPm?f5*Eww`{~ z{#pt(aR#rY(*F>k8p$6pyv8Z~;W>C1!G9li!o%=nS!WU7Y?8w}T^_ja>nw)1A)PMx z$#iL~{HJCGc;Wc)Yv;pQF0cq_GJSyjkg`R=XOH%b^C=5ktkOSdWig-vdhyjn#Olpk z?I;mKX3OvSI-Cbi3sHdSvRAc*ePzi*xeDU<^)ylN#=Ei#w))@;n|xiPfK-^?>VHOF zaoa|vFueio<U0II-QqgfE&PrxYNVC;v4bLHyYZt&7pw4s7pw5V*E(jxsw@?m5Rx5! z+t#@nVLV=g=%D<8?}e@Yo1rR*W9gF09q=Um`_&6=T==C`Sfjm)I<s40!tixSNzFw9 zXm2aFqC9yZdAoTJCi=?xC}B%QuYbapO3Hbvx@<z#7*I${sug{>U_w?*P&A0U7H%-S zLE`*efr|_AtV29ioi@8xvbKQZtVsPZoX-3>9ho@aKK{c8&l`iYtsKBz;cz_#?D@4S zL%Yxpx7vk#2^wa(5kVGgM52Vql{uXEa{)!#T8F{}?Tckq2SKiWmA|_3AAet+Q&pE7 zo{%$zknU}@k3@+C<KMBqlkGo-QlAhL1PN7(uM$sJG|&CXq>Ak>&uG4E_9}t>YE{qj zf$I4l8pT+?dh(Lzb3E&<qn(29-$y@9fyy^*B^G}rv8l&_^NkMcIu3`$uFp7o?f&=` z?Jlw+dq0+kRdM?4MBV?0xPO62tcF)Dx7?arZp|&V=9XG>1J>LC<>uPK-QM+aSc9;^ zf(=xA;Yiq>k<p)0<1iw>P+7>{#a7tsKtyjz1cN=OJrlClmZNxmuHyB)c;B^Yc`{F| zhBKq#t{2_1NG(iyiugQJ#OapP)-xb&Jp<C#Gazj}1Jc&>!)V)m$A3?xt>^zoTTfov z%5LT0AB4ZBSSOfkax#AleQ9_9{ce&I)EZM-$dL0Ro4lqKbQkWNF^Om&11ZGw8XS#4 zP{NcGO!N#TbKt3MXyEjEK<H)j1gMX#d)q`)YDH6;6Ah%YwV7z%IiM7zDHYnu{ym_y z4>Z_nRalI_x3yL4VShkW+awdv253B(2&;RTL1z7{4a{DxXMa4=%&yJO?wOd;EVMU% z8Va?$Z`x#z2#jr{QeuL)SSOmxM9+{#(Uj)v7c+W~saH=#kAGPw5i+`5KSwAq1jKay z-;Fe#YiT-PYUW{UXg;5lkqQ$Uh&58Bn^ve~miyiW(*Lods(*#6kF3;sTl9)tu+f~b z5pbV$@MYb7(hE4NOJ=?-ZT&v|B&FF8=V(QaZr11QX8l0jtY=@0=bz%cQkt`^TGl&0 z!`ars411j*-AYD0;t~QRyNh59Ln4$<Io&g&Fm;Z|K<y3>8G!xv7+sr|+ag0r%=*MP zD&;h~c;L-0<$r|w?@dxFD<D7mR$4__;x~c(c*|2(`SE!Pi~QJYksn9TC0|I3=PTK< z@VZp;*A6F6_`%XY9YJoL50YJ01+`@PJd={$i#KFDuTy_Cf9r|v>R7*L@f`2Yx2n7B z;!m~r$v1g&Xz{7W*YCzY92^-`Gq&4^`wVB#tVB<Btbg~S>h8Wl(JAyYn7=q9Mf2y+ z->|`m7a6f`Pjz~K^ov=baNbsAq`RxrJ<+fBct?e70L1@Rw;Z#T@nb^(;NzEh_&*;n z7vjH1_`hCWp8qiZ?<oJ*A3c)n;7tZ!V%|MP{2wpD|Dz)O;RyVPh4?Rn|Bk|c{n0~5 zR~PtgeSdQ~0jcMC^li}5Hf%C<DyW2oyws2au;zX<oOYX-o{gl`njj5`5N;5mbdS1+ z_O5jbMt?Pa_Ck0k!Esi5l-MPd-p_fp1^b5?PED%~q~;(}x=lL$=P4dcSr6)o)A>ql zpG%ijOF_qM^oMqvHr)fVE<-a)$z^mWP#0i8y?;{@bW=8r*5tgfy}-BtX1jwQCw0KF zS%5x84k0Hn5-vWVj-(qIY(+E_IAScxTesuPMV|`U@gpnPb(9~-m9GL)PTMXO5#wzp zCNuvuE#Jgs-9BK<Xv8aE;ql*bNTG2!kmFFLWXWahZ`-6|;Jj*|Y`7Cfa9qX+(j5$q zpnq|5iFkw2Gge`kx$>kddA}B>Ge<mCP&*5tHvpK04Wv>KJ}!M^%Ctt-`z6H^MIH)M zPEA|ycR^(*gi3A&>Ry4TfC@v%T0@X69)dCRtmbF~td}rF6$-JgC+L_!L(iu-jR$-1 z38EUWq&g@DfvvLw2l=dV((q->)NJ*Sgn!h1s}bdE<l-XtQ9yuMU(rpj*q0mj<Y|8$ zbBfl%EpyN=^=oJyh1fqHmm_YrT{&aPZdt2}V}y-cjg7<QiOv%cvxn{A<HZtyc^@)G zvMiYSkba+3mM{k)Py3fDR~C{6co(nP3>j=R_F;9eNT?HJ68oGdJr`935lhlW{C}KP zHV1#g=#f9Ge#6w10U4-RLxzy&1Lf*i)#o@C0i23U_;$d&4-ouPX@`M2j_{a&_5G4$ zw793O6WFyabf5(oxY?&Iz`!bS0Jj;jMkf9^tU;*>C)x-5=QwCH$2-m&lM%ZHKxk<q zxw$=E96|WvOH{k2cy2D%6FgH4*MH59<Ob@2jaSsLBA|7yVHNTxjj>=F+?Ikq7_SCD zNaIMsYiZoxH(Qb!z{&){<*+T4rf<oy6#gYo`*CUUg(|vW;mC~a4OOyOZ1Yx}fM_v} zu`y3%?OGD*7!J|y(?r>FBW`%uysb(Z8;?GeovrV#>`TwiL~T`6k>+_Nihsx<V~Ph^ z#=*&VGPIO(;eTt3wKq|i(NpgQ`@=0isAe(VSavvzZK3{^i!BpMC%wtPV1Ob({n0(S zT9j))!29|h67U{ep#;1;+$1;j;cwxzE@fc|3JY+B?tW<yxjGC8IcmQU&<4f3Z4kYO zgcCH6csE4;Q2}2o-hCp!PJg^JDext!oWES;H$b`&x|O>(q47~EngWJGh7`kw<hi6q zc0xg+d&yo*@~|_G*p=)G{olQZVk#hr<ti8dXxE)V<k)skg`IZ^oP`2i`dKJQXQ9VC z<yq*%56rWWw37@$JWYM-sQAm;mvSxzy9u!M{VDX^uUGo#PQB7FReyS}s&t`NDHsf< zSA<*Ohv%(2pRn#fmV(<~xN%=9T%LM&xr{Ni(aRg*0K58Fif)82N=_2(5hZ1zP|7Sc zmq5l*p}7<)B*4m!rKD??gNlDqL~Z#5tyDq4h#i45*4<yH(jr1ydc~zJ;tAS+Aps1L z?H57DEM3@2tyxH*_kR-s7xtCeCHmJOiAr`K^R#@3cH4<VY|kIiYJGw*ZS3y%pu%Ds zxNF!+Y5e*6y<z_i@F5QawUZ;XtOlNSJ!aWeU#{w>rp84u27}ee6v>J};(0vLblt{> zB~d+0#!<tMZ?y}f-k?^C40#g<?a2mZjB?_eHdHI+cp7aA^M8F`BLNzdr-ChM$RtpN z@>f!RgwKB%i9H$qmd)5I3zzBB?i!kQ|Jo_1-Iwoc=l+Cn-9aYeYy_#(gdshc2$h}= zs%gBbzhD=w0>z3UVl#)lSPy;A;#H+|@q5?-Hjpa27km;_utBR-EQWjq?{jFGcs+rB zjDp(b9A$wUH-C)2OwHxnt52xdQ+`U~O^(c4SwOF>$00LKB>%D`nHQ;2XE+d--UWa_ z;BlA}=sflY=pTbWA~;G#eC#E9ugCXjA<P1HNddaC8A`-{!e_SRbPwY3woVt{L#>B= z3i1>Bn%yg5aJM|G5AJ3f+~Vit;Fi8;9o$Sb@+8WWIDb1p%tTPwMDcd`(><d19<-ym zxjdXOOVs+X7yjWmNkV;KiwkiK(~(K=lZpV}6qeSc+qODwe18n*FeL^37_cfDy4-1c zdoa*M5Cf*4Mb=xB-opAifKIXgboAtWgPOcb^~t-FAF0|r$x-qKo;tw!<9bAP-AUAV zNQKXJB!55BA;8?@&O&Uv$skj(RXBl7#%p(vwBO(*CQCUYEyi6@eZ0=3@%rc)IbIF# zTD}1o`ReVPa`-TZk~Qt_t<RuU+3omKcm+q!zI2P=(MenhwTVy}@o`}*KLM>rUP$im zkg(7F%_F4QWcDv;@@*jQ=xx5345U`rEYc{>$$wPDrXIczu7?WQC~P#yu)vWmfNy&V z-MIp1{xYbLqJI;f#=clCK{<m~Dz%W=-&JxR*_I|6oO&KsJA&0+nNDLEMwWsn7%Voq zh2(r8Tg3G3A=yzN0A8!3F8gQqg0A|4%N)5F#2V}QNDu$I)D-C`VPK;;Bl2@+I3eS| zqJOY+4DI7V-SQxqDgDe>Ur_DQnxO*5e+eg~^BAP<_<0#dqcu6kKUmBO)N~t%9NP=} zrHd6ySy4=U8^(&YDJKFn4PNlqLloEOP*V3^j8}>NXNzp6jUnd?gndETWvC7`gHP9G ze4ai}`Rg#B?V6KeHCc(b-G!^>qSa(M&42Hwo<^(5Z}_JQ*jy;70{%+x7@vY8$5?;J zyS80VK72VzArQ7bY~QU4N<;}g>}40W4j-#9qIyljedQ{U%^p%H|8zk{o2OHoUz>w% zUidV&x&3l%^9*P+xc35rMb1H=UO@B<MRS*&rjo{rrosy}b&rhL#olbjxKOSBSARK) z*`8)t8Sn@E({W%&w1{sl1y7Mhc~6n>S+@FAr%FK8iDK#dtXRH6_8|#hE8q`h!JlHO zXwwd==!h&hTogQ#RS>{`Ex>yvI2-9y3Ft)+NrP>w6>VY?_5}gUEU<v~_>+Y8s06)T zfF2c~hKbe?X!|AXwF0)^0t;yG7k_AN#RBwv0SXCb@Z@4s0K?Bp09$E}GG^9^I(-t+ zXJt;6fG4P8v$P)Py4`)@c4|YZEV@$^Eft`3s<|Hs&~gcy5TKBNPJMAQ6%OA{4hL~A z#HH+}gT^|J67UWhzc|XVI%ss_C^PIJ^2agoL<bQ#j$Yb2h=OtSP1Hd&ihrZTx`X-^ zM?q8vwLFgQ_&TU<akR7*A!YeXg|xH>Z&N$Afys8-YqO!55^fi;5Ik;FJKs!mA2+0x zGuhLTv>E&dHr0CEVhYc%1>zw4U3hpqJp=atx(u)b5BfZOR{6p5=#f;KE#PSQ@`E)N z_bBwRZ=Lx&M@B=^vorR9Ykz4E*!N4^0~)sD9<YBc?g7&{_NvZe{;>i7jZZjCG=|d- z{n=fF{ed56bXXTOij7>sKVYx}u`x?f2NQB#(ZRUo%BbbIOY?(p=pY`1VLQ(e4@Mpc z>WN7SD<&l@zCK}fmw`;mE!%Y_#ULi-_%_L;>^YRmi1d8{o7j|tNq;ejN!haviP3>S zg{O1mtoC>c0<AnRn2LtpCB^KM#U>xnw^`=cqWGb1kRR%L{7@Trz=!$<L--3bqpS<p zZiQzcz@ya;ix&g~!yVc}He2&(Vi7^S)?C6uc&;J-06(dLWLdi8m6<qvdlseBC}zEc zw-D`MD0p^;2wnKE3V)<^)p65WE`SYR-vR9!QH_DFipYOm9>#IN`%r^~c=7_ERv0+e zu^C_SL(M+~_3CV3{sTP62SnC``T!wBZ}V9KlAN6pon<&VZ1a1Ypw0g#h+R(1TOE7< zS<bwjw@72&776BUNNnmGn}8u3uUJD)&BzR-X0#Eh8DQTvB7ZdlM9uQ#BtpA}g3Xnu zOD?7YVJa}0y+#El$338M+BZ3Ey)#z)poLw9U?3MjUqaXyFZSiZnW%POPR-?QJ2D-s zdiO@G%FpVlDnD<VZqJCQ!8Aa4Hz?e_5zzf}I&wJZ-|RaQap&MyGemhg{ADTz5=CK( zX`~U{)?l+bwSUa(PoP~epE^S-X=1Jv4fWFtGEiIk3&kjU+w(KQ_<_?0wk3<^zkA{~ zCkU?n-uCT4`FWsyo+vzaukx$1QA_^lUUHcN2i+L0JipA_i+KgztgsS%52qtmRb~IM z6_-lTdjuLhW`pAS#;}9xkj5m-B(l|oq*?*RuDMrpt$zYWPt>`oGcyKG$@k<Iinnt! z2I&qr)6r@+`L|LOf<BdD1GPV{Z=g5O23q!*+(2)6&D=mq3h}UwY@HkV#8UTk=@R>N zhrCw_q@xAtlEB4e|BO3D2w6Zp*!Ym;|K~z^^s9prmM8B?f54M>y>{~ERP(+R_VM%e zap+a|F@Lu)Z$EFNhlAp2r7G4tYSz5nv(R-?!GURQVY??|&&xRfQXJpw^o~!UjyI`} z#}AktPq_cY`D#9}?t4}_%`3k^RoD6S+4$~JX*mX8UiLc34%KD05L6gGal<lN++3HU zw<6e8NMIA#7xF{#<XI+w%L0Hd80qr3$|s9x7JpzU%u|A;fD}Sy+tX(q)#}X8!927E z?@vWfW9KZC+&lYbffAyL$nEDkWMH(D67J^T<C>~(!n<Adfe48Y1Q@H6p&OEZ{8pXx zvxxL<k4n=2Y`^8B%?n-19$TQAa--H1_34^L199=A`28-!pTfUv;ot8KU#3*F`CIJR z9Dg<4UcGaG>1G$633KxxmAqw@)SaD==-ru3-RasYyK_;Gr8||-o%e1~-PwFYj_%B+ z?nJg?cV^*F;cQ+H>;A&*&NDV)7+uMaf*bUXCGYs2j-4D<7ww2)xs4<wf#e+aGu0wC zNwrf=5Vdoh@vz?QUs1PT*&@4b?9&zyRDaRzvfFYoBf00J6deSx>`iv-R(2`7{`#z~ z?9PYu2Hi>xI!iTZ*IrG)C@8pDZf3ytOqL#X_;&VxtX&IuRMoXUGs#E@3=<)N6oEzv zHjrRKfm=ch3=nl_2aP~&P+EBeh>93t0?|ecWRS#3ct})KE-yg?il74G>zXJ+5Pz&t z->-YIik@-2t=3PaqM7cs*53Q<bLLDEzMAiwoY#J=f33COYp?xluUefAil)sPtGaXO ziIv#kvZ#<nWV*`!1&y7q#>O|cQ;o%8*Kx@uSy<Ebk}|;%s;5V&<@25OO8K;RmokzC z9?8q+BPt_vh>=YX3q~${#iY<I(tlX}{rNUpoI_f?@L|;AEAiq!0a|?a>o%(X!}XRT zIedL5ie!g1%%djV97YH}+aVA<cF0=8jMdZa5DX&(kL{p&k{whI*+tKn2woMX@PKA1 zg>&!j0Lxg6x2X*mSE6aJ6=LU%HJ;xTkoqA;aRy}`bP%WLo9Btns9rix(0?3LI_tKo z9JrJ?@acBJfn6_KO6Plwc&TkR<xy%{hCX1Pth_#%YgW2kRq1B0I~S!(-=-2gkq90k zMfR_ktV%aYzh|x_<eIrQ(wj)q`}=m3-s^aA?`4e9|NIXjz1uDN_r%(tL;oJyVzYia zPjWx!C9D2T(pyU<n1)gtFn>h^=0XDFBrpXmAN}#a3ov_yDrPg4GO6PGYdV1S3rmA= zt44M*OySz*$o626Br-<f(l-E;Ky1IOkgw$ZsfPsQ{1%JCm9=SFoa)We9vrMKWC>JO zimBgaGvw57c_C6VjZ;*@uc}mvVS0oGBX1y2r_i+226z(yPnhY2%5m=SfN_86mPMbz z<THbWy80m%;Z1~a-8O;n56vc_&H$l)Gg}Jv;B1>|hnq;K{%t5!_d_Vui`Yef?@J-n z#1y1wZK2`rwEJq@r3|ku0zFWaGWx`+6K85!F9n>v7uB3`272&2hiByh0tXDC6H$Q$ z{Ztn8Gg#1%STK{^5&;V)nhJku1+ifDR>6X4FPc~|6Ik%oEXjiXvus#Eo*7+}wjv9X zkrVC@ppd>D5iD?cVp!0%As!1zr(rQJRW8QWV?e#}dz?1I`^taNvgIKyChgtz?WH}q zTBDfYz(l_)C{7*09t&AM*HosG_tgxQvl#|wGl;V#mW)T*W?a{pnN@$N(fF}pT4pKE zrs0e3Nzt^X-(XWQjq!UL8@xX6;%6QO+$eP*6!u0%)0RR&G6-PYui{0e60YcwyO4T- z<?;coByoMAfHcNaGaXE3c(N;R<LlAo=<zHW0q3cJ^9;an%U3fjn7yGm%&w_QDQ1Ac zVA&GI9WM&V#~*6dpRa$!rESpI>85IF4{7X&n}o)0dtRxQ%(*;rS38BwU(4sz5&r>= zJ+6zzRvIsfBSk4_;>aE5H#AaW4fUBpY#)9C=eE%bS6EMABY&sEU^GMbze`E~jv8ed z7kuyvQ{veteW6!j<((m0Hr#N^UoJB^_M^yP6?gPq&b_#mM;3ouKy0py0|FHU{LcAP z{FXR3#)|{M9lUbJnG$c<#VCjj98bn>CMpL@DnE8wshlh7G&({9>Nz?>qulc}oC1g` zz*c{_3hf-JYUfBpJ4YJYNxAUN_vKR8pKxgAL)@gTtxKZ?I$`3PF&-yrz&tD{Djz6w z(X_`$Vo9xH#j}4(t4I!a2d@QNVzuVt+BmhqXi*EuDY6ECW+gP-RZ@jmZlh)0F!I+p zd7Ecbq+vD<TvBn1f-2TgtGwNX2N^{?(X>Uw$u&rLz60m`(R05ixPw<7fbcM3c3Y?~ zUloUXZ|A7@O6r#kN9qSF<h@6#Q;e!pY$y?s{9+y_c^`iZ6b4_@Qbj}q==7|-8`Xj< zSmt-|&@7${S}NR-CX+rU$~xjV@I)iC<?#hm1p^L(ix)%Hc$z1^wWitIpwplo5_gNl zSuy;9HFLAO#OT7nJ3G}BHJyiY!DGv$&VJ^gb@45!r08(pB<^L6Pu~p<si$Xiy??KR zlzfXuQ6PUA`OKm;$tb?UXfKHIh}L1EK^_D?Q5Cv3)p)}_&*R7cp-)hZvkVqONXYoG z<`%a+QWH<7DV6sALuBxd851b{8<_I41;YCYa-hB;2m^JJjxtvFgW)Nu?5ift_7{bk zL9e%Plsu3lnzrd;)N61@3Ul0EQ4C>><%i0TqBMVUVz4qVXt~`P=><yj?l7q|m%~o+ zrbMaeOubJ#%(6X^MRIS>vdEpm!*6DhY~^xpPNnD&O+JHD^DINoZ7Am_J5F>B4+5Wf z<=mQOyb_)k=rer-N#}y3sVEj>Q4<8r1EVia8;{$}(`(M6lGuvDlI((obGXQ3F<C{v zV?}>lkr%fo@@B4n#Zu&t=5!!(iqgo5v55S1wiNj#AoBfAO99R$A+OD~Dcrf1a+n(< zpLyg`BZaqzz?)N96dO{M&%mBsL;g_b*p&0w^kq5EmGa+^YrGP|q0jUU<ew>p4!Lrn zuT>(f<%z7#C82M~l|r`$ljS@X$o<(bojiYI-?abUO?|Sx5ST1tTm3wd5r2IK+zGMr zn1kJF;2vutkckzk(X`=1d20mbkzv?p%vhXibUEOb(E;JJnKFQ#F}z~gb%*SDo!{~U zQ^mis;ZfgeP{n$#iXSsoJUaQtqf8a+GfUX3Nukse(8kUzRK`|PB||6C)P+l^L^gl0 zX+u#f(@`rae^gAO4m9t^AzbrPIm!8i)Uzg^&WljqEptYGX|D;`&0G2t)7)yC{{J0u z`U_=t{RMxK?D00roXRAki9--kPtg_vGHl9|qiLJ72n%h5T)9=lfs#)P42O%WB3)0L zDknO|Ocm?rk*>HYH-Cy)uv!|KZ-IYs`?B`OqF_$kTd)QPOMNTO8_^sY7U{2VodS9G zgFFvU5hG>Fs7ItbT1B$@0#yV&WdPC<$Mv(j(1-#iMqZA!zZ33taJ1!mq#^-vi)~fx z>gQKn(C`WS5gaf5YrW0PRn>YiURtzAnM9WdjX=cF>un|+C(4NVmWT&s#HD|~QzKqR z5tC&^O^q1h2hE_r?TR$<ELwDS8~H#6Lg((~)m540vjSeYEDCgm%hEvKh)<a%^3}9D zu&5p(u6P{@;=L2!@8R#eI?V6y(`fYp=L7?CPB6gJ4ZsMW3>E<AJL^=OvkB+GyQTf} z<EFWj5-?Q>7TZji%*LYN($|0Cgvs@Iao@%+`i}R}ROLVyniO;Jde_1sg^AF0+)7in zFn4gT)AW_mTFGEk*60~<3mZMAc~-r}Jq%Q`Tt7YZQ`B=H=-58N$%^&za(3}0v_wyZ zFL%-qk9_DPiz&LuFno#Z^V0V=e(QsCQ|kC8$(mC?B7-%a%wVk<m)?JkgrH=2SriY} zE$=!y3fBX}?R6klZUIdpQlVV%A*qjt^o8&2IOJCpat4L;t08+q856_Yn$`@=d_>0q zQ!rq%M3WK+O?M3UHxUmj7$a0SO3aIaUf_W^d%fYuc+q!g#?+}<ldGgAS8+|QGEaoM z*QlC&lr*_yjnL#P9<_f?gcj(}PPWnHqom0L)}SVDUQP4!?4p104r=n3tZy66XAK7! z=`#hbNH8gA{5n9KOHM~Zfgg+pmg*}W2dexQffnWjph=Q*0@a#qpyAd$`PqB53i~61 zJ!`d`|J`Ms{4CI4_S?Yzh+zK;@uoF3Ana#=z)#;s*xxEJSucMk!KUPPqWa^<%$UFi zRj@$=Y>>c~GP+9%?2rZ(>=y(!&>+Cxu+s##6u`dyI~%ZH5ZEz@GVQr~1bdua^zYw7 zut^CW)l%(=nPy+o`arrcd;{9XcE!CagB2FKL>yiedSX$y$N@8ONtDE?kdnmNq?ja< zEJ>V?Nqhnz4|ac{BzCJw9E?q(izNvv?j`}%ssgGt1XN1`Dl_&<)rM37IdI^X_C`nu z=;$LR0hNJ(M*Y@CKn}D9b=@CA0rka;JDXkftKUQc&3Bx;=JADvdKFE*fu^3&EMSB! zAT+n#rK0IZXj~G_*@sPN766+0lWfp*BQ(eELNtE7xch&zi(dN%qPd@{y^Lyyh8=2H zGAqKZ79l=X#~p>cqFD99M%)`huI<;7`On5{6Oa|c$Mk60fdl<SpJ~$-S!^1cn%TWK zMSYOY1JFNyov$B#;2Y%f3Y^*~_B(NjQ+t5@USz*X?3clQi`cJ<eLK#6-?86z_B+kq zY2D?Y!`Xk`{x3n^C9<FEye_7%NnMTmWc=Svu@{vl#AJguJ%bGFkngIK&XDUbD{<X7 z!_#n#_Z2dHA@_y~X<+w`X1rcrVKuPxtb9`WK1=zoRnvEv!vlLr=duBCNxi)fWM9*q z5^B}g4M3YrSNKXL?|zs_Dms<buS*bTmxbI3F}Z&S28eH;2b4%Zut?!PQ6uKjfO6m( zHpSt0Q3Iz_h4)^qFbRW2N&VS3$RsRJ#IM8nU~p2G+CnzJo?xQ_yewdt3>v4`P3eaw z0+fuf9V`rR+rgsKZIZyOfMGirxm3LE8L${4hA(i+EWcf>U_#d%N4)76-xa=qpZ=1i zk<WjkEFlndVa+YnvJ~~tQdK@nDGOPu`m-4QqSCOjbbxTC9c!~@@(;B9%XeAVVDgCO z$s>;X>PpGDG)sT-0SEhb2)^;y+&>Qvh}h659R^7$la92&{_aQ;53|+?OzFqnZ|^fK z&zn}+*bfd`C2Fim+sxY;y^4y>5HINX+sS{@%NMJJd@1^}Puij~%J*lv#{te_ufj>M z%3`l!?ib@Pz+%s_{7dk+1|ym_8pXqQLsHHl?la?t9;1p3`@e~1Lyvp=;B*IWN~`J@ zaxJ+z0p<bVc`?-d&1%ixY}EX4%U4>&ggSDwZ?($J6~xVZ?v(Za7N!0d@h0hw6D5Cv z(<j>4Ost@?IQdR&4SKA?)?m*atTnjpHL<pQyf>}LI+XR_g*cu^k9YCxB>?0h733iU z<RJpNkw9*gARCscAZrNZ-jxDmZ!^e^9ORw}5@cY44agb-S+){E4neH$fh;Tip5p@K z=V|CM6y(ev?^p`dx2n{)8q~LHF&lqZX#5&fsSgtM{|pN1OE#OR-@>W?dc36mz<8Sm zn@$gR?Fu6GHzEl40`{c8b4*Y_Bn@ZJsyU4{1Vjsrw8-t-1?|fX#-d;Z@?I*<dZ5=t zl;m-h7sm}=94B6=$Cx579yIZyfq3y*jo^iUlZhAGIWJCoB`<b)ZFtc@yx4zKgS@y7 zS>nzEUL1Q>@S=ZejJmen7!S5$4dRER<zUqsPFt>i9xskSFMj9r1YznwyueAT^$yiM z<V}@1ZyL;blbF+_$<u6!IRi{(c_%UF=nBD{-2XN)r-?JCb(~@UG|q-OJBc~VS0HmH zAdlQnL0NwMs9=uP3m04o06%~Dt>#SPVsYXvY;cM6v4*Ilk0E*bZJtANVf-_@Dc@UG z@b;YbG5-G;HRk2e9F%LUru<;6*ju7&NIX=<MAL$vFhT(S;ZiU<%<TRa+M%Ej#bU$g z8)&fsURrEHe_L1N@P<FqY-IDHDw_`t*?g$UGqr2@N!+ww%2WkCL$ZGvwp_?&{evdi zJjP{{Ggivx>p~mZJVQJ>U5&DNcsa_Z4^%-tTZL>&&sWHA<6MT$H2T>h!xP*M!d=Fj zb-eHO?H6qyjO!nB#>D$uSv&E%)|^T91eZ9CD#a5li%nxwyfhRi_$gg$9n#|#4T?Al zsI|~*bG0GAXse-RYEFM6<K=XiWq@`Lel%H%jrqg;c5vn+&eaYTXLW2E2jZon;>`a! zaQfrr#Bk;lPPA70AXX91Zx84g1iC|0f!-IJ#%uFB0d&mI0d!8hoEXqC$(F$XWgEDz zG4qsWvl8Mf3W+i#930m3kgyVR>-n^{gG(G$=i>pkEC5C*Xjy+UJDRq}<CGIzu8P5W zpD}Xv<B~DB`Z2Q(O<b|~&T+F!2E3omys5$?CeOo@;caiU=S<H>$FvlBl$&Nrx$O&I zRjQ5^#e})-m1}9=aJoA!a{FPCJGj4#Sh~4cwLhC}N&B<XcI%ARL~9kizcg+YjOO@} znU)-a?dNdntTlg!sU74Xy)l$2{%z)PFFt6z!%q)m?>#j|+;(d;ttoj{9*t%2$8*{z z(aRbVE8}*zAE(u6g;h1D1I7*E){%Zjt2n5%jN5XR(bNY$j1J!nR#9`EDl&KA;?Bn( z3Q<igYbbI=kz<Qz@igIJ*<_fS!yP4L>qXuw4r|G#w9kKq^1Ti*zr)`g;fHNn*n7q7 zIOSZoE$7@au3;KDH>&4>porh=ro(HZX@|NwmAUFJST@M#Oc@%-C?wPBf|;NfW_8%O z2CnBeCdqV)Vl1OBv(3(u)6}>*9q?xs)%sJqMsA`q0K1(lF6<~%FK5n?m(X7$?_TXb z1~$25o+f`%AQyYF?AY`p_eDr<H)*|^w8v<N#w8esOnHLCd9f?w=QC4TWtz&XtBRiH zEP9cB#a`Z3qtFMSi?pu*&S6S~&fF-LK7>fTBimrWqF<Ww2~i^0_~7w|`;@fGcv|e+ zK578>Vec(nA3G8%_MsXL`LTY!hb+zZVQK}G8u)*~raNMV^wV1wzA9E{>aOcVhwSTE z<-aOkJj|4=NxPc(#~I_S8gEJJyiO#QZ<ka;g*B<?{?u_&W6VY0#H(z{t4J1?()aKB zHVC8E6GAh49W^vFj@IF+)p^FL)mdsEIipB%<XSFmP=Z~gX}3HJt#34KcNg3$zHGSC zGCzOlip@EnqT)#SD@_?te5KK!g<B1OjKeKP97L(}rwEU(Cr@#@!UJ8FM*C^oMtgX? zwBt3}+8@uc(SCi#IX2pxW^}UAE|H!ND&sWTm7bb}L=r$HGJrMO$730s(*cQgjrN&q z&#}=ya%~5U%ON=6D$w(E*LlW?@W#PpmEwP?GMo*T>K7)c;M{@X=aj@Jc1?F1@@?@A zJXx<3v?g1`OvIQ6lX;91G!s*^I7bvSdB?+e6{iueyCzN}ekM*M?&OVlF*M?5WFvmk zB^vQ)f=wfy!HwYTpoO1`t(N~ey%W_k>?Z(Ejm5yqjCPnurw2FSes@~+YKI&PC1ro{ zC;|KjagfF9dcK}UgRFzGtRB$0l=3anJ}+r+>=n6HHnSxazmnYO-<~R6CVLxgN^fJ_ z%Svy9rxUoKJ-PkgS*6cWVygXRWzXm;r$Zge^^YEC0}BXmTSba6ObFt!Yh>!dA3}8T zEk6Xa`=%uTyIq_mIdV>?e~x)_zpsC~i*w^2&Se+plro!Dk=Je(^GhS@Vs~-Ao-GM! z%(j`|z8K4ptM+EHcfyPNi}_AX-@ji>E`iUTkh=f<>Yrm5=STBYFu4RqlVIl6#_r;D z8eonLwE>e$V4houU^e2#UBU9v^?d@&gBst(Irord7iVfmusj$Kb``>MPUL@beS#z+ zX2a(ExhlGRLN{=sKv%oUvSIV-Lvc53O5eq>EB^HsTtJEj7J|+?z*xX_?eC#;isuj0 z+~qIeo3mmR`!){0dHL~fgJ>o2t`_R>WDzlcZs7}!zJk_3Z_K8wg)fQj(VW6c3YiSH zo=>$o=nw)3*`t|+E4cWVX~=&?Z%nO_gsaNrq9jAVJWE)7I+ddlOzVMJ(rpd4DoL!> zE1Y}{>q&v#z!mt)H^+MkP@ZJ;r_pss%JR|0m-3Kk^p?Wvhjd>Z9WxFIu`wNeb_qY= zS%&{0#fuIng6ESb@=45O4B@M>kf1k}H8`2jqNXDe5it8r!ZrIOk$-;{ClAA)$4Y(D zVr;=vLf-B;f?kv%A6Z^03FDJO%`~*eb0ktCiIJU_v(;37l`ys2yYVMFHiizYd7=&1 z>jCF%NCIEaG&<CIKH-%iLw8vYl7L9V_+oVCV1~3BT2gzL9T5mDPB9SfV1%(Z3s5YJ zeidGv%eulPA#eff(Yt@f<)aO49tLy`XHVgWA)f0Z{=sZP*I_jo3D}gqc>z)Ox(BV* zWPx6Jk<G+=K2;|<0jy4bT8!1nYWAexzn51hkwji-l?8RHD<<wCTP)kLv9eg0S&}S_ z9uZEl!Y#!MTYZrVrzgSrUcxD?v3g+}tM43a1E(j!d4b^Eix+=)E=yd0bq|9Bp~E9w zL@A81G|$RG4m{0|JKKh~mXjV0EbuMox6$Ywfj@~4jwMqK^QBf_zU%6~3EJWwtR|Y= zmz?^RL{iicM$i7_DUp${rp4(GH9rf6{rcqlz&3)DgbFZIa%?8&*vvYZhX6B1<k*Bv zm1Dh#W3Mb09P59!!o;y6;Mmek8;<oNj)hS2X{Dq9rw1{PZFpR8%)yT^MY^d-ad36Q zql&f!=ehD&y~9+vKleLA{T1#*nHVuT@;XKEtQ`8EbN<70&iOaeiSuPKoaYmvaXA0R zJ$SrY&LW1J5uPGTV7U}PITrw&HclsVp#XN?q6#2`1W<ppNC@DrYLftbAb{@%+6W+n z1dzN41@Or&C;&gZ=zVqz0aWur1-e=XB{2pfz;UX!87!Z0$G(^2^wrTl1J%bQ1uisa zq)A9)#D6Z0EBbJ0T-t}EQ5hqRN*Wu*k;bKsD2=ffk~DgC*2dP4X3;2?moikb3?;Gb zE*E0?W|@CUEPfEnbr(uE?S@!}l2{g(lN}&l+;dstdiA4BED$;z=5-#j#uJ3aUzJmy z;9*Tn=yIb@-Yl_^N&z=@tl9Q&_O3s!sw&%`dj&)AdP!x%%;e2bp{Anf2$_INc~VqR zN3WVlNs5|1R8UGW3{4O*`(aU^-qT+B(WX!7ys3Zu(Q`trG;<2aX>z8ik50cfk1`!g z(HibMYp=b}K4;%`5vBfn|A=SZ{XJ)&wbx$1_C9NeZ{sGUMV^YY_<Oa*-!I~@@F}d? zV0?N>v}kRwNWlnXV~J91#XlKSTNp>HQQ7_&IDK~Q{Ub-h)Z<(Eb)|zLkPeiUUQ0Tg z_NIRu*gw&!z2PVW8)yH>jYYOS^RmUv%XS-!nd#0Uj>jRMW_#7KWueAmc~4^I#p4hs zU|itAxWH@Ooc+g(a^@98I^M{?y4sMFWP_R{wQ7>ox+Y1jnk2RMB<a;vOp=7II7xDF zlE@ZS{KHiE2Peq}eUc<R3d7NGIKp9Yoo0XRihK4*7tynaySU7lqh~HN7SgkaH=r5g zU22^fTh_xlmOXJS*DsJ`nYAp`jP2+_jAc(8%Sj9PSPtfYeAinyXGgcnv8)vv#pQ?g z$@a^kMieu*WQMJ3H@8C7N+kxWc5}<BwgEQ0unm7{wj9>tO#A6+s0tSG`Y6{q`O$v| z`LW_&$&Wz~xHkp1rI&-LUM9HowcL0veK~LAS~b0+p$pdSxvZfLne1^W#FBqg@+gZR z&#ubKZQcb=U_-RG%>w&rtPt1_V_nwYA+Rp%A0n_H)^L0C{<W8F{ik2+9H(>~r@zdT z<Fu|c)cQAFOPHB-l-p<Lak(wye|&$<-7LB7wndtm6JiWFN5r|i4hH#G$rBY*-Sypt znE`^o;_2{h+=R5qHGaX?6@F>Pd$kJcw(r8a)Vi$8h7jwLyG~e_N<$@`+Gt<Ci)@R1 z+1`z?FBc2t*zQ;oYG1DF7T&(p74oqiFqe<*1Q^?4&r6*&+HGG}8%jmJ;~0PS;zHMy zn5L%0c=wce&nL!izpn-BB6MJ|ju$@W;{b>Ayt9^Dme<{urH7}DeHtSB)X&#~U2*j( zVE1X@+RL^nH(f*6lw0P=@jG1{YE$mKCcI7IbzW=Y7V<y7!@sb`uk1NFersE4Q>MAK zwcH4h?EiyM*1>&lT@BZlGAMs9HGnQ)8TBm~lz+w%2Bq(8$&AkyhchUb*~KfeCN*j@ z<FmMYp)Hx{vL%W3%Sk=XvsCY71`RYP9&a0^^wDS`rIpbw7!#M27TQv}ZVfjitGiyd zA?e(eFeEhva(qTE3N<9#yM{L;6AQSozQzCeUh85BYyE#pL-L8+kQ{#rF(mTz_LdCE zldU%-=^X@12Y0wKL!vj7V_%cy@$i#K?E#2+*kwi3_w3;gt@~RQoUa1^%dh4~t-+1C z)e&3xvP5`^M<yR)-3;fcbB$~9)H!iz9R0jf`wRJMxj18pvudr;hVs{F5XBRNaUU{| zp~M3$S%ya}daoGE^X`A6_&z+YGE@F!9;`bN#IHL7=J_*bMU!{Yjo6?j%ZP<uAN!y= zxaX5kkV);uCV+fA5GdaeLz$0e0ZUuMQ{Uz9pPguO`=Ix-Kf|NE8sKZA1}M&AZ`aSH z>tINNkX6Vkijw<~U$@@7fxmZF<87gMk#~|C8KiDaAa1i>+y;Luy_-1SvZ(W49iy~7 zG0G_J##8N(kwz!lqSwW$wEO}6{Hp~Rp;fS06|YtEJnqWniOIn4l8)GmyB};0Hl_ph z$PxJBz+OFh@h<1YZ^DV6c$b{`qwjN;J0Q<XqUzyuZ?`%#)y}&mR~zR1x>(fU*1X~C z-3i&4C>Pb&1MGjtSaGa6e~Fv%eKI2|PRxdF;?~v86(>AAdl!QjUOU@e+>@-cfA~Z* z950Z>bszsuqT2CU)=!;3{?Sk5k9X!tX8!BmP?v44KYaeUERSo^ynL=jH(57lYoC@T z|5|tcSh`1>mEqZ@43C{Po2Ig6<K0=a_z0mT{Shr>k41m>Rd<iNti0^Zaa1QFb6h<` z^6KdPQ1@t9r|_BM+!>r#17~txz2vial~*fyb*i0WPT0(Gl5{gHn|U2NA-G3MOB~lr z*C4U2EZ^c4EPvM9LfY8Ha%Jl`KgezUh3S`V>z7O?QpQ)`X@CDeFVxl_=omg_{LysI z`CWVfeBFPh!}tGBO3oLDq>Nj1=y<{y9lDnD#V^T0=-bvoNbrb3xW>~$w%9cY%HDTh z!3Uvh%#~+~Yom!wam6(I`}e}oO!45D@R{N}rt#6}eJ9pcj)w2wH%iazOT%zxia#_A zEmM5JaClW=GR2$1x6w1jZw0-WDSjj9z2Z!9Xj^~j`J?}Z?d&0`Tpp4pZqZ)B@y;6r zD>DteEu5y+lv1}FJchHs1wy7BNbRy!T&X?LO2tGgwHg)Sw^T5+-{0gM+9Dj<_~~+J zPtA4>Z4nIZv<}2XE5f1u6o+;@|KqE*ZqAlHE;n18@i@$Z!*KC+WM2OSE1?Jz2$fKZ zt%rXWV^6zGbM|yG_Vhkm2(#QhE#~>pD59r}v8RKur;*sx*QY}M^D)`eQ67}K9YX4s z@B_V};s9JV`uUa61yyF0_%VJ&h%mrWByK_!c+K$LCrCvd2RwnBviNBTPe>OoS+NI> z7)|CUQ1EZpmoLM|Tb(&%Z)L*%lw*J7#?*i1{lvpT?WEN4Q%Xe*P5Fc4bl1i%;FP4M zyvq(*F`8&+-D(xrRqde@a9)bsiz{Bp4lel}D@vn`va5E%o~_16&Pz+mL3C%fn6I(| z4!LK>l$~#3-;iT<zhtUYDjHBK0s$!%{R%?QPk5$1Ar%cM71sy2R0R1SUpz>~8ykP5 zR6Od%n7ath@`Dmh=yK7AmN@n{%?%LsU0$7HuYb-8Jt5&-Wcd0n4@}{GoQ{3$7=ZOp zyN};EQc$Lh1S-V^kJ!o$+|pbsLOkC*OB&hgAMpGwE@5SJ`Ib46Vkiw3PlXfGO1YI9 z$4Q<gw`2N}+o$r2UbIh3FXEe;jXr<-=PGe>Z;`M}rmY57F6GsRlAHajpD`R;I%pr( zaS9BZ>}2S7$k17n?fPeT>!-k^vn>&XJ^BtA+G{e_L+5<;Ra;l=o%NET&&p}%U&p^a z<_z(#TFLE_WXckl9M(*#HHX3m+Bx<mY=yN=&D0BmO*t35!hMaWTEZ_*y4Ziz>~?3f zmhgkAlAUL<Um_nYr`SPpoSdy;S~z>hA;!@zuE%*e*T0!$pZ}L1D#rcW5n>ETi|fCi z#JT?G-*B$KZ2e(5HInOFoQc&I(${689hts1?Kd*T8<}o7s-NV1qwe@d-R(CzGc#0< zW_XD=>W*)8aw2~tFTT-Y>pp*M#X9*$$DICsnn)2n46Y&T;N|DI!r^|(iIW>{@uW)W zcgnQOHa>~#)H;Fhg}1Cby?I{EVry0%He6Y(XAM1zwbpQSN~NwAmuMYv<*FV#C&akw zoL3~yuMgkel}1-yQIyA>P%l{=3^K!GDTLHtmc+1ghCI{{xwjF%RO5fg?Ec+wGD}tm zO0w;eRCCB7nF+PoRA#x4to9tTDSW1sGq9w$6v1FgPd3Ytotvt4uE`@+L``3Z`n{su z>frAMb8r6M>kM&QwE~d5h*qd{pzBBqJeBL52qSPJbk3C%f!!IJ6qpoj4ppcla3UPf z;S=FPE}sauSbtbamGgfLAN*gPTRfi#5zmLPvqG~9*(_43Q4`DyX9e$0pY@7ZwR@Px z@T2o5HTv!d_R}Kds8PnlR=&wE3V`56bED>7jSK7Fq}tg-_o<6`pe8?`8xQEd^`iTL zZsL4)=XOe{Hx^yem*?8bZiG9-SZBHOOgzn$Vu+o}iSqeWE1!R8RV_C%QqNa8C}lnh zY#A#MGFAXnzrsEQaK1~%W~0$Ql_O<r)ijrk<$#Qx{;@e!+0I6z{VK}XM*hdw31sZ* zH8Q0CZG<Dz;I^R9?p~qjUSX9y$%A(<F~`}xIoQ4NcK5!R>gwJk=w2?>y*b#uIPBiJ z@w|I*{x4hfu<U<cjMyc(O=*c8N=wL~1GU5sr6qRQTEc%uNP7D-*y|$H60${=I9p_! z(h^0sOh?~`2M60jSL&6#;o%}y98JT!EeT(x(ot{qsc}x`%|+&Q9xs`<Euhz1O=n$y zAoRyvWZv;{oO!#)q5iP`u)(Wkg5Z6uApx4-yXYG6zr=r~t;lFN%4)tc*4bfk6z5&z zWQWgB(aUP4vso93(VmALz6m=Vg&oedZq8P%lB3<jYdFrcaAft8?NJygmh}2kIX(Qq zSs2*!$3?v$dpo?zYpn3!Ud2y(_JeZQsj|$FrM^2X=>dUMMcovh+^Y1rp2~G*Ca+l* z`lG8$(m#J&(#4iN{;~W+^Y~JWi}b4D7J28di(64H(@`6AzpIGxdK|kg*>dcLP7bXN zy0wWAw)Hr6^Rsc^Vm9tuv~JE0JtTy!vA|wyMJ^mts|8r|I7?&>vlC4_ZD`^b)=?oC zQ*h42U#xdG7yZ5!`vrf_{EutVTNDF}vYB~m5|MxZIZsRkQU2@wF`SuCjluj+9OQpi zO3Odr+ot@F>Fnuh>}lQ@JO49@$p4%pdb%2WnutC9W;Eu1MnV3kT=sOIM`TD^o78dW z?F=nhq$Wo@Otn-Ezv3KFFWb{xcUpGqXUqfDm4xPj+{vd($3rXahgP=m&~=x3=oozH zI(&cVIzuI&`lYA@ti>?kDc>d6%FNTx9UuSi?XC|^(23q_N&$U7H#9!>e@6&t8amMx zCKu2_cW?o%v2M<iS4aVUxs~zp>Nds4MXo8Afp63}%3lA<35}13oh9BV1K;R(qxc)$ z&0ow1^O@z9$v66#jE|v)4r};lbKB$Nh@*ejoi<%`#m9d%TmcAQHE;zWJmW*e$E7XB z$BVua&e`0rS{)y2o0!$+@?5q3Z$g0;B7btGSwx}7tp7Qq&}Se--UtnMpJ{GOi2Sz? ztb3GPKu(3(m`cRQBki80X+1N%c6_Wpow(wytX;ko?2Z1ig$TKYz1PvRt}seoIKqDw z!QgcGdzPFI`^Sbx$^A|fj>l}A4*!+Kr^CeC_;l!M-JFeoz%G?($S8TgTS%V_5z<u# z5hX7Q8zmq6T=4Jk=dFp7<*s0G27~*coPjMV9Y@<def_T1#>xL5ABTyL$GD}7b2#q( z;ZnK^#)QVl_1}b#kDnOMr7LbEm#%+P))hOmRE8vPU4DEVF`S5x``g`ndvs`gJb>z+ zh>yR|<lS2`f_HDLb;Tyw-Mb+|YKd)1OYBfu!j6#hRD?Xy9U*^nQb_sdCtHY+;UClz z+jK4QdEQSRB`?e%qU5hLBnuz9BQ#1r)fhfX{_hOV!j$2tKddX}Um~OAfBb(GQF5j0 z^C1x>54Agd)C`T1hc$+el0DerhxpL@`oQNyc_nhp2V6QzPQ}y3<(CxI#D|kVL#*7> z87qf8x3PyaT5h>pVdLf5q46>t9_*e1ZHSmR+)6~ui-*Z^>@X@cVlHV2A2Fv5<Kws| zosVORb#wOQVi_^t>-g3MS;2o4E8vS8%YSf1&GzRw)_<+AS$>=2!kLnx&dB){atj66 z64_&Ct$ZxJUeOf2I0^q-<9qJ3^#au$_XXn)?)6v`Ivc2Q)j+L^INW%En;G@#e~k}r z8jO1e8dpUwi)rU76ySJ1+ZqD{T3#<iIKjkX2knEC5)&E?7ImoEwqbv0`+R+^y9MKh z@LPuhwgzpZhyAIB{gzdc!RU7S{t?;Vc<$HSB);><Q#IhreiO%q)2cI@EI%<KvGJEJ zHM3e-ZK@*@tscZ5aNobzrS1=Z;0cMBY*>Zm82Ce6@1v}G0QX_mK!Jj+8MrGsfgR3+ z8tw)pT`WUg4qFENJ0pKgUNIkLH?}Is<J*uk^^zKLc=^uQWLATmR-@|LFq%_Qnqc6% z1jtwhpAWv3mIsGLhxXKY<)ICU56DvpxL;Hf%_~bZoaE|=mnMS8eQNL>WWU0zqArFZ z3e>~pNk}1b)Jsx{9V`bgmCyQ)*2I2<dBtWyD_(^EgO6gStqgxyEsAGjSW#ULS7syt z`9|Q={(VuwcdPfUt}7YoY*Mj{d%zEZ#+dD@G9XTvKRHrrjE_dRzlFfJF{>&A=-)eb z;kvxMfc%t*dzJp3nIq(!hKnr8u6$q@cYddK7Hu)NW#_-RQ^pU9;rp8h7<jUXxrdu( zYrs=k%3&UbWXFHt`H$HW6Du$S2~6-^8WS%tDFo)dFqi~^8AM>73WG@!n85^QRv1jO z!2FuP^d~XcehBschv;Wy3QTY6{lj2Pf$2lNe;7=Tz}!r|e;7<aVER(;9|j|N(2v0U zaFE6n3QT_jb1)1hRbY|{%;RA&MFNvWU}lEFlnTsk1g3uviHR(iwrTk8+X>Y7?~tfU zg&IYm-lS0*6v`w}RW!=+{lXmtY9fu=tWcu~R1X@pO`*mRsIT58Q9BeWn?U`JM(t9l zu>@)vjjB_qaRll%8g)pa#uF$%jjC6uR08$aw@B1+g-Rn(&(o+A3Uv#CT0o<iLJcKQ zLuk}#g}Q&0KzV3XlR^!n^xpvz#p}Z%DxE-Wq)|}{l|jva8WpQhnFOjAjfz*O;RNdJ zeiD_SP$LM`UK*98P$LP{8XA?XP)P(Tmqw*3R4)S6oknFUR8N6QcA&o4N1{xHN+3|% zX;h9vwTlf!-A|+LRHzOTmGUQq+)hEjCqtJ^+@XI+-9dRwUM2tZb4wL!Ac1<Xj<zof zl|rC4(x^&>8bqLG(x?pzHJCv4qEWR9^=krk_DvF1s8B-))Lt63O`&=ds5LZdheGus zP`NZ}mqOi4pt{qjI)&;>puYG6ZC@0sAA#CVqv{o^KY_ZRMr~H8WCAskMjcnEECS`D zQ73;C>NW!P(O%jrDb(!*>Ny&9TA@Y}sQEOiNuf*vHJC=hQcQ?XrBK2Dp{<fajV4g< z(x_O48bhESr%~|=l}(^#(5M838cU#VqESf-HI6`?d4sk}3N@ZUy+NZ=6)KfLt)@|# z3YA8n#?vTMp>82i-Dp&fLJcKQpY0)00fm3Ml|a2rqw*DM7=c<!qY4!&oj?tzQAG-s zL7-x2RH;H`5~vS%(^gNRh7+hwG^$deMi8jEG-`uFjU-ShG^$pik_gnlcG0?5p?VRh zgEVTJLMfk0p&q4CI}|E`KuxDnyA(?KR0?&2hN=c6qyklb7xQ$H4JlXISva14Hlu&o zl!eVf7b%uy>7;lzKqn=z>vd8Ri_uBRtf|ONieg`C6f=_@(@7?)(@8n(Wt|jY&*-Fl zwnirvvSOW-%I?xhMQof-DrG}8Qf0aIe|CdTh0Fo->r}`LunYgLQTayy&vfc$p#D*( zLgdbN>Qso#*>gG-B5zi$Q|o|QqEmk%a%MAiDn!QY4xI{-FH6y>CxF^Rr$Xe)uF|Ox znX)tYX;g?j*~dB+B1`tRPKC&kZP%#~8M3E!Dnx#)LZ|Wy>kD)$L~d+~PUZV@hU-*_ zyjUNd3Xv6y)2R?SvETxYn#1?|=v0VX*fE_7aS7Y2Qz7nPTXibL73@)+3UPk}Tc%SX zE@1cQRPg)Rc%2G<JxkN6;J341=~VE`nNO#J-_6e7t4kkHPwG_go7sCh75rlMnob43 zmu=Fi;McM$oeF*{TdY&TFJ&`yD)^mjluiY|k`2(Q;5V}FIu-mv7O7Lg?_=N2*JTo@ zf7Pkrx3L2{75p;xvQ7oRi#>m(Q^BudD|IUPO>DkS1;2>>MyG<`!!mR#_%*DTP6fY( zb<wHdm#}}$)1?}yU+GlvE7(z;3Vs87L#KjYz_#dAu>0&0oeFlH-LF%@ZnIfB73?w_ zt5d=5vLW-D<*FICr;}mFGH9fOS&0DyT02+vWeSOxz%iZFiqh*~3!{I16>s=g{piKT zwtEb|*!E*@d$A471TMDi%)`aDe0%kXFPoih=XhXsIZr}a-aw&QeZj0gy&LdnUx2OC z7G*gs9!lEq-3$5CBG>npM~g>rdoTr`BP#%P6Rd!m{V8+hYTa^iGE0s;K3ct;f7NRq zSV=F#+xK_h-VnDJH6(vZk{q}HbD_<6*oX9Xp?q2=c`}{*Y5tv==~ZI+TrPKXGW29q zChNGJJ4ONF7zMDsT3YiHnB%X|7`e0-OJH6Ig9(K6&1++d!eH`4`lc|qY8bwg20pL= zCVuO2EU@OY@;NS^E}SEG-|ew;X5i}GA8i<o0fz|lAAJ9)_ws+O-{SIPerej*$M8B< zUdJ5e*8zFm4zKftq;O7QnV=XkoIq;4-c{#`e-I7pv-P+>n{SJE#V)YwMsdDF;DMqq z`DW^frF^~DRR)5W*r<s+d81tK{VLJ9-fQDy`4cBNo)}9!aiCzaY=llp#B7`Q_7B|G zXuPL6sAzn5ICp<ooU|N^7OT-Lq2M>*yFx(s%*;FBSie{P{Z6I5eAj<qy?0tvac8&t zJ%{%Jo3!Ii%&6inT2L^;(df(fd81gZQ7r4>Xw(7k6wn$4SW|&&^flfoUu%@ljukWq zsr@EG-&TBG>Znwv3II44&5;Uf6_qSrfmRB%M<qKEmF$0-8wn*lVJd2;fQh@)gpwV9 z6)3c+sL;mU=u&9?Cm_TWrG1pX46t?uQiJ)f!uK?l29y2tuWF8f+oST2{PqUd?dx;h zYCp+w`xj<8=C;W;&XP~t)Lu+s_tPwWnF{*So@CW{j*wjXj|<UhsjU7*u4{6HuE~)Y zx%A(az&w8&1|ygLe?edh!(imn|1|_=P#BC{l8z@ZMi`7-{?8#WN4C)zx%{6?U~0o) z<nsTu5+j#4=7a&{3c&v{_cY*96j^ppCNTMd4myG117w5&2NiFGJ2!~96O+>p4jM6H zPW%Z*F`p}L4ref~5E3R~6PqY|y5F(qiTEKd>Uw{A?yAvs-2@N<x9);^d)}>khwgdX zxn4b1S2nJazIyLfbyxSyVBGcl?(%&M-PNzEURAw%_3G8D_on(YoL3;ja-N~VpP{%w zhAVl7tNa<>{BHgX4LrjNe}<g}GF-(oT<y=Wwm^mzJi~H-hUx+tuI3r8^k=9jkf9}q z<^zAu*uDK&{yeQYH1FowT_8_e4$ZrH(s}a~cW}1mp?Wvhh52(yW()Osa)t8elFSya z$dl{!UEW;e@35NK&&L5t(r7d%-{9d!<K@>TbL4u#oB{#Cc|ZXJyDDokTb}P60^6?j zknD)9j!y-WYoQu6wo~(eNiu=1I#l2r6Wo8QD++vL0$O!rfp2Wht#0D1TL>^sT!3kk z1(+rw!023n*>!+l-f&9J_D5X-hSwD>B*4fyP=NXNOj&?=g9Mn0nL>b>JKZb5@cfbh z!)rXb07F0|r_@|02{8NvN;YR+M*_@NF}_SNiK;RjBLPW(5owLC0F&L<M$(I9&k28h z8b#NCT30V$px`|_lAx=0^s;E<>CTIZCbrQYZfHqn$Wg1#g<hQbGy2xctuKx8nD%^~ z3YS;e8|2_ovY_J3+vL~BDQfr@GM9|xi`OOOt&db!-rD~vN;eUobQ3W@Ug?TJj}uVT z2NX3AOF&x)DDDG_n@>tWUnii14=8_OZkB+S6Ht{8sLEU=0sRF5C4E3_zaard2uSw< z>E;v(=u`q~@d34%A70}E9p8sQtv;Yu^EC<RUkRwq2h?WnmVjPHAXLhxC+F&EH%Or0 zA<&*&P*mP7mq6DM=+<0N)aagZjaMI_cm4*ggN)+&KVTUb?gQ6(1IQBSzLI~!pLa;l zyQSxT=UEbQk0O8OmrxJTM3TQ{+rmtM{Lwf$C8%UBbn-$>Q)3H0YcJFZX)1`v2ZOLk z(xq0@d>Gw^7Y~<>17Y-f1%=UzrhA0ZnoB?!rRIPreIr6mm_FSRr4bhOljAQV*c}}9 zCW1XS&4E=N*k3Fo*xekK?)QI8*q0CXX%5@ZVOt1xn-5k+{qHhIc;=Tv)AL-nvZrxY zKH0s+ROVbQXOmhjre4L?@?ID2k%iI+&F>r0{JyahwhXM=4byPH3&z@wbVI(LGn0Dj z2*hk{6{BP5LA&z5?n4L4#lznU;(d(P;&sJ%sTHDsw({8A;to*zZJ>Y4Sx1FUq_X+F zfqGsm7+YV=pOX*+agq1{NXiI1KoGTbV+Gt9K!3eW`-5uK`WI`5bEOkay~HM6+&dF= zWz+@nf+~>~K;nfm9EXJm&2vf=YTrL{RTUZ{7I!*Jhdt<S-yWb6mj`<rFyMW{R!BgJ z!&t*h%3zD1qPhfc)Q5k;pWh5#%cZ=Q{x6}HfWMX-MJ?|Iyz#L*M-{hm`;!|T6vQ*8 zcXWuk+wZ<QL;H;}4Q+!ww3m!+XitL=Bv)>G5$+6#+qbKG%P+DHT7M%AG;3IOKegtt zXrFoh5?b$fJH$}kztM%k1FFd!rawOn9!!0B0l^S!>W3p1#=d{vl$o8;k;s)#v~K7k z^p<^=b6E$)pjQ<XgXT>UV$jS}y<!kA6fNfFk1CGHI%MA5AR%LPpq<<N4jH1x3sIj7 zae9L!ArTlI9EEsRVjijof?q)GMM&=)6LU)M?M!+;jw+syRjNFfI=mlsRh|OAkM;7@ z;qE<q%Dqa%ORs+%h0q_X-Bd!^TyUk+TuvELIR)upqMU-G{@HTRR^a{RVk=P0euw3` zENFrx<ihko60)2FC1lGJKH)tgjfs_lG=h`zkj4QlU(8FMR3(!7iho=ZC@?mC#oq_# z*?D`vuXsvDo^NvJALxKyM<$7kWB@=G{=~e!j8RVKJ`jH<_Db^R!U5^Nj(pz){Q5r0 zB@Q@n5Ni}(H^yyl=s++At+7H(%4Pf^7|UJ|i*6{>n}f0awZVvD{Tg6H#9->g^WaDk zIcH=qCE0hzBSU}VUE`4UJj+xzC_W8-QlvK@?5QnB`8~wfx{&oGua<$wBH1Ce2QCnU z+E<i~<)DB5(^tW47~&}cS<E9Y7+OC9tnr>SbXIjKN@4y8!tl3xwKkKk3@&4>%IIeu zNg0RgeyFJU*Li$!e0t_R>P7d2OW4|Q{+`U$b@ovDvaW&jQvLUX<5{-MJ4^e*C96B% zwYAlqe;Cp3Jfa)wQiH)S-jjJ%&kly_vSz66C3}Aq|Jv70(zD0xRMG2o3-{D@?@bR{ z<vJTReHz>Byk+n0dOdwc*YWgheel04*z+{@JcU1N?755{gI&inJ-Rg5`NsR79{+zi z-ePcBp%;yPpwk%Zx5}F29p`81k|mDv%21wBcE^_uZC!RGw00JZX?XS4d(`uTrJ1wY zu(E$4WoelYmKj5JgTqCcnLr8}eJ`i)ncqThPaA+C+RA_e>94S1))zB~mAX+K(ihj3 zhB7JkSOJd}nI-Ho0*{f*IgALRb@su`YjxS9GkGQH2SxsANF(g?2ki5BD+{mAKcjq- zt_|thL4ENc)$X*+y>IV{9|DUu@)JA+I%9thT@Fl|PtC=UC3veh<@#(+#S)w)3-=+o zl3;8S&d*bPYt9Pp;R_n9tSB*K(WlJC8--2Ys2Tb3YjOM$2=6SXz=*c;FekJWdi(|G zC5mv)0t9iu9~%VF?BQra!@)xW$K0;`k4+ffgFB}IM=<XzTtukGwD$8spsmthJZ696 z-$vHach03W5fEk1tx`agj~}FX(Df7$#Zi&h(>x=87f=y86~c0k98DPmY!?NDYJPhr zx~l~hI|eZzm9oDPNc&DJrcx`&+jAOSmTXl>5BKMAhcd}ZZnG<Abs<=SDq8=b*Dr3a ztBFQ4beNHcWAR_bPY*Plgy!87*}8vQ!*v!_T!9l3M~_K<BvnmLzjbgsl%CH)lOYPt zFoS;^2!T5RybRwr;nYY#F}HL5Ue$qQh3G;CSj7ar?ar&Aa5azNLO?asebtl`!e<u2 zR*Rl5Ea5q_Z52u;1$&LEmy(3QCJ1o^&gfXy1)pE+8v(c2Ux(Q981j6*%*}tZaDt2q zkj8^}YKYs)Q>Z^3b#9W#DoK6PK>eOHzdC`uZJ;VCJqKdLm?zi-nFde8@H7cFf(eLC zzqb>&icrx4m6H<IZ|G6Ga>6F(YnY?aqNLBIWdWJ*3w2R`_uNT{t?tzWm;zVR6YMQW z{=c=ZL%ekMMOhMN-IMvtR9}Db<x>L+bvG-a)jZb4=uFI9n7HSvxF7Flq`;s%BY2Pg z9wwf%8MbiZsBO(9Yg2OAs8+}=sG;^jZ1t;%cQ9%c-~%rOT;P~pIoSn{6EJpl^^2wO z+h2hw9)=4d=7Ue#wupMq7Lgp*1$)3aXF<4fg1VROoMPI2;7X14M_hkNw?iT;E><*T z41VXVJx4}hdecRF9#e<SoUlqP!w8wreU}0iVfM@nA7o#x8sg`?sx<>)Hk5<n(H?@+ zMCo3CY<P{0u4m%pM(%7?u+6hMu4l{MVqE=X6>%Yk%As$<0y<KJ`J+z$sF<I?W}>}% zglEu0<~BJ;%*hdxbHsmob(|#014*|eIMPJ!4i-!bt?G!wW91@l6XlNg>S2ChHeo3; z!-kD2FFRQ=2P9)Q>!NM~O>0dguqBlZe>q2hSdHvIpz}9)gU%>^XosVZL)*sp54o(- z_4JSCiEGQyGY0vo<C>SY=?caYd6~U{SctwT;04IB`bBU$nCgFn3Hku0@|D=GT-T2D zIaL(IaipD319+$DYXFWeP+*;&-33k5y8BhR{s`4Sz+Q?({qUmZ)IT8Ce|*D9>VLB+ zr~Z%`#OgD(B8_$OgkTYM4~i6Yfbxu6ORpZwNr?`BB6S}QQ~(<FD^I6_+OkVZ(VLTD z@Mh-6ss0JX=~{oeyrICDFoNtyfIV^G#noZ53Gkw8E%V^2vf37lo$J~V(%e~|+SRf3 z2aqi5ye06Xbu9?w8Pa|7knYPnr2FI{oxT1fLy9pE{oQx&PNJwYRnL%UFPSBIT7igt z)e9HO3l~-Lb>;9YzA;X(laZ;-dI#gLQv9QkiLlSFACG^1e*PbihV>`p9qv`U1C_bk z)1WmuUHsEWkU|?oV-~(HTJpfSKeZ(u$_zsEHAX04wyg@Pffx8Q=n=}stIcfJH0RS3 zphy5N=-nRYt`ARieu4GD;qWmZhu=32Iebi79~=%JM*?1Zm&@U)K_}zi{5<8Cf9LRT zv{;}2YCeDdeH1=DTbze~M_m5xOtzQvPBst!e!lG_lMRJuKPBvY7%5?mhkRz_CGxw1 zNE%DV!cRTSCn!<R@D@L<wtHx`H3!34gyGe>v}zW82?*sS*8!Pa2V8O;-~%_r$#vbx z37_7p5WTXM@{{&45$tq9e)DihKUy~y^7GT*b=!Zu^!L=Bg7mkb=*yEI&Rcg9`a=bB zj{H#b5DxD$F{s~H|E~x2k>hy=)jOUjWpIOwB&(0fff?NGMx}v_NzYNQwCmH4RnbO0 zjV1y~+PYOjysmQc9h5Zt?u4Vx%vY*WD-3-feJNO>V0AifEmq#)Y%QA5OI0RhSDuqr z73+Tr>rz(M4Nh6rR90Lri^-5uS(;l`7>;!y*AH(%Mi~VW-`|*@IR2U<u<v6Vw%S-Q zN1=yGQ1JA18UO|L=JFWBtEe=fXfKp6T|9{OjkgYqU604#l(YX4T?S<&=hz^qyfDC) zs8aSHo#u&F#b6>uq5tj5C2O4)C0Pq%Y@>gaOrML^kLfd=-4B?clDH3h9HYd%_-?c% ziZ33*ti=K~*Z)|AH<N5P(D!&ydj*;Y74ravQ8u0{Ff}`}YJG%1t=>41p3E~Kmlfsd z)$1qor;9h1bBOT(!8(#{#k5yav0z_q=rHS2tH<#B|H^}p$2P>Nq?A8h(;jwEo6mor zzOiw(tjW$>koBCXTN-~xRB-AJk%8GnUwF_AQ-}G@V@V&EC%!Q#)<)6q9uIUJHGf+% zYHtOFJord&qqH@rfLNA<fVTj9K!m?->{DpQY_d0CW1Mm#mCYmAYJ^n)RPsYM+wrVe z@5Z#E>jS`_8x+Bx8*mL||Mxmh%buR(I4u)@L7wu(PbT-(u47g(W{*{n3bfvQViKxA zLGoeHNzQ<{Hgtd<6XHAy-6^|TQpZnlEkA7IPJlrrIEz}<O0@(D)trDR`SIoIPGpYl zU*)?q=S*y<i1e(SXR<lev_S)f5hD~z!r;11{KYXVa}<+8mBgw5?y6)eox?(*aD9t^ zJ|D#aL<g;o!u6(t3RkEt#Sae|-Q2{I-oo|h_BF_rxwB8uGQqVKe3Qdb<7I~yPdMrp zPdMsENBdfPm85;Wb2DjQTS-mUDkfg5d>I95-5fv?Y81MJdPmJFqb{T^!u{FXc#!IO zEc0+Ikhkr^6EF9>&Z)w#eC>8Q4tME)@OyA-3AfDn!Z=4EVeVGe*N3sMR~n>h03VL+ zrNcjf3{O*r!wy^I0y`mJsO~Fn=ZM4oz~QgK51h&x<j0)+n6}qr?=OYUy%v(&JiXs0 zdVd}Ph~D3SrPTYMblGTC1Jl?l*Cns1I@epvO7K$j@i+W7P3CL;3hzRV=~}~o8?zH~ zZzt-+9?L8nL#S{l_*y79iDD~_?Cv%4-~_Eptvc(Hym7+|_Iys64ZKV)NtDu}J+6!T zv)=qHi~4t6xaO3(E=0SF_wrETXme;#Eb)+i5I`86L>yzo^aRNS(fT=ujGr}R4BA8P zs-4f3G@%x-ip}lcqiEeskP170Qj^}CjF1s#QFRDn;sRv)d+7L|L<!I@#z?;in1Z(R zj%r_Cqb@`dqhK?q_XW|XFb;KGZ&uv$S?2l;0V`lV$<T_iX^K~jz$LsN6)4C)XdE<Z znT#nUA5YV;_^OoQ>c|u3r=uQ^mAU;97d1^MFO5b?_JYu8=2S_~{<naC(PS%}18D?9 zzD3pN@7i%k8WGt-kgb8qqT$fqLhx*mQhm6(c%6ISFb;-`sE^neFO*4xY7oqI+9&(c z8yK@|P~H9-YgNB1K3P?+;90<5d7HWSxludY4-P*St$UNi3_7ct?^ts*z1Dqa8?25@ zRJ^mzs7Cq>WF4JtP0`|i`=`RGuz;V-;NggdFS*JbHas(z%wkY$r#q?180zEF{2ET8 z$i+a!qu09rTC$S?<43IvtSrPqqt<<q>dO^{Ts@xF05+L6VX2%lI?y4SBM5L?m-J^C zFaX`<+v`tt(S%`3Zh$E^>2cczo{~&Ci?Le>8e0BOh1kQbg0<*>n@TQr>5Q*mZ<d*` zPJ0Wy%7cO2b5N;8R5tG>RBCfk!9w)7+3eu*&nhjQc~QP#96vr8{s&lq9`$s1xsqx0 z598@<7`097J#bMaJ<WVKXxq+7baP!)FG3IeO|<4WA<M?oGp*}F)lY6(w=fjrBvzzt z+9MBRTNLO=+x(P&ylffC1Rm$jG`o4_lw6l!2!uESErbC2g?G#-xX_Var9DqF1sPem z5hfA_8DNQ3WrtW*Qoi$b-8o>V+U*7m_X-hE8?EcC6>_0fZlMWLanBd6z=YdEVuRJ@ z-!Bx14+9qp_k-{L{UClpk#TPIgcfZpD6mKqu$mUAn5@@-Tqtz8(4pFP!H+ec+BQhK z?KMD{O*wE-vf2IzqTAfhqL?iV!aBX+=U;L}fspvz063Z(O*l7h-9_HW;eLW3uAg#( zgEU55L9P2`DTNUivaq>Q0+4ySQc6Jb>+Y7a>Djgf<3Vcyugo)`v+9R~CNM9Kk7H@8 zAkFAFrjRm!2`^VHqqGs87UjdDI%R_4{s`-5e*U|KvaPrurBG;|@u<IfnXBZcF-hIm ztXckMP4YD>6ZSMIQ*6#<m6(q_jco$bQRpz=y!UBDU$}W}GdDoO0ZgFz)c~7Ej&*AU z48#Ty@yk(MHP=iPNsFFU9l%Sb0D)9SKUEblTE~-rypQk{t#aQj0XJ>q&qi(51&up% zM|ghFKf=?3f7A&7CtrvXDsez<^UeHtM>v5@=zTo+6f%cCmwlti*#vvdBq!d4OuVf{ zB#6Uowql%#;hwOAb2Xgj*@3WtGN__O1fgaBO?Ba*szsrVlbm;&1MLB8m$|~G)0iIO z#TCeZ3Pq$G0bbrq3<gnw2Mmd|mBVb4P~qEM_@rp}qLY&_uYrgb8E!e-euRR;*5CYa zG#7%&WBl3xR=Pt}x`S6rVJrrmLWDiPcJI%j$cK562-aM}TlI|M4s?nw2_m?bW7!(Q zQ>RS8+5+591<ngbpp5f2g1Y3U9v<UYc*E3x`2dm$o*RGMyFfUdB$f!r-6wGHIA3(5 zoDd?aG@Z`?JCky&ba;dbzr*eD^T7$*24q^{MDKdlr9tnyTdT^{$=2P|%v(=Tr(pGB z-R+9O(GczSOodNQ)|>dOb)8UhikY3im}5>c$3!u#HOFM;)Enk=TI=4$%O&5ev=>W% z^^sbnAWxt7Dc$<Ojhm!$mc}V5&%Y|Uv*E&X9K)r#VRzi%bfWhw<ofPn)6lv@p5yCo z7Ind4pG*o>E-55XW%Gr{8iH#xp7rQ<#!)YS!sVzLVCJuE$2f10;MfCuwmyB%KB?xN z6a4y8-vsTrDqJ@teES>Et_fg&^)ZKkg+eZS_k`~fzHg@mKwyuJhEF7)Q{tQdE~@v} z=Pkg&ceaG@4IdZ8w}8B|n-dbuw$7>|5R{9D&tw0aWshSY9wkBsmSm3XrmH}$<_Eh* zaUb8RFX{w{^c`*?%Py}unr?RAm)Ed&47($|F@wx^RFe4)%OY9+c!#8EG$)^b;5V%9 z=W7LI1<JxD`>nsH^-5?aSeMksZsV&57f4ab1uBYKLm0<DKnMt};(`<W!jlDhh!))5 zw+OqwFn(b#w=Dvru51}M)N3+e@qlu*E$Dz3)7VPE6YskO`OzoTZB1gWfM=tw+&%~a zv%YpPoLwIZD(Q>O(GkL-&HUYe$me9yn_)3P9Tln>3TU8&5?br}7Bupq&nuQNNtx-9 zQD-eRZy6&pd_i>Z+3Mi4)nRVjox&^03dRf0Hp@S+Xttzfk0x>OZ)S|#{KfA-50|3B z{cyvK{nVofMC6x>iIc`&G&V!K%@p~+KsA^C#mVx=OavPK*$Lz^Fr)T==Cvn9nt<JP zI%3X{un+PLRFpPQQ5r7{?6OGCGkiQZPn`0Qk`HuByhHhJe~utUUc_U0ibzlq*miRl z2WSxhjLZ}1m2w$3<|(6!%0PXgxyn-plT|9n7&be|9uAw!SK=H-H8jV%#Zb_|DLs+T zrR-5q@?DR*Yj{&V-&A3L9FO0Eo^S9r*ZJlxGr%MG!9qhS{3IZ3<O%oUi{~P1fT9>P zG2Xd87Dv{0COje2i^3BsbpqDK=AoUV_JIzCOYCOZHb%71?*wHKrnN`S-8<nBTzG&- z7fcC*32MmLd)0*lR^Wd*d)Dx%iY)K#q#-~;M<f_QhKK<(Do&Jth>Zkju+c^%=97Tn zumgf(W?)>@Zit$JV1h$zf>EM?gNll;9d>mV1ws@OMGP}Oc=$kJKcXnyrgc{F0j!hU zt@Eh5bvvEJ&-_SN)vd>=Q>W^jI(1H!dL*R-{a9ItyVn6<;SMgx`tR>)Ey=U|uJ!_? z@HFUg)j+igBxn17sv;)J!ys~vgrl~VaL$3>7N04nEy=(+xDTAYT6FBX?@6jbP*^7b z4<$uY!4fmy8rH%0%JODGR99FT3}nbk=^&?ATAEW?2dZAg)UC`>(cr6k-XJY^eutR3 zIW7QR_g&`zm4C;#*jRUVkW&FP%>hVP!i?LR!g5LlwhnH8TXUCDD9@T9YK`N2j4(*C z3Ru$CJf%~|15fFrRm$^(sH2oeE8IsLsl{IFqep1ppVMLIZ#j-?;Gd_@fCJDdoN)po zKxa|hzFydEzW<H7@<%!b4=Q36mGg3F33<jYuqwI(eV!n+t|7Fh3$*$+(>l8x7iMN6 zxHe1l%OgmCSY)F;l*cT;04eu(=p77jojip;FQuA26uU>`LEziO){uJi%O_|l?73c3 zA&9ljI{l=kXTTAWd!hiIpDoZ5LLqIp$!U1BQ>G>4D^|k^)ElezNhw`b(~X}?I6({q zUG{mq21>LzkB(N?{z#(`P&HPTO*6vha5sUhtjnl>pnUrvU%CO8z}g0Mx${2yGAkaG zJ|&j%B&=kp!ZvWPh*%3}gJuEk*SirR<Xf<NjQ65cFnzBjCHi3j867Uo!ljw@DU&gR z%9IeLv-;p18AIJcZy7@!%CFcVCX{F8{fL|-UBXcc+Mvl#NbbYP8_x-TMxN4YN=1Gs zDkg1zY8svLgP5n7coKfV@_uEbAi8D@2cv;(TDpr<={L>JdRJ`TT@rW)PniZ>XA6#p zd=8@sJ(Y71MRXm93q?6D6y-=14We^1K7PuB>n|d`xB)Yvf!R(2H~#DfhEW5k#5&jd zY@H+zSvj|ZG6?gqMEjhM)*HtFO{%C<LFxT}_1A5V-Z{DKLKlgU*Q-`?Q}U9!#Db?~ zBshV|lPsQQMEa{^1!IW#U%{>+uX-E+)t7L(S}XJ7XKPfJ#?rZ|raP4*A!nZQKp~>u zzZg}J*Kjh-$wo@LoDL0fVSr(Ujh<3vrJ;*BeowOwr*Kj5i||^F588I@2VJE_LX@w6 zYOSGpz)<^>sj)Jx{QxE1s+wavb1GAuN4ailYqj+pp~_QfbZtx?crJx=JA(ESH?(~K z+N(8a(fV|N)$=Qtt}UAf(&Z9FN9%VdbgAM`2>&##OMj%K2`+%?V2E2l|H8cr+g8*= zWkW@R)dTcU&D_>jP?XMGDL}4kkIU|Ve`<%z@5|k|<jxI?C+(cujSd$1FR1(weJE2| zuFXMP;xuK=>9uy%*mk^|^`Q8vWkb2rPR}btEG)Zdn(p3=_oLO333?h6G%{c9`C|fe zARY6e-;NnhhaXRPdTb-3rxd%LZH+kYY!$MT&1pPGa_FTP(Ml`}hakr;5e24y>2-b{ zYhP#LY;RvDKsJs}dz_m60(X;F2;Au}71H1GB$fnt=}~~sbv^NGXn}`SGCYPCdpJlF z%hGRDRG>4J-JT};S&-ytp1nu3zduUt`xE(*ZZM&n6XZy7lx*elpuzGW=b*;&P>v<0 zpXv$CNd;Hh+=OzJ*`4ed*d<VZ4PBoK+kweZ5HQic$!ql!kzIgyfqZ!OflMX}QKwRf zq!k6xwa{0C`{?s68oJ^HO*d>_dL@1X9XF6AXlcmdD~A`GMk<0^=*3g4y~n6zo>XPS zhGZQlPLn)Ai1dZ5Ho#_zqT})bMfqUbbMZGe?pdKPX515B5xdMLJ+hyFNkgF`>7%kh zW>MNs)xf6L8hA|h#%Vss(YuVY{&iID+D;tpAgj{+<T)D<*W{_m>UOV(C9^~SXtn7; zDD`DC-aR%`z<;Us0;d|uIe2J$sx8vTT5|_H?hE#Ag6I9iU~|Oseo=4#$34)S;=5qk zDNx&Kc#8@4GzHbt857@s72florgo)79)WhS#pEj`{`Ow0{;sen<hKT@rnPs4p=42w z_o)^*zRJ1}e=_b8m0M$eYPH37`2xUm(<yIgjrefSIu97%6<2;fC^TnZXx=`tN~AXV zwg)pok(4;2gY8tKq~Y;C^Lu5vzTVI_3fA#j`Eskg$VmLoH#iS}?@33m0!^iF*$M1) z#-l4u!_KO>itw?3yhKr?n2VlASyP}>z;o=Z@tjNES_-)W%!FpyS)(T4^TGwI&^dJA zN>#2Wlmk!KvnfY^%5kJd<*+7jj*~&mVNj0x!z#zF39@Z!>^;hO>|qb|>9F`Q!h=PT zsZOP<WTj72-c68y7iHy<-seTwSM?Y#zL4@brqB*DW4VafS+j%Grr056EXI^#Okp`n zAfe0%Pgjb}@Fcs0q%CP<aG9gz9ao=jkkNHO@!n#acH&|RfK_OS+|+<<=bJ>^^NsLX ztoQS6v$ELNF}75L``w2;M))ED;m(Hu!vDI`bgmXt8>4i8yH1^D@h!OE5k@tvf*LLn zH9UYd%;y?vxdv2_!pX5%n(R7tJ+GkMjEPua6c<>-1?WnyydazI7D@fLGM1%^AX_{Y zg>h*+GW;Fus$J+>0HogO`_Ns!-;57-clCa=Z%g15<nnDvZU25Vz545iBPO|$)c1mU zc0&-|1NfzX-|Zfm{)Y)|cCB3NaJ9|H)fN|?fLLc?uFRo>k=w!jq_VI{(A>Y9PV$YA zEEWZlBYQKyrn|-iGSj6plh+XKf<iRltITG_YCvoo(ny$IW;2}x(4gl=^r5zP3g~N{ z)XQZXncLR;44N=!j3<*$wUqW@Q^a(snj4o+m3<t4#C>#u5gDoK!74V7GZVlGpXJW6 zPUMIUARlN^eky+56-YBF+uMdsr&0Oy8goz%o&&0unyiA=`1twX@gjxLg+d_yJFuFy z^|0cFPM!vdIE8LD^~b%j`ZjFAZ->2fGtp19F6KOh^D$%CAyZy42Nl%A%5LS@t+r+w z>#N#-X*grF=~0hCjaT<=ih9?JsMvg0dsmA<M?<#c(RM?2*G00&hTdaN?9megZwJzm zm|k=c;fKAUWGUxAiY&$NW+}S_M=?RcU|o$y%($i?Aq#}u+G^WGul=t?%XdGin)Ua} z{nYIhpfQPhw?BfsRS?-W;-&%F{0om@^8t5%^MbBDwr^PttYM=I%RPn}nGB_19i&r) zO!zUw1K`IK9va76F+%k}0*G0o1Yy9#?vU~Wru-UGGAZSIOgT%W=zt7L4hSk7s?)_9 z6CW5KU`_wM<l)w048kAI;*R}wBq~lIDmK+gRD7O*ipT4cLBPx%x3(`Ql$e*a1R<|~ zsuGcB-vh|ICMoi=33)m33y1Gx%$Wg!r*lM<&~{?1h-Qc=;q1s*H_qa#lD7YLst2+& z%7&IIlwDieDazW*YlE$9RmA$A+Z_3+5f{$qOig~fX_Y3w`IY?UXZg+Vmftcr=<?er z6D5^~15$qbc4wmecCA%&n*!yA+meWXa!`p7<rW@5QSN&D$#~%zA<EtLtyl~g<`V>t z66rvW=uo6Hc^6!$x>LyADXf;a!(eyTKCO4Bkh=5L$Fe(v-Q5v|Le}=Vsymf)lXRz$ zy7T<U*qsXe$+$$cV{Q0GbtgVl@5{l5lJy1mV<4K!`QV!W549tql)j?K8@N$_klTLV z^a*A&g}BDJG0cJ}^)k6j(pb>SQKnqDut%6hF`zuffToT?1|+6Mz7CkLJz&t6nqVd| zpR-2cT+sdWq&gK=T3JnVEmo7?Q8fpyaFnWZovr8SnYVk4HnH0b-GL%^v54AeKQHKD zgk!H#Qv~{ML{Uu%>?1SIhn!h|O;^yJFI2z_j(o-KHvApfPe{R!q_AG<`~#)+&sj|f zAL(M`L5_%*L6R6m=E7ND>=h45ZD^7Kuv*JMZM7-X`w-~XjLNNe-Ca0HsizKVsh%*< zw)Z2Qwy(yjvMN55w0%{RL)%oxD_loeUn5fJK-W*fz1h&fgpG}<;PZ=rvOv<Y)22+i z6{}mpMSH+`@9c8eJNv5gRi=Orx9MBCO4T@&zC`g_zmc@#DqrM))l<4%kpq^Y3V!`* zt2EOurIdq|BFOg^d3TpQLPFJeX)s!yZaU{v+h9uLWwN_3H_1K;>siG$&q0_%4Ah;O z&cMPgqLHE2A7;bCZ~@7GJ0-YgV+DOaMJ$!X_A6+|eyVj7rF%@aKEa&RVlRrEvBz9H z0_gby)$;{T&%gUb_H#kIevZQzIokK|*a+<5dDiBeHJE2OF#nDqnGqih+g)eGucGu> z@tzbP@d@r9T%LR#op<C3k}M*%moi>@?qAX=r33#<(R|Qohlmn?g@_Vf;=vh`{g+@G z9Q{C_25V^=?A|Y@!PxDtC0-O7WBqj&prW69U0;jqhWEk!xUMhw0N3?u@ngMnyw%<c zxno!IEC=vdsKjkOLOM-BI*lO(pSvQFp@<+|w_k_!F9hiz1?eNNyC5wBNX=xB{)Hg@ zavwsv3jxj;D}Jnh!3xr~rgO2JuWEyV=ln2sLzcAJHg7>@D2Qh;#NeAouNEN0eOwSf zK@k6OpM?0xYc7b30pjatCV}_~f_OMV+?ODJRm7|XF$wW8L)jv*-Pm#p=0%meEE)rs z6_L{2acvD+_4FNFO@gAo;Cn-Q+WE?i!H}%yx(7UlEFJBClT^NFlT$0&qv^C4jEris z`iWxlNPI%n7zZ~P&S|`Ep4g9wJ=6H*cs~`lm1d=##?6s{ptqY~qHf<^(nlrbH*kQd z9b1EK6HHxr0vUcwvl+*@K(K-65I_{%`XtiJxKtoBo&iylqiFk$HePcUPz~xbvd?jx zGNOA-7_KURnhI0IPqf*3PVf`i3fze-XlSI02fAac;KCj7Z9|vwK)nA_){;~J4|ILw zf|V^P)pWUopw-ui8*#`CpUojpI2ga47l(>icT;ti4%PZAAPfYeCueO$!iG>FwvYOU z$uYPB**Y*oN_j9m_%5A6!a2AZc5!0^>u}^cg;V8!<X(NM^dL!d{QGjMY^~R(iYzzA zI(J5r+0ug~Oz-=M{<gh1TULu7Yy43;Tgv(%G#~|5(_KiSR`|&b593fyIG;oL;o%$# zghwo;5D-duM0|=|SYsI`aWga~<NM1?0QT5-guN2D4JLL}{99U1gAqxxKoffJ{%sfN z?d(#29?_vX>QJ3R@3cKSdM_gM9(h-ycluTrdg~ayZ`_mwy%!OBpL-Y4`{W)(?<s+7 z>&O=py=R}{Oewg9M1b@Tbo@2^0SD$K0WA`qQOS|;4Ki624Ns8~P@<N~h`?ibUi@wu z^@?brjC2!`u`<#fRIl-3w(UgpgQA7waM?kB><2@|ap1mm;$Db<=)^s0bPi7MVs!TC zqqD~uojo)<?7Of=jn4nQr;pAg8l4I6$kA!o>>8alJUY44lZ?(J8lALvaCA(Z0~wEr z`mG5^<mlY%qh};53~iLq(mb3S_14_&F;4Db8}jp-qfNXh;+6-Qv|2yF#`HX3)M8zK z>R(MBW<e3o6k)hiw4|~*RRl{^BbnGpIu}X9BC;~@MC{F92EdnifAuX>D|HT<nw>mO z-gSU|dY}hFm3}*tZ;hIke0;1EH^K*4_^o3i7&T%GdQ&Exuw;~>e7M=^Ut^!>i-sK& za#>K?)7x1W{6;^2uzkxOHnDsV&W0O*;W_q3-?ATc%%R@p2(=<G_RS!`*e_}NrHd1q zuGYHkFzq$>5!1%hPM9`+cbN9g_Yu>E<PMm&ot1hKGPn<?wAoheR6r}pZLu>l1gRy5 zrspq%X8+Qk0nNe-5t^$38jk}_Wx6^J0(g}S>|54IQ+ypy)ArELSo({g9rAO3pl!au zgcSiA7d60-Ra3%7!*<rg0#Y&I5wu7zYxoo(-weo<H%0aA#a<|^g**|wlO|Bv96<5m zOh`<Lq;q20a^6qOQawzwo)WW&znjvh#ohUt6`gc`b5U+!c~NFs`(k;W77J$jb1Rad z?8K6;Q06CSTS9P(0NOZ=^9tpEs~W0HH*gJP6<kfrT69uktG+M$vdtE#UqOp8{MeC8 zEPHaBz0?m%&hQ{D^MPNB<zv%ih4g}+g1F%<XcxJ|NrQ-*y4)(Ah|;VvKHM){>)TE_ zD^K;0j0w%5hS7jRWgR{XKHCw!;hE6z6;8tqJ@ASixCC0|Y51ajPxLx}20$G@-k|DO z)FTmZU=HXOMkC|phKJ*Q`MX$wdskC1{wqBX`!eC%ZS*~%M&NYCZ|j_HD4pc~_ASZj z_P*qBI=!^0@B@+`J}^igSTaJ3gzu7(fEc$4>WfLj0DTdWOXE{jRFoR6GNu~g%heYV zxgb6a_Y3i%5(*RU)`Wk55ifl4#M9{qW2Re%_ElwjaZP!F*Ax-l-~=~vkV!cJr2Ll7 zF!(N=rF_*6h@HcoNJY4x6A^8JPkL;bsj5afhAq=8NZ>d`lyL}Ky?=!h^DJDXLS-CE zU6{@xZ+LoqHccKEz4Zc%48f5{B@!aqUnElS<3k1Yl@%-MJKc?c1)~iT*k(fqw#9I+ z5%S%?(TRC{_pfrrYMmGX-GV^h5x*x1&{K~R&{rh_JvtfC)(`>oo7XF#gWX*Cb;0k7 z2q<uTeO2G$%9FyYg7hBa`ty3(Hk(OEJ?P?zB81gM#^Mb-FkilT)1~vE`EubKa=tvZ z(U~tAkwvLy(ZCmf)Byb0xFdv+Cp>{eDdAici8aXnnJap}dy?w;HD07dfd79Rb{LVK zNbs>UiNGLv2q=R`w~2r7gn_E)*<6x{u^%tIq4(n@>c^ZW*^f{D>h!}Znk3~~*si0* z`c`T}Yj&GxZIT#D^%@Sh`qJUf*Fqn3@A!49d-GCBHQ<SV2NMb7mM*H=d7h~1NvEou zRLr=6hChpD<SWj+f7uDjg#pZ>ikFkSUj@0sn&DgydBUFf#he-X%T=J|Vn0rYA>s5C z8hB`MB&GOP)>3m@9lC(e?285W{)FbNz@$*kigdb^tPxE)9ef@|By1%lY;A{x9fJiD z9xGBv7?6U0&1|J+pz0K22oQ|T&{?n&7JgdPxr|X<@!1j<8hSP*5gQs7btyJD3pA>8 zVUzY1BL%1LSB5mnP6Y0EodUN4OICblHh$KfKwOd(#O$s?bR?U|JuVH+{PsZYUf7jL z+MJUFiia0=DUv4cTCUY4D%`b<G?gTM;#||Ufzft<+P`EkbL8BFz07JLx2z3=P@<1a zY)e8rJ0ibGIA0#=5)&GcKhPqG{MCt)$m1j9m$!%HvQ8jj-^p~3=yXwN=}yp1zUk6m zCK}aguLO`0hE(6q3ZgA2p31?)xBonrc;el``I|I#Lf_6Bu)&zT16;3})kX#=zaIQ} ze<PiLU&Nm7CX+Tb!ud%c4ek940DUc7CtY33S7M}Jhr@ge6&geJ+!DK~8=Xziopqr4 zDo5@KYK3y9l=5nI;~(nJcj#PWEW(ymvt4qHXP$NG&qbl@Eng^!QUppC)p#dwN2N&a zcG91VA1i-fE7(w#;)5*+@5&trZ)xm5yaX?QN?NGasW3E#U*W8&OxJWh9s>U2>pI{8 z0{ny5CE&+5xB#C4fKR<T3E%+&{IS;&@Ok)?Q6zq>MSBtO`3~S8Zb!i9$G+uTMp}4K z@YmiQs^%a};w_v94fr-2bF2CG2z2Cy3*tD4H8*Uhafh`yAFu30LwaA;8k0~&1oUrz z!yBm{q8~04VkdIn<{nN_L}!&;fbr%o$^$YBr2DqeFH~3%t4nb~3l}MKTPTO%gC$KZ zX_5j(Q@xrx>Jny_c8Cb+q1U;4TLPKvS1_u%{92iDh03_e$=F9^T!9&v45p8dIv@Mu z+a|#G5QzAlvZ`8DRjHG^AD@+oHYdt|jCCsGSSMq)$XG{h=FrE%&d2@<ZO*0~hRPwn z+JfEhhCw)|vL&<fRAwZXG97$P%jDZ!l{U~+ddhgZglP>A%Nib*d~MWlm}H!heL(f$ z-q#%ZDbVTXCKvtim=?sIH8ldZn?u!-mQ{NW1r#U>C}0XWpi@9HpfEElT?oK`Pa9km zuuh|Z0%^>Q8UNPcqJZ@-3aD#vQ$T?njRK+osA_|%YHovz0ybzAP{3EsP{z>>E(&<T zMFBYtZVJ%aWD028<_vB@M-=dho=KyCjfw&aI0h83QBF)G4J<RNDLhV(EzV%6RIQf~ z!2>)BR`WHterw=1T(=g)3$X%!F|^rYVGBE)=wJ1iAsinN8}bvHyp}m157Wmo!Bm@> zss6n4^p8%-^Yjk*rL-DGu^o+6@>7Z1ZB?zGv6akD{MPFFMBezap&6+#u~;n+(q&;h zf9sjYew0FOtyjFUO!3At=8a`;-uUAdoyCkH7IVf{$zuNeM0?)&T_6d6iy1>K=KqPi z8tABsEd9D)H%TB#M<5bFB|vb1fJBH8<j0^mv}*?A5jCSY24O=`6x42hq#;N;LqdlL z3<A#Rm>m(Lqave{xULYCWkH=ioLTnBne}LfW!={{d&D#DkWnC8_owRBd+Cm#o>@4Z z_g=mFxpk}R-g@;_-TP60E2@|_yktEkE>`~!P{k~;Rm>x8tjn)tdRr8|$#uD=61VM5 zqRZ#CN_szfrn^eKAsM}_%YQ`lrW3uBMdsFm_uabu-B#A+%QSZ=(i8=&#Mh)soXT;U zT`IBJmL9esXlYHM65AcU#;Fn?ZM9WmOH!4%)}azxluBI7BX6yLQi%gS4r=+EMyb?s zx=w7C5|Nc_l3MBdwn!^m$<P)%zAc)5vp1<=57pQl$Y3#@ctG)=B)T+_)#9i?y`utB zq_=1lsMpeI1VIJrFHkNu>T;>kmP?H!mljjy>fWUJlv6IL?L;Nkf;U-k4URXTL%F00 zty%OkB#ri7^nRazs&AxxQn6;V!OlYR|5s#<c$*C;rI24ilve)iiRw^Ji4Ru;j`8Vq zdGtn|$+7#N+|nY&kK8u_@~jfA;PDoSoY!H`rab4fWhz@eg7z;5fE9ani>dJ&9#BHi zE$Cz~nH2}JP*i+#jV>xovbr~Mixd?vKjnZ!DP4t?J2i=aw1C7yTKsi0N{jp7Kxy$S zk-s(ZkdPLl#wInts!`MHxK9JZ<Ff})UxTXPEJS+f2AkledAxS(@$fubgj%=k$Mq76 z>I9dr&~<!wK6FitUdeAp&q6QQf5+I}cdCj(0*(j+fZvyR4H<v~37jYFEiF0PakMkA z4_4V8zJTI?wp8_8T$?N|K8cEJlitm_xb_aCy)z99q+K4|n6%4-n>j|eBKaxe!YS3V z4-eN{)=w=vcav<{KWulj>?v;9Dc2@xSwFSxkWJXKn|_Badx^;3ntKpiHtKHKH}+u5 zLU=rsOJcf0b<%@+Cp~C)(t}i$(^Qqysw&wPdR5YYsVbYFkX1=@R^>ETW$EN3RY|9+ z%y|N<^3Qv)DzDxts<Qb#tV+GRD)HB_Di9uju|E#oc6(G;^JqTGL27_%E055sP<e0< z5iK|jC-3&r6}mFKK?fLg3ySTQe&k;Otur^y=w~OW?aYr{Z9lB2DNqkqKK8rMcY8!Z zK2L3bM*xiKnR4HX&E><y<%3@0xwt&go?%iIXg@n=ai9}i4IHJ`fJ=Iy?vO#ASg{>H z)Z6hxyMzy^gs&*&S9UwTrnlofYR4lR)&9pP9qsrPw`0qsB<(nl+OcsXw&S_o)Q;j} z9XWvQ*ywJ@p}VmiAw2#k+L8oyf*P7sLvcxe3#|YBC8D7D6e{u@{qk9n?D3sdrV%s` zbag24Ec4CS4M$iTxjm0s8RfLGINJjhQfC2KUXDG0;#vLsCF>S4gmo>x<mP3LAJaL0 z%;xwp;&>-<yi;*}%nLfl*AvI@Y?K`T{VyCG?_`cooS1~;>xtuo8j<6%SCQi%?h+h- zzq1`VzRAt;-LD|WAw0h1k{-CxOEgFP_8c5g`jmEsoQm_p=3J#l*?20Q%ER`E=jM>j zNXSv}^SFu2{BX$+&E&h`p;>%a7#hxZV?&vIR}`9rZg0wID@}P~0zG)};Yxb&;=@3A zfE|MP)Q4Wd9-H#`#(+LtM~BA&KdME4b*&*k!4DGpuvnd|l?3%Wa~wC~41oIw+It7~ z5p&Rm4eY+YCg7Mh#7DTwDOBaOmLcE;G3Bw;)qOOUB`)WMG<Pu+8vh{M!O4$_lW@5y zw3zRz1JQ*Z6}~vskMEWTqOesrKHsBt@O^^7#o?hzx;L{iQ)goivT>M4y$v*fu!UBY z*~IWf`?=Ip+gThQp>nTn_qwvj4B~GZE|MmMCpdE%A0C!Em(!R_;t@v{3qnr97KKV3 z&r3o@j^{9VJ=LC9gmN6u6=828M^h*9jbds_y{-0eJ`#}0mFk0)8j@xA0+=-sBm|dQ zYX%3vs*ku#3anq&n`B!D$+p>lFPs&kE9x;8nj+QX2c?XI5=IoI<4!b3arhz!Uxelg zGS5n_C%fL<gI!%!ume%Nm>Fno#G4syhL@1pc7x{Z)z*JbLwe7Wz`}e&>FQg2jLI-^ z6J?05HuuuCUOCRGri~zM{}6Un$A6Kbk(2dzWO6y3zoFr3fS*|z1S<%Cmx-DC)7N^X z^*OK%70x*iBegoQ0BdYejmN2U@L|~?_wWE^`wi(f7|sTiVI@Y|Gx^lXAVvJsbn0YD zdCo()3%}V;l8miMWZNMANow<xqyq9xz5X|m=bcim;Q~=`e9Sg!GDY26CUe~-<qU#E z3-T#v$P#v(K-otc=tdfUdx0o{R(QNrKFXm3_lb5kDbh%<3eh42F)FcKBVzDm)c{<0 zPLGA7*&c`@-N5l9%NDpz98hKFsIrmYOVTtR#b;3;842cP$6QHHRX@<DIhL+;EnDeY z#PK2;VsIg)`$AM#y4w)b$vqL3O1GlXp>!!-g>~SnBuW<&3#I#id=!=Lr7xh;oh6>E z6K$w;x4M<?wYyO1LU{aZF&5(MdQs=1U7yIPk=SUBsEn%`(i4}+z!-%!sF6sUF?h*I zX`A+Zp0JQyDn<FMk3u>5^=cYOuDSFAPEM7<;X$?zTNrjAKY5RH9Px6Ef`PoaMFMW0 z6Tdb0@;LC{0}5w<$BeiBgE*F0=P`J{!eOiGAL%4F+pK`yX7JEJyZcpgUfxiU({r*D zj0XNxlU7KFzEaJQ4qZz-(Ns2cxsg4_thLf*ObEj(toHLWT`{P{)Ml73>^z4(v=h5K z>1#0(U{`f;J}-JUY%Rd=qFB~j#c+D?w;m6EU36j@Wd%ilLas&FI~vLju!2c>%#0mD z)E4G<VCDx7wTq&Ggs!6~I3R&w!*tbX#fr8*Oj`~WJ_ifGiVLSev{qHxbyRQY8Ct$t zZtpxtx#dxA=O;jJ9R}r==g5ui3W(gshUIK5ohAw}=*jyYi}PK*Nu0-*nT|dSrUYS` zC;kMf6MBGu6FJ-iat!Ajf>(5uuTOaR5vP@LCAS72nprRh&ITRBA#-c}%mO&UFc<ff z422Zwt`t)2XDC%mhgU*_l(3q50|~1j4DVNDdfw}8N6Xct{oK$608MalJNaN0zwUYw zKd`@Drb*<fSNDrofmZv?6g&Mu73oGuzeB|tpk9oB5iepYv7K}bXk!R6R^zk~Zi8oz zL&S1Z@f_PTk)tALZ{@k3ks1TSgXv7V=qnH{I9wWfE;p0NA(S!0iKH`7P%3eQ3v4K) z)$ubBcKf|7>{x{Gz(OTO4O$aWNdwVmAlZB{VF9YqCwI&tp`ab1bD#M#7<;$29T31$ zQ;R--vRm|#9Nn%QB$&KrAon*B1p;_K5N3wsWiN%-r}HQ|Op~U`s6n_+g=A=;+A)xb z&GaEUK}gYRX;%z~U=fK_l_A-$FyJ&cTPjC8If1%zuigu0Q?4F52L|J1tUBs9o}zi= zn?m&_kKTaU<SclTFW*3EU{?k<TNT0qK{2s^R=qA$^p7jR838D`GG1sDAEFRrPrfzZ zM=V-O#^c=a=74v-vVu8Q%qKI1?LwpI*4I<sMOK;*ca4{cUH}IZkb8lq&q>Uz;Q54_ z_f!(e)u23R3RF#+xmr$vs!f{5?J`JjRMH#_rpW-C;k+AeX0-J(Xx_b))yZO*<5Z7- zM^(4Nv{TC|TP5`+q$%86+%3ktEMD`%kH-l;uxTqMfRdm@>t`T-ra+>RJ@U4i#Pm4R zUiOOEtPS<hY%hChDl3$F9;<sWX#DpFwWacS<WyG|uV5LW0eqK+Q@dgxaUZ2QJn*6_ z+zNg~h@yy^+MRk@pW6K;9jA6_tK`&wZuL6H)Q-~KZhcmeWNHVA#YE-($8c&l<r$pX zHH!SLwB0zhYj#iV?tL1kb`YKz7NaHsoLiqOOrbbCSxx{90Tz|Mir|T8z$xB4ahqve zce`oSh+o<rrg5+MEfK#X;ujWt{r9=1aY$URy~{K{z1K8;{!`QVLWF%P!k!a<&oA9= z8lyx{IV|pP6LH=a*Hhv*aK0!s+mmgG|MovG{4ukA^yJU(mFD;Rv(w-qJ)?JacAxCb z?Ch-Wcul=#jy5O(0CN2t6yI$*=oJ<1*O4`d@&*q(O~?4@w&^{z_tX$fM+*^=@svZ% zpc578v^gJ)B#HP1@@0@R71Gy#lgPy=Xn01<CGUR@=Mn|r4pDrQv0Ygl898o(x*L?S z@guE{pu<YQQV;r(EU9Z>Gpvm0m;)jk0H~Aa$tX||PF;aJ#t+?idN&)sl`-XMyIk>a zIGL72{taMDhb9&!<fh=@2IgQTo#|rk1(C3zAgqGb2zX^F03s`Z$Z{ZmvcS5IiPUCa zu-a9EyI8?ef63@@KReN$>#Qu1A_3Le#t{s%2waIxmfjQpoc_(w)U&^7kiy?O=~Tcm z9^c;)f6MQs4XsVvb^NXGPz`^}0YQrbWrbh+R)hzG1Pa^&{zm(j;X(ps)u1H!+umhT zpp04L#NRMoh4o~9YW!_~<uVi~-ltHY3>NuYdtX9<GRN-{DA_wuSU`CE`TjK1$x~H{ z=v9f>Rf$klKBlUCtg2EyJqb#a2+OL>TkWXI$6S^7honYnUJYYaChfqgq>KEm#EV#! z3U^g**p5|!@c1A55lUmXy+Ua?C>2Trm1j+Q*hfJ3VIN7-Jls-$dB6)e4cvnQUelKp z7UUXeT-w)8K{$<i0GviXFivy*HXWx~>zCi1HlNoLpAXW0e7G=9<71qr>q!SrL+t?< zH%=4PTQX{w5Tz12C}oFg$*OHhaGIeZ*^=8=Ia;!VThh29HBNK#QEbTvw_!{65*KS| z3%2B3cT28(5?c~K!s9uN(~vf<_mi1-KjJiJb7(CS9z~w(wjfRusnKv6s562NyqPGc z7p;3hJ6Q7obZGsapu_SUyUk($B2fsJv1b7je?JW9@I^rHdki|D8^V{0F9vjA<|xo% zy9;z!?<%KIm2-XZMSu=^F$_A44LCTti8u+Dn?eurU3DM|E57`+IMk2tmItD+eiL8d zaSUSs9frwgImONEb+M>}%8gM6dM@=U)Pb}2xw3bn4k{N$9qe4jJBW1UqN5Hf3q~E( ze>0;F>X}go^~|V)dS=u?JuB3K#bbQ`*`85{wONkF+Umz)3Kv2hwo>cCWl~`MAx0gx z(nvktM5x2@8blqQu1SJA^wG*z%hIx|eRMU04C-497B*G_K@fzKx%z0qNgo~={V$)P zDe=2E(+blLzZUr8%?@KqU?|EDUmHijf1JGdd^+i)$n6lh;SIodSKDAkjw~2xYByYf zghVOg?HO7XLRZrQjpZY)YvJAq1STj*0u$yi2QcyRnRBUt3Crg~7$D%=fr(VfaJ?)u z!wF32&Emi%n*H5ziDv2*&7@>HeOmRyMH()_ZkvB&I8ce+L*0PDX`ijj(Xc8ne=Wo) zbMSn&8V|*t_DNWv%(fr%1X%#XcVq#qvIwnb_mfE&IylWMwyvN=Q@qwm;nMt6xQRhE z2dZER*2mxNa3gUOh@#;phToP@aIfJe_)5o3;>*%BR*oLW5SNH%J(!gQzSya2|DCq> z-$@OVLt_;#r2VZ2lE4?k7fbE`f7GK6?N8|{EbpbM;fv26K<&Sz3AKN{c(R5!qxP?K zYyVXnQTs!9ye}O5Zs-nQr284Z@M-V`1jZ;#gD-B@;R~s^+VkZE?+3vzlsfz&@r%Oy zHT+`NKl}jr#mHVZDuMShjPZ*Wzr-(6#$@~gV&b+?Kds4D^D|vBC{Gu!fBzjLnfscb z@e3c~7j1qge$kG}v;I057X1?z3F6oMJ>nOT2jds*ekXnbBz!x5aWm6)m<r#Dg+IiF zQ=q~xw1!TBU!2=OxgDk4rekjToZC@HZWn`JeD)<t{dgn=e(|KC;TJ$j5BP;o$1i-T z@r$8taHbIU_<~KDV>obbe}%_8z7L9lGHcmrhFtxrPz;QAiyp0K6a(Y$A7!H$kcLnU ze6@3wLNV}-8^yp#HKQbofpG??7geJqiUBWNC<X*EiUGHbVift4p%^21#K^bbf?_~4 z8^tK{e_s@%2xawmLNPF@3&l9@m#_p93g?0RP81{GuSM_Z7QMr-e^3mr93)^AgOn!( zFp7bhNfZMf{@+lHc@7lg9v#K#-!@i`8U<KPwV{muZH3)lUvA?WecSTguakfpC8`qw zs6h+rK3W}zFI@4V3o)wR$~UaDW;a+vkEvjd0tc*7Xu}$*b1yQiUz-xxsQc1Tz{Y2W zHWe!MD>NfWv!Wm=e`>g3FM}H~XK8xH&{W17btFhFU5`9l=bolp_B374RmzcJE^eJ@ z!SB&B>Q`_vYO;7$2){>5ldTM3(pg^mUMb^liuo$9vG5cxP6lc?Im@8N`(AsEC}J}< z)MK;Vm>kw<`mGLY-26WTYv8BD0KOww<229mP{^P5D_G++e@*$yi7Dl3%9k5W0&5iA zC#QV77CEMTl<sybkeM3R`13rR@<pO_{<jv+|8B!6-%|IKuf7(id=O5s27Oe9^rl}x zaYEc8u(}Jd#^nnT)_~>T_cm>K&@|o<zpunE@{nm96Tg$<H+_j|B$k@S*05<zeb_Yq z?Ge*>c7<sSe-YQ+B5aNbn=hUhg-qiMajh4>gm||~TwfNyPgi|+T*F?fmX@Kh)0C(M zdGs4tLJRWjV8M2MnwW@(RPd~*bpX#^woe0_9E3ZR>bQfR&UW$V#0L}&Jpv9`+6`Sv z0f!$NZ)h@l#vA66bZ$kNr~?kI066?w0S@@-q$3VPe-+}8Yp1Gu>pH_)Br%6A7l1hc zvuF(buFrXw?{t2jCq4ypz2L~>uqQa#fBzV-5zhD*UjfSYG;xC!W7i^DS5U5ej(Zep zAuZRSl^%8IWi5kw5Nh4kcwUUfE^sKwAwdi|ADXQ~CW;U`htdF@Yh#wb*o(91QWd2i zB<dI<f1;orhB-9VED4&v_aRX*ktxK&Y(IVBqWiU=b_S-l(;J9xH#D-|i@C|#6LXXG zY)m6dd~jtwG=a#fP*EZ=7g^-EO_EiKWVQOd(hZRK;~>iusQabHL-Yz)YhmB0R*VHl zwFn1R8<E*6YK*=qQU9jHTpw=H0!~!}dr{?hf7siY;$VXZj;t+>FBiQeahXg9It9x* zY%LljWc5$Q+jyHtW7w7r#IQvwWbFoG*qtimp$!_tRtSbo8xJ*SuaT<#H#m4^JN8{c zY@@?^c-CmO>9rjL#pnvYS$OVFmUL!HKFolxD<OmD(4oo#>#Dvu$LWnG>B$aO61QUF zf3ARhipjN4>dpYkN;kb6MyK(iG1$&*qztBu`HH(SIJN03s`u#4w2zkf8u;wK)-WIe zRl6keF|WWrk%878FV^9yG0kjiSD0(`I;hnN;6hDr{`k{LdzADatg5m@RRyhvMsB^J zuEobgd+1#hBQY>BAW84)lSe%PC5O<6e|_$8xK2vp8bGASQt|j?+hb&!B&9`nnB^!4 z0p|<P8~S{q7_-Vf8j<sbW%Ifph(2K^nJhp`F<ICaq4goWWCca$mf3^{j4SN}#`9M3 z0q$qnlEDr|Z%EM_VtPXjjswxRcNrSJ*ATt=irzz&-48^MPe$)GMDJ&-kly`xf63}R zFS598qx%5&p2zqA_ZN!OpFC!JHMklYVF!<6V7-MFYuQmiiS@{1e4ZK(@5VQBAAyK) zOc})iM2lgTM`5&EPYfh`<T4_!Udj=-L#2&S+FMlGh;<vKEtU~EEt=0o2ex1?ws<m} z?u|Z5w!w?xXlx-lS>kiN@2sSAf4s{0es_P6`9OlN02Ctn;ewNI;NZM-MkG)>wcxIr z4DkwFDY3stqSz;H*{L8U7zqjb3etRc)xfH>50b!TYJm~TfPl%qf>0CO#4-!e{Fc(c z$|+*)wAY8hX}r3ihvwVm)Stf9_003<^!{`o_y3iu|NqSGdS<$H!bsAef9~V{zY_aX z*GlUDB6G`(o$G>ifSUL|gJ`QTF3gY2qO&?}^NF@%McW_mar=>(V*NN7ZS#q?uU8;# z^NF@hk-4>S1Jjlmq4`$51m;!!6Mb(44<agb6&<aXUP~^-{zD*ot4T7-HvZ6m8Of+- zHRiw7XoJVWhbhE|vn$m3f7iL)Wz_VpbKUtch4}C;@!?l^$=dl1?8j<wkNJ0&@tEJt zD=rsdv|-QJI=xeg-ZDk+u({o3RMYt+^iCyu`x3p0<w)<Gui-piz1wI*)-o0{e}Vz< z_&-U@AvMb{zy?z#Ie-M(?^&+vgK0$jrsb0Ms=FPuR|4&SIG2R>e`!Sf9Y}QUIHKJU z7wgaK-8PtR4YLiV5gyq~)`V^OIyt3X5Hw@0OrrFrY?j790Xf^sva;FGEhMr1moSOT zMhvrt_P3>Nvn?^3IS1RIgl+xklaR~-KWabiXUkl-&4*Zb0}gV0gmSw{<eR!n<Pa5E z7-EAi;9~JY>?7onf5Y-X6uiCg*Nb30BEx?J`Az;PX#uW?eW&+Bp`OJ;JrE63ZKYsm z|B>jqv3q?gYN!3{WhmrNdDNmxYC)<A`SvsVfLuqN`farfW^+Y%A%E`cB%OL4b?V1M z*r`9qOV)gmxphUI6!Ht1wrZlSRMA$-w3RxAeDp6mZM8((e-K66|K8~q^3$z($!PmO z&YnI#s^Z$aVHY+r>qcN91gr}LSiU5DSe8m~qYGSo(O=M@QGujNAy$wm8;y?yg9$=@ zn;=%(qOVo#)54>#%1^B?p&xD@uOtEbL`q++R@<u3i7P))QACs6H|Lz0d*|-n1ls(O zy&rRD&YU@Of4*m?fnYm9={YwNY?FB9?2$$Z8w3;e&9(Ve$Qba<3KP7j01vj*gG2Jd z1l|oBRDM8HC{Vvaf_IA@yfDb1|32>kUL%3Gh`@UZe|%@|hw~2_qzsxN&R7v1w+a^O zh2(|gNU_m}`l{|cN~1D!3fL%L80|VHidLtZ?qu)(e*<N$ztyY#S2QB`L<bOrvw%j! zQF2)f)#L5#kyp6<Jj#B?fAn~#*qmf2ZLZ6{^NMgj=+Huw%WPnEKL@hx5ex%&Bdwka zmkGFhAZW3XOC^&b-^=Vo_cd;n%_#5DU$>d+FvUaK)-FOkG^dG&*X~!z;d&y6nfFU_ zSiCG%e>^N;ubgurhwF(P&fSOP@D~2~ZUb^SzS%r*LFf*0OT7qtYaMMI6=5saoASZG zrN$*f!n|N1*pr)XF)<b!XJKq42oku2*hMqGXIt*>GguCS2&Ysr55GkBSBx6^#l6IJ zyH8~(<KS;REQW<@1|;rKk+{P`;toRMDvpm;e}u%YDiw(<2#Ft8NhD^J+K{*kWbD0P z0EFZ0NL)cke7Opd_yqp=*76_rSUt+vnsFxTPOYOIzq%)g-3eMXv20(%@QV|zxHK!J zj%wLWwbXY11(LLmx~wz~df%~*{Q9sk7zj9QZD>kXvphiz^+DwXu@)M=*~jqsu$te| zf0jaYWb!2xjcA<W5{D@Jx4_{rMxgx=gmC}WzvV-9j$CNOpIFmpojLNPI%rQ?gZ3m1 zS{0q24TILRNFB6|G-z|z%R#&0CflI#k8WaZXB`G@BMn;by*Oy^;g9cGUO9Vv6YZ_T z3s~cJ)mqwE2Vh*s)|@p7b@^E&R7<Uif3Qp{3lEY-4kOAL=h`N(vR@Q^cI+P776m@b zqDQaagT4pgJqHHlPv9|@eT#xCx2zc5#E@c7QIq_y9gkxLf2(d%M~8A86s)wM6l#6} zC)7s3zsT`q1hm6IHJ&$n@R&yX`H9Gn8wy|L?~K?;ezlih^+8b3_Z&P6Y&-x;K()W5 zX@82_S3MuM#_WU45T%0&I60Dsj@{VQr<@>c#Ky|K(q)0^qJWMEWEj=i?3bUy0CkVf zAZ<(6g|a9zfGn-Zzx^r~kn^lVxWGP#_ZlMccp~MdE=@h<yLv2J^(l}*wtzKT5*Hq4 z$`E7qX6%>kCIvYRLcaiNuFb-rQw|7y(0|W>yMrr+|Ay>^R@n-zg8g$>p*1M${+I2z zd?LgF3mMgu+1H=&84&hV4`c10^okQV07Uo&_gx5QPjW0>gMOQiiN|gRg^&wO*~m$p z=($}GT;o`PY0R-w-zhRB#Ahu{NHZ8Z+@@LG-?^0rC5Xb^h<!)CxS|Qd4REe?r++4o z@1krpuQ00&0JBp0xH`nT&!qOt2oxS9R>gYwOPXM!u{>cuM`WW}Tg8_7ne168tO;ee z=77{+q)GzHx!iqf_!vC1H0ZENGx~akN^X|_aI|B2*kxPz)<NgzL%=`u@)7rH5s+ta zMgZRNI%6~NiZe!k;~!n(xt782x_`_&H@}0}ZFdDl(9QN&Ikyk+`uCq10+xokpLCd) z1;PqC?IhhjIHl&Sfof*<n%~PCpk}qwU*z?RuKapimGJ?p40qq=vID!qxn4(LXI?C@ z-hqJ4cG)WZ^QeKq-K*KbeR0&qgZsz;HQT_w&ACzmZicPW=>vfa#wAzHTYrH#lf%J= ztj=r&x=jvAdRl={({**zHK=$4=a|;c9E}h#$8IP-Tj_B0WJaYF@|D-88j4r5;~zVy zx8mr@&NV3HXI7$+zn1^7&mR!#ZPHKiRp02G46VtFoIsUms(h-{F<k{goPSca7grI8 zuaB1?{&tCS052$f6gY&4Ab;y#j~qKH<JJ?vp52nDp2Gat2|ROJ#<XE8eEv~WQ7%PP zk`NV}YY%yc*#9L>6{o)sU(QfoV(QFFyzPj1HT63@u52O&(J_D-U&56Pul2r9)|<S% z-^LcIjdf<omsTaGZI1*Drjkm+E@C1m8&iR*=dx#DbA*OOfj*DFiGSs=?Q~y(_tidL zXO!hVL}#25vTN)546`1ui-K~+E&-m^L#{1PZP&LX>R@mm9IMjbE*jkT$I8KFi|vD( zS`9g|@OdPMqEGN1PI^N?@*&(s{r4jMZVE=@);A?N*pE*ekW3=oTQyX;qXuSJMf+mY zz&{{o_r?Iu?x^Eo;eRC<-hJyNbq6ycOCUT+Ie#-v?Frhuvrfpxy#9tYc^_E+7-lnj zyt>JioDKt*K?7H126%PqQ%foOwW4gC=np*Q!xf43-%h60j{US$bw0{)KSl09VXj~c z%6koARf9d@Z}^M(>XnLKJVK|CZlAAE&!*lqiJorfPmAM;{eLdaG?mztHD-7-IgyI3 z;l)Tbjf*Xq;+<^h>eMi(7Q2SZ&#e%7R?VVxJ;X=+uerTqu?`hGT5cK{-M`@llKFA- z%+W@()ZTK_yy)KPl24D9+xk;VPk#etsnPcH-pzkAu=S(tH4QWMuN3vSf9a()9?|?# z*b^#2*UJt@^M7x_6`q)!n$On%UD`cLsZw5Q8J2RHFfJl!%$P1doM}DWWj-8JjwW)1 z()}ss8(-oEqZO!XkSJJ!E>6sGDW)?xO1X~ivYgQIrNdzmP8BPQv#Q5h_}gZ-_}!J3 zoplG4b5)PUqimY2?eZ&FluE&a<W<SZP+%z@=hFT+FMn?3yTdFxii*MmGTbWI;FY$Z zvGOO)wT8l`AsOIF0z;;#b~yap{xG;?BjmUZqS7A`@&91bm%IcgYJ{EdQA|09qc^N0 zH#qx>ns%UA|9TzqF4qyN!oHO+%vQ05@AycsLB8V_-(1K&BN<STlCop}9KW1QoFGh6 zCW{_^Sbr$1vwxrRZEvL4o)nY<pS8vCFa^FJR`d&>rGMb5BYbp%ESDI1QM*f{2M>n& zWK6B!_I@u?qoBQO`ftwxAAfSf$MO07;iI4SKU3O&z5Ji)Z(Bn4ck84J_xFQdtGzWB zZcp@edY^HT<2PRE&yWk(ALerGuOD*>42<H8zkl6pw8z`In7`U7VFoNecO7M`==UTz zS^J{gj1eiPoK1|#;vc*rGTm%W5w*Q4Xb+4~Y_AL2tGn3tj(gPh4rXF|4*r)E^h9x8 zMp)pYA?&UjOIW!}6BTc?Ros$Env97ydtFWye9KnB+Dw}}CT%=5S$~Uf^9p5@T6}ln zt$&^}YV<vS<mE-ST3>h%{A2v$)p-N)3sL_hsy{9MW;Fr@d3`wo2&g+(0_{DJUfyJ% zaWsQ;V2D9lU{aDxQ;H*P2>Lv5FjHACoN5H;O_9q2`8A#gj-fqRtJ2Aqp!^ieh|r%- z{(}&GeMmzWVd&~kJYsvAX)I0C@I!u~5Pwp7K1c|Z;b3~kBv&^aVkwUD1HibMR0V?Y z2av*rAm`EB3H<HVT(TgDK@-HF1TiQ<RE9yb-@_Wo15WMBdNAE#?Hm&fon0Z!Wm?P~ zB!6D&{8jT&(6iZxxzSKwB00nsPQk!2rBs9`_ZmCI0eW!1Cj>9ejEhmc)g2=3Hh;z2 znabaaTA#zcV*)2`cae_F-kAoK!PQu>M&k*E2hPy!lP`V#75+L!9y;v5Pb(;6Ba2!e zr^YMI##c_Go{09IbxF#*k{)~`B!D9yU@;7~0I`5dz`B;?66r&uXMiuNW-2}S<0Md< zts?+B*@-864CRZHA?MlLPyUKYgn#!=<lh0EZO9@*{PAQ0nA0b`nhJv=Ng)V?Uj`+? zQEL$h7#r1dsRZS|QeQnm$fcJgK5QcOp@gU)!ZP@S<Q<~tVk$2P$(~<JP`nFJ3=&X; zs8E-vDM;aYn)Jt?AcTmD{xGT6a1uYM@)Co&63tc67+AXZ=h1`miG+;;eSZ+Qq&c3# z4-TG{fbji3nX;ZjPb<E%q;7kejh{bV=ETnjn4jR#aaB*?1h>142u^2pJ(x*go1w{2 zaw1NoT?NWqzS*IqgMhqPdC@rgqV&sOpHI_I?E2@I7Jkm(YQxXlc&q31EAP0m@5IkS z#VFNfLO8qqJT(!<Ixe<<&wtOlsQ&qkl>XU8p>iGv8=B61jwtaU;F^3YpuTwPIm6hY zHx%C3#~Da$k{<Ug>?4;#h$IeJb)K1hL<J!>QbTnIzrE+2Enm$>+67u{ggg;sm_|~v zfZe@V;dvK5{xdI#AM~*3UiQ!qn2Me3vPr$^3lQvW8G&j02GWm=K!5bbf#16?@c!eU zJHO}DQTWFDE-h=rBG^Bs7f|ba{eAdxcM8mVUV?kbaq_(IzQDZ^$oRR`J}{Lc<~BIj zN$xZC6_Le5`5UK%epk_<Rme+D>yH+56bV|dz>?$!B<@hr5y{oEtkPx6aApMQzJY6* z9J{~AwfS{*{QXf5J%4Mc?xE0KQR_6aN6s%Jd!&Gk<nM}Ge7pDq<hQu40@<dIzcJ6@ zty!kJ<)%|D$x`W-TRO*b%N_L0;?(F85Gna7DfA$KJvqo!qZ6p%oybYis|WsmwObNz zw$|@>E7dQ`u-d~4zCTEOmY!KITn)S+;^ru!Y`9w!$a@+Q?SF510`cLytA`_dM2wJK zRn&S1p{cplCF0C`Hz2ZqS!yD?N+5gJ1_jxdl&Z*HPPJ^hSt9$xS&9!-hHD9+KM7=( zbiZux0CxRn8XoZrex8T3WYT$Eo-Q{MqdLAX>L^Rzms-JhtqN$L7fQ#D<j@Kh{QMU2 zc|~%T`nj1P-hat3#Xhd-GC#b4jT7Hgnz`0?{*LOZjUPckMAvFBMM2JAbJ48V0`BJ8 zaCd@m_dOGLduH0=7im@a(f`=itZ4}b$JNn-Uz!z}dW*Z=rvKade=1W?F>4yQHc{wg z!YTj+>oSrjg%#vw?-WT*g|eFPS_vBP>uk-khm>#$9DfYODGcMt$m@3fN4mt3;7MN> z@vLvcPj+l1{EUc=fuC`hr5P-V<t6jlF4czAv!(a-7|GnWTj6>kTxTb<+B^}hp3UWV zPRf;vucB5+b&%4B3p8g170WyM2P6`Ox@ZJu?ZF_$Wkz7%Zd^%n8JTtHzB3__mKyf+ zVQ_RqVt;26wvh^=$D5Df5Y4}zUC~52p(z$ys{Ht$-H>QzK^@)Jk3SHUE}_jt4)Wnc zmnW^41g=mjfJM0KGQnJBXV&+mDXDgT=6@~XwPf%<2aQ7UM?vg?%EKHvyi}bdcrJ5G z;KrqLjx=6rkFk^hEzTeyDN<NB7$8XEQo|D7BY#&~?9K^av7g%UWycc1hy3q48+?li zz86bO{x{u%4|(QS_`l7ZH^b!o0AyPTOq2gFq`<>L;ik#LcU+vZuqh+Zy4x<%N1!*s z2<+S~91BKZ!fr7GQ|w=I0{TvV&V|Cv%P9*5ZL}8OF?e?QXsTLdeqhhLOVpmvBJNdc z_J91NY0Aiu5;xqmmJ8U|!(hFn$lM5nc48Zp6sn|6MbR#5@kIcl_;~*P7hL;nby-|R z9Zy9-mZ4|G!#Z4Yy{9ggGT{zU)$ZAeWE3Jql`bh*=4TTBe?C*#BF*^~{3Xc)Sd4C# zyeX4}S42b^u<F@I*jE$Lw-0Tn`+ty~V}HA|)DGfeVA0Fl&qDn98?-$t%kCpg<rAjT z^Rra@B6Og?^R~-K)4?D!B>+R<@APLhl3|i-2usAWM6^8H;QJf5Y390*D1;idSPuNS zkP$~SV&6zk!D-(S!R+;9iM&Gx(6#aoqeXK}P2%nwRC+o<^yI!#($mvZ>@yu4pnp|O zUOD__c8nA|^#4{)3iYUgdEWi4NeVS?%{s{aAZRGy1X`-cznq<DGq|w-Y;OnceoSfy z-~q=9()^>4t0%TH*dsQq+yPq|EO!eRiobC#?PZKL_?uy&=VoySWm?=wNxpkNh4cFQ zz<*YM4XJ94-O%rGM?~fzoK?eyAAf<+8vM1w=TiwXqf_76hWE{Mj^ABfu)z;rwv-Mp zfn9!JTln~|@^`@^|5`8$xK0J{`3>)j?>dfsbm_clov*<4+dD8=Sqe=*br>?nwAiKW zF@D8aS0y)slb5p1hcS2v;6Y*pESz3!;0_7!8SR)NyPJd^MoMXi5qKtc7=I~ot0)?r zilWao${h=9gcFXg`Jcdk&Ao`O1p;0F3+VdnkU$q4;mA%LlIS8*=EJV3h%z{yy7uD( zfv&rb>397~V6Jw4i5O~MZn29tIeLS=c{}0+Mwo3mByqCw5aOit9O7i%A;d|Af|EN5 zC(E62vit%#Y12}00?D3iuz&3ADgfrou78#`s&KezvkW2#NWXP!3Pn^2in#f3pTV|w z$!<4xVYgR&f!%(f3%k8a>2?`<8j$@@gvld3U@e}ZuWIIWN2luSE^dK>poTau*OQ*5 z>4fu>^V7X!k)Of@E<d31yM{#WfmHqW1|d}o4n~5)g6fEbq%O*tPk(`V&0mByt9ays z_8ioIN-@lG04;yE9@zb9QgfU-Oqza|IXP6)>_4n^(OH8WcWnMyyTitbzd`EJL0Gv0 zk`0rFW0#ogi;=}Xy2O?hoq;U&IbE{Yxf4_tD}v#2`Uvw#+_w1kpW-uc%X!*QP)ZYM zB-7SNJvB1lY~)zJoqvy4ad`vQs_$;7@YSK|iUwpsC~I!0!sKFE;pY5QMZ@11bV+QF z7h)NKr_`Dn+2Xm6d5hzQQHzuc%)kAR<Uqtl!T?-IoXHf@9)fcyUe-DWCSo<_Kj{se zM5{+rmP$Qr{63G8GaeiQHMo+c$~UgGZwlh|x#`~oWhobJw|~xUP+7u*C8S<HPXb6> zFqTaoQb=w{W?I&=98E}#;OhN8S2AN(Ldlv@^@n;m<ib%u#`l(e=T+=Gue9%^|1d3J zi96e&7rM#CYVYhZqP8H%^_n_^(m&;-qzPRNJ#=1%+dA0dnFK$;?xgzQ!i4I}NCl!^ zbk7%rQfUM>|9^-xOE7Zh#3|D-EFD$eqBdxoGeZe(1&h1P^~oXO{vslc^4D`fk*mZ! zj4C6r?J2bQF0}T|-}vvS#y|CxSSJCwK{D0eO50DXe)3ZyYkUA`-_<S}+P8O_&^oV% zBWPnD=2bK=&}xmqdpm_G3ufWGPYi?euw&ouaad8{;D7%nXE&^?1R@5K*gCV<Nalgs z8`0nVD<oX?nUZ|tRkm$mtmO_icBtdx4$LOi&CckeGrB#SwCP%v%{)l@=aW&%X7YlL zmfY)9K^FNJPE-ij*rS*NimCa<X2ZpzVSrOvQ<!6GxP}@YZ8rSe75z3m$8315Y<R0K zx2nTlmw%Xzmx#tonrtfupD0ore~21?<~rGUe*cY!&Bjlci^dy>p^FrHeV#YAPB0!m ztTmg8U?^)Sn@~*TDwxPGE$da5Ye2Q=xY=1weuXOXX*GE%lN3K$JEPaIH^yJjQyUwD zjhS0{9v(%MQw1B8<fMK|_YGmQ?J?y@wPsQwH-8;!$cp?)n`t_rMfgZU=wN_q7E4GS z%m_q&DC6~>7Y++77sq|i@#~`2LA>;Sx3D53thNNR9t+s)gjB62Cs4J@IEAX!=me@( z&<Lqk)mwn_j93<|1A&TaXY2>Bmfq5gDRykh${qr&l$;Wo&wy*U8E@Ht4(c<CS~V?# z+kec!nw^hMaAEidkEZQ&NoyC>uGzV$cGbA-BEgBjxA-2I1O8;M)T@MWC?(#6JiGC< z&}j6gA~l5Q5Pvy;T2XoW;THv_G$Ln39dx2zFbNPeBDF0ds?C8scPNu>lQu{CvzNob zAIq%dxY=FoCucAx@&XABj`>WoXXU4j)PIPQCBMX?PZFu->TfP~>vMz+O5S+yYK}qk za&u0GDSPeX16FSdzV!V4HOm2#0rjj#O^a*gv&h_qH5{MqEovpY#Nd8&eq{y_^9SFf z4;u5oDV8Kw;1bJ(cS%P(KwJ!#F;O(1Zu5WK2h4xrN6;0kEWG;m?`TJ8eAW^z!hfx8 zBPo^Y^XS<FlhC&U>&X8r(%10ia@w{Ti;LZW;5vE0{MZASC~CU~MIgQ1uL-Dr`Xhwu zrEUc((L=py8=aa*k4@BzTQMljh&Y%RqXRfE0JG)k@$*8<(#TP)j^R)XL{nM<9ZyRQ zb!iGIrqP3<V!4&;{#392<txa|4}T8JT!4o5+~RmA$o}wtkne2Uzae%WXCk%@TvrCN z1?(yDY^%R!7N93r7>eIA<f9H$C^cI*)3-hdfwdCHg=g-3umU}AMPNM`ZD+vs;cPCj zx8eC~4lBLWyIR2Z^jHw&+92qt52oCQQtk`X`wrCV&D(?Z^WD}p7zQqJy?;P?4o)0C zZ?1k^jC0fGh+Ec=sWeU7bhp_6nBy+1y-FK6#LKpUheeu`W6Zv(_9ik44}5IPe{|4? zX{9=?vju-Viwoi>=X?#9gns2#*U%aNp6#TWF{CUkT_BZ(b0h4*z5<eiosYrt8V)t( z!tWnUBH0Msx?Nee8=ETJ1b^d=z?Iuk2OTAx-|KfMF1qf$%93bwCdlmV|7Y#_!=tLM ze3Q(CAwQS^38G>N5MUr8!w+RZz(IpPY+TZcbyTbokjAeqMxE4X116n-i361GsvEnp zAMUbMzq*wA1H|>i2_lVXTLSVG(Y5*fXumhku0{EkYT)fX=iFa!=6?-fck@T)z5DKu zbMC$8+;h)8_Z$Hi!^F!lBerCh_iiF8M^ri%gq>LWQnw?28@G{5(Sn<kTH^K5MnLsT z!em13!_N9lM>nzh3iJ4)ZkJ!b2`}J<!MjOdZQ9VfSX7W$#5QYYP^*Ly!ZNMJpaoIW z;7US`N{s}SH#u2R(0}?RXK3xn{91_=_iL4z);K>dUp^TqTsAX1FC!tE=Rh>5*JGD2 z`>8873^3D7r48wwB9?&L`SU=3^x!Z^V`Cc2=e|<XpTO4zJ7K!hWm+e=cKPv*h&=1p zmmJ+!Ywm<9t%LJG<lxsMr0840=LBi)A<a7S6*;v=`}<;3yMOhsV?k;HGl)Ptu;RU` zjR0|t1}&MPR^4HS#OvNj#KR}`x6oE@#yfWT?FpP{P3n$V{~VpFVnkJ6&5`o|a9v@7 z1o7Pss?EUmNQCvzGAFf;b@t+`S^*}QnGUpp4jcv8Bp+DsC=k{QK#LjI&6R%+WY!7f zXLeFBZ^pYj+J7;Cpg5^?=o_Nh`iAx_NssW1Efr!Eo1X@1Jit>S_)?7p#3zREp7oNK z3vB5d!>vO5mZAE~I`4Df(~}#YjN>#q!-R1eG$WY;&zNw7#Kt!fEUy-kh!f`mU)ONm zDT;;xTW9Mt;sDKvR9MW2pAOA%q18NF6kk1+SIy?94}Yg7GPUJk>UeK5#O+VQWZNhm z_?T~L_6sd_*~4*e{B}4n>NRi&7R66pj!)b9r{*iMJ8(_;BCO*&l=doTW(i#Xt<+^r zA*AQ4ib>u=qs;|D2g;p>K$)(uPwC{#Mo285W~TnA#XOh(E77vTrGH#pJqo9R*iGQ* z(za7m^M4eZvCN~{%G38|=)JLudgHHGiQafJpn3y311iOBU|=nG?-7CiL5qzDDzhRa z_KiAg+hE`t*szQG4~l@>O*-b|5M6b~*4!cxM0pN~8VRC1B}DlFr#jbE5+LkC+i|9l zs`6Upc@Zo-Z#&LC9Sh+a;GB7yo=mf~8|q2yw}0;TDAiM{QXzcAK!lg{O`<8r7WS5r z&IyicQ1)p_<_g0$b#{4YJ661e7id+5iP;N>-`JaV*qi8Er|`j>QH7@HDXN;QN3Taa z;fpnE7B{crYN(;8fUuG$sF#~aL5ptm(p|3?ikWKt0mPi~XVLIA<S;YJn2&-##hZ$a zn16SA68r+<9yIB92!M=l#phOf8og5Qn<+qN+biMV-*c5CARRHH<dtIZ3rd`WAAynU zFpIPGeHm9RkjLa#vozSgcC==(oD5YS_f#ky#OXBkN*)eXSnSXshxOlmwnL=^$TWl; z*Trcj|I-YC%<N)?Os4C)%f6)Q<PrE(d4Jv`r#r|`K*(%ro+Vl|<?JzW_K<Owwe2gU zMKiGBkRglgBU&_NlaKQzYw1QjVsL7vj=>9rLGN^d!9zt(Nuky{#0Z*^U=&C&%1Ce- z!d#tbspN;&+XUmZ_I*y|Sc@`7VsM99M&Lfn=u}*RICMts4b@Gor1zLD6sqA=34f6& zAoV$sX#FuCwGy$O_>$;5BCZy}V^u3`$3P1Ym#aI-$w_@S&DPoFN82c@0j~oKa`hlS zgR4T>>p#F=N54dc58eg|+JaE0Xcj${HSB~hR(uB0Y!hALk6|Y?S)-2GQp_ajv4u;I z>8B*+My$7ia!+S(hJVPH!3f_wB7eKmy#i+1-(?aoH@Whx!Q+bv5_|!p<{{}~YPpEz zo~}$oocsan({HE|L%?ua?6We>lWZZAUROBjHERjXEgwuzrhY|po8Ob^J!NZdUKlNj z*tZqv$%{PH#O`JVf>fa8w1fD_pM8bu+){=Z<9#Mg%t)Cy<fx#T>8HADDu06=bpB-h z2|T8DX4JBeB}(?lWCDA9gblGh{#yJW!~a8C4TIy$50$KOzdPet#KE5C*Nh@lzcIwJ zg!{}JVP8pp)Jhgl2MsWgELm_uh#hP4e4zxVwG8L98Rq;8^dV7JEPZEs2+t4+W2fNx z4xD$x`N%px6GPUo+9+g&bbr)zGqt^Zng@Jc%$<h5F5YG=k>UPXiL#21>h_0WY`ys+ z>pk%90<v3Vbs=AjE7C>QtC$Qg7HHbd<#>I~+v9GJrHqi4kTq?E^~z}S5m#Z&8ABKE zXVGib7{^8RF_c<9hA!TFX|q*ly)u!UWTY!7!-)#Ga_^-HR|n(zuYVIL2j7lHDBt>u zGs5%}5f)pG_`Hkvu?8E5i6%mphgBf2RfnwUnO7&YKjm+*Ch@_k?m@9(k9*pZfwrH) zu-M%!rSUT};i*aNU$oOci+^iw%HOvr{)K(hj9xR|?O(Lh@ZewTO>28&2hDiO-<FIm zVTId{#%=;1p50by8-K`Bm~ypB2~o-<_CpDyDPbi0Nk8rapINo<)b2sC(U0e~dxy4x zb*8<WB{cpuUA!pq7TXbchnn%-jAZf@ur>KT06f9#g!K<?NmftnHdag9(e}!rvBm6( zV1x7pGJTdKeUeOP@a~q$!(_6bJ*6IEoen^`$=i(KXgV9xF@I^-@(#>7W4p-v8+;uv zd$j%Q2H(XmY47s-%Wz_hnZpg`$HPX#_m5kFl6>Dp9kOpdy{*Qbmv0@t1@NM$uZ7-z zlaFtY(A#xXON`#iEAed=z5SMQ*3;WyYGE0@eTdr_-_orFbdLLR$P??4S73xwZev&> zU2{gQWxpiaCx7mHIr8pA#2fEh$+$N-8n`^(2Uo8`7_gPS<f${@(Qp&6z6PaX)#Jt} zay5o0BS8->cR_diPH7)g<m~56t3}Q**nas^0=F)(3pm&NyO^-ie-Ff21t2KgR2^m5 z4jIM`pqrOIt;}XD)6_UboS5f13bjN3U|Y|PB2N^FmVY2B%Sdj3EFRb9SjjQ`nT<xf zAEd4^?c8b}8Yj7f9P!pMsP<Aj_N8Z>-ckP#{j>ZM)j#OQgg>MBi8*>N&A<wJg^6=l z_mBofqLto}1MWcE5x%(bRwjvO7>ZHqWnpHG@6v0B=o9X6xK0%bH3l4C(nmE6Y6ydX zI|emZ_kU1)9%r?VQ9?WD!1lou!c5>My(u$X^3v~6EB9WajfzvA`XW$jtPD)`t*h}E z59EwF<J`|U=+m*h#>S~gIkY<cehhW5Nx*gZ)1#ePg4WgJcor_$WGuK@O$E7E-iRqK zT3GekN|wW&?O_~e-`1bYgTo}>hxKtaN<ADOVt*{II?Yw(f}JB!+~8N^8#o*CTh&2Q z(}M3q<NQ87$+HSX?1og_1Kobo(Dp#j(;n!uZ;Cz8gJ%cykXcl2zV*>&7r$Rnn8`wY zH=-=mjXxz{o`86glZ9K`8QhWVF(`tbV>@+#I~Bm41n?#TSQ*`QT;j56`@xL@;N52& z0Do`d09UyI`~m?yl>ja!fG4r~tr`jNPdo}>8$w&P;iGV;lU{`rKOUaK_#Y3q>XDn8 z=Q%p8d_VlI!93d>dA9L9(tA4Fv0@9PV5{OvW9gEew+3DJn%;G<Wwr%5-q3Trp*k0G zFgjk&ebKU=E6gA>zt>Fc19R3l@NFNgM}Ku_S4M$WtSw`tTOVl@S%%S;+0$OE8a@0h z#!$B0Awy^{$jypXRWl3$s%j1h)P9U(4)s`97_yawI+j6Fnem==?9>1p6$33v5_PpV zAXin=N3UpQ18B<<WfX`ZDG8@t?<zrfym_(hr5QN!3!P+U&<y-k8c;^Q8qn3rtbfpA z>&0hWrr!*je%o%q>38=coPPV*Cg1wqMDk!fLc&{B&OI3a#Y^+CM-tF^{8wvUeE;Dh zN4OgTe3}IOu`dTQy!bA*j(52LK9c}HeLVvHyorE+K7!Fr83Ep`0Dqv2J58QK2H5*? zZk96m_A3H+^BNsb4mLZ%ZlOmYdVd~w#W4nRj1Yb11|8A4gs6GFK=c=Xb0EqJ-C`AX zxwtEyONb63MBl`LDv7Wkt7<})yJFK?H(YrVo6m&Jz%C*TwhTTfn7p7}SGEVy8bvG} zobFPm5|Uj9g}d~^U7{zRsHEcoSd0>v5J$mUNL*L#m(vN2F@<D!TF_Ms^MBPbd0_h@ zPrKidjZpn?n2RhILRn738bhjc@DSF`9B@E%zW|nFxtuh0X1;KWOOu>4T?!+`BSTM; zs3nvq-2{&{#r^71RyKNV3q6Jko&lYM@hkMr{9QQCB@?P~GylhhINY7pxS1bwc0g?A zd2l`k*kNQFe%_A@ogE~W^M6F7lw`0#8#=_}>1;QESAxiDa5Ws_hEE?BCa2lM!g8%> z1|!<=(>qtN@~8h6*hMFofn9^)<QJdYJ$jDBZdspRPob!%@VxaD=Bg*Ki|bP|i}~)@ z<1xrP0P2f)Fj_LphS0U-)LOd!XdjIv)F$RW&a3N6rJFt7liRu6Z-3(`CdiF58sKJm z;a+tr(+hVF`OM<Obc|C?1f!I~ttC_FpJg=ZsN>9A9Ho&FSXkr4@|w2pdYnzik=$6Z z-m*dM{{}9X#%iDvd@_j7<60g&*IEvbBE%KH*iCl+X?>acl$hXk3j`B<`h-JJqH?!b zdH?Lf@INI!Sg-&IV}Igx$OkJ}{nofKIEY(VHo^1jtu;e%5Fs)3FM|mW1RdFUQpY2y z@JJFKU4%!M#G|uRXXa_b<Hr$!NAGb59$g%dIZwIZktRImM-Y#@u0=e;tbXf`3dG}i z2Oir?5D!R99rV-Gfbk$f2SzELETTmUFhcD1=-BO1*zF<gHh&X#n<aKXaTp9AC+wcN zMqqdR3kP<aId)5*bXl#A6LxjiAa<=dSS4fGkF}ae4Q{oMmDn9FM(iLlb#f3_r~@bO zwq}~+ZAh61{{w4xc+?njc8n%~9mJN?Wio}^5cU|Vvw&?XYy0)sZ8d_SlR*iPn|1L3 z20C_#mQ$TQ-hWPgxJ{x^PAEV^YWg76W?)w&4+7GELzSN*;i2e6{f0iCA(yWVic%QK zSm9n;tfFZ@e`=BqZC{TGutsK8@cKOlE#>fHy-*-lVp8@jaMTZ{{Iys=JT-6=jrI7} zE)RzCmFCUSBd^FF$uGhlfrL~=fn!jwF&T3<>F)XeQ-7}<kiBvsvsVt}>J>)?2Vvr3 z1@Lq?hz{@&x8?}9pxKjhZL;y(=Z29A;R%gx2T(d02VRC7i)7U4v{SQ@*7{`HIr>D8 zLzs;h@@>$WP$o7+=}H=w7YApFOY21tMACk_!5diD>)}gJ02&LtiD!>Jq{}$ihqeWn z$nviLwSNXgVB@nn`(Ydwf>ZW`7A{s0_%$3)hP0Rd*=vU4Q$7vDN)iLa@YYm@UB{LH z>$bcKvbg2N)sizzjGYP(scL{pz@GZL(DwTS8((n@j8sXBpj${nAcCxnm8h5N>AWk1 zGe^q~eku9b;+>hfs>tldQR0P-8g$2oYQKkzJ%8z;;v0pnhNN$}0;0Z`W_E@cwlx*! zp4jQV(hdd`g^i^WW;fz`U-FdqiKi&)d_Na;y3kt{-?#IV^JWdkDmNIb&c|M$s?&$L zYwT>g+QiXsWvy9E^lDy2MV{UXZzhVZ;EbFzR*I?X+K4P6{Bo-yrfiLV#A$_U0>tO9 z*M9^rah@g$RTG6@yNN<)6Ci=tp1-VIIW^@FaifpDxJaPtr*#hqz323gsxB4&`v`-y z<~ihNQYQI+zt)o(2|USZGz$7nnoh!2M=3YMpxi{oauk%C-y5!}I#2|LZGjZ7#KwVd z7g&|etf!kvtcv&P!tZ4A(0IKxv+7DYG=Biipd$3Icaa#OB$KI%uR@t>VHjnq39NE! z(g>j<?BU`O?w)^iUR@F?2!w4dLi?&u7XqsY+D>T~^qJ)l0;$}5>(+z|z*PkB9akd2 zPs~DqZ(;RYP2~dMi!^|_JhxvXLUJilD|MPuRZ(o}x{8F-RbXkk@7^S)uF!RC)_=QW zvn)?1W2`vrrg0}JQ~<)eJnADs30cdPkZ4vnx<oVi1uHNTCijvTjr3eypB~%`J;SSL zt31qW-_HSua>Bn&6O@KT5rg`%PX=<h6L-HauB@t{h}`DuzVaj1Fe5Vptb0UNE$rNm z|I+93F1oP&h%~g?{};zx#;BxoJAYiJ29#t|BQgW0#?Nqul-$lLx9%K{YP*IJ63qWJ zcsS8_xx)T=Ik{VmbB0sZLcM*Qr%&rQ3Gi-dUv-faa18YpZ+8LwO#=L}=@c(-CIa5d zDz~-_L%?GS@H_%MmKv5v3OL|AOz3@7jEk6*uDk^FQf+*0;7n8sIKI!okbf7`$;*zW zydqOY_K(XI^;}&d5)EN&CsjlO7I$Tw%+cgE9-Z(y9l`?(eu)e9ngBy3(xc=pj^z<= z25cc2lz1cD$JgpxRv>!LZx7^B>E#41umJ*5Y27?RoBpQ{^UYe?bfnIv)YYZDOZl#k zwvl>S?Erw+q?y=-tmk|*V1JMTRxBa;<v;pKe{RTWkv@aI$(meZ$DUUo<U6}Yu4lkF zGMJz^4nnzwt7Bo6!{9RwYIUoH)vZa&2W){`S8QbHc;xX>k#>5-RS<64gRT#B)^Hy! z9Cu9>6!z*TF4}|n7_T*p$nK+sW9(EUvIH75mCR-JTh|1{!tskdBY#7g^P&#$iwfWu z3E(XR@D>U1yJvNP8wlX7R|tT;PJp*?fPdKL0&oKXeE$^)@R1M#{Cx;wzj25F_<uY^ zEe(PjBRw_<9<WV^ULM3PSNB)?9XueCLkR+NmKMzhxo9R0ebG#6^Cija#?o@pd<`dY zO=Uy1I5`u6!%>A<RezAB<cnS8)Q&)6YQWGDX3VO7HEac7{qf*d0EH=tBZ8qX+bX+^ z%pL;24g<|491N(Uc_FkU{Hx<}9<qc6d7M|ukMjiJB1Q;mKJGed+v%0*6~HFCh)q-q z1u+@sk-0zw%?18UhMkeKhTbTy<DRSza<uckezI7`#htC+zkfY~>$jVHn?s+h--xKc zCpHLv7J?INejy3~Nsy;5)HF9_+Uj`wFc3;8^&GEcW#i>~Y4=iFPf)2e9AVYpP3<md zoO$8xUY_DLOuz6l{;#M^LbKyKU;n6xrc^Vu&>&jKvRr!VtZ+i?*iVpm?a9Qd4?uVt zIEu!|MsP=(3x9n{e6yAfa&Z@&<&Rx%J#KzjvTERVBDAx($)QKot+&>}Nisea_mi1& z*exa}{Gz!BS6V`BB`6lP4h=(*2c6v|d9_i?9*n6Fa;ZArm(TX;-vYxFPvbbg8_1Us zEIB<OqT-~U25vDPa^^LDgC8JxWzNZz6C>k1kX}M{!+%*z1wV#RS?yB;GBVB$=}D9| z4-|j=+*GyyK4rxyOQZC4jr8C2RY>`pIbGfN$1J%x=XkvJ(AOA`QzyiDG@tsr#$(}7 z*YPO5;PKdV@<PYs=O-_CJnlPr!Q)YV@?7IF;iT(${OOR(c)0psXwtbuNbTUri*NWs ze4Rwp1%Hsyz4}@{3&AWOJ6Wvd;Uf<5J^~B*mS&fQ97?i<+?qsoL-<p&n@tPr?E<lo zoB4+F!}TKoZ;1qN2?uXUhj5^X;MF-|%ZCZP_#}D$^??JtY5>pY240xJTSVZECGheg zw)_MM-V6M)FZAACWw5lSBq2j!M-kR2hc(Jr9)BJjwF`WfN_>{`JWD}|sxA+OgZgf2 z9^vzHP~h{<VFx}Y;B)1VU5<(75k3zG5ub14PsxW9*>37PK86qEPJO^N1f6m=)JgE_ zICya0TEkkZA@J^>sDn43z$=sBO?HA;1K>UNh)Z|RC-9C;MDSk5pOP{FZ--ZO_Z&}- zO@EN=_}kH{pUf#Q70<9cC2N1m9!7jt(7pi=Txu#;WSBef0Yp_TQgD|zei3aoFBbL3 z`>$-iHir^=b}qg1M_Kw|F_Ey`GzbhxbP5t$5(pn&Iu>}-N<e`09&25c)>7e!$L<ym z2l=J#a<)0vqVDFjr$m17om-_w!#8lhWPjsW^M)tnDO}W|Xn!CM!mF9+Hxr+u&hq#c z^y&%s{)h714c4<`iF>_<NccgSIY+*G;6xy-K6_!~G*@a+xLJ&K+07XS96_8kB~MO3 z1CCV_aPAD6fCe0OAHlwsZ;gdv4LagbX)T<UKCvHJDPVoqcXP$J39=S}ySLC`e}6Fz z|Bgt(_+yVkR6p;^4!YP(iAD>ZpP=WDFdM}2aJ<n`O_zbfXeVA4*x{{&?q{Si(uj?0 zWj~;NXY%mU*X&2Bg5vb|*=N7eIF0?38I2CFu=H%mM+iq=y0XLcr#^<M^rpAc=b6jv z;qV*jOQG2*VBY{BV<!6=o{3fB?|<$qVpGyv)RX9Dzh&L2@**<#U?ao6m$C2kN*V&d z4f=(xu(wiz!QYXEjFK#5lmwF%>Fq0GDWY0luD6d@497jiEA1ZYfKGTV1>A}`B;d9u zTRzMR&s1UZF{yC1QT{XKA)2f(6D%*dWRDFOMFP7ZHdHsudMG2QaS$f(tAF1kGyMf& zC=#~s#h^D*k)9c^AX|PSt4Cja6(>BrR>#kNc0>xt!=#u3gVll8v$QWT-^B913E4&g z?p@_;9*Ibzh|%3w3M&npb3sqiwi{;&W=yJ+P=SmRj`rB;VU&K@hqPA->^=3I#}KZs zfF;!U=$3*w5!nn4*ZQd-Tz~e23LyhtDGW;G7?)}ii~MY2RCTj42(BJYrSA19=}$Hr z@+i$3D*^c*T@7$VsnDMPW$*c;qpYrclldl0LgJ+Suz^w;ARtP>QK*}0&;gP-VuDeF z*cC7sjGX0%5i&MP0*M1OVGPo$U39fe)#Gtjt*m7+vZxbaA)s{;^nXaZvgWwz`Ql)u zLKTIQy}!O+lW!u}{cF#{$=vU~``&%`-FM&b``**cfs2_4T6hz6oa`Ew{$ah%XCq~> zy2e32r#Hb5L4@^N-MD#D*+S#Yd3<9f2Y;UV2-6MoQW!$hpqOP(-;{)R8lJxkViHt) zrdu(GU`FKTk0292mVb`;^L&=GK&h1cyn;EHz(fk!Fd<tGeKu27T_U}GVPIPq>iMB= zoUvnz0JU~W8=d!-g{g+TaCD^ES(U?hETY+*C2f9Qqm;lwJTYPm><98>e_w|!arPV3 z63bcb)Jb}waCM8^WL_c<D$re%kH$V6>D}3R(kHW9@rZSgoPV(Mm629{@%4iuIu{C* zi#dPAhq~L4jT*6ltONxqh-)olcH*i9IHvH_cBP^#bp{!4OI7N_Jc>{J)bJ_7qV2ek zedxpZemZ6l*X|$FiL=}gIoq`L*wC^1Cv8;$k866H1|t<duen!ip<4HToS&ehdAg&0 z!^rkLYnDf!Jb$B*`Rpph&fz@g9P0k+05*@1CM_HX<3r3m<E82-D2>?Dh*kLpRyA+a z`Bt=8af_k|1CqZtE)vi0^PUjx@7eh+usr(ki;pfB8f6q>enV77<N5w}x}~CBYeCT# z@Fkt&d21=BRYwCH(T@Vslmg;kzJdP&MR#We@jfP3a(}W?F7$>9z2tW4F04fp^L)Kg zCdSznTp|I<NHxWh2|~M|EvFL4uN8jiY|N`&P;s<2^l~0~al6{nh=P4X9@GiCz>M<e zr}Du^uKnI7I!pv(kDP*d79TOsGY+riQAbA(tsuF_aURN<kEF?Ethm72G$>M|k*tD- zc6O)o+kbETp=NxW${ew&jC21P4N`6Tl4E(0zTo%?M<a$>=d+sRlUn0_Zp?!@>gl7x z4W<g?gJFJBeG(6P<G_cOqM!yJ(oruoazYKZMWYHcaHj*^L2WBCS5AsCg83Q&>Z=vd z8BAm;!(yq+U`aL3z<P=L(KrsjP%W@Vz?{)cfqx!2n-<raA*tl|EMANvc|P6wHXM)K z)aV$GG=Akgg_~wSgjQqYzCYe!&IV`!mNz?imx3=f+|2T(_aKZJt-1DNnIjmpNz+6Y zW@7@21cn7xNz|<p6=$dP^fm39;J&W8kbhW$$bPTv+87)3yl?UY`(*VOiYBXH4L2sM zO@I3w+YlV@O8t|?F7s843<BLgoaP)44d;Cmpsx@367O;CS(?LrZpc_ams-nR9~+|C zHrI>^V-R0_GaOm`Y&$!$?e<K$(TwD)z$3~fJFw;&<7Hahw=?!JoYUE@ER*+HCI|)w zewLlZ8z1kJC~{AKaH==HrsePi4ejxJyMJ-%9%;dRwDDrg@#ED$lp^t33GuwP2d~&S zLgHwKUk%BM#M^j#F)Q#|7L1<rgaC|wRL@$)dlML^l{fL5cMzCRKSsVL)`#RP1f%h* zBsvxTwc^Nd=wb3Qn|BA##srfunCw2>e=~p;)?>@XIb{BK=azYFmuS7whyx6M#D5x$ zAf`_c4=6AMSNwDi7S=~xSl9p8sa}wpC%;gG7%l!nDKxuit`<io3B<vyU<URtke*DZ zATG2EVt6`1B=0^8DdgHzAQ`rmzs}{aOIhdIGvwq{7BY#`t23>lOOEKTGFVv%HCEa4 za}6}YbBC?K(d1m}DCU}2J!F`O@P9%L8H=#l6&+2nT@{s#ovR8w;8cO5tO7?(6*$T& zaFkSFCaS<uR)O;OSp}+D1*%e1;5(Q4am|vY?Z6?5M@9eUtfd>xA*pncRNgrILb=gi zD5YE|#phlqw#3)k#Cwdzd(0H?F&6JJOT2twF!!@Ruy~(k@jm{)CEka<4u7%Qv+i2I zv{VZHRD&YxaYZ)D-=xl>250q2;T~IsJi!(61U1M-@-?x3n0#R+y+jD%Xf%0+IPm3e z91h?BEjiZa*$@8>d=FLiIaOom4B!0@c}!nIUwFQg(Cn?)Nfz44lvd2&fA;V7SlQpp z7QE`58niMyr+Ae+l31L`4u8DH*KoF%_z$$PZ_5t06&@nT3(;`{IFcF3pG!nqEkEnD z1NO8tl3i)V`w-VS+G?u5+ro*qT0%U{LOe~HH%h)Hf;dNicNOcW*q{57ue9c-n(hns z(<V`14bD=?5IV5-1^!$JpHK4V-28iHVBR03y!#rzhgm?!nM5mp;D2a1UpV1rs>{(# zC1j6nt_rN1<Z%s`9PHw0c(Gyl`P4{alQ-AaA9a<t%RR1D1#@v>s6k&bgzXd*-9sej z5aWFHT#?LLi`c4gaGYOdb6|GxSe}p(K^n^|cvUayl(m~U5B;_zdwZMEZy}G`(4eEp zLtGW%jrz!;{&#doIe)W@YrnYLyOR~M7(Vy#=PejyzXXXSNAik%IfDo;7L(C2E-+w3 z-sda)mQVnzVqF@pZ6#}|sOu-0i}1!9FwJ}A(GelWkuoUKrKA+~7oSx+9%Bs+ufNBY z?ef|-zu^XP7Pmz*Y|dNSBAG-f@G`Fu4y2Q>h^=j#hJ{#V8h;l}epBD|GA*Ow#BEn# zq{<6w$~Q_==a1G@0{(JfuDN)uruM>L?uDBA**HzD1K2xWQ%m6Q0|@)?@OKdYzJ@;- z;d#9tZ{L3z87`g<{Kj|3XsQeTK8HUTi)Xn0^LX6-E&RqQ!0UzZH*4%)MJL4`$bLWK z&2xCK+~=EPu7AE)!>sZ0r5-%u#<v)lXC{3;`1pkRrfyK07_wlbwx-=TZ<#aVW{Q|Q zIbj?Fs%`Ta1OjWeN^^u4u2oSKAsOo)fc02hohQA9MHua_XC!y<+b)X}IlRMR8m`g3 zMW8WiDo%eIua1y8B5u^x7erpc&4}YqqaPjau9O`-_J4+mmr+A<83$l$a<d|tV+R!; zcb6+it5NA@{VTop(O_+%^|>k?g!}Ala}{BuS&u@trGT(N!(zm7%`$FvV1y~gHlE>8 zg|%Y}R-~%Qo#y6Sh<wKywRj3Tt4yaYj<*v%3dv(C;+yg*EPv<Vcj45(ybi6}Z2S(% zDR(j;ZhwZZXQ1U+ZSV?`q7w=czu{wh4}qN2xA$D6VKy*<*RNJ;^`%y5zazA3<fC4W zJO!HnSwy9_mqc1<vJv*<76H8vDPHt$R?u`6K|{_;xkYh%(({Ort%7Jv`jG8#kS({H z21l>5tejQ!-0~9i_O<x2Kbwq8w!T37r5@@ugMV++nmsnmNV@~)krTihdq0XLJt6n1 z8|dD6UhI_%$<2CF&DR{u_Osozo0j9-OSCXL8?ZW6Lv=!pUle#bEAV2c?2IEjYzK4^ zZe7>MA0}^%&=B|Q@35U-9lOg5>Tyq`oE*-8&q+YO=@u8T$KyIJ?tf}wC;{C2iFIm` znty#z7CC6zR1iyK7>nsJ;>V7r2X6xAsOTQwvmGDA#4?<CMz(nial^fEZDJKJGe(Tv z+hM$Gw9O;>DEqI4$+so=>Yq6L#kc7a^bK?VQSg;iT(Sq|&oHU60wue+bIs*gT^{re zlY`o+)p<A&8Qa_I!FJ1|qG*~ry*D}sN`HE~;&!jBH(CtNGHN*?=FF-1nsanmhf(oo zI+LWdW{PtrX-63`Sw`Q}>3cd?LagyH1+~@kR(maP?OV%R&!Uzm%d94>ykNR?_C$cL zyU(yWBhuLyV$cxx^hV7zuh)kL_sEOX%Uf5-r`)&h*oOC;+wfEqalb&e5`xwSK7WPG zF+=7^$ecD>WhR=uMIYq7{~&MV%c{QY<AbN4cK0>$^&7hcDg1@~qBFu&a|(NAqIi*> z5irLLXmMxe!~eE!rfIOJ+c+^Zp_@E=Y+D$X{hZSrMh*mgHp_7!pd+usT2$<)Q0&0! z-0_$=sQlS1{=}degZDtyeiMG~#($sX__G3k>hULvKlk9zPw}S#f9}Pf`%b~n%B!)R z^N3n0s-a<jEqBZ80eQvd&U6|l#A(<#)>r^-HGRyXEe@v98w7lwVSK$OoG}qE#Wh_) ziiB^Gu2aTJ&}vzLR?#STANe#K^%w-HI!BGmA0{f><qtv03C6&asp!|rm4AQ}^m?ps zEo6QB6zv!F?9G&XP<;)o{RVvH(n^z$mPXowXpUwZjMlHfegTyoZ`G|eP0gW^EpPWN z^?B5GTIY{<>02hH7#ra+t@8HVE{%+h{z;>S|G(A9*y#AnY-}XFXBsAdJ@Y+0pAq@q zCoCnRb*Ai6xj5yuadB}f7k~FN7t@)GG0eppFLANd$%W740{25qVJtOMu1QJxQhUl< zCZ?p^D*5+v{=Jm)_6*MdHusd13sRD}Kf{(pMQRcoIEgzri84-N04K3=TN)9+BEzRh z=ShF996k{Zms;4t?Zn(pJs+KG6qm_nX^bP#kK?qencNREffx6C$$xW;c&;%#Czz*P zX!6dW^JE@Yr4mXP(|AmhgwJ1cFxh{>eIwqaATu23K})_m%-5}=)rJhNYmQ@&&19yc zxliLrBwZpsSP5STXoP;`M6W3t%uosRF5tw|8PskD*8I{)OK#$j*OBdq&{uz39o}uP z!@FJT@a}W1!(OkM{D06@#tk?_rF1asG+r_0((GkS6q2@q2978EO#xFLf5s=ZyUE<N zX(|LO|LQR5LL1+jLkIEkgRDF81DK$jbyit4ZulB#yl2;5G98V}5q@4-$+ni5X)?BI zHJ@`9B90lANqG*QS1}wj$x&s+q4ARGm;h*8OZo?7GQm$?@qf8I)0lM+V^vR`JQY?X z%UMNii%1u$Ryh!8d|4Gc`J=!CbO0|mC6+DAc<gcc_bo%$A4jvvu}6iH`}%}jG0wr6 zrIM<)*RERzV`mbQp`LAL!$-j416O?C?wkJdZ&Becy9#%?sBqUgs&I0KgNeBHLW-5) z)@fcdP~f$&*MIQeQ{vIcn8|*4Df=1o@Dfa;owr`e#iMvzDH)Z9VZw0V5t=Xr*_!1_ z@}{QNX2TMWM>PEg4#?Io^@G?y>}Tuau#A_CsGLZpX2u@OvB^xS-`IXDwqIiV^>^Qw zi@3^DhgSHwY~1%qskz=#*)c23!;+w3s_1+=+cvmnCx6?&jEQquQ<ZL&0N9|*eo(Wr z?iUKIdqT1KLYQjkR-%-;9ujueUSrwg(Gz^yj2sV~;MyB9eP*7qp_fX#OdSi^q2oHo z6zT2A)WI1$2V(co)##GFSc6|h@3d?<wN5?H2u)JA5Zxvsp4Hit$Fl|wr<viDEf^cw z24gyPU4Ox3+@j{E;UbKXMwqPq`Z&)agEILGCJ$J)q%dl(ZHr{H85L-8$y5C9tHYQY z{)J~liGyH2C8_H3#{8vsBZLdj+hxOpH~?`#j=w&Q#G0yAG!UEGbd5*#)@SMm7jw|i zyj`jEf*8K7VtgcC3V%56Ee+v!yaK=hJ@O>S3_?sRe0zUIM1QN3xC~k(&GhNf4E@#7 zDT$i#8UMs+i?oHWH1SP>uXNzUCVt*%xBL@-HKkC6a?9};ReVTiyrMv_&P++n!4KAT zJ=c{Vk|zj5|CKLQhIafSeO15sN_~EM{43{S`t76K<VE=nP<<HXmS4ojUOfiAdIt0^ z?Y<9YcocuWH(?9cSAU4!5Bs5)*J99n@LT8wDLmFu1&a3jSvDD(`HMA0RK0)lKK-AA z_AFZR&!zka-Q*uM^?m8L;4575Arn6_=q6tapPLpB^&uQ@#@;Q~{W%n7xUGdwR-{xY zlOO$HMPF^}liw#srppi1ukre_*IesYnCojb@C1LOo{CEB3xLP=&BzdZLnUtCB;UdE zcsn*R<?*%Ls6Rq&I!p(C{c1|tJMtT^sMbI4K9kyHq|}!q7o_FCtpWxhrA5-7gh6~$ zeK>8)+FQy`pbvl#RGD~b#G+uvH*6Z6;&aF+sLy)URX)!2yY#)g&$tvtN_oAs2(l9E zAbWp;RTt<_p)=y+lj^0=$CfUNL*IzioEAJ%`Hi%-^MG|NNxK~~6`x&)sXw~^OiFzS za(fWg=O-{ts2R~)A%VJ<qM8*;yQA0RcdQ{_i<XjaLon!jXc!u@kz*7(a>X$k9C%w_ zX&t>k_rmKy5N63aFTtp*qE7$pKOk-Wy*qy~FTi=EtrZP3^gZH%kH4OD$l2sCu&orY zyo1sT8l@HF(h9oQFWd{(e>Wm+{X&Zl{RLNi(2U<c!cCv3J!&dZ^-Zy+u&Q4qLWaKh zq%X1w?-jZWTlq)Gb5QKVk&&8%k;MmLSg3WvNIlOV>pm0VY5+a^*S<*2KA08%X_<cq zYX$n2#?`b~_sEKxM8)C+M9bMfy|u*SH`4LzA0Ii>x2`zLAKUi}Hl)`_)YtPC^rq`C zp}!8Pdg%FP)9ai&zOU5Aw$g@JQ-g|L0&VcEdzH=bQXc1=51w-W!{*bVN#>hd6`|gt zox^|xWP#@2{0P!~aq`=oqYM|lR5^cqxE0)btkMWx<Op8WJG5q)BRCJmQb!kWz8Q(H z598Eoch{+2a^u+5lG*HrNE`h1?nG^k#5%|8Z#;+xn7OTL_g(W~ia;s;O|#jU8wkvU zSSy2h%d;Z!>-_qp#~}FL89}=AZ|@8=7f^d<_|@ct(D6)LOG>{UC%-*Y41Rxvzajfv z`Kti_;IFq+f9S|58($gda%)iB`SS~Z8y;o;2H5z+iTMmaarlpGfWs7e?dx%krl)?t z@YlW`MctzTC2>=JPHZ}D<OfTxr@+Ef{<N>n_>4E`A*1cN(S;tRhv(r~Ja<?o>Ql_^ z_5f%2=J^yp3&X#2f4|{>gyDaK3n~29&<*HM_aFYV8VH|v2Zis!@b&$N{}{tmx`dIZ zOWJc+A_u=>itl0Q(XJHD@K<8^KYn>CC5#jQR(iY_@xMurKaM%vkRJbA#4mHj<Go}^ zedDc^n~N|vRW1F>XDo&Zxr7n?P@-4M<&R;t{^^xs_`E2WKZbv&IemY4{hFrU-d5j& zg`U1I7%{z}(OvlbR&E)Ry=WDYJ%}$?Hl>o~7eo?x{yISxhGQ^F?JC0x-@;F4{6NH) zx!^BjJe9*Z7yM|(|0m)zUGT#hzYFo7H1)*~V*GQ6-{XSMX8c2lf5ru$!T6PkU+04V z;&sB;AimZG|0(0ILwtXk3;sjKPp164;14qX2b6yo{7%MuDgTXq@!J`nydCrJf`5te zhY<ga3;s#Q{~O}hx!`}n_@@wG>w>?Z@o~hLx!{*Geg)#kx!`YS{H=)3biv=q_!)@* zWMyCcOvX>3{JY?<VEkapzYG3i#-Cb%`FFt&XZ(L7zSaew&G>&e5MSnk|K>Hq{}%D% z9C&PB%E5O_BDM9g>i>Lf|L635fzF7J_|R=>@naF6mmdGwJis4FkN-Kw?@o_zNBrhL zrR9I<ZGcbQoHqWK7(cimE&gMoe|!4;A^qmMwD@_5-*~U!)&Kwdzw&SE3Ln8I1@0DT z{0lB+cSvBFz*~O=E)v)vaD%|71->M3x4?G<>H<#-%wNXva)C1i&KKAq@Bx9F1U@UU zL*M~{y1*|5UT~Mt7dTzujRF@6yieeIftv*WMqonVI|4rx_=P}K$1q3W`2xoYyh32P zz-ocZ1)eAJcud?|1->QlBY|HCRCh}}f#U@h37jQxk-&fD0#^xKFYs}J&kEco@GXIV z5O`GJNr5@b8IBM*Nno+SSpusC)(KoE@Nt393)~@azre!+b%EaqJYV#5w7`(SVu9rX z=L=jWaFxK5ON6e#H6qW$OPu<j$)H&is8arInW;77dP8+N!;J#F1?E*S3<<2ePQnRH z2<#T9Bwl||U|8T5fz?8%S>R@Y34z@L)hwYSFf6cIV6(u@0uute1*+>MzQC}+YJtrH zHw#P%>=vjhCBDG0z-ocb0yhin7CGjL9Kwb?QvM}MJRI&VhFkvZaSf;bMeu*`<@CzZ zgmd|~@TreyBgBOY{AeilsfGg9i&}MsnyVJV|G9ta9#y02)m`v^iCO{f8nqnUx2fB~ zjrbMn4*04CpUc%0_+6luf<Jy6VKK~d_(qDit2^NrV@v{{I{1(OZd21$xw>A>P}jkC zmHLUQRHg8Bt-1+*Z&uR)d#x%_;~{(mVlMz16V+8}8N^!xoYknskO$=CBBFPo*hg|W z@R5Ha7@5lM>W}}2ysrV1<ERd-mDbXFE#Z|d8zE%7C0o`=)~;5vEz7bbwAvqQ&Hj0J zW%);Dws)p?r_oGL)7_)p6%LUJILh%S10mv$A0<G}{NzxMKP3=QLbw<%fB+{Ekbw9L zIxaSX92eg~Lf(7zs;j$aW_MQh2=2S??X7=#)m5)vy?XWk>a~Q8A4+$hbI>VHIfgZz zvE0BeI?S6kx&@@`6IRTH4e2<-5IvB(4XIip8}hOnLU{1rV|YJ=@gTGf&m_R^1j_}x z+a}`WUSEEDz_oz*t*(BcEJGCg@Jzs41GsDhR04c?fI7u3a2vpL3viSGiveX|!*73& z@-`Ebr76JXQ+dt+MLv|1FAhU_mH=}<U_dUKfWs0S0ncrsUEB#2ZzP;+AVw$A-9^+6 zLnxPc830!dkbnSwOHLZh8G}k)`d~-{q+<~N>vCAbk|0>Vp8pi^N{J1C+af;)d{dAr zrW@tjTFCoq(G2$x#hfG#7AR$WH=ln8v7`u(<f%b<38*|I<p$L*m3AO<02z=T*0em8 zx*5u{=1?<~QW0X7NUpb&`hfKBVOf`c%_IX(1a4;ep9cJjDv4cVk>Prnj~IV~eitIN z82mp6?i9E);Fc)78{?WmIdIr5QEf2T$1JO@&5)9;ttFxkB@RPa5#Cgm`z(L8DkVtK z0z5$lN~5Xy)LQ5ZV-?Ek!wBUL!z)P`pgbwMYzSjfeM~_c*a<CN2bAx6c((zbl-L4w zrX7B@5;QwT84AN-*;t`J%I8MTUl99W3k|oj%v7%L@stpsq*&GS9c5+dgw&Sc_d%*d zQ}BNm*WWbUvQ3M(BKt{-vJ`)MKZKhPW?64j)F#Tl!=}C@55Lk}KP<phq+0b*1;2-( zw5K?(Nwvd(8om?$4?r)}2RHKTX1I;#Asv+433ykeoCFop!qgst+o(gnc3#4KCDYRF zQyR*097;c+QbgHH)03whr=ZU)0u@=3()A#5QpSta|HN|?m2w>>86tm05-mfe;r)8Z z;bz8qb1d}wIqADOmR@yg+h?Jty=uzQ{ufi1bjUhcJuR#~vvDO|fos)xf^<x5KakBH zIFt#B#k_wY;|1yQeD;8E<tNfxZ%dnn?AF`R_kizZ4ovx0kS}J;w#;1g&yRDJXx;)8 z-X`vVXB)I#Tj{rKSEhfc?T&N0{^PM^s%lJjv`dapk1dOjPsh!yVdjxrk-_Oa`JK(@ z;b%LsJ6(a(d3bV^2bX%Y`sP2Ly2`)HZ<1}Bx|AIB(ujYCS`!St3m%U+szS&M$3GKr zV}3^XjRC#HP8!DzK+l$j9;HLvAGR-*BoKKcxWCBK+a!IeHJpEqzV=xAtnlod7ake9 zJ*@MnUx4y)rbo}?@znlVfYtYTqVo$Jx0^gxQn)ltTSDGM!%2#wJ~9l}BSnW#V^8GT zbjYiE%8yPjADhoO)EjwK<tIh?O!G+JqBOA2N<+GN8dDgQ+cb^xM?gM?#oe)TGa#fx z+%qVa92Ltke;j}BdTy;`idcfv@V`LgYm4N{B*{z>#`R%|q&anz&mM4b9^4QAI{+R5 zU)}evCcFjsU!pl?rYi3B+&-t6bLC?PAv*K6<pe_XPC7*oDp2R}s2C`E1rrLi$FrzP zZ7cEm4!axKy@}mb>~?!z(c5kmtU}S7iL_kX4Q$ESdmMj!4;sOYYqd3V`Sd!6%)A|K z>kQvMY;8Bz_LhwCnZWX8(6zn{FKIS%#p1zeoC(v;mpqMjj&Oz<7!!8hGS=pNBX2wK zBP-+9cRrpYNpT|*tmdbk^bS`u`e_Cs$4jZOzNH}+&d59}Prde`WXJ`%L8|l{9j}k- z@qA)M>+^pw(VXWHx?ZfV@J>pp3sPo5yIM<nDt|0LZqfJcaVVIaWx7VD=y@etoxuVt zdWK_}p3y$N)(z<^$0%2a)NECy+zYjO0KyK_>QW!oweASTm9XR~f3JYLX2sg>I4=Bu zZ%B_S&t8aeAMpl9Eql4#hiDYzP}|_qNO~X7B)flTq-@5<c6g2EEMpH<8{h!u+?X<b zCDB$Est5q~qys;_VkrPo_BR?O-!jtdo%SpWomwB|bM5uCxjz;Z(g8xC+N9QI*F%-5 zrT)%=qO87pR%_L&J!iNoRlA(im3xf2>zP`GtgU{<LyI|AF;&d+H<jbhSI(ocFGjxi zc6Waa8J&Z}!~2Ftdj|)MuI|z9&e86!?S?rKSRQd*icjiBC|)JCZOzcR7+EW@GFbjW z4*UZUZPRu0HW%QOR}3s8D2BpG2rVaT6enbRFkYINusq$!|GLmqi-6Bb@3=Jqz3}r% zFk|!s(+jHc@YjZ(Id~YY_Y*KSDev*0ul9cuv8Tdj80YtT?kjt7yr^~2gi=bjuUkEM z=}ZD~HHNEMf~uDnFgz%_$X6V@ahY9AX_?W2kztXC$d_!A-M@Nz=HOgcM}NoN-CZJ$ zI5N3|Bsab>Wd}K<#Ct%V6_h;3fR3zWt>z3?3ZKTz?&;_n8XXS#Fk86pfv%du4Ge#F zb+^@!?w;<udj~k68fT2q99Zsd^ze)(df|LPjmB)6En^#xv4>%n(FMMDa~nTIEk4eV zd!XOwNX&xD@yK~oJIry~X~vDW^m`S}f8r^0P#=r?d^rE^ruj`5q+}5OWauskfiyfo z)F5@;HO0eK>u%ml#1!`vj**(<bTWSjs)z1_upJy$$HVZ*Ej_1GGxj~nQPo7T<YaX{ zP~|jNxVah#B@c4;pl1_qIO3F-&pR6BE7$TG9Dg~~Nh4b-;PAWP=An)v{tPtPu`0aL z@Jr)3L^Re;Z!B;39GXWaqm%^`8QHGS2eo+R+I;pm458X#WP!1r;TwB!>_>m2+#91W zx*$WgGieklf4<SWOS0bRG6QqFv16^j%UJ6-(|FEfj!9nXahMu8Qo3zh?nlgBstx19 z%Uk9_9~zPQtkb1&yvmEBYQApqZbtd6U6*5}RS(>kR4WeZEv_e|#5$OTw!?q5E|3fr zPXkvvaEI8XwGMsNYkoWtrX_#p#;I_nr8*BJzt+&2S%&uJeA>|qc<0WDt<K;MpW1O~ z69%=GxQm#B-{aJZPSO6L++md1EZPag{l7y*iN~X7x$lVX6iExFxQ5r#lj}?wre#;G zT}Z`NDrYO_YU_(Tna)zAb_?cbxm+aoCF@<D$@J8UN9EO2q(gHudewhV-gJ8L^~4g% zid^wb(fZqi-233Fu^~1^R%@gCR8fp+S|5zAso;JW!u}=8pH45DzjW+PIh`lpDfc6W z-X-1nv||Nq#G{)#b;zI8HNd)Kb1VyL@Bw%?1Mk${uhuZawJ6!n$=W!;tFqPCi*dht zPpod*RO6I(h)>!JxaNPgCY)F6_4(Rj3f`l`^<ylr^}Lr`PLpg;%Ij^t<tIq&^SANN zVe*o>=ps5R<w5Tn%iLCK&15{eW1=pP+clf_@~u$&#-R60S^s2|MwKIQN5iPMg6i)8 zjNB@}MSYz?s@WK-QkY@VW4IM=^g+#v4xlQa*3Bh3lDaoaAEkevQtaclS@y3JgtH)| z=82REr9)Dn(m@@bENQAJT_lI~PGrBMaoM!)k8kAK;^ByXN;7an;g?zxO6$ksG>uR{ z$fkZy>)KS-6KbQ?pdggw0<{|mW5|OfPcuSm)JQ!b)Fr|&MVb+0SmssEq{fcoQ!C{S zd8st(P*yfk8|8nITuhK8WQ5kj(fl+ka?0UaQ{wvI38l%UV|Ecu{iGv=`AnAgmax3B zg$zhG9OBj_jTn5O*aZBtd?og{{zPSMr>N{j)7w0Ue3h4bRFg^0Q4HQUP;bmoXDLH% zVm;&|$+z|}ABrZ$ze+jCR^i7Mu`R??q7oiwuFl2{wYz^3#i{V!agpUYMLC_l-c?F( z>qVr8Qk%WV^llH+b6MlffEr;_tFAQM%4?FUn;N6SciTnKpC+u>zar(ESh6H!(9B7e zVmbYr#htU3x0)O1`d#Gr*eV_(skF*uDT+TXPZnt{TEq+4<|x^z)=wny-7yEg0=I%T z)kHmS&^vzwmD5r9FGhaiDP?)K8qbBouj?uDT51xesJ+cm-z4WmR!mB&*Vpz)`PEJ@ zhLAFfWvcWoE798?DZkqBqqg#7M3d96P@)RIZto|kjAU(-J(gZWF{pQQLmgsGjf|5m z<Iw_kjkn5u@+O8)zeU2AGd#wyirK<&3&SVhEa87;3=c7Ul}d==s~J4;xP(_Q+|KZe z7(RDQ!Ydhe8Gf<C$M7nZ{+lFxJ;OPMZ&2yIk<UY@^cY^v@b1@3cv|s;;ZU2L;lql) z*Gc#n44-BAmkgg`xORQ^;lzltvQE3wZ#8M;jJjx2FAsMCCRx8Dt}7dTkM$=yKP(UN z5XgVp!=Wy&ZUeNwNPK<c($a%-p98=pe54+(Oy3bvjb9g_9EDf9w`$&%4pUOP$}+6M zJySfiPE($`kSi#+igNwNc<OO1v(s_$8pzesuQ&gba;ncAtPabj{5-*$aNTZz#@4u2 zy&rJ(!WgVO!q0lm7bV=zxzZ~Rv*o7p$%udWB}ejc`P;z0Cgnq&J<vL|(XvPRi>|bl zhmx|nIpklO^vvV>p=vB&KmMulp3=uu9GuVki|yD!&dR&dC74Tbz9@RasP^+fTk3cs z2*(vl_r{<W$Rv4@<1;Uu0mU({5lQWv=j;5?#nFS8)a)=SYMG;+wA6u>E6=s^dA5HO zTC?eT>-u;x=e;nT(pHIwjB@?r@z?h>*;=*Dv^Ks5r|8xFbM<_dQ>^>h=L?^rc<J+i z4?`-gscI!wxx8w}-xFCOF~mzK7nROls?%IJzLx!+!R}n4SI0Qq;ro^s>Wf*~)m8k} zeq!bPRp!d2l*n|a7j%tJ4qI-~3$}k7BY}szo6t+pE-C6t_72KzP&udAX!M~joY+CS zajf~UONbFGQ*^RMXU=pomZ7=O!(5>4)L46H6Qw3|Lu;VTUdNNX+01L^c*eIHk2*y4 z^C9te&#buxy4ZGa{_RtFyZh_VyVW2!tkIdtnVy*mEYCM=hXc<4ywRoUmGpmg@#m3e z@1NEZuC<WA_1yBHPo?=;?RB89LJ#oV@##Km>2t(aOZ#7$-_ND}@0({2P)m5-2h1H( z)D%w5R4V7cw*H~sC*Y~w7e+)!7|+XUy^2cbV^N<>uCZcG?&Mtrxvn;sO@!?PE9~+9 zV(Jp~7kD1Hv*>kC+rf}m%vgWEFK9lR5pq`q_dv3||EjL~op-Z^)JK_&?Y}F1m1qkt zLpi)&rPfAuY08t1vP?bVx7H%K+fsSmZ#&uI)JPx?41)hY=*y)#SFbaH>R9+<zmC^u z`awq~un$>7MYrUJ{?bpP6a9eMoV4~7r)A82AR*nrb=)CqgECP2)Tw{iURQN}mSlZN zUKhWgyr0rX{gO)i$(7FOUdr>2$<&ohR6F??KijDEQT&Set(L#&IY!N2ed2QNlZZNv zs9vMi3axf}b1q!FLW!Qw`bJ=919M!e%Jp@oM|=Cb(H+>=-#y&hDf0(#|KLFPXvgpa z3ho?zU?^MyLwK;SuVa6-n|^on^~L$K>O*n+EbV6($aQ%3Klui!7o+?|!vD;drT>Kw zCc=MC`kzbqpZ<*WKb!DB_Fn1VuwY^1Ws4R!UEX}flBF-WvSry-S1-Tj+83^P(aIOE zy6*ZLjMZyyylL&t>r(4C+_JH?ZBzT^Ew|ow`_?<Q-MRg)9Xo$_y<~UCp3biBp1b$< z-t*GF{(-@vdxu9x_uaSu{s$g>=)l7-OOKi3nXEN2nX_MhFkf(r?khY$C>@%bo;m!= zM}Ff~zgfrgobffbi&^jD<K%gihiYfK`&i>x>UZp5eaNI;0wu4N-pDu#k3Kmpxc-)} zPv&_fjyw33R)~M2?<=nmM?=I{h~+w`Jb^0v!}6RbwYu(tXXjl}ddpYy4ca4#Qz7@f zWV)HiI)3#~@tldO^hrO(?I>M(oT_&jGU2Z^ke4;H<a?6wnqe=$GtvH)=U=V{yYxS5 z4FTJ%PM%x&OovI7SR7}4mGal&kT>y|=%acqnVQtF$S{9gX*SnOadbFYR+}T~UtE6H z0Ic^7<Q}%vYmL{V&I<fX?ng=gWO`c1OP`ER%8$yioHxq8As!-4qezr8Y)j&2vuDS3 zbA{TM45L>6jmT)DouQXds11o&(r<kvKPB#aJt~`>HRM30TuZp^lwvszmyQBG(@w`E zpnUvRsXl+Goi?9zFmcR}n%KBkJ`|hd$0?aRR^_&H?s)MQHEB6Sx2^NbkKE_NKBM;B z=s5Gqi;gv)oXjUbebf$2(jI#4<&%t6Yo3zvYRy%;ZR7ug@)oz{^ANN>5AzInE3azF zdX}c%RMj_W`9hA7+UR|?{;ZmHpGxg<ye+JyMAd(#>C5w|P*S3<`HbU=js;V8xoe3Z zT#1gq)y4Kn1%7#@!t0Al*Dm6YsZ6(=j~j&4Ptqe0-E+FJ_Rtamhjq*8siQrVY?!KE zVVKwWImlYhA-P>V&v>Rcd1&78%rqpII3IwYAi5#~Uk7kw1b$lregnWw5%`S>_)Q7; zSOR~3JORHs0ly^ye{?|{{#XKDD5MV8X?T{*lOKig4B1#fjwri6Lw#|(KKBExW*qpw zUh<?{4QZWCNz{Do%3T_3d6(8!-legW_uTE|?S*?glrQSg_>pm0mTzpe`uR3OpBcUd z`EMfsP3!}*2!42Vu!|SkH_ZrnZo!JQ_jrHG=1>LyL6%YFi|flS&k>^`J4lnWMC}@0 z_mKXq*2}wx^=w5LUY^rb>s$TQI%6v>uO4BMc3(-v_51Fj9!>ko{3!Yry^2mnm!e0} zA=8@)=}_sbbX7Wt2TQg@D_>@Wjvk_3`=MrjiTam#xcvfG)*b4Vqi;spYKQXc=QV$O z6=H<wjKXrJEz?!$Df|kb!lUAYT<zUnC~Wsbfy%<Q(ddWEz#lVkN&fe5%4Ro7U<kye zgGHvx%2<VQD-?)<;-MHk2rVUoBbFPe7agU^k`Kh*Q_2&*drA%!e244VSO)#3mkG<+ z8uv=37c%S~(;*Pj#k3GV;zpc^4{?7%{29cBcrZT35hG?$^0Fr3>G5p-h4v&$o*zQM zFDvU<5s%T5g!+pPd5)CWH3P(h@i7jD!!Y<>L@%hp743Fk$?ja^oqAvO(|7X;+YGI} z>+ws9<WB8~ShU}Y<5a!op;qMZ%){0)dU1cn7S+xJ<4)NgVbC6!MO6D$&+UIIyK=1+ z-)h@<@pHZP;+M2n=d&(j)P7jhB3(Vtlj>Ad>TPXpBB?Qg{;YOF*M8G;P;ubMXXW~K z!0s5k{dUGH`o)RBxX<=WX5Q$$<rbsM8ZS*6efGE)soC<9uh#mjo12Hc;-qI5P$jGK z-Q1iS@+{vshONMxK~o}Gik*M3G(rW}++WO=@|IHj5zVOh0#Gxm&7jMQ`Q6hlq9lu1 z6t20a=oz-&U_-knx#E;DQ!IIgD@immrUMU}nSmdsVp%iWu-Rz%mPJ%Wc#th-N(IXa zLZmX9A2&B$Vcs&AJ?4wkg|5XOa|eXmp|b3lg{YoUe0@>ZpG(!=L{oo{?#H?@t6k+g zah3LK^$vQLc#)w#)fMurp|mZaLbx<D#&$@Z^VFxW5!X2RnS{#@wUkwR6+O{|?UX)e zj4O4BMbU!$ueor|6Rk+%cN7N7G-T>Ge~{MI55~AFm@eH)>alToJ1;}-sPYzfHFDwl zv|5XpfBD4uI4?ULlU9E)UYdx_VC&c3%e{>9_Fi+^rnr~7d}XS7epoJtN*_d??XE15 zX(7-37Dzv&{`5yvi|b>=>8({#<8kIEvoime*4{<Z+69h_^4zkF^Qs`0B|^BPAGKqk z+7@Xy21jGEb-FnmktMAZ$MaWiWkTCOsirBC$@pU5Xiw`lhVg&*=B<6<KK{Oe-p;|U zZV|V4qwMLH+q*$2m1js**(o|^Yd`e4Q<X-%^$=C9=+wV`h}+B2<1^KhSD|NK>wKPN z7UBzb^&H<y9j$naH=8viS$;|yE7|xi*AJ~1{i>I~7(E8ya#nF!?x)M$+u3SJI!v)r z?UL>5rL;Gbv^IZZbh7a<gDr~nq1m#cw~pyBI`c4~HTK$;hqL(^81wrX&vsQ1V~+`= zWf`c$^UN8J81>gt&~jKxz8^)qVF_e#jgh7Z+MW#T42-pr=f-5o^s+L<SiyA6Nh@m{ z0%8GSrs&SVKL_eSi9GB8DAfqZINYIeq-U<sI{ch?von7%at0F305?To#uA2vDTbl( zsc^W3VVimTuoVk2X620ekQfO+Yse&@BJ{-&mh-a;J~wY>ES%^7DwLOp9yT)hq7Ty| zi6{9!_7>h33yuwQt9;(KC&4eog0kRPQ}jcZ|Dg%eAd8U`Ll_UYPK*tYj`pH|_g?wF zlnvNmBusy6;e8pm67-dqLq$eJ!c}BxtbAsbGusPr4w<!m&ANi=R*~DP@-SEV&Q-2H zu+j8nao`aHjY!7NS`%g|A5>$VPQOZgnSq2arb`DEG(TeXURU@r+<7TZMEHg>v<~rd z$t(Yf5PsQCAs&I}W_Wh&*eQ1H+9}q;?@jQu!gGHMJR2~~BM|0ha4`-%uYw0H%5DS~ zqL8Nb4#XkwTmi&~r*+o`7*7EX{EZL%y9Iy^^iGJPD|w4Fp-iua_&ayX^YuFb(XL(G zK1%r~*+)2?E;(%3R!G=Gmf0B|bf?p9;BAH0J#CreHo}>_hpZ6l{e<ZU+9RC~a<(6Z z{UCoE3-6lvT7+;WYi07_VtHj#B5@u48~$D*yDqz9><+QJo85MHQ|ub-wy-PM{lR9b zNBQhi628E$I4Rxp41b^9bL{>-yJy*birpvK{Y!RFv->G_PqF(^c2BbVA$Ff&_r2_% zVD}yD9%uKh>>gwH_3R#H_ciPuVfPVsr`dlE*mc>>vzuc#%kCJv2iU!z-BEUj*zIF? zH@ofZrr2Gf_^SB)HRd0?r`SEt?limiv%8Jm7IrUumHEx?6YL&gcZ}U3cK5Qoo85MH zo7nxuR~Rq5=h!{X?g@6M*&Sjx#qP6bI6v&3WcMh$_p_T~x9Ln={w{pEk@bR^AMAe~ zXLp)itrHow387{e`l{dh7^bSyi>}9)&yOlm7(b<;FKJINevU<2pi-7o9NJmKlMhng zu|VPEerUGL#@@wal2`IPRPw5~Jw26f(w<(qosCODPc*$aMdf-`^`%EyM#Nc6TeyoW z<*$=u4fk?gF3YG*9%*UO70RMsRw#d~QF=~kmdR&Qk5#8vzTX}{^WeuMu-ZA7G;qhK znVhmFjC@F*HmM&!G4*KLdc7`b-LjHhOU<j<a$DOsu%i5kb0c~_Wwz5p)%mG0$hD72 zS}~XFaZ##9Bbv|h(qF!kc0_D39p)$MqrZHm<fbxKncL(k)fBZ*X<83N{-J+9F{X?f zy-I(3HhlX0(zMX0t}jJ<rP5P!Q+X{ymCMwea$awGlT^glk7}3S@>5Fj`kc(El0eC? zsjz(JrT<t8+!E^{V*OkP*w+aoQ73%1FlY1bHP+oM$(OR0m#xqX*NflLQwH%JpZ~uv zqwG$Fclo>Wd#`Aj^?pr-J05@H(a7CU;~kCv>d3vI##_ZTe%0*%HMq*lG<T^bph4fY zUNH%1(D#BGZ!H1O^`0yLcrS-L3Ps=5oMp~;9IiFLI^Rj3hK8s#9C`HBzxA5eKK9#3 zf9F5E?)7hY<C~5>{^qy5^>^R)d&l4YAOF)k-ubR~pZNVhc+Y#^_lJM~`HA;`;DaCf zqyO^ZlYjhQKl0I!ef$%r{^U<T`Kdqq^k+{0`CokYFF*I+{_4rkf8oFX^%uYN<uhOT z>ert7o4@_LvtR$lH~;=0zV+>M-}&zMzW;-N{Nefk@uUCwPftJd;|o9e=|BIkpZ)KD zdG`PO-=F{DU;piw&-s4<Y4ro5H60-RRp<X#oqpX9@K%5SYr+3|+sjjy1@-rY%k`~Q z7~B&p(M%HGm1|c=$9wa&yBF96Qsl39e&zQm^oXlGzeQTDNpr~b^PEqoRJbJiFDkzU z%1<r%l_8(+{1%E1<u{(L)?D2@M~e04kD}ya?M31V6wF`=ep`RpR@^7Ca0bKhLED+k z77Ie)u8N&Cv&PLvP#iZWi_A|SCNH_xgGJ9WBd|H)*%>p0jl_E+@;+ZYWF7?mmMkwQ zwt~0B?0T)4ob8xO&Row3VdpSB)>P|Z%gmdOT-nPNok<|WQC~mH74!6N5)uxKanBA+ z8#S*jXOjFghb@27Ay-IM2(w@jX(b;Y-~-U+PuZaYygy}SZ9msKVLOD!cTET3LzZJ5 zE?Id+u<|c?rOA>x6T&i|Mwrjg-||W^*z`<_n7{{)Sui#10I?J@5w1|oTAmYut!W79 zgfQ?cTk=dli61ZpR>3UGhm|*cGk?g;vSx4SpDB@_f<b>+Y@`Xls^^x*^L8eVCsPCw zGgRqE{qx1bxNRosf%3^)5qP|qw+}%u1)JWa<pf$#(5xA7-14o~anC$#=WUY|?wz7H zWlaLm>de4zUujBc|MB9%g5I|Z{TT-7Kvb<t7Hp4l57GoKz>}6&h`d&CzBFwW#)~CS z$))nQGr51ja{R!uov6QA!p%8Ib;7fpOitrtxC|fr1H;X1B;L4{m&7xLttihzL}3w! z560oJzR$$#yLz9j$I9P191r($kX8($VB51|??HO)@o_8Uv-WplFl5L+Y-!l!41}<( zx8dQ6Y$=Gcf$BL5Mc@ISP^FrSTKW6X(3x)0Q+t0c+P~oD?FpN=PeXrfZz9c&@<$h* zoCphqFGUFzu$d3vD7qt}6!SN#_$&C#Pv!nm_rN}aPbJ_J3HVqDcMyD(;eozA1W$+W zrPYUk;Rp9h{RcOMdkM}l+_`sz;GsnLZHf0rB7Rf&ew5&6e-fwX+)v{4pZQ6g{?j2W z*NJ~m{v=NS@er2yj)t&Ie>#Nkk@*SX2W5UjSkm7f!jfJigzqM}B|)!9z!xq^xM!I2 z7s8U>Cqr1~=Tr#G^q*k3t6S#(SP0Ab(;+P5=R#P<zyCr!|9ctk9hL95F+4ChEc2Iu zn?iU%=I6(}Z#pXTbC%)m5sB}~5SH&xg|L65??ea>%JK<enV(z;cS-s~xQF1~AuLrx zQz6Xd5yDa)MF`6SY8ReSu*}cd5SILTGK3|+Plm9Rj}sv*`ExXcWqD7Bu(U@t7Q*)t zJjC$GeKJ2?&&11Xw+helwIhTj{%r}ko#A~<Z;Ii&_i%YWqw1T??+OJ!DEZft2rqvU z@Uu^=`YFrfJi~imD(O3`-ajbI_o)Q@<kRu=PbJ_d7#<py{6F!u;?GM7KF08a9g<&1 z7=9_sr<-^`mUzFH;nC5-7=Km%wmlt(Q%}eFxg){fB}-N=S=_R<aY<8a<HE)zEiFyg zMURJzO7<CCwnr-Wvgc!Sqt>|9tV(~?7CUaQVhx>*_2}!ElYkGywu0Xb?YrY%)xn4b zQ*A##O<$ImS_5*&B1?NEaSL7bnjc9TUJ>pntNG(VINlow$AN>LL!tv7ywo}TU{IgK z$20zq0L(3j!1qV4T}W~;4nrhsI%BzHbrIxmr_}p6*(l!|Ka}S?)4Wp?(0qSQU-dj+ zsZxvX&s4Ju*}?C%y+>|8LahouZ{w8m`G}IoBK(64wups`#G(Z)josbdm*I7LyC9CH zjBP{rFK!Zdw72gcS_}*^sD3n!<;LKG2GX5|s|iAg#iFSRoF=#zt4btol+5-eTjt|@ z_S^gkJg`UedM&N;6if89Mm>MaN1d6G-<62i@2I2wNo5-{{yk7xL(-&Ok!5X}HgPv` zr7u!jk@M?$)kUs^NZQc{v8&a!H0@a8-nrDC*esOpME%p+B9d4A$}f8QLfX|dS^Hr2 z?-gT6eQHFWFnSeRGfj(L`r3Ji=o0Gt<I-1u%SC-FG=Am=`xZr0rTu?*Om$*T>O|z+ z(;Db2P#*}-C+>rkd&oM`Rw2Lrh%JjeBV$p0k^O?qj|#m_C=IRnSF<cWWg{)!s&fo@ z5<8xLZ>Zm+Y~x049IJd4>14D?`}>lcX`nn!yt<#hKq&c$e)}u>?xTEFezPs~Pg;mm z=^GU-`bs?xrFWnxL~VaIxkGP+=NBu**XNF^#nkQAL?}&Y7hgk4E`pe3B+rWYq>oZb z-$vS#b>KgKVGAufmRpmpx4m4Qy4L5|JSV+TYU@v*Oij_Z=*W@Bjy!q<I>d#K9eM24 zN0wi98T5#+eeG*uIMLpIWa!9I=-pE5whiq+0{tCyibF$3A)0@YI&$;~#1hag=5o2F zrp42)JLS3+`a`LKCfiQc3XIU1rvZ@JVLJKLSEjL6Dg3B-fX-w_`_bt4)IF-38Cubv zOBW@nd6JH4h-f_-JQrB`jf$r<b}GwUJ?&}fRHNr@<8RazUG1-Q@+_Gjr%I0Mn;)kv zN9FVgu2-|`@TGrg<e<L$pi8ZO=T&uT(eX+(I;)jIC)5e77uYA=R9AjmyjvC5pRUwS z%X;RLt({6|N3jm=-6iJ{C*BvIN4V^N@(<(w&sOoDv>aS86h~en-;0y-{h1F+_Z+(? z*?)}Tu@6XhXgAxne!qm<&x@E_EuNZ3oxV3dk9rbd)pvh3)UiCKW14?L*hP7oRnaoN zyD~qHe0X+#C_Dx`7TY@UXZ*kd?9VdZa~%J~$=dj=z7zUOz7+q&aGZZl!*Tw#Jh18G zDeEiC-nI<VzJBS_b36O)EbjQ~vPWMjP7lr;{=^sFfBNA+cyr^PV++6krS!7zJTV); z5x#@QAme`o<0uC0CLEwvKM&lVU|E+umcGjM!(Ym_M;ons$QDM?+&w%zIBaY;_BnJ8 zFDOP1Fd7*Te$sI*n4F^76WcL5JAyo(`IPoq!Vjy)=X-}TcjWDH|A3#f-2-NjFHB^l z#lawtkB|TG{83xRb*s^lFJ=zThXSVKdElqCSCoH;{sdbC%}<-!=M3S?vsQeX<R0Ir zdG9+b?xT^Tyc}v75zn+Jw`CB2i(1kJ8WSpu)R-TW(zfcJKP@Gguhm4!IL`tPh9@>E z`#!(?pG%&RYWZDs{6e%HlWWzAmqgUQp_KNuBcVAV{rxzGUH<ZAhWan9(~WpLMP=*s zID>z4s($^X-sPn<Eo6DE_0wzHr-gvJK_;0x@_Bi{JB@~u`c2ohoyh^SV9^IjGU?6j zk|z*;)H5?&nfmFFu$Sgfm~>>bRyH2N<nVW6KW64bxN}gh-z)fDxm+B=!`7sYJ8f$I ztNkZ3#gY@698v!Ab0>DVp%<o8bOH~Wm}GzWz0eO}Xa#re>CD?!Io_^4khep2R$07L z{v(d*;?}Q%2Z}*&!PWU=e#%9~NWAXIT4U6I)Gk;ty3I_^il!G>PR7nhVEH{S1w)C& z@a+r8)SeD+WlGRC&Ls0UGUH^TaPLURP;V5EFLNG+w<O?O6ENDe87B*bnX>v(@A`kP z&LF9^DOJ;D`;;R)k8W5arLP-1Q8PlbEmb4!MEfAyT=bE4E0PzU7%8v+s-;f08n_;o z46QAMrxI3AD`A%NL2Y;XQnaV?+r83?sOC+9R*>WlgcqIxb0|MWvOAP)UuAn)o~LM- z^8FWe(ouiE`A!%?-Xd-l+u;8e-t~Xb<8~in;%rC8OLI(xM{3z6zmKX<NG7lP&i8b> z7xg_A7}DZ!Hmcwku}IfBJi6V0cFM4vVrepG6s$r~n$^oFTOW8396drzqBoznCIP|t z47~QOSCpU`!gi_4_UM5BjNu^0g3C=yPsx!3FZ4#;3o>9}h28#u9H{w*dB}gX^Eh^s z{@Ck~$vO2YLk>S|`Nfi#K}!K<mWFudp&~TLS^XZZ5Kt`CB~s~h6$>Ve{nYSY?D2{R zEyr+eR|Xk{2nExbG4i%^&__IGwzcTwXAJtlrkV~2^)*G`vJNu+z6<S~k+&uSH0zhO z4%xsF`p#yAieBg+T(9VQwh4cX>)kYnh7zzRGNdH{)dPfdfVV?w`_=q$EL%nwq(){2 zRla+Hvqn}G4$>RMJdplUCa1_2&}n%{5%Gb`!LX*G@AZ@XrwIF`MZl1;drY7qn?;+7 z6n@C^3O3nSgcwe!b|WHkNBmRthWH^{ZV~!>8;YRhB&37*j;dr?G|7L6Lk(sVrB5Z6 z4Nb<7fA_SNG34%;76Q0Byh+HaA0*{0&KLZSW;9pGZ?_a|k|({Q2zx=eJ+I_~h#M11 z_9ONb6kaAfgo$RfkD-f-u0bUoRDoRNW`NZP;zhGTJuA|t*XrdJUFq+Od^vuf7=XD0 zuBLR6@9M@~jdwKO*4TgExTmqN@m?5-t^}XkLR0N48h11fHr@p9?`*sa{wx2xX&u_4 z9spZyjH$ktfS0nIsBBjzuMD-H@vp{fdyCkL_S4FiM>}k|H-Ia2_t8E?iFXmOhc3~c z1)h7wFAKK8bAY}qSo>JGK>jxORO;(1qcpdQo*j-~cszs-nh1ZIzta!tBh*P0(GVWY ziiP7aLPd~2qyJQBl@5p02nAzfpg}<~3PK-^Aey8)-_p>aQ)!6jBa&J?GYu+s1HX?U zZBY0^^bz`0&Y}oZ-WtM8Y5v8cHAI=n+-ivb6Vb#~*pQtfmMu-adKbnx{dKu6c7ffN zZ}55<yJPI0VE2EVdjC!7;u;TD7F_jNBydk0Hvr_f0C4F6zm<UBbw&Ho%iy^ho)^ON zVt8(V=SCrI$l#b7Klz1PR3lVx1l9N7g6BQ(d={SX!Ly(N@wbTRHx_2Q8WPWf#IrE* zG$x+Q5>F-k3q+g`i#h*GInQVido?_p;pu?Kgy&Is{#<{^B6$=G3y?Gbk_JH10E}z^ zCN?aArv;uB@EGtw<!smu&)D4gP3A9|pG88Kmnt(=ZmR55`QfvKpQS>7s~xWv&f`@K zH%0Qlh;dxTI2swpLdJpgy@2VxGJ;c;ty*Jj5an03Fe)D^zlsmZ_m#rnbzHPGoN73- zU~J*;#&ds-EsJ(9KGtM3AG=~~Y3>F0x8$zcw*2U|XIGqGX<X;t(7xv6P3P8~*>JA) z?51b8Y}<PL&J{aP?Vj#x+1t|BKID#`+dp>Th&U(48pMK=fbrbIGmR%NJH6<_;+D(Z z=G+y}E=j%M?3Krt9l!eg@}X<p73WqSTebU!_SJv8Z``}~_`35Ordw0(&u%$?`-yF5 z?%KWUWXJCA3wv|oBv5#y;X=dMg3}A!g+}9<#uJyhi%u*~HEp{*)jWMgZprzjsVhax z>1FL#pI+`>d+dd~U$pJT)2p7mey?$M&GDP2Z*ETwZ8)~^LYup}<+i=zh&UsR2Djl{ zLkoXUX)HXmaIEnH;7l!gcG3C8XPch9{E6nKB`24hS$gCJEiGqSPF!{3>L-?;zh>_X zpInh!nOfC!{h8}87`xY;ys`b}bL;dOU3J#BF}xS?y_mKLFNeDs<N@!cAO}D)NYYi% zLR>ADi)+NSVg=M3jZ5OVjBXXX8RQD%VoZOGi}79vu~v#z;yP$wRzv%;7G}OFXk%K% zCa8f?Y)DHJ-AG3ZJj>w!Re)nTU_m@D1}tmfzA?nn4lUK~F#5O)X0oXDAn_^MB)%)) zZXrx9ke6!!58i9U_0Yc}J!k_|V%iFGxgFvqFdy#`_rOTtUf@kLaAG;+0CTef;z)mY zCHz8;tO9ox-`B&vlHF=|GthvzRuDbc!Ywf&t`&r3CEu%Rx|c%Cs~98VTTWP3!vE!f zS7E$9Le=c_Era*h0&UkaC5T}K`K_SbOMI&c_iT97y;$rQKM-#gzbl@B5z#djT8`PS zX7O|Af!bgsbO=ghw|E(?HPm`7g))CU4)qgPxU=HrFwT0l_=fnBc)b{?A@-FZIiG-( z9}-^x8Mzh4joZc35cd&~E8MxB{c3?xTuvOMap3R6NO&RO`HXmrc)$3#_zUqJcstv* z3}pLtK<NOuKNhcqUw;d6S3tUN6YIo3Ll1m(me^N`zY{+a?*eX}g1+sL_yB*5x<3h= zc&qq@_y|xxF2=;$tHxdqsqcUoTOjZ6fwKN2<o~1MAAsf&pyeInz2YgjKP5h0G4{3M ztKx&=U&K$v!{Q&IB`845+r^Vm5>4Vmkn)iDrg%)80RFvC{ID$c3Xqi<@!L=rzXl`b zpNm(CcSG9m2ii}I?~3n3>EVAll9D(NQZ)wSkGMRo6n`Xs1M<B9M)n_vd@mD^i_b%h zRgl*0Pzu+GpNThuR7?Q=?*RuM2YfwY>{a3k@ok_q2R+1(U}XML7`cBM#yM{hUxaq& zJYc#8O5<mc@&@pIN=!i>*FvlJN{W5GSP!W`4wRmScJ3pP{uW5Z0m*;+F;My~plbuX z|1OL%&VdxZ17iLhLOug+&uK_WU$XUTqLc8up)a@&q%MHezX)8p8d|+RNTF3c2yse4 z<>$qlK(ZD=OSuA48v|VL1o;>s{P#e4-wsm$l=v9X`V6G}ZfNa#K!PuWdbJ!<9)fas zSo|rJ#aG3j0H3}EJW78<o=uR@w?pgvGALyWO8<ADE?f^XF)c2Le}z)}8py;!kjOt4 zzbXC=<l@^PCl5i6Ujh01y7(~E*vEkPYoIkg3fx{PZUdg45q}1y@+BB&-2g51BjQ=8 zOMeBty$j0epTy_H??DZl5PvOR3+;Rx%#%)m<a`54eh|uYHMD=nuL16FfZ5R#|IXai zKu1+%>0AAmPIo8iPRLJ(5IPV92h>gz5ka8yCjk{(2pABg2?1e;h29V~sN+PAj><SQ z(Nzb3&Yldqh#qz0&p7_<t}SLgoOO0>M^MkKjyafd6?bP_m*X<(tozl^>sRk3of&7= zJ=>h3URB+?b?blL@7}7ee(wcQ`CjOHC2+VJ$X<rnaxT6%jnXlA>uzA~b@<t4dIh#v z0{nalM7;%jTuYzPC-fEU{x87i1@NN=pm7*+=^R+;9U$aVdK@drUaSl;M2jQz1H`Uk zpkh9yV6%7WA>jWYR)hnzmYxJkKc(NowlC9tK*bthyN!SL0S%>8Pwg}S-?@fP0xkaq zZ~cNkrdQ$5et5?m>O@5P4t-7^(QDXEPsW<F14wub-)w&f>wonX$3Pe;h(U9&z`E~2 zGrs}dHt6dDV51w-6ho&!!00zXzL#LXQ;^pSZ2SdmyAL)y3s$Lz)#`wNzXac3!g8gU zTO087Q&@lZJHW+E$p0J=bT6dtgH}hO#e=}oi;%Pnws;qa`W-B~A6R+{c)T4Jy#>-{ zfUAE7?(T*r{|-9+1#r0@Gnp?UbS-T44Dj$Wv~WE%`)%NN7VP#pEc-mP@{d5(eL$iQ z_S^%_tpGlM4ejlQo*se?3ZU&Yw00Y?zZvMc0yuyE6|m9(jQlrH{yr>q5Ab{%5b`u| z6avcb0P3d0Uv33*&Vkim2O94Jc3*?n48U)G412u;ByePZ3R}Ga1WW>&HUL{U0@vrl zvP*%tCfIf=ysHKF_!$uMAh0<MJT3!5zY8DR1q|(gk1PcGPKT#){Cxqh`yM>u1z>kE z{PKTQpkpH}d_S-|2(<WtfeP6F8u;rRAn{_L>=<nS0sQDO_;oM*=p;P(5WKMyzQcDX zQ((6l;{MeJ*za6utqGP}CiWw%!G8nhu|@p4%kPli18d#@?cNGR+>UwQ1Ic~@Ej<kW zPY66&*9LpMwtlK@<yu>Lnyu^shtn+OD)E2LQL|i4XIjcNmb+{{7-62J%-?RMm#5L< zG5ne><){|Lc{xVQZTweQ%JXTZrM!UF*v4CDleb;GhgIj_W#hk9qn`&`{+VSy9kf%U z=i~L{%5uD`#_+$!#{c?Udn3wxFQd<A2T*A6I}iL*hy&K~erOx-jxqf2CTYJIBFTSN z_}{&j`P>L^(dTmuyhX}0599B|cn59cJ)-8MPI$;TC!yT2Q0@#$JK8ahO3X7VRc)MZ z8OK`2iB;}I#W>Q*jcHVq?I?%oQsoY)EK=nTgiMighdkz)j!km1O3re}OzOBtlP-7e zW}YV*eaP&ZJHXN|&FLylSP%JfV~~GwOl2~)9AD**qjCpdmZqGR^s}nm+1MDpQEsrD z8FIrhQ@Gssex?zdy3HMl>C>}~pR)kd#naD$+r$a#7WLOO<lm#??bfqn{wvpbl=8#r zBbJk8`T6G0kL@SM_B+w!XS?yckoX-wlG?RfJe5qUocncQyY0?!^Bt$wH(-AnpJ1z7 zoFm3dt@r8W%lEfP`qUpt|4ru+CC{Kuo=lUhAE;30sFgC0N7Q|hs@!knbuvGs`UPjn z@_=f`hDhWisyrB$d0OSsYE`!7M!$?IM{Cr1ugbCb%kfkmQF&D5{YsvQk|!Fm{{6rI zKfiC7_xkY9PI0f%Zh=1Y*A0L9>pZ92l6$h_LgA0O`7Btk{!Uwj|1`LJ{g^-awyO8a z?(MrG4bd~B>({gxckgZAxp~Kx-CKB3K3;dGl!V_uw5?~?)e9oqdLoM=(Y_gd;*Pv% zG}^$EF>XUcL$pENLljl{)mZeGwKj<dx0ki85D%~>F6<CLa`mp14|sofU9eQt_qKJ4 z-$bwJkok6%_b$6g(5Kqhil6qDwYQ4R$c4MQw<K09rC79KZnUxCY(oy?e$LJ|Y4@QP zY43%PJiFvakDOQn1jm62<ir!dUW9~PZjy}qKyT}?-UoUo$`Mu8@ng{6zs98JR}Zeq zPtVV6=WlR}Gux3%-Qs^NH`@92_`mae=x437%KzosuSXwUXQ%JqIG+3;u9xz6ZkU+= zha0W@vl}O-?@n6jcO<R%;p+5Uj=xP>_49L-;}h^-zs1VGdrN-)yzJU)r4OK-(C8DR zPD@<jcZ+TntL7HV6A1s?_oJl5T`2r+$?d9_5li^hRb+o#=-7Yzb5gb^pY3=0%gAGY z)9xAKxgh?2-F*EPOwe|Q;FwZZ@?E#)^UquGJvS=;$>*H6%#KE*Ir;Mdn?Pj0KQ}S< zZNPI${vFd<>Mq>PWISOZWjAXVkn!GWPJcF;fB$r>J!6_hzn(k|if^OJ&GC6@p5=Yk z#(0}-&+8cVTl3cI@|pF2S6Jv%;z_sh-~FtAzTW(1iB<3l@x0=0o35=bR(<Pw-m3m` zphT+u^G*IeEPY(-`;2ve>Cx6@*~(FCt(98g^_#>~SG&aXT>PEy@~%7G&e9I@8Le;r zdD@BN#a1PU{ydHG1k)8_Y~H6qL)bSjpMA$Po;2pW^fy|bYaWY#?y>fimXS|7bKA(j z-r4|MHmG>iK-2O4W(74N8E;-_n10EMrWJoYKmO#@`HEY^^kplI6PZ7SU#rHi^-tut z$~ND6jKFuc8`ZO23Gx5`Ek65%1XheTOkXAJuyR%Fs>L%_XD(iQZ~XBE?JIBkcjveG zdfd8Tee;g)rk*W-o7P{lvIU#Qw!U8e0<&E^*LPjHeFwiCvupcK)wW_&@Aj+st?Ba` z&rEfTBP)GPr+zn`I?qj+^TxZALVm<|kws>EWRZ=w-z@WeD$nCcr))g+aR>KfkJaX; zb~`T{UGz>j?FUV296IB}_ew)r`w?7^w2r0cybRvDocnEmy!-OdRV^N020ngNYs=;t zU!NBrgY#=2ho?nPeEy(G<r$lQ_}*<uYtP_1p9}_1{aG=d$C36g&Tp?H=o4Au=FbRD zD98LIW_#z7iRCzwM~=vn{BoQ^pF?QxUotTs(pvl5{5n3C{!|`2AF}a|-ZehHXN|+t zkT<Tk#q-a9hx6uq665gF>5`xu1WjL_G5Lqj`&q3$6CZ!xoY#2s9-KhV{pb^Ea`R^s z^Nug<-=x_e*ZFjB@Eq6vO=IN<s_P>^h74%$ZyH};UK`z^JalBE%Zx*3(DIgGv)LZU z^(mwzaGgPZs5!q*j4_ORqb%_;k8GT_U*q|QjuqK|FWZ8)aoSs~ecBbB*G8AN(Vc?a z&T-`4)|?+FTn0W~q$R(coIa_wr);#wJnZAz=b?|w=fvgT|9i%LTWkL?k6!HK+Vx_I z<LEOVwh88maRz-tYfsu}`|^xCzcv53gZH>;2<^8_FfRA4BU*d3ZTwg~m}h*xKIfZH zL~FBu^W?IP7hi@Zm`@gc`oXg^&zJ`Ney#nGjh6EmZyx;<@XR+(sE|?NUfBLJ`QyUt z?-Q*X#YL0!WaeVz!fq-Yb5Mj`;Yxm=(X8pHuV7SxdggJEr^k^91sxP*WjQ{L|4H=G zNnju@`GiUtm1^T0`Hbj;&-m$`8i%(x6BXKj=o(G|ufK&(LC5p(84jAvPA4u$6a*~j zq+nMd<xgUanY^u%2AG2~Juab}5%fzHGI9M#p|r$KpDf?tljQ||S-!|G%YPq`<u?Md z+!T~$!;U-;&va5bJ50qX60-0cPFW?RO2{7K`Ehd&4}=-j*D^{PIxS;V#_6gURcUiI zeSa#WP=uMf=j{hTSH!5O*`)JgcU*}SG3a>vVMTYqqzlFvorr1txUKGhtqL4ez(P5? zJ(oWO0viNu(tUfEUIYS9e=DS{uAi0AkIg3>YZ(Q3YF2as2L+%%HksqC+#)BZ|791W zj?KX5QZ=rP-=uCvzeb80{B&GRagd*_5<2L|q{DL@RL$x{Im_GUI;oD;_$C2&iEA7} zFIQd5XwP+w5{lpED;f1%&nTtJzepJUB0;@h-%X6J{T`!1MR)Uee;GOVF-oiQr~L|p zz+NZ>Y-+Z?^hb<JZih_99Fz`(E;Ji#yNgld-Oyc&dDpy%DW#<JH(8F+rSQ^h+Pn5K zMrR;JRo`Y@-;9)K8LL-LfAnt{)eV{S^KiXyNTcWDYJN2J2}b84rCJQXbWs^=ARbM0 zU*dZM&r^)1APp$me_L_=A<~d4zw#txc^X(#<uGDVIh!HuhVY@v7m0GhVZ^bSqRd@h z#Dp$2Ck;#Qy~^k}NYtuiR6ZwkxL3u$<1+p+;n!1S+W|#m(84Cn=OSODhkP+limCa9 zRD3tad-((S*uO$1HD0L5MMaR?lX52w8uk&RxhG5-;Wsh(e+@9=#dtja9(rEJ-#BOn zPRRKA{0WKl_f+{4RStYC%e5cNa*HajQsv83Ia~vokIQ(QG%$xa6t3m|_)}3o;2t}t zufAkd`#a6fq+%v$3OV*Pye@Y-s1GR#xp~f%J;G<XXbO9dDpKW15ue;V4loLIsd&is zJjp?mum;Mte{!iqtd*r><@p(Ke`}2c`w1lv_pJkJjnv}hUq>7iuX9kkRg1d^l#gk2 zv+Eu7t9p~p&gYra9CYzavt45Ei2^QPYLSvpi%(T84(e*t<P*5MPwLG`<s8q`$H;PB z65!rsj#bF@r?s!%?4W-@qBfVvnOZAZg@Y=fI~fxYe_N}0+(Ws>Nj0pL$`Q8;ZF+q7 zfP>ygih~!=?d`=6z#b3CcAhh}9<gE<6(gn=q&!LHcar}&zcO$%S>PxwVzH#><v3a6 zw2=F-(PxUF$&i)D5yQ4!%5V9a8Ik?Ck3>J0K9YodiL66h_h;od#ez>{S?VDqW8`ro zX4X+yf5R>B@i^x3O2COdpiAVdP<{jXP@A&3ShLD=^h-;ev>7RjcAoR{Lr9VHmEAah zE#5y@>ZCd4PN7Sl7uwd+eW=@3A=`OgsQk-le-U*bBBjBf=fW0yl@IS#7(8Ik=doHR z{RdK3$y0#qM<a-J#+qtdbE7kyltMDrT*0?lf9=Jzd7PN-q}g+vlrZRoKBuZYtbF5E zVZZq<<#SzXzuRp1&P$^Glw0ATS>;_S)=o3_HkE?z5E=Lm$v8hv;Yh7V46&dFwqe*O zhPza3I<Df&G=&`z>-iqLQtED+oEz66$5LN`Ti_*&c|{*}itFu<%5Sx|s4`RQD^vSP zf4;`KRR3qavVX80`{gGj{k|t;{})tQ$kA-b5t8yX8*`m4=GxBJGCmHEnP+m}9T2|D z+xlE;KXF*CcL!A7Z0!BclChncx(U}isgx}zzv9sjaD;>|%X2op_jM=Ta}>63*Y?9) zUm-46NX4o$iHQSR4D&hoS{P++2e});e+#&**ha#Btjb4Ky&kISc2iY{i>ex(RF$bn zvl0)L^g7AcE&J4gPa3kliPX8uO?8|X+Vnc+agqo9Jt<=iE)Z)l?;C6)x)|wM-k0R{ z3rG(dyoSAF>y8#$`ms_km3H{4w9!YUvEmWF8{oW>i0xY!<NG4-=XH>Gw8Byse?I7= zgN;)KPJLN##*=oXoJmK5>v@ptC+wqeV=>mV@@&~iC{vOyN(GYsM7Y{R{+@!gJLO6` z6OO3x6;97(>xCZI`f2T`hdPFfsI4PFzAjHjaOTetF7(nu>_JMpy;RasKqWDMDpbYw z>m%PvPl{tP9aC6b=Ay`(@;mOre>bJi+^NcZevxBDOOU#AdiPlCK+}Je|J`|_lO2i% zW9xOo9^J|wRj~KyTnZkIk$1R(;#dS8dWooJHFOmzz?$(bD##kMR_g+j&sQd1#M+0n zezh8>*I}t+emD7nBR_D!_i946Cy9!lBD$aVsr6FrNiUU;LYAW**xhYum!S#*ULO;r z_BD_<<e?DS0%&vF+L#~sh?)4{bB(rO$w#{XQkNbJ0v#OKpvqmUd}qChk3<CDKalGA znEbR6dZpojsQYu5R|^6u0j-yT3j!e_FW39KEOly+9S!sSN^?QN6P0m0G8fpCaV(K5 z*CA%@otMK40xu{3wk-2@{y76V=Xo}AKE{QrekXE19-nsx{u~CMXFH|8^6R-s4|bOs z3<4ZeV^X&CF)8c2s(f6PCuwnoZX&wzW};bZ)p#e}mO579qYC&-1^lG~cGm3}zZU+E z)V<ckfnFzl*NlB)ygjhR9%~=HPWAykkDIE`KqJvdNIy51hztTGFkh&LBxY91vYmEl zuJpwr*f6O2%vOE&R+u^*8bR1Vx@8^Yn-!#4C!I8X)J3&NftTD20yqUCI*9Zoml+KL z8v!quH4OqT91-<iW{eBj`C8rUqd>Qxyy)j@3|i<|nUl&6mzRGH0viDvmzxa&9sv}W zx(xy!0eY9(4FVh*7t(FKFW*<31O~9yl^pd-xjITLG%Vnvz#W$m4gw~B-!L`~1~*va zAT1vo2h%DJ8fWlEu76MDpWtb-?I!i`(8sErR`KwkRGd7f;^e5RFJ5lMNrzZt24>)U z7*cwJ87K5QwMGbA4PqU1qW<4Dm@!kYW98Uuz<<i&Kjqkumd8TEcSf-HeP}w?@ylgA z=GVhWjh7qiwr6bJaDk<lwGILg6rILLuT!!M+Wz~9K1Diox!SiLotM}S0wxF@){@KM zBO8sE1`h%sE3ls)?kJ)Mu}_|Myf#}iQk|(v^HU-@UJ{_W8tF#PH{zoR_H~ot!(~VL zmrxG^76BNyXAc6B34g3>&Z&o^kMPR>ZP)hj?G1AR#0-gVBY&^-$Kag^vkl_*(z}@c zcL&{3nnSL}QzPN_Bu`PMGnJF=R*#1owx`a-H-EYQt=A<bEMOmm{)tHwylBi*=mco9 zS;Q9x-q-$*=Bn<x^5v;_>Kwch9^hUx8}yb&al<P_1g@d@XMfy>{0r`Xxqi8Rxf)*s zSAX2^={`cdGs*OR;gR~?6&tq28@0`!+Wo)k|Hp>^W6i%@^3w7}n`5IsTH6O-vk!LZ z{kIi?=L=|I(0m|`Kxl7&ng^gW0O%|L+Vekxc@wi4-)pYB*OvVfTXDEXQGbp?Gz-~x zW&2;TIf>25Y=5?}pG>yTV&-u86FF`>+tV3CCJ4=GcZ9e_{TT-2-p6S!XD;CT3;F&c z4(Bll?f9^g&8s*)YdOC4Y`>k;cZlyF<@>Qs>(5%CeEA3GzxS+s?`!4ZYjCdT&*L&) z^OE;X*S!9%$^OYM>(m09Qdm@6a_=<zbcfS5!|m~w&VQU$Hd}7KDw2jLr=*S;IVx@R z-RWb-W?05$W@V3`kdr$x@A~2XoUZ@xb)doZGp`c9CHy@R5~gm4uof?b`~|ZYbmjY1 zA4{%UCt3cy{|BOZo=@clxPN`k@inGvgkSy-Ni*~1f6{#ta~s^hyZY?v_Tt>?^Q-T< zcKGvFsec+B|2^*b<l`nW<@mkF8}BDoe)!mF|93(Rm?wQEH@II>E&J)E%q7f4OdoSD zvyACt7Blmi7N(h*!0gSunQ3BnWX3XMm_}wKGlCh$6wDuXOI~8uGX2aW%!9iF!{5v1 zoy?b*8<>^M3Z{=)#`H3anHHv*c~e;6m~If;$A2?>Gfm7`rjZ$;J=ZSD^UPz+YUT#! z3Z{=)#&j`@nfc6IriD3*X=V;$#xr{}O-v*6(rcVP=CRiT!{5*59n1~P3Z{=)%(O65 zm_wPpnL>+ir{w?ExOvON4dx~OkKMmfUQ|30+`sD#=j-QO9_P7!aeTgt23!&tj;mFO zYJdLC8)4T?-_PYT+~5jnaE0=v`L8LL`-1*d)XK+ww!Xgi7xiV`pG7NQA9K*ApN8}K zTEyWF-Sj`Bb_JU+oNBdAQM8|d%pR}JY!;Tw+#g*IbgzA11PjOREGj9Oq8`J^p#+c5 zt~iRk#eoikxpS6!r#K6zxUG&NMRTWpTYm;~KSe!6T}#500;^Xka=K^NrR7@wuH!s- zJZVlk0N6VHIuQl+Cx1x@?u#8a{7g%Bx@Nmeii*9a-UYXq1`HlNu;0M=_yp6`*(OW> z(fv&pyS21ParZUZO9~W+N3qeJloH3Z(&@9TZl$j&-D~S_N=i>RWu}cBm7QhEOn=Qv z&76>$!iQc|w2<{9pPAbtu)ajJljhpCk~Pd~W+ih8vzTdN4q}>^5lnv@$^FbN%t~ej z)5ml%^O+W=nHkTFWnPNmc$hn40>j;)nVCLjF*BDriaCgBY7mZSU_RfP^NG2Ixq|6y z9q7K#b?Vu;OtnH=y-v5fiz5C0d4Ik7m6q(B?s7U5hj+Nuqez#*+{xeV>fKy3ymYj@ zQfrai!_lU=bzXwHryt}}kboPwYuMM&wT0_h1+$Eq%lxtT!v=D_7{KK;;HL@qM)$AP z-&*M>N8R%WbC;atwb%VTZ%)cihua|T#`E6nSzh!g6kO>FAv`PC0gZ!yxPN+;=DldX zh+?}MD(9!l(U;O39DRtHAoF$MipmgkoxVT3UjII#PB%XnS*KgxXjP}*{7tl``<`6U zR?|&8cg0CPZ1;f<k0g-3>dS+NI_x<-)@-U>`Le6ehCjaf`x0}_q$@qnwSOcd?!rRz zj3<vSPi`6h@GYBHn!np!nSb(SdGw>@3tlnr9{NGmyI0e?l<hfecJA{p{j2Z5$XB1( zkhJsuY2$khe)wCLf9~*|rye=|-S017nD@fC<W--|{Pf_(TW(ua-ZQ1QvE2)oHW@#C zbMN;l7uFy7`r8YijGnXn-Bjh^Umj~&wW%`h(={VnDD5Ik%NLi<Jby51Oz!Zr>z^1r z<X1bkewj69{kciQ-kdb#p_Py4U7b`_yUJ9Zy>989*7vSFl=slF9+MvU?nKcG%P)Q1 zYxnB?lTP^@=?9*D%Jg7JX8ztDrS$0U9DL`Xye=os7}o6Q8W;V!l$d85@^Qw)PdTC& z{#W7~hx;mVXL8$Ze}C^k6Kh&^Uo^7A$c=BV|0>a3wXMXyIsCOd7hg!ceb~<7bIyIR zZ1;zsC+@j&<&bqz)U1R5aW?U`^m{%Tvv=3B<)0l$e0*=#kkXWQVs<^VIq`JStIGzb z{;~6m?=DNcx%<8|J6|0#!1~afMC<s8ug`liYi{(Prz9Tz>VLL}o9uf0{x+9W5^qji z_t(Medi`zwhFcTw+qmlNPTSlOHK)e^y5P4>4tCF;wead=<-;EP{;s$=1wE1nRBs&G z^?~;WEg1RK4sqq^kdsStBRafz{?o-(p+oj9N*&&G+ta0Yp6Gwq?K3*Q-~GhEuhJ^= z23P%VS9Q+ub$<)0R=+&(O!3yJ^_kD7Ox$kl+av94zdI5#vNj!>*5lEMVQZ^T@44^t z`F)*Ne!e6x=dq!?EepHFj=fu%dS&6Go0}}VFY0W+)6XAze}CAis$)OP8O|Sj(Ja`X zAUno~i)zplCG`sM0K|WHxbTCC(Q?hU87ySo1wP4oC4ab&bvktUS%@tg_FzJc4ATtm zgUp=}uKpiE_cqc!{ck}5>-zQ2#HMXAHh?`b5>f`8)}U5EV)DXO?rtm7N$XiN+o5ls z2z&6Ob}~#q_-q`$aiCX&{n~T9y0vJ;KR}A16JLbnLazb)bQEF{ooAq1+f6Kjj6yiX zFCp<1W`8Gq>za@rB|Kmaxqgi~(bQFlZ|KYk&<!~Woj4nE5V{Y%qZ`612v^r^oq*I# z2@hCvr(cstY;rTgg-&b^F+wMHrgierX&wFZkR=FTzb=qC9dZmhaWP~+bp1L*;>VDU z(20>fF(!dd>l~F{NZW5vcHsMvjZ|kqLvOA#;D5#5vfPcgAnlM9<KP~A9pXoM)qvr* zO7}+aZq{i{*SCG4(|HlPH4pkV5ybtF=b#hAF*aQaop?WFF7yhp*+9gLbn4ff5|<>P zoS+kFJ#{X0{km%6WV`@(Kqq=28=(8ZLwDeLP|s^X_nmmBLHB`CccJX)3=;6~kd1U+ z$A1tZ@`j;YV6WekgLvAEIsl#6GzsxS*YEeC-w%Y?V>r?ZotOaeK_@PQxS&^p+lR|M ztO2_w%l$F*`!5ieLyA!@#AhM7(6@jevKv1*E(Q69=gkMdN|9~37Mz(XpUVfHOO<YF z!Tb@@4e{^@X|G=|Oq>Ae3!S(K(vk99w|}OQIC&I?5zvXWUa|tZe%&N-SQ_p@CniEH z(DnOL5ND4@T+oR=h>_YC7)=|@BVPU5XyVI|BhZNlA$y_MfK?fAgXhw(#U?JXAZ^fz z%OO7Km7rxj$_D8nhE9-uh!MO$N9IWdn3KzS3wkF?H$L!pd1#N+59`*V5~of^K7T?d zzLAgmgLX~)5aNffUuRC7R3Jn;bYdZ7D0KZgH=@@j#1B)$RhC1(fL;Nn+R@*_jeboV zv5y0J3!NC^#J3G}{kk*#x-_EGg}j1JTnSkVo%m<SGU)n!bBMMXs3*{g9!LUoAGp|q z{D=DraDW$OL+=zYw3PD}95YkuTYtcXvpAo@US+aQ#)Ds%NjLia7Kq~@i=Y$ff0Vt{ z#=&3z7Wt2S)9>j(+y=2gCw>7jQ~d{9%|jW%y%Fp?UzTG$xPHD&^A_;JeEH6*1uJ}b zN8lNW&T{GA1zuc;eg?XJ9}40DNDOr1&LtQQ|95+50@u{>_5H~Lg1AI+!GAsCh6;Gu z6cscGD2PhjD(*pyg0e&w#kvrvTC7%asl}}ZAtWe5wAyOj;*LAER<U)7J8IR~YNd61 ze{<)mv9<sHpZ9(K&*$^JpW^56J(<iscjnBQbLR$g2f7*D^C|tVGjy<GF>*9)TEKP7 z5W|QK9r)2_!u8$eIS7;?tA7#m&?(a)2kE@F`TjL!?R6M0=#;^bIrRFdBSgQR*|h!c zrR{e!ZNIx|``u2;Df!65&?&!%%!E$qT|h`Ybjq2KQP3%KA^o7+eh=05`>K>(_2@fv z$~egLXgi*BAwNO4{f;c<B?J5jo$@zGF?8GS<5DhwXrWU^79qz%SAT*7H^SC<%wN!{ z6uAJp?e~9ezavb!!i04Kbjrq?(PrqBogp&l3NUR8;#~Favw$dfLuNv!ocI;|L*oSW zq<`F}x!vZwmbTx^q)gj|ScFd5ZZF~<I%OY74d}MdEuw5^Mw_8i`at~YTr<CYHWKC1 zgE%jA9r#NbVgPo?QGY^~K&r4t(t%x$v1^3w_bF|^Z%O&$TZ|EorL_AFV+5Vj4{{MY z{r+U)S<Elgw|$NiW!>*FkDyc1=RlRyYp%`npeUmuyHHL!3sO9UJsYOQIm9R3mkV46 zNvGFwn`g|}K7)ob3X%hzQUlRKr(928LpOo@&a?F)eNIlT3xBXr*E3+;1-35IfXg6O z>L2i%3#>l<Zv3T-n1>kmcfN-YUb>824W051!~wb$EVZ!tZu=Y+%82V|D|E^PNElrw zgQXB_DC&c8H{e6)8gMD3UVpR)JOYu^_Jj5}v6jX<O$J6m!ceXPR|w@g@FBzkoqm6B z<}Idc!E1tU1%DgfW;W$u6l7E+?0_e4Gn?gL?MhZh2D%A42PQ-6^@dIGIz-V2HbMV8 znESA=0J(>VNz|cCf5^(U;B|;Q%B>)If^z7TIZxR7lk&SKtnU_Z=To!|b<E(ekeRf8 z6+-+s<T~goaMo|EZCWrvBq9YU*MNJ(BC-{_Od=vHAb&>cAMi9JmG%+b<RBtLCcyvT zZ;<r9u<s}$6Cg8bY=9$VB4VaC!Eft`h@AEpY+YYO+@LGL3P?QcSirUoM5G?<aNy&H zBI1rZ#6?8HAk<e%@Pwe3gOeIDT?6_zM?L5Yu(CO`X$2EoFkJ)ghQy+d8EhjL5e;+> zeBdS`bAJY)K6t;q2x~X!VA~ENl1uA=Wt@m?r{@LlL#W@Z;7f1xk+#hT<^DJ~Jr-=( zO+*~R=$ctX20`4QtH7_iv183(w?Gl$P_6(!hR~SL0b2)&h!W)-cqSO_45MpT5y=P< z5iN8rxDsOO2RmR|ZxKHqwO}cP&OsCC*@vBr1Aj9hG|si)OQD=T>@YHnl`Fyd5I&Yb zX}E}wB^mfi&`Dnraqi3P%fUGj@D<vV1GXOkKhQRVQ4l&`RG>l0{AmKW3`9BVn8Dk_ z(D!io3iOD=7%6cq*lIZZhH?(nj9@;Y{AMJ4h;sVO#1IubRteUN7V&dR4tkAaeo%lD zV}B46;dFf{B8MO+V80xED(GZ9Vhj?6Ix;od4oRo>L2i<WjH2@qtb}N3JHhD5>|7eK z1d@X~Ch(WZ%qJusF(1#yMFmdNz(+V%3r3}i$a3g8VBu`cHRvX=%O@go5xN4@Kmri| zlvSTFJ7j@~bXvg9%YkDBoqoT2)dDtObbny(Limv8VKDSlW=9Doe#-i*0kc14?aTqU z3FT(6^I~RG0rpuUB2DSB;1^4n9UW+1BGd=JTf*#Ez+VKNEJZ9WWp<R{lBFyLbYK;P z=0?Rb5xKJh;|H5oFzs`+8*@_&uK1kU(Shq%A<xj<0!mi1`6~m5Lil_OUR%e;h<`q~ zU;reRwi(RS!;gLGx=2KtZ4{B`XtNxQ+sJa12F%<joC_RR%wk3Zt}PbI!4;b@?zHb< zVu?@(TvfvQr~{2Aj1lUXz$%k4r#7Rn5DRS&co{<IX9%GCRuQQ|?SPRxM5G^dCD`7K zzCh=|S_csu&}HDZBj`K*EC`G#6Mym;`1ly?BVUo@7?a~H-<E?fj?+1b@)II*^dz%W z4oXf5a~aGy#rmQHFAL=saOG*_d|D2Ea1P@QT?P7_7h(hKcL8~jwi(?2gNT&VH9weq zg|$r!-nJm8({j-Bs))ZY;J`#d*ML7>Wi~CK=o<663~Y9twM`BxuM2qzd?|2KM1G<+ z!6~<dm;q<qhA(K|1Lxg^P0SbitnS2nxGq4~fHxnCh^`-({we|%e~KqUY=iBdvN{}? zUB&bqu>NzFC*|Pw=Pb6(;IJ3)4?Qn9;w9Qo^8k3|m57X|Ho+&ag!w|mq&|etrC?78 zjUNR#R?t=8PgH38!H+~@evb3c1Qd&To0JX`F`r{)U?$`-^#f?I6Z7L@0$bUO`F3(( zCWMZA4(MEs>2h$Oe}kAbg{}g3K{)7Uu*gwN{Gpq`NGCB-Kv#l$Yl-=BF@s69#k@~+ zppT5%RDkOR-2^(<5%bq;IT#C}Ya0z1)evo?=LHYDi22wq2ir6f^YOre;f=-oH9`q) zY%JIWuT!0_i$MP-tiK9ynV{>yHBE62x+Vm_X(lG=v|r%<f99;s<>26!VxpyO0JB`h zL`VGtT3d^W5jtgbJ25HiPd^(JlePY0Qb}!szx5LHYatRWCR0Pjq>3I3ZiTp@FJ`a; zB8P4PuR>bW^#=F|;zs9kZ!y{2oAt{KZXF{g?(|r&ZnT*A4xraKF{w6A%;#hoIDZ_A zlN``DM$G41e+767GKBgNJThKPQt7o1JU&TGX3}!7{S-03=HbAkX-wCEmm%(ma|@U` z9mmo(fWaR!U(vl6YR+K3m4QENnN5-@CKo;uljXFJpx?(VJ{92C3z>a0==iCa&%-h> z=TjCBl+Tu8E>JtmFcvGA9Tj+GH9OV<wqL`J<v`OKe|9XT-+Fee0?b*@;(>C@dgdQ9 zcpsvpJ_noUi;0=m2XzoSuPN;cm@Wg=1uV8TU^awa`*OgedLd>&&2|>6lza9H=K}j5 zL~Nj33A!F)<s9gA5_1#fGVtq@>|AE>)M-|y9PCgb#!Wfe1`fF(CbCF+pM|;b1M1LR z1a|w8f0Zl2h8Gb((B<IQ7lrWx`(I|`s01^vvb>=Mhh2kz=-Lb%bDhPT3QVa)3`Np= z6Zq$jkP|@Hdtwqo&kL@-$I5l!)1O#5xi2Q6_gT3TtowlF89A5+q4`z|${wOW)VHAS zq2P0{sg>z+Fv!aMOrIs+_z~iVmV;%G<<QH)fAS}6tSLMGD(0^R99ZM2n7<Cnz-~{4 zxd5(!@b@fWKoyH01-PJ!)z1N^JV%b8eFwWqC8U7*ADjx|?*TyrgpQF3yal1xCi)zl zwsx!z2Y%ro;n$@)a7c9t?{gLS077HN3I^4bkYYM6pl2-!KSww)MkXN_=~#nCnQ$&} ze@h(+-%c~wy}pFhfPWNVN&^XThpq*Gf%Kzm+J+J`3qtSLwBRBa37<1_z=%ey4N5Sy zv4qbFN^np!3BT4-frlV;EXu*Xa-5g0_rU!vCHyt09DL#`;qwn^g?_hYb|}ATgMQKa z;0p-9#%_!LwPokkfJ@s;__?eDPeb@|e*w?AOUPMj2h0tUkjKz<;B5#UFDrOIOv10_ ztYC|9cB~wn+h4-x-W+gme^zb=E&Z7fDg7r(h?K?y=o~BI<6jOYL7LLGfrH~D{Pjo$ z%Cr*FntoOQF3>WYIiLmNi*m{%nXG;}cpXBo<5p0fB_ScyKKSW8j0?S=0&CBgfAH&7 z8K|4j#)z`<0yai+P``-v#RO(7hVSS&g2p8*mQ3J}5E}Cqu-Z~KUUE<c(a^qtj-SJC z^jzRTh?e#XEP&AKsR{hybJk`H7{5wFvgxtlmun^beT^BM`UM+1Eht?t;qQNC;Qj*i zf%YA2s%P;a2gmAJtg65jdNwa~f8aSin=clyO3%iHJ{ziYA*-VR6AOhn0Skq46L_mo zm}_8LgD}^?F$Pv&1+Eav=`)|U8<>6itfpUua{3?TCqQV9(tu|K-2!?PG5Z`CSHzCh zfW?Ad4%%;EbyVON8(944z{VRTEZ2d9H?lERfx9;{KUl!F#Z0Gr8Z3pFf9SE`tzy<T zE9kI^ol6Fu-NfR}0^TeU;vei$D)<VVS<32b!JkW+ePV(?O{|>?Fv`U0sK7OXZUQYP z!9LhvGpjEL{Wr5ZN-##y={^d_AXYlo;B%pzY{9v<2<HOFZxQN)^94NzEE04RcvR5K z!8?L(1qXb|#zF~(ZI$r%fBQ;s?pDDLxI@s*pjFT*XM80gZnO^A_-mG<<e>l8td0UK z`I^}`f!{+o+IO(mb{4lvFm1bVF7U*5R=*sy+ackvUox=c4pxT)KiR>2o&#<Z%FUqn zH!LO<;K*+T|AWWB5p06@gmNp$?Ub<ldhp0jmIul~=`L1Z27UqYf2a4P;G<nE-ekKa zM6yT1*8JeZeG;Oi<Fa2uhVB>63oa7$9B`|ko54GRZUws?V%MM?u>25<G0GQ*gqS>x zYswLpf3#r!5!PlC`1=tSOQcLfh98sg>kSpCJ`VrTcmVevXEx2?#p6Ow278=f$11=@ zCs>^4fM1<p^<^g|e`NM430Y3h3m!cswC6P1a+)2h0Zpfc7y}=jW^<5~OUTP|W=DPo zw!cR?wF8!ZFI?lmh;uB4m0-p>R;~pV=Ov_!`Vb7PV7eB(_5*xG{RVpf$m%P=Wj_kn zM{wt538|od25Vdq#t{s^BG?B9T9{1@*zYRZN#`B7{3?q{e;pWjO~S7~6=2FWc0J7j z<=4?>8i(L*$WOFApvMgsKT2@i4dMEG6YCZTe-8*AyD7{;@bE1OyUzme-V)*g997B6 zRp9bU)@B`OcZXf?WMCkKex9rVjX&X9N$rCRf5!EZUW>u=KeI8lfRA3_SbBf-66bj- z<Q%Y$NJ>Ibe=Y~FN~Qd@&kCM#kdjgK8V5dcl=AH-)ukk|I@6WlG6?^<J=ng6lwZSe z;EtM1H-p#eNcnZ06|{Gjk~#FA1^lv}l*J_2y}p#co+`k&`m9_7E^?6)9qkLawvm({ zFCEygF{`fxJ2YYC9QZNBMC*gUH(_>2Qz_{J;o}6%e-Lync&r&~e>wPDGogNSDY@=0 zCEKYVz;I94r{@B9`bfz|+AnalFSDZpe;0J(CnY(7Qt}gR1E}gDWq;!U2h%+&C))9Q zS<Zm?(!W7~g|wW04hhnICjAk^lvRRG_e*RN#Olz!8oLLva=OprNQedbhwg<qBS^3b z8ihJ^e^0~Xf=>4@yertDdlgpi#dNwKVFy8{dkIDeI^73waxZ3+?g6+=(CI#ZI|ZHY z@poO&=^lQygW0+0K7F3Sf=w_&D5rbqO%`;zkJ<u3r~Bb;6zbEx@Qw>Q-3RZfpwqqU z8icU=bkDf%f=>5_ixPCY-`dw9LfgO#A?#SXe+St!p$^?MEHG3!791+*bpNb$L8tp) z<q107`|7@+(|xX5^cLCx?iO^qAJsiUr+ZB~^$~mvb`*5Fr&L5A!4Kf|K7!vshcLl! zpqrr6eTbyt!nlJYAlrx8@q1~|JxmJd|2+eLhL}guzY9o7FGw+T6L<!~uPs4Q1k+`p zf0v*uz-U3&fO7>s2mDgd&ER=Kw}4Lto%EBEhW(f>2fGNm0vsmjDlk*fb3nbIo4_-I zZUII8g|>mM1)T$<1YHGY2)Y(rC+IqGub`X3D}rtTUkN%Hfbkk2v=i(p=n8PGpsT<P zLDz!o1YHO26?8LrMbItaD?ulbupcSde+PRCx&j<4=qfNn(6!(?LDzwM1>Fo@5p)aq zO3;ZC_LYKtu&1Caz_Eg^0y6|%3$7D%9k^G}&EWTfZULVNIvFS>^#=;}K|euPfI|gc z1*QqQ7W_=mb>KEZH-p~`x&?e9=wuM=4-)KyeuDnb&;S2F?0Fnw{`nJfLbUY%fAuSD zo~QZxefkWID3sIx^RM~S`)nV-?Dv#o89;P@Iv*=Hy{DXh|JDqx94)#iA>@Yez>s38 zJ(((c`?|HgJsDy1`t45((w{_=bP`7rz<Bg3g`|>XyiOz&@hYCEc`cR1;*}aTWAIx| z#`DsWc#sxSh15^#Esc<dfq~K<e^NOKkaE&)(jck7lxp3j{rGY}ywe35C+)-6^yf=_ z@xDJ^ML-Xd_JXw@IM!d<k~k0-93LrdjU&3E7Ka*jQO_60b>}TmTahU3A@$<lr^ol> z?NFOxu+sw;SbOOEElE=nf|k=h(jL-2$T33k=sWF~9HlAvol27MkNSdne<dD0twCDC zS{Iz1<IggX3?hwD;wud%!{D(b!DBJdlJQRsjh=;;Ge1s+P)pVEdI<bU&qv>lC)1(P z7SJ|ma8xuI#~&fbG4%Xte4A+<YPTCSj=1Bu7ysLv|LsG1kwAVV{NO`24qebz+TK9u z!Mta^dB0H~QQs)|vFj%7e+_R@kJFaX@$~0MhkDHqza!o=a*@)%YDEkQ<@-;)@K@f@ z@I8r!chx9W^EDIDOFAxc^qq}FBL9lnNrAtpmip$M>byS^`4LS04|sC~Y4x`rqtV*~ zk=2>60}JpKi$E&9`8e$XpZQCJ-b8E!ACZ5Y2Lb<0-p5j(g!555f06HT3cU3pul>=# z3A{hmg7>2Nap5qZ-+%Of$B1<xa`d4K`a~mCPW++MnX5o)=Qln3YoB`Y<^A|PBS)+U z<5i@z^Z%pO|Jo@1)s;aR6cC+~qD~kWKV6=l5TBS5=$e+C*exX{R-F)?;*k&+lbn>2 zG$GX^CMls?bV`Efe^f75c|vqz+yr&X>!+>;x_WtXu03j2m&*fElhac8=d=Es)_mA; zI5I^Yla?HpI$d~;l4SLiG@L~}UYQ&>H7;H~QJwPUP20Ca({U*M7F<8|RCT;Op8gJW zjZO(qoSHOQo$M-4iwlaOj|L5Noe&+LqIT^O(CIG@etYsxe}8@UfKKnUHK5a*PUCez zr`P`Mp$t+6g@l9;=o1wsDF4&1>9go((rbNwSiUkpDqoc!o3F`F&)4Q>=jY_-=Iio} z`KJ8s`R4qx{PO&Yd`o_1zBRuppA<M0$O>Ev<OOa8T!DXqq9Ck5SrApADu^x66r>ku z3$hDx3UUife+AnM%moz%mV(LxtG-H43LOe%h1$aG!kj{)k@C;*(&>yklTM)z(<}8+ zdX=6&&6_@tiYxLjB00G4qH7A+GQw6FY*iLi6*%Z!^lo~8922FF)u-#T^|^YZe!IR* zU!f;DDRKsmFIE(X6)TIQidDt2#hT*uVr_ADaZYh=f3dFESZpfZUW`g+DgVqb)?2#Z zkdhO$O|WKyJu@tp!=^=FsejvkmqK}=TOn8IU#KVyD^wOn6{-qj3pIu5LeFvwb%n-4 zQ{nbPb75Iwd0|DNrLeNlT3A&`3=RgF!NnjqxEVNuzd>OLGbjyF29+V!pfRKyw1#X$ zjv?2ee=`^jCc}1v*-&OEH&hrbhDw9gP-P%S2cyjBVw4-*jGWQms4#{ZmBuKe${1_Z z7}JefW41BJm}}J0jX11Qehp<=Z(UFFW%=@aE?<FBR$+v-=&ueVYsRQrFroybDaS}E zFp4USpcbR2!|0g{$}x7<0-~4c<$6x9z!<6Ye;U13pQG2oLuPo#0?!b5MGlWB;0+Z# zp@kQ8@PHY;x1i?)y_TcL3iMWmo@&uc9eQX+?=0vUL9gWKk%IPSgJwhe2JHs=bhjaB z|DV11uYCBfZ~o*HnH?W<><rl(ayH~{&}}eoAaXlGzYbz8sVX6*4yCeEmr{ADTPauS ze_yI74J%caMwO~cV@oxq>80Az?9!al+)`bsvD8$$z0_P<R$5+KQEDlzEVY(al@iX5 z-y@Fb9CR|Bi%za{({Va~okAC;Q|h90DqXBjqf6Imb=kTcU9L{2%U++ezN&y|?bsR_ zM<`Lt#b_!vZz|hVzNuo9WmDxQ>!zwrf272rL{{QbA}?_(;Y$2V6eVFL%95xORY`1# zrX;;YTasOpQ<7VvD>0UsO177nOUg>hODak%C6y&_`}Tj?uN*sm@7urYSEbG&&n+)3 zFE-DZXU;3jE6=OQv*cCgS@XzxhxM|27et~PV$na}HtW1U-~2J#aD0wQM{JfMe+zJk z#aum`ga4@+ScX|AM<k^qe#(sH#tNgwSZTBxtBj<`p-5KbQY0^OE26ndQ506BEQ%^p z6~z{5iqea;McG9;MY%<~qOu}u(O+F(|M~gn=bxW{e*XFS=jVU^hiimiVlm;e8nw1} z>@Y8E-qV_*YGPehqxvYSBNmCgf1Ef+d%KRcB;v+)gp0MW-qBtp6=ii1i=?^{TomVH zQ&O92BN1Wwvc9>tDGA{JMdB7Z1-Hxb!tHer`j2aAV^dnMmHQ{2L)Uw5X+3G~imV>T z&t5$>aJw$6UNbIB@&GbSClQOpV%h9v_nyr>JYe|Uh*i_h+CT5k)qK-pe~}&9mbrj$ zt7NFu-dQ{%$g4i*OkX%S*BC}`(~=YA!O<GES3RySEw1M56q1%aE;<pnZt-fb+OUSw z>dy8<Vxy;}s=b<VO=y9Wb3Ild4^}6q#!ZNe;rH6`YQZ(5Z%dpT2yfGEK2lPn6X+%m z^57t@dBd7s-d^6`UL5~3f1+VcZ_dlxhx7LF>+08a1UJT}u|o&HK3#R^dV{Cq?m1N* zBM(kW)+8mf({Y?9J6*dsZ_^XX2fse!V0H4;INZYG)N&7bA8#&8<ZA06ksXm_iE3k@ zMb*VwA`#hK{AKu%h|inWtzOY)`V!Y+9g;3?Z+kE}W%B;Lp2`u=f9ma@x+qxGCU|S! zwa~|vU(Yy@dcyVm*5yR}wEz9RTfYuzJ^AF=(C%kKP6gLZX_&PjZfnQmE1MT5H)-2{ zN{h{2m!1ub77s4m@Fd*bE<IG=Y5u9(D{sGCcx_nEz{5)~_N|)Xb7Ok-XV$drpf#@! zNd~Uma6W$Bvbc}cf9*e-yI)oBVA;{`^?opCT3ggiy}Z<Q<FTjDQfIci^|Wu348wsh zJW4*fTX<_jy9TqOpXN@fv+J5NFXHCt-*473xUbuwmVZ~VqOxqJen42rt47yCsx5Uo zA3H}odQ$rM(37g(vxn?+o_T2cqoez#h!Lrx{LJ6E%%}WNe>STnZ6K{TcGZ)_Q72BM zt~z^Z*2A7Z{?t$Fd5QD3cR+~S*;NyXq;0v@oa^h?oM>Ky*wj=_w@#gsVp24oseCAS z#v~>1G1kmkBzh%v;Oqghh;Th=SqrH@*O~LxdF!}&p2EQ~$?-PFc484_8&JVPo~Xme zbF((m8eH|)e=U$WaJ6V*ZF(jt=7~M$Mqk&Fw&YqAAgH_=aSd7I$f!X+UOc=xUw;p; zKg=IVW+st1u3kL-Va9N7!^7BZzh8H3wlgxzesq_yg@e{L`1EemrH&zqPZI7$&EzV7 zi~F=yic{UBK1C&6>r{2vyxP?Gz@mG@SCCDoYV_Yyf9_T2Fsj3c&#!&hY*;^|+U3r4 z#ke*r5|13|GU=n14vT{BUb-->XR~SHA9rYAKc>)sl55@kfsH<z{S}ub&Bu&iAk6q$ zryu*5z1-`UD6N>3+oZAbk2C&1J%`vF=DhshnZw>)U(exj|E2T$B9Qp=cl^8a500Cd zs7|JBfAIa=dAvTxscXpgovjQZ;X7-+%CkmSAH2+z`{O3}+I<ftzM2;>cxdhVr=&eQ zz9?F;;=-Qj=}se$_M12LrX@JS^|J^2I|lDtR}s5)ks|WJT>l+)4z>Due3Z4mchZ1i zc_rBe;`1GvpNzPADdziz^Swu!#;hD+T<fN+f7S58iXWr9hYoCZy6y)~OZz<ESn}(H zz&^#A<l9Sck3A{daqy$@%Ny-(qrF=Bt*gHL8}WyE)0T}?A9&C(byv{54i_EzEnK>A ziN_byLR!S0Gp0`avDQfM1s^Q%*?l3VEPQRZLx=AAIDPvlzschTdoFxAY(e+SQp1O? ze_L9YcplLl+B4vzwhqsnb{9pibhs*WOWtsj&EqW5FnDAzSL4mJ6LW-Xz|R-@>R(Km zYFaMEW`a-T)LaLf3Eo_oqp2w#{2ZT_;+Y~0A3xE%ys0am*YR!L=(y-VRz-1&M@+QG zL~qX+but&gvVkAx!+GgC={#(YrU~I+e;kce@bAuYZ=2-S`*2)-t-ke|f8XziK`{+` zj_JIs<}I!TeY=&^g=?UFfA;%BmY^}0-hJzm4y2!T@i?wadj6bt)skGcTyAqwcXqjC z!@L1))~!-VnqE3}efsg1vGzZF<-Ijw?_>A2F+MlK$0yXhbzowxr*;K?@iXT)e>i++ z%atv6F3As1seSUZ)Qew@y1ctfi{SKI>Dx}aN#*$)9z`6?Zoj0K_Dr4UmqtxZj2u%d zw0BTqP19ZfRhzs0;5bG0yy^6<+8M=hk6*0$sz!s3k1|F&2Cg1?t-&$p%mm`;U(?ur zvHR66k4F@VO6#w2?-btTN7tPPe_p09A9!Hi=B(_|*1)X;^QQZB^qjHdqTJDW%DqXA zMxL(JbHm){hxgoZI^*cx9<H%5gIDd2OD#UsEFfd4<-o3{71A^=%PtwIYJ`xc+?($| z)4prWzV@H_#rN60Yt5e)CR^Xl6AiigEKk(>K%E>%C%d~mJTb=e^`gSbf4RZyH{?U; zC&%&u>eOjT$&<ahb6r^lZ@R@_iacq8JS{~nk4}}-*hxX~Oq({%b1Du_!NGjkBx|DS zvmcSgJUMq3BW>PT=XYX~`yfq?SMynirXl1w?)3`Bhx7I7{3iQB_4D?9o&7Sm*>r2r zP_G7DJ+|Je**_^ICTW^{e~@}2&3nSqs+zMsEBA8d>hS%qSKTWZr%upBCr<b3!A}Tu z%`YTwVq9u;ygWSQP5V6L{a^oOKt341=(8#1!tQ`Lg?y^_Yoku@7!?X7wuOJ2QTIvj z%)FpH_q%-juCT2?tgM>kzuEKi%fF16+iq6*^;Nz4K29A_bz2nqf4C~Sf1p<5?J@HH zM~y%JWqXkK{#WNlZMKW}Y;dpe@~g|WuYU3VJaklf><HyH$4gh%Un}pqr=|Oqn4AG; zYS>K_E%Wucb;vi>G;5X9#gFzh2{>`bsqW$CcXx)lrUzJzlYfhK{`gmyM_H}h#x_2h z(n$Gi#>wu_=F7+Ke@kmW=d0SCzK(VLa=TdVc-(W@&Gs#Zmt1`|_ROX>$C8(*rgR#& z_q2F=ro))>tzI=AYSLZ=^>vt~+}-e|Nj5L0PthKg*J{g_mF4RDqdQHl@a%BTvAgs1 zrgjORh4;@{`qdqy{q@%wbp|{#jUV7<&U`xkW7<@(4AzzFf5Q3cd~{y(I=x=cq{R4m z&@kc?**oDFJUE!W#b>b)YC$dy<Y-_!spf@==2eA?sx_2w9gyLK#3~jwX!@_h`+dtI z2{*+ir>nUbuC+~0cd=cx*_z|J+hp@U_l73*zv>M#x@{^wy|U=;jJA&>jxJh!-fGwO z;q`9~YY~i&f2@za&?xv&D#In}?d?+&wpJwY@cXjv-Kit5S2}-ry(@R~dC_5~@5Xh! zpgZEFJ+kph^C!KguYI+tecVv<qWc%0FRgvM34*^<|AdeUiUp1zt$XIH8~JMM@In5y z(w^Q4zL<URJL~LEHV$7`a%}Or-#TrR);-o&;nH!&e@R_VEB6W8Mi%B~4agWU!Y%Fb z)peuubQ>O)RNUyiSGLEq)t1XoFFQF^dak~lN8I-YhN%sE1|}A@54k?4*^A#gXs?Vp zFfG~Ry8w?S9R_){pL*<0J7a0&fzeZa$0p9`Za+}(|LnSn>vGrW`K^&N`kGF)$XLy( z-6njif1jy(diHqPFIP7`IdU$fkN?D@>9t0DZyFJlc4PG%ZN}(O#l@sYZM0mLeRX8r zpM|VDh}_)J=7Z;r=iOg%^lXIBkw0bKWB*-Qw;SirDtOU{=z4QpXZgD(ke_-dCCj7J zQe%^n<33c6=d*HBV*GTkP%fAy-GDzOU1i$1fB3i<xiUE}Av$^byZ4v!AZ9CdI$Z_& z@wu4eygA#IC|-7XlZ*d%USj?(6+dYeF-Cv>lbzmo&JKI}@Wzq0vo|%$eQ8`fYx%F8 zC(F*KWpWwP*o@;H)0&@b=CJTe+;T&g{53PQmX%i@bm>3#RQGxh=AA8n(#~&J8z+Cm zf5Mox4f7rJ8%@tnP8yfh@B5ZNG`aBT`kd~cbcmcgGDj47)G$?+(M~dRPs!|A`!4-v zx2s9mnz-BMf`EV^(&NgCn}=>JpK@-f=m=@sR}ru+uWeBcLxOfuPMaC0_x5ahuhWX( zZ+<-O@U{=OeAs;mH@L}_alWsbpLslDf0^6doBbLNm_71E!LpSZS57`GNPGCO{;z#* zS2aqm@bqn5xYf{a_U@gLH3Ek{;?5OzUUW`7^?V~w{mI$B9`j$P;+OEq@9({*)UXU1 z$6?+2ZU+6}-^`#fnv}N-Ua^>K-uPc<+dtlKCcH_sHKftp*u2rYk=$@@7&o+me<K2W zqPo+>xCtEAsa!STBOhtK#W%leJg@lEMUxMl)=oMb=Hfo1ktf%tK`SBQ#wSfodiT6j zQ}{A!$(LPpJh+ZrdtEzSn|ZBlZld2gND~w7<1x{XztH&FTn*f~w*ThUpc%Wc(1p$G z3yaw167!d9@YliLUl|eZ;qBpXf3pUE?{&fU!jbWv+OYr9Pdlxg<1fKoe;1efU=jA7 ztHB4Zw|ol@MjsE`A=>nTaeVCy3zr<+d7{S6O&{u9Gp_XU@9PnNCSywDnLlZYHd`Za z)UGl3_xfXArsjsXo}1aW>5_VVO#NaO?#%N&dpNYR=G?X^lJcU3;}b4Ue_47f)J|1@ z_`t5uqv}n5dA8vG^vMo2f|74{akY2c)9OyokX6m^M6W%uIcL=Kz;8b-?iHx+e0FP~ z!fo+t+38koPejO%=d>8Tu%GX-fQp-4&L!#PyM6Dqy--r~_Mufz^R~8J;*&J5GHPd= znW?p+UZypP>3Pa)=IX^we^z{PXz<iIBiC$N@_X_9W#5c0YdLs-*5H`Zx;2#_*J%<s zWYCIF+}8vyZS1hh&hyAJeb|!kyt1Tp4W1|#iMY(8|4S3#d+r_HelV)ja59_KK@Bgu z25a;t5*#I7HEchP<(k^Oa`LLh*}hw!YxVX(sTTq<J#@se=elRTfBL+rH!tLPjokiy zJwpGGi=|m2(o<XXZSCG4WZfHOd^C8}5!XpE7YB@S>f)cjc*MTvoigthb`2WnRV#dW z)48W6G|s>D)%+i3oc-#@^l``BxBS>8YU%Z{zL)gJw#D5apw8;tZ2E#eQTraoe^&KH z;o%!Ea%X%Sutv1of2!Gi{K<FS7oI;ke?cunk9Dp`7kIYL-n>4IbQ!a&{g;hLpATC; zZ}#eJyYBbQA3tt9^4L|!OP?uk*Ikq^88Iqhn#)kH<;Om$esR=J-=5kN=Tw0XdjD|% zX+W008HQJPXH03LUvz(DT++Q_QJK@rn2Uu|KKE)<HO#beQJ>-gp?|Y~&Ftv-;gILE z^9OEs(XQ{*w|L^dZfnW$$PW*$?$!O#aKrJci2QSt^0LHET$Z@nTkqL>Wr?bgj~~;> zOa4!P2KAl~!E7RAH0NR)4^D4C!WSVN-n?VyRU7LEKdvk1g=FII*LlRB!oe+bO`vb> zAG*!CCL4CIhQX+DzJF8jo^WtTYtf`#al1oD&n}xolxudILXV{#aNq0dce_EohAq>c zv<vqcx9;;Jr{-Bd|FxuS&)$7e(|WeN-Nt9^@&*$YeXqAF@7}oURoyDN>i1&GvsL{S zo2Sj+`t)dnyTL7Ht}MR&s8AH$w)*&CTbh0r@`d_(_rn8vXMgVUOszILx!JcTS9qTs zdT^BDZ2GuyUp&12pg;Fv-$xr08aU27=l0#=<pBeCcpg+nZ&45Kb*^~4$@BgLeRATJ zlbfGCIKCq_V01nC1jCTY)wx+ilGl&(=f*|lX`1fefBMX{RtxJydxibFDQit$=&43h zv1r=Fb1xM6$u3JCPwTq0QSZ<Ck3TRguyJO~h}pTL+pKo}KTt~p1QY-O00;mZi6KW` zLq>)@mQDg2e>pB>Y;5fPePC3@)c_9f$4#=p!d+y6C=sK^7L8goScwZX3E2>Zh24Zr zPzl%;(`~dZhP?rmAb7L7H^WuhN{i29TdlUW)fU<+#7`1JlkidHs~Q9~+O$sGRHLM@ z=*qt5oVmN%O~Cf~y}$Rr7tP+UnKNh3oH-veXJ$ONe{3>YO(v5BfAP4<)M66<icJ6c zUljhvUG(BO({rQ#dU1<+!Cx<49Qf|4+?Dk|_)h&dznA;%Z+`##KM3Z2>-OAw<@>qc z{eEugqRQOw{b0rISC1V#I?sS1efFnWMgM#J2Z_HM|Gwx4^XUHVAAA+Aw`Q*XfsL*u zKd7Q>f5Q(B({<GkZldeF9~9HI%(xcQwc@+q4j{a9;qG;tObg5zrddz^!=HH9W3pU4 z#yr|&s<7fmk?s)uIN)z3QVH(x-eNLkn8f$Q74MLUzs<^k&qZd+<PcfJRa_1%l1v-0 z-t#1r7hgUunbv2eAofeiH2r+IZj(&gzG5=1f3LTia=xSuT4zY<Z3TF4GM^(c{JT1M z`<ftJf9SIcgs`qsdYW95>9(uuS9~-0O_RyjW7Pe9xK>%y(m}aJSBqpOegpj627t2R zI#U{+uJ!8rRrTM7d#Wqc*<^#OcSO3PtLtyS^9PX7QZ8s<x(TjJMx-k_cMbpl|Nbxk ze_D`NcG*q)jemaD@2je2QT9nFu4FT}P4`-AnN4lA)Q0vb|IXiaFsiRHt8+}sg#~+9 z=Znx4OsC$LH?^HQI;P9VYyNC9sk<dDvyx3^icOck;jJ@OcDiF&7JrwS;j5js=Xczy zKSd&-mW`{`?9-Vi#@;MeJ1mPdPb_pOf0$W|MZCY9wJl@+sA=E7KNY{qDga$w5NF-2 zqqcBPa5P{yuU4IDQcliOUFX28{Z9fjE1NP5s~Z6;)(&{(cd+<>z-Jk2yEP4=PII`? z>gaPnXEG)5t74yYX5w4^HF$f{Z8HZ)Rq@I{Qu(Z7S<NoVlv*F=whsX$`m;}<f3%>h z&Z>K2{C9t~m{_K|MluDnS)7$ioz%UVS7J9wTDb(x@*$f9DLYH3oA4JPLy~F$4>2H| zoR>=uM5SxnSy9<PJpGkM`Yr!u`k;|M@FnRxi*1;!vsgmtoo2+TJslqKU%|<$7uGjP z4nFoxsC*P!3hNw-%S{{MS{XVie~0cz8n|t3Tq=@xbk$}0s^b&a-eq;L?$EK|f=YM_ z!c(X<IL8~G=vWCK20|x;*WicU_~fx!JJk2&hH<WeRpV}ycTCcQRTkw_*Fe2g&>9&f z@5nsWJ*D;14mQAQVwD1$``$oo=4v%DKqb@=kH>Fa4z)~W2xjxeCpJOJf9=Wo0Jqwa zdvfb$@Go8>(g0dxynH=WLCaiL(_YX@7wU`4Qn@{m-^Rv4GiRz@arn&4%u#2KAL`7+ z<}PSW%kjjDkOZ|>CI@z3A~{~bCq69}kJEc7ISsggUl$K}Z?-yCJb~c6YQM9p`iYir zNsfZQcy;&SiYJNN8f~5Pe?*hb6AdUjkG|U3nYEr?OOJ`Ky>QW#et}(`tpnPQXF|0L z_CWEjw&0Cgre-TRqyhhCYSTN*vQZ<{YE_c9$e}H=tLw6D+Cpc225XQaR<#3KqgKmg zoy;@1LK}-PZ(fcR2hP$w1G;Cxr+a$%U$&Y|ftI<FL-+Sobh>+}fBQZDZSyehOY~2E znQ5qJzVQ2Vv#UX$>>>L2&PJV2G-aSOlju+;=uk#<(APN)LaFy<+v@FXp5)~>it-Bf zbk3u?cg}NSit1Wzk;HSr{D90s0g4Dt{dRcu+lTN2`2pNqa46KO72D;_tu?!BL$zo* z07ax!Yj_PQzfE0Ze>VlMVMTUkV?GHPwl25I8$Z<48gvGp0!C^<Q-Qt4-##6W1Mb_* z%dnJd)5|j8sr?Q>sj3?213foNGRgf}JPvFOSq*vs%ex2l8%@j~W8=K6*ili{>9*sS z_yIOh5J$N_7QPROc7Qn#7<=m3g!@0A6~f(Z*X`f%)tS7Se|v!66#}{L9w5P9%O<hc zYc=O|6zQQohCJ_Mo+yB=WsX|ccx7rW2>OY&3>2QrXHjIeRZ`m|c&WSt5+P$stJ)oh zjyoH>W0{>fScOgZ*nL1I<{m79>ZnnRyfGi70&~aUIi^O<^2Q19yc|0&@~jO-7Li%^ z+bf{jHmI#Tf41ECXtamNuAVlp%`5=w+9`uK22J8nTVqu|FDr4z4=k%msBENnqur$3 z!8{HW6fKjeHx*y0uCtpAiU#Mgg?R?bl68;Iz#1C&YIWT-s7zk{B-Y@pg7-XjiW>OZ zRw_d65O4pP_V(J=Wbw)JZ)a{tt-9vQNy@FvR0U0Me>V!}H$}1O?I`t5f>@ddHe_Jt zG|3U@g&%&r-9jco2iO_<iab+_tpQAp=7v{obFdCR0p!WD)RM)&ZRT_i6!wgiX3szq zS0XpY5*mL8REIUj0Hv2U)dLbc04FsXS4O|I1s|V=$K|(*COJ!cI8<(`PLOs&c`&P> zbvb>Rf2CvgNEX~6Sk^hxcB;}>niKu)@=!c@nP3Lz*DDN$km3iRUB*=dL4fYxKS^|l z3M^YLYA*UaswTDP3$@icyaN)xPL!F&S8g-c>~f6M*Vtb2BSzP~wlzJ8kavMwlJc(d zEb^`(Uf5`tLl;3WENsk{n<l{xQ=G0-a?=>Nf0cKXU8zQGa?=|q_@a~K(7&NoSY|c+ ztBZT91ASjWH=nqYv~?xF{I~FN98|N;1XdY~LK^78DT$!hkE`bIKSO=I@3#mGNNbK* zK|VCwikkK)r}KB|&c9&OSMax<hVNah6Xk)&4)ktz6g3@!Bpvg^&bETqf|FWJcIeo; ze`%EeMU=qJIdhu#9{L;_x@i61&FkBz-xOYIi{H)5TuS!Zx2roOn~8t>8LA@+?sz1F zP15{!sOM5OY7LHqjvpLV_x-x>^_da5s_E)yR{7yi0J7^%d1IdmN%Fu(B1SUxs=B-S z4#TU$b+_F&s;<6nW#3;Y-NM^YPC~cTe;S=yV>al)GACeK<^=L*!=KX&?eFEmQAiC( zQ>)_A8X;}$iGU_K%7fYE%Efhoy6@@>WBdRhQ!T8KNJCw1-R=1DrIeT7M4`~=1ldAz zzZyk8tH}liJRe%C(#!wwh}rbQWJG+oU0WyBY74Kd<TwA08e*F{O(#)*ahmGxf2;#h zWK-K>+y^CH+j_P{!}X6H%yC|_6~WquG4wF~<`}Nu3R<g}U1e|9vTJHx*P;wRi8A~y zkm2<x!`mcv7s&9FAj9{74Bw+3jf40fRRprRz5~VbFoQ_Q3!{sZv<O~a9vlT-98t&a zZ%5(Ap98)Deql3#5{AVW8O{85e>Q9L#zfyACePCPza!cI9f|%Q8{Yq8{QI98{Xe$M zC|~r?Eh+ZM**YjYS`Y`Gh)>K0Q}?ns$g^rSdcHDEAW97M<3R%L>I~i>@38p*NwAZ{ z_;nz1g^|v0tKfGe)15aWodx=mVlTYc9$Xa218H8+3ig=R2>;vopFfGmf2;6?jXw>y zY%Xw`jnxb=utIHte<4bhbODV9m9FF#=(p88_8a1YDg%QN%wroV&kTPMyus7Z_!owb zDHjH2q-&XmS4hi57J+XtpH*k;^Ca~%TfM|=5ew^b9j*U*$|GCt)a`e<_BBk!mlkHq z?}jEj_<3bDp9(B(AR?L2e-4=ERQJa754he~Jvwj%OX`P`0E?Tf1FTb1V*D}40S$Ts z+JE|L3ChTXGCF{vb>}Fy$XTH~%PT9m`-f<&fJU-oLT#QC%Kdu59&km=SZA`tq<r48 zB*h*b+4_ntVReEVS&DAt0RQ&Rq#Jp0WR&53f0;iyknktJOF6y#e}})MelHCBl$KeR zL@v>PJoZY~O_q++)wXJM;AN!DpMWy?ZLaoJ7Wf8q+Y`_4a_vjd?YWnMZpVTvs`MGz zf^y$75#^va+Fr!LqCzhU!*Xy6^l}MESy-K&pr-DeQUQHWxBFPN)2B;bFCTpPoCICQ zI)_+k!<jSj_<aoqe->8*7OXtm_1Y>YD|h;;ynGhfs;-VHt*5%%L5y6it#qoVZS~_> zkyLP~R&yjjg1MOfB1NCBO!KeK)?>BX2T;yI7a34r%QCQ%ppSi(EzfRw=6ApQ-Kl@F zeFysve(2iUFrfuM=eOxI&UbY;WW0(`(A5^2!RT~#HB8<Be^z?@zSR@J*5mB=36E1^ z-H}DQzrO+;rcQT1wXOckgx}=u@h1GHKo!!?u9uquE3m1-g|qNKBa-g^maku8a<n6! zik;Pft>FN1I+eVe4DfECaps|k>8<4T4*?X9!)SqenN>>_-1E3eyp$lFmaVPM))qO{ zGuX}Ak$TSZf013@ZX%6H{!<zFPoo|;{3oB`Ja(3m1LXttB=Kkb=3)8+{E>oIz_Q37 zi$j-2dHJem4Z0}PK+^h<-wo^V?kAGI<N)}R14NU>02bXY;V)Hr!G~;vbYh?<#dTEs zq`oa6?-J#!eYU=E%5w`2p{D4ZN_L?WWOP+E8b81(f9K~*4!E(#53>QiEDnm%khW3K z7R8V(HHoVucy*xZ3VaMSKxYjMfTvhz;gg@lx;a6|Ddzo#vR}Tep!L>v5+=jOTTpAY zfk4u1;FF)-o@9OpS|7j^K2TE7vCAdqcw(SQa=<fxdOu3n9P&w-IbER={cTT73rXaj zR0Sl$f8MKmqCRjATdts?1RT!gKa8WMaR&N{^tK93vGKPnhq>@|CLw=BrRu&Tp7>w> zMOq5Dd_uaG(lS{`yCJeV+J$^l8*Qd4mT2$bM7|n2kd_IoAP2^ovexr?fC>K*I&vMu zh93=m1HOb8#GI`n!86a3*o`%J1G_gJ3+9r|e*&i38~k%~g5x!FX9gN+m;qG8d8`UL zgdLcuihuoQr1h3Hx8FLfJkV{^s|yb4>*D(VlIguCbaLHHmMw36%eqABkj9ws{wUo~ zp!;`I-{)hh;*QdSxXJa}+OCpC>Sxm0mr{5D+ov}QTxGo_MMPyMMbvJuUYa*e$SAmT ze|ihzSaG<`*4F0bz+X0BGX|;%ezwhZD)=>d=i)qvyu<DvxCEN9*e362m3MZ_JKgq2 zPkpXIHdp6;7YRb36AuRB0)U^^<J+~Rc{%ddW0mYQw-aTgO7I&X^OgKDg@%x!{G86x zyy-;zZfHLCCjTRJEw(hzQOS2?iV>Xyf7}C_gYBwjhxw23Zb4o)7&U0JRX`Vhm#=#S zsUQ9Yb(cCDU-q;ZM}UfU0CY3(lM^%fy!zU_Jie2RZZHxGTA@d17FL><>*Y88B4H1Y ztcfB2zdl6V4gCwC-iG|w+yj*~P?FHx(6v5e7ipnqzkn*W%UjzueH+{s?0Hd2e;@G} z{9jSU0qyzcAVFuS<qMp?1I{|Ou1b6UWz0{%1$$VQyp=v%!Rpx?Uq8!cRx)11KBP-O zBi%Ep*gD|axAqN2$<z?$lZrHYa<#AB&ZrC)LR110Ftk_K`+?{_?fIwS6<_@)kc6RD zxP1<Kx4s$g5<TON+f1g)7qA2Bf143*3+nPpO`nE+PG1ba75XcffxV&YSfCcV5<i8O zz%PF#1VjmOda;dgm=5;^C)M5AApAg#uN7V)3oXSo&rhe{8SpDU*ND&hE9LY-B)SbD zTfYI2Pw`k0AolzLc(W5F^CmQOrin~yhqOrfn7u+&JULXq!siha<vKxwf50qw<>O5e zqYpsOKA&yIid0q9nXCDfe<6!q_9?Mg!O3dA_jhL{78+rE&T^B92t)*{OeKXL!Zt{y z8`F_XDuH1(<0miQ)P%%B5`brD)c<#1N}f5tI~RF+XA^ne{ze*kz+N2Z<F?<W(q}WW zKn0)s7#5C*V0r0E+%r({e^*|z#bg>L+>-jCQr>x}O0SPq7wiGkk4<N5q&rTIv3}A~ zItT3RnQV!q-zCXg&vcYtgn~`KCkAp35?POSl)5m5ytOd~sl<0o4~eax!DCE3-Vq;T z{mgorUZ|(DWF7fGkr3WWW>L!87eIDiWKQ`q+W0bSr#|a$kuqCfe>?gMKtOAZ0uG1) zzPsm(RGiF&Q&ivtFaW|mR(b18!a*{p;rK<Oh!^SW7wKQEDG1zSB+%D=uEr(#!I#r( zkpT~S&I{Ie4YX3fjiPU-Q@$mtAzow<UC*S`H9ZM{z-m~M)kr7x87kpLYZAa0)G%k* zN(sMT52p2Web%Q|e|iD=um8e?gApckP0YFvY-)L<6}j4mpZDqZ8^bvZ=>cz-F3d`~ zw}Hz%<FCkG`JaF(5?(qkli46o>bsnABNEvNM0n|InTeaM#EnhA>2r108O;-Q?QJY% zpXHwhh64|J6C_vzHGD0+v@kQ}J}Yr=J#l$W3|`ojzcCL^e^jAT0~nViJS<@6HP}_; zt<$ZaSoejO&XHVu*K!<rR$|r@!0zgqjJ1DF(HFHie$t;)8`>i`JqQGnckZb&YEp1W zQ~LE8O3|f~L-R*#3nvAqw7n;7Xu}sYo~5=~N@~?YlX4QiqkBFOIwU{z4FFSFjpGrl zvA<xCKC6)+e|QG9MqUf%P{z8ifNwJaOT<wt{g$|EpWO6M<MxDN!!K`Qb^QJE4%zyK zyu;~75YTVsou~Dipn5hdxMjD*J4y>Bvwo9VtBJXe-ZxucZC2YQeNo)?+I<%Teue&+ zBDr1<j%Cy3ttYH2fv?6%rea9udTrhNad!-|&MoxBf7b11%7A{;8T}TE=80)Fy{>)t zRqE9ief1gFr}q`RJh9+cT>FBT0E_x0!x$=cS<FexsMM8dW;MN$arE6`^}?%bC36|T zaDBRNXR&MFx<5k^AgP!?${KmG+G!C4aqX2iegK?U2E=oHDsS8a_sefJ3_*EkoMf}> z^tw4<f1AbGEkZP1%i2yI(1TM)t3BrRbK;66oXM`mk2ALGGwxcycB&MIuM)m5cD=r~ zD`A15Jz1-MmML%aQd1wQtde&sHhuA-y}Hxib{SX+d#crr)0#g<?aLZt1&7w(7e^It zPV{~~=OuY(qs{tmc=4Fii9Q)#e32wle`6@If1a}wh;!D&83t%`I_O#V={fhFHAAM6 z!IBF83+iz1o~w{7Bad|${-2*UwarK^4W(Ayu}nQDepdL!Wsql-dfF;){2R8}vf;*b zLf_;-4+E7`V@DG!3tRzt>p)efyO)e1GvD$fWOQ2<+MI5#l}P+6cYyaN7qo(2)jYkL ze|yl?weBu3-dG$wZp|G9$Jo`qZZ6Gd*+AW~Ypq@K)=#Vo_4C7Mfw>34{9-jR`Bf=9 zEL~H4lhViB{fI;n=5Am67v||jyE103iIzZfyAG~>n)wIKH3RT82v3iIbvU9*R3AGS zkz&B*v=@|ilm=|2TFqLEvl<hYFBA5*f0@QI2m+v4&ARya&FIwI_#2?y!3$;szFIb> zighN8w`E{;Rzdyv?T?@+i^5kNr>v^xrJ3l~#4tS&X%MFjStmbZLwGTHXQ%F5FYmPK z_5<<`$rH_%99z`g(?YH5E@zE{tR|ZOE*lX1>~vM|EQFrr<?$breXVv%3zdHYf8~7q zUq8mC7_8vEKPKzg%a73w4(yz(edV1eb?5fB_od2$)(yK_CQFWL^jPjTqx@?=zqsj` zaytKYdB+W|*Bcx~>Mn~KowoLEwF^2q5Qb8!(NT?JexP}LF-{%;K;3x&r5?h|e_d^} zyY@D`w!8?koHL0Nk~~96hP78-f71Mq$vfP@iaYic9Mjy#3tDT{)1%~{wO47Lo@(}K zhnoXA`}CZ*vuO0?Uz+<9&HZn-FLZ3pG`*1{{W^57S@ZWMCOO=_^V+!eFwZkf({BvV zi{JeY>*y%Gu+Id^sQ!uh5*F3xnZ5kkhk=~k>@e_4hvWiq`ENAa!gdR$e>z#kzxN{) zO77$GPJfSXU$4*DEANyPtYDE>Q+oLK9>(u>dc&d}QlY7323WQ1b!bMdu{Xb~*%5Y{ z5w(-Lo3nvUiSj!Z34gYEk$E1xh_bG>KFf(;u`cyJD{DXT6zej+i+VAD)y6(qwCP;w zN6ZIRhV9w>4?l$3)%0R?e~*L&NPcJg@^|TXnOWRuy!_Wrwq*q`((Tp`^YmiY-eETB zD=B?q^62R-1>gXXAqpN~?j9hA8!P`uv+F?czWiN}s_$o6ceO>WYSg^;2b#OLX;1LF zCsyE;Ko`;9fCrV)?~OzGXQ|JLr>@--x%!C!WlGO**7~1#>W}8Qf2UV@1UlsMWvsp6 zueb6e8%>GvDzvXrJ^=1eUIKe?DThs>KcSmUb)$eM`A^}FMUiT@j(IkuM6%g{xxlJ$ zN1-cUf%U1gRaWz_{vL8#>P*%AU%w%-P^(FIm4T0@w%c4vbnRQ!Ja3cHZKd>XOZYjr z=n{yFJ-XB;@7QQUe{o@Lm3OX3!aiC_6a}sL2~btu(GB{Lb&xw;5KqDW?;8!#)BfnG zGdMhWO!N1H?b9UF0F1q;Rx^iAuB&B!yS&pfvi47IB+NDG(YZL?@y^;eXrP5sLw(s% zO~H7Dg4RNJbX_(8ly{ET`~z$ZxYV_pv$)9R9$5Pc*gA2~f1q-dy^~+luhm4s8!uvR zNQ;3E<sj&_nn487zwTlJG3rJQv_*}rmgU^bM%QXN#YOWFP(R2>br-=p;Ce^aTgmo9 zTmZ-X6M&HJd=xO+B=E^0VCSPePyp79bqH$)!fIdpF9XisDA2%={`OkU0`<FdlR$1H zIUZqWA;;_?e{vi|azOk4KPrE?{<<?=9&Q17n8FZ`5JOa2TdU+9+h$$>;#^Z&3R;DH zkau>m(`_GQ<ex68Eu7J~W{TucBIPvb^r_~4q+pN1D=Afbp;`FE-34*2=CRO8`JpQ< zB;{H(_p{9X>_}of2st$ArFlq+Gi#4ymea^pZhL;Wf9Bq%)jX~#&kB5)dmFPA9IGun zf9)jZcgQ==n_KI8D>xeXvR0i{Y-$`}?v_pr7c`k_UEPhg{B}TAb3X^>4E&wY8lSSB zIa`Q}6>wk&kg;1e{}yPB$wGg6wy{yQ%wAlp*-MIC9cw>wodV}Ws@L34gEjFwYkWHY zHF?JXf9q)br(;aV!M+pEOxRO<;u&iVly;1@=ewWMYMu_Y$`8FwDhA#HuCqLk=b~}% zZc*d$;PQe!(B1Eb$4A(Kw)Zpg59l-e_W-4#e0j$tdFL)`=WHB&YLu*RM#en)65gNs zoYg#Ct1b4t3`T7&ll+fQl^nHNDL%VfFtpOuf3>!a`L{%J0eFtQ(*tdqim2ZBvVm(s zD|DkAeSRFubF~GtYFV(vf|HNHV^HVzwI71X+yW$V>YkU`uKc~VY?iI|nwe^=WubB+ z?s-lQeI*``iy}gM)=grK+nDk=n=uCxmegvq%8FcVYd@^u_W{$Z?rjoKIqrE@4t)*% ze^K{iG=vc=_$$BfK_OIA<m{afrjKff`GzgTyX%pCcRpf5p0&1u!MOz)xf*P{f;f0` zHG@#CivcSK;N(Q>P1>{xW1ZHT=K<<BDkn-@hu6MqZH&oVKexv5ziJ+P5LwmZD8OMB ztuYGX19DdYIKKnH6@&f4>_3!u*zX4ae{s!M*=Y)JsAYTEyS0bG${x4=@8)ohxi+48 z)7^cn2Am%UYeaj~0cGt1({&yIb)8=O2emO~>U7g!^*T?%9`K9-{LD=_SzvD_&YtD_ zQrKYl)(jS-N4;<D9_DettpnV)wSQhdO#avO%?l<+`EkBMOh$+q6(b(`bRF8KfBfga zw3ygD9OfSdmhCF3TmzeWwRGy8DJM_80SPWW#b1IXDM6W-znT?>;=xh@;?}c(s4`%{ z_fv21yCKD;r-Bn$CUex8*lY1aRea)4NoLS2e454CX~t2!p;xK#u=oW743~t?9bjk- z!B)G<Yz;XqQ=j!VJ$iZj+hhv^f1a|o&ZcE*%Or|zTHapJx;(8sA1jk|y8wd|fD3I6 zv)QBsqzZm_5>mdF2|^gbEt6dBtH!c%`m7CL3Uw8<o_Iz;r{VWyQlv*jJhan%M>Sg~ z&C{h<$UlM-0N1YruEN=?^zzBc621<O1r@@^Y3n3ynQghY*c>C!Li3Ene+28KVXv1P zZpr@r)vjf>hHNCn6d=N@$Nv)%06&4AYn{lK^9?}gfn>f500%&5Tr(9LUR)SoE{YX} z4tF2+r<-`-8nP^Xq1or<1xb+ScSzGsS{8_slfkjg_G~seY<Ga@tv|7>-H0EtF_YSp z1*B5GmWtgt#Lmb0v7uTKe|D1qwT{vo;uv){4qCI>Z`Vt0aS$_y-iN+mb1-v}W=@O` zfjw7^5m=6fJ1W^SNvnws6&O{no{JQm0%b{4ygt4*S=M>FeTueF6ju}LD7_#Krg04W zb0&NJ@Q2V}_0sJ4y!G#!Qww!9I_e(>vfpZOep>lI_|N6X-ue&ae|sE+LjLPFekl%* zrQk5apU3GcoRVJd&?Vyff|KB#3_>yd<=2eJ&;czg)T)eLu9sB`BSd#j0kP)ip+mt* z?6CEa(BGX>IDVhWRP5SYKUfeC9g~|LMXe4})o0WE(M^D2!Lh=e7aG=}r(XgcuSN6p z;}DYcBJ=mN^H^8@e?F)RRH1n<*nH})Gp<kN2URpxw(rrMcY%o2oj+uwH=M?DlneFw zW>=SzsohX;GBS}VgV1-%tR0BGC6bX3KKUo2@VTy>7wdn@+yn49&vmy$zW=T`&h8X? zc*8}AONGOFh{ZR|BK(yss0h{vD-xl(U+QPeTCPv@xm5exf1uwyP*c`cB3?{W`uTl- zHHa4lA?fM>pzc^Dl4H4jt|4(kdx970P9l0mor#Y<YBaYPNCbm7bS!9Rjs0vN$`~lb z5O}~4Il7(l`5@olx|8`{zyby!+ZfEl&QLDYM#|mleGXH@RJO>*svU{(RWqyUk4vg9 zscM^alk)Kkf7rVV7uoA`nY*9eXJ>EZA7D8aYj&~qn6~txnA$3V-~TUw38w2jM?)T~ zwyCr3Hw7m$`~A%R5E$N?U4{F&^pI|UsK_<XQU5NqYy}_xL!8MO^Fzat0c4d?)%;#D z<6&5~27w~4rH{{G{2CZ}vBF}h;pWOJHl9iMgU%_#e;8=#c_CJ#u6eeGOF-P@{M!(# zt#1<NiSFanvKX|(avPhht(JgMw4fzs1RA@FrTS-<-Fmdx-aXHLbh&**e7G1Qy7pMa z3NXMkU2SUu&W;1Az^S+HX<5|2d*P|~+CH?fy`Zqw)1!hJ>gmzSs7`lu3|0pNU{{TX zCmMvqf1zu8{wLQSD`-{ENb<%~vW0E>x|nrO+sBr9x;I;2&}C05jKQPkqa}my9DTRv z<nChS>+n<)gBM57KkAMhy=9Qy9Azc_+AaNBag^O0V<iLHEdyF{jNLrQO1O3l*NO-K zY(84-I9ehN0f9$^A|1WiL0}|yGxW!pc1uhvf3~rk?aZQGpcUKM%@Qk#YPUqSVhMrd z9xZVufXu{41mZk;b1ngKvYWG6iCw$Jt`%pqn{!x+L%YSH73Z*<ovg&B-D1;<od{<7 z(UQCrFw+T4-qD+<6PP@9^E6hHqur9D6;ER~U&%^xwOewv;w#zBd8{N`yCqvI&ik`j ze{CyLcNHy?L&wR^9CUTaDo(*+hi{CcsV!L#TBFvuy34LFIBm}#U~wRxB~kE<qvk&o zEiHnS7qGjdSlN4`?Cuy66UcE-jNLtm#4H)q?tz;@wauaKax7G~_kHrkS;k0(d`EjP zRtP@b0}moAR#odOrG$S2W@;Gt@pj<Ye`D_G-I?7PgE->jcN}v&LWdI1@0>om%*N&n zSq)KFnFO7!EH-2|^c*1{(@+muSqvF`nZ&AM+8k|xC8l<u(HL`i?Db(l6okPD@h|Y5 z4y9KWoUF#6N3JOYAU#8elu`OTuUIPq{>!1@g~DHQ+XepCGHVot<3}P(B{<=bf5^u6 zLNTA8cm`wDp-DRD;&ivE(@HjjfTo@?E5)Gw56MlP78+YnXKgSka*=CS{il$}NQMEc z@*}%CC6zi2z><EP0>yfgooV|(0$;Y9PwoOkjdgRm3#WL19xRGh_*-(*N+`hfncNh> z>!%H0)8|U;HO(8-yprZnTOBtlf1ko@jAu0DVam6K3Sh&9g7x|;SUbN6nM)a9(W*+V zagg_XP60Q#mgy&e*$ZNPSo8E2dYtn8Rqz-Yh4WV+M;iw*)k^H>;B(YO!Fg`g8V_iV zJ)kFC-3@ctDbThN>n3<zX4A?foJa3rCL>yhW{VwhPfU3iPzCNPk7?zSe`W(L=PLsw z8p$dvboa{-Fq$@tYVPB#Q|*vYW*s?NW{ZPS8AahX6>=HcM{^%>EwVLS%49?FgT>K& zC}DA2W+)hKkqyl?ZMjsK+28>7V$S=StT{Inxiaeq^fJ4b`*D4W`#88=glaAn?sE6n zhgjnQ41ZFfGxV;?V}8!ue-3Ey3NN^+J(ADb$@j&Oh;}P*oqG`UW>qy06R=)Z(^G`Q zpzdCm+bKWrC!CjW95g9cff6qdew7^t<1!9Ps6=XTveC@G0d!JadRVtVT;wW|>iemi zzRMcB!Fl;AJ7M&{Nd>JHg2a4%b2@z&DeqPCJ8+z!vAf_H4pw{)e?Em0g|<LDbD6{! z;y}jKMCuP{i2Vj*I3&rqw=Qo%9kwiCZ&soe3_4`(wwOsT-4?4>#=1Uf7^QM)AvmkS z6SP9b27IRHkSeRJ(8}%FN(VO`q+vuiYA|h$EfiO5`n*c$$u;ejI9PbVM-hU+p1!Jz zYJLq-G6&SEokse<e|ajQS!>e#9qg)Af%THf#NXL1qAqZ0NfudlHSH8ETFrL7unEZp z=0nRUoX32%2)fV<E8!O2&~W+#xb9hdK%!q8{o3i*LBCG=&8FWR`pu=^Jo=qRzgN=l zbo!k^zccA~7X22{Zz=tj)9(WM_0sQR`dvc5OEGv4Yoz_;e>VDELB9d|y_0@d(r=J{ z*U;};q`>iZVWQ1Nb7Vr5zNV6YH!K>olPCub@CNj`{5SQ5_MI3n1!`4W5(AS+0}U6` zmPqV;Z3$>hNm~Ni(xxo|*^#ZbWiP@JJDaz&$dL<Ov$M!9<BZV$e^aAWu_!mEl{3^n zWJ?CtW9m8We<|%lrgu$yO9m1@6BwA-*shg1v@)kwmaUcLXl1!tS)NulO)I-nE1RyB z&CtqbYGt#uvLdalR4Xgj$`)v4Uaf4gR<=YdTdI}arj@PG$^u&1om$yStt_aOt)Zf| zvbDT*m!Qo&q|JFm8_$DDoQIKy!jf40?9>5?19}tse^-JcrXh;FC<5efMUs5<KnnPz ze@>(CJ5j#9h)el(>4t;6&>qU2C^=SV=xfXoJ3QsUQ^O418+U!y@b;^iF5mt<CZUN> zP=haA2-i)zG#)bNgo-9X=FvFoF<xI8j~s?qv*1-jv0ff`9c<{{iK+8*Ucq!5I&fJE zhF|ile+FoEnwRInO*Nkizm+_DfFgzrTR>kEk8}*P2Py-&NdW&r8%`D(D&4D1<;&V= zKmghj*HrUG^caP9rN^Q+TB8DO4A%S-(DdLe_`p>HJ$n;~=Q7Z=@lGi_j&Yx@(rhfE z{$o(A@!-TrmZ8r&r49JK$khq{7=9X6t4SsJe|XC9X-HTltr)_$ocXg0S~q-#I~i0~ zO*sj6_5n>fE?(4UX#OJ+8~e2FBdewy5ih44+VK7yC}+bi3r>mpTQql%=I+wmyV+43 z!UBb;)`0-2E;z*6Pbt~#vw}kyDp2D@aD$Oq%<a_YTVKT>DOXp$#0K(D&;Y>&tkF@h zf5-Z{ygeuD@ZXEnHcP=_S4aH-xEZXG%R3H1Zd^xFENM<Cw3nIHS)1azv`KTf2FHTm zSIef?YBTO({z0|zxJjECoCBuK4WNef8CEM4`Vb=Q>T1A+3mvXcf}_{ZG$|QHt~TW) z!u8qnJ7|FU0MP9o=5CdDnAnXrdB==me;hN6Y2dT^oto!mol(t|0oTD*;09PxF86Al z{me61Xn#=-4Ps-syRl8=9bK;1SDjbu8fX|J?|8%Yru+b|^a8iaDerjA^}75(Cyj0o z$Pd0srcXCJ0B%aR%YQ^xpCtg0397$Z%Kr?U+|R6y+0e3g<2s~$`LA1F!<y<+e?jnS z(wEbi(yPw;iAlK#Cz%`UfO{3IIZ*35(O{K#oB&G7J5E|(vvz=K<8tp0PR#FW&N1JR ztz;I#qk;+GOMZL4+u?G@8qPz8ZR~fsb5~tD8|xg*VeXgZ9d>Umkk3J_(m^YF`*7{1 z+L&jOo6wh58+%O3)wpgjZk6vxe<#h=*s?mfA&x*+-N`)to$em$tc_ioXLsK(P;9z; z$lC>P>(}HZbwPgUwb04)pbh2i3#_;<*2f>|Hv*WIONpVAGc~QKL3eA7u}%wig!vH+ zy8x36kf;y3+}ZMjHzNZy=E(O?fE#$NjG2u)d&m!>(TZz$*y~&&Q%_Rke`fiCEHQOK zG2CG6fd+0d1LXWR&HXaShH}l{s?Qpux%X4NklQ(T9xj=Sy1MJf7wn0Y654jFukTs% z1z*-T79s&&OtSug{KIG+2PYToVeu5cKLPgf0JYX@iC*OH)$E&qDb-owcyK&4Z!H+- zticAnT7|EX<DKE)wV^#ge|Wb8`TgM(e(!Xh9?tJK+VeXhw=eG5FNeMX)rw5P!RqbO z1TV?Ih(Tt#X*1YkbFp4EVC-HNLtkiUl*E@DnOxRVHA24RqOqf$!R>O)>rLxVy~lPH z>}lgN3JuQy(A3o?Kk$y3JSQAiskX7@lID+s|55Jh(&w7xN8E9Ye<E>5!FIjg+Ul+1 zhdUEyYYxUF)eKtqXjve7SbGE)%v|5>iH8?tf^X=^_YAaPtS^P3tjf?Jb=wR0A|Kd} z>+{W;r{Cp?Hss?vhbn$g5^x@{D68p5z+mmM>k<0CaOt>sWGuU$9i=-kwg-nmTqZzV zp9FDH5`-rzpzH(me~z;2+qez$L)|c%1?qJ%)#{6mlv*VUPpy@ohZkp#$kx#@vcQyV z9u5We*^nNcZZ6zX==zRTi+}~1oi_bmbJ!nuHAWk9P!Uz}h9tc6b^A9EkjJK(an$VE zW_O&u8!nv#YLUm?1JGO`s`zZAXZ>#(bPsn=F}7%ze18%7f96r}Bfz6LheImHd!X6T zWG;vou94&ieuJh(V!R4?bUe#>5&ejA8*@I&iX>*=QUSR5DsaH^e?KIDV#DXSu~5S| zv7?&Uf)<G_ZGq%JYXN=EN?Yt|rxh5AfdGd#kTyR%UUJZi1RsB^4^_MqO>+DH;Hoa^ zf52eI6*)y8e-i$nN_-WS{7-#YP#!L;cLA37e~Y%WILms64gHVNAOJgxd#;?wSF&+< zpa=ct#$K&)o7VW8*4U!GvH}2TuLS7#PWoL#ziaWgalO{KQEPleYuuzYZqXVa*BT$w z8lTb{pVb<l)*3;;?MJbRYX`yi9VFkfTWdT51Porsf6Adc4j(JGS75c=PN=D)q7o~d zjT=7j%qZ3cytZstryP0?4C9F37+8ZgpQcMRq~@*W-`h=$0I8bL%GaIrfpuwq4pn0A zY)$EPwXe!f+8>}C<?T)fIg9P}pS*-C0Ci;}Z~A9Ej#6YVh`pDlqE)AC;Xg25K94IA zl#Q%re+#&GjlB(DWBwj>myP5plw#iymmb=1ni_Zv8y%OJ+G<sI*^AU&lFQv&e~h^| z)ycYlTUEsiXt{Ngr$PbZ-=hVgcB7*Epd3gTLdsWqnftL9aMGBUrzQF|BI5=N;P`Ar zzQNWqm7>0mGd+kc<LOsVPi@HRboXO53XZute;cxyrv+HELRWV4&;J2p5`D><<Mq7Y zSYcy-!xR?6_64@}VTz;46#e!807X^U*d;$O7U@LsrZML4(&w20@UB%;nP)ef@q)hK zg~WJ8;Wf&rqPc3D1j^wA^Y3Q%7eUzHq<(Ixch6NnAHCX9H(pl;cn}KF=YHXhOxf@` ze>kkBhK!f+Qg<GHtj3S?|Lw#3`FOwhqB#1T{#axUzEnTA)_+GVqWe4htnFiqF5Ra) zO{_hC7Z8bO|3fH+crbfYodbbn!kaoPkN4sS+ajfpHD;s2ogzMefbToMsOIm81m>Dp zM9zN~FE+lnH?d}yhGyL$I8LG9XdHZLe**EzQ+!^p;1eA+vGNqzwNnlM-ajD5p4D0R zJ9PU)_2wcpb~$rDU6-YA#vWBw!Mga0fkYbvpwKP^R1?;f1N@o43)t7tSj~E-9023{ z{1>KUfL2HTYwR$~F|(XsXxU(L-=uuXYL2LDe;zX_my7b%&!vW`^AXUu3_vJfe<2lf zA5hnBiJ5|LGfxg{w4>Eh&Br34z?ILytGSwg(Tl?80P`GY{(iMRc9UMZ#jfto-q04u z;g6YMTIVQZ0V5nfm`}q8br}HXvVWjx%Ax!75tdY0%^lP(d1`xN(-5sDCpd*Btqy=x ztFuCf?(Ze$v%6|?h&^it8-f^se<?l6{OfTxgV`NyGm0Q4Ied`8MI~VZT$vbkD9*X; zAVRZvBl(@~Y#P2-)aZC+EGAq0s5H0ES`l%m(eo51PQNVJ0&lVa&%3Ch?Q>l<gY_Hr z&DaSmboVx|?&<MWvkv~rX(-9x!tTf33w{vJ7eE0;SOBi#e~yLm3qbmfe}KeLls&VC zf=Imlmw4lO&c`3c8-Gg$--I{R*}c38?{yTmKE4L;H)EHq;CE7*HI(KyO0$;IEG8i9 zEBJhZztPJ}2>uoyFQiXTRq*NbX~4_BN}qQ7_*D9Ipn^}NPuc43qG2P(r0<F<3yxK> z0o{G1+6xwyR&zwF>DFqFe`__ZTFq{)ri;5jf?nxq_3`5$BT;P3f^nW=iu9_)1SxII zg#(A3uL>#M9vqMAnkEf#J~_Np#!1m;cP^`v*qlQ>I7e7IIWDG0yVUm(9@s<5JPbhh z<l<EL)o8+0^I#I>H0H@={#>vqGT9uQ4qs?vd$lS89vR2xXbZ)ye-&r3J%fM3smO&A z_GQ~*8FAMv?11`y7C3H-yEwg+acQOCM0hTn10_KbT{tM}j-9oXg_6D&Yc_c8A)5EZ z+PHIUlM9zfa?|gy|9PFP+yTnZ&WdcP^}t?m7|Str4~I8St%hqg16oZ#KaD<q6x5;X zbL9fv--@;cGz}%Je*nI`na0%|VDEVO>;@XJaD6T}ZJ>S*{q{%&|4IY7ZC-vM+*I<( z_=v4H4sZOsD|iMa=<@QIf&j7;i`3g$qtn%xz3MuEWW*<-@hvk?H+4oQVD1DBZmaO} zKfV`_&%>_Um|fq^8l#a6_BkTJuvajDx9B)%)OdZo={@Qqe|<Iap|!M0{>#HLS~D2i zo$f&rVo^(jy=C^08wFi&iWs>CT6ldG{5l%6NrVuy8tC5U;Dok_Rc*Iz_#BPDRT(eg z1#%S}(o3!JQzt0u5$8a~EZE&PUFqS+KSE-I*2D4fU1D}ja}VHp2^_~RIEn9(v;~K5 z1h3$cUAlcLf7=DE=h_P{%w8}r*bU&7DVJbtR`{xLbu9`I9fO{K5fd$$1MnmHYTTk+ zipg+$ogQ2?h>5*y7q31k(q&^hEBS{5fJc!Pa2|kC?_Z7b51?{S5J}rx!AtQ5IlzTC zo_-&{Hb_z`*^+7FKQshvD>z1T1Q^!{iUD_Et40R4f6e~GMAXPFc)1*s;ocL_25T?T zy=M-7SR!wqYTYMqUuL$Rw(c`~Vrqv)<(8Y24;TUp+T`t-)-LPOGO%W?Z(84Kxodsa zdYp}vzk5hF#pBk!;?3WO-n@lNcma*o_b+GdZ9R@<V-nl)8S_Cn-&#q5`7tCIo31Z2 zSF=J*f8nlo8qUYiglhiH7n5Na7@7c1MU<WBD0RixKw?)7Poyh6d%8Js=%m@KJO|nk z8p2WG4efyx{un5Ms5gF4-R+Eg6}iE41Oq8O-J0jP?m6P)H{v=*KfLV5!7+an*SEL_ zQH}pv7@P=<tGE`=-H&SyFnXcT9c%aoKtu0le;If;*(nHac_D$|_ymH@fY}M*)eICN z6S!mbZ8Y3JzaDImWfIwIykP=volwoIk`N@U9M1T3we@9(7tD#V18pBV@W~clJm(8| zbB4fz2zT4H8<uO+!3j)Z81VVq4)T+2=3vHkxoXS5o;C+Z9prQyu^i<8zkAdqJrI%{ zf5pPCmhV@9<vTO(G?qOi^_99euFl4{CMAO}!Uzf+rOQj&`|@`C%!0ie-op^awhwIu zPJ)WjJ^x_4+7tU**s4G%+!e=F8lSAXu998Ue0cr)S%1vBVlO+~_Mx@eX*u*Edu{H* z_3xYI?S~G(uU%w@q>8N`gJ8u{BDQOpe-U2=ovT~kULbFu3yJ4j<n5K#wtw2j(0&jm zy!!-yK2<yH)%vXIt~2%XUD5h^I7vLdx`O}j4x{Om(aV>Ku~1sY!2EX2oZn&X)NX(Z zj?eEl;_2<yu&rpJa*9SfXneyX@}$nMIA{w{DBq?B&$sK9cGsu!{YP<t=M(w<e}g75 z4Q#9O@e9vdI<A4SYZmRA{C0im^g)!oz(v{N39JimY;Apx@O*Q)(h{C)mA6k0S4#5s zYIx3oizQr{2^VX@$#7*B_BrSf&CW^T#Rax9*FgOz@^;8lX>RMWjoAe^mc)&fZg8IZ zUfc(cPoTL@`>6v4Cr`C8y#3IDf1F%8b<Fbc;;EzH_2{$HA;~YNGgr@z=jkhNH<6B* zfx9<-O^r&yE7Yhhco|rb!Q2+yPOu$6PsGm-{5%FfXNoTct?exr;SGyl32*}N=Yqfa z#x?PrI)B3E*$PgIMY@lEUrb}HwrQ*FFW@`{J8|My>b*8o@WueDNdD$;e`(VfOjL$# zF|Kf~Jvhpk#)I~lZ@2C#XtnMMp1+Az+So!{v(pg<HH`0ztb1H-^?bRpk0i6W%t0$4 z%t|Czv84Q)l{j3*4&`6a6xpoA=_+<A@3E3>S8=v-l$GSTigT2MRjl4#(CWI&u3Tz8 zX+2pToWv?@s330yezV+Qf6r3JQhc0<-CKr{cZq$MSQ!SBxjM0;+rB3%y3Vexvn@}~ zpQ!6>Cgnn^X`P8b^IU@CvZ#JF?NDdj#|moYw}qV>68HA-;tl4+g99Eci3cY<SmR}Y zGSJ4NMl)AmAI}Swf5+s2N|T0@x3(bxUa+RzTT<?&q5Fb8c(Z97f8?G6e;2?X-hah- zzV<t!T~q9p#C}E54IMbF{1Pp!2CMgvcP5rq&sRRisJa@PzT**`#(9^`sn%u{@Q;6E zY)?=C>OujBRk^ZYkLz^9I94^->>LkGTI?E!F$l3DfI>SETI<_W$2HUDO7I_8?uE-| zHO#9@jCZUqG9t9Be*=hA&Yg)lX12Q2_`>X&)&U<k!zXaPY~r(P`K)>nY1Ks)oZkUy z=9PN+yLV7q-8wwJ1Pw9J&p3};t<5dc=9X%6XHj_6Ect<D=(zeyagP4RB3xksO*(g$ zJ|l!gXLF0Hyr47rQ-6Yo`K47p7Uf(1BrF$-`-sa;IA#($e<?Se#tf@wm9YbL<~ozM zYL<3ykycsSS-L~4ZoBPI39Xma0agvXX6|U(3ZHHUFZKBp|Cvmj+aYCBYK%({o`*`= zZexpg#3&53z5XLsGl&Itmi}3k6a8a)Ie$j`Y~*?@1|RflGg!u*$qbitNHZx1jS)B* zDBc0+yllare`C<vI5O}NxhZxL1~zNer9jlaSI*$%-Z$$oUhUR8f|c6#Nro`^QC(MV zGCb^t+RAFQAD1n_aC0WPy!?VXoP~2y!!PqPyUWM3QeQ2mC47V5O?kD1GQRg+ij*sY zrZK)y>~MMg&zIlI7B2AdR!mUkt>8QGrfjj7{{e3ne=hOyUwv0J>ABZ$0{>K}&jyzh z2bIeY{0JjgGL7*R-xA;?&ELy>i|K|lpO<)R0Zx6PxG2|W3EnDO0Pd@QfR}GWEWFh| z*3D<(ebwUX3S0&GwQV%&&dQcld-)}_%W*D?;^fW=vfQE=6GY=Bo<Z~gF!}@;@^1va zyhvNOe?(ua#)umM-DL|jVCIF3J8A!SesF7|)iaPyvRKUk|K4HHVhhWGO8VMn%4j5h zYDD6GUWAFu%Gtuj`q~YtiC2$E%=rXNTvZNr(bsNDO?=ac#J&8VhiKZETvOz;@>SRL z{qhXX9ml>y6|dkYzC%GyUj8B6RP)~NPy;Scf8n|zrc3#Uu|PRm`82IOPb<&uEV838 z=`3=fn$yaiT6wlsjyn^TOIrDrTKP<^e1=v&T`QlZ0XfS{weoVUe1TT()yfxZ<x8~k zrCRwKEsSzi3vZ;~P4xQ+{cfS($5ISJbZp9;NfmU}cMKKe)YfIQGyLt(;&I*$ZkUkO ze>)ShI^#PjTVO0-)}GFv_C!3bQ(tZulV_yKU#}I=SJ|{xcD@0_gii5$0J^?|FjfYk z8zzeQWo@DejGOuw*mDJ~?9&&f!RHgdLce0JLz|nU&CS;4Iy<dIwz(3KZLUq5Yu9hF z`}iNg)fbUK?aCrCXjfgu*L+5!mhjG1f6bqvs2fahHS-T@7id2xvi%&%R>eBCpA+SN zPL%sOQjQm%PK|g?Z%)I0i5489ZA?y`C^*FS0f{^1t)HJdN&5eAPus`V@=M+J{7)Ck zTTigp4)=r(DWie6!jep38Gf5hnylL=<3qw8DmZEMXK4op3wrtAX-IE}m)~<cfAMRX zdd9K#z2(EU&ld4Z@^;)W{t(Jrd3&Q>-oE$n$LyWM5%mMJ`ggOQvmD+!4u1@f;@&Cl z?aM`|;CUtLXSTI}L06R(6;ZUy@?~mQ{MJN#6ju0{u^w%^AN*N2l(FwHKm4KEV^-fc z>rOAca~$UIDDIu&euh__wZo*if9p#5gvW7>*$&#+%;0w$#!;0!65Rm0NiKDhY19>_ zQ&)fvF{`tv2&abGtQ~XJ&u#KX9R0(ojCn=ru~P;;&^Z`|Mt*3IvVeliaWh1@>1iA} z`OKl%!=<auVQDql#q2GzIIjTzz4b6>dvQ4I%wC}2rEOju<h0XnGd4=Af1b7|GcjQK zZpo%h(Cw?k(g0*Yo4+;TrPr9li?6Xz0^Q!A+ZTn4&0%x+W^4FnOW2nY_DM!&t8xwV zIDHj3lVRs`#Wpsf*1K&j6+?c-EfQ2wX$ni%8@VLq>sW^yCH1sTk<qx5R)-g_HXENE z%Cd0j4yewKX15dWtng<szGW&U34d%ShZpa#Q05)srI38_4l5-Jm!5*Wr!eo*Q zgcqO6fIkVoWWitNutg*Z|B1G&!{tBATKop~Uk{yB&SP)2MQq`m;$`8*#RiUNEXvn( z3Cylywilffbe_UqGdmbAx3YcYF4@9MGM0tCmT<X2tTU2wi2-T@*|~nFcz;~F!Lkg^ zTO(PfGRsKT7GB(D#-$b_SsPTO&5EnP=y`El27rLqQsR3iyvtfPVu_46pFnZ4N!6h2 zLhoUhtU~@#3e<HDQ?q0fgKS|dw6R5Qx(}W4?X9jdryN=(wnAIpVa8qSDU=r2Z8qg| zmV<Z-Pllczo)DfaH_fAbrGMq<KexSavmS6&0fcKtKwzKATTg3^&I-NJ$(Q5E=R%1^ z4M79K$AcSBgJs}ko!@Pxb%}}-3rwOIoZwpLRK|giy1c`bgi2+^lUQ2h&~EG<>!5m# zc4fZqEN_;^TlXd)S(<(3<{K^H$>A~Lh=N3w*VFwWS5>yMM&91$Du2sSRt_V90HND& z)TQ!fTX=LcG_!wlcyhB>3Qq`@$lKQd4feFXXS2TUTIf`+k+*v$!%M62CR@2k-d>b3 zM5Y|5Ogf4D@MIaPj8*xr(PZFgOSZ`5G#XC90s1N$A1brgk1uFN*|5141YYaa1Z^S6 zH|GXj+JF*!yu2Ma6@T~@Z!FD4RxBFGIw4t_q?8ib6uUANS~)xkdPaCsc!Iorak&|( z9(EXMo1Nk21z}4v1>zkZodlGr_yi!EG7T^YhbIAuuo(c0J4<tEczE%Uu8Y2QSrX~G zq~_ADOh^ZOW?pWj8|j}oa8w2rZo#2Kza2FY5J7FV;((&rwSP+vU4^VDq|QRuXYvDG zxP`_-Gj6WkEL|XETyZ>jF>WS|yZw%px6io1wbH5J@e&y=$co79#TKh4R^ocIz9VUs zqtIG{AeB^*l}V8K36Q`Bvnu87!Af)62R7@eF9H5?61dSbH2+{Z4huplvK1qiqRIFK z2k3(e)~+`Wa)0?>zzbcX-xM4=rC=l{ViPX2gv-p~%-{tHR7SbVQwtB5S*=Pe?ujZ} zhpH8YUW6Y>;NFQvKLS3rUItC*(C1r>`A6KGe7o;V*c*pSJnU#553(?rkKH7Ap}c)b z+_lW9IOXlxu4UPZo%&V|lzb?X@gkM%wOGOLZL=;?o_|Xgjb%;4vKCsfthttm&8Y4s zQJ(iq*mp+W?g;zh$j9OF!Fg0*A%4O_v2Ps)5u|(-Qo#$e@giH9gc;zC)p(PJjL!@W zptfc%Qhu632df;~jOLVo06ba5Z6gM5b<lp%tXNW`qGw(Z8Slk*7~l^^aQ+y_cc6J( z#r9QYh<`ToVNbk2Ty=)-7T<3USH+E6=taTN>_%HNsDf}6$o(j^M+p}9rmS8lq-f;F z(7B;4mIG%myVdC4YE)8IQwv>>n0;!Z79tk3SBA^YVOzL79vt1gpwf&SR*uw04tqO| z*e{7}xE~ee{Bdf|A6w3mQ;lW{iAm+pb$!;*fPcICVxz^d(QrNqD19b;Gqp+hW@xPJ z@cDQ=PxBJ6D9mcBWPNRsax4XxhJq9j62_w~iHZDY((_v=zb!p~Lf?H#x_mULav@VE zRf5s_&E}lq=F(!2&xc>YQRiBD>p^*YSFQCRNp+9CRvQmevR0c6H^E#;26`c(%@kZS zQ-84M)>>`!kk+BVE_h{5RXrF@sXM_y@S(H?9pMMW558oS2rz5nwbsM9i-a}-v`6z2 zYuFzP*FYr?r6xK<iR_d}YA(tMyT6dP?@FWqSy}T%t(Ejqt(Jv~#~n8mPgg?m#Ng!_ z;|(buumt^I;ETPkg+lQF<p6zAAGhO0qkle*6n#*R`r}oj*f&6aZ7|nb-@xEM4Mjiv z0>OZZH$b;4-GCxJnYh+^0Dz58(Fu2eSZ#yEZRSKpP7p8zgRd>@gi%VHHCYONkcK{F zzz0!e8}z%<wk#BaCq|Zc>rnfr>kBWmBv^e;FpRS0tx8Tc+gA|BJ*@xmA;wSyZ+~M} z9A&&To)>CqG&yL9F*2D(7b6ZDSd5IKF~x|bU=N!s$y?jxt!@D2&QV*l+PD?>wH0If z`3KoRvotzvE>4W$8<bXOf>_Z|f|pCI$o?wH`G2}PR$16UK`U-Av`uqAr{N|SFKZYM zw436a_hV?Z`-tZ5*4)P_=(!j7ynk}{ce)4AsR*46UQIdy#L9yIvFg(QpuDRDPAoT9 zfGqT3$OAw5DMev8UGLN%!qI*u2Gn=~HxDSBFDYva%R#7Ma7IjiU>pVp;YkLbC~g!E zew}}?0?k*DbUC=}Rf%c}++_0&#_Xrvbw&=+=5y|Bj6Ly3ak`DR-vy5qM1LfIa8RUl zV9MV^%DJwZSpB1YzZB#^9etHLGgCRgvd)aN8h%?9pAZ!>7ty}8C~+XkXmzGV$*8O| zMUEAm>~LRX>TpNlZwmYknhKRzLlw<uJ85nf=lF1sY|lkL_L^QZh5tQ)Lny9X1$Z%c z6vQ0O(>J>>(mmUJ70v!Be1GkyL&-ABTuQ9|_oDHXOMnyrf9dnvLdSw~CAWNn<13F< z4SBbJADU&42k$jGHo@P$@Q3&J8_(Lk>Eq3n1;@fu)%zqzc$o#{Jg9A!<!Z;h52T>b z*T^WYc6oDKc%e1CObRcv7cO@w(@thd%B8H@Ua-e?xM32TX9MF0@PAuBGhS~m#znMy z>rW)}Ys(w};*nk9s<F5L?Eki!gGTl{%N8TMar+N(?Z%SMvZZvC#$>cOKBKO)dE0&e zvFpr}Shu|OD7c8XuC7kx+y5W)L4U)&va?#~{S>fN;GRCpDwpuEmCFW@Nm?CR+0u@( z+W^}Y6a$cj-TD^j)_)wzV2i}&1oGA{R~Hc@(2noKBtn;Z+MM#za<-S!SzZ>jroGv^ z&g9q!f7{^??_V*Vcf;QY@Mi@?J~HnAZ9K=|Iv=h-hri|biTj}Otlc+aenRcfM!(Pv zO|RY~IV!6)57$8Shh$uY*d{-K=Sk@90pS0b?xE>W(T5#+V}F$IiyDDx9A~tTVDMqh zAfqMnGt11%G}hk6Z8vm-C)|cNUCJo73vUht$JTacn#~<$0r<Pkyndb4q&RC`N0kiP zK&Q5|%p$(7UpE%4+X1DKlx3|e8Z54b-gIqqnS>{o)Vh{sDwox|7TT1HYF$;Mp<rcF zQ>&8GQ6`ydwSQ%qwc0|^4ppNg2-7|UQ@Jt$P`PCNI>{8wAyAVDlmkI2X*mKWWpOR^ z)tN7#tp}I}ua<Z0V{MP_9FKlx91Mg>@bm&IjZ>#jy*1^K`o2ZoWr^5niCRQ#Y3Qn2 z(O}i8R;cS%*y<$#`8JdC0}KQN5#s5u@cJtCGAF<GUw?@KkxEwO5D^|g^nS0eg1*<I zv0ml?DLflB;i{=@;S$i!{Wv@T*Jzj&s((O?7+B+F4oK}PTZ)C=Mg$1vV9~)zNcx~- z{W`NLI2x-dhsIjOP(B4T+U5Jtd=ZcLVHgau!vL)(aCikT#D=7!O|KacGIS9B2H>yX z#9#WDs()ed$8(Uk*%NK{4>s2f%q+7i=iRVZk#5*GyuIa+4zy}^_s@z47eQkdi^c{E z<aDiTT_zeQpTP~ehM&XDXyqbEbs4zawOSb{^<8iQ4c0DrploE@U$efkKd$6cyHhq- zS*DT$78JC*O#yGU9p0RU0Wc|O=j&b+Jg^JAvwyDtR~SIS(-n{hpz}m4feEmUuZ|>m zpen%w*zuy3zy$dH`;l}WxLEK&H0;~}mqCLS1_Ub{J{KFDM{HmxHprxEI#L_oL95ll z?~@$MZ(Vf-g(!ouv@r8U<F3lqV%(LDhRy~ZuF8f)$JNNgM~p$<7%pjN2}Np@v#v`$ zHh=9VCtmHBx*gh0*;+|XN_+ywA@;Aqqm=B%@p5W3BN>;4ip`!l{zSZwiT7rZIcSIB z)VvhT6w&)Qxa`!GFh7iPt1;WGI6B<S4D1Sj9R4)$bL{fgMhC{!du-lnAEy4>XSnwU z$+<!31EDvd2r{_}m273fOwS{7sNGD9xqn@m^5$JPLBnekW_mWtP0wO)nJ>vZ{F_+E z;U0O1=b`+LOS`oBPPqNir3c`4l|!q{*5>E*t;ay^`Hq>MaB#u;#z#zKQEBs~;Dmxh zGyTl~SYLdeq)q6nrqMEYvp5&bvc7SnNwdmLcnmQV^dotPds7A6JmjtDyM%h{mVZJ| zOmPsCtRAI1O|Cb=PJ9g%-|7r7y&}0lq170yN(%A37qMK|0fa4q>et-a&Hm=5L&~U` z{znvvb>N2hp*<k0l=;}He+#K;)EH2m>3$^WXgUO@hhA!uG%Kwdf^KE>2EufL-1HNC zyTkn>B#Rer9;%4ki!)FzPj*8MJAc9d_Aa*0mgF?0i#7JBofh=x76D6x?LIFKHtC`> z&`}_H$Ge7*!Fh6-CLuc|;@>Uxe`WscPAe*9tx}5QA_iDsC!KAK#2xGPdf8$AE!x<_ zUJz%&R~`d1Sgztf_#hsy;-frdlFd`&Xp*^my!_MxF;(NTD*1Sx)*`!WzJFcGHG(d( zasAKyM9jsap_mJ`F=|@AEI5{?N($#ntE}2wT!%d(zLxfH94Od>_TdX_F_PP#%{ucp zJTeh(AKd~k^ioH>;Lxd4%%6iBH|B51n<P23S=SivPhi-pG#<31Rhu<loi&~|h`EOP zNE_J4IrYCmv%S#{X1kaM%zuw+!1ABxN74BNbq`L3+m0KaH`)ZH@;ma+<iA5<3c2hJ z&F$=T+c77*7HE~N&YBEzgmr*lDLj}Wd8;&;4o;|XvYZLlZYWR7u`y{fdq>_{ldHC8 zwMDG*RxsZ>tT)HNgV4?g$jSUx34Ft-CXEv(dc{3<W%Jo)puqer$$!&IoLUJ;4M{7p zX(e{8#8E|^Q>)L>>T|V{BCVuUD=F7XmTDzSw36Gj`YSt2rsI*+oh5j36kKMmr}VS5 zdaqW$SgT(_HludaH0`DZTFDyi{w939pHh{q)k;=sB|-iEFy#%<WL(Le*sOfY-{W!Z zPt%}ynkB>?ljc^7Eq{{ci159mKODJ5(j09WZX6%iFgd0+Lj8XKC276G(r);Yv<ru& z^?ym)dBf6P{v~P04omyRrgNtqJuL0PFG+jBu(ZEAOWI6In;jp${MI!896C?I$vRtA zLA>A?zcZO}w7%TNqOa1-Klp?qO6>X=Mu~+>uaE0xk`XMn_<#B@;KLcsZFjXd<XBsw z_^%|PjAJ!+rr52=STth6AXy{SZ81RVVh02yb6cOI?L!+t`2s$qK|20$0@B2ENX_nS zBXer<-=8zN#|hwvCtsILJ|R7M2Y@yWOYHma5@&<DsHo<bCR00bS+0R|4&n@!U$wqO zs;cz1Y|6*;G=JYTtd`(;AjbHfc_b}ylRlgl8-sgMYd6^nPV%j3UxwtL6C<YVY@r?H zX~8k;o@(4l)jg=WqrqD-7~i`7Gi&f06xe3dSDC{YY&qC)A#?ZZv%X&K<qZ!dkev)U zahsXO!DdekH|%;RykHWA;YURgB%N`)nzs61;dk)iD}VLXQdM<}7wdBTjYM7WaIP$1 zIt<jK0P0W5hOke{CBvVx;`TI}A~vV#ry=0`knt+*Y!{Bob~I#ziqIEqh_5e<E2GM9 zQu`!V$LdcpJXjfYy&*ra2c<B`|GBp21>3Al=`Ra=pq2wrOFze2R`5+a#bOw3h->NG zycwf5pnuqYT%F03!7>E*X?;uI-Kf$#luHX&If5%$r4#tGLRUC{W?LMT>RhLnKe3Ib zb|V$&4|_0OIh*f<9^u1uDy6G*R`9#wj?K*mC(g^iM{nn6`}nu<ZDkIE<<$aaj+c7~ zW;U+iY_tJ+!E7bkE<xI^|678#lNc^)7~ns5Cx1yw!ycLVo+!@M^iOH}($0#rjWgnX z6||Z#2CA#d)fu$ouoHSH@dJ^u=%whMK_Blt2)GX5_|+*;;52qq;nnYzsw-QH5U~%A zq&K>(%?A{~G5|mVHXkfKD>?@M;)!@w1+9P&Zk~*MJJT#T+0gm1Q#>~`Wz8V2Rz=~~ z#eWjqIthdu2I59F&tS7Z#!i6vFqjq3DxGD+?G}`m%GKyX`9a(`jUv|v6H@ZNBp?yF zJ}4sBp*Mq^T0heioCDdLF;f`2_E5fg$$aAz`I<d;D18BT?r0HY#d80W($ND*r=5or zbaG-x@0pw4A=m`Wpn0+Rb`Sfud|AuQrhj3viAj6kq4wwDCRAQ?V*hZcKCayxENB%Z z6@!)oBo>Iacc;^~H$mGwo6kbq-v3D3E6fIMdlNLev^kx&y-C`pr~6zxS2}bk%JERO zL0mb2vjN~Y_j`3euZSOvjAtH)k522uRT`JQ4jkHzn>8I%f`C_{yT4(sSWn8EoquLp z5@1g$HKe7tU@tBSz!oeOEr<fn-Cy69(t<0o1;02r#Od9U(IlKvHXp-1ng&RA0ybGC z)Ogj#;%k1YSZsUJzWmD@Gtr(oYJV=aXF0TIVtaFf?I_rTS{ho^GdR;GH+>z9v1SRl zGe+ts3hL(~(pA3-Q;=O!6@u`NCVy3-KZZ>S(2Cd3GMjKc*h@F6r=b-;5c7=!kWhL{ z!zoHH70Qs(8%q4OWa9JF6Voi>=GLUb9?BAX@XO!>3t%_A3219fNH*I5K-l9*h0*e0 ziqcQ7sYBFsKy=9grFB^GjsKzeY%G2*<ZL#D-Hu_Ii_TfD$00<)Im^xX(tmPkPF-&L zkW8;!=meU-2UlSGd%do`K_{wRcMeEke{Th@bb{V6kwy@6aJHeB7FhBL`)TtsTx->; zct8{sx_cYko0z|+S+b0*OYnjJR2MqJ9hYCf3@~t$EtDv|e9AY3Z`U}G*vvx?Z6w5# zJ!cK}oc7leJ?C3soec25&wruCltY1XP^FoUU>ETD*=T(v^q=tS7qsqIS|ch+QV^t_ zZXB03RdZ!{X<s5wg+5}%b~22ix5dFc&}u+S4$!hLGYz5$5sJ$hF2^yGJhEAK(>O!% zbg!=T^9@hqtn>hwBFSU9Z=4S10iFZ^LYJG9RT>Xn@+I`2*Z^&V6n}Q;^NiY0rTre> zXi6l#fHua7vH_@nC)6K>ar2GS!waUzF?gwD25vL~;vhZ$Pm=j356=%~9%dev;r1^n z&~I<PX$BRDo21NyoahDMBCVnPmwicrD1In&Gi45Y>>}sIXgF8#57k80yCEOy)dALt z#YMi04^g^Z#(dMkbblgJ`eS^1GLH=PF-WQ38xP}@U~|cIP~XW4UZC4ezACOJvz$lh zC6KcV<ZM;Iyw$+Gw;}Up?oTRi+{Wswvxau|BG$Fyk|(X$RuJc7hJ70*->a(YvH*g6 z_0Yy&nY8g&JIj){%kuVW30p8z-agM3F0;bLSruMrmbWjmhkvUq@Yzw91(sL1EE9~c z^?+M=p%kvl;4AheFmxb>Ay*QMb|zP$Jr?IHQ(mU=J5FX)vL$Pij-aMQ`M2&*`f#1@ zC@rfoyuo(14{!v3kR1kzeg-^2atu9oa0tUop)Wp)Za?~kG^7+Ybkg`FK+xSdf<e2a z7=Gbla0+qi!+$}ZA#n0OgaqKfXr`eAU@=tU;AfI47HyaSdfQjcU*3=aI)+*g%@kLv zhZV;5E8Cl9czx%FVTKpBUp2PhNj`trx3lPHza8x@F`sR#W?*bN;(0&2^JgXp2DM)W zIyrx!*_j!36y1n(&|-z{p`Z_UF<|fHce4XpjZ>oqy?=3l(wuWa_<|A)2Kv->T2}vs za|v%ix;OK?Astv;HBNm-R&!3l6*)J|3r}^OuK!m8Xgqjf8bE2&NO(W{KfpT_ycDZ| zJ9*`Qn!k&k-qdWLbj9eBMd1aGxN;(q43f;lBm*qo?3_NVo?@jmpmuHk8>~D39rl{$ zcjBt|#(x;%hpW{_H=lpt!z<nbUo4z6x){T^jcquo{%A_(%+YEF0OvRI-_6H;s}O`c zD)P(Qos;D4lFPd5(fnP_lMY6&H~=PF*qJ%64C?aE5N$3_qm50hw?_I*NYID9iAxlr z&^0KX-+{sgaFMv;1n0+y_X0HhG039Nun_Lo0)OKkh+J_P$^&09=K7@mcuLhHqUzHC z)>~MEZnhV08lAK(W%L!}p|Z~K;xTdMqoE4ph^?M86Nd`l%6}*SK>q7E#}7#R`!&x% zBoozrjT5Sf+e*pXvjG7h!L@jRho@KGxd)5`){)=#Xu+=hUGfg7?s0kNF<i*eo_q<$ z>3^Vg5553<*xHeJTkC3T98>FZ4>o2rdwL`G+Cp%nJUwfz&7R{>UbA!N6$hcKhQ}8H z-UGN?7^gXLBZVO%=cEvMfS4;m-vQ*mRTro79`WZnn2*J;{vVU09RB_Vf7Ach<j8-_ z<iPl%qaWcWz8M41laIP>-3P_)zBj#{!GGb++ZjFZ8?hYSd(<84-UTU-?}hss8zwzW zNrQiX``FvvZ+9Qf=!T@2|Lu$eaCdTd#yu;J@<`^}M<ahfx)1ZWVM+VC_ZayPCGx-Z z_FG5y9Bn(g>+Os#$a#Fv(OvKCJG%RweeZmBeBaT1@9cf&y?5G<U)GA>#<pN7?thqo zfmH+eDf>Te=zm#CIpG#}hp(*CLMuL}eTk~sOijNN?zPS3xG7njCh1>U@$3IMxxZ4v z@#Hp~;jgi)?OA$xR$HGH*X-Xj&7|oI5dKY9c7~SH`hAlr=uqR<V1|0ewki|soIQAA zh^s@HL`yM~XL>wysfiBoaJ{A|7=K;&n*6}US+vgv!h0Su)z_HwJGIblh%}+js0_9l z-!Lk;&Q$5GVx1k*4JQ7=XK~ul>Um5AQrQ}{o`_RErK6xVS@5++!8o@c>cg3y=e=0M z^GoPAfCV>h(^ki{)sl9->z#%R*rJ#|V@j2e|K{F=Qn(mD&Wo`SCNI)1Qhz(`8r`eW zj8zvDoQ&*D?j}ctzH*5u6r3Zp^=6@1*i1Dw+GKIElA^)|do&&4$=eUApGm6=L`fob z1>1~O)TN@z3cWP+EHn88HTZVi`h@a9{q>;Ewdb)Au~IO!N6De3bCtNCZsW7^_E}j) z);C@4^`Anoj?Bhw_k&mI(tnLC7<v}r7VME<mF7^Vo@ecHeO^BxaMnhPGT5gqgrqCX zTs4kO(sUx=W_(jDkXKJ<$oJoXt0F?we3XJcPj#iHENBgngF->)-pJPK&o(==!izJ_ zxR`Iy{4-*Kxn}D?TqhQwd~)c0Jd{^?b|-FUT5xP=kKGTiP42O4Uw@>0kkaBs7bjZW zB8O^$y^nq*TKnkF7N4WdrzYF{&vzSbE;n6{TLXMayGzjSFBvVo2er+7v!-KbI~Ky< z(4OR`-9*NtKPyjRfE6hWfFvw9q-`d=lxM~InO!(H_!ZIgqPe|-td$jBmdRf_g+0S) z`hr%9i_~9P3C|~<!GE2I*c=e^S@9+vU+Ej^f`sln`cb@TGd>+%x|u_7%_4pFb~h7A zSyX%FHmU>uhT@4jbU$BCb)dJcigfg&$h4!B#&?vz^U2YlAu30SHb-;v_(tfQ-PDfI zLfxgCd9lbUvK(E!nTrhs>K_1OK|UJ7hUqr;TOVh%(`Ib5h=1kn?h<HXK^^ro;IN)E z2{Ib|sV_}(8*tcYsQx7ehb8wL09Io<CJrw)6T^L!WH>X4pt$ZOb_=Gn+oTGE-R_-! zE_OROHNkF@9HRAQ#9)PrLw;Zm8colO&VVlqplc8pc&CHuF<RgsmL_9c=Xr&^t7Ln< zdZ}y{jb6nM{(n2AlNTo?9*R5B?OYy5{nM%ZpF{{;$=6BZ4Rt7B72KzpeX2L^KJlwg z_imc7qnJef`IShAH5p=m@l0d;>w}L%$yn)#!Ry5%q!~#9BClX(7Vjihr72B?17G5~ zP}}JpRyB7RTdy$KI*a!XicNE}nE$x$+3jPCB%fEvvwu!vF1)J(o*ARlqc?siV%Lc` zD)@I^LeV2A<@EBdtHqGQD}+iAq!^N+aNH^<+e}T8X~<#XNzu8Apoim{ZUa@|HaE&M zU1+H#DcrVrNS;m7oj0<VH)AE6?OEXkNs+c<NTdzv969tZ@)!|2!DjIxMmz87b1_;V z$24>-R)4`?TbAI!1FuNDjc@$9$?-J&{TTl6{(p?;Cw@-$502OS?fJVZ#dz*9G{1j@ z)CBJd3@*PNeT(Gzw~B4}UK`gQ`j8FGZTrZ&{(bWcGzEP?kuN=%Pixgq9?EsjiP+Wm zv&6H_Ij0B>@*T89H+U&ne6*VrWfV!+0Kh7ujDMK22P|nhgxiUn<GfL@cT6Mf9i})i zvZUGvmX8;?*Z)+7*r?B|dzyT@e>V<o@e6xs&vP|ylkY!;Zs5mOuyo!80d5oPAyEG= zg<ORTuG=j?umfvXdR>pE--fN<C2!rU=@>YflqUtpw4W`BQ`GTFw)VQGtgm27>nnr< zj(-<FfZ+o2)(`@<K7e5Y?4h;v$_;<}tZmi@FsuNBB6k7domRKKImZ^xk@2vEe=`D( zD9p8fCQ5R3*Z+<Y66_TOY9`#~Y4qS)3uxc}9o$E^LsHM=$oJ<P)-`d?)fWgJk++`G zo-fDUSdOvM3w!WD-cz7>o-d7)O@j4be19R-A9uLbHY4D~`fjAp0;;dv^bS$y!l&5t zm_nC2paWsjF$Qg@{wmg={aI9bmsLdy;8DGQ###ei5DO^X+QFX3%-{jsp}m6jG}fOs z+M5p~`0oJm-wnWjXQ1H(k&BXC_=Ykrg$pM~#tbpx<g&PqFqLf>E<zPxR86eCnSYwB zSkw#m9YvHF(ZWnMD-k4dAxZB49M?&<OX}x9+g943lse(9{7|;ZbPj%PP32eIpubWJ zQM<aGg4>t}=g%Da61!k8HU^j(R2{X)D~ONwGsF&eM*-_yU+{aA*rz-)`9)#9zbLHt z7Y*zE5QaQ$-3#2QBasT1*o?(|)PI=r*3<fOjQ_x`akqAOH4B$+$Gz(iDO@mZ2F;!; z(iU2RlZI^CC@@jqWJ9eG{cW=PB(}A2^aE7~ywIkHaO8IDJC*!*D<F9{4ow|XE~?a5 zR`Qvb!<!Cc?36(M!~n@cSmSC`fJlYc*ynt{&=1sN)G$OjAG1|eh$i&0eSZ`WukOyS zWCQ%zwBf)D6TmkU6dj=$d8@#H#uB~!xlfaOvQs9>$mFZ4*8Pux?0DI$i>>|i&9{l2 z2aogDk6{~bVN_`lD_+gaU-~vuIYCGZ5YnnIsbuaJFMk|AMe#ND)lgg+Rp@S!L+9cC z8OP)hot#STm8dG>=Bw~lvwzpP)v)kRCdp2V4;Eb4n!n(>mwkM00yu7f@S>1g$Dw}_ zxW(5!W~J6-k6nk@dyOEUR{XC52>1_lAVPx5#F-nf!^&Dm3p#lb81Dc2I%l6i1F>$t z>Z?%1D@Mg5HyD{W5_l-@xR*5%2p^#Ma)p3uwFq$5*S&o1Cqlt@1AkkbpAc5LBt8V# zmnvzbeGHc4iBf}#BOt#!Q8dk_n|^0<)WV++{_uW@@x1(ZLowFI`8ust=#f^7)58nh zwubK*G78!!Z)Rz;RhcSpFKsr<+h;V(+ZQxjXk$aMu2tO=k9>9g+GcB9xe_;42LGwq zbqd$St!*|JHpZ0Ecz<UpY>Wo&#V(Jn{u!~WFU6b>-{2SVX|&Vf0M!kpH0RAac<u8v z^$*At$lJ%s+pEkhtL;78n7wdo)#lpd?PV5x?xL4^aGafW<hyMyx4nKR8V2d}@x9Rv z{RfgFXSddrw_i-4RDwLnuF^{Lu4JET=j)|;)3pV8d0H^fu754f%Yi?e_6v-h;%~eH z^7lcsVZHi-ycs^e`Bjvad0yN_a&6u$aPte7FAYv`waZOGFkL9HQGW2daLeW`aJ2_7 zVIDiK8quo*6<%MJzBJFv|M)jCgY+O40g8vN03kFRvTe9;x@o=1)G)eb7L?kT2d~uo zrdi+_w-xMj;(zl_+#|sZujb(^GZt2wSHu?N&EkIn0%}Qs{kWmwygS*V0F=*voA&Jh zZbOV&?%z&YEc8>9UW?(yH+NuEg1l9+!=FR#$O5yZibs|YiLY^?lfluQ1PYl`-HCT5 z#UsM^E7;;ZhgY8$K$?}~md}f55ItKIj+`b2>GXNiz<;pMn}I>Z&=y{H7&7GWgS5|s zvyx}$k-Zwp!w`Q+i|byn6)F($l|J?cCI6*J4hDK@o&)}};m=t}MaiN6#U%s5JO__; zV|UD(nV?k4MwaX~ANRZkpPTZKTL4iU;9!sB;nHjP{0?74A(^%W{&J`kmlp){W~pba z%6WkMEPuqv>Ej*8D4}}aQd2NTJ!8R9piD>sWW_3i4gQpo0y5?R9_4^jsgExcn_<wN z(LlV4$V8xU2CmT01~yw@3XX@|K+~mpMf{TEVoUwCc~HoCQ0{ae<Z)K;N5!VV>dSdg z(=ZewHr+t%dmqp@sN&1i*@Krt{ko`r05qF_FMl?yhTpOfSLFbHHm|;D8l-aa$!`m3 zo=i0hQWZAk;k;zft~cRf+a`Y3KOxoHygN;urFnLmxP0K}CZg9$fEdj0fCjR$No<$C zB)R2LyBb}z`gVF{>=!rm!Cb#Yy>A5`m#`quMtmS$<E_B9_i_I_Bt0XO7{atq2Tod? zmw#Qszc?;dSpf#LB^6v<rFnPOha-~&-<F_#VDRu<Z1wwYGX<BkrFnN2oCFVM4&+?P zq-`&30ass~pMJx5<$|U|!SkBE<{NxwWgMQ_)MjZqr1au)q$#axHyXb=Wv&zTy8@46 zHlTa}^ZWSs1v&-C3YX@sksm-i2$}-tUw_!fys#k7+Wan%Let;{&hq4U0i71)<sz-f zenfheo8gr`?Yw!Y7?SSR<k#eUe#&=q{XC=(G$UxCyeq-RwA;XPpa&+|*rFBQ3S^>b z75vCMw4yEth~@%Z>mNK9!2thO!Acha$|zWUf|V}$ERB_vDRrhg6f8N|19H4A<$pMF zG<KU9q5}@)pR_>Vqt^UtF2G%!Hyx05!kcND1)j3C@j^u6Ik>kPWfkn_b>oEkYbiy0 zi&DVHBk-{7R`@)BT$&lmik-vfqpR2_tPEr8t6goYMh9M=26%-ox1gz=-{$IEWnodU z!sn~&vK^KBGO0d`P0;+dh*hhx;eWe&iA{)D*x~$6Tyg^bOQ+X*u!6UL4fkAf=6B*Y z&yY+jbJknfln%*ix)mqCYIfO7qWtxZHWMxbu(MBsml4E^^fIZE;h7|3sw=(x>Cds! z_DcTnSgQT4+B#=vSvH>j(@{D{0-b6AgMaGXgi*27uEQU}uZsux602jy6Mx7LUbWv@ zW!T=hh3kqZ$*cH8Q~JedLY>Wsapwomr_xYJXqg3jz#p<{UWsLD(^&_2uPd~%nCxa$ z=({A7?iujuo*pA2fIkOh546k$?)Udpbh>-OjaCPLc$aC|@xumwfmHl#=fcleR58aC zEUL3Yd0fU;%2d}#rr?E%`G2Hxsnbk1fa*<>RxXA1C?B#(ki4@*BGk^OTwY#mr}`PY z%cWN+$s??7#Cj1VF@`@BJL|`=8>J4(Y(fHbl$s^ehy#`r=Y_FP)X&c}j1C+@?wa=% zz@RJ}H~I$_@mBKf<Vm{rO=(?rs{2-K&Gldu1uNCh9jg{rvvp3_yMMrjpQ}+v{l#pV z1niOEjg6-b-dHsTC(~?V^C*Km3ic3xxb`g{0t{;VVr`idK}}!{5|$dCI`kR(dq?Il zTvF>Jx<@TkAhrEkQ`;}6vZ{JS3u?Cyu+v&&KW^MPpuQ%nXU;TWFymL*@@%m){y*8i zgM9}-bnR`J&~k>(gMZOyobT#x$aoc>3R?ArW}NQsYB*0l9bbK(k6$x6!JiqL+ZF-t z<M7v=2nxH_p5(x8;J|L;z_G1l_%Tnv=I$*5q`YcdPKP^Y;eV##K3mIAT1<|1JTO-2 zWi@zkRE~Ndbg2wBPXd8EPr}`SY+mk+65Z*W9S7t1r=!H|zkdgGlY~2$*|gQ!+H$9Q z#sM9_4L9veVKOl(2gJqjm30K9N~++$7eMMvMhkY9IjK{cI?5yyU$paV{Rj6D>bK(x znBWaanz24UX_7%2WttAy>Yl+)w~eThGbTY5&!Df<JxEkJ^(x6o<Xw`7iVe(;wDZR| zUm)b}S<k-&`G2KM6x&;SeSuz*pO;vWJhXq7ywh!ycY5sBw#%SruD?5@T<tnjgiD1^ zb)O9$q_>|lr2+3znxqqp+D^UIyeswmH!KU&SliB$N_@AqRQdh>Q+-$zZhCZ)b?>A3 zyADSGGl~X&2t(f5#o8XNqBFNno!Rgn=489>&bU$CbAP7T+9q<JWk0b0GXF?SmJQ)w zCGS-1G#&Y9HEjxaDsKH`!#@)s7OJnEDYJGA2eJID_(1>dx;dr)W}l_|(#fWs?*8ct zZq|bH(2ckuH=C|0J@VF*RlFDHEX7`4yQQiMFNUrS3{oG#1Dkf7f`0Rw?(Rt_mprs9 z?XQ?{1%Htrk~n>pV1hRGa5{bS^-3TArG!heTGidTwT15fb)(q<)`3&@Zonf(`;B>e zeSE=a3Op+kyHu-Do4oOx_zgS|g`<mC!CvD#&<EK08guGYp2v<0{wsYIEXs3)rJvR_ zN5*qQlR3((*nqL#ufrWT<Jzv1@<SEq`_QRHxPJ}Csbf=)UD}Pde%7lvg3aQ{h=uN` ztUrYY@Q!wGRow3cv#6;xXvg?2PgLISG)KmXu-}41Go3cvq`gd%w`N)AN$b~UOL4t4 zTaq7XYuXbWjVsyO;_hhJhOqRic*TDQ&iWt02|U+UCUC^ng#Z>3>Q#WuWNS6#z5sJy zAb%+qqx`bCcUV&ES(2`AjGKa^=F8g0Aju<Rk(hH`-Es)$tMHrrNUQphCG3s^K_A9r zN^c!%0ue7*%lx<oje_@T*(U{iw8oh55A@}6_4CZ&Rr1b5^3Hd3=ixgJ$pyz|J~ldc z0<^SOk~g=joq*KL@Y2b41j8C*#cKRN<$sWd<<OU#|8p@J!;9&(0(!U?{pX|PjTJbp zfdjKx`n6{V<N!Fjv!WPdRhCG)^T*9KvGCFxB!p<x^#7LADsrCrzvr}woL~IkbDA-y z`mrQy=i%5YNMrrxxPJGk<RL19xFO}c>uS`tsOA}<s0&xkK=7;b&b{)^Gy1I8nSUpC zM_gY2vW&%;K<o$$t)G}R#%AiX?$c+z1Z9R7TqI!utR^}iN+7uR{ed+Of<gYdesff- zvBL|uyz?Z~KzF{uK5hG_l>aI7$MQdc{$c$j|FqgJ&C?&5G!0798tt3dbhZYJqM4(i zEP3mRlDTn@J-lF!UHRuZ_nTDvXMZ9Ncm_!|kV30Dpw$ex_Q?<Z3}*{G{kku%`Mc<_ zFIIuugUegb6tr4D)0AF}J8s;sd5+7kF36J9(`LmQcONJ?RB)2Qk)xV_5XWfnkSN-~ z|45;~Uw-JHrlI|1UH;>;j{CcUeACyS53n11t&KhMt825Q!p3gpdY7la@qZ$a*3iq# zC{5w;G{NH_Hfq(=8EZ%5;eZR|GdL;LIDn}aU}{gV)ziZo_XCn<3GmSElj*h)PZr>Y zOjN!Gs5Cm`?!jVt=RrLOk}S1Kg*8WlAK<>89$u?{h9%U*^u-g-X#N<h8Nh@FET|il zXPln_ILjL^Arar@I@)-xtADNWYNC){34P4pYxM*2L5t*iO_>BYSs8FMR(^G{CBwB> zkyLlgiVZ>&0+;)bTX(tI<c<FWa^-S=zZJvATu0@NwP%nw-3R2YdmcS?nr1C-Rk`Jk z)@v!y19wBj)&_sV$3FlKd$VYH*H~1IiseLm-+Q-!HOAtoLC*xHyMH7{VB5v!q#E5l zm@tE{aYsp&4hU6B=2Au<ZfII3@de9-6C(Nso>k0q@fc1|FY`G!ypQv`>St20n7Mn^ zHBNJIX8IRP@T=mBH8?e3TV(}<t!_r(@p`zi@J&{P?ZlPm=Kajy%SxPHI->2(0*d8; zLeaG5G*vPNkcrn2GJoyNGmvhl4skuz*GDGsAIFH@WO2qZmPjPNBLlf(ou;LL5s=o$ z|FK*c$0It>P<l^{@1!{(o7!UrZHC!?ekO62m0_Ny!B<;HVSUuLQ9l02ZB!*%fZl3O zq#g$UBC{ZI68@Yoh2LpfA@J`kCeIPXMn{QFoIT(hf)^Vq?SCBk>A)ea7<_|RN3kuD zg&eE@t~@W6Hr_O%wDkNgw=FmwQ=TGmX_L46@J#vfh%m4*e)%3YwH*M9ciK(Te}g}# zgF&e6=sWo6Mhl?pJqBy&!}BF0xCz3Ym<P-c(bPlfqsaKd`NTR^-x3iBt?1HGOFVL; zU=WabC4f_uAb(FqZUtm35FU2KIm?Ab>5l?o%;}UEiNCzP+=geOV0B9*FF!EW@X&@6 zIMv^e(+VNL@e(l>JB(ok{3oVwkR0Cl#GI8@2X1rU7&8T}aeu7teD3<T@ZijKCcd1i zY2&B9nH+;k&_j3U7*%KfY^WdhOb6V9X^MqU6lSUBj(;X4gP^E^Uk)VChU892?tptc z+}kSnoVzI7@c!De<PtEsea$Jet^)?##EC_X*(PN)P4D#K3~E7Ztrp_%#^V7A<EQkV zx8reNohd#s4{8i<<;*%$0E71e-O$>Bfi>_G#-AnlLs>RsmI@xDbuV@=Uq!+wTMyxT zob|=SV1Irt&Z}0VMGd#nF5bFvfVC&8FD_mWECuDb)5}@28iZTs6WO;(Sn;SRD1Yz4 z(=AwTe%rwwFTws1ZHnOV^3xV7S#5NhKw1LH_*aLDorI+4lM=-`q1XpNIq@TR1I<lZ zs2hOuPIwUe5C9Kb6nkgr2)y3ZV0A=Bi~EfY*nd&7<sIWO1P3=i4jq8k`1!!_&*vq8 z?1wKa4IujysoanXxfZ^6!MlL*z03HnHaf7!`5oHk-9`bsQ$InrR(M`wWNS@+vtu^5 zT?@TzWP3UF6J%?F=W-)kOY&Px^lwdn4zqoghzP|ywawcMINK7K)14N=gp?0pJ`4Bj zSAPkZ&n96y>D$xrJi{pO=>!ZNiRojTk!Tf+sN!XMmw35bylfROUluQ0#LMTz%V)*Q zr|Bhb0t7CpQ||&4Dgt2zxF;?HGvV>XdT8KXoam0wI+apz=kT!S#w&o~ZcAslm5{IQ zlDbK}6&IC&`s}98naj7~^Je4_%|V&5SATpvJ#%*ue%9kpYN7vBjb2eB`g!2IT(c=K z6O!pVrtt9@wC)0$>o}7075ud-;{gfQDCCQkU$X}8=!>LeQP-vYEj$ASf8~CRf=tQ_ zGC3@f^Uo$X_-Eh(50if+sd0?c<+caM0u5arM=%4PBRR~U2U&9=Yfe&f@f|s&SAUcG z0qh~~2z%(rIqacM_kMBd5trlQ(j~f^-6S{dpb@aT%LBQMKt~(?Y*{PX1P>s*57^pE zlM9~xKK{~pGJ3rHTAGT_RU7x4g1L291a8ADmO3-@@2}v0yM$6{?jAZ-JFB3zZ@+~~ zxiY1co_j?pb-0=es=Obn+*1L9y?-iE$Y05T$i-!Ibr#x-<=!hu<^#ZcafrjyBP4V1 z5qhn;cN^&{MLM-{w<z8NsX6X?ui^2P2bk|p&5ws(vhsk2gPQxrIAGnp6#N1Pe!Bk% zV8z_Khse-N3m~(-JU@vcmhu6x$%e-L9|6@G@cB)6u3Kc#1}LMKo(GEZJAXMOIyLuk zJOP`~`vaOfp5tm8Sn6F+N>vIPUH7D*5l1uxsk)F<w<Zwz<ritBI_~A(%M+yX67(aQ zr?<||3oFx1V!y5JeF=@+wT=bIl^$E$dtfKP^XSDUWe)INTMtNXcs4J<ouX3GF9s7L zkbO5<#kUc{U=`m(8^k58;(xT%)05Cy>FC9v;HL?7mkk)Fec_KxBiyN_R;uq?l$)Md zdAsBQ(^4r)M-hM~P-KhEi!0KArhVbxFo3#`<E!zSW9Ym8xCTj5p1a_A!7vNn&SzH` z7QDOb>_)s{e>lj>xTq*$!K1)dmXdSuyQdRl$2YNwS2jSM-Zv|GPk+!|m-$J&zK{z) zycj?Sa&NOb_y^)#pa8zcd70`;P+Ve=dBDdX1%Q!<Q+$LG_LQ&>p)#AWiOjk?hANzI z!!0f0y%`6o4Ff14UsnDf{4Kj#4n2c|j$5CjnMma4KVewMyJ32^^EaMDlcx_Ic76ri z$0tsQHhQx6f1sKd{D0YGdU6I<c>2?rym37L4OmkAmm<%1F;DFu@XOlC{FP_vW*jj7 zr*|c$CnoXCXK_9pbKNO&6=1(J^Ph_qgHKFH;<lQf#A_dhKcV1LzNgN{7p8Sf*jP%@ zXV&N@F%vfXwhiJSxw3iy{RGsJ+p&<W=TL&Cu*O8R4U}=}?0+EeXgrv~|Dl;o?GYpd zZkE;e3qdD~910<wRzsf+yoJsC6!n>a(?aO};zC1e_NtA&reGDG<oE=F^s=#!0V+OW z5yuZer7x=!2R$AWI|0NeUbzx&pk6%oytlJN!V%oadDsPdy}ax)LlQ(TjNq=IlOt%B zSe4O0$Gtkyh<_B^2%g?$Kb!rJO%7Da{j=B@Flipkq;2h~xf1-eX#_v<bMTXPJMVP& znhouwIE+Rju3Bg|CAJ7d9D<ohRAsR``*EP7DL63|oA^Y0nV_XJ4be$opp8sllu1dI zNDT_Yq3;9Ju!?P;Wu%9C&!$}0<M%of_2@0LXh57)1b_7U7tpaWFv6YYeb`b7e8?Ki zB;psP6`{sxeFJ!Sy`p-6^wck}n1OL*CZ6YL19|4}fjci91iC^TXVuP-n%!yj>jsN3 zao_tTLlG(MXQqmoE+v?0Neub2Ch7PbPdYvWiP4zgSn3|wfR9PoJ&o-YKohHt2TaP; zz>0OGLw{-mrgfx4zW!;74xuzx^Iv`sorFn3ON*3&Zd8w$na`LY#$vkSeKYBJS!adr z>EW{_fr8w0HAX1G8yALgnbb8-lN|anv3v}yuT?9-HI#Q)W@DWHx=Z+VRM-_%kKNdn zFe`>~f%fft(@O5Y6$c*d&6Y48kN~a+*f46VMSpYKX<tY@60{X_{SW18?R&yX4zaq+ zjIr)vJek=2GA6j261?2E9uoB3ZxLudf-i0A3%H#gh*vth1&G*yrzTXOwZ!k242y@f z0P>ilLJVaHKevwHEI>FoYY(zx<y}MGbOCO7fEyXxtp1q%Y6<e*C_oxzAl56U`CBmm zaeq2pzNPQ)Xg*zZ=MYt%OHk!SO7UD@8>HyNO%ZYHSnL@N;#OhX31o04jo}<tMLIGU z5i;lFfCo2g?roU%+XQx7AFk!4&tu{fXMl)PqxS?a;hXOm!sOWmCeta)vwhcF63r^B zIf#&dz@Ww)D^VkiRP~WLWgf!r;t|-9%YTBsb-)B=UYt_q(}^-)rkzutrix?gwUBx+ zqu~;MqHZYlQ;F0MQR=7qHj9BRD{e^PXb{ZuI41ZWC3w6qNP><Aek14Mo=?a%Q5usI zLpo8HXRvXGXg*x(x*+37cyyvQF$!1!eGGwS6VS){a5ydUCtUu$%cA-1eciOtCx5Wv z7EJZ2*f_EePu1(g83BAr8^hYvyPYPb-msDJ;8A~9WE7Y{#O`1SbqUAY1+T!l-f-IJ zL<8R)BEcgG5-=*}k-i@hsQpy2{eTtjRK5ul)KP*>kzk}wFgE=cA7W|Tx8iIpE!ycK zes@Z-8xzGk3F^kkRP2HuLYZNFdw+%meK>+gGV@PJ8XO1jZgrpG-KCFrbrji!FrkBd zxvz=XOe?n00GJJj>AZJp<Ixf;r+38x9BhNv<6RS{eNS=(rx@RSD=(dh=BzTBA8Qj( z%wiPHmBGIY33F)7&&EntUYbD($M8$G8pTOQapf!3_bf`z(9<4^xYx>8(tk*(-5hby z&?vhJ^Jtcl!;!<s^X#ELplpWVe=!7cBt4S$BG{KC{LD1&L}Qo0vPk79s;-zAaT!C> z&w|nqyuzp{I63i284Gv$Zri~qz`)5~dr}bz{gbYZ!xV|?NFDFHa>yzmMsS!`PbBk! z?t`NYt%?JvWLkjc!|804D}NUUqNIHSxSMK10X-i{Q$UccfM5KbAq6y)IM9th2!d~; zfG1}QCg}@V3~c<sxg8di-tpj#8{ijw!(b6Snj3Dwt*^MbFeC3a$+2n-8;e)X(*vE$ z?;!g1pf4LBHuc!mHnWf4+bRNMP_IHVTc<?~UuL5u0Um_>$8pVlwtwb7&Tx5M^aU)@ z<%v!?M4hc4YW%FI@q&~Zw||&c<9@91*J@L0ydb^C2!g*lCZ)zdCMOezEuzMNtKG+s zpGxf13UV>7eCPimNxFwf(v1h#r;#MElSsnX<C+pv-x$QhKS-4w6eAqMphICRKX6bC z$0k-Sc<dc!fk}A+lYegzCWWHF!ij{*=qCsf_YpwEL!N@?2m=Ko5FzIG@^@bq!{;7H zp=S_7Vl+PoYOfd6UXem=e_tB4xk;JM+g2d8FA>yUkxp#{!M&pewJ}L#8Z|W@DCiYJ z+3FwcD2WS$%SJI+gPLuGSD5Ti+0Z^tU&5LoJ9Zn5$Y-C$zJHtj6gff{rFX=@l_1mj z6=d`~BNs%n(?5f6F;09NK3-lI4=kxpiHIp58IVX(RY!Q^XYqKlYdf%F6w!`Hb|j6+ z{Wt^#Mx=K=8Ij8Z1NRY)Klvby#*n6z*L*w0h!iOU$MFX<^N($WE|`3V!7Q}L5&i}q z<p`Faoy<um7=PsOYe8M_%v%S-<++4#d5(mO|2fc*YGW5-6~2$KTAsk_)^x185Ub8_ zrC_x@1uM+VZ%$y<It;5K!m72ef$UMc<{9X89}p^f0L)VN2VmSo2Z8sPy5uujH8>sb zzm7Q_>WgGuuDcLlT?((fb$GVn2VVY@SH$S3ds}1*zJK$4;KMZW(>S=g=jFslwQ-v% zIAKI-kxlZe{twj8t^(!c&Q`m?NXUkd&Ev!V4{#GJ)Dr`d3*=WlAE>AEmGL70Ac@z4 zh;x#M2PD4QXnb1tpjkTIFApQdb-11gZ0I{c8b;<|er2YBKOKd?b2PTkSD+v;j@0NH z9CL@;@qg-POBDR<Fq+S4Gl>Sq-0lz5Xj*O~3+8sitxY|B_S_DoP!M3cGCh$JGa02X zQ7%Z<bVSu#uts<mms4}|I!WH{|DXaZ*c3(5FMNqe56x&N{P=Xu-5>D<th8^J(MmT{ z(o2&`rwe4hxptzc(>?dui8Ot=n&;U_7Jk+I&wqm9tn%v-oF!7rJpC?@v)&R}3W`MC zYt#JM%zeP+=JgYq=YY$@l^pQ22+cx&|7w}}56D~nPOHCP^B;(er&h;p#L4foL?(@B z{l1GS`e1+r=>Qh;zD=P~lwc+{u{*)ah)cHmo}^qsiOfnB0`IW|M{Q`t1nXCirvw&d zHh;W8@!c?kuU?*zq#_eG;sF{E$xh@J;MZfbQLYr}GN6q&QsMC9siT_b0Mrlsp%i}m z%Sq(7mXxrzgnhIi&t9Ee;atg%vS6O`R0kdUx;78&xVAoH6e#l5=1jH29L`cZ%|M1= zep74kYa*rc4|WvNDc=BTK$gE$|85OV7)k~yu2+8}X60Y3G|zGCvgPfkXs_<zqy!MT z3Bw-5TjfImBq%;Ywv)Fm!{rIf+qKDRr-Wtx;>GxxGwWEU^?*7MFWAK<sU6a9O=k0k z;PIwI!7H0i2B)6dWirK0K|5Yeab>qQIg%}+Bj9cv+?nW3DmX+?K`sMadqJy~CCX4v zLM4CX&}v%zDzHu+UjS`TO`HD$<r{6RjUBXhxXv`#Tv7S{$8j+I^m-_uK1ZFsUIP^r zoKRh*ejuy=lwD_*Emt!7j<+T2>x9~>?_1T=w))FY{3@Qe+3`=4gLTq^Rkcs5x2ru? zYgarkl=lylBc7+{!sktJeF`2o&48cV;IDrP{w_V(oEgq)E;EPcnVZWj05&|&qIOu- zP6EC^30%L?luS#h%xZ^4?X+O3Unf&-5^10j5kY7Q_!>@ykp-7QD7PQ}dg1Rl{2hV6 z{qVON{#fZly;|wRy>R7l<#6qXYd>5E;5q=;LAVaWH44`#Tw`#J=@K5QVX_WbqX~a% z#Ie%T;BN-}mE#+?ZQ1fY?VAw8)O%5T;|;EZNu>yoBav1QUK7*T7RHP=$Qx>dv0t3{ zRSe2~_5&>U)KQ@H(hsP<i8eVc+9V&_WZOTfO)&AMR=DqlKRY}$msu}87@lWUKO*XV zOw{{R3TVX5NHf${A3;iLg>XvBO(}orAkk2pePmTXMwI3ItAI<>Vc!Oq0Q{|lzcui; z9{$1z4E~<{fZ8SpXq^MsY`A8_)d^Q8Tpe)5?{>J_;cA1c4XzSgrS!HDG<q3+cf;Qi z_~Rd>v`v{6uuf?UdQNYL)OTrZceeQe`1E9HgXBoeU;3WFCnH`WJ?bLoY~g<sad70o z;yeGWF%qaOhipz`{4g+CGPQ#BbD<a^rpNfiSx}HSK5-^o($a6}pJ`2vr2v~Yj`6oP zFTZl9n7j&g#l)T*bqnfDy1qY#le)|QOwjes_z|2>J(NoWy)h#SqcfEAg~+9a4&WDk zKmKm+!r!0m#^2{#@%NRN;kSQw<7Q45{Wx8I)<T!ib9DLDHoE-&S-3p*aHt0^om8CJ zWCm+Y()4b4(EXCOxfgHT5-X2s`jIbitk|v*ig-ps2vMi>M^L*=EGOa*Vk}50-0I*= z#U~cwOF~|Kg{q)r<6x6=UJ7N-d)0`s!1?LtyHn?<eW?xjMECs^*#UnBzZkD~rbd`0 z{CUIZ7E?uMY2_KFL;wxC^2+(dEED(_)wEP?G#{)MqZPKHP^FadhLIEHfXz3P*buM` zz$x+#a^jt8V-9({Ih__ec?Yq`WmM@JJu#U!!ARrD=`>@Sf>tnOemY`6J24;8Jz_qh z_nh<Rz2eeC>?ZNk*QI~XpQ^J1I6cwee*&-Mx_aS8`8wY)fo8uh4)oqn{vRHd99Vz9 z@c)jbcmbW1gRC8yO~iZjUFqhDY2<ZwtFy1X4QG}>Pj<V;;yro~vx~lmI#C%SV|TKT zf+t}H#(@Ot?i@hFOBT*$38ybmPDqLW_&>>{&k^WEaszqrF_3?onqv3MBFKkQ^p#r3 z<s6EV9REb_ZDMvdD>->%d%2+i8#WN#kOXAr_of2EuqbFVcXp@APQ#8ggkazB9>F~= z1#h5fo*8LneFbMvg1Ld+8`6<9^NUhpQ{-Zv;imJaUNWX)#gw~qc**rx@>rxc+Tr2` zr(kYm{^N-umg9e&MIx-tbG)<ICLFEfoh9~{Up#(>=9Fz(xr1Igt%(fTn5+*+8q_`U z{ITWGrY?`IVLY3Nw^qMRqnpU+&J4Vwefh*~_yt5XUfEdub&XvNzYTUa5udb)_@vHW zf?N|E`vhJAC#_t<QIg}@#0B^Q5E_eLpbH{Ol2Hd7Ho$+;$>X>gND1)MaohsjN9n<b zEO*kUZmlF6K@tRXLnclKiU4CBS6g$u{N(RR(Bg-&_yJ`CeA5>=a((>h?~NcrTZOzm zqd>%w9ar1n)2oS3$JJfAn!jg6gzVebCg#_BzGQyghl3mqQ(JlrUkT%AR>^#QC7S(4 z=bsO5guH*%ZPReo#!xH`Nx_LI0>vx}ZMTGSObDIxP{83_O00s9H;_#mLiumy<Knmh zH(fryU17+_BNbmJ9|b?B0X&>(2;A5?X8O<mFCp)u|Mh%6w8G?TQY9QBGBjGGCq|1( z5*na)L@OHk+yC47MYTWMnC!rzUmQQCh^h<IZ4ZBFlB>nYZ{JI}Jp;=73n{Q-a#DxX zWF|shwqy*+<|;Okgfouj8N#`DY`SnhWEm39Eq^<ga2`v-83hF1u!$s{{d`C|ySXc4 zm~_5-h(CC;CM2OPsq(pk#+5EhBo6RUiu5hpkuINihlb1Nyd5c`532ttja0>6Zn%x$ zUOs<B%9t;(K9nLfKip2yb_VQ=fV;fu5_`|~6wrK%cc_!~6;LS-b1(p`F%(UI3$({& z^boZKJ;N$CJ+<)fZ68*#5i)&#YUvRl$)an7EV8LRF_lYR{^pp(SjRP_aC(|j0E|vU zf9aycP#d5hw2F~N{*&<uGveaF7Rnqr-#UN95WhK`9@3<K2*PWSxd(A!z|hHbIHxg_ zc?LJ!O)5bdg`?2-fS$QHU=u(uO#xbw3N*3;@};gjP@F?FB&F)0O~D}%=?j<7vFaK` zJ#a)#sq56|Q|r2NVM<-Y7Ng5tM$<4DWjN^Nue@kXB8#~YoT6WjLui-cRB&4!wAg=O z1)urCh(tG75U3Ixp)x_%tyO1}DqB^^`~y$mZGMU4NxY`0z}S!qjEz)*c=91BzWj2B zMmIw9QDVFy9qGz2v?8U@NJm1Eq+0sv@Why_+|iIn$1KJG2`{Lt0->(pO}`c1@ciG5 zP-XpAlr`u5#+Yb<Dor71PEwo$7=3??igSSZx#r6j1%c*A>MCEOUrgrm4?@GQq~-~* zl!m|gU@A9x23(#&9OjJDuzi2uyJ7%Wy@5hR2N)GuB5B1^WF{NCfT)L%X9>uUr9h4! zNQDe}%O#C+AiR4dQ&1K!5u!yiN3ItZf`Dfe@P3m5Z|iV)HenDXOpkGFBH4c)?g6a? zZ4b{tvN$qIGz+{+t_2v-jMV)j^{G7>H4+sUBWm8Bs^;x3w*%Dtqw`bL{C9Bm>sA~w zB%J{@L^ZHI!?5<E;4@SVsV^aT`3E9IF)_iPOVjDGRoS?14g4*f#u&7^qh3DlSB42N zm}Y-~KFyvrOrO#re&^7qotJ;7MO-E{=ycMcBbNzvUv4_*G9knMIj7TsXY{4&HCx6| zbN0OU-#Hz|3aUFL5oM(;!p@O#jWFbF>U%M@PxA3^WhR8~*Jv`RM@tbzo42J3q7QCN z2%^5p2-MJwr6PI4<g!)NSyMIQWr0?0xSE@t3b${s2*mO6H^z*R-&cR6RQ!X#rtz^@ z0~Vtx_LMbXrL^G2X%4#5zgU7-h%Z*`CA0=CFg*pjmIi$yIYRGCa_D;)gNT%yE+_{A zHOI&EGYqoHArS%*Q||%3^-yF0+Il$OE>h=;CuH6se3-O(8z@O{AUl=bmu*F;(+p)Y zi$r{G1;NY~P@JSpm_2`lxqX3fI3@Q7e@HO_(okmT7{r8Kf0y+C66QS*rj&ihAO4S+ zFG<aPRVwC2D=D`_sVO=*X6WGV2dL@3o6>Zz?MoBISY1?&K!9rv0{HmoCk&qjbi&V{ zBR=c%iTE8T&7zE@J^~urE;KY&*yXoFfscs-SEm$MGrU03X8C_UhoRPl7j2P4odT9x zh*|)sU@;bfd8NqLpCBdRj-h%HMLdvF#Akccj1>$jd6I-OK)aiC0KKEI6wML2jwH2! zRw|%vN`dz5aA=k%g}ZrHTD|j&AzIbbV4M`0hAZ8QoTdbE9I08zD}36>l^m}!;td_9 zbHp2h{GB;m{_cP7KZpFqnPQumDHgu}#erN=&+e3Z?%tC&Eepx6;nUqI;Sb5gfh(I) zDgg+-(}<bCphNSQx*Li)T`a$oQuK{`{yTRAG{d?}(-aB%g~u{Sh`#<5;Qd``3}>TR zzaHlAN%Si`D|s&S^r&}(<hvp50}4L+kRtd#O@X~B4Yq%~=d9hK2U=Y7kMt2wT=HM} zh{kxeBN23gXP{gtZ^tbyZ1Q%DbD#-Dn`>_n1DmrVhbfRb-M#>RSu%oOdd|Tw$&oB$ zx!%95q{FS3q>`TZZo`!%xVj}SH}#UO(sM>`dP~$<Oc|=XGBrPjxLV~0H<RK&5YG#h zTg{HZ`i+0XHQTp;o2uC!faHOtBNEL?O%z!Xm^mUvPFjkRfOABO&z??AksIJ_c#7`S z6h?G(-(CwX9zv1`+s@q^v593AehQ?Pn|?z{x{dfMR_+`c$Ga3)Yup1Ic0u|V3y$jI z7psz;`h_`ll=hnc2+q(R=>Z&5^-?dX(jIYwGq8XDJp=@l(QE>O%BWW;qh6tmdWAAN z;!9PVCjQZHQkBnDxK5=N*IxB9AG*s&ys3K9#CQHCMcWu*)v1GHP&5eZUcGd5u9ugj zU<YX2P1qqKc2R(>;w;6bs74d_4#N)WNUE_{sKz4|sk+d_FFp%)R5FG-KS1&VN+&1i zTH$}_5Ip{9EP?0>TI&voUQ0OHMOn5)%0LlIDeh0dP8~P6#2|H`r8y<dL%&Yrq;6r< zcbkADMoF_rl!PcI+YRctG8N$LU#F7<GdqR|3GG{&nta@^(?}vXdEOTkQ<N@_R!mKZ zqvIpRk$$5In9}h!{JjK!KZy_R_nMF|YyN+0eMItw78BUw!O0+!jlS?+7e*xzipcZF zMI_O2%`cYFT^#7zND}z&tRV?Ju02g_^<Ws;J#$jDRx)wmDHH?<f{&v8E1iT#WEIqX z+J$LaWh^1+5eQz7!yWHSL3?Kg>NHvfNz109Vszq3d^@DHa15OCk07x1!v9|0CsluT zBEA$I5)|*(K&$2o1K!II#uI#tpC$?AhMvU4798G<Ph5~PuQ<HDw)}r%KOA_7TH^P% zp_XWB8*V>b%?D<sv_vv-;91B`AozXnQ>H%QDe%Xq4Abt06P*ZN9Yx*3Oik09(Kr=5 zi`&*&x+&Y}>KG1M+Dz_t<gg*7dr*H$_t4@HWDvRO0Ey?Gq^Mn6o2K+L8mmZYCyaKt zjV;(DL9r>RaK>Q4{Zc9voB$|o&W5bkVh1L@Y3PFnA0pLcAV81*8iB_i-y?c_PetI) zhf+H2&A&_^ko5HU0_CX*X8tl&RZbO~S}+>^(aNtxy5TsIRx*7A6Rx}9+@61R+IWOB z>8r=Qx~HH2`yj^s^z$zc;WB7+IVT9?6koO+N`{Lk`Kx6Fe+`^-ezC_GCV2e()b<aw zJUm=6f8&X?xibp%^oWH&=hDg3DE7bC<?fN2ax8*NhFn`~@bXlx8=N9`F-h2eibDtk z^*x7@(br9JwL;IX7V{G%vw44cLV*M);PPM6yzz-%T7?<RGX#9#sfSZ)qCB2zgj}Ak z1Oi)9liu`r$`G-k`~sU&Q%p+*Hq7#nL+X&`6P0iK%owUp=#9YARA_JgB8C0b*-L4p z>q@E^D#1j>aJdTVdtdTBro{8K9k}F<f}i7pNBVwlGAQRXE3Wixff;|PWiR_hYF$0O zG@Hv?1enMz!)zzz#{W<+DHXOQwO+V%kmkRZ8Yp(0O(`xCJ3zJv`X3t3iqHK#ZL0Ol z_p?#^gK5VRK$m))|MInDXm5m89<_;;M|SldhoceqQUEe(o<~p_KH?Aq4le&AvYtuK zx83TFHJ9gxJ-<L;x4(Z*!L0>&fAj09!L7OYstjIv1Jx8I>HdY6Z~u`=gs^UkOf_D6 ze&NHEIhd0F^M{G=YU3tTa1=NkztH>}5tWU(LM$|UHij2uY~y3Dhet3}w{Y|IiCrwH zkbty_Hg~yWkM+fC;AQ?n9M!m^)v7PZ*zMzopTZ)5k!VYVoKb%X?Qs0z)GZNy|8<03 z!T++87I*WX;j?FpX6xIFi+B97j?#(SOuBnFkaU|bus^lI$NwyanXqn-*J!;jo`0}C zA+e11nK^X4iSF+5^1smtsYHrwGA+OxpA-eb>($01rr<RJ`=;Ss@$<)0xB{O4KzkHR zDVrzYsUX?ghsl3S-xDj0_@fb1oAjMNr=)M0d0X1EPo3TKKNz46RtnwV6vhPc(%Cp# zyu=ZRzy|!u+eAARNKfEvFTY%9;U`<0abz2RP0BY?@-(I9VPo;Vj}N{#GSldm3(&s& zqba#aH8Lu>;!kaiIU8|_TU$>?2I5bnKbTRInj_sq84`bMydZ<Mu@+Lboz6fg?_bpR zekPOj$2BN%mL-l;P3QP_hSm?A{TnXfhi~s?bZ#gIENB5KgO*8c5564;D8HJqbc2K< zJcFP76(}eR8;j`rc$Cx5(?jcTHZ<C>M)fn`W()Aq>U`+rSK+I+XolJfH2%wZCJ~%u z13AB8FK&OmPbVDPBV#E}Bi9$7xcDsQT5`V(XXB;h>jSL26R_+lu<Qmb`!HDN#t+;? zkfirvFS2Pj*@t6XDN0GfZ^?he&z=I)E?^R@tRYzTVX#u?`%@ybl(&o-is4;i$R4&s z|GHXi*BvRM@v<V5F%%TcP`l!he1qEWn~F%aW0HTXenLsSy!3Z;gZp`5$2`}33^tN` zkme@s7}xokMOllpAy`iv6dwFOqlr*9I=@`(K@~NvyG5)38WiT;U<Kc?*(mj+XGpHP z+)?GC1Q=*O8k8Ia&sgpG0++26+rgX{FS>HYi^QI!qBJOLG~6bmT4KZ2i<!Ao(Bkav zh4Fu1|F!*}jQ=9n3_zcjQ_VEPe8Z00LmjsV3|1FO30WT`wbk<kNr_pTz#e;B3=oN) z&!lD|0h%as)2@`n%)W^%V;&O+20&qE!)~We$ebI1I+tO_;O)Q;X63R}s9t{L3n9Rx z@!*i#5V?UkXGTgX)UKA`#i@`h_)n6#aU_55I8r__@I}VK1!>7?zm*dL(e}Q<Gb1bs zGtUq-YbR8*z&?p&;5xsv_}b@aFVpP*cKj|qUT=i=HZ@TGL(*7Z4{(y{e9xbUyKYzU z>%Nw<B1fbQbmI?Z=AB23qcHlapj8SEiKR%pG=Db@ZcGidY@#BrPZUv`UPLz*ap-^Q zlp?NADFQR|70Dt_5Xac%SI3KOmNowoC}EQ*VP>KPDZPXvSi;KG5@x29fSI`^S;7yo zUDa1`KvQgqAoJ@eYc>%u5=;mKj}5R09a65~6O*8gbsBYNaM^bN+k<b}Y0R1)h!hGV zHf537trVhwj%gZ`jHS&i77Bae+~I#;20s)f!5tT)Y$N0sE#kpQg*(h?Odxh*nHrFO zY_!nhKN92re@vra3`bI?UzOHEm@*K?AI!{m9ikj!?PCTl|Hl2n@K9vGQ&y>?)7o;v zbGO*14SB^Octr$;O%1I45n(brfyoW&m_)H9e|=>NCbLs8!OVPS3MP?tz$<?)kJDJ} zIS2)miUQ^&3OKqgt$;x+z<uS=+Cw9yC;&6_H$}vPSa^7$C}+~p@<GrmxBri*UhD8K zoan!~Bl_>T{NbS`ywrZr8lBiF+D{CIO${s-{O<`&|FPizZNo>xuHY;4Q>Z3V26FIc zG4cOFga0E7Xw$lDX{GAWB>jJ|9Rum`lHHEs;cjD*4E!gj5`6og0^SV%oHeYLPg&Dy znGjV*E$>Rya_ZKRqN@3dlv;|Ef!)bk<{U`$@?xtHRkn0dl`FWTK2gL=e;6sMzM5J@ zeM%9SnZNLQqKJ1e#;7Y9t1)E{sT~qmqPwk1l;Z!xNO9G6c}gj(Qc8cp%)ByL${LGd zm-M1o+=|O!`x&l016#>S`qYk=3GSlDO0sdOA?UCH+#U}5wcK<a4TCtzG(sCjZrUpv z9QVYOn_eMF=ft_vMsTp57&y~-aUeiiLpTFQB{uy&ZEg)As(W)WuGR~}uRq@%BTDpj znni)&zxt$AxF%Nv(KvsKa!8v000>IW&6$V$gj?>!P4FiCG%=N$k6RUsx=HySj++DG zI(|rH6;Gpq?W}GN1nFCBHnzSPknjJH><K5@31q6}601%*nK%N;k&5G`B)|qR0#>}D zkf~jodw(R8c9Pi7{QL1xb_!zbrBFWpE;H=9NxwAwWfW?0wC#VeA=Ev&glrlyXwkJh z>T+{jt<E)17p_*1;ttO4F0wUa`C#$kNI<XEKd9jtC#GJNb8ZSp0+D5a6euTJG4B*x z;A{xf&;}YYV^b5mXz0aEki~{0F>3E@)4C+j>_(p1Ew)73t$7Ce+P<LW8fWj%$#`8u zDLr`P9M=1gJS>0uujL`wGqfgjNQVuRfma8jf*(!K43~lV{LZhWbSjZD(3_MFXZ9r~ zup`wtf{PY-5iT;Ybr#c+QjytWzobvoWn)qvN@tOWK!686{Xfb>u<xV8YDuwKs2@cv z>dlE-Uhuo&>g#I$z-1}56e$Bs9zp#GnR#}ymVNh|#E5^iKPIA9gzX*tCPgfmPKaZ- zaEvPE<=3<rerC+a{~b0sJ=SUXSdF6$l=0ZKn0ikRxLCN`7C_DM@xL7v=YaWRoh3Pj zkJ4FW7kAO&@oyXYr-5*Oa?NUtVhrN%#FhAa;hp$<T>yV)uYlj$jT1M~Wo#2&F1(E{ z8B6JM*%E)cT(uZ3k3F0bUX8(arYG0ZReEwgTy?kY$&L6N>H&MbGoy><bj+qF@Z*zf zX)b3a{Em`Lt(_S`W5$Qkrres|jZ2j#zKr*qk0)0vJ=u!E31<F7+KEg`tXvALfd&vu zm(<yq#H5VIcps4}FlzV;u(Pf|O6-9H-c?lWF9Lr8Ca>`pJfU&cUv~p0W@SE5`Hn-` z8+L8E8!H;soPTNkmWX$uA;rMsGB$dYNq@ulP~1{6f_olrekc7EUkX<tk`?)>*at0r z{o0T}oIXC2*SH8vnI%93i;xj!{f)2+79cCw2@~*(87<?wZ6$Ir?wiV=ds8roCzgUi z<d=VE9XHBrL}2QyzldV;M46)UlQAYoR7^PPK2c2M)f9Syyt(cFAa8mont3+PqM4K& ze)%ZqR#W*dadb`q2eo;|S4H1&+mdJ*;S#7m1CwZ}(<3xwmd)4fG4=ov-o<(R&5KiF z$nj9Sy3zbeQ`+R0$Ce<gQff3{Z$+}@E-`=hwfp`XL`D8U5@5m|M>zypG$#Rxj59LK zek0*dr~0R(`R%5}?Bux|kJSE}Qf*wz4+3xV8AGcAkB{fqi&znqs7anPMx+w?4b~Vj ztYq-p^bYsC7zHbwe!I$TVqigS%hpio_plO2K?e0o_Yq+^9I4><(QpuL{!uQe@6~_G zp<J^e@1nTY5EWgI4$9VN%-!L}Dw$+Ep*eU)Zu*GI>%OBEbifgPvDradvKIr1F{GuJ zSu}S)jt9$4uaYPQv*iGP^iSwJ4gk((v>_VD8}Yle?_u9&lQ1phhnQ&D4Taxc^}QbD za&`7&QQX}wH-K0E&5p$Im5j43xY2(dzNcOS6^G`u@#TL?OkTP?-NDJ^Zvqk(i4@(u z%1Ghqr?pI+;wp^xwGqC(>_!{^;*Wrt1;zJQfST$(&NIOa1vD~n5Za5xBAEaWD<*IE zyc^mRbR<EZXMh}v4Nhr43QU@L2A4h9814+m>_QCSMoHEZsQ|<j?a|H0`~rUm<!!jx zlaVTxNM$cTOObZg|Hsc$*K<ODUjJYB=elux-WS8vx3F||67ABxG~16I2kwv^dW_k_ zU=`_a8*_l&s?eAZPBdW<B6X%7@<yb{*KpfO3@YnITNzaLw9TZlmjt$v2;krOW$IFg zpNn&hD){3fKh9x`g>}Qa<v4%-TFkH`&OKkdI8Va!Do^dA_2;vg<p#5I_2|~%S8n*G zS-EU<Z}7r4?zo}YqMQ#e$KUWxtKv}GBz2cGx>q^Gz~E@#G^O<*4&Ak%+J)UMnB8mv z(F<Tc0Q~`(j-T3v2nC<2W$*#vzXoqR5dL2P{wr#mB@!Oi{?kM-It72QgQ37_0wl{g zI*p;No-l82`w7wNyg+m_(aQD2aPww5|4mMcc_UH=dhiD`^TJ&z0}%@>Vjw~ey(CN> z+Goj5`z+ZL`z+aMpC$WQ_F3vh&10v1mayL^_F1ygK1-&C;bRzLLCDlVi)io(iApp) zK79ME>HPgEDV3OzQVD;|%!6$ym3YuBB1vdEQ0#jLzIgNaFa{&buiBEz5jTrMW$b{S zITmdK3=xb5Es?+Cz=<4s{r?FKdWL9_y8V`*K`cl#cySXT9Xb>oThK~TJBju^E|k}C za7k$oEilprX{IJfbL%gL@3VCk@4O&o^kr%aX)rUtxiw|<<p+OMk?$lbvJ9$_Po@zr zfy7zoe4qjbYuNJ-4%@n_J2F1~`>?&V@<~4FrK8PWJ~4Q%@tg&D(y2DubtJFZ43L^y zgA2tA<zqaO%VZoBnK&=fOk0c?8;n5D6Wfb$Rvd$z*EaPA^L|Skj7-3da^u)^dNCeT zD&@De>&0i1cVB-b?_$PXivMLuwkLYNO`)5?(V)`L6LTZ{ic3*BiRGQ6>n8EvT_lwA zSW5h!B{;s$9GGY_71de!I+|v+!`+MvgcWGaPhwgU#r9JNFC__msoy?kuSP&d&OccB zbFEYgG;?q=JpQUR5v6;nI=cwXYUP3e;>_<brI=OAOv8U?Ez;_jZhcN#b)h)>#O3_! z%wJd?3N2NY{xS>hBU0qZ$i^G;H*zg0`zvsA=ze4zAumWJH~rg^G`}}A+OYiKLbyRZ zgKiLSQ-j|?*C-i^fB$2`>7}g@)K~Bq_sOCgGqmgY{l+@ENa}()Ii%y>$5yWHOcLxO zcnt0|2qu4r9wBR#h$e>~#7;68pBPv<v_a=xxV2pH4&xjv?7jVBr@IY}{b)h0x(wGG z;UH10*?v=aW5xh&!q89K58Az<J&Gk_iR|fc{~c<An}zBjOyT9S(3@Ue$7h<$iceet zB~vVnK^3`aA8yte!o4DHxEEb3yt~Q<w+Evy;7Wh+{4Pz$Js=qEC!uZbhu=C=09~uV z^e3U4XX8)cm+&(Ke=tt~^Yf_`?``+;%_KFlp-FYxlS12I!v(8&B8Pxlk#cy*4FKGk z4!q?F<M0p`LQK2@jE}!^iBZ4|Q2-<4D){Zff(2evqq7?B5OwnMg@$3PV=8@dadWaV z7o>leR|MtNSp#@B1q)%4e1dQ=%7_yAUA{y~u3a>)>g9j>Ibi^>E=-5j`Z!XjA&oE- zUp4Svo6I#eJ=aXgMQd4yGWEP-WSS>31sr%P1c&Y-zUN*fhTJ^7;IDku=Aj^kk^Kkv z<4yLTL9qq;;}n;IOTKk|C3GfGU!9>9aj}2lNM{I-Qdo}?aWmdwEQmL42>seUSUU8d zJFz3ag1^u^(7GGi_%@?&ve{%Tno7xfs>{e4pse_d3%DZKSC$1fK1F_*nd$h!#|zsM zqf<1`k<r&q_#vj|FTw9eT_f>>%otc)_uZ62?xaGF2&IK1d+6}0GjSiV8o>O{z_fp- zkl^^U1sY0Z0L3kq=Mi+=ot}-a;9uKq@WxL_wq&cX5IKY7&BeU@2ebeIS9@QD!an6I zj@kIcR~+^k2cP>g#lG(rIn+XCLAJJeDNZSe@K*%xq*69M@lM)x<u<DBZB$)L<dy&q zAtkD7Vf5L{|FKh4S4UWynGt052F!mk%}67@LA4T73!(t%uNK;q{d)jSAY_65-YJF$ zD33UB83*ZZjFi%bD04bPOAN-Uv*??bhz4__g`ArXn<4?ugUU8jj<5wvvcfy&83ZPO z=tskuJh?v*p1_pwH}((nZ@~X}e7OJ7Z)@>-L50n~*ytJLhJeoxZb{1ELg;_^yNM2Q z<aKe^5jp_WGttp8Ab&##cOpf9d<S*Lj!^gODIfKtuOoLg++kRvwc6$$02nxPk;wc0 zyO_5+k@vvX)Vv3`V%{6XM>NoJ14o;6EwRWISt(n~+ki>%%;-QbsQ389Akk8O=t*J` zF}l%;3_R@_oKpQA@WN<u{>*=7tP1S}!S6q8Fz?Yvg|vD0cQ_ula%J+gAdg+sAKNNU z`N8XBkbrH*y9$vm@JKR?PDJt=?>8mi^ILJcov4cc`ex&DpvG)tQlm4pf2$xe|2Ck< zY?|H$FL;$B5vrD09~+1y5AM+q5S@N>$ms6~LVbk*QLNe(>D5ohs+oTsB3AAEM@6jK zCpc<D<!QD=emueFs`UKP-@?!S-zHA**^H%E@aJd*8D#bUZV_D{&vdGyU0dv(p)HW6 z<+tK&BfNj=w=_9(?J&qsqxQk?-bBrIV$GH$V1HvvLV3(c&$$J18kiX83K8}BLw_+e zNJa`)_lZN0IGU61n}dH?#lm!O-ls8g;OXQcMFLoH0$9sW6KLF!p3n5O(bj3`k4ofQ z|5F1A+~T&IntOMmxr5^<EOB!yHurbNC7RnPJ2A5v82C;4nN8gk{`j4>6gj97IQ5m? z$)+zpN7H9wX*M69`cu*LC&!{5!Ll_+B0tilG(G>4-=sCYQTl%i14i>a{u8QS1nrsf zVU&TK20aY6!Mqi`F_CwL$lDoud22%6v>11Faib)IswhBw`sSC3?>1g)a6P7may`Rp z{A*ETM&B`>iYlzWLcpo*7p3QT`d4`Ot7IEeY21Cj(S|Q?7Hv5DWeOo2tIlr08@cIH zGAg$vv41Xsz07~tL=wX}q^~DpR&6sTjmV6$;CP+BjT(<21j{=^&l&*q&3IQ~(11<= zq`a)e9zP($xU+?DCg?h*)^rpwU?e}TzCvPK`97Q2Ld8C36#HDF*ypI&=Mu#}oh<fg zQ7jU`DE7H8Dfa2KV$-6J#sCeT`%sJw8TiPdQd)rd91?#o_>IocQ^{hV8dlr*L`)<~ zoRm@`CDb-!iAkUzi{Ub64^i)a&m5eC>tSYX9z?wmyarVcj$(m_&`pZz?E%AM5d0|e zVq%|g9B4>*GXd+d1jicLgeXt_CIwd;YLTK!3W2YFac-?6IszIk-2PWX>wNpi#8^7% zz=S1-5k!AN1YCNcBDuBDlDiC^$GWGD!HJ{v#u#c4&sAz?lxo<3oTnFziQ?w7TFhs$ zpTU0UI*a|V6wG5j=KTL)KYTpgexS1yv6cxdKtDtZ%=hgfBLT^rG!ot-F>~#=4I`oF z<5VNzy^k^P#FV@T9!|-7=wZxz@>^%MA+EOl*EWB|zmlz4{zp_*+frL|Yoaw5{>^C3 z%|8@2#M9eQ@vmQ*cH-b8_X!&Uui<TIQsbRZqzkM`W-&CH@jjS*&nKTG8{%WbhA7TT z*buGQ=Prj@;ZcoUP<5VTOIi-bu39OUL+AieCvYTTIXq03!@~*nVYQ@HI;lQ7vxNG1 zcawimA3N}QGnR+yL*z%%nwg%zd#g3=>_1WZhZ79Z`pr#eu^cu5WuDzCEC;*~ZzaoN z%rMA*Kq}&QUz%0&Py%+wri98Ko1SycAIMgFIK}25W?Zq=$hq&~RLdcy%L~ilymWBW z09+vN4?`9J0h^ovw(j8s8qQ%A_`T7>Y3P5y`v)Um*~23(hldTz;f74n+^yK$S7jzG zhatAaIEO&%?+xGvW<vgbF+O2AP}A>DHhs=Hntp$VFdBOw5>5XyKI>RE8jZV?O+R&5 z{nC$pG_?Q6<Bj^&J~U)GT#}wM@Ox^Y6r)gJ{^vyAD;`Q%4hBU4#<X-82c8w!gC&0< zN;Vh}C5gAr#D6M=zrB2%sFg;r)K>^1HS-ne03FYwA@t0Ukw8Ld+Xsd*^HcpxjfCeO zPMSCmCyj*4zn{%Wz@((DA5Lg%LX04ww%+z|LT%z*g;6C#TR)txt(lH#Ku3R!(j%cq z&uS#J7{#_Eify4{TN1@Sn=JO(hlhXLCM_e1efAv1jxZ7)et(#e@EuE<k??e~*r$ip zHqA(2^chTpv=Wm*&$A3O66B^^#k6a}P>`E$GAGg)#=u${TiAFXk^z4$K}+POIy6^O z2*BSNC&Eq)CKciWA%G*eMy#*P==&&Th$s`D-yv3b?7k%T-kZ*B<<BI!SAc&t`q1O| zQOTIm%a8obVBz`9VBsx<EB=~-bHt4|cpa)tMA?_<gZTpGgFW7%Rs`<|kv0ZTBSq>f zgk1x01m0i_7TqL)ffp>0L7YZHNToJfQKD#}%u>He!MlY9N0T&RM?Gper{+!AN)8`C zlCYzuGz&Y5%z(t$&8eeP_6UEWdg)$YGVE(0WQ>3lqx@$(>f^K9QK#3Z*imFJRq?-> z#Eh7Y47SN8F$_DvaSB(PzHIpZk!PJRxGH77z_db2&KF2<AGtnq1aO>CFT-!%>QOC- zQ{<9J?uJGip0!Ya9^BxF0(`=qPa|2844SJuYkY){D;FduU6fHRf!lwf1Y0DNu(6%x zynF6WOMho-diz<@tFxo|*oUVE@XEjX>qO+hSlXU?BEH4BpO0S0Z8Yk!t>K4%gZ5ss zrR^|0FEG$#cJQVdVj89t6K}c;62C9bS5s$iBXMzI0I&SzUnPpN*O}@pIO>k?lXES` z`6|W^Hh-WwDEn~y@$i3gP!pR*d`+&u`UkCP_HxfZNrH*lA<!!Ev#w|NJ+WW|%}*H% zDJ9xL6KZ$?&XnF@3Z5q-(||{3(K-QJ<V|=p5pz}W%f+kC417ekd7|{ch4#^(QlOO* zv}1oVpp_cX>MTzb;c4!?O?<(1WV7%vOTI1n;{U_k`@lC@or{0tNt!|^sY#`ksuhbC zhXM`;Dy5(W8?D%A5*yTsh*xA;WDX$#R4SBE*YqV5Cv|woHn`$0+vVOd$Dk-;ir5yc zTfxrNyXp$-wi8pg?$V8bvH3mEbI$wbBxymt_xt($&?ax*^PGRrdCqg5bI$XpU{?c8 zZuC6vU|ZE9%0+(>t=Y516D!Ks>0U<Y9T+Do8A0|dwR7-A7$}GI@N)5&liAgx)I_BK zpIlrXKaaghe};ZV_b~bu>{3Hg>YuZu7O$x`x^ZF7#_*xIR5aME|Aw}7ByZJyiqj?+ z`=I$+7slFjU0tv<iHo4EOTAOZfK{D}y(?(%c@4{~J7Is>i0U=M{z47TX6p(tBV<EA z(e~aI7qRHYxD<7j8vKUnNk}fU^{zBTJ&>;CX|;5-BM1hi>l5zol;H^4I(A@-9O}<@ z#ok$F??4}iJ!S58SddYDxs!(%CM99KHHRid&<Cz(IZmj>IQyRG+DV=@_{N8CguYT> zj)%evUG0BOu-ylV-~&CyzWml~k3b+R_zYO7<LxxIY9^+h%`kxVTl8#*Uf!C$M9uYM z&NZEEfnb=KY9y+@j%Up;a642lxxT;B<M{=@LrN5Er1xa9;TuT;f;*PXPgC_(et*iP zhfOK=eO?ngLJFb7*`t|Q@A=Z5Y(gIKN4oX6e`<eHFLlaxUMZ@t&SgTK24EW7lQ2Qi zd4##*9sZoE-^e48uS8WgbT~GWg2p8}Naq1&zbX1rs=lf-sY!(St|qp9g~**Fa?^FW zTEK7BJ96!QVOcGzXqtk#%kcsIVEga^Qr6TOt*Q0Fe6-%2J|8=V)n63hPJ2WXgSI1z z{YZZxVhF-#&5?Y|ckseXaUZel+pzaey){u%w++5vBJnnLkoyFjNw{)$MRN5t%a#wB z*w3e+Z^*>=c;cEN6Y*?-*~h4Eq;!5dLg>^Br&$a6ts8pL!YL9qiMZuhNCa=eqieYC zNm#v85A$7lIB4gwr^b8wf5Clr;aS7xUyy(LN%z_m^%DS_#wufY|0VpCXuzJSufhiw z!G8BcO@Vp_39`KonRDsMgyk~2UhCEQM|!i^KhS=>rVBMLbgb=tS^W$I43iI!PDZ2s zi^=GpO#NL<@#=b7%NMIa{xOuWB<OCZge9BQgxN~2^)S?K$7pQsPP**x+<~vMvh#o8 zv((mEa|tk{$BvpwRdQi#g^B#NM~_Ey*avtxZSM%`Q+P?9*4+Ew7rO?mDvt_S;_#Xh z?p|E#a`^1;CF}UKo)jXmtvfhxG36bF?FWYFT!NPG>8wXdTz7}w`Xl&T0)MsecRT!b z!=El&pKX9Y{69M@8~+&%Df5p)ByoQSmc}x-$ydZBC484#1PFkRXW7lA_BgQm50nCW zb;6wGHkZ2ND=#J`bz_;`gqE1`sF5u5W&7_PNX}x2ht}6GPx^BZ6OC;!6N}Q!FU2fm zd|h0R9Ntogfz>?QUqx2CndqmJjDL`RFm#${%d5z7J2j5WX9gxW@`(YwwHSYO&apht zMuc{Ex;V5$ByGf`<tYWJN%fdijY;-Sr&b3V+6sWpxJu8#Po3{_&+H)!*@V+M7eCAF zai2#iK=3km-1p#)O|{ZO*`efau9X&f3S{h?iIM1hUrV^r<_9DH`K}DPyIo#$$kyio zvC+<ey4pd$g!Od*173|3F4cdCK0&^<0u>blrmfL?mE4V@6-7z`K5A<=aRA?lgu6`* zfPLK#>^%B;ELL*s<#r)cB(~k_O1O^z{Eqc<H^PCMFvjYXjN#A#DB%tZ${~*u6+XUc z;q)0oHHbJ@56W<j{}PYVAp5f=E{*UMMmbJ#W#e@xU^$O!kwKaMJn?_+Kfk_Z|EsC` zmhY_2)VI9pbdn*e`j*|q4dH_w-72Xn-lyqXzNtg|I_SyLpp}&L?o^fZ=8?AHY&8Cl z=u2~jwjn9!0W-%<nwiXydI7J;Pdd3ip4${SY;dtnRYDPu>s*FaC)}Ajmxk1ikj~}f z|08u|jMNd*xzx!Wc}{=T6ps^giP2Wkx>PYN4eHYd27NI$!)i(jkjY4|hUhz7qw54> z0_XxTp(jktS1~b{Fj2<UE7Q~yQSFj2#QjqqKc&XjgvHO`V1YXc5eG=|@~AI&`iUVF zFEQTfaEh0w{F#cEcl{mlld5=0_#ws1o);y>%N5iUuiBG`QG<Vy;xd=H%`5NG)G$$x zvMqg#QS&kdAPCa8yDQm6Oapv{s^`LxzcgRcy>y09*|F{N@R^RQ+ms^{bp44$S=)*n zrTP9XiY{m@d20$DUDWBK5qUmTB^O&c{5qN$(W{Fnn7BzDCCP-HcoLwm^OuA^n`iki z34Jg7QqafH?8<-AFOe6A^i<#nW@bAYHK}0_H@S48x2&H%i=qLBWH(Z*^FFrgJLItE zseGN^3q*!qzHbLKW!d9PE&KBLjN-q!`S~SeLD_{_=U`S4rtan;zf~VXICp|>Q}h=E z*@=*22(mLW0mGEn(PEMkpnMbpjYA+20z6;Z3TUCpI}m@W?O80UBl6#RSvTuCro&?& z3OqgiD3rW3m;<{qyivhSFHolT$SWj3(XxXfJ4xYMGe;y751Ik606Yc>mVE|zdKe4X z@GPB8!K*wM%WfvI5Yoy)8nf)H)Yl#LPiD{jRcnFZM6I?qwFP<9f;KYslzhoW){<Y1 z-btux-K~E{(okScBE0A^>xgHE#EbtrW=_^9XsOk9M6L11bv$h9FNmSVgYGcC4bt0i z<Oj%hzN_OjuoGYE0&9Q<#*y!=7v2-<s0T6GO?eJRz0t*_Zpy=f)0lZFCl3cMw{1LI z{)yVQR$G(WrqNVVQ?wXejPOw4d-470jre|VlstdB{dr@Wf28Dm(qc*%NU^3ziIA~L zt5Mq#Rd^ZinYow5aEvdm&L;O0DYFT{rnBZgNetJ3J%xKwn-M;k<9ian?pEVV-;YCW zrbWj}i;h)YbgZ=KSch12!no*IiK1cD!pTL)OpDIg+qCOVjFDtYUigLVj72sey%d(Y zG2VYPQu0AG5iShc4=V11un-`s*Ol2~!u-2C8E;yzPh#Mn<tZ5G*7?iXn^6e^8ZgHI z#hbp1u0iu#ZJn18-7q#gz^C=Qdj5N10B4CUCT_gVF81*`$@(neUqeW{52@8m>ywq% zC#$+XS!sP5BJy)nGV*hi;%<_dH?2>9tRR1!u}?q7sS>nzU~7J~fpdzl3fFlw&H1g{ zXZ%oyLQ-@8!5EVIUBNt{X*olW=aAvC_a?(*?*$@0F2@WvIN9wL!j`<Z)NQ>y%r~Gg zER1-(=W=OS4nCeTEL}SP95(Ue<SLm2=EH(Tu>H@8VQIfg49hFE#O<OOM4Nkmb_jnK z(Mz4Hm_H~5s_w;eZD0>=nAJ;J+fvU{hm2Rfc({1gcq&^g+1n)ww%{*}dN0mP*E~uR z?pBFkfLOd$7K`I}V4?zUqnm{x;x1|DM-zXQc7EhHvp<mUkw^!ktms$rS<=f}a3^BL zcNB7w-eL6~Bff*0#k+0zF1|M<?{<IMq-^1vl)#*=^l))t&Ng}&6_~S~j?*T$W)sZ) zdf2W|PpN|nbtYJV&^xxP<#80fjNJ{)!Ow)RP#{Dpz~3&8gt{;Z5=gylG4R(NTlij~ zSnZUC#bUKf3RR`<uz0mnCVXbuux3EfX2#upM1F|uujfH*`Ih9MBsyO9Q3HSRGvOb_ zo+0Sy3Qm=6$Y%|774FqD*A}7X%unsEKoi^@n9-r+Zj;M|dPh+_Lnvt??pI<iR!3)M zrbNMH9C&*SWMFr!b)FGdkrWGI5g(lz<hxQWf4f|MYc{3g@u0x$SPi9!|JLj^BAtEr zt@IOq_55pU#`)K9@w-weksN=-mM>i2jJ+^vQR_^t^YZyJ1*yxqn*&ozZ5uq?iuO_) z?$qNGrh4$y+?&g?-cGS0L=!%bI7Ux1+skERIqX|rGiyJRat)2M-5ji3h9cTi%XD}J zWm0k{ehWRf;!9=TG6yRxRZW5AV$Cdk<U-bf$@$3TGMI{dNSG1L)jNOGaBMZe$llK+ znICg48<k}4g@Fg^#{yhCwk7w(NHV?&s3{(ElKyRyQiQsDYdKL$v;bAn0jT9Aehndl zoYC~&Nh~Fn#!|$2?+vI%F8D}}*UJ9%C-rQ1D0uX5pFtnP`7@)vHaVEFY}`$9aChLz z5}hv(+6waDyb=c+%bR~oDU*{alO61{t;v)b$&?we{z)mblPR+uV!zB&%9APO4)${? zr6QS9;b4tYN@X&o(!rkAQfi+hy4DgGI@ltf2qaj2IF($xfn0?PWZwj|>eFtH#@5#K z(6tfS4fHtKrCY^drBU_V!x~lpvpI#TvG!%^LCXw09bvwk#G!wCZ&?A7x9^JDnqJ2; zc*sZZtTU1H5pM0wp=rIdSyYC71Ag><(d#tI$0cou^+@oeyUE?#weo5QlzXX?i^)m8 zzLjV?Xft_rLo!G@wRz#QB>%by0HuX-DE}tw)9G>8_(-*L5I=;PxzO<+gyn(r;Cl}O zu&>P`mi#jQ$UuMBE8z>XhGhE|+)F~>R1!h1<F^>Ts}#Taz>PSZHKx<AAh*;DX6a(j z^4sBu77cq}xIJV34IfXohkx~|8}zk!>7Km~HW8ibaYiSfsht@56@{?z9^HPD)viJ9 z1;;*;)vS-E%W6~E+8#-S)_^?>Kd=Zk`dP{ZYpep5u}y!UBBSYM)un=tmj~J?nCRT) z>JUuBQuglS_B|dv)@A?PB-U1Oad{<LC4sziD05oSVIiv<ROb|(6>H=6$szTuy;rCk z%4dx1W`091wo?4UlZNg}PmdR`jX=IXM>7St!a1$kJH^!>6z$R)W8k7Tk3zc4$=FT8 z89=X#wNHN+jx4&B%H@HR27ifCu>4Wd<VO$B@OGJ#)8DH+7xU`0>)vEPCWwAS3#rsq zYN@>r_OCNCXSkIZ((=Hmzu}RUWBCQ*o$kN}DD|j_5zJ+eQ{+i}vjG?Em)GD6T0@oR zQG5y(tbbg)K@;|Bdv%h%T8vP5EA3*7QjTU1WpRIe*WuM|bPPz^%{}C_wOU^pY^)}0 zscOD7Mb>7?R%6`0jZ-vgrrk}UxvZ8$d4Y3Pmb$NyjuiZ?)CbPqYN;Db0fgcAJVPM% zkfm-Uo!?l4AvBfp=$g<F1|MCl>~~yegRHayZ!9DeudBGx)+Dm53X)}$?;>t2MKzX@ zkotciUd)q08BHq-H!j27k7UD^z3wh0gatT7jT{O+VAR)xB;{nKq=buc2Ch;XDeZ(= z*??&d_6c7TN~sBCM*6S38MyVO2Ty!Ic4i@U=0}~PGxt&bWW(hz;GMA?G6l|-`LN+7 zxVIOrTMP5}huS>u+K*-vR3bO}qO1-NdNF_ER)<b@c9T$DT1@<*kb|~tEWl)4s1Cmz z!cLDyy-hDV=mQjaR21O@?@JcphmQ?MlI4(rpy?HLH7(6jcN5NdZi)y?9&Xp3=aGtn zb&dqrS9S=BQ5x|n=#G<hBX^nzy_Wh!%FuJk0ZpN1p!~5;9bVn}hIg&7RrEd1``mwg zk{q*C<WxFTjO~9zWg%su#^p&O;M>ff>QwaPaob4T#?u3KVu@6L3hpAj5!@y*k4kz@ z4NDl0PEFzlhrlmV>Z(MsRVr@i33KqshE-Y-<P-s~UXFe}U0<xW56{JuF1?f1f~_=t ziFbYPA2@X?Xinp2Hf~cn>RRh6@dbZBL2!l|%M+xGSCvj`G%P<GNy8#GhFgp@f=RaF z5(LLw2L+PR?~*w=3XzA6I+ZHf58veKAK`4ygFI)Fi;ohjrqQ~#mLKS(Od_ni&`8Ti z^C@&GqEuNcgQ1ypwn@8;s?FwLXg2)zj(|6hofrWxLsixi=-<>qoSZvu=cj)p<UNN^ zUZ6rlmOA&=G@;#U6Y9|m8lfQ1%;?|@B+zVhviR#lXZMc}OOr2f*r*{T2uQK)Z$xCG z#}|B2Yxa%^(HlJ6cq}}E?gI2BE|z<{IEh2E)f}N{8p81iRvMMYN*X;JGNq~`rc`&t zgQ1CosH-}e%mNon#JN}{PMUwJG-1m^Sb!yTkjpuWNTTvw#<Kio|9oNj>YJ02nBS~a zG#mMkU|w*pkxzZm6y5}LhZ4e81gkoX(FdaoQa~WFx&x4mvxCp2l=2&?1gM4j5v+!~ zXrcw{Fo7E~2dVVP)f(d|BXn5mj_Y{LY8b|RQkk8H3bZo;*y&y8=>UJejrw=&d%s82 z76Y%^xRGW?$)JX;Mtr7eP7iP3=em_83c*<3++@SjYELG}{2t#e4Q_JdyXX-*c-yfS zrDIVkYwA!J5DQ;GTIU&QMat#a5Z-U#C-q(pm`b368cC^!qYi#G?Ba5e9ySs9p6Fqo ziJ#k>X?fa=hX5U1Q}KWH<b12c2@!-@htr8xJ$9YKw-$Vs&<qK}Tp?((W}at+xrHQB z`v&Gl!OQowJcS*}&D0~)kNU?E_kJKNDX4zq>yn^~%7aP%;Bc{@HmGWV()(%`d!E17 z-nLfgt4P4$Q{HFhbF0-LoMef-^b#hSBl)UAU&$j6{K!3|y)%EsAE!HGE&gmj{~F+5 zed5cFox-TmDoe8UIoL~U#Q`(FVn$BXK;p~*DL=)~9mU7SAO;SOwb1)kJ+F(zWXabX zMF-Frrzh4#$9_ps#G9qK`(5Neu9vh^3t=V9u6Yd5U8}LF4rEi?@q;7}d%u%TwBBnF z_6_qN<cx_lgQb7!QY&XK?^D-A^%_0$bJFl(I!oQV{2U>$#-a07&{>efrP09j>0v<w z4H6AJa$hP9;JkD=*zS6<u{8yrtj5CdeYHa>OeLu2q{1#qD-0(|wUa$03d8fQYMpw% zRiz$Sxd(zy2OUAhf|Zqk#>gq`7Vc=UK?5!}P84wAuKj<j)SCKxhwR$%?|j~_{a7lj z?A{@}w(&dX>ssqvhuEvO&Z`uuO1USR9oha_D#Z)=AS~|(y4kazz;eG0_YQbs*c%8> zq-%Z*!bZ+@djp3j2i*fe2m!vA%KkY40BS&$zxTs@2_*NlbliaSKSjNqN_sfHjHZN% z#PeJIt1x`yA-c7HMCv`JQE%~UDCHhNIzE8sY5cgKy|Py<tDA_G6jDt2%kZWoe`zoW z?-k&Ct^u#Y;K5-ebFWc~y-;l8ZRW^Jda;==-7jtydunTXu=Oja@(pLdll|u}1=U+N zW(jzTlirwoAEm{jTob4&R7nlEZ-|y47i-b0*R$Al+#QF1NTh;F`ZS>0_tj+qfzDAg z`z-r0Ja;^pqh*L;v~m|)nWai6uu-TxiswnZ@hCtBNkl`nTWSspkoe-#Nk%*~IG2iD z2O>69!6kRt^^|kD1Kr*YIN9s##qQy%`;(Zy7-gnDvVNfWawL)z;(JmtMKeJ5FZ?~4 z`59B{(_wvowtmg%oOQh_2J_AP1S{%?{V=fS#N8Pdr0RKY$d*saWvV++@?ymuYnHjK zHFJrbp;!#{kJakm{W|)hd5vya6lXknb@X<f;D)n#6Qcj6o)ivc&k*P{dp6UN3h89V zCi0;mr~Gv%X!zRr&V@E{*Zc2-e!|{X4+LOGYcH*TLAp25sP7QWbPHY1>78Cweyu$W zSl7AO&Fcj6U%6Lc#?-R@IcyhH@u*&oE2DWgEjg6M4?^a)2<rxZ#!c#^(|EJ8Y_SGY zz5NWGC*J|d<tuNs9CDutoV(tKHgYpl8+hLvbTm!p0^V|(G&`RWEgQ{S7Wprl?{R&y zINKS2*veCJWvRt&K1g>cH2CPc-xLU!!+t<5@xTH;1P?)R27fgaXI*)h<&gahQ28j{ z%E|sYQ0&dA#fD#(S}9{ORwGJ&NR&)YP_E@IoD944B3?Q?U5tKVZD!a904~jupMboU z>NZQ<Cwi*2y0_5~zKL~9CnwzhJP=gWEk+K14?D`C3*+!+_Hen&Q~V|u83YMlMb4%2 z=@euGHXMj$Jj{{WX8hsw6mf9X|2&Vckw08K!>-SLKg7OyT#M#GC70^NmNM0o^9Z&W z06$l}Mv$L&?2>H+VoL5#*}kD4SXh}mw&Eg~>ZAr`48)8pao(Kei!WZ1jHi=HiZ|nb z?kC+UW2t+<62LR9T9B+v!0gc7X3)mCYM+UOsVsCNjt=0<+yg7F^455o-c&_1D)!tO zaaPH1Q)Z!B<zZ_O-GB9!*#=fj;6B|&F5u53E*(kDg${b0yz$L3bT1UjuO*2t&fR#b z_nn9Z?z*&?E)M(g;;<ijLcsm%ohKrH2bbt!&ZlWuuHr6bF+$Iot^m`^@vc1W$tHV^ z-eUIXYPGrio;cYUGBgR&a8OT1HWkvLCAy|IaL$rJ@2G{pOY;BY+_6j62<19a7jZ@C zICpD@2+B_Loh;Eu@q&8~;N9aP25k=2^qhW$uAyS20~IGxArE&ThCq)A1<nC~UHMD; z5UfXB;Kj3BRQ=rz^*^)-?>$Vql=7E{Y)#O<y=d5u)5l{96K=`@H+QTOxY-t{*(Ug6 z2OUpt3+7@}tk&#}@L4Qm@og|!gYIoRFeMvltkkw`<stxXfqfYyx1!frSZlYnlxOF_ zYwc2XTf@APlJ)SWer}2QwNCqg)iQ5F4&}Lq=b0(;w9K2Ki#AyH+df9w;uDgv`*fC# zf25naK2-PL1%yg#+fK#4Gt0g!Xx~~}vkO~R1M=Xmpqq!tqv>GV6144Vwe1xf3;SML zB=#x=*uygSF22|IG^L^F8h;9ka(5s<k)TPzp3Om`@SJC?yasei^@iv4(Ad=JKF@ zo8sQ97#mY?=J?_`J1>@Ah)l-qo^3a+fR`(_-K5B}8?ZvX+^M*?(oEY5No6+ZE5%*3 zZw-_tgtJ=!m^EnGSWB#LCoa|}^}bb#8y=DJFf`g$GK*TvugV^PlA2@LihXzB<dw}Q zM`W4nu#42+ZHjHHLUE{n;Atl;uk($<Q8iGIIq9pK=xs5r!`qZf6FJ}97MyR2lu5lA zrS&FIvpdTY8c)N&8>`Gs))<(TfL$*P(#%0i-CwA4h~Zkuqw|kywQc?<3V*<Wb_YJz zqpy#^;eQ0(n-$w;hw3qLd!S}JVB<Mjy|)9Q)lo6qRg+}fo<Pli9-VIm^=f+%Slyo5 zlN87Dticbf<u(v&jDfat8Zu)P7PmdMrzrhg7NE}t>6OO7Q6S818bYAKVRO>$I<3Yo zC_r(VVBZVLL5C@NDZH>8avB52KtkA7?=T_(=qWs%T5axn-essb(vIgqMAd-lJy5V< zV`={5Q!QZ2Yn~*3-|0ljI^Q?QcRCR*up%K;mXlB!PbKEq%0f)U7~Z7tOyf&#*5Bc_ zken`@?87I;HZ9)D3!shjnuI3TiuPFpb9R$0e>OWeRy%gsF@uLeBt}hi^C-~)*L(F% z=H71uXXjwl^cbBP@K6Oyf5z1VU|p)#<4HpFnAh*=<rCb0$bIKKSosrTmZP8eU~UDe z5s{fDuMFFu6i^%7al%}dtzYQnV*@N3|D7fdRQQjdigQ{$F7A{bI5&sSEblXF&3at& z*io+Ohjr?4@tvjfU+FcFktyu|*YJx$&0G|TV+9CYNSB`VP>yFAe#{JWRVlt6450Dp z^FI+H*P1GSE^^_*4%2@iG7pb#4TMbxo3GX|LyJ*8z;}hM+1nfVbzz$QOEUg%a+vP9 zM5k-X-ito*$?c|RPc3e)5(Q1T=HL(3!v(3poL-DU=^MKPzxi%$v{HaSK<YqV-M5EK z-TGi8La^%$fxtnY2XUwQA5=(wZ4CyOxMd}5p!*YlD`?8BMz4tO{*bYu%+|k>UM=w; zgZ30QbJ;~CJJ<-XIFb@B9uan?T9rb|{UHk67U!G38+oNdm%m^pH81`$THU63k=5jb zYDqo-d?~g<RZBFVA8&DE0<pB?LAMpP{LC~&W>phL5cF04D^UeKrn780%xN08E2p)C zG3dL0tx(~-vye0+b-pnej>R75UZI5>X#U%MTATEiefHB%w)(fK(e_s%KL{D9hF?g^ zpIDCD$}7wvNge95rsRj=E9Qm`c06C+=RO@cSM1BR?6aK?#70@_Zlbpc=O3-A6vv~a zbnhDpO=~Gns1sb9%H!3Z7h{~FI4(c2QIK7K-PJ|^z~3UfjQmC~PE*i-Gb&W(k<uwh z1c23iC6AbBKI(c8@N>n!WL<%C3;p?8cR-?`^82DE)mpFeR{|wYKXCws!83n{?d()i zei};v^YjQIwQGzx6HOhizT+$?T<rEy|N8)GC4>PBVnDZ$Y(}62Ysvsb+tqIRifGe+ zdb!$a#EU@DC_uq0v|bGer}b2@lV^3Xm)=uH_gV$Zk2e_V^-_J>;i^PIL(mRJp~kvh ztWqoR5(#sK0?~zNjF9p};3l#bC3fCtx3$HflgLtnkDS4c9}XwpgQ-d;VqQ>KCu$^y zbyDrAh#%3QCJMqyOJq8DAe(WFCV)(T-LfBvYaB2VveeOD`A2E5qFwNEl0A0(EVa5{ zjoquBEaP*cVEGeCL4TZgzNboXn7EVu>`}p6xS`EOJhaI{T7sh$oR7sFd?S@!B#?6f z-(<00t`Hg_oLIF&&{cEFeq_O+;xb@IEpzZ|<rrlIjEf=B5oj^i4&tj7pDap$*>5a3 zG?Bwk%!Hpf1iY|kHqiMF`2oS!u7TFRj1f@OI4HwxaJYU3f`EY2M%tVN5C7!#zEHbZ zpk<|Y4sOiv`g8f~zAI^uJ^_X{0j!7u?VLFt%*7x(WFZkE%ye;OK|Z9@F&@`IqM#FT zj{D&Ou6?LJcWBQcH-pUWlzCu(I+?*y{yxYLTWV|o%8dhe!$Y(P7SP&L*bqN3n1S59 z+jY9;9_wf-i6jOdZDZifi68|5(&)3c#zYZ4^0mW_0$NZ^+(K}u^8$9y`*^LLq~i}r zLXIhw3;BV{dwSVd2ewl6?v2)~Ce^_{X8jT0HDyEn7;lNT7CacuMxLU7=km=ewTi{i zeSYv0oVOU~?~_K8rH)LS3&^n8-H-M33-N}Gjk9veve@2Va|zHj-my_*TPyOoWpM`< zIBy9Ba*NlN!n%yteW*0N1dnOy0u7p8J99HnvBz5HE<tfA@^3`{@!DC>^AuDcU4my4 zk$TR?YfE3i6f-Xk1*7PH6I4`)zow$lEphbgRL*n!HI;+znWMK-A>We<X~5T$sgPe8 zl7%31jTTTLd+~J+FNE&`V~TT$3+<r$=!yh{2o|hd5*?dFIyWqK5`>WuJb<>)ZPKA` zy8UwAh0K@#JKcOahkTEe*-bv2l37E=NA?bSVj1UQ!^KBo!A_)qM08rAR4%_d7q!1o z%I`r1WlJ4;Pw?h4<JJ^?QiS!8zl+{7@+jiFgOoofaNGE#YH4p$wY1mC4t+~(4|>Rb zNpPNrJ1XHN4W~}s_I;sTHcG3P4DEAZ=iYumC<YI6N~hwZ@RoFZu;KkD;AWkzc#mra z{tS0os0imF!%Ucenw17|U}z$>HB(uo(Xx^J(cgt1#fM3!8bb`Qnuo+<Ar$y}^jt4+ zh35bfH$MsLQANidKKIWU#M~$4M@!uXnz+~mr-s`rpqSdHNIRW0fO#@oxJ+Oeoe3a* zN%L3r_o8a~S?Z?HWEYx#mO6AE511bJV#X*NgSqV+knQz<DDzA&ci<y>B`^mIIyayq zYOl(bdWl=$$Yj?PlAQ}0^et7Y9oD76e0vz6qaS3#1BsxxTm$=~o-E4MFt@0FL(ew= z{J)dns<j?~>ku4fT~8LpXlZCbfBE(G%mX=or}?)LXeyHY;=rhIuQ}|-$HdiSPmt)3 zTfh%Ve0Mf~3gVjxW0CM*C2LD#+~+85HB2mPpQ?C@JDe_#zpl?2-#Ou_zc(wXDqJG2 zCV?miRHE$XCH6Z)_8zvhN;|@C%|0mB+dz$J(0?uettVNjhdZ|svBNQAuAPWES`&Q) zz&}d`?^ZqTXy6}Jk$GwKuILN^kNdArf@AXEs)Sj8WYFCy<=RELI-`Yj#@QjIe3w!> zU@=v(GR%F`WbJacZvmYKcMgh6OA}qPjv*V#AJd&6s%Lzf4Av1%o(;g_nr#W#__Fs{ zc&bw04}%S?(^5A{uOSsP^iziZ+M0eO#+7EeGwN?CFVaO%W!^c#ifml@G*t80iK)PU zLz@nN>%7Rs2C%3Bvc1JH?UsGG^}P#TS@zLg*sUm!?#oMCUh$n%U+V5(&38rheMFJK z@B1O&6{DNU_P4)&?iJBv(H}=vX)0a8c}A3==bHF-(~OEfY&2(1c(6QIirOcI(;KmJ zoInS~7gGH3rOL+T15hd2rCFoz5pJ*6aEp$AcO$z<wm0c~<3ZSApJA9NctATSpT)AD zPW+j4-iJ}AL$)sAOR$$xEE`KdKhkNZXQDuDW)V0N=AYj3>|Ub1kCMJm0NI^DZ5-J) zcqNcMOR;wjf$UBd*@e71%f8Ah0!NJ;-}Upah`txy1#J`u$Z9@lBOdbMF&K^olyOCW z;FyV*Q17@R`aZT7V|s1UN$7_{K{BACa;P6BNd``(rx7bHczGWutIX=TR=@z>Y5q_z zMj=`hm_rjC!`7M|Y^P35z-R`GU`sLmUH0a*q3@5A{v~QD(lW2|;?+}d3%PHD=Xr7h zR1IHEc}8g2*e0V1wX~Zq#$ThFjQAygoTP;A(0vsEZ-l=&@K*tUcfy~}Xf*1L(mz91 z>i$9#Uip5qwkA$&9~A(z?D3YlH0Y?m!Ii&IyMxPAS}fL~iMhst+7EHEH%IC{HGEz9 zye`}!Z|DXdUO%@8mzea?0C07QF=dfbQbYZRO97k~8dzd7_CK|K6SHM~(@<T1*E!+0 zkxa%_`kz7y*?s4dN{RSPN{RST`vxW9TqsaN_}tKlpY>aE`{66v(Nc%s#i6>7&Y>>g zz^CL@G=$&ikb)kRM*QS<^A$V|X8{$IQKOm;GlBqCTRA|>#%!u7`kUx>FE@6hYgm+S zLyfV|$mJ_(bs(67^a<zvlJp6G1-MZKh{eg%EIx-2*h$Yk*e?2tedjIAR+5qJ(~N8e zIolSVEd`r|GSbFQ#ik{I+BypL(6WD{8{3cmhG!u?5G<e1cqN%d1;Uip(s;gxjRn|~ z`dXra2YFqV{afr**eL@Pre@|Gr5LG)58wPNv@|iSTXL~~^_!`%WVJ1S>#v|~+t*Ni z8r|A`&hF9a5dEIJ;uik!_0>0O4Zu}|tXf2mU?t(53LGv@c9}QkKA!zywVbD*oK!3o zr(lUUDkAl^VVF*#VkOr?ES!>LQ^H=0pEBorKVx?ea1k_nw{|w2v43`QFP9|J+D(B2 zdk{lDav;9}pXIbBDXl4gEp4xqwl^&;ETx5$X+tva>~-G)ro#2EYu8#UNktUH)N&Qk zz}g%KD!NMwh7L_47w-aV^;H<!RxKv5)>=)51945wv|2PFx)IBG9!;cb4`Z`sZ;rx0 zDESvD&~pt3E({Ncsfp*o)Wq{(YT|h?HSzxzQxm@grX~)9DPER;DTV%!o&rsHLIGI& zkS{v52k`gS$BkAVN(Ni^+8z$VW4N1?di)(Ig&o>16@nvi2BkLfRR1+xCz2zTy|zeI zi&UP+DqO7aUxl?4G-9vFkE!^Kw?)@*HOPAW?PO0aQZ*r!4F{>jnJ-X&++#zoJyd4( zB2B5-#4V?stX#`~8F-Bk+P5h+EZX_7XeYYzm@-I3=W4}Z(WrG%`|*0J;PiuX1<0&w zBkQS}5404GBG}sxs-3PqfWyIX+-DL1{uKT8U!#qeiyf|4dxaHrQqj*mD4WrxN&?xI z=eSP^K_|6q^_;wB$)w^ygGY%}9B7JKNJqPpJ~t~++nXeR%qkMSl0;ao^Usw_uF~Q4 zc@iFoa=a&en5-5_>EJ#(7hqqXEGf9ARWK{H0%)pQfl_6y#xcUC%I}=ayO5e1=^w;P zKRQ3Sm%mE-BU5!zP5c~pA!g>`MdM{|v+oXJmu@1N^QCkAZWGVG&2-!O@1G{$pbuqi zNCAjRWVC93CdZn4<Ki5~JcRxW#^263e;M{X>TGl7dDJLz9_6p_n%SB<`ILf;19`~e zWlo0Psp#mWw>8~Hwzf{}<VUj?p$f&ZOvL%6gQUQ}pZ_39?N4=y8RKu(o$!5gdbpvY z#I!N&zohmYlKzT|0&~{W&3blZ#vz^VUgd1yoN>i}v@;(BPG<SclaAMq47BP45xxJP zN?UV}DXSU3tnhU#a4M@gV(^VP{U1<p4u|^~;h=(t-hxkKn!i#I;pX7tziOPPsEs^T z&Ga<25`mq)Rwgi^KL;XHo-WhfvUVPgFd=(CGtb6V8Z|R(&!(1Np_c!WTt0dQTYCd~ z1%uLm*G<MEKENV$N_`vgM6+eT(Rnqx$?3zyO_*rwi%yGv1%LkMY&t=B9$_u}=M54d z!<0t|kfA@KezstCnm?k6sC-ENZpvt1npk_Ih|Rff3chwr<)X^)e)GJmQPrvk6HQcf zPXr@)<L`;HQCN4In$MZIE{BV~vPxB8hCR7|sX1nvfbZ*Vy$yC#z5P!uwm;)>19zO+ z;5OB}ds}RO(uug9=rfA36J^{lQ$9HjI)cBfWQs$#_%T<=*6ZMqyUNh?%dkt><M{K1 zJ2$m|cwkdt*>8_i7rOAZjb3*R<B!F84_%Prf$|dN3M@*=(wrYC51N&4#g#|miJk|4 zWKA;u@4oxLV=PJZq|*l)uP;$<z#@WvR73vukM&lsj^B60_^IW8EYsr)3cdar1}>g& zT%ydOS|5xD%a#PGCBklBtyL=>6$!;noaVhq@^!QGb;1tx2n$G_d5iWH2^)=8Tc2aQ z-b#E0@HD-dbT7?x9>ewR^0_R+*$~oynvDt6xC@2hwbjY8JA^HOnh4L5zs5NA(=^>~ zW_MnNW^!B))~w7!_xNVqEnz>b{D%l2dGa;23z_Yoc@K~;IwteyH!a$sM|W>QJ-@?g z)=Az(yEpI9de?=$>%r?>JO?$?%}Wuff))qe{hIBLeD4-~bRhVxnA-QQkgZF9Jzi`R z?n%hMwKZt(U@Hy+iET!{7Ib%pZ0)q2&2uH(owNeu%+k?{Fjk{6<-x9CmKbN;e|M?K zYfC+kcitl*FlW370B;POT8df?=GO8OYz=ikx+>~Jub_ZN93C^bX*2U(pwOsS=5e2G zY~2CEFy1CVRig9f^5HZ)*^Lx`q*eVd1Phi2k<Ff=Q$@Uf!CCQ0k@8q^qKE2zK-O2H z^^>;0)_WEx%gy)V(mAMnw07p^z+l3k&0c(hU;fywcZKrzl~!#whK!qQvdbz>&txOS z$OLrYQ{^Kpr>31&+k6<f+k(@Av&z<(R~yUDtjcDNC+NECp^$OkqL8tF_5p4EhJG(l z{HEXt_Tg)Qtop4uD0dmzZ{SyO5B^eG7D@PJ`w(nBCIAORMb%Ohe3hf3>OZJ^556U~ zRU*DZ9cJ*G%BV1Z9`obxyNp4q3W{b+v=RerjCjLeX)OCYd^O`w|KArq82R3EXvP9# z&|zGZem(;8lN`s5^Q_r_Ol!#!Pe&WACHAXRgdsDxXmGJQ^@^pRt{Kg>C-HvIU&6Ni z2#?uE(R_^o6$ILf(VS_n8BZN=hg{JqBB7_;cNP2Ak5t!Pbbn{2?Q1OPAn-zi_WG3G zSIPa>=#sFftavjQqhF?=mA52tauB`T%r{5JiWj)m#}`=S+v*j6E4()F*J`%EX+K3R zns1i4xQ?A?o?u26a3j0KgNHQ5rM8$amyMzy<?zE#=4`C#9ig8=x0x>H$rJkrjww8F zv}`;pPy{b?CRLiA9Pe?^I_}wyvZz4+ugA;i=Uuf<a&j-IF;!bLhWaA#s}MvN>I6xG z&lGVz2SkpG6y2<UV}-Yhf#?&cw&fcSpM$>3q0!A}v+=z5)RoPrMr3hKT2&Wp{iCD{ zMtYMci+wj?PzkP%!5*THp&O^5n*j^H+QtI0gg-xXETebxhBVkr^@iv;)dL4CwIR1? z-HJ=p)+zP@^ckF=NkLIGeWRs5m0zLzSrd0Z%dg|dd8#>oC12~QJW8kx6sJf<05ggG z?FW*7P!8#tfghNe)z0NPpxP01ur*XXhI^HkK#v6-3g9}R91oma*ZlEF-=onHA=Hl0 zEwy}m1pM7)g^vZr@Udv>Qp>uL@OL-7T6ZtJTK5pV`u5Ut_;}m_AFCF_$1}?z;T!O7 z-M8W0y4CQ1Zr!@&p?%2jLvP~eeE-XJM`3Gly!m64cE`%~ts5CyWeu&f&iDT<aMA*s z@n)1>bCpYiV?(Qqp>@VP{HK*RlzK-sjHn-Z+wFJw&)m1@p$Ff34R5L@bxb<uR1T{E zm(-6XfM%9bM5X`q{gKfi!Dq@h-kd~1KY76pqJmz3#(qPvIPG_9_S&GNlaeVfCB4P= ztiF{NYoAW_GeB#cA$nb4P8TV{<idU(hZWDHqujH@?|wsj2MT3uh`t%UoaCWq{+2~v zQo&*Cl~1HGnssU~Q!nt<_%2-Orikrc4=dL=W+R(_5eKFIM`AlB90;O!gpm@-!|W-* z{H{cQ!GL-$lrGPOY(>IDHJ5wx9kPRKp}&Hjz_h#Ilz0zC0AA?KaBck&nXnY5*Vp8L ziOi<$N+h&1@_zODl8Y&5P3O<y0?)6qFeY*zMI|)SVKDnE#TDbarhsLPAT}FyP`g&5 zy~8``j1fQL$KZpqgfNSfJ^r*%k#!TJD-1P%;(Jori#gcTXE+{X<*ObfQ<*FI3*ZZ( z3PYF#QjaaQo;9m6u)C650h>+~<9XvIbsWHIk*tv+ujcBf4)#%T(uVLWWIcGWMyvA@ z6mr>r)QCFsq0YBpOxS_%lLyUE4;0LHe_xHwO(B%bt##e-y8alC;D^s><OpNPwFpOl zqgr98>#y7fvMW9LVzrP?NLeEa=~SWYg<Lrk(mUXtPo#H<bW-gbjUG?y+C>HJauQ@~ zgWt<Uwl*zI3-)|OWIG}!LAEgbULvxEwY0d7bVGxU2Qk}M2#KRn(X*~el+&cPJcLid z5CZaJi`Kfm@Vx6NFLSR}W<I6uf#3IkiTd`aWi%o(T?!%1p@a}CPNlJfzij6(+xW{P z{AHNGJjh?}<uCXARkK>fU}YW91cyg=EG5ivsGs87>Bxq?LKx0dn83xU)TV_Ae5Db$ zk1qDcIHZ<h)`-7}LV_mBj8o##)XZtog&VO_7kglhm=g1-s6x-h#d@8m8=4t^szV3| zyYz@~g4B!Xd;>qT{CUub<v$=&^=7e4UQ|<z{*hcxCr|kO)8A#Y3KHr1PJur20%-|V zUC~c$rzNz~)AkN6q2-sRETI51h3(!VEukFJvkN~kGrM_KLOAn!fo6!gXO)FLxkci) z&ye5=+|ev_vSDMUsw>8Yt)Ae2US6x35R<%^&Z@16>B@Dw)t3TXnLV~TkIm$AwTWwZ zM+>>HMF(5|0-wtL?4R%yMAd*r!{|4dgi-`_$`}GM3Rre7R_;s`=txf#efh@?sP;!k z3drAMG9OMaZvppOPe*)twCB0%EVYIdWC;mlh(-Tir{3%DOUj^#xz*QyrlLyhyrsoN zpao5jfPPN3@#QV&1qt1ca%Dwzt(+hhPYp#6eosZwd*2f%icaJHuG`c#v`7V>ssaCm zfKdZAG9R#(fz|Z&e1YWt9oFO-`~*xxu`#LL>(`og_<6OqnN-^%={`lAC8A)e(nytX z1`A1Xvh9-M`#8C^wi^F`K|02mau+u=NYe*AZ@h?aI&{f+5deKJ>;=)BK&de)&C2nt zma@TBrm~o2!*&?A+OsITtte7YBFEgjAn+GU;Lnz_!9@@Gvm?9zkw~0r&BD!8KFDl= zQ(1wtrWMzoekD=TSpKTss<gg_iGhf51#F?Rvf5BF;1{SL5OP3&@@Dw%grA$2;0OHe zg}<whqmb8do4)>beZy@AD7OA~L!c!q&`O23YlVmI&}py)r4O_i0<8vw`iTa$nZpEH z5C#uIA+=sE<0kkjfxja7%ZEQR{2Add4s98LKc(Wky}^p-df}VFH-qm!`0j)6e)#T( z?*aH8fbST5$KX4E4&U*R5%oWHS^Zft6&nfc^nLKR1pe0G8=Gm-Lr34*j4hO(dGEy= zXk!XS039l9$Tuw>T3Z?yV^ESDgWS(fzY>RfyMKxGp7{VUz3G?KUv*5*@-dl&W76{~ zjR^v8?ngYp!)*9#xGn4I<Mp>^1^!Cd`x{~JRjFufn}A7wj@4fQl18Ckg4`^@0Z?+x z{+bo|8#dXpVF6HnYT29NYb*S1hreC$w+H^3;4ch+@BNa-rU-Cd1mA`5T?pU#@SP9e zR`|wrGklxj+XUYx_%_0~F?DP>j{4wp0RD`7_140@(%9UV1+A9Gf_|rtgZwUK?1the z=+E<W-(LuSokg#nbu5$bDOznkS>jx*hxAe~*g;ut586nDo}<O7XGa*#lxJ_&`PQPA zWdZ(Fj19D{M=fgKRVt8T-t1&QUn+#jgm0AOUcD!O?Hs&4$tA%2+Q8vrVXj9yi`sh^ zyMCVV_aa`l8c`!#7r8%?7HMuYbZ0K_&iO6k)%Bi#b`k3ii%k@2;wAhyu#YyWr#I;P z#nbjK2>@P?>0J^4Zpo7cfVM=08>(6z>H#a70+=-Bo$!xV-5d`@M`}BX0W!E6aImn# z(E}UoGT^>+24Ui75Q>q`AS{Qfto*dv)O;=*uT^@kZ0;GM<df}UeU%}@<FLBk(#oQp zXI<}qnfYt#0XnNs9;oClTV*6O9D3m5f_Ik3NU$W8v4zuxf^dxcvkO+5$o%MXw86x~ z3A}?ORkC>Nyh6+poj_{lW>Q*<(}_|%5Y8ts69+ShZ6!MWpo6QpdayP0eF6G!&7kk| z_-{=RdGz8JDV>gIHz?{hg`I0q#~2VFIF=xP_wVH9H6K0AlCAm5Okb}UK9RgK16Dnp zF6^E?9IIckqzHxpGn>8Dpw(Ef)u?6iY{L&Mhg~*RJ!Zki+{$$#$f()GjhdDGI!+4} zImSSbo;w`C00HAX-CRPwOKr%HE=p-g7dB*8vLT6})R4QRhG04D`LD_ic}<9;>{wWT z^^eNsyYscpSDbM%qUgjKSr5iix{W=pwSjF9sx3<$v*{<GYn8lf_p4odD_81T%G}ST zdaiD!W|F5?_wWorweMAfC|P+t8W&r6Nbmxb{uBN(cA{S61!4bq(H;**_EVcQH8+(V zAllXw+VWi?e)b5s7|?hE=Q3BTJb?m#MWHfDzk~hiJ1Q%HLZUZ+d2T?q(L>l<gg>`^ z0nL~(?7i<u(<JiR&~v0qog-YIoT8snw3Kn4@Na1RCVLkDhLDwIP9aTzxt@LdI}$x| zNKX}hU}mPDqS9le>~qhGZm2q+S3O0ox_)%}^t_%8JS$Z_MXDMzvu7u3RfpAod2slR zFE9_vh$gS3NNPrq#;x4APFoLp5oyA~bT4iJZf4(mmcsl5t?WLnZR&&wCntnW?bWL} z!%qlo@5P7I32{D+0hK;_z8HOsV}GpE*vhUtnN$vZVNwz7^j1%02lcFLR641YGGDT~ z(mHAAcqY$`4waq0bDcJHU;RRVR3mt4h1v?&sC23+Wq;kMwc?i>rB+l(tsq`%OSa;t zDgo8L{sjo=(v;)QXLaIkpf`F8E7fXdi#8@XD5sR8NlLj}?Mc09cuK+2+3TN&Qsnc} z&9k9${R`50=|Sy+TZESsos5$ms_-%Q_Z$?gcqp^x<oFjKr}lnJ8~>4iLyUhQIsO6Z z$c1O}7@-I%hrKgV!~BMv;n3VrkyFyq(-Et;eQG&m|1@ycK%T5V4V=^azl~<WoHR%b zM%w7<pceYo7T!2AlQvFl&|3KY4N?pJQVX#hc5SkSJ)?*=Qn<OfkrP6--WWJljKRFU zs$;WT=*YxMyyc!fsuA>mlJk^MdkPmM-&|JlLsVKqLj<LA+4K{EC-b>+c(1U67-G3m z%y<@2NJ|$*owIBVXK{w*Gb6Up<HUbup=C}!0UZ&y?pmyCGmnWo2@j^MmOu@_ihOlD zXl`~`4w;}aXLG16dxjpYz}lRdQ1^eHchbyou#@+w*N)>oyJ*0FJg8T#j@gFn6t$zF zP}WebpHYtynmW+E!LNn}YOT<d+Z(ST<lYPGeAvNmrwL@nyT9zn_c4Ioe&TT*WUhXP z+Ai+M7D}H)?iMDs1<vYMeFb&mI(RvW*Q9cI$h;0x2kD63Ido$nYs1C$(Cncx(^`=; zlOL7|Q-jD^RDLdhLXCwEXUH9PF-5NP_k2_cwj(-&&kemgHw^x(AaSW;S{k&6E&JW! z>EXaR7`kxKwuf432x6D{01tBN*Lkx;w!NfC6sE(YBQDi?oku|)8Ci-=dcdpWIvj0I zMC;JqQH(jTmM-DGe=g^gm4(LAAi}kmx!Y>8BbQ=f7irsnuE;1_jrQn#%Y+U|i*0Z2 z7p`l(Vs9_AWBCV&oA=RHwogN=T;um~gNla%8Q6Q;vL8qJr~8N=Ec@FKhh@k7qqWGL zQE9{IqGsPNntcG7vWj;XdsHn0e%r%k&171w`cdekM)k>sWk-DRL?Y5{B;DcRWXsx< z$So`zA2Vuy7hmdd-h!r4b-SagSIu4G2`4$dRzmoxPW91v$<??A-UJ&FRG|!^5Wbnz zJSQ<mr(5}y(nwj{<}$Z+<uZkefr%ITcg#R(<l-40EQjjwZ6KE8AFnydP^jn@LoP3! ztVXD^5Pmi^VvhQ}w8Y30bWn=UR(SqU9W@H3AhphaIm|@M*Sj=wC{DWGp{jUKCmloU zb3^pvRK))gy<m?e)@S=P5HncnXpe{YO<R74PQbVQPIa@7zd1TAflKLTar^JkkOm=? z5PpUl@y(=TwPy#%pk)QQd#$5<HZun1^ea^AQYCL`uyHHqqf{g>da&#d;agz2{%eSi z4M4|#O-Nk40*ofxh!2=T4+>SkRH1xJgQm3P$Riw|=s+~3iB8`7^DZtLKHc#wcRvy@ zRTc_S5zVExA@KQI#Ahqn=$M0zogIk6?hc6>@s$$7Pn8;9BI5PE#eqVNJsn7wm`S0m zp%A_Sy4*E_(<Nor=n{Vs*9&!F7D}c5<AY^?e;vL>%DjRmsX_%W4d(E&3G-A{h~6uW zU6h=cmMrKJ7A<!!Ucs$-3u%!zj~YDb@Jo{pACEagb@<BxfN0$)m??EG@CJ3!KPJhH zFd$2$k!I|2(S4Qn5q44|zI7>-7}}K0E4}ap$m2P14$y-<LKi6^EV?X&3G1Hc6_rtc zMb8+bc^sXS$iYCwjV{^eixwqM4K7447QvhpqM7I@t#S%HQMXYij@hQdXSRPV8~LOr zF;9LHwfP2url^@bO3z-Soxv@LR-IQUFDL&#<o)I{|A^_~=!EFy<R7b5SA<0$U!z@x zqoz)D1ck=#Q|t$)zsruq29xo(1AWzhJ7x#al~|u9FAM3pUu>~ZE_R#{JCgq6B*BD1 za+ejGDGcy&u`3iX+frfjr9;5mRG2j~jM}AQT!zfFa+sqZ!&`LJbYy+ak%xUV;d6!0 z1fQ#YW23WG<ik4ChU-jZE46$;Pd*#_0!Kj%=!<Z-(*vXQe7!t|d?xzD^e{$$g$}EG z!7$$ohLcBYTX}!}MQv;Qr-Nyd_7paAwIp71NY6(6z|8Dek$UHPAe&B>#BCw(n(7qT zvhgPJfsIZN(Cm@>2IetR10NR$;j`vowdFe$*4}o|vai1SINfLz!&l^=)T;rss~aVJ zYe&C=E_~XASD(PiK~kFQt38H)ODgwf8tB2@5N(hFr1qo^x}VIC^jLdLw;rJfB3r25 zfeGm_knbp7_d@BB<$58FYw2TvocKL5R7_y*zQ`RJU>B=kw!R68H*sUoM^T3<+`R^6 z6+ZW|J4cJLLh>UxGz=i)m=zoTd!1;wb%=&rdBgXM9H+{Y5aa==tsI$u)>d9=?NLG< zz<-BN4ZTkDWFB43<BK<`l+?sYvMCvmi&K*4C~g4+F|9j0n07oml|_A0KrRhfqNk@W zQ|alOK;V&A$vad(kd4Q{?FZ0H7tS8CN(kCv_Fx<Uv&%CZvp;=QcoFxl=ET2OZSr1D z{Ck7;&OlA4)Z`DPCb!3bQkvX}O`a(?`NJWa+<K|n<b4J~`&k<84>8rbcR;m)d(;N* z;SJmaQhlJNLu%m1QUfQYHn0O5`2Ceq13w<3f!AmaEHGqD&h!R)vpwa<(U#BbWK-T& zeX?IlKDn~VC)WV1m_{9v4xZI}O`b{>{<9;g@For3K=5d$?j7lWsaE0N)!;87_>mgC z9^rxPjv|V7t0>ydm!aK3H}t(-LJ>tr7AP{ENkLINqR6)*J(O}9in0n-6#Wm4!tg`K z9f^YI-v-q$<kgRsst^7%rTR8xq5pV7s(y58^;iVkI9602UFBI%49iMq+1w5%?qu)L z@nSyEHTS(-KzB)h&<uJ&H7KsG>+TCW%_*wOs!O$)=9LH%i$o$`89CLso1r^&zj{Y+ zeGUGueOGTi+pf13!uK!WI|P5fg}*b9Ru13afWIR6D}{8OS^K9qn1}wCr9BzpFMGtu zlvLBG<Z}*vj!ru-)s=tVc%Fh|dG&1Z-KqDj>8@rJd#`$b-})3SFumG+t7YSxgrDBb zJ6B8Hk9A34#k^T@nrlztI%27#Fu66ohG)jXXMRl~Rb_RsXYHyoOLoMfPc4{7_A8k! zY%x=drAyv%cu=Ta(ozt;Mh+gCN=DSl!h*IQ@<h)k+Wj6MiZllAOlBM_?iIU};I{6d zu>se3-)ioEm{uw%5H3!7sJ)ilH6>fjMwAG1Nb$1O*g&|wQEn-}X09gt+T`1y8!h>S z3lG>{JWh^8dUWUvrAI?0IxBJjf9g?#|G0ZJ>P>n_YMoo8C0Y|h-BJJ0uHI1(6HgF` zNU1KdDitO9N>xdr+vRXNJ=;5h&JtwZ#1CAL1S?8^OiO|jsJ4odsmgsOfSx@4Qf0Y0 zFgWNdgED3W&JFsEW&gA4`p}G3p@qM+Dx-sy=D^cNoxhzpj&iGsT@3v004?C~qXd3L z_bkCEXr$2t&3X%M3D3+m!oG;xyZEM~$sd}=w6XqA24OaM3KPrCiRISB@_cqPSvQ&= zBpB#_M$piNIt6dJp%{~LZQ_Zd#1n;yCnmB20eIM`b1%5}9_8cd;pxAheq#DRrzaA} zAHX=C%E!vzm1aQMx8K4WI7mGT>50UjVg3P<ygHZXw%_WlPS$y&9*wphgi4l`m|V_; zuOy%SYEYDK8Z!PWm#@w5iOca_M3rpu-&5p&VpEdh?<C_IbKs=OS1tm`m>g{Lc+FB8 zA<v+93!91PBpIAkBNLP0fJ5rr`4)hzJV<(4TzP=*Sk^7mj+85w$#*QHEZQB5-BgyV z-mz>|m!++|@~vEq#bt@#v3Sr*#p8I7y8A?b%DQk6FN<@NHJ*4ZdBKs)=P`DwH!Tl; z=V|BIPhNE1bEUvZ{h1FgKYHeapuGv&!f#qAP@USAKm9GGElt>#+Q+oE+$OgrklGfy zZ~3iNYs)7vr<wqh>&k4_%a3yZ>QL!q8f+d*KvcRswbH#<sX1Bcaj&#SZcMEdOJj?Z zm9ELvj=f3OxcIy~NdtwQsmM*a4I#&W-iRIE(2&&7*1x7SbPqQ45wF(JiE=|jY1qMr z?zd<S{f+s;cOuaSd$iuZWqr*Sz0U%l2FpfVBqH^+D4|0(P2|`O4d$04o}Wq$z9hB5 zyRpHqep74k>TgO7{%LB1>561TvccobBzzo?1kM_f#y8_6io(KVJ^nHGogTD*Sv`0; z;Mq-;lYQhXR<XQr(Rv&+epA%~W!KW9Nlc|fqj7EKCOsw>>;8j!#e&4_HwFHDW%Hj$ zC}wUFR55L0uzK3$2%Y1nVq#Yk69*(rm_JFu#4g0dE{}$ZZ+Rq492f!<@mviP`J)LF zw6(O7(I{T$1Z{2Soq3g(jW6nd&v(m|jc529SLiwA!nS7ETT{i>)=-s`T@T1_;{vB* zYbVhKZ88H9?#_3pdRi*<**TU&?kH}&N1pduc0wQq&H1BFZO#X};aH1eZ)>QwPN>g= zc2O$;5$!bJ+i`3@=8mF=s;332f#%qvI4n;OkG^XHXLEcH(1dmmcmL9V)=;6prXHxS zjjC=_U?+gMX~%0s#=Q#<Reno_^_m<!`RWrVUv1|-`7(2@>x<B->RJ;;Q?agEq#k_X z=}ET#YBp}EcF=X}Qk2BHgC<y5P!x&$3|(eT2EcFmFA_&Mkr(k@Aw@8s{-_X6IrLhJ zR?(h?PSD#w$CW{qiS7!2qJeY3E&7Z+Ooq>fj?d6XbPmRK8UCL0m@$2zj5JX7)h1(f z=6UJ+)AMP=V0>;;HGq9ZXO_FY)E%<~N@>d(qjp_psavnRz#VKkwEaBXyv>l_KF%!a zEAou!v$sp3;7&R4M1;}B-TlM%hywOSULpBAM%%kwH0OsF$GGQz>n?)p(t>G4o}`%! zq}3U!vL;IHv6Z*OK8m{m&+%VIfClPqSBoJ>D*&2d?*c&Xc)N=V>(aas($SCBC}G>r zDbuSDxlf<>f{fFpf0Rs#I{ygr{R_fLSBpMZ>p0gbJKw@s>8rFHvY$qJ$xH9U<h0U; zS;cIp>nn1yF@8mVSDC%je;E+vY2a|^GP$com!ow*Iu*En!kZwj|K|_HauE)?j{svh z4e0b)(wpD(896nWgk;qY?TiM_>MeEWh;z2X9O$Rf=_1Yp&FcaR<I@A3aI1yfjdu~Y zo&5N%%d*d8IrO~aTSjZ$3IA1rnw`dVMew@J*0}<)M?4jOMrtQz-Wh#2B}>qa(L!|o zvFw_E!Fhij?JD{FJxFnWw*&6VY&)TTdsmiyCzQqgk)My;D|z&h;g*1|1|1?;!y~lW zuy*2b+_8&przdEm2+&#niNo>pu7*+dz;&e|24wFf0>)SsJI{2z<l<U|H*`q@2Jn;I zoy2nE$C)sHOlSwP?M&X1<P&xB)0fLtlZsmwr|`UbI>7FlWbd4QqSW4QX*@hMR|-~} zrovKl{3NV2k$bW<Ugz$#>^I;<oOM2qg=(?GaV+3<=bIj%4$o;6L;&t&N#&w5%idmU z@2~`R(-~z4wF`LNhG7>|!A;9Az^4u8;nU-A!|d*VSgIKC5)u8~7|0`W2VF9DM9|@I z<Prnd``8c6H`jMHy6qJz1;8MC2(pJX5Dd_f2qWGI%Xw$0B4@DF*0J&~)T-F;G~krJ zk^qeWcp!&wyRj71UWd#*7i^EBDm!3Rscg>>a`%2|ws$GN225>D<O=--P!IF&hq#pP zclTm{=Pqf=;fD&?coj3zwIN$?(6();8it!x+h|f{Q`jSzRNID|*xP7gPdJaX5?zQE z0l-wRJbxo^AkI2SDodL>WzM?a-isnt{%g7X<YXy^XAlDuu_1eP_o!33v&?4p!B)D{ z$;Q$~%^0W|81#ee(;jqh!rQfhply?4+q7tZD1F!BjPtn*=rfLaP!r0#7Rr0=pL|(; z#_K&(JNfzV$&@_+>9g%zs8#pPg~`pW$mA*3cG;imwGBYgm(geZs@jSTJ?S@TrEFZX z6@Pp{YQ<NjR?z<1pKQg8I-$?_i|>5_ea1Xu+mGvnl67x%275xQaR|NdQnlId{6T7e z_7HmClU_Kl@}jV}BU;?NnaBT$C43LUi0b_pE4jRp&(oFhDZM|R43H=8;IAtyF#gzO zUOjX3tV%z$=nno|){ik*FkbCuRm-=C3+baY|8FXLh*SN=&k5hV!^|)v_g9lgVLV>G zU%Qw#Ob;(g^T%UW-37%g`}1ng*}txT)6qG68F!MARXLlk9|vk@Icy@Sm_m#QJ3h*V z=l;I5xEWIU=vNcVQKPz|Gv594@_7)e!k~K~da))oQZVg_R3`$Bz>r*5EBMn~<}|Ok z1Vchq;tglkd{e32yb{)zfv7S1W?J;3<oqqqn7>`a%-`Unj31?2HA?K&{Bh%dMUJrG z5VQk~g;cblca!YBL3=muekhAxb<M`-@t9UyM@qhq=)cgBa0v$C(5=^Y{_Pq>d$e3U zM{mM7DJBdLh*He-qjR!#y0B$Sv(o&Qf(>p<DY}jPBhd2&6mV7hh2*Rg_R4EvYd2tc z2Cc2Le3!uDmpdB+g^_hbumGQbqfhRjSGIWc+x!}<U*%!kc{^%T@PHrVJhQvSH0=64 zO~Z=r6z%~qlh~enrF(b|>Dh}Pn3>J{Y*2L{A_ajE?Vmx;AuM?KwQ7{Ojn-7+6<p&~ zBkcZHsUa78tRGTCUjKbcLk93N?JIIaIHV^IZJ^BT09SWt!t}_(EOD@ZP=^;P=+YWQ z4>a^o`0hk6af!q_-#qxKUo{&qbR+uG+>*t>@kc8K_>IfkD7=AV!a(l$NvCI!b3|DE zTx>0mGmF;bR&GsBW**Ryrbg<>7_}q+^WP~Q>Bo*NS|D{~jMNd#%=$l-I`RT{H%tnD z+_E~RTQ!bP?Ya}>qm=7^6yl~3w-K>uH;<C_{+H``ce3N%ioH9%<AI-3$D6|4!~=6V zg{7^M?yjJl$AuZ^S<We}SjESw4^r^ahxoY5E#aeB!Utw%J?A8R1W3LDYPYHaA7Vnn zf|bM!*k|z&fw)PF`3%u_I8sg^Qo_I#AS)qdzKWE&gp@M84*pnwUrNYWnX`j%VnZMA zgsh;w6NJ>`r(7H-=>O2*VBh{P!pVWnFnV=I0Vkxh(4pd_gA;p)P_IU(J)B0aQ*rX^ zt`wXwyt<uLt-6fTAURGjGi&E64o#RIT|qtZsy%ra`ap4e^<{4JO7y`;v3}8e*`&7g z;ck!Sr2^2gT6?m8i<k!Z3RTaA(XabYLH5JNOCVLGF?8{g%kB85ha=rtT(n9u0;b}I zaon&BMo{S4%yIMT?=l&|xO*ge;gFs+AF7OCPfVhh#Z)&mYVntt3%$v?fVZ~kb7A#v zfsM#HgUW6WeJKL#NfH?BTzb+8>>^RoQO<3egZ4CTbES%Zt&Q(za+`jqgsm$jY!SEF za7Mz`*9>B<iE}4tfVqVKCbTuPS=HSe%r^u1QZ~@4W2M~y@d6YR5LYzcqBX4b@<amO zU!&Ob%k1VA<2;*rYbU9#egC)eO&rZ$(r86fQP?_?uCswypOvOJ&aOg@(cuKorwN`9 z6^3b)P2`1tpKy=Uy`Kbs=)+hXeKQS9_1wWG2X+=+>ipj`$bb16XOP4UJ`aNw%;07f zDb1bf3~~ya;*glZ&C(DOGkEhK=VJyisp()5h5(p>${KKDA1=)nU862yEQ`EU05m1B zcP6`tX@Ia$mBZj<YkoQmGq?~xX!#=iVDXEo{NUez-pk|%7u}u7590WNnc4OMiNfcr z{9qvrSc^eN*t$c-Ryhs)EIz*J*g<YUlb0M__BuFDU?<e9ce2NJsl0$`yx?_C7GJEE zo@6a}&XZb8wy5O<X9S0X?%^20(<d?+!C&l|j3BNtf+tT)Xu6uLQn+tsGl`2ZiEiLi zlpk7uV^B!R7(s+s#N{tJK@HJ&qffH%SiuI|`LG}j!3KVFJmo?jnF>F`#yF5t=tmJs z5|;MD<kAjYC!Z!GGJ(T1v?CyAi(bcBKtyE$`4mUP+%hkr<MaO(zRzya4KqBSXZA~T zU+-c|fAYVa`)_w-&i!dsnR7p`&HcCjF3tUa<<t?6+L4D+=Dzbw&Hap-Zv`@Z=9ToB zpNv1t{Wn*g8cd|SX2bUte;iCW*f=^L$QQntb?`1N+@uu$SGXH8i2zS=ZY9S{OcX3r z6~YGuYteC?@MmtEe!~B?rXD(OIO87(#0)F0_I&suDXoU8bS5VoMVfa;2is1qF`+4c z%}6Z{W}iB>aO1oZ{WvI+@;a{=cAds(W%M@k8h54U*cCT-WCIn~Y@lM%@x0xI<Wd-~ zBl^iTZ``4QkWbADo#sO`(|<Yf%)F$NbQ38$qU*h3{0UM9JQN8q=pJdXz)lq-%OEEF z7twLW4%%rMqu0ah_I91lH(~lw|9H=T@{j0}8`1Bve#HGB{92x;L$vP;?Dqs)*Y<nw zyqn3^Z@MFMzjx##m8~EBtHiJF%=&-FbT|Lo1(>e3*BkL}CevL}nYq`aP7u>I%AI&N zgXz*<k60}*R@wGT2wLi1?>KKRF+J#XrP}FRsMDoG%ADOvnUfAjk`kxh!M5#x;9DBn z=4o4+G)`vgQlrmiZu35UCv%(kjoUM~d4vku=AG@6Q1LX~vEjPH?^H3wuol2Wiw~VH zbiT{6@#`;vjkGOZDmK2m{eQW^`{Y>W2JimcGB<dH4dUz3==u1%yuovRsSRGn_D&D$ z*H3;toJ1$)_iQor)5AbN=<5T2r!>Z#4x*XdK#1<(aiZk&i6Yc;JWYI4x7<_y2g1jP zN7L2auV;7IB<kRho+A9f%<T6ctH(?cm(XG1d<K2fkwO-ZL_0TRXjfI)$9cMljd@q9 zH9wMCa|hP^n+mDsl~T=^nLV7W8T(#~zI77oRtaTid`8lVVL)&U69+GU&GU3Z$=Muq z@(``WuZvvj0zfW=fPahF@X(8FbV2tt9t^L&kGvcki5A<)cXC^Bo)I;=*N(?h^MJQa z50iV~pzR2~p*1@ew8B{1W3cux^DE+z^GKlPNWw>@UqQj;tSA8Cq*-Is)r@SSQ_QTC z*sw$W6XRbj`~^zqUi>6~alB_{53Ls{ZmGCF)0%#mIE_7WtE35~0egxdHx<GDhiT~U z)u-<h`qU|xT&4MfGTzhmhosGdsDE{9`kFG0{c&Ep%|fyOVL+b0ek_8mNY=lE&YCj) z%X<1>GFVxJLX8v(2Yxl~FDy#3q$tT0J4+QMFW*K}5sDu4`?<kJ+G>iYf7*N@8t>W3 zJ3k<G{;8Jqwdi{G=ebFilLY3S$0C^jFWO<QmuT@}>dymee_UJ|FSD6f-p<)EvZCV| zrx_PXiK$B}o>PY^a)7Cpk{eHRx@W7@{iC2aAqGwlbIzhU@6^Z+V@#<%U;lRIu=kZq z!>$2)?$gNb=|5}3ULa(Ne~f)=+;D+?tDC8^fkuy)OAY(Wk@O*%#_o|Dc6n;Uh#pV< zNo&|zk`Kt%^;xv7VwXT>#Y%pJQ#>K#qJ_6+oKVZpNrXD+e};y1p*p1Z@YNJol1iR+ z$YrD##x$8K0ws$z#HuYIkG@1>%4%+b@0nNmbJ)sT@UkNoq;Q<Cf1}m@V)oE2LpIwi zwRzK7wav+08@2u_7@35>h+VGLkSEu0Ke3Fs&Jz0V|G6Akzg3=+Bm#7+<KN9ifNoVF z(x&7*dHfHj%S6|+dv2Dd<h<1Jrzv^rkJ^-6haXR63|~AseDUFiuM3ASo*cd|*oLaZ z7f-JL-&cF6t3lUje>nBXzE!vsN%OCTs~Nh)OLGNQ&Kctn@jo?psQEcKkS1LXDg2~4 z{hmq-TReK%5M}4{v<#*p_{CJ@5N6IHR9WocNs<7TdKRCgQFypHT^5_l-kmK;036a& zg&&xiJ#<QvO#f=YQ^PX1m0!X4q61-G!#C6#65*5@da;Jbf8-jzA=QAH*=HxE8a8o* zL!w+OQLa^`Tq{wobqLC(Ftl777KciuTr*MbuN$=;Od$$pL@=TQJt!m*6ZL*m?ZC~c z9q7Rh{H#n8SHCHB05h}MCzIl8<Q<xX`Gyt1C-X~IXNt=1j-Xq$1m4N(_NsLseluNv zVJf@6OhTSlf2tcZvv7}uJg#@g4-N1LJC0o@&jT%nDbiVzP_+aOapu2i4~;gvKz?{y zkk8}v@JEdFJTMBqqz?p|?}c(;JEHjm$)~qdQ{QTZBZaR5xi1FDUhy)>TxB-vie=C& z*qQLRs*Atzo;7?O`z|iZ0uxP#GR;^^W=ZTq1LnxUe<Ii~{~+xfY}9RX3&VKJ;%M%D zn&x~TKga89u%E7{le~{p+=>7|nLWOuoi+o9^M|yr>8tos`+@OdKfujRV!XG<-bmjP zOk+2eN{gcg?CCtI?h4-iNLw76KL4&@yx0|Z>ZJPTzmdK%n8x<al<Kcbt)KP=wq*S? z^}@t)e`x8SPvTo(+kgg<eA|Fd?2q?Q)DPqNcLzwHk@t0CZQHb)`1b#Llkk_VDVv1* zDG-T~NF_`i2*ZvhP!razy$Wl?4fXUBJTzI*eUM(Mfmv{q8N=vqFQ{drMUvQf6i+{@ zppL$IX|T#Mh|}ZA3++9=sQiZ^z15Li|N0Q}f8UMLNNT{Iou@SUuUi|*Ylf5maxZjm zA<KV@Pf^2eks9`w*M^Y)<c8gn+Au7Fo%+4ju#hDGy+QKdjTeyr!aoOD${}x52Dv6Y z2@#7_A;O)M0q1`~88CTOY1M9tA9{{Ufvay&WwdYIAjxPgC<Q*k?!V!DQXsYb#ZT3i zf2UmEr3iu-Yn7O=Kp;jdR`ReW2>xF8|KLV;?RS&1;2M6+pC${syVYZUO%_}#(ZcVW z(q+ME?DiQFb6=WD3nUA^|A9sewL0#9WNrFL(#8wV`{#4XaLB`c6bF;3+<GE;%NN(K z_!>h)3WV-Bmon1)#}6Y9PW}J4Jm}n?e<=^X@wH5O@W?4u9=y9t5;(H5E+`NFZC|E5 z_`ugP<w2@}<iSsVC)KdS!0)NebWd%idupqCPi>`pYU>ck3n&o^+oZHhT)L-zP0=)% zP$mr1w%*FEH;0l5uiKX?6TUbtQzoQNkW4u7caluleIc0;k57k_3IFR?nKI#Jf73E$ zLaLi&!rkx7Iv|ovhzILjCY;bTg`Y@}QnRLMplLdq5ECY%_45gaV@cog-n4R}1@wCA zaK#JJ&>jP3zG8<E5g$i3WhVFw3Wq<~n<*TQoI0d%NLV4^@WtOs!l4~$Do(1|@j!$t zbHquh%GOWkG<~Xu6+F26(Uld-f010vs*lt^`p7^nzM>^VNKBdENQgo<22PT*5@Yu& z`60*S6wafV0(i%RMtTwLOzNk49AgYt4)Ahez-S%9pY7rd{n3Hp^+(w?^I?T3Ujwt0 z9OYas+Lv&vQF^0RQjz7ln_LI^s)C`kHF^KoZ|}eY*Q(*UvJ&n%dpMEEe-vmm|NUR2 zy*seesBg@D34i`JgH(C}4O2CK@5@CTuj+4<=+JNl4G!?ib#7eJM;7TOIX$L0<4Jwu zd}PdY|9fOGf#20{4<;0oWgqOYYI$&7v!nJTc|Wq#<!{#8nU}vBzPLNo?Ob7Zi1h<k z<2A)P-?zQDc$W3yyzt<ef2~)~y7@|}MpqFby<X*~IZg@{jRwhDY~8qnePGt9;mhMr z_5<3`nz-Yk8uVvR0q0eo701ZoP<?Ha7Djyj&_Uko!v3j>8aiA=uwMsjL?5xZyFKA3 zzyI8mq6$Us_9+X$j7i>y^OJ9z*|NWKUeMl8k&Wk7aAyLrQ9#*Xe{i(e{0?Yb&lEUp zba|(t6LR#?IpAckT|%n<qj9g+$M2F|-mggjFJ%CjUEb*uz?uvItIIn>0=PE=Am8P^ zK?1lj1EA35y-@-vNCR+rZ<12a6r^V_c6qOp0N&34C~<iwNdUjf0GR0VPL=?+WB^Qd zd8bGKD>DG5y1ds*e*mrwfEh0DS0#XH8308t?^FrEngKA=<*kqa{+6E(Fx%y|NdUjj z04R5PZ<7H2GXtQ)<-J`3*pvZK>GD=e0FPw=RJpu&NC5LQ030swd<o#%41j8v_f84G zlmT#`%UdM@{AEl!z(SYTE&;S;04#QS?~(vs$pBd5^4={0e{9SE@VLA)C4fgV0G7GD zr4qor41nb>?<@&md<KBe<t>u{bQu6^T;ACdz#lG72UzR!&XE8Pr2*6)#yz3Sd$R=d zuNg2K3Fa0FW>p4EJ;9XA^q&E<iD2eRFxO|mY$lj_5=>48%oc*VRf73*UOLQHf|)46 z9L|8*Mljb(e=tAFfZ0wkSK>k;V4li=*-0?P63l`Om|Y0t$+FV9y9)Nz46r=}HcAE4 zar#dK!!yebyZMq<+k6lnoWS8xvB(g@xHDZ=86IK61oJfsW^V?}5rUa6!EDZeX(N~! z63ns;n0A7>L4v8wfaxHZ8zq>M445W@xk-Z2Wx#Y1f6R3fOt&Q+rkh|UNia<rFg*k_ zS%TS;0n<w`QzV$>88D1su9sk{GGO`$=BpCS#0;2Df|)A87&Bn{38q4V>A5H!W`JO9 z63oF2m>9v_Cc$jYfQb{#?GlVH0|rGTCoBy~7)J(-kznqSU?yk4m<VRR1Y^p8F%!(4 z5=?Jye>#knV5%gTa0X01!Pq63Z5c3y1ap@JvnB(kh+yuPV5&1<iV0?>1T!@Qri5Th zB^YxC%tV5jCBZOrI?QB(DU)E1WWY=%nAsA{_6(RA1T#m1S(^bflVEO^VD8I+nN2Xa zNH8-pV9E)mT!OJ?z*G>-TnVOcbUI8W!OW9jf7&u&stD#*31(*ojDuh%N-*m)V5$k` zS_x)h2F!f~b0uy)1kB6~n1uvWEWzYwz~Etqldm92uupPiu*~h0<PR-7a_<O?YCx{e zj866{nH!jr?#^~-FUaAUi*43kU>2*BtxL(0?_iIoWGQs92jwg#C$p#ID0Z;fDLG19 ze{51pB@><OvXm^79c)xemZ>fldr!_X1LVK=<Sa!F_WpZvmYFX0c1o7nPPR8COSyx+ zoRX!&#lDx4rP9f2Q?gY3f1EuHbW~M(Gm|$k2@_|41O|yqRwGgY%?ew^K{sRxMr7PK zPl8%4i&k+QU90Ov!4e@EI53Q<u40c?f2*`B=jduZw(9~~iUT49L=FB_wDdI4?Cy;d z-SL>+9oInm{oMQJzRc5Z*K;KE-u-^=yMNzzzx&<qgZ1BmVp`&d4wR*Fais(08dF^2 zK)K!$vm7WZ;$o@;<t9^9IZzUo`0`yH<@UG`@9HRbn&QKEb(EAP_B&8k!T!gAf3gO~ zzmD<~(h9{xI@TuC0^?$hj@X4-pD7X!T+;HyQU~rsgxlo6-9ost9Jr*liHHODNy0T8 zxLXOga74!?EleCcqT@bGxIIU7++BqGvI93qxLX~#qz{P)9JoD%yUKxkm~d}$;F5kL zOb6~x!kzEHJxaJU9Jr*fh#CiOe;?s`9Ju|2JJ_q^lKvr%_UgEUguAa-$9<o0Uvl7* zJ|UiT;0_V)CI@bja8nLk(htN62QKOZp#L~<QT|)vA_p$Xd(q&)4H9nHfg2{=;dgXg zlHWqSqvJ*h_x*Qt+&aR|IdDlHix(WY4TSrc19t}Du6N*)d=+;(a2pBte|iV*T*7U2 z;F7!)a~-(z3Af&X+eElQ2QJA!QG8p+Z6)0Pw{_elgxmYJj!W`P>~i2PCERBnxYrQw z76&fLC$Y|fyMl0U=Xay?@6|24+75ZIE^=gA3M#aGERbGZ=V`}8X6gGPp3wR!J`hbe zCz?K`@UgHz5)=1JLmrtwf0ZF`58qSFzJ#;*6+8sWcJzO-EqRwhHN<A}VF@dTtO&)D zjf>acD%tf0?jui|!2>>7we+ewsKmu+LhL9}YEqQg)pfe0wE8W(83rwJn@;yk4n3v< z#s)$=;+K;3zu!!vYa|8SDp=yrE2P*K=mLsCdkr%g(g14900L$*f2;uv`9=dYDi%Hh zc&`j#u42Ie|EdF|8Yx7=9bVfM3LpB=Vf{n9_^FhxuRq%g68^fego2R~q{*@WA0NBJ z2xmBi@00iw-J|=n)m!m*E5#h{!Jo~I1ag=_=7RQefXu9ve-u5d4|vJyS}Q3_6X=1K zex#2>=T$PQrWVi`f5qQ%+w?lSRDSQb6UL`>j`BJ@CAN~iSX}jlZg+(N`3i+YPtB*n zjlWHs*bF%}Xm>7Fzo}0R+J1|h`5kS}iy5*QBSza`hLFgv+n*ueIk_J$A9a2z^|Qw% zWFT6NUziH>O!Jvyj3kfZ+=x=6rpA|4xnCc$xi<%*{;jGQf58Km=#j+;-59OzQN;+} zXo}|!m59%cQg_(ILAly|NT1>Q{O-3Wwry|5i5*cB8|T#32F$6e5|PjBiGA^2IkEX% zR!-~@gu7P38DifqIrrGD0%viHFvZD(+H8B1vK<xdP`td9+*CnJiB0J~MTr-Z>5|gV z588`fAuhJ*e{}CQXc*h8Lug0qMHD7QI-d)&h}UX{oRuS|G&LLn!d9|I186A&sIiih zG=PROfQXfxtN~P%0n}N^hz4-t)M$WuD`{!~d&&SBtYlmR*jffK!%Cj68KTyf0sNVj zoT33NF9SH&N-os^E-3?;X(ih<fVwh(SypnH2JqF%f6)N5t>o1jz{h0(=UGWh19+tj z;Cw52l?L!w8NfxVyL|+3ZyCUR)!huRtPG$@bvFZiw+vvR>TU+8DFbL#y~zMy437p_ zqI#17-qit8u&)-DIM1incboz*?boNkKiN-h{UHDMYZKx|TJJ@+wJt7hV-b-Lk@Ve7 zOL2$ze`1@hTW4b;8_tZk7e`>6U0`II4O&9!4Uk$KAW5L%n2niuqZ4axrg<(+a25-g z;)Ld<5(_f5PJ#ajstXA7ojaviK!*6+(!_#Y4r1XLi-q@4EUY4_FXlh0iv^S+N-SW_ zUUJBo8IB#rjc@2$6pM;0->_F+T>f|RI+blHe`H9)kcbeOpOlM*^7Br<3V0i!Q$mu) zH4Ug=U{KL{Yo~B|dY}=C(IGWJhwg#=#R?|cK3#=(z|;QC&0e}@t*+JKEj#$26X^RC zpqGJsR*M(K^63%2H=S(_MysFEg-Fm8H|;A4k#My3SzU;PVg1`zl2A2K{|mZ=s<FiM ze|;qh6^T~Aq!W*rVys5IE?WDtP8^1$c)ditKI-486R)?#!PiT~8=}>_bm9%B_}S|v z;ul40dv)R$#YI*lK0oSzUnf4_61Qu_o1)c6b>dB?h-t(ZMr)7h#23cJc^dK7sJ~Aq z-fD@EMtn)Mx?d;01oppsow~OspPTH&f2{>O%++E3BO_Dg_|K3n!{4_<-32In==$dk zDOC+m`%D^BhM6$JO0jLUFe}{qrnr^Eu58Gq`~zpA7+;<kRKoY<%ToCECT~=4eUxxS zT=1&Y0}dx|Qbk@anyiX?k}F3Q4Zk9ba>+!g2p0%(TonzW7jG(pu|QK3C{b7tfBj=q zW6-4)#&HM50qs?K!w_ibQhz~*73rwc30f!sbWB9w>9*pgQapnEe|E=?#i<i8C|o}; z27c*2ddz>1e_$%61KbfimWiQ<t@r+`y4y}rCNnKw(Qs%x26DOxula6o^}^(yjT3RZ z53l!DYL4pguGu@UrMPxnHa1ide=F|y*5~{3zmOr#u@c$XVQGI)c<BD@kcA=7#ra`e ztLv$Dn{bEaks4!Sguc9|b1%9RTKtH9OJ0*H@Vo>PFVrK61|reoLL%o%!l#qCRU_f^ zu}|jVm6=X<O6%F*ycQ61`<viTtY?4cI_{O+{x14O?e~}6Ehn($E4BDDf7nzo=9;M` z<6daW3#lms7z(S>j(#kgcV4Wxw)Ry{^-(1LTNdD#=KmxAymXH{+_@Jk4ywXoQ`D>` zFS+DesFQ44sH-K0SE=_cIX{^=vawuT{E}ajz@V8GTK|O9<~QYZp%L1E=?yRvBIN>n z14Yj!8pdMJ-)f>qiV-wIe|3IxiiC;xHGSWKv$>Pf(S!cKTi=-Dbf3MBWYXKab(xeS zGOzBIi%KtVw@3)}W~dZC-7ot;LvB0ND$@To^Uyv5hxS;<f-JN7Fcsze>pT*vSBbcN zd_;+?QU7J8b8-W}<(F-}mT0tVhb?|)sjfYs|CBx{XNfT-$RSe{fB#+6O}61bTjjd- zN={0CY=@j<4>!A14w8S#XC(Q5sWpFdw=Vfx0teO+FjGFzxlca4y0ae>%s^{k`@GUL zP!YCUVrT9XbZIL!!vSgouZIVHVa{9P$xWvmPGYoP&&k;@;Az>MoGJgywgtN{_iXl6 z<x-U}oI}qW4f)S8e`~?P5qJ*^#O5(nwBH;0snKxvXW2b4-IpI6?GIb>x0Q*yui`rs zMyTs|9@|aNkg-+<jCnAn(#Jf?e~7Nh1PLHW3PpSvX4?c(I$AMgL1=gLaI_~?i-p@4 z(3|axhiC2?$TJNnKM7NH0wbTKTzsu3qelP(3b!|(#6(xyf8!@-?&bWuMEDe}h!Yt3 z6eYrnpNj4U3@F^*bc!)f0meofW2A&J!WbifF@Z5g7-MAS-uyKK=rgT3C&CgEjfL;N zl$9%}X_)mUP8taH3{yRQL}ENpm}IM1rL1uO;u;U>kL%Cu2z6vob>!#Wi$=I7r97X( zK>)KdNJN;ge;XK~jkl0aRv2m6(0_?9jQ2ap$8CdGhBl$=5~%<M(;dv;&0;0aKH!#E z?gl3Ei#X6cgZV6Rp&M9#ehPtAFj$2p!V0XPB7WfAW^@&8864m{nMK-#2@1@kQ;QAZ z1<XafWXqezrr7HSb_|#zn2*7Hrg%buVN@RU*>CB~f8T2J>Tn}+R1zuiTBg7-m}mZ6 zyBRO#_xZ@2T)u{Hg3FQ=l?1WJA36Xn{|os49{9fs{=Z|sFFZ;g3po34m<Cgk29qf$ zRmncXsc)yk=%F3(gr3fIFZ7JyP{VL9Dn2O8-uh6NMZGUw;_n(OKZ1Qy>FUrA#z@C+ z!;%`De^~4SHe-yuGl(vd<Pj*&asl&>A$I8;aZK+C#>McMa<Gs6l4+QkhE4H-3)s*7 zl4(s``Ur{_UBDjjOQsQK8i|XIE?_q+rghA;&J-(Lz%KR6d%gAK;|=ijlmalE7WJ8y z@W3<VK^v%ug}J-}=Ngu?6?j@`;~&WCR2*sOe?GbpW*pujVU_||e(Eo0$!4lxdLTmI z`ANhQ`(41EG59-04SnZ8O<X+f0@h*hcYeZ+E1+>#xqvNGOoPlcXo<KB*!hZSfSJND zI@bj(pqTP75-^M^T)>Xwm5AKH#}$(I8O-|(OMGCs^nZoqJ%xEsiHjFqz#gcOyla_v zf2}Dtx`5rRn2u+r<1Mkm1?*DAw3?Y#$HhDsu*r&PB{Quw#RM0yf=@E_GgH4M@)hM^ z2W1jW;bo@Yxag-FPJw|JeUj0)n9;XP@tg~Vjf&Cf%;<DWbh&`7P>d!qqe*dboeS7J z#dHEQonVT&E?^TB)6<ygX_lyV0n2+Of72>vS``<+@|A<_^Gc>;nCTc(yygP-4_?XC z$4o)|L>O$KOEH?pjHbm!hYN-46r-ukXezAlE?{#Nqsh!@vL()U0jpL_Co<ECaS?C< z`;|vB4KdS@DUN%~!8pq!FdfHC$ALcX0!A5fk?B}wIyNpIae~qP$`o;|V2%~0e|Ydq zc?VOGiVbICLnv8;*pLJUA~WFzRzRVM_u&`}gyI4PRshu%Lw~mnVW@KUO8>mc7p`pf zg}?iKUwApJgNNYx!~$RVG<d!ko_`9@{|3*$2AGNPyat}Pz;h0s2LYxHo__?-kHhmD z@O&OTFM{VE!}C+{JQkj(!SfaHe|#@I_kGV7F2cJ8cs9RZCSN0?<?9ZTuRF$r0(b?L z6{u_oU3F*^@mEFpb#zRKjWC#r32cM{YX-EH74sFC$bw?zbB|}99;_!G!^ERVw{nNG zRnb6b{Wg!hdsN_q5)LLeWQqUz{V4uurxmE76<9+XA`NYq8(2STXa&~Le}+gyd(;iA z4>hy`YiL8Hq1~atIFm>}#gcJ++30wFYaYgUehomO-Wqk;)Q;_!cm!knok?0uy^QVG z@QCa64lTZ)+>z9IFy*a^@>j>v^7tYk-XCwk`{Ug;AK)H}DxgxmltTYu{?R!H+b^K- zf3rF}h6*DiYwwjo|JsJSe-};&z<$05cXuGSo_|TTR4JSgc6}-6-wl9t<OD_OE0`j? zly~;9i{-JybxV5j;<l;`9T2Cc@ICIL1jJ~8^%UZ7m<;SU5NE@AWl_cB7wOuO5kLC6 z$V+1Fbg^1IFphM?frwY$Ef0`sJ)LV(*T;)!pi7;_*TO0Hd1?|_f3XZRIVsWjyNa;5 z%*V=VtaxAnXR8FPi#?(B4|~`i5|BC5yZ9MHM5U%8ySTv{qSNrR#Djc%fT_%jmgpR- zLKdc1L47Zy%jHdp8AF(_kyb0riruJcI90FVY4ma5v*{uA@5qznZ^D>esbl<g71sda z13Vb6^vbK+)zC_0f0n?s&SP!IgCftq_A19}`t8n+VR6#qNk!lXCKO7ALOUo%qhRX+ zlKuiM7hY<W2%ae1WtV(JBRS|vO{dGs#gza-!HnfY-O7yV!+V@`E3nnz%y&=m(f~`< zB{k41?Q@f!#CP!WZ(|W7ef}Q)3FAM*(1pn+N_+S%x)UBWe}%sje?;>2=r9?!65cR( zWNRcoQro~a!?D~<<#_y*@F|cwC&;v9RT9+Lu)GUE+onaY;!q8j(ngG)zd>kFEVR8l ziqV$f+8b$;bv-;)v;-fYx%Ws>oj3%t#vz<HSy0Qa?a=pRIL<i`%^m~Q>~Q{ceBCjQ zZYR>tx>ChIe=O$z4mU+Zp3oMx4%_D==xzAlbeG?Nb)#4j+Jf1gGG>?$%`LH479OO+ zJvfsV<1%-kDI$$L>D6IMX^-KaJQx*~&fXXEAmi1Y(pLwQ-bDQpyrDSjF0ut>TLYcP z(aeMKY4HsHY&0aM#_<7s`o!4wDq_TQue?1w2howve>T|<i+jea#bCo4N+1C%SThg( z%!XC)Cb_CRwl1E1luDaxFfYv6epvVX*vn?N8(~V_JedJys#><2{WEBC-7V_?mS|uL z<^D!qj0<hRbdkVAD-UBnjLs82VA8o4hntn9nwT0F0+mY)bGZz;w5<bJqJsV+ib?y$ zs``Oye*@KR!p<xR$k#+Y(_AMj@F+dTBLg2|8#1}pK>D~Zv;mE%jFi3)CSgjIf^>4Q zZoFSEO6_*b1u(teH#3G2yOB~k82lo-AlM#qf=2Q!s+pj-z3msurV+bo2Wr4F*iZsE z<mD=5%z*RT>g>;g(F85h`6d1vTK^mFjMBHXe}*yLZs&38j6K*Hai(Euok5^-%yDO+ zrl}1Z7~5~JwtKwFtGWQ{*m;Od_|9t5^tiCpX&!G`r=bT1G!EC224SW(GVn8J|J+{c zk@G&{hNZ%2bFkgyG85KW9>d~Izmg;u{Qp_!{{$SesjKp^r(F)G^eU)&!r6Qeu2N(9 ze+Nt%qyKV8h>3Q+=ajnjAXS3!Gm8U?Fjc}i$|XuuAl+x+<fhmg!*kve*Z-L8$9oOW zsPkc3|2}kI|J)b0yZmkoTc7D%*wV)hSiMSluHEkImaSjggXQa2m+`ghSD4l>9L;|3 zAG>~`i>S6f!7TOOt9oOFYFX&MI@L2?f7LUqD@ON>?E1P<vs#<7hCLT}c-RvHhDT{+ zC!7_!^PbZ1ki*)ehV_uIREcj~?@CMEL1Wa&aTy+$-02)1rTg3HC-&M0<>R9U`n=b& z`&>#aLzh_px4hb4Ro>qZ`~GBkRa4&I`MXC6tBLKZaTlr8*7T~?c8>ePs;0QMfBGAv zSO4a+HXXP_Ytzzv!|7~z`5bI<V5GKDs``9|8wL|!)PrGE7T=uXb5FCqI%*S-73mns z5-+gNGhQCYD;~pi;$9CsEzlyZQuJ}q+peVx?!fpMyvtvaUzFHVq)BUvTWlg{qBGEN zJOR6ideAlTa)g6OO+G}n<JyJxe_G&-sG{uGD}nGzN*}8tJ1FlFitI2Yw1baYcLZAm z=&R8qM1E}k=qMdh(OU-kb>Qp~Iw$Xeb<w~dM=;Dge09;pB-Qoktm>%kJZPe5TQN0D zDcfOO^`4XF^8&`2f_3d9x+-8q3+<)cXQT701xop~HU~Dvz6$Mb`^rAke}UabEVMiJ zRr<>t*3@E2`VTAD21C1BzDkR8Hnn_}ujA4MYbJ8(qP10AIu=Ty)_aZ{SkS$2d@r6_ z|Gn0xU&Ega;Gp3Kh)!|Ano4Hz7xzzK7B{Rpn~UySTc<hh1UCDKrE=QIjSh&z@e~Y> zsDSZ-sj<S&{bzC{vGeK*e>*hAV4a-WW_QaF2c=+hK)?7=*QpU%_0V>VG!VqMx1?c) zm<Aq~ZC~O$<E&Usdz3=5O~ca5u{6w=C-4MqM@{QlXjMOE$4sKgE|t>%gu;x|pusTX zeKHUj66)<jn?fIK#Z`cduZ<sO+b?!?qWxk9?D`sDYf}$<kUIDsf3fsnLkRawS1CV1 zgS26+==$3H1oaq6=KfhKaGPjXCP9&H6VbK^Y+qUgjiyL`44s2TY%k^^{v+)l4QT&B zfeb5jCf2}S9b7+5`!fU6{&WZ5!Umy_P$mbqSK#jRx3uLgVCsXMminNer9Oxix|deM z>T=o+X$9H#w6ucsf4fELN2*Vg!GVoccKQNusRl45t0?N~0A3<svrWNdGl|NTF!wIo zI0C?UX=30UA{zz;7iN6w@^nYNCv_=>y{W&yYM>H9Xi>Ghip_PZtC%M7{x8%5aKsF} z$2(AI{DNjUs5Qf&)(mZfYz!K^T{gp0PbqsCHbWop1N(SUfAh2(`8E0b(Dxnp#HF@S zDJW!3jQq0vQv8ngnJN>6!oj#z4RJfs1GR&ZKPP{7{wxMlHnl-IRKzB1Fg5UD4<<+* zj*IC}vFQj+7pKeLoGHTne6eT;$A`77mh-8=uW_0WlZ*{7yv{kaGW45V{HpApbYBR* z?SGkj8~CV-f2)7|?n_`v7Iwja5u+{;G`wj9sz5*!U=@_bB(O>=3J8fyL`aieftEnx zk~Yh_Ew=JJR%weZZD}9dQcD3_zyv8T7TbV4ZL~aXplN%<rZsKzNPxip&-cvSyLUGm zq}D$FU-G$k@4a*8?aY}oXU?2Cvmtyicy>dh+Sh+~e`I?O&{O8vV4|zgiJJ?zJlqO! zE5dCtZWWOb#H3k)CN|4C*r;0lj;JLvo8w1jJ7)zx2%dHLv%?1`{I>C&*>4No5SeX# zAkY<TvH1Jc-%vO!aPiRvZ-$%C|2FuhbIdyv8cM?N1kWPORQN#PVq+9>C?)HIfv!)r zd8x4zf5#Vf0=75owL{_!z<9HE($cD@Tl{xoFXiN06{QB}(qx6rBPr@F(}t&g`G!hD zR93jyMKd_Rv`W9MNQ*~n@JyM1B1K@uR5q(Ehm^<SjvMVI>fdb4T18B3HIT*(S(rKm za*+7I+Ox>6_Tn(g&++V6v~XC;KPQwBwUbfKf4~B^ymMMAA41vJWTJr2%n%lkB%^4G zt2>Dc_pY3UL=p3LvsM-)5zUK^(t4I-H*-X-{07%*HwZ;;3gu56zcUZJFDZxJ7g7A$ zHC8nChD?@HY{E~Z<G{g?dmsDKqi^gra-S%4Y+Zk#!rPr+Y^^p&)6{o&v&1MG$WiyG ze@RouSR8e8g@9H2nM@ZUfaryh0qn7jM(tWgjHB*WleASNOxE21YrqK#+8=T%O#Yfl z&`@3UDO^*}IzgK{2ygYkddTCX>X^XYh)2G(N^=i{!c8?6E|4z^78q|RRF<Jo_IROi zC_EP^kfwg{lUPiB1s42!vF%auuT{THe{bQM7leXRt)sUi{3du%C%2vYI2-WU9J?F1 zI5XIm>MH|T-f`?k=NbdQdBoBtIvCQojby-xr-A1ezM}<JycDY++z^XVW!~5YM~SxD zDFV|g#bzp+CK0BW2%9}Byu>tDP-0pqK}Q|09eT2YYwe2Tb7L?GBW4$2*554&e=(~_ zb<c>&O&-xfVnu^p7Gd8*$g9#wk?(GI1lzf;YItD2w|fIdOc>(KvaUBre*ydN>2Sx0 z@M1fBP!7T_CV3=ZORy1MyI~XV_`)_t*qqVaX_h_MXk{<g@)hUaoJQ2s+R;tT0s=C} z`ek8nbJ)y&^3bvPNO?-USp8pZe~uV1N8cnmH&J)FR08%K_PB~+ORs?@3lrQLWvurZ z8|_CD@W!^8)aTnixDty|XU!&Ye}JU4n*OqN-4~&O`5(qc4<>Qg$Ru8uFkDv3Xxado z#L>EAjyl-Fs8cQzVQpqA_a0Zr;;n|M+})(!j5iu1>Jh9u@kWx^=I1m?f5d@A!8z28 z_YlQk8xL1n4bW?O%;>CBHS>JlDNCbPaY?M|&$^9Se81a}MYKRN!)NXmm<WuHi)G!Z zF?m`rBO+e&Yt)Ax>(={F0NwMeuO<0h6Z0z?1S4FNZZ%^m%F}(sw2Nm)-3hZ}13U#C zQ5c3I{d%cpr56vU&%Y9Le_Nb)Eym^FExr<8(&1zc>52R=J@MiB2ixrrGm{~zt08W+ z6b!5qr@`*6VRrF|x{Th!9qLz!j3$2$AN@0Uu<$%Iqs2doJ9WtndK?$0(G=Jma1Xj= zHk)b-KjGYwnbVd0h@@;1FfjcRqL=K;YwwkPxf^{sZkEh_xtmr0f1Qrt4>>uKJ+ku$ zu3N}D{cP&X8z9+)r^EK4vBe62VrOt2(T*SI8==3pnP|GiK+f<S8%>;wX#y4)nj+M0 z3!W*UlCOqB!DJ*IK6J~Ni=~i8z*HDG&Vu^bwh5HRRrg!)8rT4_c;GlN9g}G(6x1rx zXx1JswB}E@`g3@Yf3w1DN(u{&G>o2Ykdtseg8LzWn}aQ8e>&n044$=-EP@Fvjv!Cx z835?&CSD{7o&_9x-8*Au&7DckjO45_c|OVKdCRqLFf^F2Gd<+e1JlSY^uQ93Ia;6& zxq#tjvm9>J@B9E~uH$6cz5H$cP_?t`N-S-&7@cs=_rTyee-q69oKzQc^7(J&SA0rg zvVX(Y-u)X=y$wQxEm3IT<Ed;cG@Ryx6=;4LFAN;kN{`mfA^ntWPiwv>)3Naj%*R?| z>-)3Y=~ikSmM~WT07hL-N)!7~?FVV(kSGP*bZpKEt~*NYJ(86+EurZ)pGAlv#X3ZI z{!wd*x*}blf4fDmr^#WF`WbN&xpc#*Pa#^{%AmqB9%w&G{n~jWjyIpztA(SdhyX|$ z_nZou-VA$N^SznO;ePgg<~dlYpJnUCAEhS$ck^^AOLYHiIc*_Q?90QEGgv(qES`Bf zG4NL=F^lIqjxABYGzl5yglz`aK`ib@uAY;68(f65e+%ePp-t{H$c5O6g%%OTDfu{! zZ8^-hv$du1{zAI!Dpr4ccLK-O=qI-a{WM&SezIsZ(;P0N^L6vN9oRio9PyqiQQi64 z{8k<P!4+NVJE~^mO-g;o)d6_(+Cn^BstVpb&JYL7wmjnACDu75xg-nPgvSeaOa9m- z<Fx&me~Z;#to}e~BtaYMH~trWjwd9XQYMS>drADRT`T&+b*!PYjTBwsXvnjZPbFcv zong<;kY^u9BeAIAh?@=4(N_*JM?Qog_o4jhd_vEmr;cTYy$vLE=g&;HuAh+f#kOHs z{0jl_q;Ovt>F*6&--6_Bj(&^Yxt8T@W2z2he|OGKeLs=J4-+_{i8)Ccs{a+)D&Ce* zG4Fj>hfLu<qJFIt7(Ob6gUxvJ9v8wvT*zLi3EA_mLCC&?bw{Ik$Il3Dzu4-@oSiV_ z-X#d~I$^%|X4u_yH4mwV^%TKPg|Hl$i>WgS$^kc#xF#fH7NZHtIL}B5$$??e(80k$ zf0p{{KeSc{{RmaI)xbeD`Y-B1{~f*4zpk-y@+dWed7B)iFx__s*V>f8b*v8^sX(TH zM(2H@dVze2Z+^iuTB1&kHQFO{oOZz*70DZEOtSeG!0JKx_o;qDn;cEX#G|E1eM<jw z8}U8S0`MK2DU69*ppm^_SPg<Nnuw*Te>+GXE-;Bsz@y%pcn&w}>3ve>&`<wDgq?{^ zMY5+;>LqIaS~iKmVX$j5t%2c~8%$RGLvchj56CUh5&vB1=RlHRs%0p_0Y+gaufKgN zUVxXDXxZH(3sA3r8LJl{6CN3~C{K#iix~QQYq&s^i$b|XAC0G6pr=zPQ@&mQe{u(> zjQTIp7BOhDn+XBH%4dL?r2rrf14~oC`5k?9i4N8s0jsCKt$)T?mwLP)daL+n=#Ax+ z+B1@BygVCo;v=^3+9Na5iH=(J!7oXjF!XXvYyqU%8a1_z?q>g(Xo=oH+?MJHlf)r7 z9JCUx#p?TaQsqWL)Jp*EQhI_Of4VazI^O<P933fpy@rp?$@plu^^Ol-zR8FymCRAE zbZO$BBW9l5FAH>(2(67(Czv6I(hjBhpB)QM=bO36L$6w7jX!}0TI7kL&`GVk4c}&2 z+0-UoXk8!&+noZ2xRYgi@9R66yrP1x@gNQm<bw&-&D&$K!|s1*jyJGje?~tehPZos z{=n*|#U5Omq4PeWF8vikD9;y!5l=U7xBvvyR_iCS(HWa#vcoQ+@Mv#5i!}sG5y@Hp zPBy!vZqSE{V4~q@SF~o6`yZ+OMaO(C@%4*ht>KId7@^V*)%DlJ$>ZYfF>NtJ&7tRL zj(Yhoa`p-+=xEiS*%%0Ge-L}$U1fH@DPPpeZ=!)ZQ~C$*>Hl0Tu@lB_^L6kx^=_W1 zV0ICnW45Z+`B!2>&12nZq7mZocrik7>saR%i)|NTebE~WFwcIvTOF0FC=WjpYg+Vp z_<tUwZ{BdU_5y~QK-%lz7$o}<#ABa)^w>eWV$_ck310~eQr|v7f5Vf~Phq?LuPDNH zZXH%n^3yhktj;Q8Jzd(|L%R6r()8mu`+RS+GwWPmQy1@{yW%zMp<|fQYPp_;4(Z#6 z8zQUS&u|QyRnUCU*4UMXj&$ah#xs4wnRVN!1daocPg)9$<E3$bbC=ZHtIz)VN{sNM zdj)6~KkS4kI4w75f5joe5So13Ub8r3gE#Xsia3}E!z1K8-<%7Wq@OB^4c^GX;8`Mg z3y+>H#nLT3((`S64Xd`NN(6L~3>u4|ir0(@X+e1i%0nKWQ^k577{?^QBmxLd!(H*; z=$o1{k%<%<?vH!Er`zuf4+eO?x7+{ND-(@=<D0_$5mKzZfAir+{z<$odVI{Qom%U^ zCE`6@Qf`mXWCmlES{(BpCpxsjX!xutpe@JYtO3aJPNH`g$<of~BjNsIWht`5gYj6R z<#kkSxQ=;`YX0j-zk<r=ySx3aaQ{4Gxv)iA!4$Z)B<4Lt@UP?=tI>d6+y3i~vv_d) zn72U+Ql72}e{ZWZ9}*gyUi{gYX%6i*es7zeJpQS@@OzqO#8|>*GAqweN4<JQNSDIt z`V2FFUHX0gs*A;~8Utu$1^^@!I3gFBidutHBcN@?v2g^8L9Joy7JQ)jEhPHpU}FI* zF}3e$icL`_yPF-sKX4apb{r_SQsc-YkKN5|fxDzUe_cKOs#XlKx3`%^!P|Y?9LT2` zo@-)*7mD>e>f0^cw;hxMEKG2wQ*-D6ZE;%6S~Dos!y?r;xi^eKehpaPo6jdWXobN} zOBt|$0@^0RECvzA5zOI2D-u6qjtR-6u_X<2YH#zHOh!fH#Xc6E{HL{H=p(5<=1*(; z1*Q{?f9SK%<JNJ3_xl%=yVTCLa<hLk=+d$ACB_2@Jk23H^NsLe@Gord;s>+@6|R6a z2(4j}Y3)JAtGBso1ce?humWL6Ok6~7^Wo`fL_E#X2qyXl#cMp1CJxPRyqE@+a?34^ zEq%gvZll99O{n7O5_OG5ig4&VOgvPpe_T$|e+Fa_(X9M0f!8n;(<vt<aeEQRb7EJB z<jjs>NQf4V7t*lMaQ2qQvwgx=u2*oXITm<2IIZ9rtJ4&iE>;D3y=Va4P5vQtH~Vjn z=AuKDe-Ily>C+ZxbSOl&^8b}@cBp~NJH;Diz%{ld)EJUrrj1zljnNy_;4d^bukPSS zf9AVAj`%XxXHQ~%cJx{w$ALLcYw(Q8v2i2MOHvgkIMo*O`?Na4ix;2wqSrZ->pV0% zoJJw7#zW{?t8Y3zYqd=|5FN1&L{rM@zVMb_-Phmhy}G)7j>p@Z)rbzOmgp&fi;Op= z9D6&pu~(X}cWPtrFgf=6;ET;S>mm=oe;ei|55H5@8{;{)9E*>{@p!(Ri`rnkYL$pj z<@ttao8AXxlMq>H0H(5>KF(#CYADM;JPBp#QUa6JFCNp>&I1sflGlYU&?WYGuKm zoRs8ewe@2ELHs?h2Y>Hvev?#7i(nr-4Q>@WpBCO-u!#8J`tKN-JWb)4?~WDRe-(>T zunUmfRky34Iq-BFYtC9ig|;Lfkgk@0N8_zDN)Ah1)yRAk_%`#~RI|FI`loI<%+n-q zPLltNgVXX>S)Er%=I{1GTEbf_(06YvMup6UpBLdIjArzM5k_TMBWo#OtgsI==p%D@ zKG8>aIB-eqqGNNnz+j#~*>DVzf2|A}Wj-Vd6GvFxq(3fBkQuZHW<$ZBvIhnKo%j@^ zps*6$i%-PAe9lWOe%|lfDe3<~1I;1AFCXVLK9fm;sJ1J_Ugp>hk2__dba}2gApMWC ztq-3ukM|eoy@(B(XbO8hpKc5@>5a#X@LK8CvkB1>E*;4!`Stj^ZW{J4f7!5qsYJ6z zx(6V(@bd`g8FG0)e7;S5F1E&PYo_D7BQeFw4B>0R1j9ac&|&nT(L%@-CQ=>h_a8$w z)V8oJ=G%|OGo)ENK5b%<*635wC31)PmIj`wW1daJ0hegYW1RCWYq4IUThwhokLTE; z<(SXOwM4V!L3msr{&qTQf5Xer$BZ5?^z(h<77FT7p&>}rhxO>cy{#um!Aw8TOgl}C zxKcNBB}{94>LsR-$7UyRB?6nE9y@d;eiEY&>}%)-E25japqwL#GsV~mmN!cXGCBgK z9737S6q&wk$W)z`kZChAoo~$a<-|;pg!+f&hD>iZiLG+}Rbg*tf9=@~#6hqfgG~lc zVJr}te$9|+Rbr;6km>K=G-Ud<#7vQdy3&~GcNJaBE7k)O4NI^#7{OXOPaC1?Z%yEB zk3#nI&u6w)z@|3Lld`b7CC2tT!`OaBhoIj<2@v%J!0}4dn=i%UypklktRqUSH%*s; z-fG+TD!S{d!|wOve?H?*+2eD?usd^P4gLE2%aw)0?wB*0A?cc4fVHza)(%~v+tw>E zw>Vm?PJEbUz9RK0=0RE9PH;CAxC7}b1%0un?0_d$dklHhdt%WcwKPYnL4J+{-dOEh z{M{RaZn4D@a=!q<<pma8UNHOb(j2VTv>oII$qb&c`7=c}e@b6A??-ThHc>BVdr8su zXEn58WlVJ*)P`STJpyy$1k25ul(AV1Serv$o^=srExW>$1;adzvTnF9fwCGvS#^yD z%F=-aj*x_!`J{oee$t<po<pAJ!rteC=bRzBS3g&=dQsT@oMU%=`xng4SWe^={mA)y zTa#dOy#9Jfe>{W8+C;mm7CeK;!D|=v-93(I6&M)MsAIru*Sat;P_F^k3v#ayd2o&` zFpwiKFxG&9>)i<$*ar**8w?m2n}`7<p$;lDVBp7gL2uM@G?m_1TfGtXkQ?rn4>;*@ zBevjd7%Ct9j|J($KLM}UXm(e086K(P{)eKU#A6yge~!gNA9}b050o|uyi<?3n;1U_ z7*|bJMIMMIPhxEQws_{H8$mNoW*uXv-_SAUv5TqEgp<HnjfSxrK~Oaz_ugRjUIWd{ zHDK(IGZHYi7Z@vk!+^25DQKo;nE_+989b}5;kE<O^LD#eCe~V==bJ{jv$^XAGzB^L zj{+S3f8AR97QI_(@C&=U`ePY}?IhLUF)Ow{b5c&;tmkg!Jwj|>M6q4|0a|Pu6yBNK zF`Za_YORGBKr&*h`s(|bE80WY-Wi+}3ye{}cc2Hx)H42teTM3z2Qad>y_U`s8R5$k z<6$c?)+S!Ogl|r<Q5AC5)K6=AsF<T}5Q|Y=e^}FLn1-99?iH=JG&|bD$mwGHp$#E# z*EOaacpSQ8G4Wy}1tEFLsn>iHP42Jg5cI1gK-3dJZ16-VsMKGwuU)J9%zj8mA#X?9 z5fbsEA6xn>W%@((^q=g<ayZGg>*CwO9d(~$I^HE)Av};}YI|50h_@JKGFNm6`t6qh ze^E~WBJYrUSJ=I)NNxX_u=rt3U^d|}SiMULWT+eWp@lI3scZLXg?kGYq1Bz{05%WA zf=3JL-LWXe=(GgVF%|@m*=Qhu`i~1&tPbd4K@;Oa@GTP$2E8F}lQ#y;Tm@jhDW~Ra z%~cVb!#SOu<){POL?O8wIX1RwRAqK-e}r9Hxw$;XSrn-+-OieMd3bo>4)t|HN$n)K zwS)DF9piM_VzJ)4@@F9Skh`PpjlPhbcpUwef~mx>ie-B5&6S$|z`cZ%Uj;7=4crxW zANop3kpwt4n{DxeU9o_cejl0s06qOheWek)0Qlc=35C2#;`f(}M7&@BRBNK!fBGiW zJD=SHW!9d-fE~CEE)vi3BTXDK`zr-t54>mQr~t|EWQII)6b9HZ-;T@7{BAWH<iC3o zT#d`rL%i{*c0cYkol!Q7k3ajD%V)~aU!Z+ADgG(icY3}(>e1dP#@!l}Rq@}ceTPX) z^fpL5(P3Oj6SkFJ#64i8&*o@4f8X(J;_-+E4ade$SkZfS2odR3@q^<v6eij;1&+F3 zm?WnG6AJM*tJ?i*IDe(UKTdzH@ekIYY4-FsIQbV%oF0!oL1t)8p*lbB&%zz+MdD#U z?pDX=*-OC|yu@<0EdHVyIzZ-`+@|SyVtui01@>`mso;HIc+TKwf04Awe;3fF?~u^T z7~03scpkye!HaQXdF3%dEZ^O$5er;DVaR)x%YH<WWnau?U#yj#ANDU6WoJFgmc^p% z{^YXH)k?E~OS6zmvw+KvXa6G!Wp`=NMGQTkp^Lce^OMT{$AzNof7zpz{T{21b-fDu zL$G=~HT&nWk;4*k?<kVJf9T!^WiQ$ptlp`tA0MoK)f5;zp#dio3o?J%K<1{Y1~Qj) z6ZY;5ZJEOe!9C``UObrn)5L?tKV0nS7Udo%%l!$x+@Ax*R_}QKXKyHhejwAf76#uj z5=1ra3f%$^$nw7bD97dkc8Mv`4-ExeoNp+gdUCfWe$Z@yMT{HSf9cZ>44>#Fu`87H zJ>`645*KdUs3fK$_|saEt6IAobM26)qwS=bry1txB(cqd!JbHtEy|oPW6#*Fv9cFn zO;G(RHOTk5a9c$O+$MgwS8npWUmux8=&RX}yUBl}crg3T(VGbdMW+}%4;w)5z#hF@ zxJ9<*d$+Fl9&x`Ye+0K}W87P*!M8@{_urw7Lx=B>WqmPN{bIbPU;LCP>wo@4tEtL- zV5`OZV#vES`pv5iSMS%H-LPq<DJQ2U{oqwc+#JD(Op4Gj_70n4YG~=ZX-;}h&6y49 zM>$WPK-zmwAaexgniZG@TY|GTnvs5pNb;8J>LQ8G{c0}?e?g4Rw;>{uAa+9077Mdk zdmb0bq%eN1lG#(5<m3Obv^4(L1S#2&�myfB9qCkkR2$mySRnJOP2wT-vD@bO;UK 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 delta 386635 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 diff --git a/SSL/src/CommonTemplates/ПолучениеДереваОбработчиковОбновления/Template.dcs b/SSL/src/CommonTemplates/ПолучениеДереваОбработчиковОбновления/Template.dcs index 35f4bf3cd..b8f7a48e8 100644 --- a/SSL/src/CommonTemplates/ПолучениеДереваОбработчиковОбновления/Template.dcs +++ b/SSL/src/CommonTemplates/ПолучениеДереваОбработчиковОбновления/Template.dcs @@ -207,6 +207,94 @@ <v8:Type>v8:UUID</v8:Type> </valueType> </field> + <field xsi:type="DataSetFieldField"> + <dataPath>ПроцедураЗаполненияДанныхОбновления</dataPath> + <field>ПроцедураЗаполненияДанныхОбновления</field> + <title xsi:type="v8:LocalStringType"> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Процедура заполнения данных обновления</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + ОчередьОтложеннойОбработки + ОчередьОтложеннойОбработки + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Очередь отложенной обработки</v8:content> + </v8:item> + + + xs:decimal + + 10 + 0 + Any + + + + + ПроцедураПроверки + ПроцедураПроверки + + <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> + + + + ЗапускатьТолькоВГлавномУзле + ЗапускатьТолькоВГлавномУзле + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Запускать только в главном узле</v8:content> + </v8:item> + + + xs:boolean + + + + ЗапускатьИВПодчиненномУзлеРИБСФильтрами + ЗапускатьИВПодчиненномУзлеРИБСФильтрами + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Запускать и в подчиненном узле РИБ с фильтрами</v8:content> + </v8:item> + + + xs:boolean + + ИсточникДанных1 Обработчики @@ -402,6 +490,20 @@ true Always + + ПервыйОбменВРИБ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Первый обмен ВРИБ</v8:content> + </v8:item> + + + xs:boolean + + false + true + Ложь @@ -457,6 +559,24 @@ <dcsset:item xsi:type="dcsset:SelectedItemField"> <dcsset:field>Идентификатор</dcsset:field> </dcsset:item> + <dcsset:item xsi:type="dcsset:SelectedItemField"> + <dcsset:field>ПроцедураЗаполненияДанныхОбновления</dcsset:field> + </dcsset:item> + <dcsset:item xsi:type="dcsset:SelectedItemField"> + <dcsset:field>ОчередьОтложеннойОбработки</dcsset:field> + </dcsset:item> + <dcsset:item xsi:type="dcsset:SelectedItemField"> + <dcsset:field>ПроцедураПроверки</dcsset:field> + </dcsset:item> + <dcsset:item xsi:type="dcsset:SelectedItemField"> + <dcsset:field>БлокируемыеОбъекты</dcsset:field> + </dcsset:item> + <dcsset:item xsi:type="dcsset:SelectedItemField"> + <dcsset:field>ЗапускатьТолькоВГлавномУзле</dcsset:field> + </dcsset:item> + <dcsset:item xsi:type="dcsset:SelectedItemField"> + <dcsset:field>ЗапускатьИВПодчиненномУзлеРИБСФильтрами</dcsset:field> + </dcsset:item> </dcsset:selection> <dcsset:filter> <dcsset:item xsi:type="dcsset:FilterItemGroup"> @@ -700,6 +820,36 @@ </v8:item> </dcsset:presentation> </dcsset:item> + <dcsset:item xsi:type="dcsset:FilterItemGroup"> + <dcsset:groupType>OrGroup</dcsset:groupType> + <dcsset:item xsi:type="dcsset:FilterItemGroup"> + <dcsset:groupType>AndGroup</dcsset:groupType> + <dcsset:item xsi:type="dcsset:FilterItemComparison"> + <dcsset:left xsi:type="dcscor:Field">ПараметрыДанных.ПервыйОбменВРИБ</dcsset:left> + <dcsset:comparisonType>Equal</dcsset:comparisonType> + <dcsset:right xsi:type="xs:boolean">true</dcsset:right> + </dcsset:item> + <dcsset:item xsi:type="dcsset:FilterItemComparison"> + <dcsset:left xsi:type="dcscor:Field">ЗапускатьТолькоВГлавномУзле</dcsset:left> + <dcsset:comparisonType>Equal</dcsset:comparisonType> + <dcsset:right xsi:type="xs:boolean">true</dcsset:right> + </dcsset:item> + </dcsset:item> + <dcsset:item xsi:type="dcsset:FilterItemGroup"> + <dcsset:groupType>AndGroup</dcsset:groupType> + <dcsset:item xsi:type="dcsset:FilterItemComparison"> + <dcsset:left xsi:type="dcscor:Field">ПараметрыДанных.ПервыйОбменВРИБ</dcsset:left> + <dcsset:comparisonType>Equal</dcsset:comparisonType> + <dcsset:right xsi:type="xs:boolean">false</dcsset:right> + </dcsset:item> + </dcsset:item> + <dcsset:presentation xsi:type="v8:LocalStringType"> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>// Первый обмен в РИБ</v8:content> + </v8:item> + </dcsset:presentation> + </dcsset:item> </dcsset:filter> <dcsset:item xsi:type="dcsset:StructureItemGroup"> <dcsset:groupItems> diff --git a/SSL/src/Configuration/Configuration.mdo b/SSL/src/Configuration/Configuration.mdo index c2b5255df..25ae13dd5 100644 --- a/SSL/src/Configuration/Configuration.mdo +++ b/SSL/src/Configuration/Configuration.mdo @@ -1,24 +1,25 @@ <?xml version="1.0" encoding="UTF-8"?> -<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="1c4b2fec-0149-4c93-94e0-5bada52028a8"> +<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="bc2f8f73-f89c-4157-ac0e-abb0813b074b"> <name>БиблиотекаСтандартныхПодсистем</name> <synonym> <key>ru</key> <value>Библиотека стандартных подсистем, редакция 2.3</value> </synonym> - <containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="5700b320-f340-4764-89f7-62abc9ca0c0a"/> - <containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="363041a3-6d12-40dc-8be4-3102019815a2"/> - <containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="33a5c4f8-9191-490f-adf9-469fe3ede40c"/> - <containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="5183633a-811a-4e7c-9e8a-3135de786409"/> - <containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="076c3c27-bc90-4b81-aead-b105197e01c3"/> - <containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="19d3e3fb-ea83-49bc-852c-0d165782295b"/> - <containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="cfd7d634-8c6f-4556-b4b6-f88f59cab116"/> + <containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="ae7feada-3351-4bb6-a1e8-8c6157f10c0c"/> + <containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="93ffe952-7f43-44c2-85bf-d520ba3640d3"/> + <containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="dcccadbb-4c7c-4dab-bbb9-b0d1f202c539"/> + <containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="1aeb25d3-1e8d-49a5-b17a-1f62f92fdf7e"/> + <containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="4b01c957-91d1-4b36-8f24-777c259afb31"/> + <containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="5da2a863-3c83-4717-89ce-95d0961f23cc"/> + <containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="5c087024-0af4-4d11-bb87-04c7c69ad878"/> <defaultRunMode>ManagedApplication</defaultRunMode> <usePurposes>PersonalComputer</usePurposes> <scriptVariant>Russian</scriptVariant> <defaultRoles>Role.ПолныеПрава</defaultRoles> <defaultRoles>Role.АдминистраторСистемы</defaultRoles> + <defaultRoles>Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок</defaultRoles> <vendor>Фирма "1С"</vendor> - <version>2.3.1.88</version> + <version>2.3.2.195</version> <updateCatalogAddress>http://downloads.v8.1c.ru/tmplts/</updateCatalogAddress> <includeHelpInContents>true</includeHelpInContents> <usedMobileApplicationFunctionalities> @@ -45,7 +46,7 @@ <splash/> <copyright> <key>ru</key> - <value>Copyright © ООО "1С", 2009-2015. Все права защищены</value> + <value>Copyright © ООО "1С-Софт", 2009-2017. Все права защищены</value> </copyright> <vendorInformationAddress> <key>ru</key> @@ -78,6 +79,14 @@ <styleItems>StyleItem.ГруппаВариантовОтчетовЦвет82</styleItems> <styleItems>StyleItem.ДатаГрафикаИзмененнаяФон</styleItems> <styleItems>StyleItem.ДобавленныйРеквизитФон</styleItems> + <styleItems>StyleItem.ДосьеВторостепеннаяНадписьЦвет</styleItems> + <styleItems>StyleItem.ДосьеГиперссылкаЦвет</styleItems> + <styleItems>StyleItem.ДосьеПанельРазделовЦвет</styleItems> + <styleItems>StyleItem.ДосьеПлохаяОценкаЦвет</styleItems> + <styleItems>StyleItem.ДосьеРамкаСтрокиЦвет</styleItems> + <styleItems>StyleItem.ДосьеРасшифровкаЦвет</styleItems> + <styleItems>StyleItem.ДосьеТекущийРазделЦвет</styleItems> + <styleItems>StyleItem.ДосьеХорошаяОценкаЦвет</styleItems> <styleItems>StyleItem.ЗаблокированныйРеквизитЦвет</styleItems> <styleItems>StyleItem.ЗавершенныйБизнесПроцесс</styleItems> <styleItems>StyleItem.ЗаголовокДелаЦвет</styleItems> @@ -111,6 +120,7 @@ <styleItems>StyleItem.ЦветФонаКорректногоКонтрагентаВДокументе</styleItems> <styleItems>StyleItem.ЦветФонаНекорректногоКонтрагентаВДокументе</styleItems> <styleItems>StyleItem.ЦветФонаТестовогоРежимаСервисаФНС</styleItems> + <commonPictures>CommonPicture.GoogleMaps</commonPictures> <commonPictures>CommonPicture.Skype</commonPictures> <commonPictures>CommonPicture.АрхивАнкета</commonPictures> <commonPictures>CommonPicture.БыстрыеНастройкиОтчета</commonPictures> @@ -131,7 +141,9 @@ <commonPictures>CommonPicture.ВидыОпераций</commonPictures> <commonPictures>CommonPicture.ВнешняяСсылкаНаОбъектИнформационнойБазы</commonPictures> <commonPictures>CommonPicture.Вопрос32</commonPictures> + <commonPictures>CommonPicture.ВосклицательныйЗнакКрасный</commonPictures> <commonPictures>CommonPicture.ВосклицательныйЗнакСерый</commonPictures> + <commonPictures>CommonPicture.ВставитьИзБуфераОбмена</commonPictures> <commonPictures>CommonPicture.Встреча</commonPictures> <commonPictures>CommonPicture.ВыбратьВариантОтчета</commonPictures> <commonPictures>CommonPicture.ВыполнитьРегламентноеЗаданиеВручную</commonPictures> @@ -147,7 +159,6 @@ <commonPictures>CommonPicture.ГраницаСнизу</commonPictures> <commonPictures>CommonPicture.ГраницаСправа</commonPictures> <commonPictures>CommonPicture.ДлительнаяОперация48</commonPictures> - <commonPictures>CommonPicture.ДобавитьВложенный</commonPictures> <commonPictures>CommonPicture.ДобавитьПростойВопрос</commonPictures> <commonPictures>CommonPicture.ДобавитьРазделАнкеты</commonPictures> <commonPictures>CommonPicture.ДобавитьРодительский</commonPictures> @@ -173,13 +184,14 @@ <commonPictures>CommonPicture.ДокументПроведенКоннекторНиз</commonPictures> <commonPictures>CommonPicture.ДополнительныеРеквизитыСведения</commonPictures> <commonPictures>CommonPicture.ДополнительныеСведения</commonPictures> + <commonPictures>CommonPicture.ДосьеУвеличениеПоказателя</commonPictures> + <commonPictures>CommonPicture.ДосьеУменьшениеПоказателя</commonPictures> <commonPictures>CommonPicture.ЗавершитьРедактированиеМакета</commonPictures> <commonPictures>CommonPicture.ЗакончитьРедактированиеФайла</commonPictures> <commonPictures>CommonPicture.Заметка</commonPictures> <commonPictures>CommonPicture.ЗанятьФайл</commonPictures> <commonPictures>CommonPicture.ЗапланированноеВзаимодействие</commonPictures> <commonPictures>CommonPicture.ЗаполнитьФорму</commonPictures> - <commonPictures>CommonPicture.Запустить1СБухфонТакси</commonPictures> <commonPictures>CommonPicture.ЗаставкаВнешнейОперации</commonPictures> <commonPictures>CommonPicture.Зашифрован</commonPictures> <commonPictures>CommonPicture.ЗаявлениеНаВыпускСертификатаКлюча</commonPictures> @@ -195,6 +207,7 @@ <commonPictures>CommonPicture.ИспользоватьПользовательскийМакет</commonPictures> <commonPictures>CommonPicture.ИспользоватьПоставляемыйМакет</commonPictures> <commonPictures>CommonPicture.ИсторияВерсий</commonPictures> + <commonPictures>CommonPicture.ИсторияИзменений</commonPictures> <commonPictures>CommonPicture.КоличествоРассмотрено</commonPictures> <commonPictures>CommonPicture.КоллекцияВариантыВажности</commonPictures> <commonPictures>CommonPicture.КоллекцияВидыАктивныхПользователей</commonPictures> @@ -220,12 +233,10 @@ <commonPictures>CommonPicture.КоннекторЛевоНизПраво</commonPictures> <commonPictures>CommonPicture.КоннекторЛевоПраво</commonPictures> <commonPictures>CommonPicture.КоннекторПравоНиз</commonPictures> - <commonPictures>CommonPicture.Консультант1СБухфон</commonPictures> <commonPictures>CommonPicture.КонтактнаяИнформация</commonPictures> <commonPictures>CommonPicture.КонтактнаяИнформацияНеактуально</commonPictures> <commonPictures>CommonPicture.КонтактнаяИнформацияПерейтиПоСсылке</commonPictures> <commonPictures>CommonPicture.КурсивноеНачертание</commonPictures> - <commonPictures>CommonPicture.Логотип1СБухфон</commonPictures> <commonPictures>CommonPicture.НаписатьSMS</commonPictures> <commonPictures>CommonPicture.Напоминание</commonPictures> <commonPictures>CommonPicture.НезавершившаясяПроверка</commonPictures> @@ -251,6 +262,7 @@ <commonPictures>CommonPicture.Оформление</commonPictures> <commonPictures>CommonPicture.Ошибка32</commonPictures> <commonPictures>CommonPicture.Папка</commonPictures> + <commonPictures>CommonPicture.ПапкаОблачногоСервиса</commonPictures> <commonPictures>CommonPicture.Папки</commonPictures> <commonPictures>CommonPicture.ПапкиЭлектронныхПисем</commonPictures> <commonPictures>CommonPicture.ПереместитьВЗакладкиВзаимодействия</commonPictures> @@ -302,6 +314,7 @@ <commonPictures>CommonPicture.РассылкаОтчетов</commonPictures> <commonPictures>CommonPicture.РедактироватьМакет</commonPictures> <commonPictures>CommonPicture.РедактироватьФайл</commonPictures> + <commonPictures>CommonPicture.Сервис1СКонтрагент</commonPictures> <commonPictures>CommonPicture.СертификатКлюча</commonPictures> <commonPictures>CommonPicture.СинхронизацияДанных</commonPictures> <commonPictures>CommonPicture.СинхронизацияДанныхАнализДанных48</commonPictures> @@ -317,6 +330,7 @@ <commonPictures>CommonPicture.СинхронизацияДанныхПодсистема</commonPictures> <commonPictures>CommonPicture.СинхронизацияДанныхСостояниеРасписания</commonPictures> <commonPictures>CommonPicture.Сканирование</commonPictures> + <commonPictures>CommonPicture.СкопироватьВБуферОбмена</commonPictures> <commonPictures>CommonPicture.Скрепка</commonPictures> <commonPictures>CommonPicture.СкрытаяНастройкаОтчета</commonPictures> <commonPictures>CommonPicture.СнятьПризнакРассмотреноУВзаимодействия</commonPictures> @@ -378,13 +392,16 @@ <commonPictures>CommonPicture.ЭлектронноеПисьмо</commonPictures> <commonPictures>CommonPicture.ЭлектронноеПисьмоВходящее</commonPictures> <commonPictures>CommonPicture.ЭлектронноеПисьмоИсходящее</commonPictures> + <commonPictures>CommonPicture.ЯндексКарты</commonPictures> <sessionParameters>SessionParameter.АвторизованныйПользователь</sessionParameters> <sessionParameters>SessionParameter.АдресСвойствРасширений</sessionParameters> + <sessionParameters>SessionParameter.БуферОбмена</sessionParameters> <sessionParameters>SessionParameter.ВерсияРасширений</sessionParameters> <sessionParameters>SessionParameter.ВидыДоступаБезГруппДляЗначенияДоступа</sessionParameters> <sessionParameters>SessionParameter.ВидыДоступаСОднойГруппойДляЗначенияДоступа</sessionParameters> <sessionParameters>SessionParameter.ВидыДоступаСОтключеннымИспользованием</sessionParameters> <sessionParameters>SessionParameter.ВсеВидыДоступаКромеСпециальных</sessionParameters> + <sessionParameters>SessionParameter.ВыполняетсяЗаписьОбъекта</sessionParameters> <sessionParameters>SessionParameter.ВыполняетсяОбновлениеИБ</sessionParameters> <sessionParameters>SessionParameter.ДатаОбновленияПовторноИспользуемыхЗначенийМРО</sessionParameters> <sessionParameters>SessionParameter.ДействующиеДатыЗапретаИзменения</sessionParameters> @@ -395,12 +412,14 @@ <sessionParameters>SessionParameter.ОбновитьВерсиюДатЗапретаИзмененияПослеЗагрузкиДанных</sessionParameters> <sessionParameters>SessionParameter.ОшибкаРасхожденияВерсийПриПолученииДанных</sessionParameters> <sessionParameters>SessionParameter.ПараметрыКлиентаНаСервере</sessionParameters> + <sessionParameters>SessionParameter.ПараметрыОбработчикаОбновления</sessionParameters> <sessionParameters>SessionParameter.ПараметрыСеансаСинхронизацииДанных</sessionParameters> <sessionParameters>SessionParameter.ПаролиСинхронизацииДанных</sessionParameters> <sessionParameters>SessionParameter.ПравилаВыборочнойРегистрацииОбъектов</sessionParameters> <sessionParameters>SessionParameter.ПравилаРегистрацииОбъектов</sessionParameters> <sessionParameters>SessionParameter.ПриоритетныеДанныеОбмена</sessionParameters> <sessionParameters>SessionParameter.ПропуститьПроверкуЗапретаИзменения</sessionParameters> + <sessionParameters>SessionParameter.РаботаСВнешнимиРесурсамиЗаблокирована</sessionParameters> <sessionParameters>SessionParameter.РежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском</sessionParameters> <sessionParameters>SessionParameter.ТаблицыСОтдельнымиНастройкамиПрав</sessionParameters> <sessionParameters>SessionParameter.ТекущийВнешнийПользователь</sessionParameters> @@ -421,6 +440,7 @@ <roles>Role.ДобавлениеИзменениеВидовКонтактнойИнформации</roles> <roles>Role.ДобавлениеИзменениеВнешнихПользователей</roles> <roles>Role.ДобавлениеИзменениеГрафиковРаботы</roles> + <roles>Role.ДобавлениеИзменениеДатЗапретаИзменения</roles> <roles>Role.ДобавлениеИзменениеДополнительныхОтчетовИОбработок</roles> <roles>Role.ДобавлениеИзменениеДополнительныхРеквизитовИСведений</roles> <roles>Role.ДобавлениеИзменениеЗаданий</roles> @@ -450,10 +470,11 @@ <roles>Role.ИспользованиеНапоминаний</roles> <roles>Role.ИспользованиеСтруктурыПодчиненности</roles> <roles>Role.ИспользованиеТекущихДел</roles> + <roles>Role.ИспользованиеУниверсальногоОтчета</roles> <roles>Role.ИспользованиеУчетныхЗаписейЭлектроннойПочты</roles> <roles>Role.ИспользованиеЭлектроннойПодписиИШифрования</roles> <roles>Role.НастройкаИОценкаПроизводительности</roles> - <roles>Role.НастройкаСинхронизацииДанных</roles> + <roles>Role.НастройкаСинхронизацииФайлов</roles> <roles>Role.ОбновлениеКонфигурацииБазыДанных</roles> <roles>Role.ОтправкаSMS</roles> <roles>Role.ПолныеПрава</roles> @@ -495,6 +516,7 @@ <commonModules>CommonModule.АдресныйКлассификаторКлиентСервер</commonModules> <commonModules>CommonModule.АдресныйКлассификаторПовтИсп</commonModules> <commonModules>CommonModule.АдресныйКлассификаторСлужебный</commonModules> + <commonModules>CommonModule.АнализЖурналаРегистрацииКлиент</commonModules> <commonModules>CommonModule.АнализЖурналаРегистрацииСлужебный</commonModules> <commonModules>CommonModule.Анкетирование</commonModules> <commonModules>CommonModule.АнкетированиеКлиент</commonModules> @@ -536,8 +558,9 @@ <commonModules>CommonModule.ДатыЗапретаИзмененияСлужебный</commonModules> <commonModules>CommonModule.ДатыЗапретаИзмененияСлужебныйПовтИсп</commonModules> <commonModules>CommonModule.ДлительныеОперации</commonModules> + <commonModules>CommonModule.ДлительныеОперацииВызовСервера</commonModules> + <commonModules>CommonModule.ДлительныеОперацииГлобальный</commonModules> <commonModules>CommonModule.ДлительныеОперацииКлиент</commonModules> - <commonModules>CommonModule.ДлительныеОперацииКлиентПовтИсп</commonModules> <commonModules>CommonModule.ДополнительныеОтчетыИОбработки</commonModules> <commonModules>CommonModule.ДополнительныеОтчетыИОбработкиВБезопасномРежиме</commonModules> <commonModules>CommonModule.ДополнительныеОтчетыИОбработкиВБезопасномРежимеВызовСервера</commonModules> @@ -554,7 +577,9 @@ <commonModules>CommonModule.ЖурналРегистрации</commonModules> <commonModules>CommonModule.ЖурналРегистрацииВызовСервера</commonModules> <commonModules>CommonModule.ЖурналРегистрацииКлиент</commonModules> + <commonModules>CommonModule.ЗагрузкаДанныхИзФайла</commonModules> <commonModules>CommonModule.ЗагрузкаДанныхИзФайлаКлиент</commonModules> + <commonModules>CommonModule.ЗагрузкаДанныхИзФайлаКлиентСервер</commonModules> <commonModules>CommonModule.ЗагрузкаДанныхИзФайлаПереопределяемый</commonModules> <commonModules>CommonModule.ЗаметкиПользователя</commonModules> <commonModules>CommonModule.ЗаметкиПользователяСлужебный</commonModules> @@ -629,8 +654,8 @@ <commonModules>CommonModule.ОбновлениеИнформационнойБазыСобытия</commonModules> <commonModules>CommonModule.ОбновлениеКонфигурации</commonModules> <commonModules>CommonModule.ОбновлениеКонфигурацииВызовСервера</commonModules> + <commonModules>CommonModule.ОбновлениеКонфигурацииГлобальный</commonModules> <commonModules>CommonModule.ОбновлениеКонфигурацииКлиент</commonModules> - <commonModules>CommonModule.ОбновлениеКонфигурацииКлиентГлобальный</commonModules> <commonModules>CommonModule.ОбновлениеКонфигурацииКлиентПереопределяемый</commonModules> <commonModules>CommonModule.ОбновлениеКонфигурацииКлиентСервер</commonModules> <commonModules>CommonModule.ОбновлениеКонфигурацииПереопределяемый</commonModules> @@ -655,11 +680,13 @@ <commonModules>CommonModule.ОтчетыКлиентСервер</commonModules> <commonModules>CommonModule.ОтчетыПереопределяемый</commonModules> <commonModules>CommonModule.ОтчетыСервер</commonModules> + <commonModules>CommonModule.ОценкаПроизводительности</commonModules> + <commonModules>CommonModule.ОценкаПроизводительностиВызовСервера</commonModules> <commonModules>CommonModule.ОценкаПроизводительностиВызовСервераПовтИсп</commonModules> - <commonModules>CommonModule.ОценкаПроизводительностиВызовСервераПолныеПрава</commonModules> + <commonModules>CommonModule.ОценкаПроизводительностиГлобальный</commonModules> <commonModules>CommonModule.ОценкаПроизводительностиКлиент</commonModules> - <commonModules>CommonModule.ОценкаПроизводительностиКлиентГлобальный</commonModules> <commonModules>CommonModule.ОценкаПроизводительностиКлиентСервер</commonModules> + <commonModules>CommonModule.ОценкаПроизводительностиПовтИсп</commonModules> <commonModules>CommonModule.ОценкаПроизводительностиСлужебный</commonModules> <commonModules>CommonModule.ОчередьЗаданий</commonModules> <commonModules>CommonModule.ОчередьЗаданийПереопределяемый</commonModules> @@ -735,6 +762,8 @@ <commonModules>CommonModule.РаботаСПочтовымиСообщениями</commonModules> <commonModules>CommonModule.РаботаСПочтовымиСообщениямиВызовСервера</commonModules> <commonModules>CommonModule.РаботаСПочтовымиСообщениямиКлиент</commonModules> + <commonModules>CommonModule.РаботаСПочтовымиСообщениямиКлиентПереопределяемый</commonModules> + <commonModules>CommonModule.РаботаСПочтовымиСообщениямиПереопределяемый</commonModules> <commonModules>CommonModule.РаботаСПочтовымиСообщениямиСлужебный</commonModules> <commonModules>CommonModule.РаботаСФайлами</commonModules> <commonModules>CommonModule.РаботаСФайламиКлиент</commonModules> @@ -748,16 +777,18 @@ <commonModules>CommonModule.РассылкаОтчетов</commonModules> <commonModules>CommonModule.РассылкаОтчетовВызовСервера</commonModules> <commonModules>CommonModule.РассылкаОтчетовКлиент</commonModules> + <commonModules>CommonModule.РассылкаОтчетовКлиентПереопределяемый</commonModules> <commonModules>CommonModule.РассылкаОтчетовКлиентСервер</commonModules> <commonModules>CommonModule.РассылкаОтчетовПереопределяемый</commonModules> <commonModules>CommonModule.РассылкаОтчетовПовтИсп</commonModules> <commonModules>CommonModule.РегламентированныеДанныеКлиентСервер</commonModules> + <commonModules>CommonModule.РегламентныеЗаданияКлиент</commonModules> <commonModules>CommonModule.РегламентныеЗаданияПереопределяемый</commonModules> <commonModules>CommonModule.РегламентныеЗаданияСервер</commonModules> <commonModules>CommonModule.РегламентныеЗаданияСлужебный</commonModules> <commonModules>CommonModule.РезервноеКопированиеИБВызовСервера</commonModules> + <commonModules>CommonModule.РезервноеКопированиеИБГлобальный</commonModules> <commonModules>CommonModule.РезервноеКопированиеИБКлиент</commonModules> - <commonModules>CommonModule.РезервноеКопированиеИБКлиентГлобальный</commonModules> <commonModules>CommonModule.РезервноеКопированиеИБКлиентПереопределяемый</commonModules> <commonModules>CommonModule.РезервноеКопированиеИБСервер</commonModules> <commonModules>CommonModule.РезервноеКопированиеОбластейДанных</commonModules> @@ -765,11 +796,16 @@ <commonModules>CommonModule.РезервноеКопированиеОбластейДанныхДанныеФормРеализацияWebСервис</commonModules> <commonModules>CommonModule.РезервноеКопированиеОбластейДанныхКлиент</commonModules> <commonModules>CommonModule.РезервноеКопированиеОбластейДанныхПовтИсп</commonModules> + <commonModules>CommonModule.СклонениеПредставленийОбъектов</commonModules> + <commonModules>CommonModule.СклонениеПредставленийОбъектовВызовСервера</commonModules> + <commonModules>CommonModule.СклонениеПредставленийОбъектовКлиент</commonModules> + <commonModules>CommonModule.СклонениеПредставленийОбъектовКлиентСервер</commonModules> <commonModules>CommonModule.СоединенияИБ</commonModules> <commonModules>CommonModule.СоединенияИБВызовСервера</commonModules> <commonModules>CommonModule.СоединенияИБГлобальный</commonModules> <commonModules>CommonModule.СоединенияИБКлиент</commonModules> <commonModules>CommonModule.СоединенияИБКлиентСервер</commonModules> + <commonModules>CommonModule.СоединенияИБПереопределяемый</commonModules> <commonModules>CommonModule.СообщенияВМоделиСервиса</commonModules> <commonModules>CommonModule.СообщенияВМоделиСервисаОбработчикСообщений</commonModules> <commonModules>CommonModule.СообщенияВМоделиСервисаПереопределяемый</commonModules> @@ -869,6 +905,7 @@ <commonAttributes>CommonAttribute.ОбластьДанныхВспомогательныеДанные</commonAttributes> <commonAttributes>CommonAttribute.ОбластьДанныхОсновныеДанные</commonAttributes> <exchangePlans>ExchangePlan.ОбменСообщениями</exchangePlans> + <exchangePlans>ExchangePlan.ОбновлениеИнформационнойБазы</exchangePlans> <xDTOPackages>XDTOPackage.AgentScripts</xDTOPackages> <xDTOPackages>XDTOPackage.ApdexExport</xDTOPackages> <xDTOPackages>XDTOPackage.ApplicationExtensionsManifest_1_0_0_1</xDTOPackages> @@ -876,8 +913,10 @@ <xDTOPackages>XDTOPackage.ApplicationPermissions_1_0_0_1</xDTOPackages> <xDTOPackages>XDTOPackage.ApplicationPermissions_1_0_0_2</xDTOPackages> <xDTOPackages>XDTOPackage.CurrencyRates</xDTOPackages> - <xDTOPackages>XDTOPackage.EnterpriseData_1_0_1</xDTOPackages> + <xDTOPackages>XDTOPackage.EnterpriseData_1_0_3</xDTOPackages> <xDTOPackages>XDTOPackage.EnterpriseData_1_0_beta</xDTOPackages> + <xDTOPackages>XDTOPackage.EnterpriseData_1_1_3</xDTOPackages> + <xDTOPackages>XDTOPackage.EnterpriseData_1_2_1</xDTOPackages> <xDTOPackages>XDTOPackage.EnterpriseDataExchange_1_0_1_1</xDTOPackages> <xDTOPackages>XDTOPackage.ExchangeMessage</xDTOPackages> <xDTOPackages>XDTOPackage.SuppliedData</xDTOPackages> @@ -899,7 +938,6 @@ <xDTOPackages>XDTOPackage.УправлениеПриложениями</xDTOPackages> <xDTOPackages>XDTOPackage.УправлениеРезервнымКопированиемОбластейДанных_1_0_2_1</xDTOPackages> <xDTOPackages>XDTOPackage.УправлениеРезервнымКопированиемОбластейДанных_1_0_3_1</xDTOPackages> - <webServices>WebService.AddressSystem</webServices> <webServices>WebService.EnterpriseDataExchange_1_0_1_1</webServices> <webServices>WebService.EnterpriseDataUpload_1_0_1_1</webServices> <webServices>WebService.Exchange</webServices> @@ -918,7 +956,6 @@ <eventSubscriptions>EventSubscription.ВыполнитьДействияПриЗаписиПрисоединенногоФайла</eventSubscriptions> <eventSubscriptions>EventSubscription.ДополнительныеОтчетыИОбработкиПередУдалениемИдентификатораОбъектаМетаданных</eventSubscriptions> <eventSubscriptions>EventSubscription.ЗаписатьВерсиюОбъекта</eventSubscriptions> - <eventSubscriptions>EventSubscription.ЗаписатьВерсиюПриОбменеДанными</eventSubscriptions> <eventSubscriptions>EventSubscription.ЗаписатьВСписокБизнесПроцессов</eventSubscriptions> <eventSubscriptions>EventSubscription.ЗаписатьЗависимыеНаборыЗначенийДоступа</eventSubscriptions> <eventSubscriptions>EventSubscription.ЗаписатьНаборыЗначенийДоступа</eventSubscriptions> @@ -952,7 +989,8 @@ <eventSubscriptions>EventSubscription.ПриПолученииДанныхОтГлавного</eventSubscriptions> <eventSubscriptions>EventSubscription.ПриПолученииДанныхОтПодчиненного</eventSubscriptions> <eventSubscriptions>EventSubscription.ПроверитьВозможностьИзмененияНастроекОбменаДанными</eventSubscriptions> - <eventSubscriptions>EventSubscription.ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента</eventSubscriptions> + <eventSubscriptions>EventSubscription.ПроверитьДатуЗапретаИзмененияПередЗаписьюДокументаЗащитаПерсональныхДанных</eventSubscriptions> + <eventSubscriptions>EventSubscription.ПроверитьДатуЗапретаИзмененияПередУдалениемЗащитаПерсональныхДанных</eventSubscriptions> <eventSubscriptions>EventSubscription.ПроверитьЗначениеОпцииИспользоватьНесколькоОрганизаций</eventSubscriptions> <eventSubscriptions>EventSubscription.ПроверитьИзменениеФильтровОграниченияМиграцииДанных</eventSubscriptions> <eventSubscriptions>EventSubscription.ПроверитьИзмененияДатВПредмете</eventSubscriptions> @@ -993,6 +1031,7 @@ <scheduledJobs>ScheduledJob.РассылкаОтчетов</scheduledJobs> <scheduledJobs>ScheduledJob.СборИОтправкаСтатистики</scheduledJobs> <scheduledJobs>ScheduledJob.СинхронизацияДанных</scheduledJobs> + <scheduledJobs>ScheduledJob.СинхронизацияФайлов</scheduledJobs> <scheduledJobs>ScheduledJob.СлияниеИндексаППД</scheduledJobs> <scheduledJobs>ScheduledJob.УведомлениеИсполнителейОНовыхЗадачах</scheduledJobs> <scheduledJobs>ScheduledJob.УдалениеНеактуальнойИнформацииСинхронизации</scheduledJobs> @@ -1012,6 +1051,8 @@ <functionalOptions>FunctionalOption.ИспользоватьГруппыПользователей</functionalOptions> <functionalOptions>FunctionalOption.ИспользоватьДатуИВремяВСрокахЗадач</functionalOptions> <functionalOptions>FunctionalOption.ИспользоватьДатуНачалаЗадач</functionalOptions> + <functionalOptions>FunctionalOption.ИспользоватьДатыЗапретаЗагрузки</functionalOptions> + <functionalOptions>FunctionalOption.ИспользоватьДатыЗапретаИзменения</functionalOptions> <functionalOptions>FunctionalOption.ИспользоватьДополнительныеОбработкиЗаполненияОбъекта</functionalOptions> <functionalOptions>FunctionalOption.ИспользоватьДополнительныеОбработкиСозданияСвязанныхОбъектов</functionalOptions> <functionalOptions>FunctionalOption.ИспользоватьДополнительныеОтчеты</functionalOptions> @@ -1031,12 +1072,15 @@ <functionalOptions>FunctionalOption.ИспользоватьПрочиеВзаимодействия</functionalOptions> <functionalOptions>FunctionalOption.ИспользоватьСинхронизациюДанных</functionalOptions> <functionalOptions>FunctionalOption.ИспользоватьСинхронизациюДанныхВЛокальномРежиме</functionalOptions> + <functionalOptions>FunctionalOption.ИспользоватьСинхронизациюФайлов</functionalOptions> <functionalOptions>FunctionalOption.ИспользоватьШифрование</functionalOptions> <functionalOptions>FunctionalOption.ИспользоватьЭлектронныеПодписи</functionalOptions> <functionalOptions>FunctionalOption.ИспользуютсяПрофилиБезопасности</functionalOptions> <functionalOptions>FunctionalOption.ИсточникДанныхАдресногоКлассификатора</functionalOptions> <functionalOptions>FunctionalOption.НеИспользоватьНесколькоОрганизаций</functionalOptions> <functionalOptions>FunctionalOption.ОграничиватьДоступНаУровнеЗаписей</functionalOptions> + <functionalOptions>FunctionalOption.ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно</functionalOptions> + <functionalOptions>FunctionalOption.ОтложенноеОбновлениеЗавершеноУспешно</functionalOptions> <functionalOptions>FunctionalOption.ОтправлятьПисьмаВФорматеHTML</functionalOptions> <functionalOptions>FunctionalOption.ПоддержкаРезервногоКопирования</functionalOptions> <functionalOptions>FunctionalOption.ПрефиксИнформационнойБазы</functionalOptions> @@ -1080,6 +1124,7 @@ <definedTypes>DefinedType.МестоХраненияФункциональныхОпций</definedTypes> <definedTypes>DefinedType.ОбъектАдресации</definedTypes> <definedTypes>DefinedType.ОбъектСДополнительнымиКомандами</definedTypes> + <definedTypes>DefinedType.ОбъектСклонения</definedTypes> <definedTypes>DefinedType.ОбъектСНастраиваемымПорядком</definedTypes> <definedTypes>DefinedType.Подразделение</definedTypes> <definedTypes>DefinedType.ПолучательРассылки</definedTypes> @@ -1162,6 +1207,7 @@ <constants>Constant.ВыполнитьРезервноеКопированиеОбластиДанных</constants> <constants>Constant.ВыполнятьЗамерыПроизводительности</constants> <constants>Constant.ГлавныйУзел</constants> + <constants>Constant.ДанныеДляОтложенногоОбновления</constants> <constants>Constant.ДатаОбновленияПовторноИспользуемыхЗначенийМРО</constants> <constants>Constant.ДатаПоследнегоСтартаКлиентскогоСеанса</constants> <constants>Constant.ДатаПоследнейВыгрузкиЗамеровПроизводительностиUTC</constants> @@ -1198,6 +1244,7 @@ <constants>Constant.ИспользоватьПроверкуКонтрагентов</constants> <constants>Constant.ИспользоватьПрочиеВзаимодействия</constants> <constants>Constant.ИспользоватьРазделениеПоОбластямДанных</constants> + <constants>Constant.ИспользоватьСервисСклоненияMorpher</constants> <constants>Constant.ИспользоватьСинхронизациюДанных</constants> <constants>Constant.ИспользоватьСинхронизациюДанныхВЛокальномРежиме</constants> <constants>Constant.ИспользоватьСинхронизациюДанныхВМоделиСервиса</constants> @@ -1213,6 +1260,7 @@ <constants>Constant.КоличествоЭлементовВТранзакцииЗагрузкиДанных</constants> <constants>Constant.КонечнаяТочкаМенеджераСервиса</constants> <constants>Constant.КопироватьОбластиДанныхИзЭталонной</constants> + <constants>Constant.ЛогинДоступаКСервисуMorpher</constants> <constants>Constant.МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания</constants> <constants>Constant.МаксимальноеКоличествоИсполняющихФоновыхЗаданий</constants> <constants>Constant.МаксимальныйРазмерФайла</constants> @@ -1225,10 +1273,14 @@ <constants>Constant.НеИспользоватьНесколькоОрганизаций</constants> <constants>Constant.НеИспользоватьРазделениеПоОбластямДанных</constants> <constants>Constant.ОграничиватьДоступНаУровнеЗаписей</constants> + <constants>Constant.ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно</constants> + <constants>Constant.ОтложенноеОбновлениеЗавершеноУспешно</constants> <constants>Constant.ОтправлятьПисьмаВФорматеHTML</constants> <constants>Constant.ОценкаПроизводительностиПериодЗаписи</constants> <constants>Constant.ОценкаПроизводительностиЭкспортВсехКлючевыхОпераций</constants> <constants>Constant.ПараметрыАдминистрированияИБ</constants> + <constants>Constant.ПараметрыАдресногоКлассификатора</constants> + <constants>Constant.ПараметрыБлокировкиРаботыСВнешнимиРесурсами</constants> <constants>Constant.ПараметрыВариантовОтчетов</constants> <constants>Constant.ПараметрыДополнительныхРеквизитовИСведений</constants> <constants>Constant.ПараметрыИтоговИАгрегатов</constants> @@ -1248,7 +1300,9 @@ <constants>Constant.РазделыОписанияИзмененийСистемы</constants> <constants>Constant.РазмерБлокаПередачиФайла</constants> <constants>Constant.РежимИспользованияИнформационнойБазы</constants> + <constants>Constant.СведенияОБлокируемыхОбъектах</constants> <constants>Constant.СведенияОбОбновленииИБ</constants> + <constants>Constant.СинхронизироватьФайлы</constants> <constants>Constant.СоздаватьЭлектронныеПодписиНаСервере</constants> <constants>Constant.СообщениеБлокировкиПриОбновленииКонфигурации</constants> <constants>Constant.СообщениеОбменаДаннымиИзГлавногоУзла</constants> @@ -1273,6 +1327,7 @@ <commonForms>CommonForm.АвторизацияНаСайтеПоддержкиПользователей</commonForms> <commonForms>CommonForm.АдреснаяКнига</commonForms> <commonForms>CommonForm.АутентификацияВСервисе</commonForms> + <commonForms>CommonForm.БлокировкаРаботыСВнешнимиРесурсами</commonForms> <commonForms>CommonForm.ВводЗначенийСпискомСФлажками</commonForms> <commonForms>CommonForm.ВключениеПроверкиКонтрагентов</commonForms> <commonForms>CommonForm.Вопрос</commonForms> @@ -1288,6 +1343,7 @@ <commonForms>CommonForm.ВыборКонтакта</commonForms> <commonForms>CommonForm.ВыборОбъектовИнформационнойБазыКорреспондента</commonForms> <commonForms>CommonForm.ВыборОбъектовМетаданных</commonForms> + <commonForms>CommonForm.ВыборПолучателейСообщения</commonForms> <commonForms>CommonForm.ВыборПроизвольногоПериода</commonForms> <commonForms>CommonForm.ВыборПутиКАрхивуФайловТомов</commonForms> <commonForms>CommonForm.ВыборРолиИсполнителя</commonForms> @@ -1305,6 +1361,7 @@ <commonForms>CommonForm.МастерАнкетыПоРазделам</commonForms> <commonForms>CommonForm.НапоминаниеПриРедактировании</commonForms> <commonForms>CommonForm.Настройка1СБухфон</commonForms> + <commonForms>CommonForm.НастройкаДоступаКСервисуMorpher</commonForms> <commonForms>CommonForm.НастройкаКомандПечати</commonForms> <commonForms>CommonForm.НастройкаМоихОтчетовИОбработок</commonForms> <commonForms>CommonForm.НастройкаОбменаСообщениями</commonForms> @@ -1315,6 +1372,7 @@ <commonForms>CommonForm.НастройкиПроверкиКонтрагентов</commonForms> <commonForms>CommonForm.НастройкиРегистрацииСобытийДоступаКПерсональнымДанным</commonForms> <commonForms>CommonForm.НастройкиЭлектроннойПодписиИШифрования</commonForms> + <commonForms>CommonForm.НовыйПароль</commonForms> <commonForms>CommonForm.ОписаниеИзмененийПрограммы</commonForms> <commonForms>CommonForm.ОтправкаSMS</commonForms> <commonForms>CommonForm.ОтправкаСообщения</commonForms> @@ -1331,13 +1389,16 @@ <commonForms>CommonForm.ПользователиСервиса</commonForms> <commonForms>CommonForm.ПраваДоступа</commonForms> <commonForms>CommonForm.ПраваДоступаУпрощенно</commonForms> + <commonForms>CommonForm.ПредупреждениеБезопасности</commonForms> <commonForms>CommonForm.ПредупрежденияПриЗавершенииРаботы</commonForms> <commonForms>CommonForm.ПрисоединенныеФайлы</commonForms> <commonForms>CommonForm.ПрисоединенныйФайл</commonForms> <commonForms>CommonForm.РедактированиеДополнительныхСведений</commonForms> <commonForms>CommonForm.РедактированиеТабличногоДокумента</commonForms> + <commonForms>CommonForm.Сервис1СКонтрагентНеПодключен</commonForms> <commonForms>CommonForm.Сертификат</commonForms> <commonForms>CommonForm.СинхронизацияДанных</commonForms> + <commonForms>CommonForm.Склонения</commonForms> <commonForms>CommonForm.СменаПароля</commonForms> <commonForms>CommonForm.СозданиеНачальногоОбразаСФайлами</commonForms> <commonForms>CommonForm.СозданиеРезервнойКопии</commonForms> @@ -1403,6 +1464,7 @@ <catalogs>Catalog.СценарииОбменовДанными</catalogs> <catalogs>Catalog.ТелефонныйЗвонокПрисоединенныеФайлы</catalogs> <catalogs>Catalog.ТомаХраненияФайлов</catalogs> + <catalogs>Catalog.УчетныеЗаписиСинхронизацииФайлов</catalogs> <catalogs>Catalog.УчетныеЗаписиЭлектроннойПочты</catalogs> <catalogs>Catalog.Файлы</catalogs> <catalogs>Catalog.ШаблоныАнкет</catalogs> @@ -1478,7 +1540,6 @@ <enums>Enum.ТипыКонтактнойИнформации</enums> <enums>Enum.ТипыОтветовНаВопрос</enums> <enums>Enum.ТипыОтчетов</enums> - <enums>Enum.ТипыПользователей</enums> <enums>Enum.ТипыПроблемОбменаДанными</enums> <enums>Enum.ТипыТабличныхВопросов</enums> <enums>Enum.ТипыТекстовЭлектронныхПисем</enums> @@ -1500,20 +1561,22 @@ <reports>Report.БизнесПроцессы</reports> <reports>Report.ДатыЗапретаЗагрузки</reports> <reports>Report.ДатыЗапретаИзменения</reports> - <reports>Report.ДействующиеСогласияНаОбработкуПерсональныхДанных</reports> <reports>Report.ДосьеКонтрагента</reports> <reports>Report.ЗависшиеЗадачи</reports> <reports>Report.Задания</reports> <reports>Report.Задачи</reports> <reports>Report.ЗадачиИстекающиеНаДату</reports> <reports>Report.ИспользуемыеВнешниеРесурсы</reports> - <reports>Report.ИстекающиеСогласияНаОбработкуПерсональныхДанных</reports> <reports>Report.МестаИспользованияСсылок</reports> <reports>Report.ОбъемНенужныхФайлов</reports> <reports>Report.ПраваДоступа</reports> <reports>Report.ПроверкаЦелостностиТома</reports> + <reports>Report.ПрогрессОтложенногоОбновления</reports> <reports>Report.ПросроченныеЗадачи</reports> <reports>Report.СведенияОПользователях</reports> + <reports>Report.СогласияНаОбработкуПерсональныхДанныхДействующие</reports> + <reports>Report.СогласияНаОбработкуПерсональныхДанныхИстекающие</reports> + <reports>Report.УниверсальныйОтчет</reports> <dataProcessors>DataProcessor.АвтоматическоеИзвлечениеТекстов</dataProcessors> <dataProcessors>DataProcessor.АктивныеПользователи</dataProcessors> <dataProcessors>DataProcessor.БлокировкаРаботыПользователей</dataProcessors> @@ -1527,6 +1590,7 @@ <dataProcessors>DataProcessor.ЗаменаИОбъединениеЭлементов</dataProcessors> <dataProcessors>DataProcessor.ЗащитаПерсональныхДанных</dataProcessors> <dataProcessors>DataProcessor.ИнструкцияПоИспользованиюПроверкиКонтрагента</dataProcessors> + <dataProcessors>DataProcessor.ИнструментыРазработчикаПроверкаКонтрагентов</dataProcessors> <dataProcessors>DataProcessor.ИнтерактивноеИзменениеВыгрузки</dataProcessors> <dataProcessors>DataProcessor.ИнформацияПриЗапуске</dataProcessors> <dataProcessors>DataProcessor.КартаМаршрутаБизнесПроцесса</dataProcessors> @@ -1552,9 +1616,9 @@ <dataProcessors>DataProcessor.РезервноеКопированиеИБ</dataProcessors> <dataProcessors>DataProcessor.РезультатыОбновленияПрограммы</dataProcessors> <dataProcessors>DataProcessor.РекомендацияПоПовышениюСкоростиРаботы</dataProcessors> - <dataProcessors>DataProcessor.СбросНастроекПроверкиКонтрагентов</dataProcessors> <dataProcessors>DataProcessor.СдвигГраницыИтогов</dataProcessors> <dataProcessors>DataProcessor.Сканирование</dataProcessors> + <dataProcessors>DataProcessor.СкрытиеКонфиденциальнойИнформации</dataProcessors> <dataProcessors>DataProcessor.СопоставлениеОбъектовИнформационныхБаз</dataProcessors> <dataProcessors>DataProcessor.СписокРеспондента</dataProcessors> <dataProcessors>DataProcessor.ТекущиеДела</dataProcessors> @@ -1575,6 +1639,7 @@ <informationRegisters>InformationRegister.ГруппыЗначенийДоступа</informationRegisters> <informationRegisters>InformationRegister.ДампыПлатформы</informationRegisters> <informationRegisters>InformationRegister.ДанныеБизнесПроцессов</informationRegisters> + <informationRegisters>InformationRegister.ДанныеОбработанныеВЦентральномУзлеРИБ</informationRegisters> <informationRegisters>InformationRegister.ДанныеОбъектовДляРегистрацииВОбменах</informationRegisters> <informationRegisters>InformationRegister.ДанныеПроизводственногоКалендаря</informationRegisters> <informationRegisters>InformationRegister.ДатыЗапретаИзменения</informationRegisters> @@ -1616,6 +1681,7 @@ <informationRegisters>InformationRegister.НастройкиОтправителя</informationRegisters> <informationRegisters>InformationRegister.НастройкиОчисткиФайлов</informationRegisters> <informationRegisters>InformationRegister.НастройкиПравОбъектов</informationRegisters> + <informationRegisters>InformationRegister.НастройкиСинхронизацииФайлов</informationRegisters> <informationRegisters>InformationRegister.НастройкиТранспортаОбмена</informationRegisters> <informationRegisters>InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты</informationRegisters> <informationRegisters>InformationRegister.НепринятыеКОбработкеПочтовымСерверомИсходящиеПисьма</informationRegisters> @@ -1624,6 +1690,7 @@ <informationRegisters>InformationRegister.ОбластиПерсональныхДанных</informationRegisters> <informationRegisters>InformationRegister.ОбластиСтатистики</informationRegisters> <informationRegisters>InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных</informationRegisters> + <informationRegisters>InformationRegister.ОбработчикиСобытийСинхронизацииДанных</informationRegisters> <informationRegisters>InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз</informationRegisters> <informationRegisters>InformationRegister.ОперацииСтатистики</informationRegisters> <informationRegisters>InformationRegister.ОриентирыАдресныхОбъектов</informationRegisters> @@ -1652,6 +1719,7 @@ <informationRegisters>InformationRegister.РучныеИзмененияГрафиковРаботы</informationRegisters> <informationRegisters>InformationRegister.СведенияОПользователях</informationRegisters> <informationRegisters>InformationRegister.СеансыВерсийРасширений</informationRegisters> + <informationRegisters>InformationRegister.СклоненияПредставленийОбъектов</informationRegisters> <informationRegisters>InformationRegister.СлужебныеАдресныеСведения</informationRegisters> <informationRegisters>InformationRegister.СогласияНаОбработкуПерсональныхДанных</informationRegisters> <informationRegisters>InformationRegister.СообщенияОбменаДанными</informationRegisters> @@ -1665,6 +1733,7 @@ <informationRegisters>InformationRegister.СостоянияРассылокОтчетов</informationRegisters> <informationRegisters>InformationRegister.СостоянияУспешныхОбменовДанными</informationRegisters> <informationRegisters>InformationRegister.СтатистикаКонфигурации</informationRegisters> + <informationRegisters>InformationRegister.СтатусыСинхронизацииФайловСОблачнымСервисом</informationRegisters> <informationRegisters>InformationRegister.ТаблицыГруппДоступа</informationRegisters> <informationRegisters>InformationRegister.УведомленияОПрочтении</informationRegisters> <informationRegisters>InformationRegister.Удалить_АктивныеПредметыВзаимодействий</informationRegisters> diff --git a/SSL/src/Configuration/ManagedApplicationModule.bsl b/SSL/src/Configuration/ManagedApplicationModule.bsl index f00a79105..954c63774 100644 --- a/SSL/src/Configuration/ManagedApplicationModule.bsl +++ b/SSL/src/Configuration/ManagedApplicationModule.bsl @@ -1,6 +1,8 @@ // СтандартныеПодсистемы +#Область ОписаниеПеременных + // Хранилище глобальных переменных. // // ПараметрыПриложения - Соответствие - хранилище переменных, где: @@ -18,6 +20,8 @@ // ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"] = ...; Перем ПараметрыПриложения Экспорт; +#КонецОбласти + // Конец СтандартныеПодсистемы diff --git a/SSL/src/Configuration/OrdinaryApplicationModule.bsl b/SSL/src/Configuration/OrdinaryApplicationModule.bsl index f00a79105..954c63774 100644 --- a/SSL/src/Configuration/OrdinaryApplicationModule.bsl +++ b/SSL/src/Configuration/OrdinaryApplicationModule.bsl @@ -1,6 +1,8 @@ // СтандартныеПодсистемы +#Область ОписаниеПеременных + // Хранилище глобальных переменных. // // ПараметрыПриложения - Соответствие - хранилище переменных, где: @@ -18,6 +20,8 @@ // ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"] = ...; Перем ПараметрыПриложения Экспорт; +#КонецОбласти + // Конец СтандартныеПодсистемы diff --git a/SSL/src/Configuration/ParentConfigurations.bin b/SSL/src/Configuration/ParentConfigurations.bin index 7006e1907..d8a9441b3 100644 --- a/SSL/src/Configuration/ParentConfigurations.bin +++ b/SSL/src/Configuration/ParentConfigurations.bin @@ -1 +1 @@ -{6,1,1,315d7dbf-008c-46ac-bc11-c32ef9ea7a44,1,38a1a3b6-a753-48ca-b03b-f99e4453c6f0,"2.3.1.88","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",5079,1,0,1c4b2fec-0149-4c93-94e0-5bada52028a8,1c4b2fec-0149-4c93-94e0-5bada52028a8,0,1,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,0,1,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,0,1,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,0,1,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,0,1,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,0,1,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,0,1,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,0,1,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,0,1,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,0,1,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,0,1,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,0,1,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,0,1,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,0,1,b4629308-42de-4ce8-8591-cf0c2399a9a2,b4629308-42de-4ce8-8591-cf0c2399a9a2,0,1,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,0,1,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,0,1,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,0,1,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1861ee4f-fd8c-4afa-8441-c074bf51f67e,0,1,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,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,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,0,1,ec797c75-02c5-4cf5-9dd4-26cd46c99519,ec797c75-02c5-4cf5-9dd4-26cd46c99519,0,1,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,0,1,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,0,1,da9b32e6-5b93-45a6-84b2-238d57541e18,da9b32e6-5b93-45a6-84b2-238d57541e18,0,1,e43d69c8-b284-47da-b236-611bc94a15b6,e43d69c8-b284-47da-b236-611bc94a15b6,0,1,31eeaa05-6c49-41fe-b840-1edbad4ccac7,31eeaa05-6c49-41fe-b840-1edbad4ccac7,0,1,842c8662-8f39-405e-9665-cbdabc116159,842c8662-8f39-405e-9665-cbdabc116159,0,1,fca4b033-02c4-4d61-9e51-87783c3cef1a,fca4b033-02c4-4d61-9e51-87783c3cef1a,0,1,396ef757-d7f6-411f-8c4c-1acb1106a009,396ef757-d7f6-411f-8c4c-1acb1106a009,0,1,cb8da2f3-f8bb-4736-8381-7c153670e3e2,cb8da2f3-f8bb-4736-8381-7c153670e3e2,0,1,9aecf4f5-46ed-4d1c-a584-cd028e467895,9aecf4f5-46ed-4d1c-a584-cd028e467895,0,1,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,0,1,a1f10624-22e9-4a04-b370-fd085bdd0f67,a1f10624-22e9-4a04-b370-fd085bdd0f67,0,1,3cffb795-2a28-4beb-92f4-5813f5994022,3cffb795-2a28-4beb-92f4-5813f5994022,0,1,3323ca68-1382-4710-a933-23fc56588935,3323ca68-1382-4710-a933-23fc56588935,0,1,d6b12775-3255-42b8-88b2-62684f873e7d,d6b12775-3255-42b8-88b2-62684f873e7d,0,1,cc23d903-ccc5-42f4-862f-5e7278c4e346,cc23d903-ccc5-42f4-862f-5e7278c4e346,0,1,98f033e0-fa40-46e0-b51a-87a066749a35,98f033e0-fa40-46e0-b51a-87a066749a35,0,1,c53df2d1-4564-47a7-b66e-6a23ba28270e,c53df2d1-4564-47a7-b66e-6a23ba28270e,0,1,e8b4cb2d-1180-4101-954a-4cb5464f198c,e8b4cb2d-1180-4101-954a-4cb5464f198c,0,1,f765c4ba-c677-42ac-8d0c-43bb485405b9,f765c4ba-c677-42ac-8d0c-43bb485405b9,0,1,83192b3e-e7a9-4595-8887-24cda84457a9,83192b3e-e7a9-4595-8887-24cda84457a9,0,1,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,0,1,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,0,1,08eeb8f1-944f-4450-83f6-ef20aaab7d86,08eeb8f1-944f-4450-83f6-ef20aaab7d86,0,1,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,0,1,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,ede5b7c8-42cd-4f79-90d2-b518e96d6b26,ede5b7c8-42cd-4f79-90d2-b518e96d6b26,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,8f3b124f-bf85-4307-8f0c-47be1fb5c8b0,8f3b124f-bf85-4307-8f0c-47be1fb5c8b0,0,1,e15c3525-3453-4b62-834e-7c69f9efea51,e15c3525-3453-4b62-834e-7c69f9efea51,0,1,1514eaff-faea-4d82-9465-d0d5292bb31d,1514eaff-faea-4d82-9465-d0d5292bb31d,0,1,6d39c6df-8cd4-47ad-9125-252b37d94575,6d39c6df-8cd4-47ad-9125-252b37d94575,0,1,739bd762-01fc-41a8-87df-844eb201962f,739bd762-01fc-41a8-87df-844eb201962f,0,1,ad7c6165-2e44-4808-a77a-526882cf5dea,ad7c6165-2e44-4808-a77a-526882cf5dea,0,1,ad73f3a3-1dad-4920-af41-bda2b947a2f7,ad73f3a3-1dad-4920-af41-bda2b947a2f7,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,950f8fd5-fefa-4bfb-97a0-38d77ae830dc,950f8fd5-fefa-4bfb-97a0-38d77ae830dc,0,1,cbbe7903-842c-470e-a2d6-7928df8f13e9,cbbe7903-842c-470e-a2d6-7928df8f13e9,0,1,e02597c4-bf45-4bb6-931d-62d2244f6c58,e02597c4-bf45-4bb6-931d-62d2244f6c58,0,1,42544966-445d-41b8-b6a0-a52c64758232,42544966-445d-41b8-b6a0-a52c64758232,0,1,a92d8a5c-b595-4c6c-9f1d-5e85b1c996b4,a92d8a5c-b595-4c6c-9f1d-5e85b1c996b4,0,1,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,0,1,9eea8645-1ba7-4faf-9c29-868bf99964dd,9eea8645-1ba7-4faf-9c29-868bf99964dd,0,1,e07ac651-07b9-4664-95e8-f3f5a51ea6c8,e07ac651-07b9-4664-95e8-f3f5a51ea6c8,0,1,0c44fdea-7b81-45be-87f5-d64456a9d379,0c44fdea-7b81-45be-87f5-d64456a9d379,0,1,d09d6f21-cdd0-485e-bd2c-92092a1aefef,d09d6f21-cdd0-485e-bd2c-92092a1aefef,0,1,2fc92784-d7b0-4209-ba06-e54bed2f160f,2fc92784-d7b0-4209-ba06-e54bed2f160f,0,1,e5b8ea5c-1d08-4f0a-a8f6-358b41e2e9f2,e5b8ea5c-1d08-4f0a-a8f6-358b41e2e9f2,0,1,a4e4c91c-fd95-4369-98e3-51ffba79937b,a4e4c91c-fd95-4369-98e3-51ffba79937b,0,1,d343d4e4-d07f-48c3-9db1-774b0d6c1134,d343d4e4-d07f-48c3-9db1-774b0d6c1134,0,1,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,0,1,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,0,1,968588bb-ee60-4399-955a-3ec4228d3c40,968588bb-ee60-4399-955a-3ec4228d3c40,0,1,23dbb528-7ea8-44ae-a1f2-b7608118666e,23dbb528-7ea8-44ae-a1f2-b7608118666e,0,1,b9627855-6773-4a59-b7d3-f9e2e565cd9e,b9627855-6773-4a59-b7d3-f9e2e565cd9e,0,1,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,0,1,283ce432-3553-4de9-94a2-ca9a590437f5,283ce432-3553-4de9-94a2-ca9a590437f5,0,1,0da019ca-1fc7-4aff-8998-3ddcccf10872,0da019ca-1fc7-4aff-8998-3ddcccf10872,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,47accdc7-8fa0-4996-9305-c42b6ca12df9,47accdc7-8fa0-4996-9305-c42b6ca12df9,0,1,5abc496c-5745-4220-9fdc-bac092717871,5abc496c-5745-4220-9fdc-bac092717871,0,1,256981be-18fd-4d92-91f3-6d55bbe2181b,256981be-18fd-4d92-91f3-6d55bbe2181b,0,1,d6bcf961-b863-486e-9a88-c237ae84f7c3,d6bcf961-b863-486e-9a88-c237ae84f7c3,0,1,1d75bfa4-5698-4cbc-98cb-591509fcfde8,1d75bfa4-5698-4cbc-98cb-591509fcfde8,0,1,26eb08f7-6c62-459f-b1f5-363cc40cae46,26eb08f7-6c62-459f-b1f5-363cc40cae46,0,1,cdbc7f5c-dbf9-49cd-a940-95b37bc7b734,cdbc7f5c-dbf9-49cd-a940-95b37bc7b734,0,1,7b802612-3034-4413-9ee8-60e94ebed6d6,7b802612-3034-4413-9ee8-60e94ebed6d6,0,1,59420cb5-d903-4e2c-a9e1-bc5494168daf,59420cb5-d903-4e2c-a9e1-bc5494168daf,0,1,42e39ef7-268f-4053-b4e5-4bceab17d3e4,42e39ef7-268f-4053-b4e5-4bceab17d3e4,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,fce03f58-7f68-4d7c-a999-687667c1f03d,fce03f58-7f68-4d7c-a999-687667c1f03d,0,1,316f94ec-81ed-4b5c-aa9d-98d2cfe1c641,316f94ec-81ed-4b5c-aa9d-98d2cfe1c641,0,1,f4885af5-6ed6-40e8-81a5-0e9537f943d7,f4885af5-6ed6-40e8-81a5-0e9537f943d7,0,1,87472d14-0d8c-4813-8a3e-2721bbb26811,87472d14-0d8c-4813-8a3e-2721bbb26811,0,1,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,0,1,dcdf2b25-b024-4a89-b2c4-0a2ee43ef623,dcdf2b25-b024-4a89-b2c4-0a2ee43ef623,0,1,9200527c-b6b9-4962-9440-10449583e1e3,9200527c-b6b9-4962-9440-10449583e1e3,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,484003f5-a6df-48fb-a395-d0e0ebc8cc0d,484003f5-a6df-48fb-a395-d0e0ebc8cc0d,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,4c3a39e3-40ee-423b-91f0-14b60e045b40,4c3a39e3-40ee-423b-91f0-14b60e045b40,0,1,23204b0b-bf77-4f7c-9945-e73ad924ebb4,23204b0b-bf77-4f7c-9945-e73ad924ebb4,0,1,dd9d3586-775b-4d5b-ab2d-78db0870ecdd,dd9d3586-775b-4d5b-ab2d-78db0870ecdd,0,1,44c610c3-9c0b-4bf0-95d6-f17100d3e98d,44c610c3-9c0b-4bf0-95d6-f17100d3e98d,0,1,a54f2d41-a05e-4878-80c6-81ca2899fa4c,a54f2d41-a05e-4878-80c6-81ca2899fa4c,0,1,23a898d9-5bcb-4744-ab6c-97b17dc98f20,23a898d9-5bcb-4744-ab6c-97b17dc98f20,0,1,50a04251-ac9c-4a21-a37f-ebc9ac3ef233,50a04251-ac9c-4a21-a37f-ebc9ac3ef233,0,1,f8f56806-ed7e-4059-a0c8-940538c14c98,f8f56806-ed7e-4059-a0c8-940538c14c98,0,1,9ff9f92b-c509-48da-82ce-15b524a895d6,9ff9f92b-c509-48da-82ce-15b524a895d6,0,1,c8bf96c8-f359-4940-8e87-3d190371d6d3,c8bf96c8-f359-4940-8e87-3d190371d6d3,0,1,477f0b81-0eb1-4de1-8cb5-38f1e0823947,477f0b81-0eb1-4de1-8cb5-38f1e0823947,0,1,d914eaa9-ce85-4df7-a545-2d411ef915b0,d914eaa9-ce85-4df7-a545-2d411ef915b0,0,1,41881344-82b7-4904-9ab8-0207d9bcd0a9,41881344-82b7-4904-9ab8-0207d9bcd0a9,0,1,21032fa5-9426-40bd-91e4-ace1e4ceb013,21032fa5-9426-40bd-91e4-ace1e4ceb013,0,1,6338aed6-ee7a-48e8-afc3-9d0bf5166399,6338aed6-ee7a-48e8-afc3-9d0bf5166399,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,c573a29f-4c39-402d-8af4-e0fff80877f8,c573a29f-4c39-402d-8af4-e0fff80877f8,0,1,7fce9e49-e558-4760-9d95-dde6ac6c1e78,7fce9e49-e558-4760-9d95-dde6ac6c1e78,0,1,e5aba4a3-6056-4ef3-827c-d74283175393,e5aba4a3-6056-4ef3-827c-d74283175393,0,1,63039e62-7314-42ff-bdc6-c251f38b3827,63039e62-7314-42ff-bdc6-c251f38b3827,0,1,8a4b7aab-b602-4581-8fa4-fab66791f701,8a4b7aab-b602-4581-8fa4-fab66791f701,0,1,7c92c579-4651-4fe3-90dc-6c9b594b76f0,7c92c579-4651-4fe3-90dc-6c9b594b76f0,0,1,a2be2d7a-cca0-460f-a915-dadfb9cd588b,a2be2d7a-cca0-460f-a915-dadfb9cd588b,0,1,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,0,1,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,0,1,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,0,1,1f4408f5-460e-431b-9842-bc6875ccf0ae,1f4408f5-460e-431b-9842-bc6875ccf0ae,0,1,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,0,1,7bfc6163-a62f-45e8-9112-40a5d675ba4a,7bfc6163-a62f-45e8-9112-40a5d675ba4a,0,1,542ff510-0245-4a08-80ac-a9941c66ae93,542ff510-0245-4a08-80ac-a9941c66ae93,0,1,03297623-eaa2-4db0-bf1b-ce2076faf20a,03297623-eaa2-4db0-bf1b-ce2076faf20a,0,1,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,0,1,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,0,1,82a3802c-b6d6-4511-bd8b-eeec003afa33,82a3802c-b6d6-4511-bd8b-eeec003afa33,0,1,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,0,1,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,0,1,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,0,1,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,0,1,a755cb43-492d-4069-9b6a-29b92ebb5b0e,a755cb43-492d-4069-9b6a-29b92ebb5b0e,0,1,86d09107-f511-4148-b5d9-d97e92addfde,86d09107-f511-4148-b5d9-d97e92addfde,0,1,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,0,1,55b78834-3d90-4858-a6f7-e0368b1d8c41,55b78834-3d90-4858-a6f7-e0368b1d8c41,0,1,059b9a75-f53a-4518-a48a-afc72ab9ee36,059b9a75-f53a-4518-a48a-afc72ab9ee36,0,1,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,0,1,31e95872-97c7-49e3-bd1b-8df4de07014d,31e95872-97c7-49e3-bd1b-8df4de07014d,0,1,9fc7e672-6c80-418a-a973-937a4a172a2b,9fc7e672-6c80-418a-a973-937a4a172a2b,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,64e03321-33a4-424d-a101-90f1e0da4c2e,64e03321-33a4-424d-a101-90f1e0da4c2e,0,1,fa4f0b33-5253-4a5f-8121-feae3e1968a6,fa4f0b33-5253-4a5f-8121-feae3e1968a6,0,1,e0d21be2-91dc-4a04-9078-49420ddddcd5,e0d21be2-91dc-4a04-9078-49420ddddcd5,0,1,56c97764-7dba-42e0-8ba0-82712aca20e9,56c97764-7dba-42e0-8ba0-82712aca20e9,0,1,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,0,1,3f05dcf9-be52-42e1-b5ff-dea14d97a26f,3f05dcf9-be52-42e1-b5ff-dea14d97a26f,0,1,ea868745-71fc-483c-aa6e-f242c06c673f,ea868745-71fc-483c-aa6e-f242c06c673f,0,1,7f3c6269-ea41-492f-87b7-7eaaf712762e,7f3c6269-ea41-492f-87b7-7eaaf712762e,0,1,a5d037b0-c666-4179-9d6a-5f48c4a126a8,a5d037b0-c666-4179-9d6a-5f48c4a126a8,0,1,f0850411-4dee-4f1d-baec-7d6c96b10637,f0850411-4dee-4f1d-baec-7d6c96b10637,0,1,12f95031-b81f-4802-b2f3-6f70def90db0,12f95031-b81f-4802-b2f3-6f70def90db0,0,1,5732112a-f31d-41cd-9a7f-312a27395502,5732112a-f31d-41cd-9a7f-312a27395502,0,1,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,0,1,06fc381d-f27a-433c-95c3-e0981e01f22b,06fc381d-f27a-433c-95c3-e0981e01f22b,0,1,f646835e-61eb-4ebd-811e-dac5e70bd1b4,f646835e-61eb-4ebd-811e-dac5e70bd1b4,0,1,61b49c4c-3021-4868-834a-9137476ae169,61b49c4c-3021-4868-834a-9137476ae169,0,1,58911911-5192-45fe-87cf-c4a222a521a1,58911911-5192-45fe-87cf-c4a222a521a1,0,1,70067937-9f27-4442-b87b-6c4576ce1b78,70067937-9f27-4442-b87b-6c4576ce1b78,0,1,115d5d06-a2fc-453e-aab5-c869b6d5850b,115d5d06-a2fc-453e-aab5-c869b6d5850b,0,1,d33ca006-d81d-4ef8-8503-7878e81c599f,d33ca006-d81d-4ef8-8503-7878e81c599f,0,1,123bb339-b95e-44c3-b1e9-482dcaa6f297,123bb339-b95e-44c3-b1e9-482dcaa6f297,0,1,f4119605-beb3-46b6-b372-ecdb74f10a33,f4119605-beb3-46b6-b372-ecdb74f10a33,0,1,d2a2e332-a52c-4277-bd19-5ea8ef198469,d2a2e332-a52c-4277-bd19-5ea8ef198469,0,1,e440c594-14bb-4a6e-af53-a4519c7d5548,e440c594-14bb-4a6e-af53-a4519c7d5548,0,1,4165bdaa-8e27-40de-bcdc-0379c34e8868,4165bdaa-8e27-40de-bcdc-0379c34e8868,0,1,a9a3fde2-99d5-4ebf-88b1-eccd9d74276e,a9a3fde2-99d5-4ebf-88b1-eccd9d74276e,0,1,e606f8eb-952a-4abb-b1ae-4211204bed84,e606f8eb-952a-4abb-b1ae-4211204bed84,0,1,7ddc3d13-fa6f-4fa9-870e-a34d5b2d9582,7ddc3d13-fa6f-4fa9-870e-a34d5b2d9582,0,1,1c2ad932-150a-4b15-b958-62eaa8a1eebc,1c2ad932-150a-4b15-b958-62eaa8a1eebc,0,1,b4deaebf-2c21-47d7-9436-10c94c94667c,b4deaebf-2c21-47d7-9436-10c94c94667c,0,1,2a12ce95-3214-4bd2-a0e6-c2af41875821,2a12ce95-3214-4bd2-a0e6-c2af41875821,0,1,bf05548c-babf-402b-b698-9a62e7c69add,bf05548c-babf-402b-b698-9a62e7c69add,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,23d4aa7d-8a2c-4e18-9d5d-43a155de9bf0,23d4aa7d-8a2c-4e18-9d5d-43a155de9bf0,0,1,82223d0f-41d9-45a6-9612-ae4d8408fa1b,82223d0f-41d9-45a6-9612-ae4d8408fa1b,0,1,3ee058a9-aff5-46f0-8928-8a417e7800d4,3ee058a9-aff5-46f0-8928-8a417e7800d4,0,1,c9a03f19-42bb-4e07-8ce8-1b954e431ada,c9a03f19-42bb-4e07-8ce8-1b954e431ada,0,1,ed4edc6f-048a-40d5-8f61-989895c95cf3,ed4edc6f-048a-40d5-8f61-989895c95cf3,0,1,74e1bfac-18ea-48c2-b7e9-fd374a90a35d,74e1bfac-18ea-48c2-b7e9-fd374a90a35d,0,1,dc17d8b6-d277-43eb-8823-71d440ae1e90,dc17d8b6-d277-43eb-8823-71d440ae1e90,0,1,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,0,1,2465986e-7519-4638-9f62-5f692bebeeac,2465986e-7519-4638-9f62-5f692bebeeac,0,1,66e24df5-f443-47c0-b0ad-97d00d6761c7,66e24df5-f443-47c0-b0ad-97d00d6761c7,0,1,d9a6706e-3dcd-4aec-b9d1-542330ba6e2e,d9a6706e-3dcd-4aec-b9d1-542330ba6e2e,0,1,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,0,1,cc770616-f6f6-4054-876c-f319b1f8c6cf,cc770616-f6f6-4054-876c-f319b1f8c6cf,0,1,3baffdec-a2cb-48c9-9c21-4fc469e81e3b,3baffdec-a2cb-48c9-9c21-4fc469e81e3b,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,6fe9a455-7fef-4a1b-8109-57eafc17e2b6,6fe9a455-7fef-4a1b-8109-57eafc17e2b6,0,1,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,0,1,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,0,1,896de79f-3c34-4436-a4e2-4dd4f45c3e20,896de79f-3c34-4436-a4e2-4dd4f45c3e20,0,1,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,0,1,e6c42b5d-57fd-42ce-a968-653620e797f6,e6c42b5d-57fd-42ce-a968-653620e797f6,0,1,724fb328-fec6-4afe-bc99-0ff0951b184b,724fb328-fec6-4afe-bc99-0ff0951b184b,0,1,7a0cdc94-9e53-4fcc-ac2f-97ad2ad939f5,7a0cdc94-9e53-4fcc-ac2f-97ad2ad939f5,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,2997e4da-d831-48e4-96e2-c29f9d077302,2997e4da-d831-48e4-96e2-c29f9d077302,0,1,30f59002-a23d-4eff-b84f-f280f11b220e,30f59002-a23d-4eff-b84f-f280f11b220e,0,1,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,0,1,5b0e250c-4d2d-4e37-ade1-593854610d3f,5b0e250c-4d2d-4e37-ade1-593854610d3f,0,1,148f63d5-23ad-4824-a24c-14d5a54c62d3,148f63d5-23ad-4824-a24c-14d5a54c62d3,0,1,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,0,1,eabfa8b7-fb65-43dd-9308-787f7cce88c9,eabfa8b7-fb65-43dd-9308-787f7cce88c9,0,1,4bf12710-aef2-43ec-b16f-9c6c9e8eb18d,4bf12710-aef2-43ec-b16f-9c6c9e8eb18d,0,1,b1e837ff-0edd-4525-b2e2-92cc7990e00e,b1e837ff-0edd-4525-b2e2-92cc7990e00e,0,1,30213cef-b2bc-4e6c-8094-74a61f28b2ed,30213cef-b2bc-4e6c-8094-74a61f28b2ed,0,1,037fd2f3-27f1-4d8f-a621-82fa5754e8c7,037fd2f3-27f1-4d8f-a621-82fa5754e8c7,0,1,8c72f824-b667-4d74-84aa-30eccfbbd2f0,8c72f824-b667-4d74-84aa-30eccfbbd2f0,0,1,ceb286e9-4e7c-49fa-a695-424073e0dffc,ceb286e9-4e7c-49fa-a695-424073e0dffc,0,1,727689c3-c0d8-496f-a47b-4f3243ad8974,727689c3-c0d8-496f-a47b-4f3243ad8974,0,1,057aadbd-f41f-4de4-95f4-9301557e6a0e,057aadbd-f41f-4de4-95f4-9301557e6a0e,0,1,ec7b492d-5d38-4f31-90e0-577ad181514e,ec7b492d-5d38-4f31-90e0-577ad181514e,0,1,f0f9cf2c-bbf9-4511-a1ab-3941c15310eb,f0f9cf2c-bbf9-4511-a1ab-3941c15310eb,0,1,da0686ce-25e2-4d2c-b152-283f5e4cf4b1,da0686ce-25e2-4d2c-b152-283f5e4cf4b1,0,1,4807629d-8421-4bd9-beb4-5b2940197958,4807629d-8421-4bd9-beb4-5b2940197958,0,1,4bad7c64-131a-42cb-9be7-d61f14f456d0,4bad7c64-131a-42cb-9be7-d61f14f456d0,0,1,d46e141b-7a10-4d65-971f-3a35f2114017,d46e141b-7a10-4d65-971f-3a35f2114017,0,1,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,0,1,766c7fb5-727e-4975-9ea1-3b0df4739620,766c7fb5-727e-4975-9ea1-3b0df4739620,0,1,ba59393c-c499-4999-91d4-b9e34d94db0e,ba59393c-c499-4999-91d4-b9e34d94db0e,0,1,626da0dd-d75b-4779-be1f-9b71d2f2d4e1,626da0dd-d75b-4779-be1f-9b71d2f2d4e1,0,1,1d4b7f71-6c72-4f41-a2ed-1f2fe2122c04,1d4b7f71-6c72-4f41-a2ed-1f2fe2122c04,0,1,fcf6a4cd-d0c9-4f83-b9b0-514baed3ccb9,fcf6a4cd-d0c9-4f83-b9b0-514baed3ccb9,0,1,3f92cffe-b4ea-45e3-b2b9-a9e316405a8c,3f92cffe-b4ea-45e3-b2b9-a9e316405a8c,0,1,e70a6eab-791f-4c70-bb92-f069c7486d1b,e70a6eab-791f-4c70-bb92-f069c7486d1b,0,1,f74f97b7-4cbf-4124-b441-d8bb5d9b1634,f74f97b7-4cbf-4124-b441-d8bb5d9b1634,0,1,a3a9a48b-f241-45b2-b93b-d34bba0a8a66,a3a9a48b-f241-45b2-b93b-d34bba0a8a66,0,1,ba5574bd-53ca-413f-a245-272f468a80fb,ba5574bd-53ca-413f-a245-272f468a80fb,0,1,772e7011-0019-4edc-b673-b7151cf4fa6c,772e7011-0019-4edc-b673-b7151cf4fa6c,0,1,21ac47fa-12c2-43e2-9b57-afdf521d3485,21ac47fa-12c2-43e2-9b57-afdf521d3485,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,8d1c44d7-52f2-4089-9d77-2f03bf051455,8d1c44d7-52f2-4089-9d77-2f03bf051455,0,1,ac2e5217-aaeb-4b6f-b063-538c84f2da06,ac2e5217-aaeb-4b6f-b063-538c84f2da06,0,1,b5e73fbe-499c-4666-a482-0ef399c97c1e,b5e73fbe-499c-4666-a482-0ef399c97c1e,0,1,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,0,1,4ac77dea-3c2b-4566-8857-ba99f7b025c9,4ac77dea-3c2b-4566-8857-ba99f7b025c9,0,1,8e87da88-9fa8-4dd8-b904-622b763239f4,8e87da88-9fa8-4dd8-b904-622b763239f4,0,1,09fec67d-6e45-428c-b858-9ae20979676c,09fec67d-6e45-428c-b858-9ae20979676c,0,1,4875a235-bcc8-47eb-83e3-a66f0f690b97,4875a235-bcc8-47eb-83e3-a66f0f690b97,0,1,58ffc4d9-d711-4b68-905c-d2ac4f78b547,58ffc4d9-d711-4b68-905c-d2ac4f78b547,0,1,114ab2a1-f7c3-4453-a6cc-4c5a23c00cb5,114ab2a1-f7c3-4453-a6cc-4c5a23c00cb5,0,1,93c347d8-66cb-406c-9ee6-b1962482893f,93c347d8-66cb-406c-9ee6-b1962482893f,0,1,94ab750f-46b4-427c-a7f2-4e94fb9b0678,94ab750f-46b4-427c-a7f2-4e94fb9b0678,0,1,397d9926-31a3-4c03-acb7-74478f9863e1,397d9926-31a3-4c03-acb7-74478f9863e1,0,1,264dd12a-b4c5-44bf-b3c0-ef9225505f76,264dd12a-b4c5-44bf-b3c0-ef9225505f76,0,1,90b8fdf3-3e42-442f-a002-6a28ad0edc99,90b8fdf3-3e42-442f-a002-6a28ad0edc99,0,1,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,0,1,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,0,1,697bd1de-bbef-4362-aa39-71f6008f4bd7,697bd1de-bbef-4362-aa39-71f6008f4bd7,0,1,a3e9afe9-1587-47c7-8e7b-b8df6b3a2664,a3e9afe9-1587-47c7-8e7b-b8df6b3a2664,0,1,0e31d69a-8d2c-4ad0-b3ac-93ba5afcefdf,0e31d69a-8d2c-4ad0-b3ac-93ba5afcefdf,0,1,3de28e34-3c1e-4e7f-a720-3418c8c9c496,3de28e34-3c1e-4e7f-a720-3418c8c9c496,0,1,7f2d69b4-2f87-40f4-a78c-fe4cabc2a502,7f2d69b4-2f87-40f4-a78c-fe4cabc2a502,0,1,dacb236e-42a5-47e5-b239-ff18ae48e21e,dacb236e-42a5-47e5-b239-ff18ae48e21e,0,1,5cdb6e71-fd20-461a-83db-d59ccdb5b366,5cdb6e71-fd20-461a-83db-d59ccdb5b366,0,1,388b8576-9ba4-460f-b71b-3d644663656a,388b8576-9ba4-460f-b71b-3d644663656a,0,1,d4d38827-fce6-4c39-a4b4-51c7d7edc475,d4d38827-fce6-4c39-a4b4-51c7d7edc475,0,1,2d40609d-b56f-4082-9a6f-8216817ebd24,2d40609d-b56f-4082-9a6f-8216817ebd24,0,1,b238b4b2-beaf-4b5d-a728-8aebac3bacb5,b238b4b2-beaf-4b5d-a728-8aebac3bacb5,0,1,732b19c8-4f22-4748-a796-71538e46fc2f,732b19c8-4f22-4748-a796-71538e46fc2f,0,1,9fb2169b-fc77-4a3f-a1d8-b939079d9d9d,9fb2169b-fc77-4a3f-a1d8-b939079d9d9d,0,1,3fe0ef25-ce56-435d-b343-eadfec91a636,3fe0ef25-ce56-435d-b343-eadfec91a636,0,1,74f02619-7fa8-4c6d-81d6-230156ee45f4,74f02619-7fa8-4c6d-81d6-230156ee45f4,0,1,a103cca0-8243-40e9-bcdd-97a1cc8a3943,a103cca0-8243-40e9-bcdd-97a1cc8a3943,0,1,c3572d8d-46ff-40bb-800c-2c07f884c219,c3572d8d-46ff-40bb-800c-2c07f884c219,0,1,80fd89d7-160d-4528-9aa0-05b8dac64b4c,80fd89d7-160d-4528-9aa0-05b8dac64b4c,0,1,4eb24fcd-85f6-4fa6-bc9f-baef3861664e,4eb24fcd-85f6-4fa6-bc9f-baef3861664e,0,1,da551cf6-4f86-4e37-8967-a84c80e1fb13,da551cf6-4f86-4e37-8967-a84c80e1fb13,0,1,5fb2c120-fd14-4e78-a35f-c8e9478b3235,5fb2c120-fd14-4e78-a35f-c8e9478b3235,0,1,9d514ce1-f9bd-4018-8107-545cdd372fbd,9d514ce1-f9bd-4018-8107-545cdd372fbd,0,1,fe6b732f-3a33-460f-9686-cffdd5f7d99b,fe6b732f-3a33-460f-9686-cffdd5f7d99b,0,1,06250212-aeb1-4cb8-8785-ea71b1dad848,06250212-aeb1-4cb8-8785-ea71b1dad848,0,1,0c068a61-e5e6-4475-96fa-b7c1d825da42,0c068a61-e5e6-4475-96fa-b7c1d825da42,0,1,1047e34d-397a-42cc-80e6-1be755bd6462,1047e34d-397a-42cc-80e6-1be755bd6462,0,1,1cd473c3-4e36-47a9-b466-73d86ec244b0,1cd473c3-4e36-47a9-b466-73d86ec244b0,0,1,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,0,1,b406b5f9-eeaf-43a0-8930-067554d783c9,b406b5f9-eeaf-43a0-8930-067554d783c9,0,1,47718840-2939-4e30-a72c-a20c88ac4c17,47718840-2939-4e30-a72c-a20c88ac4c17,0,1,58a38994-9fe4-4783-967d-79d1141b90f3,58a38994-9fe4-4783-967d-79d1141b90f3,0,1,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,0,1,7c2e35a8-d05d-4e52-baee-a1e13585c502,7c2e35a8-d05d-4e52-baee-a1e13585c502,0,1,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,0,1,ab5b0155-a4b1-47a1-ad87-12365dde20c1,ab5b0155-a4b1-47a1-ad87-12365dde20c1,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,672c4741-6d7b-4d3e-baa7-389bef0625d7,672c4741-6d7b-4d3e-baa7-389bef0625d7,0,1,04398ec0-1c13-43f8-8f5d-7b7619592a4d,04398ec0-1c13-43f8-8f5d-7b7619592a4d,0,1,ce463861-92df-47f2-bd0f-4a2dbf72aacc,ce463861-92df-47f2-bd0f-4a2dbf72aacc,0,1,eca79a64-3d00-4178-b4eb-cf5468622c96,eca79a64-3d00-4178-b4eb-cf5468622c96,0,1,1487d68c-7a2f-48cf-8c80-4074072ed52c,1487d68c-7a2f-48cf-8c80-4074072ed52c,0,1,6ed8c74c-6b6e-4ed1-95ff-a733f618b213,6ed8c74c-6b6e-4ed1-95ff-a733f618b213,0,1,d97c6536-fd62-4c9a-b83e-490a29a0721b,d97c6536-fd62-4c9a-b83e-490a29a0721b,0,1,60cd8bc4-6a5d-4d36-83d0-76a8477eda6a,60cd8bc4-6a5d-4d36-83d0-76a8477eda6a,0,1,6dc4c216-e49f-4833-b45f-6060b67995ef,6dc4c216-e49f-4833-b45f-6060b67995ef,0,1,4655fa12-9169-4d08-bdab-9b3174d0b223,4655fa12-9169-4d08-bdab-9b3174d0b223,0,1,6c07ddfb-8823-4953-9905-9550b847dc3f,6c07ddfb-8823-4953-9905-9550b847dc3f,0,1,2362a8d5-dca2-4527-acc0-63782377f28a,2362a8d5-dca2-4527-acc0-63782377f28a,0,1,dfd6d85c-a734-4458-83b0-87b5949f9c68,dfd6d85c-a734-4458-83b0-87b5949f9c68,0,1,4e3b0b9f-45b7-48a8-86c6-cc14a921aa78,4e3b0b9f-45b7-48a8-86c6-cc14a921aa78,0,1,79b6ecf5-8a6b-44a4-9587-5f8764463228,79b6ecf5-8a6b-44a4-9587-5f8764463228,0,1,cd49148c-e385-4b75-a758-a93196e73dba,cd49148c-e385-4b75-a758-a93196e73dba,0,1,ece15c4e-4a4b-421b-9f00-10f698da476b,ece15c4e-4a4b-421b-9f00-10f698da476b,0,1,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,0,1,300ecdd6-144f-48c8-9fd4-6166f1de1047,300ecdd6-144f-48c8-9fd4-6166f1de1047,0,1,b6bbfb59-8249-47af-9394-be262f118811,b6bbfb59-8249-47af-9394-be262f118811,0,1,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,0,1,fb63d488-fb91-4d08-8f8c-f4836538216f,fb63d488-fb91-4d08-8f8c-f4836538216f,0,1,b8be6c09-6880-45d3-a2d1-06ad72d069c9,b8be6c09-6880-45d3-a2d1-06ad72d069c9,0,1,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,0,1,148dd521-8754-451b-803b-cbee7c3d3965,148dd521-8754-451b-803b-cbee7c3d3965,0,1,38bc48c7-3938-47be-be3f-844f19561301,38bc48c7-3938-47be-be3f-844f19561301,0,1,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,0,1,147038fb-6154-41f3-aad6-547db27d1e43,147038fb-6154-41f3-aad6-547db27d1e43,0,1,832fa9d3-deab-4c57-b6e2-dee5d24d6100,832fa9d3-deab-4c57-b6e2-dee5d24d6100,0,1,dd4270ef-6b4c-491e-8871-959dbec14c53,dd4270ef-6b4c-491e-8871-959dbec14c53,0,1,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,0,1,8ccd9be8-ef26-49b9-8cee-03ae4e500386,8ccd9be8-ef26-49b9-8cee-03ae4e500386,0,1,ddca925c-fdcd-40ce-a504-4fca1758de3f,ddca925c-fdcd-40ce-a504-4fca1758de3f,0,1,f64de21f-5a7c-4a1a-a929-07fc53049f6c,f64de21f-5a7c-4a1a-a929-07fc53049f6c,0,1,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,0,1,ea653eca-f96a-447d-8b09-7a7cb6929ed6,ea653eca-f96a-447d-8b09-7a7cb6929ed6,0,1,5efc4bc4-b711-4620-8d2e-9d947c6cc141,5efc4bc4-b711-4620-8d2e-9d947c6cc141,0,1,ede6a379-b0e5-4b8d-a454-779c0fd8b0b3,ede6a379-b0e5-4b8d-a454-779c0fd8b0b3,0,1,6de9dab4-ee34-4584-a2e7-7a29c86794b0,6de9dab4-ee34-4584-a2e7-7a29c86794b0,0,1,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,0,1,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,0,1,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,0,1,2b72fe1c-afe1-4905-8db2-2bb1baca6295,2b72fe1c-afe1-4905-8db2-2bb1baca6295,0,1,4bc4c6db-0ef8-405f-8875-b4cb1540aeb5,4bc4c6db-0ef8-405f-8875-b4cb1540aeb5,0,1,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,0,1,e9a2441e-faf9-4158-acc7-b1a6178ae0f3,e9a2441e-faf9-4158-acc7-b1a6178ae0f3,0,1,ce5f5470-b704-4f55-8dc8-17cf2c2b367a,ce5f5470-b704-4f55-8dc8-17cf2c2b367a,0,1,0072986b-0463-4a39-9851-f9adeda99716,0072986b-0463-4a39-9851-f9adeda99716,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,0d4a26fb-7176-43f2-8767-d3e227c7306a,0d4a26fb-7176-43f2-8767-d3e227c7306a,0,1,7e4222fd-fb98-4ae5-9d98-d41c3d572a0c,7e4222fd-fb98-4ae5-9d98-d41c3d572a0c,0,1,d9d14a24-c023-4b69-ad57-30d1474e1232,d9d14a24-c023-4b69-ad57-30d1474e1232,0,1,b292eb46-df87-43c0-9a37-93c5a22af252,b292eb46-df87-43c0-9a37-93c5a22af252,0,1,0943dd00-1653-4760-a9fe-ebc083ffa660,0943dd00-1653-4760-a9fe-ebc083ffa660,0,1,4fb8564e-2338-4c23-84a4-31f768047ced,4fb8564e-2338-4c23-84a4-31f768047ced,0,1,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,0,1,f93c9a7f-0249-421e-b3d0-55f02d130017,f93c9a7f-0249-421e-b3d0-55f02d130017,0,1,062c507a-9d35-4eb5-bb91-d106a535a503,062c507a-9d35-4eb5-bb91-d106a535a503,0,1,fd317d96-380e-4ee7-a25b-401e8521cc7a,fd317d96-380e-4ee7-a25b-401e8521cc7a,0,1,3b380a63-9232-42c2-bfa2-e8fc89448bbd,3b380a63-9232-42c2-bfa2-e8fc89448bbd,0,1,e18b4527-8727-4a10-9e99-a80012debe6c,e18b4527-8727-4a10-9e99-a80012debe6c,0,1,1ed910db-e434-4efd-9b12-c25353a31d5a,1ed910db-e434-4efd-9b12-c25353a31d5a,0,1,10556a26-ea4b-46b4-84d1-175eb13b333f,10556a26-ea4b-46b4-84d1-175eb13b333f,0,1,f1e600b0-55ed-4611-b147-f04d5621796b,f1e600b0-55ed-4611-b147-f04d5621796b,0,1,e3b84128-95e1-45df-84db-5e1791779543,e3b84128-95e1-45df-84db-5e1791779543,1,0,76702e9e-fa7a-4b98-befa-f9b37db2dae0,76702e9e-fa7a-4b98-befa-f9b37db2dae0,1,0,101a4eb3-cdda-47af-8c69-615a6920347a,101a4eb3-cdda-47af-8c69-615a6920347a,1,0,cf19f220-f6d4-4c9e-b5d5-9d94234f0a2c,cf19f220-f6d4-4c9e-b5d5-9d94234f0a2c,1,0,e9d95895-8708-4035-89ad-72573b870491,e9d95895-8708-4035-89ad-72573b870491,1,0,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,1,0,f79bada2-838f-4e4f-a017-935cf671a70c,f79bada2-838f-4e4f-a017-935cf671a70c,1,0,312118ff-a2a4-479c-964a-5250cca0cd20,312118ff-a2a4-479c-964a-5250cca0cd20,1,0,f8d32d21-ea2f-42bb-a785-9bd3cf754cd9,f8d32d21-ea2f-42bb-a785-9bd3cf754cd9,1,0,3f3a0b1b-04ce-47c1-928d-5e3483e9fd73,3f3a0b1b-04ce-47c1-928d-5e3483e9fd73,1,0,8a310493-c06f-46db-b2b5-14d6ed203312,8a310493-c06f-46db-b2b5-14d6ed203312,1,0,caf8f0e8-7a2c-498b-9b74-ed6b87cce670,caf8f0e8-7a2c-498b-9b74-ed6b87cce670,1,0,b68ec95b-64f3-4a2b-9683-231d50f01eeb,b68ec95b-64f3-4a2b-9683-231d50f01eeb,1,0,89318397-b3a6-4468-985b-ed5cb8ab5cdb,89318397-b3a6-4468-985b-ed5cb8ab5cdb,1,0,4a008342-f72f-4ca1-bad1-64b59b509911,4a008342-f72f-4ca1-bad1-64b59b509911,1,0,4436b2cf-2d71-401f-99fd-012ff0c91fbd,4436b2cf-2d71-401f-99fd-012ff0c91fbd,1,0,cefa1723-a4d4-44c4-bd57-ffa713f9306c,cefa1723-a4d4-44c4-bd57-ffa713f9306c,1,0,5396be45-d7c0-43df-aed4-cad062a02b11,5396be45-d7c0-43df-aed4-cad062a02b11,1,0,017e3da8-e48e-488b-9bbf-4fef1a4f3417,017e3da8-e48e-488b-9bbf-4fef1a4f3417,1,0,4920aabf-6f53-4f91-932a-8ace24631a74,4920aabf-6f53-4f91-932a-8ace24631a74,1,0,ce7a7f72-9d7d-4240-b852-e83b4b8d944b,ce7a7f72-9d7d-4240-b852-e83b4b8d944b,1,0,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,1,0,bbec9c3d-31dd-484e-ab32-41ef845f1370,bbec9c3d-31dd-484e-ab32-41ef845f1370,1,0,8692ba41-d91d-4af0-8aba-69dd5409d593,8692ba41-d91d-4af0-8aba-69dd5409d593,1,0,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,da2b47f5-4109-4f72-a4a5-70be24a6881f,da2b47f5-4109-4f72-a4a5-70be24a6881f,1,0,f0152598-ffa3-4eb7-811f-906e569373e6,f0152598-ffa3-4eb7-811f-906e569373e6,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,38b48750-1411-493b-b18e-42d39312aad8,38b48750-1411-493b-b18e-42d39312aad8,1,0,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,1,0,5a741cf6-8160-4409-9396-2e6d1e67e6fa,5a741cf6-8160-4409-9396-2e6d1e67e6fa,1,0,8242daae-181a-47df-b28e-c1de3fce0359,8242daae-181a-47df-b28e-c1de3fce0359,1,0,5fbea8c7-48e3-4ed0-a8d0-cf942b37a166,5fbea8c7-48e3-4ed0-a8d0-cf942b37a166,1,0,5cc3a29d-aa98-42bf-9800-f584229c8e46,5cc3a29d-aa98-42bf-9800-f584229c8e46,1,0,db82191f-77bd-44da-8b33-86f01018e25a,db82191f-77bd-44da-8b33-86f01018e25a,1,0,acfa1919-07ce-4464-8552-6b104e284dca,acfa1919-07ce-4464-8552-6b104e284dca,1,0,497ce8f3-f6f0-4da8-aeb0-0fa01bb26dc6,497ce8f3-f6f0-4da8-aeb0-0fa01bb26dc6,1,0,f4cff4ff-68e9-4072-971e-1b359d3aa980,f4cff4ff-68e9-4072-971e-1b359d3aa980,1,0,f9a5bd40-7c56-4ced-bddb-a66c1fc31b81,f9a5bd40-7c56-4ced-bddb-a66c1fc31b81,1,0,fdb012c9-583a-42af-95da-070e75a58078,fdb012c9-583a-42af-95da-070e75a58078,1,0,40a52f83-f0e2-470d-9c17-7fdc8cc646b7,40a52f83-f0e2-470d-9c17-7fdc8cc646b7,1,0,7d069b11-cddd-463d-97be-3cbeaaf0954c,7d069b11-cddd-463d-97be-3cbeaaf0954c,1,0,8c5fae4c-b5b6-4e05-9453-4ac5de07c54c,8c5fae4c-b5b6-4e05-9453-4ac5de07c54c,1,0,7531fb7c-a4ae-42df-b8e5-d8bfcb66be52,7531fb7c-a4ae-42df-b8e5-d8bfcb66be52,1,0,d1b950b0-dd66-49f9-998e-3ae5e820ae7f,d1b950b0-dd66-49f9-998e-3ae5e820ae7f,1,0,57e39881-cbf9-4cac-9ed0-bf4a6ea667ee,57e39881-cbf9-4cac-9ed0-bf4a6ea667ee,1,0,b9004626-915c-44c8-9cb7-25e5b627ee83,b9004626-915c-44c8-9cb7-25e5b627ee83,1,0,63c6cfad-124d-491a-829d-b298463c95e6,63c6cfad-124d-491a-829d-b298463c95e6,1,0,737404de-5b9d-4445-81c5-2c5b50b36846,737404de-5b9d-4445-81c5-2c5b50b36846,1,0,1c1a5bf8-bbe6-4a69-973e-11445175dac2,1c1a5bf8-bbe6-4a69-973e-11445175dac2,1,0,f11ffcfd-3588-4785-b222-cebe80455303,f11ffcfd-3588-4785-b222-cebe80455303,1,0,789a2027-8601-434c-bf47-37696a3966ad,789a2027-8601-434c-bf47-37696a3966ad,1,0,5d216c28-0724-4e7d-86cf-b6f75e7e28b7,5d216c28-0724-4e7d-86cf-b6f75e7e28b7,1,0,bfdc6346-db5b-427f-acca-9b48db8fefd0,bfdc6346-db5b-427f-acca-9b48db8fefd0,1,0,1c3f258c-345e-47f6-9e29-98b1222fb348,1c3f258c-345e-47f6-9e29-98b1222fb348,1,0,dfafcdf3-cdeb-4822-9f41-a730d9d3fb24,dfafcdf3-cdeb-4822-9f41-a730d9d3fb24,1,0,4c3085e1-2f86-4af4-a392-ab45e30a7152,4c3085e1-2f86-4af4-a392-ab45e30a7152,1,0,35c938f4-065f-47f5-a75b-637ed0080725,35c938f4-065f-47f5-a75b-637ed0080725,0,1,e14c0841-226c-4c79-bec9-cfc8d2c3a160,e14c0841-226c-4c79-bec9-cfc8d2c3a160,0,1,73e4bce2-df4a-4f60-a369-55f588a46bd1,73e4bce2-df4a-4f60-a369-55f588a46bd1,0,1,6f3c5b90-b030-4267-a973-33d12c2c7680,6f3c5b90-b030-4267-a973-33d12c2c7680,0,1,1ff8210b-26c5-4429-b580-7c6ec7c9b63a,1ff8210b-26c5-4429-b580-7c6ec7c9b63a,0,1,c6af8b0f-3767-4198-88e2-f5763cb0294a,c6af8b0f-3767-4198-88e2-f5763cb0294a,0,1,b107a4a8-0db8-44f4-93f7-9f231e850398,b107a4a8-0db8-44f4-93f7-9f231e850398,0,1,88b879b7-1bb3-4478-b569-35bdb5c56939,88b879b7-1bb3-4478-b569-35bdb5c56939,0,1,7a62d031-c340-4b1e-90af-fff697a2e979,7a62d031-c340-4b1e-90af-fff697a2e979,0,1,18bf6916-83cc-41e5-a35b-1489450ae632,18bf6916-83cc-41e5-a35b-1489450ae632,0,1,ebab97cf-5335-4648-9845-8ca41f79fb49,ebab97cf-5335-4648-9845-8ca41f79fb49,0,1,bb29fa44-6772-4426-a0b8-422115e14288,bb29fa44-6772-4426-a0b8-422115e14288,0,1,904e1209-91d8-49b1-b291-364ef728cbbf,904e1209-91d8-49b1-b291-364ef728cbbf,0,1,1198f2ee-b8a8-456d-9461-61bc5d42c7a1,1198f2ee-b8a8-456d-9461-61bc5d42c7a1,0,1,b8ecb7f0-ef40-4d31-9ec2-a731439d3200,b8ecb7f0-ef40-4d31-9ec2-a731439d3200,0,1,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,0,1,b5365cb6-a4e7-479b-82f4-f4ad80fcd7c9,b5365cb6-a4e7-479b-82f4-f4ad80fcd7c9,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,23314bcd-2dd4-43f1-9fdb-ae182a48c886,23314bcd-2dd4-43f1-9fdb-ae182a48c886,0,1,c5f86fa3-4a36-4e22-8b57-7088dd250cd3,c5f86fa3-4a36-4e22-8b57-7088dd250cd3,0,1,84282afa-21f5-40db-9386-e6f741c9a06c,84282afa-21f5-40db-9386-e6f741c9a06c,0,1,5b3b3da9-8619-4fbd-b140-3528875cd179,5b3b3da9-8619-4fbd-b140-3528875cd179,0,1,99e5e866-7ac6-4916-ab66-3e2909822c56,99e5e866-7ac6-4916-ab66-3e2909822c56,0,1,03363877-2752-4a03-95f2-d73b732e0bfd,03363877-2752-4a03-95f2-d73b732e0bfd,0,1,8d9d2284-e592-44c5-93bb-247037ab6b95,8d9d2284-e592-44c5-93bb-247037ab6b95,0,1,0b0d2b7c-d52e-4163-83cf-a7e86bb47c47,0b0d2b7c-d52e-4163-83cf-a7e86bb47c47,0,1,78051e10-74ab-44be-adca-e4c93824a386,78051e10-74ab-44be-adca-e4c93824a386,0,1,73629419-83d8-4727-88a9-76c851d104c9,73629419-83d8-4727-88a9-76c851d104c9,0,1,cadb54f0-dcff-4f96-983e-a309fd72f330,cadb54f0-dcff-4f96-983e-a309fd72f330,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,ed5ff5b0-f980-4b9a-9299-eef68e3b42d5,ed5ff5b0-f980-4b9a-9299-eef68e3b42d5,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,9ff1c73e-71be-4ea6-97fb-e710d995ee62,9ff1c73e-71be-4ea6-97fb-e710d995ee62,0,1,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,0,1,2558d812-ac0a-49ba-87db-3f661209a3c4,2558d812-ac0a-49ba-87db-3f661209a3c4,0,1,20d712ef-77c1-4374-92e1-f20a3ebc7eab,20d712ef-77c1-4374-92e1-f20a3ebc7eab,0,1,65d23ce8-e326-45ee-86b0-6dcf35797201,65d23ce8-e326-45ee-86b0-6dcf35797201,0,1,a2683c3f-1b21-47d8-951d-7d30cde51efc,a2683c3f-1b21-47d8-951d-7d30cde51efc,0,1,54c77053-1728-4914-a354-73fe8853a0e1,54c77053-1728-4914-a354-73fe8853a0e1,0,1,21136691-078f-4bf7-bddd-f41416a76d86,21136691-078f-4bf7-bddd-f41416a76d86,0,1,30a121c7-c4f5-45c4-9504-9778ed85d9e3,30a121c7-c4f5-45c4-9504-9778ed85d9e3,0,1,c68e2157-2541-4f80-966a-d68ce603f131,c68e2157-2541-4f80-966a-d68ce603f131,0,1,e5dfee58-f748-48ee-81a3-7c6133f06365,e5dfee58-f748-48ee-81a3-7c6133f06365,0,1,68500931-89e0-491e-aba8-b013c9e6f8c3,68500931-89e0-491e-aba8-b013c9e6f8c3,0,1,70b79e56-bb71-4f38-93cf-94dda79d9b4c,70b79e56-bb71-4f38-93cf-94dda79d9b4c,0,1,5c4c9931-3fb0-47a8-9e4f-d552de12b355,5c4c9931-3fb0-47a8-9e4f-d552de12b355,0,1,dc1d0f97-e2f3-4e1d-b21c-411b46e39848,dc1d0f97-e2f3-4e1d-b21c-411b46e39848,0,1,ef6ccd0d-73c6-4314-9912-efa7ff27c823,ef6ccd0d-73c6-4314-9912-efa7ff27c823,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,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,0,1,35989876-16b1-4b02-9381-444a06a7a21d,35989876-16b1-4b02-9381-444a06a7a21d,0,1,f7608000-1e8a-4ca4-afb7-e04ef547b70a,f7608000-1e8a-4ca4-afb7-e04ef547b70a,0,1,26cea519-19d0-4707-be0a-1a43fde6e563,26cea519-19d0-4707-be0a-1a43fde6e563,0,1,a3d599b9-89d1-4386-8c5b-1c2a9905e6e2,a3d599b9-89d1-4386-8c5b-1c2a9905e6e2,0,1,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,0,1,60c04f0a-78a8-4c55-8844-b86906350fd1,60c04f0a-78a8-4c55-8844-b86906350fd1,0,1,851306a7-8847-4b43-8214-898bfc24b0ab,851306a7-8847-4b43-8214-898bfc24b0ab,0,1,af8d4bc9-2f0f-44d3-89ce-2593877055c8,af8d4bc9-2f0f-44d3-89ce-2593877055c8,0,1,344fb829-a1cc-4b17-8f98-2d4f93bfcd6a,344fb829-a1cc-4b17-8f98-2d4f93bfcd6a,0,1,eb35bff2-8467-48fe-bf93-ece2aa40f506,eb35bff2-8467-48fe-bf93-ece2aa40f506,0,1,68cf55da-b29e-4a65-815b-c9cdc8e5888e,68cf55da-b29e-4a65-815b-c9cdc8e5888e,0,1,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,0,1,1041ed81-c1f7-43b2-9087-914865a3076e,1041ed81-c1f7-43b2-9087-914865a3076e,0,1,5d7174d2-42b3-4e12-b705-4209dd73b53b,5d7174d2-42b3-4e12-b705-4209dd73b53b,0,1,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,0,1,e00dcab4-5e92-44e3-bcdf-a31dd32a195f,e00dcab4-5e92-44e3-bcdf-a31dd32a195f,0,1,5a4c6511-f8ed-40e4-a251-e28f62629cf2,5a4c6511-f8ed-40e4-a251-e28f62629cf2,0,1,cfe59dfd-a509-4f83-b926-b3ff94234a43,cfe59dfd-a509-4f83-b926-b3ff94234a43,0,1,17df1591-61b0-4204-8379-8d1f58445968,17df1591-61b0-4204-8379-8d1f58445968,0,1,9020fa9d-e7de-4574-ab65-db6651b5b610,9020fa9d-e7de-4574-ab65-db6651b5b610,0,1,e83ad33d-27df-4181-afd2-b7f416e6e705,e83ad33d-27df-4181-afd2-b7f416e6e705,0,1,f0438b0a-7916-4de4-a3a8-d43407c3295f,f0438b0a-7916-4de4-a3a8-d43407c3295f,0,1,3309648c-aae6-4684-ae8d-7ed636bc3468,3309648c-aae6-4684-ae8d-7ed636bc3468,0,1,f9aa933e-6684-48de-b802-96c8e61b1fe6,f9aa933e-6684-48de-b802-96c8e61b1fe6,0,1,9de4d430-95ec-4435-b3e8-4fc85778d517,9de4d430-95ec-4435-b3e8-4fc85778d517,0,1,205b8908-fa21-42bd-bff0-fb95e6787f15,205b8908-fa21-42bd-bff0-fb95e6787f15,0,1,4e309f26-35e8-49d9-bbd1-c7884e666dca,4e309f26-35e8-49d9-bbd1-c7884e666dca,0,1,84f05fe4-51d3-49a8-83e7-1cae2028147e,84f05fe4-51d3-49a8-83e7-1cae2028147e,0,1,8a9ab11b-5bb5-4da9-9053-8f9e8198d019,8a9ab11b-5bb5-4da9-9053-8f9e8198d019,0,1,5320abf1-b09b-4de0-9adf-4cb1da31df6f,5320abf1-b09b-4de0-9adf-4cb1da31df6f,0,1,3916ddbd-9023-42a4-849e-9cda6e591408,3916ddbd-9023-42a4-849e-9cda6e591408,0,1,5e9e42c5-dcbc-422f-acce-4f11a63dbb85,5e9e42c5-dcbc-422f-acce-4f11a63dbb85,0,1,6903ffe4-42c1-4708-a1b0-bb67cd3f9e4c,6903ffe4-42c1-4708-a1b0-bb67cd3f9e4c,0,1,c0e01a15-6937-4331-bdd7-2f5a68d0d3dd,c0e01a15-6937-4331-bdd7-2f5a68d0d3dd,0,1,d065c02e-9991-468a-ae32-b8c29d078d03,d065c02e-9991-468a-ae32-b8c29d078d03,0,1,c509683e-eb13-4e1a-91ed-cd6982ec5001,c509683e-eb13-4e1a-91ed-cd6982ec5001,0,1,88bf6f58-7943-42c4-bc0f-56b991590026,88bf6f58-7943-42c4-bc0f-56b991590026,0,1,f135b60e-6d28-4ba1-acd7-76090f14855d,f135b60e-6d28-4ba1-acd7-76090f14855d,0,1,96d66cdd-d40c-43a3-92ce-40aef2101b64,96d66cdd-d40c-43a3-92ce-40aef2101b64,0,1,9daa8270-4782-4d83-af03-c8d2b11057ff,9daa8270-4782-4d83-af03-c8d2b11057ff,0,1,4b8927df-e124-4bf6-9d70-6e91b4796d90,4b8927df-e124-4bf6-9d70-6e91b4796d90,0,1,871b63a2-c7a6-4343-8d8b-7dda1b0def87,871b63a2-c7a6-4343-8d8b-7dda1b0def87,0,1,52b45b3d-b01b-4aac-8a1e-e256957c39c3,52b45b3d-b01b-4aac-8a1e-e256957c39c3,0,1,fc78d8df-ab27-4544-a65c-73908b9c5425,fc78d8df-ab27-4544-a65c-73908b9c5425,0,1,f8a090d2-b2d1-4ead-a8bf-6325a7552743,f8a090d2-b2d1-4ead-a8bf-6325a7552743,0,1,84f935da-9fe5-44ea-845b-b447b8b0a6f5,84f935da-9fe5-44ea-845b-b447b8b0a6f5,0,1,33343620-673e-4aa3-9e58-c6a25f738001,33343620-673e-4aa3-9e58-c6a25f738001,0,1,8aaf780f-ed74-4f44-9598-c14180053ff9,8aaf780f-ed74-4f44-9598-c14180053ff9,0,1,dbd4d09d-f410-4453-9143-bd72da5464cc,dbd4d09d-f410-4453-9143-bd72da5464cc,0,1,c4fe10b6-d025-4736-be23-3113bd7fe7b4,c4fe10b6-d025-4736-be23-3113bd7fe7b4,0,1,65530aca-7cf2-4a52-b5be-5dcbc15a049e,65530aca-7cf2-4a52-b5be-5dcbc15a049e,0,1,15eb2c2d-305d-42c0-9aec-936b82114bdb,15eb2c2d-305d-42c0-9aec-936b82114bdb,0,1,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,0,1,cbca7272-2aae-4e21-b3f5-12786f085648,cbca7272-2aae-4e21-b3f5-12786f085648,0,1,7718bd0b-7b8a-4ffc-b228-f05683b5531a,7718bd0b-7b8a-4ffc-b228-f05683b5531a,0,1,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,0,1,881f53bc-a52e-4312-b09d-3d3f53ddf84b,881f53bc-a52e-4312-b09d-3d3f53ddf84b,0,1,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,0,1,e3476d0e-0ab4-4734-9261-04aef6281086,e3476d0e-0ab4-4734-9261-04aef6281086,0,1,945ae8d2-b74a-41e9-b740-c82acdd40d04,945ae8d2-b74a-41e9-b740-c82acdd40d04,0,1,29c37223-de1c-49fb-8488-77e44dd79edd,29c37223-de1c-49fb-8488-77e44dd79edd,0,1,976533bf-f162-42a1-a47e-6d681ee67b82,976533bf-f162-42a1-a47e-6d681ee67b82,0,1,19bc0dd8-9e6b-4855-bc42-b4e98443163f,19bc0dd8-9e6b-4855-bc42-b4e98443163f,0,1,a61e10af-eaba-4e7a-a641-65d77453a559,a61e10af-eaba-4e7a-a641-65d77453a559,0,1,4c8eb34e-0bb6-487a-a2ae-24083b1f6d2e,4c8eb34e-0bb6-487a-a2ae-24083b1f6d2e,0,1,276c42ca-f5e0-4bb4-9b89-a925def35cb1,276c42ca-f5e0-4bb4-9b89-a925def35cb1,0,1,41a9cabc-5667-4ca0-a798-ba0b22bd1aa0,41a9cabc-5667-4ca0-a798-ba0b22bd1aa0,0,1,1bf44c42-87c0-4f2e-846c-b04d0b7e8d7d,1bf44c42-87c0-4f2e-846c-b04d0b7e8d7d,0,1,8811ea1a-1221-47b7-9574-3f36ff15a3cf,8811ea1a-1221-47b7-9574-3f36ff15a3cf,0,1,a84891cc-e996-489a-abde-5b5af166a057,a84891cc-e996-489a-abde-5b5af166a057,0,1,1d715463-691b-4c01-ae39-57c261f2a6ad,1d715463-691b-4c01-ae39-57c261f2a6ad,0,1,4c3d007f-a62c-4fd9-beda-58dbf08ad188,4c3d007f-a62c-4fd9-beda-58dbf08ad188,0,1,c35373a9-f0b0-4ddb-a985-409ac9c64609,c35373a9-f0b0-4ddb-a985-409ac9c64609,0,1,c5b4d6e4-4c99-46cb-98cf-9a0024215a12,c5b4d6e4-4c99-46cb-98cf-9a0024215a12,0,1,c1c40916-fee5-46e3-90fc-10e7595866c9,c1c40916-fee5-46e3-90fc-10e7595866c9,0,1,19a307b1-9ef0-4fc6-bf4f-7636e9118399,19a307b1-9ef0-4fc6-bf4f-7636e9118399,0,1,666244a4-5636-4405-89dd-bbd8f4278071,666244a4-5636-4405-89dd-bbd8f4278071,0,1,8b79f0e3-9024-4073-aa6b-a42beed9b0c6,8b79f0e3-9024-4073-aa6b-a42beed9b0c6,0,1,29a627a9-debc-4074-88d0-ec3561e1ef9c,29a627a9-debc-4074-88d0-ec3561e1ef9c,0,1,5a01a002-8833-4c89-b8d6-9b63fc49d3b6,5a01a002-8833-4c89-b8d6-9b63fc49d3b6,0,1,39f5e272-9a10-40b0-8a10-92037828b206,39f5e272-9a10-40b0-8a10-92037828b206,0,1,87dad256-122b-4d7e-b249-a2c313a9cf33,87dad256-122b-4d7e-b249-a2c313a9cf33,0,1,57a030fb-ed57-4ffc-a462-c7bbd2435c3d,57a030fb-ed57-4ffc-a462-c7bbd2435c3d,0,1,f20a04a7-84fa-48e3-8ac5-28176c1fcada,f20a04a7-84fa-48e3-8ac5-28176c1fcada,0,1,b722d6e1-fd6f-4bb4-923d-01764393722d,b722d6e1-fd6f-4bb4-923d-01764393722d,0,1,ac5f945e-2d03-44fb-a8cf-5d786194cefd,ac5f945e-2d03-44fb-a8cf-5d786194cefd,0,1,698ec00f-bf75-420e-81ab-a98808daf3f7,698ec00f-bf75-420e-81ab-a98808daf3f7,0,1,f441907c-d02e-431e-baf4-1854e48a1f50,f441907c-d02e-431e-baf4-1854e48a1f50,0,1,4ad722ca-10fc-4a83-91c9-ef0012685f89,4ad722ca-10fc-4a83-91c9-ef0012685f89,0,1,783dd4ba-a597-45ba-8989-2ed5224d62bc,783dd4ba-a597-45ba-8989-2ed5224d62bc,0,1,3b033d29-0de7-49dd-90bc-f414b28426d7,3b033d29-0de7-49dd-90bc-f414b28426d7,0,1,97aaede5-d32f-4eba-b0e0-5ae5f094a8b7,97aaede5-d32f-4eba-b0e0-5ae5f094a8b7,0,1,d9e08c12-1999-41d8-b530-90187303be0a,d9e08c12-1999-41d8-b530-90187303be0a,0,1,dad9710a-73ca-4e0d-b98b-75f955d0822d,dad9710a-73ca-4e0d-b98b-75f955d0822d,0,1,d01beeab-7c42-4d5e-a2f6-f190b9f703a5,d01beeab-7c42-4d5e-a2f6-f190b9f703a5,0,1,2191939f-6f71-47c9-a3d2-57acbf7f411e,2191939f-6f71-47c9-a3d2-57acbf7f411e,0,1,19b9cbbb-1fcc-4492-9385-687742cb3d0b,19b9cbbb-1fcc-4492-9385-687742cb3d0b,0,1,247c41dd-c8dc-43dd-b348-1ba31ee92065,247c41dd-c8dc-43dd-b348-1ba31ee92065,0,1,dbad3cee-0d5c-41f6-819f-1a2b5251b62c,dbad3cee-0d5c-41f6-819f-1a2b5251b62c,0,1,da673406-078d-44c8-9d27-80ef172c4b5e,da673406-078d-44c8-9d27-80ef172c4b5e,0,1,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,0,1,a2c36563-126d-4c3a-9714-5b7a4903073b,a2c36563-126d-4c3a-9714-5b7a4903073b,0,1,2e4da82c-dddb-4462-b34f-6511cd2a8356,2e4da82c-dddb-4462-b34f-6511cd2a8356,0,1,c7da3115-3cee-4282-a2f2-4e0b5558e4fc,c7da3115-3cee-4282-a2f2-4e0b5558e4fc,0,1,2976c29f-f482-463d-8f6e-6a632fb50893,2976c29f-f482-463d-8f6e-6a632fb50893,0,1,701964a1-7762-45ee-a9a4-41dd9ce94783,701964a1-7762-45ee-a9a4-41dd9ce94783,0,1,55d1909e-f552-441f-8e14-47d2e604cf6a,55d1909e-f552-441f-8e14-47d2e604cf6a,0,1,eae627db-c52b-4e41-94d1-58db28cd0063,eae627db-c52b-4e41-94d1-58db28cd0063,0,1,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,0,1,0a646724-b49d-42cd-82e6-e800466ed127,0a646724-b49d-42cd-82e6-e800466ed127,0,1,47058e36-a281-43a5-a41d-691b3ef32b5b,47058e36-a281-43a5-a41d-691b3ef32b5b,0,1,4fc5c023-91e2-4b3e-8f61-4dfe3be78f3a,4fc5c023-91e2-4b3e-8f61-4dfe3be78f3a,0,1,646def82-bc88-4187-8be0-93938656a20f,646def82-bc88-4187-8be0-93938656a20f,0,1,e620e93c-4382-478f-a700-ad2faa67362b,e620e93c-4382-478f-a700-ad2faa67362b,0,1,a4a8693b-dc91-4762-92e6-35360c8768db,a4a8693b-dc91-4762-92e6-35360c8768db,0,1,2ae236ec-28a7-44e0-a0ba-be62fe52d817,2ae236ec-28a7-44e0-a0ba-be62fe52d817,0,1,52ae6431-afb3-4dea-b106-00e11b174ec7,52ae6431-afb3-4dea-b106-00e11b174ec7,0,1,b18bdc5f-a2b6-4b15-81c3-37b27a5a3176,b18bdc5f-a2b6-4b15-81c3-37b27a5a3176,0,1,c996916d-7f1c-4fbf-939f-3e1bafe81f7d,c996916d-7f1c-4fbf-939f-3e1bafe81f7d,0,1,528d96cc-8838-49ea-8d76-ea56747882e0,528d96cc-8838-49ea-8d76-ea56747882e0,0,1,b9166ea0-cce8-4f76-a9cb-a3d6eb4dfb95,b9166ea0-cce8-4f76-a9cb-a3d6eb4dfb95,0,1,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,0,1,12cf9412-baf5-4d32-a563-a11ac3d5e0ed,12cf9412-baf5-4d32-a563-a11ac3d5e0ed,0,1,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,0,1,ed137e05-1996-411d-9927-45a3d7e3ee3b,ed137e05-1996-411d-9927-45a3d7e3ee3b,0,1,fbebf341-9842-41e1-8e4d-490fa02065ce,fbebf341-9842-41e1-8e4d-490fa02065ce,0,1,067f88f6-ccd2-491e-a466-94345a1f220f,067f88f6-ccd2-491e-a466-94345a1f220f,0,1,642154b8-97da-4c4f-bf34-c1124215077d,642154b8-97da-4c4f-bf34-c1124215077d,0,1,abc10867-39ae-46bf-8bd7-90f645919235,abc10867-39ae-46bf-8bd7-90f645919235,0,1,b3396504-8ccb-43d6-9a0f-ab259ba0a542,b3396504-8ccb-43d6-9a0f-ab259ba0a542,0,1,f59f91c5-026a-4dc5-996e-0d59814a9604,f59f91c5-026a-4dc5-996e-0d59814a9604,0,1,aac9966f-e9ea-4106-97bb-6b9822939bc7,aac9966f-e9ea-4106-97bb-6b9822939bc7,0,1,a752fba8-5084-4fa2-9d0b-7074a42b1312,a752fba8-5084-4fa2-9d0b-7074a42b1312,0,1,640d7486-8abd-40aa-a244-2ed899b7225a,640d7486-8abd-40aa-a244-2ed899b7225a,0,1,58321939-f25a-456d-8dee-97e64743dc2e,58321939-f25a-456d-8dee-97e64743dc2e,0,1,416fba62-70c4-4f8c-b10b-56d47b27ca35,416fba62-70c4-4f8c-b10b-56d47b27ca35,0,1,ec48a164-bc30-4e36-a40a-a3cca07aea0d,ec48a164-bc30-4e36-a40a-a3cca07aea0d,0,1,c05f87b4-ec5f-4d14-981f-02ca8ba89863,c05f87b4-ec5f-4d14-981f-02ca8ba89863,0,1,b7736108-89bd-44eb-89c1-8a5a774058f1,b7736108-89bd-44eb-89c1-8a5a774058f1,0,1,560a5f44-e4e6-46d9-a9fe-3609842d0e3e,560a5f44-e4e6-46d9-a9fe-3609842d0e3e,0,1,98f68a75-ebf9-4c59-b6a8-b3634089ca6b,98f68a75-ebf9-4c59-b6a8-b3634089ca6b,0,1,875d1fc1-8172-4e48-8192-035882e1665d,875d1fc1-8172-4e48-8192-035882e1665d,0,1,26132b28-98cc-4690-92ad-139f91839ba2,26132b28-98cc-4690-92ad-139f91839ba2,0,1,0bd85b79-cc32-4c1d-b629-567a1bdfac56,0bd85b79-cc32-4c1d-b629-567a1bdfac56,0,1,b87ce4f9-aaa6-4a4c-af80-0bd9adc83506,b87ce4f9-aaa6-4a4c-af80-0bd9adc83506,0,1,ca81e0ea-c428-47f9-aedb-078214104a2f,ca81e0ea-c428-47f9-aedb-078214104a2f,0,1,9518d09c-6996-4439-9278-3c71d5ae8fce,9518d09c-6996-4439-9278-3c71d5ae8fce,0,1,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,0,1,5fbd9a13-012d-4c36-b72c-da3bc4157cff,5fbd9a13-012d-4c36-b72c-da3bc4157cff,0,1,1126157b-64c0-4d64-8551-f31c5ed0fd29,1126157b-64c0-4d64-8551-f31c5ed0fd29,0,1,6ae6e515-5cd4-4eca-8602-c6abe6d66276,6ae6e515-5cd4-4eca-8602-c6abe6d66276,0,1,44b8472b-0f70-49cc-8f71-9c9d3e9cfbcc,44b8472b-0f70-49cc-8f71-9c9d3e9cfbcc,0,1,b071a44e-9a34-4af3-a59a-35aa5f3a74b4,b071a44e-9a34-4af3-a59a-35aa5f3a74b4,0,1,35a28677-0653-47f9-82e1-02c4b9266fee,35a28677-0653-47f9-82e1-02c4b9266fee,0,1,2e17464f-9cef-4812-865f-4eb77ff16b6a,2e17464f-9cef-4812-865f-4eb77ff16b6a,0,1,e5ecbb1f-981d-4928-9335-22216879f7e2,e5ecbb1f-981d-4928-9335-22216879f7e2,0,1,461be12a-9f16-4826-978a-436608ca8733,461be12a-9f16-4826-978a-436608ca8733,0,1,9b143299-d300-4b6c-b667-5552fb3bdcde,9b143299-d300-4b6c-b667-5552fb3bdcde,0,1,0de070f4-d8b7-48bb-bfc9-027dd727a4ad,0de070f4-d8b7-48bb-bfc9-027dd727a4ad,0,1,74973d06-f57d-403e-945c-5cd2f4fc4869,74973d06-f57d-403e-945c-5cd2f4fc4869,0,1,259564b8-172e-4eed-9360-d561ec6dad69,259564b8-172e-4eed-9360-d561ec6dad69,0,1,91c799d7-2b3d-4d1a-87ff-221057a428c6,91c799d7-2b3d-4d1a-87ff-221057a428c6,0,1,a50fcacc-6d2d-496c-bea0-9c73cd153437,a50fcacc-6d2d-496c-bea0-9c73cd153437,0,1,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,0,1,0fb72f4b-e6f6-4b70-8ec7-fdb6d4ad928e,0fb72f4b-e6f6-4b70-8ec7-fdb6d4ad928e,0,1,a5633248-8611-4e9b-b223-2f59e7b84a65,a5633248-8611-4e9b-b223-2f59e7b84a65,0,1,6ec3463a-1e94-4de7-a8c0-b0e42f38573e,6ec3463a-1e94-4de7-a8c0-b0e42f38573e,0,1,e40b8882-737a-40c0-83b4-c35dc042f4a5,e40b8882-737a-40c0-83b4-c35dc042f4a5,0,1,d60c1e9d-1395-4293-8462-6ea2c93a0c86,d60c1e9d-1395-4293-8462-6ea2c93a0c86,0,1,a05fdefd-c0c6-4069-bb05-3fcd22819289,a05fdefd-c0c6-4069-bb05-3fcd22819289,0,1,1514f388-3c36-422f-9e23-83054934e4b3,1514f388-3c36-422f-9e23-83054934e4b3,0,1,841f4416-a85a-48f7-bae2-19865cf2979e,841f4416-a85a-48f7-bae2-19865cf2979e,0,1,8df13cd3-1b03-4c84-98e9-c771c1d5254a,8df13cd3-1b03-4c84-98e9-c771c1d5254a,0,1,a79ddc43-74f6-4997-bfc4-bdf7bc71cdd6,a79ddc43-74f6-4997-bfc4-bdf7bc71cdd6,0,1,29477058-cb8d-4fd4-b3a1-41565aeabf97,29477058-cb8d-4fd4-b3a1-41565aeabf97,0,1,5a2d5d8a-afd9-4954-9868-7c82bad00426,5a2d5d8a-afd9-4954-9868-7c82bad00426,0,1,26aea96b-20f8-4e35-b55f-4fe3602e6597,26aea96b-20f8-4e35-b55f-4fe3602e6597,0,1,a3a3a211-e361-4e41-a6f8-d731a366c163,a3a3a211-e361-4e41-a6f8-d731a366c163,0,1,c40d6fde-4d9a-4d9e-af86-42b7916e2abe,c40d6fde-4d9a-4d9e-af86-42b7916e2abe,0,1,4d5204ae-711d-4c31-8a18-280dbc9d2bf5,4d5204ae-711d-4c31-8a18-280dbc9d2bf5,0,1,ca01417c-0ffd-4e00-91e8-93cd305be82d,ca01417c-0ffd-4e00-91e8-93cd305be82d,0,1,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,0,1,0a0af8bf-0caa-40df-9a69-71f98ca9ff89,0a0af8bf-0caa-40df-9a69-71f98ca9ff89,0,1,6ac7db0c-18ed-4d3b-956a-5985214db474,6ac7db0c-18ed-4d3b-956a-5985214db474,0,1,267103e0-6703-4a74-bb4f-af610d7ef332,267103e0-6703-4a74-bb4f-af610d7ef332,0,1,b98ca634-25a5-4366-af04-815ba34c8bb2,b98ca634-25a5-4366-af04-815ba34c8bb2,0,1,14d69108-4d26-401a-b7ae-2c86dadf831c,14d69108-4d26-401a-b7ae-2c86dadf831c,0,1,d6251f65-d366-4bc9-a5db-42063fe03594,d6251f65-d366-4bc9-a5db-42063fe03594,0,1,22c60cbc-429f-40d9-bf8b-681b7786c41d,22c60cbc-429f-40d9-bf8b-681b7786c41d,0,1,d4e53d41-9335-4a1e-a06e-410c46de1d1c,d4e53d41-9335-4a1e-a06e-410c46de1d1c,0,1,4405bfaa-699a-497b-a15c-0302b86c834c,4405bfaa-699a-497b-a15c-0302b86c834c,0,1,3b3e7b9d-67f8-4cf2-ad1a-29d124169691,3b3e7b9d-67f8-4cf2-ad1a-29d124169691,0,1,31dd320b-06aa-4314-9914-2c2420f572a1,31dd320b-06aa-4314-9914-2c2420f572a1,0,1,56730848-3bef-4b8c-b449-fe9d09c9c374,56730848-3bef-4b8c-b449-fe9d09c9c374,0,1,43c477d2-1234-4c4a-a18a-022c0ddf2fd5,43c477d2-1234-4c4a-a18a-022c0ddf2fd5,0,1,91d8c5e4-eaec-4951-9224-16882fda08f6,91d8c5e4-eaec-4951-9224-16882fda08f6,0,1,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,0,1,4654d192-74bf-430f-abee-6f4dc431b182,4654d192-74bf-430f-abee-6f4dc431b182,0,1,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,0,1,4678c704-933a-45ef-9d41-89b8f39016bb,4678c704-933a-45ef-9d41-89b8f39016bb,0,1,8ceea1e8-42ce-469f-823a-ceffdbd6b112,8ceea1e8-42ce-469f-823a-ceffdbd6b112,0,1,086d69d6-e2fa-45cb-84b6-f8f3e2919160,086d69d6-e2fa-45cb-84b6-f8f3e2919160,0,1,6995ee71-5901-46d9-a5c1-b35d795bda20,6995ee71-5901-46d9-a5c1-b35d795bda20,0,1,e93a4293-0497-4f11-b8b9-40300104fb96,e93a4293-0497-4f11-b8b9-40300104fb96,0,1,93531e5d-5dfc-42e8-be52-2e83f37262b0,93531e5d-5dfc-42e8-be52-2e83f37262b0,0,1,61bf78c0-7004-4a74-b362-e979c7316e05,61bf78c0-7004-4a74-b362-e979c7316e05,0,1,c4351896-eff1-4e4d-8823-028d63a9d6bf,c4351896-eff1-4e4d-8823-028d63a9d6bf,0,1,475f83a2-ba5a-4072-94f8-1324b1f198a4,475f83a2-ba5a-4072-94f8-1324b1f198a4,0,1,cd7c15c1-c573-46c9-b109-339b8b54c3ee,cd7c15c1-c573-46c9-b109-339b8b54c3ee,0,1,efd89929-4db9-4c58-b3cb-a8d9a41a1df2,efd89929-4db9-4c58-b3cb-a8d9a41a1df2,0,1,deee8bde-381f-4094-8794-7a06248860dd,deee8bde-381f-4094-8794-7a06248860dd,0,1,2757ee75-4b36-4901-bff1-044708754edb,2757ee75-4b36-4901-bff1-044708754edb,0,1,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,0,1,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,0,1,71144539-6472-4727-8887-0139f6221370,71144539-6472-4727-8887-0139f6221370,0,1,bff07da4-ae19-48a9-806b-14b285d42485,bff07da4-ae19-48a9-806b-14b285d42485,0,1,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,0,1,b0ccc05d-8d39-4f57-8e87-6846014f92ea,b0ccc05d-8d39-4f57-8e87-6846014f92ea,0,1,e871dea7-1953-4511-90b0-e0957afac4c0,e871dea7-1953-4511-90b0-e0957afac4c0,0,1,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,0,1,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,0,1,447fb310-0588-4e0d-8f6d-5fc1f3bb1180,447fb310-0588-4e0d-8f6d-5fc1f3bb1180,0,1,8986c155-54be-4b1b-b31a-5c00b88bc40d,8986c155-54be-4b1b-b31a-5c00b88bc40d,0,1,d91441cf-d793-4dfa-9225-f0c16818edde,d91441cf-d793-4dfa-9225-f0c16818edde,0,1,40ae107d-67a8-404c-adf9-1a760bba94ff,40ae107d-67a8-404c-adf9-1a760bba94ff,0,1,42a39785-144c-4d2d-92c6-fd8b345f687b,42a39785-144c-4d2d-92c6-fd8b345f687b,0,1,f3bd841b-fb36-4462-9627-b51801e563cd,f3bd841b-fb36-4462-9627-b51801e563cd,0,1,0a23f273-5589-4a48-be3a-eee7565749aa,0a23f273-5589-4a48-be3a-eee7565749aa,0,1,494eb9d9-4a10-4e85-b511-375408f21bbe,494eb9d9-4a10-4e85-b511-375408f21bbe,0,1,3fbbca3f-d4fa-4d65-a08f-0a348b9030c6,3fbbca3f-d4fa-4d65-a08f-0a348b9030c6,0,1,a161dd07-4a6e-4d0f-b72c-702d0d3a83a3,a161dd07-4a6e-4d0f-b72c-702d0d3a83a3,0,1,a275802f-937a-49f4-92da-fcdd185a036d,a275802f-937a-49f4-92da-fcdd185a036d,0,1,ec6ed9cb-85a2-4303-9906-cfb4ce6500bf,ec6ed9cb-85a2-4303-9906-cfb4ce6500bf,0,1,f2dc9319-ba60-421a-8340-be3e3a291393,f2dc9319-ba60-421a-8340-be3e3a291393,0,1,bf4eb62a-bc74-4845-bad2-58a2a8302a65,bf4eb62a-bc74-4845-bad2-58a2a8302a65,0,1,b66eb190-1c16-4f20-a94f-954bcdf313b8,b66eb190-1c16-4f20-a94f-954bcdf313b8,0,1,bbdfeebd-cda0-4911-8f31-553d751340a7,bbdfeebd-cda0-4911-8f31-553d751340a7,0,1,dc7adfb7-41e7-4019-a18d-5d9f5d227b71,dc7adfb7-41e7-4019-a18d-5d9f5d227b71,0,1,20aad006-5b1e-4cc2-94ef-668dd002667b,20aad006-5b1e-4cc2-94ef-668dd002667b,0,1,af6af7ae-d68a-4e12-ba2c-a360ce2920a7,af6af7ae-d68a-4e12-ba2c-a360ce2920a7,0,1,b0f5bce4-2ad3-416e-9b1e-3fb23deaa040,b0f5bce4-2ad3-416e-9b1e-3fb23deaa040,0,1,2befb2e3-7354-4a01-83d6-b24262704a5e,2befb2e3-7354-4a01-83d6-b24262704a5e,0,1,5b93975e-b2a4-4102-a060-2667f5813c94,5b93975e-b2a4-4102-a060-2667f5813c94,0,1,ca75d086-cd01-4f54-b57d-1b35bcb1272a,ca75d086-cd01-4f54-b57d-1b35bcb1272a,0,1,b4a27991-2e18-4ead-80e8-f2956a7539e3,b4a27991-2e18-4ead-80e8-f2956a7539e3,0,1,ac8c40d6-be1e-4733-be2e-ae83bde4ec15,ac8c40d6-be1e-4733-be2e-ae83bde4ec15,0,1,dcdc9c65-c2d5-4531-a325-f64b3861cbab,dcdc9c65-c2d5-4531-a325-f64b3861cbab,0,1,ca542a9e-3040-419f-9a98-2a8de230b734,ca542a9e-3040-419f-9a98-2a8de230b734,0,1,c9fc5155-1df3-4872-a83d-72872baf43c4,c9fc5155-1df3-4872-a83d-72872baf43c4,0,1,9f9adb67-66bd-4c28-8319-44ae097ae1fe,9f9adb67-66bd-4c28-8319-44ae097ae1fe,0,1,0bae3704-b370-48be-b094-f18a2e62ad1b,0bae3704-b370-48be-b094-f18a2e62ad1b,0,1,e097bf94-9235-4a27-b0eb-d6387d22cd62,e097bf94-9235-4a27-b0eb-d6387d22cd62,0,1,eccded1c-f3ca-40d3-a8cd-71947bfed7b8,eccded1c-f3ca-40d3-a8cd-71947bfed7b8,0,1,4d243f2b-14d9-4e96-9707-4ead5d12e0a2,4d243f2b-14d9-4e96-9707-4ead5d12e0a2,0,1,8d2bfd40-f185-4eab-b374-872d49310eb2,8d2bfd40-f185-4eab-b374-872d49310eb2,0,1,523de426-e5a6-49e0-8144-c637f80d8ddd,523de426-e5a6-49e0-8144-c637f80d8ddd,0,1,09256328-6205-4b04-b908-3287ae8ded75,09256328-6205-4b04-b908-3287ae8ded75,0,1,05a6e161-9791-4c5b-8753-bd6370cc4cc9,05a6e161-9791-4c5b-8753-bd6370cc4cc9,0,1,6362facc-bf95-4adf-8ee7-c65f90972a1c,6362facc-bf95-4adf-8ee7-c65f90972a1c,0,1,08dbba81-68fb-49ef-8aac-9631fcfa87c6,08dbba81-68fb-49ef-8aac-9631fcfa87c6,0,1,dd7191b6-cbc0-4b0b-a51a-c27a1e1720fa,dd7191b6-cbc0-4b0b-a51a-c27a1e1720fa,0,1,8170a27d-45e9-48b1-860b-c2d9cc5961cd,8170a27d-45e9-48b1-860b-c2d9cc5961cd,0,1,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,0,1,e8c3b796-bfd8-4108-ab5f-d0f21b7bd9a6,e8c3b796-bfd8-4108-ab5f-d0f21b7bd9a6,0,1,f41d01ec-983a-4b39-9c11-a6d25d08df4f,f41d01ec-983a-4b39-9c11-a6d25d08df4f,0,1,3247e64e-b57e-4c33-8086-7ab93c5b6371,3247e64e-b57e-4c33-8086-7ab93c5b6371,0,1,e5dca369-dc9a-4332-a509-f734b8787e13,e5dca369-dc9a-4332-a509-f734b8787e13,0,1,722af623-156c-4e63-8b2a-93da760f1559,722af623-156c-4e63-8b2a-93da760f1559,0,1,5ff23123-450c-40ae-9b79-c540da53e2a0,5ff23123-450c-40ae-9b79-c540da53e2a0,0,1,639339a1-7de5-4b05-adf3-f60e7edd922c,639339a1-7de5-4b05-adf3-f60e7edd922c,0,1,dea9af9d-13c0-40d4-a9b0-1908e0a58795,dea9af9d-13c0-40d4-a9b0-1908e0a58795,0,1,9e9b8c05-787a-43c0-891d-3d9ad7e4976f,9e9b8c05-787a-43c0-891d-3d9ad7e4976f,0,1,1abeb10b-0558-4478-8f51-d0964ba3c274,1abeb10b-0558-4478-8f51-d0964ba3c274,0,1,38325a66-588a-4db0-8e0c-21d239408369,38325a66-588a-4db0-8e0c-21d239408369,0,1,7c27e885-33fd-4da2-a60d-50336c0189b0,7c27e885-33fd-4da2-a60d-50336c0189b0,0,1,0e1a45b0-d95d-415f-b954-5689610aa393,0e1a45b0-d95d-415f-b954-5689610aa393,0,1,4736b3d3-f696-4bdd-b0e3-0884ea88f623,4736b3d3-f696-4bdd-b0e3-0884ea88f623,0,1,4b849c66-6a36-4efd-815e-af4467c6f064,4b849c66-6a36-4efd-815e-af4467c6f064,0,1,f6939587-ff87-4eca-ae52-10e1bd2abfce,f6939587-ff87-4eca-ae52-10e1bd2abfce,0,1,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,0,1,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,0,1,3cb575a9-dc82-45e0-81f0-d651e12246da,3cb575a9-dc82-45e0-81f0-d651e12246da,0,1,01a73950-3e8f-4f56-903f-af0d9574e72e,01a73950-3e8f-4f56-903f-af0d9574e72e,0,1,14bd0844-c829-4325-aa7f-0f417bf955dc,14bd0844-c829-4325-aa7f-0f417bf955dc,0,1,7f1cd658-ca10-49c6-80ef-b8956f3269ea,7f1cd658-ca10-49c6-80ef-b8956f3269ea,0,1,b0d9086f-cef7-47a8-ad62-d85fea28ebda,b0d9086f-cef7-47a8-ad62-d85fea28ebda,0,1,49c010fc-f5cc-45f4-ba46-132e7661c3dd,49c010fc-f5cc-45f4-ba46-132e7661c3dd,0,1,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,0,1,2c02a558-8d12-44cf-be6b-9c399b9032e5,2c02a558-8d12-44cf-be6b-9c399b9032e5,0,1,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,0,1,c770bdd5-c7c0-4751-b31d-46c0ea1f49b7,c770bdd5-c7c0-4751-b31d-46c0ea1f49b7,0,1,6afcc089-7f15-42e8-97b5-6aad6cf2e6f9,6afcc089-7f15-42e8-97b5-6aad6cf2e6f9,0,1,cce4c615-dc29-42b3-9d3d-b277dde4a2e4,cce4c615-dc29-42b3-9d3d-b277dde4a2e4,0,1,9c267aa6-5f23-49f6-868a-3324ef2845ff,9c267aa6-5f23-49f6-868a-3324ef2845ff,0,1,495eeeee-d7bf-4063-99e2-86daa066451a,495eeeee-d7bf-4063-99e2-86daa066451a,0,1,b6184698-79e4-4c19-9440-092ccd9dabf8,b6184698-79e4-4c19-9440-092ccd9dabf8,0,1,7d01fc0c-378e-421d-ab70-6a418eed5941,7d01fc0c-378e-421d-ab70-6a418eed5941,0,1,6eeb4867-bf9d-48dc-b96b-934a0c293010,6eeb4867-bf9d-48dc-b96b-934a0c293010,0,1,c7f817ee-9f6a-454c-95a0-b279fd08055e,c7f817ee-9f6a-454c-95a0-b279fd08055e,0,1,e1803e54-ec5e-4a82-8097-5e2331820991,e1803e54-ec5e-4a82-8097-5e2331820991,0,1,259ede1f-05d3-4ece-8994-0ae3b2e89f49,259ede1f-05d3-4ece-8994-0ae3b2e89f49,0,1,f69ec1f9-826e-4eb4-b52c-3f6a3dfc3361,f69ec1f9-826e-4eb4-b52c-3f6a3dfc3361,0,1,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,0,1,8506dbe9-7066-444b-83b6-fb2d71a336e7,8506dbe9-7066-444b-83b6-fb2d71a336e7,0,1,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,0,1,6686d828-3129-4d44-a8a2-a64657d424cb,6686d828-3129-4d44-a8a2-a64657d424cb,0,1,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,0,1,ce235ab9-1dec-459a-9fec-498c262ece56,ce235ab9-1dec-459a-9fec-498c262ece56,0,1,9ec53d1a-ed7a-41e8-b5d0-6c2181fd63a5,9ec53d1a-ed7a-41e8-b5d0-6c2181fd63a5,0,1,97edd94a-4bf2-4ed7-b98f-677f869b0715,97edd94a-4bf2-4ed7-b98f-677f869b0715,0,1,39355e82-30a6-431e-9697-e2c42e82de83,39355e82-30a6-431e-9697-e2c42e82de83,0,1,a9ae364f-b668-4fb4-b976-f227951ffb6b,a9ae364f-b668-4fb4-b976-f227951ffb6b,0,1,edc01b03-8b01-4551-939a-f7e257892040,edc01b03-8b01-4551-939a-f7e257892040,0,1,15d09274-9508-4f64-9ea3-678c5aa50f0f,15d09274-9508-4f64-9ea3-678c5aa50f0f,0,1,4debe032-12e4-4777-b2fc-70b150f2aad1,4debe032-12e4-4777-b2fc-70b150f2aad1,0,1,37558fa2-0833-46d6-9e4f-63d4a3136870,37558fa2-0833-46d6-9e4f-63d4a3136870,0,1,d92cb614-ed09-47db-b70b-d3e533c44c6a,d92cb614-ed09-47db-b70b-d3e533c44c6a,0,1,e660c8bf-af5f-4525-a56e-68925d2b96fa,e660c8bf-af5f-4525-a56e-68925d2b96fa,0,1,2fad50a6-6a3e-4f87-ab84-907364427a63,2fad50a6-6a3e-4f87-ab84-907364427a63,0,1,9567765b-8e02-4262-89a9-5c354109cc4c,9567765b-8e02-4262-89a9-5c354109cc4c,0,1,3153b2b9-9e3e-4d6b-ab8c-5ccaac78a08a,3153b2b9-9e3e-4d6b-ab8c-5ccaac78a08a,0,1,588bd1b2-ee61-4a05-83cd-efb1b82ccb44,588bd1b2-ee61-4a05-83cd-efb1b82ccb44,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,fdb5b235-1978-4c2a-a03f-02341df00c3c,fdb5b235-1978-4c2a-a03f-02341df00c3c,0,1,9f593f27-8009-40c0-94d6-53f177ce55f4,9f593f27-8009-40c0-94d6-53f177ce55f4,0,1,38637f61-399a-4966-9e64-4751aecffa31,38637f61-399a-4966-9e64-4751aecffa31,0,1,0f38a18b-a36c-45fe-86c1-396634aaa5df,0f38a18b-a36c-45fe-86c1-396634aaa5df,0,1,f2b7b8d0-c0f7-46ba-907a-f8dfa76fc2da,f2b7b8d0-c0f7-46ba-907a-f8dfa76fc2da,0,1,a81c783d-2dea-4dde-9ca1-7b23d609eb22,a81c783d-2dea-4dde-9ca1-7b23d609eb22,0,1,137ec4ee-5053-47a7-8f5d-f6e63174608f,137ec4ee-5053-47a7-8f5d-f6e63174608f,0,1,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,0,1,530a3164-4ef1-4b3b-8269-13764ef4bf15,530a3164-4ef1-4b3b-8269-13764ef4bf15,0,1,6df2bb92-558c-4453-9de4-e4176e8f93dc,6df2bb92-558c-4453-9de4-e4176e8f93dc,0,1,0ce4c8a4-b20b-4550-bee3-f677e9ec64e9,0ce4c8a4-b20b-4550-bee3-f677e9ec64e9,0,1,30d5c2a6-b3cf-4ed5-ba75-850bcae932d1,30d5c2a6-b3cf-4ed5-ba75-850bcae932d1,0,1,0bf5e9c1-905a-4202-8b96-ed831b41be4b,0bf5e9c1-905a-4202-8b96-ed831b41be4b,0,1,e92ae368-0d7c-4fb7-b6d0-5ab63dc95a6a,e92ae368-0d7c-4fb7-b6d0-5ab63dc95a6a,0,1,f30c9c4b-aa6c-4b15-9ac7-888c0c0cabd9,f30c9c4b-aa6c-4b15-9ac7-888c0c0cabd9,0,1,be15e947-f671-4848-ada1-51239af73615,be15e947-f671-4848-ada1-51239af73615,0,1,d3e0dd8f-886a-4441-8f05-fd629da80f07,d3e0dd8f-886a-4441-8f05-fd629da80f07,0,1,6417d7c8-6436-4907-98eb-44cd7638f3f1,6417d7c8-6436-4907-98eb-44cd7638f3f1,0,1,ba49877b-6e30-4177-a67c-00e65aa498fb,ba49877b-6e30-4177-a67c-00e65aa498fb,0,1,25b39aeb-94c3-4199-9d56-5bd87e325bf2,25b39aeb-94c3-4199-9d56-5bd87e325bf2,0,1,b0b63551-4e83-4201-af9a-b4ab150c43a5,b0b63551-4e83-4201-af9a-b4ab150c43a5,0,1,ca85912b-87b4-481e-9184-017364b4603d,ca85912b-87b4-481e-9184-017364b4603d,0,1,2bd80198-4739-4e8f-9af1-40addc91a05b,2bd80198-4739-4e8f-9af1-40addc91a05b,0,1,572019eb-ffc4-4cfd-b4ba-c09267900c6c,572019eb-ffc4-4cfd-b4ba-c09267900c6c,0,1,bb7fad68-32d3-4e6a-be62-2c4c34c94737,bb7fad68-32d3-4e6a-be62-2c4c34c94737,0,1,a69525c7-27ff-48df-b26b-325ba580a53e,a69525c7-27ff-48df-b26b-325ba580a53e,0,1,24a7de1c-1c1f-4987-91ff-02f78f15dd9e,24a7de1c-1c1f-4987-91ff-02f78f15dd9e,0,1,33c66a15-e48e-406a-a77c-02af72ae96d5,33c66a15-e48e-406a-a77c-02af72ae96d5,0,1,ebd3dcc2-1176-4ee0-b590-ee39f85fb55b,ebd3dcc2-1176-4ee0-b590-ee39f85fb55b,0,1,3b78a9d0-7382-4115-a7dc-d06c9a1962d1,3b78a9d0-7382-4115-a7dc-d06c9a1962d1,0,1,9935d602-668e-4df9-a338-0f542def878b,9935d602-668e-4df9-a338-0f542def878b,0,1,459ed297-0c0d-4bdb-90a3-da387868f040,459ed297-0c0d-4bdb-90a3-da387868f040,0,1,ccb5b9a7-1a10-4803-b455-0350afe4b584,ccb5b9a7-1a10-4803-b455-0350afe4b584,0,1,ebce49ef-755a-4ace-aeb1-b99db2a8bf6c,ebce49ef-755a-4ace-aeb1-b99db2a8bf6c,0,1,0cd18f4c-aeb9-456b-9dcd-9649d1dd486b,0cd18f4c-aeb9-456b-9dcd-9649d1dd486b,0,1,ba5e7c41-0442-4f74-ba41-631d864eafb4,ba5e7c41-0442-4f74-ba41-631d864eafb4,0,1,c86aa97a-5898-4cb2-ae62-598bddf8e99f,c86aa97a-5898-4cb2-ae62-598bddf8e99f,0,1,d3c9b925-6b74-42db-8b21-ab21d24797d1,d3c9b925-6b74-42db-8b21-ab21d24797d1,0,1,4d348ec3-9de8-4f5b-960c-4b507d0fd7ce,4d348ec3-9de8-4f5b-960c-4b507d0fd7ce,0,1,39261a2d-7c46-40b1-9f8f-02d970aa04bc,39261a2d-7c46-40b1-9f8f-02d970aa04bc,0,1,3a07e5a5-2ab1-43ef-b97f-d45cd7775d67,3a07e5a5-2ab1-43ef-b97f-d45cd7775d67,0,1,124a516f-cdab-49ce-95d1-359921140342,124a516f-cdab-49ce-95d1-359921140342,0,1,e4294611-a770-4e67-9578-a1f370879476,e4294611-a770-4e67-9578-a1f370879476,0,1,c5033dd2-0911-4124-8688-dc9dabf3155f,c5033dd2-0911-4124-8688-dc9dabf3155f,0,1,274357df-cb5c-407d-ae72-58046c310db2,274357df-cb5c-407d-ae72-58046c310db2,0,1,5467001e-d025-4669-b16e-26381ac4403f,5467001e-d025-4669-b16e-26381ac4403f,0,1,21f6544a-9227-4b31-bbf2-293b946cac9d,21f6544a-9227-4b31-bbf2-293b946cac9d,0,1,2cfea4b1-0569-4832-b712-0d8d201580d5,2cfea4b1-0569-4832-b712-0d8d201580d5,0,1,97053b27-9c6e-4e17-a27d-48d7cbb80903,97053b27-9c6e-4e17-a27d-48d7cbb80903,0,1,87442857-4ef7-41c2-9f86-b8ed94bc9d40,87442857-4ef7-41c2-9f86-b8ed94bc9d40,0,1,32068cda-69d0-470b-9e36-b125ec112c27,32068cda-69d0-470b-9e36-b125ec112c27,0,1,9b0bf652-b174-4d27-93c5-15dd656702b6,9b0bf652-b174-4d27-93c5-15dd656702b6,0,1,4012cde7-9fb5-4ade-b5f7-2d791e5bce36,4012cde7-9fb5-4ade-b5f7-2d791e5bce36,0,1,9a5fd73f-894f-4611-9e2e-26d8bf39466d,9a5fd73f-894f-4611-9e2e-26d8bf39466d,0,1,7346a13a-5b14-4c42-be97-2f375c087dae,7346a13a-5b14-4c42-be97-2f375c087dae,0,1,2b7cd37f-f6ec-476e-8f8e-e3d0cb946075,2b7cd37f-f6ec-476e-8f8e-e3d0cb946075,0,1,d3ddb39f-d418-4884-a194-6a5049a2ba26,d3ddb39f-d418-4884-a194-6a5049a2ba26,0,1,7a15a2b5-c5a0-451d-b374-bb6d73bc7d51,7a15a2b5-c5a0-451d-b374-bb6d73bc7d51,0,1,08bae66f-fb39-478b-9369-fe7ceb73931a,08bae66f-fb39-478b-9369-fe7ceb73931a,0,1,3d7d9ed9-c273-44db-86b6-989d84b056fd,3d7d9ed9-c273-44db-86b6-989d84b056fd,0,1,1e5eea45-0f8a-4962-bb6e-f7a7b901e0a4,1e5eea45-0f8a-4962-bb6e-f7a7b901e0a4,0,1,80cc5484-aa21-4eb4-8272-b089d2b013e9,80cc5484-aa21-4eb4-8272-b089d2b013e9,0,1,5a39f0b3-63bb-44e2-a8ad-bd99fe8162e9,5a39f0b3-63bb-44e2-a8ad-bd99fe8162e9,0,1,35e9d241-f7db-40cb-aab9-484fa8fb1818,35e9d241-f7db-40cb-aab9-484fa8fb1818,0,1,7aacd8a6-8564-4114-82b7-00a922756a91,7aacd8a6-8564-4114-82b7-00a922756a91,0,1,d3d426d5-e95b-4afa-8c71-2f593f1276cf,d3d426d5-e95b-4afa-8c71-2f593f1276cf,0,1,67365c7c-c40e-4d2f-bbca-b314c1868ab7,67365c7c-c40e-4d2f-bbca-b314c1868ab7,0,1,93566e25-e199-4300-a692-cf5886139963,93566e25-e199-4300-a692-cf5886139963,0,1,210f85b1-393b-4b5c-b11e-cfd18888204a,210f85b1-393b-4b5c-b11e-cfd18888204a,0,1,17190e81-4d85-4351-97cf-508326aef5de,17190e81-4d85-4351-97cf-508326aef5de,0,1,7c0eda05-7eb2-4f42-b229-3e5a4f2a5131,7c0eda05-7eb2-4f42-b229-3e5a4f2a5131,0,1,f7e6ef78-6e28-4108-b2b8-9797f0a4f5e9,f7e6ef78-6e28-4108-b2b8-9797f0a4f5e9,0,1,2ef3a2b4-e274-45a3-acbf-618498dc5462,2ef3a2b4-e274-45a3-acbf-618498dc5462,0,1,6caf8c52-a859-41fe-b9b3-6d91ec018e0b,6caf8c52-a859-41fe-b9b3-6d91ec018e0b,0,1,1b03c1a9-c510-46e4-80b0-0c157bfa1adf,1b03c1a9-c510-46e4-80b0-0c157bfa1adf,0,1,fb7a5957-63ee-411a-b646-a2fc8c52f446,fb7a5957-63ee-411a-b646-a2fc8c52f446,0,1,b6d02a0a-2836-4b9a-b26a-2ebc19542bcb,b6d02a0a-2836-4b9a-b26a-2ebc19542bcb,0,1,3b34aff0-8d90-4616-a9a4-ea55afcd01a7,3b34aff0-8d90-4616-a9a4-ea55afcd01a7,0,1,1c4a606d-835e-45d9-a176-b7d7031c4c85,1c4a606d-835e-45d9-a176-b7d7031c4c85,0,1,06e31fb0-df76-433f-a5bb-c1186aca5c3e,06e31fb0-df76-433f-a5bb-c1186aca5c3e,0,1,1aa54e85-ecac-4c4f-9b08-5e4ee271ceb5,1aa54e85-ecac-4c4f-9b08-5e4ee271ceb5,0,1,b7d1aa26-1af7-4909-aba4-1b67debae031,b7d1aa26-1af7-4909-aba4-1b67debae031,0,1,da3d8fa8-50b8-4847-bd9f-765a0f1e628b,da3d8fa8-50b8-4847-bd9f-765a0f1e628b,0,1,efb0c9bd-f509-4bdd-8793-f5aa9e0a615b,efb0c9bd-f509-4bdd-8793-f5aa9e0a615b,0,1,66c8b395-0252-4093-8cfc-cf5791f6f45b,66c8b395-0252-4093-8cfc-cf5791f6f45b,0,1,0a3a0f21-9433-4c45-84e0-7309c43c21e7,0a3a0f21-9433-4c45-84e0-7309c43c21e7,0,1,cb3a5c5b-7bdc-4e12-96f1-11b1213b6853,cb3a5c5b-7bdc-4e12-96f1-11b1213b6853,0,1,e6fe7103-4dfa-4302-a58e-ccd7fac19c9d,e6fe7103-4dfa-4302-a58e-ccd7fac19c9d,0,1,bb3a9973-67ce-479e-8668-c2f3bb20301e,bb3a9973-67ce-479e-8668-c2f3bb20301e,0,1,e5250dfe-dda2-4547-9b9e-2470ea1be1ab,e5250dfe-dda2-4547-9b9e-2470ea1be1ab,0,1,2c3fccc6-c4c0-49ec-bfc2-05ce05f27ea9,2c3fccc6-c4c0-49ec-bfc2-05ce05f27ea9,0,1,37169451-1464-4f24-8ca6-802963ffb636,37169451-1464-4f24-8ca6-802963ffb636,0,1,c3a958b1-590f-4418-a74f-5982b478cf52,c3a958b1-590f-4418-a74f-5982b478cf52,0,1,ef0e618d-0942-460a-ac65-9aca2fed976e,ef0e618d-0942-460a-ac65-9aca2fed976e,0,1,fd1ed7ec-d848-41cd-8ce3-2e5a682abcf0,fd1ed7ec-d848-41cd-8ce3-2e5a682abcf0,0,1,2ac8bd69-9fbf-4f15-b58d-397d9e903532,2ac8bd69-9fbf-4f15-b58d-397d9e903532,0,1,2ff35814-7eaa-4ae5-bbac-f46bebb36c9d,2ff35814-7eaa-4ae5-bbac-f46bebb36c9d,0,1,5b460b92-2c74-4f59-88b2-18d9aac42c04,5b460b92-2c74-4f59-88b2-18d9aac42c04,0,1,db05d35b-5f53-4c27-ba80-b477b9a98299,db05d35b-5f53-4c27-ba80-b477b9a98299,0,1,fa872ae1-b699-46fe-9d6a-e42e1388752b,fa872ae1-b699-46fe-9d6a-e42e1388752b,0,1,1acf34e6-c428-4130-82f0-5160dfcc0858,1acf34e6-c428-4130-82f0-5160dfcc0858,0,1,57046262-b9ce-4670-9cf5-6db9e58dd0d5,57046262-b9ce-4670-9cf5-6db9e58dd0d5,0,1,a9824176-36d5-4be5-9984-f4312ff48515,a9824176-36d5-4be5-9984-f4312ff48515,0,1,8e980ca0-1627-45e8-bd27-5dd1ac199459,8e980ca0-1627-45e8-bd27-5dd1ac199459,0,1,8b653beb-af9f-4f39-b691-ae14f80b7cd6,8b653beb-af9f-4f39-b691-ae14f80b7cd6,0,1,77559c11-713f-454d-aff4-56649e1350e9,77559c11-713f-454d-aff4-56649e1350e9,0,1,0c965703-c1d0-48b7-80f9-b8d869ff98f5,0c965703-c1d0-48b7-80f9-b8d869ff98f5,0,1,51f8d5ff-aec5-4c0a-ad02-df8c6cb1b4ad,51f8d5ff-aec5-4c0a-ad02-df8c6cb1b4ad,0,1,7ba42162-557b-4e34-8aca-0cdee8cb2452,7ba42162-557b-4e34-8aca-0cdee8cb2452,0,1,eee99b8e-29b6-4b7a-81f1-3d91d740c0d7,eee99b8e-29b6-4b7a-81f1-3d91d740c0d7,0,1,ad4f2d1f-1e6f-4f6a-8061-202c0e42a8e4,ad4f2d1f-1e6f-4f6a-8061-202c0e42a8e4,0,1,dd577924-c6cb-4aa9-9db5-366d8958d00f,dd577924-c6cb-4aa9-9db5-366d8958d00f,0,1,8ed8f72e-404a-4be4-a44d-ddebbad5f411,8ed8f72e-404a-4be4-a44d-ddebbad5f411,0,1,e919bc4c-86e6-44f6-be27-5a729b63d042,e919bc4c-86e6-44f6-be27-5a729b63d042,0,1,ec580e4f-1518-4923-a10e-bc1da8688b37,ec580e4f-1518-4923-a10e-bc1da8688b37,0,1,91c3902a-314f-4d40-8bcc-8dd131fed2f4,91c3902a-314f-4d40-8bcc-8dd131fed2f4,0,1,ae2b21c5-9349-49e8-9627-26f05c21f43a,ae2b21c5-9349-49e8-9627-26f05c21f43a,0,1,7e4c0b74-e807-4aa9-ad69-3c85b147bb61,7e4c0b74-e807-4aa9-ad69-3c85b147bb61,0,1,917a19d7-73db-4247-b892-397598d67879,917a19d7-73db-4247-b892-397598d67879,0,1,1f866dc3-a4bc-4e8d-96a3-a26ee073926f,1f866dc3-a4bc-4e8d-96a3-a26ee073926f,0,1,d8066600-c669-449d-a187-fdd3af8f7afa,d8066600-c669-449d-a187-fdd3af8f7afa,0,1,dadf86a6-c118-4827-b1b9-6cfee731242f,dadf86a6-c118-4827-b1b9-6cfee731242f,0,1,45bf7b20-f048-491a-a989-e50bea13d028,45bf7b20-f048-491a-a989-e50bea13d028,0,1,9ad3b432-5b49-44ee-9d8d-83c36458d927,9ad3b432-5b49-44ee-9d8d-83c36458d927,0,1,a9967bff-53b9-4295-a253-3647d956d3cb,a9967bff-53b9-4295-a253-3647d956d3cb,0,1,75f0fd5b-c594-4f3a-8ff2-3fdadf1dc96d,75f0fd5b-c594-4f3a-8ff2-3fdadf1dc96d,0,1,b8a31397-8974-44ec-92b0-7cbdc481cf7e,b8a31397-8974-44ec-92b0-7cbdc481cf7e,0,1,b29c7c0d-03eb-422b-a899-ba9a7eba99f6,b29c7c0d-03eb-422b-a899-ba9a7eba99f6,0,1,fb16c4d5-854c-4525-92be-b21fa2df5b0d,fb16c4d5-854c-4525-92be-b21fa2df5b0d,0,1,5771de21-2086-432b-ad91-de14a39bd5bc,5771de21-2086-432b-ad91-de14a39bd5bc,0,1,b15bcf3b-0228-4d02-8f20-cd6ba82f7585,b15bcf3b-0228-4d02-8f20-cd6ba82f7585,0,1,ed96fbfa-bda7-405c-9073-d0b6feffedad,ed96fbfa-bda7-405c-9073-d0b6feffedad,0,1,50c724cb-dde1-4313-9492-b1750bd0afc1,50c724cb-dde1-4313-9492-b1750bd0afc1,0,1,12901981-6106-4471-ab3a-e127c2bb4ebd,12901981-6106-4471-ab3a-e127c2bb4ebd,0,1,17ad1497-fa0e-469f-b2e2-b94a6f848ec5,17ad1497-fa0e-469f-b2e2-b94a6f848ec5,0,1,d5ea5dea-233d-4106-b9ba-f030d4f762ef,d5ea5dea-233d-4106-b9ba-f030d4f762ef,0,1,903af05e-5ac5-46aa-843b-d74f9e417c1d,903af05e-5ac5-46aa-843b-d74f9e417c1d,0,1,4dc4862e-74c3-469d-863b-09fdbe0d6be0,4dc4862e-74c3-469d-863b-09fdbe0d6be0,0,1,a344290a-c9be-47a7-95ad-ced1b52a0995,a344290a-c9be-47a7-95ad-ced1b52a0995,0,1,a4e56049-4de9-40a3-8197-a5c84a11f516,a4e56049-4de9-40a3-8197-a5c84a11f516,0,1,339c9220-fd5b-45d3-b300-cdcc8788f87e,339c9220-fd5b-45d3-b300-cdcc8788f87e,0,1,02d7d401-3c0c-4fd0-b096-1f73b6ec14c3,02d7d401-3c0c-4fd0-b096-1f73b6ec14c3,0,1,9042a6de-5048-432d-a448-7e21f2d1d24a,9042a6de-5048-432d-a448-7e21f2d1d24a,0,1,350d46bf-114e-48e7-90c6-6708d949f20d,350d46bf-114e-48e7-90c6-6708d949f20d,0,1,d047caa8-7bcf-41ac-a18e-97877d6e0a2a,d047caa8-7bcf-41ac-a18e-97877d6e0a2a,0,1,aac20ff3-5873-432e-b763-14411e623d41,aac20ff3-5873-432e-b763-14411e623d41,0,1,fbc4df3e-c235-4197-8c1f-a5e39ac63a8c,fbc4df3e-c235-4197-8c1f-a5e39ac63a8c,0,1,6df44466-8750-481a-9baf-c924f0d45353,6df44466-8750-481a-9baf-c924f0d45353,0,1,110121eb-a0eb-4662-8911-3dcc3d341a73,110121eb-a0eb-4662-8911-3dcc3d341a73,0,1,f8980c18-6b9c-4e45-919a-22e976d2a846,f8980c18-6b9c-4e45-919a-22e976d2a846,0,1,c946efb7-c67e-49c1-bf56-d3c2d7220acd,c946efb7-c67e-49c1-bf56-d3c2d7220acd,0,1,7ed6bd83-b61d-4db4-8549-acacbdda6ca2,7ed6bd83-b61d-4db4-8549-acacbdda6ca2,0,1,6b7c9f74-f2b6-463e-acb9-9f82901986cf,6b7c9f74-f2b6-463e-acb9-9f82901986cf,0,1,fc4c1d64-132b-4687-a37d-05000fdb4ba5,fc4c1d64-132b-4687-a37d-05000fdb4ba5,0,1,528777cd-090b-4b70-82f5-56def98c5893,528777cd-090b-4b70-82f5-56def98c5893,0,1,49dbe467-8832-4ede-9a05-494248619aeb,49dbe467-8832-4ede-9a05-494248619aeb,0,1,460ed9ca-10c2-491c-a641-b92ffc2a8e7c,460ed9ca-10c2-491c-a641-b92ffc2a8e7c,0,1,bd5fadd3-9264-4c3b-9bd5-51e91847a6fb,bd5fadd3-9264-4c3b-9bd5-51e91847a6fb,0,1,09c73108-8528-4970-9b7f-fff9eda7816a,09c73108-8528-4970-9b7f-fff9eda7816a,0,1,40aa936e-cb1c-4ae9-85f1-6d930a5815cc,40aa936e-cb1c-4ae9-85f1-6d930a5815cc,0,1,f568245a-d158-45dc-af92-2d411f12db7b,f568245a-d158-45dc-af92-2d411f12db7b,0,1,0f17cdac-aa17-45e6-b3d0-220b13345390,0f17cdac-aa17-45e6-b3d0-220b13345390,0,1,c675db75-d0c3-4026-b97c-6b23ecbb336a,c675db75-d0c3-4026-b97c-6b23ecbb336a,0,1,469f67fa-98b0-44b0-abd4-cae136c02834,469f67fa-98b0-44b0-abd4-cae136c02834,0,1,16a18458-999c-420e-80df-8fc10855746c,16a18458-999c-420e-80df-8fc10855746c,0,1,b794f222-0fde-439f-97a3-0da74075b415,b794f222-0fde-439f-97a3-0da74075b415,0,1,3a716aad-9b2c-48a7-b802-80732066391b,3a716aad-9b2c-48a7-b802-80732066391b,0,1,480d959f-aac8-4241-875f-78e1c1f32621,480d959f-aac8-4241-875f-78e1c1f32621,0,1,496e5de8-d75c-4536-9993-75374f070b40,496e5de8-d75c-4536-9993-75374f070b40,0,1,b4e610ba-c9c8-4b25-903b-e567dcbc2556,b4e610ba-c9c8-4b25-903b-e567dcbc2556,0,1,48febdbd-a085-4113-8511-ed7ff6be7d3c,48febdbd-a085-4113-8511-ed7ff6be7d3c,0,1,49413232-c0c3-4983-9d10-291a0399281b,49413232-c0c3-4983-9d10-291a0399281b,0,1,032bb782-96a7-4c1b-8b8f-eb4e18b555b7,032bb782-96a7-4c1b-8b8f-eb4e18b555b7,0,1,b9b076bb-38ab-4a94-8226-41a4d4d7432c,b9b076bb-38ab-4a94-8226-41a4d4d7432c,0,1,e12da8db-4037-473e-ba2b-d0ceb4534dcb,e12da8db-4037-473e-ba2b-d0ceb4534dcb,0,1,789514e5-8ea3-4a5e-88c5-ed89c4135866,789514e5-8ea3-4a5e-88c5-ed89c4135866,0,1,a16768ff-6137-43d8-8784-4805ed83632a,a16768ff-6137-43d8-8784-4805ed83632a,0,1,61971286-9f94-4a27-aa34-e10848adb70a,61971286-9f94-4a27-aa34-e10848adb70a,0,1,1e75d143-3452-496e-a137-6d7f4c4ed019,1e75d143-3452-496e-a137-6d7f4c4ed019,0,1,e0619d14-c658-4eb5-841a-3a029de28be4,e0619d14-c658-4eb5-841a-3a029de28be4,0,1,99a3b660-7875-47f7-9c6c-c552e5673deb,99a3b660-7875-47f7-9c6c-c552e5673deb,0,1,2bdcf3a5-c8e1-492c-afee-f9db68e2fbb6,2bdcf3a5-c8e1-492c-afee-f9db68e2fbb6,0,1,41cbf934-ea54-41df-abf0-09f319d2e67a,41cbf934-ea54-41df-abf0-09f319d2e67a,0,1,47246084-a5f8-4d0f-b4e2-204c1b97483a,47246084-a5f8-4d0f-b4e2-204c1b97483a,0,1,e58233ec-6cfc-4a8b-9929-689fa69cdb07,e58233ec-6cfc-4a8b-9929-689fa69cdb07,0,1,3291a891-a47c-43ca-b088-aecd3867d38c,3291a891-a47c-43ca-b088-aecd3867d38c,0,1,56cde2b4-00f2-49ba-b407-16e241c17fd2,56cde2b4-00f2-49ba-b407-16e241c17fd2,0,1,bd84fb2b-4c52-4e2f-a8c5-f289b8336145,bd84fb2b-4c52-4e2f-a8c5-f289b8336145,0,1,219ed110-f2a0-41c1-ac5a-02301b248c54,219ed110-f2a0-41c1-ac5a-02301b248c54,0,1,1c722dfd-2b07-4985-9188-17353de24771,1c722dfd-2b07-4985-9188-17353de24771,0,1,1a630496-2cdd-4c89-a1aa-ed20545ad133,1a630496-2cdd-4c89-a1aa-ed20545ad133,0,1,b0dd02ee-ea6a-43f2-baa2-abac0a1ab4bb,b0dd02ee-ea6a-43f2-baa2-abac0a1ab4bb,0,1,b19cea0e-e57a-4969-8daf-f48d3d16705f,b19cea0e-e57a-4969-8daf-f48d3d16705f,0,1,d4059340-3361-4baa-ae48-ecbfb9800a2e,d4059340-3361-4baa-ae48-ecbfb9800a2e,0,1,f78f6c43-dd90-4117-acf7-ed5b951cb964,f78f6c43-dd90-4117-acf7-ed5b951cb964,0,1,8eebd519-4989-4784-82b8-39d77eebfb17,8eebd519-4989-4784-82b8-39d77eebfb17,0,1,0a2cb6e3-d9fa-4881-b136-7b6db9efca07,0a2cb6e3-d9fa-4881-b136-7b6db9efca07,0,1,c1561ed9-2fbf-4c12-a484-07f8adbe8fa3,c1561ed9-2fbf-4c12-a484-07f8adbe8fa3,0,1,4527877b-5723-4aa5-8705-98174ac9c337,4527877b-5723-4aa5-8705-98174ac9c337,0,1,d6b21e7b-df57-4280-8c95-c269b5316018,d6b21e7b-df57-4280-8c95-c269b5316018,0,1,808c468b-6322-428d-ac6a-ccf2228b05b6,808c468b-6322-428d-ac6a-ccf2228b05b6,0,1,13664bb2-738f-4d18-b382-a7bcf8105a5a,13664bb2-738f-4d18-b382-a7bcf8105a5a,0,1,f3f56abe-9248-4555-bf99-29560eb4f9ee,f3f56abe-9248-4555-bf99-29560eb4f9ee,0,1,0dbd5d55-a85f-4c7e-ac31-7ba4ab7cc371,0dbd5d55-a85f-4c7e-ac31-7ba4ab7cc371,0,1,dd9d09ef-3b4b-4bb5-9408-9c4080049bb3,dd9d09ef-3b4b-4bb5-9408-9c4080049bb3,0,1,3eb43a06-b32d-4904-8489-6264d0207623,3eb43a06-b32d-4904-8489-6264d0207623,0,1,a18098cf-5a61-46b5-bd55-cc61d15aa6bc,a18098cf-5a61-46b5-bd55-cc61d15aa6bc,0,1,18615fe1-cfee-4888-9c09-88d1c5db39eb,18615fe1-cfee-4888-9c09-88d1c5db39eb,0,1,63e363fa-8b0c-4d48-ab1b-9c953c5ed4c0,63e363fa-8b0c-4d48-ab1b-9c953c5ed4c0,0,1,087c83c0-75e7-476b-b7c6-5be55498a190,087c83c0-75e7-476b-b7c6-5be55498a190,0,1,ec5e5413-9e77-4929-83b8-6fee70688b28,ec5e5413-9e77-4929-83b8-6fee70688b28,0,1,59cd8e3f-ecf3-4e1d-bd98-41551d5d6f68,59cd8e3f-ecf3-4e1d-bd98-41551d5d6f68,0,1,8390c864-2b84-4c45-8583-cb4a4ab49168,8390c864-2b84-4c45-8583-cb4a4ab49168,0,1,1b2fefca-fef5-4319-90cc-325444cb63a6,1b2fefca-fef5-4319-90cc-325444cb63a6,0,1,34a128be-8fbb-4dd8-ac23-9f35041feb63,34a128be-8fbb-4dd8-ac23-9f35041feb63,0,1,baa31006-e0d6-496e-a60e-27b3dfd19397,baa31006-e0d6-496e-a60e-27b3dfd19397,0,1,3007d8ff-3942-45ed-bac5-8a6c40ca060c,3007d8ff-3942-45ed-bac5-8a6c40ca060c,0,1,8bfe1474-fd12-4744-a9ab-3383bfe766b3,8bfe1474-fd12-4744-a9ab-3383bfe766b3,0,1,3af97375-f776-4129-9521-b8d65d795db6,3af97375-f776-4129-9521-b8d65d795db6,0,1,0e98801b-a45b-44cb-a341-7e43d723f6ed,0e98801b-a45b-44cb-a341-7e43d723f6ed,0,1,5b71cd3b-d5b8-4632-9678-0ab1e1d2ea91,5b71cd3b-d5b8-4632-9678-0ab1e1d2ea91,0,1,103ac72d-c386-40ea-89d4-35798d064f1a,103ac72d-c386-40ea-89d4-35798d064f1a,0,1,645ceb40-1e9f-4a67-aa7f-b9002fa066b3,645ceb40-1e9f-4a67-aa7f-b9002fa066b3,0,1,d1fe15e9-8e5c-4819-85cd-24ab31409437,d1fe15e9-8e5c-4819-85cd-24ab31409437,0,1,c8c5bfe9-ead5-4e79-9fd5-60ad275faa1e,c8c5bfe9-ead5-4e79-9fd5-60ad275faa1e,0,1,8f9826b6-890e-4ba3-a1f2-bc9ebb3238dd,8f9826b6-890e-4ba3-a1f2-bc9ebb3238dd,0,1,74f68bda-17b1-4b3c-aa64-b1014300f9b5,74f68bda-17b1-4b3c-aa64-b1014300f9b5,0,1,90a195b0-7f64-4ccb-986e-8c8c2cf12ccd,90a195b0-7f64-4ccb-986e-8c8c2cf12ccd,0,1,9f9d1f8c-7ff9-420f-a426-48f33493d9f2,9f9d1f8c-7ff9-420f-a426-48f33493d9f2,0,1,ab7bc0bc-b4b8-4a4a-aecc-1cbe14fd4975,ab7bc0bc-b4b8-4a4a-aecc-1cbe14fd4975,0,1,9f8d9594-674f-49ef-9fb8-bb64d5c40a37,9f8d9594-674f-49ef-9fb8-bb64d5c40a37,0,1,47ee7d38-9fa9-458d-abee-e11270f79494,47ee7d38-9fa9-458d-abee-e11270f79494,0,1,bb6b83ff-81f4-4c39-ad8e-8cda9ccd9cb9,bb6b83ff-81f4-4c39-ad8e-8cda9ccd9cb9,0,1,076daecf-8fcb-496b-9f13-c4faa3a8a722,076daecf-8fcb-496b-9f13-c4faa3a8a722,0,1,f1a8357b-7083-42b3-ab5d-36223a3dd2a4,f1a8357b-7083-42b3-ab5d-36223a3dd2a4,0,1,296d7725-bdd3-4210-9db9-31de5711ea9b,296d7725-bdd3-4210-9db9-31de5711ea9b,0,1,6ecc5bc2-20b3-46f3-8019-ae1e1f3de319,6ecc5bc2-20b3-46f3-8019-ae1e1f3de319,0,1,1d05f89a-23dd-4d30-8786-abe8a9a39a40,1d05f89a-23dd-4d30-8786-abe8a9a39a40,0,1,245c2c6c-7b7f-4381-9304-1d7287a215fa,245c2c6c-7b7f-4381-9304-1d7287a215fa,0,1,fd17bbe4-34d9-4832-8eea-8eeb82194e4c,fd17bbe4-34d9-4832-8eea-8eeb82194e4c,0,1,d4c72d7f-7e1f-473c-9a2b-fa675fc78731,d4c72d7f-7e1f-473c-9a2b-fa675fc78731,0,1,8bb5be12-98df-4a38-bffe-432fb13d8101,8bb5be12-98df-4a38-bffe-432fb13d8101,0,1,94209023-ce88-401c-9aff-526fb7e43709,94209023-ce88-401c-9aff-526fb7e43709,0,1,22b99094-b52a-4244-ae91-53848d82560b,22b99094-b52a-4244-ae91-53848d82560b,0,1,22c9e2fa-c1f0-41ec-b6f2-9d7357dd3479,22c9e2fa-c1f0-41ec-b6f2-9d7357dd3479,0,1,b0002134-d5c9-4508-9f0e-97f92461b590,b0002134-d5c9-4508-9f0e-97f92461b590,0,1,1506ec71-cb38-4831-a29d-dac2c4deddda,1506ec71-cb38-4831-a29d-dac2c4deddda,0,1,e05fd82b-b77b-4b7f-b300-43653017f341,e05fd82b-b77b-4b7f-b300-43653017f341,0,1,d3b5e5ee-2317-43b4-b669-3af2ce635cf3,d3b5e5ee-2317-43b4-b669-3af2ce635cf3,0,1,f15a0526-c207-42fe-aed9-438ae0c4a4b8,f15a0526-c207-42fe-aed9-438ae0c4a4b8,0,1,9d444a41-7190-48fb-9a4a-08f8e7bc32a3,9d444a41-7190-48fb-9a4a-08f8e7bc32a3,0,1,8583cab0-0620-4346-96e0-bcac40981b8a,8583cab0-0620-4346-96e0-bcac40981b8a,0,1,e1dfba26-c682-42a2-8e15-fe6f535c9ce1,e1dfba26-c682-42a2-8e15-fe6f535c9ce1,0,1,095990b1-187b-400c-941a-275f272239ca,095990b1-187b-400c-941a-275f272239ca,0,1,ba108470-350d-40c3-bb44-9852c2aa8c97,ba108470-350d-40c3-bb44-9852c2aa8c97,0,1,a37c33fa-64b0-4a1b-846a-0a236bad44f8,a37c33fa-64b0-4a1b-846a-0a236bad44f8,0,1,d8481ce1-7f64-47b0-8fc0-6642ae93aca1,d8481ce1-7f64-47b0-8fc0-6642ae93aca1,0,1,a50f4324-da44-449b-b500-74228b2aa7e0,a50f4324-da44-449b-b500-74228b2aa7e0,0,1,04236716-9c36-4a1d-b4fb-4b8c65644ab4,04236716-9c36-4a1d-b4fb-4b8c65644ab4,0,1,97276702-6686-4ac4-8360-d85369a08b20,97276702-6686-4ac4-8360-d85369a08b20,0,1,e5450ee7-e891-4f58-9a01-d2d81d5ddd6d,e5450ee7-e891-4f58-9a01-d2d81d5ddd6d,0,1,068883fe-d7ae-40e7-ad82-864867916daa,068883fe-d7ae-40e7-ad82-864867916daa,0,1,c1b02568-2095-4f83-8543-2402f67dbe3d,c1b02568-2095-4f83-8543-2402f67dbe3d,0,1,8b749b7a-5e68-4523-adc2-8b3c5ce9701c,8b749b7a-5e68-4523-adc2-8b3c5ce9701c,0,1,bf3c7edc-0791-459e-a7ac-b7e8d7ed97fe,bf3c7edc-0791-459e-a7ac-b7e8d7ed97fe,0,1,7dc6d13e-4edf-4e6a-9ee9-4b32ad889ecf,7dc6d13e-4edf-4e6a-9ee9-4b32ad889ecf,0,1,aecbd726-6952-49e6-b544-4c5cc764c24c,aecbd726-6952-49e6-b544-4c5cc764c24c,0,1,d335cfbf-bc78-4274-a178-10f60372474a,d335cfbf-bc78-4274-a178-10f60372474a,0,1,0f4411b3-addf-4fcf-8da8-c5140dea356c,0f4411b3-addf-4fcf-8da8-c5140dea356c,0,1,c501f9ab-d01b-4137-8cd0-e66103117c84,c501f9ab-d01b-4137-8cd0-e66103117c84,0,1,8d5d4e0f-b7b5-4cdc-aedc-571517fa101f,8d5d4e0f-b7b5-4cdc-aedc-571517fa101f,0,1,66e65355-1424-4c74-801c-faf5357257aa,66e65355-1424-4c74-801c-faf5357257aa,0,1,0a93187b-7ae4-4985-8089-3099dfec2b48,0a93187b-7ae4-4985-8089-3099dfec2b48,0,1,044458f3-ed9b-4afb-ae73-8f9162c032bf,044458f3-ed9b-4afb-ae73-8f9162c032bf,0,1,578f618e-5f4a-4e86-959d-39b59e973936,578f618e-5f4a-4e86-959d-39b59e973936,0,1,f74ede2e-2d28-4224-ba44-773eda7760a4,f74ede2e-2d28-4224-ba44-773eda7760a4,0,1,217df06a-1bdf-4394-b617-ed756ff17bc6,217df06a-1bdf-4394-b617-ed756ff17bc6,0,1,a1572e97-a487-497a-9062-49315e237e0f,a1572e97-a487-497a-9062-49315e237e0f,0,1,969cdcb8-0f2a-427f-93a0-e7ae38f465e8,969cdcb8-0f2a-427f-93a0-e7ae38f465e8,0,1,3c5d87a0-cfce-464a-b946-64c5a589a376,3c5d87a0-cfce-464a-b946-64c5a589a376,0,1,2d22c67d-4795-4a6b-bc81-a3ed1eb28367,2d22c67d-4795-4a6b-bc81-a3ed1eb28367,0,1,763de8d1-7f53-41b6-8d97-7da724e9f763,763de8d1-7f53-41b6-8d97-7da724e9f763,0,1,75592ed4-2aab-4dfc-ae7b-d93e2a98370f,75592ed4-2aab-4dfc-ae7b-d93e2a98370f,0,1,4ad59c75-cca4-4968-82e6-babd72d8b318,4ad59c75-cca4-4968-82e6-babd72d8b318,0,1,c248de15-63a2-48ec-8695-7a5213d4fc9b,c248de15-63a2-48ec-8695-7a5213d4fc9b,0,1,272ff0f9-7266-4c22-be12-fe62682b56a5,272ff0f9-7266-4c22-be12-fe62682b56a5,0,1,9f141dd5-d866-4c25-b58a-a7766a08b4e7,9f141dd5-d866-4c25-b58a-a7766a08b4e7,0,1,0570d846-889d-4cfc-98fb-a1ad0181597f,0570d846-889d-4cfc-98fb-a1ad0181597f,0,1,19e17c58-953f-4917-8b6a-c88808fcca36,19e17c58-953f-4917-8b6a-c88808fcca36,0,1,4804316d-3765-4a83-8438-10e8e82656db,4804316d-3765-4a83-8438-10e8e82656db,0,1,59458556-e343-4215-8e6c-69f924ec4183,59458556-e343-4215-8e6c-69f924ec4183,0,1,dd553dca-7eba-41bf-8939-2c61e170ff65,dd553dca-7eba-41bf-8939-2c61e170ff65,0,1,b4ecf3dc-a2aa-406e-a593-1700ea8746bc,b4ecf3dc-a2aa-406e-a593-1700ea8746bc,0,1,933d7ce7-ea82-4b26-8d1b-dc92cb5ac92d,933d7ce7-ea82-4b26-8d1b-dc92cb5ac92d,0,1,8099e978-28cc-4ade-ac5a-3785f3a45f70,8099e978-28cc-4ade-ac5a-3785f3a45f70,0,1,11eff613-8077-41fa-8cb8-5e8dc27d0e4f,11eff613-8077-41fa-8cb8-5e8dc27d0e4f,0,1,fe023ca5-f11a-4b98-99c1-363508e4ea4a,fe023ca5-f11a-4b98-99c1-363508e4ea4a,0,1,6f8d515e-13d9-45f8-9793-3757f5b85f81,6f8d515e-13d9-45f8-9793-3757f5b85f81,0,1,25ec541c-c437-4318-b2a8-5146df6ae080,25ec541c-c437-4318-b2a8-5146df6ae080,0,1,148754ed-3063-40a7-a3c3-8ad105552370,148754ed-3063-40a7-a3c3-8ad105552370,0,1,ab3f0862-c355-4fd7-a2a7-4eb8278de510,ab3f0862-c355-4fd7-a2a7-4eb8278de510,0,1,85bbfe20-a6a4-49ca-8f20-342f4cbe8258,85bbfe20-a6a4-49ca-8f20-342f4cbe8258,0,1,c12c3f3b-3a96-4e70-b131-8d7bd765095f,c12c3f3b-3a96-4e70-b131-8d7bd765095f,0,1,70ee4b32-80d1-4b79-a322-0433f1b8c7f1,70ee4b32-80d1-4b79-a322-0433f1b8c7f1,0,1,c563588c-346e-499e-ae33-9ff3cb62e658,c563588c-346e-499e-ae33-9ff3cb62e658,0,1,40dbc001-97b6-4188-8de9-3adac670bac4,40dbc001-97b6-4188-8de9-3adac670bac4,0,1,a4ed8b24-bd23-45a7-9f34-61b25b91d0c6,a4ed8b24-bd23-45a7-9f34-61b25b91d0c6,0,1,65efaa10-3239-4f0f-a08e-88c89d9d8d5a,65efaa10-3239-4f0f-a08e-88c89d9d8d5a,0,1,93aa5247-6823-4f70-9d47-e5a0f409828a,93aa5247-6823-4f70-9d47-e5a0f409828a,0,1,030c6a22-a3d5-4cf2-9f7b-dc4fe3732f83,030c6a22-a3d5-4cf2-9f7b-dc4fe3732f83,0,1,b19f1223-5ebe-4446-bacc-bc7d53486f2e,b19f1223-5ebe-4446-bacc-bc7d53486f2e,0,1,6ea7e8e9-0faa-43fd-b9c8-1a7b8f899d6d,6ea7e8e9-0faa-43fd-b9c8-1a7b8f899d6d,0,1,7be1decf-feb1-422b-a3f2-f60d08fdb0e6,7be1decf-feb1-422b-a3f2-f60d08fdb0e6,0,1,bf3167d6-3047-482a-b280-184f446ae7a3,bf3167d6-3047-482a-b280-184f446ae7a3,0,1,50c47c0a-a199-4020-9df4-91b17c159454,50c47c0a-a199-4020-9df4-91b17c159454,0,1,c1d449af-8a6e-4cb0-b2c9-50ea5405c44c,c1d449af-8a6e-4cb0-b2c9-50ea5405c44c,0,1,faecdc33-fed8-4b44-96f4-4215c26959b6,faecdc33-fed8-4b44-96f4-4215c26959b6,0,1,09c29992-47a8-4fca-bd95-e7dbc53e8c4c,09c29992-47a8-4fca-bd95-e7dbc53e8c4c,0,1,f07cf7bd-6f3f-426a-8b71-ba1dcb827654,f07cf7bd-6f3f-426a-8b71-ba1dcb827654,0,1,9df3792e-a4ee-4a2c-9296-c1384925521e,9df3792e-a4ee-4a2c-9296-c1384925521e,0,1,03d423db-f98a-468f-9040-5b76454e5a98,03d423db-f98a-468f-9040-5b76454e5a98,0,1,08f394f9-d254-4fe5-8651-a69c96de7a62,08f394f9-d254-4fe5-8651-a69c96de7a62,0,1,e90ec54b-8b86-43df-8c3c-18c6676bf3f1,e90ec54b-8b86-43df-8c3c-18c6676bf3f1,0,1,6aff6b2f-660b-4d75-9064-fed7a6b0feac,6aff6b2f-660b-4d75-9064-fed7a6b0feac,0,1,53502127-9f47-4e2e-b3ed-eb3c3aae1c50,53502127-9f47-4e2e-b3ed-eb3c3aae1c50,0,1,2fcdd0b5-b738-4e19-8bbf-13a72d7014ec,2fcdd0b5-b738-4e19-8bbf-13a72d7014ec,0,1,59dc7e8d-6f5c-4e1b-816e-5fc15c0e96e0,59dc7e8d-6f5c-4e1b-816e-5fc15c0e96e0,0,1,e60a9221-7676-456f-8a01-b317b03a278b,e60a9221-7676-456f-8a01-b317b03a278b,0,1,4e81ec90-f668-49ca-9193-22337bafb01b,4e81ec90-f668-49ca-9193-22337bafb01b,0,1,104c7c31-5bbd-4242-b29a-2c0d8b69a1b9,104c7c31-5bbd-4242-b29a-2c0d8b69a1b9,0,1,cd60adec-52d6-4fa8-85ca-26551196432c,cd60adec-52d6-4fa8-85ca-26551196432c,0,1,4dfbabd7-d5e5-4b2a-b8d1-752e416629a0,4dfbabd7-d5e5-4b2a-b8d1-752e416629a0,0,1,b71ddbdb-08bb-46be-a79d-319c4a557e76,b71ddbdb-08bb-46be-a79d-319c4a557e76,0,1,d3dfa867-3d52-4872-a69e-f27636abe1bd,d3dfa867-3d52-4872-a69e-f27636abe1bd,0,1,6952d1aa-7132-4e40-8542-f64a4dc1e029,6952d1aa-7132-4e40-8542-f64a4dc1e029,0,1,51a1bc4c-9139-42a4-92c3-f45c837cbdb9,51a1bc4c-9139-42a4-92c3-f45c837cbdb9,0,1,1621811b-dfd3-4c58-8e15-ced16690147a,1621811b-dfd3-4c58-8e15-ced16690147a,0,1,3f266e51-0476-4b7f-8d61-6f9f4456049d,3f266e51-0476-4b7f-8d61-6f9f4456049d,0,1,2b9ce591-ff13-4c2d-85c4-632a2609a211,2b9ce591-ff13-4c2d-85c4-632a2609a211,0,1,689ca0ec-61ce-4590-b73b-ac81e8f1d459,689ca0ec-61ce-4590-b73b-ac81e8f1d459,0,1,3ea1895f-66d0-4bbb-a66b-0c9d411a7c55,3ea1895f-66d0-4bbb-a66b-0c9d411a7c55,0,1,55ad36d7-399e-4b82-8d1c-d45bd890abfe,55ad36d7-399e-4b82-8d1c-d45bd890abfe,0,1,0f3b9012-7bf6-4451-b0c3-139d98d9c2c1,0f3b9012-7bf6-4451-b0c3-139d98d9c2c1,0,1,1b39a65f-5425-4bcb-85bd-1425274af8a8,1b39a65f-5425-4bcb-85bd-1425274af8a8,0,1,392a0618-a41a-4713-a561-f3a80b85abd8,392a0618-a41a-4713-a561-f3a80b85abd8,0,1,a453384d-658d-40f1-ac69-578aa3a24e39,a453384d-658d-40f1-ac69-578aa3a24e39,0,1,2215a441-b9b1-4e5c-8df3-e6cee9226c43,2215a441-b9b1-4e5c-8df3-e6cee9226c43,0,1,2a8d4908-ea0d-4837-be3f-bd78f6b61254,2a8d4908-ea0d-4837-be3f-bd78f6b61254,0,1,ec1deb79-7369-4b26-8e91-f51399e8052a,ec1deb79-7369-4b26-8e91-f51399e8052a,0,1,75dde4fb-3a1a-450c-95c2-c1f95a781db9,75dde4fb-3a1a-450c-95c2-c1f95a781db9,0,1,0ae3ac56-160a-417e-9952-719d02e7f089,0ae3ac56-160a-417e-9952-719d02e7f089,0,1,f5b3983d-d22d-44a8-9069-0a60d8b858bf,f5b3983d-d22d-44a8-9069-0a60d8b858bf,0,1,a64b15fa-fc34-43fe-a366-d27c0f1c3df2,a64b15fa-fc34-43fe-a366-d27c0f1c3df2,0,1,8b13e848-8fd3-4326-bd18-5a5b12ed3dc5,8b13e848-8fd3-4326-bd18-5a5b12ed3dc5,0,1,b9a6b053-2b93-4946-9531-040d3131dcc5,b9a6b053-2b93-4946-9531-040d3131dcc5,0,1,9f36d26e-aa71-44d5-ac27-9aaa643555c3,9f36d26e-aa71-44d5-ac27-9aaa643555c3,0,1,87b8b5d7-d3d6-450a-adb1-5c875257ec80,87b8b5d7-d3d6-450a-adb1-5c875257ec80,0,1,e3640efe-e46c-4588-b251-dda23bf0641d,e3640efe-e46c-4588-b251-dda23bf0641d,0,1,bb6e6574-4328-4cf5-a043-a7d8f6c81414,bb6e6574-4328-4cf5-a043-a7d8f6c81414,0,1,b46b5090-5eb1-4950-9031-8b43f611fa9c,b46b5090-5eb1-4950-9031-8b43f611fa9c,0,1,522a4bff-34d3-46b2-8c66-0b30d881a86e,522a4bff-34d3-46b2-8c66-0b30d881a86e,0,1,3d7908b1-bd82-475e-8488-fafcbe3458ee,3d7908b1-bd82-475e-8488-fafcbe3458ee,0,1,1bac040b-83e4-402f-a9bf-d6a7b10c91e0,1bac040b-83e4-402f-a9bf-d6a7b10c91e0,0,1,2ccbc9aa-52d3-4cf3-8e83-77aaef82a38d,2ccbc9aa-52d3-4cf3-8e83-77aaef82a38d,0,1,e9c632b0-7977-4e44-ac56-882617ad7cdc,e9c632b0-7977-4e44-ac56-882617ad7cdc,0,1,e84acba7-7e0f-43e8-a545-6e53d529d5d4,e84acba7-7e0f-43e8-a545-6e53d529d5d4,0,1,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,0,1,0f9c08c2-e7fa-4ea0-a935-f927feb01131,0f9c08c2-e7fa-4ea0-a935-f927feb01131,0,1,6086d53f-f1b2-4126-ab46-64705fe63b87,6086d53f-f1b2-4126-ab46-64705fe63b87,0,1,62a6b1c9-8288-4fa1-a17d-241b85a5e4b0,62a6b1c9-8288-4fa1-a17d-241b85a5e4b0,0,1,6d042890-27b2-4efc-935e-8190bb57c037,6d042890-27b2-4efc-935e-8190bb57c037,0,1,23e79add-7f1c-422a-9df1-8f76ebf805df,23e79add-7f1c-422a-9df1-8f76ebf805df,0,1,9295d88f-0865-440c-a98a-4710c50211be,9295d88f-0865-440c-a98a-4710c50211be,0,1,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,0,1,38ac9a13-665a-4201-b5cc-687fe4a01130,38ac9a13-665a-4201-b5cc-687fe4a01130,0,1,97c59096-b2dc-45d0-a580-b3018a04f9af,97c59096-b2dc-45d0-a580-b3018a04f9af,0,1,5dcd8e28-b058-405a-bac4-defab7d4b789,5dcd8e28-b058-405a-bac4-defab7d4b789,0,1,6fbf63b7-1692-495e-a8ec-bdda182997a3,6fbf63b7-1692-495e-a8ec-bdda182997a3,0,1,077af11c-fd3c-4e87-b169-5f3137464f77,077af11c-fd3c-4e87-b169-5f3137464f77,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,da8f7f30-eb80-44db-a451-348306c90cd8,da8f7f30-eb80-44db-a451-348306c90cd8,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,757ea742-8c14-4e0a-a867-432eee5cfc64,757ea742-8c14-4e0a-a867-432eee5cfc64,0,1,b8c36d5a-7966-4978-9225-67502b9c60a4,b8c36d5a-7966-4978-9225-67502b9c60a4,0,1,37ea0c64-2fec-4c2e-922b-d3a2f01f3e22,37ea0c64-2fec-4c2e-922b-d3a2f01f3e22,0,1,9847676d-f44d-46a0-83e2-4a43a835caf8,9847676d-f44d-46a0-83e2-4a43a835caf8,0,1,43c18cae-21a9-413b-a350-d5cf826980f0,43c18cae-21a9-413b-a350-d5cf826980f0,0,1,16773cdb-b979-42d5-a2a5-d4b79e8737bd,16773cdb-b979-42d5-a2a5-d4b79e8737bd,0,1,c28a190a-f487-4e99-b8f8-6928268086f8,c28a190a-f487-4e99-b8f8-6928268086f8,0,1,94e02f76-8656-4999-9470-dd996118400c,94e02f76-8656-4999-9470-dd996118400c,0,1,9effd265-3783-44e2-8698-80dd82137546,9effd265-3783-44e2-8698-80dd82137546,0,1,bef52020-98f8-465b-8981-e5f8eed62308,bef52020-98f8-465b-8981-e5f8eed62308,0,1,19897ad0-bdb5-439c-b4a2-a773c0ce5cf5,19897ad0-bdb5-439c-b4a2-a773c0ce5cf5,0,1,e731dab7-df9e-48ae-8542-4c0c30666ae9,e731dab7-df9e-48ae-8542-4c0c30666ae9,0,1,f321e378-6d50-4567-8434-813f367d3a65,f321e378-6d50-4567-8434-813f367d3a65,0,1,6ac484a9-4d96-4521-9b8c-66212a365725,6ac484a9-4d96-4521-9b8c-66212a365725,0,1,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,0,1,bde05768-2dd6-4800-985d-27075f610cca,bde05768-2dd6-4800-985d-27075f610cca,0,1,d18956cf-e449-48cc-a127-01b5dc910ea2,d18956cf-e449-48cc-a127-01b5dc910ea2,0,1,8e5487a3-b5e5-40ca-88f3-5b0ea0c4d481,8e5487a3-b5e5-40ca-88f3-5b0ea0c4d481,0,1,5d338e31-a56b-45f0-8a62-0270ca543f6a,5d338e31-a56b-45f0-8a62-0270ca543f6a,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,a7098d41-a978-4c77-937c-8deebdfe0bcd,a7098d41-a978-4c77-937c-8deebdfe0bcd,0,1,db1062bc-4164-4095-9640-9804c0ebcd0b,db1062bc-4164-4095-9640-9804c0ebcd0b,0,1,c11d967b-1250-4345-90b0-011a96c5ae5e,c11d967b-1250-4345-90b0-011a96c5ae5e,0,1,ea7c61ff-745c-4908-9a94-bba022d12de4,ea7c61ff-745c-4908-9a94-bba022d12de4,0,1,ef8a82f2-d3e5-4f0d-8a16-024d9cdacce2,ef8a82f2-d3e5-4f0d-8a16-024d9cdacce2,0,1,24eed105-f612-4340-ad79-388a7b39b58c,24eed105-f612-4340-ad79-388a7b39b58c,0,1,8e4bd2ac-d555-490e-87ab-1b0cdd6f72e9,8e4bd2ac-d555-490e-87ab-1b0cdd6f72e9,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,6a2add61-edb7-4561-bae9-06b3741e7726,6a2add61-edb7-4561-bae9-06b3741e7726,0,1,a7fe0aa5-722c-4a09-889b-ee422421addc,a7fe0aa5-722c-4a09-889b-ee422421addc,0,1,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,0,1,0c838a31-2b08-447c-b39a-a613cfba526c,0c838a31-2b08-447c-b39a-a613cfba526c,0,1,b25083c5-9b97-49a4-b6c3-bbf8d7f91cd3,b25083c5-9b97-49a4-b6c3-bbf8d7f91cd3,0,1,86c679c0-3531-4622-9a1f-3d9d6ccdd431,86c679c0-3531-4622-9a1f-3d9d6ccdd431,0,1,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,0,1,670c62c1-1a33-4dec-9540-5b4c1fe29074,670c62c1-1a33-4dec-9540-5b4c1fe29074,0,1,cc664d81-d0af-4d25-ae29-64f422e51bf2,cc664d81-d0af-4d25-ae29-64f422e51bf2,0,1,e1314cd1-e662-4c29-ad51-492cb0029883,e1314cd1-e662-4c29-ad51-492cb0029883,0,1,0cf49621-afc5-4c8d-a1b5-f8c30db9f415,0cf49621-afc5-4c8d-a1b5-f8c30db9f415,0,1,4718392b-477c-496b-9d28-ddbdaa7a04f2,4718392b-477c-496b-9d28-ddbdaa7a04f2,0,1,879844f0-30b4-47f5-8d2e-5fea29910368,879844f0-30b4-47f5-8d2e-5fea29910368,0,1,303334ba-2785-47fe-a094-84f9dea33be2,303334ba-2785-47fe-a094-84f9dea33be2,0,1,9690842c-7a2c-4b5d-a238-f730afc49a7b,9690842c-7a2c-4b5d-a238-f730afc49a7b,0,1,04424730-6992-4a5b-838b-7a7c16dedbd0,04424730-6992-4a5b-838b-7a7c16dedbd0,0,1,cd6b749d-55a4-4e10-a933-8d97bfe2f9df,cd6b749d-55a4-4e10-a933-8d97bfe2f9df,0,1,240bec31-cd59-477b-8459-8e3278da22dc,240bec31-cd59-477b-8459-8e3278da22dc,0,1,b76c3bd6-924a-4378-acbe-6f17232b201b,b76c3bd6-924a-4378-acbe-6f17232b201b,0,1,e0519f0c-9c99-4f5c-a3a9-27adce45737d,e0519f0c-9c99-4f5c-a3a9-27adce45737d,0,1,0874a3c0-0d16-4172-b467-f0666d5fcaee,0874a3c0-0d16-4172-b467-f0666d5fcaee,0,1,cc380a19-ab29-4f20-93ad-9a58cd4de56e,cc380a19-ab29-4f20-93ad-9a58cd4de56e,0,1,6a5f7521-270e-476e-88ec-a8cf79ea61a6,6a5f7521-270e-476e-88ec-a8cf79ea61a6,0,1,9bb841e7-e629-4a1f-8ff6-f8bca0b2b133,9bb841e7-e629-4a1f-8ff6-f8bca0b2b133,0,1,74067eee-6cd4-4ae3-becc-457ecb51dc9a,74067eee-6cd4-4ae3-becc-457ecb51dc9a,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,343b979a-97e3-4eac-a314-3bd3eea9c15c,343b979a-97e3-4eac-a314-3bd3eea9c15c,0,1,b2f17ef1-3f6f-4029-b3e2-28d6b79c5b76,b2f17ef1-3f6f-4029-b3e2-28d6b79c5b76,0,1,f5bb88eb-c239-4ae3-a297-dfbbd679e008,f5bb88eb-c239-4ae3-a297-dfbbd679e008,0,1,bb350b39-1f4d-460a-98c9-8d2308cf22f0,bb350b39-1f4d-460a-98c9-8d2308cf22f0,0,1,f259b6b4-d582-429f-a16f-027a6bcb7438,f259b6b4-d582-429f-a16f-027a6bcb7438,0,1,9f32e85c-2ed6-41db-b0ec-6d8596940e80,9f32e85c-2ed6-41db-b0ec-6d8596940e80,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,72d41d01-9c9d-4fbe-8a39-932d82d171ef,72d41d01-9c9d-4fbe-8a39-932d82d171ef,0,1,697d5715-dd04-40be-9b28-539734725158,697d5715-dd04-40be-9b28-539734725158,0,1,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,0,1,d95fcb37-fc65-466d-93e2-489f41683276,d95fcb37-fc65-466d-93e2-489f41683276,0,1,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,0,1,a27a9296-46bb-49a1-8308-db675baa81d0,a27a9296-46bb-49a1-8308-db675baa81d0,0,1,1456f317-360c-4190-b2d1-1be7484369a5,1456f317-360c-4190-b2d1-1be7484369a5,0,1,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,0,1,4867948f-b027-44ae-b78c-a94e00eed52b,4867948f-b027-44ae-b78c-a94e00eed52b,0,1,39ed5463-b1c0-44bb-9d71-4ef08007a7d0,39ed5463-b1c0-44bb-9d71-4ef08007a7d0,0,1,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,0,1,56cc2ba7-fee3-4dcb-9a2a-93dc94a5ee1f,56cc2ba7-fee3-4dcb-9a2a-93dc94a5ee1f,0,1,ef044879-e731-418a-b917-6a685f27c5f4,ef044879-e731-418a-b917-6a685f27c5f4,0,1,618d13d5-fd1f-4b70-ad45-dd6a17a50730,618d13d5-fd1f-4b70-ad45-dd6a17a50730,0,1,58037b76-b548-4f07-bd67-67e552a5c6e5,58037b76-b548-4f07-bd67-67e552a5c6e5,0,1,00e48a23-eb5b-4a29-b36c-218ab9760f23,00e48a23-eb5b-4a29-b36c-218ab9760f23,0,1,68f19104-5fa3-4f28-a84b-bf68c3bed49b,68f19104-5fa3-4f28-a84b-bf68c3bed49b,0,1,ab0b6824-99ba-4b8d-857d-ed8ef017d499,ab0b6824-99ba-4b8d-857d-ed8ef017d499,0,1,f88ccd7a-8d15-4b24-addf-da522a0b4a43,f88ccd7a-8d15-4b24-addf-da522a0b4a43,0,1,0f8e87d4-ffb7-4cff-a2d3-6d5c5219ff0b,0f8e87d4-ffb7-4cff-a2d3-6d5c5219ff0b,0,1,1511c2e3-aeb4-422a-b6ae-03412b714c93,1511c2e3-aeb4-422a-b6ae-03412b714c93,0,1,349378d1-abe3-44de-84a4-d525b08e0474,349378d1-abe3-44de-84a4-d525b08e0474,0,1,1526b18d-7fab-414e-a5b2-377b67ac0b55,1526b18d-7fab-414e-a5b2-377b67ac0b55,0,1,c561fe6b-53ea-435b-a230-1850e2dc1ff5,c561fe6b-53ea-435b-a230-1850e2dc1ff5,0,1,aba7605f-6baf-42a8-b5ad-8f71c780b81f,aba7605f-6baf-42a8-b5ad-8f71c780b81f,0,1,8fc19eca-1a15-4758-af4b-79637e51edfb,8fc19eca-1a15-4758-af4b-79637e51edfb,0,1,be9144ce-5560-47bb-8c5e-9beefd15bfc3,be9144ce-5560-47bb-8c5e-9beefd15bfc3,0,1,ad09d1e6-5982-4e1c-864e-452ac5b2915a,ad09d1e6-5982-4e1c-864e-452ac5b2915a,0,1,84a159ed-bc5f-4497-94d1-94b187b0bffe,84a159ed-bc5f-4497-94d1-94b187b0bffe,0,1,0dcc3bbf-afbe-4a4e-bc4a-17534d5fab28,0dcc3bbf-afbe-4a4e-bc4a-17534d5fab28,0,1,bf75c4de-b36a-4a7f-8d84-9fa3d020a6cb,bf75c4de-b36a-4a7f-8d84-9fa3d020a6cb,0,1,f95adb50-fa0b-434c-93dd-b7fd211220b7,f95adb50-fa0b-434c-93dd-b7fd211220b7,0,1,d02fe5f5-412c-4c4f-bfc7-c1d7206cd092,d02fe5f5-412c-4c4f-bfc7-c1d7206cd092,0,1,2233ce53-b8a8-4c83-97a2-683c8575462a,2233ce53-b8a8-4c83-97a2-683c8575462a,0,1,2071f210-dc13-43c0-a58e-b982821d6842,2071f210-dc13-43c0-a58e-b982821d6842,0,1,3cda70d0-3116-4508-82ea-5ea0f0921262,3cda70d0-3116-4508-82ea-5ea0f0921262,0,1,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,0,1,c2ef8d6b-de7b-430d-ac30-76cdaf0579c2,c2ef8d6b-de7b-430d-ac30-76cdaf0579c2,0,1,f415296e-fceb-4835-abe9-17bb17a5d5e5,f415296e-fceb-4835-abe9-17bb17a5d5e5,0,1,0e805e1f-3797-4ef9-94d3-0ec58ac1b605,0e805e1f-3797-4ef9-94d3-0ec58ac1b605,0,1,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,0,1,19056365-9ff1-4733-876e-a7ebdbbe0557,19056365-9ff1-4733-876e-a7ebdbbe0557,0,1,c8679d82-075c-4556-8231-c004d144fe61,c8679d82-075c-4556-8231-c004d144fe61,0,1,5e09dc5e-bbb7-4c38-b609-940c24f63c84,5e09dc5e-bbb7-4c38-b609-940c24f63c84,0,1,017b28eb-8ba9-465e-a748-20eadbeb4ea2,017b28eb-8ba9-465e-a748-20eadbeb4ea2,0,1,c0bb2d66-94c9-4bc6-afd5-534075e8395b,c0bb2d66-94c9-4bc6-afd5-534075e8395b,0,1,db7cc693-1645-4416-a9d9-5a7584cd3bbc,db7cc693-1645-4416-a9d9-5a7584cd3bbc,0,1,c849fb09-7833-49c8-9461-98426dc6c0af,c849fb09-7833-49c8-9461-98426dc6c0af,0,1,6c58fc3a-37f8-44b7-b076-2c10ce09b554,6c58fc3a-37f8-44b7-b076-2c10ce09b554,0,1,8ca0258c-96d8-4a12-b94f-db968195ee0a,8ca0258c-96d8-4a12-b94f-db968195ee0a,0,1,245c07a9-98b0-452b-b899-dc8751ab7ce0,245c07a9-98b0-452b-b899-dc8751ab7ce0,1,0,b0ca1b85-e1de-4b7c-8261-7f9e8a6a72eb,b0ca1b85-e1de-4b7c-8261-7f9e8a6a72eb,1,0,ae67dfe5-bb36-4400-81f5-8dab1fd0ca6e,ae67dfe5-bb36-4400-81f5-8dab1fd0ca6e,1,0,91d7687b-7627-473f-a08d-433f9d385107,91d7687b-7627-473f-a08d-433f9d385107,1,0,83db1b00-e9e3-41da-8a59-47589dcfd618,83db1b00-e9e3-41da-8a59-47589dcfd618,1,0,91d2d798-1498-4c52-aa7b-99db4b992876,91d2d798-1498-4c52-aa7b-99db4b992876,1,0,e85a03d3-e7c7-4058-992a-515a557d9e52,e85a03d3-e7c7-4058-992a-515a557d9e52,1,0,d3a1d247-8f4a-45af-9861-7e313a100209,d3a1d247-8f4a-45af-9861-7e313a100209,1,0,83385f31-2cdf-44a1-85c3-461e4ad5fd45,83385f31-2cdf-44a1-85c3-461e4ad5fd45,1,0,b55b06db-604e-4fb9-9253-638c747bd8f9,b55b06db-604e-4fb9-9253-638c747bd8f9,1,0,9cd9a3e1-b52c-4151-abd3-2744ed03cc1b,9cd9a3e1-b52c-4151-abd3-2744ed03cc1b,1,0,9aa0c1ef-45b4-405b-ad6f-ebcf876e6318,9aa0c1ef-45b4-405b-ad6f-ebcf876e6318,1,0,deb69010-80b0-4e28-acc7-8c50e8e6f873,deb69010-80b0-4e28-acc7-8c50e8e6f873,1,0,1a9177fe-6699-42b3-9588-eed9c6008c2d,1a9177fe-6699-42b3-9588-eed9c6008c2d,1,0,4f49412a-fbbe-4ee1-9c2b-affe5266bba7,4f49412a-fbbe-4ee1-9c2b-affe5266bba7,1,0,ae698468-f42a-4400-aee6-fd849740e634,ae698468-f42a-4400-aee6-fd849740e634,1,0,d62bdb25-f261-4282-aa72-52e2b107642c,d62bdb25-f261-4282-aa72-52e2b107642c,1,0,ddec19a2-2a76-4eeb-9cbb-6bc2b4a32bc8,ddec19a2-2a76-4eeb-9cbb-6bc2b4a32bc8,1,0,6438435e-97cc-4bd2-98dc-e21cee55bb0f,6438435e-97cc-4bd2-98dc-e21cee55bb0f,1,0,00579e31-e97d-4d79-ba25-b8d500a17e7f,00579e31-e97d-4d79-ba25-b8d500a17e7f,1,0,5001bea4-c8f9-4950-9eda-d33125e3bb46,5001bea4-c8f9-4950-9eda-d33125e3bb46,1,0,e815010d-e03d-46e4-b482-c1556902cc26,e815010d-e03d-46e4-b482-c1556902cc26,1,0,98bdfd19-b993-43bd-b2e1-3535d001ff29,98bdfd19-b993-43bd-b2e1-3535d001ff29,1,0,00a1fdb2-d233-4179-b78a-a7e27d9c03c5,00a1fdb2-d233-4179-b78a-a7e27d9c03c5,1,0,dd03e170-4186-495b-ae1c-fc66385d7ccf,dd03e170-4186-495b-ae1c-fc66385d7ccf,1,0,81fbb02e-76b2-4bca-bb3b-871e4e969a3c,81fbb02e-76b2-4bca-bb3b-871e4e969a3c,1,0,cdef5df6-f3a1-4950-b197-4f375914f885,cdef5df6-f3a1-4950-b197-4f375914f885,1,0,a1185a4c-7351-48b0-b662-61f61a1ad715,a1185a4c-7351-48b0-b662-61f61a1ad715,1,0,28a25822-2306-409a-a7c8-6f7e42bf25e8,28a25822-2306-409a-a7c8-6f7e42bf25e8,1,0,a45fa0c3-c363-4465-861f-13cedfeb79dd,a45fa0c3-c363-4465-861f-13cedfeb79dd,1,0,a72517c3-8c91-4e40-81ac-83c762789e87,a72517c3-8c91-4e40-81ac-83c762789e87,1,0,0233b335-7e26-4661-9850-8ab09d3178e3,0233b335-7e26-4661-9850-8ab09d3178e3,1,0,d942d536-5d01-4571-b910-abd973996a38,d942d536-5d01-4571-b910-abd973996a38,1,0,b82a7103-b872-49c3-b632-81d5a0051136,b82a7103-b872-49c3-b632-81d5a0051136,1,0,4b17ac35-78cb-4d01-bb08-659c0a93e8ce,4b17ac35-78cb-4d01-bb08-659c0a93e8ce,1,0,20c2053c-8ebd-4c07-8d95-956b424d047c,20c2053c-8ebd-4c07-8d95-956b424d047c,1,0,7c9dee81-7e85-4d26-84c3-66b0d770ac5a,7c9dee81-7e85-4d26-84c3-66b0d770ac5a,1,0,bef6081e-f377-41d6-83a1-b0e218a3fb46,bef6081e-f377-41d6-83a1-b0e218a3fb46,1,0,9b67bfd5-ef23-4205-b7ba-9466517e9999,9b67bfd5-ef23-4205-b7ba-9466517e9999,1,0,ea2c4c8e-23cc-4884-812e-1e959da48afc,ea2c4c8e-23cc-4884-812e-1e959da48afc,1,0,9474b4f1-b1bb-4fcf-acdb-a149a09b8490,9474b4f1-b1bb-4fcf-acdb-a149a09b8490,1,0,46b0a5b3-1fa7-44ff-a941-c6de47d36e77,46b0a5b3-1fa7-44ff-a941-c6de47d36e77,0,1,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,0,1,592f55e1-b004-44ef-878a-6c2016ccbeb0,592f55e1-b004-44ef-878a-6c2016ccbeb0,0,1,19add2bd-eede-4a05-901b-cf8ce49a638f,19add2bd-eede-4a05-901b-cf8ce49a638f,0,1,becf53b6-3fbc-4c70-822f-4a70b0434353,becf53b6-3fbc-4c70-822f-4a70b0434353,0,1,7dc0429d-146a-4c4f-b122-5d5c053bd4ed,7dc0429d-146a-4c4f-b122-5d5c053bd4ed,0,1,f8dc2485-685b-4e41-834a-a2cbbbe4d53b,f8dc2485-685b-4e41-834a-a2cbbbe4d53b,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,652ee894-047b-4a5a-a500-2d61b4c4a473,652ee894-047b-4a5a-a500-2d61b4c4a473,0,1,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,0,1,fef727fa-f63b-4467-9367-73a2425b19e3,fef727fa-f63b-4467-9367-73a2425b19e3,0,1,3b9c03bc-8517-498f-8052-e53854fb0753,3b9c03bc-8517-498f-8052-e53854fb0753,0,1,33f8cd94-71e7-4703-92c3-22690fbd871a,33f8cd94-71e7-4703-92c3-22690fbd871a,0,1,b6e5de4d-0156-4342-b646-6e6920a4bd3a,b6e5de4d-0156-4342-b646-6e6920a4bd3a,0,1,c03f9972-5a1f-449b-b170-5a958c2b5846,c03f9972-5a1f-449b-b170-5a958c2b5846,0,1,25896075-2484-4879-8310-7f5680d80b48,25896075-2484-4879-8310-7f5680d80b48,0,1,09858042-6284-4499-8055-c1b5b783ce5f,09858042-6284-4499-8055-c1b5b783ce5f,0,1,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1e3c444d-6f73-4eb0-a12d-7106daf36b14,0,1,e417e2ab-5e25-40a9-8dc2-9552a4fe1a38,e417e2ab-5e25-40a9-8dc2-9552a4fe1a38,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,36b080d5-a870-46fa-bf8d-0a06e3a9719f,36b080d5-a870-46fa-bf8d-0a06e3a9719f,0,1,b3152292-5546-4896-ad24-cb41057698d8,b3152292-5546-4896-ad24-cb41057698d8,0,1,bfa90848-930f-433d-8f6f-c11ac2c5eba2,bfa90848-930f-433d-8f6f-c11ac2c5eba2,0,1,a4d767a1-d2e6-4e0a-ab35-9207eef54998,a4d767a1-d2e6-4e0a-ab35-9207eef54998,0,1,f38069e7-6d69-4be9-8463-bc7a33158a1a,f38069e7-6d69-4be9-8463-bc7a33158a1a,0,1,e50cb13a-151b-45d2-a7b7-d23440ddfa24,e50cb13a-151b-45d2-a7b7-d23440ddfa24,0,1,cc3a7f15-4db6-445e-b282-f44d0460b7d3,cc3a7f15-4db6-445e-b282-f44d0460b7d3,0,1,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,0,1,0d8770aa-fa6e-471c-92c8-b96576927ef0,0d8770aa-fa6e-471c-92c8-b96576927ef0,0,1,e25b2b10-bf08-42db-9642-861efc5e583b,e25b2b10-bf08-42db-9642-861efc5e583b,0,1,b8a32c33-4e15-4c21-baab-64a86d44321b,b8a32c33-4e15-4c21-baab-64a86d44321b,0,1,e7d51ada-f286-4519-bfae-ece95dd4d7b0,e7d51ada-f286-4519-bfae-ece95dd4d7b0,0,1,d7dd9a03-6818-4987-8f39-58e1c906569f,d7dd9a03-6818-4987-8f39-58e1c906569f,0,1,fce028b8-b530-49f0-b6ad-a28d03e19b0f,fce028b8-b530-49f0-b6ad-a28d03e19b0f,0,1,301eea20-0e7f-441e-a531-28b4627dfd93,301eea20-0e7f-441e-a531-28b4627dfd93,0,1,38fc1e6e-7cd3-437b-b429-6655be34cd01,38fc1e6e-7cd3-437b-b429-6655be34cd01,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,9ed2c756-80a1-4559-8494-b7a9b82a4519,9ed2c756-80a1-4559-8494-b7a9b82a4519,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,d975aef4-8da8-4486-baeb-a99c48cff0ec,d975aef4-8da8-4486-baeb-a99c48cff0ec,0,1,75666bb9-f6d3-4dd6-8220-427a81f23fc9,75666bb9-f6d3-4dd6-8220-427a81f23fc9,0,1,9da27139-0bed-47b0-aef6-246929968502,9da27139-0bed-47b0-aef6-246929968502,0,1,68e82adf-bc03-4f23-9ec4-749ed42241da,68e82adf-bc03-4f23-9ec4-749ed42241da,0,1,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,0,1,41f87891-ddd5-4e0f-a4f2-8039fb71981b,41f87891-ddd5-4e0f-a4f2-8039fb71981b,0,1,29f2094a-d0d1-425c-8161-45a9ba186e19,29f2094a-d0d1-425c-8161-45a9ba186e19,0,1,a57f6dc1-59d7-4311-8acd-65ce57a9f386,a57f6dc1-59d7-4311-8acd-65ce57a9f386,0,1,893b2dd9-a939-4799-9b78-50d788a5f3ba,893b2dd9-a939-4799-9b78-50d788a5f3ba,0,1,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,0,1,e4842271-4fc0-4e15-afef-876f05af78c0,e4842271-4fc0-4e15-afef-876f05af78c0,0,1,31ee6430-b65d-42fa-859b-c4f1c40686ae,31ee6430-b65d-42fa-859b-c4f1c40686ae,0,1,c59e11f3-6bcb-404a-9d76-1416c12be354,c59e11f3-6bcb-404a-9d76-1416c12be354,0,1,c1a1f12b-3978-4047-956e-a5c7de8371a0,c1a1f12b-3978-4047-956e-a5c7de8371a0,0,1,ac39b903-0c60-417e-a50f-49ed375424f5,ac39b903-0c60-417e-a50f-49ed375424f5,0,1,135d57fe-d420-4bb0-9120-e43fd9b55c16,135d57fe-d420-4bb0-9120-e43fd9b55c16,0,1,9893e2d6-f3f8-4d73-bb06-19bf26d216ab,9893e2d6-f3f8-4d73-bb06-19bf26d216ab,0,1,16392cf6-dd83-4df0-a54b-6efc29778a89,16392cf6-dd83-4df0-a54b-6efc29778a89,0,1,a4ec7d3d-2d01-436c-98ec-ec42733ee5c6,a4ec7d3d-2d01-436c-98ec-ec42733ee5c6,0,1,10db9f99-c7d1-4b16-9ea2-9bfc2aa4ddb5,10db9f99-c7d1-4b16-9ea2-9bfc2aa4ddb5,0,1,230722e6-942f-4594-be89-eff59c6572bf,230722e6-942f-4594-be89-eff59c6572bf,0,1,b43abcf7-1f1d-4a59-b0d1-0a493c3a4785,b43abcf7-1f1d-4a59-b0d1-0a493c3a4785,0,1,eaf6045f-9ac0-43ef-b165-a45be75a4d44,eaf6045f-9ac0-43ef-b165-a45be75a4d44,0,1,237dab99-ed72-432c-ad01-c6045d74f000,237dab99-ed72-432c-ad01-c6045d74f000,0,1,a1130128-cc48-4555-93a2-99e7f74f77dc,a1130128-cc48-4555-93a2-99e7f74f77dc,0,1,94e08dcf-3885-4a73-82ab-cb291f1cf95f,94e08dcf-3885-4a73-82ab-cb291f1cf95f,0,1,405c52c4-25fe-45ff-abab-bf01041e768d,405c52c4-25fe-45ff-abab-bf01041e768d,0,1,55ce840b-5838-4107-886d-f935b9907bd8,55ce840b-5838-4107-886d-f935b9907bd8,0,1,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,0,1,f1753bda-16db-4b00-a16a-37ddade8403f,f1753bda-16db-4b00-a16a-37ddade8403f,0,1,a1875d63-4303-46f1-bdea-fc529b5891f3,a1875d63-4303-46f1-bdea-fc529b5891f3,0,1,59123b12-6052-4480-9c86-f4de1b5cdc04,59123b12-6052-4480-9c86-f4de1b5cdc04,0,1,133f181a-fade-4182-826d-904fac780326,133f181a-fade-4182-826d-904fac780326,0,1,f60cb71a-f451-426a-aa3a-aa266b8da149,f60cb71a-f451-426a-aa3a-aa266b8da149,0,1,641ebe22-7135-4adb-bbd6-e0c37d246a2d,641ebe22-7135-4adb-bbd6-e0c37d246a2d,0,1,f71ba01e-9f6b-4241-8048-4368c8888756,f71ba01e-9f6b-4241-8048-4368c8888756,0,1,6aa814fa-417e-428c-951e-6efd9d0775da,6aa814fa-417e-428c-951e-6efd9d0775da,0,1,a247efe1-8608-4780-9cc8-54e29944475b,a247efe1-8608-4780-9cc8-54e29944475b,0,1,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,0,1,a8f162e9-3f59-41a5-b82f-da20928213c7,a8f162e9-3f59-41a5-b82f-da20928213c7,0,1,ade68dfd-5037-4fd7-b043-9514e3fe6342,ade68dfd-5037-4fd7-b043-9514e3fe6342,0,1,7b008aad-9d05-43e1-8295-62ae58cfff42,7b008aad-9d05-43e1-8295-62ae58cfff42,0,1,fdaf9255-d621-4a98-9530-f618ed440795,fdaf9255-d621-4a98-9530-f618ed440795,0,1,48cefa96-46c7-4870-a096-951dcbae479a,48cefa96-46c7-4870-a096-951dcbae479a,0,1,d74e01cc-941b-4974-8771-0bd2e0d86724,d74e01cc-941b-4974-8771-0bd2e0d86724,0,1,0daac965-2026-4acc-8ba1-3c1f01779257,0daac965-2026-4acc-8ba1-3c1f01779257,0,1,65a331c0-7501-49f6-8027-35b703d11834,65a331c0-7501-49f6-8027-35b703d11834,0,1,c67fab0a-704f-43ae-bd03-4b5b1a880b24,c67fab0a-704f-43ae-bd03-4b5b1a880b24,0,1,aae09896-3b22-4d7d-9059-e47660f8b88b,aae09896-3b22-4d7d-9059-e47660f8b88b,0,1,c1703a14-61a0-4461-8ad8-7173e2c431fe,c1703a14-61a0-4461-8ad8-7173e2c431fe,0,1,b1b5841d-0cf9-4de5-8561-b35b8f286d21,b1b5841d-0cf9-4de5-8561-b35b8f286d21,0,1,aecf5653-3005-43f2-ab49-40977e70f02b,aecf5653-3005-43f2-ab49-40977e70f02b,0,1,4093fe34-7557-4f15-831b-d654b94b8010,4093fe34-7557-4f15-831b-d654b94b8010,0,1,ee10023f-5c63-4cb3-8e6c-db566c788c9d,ee10023f-5c63-4cb3-8e6c-db566c788c9d,0,1,475f8577-a141-496b-94e1-53215c0dd017,475f8577-a141-496b-94e1-53215c0dd017,0,1,97638762-c01e-4c8f-88e2-b356e517e18f,97638762-c01e-4c8f-88e2-b356e517e18f,0,1,074e34f2-e9be-4bd3-beca-8b916772e2be,074e34f2-e9be-4bd3-beca-8b916772e2be,0,1,28fecf1b-7cab-4087-b66e-2052edb8ce3a,28fecf1b-7cab-4087-b66e-2052edb8ce3a,0,1,252eb146-0d23-46ae-9feb-ee04531dd7d8,252eb146-0d23-46ae-9feb-ee04531dd7d8,0,1,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,0,1,cc906f05-5ea6-43cb-a084-c4ee51ca4bd5,cc906f05-5ea6-43cb-a084-c4ee51ca4bd5,0,1,f5417147-4d2a-4e49-911b-2bb5eccb8441,f5417147-4d2a-4e49-911b-2bb5eccb8441,0,1,20fbed2b-4393-4de0-a71d-017a336bdac0,20fbed2b-4393-4de0-a71d-017a336bdac0,0,1,2ca4fc58-798b-4fc3-8673-27688ce7a1f2,2ca4fc58-798b-4fc3-8673-27688ce7a1f2,0,1,41f6f6d1-b7cf-4477-907b-ce69fc08c799,41f6f6d1-b7cf-4477-907b-ce69fc08c799,0,1,0d124daf-dc52-4391-a2d9-3c43a45c422c,0d124daf-dc52-4391-a2d9-3c43a45c422c,0,1,a300ecc3-8031-4a50-a17d-b08cf3a72139,a300ecc3-8031-4a50-a17d-b08cf3a72139,0,1,e7e78b7e-b103-40d6-8064-f84e2d86ca3d,e7e78b7e-b103-40d6-8064-f84e2d86ca3d,0,1,44b28019-01c0-468d-9b60-e050ff8b71ac,44b28019-01c0-468d-9b60-e050ff8b71ac,0,1,69f6173c-a570-41ff-b07f-5b85f7187515,69f6173c-a570-41ff-b07f-5b85f7187515,0,1,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,0,1,98153b59-8cc6-4dc7-b945-99c1146d07da,98153b59-8cc6-4dc7-b945-99c1146d07da,0,1,3e2828b4-2b55-471e-ac69-55119c2480f8,3e2828b4-2b55-471e-ac69-55119c2480f8,0,1,df9db8d5-c5c2-4a9d-88fe-77247b2c417e,df9db8d5-c5c2-4a9d-88fe-77247b2c417e,0,1,9da32b56-ff89-4739-bb99-615074b72298,9da32b56-ff89-4739-bb99-615074b72298,0,1,08baf3ee-b8ca-4f29-89fc-c15344064ad3,08baf3ee-b8ca-4f29-89fc-c15344064ad3,0,1,01b85e3a-9920-425a-9de5-5079fffeef93,01b85e3a-9920-425a-9de5-5079fffeef93,0,1,82e12316-cc64-4d2f-83fa-054b5a738f02,82e12316-cc64-4d2f-83fa-054b5a738f02,0,1,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,0,1,a890be6b-f050-4ea4-a388-570948ffd22b,a890be6b-f050-4ea4-a388-570948ffd22b,0,1,b00c31d6-4fc6-4189-9f72-f91742ec705f,b00c31d6-4fc6-4189-9f72-f91742ec705f,0,1,1333101b-82e8-41a9-a793-5af5dcd6f68a,1333101b-82e8-41a9-a793-5af5dcd6f68a,0,1,766c9bee-b0fc-4a7f-b88e-cd8c4aad73b8,766c9bee-b0fc-4a7f-b88e-cd8c4aad73b8,0,1,3ba630c2-cdc1-40a8-a24e-538ddb1abe38,3ba630c2-cdc1-40a8-a24e-538ddb1abe38,0,1,0f25646a-90f9-4747-a778-7efdaabc284c,0f25646a-90f9-4747-a778-7efdaabc284c,0,1,3a2d9324-8260-478d-ad62-a964d860cb8f,3a2d9324-8260-478d-ad62-a964d860cb8f,0,1,9b9cd161-5bee-4433-a0ec-b67deb099b5e,9b9cd161-5bee-4433-a0ec-b67deb099b5e,0,1,ca179cb5-65e1-4a55-bf12-096b926accb0,ca179cb5-65e1-4a55-bf12-096b926accb0,0,1,472ce1c2-9e83-418b-b1ec-e15e126bc919,472ce1c2-9e83-418b-b1ec-e15e126bc919,0,1,9fe30414-8261-4403-a854-f22b61824f69,9fe30414-8261-4403-a854-f22b61824f69,0,1,c587a9f3-7512-4697-8156-c688fbb210d0,c587a9f3-7512-4697-8156-c688fbb210d0,0,1,07bb26ac-bd97-465f-a192-db7fedbb579b,07bb26ac-bd97-465f-a192-db7fedbb579b,0,1,bb129cf2-5a5a-433a-924a-a1d0d895644a,bb129cf2-5a5a-433a-924a-a1d0d895644a,0,1,faa34cb8-2d48-4851-a839-fc40536a0234,faa34cb8-2d48-4851-a839-fc40536a0234,0,1,0894db61-51f6-4068-9634-e55d95e2a8ac,0894db61-51f6-4068-9634-e55d95e2a8ac,0,1,ad3fb691-68b2-4d65-93ab-ab8fcb77e035,ad3fb691-68b2-4d65-93ab-ab8fcb77e035,0,1,67aed41e-9707-4007-bb3c-7273476664bb,67aed41e-9707-4007-bb3c-7273476664bb,0,1,0d8c215d-1210-47a2-897d-a3257b9f849a,0d8c215d-1210-47a2-897d-a3257b9f849a,0,1,954e7804-e8b1-42aa-9d49-bef73f9d13d1,954e7804-e8b1-42aa-9d49-bef73f9d13d1,0,1,c971e0ba-53b8-4454-92f7-40b0d639058a,c971e0ba-53b8-4454-92f7-40b0d639058a,0,1,ed297409-6215-4fd4-b47d-a2247e0343da,ed297409-6215-4fd4-b47d-a2247e0343da,0,1,5ae2a1de-6380-45cc-9c8f-5612cd5ba627,5ae2a1de-6380-45cc-9c8f-5612cd5ba627,0,1,e8aa2ba2-7dfa-47e3-bc18-6156f700ceed,e8aa2ba2-7dfa-47e3-bc18-6156f700ceed,0,1,8c472f51-47ec-43c4-9858-fd19ac3e17f3,8c472f51-47ec-43c4-9858-fd19ac3e17f3,0,1,c54f31ce-114b-46d3-b4c6-12c8f07727ca,c54f31ce-114b-46d3-b4c6-12c8f07727ca,0,1,5a9c82c1-d0cd-48ff-b91c-38b950591e4c,5a9c82c1-d0cd-48ff-b91c-38b950591e4c,0,1,59855d19-29cd-4efd-a453-b19e574113ef,59855d19-29cd-4efd-a453-b19e574113ef,0,1,249b6436-bd44-4950-b118-7f40f7aaf794,249b6436-bd44-4950-b118-7f40f7aaf794,0,1,712c2b73-4697-4581-a095-70555aee8be2,712c2b73-4697-4581-a095-70555aee8be2,0,1,c1508d67-ac6d-41e3-884d-b3bdd54659f8,c1508d67-ac6d-41e3-884d-b3bdd54659f8,0,1,3436b16e-ef5b-4abb-9aad-c70a7c8560ed,3436b16e-ef5b-4abb-9aad-c70a7c8560ed,0,1,ce6d1259-af90-482b-b19a-405512321bd9,ce6d1259-af90-482b-b19a-405512321bd9,0,1,79ff04ac-4625-469b-916e-938f04de4dd2,79ff04ac-4625-469b-916e-938f04de4dd2,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,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,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,0,1,2c8ab5a6-66d5-4b6f-94ae-4292724ded7f,2c8ab5a6-66d5-4b6f-94ae-4292724ded7f,0,1,de25a90c-4b46-4340-b649-93e16dde33de,de25a90c-4b46-4340-b649-93e16dde33de,0,1,4f2d0398-49f4-410c-a451-436cbf96a262,4f2d0398-49f4-410c-a451-436cbf96a262,0,1,b2c8bd74-21c9-4495-93e2-ca5355698350,b2c8bd74-21c9-4495-93e2-ca5355698350,0,1,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,0,1,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,0,1,93016393-c637-4d81-8675-aa5e51e678e0,93016393-c637-4d81-8675-aa5e51e678e0,0,1,d8621f68-106e-4058-963f-56010491ae2e,d8621f68-106e-4058-963f-56010491ae2e,0,1,670639a7-02a7-4108-81b8-cb93233fd2a5,670639a7-02a7-4108-81b8-cb93233fd2a5,0,1,f2e2df50-52fc-4e95-909b-80fc91a68f62,f2e2df50-52fc-4e95-909b-80fc91a68f62,0,1,1a1d8dd0-1559-426c-ad3c-baa6eb3a53db,1a1d8dd0-1559-426c-ad3c-baa6eb3a53db,0,1,d2762764-b5c0-4aeb-8e89-3371972f22d8,d2762764-b5c0-4aeb-8e89-3371972f22d8,0,1,d67a1377-f69f-48d9-824d-2ede2594e630,d67a1377-f69f-48d9-824d-2ede2594e630,0,1,573f1753-9194-4aaf-9217-5cac70ff108f,573f1753-9194-4aaf-9217-5cac70ff108f,0,1,50d3e00e-1a83-4bd5-91db-0561560caf42,50d3e00e-1a83-4bd5-91db-0561560caf42,0,1,1f7ec25a-05b1-468b-8857-2bb1aed3678a,1f7ec25a-05b1-468b-8857-2bb1aed3678a,0,1,c121b8bc-ecbf-4775-b210-3c1e3502a6ac,c121b8bc-ecbf-4775-b210-3c1e3502a6ac,0,1,9f4d5fe5-9bda-4ba9-a313-db1ab0ea14d1,9f4d5fe5-9bda-4ba9-a313-db1ab0ea14d1,0,1,4a1e6d25-89e7-468a-aef1-6ded0154dca2,4a1e6d25-89e7-468a-aef1-6ded0154dca2,0,1,44afff59-0590-4929-93b8-7b49735f21b5,44afff59-0590-4929-93b8-7b49735f21b5,0,1,905624ea-b253-413f-b651-1eb2c5a7d52a,905624ea-b253-413f-b651-1eb2c5a7d52a,0,1,b639ed30-3e37-4c65-a39f-00fe735950eb,b639ed30-3e37-4c65-a39f-00fe735950eb,0,1,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,0,1,f137eb0f-bde7-412d-9229-d7a4f9456e6c,f137eb0f-bde7-412d-9229-d7a4f9456e6c,0,1,90880131-8065-4a7e-a0fa-ecff9e27363c,90880131-8065-4a7e-a0fa-ecff9e27363c,0,1,57e9fcea-342c-4089-bd10-befb3faf0dbd,57e9fcea-342c-4089-bd10-befb3faf0dbd,0,1,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,9892f922-8745-4164-a200-94b5edc1ea0a,9892f922-8745-4164-a200-94b5edc1ea0a,0,1,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,0,1,6b6d541b-5dc1-4150-b8d1-5844a694ac6a,6b6d541b-5dc1-4150-b8d1-5844a694ac6a,0,1,2b1619a6-c841-4963-8c51-c1d8d6ba3746,2b1619a6-c841-4963-8c51-c1d8d6ba3746,0,1,eab50f82-4612-47fd-a5c2-9678016a1937,eab50f82-4612-47fd-a5c2-9678016a1937,0,1,4212bb94-7c24-4d4f-8bb8-4060bd21a135,4212bb94-7c24-4d4f-8bb8-4060bd21a135,0,1,2609ba3c-e4de-45b3-86e0-93db39a21eee,2609ba3c-e4de-45b3-86e0-93db39a21eee,0,1,00dcfeab-7ba1-4a50-996e-4fd693dd0514,00dcfeab-7ba1-4a50-996e-4fd693dd0514,0,1,d21971c9-9aa6-448a-ab37-49ad0b0547ec,d21971c9-9aa6-448a-ab37-49ad0b0547ec,0,1,627438b8-c738-4e02-a0e7-cfd7fbf8eca1,627438b8-c738-4e02-a0e7-cfd7fbf8eca1,0,1,30a87c95-4d55-4b68-877f-1055e1c1afa7,30a87c95-4d55-4b68-877f-1055e1c1afa7,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,4d660fec-4a76-470e-bba9-3d031941b289,4d660fec-4a76-470e-bba9-3d031941b289,0,1,144676de-f369-49f1-bb21-d60e073936df,144676de-f369-49f1-bb21-d60e073936df,0,1,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,0,1,d9f1f56b-75c8-43e9-8043-89076c225f78,d9f1f56b-75c8-43e9-8043-89076c225f78,0,1,a3c9a7eb-2104-4402-954c-3e12de4a7de3,a3c9a7eb-2104-4402-954c-3e12de4a7de3,0,1,38bf6d3b-5435-4bac-b9fc-23b80afeb760,38bf6d3b-5435-4bac-b9fc-23b80afeb760,0,1,a2a51b70-9570-4f53-9d30-e9a9b099a475,a2a51b70-9570-4f53-9d30-e9a9b099a475,0,1,556a0e57-5b3b-4303-a013-0bd296c506b8,556a0e57-5b3b-4303-a013-0bd296c506b8,0,1,21c1b2d3-cd96-4cdd-9ccc-ada27b127969,21c1b2d3-cd96-4cdd-9ccc-ada27b127969,0,1,fabbac92-cb98-4087-b3fa-387482ed0d86,fabbac92-cb98-4087-b3fa-387482ed0d86,0,1,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,0,1,e09534e3-ac6e-42a6-86e8-564acb20089a,e09534e3-ac6e-42a6-86e8-564acb20089a,0,1,6ff5b3cb-efff-430d-bf0a-957405f116ca,6ff5b3cb-efff-430d-bf0a-957405f116ca,0,1,d06e845a-9f54-40dd-b0df-6988def62017,d06e845a-9f54-40dd-b0df-6988def62017,0,1,7badb97b-c359-42af-9066-6bbfc0650cf9,7badb97b-c359-42af-9066-6bbfc0650cf9,0,1,63223883-06cf-4d01-be95-5e410cc58a22,63223883-06cf-4d01-be95-5e410cc58a22,0,1,1929139f-dabb-4c40-9423-158093360889,1929139f-dabb-4c40-9423-158093360889,0,1,dad92df4-685b-4260-b35f-4d031262dfea,dad92df4-685b-4260-b35f-4d031262dfea,0,1,4399c19a-ddba-42e9-88b4-c5c28abad237,4399c19a-ddba-42e9-88b4-c5c28abad237,0,1,982315ba-df74-4a31-8929-71d1e5e6f147,982315ba-df74-4a31-8929-71d1e5e6f147,0,1,8d1c01a9-9806-4e5d-bafb-ce6af11d5650,8d1c01a9-9806-4e5d-bafb-ce6af11d5650,0,1,fd3a6a7e-203d-447a-aebd-7626579387fb,fd3a6a7e-203d-447a-aebd-7626579387fb,0,1,8014684f-e1f1-4163-9083-459a009c0aac,8014684f-e1f1-4163-9083-459a009c0aac,0,1,ad6384d5-278b-44d3-993a-d5a39e7c98ca,ad6384d5-278b-44d3-993a-d5a39e7c98ca,0,1,ff976027-75e8-475c-abfa-876d36733c13,ff976027-75e8-475c-abfa-876d36733c13,0,1,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,0,1,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,0,1,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,0,1,b3554203-b930-496d-a712-353bc13a0946,b3554203-b930-496d-a712-353bc13a0946,0,1,59775ce0-f778-45f6-9453-bbd0a0ec1f27,59775ce0-f778-45f6-9453-bbd0a0ec1f27,0,1,f772abd3-8ea0-41e9-aaca-c5375778941a,f772abd3-8ea0-41e9-aaca-c5375778941a,0,1,a1e494f8-96a4-41bd-9234-b87e8d8742c5,a1e494f8-96a4-41bd-9234-b87e8d8742c5,0,1,b322b047-16eb-4500-826a-6dfebb7d997a,b322b047-16eb-4500-826a-6dfebb7d997a,0,1,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,0,1,764c76cc-0473-4633-868d-02f96aa43c10,764c76cc-0473-4633-868d-02f96aa43c10,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,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,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,cf13e2d9-72a0-47c0-bae2-f674024bbdb2,cf13e2d9-72a0-47c0-bae2-f674024bbdb2,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,61789ea5-aad2-4b3b-a1c7-3ff7409379eb,61789ea5-aad2-4b3b-a1c7-3ff7409379eb,0,1,2cd04d4c-2619-40c9-adf4-7bb281f045b6,2cd04d4c-2619-40c9-adf4-7bb281f045b6,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,5a088468-4065-4e0c-9b84-1162de8d3fdd,5a088468-4065-4e0c-9b84-1162de8d3fdd,0,1,dbdf3ae7-a0af-44b9-8e3d-c402d98cda03,dbdf3ae7-a0af-44b9-8e3d-c402d98cda03,0,1,cdce186a-229d-492d-8811-147fc4d7cdf5,cdce186a-229d-492d-8811-147fc4d7cdf5,0,1,5f91b00f-d8fc-4d63-8486-66339357ab22,5f91b00f-d8fc-4d63-8486-66339357ab22,0,1,16d44ab1-4bce-4df8-a215-6ed5173c75a8,16d44ab1-4bce-4df8-a215-6ed5173c75a8,0,1,543f976e-fea3-4a51-9962-b8e0fcd3f707,543f976e-fea3-4a51-9962-b8e0fcd3f707,0,1,375977c1-5745-4e78-a4df-cef966c0ccf8,375977c1-5745-4e78-a4df-cef966c0ccf8,0,1,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,0,1,c3796d85-2a24-43c4-9673-64e56249a1d0,c3796d85-2a24-43c4-9673-64e56249a1d0,0,1,fc1066b5-20d4-4c73-85f8-9889e554d6e1,fc1066b5-20d4-4c73-85f8-9889e554d6e1,0,1,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,0,1,731211c2-ef90-4883-9525-83cd91b742ac,731211c2-ef90-4883-9525-83cd91b742ac,0,1,0adf02da-940a-4bfc-afa5-59605494a169,0adf02da-940a-4bfc-afa5-59605494a169,0,1,50a1e3bf-8624-4474-854e-21b89aaf97ed,50a1e3bf-8624-4474-854e-21b89aaf97ed,0,1,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,0,1,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,0,1,847b97a3-d0bc-45e2-b06c-932bb22d8eca,847b97a3-d0bc-45e2-b06c-932bb22d8eca,0,1,503b3eab-b7f1-4ede-8845-3290a834cec7,503b3eab-b7f1-4ede-8845-3290a834cec7,0,1,8361991a-0f30-4a03-9a4c-90556b744f53,8361991a-0f30-4a03-9a4c-90556b744f53,0,1,3116fa60-bc42-4dea-aa03-387896168690,3116fa60-bc42-4dea-aa03-387896168690,0,1,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,0,1,08427a9a-fb3a-4bc1-b2e2-72e4f89680cd,08427a9a-fb3a-4bc1-b2e2-72e4f89680cd,0,1,f9196766-4ae2-4a73-bed6-4a8838323e02,f9196766-4ae2-4a73-bed6-4a8838323e02,0,1,ca797560-8802-4bdc-b21f-7a7fd795beae,ca797560-8802-4bdc-b21f-7a7fd795beae,0,1,56242b05-d722-4d4a-82d9-517e0e169d0b,56242b05-d722-4d4a-82d9-517e0e169d0b,0,1,5504f5d1-35d8-4a47-a0e1-003fe00395c1,5504f5d1-35d8-4a47-a0e1-003fe00395c1,0,1,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,0,1,06afe397-1c7e-400e-bb24-f8e611d114e8,06afe397-1c7e-400e-bb24-f8e611d114e8,0,1,f0105e51-9510-426a-8aa0-af827d93ffd9,f0105e51-9510-426a-8aa0-af827d93ffd9,0,1,3df19dbf-efe7-4e31-99ad-fafb59ec1329,3df19dbf-efe7-4e31-99ad-fafb59ec1329,0,1,baf12d47-fbfe-4563-aa23-26d9f7e83169,baf12d47-fbfe-4563-aa23-26d9f7e83169,0,1,e2046f49-6fea-4bf4-92b0-92f3c8357bcf,e2046f49-6fea-4bf4-92b0-92f3c8357bcf,0,1,0ba11486-1972-4434-ab1a-5bb75cc05e9f,0ba11486-1972-4434-ab1a-5bb75cc05e9f,0,1,4ed9c555-7dd0-4577-bf62-152b4c5ec9f2,4ed9c555-7dd0-4577-bf62-152b4c5ec9f2,0,1,11fe3a42-98c4-49ba-b697-86ffb172f16f,11fe3a42-98c4-49ba-b697-86ffb172f16f,0,1,07b53818-7318-4400-8af5-457fac012755,07b53818-7318-4400-8af5-457fac012755,0,1,292b47e7-5cf3-462d-a466-dac6253a7f03,292b47e7-5cf3-462d-a466-dac6253a7f03,0,1,8ecc070f-f6fb-46b1-9636-b77aa80f8804,8ecc070f-f6fb-46b1-9636-b77aa80f8804,0,1,8405be9d-465b-4744-b04f-03933b52f02e,8405be9d-465b-4744-b04f-03933b52f02e,0,1,a8021ff9-f0ae-49ab-b8ac-5e3d8fe90d82,a8021ff9-f0ae-49ab-b8ac-5e3d8fe90d82,0,1,f09b09ce-9e3c-406a-8508-b6e7e6ec966e,f09b09ce-9e3c-406a-8508-b6e7e6ec966e,0,1,9bf55587-1ffe-42bc-b8e8-3f956956f689,9bf55587-1ffe-42bc-b8e8-3f956956f689,0,1,2f67931e-543f-457e-80fd-78ca754e2e9c,2f67931e-543f-457e-80fd-78ca754e2e9c,0,1,595e5752-36a7-4bba-8a40-26920acae01d,595e5752-36a7-4bba-8a40-26920acae01d,0,1,28801fba-c429-4afa-bdcd-b3ec3ec22fda,28801fba-c429-4afa-bdcd-b3ec3ec22fda,0,1,d1a873ae-d45b-4600-9419-e701dce3da02,d1a873ae-d45b-4600-9419-e701dce3da02,0,1,e3a31f0d-a98f-43c6-bc39-087095ae8c39,e3a31f0d-a98f-43c6-bc39-087095ae8c39,0,1,e39d8ff3-52db-4ba4-b4ea-42d5ee787076,e39d8ff3-52db-4ba4-b4ea-42d5ee787076,0,1,b1c1c2eb-f9cd-468a-8398-b0b7f611f832,b1c1c2eb-f9cd-468a-8398-b0b7f611f832,0,1,4bb0f7c3-62f3-4352-9bc8-e243dd18fe4a,4bb0f7c3-62f3-4352-9bc8-e243dd18fe4a,0,1,bc106ef9-3eeb-40d4-aa59-ae1855ba1744,bc106ef9-3eeb-40d4-aa59-ae1855ba1744,0,1,73d8b319-9bea-4638-a602-23c12f37c227,73d8b319-9bea-4638-a602-23c12f37c227,0,1,cef55e64-d4ad-42dc-aa5a-ea65a3af7cfa,cef55e64-d4ad-42dc-aa5a-ea65a3af7cfa,0,1,a43e9de0-2921-4c58-a5f8-7446258be967,a43e9de0-2921-4c58-a5f8-7446258be967,0,1,307656e3-df7f-46e7-946c-bbd439265c95,307656e3-df7f-46e7-946c-bbd439265c95,0,1,eb3dfdc7-58b8-4b1f-b079-368c262364c9,eb3dfdc7-58b8-4b1f-b079-368c262364c9,0,1,5030a318-f8f7-4ec7-80d6-6eee0772562f,5030a318-f8f7-4ec7-80d6-6eee0772562f,0,1,242e911d-e49c-4b8a-8543-cc2e079220fd,242e911d-e49c-4b8a-8543-cc2e079220fd,0,1,9ea39d31-3775-4fb8-a3f3-202e54354d49,9ea39d31-3775-4fb8-a3f3-202e54354d49,0,1,73044e20-148c-46e9-b5b5-973c91de0d61,73044e20-148c-46e9-b5b5-973c91de0d61,0,1,f8ab477c-8e78-48c0-9f99-27748b109706,f8ab477c-8e78-48c0-9f99-27748b109706,0,1,24cff6c8-6c20-4383-b97c-6afa52738960,24cff6c8-6c20-4383-b97c-6afa52738960,0,1,462e2694-750d-49ef-93ac-17a7779be68d,462e2694-750d-49ef-93ac-17a7779be68d,0,1,c24ff02e-5afc-45df-81cf-64ea2b261c2d,c24ff02e-5afc-45df-81cf-64ea2b261c2d,0,1,2d51aae9-650d-4719-a94d-2609b69a2d36,2d51aae9-650d-4719-a94d-2609b69a2d36,0,1,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,0,1,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,0,1,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,0,1,85639a53-b367-49ce-84f2-4e21d81c489b,85639a53-b367-49ce-84f2-4e21d81c489b,0,1,24b59586-178e-4efc-90ae-529553f3bb6c,24b59586-178e-4efc-90ae-529553f3bb6c,0,1,20e75dd5-222a-4100-aa43-3684991e3f21,20e75dd5-222a-4100-aa43-3684991e3f21,0,1,3c611832-4bc2-4229-a27d-d5dc82f3a498,3c611832-4bc2-4229-a27d-d5dc82f3a498,0,1,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,0,1,5dadc422-1fbd-4918-9db3-09ec72c3404e,5dadc422-1fbd-4918-9db3-09ec72c3404e,0,1,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,0,1,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,0,1,c5478d09-c8d3-4cc6-878e-27656ecc8409,c5478d09-c8d3-4cc6-878e-27656ecc8409,0,1,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,0,1,75974146-5b1a-412c-b7d5-1575704bbdab,75974146-5b1a-412c-b7d5-1575704bbdab,0,1,949f87cb-258c-4b6b-95ee-8a7491a4b64e,949f87cb-258c-4b6b-95ee-8a7491a4b64e,0,1,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,0,1,5c089988-5381-41ed-9f05-f85db46b8d94,5c089988-5381-41ed-9f05-f85db46b8d94,0,1,85a36352-1569-4ce4-aeba-477db524c36d,85a36352-1569-4ce4-aeba-477db524c36d,0,1,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,0,1,9a4a0b04-3dfb-4551-90f0-16231f64b14f,9a4a0b04-3dfb-4551-90f0-16231f64b14f,0,1,b2e656c1-f4ff-4d95-b066-4ee11ce4dea8,b2e656c1-f4ff-4d95-b066-4ee11ce4dea8,0,1,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,0,1,98edcd6b-1c50-45c6-9a4c-390827a4ba52,98edcd6b-1c50-45c6-9a4c-390827a4ba52,0,1,b99c2068-15ea-43a1-9e9f-db29647e2387,b99c2068-15ea-43a1-9e9f-db29647e2387,0,1,346cb8b7-a20e-4a06-823e-26dfb2e3e741,346cb8b7-a20e-4a06-823e-26dfb2e3e741,0,1,782cb93d-36e6-4923-b2b6-75caa3459cd6,782cb93d-36e6-4923-b2b6-75caa3459cd6,0,1,0eea37cc-47f8-4819-85da-d4991f4e58ed,0eea37cc-47f8-4819-85da-d4991f4e58ed,0,1,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,0,1,5ea29362-0ab7-4ca3-865e-bf93db5ca24b,5ea29362-0ab7-4ca3-865e-bf93db5ca24b,0,1,64ff6058-c6f3-4682-b9a1-11ec438fa447,64ff6058-c6f3-4682-b9a1-11ec438fa447,0,1,ced01234-9417-49ce-adf0-8cdd15e6dd7d,ced01234-9417-49ce-adf0-8cdd15e6dd7d,0,1,c1272bfc-196a-4f99-935f-e2516bc138d2,c1272bfc-196a-4f99-935f-e2516bc138d2,0,1,aa7ceeee-3b3c-49e2-95c2-bfb34e381aa3,aa7ceeee-3b3c-49e2-95c2-bfb34e381aa3,0,1,313e0688-745a-4385-b040-7ef8317a0eb7,313e0688-745a-4385-b040-7ef8317a0eb7,0,1,7fe61c5d-30bc-440d-9e40-12ff3b296616,7fe61c5d-30bc-440d-9e40-12ff3b296616,0,1,37c37f15-f84b-456b-aab6-729562dc0908,37c37f15-f84b-456b-aab6-729562dc0908,0,1,45a2569e-820c-4d7d-ba74-4a781d26bb2b,45a2569e-820c-4d7d-ba74-4a781d26bb2b,0,1,996c7873-1cc9-44f6-915b-5c6ed7ef2370,996c7873-1cc9-44f6-915b-5c6ed7ef2370,0,1,8dc08932-0988-4e82-8a5f-385c0694f9ff,8dc08932-0988-4e82-8a5f-385c0694f9ff,0,1,13dee5d8-f165-48de-9ccb-3ef0239f4b27,13dee5d8-f165-48de-9ccb-3ef0239f4b27,0,1,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,0,1,8a13c899-1659-48cf-9aa2-07ca99547b7b,8a13c899-1659-48cf-9aa2-07ca99547b7b,0,1,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,0,1,7974e41d-5af3-4636-b405-c9405d89fb53,7974e41d-5af3-4636-b405-c9405d89fb53,0,1,21fad9b6-44df-417c-ba18-de4b8af98a34,21fad9b6-44df-417c-ba18-de4b8af98a34,0,1,11c086b0-c646-4701-983d-c38758286354,11c086b0-c646-4701-983d-c38758286354,0,1,92876c9e-52ff-480d-9878-5766f4f9d12c,92876c9e-52ff-480d-9878-5766f4f9d12c,0,1,b729d739-5249-4765-85ee-fd792bb22911,b729d739-5249-4765-85ee-fd792bb22911,0,1,d65c4485-7bac-4206-9a6c-7156f4bb876d,d65c4485-7bac-4206-9a6c-7156f4bb876d,0,1,d431d1e2-13dc-495c-9de1-b5ec872eceed,d431d1e2-13dc-495c-9de1-b5ec872eceed,0,1,e8bec681-d269-41ba-9184-556cbcc27d74,e8bec681-d269-41ba-9184-556cbcc27d74,0,1,b8aaef91-f72c-4127-a494-771c13694ca4,b8aaef91-f72c-4127-a494-771c13694ca4,0,1,433a114f-3198-4ef6-bbf8-ce9b54fdb736,433a114f-3198-4ef6-bbf8-ce9b54fdb736,0,1,02ac711c-e38e-422e-ac28-ba1b298df9cc,02ac711c-e38e-422e-ac28-ba1b298df9cc,0,1,3e090261-4aa2-4ece-9f77-62df83c890b3,3e090261-4aa2-4ece-9f77-62df83c890b3,0,1,bbfd9834-12b4-49ca-bdae-5c94efa80482,bbfd9834-12b4-49ca-bdae-5c94efa80482,0,1,9292034c-24e8-49a7-9b77-7974e117847d,9292034c-24e8-49a7-9b77-7974e117847d,0,1,3327b7d4-62fc-44cc-83b4-c449bfa4e706,3327b7d4-62fc-44cc-83b4-c449bfa4e706,0,1,43ecee25-68eb-48cf-bbaa-aee71052438f,43ecee25-68eb-48cf-bbaa-aee71052438f,0,1,93799f8b-0188-4546-8815-35e733bcc2b1,93799f8b-0188-4546-8815-35e733bcc2b1,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,899f1526-d6bc-42ef-852e-7297a06db9e3,899f1526-d6bc-42ef-852e-7297a06db9e3,0,1,c694c132-1ddb-4273-818a-d3cca88c082a,c694c132-1ddb-4273-818a-d3cca88c082a,0,1,cd4da06e-c06b-4233-befc-1bc4c4db58e3,cd4da06e-c06b-4233-befc-1bc4c4db58e3,0,1,918a01fe-f753-4a4a-9200-55bbd6edaf5f,918a01fe-f753-4a4a-9200-55bbd6edaf5f,0,1,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,0,1,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,0,1,d6704410-6297-481e-a6cb-6d6aa566b4f8,d6704410-6297-481e-a6cb-6d6aa566b4f8,0,1,398937ca-b035-43bd-b0da-8c5153a87cb8,398937ca-b035-43bd-b0da-8c5153a87cb8,0,1,5b441321-bd1e-4c56-8f09-365b05985eed,5b441321-bd1e-4c56-8f09-365b05985eed,0,1,559f1e66-e8da-437a-aa27-d0e1be6619b6,559f1e66-e8da-437a-aa27-d0e1be6619b6,0,1,704d69cd-d921-4957-a004-43bd7eb4d979,704d69cd-d921-4957-a004-43bd7eb4d979,0,1,f1594682-16ac-408c-8307-a7a8db79b09f,f1594682-16ac-408c-8307-a7a8db79b09f,0,1,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,0,1,4cb814d8-cb1b-4366-b500-e820ad526b0c,4cb814d8-cb1b-4366-b500-e820ad526b0c,0,1,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,0,1,6c43df9f-ca36-415b-afec-302807820d73,6c43df9f-ca36-415b-afec-302807820d73,0,1,c7fb7551-806a-40b2-8879-14cd897b60d8,c7fb7551-806a-40b2-8879-14cd897b60d8,0,1,68337023-d573-4d04-95b6-44f73258c2a4,68337023-d573-4d04-95b6-44f73258c2a4,0,1,7cf39337-b722-486f-8e37-a62239d0ccd2,7cf39337-b722-486f-8e37-a62239d0ccd2,0,1,2571cfaf-d876-4385-a60a-1488aacf7080,2571cfaf-d876-4385-a60a-1488aacf7080,0,1,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,0,1,44398566-3189-4584-8f8a-9deb1d07ce41,44398566-3189-4584-8f8a-9deb1d07ce41,0,1,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,0,1,accfa63a-479d-4996-95bc-cdf5acdf203c,accfa63a-479d-4996-95bc-cdf5acdf203c,0,1,351998e0-8939-4dd4-a833-f4756bcc53b8,351998e0-8939-4dd4-a833-f4756bcc53b8,0,1,cd69bad8-524e-4be4-88cc-7732a88b38b8,cd69bad8-524e-4be4-88cc-7732a88b38b8,0,1,0a32248c-6994-4988-90d1-30882bc9da6b,0a32248c-6994-4988-90d1-30882bc9da6b,0,1,b57b53cb-6972-4bda-ae46-96571be1ebec,b57b53cb-6972-4bda-ae46-96571be1ebec,0,1,1a1a9636-fb72-4e4a-af96-5858442b1e61,1a1a9636-fb72-4e4a-af96-5858442b1e61,0,1,bca9cf34-9e11-4014-976a-28c4330b136e,bca9cf34-9e11-4014-976a-28c4330b136e,0,1,65fffe1a-6f36-4f50-975f-4471ad29d3ec,65fffe1a-6f36-4f50-975f-4471ad29d3ec,0,1,8fe5dad5-686a-4631-ae05-2917c33f7d83,8fe5dad5-686a-4631-ae05-2917c33f7d83,0,1,edef86c6-73bf-4e47-b62d-b2b548a732cd,edef86c6-73bf-4e47-b62d-b2b548a732cd,0,1,a1715044-d76f-4238-ba3e-989d04078d83,a1715044-d76f-4238-ba3e-989d04078d83,0,1,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,0,1,299c47a7-0b30-4f62-8f5c-f087ad6411fb,299c47a7-0b30-4f62-8f5c-f087ad6411fb,0,1,4d4724df-24fb-4c59-9d04-3f984906214a,4d4724df-24fb-4c59-9d04-3f984906214a,0,1,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,0,1,cb9b73ee-8531-48d9-9266-9aaa4336a612,cb9b73ee-8531-48d9-9266-9aaa4336a612,0,1,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,0,1,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,0,1,d042687f-0725-4611-a868-f5b4f6a3a3a8,d042687f-0725-4611-a868-f5b4f6a3a3a8,0,1,bb143340-7fff-49ef-b121-355c96613f78,bb143340-7fff-49ef-b121-355c96613f78,0,1,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,0,1,f2f69644-80dc-4b5e-a208-ed1de131e25e,f2f69644-80dc-4b5e-a208-ed1de131e25e,0,1,73060f72-6d08-47da-aac8-d4d2ed8f871c,73060f72-6d08-47da-aac8-d4d2ed8f871c,0,1,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,0,1,82e8ac21-c2aa-47de-89ae-ea6cc10cc862,82e8ac21-c2aa-47de-89ae-ea6cc10cc862,0,1,13b27ec3-2be9-4959-92e5-94ba7bb64f03,13b27ec3-2be9-4959-92e5-94ba7bb64f03,0,1,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,0,1,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,0,1,821225ea-1bad-49a6-a422-80d8a09baf13,821225ea-1bad-49a6-a422-80d8a09baf13,0,1,d0106f3a-8490-4277-a278-75c318ec252c,d0106f3a-8490-4277-a278-75c318ec252c,0,1,5035aa55-d557-419a-89e2-10ed0f8d109b,5035aa55-d557-419a-89e2-10ed0f8d109b,0,1,5f93d2af-64ff-41cc-8403-4a0e83160fea,5f93d2af-64ff-41cc-8403-4a0e83160fea,0,1,c12c90e4-7c40-489b-b14b-6b9442016e0f,c12c90e4-7c40-489b-b14b-6b9442016e0f,0,1,6371e288-3502-4d66-9006-b5a36107c0b7,6371e288-3502-4d66-9006-b5a36107c0b7,0,1,245814f7-028c-4c13-98eb-15412e851f81,245814f7-028c-4c13-98eb-15412e851f81,0,1,0132e564-2cd3-4930-8962-1068532f4be4,0132e564-2cd3-4930-8962-1068532f4be4,0,1,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,0,1,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,0,1,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,0,1,7021fca5-d612-43e1-927b-7f822153cf75,7021fca5-d612-43e1-927b-7f822153cf75,0,1,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,0,1,ee0a8d23-660a-492b-a813-b57394acee05,ee0a8d23-660a-492b-a813-b57394acee05,0,1,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,0,1,ade21e2e-349f-414b-8f35-6ae3b6a4064d,ade21e2e-349f-414b-8f35-6ae3b6a4064d,0,1,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,0,1,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,0,1,83f51efe-e2af-459a-b59f-2c036124ac23,83f51efe-e2af-459a-b59f-2c036124ac23,0,1,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,0,1,b03829e9-ba22-4584-85f0-c36d63f48242,b03829e9-ba22-4584-85f0-c36d63f48242,0,1,084a7c95-a59b-4861-b8b3-b5710a57ac60,084a7c95-a59b-4861-b8b3-b5710a57ac60,0,1,efcea6da-6746-4e00-913a-14cab38b5d84,efcea6da-6746-4e00-913a-14cab38b5d84,0,1,aff367fb-7fca-44d0-adf9-3731f14834f6,aff367fb-7fca-44d0-adf9-3731f14834f6,0,1,a2782760-dd4c-44d2-a785-814d6f610455,a2782760-dd4c-44d2-a785-814d6f610455,0,1,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,0,1,6581ac1f-11ef-42b8-9f3b-590bb7546e63,6581ac1f-11ef-42b8-9f3b-590bb7546e63,0,1,ce952e88-35b7-4506-81ac-d7081e50a650,ce952e88-35b7-4506-81ac-d7081e50a650,0,1,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,0,1,3bf1281f-7570-4633-86b9-3e953a7e6647,3bf1281f-7570-4633-86b9-3e953a7e6647,0,1,715dc289-5b14-4ee0-8716-9c15958b9069,715dc289-5b14-4ee0-8716-9c15958b9069,0,1,92707138-5004-4378-8477-f909166d319d,92707138-5004-4378-8477-f909166d319d,0,1,43661775-43bb-4d9e-bfbb-c46e7d194ca3,43661775-43bb-4d9e-bfbb-c46e7d194ca3,0,1,532637ef-be0d-4f42-9747-a88e17eb3def,532637ef-be0d-4f42-9747-a88e17eb3def,0,1,61127152-3e24-40b4-8a23-5eb6cae568ff,61127152-3e24-40b4-8a23-5eb6cae568ff,0,1,ffd987e3-e8af-4d46-881e-1e312e74dbac,ffd987e3-e8af-4d46-881e-1e312e74dbac,0,1,ad1142ed-183d-47a3-800c-997a3770e11e,ad1142ed-183d-47a3-800c-997a3770e11e,0,1,ebef37c6-4808-4683-93be-036ce19cafd5,ebef37c6-4808-4683-93be-036ce19cafd5,0,1,66364cd4-aaa5-421d-96d6-3c283c14650d,66364cd4-aaa5-421d-96d6-3c283c14650d,0,1,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,0,1,3c54d440-e908-43d6-a5cc-bb64620c82d7,3c54d440-e908-43d6-a5cc-bb64620c82d7,0,1,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,0,1,bf1dd911-8ee1-407b-acae-10c85b74baf3,bf1dd911-8ee1-407b-acae-10c85b74baf3,0,1,e924058f-25c3-4744-a565-836b824991b7,e924058f-25c3-4744-a565-836b824991b7,0,1,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,0,1,518dcd70-4ccf-4866-a94f-7ceec7dd2801,518dcd70-4ccf-4866-a94f-7ceec7dd2801,0,1,f9950ab5-1077-4033-bbbf-53899a1bcf33,f9950ab5-1077-4033-bbbf-53899a1bcf33,0,1,8f16763b-86f0-4ad0-b786-cce7dcb3460e,8f16763b-86f0-4ad0-b786-cce7dcb3460e,0,1,0481bc65-6a32-46b9-ae87-993ba52a29a5,0481bc65-6a32-46b9-ae87-993ba52a29a5,0,1,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,0,1,dbc5f419-63b0-4cbe-90ff-c0101105e46c,dbc5f419-63b0-4cbe-90ff-c0101105e46c,0,1,c708f6e9-b7a0-4046-90f3-83527da7b872,c708f6e9-b7a0-4046-90f3-83527da7b872,0,1,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,0,1,14256e0a-a947-42a3-8e36-47bfbb052a0c,14256e0a-a947-42a3-8e36-47bfbb052a0c,0,1,1b1aa77a-d14b-4751-a7da-0b5bac4db461,1b1aa77a-d14b-4751-a7da-0b5bac4db461,0,1,c0dcdb22-6719-4597-a781-bca1370909e5,c0dcdb22-6719-4597-a781-bca1370909e5,0,1,7ebf99c3-33d2-4e4c-ac45-ca4ed0c3c100,7ebf99c3-33d2-4e4c-ac45-ca4ed0c3c100,0,1,7a34f723-cd14-4949-a40f-7ce579bf0449,7a34f723-cd14-4949-a40f-7ce579bf0449,0,1,5cdc9ac7-bba9-4ed1-845a-607976fc4679,5cdc9ac7-bba9-4ed1-845a-607976fc4679,0,1,295f3692-0721-4c41-a69b-171ef20a5018,295f3692-0721-4c41-a69b-171ef20a5018,0,1,86c22871-6d1c-44e0-8ade-ce4bdeb23321,86c22871-6d1c-44e0-8ade-ce4bdeb23321,0,1,da51de81-4d4f-46b5-a308-7b50db6c45a7,da51de81-4d4f-46b5-a308-7b50db6c45a7,0,1,8d31ce6a-4d44-46c6-a11c-47fb33e88691,8d31ce6a-4d44-46c6-a11c-47fb33e88691,0,1,c2a8c2d3-ff13-4a13-acd4-797118c4e767,c2a8c2d3-ff13-4a13-acd4-797118c4e767,0,1,bc6adf75-8666-49f3-9703-b0014dfee123,bc6adf75-8666-49f3-9703-b0014dfee123,0,1,30632f54-b779-4857-a5cc-c53fe8887ee5,30632f54-b779-4857-a5cc-c53fe8887ee5,0,1,087480bb-8c89-4b00-a29b-b7e29926478d,087480bb-8c89-4b00-a29b-b7e29926478d,0,1,685373b7-638a-439a-8cba-703d56e4e404,685373b7-638a-439a-8cba-703d56e4e404,0,1,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,0,1,df22b227-b2c3-4e65-9706-7582f99fe59c,df22b227-b2c3-4e65-9706-7582f99fe59c,0,1,35828c88-f1ec-42e7-b189-78748931ee4a,35828c88-f1ec-42e7-b189-78748931ee4a,0,1,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,0,1,1cfba08f-d5e5-4833-b494-a25d0477e9c3,1cfba08f-d5e5-4833-b494-a25d0477e9c3,0,1,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,0,1,921a0a14-8c06-4894-95ce-423000769364,921a0a14-8c06-4894-95ce-423000769364,0,1,3805ee39-a48a-499a-9ef8-9c2a5985404f,3805ee39-a48a-499a-9ef8-9c2a5985404f,0,1,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,0,1,08c2f92c-eb05-49e7-bfc9-4a89607b9864,08c2f92c-eb05-49e7-bfc9-4a89607b9864,0,1,6d751379-89a7-49b5-93e5-578329c63d9c,6d751379-89a7-49b5-93e5-578329c63d9c,0,1,c3f156ef-947e-4ebb-883f-4f099a116063,c3f156ef-947e-4ebb-883f-4f099a116063,0,1,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,0,1,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,0,1,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,0,1,e98e9e56-2995-430c-bd3b-f1070aec15a5,e98e9e56-2995-430c-bd3b-f1070aec15a5,0,1,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,0,1,8a7546f4-bfc9-4732-bf60-43a41e2c8753,8a7546f4-bfc9-4732-bf60-43a41e2c8753,0,1,16244165-d5a4-4012-8bb5-7f5fee1111af,16244165-d5a4-4012-8bb5-7f5fee1111af,0,1,290b72ad-004f-46ab-be5e-47557543b965,290b72ad-004f-46ab-be5e-47557543b965,0,1,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,0,1,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,0,1,263bcd20-9878-48d4-aac4-b371ec49d8d6,263bcd20-9878-48d4-aac4-b371ec49d8d6,0,1,da1d8660-2757-4cea-bae0-c2210b9406ae,da1d8660-2757-4cea-bae0-c2210b9406ae,0,1,d60329c6-8f48-481d-82e7-18da355cb09c,d60329c6-8f48-481d-82e7-18da355cb09c,0,1,c4b14162-b25b-4099-9ec3-7251848ef08a,c4b14162-b25b-4099-9ec3-7251848ef08a,0,1,8eb5ba97-eb38-4357-8bfc-e9618280800d,8eb5ba97-eb38-4357-8bfc-e9618280800d,0,1,b72f73d5-e274-472b-871b-16af72dab603,b72f73d5-e274-472b-871b-16af72dab603,0,1,b008d184-0b61-460d-9490-89ecc1cd58ba,b008d184-0b61-460d-9490-89ecc1cd58ba,0,1,c8340e2f-6958-4bcd-8e17-499c4adfe60b,c8340e2f-6958-4bcd-8e17-499c4adfe60b,0,1,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,0,1,03f68d82-752c-45d1-bf9a-60ecd21a2c81,03f68d82-752c-45d1-bf9a-60ecd21a2c81,0,1,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,0,1,d4fffc79-2841-49a9-a382-e9e4138984df,d4fffc79-2841-49a9-a382-e9e4138984df,0,1,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,0,1,9f41f903-d316-4189-8dc0-603ea9036c1c,9f41f903-d316-4189-8dc0-603ea9036c1c,0,1,e19e70d6-8707-4dde-ae69-7bd97035ca03,e19e70d6-8707-4dde-ae69-7bd97035ca03,0,1,425b5272-1130-457d-8a05-aee8fad681d9,425b5272-1130-457d-8a05-aee8fad681d9,0,1,8d583436-f2a6-4a33-8137-1376f5754643,8d583436-f2a6-4a33-8137-1376f5754643,0,1,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,0,1,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,0,1,2d66502d-77ab-4cc9-9ccf-5433458fae9f,2d66502d-77ab-4cc9-9ccf-5433458fae9f,0,1,cff48da7-3c46-4602-83e8-90c9ea53e107,cff48da7-3c46-4602-83e8-90c9ea53e107,0,1,7155472d-c791-402c-96e1-d25612024c88,7155472d-c791-402c-96e1-d25612024c88,0,1,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,0,1,9005911d-ea81-48b6-bf50-1a328ff4d7be,9005911d-ea81-48b6-bf50-1a328ff4d7be,0,1,7df12006-c0c0-42a6-b852-bdced72c62e3,7df12006-c0c0-42a6-b852-bdced72c62e3,0,1,9c00987d-3c55-40eb-bae8-f36e71e4ef87,9c00987d-3c55-40eb-bae8-f36e71e4ef87,0,1,29273130-5142-48c9-8399-00e5ab4b6203,29273130-5142-48c9-8399-00e5ab4b6203,0,1,9e14cd7e-1293-4008-baf8-88df6a98abf7,9e14cd7e-1293-4008-baf8-88df6a98abf7,0,1,98e3aace-52a6-4911-8205-92165adca6de,98e3aace-52a6-4911-8205-92165adca6de,0,1,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,0,1,577e5fea-b792-4c8b-b3b3-a03a14b64b04,577e5fea-b792-4c8b-b3b3-a03a14b64b04,0,1,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,0,1,b18d312b-f9c3-4f37-ac77-d499e949f154,b18d312b-f9c3-4f37-ac77-d499e949f154,0,1,ace2beea-d393-412f-8b71-b845b665e2c4,ace2beea-d393-412f-8b71-b845b665e2c4,0,1,3fd4bc77-2a1b-4750-a54a-4171c8d40027,3fd4bc77-2a1b-4750-a54a-4171c8d40027,0,1,5b27fde9-fa80-48b1-aea1-73e132b9a944,5b27fde9-fa80-48b1-aea1-73e132b9a944,0,1,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,0,1,a747ec6b-f230-49b4-a929-7ed1ba87b078,a747ec6b-f230-49b4-a929-7ed1ba87b078,0,1,796f8fb4-d9cd-40ae-936b-8a70d2eb1121,796f8fb4-d9cd-40ae-936b-8a70d2eb1121,0,1,4802e016-a9e9-47d0-916b-b42194a1f388,4802e016-a9e9-47d0-916b-b42194a1f388,0,1,a1740d1f-1b8f-4db5-be5e-0eac44e934b8,a1740d1f-1b8f-4db5-be5e-0eac44e934b8,0,1,4062674a-4a81-494d-82bc-4984cd7c7903,4062674a-4a81-494d-82bc-4984cd7c7903,0,1,782a8801-06ca-4d63-bf8b-63d2320766d8,782a8801-06ca-4d63-bf8b-63d2320766d8,0,1,93a73123-d98c-4286-9269-7bfcedd115e8,93a73123-d98c-4286-9269-7bfcedd115e8,0,1,c5985c02-1824-4ce9-b415-1621dd2ee864,c5985c02-1824-4ce9-b415-1621dd2ee864,0,1,993ce747-cdc9-445f-ad7d-daf53cd5f7e9,993ce747-cdc9-445f-ad7d-daf53cd5f7e9,0,1,e819aaf6-3dfb-492a-8a4a-50a7c6854790,e819aaf6-3dfb-492a-8a4a-50a7c6854790,0,1,62b95ba1-f213-42fb-90f3-a03e8094bc9e,62b95ba1-f213-42fb-90f3-a03e8094bc9e,0,1,619b534d-5605-40d3-9b8c-4443a21d7795,619b534d-5605-40d3-9b8c-4443a21d7795,0,1,a010bbf4-d547-4576-9797-28e3096ffed3,a010bbf4-d547-4576-9797-28e3096ffed3,0,1,a44c3eb2-1054-41ca-82e8-fc35336e7009,a44c3eb2-1054-41ca-82e8-fc35336e7009,0,1,01f67911-4ca7-4668-b970-62c299b98e56,01f67911-4ca7-4668-b970-62c299b98e56,0,1,20c89c94-f77f-4e14-8c97-2a70c1419ce3,20c89c94-f77f-4e14-8c97-2a70c1419ce3,0,1,aa509aa3-dd45-41f3-82c7-59662c2e2c47,aa509aa3-dd45-41f3-82c7-59662c2e2c47,0,1,c4552529-e69e-4c5c-bd66-04b2f7dac281,c4552529-e69e-4c5c-bd66-04b2f7dac281,0,1,381b49ba-793a-4418-9fd4-598844fb72a6,381b49ba-793a-4418-9fd4-598844fb72a6,0,1,1aee302d-df31-49ea-b542-436dc1d79ae1,1aee302d-df31-49ea-b542-436dc1d79ae1,0,1,593509da-d33c-49ff-a62c-a28cbc4651c1,593509da-d33c-49ff-a62c-a28cbc4651c1,0,1,5e346a0b-a322-4565-adb9-70131fb05fa3,5e346a0b-a322-4565-adb9-70131fb05fa3,0,1,9a69c559-194b-4f74-9879-82740260f5f6,9a69c559-194b-4f74-9879-82740260f5f6,0,1,93bf1dcf-670d-4c8b-bdbf-e43c2edf8056,93bf1dcf-670d-4c8b-bdbf-e43c2edf8056,0,1,8a06f980-78f3-42f4-9d96-da2e0f0f36a7,8a06f980-78f3-42f4-9d96-da2e0f0f36a7,0,1,fee2aa74-7a81-4ab2-a457-2edf8ac1aa2d,fee2aa74-7a81-4ab2-a457-2edf8ac1aa2d,0,1,2e19fb7b-270f-4181-b4a1-640280bbbc5c,2e19fb7b-270f-4181-b4a1-640280bbbc5c,0,1,aa773eef-0c4a-49be-9f5e-9131bc041415,aa773eef-0c4a-49be-9f5e-9131bc041415,0,1,9b31e474-01d4-4c3b-a633-3a2ff3917d62,9b31e474-01d4-4c3b-a633-3a2ff3917d62,0,1,1c09bf33-9b54-4bfd-bc92-e7324025fab0,1c09bf33-9b54-4bfd-bc92-e7324025fab0,0,1,8d7750e9-899f-4434-8702-44cd02681779,8d7750e9-899f-4434-8702-44cd02681779,0,1,d85244dc-c417-4e69-9aa7-7ad313ecb940,d85244dc-c417-4e69-9aa7-7ad313ecb940,0,1,3bebf5e9-68bb-48dc-a39d-cbdca2dbecb1,3bebf5e9-68bb-48dc-a39d-cbdca2dbecb1,0,1,cd392ef0-dedb-4f83-9a2c-a24190ee0dc0,cd392ef0-dedb-4f83-9a2c-a24190ee0dc0,0,1,bb2f0c1c-3cfb-4a26-b6de-5bbeb5614587,bb2f0c1c-3cfb-4a26-b6de-5bbeb5614587,0,1,0713de12-87d5-4877-bd8a-2b6466df67df,0713de12-87d5-4877-bd8a-2b6466df67df,0,1,b848aafc-44fb-4dfe-8eec-233dc08fbbb6,b848aafc-44fb-4dfe-8eec-233dc08fbbb6,0,1,c4d7c569-4649-4f98-a048-45f3c5933670,c4d7c569-4649-4f98-a048-45f3c5933670,0,1,6dc05d69-bd54-4e8a-8985-c2ddfa0aaffb,6dc05d69-bd54-4e8a-8985-c2ddfa0aaffb,0,1,426cbebb-880b-49c5-b046-83c5e071273e,426cbebb-880b-49c5-b046-83c5e071273e,0,1,ad08b104-01f8-4900-a06c-baa1d55eba84,ad08b104-01f8-4900-a06c-baa1d55eba84,0,1,9352d10d-188f-4074-8dd1-7be5c11525e3,9352d10d-188f-4074-8dd1-7be5c11525e3,0,1,1933634a-6f10-48e7-99f0-60ac338f7832,1933634a-6f10-48e7-99f0-60ac338f7832,0,1,655deec5-c079-4748-8521-b3f10c243394,655deec5-c079-4748-8521-b3f10c243394,0,1,f6d4d818-d54c-4337-82cf-abd5e6dbe770,f6d4d818-d54c-4337-82cf-abd5e6dbe770,0,1,656c447b-291f-4e62-81ac-1c004841aa72,656c447b-291f-4e62-81ac-1c004841aa72,0,1,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,0,1,5ba93404-58ad-4321-9a62-27db828f75f6,5ba93404-58ad-4321-9a62-27db828f75f6,0,1,3da20e86-1d83-4935-b425-a91392dc8f35,3da20e86-1d83-4935-b425-a91392dc8f35,0,1,b56f25d2-72a9-4d80-8998-77ac3097c873,b56f25d2-72a9-4d80-8998-77ac3097c873,0,1,03bd775a-e0a1-4205-82ce-6068e73ad134,03bd775a-e0a1-4205-82ce-6068e73ad134,0,1,40bed47b-7754-4a70-b51a-47385fd46e83,40bed47b-7754-4a70-b51a-47385fd46e83,0,1,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,0,1,1e5a4f93-1ab9-4775-9538-2a1772215d89,1e5a4f93-1ab9-4775-9538-2a1772215d89,0,1,c25db165-0734-4fef-b161-e5164954a616,c25db165-0734-4fef-b161-e5164954a616,0,1,4f97b909-68f9-482a-b958-b4caa9b83763,4f97b909-68f9-482a-b958-b4caa9b83763,0,1,c31e34db-41ff-4db3-a4d0-f780f67070f6,c31e34db-41ff-4db3-a4d0-f780f67070f6,0,1,7a014fcb-a4b8-4c1c-b0de-21907a917c25,7a014fcb-a4b8-4c1c-b0de-21907a917c25,0,1,1688ef5d-72df-4bc4-a879-89033d466ad7,1688ef5d-72df-4bc4-a879-89033d466ad7,0,1,30f18fbf-4240-4708-a71a-189f8fc324f3,30f18fbf-4240-4708-a71a-189f8fc324f3,0,1,344cb0de-315d-4d05-93f8-8a1f53208470,344cb0de-315d-4d05-93f8-8a1f53208470,0,1,cd869887-0b0e-43db-8b51-04fe4a1341d5,cd869887-0b0e-43db-8b51-04fe4a1341d5,0,1,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,0,1,a7973409-b18e-4b88-ad50-e2ae89470d8f,a7973409-b18e-4b88-ad50-e2ae89470d8f,0,1,a537875e-492e-4cf2-96e9-e2e97bb206da,a537875e-492e-4cf2-96e9-e2e97bb206da,0,1,cd8fd85f-f02e-4f11-b4b4-40670febfaca,cd8fd85f-f02e-4f11-b4b4-40670febfaca,0,1,085a08f3-9d93-429d-9b1b-9065ab8363f7,085a08f3-9d93-429d-9b1b-9065ab8363f7,0,1,a530c0a1-c1d2-40bb-9d0e-320074dbb684,a530c0a1-c1d2-40bb-9d0e-320074dbb684,0,1,55c63580-16f1-4d6f-a40b-e630f71ebb98,55c63580-16f1-4d6f-a40b-e630f71ebb98,0,1,0a136ad9-22ad-4ba7-a31a-40a193b49d26,0a136ad9-22ad-4ba7-a31a-40a193b49d26,0,1,208c7b8c-3df9-4441-8ebf-34ffa81572a2,208c7b8c-3df9-4441-8ebf-34ffa81572a2,0,1,8c17fd7c-74d7-496a-a843-42022afb0707,8c17fd7c-74d7-496a-a843-42022afb0707,0,1,091ccac1-9a63-4a89-bb0c-333b274b0c70,091ccac1-9a63-4a89-bb0c-333b274b0c70,0,1,b456d820-8034-4381-960d-66d9f86b0a4b,b456d820-8034-4381-960d-66d9f86b0a4b,0,1,bd55fd03-cf67-4333-a554-98e03d18f780,bd55fd03-cf67-4333-a554-98e03d18f780,0,1,6eac5f7b-0952-4c94-9028-529b14ffcd4f,6eac5f7b-0952-4c94-9028-529b14ffcd4f,0,1,1a7c774d-5b86-4051-b797-3081e19fa30a,1a7c774d-5b86-4051-b797-3081e19fa30a,0,1,00949768-5833-4fe2-8752-b009d1bceef8,00949768-5833-4fe2-8752-b009d1bceef8,0,1,167455d1-6658-409f-834c-f6ccfe7b25de,167455d1-6658-409f-834c-f6ccfe7b25de,0,1,c5b3ca21-8f7b-4933-853c-7d95b17b5631,c5b3ca21-8f7b-4933-853c-7d95b17b5631,0,1,8b0faa1e-09da-4ba4-894e-e86abc5d39df,8b0faa1e-09da-4ba4-894e-e86abc5d39df,0,1,cb50b309-1b6c-400c-9e9e-67204dcccaae,cb50b309-1b6c-400c-9e9e-67204dcccaae,0,1,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,0,1,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,0f565466-19e0-4edb-9827-dab5a2bb47d7,0f565466-19e0-4edb-9827-dab5a2bb47d7,0,1,f1cb02ff-a2f0-4a34-93fa-e47c6e210ee1,f1cb02ff-a2f0-4a34-93fa-e47c6e210ee1,0,1,981a74f4-cdc2-4016-b462-9b5fd0d6de4d,981a74f4-cdc2-4016-b462-9b5fd0d6de4d,0,1,1d89e2b7-8f66-4210-8ab4-29efde5e5295,1d89e2b7-8f66-4210-8ab4-29efde5e5295,0,1,fafff964-8daa-4921-9d53-fd6be3878d94,fafff964-8daa-4921-9d53-fd6be3878d94,0,1,7183d525-212a-42f3-a7e5-eb9deaeaa4a3,7183d525-212a-42f3-a7e5-eb9deaeaa4a3,0,1,b82b27cc-e81c-4b7c-9833-ea4f2ce21edb,b82b27cc-e81c-4b7c-9833-ea4f2ce21edb,0,1,4347f77e-bad9-4525-90a0-794787f03585,4347f77e-bad9-4525-90a0-794787f03585,0,1,cfde3330-2bed-4273-8d69-c213ebdde247,cfde3330-2bed-4273-8d69-c213ebdde247,0,1,2d6ca049-89a5-437e-971c-b8e42f61b460,2d6ca049-89a5-437e-971c-b8e42f61b460,0,1,c450ebe1-4223-4a7a-b9fa-374d5c13dc8c,c450ebe1-4223-4a7a-b9fa-374d5c13dc8c,0,1,271d58d0-4449-40cc-bae9-cc4c50eebd9b,271d58d0-4449-40cc-bae9-cc4c50eebd9b,0,1,58df9322-c786-4dd1-af49-7cd164b378da,58df9322-c786-4dd1-af49-7cd164b378da,0,1,8d48de7f-61d6-4462-9c14-f728206a482c,8d48de7f-61d6-4462-9c14-f728206a482c,0,1,a87e890a-8924-4f56-9e37-04579b95297a,a87e890a-8924-4f56-9e37-04579b95297a,0,1,c71d4fa4-86b0-41e2-8b6a-cfb91e131eaf,c71d4fa4-86b0-41e2-8b6a-cfb91e131eaf,0,1,4c1f2581-ee42-4df5-9169-20205a18a9be,4c1f2581-ee42-4df5-9169-20205a18a9be,0,1,bb3d9ea3-8895-4950-9ee9-4249ca983d48,bb3d9ea3-8895-4950-9ee9-4249ca983d48,0,1,86ea21fa-5ecc-4d81-b6ad-d71e7ed39009,86ea21fa-5ecc-4d81-b6ad-d71e7ed39009,0,1,b806d2b6-bbd1-4abd-9471-7791603a2fcf,b806d2b6-bbd1-4abd-9471-7791603a2fcf,0,1,d7aa519b-9a2e-4946-bd06-9ac22bb7c1e4,d7aa519b-9a2e-4946-bd06-9ac22bb7c1e4,0,1,ecee1ec8-aa1f-4b90-a1b3-2538a53c0dd7,ecee1ec8-aa1f-4b90-a1b3-2538a53c0dd7,0,1,34f50dd9-de16-4013-a2ef-6595d9c28930,34f50dd9-de16-4013-a2ef-6595d9c28930,0,1,56fcca65-3429-4409-bce7-f434f6530a74,56fcca65-3429-4409-bce7-f434f6530a74,0,1,5236ca8d-a4a6-4df8-a6a3-5cfe02c49aeb,5236ca8d-a4a6-4df8-a6a3-5cfe02c49aeb,0,1,bcfabf25-ae2f-4f73-836c-2cab3617a0b6,bcfabf25-ae2f-4f73-836c-2cab3617a0b6,0,1,b286f047-a4d0-4808-b1b4-27997ead6d49,b286f047-a4d0-4808-b1b4-27997ead6d49,0,1,49da2d3a-657a-4cfd-8e37-422b96d2cda5,49da2d3a-657a-4cfd-8e37-422b96d2cda5,0,1,fced16ae-abee-4fbe-9582-dfd368d5610a,fced16ae-abee-4fbe-9582-dfd368d5610a,0,1,afe60bad-1585-487f-9a39-9b9e031f9576,afe60bad-1585-487f-9a39-9b9e031f9576,0,1,4c4f0475-bd11-40c8-af0d-8affec6f838d,4c4f0475-bd11-40c8-af0d-8affec6f838d,0,1,7aee36ac-bbd1-4b06-8266-b7325fb9ce3c,7aee36ac-bbd1-4b06-8266-b7325fb9ce3c,0,1,855439d7-a621-48f5-b6d9-bc2bbd11ad90,855439d7-a621-48f5-b6d9-bc2bbd11ad90,0,1,4e0ec0f0-eb44-41b0-b950-88fdb6ac0db2,4e0ec0f0-eb44-41b0-b950-88fdb6ac0db2,0,1,2f25e742-555b-4db8-bff2-2d345ce2a93a,2f25e742-555b-4db8-bff2-2d345ce2a93a,0,1,303d8c17-4303-4f1d-8bed-51cd7ea0a4b2,303d8c17-4303-4f1d-8bed-51cd7ea0a4b2,0,1,46affd3a-f31c-4432-bd58-2f2b1ed9bc4e,46affd3a-f31c-4432-bd58-2f2b1ed9bc4e,0,1,a7fee9d3-569d-4b5b-bd47-44790e0095f5,a7fee9d3-569d-4b5b-bd47-44790e0095f5,0,1,a258fe12-7e55-4f89-86fa-962b1d2947ac,a258fe12-7e55-4f89-86fa-962b1d2947ac,0,1,93701593-5ac8-4266-b471-7e9ed35a9c3e,93701593-5ac8-4266-b471-7e9ed35a9c3e,0,1,0fdb864e-ede9-4777-835c-0804968ee544,0fdb864e-ede9-4777-835c-0804968ee544,0,1,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,0,1,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,0,1,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,0,1,5dee9814-fe38-4631-8148-8d6c87ef6f47,5dee9814-fe38-4631-8148-8d6c87ef6f47,0,1,37d17053-5c2b-4972-b6a5-a589f2ddbde6,37d17053-5c2b-4972-b6a5-a589f2ddbde6,0,1,c349968a-3f87-425b-8efb-d847934dee4b,c349968a-3f87-425b-8efb-d847934dee4b,0,1,3bb8dc33-970c-4c58-9036-ce716d963847,3bb8dc33-970c-4c58-9036-ce716d963847,0,1,fae0d2e0-1bcd-4a77-86d6-407ca05c1c95,fae0d2e0-1bcd-4a77-86d6-407ca05c1c95,0,1,b3ff39fa-f665-4d01-9a2a-69722e6b1071,b3ff39fa-f665-4d01-9a2a-69722e6b1071,0,1,0abacb0a-ce00-474e-8aec-35685c51ddef,0abacb0a-ce00-474e-8aec-35685c51ddef,0,1,ae407b17-03aa-4268-8603-58d6714dae89,ae407b17-03aa-4268-8603-58d6714dae89,0,1,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,0,1,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,0,1,5bb6e52c-ac26-4143-8e90-f04f703f823b,5bb6e52c-ac26-4143-8e90-f04f703f823b,0,1,579baaa4-6493-4d99-8744-6399757295c7,579baaa4-6493-4d99-8744-6399757295c7,0,1,ae6d0e12-8857-476c-b4b2-f03295cbed3e,ae6d0e12-8857-476c-b4b2-f03295cbed3e,0,1,cc8e3172-491d-45d8-a7eb-fc6c400845cb,cc8e3172-491d-45d8-a7eb-fc6c400845cb,0,1,d7cfc87f-ac09-44aa-91d9-6511c408c5cb,d7cfc87f-ac09-44aa-91d9-6511c408c5cb,0,1,7ee1e0d0-9735-45da-bd24-c0dbabfd5b1e,7ee1e0d0-9735-45da-bd24-c0dbabfd5b1e,0,1,bd0e3bd4-1207-41ea-8dfc-afa8f7d08cc2,bd0e3bd4-1207-41ea-8dfc-afa8f7d08cc2,0,1,51d83895-5692-4479-9612-07c790d19dff,51d83895-5692-4479-9612-07c790d19dff,0,1,9c1325af-7492-42be-b3af-51b692534510,9c1325af-7492-42be-b3af-51b692534510,0,1,dface15c-cd65-4fb1-b4dd-b513086d3f8e,dface15c-cd65-4fb1-b4dd-b513086d3f8e,0,1,d854b528-8456-4453-9c2d-4f96caf10481,d854b528-8456-4453-9c2d-4f96caf10481,0,1,245f870e-a53a-4d86-aa0a-c0c7709b8acb,245f870e-a53a-4d86-aa0a-c0c7709b8acb,0,1,476f6bfa-b10c-4e0f-8499-23c652715b3f,476f6bfa-b10c-4e0f-8499-23c652715b3f,0,1,65c9754b-53f6-4616-a9d4-74826f7b0ced,65c9754b-53f6-4616-a9d4-74826f7b0ced,0,1,eca2b076-d218-4d1c-948b-7894edf9fa49,eca2b076-d218-4d1c-948b-7894edf9fa49,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,40a59681-f31d-4fb9-9301-67c1430590e0,40a59681-f31d-4fb9-9301-67c1430590e0,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,9c3bc502-bcb1-4c90-ae43-53c798958339,9c3bc502-bcb1-4c90-ae43-53c798958339,0,1,3f8b6411-6606-4d27-891e-7c77be47c5f9,3f8b6411-6606-4d27-891e-7c77be47c5f9,0,1,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,0,1,5eb4ca7f-027a-4860-a167-e6b424527e7a,5eb4ca7f-027a-4860-a167-e6b424527e7a,0,1,f9b98ba5-1fa8-42a4-b1a2-dd71874083cb,f9b98ba5-1fa8-42a4-b1a2-dd71874083cb,0,1,6871015f-d959-4a77-a091-a23cb4ebd8f9,6871015f-d959-4a77-a091-a23cb4ebd8f9,0,1,e5e1631b-a494-4e73-b356-b4330b84cc88,e5e1631b-a494-4e73-b356-b4330b84cc88,0,1,f8f0857f-2c75-471a-ae0b-a3a265e1eb25,f8f0857f-2c75-471a-ae0b-a3a265e1eb25,0,1,a23f97fb-7ac9-4941-a2c6-bbff6c36ac12,a23f97fb-7ac9-4941-a2c6-bbff6c36ac12,0,1,80cf54ed-8677-4c89-a378-0abef6c64010,80cf54ed-8677-4c89-a378-0abef6c64010,0,1,f0dec7b3-2d6a-44ce-a1da-9c71ccd37539,f0dec7b3-2d6a-44ce-a1da-9c71ccd37539,0,1,56ee3afd-5ae6-421e-b9f3-26505e40f100,56ee3afd-5ae6-421e-b9f3-26505e40f100,0,1,63c9a839-78b2-4706-b380-5aedf6914930,63c9a839-78b2-4706-b380-5aedf6914930,0,1,40f5c1cb-2654-4738-bb44-6734b0e3490b,40f5c1cb-2654-4738-bb44-6734b0e3490b,0,1,2ec484b1-95eb-43a7-9430-1c1ef49f05af,2ec484b1-95eb-43a7-9430-1c1ef49f05af,0,1,1a314ce2-03bc-4267-89a9-bb5bb866f552,1a314ce2-03bc-4267-89a9-bb5bb866f552,0,1,e3b783a6-5ea2-4cd4-955b-df63d93c1f25,e3b783a6-5ea2-4cd4-955b-df63d93c1f25,0,1,f8ab62ad-7776-49ae-b1bb-51bea9a9992b,f8ab62ad-7776-49ae-b1bb-51bea9a9992b,0,1,e859dd18-8baf-49c0-b7a0-1205b6c125d3,e859dd18-8baf-49c0-b7a0-1205b6c125d3,0,1,da59378e-0a97-4cff-977b-cc51967068ee,da59378e-0a97-4cff-977b-cc51967068ee,0,1,bbaad46d-f60d-49e6-a077-075366bca47e,bbaad46d-f60d-49e6-a077-075366bca47e,0,1,0d9f5703-91e4-4769-bedd-5bd974f2f617,0d9f5703-91e4-4769-bedd-5bd974f2f617,0,1,926cdf17-1929-43d6-8205-858aab558ad9,926cdf17-1929-43d6-8205-858aab558ad9,0,1,5ec6838f-2d70-4f91-b41b-16adfe8ed587,5ec6838f-2d70-4f91-b41b-16adfe8ed587,0,1,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,0,1,bee8b8a0-f058-44cb-822c-620351567627,bee8b8a0-f058-44cb-822c-620351567627,0,1,26365e29-903b-47fd-ad96-e0d87f5d6e87,26365e29-903b-47fd-ad96-e0d87f5d6e87,0,1,569180cb-ce54-4267-94b9-332e35e3c17d,569180cb-ce54-4267-94b9-332e35e3c17d,0,1,9ec6fc35-e84e-4f82-b616-5c02e945cc8f,9ec6fc35-e84e-4f82-b616-5c02e945cc8f,0,1,a2c42946-1cdb-457a-a45b-97781cfb4a15,a2c42946-1cdb-457a-a45b-97781cfb4a15,0,1,20adf54c-044c-4bea-8028-b6d20917a030,20adf54c-044c-4bea-8028-b6d20917a030,0,1,dea6b05f-d3e1-4ff4-8f71-6a0c18134e94,dea6b05f-d3e1-4ff4-8f71-6a0c18134e94,0,1,fcb97a46-d5fd-4bb5-b899-17723a9fe346,fcb97a46-d5fd-4bb5-b899-17723a9fe346,0,1,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,0,1,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,0,1,a1a44832-6026-47ae-affd-5b6d52e84307,a1a44832-6026-47ae-affd-5b6d52e84307,0,1,d2fd8650-d13a-411d-8206-61b16016bd82,d2fd8650-d13a-411d-8206-61b16016bd82,0,1,f98bcdb8-6eed-4b4f-b3da-d80b5e8bed44,f98bcdb8-6eed-4b4f-b3da-d80b5e8bed44,0,1,a92acf0e-9132-4456-9a82-1543d98ca453,a92acf0e-9132-4456-9a82-1543d98ca453,0,1,4033eb31-8281-402a-afff-431fa36e589e,4033eb31-8281-402a-afff-431fa36e589e,0,1,5a1e1da5-7307-4f48-bb1c-2977fc4d7cef,5a1e1da5-7307-4f48-bb1c-2977fc4d7cef,0,1,f59488c7-4643-4988-8043-5c9724e04279,f59488c7-4643-4988-8043-5c9724e04279,0,1,cfe022b5-7647-4b5c-a2bd-f5d313f4a9db,cfe022b5-7647-4b5c-a2bd-f5d313f4a9db,0,1,3c0a9c45-8e57-43fa-8ae3-26b15571f2cd,3c0a9c45-8e57-43fa-8ae3-26b15571f2cd,0,1,85223d37-2503-4783-94dc-fe6265e718d5,85223d37-2503-4783-94dc-fe6265e718d5,0,1,0918cd76-56e5-4314-8a1c-c21d023ba6f8,0918cd76-56e5-4314-8a1c-c21d023ba6f8,0,1,9db21c2e-79fa-44e4-902e-416abfccb54a,9db21c2e-79fa-44e4-902e-416abfccb54a,0,1,fb082db3-197b-4d1e-b9ea-362624d547ee,fb082db3-197b-4d1e-b9ea-362624d547ee,0,1,c09dcf00-a45a-4487-99c5-d3a37956ec88,c09dcf00-a45a-4487-99c5-d3a37956ec88,0,1,531a5a0c-6ac9-4e93-8caa-42d9aad0bc82,531a5a0c-6ac9-4e93-8caa-42d9aad0bc82,0,1,2714e1b6-6b02-43a1-bc94-2934b429ed35,2714e1b6-6b02-43a1-bc94-2934b429ed35,0,1,e33c73b2-ef0b-49b7-a65f-ab2c814ad256,e33c73b2-ef0b-49b7-a65f-ab2c814ad256,0,1,4c7016da-9991-4917-8eaa-e760cc9e29d1,4c7016da-9991-4917-8eaa-e760cc9e29d1,0,1,d7b57669-e538-4e54-ab1b-8428f0586466,d7b57669-e538-4e54-ab1b-8428f0586466,0,1,9c484a15-039e-416d-af97-4c2bd90fd873,9c484a15-039e-416d-af97-4c2bd90fd873,0,1,534855e3-4cf2-471c-b982-7138917050c9,534855e3-4cf2-471c-b982-7138917050c9,0,1,4c72b944-d000-4920-aec8-54029f88ddf4,4c72b944-d000-4920-aec8-54029f88ddf4,0,1,b4033d05-05c2-4617-80d9-abfa389c47f4,b4033d05-05c2-4617-80d9-abfa389c47f4,0,1,aa29e1be-4e99-4136-8dc1-0124908979ad,aa29e1be-4e99-4136-8dc1-0124908979ad,0,1,0d76799d-7fc7-446b-88fb-dca839de00a5,0d76799d-7fc7-446b-88fb-dca839de00a5,0,1,cb5674c3-0d91-4948-bafd-d9ef44a2a69d,cb5674c3-0d91-4948-bafd-d9ef44a2a69d,0,1,ea4a869c-861c-412c-a3be-de1c57d1a251,ea4a869c-861c-412c-a3be-de1c57d1a251,0,1,eeafcc8c-fbe2-4bb4-8b8a-cf663208258d,eeafcc8c-fbe2-4bb4-8b8a-cf663208258d,0,1,6a3bd39a-59cb-4763-b49f-7ab67167a8b7,6a3bd39a-59cb-4763-b49f-7ab67167a8b7,0,1,50ac390d-324f-40bd-b3df-0468a63b94b6,50ac390d-324f-40bd-b3df-0468a63b94b6,0,1,80337710-2c60-45c4-ae1f-bb42731fb611,80337710-2c60-45c4-ae1f-bb42731fb611,0,1,9dcf467e-7701-4c7b-b747-95f4d9b9295c,9dcf467e-7701-4c7b-b747-95f4d9b9295c,0,1,77149f7a-8a76-4569-9487-991c41e132ef,77149f7a-8a76-4569-9487-991c41e132ef,0,1,9e1be65e-986f-4d21-91f0-15c66db0c947,9e1be65e-986f-4d21-91f0-15c66db0c947,0,1,75a0f8f1-6d8d-47d0-81c5-20b5e55b9cd1,75a0f8f1-6d8d-47d0-81c5-20b5e55b9cd1,0,1,d2fe4578-a1f8-4586-b052-fa71d25365c9,d2fe4578-a1f8-4586-b052-fa71d25365c9,0,1,f31f3dab-5796-47ac-a54d-3081f8cad817,f31f3dab-5796-47ac-a54d-3081f8cad817,0,1,cd59707e-b9e4-4038-8203-ae22a8060e8d,cd59707e-b9e4-4038-8203-ae22a8060e8d,0,1,db497857-33d3-49a1-b328-dfc62c973ecb,db497857-33d3-49a1-b328-dfc62c973ecb,0,1,139c001c-7b07-465a-9187-399ad32d294f,139c001c-7b07-465a-9187-399ad32d294f,0,1,5d228ce4-069e-4f98-beed-b8e1de17c3d9,5d228ce4-069e-4f98-beed-b8e1de17c3d9,0,1,9770fc09-87bf-4fce-9b0d-410efd30edae,9770fc09-87bf-4fce-9b0d-410efd30edae,0,1,f3d8590a-dcfa-4d41-8d03-642b99ffa040,f3d8590a-dcfa-4d41-8d03-642b99ffa040,0,1,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,0,1,20156709-1481-4007-8e89-9ce79fc589fc,20156709-1481-4007-8e89-9ce79fc589fc,0,1,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,0,1,7e7c5abd-b645-4de5-a40e-5805ec4456e2,7e7c5abd-b645-4de5-a40e-5805ec4456e2,0,1,763a16c3-a728-4b65-a485-705990310b4a,763a16c3-a728-4b65-a485-705990310b4a,0,1,65338920-c744-4d1e-b351-848b90a3feda,65338920-c744-4d1e-b351-848b90a3feda,0,1,2aedb1ac-caf1-45c7-913e-82a36637d5d4,2aedb1ac-caf1-45c7-913e-82a36637d5d4,0,1,e177e258-7d0c-4fe1-80e5-3b89de9e23d9,e177e258-7d0c-4fe1-80e5-3b89de9e23d9,0,1,3f25ac9f-c6b4-4ccc-bec4-a90c99403823,3f25ac9f-c6b4-4ccc-bec4-a90c99403823,0,1,56177464-5e9f-4598-96bc-eb311993c503,56177464-5e9f-4598-96bc-eb311993c503,0,1,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,0,1,bdfe65f4-4174-4e66-915c-943137981cf0,bdfe65f4-4174-4e66-915c-943137981cf0,0,1,5271de2d-d3a0-4128-90e0-cd8e1ea2ad30,5271de2d-d3a0-4128-90e0-cd8e1ea2ad30,0,1,c895d58a-5be1-4157-81af-f4f6db9b4b9e,c895d58a-5be1-4157-81af-f4f6db9b4b9e,0,1,8ce6cc1a-8570-4704-b9a3-44e815b2e753,8ce6cc1a-8570-4704-b9a3-44e815b2e753,0,1,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,0,1,497cbe4d-586d-48a2-8e98-d20e3e09ed42,497cbe4d-586d-48a2-8e98-d20e3e09ed42,0,1,38b7679d-3739-4572-baf2-d8c7b2a94f0a,38b7679d-3739-4572-baf2-d8c7b2a94f0a,0,1,1470f052-f032-46bc-b1ee-54555e725dfd,1470f052-f032-46bc-b1ee-54555e725dfd,0,1,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,0,1,7d336fdd-5cbf-4c92-a783-f451f7590502,7d336fdd-5cbf-4c92-a783-f451f7590502,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,bc10ad8f-383c-469a-8c0e-60805161055b,bc10ad8f-383c-469a-8c0e-60805161055b,0,1,86760ecb-2ddd-40ce-bc4f-94c23027a55e,86760ecb-2ddd-40ce-bc4f-94c23027a55e,0,1,6fbf844e-ee8d-490f-9177-6392d262312f,6fbf844e-ee8d-490f-9177-6392d262312f,0,1,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,0,1,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,0,1,37722a34-1148-4cc8-95e6-4645ae9cca98,37722a34-1148-4cc8-95e6-4645ae9cca98,0,1,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,0,1,cc34bd23-de0a-4b09-8333-e4693576b9f4,cc34bd23-de0a-4b09-8333-e4693576b9f4,0,1,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,0,1,903af13a-1f73-4145-a3d0-971c3be5fbe6,903af13a-1f73-4145-a3d0-971c3be5fbe6,0,1,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,0,1,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,0,1,953dbad6-4f5c-4319-874a-db358a77d001,953dbad6-4f5c-4319-874a-db358a77d001,0,1,05243f56-7e9b-4a61-8efb-1b5e525fff21,05243f56-7e9b-4a61-8efb-1b5e525fff21,0,1,7aa86a2d-2b47-447e-8901-806411011279,7aa86a2d-2b47-447e-8901-806411011279,0,1,fca0dfad-f853-4694-9ce9-53a3a10f59b7,fca0dfad-f853-4694-9ce9-53a3a10f59b7,0,1,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,0,1,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,0,1,b4cb92fb-ad82-44ed-9203-397b412b3453,b4cb92fb-ad82-44ed-9203-397b412b3453,0,1,69ceac29-06d3-45f2-b914-7966465cd0d3,69ceac29-06d3-45f2-b914-7966465cd0d3,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,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,0,1,150c9d05-4ccc-4cb7-879d-b1d9c3534343,150c9d05-4ccc-4cb7-879d-b1d9c3534343,0,1,65000437-bd07-4841-a458-679d44768c46,65000437-bd07-4841-a458-679d44768c46,0,1,1281fe19-bbca-4a4f-84d8-14187e62000f,1281fe19-bbca-4a4f-84d8-14187e62000f,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,612f3b95-d7db-4b33-92b5-4873205b424b,612f3b95-d7db-4b33-92b5-4873205b424b,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,58cdbd20-a7f4-4c4c-8a4e-638714cc2699,58cdbd20-a7f4-4c4c-8a4e-638714cc2699,0,1,616cd2cc-eaf4-4586-bca1-c044429b491a,616cd2cc-eaf4-4586-bca1-c044429b491a,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,81d900be-ddc1-417f-ae2c-1aacf040de9a,81d900be-ddc1-417f-ae2c-1aacf040de9a,0,1,c65f69ce-be78-4e8d-b91d-293c4108ce77,c65f69ce-be78-4e8d-b91d-293c4108ce77,0,1,521a5717-0b38-401d-bd72-30cee219bd14,521a5717-0b38-401d-bd72-30cee219bd14,0,1,977c30dc-6f27-4931-9fd5-d12ed147e3ec,977c30dc-6f27-4931-9fd5-d12ed147e3ec,0,1,eea4f72e-dd1b-46c7-b270-876a482236b3,eea4f72e-dd1b-46c7-b270-876a482236b3,0,1,25e8d286-dfbb-4fdf-974b-fe3f6f76eac0,25e8d286-dfbb-4fdf-974b-fe3f6f76eac0,0,1,2d249dad-8b4f-462b-ab13-892639a6e071,2d249dad-8b4f-462b-ab13-892639a6e071,0,1,f6249bf4-d2e7-48f3-808f-d776915d14cb,f6249bf4-d2e7-48f3-808f-d776915d14cb,0,1,75f11ecd-c87a-4a14-a7ca-c755f63d7cf8,75f11ecd-c87a-4a14-a7ca-c755f63d7cf8,0,1,883cdeb0-e747-4157-bbe7-0ebc423a82af,883cdeb0-e747-4157-bbe7-0ebc423a82af,0,1,ba62ac73-91da-4dad-abc7-3cf8acf7e315,ba62ac73-91da-4dad-abc7-3cf8acf7e315,0,1,6a71416d-dba1-4883-9264-597ecf9d6270,6a71416d-dba1-4883-9264-597ecf9d6270,0,1,ce3fc202-7893-4d1b-9c8f-1b3349a5c147,ce3fc202-7893-4d1b-9c8f-1b3349a5c147,0,1,6593baab-fce0-49ed-867e-be242bfc08d7,6593baab-fce0-49ed-867e-be242bfc08d7,0,1,403390cf-d3f8-4dfa-b83d-e2fca4ee0dff,403390cf-d3f8-4dfa-b83d-e2fca4ee0dff,0,1,57aed64d-da61-4c18-af21-dab3afdc5c03,57aed64d-da61-4c18-af21-dab3afdc5c03,0,1,452822b4-a590-44db-ab77-d8c01f7300e7,452822b4-a590-44db-ab77-d8c01f7300e7,0,1,62a71ba7-3226-4d10-8cc9-ac9908a00ae7,62a71ba7-3226-4d10-8cc9-ac9908a00ae7,0,1,6ce1d71d-7548-4ee7-be78-21ae23d5a08d,6ce1d71d-7548-4ee7-be78-21ae23d5a08d,0,1,f5ad6743-b19b-44c4-b3d1-2e39d74a4abd,f5ad6743-b19b-44c4-b3d1-2e39d74a4abd,0,1,4b89b7fb-31d9-43c7-9f7e-b0c31fa3331d,4b89b7fb-31d9-43c7-9f7e-b0c31fa3331d,0,1,19b29d30-e395-42f2-b700-7474bb2cdcb7,19b29d30-e395-42f2-b700-7474bb2cdcb7,0,1,b0deb957-624b-4bcb-824c-76aedf1affe9,b0deb957-624b-4bcb-824c-76aedf1affe9,0,1,9934e608-593d-45d0-9df3-539f0c8fc385,9934e608-593d-45d0-9df3-539f0c8fc385,0,1,80da4126-4319-425f-8427-7d60652cf754,80da4126-4319-425f-8427-7d60652cf754,0,1,05236ace-bcdd-4eb8-a1fb-5843ee311d10,05236ace-bcdd-4eb8-a1fb-5843ee311d10,0,1,0f1b284c-6c9e-4799-bc47-3326c4b7bec2,0f1b284c-6c9e-4799-bc47-3326c4b7bec2,0,1,449060fd-4711-4b9e-93e0-11b35c314fb3,449060fd-4711-4b9e-93e0-11b35c314fb3,0,1,e7efa9d5-ea93-4070-87bb-a4d95116d1b4,e7efa9d5-ea93-4070-87bb-a4d95116d1b4,0,1,0614d340-6524-4715-978d-87ab21377e72,0614d340-6524-4715-978d-87ab21377e72,0,1,d47daac5-ec3b-4d4e-8b01-045a37f7074d,d47daac5-ec3b-4d4e-8b01-045a37f7074d,0,1,9d6ed3b9-35cd-47c0-9dfc-732e5066a071,9d6ed3b9-35cd-47c0-9dfc-732e5066a071,0,1,912cbd30-1ed5-4888-a4b6-98e9215b28e9,912cbd30-1ed5-4888-a4b6-98e9215b28e9,0,1,abf093ce-be63-487d-8be4-be282aa475be,abf093ce-be63-487d-8be4-be282aa475be,0,1,7a910ad6-b922-4716-8140-1540d76296b2,7a910ad6-b922-4716-8140-1540d76296b2,0,1,a52450c7-af49-4f92-862f-47015826b447,a52450c7-af49-4f92-862f-47015826b447,0,1,2a19f8a7-4f9f-4e47-a8f4-271a6a13ddc0,2a19f8a7-4f9f-4e47-a8f4-271a6a13ddc0,0,1,3efa225a-db76-479a-b2fa-a40fd0ffb720,3efa225a-db76-479a-b2fa-a40fd0ffb720,0,1,807dd284-31cc-4725-8463-26b31a75d6bc,807dd284-31cc-4725-8463-26b31a75d6bc,0,1,00b7d44c-3f8a-4120-91f3-a63f073d8b37,00b7d44c-3f8a-4120-91f3-a63f073d8b37,0,1,d64f073e-4b58-4020-9233-ca8fbdcf85b2,d64f073e-4b58-4020-9233-ca8fbdcf85b2,0,1,b8931f98-c1d7-4e9b-be43-065064e7ba95,b8931f98-c1d7-4e9b-be43-065064e7ba95,0,1,ab2b472d-97d5-4c33-86fd-e2cdaedf3f3d,ab2b472d-97d5-4c33-86fd-e2cdaedf3f3d,0,1,60848308-931c-4da3-aa4b-37f6fb4b194f,60848308-931c-4da3-aa4b-37f6fb4b194f,0,1,08af8da8-d44b-46f0-a8d3-60421e7b5a1a,08af8da8-d44b-46f0-a8d3-60421e7b5a1a,0,1,54b14504-503b-45f6-9b5d-785b49829425,54b14504-503b-45f6-9b5d-785b49829425,0,1,80d3ee33-1cdc-4af6-85c2-787094526592,80d3ee33-1cdc-4af6-85c2-787094526592,0,1,c8b28660-6cb0-4ef5-85c2-a75da863ba96,c8b28660-6cb0-4ef5-85c2-a75da863ba96,0,1,1cd607b4-49fc-460e-a014-6afe50083b47,1cd607b4-49fc-460e-a014-6afe50083b47,0,1,a215e767-36e9-4408-9d18-7b4be757022a,a215e767-36e9-4408-9d18-7b4be757022a,0,1,a3e262bc-9f0d-480d-a1d1-c2326105d22d,a3e262bc-9f0d-480d-a1d1-c2326105d22d,0,1,8eae0c79-288b-4773-90bb-49299ad45628,8eae0c79-288b-4773-90bb-49299ad45628,0,1,2faa5594-f1b4-4312-b674-82fdf9623105,2faa5594-f1b4-4312-b674-82fdf9623105,0,1,185c1ad3-b5db-49b6-9342-d08e1bf64903,185c1ad3-b5db-49b6-9342-d08e1bf64903,0,1,3c69a4ad-001d-4421-88f6-412e15d710d6,3c69a4ad-001d-4421-88f6-412e15d710d6,0,1,d0373603-5abb-4f7b-8d2f-9f7fb52615aa,d0373603-5abb-4f7b-8d2f-9f7fb52615aa,0,1,f20a35fe-6029-4dc8-b6b4-b098dbce12e8,f20a35fe-6029-4dc8-b6b4-b098dbce12e8,0,1,6a68a08a-ea37-4573-ab9f-ec822f6d250b,6a68a08a-ea37-4573-ab9f-ec822f6d250b,0,1,00e87d04-8104-420b-b2c6-7304889a75b2,00e87d04-8104-420b-b2c6-7304889a75b2,0,1,bde86820-f7bb-463b-97d0-bfa5f8323af0,bde86820-f7bb-463b-97d0-bfa5f8323af0,0,1,289a6aac-dc4e-4fae-8815-853e78d450bb,289a6aac-dc4e-4fae-8815-853e78d450bb,0,1,557e7d89-83ed-45d0-86cc-6e355f14025d,557e7d89-83ed-45d0-86cc-6e355f14025d,0,1,d681b26b-dd8d-46d7-986e-10f05c37a1e4,d681b26b-dd8d-46d7-986e-10f05c37a1e4,0,1,4d3c216e-c04f-4884-8681-1c861c50ce7d,4d3c216e-c04f-4884-8681-1c861c50ce7d,0,1,4a41eee0-c973-4824-a07c-9fcf731f055e,4a41eee0-c973-4824-a07c-9fcf731f055e,0,1,ee756c33-f408-4449-a6bb-3186a0421362,ee756c33-f408-4449-a6bb-3186a0421362,0,1,fbfa8f64-52e4-48f6-b0fb-fd06976dd93d,fbfa8f64-52e4-48f6-b0fb-fd06976dd93d,0,1,6ff66622-4d20-4696-9fe9-4b4faeb21d96,6ff66622-4d20-4696-9fe9-4b4faeb21d96,0,1,46237eec-c206-4d21-883c-27599b9ed38c,46237eec-c206-4d21-883c-27599b9ed38c,0,1,8b451909-2c15-48f2-b869-65e7031cc542,8b451909-2c15-48f2-b869-65e7031cc542,0,1,ab6ff81a-56aa-4742-afe4-d7a652e9d2de,ab6ff81a-56aa-4742-afe4-d7a652e9d2de,0,1,7b377fca-4466-476f-9eb2-0b00141103d6,7b377fca-4466-476f-9eb2-0b00141103d6,0,1,9ce5eceb-f366-4035-956e-62721358b154,9ce5eceb-f366-4035-956e-62721358b154,0,1,1685c406-d0cb-4e0a-a3b0-036c8c22942a,1685c406-d0cb-4e0a-a3b0-036c8c22942a,0,1,892dc4c4-a72b-4dbf-af62-9f9ae0e05aa1,892dc4c4-a72b-4dbf-af62-9f9ae0e05aa1,0,1,81db41a6-2580-4a69-b1fd-57cfd48a7efa,81db41a6-2580-4a69-b1fd-57cfd48a7efa,0,1,0db8b3b2-bf24-4006-9897-797084c241ef,0db8b3b2-bf24-4006-9897-797084c241ef,0,1,fd9d34d9-9c9c-4c05-9c08-b93d4b237adf,fd9d34d9-9c9c-4c05-9c08-b93d4b237adf,0,1,381b7dae-6b34-42a7-9fee-2a4af8a1cc18,381b7dae-6b34-42a7-9fee-2a4af8a1cc18,0,1,31e9ca0d-9ae1-4740-a0a6-2739aa29c99f,31e9ca0d-9ae1-4740-a0a6-2739aa29c99f,0,1,20091427-d173-40ca-b2c4-53ee99b0b5ae,20091427-d173-40ca-b2c4-53ee99b0b5ae,0,1,14cbde39-a39a-48e5-9b72-b798a0bcea3f,14cbde39-a39a-48e5-9b72-b798a0bcea3f,0,1,56871c10-e3af-4679-afad-3baa910d73bb,56871c10-e3af-4679-afad-3baa910d73bb,0,1,f81b51c5-57e4-41f8-9ad5-3d2717351b95,f81b51c5-57e4-41f8-9ad5-3d2717351b95,0,1,3c09f0cd-fbec-46ae-95b0-a00cc53c07ef,3c09f0cd-fbec-46ae-95b0-a00cc53c07ef,0,1,de0a39e0-d37d-47c6-a019-e44836edc8d1,de0a39e0-d37d-47c6-a019-e44836edc8d1,0,1,1fdcc1e7-ad53-409e-ba13-84c6429740cd,1fdcc1e7-ad53-409e-ba13-84c6429740cd,0,1,71d544bf-15c1-4581-8baa-ac126308425c,71d544bf-15c1-4581-8baa-ac126308425c,0,1,1bd0b688-d0fb-4ca2-85aa-4bd82b72ccc2,1bd0b688-d0fb-4ca2-85aa-4bd82b72ccc2,0,1,7acfe30e-73cb-465a-88f2-92b7275dc49b,7acfe30e-73cb-465a-88f2-92b7275dc49b,0,1,8e387dac-5029-49da-a013-355df0a51a44,8e387dac-5029-49da-a013-355df0a51a44,0,1,13859664-8307-40e8-855b-557b9cf2f1ec,13859664-8307-40e8-855b-557b9cf2f1ec,0,1,e4397fba-507f-497c-9414-7d08ccd4d799,e4397fba-507f-497c-9414-7d08ccd4d799,0,1,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,0,1,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,0,1,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,0,1,d915d338-3e4c-45c3-aef5-a07cf41b05f6,d915d338-3e4c-45c3-aef5-a07cf41b05f6,0,1,978640a2-5c4b-4e21-857e-34f00840fba8,978640a2-5c4b-4e21-857e-34f00840fba8,0,1,da2913e3-a29b-423f-9aae-08fed56a7d90,da2913e3-a29b-423f-9aae-08fed56a7d90,0,1,149e72b8-cc03-4b4f-8ca4-07987600c34d,149e72b8-cc03-4b4f-8ca4-07987600c34d,0,1,7649bd7b-fe8c-4338-80fc-153160a5e538,7649bd7b-fe8c-4338-80fc-153160a5e538,0,1,7779cd6d-8fa1-49cb-9bbc-9dfd0979f3f4,7779cd6d-8fa1-49cb-9bbc-9dfd0979f3f4,0,1,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,0,1,6137605e-4850-44ec-b4ee-048bd8e0ec3a,6137605e-4850-44ec-b4ee-048bd8e0ec3a,0,1,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,0,1,0e6e9372-beb4-478e-9428-71b19a60739b,0e6e9372-beb4-478e-9428-71b19a60739b,0,1,32b11498-542f-46b2-829f-1525936ab7fa,32b11498-542f-46b2-829f-1525936ab7fa,0,1,64afa916-4750-4008-8c6c-2a470fb11283,64afa916-4750-4008-8c6c-2a470fb11283,0,1,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,0,1,35354abc-9a76-4ee8-8796-c24b37365ea0,35354abc-9a76-4ee8-8796-c24b37365ea0,0,1,7078977f-31bf-427e-ac37-e309d81fe999,7078977f-31bf-427e-ac37-e309d81fe999,0,1,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,0,1,d8854555-9e15-4d82-a1fd-656a848a8e8a,d8854555-9e15-4d82-a1fd-656a848a8e8a,0,1,53191842-ea05-4491-84d7-071cd201992d,53191842-ea05-4491-84d7-071cd201992d,0,1,86c70449-4cf7-4baf-9742-b82b134ed929,86c70449-4cf7-4baf-9742-b82b134ed929,0,1,af3b1881-163a-4c07-a1d9-77ceadf59c77,af3b1881-163a-4c07-a1d9-77ceadf59c77,0,1,b78be6fb-7db8-48c8-ba7b-aab1fea34890,b78be6fb-7db8-48c8-ba7b-aab1fea34890,0,1,bd27276a-e80c-4135-b341-f99a816ffe86,bd27276a-e80c-4135-b341-f99a816ffe86,0,1,35306678-147c-4ad1-a3c6-c80a11afa22f,35306678-147c-4ad1-a3c6-c80a11afa22f,0,1,0da75726-ae71-4d83-a696-a774c787a8a2,0da75726-ae71-4d83-a696-a774c787a8a2,0,1,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,0,1,896a7267-0198-4cbb-b6e6-7aa157c0cc61,896a7267-0198-4cbb-b6e6-7aa157c0cc61,0,1,2005bf54-219b-4111-bff1-e12e2c6dca3e,2005bf54-219b-4111-bff1-e12e2c6dca3e,0,1,abab8f73-d705-4350-b44d-f912649a2190,abab8f73-d705-4350-b44d-f912649a2190,0,1,20c9c25c-f8c9-429f-84bd-543cb809abef,20c9c25c-f8c9-429f-84bd-543cb809abef,0,1,dc5f451e-3275-43a8-9f48-45b83220d461,dc5f451e-3275-43a8-9f48-45b83220d461,0,1,028f5e81-61df-4d13-876d-781c5fd18ee6,028f5e81-61df-4d13-876d-781c5fd18ee6,0,1,3cbb59ef-7f64-4590-8a54-ba01e78283c3,3cbb59ef-7f64-4590-8a54-ba01e78283c3,0,1,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,0,1,388eb513-fadb-40cd-8a7b-33b904dd758e,388eb513-fadb-40cd-8a7b-33b904dd758e,0,1,0613c6aa-e1fe-4632-a396-a17ec773158f,0613c6aa-e1fe-4632-a396-a17ec773158f,0,1,1a330987-4c79-4ab7-b250-db8d32c78751,1a330987-4c79-4ab7-b250-db8d32c78751,0,1,555062ed-9a04-41d8-877f-0a667e9a08cd,555062ed-9a04-41d8-877f-0a667e9a08cd,0,1,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,0,1,ac160e1c-fef7-4625-84e0-964b397f6bdb,ac160e1c-fef7-4625-84e0-964b397f6bdb,0,1,b8946d9c-dda8-4b94-8cbf-db62b647c53e,b8946d9c-dda8-4b94-8cbf-db62b647c53e,0,1,24215916-7732-4030-9f88-163f644e94f7,24215916-7732-4030-9f88-163f644e94f7,0,1,69697945-9748-4cea-a20f-e244b46de2e8,69697945-9748-4cea-a20f-e244b46de2e8,0,1,68538fd1-262c-43ea-b09f-8a66643a0062,68538fd1-262c-43ea-b09f-8a66643a0062,0,1,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,0,1,82ad24cc-d9f8-440b-a720-e204101d85da,82ad24cc-d9f8-440b-a720-e204101d85da,0,1,8010065f-aec8-4768-85ec-9eb7b2b01e7e,8010065f-aec8-4768-85ec-9eb7b2b01e7e,0,1,a44348cb-e20c-4afd-8483-3b9c735b352c,a44348cb-e20c-4afd-8483-3b9c735b352c,0,1,ebfe4c74-6e16-4b64-8a52-cea95c446903,ebfe4c74-6e16-4b64-8a52-cea95c446903,0,1,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,0,1,d912e472-9553-4b96-8b16-7aaff6c14239,d912e472-9553-4b96-8b16-7aaff6c14239,0,1,b04018b5-a74d-43c9-8519-6cc8aa23fe09,b04018b5-a74d-43c9-8519-6cc8aa23fe09,0,1,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,0,1,9283277f-2b75-4c3a-810a-8d4071b3afcc,9283277f-2b75-4c3a-810a-8d4071b3afcc,0,1,d03d5b18-57a2-43c0-99ea-8ad9d5788179,d03d5b18-57a2-43c0-99ea-8ad9d5788179,0,1,c491a7fc-14f9-498a-b7dd-575dfc66878e,c491a7fc-14f9-498a-b7dd-575dfc66878e,0,1,db15f8eb-4736-4b47-9cee-3e6883f0888c,db15f8eb-4736-4b47-9cee-3e6883f0888c,0,1,59064eb2-2770-4f1c-96bd-801926fe68ef,59064eb2-2770-4f1c-96bd-801926fe68ef,0,1,df81cc63-26f2-4e66-bf0b-fd083a6a7d7b,df81cc63-26f2-4e66-bf0b-fd083a6a7d7b,0,1,8a8848b8-345a-452d-bf95-28f9c91c7e95,8a8848b8-345a-452d-bf95-28f9c91c7e95,0,1,6b2340d7-687f-43a3-8eb8-8ddb86712466,6b2340d7-687f-43a3-8eb8-8ddb86712466,0,1,40b08a20-51a3-438b-ba54-466917ea809f,40b08a20-51a3-438b-ba54-466917ea809f,0,1,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,0,1,9328da5c-4689-4a60-8136-ae9eac46ab38,9328da5c-4689-4a60-8136-ae9eac46ab38,0,1,ca5d586f-81bb-40ee-b3bd-de854857c984,ca5d586f-81bb-40ee-b3bd-de854857c984,0,1,af22406b-daac-475d-b6a9-577452502b84,af22406b-daac-475d-b6a9-577452502b84,0,1,7a925960-a579-4b06-90e0-5121dc774024,7a925960-a579-4b06-90e0-5121dc774024,0,1,32c10512-7bb8-423b-9503-ab2fa41386a4,32c10512-7bb8-423b-9503-ab2fa41386a4,0,1,888edfc4-8140-4675-b267-c32bf1d8d29d,888edfc4-8140-4675-b267-c32bf1d8d29d,0,1,2abbd53a-0ead-42af-8df6-fde663aea300,2abbd53a-0ead-42af-8df6-fde663aea300,0,1,24611bf9-5492-443a-935c-a0058e86493f,24611bf9-5492-443a-935c-a0058e86493f,0,1,42641296-64da-46e0-a407-de2d492f9c90,42641296-64da-46e0-a407-de2d492f9c90,0,1,b834af0b-086c-445d-a271-7e178c324551,b834af0b-086c-445d-a271-7e178c324551,0,1,ec34befe-3c0b-4a75-b943-840c52e7dda5,ec34befe-3c0b-4a75-b943-840c52e7dda5,0,1,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,0,1,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,0,1,6733f1bd-7878-4a33-8995-c07526e87c1a,6733f1bd-7878-4a33-8995-c07526e87c1a,0,1,f7e73257-fae1-465a-ae74-faaa0273a416,f7e73257-fae1-465a-ae74-faaa0273a416,0,1,73f89524-dbe8-426f-8ee6-1277eb1967cc,73f89524-dbe8-426f-8ee6-1277eb1967cc,0,1,ee7d970c-cef7-4740-a357-1fe78f88a6e6,ee7d970c-cef7-4740-a357-1fe78f88a6e6,0,1,ff18803b-4c3a-4720-a718-7547f04c6e2f,ff18803b-4c3a-4720-a718-7547f04c6e2f,0,1,0e0670d6-d8f7-4728-bd1b-f016fffa0570,0e0670d6-d8f7-4728-bd1b-f016fffa0570,0,1,13beb01d-dd08-4a6d-863b-651e70bbf51f,13beb01d-dd08-4a6d-863b-651e70bbf51f,0,1,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,0,1,57a0f5f3-6573-4b35-af25-cea3a25641f1,57a0f5f3-6573-4b35-af25-cea3a25641f1,0,1,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,0,1,144d5498-bb61-4bec-bef3-85a5a4aec3d5,144d5498-bb61-4bec-bef3-85a5a4aec3d5,0,1,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,0,1,45a8c780-c067-40d7-bbe9-81f854aacf7a,45a8c780-c067-40d7-bbe9-81f854aacf7a,0,1,57885cac-059a-4a08-aa2c-43b116d2c777,57885cac-059a-4a08-aa2c-43b116d2c777,0,1,c0403df4-b1f2-4d7e-adb5-9ed881c1359b,c0403df4-b1f2-4d7e-adb5-9ed881c1359b,0,1,56b570b1-93b0-468a-9672-9c71113753f3,56b570b1-93b0-468a-9672-9c71113753f3,0,1,e693eac3-f55d-4102-ac6d-b14ef33fb2e7,e693eac3-f55d-4102-ac6d-b14ef33fb2e7,0,1,e7b0ae70-0192-456c-9dc5-e66049fa9df2,e7b0ae70-0192-456c-9dc5-e66049fa9df2,0,1,68944d09-618e-4fa3-a7af-8c84218e0ac7,68944d09-618e-4fa3-a7af-8c84218e0ac7,0,1,91b12ce3-e8ba-4c9d-9daa-1d5532500314,91b12ce3-e8ba-4c9d-9daa-1d5532500314,0,1,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,0,1,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,0,1,cb57aabc-eeef-42b4-9bc2-873cebd9618c,cb57aabc-eeef-42b4-9bc2-873cebd9618c,0,1,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,0,1,52f30ed7-aa16-4ce2-9684-e50229ab0015,52f30ed7-aa16-4ce2-9684-e50229ab0015,0,1,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,0,1,0526492c-be48-4c84-8d68-19fa1c7e9d6e,0526492c-be48-4c84-8d68-19fa1c7e9d6e,0,1,54ecaf7b-9bc5-483c-96e1-270bcd323590,54ecaf7b-9bc5-483c-96e1-270bcd323590,0,1,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,0,1,58f6f8fa-7473-40f5-973a-6279335d8f33,58f6f8fa-7473-40f5-973a-6279335d8f33,0,1,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,0,1,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,0,1,fa3632fe-185b-49aa-85ae-dfb721835d40,fa3632fe-185b-49aa-85ae-dfb721835d40,0,1,a4f15108-477c-465e-aaea-cb495ef52cf5,a4f15108-477c-465e-aaea-cb495ef52cf5,0,1,9cda5c2c-f401-4f63-b445-cef160296e48,9cda5c2c-f401-4f63-b445-cef160296e48,0,1,e8ae4a26-3127-43ae-af7a-c2e278d2611d,e8ae4a26-3127-43ae-af7a-c2e278d2611d,0,1,b923c78f-d074-41b4-b832-086686258f19,b923c78f-d074-41b4-b832-086686258f19,0,1,8ff96413-6fdd-4b8d-a181-ea0d8633defc,8ff96413-6fdd-4b8d-a181-ea0d8633defc,0,1,54604ed2-766b-4308-b99e-447817d82799,54604ed2-766b-4308-b99e-447817d82799,0,1,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,0,1,f48b4475-2cd9-41df-962a-6529f84985ca,f48b4475-2cd9-41df-962a-6529f84985ca,0,1,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,0,1,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,0,1,bf94feb9-edf7-4df8-b5f5-805613663a0a,bf94feb9-edf7-4df8-b5f5-805613663a0a,0,1,6d852a13-c85e-4e84-8396-f91c1ed0596e,6d852a13-c85e-4e84-8396-f91c1ed0596e,0,1,9c2d5313-a4fd-417e-a340-ad4980d0028b,9c2d5313-a4fd-417e-a340-ad4980d0028b,0,1,4fb4a280-9426-4c41-a9ba-11f9d01a0740,4fb4a280-9426-4c41-a9ba-11f9d01a0740,0,1,1591ee7e-870c-4bf7-9450-be84f1b2506f,1591ee7e-870c-4bf7-9450-be84f1b2506f,0,1,8f088f33-92d7-4e35-915d-6cda1129dd80,8f088f33-92d7-4e35-915d-6cda1129dd80,0,1,9a8578a2-8a92-4ab3-a480-173340f8b34a,9a8578a2-8a92-4ab3-a480-173340f8b34a,0,1,4889d27b-435b-4059-a34d-6afdf3c77fa3,4889d27b-435b-4059-a34d-6afdf3c77fa3,0,1,4ebf0988-ccc3-440c-bd0f-2d01636bd730,4ebf0988-ccc3-440c-bd0f-2d01636bd730,0,1,c1be2a02-53b8-4c28-92b2-b6e0c83ab452,c1be2a02-53b8-4c28-92b2-b6e0c83ab452,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,f9213a70-bfd6-464f-b28b-ed35bdf351c0,f9213a70-bfd6-464f-b28b-ed35bdf351c0,0,1,ca5957af-69c9-4640-b9a9-b241c4f9eaa7,ca5957af-69c9-4640-b9a9-b241c4f9eaa7,0,1,7e32c295-a769-4cff-a3eb-992f7031475f,7e32c295-a769-4cff-a3eb-992f7031475f,0,1,eb81610a-eb2f-4068-ba74-75e0f5bbace8,eb81610a-eb2f-4068-ba74-75e0f5bbace8,0,1,21826316-0b49-4034-a49e-6d34c15ceb5c,21826316-0b49-4034-a49e-6d34c15ceb5c,0,1,3abffa47-8d47-4173-897b-708e1a06ef39,3abffa47-8d47-4173-897b-708e1a06ef39,0,1,0cf3d615-76a1-428d-9d25-0d7fdf09e4ae,0cf3d615-76a1-428d-9d25-0d7fdf09e4ae,0,1,5a398637-a06c-4442-9093-a864fa7f049f,5a398637-a06c-4442-9093-a864fa7f049f,0,1,38692186-a62a-42d1-87cd-7dbc6d4816ed,38692186-a62a-42d1-87cd-7dbc6d4816ed,0,1,6cfcdb89-ccb2-45fe-a7b1-5a29ccd6c5ae,6cfcdb89-ccb2-45fe-a7b1-5a29ccd6c5ae,0,1,3a28cea9-7fd7-4834-ab89-2a74331a64e3,3a28cea9-7fd7-4834-ab89-2a74331a64e3,0,1,0f881709-4520-4f18-af9d-cf08757693ff,0f881709-4520-4f18-af9d-cf08757693ff,0,1,c5151ca9-5103-42b2-8573-273c15416db8,c5151ca9-5103-42b2-8573-273c15416db8,0,1,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,0,1,ba8c43ad-678a-4b18-8bbe-5a1b12d19b74,ba8c43ad-678a-4b18-8bbe-5a1b12d19b74,0,1,115a6019-ef87-4126-8ebf-070c1e882940,115a6019-ef87-4126-8ebf-070c1e882940,0,1,162ce023-b2e1-41dc-bcaf-b8e30caccce0,162ce023-b2e1-41dc-bcaf-b8e30caccce0,0,1,52bdd3cc-7103-4dbf-a3c3-dd46cf03da12,52bdd3cc-7103-4dbf-a3c3-dd46cf03da12,0,1,c13fb1cd-fe72-48a6-b383-55b6323619ce,c13fb1cd-fe72-48a6-b383-55b6323619ce,0,1,956fc8ee-96be-4309-b1e8-209372f151ab,956fc8ee-96be-4309-b1e8-209372f151ab,0,1,526c688e-a4d4-45f7-8bba-b8ceff38fe27,526c688e-a4d4-45f7-8bba-b8ceff38fe27,0,1,67efa786-312f-4c9c-b970-0320e92069af,67efa786-312f-4c9c-b970-0320e92069af,0,1,12f85e09-1190-4483-b531-630ab718db7f,12f85e09-1190-4483-b531-630ab718db7f,0,1,52f4453e-e968-4290-a79a-470f68fbd07f,52f4453e-e968-4290-a79a-470f68fbd07f,0,1,5b952e35-1037-4447-8293-6d8889692c8b,5b952e35-1037-4447-8293-6d8889692c8b,0,1,05bc8b4e-8c90-4502-8b16-7b1e7625d569,05bc8b4e-8c90-4502-8b16-7b1e7625d569,0,1,ce34d88d-3017-4197-a962-ea23a6a96d32,ce34d88d-3017-4197-a962-ea23a6a96d32,0,1,2cbc16da-aa67-4ad6-82f8-fa6922447be6,2cbc16da-aa67-4ad6-82f8-fa6922447be6,0,1,19d7a1ba-c343-4575-95da-53dac6d4b2cb,19d7a1ba-c343-4575-95da-53dac6d4b2cb,0,1,6cc8b3a0-3377-4b39-b6b0-69c862a15465,6cc8b3a0-3377-4b39-b6b0-69c862a15465,0,1,acb193f4-52e5-4572-a79b-b825a2f6525f,acb193f4-52e5-4572-a79b-b825a2f6525f,0,1,5d46f719-e468-48e2-b4ec-acb85c710451,5d46f719-e468-48e2-b4ec-acb85c710451,0,1,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,0,1,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,0,1,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,0,1,5422610d-b92c-4213-a58c-8db067d93b66,5422610d-b92c-4213-a58c-8db067d93b66,0,1,8f59a635-9e0e-470d-8fda-a47a262a59c2,8f59a635-9e0e-470d-8fda-a47a262a59c2,0,1,ffb50eb9-149a-46ec-9472-d8f20ad09810,ffb50eb9-149a-46ec-9472-d8f20ad09810,0,1,5ae3bba3-dc98-4470-a73d-3bd951c0a3f2,5ae3bba3-dc98-4470-a73d-3bd951c0a3f2,0,1,7a6449e2-e90a-4720-a769-192284ef69c1,7a6449e2-e90a-4720-a769-192284ef69c1,0,1,02118b98-2349-46b1-a328-d6e2b5781f7e,02118b98-2349-46b1-a328-d6e2b5781f7e,0,1,67de9cbb-5c80-4cff-bfbe-269a958e08e6,67de9cbb-5c80-4cff-bfbe-269a958e08e6,0,1,2228a457-6805-41ee-85af-5ebca9568bf4,2228a457-6805-41ee-85af-5ebca9568bf4,0,1,96b71795-e230-4ecb-b98d-4feb3f8b9662,96b71795-e230-4ecb-b98d-4feb3f8b9662,0,1,04055821-03ce-4049-af2c-8670c80517f6,04055821-03ce-4049-af2c-8670c80517f6,0,1,0101305d-62eb-4802-9cd4-d615a518d842,0101305d-62eb-4802-9cd4-d615a518d842,0,1,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,0,1,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,0,1,7c424424-9660-462d-9cf2-4c1e6bd284fa,7c424424-9660-462d-9cf2-4c1e6bd284fa,0,1,e118f957-ab2c-473b-ab64-37032f727416,e118f957-ab2c-473b-ab64-37032f727416,0,1,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,0,1,21f64e5f-dc94-4ce9-b836-e75646ae3325,21f64e5f-dc94-4ce9-b836-e75646ae3325,0,1,82e8a180-f2e1-406c-9609-89d33504aff2,82e8a180-f2e1-406c-9609-89d33504aff2,0,1,e7437c81-3d5b-466e-880c-8febe4a68e88,e7437c81-3d5b-466e-880c-8febe4a68e88,0,1,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,0,1,307771e6-bcf7-4016-b369-e1655bbe9e94,307771e6-bcf7-4016-b369-e1655bbe9e94,0,1,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,0,1,38fc6a54-846c-40b0-9254-3261f540bf18,38fc6a54-846c-40b0-9254-3261f540bf18,0,1,d9134d0c-56cd-4b8f-ab11-ae37fc306801,d9134d0c-56cd-4b8f-ab11-ae37fc306801,0,1,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,0,1,8f2af24b-f5fa-4f6d-831e-28453bdedefc,8f2af24b-f5fa-4f6d-831e-28453bdedefc,0,1,d119e21d-0087-4f22-b3bd-b14707b65330,d119e21d-0087-4f22-b3bd-b14707b65330,0,1,dc9b4072-11de-40fe-bf2a-f7b15af0a250,dc9b4072-11de-40fe-bf2a-f7b15af0a250,0,1,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,0,1,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,0,1,932b1c1a-72eb-49cd-8218-d0ced9c454d8,932b1c1a-72eb-49cd-8218-d0ced9c454d8,0,1,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,0,1,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,0,1,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,0,1,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,0,1,5dd336c4-88c5-4f53-acf0-5f86a658c528,5dd336c4-88c5-4f53-acf0-5f86a658c528,0,1,c723112b-286d-46f1-989d-81252062a025,c723112b-286d-46f1-989d-81252062a025,0,1,67e8b47e-4bad-4b2f-b196-8a9708893051,67e8b47e-4bad-4b2f-b196-8a9708893051,0,1,a583e53a-3f3c-48c7-8928-37ce40b2bafe,a583e53a-3f3c-48c7-8928-37ce40b2bafe,0,1,a844dd4a-274a-4894-9446-031dbe006084,a844dd4a-274a-4894-9446-031dbe006084,0,1,9a740f81-5437-47af-8ed9-ea62edcb2ea1,9a740f81-5437-47af-8ed9-ea62edcb2ea1,0,1,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,0,1,77bdd30f-4933-4bda-9c7a-b0a097da0910,77bdd30f-4933-4bda-9c7a-b0a097da0910,0,1,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,0,1,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,0,1,a682e9e1-284f-4e32-86b2-6736f159f585,a682e9e1-284f-4e32-86b2-6736f159f585,0,1,84f0bd89-9b86-440f-b942-9b685e22233e,84f0bd89-9b86-440f-b942-9b685e22233e,0,1,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,0,1,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,0,1,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,0,1,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,0,1,fabf8a0b-366f-4f23-9377-315534bb854b,fabf8a0b-366f-4f23-9377-315534bb854b,0,1,7aac6439-64c9-4492-b866-bf91dda82d06,7aac6439-64c9-4492-b866-bf91dda82d06,0,1,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,0,1,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,0,1,08b86f29-64ef-467a-af1a-d27ffdf621ba,08b86f29-64ef-467a-af1a-d27ffdf621ba,0,1,6483d1ab-c53d-4985-ad7e-b799adbcd9da,6483d1ab-c53d-4985-ad7e-b799adbcd9da,0,1,82f66233-ed13-49ae-ab72-7cf91c88c760,82f66233-ed13-49ae-ab72-7cf91c88c760,0,1,75cddbcd-e960-4164-81d8-ac0a2a36e95b,75cddbcd-e960-4164-81d8-ac0a2a36e95b,0,1,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,0,1,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,0,1,d9151001-a911-45c1-a8e6-dcf0da623ed3,d9151001-a911-45c1-a8e6-dcf0da623ed3,0,1,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,0,1,e589a693-ff50-4c36-ae26-a8fcae966d57,e589a693-ff50-4c36-ae26-a8fcae966d57,0,1,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,0,1,90f023f5-5b48-4f98-bfc6-b704277a355d,90f023f5-5b48-4f98-bfc6-b704277a355d,0,1,99485603-706d-4301-be25-82b1c0ee8f4d,99485603-706d-4301-be25-82b1c0ee8f4d,0,1,e7a28021-c75e-41b2-9974-cf4beee34d28,e7a28021-c75e-41b2-9974-cf4beee34d28,0,1,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,0,1,2a603c61-4cbf-4c6d-a0b2-40c835d36737,2a603c61-4cbf-4c6d-a0b2-40c835d36737,0,1,a8d7f071-401b-499e-957c-d077d8002e54,a8d7f071-401b-499e-957c-d077d8002e54,0,1,211a539b-4be9-4816-98f6-f756e65eafd8,211a539b-4be9-4816-98f6-f756e65eafd8,0,1,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,0,1,e9b9da80-7806-4c9c-a002-01cfa3109169,e9b9da80-7806-4c9c-a002-01cfa3109169,0,1,a271041d-0203-4ecd-bb39-70256c50192e,a271041d-0203-4ecd-bb39-70256c50192e,0,1,73eff626-a363-4a5a-879e-61ef6ce0726f,73eff626-a363-4a5a-879e-61ef6ce0726f,0,1,acf15b79-a6c4-4c46-8013-50d3b223baf6,acf15b79-a6c4-4c46-8013-50d3b223baf6,0,1,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,0,1,2d8d5d74-2bc0-4282-af66-e4a37694c147,2d8d5d74-2bc0-4282-af66-e4a37694c147,0,1,cfd31341-287b-4684-9ac0-b28b4e066f15,cfd31341-287b-4684-9ac0-b28b4e066f15,0,1,81de1b0b-7f2d-4098-ae99-061c6a90dc29,81de1b0b-7f2d-4098-ae99-061c6a90dc29,0,1,f829e2a9-5bdb-4171-8b32-8d10d5968813,f829e2a9-5bdb-4171-8b32-8d10d5968813,0,1,647ba8f8-57f7-4c19-af59-525517c1e392,647ba8f8-57f7-4c19-af59-525517c1e392,0,1,39062cb3-4ae8-4c0d-889b-038a55179946,39062cb3-4ae8-4c0d-889b-038a55179946,0,1,c62d4212-36ca-4afb-bac9-269b6f64ca51,c62d4212-36ca-4afb-bac9-269b6f64ca51,0,1,5cec5e16-46ad-4f8c-b869-f5b1cc487884,5cec5e16-46ad-4f8c-b869-f5b1cc487884,0,1,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,0,1,7aacdf81-49fd-47a3-a36a-c483f1b05872,7aacdf81-49fd-47a3-a36a-c483f1b05872,0,1,857015e2-afb2-403d-bfb7-7acb5080797b,857015e2-afb2-403d-bfb7-7acb5080797b,0,1,5657286b-114b-41de-ab7d-45d0f0d95e2d,5657286b-114b-41de-ab7d-45d0f0d95e2d,0,1,42a0271e-6783-44db-95c1-09805ae01f58,42a0271e-6783-44db-95c1-09805ae01f58,0,1,8628783e-4fad-4dff-8220-9e0ddc8580f8,8628783e-4fad-4dff-8220-9e0ddc8580f8,0,1,356fc245-3034-42d1-84d0-632c6dc7a3d5,356fc245-3034-42d1-84d0-632c6dc7a3d5,0,1,07462664-6b58-4f5a-9b3f-2e5c376f17df,07462664-6b58-4f5a-9b3f-2e5c376f17df,0,1,6f23e946-f700-424b-b9bf-3a9c8846908d,6f23e946-f700-424b-b9bf-3a9c8846908d,0,1,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,0,1,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,0,1,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,0,1,c656771c-dcb7-4c78-9a16-e62806d5bb5a,c656771c-dcb7-4c78-9a16-e62806d5bb5a,0,1,ec42c45c-18ca-44b0-9c59-1cb204552a43,ec42c45c-18ca-44b0-9c59-1cb204552a43,0,1,2aafb1a1-4321-47e9-9783-03ab616a2873,2aafb1a1-4321-47e9-9783-03ab616a2873,0,1,71109997-6da0-4eaf-bbf2-f94fa24f37cc,71109997-6da0-4eaf-bbf2-f94fa24f37cc,0,1,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,0,1,d601281c-379d-4a9d-843e-478fd6567415,d601281c-379d-4a9d-843e-478fd6567415,0,1,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,0,1,427e6f15-334e-42be-9554-895d8f7ebfc6,427e6f15-334e-42be-9554-895d8f7ebfc6,0,1,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,0,1,36bc8523-41a5-48ff-9bd0-758d078c4408,36bc8523-41a5-48ff-9bd0-758d078c4408,0,1,94ca1b45-3cf0-4857-8299-999c93f4fb56,94ca1b45-3cf0-4857-8299-999c93f4fb56,0,1,ee8419c6-79ca-4546-9a66-bacaa08d2a73,ee8419c6-79ca-4546-9a66-bacaa08d2a73,0,1,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,0,1,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,0,1,ada11ea2-94d5-4172-a383-a51774599568,ada11ea2-94d5-4172-a383-a51774599568,0,1,50515bbc-43ee-4b00-bfc5-105b7981bd8f,50515bbc-43ee-4b00-bfc5-105b7981bd8f,0,1,1ea080b0-0a11-4152-b8bb-4918bc142a23,1ea080b0-0a11-4152-b8bb-4918bc142a23,0,1,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,0,1,6930e471-7935-4d68-a980-2acde93ba801,6930e471-7935-4d68-a980-2acde93ba801,0,1,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,0,1,5135cc48-c749-4acb-a225-d110f386f482,5135cc48-c749-4acb-a225-d110f386f482,0,1,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,0,1,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,0,1,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,0,1,2e9fa546-96fb-4ecb-b933-7921e131e89b,2e9fa546-96fb-4ecb-b933-7921e131e89b,0,1,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,0,1,637a132b-1a88-44ba-b45f-ed4ed1ac1001,637a132b-1a88-44ba-b45f-ed4ed1ac1001,0,1,699f734b-43d2-4351-bff8-e0e21e164a42,699f734b-43d2-4351-bff8-e0e21e164a42,0,1,95f0792a-7ac4-450a-b05c-219741e61abd,95f0792a-7ac4-450a-b05c-219741e61abd,0,1,742a2e8c-496e-4e02-931d-d33f7afe07a5,742a2e8c-496e-4e02-931d-d33f7afe07a5,0,1,c3efa853-cd29-4618-929f-e3bec33dfd65,c3efa853-cd29-4618-929f-e3bec33dfd65,0,1,62185c28-3d24-487a-9441-b309dcf11e31,62185c28-3d24-487a-9441-b309dcf11e31,0,1,9f264aeb-664d-4724-8248-11873d63ef3b,9f264aeb-664d-4724-8248-11873d63ef3b,0,1,b926d058-53a9-4eea-b4f9-98e77f798dd9,b926d058-53a9-4eea-b4f9-98e77f798dd9,0,1,495e2c77-4868-4191-ac18-f94e55a5982e,495e2c77-4868-4191-ac18-f94e55a5982e,0,1,20191a65-322c-457d-85f5-ed1258b6fe8e,20191a65-322c-457d-85f5-ed1258b6fe8e,0,1,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,0,1,769c60aa-44f4-4c98-a461-d3f5c2b67f61,769c60aa-44f4-4c98-a461-d3f5c2b67f61,0,1,f9809c99-0eaa-4249-967c-a4bef4763277,f9809c99-0eaa-4249-967c-a4bef4763277,0,1,37fa88a0-f2c1-455f-a28d-74165e8b933d,37fa88a0-f2c1-455f-a28d-74165e8b933d,0,1,e4476f09-909b-49f7-8e01-72eea8ceaca6,e4476f09-909b-49f7-8e01-72eea8ceaca6,0,1,2861412c-46f0-454e-b81d-fe081afb5c7a,2861412c-46f0-454e-b81d-fe081afb5c7a,0,1,2b4ece05-b694-42e9-8239-55722fd84294,2b4ece05-b694-42e9-8239-55722fd84294,0,1,6564ce89-134f-4726-8693-fd93aad46180,6564ce89-134f-4726-8693-fd93aad46180,0,1,0d743731-da5d-4c99-b19f-e93c69b77e14,0d743731-da5d-4c99-b19f-e93c69b77e14,0,1,d6f15367-23e2-4766-bc7c-8acd0063aa0c,d6f15367-23e2-4766-bc7c-8acd0063aa0c,0,1,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,0,1,fa4c5665-4d73-4db2-a055-8c1c8a302f82,fa4c5665-4d73-4db2-a055-8c1c8a302f82,0,1,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,0,1,9100b286-8ae9-4de3-b116-5ce0fa95b80c,9100b286-8ae9-4de3-b116-5ce0fa95b80c,0,1,3d315df6-e000-4cbd-810d-0b26c0d1bc54,3d315df6-e000-4cbd-810d-0b26c0d1bc54,0,1,fa429302-ccaf-4c89-8a11-3a1d30817c00,fa429302-ccaf-4c89-8a11-3a1d30817c00,0,1,9b4c49ce-93da-439a-8d67-f3774e92800a,9b4c49ce-93da-439a-8d67-f3774e92800a,0,1,5f8fa827-7017-4b45-b458-3571b8b611f5,5f8fa827-7017-4b45-b458-3571b8b611f5,0,1,79749167-2912-4e06-9deb-7915a1b4390d,79749167-2912-4e06-9deb-7915a1b4390d,0,1,1c93fcd3-53a1-403f-a30b-454fbc941d55,1c93fcd3-53a1-403f-a30b-454fbc941d55,0,1,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,0,1,adec3963-b22f-4463-a3f4-c9ec27d187a8,adec3963-b22f-4463-a3f4-c9ec27d187a8,0,1,d8dae0c8-8e11-44bf-bf60-d316220f3e82,d8dae0c8-8e11-44bf-bf60-d316220f3e82,0,1,12afec4d-1728-4aa8-86e5-23cd2f1572b3,12afec4d-1728-4aa8-86e5-23cd2f1572b3,0,1,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,0,1,ee0c3960-d1bf-411f-a51f-e6e27dabea87,ee0c3960-d1bf-411f-a51f-e6e27dabea87,0,1,d7fb9441-1aef-4257-af3f-7f16340ac85e,d7fb9441-1aef-4257-af3f-7f16340ac85e,0,1,d07c094c-2795-4e0c-b030-bdb82be7ba6d,d07c094c-2795-4e0c-b030-bdb82be7ba6d,0,1,62637860-2013-4f9d-9aed-7cbb0dce8983,62637860-2013-4f9d-9aed-7cbb0dce8983,0,1,331217f6-7ec2-425d-93bd-f2979c5f2e05,331217f6-7ec2-425d-93bd-f2979c5f2e05,0,1,7d5b2b73-27e6-4a61-9558-eb2410eb9f2f,7d5b2b73-27e6-4a61-9558-eb2410eb9f2f,0,1,d754ed75-2a32-4b86-a153-7b50c39f9836,d754ed75-2a32-4b86-a153-7b50c39f9836,0,1,b81f3ee1-66f7-4626-a35b-ef85388c678e,b81f3ee1-66f7-4626-a35b-ef85388c678e,0,1,2ad04793-c162-4915-a260-ca4da535cdac,2ad04793-c162-4915-a260-ca4da535cdac,0,1,6568d853-dfe5-4064-aa73-c1f546e951b4,6568d853-dfe5-4064-aa73-c1f546e951b4,0,1,7cee27a7-9827-47f8-96f3-d4f1f3dcabe9,7cee27a7-9827-47f8-96f3-d4f1f3dcabe9,0,1,9bfba5cd-551a-4685-99dd-ebfd9f7fd7d1,9bfba5cd-551a-4685-99dd-ebfd9f7fd7d1,0,1,bbe718b2-6b4c-4d78-a408-5369d356a1e6,bbe718b2-6b4c-4d78-a408-5369d356a1e6,0,1,4ecd85c4-5be7-4e6b-8c53-7dd32bd4d707,4ecd85c4-5be7-4e6b-8c53-7dd32bd4d707,0,1,c7e4e97f-fb85-4e95-bfdf-7706e867d89b,c7e4e97f-fb85-4e95-bfdf-7706e867d89b,0,1,b08fd921-c3d6-44eb-9401-fec5acab5d22,b08fd921-c3d6-44eb-9401-fec5acab5d22,0,1,1611855a-abf4-4269-aed3-3f78dce7bea5,1611855a-abf4-4269-aed3-3f78dce7bea5,0,1,c5bd277c-b258-43af-9c80-3e328b1581f5,c5bd277c-b258-43af-9c80-3e328b1581f5,0,1,d6fa2b86-1c3b-4c14-8a66-b6dbd40bca19,d6fa2b86-1c3b-4c14-8a66-b6dbd40bca19,0,1,f9cefef4-2182-42ca-93ef-b6a51d6555cc,f9cefef4-2182-42ca-93ef-b6a51d6555cc,0,1,71e1c7de-7367-424c-ae07-6ec04b408b83,71e1c7de-7367-424c-ae07-6ec04b408b83,0,1,b3956392-199c-4934-80d1-8cdab453d879,b3956392-199c-4934-80d1-8cdab453d879,0,1,5e26aeb7-617c-4983-b40d-5a61c77aa6a4,5e26aeb7-617c-4983-b40d-5a61c77aa6a4,0,1,d1bd7448-aa5f-43fc-9735-224f36960c3e,d1bd7448-aa5f-43fc-9735-224f36960c3e,0,1,94dbfc4c-d530-4fbd-b7cf-a58a56289b97,94dbfc4c-d530-4fbd-b7cf-a58a56289b97,0,1,6fa25c57-411d-4f9c-9c3e-c7ea1b1f7195,6fa25c57-411d-4f9c-9c3e-c7ea1b1f7195,0,1,1bfa15cf-222e-4e5b-beb7-7a50f8131799,1bfa15cf-222e-4e5b-beb7-7a50f8131799,0,1,25864028-1a53-4a8d-b6e4-189fa62c62f5,25864028-1a53-4a8d-b6e4-189fa62c62f5,0,1,e923beae-0bd8-4119-a802-fd6bfb729f10,e923beae-0bd8-4119-a802-fd6bfb729f10,0,1,d40bb9f7-3397-40ad-b658-f8942bdbbaee,d40bb9f7-3397-40ad-b658-f8942bdbbaee,0,1,67c1269a-79e6-44d9-9254-671c50fb3974,67c1269a-79e6-44d9-9254-671c50fb3974,0,1,5d455d2a-910d-48c7-bc74-ba5ad7855110,5d455d2a-910d-48c7-bc74-ba5ad7855110,0,1,7cf3feea-75e2-42cc-9c89-4a9182034910,7cf3feea-75e2-42cc-9c89-4a9182034910,0,1,930a0156-feb3-4e14-96a5-cd183a4891f4,930a0156-feb3-4e14-96a5-cd183a4891f4,0,1,cfa55ab3-1335-4712-8352-03c2f0277708,cfa55ab3-1335-4712-8352-03c2f0277708,0,1,fb176f8b-edb9-4e4b-926d-dabe9552bfa1,fb176f8b-edb9-4e4b-926d-dabe9552bfa1,0,1,cd5c52d4-f832-4a3b-b4c7-b4f3e0c98222,cd5c52d4-f832-4a3b-b4c7-b4f3e0c98222,0,1,e268a337-f576-4ec2-8a22-0500b79b2441,e268a337-f576-4ec2-8a22-0500b79b2441,0,1,eb33a8fa-75a6-4926-a025-05bc0abe4374,eb33a8fa-75a6-4926-a025-05bc0abe4374,0,1,c352da94-ea64-44b1-b2df-2c4ed9e2efc5,c352da94-ea64-44b1-b2df-2c4ed9e2efc5,0,1,6babd40a-8b8f-454b-b4a4-7cf2854f49a2,6babd40a-8b8f-454b-b4a4-7cf2854f49a2,0,1,bf480259-6e72-4ad1-ac41-0b0d41a75387,bf480259-6e72-4ad1-ac41-0b0d41a75387,0,1,a41f060a-f0f6-4940-960b-5056082b2c45,a41f060a-f0f6-4940-960b-5056082b2c45,0,1,5d45a926-513f-4bbc-a002-54a2db94b297,5d45a926-513f-4bbc-a002-54a2db94b297,0,1,73f5ce9e-d5a7-45c0-965a-8af1d776a98a,73f5ce9e-d5a7-45c0-965a-8af1d776a98a,0,1,073e14d4-5d43-428b-a9a7-985d173e94c7,073e14d4-5d43-428b-a9a7-985d173e94c7,0,1,61dc318a-c17d-402e-bf64-a0c0a63a1c93,61dc318a-c17d-402e-bf64-a0c0a63a1c93,0,1,c4b0c101-8cd9-441c-b94c-9dfa1ad58d45,c4b0c101-8cd9-441c-b94c-9dfa1ad58d45,0,1,2394775b-8910-4667-9c74-e1606e0b13bc,2394775b-8910-4667-9c74-e1606e0b13bc,0,1,43c88ffd-a036-4563-890b-bdc60180e841,43c88ffd-a036-4563-890b-bdc60180e841,0,1,af6e5e8e-6482-4820-a810-9e275ae039bf,af6e5e8e-6482-4820-a810-9e275ae039bf,0,1,fe3ccb8b-fee7-4825-a7bc-4b0fd432d382,fe3ccb8b-fee7-4825-a7bc-4b0fd432d382,0,1,7690620b-21d9-463a-8c22-60844927b4a0,7690620b-21d9-463a-8c22-60844927b4a0,0,1,e7f96a15-9f62-4a7f-85f3-06ba5d30b130,e7f96a15-9f62-4a7f-85f3-06ba5d30b130,0,1,b1db3255-38da-4684-b44e-4e2e9ee1dc35,b1db3255-38da-4684-b44e-4e2e9ee1dc35,0,1,4761f89b-7894-4dca-83b0-3be2d0828781,4761f89b-7894-4dca-83b0-3be2d0828781,0,1,573ff1f2-0ef5-4962-a0f6-eb84d430fe03,573ff1f2-0ef5-4962-a0f6-eb84d430fe03,0,1,7236d52f-9068-45ad-8b92-a7319e737e08,7236d52f-9068-45ad-8b92-a7319e737e08,0,1,3b0b708f-1b6c-4eb2-a2ad-86c088d9f1bf,3b0b708f-1b6c-4eb2-a2ad-86c088d9f1bf,0,1,9db23e96-d13a-4847-941a-462f64d0619d,9db23e96-d13a-4847-941a-462f64d0619d,0,1,7575fd54-c91b-4220-a2ef-2cf533f60426,7575fd54-c91b-4220-a2ef-2cf533f60426,0,1,1b751f19-bb0c-40c2-a5d1-068544c36c6b,1b751f19-bb0c-40c2-a5d1-068544c36c6b,0,1,26e2c83b-8873-4ad3-9c50-e94421473a43,26e2c83b-8873-4ad3-9c50-e94421473a43,0,1,f0b2ec05-8e01-4ccf-b927-671329a9013b,f0b2ec05-8e01-4ccf-b927-671329a9013b,0,1,ab442b11-2482-4f80-ac82-01966e0657ec,ab442b11-2482-4f80-ac82-01966e0657ec,0,1,14fe4d39-81a1-470e-9724-6642ce34ad89,14fe4d39-81a1-470e-9724-6642ce34ad89,0,1,457578ab-dfe2-4419-8d8a-64283b341f42,457578ab-dfe2-4419-8d8a-64283b341f42,0,1,67ef6671-f537-46bf-88e6-f5bcf34a17a4,67ef6671-f537-46bf-88e6-f5bcf34a17a4,0,1,de778ca7-feaf-4531-80ae-11a534c56928,de778ca7-feaf-4531-80ae-11a534c56928,0,1,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,0,1,0a76a84d-e883-477e-8b87-7bf984cdc1cf,0a76a84d-e883-477e-8b87-7bf984cdc1cf,0,1,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,0,1,86df8648-e195-4661-99ee-6052788eb276,86df8648-e195-4661-99ee-6052788eb276,0,1,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,0,1,35133725-9647-42dc-a76a-2e62b2918ac4,35133725-9647-42dc-a76a-2e62b2918ac4,0,1,fa9572ee-0303-4421-9125-70cf3dd5a8c7,fa9572ee-0303-4421-9125-70cf3dd5a8c7,0,1,4cdd7920-0c49-4950-b92f-fdf6e34578b2,4cdd7920-0c49-4950-b92f-fdf6e34578b2,0,1,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,0,1,c7b883dc-6c26-4eb5-bc19-7919ad57da27,c7b883dc-6c26-4eb5-bc19-7919ad57da27,0,1,7fc37008-c378-4a70-a9a9-07543c7248a6,7fc37008-c378-4a70-a9a9-07543c7248a6,0,1,6410853e-a17e-44db-b8cc-bfefd7c4d239,6410853e-a17e-44db-b8cc-bfefd7c4d239,0,1,df042e4e-01a6-4480-a9c5-c0d7a454bb41,df042e4e-01a6-4480-a9c5-c0d7a454bb41,0,1,5a4abb96-8a18-4249-9fbb-7270fe2ba25b,5a4abb96-8a18-4249-9fbb-7270fe2ba25b,0,1,6852c584-d989-418d-8d18-255492891ef0,6852c584-d989-418d-8d18-255492891ef0,0,1,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,0,1,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,0,1,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,0,1,ff830967-faa9-415f-aa6e-8d27779f91f8,ff830967-faa9-415f-aa6e-8d27779f91f8,0,1,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,0,1,88618d0f-97af-4055-a490-561d4b8065a7,88618d0f-97af-4055-a490-561d4b8065a7,0,1,faffa228-4f4f-43f6-99b9-ed8c93af85c0,faffa228-4f4f-43f6-99b9-ed8c93af85c0,0,1,7b816ca0-ba60-4637-8348-23b26ad23e3f,7b816ca0-ba60-4637-8348-23b26ad23e3f,0,1,814a6db4-a43c-44e6-ac44-11983642c5ad,814a6db4-a43c-44e6-ac44-11983642c5ad,0,1,0bd74786-e018-4a66-b994-cdb439c57657,0bd74786-e018-4a66-b994-cdb439c57657,0,1,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,0,1,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,0,1,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,0,1,09502176-c53d-4525-b8ed-32d0a2e21a5d,09502176-c53d-4525-b8ed-32d0a2e21a5d,0,1,75ad984e-d41f-4591-b207-e8a4b05757a7,75ad984e-d41f-4591-b207-e8a4b05757a7,0,1,3f020f90-7aeb-4b21-ad71-4572ac796d4c,3f020f90-7aeb-4b21-ad71-4572ac796d4c,0,1,759e2ba0-2941-4cc1-8409-50b8a3620058,759e2ba0-2941-4cc1-8409-50b8a3620058,0,1,491cf25d-091e-4e09-b145-92d7073326cf,491cf25d-091e-4e09-b145-92d7073326cf,0,1,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,0,1,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,0,1,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,0,1,900bc96e-fbcc-473e-970c-96f561420f8e,900bc96e-fbcc-473e-970c-96f561420f8e,0,1,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,0,1,21d5a0b0-9a2b-4989-a50a-781645513179,21d5a0b0-9a2b-4989-a50a-781645513179,0,1,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,0,1,d97c6204-3656-4591-aea9-6ebedffe1247,d97c6204-3656-4591-aea9-6ebedffe1247,0,1,7caabe33-184f-45db-bef4-59d4e9cd2394,7caabe33-184f-45db-bef4-59d4e9cd2394,0,1,3255033a-e922-412e-a825-a3e8bd284703,3255033a-e922-412e-a825-a3e8bd284703,0,1,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,0,1,f250f992-ad5a-4dab-ad38-240604adb0c4,f250f992-ad5a-4dab-ad38-240604adb0c4,0,1,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,0,1,e63671f6-c96d-4ea4-8300-af7dbd0d016f,e63671f6-c96d-4ea4-8300-af7dbd0d016f,0,1,2c511469-0df6-470f-a808-decb275e8b1a,2c511469-0df6-470f-a808-decb275e8b1a,0,1,1bbb289c-a78a-47d0-b082-c2225ae1dc83,1bbb289c-a78a-47d0-b082-c2225ae1dc83,0,1,99b40f9f-f8f1-4779-8afc-59d30612f3d6,99b40f9f-f8f1-4779-8afc-59d30612f3d6,0,1,6131e875-3254-4281-9343-9118564c5451,6131e875-3254-4281-9343-9118564c5451,0,1,69622ff8-8a23-42fc-b63d-5097e3f636ac,69622ff8-8a23-42fc-b63d-5097e3f636ac,0,1,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,0,1,ef326bd8-1570-455e-ae8c-063b5578ad15,ef326bd8-1570-455e-ae8c-063b5578ad15,0,1,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,0,1,cb6d4979-2d70-4ceb-af08-deb2b19daf14,cb6d4979-2d70-4ceb-af08-deb2b19daf14,0,1,bf30b754-84fb-4104-b52b-a4f7df6fba12,bf30b754-84fb-4104-b52b-a4f7df6fba12,0,1,7bbd0835-b3e9-40cb-a424-670828b60bbb,7bbd0835-b3e9-40cb-a424-670828b60bbb,0,1,3e2138ea-48f9-4a60-8f22-53933bea49db,3e2138ea-48f9-4a60-8f22-53933bea49db,0,1,16bda2eb-eab8-4230-b89f-517fb943e009,16bda2eb-eab8-4230-b89f-517fb943e009,0,1,00964512-297f-4b8b-8def-8e4fc0eba991,00964512-297f-4b8b-8def-8e4fc0eba991,0,1,4185fea3-baba-4ba5-8019-9023b3011d4d,4185fea3-baba-4ba5-8019-9023b3011d4d,0,1,ea790035-92d6-445e-9fa3-08e565634d2b,ea790035-92d6-445e-9fa3-08e565634d2b,0,1,cce8900a-51eb-487d-b380-227d1b9d3943,cce8900a-51eb-487d-b380-227d1b9d3943,0,1,c043c36c-90c6-483b-bc20-7c2d85109b90,c043c36c-90c6-483b-bc20-7c2d85109b90,0,1,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,0,1,91d2d40a-c271-412c-b344-1fc98b94ba21,91d2d40a-c271-412c-b344-1fc98b94ba21,0,1,7ce47046-aee8-4809-bac9-a98930a844e1,7ce47046-aee8-4809-bac9-a98930a844e1,0,1,f480b8b9-ecec-4207-a0aa-12c5be4c2250,f480b8b9-ecec-4207-a0aa-12c5be4c2250,0,1,32717d25-6644-4903-8950-03e4c9b1a8fe,32717d25-6644-4903-8950-03e4c9b1a8fe,0,1,3644d8f3-db88-4fce-a851-39c115acfe03,3644d8f3-db88-4fce-a851-39c115acfe03,0,1,4653da74-34b2-47b9-ad88-efd761d6f1e9,4653da74-34b2-47b9-ad88-efd761d6f1e9,0,1,abf8a23d-45c3-4feb-8df2-279b709d7722,abf8a23d-45c3-4feb-8df2-279b709d7722,0,1,b0cd056f-c601-4d07-89c4-f7137b88bab6,b0cd056f-c601-4d07-89c4-f7137b88bab6,0,1,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,0,1,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,0,1,96ed4d39-3bdc-480f-af86-218f22000514,96ed4d39-3bdc-480f-af86-218f22000514,0,1,c9f72e74-22ac-4dc0-8462-0aa7819a9342,c9f72e74-22ac-4dc0-8462-0aa7819a9342,0,1,ca650484-293f-403a-b916-5ec7c3a8969e,ca650484-293f-403a-b916-5ec7c3a8969e,0,1,b71e706d-623e-4039-9bf0-24f151d861d8,b71e706d-623e-4039-9bf0-24f151d861d8,0,1,528f4823-33d8-49bd-a8fe-756a08a107c2,528f4823-33d8-49bd-a8fe-756a08a107c2,0,1,4869095b-b76e-45ca-b77d-0e74f59673f0,4869095b-b76e-45ca-b77d-0e74f59673f0,0,1,bcca2442-448b-4760-923b-cc9621ecb441,bcca2442-448b-4760-923b-cc9621ecb441,0,1,ba7657df-429a-4737-b787-19ef09fdebb2,ba7657df-429a-4737-b787-19ef09fdebb2,0,1,867d72be-f406-45a5-a511-b90459683f11,867d72be-f406-45a5-a511-b90459683f11,0,1,88b22e62-c144-401f-9635-3fb4d914772e,88b22e62-c144-401f-9635-3fb4d914772e,0,1,efeb2914-6604-403a-a11e-5cb995ab2bc9,efeb2914-6604-403a-a11e-5cb995ab2bc9,0,1,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,0,1,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,0,1,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,0,1,de506523-241a-4845-9259-37066afbf16a,de506523-241a-4845-9259-37066afbf16a,0,1,0510206f-eef0-4a5e-aeb7-d53c26d34adb,0510206f-eef0-4a5e-aeb7-d53c26d34adb,0,1,e616e007-43e7-4740-a083-b85f5435718a,e616e007-43e7-4740-a083-b85f5435718a,0,1,727da5b1-e054-4832-8e44-f5d5e56f52e5,727da5b1-e054-4832-8e44-f5d5e56f52e5,0,1,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,0,1,6feaad7c-9680-4341-b215-14581e2e2b37,6feaad7c-9680-4341-b215-14581e2e2b37,0,1,d5656a92-adfb-4733-830d-2b1565798b1f,d5656a92-adfb-4733-830d-2b1565798b1f,0,1,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,0,1,b0f6ea83-2849-4151-930d-692866919db3,b0f6ea83-2849-4151-930d-692866919db3,0,1,05558ce4-8568-4009-b1d7-307d54967515,05558ce4-8568-4009-b1d7-307d54967515,0,1,74380324-9b7b-49f6-9458-88deb9405f98,74380324-9b7b-49f6-9458-88deb9405f98,0,1,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,0,1,0abf70e0-0d81-4d85-a288-a2134da5fbf1,0abf70e0-0d81-4d85-a288-a2134da5fbf1,0,1,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,0,1,f66cb2da-3b3c-481f-823a-506f8290f619,f66cb2da-3b3c-481f-823a-506f8290f619,0,1,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,0,1,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,0,1,0bdcf045-5132-4a68-839c-a30515dc569e,0bdcf045-5132-4a68-839c-a30515dc569e,0,1,683861f9-9a5f-47db-8b03-959f839d5a3a,683861f9-9a5f-47db-8b03-959f839d5a3a,0,1,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,0,1,125be5bf-f410-451d-aa96-22fabc6a4d8a,125be5bf-f410-451d-aa96-22fabc6a4d8a,0,1,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,0,1,0a46166a-4562-4a50-b139-39dbe8a1fc84,0a46166a-4562-4a50-b139-39dbe8a1fc84,0,1,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,0,1,6ce64d65-f710-4d3f-a85f-26ce6915451e,6ce64d65-f710-4d3f-a85f-26ce6915451e,0,1,33eb9806-e34f-42a0-9825-3ff2de92c503,33eb9806-e34f-42a0-9825-3ff2de92c503,0,1,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,0,1,bcb58235-7cd7-4c15-a1eb-194ee38259e6,bcb58235-7cd7-4c15-a1eb-194ee38259e6,0,1,e19aefe7-634d-4218-8d40-75802d1691e0,e19aefe7-634d-4218-8d40-75802d1691e0,0,1,b885dbb2-6e18-46a6-929c-3d6d392343ad,b885dbb2-6e18-46a6-929c-3d6d392343ad,0,1,d31e24cf-7493-45dc-ba81-3a00618e53bc,d31e24cf-7493-45dc-ba81-3a00618e53bc,0,1,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,0,1,f942d212-9be0-4d80-84b6-5b63070e33e4,f942d212-9be0-4d80-84b6-5b63070e33e4,0,1,bea6bbc1-c1e4-4306-a0ca-efd47b9a8b23,bea6bbc1-c1e4-4306-a0ca-efd47b9a8b23,0,1,64c91eaa-084f-4801-8dbf-4e075c689c2b,64c91eaa-084f-4801-8dbf-4e075c689c2b,0,1,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,0,1,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,0,1,3aa12805-823a-439b-b039-fb9940aee312,3aa12805-823a-439b-b039-fb9940aee312,0,1,87d53573-f266-4b74-94af-041ae4b6518f,87d53573-f266-4b74-94af-041ae4b6518f,0,1,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,0,1,801cf1f7-2c65-4126-a3e9-b66abfdde67a,801cf1f7-2c65-4126-a3e9-b66abfdde67a,0,1,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,0,1,29c2bc01-8838-4459-8ac2-79862aa1dbc9,29c2bc01-8838-4459-8ac2-79862aa1dbc9,0,1,ad556c33-6811-48b4-ae90-57700a4d3fd6,ad556c33-6811-48b4-ae90-57700a4d3fd6,0,1,6e0833f4-3b57-4a5f-810f-9e2a492335df,6e0833f4-3b57-4a5f-810f-9e2a492335df,0,1,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,0,1,977bc9d8-9843-4343-85af-11a3d91f9966,977bc9d8-9843-4343-85af-11a3d91f9966,0,1,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,0,1,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,0,1,a6582448-734d-4a4c-a32c-c4755ca1bc93,a6582448-734d-4a4c-a32c-c4755ca1bc93,0,1,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,0,1,53327cc4-22b0-40f9-bae7-db483f85901c,53327cc4-22b0-40f9-bae7-db483f85901c,0,1,098d904d-95c9-459e-86d0-357ba9a40191,098d904d-95c9-459e-86d0-357ba9a40191,0,1,e9ab9d00-6e42-439b-8efc-fcacf727016d,e9ab9d00-6e42-439b-8efc-fcacf727016d,0,1,2d58033f-e15d-4a91-8165-dd311025c7c4,2d58033f-e15d-4a91-8165-dd311025c7c4,0,1,49cb3a36-90b3-4154-b571-265fc5cee21e,49cb3a36-90b3-4154-b571-265fc5cee21e,0,1,10472d2c-18ca-49b0-bd9d-c750db8498c5,10472d2c-18ca-49b0-bd9d-c750db8498c5,0,1,8efe5daf-272d-4255-b5c4-66dca7463b50,8efe5daf-272d-4255-b5c4-66dca7463b50,0,1,65af25a6-f699-4c40-b13e-3b7dff3f16fe,65af25a6-f699-4c40-b13e-3b7dff3f16fe,0,1,c4d2486d-289c-4812-b223-5ccfcd7f29e3,c4d2486d-289c-4812-b223-5ccfcd7f29e3,0,1,7da57c89-af2c-445a-96f7-39250f70306f,7da57c89-af2c-445a-96f7-39250f70306f,0,1,b5b94d94-25f7-4cfa-b1e9-6009fb848763,b5b94d94-25f7-4cfa-b1e9-6009fb848763,0,1,a2accf54-5966-42e8-ab2e-e56e415963ee,a2accf54-5966-42e8-ab2e-e56e415963ee,0,1,d8eb5329-5900-4b5d-b45e-458513dddfef,d8eb5329-5900-4b5d-b45e-458513dddfef,0,1,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,0,1,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,0,1,6ffd2da8-db97-46fc-9a53-8e665a598e3c,6ffd2da8-db97-46fc-9a53-8e665a598e3c,0,1,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,0,1,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,0,1,eaaed107-69d4-4963-be83-74519e331715,eaaed107-69d4-4963-be83-74519e331715,0,1,38cddf96-8703-4396-8c73-47fb22828a48,38cddf96-8703-4396-8c73-47fb22828a48,0,1,2c2cb793-0177-4983-91ca-9c292c5b10f1,2c2cb793-0177-4983-91ca-9c292c5b10f1,0,1,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,0,1,221fa473-3327-44e6-a033-6fdfd2be713c,221fa473-3327-44e6-a033-6fdfd2be713c,0,1,7a5973f0-7e29-44af-8e7b-70af71f704a4,7a5973f0-7e29-44af-8e7b-70af71f704a4,0,1,2b2bf0f7-0946-4492-bba0-27f007a70e64,2b2bf0f7-0946-4492-bba0-27f007a70e64,0,1,22c9a703-5ed3-4156-8fa6-476b1c1452f1,22c9a703-5ed3-4156-8fa6-476b1c1452f1,0,1,27089e8e-2c75-431c-b808-5d4dcba3cdca,27089e8e-2c75-431c-b808-5d4dcba3cdca,0,1,9ab3980e-a480-4f90-a8cc-bde99d5ace35,9ab3980e-a480-4f90-a8cc-bde99d5ace35,0,1,ec928563-6e35-4b84-b477-90d2481cec1c,ec928563-6e35-4b84-b477-90d2481cec1c,0,1,5d3e9678-20fe-4128-867a-3f7addaa7831,5d3e9678-20fe-4128-867a-3f7addaa7831,0,1,bb878f73-8a0f-459a-9076-ce57fe7957dc,bb878f73-8a0f-459a-9076-ce57fe7957dc,0,1,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,0,1,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,0,1,9f4b8e36-83ff-4694-8540-b5f47b18395f,9f4b8e36-83ff-4694-8540-b5f47b18395f,0,1,b4c026eb-4271-4366-b529-1cdfe2874563,b4c026eb-4271-4366-b529-1cdfe2874563,0,1,314b0da2-24d3-48cc-8532-d36c45eb3bf8,314b0da2-24d3-48cc-8532-d36c45eb3bf8,0,1,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,0,1,4077e700-ec20-4afa-8155-bf7e516a70cb,4077e700-ec20-4afa-8155-bf7e516a70cb,0,1,5198c6db-2100-4902-82c8-85c8ea555e78,5198c6db-2100-4902-82c8-85c8ea555e78,0,1,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,0,1,f0b1e9f4-2e07-44e6-88d2-c11457135781,f0b1e9f4-2e07-44e6-88d2-c11457135781,0,1,e010c0f9-f770-4fdc-8607-50838c0262ef,e010c0f9-f770-4fdc-8607-50838c0262ef,0,1,f935399f-3554-4c08-b0a6-eba13074e1b7,f935399f-3554-4c08-b0a6-eba13074e1b7,0,1,10008125-3aeb-4912-8ad6-d92d283ea09a,10008125-3aeb-4912-8ad6-d92d283ea09a,0,1,765f9584-fefa-4695-b130-dd54c3b0d79d,765f9584-fefa-4695-b130-dd54c3b0d79d,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,d22a0a50-220d-459e-a23a-39730a1e67c4,d22a0a50-220d-459e-a23a-39730a1e67c4,0,1,2c1c9284-ba8b-4282-a89c-429f02ea41f6,2c1c9284-ba8b-4282-a89c-429f02ea41f6,0,1,1d3b9eff-5d0b-437b-932f-0ec466e092b2,1d3b9eff-5d0b-437b-932f-0ec466e092b2,0,1,fd7e5257-024c-46de-9ff3-edd302fadba5,fd7e5257-024c-46de-9ff3-edd302fadba5,0,1,a4168057-d99f-4b55-b762-214f95ae3a30,a4168057-d99f-4b55-b762-214f95ae3a30,0,1,ab4fe549-1c07-42d9-b412-8b89ed115591,ab4fe549-1c07-42d9-b412-8b89ed115591,0,1,0335804e-efe5-4fb9-9ae9-2ddca73d77f3,0335804e-efe5-4fb9-9ae9-2ddca73d77f3,0,1,b49c589d-b45d-4aff-8899-72cfe433e9a6,b49c589d-b45d-4aff-8899-72cfe433e9a6,0,1,f71a8d47-6a6c-4b7e-90b3-5b7a3be3ccd3,f71a8d47-6a6c-4b7e-90b3-5b7a3be3ccd3,0,1,273ad3f7-c645-434d-93b0-e832134f3043,273ad3f7-c645-434d-93b0-e832134f3043,0,1,d320803b-1de4-4e66-b455-0afe39be5c41,d320803b-1de4-4e66-b455-0afe39be5c41,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,86249619-8981-4fc4-85fc-ce30e4b9d542,86249619-8981-4fc4-85fc-ce30e4b9d542,0,1,da6e4bff-9835-4b92-b62b-291a5d6c86fe,da6e4bff-9835-4b92-b62b-291a5d6c86fe,0,1,8be35c43-32e6-418d-b3d6-e53ef56babb7,8be35c43-32e6-418d-b3d6-e53ef56babb7,0,1,3e4f5fd0-af15-41ae-896e-458ce9fb7e4d,3e4f5fd0-af15-41ae-896e-458ce9fb7e4d,0,1,935d01e1-232b-480e-a6bf-c21c617c6348,935d01e1-232b-480e-a6bf-c21c617c6348,0,1,9bc7cc99-1237-4f9c-8a4e-f3ab459186ef,9bc7cc99-1237-4f9c-8a4e-f3ab459186ef,0,1,05c702a1-2c74-45d5-b2ee-fdd795b0945a,05c702a1-2c74-45d5-b2ee-fdd795b0945a,0,1,3fadaeb7-2c41-42a4-bfa8-c585602b1028,3fadaeb7-2c41-42a4-bfa8-c585602b1028,0,1,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,0,1,083c709b-ed8c-47e4-a190-421e14259e73,083c709b-ed8c-47e4-a190-421e14259e73,0,1,b98dacc7-29e1-426b-a664-0a988f18186c,b98dacc7-29e1-426b-a664-0a988f18186c,0,1,d678856d-6e7c-443f-a6e3-350bbe8af659,d678856d-6e7c-443f-a6e3-350bbe8af659,0,1,d0979762-22ce-41be-b7a4-5e9ac149d94b,d0979762-22ce-41be-b7a4-5e9ac149d94b,0,1,ae23e70c-479e-47ad-9bfa-58560a903410,ae23e70c-479e-47ad-9bfa-58560a903410,0,1,c0d83781-bbda-43f7-bf0e-5defa3d47143,c0d83781-bbda-43f7-bf0e-5defa3d47143,0,1,21fa5fdd-acbc-403b-9acb-bbf95284bd20,21fa5fdd-acbc-403b-9acb-bbf95284bd20,0,1,576a01e3-4d6d-4241-a3c4-7661ba129bcb,576a01e3-4d6d-4241-a3c4-7661ba129bcb,0,1,9f7290dd-19f4-4163-9795-fe562e84f06d,9f7290dd-19f4-4163-9795-fe562e84f06d,0,1,c3b5c81f-b787-4f63-8cba-79def0921477,c3b5c81f-b787-4f63-8cba-79def0921477,0,1,1f0cb3d4-1344-451b-a257-be3cd854acfd,1f0cb3d4-1344-451b-a257-be3cd854acfd,0,1,0131fe59-ce47-48b7-8f7e-1544bf0fa031,0131fe59-ce47-48b7-8f7e-1544bf0fa031,0,1,c8b0a1be-97c6-4a16-b1dd-31901ac61cdc,c8b0a1be-97c6-4a16-b1dd-31901ac61cdc,0,1,372150e2-526e-4424-8c54-e4b16bdd25b5,372150e2-526e-4424-8c54-e4b16bdd25b5,0,1,752dc569-cf84-42d7-911d-49d455f7214e,752dc569-cf84-42d7-911d-49d455f7214e,0,1,fecab2b9-27e1-44d6-9082-79c3569b7477,fecab2b9-27e1-44d6-9082-79c3569b7477,0,1,07ae092f-8517-47b7-b54c-5dbcb6506929,07ae092f-8517-47b7-b54c-5dbcb6506929,0,1,db4c25bb-d199-43ec-833d-82972de04a41,db4c25bb-d199-43ec-833d-82972de04a41,0,1,43d19685-0794-41f2-9171-bf565133718d,43d19685-0794-41f2-9171-bf565133718d,0,1,b68c15c4-4966-4f13-8912-2d479b65089a,b68c15c4-4966-4f13-8912-2d479b65089a,0,1,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,0,1,f87e3935-dae1-4192-b6a7-05e3c700c590,f87e3935-dae1-4192-b6a7-05e3c700c590,0,1,ee635706-6ee2-4956-8d58-a235f64687f6,ee635706-6ee2-4956-8d58-a235f64687f6,0,1,a5a40ca7-d665-420b-a516-1355019d6901,a5a40ca7-d665-420b-a516-1355019d6901,0,1,adf9304c-ccf8-492e-95b1-0754764586a2,adf9304c-ccf8-492e-95b1-0754764586a2,0,1,fd175112-ec8f-4088-9b21-d8135056f0c5,fd175112-ec8f-4088-9b21-d8135056f0c5,0,1,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,0,1,df76a1b7-312a-4e77-bac1-79befadb4495,df76a1b7-312a-4e77-bac1-79befadb4495,0,1,ab39fad8-1039-491e-982a-c49637770ec0,ab39fad8-1039-491e-982a-c49637770ec0,0,1,7d93a6ba-3ca7-45ab-a540-743c79587535,7d93a6ba-3ca7-45ab-a540-743c79587535,0,1,76b58810-0527-4dfc-8858-bac68e7e65f3,76b58810-0527-4dfc-8858-bac68e7e65f3,0,1,aba97fd9-f05e-45cd-8404-ed702070e17a,aba97fd9-f05e-45cd-8404-ed702070e17a,0,1,f5c415cd-429b-469f-9332-c43ab5d1c8d6,f5c415cd-429b-469f-9332-c43ab5d1c8d6,0,1,458e9c6b-b828-404b-be5a-c6c0aeea34c9,458e9c6b-b828-404b-be5a-c6c0aeea34c9,0,1,7262eb4d-2d2d-454c-beaa-974645813af7,7262eb4d-2d2d-454c-beaa-974645813af7,0,1,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,0,1,49221b2f-aae2-4bee-9a1a-18263fc74244,49221b2f-aae2-4bee-9a1a-18263fc74244,0,1,da0cd264-da2f-4044-af28-c91d2efe1d5c,da0cd264-da2f-4044-af28-c91d2efe1d5c,0,1,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,0,1,fad26b16-8638-496b-bd12-381fc6f5b71f,fad26b16-8638-496b-bd12-381fc6f5b71f,0,1,ed3cfb74-a37a-4314-a2d7-4ce717a2edd9,ed3cfb74-a37a-4314-a2d7-4ce717a2edd9,0,1,324a56c9-02d9-4177-af84-a817b8c41169,324a56c9-02d9-4177-af84-a817b8c41169,0,1,1e44abfe-c173-4802-b535-96849d384983,1e44abfe-c173-4802-b535-96849d384983,0,1,2751a509-037b-49aa-9ca8-e87057d6d82c,2751a509-037b-49aa-9ca8-e87057d6d82c,0,1,35f62549-eb6a-4284-a6e3-406b0d9df0cf,35f62549-eb6a-4284-a6e3-406b0d9df0cf,0,1,cee94c04-7a46-47a5-bdd5-6f0dbd884e97,cee94c04-7a46-47a5-bdd5-6f0dbd884e97,0,1,fd66995b-ee76-41d3-983f-33d84bdcbbd4,fd66995b-ee76-41d3-983f-33d84bdcbbd4,0,1,73e97918-b34e-4ad2-8591-4c219eb92f2c,73e97918-b34e-4ad2-8591-4c219eb92f2c,0,1,445cf7eb-35d0-48f8-9579-c2ec574ef324,445cf7eb-35d0-48f8-9579-c2ec574ef324,0,1,1025657e-afd2-4c7b-96d5-ccbedaca4619,1025657e-afd2-4c7b-96d5-ccbedaca4619,0,1,64839c78-b2fa-4d80-bee0-b3d3a7e5db35,64839c78-b2fa-4d80-bee0-b3d3a7e5db35,0,1,e754ad5c-cf3c-4198-af81-128475924cb0,e754ad5c-cf3c-4198-af81-128475924cb0,0,1,ed65d504-b210-4014-85ec-275ad633ef04,ed65d504-b210-4014-85ec-275ad633ef04,0,1,dc31edb1-273e-4b1a-8e69-32393479ff36,dc31edb1-273e-4b1a-8e69-32393479ff36,0,1,3ab0649b-239f-4466-b897-73c0ab628927,3ab0649b-239f-4466-b897-73c0ab628927,0,1,4c697110-8941-4d6d-ba03-f2b9e96ff82e,4c697110-8941-4d6d-ba03-f2b9e96ff82e,0,1,7ea4112d-fc41-4f1e-bd22-f04adeac1d8f,7ea4112d-fc41-4f1e-bd22-f04adeac1d8f,0,1,b172631b-da0d-42f4-ae6b-ae122a46cced,b172631b-da0d-42f4-ae6b-ae122a46cced,0,1,1a25e744-37ae-46ca-a328-ff8eced21a82,1a25e744-37ae-46ca-a328-ff8eced21a82,0,1,dddabe54-a93b-4e4b-acbb-cc522e4d7c28,dddabe54-a93b-4e4b-acbb-cc522e4d7c28,0,1,46169f0b-8514-40a1-9d27-8489cab72503,46169f0b-8514-40a1-9d27-8489cab72503,0,1,d9cf39cc-8652-4c4d-bc5b-b4e455c0083f,d9cf39cc-8652-4c4d-bc5b-b4e455c0083f,0,1,4b0d7d39-5f79-4a21-b0bb-d3142a3bc8a9,4b0d7d39-5f79-4a21-b0bb-d3142a3bc8a9,0,1,c90243af-582c-4f5a-88e7-e0cbc0555fcb,c90243af-582c-4f5a-88e7-e0cbc0555fcb,0,1,14bf4066-15cb-4165-b854-45443ee27da1,14bf4066-15cb-4165-b854-45443ee27da1,0,1,a0861dd3-ced5-485e-8719-0ad0bc3adc0d,a0861dd3-ced5-485e-8719-0ad0bc3adc0d,0,1,5a94a307-3f54-4753-8ef5-ce9f88417827,5a94a307-3f54-4753-8ef5-ce9f88417827,0,1,0f09b6b8-72ac-4461-96c4-683be403e2ff,0f09b6b8-72ac-4461-96c4-683be403e2ff,0,1,b73d0f07-9c6e-41b1-9acc-8e83dacd7528,b73d0f07-9c6e-41b1-9acc-8e83dacd7528,0,1,19d1d74a-de5f-475a-896c-a32b7d28f918,19d1d74a-de5f-475a-896c-a32b7d28f918,0,1,4427cab9-4eea-4415-98ef-6021a447c60c,4427cab9-4eea-4415-98ef-6021a447c60c,0,1,fe46b4da-d865-468f-badd-83644bf88faa,fe46b4da-d865-468f-badd-83644bf88faa,0,1,2851c9d4-4366-4488-926d-a7fcd3b1548c,2851c9d4-4366-4488-926d-a7fcd3b1548c,0,1,31116aa2-cfbc-48e8-886b-45c1c17508fd,31116aa2-cfbc-48e8-886b-45c1c17508fd,0,1,6aa819d3-c56d-4561-a2e4-a1188ab1295a,6aa819d3-c56d-4561-a2e4-a1188ab1295a,0,1,2ddf344d-7065-40d5-9306-23870d8fc04a,2ddf344d-7065-40d5-9306-23870d8fc04a,0,1,c630ab2d-0a20-4136-88b6-220b2cad6a71,c630ab2d-0a20-4136-88b6-220b2cad6a71,0,1,00cd1dea-bc54-475c-956d-dc5221104932,00cd1dea-bc54-475c-956d-dc5221104932,0,1,3807f865-dd2c-44f7-9238-3db191f0a186,3807f865-dd2c-44f7-9238-3db191f0a186,0,1,8f184df5-bfe8-4df3-bc7c-18218cef7650,8f184df5-bfe8-4df3-bc7c-18218cef7650,0,1,387e273a-889f-454b-8b43-feaa12025fde,387e273a-889f-454b-8b43-feaa12025fde,0,1,1c38ad75-b294-4c05-89ce-69ce4d9a291f,1c38ad75-b294-4c05-89ce-69ce4d9a291f,0,1,078d1e8f-6d27-4761-9532-b1e7a60e4c13,078d1e8f-6d27-4761-9532-b1e7a60e4c13,0,1,4262193c-58ad-47c6-8088-735d8cd037ea,4262193c-58ad-47c6-8088-735d8cd037ea,0,1,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,0,1,de6d1aad-39eb-46ce-87aa-d29812bb37bf,de6d1aad-39eb-46ce-87aa-d29812bb37bf,0,1,4ad859ec-cc75-4bac-9e89-397798450e48,4ad859ec-cc75-4bac-9e89-397798450e48,0,1,d93ab94c-0f55-4b80-b226-41b44c73b3ea,d93ab94c-0f55-4b80-b226-41b44c73b3ea,0,1,94cbed80-5a35-471f-b354-439a11629210,94cbed80-5a35-471f-b354-439a11629210,0,1,1162cc0a-42e5-47cb-9507-68459579f110,1162cc0a-42e5-47cb-9507-68459579f110,0,1,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,0,1,bb49dc80-4934-4f44-8f27-9a363dca8dc4,bb49dc80-4934-4f44-8f27-9a363dca8dc4,0,1,7338e497-03a7-4ed4-85a2-ca802c065a9f,7338e497-03a7-4ed4-85a2-ca802c065a9f,0,1,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,0,1,5249687b-9ff4-46f5-be15-dbb5d5047fd1,5249687b-9ff4-46f5-be15-dbb5d5047fd1,0,1,d33df51c-3dcd-496c-90f2-7ee05582bdf7,d33df51c-3dcd-496c-90f2-7ee05582bdf7,0,1,24b39ebd-2424-4939-8e3e-d09eb674d409,24b39ebd-2424-4939-8e3e-d09eb674d409,0,1,08c751bb-9e57-4536-901e-bb316c8e96d7,08c751bb-9e57-4536-901e-bb316c8e96d7,0,1,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,0,1,034cdcef-08e5-4751-9885-400aa69e0b94,034cdcef-08e5-4751-9885-400aa69e0b94,0,1,efefebea-2032-4006-b9ca-50a23b7da1ef,efefebea-2032-4006-b9ca-50a23b7da1ef,0,1,4c794d37-3352-4acb-a939-5e90fb682db8,4c794d37-3352-4acb-a939-5e90fb682db8,0,1,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,0,1,008f5068-da9c-4dac-9c0a-a50366d27cbb,008f5068-da9c-4dac-9c0a-a50366d27cbb,0,1,950b3ee3-070f-4946-8b9b-0aa2058de986,950b3ee3-070f-4946-8b9b-0aa2058de986,0,1,bd04a870-0943-4bdb-9e30-50a69daa8a13,bd04a870-0943-4bdb-9e30-50a69daa8a13,0,1,a23e6c77-8c12-4f99-ae2d-68a12274be38,a23e6c77-8c12-4f99-ae2d-68a12274be38,0,1,3c4454cd-31e9-42a5-9127-fb66a628f0e1,3c4454cd-31e9-42a5-9127-fb66a628f0e1,0,1,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,0,1,31cac1e9-eb16-489c-9322-30d1e27a80b3,31cac1e9-eb16-489c-9322-30d1e27a80b3,0,1,0d100e33-7941-41c1-962d-7672c874e9c5,0d100e33-7941-41c1-962d-7672c874e9c5,0,1,c5ac53c9-c9b2-4b90-a21e-10f1daa756c5,c5ac53c9-c9b2-4b90-a21e-10f1daa756c5,0,1,6e61d717-de36-4dce-8af9-b6c14ed76acb,6e61d717-de36-4dce-8af9-b6c14ed76acb,0,1,474518fe-9cb5-4a12-9388-bc7a64511617,474518fe-9cb5-4a12-9388-bc7a64511617,0,1,64337614-b1c9-4931-b576-448721fa4602,64337614-b1c9-4931-b576-448721fa4602,0,1,1d73b59c-0594-4ed3-b584-cf1261941e1d,1d73b59c-0594-4ed3-b584-cf1261941e1d,0,1,8ff2547f-d596-4fa1-9e12-079e1cc4c057,8ff2547f-d596-4fa1-9e12-079e1cc4c057,0,1,1ab0c8f8-b908-4618-ae88-af37b8f1224e,1ab0c8f8-b908-4618-ae88-af37b8f1224e,0,1,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,0,1,b85b3a58-95e4-4698-b1ae-037901ecc1b1,b85b3a58-95e4-4698-b1ae-037901ecc1b1,0,1,b77d748a-d180-432d-91c3-774e6ccf7efa,b77d748a-d180-432d-91c3-774e6ccf7efa,0,1,e5b9c1b0-4690-442c-b160-e6c587e42e57,e5b9c1b0-4690-442c-b160-e6c587e42e57,0,1,e3adb576-6b33-475b-976b-7a6783de3184,e3adb576-6b33-475b-976b-7a6783de3184,0,1,c6cef8db-0689-42a6-9f43-c86b7c3cf0e9,c6cef8db-0689-42a6-9f43-c86b7c3cf0e9,0,1,78f5a205-dffb-4009-897a-e8f36372f33c,78f5a205-dffb-4009-897a-e8f36372f33c,0,1,f7597041-f182-42fb-803a-2521c70d627d,f7597041-f182-42fb-803a-2521c70d627d,0,1,ce988b8a-d0c1-400a-9466-aa757501bb58,ce988b8a-d0c1-400a-9466-aa757501bb58,0,1,ab98d665-8da8-406e-9e0e-3e130ab393ef,ab98d665-8da8-406e-9e0e-3e130ab393ef,0,1,9e823bb6-b0c0-439e-81e4-ebd46b79b99c,9e823bb6-b0c0-439e-81e4-ebd46b79b99c,0,1,118a0e62-c0bb-435b-9e3e-c64563efa602,118a0e62-c0bb-435b-9e3e-c64563efa602,0,1,b57bc8a9-8a59-4192-a442-2e1982e83179,b57bc8a9-8a59-4192-a442-2e1982e83179,0,1,5b06ccda-2a70-4621-8273-78408cbe72a9,5b06ccda-2a70-4621-8273-78408cbe72a9,0,1,89753385-64fd-4e76-9857-bfd5d7c23f71,89753385-64fd-4e76-9857-bfd5d7c23f71,0,1,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,0,1,53e72cf2-e2a5-4b59-b5b1-a1fc28fda5bf,53e72cf2-e2a5-4b59-b5b1-a1fc28fda5bf,0,1,e20bcb57-2f68-4709-8a11-105d561a2dda,e20bcb57-2f68-4709-8a11-105d561a2dda,0,1,3df3f61a-2c17-4278-8d82-91089f793e6a,3df3f61a-2c17-4278-8d82-91089f793e6a,0,1,ea8beea1-7d80-4613-b2f9-79ee612e977a,ea8beea1-7d80-4613-b2f9-79ee612e977a,0,1,afd62a32-fdbb-429a-9a64-89c61a07e018,afd62a32-fdbb-429a-9a64-89c61a07e018,0,1,027cef43-99bd-48d3-a1a3-2102ac003742,027cef43-99bd-48d3-a1a3-2102ac003742,0,1,00197ea9-de76-4e2a-97bc-93e44053e35e,00197ea9-de76-4e2a-97bc-93e44053e35e,0,1,540a47b8-f6d4-4531-ac87-3f7cfbef4c8c,540a47b8-f6d4-4531-ac87-3f7cfbef4c8c,0,1,a51f7c6f-2631-4d23-becc-c0e8b711fddd,a51f7c6f-2631-4d23-becc-c0e8b711fddd,0,1,37806357-d92c-4bea-a5ef-77f138578fda,37806357-d92c-4bea-a5ef-77f138578fda,0,1,91b100e6-fbbe-4bb0-8d51-d12595a2a3e8,91b100e6-fbbe-4bb0-8d51-d12595a2a3e8,0,1,0a880538-f97f-448e-a4a9-82b0194dbe28,0a880538-f97f-448e-a4a9-82b0194dbe28,0,1,179868b7-d342-4df0-9386-c114d75faf3a,179868b7-d342-4df0-9386-c114d75faf3a,0,1,bbc4cc8c-31c2-4fcf-b86c-9ec65b2772b0,bbc4cc8c-31c2-4fcf-b86c-9ec65b2772b0,0,1,b49ea672-5d01-46c2-8ece-2511afeb740d,b49ea672-5d01-46c2-8ece-2511afeb740d,0,1,77bb5aba-1364-4db9-aa93-69f001ce2709,77bb5aba-1364-4db9-aa93-69f001ce2709,0,1,d14528d6-c2dd-4184-98c5-0b444a2bd98b,d14528d6-c2dd-4184-98c5-0b444a2bd98b,0,1,48f81387-a409-4163-85b8-ad563cb6cf2e,48f81387-a409-4163-85b8-ad563cb6cf2e,0,1,739df12e-1b6b-45c6-802b-658641fb9e90,739df12e-1b6b-45c6-802b-658641fb9e90,0,1,878fe826-fa99-44ad-9891-5eada9744017,878fe826-fa99-44ad-9891-5eada9744017,0,1,0d61712a-dfaf-46f1-b728-62993dd94fbe,0d61712a-dfaf-46f1-b728-62993dd94fbe,0,1,3a6cf496-09b9-4947-9df5-06d23b474558,3a6cf496-09b9-4947-9df5-06d23b474558,0,1,625b498a-33d1-4162-9525-fb7790cbb6a8,625b498a-33d1-4162-9525-fb7790cbb6a8,0,1,28223f7b-d15a-4f12-b57c-1f6d08a902f9,28223f7b-d15a-4f12-b57c-1f6d08a902f9,0,1,dd9eb5b7-5aed-4e51-9939-9ff14492d240,dd9eb5b7-5aed-4e51-9939-9ff14492d240,0,1,b2a14899-d589-4990-b85e-7bffb427e8af,b2a14899-d589-4990-b85e-7bffb427e8af,0,1,0981d114-05bd-4ee1-a8fd-398fa6620d0b,0981d114-05bd-4ee1-a8fd-398fa6620d0b,0,1,3210ba40-382e-4917-ad0f-9bd88d23dc25,3210ba40-382e-4917-ad0f-9bd88d23dc25,0,1,835e3ead-d01f-410b-937a-902dd5e66aec,835e3ead-d01f-410b-937a-902dd5e66aec,0,1,40141982-d1d6-416f-844e-19143a407ff9,40141982-d1d6-416f-844e-19143a407ff9,0,1,618b8843-7413-4634-bd65-18d904c2582f,618b8843-7413-4634-bd65-18d904c2582f,0,1,253b97a6-4e04-40d0-a39e-99500d54accb,253b97a6-4e04-40d0-a39e-99500d54accb,0,1,46cf1217-4b49-4c35-9c2b-4739dd1b8bf5,46cf1217-4b49-4c35-9c2b-4739dd1b8bf5,0,1,db367faa-e417-40ff-a082-e93421d464ca,db367faa-e417-40ff-a082-e93421d464ca,0,1,55ad14cb-7647-4d16-ae68-ac45e4a39c01,55ad14cb-7647-4d16-ae68-ac45e4a39c01,0,1,f0363f45-9d63-4f0b-b7fc-95cb0d1660af,f0363f45-9d63-4f0b-b7fc-95cb0d1660af,0,1,d8a16236-89bc-4493-9b8e-fd5d3f9298a7,d8a16236-89bc-4493-9b8e-fd5d3f9298a7,0,1,b12a0998-905e-4956-af8b-6460dc945c10,b12a0998-905e-4956-af8b-6460dc945c10,0,1,66ec2482-c1f3-45d3-9257-e0b9f5ae772a,66ec2482-c1f3-45d3-9257-e0b9f5ae772a,0,1,d3211832-c8ca-437a-8810-82e06cbb48de,d3211832-c8ca-437a-8810-82e06cbb48de,0,1,8131d701-1014-4196-9b67-914e451f8a3a,8131d701-1014-4196-9b67-914e451f8a3a,0,1,2b102933-c660-4e74-ae9a-5061a88ed672,2b102933-c660-4e74-ae9a-5061a88ed672,0,1,56c897b7-d34e-4d7d-9a3b-d0779be5c189,56c897b7-d34e-4d7d-9a3b-d0779be5c189,0,1,3ac81c80-56bd-4750-b135-07ab522e3eab,3ac81c80-56bd-4750-b135-07ab522e3eab,0,1,5657872f-c7d5-446f-bcc3-d0b86ad63a42,5657872f-c7d5-446f-bcc3-d0b86ad63a42,0,1,d5214cb9-67e2-469f-989f-3f2b662ae830,d5214cb9-67e2-469f-989f-3f2b662ae830,0,1,69679e88-4f2b-4dd6-8cb2-b88293d07b55,69679e88-4f2b-4dd6-8cb2-b88293d07b55,0,1,68679208-9972-4854-8649-49bdf6212255,68679208-9972-4854-8649-49bdf6212255,0,1,98393093-7ba6-4b4d-86be-ee5826cd8cd5,98393093-7ba6-4b4d-86be-ee5826cd8cd5,0,1,87de486d-3f35-4432-a7cd-9d3832db63cf,87de486d-3f35-4432-a7cd-9d3832db63cf,0,1,246f17a0-93a7-4e2c-8fa6-f57405f0abeb,246f17a0-93a7-4e2c-8fa6-f57405f0abeb,0,1,ea6c4830-a34d-4026-a0ca-5cf7e44f089d,ea6c4830-a34d-4026-a0ca-5cf7e44f089d,0,1,bb7ce04a-8143-4c0b-a196-1b57f1640142,bb7ce04a-8143-4c0b-a196-1b57f1640142,0,1,4872f12c-705c-4dd3-802f-d27496a0d634,4872f12c-705c-4dd3-802f-d27496a0d634,0,1,3bacfd93-dfc7-4154-9d3f-b61ddc5c6721,3bacfd93-dfc7-4154-9d3f-b61ddc5c6721,0,1,0c0bbfba-c1c4-4bb5-a813-10da4bef7911,0c0bbfba-c1c4-4bb5-a813-10da4bef7911,0,1,f9ada91a-e673-4821-9bce-cb0dd75ca28b,f9ada91a-e673-4821-9bce-cb0dd75ca28b,0,1,9fcf68bb-43e2-4cd1-89ec-8797ad9c0e8b,9fcf68bb-43e2-4cd1-89ec-8797ad9c0e8b,0,1,90ce635a-0277-4056-980d-d1a16d91cb30,90ce635a-0277-4056-980d-d1a16d91cb30,0,1,e61a8360-a0f8-4d86-b91a-2ae9b8552bf0,e61a8360-a0f8-4d86-b91a-2ae9b8552bf0,0,1,1e77e873-632c-482b-8f46-8f8cc3cc8cef,1e77e873-632c-482b-8f46-8f8cc3cc8cef,0,1,766208a3-2780-427b-a7d3-93abe99d236b,766208a3-2780-427b-a7d3-93abe99d236b,0,1,63ce4c3c-5bad-409c-904f-18f34cf1da78,63ce4c3c-5bad-409c-904f-18f34cf1da78,0,1,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,0,1,26ac22f9-0bbb-4671-b446-626e345e2461,26ac22f9-0bbb-4671-b446-626e345e2461,0,1,0d63ee6d-e17f-4a86-b384-adf9793f3331,0d63ee6d-e17f-4a86-b384-adf9793f3331,0,1,f152945b-2a7b-449e-a915-176166af7bac,f152945b-2a7b-449e-a915-176166af7bac,0,1,77f5d86a-7fae-4490-9740-0e31102dab5c,77f5d86a-7fae-4490-9740-0e31102dab5c,0,1,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,0,1,24be43ec-d39e-46aa-9c11-2536b835e515,24be43ec-d39e-46aa-9c11-2536b835e515,0,1,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,0,1,df9af3ee-6a69-4a03-8ff5-0735e9a38013,df9af3ee-6a69-4a03-8ff5-0735e9a38013,0,1,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,0,1,7743fe24-b941-4dad-bc76-05fb6b26b1d7,7743fe24-b941-4dad-bc76-05fb6b26b1d7,0,1,5bf2da0d-f318-4036-9234-8a3a6eca88b2,5bf2da0d-f318-4036-9234-8a3a6eca88b2,0,1,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,0,1,c3634571-6fe5-45ab-9362-161305eef661,c3634571-6fe5-45ab-9362-161305eef661,0,1,ec11342f-594f-416f-a10f-bd1bfa695c08,ec11342f-594f-416f-a10f-bd1bfa695c08,0,1,31c3ac44-204e-43fd-bca3-fd18fa091c58,31c3ac44-204e-43fd-bca3-fd18fa091c58,0,1,74f03c35-5da0-406e-a938-e8e5d49975ef,74f03c35-5da0-406e-a938-e8e5d49975ef,0,1,c9ab3890-6d16-431f-ab2b-b5058e6202a4,c9ab3890-6d16-431f-ab2b-b5058e6202a4,0,1,5ee9eed7-3c6c-4264-ab9a-6f24f9c80598,5ee9eed7-3c6c-4264-ab9a-6f24f9c80598,0,1,3c33adc7-abea-4e0f-9e5d-d8f10abb63df,3c33adc7-abea-4e0f-9e5d-d8f10abb63df,0,1,4090c6f7-1d25-4b17-9baa-18daa0640b0f,4090c6f7-1d25-4b17-9baa-18daa0640b0f,0,1,26125e58-dfc8-4bbb-a3a4-80616471746e,26125e58-dfc8-4bbb-a3a4-80616471746e,0,1,b1c699cd-efdc-461c-ad37-10bfd4bc9674,b1c699cd-efdc-461c-ad37-10bfd4bc9674,0,1,6add1920-5073-4b1e-b7e0-13bf1e65e4c3,6add1920-5073-4b1e-b7e0-13bf1e65e4c3,0,1,f12c946c-98e4-4da6-8a88-c555e9dc3bdd,f12c946c-98e4-4da6-8a88-c555e9dc3bdd,0,1,ec5718b7-1c4d-4bdc-9426-40a339bb29cf,ec5718b7-1c4d-4bdc-9426-40a339bb29cf,0,1,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,0,1,96661303-1286-4f84-93b7-0e6da2bd7893,96661303-1286-4f84-93b7-0e6da2bd7893,0,1,68076431-36e6-46dc-92cb-e0d8e605bf66,68076431-36e6-46dc-92cb-e0d8e605bf66,0,1,239fa55a-6572-4e5c-9918-c2e14063c76d,239fa55a-6572-4e5c-9918-c2e14063c76d,0,1,8211a1b6-c3b1-466b-8d11-22603fb50c7a,8211a1b6-c3b1-466b-8d11-22603fb50c7a,0,1,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,0,1,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,0,1,a83cb338-5707-42c9-9e88-11f6c68fcc32,a83cb338-5707-42c9-9e88-11f6c68fcc32,0,1,985106b7-7476-4b48-90ac-ad86876395b5,985106b7-7476-4b48-90ac-ad86876395b5,0,1,0d8db0c9-adbc-478d-997c-3d7feccac99b,0d8db0c9-adbc-478d-997c-3d7feccac99b,0,1,3fd2ef04-c178-47bf-ab62-7baf83236d99,3fd2ef04-c178-47bf-ab62-7baf83236d99,0,1,b4cd1b51-dbc0-4bb0-879e-5ac0d58e78c1,b4cd1b51-dbc0-4bb0-879e-5ac0d58e78c1,0,1,320bf2e6-a3a8-490b-8aa0-21369ffb121b,320bf2e6-a3a8-490b-8aa0-21369ffb121b,0,1,a3bafc54-8fe4-4841-acc6-74a87baf9caf,a3bafc54-8fe4-4841-acc6-74a87baf9caf,0,1,f93741c9-ab94-464b-b0d4-4af99c9f92d5,f93741c9-ab94-464b-b0d4-4af99c9f92d5,0,1,0fddbd8d-12dd-4af1-9e34-feebf4bc38b1,0fddbd8d-12dd-4af1-9e34-feebf4bc38b1,0,1,2e9548a6-1fd8-4430-8864-91bde0d2a7a1,2e9548a6-1fd8-4430-8864-91bde0d2a7a1,0,1,c59fd3f8-c734-49d3-90ba-e608a22ac981,c59fd3f8-c734-49d3-90ba-e608a22ac981,0,1,b26235ed-374c-44ab-8b3c-01d7c4d82d4c,b26235ed-374c-44ab-8b3c-01d7c4d82d4c,0,1,5056db9f-9ebe-4cca-98f0-5f4817a1cba4,5056db9f-9ebe-4cca-98f0-5f4817a1cba4,0,1,475f76ea-f494-41f1-9b65-f39907e5a427,475f76ea-f494-41f1-9b65-f39907e5a427,0,1,986280d1-41bb-4b15-a5ae-516d6a04c1f4,986280d1-41bb-4b15-a5ae-516d6a04c1f4,0,1,43bfd29a-d254-4c33-8639-200b483578c1,43bfd29a-d254-4c33-8639-200b483578c1,0,1,6a274167-7f80-4613-9890-259ffd8ccfc4,6a274167-7f80-4613-9890-259ffd8ccfc4,0,1,4e90e1ab-b1ec-4795-ad45-1db151a5492c,4e90e1ab-b1ec-4795-ad45-1db151a5492c,0,1,91791e56-ca80-4d90-b8a8-16145f6a9721,91791e56-ca80-4d90-b8a8-16145f6a9721,0,1,b242c6a2-5ac9-4edb-b5dd-24eda8162151,b242c6a2-5ac9-4edb-b5dd-24eda8162151,0,1,8d080f3c-06ed-48bf-9709-eea73d676741,8d080f3c-06ed-48bf-9709-eea73d676741,0,1,57b31a5d-9fdc-43d2-ae81-67157822c4b6,57b31a5d-9fdc-43d2-ae81-67157822c4b6,0,1,d4e2da66-9a70-459f-a873-cb4ad71d17b2,d4e2da66-9a70-459f-a873-cb4ad71d17b2,0,1,a84a91d2-d326-4bf4-82e6-d573ee35d090,a84a91d2-d326-4bf4-82e6-d573ee35d090,0,1,39cbda23-db3f-4ddd-8981-8540247406db,39cbda23-db3f-4ddd-8981-8540247406db,0,1,c8a18d99-62ff-45a4-acb5-48e3310c1b53,c8a18d99-62ff-45a4-acb5-48e3310c1b53,0,1,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,0,1,fef27478-ddfd-4ad9-8161-148761f29698,fef27478-ddfd-4ad9-8161-148761f29698,0,1,3500c6fa-813a-49dd-a4bf-163500db5b7f,3500c6fa-813a-49dd-a4bf-163500db5b7f,0,1,1d02493a-dd89-4a51-b75e-9c49f9818b95,1d02493a-dd89-4a51-b75e-9c49f9818b95,0,1,2845c5d1-e836-4499-bcae-f3c8fdae75ee,2845c5d1-e836-4499-bcae-f3c8fdae75ee,0,1,fe4e8e4e-9471-4583-b9b3-576007db08ee,fe4e8e4e-9471-4583-b9b3-576007db08ee,0,1,49deaaa8-6d50-4b25-8153-6712d88fb0fb,49deaaa8-6d50-4b25-8153-6712d88fb0fb,0,1,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,0,1,46a06de8-06fd-4b49-835f-4f24b832b3c4,46a06de8-06fd-4b49-835f-4f24b832b3c4,0,1,3845a567-4375-4c3a-af61-5b82674060ab,3845a567-4375-4c3a-af61-5b82674060ab,0,1,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,0,1,a835a3a7-989b-4247-b836-d23bba2f391a,a835a3a7-989b-4247-b836-d23bba2f391a,0,1,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,0,1,9b149c20-9328-4e2d-a34b-95c883ae4dcc,9b149c20-9328-4e2d-a34b-95c883ae4dcc,0,1,dd6fdc0d-49bb-4fa1-aa17-bd9dc38a0992,dd6fdc0d-49bb-4fa1-aa17-bd9dc38a0992,0,1,f8dbf226-ea56-4b15-baf1-a41fceba2a32,f8dbf226-ea56-4b15-baf1-a41fceba2a32,0,1,fc1476f7-26e6-4374-b99b-e515d86c050a,fc1476f7-26e6-4374-b99b-e515d86c050a,0,1,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,0,1,59fe985a-f169-495b-bd6d-4b64401f81b0,59fe985a-f169-495b-bd6d-4b64401f81b0,0,1,184d1023-fba9-4e56-b592-519254abe922,184d1023-fba9-4e56-b592-519254abe922,0,1,cb68b275-f191-4632-a8ea-aa8809256804,cb68b275-f191-4632-a8ea-aa8809256804,0,1,174011b9-8fe2-43f5-adea-21f6d73835ff,174011b9-8fe2-43f5-adea-21f6d73835ff,0,1,c4753515-a483-453e-a48b-b12d8ef48fd9,c4753515-a483-453e-a48b-b12d8ef48fd9,0,1,2d9048eb-abdf-4980-96ed-788fbb0f4ea7,2d9048eb-abdf-4980-96ed-788fbb0f4ea7,0,1,98c3bc52-2351-460c-8b8e-0d3f45ca3131,98c3bc52-2351-460c-8b8e-0d3f45ca3131,0,1,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,0,1,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,0,1,29645810-44aa-402c-9561-7819d6f4a7ab,29645810-44aa-402c-9561-7819d6f4a7ab,0,1,46bf4911-5200-44ac-9b4d-eb0089c12e34,46bf4911-5200-44ac-9b4d-eb0089c12e34,0,1,6e1685bd-7269-401c-b36e-def6a36b41d5,6e1685bd-7269-401c-b36e-def6a36b41d5,0,1,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,0,1,e03b6592-b597-4795-a78e-775d4f2258db,e03b6592-b597-4795-a78e-775d4f2258db,0,1,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,0,1,3b207d5f-6584-4cf2-9173-20235484f9f4,3b207d5f-6584-4cf2-9173-20235484f9f4,0,1,878d9efe-b0e7-487f-b8f7-83470c131e09,878d9efe-b0e7-487f-b8f7-83470c131e09,0,1,8270573d-8ed6-449d-853b-462d2dabaaa9,8270573d-8ed6-449d-853b-462d2dabaaa9,0,1,baeec6cd-b220-4240-95f2-3a0c1ee06c2e,baeec6cd-b220-4240-95f2-3a0c1ee06c2e,0,1,f2502463-67e4-4bfe-8ad5-fb80aa73975a,f2502463-67e4-4bfe-8ad5-fb80aa73975a,0,1,59e885e6-d978-40c2-95b6-35fc61074fb4,59e885e6-d978-40c2-95b6-35fc61074fb4,0,1,267dc512-9ee1-4bc1-9034-3effb7fb2949,267dc512-9ee1-4bc1-9034-3effb7fb2949,0,1,0f211e73-5be9-4015-93e7-ccf63e793cb6,0f211e73-5be9-4015-93e7-ccf63e793cb6,0,1,6574d8f4-fb97-4a26-b166-711fad63aa07,6574d8f4-fb97-4a26-b166-711fad63aa07,0,1,fb3eddaf-3241-4d59-8314-97a5ae9258c4,fb3eddaf-3241-4d59-8314-97a5ae9258c4,0,1,6528bd7a-bac1-4c8b-9b00-6be01c0121b1,6528bd7a-bac1-4c8b-9b00-6be01c0121b1,0,1,d8601e95-af94-4805-974a-99c539725d74,d8601e95-af94-4805-974a-99c539725d74,0,1,6d98f877-f3bb-4795-9025-2631468a331f,6d98f877-f3bb-4795-9025-2631468a331f,0,1,89b9379d-ace9-48cc-b979-a66fd45aeb1d,89b9379d-ace9-48cc-b979-a66fd45aeb1d,0,1,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,0,1,9767a113-5a42-4749-bf40-0f349e85615d,9767a113-5a42-4749-bf40-0f349e85615d,0,1,a3b0494c-f436-45ea-9577-4c0c86b057c9,a3b0494c-f436-45ea-9577-4c0c86b057c9,0,1,5101c142-b25c-4bef-80e7-7407f2c15c90,5101c142-b25c-4bef-80e7-7407f2c15c90,0,1,6d7872f1-fd54-41c4-8253-5f2b125f31ae,6d7872f1-fd54-41c4-8253-5f2b125f31ae,0,1,0c218200-27a8-4f71-9b09-3632dd453644,0c218200-27a8-4f71-9b09-3632dd453644,0,1,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,0,1,b5d30250-18ab-4af1-b99a-ff5dba334d1f,b5d30250-18ab-4af1-b99a-ff5dba334d1f,0,1,936f1aa5-7516-444b-b451-1162fa5d705f,936f1aa5-7516-444b-b451-1162fa5d705f,0,1,e8d5533e-2669-44f6-9eed-eaedab666d42,e8d5533e-2669-44f6-9eed-eaedab666d42,0,1,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,0,1,9e323b0d-4e3b-45d4-9705-aa30e63014f5,9e323b0d-4e3b-45d4-9705-aa30e63014f5,0,1,5afa798a-958e-4e0c-a380-0104f4c037a7,5afa798a-958e-4e0c-a380-0104f4c037a7,0,1,c0295fd9-c749-41b3-8d0d-6af16f484b1f,c0295fd9-c749-41b3-8d0d-6af16f484b1f,0,1,bd32a863-3090-432d-89c4-356ba86a0bdc,bd32a863-3090-432d-89c4-356ba86a0bdc,0,1,4621bf5a-46b5-4b82-8ae4-cc8e11e81ba0,4621bf5a-46b5-4b82-8ae4-cc8e11e81ba0,0,1,ed5465b4-a556-4078-ab18-49fef2afba2e,ed5465b4-a556-4078-ab18-49fef2afba2e,0,1,7368ab8f-59d5-4270-a43b-0f3e422169ed,7368ab8f-59d5-4270-a43b-0f3e422169ed,0,1,eeb0571b-1b74-4889-b8b5-f94186d692d7,eeb0571b-1b74-4889-b8b5-f94186d692d7,0,1,9ef3b72c-caa3-486b-9917-04c00f6689c1,9ef3b72c-caa3-486b-9917-04c00f6689c1,0,1,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,0,1,9245417f-f247-47ba-a1b4-a17ec2e8776c,9245417f-f247-47ba-a1b4-a17ec2e8776c,0,1,a4b721d7-b119-47eb-80e0-7db34c83964f,a4b721d7-b119-47eb-80e0-7db34c83964f,0,1,512629d1-e8b7-4f66-b613-b8c0cb9c250b,512629d1-e8b7-4f66-b613-b8c0cb9c250b,0,1,b7cf4684-4432-4658-9c06-b315d470a3a6,b7cf4684-4432-4658-9c06-b315d470a3a6,0,1,d3bc8211-54d8-47dd-aecf-5da72b65195f,d3bc8211-54d8-47dd-aecf-5da72b65195f,0,1,33f11da8-f670-4ec3-9d40-96fce031c60f,33f11da8-f670-4ec3-9d40-96fce031c60f,0,1,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,0,1,f74c2d41-2433-4bed-8aef-adfeed198252,f74c2d41-2433-4bed-8aef-adfeed198252,0,1,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,0,1,56c9703a-751a-4e6c-81f4-a8756fb040e3,56c9703a-751a-4e6c-81f4-a8756fb040e3,0,1,c3a86eec-1ff5-4392-9904-91a12a2e253a,c3a86eec-1ff5-4392-9904-91a12a2e253a,0,1,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,0,1,f02b7246-dae9-4e15-b4cd-b06133664d34,f02b7246-dae9-4e15-b4cd-b06133664d34,0,1,77f20022-17ce-4e00-8a84-015238bce6f3,77f20022-17ce-4e00-8a84-015238bce6f3,0,1,3734619b-7059-4547-8b97-0b3393389d4d,3734619b-7059-4547-8b97-0b3393389d4d,0,1,a30bf95f-aabd-4da0-8287-61e08f9362fb,a30bf95f-aabd-4da0-8287-61e08f9362fb,0,1,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,0,1,4078867c-2972-47f9-bebd-935a6f1cc667,4078867c-2972-47f9-bebd-935a6f1cc667,0,1,8502fe39-c241-4be5-a313-fd887bbbdfa1,8502fe39-c241-4be5-a313-fd887bbbdfa1,0,1,67a71201-13e5-42a3-902f-fb3a59710dfb,67a71201-13e5-42a3-902f-fb3a59710dfb,0,1,3a79a951-a997-4596-ab62-ba376d67725d,3a79a951-a997-4596-ab62-ba376d67725d,0,1,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,0,1,884c28de-434f-440a-8c63-67e659c097ad,884c28de-434f-440a-8c63-67e659c097ad,0,1,92ead3b5-8c55-4e4d-bd47-009e025b22f8,92ead3b5-8c55-4e4d-bd47-009e025b22f8,0,1,50d8e365-aa58-4b60-8992-01943379d485,50d8e365-aa58-4b60-8992-01943379d485,0,1,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,0,1,b3f7f763-bea9-4f59-9450-df95e5c3d89d,b3f7f763-bea9-4f59-9450-df95e5c3d89d,0,1,9111e28e-c1c7-414b-9288-61bd06a04d04,9111e28e-c1c7-414b-9288-61bd06a04d04,0,1,bcd705ba-c9ac-4e73-94b1-7632c0f06c04,bcd705ba-c9ac-4e73-94b1-7632c0f06c04,0,1,094d5482-286d-4e1a-8888-c0452d2e5af0,094d5482-286d-4e1a-8888-c0452d2e5af0,0,1,fec102ea-a3f6-49b5-b4b8-6884b0654129,fec102ea-a3f6-49b5-b4b8-6884b0654129,0,1,184405d0-34a7-4668-9a64-d92a6a7da142,184405d0-34a7-4668-9a64-d92a6a7da142,0,1,bccf8909-6f99-44d8-9c91-688958fc95f4,bccf8909-6f99-44d8-9c91-688958fc95f4,0,1,246571fb-38c7-4da6-929d-d8b44bc3437c,246571fb-38c7-4da6-929d-d8b44bc3437c,0,1,047fd6d7-5e30-4184-a09a-6525de526cc7,047fd6d7-5e30-4184-a09a-6525de526cc7,0,1,beb44b02-5d5e-4127-aee7-e184a43a4210,beb44b02-5d5e-4127-aee7-e184a43a4210,0,1,1dedfbc2-9250-4229-a6ea-5e085f33e7c3,1dedfbc2-9250-4229-a6ea-5e085f33e7c3,0,1,e24641ed-3e92-46d7-852b-9958ab7bc520,e24641ed-3e92-46d7-852b-9958ab7bc520,0,1,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,0,1,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,0,1,2c61114f-abd7-4415-8cdf-4fe95d9fe354,2c61114f-abd7-4415-8cdf-4fe95d9fe354,0,1,abd7a766-5cc1-48db-8d29-797e9d666a78,abd7a766-5cc1-48db-8d29-797e9d666a78,0,1,1704b5e3-8e77-4df6-9223-e6e5c41a280d,1704b5e3-8e77-4df6-9223-e6e5c41a280d,0,1,62eca88f-025d-44de-b92c-46cd8bc7e4a1,62eca88f-025d-44de-b92c-46cd8bc7e4a1,0,1,b0dde395-8498-4469-9507-d290798117d7,b0dde395-8498-4469-9507-d290798117d7,0,1,999616ea-0faa-4ae2-9841-6a6997ea6694,999616ea-0faa-4ae2-9841-6a6997ea6694,0,1,c5f91669-13d8-4f0a-a054-2701078da38a,c5f91669-13d8-4f0a-a054-2701078da38a,0,1,34f9872b-e02e-4093-ba06-3cb5b8995850,34f9872b-e02e-4093-ba06-3cb5b8995850,0,1,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,0,1,3afe11f6-7424-4b41-a42f-91db33756fa3,3afe11f6-7424-4b41-a42f-91db33756fa3,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,134bbd7c-cadd-4395-b7a4-0249dfe7d0b1,134bbd7c-cadd-4395-b7a4-0249dfe7d0b1,0,1,05f1f184-50cb-47c5-b3a8-62be6a9780c1,05f1f184-50cb-47c5-b3a8-62be6a9780c1,0,1,39598414-9c1d-46ec-a534-8bd43e622e45,39598414-9c1d-46ec-a534-8bd43e622e45,0,1,b552c510-4fd4-4c16-9022-dc5babcafc52,b552c510-4fd4-4c16-9022-dc5babcafc52,0,1,58e92a42-b650-4282-a2b2-2fe2cc0cf50d,58e92a42-b650-4282-a2b2-2fe2cc0cf50d,0,1,8c1a0b0c-3618-4e66-98b8-8b9e7ca63ca2,8c1a0b0c-3618-4e66-98b8-8b9e7ca63ca2,0,1,5c874c9a-fe67-45a3-a1d3-7ec1d1c55090,5c874c9a-fe67-45a3-a1d3-7ec1d1c55090,0,1,58c3936c-4db0-45c8-a22e-b5dd49a61497,58c3936c-4db0-45c8-a22e-b5dd49a61497,0,1,9aa607bc-5870-436a-bbe1-296560393e3b,9aa607bc-5870-436a-bbe1-296560393e3b,0,1,1635be16-4861-4a7d-babc-4caff448a7f7,1635be16-4861-4a7d-babc-4caff448a7f7,0,1,9e399087-c957-4a7a-ab9d-2b689736caab,9e399087-c957-4a7a-ab9d-2b689736caab,0,1,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,0,1,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,0,1,2b7372be-af0d-464e-8d09-8172229790af,2b7372be-af0d-464e-8d09-8172229790af,0,1,d85346db-be25-4dab-a2db-647c3d40dd17,d85346db-be25-4dab-a2db-647c3d40dd17,0,1,c7bafd34-5b15-42ec-b329-0be3002775ad,c7bafd34-5b15-42ec-b329-0be3002775ad,0,1,6feb2278-9149-47f8-a0ec-eb4bd9f44716,6feb2278-9149-47f8-a0ec-eb4bd9f44716,0,1,3892c06d-28f1-4238-a929-201316cac1ed,3892c06d-28f1-4238-a929-201316cac1ed,0,1,c13dea2e-17fa-4a5f-a70f-96e623db8a6b,c13dea2e-17fa-4a5f-a70f-96e623db8a6b,0,1,c960082b-8c16-4d7b-b7fd-b1f2bfe07e0b,c960082b-8c16-4d7b-b7fd-b1f2bfe07e0b,0,1,cd6770d5-cd3c-47af-bc46-c865993adf63,cd6770d5-cd3c-47af-bc46-c865993adf63,0,1,97ec899d-a2a0-4691-83ff-25b78dd49ef6,97ec899d-a2a0-4691-83ff-25b78dd49ef6,0,1,411db885-f761-44e5-bdd1-9fdf9e741ac1,411db885-f761-44e5-bdd1-9fdf9e741ac1,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,43e37533-ed38-4000-a387-5749f8d9aaf3,43e37533-ed38-4000-a387-5749f8d9aaf3,0,1,e93bdb44-64b3-43d8-b15a-c561dbb91974,e93bdb44-64b3-43d8-b15a-c561dbb91974,0,1,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,0,1,845262f8-8208-4c90-98ec-c85dd5734cf0,845262f8-8208-4c90-98ec-c85dd5734cf0,0,1,ad066c0d-4f4c-48af-9cc8-bb835372150a,ad066c0d-4f4c-48af-9cc8-bb835372150a,0,1,a2145e81-239e-4267-8a43-ea3f7babe878,a2145e81-239e-4267-8a43-ea3f7babe878,0,1,3326bbcb-b277-44db-a252-2448119e8146,3326bbcb-b277-44db-a252-2448119e8146,0,1,61cac5f7-320c-4098-9078-44fadcdeb219,61cac5f7-320c-4098-9078-44fadcdeb219,0,1,304304b1-36a4-42bb-8ab9-b23b59795001,304304b1-36a4-42bb-8ab9-b23b59795001,0,1,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,0,1,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,0,1,cd454738-62dd-4f95-af33-b52750678428,cd454738-62dd-4f95-af33-b52750678428,0,1,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,0,1,e4abafc6-f859-4d96-9818-5b9bf8d66d69,e4abafc6-f859-4d96-9818-5b9bf8d66d69,0,1,535acd2c-26d2-4f32-9ae6-cc1956317c59,535acd2c-26d2-4f32-9ae6-cc1956317c59,0,1,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,0,1,ac4e0868-ba49-46b4-8872-d42483a5591f,ac4e0868-ba49-46b4-8872-d42483a5591f,0,1,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,0,1,0493dcf1-5f94-41f9-a4c7-a52e12a29068,0493dcf1-5f94-41f9-a4c7-a52e12a29068,0,1,ca4c0299-625a-4b03-be0e-36ffb45c6d08,ca4c0299-625a-4b03-be0e-36ffb45c6d08,0,1,7fa1119b-4321-4b8f-a879-1d940084145a,7fa1119b-4321-4b8f-a879-1d940084145a,0,1,5d9c0841-6ea6-48dc-a53b-9f19894750f8,5d9c0841-6ea6-48dc-a53b-9f19894750f8,0,1,86b5303b-d967-4bc6-b2da-066c5a58613f,86b5303b-d967-4bc6-b2da-066c5a58613f,0,1,853b824d-9377-475f-913e-d02bd60f5f64,853b824d-9377-475f-913e-d02bd60f5f64,0,1,0c5e261f-961e-4780-877a-06589400b88a,0c5e261f-961e-4780-877a-06589400b88a,0,1,ee1f8545-ea64-41de-a29a-2d40e15d4f16,ee1f8545-ea64-41de-a29a-2d40e15d4f16,0,1,25ba3c5d-ace1-43cd-987f-68364b9b6970,25ba3c5d-ace1-43cd-987f-68364b9b6970,0,1,b8f5019e-b53f-4508-a042-bbadda2d1fd4,b8f5019e-b53f-4508-a042-bbadda2d1fd4,0,1,b250d233-70a0-4baf-8b7d-6e1d414a11b9,b250d233-70a0-4baf-8b7d-6e1d414a11b9,0,1,4599ef83-5f1e-44af-ae0c-67988656a99e,4599ef83-5f1e-44af-ae0c-67988656a99e,0,1,acb0d7eb-2ed9-4419-b79d-7dc661d70c30,acb0d7eb-2ed9-4419-b79d-7dc661d70c30,0,1,e1b94dcf-ec37-4b2d-a7af-120eeee40944,e1b94dcf-ec37-4b2d-a7af-120eeee40944,0,1,7d2a37b1-a1a0-435a-846a-95e255655044,7d2a37b1-a1a0-435a-846a-95e255655044,0,1,109db64c-00dc-490e-99a5-4430d9344e99,109db64c-00dc-490e-99a5-4430d9344e99,0,1,85837a55-fed5-4b7b-a622-30d728b9a677,85837a55-fed5-4b7b-a622-30d728b9a677,0,1,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,0,1,6ede8b5c-7df0-44a5-9136-8109bbd8b5a9,6ede8b5c-7df0-44a5-9136-8109bbd8b5a9,0,1,325bacdd-793f-47d8-b987-57e9d5f2782b,325bacdd-793f-47d8-b987-57e9d5f2782b,0,1,da9821c3-4b16-48b7-9088-d3cf8ac536a6,da9821c3-4b16-48b7-9088-d3cf8ac536a6,0,1,fb36c775-1124-4ba6-8af8-133bf66fcb54,fb36c775-1124-4ba6-8af8-133bf66fcb54,0,1,51f9aff4-71da-4b1b-b48b-04122a17d855,51f9aff4-71da-4b1b-b48b-04122a17d855,0,1,d5142574-a040-4dd0-a482-cdc61c1d86ab,d5142574-a040-4dd0-a482-cdc61c1d86ab,0,1,62957889-503f-4923-a372-29776dc3b5e5,62957889-503f-4923-a372-29776dc3b5e5,0,1,778e79ee-eb1a-4d52-8a31-58e781c78fe4,778e79ee-eb1a-4d52-8a31-58e781c78fe4,0,1,90385850-d37b-4b2e-ac87-95c17f32197c,90385850-d37b-4b2e-ac87-95c17f32197c,0,1,f480ac52-e2f1-4ed0-a0b1-20a622f77302,f480ac52-e2f1-4ed0-a0b1-20a622f77302,0,1,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,0,1,b9b0fbdc-8fda-46d1-bb3e-561a03604971,b9b0fbdc-8fda-46d1-bb3e-561a03604971,0,1,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,0,1,672c2936-9771-4e32-a970-7ac7f12a21e8,672c2936-9771-4e32-a970-7ac7f12a21e8,0,1,73afaad8-dfa9-43e3-bdaf-543c3545d788,73afaad8-dfa9-43e3-bdaf-543c3545d788,0,1,c264441d-4805-4968-baa2-37b8970049c7,c264441d-4805-4968-baa2-37b8970049c7,0,1,4f0bda80-2246-43be-95f8-ae8480682cd5,4f0bda80-2246-43be-95f8-ae8480682cd5,0,1,ac4fa2a4-93a1-4aa6-986a-5f576457fc8a,ac4fa2a4-93a1-4aa6-986a-5f576457fc8a,0,1,6f683f46-9eef-4e78-bc2f-7174238bf53c,6f683f46-9eef-4e78-bc2f-7174238bf53c,0,1,7d1ed38b-98cf-4a0e-a605-680bb580d904,7d1ed38b-98cf-4a0e-a605-680bb580d904,0,1,b769eda0-11de-401c-a68b-4fce4555d4fc,b769eda0-11de-401c-a68b-4fce4555d4fc,0,1,fd7a668f-3099-4e15-956a-92c6295dd4d5,fd7a668f-3099-4e15-956a-92c6295dd4d5,0,1,afcbd830-ec5f-4865-a176-ea3014dff908,afcbd830-ec5f-4865-a176-ea3014dff908,0,1,dc5fc801-14e4-42e8-b396-76eb30b69eea,dc5fc801-14e4-42e8-b396-76eb30b69eea,0,1,f36150de-33af-4410-8a4c-8c9f4b545793,f36150de-33af-4410-8a4c-8c9f4b545793,0,1,62f97480-7d4a-48f3-9d1d-612909b242c9,62f97480-7d4a-48f3-9d1d-612909b242c9,0,1,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,0,1,3068be84-a401-4701-8ac9-411fae130f84,3068be84-a401-4701-8ac9-411fae130f84,0,1,957394a7-e5b8-47fc-8680-1e71efe2be7d,957394a7-e5b8-47fc-8680-1e71efe2be7d,0,1,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,0,1,4f25ef45-c8d9-401d-b0e8-2217ac310f04,4f25ef45-c8d9-401d-b0e8-2217ac310f04,0,1,504ca240-b5ae-433e-ae5f-d818263eea23,504ca240-b5ae-433e-ae5f-d818263eea23,0,1,32461819-9437-417d-8d1e-851c9a2dcee2,32461819-9437-417d-8d1e-851c9a2dcee2,0,1,74228950-8a4b-4dd6-a053-8650de202521,74228950-8a4b-4dd6-a053-8650de202521,0,1,6b9ce91e-08b9-4972-9878-1724c67b68ec,6b9ce91e-08b9-4972-9878-1724c67b68ec,0,1,640814f2-6082-475e-8006-25fd5b24afdb,640814f2-6082-475e-8006-25fd5b24afdb,0,1,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,0,1,569047c2-0879-4fba-a814-44812d21043b,569047c2-0879-4fba-a814-44812d21043b,0,1,f1b66ea8-262d-4b38-a039-b83a843f6ee8,f1b66ea8-262d-4b38-a039-b83a843f6ee8,0,1,bcae6e05-f1fd-413e-9eef-2e1cee42a962,bcae6e05-f1fd-413e-9eef-2e1cee42a962,0,1,40da1bca-ebb3-4c64-bf54-1f37b71d47b6,40da1bca-ebb3-4c64-bf54-1f37b71d47b6,0,1,778b4c8f-7a1e-4b4b-9f68-12cbf52bf195,778b4c8f-7a1e-4b4b-9f68-12cbf52bf195,0,1,91562fe8-e630-4bcb-a14e-c0e1e129141a,91562fe8-e630-4bcb-a14e-c0e1e129141a,0,1,c261abfd-3828-47b5-aa32-dfdd3a1636ad,c261abfd-3828-47b5-aa32-dfdd3a1636ad,0,1,e71f8f26-addf-4b12-a244-11610ed03bba,e71f8f26-addf-4b12-a244-11610ed03bba,0,1,e9aa6dab-0d96-42ce-9bd6-b8b10d755f8c,e9aa6dab-0d96-42ce-9bd6-b8b10d755f8c,0,1,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,0,1,9155c95b-6afb-41bb-bd0b-d37e503fc163,9155c95b-6afb-41bb-bd0b-d37e503fc163,0,1,d917c19e-be15-41cc-9c8a-a97c8de85309,d917c19e-be15-41cc-9c8a-a97c8de85309,0,1,5e33e655-2847-4237-87ff-74775fd36756,5e33e655-2847-4237-87ff-74775fd36756,0,1,f0907d81-656e-4dfb-81d8-14a8847cb38a,f0907d81-656e-4dfb-81d8-14a8847cb38a,0,1,47907538-9357-4885-8b50-17f2e16c260f,47907538-9357-4885-8b50-17f2e16c260f,0,1,17e1840f-fef3-4f17-8476-273e6af24cb4,17e1840f-fef3-4f17-8476-273e6af24cb4,0,1,a64566fa-b706-49bc-8277-4531145c400e,a64566fa-b706-49bc-8277-4531145c400e,0,1,a8f32b13-249c-4ce6-a521-f06a87f2e670,a8f32b13-249c-4ce6-a521-f06a87f2e670,0,1,815775e4-cfb7-495b-87c4-d134b90d93d4,815775e4-cfb7-495b-87c4-d134b90d93d4,0,1,e867f2f1-0550-4d15-9e40-ba36c9aabfbd,e867f2f1-0550-4d15-9e40-ba36c9aabfbd,0,1,8bdbb9ef-3a91-4374-b3c5-9447005bb1b7,8bdbb9ef-3a91-4374-b3c5-9447005bb1b7,0,1,7a27b378-89ac-4cad-8c69-a0cd14812d7e,7a27b378-89ac-4cad-8c69-a0cd14812d7e,0,1,d2433a11-8e1d-4e4c-966d-37cde6283f72,d2433a11-8e1d-4e4c-966d-37cde6283f72,0,1,59eb5919-3c33-48bf-b322-ec78018e4142,59eb5919-3c33-48bf-b322-ec78018e4142,0,1,63f308a5-b955-48a5-8052-50c5bede65d0,63f308a5-b955-48a5-8052-50c5bede65d0,0,1,1b614b97-5c1d-497a-9574-40114059f836,1b614b97-5c1d-497a-9574-40114059f836,0,1,477dfea4-e401-4cf0-b0a8-2df7c3836c58,477dfea4-e401-4cf0-b0a8-2df7c3836c58,0,1,294c000f-6979-4ed1-bbc7-7402facd9185,294c000f-6979-4ed1-bbc7-7402facd9185,0,1,db607fbc-f785-47d5-9550-577424aa3fe9,db607fbc-f785-47d5-9550-577424aa3fe9,0,1,b7111ddf-a623-4bae-90aa-636148492ca2,b7111ddf-a623-4bae-90aa-636148492ca2,0,1,905d9dcd-5793-4362-8fe8-2edce8c35e32,905d9dcd-5793-4362-8fe8-2edce8c35e32,0,1,a96cb6fd-54e0-4514-9210-7f4636acd336,a96cb6fd-54e0-4514-9210-7f4636acd336,0,1,3580e7a7-95d1-4a8e-bc12-a1449fe03757,3580e7a7-95d1-4a8e-bc12-a1449fe03757,0,1,13759790-6c70-4323-9321-a68b90c51663,13759790-6c70-4323-9321-a68b90c51663,0,1,d9704b20-c29c-4e7f-b777-0ac9080a5631,d9704b20-c29c-4e7f-b777-0ac9080a5631,0,1,c1372891-0f55-4868-ab97-906eff52be0e,c1372891-0f55-4868-ab97-906eff52be0e,0,1,33e96bda-1708-4ee4-8d4d-3b919bda3e38,33e96bda-1708-4ee4-8d4d-3b919bda3e38,0,1,53fb35a7-44ab-42e7-8dba-6fa08bf5ba2c,53fb35a7-44ab-42e7-8dba-6fa08bf5ba2c,0,1,93fcaa62-2a19-468b-9128-c7930583fbfd,93fcaa62-2a19-468b-9128-c7930583fbfd,0,1,2d885109-4c96-41c0-a996-785bfd793c2d,2d885109-4c96-41c0-a996-785bfd793c2d,0,1,e870a1bd-0c08-4d1e-832a-357922983c19,e870a1bd-0c08-4d1e-832a-357922983c19,0,1,9f71aeac-f889-40dc-91bd-d670da4efd2b,9f71aeac-f889-40dc-91bd-d670da4efd2b,0,1,62f8a9b2-9e56-4d5c-a7e2-a85f5b27a5b7,62f8a9b2-9e56-4d5c-a7e2-a85f5b27a5b7,0,1,614ef0bd-3298-408b-bf71-37df8ee60702,614ef0bd-3298-408b-bf71-37df8ee60702,0,1,26ff1be6-f72a-456a-9dce-302029752603,26ff1be6-f72a-456a-9dce-302029752603,0,1,db850a08-0c99-4a57-9b04-38be64bd38fb,db850a08-0c99-4a57-9b04-38be64bd38fb,0,1,abeca127-5ae9-46af-a5e8-d6438fd68367,abeca127-5ae9-46af-a5e8-d6438fd68367,0,1,bce81631-9f6d-42b3-b4b6-2199afb08f2f,bce81631-9f6d-42b3-b4b6-2199afb08f2f,0,1,67d6878f-3e47-4142-8f98-c5a207f0b8a8,67d6878f-3e47-4142-8f98-c5a207f0b8a8,0,1,7f4b872f-0e50-49dd-984d-f5fc3ac3f2f0,7f4b872f-0e50-49dd-984d-f5fc3ac3f2f0,0,1,68636657-4d46-4c2a-9b2f-11521a55dfb4,68636657-4d46-4c2a-9b2f-11521a55dfb4,0,1,18a83f43-dc84-4f8a-9580-681b19f571c4,18a83f43-dc84-4f8a-9580-681b19f571c4,0,1,01c588b0-d0ce-4978-b04d-084e6a00fcc7,01c588b0-d0ce-4978-b04d-084e6a00fcc7,0,1,a23642d9-8c4f-44a5-8865-bfb286e47c55,a23642d9-8c4f-44a5-8865-bfb286e47c55,0,1,7b37e038-dcef-41e1-b6e7-ed73c6958415,7b37e038-dcef-41e1-b6e7-ed73c6958415,0,1,24df2d14-5ebf-4ded-ba14-5daee7a0c536,24df2d14-5ebf-4ded-ba14-5daee7a0c536,0,1,13d6e2e9-b268-4c1b-8b8b-30c5296cfe4c,13d6e2e9-b268-4c1b-8b8b-30c5296cfe4c,0,1,03bb028a-ee8c-411e-8382-653046f803c6,03bb028a-ee8c-411e-8382-653046f803c6,0,1,c4fa80ca-32d6-4a44-9fe2-7ffd67e1cb30,c4fa80ca-32d6-4a44-9fe2-7ffd67e1cb30,0,1,8aa73dfd-41ac-4f79-bf73-cd2da51b1232,8aa73dfd-41ac-4f79-bf73-cd2da51b1232,0,1,38d5ed93-133b-44fe-827a-69a6cfc0461d,38d5ed93-133b-44fe-827a-69a6cfc0461d,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,3e427c09-79ed-45f7-b4c9-d9aa7ccc01b2,3e427c09-79ed-45f7-b4c9-d9aa7ccc01b2,0,1,1a4dd1f5-c2d6-4e06-b428-ab7870810bf3,1a4dd1f5-c2d6-4e06-b428-ab7870810bf3,0,1,d5967e0f-03cd-4190-a702-7e9290eae1eb,d5967e0f-03cd-4190-a702-7e9290eae1eb,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,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,bf66612b-aec4-414b-bee6-9bcab145c7cc,bf66612b-aec4-414b-bee6-9bcab145c7cc,0,1,811f356f-554a-4a63-90b6-dedb5fec7c05,811f356f-554a-4a63-90b6-dedb5fec7c05,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,1491cc2a-b3be-4bcc-a181-ce68d4b5d4cb,1491cc2a-b3be-4bcc-a181-ce68d4b5d4cb,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,64a86d5d-f925-45ee-82da-76df1cc20729,64a86d5d-f925-45ee-82da-76df1cc20729,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,45ca19df-90f3-4143-a659-bc0cb97efee9,45ca19df-90f3-4143-a659-bc0cb97efee9,0,1,bbaed1bd-0eb7-4f2b-b844-ab79c1d0a091,bbaed1bd-0eb7-4f2b-b844-ab79c1d0a091,0,1,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,0,1,83ae9b22-20ff-4e94-9282-19daf2274328,83ae9b22-20ff-4e94-9282-19daf2274328,0,1,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,0,1,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,0,1,a92b2b70-7e69-49d1-b921-c9d1b0718f94,a92b2b70-7e69-49d1-b921-c9d1b0718f94,0,1,d57a3300-0f9f-4fe5-b627-01c96b723053,d57a3300-0f9f-4fe5-b627-01c96b723053,0,1,19f690a3-d27b-43c1-94b7-585fc628da05,19f690a3-d27b-43c1-94b7-585fc628da05,0,1,d375fac5-098c-42b5-a0bd-9a4ae7516ada,d375fac5-098c-42b5-a0bd-9a4ae7516ada,0,1,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,0,1,ce65563d-03dc-46d8-96d4-c2d4ae2a2960,ce65563d-03dc-46d8-96d4-c2d4ae2a2960,0,1,5079f17e-dfd6-43f4-83fa-6ac408e5bd3b,5079f17e-dfd6-43f4-83fa-6ac408e5bd3b,0,1,7a4346c3-f1aa-4ce0-886e-76cd9abf563c,7a4346c3-f1aa-4ce0-886e-76cd9abf563c,0,1,cf783265-a4cb-436f-963a-1ff8220ae246,cf783265-a4cb-436f-963a-1ff8220ae246,0,1,3560f949-48f9-4fca-9fe2-81efc1ec0eee,3560f949-48f9-4fca-9fe2-81efc1ec0eee,0,1,662078f0-b75d-4c44-896f-7b7f74fd1ed4,662078f0-b75d-4c44-896f-7b7f74fd1ed4,0,1,4fa11304-fbd4-4c90-909d-5024283a6868,4fa11304-fbd4-4c90-909d-5024283a6868,0,1,207290c2-5221-48ad-99aa-bb0f7955df3f,207290c2-5221-48ad-99aa-bb0f7955df3f,0,1,162137ef-dea2-4ace-9e67-897dad0e7c3d,162137ef-dea2-4ace-9e67-897dad0e7c3d,0,1,d91a016e-cca9-4976-9c53-2c96fa95cf1a,d91a016e-cca9-4976-9c53-2c96fa95cf1a,0,1,012fb2f1-1c15-4800-8968-78a90c2a1348,012fb2f1-1c15-4800-8968-78a90c2a1348,0,1,a29a36aa-3c90-4be9-8ffc-20237721d1d0,a29a36aa-3c90-4be9-8ffc-20237721d1d0,0,1,aec8f9e6-d177-45f5-ba55-2d662428c2ae,aec8f9e6-d177-45f5-ba55-2d662428c2ae,0,1,b0bf8af5-d824-459c-bc40-17495406af3c,b0bf8af5-d824-459c-bc40-17495406af3c,0,1,7dfdd08b-7cd9-480c-829d-97f5e7152eec,7dfdd08b-7cd9-480c-829d-97f5e7152eec,0,1,64752b64-80ae-4537-986a-d61423dc546b,64752b64-80ae-4537-986a-d61423dc546b,0,1,2c37e123-ea35-4501-93e1-2fa295444bec,2c37e123-ea35-4501-93e1-2fa295444bec,0,1,c8bd3ac8-3b49-46bb-aadd-7270ad2868fc,c8bd3ac8-3b49-46bb-aadd-7270ad2868fc,0,1,a997a430-3ea8-4fde-9f53-7b507a04c215,a997a430-3ea8-4fde-9f53-7b507a04c215,0,1,f648e19d-026b-4fa7-8e70-1866b27b94f8,f648e19d-026b-4fa7-8e70-1866b27b94f8,0,1,d32081fc-47d3-4e66-837e-705c94ba8ca8,d32081fc-47d3-4e66-837e-705c94ba8ca8,0,1,69c207c2-7699-4467-b127-286ecd6d0f29,69c207c2-7699-4467-b127-286ecd6d0f29,0,1,e33df42d-4c64-4475-8294-6b05ecdb4e02,e33df42d-4c64-4475-8294-6b05ecdb4e02,0,1,6094a0ed-2051-4649-ad75-dfeb389d3cbb,6094a0ed-2051-4649-ad75-dfeb389d3cbb,0,1,6944a7e2-b9a1-492f-a6f2-9bf31d97ec78,6944a7e2-b9a1-492f-a6f2-9bf31d97ec78,0,1,f3750ea4-5f9e-4ab3-9495-3f182ecff407,f3750ea4-5f9e-4ab3-9495-3f182ecff407,0,1,14002d51-87d4-4647-92ef-a9b1935cb666,14002d51-87d4-4647-92ef-a9b1935cb666,0,1,e941a39d-1f3c-4e6e-af17-75f92a15dd40,e941a39d-1f3c-4e6e-af17-75f92a15dd40,0,1,d9bbedcb-4872-4183-83c2-6c2aae9634b0,d9bbedcb-4872-4183-83c2-6c2aae9634b0,0,1,72c695c3-66f6-4aa8-8a39-737ec6967a1d,72c695c3-66f6-4aa8-8a39-737ec6967a1d,0,1,2beef1e0-7a59-407e-b454-ee2ec38ca4b3,2beef1e0-7a59-407e-b454-ee2ec38ca4b3,0,1,b57a1d6f-8375-4d57-a2c1-f53e25318ddb,b57a1d6f-8375-4d57-a2c1-f53e25318ddb,0,1,d5d11480-d5c7-4569-80c1-f872655ff084,d5d11480-d5c7-4569-80c1-f872655ff084,0,1,b1e45d36-08e9-430e-976b-03e6e3320c6a,b1e45d36-08e9-430e-976b-03e6e3320c6a,0,1,b5384eb7-40e4-4437-b96b-eab9b7b5b8f2,b5384eb7-40e4-4437-b96b-eab9b7b5b8f2,0,1,8e21374f-5a65-406c-856d-2040607da4bc,8e21374f-5a65-406c-856d-2040607da4bc,0,1,1b63cbbb-77b1-4e78-a4c7-ddea8ea7294d,1b63cbbb-77b1-4e78-a4c7-ddea8ea7294d,0,1,3e5f5167-8978-4191-b0f6-6a262b848b95,3e5f5167-8978-4191-b0f6-6a262b848b95,0,1,ae3aef9e-df3b-4ebc-912d-2bc581063745,ae3aef9e-df3b-4ebc-912d-2bc581063745,0,1,5c4ecf15-b92d-4610-b2bb-f2331c5c7528,5c4ecf15-b92d-4610-b2bb-f2331c5c7528,0,1,a8c09e65-6e10-4772-b264-6ead83d52fe3,a8c09e65-6e10-4772-b264-6ead83d52fe3,0,1,256618cc-0956-4cda-9691-e4ced68a791f,256618cc-0956-4cda-9691-e4ced68a791f,0,1,e20593fd-b3e3-41d2-8c8d-97b5d6148fa4,e20593fd-b3e3-41d2-8c8d-97b5d6148fa4,0,1,4b9771a7-b924-4e61-8468-4633e3c54706,4b9771a7-b924-4e61-8468-4633e3c54706,0,1,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,0,1,667de710-cee5-4a97-8434-641d199f3b68,667de710-cee5-4a97-8434-641d199f3b68,0,1,e9a2320b-71a1-4974-8b5a-1990062ec7df,e9a2320b-71a1-4974-8b5a-1990062ec7df,0,1,2e459a7c-c448-4db4-ae21-e59646527030,2e459a7c-c448-4db4-ae21-e59646527030,0,1,891194d9-9f02-4b22-89cd-941181c83ecb,891194d9-9f02-4b22-89cd-941181c83ecb,0,1,a4d3b738-9ae3-46a9-ac21-7ac3d081c727,a4d3b738-9ae3-46a9-ac21-7ac3d081c727,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,e0227e4b-be22-4614-8980-5d573fae705d,e0227e4b-be22-4614-8980-5d573fae705d,0,1,66ef1631-277b-4c22-99d7-1434b4dbbb3f,66ef1631-277b-4c22-99d7-1434b4dbbb3f,0,1,7cfa5a37-b9f8-43e4-ae33-e3a7251dd052,7cfa5a37-b9f8-43e4-ae33-e3a7251dd052,0,1,2f8a5b9d-ab86-492b-85d1-5a28535b2ebc,2f8a5b9d-ab86-492b-85d1-5a28535b2ebc,0,1,898535ff-50cd-464a-aadc-5e4f9de15b04,898535ff-50cd-464a-aadc-5e4f9de15b04,0,1,6a25c089-38e8-49ae-b20a-d5f91bb5e1fd,6a25c089-38e8-49ae-b20a-d5f91bb5e1fd,0,1,737f6f1b-9ffc-4916-b378-7321eab1f886,737f6f1b-9ffc-4916-b378-7321eab1f886,0,1,01dedf5b-2cce-4d24-81ea-2e3af82f5794,01dedf5b-2cce-4d24-81ea-2e3af82f5794,0,1,385e209d-65aa-43b1-8591-f92544882740,385e209d-65aa-43b1-8591-f92544882740,0,1,8381bc76-0e0f-4196-9911-ec05730cb1c9,8381bc76-0e0f-4196-9911-ec05730cb1c9,0,1,c224e520-7204-4f4a-aac9-b6221ea9ce44,c224e520-7204-4f4a-aac9-b6221ea9ce44,0,1,771a1900-46be-49fe-a02d-584780de8363,771a1900-46be-49fe-a02d-584780de8363,0,1,f81b1f2d-6fde-4861-8fee-1dbe6acf3985,f81b1f2d-6fde-4861-8fee-1dbe6acf3985,0,1,b62eecf6-6ee3-4a70-a4d6-3f064ae35c43,b62eecf6-6ee3-4a70-a4d6-3f064ae35c43,0,1,9bf2525c-e8fc-44e6-ac14-7df3208dbb0f,9bf2525c-e8fc-44e6-ac14-7df3208dbb0f,0,1,827720ed-a9ec-4573-a91b-71d7a3e02c2a,827720ed-a9ec-4573-a91b-71d7a3e02c2a,0,1,a2faa3f8-5064-4fbf-a90e-26d15c021cd3,a2faa3f8-5064-4fbf-a90e-26d15c021cd3,0,1,527ea8ca-e723-454a-8e9e-f2e7a38e62ee,527ea8ca-e723-454a-8e9e-f2e7a38e62ee,0,1,ef257b20-da10-4cda-8b9d-7de2d68a2f71,ef257b20-da10-4cda-8b9d-7de2d68a2f71,0,1,de0d41b7-acc0-4ebc-8933-d6b5ad351860,de0d41b7-acc0-4ebc-8933-d6b5ad351860,0,1,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,0,1,1a354069-07ea-40e0-bbac-e1b6232750c2,1a354069-07ea-40e0-bbac-e1b6232750c2,0,1,df31548b-0b8e-412b-999a-761970ae3c23,df31548b-0b8e-412b-999a-761970ae3c23,0,1,05135747-43e7-4b61-bc30-57b3289ea923,05135747-43e7-4b61-bc30-57b3289ea923,0,1,6d63728d-3384-4131-b890-1b82d14a04b7,6d63728d-3384-4131-b890-1b82d14a04b7,0,1,f4554046-493e-4960-94df-0a8b9d02f474,f4554046-493e-4960-94df-0a8b9d02f474,0,1,06abad33-2d69-4e8b-a16c-8aa0d4422d5a,06abad33-2d69-4e8b-a16c-8aa0d4422d5a,0,1,9222a6c0-b785-4811-bfb6-44ac44a55925,9222a6c0-b785-4811-bfb6-44ac44a55925,0,1,ea84021d-2431-44ad-a446-f1fb979c9e96,ea84021d-2431-44ad-a446-f1fb979c9e96,0,1,d86acdeb-fa70-4d1c-bd0c-1b4ea30c03dd,d86acdeb-fa70-4d1c-bd0c-1b4ea30c03dd,0,1,8fa21575-177f-4b7c-94b5-dfeefe737cb4,8fa21575-177f-4b7c-94b5-dfeefe737cb4,0,1,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,0,1,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,0,1,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,0,1,ecbe625a-55eb-437a-8dee-33fb034d4c0d,ecbe625a-55eb-437a-8dee-33fb034d4c0d,0,1,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,0,1,84796b00-79db-42ba-94d0-5bf543e09cd6,84796b00-79db-42ba-94d0-5bf543e09cd6,0,1,948b10b3-0d7c-4dca-8816-75eb86e7881b,948b10b3-0d7c-4dca-8816-75eb86e7881b,0,1,9de91b5a-98e4-414b-b650-b669b0159b49,9de91b5a-98e4-414b-b650-b669b0159b49,0,1,840dc727-288a-4bf2-8b1a-47629d28229c,840dc727-288a-4bf2-8b1a-47629d28229c,0,1,314ac8ca-8845-40c2-b844-91beb05fb601,314ac8ca-8845-40c2-b844-91beb05fb601,0,1,3de3948d-40ff-4e0d-8445-9bf49c916161,3de3948d-40ff-4e0d-8445-9bf49c916161,0,1,37ae1946-9436-47ef-8b8c-17ed0a24971c,37ae1946-9436-47ef-8b8c-17ed0a24971c,0,1,d844d861-fbe9-4391-89e3-00e505b33b33,d844d861-fbe9-4391-89e3-00e505b33b33,0,1,c0688817-fd73-4ead-b9dd-ec966780a2c2,c0688817-fd73-4ead-b9dd-ec966780a2c2,0,1,b1fbfbfe-766f-4018-9491-507748193808,b1fbfbfe-766f-4018-9491-507748193808,0,1,e55dfadb-8e12-4808-ad90-e891a4644548,e55dfadb-8e12-4808-ad90-e891a4644548,0,1,a792b3dc-ac80-492b-bd94-83eb0438ba9f,a792b3dc-ac80-492b-bd94-83eb0438ba9f,0,1,73a093ea-1927-483b-b6f5-8f0cbd253753,73a093ea-1927-483b-b6f5-8f0cbd253753,0,1,345f04c0-0274-4e79-b523-f1fa3cf0d92a,345f04c0-0274-4e79-b523-f1fa3cf0d92a,0,1,f3a14787-de1b-4b65-8cb1-bc33a785821c,f3a14787-de1b-4b65-8cb1-bc33a785821c,0,1,b9ba3ce3-9059-4135-9d31-725f01907431,b9ba3ce3-9059-4135-9d31-725f01907431,0,1,4d2b3767-7c96-44a6-bb1b-ab74b103b90e,4d2b3767-7c96-44a6-bb1b-ab74b103b90e,0,1,fc9fc58f-c888-41f0-9f57-70748b21706e,fc9fc58f-c888-41f0-9f57-70748b21706e,0,1,fc761833-aa85-4c6d-a36c-d1ed060e3bb1,fc761833-aa85-4c6d-a36c-d1ed060e3bb1,0,1,f0ba2ff2-b353-4f84-8e45-23e47ee6c1b6,f0ba2ff2-b353-4f84-8e45-23e47ee6c1b6,0,1,bb8bade2-5c1b-49a6-b66f-79a3ebff86f7,bb8bade2-5c1b-49a6-b66f-79a3ebff86f7,0,1,33596560-3d45-4d3e-b6ec-1c22162110ad,33596560-3d45-4d3e-b6ec-1c22162110ad,0,1,d3e82a06-daae-4f4d-b3f8-45a406e31664,d3e82a06-daae-4f4d-b3f8-45a406e31664,0,1,af76c3c9-d8dc-4156-9e10-80ee02fcf4fe,af76c3c9-d8dc-4156-9e10-80ee02fcf4fe,0,1,ac6a184d-1247-4b54-a023-f0d16daa5fe9,ac6a184d-1247-4b54-a023-f0d16daa5fe9,0,1,f9af5fe6-0b4f-4d48-92a4-1f2a29972155,f9af5fe6-0b4f-4d48-92a4-1f2a29972155,0,1,3ca1682d-5ff5-4b2b-96c2-54d2dd5297a9,3ca1682d-5ff5-4b2b-96c2-54d2dd5297a9,0,1,a687d346-73cf-4aea-a4d0-f29824f0f6f1,a687d346-73cf-4aea-a4d0-f29824f0f6f1,0,1,f51fda72-56d9-4b45-a775-a0e1dfbf3a27,f51fda72-56d9-4b45-a775-a0e1dfbf3a27,0,1,8bf73614-81a4-4702-88b9-3c6f2594d204,8bf73614-81a4-4702-88b9-3c6f2594d204,0,1,b8d4410b-f626-41b8-87c8-67102256bae2,b8d4410b-f626-41b8-87c8-67102256bae2,0,1,484eeb5f-12af-4139-a081-4dcac067a712,484eeb5f-12af-4139-a081-4dcac067a712,0,1,44d8556f-5abf-4b8a-bbb1-637642e0ab4e,44d8556f-5abf-4b8a-bbb1-637642e0ab4e,0,1,d8f7ef22-57b4-468a-be46-d5cda556c254,d8f7ef22-57b4-468a-be46-d5cda556c254,0,1,ec61075e-fbcb-494a-b790-81548a212d2b,ec61075e-fbcb-494a-b790-81548a212d2b,0,1,2f3bdc3c-4c5d-4fcb-85bb-932fe1747d98,2f3bdc3c-4c5d-4fcb-85bb-932fe1747d98,0,1,0c444045-302b-4dbd-a9a3-81fd40004948,0c444045-302b-4dbd-a9a3-81fd40004948,0,1,16099d54-e84f-47c5-aaf3-f8ced3cba5e0,16099d54-e84f-47c5-aaf3-f8ced3cba5e0,0,1,1528b799-1c0f-4244-85e8-e738b827934a,1528b799-1c0f-4244-85e8-e738b827934a,0,1,45d79e4d-8c2a-432b-abb8-fb9046abea40,45d79e4d-8c2a-432b-abb8-fb9046abea40,0,1,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,0,1,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,0,1,6da034af-0481-4a3c-aff9-c50ced6f21d4,6da034af-0481-4a3c-aff9-c50ced6f21d4,0,1,d07016c8-7d97-42cd-865b-85b49075adfb,d07016c8-7d97-42cd-865b-85b49075adfb,0,1,491a2337-1bf9-45c1-8ae6-95605ef41992,491a2337-1bf9-45c1-8ae6-95605ef41992,0,1,9202335d-50bb-4282-9438-24c7fb9cf637,9202335d-50bb-4282-9438-24c7fb9cf637,0,1,a62906e5-27f8-4e72-8769-9a3eed6997d7,a62906e5-27f8-4e72-8769-9a3eed6997d7,0,1,6c5d0ac3-6086-434c-812b-1c1158ecc574,6c5d0ac3-6086-434c-812b-1c1158ecc574,0,1,783536d7-c0db-44c9-96e8-58b57804d7c8,783536d7-c0db-44c9-96e8-58b57804d7c8,0,1,a8295435-c2c4-4aff-874b-7412556aa76d,a8295435-c2c4-4aff-874b-7412556aa76d,0,1,f6c4e24b-172b-4ba3-8e3e-988306ade660,f6c4e24b-172b-4ba3-8e3e-988306ade660,0,1,9baab24c-a5a3-46f4-ad17-a28d4a49f851,9baab24c-a5a3-46f4-ad17-a28d4a49f851,0,1,d1952319-0e42-4684-a386-fbe7c24526c2,d1952319-0e42-4684-a386-fbe7c24526c2,0,1,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,0,1,83b47a9d-d44b-4c40-becd-df74f9cb2e91,83b47a9d-d44b-4c40-becd-df74f9cb2e91,0,1,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,0,1,86e2a2eb-160f-4e93-a449-b2f726286d1b,86e2a2eb-160f-4e93-a449-b2f726286d1b,0,1,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,0,1,364184c2-ec71-44be-b40c-ba719b4ab0e1,364184c2-ec71-44be-b40c-ba719b4ab0e1,0,1,7ef46c54-ec0c-4211-a750-e5949956b593,7ef46c54-ec0c-4211-a750-e5949956b593,0,1,04823681-875e-459a-b3cf-051c89527f38,04823681-875e-459a-b3cf-051c89527f38,0,1,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,0,1,38265f08-3301-40d1-b630-a319c983e826,38265f08-3301-40d1-b630-a319c983e826,0,1,5175c496-bac7-4c57-9628-793b727aecd0,5175c496-bac7-4c57-9628-793b727aecd0,0,1,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,0,1,fc42df4a-93f0-461f-acfe-fea09158030f,fc42df4a-93f0-461f-acfe-fea09158030f,0,1,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,0,1,6d002aef-00c9-4069-80df-153151218831,6d002aef-00c9-4069-80df-153151218831,0,1,4fec3a6c-5a99-4763-aa07-d5de8712559e,4fec3a6c-5a99-4763-aa07-d5de8712559e,0,1,968a1202-d271-43e0-bfd4-d38e49ceadd4,968a1202-d271-43e0-bfd4-d38e49ceadd4,0,1,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,0,1,b3b4fbf1-cbf0-4ee2-a490-4d657693479b,b3b4fbf1-cbf0-4ee2-a490-4d657693479b,0,1,ea61e442-273e-4ce4-a806-8090893729ba,ea61e442-273e-4ce4-a806-8090893729ba,0,1,e7100f2b-d169-4635-ab87-7a2225ff12ee,e7100f2b-d169-4635-ab87-7a2225ff12ee,0,1,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,0,1,0dcc537b-76b3-4e73-b060-6cbdcf6345db,0dcc537b-76b3-4e73-b060-6cbdcf6345db,0,1,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,0,1,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,0,1,7601fa7e-079a-4347-abea-e161b2d00783,7601fa7e-079a-4347-abea-e161b2d00783,0,1,ee84cb40-f82d-4558-91be-229d68ad9f4a,ee84cb40-f82d-4558-91be-229d68ad9f4a,0,1,101a7eff-9556-4165-879a-a7c8a852e236,101a7eff-9556-4165-879a-a7c8a852e236,0,1,01775932-3603-4efc-9235-abdb97490dea,01775932-3603-4efc-9235-abdb97490dea,0,1,7637844b-4059-4f8a-8436-b4f4e8cb4f74,7637844b-4059-4f8a-8436-b4f4e8cb4f74,0,1,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,0,1,0ee5b788-61dc-464b-86da-f985df7704b6,0ee5b788-61dc-464b-86da-f985df7704b6,0,1,2375c6a8-9799-4b7c-a48d-091a90c67693,2375c6a8-9799-4b7c-a48d-091a90c67693,0,1,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,0,1,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,0,1,63c6522f-be04-422a-b4f4-0f55f58b09a8,63c6522f-be04-422a-b4f4-0f55f58b09a8,0,1,be919dc1-a377-43e1-82e6-ce946cabdd55,be919dc1-a377-43e1-82e6-ce946cabdd55,0,1,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,0,1,9ded532e-9e60-4895-a4c5-4ea6697aa83c,9ded532e-9e60-4895-a4c5-4ea6697aa83c,0,1,106c5159-ffc7-4059-b3e3-acf74326a44f,106c5159-ffc7-4059-b3e3-acf74326a44f,0,1,d39fd717-1a69-4fd3-889e-4fa9abefea1c,d39fd717-1a69-4fd3-889e-4fa9abefea1c,0,1,5b85e6df-7493-4201-97ad-2aea14de6006,5b85e6df-7493-4201-97ad-2aea14de6006,0,1,061e6c0f-ba52-40ec-96ad-2eba3eee3097,061e6c0f-ba52-40ec-96ad-2eba3eee3097,0,1,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,0,1,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,0,1,4840753b-e2e1-4e67-b35f-2f5eab7754f5,4840753b-e2e1-4e67-b35f-2f5eab7754f5,0,1,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,0,1,6ffd9c17-d90b-4d19-b337-0fbc2c717557,6ffd9c17-d90b-4d19-b337-0fbc2c717557,0,1,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,0,1,3bb83275-7a0e-420f-8c6b-028038f11a8c,3bb83275-7a0e-420f-8c6b-028038f11a8c,0,1,e1950a23-f6e7-48af-b78a-77aa61f08ece,e1950a23-f6e7-48af-b78a-77aa61f08ece,0,1,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,0,1,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,0,1,5d726fa3-bde0-4d97-a577-415857bbb5c1,5d726fa3-bde0-4d97-a577-415857bbb5c1,0,1,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,0,1,49068231-202c-4ac6-a39a-69207cb597dd,49068231-202c-4ac6-a39a-69207cb597dd,0,1,5a470575-e012-42ad-9ad7-53930a8e843f,5a470575-e012-42ad-9ad7-53930a8e843f,0,1,5872d4ed-6503-422d-bcf9-63a8df3e777d,5872d4ed-6503-422d-bcf9-63a8df3e777d,0,1,e21cda29-2579-485e-a207-20b76f719c80,e21cda29-2579-485e-a207-20b76f719c80,0,1,1b232a57-2833-42c6-b318-38dae2af1ab2,1b232a57-2833-42c6-b318-38dae2af1ab2,0,1,007ade8c-b102-408b-b877-b531e046560b,007ade8c-b102-408b-b877-b531e046560b,0,1,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,0,1,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,0,1,eb69c41a-392d-43bb-9b67-a0adcb651b1e,eb69c41a-392d-43bb-9b67-a0adcb651b1e,0,1,93b01c88-48a2-4753-b443-0e9892395a8f,93b01c88-48a2-4753-b443-0e9892395a8f,0,1,0b7f8e05-bb34-47cc-9775-04362e814316,0b7f8e05-bb34-47cc-9775-04362e814316,0,1,e71e0297-3709-4247-933e-18a6350cbf39,e71e0297-3709-4247-933e-18a6350cbf39,0,1,0b32e372-c6ad-4dda-acd1-8b5d58537d37,0b32e372-c6ad-4dda-acd1-8b5d58537d37,0,1,602dac6f-abe6-407a-92d3-7f1613e5dda6,602dac6f-abe6-407a-92d3-7f1613e5dda6,0,1,db03a88b-2804-45c2-9089-7ddb87ef2f18,db03a88b-2804-45c2-9089-7ddb87ef2f18,0,1,df6417d1-c722-4a87-a543-5d2c31795b20,df6417d1-c722-4a87-a543-5d2c31795b20,0,1,526a85c9-3a8d-4044-adb9-fd0689c70601,526a85c9-3a8d-4044-adb9-fd0689c70601,0,1,c4203772-580c-4db1-9bde-8925faa90688,c4203772-580c-4db1-9bde-8925faa90688,0,1,f64a91c4-f5cb-4e8e-8387-9f242ce6de44,f64a91c4-f5cb-4e8e-8387-9f242ce6de44,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,4b714d9c-26f4-46e8-ac79-471522b3853b,4b714d9c-26f4-46e8-ac79-471522b3853b,0,1,411489de-f907-4d60-a776-64bb0aa12a0e,411489de-f907-4d60-a776-64bb0aa12a0e,0,1,58d9ba60-a0c7-405d-a76e-0b0a796daaf3,58d9ba60-a0c7-405d-a76e-0b0a796daaf3,0,1,9c47670e-9eb9-49ec-876c-cd545aaa093c,9c47670e-9eb9-49ec-876c-cd545aaa093c,0,1,f57e74e6-75e8-4136-911e-86793036a077,f57e74e6-75e8-4136-911e-86793036a077,0,1,8492ee20-3f15-45d8-b70d-19b5cd6f1ae3,8492ee20-3f15-45d8-b70d-19b5cd6f1ae3,0,1,3ba8c378-ef3d-4646-90b3-6d8078aa623e,3ba8c378-ef3d-4646-90b3-6d8078aa623e,0,1,b96b2e45-8fb3-4d48-ab53-d3bbf6ef0284,b96b2e45-8fb3-4d48-ab53-d3bbf6ef0284,0,1,5ac38b5a-92e5-47eb-b956-24d9f010cb9f,5ac38b5a-92e5-47eb-b956-24d9f010cb9f,0,1,2dd7eb87-8130-425a-be13-85235508cde6,2dd7eb87-8130-425a-be13-85235508cde6,0,1,8a62c997-4fda-4464-90bd-ab719161949f,8a62c997-4fda-4464-90bd-ab719161949f,0,1,28af52dd-3144-428b-956d-b6f27863ec4a,28af52dd-3144-428b-956d-b6f27863ec4a,0,1,c34c330a-991a-4ec9-a0ad-73c04c6a6fc3,c34c330a-991a-4ec9-a0ad-73c04c6a6fc3,0,1,8ac94328-2300-4681-9c35-fd7e2f830310,8ac94328-2300-4681-9c35-fd7e2f830310,0,1,da0ee165-1917-466b-ac5c-16c28e2318bb,da0ee165-1917-466b-ac5c-16c28e2318bb,0,1,4868cb2e-0892-42bc-9de1-73cb8a15a96f,4868cb2e-0892-42bc-9de1-73cb8a15a96f,0,1,e8b80879-33b3-4c45-ad68-1acabcf91faf,e8b80879-33b3-4c45-ad68-1acabcf91faf,0,1,4a87fafc-7ca7-478e-bb31-358c2b85fa92,4a87fafc-7ca7-478e-bb31-358c2b85fa92,0,1,239601eb-e8de-4d58-a32a-01ee52f6e698,239601eb-e8de-4d58-a32a-01ee52f6e698,0,1,11370667-bec5-4a2d-8aa1-97f4d795718f,11370667-bec5-4a2d-8aa1-97f4d795718f,0,1,2032162d-fbb5-4e6a-be72-cda79869b9ff,2032162d-fbb5-4e6a-be72-cda79869b9ff,0,1,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,0,1,10543f9a-4e3f-427a-b36a-9c66709dd6fb,10543f9a-4e3f-427a-b36a-9c66709dd6fb,0,1,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,0,1,96ab5424-7be1-416d-b74d-d0c815726b1f,96ab5424-7be1-416d-b74d-d0c815726b1f,0,1,3714e794-ddef-4ad9-a933-6130bbc84545,3714e794-ddef-4ad9-a933-6130bbc84545,0,1,282b089c-7411-40d6-9a0a-ceaf6abb5586,282b089c-7411-40d6-9a0a-ceaf6abb5586,0,1,678188aa-76e7-49bc-a4be-1c55ccd625b1,678188aa-76e7-49bc-a4be-1c55ccd625b1,0,1,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,0,1,b3415b4a-d8de-4536-aa4b-82e75fd986ee,b3415b4a-d8de-4536-aa4b-82e75fd986ee,0,1,acc996ab-672a-4602-b7ad-8eee83557e61,acc996ab-672a-4602-b7ad-8eee83557e61,0,1,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,0,1,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,0,1,97745768-ed35-44f1-beba-abb8b28a29ae,97745768-ed35-44f1-beba-abb8b28a29ae,0,1,69364942-bcd1-4b06-9b57-fa59b4e7c552,69364942-bcd1-4b06-9b57-fa59b4e7c552,0,1,ab201c5f-4134-42cf-a528-c1c4df02f2d7,ab201c5f-4134-42cf-a528-c1c4df02f2d7,0,1,303fb7b5-6a23-40ea-ae12-b54f4ebae026,303fb7b5-6a23-40ea-ae12-b54f4ebae026,0,1,634cd26b-78f1-4446-8aad-b96ed16e5329,634cd26b-78f1-4446-8aad-b96ed16e5329,0,1,d8e62f1a-92ca-4971-9609-e79da798c083,d8e62f1a-92ca-4971-9609-e79da798c083,0,1,61892a62-9381-401d-af31-9073ef2509fb,61892a62-9381-401d-af31-9073ef2509fb,0,1,eb74ebf0-a9c6-4c4c-b279-5a46f40ea0d3,eb74ebf0-a9c6-4c4c-b279-5a46f40ea0d3,0,1,d5e1806b-9827-40ab-9cfa-23c22456d137,d5e1806b-9827-40ab-9cfa-23c22456d137,0,1,b57b186a-ec1e-46a2-87ae-6ba27793ebf6,b57b186a-ec1e-46a2-87ae-6ba27793ebf6,0,1,d24170d7-5477-4ec8-acd2-0de8bd2067d6,d24170d7-5477-4ec8-acd2-0de8bd2067d6,0,1,f047da82-7574-4da4-b54e-480195280a11,f047da82-7574-4da4-b54e-480195280a11,0,1,a469f018-da26-485f-87c3-f580321a34f0,a469f018-da26-485f-87c3-f580321a34f0,0,1,9e16edb6-d841-48fa-bfe1-f9aabdcf9e46,9e16edb6-d841-48fa-bfe1-f9aabdcf9e46,0,1,628de771-c19c-4474-989f-8fb6cd7756a2,628de771-c19c-4474-989f-8fb6cd7756a2,0,1,0e3c6508-caa3-43ef-9647-0e3b96955898,0e3c6508-caa3-43ef-9647-0e3b96955898,0,1,ceb18abf-0390-450c-9e4c-cab9e43eb2e8,ceb18abf-0390-450c-9e4c-cab9e43eb2e8,0,1,1b1fa685-dccb-4d0f-ac01-adc6febf7f15,1b1fa685-dccb-4d0f-ac01-adc6febf7f15,0,1,6b0ddefa-ee70-4b27-989f-e23c734ab943,6b0ddefa-ee70-4b27-989f-e23c734ab943,0,1,ee873280-28ea-41fb-af52-c10c2018cbe4,ee873280-28ea-41fb-af52-c10c2018cbe4,0,1,6789e57b-1293-442c-97d0-b8007367602e,6789e57b-1293-442c-97d0-b8007367602e,0,1,0f193c89-b664-448e-bed3-2147430367f7,0f193c89-b664-448e-bed3-2147430367f7,0,1,4c9b2506-75a8-47d3-a5d5-d946088ba14a,4c9b2506-75a8-47d3-a5d5-d946088ba14a,0,1,36eacaa1-2efd-49c0-82de-2f8972535bf2,36eacaa1-2efd-49c0-82de-2f8972535bf2,0,1,c35a643d-fe3a-4293-93c0-074fa68a31e3,c35a643d-fe3a-4293-93c0-074fa68a31e3,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,aed2ceeb-cc0f-4bdc-bb94-2e15cd68aa96,aed2ceeb-cc0f-4bdc-bb94-2e15cd68aa96,0,1,04b5ae71-7fa4-4a64-b406-59dc603b80c5,04b5ae71-7fa4-4a64-b406-59dc603b80c5,0,1,f23a2023-f776-40db-8689-1fc3f7ebc482,f23a2023-f776-40db-8689-1fc3f7ebc482,0,1,1e7684f0-1b3b-4a32-8602-dd0672c5a800,1e7684f0-1b3b-4a32-8602-dd0672c5a800,0,1,ab178a93-8570-43b6-ae42-f34a7cc4f359,ab178a93-8570-43b6-ae42-f34a7cc4f359,0,1,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,0,1,168e3189-2676-4cdb-bc9d-78d85df51faf,168e3189-2676-4cdb-bc9d-78d85df51faf,0,1,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,0,1,470bbff8-20d0-475c-a61a-1a09ac14c2db,470bbff8-20d0-475c-a61a-1a09ac14c2db,0,1,6ea25680-c4db-4717-9498-62420ca16970,6ea25680-c4db-4717-9498-62420ca16970,0,1,14e20d48-635e-4c52-9099-e743323fc190,14e20d48-635e-4c52-9099-e743323fc190,0,1,c37a660e-16c5-495e-9486-e61bcb693fa0,c37a660e-16c5-495e-9486-e61bcb693fa0,0,1,8f44ebad-1160-474e-a566-fb9da55ffcba,8f44ebad-1160-474e-a566-fb9da55ffcba,0,1,11cf336e-7890-4972-bf71-32d7416ff647,11cf336e-7890-4972-bf71-32d7416ff647,0,1,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,0,1,14bd3392-36cd-4ed0-8847-44375d6fb861,14bd3392-36cd-4ed0-8847-44375d6fb861,0,1,759ede7a-e832-44e6-9b11-5bfb3c507820,759ede7a-e832-44e6-9b11-5bfb3c507820,0,1,64484611-b32c-4155-a063-7df5a3f924dd,64484611-b32c-4155-a063-7df5a3f924dd,0,1,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,0,1,821b93bd-f0dd-4468-972a-d9b2b4de72f1,821b93bd-f0dd-4468-972a-d9b2b4de72f1,0,1,56900066-90e3-40c0-b64a-8f7964a4dfc1,56900066-90e3-40c0-b64a-8f7964a4dfc1,0,1,56f0c4d6-9b13-486a-9586-05e657dca8be,56f0c4d6-9b13-486a-9586-05e657dca8be,0,1,c795c0d3-6a0d-4311-9821-df320663727e,c795c0d3-6a0d-4311-9821-df320663727e,0,1,512b8d89-8798-4549-9e79-b9c3f7d9098f,512b8d89-8798-4549-9e79-b9c3f7d9098f,0,1,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,0,1,7f356abf-9045-4a76-89f3-8b52d467122a,7f356abf-9045-4a76-89f3-8b52d467122a,0,1,625a61ac-4ad0-4b31-aa67-9f864154b9c4,625a61ac-4ad0-4b31-aa67-9f864154b9c4,0,1,51fa8d01-44a1-4e75-9b04-6a2504972f08,51fa8d01-44a1-4e75-9b04-6a2504972f08,0,1,73dae482-a1ee-4c57-8859-2dd8e8635a49,73dae482-a1ee-4c57-8859-2dd8e8635a49,0,1,e4ea640f-e3a4-44ad-b17d-51f32136372e,e4ea640f-e3a4-44ad-b17d-51f32136372e,0,1,7dca913d-e37a-4740-8e3d-677d379605ee,7dca913d-e37a-4740-8e3d-677d379605ee,0,1,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,0,1,e62e60ea-9f0c-4a7e-869f-4639f31f826c,e62e60ea-9f0c-4a7e-869f-4639f31f826c,0,1,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,0,1,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,0,1,4cd4694f-17f8-43ba-8940-07628bd937fe,4cd4694f-17f8-43ba-8940-07628bd937fe,0,1,7df6c94b-3cfe-4764-988e-858d733e35d9,7df6c94b-3cfe-4764-988e-858d733e35d9,0,1,8b251c7d-2d55-4734-a1da-7f1115d95080,8b251c7d-2d55-4734-a1da-7f1115d95080,0,1,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,0,1,5a8c3621-595a-4168-8bba-a7f8d499e47e,5a8c3621-595a-4168-8bba-a7f8d499e47e,0,1,fc4cfed6-e492-4420-b357-8143a8c2a41a,fc4cfed6-e492-4420-b357-8143a8c2a41a,0,1,4311a250-64af-443e-a711-93b7c41175cf,4311a250-64af-443e-a711-93b7c41175cf,0,1,804b6c57-1d7b-4927-be5b-84b7959fe55e,804b6c57-1d7b-4927-be5b-84b7959fe55e,0,1,f2655d85-79ea-4736-8f41-94a4f9b2b998,f2655d85-79ea-4736-8f41-94a4f9b2b998,0,1,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,0,1,a8eb5ed9-df99-405b-afad-eeaa98956eee,a8eb5ed9-df99-405b-afad-eeaa98956eee,0,1,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,0,1,26a1279f-91f0-4632-ad7c-21cf2f524208,26a1279f-91f0-4632-ad7c-21cf2f524208,0,1,bf751ed0-ee47-4eaf-81bd-f0da00bef343,bf751ed0-ee47-4eaf-81bd-f0da00bef343,0,1,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,0,1,1f1def7c-e0ee-4963-afea-1751bf1b812c,1f1def7c-e0ee-4963-afea-1751bf1b812c,0,1,9a4c0898-ab56-425c-8191-5ab90f4e12bf,9a4c0898-ab56-425c-8191-5ab90f4e12bf,0,1,6841ec47-7a84-441a-b975-69d089072ce7,6841ec47-7a84-441a-b975-69d089072ce7,0,1,ead4001a-0d8a-4b95-8212-2a40e5aa6659,ead4001a-0d8a-4b95-8212-2a40e5aa6659,0,1,22165c8a-2179-4cd5-b195-bd2721e9e232,22165c8a-2179-4cd5-b195-bd2721e9e232,0,1,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,0,1,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,0,1,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,0,1,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,0,1,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,0,1,9d9debfd-4a10-4f09-9d09-2aa5e058b525,9d9debfd-4a10-4f09-9d09-2aa5e058b525,0,1,fc19586c-d89c-495c-b473-6f85967ed48e,fc19586c-d89c-495c-b473-6f85967ed48e,0,1,2ac7c701-a281-4e77-a5f8-294526021e2d,2ac7c701-a281-4e77-a5f8-294526021e2d,0,1,979df549-889d-496a-b6ce-c56d54c771b5,979df549-889d-496a-b6ce-c56d54c771b5,0,1,91b320d8-3426-44d3-97d7-c200287d7343,91b320d8-3426-44d3-97d7-c200287d7343,0,1,b9297f72-b40a-4adb-9975-bb693d4834a4,b9297f72-b40a-4adb-9975-bb693d4834a4,0,1,41cf3916-216f-4c4e-a587-82777f4263e0,41cf3916-216f-4c4e-a587-82777f4263e0,0,1,2ce3a350-86f1-4275-8299-3c3693ca11fa,2ce3a350-86f1-4275-8299-3c3693ca11fa,0,1,59f0ed15-c84c-4f41-bdd4-26317e4e914d,59f0ed15-c84c-4f41-bdd4-26317e4e914d,0,1,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,0,1,8fef790c-a3f4-460c-9093-5065cbdba196,8fef790c-a3f4-460c-9093-5065cbdba196,0,1,79bd24d0-61a9-4558-90ac-4e726066789c,79bd24d0-61a9-4558-90ac-4e726066789c,0,1,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,0,1,ef356548-51a4-4b09-b37d-ede5b8f3edb6,ef356548-51a4-4b09-b37d-ede5b8f3edb6,0,1,53c0d900-5e96-4381-a1ed-4424a5799608,53c0d900-5e96-4381-a1ed-4424a5799608,0,1,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,0,1,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,0,1,45ca9e20-1246-4400-a019-ffb521af6ea7,45ca9e20-1246-4400-a019-ffb521af6ea7,0,1,73eed854-5c3a-4a10-9bfa-793fd517f303,73eed854-5c3a-4a10-9bfa-793fd517f303,0,1,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,0,1,9134dc40-a8f1-4c60-9431-27cb98be5ecd,9134dc40-a8f1-4c60-9431-27cb98be5ecd,0,1,16c4622a-33af-4a95-b44e-0861a6df21d2,16c4622a-33af-4a95-b44e-0861a6df21d2,0,1,d8cac67b-cce2-4a00-a8df-c6570c50153f,d8cac67b-cce2-4a00-a8df-c6570c50153f,0,1,37213c65-bf26-4e50-a2fa-58eb45439b58,37213c65-bf26-4e50-a2fa-58eb45439b58,0,1,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,0,1,b6b31892-73ee-4c9b-92b0-2735536c4938,b6b31892-73ee-4c9b-92b0-2735536c4938,0,1,deb8b883-142e-47d0-a722-7c734a0cf9b3,deb8b883-142e-47d0-a722-7c734a0cf9b3,0,1,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,0,1,29233058-ccb1-4110-a9bc-cdb4c531f35a,29233058-ccb1-4110-a9bc-cdb4c531f35a,0,1,cf3729b2-9ee6-437c-81df-83966793be50,cf3729b2-9ee6-437c-81df-83966793be50,0,1,429d08b7-0b98-4f9b-a053-d04dd84a7026,429d08b7-0b98-4f9b-a053-d04dd84a7026,0,1,b64fd964-cee8-4619-872f-82d2fdc14240,b64fd964-cee8-4619-872f-82d2fdc14240,0,1,5ce7846d-9806-40f5-8631-4e14deb8bc95,5ce7846d-9806-40f5-8631-4e14deb8bc95,0,1,79528a0e-1e48-4d14-bd28-756fd5db57b9,79528a0e-1e48-4d14-bd28-756fd5db57b9,0,1,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,0,1,d9426219-4b37-4776-8d5d-acab5825e789,d9426219-4b37-4776-8d5d-acab5825e789,0,1,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,0,1,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,0,1,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,0,1,29e7299a-ce80-497a-8102-615d0a001ea8,29e7299a-ce80-497a-8102-615d0a001ea8,0,1,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,0,1,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,0,1,adc2cc11-b647-453f-a98e-8a73b7c368c7,adc2cc11-b647-453f-a98e-8a73b7c368c7,0,1,4522c564-61da-40da-a749-5312121a331d,4522c564-61da-40da-a749-5312121a331d,0,1,9394c709-6cbe-4ef6-bc8c-cba8af65821e,9394c709-6cbe-4ef6-bc8c-cba8af65821e,0,1,2943b572-7411-4f92-a6cc-7ee552b85223,2943b572-7411-4f92-a6cc-7ee552b85223,0,1,28478e7a-e8aa-40aa-866c-a3624f903141,28478e7a-e8aa-40aa-866c-a3624f903141,0,1,f692ab21-a8de-4feb-914f-4beef350543a,f692ab21-a8de-4feb-914f-4beef350543a,0,1,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,0,1,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,0,1,dabb3395-6100-4f53-913d-e0230e81b494,dabb3395-6100-4f53-913d-e0230e81b494,0,1,e0a3fae1-1582-4c7a-acd8-870b558acec4,e0a3fae1-1582-4c7a-acd8-870b558acec4,0,1,e9f393e5-04d3-4330-afb0-aa73caf0c5cd,e9f393e5-04d3-4330-afb0-aa73caf0c5cd,0,1,036868c2-e2c4-426b-8402-0d77b4224828,036868c2-e2c4-426b-8402-0d77b4224828,0,1,1bf18e24-8157-4aa4-b790-21c6535f5233,1bf18e24-8157-4aa4-b790-21c6535f5233,0,1,18470536-57df-48f0-9a85-68e4006558eb,18470536-57df-48f0-9a85-68e4006558eb,0,1,893e2f4c-b056-42ae-89fb-ecd90a53bb4c,893e2f4c-b056-42ae-89fb-ecd90a53bb4c,0,1,5eaaa3fd-3a87-4eaa-93a9-49337b19eddd,5eaaa3fd-3a87-4eaa-93a9-49337b19eddd,0,1,77ee9f6c-0be9-450f-978c-297626d6275b,77ee9f6c-0be9-450f-978c-297626d6275b,0,1,a63e6145-0d4b-4da2-9864-485a61e621df,a63e6145-0d4b-4da2-9864-485a61e621df,0,1,f29738d5-ad22-47bf-9053-497763674486,f29738d5-ad22-47bf-9053-497763674486,0,1,9c23d3bd-7a98-4d71-b9b0-78cda4ffb3ce,9c23d3bd-7a98-4d71-b9b0-78cda4ffb3ce,0,1,9aca958a-a938-4421-9e37-6606e02f7b77,9aca958a-a938-4421-9e37-6606e02f7b77,0,1,44109976-b763-4807-a013-9d04c3675bf3,44109976-b763-4807-a013-9d04c3675bf3,0,1,46127175-144d-438e-8fbe-c55ae0233620,46127175-144d-438e-8fbe-c55ae0233620,0,1,20754057-6397-4478-a484-74b8c2f243ee,20754057-6397-4478-a484-74b8c2f243ee,0,1,b8a06e8b-4581-4088-a5b4-a5d3330eab22,b8a06e8b-4581-4088-a5b4-a5d3330eab22,0,1,ea838b79-af81-4767-a8b1-fce68baa866a,ea838b79-af81-4767-a8b1-fce68baa866a,0,1,5e1056d0-6778-4030-8806-3dc90ffed318,5e1056d0-6778-4030-8806-3dc90ffed318,0,1,068e6f32-a2b6-4ade-9b9e-db3eac8b09c1,068e6f32-a2b6-4ade-9b9e-db3eac8b09c1,0,1,3701531a-b408-455f-a49d-652d3fcab4ef,3701531a-b408-455f-a49d-652d3fcab4ef,0,1,63e229aa-2638-45f1-9c5e-f821d9397ac3,63e229aa-2638-45f1-9c5e-f821d9397ac3,0,1,9e425f71-ef7d-4936-9f1b-7dceca99ca95,9e425f71-ef7d-4936-9f1b-7dceca99ca95,0,1,968ecea6-7d21-4e85-9d25-e8c6fe1b76cc,968ecea6-7d21-4e85-9d25-e8c6fe1b76cc,0,1,c6777ffe-1fb2-4807-8624-43f47a4e3947,c6777ffe-1fb2-4807-8624-43f47a4e3947,0,1,be42c5c6-b604-4180-a3d7-24b2348c8d5e,be42c5c6-b604-4180-a3d7-24b2348c8d5e,0,1,6223c072-bff3-4ea8-96a1-ac2a5bbe9f99,6223c072-bff3-4ea8-96a1-ac2a5bbe9f99,0,1,6fd083fe-a132-4f63-b38f-4891004aca8a,6fd083fe-a132-4f63-b38f-4891004aca8a,0,1,f9f021ca-8b3e-4d10-9538-1bce7e851fdd,f9f021ca-8b3e-4d10-9538-1bce7e851fdd,0,1,bb7cf0f8-56b0-4c0d-b206-79051ba83f6d,bb7cf0f8-56b0-4c0d-b206-79051ba83f6d,0,1,ab057ce4-ac51-4465-8aad-eadc9088c62d,ab057ce4-ac51-4465-8aad-eadc9088c62d,0,1,8842c0e3-2e20-4f37-ae7c-f5449004994b,8842c0e3-2e20-4f37-ae7c-f5449004994b,0,1,5b2cc44b-69cb-495c-a26b-003a495df40b,5b2cc44b-69cb-495c-a26b-003a495df40b,0,1,30250d93-10ff-45c9-920b-5fed3f9d8093,30250d93-10ff-45c9-920b-5fed3f9d8093,0,1,fc959221-6313-45d9-b2c4-85befaede226,fc959221-6313-45d9-b2c4-85befaede226,0,1,6ffa8536-7639-4e9a-9f6d-4eda71f5ca3b,6ffa8536-7639-4e9a-9f6d-4eda71f5ca3b,0,1,5206d407-ac91-477e-80e7-97c312da934c,5206d407-ac91-477e-80e7-97c312da934c,0,1,15b53eaa-cb35-4385-9515-c2ec6e1fdb4b,15b53eaa-cb35-4385-9515-c2ec6e1fdb4b,0,1,ccb8a530-260a-4488-b1d9-c67325c69bf4,ccb8a530-260a-4488-b1d9-c67325c69bf4,0,1,c869c1b7-3c04-4e5e-a033-d3f2fb0af03c,c869c1b7-3c04-4e5e-a033-d3f2fb0af03c,0,1,23f93492-59f5-491b-8708-45096934c7e6,23f93492-59f5-491b-8708-45096934c7e6,0,1,30f5471a-17fb-4184-9798-4f8e3ef0cccb,30f5471a-17fb-4184-9798-4f8e3ef0cccb,0,1,27abda4c-a43c-49b4-90cd-db780afe0c45,27abda4c-a43c-49b4-90cd-db780afe0c45,0,1,450a36cb-9bc1-4c5b-ae21-0e023f3eb951,450a36cb-9bc1-4c5b-ae21-0e023f3eb951,0,1,1a28db16-d410-4101-bf31-21cefa880dae,1a28db16-d410-4101-bf31-21cefa880dae,0,1,2b85bcf6-85b0-4efb-bada-b65414a8d264,2b85bcf6-85b0-4efb-bada-b65414a8d264,0,1,cf027de4-59c9-4b8f-9695-b1d4d16548fe,cf027de4-59c9-4b8f-9695-b1d4d16548fe,0,1,d33ceaee-a374-40a3-9406-cbcbf82fd8ae,d33ceaee-a374-40a3-9406-cbcbf82fd8ae,0,1,0b13cad5-91ae-4cd1-a620-9a315ae8024c,0b13cad5-91ae-4cd1-a620-9a315ae8024c,0,1,d0634a8e-676f-4f49-9a38-7cb80cfa9fdf,d0634a8e-676f-4f49-9a38-7cb80cfa9fdf,0,1,59bb5271-4cc7-45aa-8e2a-f556a4afa2dc,59bb5271-4cc7-45aa-8e2a-f556a4afa2dc,0,1,81dd61e5-fe02-4272-a525-affda9b606ca,81dd61e5-fe02-4272-a525-affda9b606ca,0,1,8de7b423-b7d1-46fe-b1dc-fb936736b864,8de7b423-b7d1-46fe-b1dc-fb936736b864,0,1,f565876c-0326-4b12-895e-c248b9e64115,f565876c-0326-4b12-895e-c248b9e64115,0,1,62f075c5-1ad0-4a29-9f40-567b9fa70cdf,62f075c5-1ad0-4a29-9f40-567b9fa70cdf,0,1,88cefe4a-a6c5-4753-935e-f956d9de9f77,88cefe4a-a6c5-4753-935e-f956d9de9f77,0,1,882e78b7-90bd-4b95-8852-146bdb51ec15,882e78b7-90bd-4b95-8852-146bdb51ec15,0,1,ae4435c3-62c0-4f08-b526-7f9571eed8ae,ae4435c3-62c0-4f08-b526-7f9571eed8ae,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,8317ac49-890d-4921-8c0d-1bfc676f0b40,8317ac49-890d-4921-8c0d-1bfc676f0b40,0,1,9dfb5735-6cc7-4525-b57d-04f9c798fac4,9dfb5735-6cc7-4525-b57d-04f9c798fac4,0,1,f9161bc3-9a1c-4870-8681-8e97d8ce838a,f9161bc3-9a1c-4870-8681-8e97d8ce838a,0,1,5e53ccc6-5ab4-4f9d-b524-0081d345d7a2,5e53ccc6-5ab4-4f9d-b524-0081d345d7a2,0,1,c3b3805b-3501-47a7-b280-46180049b235,c3b3805b-3501-47a7-b280-46180049b235,0,1,29af05c2-37de-495b-b3cf-477d452abe5e,29af05c2-37de-495b-b3cf-477d452abe5e,0,1,0c732569-a50f-4be3-a214-0843c6a3da47,0c732569-a50f-4be3-a214-0843c6a3da47,0,1,5e922083-0ceb-449a-8201-7dd27a46f2fc,5e922083-0ceb-449a-8201-7dd27a46f2fc,0,1,d97e78c7-f2c1-4e0e-9c9b-d2dd6a94da22,d97e78c7-f2c1-4e0e-9c9b-d2dd6a94da22,0,1,e757303e-c61a-4e42-9829-c5a36dba9414,e757303e-c61a-4e42-9829-c5a36dba9414,0,1,091de87c-0801-4bd3-aaaa-ed37bc4cd161,091de87c-0801-4bd3-aaaa-ed37bc4cd161,0,1,9a6bfcbe-6ac7-4839-bfb9-a11b97e64185,9a6bfcbe-6ac7-4839-bfb9-a11b97e64185,0,1,b53c545c-3b1c-4315-a213-4f2b2c7128aa,b53c545c-3b1c-4315-a213-4f2b2c7128aa,0,1,02a84df9-2171-43e6-8135-a74edd384826,02a84df9-2171-43e6-8135-a74edd384826,0,1,ff36356d-cb1d-4316-896a-c6ae83b92437,ff36356d-cb1d-4316-896a-c6ae83b92437,0,1,465cce6a-7064-4b0a-932c-40f842042f33,465cce6a-7064-4b0a-932c-40f842042f33,0,1,f9cd82e7-8252-4bb6-8e08-23ab45ed3976,f9cd82e7-8252-4bb6-8e08-23ab45ed3976,0,1,e67dff00-92e2-4f58-a950-d5bbca9291c5,e67dff00-92e2-4f58-a950-d5bbca9291c5,0,1,e1964724-804a-4ecc-be9e-5b84e58f2b84,e1964724-804a-4ecc-be9e-5b84e58f2b84,0,1,46e961c2-cd45-4d76-a6ad-c1d5c8dc95cc,46e961c2-cd45-4d76-a6ad-c1d5c8dc95cc,0,1,bf3cb513-2856-472b-8713-7bf8ba70cdce,bf3cb513-2856-472b-8713-7bf8ba70cdce,0,1,de4815c8-0853-47e0-862b-b60119c674f6,de4815c8-0853-47e0-862b-b60119c674f6,0,1,dbe02a79-3179-42bb-a8e8-dd9bf3ff705c,dbe02a79-3179-42bb-a8e8-dd9bf3ff705c,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,8ede4c18-ebf0-4c39-9e82-c59df8d62ca7,8ede4c18-ebf0-4c39-9e82-c59df8d62ca7,0,1,8a50e7f2-97a9-4ed8-a46f-6413f7fcf8cd,8a50e7f2-97a9-4ed8-a46f-6413f7fcf8cd,0,1,b2c200a7-b9cc-4d84-b839-e69f2a14a8f5,b2c200a7-b9cc-4d84-b839-e69f2a14a8f5,0,1,4a69a70d-1b4c-4999-a3dd-ae1deb331fea,4a69a70d-1b4c-4999-a3dd-ae1deb331fea,0,1,3a36e0f5-a645-47f1-99ae-5b0493d604ad,3a36e0f5-a645-47f1-99ae-5b0493d604ad,0,1,57f762f7-b8e4-498b-a3dc-3d40c94855ec,57f762f7-b8e4-498b-a3dc-3d40c94855ec,0,1,ca7d4086-de35-40fd-af65-73369d452135,ca7d4086-de35-40fd-af65-73369d452135,0,1,563c0f5c-e0b4-4229-a3f6-183091060aa4,563c0f5c-e0b4-4229-a3f6-183091060aa4,0,1,bf967588-ea8f-49a3-9331-af2331ffa162,bf967588-ea8f-49a3-9331-af2331ffa162,0,1,5083530c-9a24-4def-99c1-6eb9514e9b33,5083530c-9a24-4def-99c1-6eb9514e9b33,0,1,d59c2725-5d98-495e-9f86-f5d38dbfad90,d59c2725-5d98-495e-9f86-f5d38dbfad90,0,1,176f8835-73d2-4fbe-9d2a-0a4c79d3b871,176f8835-73d2-4fbe-9d2a-0a4c79d3b871,0,1,0ba68198-983d-409b-be27-96f1572b3f12,0ba68198-983d-409b-be27-96f1572b3f12,0,1,9cd1e8dd-e2be-48a9-b32d-43688e1748bc,9cd1e8dd-e2be-48a9-b32d-43688e1748bc,0,1,decb27a8-7dd3-4601-a694-30429e638b39,decb27a8-7dd3-4601-a694-30429e638b39,0,1,922ac6c0-a6a8-444e-9aad-27dc0f49b32e,922ac6c0-a6a8-444e-9aad-27dc0f49b32e,0,1,d7a128e4-f31f-4b09-8424-e816ab59d5c3,d7a128e4-f31f-4b09-8424-e816ab59d5c3,0,1,0ce6e252-8d6e-4bfe-b8cc-daf3434fa51e,0ce6e252-8d6e-4bfe-b8cc-daf3434fa51e,0,1,aa9513b4-f575-4030-a7f9-ac09aa319e98,aa9513b4-f575-4030-a7f9-ac09aa319e98,0,1,f01afc5e-91b8-4cc2-b63a-c245e5e36d01,f01afc5e-91b8-4cc2-b63a-c245e5e36d01,0,1,028cbc0e-023d-40ad-86c3-5e6f8dc96c57,028cbc0e-023d-40ad-86c3-5e6f8dc96c57,0,1,d03f66b1-48a3-434b-bb58-9fd53c183514,d03f66b1-48a3-434b-bb58-9fd53c183514,0,1,a469e55e-d7ca-4c27-b350-fafe7364c18f,a469e55e-d7ca-4c27-b350-fafe7364c18f,0,1,b09fc04b-94d8-4dea-bf6c-24370f231274,b09fc04b-94d8-4dea-bf6c-24370f231274,0,1,e669a5cd-daf3-4a88-a2c0-380db496a4dd,e669a5cd-daf3-4a88-a2c0-380db496a4dd,0,1,177710c8-2441-4436-a096-64c27aa7aec5,177710c8-2441-4436-a096-64c27aa7aec5,0,1,ab143db8-185b-4093-a3b1-c65322cb8fd6,ab143db8-185b-4093-a3b1-c65322cb8fd6,0,1,e3ce5882-541e-4620-9c24-f00deacc33c2,e3ce5882-541e-4620-9c24-f00deacc33c2,0,1,c9694243-390e-4217-8996-b33924c4fe60,c9694243-390e-4217-8996-b33924c4fe60,0,1,8e08ea9b-8c63-475a-9335-c8edc6214555,8e08ea9b-8c63-475a-9335-c8edc6214555,0,1,19bd6152-7e9c-4710-80c3-c6aa399fe4e9,19bd6152-7e9c-4710-80c3-c6aa399fe4e9,0,1,72846fcc-a9ab-4393-9133-38c1805abab1,72846fcc-a9ab-4393-9133-38c1805abab1,0,1,91a81670-9124-4b65-aecd-77f252249030,91a81670-9124-4b65-aecd-77f252249030,0,1,ed2e5344-9261-4473-86a5-f914b8458cfc,ed2e5344-9261-4473-86a5-f914b8458cfc,0,1,4ff32c59-4ca5-4e60-b54c-f46f757758e2,4ff32c59-4ca5-4e60-b54c-f46f757758e2,0,1,acbc674d-d053-43f4-9d62-86fbbb962ee2,acbc674d-d053-43f4-9d62-86fbbb962ee2,0,1,e0608801-124b-4c52-9a17-9072eb5b676c,e0608801-124b-4c52-9a17-9072eb5b676c,0,1,64e3295e-89c6-4b09-8dc4-b552da47db84,64e3295e-89c6-4b09-8dc4-b552da47db84,0,1,2c1846a5-09f2-414b-b95c-67ed7432ce0e,2c1846a5-09f2-414b-b95c-67ed7432ce0e,0,1,ce339ae7-a794-425b-8d5f-b04fd4b21364,ce339ae7-a794-425b-8d5f-b04fd4b21364,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,bed8af4e-fa3a-4b25-ba6e-5b7b4a6cd363,bed8af4e-fa3a-4b25-ba6e-5b7b4a6cd363,0,1,951927d4-7bfc-4edb-b97f-dcc29a937400,951927d4-7bfc-4edb-b97f-dcc29a937400,0,1,71309e88-d514-40f3-a329-b2a420e75504,71309e88-d514-40f3-a329-b2a420e75504,0,1,1ea3178b-73dd-4063-9140-c61687a4b1b8,1ea3178b-73dd-4063-9140-c61687a4b1b8,0,1,85fd7ef4-2886-4e2c-a6eb-63d0b0b9cd55,85fd7ef4-2886-4e2c-a6eb-63d0b0b9cd55,0,1,696723be-7b4f-4321-956e-eff07ea9f5fa,696723be-7b4f-4321-956e-eff07ea9f5fa,0,1,616c27dc-5c59-4469-97a7-27e0752bd3a7,616c27dc-5c59-4469-97a7-27e0752bd3a7,0,1,f7323121-74bc-441c-a3e9-dd5cb4f0accd,f7323121-74bc-441c-a3e9-dd5cb4f0accd,0,1,fddfb2fd-4d58-4bc6-b196-720425a8c029,fddfb2fd-4d58-4bc6-b196-720425a8c029,0,1,ce075cf1-1778-4671-aa40-166e6c41adc8,ce075cf1-1778-4671-aa40-166e6c41adc8,0,1,eddb111f-7622-44a3-b7d8-97faec67b23c,eddb111f-7622-44a3-b7d8-97faec67b23c,0,1,84872892-842e-4d7d-a3cd-576c42343a7a,84872892-842e-4d7d-a3cd-576c42343a7a,0,1,78ad6047-473d-494b-a2ba-81e062b567e6,78ad6047-473d-494b-a2ba-81e062b567e6,0,1,bb264e83-49f4-4b7a-8be2-094712fc0640,bb264e83-49f4-4b7a-8be2-094712fc0640,0,1,07bf650d-e61e-44f3-9643-6ffc95b913fb,07bf650d-e61e-44f3-9643-6ffc95b913fb,0,1,5c68c57a-31d6-4ae9-855f-3fbc57922e39,5c68c57a-31d6-4ae9-855f-3fbc57922e39,0,1,6b90ed05-813c-4324-8a69-02c2268856b2,6b90ed05-813c-4324-8a69-02c2268856b2,0,1,081ed48d-cb87-459d-97d6-9af121edbabb,081ed48d-cb87-459d-97d6-9af121edbabb,0,1,6c4074b2-f631-451d-b412-1c8c096a71b1,6c4074b2-f631-451d-b412-1c8c096a71b1,0,1,f9931a20-8391-4b13-8c6d-1836f2492e53,f9931a20-8391-4b13-8c6d-1836f2492e53,0,1,c6eec20b-13b9-44a0-968f-1325680c399b,c6eec20b-13b9-44a0-968f-1325680c399b,0,1,02fbf083-1bdd-4900-9dc1-62f415b792a4,02fbf083-1bdd-4900-9dc1-62f415b792a4,0,1,35454c2d-7088-487b-abb3-f95f2dfdcffa,35454c2d-7088-487b-abb3-f95f2dfdcffa,0,1,2c2526c1-bdf8-4115-bdff-3e79d28321cb,2c2526c1-bdf8-4115-bdff-3e79d28321cb,0,1,4f4da2e9-37ab-4505-b3b1-4b3a908f38c2,4f4da2e9-37ab-4505-b3b1-4b3a908f38c2,0,1,95ab774f-27fa-4bd4-a422-0f997f632679,95ab774f-27fa-4bd4-a422-0f997f632679,0,1,ee3ad891-b7d6-439d-892b-de2f3399d147,ee3ad891-b7d6-439d-892b-de2f3399d147,0,1,4af0f1ee-42cb-47bd-99d0-99deb70e9f82,4af0f1ee-42cb-47bd-99d0-99deb70e9f82,0,1,a2ae0338-ed11-422a-8442-f6c4002ddf0d,a2ae0338-ed11-422a-8442-f6c4002ddf0d,0,1,eb59c9c3-6043-401c-87cc-ba7620139d6a,eb59c9c3-6043-401c-87cc-ba7620139d6a,0,1,2b5ce871-8630-4f2f-9ccb-d9f863886420,2b5ce871-8630-4f2f-9ccb-d9f863886420,0,1,86ae353e-7eed-434c-b4ab-cede36e462bc,86ae353e-7eed-434c-b4ab-cede36e462bc,0,1,18e65717-738b-4d39-9c85-676bca15e6b7,18e65717-738b-4d39-9c85-676bca15e6b7,0,1,0cc63813-cf16-4a99-b3bd-18a773091230,0cc63813-cf16-4a99-b3bd-18a773091230,0,1,4fc00971-c980-468a-9690-5cd520d12eb0,4fc00971-c980-468a-9690-5cd520d12eb0,0,1,85972c27-4f39-4982-9307-7877e87ef87b,85972c27-4f39-4982-9307-7877e87ef87b,0,1,96afdffb-7595-4c49-9e86-8296f50bd2f5,96afdffb-7595-4c49-9e86-8296f50bd2f5,0,1,823d5b5e-e9bf-40f0-9dcd-579bb53847bb,823d5b5e-e9bf-40f0-9dcd-579bb53847bb,0,1,e125d3e0-950f-42ee-8904-bd26091afa55,e125d3e0-950f-42ee-8904-bd26091afa55,0,1,2b4797a5-074a-4a01-b99f-1c5590cfde40,2b4797a5-074a-4a01-b99f-1c5590cfde40,0,1,718e53d2-24ec-40fb-9def-825441ada46c,718e53d2-24ec-40fb-9def-825441ada46c,0,1,4c0a7fd6-8f09-41d6-949f-65ce708c1256,4c0a7fd6-8f09-41d6-949f-65ce708c1256,0,1,792abc06-b52a-4691-ba92-96ed73ca702a,792abc06-b52a-4691-ba92-96ed73ca702a,0,1,148dbe44-86d1-4362-b9db-8ff68cd2b34d,148dbe44-86d1-4362-b9db-8ff68cd2b34d,0,1,1fbc893e-3000-4fac-88f5-c82251835d65,1fbc893e-3000-4fac-88f5-c82251835d65,0,1,05852816-63ec-4179-abca-66372bbfb04c,05852816-63ec-4179-abca-66372bbfb04c,0,1,0165f721-b011-4524-bfd5-81e35092f2be,0165f721-b011-4524-bfd5-81e35092f2be,0,1,e74925d4-1979-4600-8560-0932d26450ad,e74925d4-1979-4600-8560-0932d26450ad,0,1,aa108131-151d-4356-8a24-345e4ec74281,aa108131-151d-4356-8a24-345e4ec74281,0,1,284b77a8-d9f4-44c4-a2dc-91c1f8bd5808,284b77a8-d9f4-44c4-a2dc-91c1f8bd5808,0,1,e3251f1a-3c80-4c86-9960-270920bd512f,e3251f1a-3c80-4c86-9960-270920bd512f,0,1,3c3d5474-977b-4df9-88de-042e997bd10d,3c3d5474-977b-4df9-88de-042e997bd10d,0,1,4b88d172-5a44-4011-bb38-e94bf7a9c879,4b88d172-5a44-4011-bb38-e94bf7a9c879,0,1,3bced2d4-e3d7-4489-a26d-f84620b096f4,3bced2d4-e3d7-4489-a26d-f84620b096f4,0,1,6d015113-1e32-4f5e-aacd-8134d7307125,6d015113-1e32-4f5e-aacd-8134d7307125,0,1,58230238-d2f2-422e-90cb-de355996eb19,58230238-d2f2-422e-90cb-de355996eb19,0,1,3d907678-628d-4fb2-85c2-149839024c08,3d907678-628d-4fb2-85c2-149839024c08,0,1,71384d10-6acf-4139-b766-cb8b5796f1a7,71384d10-6acf-4139-b766-cb8b5796f1a7,0,1,a8f149d7-e9bc-4695-b4f4-88434e31aafb,a8f149d7-e9bc-4695-b4f4-88434e31aafb,0,1,10dcbcc6-7793-4da7-a9a5-e4f124209d3e,10dcbcc6-7793-4da7-a9a5-e4f124209d3e,0,1,11ba510f-cb57-43d0-9897-c49e10b67ccd,11ba510f-cb57-43d0-9897-c49e10b67ccd,0,1,9d92af67-c88d-4429-9e85-0b5bf04c4b79,9d92af67-c88d-4429-9e85-0b5bf04c4b79,0,1,b009bc99-ea12-46db-a7f8-cb3e285b20d0,b009bc99-ea12-46db-a7f8-cb3e285b20d0,0,1,43523bbb-c923-4a20-bcb5-50d30cc826ee,43523bbb-c923-4a20-bcb5-50d30cc826ee,0,1,c89d9aad-3364-45df-88b5-b23ae76edbba,c89d9aad-3364-45df-88b5-b23ae76edbba,0,1,9a2f2cd1-4c9f-460b-b3b7-64706a0164ab,9a2f2cd1-4c9f-460b-b3b7-64706a0164ab,0,1,7e4b9dce-e332-4d35-8b5f-d3f88918989d,7e4b9dce-e332-4d35-8b5f-d3f88918989d,0,1,96fe619a-b819-4f96-9788-e1f4ef57833a,96fe619a-b819-4f96-9788-e1f4ef57833a,0,1,94dff2da-f721-411a-9fc0-5d013b685dcc,94dff2da-f721-411a-9fc0-5d013b685dcc,0,1,9343fc5f-7b08-4be5-8cd5-dbed635b819d,9343fc5f-7b08-4be5-8cd5-dbed635b819d,0,1,99e87e66-1b07-451b-a476-f5213cbd7150,99e87e66-1b07-451b-a476-f5213cbd7150,0,1,c3317f75-f6ad-41f6-97f1-77074c3ff62a,c3317f75-f6ad-41f6-97f1-77074c3ff62a,0,1,8800dec9-84f8-4643-8742-1d76fe575f58,8800dec9-84f8-4643-8742-1d76fe575f58,0,1,62903794-3b41-4d21-b800-1c26dbeda3ce,62903794-3b41-4d21-b800-1c26dbeda3ce,0,1,9bda4a0b-e8a7-4acf-9f07-4033b3a84ebc,9bda4a0b-e8a7-4acf-9f07-4033b3a84ebc,0,1,4ba2e55e-29bc-4fbe-83e8-8bfa36abfdab,4ba2e55e-29bc-4fbe-83e8-8bfa36abfdab,0,1,93de88de-0069-4aa8-96b2-d5709e4def2f,93de88de-0069-4aa8-96b2-d5709e4def2f,0,1,9f94fadf-ac9d-4e57-9fe4-41ce8cfbec6a,9f94fadf-ac9d-4e57-9fe4-41ce8cfbec6a,0,1,12d4ffc8-592e-42a7-b8c6-20bd58f6da90,12d4ffc8-592e-42a7-b8c6-20bd58f6da90,0,1,3a8d9010-8785-4d8d-b908-b821d7d681c9,3a8d9010-8785-4d8d-b908-b821d7d681c9,0,1,2568a935-ea49-4b99-aa9c-de27de6a0e81,2568a935-ea49-4b99-aa9c-de27de6a0e81,0,1,de2bdd4f-93f2-4341-86d6-7082fc286a5c,de2bdd4f-93f2-4341-86d6-7082fc286a5c,0,1,ba96ec0e-931e-45be-a782-e68ba4fedddb,ba96ec0e-931e-45be-a782-e68ba4fedddb,0,1,9af5882f-3a42-4fae-83df-6aa8de577112,9af5882f-3a42-4fae-83df-6aa8de577112,0,1,79bc5e39-3017-48bf-8e42-fa34e8b581ef,79bc5e39-3017-48bf-8e42-fa34e8b581ef,0,1,fe6e207f-d306-4470-8441-ffd3f3710d31,fe6e207f-d306-4470-8441-ffd3f3710d31,0,1,7451af80-7387-4e8d-a3da-2ae0540c3fd4,7451af80-7387-4e8d-a3da-2ae0540c3fd4,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,b67b872e-236a-4ea7-9838-0827234867b4,b67b872e-236a-4ea7-9838-0827234867b4,0,1,1e5ced23-48a7-4f3c-aa3b-78399a2b9e2b,1e5ced23-48a7-4f3c-aa3b-78399a2b9e2b,0,1,ce422d4f-1221-4ebf-a801-975a3220a226,ce422d4f-1221-4ebf-a801-975a3220a226,0,1,8735949b-f259-48b9-97e9-a81dfc7dcc8d,8735949b-f259-48b9-97e9-a81dfc7dcc8d,0,1,b8810612-dc7a-4a45-a83c-163a8669b578,b8810612-dc7a-4a45-a83c-163a8669b578,0,1,00e4dc17-b984-4f45-8b42-2e6a7a5dbced,00e4dc17-b984-4f45-8b42-2e6a7a5dbced,0,1,349c3dc3-0729-41f3-983f-3b13170c6509,349c3dc3-0729-41f3-983f-3b13170c6509,0,1,8281df26-4bde-47ba-926e-f22a8042bf1f,8281df26-4bde-47ba-926e-f22a8042bf1f,0,1,7278fb66-1d48-4c1d-bd15-425f78ad0c32,7278fb66-1d48-4c1d-bd15-425f78ad0c32,0,1,6893007f-8354-4b3b-b205-7c7d385cbde0,6893007f-8354-4b3b-b205-7c7d385cbde0,0,1,d74365a3-b434-41d0-84a7-543c336b5880,d74365a3-b434-41d0-84a7-543c336b5880,0,1,3d42502a-5705-49d7-b4ed-29edbd6306bc,3d42502a-5705-49d7-b4ed-29edbd6306bc,0,1,221e24e6-b31c-45b6-8835-2ad08d595c5f,221e24e6-b31c-45b6-8835-2ad08d595c5f,0,1,fd0fa6c9-1f42-4907-a266-fe7b6847e58a,fd0fa6c9-1f42-4907-a266-fe7b6847e58a,0,1,2e8cbcd7-f5b5-471e-863a-e09b4bc8e163,2e8cbcd7-f5b5-471e-863a-e09b4bc8e163,0,1,55956063-b227-4c74-8d9c-4a62b4f0dbc7,55956063-b227-4c74-8d9c-4a62b4f0dbc7,0,1,b6871b83-7269-43a9-b9a6-a195ff93365d,b6871b83-7269-43a9-b9a6-a195ff93365d,0,1,7dcd627c-16f6-41f9-b474-590ad1c7d2ed,7dcd627c-16f6-41f9-b474-590ad1c7d2ed,0,1,0cf89f30-e702-4c9e-8af4-888634463b99,0cf89f30-e702-4c9e-8af4-888634463b99,0,1,77f890ac-3c9c-4043-a5b7-12158772bcf5,77f890ac-3c9c-4043-a5b7-12158772bcf5,0,1,2bc734f9-8c0d-473a-b1c3-340395069501,2bc734f9-8c0d-473a-b1c3-340395069501,0,1,316c3933-21dd-4e8a-9450-0900e85ef7e2,316c3933-21dd-4e8a-9450-0900e85ef7e2,0,1,994fe78b-9f61-4aaf-9355-fafcae6b816d,994fe78b-9f61-4aaf-9355-fafcae6b816d,0,1,8448f07b-751b-4670-b44c-3564e81e5cdc,8448f07b-751b-4670-b44c-3564e81e5cdc,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,ee0412d3-58e7-4715-8774-d49778e1ef73,ee0412d3-58e7-4715-8774-d49778e1ef73,0,1,ea31df21-1402-417a-9788-b17a7116e842,ea31df21-1402-417a-9788-b17a7116e842,0,1,7a93efb9-62bb-437a-8095-b26a2c8ce8ed,7a93efb9-62bb-437a-8095-b26a2c8ce8ed,0,1,e964753f-7f4c-4f9f-bd17-cdac317c1d35,e964753f-7f4c-4f9f-bd17-cdac317c1d35,0,1,20c2aba0-e2b2-4e4f-9d48-1515c0ae7b4d,20c2aba0-e2b2-4e4f-9d48-1515c0ae7b4d,0,1,43c22498-3fd6-4038-a291-05f0db9ab66a,43c22498-3fd6-4038-a291-05f0db9ab66a,0,1,4ffc9d16-c450-4ecb-b8f6-9ec6fe37fc75,4ffc9d16-c450-4ecb-b8f6-9ec6fe37fc75,0,1,ee6e5e56-5848-46b6-89bf-b9345a57d94c,ee6e5e56-5848-46b6-89bf-b9345a57d94c,0,1,8817c872-bdee-4577-bcc3-4046edc72803,8817c872-bdee-4577-bcc3-4046edc72803,0,1,5b88c214-4e4e-45c2-b8c5-14eb852e9900,5b88c214-4e4e-45c2-b8c5-14eb852e9900,0,1,105cd740-1f60-45e1-871c-adeecd291b0d,105cd740-1f60-45e1-871c-adeecd291b0d,0,1,95aec7d2-179b-4ea3-a3df-3d737b713564,95aec7d2-179b-4ea3-a3df-3d737b713564,0,1,4bd1cae4-d5b5-444e-9cf5-67a969714293,4bd1cae4-d5b5-444e-9cf5-67a969714293,0,1,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,0,1,f279a625-b88f-43b4-bce9-de1186fe7d7e,f279a625-b88f-43b4-bce9-de1186fe7d7e,0,1,99fc224a-2a61-441a-85e9-d69df6aa8b5e,99fc224a-2a61-441a-85e9-d69df6aa8b5e,0,1,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,0,1,d009782b-d73e-42d1-9979-2cbaf20ee98e,d009782b-d73e-42d1-9979-2cbaf20ee98e,0,1,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,0,1,88d8edf7-654f-4627-b68d-c7e929726da6,88d8edf7-654f-4627-b68d-c7e929726da6,0,1,483720db-6c9e-4179-b5c7-56159c9b6073,483720db-6c9e-4179-b5c7-56159c9b6073,0,1,1725c619-9c4a-40ac-9044-00fee71945a4,1725c619-9c4a-40ac-9044-00fee71945a4,0,1,45a85e25-7c33-4ff5-87a0-2a0b4cda8130,45a85e25-7c33-4ff5-87a0-2a0b4cda8130,0,1,e95b126d-797d-4071-b7b4-b14aaf595f2d,e95b126d-797d-4071-b7b4-b14aaf595f2d,0,1,9241ea3c-633f-4469-9e70-c5a20e464da8,9241ea3c-633f-4469-9e70-c5a20e464da8,0,1,bbadbe1b-cb33-4cc5-84c8-a4fdfc8a2247,bbadbe1b-cb33-4cc5-84c8-a4fdfc8a2247,0,1,961ae0fb-7f7b-414d-8fbf-32b893b41085,961ae0fb-7f7b-414d-8fbf-32b893b41085,0,1,10adf8c8-6f5f-477f-b244-4452b774b766,10adf8c8-6f5f-477f-b244-4452b774b766,0,1,ac9dcb8c-d4f5-4f0d-affb-e4187eafdf14,ac9dcb8c-d4f5-4f0d-affb-e4187eafdf14,0,1,04ec5e44-8469-4e9c-8021-83d258f2ec54,04ec5e44-8469-4e9c-8021-83d258f2ec54,0,1,cff36ede-0bd1-424b-8c75-b9695133f32e,cff36ede-0bd1-424b-8c75-b9695133f32e,0,1,9d872d99-eac7-43ee-8ce2-c9d31a76bd75,9d872d99-eac7-43ee-8ce2-c9d31a76bd75,0,1,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,0,1,58b33683-1916-4aef-9b98-5569ef7782ed,58b33683-1916-4aef-9b98-5569ef7782ed,0,1,d3e1f622-f438-4cad-94ae-0272f51610f7,d3e1f622-f438-4cad-94ae-0272f51610f7,0,1,8569cd73-d40d-4d92-83e0-8ece0c03a86a,8569cd73-d40d-4d92-83e0-8ece0c03a86a,0,1,9ebe2809-be6b-4c91-9443-b237fb7ad43c,9ebe2809-be6b-4c91-9443-b237fb7ad43c,0,1,bf29c091-de15-4cd4-be0e-a9785f97d444,bf29c091-de15-4cd4-be0e-a9785f97d444,0,1,6a675752-fd31-46a5-8a62-2a1ede437c68,6a675752-fd31-46a5-8a62-2a1ede437c68,0,1,060b2bb4-ca03-4da9-930f-7f91f6299a35,060b2bb4-ca03-4da9-930f-7f91f6299a35,0,1,394b1a1c-a7ae-41b7-a346-4bac99fa567d,394b1a1c-a7ae-41b7-a346-4bac99fa567d,0,1,9a5fa511-59e8-4a1b-a101-f276f0b7b261,9a5fa511-59e8-4a1b-a101-f276f0b7b261,0,1,ccfe4e36-80b6-419f-8bb3-c1046203d023,ccfe4e36-80b6-419f-8bb3-c1046203d023,0,1,94b2e060-53b7-4b40-af05-30bea3520330,94b2e060-53b7-4b40-af05-30bea3520330,0,1,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,0,1,41b0dabd-85a3-4819-84dd-371eaf4f996e,41b0dabd-85a3-4819-84dd-371eaf4f996e,0,1,86a5ba4d-0681-4ddc-a505-0f537528e1a3,86a5ba4d-0681-4ddc-a505-0f537528e1a3,0,1,12d936f5-932b-4561-b934-c8444808a450,12d936f5-932b-4561-b934-c8444808a450,0,1,2ccb06ca-9bb7-4b74-9a96-c109bb117984,2ccb06ca-9bb7-4b74-9a96-c109bb117984,0,1,ac1a661d-db18-4576-80a9-a19d4140c05e,ac1a661d-db18-4576-80a9-a19d4140c05e,0,1,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,0,1,c3ffeb09-121b-4d77-9c15-def4648b4f3c,c3ffeb09-121b-4d77-9c15-def4648b4f3c,0,1,c2de0724-04c1-4adb-b62a-b7ba727dbe67,c2de0724-04c1-4adb-b62a-b7ba727dbe67,0,1,4ae26777-69ff-4a55-942b-0bad8ab7a70a,4ae26777-69ff-4a55-942b-0bad8ab7a70a,0,1,a0d8fb0a-0e90-4140-8687-e249b153dc66,a0d8fb0a-0e90-4140-8687-e249b153dc66,0,1,917c6f60-2a07-4587-9496-d393aff93953,917c6f60-2a07-4587-9496-d393aff93953,0,1,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,0,1,9fe72d73-4c95-47e0-bf92-dcb714d747c6,9fe72d73-4c95-47e0-bf92-dcb714d747c6,0,1,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,0,1,4d84bb11-e06e-4ed9-915b-76ee0e385a8b,4d84bb11-e06e-4ed9-915b-76ee0e385a8b,0,1,2b94076d-39ee-45ad-9ba5-435115cf5d4f,2b94076d-39ee-45ad-9ba5-435115cf5d4f,0,1,72ace16c-e90a-4d05-bc23-4351d4c87683,72ace16c-e90a-4d05-bc23-4351d4c87683,0,1,bd86e378-84bb-486a-be7b-319a3fe3b70b,bd86e378-84bb-486a-be7b-319a3fe3b70b,0,1,ef3bc279-6721-4949-8dc0-f96141f7f05c,ef3bc279-6721-4949-8dc0-f96141f7f05c,0,1,f81c7e21-48ad-4b64-975d-e62d34c7235a,f81c7e21-48ad-4b64-975d-e62d34c7235a,0,1,d0523c14-585e-45d3-9735-891235631004,d0523c14-585e-45d3-9735-891235631004,0,1,b6f8bc3e-f0cd-43ef-b060-d701cd446197,b6f8bc3e-f0cd-43ef-b060-d701cd446197,0,1,4f10e5f9-6cfd-4fa9-9c72-d19a484a796c,4f10e5f9-6cfd-4fa9-9c72-d19a484a796c,0,1,b94e805f-e1ab-4870-b855-98aa401864b2,b94e805f-e1ab-4870-b855-98aa401864b2,0,1,ff8eedeb-fc3e-4bee-852b-6da6d59ff38c,ff8eedeb-fc3e-4bee-852b-6da6d59ff38c,0,1,a98bd18f-ccda-41a2-a1b2-8b37cc1f6c36,a98bd18f-ccda-41a2-a1b2-8b37cc1f6c36,0,1,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,0,1,45af8f5d-d505-466b-a798-19f2219a180c,45af8f5d-d505-466b-a798-19f2219a180c,0,1,8a8229bc-f70a-4434-bacc-8a81fc58154b,8a8229bc-f70a-4434-bacc-8a81fc58154b,0,1,6324ad14-82ca-467b-b6b7-8d5f6049ca65,6324ad14-82ca-467b-b6b7-8d5f6049ca65,0,1,273446f0-f28b-4ce2-874c-3c6a57299b71,273446f0-f28b-4ce2-874c-3c6a57299b71,0,1,eb2f7449-ee42-43ec-b59c-3e07a6e3c139,eb2f7449-ee42-43ec-b59c-3e07a6e3c139,0,1,f8a7913a-2c64-47e1-8ae9-622fc6e9477e,f8a7913a-2c64-47e1-8ae9-622fc6e9477e,0,1,9b46a2b4-223d-4527-a94e-37ecd4fe72d7,9b46a2b4-223d-4527-a94e-37ecd4fe72d7,0,1,7a4e17bf-3649-4982-a9c6-5982390f1f1d,7a4e17bf-3649-4982-a9c6-5982390f1f1d,0,1,722be6e0-2698-431b-9206-777a36e6742f,722be6e0-2698-431b-9206-777a36e6742f,0,1,75bb0122-26bd-40be-8de8-7a57680c85ae,75bb0122-26bd-40be-8de8-7a57680c85ae,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,a6be80f7-d6aa-4371-a180-3d355080d849,a6be80f7-d6aa-4371-a180-3d355080d849,0,1,b37722c3-e29f-4a40-b4eb-0317919fc7a5,b37722c3-e29f-4a40-b4eb-0317919fc7a5,0,1,b1b1cd90-094d-428b-a6bc-156521c1c54d,b1b1cd90-094d-428b-a6bc-156521c1c54d,0,1,4f79ef7c-79be-4a69-acc0-bd591c712d03,4f79ef7c-79be-4a69-acc0-bd591c712d03,0,1,a0dd2129-d3a1-4bca-b555-72b065be1c13,a0dd2129-d3a1-4bca-b555-72b065be1c13,0,1,dc5e8229-e301-477c-846e-2e7078e3ee5f,dc5e8229-e301-477c-846e-2e7078e3ee5f,0,1,24836e44-8fdd-44bd-91d8-4ddab2caf485,24836e44-8fdd-44bd-91d8-4ddab2caf485,0,1,3727bcfe-4d75-4270-86e7-4a66ab14866c,3727bcfe-4d75-4270-86e7-4a66ab14866c,0,1,870a4708-0b5a-4fa3-9978-d94b161d289a,870a4708-0b5a-4fa3-9978-d94b161d289a,0,1,30e9f89d-7b94-488e-9963-886c271b1af7,30e9f89d-7b94-488e-9963-886c271b1af7,0,1,91af7a52-0825-4af5-94df-cc501e0123cd,91af7a52-0825-4af5-94df-cc501e0123cd,0,1,1c2cc78a-2ae6-4996-a743-7b55aecbe84c,1c2cc78a-2ae6-4996-a743-7b55aecbe84c,0,1,9292bf81-5668-4d52-a4ec-a93bc4b0ad3b,9292bf81-5668-4d52-a4ec-a93bc4b0ad3b,0,1,9693cc78-852e-445b-a7d2-f1689fa9eeec,9693cc78-852e-445b-a7d2-f1689fa9eeec,0,1,eb33e555-db41-462a-a45d-c7e0945cece8,eb33e555-db41-462a-a45d-c7e0945cece8,0,1,9cfd517c-1008-483a-9f65-7d15feb2cefc,9cfd517c-1008-483a-9f65-7d15feb2cefc,0,1,d66adc5e-25a3-472e-b0a4-5f22f88d7a0f,d66adc5e-25a3-472e-b0a4-5f22f88d7a0f,0,1,ae48d48f-cd39-4821-a4b7-9394b2a77ef6,ae48d48f-cd39-4821-a4b7-9394b2a77ef6,0,1,f34d3a69-533e-49df-b91d-f7f7f49c5fb1,f34d3a69-533e-49df-b91d-f7f7f49c5fb1,0,1,1d76f613-f4f6-4772-8c16-d97b3104a553,1d76f613-f4f6-4772-8c16-d97b3104a553,0,1,3e58d607-b906-449f-b044-9c130a487b86,3e58d607-b906-449f-b044-9c130a487b86,0,1,7a911212-7fde-4ea8-a1fa-229116b60895,7a911212-7fde-4ea8-a1fa-229116b60895,0,1,f4580043-5bc2-4295-8523-909302009b44,f4580043-5bc2-4295-8523-909302009b44,0,1,dc8af632-a5a4-4270-ba5f-2d3ba506f7e3,dc8af632-a5a4-4270-ba5f-2d3ba506f7e3,0,1,81936ac2-32fe-4e14-897b-0aba92b90c05,81936ac2-32fe-4e14-897b-0aba92b90c05,0,1,9f88e355-3f8f-4fcd-b45f-39c3d45490f5,9f88e355-3f8f-4fcd-b45f-39c3d45490f5,0,1,ac028c56-b2a8-4a9b-a325-554c636f838e,ac028c56-b2a8-4a9b-a325-554c636f838e,0,1,0ed85f4c-c002-49b6-99b9-0c3c4b7f940e,0ed85f4c-c002-49b6-99b9-0c3c4b7f940e,0,1,f99e98ac-cd94-4989-8c02-ef8b323c6815,f99e98ac-cd94-4989-8c02-ef8b323c6815,0,1,e2562347-4549-4111-862e-86c20a6daade,e2562347-4549-4111-862e-86c20a6daade,0,1,b270fc64-15c6-41ed-ad09-44c833ca7c41,b270fc64-15c6-41ed-ad09-44c833ca7c41,0,1,4c3312fd-5613-4e9b-ae7c-572fa1887ded,4c3312fd-5613-4e9b-ae7c-572fa1887ded,0,1,6c8c9618-287a-41ab-890c-60250925ad52,6c8c9618-287a-41ab-890c-60250925ad52,0,1,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,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,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,168fce48-2413-45fc-ad21-9b465121d81b,168fce48-2413-45fc-ad21-9b465121d81b,0,1,d65c8992-aabc-4b67-9893-01862231ebe1,d65c8992-aabc-4b67-9893-01862231ebe1,0,1,23f70675-6a05-4b50-ad68-c55ddc93e857,23f70675-6a05-4b50-ad68-c55ddc93e857,0,1,b3aeeb3c-622d-4e0c-8c13-199f0e431a7d,b3aeeb3c-622d-4e0c-8c13-199f0e431a7d,0,1,ad14c4d1-bc11-44b6-a32c-c00fb89a9ea5,ad14c4d1-bc11-44b6-a32c-c00fb89a9ea5,0,1,32eb2a75-ff35-4795-bf0c-12b1328441ee,32eb2a75-ff35-4795-bf0c-12b1328441ee,0,1,8e877990-a64c-4c45-91f1-007d47618cc7,8e877990-a64c-4c45-91f1-007d47618cc7,0,1,73c6640e-2fe6-4132-9237-d6f28cbacc1c,73c6640e-2fe6-4132-9237-d6f28cbacc1c,0,1,1731708f-53cb-4b00-b90e-f581b4baa845,1731708f-53cb-4b00-b90e-f581b4baa845,0,1,d4b0feca-c00a-4d48-9f23-d92277ea6483,d4b0feca-c00a-4d48-9f23-d92277ea6483,0,1,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,0,1,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,0,1,23cb5bc2-9638-4d1c-b4bc-d5297e271570,23cb5bc2-9638-4d1c-b4bc-d5297e271570,0,1,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,0,1,04b7389d-697d-4b0d-a239-ac8c674cc46f,04b7389d-697d-4b0d-a239-ac8c674cc46f,0,1,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,0,1,864cad61-8280-415d-8fe1-bcb39d56670a,864cad61-8280-415d-8fe1-bcb39d56670a,0,1,b106bd29-5dc7-44d7-94d0-00f61499392e,b106bd29-5dc7-44d7-94d0-00f61499392e,0,1,a4febff8-0566-4977-bf55-1d574568fe9f,a4febff8-0566-4977-bf55-1d574568fe9f,0,1,5199cc65-bed1-40b9-96fe-cf6d855a8b91,5199cc65-bed1-40b9-96fe-cf6d855a8b91,0,1,f518add9-5c26-4dac-ab2e-b30fe3fbd347,f518add9-5c26-4dac-ab2e-b30fe3fbd347,0,1,23f53317-7aa8-4816-8a69-3d39d5e76da0,23f53317-7aa8-4816-8a69-3d39d5e76da0,0,1,9ade5155-fa6d-4999-b019-a5e7e235a158,9ade5155-fa6d-4999-b019-a5e7e235a158,0,1,8b302c5e-b255-4cb5-94d9-0dfef4250097,8b302c5e-b255-4cb5-94d9-0dfef4250097,0,1,49d713b8-6a61-4bd1-9650-0de1869967d2,49d713b8-6a61-4bd1-9650-0de1869967d2,0,1,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,0,1,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,0,1,0f2ec7ac-6d3f-4fcf-af3d-b0bfaa187a4b,0f2ec7ac-6d3f-4fcf-af3d-b0bfaa187a4b,0,1,6d351276-2c04-4198-a3e4-865881c12f5c,6d351276-2c04-4198-a3e4-865881c12f5c,0,1,73b1d2e2-0eeb-45dc-8ca3-3bda594d6823,73b1d2e2-0eeb-45dc-8ca3-3bda594d6823,0,1,5c4abd61-2f29-499e-a2ca-d133e9eeeaea,5c4abd61-2f29-499e-a2ca-d133e9eeeaea,0,1,0ddeed48-b98a-47c3-84a2-2eac065be06c,0ddeed48-b98a-47c3-84a2-2eac065be06c,0,1,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,0,1,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,0,1,61b947a5-edca-43ca-82c4-5a7b529d8f82,61b947a5-edca-43ca-82c4-5a7b529d8f82,0,1,59eb6a7a-1d96-4985-8d8e-575162759415,59eb6a7a-1d96-4985-8d8e-575162759415,0,1,68564573-ed49-4519-a8b3-997865fe70a6,68564573-ed49-4519-a8b3-997865fe70a6,0,1,6c789969-d066-489d-ad88-92e2a5a6ec69,6c789969-d066-489d-ad88-92e2a5a6ec69,0,1,2a07d696-75d6-4a12-a310-30d6598b4a4c,2a07d696-75d6-4a12-a310-30d6598b4a4c,0,1,dde88f56-417c-4559-a893-85dc91e7e623,dde88f56-417c-4559-a893-85dc91e7e623,0,1,963eedab-6976-4a98-b9ad-b81f89239661,963eedab-6976-4a98-b9ad-b81f89239661,0,1,3370d43e-8e97-4411-8123-2bb2bcf60a75,3370d43e-8e97-4411-8123-2bb2bcf60a75,0,1,d9d377c9-406f-4bc9-8076-1f049348b816,d9d377c9-406f-4bc9-8076-1f049348b816,0,1,dcfcb108-3761-43d9-ad2a-29633bd1ae47,dcfcb108-3761-43d9-ad2a-29633bd1ae47,0,1,afde7867-15d3-43fa-b439-6d9e40df580b,afde7867-15d3-43fa-b439-6d9e40df580b,0,1,a676ff94-a0d1-4de9-8690-ec67f2c891d8,a676ff94-a0d1-4de9-8690-ec67f2c891d8,0,1,012bf716-3672-462e-b390-7bb4384ab4b1,012bf716-3672-462e-b390-7bb4384ab4b1,0,1,65342599-ff37-4f99-8e40-f05d87403bcf,65342599-ff37-4f99-8e40-f05d87403bcf,0,1,3a3f505a-7a50-4111-8029-5b9057fed232,3a3f505a-7a50-4111-8029-5b9057fed232,0,1,36baa776-83c4-413d-b70c-cbbc45e25662,36baa776-83c4-413d-b70c-cbbc45e25662,0,1,b65f9165-c20d-4053-8a0b-cff3f693b762,b65f9165-c20d-4053-8a0b-cff3f693b762,0,1,51af096b-687f-44f4-a0d8-306f670fc5ce,51af096b-687f-44f4-a0d8-306f670fc5ce,0,1,75972f88-aedd-4338-a3b5-320cd632a2e6,75972f88-aedd-4338-a3b5-320cd632a2e6,0,1,a720abc8-dcf0-4684-8d94-22d394a8e4df,a720abc8-dcf0-4684-8d94-22d394a8e4df,0,1,e40f53de-c27b-4e74-8241-f784d7ca5c84,e40f53de-c27b-4e74-8241-f784d7ca5c84,0,1,ef38b84d-277e-48c2-8826-330132eb6807,ef38b84d-277e-48c2-8826-330132eb6807,0,1,67a50910-059a-4724-84e0-c21bc3ac74c2,67a50910-059a-4724-84e0-c21bc3ac74c2,0,1,fdd83a89-a2fe-40d8-a531-a10bfeb36a1d,fdd83a89-a2fe-40d8-a531-a10bfeb36a1d,0,1,0d190f8b-87c5-4dd1-bcfb-609ec3a44f72,0d190f8b-87c5-4dd1-bcfb-609ec3a44f72,0,1,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,0,1,2c0d11fc-b927-4b5d-a16c-d60e69580824,2c0d11fc-b927-4b5d-a16c-d60e69580824,0,1,5251e744-666e-48a0-a5b4-9cef313c7631,5251e744-666e-48a0-a5b4-9cef313c7631,0,1,ebedc283-5eb0-459b-b686-f8643666b8b8,ebedc283-5eb0-459b-b686-f8643666b8b8,0,1,6a6afffd-cfed-4801-8b59-34d27e46565c,6a6afffd-cfed-4801-8b59-34d27e46565c,0,1,a469b12d-4537-419c-91e0-37abc9d31505,a469b12d-4537-419c-91e0-37abc9d31505,0,1,6f312bda-1f4d-48a6-bd95-f23f34f0ea4b,6f312bda-1f4d-48a6-bd95-f23f34f0ea4b,0,1,82c42232-531e-403f-8599-cc21a248fa2c,82c42232-531e-403f-8599-cc21a248fa2c,0,1,9104b791-9ac4-41ba-a7f0-9e609db3b578,9104b791-9ac4-41ba-a7f0-9e609db3b578,0,1,2d3721d1-816f-4e84-9df1-863cb269d83d,2d3721d1-816f-4e84-9df1-863cb269d83d,0,1,73554821-8ab5-44ab-a593-37ca10a1b777,73554821-8ab5-44ab-a593-37ca10a1b777,0,1,d5a98e02-e199-445e-8d53-11acd07f473f,d5a98e02-e199-445e-8d53-11acd07f473f,0,1,79db55d6-e916-4bde-b417-7d0a53bb85af,79db55d6-e916-4bde-b417-7d0a53bb85af,0,1,3084fb99-59cb-4338-ae37-0b1e8b333f01,3084fb99-59cb-4338-ae37-0b1e8b333f01,0,1,818a1fbf-17c1-44f9-8e20-27d4ceda549c,818a1fbf-17c1-44f9-8e20-27d4ceda549c,0,1,959a5d25-03e5-4911-bbb7-b93714db7eed,959a5d25-03e5-4911-bbb7-b93714db7eed,0,1,1d0b6a8d-9351-4ce2-85dd-6ac508c660c2,1d0b6a8d-9351-4ce2-85dd-6ac508c660c2,0,1,0b09cf2f-1759-4362-b997-29e09ac00445,0b09cf2f-1759-4362-b997-29e09ac00445,0,1,f6a9eb9c-a1c2-4114-b155-3ce94c7b7f20,f6a9eb9c-a1c2-4114-b155-3ce94c7b7f20,0,1,828ddf5d-ca09-4baf-897f-77d569e02a6b,828ddf5d-ca09-4baf-897f-77d569e02a6b,0,1,8856015c-a695-4b1a-99ef-770263f9dc4a,8856015c-a695-4b1a-99ef-770263f9dc4a,0,1,183ec2b5-e173-4885-9e26-1098ffa15020,183ec2b5-e173-4885-9e26-1098ffa15020,0,1,74702fdf-bfc5-4658-ba58-e39bcfbaa647,74702fdf-bfc5-4658-ba58-e39bcfbaa647,0,1,2f436ec3-6a04-4d2c-998a-c60ea875ca86,2f436ec3-6a04-4d2c-998a-c60ea875ca86,0,1,6a947b2d-3e6b-42c8-a9fd-4c5a71d600a9,6a947b2d-3e6b-42c8-a9fd-4c5a71d600a9,0,1,ae641a80-4ada-4592-ace9-29a82e6700e4,ae641a80-4ada-4592-ace9-29a82e6700e4,0,1,f0b0608c-178f-4dea-b461-0d8f00d79d30,f0b0608c-178f-4dea-b461-0d8f00d79d30,0,1,ed2dba0c-7fe3-4d24-b6a6-b104beadc286,ed2dba0c-7fe3-4d24-b6a6-b104beadc286,0,1,a4c98768-c9fc-4f95-b89b-bb1cb0e8fade,a4c98768-c9fc-4f95-b89b-bb1cb0e8fade,0,1,5546b9a9-a4fe-4a2b-9492-883bcb37a210,5546b9a9-a4fe-4a2b-9492-883bcb37a210,0,1,6fb76c5f-844f-4cbc-ae7c-4ac834fddfc9,6fb76c5f-844f-4cbc-ae7c-4ac834fddfc9,0,1,275a5772-8428-497a-81ef-c919f15fcccd,275a5772-8428-497a-81ef-c919f15fcccd,0,1,8df6e7e6-2a1e-4cf3-bdc9-60e52ea3f625,8df6e7e6-2a1e-4cf3-bdc9-60e52ea3f625,0,1,bf070420-9eb7-4372-96a6-b0d00ac3ce8c,bf070420-9eb7-4372-96a6-b0d00ac3ce8c,0,1,10336352-f3a1-4bc3-bdec-1a2eef15f176,10336352-f3a1-4bc3-bdec-1a2eef15f176,0,1,cacabf2f-6d1c-4c33-80c7-c27a5e757cc9,cacabf2f-6d1c-4c33-80c7-c27a5e757cc9,0,1,3b7c713e-81ae-4adc-9519-99c936599ef7,3b7c713e-81ae-4adc-9519-99c936599ef7,0,1,1c8ffbbd-035c-45cf-8ec8-dc5d26d7f673,1c8ffbbd-035c-45cf-8ec8-dc5d26d7f673,0,1,ecda2c4b-6411-4b47-ab59-1918bad5acdd,ecda2c4b-6411-4b47-ab59-1918bad5acdd,0,1,190bc52e-0d51-4dfc-9f16-99ed71ebfa75,190bc52e-0d51-4dfc-9f16-99ed71ebfa75,0,1,0c24858a-7e64-426f-9b59-392449aecaf5,0c24858a-7e64-426f-9b59-392449aecaf5,0,1,b1d61e28-f3dc-418b-b5df-f75622a4b980,b1d61e28-f3dc-418b-b5df-f75622a4b980,0,1,bec4c82f-4e76-4d16-bb4d-b6d9fa404c5d,bec4c82f-4e76-4d16-bb4d-b6d9fa404c5d,0,1,4033f86b-d250-475a-8837-071bf31664b0,4033f86b-d250-475a-8837-071bf31664b0,0,1,876e31ff-ab7b-4ea4-b491-161963727dd1,876e31ff-ab7b-4ea4-b491-161963727dd1,0,1,bb43995b-68b4-41a1-8458-e10a2d8925f1,bb43995b-68b4-41a1-8458-e10a2d8925f1,0,1,61730dd9-fed7-43ce-8f38-724cac8f3d08,61730dd9-fed7-43ce-8f38-724cac8f3d08,0,1,e6a494b8-27e7-46a6-9435-7be6e150a69e,e6a494b8-27e7-46a6-9435-7be6e150a69e,0,1,133dc852-59d3-4351-934d-8845f8a38431,133dc852-59d3-4351-934d-8845f8a38431,0,1,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,0,1,b67914a8-d483-4bed-bd4d-a4aadd4998a4,b67914a8-d483-4bed-bd4d-a4aadd4998a4,0,1,707a8a49-fec5-454c-9e80-c3da829d395c,707a8a49-fec5-454c-9e80-c3da829d395c,0,1,b5ea4aff-11be-4232-94a2-cb92801b6c49,b5ea4aff-11be-4232-94a2-cb92801b6c49,0,1,6f630213-c16c-421c-a160-09e3c729ab26,6f630213-c16c-421c-a160-09e3c729ab26,0,1,878c638c-7c84-4914-896a-d4fdf0d759ef,878c638c-7c84-4914-896a-d4fdf0d759ef,0,1,6065653e-b7a9-4033-9617-f64430c57d89,6065653e-b7a9-4033-9617-f64430c57d89,0,1,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,0,1,00d1d85b-c258-4f10-9d13-a99375a29fc1,00d1d85b-c258-4f10-9d13-a99375a29fc1,0,1,0544376f-461c-42c3-a102-e0ae65e3c0c6,0544376f-461c-42c3-a102-e0ae65e3c0c6,0,1,6df8d316-6ac3-4626-8951-1ad36d7049ed,6df8d316-6ac3-4626-8951-1ad36d7049ed,0,1,f211b418-899d-4220-a14b-4a7302183e46,f211b418-899d-4220-a14b-4a7302183e46,0,1,e499629a-69ed-46b4-be5d-7b1f2f6a11d4,e499629a-69ed-46b4-be5d-7b1f2f6a11d4,0,1,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,0,1,876b23bf-2f48-4916-ad0f-4de8306e1864,876b23bf-2f48-4916-ad0f-4de8306e1864,0,1,e983f539-e369-491e-9cee-510518187870,e983f539-e369-491e-9cee-510518187870,0,1,9a402a9c-a31f-4082-91d5-b4fe7576a5c2,9a402a9c-a31f-4082-91d5-b4fe7576a5c2,0,1,e99a1b17-0e37-489a-bc39-3dd2e23b0861,e99a1b17-0e37-489a-bc39-3dd2e23b0861,0,1,e7c63a25-c804-4bc4-a6f1-81009dd889e2,e7c63a25-c804-4bc4-a6f1-81009dd889e2,0,1,7ccd86cd-4294-4f6c-84f4-98e25e479f4d,7ccd86cd-4294-4f6c-84f4-98e25e479f4d,0,1,70e710c5-42df-465f-a9c5-8345c87e1f19,70e710c5-42df-465f-a9c5-8345c87e1f19,0,1,4c1576c4-b327-4ec1-87bc-662c5aba343b,4c1576c4-b327-4ec1-87bc-662c5aba343b,0,1,0f694ef1-4a97-4aed-ab4b-0b2c18ea7e17,0f694ef1-4a97-4aed-ab4b-0b2c18ea7e17,0,1,14facdfb-9835-4bb6-98a8-5a6ca9a5d2f8,14facdfb-9835-4bb6-98a8-5a6ca9a5d2f8,0,1,4492ac73-eb91-41f8-98f1-54c2b3ad212a,4492ac73-eb91-41f8-98f1-54c2b3ad212a,0,1,869b43fb-968f-4fe0-b945-5030c90a38f2,869b43fb-968f-4fe0-b945-5030c90a38f2,0,1,af071a52-212b-4131-98e6-81f6048a70e6,af071a52-212b-4131-98e6-81f6048a70e6,0,1,37210dde-9a2f-475c-8341-578ac99f0e17,37210dde-9a2f-475c-8341-578ac99f0e17,0,1,e5094d4f-ee61-4142-a97b-d96172350f65,e5094d4f-ee61-4142-a97b-d96172350f65,0,1,3a8fffb6-a732-440c-afb9-d1c699ea53b6,3a8fffb6-a732-440c-afb9-d1c699ea53b6,0,1,b0650787-8ff5-4407-b491-bcdc2f61fd58,b0650787-8ff5-4407-b491-bcdc2f61fd58,0,1,33dd6bba-0044-4e2f-ae9e-c8a26079ab2a,33dd6bba-0044-4e2f-ae9e-c8a26079ab2a,0,1,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,0,1,9aadad98-69f5-41ce-ad1c-0afd8c610d86,9aadad98-69f5-41ce-ad1c-0afd8c610d86,0,1,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,0,1,3d662173-e19d-4077-9a08-8c8899226e24,3d662173-e19d-4077-9a08-8c8899226e24,0,1,69fd1e6e-7302-4ca8-8419-ec567ae66bef,69fd1e6e-7302-4ca8-8419-ec567ae66bef,0,1,0eee931a-57bb-4844-8e6e-eaca342640a0,0eee931a-57bb-4844-8e6e-eaca342640a0,0,1,20c57e30-5856-4801-9e77-8006471d89f8,20c57e30-5856-4801-9e77-8006471d89f8,0,1,64eff9f4-c57b-40a0-bd83-7e371fd010ce,64eff9f4-c57b-40a0-bd83-7e371fd010ce,0,1,4a3fe393-8aea-4394-8c10-a234f1f191ad,4a3fe393-8aea-4394-8c10-a234f1f191ad,0,1,6f9a3d00-d935-4fa6-9fd2-14700226daff,6f9a3d00-d935-4fa6-9fd2-14700226daff,0,1,d792831c-698d-40c6-96c2-dd0ae6f30707,d792831c-698d-40c6-96c2-dd0ae6f30707,0,1,a1d91c5f-1acd-4b46-887e-d06e7260dd20,a1d91c5f-1acd-4b46-887e-d06e7260dd20,0,1,3fd26019-c464-4c73-b18e-0888740b1747,3fd26019-c464-4c73-b18e-0888740b1747,0,1,a21989bd-a57f-4969-be3b-d8b39ead4145,a21989bd-a57f-4969-be3b-d8b39ead4145,0,1,c4aee120-cdbb-4b48-a1c7-99cccbafb120,c4aee120-cdbb-4b48-a1c7-99cccbafb120,0,1,6b3e07d5-9299-4933-b3fa-c3cc5f5aa7c9,6b3e07d5-9299-4933-b3fa-c3cc5f5aa7c9,0,1,a3667b25-7c18-446d-a318-685a4fe4bf89,a3667b25-7c18-446d-a318-685a4fe4bf89,0,1,fd271670-bde6-4351-abec-eb82548c6c98,fd271670-bde6-4351-abec-eb82548c6c98,0,1,498b012b-bb63-490e-8100-1d33dc84b400,498b012b-bb63-490e-8100-1d33dc84b400,0,1,8103f12c-ed50-4052-8117-33b6d11ef620,8103f12c-ed50-4052-8117-33b6d11ef620,0,1,4f8653e4-3f58-4bad-8ded-424fe7b1d18a,4f8653e4-3f58-4bad-8ded-424fe7b1d18a,0,1,799b3dda-fbfc-4dea-a577-30321e64f4d5,799b3dda-fbfc-4dea-a577-30321e64f4d5,0,1,7c7857b6-90e8-4b3f-9902-fd81bf68d133,7c7857b6-90e8-4b3f-9902-fd81bf68d133,0,1,617de19c-bf01-4900-832a-c169e9faeb79,617de19c-bf01-4900-832a-c169e9faeb79,0,1,70b73fd0-f5dc-411e-9bbb-10a538e8281b,70b73fd0-f5dc-411e-9bbb-10a538e8281b,0,1,758f44ad-54da-4f72-accf-0afecc4f4827,758f44ad-54da-4f72-accf-0afecc4f4827,0,1,05ee4a7c-63e6-4587-8be7-e206345e3471,05ee4a7c-63e6-4587-8be7-e206345e3471,0,1,98d5e98b-0382-4b28-a5d9-24392925664a,98d5e98b-0382-4b28-a5d9-24392925664a,0,1,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,0,1,2a77eb39-0487-4fb0-8d5b-d4a27592ea60,2a77eb39-0487-4fb0-8d5b-d4a27592ea60,0,1,19a18193-c5d3-4e56-86c5-5a81c525e9ad,19a18193-c5d3-4e56-86c5-5a81c525e9ad,0,1,c208fcc0-d7b2-435b-963a-e18c97727f8f,c208fcc0-d7b2-435b-963a-e18c97727f8f,0,1,ac5db038-8bc3-45ff-9e8d-04ea9fef6d43,ac5db038-8bc3-45ff-9e8d-04ea9fef6d43,0,1,bf11f7b1-6332-4499-ba48-b94bc10ef869,bf11f7b1-6332-4499-ba48-b94bc10ef869,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,479d9428-02fd-47d2-a869-a3695b315724,479d9428-02fd-47d2-a869-a3695b315724,0,1,838b4840-86e3-4bf3-8b95-1e58ef60e97a,838b4840-86e3-4bf3-8b95-1e58ef60e97a,0,1,36d258b5-bfda-4b40-88a8-1e0abf351805,36d258b5-bfda-4b40-88a8-1e0abf351805,0,1,cc95b010-ca42-4b54-9c50-0551b2c690ed,cc95b010-ca42-4b54-9c50-0551b2c690ed,0,1,829fb3c0-6d96-4765-adc6-f177344a4a33,829fb3c0-6d96-4765-adc6-f177344a4a33,0,1,9241e7fe-e3e8-4ddd-ac6c-4edb1a1b2f71,9241e7fe-e3e8-4ddd-ac6c-4edb1a1b2f71,0,1,7c47f039-1ca9-4c6f-ac36-f4cb59b48b65,7c47f039-1ca9-4c6f-ac36-f4cb59b48b65,0,1,974d2430-1ff6-4be9-a5aa-aa896e9a66d4,974d2430-1ff6-4be9-a5aa-aa896e9a66d4,0,1,d392a791-af74-40c9-ab20-6ed6aeabe864,d392a791-af74-40c9-ab20-6ed6aeabe864,0,1,0b7cee9b-3870-49f5-a58e-063cf5353467,0b7cee9b-3870-49f5-a58e-063cf5353467,0,1,1612570d-b069-405a-9dd3-80b8175fb468,1612570d-b069-405a-9dd3-80b8175fb468,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,27c52afc-7127-41e1-af8a-1b1bd2c9bfa8,27c52afc-7127-41e1-af8a-1b1bd2c9bfa8,0,1,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,0,1,561ed574-617d-4a46-b32b-f022e07846c8,561ed574-617d-4a46-b32b-f022e07846c8,0,1,cba706bf-a9a7-4dda-9c5a-a26e85119396,cba706bf-a9a7-4dda-9c5a-a26e85119396,0,1,159a4eb5-00cd-426c-86e3-09cd3f569f22,159a4eb5-00cd-426c-86e3-09cd3f569f22,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,2ded5135-b6c3-46dd-b563-7b6fab986d23,2ded5135-b6c3-46dd-b563-7b6fab986d23,0,1,14215720-ccb3-4e5a-8345-cd42c96a3e77,14215720-ccb3-4e5a-8345-cd42c96a3e77,0,1,24fa0604-b6a5-49ad-9d03-b2cf8e81dad8,24fa0604-b6a5-49ad-9d03-b2cf8e81dad8,0,1,0690a5c7-bc25-4101-afa5-69c095d415c2,0690a5c7-bc25-4101-afa5-69c095d415c2,0,1,2ad7b509-4cd1-456a-a6ae-94649fdf8c3e,2ad7b509-4cd1-456a-a6ae-94649fdf8c3e,0,1,79013bba-a0f2-481c-a63e-095a54ee52aa,79013bba-a0f2-481c-a63e-095a54ee52aa,0,1,8523c346-f144-41b8-a702-2d588e7097c2,8523c346-f144-41b8-a702-2d588e7097c2,0,1,93969a30-d9d7-4f2f-85fa-57a4eb7495bf,93969a30-d9d7-4f2f-85fa-57a4eb7495bf,0,1,9fb73c9b-05de-4474-8a28-7e3fd5b2b143,9fb73c9b-05de-4474-8a28-7e3fd5b2b143,0,1,fa2bd6a6-bb46-4e21-8684-248578310164,fa2bd6a6-bb46-4e21-8684-248578310164,0,1,f7cf3b42-39c0-48db-b8ca-fe9ea267a45a,f7cf3b42-39c0-48db-b8ca-fe9ea267a45a,0,1,3a0c06eb-f6d5-46c3-b0b9-c8d98e572093,3a0c06eb-f6d5-46c3-b0b9-c8d98e572093,0,1,88ccac36-169d-48f8-bc68-15e3bb775b79,88ccac36-169d-48f8-bc68-15e3bb775b79,0,1,a1640988-bd60-43b3-86f1-184b9db275c6,a1640988-bd60-43b3-86f1-184b9db275c6,0,1,300a02f7-8062-4843-b11e-0321f8b40f4d,300a02f7-8062-4843-b11e-0321f8b40f4d,0,1,bac41d45-249f-40b4-a013-008e261369c8,bac41d45-249f-40b4-a013-008e261369c8,0,1,84e34b4a-02e8-4676-8b81-771ddf3c2931,84e34b4a-02e8-4676-8b81-771ddf3c2931,0,1,0aa6a024-66ae-4592-87d6-f7cb2a59f906,0aa6a024-66ae-4592-87d6-f7cb2a59f906,0,1,734b4dc5-dc91-4945-a2d7-cefe56a6e0a6,734b4dc5-dc91-4945-a2d7-cefe56a6e0a6,0,1,bb2dcb37-410d-4a6c-9ace-1f04177d6e88,bb2dcb37-410d-4a6c-9ace-1f04177d6e88,0,1,cb6ecc18-a14f-4c3c-a39d-2cd2d1ab4e03,cb6ecc18-a14f-4c3c-a39d-2cd2d1ab4e03,0,1,f71ac535-74a5-4001-a613-455a9e1bf734,f71ac535-74a5-4001-a613-455a9e1bf734,0,1,55a42b83-b6d2-409b-a8ff-7849b08e07ed,55a42b83-b6d2-409b-a8ff-7849b08e07ed,0,1,61889399-ecc2-442c-a790-a8b27a7a540c,61889399-ecc2-442c-a790-a8b27a7a540c,0,1,ecd3a928-3e59-439c-8f58-ba360f2a8b3c,ecd3a928-3e59-439c-8f58-ba360f2a8b3c,0,1,4ee2efbc-bc4a-4b47-bfdb-bb83f108c5bb,4ee2efbc-bc4a-4b47-bfdb-bb83f108c5bb,0,1,2d942a50-b239-4b8c-812a-5a634f5dcaef,2d942a50-b239-4b8c-812a-5a634f5dcaef,0,1,8ab0c61d-85b4-47e3-aca1-1890e4c6ec8d,8ab0c61d-85b4-47e3-aca1-1890e4c6ec8d,0,1,a21cf522-d657-49ba-a198-01ff1de5e3f0,a21cf522-d657-49ba-a198-01ff1de5e3f0,0,1,4dc698da-8471-4b3f-816d-f1467cd2e5f1,4dc698da-8471-4b3f-816d-f1467cd2e5f1,0,1,7ceb2f18-4dae-4b13-a5be-e949be165b4e,7ceb2f18-4dae-4b13-a5be-e949be165b4e,0,1,c4f94f6d-e33f-4226-bf47-c4b544098082,c4f94f6d-e33f-4226-bf47-c4b544098082,0,1,0abca5b8-4974-48aa-bf5d-dbbe2c2ea0e6,0abca5b8-4974-48aa-bf5d-dbbe2c2ea0e6,0,1,fc67b510-3fb4-4305-92d2-c252bc718f03,fc67b510-3fb4-4305-92d2-c252bc718f03,0,1,ed98a7b2-ad31-401f-a65e-dfbcc8e5a4a8,ed98a7b2-ad31-401f-a65e-dfbcc8e5a4a8,0,1,9a5e3d2c-ab69-4f9d-a56f-20bb5f0be1e2,9a5e3d2c-ab69-4f9d-a56f-20bb5f0be1e2,0,1,cf1f7915-94ad-47e7-8676-73271d0cf71e,cf1f7915-94ad-47e7-8676-73271d0cf71e,0,1,fceb6e4a-bd51-4193-a542-70d2317af669,fceb6e4a-bd51-4193-a542-70d2317af669,0,1,80847d57-1795-46c7-a106-926e1f43ac1e,80847d57-1795-46c7-a106-926e1f43ac1e,0,1,38685415-dc87-48b4-8cc4-f85b438f2ec2,38685415-dc87-48b4-8cc4-f85b438f2ec2,0,1,110eff8b-aeec-4ba5-b710-fefc1bd60284,110eff8b-aeec-4ba5-b710-fefc1bd60284,0,1,0a8a6bb9-8b6a-43cf-9d46-b18a8a9591d8,0a8a6bb9-8b6a-43cf-9d46-b18a8a9591d8,0,1,75eca481-002b-4046-898d-dfac9357611f,75eca481-002b-4046-898d-dfac9357611f,0,1,0110decc-d06e-43cf-9d01-30d412edcdd7,0110decc-d06e-43cf-9d01-30d412edcdd7,0,1,3ea32a24-d37b-4fad-937a-9d1357d649a9,3ea32a24-d37b-4fad-937a-9d1357d649a9,0,1,2856ee9a-0fea-4684-b7b8-4844773eae07,2856ee9a-0fea-4684-b7b8-4844773eae07,0,1,fae4675c-dcdc-42fc-911d-07c3c577b8b8,fae4675c-dcdc-42fc-911d-07c3c577b8b8,0,1,f1050611-4f82-411b-97f2-bcd8a5c914bf,f1050611-4f82-411b-97f2-bcd8a5c914bf,0,1,efacf22d-b474-4d49-af8b-6d3784aa5cf2,efacf22d-b474-4d49-af8b-6d3784aa5cf2,0,1,f818b937-9ac3-4a0c-ba50-26c060984f09,f818b937-9ac3-4a0c-ba50-26c060984f09,0,1,f385778d-96cb-4e09-884d-533739b393b1,f385778d-96cb-4e09-884d-533739b393b1,0,1,5bdaa783-e965-4d59-b7b7-a1e86ddb89f7,5bdaa783-e965-4d59-b7b7-a1e86ddb89f7,0,1,0b2356a4-5571-4ba0-9095-265106f2b3b3,0b2356a4-5571-4ba0-9095-265106f2b3b3,0,1,a2581834-dde8-439a-8204-6712c829738e,a2581834-dde8-439a-8204-6712c829738e,0,1,222985c4-fe09-44d1-a1c5-5a3e3cedd9b2,222985c4-fe09-44d1-a1c5-5a3e3cedd9b2,0,1,c746a268-815b-4917-8b06-af745ba9db04,c746a268-815b-4917-8b06-af745ba9db04,0,1,5cc01f13-0faa-4c3c-8e5e-156656f71efd,5cc01f13-0faa-4c3c-8e5e-156656f71efd,0,1,7c3463c8-ea36-415a-8e9d-dc7bd927b9d1,7c3463c8-ea36-415a-8e9d-dc7bd927b9d1,0,1,260f4fb1-02cb-4c32-ba4b-5aa202cd0311,260f4fb1-02cb-4c32-ba4b-5aa202cd0311,0,1,be2b4dba-e77e-4947-bd2f-0710b357ca2a,be2b4dba-e77e-4947-bd2f-0710b357ca2a,0,1,86182e9a-89e0-40d7-b2d7-fcd92ee42942,86182e9a-89e0-40d7-b2d7-fcd92ee42942,0,1,df750e63-50fc-4085-b8b8-f05e4751ff51,df750e63-50fc-4085-b8b8-f05e4751ff51,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,2447cfeb-d877-4222-8ac2-b0026b85f932,2447cfeb-d877-4222-8ac2-b0026b85f932,0,1,fb94e9cb-1f27-42a6-a701-18bbe5888e70,fb94e9cb-1f27-42a6-a701-18bbe5888e70,0,1,2e26e32e-a0c6-4460-99de-865622202166,2e26e32e-a0c6-4460-99de-865622202166,0,1,c9489a6e-45af-4877-9788-158071571a0a,c9489a6e-45af-4877-9788-158071571a0a,0,1,23959912-f8fc-42bc-9ec2-1d520ebc5dad,23959912-f8fc-42bc-9ec2-1d520ebc5dad,0,1,4770398f-8013-4d43-93ce-ec1165e40c4e,4770398f-8013-4d43-93ce-ec1165e40c4e,0,1,9a706997-90cb-430d-972c-d2bad87c4a79,9a706997-90cb-430d-972c-d2bad87c4a79,0,1,6f661660-b9c4-41d4-99a8-e08006cfe9c8,6f661660-b9c4-41d4-99a8-e08006cfe9c8,0,1,199e79fa-54d6-4748-aaaa-9c55283582a3,199e79fa-54d6-4748-aaaa-9c55283582a3,0,1,77b4ade5-149c-4803-af25-fb24ad8b7116,77b4ade5-149c-4803-af25-fb24ad8b7116,0,1,afedc975-4354-473c-8a4d-5b4b547c6e13,afedc975-4354-473c-8a4d-5b4b547c6e13,0,1,8faced7e-d498-499e-8011-7d8d2de1a25f,8faced7e-d498-499e-8011-7d8d2de1a25f,0,1,a67b69dc-ca89-4813-a78d-4a7be1aff328,a67b69dc-ca89-4813-a78d-4a7be1aff328,0,1,dec2510f-4517-4144-a525-3c344e44abc4,dec2510f-4517-4144-a525-3c344e44abc4,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,aa89881f-f111-4384-911c-847b04bb56dd,aa89881f-f111-4384-911c-847b04bb56dd,0,1,444d9e3b-c702-4ad6-a929-a220eff0f6e7,444d9e3b-c702-4ad6-a929-a220eff0f6e7,0,1,022c4519-1cdb-45b6-a699-89fd6688999c,022c4519-1cdb-45b6-a699-89fd6688999c,0,1,fb5b79a2-caec-4c6e-a112-27e78a184d5e,fb5b79a2-caec-4c6e-a112-27e78a184d5e,0,1,fa523958-ce1e-42e1-ae00-2dcb401b7eda,fa523958-ce1e-42e1-ae00-2dcb401b7eda,0,1,1518bca2-a004-4566-8991-7c60e6745a49,1518bca2-a004-4566-8991-7c60e6745a49,0,1,ed8618e2-3ce6-4956-856a-9f40279b4da6,ed8618e2-3ce6-4956-856a-9f40279b4da6,0,1,733f6bc2-544d-4fac-bca8-11b981b95a03,733f6bc2-544d-4fac-bca8-11b981b95a03,0,1,0333cd9e-392d-40b2-869d-ad47119e0384,0333cd9e-392d-40b2-869d-ad47119e0384,0,1,82cc8820-0b92-4bb7-b097-7ac79e922f01,82cc8820-0b92-4bb7-b097-7ac79e922f01,0,1,f2267d6c-6972-4621-b677-87798056363b,f2267d6c-6972-4621-b677-87798056363b,0,1,243d201b-3714-4700-b410-c74c9093e6f6,243d201b-3714-4700-b410-c74c9093e6f6,0,1,de3cb50c-ef99-419e-b922-c6a453da6a5b,de3cb50c-ef99-419e-b922-c6a453da6a5b,0,1,d4ca4802-756a-494c-bab3-e77e0777a3fa,d4ca4802-756a-494c-bab3-e77e0777a3fa,0,1,134c1054-8d65-405f-ba3b-5beeca803a72,134c1054-8d65-405f-ba3b-5beeca803a72,0,1,cfa1669b-5310-4171-83fd-4dff3c6ac345,cfa1669b-5310-4171-83fd-4dff3c6ac345,0,1,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,0,1,0db78226-37d0-4016-b4c9-5134af1aabc7,0db78226-37d0-4016-b4c9-5134af1aabc7,0,1,8d6b4d23-a260-4352-9975-c13ce3e05220,8d6b4d23-a260-4352-9975-c13ce3e05220,0,1,e0be0bc7-def6-4ae9-9a33-9689aa829b5e,e0be0bc7-def6-4ae9-9a33-9689aa829b5e,0,1,97d4ffd0-07ef-4dc2-8fbc-449c3c8453ef,97d4ffd0-07ef-4dc2-8fbc-449c3c8453ef,0,1,6f5ac40b-ea22-47cf-acf2-614406669a72,6f5ac40b-ea22-47cf-acf2-614406669a72,0,1,b6caaa9e-a9d1-4519-a61f-7fa0ab0ff201,b6caaa9e-a9d1-4519-a61f-7fa0ab0ff201,0,1,8a0d4f7f-7a80-4e5d-8238-05fc169e0319,8a0d4f7f-7a80-4e5d-8238-05fc169e0319,0,1,8e9f9baf-8d12-46cc-915f-f6f290af5512,8e9f9baf-8d12-46cc-915f-f6f290af5512,0,1,5808331f-9ab4-4a23-a592-1f65087f3214,5808331f-9ab4-4a23-a592-1f65087f3214,0,1,9316738d-3d38-4068-818e-a001355b19fb,9316738d-3d38-4068-818e-a001355b19fb,0,1,d86d766f-021a-4c11-b9e8-403af08918cc,d86d766f-021a-4c11-b9e8-403af08918cc,0,1,2cedfef0-5d93-475a-b2dd-ee36e553e6e1,2cedfef0-5d93-475a-b2dd-ee36e553e6e1,0,1,29200d04-d7da-435a-89e6-858c11a1a98c,29200d04-d7da-435a-89e6-858c11a1a98c,0,1,8e5f6c70-04b3-46a1-94ef-82c9f6019f8f,8e5f6c70-04b3-46a1-94ef-82c9f6019f8f,0,1,6c119ef2-d24b-4c3d-ad07-611bed89cab1,6c119ef2-d24b-4c3d-ad07-611bed89cab1,0,1,13b1cb1f-88df-4ff8-b4cc-0473e4f96005,13b1cb1f-88df-4ff8-b4cc-0473e4f96005,0,1,0e861ad8-6fa3-4b0f-a9b0-6c91df1dfc6b,0e861ad8-6fa3-4b0f-a9b0-6c91df1dfc6b,0,1,27df6c22-85d7-4cb6-be19-82af76c84bf9,27df6c22-85d7-4cb6-be19-82af76c84bf9,0,1,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,0,1,0be7f905-53b8-4bb1-8e37-dcc142e508c5,0be7f905-53b8-4bb1-8e37-dcc142e508c5,0,1,422155c7-1640-48c4-bb21-36595b405c66,422155c7-1640-48c4-bb21-36595b405c66,0,1,16d37b5a-88db-4787-b2de-fb50da0ca94b,16d37b5a-88db-4787-b2de-fb50da0ca94b,0,1,f653bcbf-5659-4605-9bb9-3737f19e79dd,f653bcbf-5659-4605-9bb9-3737f19e79dd,0,1,8b980868-fe63-49ff-ba3d-4c29732e1b90,8b980868-fe63-49ff-ba3d-4c29732e1b90,0,1,54668731-4963-4ec3-b188-9feacaefa182,54668731-4963-4ec3-b188-9feacaefa182,0,1,3702135e-5380-4ca6-82f5-63eff1b043e9,3702135e-5380-4ca6-82f5-63eff1b043e9,0,1,29b2104b-fd02-4d51-951f-51ea213b8ebd,29b2104b-fd02-4d51-951f-51ea213b8ebd,0,1,ba5c945e-554f-45a2-a2de-3157b2d7e931,ba5c945e-554f-45a2-a2de-3157b2d7e931,0,1,f7085f33-f122-4443-a3f5-4e765300175e,f7085f33-f122-4443-a3f5-4e765300175e,0,1,b7e4c512-b856-4679-a025-5f0f28918593,b7e4c512-b856-4679-a025-5f0f28918593,0,1,bba56b8f-a3f3-4d3f-9804-f9569bb1f6f3,bba56b8f-a3f3-4d3f-9804-f9569bb1f6f3,0,1,cff7ba79-9418-43a4-badc-3e3cc2f6bd5b,cff7ba79-9418-43a4-badc-3e3cc2f6bd5b,0,1,a9362ac4-85ee-4214-80c1-048fab769885,a9362ac4-85ee-4214-80c1-048fab769885,0,1,4ec242e0-75d1-4bf7-be18-783e7aa4f236,4ec242e0-75d1-4bf7-be18-783e7aa4f236,0,1,e02b1366-9d7a-462f-86a1-436bbf4532ff,e02b1366-9d7a-462f-86a1-436bbf4532ff,0,1,40ee729c-c317-4a1c-b985-5f7e4e1e20fb,40ee729c-c317-4a1c-b985-5f7e4e1e20fb,0,1,2feb35c0-b046-4086-a2ce-ccc462fc6e9c,2feb35c0-b046-4086-a2ce-ccc462fc6e9c,0,1,8811cc64-99d9-4f13-8309-c29965783f5a,8811cc64-99d9-4f13-8309-c29965783f5a,0,1,7c737071-e850-4a3f-8942-697ef52a8ecc,7c737071-e850-4a3f-8942-697ef52a8ecc,0,1,62eff222-7b74-4cab-9138-880db1f05147,62eff222-7b74-4cab-9138-880db1f05147,0,1,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,0,1,860f8893-22fe-4b13-adb1-24e1ea8c6544,860f8893-22fe-4b13-adb1-24e1ea8c6544,0,1,95266e9f-073f-4de3-83c6-cc0d9ee9334f,95266e9f-073f-4de3-83c6-cc0d9ee9334f,0,1,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,0,1,d5012e69-89bc-40af-8e4f-377a042854ee,d5012e69-89bc-40af-8e4f-377a042854ee,0,1,02f79fd8-5315-4c90-b520-db67dcb6e371,02f79fd8-5315-4c90-b520-db67dcb6e371,0,1,9bb52788-4a3a-48b5-a551-5ca753b6c059,9bb52788-4a3a-48b5-a551-5ca753b6c059,0,1,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,0,1,872a0c47-fab5-4a54-8ab9-23940bbdefbb,872a0c47-fab5-4a54-8ab9-23940bbdefbb,0,1,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,0,1,2f20bff4-9201-4f36-9e74-eba4d9b3c59a,2f20bff4-9201-4f36-9e74-eba4d9b3c59a,0,1,b6c94efd-5994-4c4c-a641-b062ecc38b65,b6c94efd-5994-4c4c-a641-b062ecc38b65,0,1,98501228-7f0e-45a3-b58f-4c654f393f80,98501228-7f0e-45a3-b58f-4c654f393f80,0,1,502384c9-edb7-451a-b7ea-de006f657a6e,502384c9-edb7-451a-b7ea-de006f657a6e,0,1,4e1a4fe0-dca4-40ba-9369-73be303a4aef,4e1a4fe0-dca4-40ba-9369-73be303a4aef,0,1,329906a0-0b61-4f3f-8cd0-f06a78e8fe5f,329906a0-0b61-4f3f-8cd0-f06a78e8fe5f,0,1,840e0b1b-a599-4c5f-8eaa-7f7e4f2e55a4,840e0b1b-a599-4c5f-8eaa-7f7e4f2e55a4,0,1,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,0,1,50968921-76f3-4108-835a-96b153671c8d,50968921-76f3-4108-835a-96b153671c8d,0,1,b773f510-1485-4886-9071-afcbf49ff856,b773f510-1485-4886-9071-afcbf49ff856,0,1,964403f2-0a87-49e1-b183-dbe3624e3805,964403f2-0a87-49e1-b183-dbe3624e3805,0,1,01579044-5659-4a73-a989-c52cfabaae66,01579044-5659-4a73-a989-c52cfabaae66,0,1,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,0,1,911baaa1-a4de-4558-b00e-51644144a762,911baaa1-a4de-4558-b00e-51644144a762,0,1,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,0,1,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,0,1,4e036eff-92a8-4010-89b2-ed949c123311,4e036eff-92a8-4010-89b2-ed949c123311,0,1,38160114-dc22-4d0b-86a5-d650f4756932,38160114-dc22-4d0b-86a5-d650f4756932,0,1,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,fc2675c2-1c9b-41f9-88eb-5c8be365fe41,fc2675c2-1c9b-41f9-88eb-5c8be365fe41,0,1,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,0,1,d49411b4-5f6d-48c5-b4f8-fdfbd1b73317,d49411b4-5f6d-48c5-b4f8-fdfbd1b73317,0,1,8b3da21b-ea3f-47cf-af48-15b886b21f20,8b3da21b-ea3f-47cf-af48-15b886b21f20,0,1,32c4750b-0096-4bbc-8dcd-c1f717734233,32c4750b-0096-4bbc-8dcd-c1f717734233,0,1,be6740b1-1f57-4c01-a67a-d48152931dc8,be6740b1-1f57-4c01-a67a-d48152931dc8,0,1,40fd038d-a93a-4be7-9221-d8ae83350ca0,40fd038d-a93a-4be7-9221-d8ae83350ca0,0,1,e9fcabef-5067-477b-8cb0-1bf3ab8161c5,e9fcabef-5067-477b-8cb0-1bf3ab8161c5,0,1,29adc9e5-a994-48ab-a5a1-919d01119c3a,29adc9e5-a994-48ab-a5a1-919d01119c3a,0,1,c47ffce7-c905-4e88-8b1f-156f47047ccd,c47ffce7-c905-4e88-8b1f-156f47047ccd,0,1,e1755eed-88cf-42c1-83e4-f9047f2c30bf,e1755eed-88cf-42c1-83e4-f9047f2c30bf,0,1,c6ec9d48-9131-4735-9cf7-b498705a57e4,c6ec9d48-9131-4735-9cf7-b498705a57e4,0,1,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,0,1,706c421a-74ce-4985-9443-b4a2032481f6,706c421a-74ce-4985-9443-b4a2032481f6,0,1,64da4c24-4aaf-42c8-8595-7f60ff3bc344,64da4c24-4aaf-42c8-8595-7f60ff3bc344,0,1,fb9577e1-00d9-4d52-8de9-23914929a683,fb9577e1-00d9-4d52-8de9-23914929a683,0,1,ffd62a16-f2b4-4e3a-8849-15b957a3d1a1,ffd62a16-f2b4-4e3a-8849-15b957a3d1a1,0,1,529253ae-9c92-4426-b150-8444ba622f89,529253ae-9c92-4426-b150-8444ba622f89,0,1,06a1955a-2ef0-4607-9dcb-a480a7951af7,06a1955a-2ef0-4607-9dcb-a480a7951af7,0,1,6f8fcc96-bfed-444a-908d-95c5b1c64972,6f8fcc96-bfed-444a-908d-95c5b1c64972,0,1,97ce4bf2-6580-4f27-8b5d-d60b66a09c9e,97ce4bf2-6580-4f27-8b5d-d60b66a09c9e,0,1,a84c89d9-2cfe-405f-9bb0-5392b3171695,a84c89d9-2cfe-405f-9bb0-5392b3171695,0,1,070ecbfe-88d6-4de8-b236-e7eedbc3ebc6,070ecbfe-88d6-4de8-b236-e7eedbc3ebc6,0,1,91e26e73-027f-4a10-9083-e5182e768723,91e26e73-027f-4a10-9083-e5182e768723,0,1,e55680f4-cb1a-4cdb-88f0-5d82f43c1d05,e55680f4-cb1a-4cdb-88f0-5d82f43c1d05,0,1,54433668-4391-4dea-8baf-43e9aa1d624e,54433668-4391-4dea-8baf-43e9aa1d624e,0,1,fc309616-060a-42c3-8401-dfef0f359bc5,fc309616-060a-42c3-8401-dfef0f359bc5,0,1,b968398d-973d-4643-95a5-16633d7e48bc,b968398d-973d-4643-95a5-16633d7e48bc,0,1,b9507495-2536-4895-b68b-62acd74343f6,b9507495-2536-4895-b68b-62acd74343f6,0,1,e05a14cc-9051-4c38-9725-19856e36d260,e05a14cc-9051-4c38-9725-19856e36d260,0,1,8154aa0f-ecd6-4ab0-9498-56ef25486a55,8154aa0f-ecd6-4ab0-9498-56ef25486a55,0,1,9d6429f7-23da-4596-822a-04818deb3088,9d6429f7-23da-4596-822a-04818deb3088,0,1,a1b67bd2-3220-497d-b2b4-bd0ea62d9111,a1b67bd2-3220-497d-b2b4-bd0ea62d9111,0,1,acb533e7-4610-4f92-b548-1a4ff1a423d4,acb533e7-4610-4f92-b548-1a4ff1a423d4,0,1,8697999d-9cdb-43d8-979b-3f283daffdd3,8697999d-9cdb-43d8-979b-3f283daffdd3,0,1,23378687-249c-4ec6-99b8-b13fb04b8643,23378687-249c-4ec6-99b8-b13fb04b8643,0,1,66315b12-7abf-46e0-a994-894b827b1301,66315b12-7abf-46e0-a994-894b827b1301,0,1,dba174fb-8392-4451-8069-ae8145658e34,dba174fb-8392-4451-8069-ae8145658e34,0,1,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,0,1,4435d99d-a1df-43e6-97ab-5e651017c61d,4435d99d-a1df-43e6-97ab-5e651017c61d,0,1,2398d69d-ecdd-4d34-bdae-34ed5507a61e,2398d69d-ecdd-4d34-bdae-34ed5507a61e,0,1,a707035a-0172-4b55-b589-fa4a8be9b596,a707035a-0172-4b55-b589-fa4a8be9b596,0,1,c4456e94-8c76-49b1-b85a-433e0f65bdb0,c4456e94-8c76-49b1-b85a-433e0f65bdb0,0,1,4a347209-3a07-48ea-b407-6ee37f1d69f2,4a347209-3a07-48ea-b407-6ee37f1d69f2,0,1,d6aed0fd-686c-430d-b884-74494177422e,d6aed0fd-686c-430d-b884-74494177422e,0,1,245ec4aa-ed65-41f7-b0f0-f8085cfc5bef,245ec4aa-ed65-41f7-b0f0-f8085cfc5bef,0,1,3ed64288-8bf0-4049-8d44-1b424f31d40f,3ed64288-8bf0-4049-8d44-1b424f31d40f,0,1,e0a3fab1-3fe9-4927-840e-f983f72bdfc1,e0a3fab1-3fe9-4927-840e-f983f72bdfc1,0,1,df31eee8-387d-40d1-98df-1f7d8176b50e,df31eee8-387d-40d1-98df-1f7d8176b50e,0,1,c8364283-5525-4bef-8e96-abced54c6a4a,c8364283-5525-4bef-8e96-abced54c6a4a,0,1,bcc25539-c6ca-40d0-84fd-53c3caf1aec7,bcc25539-c6ca-40d0-84fd-53c3caf1aec7,0,1,577f2671-7d38-4806-b7ff-840d649e6d69,577f2671-7d38-4806-b7ff-840d649e6d69,0,1,4ff9376e-ffa6-48f3-bf26-b55ceb23da09,4ff9376e-ffa6-48f3-bf26-b55ceb23da09,0,1,de4c339a-a3cf-4b30-bcf2-ce86f5c2d3b0,de4c339a-a3cf-4b30-bcf2-ce86f5c2d3b0,0,1,40e2fb30-bb03-4178-a8eb-ddf48337ef23,40e2fb30-bb03-4178-a8eb-ddf48337ef23,0,1,1026fbcb-acd8-40dc-b638-6e02c6378c55,1026fbcb-acd8-40dc-b638-6e02c6378c55,0,1,dc9e2ba6-f4f1-493f-9054-cac633f239dd,dc9e2ba6-f4f1-493f-9054-cac633f239dd,0,1,7b95d0b1-c7b2-43b4-9119-320cb8912032,7b95d0b1-c7b2-43b4-9119-320cb8912032,0,1,004582b7-00aa-405e-8e24-ce76c945edae,004582b7-00aa-405e-8e24-ce76c945edae,0,1,97a9b005-a836-4308-8e63-0e00f6890baa,97a9b005-a836-4308-8e63-0e00f6890baa,0,1,98c34ada-0b78-41db-9183-6d7b9e466bde,98c34ada-0b78-41db-9183-6d7b9e466bde,0,1,fb688339-918e-40a1-8721-a26f3077973e,fb688339-918e-40a1-8721-a26f3077973e,0,1,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,0,1,079ba95c-8293-47e2-b8bd-7acf73c2d880,079ba95c-8293-47e2-b8bd-7acf73c2d880,0,1,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,0,1,a5f264a8-a547-4653-abb1-eb1666d527dc,a5f264a8-a547-4653-abb1-eb1666d527dc,0,1,dabae379-6356-497a-aab5-cf102f16a72a,dabae379-6356-497a-aab5-cf102f16a72a,0,1,337370e0-1021-4887-9d38-6c3833c90a5b,337370e0-1021-4887-9d38-6c3833c90a5b,0,1,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,0,1,d6f01f1c-801b-4776-ae11-48236103f76a,d6f01f1c-801b-4776-ae11-48236103f76a,0,1,b6fe68cf-657b-40e0-af2e-247607a86519,b6fe68cf-657b-40e0-af2e-247607a86519,0,1,9b0b8191-94b7-428f-be86-e9e4cd24a72f,9b0b8191-94b7-428f-be86-e9e4cd24a72f,0,1,a923dbcb-7146-4445-ad17-f4a32c16a837,a923dbcb-7146-4445-ad17-f4a32c16a837,0,1,41dec792-1d1a-4e06-a54b-a86193b98225,41dec792-1d1a-4e06-a54b-a86193b98225,0,1,52257beb-3e0c-4681-b430-9690398cd13a,52257beb-3e0c-4681-b430-9690398cd13a,0,1,135e637c-c28e-4547-8da2-d897dca54cb2,135e637c-c28e-4547-8da2-d897dca54cb2,0,1,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,0,1,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,0,1,5356543a-db9a-4265-b83f-31d45544c8e6,5356543a-db9a-4265-b83f-31d45544c8e6,0,1,857dd311-9c6d-4dba-82d8-283d7b05b09e,857dd311-9c6d-4dba-82d8-283d7b05b09e,0,1,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,0,1,8064eb3a-d56c-4517-9db0-b7300149c7c4,8064eb3a-d56c-4517-9db0-b7300149c7c4,0,1,fe926c88-d792-4db3-abcf-3c94dfdcc407,fe926c88-d792-4db3-abcf-3c94dfdcc407,0,1,bcbdba9e-0b29-4ea7-a7d5-1de819bf86ec,bcbdba9e-0b29-4ea7-a7d5-1de819bf86ec,0,1,e0c51555-1614-4aa7-a075-c5e1251579ba,e0c51555-1614-4aa7-a075-c5e1251579ba,0,1,c75a1c6d-fa33-4b57-b359-6253aff5f3e7,c75a1c6d-fa33-4b57-b359-6253aff5f3e7,0,1,af88ea84-5742-4c9f-9a02-6d0f25186f72,af88ea84-5742-4c9f-9a02-6d0f25186f72,0,1,51363236-c8eb-4eb7-9692-5c18edc9a5a8,51363236-c8eb-4eb7-9692-5c18edc9a5a8,0,1,cb65fbad-69a0-47d8-b4a9-da49274c3eb7,cb65fbad-69a0-47d8-b4a9-da49274c3eb7,0,1,872521e3-413c-45ac-a6ea-39fe1324bae8,872521e3-413c-45ac-a6ea-39fe1324bae8,0,1,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,0,1,81ef02df-498d-4af0-8254-dc6730cbf140,81ef02df-498d-4af0-8254-dc6730cbf140,0,1,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,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,d6b72e00-018a-4fdc-b6a4-06dcecf89809,d6b72e00-018a-4fdc-b6a4-06dcecf89809,0,1,9f816562-57f0-473f-8c85-14f7521ffd7f,9f816562-57f0-473f-8c85-14f7521ffd7f,0,1,917b0acc-88fe-4afc-b19b-6da69e060393,917b0acc-88fe-4afc-b19b-6da69e060393,0,1,a091b76e-8ba4-4534-bbb0-9990e69b8603,a091b76e-8ba4-4534-bbb0-9990e69b8603,0,1,867ee5d2-7566-4052-a311-b56e7e46b90d,867ee5d2-7566-4052-a311-b56e7e46b90d,0,1,f82d5bd6-4c74-4c23-978c-565aae3d752a,f82d5bd6-4c74-4c23-978c-565aae3d752a,0,1,7fba41a5-4faa-412b-b367-b30ced0314c0,7fba41a5-4faa-412b-b367-b30ced0314c0,0,1,98422d20-9a71-40e4-966e-6958d44eaefb,98422d20-9a71-40e4-966e-6958d44eaefb,0,1,37333d0b-3589-4b8b-bf6c-e605e0287b66,37333d0b-3589-4b8b-bf6c-e605e0287b66,0,1,1813c469-da20-46a6-8947-6815b66f64c1,1813c469-da20-46a6-8947-6815b66f64c1,0,1,64e702e9-8934-4356-a1b2-be0e8b390630,64e702e9-8934-4356-a1b2-be0e8b390630,0,1,74880ac4-bdd3-48e6-82a0-a2103da42723,74880ac4-bdd3-48e6-82a0-a2103da42723,0,1,ad083c26-7461-4e94-b524-0174242fbd91,ad083c26-7461-4e94-b524-0174242fbd91,0,1,5ce39370-f918-493f-bb24-53346b6fd836,5ce39370-f918-493f-bb24-53346b6fd836,0,1,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,0,1,0e3d2750-bb4c-42b9-9829-60f1480ced9c,0e3d2750-bb4c-42b9-9829-60f1480ced9c,0,1,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,0,1,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,0,1,a76b1fd1-ba00-40e6-8756-f17fee449818,a76b1fd1-ba00-40e6-8756-f17fee449818,0,1,5c913626-48d1-4e0a-a423-64078ce59c7b,5c913626-48d1-4e0a-a423-64078ce59c7b,0,1,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,0,1,7b0ec304-1904-413e-a9c6-ff62e87107dd,7b0ec304-1904-413e-a9c6-ff62e87107dd,0,1,d4dd8c96-914d-496f-b735-ef85ec473605,d4dd8c96-914d-496f-b735-ef85ec473605,0,1,62517db4-59e6-4945-bcd6-b3f1845572bf,62517db4-59e6-4945-bcd6-b3f1845572bf,0,1,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,0,1,f0f72149-0e7f-441a-b70d-8f47d4977927,f0f72149-0e7f-441a-b70d-8f47d4977927,0,1,776efc3e-ac27-4550-bafd-6e91aa987af2,776efc3e-ac27-4550-bafd-6e91aa987af2,0,1,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,0,1,cc438366-85ea-48be-8b74-d05cddb1fc51,cc438366-85ea-48be-8b74-d05cddb1fc51,0,1,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,0,1,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,0,1,3271b800-1825-422f-97bb-757baf403e90,3271b800-1825-422f-97bb-757baf403e90,0,1,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,0,1,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,0,1,a040c756-4687-4bfd-a690-b122d3c490e5,a040c756-4687-4bfd-a690-b122d3c490e5,0,1,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,0,1,961a9801-3956-4ea0-b0d3-908f09bf4929,961a9801-3956-4ea0-b0d3-908f09bf4929,0,1,6fac5c14-e126-4342-9078-edf1d0efcbf2,6fac5c14-e126-4342-9078-edf1d0efcbf2,0,1,0a3325a1-21c4-4997-882f-4ac2edc175f0,0a3325a1-21c4-4997-882f-4ac2edc175f0,0,1,71102d3f-f020-4d6f-9582-9a7eefb4e797,71102d3f-f020-4d6f-9582-9a7eefb4e797,0,1,53ef6849-a3f3-4171-9167-f349f2d6a736,53ef6849-a3f3-4171-9167-f349f2d6a736,0,1,3f588bd3-d461-42b7-8ab1-386af6399d56,3f588bd3-d461-42b7-8ab1-386af6399d56,0,1,c04ff85e-b4af-4a9f-b0e9-c5c65e3d10a1,c04ff85e-b4af-4a9f-b0e9-c5c65e3d10a1,0,1,8c576405-29c1-46b1-ab2e-40e52c21cab0,8c576405-29c1-46b1-ab2e-40e52c21cab0,0,1,b33a89da-8589-4902-83fa-6545e5fce23e,b33a89da-8589-4902-83fa-6545e5fce23e,0,1,f0620d5a-e1fe-419f-af37-e0f462f97e8d,f0620d5a-e1fe-419f-af37-e0f462f97e8d,0,1,3e2f2ae1-c809-43fc-8276-b0a16a92858c,3e2f2ae1-c809-43fc-8276-b0a16a92858c,0,1,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,0,1,1a7c7427-bead-4655-9dd6-df6e722663c5,1a7c7427-bead-4655-9dd6-df6e722663c5,0,1,3ad08f4a-6202-4099-b6cc-bc116e6731a0,3ad08f4a-6202-4099-b6cc-bc116e6731a0,0,1,fd96c8ab-602a-4735-b168-52b501e80351,fd96c8ab-602a-4735-b168-52b501e80351,0,1,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,0,1,370f0c75-d2c5-4be5-a633-4bcc77998ece,370f0c75-d2c5-4be5-a633-4bcc77998ece,0,1,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,0,1,2139532c-f6cb-4393-936e-cc912e5adca9,2139532c-f6cb-4393-936e-cc912e5adca9,0,1,755c3eca-4956-4a44-9b38-c11dae00b87f,755c3eca-4956-4a44-9b38-c11dae00b87f,0,1,f57c558c-2c94-4b9d-8697-448d0548ab1a,f57c558c-2c94-4b9d-8697-448d0548ab1a,0,1,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,0,1,c32db021-eca1-4b67-aa85-3d6e28c51b53,c32db021-eca1-4b67-aa85-3d6e28c51b53,0,1,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,0,1,02466dcf-02a1-4853-814f-a913a9baba45,02466dcf-02a1-4853-814f-a913a9baba45,0,1,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,0,1,62b75eb2-42e1-4484-a77f-b676dd36f3d4,62b75eb2-42e1-4484-a77f-b676dd36f3d4,0,1,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,0,1,856510ee-74f5-44e9-a3c0-1c60cfb7a787,856510ee-74f5-44e9-a3c0-1c60cfb7a787,0,1,28b761c6-c286-4125-a4ed-da602e49950f,28b761c6-c286-4125-a4ed-da602e49950f,0,1,4ac66a22-c736-4e06-a8aa-ef4a71788c65,4ac66a22-c736-4e06-a8aa-ef4a71788c65,0,1,9cfe9281-8840-4077-824d-a2c9cbb0b730,9cfe9281-8840-4077-824d-a2c9cbb0b730,0,1,76389fa9-b9e0-492e-9c93-24b5f3bf094c,76389fa9-b9e0-492e-9c93-24b5f3bf094c,0,1,23e3de37-9315-45e6-bbfd-60aae28c25ae,23e3de37-9315-45e6-bbfd-60aae28c25ae,0,1,a9957f43-8b6f-4d98-a2d8-77b78047494c,a9957f43-8b6f-4d98-a2d8-77b78047494c,0,1,e470e15d-1b06-43cb-a9f9-ba489e2f596f,e470e15d-1b06-43cb-a9f9-ba489e2f596f,0,1,0408002c-9255-43a2-8022-82f02ee0e8f4,0408002c-9255-43a2-8022-82f02ee0e8f4,0,1,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,0,1,1851afd4-5324-45c1-b754-54e65943f945,1851afd4-5324-45c1-b754-54e65943f945,0,1,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,0,1,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,0,1,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,0,1,c322dc4a-30f3-4d23-9824-4a01c496408d,c322dc4a-30f3-4d23-9824-4a01c496408d,0,1,dcff004c-1b61-4a19-b977-ea21bf688614,dcff004c-1b61-4a19-b977-ea21bf688614,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1} \ No newline at end of file +{6,1,1,85623abb-f035-4d4f-b26b-56521d4d7cb0,1,84aaccfd-95b8-4a8d-a8d0-664406002357,"2.3.2.195","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",5209,1,0,bc2f8f73-f89c-4157-ac0e-abb0813b074b,bc2f8f73-f89c-4157-ac0e-abb0813b074b,1,0,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,1,0,9233322b-dfdb-4c66-91fe-1299292d40a5,9233322b-dfdb-4c66-91fe-1299292d40a5,1,0,0421b67e-ed26-491d-ab98-ec59002ed4ce,0421b67e-ed26-491d-ab98-ec59002ed4ce,1,0,bb47ced2-31f9-4870-8633-20b986e53ccc,bb47ced2-31f9-4870-8633-20b986e53ccc,1,0,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,1,0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,739c01a9-1125-45ef-ab4e-8c73af4eeff0,1,0,cdbd26b1-9583-46e8-adf7-8cc705639892,cdbd26b1-9583-46e8-adf7-8cc705639892,1,0,c0e38c3e-7088-4e35-9d84-2d0ab9655402,c0e38c3e-7088-4e35-9d84-2d0ab9655402,1,0,1098786f-dd24-4cce-b212-be0cb5f01735,1098786f-dd24-4cce-b212-be0cb5f01735,1,0,3c0037f3-4422-4836-b116-8c72e32bdd55,3c0037f3-4422-4836-b116-8c72e32bdd55,1,0,6f7c6c31-206b-4010-bdad-1ad2e304f154,6f7c6c31-206b-4010-bdad-1ad2e304f154,1,0,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,a8659e53-8c6b-4b0c-9736-fe93a91e4d69,1,0,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,fe9a1d1a-19c0-499f-8e1b-09cadabe882f,1,0,b4629308-42de-4ce8-8591-cf0c2399a9a2,b4629308-42de-4ce8-8591-cf0c2399a9a2,1,0,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,c7e984ae-1dbb-4041-b18a-bfd0d63a002f,1,0,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,bb0424b8-dfd1-4a27-bd66-9dea3ffc77c4,1,0,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,a4ac0a50-ee39-4dc1-b84f-eec8fe485f03,1,0,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1861ee4f-fd8c-4afa-8441-c074bf51f67e,1,0,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,de7ed8f7-3c02-47e0-aea8-4747ac68a5d5,1,0,b93b8760-6200-40ee-8bdc-875ba80a6155,b93b8760-6200-40ee-8bdc-875ba80a6155,1,0,e8b248d9-9049-456a-9c7d-7a0462cc67ab,e8b248d9-9049-456a-9c7d-7a0462cc67ab,1,0,d4562287-440d-4462-9de2-7097ccbf3764,d4562287-440d-4462-9de2-7097ccbf3764,1,0,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,bf9ca98c-5c95-4cfb-9181-8c1d847f9fbb,1,0,ec797c75-02c5-4cf5-9dd4-26cd46c99519,ec797c75-02c5-4cf5-9dd4-26cd46c99519,1,0,6fccdf59-fc99-4a2b-a144-fffe438a147c,6fccdf59-fc99-4a2b-a144-fffe438a147c,1,0,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,af8bd73a-d8e8-487d-8f36-d835ab10ea3a,1,0,da9b32e6-5b93-45a6-84b2-238d57541e18,da9b32e6-5b93-45a6-84b2-238d57541e18,1,0,e43d69c8-b284-47da-b236-611bc94a15b6,e43d69c8-b284-47da-b236-611bc94a15b6,1,0,31eeaa05-6c49-41fe-b840-1edbad4ccac7,31eeaa05-6c49-41fe-b840-1edbad4ccac7,1,0,842c8662-8f39-405e-9665-cbdabc116159,842c8662-8f39-405e-9665-cbdabc116159,1,0,fca4b033-02c4-4d61-9e51-87783c3cef1a,fca4b033-02c4-4d61-9e51-87783c3cef1a,1,0,396ef757-d7f6-411f-8c4c-1acb1106a009,396ef757-d7f6-411f-8c4c-1acb1106a009,1,0,cb8da2f3-f8bb-4736-8381-7c153670e3e2,cb8da2f3-f8bb-4736-8381-7c153670e3e2,1,0,9aecf4f5-46ed-4d1c-a584-cd028e467895,9aecf4f5-46ed-4d1c-a584-cd028e467895,1,0,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,a1c379be-43d3-4e02-83bb-d2e7de2d4ae3,1,0,a1f10624-22e9-4a04-b370-fd085bdd0f67,a1f10624-22e9-4a04-b370-fd085bdd0f67,1,0,3cffb795-2a28-4beb-92f4-5813f5994022,3cffb795-2a28-4beb-92f4-5813f5994022,1,0,3323ca68-1382-4710-a933-23fc56588935,3323ca68-1382-4710-a933-23fc56588935,1,0,d6b12775-3255-42b8-88b2-62684f873e7d,d6b12775-3255-42b8-88b2-62684f873e7d,1,0,cc23d903-ccc5-42f4-862f-5e7278c4e346,cc23d903-ccc5-42f4-862f-5e7278c4e346,1,0,98f033e0-fa40-46e0-b51a-87a066749a35,98f033e0-fa40-46e0-b51a-87a066749a35,1,0,c53df2d1-4564-47a7-b66e-6a23ba28270e,c53df2d1-4564-47a7-b66e-6a23ba28270e,1,0,e8b4cb2d-1180-4101-954a-4cb5464f198c,e8b4cb2d-1180-4101-954a-4cb5464f198c,1,0,f765c4ba-c677-42ac-8d0c-43bb485405b9,f765c4ba-c677-42ac-8d0c-43bb485405b9,1,0,83192b3e-e7a9-4595-8887-24cda84457a9,83192b3e-e7a9-4595-8887-24cda84457a9,1,0,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,1,0,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,c8a4c5da-bc88-4f6e-9787-1c22c2f41be7,1,0,08eeb8f1-944f-4450-83f6-ef20aaab7d86,08eeb8f1-944f-4450-83f6-ef20aaab7d86,1,0,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,8d77dd4a-e646-4105-8dcf-8ce8fc3da0b4,1,0,2fd12dba-5311-4f31-949c-f6b15decc0cc,2fd12dba-5311-4f31-949c-f6b15decc0cc,1,0,d7cf3981-cf63-4a21-868b-8175a7704a8f,d7cf3981-cf63-4a21-868b-8175a7704a8f,1,0,35895e12-52b6-49a1-acdf-6d828a948af0,35895e12-52b6-49a1-acdf-6d828a948af0,1,0,0ae93712-74e8-41c7-8f2d-4dfc8983697d,0ae93712-74e8-41c7-8f2d-4dfc8983697d,1,0,060b6f18-538c-4ea1-9748-00efe0b1ab57,060b6f18-538c-4ea1-9748-00efe0b1ab57,1,0,307b6821-fd82-4a1c-9fdb-a26293d4f713,307b6821-fd82-4a1c-9fdb-a26293d4f713,1,0,a952960b-be1b-4ec4-bd76-80915065a60b,a952960b-be1b-4ec4-bd76-80915065a60b,1,0,64f548c8-c1fc-434e-b3ee-5be367ead1db,64f548c8-c1fc-434e-b3ee-5be367ead1db,1,0,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,9e4dfdfa-ec05-4c9e-89bd-fc24f60f2678,1,0,ede5b7c8-42cd-4f79-90d2-b518e96d6b26,ede5b7c8-42cd-4f79-90d2-b518e96d6b26,1,0,cd592a5d-b184-4558-8a28-7079ccf28b89,cd592a5d-b184-4558-8a28-7079ccf28b89,1,0,2009c673-c1a5-45fc-8da2-a36c435085a6,2009c673-c1a5-45fc-8da2-a36c435085a6,1,0,ab7e5f9a-1dfe-4165-a540-21f45ae1d94d,ab7e5f9a-1dfe-4165-a540-21f45ae1d94d,1,0,5d16e042-3889-4851-86f1-bc43bf06ee88,5d16e042-3889-4851-86f1-bc43bf06ee88,1,0,e5a0e7c2-6186-43a3-a1c5-1f16990602a4,e5a0e7c2-6186-43a3-a1c5-1f16990602a4,1,0,3d47838b-e1aa-4acb-96bf-6de2f9be8bdb,3d47838b-e1aa-4acb-96bf-6de2f9be8bdb,1,0,e0d3efe0-a321-4790-ba5d-e549a91a3ec6,e0d3efe0-a321-4790-ba5d-e549a91a3ec6,1,0,e39ecc8a-ce81-483d-85de-b0488c8b7749,e39ecc8a-ce81-483d-85de-b0488c8b7749,1,0,8f3b124f-bf85-4307-8f0c-47be1fb5c8b0,8f3b124f-bf85-4307-8f0c-47be1fb5c8b0,1,0,e15c3525-3453-4b62-834e-7c69f9efea51,e15c3525-3453-4b62-834e-7c69f9efea51,1,0,1514eaff-faea-4d82-9465-d0d5292bb31d,1514eaff-faea-4d82-9465-d0d5292bb31d,1,0,6d39c6df-8cd4-47ad-9125-252b37d94575,6d39c6df-8cd4-47ad-9125-252b37d94575,1,0,739bd762-01fc-41a8-87df-844eb201962f,739bd762-01fc-41a8-87df-844eb201962f,1,0,ad73f3a3-1dad-4920-af41-bda2b947a2f7,ad73f3a3-1dad-4920-af41-bda2b947a2f7,1,0,ad7c6165-2e44-4808-a77a-526882cf5dea,ad7c6165-2e44-4808-a77a-526882cf5dea,1,0,b7e435a9-6107-4d02-a949-cff793462e31,b7e435a9-6107-4d02-a949-cff793462e31,1,0,f0cda8f5-56f5-423b-8c1c-7113433ebf25,f0cda8f5-56f5-423b-8c1c-7113433ebf25,1,0,1a220e88-428b-4d85-926d-e572bf19997c,1a220e88-428b-4d85-926d-e572bf19997c,1,0,ca0d938b-244e-421f-9fa4-320784b9f416,ca0d938b-244e-421f-9fa4-320784b9f416,1,0,a108b11d-a489-4684-84ea-d5377c7394de,a108b11d-a489-4684-84ea-d5377c7394de,1,0,289a2d84-2477-4177-a6ef-507e2cadeea2,289a2d84-2477-4177-a6ef-507e2cadeea2,1,0,757b547b-b79c-459a-a64a-eef19a09a38f,757b547b-b79c-459a-a64a-eef19a09a38f,1,0,61cd6eab-6bab-4382-986e-4c7fc44f369b,61cd6eab-6bab-4382-986e-4c7fc44f369b,1,0,950f8fd5-fefa-4bfb-97a0-38d77ae830dc,950f8fd5-fefa-4bfb-97a0-38d77ae830dc,1,0,cbbe7903-842c-470e-a2d6-7928df8f13e9,cbbe7903-842c-470e-a2d6-7928df8f13e9,1,0,e02597c4-bf45-4bb6-931d-62d2244f6c58,e02597c4-bf45-4bb6-931d-62d2244f6c58,1,0,42544966-445d-41b8-b6a0-a52c64758232,42544966-445d-41b8-b6a0-a52c64758232,1,0,c3d88576-8720-41d7-9d91-919ea45523c5,c3d88576-8720-41d7-9d91-919ea45523c5,1,0,e2c90080-4ed1-4b01-bcb7-3501018d652c,e2c90080-4ed1-4b01-bcb7-3501018d652c,1,0,f997854c-1b48-4d7e-b094-2166745a918c,f997854c-1b48-4d7e-b094-2166745a918c,1,0,16cdc2b4-9ea6-477e-b1bb-dfc8fec65a8d,16cdc2b4-9ea6-477e-b1bb-dfc8fec65a8d,1,0,9a4619e0-e76b-4607-9b1a-fcc79bdd356b,9a4619e0-e76b-4607-9b1a-fcc79bdd356b,1,0,34ce3078-9d00-402e-a9a1-0d05a43ec238,34ce3078-9d00-402e-a9a1-0d05a43ec238,1,0,799944ac-e6ef-4480-9f8e-032c95d4e3fc,799944ac-e6ef-4480-9f8e-032c95d4e3fc,1,0,da280465-d43d-4513-943d-6f91bdc8cefa,da280465-d43d-4513-943d-6f91bdc8cefa,1,0,a92d8a5c-b595-4c6c-9f1d-5e85b1c996b4,a92d8a5c-b595-4c6c-9f1d-5e85b1c996b4,1,0,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,1,0,9eea8645-1ba7-4faf-9c29-868bf99964dd,9eea8645-1ba7-4faf-9c29-868bf99964dd,1,0,e07ac651-07b9-4664-95e8-f3f5a51ea6c8,e07ac651-07b9-4664-95e8-f3f5a51ea6c8,1,0,0c44fdea-7b81-45be-87f5-d64456a9d379,0c44fdea-7b81-45be-87f5-d64456a9d379,1,0,d09d6f21-cdd0-485e-bd2c-92092a1aefef,d09d6f21-cdd0-485e-bd2c-92092a1aefef,1,0,2fc92784-d7b0-4209-ba06-e54bed2f160f,2fc92784-d7b0-4209-ba06-e54bed2f160f,1,0,e5b8ea5c-1d08-4f0a-a8f6-358b41e2e9f2,e5b8ea5c-1d08-4f0a-a8f6-358b41e2e9f2,1,0,a4e4c91c-fd95-4369-98e3-51ffba79937b,a4e4c91c-fd95-4369-98e3-51ffba79937b,1,0,d343d4e4-d07f-48c3-9db1-774b0d6c1134,d343d4e4-d07f-48c3-9db1-774b0d6c1134,1,0,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,1,0,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,1,0,968588bb-ee60-4399-955a-3ec4228d3c40,968588bb-ee60-4399-955a-3ec4228d3c40,1,0,23dbb528-7ea8-44ae-a1f2-b7608118666e,23dbb528-7ea8-44ae-a1f2-b7608118666e,1,0,b9627855-6773-4a59-b7d3-f9e2e565cd9e,b9627855-6773-4a59-b7d3-f9e2e565cd9e,1,0,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,1,0,283ce432-3553-4de9-94a2-ca9a590437f5,283ce432-3553-4de9-94a2-ca9a590437f5,1,0,0da019ca-1fc7-4aff-8998-3ddcccf10872,0da019ca-1fc7-4aff-8998-3ddcccf10872,1,0,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,1,0,34b0e268-497d-44d4-b822-84909d0685aa,34b0e268-497d-44d4-b822-84909d0685aa,1,0,8961a859-2203-4678-ae1f-63e2474a787a,8961a859-2203-4678-ae1f-63e2474a787a,1,0,fe63db47-3ece-4518-b6a2-0b6499f60a61,fe63db47-3ece-4518-b6a2-0b6499f60a61,1,0,654523be-93d9-4faa-9a35-ce2fede13820,654523be-93d9-4faa-9a35-ce2fede13820,1,0,671afc3e-7589-49d8-95a5-1cf195c3b2f8,671afc3e-7589-49d8-95a5-1cf195c3b2f8,1,0,47accdc7-8fa0-4996-9305-c42b6ca12df9,47accdc7-8fa0-4996-9305-c42b6ca12df9,1,0,5abc496c-5745-4220-9fdc-bac092717871,5abc496c-5745-4220-9fdc-bac092717871,1,0,256981be-18fd-4d92-91f3-6d55bbe2181b,256981be-18fd-4d92-91f3-6d55bbe2181b,1,0,d6bcf961-b863-486e-9a88-c237ae84f7c3,d6bcf961-b863-486e-9a88-c237ae84f7c3,1,0,1d75bfa4-5698-4cbc-98cb-591509fcfde8,1d75bfa4-5698-4cbc-98cb-591509fcfde8,1,0,26eb08f7-6c62-459f-b1f5-363cc40cae46,26eb08f7-6c62-459f-b1f5-363cc40cae46,1,0,cdbc7f5c-dbf9-49cd-a940-95b37bc7b734,cdbc7f5c-dbf9-49cd-a940-95b37bc7b734,1,0,7b802612-3034-4413-9ee8-60e94ebed6d6,7b802612-3034-4413-9ee8-60e94ebed6d6,1,0,59420cb5-d903-4e2c-a9e1-bc5494168daf,59420cb5-d903-4e2c-a9e1-bc5494168daf,1,0,5a88f624-7b7e-43fe-8bc4-ae85d832a855,5a88f624-7b7e-43fe-8bc4-ae85d832a855,1,0,42e39ef7-268f-4053-b4e5-4bceab17d3e4,42e39ef7-268f-4053-b4e5-4bceab17d3e4,1,0,7df36398-7752-4f51-9978-1bcb4bcdd062,7df36398-7752-4f51-9978-1bcb4bcdd062,1,0,9fd55b7f-209b-4b74-99d6-965b8f6f2df9,9fd55b7f-209b-4b74-99d6-965b8f6f2df9,1,0,f818fde9-1b06-4507-a69f-4dcb0ce8cd7a,f818fde9-1b06-4507-a69f-4dcb0ce8cd7a,1,0,a6690ef1-b16a-4d58-bc31-a8089b2c00d8,a6690ef1-b16a-4d58-bc31-a8089b2c00d8,1,0,fce03f58-7f68-4d7c-a999-687667c1f03d,fce03f58-7f68-4d7c-a999-687667c1f03d,1,0,316f94ec-81ed-4b5c-aa9d-98d2cfe1c641,316f94ec-81ed-4b5c-aa9d-98d2cfe1c641,1,0,f4885af5-6ed6-40e8-81a5-0e9537f943d7,f4885af5-6ed6-40e8-81a5-0e9537f943d7,1,0,87472d14-0d8c-4813-8a3e-2721bbb26811,87472d14-0d8c-4813-8a3e-2721bbb26811,1,0,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,44cf6d0a-0a5b-4ca1-b91e-af61f40fb825,1,0,dcdf2b25-b024-4a89-b2c4-0a2ee43ef623,dcdf2b25-b024-4a89-b2c4-0a2ee43ef623,1,0,9200527c-b6b9-4962-9440-10449583e1e3,9200527c-b6b9-4962-9440-10449583e1e3,1,0,e8faa1a9-807a-4916-b3c5-76ba2199754c,e8faa1a9-807a-4916-b3c5-76ba2199754c,1,0,99b5c632-61fe-41f5-ac00-ea530633bf28,99b5c632-61fe-41f5-ac00-ea530633bf28,1,0,a3c9c4e7-d36a-4db1-bd95-a50886c4be60,a3c9c4e7-d36a-4db1-bd95-a50886c4be60,1,0,4c53f94e-d7e8-457c-b337-59d3b3c5bf24,4c53f94e-d7e8-457c-b337-59d3b3c5bf24,1,0,bd6d7dcd-421c-402e-b6b8-f6ce6b18c140,bd6d7dcd-421c-402e-b6b8-f6ce6b18c140,1,0,485911f7-a964-450d-82da-cab020836eb2,485911f7-a964-450d-82da-cab020836eb2,1,0,484003f5-a6df-48fb-a395-d0e0ebc8cc0d,484003f5-a6df-48fb-a395-d0e0ebc8cc0d,1,0,cedd0b47-07cb-4dae-86b5-31d396b693c7,cedd0b47-07cb-4dae-86b5-31d396b693c7,1,0,8b4614aa-c769-49f4-a281-a0ffb101abf1,8b4614aa-c769-49f4-a281-a0ffb101abf1,1,0,c08391e1-c4e3-42aa-8738-061031d0cb75,c08391e1-c4e3-42aa-8738-061031d0cb75,1,0,b7a0d00f-fbf3-41fe-b72f-c17e163264f9,b7a0d00f-fbf3-41fe-b72f-c17e163264f9,1,0,bf4c6723-e586-4643-9f03-9e672afea26f,bf4c6723-e586-4643-9f03-9e672afea26f,1,0,4c3a39e3-40ee-423b-91f0-14b60e045b40,4c3a39e3-40ee-423b-91f0-14b60e045b40,1,0,23204b0b-bf77-4f7c-9945-e73ad924ebb4,23204b0b-bf77-4f7c-9945-e73ad924ebb4,1,0,dd9d3586-775b-4d5b-ab2d-78db0870ecdd,dd9d3586-775b-4d5b-ab2d-78db0870ecdd,1,0,44c610c3-9c0b-4bf0-95d6-f17100d3e98d,44c610c3-9c0b-4bf0-95d6-f17100d3e98d,1,0,a54f2d41-a05e-4878-80c6-81ca2899fa4c,a54f2d41-a05e-4878-80c6-81ca2899fa4c,1,0,23a898d9-5bcb-4744-ab6c-97b17dc98f20,23a898d9-5bcb-4744-ab6c-97b17dc98f20,1,0,50a04251-ac9c-4a21-a37f-ebc9ac3ef233,50a04251-ac9c-4a21-a37f-ebc9ac3ef233,1,0,f8f56806-ed7e-4059-a0c8-940538c14c98,f8f56806-ed7e-4059-a0c8-940538c14c98,1,0,9ff9f92b-c509-48da-82ce-15b524a895d6,9ff9f92b-c509-48da-82ce-15b524a895d6,1,0,c8bf96c8-f359-4940-8e87-3d190371d6d3,c8bf96c8-f359-4940-8e87-3d190371d6d3,1,0,477f0b81-0eb1-4de1-8cb5-38f1e0823947,477f0b81-0eb1-4de1-8cb5-38f1e0823947,1,0,d914eaa9-ce85-4df7-a545-2d411ef915b0,d914eaa9-ce85-4df7-a545-2d411ef915b0,1,0,41881344-82b7-4904-9ab8-0207d9bcd0a9,41881344-82b7-4904-9ab8-0207d9bcd0a9,1,0,21032fa5-9426-40bd-91e4-ace1e4ceb013,21032fa5-9426-40bd-91e4-ace1e4ceb013,1,0,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,1,0,27a80757-c0fd-40c7-ad24-4c819c1ba72b,27a80757-c0fd-40c7-ad24-4c819c1ba72b,1,0,c573a29f-4c39-402d-8af4-e0fff80877f8,c573a29f-4c39-402d-8af4-e0fff80877f8,1,0,7fce9e49-e558-4760-9d95-dde6ac6c1e78,7fce9e49-e558-4760-9d95-dde6ac6c1e78,1,0,e5aba4a3-6056-4ef3-827c-d74283175393,e5aba4a3-6056-4ef3-827c-d74283175393,1,0,63039e62-7314-42ff-bdc6-c251f38b3827,63039e62-7314-42ff-bdc6-c251f38b3827,1,0,8a4b7aab-b602-4581-8fa4-fab66791f701,8a4b7aab-b602-4581-8fa4-fab66791f701,1,0,7c92c579-4651-4fe3-90dc-6c9b594b76f0,7c92c579-4651-4fe3-90dc-6c9b594b76f0,1,0,a2be2d7a-cca0-460f-a915-dadfb9cd588b,a2be2d7a-cca0-460f-a915-dadfb9cd588b,1,0,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,1,0,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,1,0,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,1,0,1f4408f5-460e-431b-9842-bc6875ccf0ae,1f4408f5-460e-431b-9842-bc6875ccf0ae,1,0,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,1,0,7bfc6163-a62f-45e8-9112-40a5d675ba4a,7bfc6163-a62f-45e8-9112-40a5d675ba4a,1,0,542ff510-0245-4a08-80ac-a9941c66ae93,542ff510-0245-4a08-80ac-a9941c66ae93,1,0,03297623-eaa2-4db0-bf1b-ce2076faf20a,03297623-eaa2-4db0-bf1b-ce2076faf20a,1,0,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,1,0,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,1,0,82a3802c-b6d6-4511-bd8b-eeec003afa33,82a3802c-b6d6-4511-bd8b-eeec003afa33,1,0,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,1,0,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,1,0,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,1,0,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,1,0,a755cb43-492d-4069-9b6a-29b92ebb5b0e,a755cb43-492d-4069-9b6a-29b92ebb5b0e,1,0,2782420a-65fe-4714-bc91-732c88ba5b14,2782420a-65fe-4714-bc91-732c88ba5b14,1,0,3d170774-bd17-45a2-9d8a-4af3dbabeec4,3d170774-bd17-45a2-9d8a-4af3dbabeec4,1,0,86d09107-f511-4148-b5d9-d97e92addfde,86d09107-f511-4148-b5d9-d97e92addfde,1,0,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,1,0,55b78834-3d90-4858-a6f7-e0368b1d8c41,55b78834-3d90-4858-a6f7-e0368b1d8c41,1,0,059b9a75-f53a-4518-a48a-afc72ab9ee36,059b9a75-f53a-4518-a48a-afc72ab9ee36,1,0,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,1,0,31e95872-97c7-49e3-bd1b-8df4de07014d,31e95872-97c7-49e3-bd1b-8df4de07014d,1,0,8b9be02b-cd1f-4231-a895-6c9be26348c2,8b9be02b-cd1f-4231-a895-6c9be26348c2,1,0,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,1,0,64e03321-33a4-424d-a101-90f1e0da4c2e,64e03321-33a4-424d-a101-90f1e0da4c2e,1,0,fa4f0b33-5253-4a5f-8121-feae3e1968a6,fa4f0b33-5253-4a5f-8121-feae3e1968a6,1,0,e0d21be2-91dc-4a04-9078-49420ddddcd5,e0d21be2-91dc-4a04-9078-49420ddddcd5,1,0,56c97764-7dba-42e0-8ba0-82712aca20e9,56c97764-7dba-42e0-8ba0-82712aca20e9,1,0,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,1,0,3f05dcf9-be52-42e1-b5ff-dea14d97a26f,3f05dcf9-be52-42e1-b5ff-dea14d97a26f,1,0,ea868745-71fc-483c-aa6e-f242c06c673f,ea868745-71fc-483c-aa6e-f242c06c673f,1,0,7f3c6269-ea41-492f-87b7-7eaaf712762e,7f3c6269-ea41-492f-87b7-7eaaf712762e,1,0,a5d037b0-c666-4179-9d6a-5f48c4a126a8,a5d037b0-c666-4179-9d6a-5f48c4a126a8,1,0,f0850411-4dee-4f1d-baec-7d6c96b10637,f0850411-4dee-4f1d-baec-7d6c96b10637,1,0,12f95031-b81f-4802-b2f3-6f70def90db0,12f95031-b81f-4802-b2f3-6f70def90db0,1,0,5732112a-f31d-41cd-9a7f-312a27395502,5732112a-f31d-41cd-9a7f-312a27395502,1,0,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,1,0,691f9902-6b95-4579-a3d9-3b2b5b548776,691f9902-6b95-4579-a3d9-3b2b5b548776,1,0,06fc381d-f27a-433c-95c3-e0981e01f22b,06fc381d-f27a-433c-95c3-e0981e01f22b,1,0,f646835e-61eb-4ebd-811e-dac5e70bd1b4,f646835e-61eb-4ebd-811e-dac5e70bd1b4,1,0,61b49c4c-3021-4868-834a-9137476ae169,61b49c4c-3021-4868-834a-9137476ae169,1,0,58911911-5192-45fe-87cf-c4a222a521a1,58911911-5192-45fe-87cf-c4a222a521a1,1,0,70067937-9f27-4442-b87b-6c4576ce1b78,70067937-9f27-4442-b87b-6c4576ce1b78,1,0,115d5d06-a2fc-453e-aab5-c869b6d5850b,115d5d06-a2fc-453e-aab5-c869b6d5850b,1,0,d33ca006-d81d-4ef8-8503-7878e81c599f,d33ca006-d81d-4ef8-8503-7878e81c599f,1,0,123bb339-b95e-44c3-b1e9-482dcaa6f297,123bb339-b95e-44c3-b1e9-482dcaa6f297,1,0,f4119605-beb3-46b6-b372-ecdb74f10a33,f4119605-beb3-46b6-b372-ecdb74f10a33,1,0,d2a2e332-a52c-4277-bd19-5ea8ef198469,d2a2e332-a52c-4277-bd19-5ea8ef198469,1,0,e440c594-14bb-4a6e-af53-a4519c7d5548,e440c594-14bb-4a6e-af53-a4519c7d5548,1,0,4165bdaa-8e27-40de-bcdc-0379c34e8868,4165bdaa-8e27-40de-bcdc-0379c34e8868,1,0,a9a3fde2-99d5-4ebf-88b1-eccd9d74276e,a9a3fde2-99d5-4ebf-88b1-eccd9d74276e,1,0,e606f8eb-952a-4abb-b1ae-4211204bed84,e606f8eb-952a-4abb-b1ae-4211204bed84,1,0,7ddc3d13-fa6f-4fa9-870e-a34d5b2d9582,7ddc3d13-fa6f-4fa9-870e-a34d5b2d9582,1,0,1c2ad932-150a-4b15-b958-62eaa8a1eebc,1c2ad932-150a-4b15-b958-62eaa8a1eebc,1,0,b4deaebf-2c21-47d7-9436-10c94c94667c,b4deaebf-2c21-47d7-9436-10c94c94667c,1,0,2a12ce95-3214-4bd2-a0e6-c2af41875821,2a12ce95-3214-4bd2-a0e6-c2af41875821,1,0,bf05548c-babf-402b-b698-9a62e7c69add,bf05548c-babf-402b-b698-9a62e7c69add,1,0,f8295f29-2533-4013-981b-240f017d9f7c,f8295f29-2533-4013-981b-240f017d9f7c,1,0,538b316b-3876-4da6-8b97-ad8ef59de17d,538b316b-3876-4da6-8b97-ad8ef59de17d,1,0,f70f09fd-59e1-47b6-aaf3-cb4cc4ceaa7e,f70f09fd-59e1-47b6-aaf3-cb4cc4ceaa7e,1,0,ebc5f182-482b-4dec-9961-ce3a448abd0e,ebc5f182-482b-4dec-9961-ce3a448abd0e,1,0,83e618f5-1bf4-474a-9d65-389f1e4b16c3,83e618f5-1bf4-474a-9d65-389f1e4b16c3,1,0,1357512e-3ed3-455d-bc91-81db3b92f9fe,1357512e-3ed3-455d-bc91-81db3b92f9fe,1,0,82223d0f-41d9-45a6-9612-ae4d8408fa1b,82223d0f-41d9-45a6-9612-ae4d8408fa1b,1,0,3ee058a9-aff5-46f0-8928-8a417e7800d4,3ee058a9-aff5-46f0-8928-8a417e7800d4,1,0,c9a03f19-42bb-4e07-8ce8-1b954e431ada,c9a03f19-42bb-4e07-8ce8-1b954e431ada,1,0,ed4edc6f-048a-40d5-8f61-989895c95cf3,ed4edc6f-048a-40d5-8f61-989895c95cf3,1,0,dc17d8b6-d277-43eb-8823-71d440ae1e90,dc17d8b6-d277-43eb-8823-71d440ae1e90,1,0,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,1,0,2465986e-7519-4638-9f62-5f692bebeeac,2465986e-7519-4638-9f62-5f692bebeeac,1,0,66e24df5-f443-47c0-b0ad-97d00d6761c7,66e24df5-f443-47c0-b0ad-97d00d6761c7,1,0,d9a6706e-3dcd-4aec-b9d1-542330ba6e2e,d9a6706e-3dcd-4aec-b9d1-542330ba6e2e,1,0,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,1,0,cc770616-f6f6-4054-876c-f319b1f8c6cf,cc770616-f6f6-4054-876c-f319b1f8c6cf,1,0,3baffdec-a2cb-48c9-9c21-4fc469e81e3b,3baffdec-a2cb-48c9-9c21-4fc469e81e3b,1,0,8486e623-1a54-4ad9-ab44-591b6a559bc3,8486e623-1a54-4ad9-ab44-591b6a559bc3,1,0,dce82d28-9a7b-4d4c-af13-90f459cf4af2,dce82d28-9a7b-4d4c-af13-90f459cf4af2,1,0,cb9f2231-49bb-4b14-a124-8996628afead,cb9f2231-49bb-4b14-a124-8996628afead,1,0,6fe9a455-7fef-4a1b-8109-57eafc17e2b6,6fe9a455-7fef-4a1b-8109-57eafc17e2b6,1,0,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,1,0,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,1,0,896de79f-3c34-4436-a4e2-4dd4f45c3e20,896de79f-3c34-4436-a4e2-4dd4f45c3e20,1,0,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,1,0,e6c42b5d-57fd-42ce-a968-653620e797f6,e6c42b5d-57fd-42ce-a968-653620e797f6,1,0,724fb328-fec6-4afe-bc99-0ff0951b184b,724fb328-fec6-4afe-bc99-0ff0951b184b,1,0,7a0cdc94-9e53-4fcc-ac2f-97ad2ad939f5,7a0cdc94-9e53-4fcc-ac2f-97ad2ad939f5,1,0,f6259a3b-98f5-4649-8fd0-da0a0285f375,f6259a3b-98f5-4649-8fd0-da0a0285f375,1,0,c565bf25-c55e-4324-851a-cec497f5114a,c565bf25-c55e-4324-851a-cec497f5114a,1,0,2997e4da-d831-48e4-96e2-c29f9d077302,2997e4da-d831-48e4-96e2-c29f9d077302,1,0,30f59002-a23d-4eff-b84f-f280f11b220e,30f59002-a23d-4eff-b84f-f280f11b220e,1,0,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,1,0,5b0e250c-4d2d-4e37-ade1-593854610d3f,5b0e250c-4d2d-4e37-ade1-593854610d3f,1,0,14583452-805e-423d-be9a-e04683c7c46f,14583452-805e-423d-be9a-e04683c7c46f,1,0,148f63d5-23ad-4824-a24c-14d5a54c62d3,148f63d5-23ad-4824-a24c-14d5a54c62d3,1,0,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,1,0,eabfa8b7-fb65-43dd-9308-787f7cce88c9,eabfa8b7-fb65-43dd-9308-787f7cce88c9,1,0,4bf12710-aef2-43ec-b16f-9c6c9e8eb18d,4bf12710-aef2-43ec-b16f-9c6c9e8eb18d,1,0,b1e837ff-0edd-4525-b2e2-92cc7990e00e,b1e837ff-0edd-4525-b2e2-92cc7990e00e,1,0,30213cef-b2bc-4e6c-8094-74a61f28b2ed,30213cef-b2bc-4e6c-8094-74a61f28b2ed,1,0,037fd2f3-27f1-4d8f-a621-82fa5754e8c7,037fd2f3-27f1-4d8f-a621-82fa5754e8c7,1,0,8c72f824-b667-4d74-84aa-30eccfbbd2f0,8c72f824-b667-4d74-84aa-30eccfbbd2f0,1,0,ceb286e9-4e7c-49fa-a695-424073e0dffc,ceb286e9-4e7c-49fa-a695-424073e0dffc,1,0,727689c3-c0d8-496f-a47b-4f3243ad8974,727689c3-c0d8-496f-a47b-4f3243ad8974,1,0,057aadbd-f41f-4de4-95f4-9301557e6a0e,057aadbd-f41f-4de4-95f4-9301557e6a0e,1,0,ec7b492d-5d38-4f31-90e0-577ad181514e,ec7b492d-5d38-4f31-90e0-577ad181514e,1,0,f0f9cf2c-bbf9-4511-a1ab-3941c15310eb,f0f9cf2c-bbf9-4511-a1ab-3941c15310eb,1,0,da0686ce-25e2-4d2c-b152-283f5e4cf4b1,da0686ce-25e2-4d2c-b152-283f5e4cf4b1,1,0,4807629d-8421-4bd9-beb4-5b2940197958,4807629d-8421-4bd9-beb4-5b2940197958,1,0,4bad7c64-131a-42cb-9be7-d61f14f456d0,4bad7c64-131a-42cb-9be7-d61f14f456d0,1,0,d46e141b-7a10-4d65-971f-3a35f2114017,d46e141b-7a10-4d65-971f-3a35f2114017,1,0,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,1,0,766c7fb5-727e-4975-9ea1-3b0df4739620,766c7fb5-727e-4975-9ea1-3b0df4739620,1,0,ba59393c-c499-4999-91d4-b9e34d94db0e,ba59393c-c499-4999-91d4-b9e34d94db0e,1,0,626da0dd-d75b-4779-be1f-9b71d2f2d4e1,626da0dd-d75b-4779-be1f-9b71d2f2d4e1,1,0,1d4b7f71-6c72-4f41-a2ed-1f2fe2122c04,1d4b7f71-6c72-4f41-a2ed-1f2fe2122c04,1,0,fcf6a4cd-d0c9-4f83-b9b0-514baed3ccb9,fcf6a4cd-d0c9-4f83-b9b0-514baed3ccb9,1,0,3f92cffe-b4ea-45e3-b2b9-a9e316405a8c,3f92cffe-b4ea-45e3-b2b9-a9e316405a8c,1,0,e70a6eab-791f-4c70-bb92-f069c7486d1b,e70a6eab-791f-4c70-bb92-f069c7486d1b,1,0,f74f97b7-4cbf-4124-b441-d8bb5d9b1634,f74f97b7-4cbf-4124-b441-d8bb5d9b1634,1,0,a3a9a48b-f241-45b2-b93b-d34bba0a8a66,a3a9a48b-f241-45b2-b93b-d34bba0a8a66,1,0,ba5574bd-53ca-413f-a245-272f468a80fb,ba5574bd-53ca-413f-a245-272f468a80fb,1,0,772e7011-0019-4edc-b673-b7151cf4fa6c,772e7011-0019-4edc-b673-b7151cf4fa6c,1,0,21ac47fa-12c2-43e2-9b57-afdf521d3485,21ac47fa-12c2-43e2-9b57-afdf521d3485,1,0,f58bffe7-4a02-4c4e-bfed-7895177a400c,f58bffe7-4a02-4c4e-bfed-7895177a400c,1,0,fe285122-2257-4fb2-ab7e-1683c31db1c6,fe285122-2257-4fb2-ab7e-1683c31db1c6,1,0,0facc6eb-a178-45ee-a6bc-4bf085d80453,0facc6eb-a178-45ee-a6bc-4bf085d80453,1,0,f74eef36-9441-4b6f-b21c-de9643832f9f,f74eef36-9441-4b6f-b21c-de9643832f9f,1,0,8d1c44d7-52f2-4089-9d77-2f03bf051455,8d1c44d7-52f2-4089-9d77-2f03bf051455,1,0,ac2e5217-aaeb-4b6f-b063-538c84f2da06,ac2e5217-aaeb-4b6f-b063-538c84f2da06,1,0,b5e73fbe-499c-4666-a482-0ef399c97c1e,b5e73fbe-499c-4666-a482-0ef399c97c1e,1,0,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,1,0,4ac77dea-3c2b-4566-8857-ba99f7b025c9,4ac77dea-3c2b-4566-8857-ba99f7b025c9,1,0,8e87da88-9fa8-4dd8-b904-622b763239f4,8e87da88-9fa8-4dd8-b904-622b763239f4,1,0,09fec67d-6e45-428c-b858-9ae20979676c,09fec67d-6e45-428c-b858-9ae20979676c,1,0,4875a235-bcc8-47eb-83e3-a66f0f690b97,4875a235-bcc8-47eb-83e3-a66f0f690b97,1,0,58ffc4d9-d711-4b68-905c-d2ac4f78b547,58ffc4d9-d711-4b68-905c-d2ac4f78b547,1,0,114ab2a1-f7c3-4453-a6cc-4c5a23c00cb5,114ab2a1-f7c3-4453-a6cc-4c5a23c00cb5,1,0,93c347d8-66cb-406c-9ee6-b1962482893f,93c347d8-66cb-406c-9ee6-b1962482893f,1,0,94ab750f-46b4-427c-a7f2-4e94fb9b0678,94ab750f-46b4-427c-a7f2-4e94fb9b0678,1,0,397d9926-31a3-4c03-acb7-74478f9863e1,397d9926-31a3-4c03-acb7-74478f9863e1,1,0,264dd12a-b4c5-44bf-b3c0-ef9225505f76,264dd12a-b4c5-44bf-b3c0-ef9225505f76,1,0,90b8fdf3-3e42-442f-a002-6a28ad0edc99,90b8fdf3-3e42-442f-a002-6a28ad0edc99,1,0,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,1,0,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,1,0,f595539d-bdd1-4e7a-8279-3bb8a9344f45,f595539d-bdd1-4e7a-8279-3bb8a9344f45,1,0,697bd1de-bbef-4362-aa39-71f6008f4bd7,697bd1de-bbef-4362-aa39-71f6008f4bd7,1,0,a3e9afe9-1587-47c7-8e7b-b8df6b3a2664,a3e9afe9-1587-47c7-8e7b-b8df6b3a2664,1,0,0e31d69a-8d2c-4ad0-b3ac-93ba5afcefdf,0e31d69a-8d2c-4ad0-b3ac-93ba5afcefdf,1,0,3de28e34-3c1e-4e7f-a720-3418c8c9c496,3de28e34-3c1e-4e7f-a720-3418c8c9c496,1,0,7f2d69b4-2f87-40f4-a78c-fe4cabc2a502,7f2d69b4-2f87-40f4-a78c-fe4cabc2a502,1,0,dacb236e-42a5-47e5-b239-ff18ae48e21e,dacb236e-42a5-47e5-b239-ff18ae48e21e,1,0,5cdb6e71-fd20-461a-83db-d59ccdb5b366,5cdb6e71-fd20-461a-83db-d59ccdb5b366,1,0,388b8576-9ba4-460f-b71b-3d644663656a,388b8576-9ba4-460f-b71b-3d644663656a,1,0,d4d38827-fce6-4c39-a4b4-51c7d7edc475,d4d38827-fce6-4c39-a4b4-51c7d7edc475,1,0,2d40609d-b56f-4082-9a6f-8216817ebd24,2d40609d-b56f-4082-9a6f-8216817ebd24,1,0,b238b4b2-beaf-4b5d-a728-8aebac3bacb5,b238b4b2-beaf-4b5d-a728-8aebac3bacb5,1,0,732b19c8-4f22-4748-a796-71538e46fc2f,732b19c8-4f22-4748-a796-71538e46fc2f,1,0,9fb2169b-fc77-4a3f-a1d8-b939079d9d9d,9fb2169b-fc77-4a3f-a1d8-b939079d9d9d,1,0,3fe0ef25-ce56-435d-b343-eadfec91a636,3fe0ef25-ce56-435d-b343-eadfec91a636,1,0,74f02619-7fa8-4c6d-81d6-230156ee45f4,74f02619-7fa8-4c6d-81d6-230156ee45f4,1,0,62ef3558-5ad3-44ab-8578-1acbbfa54135,62ef3558-5ad3-44ab-8578-1acbbfa54135,1,0,a103cca0-8243-40e9-bcdd-97a1cc8a3943,a103cca0-8243-40e9-bcdd-97a1cc8a3943,1,0,c3572d8d-46ff-40bb-800c-2c07f884c219,c3572d8d-46ff-40bb-800c-2c07f884c219,1,0,80fd89d7-160d-4528-9aa0-05b8dac64b4c,80fd89d7-160d-4528-9aa0-05b8dac64b4c,1,0,4eb24fcd-85f6-4fa6-bc9f-baef3861664e,4eb24fcd-85f6-4fa6-bc9f-baef3861664e,1,0,da551cf6-4f86-4e37-8967-a84c80e1fb13,da551cf6-4f86-4e37-8967-a84c80e1fb13,1,0,5fb2c120-fd14-4e78-a35f-c8e9478b3235,5fb2c120-fd14-4e78-a35f-c8e9478b3235,1,0,9d514ce1-f9bd-4018-8107-545cdd372fbd,9d514ce1-f9bd-4018-8107-545cdd372fbd,1,0,fe6b732f-3a33-460f-9686-cffdd5f7d99b,fe6b732f-3a33-460f-9686-cffdd5f7d99b,1,0,06250212-aeb1-4cb8-8785-ea71b1dad848,06250212-aeb1-4cb8-8785-ea71b1dad848,1,0,0c068a61-e5e6-4475-96fa-b7c1d825da42,0c068a61-e5e6-4475-96fa-b7c1d825da42,1,0,1047e34d-397a-42cc-80e6-1be755bd6462,1047e34d-397a-42cc-80e6-1be755bd6462,1,0,1cd473c3-4e36-47a9-b466-73d86ec244b0,1cd473c3-4e36-47a9-b466-73d86ec244b0,1,0,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,1,0,b406b5f9-eeaf-43a0-8930-067554d783c9,b406b5f9-eeaf-43a0-8930-067554d783c9,1,0,47718840-2939-4e30-a72c-a20c88ac4c17,47718840-2939-4e30-a72c-a20c88ac4c17,1,0,58a38994-9fe4-4783-967d-79d1141b90f3,58a38994-9fe4-4783-967d-79d1141b90f3,1,0,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,1,0,7c2e35a8-d05d-4e52-baee-a1e13585c502,7c2e35a8-d05d-4e52-baee-a1e13585c502,1,0,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,1,0,ab5b0155-a4b1-47a1-ad87-12365dde20c1,ab5b0155-a4b1-47a1-ad87-12365dde20c1,1,0,f551f78a-2f05-4932-ac33-cfa1b077f46f,f551f78a-2f05-4932-ac33-cfa1b077f46f,1,0,a96091a7-d3a5-4893-8440-f360231bf468,a96091a7-d3a5-4893-8440-f360231bf468,1,0,9ce6eef0-5280-4374-9714-474ac571e4e2,9ce6eef0-5280-4374-9714-474ac571e4e2,1,0,aeb54e92-a1d0-46a1-b4cb-87d3c29fa30b,aeb54e92-a1d0-46a1-b4cb-87d3c29fa30b,1,0,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,1,0,672c4741-6d7b-4d3e-baa7-389bef0625d7,672c4741-6d7b-4d3e-baa7-389bef0625d7,1,0,04398ec0-1c13-43f8-8f5d-7b7619592a4d,04398ec0-1c13-43f8-8f5d-7b7619592a4d,1,0,ce463861-92df-47f2-bd0f-4a2dbf72aacc,ce463861-92df-47f2-bd0f-4a2dbf72aacc,1,0,eca79a64-3d00-4178-b4eb-cf5468622c96,eca79a64-3d00-4178-b4eb-cf5468622c96,1,0,1487d68c-7a2f-48cf-8c80-4074072ed52c,1487d68c-7a2f-48cf-8c80-4074072ed52c,1,0,6ed8c74c-6b6e-4ed1-95ff-a733f618b213,6ed8c74c-6b6e-4ed1-95ff-a733f618b213,1,0,d97c6536-fd62-4c9a-b83e-490a29a0721b,d97c6536-fd62-4c9a-b83e-490a29a0721b,1,0,60cd8bc4-6a5d-4d36-83d0-76a8477eda6a,60cd8bc4-6a5d-4d36-83d0-76a8477eda6a,1,0,6dc4c216-e49f-4833-b45f-6060b67995ef,6dc4c216-e49f-4833-b45f-6060b67995ef,1,0,4655fa12-9169-4d08-bdab-9b3174d0b223,4655fa12-9169-4d08-bdab-9b3174d0b223,1,0,6c07ddfb-8823-4953-9905-9550b847dc3f,6c07ddfb-8823-4953-9905-9550b847dc3f,1,0,2362a8d5-dca2-4527-acc0-63782377f28a,2362a8d5-dca2-4527-acc0-63782377f28a,1,0,dfd6d85c-a734-4458-83b0-87b5949f9c68,dfd6d85c-a734-4458-83b0-87b5949f9c68,1,0,4e3b0b9f-45b7-48a8-86c6-cc14a921aa78,4e3b0b9f-45b7-48a8-86c6-cc14a921aa78,1,0,79b6ecf5-8a6b-44a4-9587-5f8764463228,79b6ecf5-8a6b-44a4-9587-5f8764463228,1,0,cd49148c-e385-4b75-a758-a93196e73dba,cd49148c-e385-4b75-a758-a93196e73dba,1,0,ece15c4e-4a4b-421b-9f00-10f698da476b,ece15c4e-4a4b-421b-9f00-10f698da476b,1,0,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,1,0,300ecdd6-144f-48c8-9fd4-6166f1de1047,300ecdd6-144f-48c8-9fd4-6166f1de1047,1,0,b6bbfb59-8249-47af-9394-be262f118811,b6bbfb59-8249-47af-9394-be262f118811,1,0,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,1,0,fb63d488-fb91-4d08-8f8c-f4836538216f,fb63d488-fb91-4d08-8f8c-f4836538216f,1,0,b8be6c09-6880-45d3-a2d1-06ad72d069c9,b8be6c09-6880-45d3-a2d1-06ad72d069c9,1,0,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,1,0,148dd521-8754-451b-803b-cbee7c3d3965,148dd521-8754-451b-803b-cbee7c3d3965,1,0,38bc48c7-3938-47be-be3f-844f19561301,38bc48c7-3938-47be-be3f-844f19561301,1,0,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,1,0,147038fb-6154-41f3-aad6-547db27d1e43,147038fb-6154-41f3-aad6-547db27d1e43,1,0,832fa9d3-deab-4c57-b6e2-dee5d24d6100,832fa9d3-deab-4c57-b6e2-dee5d24d6100,1,0,dd4270ef-6b4c-491e-8871-959dbec14c53,dd4270ef-6b4c-491e-8871-959dbec14c53,1,0,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,1,0,8ccd9be8-ef26-49b9-8cee-03ae4e500386,8ccd9be8-ef26-49b9-8cee-03ae4e500386,1,0,ddca925c-fdcd-40ce-a504-4fca1758de3f,ddca925c-fdcd-40ce-a504-4fca1758de3f,1,0,f64de21f-5a7c-4a1a-a929-07fc53049f6c,f64de21f-5a7c-4a1a-a929-07fc53049f6c,1,0,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,1,0,ea653eca-f96a-447d-8b09-7a7cb6929ed6,ea653eca-f96a-447d-8b09-7a7cb6929ed6,1,0,ea07cd11-418c-4e4f-be9f-c160ee8a64e8,ea07cd11-418c-4e4f-be9f-c160ee8a64e8,1,0,5efc4bc4-b711-4620-8d2e-9d947c6cc141,5efc4bc4-b711-4620-8d2e-9d947c6cc141,1,0,ede6a379-b0e5-4b8d-a454-779c0fd8b0b3,ede6a379-b0e5-4b8d-a454-779c0fd8b0b3,1,0,1d8d0eed-caaa-494c-aeea-0df5846fc97a,1d8d0eed-caaa-494c-aeea-0df5846fc97a,1,0,6de9dab4-ee34-4584-a2e7-7a29c86794b0,6de9dab4-ee34-4584-a2e7-7a29c86794b0,1,0,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,1,0,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,1,0,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,1,0,2b72fe1c-afe1-4905-8db2-2bb1baca6295,2b72fe1c-afe1-4905-8db2-2bb1baca6295,1,0,aa8c4a71-3276-4b83-8be2-3528129e58b3,aa8c4a71-3276-4b83-8be2-3528129e58b3,1,0,4bc4c6db-0ef8-405f-8875-b4cb1540aeb5,4bc4c6db-0ef8-405f-8875-b4cb1540aeb5,1,0,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,1,0,e9a2441e-faf9-4158-acc7-b1a6178ae0f3,e9a2441e-faf9-4158-acc7-b1a6178ae0f3,1,0,ce5f5470-b704-4f55-8dc8-17cf2c2b367a,ce5f5470-b704-4f55-8dc8-17cf2c2b367a,1,0,0072986b-0463-4a39-9851-f9adeda99716,0072986b-0463-4a39-9851-f9adeda99716,1,0,fa44433b-1c44-45a0-9487-47aa092442cf,fa44433b-1c44-45a0-9487-47aa092442cf,1,0,041cecfd-cef2-45d9-90e8-afe0d97d2d95,041cecfd-cef2-45d9-90e8-afe0d97d2d95,1,0,0d4a26fb-7176-43f2-8767-d3e227c7306a,0d4a26fb-7176-43f2-8767-d3e227c7306a,1,0,7e4222fd-fb98-4ae5-9d98-d41c3d572a0c,7e4222fd-fb98-4ae5-9d98-d41c3d572a0c,1,0,d9d14a24-c023-4b69-ad57-30d1474e1232,d9d14a24-c023-4b69-ad57-30d1474e1232,1,0,b6e98aee-4936-491d-8c67-8490e1af2e34,b6e98aee-4936-491d-8c67-8490e1af2e34,1,0,b292eb46-df87-43c0-9a37-93c5a22af252,b292eb46-df87-43c0-9a37-93c5a22af252,1,0,0943dd00-1653-4760-a9fe-ebc083ffa660,0943dd00-1653-4760-a9fe-ebc083ffa660,1,0,4fb8564e-2338-4c23-84a4-31f768047ced,4fb8564e-2338-4c23-84a4-31f768047ced,1,0,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,1,0,f93c9a7f-0249-421e-b3d0-55f02d130017,f93c9a7f-0249-421e-b3d0-55f02d130017,1,0,062c507a-9d35-4eb5-bb91-d106a535a503,062c507a-9d35-4eb5-bb91-d106a535a503,1,0,ea1284f2-33f1-4e3d-b009-1ffad3aaf300,ea1284f2-33f1-4e3d-b009-1ffad3aaf300,1,0,fd317d96-380e-4ee7-a25b-401e8521cc7a,fd317d96-380e-4ee7-a25b-401e8521cc7a,1,0,3b380a63-9232-42c2-bfa2-e8fc89448bbd,3b380a63-9232-42c2-bfa2-e8fc89448bbd,1,0,e18b4527-8727-4a10-9e99-a80012debe6c,e18b4527-8727-4a10-9e99-a80012debe6c,1,0,1ed910db-e434-4efd-9b12-c25353a31d5a,1ed910db-e434-4efd-9b12-c25353a31d5a,1,0,10556a26-ea4b-46b4-84d1-175eb13b333f,10556a26-ea4b-46b4-84d1-175eb13b333f,1,0,f1e600b0-55ed-4611-b147-f04d5621796b,f1e600b0-55ed-4611-b147-f04d5621796b,1,0,e3b84128-95e1-45df-84db-5e1791779543,e3b84128-95e1-45df-84db-5e1791779543,1,0,76702e9e-fa7a-4b98-befa-f9b37db2dae0,76702e9e-fa7a-4b98-befa-f9b37db2dae0,1,0,101a4eb3-cdda-47af-8c69-615a6920347a,101a4eb3-cdda-47af-8c69-615a6920347a,1,0,cf19f220-f6d4-4c9e-b5d5-9d94234f0a2c,cf19f220-f6d4-4c9e-b5d5-9d94234f0a2c,1,0,e9d95895-8708-4035-89ad-72573b870491,e9d95895-8708-4035-89ad-72573b870491,1,0,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,1,0,f79bada2-838f-4e4f-a017-935cf671a70c,f79bada2-838f-4e4f-a017-935cf671a70c,1,0,312118ff-a2a4-479c-964a-5250cca0cd20,312118ff-a2a4-479c-964a-5250cca0cd20,1,0,f8d32d21-ea2f-42bb-a785-9bd3cf754cd9,f8d32d21-ea2f-42bb-a785-9bd3cf754cd9,1,0,3f3a0b1b-04ce-47c1-928d-5e3483e9fd73,3f3a0b1b-04ce-47c1-928d-5e3483e9fd73,1,0,8a310493-c06f-46db-b2b5-14d6ed203312,8a310493-c06f-46db-b2b5-14d6ed203312,1,0,caf8f0e8-7a2c-498b-9b74-ed6b87cce670,caf8f0e8-7a2c-498b-9b74-ed6b87cce670,1,0,b68ec95b-64f3-4a2b-9683-231d50f01eeb,b68ec95b-64f3-4a2b-9683-231d50f01eeb,1,0,89318397-b3a6-4468-985b-ed5cb8ab5cdb,89318397-b3a6-4468-985b-ed5cb8ab5cdb,1,0,5e5b0ad7-ef73-4a73-baf5-360a9244a1cc,5e5b0ad7-ef73-4a73-baf5-360a9244a1cc,1,0,4a008342-f72f-4ca1-bad1-64b59b509911,4a008342-f72f-4ca1-bad1-64b59b509911,1,0,4436b2cf-2d71-401f-99fd-012ff0c91fbd,4436b2cf-2d71-401f-99fd-012ff0c91fbd,1,0,cefa1723-a4d4-44c4-bd57-ffa713f9306c,cefa1723-a4d4-44c4-bd57-ffa713f9306c,1,0,5396be45-d7c0-43df-aed4-cad062a02b11,5396be45-d7c0-43df-aed4-cad062a02b11,1,0,017e3da8-e48e-488b-9bbf-4fef1a4f3417,017e3da8-e48e-488b-9bbf-4fef1a4f3417,1,0,4920aabf-6f53-4f91-932a-8ace24631a74,4920aabf-6f53-4f91-932a-8ace24631a74,1,0,ce7a7f72-9d7d-4240-b852-e83b4b8d944b,ce7a7f72-9d7d-4240-b852-e83b4b8d944b,1,0,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,1,0,bbec9c3d-31dd-484e-ab32-41ef845f1370,bbec9c3d-31dd-484e-ab32-41ef845f1370,1,0,8692ba41-d91d-4af0-8aba-69dd5409d593,8692ba41-d91d-4af0-8aba-69dd5409d593,1,0,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,da2b47f5-4109-4f72-a4a5-70be24a6881f,da2b47f5-4109-4f72-a4a5-70be24a6881f,1,0,f0152598-ffa3-4eb7-811f-906e569373e6,f0152598-ffa3-4eb7-811f-906e569373e6,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,38b48750-1411-493b-b18e-42d39312aad8,38b48750-1411-493b-b18e-42d39312aad8,1,0,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,1,0,5a741cf6-8160-4409-9396-2e6d1e67e6fa,5a741cf6-8160-4409-9396-2e6d1e67e6fa,1,0,8242daae-181a-47df-b28e-c1de3fce0359,8242daae-181a-47df-b28e-c1de3fce0359,1,0,5fbea8c7-48e3-4ed0-a8d0-cf942b37a166,5fbea8c7-48e3-4ed0-a8d0-cf942b37a166,1,0,d85ba2d1-63e9-4680-bd88-6c0c4dba5d0f,d85ba2d1-63e9-4680-bd88-6c0c4dba5d0f,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,cd74d617-8ebe-4a7d-b011-38c98d856d8c,cd74d617-8ebe-4a7d-b011-38c98d856d8c,1,0,f4cff4ff-68e9-4072-971e-1b359d3aa980,f4cff4ff-68e9-4072-971e-1b359d3aa980,1,0,f9a5bd40-7c56-4ced-bddb-a66c1fc31b81,f9a5bd40-7c56-4ced-bddb-a66c1fc31b81,1,0,fdb012c9-583a-42af-95da-070e75a58078,fdb012c9-583a-42af-95da-070e75a58078,1,0,40a52f83-f0e2-470d-9c17-7fdc8cc646b7,40a52f83-f0e2-470d-9c17-7fdc8cc646b7,1,0,7d069b11-cddd-463d-97be-3cbeaaf0954c,7d069b11-cddd-463d-97be-3cbeaaf0954c,1,0,8c5fae4c-b5b6-4e05-9453-4ac5de07c54c,8c5fae4c-b5b6-4e05-9453-4ac5de07c54c,1,0,7531fb7c-a4ae-42df-b8e5-d8bfcb66be52,7531fb7c-a4ae-42df-b8e5-d8bfcb66be52,1,0,d1b950b0-dd66-49f9-998e-3ae5e820ae7f,d1b950b0-dd66-49f9-998e-3ae5e820ae7f,1,0,57e39881-cbf9-4cac-9ed0-bf4a6ea667ee,57e39881-cbf9-4cac-9ed0-bf4a6ea667ee,1,0,b9004626-915c-44c8-9cb7-25e5b627ee83,b9004626-915c-44c8-9cb7-25e5b627ee83,1,0,63c6cfad-124d-491a-829d-b298463c95e6,63c6cfad-124d-491a-829d-b298463c95e6,1,0,737404de-5b9d-4445-81c5-2c5b50b36846,737404de-5b9d-4445-81c5-2c5b50b36846,1,0,1c1a5bf8-bbe6-4a69-973e-11445175dac2,1c1a5bf8-bbe6-4a69-973e-11445175dac2,1,0,f11ffcfd-3588-4785-b222-cebe80455303,f11ffcfd-3588-4785-b222-cebe80455303,1,0,789a2027-8601-434c-bf47-37696a3966ad,789a2027-8601-434c-bf47-37696a3966ad,1,0,5d216c28-0724-4e7d-86cf-b6f75e7e28b7,5d216c28-0724-4e7d-86cf-b6f75e7e28b7,1,0,bfdc6346-db5b-427f-acca-9b48db8fefd0,bfdc6346-db5b-427f-acca-9b48db8fefd0,1,0,1c3f258c-345e-47f6-9e29-98b1222fb348,1c3f258c-345e-47f6-9e29-98b1222fb348,1,0,dfafcdf3-cdeb-4822-9f41-a730d9d3fb24,dfafcdf3-cdeb-4822-9f41-a730d9d3fb24,1,0,4c3085e1-2f86-4af4-a392-ab45e30a7152,4c3085e1-2f86-4af4-a392-ab45e30a7152,1,0,35c938f4-065f-47f5-a75b-637ed0080725,35c938f4-065f-47f5-a75b-637ed0080725,1,0,e14c0841-226c-4c79-bec9-cfc8d2c3a160,e14c0841-226c-4c79-bec9-cfc8d2c3a160,1,0,73e4bce2-df4a-4f60-a369-55f588a46bd1,73e4bce2-df4a-4f60-a369-55f588a46bd1,1,0,6f3c5b90-b030-4267-a973-33d12c2c7680,6f3c5b90-b030-4267-a973-33d12c2c7680,1,0,1ff8210b-26c5-4429-b580-7c6ec7c9b63a,1ff8210b-26c5-4429-b580-7c6ec7c9b63a,1,0,c6af8b0f-3767-4198-88e2-f5763cb0294a,c6af8b0f-3767-4198-88e2-f5763cb0294a,1,0,b107a4a8-0db8-44f4-93f7-9f231e850398,b107a4a8-0db8-44f4-93f7-9f231e850398,1,0,88b879b7-1bb3-4478-b569-35bdb5c56939,88b879b7-1bb3-4478-b569-35bdb5c56939,1,0,7a62d031-c340-4b1e-90af-fff697a2e979,7a62d031-c340-4b1e-90af-fff697a2e979,1,0,18bf6916-83cc-41e5-a35b-1489450ae632,18bf6916-83cc-41e5-a35b-1489450ae632,1,0,ebab97cf-5335-4648-9845-8ca41f79fb49,ebab97cf-5335-4648-9845-8ca41f79fb49,1,0,bb29fa44-6772-4426-a0b8-422115e14288,bb29fa44-6772-4426-a0b8-422115e14288,1,0,904e1209-91d8-49b1-b291-364ef728cbbf,904e1209-91d8-49b1-b291-364ef728cbbf,1,0,1198f2ee-b8a8-456d-9461-61bc5d42c7a1,1198f2ee-b8a8-456d-9461-61bc5d42c7a1,1,0,b8ecb7f0-ef40-4d31-9ec2-a731439d3200,b8ecb7f0-ef40-4d31-9ec2-a731439d3200,1,0,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,1,0,b5365cb6-a4e7-479b-82f4-f4ad80fcd7c9,b5365cb6-a4e7-479b-82f4-f4ad80fcd7c9,1,0,e51ae56c-d311-46b7-8d4c-19a432f4cd16,e51ae56c-d311-46b7-8d4c-19a432f4cd16,1,0,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,e000d04e-37eb-4d95-a833-b0a9b10ee0b9,1,0,40d3ed07-3b56-4c9f-8b96-d94455202ef0,40d3ed07-3b56-4c9f-8b96-d94455202ef0,1,0,23314bcd-2dd4-43f1-9fdb-ae182a48c886,23314bcd-2dd4-43f1-9fdb-ae182a48c886,1,0,c5f86fa3-4a36-4e22-8b57-7088dd250cd3,c5f86fa3-4a36-4e22-8b57-7088dd250cd3,1,0,9440a132-366f-4fc9-bd72-2544ba2b072a,9440a132-366f-4fc9-bd72-2544ba2b072a,1,0,84282afa-21f5-40db-9386-e6f741c9a06c,84282afa-21f5-40db-9386-e6f741c9a06c,1,0,5b3b3da9-8619-4fbd-b140-3528875cd179,5b3b3da9-8619-4fbd-b140-3528875cd179,1,0,99e5e866-7ac6-4916-ab66-3e2909822c56,99e5e866-7ac6-4916-ab66-3e2909822c56,1,0,03363877-2752-4a03-95f2-d73b732e0bfd,03363877-2752-4a03-95f2-d73b732e0bfd,1,0,8d9d2284-e592-44c5-93bb-247037ab6b95,8d9d2284-e592-44c5-93bb-247037ab6b95,1,0,0b0d2b7c-d52e-4163-83cf-a7e86bb47c47,0b0d2b7c-d52e-4163-83cf-a7e86bb47c47,1,0,78051e10-74ab-44be-adca-e4c93824a386,78051e10-74ab-44be-adca-e4c93824a386,1,0,73629419-83d8-4727-88a9-76c851d104c9,73629419-83d8-4727-88a9-76c851d104c9,1,0,cadb54f0-dcff-4f96-983e-a309fd72f330,cadb54f0-dcff-4f96-983e-a309fd72f330,1,0,a9c3065b-db68-4f59-9235-33f9fbfdaafd,a9c3065b-db68-4f59-9235-33f9fbfdaafd,1,0,3715cf3d-0abc-4711-8ac9-d41f0be7878f,3715cf3d-0abc-4711-8ac9-d41f0be7878f,1,0,8e8d8078-8b32-4c24-b26e-89a92bf60160,8e8d8078-8b32-4c24-b26e-89a92bf60160,1,0,f96cbb27-7619-41e0-8577-e623ef02dc58,f96cbb27-7619-41e0-8577-e623ef02dc58,1,0,ed5ff5b0-f980-4b9a-9299-eef68e3b42d5,ed5ff5b0-f980-4b9a-9299-eef68e3b42d5,1,0,d74dfd31-2016-435b-8652-15fdbca59490,d74dfd31-2016-435b-8652-15fdbca59490,1,0,ba8111a9-1d33-4615-ad0b-b3e923b2f3bd,ba8111a9-1d33-4615-ad0b-b3e923b2f3bd,1,0,27651e0e-d560-434b-a49c-f473a5b20c4d,27651e0e-d560-434b-a49c-f473a5b20c4d,1,0,dab1491b-0685-442d-b945-2bfde3f37933,dab1491b-0685-442d-b945-2bfde3f37933,1,0,ce85554b-81ba-4149-a951-d09bdc14fa16,ce85554b-81ba-4149-a951-d09bdc14fa16,1,0,23a1ef35-1469-44ea-8535-fa9c7f535cae,23a1ef35-1469-44ea-8535-fa9c7f535cae,1,0,9ff1c73e-71be-4ea6-97fb-e710d995ee62,9ff1c73e-71be-4ea6-97fb-e710d995ee62,1,0,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,8c7d74bf-2865-47d9-8a16-5b0db1104a3a,1,0,2558d812-ac0a-49ba-87db-3f661209a3c4,2558d812-ac0a-49ba-87db-3f661209a3c4,1,0,20d712ef-77c1-4374-92e1-f20a3ebc7eab,20d712ef-77c1-4374-92e1-f20a3ebc7eab,1,0,65d23ce8-e326-45ee-86b0-6dcf35797201,65d23ce8-e326-45ee-86b0-6dcf35797201,1,0,a2683c3f-1b21-47d8-951d-7d30cde51efc,a2683c3f-1b21-47d8-951d-7d30cde51efc,1,0,54c77053-1728-4914-a354-73fe8853a0e1,54c77053-1728-4914-a354-73fe8853a0e1,1,0,21136691-078f-4bf7-bddd-f41416a76d86,21136691-078f-4bf7-bddd-f41416a76d86,1,0,30a121c7-c4f5-45c4-9504-9778ed85d9e3,30a121c7-c4f5-45c4-9504-9778ed85d9e3,1,0,c68e2157-2541-4f80-966a-d68ce603f131,c68e2157-2541-4f80-966a-d68ce603f131,1,0,e5dfee58-f748-48ee-81a3-7c6133f06365,e5dfee58-f748-48ee-81a3-7c6133f06365,1,0,68500931-89e0-491e-aba8-b013c9e6f8c3,68500931-89e0-491e-aba8-b013c9e6f8c3,1,0,70b79e56-bb71-4f38-93cf-94dda79d9b4c,70b79e56-bb71-4f38-93cf-94dda79d9b4c,1,0,5c4c9931-3fb0-47a8-9e4f-d552de12b355,5c4c9931-3fb0-47a8-9e4f-d552de12b355,1,0,dc1d0f97-e2f3-4e1d-b21c-411b46e39848,dc1d0f97-e2f3-4e1d-b21c-411b46e39848,1,0,ef6ccd0d-73c6-4314-9912-efa7ff27c823,ef6ccd0d-73c6-4314-9912-efa7ff27c823,1,0,2a498baf-ec2e-4dda-b568-801bb60db225,2a498baf-ec2e-4dda-b568-801bb60db225,1,0,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,1,0,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,1,0,35989876-16b1-4b02-9381-444a06a7a21d,35989876-16b1-4b02-9381-444a06a7a21d,1,0,f7608000-1e8a-4ca4-afb7-e04ef547b70a,f7608000-1e8a-4ca4-afb7-e04ef547b70a,1,0,f0a6de82-45ab-4153-bccf-df82fc960aa1,f0a6de82-45ab-4153-bccf-df82fc960aa1,1,0,77adf47b-6015-46fc-9e29-f1c025ea0d81,77adf47b-6015-46fc-9e29-f1c025ea0d81,1,0,26cea519-19d0-4707-be0a-1a43fde6e563,26cea519-19d0-4707-be0a-1a43fde6e563,1,0,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,1,0,60c04f0a-78a8-4c55-8844-b86906350fd1,60c04f0a-78a8-4c55-8844-b86906350fd1,1,0,851306a7-8847-4b43-8214-898bfc24b0ab,851306a7-8847-4b43-8214-898bfc24b0ab,1,0,af8d4bc9-2f0f-44d3-89ce-2593877055c8,af8d4bc9-2f0f-44d3-89ce-2593877055c8,1,0,344fb829-a1cc-4b17-8f98-2d4f93bfcd6a,344fb829-a1cc-4b17-8f98-2d4f93bfcd6a,1,0,eb35bff2-8467-48fe-bf93-ece2aa40f506,eb35bff2-8467-48fe-bf93-ece2aa40f506,1,0,68cf55da-b29e-4a65-815b-c9cdc8e5888e,68cf55da-b29e-4a65-815b-c9cdc8e5888e,1,0,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,1,0,1041ed81-c1f7-43b2-9087-914865a3076e,1041ed81-c1f7-43b2-9087-914865a3076e,1,0,5d7174d2-42b3-4e12-b705-4209dd73b53b,5d7174d2-42b3-4e12-b705-4209dd73b53b,1,0,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,1,0,e00dcab4-5e92-44e3-bcdf-a31dd32a195f,e00dcab4-5e92-44e3-bcdf-a31dd32a195f,1,0,5a4c6511-f8ed-40e4-a251-e28f62629cf2,5a4c6511-f8ed-40e4-a251-e28f62629cf2,1,0,cfe59dfd-a509-4f83-b926-b3ff94234a43,cfe59dfd-a509-4f83-b926-b3ff94234a43,1,0,17df1591-61b0-4204-8379-8d1f58445968,17df1591-61b0-4204-8379-8d1f58445968,1,0,9020fa9d-e7de-4574-ab65-db6651b5b610,9020fa9d-e7de-4574-ab65-db6651b5b610,1,0,fd5e72f7-3078-48eb-b01b-1800ffbd86d3,fd5e72f7-3078-48eb-b01b-1800ffbd86d3,1,0,e83ad33d-27df-4181-afd2-b7f416e6e705,e83ad33d-27df-4181-afd2-b7f416e6e705,1,0,ddeec7f4-8bd3-40af-bcac-00d18c0e6d6a,ddeec7f4-8bd3-40af-bcac-00d18c0e6d6a,1,0,f0438b0a-7916-4de4-a3a8-d43407c3295f,f0438b0a-7916-4de4-a3a8-d43407c3295f,1,0,3309648c-aae6-4684-ae8d-7ed636bc3468,3309648c-aae6-4684-ae8d-7ed636bc3468,1,0,f9aa933e-6684-48de-b802-96c8e61b1fe6,f9aa933e-6684-48de-b802-96c8e61b1fe6,1,0,9de4d430-95ec-4435-b3e8-4fc85778d517,9de4d430-95ec-4435-b3e8-4fc85778d517,1,0,205b8908-fa21-42bd-bff0-fb95e6787f15,205b8908-fa21-42bd-bff0-fb95e6787f15,1,0,4e309f26-35e8-49d9-bbd1-c7884e666dca,4e309f26-35e8-49d9-bbd1-c7884e666dca,1,0,84f05fe4-51d3-49a8-83e7-1cae2028147e,84f05fe4-51d3-49a8-83e7-1cae2028147e,1,0,8a9ab11b-5bb5-4da9-9053-8f9e8198d019,8a9ab11b-5bb5-4da9-9053-8f9e8198d019,1,0,5320abf1-b09b-4de0-9adf-4cb1da31df6f,5320abf1-b09b-4de0-9adf-4cb1da31df6f,1,0,3916ddbd-9023-42a4-849e-9cda6e591408,3916ddbd-9023-42a4-849e-9cda6e591408,1,0,5e9e42c5-dcbc-422f-acce-4f11a63dbb85,5e9e42c5-dcbc-422f-acce-4f11a63dbb85,1,0,6903ffe4-42c1-4708-a1b0-bb67cd3f9e4c,6903ffe4-42c1-4708-a1b0-bb67cd3f9e4c,1,0,c0e01a15-6937-4331-bdd7-2f5a68d0d3dd,c0e01a15-6937-4331-bdd7-2f5a68d0d3dd,1,0,d065c02e-9991-468a-ae32-b8c29d078d03,d065c02e-9991-468a-ae32-b8c29d078d03,1,0,c509683e-eb13-4e1a-91ed-cd6982ec5001,c509683e-eb13-4e1a-91ed-cd6982ec5001,1,0,88bf6f58-7943-42c4-bc0f-56b991590026,88bf6f58-7943-42c4-bc0f-56b991590026,1,0,f135b60e-6d28-4ba1-acd7-76090f14855d,f135b60e-6d28-4ba1-acd7-76090f14855d,1,0,96d66cdd-d40c-43a3-92ce-40aef2101b64,96d66cdd-d40c-43a3-92ce-40aef2101b64,1,0,9daa8270-4782-4d83-af03-c8d2b11057ff,9daa8270-4782-4d83-af03-c8d2b11057ff,1,0,4b8927df-e124-4bf6-9d70-6e91b4796d90,4b8927df-e124-4bf6-9d70-6e91b4796d90,1,0,871b63a2-c7a6-4343-8d8b-7dda1b0def87,871b63a2-c7a6-4343-8d8b-7dda1b0def87,1,0,52b45b3d-b01b-4aac-8a1e-e256957c39c3,52b45b3d-b01b-4aac-8a1e-e256957c39c3,1,0,fc78d8df-ab27-4544-a65c-73908b9c5425,fc78d8df-ab27-4544-a65c-73908b9c5425,1,0,f8a090d2-b2d1-4ead-a8bf-6325a7552743,f8a090d2-b2d1-4ead-a8bf-6325a7552743,1,0,84f935da-9fe5-44ea-845b-b447b8b0a6f5,84f935da-9fe5-44ea-845b-b447b8b0a6f5,1,0,33343620-673e-4aa3-9e58-c6a25f738001,33343620-673e-4aa3-9e58-c6a25f738001,1,0,8aaf780f-ed74-4f44-9598-c14180053ff9,8aaf780f-ed74-4f44-9598-c14180053ff9,1,0,dbd4d09d-f410-4453-9143-bd72da5464cc,dbd4d09d-f410-4453-9143-bd72da5464cc,1,0,c4fe10b6-d025-4736-be23-3113bd7fe7b4,c4fe10b6-d025-4736-be23-3113bd7fe7b4,1,0,65530aca-7cf2-4a52-b5be-5dcbc15a049e,65530aca-7cf2-4a52-b5be-5dcbc15a049e,1,0,15eb2c2d-305d-42c0-9aec-936b82114bdb,15eb2c2d-305d-42c0-9aec-936b82114bdb,1,0,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,1,0,cbca7272-2aae-4e21-b3f5-12786f085648,cbca7272-2aae-4e21-b3f5-12786f085648,1,0,7718bd0b-7b8a-4ffc-b228-f05683b5531a,7718bd0b-7b8a-4ffc-b228-f05683b5531a,1,0,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,1,0,881f53bc-a52e-4312-b09d-3d3f53ddf84b,881f53bc-a52e-4312-b09d-3d3f53ddf84b,1,0,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,1,0,e3476d0e-0ab4-4734-9261-04aef6281086,e3476d0e-0ab4-4734-9261-04aef6281086,1,0,945ae8d2-b74a-41e9-b740-c82acdd40d04,945ae8d2-b74a-41e9-b740-c82acdd40d04,1,0,29c37223-de1c-49fb-8488-77e44dd79edd,29c37223-de1c-49fb-8488-77e44dd79edd,1,0,976533bf-f162-42a1-a47e-6d681ee67b82,976533bf-f162-42a1-a47e-6d681ee67b82,1,0,19bc0dd8-9e6b-4855-bc42-b4e98443163f,19bc0dd8-9e6b-4855-bc42-b4e98443163f,1,0,a61e10af-eaba-4e7a-a641-65d77453a559,a61e10af-eaba-4e7a-a641-65d77453a559,1,0,4c8eb34e-0bb6-487a-a2ae-24083b1f6d2e,4c8eb34e-0bb6-487a-a2ae-24083b1f6d2e,1,0,276c42ca-f5e0-4bb4-9b89-a925def35cb1,276c42ca-f5e0-4bb4-9b89-a925def35cb1,1,0,41a9cabc-5667-4ca0-a798-ba0b22bd1aa0,41a9cabc-5667-4ca0-a798-ba0b22bd1aa0,1,0,1bf44c42-87c0-4f2e-846c-b04d0b7e8d7d,1bf44c42-87c0-4f2e-846c-b04d0b7e8d7d,1,0,8811ea1a-1221-47b7-9574-3f36ff15a3cf,8811ea1a-1221-47b7-9574-3f36ff15a3cf,1,0,a84891cc-e996-489a-abde-5b5af166a057,a84891cc-e996-489a-abde-5b5af166a057,1,0,1d715463-691b-4c01-ae39-57c261f2a6ad,1d715463-691b-4c01-ae39-57c261f2a6ad,1,0,4c3d007f-a62c-4fd9-beda-58dbf08ad188,4c3d007f-a62c-4fd9-beda-58dbf08ad188,1,0,c35373a9-f0b0-4ddb-a985-409ac9c64609,c35373a9-f0b0-4ddb-a985-409ac9c64609,1,0,c5b4d6e4-4c99-46cb-98cf-9a0024215a12,c5b4d6e4-4c99-46cb-98cf-9a0024215a12,1,0,c1c40916-fee5-46e3-90fc-10e7595866c9,c1c40916-fee5-46e3-90fc-10e7595866c9,1,0,19a307b1-9ef0-4fc6-bf4f-7636e9118399,19a307b1-9ef0-4fc6-bf4f-7636e9118399,1,0,666244a4-5636-4405-89dd-bbd8f4278071,666244a4-5636-4405-89dd-bbd8f4278071,1,0,8b79f0e3-9024-4073-aa6b-a42beed9b0c6,8b79f0e3-9024-4073-aa6b-a42beed9b0c6,1,0,29a627a9-debc-4074-88d0-ec3561e1ef9c,29a627a9-debc-4074-88d0-ec3561e1ef9c,1,0,5a01a002-8833-4c89-b8d6-9b63fc49d3b6,5a01a002-8833-4c89-b8d6-9b63fc49d3b6,1,0,39f5e272-9a10-40b0-8a10-92037828b206,39f5e272-9a10-40b0-8a10-92037828b206,1,0,87dad256-122b-4d7e-b249-a2c313a9cf33,87dad256-122b-4d7e-b249-a2c313a9cf33,1,0,57a030fb-ed57-4ffc-a462-c7bbd2435c3d,57a030fb-ed57-4ffc-a462-c7bbd2435c3d,1,0,f20a04a7-84fa-48e3-8ac5-28176c1fcada,f20a04a7-84fa-48e3-8ac5-28176c1fcada,1,0,b722d6e1-fd6f-4bb4-923d-01764393722d,b722d6e1-fd6f-4bb4-923d-01764393722d,1,0,ac5f945e-2d03-44fb-a8cf-5d786194cefd,ac5f945e-2d03-44fb-a8cf-5d786194cefd,1,0,698ec00f-bf75-420e-81ab-a98808daf3f7,698ec00f-bf75-420e-81ab-a98808daf3f7,1,0,f441907c-d02e-431e-baf4-1854e48a1f50,f441907c-d02e-431e-baf4-1854e48a1f50,1,0,4ad722ca-10fc-4a83-91c9-ef0012685f89,4ad722ca-10fc-4a83-91c9-ef0012685f89,1,0,783dd4ba-a597-45ba-8989-2ed5224d62bc,783dd4ba-a597-45ba-8989-2ed5224d62bc,1,0,3b033d29-0de7-49dd-90bc-f414b28426d7,3b033d29-0de7-49dd-90bc-f414b28426d7,1,0,97aaede5-d32f-4eba-b0e0-5ae5f094a8b7,97aaede5-d32f-4eba-b0e0-5ae5f094a8b7,1,0,d9e08c12-1999-41d8-b530-90187303be0a,d9e08c12-1999-41d8-b530-90187303be0a,1,0,dad9710a-73ca-4e0d-b98b-75f955d0822d,dad9710a-73ca-4e0d-b98b-75f955d0822d,1,0,d01beeab-7c42-4d5e-a2f6-f190b9f703a5,d01beeab-7c42-4d5e-a2f6-f190b9f703a5,1,0,19b9cbbb-1fcc-4492-9385-687742cb3d0b,19b9cbbb-1fcc-4492-9385-687742cb3d0b,1,0,2191939f-6f71-47c9-a3d2-57acbf7f411e,2191939f-6f71-47c9-a3d2-57acbf7f411e,1,0,247c41dd-c8dc-43dd-b348-1ba31ee92065,247c41dd-c8dc-43dd-b348-1ba31ee92065,1,0,dbad3cee-0d5c-41f6-819f-1a2b5251b62c,dbad3cee-0d5c-41f6-819f-1a2b5251b62c,1,0,da673406-078d-44c8-9d27-80ef172c4b5e,da673406-078d-44c8-9d27-80ef172c4b5e,1,0,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,1,0,a2c36563-126d-4c3a-9714-5b7a4903073b,a2c36563-126d-4c3a-9714-5b7a4903073b,1,0,2e4da82c-dddb-4462-b34f-6511cd2a8356,2e4da82c-dddb-4462-b34f-6511cd2a8356,1,0,c7da3115-3cee-4282-a2f2-4e0b5558e4fc,c7da3115-3cee-4282-a2f2-4e0b5558e4fc,1,0,2976c29f-f482-463d-8f6e-6a632fb50893,2976c29f-f482-463d-8f6e-6a632fb50893,1,0,701964a1-7762-45ee-a9a4-41dd9ce94783,701964a1-7762-45ee-a9a4-41dd9ce94783,1,0,55d1909e-f552-441f-8e14-47d2e604cf6a,55d1909e-f552-441f-8e14-47d2e604cf6a,1,0,eae627db-c52b-4e41-94d1-58db28cd0063,eae627db-c52b-4e41-94d1-58db28cd0063,1,0,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,1,0,0a646724-b49d-42cd-82e6-e800466ed127,0a646724-b49d-42cd-82e6-e800466ed127,1,0,47058e36-a281-43a5-a41d-691b3ef32b5b,47058e36-a281-43a5-a41d-691b3ef32b5b,1,0,4fc5c023-91e2-4b3e-8f61-4dfe3be78f3a,4fc5c023-91e2-4b3e-8f61-4dfe3be78f3a,1,0,646def82-bc88-4187-8be0-93938656a20f,646def82-bc88-4187-8be0-93938656a20f,1,0,e620e93c-4382-478f-a700-ad2faa67362b,e620e93c-4382-478f-a700-ad2faa67362b,1,0,a4a8693b-dc91-4762-92e6-35360c8768db,a4a8693b-dc91-4762-92e6-35360c8768db,1,0,2ae236ec-28a7-44e0-a0ba-be62fe52d817,2ae236ec-28a7-44e0-a0ba-be62fe52d817,1,0,52ae6431-afb3-4dea-b106-00e11b174ec7,52ae6431-afb3-4dea-b106-00e11b174ec7,1,0,b18bdc5f-a2b6-4b15-81c3-37b27a5a3176,b18bdc5f-a2b6-4b15-81c3-37b27a5a3176,1,0,c996916d-7f1c-4fbf-939f-3e1bafe81f7d,c996916d-7f1c-4fbf-939f-3e1bafe81f7d,1,0,528d96cc-8838-49ea-8d76-ea56747882e0,528d96cc-8838-49ea-8d76-ea56747882e0,1,0,b9166ea0-cce8-4f76-a9cb-a3d6eb4dfb95,b9166ea0-cce8-4f76-a9cb-a3d6eb4dfb95,1,0,c24f0014-fc8c-485b-9743-0a1398d02749,c24f0014-fc8c-485b-9743-0a1398d02749,1,0,8b81b415-adaf-42ca-bc89-1857d00b96b3,8b81b415-adaf-42ca-bc89-1857d00b96b3,1,0,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,1,0,ed137e05-1996-411d-9927-45a3d7e3ee3b,ed137e05-1996-411d-9927-45a3d7e3ee3b,1,0,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,1,0,fbebf341-9842-41e1-8e4d-490fa02065ce,fbebf341-9842-41e1-8e4d-490fa02065ce,1,0,b3e0efae-67f6-409a-93dd-750b7f860831,b3e0efae-67f6-409a-93dd-750b7f860831,1,0,067f88f6-ccd2-491e-a466-94345a1f220f,067f88f6-ccd2-491e-a466-94345a1f220f,1,0,642154b8-97da-4c4f-bf34-c1124215077d,642154b8-97da-4c4f-bf34-c1124215077d,1,0,abc10867-39ae-46bf-8bd7-90f645919235,abc10867-39ae-46bf-8bd7-90f645919235,1,0,b3396504-8ccb-43d6-9a0f-ab259ba0a542,b3396504-8ccb-43d6-9a0f-ab259ba0a542,1,0,f59f91c5-026a-4dc5-996e-0d59814a9604,f59f91c5-026a-4dc5-996e-0d59814a9604,1,0,aac9966f-e9ea-4106-97bb-6b9822939bc7,aac9966f-e9ea-4106-97bb-6b9822939bc7,1,0,a752fba8-5084-4fa2-9d0b-7074a42b1312,a752fba8-5084-4fa2-9d0b-7074a42b1312,1,0,640d7486-8abd-40aa-a244-2ed899b7225a,640d7486-8abd-40aa-a244-2ed899b7225a,1,0,58321939-f25a-456d-8dee-97e64743dc2e,58321939-f25a-456d-8dee-97e64743dc2e,1,0,416fba62-70c4-4f8c-b10b-56d47b27ca35,416fba62-70c4-4f8c-b10b-56d47b27ca35,1,0,ec48a164-bc30-4e36-a40a-a3cca07aea0d,ec48a164-bc30-4e36-a40a-a3cca07aea0d,1,0,c05f87b4-ec5f-4d14-981f-02ca8ba89863,c05f87b4-ec5f-4d14-981f-02ca8ba89863,1,0,b7736108-89bd-44eb-89c1-8a5a774058f1,b7736108-89bd-44eb-89c1-8a5a774058f1,1,0,560a5f44-e4e6-46d9-a9fe-3609842d0e3e,560a5f44-e4e6-46d9-a9fe-3609842d0e3e,1,0,98f68a75-ebf9-4c59-b6a8-b3634089ca6b,98f68a75-ebf9-4c59-b6a8-b3634089ca6b,1,0,875d1fc1-8172-4e48-8192-035882e1665d,875d1fc1-8172-4e48-8192-035882e1665d,1,0,26132b28-98cc-4690-92ad-139f91839ba2,26132b28-98cc-4690-92ad-139f91839ba2,1,0,0bd85b79-cc32-4c1d-b629-567a1bdfac56,0bd85b79-cc32-4c1d-b629-567a1bdfac56,1,0,b87ce4f9-aaa6-4a4c-af80-0bd9adc83506,b87ce4f9-aaa6-4a4c-af80-0bd9adc83506,1,0,ca81e0ea-c428-47f9-aedb-078214104a2f,ca81e0ea-c428-47f9-aedb-078214104a2f,1,0,9518d09c-6996-4439-9278-3c71d5ae8fce,9518d09c-6996-4439-9278-3c71d5ae8fce,1,0,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,1,0,5fbd9a13-012d-4c36-b72c-da3bc4157cff,5fbd9a13-012d-4c36-b72c-da3bc4157cff,1,0,1126157b-64c0-4d64-8551-f31c5ed0fd29,1126157b-64c0-4d64-8551-f31c5ed0fd29,1,0,6ae6e515-5cd4-4eca-8602-c6abe6d66276,6ae6e515-5cd4-4eca-8602-c6abe6d66276,1,0,44b8472b-0f70-49cc-8f71-9c9d3e9cfbcc,44b8472b-0f70-49cc-8f71-9c9d3e9cfbcc,1,0,b071a44e-9a34-4af3-a59a-35aa5f3a74b4,b071a44e-9a34-4af3-a59a-35aa5f3a74b4,1,0,35a28677-0653-47f9-82e1-02c4b9266fee,35a28677-0653-47f9-82e1-02c4b9266fee,1,0,2e17464f-9cef-4812-865f-4eb77ff16b6a,2e17464f-9cef-4812-865f-4eb77ff16b6a,1,0,e5ecbb1f-981d-4928-9335-22216879f7e2,e5ecbb1f-981d-4928-9335-22216879f7e2,1,0,461be12a-9f16-4826-978a-436608ca8733,461be12a-9f16-4826-978a-436608ca8733,1,0,9b143299-d300-4b6c-b667-5552fb3bdcde,9b143299-d300-4b6c-b667-5552fb3bdcde,1,0,0de070f4-d8b7-48bb-bfc9-027dd727a4ad,0de070f4-d8b7-48bb-bfc9-027dd727a4ad,1,0,74973d06-f57d-403e-945c-5cd2f4fc4869,74973d06-f57d-403e-945c-5cd2f4fc4869,1,0,259564b8-172e-4eed-9360-d561ec6dad69,259564b8-172e-4eed-9360-d561ec6dad69,1,0,91c799d7-2b3d-4d1a-87ff-221057a428c6,91c799d7-2b3d-4d1a-87ff-221057a428c6,1,0,a50fcacc-6d2d-496c-bea0-9c73cd153437,a50fcacc-6d2d-496c-bea0-9c73cd153437,1,0,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,1,0,0fb72f4b-e6f6-4b70-8ec7-fdb6d4ad928e,0fb72f4b-e6f6-4b70-8ec7-fdb6d4ad928e,1,0,a5633248-8611-4e9b-b223-2f59e7b84a65,a5633248-8611-4e9b-b223-2f59e7b84a65,1,0,6ec3463a-1e94-4de7-a8c0-b0e42f38573e,6ec3463a-1e94-4de7-a8c0-b0e42f38573e,1,0,e40b8882-737a-40c0-83b4-c35dc042f4a5,e40b8882-737a-40c0-83b4-c35dc042f4a5,1,0,d60c1e9d-1395-4293-8462-6ea2c93a0c86,d60c1e9d-1395-4293-8462-6ea2c93a0c86,1,0,a05fdefd-c0c6-4069-bb05-3fcd22819289,a05fdefd-c0c6-4069-bb05-3fcd22819289,1,0,1514f388-3c36-422f-9e23-83054934e4b3,1514f388-3c36-422f-9e23-83054934e4b3,1,0,841f4416-a85a-48f7-bae2-19865cf2979e,841f4416-a85a-48f7-bae2-19865cf2979e,1,0,8df13cd3-1b03-4c84-98e9-c771c1d5254a,8df13cd3-1b03-4c84-98e9-c771c1d5254a,1,0,a79ddc43-74f6-4997-bfc4-bdf7bc71cdd6,a79ddc43-74f6-4997-bfc4-bdf7bc71cdd6,1,0,29477058-cb8d-4fd4-b3a1-41565aeabf97,29477058-cb8d-4fd4-b3a1-41565aeabf97,1,0,5a2d5d8a-afd9-4954-9868-7c82bad00426,5a2d5d8a-afd9-4954-9868-7c82bad00426,1,0,26aea96b-20f8-4e35-b55f-4fe3602e6597,26aea96b-20f8-4e35-b55f-4fe3602e6597,1,0,a3a3a211-e361-4e41-a6f8-d731a366c163,a3a3a211-e361-4e41-a6f8-d731a366c163,1,0,c40d6fde-4d9a-4d9e-af86-42b7916e2abe,c40d6fde-4d9a-4d9e-af86-42b7916e2abe,1,0,4d5204ae-711d-4c31-8a18-280dbc9d2bf5,4d5204ae-711d-4c31-8a18-280dbc9d2bf5,1,0,ca01417c-0ffd-4e00-91e8-93cd305be82d,ca01417c-0ffd-4e00-91e8-93cd305be82d,1,0,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,1,0,0a0af8bf-0caa-40df-9a69-71f98ca9ff89,0a0af8bf-0caa-40df-9a69-71f98ca9ff89,1,0,6ac7db0c-18ed-4d3b-956a-5985214db474,6ac7db0c-18ed-4d3b-956a-5985214db474,1,0,267103e0-6703-4a74-bb4f-af610d7ef332,267103e0-6703-4a74-bb4f-af610d7ef332,1,0,b98ca634-25a5-4366-af04-815ba34c8bb2,b98ca634-25a5-4366-af04-815ba34c8bb2,1,0,14d69108-4d26-401a-b7ae-2c86dadf831c,14d69108-4d26-401a-b7ae-2c86dadf831c,1,0,d6251f65-d366-4bc9-a5db-42063fe03594,d6251f65-d366-4bc9-a5db-42063fe03594,1,0,22c60cbc-429f-40d9-bf8b-681b7786c41d,22c60cbc-429f-40d9-bf8b-681b7786c41d,1,0,d4e53d41-9335-4a1e-a06e-410c46de1d1c,d4e53d41-9335-4a1e-a06e-410c46de1d1c,1,0,4405bfaa-699a-497b-a15c-0302b86c834c,4405bfaa-699a-497b-a15c-0302b86c834c,1,0,3b3e7b9d-67f8-4cf2-ad1a-29d124169691,3b3e7b9d-67f8-4cf2-ad1a-29d124169691,1,0,31dd320b-06aa-4314-9914-2c2420f572a1,31dd320b-06aa-4314-9914-2c2420f572a1,1,0,56730848-3bef-4b8c-b449-fe9d09c9c374,56730848-3bef-4b8c-b449-fe9d09c9c374,1,0,43c477d2-1234-4c4a-a18a-022c0ddf2fd5,43c477d2-1234-4c4a-a18a-022c0ddf2fd5,1,0,91d8c5e4-eaec-4951-9224-16882fda08f6,91d8c5e4-eaec-4951-9224-16882fda08f6,1,0,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,1,0,4654d192-74bf-430f-abee-6f4dc431b182,4654d192-74bf-430f-abee-6f4dc431b182,1,0,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,1,0,4678c704-933a-45ef-9d41-89b8f39016bb,4678c704-933a-45ef-9d41-89b8f39016bb,1,0,8ceea1e8-42ce-469f-823a-ceffdbd6b112,8ceea1e8-42ce-469f-823a-ceffdbd6b112,1,0,80eb2a49-8c0e-4f92-b99c-7fdadca03e7b,80eb2a49-8c0e-4f92-b99c-7fdadca03e7b,1,0,3f7ee937-d853-47b7-a1f5-d821208e3531,3f7ee937-d853-47b7-a1f5-d821208e3531,1,0,086d69d6-e2fa-45cb-84b6-f8f3e2919160,086d69d6-e2fa-45cb-84b6-f8f3e2919160,1,0,6995ee71-5901-46d9-a5c1-b35d795bda20,6995ee71-5901-46d9-a5c1-b35d795bda20,1,0,e93a4293-0497-4f11-b8b9-40300104fb96,e93a4293-0497-4f11-b8b9-40300104fb96,1,0,93531e5d-5dfc-42e8-be52-2e83f37262b0,93531e5d-5dfc-42e8-be52-2e83f37262b0,1,0,61bf78c0-7004-4a74-b362-e979c7316e05,61bf78c0-7004-4a74-b362-e979c7316e05,1,0,c4351896-eff1-4e4d-8823-028d63a9d6bf,c4351896-eff1-4e4d-8823-028d63a9d6bf,1,0,475f83a2-ba5a-4072-94f8-1324b1f198a4,475f83a2-ba5a-4072-94f8-1324b1f198a4,1,0,cd7c15c1-c573-46c9-b109-339b8b54c3ee,cd7c15c1-c573-46c9-b109-339b8b54c3ee,1,0,efd89929-4db9-4c58-b3cb-a8d9a41a1df2,efd89929-4db9-4c58-b3cb-a8d9a41a1df2,1,0,deee8bde-381f-4094-8794-7a06248860dd,deee8bde-381f-4094-8794-7a06248860dd,1,0,2757ee75-4b36-4901-bff1-044708754edb,2757ee75-4b36-4901-bff1-044708754edb,1,0,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,1,0,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,1,0,90032ffa-f117-4a34-82f8-cc7e5a22a542,90032ffa-f117-4a34-82f8-cc7e5a22a542,1,0,71144539-6472-4727-8887-0139f6221370,71144539-6472-4727-8887-0139f6221370,1,0,bff07da4-ae19-48a9-806b-14b285d42485,bff07da4-ae19-48a9-806b-14b285d42485,1,0,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,1,0,b0ccc05d-8d39-4f57-8e87-6846014f92ea,b0ccc05d-8d39-4f57-8e87-6846014f92ea,1,0,49e787c9-753a-468a-b8dd-2e970d9a1fed,49e787c9-753a-468a-b8dd-2e970d9a1fed,1,0,e871dea7-1953-4511-90b0-e0957afac4c0,e871dea7-1953-4511-90b0-e0957afac4c0,1,0,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,1,0,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,1,0,447fb310-0588-4e0d-8f6d-5fc1f3bb1180,447fb310-0588-4e0d-8f6d-5fc1f3bb1180,1,0,d91441cf-d793-4dfa-9225-f0c16818edde,d91441cf-d793-4dfa-9225-f0c16818edde,1,0,8986c155-54be-4b1b-b31a-5c00b88bc40d,8986c155-54be-4b1b-b31a-5c00b88bc40d,1,0,40ae107d-67a8-404c-adf9-1a760bba94ff,40ae107d-67a8-404c-adf9-1a760bba94ff,1,0,42a39785-144c-4d2d-92c6-fd8b345f687b,42a39785-144c-4d2d-92c6-fd8b345f687b,1,0,f3bd841b-fb36-4462-9627-b51801e563cd,f3bd841b-fb36-4462-9627-b51801e563cd,1,0,0a23f273-5589-4a48-be3a-eee7565749aa,0a23f273-5589-4a48-be3a-eee7565749aa,1,0,494eb9d9-4a10-4e85-b511-375408f21bbe,494eb9d9-4a10-4e85-b511-375408f21bbe,1,0,3fbbca3f-d4fa-4d65-a08f-0a348b9030c6,3fbbca3f-d4fa-4d65-a08f-0a348b9030c6,1,0,a161dd07-4a6e-4d0f-b72c-702d0d3a83a3,a161dd07-4a6e-4d0f-b72c-702d0d3a83a3,1,0,7172bed5-b12b-4e83-b15d-1d95b63a6272,7172bed5-b12b-4e83-b15d-1d95b63a6272,1,0,25d75a3c-b801-4b1e-aed8-90e667f36c67,25d75a3c-b801-4b1e-aed8-90e667f36c67,1,0,addb3aa1-a9d6-4d30-b5db-7f3ce46bc1b2,addb3aa1-a9d6-4d30-b5db-7f3ce46bc1b2,1,0,63ebf7fd-d514-4fce-abc1-fb3f253d01cd,63ebf7fd-d514-4fce-abc1-fb3f253d01cd,1,0,a275802f-937a-49f4-92da-fcdd185a036d,a275802f-937a-49f4-92da-fcdd185a036d,1,0,ec6ed9cb-85a2-4303-9906-cfb4ce6500bf,ec6ed9cb-85a2-4303-9906-cfb4ce6500bf,1,0,f2dc9319-ba60-421a-8340-be3e3a291393,f2dc9319-ba60-421a-8340-be3e3a291393,1,0,bf4eb62a-bc74-4845-bad2-58a2a8302a65,bf4eb62a-bc74-4845-bad2-58a2a8302a65,1,0,b66eb190-1c16-4f20-a94f-954bcdf313b8,b66eb190-1c16-4f20-a94f-954bcdf313b8,1,0,49e21b87-beae-4640-a497-ef468da0cbbc,49e21b87-beae-4640-a497-ef468da0cbbc,1,0,bbdfeebd-cda0-4911-8f31-553d751340a7,bbdfeebd-cda0-4911-8f31-553d751340a7,1,0,dc7adfb7-41e7-4019-a18d-5d9f5d227b71,dc7adfb7-41e7-4019-a18d-5d9f5d227b71,1,0,20aad006-5b1e-4cc2-94ef-668dd002667b,20aad006-5b1e-4cc2-94ef-668dd002667b,1,0,af6af7ae-d68a-4e12-ba2c-a360ce2920a7,af6af7ae-d68a-4e12-ba2c-a360ce2920a7,1,0,b0f5bce4-2ad3-416e-9b1e-3fb23deaa040,b0f5bce4-2ad3-416e-9b1e-3fb23deaa040,1,0,2befb2e3-7354-4a01-83d6-b24262704a5e,2befb2e3-7354-4a01-83d6-b24262704a5e,1,0,5b93975e-b2a4-4102-a060-2667f5813c94,5b93975e-b2a4-4102-a060-2667f5813c94,1,0,ca75d086-cd01-4f54-b57d-1b35bcb1272a,ca75d086-cd01-4f54-b57d-1b35bcb1272a,1,0,b4a27991-2e18-4ead-80e8-f2956a7539e3,b4a27991-2e18-4ead-80e8-f2956a7539e3,1,0,ac8c40d6-be1e-4733-be2e-ae83bde4ec15,ac8c40d6-be1e-4733-be2e-ae83bde4ec15,1,0,dcdc9c65-c2d5-4531-a325-f64b3861cbab,dcdc9c65-c2d5-4531-a325-f64b3861cbab,1,0,ca542a9e-3040-419f-9a98-2a8de230b734,ca542a9e-3040-419f-9a98-2a8de230b734,1,0,c9fc5155-1df3-4872-a83d-72872baf43c4,c9fc5155-1df3-4872-a83d-72872baf43c4,1,0,9f9adb67-66bd-4c28-8319-44ae097ae1fe,9f9adb67-66bd-4c28-8319-44ae097ae1fe,1,0,0bae3704-b370-48be-b094-f18a2e62ad1b,0bae3704-b370-48be-b094-f18a2e62ad1b,1,0,e097bf94-9235-4a27-b0eb-d6387d22cd62,e097bf94-9235-4a27-b0eb-d6387d22cd62,1,0,eccded1c-f3ca-40d3-a8cd-71947bfed7b8,eccded1c-f3ca-40d3-a8cd-71947bfed7b8,1,0,4d243f2b-14d9-4e96-9707-4ead5d12e0a2,4d243f2b-14d9-4e96-9707-4ead5d12e0a2,1,0,8d2bfd40-f185-4eab-b374-872d49310eb2,8d2bfd40-f185-4eab-b374-872d49310eb2,1,0,523de426-e5a6-49e0-8144-c637f80d8ddd,523de426-e5a6-49e0-8144-c637f80d8ddd,1,0,09256328-6205-4b04-b908-3287ae8ded75,09256328-6205-4b04-b908-3287ae8ded75,1,0,05a6e161-9791-4c5b-8753-bd6370cc4cc9,05a6e161-9791-4c5b-8753-bd6370cc4cc9,1,0,6362facc-bf95-4adf-8ee7-c65f90972a1c,6362facc-bf95-4adf-8ee7-c65f90972a1c,1,0,08dbba81-68fb-49ef-8aac-9631fcfa87c6,08dbba81-68fb-49ef-8aac-9631fcfa87c6,1,0,dd7191b6-cbc0-4b0b-a51a-c27a1e1720fa,dd7191b6-cbc0-4b0b-a51a-c27a1e1720fa,1,0,8170a27d-45e9-48b1-860b-c2d9cc5961cd,8170a27d-45e9-48b1-860b-c2d9cc5961cd,1,0,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,1,0,e8c3b796-bfd8-4108-ab5f-d0f21b7bd9a6,e8c3b796-bfd8-4108-ab5f-d0f21b7bd9a6,1,0,f41d01ec-983a-4b39-9c11-a6d25d08df4f,f41d01ec-983a-4b39-9c11-a6d25d08df4f,1,0,3247e64e-b57e-4c33-8086-7ab93c5b6371,3247e64e-b57e-4c33-8086-7ab93c5b6371,1,0,e5dca369-dc9a-4332-a509-f734b8787e13,e5dca369-dc9a-4332-a509-f734b8787e13,1,0,722af623-156c-4e63-8b2a-93da760f1559,722af623-156c-4e63-8b2a-93da760f1559,1,0,5ff23123-450c-40ae-9b79-c540da53e2a0,5ff23123-450c-40ae-9b79-c540da53e2a0,1,0,639339a1-7de5-4b05-adf3-f60e7edd922c,639339a1-7de5-4b05-adf3-f60e7edd922c,1,0,dea9af9d-13c0-40d4-a9b0-1908e0a58795,dea9af9d-13c0-40d4-a9b0-1908e0a58795,1,0,9e9b8c05-787a-43c0-891d-3d9ad7e4976f,9e9b8c05-787a-43c0-891d-3d9ad7e4976f,1,0,1abeb10b-0558-4478-8f51-d0964ba3c274,1abeb10b-0558-4478-8f51-d0964ba3c274,1,0,38325a66-588a-4db0-8e0c-21d239408369,38325a66-588a-4db0-8e0c-21d239408369,1,0,7c27e885-33fd-4da2-a60d-50336c0189b0,7c27e885-33fd-4da2-a60d-50336c0189b0,1,0,0e1a45b0-d95d-415f-b954-5689610aa393,0e1a45b0-d95d-415f-b954-5689610aa393,1,0,4736b3d3-f696-4bdd-b0e3-0884ea88f623,4736b3d3-f696-4bdd-b0e3-0884ea88f623,1,0,4b849c66-6a36-4efd-815e-af4467c6f064,4b849c66-6a36-4efd-815e-af4467c6f064,1,0,f6939587-ff87-4eca-ae52-10e1bd2abfce,f6939587-ff87-4eca-ae52-10e1bd2abfce,1,0,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,1,0,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,1,0,3cb575a9-dc82-45e0-81f0-d651e12246da,3cb575a9-dc82-45e0-81f0-d651e12246da,1,0,01a73950-3e8f-4f56-903f-af0d9574e72e,01a73950-3e8f-4f56-903f-af0d9574e72e,1,0,14bd0844-c829-4325-aa7f-0f417bf955dc,14bd0844-c829-4325-aa7f-0f417bf955dc,1,0,7f1cd658-ca10-49c6-80ef-b8956f3269ea,7f1cd658-ca10-49c6-80ef-b8956f3269ea,1,0,b0d9086f-cef7-47a8-ad62-d85fea28ebda,b0d9086f-cef7-47a8-ad62-d85fea28ebda,1,0,49c010fc-f5cc-45f4-ba46-132e7661c3dd,49c010fc-f5cc-45f4-ba46-132e7661c3dd,1,0,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,1,0,2c02a558-8d12-44cf-be6b-9c399b9032e5,2c02a558-8d12-44cf-be6b-9c399b9032e5,1,0,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,d94d4931-7c81-4ee8-93ea-b2c54b152fa5,1,0,c770bdd5-c7c0-4751-b31d-46c0ea1f49b7,c770bdd5-c7c0-4751-b31d-46c0ea1f49b7,1,0,6afcc089-7f15-42e8-97b5-6aad6cf2e6f9,6afcc089-7f15-42e8-97b5-6aad6cf2e6f9,1,0,cce4c615-dc29-42b3-9d3d-b277dde4a2e4,cce4c615-dc29-42b3-9d3d-b277dde4a2e4,1,0,9c267aa6-5f23-49f6-868a-3324ef2845ff,9c267aa6-5f23-49f6-868a-3324ef2845ff,1,0,495eeeee-d7bf-4063-99e2-86daa066451a,495eeeee-d7bf-4063-99e2-86daa066451a,1,0,b6184698-79e4-4c19-9440-092ccd9dabf8,b6184698-79e4-4c19-9440-092ccd9dabf8,1,0,7d01fc0c-378e-421d-ab70-6a418eed5941,7d01fc0c-378e-421d-ab70-6a418eed5941,1,0,6eeb4867-bf9d-48dc-b96b-934a0c293010,6eeb4867-bf9d-48dc-b96b-934a0c293010,1,0,c7f817ee-9f6a-454c-95a0-b279fd08055e,c7f817ee-9f6a-454c-95a0-b279fd08055e,1,0,e1803e54-ec5e-4a82-8097-5e2331820991,e1803e54-ec5e-4a82-8097-5e2331820991,1,0,259ede1f-05d3-4ece-8994-0ae3b2e89f49,259ede1f-05d3-4ece-8994-0ae3b2e89f49,1,0,f69ec1f9-826e-4eb4-b52c-3f6a3dfc3361,f69ec1f9-826e-4eb4-b52c-3f6a3dfc3361,1,0,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,1,0,8506dbe9-7066-444b-83b6-fb2d71a336e7,8506dbe9-7066-444b-83b6-fb2d71a336e7,1,0,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,1,0,6686d828-3129-4d44-a8a2-a64657d424cb,6686d828-3129-4d44-a8a2-a64657d424cb,1,0,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,1,0,ce235ab9-1dec-459a-9fec-498c262ece56,ce235ab9-1dec-459a-9fec-498c262ece56,1,0,9ec53d1a-ed7a-41e8-b5d0-6c2181fd63a5,9ec53d1a-ed7a-41e8-b5d0-6c2181fd63a5,1,0,97edd94a-4bf2-4ed7-b98f-677f869b0715,97edd94a-4bf2-4ed7-b98f-677f869b0715,1,0,39355e82-30a6-431e-9697-e2c42e82de83,39355e82-30a6-431e-9697-e2c42e82de83,1,0,a9ae364f-b668-4fb4-b976-f227951ffb6b,a9ae364f-b668-4fb4-b976-f227951ffb6b,1,0,edc01b03-8b01-4551-939a-f7e257892040,edc01b03-8b01-4551-939a-f7e257892040,1,0,15d09274-9508-4f64-9ea3-678c5aa50f0f,15d09274-9508-4f64-9ea3-678c5aa50f0f,1,0,4debe032-12e4-4777-b2fc-70b150f2aad1,4debe032-12e4-4777-b2fc-70b150f2aad1,1,0,37558fa2-0833-46d6-9e4f-63d4a3136870,37558fa2-0833-46d6-9e4f-63d4a3136870,1,0,d92cb614-ed09-47db-b70b-d3e533c44c6a,d92cb614-ed09-47db-b70b-d3e533c44c6a,1,0,e660c8bf-af5f-4525-a56e-68925d2b96fa,e660c8bf-af5f-4525-a56e-68925d2b96fa,1,0,2fad50a6-6a3e-4f87-ab84-907364427a63,2fad50a6-6a3e-4f87-ab84-907364427a63,1,0,9567765b-8e02-4262-89a9-5c354109cc4c,9567765b-8e02-4262-89a9-5c354109cc4c,1,0,3153b2b9-9e3e-4d6b-ab8c-5ccaac78a08a,3153b2b9-9e3e-4d6b-ab8c-5ccaac78a08a,1,0,588bd1b2-ee61-4a05-83cd-efb1b82ccb44,588bd1b2-ee61-4a05-83cd-efb1b82ccb44,1,0,1681dd7a-de80-4b8d-9657-c9702a19d653,1681dd7a-de80-4b8d-9657-c9702a19d653,1,0,10d796e9-a3d4-4ef0-87d5-8315aa12f1c8,10d796e9-a3d4-4ef0-87d5-8315aa12f1c8,1,0,fdb5b235-1978-4c2a-a03f-02341df00c3c,fdb5b235-1978-4c2a-a03f-02341df00c3c,1,0,9f593f27-8009-40c0-94d6-53f177ce55f4,9f593f27-8009-40c0-94d6-53f177ce55f4,1,0,38637f61-399a-4966-9e64-4751aecffa31,38637f61-399a-4966-9e64-4751aecffa31,1,0,0f38a18b-a36c-45fe-86c1-396634aaa5df,0f38a18b-a36c-45fe-86c1-396634aaa5df,1,0,f2b7b8d0-c0f7-46ba-907a-f8dfa76fc2da,f2b7b8d0-c0f7-46ba-907a-f8dfa76fc2da,1,0,a81c783d-2dea-4dde-9ca1-7b23d609eb22,a81c783d-2dea-4dde-9ca1-7b23d609eb22,1,0,137ec4ee-5053-47a7-8f5d-f6e63174608f,137ec4ee-5053-47a7-8f5d-f6e63174608f,1,0,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,820bb4b4-895b-4ccf-a350-2545bf8a2f7e,1,0,530a3164-4ef1-4b3b-8269-13764ef4bf15,530a3164-4ef1-4b3b-8269-13764ef4bf15,1,0,6df2bb92-558c-4453-9de4-e4176e8f93dc,6df2bb92-558c-4453-9de4-e4176e8f93dc,1,0,0ce4c8a4-b20b-4550-bee3-f677e9ec64e9,0ce4c8a4-b20b-4550-bee3-f677e9ec64e9,1,0,30d5c2a6-b3cf-4ed5-ba75-850bcae932d1,30d5c2a6-b3cf-4ed5-ba75-850bcae932d1,1,0,0bf5e9c1-905a-4202-8b96-ed831b41be4b,0bf5e9c1-905a-4202-8b96-ed831b41be4b,1,0,e92ae368-0d7c-4fb7-b6d0-5ab63dc95a6a,e92ae368-0d7c-4fb7-b6d0-5ab63dc95a6a,1,0,f30c9c4b-aa6c-4b15-9ac7-888c0c0cabd9,f30c9c4b-aa6c-4b15-9ac7-888c0c0cabd9,1,0,be15e947-f671-4848-ada1-51239af73615,be15e947-f671-4848-ada1-51239af73615,1,0,3fc019d1-aec8-4835-96c5-3bbf43da0b94,3fc019d1-aec8-4835-96c5-3bbf43da0b94,1,0,5371672a-c8e0-4c12-834e-f23dd885b49a,5371672a-c8e0-4c12-834e-f23dd885b49a,1,0,d3e0dd8f-886a-4441-8f05-fd629da80f07,d3e0dd8f-886a-4441-8f05-fd629da80f07,1,0,6417d7c8-6436-4907-98eb-44cd7638f3f1,6417d7c8-6436-4907-98eb-44cd7638f3f1,1,0,ba49877b-6e30-4177-a67c-00e65aa498fb,ba49877b-6e30-4177-a67c-00e65aa498fb,1,0,25b39aeb-94c3-4199-9d56-5bd87e325bf2,25b39aeb-94c3-4199-9d56-5bd87e325bf2,1,0,b0b63551-4e83-4201-af9a-b4ab150c43a5,b0b63551-4e83-4201-af9a-b4ab150c43a5,1,0,ca85912b-87b4-481e-9184-017364b4603d,ca85912b-87b4-481e-9184-017364b4603d,1,0,2bd80198-4739-4e8f-9af1-40addc91a05b,2bd80198-4739-4e8f-9af1-40addc91a05b,1,0,572019eb-ffc4-4cfd-b4ba-c09267900c6c,572019eb-ffc4-4cfd-b4ba-c09267900c6c,1,0,bb7fad68-32d3-4e6a-be62-2c4c34c94737,bb7fad68-32d3-4e6a-be62-2c4c34c94737,1,0,da462777-f926-4308-92e5-c654da53d415,da462777-f926-4308-92e5-c654da53d415,1,0,2650db63-ca98-4a8a-8c36-165548aa5279,2650db63-ca98-4a8a-8c36-165548aa5279,1,0,a69525c7-27ff-48df-b26b-325ba580a53e,a69525c7-27ff-48df-b26b-325ba580a53e,1,0,24a7de1c-1c1f-4987-91ff-02f78f15dd9e,24a7de1c-1c1f-4987-91ff-02f78f15dd9e,1,0,33c66a15-e48e-406a-a77c-02af72ae96d5,33c66a15-e48e-406a-a77c-02af72ae96d5,1,0,ebd3dcc2-1176-4ee0-b590-ee39f85fb55b,ebd3dcc2-1176-4ee0-b590-ee39f85fb55b,1,0,3b78a9d0-7382-4115-a7dc-d06c9a1962d1,3b78a9d0-7382-4115-a7dc-d06c9a1962d1,1,0,9935d602-668e-4df9-a338-0f542def878b,9935d602-668e-4df9-a338-0f542def878b,1,0,459ed297-0c0d-4bdb-90a3-da387868f040,459ed297-0c0d-4bdb-90a3-da387868f040,1,0,ccb5b9a7-1a10-4803-b455-0350afe4b584,ccb5b9a7-1a10-4803-b455-0350afe4b584,1,0,ebce49ef-755a-4ace-aeb1-b99db2a8bf6c,ebce49ef-755a-4ace-aeb1-b99db2a8bf6c,1,0,0cd18f4c-aeb9-456b-9dcd-9649d1dd486b,0cd18f4c-aeb9-456b-9dcd-9649d1dd486b,1,0,ba5e7c41-0442-4f74-ba41-631d864eafb4,ba5e7c41-0442-4f74-ba41-631d864eafb4,1,0,c86aa97a-5898-4cb2-ae62-598bddf8e99f,c86aa97a-5898-4cb2-ae62-598bddf8e99f,1,0,d3c9b925-6b74-42db-8b21-ab21d24797d1,d3c9b925-6b74-42db-8b21-ab21d24797d1,1,0,4d348ec3-9de8-4f5b-960c-4b507d0fd7ce,4d348ec3-9de8-4f5b-960c-4b507d0fd7ce,1,0,39261a2d-7c46-40b1-9f8f-02d970aa04bc,39261a2d-7c46-40b1-9f8f-02d970aa04bc,1,0,3a07e5a5-2ab1-43ef-b97f-d45cd7775d67,3a07e5a5-2ab1-43ef-b97f-d45cd7775d67,1,0,124a516f-cdab-49ce-95d1-359921140342,124a516f-cdab-49ce-95d1-359921140342,1,0,e4294611-a770-4e67-9578-a1f370879476,e4294611-a770-4e67-9578-a1f370879476,1,0,c5033dd2-0911-4124-8688-dc9dabf3155f,c5033dd2-0911-4124-8688-dc9dabf3155f,1,0,274357df-cb5c-407d-ae72-58046c310db2,274357df-cb5c-407d-ae72-58046c310db2,1,0,5467001e-d025-4669-b16e-26381ac4403f,5467001e-d025-4669-b16e-26381ac4403f,1,0,cb3a5c5b-7bdc-4e12-96f1-11b1213b6853,cb3a5c5b-7bdc-4e12-96f1-11b1213b6853,1,0,e6fe7103-4dfa-4302-a58e-ccd7fac19c9d,e6fe7103-4dfa-4302-a58e-ccd7fac19c9d,1,0,bb3a9973-67ce-479e-8668-c2f3bb20301e,bb3a9973-67ce-479e-8668-c2f3bb20301e,1,0,e5250dfe-dda2-4547-9b9e-2470ea1be1ab,e5250dfe-dda2-4547-9b9e-2470ea1be1ab,1,0,2c3fccc6-c4c0-49ec-bfc2-05ce05f27ea9,2c3fccc6-c4c0-49ec-bfc2-05ce05f27ea9,1,0,37169451-1464-4f24-8ca6-802963ffb636,37169451-1464-4f24-8ca6-802963ffb636,1,0,c3a958b1-590f-4418-a74f-5982b478cf52,c3a958b1-590f-4418-a74f-5982b478cf52,1,0,ef0e618d-0942-460a-ac65-9aca2fed976e,ef0e618d-0942-460a-ac65-9aca2fed976e,1,0,fd1ed7ec-d848-41cd-8ce3-2e5a682abcf0,fd1ed7ec-d848-41cd-8ce3-2e5a682abcf0,1,0,2ac8bd69-9fbf-4f15-b58d-397d9e903532,2ac8bd69-9fbf-4f15-b58d-397d9e903532,1,0,2ff35814-7eaa-4ae5-bbac-f46bebb36c9d,2ff35814-7eaa-4ae5-bbac-f46bebb36c9d,1,0,5b460b92-2c74-4f59-88b2-18d9aac42c04,5b460b92-2c74-4f59-88b2-18d9aac42c04,1,0,db05d35b-5f53-4c27-ba80-b477b9a98299,db05d35b-5f53-4c27-ba80-b477b9a98299,1,0,fa872ae1-b699-46fe-9d6a-e42e1388752b,fa872ae1-b699-46fe-9d6a-e42e1388752b,1,0,1acf34e6-c428-4130-82f0-5160dfcc0858,1acf34e6-c428-4130-82f0-5160dfcc0858,1,0,57046262-b9ce-4670-9cf5-6db9e58dd0d5,57046262-b9ce-4670-9cf5-6db9e58dd0d5,1,0,a9824176-36d5-4be5-9984-f4312ff48515,a9824176-36d5-4be5-9984-f4312ff48515,1,0,8e980ca0-1627-45e8-bd27-5dd1ac199459,8e980ca0-1627-45e8-bd27-5dd1ac199459,1,0,8b653beb-af9f-4f39-b691-ae14f80b7cd6,8b653beb-af9f-4f39-b691-ae14f80b7cd6,1,0,77559c11-713f-454d-aff4-56649e1350e9,77559c11-713f-454d-aff4-56649e1350e9,1,0,0c965703-c1d0-48b7-80f9-b8d869ff98f5,0c965703-c1d0-48b7-80f9-b8d869ff98f5,1,0,51f8d5ff-aec5-4c0a-ad02-df8c6cb1b4ad,51f8d5ff-aec5-4c0a-ad02-df8c6cb1b4ad,1,0,7ba42162-557b-4e34-8aca-0cdee8cb2452,7ba42162-557b-4e34-8aca-0cdee8cb2452,1,0,eee99b8e-29b6-4b7a-81f1-3d91d740c0d7,eee99b8e-29b6-4b7a-81f1-3d91d740c0d7,1,0,ad4f2d1f-1e6f-4f6a-8061-202c0e42a8e4,ad4f2d1f-1e6f-4f6a-8061-202c0e42a8e4,1,0,dd577924-c6cb-4aa9-9db5-366d8958d00f,dd577924-c6cb-4aa9-9db5-366d8958d00f,1,0,8ed8f72e-404a-4be4-a44d-ddebbad5f411,8ed8f72e-404a-4be4-a44d-ddebbad5f411,1,0,e919bc4c-86e6-44f6-be27-5a729b63d042,e919bc4c-86e6-44f6-be27-5a729b63d042,1,0,ec580e4f-1518-4923-a10e-bc1da8688b37,ec580e4f-1518-4923-a10e-bc1da8688b37,1,0,91c3902a-314f-4d40-8bcc-8dd131fed2f4,91c3902a-314f-4d40-8bcc-8dd131fed2f4,1,0,ae2b21c5-9349-49e8-9627-26f05c21f43a,ae2b21c5-9349-49e8-9627-26f05c21f43a,1,0,7e4c0b74-e807-4aa9-ad69-3c85b147bb61,7e4c0b74-e807-4aa9-ad69-3c85b147bb61,1,0,917a19d7-73db-4247-b892-397598d67879,917a19d7-73db-4247-b892-397598d67879,1,0,1f866dc3-a4bc-4e8d-96a3-a26ee073926f,1f866dc3-a4bc-4e8d-96a3-a26ee073926f,1,0,d8066600-c669-449d-a187-fdd3af8f7afa,d8066600-c669-449d-a187-fdd3af8f7afa,1,0,dadf86a6-c118-4827-b1b9-6cfee731242f,dadf86a6-c118-4827-b1b9-6cfee731242f,1,0,45bf7b20-f048-491a-a989-e50bea13d028,45bf7b20-f048-491a-a989-e50bea13d028,1,0,9ad3b432-5b49-44ee-9d8d-83c36458d927,9ad3b432-5b49-44ee-9d8d-83c36458d927,1,0,a9967bff-53b9-4295-a253-3647d956d3cb,a9967bff-53b9-4295-a253-3647d956d3cb,1,0,75f0fd5b-c594-4f3a-8ff2-3fdadf1dc96d,75f0fd5b-c594-4f3a-8ff2-3fdadf1dc96d,1,0,b8a31397-8974-44ec-92b0-7cbdc481cf7e,b8a31397-8974-44ec-92b0-7cbdc481cf7e,1,0,b29c7c0d-03eb-422b-a899-ba9a7eba99f6,b29c7c0d-03eb-422b-a899-ba9a7eba99f6,1,0,fb16c4d5-854c-4525-92be-b21fa2df5b0d,fb16c4d5-854c-4525-92be-b21fa2df5b0d,1,0,5771de21-2086-432b-ad91-de14a39bd5bc,5771de21-2086-432b-ad91-de14a39bd5bc,1,0,b15bcf3b-0228-4d02-8f20-cd6ba82f7585,b15bcf3b-0228-4d02-8f20-cd6ba82f7585,1,0,ed96fbfa-bda7-405c-9073-d0b6feffedad,ed96fbfa-bda7-405c-9073-d0b6feffedad,1,0,50c724cb-dde1-4313-9492-b1750bd0afc1,50c724cb-dde1-4313-9492-b1750bd0afc1,1,0,12901981-6106-4471-ab3a-e127c2bb4ebd,12901981-6106-4471-ab3a-e127c2bb4ebd,1,0,17ad1497-fa0e-469f-b2e2-b94a6f848ec5,17ad1497-fa0e-469f-b2e2-b94a6f848ec5,1,0,d5ea5dea-233d-4106-b9ba-f030d4f762ef,d5ea5dea-233d-4106-b9ba-f030d4f762ef,1,0,903af05e-5ac5-46aa-843b-d74f9e417c1d,903af05e-5ac5-46aa-843b-d74f9e417c1d,1,0,4dc4862e-74c3-469d-863b-09fdbe0d6be0,4dc4862e-74c3-469d-863b-09fdbe0d6be0,1,0,a344290a-c9be-47a7-95ad-ced1b52a0995,a344290a-c9be-47a7-95ad-ced1b52a0995,1,0,a4e56049-4de9-40a3-8197-a5c84a11f516,a4e56049-4de9-40a3-8197-a5c84a11f516,1,0,339c9220-fd5b-45d3-b300-cdcc8788f87e,339c9220-fd5b-45d3-b300-cdcc8788f87e,1,0,02d7d401-3c0c-4fd0-b096-1f73b6ec14c3,02d7d401-3c0c-4fd0-b096-1f73b6ec14c3,1,0,9042a6de-5048-432d-a448-7e21f2d1d24a,9042a6de-5048-432d-a448-7e21f2d1d24a,1,0,350d46bf-114e-48e7-90c6-6708d949f20d,350d46bf-114e-48e7-90c6-6708d949f20d,1,0,d047caa8-7bcf-41ac-a18e-97877d6e0a2a,d047caa8-7bcf-41ac-a18e-97877d6e0a2a,1,0,aac20ff3-5873-432e-b763-14411e623d41,aac20ff3-5873-432e-b763-14411e623d41,1,0,fbc4df3e-c235-4197-8c1f-a5e39ac63a8c,fbc4df3e-c235-4197-8c1f-a5e39ac63a8c,1,0,6df44466-8750-481a-9baf-c924f0d45353,6df44466-8750-481a-9baf-c924f0d45353,1,0,110121eb-a0eb-4662-8911-3dcc3d341a73,110121eb-a0eb-4662-8911-3dcc3d341a73,1,0,f8980c18-6b9c-4e45-919a-22e976d2a846,f8980c18-6b9c-4e45-919a-22e976d2a846,1,0,c946efb7-c67e-49c1-bf56-d3c2d7220acd,c946efb7-c67e-49c1-bf56-d3c2d7220acd,1,0,7ed6bd83-b61d-4db4-8549-acacbdda6ca2,7ed6bd83-b61d-4db4-8549-acacbdda6ca2,1,0,6b7c9f74-f2b6-463e-acb9-9f82901986cf,6b7c9f74-f2b6-463e-acb9-9f82901986cf,1,0,fc4c1d64-132b-4687-a37d-05000fdb4ba5,fc4c1d64-132b-4687-a37d-05000fdb4ba5,1,0,528777cd-090b-4b70-82f5-56def98c5893,528777cd-090b-4b70-82f5-56def98c5893,1,0,49dbe467-8832-4ede-9a05-494248619aeb,49dbe467-8832-4ede-9a05-494248619aeb,1,0,460ed9ca-10c2-491c-a641-b92ffc2a8e7c,460ed9ca-10c2-491c-a641-b92ffc2a8e7c,1,0,bd5fadd3-9264-4c3b-9bd5-51e91847a6fb,bd5fadd3-9264-4c3b-9bd5-51e91847a6fb,1,0,09c73108-8528-4970-9b7f-fff9eda7816a,09c73108-8528-4970-9b7f-fff9eda7816a,1,0,40aa936e-cb1c-4ae9-85f1-6d930a5815cc,40aa936e-cb1c-4ae9-85f1-6d930a5815cc,1,0,f568245a-d158-45dc-af92-2d411f12db7b,f568245a-d158-45dc-af92-2d411f12db7b,1,0,0f17cdac-aa17-45e6-b3d0-220b13345390,0f17cdac-aa17-45e6-b3d0-220b13345390,1,0,c675db75-d0c3-4026-b97c-6b23ecbb336a,c675db75-d0c3-4026-b97c-6b23ecbb336a,1,0,469f67fa-98b0-44b0-abd4-cae136c02834,469f67fa-98b0-44b0-abd4-cae136c02834,1,0,16a18458-999c-420e-80df-8fc10855746c,16a18458-999c-420e-80df-8fc10855746c,1,0,b794f222-0fde-439f-97a3-0da74075b415,b794f222-0fde-439f-97a3-0da74075b415,1,0,3a716aad-9b2c-48a7-b802-80732066391b,3a716aad-9b2c-48a7-b802-80732066391b,1,0,480d959f-aac8-4241-875f-78e1c1f32621,480d959f-aac8-4241-875f-78e1c1f32621,1,0,496e5de8-d75c-4536-9993-75374f070b40,496e5de8-d75c-4536-9993-75374f070b40,1,0,b4e610ba-c9c8-4b25-903b-e567dcbc2556,b4e610ba-c9c8-4b25-903b-e567dcbc2556,1,0,48febdbd-a085-4113-8511-ed7ff6be7d3c,48febdbd-a085-4113-8511-ed7ff6be7d3c,1,0,49413232-c0c3-4983-9d10-291a0399281b,49413232-c0c3-4983-9d10-291a0399281b,1,0,032bb782-96a7-4c1b-8b8f-eb4e18b555b7,032bb782-96a7-4c1b-8b8f-eb4e18b555b7,1,0,b9b076bb-38ab-4a94-8226-41a4d4d7432c,b9b076bb-38ab-4a94-8226-41a4d4d7432c,1,0,e12da8db-4037-473e-ba2b-d0ceb4534dcb,e12da8db-4037-473e-ba2b-d0ceb4534dcb,1,0,789514e5-8ea3-4a5e-88c5-ed89c4135866,789514e5-8ea3-4a5e-88c5-ed89c4135866,1,0,a16768ff-6137-43d8-8784-4805ed83632a,a16768ff-6137-43d8-8784-4805ed83632a,1,0,61971286-9f94-4a27-aa34-e10848adb70a,61971286-9f94-4a27-aa34-e10848adb70a,1,0,1e75d143-3452-496e-a137-6d7f4c4ed019,1e75d143-3452-496e-a137-6d7f4c4ed019,1,0,e0619d14-c658-4eb5-841a-3a029de28be4,e0619d14-c658-4eb5-841a-3a029de28be4,1,0,99a3b660-7875-47f7-9c6c-c552e5673deb,99a3b660-7875-47f7-9c6c-c552e5673deb,1,0,2bdcf3a5-c8e1-492c-afee-f9db68e2fbb6,2bdcf3a5-c8e1-492c-afee-f9db68e2fbb6,1,0,41cbf934-ea54-41df-abf0-09f319d2e67a,41cbf934-ea54-41df-abf0-09f319d2e67a,1,0,47246084-a5f8-4d0f-b4e2-204c1b97483a,47246084-a5f8-4d0f-b4e2-204c1b97483a,1,0,e58233ec-6cfc-4a8b-9929-689fa69cdb07,e58233ec-6cfc-4a8b-9929-689fa69cdb07,1,0,3291a891-a47c-43ca-b088-aecd3867d38c,3291a891-a47c-43ca-b088-aecd3867d38c,1,0,56cde2b4-00f2-49ba-b407-16e241c17fd2,56cde2b4-00f2-49ba-b407-16e241c17fd2,1,0,bd84fb2b-4c52-4e2f-a8c5-f289b8336145,bd84fb2b-4c52-4e2f-a8c5-f289b8336145,1,0,219ed110-f2a0-41c1-ac5a-02301b248c54,219ed110-f2a0-41c1-ac5a-02301b248c54,1,0,1c722dfd-2b07-4985-9188-17353de24771,1c722dfd-2b07-4985-9188-17353de24771,1,0,1a630496-2cdd-4c89-a1aa-ed20545ad133,1a630496-2cdd-4c89-a1aa-ed20545ad133,1,0,b0dd02ee-ea6a-43f2-baa2-abac0a1ab4bb,b0dd02ee-ea6a-43f2-baa2-abac0a1ab4bb,1,0,b19cea0e-e57a-4969-8daf-f48d3d16705f,b19cea0e-e57a-4969-8daf-f48d3d16705f,1,0,d4059340-3361-4baa-ae48-ecbfb9800a2e,d4059340-3361-4baa-ae48-ecbfb9800a2e,1,0,f78f6c43-dd90-4117-acf7-ed5b951cb964,f78f6c43-dd90-4117-acf7-ed5b951cb964,1,0,8eebd519-4989-4784-82b8-39d77eebfb17,8eebd519-4989-4784-82b8-39d77eebfb17,1,0,0a2cb6e3-d9fa-4881-b136-7b6db9efca07,0a2cb6e3-d9fa-4881-b136-7b6db9efca07,1,0,c1561ed9-2fbf-4c12-a484-07f8adbe8fa3,c1561ed9-2fbf-4c12-a484-07f8adbe8fa3,1,0,4527877b-5723-4aa5-8705-98174ac9c337,4527877b-5723-4aa5-8705-98174ac9c337,1,0,d6b21e7b-df57-4280-8c95-c269b5316018,d6b21e7b-df57-4280-8c95-c269b5316018,1,0,808c468b-6322-428d-ac6a-ccf2228b05b6,808c468b-6322-428d-ac6a-ccf2228b05b6,1,0,13664bb2-738f-4d18-b382-a7bcf8105a5a,13664bb2-738f-4d18-b382-a7bcf8105a5a,1,0,f3f56abe-9248-4555-bf99-29560eb4f9ee,f3f56abe-9248-4555-bf99-29560eb4f9ee,1,0,0dbd5d55-a85f-4c7e-ac31-7ba4ab7cc371,0dbd5d55-a85f-4c7e-ac31-7ba4ab7cc371,1,0,dd9d09ef-3b4b-4bb5-9408-9c4080049bb3,dd9d09ef-3b4b-4bb5-9408-9c4080049bb3,1,0,3eb43a06-b32d-4904-8489-6264d0207623,3eb43a06-b32d-4904-8489-6264d0207623,1,0,a18098cf-5a61-46b5-bd55-cc61d15aa6bc,a18098cf-5a61-46b5-bd55-cc61d15aa6bc,1,0,18615fe1-cfee-4888-9c09-88d1c5db39eb,18615fe1-cfee-4888-9c09-88d1c5db39eb,1,0,63e363fa-8b0c-4d48-ab1b-9c953c5ed4c0,63e363fa-8b0c-4d48-ab1b-9c953c5ed4c0,1,0,087c83c0-75e7-476b-b7c6-5be55498a190,087c83c0-75e7-476b-b7c6-5be55498a190,1,0,ec5e5413-9e77-4929-83b8-6fee70688b28,ec5e5413-9e77-4929-83b8-6fee70688b28,1,0,59cd8e3f-ecf3-4e1d-bd98-41551d5d6f68,59cd8e3f-ecf3-4e1d-bd98-41551d5d6f68,1,0,8390c864-2b84-4c45-8583-cb4a4ab49168,8390c864-2b84-4c45-8583-cb4a4ab49168,1,0,1b2fefca-fef5-4319-90cc-325444cb63a6,1b2fefca-fef5-4319-90cc-325444cb63a6,1,0,34a128be-8fbb-4dd8-ac23-9f35041feb63,34a128be-8fbb-4dd8-ac23-9f35041feb63,1,0,baa31006-e0d6-496e-a60e-27b3dfd19397,baa31006-e0d6-496e-a60e-27b3dfd19397,1,0,3007d8ff-3942-45ed-bac5-8a6c40ca060c,3007d8ff-3942-45ed-bac5-8a6c40ca060c,1,0,8bfe1474-fd12-4744-a9ab-3383bfe766b3,8bfe1474-fd12-4744-a9ab-3383bfe766b3,1,0,3af97375-f776-4129-9521-b8d65d795db6,3af97375-f776-4129-9521-b8d65d795db6,1,0,0e98801b-a45b-44cb-a341-7e43d723f6ed,0e98801b-a45b-44cb-a341-7e43d723f6ed,1,0,5b71cd3b-d5b8-4632-9678-0ab1e1d2ea91,5b71cd3b-d5b8-4632-9678-0ab1e1d2ea91,1,0,103ac72d-c386-40ea-89d4-35798d064f1a,103ac72d-c386-40ea-89d4-35798d064f1a,1,0,645ceb40-1e9f-4a67-aa7f-b9002fa066b3,645ceb40-1e9f-4a67-aa7f-b9002fa066b3,1,0,d1fe15e9-8e5c-4819-85cd-24ab31409437,d1fe15e9-8e5c-4819-85cd-24ab31409437,1,0,c8c5bfe9-ead5-4e79-9fd5-60ad275faa1e,c8c5bfe9-ead5-4e79-9fd5-60ad275faa1e,1,0,8f9826b6-890e-4ba3-a1f2-bc9ebb3238dd,8f9826b6-890e-4ba3-a1f2-bc9ebb3238dd,1,0,74f68bda-17b1-4b3c-aa64-b1014300f9b5,74f68bda-17b1-4b3c-aa64-b1014300f9b5,1,0,90a195b0-7f64-4ccb-986e-8c8c2cf12ccd,90a195b0-7f64-4ccb-986e-8c8c2cf12ccd,1,0,9f9d1f8c-7ff9-420f-a426-48f33493d9f2,9f9d1f8c-7ff9-420f-a426-48f33493d9f2,1,0,ab7bc0bc-b4b8-4a4a-aecc-1cbe14fd4975,ab7bc0bc-b4b8-4a4a-aecc-1cbe14fd4975,1,0,9f8d9594-674f-49ef-9fb8-bb64d5c40a37,9f8d9594-674f-49ef-9fb8-bb64d5c40a37,1,0,47ee7d38-9fa9-458d-abee-e11270f79494,47ee7d38-9fa9-458d-abee-e11270f79494,1,0,bb6b83ff-81f4-4c39-ad8e-8cda9ccd9cb9,bb6b83ff-81f4-4c39-ad8e-8cda9ccd9cb9,1,0,076daecf-8fcb-496b-9f13-c4faa3a8a722,076daecf-8fcb-496b-9f13-c4faa3a8a722,1,0,f1a8357b-7083-42b3-ab5d-36223a3dd2a4,f1a8357b-7083-42b3-ab5d-36223a3dd2a4,1,0,296d7725-bdd3-4210-9db9-31de5711ea9b,296d7725-bdd3-4210-9db9-31de5711ea9b,1,0,6ecc5bc2-20b3-46f3-8019-ae1e1f3de319,6ecc5bc2-20b3-46f3-8019-ae1e1f3de319,1,0,1d05f89a-23dd-4d30-8786-abe8a9a39a40,1d05f89a-23dd-4d30-8786-abe8a9a39a40,1,0,245c2c6c-7b7f-4381-9304-1d7287a215fa,245c2c6c-7b7f-4381-9304-1d7287a215fa,1,0,fd17bbe4-34d9-4832-8eea-8eeb82194e4c,fd17bbe4-34d9-4832-8eea-8eeb82194e4c,1,0,d4c72d7f-7e1f-473c-9a2b-fa675fc78731,d4c72d7f-7e1f-473c-9a2b-fa675fc78731,1,0,8bb5be12-98df-4a38-bffe-432fb13d8101,8bb5be12-98df-4a38-bffe-432fb13d8101,1,0,94209023-ce88-401c-9aff-526fb7e43709,94209023-ce88-401c-9aff-526fb7e43709,1,0,22b99094-b52a-4244-ae91-53848d82560b,22b99094-b52a-4244-ae91-53848d82560b,1,0,22c9e2fa-c1f0-41ec-b6f2-9d7357dd3479,22c9e2fa-c1f0-41ec-b6f2-9d7357dd3479,1,0,b0002134-d5c9-4508-9f0e-97f92461b590,b0002134-d5c9-4508-9f0e-97f92461b590,1,0,1506ec71-cb38-4831-a29d-dac2c4deddda,1506ec71-cb38-4831-a29d-dac2c4deddda,1,0,e05fd82b-b77b-4b7f-b300-43653017f341,e05fd82b-b77b-4b7f-b300-43653017f341,1,0,d3b5e5ee-2317-43b4-b669-3af2ce635cf3,d3b5e5ee-2317-43b4-b669-3af2ce635cf3,1,0,f15a0526-c207-42fe-aed9-438ae0c4a4b8,f15a0526-c207-42fe-aed9-438ae0c4a4b8,1,0,9d444a41-7190-48fb-9a4a-08f8e7bc32a3,9d444a41-7190-48fb-9a4a-08f8e7bc32a3,1,0,8583cab0-0620-4346-96e0-bcac40981b8a,8583cab0-0620-4346-96e0-bcac40981b8a,1,0,e1dfba26-c682-42a2-8e15-fe6f535c9ce1,e1dfba26-c682-42a2-8e15-fe6f535c9ce1,1,0,095990b1-187b-400c-941a-275f272239ca,095990b1-187b-400c-941a-275f272239ca,1,0,ba108470-350d-40c3-bb44-9852c2aa8c97,ba108470-350d-40c3-bb44-9852c2aa8c97,1,0,a37c33fa-64b0-4a1b-846a-0a236bad44f8,a37c33fa-64b0-4a1b-846a-0a236bad44f8,1,0,d8481ce1-7f64-47b0-8fc0-6642ae93aca1,d8481ce1-7f64-47b0-8fc0-6642ae93aca1,1,0,a50f4324-da44-449b-b500-74228b2aa7e0,a50f4324-da44-449b-b500-74228b2aa7e0,1,0,04236716-9c36-4a1d-b4fb-4b8c65644ab4,04236716-9c36-4a1d-b4fb-4b8c65644ab4,1,0,97276702-6686-4ac4-8360-d85369a08b20,97276702-6686-4ac4-8360-d85369a08b20,1,0,e5450ee7-e891-4f58-9a01-d2d81d5ddd6d,e5450ee7-e891-4f58-9a01-d2d81d5ddd6d,1,0,068883fe-d7ae-40e7-ad82-864867916daa,068883fe-d7ae-40e7-ad82-864867916daa,1,0,c1b02568-2095-4f83-8543-2402f67dbe3d,c1b02568-2095-4f83-8543-2402f67dbe3d,1,0,8b749b7a-5e68-4523-adc2-8b3c5ce9701c,8b749b7a-5e68-4523-adc2-8b3c5ce9701c,1,0,bf3c7edc-0791-459e-a7ac-b7e8d7ed97fe,bf3c7edc-0791-459e-a7ac-b7e8d7ed97fe,1,0,7dc6d13e-4edf-4e6a-9ee9-4b32ad889ecf,7dc6d13e-4edf-4e6a-9ee9-4b32ad889ecf,1,0,aecbd726-6952-49e6-b544-4c5cc764c24c,aecbd726-6952-49e6-b544-4c5cc764c24c,1,0,d335cfbf-bc78-4274-a178-10f60372474a,d335cfbf-bc78-4274-a178-10f60372474a,1,0,0f4411b3-addf-4fcf-8da8-c5140dea356c,0f4411b3-addf-4fcf-8da8-c5140dea356c,1,0,c501f9ab-d01b-4137-8cd0-e66103117c84,c501f9ab-d01b-4137-8cd0-e66103117c84,1,0,8d5d4e0f-b7b5-4cdc-aedc-571517fa101f,8d5d4e0f-b7b5-4cdc-aedc-571517fa101f,1,0,66e65355-1424-4c74-801c-faf5357257aa,66e65355-1424-4c74-801c-faf5357257aa,1,0,0a93187b-7ae4-4985-8089-3099dfec2b48,0a93187b-7ae4-4985-8089-3099dfec2b48,1,0,044458f3-ed9b-4afb-ae73-8f9162c032bf,044458f3-ed9b-4afb-ae73-8f9162c032bf,1,0,578f618e-5f4a-4e86-959d-39b59e973936,578f618e-5f4a-4e86-959d-39b59e973936,1,0,f74ede2e-2d28-4224-ba44-773eda7760a4,f74ede2e-2d28-4224-ba44-773eda7760a4,1,0,217df06a-1bdf-4394-b617-ed756ff17bc6,217df06a-1bdf-4394-b617-ed756ff17bc6,1,0,a1572e97-a487-497a-9062-49315e237e0f,a1572e97-a487-497a-9062-49315e237e0f,1,0,969cdcb8-0f2a-427f-93a0-e7ae38f465e8,969cdcb8-0f2a-427f-93a0-e7ae38f465e8,1,0,3c5d87a0-cfce-464a-b946-64c5a589a376,3c5d87a0-cfce-464a-b946-64c5a589a376,1,0,2d22c67d-4795-4a6b-bc81-a3ed1eb28367,2d22c67d-4795-4a6b-bc81-a3ed1eb28367,1,0,763de8d1-7f53-41b6-8d97-7da724e9f763,763de8d1-7f53-41b6-8d97-7da724e9f763,1,0,75592ed4-2aab-4dfc-ae7b-d93e2a98370f,75592ed4-2aab-4dfc-ae7b-d93e2a98370f,1,0,4ad59c75-cca4-4968-82e6-babd72d8b318,4ad59c75-cca4-4968-82e6-babd72d8b318,1,0,c248de15-63a2-48ec-8695-7a5213d4fc9b,c248de15-63a2-48ec-8695-7a5213d4fc9b,1,0,272ff0f9-7266-4c22-be12-fe62682b56a5,272ff0f9-7266-4c22-be12-fe62682b56a5,1,0,9f141dd5-d866-4c25-b58a-a7766a08b4e7,9f141dd5-d866-4c25-b58a-a7766a08b4e7,1,0,0570d846-889d-4cfc-98fb-a1ad0181597f,0570d846-889d-4cfc-98fb-a1ad0181597f,1,0,19e17c58-953f-4917-8b6a-c88808fcca36,19e17c58-953f-4917-8b6a-c88808fcca36,1,0,4804316d-3765-4a83-8438-10e8e82656db,4804316d-3765-4a83-8438-10e8e82656db,1,0,59458556-e343-4215-8e6c-69f924ec4183,59458556-e343-4215-8e6c-69f924ec4183,1,0,dd553dca-7eba-41bf-8939-2c61e170ff65,dd553dca-7eba-41bf-8939-2c61e170ff65,1,0,b4ecf3dc-a2aa-406e-a593-1700ea8746bc,b4ecf3dc-a2aa-406e-a593-1700ea8746bc,1,0,933d7ce7-ea82-4b26-8d1b-dc92cb5ac92d,933d7ce7-ea82-4b26-8d1b-dc92cb5ac92d,1,0,8099e978-28cc-4ade-ac5a-3785f3a45f70,8099e978-28cc-4ade-ac5a-3785f3a45f70,1,0,11eff613-8077-41fa-8cb8-5e8dc27d0e4f,11eff613-8077-41fa-8cb8-5e8dc27d0e4f,1,0,fe023ca5-f11a-4b98-99c1-363508e4ea4a,fe023ca5-f11a-4b98-99c1-363508e4ea4a,1,0,6f8d515e-13d9-45f8-9793-3757f5b85f81,6f8d515e-13d9-45f8-9793-3757f5b85f81,1,0,25ec541c-c437-4318-b2a8-5146df6ae080,25ec541c-c437-4318-b2a8-5146df6ae080,1,0,148754ed-3063-40a7-a3c3-8ad105552370,148754ed-3063-40a7-a3c3-8ad105552370,1,0,ab3f0862-c355-4fd7-a2a7-4eb8278de510,ab3f0862-c355-4fd7-a2a7-4eb8278de510,1,0,85bbfe20-a6a4-49ca-8f20-342f4cbe8258,85bbfe20-a6a4-49ca-8f20-342f4cbe8258,1,0,c12c3f3b-3a96-4e70-b131-8d7bd765095f,c12c3f3b-3a96-4e70-b131-8d7bd765095f,1,0,70ee4b32-80d1-4b79-a322-0433f1b8c7f1,70ee4b32-80d1-4b79-a322-0433f1b8c7f1,1,0,c563588c-346e-499e-ae33-9ff3cb62e658,c563588c-346e-499e-ae33-9ff3cb62e658,1,0,40dbc001-97b6-4188-8de9-3adac670bac4,40dbc001-97b6-4188-8de9-3adac670bac4,1,0,a4ed8b24-bd23-45a7-9f34-61b25b91d0c6,a4ed8b24-bd23-45a7-9f34-61b25b91d0c6,1,0,65efaa10-3239-4f0f-a08e-88c89d9d8d5a,65efaa10-3239-4f0f-a08e-88c89d9d8d5a,1,0,93aa5247-6823-4f70-9d47-e5a0f409828a,93aa5247-6823-4f70-9d47-e5a0f409828a,1,0,030c6a22-a3d5-4cf2-9f7b-dc4fe3732f83,030c6a22-a3d5-4cf2-9f7b-dc4fe3732f83,1,0,b19f1223-5ebe-4446-bacc-bc7d53486f2e,b19f1223-5ebe-4446-bacc-bc7d53486f2e,1,0,6ea7e8e9-0faa-43fd-b9c8-1a7b8f899d6d,6ea7e8e9-0faa-43fd-b9c8-1a7b8f899d6d,1,0,7be1decf-feb1-422b-a3f2-f60d08fdb0e6,7be1decf-feb1-422b-a3f2-f60d08fdb0e6,1,0,bf3167d6-3047-482a-b280-184f446ae7a3,bf3167d6-3047-482a-b280-184f446ae7a3,1,0,50c47c0a-a199-4020-9df4-91b17c159454,50c47c0a-a199-4020-9df4-91b17c159454,1,0,c1d449af-8a6e-4cb0-b2c9-50ea5405c44c,c1d449af-8a6e-4cb0-b2c9-50ea5405c44c,1,0,faecdc33-fed8-4b44-96f4-4215c26959b6,faecdc33-fed8-4b44-96f4-4215c26959b6,1,0,09c29992-47a8-4fca-bd95-e7dbc53e8c4c,09c29992-47a8-4fca-bd95-e7dbc53e8c4c,1,0,f07cf7bd-6f3f-426a-8b71-ba1dcb827654,f07cf7bd-6f3f-426a-8b71-ba1dcb827654,1,0,9df3792e-a4ee-4a2c-9296-c1384925521e,9df3792e-a4ee-4a2c-9296-c1384925521e,1,0,03d423db-f98a-468f-9040-5b76454e5a98,03d423db-f98a-468f-9040-5b76454e5a98,1,0,08f394f9-d254-4fe5-8651-a69c96de7a62,08f394f9-d254-4fe5-8651-a69c96de7a62,1,0,e90ec54b-8b86-43df-8c3c-18c6676bf3f1,e90ec54b-8b86-43df-8c3c-18c6676bf3f1,1,0,6aff6b2f-660b-4d75-9064-fed7a6b0feac,6aff6b2f-660b-4d75-9064-fed7a6b0feac,1,0,53502127-9f47-4e2e-b3ed-eb3c3aae1c50,53502127-9f47-4e2e-b3ed-eb3c3aae1c50,1,0,2fcdd0b5-b738-4e19-8bbf-13a72d7014ec,2fcdd0b5-b738-4e19-8bbf-13a72d7014ec,1,0,59dc7e8d-6f5c-4e1b-816e-5fc15c0e96e0,59dc7e8d-6f5c-4e1b-816e-5fc15c0e96e0,1,0,e60a9221-7676-456f-8a01-b317b03a278b,e60a9221-7676-456f-8a01-b317b03a278b,1,0,4e81ec90-f668-49ca-9193-22337bafb01b,4e81ec90-f668-49ca-9193-22337bafb01b,1,0,104c7c31-5bbd-4242-b29a-2c0d8b69a1b9,104c7c31-5bbd-4242-b29a-2c0d8b69a1b9,1,0,cd60adec-52d6-4fa8-85ca-26551196432c,cd60adec-52d6-4fa8-85ca-26551196432c,1,0,4dfbabd7-d5e5-4b2a-b8d1-752e416629a0,4dfbabd7-d5e5-4b2a-b8d1-752e416629a0,1,0,b71ddbdb-08bb-46be-a79d-319c4a557e76,b71ddbdb-08bb-46be-a79d-319c4a557e76,1,0,d3dfa867-3d52-4872-a69e-f27636abe1bd,d3dfa867-3d52-4872-a69e-f27636abe1bd,1,0,6952d1aa-7132-4e40-8542-f64a4dc1e029,6952d1aa-7132-4e40-8542-f64a4dc1e029,1,0,51a1bc4c-9139-42a4-92c3-f45c837cbdb9,51a1bc4c-9139-42a4-92c3-f45c837cbdb9,1,0,1621811b-dfd3-4c58-8e15-ced16690147a,1621811b-dfd3-4c58-8e15-ced16690147a,1,0,3f266e51-0476-4b7f-8d61-6f9f4456049d,3f266e51-0476-4b7f-8d61-6f9f4456049d,1,0,2b9ce591-ff13-4c2d-85c4-632a2609a211,2b9ce591-ff13-4c2d-85c4-632a2609a211,1,0,689ca0ec-61ce-4590-b73b-ac81e8f1d459,689ca0ec-61ce-4590-b73b-ac81e8f1d459,1,0,3ea1895f-66d0-4bbb-a66b-0c9d411a7c55,3ea1895f-66d0-4bbb-a66b-0c9d411a7c55,1,0,55ad36d7-399e-4b82-8d1c-d45bd890abfe,55ad36d7-399e-4b82-8d1c-d45bd890abfe,1,0,0f3b9012-7bf6-4451-b0c3-139d98d9c2c1,0f3b9012-7bf6-4451-b0c3-139d98d9c2c1,1,0,1b39a65f-5425-4bcb-85bd-1425274af8a8,1b39a65f-5425-4bcb-85bd-1425274af8a8,1,0,392a0618-a41a-4713-a561-f3a80b85abd8,392a0618-a41a-4713-a561-f3a80b85abd8,1,0,a453384d-658d-40f1-ac69-578aa3a24e39,a453384d-658d-40f1-ac69-578aa3a24e39,1,0,2215a441-b9b1-4e5c-8df3-e6cee9226c43,2215a441-b9b1-4e5c-8df3-e6cee9226c43,1,0,2a8d4908-ea0d-4837-be3f-bd78f6b61254,2a8d4908-ea0d-4837-be3f-bd78f6b61254,1,0,ec1deb79-7369-4b26-8e91-f51399e8052a,ec1deb79-7369-4b26-8e91-f51399e8052a,1,0,75dde4fb-3a1a-450c-95c2-c1f95a781db9,75dde4fb-3a1a-450c-95c2-c1f95a781db9,1,0,0ae3ac56-160a-417e-9952-719d02e7f089,0ae3ac56-160a-417e-9952-719d02e7f089,1,0,f5b3983d-d22d-44a8-9069-0a60d8b858bf,f5b3983d-d22d-44a8-9069-0a60d8b858bf,1,0,a64b15fa-fc34-43fe-a366-d27c0f1c3df2,a64b15fa-fc34-43fe-a366-d27c0f1c3df2,1,0,8b13e848-8fd3-4326-bd18-5a5b12ed3dc5,8b13e848-8fd3-4326-bd18-5a5b12ed3dc5,1,0,b9a6b053-2b93-4946-9531-040d3131dcc5,b9a6b053-2b93-4946-9531-040d3131dcc5,1,0,9f36d26e-aa71-44d5-ac27-9aaa643555c3,9f36d26e-aa71-44d5-ac27-9aaa643555c3,1,0,87b8b5d7-d3d6-450a-adb1-5c875257ec80,87b8b5d7-d3d6-450a-adb1-5c875257ec80,1,0,e3640efe-e46c-4588-b251-dda23bf0641d,e3640efe-e46c-4588-b251-dda23bf0641d,1,0,bb6e6574-4328-4cf5-a043-a7d8f6c81414,bb6e6574-4328-4cf5-a043-a7d8f6c81414,1,0,b46b5090-5eb1-4950-9031-8b43f611fa9c,b46b5090-5eb1-4950-9031-8b43f611fa9c,1,0,522a4bff-34d3-46b2-8c66-0b30d881a86e,522a4bff-34d3-46b2-8c66-0b30d881a86e,1,0,3d7908b1-bd82-475e-8488-fafcbe3458ee,3d7908b1-bd82-475e-8488-fafcbe3458ee,1,0,1bac040b-83e4-402f-a9bf-d6a7b10c91e0,1bac040b-83e4-402f-a9bf-d6a7b10c91e0,1,0,e9c632b0-7977-4e44-ac56-882617ad7cdc,e9c632b0-7977-4e44-ac56-882617ad7cdc,1,0,e84acba7-7e0f-43e8-a545-6e53d529d5d4,e84acba7-7e0f-43e8-a545-6e53d529d5d4,1,0,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,3b089d90-7ece-4b74-a4dc-e436d9d31b3b,1,0,0f9c08c2-e7fa-4ea0-a935-f927feb01131,0f9c08c2-e7fa-4ea0-a935-f927feb01131,1,0,6086d53f-f1b2-4126-ab46-64705fe63b87,6086d53f-f1b2-4126-ab46-64705fe63b87,1,0,62a6b1c9-8288-4fa1-a17d-241b85a5e4b0,62a6b1c9-8288-4fa1-a17d-241b85a5e4b0,1,0,6d042890-27b2-4efc-935e-8190bb57c037,6d042890-27b2-4efc-935e-8190bb57c037,1,0,23e79add-7f1c-422a-9df1-8f76ebf805df,23e79add-7f1c-422a-9df1-8f76ebf805df,1,0,9295d88f-0865-440c-a98a-4710c50211be,9295d88f-0865-440c-a98a-4710c50211be,1,0,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,90aa51ae-434d-48f4-bfe3-0e1dd3aeea6f,1,0,38ac9a13-665a-4201-b5cc-687fe4a01130,38ac9a13-665a-4201-b5cc-687fe4a01130,1,0,97c59096-b2dc-45d0-a580-b3018a04f9af,97c59096-b2dc-45d0-a580-b3018a04f9af,1,0,5dcd8e28-b058-405a-bac4-defab7d4b789,5dcd8e28-b058-405a-bac4-defab7d4b789,1,0,6fbf63b7-1692-495e-a8ec-bdda182997a3,6fbf63b7-1692-495e-a8ec-bdda182997a3,1,0,077af11c-fd3c-4e87-b169-5f3137464f77,077af11c-fd3c-4e87-b169-5f3137464f77,1,0,8172256e-f51e-4de0-bd07-3668785f4cb9,8172256e-f51e-4de0-bd07-3668785f4cb9,1,0,ccb54dc9-3d12-43d0-af6a-138d3526f5d5,ccb54dc9-3d12-43d0-af6a-138d3526f5d5,1,0,da8f7f30-eb80-44db-a451-348306c90cd8,da8f7f30-eb80-44db-a451-348306c90cd8,1,0,b82bcff8-49c9-44a9-8a9f-4428b0cc54a5,b82bcff8-49c9-44a9-8a9f-4428b0cc54a5,1,0,870b4d6d-0b89-4eda-a2b3-5c6db7dbe864,870b4d6d-0b89-4eda-a2b3-5c6db7dbe864,1,0,c172aeaf-b444-47c0-baee-80ccd91fe934,c172aeaf-b444-47c0-baee-80ccd91fe934,1,0,757ea742-8c14-4e0a-a867-432eee5cfc64,757ea742-8c14-4e0a-a867-432eee5cfc64,1,0,b8c36d5a-7966-4978-9225-67502b9c60a4,b8c36d5a-7966-4978-9225-67502b9c60a4,1,0,37ea0c64-2fec-4c2e-922b-d3a2f01f3e22,37ea0c64-2fec-4c2e-922b-d3a2f01f3e22,1,0,9847676d-f44d-46a0-83e2-4a43a835caf8,9847676d-f44d-46a0-83e2-4a43a835caf8,1,0,43c18cae-21a9-413b-a350-d5cf826980f0,43c18cae-21a9-413b-a350-d5cf826980f0,1,0,16773cdb-b979-42d5-a2a5-d4b79e8737bd,16773cdb-b979-42d5-a2a5-d4b79e8737bd,1,0,c28a190a-f487-4e99-b8f8-6928268086f8,c28a190a-f487-4e99-b8f8-6928268086f8,1,0,94e02f76-8656-4999-9470-dd996118400c,94e02f76-8656-4999-9470-dd996118400c,1,0,9effd265-3783-44e2-8698-80dd82137546,9effd265-3783-44e2-8698-80dd82137546,1,0,bef52020-98f8-465b-8981-e5f8eed62308,bef52020-98f8-465b-8981-e5f8eed62308,1,0,19897ad0-bdb5-439c-b4a2-a773c0ce5cf5,19897ad0-bdb5-439c-b4a2-a773c0ce5cf5,1,0,e731dab7-df9e-48ae-8542-4c0c30666ae9,e731dab7-df9e-48ae-8542-4c0c30666ae9,1,0,f321e378-6d50-4567-8434-813f367d3a65,f321e378-6d50-4567-8434-813f367d3a65,1,0,27246fd8-a8a3-4244-b49a-c0372a812167,27246fd8-a8a3-4244-b49a-c0372a812167,1,0,6ac484a9-4d96-4521-9b8c-66212a365725,6ac484a9-4d96-4521-9b8c-66212a365725,1,0,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,1,0,bde05768-2dd6-4800-985d-27075f610cca,bde05768-2dd6-4800-985d-27075f610cca,1,0,d18956cf-e449-48cc-a127-01b5dc910ea2,d18956cf-e449-48cc-a127-01b5dc910ea2,1,0,8e5487a3-b5e5-40ca-88f3-5b0ea0c4d481,8e5487a3-b5e5-40ca-88f3-5b0ea0c4d481,1,0,5d338e31-a56b-45f0-8a62-0270ca543f6a,5d338e31-a56b-45f0-8a62-0270ca543f6a,1,0,e352fc19-96be-4410-a516-bc58cc234422,e352fc19-96be-4410-a516-bc58cc234422,1,0,9b742da4-1696-4c06-9dfa-dd85c9286c74,9b742da4-1696-4c06-9dfa-dd85c9286c74,1,0,a7098d41-a978-4c77-937c-8deebdfe0bcd,a7098d41-a978-4c77-937c-8deebdfe0bcd,1,0,db1062bc-4164-4095-9640-9804c0ebcd0b,db1062bc-4164-4095-9640-9804c0ebcd0b,1,0,c11d967b-1250-4345-90b0-011a96c5ae5e,c11d967b-1250-4345-90b0-011a96c5ae5e,1,0,ea7c61ff-745c-4908-9a94-bba022d12de4,ea7c61ff-745c-4908-9a94-bba022d12de4,1,0,ef8a82f2-d3e5-4f0d-8a16-024d9cdacce2,ef8a82f2-d3e5-4f0d-8a16-024d9cdacce2,1,0,24eed105-f612-4340-ad79-388a7b39b58c,24eed105-f612-4340-ad79-388a7b39b58c,1,0,8e4bd2ac-d555-490e-87ab-1b0cdd6f72e9,8e4bd2ac-d555-490e-87ab-1b0cdd6f72e9,1,0,4d6683a3-1edd-4d04-8e02-0be002e4e5a4,4d6683a3-1edd-4d04-8e02-0be002e4e5a4,1,0,c7ffd8ab-15e9-4cf1-a7fd-d05534dff000,c7ffd8ab-15e9-4cf1-a7fd-d05534dff000,1,0,53caada5-1d53-45dc-9432-90075ddca890,53caada5-1d53-45dc-9432-90075ddca890,1,0,d1472d23-954b-4069-b2d6-df08c6ec0be1,d1472d23-954b-4069-b2d6-df08c6ec0be1,1,0,93fe2ce6-7193-42bc-a966-4653b7989eaa,93fe2ce6-7193-42bc-a966-4653b7989eaa,1,0,6a2add61-edb7-4561-bae9-06b3741e7726,6a2add61-edb7-4561-bae9-06b3741e7726,1,0,a7fe0aa5-722c-4a09-889b-ee422421addc,a7fe0aa5-722c-4a09-889b-ee422421addc,1,0,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,798bd34c-d0ee-4590-9b1d-8bc47e42ca8c,1,0,0c838a31-2b08-447c-b39a-a613cfba526c,0c838a31-2b08-447c-b39a-a613cfba526c,1,0,b25083c5-9b97-49a4-b6c3-bbf8d7f91cd3,b25083c5-9b97-49a4-b6c3-bbf8d7f91cd3,1,0,86c679c0-3531-4622-9a1f-3d9d6ccdd431,86c679c0-3531-4622-9a1f-3d9d6ccdd431,1,0,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,1,0,670c62c1-1a33-4dec-9540-5b4c1fe29074,670c62c1-1a33-4dec-9540-5b4c1fe29074,1,0,cc664d81-d0af-4d25-ae29-64f422e51bf2,cc664d81-d0af-4d25-ae29-64f422e51bf2,1,0,e1314cd1-e662-4c29-ad51-492cb0029883,e1314cd1-e662-4c29-ad51-492cb0029883,1,0,0cf49621-afc5-4c8d-a1b5-f8c30db9f415,0cf49621-afc5-4c8d-a1b5-f8c30db9f415,1,0,4718392b-477c-496b-9d28-ddbdaa7a04f2,4718392b-477c-496b-9d28-ddbdaa7a04f2,1,0,879844f0-30b4-47f5-8d2e-5fea29910368,879844f0-30b4-47f5-8d2e-5fea29910368,1,0,303334ba-2785-47fe-a094-84f9dea33be2,303334ba-2785-47fe-a094-84f9dea33be2,1,0,9690842c-7a2c-4b5d-a238-f730afc49a7b,9690842c-7a2c-4b5d-a238-f730afc49a7b,1,0,04424730-6992-4a5b-838b-7a7c16dedbd0,04424730-6992-4a5b-838b-7a7c16dedbd0,1,0,cd6b749d-55a4-4e10-a933-8d97bfe2f9df,cd6b749d-55a4-4e10-a933-8d97bfe2f9df,1,0,240bec31-cd59-477b-8459-8e3278da22dc,240bec31-cd59-477b-8459-8e3278da22dc,1,0,b76c3bd6-924a-4378-acbe-6f17232b201b,b76c3bd6-924a-4378-acbe-6f17232b201b,1,0,e0519f0c-9c99-4f5c-a3a9-27adce45737d,e0519f0c-9c99-4f5c-a3a9-27adce45737d,1,0,45eec13d-e5e5-4a2e-ad6c-2780bde15ef2,45eec13d-e5e5-4a2e-ad6c-2780bde15ef2,1,0,0874a3c0-0d16-4172-b467-f0666d5fcaee,0874a3c0-0d16-4172-b467-f0666d5fcaee,1,0,cc380a19-ab29-4f20-93ad-9a58cd4de56e,cc380a19-ab29-4f20-93ad-9a58cd4de56e,1,0,6a5f7521-270e-476e-88ec-a8cf79ea61a6,6a5f7521-270e-476e-88ec-a8cf79ea61a6,1,0,9bb841e7-e629-4a1f-8ff6-f8bca0b2b133,9bb841e7-e629-4a1f-8ff6-f8bca0b2b133,1,0,74067eee-6cd4-4ae3-becc-457ecb51dc9a,74067eee-6cd4-4ae3-becc-457ecb51dc9a,1,0,e54a8786-86a4-48e3-a210-aaae4e5fce8c,e54a8786-86a4-48e3-a210-aaae4e5fce8c,1,0,86c86ea2-d14e-4443-b36c-c1c17c4f768a,86c86ea2-d14e-4443-b36c-c1c17c4f768a,1,0,14512818-58b0-44cc-b00d-d37913c57aad,14512818-58b0-44cc-b00d-d37913c57aad,1,0,57964dd6-4b0b-4590-bc44-de744cc423af,57964dd6-4b0b-4590-bc44-de744cc423af,1,0,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,1,0,343b979a-97e3-4eac-a314-3bd3eea9c15c,343b979a-97e3-4eac-a314-3bd3eea9c15c,1,0,b2f17ef1-3f6f-4029-b3e2-28d6b79c5b76,b2f17ef1-3f6f-4029-b3e2-28d6b79c5b76,1,0,f5bb88eb-c239-4ae3-a297-dfbbd679e008,f5bb88eb-c239-4ae3-a297-dfbbd679e008,1,0,bb350b39-1f4d-460a-98c9-8d2308cf22f0,bb350b39-1f4d-460a-98c9-8d2308cf22f0,1,0,f259b6b4-d582-429f-a16f-027a6bcb7438,f259b6b4-d582-429f-a16f-027a6bcb7438,1,0,9f32e85c-2ed6-41db-b0ec-6d8596940e80,9f32e85c-2ed6-41db-b0ec-6d8596940e80,1,0,46e0522b-b88b-43b2-9067-a5359e90994b,46e0522b-b88b-43b2-9067-a5359e90994b,1,0,727c7c01-83e6-4d59-afa4-ee36f1cbacf2,727c7c01-83e6-4d59-afa4-ee36f1cbacf2,1,0,72d41d01-9c9d-4fbe-8a39-932d82d171ef,72d41d01-9c9d-4fbe-8a39-932d82d171ef,1,0,697d5715-dd04-40be-9b28-539734725158,697d5715-dd04-40be-9b28-539734725158,1,0,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,d831a8ac-88a4-4191-ab0b-7538dfb3e7d7,1,0,d95fcb37-fc65-466d-93e2-489f41683276,d95fcb37-fc65-466d-93e2-489f41683276,1,0,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,c6b0d31e-7b68-4c7f-a565-0ac8a7c11143,1,0,a27a9296-46bb-49a1-8308-db675baa81d0,a27a9296-46bb-49a1-8308-db675baa81d0,1,0,1456f317-360c-4190-b2d1-1be7484369a5,1456f317-360c-4190-b2d1-1be7484369a5,1,0,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,5ac74bb3-a4df-47db-ad87-6cb95b85c51f,1,0,4867948f-b027-44ae-b78c-a94e00eed52b,4867948f-b027-44ae-b78c-a94e00eed52b,1,0,aa0c32ae-da52-4df9-8b77-99ea31f8df81,aa0c32ae-da52-4df9-8b77-99ea31f8df81,1,0,d7dcd391-3a0e-4aa9-9b53-467a1de67593,d7dcd391-3a0e-4aa9-9b53-467a1de67593,1,0,39ed5463-b1c0-44bb-9d71-4ef08007a7d0,39ed5463-b1c0-44bb-9d71-4ef08007a7d0,1,0,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,3d4cb11a-7ce7-4c46-a427-99d6f41f08bf,1,0,56cc2ba7-fee3-4dcb-9a2a-93dc94a5ee1f,56cc2ba7-fee3-4dcb-9a2a-93dc94a5ee1f,1,0,ef044879-e731-418a-b917-6a685f27c5f4,ef044879-e731-418a-b917-6a685f27c5f4,1,0,618d13d5-fd1f-4b70-ad45-dd6a17a50730,618d13d5-fd1f-4b70-ad45-dd6a17a50730,1,0,58037b76-b548-4f07-bd67-67e552a5c6e5,58037b76-b548-4f07-bd67-67e552a5c6e5,1,0,00e48a23-eb5b-4a29-b36c-218ab9760f23,00e48a23-eb5b-4a29-b36c-218ab9760f23,1,0,68f19104-5fa3-4f28-a84b-bf68c3bed49b,68f19104-5fa3-4f28-a84b-bf68c3bed49b,1,0,ab0b6824-99ba-4b8d-857d-ed8ef017d499,ab0b6824-99ba-4b8d-857d-ed8ef017d499,1,0,f88ccd7a-8d15-4b24-addf-da522a0b4a43,f88ccd7a-8d15-4b24-addf-da522a0b4a43,1,0,0f8e87d4-ffb7-4cff-a2d3-6d5c5219ff0b,0f8e87d4-ffb7-4cff-a2d3-6d5c5219ff0b,1,0,1511c2e3-aeb4-422a-b6ae-03412b714c93,1511c2e3-aeb4-422a-b6ae-03412b714c93,1,0,349378d1-abe3-44de-84a4-d525b08e0474,349378d1-abe3-44de-84a4-d525b08e0474,1,0,1526b18d-7fab-414e-a5b2-377b67ac0b55,1526b18d-7fab-414e-a5b2-377b67ac0b55,1,0,c561fe6b-53ea-435b-a230-1850e2dc1ff5,c561fe6b-53ea-435b-a230-1850e2dc1ff5,1,0,aba7605f-6baf-42a8-b5ad-8f71c780b81f,aba7605f-6baf-42a8-b5ad-8f71c780b81f,1,0,8fc19eca-1a15-4758-af4b-79637e51edfb,8fc19eca-1a15-4758-af4b-79637e51edfb,1,0,be9144ce-5560-47bb-8c5e-9beefd15bfc3,be9144ce-5560-47bb-8c5e-9beefd15bfc3,1,0,ad09d1e6-5982-4e1c-864e-452ac5b2915a,ad09d1e6-5982-4e1c-864e-452ac5b2915a,1,0,c0bc4cc4-b5ca-47c2-b589-c0d25bb63f1e,c0bc4cc4-b5ca-47c2-b589-c0d25bb63f1e,1,0,84a159ed-bc5f-4497-94d1-94b187b0bffe,84a159ed-bc5f-4497-94d1-94b187b0bffe,1,0,0dcc3bbf-afbe-4a4e-bc4a-17534d5fab28,0dcc3bbf-afbe-4a4e-bc4a-17534d5fab28,1,0,bf75c4de-b36a-4a7f-8d84-9fa3d020a6cb,bf75c4de-b36a-4a7f-8d84-9fa3d020a6cb,1,0,f95adb50-fa0b-434c-93dd-b7fd211220b7,f95adb50-fa0b-434c-93dd-b7fd211220b7,1,0,d02fe5f5-412c-4c4f-bfc7-c1d7206cd092,d02fe5f5-412c-4c4f-bfc7-c1d7206cd092,1,0,2233ce53-b8a8-4c83-97a2-683c8575462a,2233ce53-b8a8-4c83-97a2-683c8575462a,1,0,d6a5083f-ca9a-42ed-b202-2983e4ba21c2,d6a5083f-ca9a-42ed-b202-2983e4ba21c2,1,0,bd69bf55-dee0-4553-8f90-5fd025c0f773,bd69bf55-dee0-4553-8f90-5fd025c0f773,1,0,2071f210-dc13-43c0-a58e-b982821d6842,2071f210-dc13-43c0-a58e-b982821d6842,1,0,3cda70d0-3116-4508-82ea-5ea0f0921262,3cda70d0-3116-4508-82ea-5ea0f0921262,1,0,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,1,0,c2ef8d6b-de7b-430d-ac30-76cdaf0579c2,c2ef8d6b-de7b-430d-ac30-76cdaf0579c2,1,0,f415296e-fceb-4835-abe9-17bb17a5d5e5,f415296e-fceb-4835-abe9-17bb17a5d5e5,1,0,0e805e1f-3797-4ef9-94d3-0ec58ac1b605,0e805e1f-3797-4ef9-94d3-0ec58ac1b605,1,0,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,1,0,19056365-9ff1-4733-876e-a7ebdbbe0557,19056365-9ff1-4733-876e-a7ebdbbe0557,1,0,c8679d82-075c-4556-8231-c004d144fe61,c8679d82-075c-4556-8231-c004d144fe61,1,0,5e09dc5e-bbb7-4c38-b609-940c24f63c84,5e09dc5e-bbb7-4c38-b609-940c24f63c84,1,0,017b28eb-8ba9-465e-a748-20eadbeb4ea2,017b28eb-8ba9-465e-a748-20eadbeb4ea2,1,0,c0bb2d66-94c9-4bc6-afd5-534075e8395b,c0bb2d66-94c9-4bc6-afd5-534075e8395b,1,0,db7cc693-1645-4416-a9d9-5a7584cd3bbc,db7cc693-1645-4416-a9d9-5a7584cd3bbc,1,0,c849fb09-7833-49c8-9461-98426dc6c0af,c849fb09-7833-49c8-9461-98426dc6c0af,1,0,6c58fc3a-37f8-44b7-b076-2c10ce09b554,6c58fc3a-37f8-44b7-b076-2c10ce09b554,1,0,8ca0258c-96d8-4a12-b94f-db968195ee0a,8ca0258c-96d8-4a12-b94f-db968195ee0a,1,0,245c07a9-98b0-452b-b899-dc8751ab7ce0,245c07a9-98b0-452b-b899-dc8751ab7ce0,1,0,b0ca1b85-e1de-4b7c-8261-7f9e8a6a72eb,b0ca1b85-e1de-4b7c-8261-7f9e8a6a72eb,1,0,ae67dfe5-bb36-4400-81f5-8dab1fd0ca6e,ae67dfe5-bb36-4400-81f5-8dab1fd0ca6e,1,0,91d7687b-7627-473f-a08d-433f9d385107,91d7687b-7627-473f-a08d-433f9d385107,1,0,83db1b00-e9e3-41da-8a59-47589dcfd618,83db1b00-e9e3-41da-8a59-47589dcfd618,1,0,91d2d798-1498-4c52-aa7b-99db4b992876,91d2d798-1498-4c52-aa7b-99db4b992876,1,0,e85a03d3-e7c7-4058-992a-515a557d9e52,e85a03d3-e7c7-4058-992a-515a557d9e52,1,0,d3a1d247-8f4a-45af-9861-7e313a100209,d3a1d247-8f4a-45af-9861-7e313a100209,1,0,83385f31-2cdf-44a1-85c3-461e4ad5fd45,83385f31-2cdf-44a1-85c3-461e4ad5fd45,1,0,b55b06db-604e-4fb9-9253-638c747bd8f9,b55b06db-604e-4fb9-9253-638c747bd8f9,1,0,9cd9a3e1-b52c-4151-abd3-2744ed03cc1b,9cd9a3e1-b52c-4151-abd3-2744ed03cc1b,1,0,9aa0c1ef-45b4-405b-ad6f-ebcf876e6318,9aa0c1ef-45b4-405b-ad6f-ebcf876e6318,1,0,deb69010-80b0-4e28-acc7-8c50e8e6f873,deb69010-80b0-4e28-acc7-8c50e8e6f873,1,0,1a9177fe-6699-42b3-9588-eed9c6008c2d,1a9177fe-6699-42b3-9588-eed9c6008c2d,1,0,4f49412a-fbbe-4ee1-9c2b-affe5266bba7,4f49412a-fbbe-4ee1-9c2b-affe5266bba7,1,0,ae698468-f42a-4400-aee6-fd849740e634,ae698468-f42a-4400-aee6-fd849740e634,1,0,d62bdb25-f261-4282-aa72-52e2b107642c,d62bdb25-f261-4282-aa72-52e2b107642c,1,0,ddec19a2-2a76-4eeb-9cbb-6bc2b4a32bc8,ddec19a2-2a76-4eeb-9cbb-6bc2b4a32bc8,1,0,6438435e-97cc-4bd2-98dc-e21cee55bb0f,6438435e-97cc-4bd2-98dc-e21cee55bb0f,1,0,00579e31-e97d-4d79-ba25-b8d500a17e7f,00579e31-e97d-4d79-ba25-b8d500a17e7f,1,0,5001bea4-c8f9-4950-9eda-d33125e3bb46,5001bea4-c8f9-4950-9eda-d33125e3bb46,1,0,e815010d-e03d-46e4-b482-c1556902cc26,e815010d-e03d-46e4-b482-c1556902cc26,1,0,98bdfd19-b993-43bd-b2e1-3535d001ff29,98bdfd19-b993-43bd-b2e1-3535d001ff29,1,0,00a1fdb2-d233-4179-b78a-a7e27d9c03c5,00a1fdb2-d233-4179-b78a-a7e27d9c03c5,1,0,dd03e170-4186-495b-ae1c-fc66385d7ccf,dd03e170-4186-495b-ae1c-fc66385d7ccf,1,0,81fbb02e-76b2-4bca-bb3b-871e4e969a3c,81fbb02e-76b2-4bca-bb3b-871e4e969a3c,1,0,cdef5df6-f3a1-4950-b197-4f375914f885,cdef5df6-f3a1-4950-b197-4f375914f885,1,0,c1caff49-dc4b-4b3e-be47-122ea8b70416,c1caff49-dc4b-4b3e-be47-122ea8b70416,1,0,a1185a4c-7351-48b0-b662-61f61a1ad715,a1185a4c-7351-48b0-b662-61f61a1ad715,1,0,28a25822-2306-409a-a7c8-6f7e42bf25e8,28a25822-2306-409a-a7c8-6f7e42bf25e8,1,0,a45fa0c3-c363-4465-861f-13cedfeb79dd,a45fa0c3-c363-4465-861f-13cedfeb79dd,1,0,a72517c3-8c91-4e40-81ac-83c762789e87,a72517c3-8c91-4e40-81ac-83c762789e87,1,0,0233b335-7e26-4661-9850-8ab09d3178e3,0233b335-7e26-4661-9850-8ab09d3178e3,1,0,d942d536-5d01-4571-b910-abd973996a38,d942d536-5d01-4571-b910-abd973996a38,1,0,b82a7103-b872-49c3-b632-81d5a0051136,b82a7103-b872-49c3-b632-81d5a0051136,1,0,4b17ac35-78cb-4d01-bb08-659c0a93e8ce,4b17ac35-78cb-4d01-bb08-659c0a93e8ce,1,0,20c2053c-8ebd-4c07-8d95-956b424d047c,20c2053c-8ebd-4c07-8d95-956b424d047c,1,0,7c9dee81-7e85-4d26-84c3-66b0d770ac5a,7c9dee81-7e85-4d26-84c3-66b0d770ac5a,1,0,bef6081e-f377-41d6-83a1-b0e218a3fb46,bef6081e-f377-41d6-83a1-b0e218a3fb46,1,0,9b67bfd5-ef23-4205-b7ba-9466517e9999,9b67bfd5-ef23-4205-b7ba-9466517e9999,1,0,ea2c4c8e-23cc-4884-812e-1e959da48afc,ea2c4c8e-23cc-4884-812e-1e959da48afc,1,0,9474b4f1-b1bb-4fcf-acdb-a149a09b8490,9474b4f1-b1bb-4fcf-acdb-a149a09b8490,1,0,46b0a5b3-1fa7-44ff-a941-c6de47d36e77,46b0a5b3-1fa7-44ff-a941-c6de47d36e77,1,0,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,1,0,592f55e1-b004-44ef-878a-6c2016ccbeb0,592f55e1-b004-44ef-878a-6c2016ccbeb0,1,0,19add2bd-eede-4a05-901b-cf8ce49a638f,19add2bd-eede-4a05-901b-cf8ce49a638f,1,0,becf53b6-3fbc-4c70-822f-4a70b0434353,becf53b6-3fbc-4c70-822f-4a70b0434353,1,0,7dc0429d-146a-4c4f-b122-5d5c053bd4ed,7dc0429d-146a-4c4f-b122-5d5c053bd4ed,1,0,f8dc2485-685b-4e41-834a-a2cbbbe4d53b,f8dc2485-685b-4e41-834a-a2cbbbe4d53b,1,0,c38d8135-e11f-4860-b370-84ff279b7fbd,c38d8135-e11f-4860-b370-84ff279b7fbd,1,0,ee0798f5-47a8-4118-a25c-cfd3473007c1,ee0798f5-47a8-4118-a25c-cfd3473007c1,1,0,652ee894-047b-4a5a-a500-2d61b4c4a473,652ee894-047b-4a5a-a500-2d61b4c4a473,1,0,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,1,0,fef727fa-f63b-4467-9367-73a2425b19e3,fef727fa-f63b-4467-9367-73a2425b19e3,1,0,3b9c03bc-8517-498f-8052-e53854fb0753,3b9c03bc-8517-498f-8052-e53854fb0753,1,0,33f8cd94-71e7-4703-92c3-22690fbd871a,33f8cd94-71e7-4703-92c3-22690fbd871a,1,0,b6e5de4d-0156-4342-b646-6e6920a4bd3a,b6e5de4d-0156-4342-b646-6e6920a4bd3a,1,0,c03f9972-5a1f-449b-b170-5a958c2b5846,c03f9972-5a1f-449b-b170-5a958c2b5846,1,0,25896075-2484-4879-8310-7f5680d80b48,25896075-2484-4879-8310-7f5680d80b48,1,0,09858042-6284-4499-8055-c1b5b783ce5f,09858042-6284-4499-8055-c1b5b783ce5f,1,0,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1,0,e417e2ab-5e25-40a9-8dc2-9552a4fe1a38,e417e2ab-5e25-40a9-8dc2-9552a4fe1a38,1,0,1e63c656-a0e7-4b33-8bac-2a196e028ffa,1e63c656-a0e7-4b33-8bac-2a196e028ffa,1,0,085cbea9-1df1-4ee9-afb7-da2bf313697e,085cbea9-1df1-4ee9-afb7-da2bf313697e,1,0,36b080d5-a870-46fa-bf8d-0a06e3a9719f,36b080d5-a870-46fa-bf8d-0a06e3a9719f,1,0,b3152292-5546-4896-ad24-cb41057698d8,b3152292-5546-4896-ad24-cb41057698d8,1,0,bfa90848-930f-433d-8f6f-c11ac2c5eba2,bfa90848-930f-433d-8f6f-c11ac2c5eba2,1,0,a4d767a1-d2e6-4e0a-ab35-9207eef54998,a4d767a1-d2e6-4e0a-ab35-9207eef54998,1,0,f38069e7-6d69-4be9-8463-bc7a33158a1a,f38069e7-6d69-4be9-8463-bc7a33158a1a,1,0,e50cb13a-151b-45d2-a7b7-d23440ddfa24,e50cb13a-151b-45d2-a7b7-d23440ddfa24,1,0,cc3a7f15-4db6-445e-b282-f44d0460b7d3,cc3a7f15-4db6-445e-b282-f44d0460b7d3,1,0,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,1,0,0d8770aa-fa6e-471c-92c8-b96576927ef0,0d8770aa-fa6e-471c-92c8-b96576927ef0,1,0,e25b2b10-bf08-42db-9642-861efc5e583b,e25b2b10-bf08-42db-9642-861efc5e583b,1,0,b8a32c33-4e15-4c21-baab-64a86d44321b,b8a32c33-4e15-4c21-baab-64a86d44321b,1,0,e7d51ada-f286-4519-bfae-ece95dd4d7b0,e7d51ada-f286-4519-bfae-ece95dd4d7b0,1,0,d7dd9a03-6818-4987-8f39-58e1c906569f,d7dd9a03-6818-4987-8f39-58e1c906569f,1,0,fce028b8-b530-49f0-b6ad-a28d03e19b0f,fce028b8-b530-49f0-b6ad-a28d03e19b0f,1,0,301eea20-0e7f-441e-a531-28b4627dfd93,301eea20-0e7f-441e-a531-28b4627dfd93,1,0,38fc1e6e-7cd3-437b-b429-6655be34cd01,38fc1e6e-7cd3-437b-b429-6655be34cd01,1,0,47da49ee-b243-4e78-9c8f-bb26c60e6136,47da49ee-b243-4e78-9c8f-bb26c60e6136,1,0,39bee714-cacd-4d48-97a5-c838660e049a,39bee714-cacd-4d48-97a5-c838660e049a,1,0,9ed2c756-80a1-4559-8494-b7a9b82a4519,9ed2c756-80a1-4559-8494-b7a9b82a4519,1,0,69149ce1-d3f8-4e12-be8f-b328ade60882,69149ce1-d3f8-4e12-be8f-b328ade60882,1,0,ff592ecb-eb08-4554-87bf-1d2935b21d3c,ff592ecb-eb08-4554-87bf-1d2935b21d3c,1,0,d975aef4-8da8-4486-baeb-a99c48cff0ec,d975aef4-8da8-4486-baeb-a99c48cff0ec,1,0,75666bb9-f6d3-4dd6-8220-427a81f23fc9,75666bb9-f6d3-4dd6-8220-427a81f23fc9,1,0,9da27139-0bed-47b0-aef6-246929968502,9da27139-0bed-47b0-aef6-246929968502,1,0,68e82adf-bc03-4f23-9ec4-749ed42241da,68e82adf-bc03-4f23-9ec4-749ed42241da,1,0,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,7ae5d177-a3e6-4989-b10c-8e0a605c26d9,1,0,41f87891-ddd5-4e0f-a4f2-8039fb71981b,41f87891-ddd5-4e0f-a4f2-8039fb71981b,1,0,29f2094a-d0d1-425c-8161-45a9ba186e19,29f2094a-d0d1-425c-8161-45a9ba186e19,1,0,a57f6dc1-59d7-4311-8acd-65ce57a9f386,a57f6dc1-59d7-4311-8acd-65ce57a9f386,1,0,893b2dd9-a939-4799-9b78-50d788a5f3ba,893b2dd9-a939-4799-9b78-50d788a5f3ba,1,0,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,1,0,e4842271-4fc0-4e15-afef-876f05af78c0,e4842271-4fc0-4e15-afef-876f05af78c0,1,0,31ee6430-b65d-42fa-859b-c4f1c40686ae,31ee6430-b65d-42fa-859b-c4f1c40686ae,1,0,c59e11f3-6bcb-404a-9d76-1416c12be354,c59e11f3-6bcb-404a-9d76-1416c12be354,1,0,c1a1f12b-3978-4047-956e-a5c7de8371a0,c1a1f12b-3978-4047-956e-a5c7de8371a0,1,0,ac39b903-0c60-417e-a50f-49ed375424f5,ac39b903-0c60-417e-a50f-49ed375424f5,1,0,135d57fe-d420-4bb0-9120-e43fd9b55c16,135d57fe-d420-4bb0-9120-e43fd9b55c16,1,0,9893e2d6-f3f8-4d73-bb06-19bf26d216ab,9893e2d6-f3f8-4d73-bb06-19bf26d216ab,1,0,16392cf6-dd83-4df0-a54b-6efc29778a89,16392cf6-dd83-4df0-a54b-6efc29778a89,1,0,a4ec7d3d-2d01-436c-98ec-ec42733ee5c6,a4ec7d3d-2d01-436c-98ec-ec42733ee5c6,1,0,10db9f99-c7d1-4b16-9ea2-9bfc2aa4ddb5,10db9f99-c7d1-4b16-9ea2-9bfc2aa4ddb5,1,0,230722e6-942f-4594-be89-eff59c6572bf,230722e6-942f-4594-be89-eff59c6572bf,1,0,b43abcf7-1f1d-4a59-b0d1-0a493c3a4785,b43abcf7-1f1d-4a59-b0d1-0a493c3a4785,1,0,eaf6045f-9ac0-43ef-b165-a45be75a4d44,eaf6045f-9ac0-43ef-b165-a45be75a4d44,1,0,237dab99-ed72-432c-ad01-c6045d74f000,237dab99-ed72-432c-ad01-c6045d74f000,1,0,a1130128-cc48-4555-93a2-99e7f74f77dc,a1130128-cc48-4555-93a2-99e7f74f77dc,1,0,9b4b7424-1af7-4d80-8404-8819fcfeae75,9b4b7424-1af7-4d80-8404-8819fcfeae75,1,0,94e08dcf-3885-4a73-82ab-cb291f1cf95f,94e08dcf-3885-4a73-82ab-cb291f1cf95f,1,0,405c52c4-25fe-45ff-abab-bf01041e768d,405c52c4-25fe-45ff-abab-bf01041e768d,1,0,55ce840b-5838-4107-886d-f935b9907bd8,55ce840b-5838-4107-886d-f935b9907bd8,1,0,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,1,0,f1753bda-16db-4b00-a16a-37ddade8403f,f1753bda-16db-4b00-a16a-37ddade8403f,1,0,a1875d63-4303-46f1-bdea-fc529b5891f3,a1875d63-4303-46f1-bdea-fc529b5891f3,1,0,59123b12-6052-4480-9c86-f4de1b5cdc04,59123b12-6052-4480-9c86-f4de1b5cdc04,1,0,133f181a-fade-4182-826d-904fac780326,133f181a-fade-4182-826d-904fac780326,1,0,f60cb71a-f451-426a-aa3a-aa266b8da149,f60cb71a-f451-426a-aa3a-aa266b8da149,1,0,641ebe22-7135-4adb-bbd6-e0c37d246a2d,641ebe22-7135-4adb-bbd6-e0c37d246a2d,1,0,f71ba01e-9f6b-4241-8048-4368c8888756,f71ba01e-9f6b-4241-8048-4368c8888756,1,0,6aa814fa-417e-428c-951e-6efd9d0775da,6aa814fa-417e-428c-951e-6efd9d0775da,1,0,a247efe1-8608-4780-9cc8-54e29944475b,a247efe1-8608-4780-9cc8-54e29944475b,1,0,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,4b8c3c82-6e8f-469e-8a80-144361d1d0b2,1,0,a8f162e9-3f59-41a5-b82f-da20928213c7,a8f162e9-3f59-41a5-b82f-da20928213c7,1,0,ade68dfd-5037-4fd7-b043-9514e3fe6342,ade68dfd-5037-4fd7-b043-9514e3fe6342,1,0,7b008aad-9d05-43e1-8295-62ae58cfff42,7b008aad-9d05-43e1-8295-62ae58cfff42,1,0,fdaf9255-d621-4a98-9530-f618ed440795,fdaf9255-d621-4a98-9530-f618ed440795,1,0,48cefa96-46c7-4870-a096-951dcbae479a,48cefa96-46c7-4870-a096-951dcbae479a,1,0,d74e01cc-941b-4974-8771-0bd2e0d86724,d74e01cc-941b-4974-8771-0bd2e0d86724,1,0,0daac965-2026-4acc-8ba1-3c1f01779257,0daac965-2026-4acc-8ba1-3c1f01779257,1,0,65a331c0-7501-49f6-8027-35b703d11834,65a331c0-7501-49f6-8027-35b703d11834,1,0,c67fab0a-704f-43ae-bd03-4b5b1a880b24,c67fab0a-704f-43ae-bd03-4b5b1a880b24,1,0,aae09896-3b22-4d7d-9059-e47660f8b88b,aae09896-3b22-4d7d-9059-e47660f8b88b,1,0,c1703a14-61a0-4461-8ad8-7173e2c431fe,c1703a14-61a0-4461-8ad8-7173e2c431fe,1,0,b1b5841d-0cf9-4de5-8561-b35b8f286d21,b1b5841d-0cf9-4de5-8561-b35b8f286d21,1,0,aecf5653-3005-43f2-ab49-40977e70f02b,aecf5653-3005-43f2-ab49-40977e70f02b,1,0,4093fe34-7557-4f15-831b-d654b94b8010,4093fe34-7557-4f15-831b-d654b94b8010,1,0,ee10023f-5c63-4cb3-8e6c-db566c788c9d,ee10023f-5c63-4cb3-8e6c-db566c788c9d,1,0,475f8577-a141-496b-94e1-53215c0dd017,475f8577-a141-496b-94e1-53215c0dd017,1,0,97638762-c01e-4c8f-88e2-b356e517e18f,97638762-c01e-4c8f-88e2-b356e517e18f,1,0,074e34f2-e9be-4bd3-beca-8b916772e2be,074e34f2-e9be-4bd3-beca-8b916772e2be,1,0,28fecf1b-7cab-4087-b66e-2052edb8ce3a,28fecf1b-7cab-4087-b66e-2052edb8ce3a,1,0,252eb146-0d23-46ae-9feb-ee04531dd7d8,252eb146-0d23-46ae-9feb-ee04531dd7d8,1,0,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,d85b00b7-b0d8-4b91-8d7f-0c2da524d446,1,0,cc906f05-5ea6-43cb-a084-c4ee51ca4bd5,cc906f05-5ea6-43cb-a084-c4ee51ca4bd5,1,0,ce5549bd-ba99-4259-86a3-36521bad59f5,ce5549bd-ba99-4259-86a3-36521bad59f5,1,0,f5417147-4d2a-4e49-911b-2bb5eccb8441,f5417147-4d2a-4e49-911b-2bb5eccb8441,1,0,20fbed2b-4393-4de0-a71d-017a336bdac0,20fbed2b-4393-4de0-a71d-017a336bdac0,1,0,2ca4fc58-798b-4fc3-8673-27688ce7a1f2,2ca4fc58-798b-4fc3-8673-27688ce7a1f2,1,0,41f6f6d1-b7cf-4477-907b-ce69fc08c799,41f6f6d1-b7cf-4477-907b-ce69fc08c799,1,0,0d124daf-dc52-4391-a2d9-3c43a45c422c,0d124daf-dc52-4391-a2d9-3c43a45c422c,1,0,a300ecc3-8031-4a50-a17d-b08cf3a72139,a300ecc3-8031-4a50-a17d-b08cf3a72139,1,0,e7e78b7e-b103-40d6-8064-f84e2d86ca3d,e7e78b7e-b103-40d6-8064-f84e2d86ca3d,1,0,44b28019-01c0-468d-9b60-e050ff8b71ac,44b28019-01c0-468d-9b60-e050ff8b71ac,1,0,69f6173c-a570-41ff-b07f-5b85f7187515,69f6173c-a570-41ff-b07f-5b85f7187515,1,0,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,1,0,98153b59-8cc6-4dc7-b945-99c1146d07da,98153b59-8cc6-4dc7-b945-99c1146d07da,1,0,3e2828b4-2b55-471e-ac69-55119c2480f8,3e2828b4-2b55-471e-ac69-55119c2480f8,1,0,df9db8d5-c5c2-4a9d-88fe-77247b2c417e,df9db8d5-c5c2-4a9d-88fe-77247b2c417e,1,0,9da32b56-ff89-4739-bb99-615074b72298,9da32b56-ff89-4739-bb99-615074b72298,1,0,08baf3ee-b8ca-4f29-89fc-c15344064ad3,08baf3ee-b8ca-4f29-89fc-c15344064ad3,1,0,4766c40e-6330-4c1d-a64f-0c8c672886a4,4766c40e-6330-4c1d-a64f-0c8c672886a4,1,0,01b85e3a-9920-425a-9de5-5079fffeef93,01b85e3a-9920-425a-9de5-5079fffeef93,1,0,82e12316-cc64-4d2f-83fa-054b5a738f02,82e12316-cc64-4d2f-83fa-054b5a738f02,1,0,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,6b70f7e1-8bdb-4fc4-9b95-0e045bfa288c,1,0,a890be6b-f050-4ea4-a388-570948ffd22b,a890be6b-f050-4ea4-a388-570948ffd22b,1,0,b00c31d6-4fc6-4189-9f72-f91742ec705f,b00c31d6-4fc6-4189-9f72-f91742ec705f,1,0,1333101b-82e8-41a9-a793-5af5dcd6f68a,1333101b-82e8-41a9-a793-5af5dcd6f68a,1,0,766c9bee-b0fc-4a7f-b88e-cd8c4aad73b8,766c9bee-b0fc-4a7f-b88e-cd8c4aad73b8,1,0,3ba630c2-cdc1-40a8-a24e-538ddb1abe38,3ba630c2-cdc1-40a8-a24e-538ddb1abe38,1,0,0f25646a-90f9-4747-a778-7efdaabc284c,0f25646a-90f9-4747-a778-7efdaabc284c,1,0,3a2d9324-8260-478d-ad62-a964d860cb8f,3a2d9324-8260-478d-ad62-a964d860cb8f,1,0,9b9cd161-5bee-4433-a0ec-b67deb099b5e,9b9cd161-5bee-4433-a0ec-b67deb099b5e,1,0,ca179cb5-65e1-4a55-bf12-096b926accb0,ca179cb5-65e1-4a55-bf12-096b926accb0,1,0,d508b3e9-4dac-40a3-9a0b-1cc76b4196ea,d508b3e9-4dac-40a3-9a0b-1cc76b4196ea,1,0,63470706-f14b-4733-87c2-d1173f5d7e7a,63470706-f14b-4733-87c2-d1173f5d7e7a,1,0,472ce1c2-9e83-418b-b1ec-e15e126bc919,472ce1c2-9e83-418b-b1ec-e15e126bc919,1,0,9fe30414-8261-4403-a854-f22b61824f69,9fe30414-8261-4403-a854-f22b61824f69,1,0,c587a9f3-7512-4697-8156-c688fbb210d0,c587a9f3-7512-4697-8156-c688fbb210d0,1,0,07bb26ac-bd97-465f-a192-db7fedbb579b,07bb26ac-bd97-465f-a192-db7fedbb579b,1,0,76cdcc51-0e6a-4f9c-a115-1864998c2add,76cdcc51-0e6a-4f9c-a115-1864998c2add,1,0,71c3e5d3-7504-433f-9d48-7c287b2b863b,71c3e5d3-7504-433f-9d48-7c287b2b863b,1,0,bb129cf2-5a5a-433a-924a-a1d0d895644a,bb129cf2-5a5a-433a-924a-a1d0d895644a,1,0,faa34cb8-2d48-4851-a839-fc40536a0234,faa34cb8-2d48-4851-a839-fc40536a0234,1,0,0894db61-51f6-4068-9634-e55d95e2a8ac,0894db61-51f6-4068-9634-e55d95e2a8ac,1,0,ad3fb691-68b2-4d65-93ab-ab8fcb77e035,ad3fb691-68b2-4d65-93ab-ab8fcb77e035,1,0,67aed41e-9707-4007-bb3c-7273476664bb,67aed41e-9707-4007-bb3c-7273476664bb,1,0,0d8c215d-1210-47a2-897d-a3257b9f849a,0d8c215d-1210-47a2-897d-a3257b9f849a,1,0,954e7804-e8b1-42aa-9d49-bef73f9d13d1,954e7804-e8b1-42aa-9d49-bef73f9d13d1,1,0,c971e0ba-53b8-4454-92f7-40b0d639058a,c971e0ba-53b8-4454-92f7-40b0d639058a,1,0,ed297409-6215-4fd4-b47d-a2247e0343da,ed297409-6215-4fd4-b47d-a2247e0343da,1,0,5ae2a1de-6380-45cc-9c8f-5612cd5ba627,5ae2a1de-6380-45cc-9c8f-5612cd5ba627,1,0,e8aa2ba2-7dfa-47e3-bc18-6156f700ceed,e8aa2ba2-7dfa-47e3-bc18-6156f700ceed,1,0,8c472f51-47ec-43c4-9858-fd19ac3e17f3,8c472f51-47ec-43c4-9858-fd19ac3e17f3,1,0,c54f31ce-114b-46d3-b4c6-12c8f07727ca,c54f31ce-114b-46d3-b4c6-12c8f07727ca,1,0,5a9c82c1-d0cd-48ff-b91c-38b950591e4c,5a9c82c1-d0cd-48ff-b91c-38b950591e4c,1,0,59855d19-29cd-4efd-a453-b19e574113ef,59855d19-29cd-4efd-a453-b19e574113ef,1,0,249b6436-bd44-4950-b118-7f40f7aaf794,249b6436-bd44-4950-b118-7f40f7aaf794,1,0,712c2b73-4697-4581-a095-70555aee8be2,712c2b73-4697-4581-a095-70555aee8be2,1,0,c1508d67-ac6d-41e3-884d-b3bdd54659f8,c1508d67-ac6d-41e3-884d-b3bdd54659f8,1,0,3436b16e-ef5b-4abb-9aad-c70a7c8560ed,3436b16e-ef5b-4abb-9aad-c70a7c8560ed,1,0,9dd57f32-90a1-4a1d-bc2a-c1b12461d963,9dd57f32-90a1-4a1d-bc2a-c1b12461d963,1,0,ce6d1259-af90-482b-b19a-405512321bd9,ce6d1259-af90-482b-b19a-405512321bd9,1,0,eb276904-cad7-4401-bb78-2d13946291f1,eb276904-cad7-4401-bb78-2d13946291f1,1,0,79ff04ac-4625-469b-916e-938f04de4dd2,79ff04ac-4625-469b-916e-938f04de4dd2,1,0,35103a27-230c-45c0-a8c9-24bd46608bbb,35103a27-230c-45c0-a8c9-24bd46608bbb,1,0,c5e9f987-4466-4161-8e36-278b0b3ce056,c5e9f987-4466-4161-8e36-278b0b3ce056,1,0,b6566d54-e821-4a2a-a447-0f533f35de91,b6566d54-e821-4a2a-a447-0f533f35de91,1,0,46568b9a-a765-4037-8a86-b184a570ab37,46568b9a-a765-4037-8a86-b184a570ab37,1,0,4fcc7278-2fec-49ee-b0ef-c7d5f5f698a4,4fcc7278-2fec-49ee-b0ef-c7d5f5f698a4,1,0,547a6dec-6fe8-439d-a8d9-ac2612af20d2,547a6dec-6fe8-439d-a8d9-ac2612af20d2,1,0,2bc2c4b7-dacb-4cb3-b5b2-712b19bebcd7,2bc2c4b7-dacb-4cb3-b5b2-712b19bebcd7,1,0,84395058-d46a-428c-b782-a9fa89fea14a,84395058-d46a-428c-b782-a9fa89fea14a,1,0,64f667e5-6a8f-448f-aed5-a4d461232845,64f667e5-6a8f-448f-aed5-a4d461232845,1,0,a148cdff-0e67-48e6-9cc5-e8a6f5aa1ae8,a148cdff-0e67-48e6-9cc5-e8a6f5aa1ae8,1,0,037842ca-aeaf-4e27-9a0e-e929438b6f40,037842ca-aeaf-4e27-9a0e-e929438b6f40,1,0,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,1,0,2c8ab5a6-66d5-4b6f-94ae-4292724ded7f,2c8ab5a6-66d5-4b6f-94ae-4292724ded7f,1,0,de25a90c-4b46-4340-b649-93e16dde33de,de25a90c-4b46-4340-b649-93e16dde33de,1,0,4f2d0398-49f4-410c-a451-436cbf96a262,4f2d0398-49f4-410c-a451-436cbf96a262,1,0,b2c8bd74-21c9-4495-93e2-ca5355698350,b2c8bd74-21c9-4495-93e2-ca5355698350,1,0,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,39bc2bc6-2a4f-4e26-b1b9-fb8473234f09,1,0,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,1,0,93016393-c637-4d81-8675-aa5e51e678e0,93016393-c637-4d81-8675-aa5e51e678e0,1,0,d8621f68-106e-4058-963f-56010491ae2e,d8621f68-106e-4058-963f-56010491ae2e,1,0,670639a7-02a7-4108-81b8-cb93233fd2a5,670639a7-02a7-4108-81b8-cb93233fd2a5,1,0,f2e2df50-52fc-4e95-909b-80fc91a68f62,f2e2df50-52fc-4e95-909b-80fc91a68f62,1,0,1a1d8dd0-1559-426c-ad3c-baa6eb3a53db,1a1d8dd0-1559-426c-ad3c-baa6eb3a53db,1,0,7a944c45-9b3d-411f-b2ef-de3c896092bb,7a944c45-9b3d-411f-b2ef-de3c896092bb,1,0,d2762764-b5c0-4aeb-8e89-3371972f22d8,d2762764-b5c0-4aeb-8e89-3371972f22d8,1,0,d67a1377-f69f-48d9-824d-2ede2594e630,d67a1377-f69f-48d9-824d-2ede2594e630,1,0,573f1753-9194-4aaf-9217-5cac70ff108f,573f1753-9194-4aaf-9217-5cac70ff108f,1,0,50d3e00e-1a83-4bd5-91db-0561560caf42,50d3e00e-1a83-4bd5-91db-0561560caf42,1,0,1f7ec25a-05b1-468b-8857-2bb1aed3678a,1f7ec25a-05b1-468b-8857-2bb1aed3678a,1,0,c121b8bc-ecbf-4775-b210-3c1e3502a6ac,c121b8bc-ecbf-4775-b210-3c1e3502a6ac,1,0,9f4d5fe5-9bda-4ba9-a313-db1ab0ea14d1,9f4d5fe5-9bda-4ba9-a313-db1ab0ea14d1,1,0,4a1e6d25-89e7-468a-aef1-6ded0154dca2,4a1e6d25-89e7-468a-aef1-6ded0154dca2,1,0,44afff59-0590-4929-93b8-7b49735f21b5,44afff59-0590-4929-93b8-7b49735f21b5,1,0,905624ea-b253-413f-b651-1eb2c5a7d52a,905624ea-b253-413f-b651-1eb2c5a7d52a,1,0,b639ed30-3e37-4c65-a39f-00fe735950eb,b639ed30-3e37-4c65-a39f-00fe735950eb,1,0,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,1,0,f137eb0f-bde7-412d-9229-d7a4f9456e6c,f137eb0f-bde7-412d-9229-d7a4f9456e6c,1,0,90880131-8065-4a7e-a0fa-ecff9e27363c,90880131-8065-4a7e-a0fa-ecff9e27363c,1,0,57e9fcea-342c-4089-bd10-befb3faf0dbd,57e9fcea-342c-4089-bd10-befb3faf0dbd,1,0,f59f5511-87c5-4600-9d37-dc019bf0a6aa,f59f5511-87c5-4600-9d37-dc019bf0a6aa,1,0,6b10167a-f5c3-4d7b-b444-d5ff6e705ea4,6b10167a-f5c3-4d7b-b444-d5ff6e705ea4,1,0,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,1,0,51a0444d-13c8-45a8-97f6-f3f976964bf8,51a0444d-13c8-45a8-97f6-f3f976964bf8,1,0,9892f922-8745-4164-a200-94b5edc1ea0a,9892f922-8745-4164-a200-94b5edc1ea0a,1,0,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,1,0,6b6d541b-5dc1-4150-b8d1-5844a694ac6a,6b6d541b-5dc1-4150-b8d1-5844a694ac6a,1,0,2b1619a6-c841-4963-8c51-c1d8d6ba3746,2b1619a6-c841-4963-8c51-c1d8d6ba3746,1,0,eab50f82-4612-47fd-a5c2-9678016a1937,eab50f82-4612-47fd-a5c2-9678016a1937,1,0,4212bb94-7c24-4d4f-8bb8-4060bd21a135,4212bb94-7c24-4d4f-8bb8-4060bd21a135,1,0,2609ba3c-e4de-45b3-86e0-93db39a21eee,2609ba3c-e4de-45b3-86e0-93db39a21eee,1,0,00dcfeab-7ba1-4a50-996e-4fd693dd0514,00dcfeab-7ba1-4a50-996e-4fd693dd0514,1,0,d21971c9-9aa6-448a-ab37-49ad0b0547ec,d21971c9-9aa6-448a-ab37-49ad0b0547ec,1,0,627438b8-c738-4e02-a0e7-cfd7fbf8eca1,627438b8-c738-4e02-a0e7-cfd7fbf8eca1,1,0,30a87c95-4d55-4b68-877f-1055e1c1afa7,30a87c95-4d55-4b68-877f-1055e1c1afa7,1,0,00418e6c-77b2-4753-b9ff-3a8013436f8a,00418e6c-77b2-4753-b9ff-3a8013436f8a,1,0,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,1,0,4d660fec-4a76-470e-bba9-3d031941b289,4d660fec-4a76-470e-bba9-3d031941b289,1,0,26986f8d-d56d-4641-9184-2632d0881cca,26986f8d-d56d-4641-9184-2632d0881cca,1,0,144676de-f369-49f1-bb21-d60e073936df,144676de-f369-49f1-bb21-d60e073936df,1,0,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,d5537afb-df5f-4edf-a3d3-ff6b2a908ad9,1,0,d9f1f56b-75c8-43e9-8043-89076c225f78,d9f1f56b-75c8-43e9-8043-89076c225f78,1,0,a3c9a7eb-2104-4402-954c-3e12de4a7de3,a3c9a7eb-2104-4402-954c-3e12de4a7de3,1,0,38bf6d3b-5435-4bac-b9fc-23b80afeb760,38bf6d3b-5435-4bac-b9fc-23b80afeb760,1,0,a2a51b70-9570-4f53-9d30-e9a9b099a475,a2a51b70-9570-4f53-9d30-e9a9b099a475,1,0,556a0e57-5b3b-4303-a013-0bd296c506b8,556a0e57-5b3b-4303-a013-0bd296c506b8,1,0,21c1b2d3-cd96-4cdd-9ccc-ada27b127969,21c1b2d3-cd96-4cdd-9ccc-ada27b127969,1,0,fabbac92-cb98-4087-b3fa-387482ed0d86,fabbac92-cb98-4087-b3fa-387482ed0d86,1,0,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,1,0,fdcbe67c-55fb-444d-bed8-cee956ca3530,fdcbe67c-55fb-444d-bed8-cee956ca3530,1,0,e09534e3-ac6e-42a6-86e8-564acb20089a,e09534e3-ac6e-42a6-86e8-564acb20089a,1,0,6ff5b3cb-efff-430d-bf0a-957405f116ca,6ff5b3cb-efff-430d-bf0a-957405f116ca,1,0,d06e845a-9f54-40dd-b0df-6988def62017,d06e845a-9f54-40dd-b0df-6988def62017,1,0,7badb97b-c359-42af-9066-6bbfc0650cf9,7badb97b-c359-42af-9066-6bbfc0650cf9,1,0,63223883-06cf-4d01-be95-5e410cc58a22,63223883-06cf-4d01-be95-5e410cc58a22,1,0,1929139f-dabb-4c40-9423-158093360889,1929139f-dabb-4c40-9423-158093360889,1,0,dad92df4-685b-4260-b35f-4d031262dfea,dad92df4-685b-4260-b35f-4d031262dfea,1,0,4399c19a-ddba-42e9-88b4-c5c28abad237,4399c19a-ddba-42e9-88b4-c5c28abad237,1,0,982315ba-df74-4a31-8929-71d1e5e6f147,982315ba-df74-4a31-8929-71d1e5e6f147,1,0,8d1c01a9-9806-4e5d-bafb-ce6af11d5650,8d1c01a9-9806-4e5d-bafb-ce6af11d5650,1,0,fd3a6a7e-203d-447a-aebd-7626579387fb,fd3a6a7e-203d-447a-aebd-7626579387fb,1,0,8014684f-e1f1-4163-9083-459a009c0aac,8014684f-e1f1-4163-9083-459a009c0aac,1,0,ad6384d5-278b-44d3-993a-d5a39e7c98ca,ad6384d5-278b-44d3-993a-d5a39e7c98ca,1,0,ff976027-75e8-475c-abfa-876d36733c13,ff976027-75e8-475c-abfa-876d36733c13,1,0,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,1,0,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,1,0,ba026c72-2c07-4131-a711-339cd3c5fb95,ba026c72-2c07-4131-a711-339cd3c5fb95,1,0,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,1,0,b3554203-b930-496d-a712-353bc13a0946,b3554203-b930-496d-a712-353bc13a0946,1,0,59775ce0-f778-45f6-9453-bbd0a0ec1f27,59775ce0-f778-45f6-9453-bbd0a0ec1f27,1,0,f772abd3-8ea0-41e9-aaca-c5375778941a,f772abd3-8ea0-41e9-aaca-c5375778941a,1,0,a1e494f8-96a4-41bd-9234-b87e8d8742c5,a1e494f8-96a4-41bd-9234-b87e8d8742c5,1,0,ef6250de-a4ef-48d8-94d6-f4029e63d7d2,ef6250de-a4ef-48d8-94d6-f4029e63d7d2,1,0,b322b047-16eb-4500-826a-6dfebb7d997a,b322b047-16eb-4500-826a-6dfebb7d997a,1,0,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,1,0,83ead93b-4ff6-487d-934e-25088944fccc,83ead93b-4ff6-487d-934e-25088944fccc,1,0,764c76cc-0473-4633-868d-02f96aa43c10,764c76cc-0473-4633-868d-02f96aa43c10,1,0,c8da922f-e31e-49b0-b90e-1c060424bde5,c8da922f-e31e-49b0-b90e-1c060424bde5,1,0,41462827-fd8b-4ee6-a739-a884d704bba5,41462827-fd8b-4ee6-a739-a884d704bba5,1,0,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,1,0,eca025d2-4fe9-4542-b9f5-46ae2631256e,eca025d2-4fe9-4542-b9f5-46ae2631256e,1,0,35bc58df-8aff-48dd-83a9-b60b0461f94d,35bc58df-8aff-48dd-83a9-b60b0461f94d,1,0,0f46ae6b-9fe8-471a-a59f-af5e66cb9e00,0f46ae6b-9fe8-471a-a59f-af5e66cb9e00,1,0,cf13e2d9-72a0-47c0-bae2-f674024bbdb2,cf13e2d9-72a0-47c0-bae2-f674024bbdb2,1,0,feb1a5c1-c805-4079-8f05-8a44f51b0b02,feb1a5c1-c805-4079-8f05-8a44f51b0b02,1,0,ff7916bd-cbd1-4d9e-8aab-bad9fffaa0d4,ff7916bd-cbd1-4d9e-8aab-bad9fffaa0d4,1,0,1f55f330-7c0a-4a29-905f-51d664515bc5,1f55f330-7c0a-4a29-905f-51d664515bc5,1,0,6106e958-354c-4211-992c-3c3819e8828e,6106e958-354c-4211-992c-3c3819e8828e,1,0,9d6d77a9-1f55-4162-93a5-14bb3f3febaf,9d6d77a9-1f55-4162-93a5-14bb3f3febaf,1,0,61789ea5-aad2-4b3b-a1c7-3ff7409379eb,61789ea5-aad2-4b3b-a1c7-3ff7409379eb,1,0,2cd04d4c-2619-40c9-adf4-7bb281f045b6,2cd04d4c-2619-40c9-adf4-7bb281f045b6,1,0,1d6b8425-360c-4ab1-9bab-cc9a3b590bb2,1d6b8425-360c-4ab1-9bab-cc9a3b590bb2,1,0,9f67d228-79aa-44e6-8dc7-fae4fbdfef2a,9f67d228-79aa-44e6-8dc7-fae4fbdfef2a,1,0,231d3950-f363-4e63-83cd-8ddb81507c27,231d3950-f363-4e63-83cd-8ddb81507c27,1,0,87429f11-bf95-4013-bf13-da904570f88d,87429f11-bf95-4013-bf13-da904570f88d,1,0,6173cab2-e0f5-40c1-8e74-4f41fc8bd68f,6173cab2-e0f5-40c1-8e74-4f41fc8bd68f,1,0,feb41347-62db-41cf-ace0-d8b9de361af3,feb41347-62db-41cf-ace0-d8b9de361af3,1,0,5a088468-4065-4e0c-9b84-1162de8d3fdd,5a088468-4065-4e0c-9b84-1162de8d3fdd,1,0,dbdf3ae7-a0af-44b9-8e3d-c402d98cda03,dbdf3ae7-a0af-44b9-8e3d-c402d98cda03,1,0,cdce186a-229d-492d-8811-147fc4d7cdf5,cdce186a-229d-492d-8811-147fc4d7cdf5,1,0,5f91b00f-d8fc-4d63-8486-66339357ab22,5f91b00f-d8fc-4d63-8486-66339357ab22,1,0,16d44ab1-4bce-4df8-a215-6ed5173c75a8,16d44ab1-4bce-4df8-a215-6ed5173c75a8,1,0,543f976e-fea3-4a51-9962-b8e0fcd3f707,543f976e-fea3-4a51-9962-b8e0fcd3f707,1,0,375977c1-5745-4e78-a4df-cef966c0ccf8,375977c1-5745-4e78-a4df-cef966c0ccf8,1,0,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,1,0,c3796d85-2a24-43c4-9673-64e56249a1d0,c3796d85-2a24-43c4-9673-64e56249a1d0,1,0,fc1066b5-20d4-4c73-85f8-9889e554d6e1,fc1066b5-20d4-4c73-85f8-9889e554d6e1,1,0,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,1,0,731211c2-ef90-4883-9525-83cd91b742ac,731211c2-ef90-4883-9525-83cd91b742ac,1,0,0adf02da-940a-4bfc-afa5-59605494a169,0adf02da-940a-4bfc-afa5-59605494a169,1,0,50a1e3bf-8624-4474-854e-21b89aaf97ed,50a1e3bf-8624-4474-854e-21b89aaf97ed,1,0,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,1,0,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,1,0,847b97a3-d0bc-45e2-b06c-932bb22d8eca,847b97a3-d0bc-45e2-b06c-932bb22d8eca,1,0,503b3eab-b7f1-4ede-8845-3290a834cec7,503b3eab-b7f1-4ede-8845-3290a834cec7,1,0,8361991a-0f30-4a03-9a4c-90556b744f53,8361991a-0f30-4a03-9a4c-90556b744f53,1,0,3116fa60-bc42-4dea-aa03-387896168690,3116fa60-bc42-4dea-aa03-387896168690,1,0,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,1,0,08427a9a-fb3a-4bc1-b2e2-72e4f89680cd,08427a9a-fb3a-4bc1-b2e2-72e4f89680cd,1,0,f9196766-4ae2-4a73-bed6-4a8838323e02,f9196766-4ae2-4a73-bed6-4a8838323e02,1,0,ca797560-8802-4bdc-b21f-7a7fd795beae,ca797560-8802-4bdc-b21f-7a7fd795beae,1,0,56242b05-d722-4d4a-82d9-517e0e169d0b,56242b05-d722-4d4a-82d9-517e0e169d0b,1,0,5504f5d1-35d8-4a47-a0e1-003fe00395c1,5504f5d1-35d8-4a47-a0e1-003fe00395c1,1,0,73c1a829-0191-486b-97a0-7f333c6f8011,73c1a829-0191-486b-97a0-7f333c6f8011,1,0,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,1,0,06afe397-1c7e-400e-bb24-f8e611d114e8,06afe397-1c7e-400e-bb24-f8e611d114e8,1,0,f0105e51-9510-426a-8aa0-af827d93ffd9,f0105e51-9510-426a-8aa0-af827d93ffd9,1,0,3df19dbf-efe7-4e31-99ad-fafb59ec1329,3df19dbf-efe7-4e31-99ad-fafb59ec1329,1,0,baf12d47-fbfe-4563-aa23-26d9f7e83169,baf12d47-fbfe-4563-aa23-26d9f7e83169,1,0,e2046f49-6fea-4bf4-92b0-92f3c8357bcf,e2046f49-6fea-4bf4-92b0-92f3c8357bcf,1,0,0ba11486-1972-4434-ab1a-5bb75cc05e9f,0ba11486-1972-4434-ab1a-5bb75cc05e9f,1,0,4ed9c555-7dd0-4577-bf62-152b4c5ec9f2,4ed9c555-7dd0-4577-bf62-152b4c5ec9f2,1,0,11fe3a42-98c4-49ba-b697-86ffb172f16f,11fe3a42-98c4-49ba-b697-86ffb172f16f,1,0,07b53818-7318-4400-8af5-457fac012755,07b53818-7318-4400-8af5-457fac012755,1,0,292b47e7-5cf3-462d-a466-dac6253a7f03,292b47e7-5cf3-462d-a466-dac6253a7f03,1,0,8ecc070f-f6fb-46b1-9636-b77aa80f8804,8ecc070f-f6fb-46b1-9636-b77aa80f8804,1,0,8405be9d-465b-4744-b04f-03933b52f02e,8405be9d-465b-4744-b04f-03933b52f02e,1,0,a8021ff9-f0ae-49ab-b8ac-5e3d8fe90d82,a8021ff9-f0ae-49ab-b8ac-5e3d8fe90d82,1,0,f09b09ce-9e3c-406a-8508-b6e7e6ec966e,f09b09ce-9e3c-406a-8508-b6e7e6ec966e,1,0,9bf55587-1ffe-42bc-b8e8-3f956956f689,9bf55587-1ffe-42bc-b8e8-3f956956f689,1,0,2f67931e-543f-457e-80fd-78ca754e2e9c,2f67931e-543f-457e-80fd-78ca754e2e9c,1,0,595e5752-36a7-4bba-8a40-26920acae01d,595e5752-36a7-4bba-8a40-26920acae01d,1,0,28801fba-c429-4afa-bdcd-b3ec3ec22fda,28801fba-c429-4afa-bdcd-b3ec3ec22fda,1,0,d1a873ae-d45b-4600-9419-e701dce3da02,d1a873ae-d45b-4600-9419-e701dce3da02,1,0,e3a31f0d-a98f-43c6-bc39-087095ae8c39,e3a31f0d-a98f-43c6-bc39-087095ae8c39,1,0,e39d8ff3-52db-4ba4-b4ea-42d5ee787076,e39d8ff3-52db-4ba4-b4ea-42d5ee787076,1,0,b1c1c2eb-f9cd-468a-8398-b0b7f611f832,b1c1c2eb-f9cd-468a-8398-b0b7f611f832,1,0,4bb0f7c3-62f3-4352-9bc8-e243dd18fe4a,4bb0f7c3-62f3-4352-9bc8-e243dd18fe4a,1,0,bc106ef9-3eeb-40d4-aa59-ae1855ba1744,bc106ef9-3eeb-40d4-aa59-ae1855ba1744,1,0,73d8b319-9bea-4638-a602-23c12f37c227,73d8b319-9bea-4638-a602-23c12f37c227,1,0,cef55e64-d4ad-42dc-aa5a-ea65a3af7cfa,cef55e64-d4ad-42dc-aa5a-ea65a3af7cfa,1,0,a43e9de0-2921-4c58-a5f8-7446258be967,a43e9de0-2921-4c58-a5f8-7446258be967,1,0,307656e3-df7f-46e7-946c-bbd439265c95,307656e3-df7f-46e7-946c-bbd439265c95,1,0,eb3dfdc7-58b8-4b1f-b079-368c262364c9,eb3dfdc7-58b8-4b1f-b079-368c262364c9,1,0,5030a318-f8f7-4ec7-80d6-6eee0772562f,5030a318-f8f7-4ec7-80d6-6eee0772562f,1,0,242e911d-e49c-4b8a-8543-cc2e079220fd,242e911d-e49c-4b8a-8543-cc2e079220fd,1,0,9ea39d31-3775-4fb8-a3f3-202e54354d49,9ea39d31-3775-4fb8-a3f3-202e54354d49,1,0,73044e20-148c-46e9-b5b5-973c91de0d61,73044e20-148c-46e9-b5b5-973c91de0d61,1,0,f8ab477c-8e78-48c0-9f99-27748b109706,f8ab477c-8e78-48c0-9f99-27748b109706,1,0,24cff6c8-6c20-4383-b97c-6afa52738960,24cff6c8-6c20-4383-b97c-6afa52738960,1,0,462e2694-750d-49ef-93ac-17a7779be68d,462e2694-750d-49ef-93ac-17a7779be68d,1,0,c24ff02e-5afc-45df-81cf-64ea2b261c2d,c24ff02e-5afc-45df-81cf-64ea2b261c2d,1,0,2d51aae9-650d-4719-a94d-2609b69a2d36,2d51aae9-650d-4719-a94d-2609b69a2d36,1,0,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,6025f5b5-6dc7-46b8-96e6-02823c5b4de7,1,0,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,5d9d88ea-b2e4-425c-bb4d-a005e867d56c,1,0,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,b76d342c-0f9d-4eb0-b49e-a9f472a4dd0d,1,0,85639a53-b367-49ce-84f2-4e21d81c489b,85639a53-b367-49ce-84f2-4e21d81c489b,1,0,24b59586-178e-4efc-90ae-529553f3bb6c,24b59586-178e-4efc-90ae-529553f3bb6c,1,0,20e75dd5-222a-4100-aa43-3684991e3f21,20e75dd5-222a-4100-aa43-3684991e3f21,1,0,3c611832-4bc2-4229-a27d-d5dc82f3a498,3c611832-4bc2-4229-a27d-d5dc82f3a498,1,0,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,50e9eb52-02e3-44ff-9c9e-e76dbe38da63,1,0,5dadc422-1fbd-4918-9db3-09ec72c3404e,5dadc422-1fbd-4918-9db3-09ec72c3404e,1,0,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,ffdaf8a0-7a8f-4756-bdfc-a0c6ae6c3869,1,0,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,ab1bcabf-ffb0-4914-8ad0-b94b5aaeab1d,1,0,c5478d09-c8d3-4cc6-878e-27656ecc8409,c5478d09-c8d3-4cc6-878e-27656ecc8409,1,0,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,01b97d2f-40b9-4f12-8bc5-ab75fd160b7c,1,0,75974146-5b1a-412c-b7d5-1575704bbdab,75974146-5b1a-412c-b7d5-1575704bbdab,1,0,949f87cb-258c-4b6b-95ee-8a7491a4b64e,949f87cb-258c-4b6b-95ee-8a7491a4b64e,1,0,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,8a348012-99dc-4dc9-8bec-0df3caf4cdc5,1,0,5c089988-5381-41ed-9f05-f85db46b8d94,5c089988-5381-41ed-9f05-f85db46b8d94,1,0,85a36352-1569-4ce4-aeba-477db524c36d,85a36352-1569-4ce4-aeba-477db524c36d,1,0,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,ebfb6f80-88f5-4046-8ae7-e11a7b0c1beb,1,0,d99991b8-3a81-4e18-b0ad-05fc3e3a199b,d99991b8-3a81-4e18-b0ad-05fc3e3a199b,1,0,dd383422-dddb-4a81-9326-015fd345b5c1,dd383422-dddb-4a81-9326-015fd345b5c1,1,0,9a4a0b04-3dfb-4551-90f0-16231f64b14f,9a4a0b04-3dfb-4551-90f0-16231f64b14f,1,0,b2e656c1-f4ff-4d95-b066-4ee11ce4dea8,b2e656c1-f4ff-4d95-b066-4ee11ce4dea8,1,0,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,2d86d1fc-5367-47b8-804e-7f9c5fc8f3b1,1,0,98edcd6b-1c50-45c6-9a4c-390827a4ba52,98edcd6b-1c50-45c6-9a4c-390827a4ba52,1,0,b99c2068-15ea-43a1-9e9f-db29647e2387,b99c2068-15ea-43a1-9e9f-db29647e2387,1,0,346cb8b7-a20e-4a06-823e-26dfb2e3e741,346cb8b7-a20e-4a06-823e-26dfb2e3e741,1,0,782cb93d-36e6-4923-b2b6-75caa3459cd6,782cb93d-36e6-4923-b2b6-75caa3459cd6,1,0,0eea37cc-47f8-4819-85da-d4991f4e58ed,0eea37cc-47f8-4819-85da-d4991f4e58ed,1,0,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,b51eaf45-baa1-4d1c-bcb7-a89bb8bcc26a,1,0,5ea29362-0ab7-4ca3-865e-bf93db5ca24b,5ea29362-0ab7-4ca3-865e-bf93db5ca24b,1,0,64ff6058-c6f3-4682-b9a1-11ec438fa447,64ff6058-c6f3-4682-b9a1-11ec438fa447,1,0,ced01234-9417-49ce-adf0-8cdd15e6dd7d,ced01234-9417-49ce-adf0-8cdd15e6dd7d,1,0,c1272bfc-196a-4f99-935f-e2516bc138d2,c1272bfc-196a-4f99-935f-e2516bc138d2,1,0,aa7ceeee-3b3c-49e2-95c2-bfb34e381aa3,aa7ceeee-3b3c-49e2-95c2-bfb34e381aa3,1,0,313e0688-745a-4385-b040-7ef8317a0eb7,313e0688-745a-4385-b040-7ef8317a0eb7,1,0,7fe61c5d-30bc-440d-9e40-12ff3b296616,7fe61c5d-30bc-440d-9e40-12ff3b296616,1,0,37c37f15-f84b-456b-aab6-729562dc0908,37c37f15-f84b-456b-aab6-729562dc0908,1,0,45a2569e-820c-4d7d-ba74-4a781d26bb2b,45a2569e-820c-4d7d-ba74-4a781d26bb2b,1,0,996c7873-1cc9-44f6-915b-5c6ed7ef2370,996c7873-1cc9-44f6-915b-5c6ed7ef2370,1,0,8dc08932-0988-4e82-8a5f-385c0694f9ff,8dc08932-0988-4e82-8a5f-385c0694f9ff,1,0,13dee5d8-f165-48de-9ccb-3ef0239f4b27,13dee5d8-f165-48de-9ccb-3ef0239f4b27,1,0,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,2767473e-79fb-4c7c-a7d1-a83a8f2df71d,1,0,8a13c899-1659-48cf-9aa2-07ca99547b7b,8a13c899-1659-48cf-9aa2-07ca99547b7b,1,0,9395eb9d-6aff-4af5-a6f1-5c39014ba67b,9395eb9d-6aff-4af5-a6f1-5c39014ba67b,1,0,eb3f959c-94a4-4e77-b9f9-e81954254079,eb3f959c-94a4-4e77-b9f9-e81954254079,1,0,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,f5ef3f75-7d12-4284-844f-54d19d1f7e2f,1,0,7974e41d-5af3-4636-b405-c9405d89fb53,7974e41d-5af3-4636-b405-c9405d89fb53,1,0,21fad9b6-44df-417c-ba18-de4b8af98a34,21fad9b6-44df-417c-ba18-de4b8af98a34,1,0,11c086b0-c646-4701-983d-c38758286354,11c086b0-c646-4701-983d-c38758286354,1,0,92876c9e-52ff-480d-9878-5766f4f9d12c,92876c9e-52ff-480d-9878-5766f4f9d12c,1,0,b729d739-5249-4765-85ee-fd792bb22911,b729d739-5249-4765-85ee-fd792bb22911,1,0,d65c4485-7bac-4206-9a6c-7156f4bb876d,d65c4485-7bac-4206-9a6c-7156f4bb876d,1,0,d431d1e2-13dc-495c-9de1-b5ec872eceed,d431d1e2-13dc-495c-9de1-b5ec872eceed,1,0,e8bec681-d269-41ba-9184-556cbcc27d74,e8bec681-d269-41ba-9184-556cbcc27d74,1,0,b8aaef91-f72c-4127-a494-771c13694ca4,b8aaef91-f72c-4127-a494-771c13694ca4,1,0,433a114f-3198-4ef6-bbf8-ce9b54fdb736,433a114f-3198-4ef6-bbf8-ce9b54fdb736,1,0,02ac711c-e38e-422e-ac28-ba1b298df9cc,02ac711c-e38e-422e-ac28-ba1b298df9cc,1,0,3e090261-4aa2-4ece-9f77-62df83c890b3,3e090261-4aa2-4ece-9f77-62df83c890b3,1,0,bbfd9834-12b4-49ca-bdae-5c94efa80482,bbfd9834-12b4-49ca-bdae-5c94efa80482,1,0,9292034c-24e8-49a7-9b77-7974e117847d,9292034c-24e8-49a7-9b77-7974e117847d,1,0,3327b7d4-62fc-44cc-83b4-c449bfa4e706,3327b7d4-62fc-44cc-83b4-c449bfa4e706,1,0,43ecee25-68eb-48cf-bbaa-aee71052438f,43ecee25-68eb-48cf-bbaa-aee71052438f,1,0,93799f8b-0188-4546-8815-35e733bcc2b1,93799f8b-0188-4546-8815-35e733bcc2b1,1,0,9dc3a563-11bb-40a7-8431-c1d4367ccbaf,9dc3a563-11bb-40a7-8431-c1d4367ccbaf,1,0,c9ea4e72-5f01-42ae-88e3-52e49757b26f,c9ea4e72-5f01-42ae-88e3-52e49757b26f,1,0,38d92d75-c8b8-42d6-9e0a-6dc0811a8652,38d92d75-c8b8-42d6-9e0a-6dc0811a8652,1,0,0f564dbe-6a6e-48df-9718-5cea5d608ee6,0f564dbe-6a6e-48df-9718-5cea5d608ee6,1,0,a623fef1-96eb-41ba-93fe-09162698f419,a623fef1-96eb-41ba-93fe-09162698f419,1,0,45a8d7cb-c927-4a4e-a653-13fd9b1eda10,45a8d7cb-c927-4a4e-a653-13fd9b1eda10,1,0,d8e1f92f-9efa-422d-bb21-43bd1a363cec,d8e1f92f-9efa-422d-bb21-43bd1a363cec,1,0,c1416383-bd7e-4dc4-ad88-d98ac87157fd,c1416383-bd7e-4dc4-ad88-d98ac87157fd,1,0,5e8bddc7-7836-4ec8-b6e1-0c15d228f47e,5e8bddc7-7836-4ec8-b6e1-0c15d228f47e,1,0,d5d9976a-4cc0-43f7-afd6-d43cebb07940,d5d9976a-4cc0-43f7-afd6-d43cebb07940,1,0,899f1526-d6bc-42ef-852e-7297a06db9e3,899f1526-d6bc-42ef-852e-7297a06db9e3,1,0,c694c132-1ddb-4273-818a-d3cca88c082a,c694c132-1ddb-4273-818a-d3cca88c082a,1,0,cd4da06e-c06b-4233-befc-1bc4c4db58e3,cd4da06e-c06b-4233-befc-1bc4c4db58e3,1,0,918a01fe-f753-4a4a-9200-55bbd6edaf5f,918a01fe-f753-4a4a-9200-55bbd6edaf5f,1,0,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,51a8a209-2a9d-419f-9fda-f7aeac68bdbe,1,0,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,ef43961f-8cac-4f3f-bcee-c6bc51c4148c,1,0,d6704410-6297-481e-a6cb-6d6aa566b4f8,d6704410-6297-481e-a6cb-6d6aa566b4f8,1,0,398937ca-b035-43bd-b0da-8c5153a87cb8,398937ca-b035-43bd-b0da-8c5153a87cb8,1,0,5b441321-bd1e-4c56-8f09-365b05985eed,5b441321-bd1e-4c56-8f09-365b05985eed,1,0,559f1e66-e8da-437a-aa27-d0e1be6619b6,559f1e66-e8da-437a-aa27-d0e1be6619b6,1,0,704d69cd-d921-4957-a004-43bd7eb4d979,704d69cd-d921-4957-a004-43bd7eb4d979,1,0,f1594682-16ac-408c-8307-a7a8db79b09f,f1594682-16ac-408c-8307-a7a8db79b09f,1,0,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,863aebd2-ce32-4f1f-bb3d-d6062ab187fd,1,0,4cb814d8-cb1b-4366-b500-e820ad526b0c,4cb814d8-cb1b-4366-b500-e820ad526b0c,1,0,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,7da5f3b4-6330-4112-9d3a-7bb42996aa4a,1,0,6c43df9f-ca36-415b-afec-302807820d73,6c43df9f-ca36-415b-afec-302807820d73,1,0,c7fb7551-806a-40b2-8879-14cd897b60d8,c7fb7551-806a-40b2-8879-14cd897b60d8,1,0,68337023-d573-4d04-95b6-44f73258c2a4,68337023-d573-4d04-95b6-44f73258c2a4,1,0,7cf39337-b722-486f-8e37-a62239d0ccd2,7cf39337-b722-486f-8e37-a62239d0ccd2,1,0,2571cfaf-d876-4385-a60a-1488aacf7080,2571cfaf-d876-4385-a60a-1488aacf7080,1,0,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,4ea1dd0a-6eab-48e4-a6a7-314d0e211d6c,1,0,44398566-3189-4584-8f8a-9deb1d07ce41,44398566-3189-4584-8f8a-9deb1d07ce41,1,0,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,6f4e3082-9c8c-4289-8cc2-704c8d2763ce,1,0,accfa63a-479d-4996-95bc-cdf5acdf203c,accfa63a-479d-4996-95bc-cdf5acdf203c,1,0,351998e0-8939-4dd4-a833-f4756bcc53b8,351998e0-8939-4dd4-a833-f4756bcc53b8,1,0,cd69bad8-524e-4be4-88cc-7732a88b38b8,cd69bad8-524e-4be4-88cc-7732a88b38b8,1,0,0a32248c-6994-4988-90d1-30882bc9da6b,0a32248c-6994-4988-90d1-30882bc9da6b,1,0,b57b53cb-6972-4bda-ae46-96571be1ebec,b57b53cb-6972-4bda-ae46-96571be1ebec,1,0,1a1a9636-fb72-4e4a-af96-5858442b1e61,1a1a9636-fb72-4e4a-af96-5858442b1e61,1,0,bca9cf34-9e11-4014-976a-28c4330b136e,bca9cf34-9e11-4014-976a-28c4330b136e,1,0,65fffe1a-6f36-4f50-975f-4471ad29d3ec,65fffe1a-6f36-4f50-975f-4471ad29d3ec,1,0,8fe5dad5-686a-4631-ae05-2917c33f7d83,8fe5dad5-686a-4631-ae05-2917c33f7d83,1,0,edef86c6-73bf-4e47-b62d-b2b548a732cd,edef86c6-73bf-4e47-b62d-b2b548a732cd,1,0,a1715044-d76f-4238-ba3e-989d04078d83,a1715044-d76f-4238-ba3e-989d04078d83,1,0,e72e59c0-391d-497e-9407-063e0edf573e,e72e59c0-391d-497e-9407-063e0edf573e,1,0,ae8a1e69-ee1c-4efa-8d63-0279b18617f6,ae8a1e69-ee1c-4efa-8d63-0279b18617f6,1,0,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,a7ec91a5-2ed4-4ecd-b794-fcd3bb5ea4a2,1,0,299c47a7-0b30-4f62-8f5c-f087ad6411fb,299c47a7-0b30-4f62-8f5c-f087ad6411fb,1,0,4d4724df-24fb-4c59-9d04-3f984906214a,4d4724df-24fb-4c59-9d04-3f984906214a,1,0,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,95b10bc8-39ef-43f5-b74e-f36cfa9bc806,1,0,cb9b73ee-8531-48d9-9266-9aaa4336a612,cb9b73ee-8531-48d9-9266-9aaa4336a612,1,0,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,b7b80237-d642-4c21-a9ee-64fc4ed20d2f,1,0,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,aeee2eea-1bb9-4e8a-ac5c-c940eaa86511,1,0,d042687f-0725-4611-a868-f5b4f6a3a3a8,d042687f-0725-4611-a868-f5b4f6a3a3a8,1,0,bb143340-7fff-49ef-b121-355c96613f78,bb143340-7fff-49ef-b121-355c96613f78,1,0,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,cd5fbbcb-19b8-4c0b-93c7-ebdf642826db,1,0,f2f69644-80dc-4b5e-a208-ed1de131e25e,f2f69644-80dc-4b5e-a208-ed1de131e25e,1,0,73060f72-6d08-47da-aac8-d4d2ed8f871c,73060f72-6d08-47da-aac8-d4d2ed8f871c,1,0,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,f3a6219e-bff5-4d36-9baa-bb214cebc2ed,1,0,82e8ac21-c2aa-47de-89ae-ea6cc10cc862,82e8ac21-c2aa-47de-89ae-ea6cc10cc862,1,0,13b27ec3-2be9-4959-92e5-94ba7bb64f03,13b27ec3-2be9-4959-92e5-94ba7bb64f03,1,0,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,9f832f4b-ae60-4d81-9ffd-6e00f7e02560,1,0,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,6f6ef6ac-5bb7-41e4-b6d5-0f068e8cb176,1,0,821225ea-1bad-49a6-a422-80d8a09baf13,821225ea-1bad-49a6-a422-80d8a09baf13,1,0,d0106f3a-8490-4277-a278-75c318ec252c,d0106f3a-8490-4277-a278-75c318ec252c,1,0,5035aa55-d557-419a-89e2-10ed0f8d109b,5035aa55-d557-419a-89e2-10ed0f8d109b,1,0,5f93d2af-64ff-41cc-8403-4a0e83160fea,5f93d2af-64ff-41cc-8403-4a0e83160fea,1,0,c12c90e4-7c40-489b-b14b-6b9442016e0f,c12c90e4-7c40-489b-b14b-6b9442016e0f,1,0,6371e288-3502-4d66-9006-b5a36107c0b7,6371e288-3502-4d66-9006-b5a36107c0b7,1,0,245814f7-028c-4c13-98eb-15412e851f81,245814f7-028c-4c13-98eb-15412e851f81,1,0,0132e564-2cd3-4930-8962-1068532f4be4,0132e564-2cd3-4930-8962-1068532f4be4,1,0,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,1,0,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,1,0,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,1,0,7021fca5-d612-43e1-927b-7f822153cf75,7021fca5-d612-43e1-927b-7f822153cf75,1,0,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,1,0,ee0a8d23-660a-492b-a813-b57394acee05,ee0a8d23-660a-492b-a813-b57394acee05,1,0,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,1,0,ade21e2e-349f-414b-8f35-6ae3b6a4064d,ade21e2e-349f-414b-8f35-6ae3b6a4064d,1,0,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,1,0,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,1,0,83f51efe-e2af-459a-b59f-2c036124ac23,83f51efe-e2af-459a-b59f-2c036124ac23,1,0,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,1,0,b03829e9-ba22-4584-85f0-c36d63f48242,b03829e9-ba22-4584-85f0-c36d63f48242,1,0,084a7c95-a59b-4861-b8b3-b5710a57ac60,084a7c95-a59b-4861-b8b3-b5710a57ac60,1,0,efcea6da-6746-4e00-913a-14cab38b5d84,efcea6da-6746-4e00-913a-14cab38b5d84,1,0,aff367fb-7fca-44d0-adf9-3731f14834f6,aff367fb-7fca-44d0-adf9-3731f14834f6,1,0,a2782760-dd4c-44d2-a785-814d6f610455,a2782760-dd4c-44d2-a785-814d6f610455,1,0,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,1,0,6581ac1f-11ef-42b8-9f3b-590bb7546e63,6581ac1f-11ef-42b8-9f3b-590bb7546e63,1,0,ce952e88-35b7-4506-81ac-d7081e50a650,ce952e88-35b7-4506-81ac-d7081e50a650,1,0,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,1,0,3bf1281f-7570-4633-86b9-3e953a7e6647,3bf1281f-7570-4633-86b9-3e953a7e6647,1,0,715dc289-5b14-4ee0-8716-9c15958b9069,715dc289-5b14-4ee0-8716-9c15958b9069,1,0,92707138-5004-4378-8477-f909166d319d,92707138-5004-4378-8477-f909166d319d,1,0,43661775-43bb-4d9e-bfbb-c46e7d194ca3,43661775-43bb-4d9e-bfbb-c46e7d194ca3,1,0,532637ef-be0d-4f42-9747-a88e17eb3def,532637ef-be0d-4f42-9747-a88e17eb3def,1,0,61127152-3e24-40b4-8a23-5eb6cae568ff,61127152-3e24-40b4-8a23-5eb6cae568ff,1,0,ffd987e3-e8af-4d46-881e-1e312e74dbac,ffd987e3-e8af-4d46-881e-1e312e74dbac,1,0,ad1142ed-183d-47a3-800c-997a3770e11e,ad1142ed-183d-47a3-800c-997a3770e11e,1,0,ebef37c6-4808-4683-93be-036ce19cafd5,ebef37c6-4808-4683-93be-036ce19cafd5,1,0,66364cd4-aaa5-421d-96d6-3c283c14650d,66364cd4-aaa5-421d-96d6-3c283c14650d,1,0,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,fdbbbf8b-dacf-436e-8d8b-1e2b8e854b17,1,0,3c54d440-e908-43d6-a5cc-bb64620c82d7,3c54d440-e908-43d6-a5cc-bb64620c82d7,1,0,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,23a240a2-52ee-46ab-89d9-50dcee2cc8d2,1,0,bf1dd911-8ee1-407b-acae-10c85b74baf3,bf1dd911-8ee1-407b-acae-10c85b74baf3,1,0,e924058f-25c3-4744-a565-836b824991b7,e924058f-25c3-4744-a565-836b824991b7,1,0,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,bc6a47a1-a3f3-4d7e-9dad-099bd3dba751,1,0,518dcd70-4ccf-4866-a94f-7ceec7dd2801,518dcd70-4ccf-4866-a94f-7ceec7dd2801,1,0,f9950ab5-1077-4033-bbbf-53899a1bcf33,f9950ab5-1077-4033-bbbf-53899a1bcf33,1,0,8f16763b-86f0-4ad0-b786-cce7dcb3460e,8f16763b-86f0-4ad0-b786-cce7dcb3460e,1,0,0481bc65-6a32-46b9-ae87-993ba52a29a5,0481bc65-6a32-46b9-ae87-993ba52a29a5,1,0,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,1,0,dbc5f419-63b0-4cbe-90ff-c0101105e46c,dbc5f419-63b0-4cbe-90ff-c0101105e46c,1,0,c708f6e9-b7a0-4046-90f3-83527da7b872,c708f6e9-b7a0-4046-90f3-83527da7b872,1,0,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,1,0,14256e0a-a947-42a3-8e36-47bfbb052a0c,14256e0a-a947-42a3-8e36-47bfbb052a0c,1,0,1b1aa77a-d14b-4751-a7da-0b5bac4db461,1b1aa77a-d14b-4751-a7da-0b5bac4db461,1,0,c0dcdb22-6719-4597-a781-bca1370909e5,c0dcdb22-6719-4597-a781-bca1370909e5,1,0,7ebf99c3-33d2-4e4c-ac45-ca4ed0c3c100,7ebf99c3-33d2-4e4c-ac45-ca4ed0c3c100,1,0,7a34f723-cd14-4949-a40f-7ce579bf0449,7a34f723-cd14-4949-a40f-7ce579bf0449,1,0,5cdc9ac7-bba9-4ed1-845a-607976fc4679,5cdc9ac7-bba9-4ed1-845a-607976fc4679,1,0,295f3692-0721-4c41-a69b-171ef20a5018,295f3692-0721-4c41-a69b-171ef20a5018,1,0,86c22871-6d1c-44e0-8ade-ce4bdeb23321,86c22871-6d1c-44e0-8ade-ce4bdeb23321,1,0,da51de81-4d4f-46b5-a308-7b50db6c45a7,da51de81-4d4f-46b5-a308-7b50db6c45a7,1,0,8d31ce6a-4d44-46c6-a11c-47fb33e88691,8d31ce6a-4d44-46c6-a11c-47fb33e88691,1,0,c2a8c2d3-ff13-4a13-acd4-797118c4e767,c2a8c2d3-ff13-4a13-acd4-797118c4e767,1,0,bc6adf75-8666-49f3-9703-b0014dfee123,bc6adf75-8666-49f3-9703-b0014dfee123,1,0,30632f54-b779-4857-a5cc-c53fe8887ee5,30632f54-b779-4857-a5cc-c53fe8887ee5,1,0,087480bb-8c89-4b00-a29b-b7e29926478d,087480bb-8c89-4b00-a29b-b7e29926478d,1,0,685373b7-638a-439a-8cba-703d56e4e404,685373b7-638a-439a-8cba-703d56e4e404,1,0,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,eafaec9c-030b-4e5f-8fa8-e17dad2feec9,1,0,df22b227-b2c3-4e65-9706-7582f99fe59c,df22b227-b2c3-4e65-9706-7582f99fe59c,1,0,35828c88-f1ec-42e7-b189-78748931ee4a,35828c88-f1ec-42e7-b189-78748931ee4a,1,0,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,8a41b8f1-93fc-44e6-bf45-0d1fa9d24f4a,1,0,1cfba08f-d5e5-4833-b494-a25d0477e9c3,1cfba08f-d5e5-4833-b494-a25d0477e9c3,1,0,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,ae22743b-6d21-4fbb-bb4c-fee53e2b87cb,1,0,921a0a14-8c06-4894-95ce-423000769364,921a0a14-8c06-4894-95ce-423000769364,1,0,3805ee39-a48a-499a-9ef8-9c2a5985404f,3805ee39-a48a-499a-9ef8-9c2a5985404f,1,0,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,07ccfe87-e1ab-4da7-92cb-a612e0972b0b,1,0,08c2f92c-eb05-49e7-bfc9-4a89607b9864,08c2f92c-eb05-49e7-bfc9-4a89607b9864,1,0,6d751379-89a7-49b5-93e5-578329c63d9c,6d751379-89a7-49b5-93e5-578329c63d9c,1,0,c3f156ef-947e-4ebb-883f-4f099a116063,c3f156ef-947e-4ebb-883f-4f099a116063,1,0,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,5e3ab0a3-c0a6-4f41-85d3-2eede4abb555,1,0,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,a065ffc3-f50b-4a78-9b84-bfc4e5515a4b,1,0,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,4cba5a06-1484-4dd1-8e35-2d702c7d96d0,1,0,e98e9e56-2995-430c-bd3b-f1070aec15a5,e98e9e56-2995-430c-bd3b-f1070aec15a5,1,0,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,d35c51b0-4cb7-4f9c-8aac-6a25a1b49adf,1,0,8a7546f4-bfc9-4732-bf60-43a41e2c8753,8a7546f4-bfc9-4732-bf60-43a41e2c8753,1,0,16244165-d5a4-4012-8bb5-7f5fee1111af,16244165-d5a4-4012-8bb5-7f5fee1111af,1,0,290b72ad-004f-46ab-be5e-47557543b965,290b72ad-004f-46ab-be5e-47557543b965,1,0,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,e1b2ccf9-5a8f-4008-86f3-d2c7cf5581d1,1,0,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,fa0e0792-bffb-47ce-866f-9e8dbdab17a4,1,0,263bcd20-9878-48d4-aac4-b371ec49d8d6,263bcd20-9878-48d4-aac4-b371ec49d8d6,1,0,da1d8660-2757-4cea-bae0-c2210b9406ae,da1d8660-2757-4cea-bae0-c2210b9406ae,1,0,d60329c6-8f48-481d-82e7-18da355cb09c,d60329c6-8f48-481d-82e7-18da355cb09c,1,0,c4b14162-b25b-4099-9ec3-7251848ef08a,c4b14162-b25b-4099-9ec3-7251848ef08a,1,0,8eb5ba97-eb38-4357-8bfc-e9618280800d,8eb5ba97-eb38-4357-8bfc-e9618280800d,1,0,b72f73d5-e274-472b-871b-16af72dab603,b72f73d5-e274-472b-871b-16af72dab603,1,0,b008d184-0b61-460d-9490-89ecc1cd58ba,b008d184-0b61-460d-9490-89ecc1cd58ba,1,0,c8340e2f-6958-4bcd-8e17-499c4adfe60b,c8340e2f-6958-4bcd-8e17-499c4adfe60b,1,0,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,c72831cd-d064-4fe8-9603-64e6d7b8ac4d,1,0,03f68d82-752c-45d1-bf9a-60ecd21a2c81,03f68d82-752c-45d1-bf9a-60ecd21a2c81,1,0,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,307e8938-e347-4eff-b2fb-fd0b8f4aa27f,1,0,d4fffc79-2841-49a9-a382-e9e4138984df,d4fffc79-2841-49a9-a382-e9e4138984df,1,0,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,84e4c572-5b32-46e0-82a0-0c76d4ef5d73,1,0,9f41f903-d316-4189-8dc0-603ea9036c1c,9f41f903-d316-4189-8dc0-603ea9036c1c,1,0,e19e70d6-8707-4dde-ae69-7bd97035ca03,e19e70d6-8707-4dde-ae69-7bd97035ca03,1,0,425b5272-1130-457d-8a05-aee8fad681d9,425b5272-1130-457d-8a05-aee8fad681d9,1,0,8d583436-f2a6-4a33-8137-1376f5754643,8d583436-f2a6-4a33-8137-1376f5754643,1,0,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,4a864e74-41ce-4673-a080-bc3c2ba1b8ee,1,0,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,d279958e-6dd4-4bb0-a65f-c8768b4c4d96,1,0,2d66502d-77ab-4cc9-9ccf-5433458fae9f,2d66502d-77ab-4cc9-9ccf-5433458fae9f,1,0,cff48da7-3c46-4602-83e8-90c9ea53e107,cff48da7-3c46-4602-83e8-90c9ea53e107,1,0,7155472d-c791-402c-96e1-d25612024c88,7155472d-c791-402c-96e1-d25612024c88,1,0,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,fb90c261-24a7-4cef-8a2c-85c0e4fdd64a,1,0,9005911d-ea81-48b6-bf50-1a328ff4d7be,9005911d-ea81-48b6-bf50-1a328ff4d7be,1,0,7df12006-c0c0-42a6-b852-bdced72c62e3,7df12006-c0c0-42a6-b852-bdced72c62e3,1,0,9c00987d-3c55-40eb-bae8-f36e71e4ef87,9c00987d-3c55-40eb-bae8-f36e71e4ef87,1,0,29273130-5142-48c9-8399-00e5ab4b6203,29273130-5142-48c9-8399-00e5ab4b6203,1,0,9e14cd7e-1293-4008-baf8-88df6a98abf7,9e14cd7e-1293-4008-baf8-88df6a98abf7,1,0,211d226f-dac6-43d5-8720-952da4339e35,211d226f-dac6-43d5-8720-952da4339e35,1,0,df67cdcd-20ff-46d4-902b-dc4d81ee46bd,df67cdcd-20ff-46d4-902b-dc4d81ee46bd,1,0,98e3aace-52a6-4911-8205-92165adca6de,98e3aace-52a6-4911-8205-92165adca6de,1,0,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,91f4dbf9-d539-4239-a95d-c1d9e14e50f8,1,0,577e5fea-b792-4c8b-b3b3-a03a14b64b04,577e5fea-b792-4c8b-b3b3-a03a14b64b04,1,0,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,ba5ec2d6-1791-42b5-8e6f-04d1d18e9469,1,0,b18d312b-f9c3-4f37-ac77-d499e949f154,b18d312b-f9c3-4f37-ac77-d499e949f154,1,0,ace2beea-d393-412f-8b71-b845b665e2c4,ace2beea-d393-412f-8b71-b845b665e2c4,1,0,3fd4bc77-2a1b-4750-a54a-4171c8d40027,3fd4bc77-2a1b-4750-a54a-4171c8d40027,1,0,5b27fde9-fa80-48b1-aea1-73e132b9a944,5b27fde9-fa80-48b1-aea1-73e132b9a944,1,0,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,1,0,a747ec6b-f230-49b4-a929-7ed1ba87b078,a747ec6b-f230-49b4-a929-7ed1ba87b078,1,0,796f8fb4-d9cd-40ae-936b-8a70d2eb1121,796f8fb4-d9cd-40ae-936b-8a70d2eb1121,1,0,4802e016-a9e9-47d0-916b-b42194a1f388,4802e016-a9e9-47d0-916b-b42194a1f388,1,0,a1740d1f-1b8f-4db5-be5e-0eac44e934b8,a1740d1f-1b8f-4db5-be5e-0eac44e934b8,1,0,4062674a-4a81-494d-82bc-4984cd7c7903,4062674a-4a81-494d-82bc-4984cd7c7903,1,0,782a8801-06ca-4d63-bf8b-63d2320766d8,782a8801-06ca-4d63-bf8b-63d2320766d8,1,0,93a73123-d98c-4286-9269-7bfcedd115e8,93a73123-d98c-4286-9269-7bfcedd115e8,1,0,c5985c02-1824-4ce9-b415-1621dd2ee864,c5985c02-1824-4ce9-b415-1621dd2ee864,1,0,993ce747-cdc9-445f-ad7d-daf53cd5f7e9,993ce747-cdc9-445f-ad7d-daf53cd5f7e9,1,0,e819aaf6-3dfb-492a-8a4a-50a7c6854790,e819aaf6-3dfb-492a-8a4a-50a7c6854790,1,0,62b95ba1-f213-42fb-90f3-a03e8094bc9e,62b95ba1-f213-42fb-90f3-a03e8094bc9e,1,0,619b534d-5605-40d3-9b8c-4443a21d7795,619b534d-5605-40d3-9b8c-4443a21d7795,1,0,a010bbf4-d547-4576-9797-28e3096ffed3,a010bbf4-d547-4576-9797-28e3096ffed3,1,0,a44c3eb2-1054-41ca-82e8-fc35336e7009,a44c3eb2-1054-41ca-82e8-fc35336e7009,1,0,01f67911-4ca7-4668-b970-62c299b98e56,01f67911-4ca7-4668-b970-62c299b98e56,1,0,20c89c94-f77f-4e14-8c97-2a70c1419ce3,20c89c94-f77f-4e14-8c97-2a70c1419ce3,1,0,aa509aa3-dd45-41f3-82c7-59662c2e2c47,aa509aa3-dd45-41f3-82c7-59662c2e2c47,1,0,c4552529-e69e-4c5c-bd66-04b2f7dac281,c4552529-e69e-4c5c-bd66-04b2f7dac281,1,0,381b49ba-793a-4418-9fd4-598844fb72a6,381b49ba-793a-4418-9fd4-598844fb72a6,1,0,1aee302d-df31-49ea-b542-436dc1d79ae1,1aee302d-df31-49ea-b542-436dc1d79ae1,1,0,593509da-d33c-49ff-a62c-a28cbc4651c1,593509da-d33c-49ff-a62c-a28cbc4651c1,1,0,5e346a0b-a322-4565-adb9-70131fb05fa3,5e346a0b-a322-4565-adb9-70131fb05fa3,1,0,9a69c559-194b-4f74-9879-82740260f5f6,9a69c559-194b-4f74-9879-82740260f5f6,1,0,93bf1dcf-670d-4c8b-bdbf-e43c2edf8056,93bf1dcf-670d-4c8b-bdbf-e43c2edf8056,1,0,8a06f980-78f3-42f4-9d96-da2e0f0f36a7,8a06f980-78f3-42f4-9d96-da2e0f0f36a7,1,0,fee2aa74-7a81-4ab2-a457-2edf8ac1aa2d,fee2aa74-7a81-4ab2-a457-2edf8ac1aa2d,1,0,2e19fb7b-270f-4181-b4a1-640280bbbc5c,2e19fb7b-270f-4181-b4a1-640280bbbc5c,1,0,aa773eef-0c4a-49be-9f5e-9131bc041415,aa773eef-0c4a-49be-9f5e-9131bc041415,1,0,9b31e474-01d4-4c3b-a633-3a2ff3917d62,9b31e474-01d4-4c3b-a633-3a2ff3917d62,1,0,1c09bf33-9b54-4bfd-bc92-e7324025fab0,1c09bf33-9b54-4bfd-bc92-e7324025fab0,1,0,8d7750e9-899f-4434-8702-44cd02681779,8d7750e9-899f-4434-8702-44cd02681779,1,0,d85244dc-c417-4e69-9aa7-7ad313ecb940,d85244dc-c417-4e69-9aa7-7ad313ecb940,1,0,3bebf5e9-68bb-48dc-a39d-cbdca2dbecb1,3bebf5e9-68bb-48dc-a39d-cbdca2dbecb1,1,0,cd392ef0-dedb-4f83-9a2c-a24190ee0dc0,cd392ef0-dedb-4f83-9a2c-a24190ee0dc0,1,0,bb2f0c1c-3cfb-4a26-b6de-5bbeb5614587,bb2f0c1c-3cfb-4a26-b6de-5bbeb5614587,1,0,0713de12-87d5-4877-bd8a-2b6466df67df,0713de12-87d5-4877-bd8a-2b6466df67df,1,0,b848aafc-44fb-4dfe-8eec-233dc08fbbb6,b848aafc-44fb-4dfe-8eec-233dc08fbbb6,1,0,c4d7c569-4649-4f98-a048-45f3c5933670,c4d7c569-4649-4f98-a048-45f3c5933670,1,0,6dc05d69-bd54-4e8a-8985-c2ddfa0aaffb,6dc05d69-bd54-4e8a-8985-c2ddfa0aaffb,1,0,426cbebb-880b-49c5-b046-83c5e071273e,426cbebb-880b-49c5-b046-83c5e071273e,1,0,ad08b104-01f8-4900-a06c-baa1d55eba84,ad08b104-01f8-4900-a06c-baa1d55eba84,1,0,9352d10d-188f-4074-8dd1-7be5c11525e3,9352d10d-188f-4074-8dd1-7be5c11525e3,1,0,1933634a-6f10-48e7-99f0-60ac338f7832,1933634a-6f10-48e7-99f0-60ac338f7832,1,0,655deec5-c079-4748-8521-b3f10c243394,655deec5-c079-4748-8521-b3f10c243394,1,0,f6d4d818-d54c-4337-82cf-abd5e6dbe770,f6d4d818-d54c-4337-82cf-abd5e6dbe770,1,0,656c447b-291f-4e62-81ac-1c004841aa72,656c447b-291f-4e62-81ac-1c004841aa72,1,0,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,1,0,5ba93404-58ad-4321-9a62-27db828f75f6,5ba93404-58ad-4321-9a62-27db828f75f6,1,0,3da20e86-1d83-4935-b425-a91392dc8f35,3da20e86-1d83-4935-b425-a91392dc8f35,1,0,b56f25d2-72a9-4d80-8998-77ac3097c873,b56f25d2-72a9-4d80-8998-77ac3097c873,1,0,03bd775a-e0a1-4205-82ce-6068e73ad134,03bd775a-e0a1-4205-82ce-6068e73ad134,1,0,40bed47b-7754-4a70-b51a-47385fd46e83,40bed47b-7754-4a70-b51a-47385fd46e83,1,0,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,773ef914-5e7e-4ec1-bcdb-b2d111b560e6,1,0,1e5a4f93-1ab9-4775-9538-2a1772215d89,1e5a4f93-1ab9-4775-9538-2a1772215d89,1,0,c25db165-0734-4fef-b161-e5164954a616,c25db165-0734-4fef-b161-e5164954a616,1,0,37e3d914-643e-4963-b4a0-7bc6727c0c9b,37e3d914-643e-4963-b4a0-7bc6727c0c9b,1,0,b6902500-3e03-4e83-a077-00500abc00b6,b6902500-3e03-4e83-a077-00500abc00b6,1,0,4f97b909-68f9-482a-b958-b4caa9b83763,4f97b909-68f9-482a-b958-b4caa9b83763,1,0,c31e34db-41ff-4db3-a4d0-f780f67070f6,c31e34db-41ff-4db3-a4d0-f780f67070f6,1,0,7a014fcb-a4b8-4c1c-b0de-21907a917c25,7a014fcb-a4b8-4c1c-b0de-21907a917c25,1,0,1688ef5d-72df-4bc4-a879-89033d466ad7,1688ef5d-72df-4bc4-a879-89033d466ad7,1,0,30f18fbf-4240-4708-a71a-189f8fc324f3,30f18fbf-4240-4708-a71a-189f8fc324f3,1,0,344cb0de-315d-4d05-93f8-8a1f53208470,344cb0de-315d-4d05-93f8-8a1f53208470,1,0,cd869887-0b0e-43db-8b51-04fe4a1341d5,cd869887-0b0e-43db-8b51-04fe4a1341d5,1,0,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,1,0,a7973409-b18e-4b88-ad50-e2ae89470d8f,a7973409-b18e-4b88-ad50-e2ae89470d8f,1,0,a537875e-492e-4cf2-96e9-e2e97bb206da,a537875e-492e-4cf2-96e9-e2e97bb206da,1,0,cd8fd85f-f02e-4f11-b4b4-40670febfaca,cd8fd85f-f02e-4f11-b4b4-40670febfaca,1,0,085a08f3-9d93-429d-9b1b-9065ab8363f7,085a08f3-9d93-429d-9b1b-9065ab8363f7,1,0,a530c0a1-c1d2-40bb-9d0e-320074dbb684,a530c0a1-c1d2-40bb-9d0e-320074dbb684,1,0,55c63580-16f1-4d6f-a40b-e630f71ebb98,55c63580-16f1-4d6f-a40b-e630f71ebb98,1,0,0a136ad9-22ad-4ba7-a31a-40a193b49d26,0a136ad9-22ad-4ba7-a31a-40a193b49d26,1,0,208c7b8c-3df9-4441-8ebf-34ffa81572a2,208c7b8c-3df9-4441-8ebf-34ffa81572a2,1,0,8c17fd7c-74d7-496a-a843-42022afb0707,8c17fd7c-74d7-496a-a843-42022afb0707,1,0,091ccac1-9a63-4a89-bb0c-333b274b0c70,091ccac1-9a63-4a89-bb0c-333b274b0c70,1,0,b456d820-8034-4381-960d-66d9f86b0a4b,b456d820-8034-4381-960d-66d9f86b0a4b,1,0,bd55fd03-cf67-4333-a554-98e03d18f780,bd55fd03-cf67-4333-a554-98e03d18f780,1,0,6eac5f7b-0952-4c94-9028-529b14ffcd4f,6eac5f7b-0952-4c94-9028-529b14ffcd4f,1,0,1a7c774d-5b86-4051-b797-3081e19fa30a,1a7c774d-5b86-4051-b797-3081e19fa30a,1,0,00949768-5833-4fe2-8752-b009d1bceef8,00949768-5833-4fe2-8752-b009d1bceef8,1,0,167455d1-6658-409f-834c-f6ccfe7b25de,167455d1-6658-409f-834c-f6ccfe7b25de,1,0,c5b3ca21-8f7b-4933-853c-7d95b17b5631,c5b3ca21-8f7b-4933-853c-7d95b17b5631,1,0,8b0faa1e-09da-4ba4-894e-e86abc5d39df,8b0faa1e-09da-4ba4-894e-e86abc5d39df,1,0,cb50b309-1b6c-400c-9e9e-67204dcccaae,cb50b309-1b6c-400c-9e9e-67204dcccaae,1,0,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,1,0,b8a966ba-3452-44df-91d0-7040ecd3e4c2,b8a966ba-3452-44df-91d0-7040ecd3e4c2,1,0,80d6883d-c608-4fe5-acae-78bc45e40e5f,80d6883d-c608-4fe5-acae-78bc45e40e5f,1,0,213b173a-c3b7-449c-a618-d479c4dc38e8,213b173a-c3b7-449c-a618-d479c4dc38e8,1,0,7a64dffc-5cfe-41e2-bd55-fbf4957559a4,7a64dffc-5cfe-41e2-bd55-fbf4957559a4,1,0,a78249aa-ca9f-4bee-b00d-68ff59ea81a4,a78249aa-ca9f-4bee-b00d-68ff59ea81a4,1,0,7534148d-0124-49a2-a446-c6205d153153,7534148d-0124-49a2-a446-c6205d153153,1,0,32ed8a10-7177-4e45-866e-04a1b6831570,32ed8a10-7177-4e45-866e-04a1b6831570,1,0,e2a90d7a-5480-47cd-b296-8d60d8baf7f9,e2a90d7a-5480-47cd-b296-8d60d8baf7f9,1,0,8190a432-1037-4334-b2c7-bae39f7f9442,8190a432-1037-4334-b2c7-bae39f7f9442,1,0,4733e5c1-8198-408b-8903-866d3b0fdc43,4733e5c1-8198-408b-8903-866d3b0fdc43,1,0,e1fc5146-37c5-4207-af05-7250976bd406,e1fc5146-37c5-4207-af05-7250976bd406,1,0,60038cd9-8d01-44b1-9d3f-f3a31e59e5db,60038cd9-8d01-44b1-9d3f-f3a31e59e5db,1,0,f0bfb98b-cc43-4b6c-8166-9b81b4c22cb0,f0bfb98b-cc43-4b6c-8166-9b81b4c22cb0,1,0,f5e27159-789a-4d34-ac51-fd99d753b83a,f5e27159-789a-4d34-ac51-fd99d753b83a,1,0,0f565466-19e0-4edb-9827-dab5a2bb47d7,0f565466-19e0-4edb-9827-dab5a2bb47d7,1,0,e8d57e5d-14a4-485f-bf20-057f85fe2a64,e8d57e5d-14a4-485f-bf20-057f85fe2a64,1,0,f1cb02ff-a2f0-4a34-93fa-e47c6e210ee1,f1cb02ff-a2f0-4a34-93fa-e47c6e210ee1,1,0,981a74f4-cdc2-4016-b462-9b5fd0d6de4d,981a74f4-cdc2-4016-b462-9b5fd0d6de4d,1,0,1d89e2b7-8f66-4210-8ab4-29efde5e5295,1d89e2b7-8f66-4210-8ab4-29efde5e5295,1,0,fafff964-8daa-4921-9d53-fd6be3878d94,fafff964-8daa-4921-9d53-fd6be3878d94,1,0,7183d525-212a-42f3-a7e5-eb9deaeaa4a3,7183d525-212a-42f3-a7e5-eb9deaeaa4a3,1,0,b82b27cc-e81c-4b7c-9833-ea4f2ce21edb,b82b27cc-e81c-4b7c-9833-ea4f2ce21edb,1,0,4347f77e-bad9-4525-90a0-794787f03585,4347f77e-bad9-4525-90a0-794787f03585,1,0,cfde3330-2bed-4273-8d69-c213ebdde247,cfde3330-2bed-4273-8d69-c213ebdde247,1,0,2d6ca049-89a5-437e-971c-b8e42f61b460,2d6ca049-89a5-437e-971c-b8e42f61b460,1,0,c450ebe1-4223-4a7a-b9fa-374d5c13dc8c,c450ebe1-4223-4a7a-b9fa-374d5c13dc8c,1,0,271d58d0-4449-40cc-bae9-cc4c50eebd9b,271d58d0-4449-40cc-bae9-cc4c50eebd9b,1,0,58df9322-c786-4dd1-af49-7cd164b378da,58df9322-c786-4dd1-af49-7cd164b378da,1,0,8d48de7f-61d6-4462-9c14-f728206a482c,8d48de7f-61d6-4462-9c14-f728206a482c,1,0,a87e890a-8924-4f56-9e37-04579b95297a,a87e890a-8924-4f56-9e37-04579b95297a,1,0,c71d4fa4-86b0-41e2-8b6a-cfb91e131eaf,c71d4fa4-86b0-41e2-8b6a-cfb91e131eaf,1,0,4c1f2581-ee42-4df5-9169-20205a18a9be,4c1f2581-ee42-4df5-9169-20205a18a9be,1,0,bb3d9ea3-8895-4950-9ee9-4249ca983d48,bb3d9ea3-8895-4950-9ee9-4249ca983d48,1,0,86ea21fa-5ecc-4d81-b6ad-d71e7ed39009,86ea21fa-5ecc-4d81-b6ad-d71e7ed39009,1,0,b806d2b6-bbd1-4abd-9471-7791603a2fcf,b806d2b6-bbd1-4abd-9471-7791603a2fcf,1,0,d7aa519b-9a2e-4946-bd06-9ac22bb7c1e4,d7aa519b-9a2e-4946-bd06-9ac22bb7c1e4,1,0,ecee1ec8-aa1f-4b90-a1b3-2538a53c0dd7,ecee1ec8-aa1f-4b90-a1b3-2538a53c0dd7,1,0,34f50dd9-de16-4013-a2ef-6595d9c28930,34f50dd9-de16-4013-a2ef-6595d9c28930,1,0,56fcca65-3429-4409-bce7-f434f6530a74,56fcca65-3429-4409-bce7-f434f6530a74,1,0,5236ca8d-a4a6-4df8-a6a3-5cfe02c49aeb,5236ca8d-a4a6-4df8-a6a3-5cfe02c49aeb,1,0,bcfabf25-ae2f-4f73-836c-2cab3617a0b6,bcfabf25-ae2f-4f73-836c-2cab3617a0b6,1,0,b286f047-a4d0-4808-b1b4-27997ead6d49,b286f047-a4d0-4808-b1b4-27997ead6d49,1,0,49da2d3a-657a-4cfd-8e37-422b96d2cda5,49da2d3a-657a-4cfd-8e37-422b96d2cda5,1,0,fced16ae-abee-4fbe-9582-dfd368d5610a,fced16ae-abee-4fbe-9582-dfd368d5610a,1,0,afe60bad-1585-487f-9a39-9b9e031f9576,afe60bad-1585-487f-9a39-9b9e031f9576,1,0,4c4f0475-bd11-40c8-af0d-8affec6f838d,4c4f0475-bd11-40c8-af0d-8affec6f838d,1,0,7aee36ac-bbd1-4b06-8266-b7325fb9ce3c,7aee36ac-bbd1-4b06-8266-b7325fb9ce3c,1,0,855439d7-a621-48f5-b6d9-bc2bbd11ad90,855439d7-a621-48f5-b6d9-bc2bbd11ad90,1,0,4e0ec0f0-eb44-41b0-b950-88fdb6ac0db2,4e0ec0f0-eb44-41b0-b950-88fdb6ac0db2,1,0,2f25e742-555b-4db8-bff2-2d345ce2a93a,2f25e742-555b-4db8-bff2-2d345ce2a93a,1,0,303d8c17-4303-4f1d-8bed-51cd7ea0a4b2,303d8c17-4303-4f1d-8bed-51cd7ea0a4b2,1,0,46affd3a-f31c-4432-bd58-2f2b1ed9bc4e,46affd3a-f31c-4432-bd58-2f2b1ed9bc4e,1,0,a7fee9d3-569d-4b5b-bd47-44790e0095f5,a7fee9d3-569d-4b5b-bd47-44790e0095f5,1,0,a258fe12-7e55-4f89-86fa-962b1d2947ac,a258fe12-7e55-4f89-86fa-962b1d2947ac,1,0,93701593-5ac8-4266-b471-7e9ed35a9c3e,93701593-5ac8-4266-b471-7e9ed35a9c3e,1,0,0fdb864e-ede9-4777-835c-0804968ee544,0fdb864e-ede9-4777-835c-0804968ee544,1,0,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,04c45a51-4a8e-48fa-a39c-f67ce2079fc4,1,0,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,b46546fe-3d6b-473f-a7cb-ff3b3ae0bafe,1,0,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,e7b1810c-8e6c-4759-9e6f-c754b5a1ac77,1,0,5dee9814-fe38-4631-8148-8d6c87ef6f47,5dee9814-fe38-4631-8148-8d6c87ef6f47,1,0,37d17053-5c2b-4972-b6a5-a589f2ddbde6,37d17053-5c2b-4972-b6a5-a589f2ddbde6,1,0,c349968a-3f87-425b-8efb-d847934dee4b,c349968a-3f87-425b-8efb-d847934dee4b,1,0,3bb8dc33-970c-4c58-9036-ce716d963847,3bb8dc33-970c-4c58-9036-ce716d963847,1,0,fae0d2e0-1bcd-4a77-86d6-407ca05c1c95,fae0d2e0-1bcd-4a77-86d6-407ca05c1c95,1,0,b3ff39fa-f665-4d01-9a2a-69722e6b1071,b3ff39fa-f665-4d01-9a2a-69722e6b1071,1,0,0abacb0a-ce00-474e-8aec-35685c51ddef,0abacb0a-ce00-474e-8aec-35685c51ddef,1,0,ae407b17-03aa-4268-8603-58d6714dae89,ae407b17-03aa-4268-8603-58d6714dae89,1,0,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,5c0ce79b-97a9-4917-9b02-a4548a97d5a1,1,0,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,c552cfac-d3ef-4b63-a0b9-7c79261ff9f3,1,0,5bb6e52c-ac26-4143-8e90-f04f703f823b,5bb6e52c-ac26-4143-8e90-f04f703f823b,1,0,579baaa4-6493-4d99-8744-6399757295c7,579baaa4-6493-4d99-8744-6399757295c7,1,0,ae6d0e12-8857-476c-b4b2-f03295cbed3e,ae6d0e12-8857-476c-b4b2-f03295cbed3e,1,0,cc8e3172-491d-45d8-a7eb-fc6c400845cb,cc8e3172-491d-45d8-a7eb-fc6c400845cb,1,0,d7cfc87f-ac09-44aa-91d9-6511c408c5cb,d7cfc87f-ac09-44aa-91d9-6511c408c5cb,1,0,7ee1e0d0-9735-45da-bd24-c0dbabfd5b1e,7ee1e0d0-9735-45da-bd24-c0dbabfd5b1e,1,0,bd0e3bd4-1207-41ea-8dfc-afa8f7d08cc2,bd0e3bd4-1207-41ea-8dfc-afa8f7d08cc2,1,0,51d83895-5692-4479-9612-07c790d19dff,51d83895-5692-4479-9612-07c790d19dff,1,0,9c1325af-7492-42be-b3af-51b692534510,9c1325af-7492-42be-b3af-51b692534510,1,0,dface15c-cd65-4fb1-b4dd-b513086d3f8e,dface15c-cd65-4fb1-b4dd-b513086d3f8e,1,0,d854b528-8456-4453-9c2d-4f96caf10481,d854b528-8456-4453-9c2d-4f96caf10481,1,0,245f870e-a53a-4d86-aa0a-c0c7709b8acb,245f870e-a53a-4d86-aa0a-c0c7709b8acb,1,0,476f6bfa-b10c-4e0f-8499-23c652715b3f,476f6bfa-b10c-4e0f-8499-23c652715b3f,1,0,65c9754b-53f6-4616-a9d4-74826f7b0ced,65c9754b-53f6-4616-a9d4-74826f7b0ced,1,0,eca2b076-d218-4d1c-948b-7894edf9fa49,eca2b076-d218-4d1c-948b-7894edf9fa49,1,0,d6969c1e-e13c-4542-abb7-9cf6bb50b8e2,d6969c1e-e13c-4542-abb7-9cf6bb50b8e2,1,0,ccd91f94-d3f1-4aa3-90cf-081d72c4cab1,ccd91f94-d3f1-4aa3-90cf-081d72c4cab1,1,0,aa7d5ca4-3c02-4ca1-a790-2435ee9f9f02,aa7d5ca4-3c02-4ca1-a790-2435ee9f9f02,1,0,b7e85f5c-4312-44c6-895a-3f636a8c78d8,b7e85f5c-4312-44c6-895a-3f636a8c78d8,1,0,3b6e7ee6-0ef5-464a-a01a-6143479c7a61,3b6e7ee6-0ef5-464a-a01a-6143479c7a61,1,0,1969e8d1-0a82-44cb-a0d4-e5badb1d28d4,1969e8d1-0a82-44cb-a0d4-e5badb1d28d4,1,0,a1afacc5-f49a-4df2-a44d-479594d50179,a1afacc5-f49a-4df2-a44d-479594d50179,1,0,fe70eba3-7477-4a38-a511-d69960abb928,fe70eba3-7477-4a38-a511-d69960abb928,1,0,6534ea96-2145-49e6-9739-f59459dc7f6b,6534ea96-2145-49e6-9739-f59459dc7f6b,1,0,f49bffa0-cad6-4801-b82e-21aa580e72e6,f49bffa0-cad6-4801-b82e-21aa580e72e6,1,0,bbbfb817-8db3-4415-86c3-af028276d6e9,bbbfb817-8db3-4415-86c3-af028276d6e9,1,0,6a91112c-f6cc-47a0-9d26-a36c7702af7d,6a91112c-f6cc-47a0-9d26-a36c7702af7d,1,0,40a59681-f31d-4fb9-9301-67c1430590e0,40a59681-f31d-4fb9-9301-67c1430590e0,1,0,cb92dc2e-6053-4233-a408-4464514b1257,cb92dc2e-6053-4233-a408-4464514b1257,1,0,8cd65ad3-a7a3-46f6-9061-e8751fd5073e,8cd65ad3-a7a3-46f6-9061-e8751fd5073e,1,0,85550a7a-8fe0-4296-ace5-63cf053536b4,85550a7a-8fe0-4296-ace5-63cf053536b4,1,0,cf1bd9cd-2ef2-4868-b6c0-5160860690f7,cf1bd9cd-2ef2-4868-b6c0-5160860690f7,1,0,9c3bc502-bcb1-4c90-ae43-53c798958339,9c3bc502-bcb1-4c90-ae43-53c798958339,1,0,3f8b6411-6606-4d27-891e-7c77be47c5f9,3f8b6411-6606-4d27-891e-7c77be47c5f9,1,0,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,1,0,5eb4ca7f-027a-4860-a167-e6b424527e7a,5eb4ca7f-027a-4860-a167-e6b424527e7a,1,0,f9b98ba5-1fa8-42a4-b1a2-dd71874083cb,f9b98ba5-1fa8-42a4-b1a2-dd71874083cb,1,0,6871015f-d959-4a77-a091-a23cb4ebd8f9,6871015f-d959-4a77-a091-a23cb4ebd8f9,1,0,e5e1631b-a494-4e73-b356-b4330b84cc88,e5e1631b-a494-4e73-b356-b4330b84cc88,1,0,f8f0857f-2c75-471a-ae0b-a3a265e1eb25,f8f0857f-2c75-471a-ae0b-a3a265e1eb25,1,0,a23f97fb-7ac9-4941-a2c6-bbff6c36ac12,a23f97fb-7ac9-4941-a2c6-bbff6c36ac12,1,0,80cf54ed-8677-4c89-a378-0abef6c64010,80cf54ed-8677-4c89-a378-0abef6c64010,1,0,f0dec7b3-2d6a-44ce-a1da-9c71ccd37539,f0dec7b3-2d6a-44ce-a1da-9c71ccd37539,1,0,56ee3afd-5ae6-421e-b9f3-26505e40f100,56ee3afd-5ae6-421e-b9f3-26505e40f100,1,0,63c9a839-78b2-4706-b380-5aedf6914930,63c9a839-78b2-4706-b380-5aedf6914930,1,0,40f5c1cb-2654-4738-bb44-6734b0e3490b,40f5c1cb-2654-4738-bb44-6734b0e3490b,1,0,2ec484b1-95eb-43a7-9430-1c1ef49f05af,2ec484b1-95eb-43a7-9430-1c1ef49f05af,1,0,1a314ce2-03bc-4267-89a9-bb5bb866f552,1a314ce2-03bc-4267-89a9-bb5bb866f552,1,0,e3b783a6-5ea2-4cd4-955b-df63d93c1f25,e3b783a6-5ea2-4cd4-955b-df63d93c1f25,1,0,f8ab62ad-7776-49ae-b1bb-51bea9a9992b,f8ab62ad-7776-49ae-b1bb-51bea9a9992b,1,0,e859dd18-8baf-49c0-b7a0-1205b6c125d3,e859dd18-8baf-49c0-b7a0-1205b6c125d3,1,0,da59378e-0a97-4cff-977b-cc51967068ee,da59378e-0a97-4cff-977b-cc51967068ee,1,0,bbaad46d-f60d-49e6-a077-075366bca47e,bbaad46d-f60d-49e6-a077-075366bca47e,1,0,0d9f5703-91e4-4769-bedd-5bd974f2f617,0d9f5703-91e4-4769-bedd-5bd974f2f617,1,0,926cdf17-1929-43d6-8205-858aab558ad9,926cdf17-1929-43d6-8205-858aab558ad9,1,0,5ec6838f-2d70-4f91-b41b-16adfe8ed587,5ec6838f-2d70-4f91-b41b-16adfe8ed587,1,0,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,6420ad7e-61ca-4af9-9715-f2b0c3e2c58f,1,0,bee8b8a0-f058-44cb-822c-620351567627,bee8b8a0-f058-44cb-822c-620351567627,1,0,26365e29-903b-47fd-ad96-e0d87f5d6e87,26365e29-903b-47fd-ad96-e0d87f5d6e87,1,0,569180cb-ce54-4267-94b9-332e35e3c17d,569180cb-ce54-4267-94b9-332e35e3c17d,1,0,9ec6fc35-e84e-4f82-b616-5c02e945cc8f,9ec6fc35-e84e-4f82-b616-5c02e945cc8f,1,0,a2c42946-1cdb-457a-a45b-97781cfb4a15,a2c42946-1cdb-457a-a45b-97781cfb4a15,1,0,20adf54c-044c-4bea-8028-b6d20917a030,20adf54c-044c-4bea-8028-b6d20917a030,1,0,dea6b05f-d3e1-4ff4-8f71-6a0c18134e94,dea6b05f-d3e1-4ff4-8f71-6a0c18134e94,1,0,fcb97a46-d5fd-4bb5-b899-17723a9fe346,fcb97a46-d5fd-4bb5-b899-17723a9fe346,1,0,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,a666af62-aa5d-4b2b-b9e5-017d1c93ae6a,1,0,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,7604b15a-8c5e-4515-84b9-c1d36f9efd0a,1,0,a1a44832-6026-47ae-affd-5b6d52e84307,a1a44832-6026-47ae-affd-5b6d52e84307,1,0,d2fd8650-d13a-411d-8206-61b16016bd82,d2fd8650-d13a-411d-8206-61b16016bd82,1,0,f98bcdb8-6eed-4b4f-b3da-d80b5e8bed44,f98bcdb8-6eed-4b4f-b3da-d80b5e8bed44,1,0,fbaa5b0a-56dc-4bf1-b1b2-e48073f63d13,fbaa5b0a-56dc-4bf1-b1b2-e48073f63d13,1,0,a92acf0e-9132-4456-9a82-1543d98ca453,a92acf0e-9132-4456-9a82-1543d98ca453,1,0,4033eb31-8281-402a-afff-431fa36e589e,4033eb31-8281-402a-afff-431fa36e589e,1,0,5a1e1da5-7307-4f48-bb1c-2977fc4d7cef,5a1e1da5-7307-4f48-bb1c-2977fc4d7cef,1,0,f59488c7-4643-4988-8043-5c9724e04279,f59488c7-4643-4988-8043-5c9724e04279,1,0,cfe022b5-7647-4b5c-a2bd-f5d313f4a9db,cfe022b5-7647-4b5c-a2bd-f5d313f4a9db,1,0,3c0a9c45-8e57-43fa-8ae3-26b15571f2cd,3c0a9c45-8e57-43fa-8ae3-26b15571f2cd,1,0,85223d37-2503-4783-94dc-fe6265e718d5,85223d37-2503-4783-94dc-fe6265e718d5,1,0,0918cd76-56e5-4314-8a1c-c21d023ba6f8,0918cd76-56e5-4314-8a1c-c21d023ba6f8,1,0,9db21c2e-79fa-44e4-902e-416abfccb54a,9db21c2e-79fa-44e4-902e-416abfccb54a,1,0,fb082db3-197b-4d1e-b9ea-362624d547ee,fb082db3-197b-4d1e-b9ea-362624d547ee,1,0,c09dcf00-a45a-4487-99c5-d3a37956ec88,c09dcf00-a45a-4487-99c5-d3a37956ec88,1,0,531a5a0c-6ac9-4e93-8caa-42d9aad0bc82,531a5a0c-6ac9-4e93-8caa-42d9aad0bc82,1,0,2714e1b6-6b02-43a1-bc94-2934b429ed35,2714e1b6-6b02-43a1-bc94-2934b429ed35,1,0,e33c73b2-ef0b-49b7-a65f-ab2c814ad256,e33c73b2-ef0b-49b7-a65f-ab2c814ad256,1,0,4c7016da-9991-4917-8eaa-e760cc9e29d1,4c7016da-9991-4917-8eaa-e760cc9e29d1,1,0,febb3770-5c11-4ada-9e49-a27950bdaddf,febb3770-5c11-4ada-9e49-a27950bdaddf,1,0,d7b57669-e538-4e54-ab1b-8428f0586466,d7b57669-e538-4e54-ab1b-8428f0586466,1,0,9c484a15-039e-416d-af97-4c2bd90fd873,9c484a15-039e-416d-af97-4c2bd90fd873,1,0,534855e3-4cf2-471c-b982-7138917050c9,534855e3-4cf2-471c-b982-7138917050c9,1,0,4c72b944-d000-4920-aec8-54029f88ddf4,4c72b944-d000-4920-aec8-54029f88ddf4,1,0,b4033d05-05c2-4617-80d9-abfa389c47f4,b4033d05-05c2-4617-80d9-abfa389c47f4,1,0,aa29e1be-4e99-4136-8dc1-0124908979ad,aa29e1be-4e99-4136-8dc1-0124908979ad,1,0,0d76799d-7fc7-446b-88fb-dca839de00a5,0d76799d-7fc7-446b-88fb-dca839de00a5,1,0,cb5674c3-0d91-4948-bafd-d9ef44a2a69d,cb5674c3-0d91-4948-bafd-d9ef44a2a69d,1,0,ea4a869c-861c-412c-a3be-de1c57d1a251,ea4a869c-861c-412c-a3be-de1c57d1a251,1,0,eeafcc8c-fbe2-4bb4-8b8a-cf663208258d,eeafcc8c-fbe2-4bb4-8b8a-cf663208258d,1,0,6a3bd39a-59cb-4763-b49f-7ab67167a8b7,6a3bd39a-59cb-4763-b49f-7ab67167a8b7,1,0,50ac390d-324f-40bd-b3df-0468a63b94b6,50ac390d-324f-40bd-b3df-0468a63b94b6,1,0,80337710-2c60-45c4-ae1f-bb42731fb611,80337710-2c60-45c4-ae1f-bb42731fb611,1,0,9dcf467e-7701-4c7b-b747-95f4d9b9295c,9dcf467e-7701-4c7b-b747-95f4d9b9295c,1,0,77149f7a-8a76-4569-9487-991c41e132ef,77149f7a-8a76-4569-9487-991c41e132ef,1,0,9e1be65e-986f-4d21-91f0-15c66db0c947,9e1be65e-986f-4d21-91f0-15c66db0c947,1,0,75a0f8f1-6d8d-47d0-81c5-20b5e55b9cd1,75a0f8f1-6d8d-47d0-81c5-20b5e55b9cd1,1,0,d2fe4578-a1f8-4586-b052-fa71d25365c9,d2fe4578-a1f8-4586-b052-fa71d25365c9,1,0,f31f3dab-5796-47ac-a54d-3081f8cad817,f31f3dab-5796-47ac-a54d-3081f8cad817,1,0,cd59707e-b9e4-4038-8203-ae22a8060e8d,cd59707e-b9e4-4038-8203-ae22a8060e8d,1,0,db497857-33d3-49a1-b328-dfc62c973ecb,db497857-33d3-49a1-b328-dfc62c973ecb,1,0,139c001c-7b07-465a-9187-399ad32d294f,139c001c-7b07-465a-9187-399ad32d294f,1,0,5d228ce4-069e-4f98-beed-b8e1de17c3d9,5d228ce4-069e-4f98-beed-b8e1de17c3d9,1,0,9770fc09-87bf-4fce-9b0d-410efd30edae,9770fc09-87bf-4fce-9b0d-410efd30edae,1,0,f3d8590a-dcfa-4d41-8d03-642b99ffa040,f3d8590a-dcfa-4d41-8d03-642b99ffa040,1,0,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,3d73d5ff-995e-40ed-a401-cec2a3d12c8f,1,0,20156709-1481-4007-8e89-9ce79fc589fc,20156709-1481-4007-8e89-9ce79fc589fc,1,0,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,fbcda361-0ef2-47b4-ba1c-1d1952898bd3,1,0,7e7c5abd-b645-4de5-a40e-5805ec4456e2,7e7c5abd-b645-4de5-a40e-5805ec4456e2,1,0,763a16c3-a728-4b65-a485-705990310b4a,763a16c3-a728-4b65-a485-705990310b4a,1,0,65338920-c744-4d1e-b351-848b90a3feda,65338920-c744-4d1e-b351-848b90a3feda,1,0,2aedb1ac-caf1-45c7-913e-82a36637d5d4,2aedb1ac-caf1-45c7-913e-82a36637d5d4,1,0,e177e258-7d0c-4fe1-80e5-3b89de9e23d9,e177e258-7d0c-4fe1-80e5-3b89de9e23d9,1,0,3f25ac9f-c6b4-4ccc-bec4-a90c99403823,3f25ac9f-c6b4-4ccc-bec4-a90c99403823,1,0,56177464-5e9f-4598-96bc-eb311993c503,56177464-5e9f-4598-96bc-eb311993c503,1,0,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,1,0,bdfe65f4-4174-4e66-915c-943137981cf0,bdfe65f4-4174-4e66-915c-943137981cf0,1,0,5271de2d-d3a0-4128-90e0-cd8e1ea2ad30,5271de2d-d3a0-4128-90e0-cd8e1ea2ad30,1,0,c895d58a-5be1-4157-81af-f4f6db9b4b9e,c895d58a-5be1-4157-81af-f4f6db9b4b9e,1,0,8ce6cc1a-8570-4704-b9a3-44e815b2e753,8ce6cc1a-8570-4704-b9a3-44e815b2e753,1,0,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,1,0,497cbe4d-586d-48a2-8e98-d20e3e09ed42,497cbe4d-586d-48a2-8e98-d20e3e09ed42,1,0,38b7679d-3739-4572-baf2-d8c7b2a94f0a,38b7679d-3739-4572-baf2-d8c7b2a94f0a,1,0,1470f052-f032-46bc-b1ee-54555e725dfd,1470f052-f032-46bc-b1ee-54555e725dfd,1,0,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,1,0,7d336fdd-5cbf-4c92-a783-f451f7590502,7d336fdd-5cbf-4c92-a783-f451f7590502,1,0,ee8af8ee-e49a-4511-9a91-48814ab99d23,ee8af8ee-e49a-4511-9a91-48814ab99d23,1,0,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,1,0,bc10ad8f-383c-469a-8c0e-60805161055b,bc10ad8f-383c-469a-8c0e-60805161055b,1,0,86760ecb-2ddd-40ce-bc4f-94c23027a55e,86760ecb-2ddd-40ce-bc4f-94c23027a55e,1,0,6fbf844e-ee8d-490f-9177-6392d262312f,6fbf844e-ee8d-490f-9177-6392d262312f,1,0,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,1,0,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,1,0,37722a34-1148-4cc8-95e6-4645ae9cca98,37722a34-1148-4cc8-95e6-4645ae9cca98,1,0,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,1,0,cc34bd23-de0a-4b09-8333-e4693576b9f4,cc34bd23-de0a-4b09-8333-e4693576b9f4,1,0,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,1,0,903af13a-1f73-4145-a3d0-971c3be5fbe6,903af13a-1f73-4145-a3d0-971c3be5fbe6,1,0,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,1,0,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,1,0,953dbad6-4f5c-4319-874a-db358a77d001,953dbad6-4f5c-4319-874a-db358a77d001,1,0,05243f56-7e9b-4a61-8efb-1b5e525fff21,05243f56-7e9b-4a61-8efb-1b5e525fff21,1,0,7aa86a2d-2b47-447e-8901-806411011279,7aa86a2d-2b47-447e-8901-806411011279,1,0,fca0dfad-f853-4694-9ce9-53a3a10f59b7,fca0dfad-f853-4694-9ce9-53a3a10f59b7,1,0,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,1,0,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,1,0,b4cb92fb-ad82-44ed-9203-397b412b3453,b4cb92fb-ad82-44ed-9203-397b412b3453,1,0,69ceac29-06d3-45f2-b914-7966465cd0d3,69ceac29-06d3-45f2-b914-7966465cd0d3,1,0,b690721d-960b-4374-8d2c-feed3a2b354b,b690721d-960b-4374-8d2c-feed3a2b354b,1,0,271243d3-1871-4a0a-bf7f-63bacacf0a59,271243d3-1871-4a0a-bf7f-63bacacf0a59,1,0,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,1,0,150c9d05-4ccc-4cb7-879d-b1d9c3534343,150c9d05-4ccc-4cb7-879d-b1d9c3534343,1,0,65000437-bd07-4841-a458-679d44768c46,65000437-bd07-4841-a458-679d44768c46,1,0,1281fe19-bbca-4a4f-84d8-14187e62000f,1281fe19-bbca-4a4f-84d8-14187e62000f,1,0,9b7051d5-abc4-416c-a0e6-515d120d78e4,9b7051d5-abc4-416c-a0e6-515d120d78e4,1,0,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,1,0,869938e6-6310-4326-bd15-5b91fe2e0911,869938e6-6310-4326-bd15-5b91fe2e0911,1,0,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,1,0,a156521a-ece1-49d3-8056-1c3508273c45,a156521a-ece1-49d3-8056-1c3508273c45,1,0,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,1,0,10018f80-3138-4089-bf9a-a5f178f1e295,10018f80-3138-4089-bf9a-a5f178f1e295,1,0,43aba109-4b7f-45ef-9c30-8b754e81911b,43aba109-4b7f-45ef-9c30-8b754e81911b,1,0,4ccd72e1-7fd7-4a3b-8428-71b44992937e,4ccd72e1-7fd7-4a3b-8428-71b44992937e,1,0,46077650-2b2c-4319-8279-41f277971669,46077650-2b2c-4319-8279-41f277971669,1,0,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,1,0,612f3b95-d7db-4b33-92b5-4873205b424b,612f3b95-d7db-4b33-92b5-4873205b424b,1,0,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,1,0,e82ebd72-7b5a-4f45-b853-1001bf680a05,e82ebd72-7b5a-4f45-b853-1001bf680a05,1,0,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,1,0,e9e9b733-e97a-430d-95ce-45ea27751f64,e9e9b733-e97a-430d-95ce-45ea27751f64,1,0,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,1,0,3dd50c66-27f7-4f1e-86e9-c709995c8609,3dd50c66-27f7-4f1e-86e9-c709995c8609,1,0,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,1,0,ed1369c5-c274-45bd-ae91-7648565ae09f,ed1369c5-c274-45bd-ae91-7648565ae09f,1,0,8d0fce61-a22f-4033-9e03-3f00c4a21722,8d0fce61-a22f-4033-9e03-3f00c4a21722,1,0,bfb3f026-e940-49c3-ac30-408186f9e11e,bfb3f026-e940-49c3-ac30-408186f9e11e,1,0,e1dc83eb-a8cd-454b-8de8-cff2049be78c,e1dc83eb-a8cd-454b-8de8-cff2049be78c,1,0,9edd9288-1463-4d67-b9f0-40f351d978e9,9edd9288-1463-4d67-b9f0-40f351d978e9,1,0,c9db6c68-965f-4567-b26e-5d497a389de1,c9db6c68-965f-4567-b26e-5d497a389de1,1,0,4da2f65d-56bd-4140-9b31-e5ccac4a800a,4da2f65d-56bd-4140-9b31-e5ccac4a800a,1,0,eb163bba-b94c-4a78-9c2d-7b519325e3d4,eb163bba-b94c-4a78-9c2d-7b519325e3d4,1,0,58cdbd20-a7f4-4c4c-8a4e-638714cc2699,58cdbd20-a7f4-4c4c-8a4e-638714cc2699,1,0,616cd2cc-eaf4-4586-bca1-c044429b491a,616cd2cc-eaf4-4586-bca1-c044429b491a,1,0,939bdb9a-294b-4b42-a56f-030f69bc29c4,939bdb9a-294b-4b42-a56f-030f69bc29c4,1,0,ee7a763b-bcbf-4ff3-89af-eb7965b33515,ee7a763b-bcbf-4ff3-89af-eb7965b33515,1,0,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,1,0,81d900be-ddc1-417f-ae2c-1aacf040de9a,81d900be-ddc1-417f-ae2c-1aacf040de9a,1,0,c65f69ce-be78-4e8d-b91d-293c4108ce77,c65f69ce-be78-4e8d-b91d-293c4108ce77,1,0,521a5717-0b38-401d-bd72-30cee219bd14,521a5717-0b38-401d-bd72-30cee219bd14,1,0,977c30dc-6f27-4931-9fd5-d12ed147e3ec,977c30dc-6f27-4931-9fd5-d12ed147e3ec,1,0,eea4f72e-dd1b-46c7-b270-876a482236b3,eea4f72e-dd1b-46c7-b270-876a482236b3,1,0,25e8d286-dfbb-4fdf-974b-fe3f6f76eac0,25e8d286-dfbb-4fdf-974b-fe3f6f76eac0,1,0,2d249dad-8b4f-462b-ab13-892639a6e071,2d249dad-8b4f-462b-ab13-892639a6e071,1,0,f6249bf4-d2e7-48f3-808f-d776915d14cb,f6249bf4-d2e7-48f3-808f-d776915d14cb,1,0,75f11ecd-c87a-4a14-a7ca-c755f63d7cf8,75f11ecd-c87a-4a14-a7ca-c755f63d7cf8,1,0,883cdeb0-e747-4157-bbe7-0ebc423a82af,883cdeb0-e747-4157-bbe7-0ebc423a82af,1,0,ba62ac73-91da-4dad-abc7-3cf8acf7e315,ba62ac73-91da-4dad-abc7-3cf8acf7e315,1,0,6a71416d-dba1-4883-9264-597ecf9d6270,6a71416d-dba1-4883-9264-597ecf9d6270,1,0,ce3fc202-7893-4d1b-9c8f-1b3349a5c147,ce3fc202-7893-4d1b-9c8f-1b3349a5c147,1,0,6593baab-fce0-49ed-867e-be242bfc08d7,6593baab-fce0-49ed-867e-be242bfc08d7,1,0,403390cf-d3f8-4dfa-b83d-e2fca4ee0dff,403390cf-d3f8-4dfa-b83d-e2fca4ee0dff,1,0,57aed64d-da61-4c18-af21-dab3afdc5c03,57aed64d-da61-4c18-af21-dab3afdc5c03,1,0,452822b4-a590-44db-ab77-d8c01f7300e7,452822b4-a590-44db-ab77-d8c01f7300e7,1,0,62a71ba7-3226-4d10-8cc9-ac9908a00ae7,62a71ba7-3226-4d10-8cc9-ac9908a00ae7,1,0,6ce1d71d-7548-4ee7-be78-21ae23d5a08d,6ce1d71d-7548-4ee7-be78-21ae23d5a08d,1,0,f5ad6743-b19b-44c4-b3d1-2e39d74a4abd,f5ad6743-b19b-44c4-b3d1-2e39d74a4abd,1,0,4b89b7fb-31d9-43c7-9f7e-b0c31fa3331d,4b89b7fb-31d9-43c7-9f7e-b0c31fa3331d,1,0,19b29d30-e395-42f2-b700-7474bb2cdcb7,19b29d30-e395-42f2-b700-7474bb2cdcb7,1,0,b0deb957-624b-4bcb-824c-76aedf1affe9,b0deb957-624b-4bcb-824c-76aedf1affe9,1,0,9934e608-593d-45d0-9df3-539f0c8fc385,9934e608-593d-45d0-9df3-539f0c8fc385,1,0,80da4126-4319-425f-8427-7d60652cf754,80da4126-4319-425f-8427-7d60652cf754,1,0,05236ace-bcdd-4eb8-a1fb-5843ee311d10,05236ace-bcdd-4eb8-a1fb-5843ee311d10,1,0,0f1b284c-6c9e-4799-bc47-3326c4b7bec2,0f1b284c-6c9e-4799-bc47-3326c4b7bec2,1,0,449060fd-4711-4b9e-93e0-11b35c314fb3,449060fd-4711-4b9e-93e0-11b35c314fb3,1,0,e7efa9d5-ea93-4070-87bb-a4d95116d1b4,e7efa9d5-ea93-4070-87bb-a4d95116d1b4,1,0,0614d340-6524-4715-978d-87ab21377e72,0614d340-6524-4715-978d-87ab21377e72,1,0,d47daac5-ec3b-4d4e-8b01-045a37f7074d,d47daac5-ec3b-4d4e-8b01-045a37f7074d,1,0,9d6ed3b9-35cd-47c0-9dfc-732e5066a071,9d6ed3b9-35cd-47c0-9dfc-732e5066a071,1,0,912cbd30-1ed5-4888-a4b6-98e9215b28e9,912cbd30-1ed5-4888-a4b6-98e9215b28e9,1,0,abf093ce-be63-487d-8be4-be282aa475be,abf093ce-be63-487d-8be4-be282aa475be,1,0,7a910ad6-b922-4716-8140-1540d76296b2,7a910ad6-b922-4716-8140-1540d76296b2,1,0,a52450c7-af49-4f92-862f-47015826b447,a52450c7-af49-4f92-862f-47015826b447,1,0,2a19f8a7-4f9f-4e47-a8f4-271a6a13ddc0,2a19f8a7-4f9f-4e47-a8f4-271a6a13ddc0,1,0,3efa225a-db76-479a-b2fa-a40fd0ffb720,3efa225a-db76-479a-b2fa-a40fd0ffb720,1,0,807dd284-31cc-4725-8463-26b31a75d6bc,807dd284-31cc-4725-8463-26b31a75d6bc,1,0,00b7d44c-3f8a-4120-91f3-a63f073d8b37,00b7d44c-3f8a-4120-91f3-a63f073d8b37,1,0,d64f073e-4b58-4020-9233-ca8fbdcf85b2,d64f073e-4b58-4020-9233-ca8fbdcf85b2,1,0,5189beb9-b939-4f97-aca0-c2f3492ac8b9,5189beb9-b939-4f97-aca0-c2f3492ac8b9,1,0,b8931f98-c1d7-4e9b-be43-065064e7ba95,b8931f98-c1d7-4e9b-be43-065064e7ba95,1,0,ab2b472d-97d5-4c33-86fd-e2cdaedf3f3d,ab2b472d-97d5-4c33-86fd-e2cdaedf3f3d,1,0,60848308-931c-4da3-aa4b-37f6fb4b194f,60848308-931c-4da3-aa4b-37f6fb4b194f,1,0,08af8da8-d44b-46f0-a8d3-60421e7b5a1a,08af8da8-d44b-46f0-a8d3-60421e7b5a1a,1,0,54b14504-503b-45f6-9b5d-785b49829425,54b14504-503b-45f6-9b5d-785b49829425,1,0,80d3ee33-1cdc-4af6-85c2-787094526592,80d3ee33-1cdc-4af6-85c2-787094526592,1,0,c8b28660-6cb0-4ef5-85c2-a75da863ba96,c8b28660-6cb0-4ef5-85c2-a75da863ba96,1,0,1cd607b4-49fc-460e-a014-6afe50083b47,1cd607b4-49fc-460e-a014-6afe50083b47,1,0,a215e767-36e9-4408-9d18-7b4be757022a,a215e767-36e9-4408-9d18-7b4be757022a,1,0,a3e262bc-9f0d-480d-a1d1-c2326105d22d,a3e262bc-9f0d-480d-a1d1-c2326105d22d,1,0,8eae0c79-288b-4773-90bb-49299ad45628,8eae0c79-288b-4773-90bb-49299ad45628,1,0,2faa5594-f1b4-4312-b674-82fdf9623105,2faa5594-f1b4-4312-b674-82fdf9623105,1,0,185c1ad3-b5db-49b6-9342-d08e1bf64903,185c1ad3-b5db-49b6-9342-d08e1bf64903,1,0,3c69a4ad-001d-4421-88f6-412e15d710d6,3c69a4ad-001d-4421-88f6-412e15d710d6,1,0,d0373603-5abb-4f7b-8d2f-9f7fb52615aa,d0373603-5abb-4f7b-8d2f-9f7fb52615aa,1,0,f20a35fe-6029-4dc8-b6b4-b098dbce12e8,f20a35fe-6029-4dc8-b6b4-b098dbce12e8,1,0,6a68a08a-ea37-4573-ab9f-ec822f6d250b,6a68a08a-ea37-4573-ab9f-ec822f6d250b,1,0,00e87d04-8104-420b-b2c6-7304889a75b2,00e87d04-8104-420b-b2c6-7304889a75b2,1,0,bde86820-f7bb-463b-97d0-bfa5f8323af0,bde86820-f7bb-463b-97d0-bfa5f8323af0,1,0,289a6aac-dc4e-4fae-8815-853e78d450bb,289a6aac-dc4e-4fae-8815-853e78d450bb,1,0,557e7d89-83ed-45d0-86cc-6e355f14025d,557e7d89-83ed-45d0-86cc-6e355f14025d,1,0,d681b26b-dd8d-46d7-986e-10f05c37a1e4,d681b26b-dd8d-46d7-986e-10f05c37a1e4,1,0,4d3c216e-c04f-4884-8681-1c861c50ce7d,4d3c216e-c04f-4884-8681-1c861c50ce7d,1,0,4a41eee0-c973-4824-a07c-9fcf731f055e,4a41eee0-c973-4824-a07c-9fcf731f055e,1,0,ee756c33-f408-4449-a6bb-3186a0421362,ee756c33-f408-4449-a6bb-3186a0421362,1,0,fbfa8f64-52e4-48f6-b0fb-fd06976dd93d,fbfa8f64-52e4-48f6-b0fb-fd06976dd93d,1,0,6ff66622-4d20-4696-9fe9-4b4faeb21d96,6ff66622-4d20-4696-9fe9-4b4faeb21d96,1,0,46237eec-c206-4d21-883c-27599b9ed38c,46237eec-c206-4d21-883c-27599b9ed38c,1,0,92cbfe14-35c5-440b-9a13-ef8c8ab0630a,92cbfe14-35c5-440b-9a13-ef8c8ab0630a,1,0,8ce759ff-f579-461c-bb1e-9ac2b01e88df,8ce759ff-f579-461c-bb1e-9ac2b01e88df,1,0,8b451909-2c15-48f2-b869-65e7031cc542,8b451909-2c15-48f2-b869-65e7031cc542,1,0,ab6ff81a-56aa-4742-afe4-d7a652e9d2de,ab6ff81a-56aa-4742-afe4-d7a652e9d2de,1,0,7b377fca-4466-476f-9eb2-0b00141103d6,7b377fca-4466-476f-9eb2-0b00141103d6,1,0,9ce5eceb-f366-4035-956e-62721358b154,9ce5eceb-f366-4035-956e-62721358b154,1,0,1685c406-d0cb-4e0a-a3b0-036c8c22942a,1685c406-d0cb-4e0a-a3b0-036c8c22942a,1,0,892dc4c4-a72b-4dbf-af62-9f9ae0e05aa1,892dc4c4-a72b-4dbf-af62-9f9ae0e05aa1,1,0,81db41a6-2580-4a69-b1fd-57cfd48a7efa,81db41a6-2580-4a69-b1fd-57cfd48a7efa,1,0,0db8b3b2-bf24-4006-9897-797084c241ef,0db8b3b2-bf24-4006-9897-797084c241ef,1,0,fd9d34d9-9c9c-4c05-9c08-b93d4b237adf,fd9d34d9-9c9c-4c05-9c08-b93d4b237adf,1,0,381b7dae-6b34-42a7-9fee-2a4af8a1cc18,381b7dae-6b34-42a7-9fee-2a4af8a1cc18,1,0,31e9ca0d-9ae1-4740-a0a6-2739aa29c99f,31e9ca0d-9ae1-4740-a0a6-2739aa29c99f,1,0,20091427-d173-40ca-b2c4-53ee99b0b5ae,20091427-d173-40ca-b2c4-53ee99b0b5ae,1,0,14cbde39-a39a-48e5-9b72-b798a0bcea3f,14cbde39-a39a-48e5-9b72-b798a0bcea3f,1,0,56871c10-e3af-4679-afad-3baa910d73bb,56871c10-e3af-4679-afad-3baa910d73bb,1,0,f81b51c5-57e4-41f8-9ad5-3d2717351b95,f81b51c5-57e4-41f8-9ad5-3d2717351b95,1,0,3c09f0cd-fbec-46ae-95b0-a00cc53c07ef,3c09f0cd-fbec-46ae-95b0-a00cc53c07ef,1,0,de0a39e0-d37d-47c6-a019-e44836edc8d1,de0a39e0-d37d-47c6-a019-e44836edc8d1,1,0,1fdcc1e7-ad53-409e-ba13-84c6429740cd,1fdcc1e7-ad53-409e-ba13-84c6429740cd,1,0,71d544bf-15c1-4581-8baa-ac126308425c,71d544bf-15c1-4581-8baa-ac126308425c,1,0,1bd0b688-d0fb-4ca2-85aa-4bd82b72ccc2,1bd0b688-d0fb-4ca2-85aa-4bd82b72ccc2,1,0,7acfe30e-73cb-465a-88f2-92b7275dc49b,7acfe30e-73cb-465a-88f2-92b7275dc49b,1,0,8e387dac-5029-49da-a013-355df0a51a44,8e387dac-5029-49da-a013-355df0a51a44,1,0,13859664-8307-40e8-855b-557b9cf2f1ec,13859664-8307-40e8-855b-557b9cf2f1ec,1,0,e4397fba-507f-497c-9414-7d08ccd4d799,e4397fba-507f-497c-9414-7d08ccd4d799,1,0,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,794f5fb5-3b8f-4f45-9250-7a3b9d1db383,1,0,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,f7a89bfc-e3c9-4894-a2df-6c229b4e0fd8,1,0,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,1e8b70ce-27fc-418f-b3f3-e6efbce9f7a2,1,0,d915d338-3e4c-45c3-aef5-a07cf41b05f6,d915d338-3e4c-45c3-aef5-a07cf41b05f6,1,0,978640a2-5c4b-4e21-857e-34f00840fba8,978640a2-5c4b-4e21-857e-34f00840fba8,1,0,da2913e3-a29b-423f-9aae-08fed56a7d90,da2913e3-a29b-423f-9aae-08fed56a7d90,1,0,149e72b8-cc03-4b4f-8ca4-07987600c34d,149e72b8-cc03-4b4f-8ca4-07987600c34d,1,0,7649bd7b-fe8c-4338-80fc-153160a5e538,7649bd7b-fe8c-4338-80fc-153160a5e538,1,0,7779cd6d-8fa1-49cb-9bbc-9dfd0979f3f4,7779cd6d-8fa1-49cb-9bbc-9dfd0979f3f4,1,0,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,1,0,6137605e-4850-44ec-b4ee-048bd8e0ec3a,6137605e-4850-44ec-b4ee-048bd8e0ec3a,1,0,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,1,0,0e6e9372-beb4-478e-9428-71b19a60739b,0e6e9372-beb4-478e-9428-71b19a60739b,1,0,32b11498-542f-46b2-829f-1525936ab7fa,32b11498-542f-46b2-829f-1525936ab7fa,1,0,64afa916-4750-4008-8c6c-2a470fb11283,64afa916-4750-4008-8c6c-2a470fb11283,1,0,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,1,0,35354abc-9a76-4ee8-8796-c24b37365ea0,35354abc-9a76-4ee8-8796-c24b37365ea0,1,0,7078977f-31bf-427e-ac37-e309d81fe999,7078977f-31bf-427e-ac37-e309d81fe999,1,0,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,1,0,d8854555-9e15-4d82-a1fd-656a848a8e8a,d8854555-9e15-4d82-a1fd-656a848a8e8a,1,0,53191842-ea05-4491-84d7-071cd201992d,53191842-ea05-4491-84d7-071cd201992d,1,0,86c70449-4cf7-4baf-9742-b82b134ed929,86c70449-4cf7-4baf-9742-b82b134ed929,1,0,af3b1881-163a-4c07-a1d9-77ceadf59c77,af3b1881-163a-4c07-a1d9-77ceadf59c77,1,0,b78be6fb-7db8-48c8-ba7b-aab1fea34890,b78be6fb-7db8-48c8-ba7b-aab1fea34890,1,0,bd27276a-e80c-4135-b341-f99a816ffe86,bd27276a-e80c-4135-b341-f99a816ffe86,1,0,35306678-147c-4ad1-a3c6-c80a11afa22f,35306678-147c-4ad1-a3c6-c80a11afa22f,1,0,0da75726-ae71-4d83-a696-a774c787a8a2,0da75726-ae71-4d83-a696-a774c787a8a2,1,0,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,1,0,896a7267-0198-4cbb-b6e6-7aa157c0cc61,896a7267-0198-4cbb-b6e6-7aa157c0cc61,1,0,2005bf54-219b-4111-bff1-e12e2c6dca3e,2005bf54-219b-4111-bff1-e12e2c6dca3e,1,0,abab8f73-d705-4350-b44d-f912649a2190,abab8f73-d705-4350-b44d-f912649a2190,1,0,20c9c25c-f8c9-429f-84bd-543cb809abef,20c9c25c-f8c9-429f-84bd-543cb809abef,1,0,dc5f451e-3275-43a8-9f48-45b83220d461,dc5f451e-3275-43a8-9f48-45b83220d461,1,0,028f5e81-61df-4d13-876d-781c5fd18ee6,028f5e81-61df-4d13-876d-781c5fd18ee6,1,0,3cbb59ef-7f64-4590-8a54-ba01e78283c3,3cbb59ef-7f64-4590-8a54-ba01e78283c3,1,0,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,1,0,388eb513-fadb-40cd-8a7b-33b904dd758e,388eb513-fadb-40cd-8a7b-33b904dd758e,1,0,0613c6aa-e1fe-4632-a396-a17ec773158f,0613c6aa-e1fe-4632-a396-a17ec773158f,1,0,1a330987-4c79-4ab7-b250-db8d32c78751,1a330987-4c79-4ab7-b250-db8d32c78751,1,0,555062ed-9a04-41d8-877f-0a667e9a08cd,555062ed-9a04-41d8-877f-0a667e9a08cd,1,0,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,1,0,ac160e1c-fef7-4625-84e0-964b397f6bdb,ac160e1c-fef7-4625-84e0-964b397f6bdb,1,0,b8946d9c-dda8-4b94-8cbf-db62b647c53e,b8946d9c-dda8-4b94-8cbf-db62b647c53e,1,0,24215916-7732-4030-9f88-163f644e94f7,24215916-7732-4030-9f88-163f644e94f7,1,0,69697945-9748-4cea-a20f-e244b46de2e8,69697945-9748-4cea-a20f-e244b46de2e8,1,0,68538fd1-262c-43ea-b09f-8a66643a0062,68538fd1-262c-43ea-b09f-8a66643a0062,1,0,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,1,0,82ad24cc-d9f8-440b-a720-e204101d85da,82ad24cc-d9f8-440b-a720-e204101d85da,1,0,aa63c001-c3da-4179-8fd8-fe2ff510511e,aa63c001-c3da-4179-8fd8-fe2ff510511e,1,0,b2e894b0-6443-4a52-95b6-6b564f809680,b2e894b0-6443-4a52-95b6-6b564f809680,1,0,8010065f-aec8-4768-85ec-9eb7b2b01e7e,8010065f-aec8-4768-85ec-9eb7b2b01e7e,1,0,a44348cb-e20c-4afd-8483-3b9c735b352c,a44348cb-e20c-4afd-8483-3b9c735b352c,1,0,ebfe4c74-6e16-4b64-8a52-cea95c446903,ebfe4c74-6e16-4b64-8a52-cea95c446903,1,0,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,1,0,d912e472-9553-4b96-8b16-7aaff6c14239,d912e472-9553-4b96-8b16-7aaff6c14239,1,0,b04018b5-a74d-43c9-8519-6cc8aa23fe09,b04018b5-a74d-43c9-8519-6cc8aa23fe09,1,0,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,1,0,9283277f-2b75-4c3a-810a-8d4071b3afcc,9283277f-2b75-4c3a-810a-8d4071b3afcc,1,0,d03d5b18-57a2-43c0-99ea-8ad9d5788179,d03d5b18-57a2-43c0-99ea-8ad9d5788179,1,0,c491a7fc-14f9-498a-b7dd-575dfc66878e,c491a7fc-14f9-498a-b7dd-575dfc66878e,1,0,db15f8eb-4736-4b47-9cee-3e6883f0888c,db15f8eb-4736-4b47-9cee-3e6883f0888c,1,0,59064eb2-2770-4f1c-96bd-801926fe68ef,59064eb2-2770-4f1c-96bd-801926fe68ef,1,0,df81cc63-26f2-4e66-bf0b-fd083a6a7d7b,df81cc63-26f2-4e66-bf0b-fd083a6a7d7b,1,0,8a8848b8-345a-452d-bf95-28f9c91c7e95,8a8848b8-345a-452d-bf95-28f9c91c7e95,1,0,a9441693-87ca-4157-98e1-63375852755c,a9441693-87ca-4157-98e1-63375852755c,1,0,6303ea55-e8ed-4acc-9717-941eefafc2a9,6303ea55-e8ed-4acc-9717-941eefafc2a9,1,0,5b4e1b83-fc10-4acc-bef7-81c73dbbc453,5b4e1b83-fc10-4acc-bef7-81c73dbbc453,1,0,d0b17206-3949-4513-a47f-02e1a8ba369a,d0b17206-3949-4513-a47f-02e1a8ba369a,1,0,cb4f20d4-13e6-4c27-b491-da7931f4bf05,cb4f20d4-13e6-4c27-b491-da7931f4bf05,1,0,6b2340d7-687f-43a3-8eb8-8ddb86712466,6b2340d7-687f-43a3-8eb8-8ddb86712466,1,0,40b08a20-51a3-438b-ba54-466917ea809f,40b08a20-51a3-438b-ba54-466917ea809f,1,0,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,1,0,9328da5c-4689-4a60-8136-ae9eac46ab38,9328da5c-4689-4a60-8136-ae9eac46ab38,1,0,ca5d586f-81bb-40ee-b3bd-de854857c984,ca5d586f-81bb-40ee-b3bd-de854857c984,1,0,af22406b-daac-475d-b6a9-577452502b84,af22406b-daac-475d-b6a9-577452502b84,1,0,7a925960-a579-4b06-90e0-5121dc774024,7a925960-a579-4b06-90e0-5121dc774024,1,0,32c10512-7bb8-423b-9503-ab2fa41386a4,32c10512-7bb8-423b-9503-ab2fa41386a4,1,0,888edfc4-8140-4675-b267-c32bf1d8d29d,888edfc4-8140-4675-b267-c32bf1d8d29d,1,0,2abbd53a-0ead-42af-8df6-fde663aea300,2abbd53a-0ead-42af-8df6-fde663aea300,1,0,24611bf9-5492-443a-935c-a0058e86493f,24611bf9-5492-443a-935c-a0058e86493f,1,0,42641296-64da-46e0-a407-de2d492f9c90,42641296-64da-46e0-a407-de2d492f9c90,1,0,b834af0b-086c-445d-a271-7e178c324551,b834af0b-086c-445d-a271-7e178c324551,1,0,ec34befe-3c0b-4a75-b943-840c52e7dda5,ec34befe-3c0b-4a75-b943-840c52e7dda5,1,0,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,1,0,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,1,0,6733f1bd-7878-4a33-8995-c07526e87c1a,6733f1bd-7878-4a33-8995-c07526e87c1a,1,0,f7e73257-fae1-465a-ae74-faaa0273a416,f7e73257-fae1-465a-ae74-faaa0273a416,1,0,73f89524-dbe8-426f-8ee6-1277eb1967cc,73f89524-dbe8-426f-8ee6-1277eb1967cc,1,0,ee7d970c-cef7-4740-a357-1fe78f88a6e6,ee7d970c-cef7-4740-a357-1fe78f88a6e6,1,0,ff18803b-4c3a-4720-a718-7547f04c6e2f,ff18803b-4c3a-4720-a718-7547f04c6e2f,1,0,0e0670d6-d8f7-4728-bd1b-f016fffa0570,0e0670d6-d8f7-4728-bd1b-f016fffa0570,1,0,13beb01d-dd08-4a6d-863b-651e70bbf51f,13beb01d-dd08-4a6d-863b-651e70bbf51f,1,0,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,1,0,57a0f5f3-6573-4b35-af25-cea3a25641f1,57a0f5f3-6573-4b35-af25-cea3a25641f1,1,0,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,1,0,144d5498-bb61-4bec-bef3-85a5a4aec3d5,144d5498-bb61-4bec-bef3-85a5a4aec3d5,1,0,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,1,0,45a8c780-c067-40d7-bbe9-81f854aacf7a,45a8c780-c067-40d7-bbe9-81f854aacf7a,1,0,57885cac-059a-4a08-aa2c-43b116d2c777,57885cac-059a-4a08-aa2c-43b116d2c777,1,0,c0403df4-b1f2-4d7e-adb5-9ed881c1359b,c0403df4-b1f2-4d7e-adb5-9ed881c1359b,1,0,56b570b1-93b0-468a-9672-9c71113753f3,56b570b1-93b0-468a-9672-9c71113753f3,1,0,e693eac3-f55d-4102-ac6d-b14ef33fb2e7,e693eac3-f55d-4102-ac6d-b14ef33fb2e7,1,0,e7b0ae70-0192-456c-9dc5-e66049fa9df2,e7b0ae70-0192-456c-9dc5-e66049fa9df2,1,0,68944d09-618e-4fa3-a7af-8c84218e0ac7,68944d09-618e-4fa3-a7af-8c84218e0ac7,1,0,91b12ce3-e8ba-4c9d-9daa-1d5532500314,91b12ce3-e8ba-4c9d-9daa-1d5532500314,1,0,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,1,0,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,1,0,cb57aabc-eeef-42b4-9bc2-873cebd9618c,cb57aabc-eeef-42b4-9bc2-873cebd9618c,1,0,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,1,0,52f30ed7-aa16-4ce2-9684-e50229ab0015,52f30ed7-aa16-4ce2-9684-e50229ab0015,1,0,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,1,0,0526492c-be48-4c84-8d68-19fa1c7e9d6e,0526492c-be48-4c84-8d68-19fa1c7e9d6e,1,0,54ecaf7b-9bc5-483c-96e1-270bcd323590,54ecaf7b-9bc5-483c-96e1-270bcd323590,1,0,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,1,0,58f6f8fa-7473-40f5-973a-6279335d8f33,58f6f8fa-7473-40f5-973a-6279335d8f33,1,0,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,1,0,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,1,0,fa3632fe-185b-49aa-85ae-dfb721835d40,fa3632fe-185b-49aa-85ae-dfb721835d40,1,0,a4f15108-477c-465e-aaea-cb495ef52cf5,a4f15108-477c-465e-aaea-cb495ef52cf5,1,0,9cda5c2c-f401-4f63-b445-cef160296e48,9cda5c2c-f401-4f63-b445-cef160296e48,1,0,e8ae4a26-3127-43ae-af7a-c2e278d2611d,e8ae4a26-3127-43ae-af7a-c2e278d2611d,1,0,b923c78f-d074-41b4-b832-086686258f19,b923c78f-d074-41b4-b832-086686258f19,1,0,8ff96413-6fdd-4b8d-a181-ea0d8633defc,8ff96413-6fdd-4b8d-a181-ea0d8633defc,1,0,54604ed2-766b-4308-b99e-447817d82799,54604ed2-766b-4308-b99e-447817d82799,1,0,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,1,0,f48b4475-2cd9-41df-962a-6529f84985ca,f48b4475-2cd9-41df-962a-6529f84985ca,1,0,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,1,0,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,1,0,bf94feb9-edf7-4df8-b5f5-805613663a0a,bf94feb9-edf7-4df8-b5f5-805613663a0a,1,0,6d852a13-c85e-4e84-8396-f91c1ed0596e,6d852a13-c85e-4e84-8396-f91c1ed0596e,1,0,9c2d5313-a4fd-417e-a340-ad4980d0028b,9c2d5313-a4fd-417e-a340-ad4980d0028b,1,0,4fb4a280-9426-4c41-a9ba-11f9d01a0740,4fb4a280-9426-4c41-a9ba-11f9d01a0740,1,0,1591ee7e-870c-4bf7-9450-be84f1b2506f,1591ee7e-870c-4bf7-9450-be84f1b2506f,1,0,8f088f33-92d7-4e35-915d-6cda1129dd80,8f088f33-92d7-4e35-915d-6cda1129dd80,1,0,9a8578a2-8a92-4ab3-a480-173340f8b34a,9a8578a2-8a92-4ab3-a480-173340f8b34a,1,0,4889d27b-435b-4059-a34d-6afdf3c77fa3,4889d27b-435b-4059-a34d-6afdf3c77fa3,1,0,4ebf0988-ccc3-440c-bd0f-2d01636bd730,4ebf0988-ccc3-440c-bd0f-2d01636bd730,1,0,c1be2a02-53b8-4c28-92b2-b6e0c83ab452,c1be2a02-53b8-4c28-92b2-b6e0c83ab452,1,0,4b54d626-dc59-4e49-a708-0a7f98833b9a,4b54d626-dc59-4e49-a708-0a7f98833b9a,1,0,1c90a423-ef1b-42dc-a43b-1fda89672481,1c90a423-ef1b-42dc-a43b-1fda89672481,1,0,095cf2d6-5a7c-452d-8d60-991afb6e52bd,095cf2d6-5a7c-452d-8d60-991afb6e52bd,1,0,f9213a70-bfd6-464f-b28b-ed35bdf351c0,f9213a70-bfd6-464f-b28b-ed35bdf351c0,1,0,ca5957af-69c9-4640-b9a9-b241c4f9eaa7,ca5957af-69c9-4640-b9a9-b241c4f9eaa7,1,0,7e32c295-a769-4cff-a3eb-992f7031475f,7e32c295-a769-4cff-a3eb-992f7031475f,1,0,eb81610a-eb2f-4068-ba74-75e0f5bbace8,eb81610a-eb2f-4068-ba74-75e0f5bbace8,1,0,21826316-0b49-4034-a49e-6d34c15ceb5c,21826316-0b49-4034-a49e-6d34c15ceb5c,1,0,3abffa47-8d47-4173-897b-708e1a06ef39,3abffa47-8d47-4173-897b-708e1a06ef39,1,0,0cf3d615-76a1-428d-9d25-0d7fdf09e4ae,0cf3d615-76a1-428d-9d25-0d7fdf09e4ae,1,0,5a398637-a06c-4442-9093-a864fa7f049f,5a398637-a06c-4442-9093-a864fa7f049f,1,0,38692186-a62a-42d1-87cd-7dbc6d4816ed,38692186-a62a-42d1-87cd-7dbc6d4816ed,1,0,6cfcdb89-ccb2-45fe-a7b1-5a29ccd6c5ae,6cfcdb89-ccb2-45fe-a7b1-5a29ccd6c5ae,1,0,3a28cea9-7fd7-4834-ab89-2a74331a64e3,3a28cea9-7fd7-4834-ab89-2a74331a64e3,1,0,0f881709-4520-4f18-af9d-cf08757693ff,0f881709-4520-4f18-af9d-cf08757693ff,1,0,c5151ca9-5103-42b2-8573-273c15416db8,c5151ca9-5103-42b2-8573-273c15416db8,1,0,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,1,0,ba8c43ad-678a-4b18-8bbe-5a1b12d19b74,ba8c43ad-678a-4b18-8bbe-5a1b12d19b74,1,0,115a6019-ef87-4126-8ebf-070c1e882940,115a6019-ef87-4126-8ebf-070c1e882940,1,0,162ce023-b2e1-41dc-bcaf-b8e30caccce0,162ce023-b2e1-41dc-bcaf-b8e30caccce0,1,0,52bdd3cc-7103-4dbf-a3c3-dd46cf03da12,52bdd3cc-7103-4dbf-a3c3-dd46cf03da12,1,0,c13fb1cd-fe72-48a6-b383-55b6323619ce,c13fb1cd-fe72-48a6-b383-55b6323619ce,1,0,956fc8ee-96be-4309-b1e8-209372f151ab,956fc8ee-96be-4309-b1e8-209372f151ab,1,0,526c688e-a4d4-45f7-8bba-b8ceff38fe27,526c688e-a4d4-45f7-8bba-b8ceff38fe27,1,0,67efa786-312f-4c9c-b970-0320e92069af,67efa786-312f-4c9c-b970-0320e92069af,1,0,12f85e09-1190-4483-b531-630ab718db7f,12f85e09-1190-4483-b531-630ab718db7f,1,0,52f4453e-e968-4290-a79a-470f68fbd07f,52f4453e-e968-4290-a79a-470f68fbd07f,1,0,5b952e35-1037-4447-8293-6d8889692c8b,5b952e35-1037-4447-8293-6d8889692c8b,1,0,05bc8b4e-8c90-4502-8b16-7b1e7625d569,05bc8b4e-8c90-4502-8b16-7b1e7625d569,1,0,ce34d88d-3017-4197-a962-ea23a6a96d32,ce34d88d-3017-4197-a962-ea23a6a96d32,1,0,2cbc16da-aa67-4ad6-82f8-fa6922447be6,2cbc16da-aa67-4ad6-82f8-fa6922447be6,1,0,19d7a1ba-c343-4575-95da-53dac6d4b2cb,19d7a1ba-c343-4575-95da-53dac6d4b2cb,1,0,6cc8b3a0-3377-4b39-b6b0-69c862a15465,6cc8b3a0-3377-4b39-b6b0-69c862a15465,1,0,acb193f4-52e5-4572-a79b-b825a2f6525f,acb193f4-52e5-4572-a79b-b825a2f6525f,1,0,5d46f719-e468-48e2-b4ec-acb85c710451,5d46f719-e468-48e2-b4ec-acb85c710451,1,0,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,1,0,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,1,0,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,1,0,5422610d-b92c-4213-a58c-8db067d93b66,5422610d-b92c-4213-a58c-8db067d93b66,1,0,8f59a635-9e0e-470d-8fda-a47a262a59c2,8f59a635-9e0e-470d-8fda-a47a262a59c2,1,0,ffb50eb9-149a-46ec-9472-d8f20ad09810,ffb50eb9-149a-46ec-9472-d8f20ad09810,1,0,5ae3bba3-dc98-4470-a73d-3bd951c0a3f2,5ae3bba3-dc98-4470-a73d-3bd951c0a3f2,1,0,7a6449e2-e90a-4720-a769-192284ef69c1,7a6449e2-e90a-4720-a769-192284ef69c1,1,0,02118b98-2349-46b1-a328-d6e2b5781f7e,02118b98-2349-46b1-a328-d6e2b5781f7e,1,0,67de9cbb-5c80-4cff-bfbe-269a958e08e6,67de9cbb-5c80-4cff-bfbe-269a958e08e6,1,0,2228a457-6805-41ee-85af-5ebca9568bf4,2228a457-6805-41ee-85af-5ebca9568bf4,1,0,96b71795-e230-4ecb-b98d-4feb3f8b9662,96b71795-e230-4ecb-b98d-4feb3f8b9662,1,0,04055821-03ce-4049-af2c-8670c80517f6,04055821-03ce-4049-af2c-8670c80517f6,1,0,0101305d-62eb-4802-9cd4-d615a518d842,0101305d-62eb-4802-9cd4-d615a518d842,1,0,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,898d2ba7-631a-4e7a-9bdf-cd2ef411e57a,1,0,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,bf1fc624-60d7-4a04-bb3a-b6e2882bebfe,1,0,7c424424-9660-462d-9cf2-4c1e6bd284fa,7c424424-9660-462d-9cf2-4c1e6bd284fa,1,0,e118f957-ab2c-473b-ab64-37032f727416,e118f957-ab2c-473b-ab64-37032f727416,1,0,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,e770e26e-a3a4-487d-b3bb-aeb63d8b7323,1,0,21f64e5f-dc94-4ce9-b836-e75646ae3325,21f64e5f-dc94-4ce9-b836-e75646ae3325,1,0,82e8a180-f2e1-406c-9609-89d33504aff2,82e8a180-f2e1-406c-9609-89d33504aff2,1,0,e7437c81-3d5b-466e-880c-8febe4a68e88,e7437c81-3d5b-466e-880c-8febe4a68e88,1,0,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,99bc26f9-ba56-4c63-9fd1-c2f3d630b93c,1,0,307771e6-bcf7-4016-b369-e1655bbe9e94,307771e6-bcf7-4016-b369-e1655bbe9e94,1,0,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,bf8c60f7-7dea-4a2c-8ce2-7001a6a37bfa,1,0,38fc6a54-846c-40b0-9254-3261f540bf18,38fc6a54-846c-40b0-9254-3261f540bf18,1,0,d9134d0c-56cd-4b8f-ab11-ae37fc306801,d9134d0c-56cd-4b8f-ab11-ae37fc306801,1,0,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,9408d0ee-bd61-4b95-ac7c-98de139b5f9e,1,0,8f2af24b-f5fa-4f6d-831e-28453bdedefc,8f2af24b-f5fa-4f6d-831e-28453bdedefc,1,0,d119e21d-0087-4f22-b3bd-b14707b65330,d119e21d-0087-4f22-b3bd-b14707b65330,1,0,dc9b4072-11de-40fe-bf2a-f7b15af0a250,dc9b4072-11de-40fe-bf2a-f7b15af0a250,1,0,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,e2cf5ca9-c2a0-4506-89e6-318cad0a48a3,1,0,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,5aecdfd1-1cd7-4523-be23-7e32fcb01a94,1,0,932b1c1a-72eb-49cd-8218-d0ced9c454d8,932b1c1a-72eb-49cd-8218-d0ced9c454d8,1,0,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,96d70dc4-02bd-47ad-9465-81de6ff5bdc9,1,0,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,38acaf7a-5a77-40bf-ba2a-17b31cccd37d,1,0,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,cb604857-8e49-4f2f-b5c8-2a7d8a3cf8e4,1,0,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,f33e9c76-e523-4f4e-ab4b-3fc1b256d8dd,1,0,5dd336c4-88c5-4f53-acf0-5f86a658c528,5dd336c4-88c5-4f53-acf0-5f86a658c528,1,0,c723112b-286d-46f1-989d-81252062a025,c723112b-286d-46f1-989d-81252062a025,1,0,67e8b47e-4bad-4b2f-b196-8a9708893051,67e8b47e-4bad-4b2f-b196-8a9708893051,1,0,39bddcde-697c-4e77-adfd-e4a77529ea97,39bddcde-697c-4e77-adfd-e4a77529ea97,1,0,a3b15381-bf9b-4b26-96eb-392fa2cc8223,a3b15381-bf9b-4b26-96eb-392fa2cc8223,1,0,a583e53a-3f3c-48c7-8928-37ce40b2bafe,a583e53a-3f3c-48c7-8928-37ce40b2bafe,1,0,a844dd4a-274a-4894-9446-031dbe006084,a844dd4a-274a-4894-9446-031dbe006084,1,0,9a740f81-5437-47af-8ed9-ea62edcb2ea1,9a740f81-5437-47af-8ed9-ea62edcb2ea1,1,0,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,cdf54c86-0a1c-4f74-93ee-6d8d8db0a778,1,0,77bdd30f-4933-4bda-9c7a-b0a097da0910,77bdd30f-4933-4bda-9c7a-b0a097da0910,1,0,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,a8d52851-4293-4fe4-b2cb-f9c8c166ed97,1,0,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,d4879ecc-8f1a-4183-99a8-d6dfc1eed3f8,1,0,a682e9e1-284f-4e32-86b2-6736f159f585,a682e9e1-284f-4e32-86b2-6736f159f585,1,0,84f0bd89-9b86-440f-b942-9b685e22233e,84f0bd89-9b86-440f-b942-9b685e22233e,1,0,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,f2d508b3-9425-4ce6-86d8-5893ca4a8cd6,1,0,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,ce61612f-bcbb-4a02-bca0-d88e0ee42bd7,1,0,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,c1c35035-44cc-4aa1-ae8e-db3513ddc5f3,1,0,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,ac52baa1-02cb-4ce8-8f4f-1f9441b1cda0,1,0,fabf8a0b-366f-4f23-9377-315534bb854b,fabf8a0b-366f-4f23-9377-315534bb854b,1,0,7aac6439-64c9-4492-b866-bf91dda82d06,7aac6439-64c9-4492-b866-bf91dda82d06,1,0,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,6ffe3723-c6df-497b-a3ff-d817fbabfd8c,1,0,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,528a82b7-ef06-4d90-bb32-bd6d76ed6c74,1,0,08b86f29-64ef-467a-af1a-d27ffdf621ba,08b86f29-64ef-467a-af1a-d27ffdf621ba,1,0,6483d1ab-c53d-4985-ad7e-b799adbcd9da,6483d1ab-c53d-4985-ad7e-b799adbcd9da,1,0,82f66233-ed13-49ae-ab72-7cf91c88c760,82f66233-ed13-49ae-ab72-7cf91c88c760,1,0,75cddbcd-e960-4164-81d8-ac0a2a36e95b,75cddbcd-e960-4164-81d8-ac0a2a36e95b,1,0,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,e14d57f4-ae4a-4644-9ec1-a6af1b3e4c41,1,0,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,314f8451-ba96-46cd-bf9f-3a87df7d2a5b,1,0,d9151001-a911-45c1-a8e6-dcf0da623ed3,d9151001-a911-45c1-a8e6-dcf0da623ed3,1,0,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,30e06f80-b6d0-4fa9-a346-8e17dbe2fb68,1,0,e589a693-ff50-4c36-ae26-a8fcae966d57,e589a693-ff50-4c36-ae26-a8fcae966d57,1,0,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,8bacb87e-c2e9-41f5-bae1-c3a6b0e8179f,1,0,90f023f5-5b48-4f98-bfc6-b704277a355d,90f023f5-5b48-4f98-bfc6-b704277a355d,1,0,99485603-706d-4301-be25-82b1c0ee8f4d,99485603-706d-4301-be25-82b1c0ee8f4d,1,0,e7a28021-c75e-41b2-9974-cf4beee34d28,e7a28021-c75e-41b2-9974-cf4beee34d28,1,0,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,21e3bdf3-7cec-42de-8ef3-5815b9a1b747,1,0,2a603c61-4cbf-4c6d-a0b2-40c835d36737,2a603c61-4cbf-4c6d-a0b2-40c835d36737,1,0,a8d7f071-401b-499e-957c-d077d8002e54,a8d7f071-401b-499e-957c-d077d8002e54,1,0,b6206c73-cf17-4e74-a14d-f2a2ef2b2cc1,b6206c73-cf17-4e74-a14d-f2a2ef2b2cc1,1,0,b363f72f-3629-453c-9f7d-9828ef6de733,b363f72f-3629-453c-9f7d-9828ef6de733,1,0,211a539b-4be9-4816-98f6-f756e65eafd8,211a539b-4be9-4816-98f6-f756e65eafd8,1,0,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,e2d8167d-3ebf-4771-b9e0-e6382d68cc18,1,0,e9b9da80-7806-4c9c-a002-01cfa3109169,e9b9da80-7806-4c9c-a002-01cfa3109169,1,0,a271041d-0203-4ecd-bb39-70256c50192e,a271041d-0203-4ecd-bb39-70256c50192e,1,0,73eff626-a363-4a5a-879e-61ef6ce0726f,73eff626-a363-4a5a-879e-61ef6ce0726f,1,0,acf15b79-a6c4-4c46-8013-50d3b223baf6,acf15b79-a6c4-4c46-8013-50d3b223baf6,1,0,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,f6a29b80-e4c3-4c4f-8e2c-d4dda851d813,1,0,2d8d5d74-2bc0-4282-af66-e4a37694c147,2d8d5d74-2bc0-4282-af66-e4a37694c147,1,0,cfd31341-287b-4684-9ac0-b28b4e066f15,cfd31341-287b-4684-9ac0-b28b4e066f15,1,0,81de1b0b-7f2d-4098-ae99-061c6a90dc29,81de1b0b-7f2d-4098-ae99-061c6a90dc29,1,0,f829e2a9-5bdb-4171-8b32-8d10d5968813,f829e2a9-5bdb-4171-8b32-8d10d5968813,1,0,647ba8f8-57f7-4c19-af59-525517c1e392,647ba8f8-57f7-4c19-af59-525517c1e392,1,0,39062cb3-4ae8-4c0d-889b-038a55179946,39062cb3-4ae8-4c0d-889b-038a55179946,1,0,c62d4212-36ca-4afb-bac9-269b6f64ca51,c62d4212-36ca-4afb-bac9-269b6f64ca51,1,0,5cec5e16-46ad-4f8c-b869-f5b1cc487884,5cec5e16-46ad-4f8c-b869-f5b1cc487884,1,0,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,ca0363bb-81c2-4fce-b2f0-e8f42d118a74,1,0,7aacdf81-49fd-47a3-a36a-c483f1b05872,7aacdf81-49fd-47a3-a36a-c483f1b05872,1,0,857015e2-afb2-403d-bfb7-7acb5080797b,857015e2-afb2-403d-bfb7-7acb5080797b,1,0,5657286b-114b-41de-ab7d-45d0f0d95e2d,5657286b-114b-41de-ab7d-45d0f0d95e2d,1,0,42a0271e-6783-44db-95c1-09805ae01f58,42a0271e-6783-44db-95c1-09805ae01f58,1,0,8628783e-4fad-4dff-8220-9e0ddc8580f8,8628783e-4fad-4dff-8220-9e0ddc8580f8,1,0,356fc245-3034-42d1-84d0-632c6dc7a3d5,356fc245-3034-42d1-84d0-632c6dc7a3d5,1,0,07462664-6b58-4f5a-9b3f-2e5c376f17df,07462664-6b58-4f5a-9b3f-2e5c376f17df,1,0,6f23e946-f700-424b-b9bf-3a9c8846908d,6f23e946-f700-424b-b9bf-3a9c8846908d,1,0,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,f3ef5989-a848-4a7f-8ac5-0eca882a6aa1,1,0,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,4f5087ab-cc60-4d1e-ba83-a319536bf8ba,1,0,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,07d0d6e9-e0a7-4543-9668-3850c1e0a15c,1,0,c656771c-dcb7-4c78-9a16-e62806d5bb5a,c656771c-dcb7-4c78-9a16-e62806d5bb5a,1,0,ec42c45c-18ca-44b0-9c59-1cb204552a43,ec42c45c-18ca-44b0-9c59-1cb204552a43,1,0,2aafb1a1-4321-47e9-9783-03ab616a2873,2aafb1a1-4321-47e9-9783-03ab616a2873,1,0,71109997-6da0-4eaf-bbf2-f94fa24f37cc,71109997-6da0-4eaf-bbf2-f94fa24f37cc,1,0,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,1,0,d601281c-379d-4a9d-843e-478fd6567415,d601281c-379d-4a9d-843e-478fd6567415,1,0,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,1,0,427e6f15-334e-42be-9554-895d8f7ebfc6,427e6f15-334e-42be-9554-895d8f7ebfc6,1,0,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,1,0,36bc8523-41a5-48ff-9bd0-758d078c4408,36bc8523-41a5-48ff-9bd0-758d078c4408,1,0,94ca1b45-3cf0-4857-8299-999c93f4fb56,94ca1b45-3cf0-4857-8299-999c93f4fb56,1,0,ee8419c6-79ca-4546-9a66-bacaa08d2a73,ee8419c6-79ca-4546-9a66-bacaa08d2a73,1,0,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,1,0,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,1,0,ada11ea2-94d5-4172-a383-a51774599568,ada11ea2-94d5-4172-a383-a51774599568,1,0,50515bbc-43ee-4b00-bfc5-105b7981bd8f,50515bbc-43ee-4b00-bfc5-105b7981bd8f,1,0,1ea080b0-0a11-4152-b8bb-4918bc142a23,1ea080b0-0a11-4152-b8bb-4918bc142a23,1,0,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,1,0,6930e471-7935-4d68-a980-2acde93ba801,6930e471-7935-4d68-a980-2acde93ba801,1,0,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,1,0,5135cc48-c749-4acb-a225-d110f386f482,5135cc48-c749-4acb-a225-d110f386f482,1,0,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,1,0,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,1,0,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,1,0,2e9fa546-96fb-4ecb-b933-7921e131e89b,2e9fa546-96fb-4ecb-b933-7921e131e89b,1,0,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,1,0,637a132b-1a88-44ba-b45f-ed4ed1ac1001,637a132b-1a88-44ba-b45f-ed4ed1ac1001,1,0,699f734b-43d2-4351-bff8-e0e21e164a42,699f734b-43d2-4351-bff8-e0e21e164a42,1,0,95f0792a-7ac4-450a-b05c-219741e61abd,95f0792a-7ac4-450a-b05c-219741e61abd,1,0,742a2e8c-496e-4e02-931d-d33f7afe07a5,742a2e8c-496e-4e02-931d-d33f7afe07a5,1,0,c3efa853-cd29-4618-929f-e3bec33dfd65,c3efa853-cd29-4618-929f-e3bec33dfd65,1,0,62185c28-3d24-487a-9441-b309dcf11e31,62185c28-3d24-487a-9441-b309dcf11e31,1,0,9f264aeb-664d-4724-8248-11873d63ef3b,9f264aeb-664d-4724-8248-11873d63ef3b,1,0,b926d058-53a9-4eea-b4f9-98e77f798dd9,b926d058-53a9-4eea-b4f9-98e77f798dd9,1,0,495e2c77-4868-4191-ac18-f94e55a5982e,495e2c77-4868-4191-ac18-f94e55a5982e,1,0,20191a65-322c-457d-85f5-ed1258b6fe8e,20191a65-322c-457d-85f5-ed1258b6fe8e,1,0,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,1,0,769c60aa-44f4-4c98-a461-d3f5c2b67f61,769c60aa-44f4-4c98-a461-d3f5c2b67f61,1,0,f9809c99-0eaa-4249-967c-a4bef4763277,f9809c99-0eaa-4249-967c-a4bef4763277,1,0,37fa88a0-f2c1-455f-a28d-74165e8b933d,37fa88a0-f2c1-455f-a28d-74165e8b933d,1,0,e4476f09-909b-49f7-8e01-72eea8ceaca6,e4476f09-909b-49f7-8e01-72eea8ceaca6,1,0,2861412c-46f0-454e-b81d-fe081afb5c7a,2861412c-46f0-454e-b81d-fe081afb5c7a,1,0,2b4ece05-b694-42e9-8239-55722fd84294,2b4ece05-b694-42e9-8239-55722fd84294,1,0,6564ce89-134f-4726-8693-fd93aad46180,6564ce89-134f-4726-8693-fd93aad46180,1,0,0d743731-da5d-4c99-b19f-e93c69b77e14,0d743731-da5d-4c99-b19f-e93c69b77e14,1,0,d6f15367-23e2-4766-bc7c-8acd0063aa0c,d6f15367-23e2-4766-bc7c-8acd0063aa0c,1,0,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,1,0,fa4c5665-4d73-4db2-a055-8c1c8a302f82,fa4c5665-4d73-4db2-a055-8c1c8a302f82,1,0,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,1,0,9100b286-8ae9-4de3-b116-5ce0fa95b80c,9100b286-8ae9-4de3-b116-5ce0fa95b80c,1,0,3d315df6-e000-4cbd-810d-0b26c0d1bc54,3d315df6-e000-4cbd-810d-0b26c0d1bc54,1,0,fa429302-ccaf-4c89-8a11-3a1d30817c00,fa429302-ccaf-4c89-8a11-3a1d30817c00,1,0,9b4c49ce-93da-439a-8d67-f3774e92800a,9b4c49ce-93da-439a-8d67-f3774e92800a,1,0,5f8fa827-7017-4b45-b458-3571b8b611f5,5f8fa827-7017-4b45-b458-3571b8b611f5,1,0,79749167-2912-4e06-9deb-7915a1b4390d,79749167-2912-4e06-9deb-7915a1b4390d,1,0,1c93fcd3-53a1-403f-a30b-454fbc941d55,1c93fcd3-53a1-403f-a30b-454fbc941d55,1,0,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,1,0,adec3963-b22f-4463-a3f4-c9ec27d187a8,adec3963-b22f-4463-a3f4-c9ec27d187a8,1,0,d8dae0c8-8e11-44bf-bf60-d316220f3e82,d8dae0c8-8e11-44bf-bf60-d316220f3e82,1,0,12afec4d-1728-4aa8-86e5-23cd2f1572b3,12afec4d-1728-4aa8-86e5-23cd2f1572b3,1,0,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,1,0,ee0c3960-d1bf-411f-a51f-e6e27dabea87,ee0c3960-d1bf-411f-a51f-e6e27dabea87,1,0,d7fb9441-1aef-4257-af3f-7f16340ac85e,d7fb9441-1aef-4257-af3f-7f16340ac85e,1,0,d07c094c-2795-4e0c-b030-bdb82be7ba6d,d07c094c-2795-4e0c-b030-bdb82be7ba6d,1,0,62637860-2013-4f9d-9aed-7cbb0dce8983,62637860-2013-4f9d-9aed-7cbb0dce8983,1,0,331217f6-7ec2-425d-93bd-f2979c5f2e05,331217f6-7ec2-425d-93bd-f2979c5f2e05,1,0,7d5b2b73-27e6-4a61-9558-eb2410eb9f2f,7d5b2b73-27e6-4a61-9558-eb2410eb9f2f,1,0,d754ed75-2a32-4b86-a153-7b50c39f9836,d754ed75-2a32-4b86-a153-7b50c39f9836,1,0,b81f3ee1-66f7-4626-a35b-ef85388c678e,b81f3ee1-66f7-4626-a35b-ef85388c678e,1,0,2ad04793-c162-4915-a260-ca4da535cdac,2ad04793-c162-4915-a260-ca4da535cdac,1,0,6568d853-dfe5-4064-aa73-c1f546e951b4,6568d853-dfe5-4064-aa73-c1f546e951b4,1,0,7cee27a7-9827-47f8-96f3-d4f1f3dcabe9,7cee27a7-9827-47f8-96f3-d4f1f3dcabe9,1,0,9bfba5cd-551a-4685-99dd-ebfd9f7fd7d1,9bfba5cd-551a-4685-99dd-ebfd9f7fd7d1,1,0,bbe718b2-6b4c-4d78-a408-5369d356a1e6,bbe718b2-6b4c-4d78-a408-5369d356a1e6,1,0,4ecd85c4-5be7-4e6b-8c53-7dd32bd4d707,4ecd85c4-5be7-4e6b-8c53-7dd32bd4d707,1,0,c7e4e97f-fb85-4e95-bfdf-7706e867d89b,c7e4e97f-fb85-4e95-bfdf-7706e867d89b,1,0,b08fd921-c3d6-44eb-9401-fec5acab5d22,b08fd921-c3d6-44eb-9401-fec5acab5d22,1,0,1611855a-abf4-4269-aed3-3f78dce7bea5,1611855a-abf4-4269-aed3-3f78dce7bea5,1,0,c5bd277c-b258-43af-9c80-3e328b1581f5,c5bd277c-b258-43af-9c80-3e328b1581f5,1,0,d6fa2b86-1c3b-4c14-8a66-b6dbd40bca19,d6fa2b86-1c3b-4c14-8a66-b6dbd40bca19,1,0,f9cefef4-2182-42ca-93ef-b6a51d6555cc,f9cefef4-2182-42ca-93ef-b6a51d6555cc,1,0,71e1c7de-7367-424c-ae07-6ec04b408b83,71e1c7de-7367-424c-ae07-6ec04b408b83,1,0,b3956392-199c-4934-80d1-8cdab453d879,b3956392-199c-4934-80d1-8cdab453d879,1,0,5e26aeb7-617c-4983-b40d-5a61c77aa6a4,5e26aeb7-617c-4983-b40d-5a61c77aa6a4,1,0,d1bd7448-aa5f-43fc-9735-224f36960c3e,d1bd7448-aa5f-43fc-9735-224f36960c3e,1,0,94dbfc4c-d530-4fbd-b7cf-a58a56289b97,94dbfc4c-d530-4fbd-b7cf-a58a56289b97,1,0,6fa25c57-411d-4f9c-9c3e-c7ea1b1f7195,6fa25c57-411d-4f9c-9c3e-c7ea1b1f7195,1,0,1bfa15cf-222e-4e5b-beb7-7a50f8131799,1bfa15cf-222e-4e5b-beb7-7a50f8131799,1,0,25864028-1a53-4a8d-b6e4-189fa62c62f5,25864028-1a53-4a8d-b6e4-189fa62c62f5,1,0,e923beae-0bd8-4119-a802-fd6bfb729f10,e923beae-0bd8-4119-a802-fd6bfb729f10,1,0,d40bb9f7-3397-40ad-b658-f8942bdbbaee,d40bb9f7-3397-40ad-b658-f8942bdbbaee,1,0,67c1269a-79e6-44d9-9254-671c50fb3974,67c1269a-79e6-44d9-9254-671c50fb3974,1,0,5d455d2a-910d-48c7-bc74-ba5ad7855110,5d455d2a-910d-48c7-bc74-ba5ad7855110,1,0,7cf3feea-75e2-42cc-9c89-4a9182034910,7cf3feea-75e2-42cc-9c89-4a9182034910,1,0,930a0156-feb3-4e14-96a5-cd183a4891f4,930a0156-feb3-4e14-96a5-cd183a4891f4,1,0,cfa55ab3-1335-4712-8352-03c2f0277708,cfa55ab3-1335-4712-8352-03c2f0277708,1,0,fb176f8b-edb9-4e4b-926d-dabe9552bfa1,fb176f8b-edb9-4e4b-926d-dabe9552bfa1,1,0,cd5c52d4-f832-4a3b-b4c7-b4f3e0c98222,cd5c52d4-f832-4a3b-b4c7-b4f3e0c98222,1,0,e268a337-f576-4ec2-8a22-0500b79b2441,e268a337-f576-4ec2-8a22-0500b79b2441,1,0,eb33a8fa-75a6-4926-a025-05bc0abe4374,eb33a8fa-75a6-4926-a025-05bc0abe4374,1,0,c352da94-ea64-44b1-b2df-2c4ed9e2efc5,c352da94-ea64-44b1-b2df-2c4ed9e2efc5,1,0,6babd40a-8b8f-454b-b4a4-7cf2854f49a2,6babd40a-8b8f-454b-b4a4-7cf2854f49a2,1,0,bf480259-6e72-4ad1-ac41-0b0d41a75387,bf480259-6e72-4ad1-ac41-0b0d41a75387,1,0,a41f060a-f0f6-4940-960b-5056082b2c45,a41f060a-f0f6-4940-960b-5056082b2c45,1,0,5d45a926-513f-4bbc-a002-54a2db94b297,5d45a926-513f-4bbc-a002-54a2db94b297,1,0,73f5ce9e-d5a7-45c0-965a-8af1d776a98a,73f5ce9e-d5a7-45c0-965a-8af1d776a98a,1,0,073e14d4-5d43-428b-a9a7-985d173e94c7,073e14d4-5d43-428b-a9a7-985d173e94c7,1,0,61dc318a-c17d-402e-bf64-a0c0a63a1c93,61dc318a-c17d-402e-bf64-a0c0a63a1c93,1,0,c4b0c101-8cd9-441c-b94c-9dfa1ad58d45,c4b0c101-8cd9-441c-b94c-9dfa1ad58d45,1,0,2394775b-8910-4667-9c74-e1606e0b13bc,2394775b-8910-4667-9c74-e1606e0b13bc,1,0,43c88ffd-a036-4563-890b-bdc60180e841,43c88ffd-a036-4563-890b-bdc60180e841,1,0,af6e5e8e-6482-4820-a810-9e275ae039bf,af6e5e8e-6482-4820-a810-9e275ae039bf,1,0,fe3ccb8b-fee7-4825-a7bc-4b0fd432d382,fe3ccb8b-fee7-4825-a7bc-4b0fd432d382,1,0,7690620b-21d9-463a-8c22-60844927b4a0,7690620b-21d9-463a-8c22-60844927b4a0,1,0,e7f96a15-9f62-4a7f-85f3-06ba5d30b130,e7f96a15-9f62-4a7f-85f3-06ba5d30b130,1,0,b1db3255-38da-4684-b44e-4e2e9ee1dc35,b1db3255-38da-4684-b44e-4e2e9ee1dc35,1,0,4761f89b-7894-4dca-83b0-3be2d0828781,4761f89b-7894-4dca-83b0-3be2d0828781,1,0,573ff1f2-0ef5-4962-a0f6-eb84d430fe03,573ff1f2-0ef5-4962-a0f6-eb84d430fe03,1,0,7236d52f-9068-45ad-8b92-a7319e737e08,7236d52f-9068-45ad-8b92-a7319e737e08,1,0,3b0b708f-1b6c-4eb2-a2ad-86c088d9f1bf,3b0b708f-1b6c-4eb2-a2ad-86c088d9f1bf,1,0,9db23e96-d13a-4847-941a-462f64d0619d,9db23e96-d13a-4847-941a-462f64d0619d,1,0,7575fd54-c91b-4220-a2ef-2cf533f60426,7575fd54-c91b-4220-a2ef-2cf533f60426,1,0,1b751f19-bb0c-40c2-a5d1-068544c36c6b,1b751f19-bb0c-40c2-a5d1-068544c36c6b,1,0,26e2c83b-8873-4ad3-9c50-e94421473a43,26e2c83b-8873-4ad3-9c50-e94421473a43,1,0,f0b2ec05-8e01-4ccf-b927-671329a9013b,f0b2ec05-8e01-4ccf-b927-671329a9013b,1,0,ab442b11-2482-4f80-ac82-01966e0657ec,ab442b11-2482-4f80-ac82-01966e0657ec,1,0,14fe4d39-81a1-470e-9724-6642ce34ad89,14fe4d39-81a1-470e-9724-6642ce34ad89,1,0,457578ab-dfe2-4419-8d8a-64283b341f42,457578ab-dfe2-4419-8d8a-64283b341f42,1,0,67ef6671-f537-46bf-88e6-f5bcf34a17a4,67ef6671-f537-46bf-88e6-f5bcf34a17a4,1,0,de778ca7-feaf-4531-80ae-11a534c56928,de778ca7-feaf-4531-80ae-11a534c56928,1,0,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,1,0,0a76a84d-e883-477e-8b87-7bf984cdc1cf,0a76a84d-e883-477e-8b87-7bf984cdc1cf,1,0,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,1,0,86df8648-e195-4661-99ee-6052788eb276,86df8648-e195-4661-99ee-6052788eb276,1,0,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,1,0,35133725-9647-42dc-a76a-2e62b2918ac4,35133725-9647-42dc-a76a-2e62b2918ac4,1,0,fa9572ee-0303-4421-9125-70cf3dd5a8c7,fa9572ee-0303-4421-9125-70cf3dd5a8c7,1,0,4cdd7920-0c49-4950-b92f-fdf6e34578b2,4cdd7920-0c49-4950-b92f-fdf6e34578b2,1,0,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,1,0,c7b883dc-6c26-4eb5-bc19-7919ad57da27,c7b883dc-6c26-4eb5-bc19-7919ad57da27,1,0,7fc37008-c378-4a70-a9a9-07543c7248a6,7fc37008-c378-4a70-a9a9-07543c7248a6,1,0,6410853e-a17e-44db-b8cc-bfefd7c4d239,6410853e-a17e-44db-b8cc-bfefd7c4d239,1,0,df042e4e-01a6-4480-a9c5-c0d7a454bb41,df042e4e-01a6-4480-a9c5-c0d7a454bb41,1,0,5a4abb96-8a18-4249-9fbb-7270fe2ba25b,5a4abb96-8a18-4249-9fbb-7270fe2ba25b,1,0,6852c584-d989-418d-8d18-255492891ef0,6852c584-d989-418d-8d18-255492891ef0,1,0,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,1,0,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,1,0,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,1,0,ff830967-faa9-415f-aa6e-8d27779f91f8,ff830967-faa9-415f-aa6e-8d27779f91f8,1,0,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,1,0,88618d0f-97af-4055-a490-561d4b8065a7,88618d0f-97af-4055-a490-561d4b8065a7,1,0,faffa228-4f4f-43f6-99b9-ed8c93af85c0,faffa228-4f4f-43f6-99b9-ed8c93af85c0,1,0,7b816ca0-ba60-4637-8348-23b26ad23e3f,7b816ca0-ba60-4637-8348-23b26ad23e3f,1,0,814a6db4-a43c-44e6-ac44-11983642c5ad,814a6db4-a43c-44e6-ac44-11983642c5ad,1,0,0bd74786-e018-4a66-b994-cdb439c57657,0bd74786-e018-4a66-b994-cdb439c57657,1,0,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,1,0,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,1,0,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,1,0,09502176-c53d-4525-b8ed-32d0a2e21a5d,09502176-c53d-4525-b8ed-32d0a2e21a5d,1,0,75ad984e-d41f-4591-b207-e8a4b05757a7,75ad984e-d41f-4591-b207-e8a4b05757a7,1,0,3f020f90-7aeb-4b21-ad71-4572ac796d4c,3f020f90-7aeb-4b21-ad71-4572ac796d4c,1,0,759e2ba0-2941-4cc1-8409-50b8a3620058,759e2ba0-2941-4cc1-8409-50b8a3620058,1,0,491cf25d-091e-4e09-b145-92d7073326cf,491cf25d-091e-4e09-b145-92d7073326cf,1,0,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,1,0,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,1,0,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,1,0,900bc96e-fbcc-473e-970c-96f561420f8e,900bc96e-fbcc-473e-970c-96f561420f8e,1,0,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,1,0,21d5a0b0-9a2b-4989-a50a-781645513179,21d5a0b0-9a2b-4989-a50a-781645513179,1,0,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,1,0,d97c6204-3656-4591-aea9-6ebedffe1247,d97c6204-3656-4591-aea9-6ebedffe1247,1,0,7caabe33-184f-45db-bef4-59d4e9cd2394,7caabe33-184f-45db-bef4-59d4e9cd2394,1,0,3255033a-e922-412e-a825-a3e8bd284703,3255033a-e922-412e-a825-a3e8bd284703,1,0,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,1,0,f250f992-ad5a-4dab-ad38-240604adb0c4,f250f992-ad5a-4dab-ad38-240604adb0c4,1,0,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,1,0,e63671f6-c96d-4ea4-8300-af7dbd0d016f,e63671f6-c96d-4ea4-8300-af7dbd0d016f,1,0,2c511469-0df6-470f-a808-decb275e8b1a,2c511469-0df6-470f-a808-decb275e8b1a,1,0,1bbb289c-a78a-47d0-b082-c2225ae1dc83,1bbb289c-a78a-47d0-b082-c2225ae1dc83,1,0,99b40f9f-f8f1-4779-8afc-59d30612f3d6,99b40f9f-f8f1-4779-8afc-59d30612f3d6,1,0,6131e875-3254-4281-9343-9118564c5451,6131e875-3254-4281-9343-9118564c5451,1,0,69622ff8-8a23-42fc-b63d-5097e3f636ac,69622ff8-8a23-42fc-b63d-5097e3f636ac,1,0,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,1,0,ef326bd8-1570-455e-ae8c-063b5578ad15,ef326bd8-1570-455e-ae8c-063b5578ad15,1,0,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,1,0,cb6d4979-2d70-4ceb-af08-deb2b19daf14,cb6d4979-2d70-4ceb-af08-deb2b19daf14,1,0,bf30b754-84fb-4104-b52b-a4f7df6fba12,bf30b754-84fb-4104-b52b-a4f7df6fba12,1,0,7bbd0835-b3e9-40cb-a424-670828b60bbb,7bbd0835-b3e9-40cb-a424-670828b60bbb,1,0,3e2138ea-48f9-4a60-8f22-53933bea49db,3e2138ea-48f9-4a60-8f22-53933bea49db,1,0,16bda2eb-eab8-4230-b89f-517fb943e009,16bda2eb-eab8-4230-b89f-517fb943e009,1,0,00964512-297f-4b8b-8def-8e4fc0eba991,00964512-297f-4b8b-8def-8e4fc0eba991,1,0,4185fea3-baba-4ba5-8019-9023b3011d4d,4185fea3-baba-4ba5-8019-9023b3011d4d,1,0,ea790035-92d6-445e-9fa3-08e565634d2b,ea790035-92d6-445e-9fa3-08e565634d2b,1,0,cce8900a-51eb-487d-b380-227d1b9d3943,cce8900a-51eb-487d-b380-227d1b9d3943,1,0,c043c36c-90c6-483b-bc20-7c2d85109b90,c043c36c-90c6-483b-bc20-7c2d85109b90,1,0,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,1,0,91d2d40a-c271-412c-b344-1fc98b94ba21,91d2d40a-c271-412c-b344-1fc98b94ba21,1,0,7ce47046-aee8-4809-bac9-a98930a844e1,7ce47046-aee8-4809-bac9-a98930a844e1,1,0,f480b8b9-ecec-4207-a0aa-12c5be4c2250,f480b8b9-ecec-4207-a0aa-12c5be4c2250,1,0,32717d25-6644-4903-8950-03e4c9b1a8fe,32717d25-6644-4903-8950-03e4c9b1a8fe,1,0,3644d8f3-db88-4fce-a851-39c115acfe03,3644d8f3-db88-4fce-a851-39c115acfe03,1,0,4653da74-34b2-47b9-ad88-efd761d6f1e9,4653da74-34b2-47b9-ad88-efd761d6f1e9,1,0,abf8a23d-45c3-4feb-8df2-279b709d7722,abf8a23d-45c3-4feb-8df2-279b709d7722,1,0,b0cd056f-c601-4d07-89c4-f7137b88bab6,b0cd056f-c601-4d07-89c4-f7137b88bab6,1,0,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,1,0,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,1,0,96ed4d39-3bdc-480f-af86-218f22000514,96ed4d39-3bdc-480f-af86-218f22000514,1,0,c9f72e74-22ac-4dc0-8462-0aa7819a9342,c9f72e74-22ac-4dc0-8462-0aa7819a9342,1,0,ca650484-293f-403a-b916-5ec7c3a8969e,ca650484-293f-403a-b916-5ec7c3a8969e,1,0,b71e706d-623e-4039-9bf0-24f151d861d8,b71e706d-623e-4039-9bf0-24f151d861d8,1,0,528f4823-33d8-49bd-a8fe-756a08a107c2,528f4823-33d8-49bd-a8fe-756a08a107c2,1,0,4869095b-b76e-45ca-b77d-0e74f59673f0,4869095b-b76e-45ca-b77d-0e74f59673f0,1,0,bcca2442-448b-4760-923b-cc9621ecb441,bcca2442-448b-4760-923b-cc9621ecb441,1,0,ba7657df-429a-4737-b787-19ef09fdebb2,ba7657df-429a-4737-b787-19ef09fdebb2,1,0,867d72be-f406-45a5-a511-b90459683f11,867d72be-f406-45a5-a511-b90459683f11,1,0,88b22e62-c144-401f-9635-3fb4d914772e,88b22e62-c144-401f-9635-3fb4d914772e,1,0,efeb2914-6604-403a-a11e-5cb995ab2bc9,efeb2914-6604-403a-a11e-5cb995ab2bc9,1,0,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,1,0,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,1,0,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,1,0,de506523-241a-4845-9259-37066afbf16a,de506523-241a-4845-9259-37066afbf16a,1,0,0510206f-eef0-4a5e-aeb7-d53c26d34adb,0510206f-eef0-4a5e-aeb7-d53c26d34adb,1,0,e616e007-43e7-4740-a083-b85f5435718a,e616e007-43e7-4740-a083-b85f5435718a,1,0,727da5b1-e054-4832-8e44-f5d5e56f52e5,727da5b1-e054-4832-8e44-f5d5e56f52e5,1,0,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,1,0,6feaad7c-9680-4341-b215-14581e2e2b37,6feaad7c-9680-4341-b215-14581e2e2b37,1,0,d5656a92-adfb-4733-830d-2b1565798b1f,d5656a92-adfb-4733-830d-2b1565798b1f,1,0,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,1,0,b0f6ea83-2849-4151-930d-692866919db3,b0f6ea83-2849-4151-930d-692866919db3,1,0,05558ce4-8568-4009-b1d7-307d54967515,05558ce4-8568-4009-b1d7-307d54967515,1,0,74380324-9b7b-49f6-9458-88deb9405f98,74380324-9b7b-49f6-9458-88deb9405f98,1,0,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,1,0,0abf70e0-0d81-4d85-a288-a2134da5fbf1,0abf70e0-0d81-4d85-a288-a2134da5fbf1,1,0,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,1,0,f66cb2da-3b3c-481f-823a-506f8290f619,f66cb2da-3b3c-481f-823a-506f8290f619,1,0,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,1,0,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,1,0,0bdcf045-5132-4a68-839c-a30515dc569e,0bdcf045-5132-4a68-839c-a30515dc569e,1,0,683861f9-9a5f-47db-8b03-959f839d5a3a,683861f9-9a5f-47db-8b03-959f839d5a3a,1,0,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,1,0,125be5bf-f410-451d-aa96-22fabc6a4d8a,125be5bf-f410-451d-aa96-22fabc6a4d8a,1,0,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,1,0,0a46166a-4562-4a50-b139-39dbe8a1fc84,0a46166a-4562-4a50-b139-39dbe8a1fc84,1,0,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,1,0,6ce64d65-f710-4d3f-a85f-26ce6915451e,6ce64d65-f710-4d3f-a85f-26ce6915451e,1,0,33eb9806-e34f-42a0-9825-3ff2de92c503,33eb9806-e34f-42a0-9825-3ff2de92c503,1,0,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,1,0,bcb58235-7cd7-4c15-a1eb-194ee38259e6,bcb58235-7cd7-4c15-a1eb-194ee38259e6,1,0,e19aefe7-634d-4218-8d40-75802d1691e0,e19aefe7-634d-4218-8d40-75802d1691e0,1,0,b885dbb2-6e18-46a6-929c-3d6d392343ad,b885dbb2-6e18-46a6-929c-3d6d392343ad,1,0,d31e24cf-7493-45dc-ba81-3a00618e53bc,d31e24cf-7493-45dc-ba81-3a00618e53bc,1,0,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,1,0,f942d212-9be0-4d80-84b6-5b63070e33e4,f942d212-9be0-4d80-84b6-5b63070e33e4,1,0,bea6bbc1-c1e4-4306-a0ca-efd47b9a8b23,bea6bbc1-c1e4-4306-a0ca-efd47b9a8b23,1,0,64c91eaa-084f-4801-8dbf-4e075c689c2b,64c91eaa-084f-4801-8dbf-4e075c689c2b,1,0,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,1,0,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,1,0,3aa12805-823a-439b-b039-fb9940aee312,3aa12805-823a-439b-b039-fb9940aee312,1,0,87d53573-f266-4b74-94af-041ae4b6518f,87d53573-f266-4b74-94af-041ae4b6518f,1,0,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,1,0,801cf1f7-2c65-4126-a3e9-b66abfdde67a,801cf1f7-2c65-4126-a3e9-b66abfdde67a,1,0,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,1,0,29c2bc01-8838-4459-8ac2-79862aa1dbc9,29c2bc01-8838-4459-8ac2-79862aa1dbc9,1,0,ad556c33-6811-48b4-ae90-57700a4d3fd6,ad556c33-6811-48b4-ae90-57700a4d3fd6,1,0,6e0833f4-3b57-4a5f-810f-9e2a492335df,6e0833f4-3b57-4a5f-810f-9e2a492335df,1,0,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,1,0,977bc9d8-9843-4343-85af-11a3d91f9966,977bc9d8-9843-4343-85af-11a3d91f9966,1,0,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,1,0,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,1,0,a6582448-734d-4a4c-a32c-c4755ca1bc93,a6582448-734d-4a4c-a32c-c4755ca1bc93,1,0,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,1,0,53327cc4-22b0-40f9-bae7-db483f85901c,53327cc4-22b0-40f9-bae7-db483f85901c,1,0,098d904d-95c9-459e-86d0-357ba9a40191,098d904d-95c9-459e-86d0-357ba9a40191,1,0,e9ab9d00-6e42-439b-8efc-fcacf727016d,e9ab9d00-6e42-439b-8efc-fcacf727016d,1,0,2d58033f-e15d-4a91-8165-dd311025c7c4,2d58033f-e15d-4a91-8165-dd311025c7c4,1,0,49cb3a36-90b3-4154-b571-265fc5cee21e,49cb3a36-90b3-4154-b571-265fc5cee21e,1,0,10472d2c-18ca-49b0-bd9d-c750db8498c5,10472d2c-18ca-49b0-bd9d-c750db8498c5,1,0,8efe5daf-272d-4255-b5c4-66dca7463b50,8efe5daf-272d-4255-b5c4-66dca7463b50,1,0,65af25a6-f699-4c40-b13e-3b7dff3f16fe,65af25a6-f699-4c40-b13e-3b7dff3f16fe,1,0,c4d2486d-289c-4812-b223-5ccfcd7f29e3,c4d2486d-289c-4812-b223-5ccfcd7f29e3,1,0,7da57c89-af2c-445a-96f7-39250f70306f,7da57c89-af2c-445a-96f7-39250f70306f,1,0,b5b94d94-25f7-4cfa-b1e9-6009fb848763,b5b94d94-25f7-4cfa-b1e9-6009fb848763,1,0,a2accf54-5966-42e8-ab2e-e56e415963ee,a2accf54-5966-42e8-ab2e-e56e415963ee,1,0,d8eb5329-5900-4b5d-b45e-458513dddfef,d8eb5329-5900-4b5d-b45e-458513dddfef,1,0,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,1,0,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,1,0,6ffd2da8-db97-46fc-9a53-8e665a598e3c,6ffd2da8-db97-46fc-9a53-8e665a598e3c,1,0,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,1,0,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,1,0,eaaed107-69d4-4963-be83-74519e331715,eaaed107-69d4-4963-be83-74519e331715,1,0,38cddf96-8703-4396-8c73-47fb22828a48,38cddf96-8703-4396-8c73-47fb22828a48,1,0,2c2cb793-0177-4983-91ca-9c292c5b10f1,2c2cb793-0177-4983-91ca-9c292c5b10f1,1,0,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,1,0,221fa473-3327-44e6-a033-6fdfd2be713c,221fa473-3327-44e6-a033-6fdfd2be713c,1,0,7a5973f0-7e29-44af-8e7b-70af71f704a4,7a5973f0-7e29-44af-8e7b-70af71f704a4,1,0,2b2bf0f7-0946-4492-bba0-27f007a70e64,2b2bf0f7-0946-4492-bba0-27f007a70e64,1,0,22c9a703-5ed3-4156-8fa6-476b1c1452f1,22c9a703-5ed3-4156-8fa6-476b1c1452f1,1,0,27089e8e-2c75-431c-b808-5d4dcba3cdca,27089e8e-2c75-431c-b808-5d4dcba3cdca,1,0,9ab3980e-a480-4f90-a8cc-bde99d5ace35,9ab3980e-a480-4f90-a8cc-bde99d5ace35,1,0,ec928563-6e35-4b84-b477-90d2481cec1c,ec928563-6e35-4b84-b477-90d2481cec1c,1,0,5d3e9678-20fe-4128-867a-3f7addaa7831,5d3e9678-20fe-4128-867a-3f7addaa7831,1,0,bb878f73-8a0f-459a-9076-ce57fe7957dc,bb878f73-8a0f-459a-9076-ce57fe7957dc,1,0,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,1,0,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,1,0,9f4b8e36-83ff-4694-8540-b5f47b18395f,9f4b8e36-83ff-4694-8540-b5f47b18395f,1,0,b4c026eb-4271-4366-b529-1cdfe2874563,b4c026eb-4271-4366-b529-1cdfe2874563,1,0,314b0da2-24d3-48cc-8532-d36c45eb3bf8,314b0da2-24d3-48cc-8532-d36c45eb3bf8,1,0,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,1,0,4077e700-ec20-4afa-8155-bf7e516a70cb,4077e700-ec20-4afa-8155-bf7e516a70cb,1,0,5198c6db-2100-4902-82c8-85c8ea555e78,5198c6db-2100-4902-82c8-85c8ea555e78,1,0,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,1,0,f0b1e9f4-2e07-44e6-88d2-c11457135781,f0b1e9f4-2e07-44e6-88d2-c11457135781,1,0,e010c0f9-f770-4fdc-8607-50838c0262ef,e010c0f9-f770-4fdc-8607-50838c0262ef,1,0,f935399f-3554-4c08-b0a6-eba13074e1b7,f935399f-3554-4c08-b0a6-eba13074e1b7,1,0,10008125-3aeb-4912-8ad6-d92d283ea09a,10008125-3aeb-4912-8ad6-d92d283ea09a,1,0,765f9584-fefa-4695-b130-dd54c3b0d79d,765f9584-fefa-4695-b130-dd54c3b0d79d,1,0,dd050ca0-8335-4654-ab5c-7babcb4824ef,dd050ca0-8335-4654-ab5c-7babcb4824ef,1,0,706cbf55-626d-4cab-b589-a2464368f6c1,706cbf55-626d-4cab-b589-a2464368f6c1,1,0,d22a0a50-220d-459e-a23a-39730a1e67c4,d22a0a50-220d-459e-a23a-39730a1e67c4,1,0,2c1c9284-ba8b-4282-a89c-429f02ea41f6,2c1c9284-ba8b-4282-a89c-429f02ea41f6,1,0,1d3b9eff-5d0b-437b-932f-0ec466e092b2,1d3b9eff-5d0b-437b-932f-0ec466e092b2,1,0,fd7e5257-024c-46de-9ff3-edd302fadba5,fd7e5257-024c-46de-9ff3-edd302fadba5,1,0,a4168057-d99f-4b55-b762-214f95ae3a30,a4168057-d99f-4b55-b762-214f95ae3a30,1,0,ab4fe549-1c07-42d9-b412-8b89ed115591,ab4fe549-1c07-42d9-b412-8b89ed115591,1,0,0335804e-efe5-4fb9-9ae9-2ddca73d77f3,0335804e-efe5-4fb9-9ae9-2ddca73d77f3,1,0,b49c589d-b45d-4aff-8899-72cfe433e9a6,b49c589d-b45d-4aff-8899-72cfe433e9a6,1,0,f71a8d47-6a6c-4b7e-90b3-5b7a3be3ccd3,f71a8d47-6a6c-4b7e-90b3-5b7a3be3ccd3,1,0,273ad3f7-c645-434d-93b0-e832134f3043,273ad3f7-c645-434d-93b0-e832134f3043,1,0,d320803b-1de4-4e66-b455-0afe39be5c41,d320803b-1de4-4e66-b455-0afe39be5c41,1,0,483dfce4-9c66-4739-94d4-17a005d64f5b,483dfce4-9c66-4739-94d4-17a005d64f5b,1,0,19506116-43ef-433c-822c-ef8717b0da6b,19506116-43ef-433c-822c-ef8717b0da6b,1,0,464b92cc-b577-4350-ae9f-e697390248d7,464b92cc-b577-4350-ae9f-e697390248d7,1,0,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,1,0,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,1,0,97e853dc-065f-4c6d-84cb-3d3aff367b22,97e853dc-065f-4c6d-84cb-3d3aff367b22,1,0,2f1fdf47-2627-496f-9e1f-77019abb2104,2f1fdf47-2627-496f-9e1f-77019abb2104,1,0,c996532a-8795-4136-8a40-9bb4b263277c,c996532a-8795-4136-8a40-9bb4b263277c,1,0,64c77788-fc49-4979-8163-949a891bd8b7,64c77788-fc49-4979-8163-949a891bd8b7,1,0,c39750ca-e33f-40c2-b830-119423d9a2ae,c39750ca-e33f-40c2-b830-119423d9a2ae,1,0,9372ff6b-27b6-48f3-a2a2-762e7c485766,9372ff6b-27b6-48f3-a2a2-762e7c485766,1,0,f454595a-4a3d-451b-8e8b-b17aa8314591,f454595a-4a3d-451b-8e8b-b17aa8314591,1,0,d3b7f89e-eb04-404e-bcc1-1d3557fb8d1a,d3b7f89e-eb04-404e-bcc1-1d3557fb8d1a,1,0,442f9d7b-ae8f-4074-8ece-d5aa1c66e35c,442f9d7b-ae8f-4074-8ece-d5aa1c66e35c,1,0,bc708da8-7fc6-4da1-8129-9ef6a86667af,bc708da8-7fc6-4da1-8129-9ef6a86667af,1,0,061842fe-4077-4d6e-aefe-de79409da730,061842fe-4077-4d6e-aefe-de79409da730,1,0,86249619-8981-4fc4-85fc-ce30e4b9d542,86249619-8981-4fc4-85fc-ce30e4b9d542,1,0,da6e4bff-9835-4b92-b62b-291a5d6c86fe,da6e4bff-9835-4b92-b62b-291a5d6c86fe,1,0,8be35c43-32e6-418d-b3d6-e53ef56babb7,8be35c43-32e6-418d-b3d6-e53ef56babb7,1,0,3e4f5fd0-af15-41ae-896e-458ce9fb7e4d,3e4f5fd0-af15-41ae-896e-458ce9fb7e4d,1,0,935d01e1-232b-480e-a6bf-c21c617c6348,935d01e1-232b-480e-a6bf-c21c617c6348,1,0,9bc7cc99-1237-4f9c-8a4e-f3ab459186ef,9bc7cc99-1237-4f9c-8a4e-f3ab459186ef,1,0,05c702a1-2c74-45d5-b2ee-fdd795b0945a,05c702a1-2c74-45d5-b2ee-fdd795b0945a,1,0,3fadaeb7-2c41-42a4-bfa8-c585602b1028,3fadaeb7-2c41-42a4-bfa8-c585602b1028,1,0,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,171a0dfc-032e-4eaf-81a2-e5e0dfde8d56,1,0,083c709b-ed8c-47e4-a190-421e14259e73,083c709b-ed8c-47e4-a190-421e14259e73,1,0,b98dacc7-29e1-426b-a664-0a988f18186c,b98dacc7-29e1-426b-a664-0a988f18186c,1,0,d678856d-6e7c-443f-a6e3-350bbe8af659,d678856d-6e7c-443f-a6e3-350bbe8af659,1,0,d0979762-22ce-41be-b7a4-5e9ac149d94b,d0979762-22ce-41be-b7a4-5e9ac149d94b,1,0,ae23e70c-479e-47ad-9bfa-58560a903410,ae23e70c-479e-47ad-9bfa-58560a903410,1,0,c0d83781-bbda-43f7-bf0e-5defa3d47143,c0d83781-bbda-43f7-bf0e-5defa3d47143,1,0,21fa5fdd-acbc-403b-9acb-bbf95284bd20,21fa5fdd-acbc-403b-9acb-bbf95284bd20,1,0,576a01e3-4d6d-4241-a3c4-7661ba129bcb,576a01e3-4d6d-4241-a3c4-7661ba129bcb,1,0,9f7290dd-19f4-4163-9795-fe562e84f06d,9f7290dd-19f4-4163-9795-fe562e84f06d,1,0,c3b5c81f-b787-4f63-8cba-79def0921477,c3b5c81f-b787-4f63-8cba-79def0921477,1,0,1f0cb3d4-1344-451b-a257-be3cd854acfd,1f0cb3d4-1344-451b-a257-be3cd854acfd,1,0,0131fe59-ce47-48b7-8f7e-1544bf0fa031,0131fe59-ce47-48b7-8f7e-1544bf0fa031,1,0,c8b0a1be-97c6-4a16-b1dd-31901ac61cdc,c8b0a1be-97c6-4a16-b1dd-31901ac61cdc,1,0,372150e2-526e-4424-8c54-e4b16bdd25b5,372150e2-526e-4424-8c54-e4b16bdd25b5,1,0,752dc569-cf84-42d7-911d-49d455f7214e,752dc569-cf84-42d7-911d-49d455f7214e,1,0,fecab2b9-27e1-44d6-9082-79c3569b7477,fecab2b9-27e1-44d6-9082-79c3569b7477,1,0,07ae092f-8517-47b7-b54c-5dbcb6506929,07ae092f-8517-47b7-b54c-5dbcb6506929,1,0,db4c25bb-d199-43ec-833d-82972de04a41,db4c25bb-d199-43ec-833d-82972de04a41,1,0,43d19685-0794-41f2-9171-bf565133718d,43d19685-0794-41f2-9171-bf565133718d,1,0,b68c15c4-4966-4f13-8912-2d479b65089a,b68c15c4-4966-4f13-8912-2d479b65089a,1,0,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,8f6770c2-654c-4cc7-8ed5-15b5b2e3109a,1,0,f87e3935-dae1-4192-b6a7-05e3c700c590,f87e3935-dae1-4192-b6a7-05e3c700c590,1,0,ee635706-6ee2-4956-8d58-a235f64687f6,ee635706-6ee2-4956-8d58-a235f64687f6,1,0,a5a40ca7-d665-420b-a516-1355019d6901,a5a40ca7-d665-420b-a516-1355019d6901,1,0,adf9304c-ccf8-492e-95b1-0754764586a2,adf9304c-ccf8-492e-95b1-0754764586a2,1,0,fd175112-ec8f-4088-9b21-d8135056f0c5,fd175112-ec8f-4088-9b21-d8135056f0c5,1,0,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,ddd82a66-1eda-409f-b6c0-e22c4bd2c1b7,1,0,df76a1b7-312a-4e77-bac1-79befadb4495,df76a1b7-312a-4e77-bac1-79befadb4495,1,0,ab39fad8-1039-491e-982a-c49637770ec0,ab39fad8-1039-491e-982a-c49637770ec0,1,0,7d93a6ba-3ca7-45ab-a540-743c79587535,7d93a6ba-3ca7-45ab-a540-743c79587535,1,0,76b58810-0527-4dfc-8858-bac68e7e65f3,76b58810-0527-4dfc-8858-bac68e7e65f3,1,0,aba97fd9-f05e-45cd-8404-ed702070e17a,aba97fd9-f05e-45cd-8404-ed702070e17a,1,0,f5c415cd-429b-469f-9332-c43ab5d1c8d6,f5c415cd-429b-469f-9332-c43ab5d1c8d6,1,0,458e9c6b-b828-404b-be5a-c6c0aeea34c9,458e9c6b-b828-404b-be5a-c6c0aeea34c9,1,0,7262eb4d-2d2d-454c-beaa-974645813af7,7262eb4d-2d2d-454c-beaa-974645813af7,1,0,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,1,0,49221b2f-aae2-4bee-9a1a-18263fc74244,49221b2f-aae2-4bee-9a1a-18263fc74244,1,0,da0cd264-da2f-4044-af28-c91d2efe1d5c,da0cd264-da2f-4044-af28-c91d2efe1d5c,1,0,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,1,0,fad26b16-8638-496b-bd12-381fc6f5b71f,fad26b16-8638-496b-bd12-381fc6f5b71f,1,0,ed3cfb74-a37a-4314-a2d7-4ce717a2edd9,ed3cfb74-a37a-4314-a2d7-4ce717a2edd9,1,0,324a56c9-02d9-4177-af84-a817b8c41169,324a56c9-02d9-4177-af84-a817b8c41169,1,0,1e44abfe-c173-4802-b535-96849d384983,1e44abfe-c173-4802-b535-96849d384983,1,0,2751a509-037b-49aa-9ca8-e87057d6d82c,2751a509-037b-49aa-9ca8-e87057d6d82c,1,0,35f62549-eb6a-4284-a6e3-406b0d9df0cf,35f62549-eb6a-4284-a6e3-406b0d9df0cf,1,0,cee94c04-7a46-47a5-bdd5-6f0dbd884e97,cee94c04-7a46-47a5-bdd5-6f0dbd884e97,1,0,fd66995b-ee76-41d3-983f-33d84bdcbbd4,fd66995b-ee76-41d3-983f-33d84bdcbbd4,1,0,73e97918-b34e-4ad2-8591-4c219eb92f2c,73e97918-b34e-4ad2-8591-4c219eb92f2c,1,0,445cf7eb-35d0-48f8-9579-c2ec574ef324,445cf7eb-35d0-48f8-9579-c2ec574ef324,1,0,1025657e-afd2-4c7b-96d5-ccbedaca4619,1025657e-afd2-4c7b-96d5-ccbedaca4619,1,0,64839c78-b2fa-4d80-bee0-b3d3a7e5db35,64839c78-b2fa-4d80-bee0-b3d3a7e5db35,1,0,e754ad5c-cf3c-4198-af81-128475924cb0,e754ad5c-cf3c-4198-af81-128475924cb0,1,0,ed65d504-b210-4014-85ec-275ad633ef04,ed65d504-b210-4014-85ec-275ad633ef04,1,0,dc31edb1-273e-4b1a-8e69-32393479ff36,dc31edb1-273e-4b1a-8e69-32393479ff36,1,0,3ab0649b-239f-4466-b897-73c0ab628927,3ab0649b-239f-4466-b897-73c0ab628927,1,0,4c697110-8941-4d6d-ba03-f2b9e96ff82e,4c697110-8941-4d6d-ba03-f2b9e96ff82e,1,0,7ea4112d-fc41-4f1e-bd22-f04adeac1d8f,7ea4112d-fc41-4f1e-bd22-f04adeac1d8f,1,0,b172631b-da0d-42f4-ae6b-ae122a46cced,b172631b-da0d-42f4-ae6b-ae122a46cced,1,0,1a25e744-37ae-46ca-a328-ff8eced21a82,1a25e744-37ae-46ca-a328-ff8eced21a82,1,0,dddabe54-a93b-4e4b-acbb-cc522e4d7c28,dddabe54-a93b-4e4b-acbb-cc522e4d7c28,1,0,46169f0b-8514-40a1-9d27-8489cab72503,46169f0b-8514-40a1-9d27-8489cab72503,1,0,d9cf39cc-8652-4c4d-bc5b-b4e455c0083f,d9cf39cc-8652-4c4d-bc5b-b4e455c0083f,1,0,4b0d7d39-5f79-4a21-b0bb-d3142a3bc8a9,4b0d7d39-5f79-4a21-b0bb-d3142a3bc8a9,1,0,c90243af-582c-4f5a-88e7-e0cbc0555fcb,c90243af-582c-4f5a-88e7-e0cbc0555fcb,1,0,14bf4066-15cb-4165-b854-45443ee27da1,14bf4066-15cb-4165-b854-45443ee27da1,1,0,a0861dd3-ced5-485e-8719-0ad0bc3adc0d,a0861dd3-ced5-485e-8719-0ad0bc3adc0d,1,0,5a94a307-3f54-4753-8ef5-ce9f88417827,5a94a307-3f54-4753-8ef5-ce9f88417827,1,0,0f09b6b8-72ac-4461-96c4-683be403e2ff,0f09b6b8-72ac-4461-96c4-683be403e2ff,1,0,b73d0f07-9c6e-41b1-9acc-8e83dacd7528,b73d0f07-9c6e-41b1-9acc-8e83dacd7528,1,0,19d1d74a-de5f-475a-896c-a32b7d28f918,19d1d74a-de5f-475a-896c-a32b7d28f918,1,0,4427cab9-4eea-4415-98ef-6021a447c60c,4427cab9-4eea-4415-98ef-6021a447c60c,1,0,fe46b4da-d865-468f-badd-83644bf88faa,fe46b4da-d865-468f-badd-83644bf88faa,1,0,2851c9d4-4366-4488-926d-a7fcd3b1548c,2851c9d4-4366-4488-926d-a7fcd3b1548c,1,0,31116aa2-cfbc-48e8-886b-45c1c17508fd,31116aa2-cfbc-48e8-886b-45c1c17508fd,1,0,6aa819d3-c56d-4561-a2e4-a1188ab1295a,6aa819d3-c56d-4561-a2e4-a1188ab1295a,1,0,2ddf344d-7065-40d5-9306-23870d8fc04a,2ddf344d-7065-40d5-9306-23870d8fc04a,1,0,c630ab2d-0a20-4136-88b6-220b2cad6a71,c630ab2d-0a20-4136-88b6-220b2cad6a71,1,0,00cd1dea-bc54-475c-956d-dc5221104932,00cd1dea-bc54-475c-956d-dc5221104932,1,0,3807f865-dd2c-44f7-9238-3db191f0a186,3807f865-dd2c-44f7-9238-3db191f0a186,1,0,8f184df5-bfe8-4df3-bc7c-18218cef7650,8f184df5-bfe8-4df3-bc7c-18218cef7650,1,0,387e273a-889f-454b-8b43-feaa12025fde,387e273a-889f-454b-8b43-feaa12025fde,1,0,1c38ad75-b294-4c05-89ce-69ce4d9a291f,1c38ad75-b294-4c05-89ce-69ce4d9a291f,1,0,078d1e8f-6d27-4761-9532-b1e7a60e4c13,078d1e8f-6d27-4761-9532-b1e7a60e4c13,1,0,4262193c-58ad-47c6-8088-735d8cd037ea,4262193c-58ad-47c6-8088-735d8cd037ea,1,0,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,1,0,de6d1aad-39eb-46ce-87aa-d29812bb37bf,de6d1aad-39eb-46ce-87aa-d29812bb37bf,1,0,4ad859ec-cc75-4bac-9e89-397798450e48,4ad859ec-cc75-4bac-9e89-397798450e48,1,0,d93ab94c-0f55-4b80-b226-41b44c73b3ea,d93ab94c-0f55-4b80-b226-41b44c73b3ea,1,0,94cbed80-5a35-471f-b354-439a11629210,94cbed80-5a35-471f-b354-439a11629210,1,0,1162cc0a-42e5-47cb-9507-68459579f110,1162cc0a-42e5-47cb-9507-68459579f110,1,0,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,1,0,bb49dc80-4934-4f44-8f27-9a363dca8dc4,bb49dc80-4934-4f44-8f27-9a363dca8dc4,1,0,7338e497-03a7-4ed4-85a2-ca802c065a9f,7338e497-03a7-4ed4-85a2-ca802c065a9f,1,0,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,1,0,5249687b-9ff4-46f5-be15-dbb5d5047fd1,5249687b-9ff4-46f5-be15-dbb5d5047fd1,1,0,d33df51c-3dcd-496c-90f2-7ee05582bdf7,d33df51c-3dcd-496c-90f2-7ee05582bdf7,1,0,24b39ebd-2424-4939-8e3e-d09eb674d409,24b39ebd-2424-4939-8e3e-d09eb674d409,1,0,08c751bb-9e57-4536-901e-bb316c8e96d7,08c751bb-9e57-4536-901e-bb316c8e96d7,1,0,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,1,0,034cdcef-08e5-4751-9885-400aa69e0b94,034cdcef-08e5-4751-9885-400aa69e0b94,1,0,efefebea-2032-4006-b9ca-50a23b7da1ef,efefebea-2032-4006-b9ca-50a23b7da1ef,1,0,4c794d37-3352-4acb-a939-5e90fb682db8,4c794d37-3352-4acb-a939-5e90fb682db8,1,0,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,1,0,008f5068-da9c-4dac-9c0a-a50366d27cbb,008f5068-da9c-4dac-9c0a-a50366d27cbb,1,0,950b3ee3-070f-4946-8b9b-0aa2058de986,950b3ee3-070f-4946-8b9b-0aa2058de986,1,0,bd04a870-0943-4bdb-9e30-50a69daa8a13,bd04a870-0943-4bdb-9e30-50a69daa8a13,1,0,a23e6c77-8c12-4f99-ae2d-68a12274be38,a23e6c77-8c12-4f99-ae2d-68a12274be38,1,0,3c4454cd-31e9-42a5-9127-fb66a628f0e1,3c4454cd-31e9-42a5-9127-fb66a628f0e1,1,0,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,1,0,31cac1e9-eb16-489c-9322-30d1e27a80b3,31cac1e9-eb16-489c-9322-30d1e27a80b3,1,0,0d100e33-7941-41c1-962d-7672c874e9c5,0d100e33-7941-41c1-962d-7672c874e9c5,1,0,c5ac53c9-c9b2-4b90-a21e-10f1daa756c5,c5ac53c9-c9b2-4b90-a21e-10f1daa756c5,1,0,6e61d717-de36-4dce-8af9-b6c14ed76acb,6e61d717-de36-4dce-8af9-b6c14ed76acb,1,0,474518fe-9cb5-4a12-9388-bc7a64511617,474518fe-9cb5-4a12-9388-bc7a64511617,1,0,64337614-b1c9-4931-b576-448721fa4602,64337614-b1c9-4931-b576-448721fa4602,1,0,1d73b59c-0594-4ed3-b584-cf1261941e1d,1d73b59c-0594-4ed3-b584-cf1261941e1d,1,0,8ff2547f-d596-4fa1-9e12-079e1cc4c057,8ff2547f-d596-4fa1-9e12-079e1cc4c057,1,0,1ab0c8f8-b908-4618-ae88-af37b8f1224e,1ab0c8f8-b908-4618-ae88-af37b8f1224e,1,0,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,1,0,b85b3a58-95e4-4698-b1ae-037901ecc1b1,b85b3a58-95e4-4698-b1ae-037901ecc1b1,1,0,b77d748a-d180-432d-91c3-774e6ccf7efa,b77d748a-d180-432d-91c3-774e6ccf7efa,1,0,e5b9c1b0-4690-442c-b160-e6c587e42e57,e5b9c1b0-4690-442c-b160-e6c587e42e57,1,0,e3adb576-6b33-475b-976b-7a6783de3184,e3adb576-6b33-475b-976b-7a6783de3184,1,0,c6cef8db-0689-42a6-9f43-c86b7c3cf0e9,c6cef8db-0689-42a6-9f43-c86b7c3cf0e9,1,0,78f5a205-dffb-4009-897a-e8f36372f33c,78f5a205-dffb-4009-897a-e8f36372f33c,1,0,f7597041-f182-42fb-803a-2521c70d627d,f7597041-f182-42fb-803a-2521c70d627d,1,0,ce988b8a-d0c1-400a-9466-aa757501bb58,ce988b8a-d0c1-400a-9466-aa757501bb58,1,0,ab98d665-8da8-406e-9e0e-3e130ab393ef,ab98d665-8da8-406e-9e0e-3e130ab393ef,1,0,9e823bb6-b0c0-439e-81e4-ebd46b79b99c,9e823bb6-b0c0-439e-81e4-ebd46b79b99c,1,0,118a0e62-c0bb-435b-9e3e-c64563efa602,118a0e62-c0bb-435b-9e3e-c64563efa602,1,0,b57bc8a9-8a59-4192-a442-2e1982e83179,b57bc8a9-8a59-4192-a442-2e1982e83179,1,0,5b06ccda-2a70-4621-8273-78408cbe72a9,5b06ccda-2a70-4621-8273-78408cbe72a9,1,0,89753385-64fd-4e76-9857-bfd5d7c23f71,89753385-64fd-4e76-9857-bfd5d7c23f71,1,0,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,1,0,53e72cf2-e2a5-4b59-b5b1-a1fc28fda5bf,53e72cf2-e2a5-4b59-b5b1-a1fc28fda5bf,1,0,e20bcb57-2f68-4709-8a11-105d561a2dda,e20bcb57-2f68-4709-8a11-105d561a2dda,1,0,3df3f61a-2c17-4278-8d82-91089f793e6a,3df3f61a-2c17-4278-8d82-91089f793e6a,1,0,ea8beea1-7d80-4613-b2f9-79ee612e977a,ea8beea1-7d80-4613-b2f9-79ee612e977a,1,0,afd62a32-fdbb-429a-9a64-89c61a07e018,afd62a32-fdbb-429a-9a64-89c61a07e018,1,0,027cef43-99bd-48d3-a1a3-2102ac003742,027cef43-99bd-48d3-a1a3-2102ac003742,1,0,00197ea9-de76-4e2a-97bc-93e44053e35e,00197ea9-de76-4e2a-97bc-93e44053e35e,1,0,540a47b8-f6d4-4531-ac87-3f7cfbef4c8c,540a47b8-f6d4-4531-ac87-3f7cfbef4c8c,1,0,a51f7c6f-2631-4d23-becc-c0e8b711fddd,a51f7c6f-2631-4d23-becc-c0e8b711fddd,1,0,37806357-d92c-4bea-a5ef-77f138578fda,37806357-d92c-4bea-a5ef-77f138578fda,1,0,91b100e6-fbbe-4bb0-8d51-d12595a2a3e8,91b100e6-fbbe-4bb0-8d51-d12595a2a3e8,1,0,0a880538-f97f-448e-a4a9-82b0194dbe28,0a880538-f97f-448e-a4a9-82b0194dbe28,1,0,179868b7-d342-4df0-9386-c114d75faf3a,179868b7-d342-4df0-9386-c114d75faf3a,1,0,bbc4cc8c-31c2-4fcf-b86c-9ec65b2772b0,bbc4cc8c-31c2-4fcf-b86c-9ec65b2772b0,1,0,b49ea672-5d01-46c2-8ece-2511afeb740d,b49ea672-5d01-46c2-8ece-2511afeb740d,1,0,77bb5aba-1364-4db9-aa93-69f001ce2709,77bb5aba-1364-4db9-aa93-69f001ce2709,1,0,d14528d6-c2dd-4184-98c5-0b444a2bd98b,d14528d6-c2dd-4184-98c5-0b444a2bd98b,1,0,48f81387-a409-4163-85b8-ad563cb6cf2e,48f81387-a409-4163-85b8-ad563cb6cf2e,1,0,739df12e-1b6b-45c6-802b-658641fb9e90,739df12e-1b6b-45c6-802b-658641fb9e90,1,0,878fe826-fa99-44ad-9891-5eada9744017,878fe826-fa99-44ad-9891-5eada9744017,1,0,0d61712a-dfaf-46f1-b728-62993dd94fbe,0d61712a-dfaf-46f1-b728-62993dd94fbe,1,0,3a6cf496-09b9-4947-9df5-06d23b474558,3a6cf496-09b9-4947-9df5-06d23b474558,1,0,625b498a-33d1-4162-9525-fb7790cbb6a8,625b498a-33d1-4162-9525-fb7790cbb6a8,1,0,28223f7b-d15a-4f12-b57c-1f6d08a902f9,28223f7b-d15a-4f12-b57c-1f6d08a902f9,1,0,dd9eb5b7-5aed-4e51-9939-9ff14492d240,dd9eb5b7-5aed-4e51-9939-9ff14492d240,1,0,b2a14899-d589-4990-b85e-7bffb427e8af,b2a14899-d589-4990-b85e-7bffb427e8af,1,0,0981d114-05bd-4ee1-a8fd-398fa6620d0b,0981d114-05bd-4ee1-a8fd-398fa6620d0b,1,0,3210ba40-382e-4917-ad0f-9bd88d23dc25,3210ba40-382e-4917-ad0f-9bd88d23dc25,1,0,835e3ead-d01f-410b-937a-902dd5e66aec,835e3ead-d01f-410b-937a-902dd5e66aec,1,0,40141982-d1d6-416f-844e-19143a407ff9,40141982-d1d6-416f-844e-19143a407ff9,1,0,618b8843-7413-4634-bd65-18d904c2582f,618b8843-7413-4634-bd65-18d904c2582f,1,0,253b97a6-4e04-40d0-a39e-99500d54accb,253b97a6-4e04-40d0-a39e-99500d54accb,1,0,46cf1217-4b49-4c35-9c2b-4739dd1b8bf5,46cf1217-4b49-4c35-9c2b-4739dd1b8bf5,1,0,db367faa-e417-40ff-a082-e93421d464ca,db367faa-e417-40ff-a082-e93421d464ca,1,0,55ad14cb-7647-4d16-ae68-ac45e4a39c01,55ad14cb-7647-4d16-ae68-ac45e4a39c01,1,0,f0363f45-9d63-4f0b-b7fc-95cb0d1660af,f0363f45-9d63-4f0b-b7fc-95cb0d1660af,1,0,d8a16236-89bc-4493-9b8e-fd5d3f9298a7,d8a16236-89bc-4493-9b8e-fd5d3f9298a7,1,0,b12a0998-905e-4956-af8b-6460dc945c10,b12a0998-905e-4956-af8b-6460dc945c10,1,0,6a958a2b-e914-4321-9e95-3203e8011b8c,6a958a2b-e914-4321-9e95-3203e8011b8c,1,0,176181ff-58af-4392-817e-49e37caa73ce,176181ff-58af-4392-817e-49e37caa73ce,1,0,917d059b-91d9-4f74-8c10-d0016162f77e,917d059b-91d9-4f74-8c10-d0016162f77e,1,0,95fd99eb-b139-4b7a-93db-70419e9a809b,95fd99eb-b139-4b7a-93db-70419e9a809b,1,0,c60b9f4f-870f-4478-b2b4-e8afa9324d54,c60b9f4f-870f-4478-b2b4-e8afa9324d54,1,0,e31d2420-266e-408a-a4bf-673194a555d3,e31d2420-266e-408a-a4bf-673194a555d3,1,0,31418550-c525-448b-a054-6b055aa11267,31418550-c525-448b-a054-6b055aa11267,1,0,2003c769-556e-41a6-a7a6-4c5c7263e48d,2003c769-556e-41a6-a7a6-4c5c7263e48d,1,0,66ec2482-c1f3-45d3-9257-e0b9f5ae772a,66ec2482-c1f3-45d3-9257-e0b9f5ae772a,1,0,d3211832-c8ca-437a-8810-82e06cbb48de,d3211832-c8ca-437a-8810-82e06cbb48de,1,0,8131d701-1014-4196-9b67-914e451f8a3a,8131d701-1014-4196-9b67-914e451f8a3a,1,0,2b102933-c660-4e74-ae9a-5061a88ed672,2b102933-c660-4e74-ae9a-5061a88ed672,1,0,56c897b7-d34e-4d7d-9a3b-d0779be5c189,56c897b7-d34e-4d7d-9a3b-d0779be5c189,1,0,3ac81c80-56bd-4750-b135-07ab522e3eab,3ac81c80-56bd-4750-b135-07ab522e3eab,1,0,5657872f-c7d5-446f-bcc3-d0b86ad63a42,5657872f-c7d5-446f-bcc3-d0b86ad63a42,1,0,d5214cb9-67e2-469f-989f-3f2b662ae830,d5214cb9-67e2-469f-989f-3f2b662ae830,1,0,69679e88-4f2b-4dd6-8cb2-b88293d07b55,69679e88-4f2b-4dd6-8cb2-b88293d07b55,1,0,68679208-9972-4854-8649-49bdf6212255,68679208-9972-4854-8649-49bdf6212255,1,0,98393093-7ba6-4b4d-86be-ee5826cd8cd5,98393093-7ba6-4b4d-86be-ee5826cd8cd5,1,0,87de486d-3f35-4432-a7cd-9d3832db63cf,87de486d-3f35-4432-a7cd-9d3832db63cf,1,0,246f17a0-93a7-4e2c-8fa6-f57405f0abeb,246f17a0-93a7-4e2c-8fa6-f57405f0abeb,1,0,ea6c4830-a34d-4026-a0ca-5cf7e44f089d,ea6c4830-a34d-4026-a0ca-5cf7e44f089d,1,0,bb7ce04a-8143-4c0b-a196-1b57f1640142,bb7ce04a-8143-4c0b-a196-1b57f1640142,1,0,4872f12c-705c-4dd3-802f-d27496a0d634,4872f12c-705c-4dd3-802f-d27496a0d634,1,0,3bacfd93-dfc7-4154-9d3f-b61ddc5c6721,3bacfd93-dfc7-4154-9d3f-b61ddc5c6721,1,0,0c0bbfba-c1c4-4bb5-a813-10da4bef7911,0c0bbfba-c1c4-4bb5-a813-10da4bef7911,1,0,f9ada91a-e673-4821-9bce-cb0dd75ca28b,f9ada91a-e673-4821-9bce-cb0dd75ca28b,1,0,9fcf68bb-43e2-4cd1-89ec-8797ad9c0e8b,9fcf68bb-43e2-4cd1-89ec-8797ad9c0e8b,1,0,90ce635a-0277-4056-980d-d1a16d91cb30,90ce635a-0277-4056-980d-d1a16d91cb30,1,0,e61a8360-a0f8-4d86-b91a-2ae9b8552bf0,e61a8360-a0f8-4d86-b91a-2ae9b8552bf0,1,0,1e77e873-632c-482b-8f46-8f8cc3cc8cef,1e77e873-632c-482b-8f46-8f8cc3cc8cef,1,0,766208a3-2780-427b-a7d3-93abe99d236b,766208a3-2780-427b-a7d3-93abe99d236b,1,0,63ce4c3c-5bad-409c-904f-18f34cf1da78,63ce4c3c-5bad-409c-904f-18f34cf1da78,1,0,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,62bddcee-bef6-42cc-9ba3-e99b8160dcc2,1,0,26ac22f9-0bbb-4671-b446-626e345e2461,26ac22f9-0bbb-4671-b446-626e345e2461,1,0,0d63ee6d-e17f-4a86-b384-adf9793f3331,0d63ee6d-e17f-4a86-b384-adf9793f3331,1,0,f152945b-2a7b-449e-a915-176166af7bac,f152945b-2a7b-449e-a915-176166af7bac,1,0,77f5d86a-7fae-4490-9740-0e31102dab5c,77f5d86a-7fae-4490-9740-0e31102dab5c,1,0,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,5a54bc1a-d178-412c-bf4a-cf92d7f141aa,1,0,24be43ec-d39e-46aa-9c11-2536b835e515,24be43ec-d39e-46aa-9c11-2536b835e515,1,0,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,c9ca80ef-c7b7-4425-b5c0-3d13af82f291,1,0,df9af3ee-6a69-4a03-8ff5-0735e9a38013,df9af3ee-6a69-4a03-8ff5-0735e9a38013,1,0,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,1b27eb77-d535-43a5-8ae1-fa2fec15d92c,1,0,7743fe24-b941-4dad-bc76-05fb6b26b1d7,7743fe24-b941-4dad-bc76-05fb6b26b1d7,1,0,5bf2da0d-f318-4036-9234-8a3a6eca88b2,5bf2da0d-f318-4036-9234-8a3a6eca88b2,1,0,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,288525fc-d3fa-4c8e-a1d7-d2d1ef4cd0ef,1,0,c3634571-6fe5-45ab-9362-161305eef661,c3634571-6fe5-45ab-9362-161305eef661,1,0,ec11342f-594f-416f-a10f-bd1bfa695c08,ec11342f-594f-416f-a10f-bd1bfa695c08,1,0,31c3ac44-204e-43fd-bca3-fd18fa091c58,31c3ac44-204e-43fd-bca3-fd18fa091c58,1,0,74f03c35-5da0-406e-a938-e8e5d49975ef,74f03c35-5da0-406e-a938-e8e5d49975ef,1,0,c9ab3890-6d16-431f-ab2b-b5058e6202a4,c9ab3890-6d16-431f-ab2b-b5058e6202a4,1,0,5ee9eed7-3c6c-4264-ab9a-6f24f9c80598,5ee9eed7-3c6c-4264-ab9a-6f24f9c80598,1,0,3c33adc7-abea-4e0f-9e5d-d8f10abb63df,3c33adc7-abea-4e0f-9e5d-d8f10abb63df,1,0,4090c6f7-1d25-4b17-9baa-18daa0640b0f,4090c6f7-1d25-4b17-9baa-18daa0640b0f,1,0,26125e58-dfc8-4bbb-a3a4-80616471746e,26125e58-dfc8-4bbb-a3a4-80616471746e,1,0,b1c699cd-efdc-461c-ad37-10bfd4bc9674,b1c699cd-efdc-461c-ad37-10bfd4bc9674,1,0,6add1920-5073-4b1e-b7e0-13bf1e65e4c3,6add1920-5073-4b1e-b7e0-13bf1e65e4c3,1,0,f12c946c-98e4-4da6-8a88-c555e9dc3bdd,f12c946c-98e4-4da6-8a88-c555e9dc3bdd,1,0,ec5718b7-1c4d-4bdc-9426-40a339bb29cf,ec5718b7-1c4d-4bdc-9426-40a339bb29cf,1,0,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,ecd8772d-e33f-426f-a87a-e28bd94d5fdf,1,0,96661303-1286-4f84-93b7-0e6da2bd7893,96661303-1286-4f84-93b7-0e6da2bd7893,1,0,68076431-36e6-46dc-92cb-e0d8e605bf66,68076431-36e6-46dc-92cb-e0d8e605bf66,1,0,239fa55a-6572-4e5c-9918-c2e14063c76d,239fa55a-6572-4e5c-9918-c2e14063c76d,1,0,8211a1b6-c3b1-466b-8d11-22603fb50c7a,8211a1b6-c3b1-466b-8d11-22603fb50c7a,1,0,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,7e7dfcb5-04eb-40f4-8f4c-f29644e81473,1,0,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,daef68a3-c6c3-450d-b8fd-7af2a2f5572e,1,0,a83cb338-5707-42c9-9e88-11f6c68fcc32,a83cb338-5707-42c9-9e88-11f6c68fcc32,1,0,985106b7-7476-4b48-90ac-ad86876395b5,985106b7-7476-4b48-90ac-ad86876395b5,1,0,0d8db0c9-adbc-478d-997c-3d7feccac99b,0d8db0c9-adbc-478d-997c-3d7feccac99b,1,0,3fd2ef04-c178-47bf-ab62-7baf83236d99,3fd2ef04-c178-47bf-ab62-7baf83236d99,1,0,b4cd1b51-dbc0-4bb0-879e-5ac0d58e78c1,b4cd1b51-dbc0-4bb0-879e-5ac0d58e78c1,1,0,320bf2e6-a3a8-490b-8aa0-21369ffb121b,320bf2e6-a3a8-490b-8aa0-21369ffb121b,1,0,a3bafc54-8fe4-4841-acc6-74a87baf9caf,a3bafc54-8fe4-4841-acc6-74a87baf9caf,1,0,f93741c9-ab94-464b-b0d4-4af99c9f92d5,f93741c9-ab94-464b-b0d4-4af99c9f92d5,1,0,0fddbd8d-12dd-4af1-9e34-feebf4bc38b1,0fddbd8d-12dd-4af1-9e34-feebf4bc38b1,1,0,2e9548a6-1fd8-4430-8864-91bde0d2a7a1,2e9548a6-1fd8-4430-8864-91bde0d2a7a1,1,0,c59fd3f8-c734-49d3-90ba-e608a22ac981,c59fd3f8-c734-49d3-90ba-e608a22ac981,1,0,b26235ed-374c-44ab-8b3c-01d7c4d82d4c,b26235ed-374c-44ab-8b3c-01d7c4d82d4c,1,0,5056db9f-9ebe-4cca-98f0-5f4817a1cba4,5056db9f-9ebe-4cca-98f0-5f4817a1cba4,1,0,475f76ea-f494-41f1-9b65-f39907e5a427,475f76ea-f494-41f1-9b65-f39907e5a427,1,0,986280d1-41bb-4b15-a5ae-516d6a04c1f4,986280d1-41bb-4b15-a5ae-516d6a04c1f4,1,0,43bfd29a-d254-4c33-8639-200b483578c1,43bfd29a-d254-4c33-8639-200b483578c1,1,0,6a274167-7f80-4613-9890-259ffd8ccfc4,6a274167-7f80-4613-9890-259ffd8ccfc4,1,0,4e90e1ab-b1ec-4795-ad45-1db151a5492c,4e90e1ab-b1ec-4795-ad45-1db151a5492c,1,0,91791e56-ca80-4d90-b8a8-16145f6a9721,91791e56-ca80-4d90-b8a8-16145f6a9721,1,0,b242c6a2-5ac9-4edb-b5dd-24eda8162151,b242c6a2-5ac9-4edb-b5dd-24eda8162151,1,0,8d080f3c-06ed-48bf-9709-eea73d676741,8d080f3c-06ed-48bf-9709-eea73d676741,1,0,57b31a5d-9fdc-43d2-ae81-67157822c4b6,57b31a5d-9fdc-43d2-ae81-67157822c4b6,1,0,d4e2da66-9a70-459f-a873-cb4ad71d17b2,d4e2da66-9a70-459f-a873-cb4ad71d17b2,1,0,a84a91d2-d326-4bf4-82e6-d573ee35d090,a84a91d2-d326-4bf4-82e6-d573ee35d090,1,0,39cbda23-db3f-4ddd-8981-8540247406db,39cbda23-db3f-4ddd-8981-8540247406db,1,0,c8a18d99-62ff-45a4-acb5-48e3310c1b53,c8a18d99-62ff-45a4-acb5-48e3310c1b53,1,0,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,1,0,fef27478-ddfd-4ad9-8161-148761f29698,fef27478-ddfd-4ad9-8161-148761f29698,1,0,3500c6fa-813a-49dd-a4bf-163500db5b7f,3500c6fa-813a-49dd-a4bf-163500db5b7f,1,0,1d02493a-dd89-4a51-b75e-9c49f9818b95,1d02493a-dd89-4a51-b75e-9c49f9818b95,1,0,2845c5d1-e836-4499-bcae-f3c8fdae75ee,2845c5d1-e836-4499-bcae-f3c8fdae75ee,1,0,fe4e8e4e-9471-4583-b9b3-576007db08ee,fe4e8e4e-9471-4583-b9b3-576007db08ee,1,0,49deaaa8-6d50-4b25-8153-6712d88fb0fb,49deaaa8-6d50-4b25-8153-6712d88fb0fb,1,0,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,1,0,46a06de8-06fd-4b49-835f-4f24b832b3c4,46a06de8-06fd-4b49-835f-4f24b832b3c4,1,0,3845a567-4375-4c3a-af61-5b82674060ab,3845a567-4375-4c3a-af61-5b82674060ab,1,0,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,1,0,a835a3a7-989b-4247-b836-d23bba2f391a,a835a3a7-989b-4247-b836-d23bba2f391a,1,0,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,1,0,9b149c20-9328-4e2d-a34b-95c883ae4dcc,9b149c20-9328-4e2d-a34b-95c883ae4dcc,1,0,dd6fdc0d-49bb-4fa1-aa17-bd9dc38a0992,dd6fdc0d-49bb-4fa1-aa17-bd9dc38a0992,1,0,f8dbf226-ea56-4b15-baf1-a41fceba2a32,f8dbf226-ea56-4b15-baf1-a41fceba2a32,1,0,fc1476f7-26e6-4374-b99b-e515d86c050a,fc1476f7-26e6-4374-b99b-e515d86c050a,1,0,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,1,0,c4753515-a483-453e-a48b-b12d8ef48fd9,c4753515-a483-453e-a48b-b12d8ef48fd9,1,0,2d9048eb-abdf-4980-96ed-788fbb0f4ea7,2d9048eb-abdf-4980-96ed-788fbb0f4ea7,1,0,98c3bc52-2351-460c-8b8e-0d3f45ca3131,98c3bc52-2351-460c-8b8e-0d3f45ca3131,1,0,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,b1ff31b9-c9f2-4be4-ac9a-62faa1d1eb81,1,0,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,c14ea7a0-1fb6-4d54-82d6-7f12f11b0c0b,1,0,29645810-44aa-402c-9561-7819d6f4a7ab,29645810-44aa-402c-9561-7819d6f4a7ab,1,0,46bf4911-5200-44ac-9b4d-eb0089c12e34,46bf4911-5200-44ac-9b4d-eb0089c12e34,1,0,6e1685bd-7269-401c-b36e-def6a36b41d5,6e1685bd-7269-401c-b36e-def6a36b41d5,1,0,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,9d77103a-9921-4f6c-98fc-d7f42f0f2d8d,1,0,e03b6592-b597-4795-a78e-775d4f2258db,e03b6592-b597-4795-a78e-775d4f2258db,1,0,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,6ae9e86a-a42f-4de0-a891-6abe1ed16cdd,1,0,3b207d5f-6584-4cf2-9173-20235484f9f4,3b207d5f-6584-4cf2-9173-20235484f9f4,1,0,878d9efe-b0e7-487f-b8f7-83470c131e09,878d9efe-b0e7-487f-b8f7-83470c131e09,1,0,8270573d-8ed6-449d-853b-462d2dabaaa9,8270573d-8ed6-449d-853b-462d2dabaaa9,1,0,baeec6cd-b220-4240-95f2-3a0c1ee06c2e,baeec6cd-b220-4240-95f2-3a0c1ee06c2e,1,0,f2502463-67e4-4bfe-8ad5-fb80aa73975a,f2502463-67e4-4bfe-8ad5-fb80aa73975a,1,0,59e885e6-d978-40c2-95b6-35fc61074fb4,59e885e6-d978-40c2-95b6-35fc61074fb4,1,0,267dc512-9ee1-4bc1-9034-3effb7fb2949,267dc512-9ee1-4bc1-9034-3effb7fb2949,1,0,0f211e73-5be9-4015-93e7-ccf63e793cb6,0f211e73-5be9-4015-93e7-ccf63e793cb6,1,0,6574d8f4-fb97-4a26-b166-711fad63aa07,6574d8f4-fb97-4a26-b166-711fad63aa07,1,0,fb3eddaf-3241-4d59-8314-97a5ae9258c4,fb3eddaf-3241-4d59-8314-97a5ae9258c4,1,0,6528bd7a-bac1-4c8b-9b00-6be01c0121b1,6528bd7a-bac1-4c8b-9b00-6be01c0121b1,1,0,d8601e95-af94-4805-974a-99c539725d74,d8601e95-af94-4805-974a-99c539725d74,1,0,6d98f877-f3bb-4795-9025-2631468a331f,6d98f877-f3bb-4795-9025-2631468a331f,1,0,89b9379d-ace9-48cc-b979-a66fd45aeb1d,89b9379d-ace9-48cc-b979-a66fd45aeb1d,1,0,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,1,0,9767a113-5a42-4749-bf40-0f349e85615d,9767a113-5a42-4749-bf40-0f349e85615d,1,0,a3b0494c-f436-45ea-9577-4c0c86b057c9,a3b0494c-f436-45ea-9577-4c0c86b057c9,1,0,5101c142-b25c-4bef-80e7-7407f2c15c90,5101c142-b25c-4bef-80e7-7407f2c15c90,1,0,6d7872f1-fd54-41c4-8253-5f2b125f31ae,6d7872f1-fd54-41c4-8253-5f2b125f31ae,1,0,0c218200-27a8-4f71-9b09-3632dd453644,0c218200-27a8-4f71-9b09-3632dd453644,1,0,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,1,0,b5d30250-18ab-4af1-b99a-ff5dba334d1f,b5d30250-18ab-4af1-b99a-ff5dba334d1f,1,0,936f1aa5-7516-444b-b451-1162fa5d705f,936f1aa5-7516-444b-b451-1162fa5d705f,1,0,e8d5533e-2669-44f6-9eed-eaedab666d42,e8d5533e-2669-44f6-9eed-eaedab666d42,1,0,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,1,0,9e323b0d-4e3b-45d4-9705-aa30e63014f5,9e323b0d-4e3b-45d4-9705-aa30e63014f5,1,0,5afa798a-958e-4e0c-a380-0104f4c037a7,5afa798a-958e-4e0c-a380-0104f4c037a7,1,0,c0295fd9-c749-41b3-8d0d-6af16f484b1f,c0295fd9-c749-41b3-8d0d-6af16f484b1f,1,0,bd32a863-3090-432d-89c4-356ba86a0bdc,bd32a863-3090-432d-89c4-356ba86a0bdc,1,0,4621bf5a-46b5-4b82-8ae4-cc8e11e81ba0,4621bf5a-46b5-4b82-8ae4-cc8e11e81ba0,1,0,ed5465b4-a556-4078-ab18-49fef2afba2e,ed5465b4-a556-4078-ab18-49fef2afba2e,1,0,7368ab8f-59d5-4270-a43b-0f3e422169ed,7368ab8f-59d5-4270-a43b-0f3e422169ed,1,0,eeb0571b-1b74-4889-b8b5-f94186d692d7,eeb0571b-1b74-4889-b8b5-f94186d692d7,1,0,9ef3b72c-caa3-486b-9917-04c00f6689c1,9ef3b72c-caa3-486b-9917-04c00f6689c1,1,0,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,1,0,9245417f-f247-47ba-a1b4-a17ec2e8776c,9245417f-f247-47ba-a1b4-a17ec2e8776c,1,0,a4b721d7-b119-47eb-80e0-7db34c83964f,a4b721d7-b119-47eb-80e0-7db34c83964f,1,0,512629d1-e8b7-4f66-b613-b8c0cb9c250b,512629d1-e8b7-4f66-b613-b8c0cb9c250b,1,0,b7cf4684-4432-4658-9c06-b315d470a3a6,b7cf4684-4432-4658-9c06-b315d470a3a6,1,0,d3bc8211-54d8-47dd-aecf-5da72b65195f,d3bc8211-54d8-47dd-aecf-5da72b65195f,1,0,33f11da8-f670-4ec3-9d40-96fce031c60f,33f11da8-f670-4ec3-9d40-96fce031c60f,1,0,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,1,0,f74c2d41-2433-4bed-8aef-adfeed198252,f74c2d41-2433-4bed-8aef-adfeed198252,1,0,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,1,0,56c9703a-751a-4e6c-81f4-a8756fb040e3,56c9703a-751a-4e6c-81f4-a8756fb040e3,1,0,c3a86eec-1ff5-4392-9904-91a12a2e253a,c3a86eec-1ff5-4392-9904-91a12a2e253a,1,0,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,1,0,f02b7246-dae9-4e15-b4cd-b06133664d34,f02b7246-dae9-4e15-b4cd-b06133664d34,1,0,77f20022-17ce-4e00-8a84-015238bce6f3,77f20022-17ce-4e00-8a84-015238bce6f3,1,0,3734619b-7059-4547-8b97-0b3393389d4d,3734619b-7059-4547-8b97-0b3393389d4d,1,0,a30bf95f-aabd-4da0-8287-61e08f9362fb,a30bf95f-aabd-4da0-8287-61e08f9362fb,1,0,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,1,0,4078867c-2972-47f9-bebd-935a6f1cc667,4078867c-2972-47f9-bebd-935a6f1cc667,1,0,8502fe39-c241-4be5-a313-fd887bbbdfa1,8502fe39-c241-4be5-a313-fd887bbbdfa1,1,0,67a71201-13e5-42a3-902f-fb3a59710dfb,67a71201-13e5-42a3-902f-fb3a59710dfb,1,0,3a79a951-a997-4596-ab62-ba376d67725d,3a79a951-a997-4596-ab62-ba376d67725d,1,0,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,1,0,884c28de-434f-440a-8c63-67e659c097ad,884c28de-434f-440a-8c63-67e659c097ad,1,0,92ead3b5-8c55-4e4d-bd47-009e025b22f8,92ead3b5-8c55-4e4d-bd47-009e025b22f8,1,0,50d8e365-aa58-4b60-8992-01943379d485,50d8e365-aa58-4b60-8992-01943379d485,1,0,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,1,0,b3f7f763-bea9-4f59-9450-df95e5c3d89d,b3f7f763-bea9-4f59-9450-df95e5c3d89d,1,0,9111e28e-c1c7-414b-9288-61bd06a04d04,9111e28e-c1c7-414b-9288-61bd06a04d04,1,0,bcd705ba-c9ac-4e73-94b1-7632c0f06c04,bcd705ba-c9ac-4e73-94b1-7632c0f06c04,1,0,fec102ea-a3f6-49b5-b4b8-6884b0654129,fec102ea-a3f6-49b5-b4b8-6884b0654129,1,0,246571fb-38c7-4da6-929d-d8b44bc3437c,246571fb-38c7-4da6-929d-d8b44bc3437c,1,0,047fd6d7-5e30-4184-a09a-6525de526cc7,047fd6d7-5e30-4184-a09a-6525de526cc7,1,0,beb44b02-5d5e-4127-aee7-e184a43a4210,beb44b02-5d5e-4127-aee7-e184a43a4210,1,0,1dedfbc2-9250-4229-a6ea-5e085f33e7c3,1dedfbc2-9250-4229-a6ea-5e085f33e7c3,1,0,e24641ed-3e92-46d7-852b-9958ab7bc520,e24641ed-3e92-46d7-852b-9958ab7bc520,1,0,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,1,0,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,1,0,2c61114f-abd7-4415-8cdf-4fe95d9fe354,2c61114f-abd7-4415-8cdf-4fe95d9fe354,1,0,abd7a766-5cc1-48db-8d29-797e9d666a78,abd7a766-5cc1-48db-8d29-797e9d666a78,1,0,1704b5e3-8e77-4df6-9223-e6e5c41a280d,1704b5e3-8e77-4df6-9223-e6e5c41a280d,1,0,62eca88f-025d-44de-b92c-46cd8bc7e4a1,62eca88f-025d-44de-b92c-46cd8bc7e4a1,1,0,b0dde395-8498-4469-9507-d290798117d7,b0dde395-8498-4469-9507-d290798117d7,1,0,999616ea-0faa-4ae2-9841-6a6997ea6694,999616ea-0faa-4ae2-9841-6a6997ea6694,1,0,c5f91669-13d8-4f0a-a054-2701078da38a,c5f91669-13d8-4f0a-a054-2701078da38a,1,0,34f9872b-e02e-4093-ba06-3cb5b8995850,34f9872b-e02e-4093-ba06-3cb5b8995850,1,0,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,1,0,3afe11f6-7424-4b41-a42f-91db33756fa3,3afe11f6-7424-4b41-a42f-91db33756fa3,1,0,94e68502-adf1-476e-be2f-8418385959fa,94e68502-adf1-476e-be2f-8418385959fa,1,0,bf80ccc5-f907-4e7f-a007-6030c7ba682e,bf80ccc5-f907-4e7f-a007-6030c7ba682e,1,0,134bbd7c-cadd-4395-b7a4-0249dfe7d0b1,134bbd7c-cadd-4395-b7a4-0249dfe7d0b1,1,0,05f1f184-50cb-47c5-b3a8-62be6a9780c1,05f1f184-50cb-47c5-b3a8-62be6a9780c1,1,0,58e92a42-b650-4282-a2b2-2fe2cc0cf50d,58e92a42-b650-4282-a2b2-2fe2cc0cf50d,1,0,8c1a0b0c-3618-4e66-98b8-8b9e7ca63ca2,8c1a0b0c-3618-4e66-98b8-8b9e7ca63ca2,1,0,6cd10bda-0741-4445-9ffa-17182c9c5a58,6cd10bda-0741-4445-9ffa-17182c9c5a58,1,0,5c874c9a-fe67-45a3-a1d3-7ec1d1c55090,5c874c9a-fe67-45a3-a1d3-7ec1d1c55090,1,0,68a623fa-099a-4688-a7e9-444fb42eb650,68a623fa-099a-4688-a7e9-444fb42eb650,1,0,36ed0626-e389-4106-81bc-77462598bb45,36ed0626-e389-4106-81bc-77462598bb45,1,0,faeefd44-4e11-4a7d-8d4e-4dc9c6b60d59,faeefd44-4e11-4a7d-8d4e-4dc9c6b60d59,1,0,737d5b7f-0ee9-46b5-a509-f06b6176a293,737d5b7f-0ee9-46b5-a509-f06b6176a293,1,0,42eb6f71-0ed7-486a-92fb-976d1b46b081,42eb6f71-0ed7-486a-92fb-976d1b46b081,1,0,4a389216-b4c9-4368-af2c-1e51e32671a5,4a389216-b4c9-4368-af2c-1e51e32671a5,1,0,58c3936c-4db0-45c8-a22e-b5dd49a61497,58c3936c-4db0-45c8-a22e-b5dd49a61497,1,0,9aa607bc-5870-436a-bbe1-296560393e3b,9aa607bc-5870-436a-bbe1-296560393e3b,1,0,1635be16-4861-4a7d-babc-4caff448a7f7,1635be16-4861-4a7d-babc-4caff448a7f7,1,0,9e399087-c957-4a7a-ab9d-2b689736caab,9e399087-c957-4a7a-ab9d-2b689736caab,1,0,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,1,0,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,1,0,2b7372be-af0d-464e-8d09-8172229790af,2b7372be-af0d-464e-8d09-8172229790af,1,0,d85346db-be25-4dab-a2db-647c3d40dd17,d85346db-be25-4dab-a2db-647c3d40dd17,1,0,c7bafd34-5b15-42ec-b329-0be3002775ad,c7bafd34-5b15-42ec-b329-0be3002775ad,1,0,6feb2278-9149-47f8-a0ec-eb4bd9f44716,6feb2278-9149-47f8-a0ec-eb4bd9f44716,1,0,c960082b-8c16-4d7b-b7fd-b1f2bfe07e0b,c960082b-8c16-4d7b-b7fd-b1f2bfe07e0b,1,0,cd6770d5-cd3c-47af-bc46-c865993adf63,cd6770d5-cd3c-47af-bc46-c865993adf63,1,0,97ec899d-a2a0-4691-83ff-25b78dd49ef6,97ec899d-a2a0-4691-83ff-25b78dd49ef6,1,0,411db885-f761-44e5-bdd1-9fdf9e741ac1,411db885-f761-44e5-bdd1-9fdf9e741ac1,1,0,9f9936fc-54a0-4812-b12d-2f8f91551440,9f9936fc-54a0-4812-b12d-2f8f91551440,1,0,a5667633-9264-4dfa-9e26-c45e96e61ae3,a5667633-9264-4dfa-9e26-c45e96e61ae3,1,0,2eeea138-481c-4fde-9e8a-709d751cc469,2eeea138-481c-4fde-9e8a-709d751cc469,1,0,43e37533-ed38-4000-a387-5749f8d9aaf3,43e37533-ed38-4000-a387-5749f8d9aaf3,1,0,e93bdb44-64b3-43d8-b15a-c561dbb91974,e93bdb44-64b3-43d8-b15a-c561dbb91974,1,0,a7c7c835-5402-4bdd-a0e3-d21746174d5a,a7c7c835-5402-4bdd-a0e3-d21746174d5a,1,0,07e81872-afac-4720-86b4-91e7bf4a2881,07e81872-afac-4720-86b4-91e7bf4a2881,1,0,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,1,0,845262f8-8208-4c90-98ec-c85dd5734cf0,845262f8-8208-4c90-98ec-c85dd5734cf0,1,0,ad066c0d-4f4c-48af-9cc8-bb835372150a,ad066c0d-4f4c-48af-9cc8-bb835372150a,1,0,a2145e81-239e-4267-8a43-ea3f7babe878,a2145e81-239e-4267-8a43-ea3f7babe878,1,0,39598414-9c1d-46ec-a534-8bd43e622e45,39598414-9c1d-46ec-a534-8bd43e622e45,1,0,b552c510-4fd4-4c16-9022-dc5babcafc52,b552c510-4fd4-4c16-9022-dc5babcafc52,1,0,3892c06d-28f1-4238-a929-201316cac1ed,3892c06d-28f1-4238-a929-201316cac1ed,1,0,c13dea2e-17fa-4a5f-a70f-96e623db8a6b,c13dea2e-17fa-4a5f-a70f-96e623db8a6b,1,0,339e8cba-a92e-42f6-8d00-3b8b56ce3b0f,339e8cba-a92e-42f6-8d00-3b8b56ce3b0f,1,0,d4beb6f3-ed8e-479f-89fd-841c29e8ba45,d4beb6f3-ed8e-479f-89fd-841c29e8ba45,1,0,d003fb4f-a11f-4eea-af75-b3d26560be15,d003fb4f-a11f-4eea-af75-b3d26560be15,1,0,1f587ff1-95a4-4f45-85b4-22bb97011177,1f587ff1-95a4-4f45-85b4-22bb97011177,1,0,567c68fd-74c7-4b6e-9119-56ac8d78073c,567c68fd-74c7-4b6e-9119-56ac8d78073c,1,0,3326bbcb-b277-44db-a252-2448119e8146,3326bbcb-b277-44db-a252-2448119e8146,1,0,61cac5f7-320c-4098-9078-44fadcdeb219,61cac5f7-320c-4098-9078-44fadcdeb219,1,0,304304b1-36a4-42bb-8ab9-b23b59795001,304304b1-36a4-42bb-8ab9-b23b59795001,1,0,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,a22d1a4f-cb7c-4bcc-b258-ecca282fb071,1,0,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,e5beda2c-f4e2-4a6b-a1d0-a877eb0c9f5b,1,0,cd454738-62dd-4f95-af33-b52750678428,cd454738-62dd-4f95-af33-b52750678428,1,0,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,2a479b8f-7569-43d0-8ca3-9001d6ec57f0,1,0,e4abafc6-f859-4d96-9818-5b9bf8d66d69,e4abafc6-f859-4d96-9818-5b9bf8d66d69,1,0,535acd2c-26d2-4f32-9ae6-cc1956317c59,535acd2c-26d2-4f32-9ae6-cc1956317c59,1,0,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,801adeeb-8a7f-44c1-b649-a7dfffc7b65d,1,0,ac4e0868-ba49-46b4-8872-d42483a5591f,ac4e0868-ba49-46b4-8872-d42483a5591f,1,0,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,45e6c4a6-1d63-4b94-a7d2-fbd3fb68061b,1,0,0493dcf1-5f94-41f9-a4c7-a52e12a29068,0493dcf1-5f94-41f9-a4c7-a52e12a29068,1,0,ca4c0299-625a-4b03-be0e-36ffb45c6d08,ca4c0299-625a-4b03-be0e-36ffb45c6d08,1,0,7fa1119b-4321-4b8f-a879-1d940084145a,7fa1119b-4321-4b8f-a879-1d940084145a,1,0,5d9c0841-6ea6-48dc-a53b-9f19894750f8,5d9c0841-6ea6-48dc-a53b-9f19894750f8,1,0,86b5303b-d967-4bc6-b2da-066c5a58613f,86b5303b-d967-4bc6-b2da-066c5a58613f,1,0,853b824d-9377-475f-913e-d02bd60f5f64,853b824d-9377-475f-913e-d02bd60f5f64,1,0,ee1f8545-ea64-41de-a29a-2d40e15d4f16,ee1f8545-ea64-41de-a29a-2d40e15d4f16,1,0,25ba3c5d-ace1-43cd-987f-68364b9b6970,25ba3c5d-ace1-43cd-987f-68364b9b6970,1,0,75ec7461-ec33-417a-bdb8-6337a8d08fb4,75ec7461-ec33-417a-bdb8-6337a8d08fb4,1,0,b8f5019e-b53f-4508-a042-bbadda2d1fd4,b8f5019e-b53f-4508-a042-bbadda2d1fd4,1,0,b250d233-70a0-4baf-8b7d-6e1d414a11b9,b250d233-70a0-4baf-8b7d-6e1d414a11b9,1,0,d5a73869-381e-4878-8db7-596643937202,d5a73869-381e-4878-8db7-596643937202,1,0,0c5e261f-961e-4780-877a-06589400b88a,0c5e261f-961e-4780-877a-06589400b88a,1,0,4599ef83-5f1e-44af-ae0c-67988656a99e,4599ef83-5f1e-44af-ae0c-67988656a99e,1,0,acb0d7eb-2ed9-4419-b79d-7dc661d70c30,acb0d7eb-2ed9-4419-b79d-7dc661d70c30,1,0,e1b94dcf-ec37-4b2d-a7af-120eeee40944,e1b94dcf-ec37-4b2d-a7af-120eeee40944,1,0,7d2a37b1-a1a0-435a-846a-95e255655044,7d2a37b1-a1a0-435a-846a-95e255655044,1,0,109db64c-00dc-490e-99a5-4430d9344e99,109db64c-00dc-490e-99a5-4430d9344e99,1,0,85837a55-fed5-4b7b-a622-30d728b9a677,85837a55-fed5-4b7b-a622-30d728b9a677,1,0,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,1,0,6ede8b5c-7df0-44a5-9136-8109bbd8b5a9,6ede8b5c-7df0-44a5-9136-8109bbd8b5a9,1,0,325bacdd-793f-47d8-b987-57e9d5f2782b,325bacdd-793f-47d8-b987-57e9d5f2782b,1,0,da9821c3-4b16-48b7-9088-d3cf8ac536a6,da9821c3-4b16-48b7-9088-d3cf8ac536a6,1,0,fb36c775-1124-4ba6-8af8-133bf66fcb54,fb36c775-1124-4ba6-8af8-133bf66fcb54,1,0,51f9aff4-71da-4b1b-b48b-04122a17d855,51f9aff4-71da-4b1b-b48b-04122a17d855,1,0,d5142574-a040-4dd0-a482-cdc61c1d86ab,d5142574-a040-4dd0-a482-cdc61c1d86ab,1,0,62957889-503f-4923-a372-29776dc3b5e5,62957889-503f-4923-a372-29776dc3b5e5,1,0,778e79ee-eb1a-4d52-8a31-58e781c78fe4,778e79ee-eb1a-4d52-8a31-58e781c78fe4,1,0,90385850-d37b-4b2e-ac87-95c17f32197c,90385850-d37b-4b2e-ac87-95c17f32197c,1,0,f480ac52-e2f1-4ed0-a0b1-20a622f77302,f480ac52-e2f1-4ed0-a0b1-20a622f77302,1,0,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,1,0,b9b0fbdc-8fda-46d1-bb3e-561a03604971,b9b0fbdc-8fda-46d1-bb3e-561a03604971,1,0,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,1,0,672c2936-9771-4e32-a970-7ac7f12a21e8,672c2936-9771-4e32-a970-7ac7f12a21e8,1,0,73afaad8-dfa9-43e3-bdaf-543c3545d788,73afaad8-dfa9-43e3-bdaf-543c3545d788,1,0,c264441d-4805-4968-baa2-37b8970049c7,c264441d-4805-4968-baa2-37b8970049c7,1,0,4f0bda80-2246-43be-95f8-ae8480682cd5,4f0bda80-2246-43be-95f8-ae8480682cd5,1,0,ac4fa2a4-93a1-4aa6-986a-5f576457fc8a,ac4fa2a4-93a1-4aa6-986a-5f576457fc8a,1,0,6f683f46-9eef-4e78-bc2f-7174238bf53c,6f683f46-9eef-4e78-bc2f-7174238bf53c,1,0,7d1ed38b-98cf-4a0e-a605-680bb580d904,7d1ed38b-98cf-4a0e-a605-680bb580d904,1,0,b769eda0-11de-401c-a68b-4fce4555d4fc,b769eda0-11de-401c-a68b-4fce4555d4fc,1,0,fd7a668f-3099-4e15-956a-92c6295dd4d5,fd7a668f-3099-4e15-956a-92c6295dd4d5,1,0,afcbd830-ec5f-4865-a176-ea3014dff908,afcbd830-ec5f-4865-a176-ea3014dff908,1,0,dc5fc801-14e4-42e8-b396-76eb30b69eea,dc5fc801-14e4-42e8-b396-76eb30b69eea,1,0,f36150de-33af-4410-8a4c-8c9f4b545793,f36150de-33af-4410-8a4c-8c9f4b545793,1,0,62f97480-7d4a-48f3-9d1d-612909b242c9,62f97480-7d4a-48f3-9d1d-612909b242c9,1,0,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,1,0,3068be84-a401-4701-8ac9-411fae130f84,3068be84-a401-4701-8ac9-411fae130f84,1,0,957394a7-e5b8-47fc-8680-1e71efe2be7d,957394a7-e5b8-47fc-8680-1e71efe2be7d,1,0,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,1,0,4f25ef45-c8d9-401d-b0e8-2217ac310f04,4f25ef45-c8d9-401d-b0e8-2217ac310f04,1,0,504ca240-b5ae-433e-ae5f-d818263eea23,504ca240-b5ae-433e-ae5f-d818263eea23,1,0,32461819-9437-417d-8d1e-851c9a2dcee2,32461819-9437-417d-8d1e-851c9a2dcee2,1,0,74228950-8a4b-4dd6-a053-8650de202521,74228950-8a4b-4dd6-a053-8650de202521,1,0,6b9ce91e-08b9-4972-9878-1724c67b68ec,6b9ce91e-08b9-4972-9878-1724c67b68ec,1,0,640814f2-6082-475e-8006-25fd5b24afdb,640814f2-6082-475e-8006-25fd5b24afdb,1,0,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,1,0,569047c2-0879-4fba-a814-44812d21043b,569047c2-0879-4fba-a814-44812d21043b,1,0,f1b66ea8-262d-4b38-a039-b83a843f6ee8,f1b66ea8-262d-4b38-a039-b83a843f6ee8,1,0,bcae6e05-f1fd-413e-9eef-2e1cee42a962,bcae6e05-f1fd-413e-9eef-2e1cee42a962,1,0,40da1bca-ebb3-4c64-bf54-1f37b71d47b6,40da1bca-ebb3-4c64-bf54-1f37b71d47b6,1,0,778b4c8f-7a1e-4b4b-9f68-12cbf52bf195,778b4c8f-7a1e-4b4b-9f68-12cbf52bf195,1,0,91562fe8-e630-4bcb-a14e-c0e1e129141a,91562fe8-e630-4bcb-a14e-c0e1e129141a,1,0,c261abfd-3828-47b5-aa32-dfdd3a1636ad,c261abfd-3828-47b5-aa32-dfdd3a1636ad,1,0,e9aa6dab-0d96-42ce-9bd6-b8b10d755f8c,e9aa6dab-0d96-42ce-9bd6-b8b10d755f8c,1,0,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,1,0,9155c95b-6afb-41bb-bd0b-d37e503fc163,9155c95b-6afb-41bb-bd0b-d37e503fc163,1,0,d917c19e-be15-41cc-9c8a-a97c8de85309,d917c19e-be15-41cc-9c8a-a97c8de85309,1,0,5e33e655-2847-4237-87ff-74775fd36756,5e33e655-2847-4237-87ff-74775fd36756,1,0,f0907d81-656e-4dfb-81d8-14a8847cb38a,f0907d81-656e-4dfb-81d8-14a8847cb38a,1,0,0e3c6508-caa3-43ef-9647-0e3b96955898,0e3c6508-caa3-43ef-9647-0e3b96955898,1,0,ceb18abf-0390-450c-9e4c-cab9e43eb2e8,ceb18abf-0390-450c-9e4c-cab9e43eb2e8,1,0,1b1fa685-dccb-4d0f-ac01-adc6febf7f15,1b1fa685-dccb-4d0f-ac01-adc6febf7f15,1,0,47907538-9357-4885-8b50-17f2e16c260f,47907538-9357-4885-8b50-17f2e16c260f,1,0,17e1840f-fef3-4f17-8476-273e6af24cb4,17e1840f-fef3-4f17-8476-273e6af24cb4,1,0,a64566fa-b706-49bc-8277-4531145c400e,a64566fa-b706-49bc-8277-4531145c400e,1,0,a8f32b13-249c-4ce6-a521-f06a87f2e670,a8f32b13-249c-4ce6-a521-f06a87f2e670,1,0,815775e4-cfb7-495b-87c4-d134b90d93d4,815775e4-cfb7-495b-87c4-d134b90d93d4,1,0,e867f2f1-0550-4d15-9e40-ba36c9aabfbd,e867f2f1-0550-4d15-9e40-ba36c9aabfbd,1,0,8bdbb9ef-3a91-4374-b3c5-9447005bb1b7,8bdbb9ef-3a91-4374-b3c5-9447005bb1b7,1,0,7a27b378-89ac-4cad-8c69-a0cd14812d7e,7a27b378-89ac-4cad-8c69-a0cd14812d7e,1,0,d2433a11-8e1d-4e4c-966d-37cde6283f72,d2433a11-8e1d-4e4c-966d-37cde6283f72,1,0,59eb5919-3c33-48bf-b322-ec78018e4142,59eb5919-3c33-48bf-b322-ec78018e4142,1,0,63f308a5-b955-48a5-8052-50c5bede65d0,63f308a5-b955-48a5-8052-50c5bede65d0,1,0,1b614b97-5c1d-497a-9574-40114059f836,1b614b97-5c1d-497a-9574-40114059f836,1,0,477dfea4-e401-4cf0-b0a8-2df7c3836c58,477dfea4-e401-4cf0-b0a8-2df7c3836c58,1,0,294c000f-6979-4ed1-bbc7-7402facd9185,294c000f-6979-4ed1-bbc7-7402facd9185,1,0,db607fbc-f785-47d5-9550-577424aa3fe9,db607fbc-f785-47d5-9550-577424aa3fe9,1,0,b7111ddf-a623-4bae-90aa-636148492ca2,b7111ddf-a623-4bae-90aa-636148492ca2,1,0,905d9dcd-5793-4362-8fe8-2edce8c35e32,905d9dcd-5793-4362-8fe8-2edce8c35e32,1,0,a96cb6fd-54e0-4514-9210-7f4636acd336,a96cb6fd-54e0-4514-9210-7f4636acd336,1,0,3580e7a7-95d1-4a8e-bc12-a1449fe03757,3580e7a7-95d1-4a8e-bc12-a1449fe03757,1,0,13759790-6c70-4323-9321-a68b90c51663,13759790-6c70-4323-9321-a68b90c51663,1,0,d9704b20-c29c-4e7f-b777-0ac9080a5631,d9704b20-c29c-4e7f-b777-0ac9080a5631,1,0,c1372891-0f55-4868-ab97-906eff52be0e,c1372891-0f55-4868-ab97-906eff52be0e,1,0,33e96bda-1708-4ee4-8d4d-3b919bda3e38,33e96bda-1708-4ee4-8d4d-3b919bda3e38,1,0,53fb35a7-44ab-42e7-8dba-6fa08bf5ba2c,53fb35a7-44ab-42e7-8dba-6fa08bf5ba2c,1,0,93fcaa62-2a19-468b-9128-c7930583fbfd,93fcaa62-2a19-468b-9128-c7930583fbfd,1,0,2d885109-4c96-41c0-a996-785bfd793c2d,2d885109-4c96-41c0-a996-785bfd793c2d,1,0,e870a1bd-0c08-4d1e-832a-357922983c19,e870a1bd-0c08-4d1e-832a-357922983c19,1,0,9f71aeac-f889-40dc-91bd-d670da4efd2b,9f71aeac-f889-40dc-91bd-d670da4efd2b,1,0,62f8a9b2-9e56-4d5c-a7e2-a85f5b27a5b7,62f8a9b2-9e56-4d5c-a7e2-a85f5b27a5b7,1,0,614ef0bd-3298-408b-bf71-37df8ee60702,614ef0bd-3298-408b-bf71-37df8ee60702,1,0,26ff1be6-f72a-456a-9dce-302029752603,26ff1be6-f72a-456a-9dce-302029752603,1,0,db850a08-0c99-4a57-9b04-38be64bd38fb,db850a08-0c99-4a57-9b04-38be64bd38fb,1,0,abeca127-5ae9-46af-a5e8-d6438fd68367,abeca127-5ae9-46af-a5e8-d6438fd68367,1,0,bce81631-9f6d-42b3-b4b6-2199afb08f2f,bce81631-9f6d-42b3-b4b6-2199afb08f2f,1,0,67d6878f-3e47-4142-8f98-c5a207f0b8a8,67d6878f-3e47-4142-8f98-c5a207f0b8a8,1,0,7f4b872f-0e50-49dd-984d-f5fc3ac3f2f0,7f4b872f-0e50-49dd-984d-f5fc3ac3f2f0,1,0,68636657-4d46-4c2a-9b2f-11521a55dfb4,68636657-4d46-4c2a-9b2f-11521a55dfb4,1,0,18a83f43-dc84-4f8a-9580-681b19f571c4,18a83f43-dc84-4f8a-9580-681b19f571c4,1,0,01c588b0-d0ce-4978-b04d-084e6a00fcc7,01c588b0-d0ce-4978-b04d-084e6a00fcc7,1,0,a23642d9-8c4f-44a5-8865-bfb286e47c55,a23642d9-8c4f-44a5-8865-bfb286e47c55,1,0,7b37e038-dcef-41e1-b6e7-ed73c6958415,7b37e038-dcef-41e1-b6e7-ed73c6958415,1,0,24df2d14-5ebf-4ded-ba14-5daee7a0c536,24df2d14-5ebf-4ded-ba14-5daee7a0c536,1,0,13d6e2e9-b268-4c1b-8b8b-30c5296cfe4c,13d6e2e9-b268-4c1b-8b8b-30c5296cfe4c,1,0,03bb028a-ee8c-411e-8382-653046f803c6,03bb028a-ee8c-411e-8382-653046f803c6,1,0,c4fa80ca-32d6-4a44-9fe2-7ffd67e1cb30,c4fa80ca-32d6-4a44-9fe2-7ffd67e1cb30,1,0,8aa73dfd-41ac-4f79-bf73-cd2da51b1232,8aa73dfd-41ac-4f79-bf73-cd2da51b1232,1,0,38d5ed93-133b-44fe-827a-69a6cfc0461d,38d5ed93-133b-44fe-827a-69a6cfc0461d,1,0,cae8a6f2-bbe9-4b73-b839-9bf8e5e2818d,cae8a6f2-bbe9-4b73-b839-9bf8e5e2818d,1,0,0a79ee40-e6d6-4dbf-8378-98c2ec1e8ef9,0a79ee40-e6d6-4dbf-8378-98c2ec1e8ef9,1,0,5148d263-de26-4c92-b090-ae59f42dfb05,5148d263-de26-4c92-b090-ae59f42dfb05,1,0,dbefe81f-85cf-4d84-9600-b359598c2543,dbefe81f-85cf-4d84-9600-b359598c2543,1,0,1a624a06-93b8-4d1f-8c14-2061e1e7927c,1a624a06-93b8-4d1f-8c14-2061e1e7927c,1,0,4ad54ca8-8e4a-4a35-9537-0395851fcdfb,4ad54ca8-8e4a-4a35-9537-0395851fcdfb,1,0,3e427c09-79ed-45f7-b4c9-d9aa7ccc01b2,3e427c09-79ed-45f7-b4c9-d9aa7ccc01b2,1,0,1a4dd1f5-c2d6-4e06-b428-ab7870810bf3,1a4dd1f5-c2d6-4e06-b428-ab7870810bf3,1,0,d5967e0f-03cd-4190-a702-7e9290eae1eb,d5967e0f-03cd-4190-a702-7e9290eae1eb,1,0,78fdbce8-8479-4edd-89c0-1bbaf8ffd482,78fdbce8-8479-4edd-89c0-1bbaf8ffd482,1,0,8eb18de5-8283-4d0c-bb11-b882e78181d5,8eb18de5-8283-4d0c-bb11-b882e78181d5,1,0,27b27cc5-d1ad-4a2a-bcf4-ec2ebb3eba43,27b27cc5-d1ad-4a2a-bcf4-ec2ebb3eba43,1,0,7059b117-714c-4710-aebe-76f88c4d41d5,7059b117-714c-4710-aebe-76f88c4d41d5,1,0,ea050453-4947-40dc-aa2a-503ddd1a235a,ea050453-4947-40dc-aa2a-503ddd1a235a,1,0,37d0e6d4-702e-46f5-ae87-4d393fa0c701,37d0e6d4-702e-46f5-ae87-4d393fa0c701,1,0,1e963c1e-f914-46e1-81d3-90d126fc6f8d,1e963c1e-f914-46e1-81d3-90d126fc6f8d,1,0,3a62d88e-9298-42c0-bd87-c749ecd01d19,3a62d88e-9298-42c0-bd87-c749ecd01d19,1,0,abbf064e-c6ea-4712-930b-a9fef42e0ee1,abbf064e-c6ea-4712-930b-a9fef42e0ee1,1,0,fc13dd80-ce44-4ed1-a9d7-dae44602b954,fc13dd80-ce44-4ed1-a9d7-dae44602b954,1,0,a3fe224e-c3ef-4e30-90e4-c4ed5eb11824,a3fe224e-c3ef-4e30-90e4-c4ed5eb11824,1,0,433b23a1-a863-4775-b2f2-1384e8f3cbbb,433b23a1-a863-4775-b2f2-1384e8f3cbbb,1,0,a1677c47-b9a4-427a-972d-9bb2293445b6,a1677c47-b9a4-427a-972d-9bb2293445b6,1,0,e4a328c0-e73b-465d-ae36-38e5a71690fa,e4a328c0-e73b-465d-ae36-38e5a71690fa,1,0,bf66612b-aec4-414b-bee6-9bcab145c7cc,bf66612b-aec4-414b-bee6-9bcab145c7cc,1,0,811f356f-554a-4a63-90b6-dedb5fec7c05,811f356f-554a-4a63-90b6-dedb5fec7c05,1,0,85bebd81-a355-4010-889b-cff6f72dafcb,85bebd81-a355-4010-889b-cff6f72dafcb,1,0,49521f36-fd1b-47dd-81cc-48b6fb651e22,49521f36-fd1b-47dd-81cc-48b6fb651e22,1,0,1491cc2a-b3be-4bcc-a181-ce68d4b5d4cb,1491cc2a-b3be-4bcc-a181-ce68d4b5d4cb,1,0,bc946e21-53bb-4332-8c63-7b0aa78826eb,bc946e21-53bb-4332-8c63-7b0aa78826eb,1,0,4be2bdad-9a43-4593-acbc-a02e9144a89f,4be2bdad-9a43-4593-acbc-a02e9144a89f,1,0,64a86d5d-f925-45ee-82da-76df1cc20729,64a86d5d-f925-45ee-82da-76df1cc20729,1,0,eb4455f2-a5a0-44fb-8302-7312bc32df66,eb4455f2-a5a0-44fb-8302-7312bc32df66,1,0,cd6d2ab5-8e5c-4db3-8c8c-0526046a9b68,cd6d2ab5-8e5c-4db3-8c8c-0526046a9b68,1,0,9f20e59e-7db8-466f-b965-7045fc3f1489,9f20e59e-7db8-466f-b965-7045fc3f1489,1,0,cb057756-d3f7-4c50-a9d0-bac9ca2abd46,cb057756-d3f7-4c50-a9d0-bac9ca2abd46,1,0,89ac3d39-1915-4e67-a4e4-5a67a155cb75,89ac3d39-1915-4e67-a4e4-5a67a155cb75,1,0,d27b637d-5a51-49ff-bf73-343891534586,d27b637d-5a51-49ff-bf73-343891534586,1,0,b5a073a2-54e2-47c9-b533-f75fd2c9f343,b5a073a2-54e2-47c9-b533-f75fd2c9f343,1,0,0c8571be-f9b6-4292-add9-980cfe7fa2ec,0c8571be-f9b6-4292-add9-980cfe7fa2ec,1,0,989b8ccd-bc05-48c1-9969-b3733028b65f,989b8ccd-bc05-48c1-9969-b3733028b65f,1,0,6c70b13d-f9d0-459f-8d38-c01c11f356f1,6c70b13d-f9d0-459f-8d38-c01c11f356f1,1,0,45ca19df-90f3-4143-a659-bc0cb97efee9,45ca19df-90f3-4143-a659-bc0cb97efee9,1,0,bbaed1bd-0eb7-4f2b-b844-ab79c1d0a091,bbaed1bd-0eb7-4f2b-b844-ab79c1d0a091,1,0,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,1,0,83ae9b22-20ff-4e94-9282-19daf2274328,83ae9b22-20ff-4e94-9282-19daf2274328,1,0,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,1,0,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,1,0,a92b2b70-7e69-49d1-b921-c9d1b0718f94,a92b2b70-7e69-49d1-b921-c9d1b0718f94,1,0,d57a3300-0f9f-4fe5-b627-01c96b723053,d57a3300-0f9f-4fe5-b627-01c96b723053,1,0,19f690a3-d27b-43c1-94b7-585fc628da05,19f690a3-d27b-43c1-94b7-585fc628da05,1,0,d375fac5-098c-42b5-a0bd-9a4ae7516ada,d375fac5-098c-42b5-a0bd-9a4ae7516ada,1,0,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,1,0,ce65563d-03dc-46d8-96d4-c2d4ae2a2960,ce65563d-03dc-46d8-96d4-c2d4ae2a2960,1,0,5079f17e-dfd6-43f4-83fa-6ac408e5bd3b,5079f17e-dfd6-43f4-83fa-6ac408e5bd3b,1,0,7a4346c3-f1aa-4ce0-886e-76cd9abf563c,7a4346c3-f1aa-4ce0-886e-76cd9abf563c,1,0,cf783265-a4cb-436f-963a-1ff8220ae246,cf783265-a4cb-436f-963a-1ff8220ae246,1,0,3560f949-48f9-4fca-9fe2-81efc1ec0eee,3560f949-48f9-4fca-9fe2-81efc1ec0eee,1,0,662078f0-b75d-4c44-896f-7b7f74fd1ed4,662078f0-b75d-4c44-896f-7b7f74fd1ed4,1,0,4fa11304-fbd4-4c90-909d-5024283a6868,4fa11304-fbd4-4c90-909d-5024283a6868,1,0,207290c2-5221-48ad-99aa-bb0f7955df3f,207290c2-5221-48ad-99aa-bb0f7955df3f,1,0,162137ef-dea2-4ace-9e67-897dad0e7c3d,162137ef-dea2-4ace-9e67-897dad0e7c3d,1,0,d91a016e-cca9-4976-9c53-2c96fa95cf1a,d91a016e-cca9-4976-9c53-2c96fa95cf1a,1,0,012fb2f1-1c15-4800-8968-78a90c2a1348,012fb2f1-1c15-4800-8968-78a90c2a1348,1,0,a29a36aa-3c90-4be9-8ffc-20237721d1d0,a29a36aa-3c90-4be9-8ffc-20237721d1d0,1,0,aec8f9e6-d177-45f5-ba55-2d662428c2ae,aec8f9e6-d177-45f5-ba55-2d662428c2ae,1,0,b0bf8af5-d824-459c-bc40-17495406af3c,b0bf8af5-d824-459c-bc40-17495406af3c,1,0,7dfdd08b-7cd9-480c-829d-97f5e7152eec,7dfdd08b-7cd9-480c-829d-97f5e7152eec,1,0,64752b64-80ae-4537-986a-d61423dc546b,64752b64-80ae-4537-986a-d61423dc546b,1,0,2c37e123-ea35-4501-93e1-2fa295444bec,2c37e123-ea35-4501-93e1-2fa295444bec,1,0,c8bd3ac8-3b49-46bb-aadd-7270ad2868fc,c8bd3ac8-3b49-46bb-aadd-7270ad2868fc,1,0,a997a430-3ea8-4fde-9f53-7b507a04c215,a997a430-3ea8-4fde-9f53-7b507a04c215,1,0,f648e19d-026b-4fa7-8e70-1866b27b94f8,f648e19d-026b-4fa7-8e70-1866b27b94f8,1,0,d32081fc-47d3-4e66-837e-705c94ba8ca8,d32081fc-47d3-4e66-837e-705c94ba8ca8,1,0,69c207c2-7699-4467-b127-286ecd6d0f29,69c207c2-7699-4467-b127-286ecd6d0f29,1,0,e33df42d-4c64-4475-8294-6b05ecdb4e02,e33df42d-4c64-4475-8294-6b05ecdb4e02,1,0,6094a0ed-2051-4649-ad75-dfeb389d3cbb,6094a0ed-2051-4649-ad75-dfeb389d3cbb,1,0,6944a7e2-b9a1-492f-a6f2-9bf31d97ec78,6944a7e2-b9a1-492f-a6f2-9bf31d97ec78,1,0,f3750ea4-5f9e-4ab3-9495-3f182ecff407,f3750ea4-5f9e-4ab3-9495-3f182ecff407,1,0,14002d51-87d4-4647-92ef-a9b1935cb666,14002d51-87d4-4647-92ef-a9b1935cb666,1,0,e941a39d-1f3c-4e6e-af17-75f92a15dd40,e941a39d-1f3c-4e6e-af17-75f92a15dd40,1,0,d9bbedcb-4872-4183-83c2-6c2aae9634b0,d9bbedcb-4872-4183-83c2-6c2aae9634b0,1,0,72c695c3-66f6-4aa8-8a39-737ec6967a1d,72c695c3-66f6-4aa8-8a39-737ec6967a1d,1,0,2beef1e0-7a59-407e-b454-ee2ec38ca4b3,2beef1e0-7a59-407e-b454-ee2ec38ca4b3,1,0,b57a1d6f-8375-4d57-a2c1-f53e25318ddb,b57a1d6f-8375-4d57-a2c1-f53e25318ddb,1,0,d5d11480-d5c7-4569-80c1-f872655ff084,d5d11480-d5c7-4569-80c1-f872655ff084,1,0,b1e45d36-08e9-430e-976b-03e6e3320c6a,b1e45d36-08e9-430e-976b-03e6e3320c6a,1,0,b5384eb7-40e4-4437-b96b-eab9b7b5b8f2,b5384eb7-40e4-4437-b96b-eab9b7b5b8f2,1,0,8e21374f-5a65-406c-856d-2040607da4bc,8e21374f-5a65-406c-856d-2040607da4bc,1,0,1b63cbbb-77b1-4e78-a4c7-ddea8ea7294d,1b63cbbb-77b1-4e78-a4c7-ddea8ea7294d,1,0,3e5f5167-8978-4191-b0f6-6a262b848b95,3e5f5167-8978-4191-b0f6-6a262b848b95,1,0,ae3aef9e-df3b-4ebc-912d-2bc581063745,ae3aef9e-df3b-4ebc-912d-2bc581063745,1,0,5c4ecf15-b92d-4610-b2bb-f2331c5c7528,5c4ecf15-b92d-4610-b2bb-f2331c5c7528,1,0,a8c09e65-6e10-4772-b264-6ead83d52fe3,a8c09e65-6e10-4772-b264-6ead83d52fe3,1,0,256618cc-0956-4cda-9691-e4ced68a791f,256618cc-0956-4cda-9691-e4ced68a791f,1,0,e20593fd-b3e3-41d2-8c8d-97b5d6148fa4,e20593fd-b3e3-41d2-8c8d-97b5d6148fa4,1,0,4b9771a7-b924-4e61-8468-4633e3c54706,4b9771a7-b924-4e61-8468-4633e3c54706,1,0,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,1,0,667de710-cee5-4a97-8434-641d199f3b68,667de710-cee5-4a97-8434-641d199f3b68,1,0,e9a2320b-71a1-4974-8b5a-1990062ec7df,e9a2320b-71a1-4974-8b5a-1990062ec7df,1,0,2e459a7c-c448-4db4-ae21-e59646527030,2e459a7c-c448-4db4-ae21-e59646527030,1,0,891194d9-9f02-4b22-89cd-941181c83ecb,891194d9-9f02-4b22-89cd-941181c83ecb,1,0,a4d3b738-9ae3-46a9-ac21-7ac3d081c727,a4d3b738-9ae3-46a9-ac21-7ac3d081c727,1,0,f6e85eeb-d81b-4526-9a33-ab77bd447236,f6e85eeb-d81b-4526-9a33-ab77bd447236,1,0,470e37fe-d149-4007-b397-12fc84f93041,470e37fe-d149-4007-b397-12fc84f93041,1,0,f8d9068d-8a4e-4b23-b5ca-5b9ddce1f60f,f8d9068d-8a4e-4b23-b5ca-5b9ddce1f60f,1,0,7175cfa0-885c-4807-98ec-af255dcd55d9,7175cfa0-885c-4807-98ec-af255dcd55d9,1,0,1773ff66-ebe4-46e1-b505-d07d87c7fe3e,1773ff66-ebe4-46e1-b505-d07d87c7fe3e,1,0,f5b66759-8102-4cba-a3fd-ee96db5bc809,f5b66759-8102-4cba-a3fd-ee96db5bc809,1,0,6c205eae-9113-46c1-a245-25d29173646e,6c205eae-9113-46c1-a245-25d29173646e,1,0,4cc4aa90-49fb-4602-9f9c-d4d47d223988,4cc4aa90-49fb-4602-9f9c-d4d47d223988,1,0,e0227e4b-be22-4614-8980-5d573fae705d,e0227e4b-be22-4614-8980-5d573fae705d,1,0,66ef1631-277b-4c22-99d7-1434b4dbbb3f,66ef1631-277b-4c22-99d7-1434b4dbbb3f,1,0,7cfa5a37-b9f8-43e4-ae33-e3a7251dd052,7cfa5a37-b9f8-43e4-ae33-e3a7251dd052,1,0,2f8a5b9d-ab86-492b-85d1-5a28535b2ebc,2f8a5b9d-ab86-492b-85d1-5a28535b2ebc,1,0,898535ff-50cd-464a-aadc-5e4f9de15b04,898535ff-50cd-464a-aadc-5e4f9de15b04,1,0,6a25c089-38e8-49ae-b20a-d5f91bb5e1fd,6a25c089-38e8-49ae-b20a-d5f91bb5e1fd,1,0,737f6f1b-9ffc-4916-b378-7321eab1f886,737f6f1b-9ffc-4916-b378-7321eab1f886,1,0,01dedf5b-2cce-4d24-81ea-2e3af82f5794,01dedf5b-2cce-4d24-81ea-2e3af82f5794,1,0,385e209d-65aa-43b1-8591-f92544882740,385e209d-65aa-43b1-8591-f92544882740,1,0,8381bc76-0e0f-4196-9911-ec05730cb1c9,8381bc76-0e0f-4196-9911-ec05730cb1c9,1,0,c224e520-7204-4f4a-aac9-b6221ea9ce44,c224e520-7204-4f4a-aac9-b6221ea9ce44,1,0,771a1900-46be-49fe-a02d-584780de8363,771a1900-46be-49fe-a02d-584780de8363,1,0,f81b1f2d-6fde-4861-8fee-1dbe6acf3985,f81b1f2d-6fde-4861-8fee-1dbe6acf3985,1,0,b62eecf6-6ee3-4a70-a4d6-3f064ae35c43,b62eecf6-6ee3-4a70-a4d6-3f064ae35c43,1,0,9bf2525c-e8fc-44e6-ac14-7df3208dbb0f,9bf2525c-e8fc-44e6-ac14-7df3208dbb0f,1,0,827720ed-a9ec-4573-a91b-71d7a3e02c2a,827720ed-a9ec-4573-a91b-71d7a3e02c2a,1,0,a2faa3f8-5064-4fbf-a90e-26d15c021cd3,a2faa3f8-5064-4fbf-a90e-26d15c021cd3,1,0,527ea8ca-e723-454a-8e9e-f2e7a38e62ee,527ea8ca-e723-454a-8e9e-f2e7a38e62ee,1,0,ef257b20-da10-4cda-8b9d-7de2d68a2f71,ef257b20-da10-4cda-8b9d-7de2d68a2f71,1,0,de0d41b7-acc0-4ebc-8933-d6b5ad351860,de0d41b7-acc0-4ebc-8933-d6b5ad351860,1,0,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,9ef5dd5e-1f26-4187-90a0-a3ac7aaabc1d,1,0,1a354069-07ea-40e0-bbac-e1b6232750c2,1a354069-07ea-40e0-bbac-e1b6232750c2,1,0,df31548b-0b8e-412b-999a-761970ae3c23,df31548b-0b8e-412b-999a-761970ae3c23,1,0,05135747-43e7-4b61-bc30-57b3289ea923,05135747-43e7-4b61-bc30-57b3289ea923,1,0,6d63728d-3384-4131-b890-1b82d14a04b7,6d63728d-3384-4131-b890-1b82d14a04b7,1,0,f4554046-493e-4960-94df-0a8b9d02f474,f4554046-493e-4960-94df-0a8b9d02f474,1,0,06abad33-2d69-4e8b-a16c-8aa0d4422d5a,06abad33-2d69-4e8b-a16c-8aa0d4422d5a,1,0,9222a6c0-b785-4811-bfb6-44ac44a55925,9222a6c0-b785-4811-bfb6-44ac44a55925,1,0,ea84021d-2431-44ad-a446-f1fb979c9e96,ea84021d-2431-44ad-a446-f1fb979c9e96,1,0,d86acdeb-fa70-4d1c-bd0c-1b4ea30c03dd,d86acdeb-fa70-4d1c-bd0c-1b4ea30c03dd,1,0,8fa21575-177f-4b7c-94b5-dfeefe737cb4,8fa21575-177f-4b7c-94b5-dfeefe737cb4,1,0,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,1,0,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,1,0,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,1,0,ecbe625a-55eb-437a-8dee-33fb034d4c0d,ecbe625a-55eb-437a-8dee-33fb034d4c0d,1,0,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,1,0,84796b00-79db-42ba-94d0-5bf543e09cd6,84796b00-79db-42ba-94d0-5bf543e09cd6,1,0,948b10b3-0d7c-4dca-8816-75eb86e7881b,948b10b3-0d7c-4dca-8816-75eb86e7881b,1,0,9de91b5a-98e4-414b-b650-b669b0159b49,9de91b5a-98e4-414b-b650-b669b0159b49,1,0,840dc727-288a-4bf2-8b1a-47629d28229c,840dc727-288a-4bf2-8b1a-47629d28229c,1,0,314ac8ca-8845-40c2-b844-91beb05fb601,314ac8ca-8845-40c2-b844-91beb05fb601,1,0,3de3948d-40ff-4e0d-8445-9bf49c916161,3de3948d-40ff-4e0d-8445-9bf49c916161,1,0,37ae1946-9436-47ef-8b8c-17ed0a24971c,37ae1946-9436-47ef-8b8c-17ed0a24971c,1,0,d844d861-fbe9-4391-89e3-00e505b33b33,d844d861-fbe9-4391-89e3-00e505b33b33,1,0,c0688817-fd73-4ead-b9dd-ec966780a2c2,c0688817-fd73-4ead-b9dd-ec966780a2c2,1,0,b1fbfbfe-766f-4018-9491-507748193808,b1fbfbfe-766f-4018-9491-507748193808,1,0,e55dfadb-8e12-4808-ad90-e891a4644548,e55dfadb-8e12-4808-ad90-e891a4644548,1,0,a792b3dc-ac80-492b-bd94-83eb0438ba9f,a792b3dc-ac80-492b-bd94-83eb0438ba9f,1,0,73a093ea-1927-483b-b6f5-8f0cbd253753,73a093ea-1927-483b-b6f5-8f0cbd253753,1,0,345f04c0-0274-4e79-b523-f1fa3cf0d92a,345f04c0-0274-4e79-b523-f1fa3cf0d92a,1,0,f3a14787-de1b-4b65-8cb1-bc33a785821c,f3a14787-de1b-4b65-8cb1-bc33a785821c,1,0,b9ba3ce3-9059-4135-9d31-725f01907431,b9ba3ce3-9059-4135-9d31-725f01907431,1,0,4d2b3767-7c96-44a6-bb1b-ab74b103b90e,4d2b3767-7c96-44a6-bb1b-ab74b103b90e,1,0,fc9fc58f-c888-41f0-9f57-70748b21706e,fc9fc58f-c888-41f0-9f57-70748b21706e,1,0,fc761833-aa85-4c6d-a36c-d1ed060e3bb1,fc761833-aa85-4c6d-a36c-d1ed060e3bb1,1,0,f0ba2ff2-b353-4f84-8e45-23e47ee6c1b6,f0ba2ff2-b353-4f84-8e45-23e47ee6c1b6,1,0,bb8bade2-5c1b-49a6-b66f-79a3ebff86f7,bb8bade2-5c1b-49a6-b66f-79a3ebff86f7,1,0,33596560-3d45-4d3e-b6ec-1c22162110ad,33596560-3d45-4d3e-b6ec-1c22162110ad,1,0,d3e82a06-daae-4f4d-b3f8-45a406e31664,d3e82a06-daae-4f4d-b3f8-45a406e31664,1,0,af76c3c9-d8dc-4156-9e10-80ee02fcf4fe,af76c3c9-d8dc-4156-9e10-80ee02fcf4fe,1,0,ac6a184d-1247-4b54-a023-f0d16daa5fe9,ac6a184d-1247-4b54-a023-f0d16daa5fe9,1,0,f9af5fe6-0b4f-4d48-92a4-1f2a29972155,f9af5fe6-0b4f-4d48-92a4-1f2a29972155,1,0,3ca1682d-5ff5-4b2b-96c2-54d2dd5297a9,3ca1682d-5ff5-4b2b-96c2-54d2dd5297a9,1,0,a687d346-73cf-4aea-a4d0-f29824f0f6f1,a687d346-73cf-4aea-a4d0-f29824f0f6f1,1,0,f51fda72-56d9-4b45-a775-a0e1dfbf3a27,f51fda72-56d9-4b45-a775-a0e1dfbf3a27,1,0,8bf73614-81a4-4702-88b9-3c6f2594d204,8bf73614-81a4-4702-88b9-3c6f2594d204,1,0,b8d4410b-f626-41b8-87c8-67102256bae2,b8d4410b-f626-41b8-87c8-67102256bae2,1,0,484eeb5f-12af-4139-a081-4dcac067a712,484eeb5f-12af-4139-a081-4dcac067a712,1,0,44d8556f-5abf-4b8a-bbb1-637642e0ab4e,44d8556f-5abf-4b8a-bbb1-637642e0ab4e,1,0,d8f7ef22-57b4-468a-be46-d5cda556c254,d8f7ef22-57b4-468a-be46-d5cda556c254,1,0,ec61075e-fbcb-494a-b790-81548a212d2b,ec61075e-fbcb-494a-b790-81548a212d2b,1,0,2f3bdc3c-4c5d-4fcb-85bb-932fe1747d98,2f3bdc3c-4c5d-4fcb-85bb-932fe1747d98,1,0,0c444045-302b-4dbd-a9a3-81fd40004948,0c444045-302b-4dbd-a9a3-81fd40004948,1,0,16099d54-e84f-47c5-aaf3-f8ced3cba5e0,16099d54-e84f-47c5-aaf3-f8ced3cba5e0,1,0,1528b799-1c0f-4244-85e8-e738b827934a,1528b799-1c0f-4244-85e8-e738b827934a,1,0,45d79e4d-8c2a-432b-abb8-fb9046abea40,45d79e4d-8c2a-432b-abb8-fb9046abea40,1,0,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,1,0,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,1,0,6da034af-0481-4a3c-aff9-c50ced6f21d4,6da034af-0481-4a3c-aff9-c50ced6f21d4,1,0,d07016c8-7d97-42cd-865b-85b49075adfb,d07016c8-7d97-42cd-865b-85b49075adfb,1,0,491a2337-1bf9-45c1-8ae6-95605ef41992,491a2337-1bf9-45c1-8ae6-95605ef41992,1,0,9202335d-50bb-4282-9438-24c7fb9cf637,9202335d-50bb-4282-9438-24c7fb9cf637,1,0,a62906e5-27f8-4e72-8769-9a3eed6997d7,a62906e5-27f8-4e72-8769-9a3eed6997d7,1,0,6c5d0ac3-6086-434c-812b-1c1158ecc574,6c5d0ac3-6086-434c-812b-1c1158ecc574,1,0,783536d7-c0db-44c9-96e8-58b57804d7c8,783536d7-c0db-44c9-96e8-58b57804d7c8,1,0,a8295435-c2c4-4aff-874b-7412556aa76d,a8295435-c2c4-4aff-874b-7412556aa76d,1,0,f6c4e24b-172b-4ba3-8e3e-988306ade660,f6c4e24b-172b-4ba3-8e3e-988306ade660,1,0,9baab24c-a5a3-46f4-ad17-a28d4a49f851,9baab24c-a5a3-46f4-ad17-a28d4a49f851,1,0,d1952319-0e42-4684-a386-fbe7c24526c2,d1952319-0e42-4684-a386-fbe7c24526c2,1,0,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,1,0,83b47a9d-d44b-4c40-becd-df74f9cb2e91,83b47a9d-d44b-4c40-becd-df74f9cb2e91,1,0,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,1,0,86e2a2eb-160f-4e93-a449-b2f726286d1b,86e2a2eb-160f-4e93-a449-b2f726286d1b,1,0,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,1,0,364184c2-ec71-44be-b40c-ba719b4ab0e1,364184c2-ec71-44be-b40c-ba719b4ab0e1,1,0,7ef46c54-ec0c-4211-a750-e5949956b593,7ef46c54-ec0c-4211-a750-e5949956b593,1,0,04823681-875e-459a-b3cf-051c89527f38,04823681-875e-459a-b3cf-051c89527f38,1,0,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,1,0,38265f08-3301-40d1-b630-a319c983e826,38265f08-3301-40d1-b630-a319c983e826,1,0,5175c496-bac7-4c57-9628-793b727aecd0,5175c496-bac7-4c57-9628-793b727aecd0,1,0,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,1,0,fc42df4a-93f0-461f-acfe-fea09158030f,fc42df4a-93f0-461f-acfe-fea09158030f,1,0,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,9f0a7909-0b97-48a7-964f-a52cb3c19c4e,1,0,6d002aef-00c9-4069-80df-153151218831,6d002aef-00c9-4069-80df-153151218831,1,0,4fec3a6c-5a99-4763-aa07-d5de8712559e,4fec3a6c-5a99-4763-aa07-d5de8712559e,1,0,968a1202-d271-43e0-bfd4-d38e49ceadd4,968a1202-d271-43e0-bfd4-d38e49ceadd4,1,0,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,c80e2ef7-93b6-4cef-806a-2dfcf2fd80e6,1,0,b3b4fbf1-cbf0-4ee2-a490-4d657693479b,b3b4fbf1-cbf0-4ee2-a490-4d657693479b,1,0,ea61e442-273e-4ce4-a806-8090893729ba,ea61e442-273e-4ce4-a806-8090893729ba,1,0,e7100f2b-d169-4635-ab87-7a2225ff12ee,e7100f2b-d169-4635-ab87-7a2225ff12ee,1,0,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,1,0,0dcc537b-76b3-4e73-b060-6cbdcf6345db,0dcc537b-76b3-4e73-b060-6cbdcf6345db,1,0,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,1,0,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,1,0,7601fa7e-079a-4347-abea-e161b2d00783,7601fa7e-079a-4347-abea-e161b2d00783,1,0,ee84cb40-f82d-4558-91be-229d68ad9f4a,ee84cb40-f82d-4558-91be-229d68ad9f4a,1,0,101a7eff-9556-4165-879a-a7c8a852e236,101a7eff-9556-4165-879a-a7c8a852e236,1,0,01775932-3603-4efc-9235-abdb97490dea,01775932-3603-4efc-9235-abdb97490dea,1,0,7637844b-4059-4f8a-8436-b4f4e8cb4f74,7637844b-4059-4f8a-8436-b4f4e8cb4f74,1,0,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,1,0,0ee5b788-61dc-464b-86da-f985df7704b6,0ee5b788-61dc-464b-86da-f985df7704b6,1,0,2375c6a8-9799-4b7c-a48d-091a90c67693,2375c6a8-9799-4b7c-a48d-091a90c67693,1,0,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,1,0,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,1,0,63c6522f-be04-422a-b4f4-0f55f58b09a8,63c6522f-be04-422a-b4f4-0f55f58b09a8,1,0,be919dc1-a377-43e1-82e6-ce946cabdd55,be919dc1-a377-43e1-82e6-ce946cabdd55,1,0,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,1,0,9ded532e-9e60-4895-a4c5-4ea6697aa83c,9ded532e-9e60-4895-a4c5-4ea6697aa83c,1,0,106c5159-ffc7-4059-b3e3-acf74326a44f,106c5159-ffc7-4059-b3e3-acf74326a44f,1,0,d39fd717-1a69-4fd3-889e-4fa9abefea1c,d39fd717-1a69-4fd3-889e-4fa9abefea1c,1,0,5b85e6df-7493-4201-97ad-2aea14de6006,5b85e6df-7493-4201-97ad-2aea14de6006,1,0,061e6c0f-ba52-40ec-96ad-2eba3eee3097,061e6c0f-ba52-40ec-96ad-2eba3eee3097,1,0,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,1,0,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,1,0,4840753b-e2e1-4e67-b35f-2f5eab7754f5,4840753b-e2e1-4e67-b35f-2f5eab7754f5,1,0,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,1,0,6ffd9c17-d90b-4d19-b337-0fbc2c717557,6ffd9c17-d90b-4d19-b337-0fbc2c717557,1,0,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,1,0,3bb83275-7a0e-420f-8c6b-028038f11a8c,3bb83275-7a0e-420f-8c6b-028038f11a8c,1,0,e1950a23-f6e7-48af-b78a-77aa61f08ece,e1950a23-f6e7-48af-b78a-77aa61f08ece,1,0,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,1,0,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,1,0,5d726fa3-bde0-4d97-a577-415857bbb5c1,5d726fa3-bde0-4d97-a577-415857bbb5c1,1,0,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,1,0,49068231-202c-4ac6-a39a-69207cb597dd,49068231-202c-4ac6-a39a-69207cb597dd,1,0,5a470575-e012-42ad-9ad7-53930a8e843f,5a470575-e012-42ad-9ad7-53930a8e843f,1,0,5872d4ed-6503-422d-bcf9-63a8df3e777d,5872d4ed-6503-422d-bcf9-63a8df3e777d,1,0,e21cda29-2579-485e-a207-20b76f719c80,e21cda29-2579-485e-a207-20b76f719c80,1,0,1b232a57-2833-42c6-b318-38dae2af1ab2,1b232a57-2833-42c6-b318-38dae2af1ab2,1,0,007ade8c-b102-408b-b877-b531e046560b,007ade8c-b102-408b-b877-b531e046560b,1,0,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,1,0,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,1,0,eb69c41a-392d-43bb-9b67-a0adcb651b1e,eb69c41a-392d-43bb-9b67-a0adcb651b1e,1,0,93b01c88-48a2-4753-b443-0e9892395a8f,93b01c88-48a2-4753-b443-0e9892395a8f,1,0,0b7f8e05-bb34-47cc-9775-04362e814316,0b7f8e05-bb34-47cc-9775-04362e814316,1,0,e71e0297-3709-4247-933e-18a6350cbf39,e71e0297-3709-4247-933e-18a6350cbf39,1,0,0b32e372-c6ad-4dda-acd1-8b5d58537d37,0b32e372-c6ad-4dda-acd1-8b5d58537d37,1,0,602dac6f-abe6-407a-92d3-7f1613e5dda6,602dac6f-abe6-407a-92d3-7f1613e5dda6,1,0,db03a88b-2804-45c2-9089-7ddb87ef2f18,db03a88b-2804-45c2-9089-7ddb87ef2f18,1,0,df6417d1-c722-4a87-a543-5d2c31795b20,df6417d1-c722-4a87-a543-5d2c31795b20,1,0,526a85c9-3a8d-4044-adb9-fd0689c70601,526a85c9-3a8d-4044-adb9-fd0689c70601,1,0,c4203772-580c-4db1-9bde-8925faa90688,c4203772-580c-4db1-9bde-8925faa90688,1,0,f64a91c4-f5cb-4e8e-8387-9f242ce6de44,f64a91c4-f5cb-4e8e-8387-9f242ce6de44,1,0,9ab0fe18-4dd7-4eed-958d-8537d4896d84,9ab0fe18-4dd7-4eed-958d-8537d4896d84,1,0,2278dc46-46ce-4d00-9289-4de1640782d7,2278dc46-46ce-4d00-9289-4de1640782d7,1,0,1f983a04-c2df-40bb-bee2-b326474d89f8,1f983a04-c2df-40bb-bee2-b326474d89f8,1,0,f03f1b68-e924-4c06-b0aa-8033a9a2f592,f03f1b68-e924-4c06-b0aa-8033a9a2f592,1,0,5e453d10-235d-4e53-86b1-20eed3247992,5e453d10-235d-4e53-86b1-20eed3247992,1,0,0eefb856-0fb4-4c3e-bb08-e88b03a44065,0eefb856-0fb4-4c3e-bb08-e88b03a44065,1,0,21ba8b9f-de97-40a1-8ea1-85a29e8e53ef,21ba8b9f-de97-40a1-8ea1-85a29e8e53ef,1,0,738228ad-c30a-42f4-a6ad-bde0edba6266,738228ad-c30a-42f4-a6ad-bde0edba6266,1,0,c08aea99-ee33-488c-9ba0-f8b24a6d1d04,c08aea99-ee33-488c-9ba0-f8b24a6d1d04,1,0,df8e8344-d7bc-4cf2-b498-88d3abb66c09,df8e8344-d7bc-4cf2-b498-88d3abb66c09,1,0,e6d13536-3021-45b2-a8e1-bdb0e0be850c,e6d13536-3021-45b2-a8e1-bdb0e0be850c,1,0,b49f538c-b2b2-4a1f-a6b4-a911033b1666,b49f538c-b2b2-4a1f-a6b4-a911033b1666,1,0,794e952b-6b03-4a1e-ad3f-453376bccf45,794e952b-6b03-4a1e-ad3f-453376bccf45,1,0,3e2a0713-e6ed-4d38-8036-72f7b62ca64a,3e2a0713-e6ed-4d38-8036-72f7b62ca64a,1,0,5cd997ba-f123-47b3-8cde-fbba45a4a11c,5cd997ba-f123-47b3-8cde-fbba45a4a11c,1,0,0d746247-c4f4-47a5-a373-45ec4023d3ef,0d746247-c4f4-47a5-a373-45ec4023d3ef,1,0,a25bcf4e-1a47-472b-9f93-f6ab45abf461,a25bcf4e-1a47-472b-9f93-f6ab45abf461,1,0,958b7dab-0aba-423f-ab81-b70f2b93a027,958b7dab-0aba-423f-ab81-b70f2b93a027,1,0,a17ec3be-2255-42af-a6ee-d3fb8bb00519,a17ec3be-2255-42af-a6ee-d3fb8bb00519,1,0,add0b22d-ff5a-41f7-88a1-ef34880e50c9,add0b22d-ff5a-41f7-88a1-ef34880e50c9,1,0,4b714d9c-26f4-46e8-ac79-471522b3853b,4b714d9c-26f4-46e8-ac79-471522b3853b,1,0,411489de-f907-4d60-a776-64bb0aa12a0e,411489de-f907-4d60-a776-64bb0aa12a0e,1,0,58d9ba60-a0c7-405d-a76e-0b0a796daaf3,58d9ba60-a0c7-405d-a76e-0b0a796daaf3,1,0,9c47670e-9eb9-49ec-876c-cd545aaa093c,9c47670e-9eb9-49ec-876c-cd545aaa093c,1,0,f57e74e6-75e8-4136-911e-86793036a077,f57e74e6-75e8-4136-911e-86793036a077,1,0,8492ee20-3f15-45d8-b70d-19b5cd6f1ae3,8492ee20-3f15-45d8-b70d-19b5cd6f1ae3,1,0,3ba8c378-ef3d-4646-90b3-6d8078aa623e,3ba8c378-ef3d-4646-90b3-6d8078aa623e,1,0,b96b2e45-8fb3-4d48-ab53-d3bbf6ef0284,b96b2e45-8fb3-4d48-ab53-d3bbf6ef0284,1,0,5ac38b5a-92e5-47eb-b956-24d9f010cb9f,5ac38b5a-92e5-47eb-b956-24d9f010cb9f,1,0,2dd7eb87-8130-425a-be13-85235508cde6,2dd7eb87-8130-425a-be13-85235508cde6,1,0,8a62c997-4fda-4464-90bd-ab719161949f,8a62c997-4fda-4464-90bd-ab719161949f,1,0,28af52dd-3144-428b-956d-b6f27863ec4a,28af52dd-3144-428b-956d-b6f27863ec4a,1,0,c34c330a-991a-4ec9-a0ad-73c04c6a6fc3,c34c330a-991a-4ec9-a0ad-73c04c6a6fc3,1,0,8ac94328-2300-4681-9c35-fd7e2f830310,8ac94328-2300-4681-9c35-fd7e2f830310,1,0,da0ee165-1917-466b-ac5c-16c28e2318bb,da0ee165-1917-466b-ac5c-16c28e2318bb,1,0,4868cb2e-0892-42bc-9de1-73cb8a15a96f,4868cb2e-0892-42bc-9de1-73cb8a15a96f,1,0,e8b80879-33b3-4c45-ad68-1acabcf91faf,e8b80879-33b3-4c45-ad68-1acabcf91faf,1,0,4a87fafc-7ca7-478e-bb31-358c2b85fa92,4a87fafc-7ca7-478e-bb31-358c2b85fa92,1,0,239601eb-e8de-4d58-a32a-01ee52f6e698,239601eb-e8de-4d58-a32a-01ee52f6e698,1,0,11370667-bec5-4a2d-8aa1-97f4d795718f,11370667-bec5-4a2d-8aa1-97f4d795718f,1,0,2032162d-fbb5-4e6a-be72-cda79869b9ff,2032162d-fbb5-4e6a-be72-cda79869b9ff,1,0,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,1,0,10543f9a-4e3f-427a-b36a-9c66709dd6fb,10543f9a-4e3f-427a-b36a-9c66709dd6fb,1,0,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,1,0,96ab5424-7be1-416d-b74d-d0c815726b1f,96ab5424-7be1-416d-b74d-d0c815726b1f,1,0,3714e794-ddef-4ad9-a933-6130bbc84545,3714e794-ddef-4ad9-a933-6130bbc84545,1,0,282b089c-7411-40d6-9a0a-ceaf6abb5586,282b089c-7411-40d6-9a0a-ceaf6abb5586,1,0,678188aa-76e7-49bc-a4be-1c55ccd625b1,678188aa-76e7-49bc-a4be-1c55ccd625b1,1,0,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,1,0,b3415b4a-d8de-4536-aa4b-82e75fd986ee,b3415b4a-d8de-4536-aa4b-82e75fd986ee,1,0,acc996ab-672a-4602-b7ad-8eee83557e61,acc996ab-672a-4602-b7ad-8eee83557e61,1,0,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,1,0,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,1,0,97745768-ed35-44f1-beba-abb8b28a29ae,97745768-ed35-44f1-beba-abb8b28a29ae,1,0,69364942-bcd1-4b06-9b57-fa59b4e7c552,69364942-bcd1-4b06-9b57-fa59b4e7c552,1,0,ab201c5f-4134-42cf-a528-c1c4df02f2d7,ab201c5f-4134-42cf-a528-c1c4df02f2d7,1,0,303fb7b5-6a23-40ea-ae12-b54f4ebae026,303fb7b5-6a23-40ea-ae12-b54f4ebae026,1,0,634cd26b-78f1-4446-8aad-b96ed16e5329,634cd26b-78f1-4446-8aad-b96ed16e5329,1,0,d8e62f1a-92ca-4971-9609-e79da798c083,d8e62f1a-92ca-4971-9609-e79da798c083,1,0,61892a62-9381-401d-af31-9073ef2509fb,61892a62-9381-401d-af31-9073ef2509fb,1,0,eb74ebf0-a9c6-4c4c-b279-5a46f40ea0d3,eb74ebf0-a9c6-4c4c-b279-5a46f40ea0d3,1,0,d5e1806b-9827-40ab-9cfa-23c22456d137,d5e1806b-9827-40ab-9cfa-23c22456d137,1,0,b57b186a-ec1e-46a2-87ae-6ba27793ebf6,b57b186a-ec1e-46a2-87ae-6ba27793ebf6,1,0,d24170d7-5477-4ec8-acd2-0de8bd2067d6,d24170d7-5477-4ec8-acd2-0de8bd2067d6,1,0,f047da82-7574-4da4-b54e-480195280a11,f047da82-7574-4da4-b54e-480195280a11,1,0,a469f018-da26-485f-87c3-f580321a34f0,a469f018-da26-485f-87c3-f580321a34f0,1,0,adcb0dca-d810-461e-8f45-1d3cd6ffad4d,adcb0dca-d810-461e-8f45-1d3cd6ffad4d,1,0,9e16edb6-d841-48fa-bfe1-f9aabdcf9e46,9e16edb6-d841-48fa-bfe1-f9aabdcf9e46,1,0,628de771-c19c-4474-989f-8fb6cd7756a2,628de771-c19c-4474-989f-8fb6cd7756a2,1,0,6b0ddefa-ee70-4b27-989f-e23c734ab943,6b0ddefa-ee70-4b27-989f-e23c734ab943,1,0,ee873280-28ea-41fb-af52-c10c2018cbe4,ee873280-28ea-41fb-af52-c10c2018cbe4,1,0,6789e57b-1293-442c-97d0-b8007367602e,6789e57b-1293-442c-97d0-b8007367602e,1,0,0f193c89-b664-448e-bed3-2147430367f7,0f193c89-b664-448e-bed3-2147430367f7,1,0,4c9b2506-75a8-47d3-a5d5-d946088ba14a,4c9b2506-75a8-47d3-a5d5-d946088ba14a,1,0,36eacaa1-2efd-49c0-82de-2f8972535bf2,36eacaa1-2efd-49c0-82de-2f8972535bf2,1,0,c35a643d-fe3a-4293-93c0-074fa68a31e3,c35a643d-fe3a-4293-93c0-074fa68a31e3,1,0,9f7b9fd8-4bdd-4492-abf7-09b3f7f23e16,9f7b9fd8-4bdd-4492-abf7-09b3f7f23e16,1,0,72ee9a03-a320-4e60-be04-0ee813ea567f,72ee9a03-a320-4e60-be04-0ee813ea567f,1,0,f6f52cc8-23a3-4402-b1eb-0e41584c802a,f6f52cc8-23a3-4402-b1eb-0e41584c802a,1,0,8398e065-8b4b-4901-b057-2a048776bafe,8398e065-8b4b-4901-b057-2a048776bafe,1,0,073c56ca-bf45-422d-957a-f9c57aeee4d0,073c56ca-bf45-422d-957a-f9c57aeee4d0,1,0,d73e084f-9201-40c8-8ad4-f61b6cbb47c9,d73e084f-9201-40c8-8ad4-f61b6cbb47c9,1,0,68598d98-0c59-4cda-b0b2-6901d3aff88b,68598d98-0c59-4cda-b0b2-6901d3aff88b,1,0,219c1375-f26e-4698-aa82-4b9d735df783,219c1375-f26e-4698-aa82-4b9d735df783,1,0,ff5121c1-7f11-48cd-a9df-3588cf9f6d21,ff5121c1-7f11-48cd-a9df-3588cf9f6d21,1,0,32012b27-1b43-49be-b9af-df0c877e7a4c,32012b27-1b43-49be-b9af-df0c877e7a4c,1,0,e97d5152-9e58-4a91-a691-b4d358f1c89d,e97d5152-9e58-4a91-a691-b4d358f1c89d,1,0,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,1,0,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,1,0,296c478b-4103-46cb-9d14-97f59034ffd4,296c478b-4103-46cb-9d14-97f59034ffd4,1,0,fb918a68-f86d-46c0-9078-61d2b32b5aef,fb918a68-f86d-46c0-9078-61d2b32b5aef,1,0,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,1,0,1ddfc773-4f3c-4764-978e-585aab4666de,1ddfc773-4f3c-4764-978e-585aab4666de,1,0,e424d122-1dbb-4545-975c-177997129f2e,e424d122-1dbb-4545-975c-177997129f2e,1,0,c83bc626-dfdd-4451-92b0-b53eed40f534,c83bc626-dfdd-4451-92b0-b53eed40f534,1,0,7b9b1d11-4f78-4113-8fca-1a3a30953aef,7b9b1d11-4f78-4113-8fca-1a3a30953aef,1,0,7f84cb85-c3e4-4b53-b829-3b1e216f978a,7f84cb85-c3e4-4b53-b829-3b1e216f978a,1,0,7e621ecc-7d2b-42bf-a502-f8e59de56b63,7e621ecc-7d2b-42bf-a502-f8e59de56b63,1,0,798fd445-d02e-4e97-890a-0283f33317cf,798fd445-d02e-4e97-890a-0283f33317cf,1,0,095583ca-010d-43ad-8c7a-8938fa4cb761,095583ca-010d-43ad-8c7a-8938fa4cb761,1,0,178d210c-e847-4805-a8d4-31acdf4983af,178d210c-e847-4805-a8d4-31acdf4983af,1,0,aa214d9f-23b1-4996-8a43-9010dceeb53d,aa214d9f-23b1-4996-8a43-9010dceeb53d,1,0,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,1,0,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,1,0,d9d103bd-1dd6-48a9-8869-6c8485705393,d9d103bd-1dd6-48a9-8869-6c8485705393,1,0,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,1,0,ff0e8487-bdbf-4b21-877e-00008c81bc09,ff0e8487-bdbf-4b21-877e-00008c81bc09,1,0,39c9f8ac-56a0-4057-8359-7228bf97184a,39c9f8ac-56a0-4057-8359-7228bf97184a,1,0,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,1,0,2c0dd892-1d3e-4497-850b-080bdb9c59d8,2c0dd892-1d3e-4497-850b-080bdb9c59d8,1,0,3b727d49-c9ed-4d9e-af61-c13b9a170c75,3b727d49-c9ed-4d9e-af61-c13b9a170c75,1,0,1b264744-bdcd-4c5c-932b-0ac4b990dd78,1b264744-bdcd-4c5c-932b-0ac4b990dd78,1,0,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,1,0,37bde288-8e02-4127-bd80-de8ae7590a14,37bde288-8e02-4127-bd80-de8ae7590a14,1,0,a9b8e517-78cd-4428-b2fc-9e16af0069d7,a9b8e517-78cd-4428-b2fc-9e16af0069d7,1,0,5c592024-c009-4674-bbb8-283669e673ef,5c592024-c009-4674-bbb8-283669e673ef,1,0,e76f16b9-77a0-4033-90d0-6e04e4494747,e76f16b9-77a0-4033-90d0-6e04e4494747,1,0,cfb221fc-8639-4e15-9a78-f7837d657a99,cfb221fc-8639-4e15-9a78-f7837d657a99,1,0,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,1,0,022147c1-1ebe-4c8d-b367-4c47115b101d,022147c1-1ebe-4c8d-b367-4c47115b101d,1,0,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,1,0,fca6b230-a38e-4791-9cc5-3d215f79dc6f,fca6b230-a38e-4791-9cc5-3d215f79dc6f,1,0,04e87de4-940a-4533-8c81-8f145b201dc0,04e87de4-940a-4533-8c81-8f145b201dc0,1,0,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,1,0,fa488af9-a5ec-47d8-8661-fa5058a60a6b,fa488af9-a5ec-47d8-8661-fa5058a60a6b,1,0,97cc84c6-3565-474c-a028-83acb5390446,97cc84c6-3565-474c-a028-83acb5390446,1,0,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,1,0,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,1,0,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,1,0,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,1,0,b366d7eb-626c-4c0c-b4cc-c392763e6e94,b366d7eb-626c-4c0c-b4cc-c392763e6e94,1,0,4c7e24aa-726a-4595-82ad-ef1e525b14fa,4c7e24aa-726a-4595-82ad-ef1e525b14fa,1,0,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,1,0,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,1,0,e849e46c-2ce6-427b-92bc-06d7997f59bf,e849e46c-2ce6-427b-92bc-06d7997f59bf,1,0,5a971dc0-28bf-4426-9426-9f456aea080a,5a971dc0-28bf-4426-9426-9f456aea080a,1,0,aed2ceeb-cc0f-4bdc-bb94-2e15cd68aa96,aed2ceeb-cc0f-4bdc-bb94-2e15cd68aa96,1,0,04b5ae71-7fa4-4a64-b406-59dc603b80c5,04b5ae71-7fa4-4a64-b406-59dc603b80c5,1,0,f23a2023-f776-40db-8689-1fc3f7ebc482,f23a2023-f776-40db-8689-1fc3f7ebc482,1,0,1e7684f0-1b3b-4a32-8602-dd0672c5a800,1e7684f0-1b3b-4a32-8602-dd0672c5a800,1,0,ab178a93-8570-43b6-ae42-f34a7cc4f359,ab178a93-8570-43b6-ae42-f34a7cc4f359,1,0,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,1,0,168e3189-2676-4cdb-bc9d-78d85df51faf,168e3189-2676-4cdb-bc9d-78d85df51faf,1,0,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,1,0,470bbff8-20d0-475c-a61a-1a09ac14c2db,470bbff8-20d0-475c-a61a-1a09ac14c2db,1,0,6ea25680-c4db-4717-9498-62420ca16970,6ea25680-c4db-4717-9498-62420ca16970,1,0,14e20d48-635e-4c52-9099-e743323fc190,14e20d48-635e-4c52-9099-e743323fc190,1,0,c37a660e-16c5-495e-9486-e61bcb693fa0,c37a660e-16c5-495e-9486-e61bcb693fa0,1,0,8f44ebad-1160-474e-a566-fb9da55ffcba,8f44ebad-1160-474e-a566-fb9da55ffcba,1,0,11cf336e-7890-4972-bf71-32d7416ff647,11cf336e-7890-4972-bf71-32d7416ff647,1,0,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,1,0,14bd3392-36cd-4ed0-8847-44375d6fb861,14bd3392-36cd-4ed0-8847-44375d6fb861,1,0,759ede7a-e832-44e6-9b11-5bfb3c507820,759ede7a-e832-44e6-9b11-5bfb3c507820,1,0,64484611-b32c-4155-a063-7df5a3f924dd,64484611-b32c-4155-a063-7df5a3f924dd,1,0,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,1,0,821b93bd-f0dd-4468-972a-d9b2b4de72f1,821b93bd-f0dd-4468-972a-d9b2b4de72f1,1,0,56900066-90e3-40c0-b64a-8f7964a4dfc1,56900066-90e3-40c0-b64a-8f7964a4dfc1,1,0,56f0c4d6-9b13-486a-9586-05e657dca8be,56f0c4d6-9b13-486a-9586-05e657dca8be,1,0,c795c0d3-6a0d-4311-9821-df320663727e,c795c0d3-6a0d-4311-9821-df320663727e,1,0,512b8d89-8798-4549-9e79-b9c3f7d9098f,512b8d89-8798-4549-9e79-b9c3f7d9098f,1,0,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,1,0,7f356abf-9045-4a76-89f3-8b52d467122a,7f356abf-9045-4a76-89f3-8b52d467122a,1,0,625a61ac-4ad0-4b31-aa67-9f864154b9c4,625a61ac-4ad0-4b31-aa67-9f864154b9c4,1,0,51fa8d01-44a1-4e75-9b04-6a2504972f08,51fa8d01-44a1-4e75-9b04-6a2504972f08,1,0,73dae482-a1ee-4c57-8859-2dd8e8635a49,73dae482-a1ee-4c57-8859-2dd8e8635a49,1,0,e4ea640f-e3a4-44ad-b17d-51f32136372e,e4ea640f-e3a4-44ad-b17d-51f32136372e,1,0,7dca913d-e37a-4740-8e3d-677d379605ee,7dca913d-e37a-4740-8e3d-677d379605ee,1,0,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,1,0,e62e60ea-9f0c-4a7e-869f-4639f31f826c,e62e60ea-9f0c-4a7e-869f-4639f31f826c,1,0,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,1,0,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,1,0,4cd4694f-17f8-43ba-8940-07628bd937fe,4cd4694f-17f8-43ba-8940-07628bd937fe,1,0,9b9e81f9-e23f-4c77-bf6f-edbce8ebabfa,9b9e81f9-e23f-4c77-bf6f-edbce8ebabfa,1,0,d43438d8-713a-4ceb-b653-1b5d5083ab3b,d43438d8-713a-4ceb-b653-1b5d5083ab3b,1,0,7df6c94b-3cfe-4764-988e-858d733e35d9,7df6c94b-3cfe-4764-988e-858d733e35d9,1,0,8b251c7d-2d55-4734-a1da-7f1115d95080,8b251c7d-2d55-4734-a1da-7f1115d95080,1,0,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,1,0,5a8c3621-595a-4168-8bba-a7f8d499e47e,5a8c3621-595a-4168-8bba-a7f8d499e47e,1,0,fc4cfed6-e492-4420-b357-8143a8c2a41a,fc4cfed6-e492-4420-b357-8143a8c2a41a,1,0,4311a250-64af-443e-a711-93b7c41175cf,4311a250-64af-443e-a711-93b7c41175cf,1,0,804b6c57-1d7b-4927-be5b-84b7959fe55e,804b6c57-1d7b-4927-be5b-84b7959fe55e,1,0,f2655d85-79ea-4736-8f41-94a4f9b2b998,f2655d85-79ea-4736-8f41-94a4f9b2b998,1,0,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,1,0,a8eb5ed9-df99-405b-afad-eeaa98956eee,a8eb5ed9-df99-405b-afad-eeaa98956eee,1,0,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,1,0,26a1279f-91f0-4632-ad7c-21cf2f524208,26a1279f-91f0-4632-ad7c-21cf2f524208,1,0,bf751ed0-ee47-4eaf-81bd-f0da00bef343,bf751ed0-ee47-4eaf-81bd-f0da00bef343,1,0,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,1,0,1f1def7c-e0ee-4963-afea-1751bf1b812c,1f1def7c-e0ee-4963-afea-1751bf1b812c,1,0,9a4c0898-ab56-425c-8191-5ab90f4e12bf,9a4c0898-ab56-425c-8191-5ab90f4e12bf,1,0,6841ec47-7a84-441a-b975-69d089072ce7,6841ec47-7a84-441a-b975-69d089072ce7,1,0,ead4001a-0d8a-4b95-8212-2a40e5aa6659,ead4001a-0d8a-4b95-8212-2a40e5aa6659,1,0,22165c8a-2179-4cd5-b195-bd2721e9e232,22165c8a-2179-4cd5-b195-bd2721e9e232,1,0,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,1,0,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,1,0,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,1,0,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,1,0,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,1,0,9d9debfd-4a10-4f09-9d09-2aa5e058b525,9d9debfd-4a10-4f09-9d09-2aa5e058b525,1,0,fc19586c-d89c-495c-b473-6f85967ed48e,fc19586c-d89c-495c-b473-6f85967ed48e,1,0,2ac7c701-a281-4e77-a5f8-294526021e2d,2ac7c701-a281-4e77-a5f8-294526021e2d,1,0,979df549-889d-496a-b6ce-c56d54c771b5,979df549-889d-496a-b6ce-c56d54c771b5,1,0,91b320d8-3426-44d3-97d7-c200287d7343,91b320d8-3426-44d3-97d7-c200287d7343,1,0,b9297f72-b40a-4adb-9975-bb693d4834a4,b9297f72-b40a-4adb-9975-bb693d4834a4,1,0,41cf3916-216f-4c4e-a587-82777f4263e0,41cf3916-216f-4c4e-a587-82777f4263e0,1,0,2ce3a350-86f1-4275-8299-3c3693ca11fa,2ce3a350-86f1-4275-8299-3c3693ca11fa,1,0,59f0ed15-c84c-4f41-bdd4-26317e4e914d,59f0ed15-c84c-4f41-bdd4-26317e4e914d,1,0,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,1,0,8fef790c-a3f4-460c-9093-5065cbdba196,8fef790c-a3f4-460c-9093-5065cbdba196,1,0,79bd24d0-61a9-4558-90ac-4e726066789c,79bd24d0-61a9-4558-90ac-4e726066789c,1,0,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,1,0,ef356548-51a4-4b09-b37d-ede5b8f3edb6,ef356548-51a4-4b09-b37d-ede5b8f3edb6,1,0,53c0d900-5e96-4381-a1ed-4424a5799608,53c0d900-5e96-4381-a1ed-4424a5799608,1,0,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,1,0,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,1,0,45ca9e20-1246-4400-a019-ffb521af6ea7,45ca9e20-1246-4400-a019-ffb521af6ea7,1,0,73eed854-5c3a-4a10-9bfa-793fd517f303,73eed854-5c3a-4a10-9bfa-793fd517f303,1,0,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,1,0,9134dc40-a8f1-4c60-9431-27cb98be5ecd,9134dc40-a8f1-4c60-9431-27cb98be5ecd,1,0,16c4622a-33af-4a95-b44e-0861a6df21d2,16c4622a-33af-4a95-b44e-0861a6df21d2,1,0,d8cac67b-cce2-4a00-a8df-c6570c50153f,d8cac67b-cce2-4a00-a8df-c6570c50153f,1,0,37213c65-bf26-4e50-a2fa-58eb45439b58,37213c65-bf26-4e50-a2fa-58eb45439b58,1,0,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,1,0,b6b31892-73ee-4c9b-92b0-2735536c4938,b6b31892-73ee-4c9b-92b0-2735536c4938,1,0,deb8b883-142e-47d0-a722-7c734a0cf9b3,deb8b883-142e-47d0-a722-7c734a0cf9b3,1,0,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,1,0,29233058-ccb1-4110-a9bc-cdb4c531f35a,29233058-ccb1-4110-a9bc-cdb4c531f35a,1,0,cf3729b2-9ee6-437c-81df-83966793be50,cf3729b2-9ee6-437c-81df-83966793be50,1,0,429d08b7-0b98-4f9b-a053-d04dd84a7026,429d08b7-0b98-4f9b-a053-d04dd84a7026,1,0,b64fd964-cee8-4619-872f-82d2fdc14240,b64fd964-cee8-4619-872f-82d2fdc14240,1,0,5ce7846d-9806-40f5-8631-4e14deb8bc95,5ce7846d-9806-40f5-8631-4e14deb8bc95,1,0,79528a0e-1e48-4d14-bd28-756fd5db57b9,79528a0e-1e48-4d14-bd28-756fd5db57b9,1,0,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,1,0,d9426219-4b37-4776-8d5d-acab5825e789,d9426219-4b37-4776-8d5d-acab5825e789,1,0,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,1,0,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,1,0,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,1,0,29e7299a-ce80-497a-8102-615d0a001ea8,29e7299a-ce80-497a-8102-615d0a001ea8,1,0,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,1,0,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,1,0,adc2cc11-b647-453f-a98e-8a73b7c368c7,adc2cc11-b647-453f-a98e-8a73b7c368c7,1,0,4522c564-61da-40da-a749-5312121a331d,4522c564-61da-40da-a749-5312121a331d,1,0,9394c709-6cbe-4ef6-bc8c-cba8af65821e,9394c709-6cbe-4ef6-bc8c-cba8af65821e,1,0,2943b572-7411-4f92-a6cc-7ee552b85223,2943b572-7411-4f92-a6cc-7ee552b85223,1,0,28478e7a-e8aa-40aa-866c-a3624f903141,28478e7a-e8aa-40aa-866c-a3624f903141,1,0,f692ab21-a8de-4feb-914f-4beef350543a,f692ab21-a8de-4feb-914f-4beef350543a,1,0,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,1,0,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,1,0,dabb3395-6100-4f53-913d-e0230e81b494,dabb3395-6100-4f53-913d-e0230e81b494,1,0,e0a3fae1-1582-4c7a-acd8-870b558acec4,e0a3fae1-1582-4c7a-acd8-870b558acec4,1,0,e9f393e5-04d3-4330-afb0-aa73caf0c5cd,e9f393e5-04d3-4330-afb0-aa73caf0c5cd,1,0,036868c2-e2c4-426b-8402-0d77b4224828,036868c2-e2c4-426b-8402-0d77b4224828,1,0,1bf18e24-8157-4aa4-b790-21c6535f5233,1bf18e24-8157-4aa4-b790-21c6535f5233,1,0,18470536-57df-48f0-9a85-68e4006558eb,18470536-57df-48f0-9a85-68e4006558eb,1,0,893e2f4c-b056-42ae-89fb-ecd90a53bb4c,893e2f4c-b056-42ae-89fb-ecd90a53bb4c,1,0,5eaaa3fd-3a87-4eaa-93a9-49337b19eddd,5eaaa3fd-3a87-4eaa-93a9-49337b19eddd,1,0,77ee9f6c-0be9-450f-978c-297626d6275b,77ee9f6c-0be9-450f-978c-297626d6275b,1,0,a63e6145-0d4b-4da2-9864-485a61e621df,a63e6145-0d4b-4da2-9864-485a61e621df,1,0,f29738d5-ad22-47bf-9053-497763674486,f29738d5-ad22-47bf-9053-497763674486,1,0,9c23d3bd-7a98-4d71-b9b0-78cda4ffb3ce,9c23d3bd-7a98-4d71-b9b0-78cda4ffb3ce,1,0,9aca958a-a938-4421-9e37-6606e02f7b77,9aca958a-a938-4421-9e37-6606e02f7b77,1,0,44109976-b763-4807-a013-9d04c3675bf3,44109976-b763-4807-a013-9d04c3675bf3,1,0,46127175-144d-438e-8fbe-c55ae0233620,46127175-144d-438e-8fbe-c55ae0233620,1,0,20754057-6397-4478-a484-74b8c2f243ee,20754057-6397-4478-a484-74b8c2f243ee,1,0,b8a06e8b-4581-4088-a5b4-a5d3330eab22,b8a06e8b-4581-4088-a5b4-a5d3330eab22,1,0,ea838b79-af81-4767-a8b1-fce68baa866a,ea838b79-af81-4767-a8b1-fce68baa866a,1,0,5e1056d0-6778-4030-8806-3dc90ffed318,5e1056d0-6778-4030-8806-3dc90ffed318,1,0,068e6f32-a2b6-4ade-9b9e-db3eac8b09c1,068e6f32-a2b6-4ade-9b9e-db3eac8b09c1,1,0,3701531a-b408-455f-a49d-652d3fcab4ef,3701531a-b408-455f-a49d-652d3fcab4ef,1,0,63e229aa-2638-45f1-9c5e-f821d9397ac3,63e229aa-2638-45f1-9c5e-f821d9397ac3,1,0,9e425f71-ef7d-4936-9f1b-7dceca99ca95,9e425f71-ef7d-4936-9f1b-7dceca99ca95,1,0,968ecea6-7d21-4e85-9d25-e8c6fe1b76cc,968ecea6-7d21-4e85-9d25-e8c6fe1b76cc,1,0,c6777ffe-1fb2-4807-8624-43f47a4e3947,c6777ffe-1fb2-4807-8624-43f47a4e3947,1,0,244f45e9-79b5-47ed-886c-db8faa4e0ec1,244f45e9-79b5-47ed-886c-db8faa4e0ec1,1,0,be42c5c6-b604-4180-a3d7-24b2348c8d5e,be42c5c6-b604-4180-a3d7-24b2348c8d5e,1,0,6223c072-bff3-4ea8-96a1-ac2a5bbe9f99,6223c072-bff3-4ea8-96a1-ac2a5bbe9f99,1,0,6fd083fe-a132-4f63-b38f-4891004aca8a,6fd083fe-a132-4f63-b38f-4891004aca8a,1,0,f9f021ca-8b3e-4d10-9538-1bce7e851fdd,f9f021ca-8b3e-4d10-9538-1bce7e851fdd,1,0,bb7cf0f8-56b0-4c0d-b206-79051ba83f6d,bb7cf0f8-56b0-4c0d-b206-79051ba83f6d,1,0,ab057ce4-ac51-4465-8aad-eadc9088c62d,ab057ce4-ac51-4465-8aad-eadc9088c62d,1,0,8842c0e3-2e20-4f37-ae7c-f5449004994b,8842c0e3-2e20-4f37-ae7c-f5449004994b,1,0,5b2cc44b-69cb-495c-a26b-003a495df40b,5b2cc44b-69cb-495c-a26b-003a495df40b,1,0,30250d93-10ff-45c9-920b-5fed3f9d8093,30250d93-10ff-45c9-920b-5fed3f9d8093,1,0,fc959221-6313-45d9-b2c4-85befaede226,fc959221-6313-45d9-b2c4-85befaede226,1,0,6ffa8536-7639-4e9a-9f6d-4eda71f5ca3b,6ffa8536-7639-4e9a-9f6d-4eda71f5ca3b,1,0,5206d407-ac91-477e-80e7-97c312da934c,5206d407-ac91-477e-80e7-97c312da934c,1,0,15b53eaa-cb35-4385-9515-c2ec6e1fdb4b,15b53eaa-cb35-4385-9515-c2ec6e1fdb4b,1,0,ccb8a530-260a-4488-b1d9-c67325c69bf4,ccb8a530-260a-4488-b1d9-c67325c69bf4,1,0,c869c1b7-3c04-4e5e-a033-d3f2fb0af03c,c869c1b7-3c04-4e5e-a033-d3f2fb0af03c,1,0,23f93492-59f5-491b-8708-45096934c7e6,23f93492-59f5-491b-8708-45096934c7e6,1,0,30f5471a-17fb-4184-9798-4f8e3ef0cccb,30f5471a-17fb-4184-9798-4f8e3ef0cccb,1,0,27abda4c-a43c-49b4-90cd-db780afe0c45,27abda4c-a43c-49b4-90cd-db780afe0c45,1,0,450a36cb-9bc1-4c5b-ae21-0e023f3eb951,450a36cb-9bc1-4c5b-ae21-0e023f3eb951,1,0,1a28db16-d410-4101-bf31-21cefa880dae,1a28db16-d410-4101-bf31-21cefa880dae,1,0,2b85bcf6-85b0-4efb-bada-b65414a8d264,2b85bcf6-85b0-4efb-bada-b65414a8d264,1,0,cf027de4-59c9-4b8f-9695-b1d4d16548fe,cf027de4-59c9-4b8f-9695-b1d4d16548fe,1,0,d33ceaee-a374-40a3-9406-cbcbf82fd8ae,d33ceaee-a374-40a3-9406-cbcbf82fd8ae,1,0,0b13cad5-91ae-4cd1-a620-9a315ae8024c,0b13cad5-91ae-4cd1-a620-9a315ae8024c,1,0,d0634a8e-676f-4f49-9a38-7cb80cfa9fdf,d0634a8e-676f-4f49-9a38-7cb80cfa9fdf,1,0,59bb5271-4cc7-45aa-8e2a-f556a4afa2dc,59bb5271-4cc7-45aa-8e2a-f556a4afa2dc,1,0,81dd61e5-fe02-4272-a525-affda9b606ca,81dd61e5-fe02-4272-a525-affda9b606ca,1,0,8de7b423-b7d1-46fe-b1dc-fb936736b864,8de7b423-b7d1-46fe-b1dc-fb936736b864,1,0,f565876c-0326-4b12-895e-c248b9e64115,f565876c-0326-4b12-895e-c248b9e64115,1,0,62f075c5-1ad0-4a29-9f40-567b9fa70cdf,62f075c5-1ad0-4a29-9f40-567b9fa70cdf,1,0,88cefe4a-a6c5-4753-935e-f956d9de9f77,88cefe4a-a6c5-4753-935e-f956d9de9f77,1,0,882e78b7-90bd-4b95-8852-146bdb51ec15,882e78b7-90bd-4b95-8852-146bdb51ec15,1,0,ae4435c3-62c0-4f08-b526-7f9571eed8ae,ae4435c3-62c0-4f08-b526-7f9571eed8ae,1,0,91a1bd81-e6fa-476c-85e6-317a91f6c8bc,91a1bd81-e6fa-476c-85e6-317a91f6c8bc,1,0,f799e1d1-bb78-4a7a-bb1a-d79ba29acd0c,f799e1d1-bb78-4a7a-bb1a-d79ba29acd0c,1,0,c7b46558-d688-4c42-ae52-f98de7923176,c7b46558-d688-4c42-ae52-f98de7923176,1,0,31fdbb46-1df1-4b74-a54e-b922260dcca6,31fdbb46-1df1-4b74-a54e-b922260dcca6,1,0,0f6f8fd9-b3af-4d06-bc47-bdad238d15b7,0f6f8fd9-b3af-4d06-bc47-bdad238d15b7,1,0,460e76d2-4ed6-464e-bf9c-a6bcf920aaf2,460e76d2-4ed6-464e-bf9c-a6bcf920aaf2,1,0,80c23bf0-cef0-4d07-a017-d90635f8041d,80c23bf0-cef0-4d07-a017-d90635f8041d,1,0,47a24216-3299-470b-a18c-d8c1258fff24,47a24216-3299-470b-a18c-d8c1258fff24,1,0,72dcfd46-491e-4f88-a0ea-57919f8fbdea,72dcfd46-491e-4f88-a0ea-57919f8fbdea,1,0,fa7a11cc-7ee0-4550-8d0d-9c7464d57a37,fa7a11cc-7ee0-4550-8d0d-9c7464d57a37,1,0,8317ac49-890d-4921-8c0d-1bfc676f0b40,8317ac49-890d-4921-8c0d-1bfc676f0b40,1,0,9dfb5735-6cc7-4525-b57d-04f9c798fac4,9dfb5735-6cc7-4525-b57d-04f9c798fac4,1,0,f9161bc3-9a1c-4870-8681-8e97d8ce838a,f9161bc3-9a1c-4870-8681-8e97d8ce838a,1,0,5e53ccc6-5ab4-4f9d-b524-0081d345d7a2,5e53ccc6-5ab4-4f9d-b524-0081d345d7a2,1,0,c3b3805b-3501-47a7-b280-46180049b235,c3b3805b-3501-47a7-b280-46180049b235,1,0,29af05c2-37de-495b-b3cf-477d452abe5e,29af05c2-37de-495b-b3cf-477d452abe5e,1,0,0c732569-a50f-4be3-a214-0843c6a3da47,0c732569-a50f-4be3-a214-0843c6a3da47,1,0,f55d74bf-5824-4228-9683-31f7c7fdf74d,f55d74bf-5824-4228-9683-31f7c7fdf74d,1,0,5e922083-0ceb-449a-8201-7dd27a46f2fc,5e922083-0ceb-449a-8201-7dd27a46f2fc,1,0,0d142fcd-a596-4cdf-a3f6-c31becdb7b59,0d142fcd-a596-4cdf-a3f6-c31becdb7b59,1,0,c30c6860-befb-497e-b432-3dba0f86c540,c30c6860-befb-497e-b432-3dba0f86c540,1,0,d97e78c7-f2c1-4e0e-9c9b-d2dd6a94da22,d97e78c7-f2c1-4e0e-9c9b-d2dd6a94da22,1,0,e757303e-c61a-4e42-9829-c5a36dba9414,e757303e-c61a-4e42-9829-c5a36dba9414,1,0,cb3bb725-ed7a-4cde-a0ac-26a0b168c0ea,cb3bb725-ed7a-4cde-a0ac-26a0b168c0ea,1,0,091de87c-0801-4bd3-aaaa-ed37bc4cd161,091de87c-0801-4bd3-aaaa-ed37bc4cd161,1,0,9a6bfcbe-6ac7-4839-bfb9-a11b97e64185,9a6bfcbe-6ac7-4839-bfb9-a11b97e64185,1,0,b53c545c-3b1c-4315-a213-4f2b2c7128aa,b53c545c-3b1c-4315-a213-4f2b2c7128aa,1,0,02a84df9-2171-43e6-8135-a74edd384826,02a84df9-2171-43e6-8135-a74edd384826,1,0,ff36356d-cb1d-4316-896a-c6ae83b92437,ff36356d-cb1d-4316-896a-c6ae83b92437,1,0,465cce6a-7064-4b0a-932c-40f842042f33,465cce6a-7064-4b0a-932c-40f842042f33,1,0,f9cd82e7-8252-4bb6-8e08-23ab45ed3976,f9cd82e7-8252-4bb6-8e08-23ab45ed3976,1,0,e67dff00-92e2-4f58-a950-d5bbca9291c5,e67dff00-92e2-4f58-a950-d5bbca9291c5,1,0,e1964724-804a-4ecc-be9e-5b84e58f2b84,e1964724-804a-4ecc-be9e-5b84e58f2b84,1,0,46e961c2-cd45-4d76-a6ad-c1d5c8dc95cc,46e961c2-cd45-4d76-a6ad-c1d5c8dc95cc,1,0,bf3cb513-2856-472b-8713-7bf8ba70cdce,bf3cb513-2856-472b-8713-7bf8ba70cdce,1,0,de4815c8-0853-47e0-862b-b60119c674f6,de4815c8-0853-47e0-862b-b60119c674f6,1,0,dbe02a79-3179-42bb-a8e8-dd9bf3ff705c,dbe02a79-3179-42bb-a8e8-dd9bf3ff705c,1,0,8f17ec3f-6d62-46b8-baef-b20430e948ce,8f17ec3f-6d62-46b8-baef-b20430e948ce,1,0,ea1298d0-9396-4a50-b83e-24064e8dd99d,ea1298d0-9396-4a50-b83e-24064e8dd99d,1,0,038dbb00-e4c6-4e64-b861-3a0764f54ab3,038dbb00-e4c6-4e64-b861-3a0764f54ab3,1,0,1c291f7d-a493-4297-8aaa-912896800066,1c291f7d-a493-4297-8aaa-912896800066,1,0,69149801-a825-4ed2-b077-c26660dff271,69149801-a825-4ed2-b077-c26660dff271,1,0,12146ed3-c159-4d6b-ae1a-1ecd30e5a87e,12146ed3-c159-4d6b-ae1a-1ecd30e5a87e,1,0,518ab687-b84a-40c8-8547-aee4257c1b71,518ab687-b84a-40c8-8547-aee4257c1b71,1,0,5cec0949-bfe8-4f7e-98c1-0c402be3ea09,5cec0949-bfe8-4f7e-98c1-0c402be3ea09,1,0,7732ef07-16eb-46a0-9645-7de95c5482af,7732ef07-16eb-46a0-9645-7de95c5482af,1,0,75dac536-b316-4b04-a57b-03656c678bec,75dac536-b316-4b04-a57b-03656c678bec,1,0,a07d6c85-159d-4d09-b117-561a1e20329f,a07d6c85-159d-4d09-b117-561a1e20329f,1,0,8a2f9733-4f83-41f2-9d74-dca7161a4b41,8a2f9733-4f83-41f2-9d74-dca7161a4b41,1,0,fbd2d900-1e0d-48f3-9793-0186ee49915c,fbd2d900-1e0d-48f3-9793-0186ee49915c,1,0,436b558e-6547-4ba6-8cee-954fe36743ea,436b558e-6547-4ba6-8cee-954fe36743ea,1,0,6120bb6e-b177-48bf-b467-02bab0d4cc0d,6120bb6e-b177-48bf-b467-02bab0d4cc0d,1,0,a5af4715-6c4f-484b-9599-5b1b9147713f,a5af4715-6c4f-484b-9599-5b1b9147713f,1,0,307b6e66-6fef-4777-b20a-37898928932f,307b6e66-6fef-4777-b20a-37898928932f,1,0,a69494c0-dcce-4359-aa82-c1cfae8a43eb,a69494c0-dcce-4359-aa82-c1cfae8a43eb,1,0,2b243d49-5500-403a-b177-ac1c70bb889d,2b243d49-5500-403a-b177-ac1c70bb889d,1,0,51c040c6-e7a4-4e0e-b479-039636fdb6ec,51c040c6-e7a4-4e0e-b479-039636fdb6ec,1,0,8ede4c18-ebf0-4c39-9e82-c59df8d62ca7,8ede4c18-ebf0-4c39-9e82-c59df8d62ca7,1,0,8a50e7f2-97a9-4ed8-a46f-6413f7fcf8cd,8a50e7f2-97a9-4ed8-a46f-6413f7fcf8cd,1,0,b2c200a7-b9cc-4d84-b839-e69f2a14a8f5,b2c200a7-b9cc-4d84-b839-e69f2a14a8f5,1,0,4a69a70d-1b4c-4999-a3dd-ae1deb331fea,4a69a70d-1b4c-4999-a3dd-ae1deb331fea,1,0,3a36e0f5-a645-47f1-99ae-5b0493d604ad,3a36e0f5-a645-47f1-99ae-5b0493d604ad,1,0,57f762f7-b8e4-498b-a3dc-3d40c94855ec,57f762f7-b8e4-498b-a3dc-3d40c94855ec,1,0,ca7d4086-de35-40fd-af65-73369d452135,ca7d4086-de35-40fd-af65-73369d452135,1,0,563c0f5c-e0b4-4229-a3f6-183091060aa4,563c0f5c-e0b4-4229-a3f6-183091060aa4,1,0,bf967588-ea8f-49a3-9331-af2331ffa162,bf967588-ea8f-49a3-9331-af2331ffa162,1,0,5083530c-9a24-4def-99c1-6eb9514e9b33,5083530c-9a24-4def-99c1-6eb9514e9b33,1,0,d59c2725-5d98-495e-9f86-f5d38dbfad90,d59c2725-5d98-495e-9f86-f5d38dbfad90,1,0,176f8835-73d2-4fbe-9d2a-0a4c79d3b871,176f8835-73d2-4fbe-9d2a-0a4c79d3b871,1,0,0ba68198-983d-409b-be27-96f1572b3f12,0ba68198-983d-409b-be27-96f1572b3f12,1,0,9cd1e8dd-e2be-48a9-b32d-43688e1748bc,9cd1e8dd-e2be-48a9-b32d-43688e1748bc,1,0,decb27a8-7dd3-4601-a694-30429e638b39,decb27a8-7dd3-4601-a694-30429e638b39,1,0,922ac6c0-a6a8-444e-9aad-27dc0f49b32e,922ac6c0-a6a8-444e-9aad-27dc0f49b32e,1,0,d7a128e4-f31f-4b09-8424-e816ab59d5c3,d7a128e4-f31f-4b09-8424-e816ab59d5c3,1,0,0ce6e252-8d6e-4bfe-b8cc-daf3434fa51e,0ce6e252-8d6e-4bfe-b8cc-daf3434fa51e,1,0,aa9513b4-f575-4030-a7f9-ac09aa319e98,aa9513b4-f575-4030-a7f9-ac09aa319e98,1,0,f01afc5e-91b8-4cc2-b63a-c245e5e36d01,f01afc5e-91b8-4cc2-b63a-c245e5e36d01,1,0,028cbc0e-023d-40ad-86c3-5e6f8dc96c57,028cbc0e-023d-40ad-86c3-5e6f8dc96c57,1,0,d03f66b1-48a3-434b-bb58-9fd53c183514,d03f66b1-48a3-434b-bb58-9fd53c183514,1,0,a469e55e-d7ca-4c27-b350-fafe7364c18f,a469e55e-d7ca-4c27-b350-fafe7364c18f,1,0,b09fc04b-94d8-4dea-bf6c-24370f231274,b09fc04b-94d8-4dea-bf6c-24370f231274,1,0,e669a5cd-daf3-4a88-a2c0-380db496a4dd,e669a5cd-daf3-4a88-a2c0-380db496a4dd,1,0,177710c8-2441-4436-a096-64c27aa7aec5,177710c8-2441-4436-a096-64c27aa7aec5,1,0,ab143db8-185b-4093-a3b1-c65322cb8fd6,ab143db8-185b-4093-a3b1-c65322cb8fd6,1,0,e3ce5882-541e-4620-9c24-f00deacc33c2,e3ce5882-541e-4620-9c24-f00deacc33c2,1,0,c9694243-390e-4217-8996-b33924c4fe60,c9694243-390e-4217-8996-b33924c4fe60,1,0,8e08ea9b-8c63-475a-9335-c8edc6214555,8e08ea9b-8c63-475a-9335-c8edc6214555,1,0,19bd6152-7e9c-4710-80c3-c6aa399fe4e9,19bd6152-7e9c-4710-80c3-c6aa399fe4e9,1,0,72846fcc-a9ab-4393-9133-38c1805abab1,72846fcc-a9ab-4393-9133-38c1805abab1,1,0,91a81670-9124-4b65-aecd-77f252249030,91a81670-9124-4b65-aecd-77f252249030,1,0,ed2e5344-9261-4473-86a5-f914b8458cfc,ed2e5344-9261-4473-86a5-f914b8458cfc,1,0,4ff32c59-4ca5-4e60-b54c-f46f757758e2,4ff32c59-4ca5-4e60-b54c-f46f757758e2,1,0,acbc674d-d053-43f4-9d62-86fbbb962ee2,acbc674d-d053-43f4-9d62-86fbbb962ee2,1,0,e0608801-124b-4c52-9a17-9072eb5b676c,e0608801-124b-4c52-9a17-9072eb5b676c,1,0,64e3295e-89c6-4b09-8dc4-b552da47db84,64e3295e-89c6-4b09-8dc4-b552da47db84,1,0,2c1846a5-09f2-414b-b95c-67ed7432ce0e,2c1846a5-09f2-414b-b95c-67ed7432ce0e,1,0,ce339ae7-a794-425b-8d5f-b04fd4b21364,ce339ae7-a794-425b-8d5f-b04fd4b21364,1,0,3ad5d8a7-3071-46aa-aebf-306bdb67983b,3ad5d8a7-3071-46aa-aebf-306bdb67983b,1,0,ab7ef662-71c1-4d51-9f0f-ea8c5ea3df8a,ab7ef662-71c1-4d51-9f0f-ea8c5ea3df8a,1,0,cb954476-c551-4a06-9bcd-18d67ba47dc8,cb954476-c551-4a06-9bcd-18d67ba47dc8,1,0,79201015-bfae-463e-81f1-0ae2d3066f3f,79201015-bfae-463e-81f1-0ae2d3066f3f,1,0,bed8af4e-fa3a-4b25-ba6e-5b7b4a6cd363,bed8af4e-fa3a-4b25-ba6e-5b7b4a6cd363,1,0,951927d4-7bfc-4edb-b97f-dcc29a937400,951927d4-7bfc-4edb-b97f-dcc29a937400,1,0,71309e88-d514-40f3-a329-b2a420e75504,71309e88-d514-40f3-a329-b2a420e75504,1,0,1ea3178b-73dd-4063-9140-c61687a4b1b8,1ea3178b-73dd-4063-9140-c61687a4b1b8,1,0,85fd7ef4-2886-4e2c-a6eb-63d0b0b9cd55,85fd7ef4-2886-4e2c-a6eb-63d0b0b9cd55,1,0,696723be-7b4f-4321-956e-eff07ea9f5fa,696723be-7b4f-4321-956e-eff07ea9f5fa,1,0,616c27dc-5c59-4469-97a7-27e0752bd3a7,616c27dc-5c59-4469-97a7-27e0752bd3a7,1,0,f7323121-74bc-441c-a3e9-dd5cb4f0accd,f7323121-74bc-441c-a3e9-dd5cb4f0accd,1,0,fddfb2fd-4d58-4bc6-b196-720425a8c029,fddfb2fd-4d58-4bc6-b196-720425a8c029,1,0,ce075cf1-1778-4671-aa40-166e6c41adc8,ce075cf1-1778-4671-aa40-166e6c41adc8,1,0,eddb111f-7622-44a3-b7d8-97faec67b23c,eddb111f-7622-44a3-b7d8-97faec67b23c,1,0,84872892-842e-4d7d-a3cd-576c42343a7a,84872892-842e-4d7d-a3cd-576c42343a7a,1,0,78ad6047-473d-494b-a2ba-81e062b567e6,78ad6047-473d-494b-a2ba-81e062b567e6,1,0,bb264e83-49f4-4b7a-8be2-094712fc0640,bb264e83-49f4-4b7a-8be2-094712fc0640,1,0,07bf650d-e61e-44f3-9643-6ffc95b913fb,07bf650d-e61e-44f3-9643-6ffc95b913fb,1,0,5c68c57a-31d6-4ae9-855f-3fbc57922e39,5c68c57a-31d6-4ae9-855f-3fbc57922e39,1,0,6b90ed05-813c-4324-8a69-02c2268856b2,6b90ed05-813c-4324-8a69-02c2268856b2,1,0,081ed48d-cb87-459d-97d6-9af121edbabb,081ed48d-cb87-459d-97d6-9af121edbabb,1,0,6c4074b2-f631-451d-b412-1c8c096a71b1,6c4074b2-f631-451d-b412-1c8c096a71b1,1,0,f9931a20-8391-4b13-8c6d-1836f2492e53,f9931a20-8391-4b13-8c6d-1836f2492e53,1,0,c6eec20b-13b9-44a0-968f-1325680c399b,c6eec20b-13b9-44a0-968f-1325680c399b,1,0,02fbf083-1bdd-4900-9dc1-62f415b792a4,02fbf083-1bdd-4900-9dc1-62f415b792a4,1,0,35454c2d-7088-487b-abb3-f95f2dfdcffa,35454c2d-7088-487b-abb3-f95f2dfdcffa,1,0,2c2526c1-bdf8-4115-bdff-3e79d28321cb,2c2526c1-bdf8-4115-bdff-3e79d28321cb,1,0,4f4da2e9-37ab-4505-b3b1-4b3a908f38c2,4f4da2e9-37ab-4505-b3b1-4b3a908f38c2,1,0,95ab774f-27fa-4bd4-a422-0f997f632679,95ab774f-27fa-4bd4-a422-0f997f632679,1,0,ee3ad891-b7d6-439d-892b-de2f3399d147,ee3ad891-b7d6-439d-892b-de2f3399d147,1,0,4af0f1ee-42cb-47bd-99d0-99deb70e9f82,4af0f1ee-42cb-47bd-99d0-99deb70e9f82,1,0,a2ae0338-ed11-422a-8442-f6c4002ddf0d,a2ae0338-ed11-422a-8442-f6c4002ddf0d,1,0,eb59c9c3-6043-401c-87cc-ba7620139d6a,eb59c9c3-6043-401c-87cc-ba7620139d6a,1,0,2b5ce871-8630-4f2f-9ccb-d9f863886420,2b5ce871-8630-4f2f-9ccb-d9f863886420,1,0,86ae353e-7eed-434c-b4ab-cede36e462bc,86ae353e-7eed-434c-b4ab-cede36e462bc,1,0,18e65717-738b-4d39-9c85-676bca15e6b7,18e65717-738b-4d39-9c85-676bca15e6b7,1,0,0cc63813-cf16-4a99-b3bd-18a773091230,0cc63813-cf16-4a99-b3bd-18a773091230,1,0,4fc00971-c980-468a-9690-5cd520d12eb0,4fc00971-c980-468a-9690-5cd520d12eb0,1,0,85972c27-4f39-4982-9307-7877e87ef87b,85972c27-4f39-4982-9307-7877e87ef87b,1,0,96afdffb-7595-4c49-9e86-8296f50bd2f5,96afdffb-7595-4c49-9e86-8296f50bd2f5,1,0,823d5b5e-e9bf-40f0-9dcd-579bb53847bb,823d5b5e-e9bf-40f0-9dcd-579bb53847bb,1,0,e125d3e0-950f-42ee-8904-bd26091afa55,e125d3e0-950f-42ee-8904-bd26091afa55,1,0,2b4797a5-074a-4a01-b99f-1c5590cfde40,2b4797a5-074a-4a01-b99f-1c5590cfde40,1,0,718e53d2-24ec-40fb-9def-825441ada46c,718e53d2-24ec-40fb-9def-825441ada46c,1,0,4c0a7fd6-8f09-41d6-949f-65ce708c1256,4c0a7fd6-8f09-41d6-949f-65ce708c1256,1,0,792abc06-b52a-4691-ba92-96ed73ca702a,792abc06-b52a-4691-ba92-96ed73ca702a,1,0,148dbe44-86d1-4362-b9db-8ff68cd2b34d,148dbe44-86d1-4362-b9db-8ff68cd2b34d,1,0,1fbc893e-3000-4fac-88f5-c82251835d65,1fbc893e-3000-4fac-88f5-c82251835d65,1,0,05852816-63ec-4179-abca-66372bbfb04c,05852816-63ec-4179-abca-66372bbfb04c,1,0,0165f721-b011-4524-bfd5-81e35092f2be,0165f721-b011-4524-bfd5-81e35092f2be,1,0,e74925d4-1979-4600-8560-0932d26450ad,e74925d4-1979-4600-8560-0932d26450ad,1,0,aa108131-151d-4356-8a24-345e4ec74281,aa108131-151d-4356-8a24-345e4ec74281,1,0,284b77a8-d9f4-44c4-a2dc-91c1f8bd5808,284b77a8-d9f4-44c4-a2dc-91c1f8bd5808,1,0,e3251f1a-3c80-4c86-9960-270920bd512f,e3251f1a-3c80-4c86-9960-270920bd512f,1,0,3c3d5474-977b-4df9-88de-042e997bd10d,3c3d5474-977b-4df9-88de-042e997bd10d,1,0,4b88d172-5a44-4011-bb38-e94bf7a9c879,4b88d172-5a44-4011-bb38-e94bf7a9c879,1,0,3bced2d4-e3d7-4489-a26d-f84620b096f4,3bced2d4-e3d7-4489-a26d-f84620b096f4,1,0,6d015113-1e32-4f5e-aacd-8134d7307125,6d015113-1e32-4f5e-aacd-8134d7307125,1,0,58230238-d2f2-422e-90cb-de355996eb19,58230238-d2f2-422e-90cb-de355996eb19,1,0,3d907678-628d-4fb2-85c2-149839024c08,3d907678-628d-4fb2-85c2-149839024c08,1,0,71384d10-6acf-4139-b766-cb8b5796f1a7,71384d10-6acf-4139-b766-cb8b5796f1a7,1,0,a8f149d7-e9bc-4695-b4f4-88434e31aafb,a8f149d7-e9bc-4695-b4f4-88434e31aafb,1,0,10dcbcc6-7793-4da7-a9a5-e4f124209d3e,10dcbcc6-7793-4da7-a9a5-e4f124209d3e,1,0,11ba510f-cb57-43d0-9897-c49e10b67ccd,11ba510f-cb57-43d0-9897-c49e10b67ccd,1,0,9d92af67-c88d-4429-9e85-0b5bf04c4b79,9d92af67-c88d-4429-9e85-0b5bf04c4b79,1,0,b009bc99-ea12-46db-a7f8-cb3e285b20d0,b009bc99-ea12-46db-a7f8-cb3e285b20d0,1,0,43523bbb-c923-4a20-bcb5-50d30cc826ee,43523bbb-c923-4a20-bcb5-50d30cc826ee,1,0,c89d9aad-3364-45df-88b5-b23ae76edbba,c89d9aad-3364-45df-88b5-b23ae76edbba,1,0,9a2f2cd1-4c9f-460b-b3b7-64706a0164ab,9a2f2cd1-4c9f-460b-b3b7-64706a0164ab,1,0,7e4b9dce-e332-4d35-8b5f-d3f88918989d,7e4b9dce-e332-4d35-8b5f-d3f88918989d,1,0,96fe619a-b819-4f96-9788-e1f4ef57833a,96fe619a-b819-4f96-9788-e1f4ef57833a,1,0,94dff2da-f721-411a-9fc0-5d013b685dcc,94dff2da-f721-411a-9fc0-5d013b685dcc,1,0,9343fc5f-7b08-4be5-8cd5-dbed635b819d,9343fc5f-7b08-4be5-8cd5-dbed635b819d,1,0,99e87e66-1b07-451b-a476-f5213cbd7150,99e87e66-1b07-451b-a476-f5213cbd7150,1,0,c3317f75-f6ad-41f6-97f1-77074c3ff62a,c3317f75-f6ad-41f6-97f1-77074c3ff62a,1,0,8800dec9-84f8-4643-8742-1d76fe575f58,8800dec9-84f8-4643-8742-1d76fe575f58,1,0,62903794-3b41-4d21-b800-1c26dbeda3ce,62903794-3b41-4d21-b800-1c26dbeda3ce,1,0,9bda4a0b-e8a7-4acf-9f07-4033b3a84ebc,9bda4a0b-e8a7-4acf-9f07-4033b3a84ebc,1,0,4ba2e55e-29bc-4fbe-83e8-8bfa36abfdab,4ba2e55e-29bc-4fbe-83e8-8bfa36abfdab,1,0,93de88de-0069-4aa8-96b2-d5709e4def2f,93de88de-0069-4aa8-96b2-d5709e4def2f,1,0,9f94fadf-ac9d-4e57-9fe4-41ce8cfbec6a,9f94fadf-ac9d-4e57-9fe4-41ce8cfbec6a,1,0,12d4ffc8-592e-42a7-b8c6-20bd58f6da90,12d4ffc8-592e-42a7-b8c6-20bd58f6da90,1,0,3a8d9010-8785-4d8d-b908-b821d7d681c9,3a8d9010-8785-4d8d-b908-b821d7d681c9,1,0,2568a935-ea49-4b99-aa9c-de27de6a0e81,2568a935-ea49-4b99-aa9c-de27de6a0e81,1,0,de2bdd4f-93f2-4341-86d6-7082fc286a5c,de2bdd4f-93f2-4341-86d6-7082fc286a5c,1,0,ba96ec0e-931e-45be-a782-e68ba4fedddb,ba96ec0e-931e-45be-a782-e68ba4fedddb,1,0,9af5882f-3a42-4fae-83df-6aa8de577112,9af5882f-3a42-4fae-83df-6aa8de577112,1,0,79bc5e39-3017-48bf-8e42-fa34e8b581ef,79bc5e39-3017-48bf-8e42-fa34e8b581ef,1,0,fe6e207f-d306-4470-8441-ffd3f3710d31,fe6e207f-d306-4470-8441-ffd3f3710d31,1,0,7451af80-7387-4e8d-a3da-2ae0540c3fd4,7451af80-7387-4e8d-a3da-2ae0540c3fd4,1,0,1c1e01f2-b2b3-480d-ae51-2db27b82dedd,1c1e01f2-b2b3-480d-ae51-2db27b82dedd,1,0,df459525-4e4d-4819-b996-5a6379b22a88,df459525-4e4d-4819-b996-5a6379b22a88,1,0,ed1d69f4-b09f-430a-bb2e-a23fe4dedf6b,ed1d69f4-b09f-430a-bb2e-a23fe4dedf6b,1,0,e67b4a32-4bac-450e-be6d-88c262383f31,e67b4a32-4bac-450e-be6d-88c262383f31,1,0,8b83bb54-4c23-4bd8-bd00-374a7a101cfa,8b83bb54-4c23-4bd8-bd00-374a7a101cfa,1,0,6c4c3eca-8b02-451b-af52-93073c3da146,6c4c3eca-8b02-451b-af52-93073c3da146,1,0,095c281c-3903-465d-baea-af1e6abf8019,095c281c-3903-465d-baea-af1e6abf8019,1,0,440d115d-a769-427e-891a-88d65fba2057,440d115d-a769-427e-891a-88d65fba2057,1,0,f7932210-027e-4fad-b7f7-3530789ce803,f7932210-027e-4fad-b7f7-3530789ce803,1,0,7bbfd95e-39a1-485b-930f-c9210c18dcd0,7bbfd95e-39a1-485b-930f-c9210c18dcd0,1,0,4975d3d6-b5a2-41c6-973b-6817013a388d,4975d3d6-b5a2-41c6-973b-6817013a388d,1,0,18ebc799-9724-4ffb-855e-b09a0723869e,18ebc799-9724-4ffb-855e-b09a0723869e,1,0,a06b8ef5-83e6-4fc6-91e1-256004134d69,a06b8ef5-83e6-4fc6-91e1-256004134d69,1,0,1d6a68ec-917f-4c3b-b970-797a6921cbc9,1d6a68ec-917f-4c3b-b970-797a6921cbc9,1,0,ae29eb40-5c8f-4ab4-8556-f98d45e8effe,ae29eb40-5c8f-4ab4-8556-f98d45e8effe,1,0,5b663988-3599-46dc-8d59-4c82ceac537c,5b663988-3599-46dc-8d59-4c82ceac537c,1,0,0f5f136c-688b-491e-a72b-3d9c2e609f0e,0f5f136c-688b-491e-a72b-3d9c2e609f0e,1,0,5573b405-6ac4-4632-b8d6-5d1cbdb63b97,5573b405-6ac4-4632-b8d6-5d1cbdb63b97,1,0,679cc0df-df5c-4c33-8c64-c0b6cee39116,679cc0df-df5c-4c33-8c64-c0b6cee39116,1,0,b156752b-f25c-4f35-9474-8ac3636597f5,b156752b-f25c-4f35-9474-8ac3636597f5,1,0,b67b872e-236a-4ea7-9838-0827234867b4,b67b872e-236a-4ea7-9838-0827234867b4,1,0,1e5ced23-48a7-4f3c-aa3b-78399a2b9e2b,1e5ced23-48a7-4f3c-aa3b-78399a2b9e2b,1,0,ce422d4f-1221-4ebf-a801-975a3220a226,ce422d4f-1221-4ebf-a801-975a3220a226,1,0,8735949b-f259-48b9-97e9-a81dfc7dcc8d,8735949b-f259-48b9-97e9-a81dfc7dcc8d,1,0,b8810612-dc7a-4a45-a83c-163a8669b578,b8810612-dc7a-4a45-a83c-163a8669b578,1,0,00e4dc17-b984-4f45-8b42-2e6a7a5dbced,00e4dc17-b984-4f45-8b42-2e6a7a5dbced,1,0,349c3dc3-0729-41f3-983f-3b13170c6509,349c3dc3-0729-41f3-983f-3b13170c6509,1,0,8281df26-4bde-47ba-926e-f22a8042bf1f,8281df26-4bde-47ba-926e-f22a8042bf1f,1,0,7278fb66-1d48-4c1d-bd15-425f78ad0c32,7278fb66-1d48-4c1d-bd15-425f78ad0c32,1,0,6893007f-8354-4b3b-b205-7c7d385cbde0,6893007f-8354-4b3b-b205-7c7d385cbde0,1,0,d74365a3-b434-41d0-84a7-543c336b5880,d74365a3-b434-41d0-84a7-543c336b5880,1,0,3d42502a-5705-49d7-b4ed-29edbd6306bc,3d42502a-5705-49d7-b4ed-29edbd6306bc,1,0,221e24e6-b31c-45b6-8835-2ad08d595c5f,221e24e6-b31c-45b6-8835-2ad08d595c5f,1,0,fd0fa6c9-1f42-4907-a266-fe7b6847e58a,fd0fa6c9-1f42-4907-a266-fe7b6847e58a,1,0,2e8cbcd7-f5b5-471e-863a-e09b4bc8e163,2e8cbcd7-f5b5-471e-863a-e09b4bc8e163,1,0,55956063-b227-4c74-8d9c-4a62b4f0dbc7,55956063-b227-4c74-8d9c-4a62b4f0dbc7,1,0,b6871b83-7269-43a9-b9a6-a195ff93365d,b6871b83-7269-43a9-b9a6-a195ff93365d,1,0,7dcd627c-16f6-41f9-b474-590ad1c7d2ed,7dcd627c-16f6-41f9-b474-590ad1c7d2ed,1,0,0cf89f30-e702-4c9e-8af4-888634463b99,0cf89f30-e702-4c9e-8af4-888634463b99,1,0,77f890ac-3c9c-4043-a5b7-12158772bcf5,77f890ac-3c9c-4043-a5b7-12158772bcf5,1,0,2bc734f9-8c0d-473a-b1c3-340395069501,2bc734f9-8c0d-473a-b1c3-340395069501,1,0,316c3933-21dd-4e8a-9450-0900e85ef7e2,316c3933-21dd-4e8a-9450-0900e85ef7e2,1,0,994fe78b-9f61-4aaf-9355-fafcae6b816d,994fe78b-9f61-4aaf-9355-fafcae6b816d,1,0,8448f07b-751b-4670-b44c-3564e81e5cdc,8448f07b-751b-4670-b44c-3564e81e5cdc,1,0,17aadd5f-cda2-4785-a07f-3ab4b04434a6,17aadd5f-cda2-4785-a07f-3ab4b04434a6,1,0,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,1,0,1832336e-32f6-42c4-9087-8614ead52bb3,1832336e-32f6-42c4-9087-8614ead52bb3,1,0,ff9f7b5c-70f4-4eed-8216-64448e7da76f,ff9f7b5c-70f4-4eed-8216-64448e7da76f,1,0,44ac2869-990d-4cac-a14b-c1a28854341e,44ac2869-990d-4cac-a14b-c1a28854341e,1,0,d5df31c3-89f9-469c-80a9-fb4706d30bc4,d5df31c3-89f9-469c-80a9-fb4706d30bc4,1,0,e73a6a9d-8ddd-4531-9f17-745117d9da9b,e73a6a9d-8ddd-4531-9f17-745117d9da9b,1,0,9dd4e17c-d10b-435e-8665-08997edc3e7e,9dd4e17c-d10b-435e-8665-08997edc3e7e,1,0,cafd44e1-8509-4550-8329-ff8cab0c31ae,cafd44e1-8509-4550-8329-ff8cab0c31ae,1,0,ee0412d3-58e7-4715-8774-d49778e1ef73,ee0412d3-58e7-4715-8774-d49778e1ef73,1,0,ea31df21-1402-417a-9788-b17a7116e842,ea31df21-1402-417a-9788-b17a7116e842,1,0,7a93efb9-62bb-437a-8095-b26a2c8ce8ed,7a93efb9-62bb-437a-8095-b26a2c8ce8ed,1,0,e964753f-7f4c-4f9f-bd17-cdac317c1d35,e964753f-7f4c-4f9f-bd17-cdac317c1d35,1,0,20c2aba0-e2b2-4e4f-9d48-1515c0ae7b4d,20c2aba0-e2b2-4e4f-9d48-1515c0ae7b4d,1,0,43c22498-3fd6-4038-a291-05f0db9ab66a,43c22498-3fd6-4038-a291-05f0db9ab66a,1,0,4ffc9d16-c450-4ecb-b8f6-9ec6fe37fc75,4ffc9d16-c450-4ecb-b8f6-9ec6fe37fc75,1,0,ee6e5e56-5848-46b6-89bf-b9345a57d94c,ee6e5e56-5848-46b6-89bf-b9345a57d94c,1,0,8817c872-bdee-4577-bcc3-4046edc72803,8817c872-bdee-4577-bcc3-4046edc72803,1,0,5b88c214-4e4e-45c2-b8c5-14eb852e9900,5b88c214-4e4e-45c2-b8c5-14eb852e9900,1,0,105cd740-1f60-45e1-871c-adeecd291b0d,105cd740-1f60-45e1-871c-adeecd291b0d,1,0,95aec7d2-179b-4ea3-a3df-3d737b713564,95aec7d2-179b-4ea3-a3df-3d737b713564,1,0,4bd1cae4-d5b5-444e-9cf5-67a969714293,4bd1cae4-d5b5-444e-9cf5-67a969714293,1,0,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,1,0,f279a625-b88f-43b4-bce9-de1186fe7d7e,f279a625-b88f-43b4-bce9-de1186fe7d7e,1,0,99fc224a-2a61-441a-85e9-d69df6aa8b5e,99fc224a-2a61-441a-85e9-d69df6aa8b5e,1,0,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,1,0,d009782b-d73e-42d1-9979-2cbaf20ee98e,d009782b-d73e-42d1-9979-2cbaf20ee98e,1,0,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,1,0,88d8edf7-654f-4627-b68d-c7e929726da6,88d8edf7-654f-4627-b68d-c7e929726da6,1,0,483720db-6c9e-4179-b5c7-56159c9b6073,483720db-6c9e-4179-b5c7-56159c9b6073,1,0,1725c619-9c4a-40ac-9044-00fee71945a4,1725c619-9c4a-40ac-9044-00fee71945a4,1,0,45a85e25-7c33-4ff5-87a0-2a0b4cda8130,45a85e25-7c33-4ff5-87a0-2a0b4cda8130,1,0,e95b126d-797d-4071-b7b4-b14aaf595f2d,e95b126d-797d-4071-b7b4-b14aaf595f2d,1,0,9241ea3c-633f-4469-9e70-c5a20e464da8,9241ea3c-633f-4469-9e70-c5a20e464da8,1,0,bbadbe1b-cb33-4cc5-84c8-a4fdfc8a2247,bbadbe1b-cb33-4cc5-84c8-a4fdfc8a2247,1,0,961ae0fb-7f7b-414d-8fbf-32b893b41085,961ae0fb-7f7b-414d-8fbf-32b893b41085,1,0,10adf8c8-6f5f-477f-b244-4452b774b766,10adf8c8-6f5f-477f-b244-4452b774b766,1,0,ac9dcb8c-d4f5-4f0d-affb-e4187eafdf14,ac9dcb8c-d4f5-4f0d-affb-e4187eafdf14,1,0,04ec5e44-8469-4e9c-8021-83d258f2ec54,04ec5e44-8469-4e9c-8021-83d258f2ec54,1,0,cff36ede-0bd1-424b-8c75-b9695133f32e,cff36ede-0bd1-424b-8c75-b9695133f32e,1,0,9d872d99-eac7-43ee-8ce2-c9d31a76bd75,9d872d99-eac7-43ee-8ce2-c9d31a76bd75,1,0,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,1,0,58b33683-1916-4aef-9b98-5569ef7782ed,58b33683-1916-4aef-9b98-5569ef7782ed,1,0,d3e1f622-f438-4cad-94ae-0272f51610f7,d3e1f622-f438-4cad-94ae-0272f51610f7,1,0,8569cd73-d40d-4d92-83e0-8ece0c03a86a,8569cd73-d40d-4d92-83e0-8ece0c03a86a,1,0,9ebe2809-be6b-4c91-9443-b237fb7ad43c,9ebe2809-be6b-4c91-9443-b237fb7ad43c,1,0,bf29c091-de15-4cd4-be0e-a9785f97d444,bf29c091-de15-4cd4-be0e-a9785f97d444,1,0,6a675752-fd31-46a5-8a62-2a1ede437c68,6a675752-fd31-46a5-8a62-2a1ede437c68,1,0,060b2bb4-ca03-4da9-930f-7f91f6299a35,060b2bb4-ca03-4da9-930f-7f91f6299a35,1,0,394b1a1c-a7ae-41b7-a346-4bac99fa567d,394b1a1c-a7ae-41b7-a346-4bac99fa567d,1,0,9a5fa511-59e8-4a1b-a101-f276f0b7b261,9a5fa511-59e8-4a1b-a101-f276f0b7b261,1,0,ccfe4e36-80b6-419f-8bb3-c1046203d023,ccfe4e36-80b6-419f-8bb3-c1046203d023,1,0,94b2e060-53b7-4b40-af05-30bea3520330,94b2e060-53b7-4b40-af05-30bea3520330,1,0,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,1,0,41b0dabd-85a3-4819-84dd-371eaf4f996e,41b0dabd-85a3-4819-84dd-371eaf4f996e,1,0,86a5ba4d-0681-4ddc-a505-0f537528e1a3,86a5ba4d-0681-4ddc-a505-0f537528e1a3,1,0,12d936f5-932b-4561-b934-c8444808a450,12d936f5-932b-4561-b934-c8444808a450,1,0,2ccb06ca-9bb7-4b74-9a96-c109bb117984,2ccb06ca-9bb7-4b74-9a96-c109bb117984,1,0,ac1a661d-db18-4576-80a9-a19d4140c05e,ac1a661d-db18-4576-80a9-a19d4140c05e,1,0,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,1,0,c3ffeb09-121b-4d77-9c15-def4648b4f3c,c3ffeb09-121b-4d77-9c15-def4648b4f3c,1,0,c2de0724-04c1-4adb-b62a-b7ba727dbe67,c2de0724-04c1-4adb-b62a-b7ba727dbe67,1,0,4ae26777-69ff-4a55-942b-0bad8ab7a70a,4ae26777-69ff-4a55-942b-0bad8ab7a70a,1,0,a0d8fb0a-0e90-4140-8687-e249b153dc66,a0d8fb0a-0e90-4140-8687-e249b153dc66,1,0,917c6f60-2a07-4587-9496-d393aff93953,917c6f60-2a07-4587-9496-d393aff93953,1,0,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,1,0,9fe72d73-4c95-47e0-bf92-dcb714d747c6,9fe72d73-4c95-47e0-bf92-dcb714d747c6,1,0,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,1,0,4d84bb11-e06e-4ed9-915b-76ee0e385a8b,4d84bb11-e06e-4ed9-915b-76ee0e385a8b,1,0,2b94076d-39ee-45ad-9ba5-435115cf5d4f,2b94076d-39ee-45ad-9ba5-435115cf5d4f,1,0,72ace16c-e90a-4d05-bc23-4351d4c87683,72ace16c-e90a-4d05-bc23-4351d4c87683,1,0,bd86e378-84bb-486a-be7b-319a3fe3b70b,bd86e378-84bb-486a-be7b-319a3fe3b70b,1,0,ef3bc279-6721-4949-8dc0-f96141f7f05c,ef3bc279-6721-4949-8dc0-f96141f7f05c,1,0,f81c7e21-48ad-4b64-975d-e62d34c7235a,f81c7e21-48ad-4b64-975d-e62d34c7235a,1,0,d0523c14-585e-45d3-9735-891235631004,d0523c14-585e-45d3-9735-891235631004,1,0,b6f8bc3e-f0cd-43ef-b060-d701cd446197,b6f8bc3e-f0cd-43ef-b060-d701cd446197,1,0,4f10e5f9-6cfd-4fa9-9c72-d19a484a796c,4f10e5f9-6cfd-4fa9-9c72-d19a484a796c,1,0,b94e805f-e1ab-4870-b855-98aa401864b2,b94e805f-e1ab-4870-b855-98aa401864b2,1,0,ff8eedeb-fc3e-4bee-852b-6da6d59ff38c,ff8eedeb-fc3e-4bee-852b-6da6d59ff38c,1,0,a98bd18f-ccda-41a2-a1b2-8b37cc1f6c36,a98bd18f-ccda-41a2-a1b2-8b37cc1f6c36,1,0,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,1,0,45af8f5d-d505-466b-a798-19f2219a180c,45af8f5d-d505-466b-a798-19f2219a180c,1,0,8a8229bc-f70a-4434-bacc-8a81fc58154b,8a8229bc-f70a-4434-bacc-8a81fc58154b,1,0,6324ad14-82ca-467b-b6b7-8d5f6049ca65,6324ad14-82ca-467b-b6b7-8d5f6049ca65,1,0,273446f0-f28b-4ce2-874c-3c6a57299b71,273446f0-f28b-4ce2-874c-3c6a57299b71,1,0,eb2f7449-ee42-43ec-b59c-3e07a6e3c139,eb2f7449-ee42-43ec-b59c-3e07a6e3c139,1,0,f8a7913a-2c64-47e1-8ae9-622fc6e9477e,f8a7913a-2c64-47e1-8ae9-622fc6e9477e,1,0,9b46a2b4-223d-4527-a94e-37ecd4fe72d7,9b46a2b4-223d-4527-a94e-37ecd4fe72d7,1,0,7a4e17bf-3649-4982-a9c6-5982390f1f1d,7a4e17bf-3649-4982-a9c6-5982390f1f1d,1,0,722be6e0-2698-431b-9206-777a36e6742f,722be6e0-2698-431b-9206-777a36e6742f,1,0,75bb0122-26bd-40be-8de8-7a57680c85ae,75bb0122-26bd-40be-8de8-7a57680c85ae,1,0,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,1,0,0153e60e-daca-48ac-b1c6-adecc89f579e,0153e60e-daca-48ac-b1c6-adecc89f579e,1,0,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,1,0,a896bc34-30a6-48b6-acfc-786c24c186bd,a896bc34-30a6-48b6-acfc-786c24c186bd,1,0,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,1,0,da8ae00a-7207-4ceb-b739-9114888c5b27,da8ae00a-7207-4ceb-b739-9114888c5b27,1,0,a6be80f7-d6aa-4371-a180-3d355080d849,a6be80f7-d6aa-4371-a180-3d355080d849,1,0,b37722c3-e29f-4a40-b4eb-0317919fc7a5,b37722c3-e29f-4a40-b4eb-0317919fc7a5,1,0,b1b1cd90-094d-428b-a6bc-156521c1c54d,b1b1cd90-094d-428b-a6bc-156521c1c54d,1,0,4f79ef7c-79be-4a69-acc0-bd591c712d03,4f79ef7c-79be-4a69-acc0-bd591c712d03,1,0,a0dd2129-d3a1-4bca-b555-72b065be1c13,a0dd2129-d3a1-4bca-b555-72b065be1c13,1,0,dc5e8229-e301-477c-846e-2e7078e3ee5f,dc5e8229-e301-477c-846e-2e7078e3ee5f,1,0,24836e44-8fdd-44bd-91d8-4ddab2caf485,24836e44-8fdd-44bd-91d8-4ddab2caf485,1,0,3727bcfe-4d75-4270-86e7-4a66ab14866c,3727bcfe-4d75-4270-86e7-4a66ab14866c,1,0,870a4708-0b5a-4fa3-9978-d94b161d289a,870a4708-0b5a-4fa3-9978-d94b161d289a,1,0,30e9f89d-7b94-488e-9963-886c271b1af7,30e9f89d-7b94-488e-9963-886c271b1af7,1,0,91af7a52-0825-4af5-94df-cc501e0123cd,91af7a52-0825-4af5-94df-cc501e0123cd,1,0,1c2cc78a-2ae6-4996-a743-7b55aecbe84c,1c2cc78a-2ae6-4996-a743-7b55aecbe84c,1,0,9292bf81-5668-4d52-a4ec-a93bc4b0ad3b,9292bf81-5668-4d52-a4ec-a93bc4b0ad3b,1,0,9693cc78-852e-445b-a7d2-f1689fa9eeec,9693cc78-852e-445b-a7d2-f1689fa9eeec,1,0,eb33e555-db41-462a-a45d-c7e0945cece8,eb33e555-db41-462a-a45d-c7e0945cece8,1,0,9cfd517c-1008-483a-9f65-7d15feb2cefc,9cfd517c-1008-483a-9f65-7d15feb2cefc,1,0,d66adc5e-25a3-472e-b0a4-5f22f88d7a0f,d66adc5e-25a3-472e-b0a4-5f22f88d7a0f,1,0,ae48d48f-cd39-4821-a4b7-9394b2a77ef6,ae48d48f-cd39-4821-a4b7-9394b2a77ef6,1,0,f34d3a69-533e-49df-b91d-f7f7f49c5fb1,f34d3a69-533e-49df-b91d-f7f7f49c5fb1,1,0,1d76f613-f4f6-4772-8c16-d97b3104a553,1d76f613-f4f6-4772-8c16-d97b3104a553,1,0,3e58d607-b906-449f-b044-9c130a487b86,3e58d607-b906-449f-b044-9c130a487b86,1,0,7a911212-7fde-4ea8-a1fa-229116b60895,7a911212-7fde-4ea8-a1fa-229116b60895,1,0,f4580043-5bc2-4295-8523-909302009b44,f4580043-5bc2-4295-8523-909302009b44,1,0,dc8af632-a5a4-4270-ba5f-2d3ba506f7e3,dc8af632-a5a4-4270-ba5f-2d3ba506f7e3,1,0,81936ac2-32fe-4e14-897b-0aba92b90c05,81936ac2-32fe-4e14-897b-0aba92b90c05,1,0,9f88e355-3f8f-4fcd-b45f-39c3d45490f5,9f88e355-3f8f-4fcd-b45f-39c3d45490f5,1,0,2e233e3c-687c-4516-87c6-5d6c5f9f04a2,2e233e3c-687c-4516-87c6-5d6c5f9f04a2,1,0,2afdcde7-46ef-4624-8b84-c6381ff2f3a4,2afdcde7-46ef-4624-8b84-c6381ff2f3a4,1,0,2d279d24-1953-4a2f-8206-77481d2fd718,2d279d24-1953-4a2f-8206-77481d2fd718,1,0,aa6abffe-1b09-48f9-9aee-4f234db6b2a2,aa6abffe-1b09-48f9-9aee-4f234db6b2a2,1,0,0a920200-77d0-42ea-abf6-0d40d63289b0,0a920200-77d0-42ea-abf6-0d40d63289b0,1,0,c850bafc-4073-44ef-b148-194f87c46f0e,c850bafc-4073-44ef-b148-194f87c46f0e,1,0,6d1dd726-815d-476e-b668-95cff4182e54,6d1dd726-815d-476e-b668-95cff4182e54,1,0,12f4a0ed-4798-4467-8834-de3eb385e22d,12f4a0ed-4798-4467-8834-de3eb385e22d,1,0,5710809e-4c41-42ab-952f-f7778fe9be0f,5710809e-4c41-42ab-952f-f7778fe9be0f,1,0,0811f6c2-6bb3-43b8-9944-910adc4c6f23,0811f6c2-6bb3-43b8-9944-910adc4c6f23,1,0,c1646df4-9fce-44f0-9cc3-a5dab0bbef2e,c1646df4-9fce-44f0-9cc3-a5dab0bbef2e,1,0,c86b02ab-3532-4f4c-b993-e237ed0d4d12,c86b02ab-3532-4f4c-b993-e237ed0d4d12,1,0,ac028c56-b2a8-4a9b-a325-554c636f838e,ac028c56-b2a8-4a9b-a325-554c636f838e,1,0,0ed85f4c-c002-49b6-99b9-0c3c4b7f940e,0ed85f4c-c002-49b6-99b9-0c3c4b7f940e,1,0,f99e98ac-cd94-4989-8c02-ef8b323c6815,f99e98ac-cd94-4989-8c02-ef8b323c6815,1,0,e2562347-4549-4111-862e-86c20a6daade,e2562347-4549-4111-862e-86c20a6daade,1,0,b270fc64-15c6-41ed-ad09-44c833ca7c41,b270fc64-15c6-41ed-ad09-44c833ca7c41,1,0,4c3312fd-5613-4e9b-ae7c-572fa1887ded,4c3312fd-5613-4e9b-ae7c-572fa1887ded,1,0,6c8c9618-287a-41ab-890c-60250925ad52,6c8c9618-287a-41ab-890c-60250925ad52,1,0,55b9650e-098b-4d44-9fb5-d525b46f014b,55b9650e-098b-4d44-9fb5-d525b46f014b,1,0,5b7b32ec-3d0e-42e9-bd13-5d2b8cc1942d,5b7b32ec-3d0e-42e9-bd13-5d2b8cc1942d,1,0,bc55dc06-a769-40be-9c99-0794bdd2dbea,bc55dc06-a769-40be-9c99-0794bdd2dbea,1,0,7861e179-96d2-422f-a7c2-b38b59074956,7861e179-96d2-422f-a7c2-b38b59074956,1,0,0b2416bc-f322-45b3-8c3f-2c8a206c55a1,0b2416bc-f322-45b3-8c3f-2c8a206c55a1,1,0,3797b4c6-e336-4cbe-8d0b-0902e1247b42,3797b4c6-e336-4cbe-8d0b-0902e1247b42,1,0,67ebc493-d29a-4614-890a-feb8b5bd884b,67ebc493-d29a-4614-890a-feb8b5bd884b,1,0,dc79e5e2-37d1-4f19-9500-15c1d9be10eb,dc79e5e2-37d1-4f19-9500-15c1d9be10eb,1,0,dba6cb38-79c6-4060-87c5-a993548f36c4,dba6cb38-79c6-4060-87c5-a993548f36c4,1,0,6b44227a-e226-4bcb-8638-06b49f830669,6b44227a-e226-4bcb-8638-06b49f830669,1,0,f2406400-87e9-4df2-bcd3-8f1e3ad62088,f2406400-87e9-4df2-bcd3-8f1e3ad62088,1,0,ecaacedb-bf2d-4736-a9e1-fa89cda85ee6,ecaacedb-bf2d-4736-a9e1-fa89cda85ee6,1,0,a5623e87-3102-4521-b4ab-c41bf2403a1a,a5623e87-3102-4521-b4ab-c41bf2403a1a,1,0,599b1692-5f4e-42ef-ae1a-822ff527a415,599b1692-5f4e-42ef-ae1a-822ff527a415,1,0,ee9abe8a-b3a2-48a9-9157-ea537e83b7e7,ee9abe8a-b3a2-48a9-9157-ea537e83b7e7,1,0,4bb7372a-87a9-426e-b09f-fc0110455b10,4bb7372a-87a9-426e-b09f-fc0110455b10,1,0,ac853a0f-c185-4cdb-9f09-c921770937b5,ac853a0f-c185-4cdb-9f09-c921770937b5,1,0,920a7940-4d12-476d-a909-2231787839a9,920a7940-4d12-476d-a909-2231787839a9,1,0,168fce48-2413-45fc-ad21-9b465121d81b,168fce48-2413-45fc-ad21-9b465121d81b,1,0,d65c8992-aabc-4b67-9893-01862231ebe1,d65c8992-aabc-4b67-9893-01862231ebe1,1,0,23f70675-6a05-4b50-ad68-c55ddc93e857,23f70675-6a05-4b50-ad68-c55ddc93e857,1,0,b3aeeb3c-622d-4e0c-8c13-199f0e431a7d,b3aeeb3c-622d-4e0c-8c13-199f0e431a7d,1,0,ad14c4d1-bc11-44b6-a32c-c00fb89a9ea5,ad14c4d1-bc11-44b6-a32c-c00fb89a9ea5,1,0,32eb2a75-ff35-4795-bf0c-12b1328441ee,32eb2a75-ff35-4795-bf0c-12b1328441ee,1,0,8e877990-a64c-4c45-91f1-007d47618cc7,8e877990-a64c-4c45-91f1-007d47618cc7,1,0,73c6640e-2fe6-4132-9237-d6f28cbacc1c,73c6640e-2fe6-4132-9237-d6f28cbacc1c,1,0,69489064-c131-4618-b31f-e6964d593f4a,69489064-c131-4618-b31f-e6964d593f4a,1,0,1731708f-53cb-4b00-b90e-f581b4baa845,1731708f-53cb-4b00-b90e-f581b4baa845,1,0,d4b0feca-c00a-4d48-9f23-d92277ea6483,d4b0feca-c00a-4d48-9f23-d92277ea6483,1,0,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,00b2a0b3-6af8-4ea4-aa38-d1e078d5cbff,1,0,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,20f7fdd2-30f6-4a52-a63b-7d2c326c0e83,1,0,23cb5bc2-9638-4d1c-b4bc-d5297e271570,23cb5bc2-9638-4d1c-b4bc-d5297e271570,1,0,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,6e547ccb-6d5a-4f7c-aaf0-568c22d2c276,1,0,04b7389d-697d-4b0d-a239-ac8c674cc46f,04b7389d-697d-4b0d-a239-ac8c674cc46f,1,0,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,a1cf5173-2e86-4ed7-9a0b-1bd5e578326a,1,0,864cad61-8280-415d-8fe1-bcb39d56670a,864cad61-8280-415d-8fe1-bcb39d56670a,1,0,b106bd29-5dc7-44d7-94d0-00f61499392e,b106bd29-5dc7-44d7-94d0-00f61499392e,1,0,a4febff8-0566-4977-bf55-1d574568fe9f,a4febff8-0566-4977-bf55-1d574568fe9f,1,0,5199cc65-bed1-40b9-96fe-cf6d855a8b91,5199cc65-bed1-40b9-96fe-cf6d855a8b91,1,0,f518add9-5c26-4dac-ab2e-b30fe3fbd347,f518add9-5c26-4dac-ab2e-b30fe3fbd347,1,0,23f53317-7aa8-4816-8a69-3d39d5e76da0,23f53317-7aa8-4816-8a69-3d39d5e76da0,1,0,9ade5155-fa6d-4999-b019-a5e7e235a158,9ade5155-fa6d-4999-b019-a5e7e235a158,1,0,8b302c5e-b255-4cb5-94d9-0dfef4250097,8b302c5e-b255-4cb5-94d9-0dfef4250097,1,0,49d713b8-6a61-4bd1-9650-0de1869967d2,49d713b8-6a61-4bd1-9650-0de1869967d2,1,0,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,1,0,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,1,0,0f2ec7ac-6d3f-4fcf-af3d-b0bfaa187a4b,0f2ec7ac-6d3f-4fcf-af3d-b0bfaa187a4b,1,0,6d351276-2c04-4198-a3e4-865881c12f5c,6d351276-2c04-4198-a3e4-865881c12f5c,1,0,73b1d2e2-0eeb-45dc-8ca3-3bda594d6823,73b1d2e2-0eeb-45dc-8ca3-3bda594d6823,1,0,5c4abd61-2f29-499e-a2ca-d133e9eeeaea,5c4abd61-2f29-499e-a2ca-d133e9eeeaea,1,0,0ddeed48-b98a-47c3-84a2-2eac065be06c,0ddeed48-b98a-47c3-84a2-2eac065be06c,1,0,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,1,0,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,1,0,61b947a5-edca-43ca-82c4-5a7b529d8f82,61b947a5-edca-43ca-82c4-5a7b529d8f82,1,0,59eb6a7a-1d96-4985-8d8e-575162759415,59eb6a7a-1d96-4985-8d8e-575162759415,1,0,68564573-ed49-4519-a8b3-997865fe70a6,68564573-ed49-4519-a8b3-997865fe70a6,1,0,6c789969-d066-489d-ad88-92e2a5a6ec69,6c789969-d066-489d-ad88-92e2a5a6ec69,1,0,2a07d696-75d6-4a12-a310-30d6598b4a4c,2a07d696-75d6-4a12-a310-30d6598b4a4c,1,0,dde88f56-417c-4559-a893-85dc91e7e623,dde88f56-417c-4559-a893-85dc91e7e623,1,0,963eedab-6976-4a98-b9ad-b81f89239661,963eedab-6976-4a98-b9ad-b81f89239661,1,0,3370d43e-8e97-4411-8123-2bb2bcf60a75,3370d43e-8e97-4411-8123-2bb2bcf60a75,1,0,d9d377c9-406f-4bc9-8076-1f049348b816,d9d377c9-406f-4bc9-8076-1f049348b816,1,0,dcfcb108-3761-43d9-ad2a-29633bd1ae47,dcfcb108-3761-43d9-ad2a-29633bd1ae47,1,0,afde7867-15d3-43fa-b439-6d9e40df580b,afde7867-15d3-43fa-b439-6d9e40df580b,1,0,a676ff94-a0d1-4de9-8690-ec67f2c891d8,a676ff94-a0d1-4de9-8690-ec67f2c891d8,1,0,012bf716-3672-462e-b390-7bb4384ab4b1,012bf716-3672-462e-b390-7bb4384ab4b1,1,0,65342599-ff37-4f99-8e40-f05d87403bcf,65342599-ff37-4f99-8e40-f05d87403bcf,1,0,3a3f505a-7a50-4111-8029-5b9057fed232,3a3f505a-7a50-4111-8029-5b9057fed232,1,0,36baa776-83c4-413d-b70c-cbbc45e25662,36baa776-83c4-413d-b70c-cbbc45e25662,1,0,b65f9165-c20d-4053-8a0b-cff3f693b762,b65f9165-c20d-4053-8a0b-cff3f693b762,1,0,51af096b-687f-44f4-a0d8-306f670fc5ce,51af096b-687f-44f4-a0d8-306f670fc5ce,1,0,75972f88-aedd-4338-a3b5-320cd632a2e6,75972f88-aedd-4338-a3b5-320cd632a2e6,1,0,1363523a-929e-49ac-ae39-d43acf9f0478,1363523a-929e-49ac-ae39-d43acf9f0478,1,0,f6ff0bb8-c1fd-4eae-b919-6d10d4504f0c,f6ff0bb8-c1fd-4eae-b919-6d10d4504f0c,1,0,2876c476-8280-426d-8bf9-c93beda0ddd5,2876c476-8280-426d-8bf9-c93beda0ddd5,1,0,963e0813-4f6b-4d31-b66d-77125c47ce19,963e0813-4f6b-4d31-b66d-77125c47ce19,1,0,a720abc8-dcf0-4684-8d94-22d394a8e4df,a720abc8-dcf0-4684-8d94-22d394a8e4df,1,0,e40f53de-c27b-4e74-8241-f784d7ca5c84,e40f53de-c27b-4e74-8241-f784d7ca5c84,1,0,ef38b84d-277e-48c2-8826-330132eb6807,ef38b84d-277e-48c2-8826-330132eb6807,1,0,67a50910-059a-4724-84e0-c21bc3ac74c2,67a50910-059a-4724-84e0-c21bc3ac74c2,1,0,fdd83a89-a2fe-40d8-a531-a10bfeb36a1d,fdd83a89-a2fe-40d8-a531-a10bfeb36a1d,1,0,0d190f8b-87c5-4dd1-bcfb-609ec3a44f72,0d190f8b-87c5-4dd1-bcfb-609ec3a44f72,1,0,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,1,0,2c0d11fc-b927-4b5d-a16c-d60e69580824,2c0d11fc-b927-4b5d-a16c-d60e69580824,1,0,5251e744-666e-48a0-a5b4-9cef313c7631,5251e744-666e-48a0-a5b4-9cef313c7631,1,0,ebedc283-5eb0-459b-b686-f8643666b8b8,ebedc283-5eb0-459b-b686-f8643666b8b8,1,0,6a6afffd-cfed-4801-8b59-34d27e46565c,6a6afffd-cfed-4801-8b59-34d27e46565c,1,0,a469b12d-4537-419c-91e0-37abc9d31505,a469b12d-4537-419c-91e0-37abc9d31505,1,0,6f312bda-1f4d-48a6-bd95-f23f34f0ea4b,6f312bda-1f4d-48a6-bd95-f23f34f0ea4b,1,0,82c42232-531e-403f-8599-cc21a248fa2c,82c42232-531e-403f-8599-cc21a248fa2c,1,0,9104b791-9ac4-41ba-a7f0-9e609db3b578,9104b791-9ac4-41ba-a7f0-9e609db3b578,1,0,2d3721d1-816f-4e84-9df1-863cb269d83d,2d3721d1-816f-4e84-9df1-863cb269d83d,1,0,73554821-8ab5-44ab-a593-37ca10a1b777,73554821-8ab5-44ab-a593-37ca10a1b777,1,0,d5a98e02-e199-445e-8d53-11acd07f473f,d5a98e02-e199-445e-8d53-11acd07f473f,1,0,79db55d6-e916-4bde-b417-7d0a53bb85af,79db55d6-e916-4bde-b417-7d0a53bb85af,1,0,3084fb99-59cb-4338-ae37-0b1e8b333f01,3084fb99-59cb-4338-ae37-0b1e8b333f01,1,0,818a1fbf-17c1-44f9-8e20-27d4ceda549c,818a1fbf-17c1-44f9-8e20-27d4ceda549c,1,0,959a5d25-03e5-4911-bbb7-b93714db7eed,959a5d25-03e5-4911-bbb7-b93714db7eed,1,0,1d0b6a8d-9351-4ce2-85dd-6ac508c660c2,1d0b6a8d-9351-4ce2-85dd-6ac508c660c2,1,0,0b09cf2f-1759-4362-b997-29e09ac00445,0b09cf2f-1759-4362-b997-29e09ac00445,1,0,f6a9eb9c-a1c2-4114-b155-3ce94c7b7f20,f6a9eb9c-a1c2-4114-b155-3ce94c7b7f20,1,0,828ddf5d-ca09-4baf-897f-77d569e02a6b,828ddf5d-ca09-4baf-897f-77d569e02a6b,1,0,8856015c-a695-4b1a-99ef-770263f9dc4a,8856015c-a695-4b1a-99ef-770263f9dc4a,1,0,183ec2b5-e173-4885-9e26-1098ffa15020,183ec2b5-e173-4885-9e26-1098ffa15020,1,0,74702fdf-bfc5-4658-ba58-e39bcfbaa647,74702fdf-bfc5-4658-ba58-e39bcfbaa647,1,0,2f436ec3-6a04-4d2c-998a-c60ea875ca86,2f436ec3-6a04-4d2c-998a-c60ea875ca86,1,0,6a947b2d-3e6b-42c8-a9fd-4c5a71d600a9,6a947b2d-3e6b-42c8-a9fd-4c5a71d600a9,1,0,ae641a80-4ada-4592-ace9-29a82e6700e4,ae641a80-4ada-4592-ace9-29a82e6700e4,1,0,f0b0608c-178f-4dea-b461-0d8f00d79d30,f0b0608c-178f-4dea-b461-0d8f00d79d30,1,0,ed2dba0c-7fe3-4d24-b6a6-b104beadc286,ed2dba0c-7fe3-4d24-b6a6-b104beadc286,1,0,a4c98768-c9fc-4f95-b89b-bb1cb0e8fade,a4c98768-c9fc-4f95-b89b-bb1cb0e8fade,1,0,5546b9a9-a4fe-4a2b-9492-883bcb37a210,5546b9a9-a4fe-4a2b-9492-883bcb37a210,1,0,6fb76c5f-844f-4cbc-ae7c-4ac834fddfc9,6fb76c5f-844f-4cbc-ae7c-4ac834fddfc9,1,0,275a5772-8428-497a-81ef-c919f15fcccd,275a5772-8428-497a-81ef-c919f15fcccd,1,0,8df6e7e6-2a1e-4cf3-bdc9-60e52ea3f625,8df6e7e6-2a1e-4cf3-bdc9-60e52ea3f625,1,0,bf070420-9eb7-4372-96a6-b0d00ac3ce8c,bf070420-9eb7-4372-96a6-b0d00ac3ce8c,1,0,10336352-f3a1-4bc3-bdec-1a2eef15f176,10336352-f3a1-4bc3-bdec-1a2eef15f176,1,0,cacabf2f-6d1c-4c33-80c7-c27a5e757cc9,cacabf2f-6d1c-4c33-80c7-c27a5e757cc9,1,0,3b7c713e-81ae-4adc-9519-99c936599ef7,3b7c713e-81ae-4adc-9519-99c936599ef7,1,0,1c8ffbbd-035c-45cf-8ec8-dc5d26d7f673,1c8ffbbd-035c-45cf-8ec8-dc5d26d7f673,1,0,ecda2c4b-6411-4b47-ab59-1918bad5acdd,ecda2c4b-6411-4b47-ab59-1918bad5acdd,1,0,190bc52e-0d51-4dfc-9f16-99ed71ebfa75,190bc52e-0d51-4dfc-9f16-99ed71ebfa75,1,0,0c24858a-7e64-426f-9b59-392449aecaf5,0c24858a-7e64-426f-9b59-392449aecaf5,1,0,b1d61e28-f3dc-418b-b5df-f75622a4b980,b1d61e28-f3dc-418b-b5df-f75622a4b980,1,0,bec4c82f-4e76-4d16-bb4d-b6d9fa404c5d,bec4c82f-4e76-4d16-bb4d-b6d9fa404c5d,1,0,4033f86b-d250-475a-8837-071bf31664b0,4033f86b-d250-475a-8837-071bf31664b0,1,0,876e31ff-ab7b-4ea4-b491-161963727dd1,876e31ff-ab7b-4ea4-b491-161963727dd1,1,0,bb43995b-68b4-41a1-8458-e10a2d8925f1,bb43995b-68b4-41a1-8458-e10a2d8925f1,1,0,61730dd9-fed7-43ce-8f38-724cac8f3d08,61730dd9-fed7-43ce-8f38-724cac8f3d08,1,0,e6a494b8-27e7-46a6-9435-7be6e150a69e,e6a494b8-27e7-46a6-9435-7be6e150a69e,1,0,133dc852-59d3-4351-934d-8845f8a38431,133dc852-59d3-4351-934d-8845f8a38431,1,0,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,55dbaaf1-554d-46e2-b42a-ce6a8bf20dfb,1,0,b67914a8-d483-4bed-bd4d-a4aadd4998a4,b67914a8-d483-4bed-bd4d-a4aadd4998a4,1,0,707a8a49-fec5-454c-9e80-c3da829d395c,707a8a49-fec5-454c-9e80-c3da829d395c,1,0,b5ea4aff-11be-4232-94a2-cb92801b6c49,b5ea4aff-11be-4232-94a2-cb92801b6c49,1,0,6f630213-c16c-421c-a160-09e3c729ab26,6f630213-c16c-421c-a160-09e3c729ab26,1,0,878c638c-7c84-4914-896a-d4fdf0d759ef,878c638c-7c84-4914-896a-d4fdf0d759ef,1,0,6065653e-b7a9-4033-9617-f64430c57d89,6065653e-b7a9-4033-9617-f64430c57d89,1,0,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,9ec63da6-1f53-417f-9c7d-6879eaa56a7e,1,0,00d1d85b-c258-4f10-9d13-a99375a29fc1,00d1d85b-c258-4f10-9d13-a99375a29fc1,1,0,0544376f-461c-42c3-a102-e0ae65e3c0c6,0544376f-461c-42c3-a102-e0ae65e3c0c6,1,0,6df8d316-6ac3-4626-8951-1ad36d7049ed,6df8d316-6ac3-4626-8951-1ad36d7049ed,1,0,f211b418-899d-4220-a14b-4a7302183e46,f211b418-899d-4220-a14b-4a7302183e46,1,0,e499629a-69ed-46b4-be5d-7b1f2f6a11d4,e499629a-69ed-46b4-be5d-7b1f2f6a11d4,1,0,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,52ab6aea-e6a0-43f0-9cc8-f7c9126635cc,1,0,876b23bf-2f48-4916-ad0f-4de8306e1864,876b23bf-2f48-4916-ad0f-4de8306e1864,1,0,e983f539-e369-491e-9cee-510518187870,e983f539-e369-491e-9cee-510518187870,1,0,9a402a9c-a31f-4082-91d5-b4fe7576a5c2,9a402a9c-a31f-4082-91d5-b4fe7576a5c2,1,0,e99a1b17-0e37-489a-bc39-3dd2e23b0861,e99a1b17-0e37-489a-bc39-3dd2e23b0861,1,0,e7c63a25-c804-4bc4-a6f1-81009dd889e2,e7c63a25-c804-4bc4-a6f1-81009dd889e2,1,0,7ccd86cd-4294-4f6c-84f4-98e25e479f4d,7ccd86cd-4294-4f6c-84f4-98e25e479f4d,1,0,70e710c5-42df-465f-a9c5-8345c87e1f19,70e710c5-42df-465f-a9c5-8345c87e1f19,1,0,4c1576c4-b327-4ec1-87bc-662c5aba343b,4c1576c4-b327-4ec1-87bc-662c5aba343b,1,0,0f694ef1-4a97-4aed-ab4b-0b2c18ea7e17,0f694ef1-4a97-4aed-ab4b-0b2c18ea7e17,1,0,14facdfb-9835-4bb6-98a8-5a6ca9a5d2f8,14facdfb-9835-4bb6-98a8-5a6ca9a5d2f8,1,0,4492ac73-eb91-41f8-98f1-54c2b3ad212a,4492ac73-eb91-41f8-98f1-54c2b3ad212a,1,0,869b43fb-968f-4fe0-b945-5030c90a38f2,869b43fb-968f-4fe0-b945-5030c90a38f2,1,0,af071a52-212b-4131-98e6-81f6048a70e6,af071a52-212b-4131-98e6-81f6048a70e6,1,0,37210dde-9a2f-475c-8341-578ac99f0e17,37210dde-9a2f-475c-8341-578ac99f0e17,1,0,e5094d4f-ee61-4142-a97b-d96172350f65,e5094d4f-ee61-4142-a97b-d96172350f65,1,0,3a8fffb6-a732-440c-afb9-d1c699ea53b6,3a8fffb6-a732-440c-afb9-d1c699ea53b6,1,0,b0650787-8ff5-4407-b491-bcdc2f61fd58,b0650787-8ff5-4407-b491-bcdc2f61fd58,1,0,33dd6bba-0044-4e2f-ae9e-c8a26079ab2a,33dd6bba-0044-4e2f-ae9e-c8a26079ab2a,1,0,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,3f289f67-dfc7-4f2d-90e4-b47aff76ecdb,1,0,9aadad98-69f5-41ce-ad1c-0afd8c610d86,9aadad98-69f5-41ce-ad1c-0afd8c610d86,1,0,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,706a3db0-9d4f-4c08-91cd-3ccaa6d06d3b,1,0,3d662173-e19d-4077-9a08-8c8899226e24,3d662173-e19d-4077-9a08-8c8899226e24,1,0,69fd1e6e-7302-4ca8-8419-ec567ae66bef,69fd1e6e-7302-4ca8-8419-ec567ae66bef,1,0,0eee931a-57bb-4844-8e6e-eaca342640a0,0eee931a-57bb-4844-8e6e-eaca342640a0,1,0,20c57e30-5856-4801-9e77-8006471d89f8,20c57e30-5856-4801-9e77-8006471d89f8,1,0,64eff9f4-c57b-40a0-bd83-7e371fd010ce,64eff9f4-c57b-40a0-bd83-7e371fd010ce,1,0,4a3fe393-8aea-4394-8c10-a234f1f191ad,4a3fe393-8aea-4394-8c10-a234f1f191ad,1,0,6f9a3d00-d935-4fa6-9fd2-14700226daff,6f9a3d00-d935-4fa6-9fd2-14700226daff,1,0,d792831c-698d-40c6-96c2-dd0ae6f30707,d792831c-698d-40c6-96c2-dd0ae6f30707,1,0,a1d91c5f-1acd-4b46-887e-d06e7260dd20,a1d91c5f-1acd-4b46-887e-d06e7260dd20,1,0,3fd26019-c464-4c73-b18e-0888740b1747,3fd26019-c464-4c73-b18e-0888740b1747,1,0,a21989bd-a57f-4969-be3b-d8b39ead4145,a21989bd-a57f-4969-be3b-d8b39ead4145,1,0,c4aee120-cdbb-4b48-a1c7-99cccbafb120,c4aee120-cdbb-4b48-a1c7-99cccbafb120,1,0,6b3e07d5-9299-4933-b3fa-c3cc5f5aa7c9,6b3e07d5-9299-4933-b3fa-c3cc5f5aa7c9,1,0,a3667b25-7c18-446d-a318-685a4fe4bf89,a3667b25-7c18-446d-a318-685a4fe4bf89,1,0,fd271670-bde6-4351-abec-eb82548c6c98,fd271670-bde6-4351-abec-eb82548c6c98,1,0,498b012b-bb63-490e-8100-1d33dc84b400,498b012b-bb63-490e-8100-1d33dc84b400,1,0,8103f12c-ed50-4052-8117-33b6d11ef620,8103f12c-ed50-4052-8117-33b6d11ef620,1,0,4f8653e4-3f58-4bad-8ded-424fe7b1d18a,4f8653e4-3f58-4bad-8ded-424fe7b1d18a,1,0,799b3dda-fbfc-4dea-a577-30321e64f4d5,799b3dda-fbfc-4dea-a577-30321e64f4d5,1,0,7c7857b6-90e8-4b3f-9902-fd81bf68d133,7c7857b6-90e8-4b3f-9902-fd81bf68d133,1,0,617de19c-bf01-4900-832a-c169e9faeb79,617de19c-bf01-4900-832a-c169e9faeb79,1,0,70b73fd0-f5dc-411e-9bbb-10a538e8281b,70b73fd0-f5dc-411e-9bbb-10a538e8281b,1,0,758f44ad-54da-4f72-accf-0afecc4f4827,758f44ad-54da-4f72-accf-0afecc4f4827,1,0,05ee4a7c-63e6-4587-8be7-e206345e3471,05ee4a7c-63e6-4587-8be7-e206345e3471,1,0,98d5e98b-0382-4b28-a5d9-24392925664a,98d5e98b-0382-4b28-a5d9-24392925664a,1,0,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,1,0,2a77eb39-0487-4fb0-8d5b-d4a27592ea60,2a77eb39-0487-4fb0-8d5b-d4a27592ea60,1,0,19a18193-c5d3-4e56-86c5-5a81c525e9ad,19a18193-c5d3-4e56-86c5-5a81c525e9ad,1,0,c208fcc0-d7b2-435b-963a-e18c97727f8f,c208fcc0-d7b2-435b-963a-e18c97727f8f,1,0,ac5db038-8bc3-45ff-9e8d-04ea9fef6d43,ac5db038-8bc3-45ff-9e8d-04ea9fef6d43,1,0,bf11f7b1-6332-4499-ba48-b94bc10ef869,bf11f7b1-6332-4499-ba48-b94bc10ef869,1,0,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,1,0,4378ab20-5467-476b-8f04-4b6876efdee6,4378ab20-5467-476b-8f04-4b6876efdee6,1,0,55e47901-c79c-41c5-9d7f-6b6846ed2782,55e47901-c79c-41c5-9d7f-6b6846ed2782,1,0,479d9428-02fd-47d2-a869-a3695b315724,479d9428-02fd-47d2-a869-a3695b315724,1,0,838b4840-86e3-4bf3-8b95-1e58ef60e97a,838b4840-86e3-4bf3-8b95-1e58ef60e97a,1,0,36d258b5-bfda-4b40-88a8-1e0abf351805,36d258b5-bfda-4b40-88a8-1e0abf351805,1,0,cc95b010-ca42-4b54-9c50-0551b2c690ed,cc95b010-ca42-4b54-9c50-0551b2c690ed,1,0,829fb3c0-6d96-4765-adc6-f177344a4a33,829fb3c0-6d96-4765-adc6-f177344a4a33,1,0,9241e7fe-e3e8-4ddd-ac6c-4edb1a1b2f71,9241e7fe-e3e8-4ddd-ac6c-4edb1a1b2f71,1,0,7c47f039-1ca9-4c6f-ac36-f4cb59b48b65,7c47f039-1ca9-4c6f-ac36-f4cb59b48b65,1,0,974d2430-1ff6-4be9-a5aa-aa896e9a66d4,974d2430-1ff6-4be9-a5aa-aa896e9a66d4,1,0,d392a791-af74-40c9-ab20-6ed6aeabe864,d392a791-af74-40c9-ab20-6ed6aeabe864,1,0,0b7cee9b-3870-49f5-a58e-063cf5353467,0b7cee9b-3870-49f5-a58e-063cf5353467,1,0,1612570d-b069-405a-9dd3-80b8175fb468,1612570d-b069-405a-9dd3-80b8175fb468,1,0,3c429fe8-e663-4a58-817f-8f8382697dbb,3c429fe8-e663-4a58-817f-8f8382697dbb,1,0,c37be0c3-d2db-4e63-a8cb-7956a5396650,c37be0c3-d2db-4e63-a8cb-7956a5396650,1,0,83180e0d-fc4b-41ec-9a17-5af555a4776f,83180e0d-fc4b-41ec-9a17-5af555a4776f,1,0,27c52afc-7127-41e1-af8a-1b1bd2c9bfa8,27c52afc-7127-41e1-af8a-1b1bd2c9bfa8,1,0,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,1,0,561ed574-617d-4a46-b32b-f022e07846c8,561ed574-617d-4a46-b32b-f022e07846c8,1,0,cba706bf-a9a7-4dda-9c5a-a26e85119396,cba706bf-a9a7-4dda-9c5a-a26e85119396,1,0,159a4eb5-00cd-426c-86e3-09cd3f569f22,159a4eb5-00cd-426c-86e3-09cd3f569f22,1,0,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,1,0,3e8c6546-416c-4437-8c85-2cf591b4fc3f,3e8c6546-416c-4437-8c85-2cf591b4fc3f,1,0,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,1,0,9a0b27db-e4ac-496b-b6de-876b90381527,9a0b27db-e4ac-496b-b6de-876b90381527,1,0,2ded5135-b6c3-46dd-b563-7b6fab986d23,2ded5135-b6c3-46dd-b563-7b6fab986d23,1,0,14215720-ccb3-4e5a-8345-cd42c96a3e77,14215720-ccb3-4e5a-8345-cd42c96a3e77,1,0,24fa0604-b6a5-49ad-9d03-b2cf8e81dad8,24fa0604-b6a5-49ad-9d03-b2cf8e81dad8,1,0,0690a5c7-bc25-4101-afa5-69c095d415c2,0690a5c7-bc25-4101-afa5-69c095d415c2,1,0,2ad7b509-4cd1-456a-a6ae-94649fdf8c3e,2ad7b509-4cd1-456a-a6ae-94649fdf8c3e,1,0,79013bba-a0f2-481c-a63e-095a54ee52aa,79013bba-a0f2-481c-a63e-095a54ee52aa,1,0,8523c346-f144-41b8-a702-2d588e7097c2,8523c346-f144-41b8-a702-2d588e7097c2,1,0,93969a30-d9d7-4f2f-85fa-57a4eb7495bf,93969a30-d9d7-4f2f-85fa-57a4eb7495bf,1,0,9fb73c9b-05de-4474-8a28-7e3fd5b2b143,9fb73c9b-05de-4474-8a28-7e3fd5b2b143,1,0,fa2bd6a6-bb46-4e21-8684-248578310164,fa2bd6a6-bb46-4e21-8684-248578310164,1,0,f7cf3b42-39c0-48db-b8ca-fe9ea267a45a,f7cf3b42-39c0-48db-b8ca-fe9ea267a45a,1,0,3a0c06eb-f6d5-46c3-b0b9-c8d98e572093,3a0c06eb-f6d5-46c3-b0b9-c8d98e572093,1,0,88ccac36-169d-48f8-bc68-15e3bb775b79,88ccac36-169d-48f8-bc68-15e3bb775b79,1,0,a1640988-bd60-43b3-86f1-184b9db275c6,a1640988-bd60-43b3-86f1-184b9db275c6,1,0,300a02f7-8062-4843-b11e-0321f8b40f4d,300a02f7-8062-4843-b11e-0321f8b40f4d,1,0,bac41d45-249f-40b4-a013-008e261369c8,bac41d45-249f-40b4-a013-008e261369c8,1,0,84e34b4a-02e8-4676-8b81-771ddf3c2931,84e34b4a-02e8-4676-8b81-771ddf3c2931,1,0,0aa6a024-66ae-4592-87d6-f7cb2a59f906,0aa6a024-66ae-4592-87d6-f7cb2a59f906,1,0,734b4dc5-dc91-4945-a2d7-cefe56a6e0a6,734b4dc5-dc91-4945-a2d7-cefe56a6e0a6,1,0,bb2dcb37-410d-4a6c-9ace-1f04177d6e88,bb2dcb37-410d-4a6c-9ace-1f04177d6e88,1,0,cb6ecc18-a14f-4c3c-a39d-2cd2d1ab4e03,cb6ecc18-a14f-4c3c-a39d-2cd2d1ab4e03,1,0,f71ac535-74a5-4001-a613-455a9e1bf734,f71ac535-74a5-4001-a613-455a9e1bf734,1,0,55a42b83-b6d2-409b-a8ff-7849b08e07ed,55a42b83-b6d2-409b-a8ff-7849b08e07ed,1,0,61889399-ecc2-442c-a790-a8b27a7a540c,61889399-ecc2-442c-a790-a8b27a7a540c,1,0,ecd3a928-3e59-439c-8f58-ba360f2a8b3c,ecd3a928-3e59-439c-8f58-ba360f2a8b3c,1,0,4ee2efbc-bc4a-4b47-bfdb-bb83f108c5bb,4ee2efbc-bc4a-4b47-bfdb-bb83f108c5bb,1,0,2d942a50-b239-4b8c-812a-5a634f5dcaef,2d942a50-b239-4b8c-812a-5a634f5dcaef,1,0,8ab0c61d-85b4-47e3-aca1-1890e4c6ec8d,8ab0c61d-85b4-47e3-aca1-1890e4c6ec8d,1,0,a21cf522-d657-49ba-a198-01ff1de5e3f0,a21cf522-d657-49ba-a198-01ff1de5e3f0,1,0,4dc698da-8471-4b3f-816d-f1467cd2e5f1,4dc698da-8471-4b3f-816d-f1467cd2e5f1,1,0,7ceb2f18-4dae-4b13-a5be-e949be165b4e,7ceb2f18-4dae-4b13-a5be-e949be165b4e,1,0,c4f94f6d-e33f-4226-bf47-c4b544098082,c4f94f6d-e33f-4226-bf47-c4b544098082,1,0,0abca5b8-4974-48aa-bf5d-dbbe2c2ea0e6,0abca5b8-4974-48aa-bf5d-dbbe2c2ea0e6,1,0,fc67b510-3fb4-4305-92d2-c252bc718f03,fc67b510-3fb4-4305-92d2-c252bc718f03,1,0,ed98a7b2-ad31-401f-a65e-dfbcc8e5a4a8,ed98a7b2-ad31-401f-a65e-dfbcc8e5a4a8,1,0,9a5e3d2c-ab69-4f9d-a56f-20bb5f0be1e2,9a5e3d2c-ab69-4f9d-a56f-20bb5f0be1e2,1,0,cf1f7915-94ad-47e7-8676-73271d0cf71e,cf1f7915-94ad-47e7-8676-73271d0cf71e,1,0,fceb6e4a-bd51-4193-a542-70d2317af669,fceb6e4a-bd51-4193-a542-70d2317af669,1,0,80847d57-1795-46c7-a106-926e1f43ac1e,80847d57-1795-46c7-a106-926e1f43ac1e,1,0,38685415-dc87-48b4-8cc4-f85b438f2ec2,38685415-dc87-48b4-8cc4-f85b438f2ec2,1,0,110eff8b-aeec-4ba5-b710-fefc1bd60284,110eff8b-aeec-4ba5-b710-fefc1bd60284,1,0,0a8a6bb9-8b6a-43cf-9d46-b18a8a9591d8,0a8a6bb9-8b6a-43cf-9d46-b18a8a9591d8,1,0,75eca481-002b-4046-898d-dfac9357611f,75eca481-002b-4046-898d-dfac9357611f,1,0,0110decc-d06e-43cf-9d01-30d412edcdd7,0110decc-d06e-43cf-9d01-30d412edcdd7,1,0,3ea32a24-d37b-4fad-937a-9d1357d649a9,3ea32a24-d37b-4fad-937a-9d1357d649a9,1,0,2856ee9a-0fea-4684-b7b8-4844773eae07,2856ee9a-0fea-4684-b7b8-4844773eae07,1,0,fae4675c-dcdc-42fc-911d-07c3c577b8b8,fae4675c-dcdc-42fc-911d-07c3c577b8b8,1,0,f1050611-4f82-411b-97f2-bcd8a5c914bf,f1050611-4f82-411b-97f2-bcd8a5c914bf,1,0,efacf22d-b474-4d49-af8b-6d3784aa5cf2,efacf22d-b474-4d49-af8b-6d3784aa5cf2,1,0,f818b937-9ac3-4a0c-ba50-26c060984f09,f818b937-9ac3-4a0c-ba50-26c060984f09,1,0,f385778d-96cb-4e09-884d-533739b393b1,f385778d-96cb-4e09-884d-533739b393b1,1,0,5bdaa783-e965-4d59-b7b7-a1e86ddb89f7,5bdaa783-e965-4d59-b7b7-a1e86ddb89f7,1,0,7bf36370-3761-4fd5-bea5-90fa142a9d57,7bf36370-3761-4fd5-bea5-90fa142a9d57,1,0,3b81427f-cf64-4a5e-adb3-5415d515fecd,3b81427f-cf64-4a5e-adb3-5415d515fecd,1,0,e9f2b604-7181-476d-8b34-3a544cbb353d,e9f2b604-7181-476d-8b34-3a544cbb353d,1,0,73773919-d01c-41dd-bb31-9c66648ac0ff,73773919-d01c-41dd-bb31-9c66648ac0ff,1,0,5d1afad0-3d7e-4214-b52a-72c184490084,5d1afad0-3d7e-4214-b52a-72c184490084,1,0,5f7901a1-f992-42fa-9ddb-d63574da3b56,5f7901a1-f992-42fa-9ddb-d63574da3b56,1,0,26abd45a-12b3-4312-88fb-53c90a6e6679,26abd45a-12b3-4312-88fb-53c90a6e6679,1,0,1541ad74-3e73-4699-bccf-c13313fbedfe,1541ad74-3e73-4699-bccf-c13313fbedfe,1,0,1037ecb7-6819-4ba2-8c93-eccbbdf825be,1037ecb7-6819-4ba2-8c93-eccbbdf825be,1,0,0b2356a4-5571-4ba0-9095-265106f2b3b3,0b2356a4-5571-4ba0-9095-265106f2b3b3,1,0,a2581834-dde8-439a-8204-6712c829738e,a2581834-dde8-439a-8204-6712c829738e,1,0,222985c4-fe09-44d1-a1c5-5a3e3cedd9b2,222985c4-fe09-44d1-a1c5-5a3e3cedd9b2,1,0,c746a268-815b-4917-8b06-af745ba9db04,c746a268-815b-4917-8b06-af745ba9db04,1,0,5cc01f13-0faa-4c3c-8e5e-156656f71efd,5cc01f13-0faa-4c3c-8e5e-156656f71efd,1,0,7c3463c8-ea36-415a-8e9d-dc7bd927b9d1,7c3463c8-ea36-415a-8e9d-dc7bd927b9d1,1,0,260f4fb1-02cb-4c32-ba4b-5aa202cd0311,260f4fb1-02cb-4c32-ba4b-5aa202cd0311,1,0,be2b4dba-e77e-4947-bd2f-0710b357ca2a,be2b4dba-e77e-4947-bd2f-0710b357ca2a,1,0,86182e9a-89e0-40d7-b2d7-fcd92ee42942,86182e9a-89e0-40d7-b2d7-fcd92ee42942,1,0,df750e63-50fc-4085-b8b8-f05e4751ff51,df750e63-50fc-4085-b8b8-f05e4751ff51,1,0,091cb921-c7e3-4a5f-97b7-34e625159b9c,091cb921-c7e3-4a5f-97b7-34e625159b9c,1,0,f6118cdd-1dcd-464e-a49d-e95c69466750,f6118cdd-1dcd-464e-a49d-e95c69466750,1,0,39932897-959b-41a6-94ad-61426abfdbd9,39932897-959b-41a6-94ad-61426abfdbd9,1,0,c56ea6f3-1032-4b7a-a20e-e912196da1cd,c56ea6f3-1032-4b7a-a20e-e912196da1cd,1,0,20d655a7-788c-48bc-83ae-25003106bedb,20d655a7-788c-48bc-83ae-25003106bedb,1,0,7bfb78de-899f-4a4d-a8b2-ebadeccf3921,7bfb78de-899f-4a4d-a8b2-ebadeccf3921,1,0,68a72014-4b2e-4347-aaa7-54d95b8eb919,68a72014-4b2e-4347-aaa7-54d95b8eb919,1,0,a71d9c41-7510-4d38-90df-1034977b8f45,a71d9c41-7510-4d38-90df-1034977b8f45,1,0,25830f5b-27e2-4eff-9728-b21eb498727d,25830f5b-27e2-4eff-9728-b21eb498727d,1,0,379c9295-d0d5-418d-82f3-5ae19985cc53,379c9295-d0d5-418d-82f3-5ae19985cc53,1,0,af02f534-8508-4f9f-bcc1-0c6f3d696971,af02f534-8508-4f9f-bcc1-0c6f3d696971,1,0,dd345cfb-ea0c-4ea8-9b35-22547b000275,dd345cfb-ea0c-4ea8-9b35-22547b000275,1,0,86a871da-3725-43a1-a7c3-98acd187011b,86a871da-3725-43a1-a7c3-98acd187011b,1,0,2447cfeb-d877-4222-8ac2-b0026b85f932,2447cfeb-d877-4222-8ac2-b0026b85f932,1,0,fb94e9cb-1f27-42a6-a701-18bbe5888e70,fb94e9cb-1f27-42a6-a701-18bbe5888e70,1,0,2e26e32e-a0c6-4460-99de-865622202166,2e26e32e-a0c6-4460-99de-865622202166,1,0,c9489a6e-45af-4877-9788-158071571a0a,c9489a6e-45af-4877-9788-158071571a0a,1,0,23959912-f8fc-42bc-9ec2-1d520ebc5dad,23959912-f8fc-42bc-9ec2-1d520ebc5dad,1,0,4770398f-8013-4d43-93ce-ec1165e40c4e,4770398f-8013-4d43-93ce-ec1165e40c4e,1,0,9a706997-90cb-430d-972c-d2bad87c4a79,9a706997-90cb-430d-972c-d2bad87c4a79,1,0,6f661660-b9c4-41d4-99a8-e08006cfe9c8,6f661660-b9c4-41d4-99a8-e08006cfe9c8,1,0,199e79fa-54d6-4748-aaaa-9c55283582a3,199e79fa-54d6-4748-aaaa-9c55283582a3,1,0,77b4ade5-149c-4803-af25-fb24ad8b7116,77b4ade5-149c-4803-af25-fb24ad8b7116,1,0,afedc975-4354-473c-8a4d-5b4b547c6e13,afedc975-4354-473c-8a4d-5b4b547c6e13,1,0,8faced7e-d498-499e-8011-7d8d2de1a25f,8faced7e-d498-499e-8011-7d8d2de1a25f,1,0,a67b69dc-ca89-4813-a78d-4a7be1aff328,a67b69dc-ca89-4813-a78d-4a7be1aff328,1,0,dec2510f-4517-4144-a525-3c344e44abc4,dec2510f-4517-4144-a525-3c344e44abc4,1,0,5ef026c2-2ef4-45d6-9792-5ba0d298714b,5ef026c2-2ef4-45d6-9792-5ba0d298714b,1,0,45d61391-4cf7-4f45-8775-ada582c42400,45d61391-4cf7-4f45-8775-ada582c42400,1,0,78b2a913-2ab9-455d-85a3-504f0f468468,78b2a913-2ab9-455d-85a3-504f0f468468,1,0,8c7e1080-fbb2-4a9c-b740-b3e9eb996565,8c7e1080-fbb2-4a9c-b740-b3e9eb996565,1,0,560b5b12-4dee-4c69-ab6b-7680757a2797,560b5b12-4dee-4c69-ab6b-7680757a2797,1,0,3cfb1ce0-de42-4914-85c0-807d0c10f77e,3cfb1ce0-de42-4914-85c0-807d0c10f77e,1,0,aa89881f-f111-4384-911c-847b04bb56dd,aa89881f-f111-4384-911c-847b04bb56dd,1,0,444d9e3b-c702-4ad6-a929-a220eff0f6e7,444d9e3b-c702-4ad6-a929-a220eff0f6e7,1,0,022c4519-1cdb-45b6-a699-89fd6688999c,022c4519-1cdb-45b6-a699-89fd6688999c,1,0,fb5b79a2-caec-4c6e-a112-27e78a184d5e,fb5b79a2-caec-4c6e-a112-27e78a184d5e,1,0,fa523958-ce1e-42e1-ae00-2dcb401b7eda,fa523958-ce1e-42e1-ae00-2dcb401b7eda,1,0,1518bca2-a004-4566-8991-7c60e6745a49,1518bca2-a004-4566-8991-7c60e6745a49,1,0,ed8618e2-3ce6-4956-856a-9f40279b4da6,ed8618e2-3ce6-4956-856a-9f40279b4da6,1,0,733f6bc2-544d-4fac-bca8-11b981b95a03,733f6bc2-544d-4fac-bca8-11b981b95a03,1,0,0333cd9e-392d-40b2-869d-ad47119e0384,0333cd9e-392d-40b2-869d-ad47119e0384,1,0,82cc8820-0b92-4bb7-b097-7ac79e922f01,82cc8820-0b92-4bb7-b097-7ac79e922f01,1,0,f2267d6c-6972-4621-b677-87798056363b,f2267d6c-6972-4621-b677-87798056363b,1,0,243d201b-3714-4700-b410-c74c9093e6f6,243d201b-3714-4700-b410-c74c9093e6f6,1,0,de3cb50c-ef99-419e-b922-c6a453da6a5b,de3cb50c-ef99-419e-b922-c6a453da6a5b,1,0,d4ca4802-756a-494c-bab3-e77e0777a3fa,d4ca4802-756a-494c-bab3-e77e0777a3fa,1,0,134c1054-8d65-405f-ba3b-5beeca803a72,134c1054-8d65-405f-ba3b-5beeca803a72,1,0,cfa1669b-5310-4171-83fd-4dff3c6ac345,cfa1669b-5310-4171-83fd-4dff3c6ac345,1,0,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,9ec26d14-b09d-4fd7-9c43-062c0120cf3d,1,0,0db78226-37d0-4016-b4c9-5134af1aabc7,0db78226-37d0-4016-b4c9-5134af1aabc7,1,0,8d6b4d23-a260-4352-9975-c13ce3e05220,8d6b4d23-a260-4352-9975-c13ce3e05220,1,0,e0be0bc7-def6-4ae9-9a33-9689aa829b5e,e0be0bc7-def6-4ae9-9a33-9689aa829b5e,1,0,97d4ffd0-07ef-4dc2-8fbc-449c3c8453ef,97d4ffd0-07ef-4dc2-8fbc-449c3c8453ef,1,0,6f5ac40b-ea22-47cf-acf2-614406669a72,6f5ac40b-ea22-47cf-acf2-614406669a72,1,0,b6caaa9e-a9d1-4519-a61f-7fa0ab0ff201,b6caaa9e-a9d1-4519-a61f-7fa0ab0ff201,1,0,488d2644-6fef-488a-af38-40f59c0e0d8c,488d2644-6fef-488a-af38-40f59c0e0d8c,1,0,5d76a28c-5d6c-49cb-8b91-2527e8d06aba,5d76a28c-5d6c-49cb-8b91-2527e8d06aba,1,0,688d86cd-1044-4b77-bb63-2c05aaafbcd0,688d86cd-1044-4b77-bb63-2c05aaafbcd0,1,0,f1efef30-8651-4728-becd-abe3f9026a43,f1efef30-8651-4728-becd-abe3f9026a43,1,0,c2612e22-4f0d-4713-b4eb-decd9780d088,c2612e22-4f0d-4713-b4eb-decd9780d088,1,0,11b1410f-8e14-4b2f-8890-177f4875020e,11b1410f-8e14-4b2f-8890-177f4875020e,1,0,2276b2b0-1705-4014-956f-5087e9dd5c1e,2276b2b0-1705-4014-956f-5087e9dd5c1e,1,0,4aef5419-7cf5-4443-b773-9273c983844f,4aef5419-7cf5-4443-b773-9273c983844f,1,0,b090cfa5-1bd8-43aa-84d6-6e04375c4b57,b090cfa5-1bd8-43aa-84d6-6e04375c4b57,1,0,8a0d4f7f-7a80-4e5d-8238-05fc169e0319,8a0d4f7f-7a80-4e5d-8238-05fc169e0319,1,0,8e9f9baf-8d12-46cc-915f-f6f290af5512,8e9f9baf-8d12-46cc-915f-f6f290af5512,1,0,5808331f-9ab4-4a23-a592-1f65087f3214,5808331f-9ab4-4a23-a592-1f65087f3214,1,0,9316738d-3d38-4068-818e-a001355b19fb,9316738d-3d38-4068-818e-a001355b19fb,1,0,d86d766f-021a-4c11-b9e8-403af08918cc,d86d766f-021a-4c11-b9e8-403af08918cc,1,0,2cedfef0-5d93-475a-b2dd-ee36e553e6e1,2cedfef0-5d93-475a-b2dd-ee36e553e6e1,1,0,29200d04-d7da-435a-89e6-858c11a1a98c,29200d04-d7da-435a-89e6-858c11a1a98c,1,0,8e5f6c70-04b3-46a1-94ef-82c9f6019f8f,8e5f6c70-04b3-46a1-94ef-82c9f6019f8f,1,0,6c119ef2-d24b-4c3d-ad07-611bed89cab1,6c119ef2-d24b-4c3d-ad07-611bed89cab1,1,0,13b1cb1f-88df-4ff8-b4cc-0473e4f96005,13b1cb1f-88df-4ff8-b4cc-0473e4f96005,1,0,0e861ad8-6fa3-4b0f-a9b0-6c91df1dfc6b,0e861ad8-6fa3-4b0f-a9b0-6c91df1dfc6b,1,0,27df6c22-85d7-4cb6-be19-82af76c84bf9,27df6c22-85d7-4cb6-be19-82af76c84bf9,1,0,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,1,0,0be7f905-53b8-4bb1-8e37-dcc142e508c5,0be7f905-53b8-4bb1-8e37-dcc142e508c5,1,0,422155c7-1640-48c4-bb21-36595b405c66,422155c7-1640-48c4-bb21-36595b405c66,1,0,16d37b5a-88db-4787-b2de-fb50da0ca94b,16d37b5a-88db-4787-b2de-fb50da0ca94b,1,0,f653bcbf-5659-4605-9bb9-3737f19e79dd,f653bcbf-5659-4605-9bb9-3737f19e79dd,1,0,8b980868-fe63-49ff-ba3d-4c29732e1b90,8b980868-fe63-49ff-ba3d-4c29732e1b90,1,0,54668731-4963-4ec3-b188-9feacaefa182,54668731-4963-4ec3-b188-9feacaefa182,1,0,3702135e-5380-4ca6-82f5-63eff1b043e9,3702135e-5380-4ca6-82f5-63eff1b043e9,1,0,29b2104b-fd02-4d51-951f-51ea213b8ebd,29b2104b-fd02-4d51-951f-51ea213b8ebd,1,0,ba5c945e-554f-45a2-a2de-3157b2d7e931,ba5c945e-554f-45a2-a2de-3157b2d7e931,1,0,f7085f33-f122-4443-a3f5-4e765300175e,f7085f33-f122-4443-a3f5-4e765300175e,1,0,b7e4c512-b856-4679-a025-5f0f28918593,b7e4c512-b856-4679-a025-5f0f28918593,1,0,bba56b8f-a3f3-4d3f-9804-f9569bb1f6f3,bba56b8f-a3f3-4d3f-9804-f9569bb1f6f3,1,0,cff7ba79-9418-43a4-badc-3e3cc2f6bd5b,cff7ba79-9418-43a4-badc-3e3cc2f6bd5b,1,0,a9362ac4-85ee-4214-80c1-048fab769885,a9362ac4-85ee-4214-80c1-048fab769885,1,0,4ec242e0-75d1-4bf7-be18-783e7aa4f236,4ec242e0-75d1-4bf7-be18-783e7aa4f236,1,0,e02b1366-9d7a-462f-86a1-436bbf4532ff,e02b1366-9d7a-462f-86a1-436bbf4532ff,1,0,40ee729c-c317-4a1c-b985-5f7e4e1e20fb,40ee729c-c317-4a1c-b985-5f7e4e1e20fb,1,0,2feb35c0-b046-4086-a2ce-ccc462fc6e9c,2feb35c0-b046-4086-a2ce-ccc462fc6e9c,1,0,8811cc64-99d9-4f13-8309-c29965783f5a,8811cc64-99d9-4f13-8309-c29965783f5a,1,0,7c737071-e850-4a3f-8942-697ef52a8ecc,7c737071-e850-4a3f-8942-697ef52a8ecc,1,0,62eff222-7b74-4cab-9138-880db1f05147,62eff222-7b74-4cab-9138-880db1f05147,1,0,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,1,0,860f8893-22fe-4b13-adb1-24e1ea8c6544,860f8893-22fe-4b13-adb1-24e1ea8c6544,1,0,95266e9f-073f-4de3-83c6-cc0d9ee9334f,95266e9f-073f-4de3-83c6-cc0d9ee9334f,1,0,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,21b8ac8d-75ca-481c-8e85-01bc2029f0c0,1,0,d5012e69-89bc-40af-8e4f-377a042854ee,d5012e69-89bc-40af-8e4f-377a042854ee,1,0,02f79fd8-5315-4c90-b520-db67dcb6e371,02f79fd8-5315-4c90-b520-db67dcb6e371,1,0,9bb52788-4a3a-48b5-a551-5ca753b6c059,9bb52788-4a3a-48b5-a551-5ca753b6c059,1,0,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,1,0,872a0c47-fab5-4a54-8ab9-23940bbdefbb,872a0c47-fab5-4a54-8ab9-23940bbdefbb,1,0,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,1,0,2f20bff4-9201-4f36-9e74-eba4d9b3c59a,2f20bff4-9201-4f36-9e74-eba4d9b3c59a,1,0,b6c94efd-5994-4c4c-a641-b062ecc38b65,b6c94efd-5994-4c4c-a641-b062ecc38b65,1,0,98501228-7f0e-45a3-b58f-4c654f393f80,98501228-7f0e-45a3-b58f-4c654f393f80,1,0,502384c9-edb7-451a-b7ea-de006f657a6e,502384c9-edb7-451a-b7ea-de006f657a6e,1,0,4e1a4fe0-dca4-40ba-9369-73be303a4aef,4e1a4fe0-dca4-40ba-9369-73be303a4aef,1,0,329906a0-0b61-4f3f-8cd0-f06a78e8fe5f,329906a0-0b61-4f3f-8cd0-f06a78e8fe5f,1,0,840e0b1b-a599-4c5f-8eaa-7f7e4f2e55a4,840e0b1b-a599-4c5f-8eaa-7f7e4f2e55a4,1,0,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,1d06a9e4-e637-4219-a81c-64f8ec1b91a4,1,0,50968921-76f3-4108-835a-96b153671c8d,50968921-76f3-4108-835a-96b153671c8d,1,0,b773f510-1485-4886-9071-afcbf49ff856,b773f510-1485-4886-9071-afcbf49ff856,1,0,964403f2-0a87-49e1-b183-dbe3624e3805,964403f2-0a87-49e1-b183-dbe3624e3805,1,0,01579044-5659-4a73-a989-c52cfabaae66,01579044-5659-4a73-a989-c52cfabaae66,1,0,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,1,0,911baaa1-a4de-4558-b00e-51644144a762,911baaa1-a4de-4558-b00e-51644144a762,1,0,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,1,0,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,1,0,4e036eff-92a8-4010-89b2-ed949c123311,4e036eff-92a8-4010-89b2-ed949c123311,1,0,38160114-dc22-4d0b-86a5-d650f4756932,38160114-dc22-4d0b-86a5-d650f4756932,1,0,60aaa289-1f07-438c-8f10-81058ac671c3,60aaa289-1f07-438c-8f10-81058ac671c3,1,0,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,1,0,c44b0868-bd7f-4230-973b-544ff4dd2afe,c44b0868-bd7f-4230-973b-544ff4dd2afe,1,0,fc2675c2-1c9b-41f9-88eb-5c8be365fe41,fc2675c2-1c9b-41f9-88eb-5c8be365fe41,1,0,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,1,0,d49411b4-5f6d-48c5-b4f8-fdfbd1b73317,d49411b4-5f6d-48c5-b4f8-fdfbd1b73317,1,0,8b3da21b-ea3f-47cf-af48-15b886b21f20,8b3da21b-ea3f-47cf-af48-15b886b21f20,1,0,32c4750b-0096-4bbc-8dcd-c1f717734233,32c4750b-0096-4bbc-8dcd-c1f717734233,1,0,be6740b1-1f57-4c01-a67a-d48152931dc8,be6740b1-1f57-4c01-a67a-d48152931dc8,1,0,40fd038d-a93a-4be7-9221-d8ae83350ca0,40fd038d-a93a-4be7-9221-d8ae83350ca0,1,0,e9fcabef-5067-477b-8cb0-1bf3ab8161c5,e9fcabef-5067-477b-8cb0-1bf3ab8161c5,1,0,29adc9e5-a994-48ab-a5a1-919d01119c3a,29adc9e5-a994-48ab-a5a1-919d01119c3a,1,0,c47ffce7-c905-4e88-8b1f-156f47047ccd,c47ffce7-c905-4e88-8b1f-156f47047ccd,1,0,e1755eed-88cf-42c1-83e4-f9047f2c30bf,e1755eed-88cf-42c1-83e4-f9047f2c30bf,1,0,c6ec9d48-9131-4735-9cf7-b498705a57e4,c6ec9d48-9131-4735-9cf7-b498705a57e4,1,0,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,1,0,706c421a-74ce-4985-9443-b4a2032481f6,706c421a-74ce-4985-9443-b4a2032481f6,1,0,64da4c24-4aaf-42c8-8595-7f60ff3bc344,64da4c24-4aaf-42c8-8595-7f60ff3bc344,1,0,fb9577e1-00d9-4d52-8de9-23914929a683,fb9577e1-00d9-4d52-8de9-23914929a683,1,0,ffd62a16-f2b4-4e3a-8849-15b957a3d1a1,ffd62a16-f2b4-4e3a-8849-15b957a3d1a1,1,0,529253ae-9c92-4426-b150-8444ba622f89,529253ae-9c92-4426-b150-8444ba622f89,1,0,06a1955a-2ef0-4607-9dcb-a480a7951af7,06a1955a-2ef0-4607-9dcb-a480a7951af7,1,0,6f8fcc96-bfed-444a-908d-95c5b1c64972,6f8fcc96-bfed-444a-908d-95c5b1c64972,1,0,97ce4bf2-6580-4f27-8b5d-d60b66a09c9e,97ce4bf2-6580-4f27-8b5d-d60b66a09c9e,1,0,a84c89d9-2cfe-405f-9bb0-5392b3171695,a84c89d9-2cfe-405f-9bb0-5392b3171695,1,0,070ecbfe-88d6-4de8-b236-e7eedbc3ebc6,070ecbfe-88d6-4de8-b236-e7eedbc3ebc6,1,0,91e26e73-027f-4a10-9083-e5182e768723,91e26e73-027f-4a10-9083-e5182e768723,1,0,e55680f4-cb1a-4cdb-88f0-5d82f43c1d05,e55680f4-cb1a-4cdb-88f0-5d82f43c1d05,1,0,54433668-4391-4dea-8baf-43e9aa1d624e,54433668-4391-4dea-8baf-43e9aa1d624e,1,0,fc309616-060a-42c3-8401-dfef0f359bc5,fc309616-060a-42c3-8401-dfef0f359bc5,1,0,b968398d-973d-4643-95a5-16633d7e48bc,b968398d-973d-4643-95a5-16633d7e48bc,1,0,b9507495-2536-4895-b68b-62acd74343f6,b9507495-2536-4895-b68b-62acd74343f6,1,0,e05a14cc-9051-4c38-9725-19856e36d260,e05a14cc-9051-4c38-9725-19856e36d260,1,0,8154aa0f-ecd6-4ab0-9498-56ef25486a55,8154aa0f-ecd6-4ab0-9498-56ef25486a55,1,0,9d6429f7-23da-4596-822a-04818deb3088,9d6429f7-23da-4596-822a-04818deb3088,1,0,a1b67bd2-3220-497d-b2b4-bd0ea62d9111,a1b67bd2-3220-497d-b2b4-bd0ea62d9111,1,0,acb533e7-4610-4f92-b548-1a4ff1a423d4,acb533e7-4610-4f92-b548-1a4ff1a423d4,1,0,8697999d-9cdb-43d8-979b-3f283daffdd3,8697999d-9cdb-43d8-979b-3f283daffdd3,1,0,23378687-249c-4ec6-99b8-b13fb04b8643,23378687-249c-4ec6-99b8-b13fb04b8643,1,0,66315b12-7abf-46e0-a994-894b827b1301,66315b12-7abf-46e0-a994-894b827b1301,1,0,dba174fb-8392-4451-8069-ae8145658e34,dba174fb-8392-4451-8069-ae8145658e34,1,0,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,1,0,4435d99d-a1df-43e6-97ab-5e651017c61d,4435d99d-a1df-43e6-97ab-5e651017c61d,1,0,2398d69d-ecdd-4d34-bdae-34ed5507a61e,2398d69d-ecdd-4d34-bdae-34ed5507a61e,1,0,a707035a-0172-4b55-b589-fa4a8be9b596,a707035a-0172-4b55-b589-fa4a8be9b596,1,0,c4456e94-8c76-49b1-b85a-433e0f65bdb0,c4456e94-8c76-49b1-b85a-433e0f65bdb0,1,0,4a347209-3a07-48ea-b407-6ee37f1d69f2,4a347209-3a07-48ea-b407-6ee37f1d69f2,1,0,d6aed0fd-686c-430d-b884-74494177422e,d6aed0fd-686c-430d-b884-74494177422e,1,0,245ec4aa-ed65-41f7-b0f0-f8085cfc5bef,245ec4aa-ed65-41f7-b0f0-f8085cfc5bef,1,0,3ed64288-8bf0-4049-8d44-1b424f31d40f,3ed64288-8bf0-4049-8d44-1b424f31d40f,1,0,e0a3fab1-3fe9-4927-840e-f983f72bdfc1,e0a3fab1-3fe9-4927-840e-f983f72bdfc1,1,0,df31eee8-387d-40d1-98df-1f7d8176b50e,df31eee8-387d-40d1-98df-1f7d8176b50e,1,0,c8364283-5525-4bef-8e96-abced54c6a4a,c8364283-5525-4bef-8e96-abced54c6a4a,1,0,bcc25539-c6ca-40d0-84fd-53c3caf1aec7,bcc25539-c6ca-40d0-84fd-53c3caf1aec7,1,0,577f2671-7d38-4806-b7ff-840d649e6d69,577f2671-7d38-4806-b7ff-840d649e6d69,1,0,4ff9376e-ffa6-48f3-bf26-b55ceb23da09,4ff9376e-ffa6-48f3-bf26-b55ceb23da09,1,0,de4c339a-a3cf-4b30-bcf2-ce86f5c2d3b0,de4c339a-a3cf-4b30-bcf2-ce86f5c2d3b0,1,0,40e2fb30-bb03-4178-a8eb-ddf48337ef23,40e2fb30-bb03-4178-a8eb-ddf48337ef23,1,0,1026fbcb-acd8-40dc-b638-6e02c6378c55,1026fbcb-acd8-40dc-b638-6e02c6378c55,1,0,dc9e2ba6-f4f1-493f-9054-cac633f239dd,dc9e2ba6-f4f1-493f-9054-cac633f239dd,1,0,7b95d0b1-c7b2-43b4-9119-320cb8912032,7b95d0b1-c7b2-43b4-9119-320cb8912032,1,0,004582b7-00aa-405e-8e24-ce76c945edae,004582b7-00aa-405e-8e24-ce76c945edae,1,0,97a9b005-a836-4308-8e63-0e00f6890baa,97a9b005-a836-4308-8e63-0e00f6890baa,1,0,98c34ada-0b78-41db-9183-6d7b9e466bde,98c34ada-0b78-41db-9183-6d7b9e466bde,1,0,fb688339-918e-40a1-8721-a26f3077973e,fb688339-918e-40a1-8721-a26f3077973e,1,0,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,1,0,079ba95c-8293-47e2-b8bd-7acf73c2d880,079ba95c-8293-47e2-b8bd-7acf73c2d880,1,0,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,1,0,a5f264a8-a547-4653-abb1-eb1666d527dc,a5f264a8-a547-4653-abb1-eb1666d527dc,1,0,dabae379-6356-497a-aab5-cf102f16a72a,dabae379-6356-497a-aab5-cf102f16a72a,1,0,337370e0-1021-4887-9d38-6c3833c90a5b,337370e0-1021-4887-9d38-6c3833c90a5b,1,0,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,1,0,d6f01f1c-801b-4776-ae11-48236103f76a,d6f01f1c-801b-4776-ae11-48236103f76a,1,0,b6fe68cf-657b-40e0-af2e-247607a86519,b6fe68cf-657b-40e0-af2e-247607a86519,1,0,9b0b8191-94b7-428f-be86-e9e4cd24a72f,9b0b8191-94b7-428f-be86-e9e4cd24a72f,1,0,a923dbcb-7146-4445-ad17-f4a32c16a837,a923dbcb-7146-4445-ad17-f4a32c16a837,1,0,41dec792-1d1a-4e06-a54b-a86193b98225,41dec792-1d1a-4e06-a54b-a86193b98225,1,0,52257beb-3e0c-4681-b430-9690398cd13a,52257beb-3e0c-4681-b430-9690398cd13a,1,0,135e637c-c28e-4547-8da2-d897dca54cb2,135e637c-c28e-4547-8da2-d897dca54cb2,1,0,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,1,0,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,1,0,5356543a-db9a-4265-b83f-31d45544c8e6,5356543a-db9a-4265-b83f-31d45544c8e6,1,0,857dd311-9c6d-4dba-82d8-283d7b05b09e,857dd311-9c6d-4dba-82d8-283d7b05b09e,1,0,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,1,0,8064eb3a-d56c-4517-9db0-b7300149c7c4,8064eb3a-d56c-4517-9db0-b7300149c7c4,1,0,fe926c88-d792-4db3-abcf-3c94dfdcc407,fe926c88-d792-4db3-abcf-3c94dfdcc407,1,0,bcbdba9e-0b29-4ea7-a7d5-1de819bf86ec,bcbdba9e-0b29-4ea7-a7d5-1de819bf86ec,1,0,e0c51555-1614-4aa7-a075-c5e1251579ba,e0c51555-1614-4aa7-a075-c5e1251579ba,1,0,c75a1c6d-fa33-4b57-b359-6253aff5f3e7,c75a1c6d-fa33-4b57-b359-6253aff5f3e7,1,0,af88ea84-5742-4c9f-9a02-6d0f25186f72,af88ea84-5742-4c9f-9a02-6d0f25186f72,1,0,51363236-c8eb-4eb7-9692-5c18edc9a5a8,51363236-c8eb-4eb7-9692-5c18edc9a5a8,1,0,cb65fbad-69a0-47d8-b4a9-da49274c3eb7,cb65fbad-69a0-47d8-b4a9-da49274c3eb7,1,0,872521e3-413c-45ac-a6ea-39fe1324bae8,872521e3-413c-45ac-a6ea-39fe1324bae8,1,0,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,1,0,81ef02df-498d-4af0-8254-dc6730cbf140,81ef02df-498d-4af0-8254-dc6730cbf140,1,0,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,79ad09ba-875a-46bd-9cd9-9d084bf4f6ea,1,0,2902460a-ed86-41cf-8e8f-895adab9a72f,2902460a-ed86-41cf-8e8f-895adab9a72f,1,0,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,1,0,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,1,0,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,1,0,d6b72e00-018a-4fdc-b6a4-06dcecf89809,d6b72e00-018a-4fdc-b6a4-06dcecf89809,1,0,9f816562-57f0-473f-8c85-14f7521ffd7f,9f816562-57f0-473f-8c85-14f7521ffd7f,1,0,917b0acc-88fe-4afc-b19b-6da69e060393,917b0acc-88fe-4afc-b19b-6da69e060393,1,0,a091b76e-8ba4-4534-bbb0-9990e69b8603,a091b76e-8ba4-4534-bbb0-9990e69b8603,1,0,867ee5d2-7566-4052-a311-b56e7e46b90d,867ee5d2-7566-4052-a311-b56e7e46b90d,1,0,f82d5bd6-4c74-4c23-978c-565aae3d752a,f82d5bd6-4c74-4c23-978c-565aae3d752a,1,0,7fba41a5-4faa-412b-b367-b30ced0314c0,7fba41a5-4faa-412b-b367-b30ced0314c0,1,0,98422d20-9a71-40e4-966e-6958d44eaefb,98422d20-9a71-40e4-966e-6958d44eaefb,1,0,37333d0b-3589-4b8b-bf6c-e605e0287b66,37333d0b-3589-4b8b-bf6c-e605e0287b66,1,0,1813c469-da20-46a6-8947-6815b66f64c1,1813c469-da20-46a6-8947-6815b66f64c1,1,0,64e702e9-8934-4356-a1b2-be0e8b390630,64e702e9-8934-4356-a1b2-be0e8b390630,1,0,74880ac4-bdd3-48e6-82a0-a2103da42723,74880ac4-bdd3-48e6-82a0-a2103da42723,1,0,ad083c26-7461-4e94-b524-0174242fbd91,ad083c26-7461-4e94-b524-0174242fbd91,1,0,5ce39370-f918-493f-bb24-53346b6fd836,5ce39370-f918-493f-bb24-53346b6fd836,1,0,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,1,0,0e3d2750-bb4c-42b9-9829-60f1480ced9c,0e3d2750-bb4c-42b9-9829-60f1480ced9c,1,0,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,1,0,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,1,0,a76b1fd1-ba00-40e6-8756-f17fee449818,a76b1fd1-ba00-40e6-8756-f17fee449818,1,0,5c913626-48d1-4e0a-a423-64078ce59c7b,5c913626-48d1-4e0a-a423-64078ce59c7b,1,0,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,1,0,7b0ec304-1904-413e-a9c6-ff62e87107dd,7b0ec304-1904-413e-a9c6-ff62e87107dd,1,0,d4dd8c96-914d-496f-b735-ef85ec473605,d4dd8c96-914d-496f-b735-ef85ec473605,1,0,62517db4-59e6-4945-bcd6-b3f1845572bf,62517db4-59e6-4945-bcd6-b3f1845572bf,1,0,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,1,0,f0f72149-0e7f-441a-b70d-8f47d4977927,f0f72149-0e7f-441a-b70d-8f47d4977927,1,0,776efc3e-ac27-4550-bafd-6e91aa987af2,776efc3e-ac27-4550-bafd-6e91aa987af2,1,0,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,1,0,cc438366-85ea-48be-8b74-d05cddb1fc51,cc438366-85ea-48be-8b74-d05cddb1fc51,1,0,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,1,0,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,1,0,3271b800-1825-422f-97bb-757baf403e90,3271b800-1825-422f-97bb-757baf403e90,1,0,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,1,0,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,1,0,a040c756-4687-4bfd-a690-b122d3c490e5,a040c756-4687-4bfd-a690-b122d3c490e5,1,0,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,1,0,961a9801-3956-4ea0-b0d3-908f09bf4929,961a9801-3956-4ea0-b0d3-908f09bf4929,1,0,6fac5c14-e126-4342-9078-edf1d0efcbf2,6fac5c14-e126-4342-9078-edf1d0efcbf2,1,0,0a3325a1-21c4-4997-882f-4ac2edc175f0,0a3325a1-21c4-4997-882f-4ac2edc175f0,1,0,71102d3f-f020-4d6f-9582-9a7eefb4e797,71102d3f-f020-4d6f-9582-9a7eefb4e797,1,0,53ef6849-a3f3-4171-9167-f349f2d6a736,53ef6849-a3f3-4171-9167-f349f2d6a736,1,0,3f588bd3-d461-42b7-8ab1-386af6399d56,3f588bd3-d461-42b7-8ab1-386af6399d56,1,0,c04ff85e-b4af-4a9f-b0e9-c5c65e3d10a1,c04ff85e-b4af-4a9f-b0e9-c5c65e3d10a1,1,0,8c576405-29c1-46b1-ab2e-40e52c21cab0,8c576405-29c1-46b1-ab2e-40e52c21cab0,1,0,b33a89da-8589-4902-83fa-6545e5fce23e,b33a89da-8589-4902-83fa-6545e5fce23e,1,0,f0620d5a-e1fe-419f-af37-e0f462f97e8d,f0620d5a-e1fe-419f-af37-e0f462f97e8d,1,0,3e2f2ae1-c809-43fc-8276-b0a16a92858c,3e2f2ae1-c809-43fc-8276-b0a16a92858c,1,0,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,1,0,1a7c7427-bead-4655-9dd6-df6e722663c5,1a7c7427-bead-4655-9dd6-df6e722663c5,1,0,3ad08f4a-6202-4099-b6cc-bc116e6731a0,3ad08f4a-6202-4099-b6cc-bc116e6731a0,1,0,fd96c8ab-602a-4735-b168-52b501e80351,fd96c8ab-602a-4735-b168-52b501e80351,1,0,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,b1dc619d-8d91-4f7a-aa50-1d07ff9aebdc,1,0,370f0c75-d2c5-4be5-a633-4bcc77998ece,370f0c75-d2c5-4be5-a633-4bcc77998ece,1,0,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,f80b505f-b4ff-45fb-bd88-74b274ae9d2b,1,0,2139532c-f6cb-4393-936e-cc912e5adca9,2139532c-f6cb-4393-936e-cc912e5adca9,1,0,755c3eca-4956-4a44-9b38-c11dae00b87f,755c3eca-4956-4a44-9b38-c11dae00b87f,1,0,f57c558c-2c94-4b9d-8697-448d0548ab1a,f57c558c-2c94-4b9d-8697-448d0548ab1a,1,0,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,a310c09f-4d3a-4d3a-9ad5-7a5735a33a1d,1,0,c32db021-eca1-4b67-aa85-3d6e28c51b53,c32db021-eca1-4b67-aa85-3d6e28c51b53,1,0,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,e9ed0ee4-3fbe-4093-9078-cb265ed6842c,1,0,02466dcf-02a1-4853-814f-a913a9baba45,02466dcf-02a1-4853-814f-a913a9baba45,1,0,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,c4a40dc9-b619-4219-9d9a-e11f49a14fb1,1,0,62b75eb2-42e1-4484-a77f-b676dd36f3d4,62b75eb2-42e1-4484-a77f-b676dd36f3d4,1,0,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,5e28e22a-dd6e-4703-92bd-13f5cb0dc023,1,0,856510ee-74f5-44e9-a3c0-1c60cfb7a787,856510ee-74f5-44e9-a3c0-1c60cfb7a787,1,0,28b761c6-c286-4125-a4ed-da602e49950f,28b761c6-c286-4125-a4ed-da602e49950f,1,0,4ac66a22-c736-4e06-a8aa-ef4a71788c65,4ac66a22-c736-4e06-a8aa-ef4a71788c65,1,0,9cfe9281-8840-4077-824d-a2c9cbb0b730,9cfe9281-8840-4077-824d-a2c9cbb0b730,1,0,76389fa9-b9e0-492e-9c93-24b5f3bf094c,76389fa9-b9e0-492e-9c93-24b5f3bf094c,1,0,23e3de37-9315-45e6-bbfd-60aae28c25ae,23e3de37-9315-45e6-bbfd-60aae28c25ae,1,0,a9957f43-8b6f-4d98-a2d8-77b78047494c,a9957f43-8b6f-4d98-a2d8-77b78047494c,1,0,e470e15d-1b06-43cb-a9f9-ba489e2f596f,e470e15d-1b06-43cb-a9f9-ba489e2f596f,1,0,0408002c-9255-43a2-8022-82f02ee0e8f4,0408002c-9255-43a2-8022-82f02ee0e8f4,1,0,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,88f44c9b-216d-4d7e-bc88-1e6b253ed01e,1,0,1851afd4-5324-45c1-b754-54e65943f945,1851afd4-5324-45c1-b754-54e65943f945,1,0,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,bc5eca9b-32d8-44e0-a127-8ad1f47d7957,1,0,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,6e5307ea-8fbf-4177-bcc8-f163a6ce1b40,1,0,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,0fa77ef7-a836-4459-9bca-6010d0bdfc7f,1,0,c322dc4a-30f3-4d23-9824-4a01c496408d,c322dc4a-30f3-4d23-9824-4a01c496408d,1,0,dcff004c-1b61-4a19-b977-ea21bf688614,dcff004c-1b61-4a19-b977-ea21bf688614,0,0,0,1,0,0,0,1,0,1,0,1,1,1,1} \ No newline at end of file diff --git a/SSL/src/Constants/ДанныеДляОтложенногоОбновления/ДанныеДляОтложенногоОбновления.mdo b/SSL/src/Constants/ДанныеДляОтложенногоОбновления/ДанныеДляОтложенногоОбновления.mdo new file mode 100644 index 000000000..8a69ccace --- /dev/null +++ b/SSL/src/Constants/ДанныеДляОтложенногоОбновления/ДанныеДляОтложенногоОбновления.mdo @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:Constant xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="9b4b7424-1af7-4d80-8404-8819fcfeae75"> + <producedTypes> + <managerType typeId="5f6db249-3558-4a3e-afad-0e7d7a621e9d" valueTypeId="60f963be-1db0-4f12-a232-cb28f37d68cd"/> + <valueManagerType typeId="51e8ebc7-afbe-4749-b04c-f9ca09b74f1d" valueTypeId="36f24686-db86-4540-bd81-f0c91e9425a4"/> + <valueKeyType typeId="433f5e0f-d16a-5835-ab47-b620c2e0aabe" valueTypeId="77c30a73-3a7c-5f0b-b3cf-21bfd3b6bce5"/> + </producedTypes> + <name>ДанныеДляОтложенногоОбновления</name> + <synonym> + <key>ru</key> + <value>Данные для отложенного обновления</value> + </synonym> + <type> + <types>ValueStorage</types> + </type> + <useStandardCommands>true</useStandardCommands> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataLockControlMode>Managed</dataLockControlMode> +</mdclass:Constant> diff --git a/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl index e27a78c8c..c70b93ca6 100644 --- a/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьВнешнихПользователей/ValueManagerModule.bsl @@ -1,7 +1,11 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ОписаниеПеременных + Перем ЗначениеИзменено; +#КонецОбласти + #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) diff --git a/SSL/src/Constants/ИспользоватьДатыЗапретаЗагрузки/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьДатыЗапретаЗагрузки/ValueManagerModule.bsl index 09a20fb90..00e782aa6 100644 --- a/SSL/src/Constants/ИспользоватьДатыЗапретаЗагрузки/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьДатыЗапретаЗагрузки/ValueManagerModule.bsl @@ -1,7 +1,24 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ОписаниеПеременных + +Перем НастройкаВключена; // Флажок изменения значения константы с Ложь на Истина. + // Используется в обработчике события ПриЗаписи. + +#КонецОбласти + #Область ОбработчикиСобытий +Процедура ПередЗаписью(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + НастройкаВключена = Значение И НЕ Константы.ИспользоватьДатыЗапретаЗагрузки.Получить(); + +КонецПроцедуры + Процедура ПриЗаписи(Отказ) Если Не ДополнительныеСвойства.Свойство("ПропуститьОбновлениеВерсииДатЗапретаИзменения") Тогда @@ -12,6 +29,13 @@ Возврат; КонецЕсли; + Если НастройкаВключена Тогда + СвойстваРазделов = ДатыЗапретаИзмененияСлужебный.СвойстваРазделов(); + Если Не СвойстваРазделов.ДатыЗапретаЗагрузкиВнедрены Тогда + ВызватьИсключение ДатыЗапретаИзмененияСлужебный.ТекстОшибкиДатыЗапретаЗагрузкиНеВнедрены(); + КонецЕсли; + КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Constants/ИспользоватьДополнительныеРеквизитыИСведения/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьДополнительныеРеквизитыИСведения/ValueManagerModule.bsl index 879d02a85..f1bf0f342 100644 --- a/SSL/src/Constants/ИспользоватьДополнительныеРеквизитыИСведения/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьДополнительныеРеквизитыИСведения/ValueManagerModule.bsl @@ -1,7 +1,11 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ОписаниеПеременных + Перем ЗначениеИзменено; +#КонецОбласти + #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) diff --git a/SSL/src/Constants/ИспользоватьИнтеграцию1СБухфон/ИспользоватьИнтеграцию1СБухфон.mdo b/SSL/src/Constants/ИспользоватьИнтеграцию1СБухфон/ИспользоватьИнтеграцию1СБухфон.mdo index ef18f660b..fea56d2ca 100644 --- a/SSL/src/Constants/ИспользоватьИнтеграцию1СБухфон/ИспользоватьИнтеграцию1СБухфон.mdo +++ b/SSL/src/Constants/ИспользоватьИнтеграцию1СБухфон/ИспользоватьИнтеграцию1СБухфон.mdo @@ -8,7 +8,7 @@ <name>ИспользоватьИнтеграцию1СБухфон</name> <synonym> <key>ru</key> - <value>Использовать интеграцию с 1С-Бухфон</value> + <value>Использовать онлайн-поддержку</value> </synonym> <type> <types>Boolean</types> diff --git a/SSL/src/Constants/ИспользоватьПроверкуКонтрагентов/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьПроверкуКонтрагентов/ValueManagerModule.bsl index 3b0d0d793..29d6abf76 100644 --- a/SSL/src/Constants/ИспользоватьПроверкуКонтрагентов/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьПроверкуКонтрагентов/ValueManagerModule.bsl @@ -15,7 +15,7 @@ // После того, как константа попадет в узел, должно быть включено // регламентное задание для периодической проверки контрагентов. - ИспользоватьСервис = Константы.ИспользоватьПроверкуКонтрагентов.Получить(); + ИспользоватьСервис = ПроверкаКонтрагентов.ПроверкаКонтрагентовВключена(); // Включаем/отключаем рег задание в зависимости от выбора пользователя. РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное( diff --git a/SSL/src/Constants/ИспользоватьПроверкуКонтрагентов/ИспользоватьПроверкуКонтрагентов.mdo b/SSL/src/Constants/ИспользоватьПроверкуКонтрагентов/ИспользоватьПроверкуКонтрагентов.mdo index 3162bfe18..c94b05f74 100644 --- a/SSL/src/Constants/ИспользоватьПроверкуКонтрагентов/ИспользоватьПроверкуКонтрагентов.mdo +++ b/SSL/src/Constants/ИспользоватьПроверкуКонтрагентов/ИспользоватьПроверкуКонтрагентов.mdo @@ -11,7 +11,10 @@ <value>Использовать сервис проверки данных по контрагенту</value> </synonym> <type> - <types>Boolean</types> + <types>Number</types> + <numberQualifiers> + <precision>1</precision> + </numberQualifiers> </type> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> diff --git a/SSL/src/Constants/ИспользоватьСервисСклоненияMorpher/ИспользоватьСервисСклоненияMorpher.mdo b/SSL/src/Constants/ИспользоватьСервисСклоненияMorpher/ИспользоватьСервисСклоненияMorpher.mdo new file mode 100644 index 000000000..084915f0b --- /dev/null +++ b/SSL/src/Constants/ИспользоватьСервисСклоненияMorpher/ИспользоватьСервисСклоненияMorpher.mdo @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:Constant xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ce5549bd-ba99-4259-86a3-36521bad59f5"> + <producedTypes> + <managerType typeId="3c582f58-4b4f-4b52-afb7-1f07e01bb4a9" valueTypeId="f5f8d564-416f-4443-a878-0a74eec52c17"/> + <valueManagerType typeId="8847f628-7d7d-401a-a6a1-ec95569aeed9" valueTypeId="64b16ed2-a885-46de-9db7-1b6ae6b957e8"/> + <valueKeyType typeId="f120fc2e-b311-5a05-9567-8980b20433a1" valueTypeId="ab92e4ae-7855-54c2-8761-38f50f3548d1"/> + </producedTypes> + <name>ИспользоватьСервисСклоненияMorpher</name> + <synonym> + <key>ru</key> + <value>Использовать сервис склонения morpher.ru</value> + </synonym> + <type> + <types>Boolean</types> + </type> + <useStandardCommands>true</useStandardCommands> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataLockControlMode>Managed</dataLockControlMode> +</mdclass:Constant> diff --git a/SSL/src/Constants/ЛогинДоступаКСервисуMorpher/ЛогинДоступаКСервисуMorpher.mdo b/SSL/src/Constants/ЛогинДоступаКСервисуMorpher/ЛогинДоступаКСервисуMorpher.mdo new file mode 100644 index 000000000..f334321ff --- /dev/null +++ b/SSL/src/Constants/ЛогинДоступаКСервисуMorpher/ЛогинДоступаКСервисуMorpher.mdo @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:Constant xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="4766c40e-6330-4c1d-a64f-0c8c672886a4"> + <producedTypes> + <managerType typeId="031152b2-51c8-4fad-949a-2a85dcbcf9b4" valueTypeId="3fc3384d-e2a4-4b89-abd7-045d95bb37ab"/> + <valueManagerType typeId="4b0bb934-5f76-4b4a-8416-c46e77c669de" valueTypeId="90d9508c-7bfd-4b96-ac69-73ee967caba6"/> + <valueKeyType typeId="d0ff0b54-1834-59be-b923-dfb302a5e971" valueTypeId="9a8ba82c-db21-5b5f-8f81-a1aa0357fcac"/> + </producedTypes> + <name>ЛогинДоступаКСервисуMorpher</name> + <synonym> + <key>ru</key> + <value>Логин доступа к сервису morpher</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers/> + </type> + <useStandardCommands>true</useStandardCommands> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataLockControlMode>Managed</dataLockControlMode> +</mdclass:Constant> diff --git a/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl b/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl index ecfdad01e..bdab594fd 100644 --- a/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl +++ b/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl @@ -1,11 +1,15 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ОписаниеПеременных + Перем ОграничениеДоступаНаУровнеЗаписейВключено; // Флажок изменения значения константы с Ложь на Истина. // Используется в обработчике события ПриЗаписи. Перем ОграничениеДоступаНаУровнеЗаписейИзменено; // Флажок изменения значения константы. // Используется в обработчике события ПриЗаписи. +#КонецОбласти + #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) diff --git a/SSL/src/Constants/ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно/ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно.mdo b/SSL/src/Constants/ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно/ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно.mdo new file mode 100644 index 000000000..726e68ca7 --- /dev/null +++ b/SSL/src/Constants/ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно/ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно.mdo @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:Constant xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="d508b3e9-4dac-40a3-9a0b-1cc76b4196ea"> + <producedTypes> + <managerType typeId="7858d15d-104a-4099-8b5e-cd069d50567e" valueTypeId="83389369-02c7-4cfe-825c-feb8049e444b"/> + <valueManagerType typeId="927d2161-5e15-4e16-8f3d-99ee6b57bd05" valueTypeId="3ef9a9f3-aeab-48da-bde7-16ba2d82cf38"/> + <valueKeyType typeId="e367ed17-825b-5e8b-9eda-38ff1ba94042" valueTypeId="6b4d244d-ce3e-5077-8814-3df5ac8355aa"/> + </producedTypes> + <name>ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно</name> + <synonym> + <key>ru</key> + <value>Отложенное обновление в главном узле завершено успешно</value> + </synonym> + <type> + <types>Boolean</types> + </type> + <useStandardCommands>true</useStandardCommands> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataLockControlMode>Managed</dataLockControlMode> +</mdclass:Constant> diff --git a/SSL/src/Constants/ОтложенноеОбновлениеЗавершеноУспешно/ОтложенноеОбновлениеЗавершеноУспешно.mdo b/SSL/src/Constants/ОтложенноеОбновлениеЗавершеноУспешно/ОтложенноеОбновлениеЗавершеноУспешно.mdo new file mode 100644 index 000000000..363e0fb82 --- /dev/null +++ b/SSL/src/Constants/ОтложенноеОбновлениеЗавершеноУспешно/ОтложенноеОбновлениеЗавершеноУспешно.mdo @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:Constant xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="63470706-f14b-4733-87c2-d1173f5d7e7a"> + <producedTypes> + <managerType typeId="965ff1d0-3251-44b9-900c-b59f2426692e" valueTypeId="c91fd792-4a7b-426f-bd60-88ffca151160"/> + <valueManagerType typeId="2a139ebf-e9bd-49b1-8849-1b723779bdbc" valueTypeId="e249a56d-35e7-41cb-9f34-46a99423666c"/> + <valueKeyType typeId="38e75899-95cb-5709-a234-33051e72313b" valueTypeId="85231779-f796-5e57-8d1a-89f918d324a0"/> + </producedTypes> + <name>ОтложенноеОбновлениеЗавершеноУспешно</name> + <synonym> + <key>ru</key> + <value>Отложенное обновление завершено успешно</value> + </synonym> + <type> + <types>Boolean</types> + </type> + <useStandardCommands>true</useStandardCommands> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataLockControlMode>Managed</dataLockControlMode> +</mdclass:Constant> diff --git a/SSL/src/Constants/ПараметрыАдресногоКлассификатора/ПараметрыАдресногоКлассификатора.mdo b/SSL/src/Constants/ПараметрыАдресногоКлассификатора/ПараметрыАдресногоКлассификатора.mdo new file mode 100644 index 000000000..aaf5ad73d --- /dev/null +++ b/SSL/src/Constants/ПараметрыАдресногоКлассификатора/ПараметрыАдресногоКлассификатора.mdo @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:Constant xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="76cdcc51-0e6a-4f9c-a115-1864998c2add"> + <producedTypes> + <managerType typeId="1c617745-8c3c-45d1-af51-d5d13c0bd21a" valueTypeId="3ed90f3c-b837-47c3-9f57-e78256710c91"/> + <valueManagerType typeId="d41cfa2a-a114-423b-a868-e281a8dc6159" valueTypeId="84e935cc-4dd5-4d18-ba98-fa5aeb42b715"/> + <valueKeyType typeId="3d888342-66ab-5b89-af80-cb41b3d348c2" valueTypeId="aefda1ac-b214-5659-8470-d21dea3e281a"/> + </producedTypes> + <name>ПараметрыАдресногоКлассификатора</name> + <synonym> + <key>ru</key> + <value>Параметры адресного классификатора</value> + </synonym> + <type> + <types>ValueStorage</types> + </type> + <useStandardCommands>true</useStandardCommands> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataLockControlMode>Managed</dataLockControlMode> +</mdclass:Constant> diff --git a/SSL/src/Constants/ПараметрыБлокировкиРаботыСВнешнимиРесурсами/ПараметрыБлокировкиРаботыСВнешнимиРесурсами.mdo b/SSL/src/Constants/ПараметрыБлокировкиРаботыСВнешнимиРесурсами/ПараметрыБлокировкиРаботыСВнешнимиРесурсами.mdo new file mode 100644 index 000000000..1ee910a4f --- /dev/null +++ b/SSL/src/Constants/ПараметрыБлокировкиРаботыСВнешнимиРесурсами/ПараметрыБлокировкиРаботыСВнешнимиРесурсами.mdo @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:Constant xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="71c3e5d3-7504-433f-9d48-7c287b2b863b"> + <producedTypes> + <managerType typeId="c0a5f322-08c0-4232-822d-07237a308c23" valueTypeId="728a1518-04a2-4755-b37d-9530040781aa"/> + <valueManagerType typeId="4a55b296-90c2-4e3a-a6b1-8fc9d0ddf270" valueTypeId="b49bda3f-7a37-464c-abb6-1a9bd92fc22f"/> + <valueKeyType typeId="05d4491f-c337-5d04-bc73-3e6a3a7a1f62" valueTypeId="f7665456-0457-5e14-85af-f4b369cd750c"/> + </producedTypes> + <name>ПараметрыБлокировкиРаботыСВнешнимиРесурсами</name> + <synonym> + <key>ru</key> + <value>Параметры блокировки работы с внешними ресурсами</value> + </synonym> + <type> + <types>ValueStorage</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataLockControlMode>Managed</dataLockControlMode> +</mdclass:Constant> diff --git a/SSL/src/Constants/ПараметрыРаботыПользователей/ValueManagerModule.bsl b/SSL/src/Constants/ПараметрыРаботыПользователей/ValueManagerModule.bsl index 1af859cae..43ba90564 100644 --- a/SSL/src/Constants/ПараметрыРаботыПользователей/ValueManagerModule.bsl +++ b/SSL/src/Constants/ПараметрыРаботыПользователей/ValueManagerModule.bsl @@ -19,7 +19,8 @@ УстановитьМонопольныйРежим(Истина); КонецЕсли; - НедоступныеРолиПоТипамПользователей = НедоступныеРолиПоТипамПользователей(); + НазначениеРолей = НазначениеРолей(); + ПроверитьНазначениеРолей(НазначениеРолей); ВсеРоли = ВсеРоли(); @@ -34,15 +35,13 @@ Параметры = СтандартныеПодсистемыСервер.ПараметрыРаботыПрограммы( "ПараметрыРаботыПользователей"); - // Проверка и обновление параметра НедоступныеРолиПоТипамПользователей. + // Проверка и обновление параметра НазначениеРолей. Сохраненные = Неопределено; - Если Параметры.Свойство("НедоступныеРолиПоТипамПользователей") Тогда - Сохраненные = Параметры.НедоступныеРолиПоТипамПользователей; + Если Параметры.Свойство("НазначениеРолей") Тогда + Сохраненные = Параметры.НазначениеРолей; - Если НЕ ОбщегоНазначения.ДанныеСовпадают( - НедоступныеРолиПоТипамПользователей, Сохраненные) Тогда - + Если НЕ ОбщегоНазначения.ДанныеСовпадают(НазначениеРолей, Сохраненные) Тогда Сохраненные = Неопределено; КонецЕсли; КонецЕсли; @@ -54,22 +53,11 @@ Возврат; КонецЕсли; СтандартныеПодсистемыСервер.УстановитьПараметрРаботыПрограммы( - "ПараметрыРаботыПользователей", - "НедоступныеРолиПоТипамПользователей", - НедоступныеРолиПоТипамПользователей); + "ПараметрыРаботыПользователей", "НазначениеРолей", НазначениеРолей); КонецЕсли; СтандартныеПодсистемыСервер.ПодтвердитьОбновлениеПараметраРаботыПрограммы( - "ПараметрыРаботыПользователей", "НедоступныеРолиПоТипамПользователей"); - - Если НЕ ТолькоПроверка Тогда - СтандартныеПодсистемыСервер.ДобавитьИзмененияПараметраРаботыПрограммы( - "ПараметрыРаботыПользователей", - "НедоступныеРолиПоТипамПользователей", - ?(Сохраненные = Неопределено, - Новый ФиксированнаяСтруктура("ЕстьИзменения", Истина), - Новый ФиксированнаяСтруктура()) ); - КонецЕсли; + "ПараметрыРаботыПользователей", "НазначениеРолей"); // Проверка и обновление параметра ВсеРоли. Сохраненные = Неопределено; @@ -116,111 +104,226 @@ #Область СлужебныеПроцедурыИФункции -Функция НедоступныеРолиПоТипамПользователей() +// Проверяет корректность заполнения назначения ролей, а также корректность прав в ролях по назначению. +Процедура ПроверитьНазначениеРолей(НазначениеРолей = Неопределено, ПроверитьВсе = Ложь) Экспорт - НедоступныеПрава = НедоступныеПраваПоТипамПользователей(); - РазрешеноИзменениеОбщихДанных = РазрешеноИзменениеОбщихДанных(); - НеразделенныеДанныеДоступныеДляИзменения = НеразделенныеДанныеДоступныеДляИзменения(); + Если НазначениеРолей = Неопределено Тогда + НазначениеРолей = НазначениеРолей(); + КонецЕсли; + ЗаголовокОшибки = + НСтр("ru = 'Ошибка в процедуре ПриОпределенииНазначенияРолей общего модуля ПользователиПереопределяемый.'"); - НедоступныеРолиПоТипамПользователей = Новый Соответствие; + ТекстОшибки = ""; - Для каждого ТипПользователей Из Перечисления.ТипыПользователей Цикл - НедоступныеРоли = Новый Соответствие; - - Для каждого Роль Из Метаданные.Роли Цикл - ИмяРоли = Роль.Имя; - Итог = Новый Структура; - НайденныеНедоступныеПрава = Новый Массив; - Если НедоступныеПрава[ТипПользователей] <> Неопределено Тогда - Для каждого ЭлементСписка Из НедоступныеПрава[ТипПользователей] Цикл - Если ПравоДоступа(ЭлементСписка.Значение, Метаданные, Роль) Тогда - НайденныеНедоступныеПрава.Добавить(ЭлементСписка.Представление); - КонецЕсли; - КонецЦикла; - Если НайденныеНедоступныеПрава.Количество() > 0 Тогда - Итог.Вставить("Права", НайденныеНедоступныеПрава); + Назначение = Новый Структура; + Для Каждого ОписаниеНазначенияРолей Из НазначениеРолей Цикл + Роли = Новый Соответствие; + Для Каждого КлючИЗначение Из ОписаниеНазначенияРолей.Значение Цикл + Роль = Метаданные.Роли.Найти(КлючИЗначение.Ключ); + Если Роль = Неопределено Тогда + ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В метаданных не найдена роль ""%1"", + |указанная в назначении %2.'"), + Роль.Имя, ОписаниеНазначенияРолей.Ключ); + Продолжить; + КонецЕсли; + Роли.Вставить(Роль, Истина); + Для Каждого ОписаниеНазначения Из Назначение Цикл + Если ОписаниеНазначения.Значение.Получить(Роль) = Неопределено Тогда + Продолжить; КонецЕсли; - КонецЕсли; - - Если РазрешеноИзменениеОбщихДанных[ТипПользователей] <> Истина Тогда - Отбор = Новый Структура("Роль", ИмяРоли); - НайденныеСтроки = НеразделенныеДанныеДоступныеДляИзменения.НайтиСтроки(Отбор); - Если НайденныеСтроки.Количество() > 0 Тогда - - ИзменяемыеНеразделенныеДанные = - НеразделенныеДанныеДоступныеДляИзменения.Скопировать( - НайденныеСтроки, "Объект, Право"); - - ИзменяемыеНеразделенныеДанные.Свернуть("Объект, Право"); - Итог.Вставить("ИзменяемыеНеразделенныеДанные", ИзменяемыеНеразделенныеДанные); - КонецЕсли; - КонецЕсли; - - Если Итог.Количество() > 0 Тогда - НедоступныеРоли.Вставить(ИмяРоли, Итог); - КонецЕсли; + ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Роль ""%1"" указана более чем в одном назначении: + |%2, %3.'"), + Роль.Имя, ОписаниеНазначенияРолей.Ключ, ОписаниеНазначения.Ключ); + КонецЦикла; КонецЦикла; - - НедоступныеРолиПоТипамПользователей.Вставить(ТипПользователей, НедоступныеРоли); + Назначение.Вставить(ОписаниеНазначенияРолей.Ключ, Роли); КонецЦикла; - Возврат ОбщегоНазначения.ФиксированныеДанные(НедоступныеРолиПоТипамПользователей, Ложь); + // Проверка ролей внешних пользователей. + НедоступныеПрава = Новый Массив; + НедоступныеПрава.Добавить("Администрирование"); + НедоступныеПрава.Добавить("АдминистрированиеРасширенийКонфигурации"); + НедоступныеПрава.Добавить("ОбновлениеКонфигурацииБазыДанных"); + НедоступныеПрава.Добавить("АдминистрированиеДанных"); + + ПроверитьСоставПравРолей(НедоступныеПрава, Назначение.ТолькоДляВнешнихПользователей, ТекстОшибки, + НСтр("ru = 'При проверке ролей только для внешних пользователей найдены ошибки:'")); + + ПроверитьСоставПравРолей(НедоступныеПрава, Назначение.СовместноДляПользователейИВнешнихПользователей, ТекстОшибки, + НСтр("ru = 'При проверке ролей совместно для пользователей и внешних пользователей найдены ошибки:'")); + + // Проверка ролей пользователей. + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Или ПроверитьВсе Тогда + Роли = Новый Соответствие; + Для Каждого Роль Из Метаданные.Роли Цикл + Если Назначение.ТолькоДляАдминистраторовСистемы.Получить(Роль) <> Неопределено + Или Назначение.ТолькоДляПользователейСистемы.Получить(Роль) <> Неопределено Тогда + Продолжить; + КонецЕсли; + Роли.Вставить(Роль, Истина); + КонецЦикла; + НедоступныеПрава = Новый Массив; + НедоступныеПрава.Добавить("Администрирование"); + НедоступныеПрава.Добавить("АдминистрированиеРасширенийКонфигурации"); + НедоступныеПрава.Добавить("ОбновлениеКонфигурацииБазыДанных"); + НедоступныеПрава.Добавить("ТолстыйКлиент"); + НедоступныеПрава.Добавить("ВнешнееСоединение"); + НедоступныеПрава.Добавить("Automation"); + НедоступныеПрава.Добавить("ИнтерактивноеОткрытиеВнешнихОбработок"); + НедоступныеПрава.Добавить("ИнтерактивноеОткрытиеВнешнихОтчетов"); + НедоступныеПрава.Добавить("РежимВсеФункции"); + + НеразделенныеДанные = НеразделенныеДанные(); + ПроверитьСоставПравРолей(НедоступныеПрава, Роли, ТекстОшибки, + НСтр("ru = 'При проверке ролей для пользователей приложения найдены ошибки:'"), НеразделенныеДанные); + КонецЕсли; + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Или ПроверитьВсе Тогда + Роли = Новый Соответствие; + Для Каждого Роль Из Метаданные.Роли Цикл + Если Назначение.ТолькоДляАдминистраторовСистемы.Получить(Роль) <> Неопределено + Или Назначение.ТолькоДляВнешнихПользователей.Получить(Роль) <> Неопределено Тогда + Продолжить; + КонецЕсли; + Роли.Вставить(Роль, Истина); + КонецЦикла; + НедоступныеПрава = Новый Массив; + НедоступныеПрава.Добавить("Администрирование"); + НедоступныеПрава.Добавить("АдминистрированиеРасширенийКонфигурации"); + НедоступныеПрава.Добавить("ОбновлениеКонфигурацииБазыДанных"); + + ПроверитьСоставПравРолей(НедоступныеПрава, Роли, ТекстОшибки, + НСтр("ru = 'При проверке ролей для пользователей найдены ошибки:'")); + + ПроверитьСоставПравРолей(НедоступныеПрава, Назначение.СовместноДляПользователейИВнешнихПользователей, ТекстОшибки, + НСтр("ru = 'При проверке ролей совместно для пользователей и внешних пользователей найдены ошибки:'")); + КонецЕсли; + + Если ЗначениеЗаполнено(ТекстОшибки) Тогда + ВызватьИсключение ЗаголовокОшибки + ТекстОшибки; + КонецЕсли; + +КонецПроцедуры + +// Возвращает назначение ролей, определенное разработчиком. +// См. комментарий к процедуре ПриОпределенииНазначенияРолей общего модуля ПользователиПереопределяемый. +// +// Возвращаемое значение: +// ФиксированнаяСтруктура - со свойствами: +// * ТолькоДляАдминистраторовСистемы - ФиксированноеСоответствие - со свойствами: +// * Ключ - Строка - имя роли. +// * Значение - Булево - Истина. +// * ТолькоДляПользователейСистемы - ФиксированноеСоответствие - со свойствами: +// * Ключ - Строка - имя роли. +// * Значение - Булево - Истина. +// * ТолькоДляВнешнихПользователей - ФиксированноеСоответствие - со свойствами: +// * Ключ - Строка - имя роли. +// * Значение - Булево - Истина. +// * СовместноДляПользователейИВнешнихПользователей - ФиксированноеСоответствие - со свойствами: +// * Ключ - Строка - имя роли. +// * Значение - Булево - Истина. +// +Функция НазначениеРолей() Экспорт + + НазначениеРолей = Пользователи.НазначениеРолей(); + + Назначение = Новый Структура; + Для Каждого ОписаниеНазначенияРолей Из НазначениеРолей Цикл + Имена = Новый Соответствие; + Для Каждого Имя Из ОписаниеНазначенияРолей.Значение Цикл + Имена.Вставить(Имя, Истина); + КонецЦикла; + Назначение.Вставить(ОписаниеНазначенияРолей.Ключ, Новый ФиксированноеСоответствие(Имена)); + КонецЦикла; + + Возврат Новый ФиксированнаяСтруктура(Назначение); КонецФункции -// Возвращает таблицу полных имен неразделенных объектов метаданных и -// соответствующих им наборов прав доступа. -// -// Возвращаемое значение: -// ТаблицаЗначений с колонками: -// * Роль - Строка - Имя роли. -// * Объект - Строка - Полное имя объекта метаданных. -// * Право - Строка - Имя права доступа. -// -Функция НеразделенныеДанныеДоступныеДляИзменения() Экспорт +Процедура ПроверитьСоставПравРолей(НедоступныеПрава, ОписаниеРолей, ОбщийТекстОшибки, ЗаголовокОшибки, НеразделенныеДанные = Неопределено) - ОбщаяТаблица = Новый ТаблицаЗначений; - ОбщаяТаблица.Колонки.Добавить("Роль", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0, ДопустимаяДлина.Переменная))); - ОбщаяТаблица.Колонки.Добавить("Объект", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0, ДопустимаяДлина.Переменная))); - ОбщаяТаблица.Колонки.Добавить("Право", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0, ДопустимаяДлина.Переменная))); + ТекстОшибки = ""; - Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса") Тогда - Возврат ОбщаяТаблица; + Для Каждого ОписаниеРоли Из ОписаниеРолей Цикл + Роль = ОписаниеРоли.Ключ; + Для Каждого НедоступноеПраво Из НедоступныеПрава Цикл + Если ПравоДоступа(НедоступноеПраво, Метаданные, Роль) Тогда + ТекстОшибки = ТекстОшибки + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Роль ""%1"" содержит недоступное право %2.'"), + Роль, НедоступноеПраво); + КонецЕсли; + КонецЦикла; + Если НеразделенныеДанные = Неопределено Тогда + Продолжить; + КонецЕсли; + Для Каждого СвойстваДанных Из НеразделенныеДанные Цикл + ОбъектМетаданных = СвойстваДанных.Значение; + Если Не ПравоДоступа("Чтение", ОбъектМетаданных, Роль) Тогда + Продолжить; + КонецЕсли; + Если ПравоДоступа("Изменение", ОбъектМетаданных, Роль) Тогда + ТекстОшибки = ТекстОшибки + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Роль ""%1"" содержит право Изменение неразделенного объекта %2.'"), + Роль, ОбъектМетаданных.ПолноеИмя()); + КонецЕсли; + Если СвойстваДанных.Представление = "" Тогда + Продолжить; // Не ссылочный объект метаданных. + КонецЕсли; + Если ПравоДоступа("Добавление", ОбъектМетаданных, Роль) Тогда + ТекстОшибки = ТекстОшибки + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Роль ""%1"" содержит право Добавление неразделенного объекта %2.'"), + Роль, ОбъектМетаданных.ПолноеИмя()); + КонецЕсли; + Если ПравоДоступа("Удаление", ОбъектМетаданных, Роль) Тогда + ТекстОшибки = ТекстОшибки + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Роль ""%1"" содержит право Удаление неразделенного объекта %2.'"), + Роль, ОбъектМетаданных.ПолноеИмя()); + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Если ЗначениеЗаполнено(ТекстОшибки) Тогда + ОбщийТекстОшибки = ОбщийТекстОшибки + Символы.ПС + Символы.ПС + + ЗаголовокОшибки + ТекстОшибки; КонецЕсли; - ВидыМетаданных = Новый Массив; - ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.ПланыОбмена, Истина)); - ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.Константы, Ложь)); - ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.Справочники, Истина)); - ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.Последовательности, Ложь)); - ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.Документы, Истина)); - ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.ПланыВидовХарактеристик, Истина)); - ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.ПланыСчетов, Истина)); - ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.ПланыВидовРасчета, Истина)); - ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.БизнесПроцессы, Истина)); - ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.Задачи, Истина)); - ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.РегистрыСведений, Ложь)); - ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.РегистрыНакопления, Ложь)); - ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.РегистрыБухгалтерии, Ложь)); - ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.РегистрыРасчета, Ложь)); +КонецПроцедуры + +Функция НеразделенныеДанные() - ПроверяемыеПрава = Новый Массив; - ПроверяемыеПрава.Добавить(Новый Структура("Имя, Ссылочное", "Изменение", Ложь)); - ПроверяемыеПрава.Добавить(Новый Структура("Имя, Ссылочное", "Добавление", Истина)); - ПроверяемыеПрава.Добавить(Новый Структура("Имя, Ссылочное", "Удаление", Истина)); + Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса") Тогда + Возврат Неопределено; + КонецЕсли; + + Список = Новый СписокЗначений; + + ВидыМетаданных = Новый Массив; + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.ПланыОбмена, Истина)); + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.Константы, Ложь)); + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.Справочники, Истина)); + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.Последовательности, Ложь)); + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.Документы, Истина)); + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.ПланыВидовХарактеристик, Истина)); + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.ПланыСчетов, Истина)); + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.ПланыВидовРасчета, Истина)); + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.БизнесПроцессы, Истина)); + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.Задачи, Истина)); + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.РегистрыСведений, Ложь)); + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.РегистрыНакопления, Ложь)); + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.РегистрыБухгалтерии, Ложь)); + ВидыМетаданных.Добавить(Новый Структура("Вид, Ссылочный" , Метаданные.РегистрыРасчета, Ложь)); УстановитьПривилегированныйРежим(Истина); МодульРаботаВМоделиСервисаПовтИсп = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервисаПовтИсп"); МодельДанных = МодульРаботаВМоделиСервисаПовтИсп.ПолучитьМодельДанныхОбласти(); - РазделенныеОбъектыМетаданных = Новый Соответствие(); + РазделенныеОбъектыМетаданных = Новый Соответствие; Для Каждого ЭлементМоделиДанных Из МодельДанных Цикл - - РазделенныеОбъектыМетаданных.Вставить( - Метаданные.НайтиПоПолномуИмени(ЭлементМоделиДанных.Ключ), Истина); - + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ЭлементМоделиДанных.Ключ); + РазделенныеОбъектыМетаданных.Вставить(ОбъектМетаданных, Истина); КонецЦикла; Для Каждого ОписаниеВида Из ВидыМетаданных Цикл // По видам метаданных. @@ -229,78 +332,11 @@ Если РазделенныеОбъектыМетаданных.Получить(ОбъектМетаданных) <> Неопределено Тогда Продолжить; КонецЕсли; - - Для каждого Роль Из Метаданные.Роли Цикл - - Если Не ПравоДоступа("Чтение", ОбъектМетаданных, Роль) Тогда - Продолжить; - КонецЕсли; - - Для каждого ОписаниеПрава Из ПроверяемыеПрава Цикл - Если НЕ ОписаниеПрава.Ссылочное - ИЛИ ОписаниеВида.Ссылочный Тогда - - Если ПравоДоступа(ОписаниеПрава.Имя, ОбъектМетаданных, Роль) Тогда - // Общая таблица объектов по ролям. - СтрокаПрава = ОбщаяТаблица.Добавить(); - СтрокаПрава.Роль = Роль.Имя; - СтрокаПрава.Объект = ОбъектМетаданных.ПолноеИмя(); - СтрокаПрава.Право = ОписаниеПрава.Имя; - КонецЕсли; - - КонецЕсли; - КонецЦикла; - - КонецЦикла; + Список.Добавить(ОбъектМетаданных, ?(ОписаниеВида.Ссылочный, "Ссылочный", "")); КонецЦикла; КонецЦикла; - ОбщаяТаблица.Индексы.Добавить("Роль"); - Возврат ОбщаяТаблица; - -КонецФункции - -Функция НедоступныеПраваПоТипамПользователей() - - НедоступныеПрава = Новый Соответствие; - - Права = Новый СписокЗначений; - НедоступныеПрава.Вставить(Перечисления.ТипыПользователей.ВнешнийПользователь, Права); - Права.Добавить("Администрирование", НСтр("ru = 'Администрирование'")); - Права.Добавить("АдминистрированиеРасширенийКонфигурации", НСтр("ru = 'Администрирование расширений конфигурации'")); - Права.Добавить("АдминистрированиеДанных", НСтр("ru = 'Администрирование данных'")); - - Права = Новый СписокЗначений; - НедоступныеПрава.Вставить(Перечисления.ТипыПользователей.ПользовательЛокальногоРешения, Права); - Права.Добавить("Администрирование", НСтр("ru = 'Администрирование'")); - Права.Добавить("АдминистрированиеРасширенийКонфигурации", НСтр("ru = 'Администрирование расширений конфигурации'")); - Права.Добавить("ОбновлениеКонфигурацииБазыДанных", НСтр("ru = 'Обновление конфигурации базы данных'")); - - Права = Новый СписокЗначений; - НедоступныеПрава.Вставить(Перечисления.ТипыПользователей.ПользовательОбластиДанных, Права); - Права.Добавить("Администрирование", НСтр("ru = 'Администрирование'")); - Права.Добавить("АдминистрированиеРасширенийКонфигурации", НСтр("ru = 'Администрирование расширений конфигурации'")); - Права.Добавить("ОбновлениеКонфигурацииБазыДанных", НСтр("ru = 'Обновление конфигурации базы данных'")); - Права.Добавить("ТолстыйКлиент", НСтр("ru = 'Толстый клиент'")); - Права.Добавить("ВнешнееСоединение", НСтр("ru = 'Внешнее соединение'")); - Права.Добавить("Automation", НСтр("ru = 'Automation'")); - Права.Добавить("ИнтерактивноеОткрытиеВнешнихОбработок", НСтр("ru = 'Интерактивное открытие внешних обработок'")); - Права.Добавить("ИнтерактивноеОткрытиеВнешнихОтчетов", НСтр("ru = 'Интерактивное открытие внешних отчетов'")); - Права.Добавить("РежимВсеФункции", НСтр("ru = 'Режим все функции'")); - - Возврат НедоступныеПрава; - -КонецФункции - -Функция РазрешеноИзменениеОбщихДанных() - - Итог = Новый Соответствие; - - Итог.Вставить(Перечисления.ТипыПользователей.ВнешнийПользователь, Истина); - Итог.Вставить(Перечисления.ТипыПользователей.ПользовательЛокальногоРешения, Истина); - Итог.Вставить(Перечисления.ТипыПользователей.ПользовательОбластиДанных, Ложь); - - Возврат Итог; + Возврат Список; КонецФункции @@ -316,7 +352,7 @@ ИмяРоли = Роль.Имя; Массив.Добавить(ИмяРоли); - Соответствие.Вставить(ИмяРоли, Истина); + Соответствие.Вставить(ИмяРоли, Роль.Синоним); Таблица.Добавить().Имя = ИмяРоли; КонецЦикла; diff --git a/SSL/src/Constants/СведенияОБлокируемыхОбъектах/СведенияОБлокируемыхОбъектах.mdo b/SSL/src/Constants/СведенияОБлокируемыхОбъектах/СведенияОБлокируемыхОбъектах.mdo new file mode 100644 index 000000000..6c9304903 --- /dev/null +++ b/SSL/src/Constants/СведенияОБлокируемыхОбъектах/СведенияОБлокируемыхОбъектах.mdo @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:Constant xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="9dd57f32-90a1-4a1d-bc2a-c1b12461d963"> + <producedTypes> + <managerType typeId="9aadaab8-9a54-4d32-8ab1-5ccca27aa31b" valueTypeId="8aeb4ef6-e3af-47f2-adc3-535f71b74b17"/> + <valueManagerType typeId="4da1c50e-2f58-4252-b920-d6a3dd20d535" valueTypeId="fc5521ff-b2b9-44d6-8926-eb05af8a983a"/> + <valueKeyType typeId="f37065b5-f1de-5514-a822-06d7f1ef4c76" valueTypeId="4f5b958b-8c5f-54f7-83e8-47c5ff78b3fc"/> + </producedTypes> + <name>СведенияОБлокируемыхОбъектах</name> + <synonym> + <key>ru</key> + <value>Сведения о блокируемых объектах</value> + </synonym> + <type> + <types>ValueStorage</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataLockControlMode>Managed</dataLockControlMode> +</mdclass:Constant> diff --git a/SSL/src/Constants/СинхронизироватьФайлы/СинхронизироватьФайлы.mdo b/SSL/src/Constants/СинхронизироватьФайлы/СинхронизироватьФайлы.mdo new file mode 100644 index 000000000..a0e25d73c --- /dev/null +++ b/SSL/src/Constants/СинхронизироватьФайлы/СинхронизироватьФайлы.mdo @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:Constant xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="eb276904-cad7-4401-bb78-2d13946291f1"> + <producedTypes> + <managerType typeId="3ce33937-84b3-48e3-bf82-90c4ba17a18a" valueTypeId="25e2729b-1e85-4bad-ba82-0f2cc7b76dcd"/> + <valueManagerType typeId="47dc5dd2-734e-4d64-9063-7f9509bdab02" valueTypeId="da297229-fa3b-4fe8-acec-01de8db0270b"/> + <valueKeyType typeId="dbb3ed74-296f-5616-b0ad-cd4f1e14e926" valueTypeId="48daeecf-8b2b-500c-b2b4-942cdd426dad"/> + </producedTypes> + <name>СинхронизироватьФайлы</name> + <synonym> + <key>ru</key> + <value>Синхронизировать файлы с облачными сервисами</value> + </synonym> + <type> + <types>Boolean</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataLockControlMode>Managed</dataLockControlMode> +</mdclass:Constant> diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Help/ru.html b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Help/ru.html index b051ca6ea..31ae5d64a 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для управления автоматическим извлечением текстов.</p> <p>Если один или несколько рабочих процессов сервера работают под Linux, а часть или все клиенты подключаются с помощью веб-клиента, то в информационной базе могут быть добавлены <a href="Catalog.Файлы/Help">файлы</a>, текст из которых не извлечен, и соответственно эти файлы не могут быть найдены <a href="DataProcessor.ПолнотекстовыйПоискВДанных/Help">полнотекстовым поиском</a> по содержимому. В этом случае на одном из клиентских компьютеров, работающих под управлением ОС Microsoft Windows, нужно запустить тонкий или толстый клиент, и на нем выполнить команду <strong>Управление полнотекстовым поиском - Запустить извлечение текстов</strong> в разделе <strong>Администрирование - Поддержка и обслуживание - Регламентные операции</strong>. Также можно выполнить команду <strong>Автоматическое извлечение текстов</strong> панели действий раздела <strong>Органайзер</strong>.</p> <h3>Настройка параметров</h3> diff --git a/SSL/src/DataProcessors/АктивныеПользователи/Forms/АктивныеПользователи/Module.bsl b/SSL/src/DataProcessors/АктивныеПользователи/Forms/АктивныеПользователи/Module.bsl index 23908dbd0..37e7549af 100644 --- a/SSL/src/DataProcessors/АктивныеПользователи/Forms/АктивныеПользователи/Module.bsl +++ b/SSL/src/DataProcessors/АктивныеПользователи/Forms/АктивныеПользователи/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ПараметрыАдминистрирования, ЗапрашиватьПараметрыАдминистрированияИБ; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -131,8 +135,8 @@ Если ЗапрашиватьПараметрыАдминистрированияИБ Тогда ОписаниеОповещения = Новый ОписаниеОповещения("ЗавершитьСеансПродолжение", ЭтотОбъект); - ЗаголовокФормы = Нстр("ru = 'Завершение сеанса'"); - ПоясняющаяНадпись = Нстр("ru = 'Для завершения сеанса необходимо ввести параметры + ЗаголовокФормы = НСтр("ru = 'Завершение сеанса'"); + ПоясняющаяНадпись = НСтр("ru = 'Для завершения сеанса необходимо ввести параметры |администрирования кластера серверов'"); СоединенияИБКлиент.ПоказатьПараметрыАдминистрирования(ОписаниеОповещения, Ложь, Истина, ПараметрыАдминистрирования, ЗаголовокФормы, ПоясняющаяНадпись); @@ -513,7 +517,7 @@ Иначе НомерСеанса = ?(ДополнительныеПараметры.Свойство("НомераСеансов"), - ДополнительныеПараметры.НомераСеансов[0], ДополнительныеПараметры.Свойство("НомерСеанса")); + ДополнительныеПараметры.НомераСеансов[0], ДополнительныеПараметры.НомерСеанса); ТекстОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Сеанс %1 завершен.'"), НомерСеанса); ПоказатьОповещениеПользователя(НСтр("ru = 'Завершение сеанса'"),, ТекстОповещения); diff --git a/SSL/src/DataProcessors/АктивныеПользователи/Help/ru.html b/SSL/src/DataProcessors/АктивныеПользователи/Help/ru.html index 59f557a44..b4d2c1d2b 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Содержит список <a href="Catalog.Пользователи/Help">пользователей</a>, работающих в данный момент времени в программе. </p> <p>В этом списке отображаются не только пользователи, работающие с информационной базой при помощи приложений "Тонкий клиент", "Веб-клиент" или "Конфигуратор", но и такие пользователи как "COM-соединение", "WS-соединение", "Фоновое задание" и т.п.</p> <p>Список выводится по соответствующей команде раздела <strong>Администрирование - Поддержка и обслуживание</strong>.</p> diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Form.form b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Form.form index 9e3dec575..a64e6ffb3 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Form.form +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Form.form @@ -487,6 +487,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -549,6 +550,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -595,6 +597,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -918,6 +921,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Module.bsl b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Module.bsl index 17e73c61b..e3a6bc01c 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Module.bsl +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/БлокировкаСоединенийСИнформационнойБазой/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ПараметрыАдминистрирования, ТекущееЗначениеБлокировки; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -44,7 +48,7 @@ &НаСервере Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) - ИнформацияОБлокирующихСеансах = СоединенияИБ.ИнформацияОБлокирующихСеансах(Нстр("ru = 'Блокировка не установлена.'")); + ИнформацияОБлокирующихСеансах = СоединенияИБ.ИнформацияОБлокирующихСеансах(НСтр("ru = 'Блокировка не установлена.'")); Если ИнформацияОБлокирующихСеансах.ИмеютсяБлокирующиеСеансы Тогда ВызватьИсключение ИнформацияОБлокирующихСеансах.ТекстСообщения; @@ -202,8 +206,8 @@ Если Не ЭтоФайловаяБаза И Не ВведеныКорректныеПараметрыАдминистрирования И СеансЗапущенБезРазделителей Тогда ОписаниеОповещения = Новый ОписаниеОповещения("ПослеПолученияПараметровАдминистрированияПриБлокировке", ЭтотОбъект); - ЗаголовокФормы = Нстр("ru = 'Управление блокировкой сеансов'"); - ПоясняющаяНадпись = Нстр("ru = 'Для управления блокировкой сеансов необходимо ввести + ЗаголовокФормы = НСтр("ru = 'Управление блокировкой сеансов'"); + ПоясняющаяНадпись = НСтр("ru = 'Для управления блокировкой сеансов необходимо ввести |параметры администрирования кластера серверов и информационной базы'"); СоединенияИБКлиент.ПоказатьПараметрыАдминистрирования(ОписаниеОповещения, Истина, Истина, ПараметрыАдминистрирования, ЗаголовокФормы, ПоясняющаяНадпись); @@ -222,8 +226,8 @@ Если Не ЭтоФайловаяБаза И Не ВведеныКорректныеПараметрыАдминистрирования И СеансЗапущенБезРазделителей Тогда ОписаниеОповещения = Новый ОписаниеОповещения("ПослеПолученияПараметровАдминистрированияПриОтменеБлокировки", ЭтотОбъект); - ЗаголовокФормы = Нстр("ru = 'Управление блокировкой сеансов'"); - ПоясняющаяНадпись = Нстр("ru = 'Для управления блокировкой сеансов необходимо ввести + ЗаголовокФормы = НСтр("ru = 'Управление блокировкой сеансов'"); + ПоясняющаяНадпись = НСтр("ru = 'Для управления блокировкой сеансов необходимо ввести |параметры администрирования кластера серверов и информационной базы'"); СоединенияИБКлиент.ПоказатьПараметрыАдминистрирования(ОписаниеОповещения, Истина, Истина, ПараметрыАдминистрирования, ЗаголовокФормы, ПоясняющаяНадпись); @@ -240,8 +244,8 @@ Процедура ПараметрыАдминистрирования(Команда) ОписаниеОповещения = Новый ОписаниеОповещения("ПослеПолученияПараметровАдминистрирования", ЭтотОбъект); - ЗаголовокФормы = Нстр("ru = 'Управление блокировкой регламентных заданий'"); - ПоясняющаяНадпись = Нстр("ru = 'Для управления блокировкой регламентных заданий необходимо + ЗаголовокФормы = НСтр("ru = 'Управление блокировкой регламентных заданий'"); + ПоясняющаяНадпись = НСтр("ru = 'Для управления блокировкой регламентных заданий необходимо |ввести параметры администрирования кластера серверов и информационной базы'"); СоединенияИБКлиент.ПоказатьПараметрыАдминистрирования(ОписаниеОповещения, Истина, Истина, ПараметрыАдминистрирования, ЗаголовокФормы, ПоясняющаяНадпись); diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Form.form b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Form.form index 57bdae90b..f3fde801c 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Form.form +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Forms/ОшибкаУстановкиМонопольногоРежима/Form.form @@ -267,6 +267,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -460,6 +461,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Help/ru.html b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Help/ru.html index b3391c528..de27b9f0f 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Для администратора в программе предусмотрена возможность завершать работу всех активных <a href="Catalog.Пользователи/Help">пользователей</a> (включая <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a>, инициировавшего блокировку) и блокировать вход в программу на определенный период времени. </p> <p>Такая возможность востребована для проведения профилактических или срочных работ в программе. Обычно такие работы проводят в ночные часы, чтобы не затруднять работу в программе других пользователей. Однако бывают различные внеплановые ситуации. Например, необходимо провести обновление версии программы, восстановление программы после сбоя электроснабжения, резервное копирование информационной базы, или главному бухгалтеру необходимо срочно рассчитать сложный отчет. Большинство этих работ не могут быть проведены, если пользователи продолжают работать в программе.</p> <p>При работе в клиент-серверном режиме имеется возможность блокировки работы <a href="DataProcessor.РегламентныеИФоновыеЗадания/Help">регламентных заданий</a>.</p> diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Form.form index 463bf1ebc..f932dcea0 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Form.form +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Form.form @@ -4,6 +4,81 @@ <key>ru</key> <value>Адрес</value> + + ГруппаИсторическийАдрес + 340 + + ИсторическийАдрес + 342 + true + true + + true + + + ИсторическийАдрес + + None + + ИсторическийАдресРасширеннаяПодсказка + 344 + Label + true + true + + Left + + + + ИсторическийАдресКонтекстноеМеню + 343 + true + + LabelField + Enter + true + Left + true + + true + true + + Style.ToolTipBackColor + + + + true + + true + + + <key>ru</key> + <value>Группа исторический адрес</value> + + + ru + Группа исторический адрес + + + ГруппаИсторическийАдресРасширеннаяПодсказка + 341 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + СтранаАдреса 35 @@ -614,15 +689,24 @@ AutoComplete ДомАвтоПодбор + + StartChoice + ДомНачалоВыбора + + + ChoiceProcessing + ДомОбработкаВыбора + 7 true true true - true + true true true true true + OnValueChange Normal @@ -759,11 +843,23 @@ Left true + + AutoComplete + СтроениеАвтоПодбор + + + StartChoice + СтроениеНачалоВыбора + + + ChoiceProcessing + СтроениеОбработкаВыбора + 7 true true true - true + true true true true @@ -1192,6 +1288,44 @@ СервисДоступен 274 + + СообщениеОбОбращенииВФНСРоссия + 345 + + <key>ru</key> + <value>Рекомендуется дополнительно <link http://fias.nalog.ru/ExtendedSearchPage.aspx>проверить адрес</> +на сайте ФИАС. +О некорректных или неполных адресных сведениях +рекомендуется сообщать в службу +<link https://www.nalog.ru/rn77/service/service_feedback/?service=22>технической поддержки</> online-сервисов ФНС России.</value> + + true + + true + + + СообщениеОбОбращенииВФНСРоссияРасширеннаяПодсказка + 347 + Label + true + true + + Left + + + + СообщениеОбОбращенииВФНСРоссияКонтекстноеМеню + 346 + true + + true + Label + true + true + + Left + + СервисДоступенДекорация 276 @@ -1218,8 +1352,6 @@ Label true true - true - true Left @@ -1251,6 +1383,7 @@ Vertical auto + false @@ -1423,6 +1556,7 @@ Page auto + false true @@ -1609,6 +1743,7 @@ Page Vertical + false @@ -2356,6 +2491,7 @@ Page Vertical + false true @@ -2414,6 +2550,7 @@ Vertical auto + false @@ -2498,6 +2635,7 @@ Vertical auto + false true @@ -2652,16 +2790,16 @@ ФормаВводАдресаВСвободнойФормеВсеДействия 233 - ВвестиАдресВСвободнойФормеВсеДействия - 235 + ПоказатьИсториюВсеДействия + 324 true true true - ВвестиАдресВСвободнойФормеВсеДействияРасширеннаяПодсказка - 236 + ПоказатьИсториюВсеДействияРасширеннаяПодсказка + 325 Label true true @@ -2669,14 +2807,97 @@ Left - Form.Command.ВвестиАдресВСвободнойФорме + Form.Command.ИсторияИзменений Normal Auto true true UserCmds Auto - InCommandBarAndInAdditionalSubmenu + + + ПоказатьАдресНаВсеДействия + 334 + + АдресНаЯндексКарты + 336 + true + true + + true + + + АдресНаЯндексКартыРасширеннаяПодсказка + 337 + Label + true + true + + Left + + + Form.Command.АдресНаЯндексКарты + Normal + Auto + true + true + UserCmds + Auto + + + АдресНаGoogleMaps + 338 + true + true + + true + + + АдресНаGoogleMapsРасширеннаяПодсказка + 339 + Label + true + true + + Left + + + Form.Command.АдресНаGoogleMaps + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Показать адрес на</value> + + + ru + Показать адрес на все действия + + + ПоказатьАдресНаВсеДействияРасширеннаяПодсказка + 335 + Label + true + true + + Left + + + Popup + + Auto + Normal + true true @@ -2704,8 +2925,35 @@ - ФормаВсеДействияИзмененияАдреса1 + ФормаИзмененияАдресаВсеДействия 237 + + ВвестиАдресВСвободнойФормеВсеДействия + 235 + true + true + + true + + + ВвестиАдресВСвободнойФормеВсеДействияРасширеннаяПодсказка + 236 + Label + true + true + + Left + + + Form.Command.ВвестиАдресВСвободнойФорме + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + ЗаполнитьПоПочтовомуИндексуВсеДействия 239 @@ -2765,8 +3013,16 @@ true + + <key>ru</key> + <value>Форма изменения адреса все действия</value> + + + ru + Форма изменения адреса все действия + - ФормаВсеДействияИзмененияАдреса1РасширеннаяПодсказка + ФормаИзмененияАдресаВсеДействияРасширеннаяПодсказка 238 Label true @@ -2919,8 +3175,109 @@ - ФормаВводАдресаВСвободнойФорме + ФормаВводАдресаПоказать 101 + + ИсторияИзменений + 326 + true + true + + true + + + ИсторияИзмененийРасширеннаяПодсказка + 327 + Label + true + true + + Left + + + Form.Command.ИсторияИзменений + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + АдресНаКартеЯндексКартах + 328 + true + true + + true + + + АдресНаКартеЯндексКартахРасширеннаяПодсказка + 329 + Label + true + true + + Left + + + Form.Command.АдресНаЯндексКарты + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ПоказатьНаКартеGoogle + 330 + true + true + + true + + + ПоказатьНаКартеGoogleРасширеннаяПодсказка + 331 + Label + true + true + + Left + + + Form.Command.АдресНаGoogleMaps + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + ФормаВводАдресаПоказатьРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + + + + ФормаВсеДействияИзмененияАдреса + 152 ВвестиАдресВСвободнойФорме 102 @@ -2948,34 +3305,6 @@ Auto InAdditionalSubmenu - true - true - - true - - - <key>ru</key> - <value>Форма ввод адреса в свободной форме</value> - - - ru - Форма ввод адреса в свободной форме - - - ФормаВводАдресаВСвободнойФормеExtendedTooltip - 144 - Label - true - true - - Left - - - - - - ФормаВсеДействияИзмененияАдреса - 152 ЗаполнитьПоПочтовомуИндексу 150 @@ -4092,6 +4421,219 @@ true + + ИсторическийАдрес + + <key>ru</key> + <value>Исторический адрес</value> + + 45 + + String + + + + true + + + true + + + + КонтактнаяИнформацияОписаниеДополнительныхРеквизитов + + <key>ru</key> + <value>Контактная информация описание дополнительных реквизитов</value> + + 47 + + ValueTable + + + true + + + true + + + ИмяРеквизита + + <key>ru</key> + <value>Имя реквизита</value> + + 1 + + String + + + + true + + + true + + + + Вид + + <key>ru</key> + <value>Вид</value> + + 2 + + CatalogRef.ВидыКонтактнойИнформации + + + true + + + true + + + + Тип + + <key>ru</key> + <value>Тип</value> + + 3 + + EnumRef.ТипыКонтактнойИнформации + + + true + + + true + + + + ЗначенияПолей + + <key>ru</key> + <value>Значения полей</value> + + 4 + + ValueList + 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 + + Date + + Date + + + + true + + + true + + + + ЭтоИсторическаяКонтактнаяИнформация + + <key>ru</key> + <value>Это историческая контактная информация</value> + + 9 + + Boolean + + + true + + + true + + + + ХранитьИсториюИзменений + + <key>ru</key> + <value>Хранить историю изменений</value> + + 11 + + Boolean + + + true + + + true + + + КомандаОК @@ -4101,7 +4643,7 @@ <id>1</id> <toolTip> <key>ru</key> - <value>Подвердить изменения и закрыть форму</value> + <value>Подтвердить изменения и закрыть форму</value> </toolTip> <use> <common>true</common> @@ -4306,6 +4848,81 @@ <currentRowUse>DontUse</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <formCommands> + <name>ИсторияИзменений</name> + <title> + <key>ru</key> + <value>История изменений...</value> + + 10 + + ru + История изменений + + + true + + + CommonPicture.ИсторияИзменений + + + + ИсторияИзменений + + + DontUse + Auto + + + АдресНаЯндексКарты + + <key>ru</key> + <value>Адрес на Яндекс.Картах</value> + + 11 + + ru + Адрес на яндекс карты + + + true + + + CommonPicture.ЯндексКарты + + + + АдресНаЯндексКарты + + + DontUse + Auto + + + АдресНаGoogleMaps + + <key>ru</key> + <value>Адрес на Google Maps</value> + + 12 + + ru + Адрес на google maps + + + true + + + CommonPicture.GoogleMaps + + + + АдресНаGoogleMaps + + + DontUse + Auto + ВидКонтактнойИнформации diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html index 7f9c997b3..dad65c6f0 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Help/ru.html @@ -1,15 +1,16 @@ +

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

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

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

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

              • Для ввода адреса "Санкт-Петербург, Пискаревский проспект, дом 2, корпус 2, литера Щ, офис 12345" необходимо: @@ -25,15 +26,23 @@
              • В поле Корпус написать "16".
              • Нажмите  Добавить, выберите из выпадающего списка поле Строение, проставьте в поле "1".

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            См. также:

            • Виды контактной информации; diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl index db9c55a3e..90f1f54f4 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводАдреса/Module.bsl @@ -38,7 +38,7 @@ ЕстьКлассификатор = УправлениеКонтактнойИнформациейСлужебныйПовтИсп.АдресныйКлассификаторДоступен(); ЭтоТакси = ТекущийВариантИнтерфейсаКлиентскогоПриложения() = ВариантИнтерфейсаКлиентскогоПриложения.Такси; // Группа команд "все действия" зависит от интерфейса. - УстановитьВозможностьПодбораПоИндексу(ЭтоВебСервис); + УстановитьВозможностьПодбораИндексаИНомеровДомов(ЭтоВебСервис); Параметры.Свойство("ВозвращатьСписокЗначений", ВозвращатьСписокЗначений); // Внутренняя инициализация @@ -49,6 +49,24 @@ ВидКонтактнойИнформации = УправлениеКонтактнойИнформациейСлужебный.СтруктураВидаКонтактнойИнформации(Параметры.ВидКонтактнойИнформации); + Если ВидКонтактнойИнформации.ХранитьИсториюИзменений Тогда + Если Параметры.Свойство("ДействуетС") И Параметры.Свойство("ДействуетДо") Тогда + ОтобразитьИнформациюОДатахДействияАдреса(Параметры.ДействуетС, Параметры.ДействуетДо); + КонецЕсли; + Если Параметры.Свойство("КонтактнаяИнформацияОписаниеДополнительныхРеквизитов") Тогда + Для каждого СтрокаКИ Из Параметры.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл + НоваяСтрока = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаКИ); + КонецЦикла; + Иначе + Элементы.ИсторияИзменений.Видимость = Ложь; + Элементы.ПоказатьИсториюВсеДействия.Видимость = Ложь; + КонецЕсли; + Иначе + Элементы.ИсторияИзменений.Видимость = Ложь; + Элементы.ПоказатьИсториюВсеДействия.Видимость = Ложь; + КонецЕсли; + Если ВидКонтактнойИнформации.ПроверятьПоФИАС Тогда Команды.ПроверитьЗаполнениеАдреса.Подсказка = НСтр("ru = 'Проверить заполнение адреса в формате ФИАС'"); Иначе @@ -100,7 +118,7 @@ КодСтраны = СтранаРоссия.Код; КонецЕсли; - ОтрисоватьДополнительныеЗданияИПомещения(); + ОтобразитьДополнительныеЗданияИПомещения(); Если АдресТолькоРоссийский Тогда Элементы.Страна.Доступность = Ложь; @@ -169,6 +187,7 @@ Элементы.ФормаОчиститьАдрес.Видимость = Ложь; Элементы.ЗагрузитьКлассификатор.Видимость = Ложь; Элементы.ИзменитьФорму.Видимость = Ложь; + Элементы.ФормаВводАдресаПоказать.Видимость = Ложь; КонецЕсли; ДоступностьКлассификатора = Неопределено; @@ -276,14 +295,23 @@ Если МожноЗагружатьКлассификатор И Страна = СтранаРоссия Тогда Если СтрДлина(СокрЛП(Текст)) = 6 И Индекс <> Текст И Страна = СтранаРоссия Тогда - Контекст = КонтекстФормыКлиент(); Если ЕстьКлассификатор Тогда ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("Индекс", СокрЛП(Текст)); ПараметрыФормы.Вставить("СкрыватьНеактуальныеАдреса", СкрыватьНеактуальныеАдреса); ПараметрыФормы.Вставить("ФорматАдреса", ВидКонтактнойИнформации.ФорматАдреса); + ПараметрыФормы.Вставить("ВыборАдресаПоПочтовомуИндексу", Истина); + ПараметрыВыполнения = Новый Структура("Уникальность, Окно, НавигационнаяСсылка, Источник", Ложь); - ОткрытьФорму("Обработка.ВводКонтактнойИнформации.Форма.ВыборАдресаПоПочтовомуИндексу", ПараметрыФормы, Элементы.Индекс); + Если НаличиеИндексаВКлассификаторе(Число(Текст)) Тогда + ОткрытьФорму("Обработка.ВводКонтактнойИнформации.Форма.ВыборАдресаПоПочтовомуИндексу", ПараметрыФормы, Элементы.Индекс); + Иначе + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + ОповещениеОЗакрытие = Новый ОписаниеОповещения("ОткрытьФормуВыборАдресаПоПочтовомуИндексу", ЭтотОбъект, ПараметрыФормы); + МодульАдресныйКлассификаторКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("АдресныйКлассификаторКлиент"); + МодульАдресныйКлассификаторКлиент.ОткрытьФормуЗагрузкиАдресногоКлассификатора(ПараметрыВыполнения, ПараметрыФормы, ОповещениеОЗакрытие); + КонецЕсли; + КонецЕсли; КонецЕсли; Иначе Если СтрДлина(СокрЛП(Текст)) = 6 Тогда @@ -293,6 +321,16 @@ КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ИндексПриИзменении(Элемент) + ОбновитьПредставлениеАдреса(); +КонецПроцедуры + +&НаКлиенте +Функция ОткрытьФормуВыборАдресаПоПочтовомуИндексу(Результат, ПараметрыФормы) Экспорт + ОткрытьФорму("Обработка.ВводКонтактнойИнформации.Форма.ВыборАдресаПоПочтовомуИндексу", ПараметрыФормы, Элементы.Индекс); +КонецФункции + &НаКлиенте Процедура ИндексОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) @@ -300,18 +338,8 @@ Если ВыбранноеЗначение = Неопределено Тогда Возврат; ИначеЕсли ВыбранноеЗначение.Отказ Тогда - Если ВыбранноеЗначение.Свойство("Индекс") И НЕ ПустаяСтрока(ВыбранноеЗначение.Индекс) - И ПодборПоИндексуДоступен Тогда - Оповещение = Новый ОписаниеОповещения("ПослеВопросООбновлениеКлассификатора", ЭтотОбъект); - ТекстВопроса = НСтр("ru = 'Индекс %1 не найден в адресном классификаторе. Возможные причины:'") + Символы.ПС; - ТекстВопроса = ТекстВопроса + " - " + НСтр("ru = 'индекс относится к региону, по которому в программе отсутствуют адресные сведения;'") + Символы.ПС; - ТекстВопроса = ТекстВопроса + " - " + НСтр("ru = 'адресные сведения, загруженные в программу, устарели;'") + Символы.ПС; - ТекстВопроса = ТекстВопроса + " - " + НСтр("ru = 'индекс введен некорректно.'"); - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, Формат(ВыбранноеЗначение.Индекс, "ЧРГ=' '; ЧГ=0")); - Кнопки = Новый СписокЗначений; - Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Обновить классификатор'")); - Кнопки.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Отмена'")); - ПоказатьВопрос(Оповещение, ТекстВопроса, Кнопки); + Если ВыбранноеЗначение.Свойство("Индекс") И НЕ ПустаяСтрока(ВыбранноеЗначение.Индекс) Тогда + Возврат; Иначе Если НЕ ПодборПоИндексуДоступен Тогда ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Индекс %1 не найден в адресном классификаторе'"), @@ -332,16 +360,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ПослеВопросООбновлениеКлассификатора(Результат, Параметр) Экспорт - Если Результат = КодВозвратаДиалога.Да Тогда - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда - МодульАдресныйКлассификаторКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("АдресныйКлассификаторКлиент"); - МодульАдресныйКлассификаторКлиент.ЗагрузитьАдресныйКлассификатор(); - КонецЕсли; - КонецЕсли; -КонецПроцедуры - &НаСервере Процедура ЗаполнитьАдресПоДаннымИндекса(Контекст, Знач ДанныеИндекса) @@ -378,11 +396,23 @@ &НаКлиенте Процедура ДомПриИзменении(Элемент) - - Контекст = КонтекстФормыКлиент(); - ОбновитьИндексИПредставление(Контекст); - КонтекстФормыКлиент(Контекст); + ОбновитьИндексИПредставление(); +КонецПроцедуры +&НаКлиенте +Процедура ДомОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + Если ЗначениеЗаполнено(ВыбранноеЗначение) Тогда + СтандартнаяОбработка = Ложь; + ЗаполнитьПоляДомовИСтроений(ВыбранноеЗначение); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СтроениеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + Если ЗначениеЗаполнено(ВыбранноеЗначение) Тогда + СтандартнаяОбработка = Ложь; + ЗаполнитьПоляДомовИСтроений(ВыбранноеЗначение); + КонецЕсли; КонецПроцедуры &НаКлиенте @@ -396,11 +426,25 @@ &НаКлиенте Процедура СтроениеПриИзменении(Элемент) - Контекст = КонтекстФормыКлиент(); - ОбновитьИндексИПредставление(Контекст); - КонтекстФормыКлиент(Контекст); + ОбновитьИндексИПредставление(); КонецПроцедуры +&НаКлиенте +Процедура СтроениеАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + Если ЗначениеЗаполнено(Текст) + И (ЗначениеЗаполнено(ЭтотОбъект.ИдентификаторНаселенногоПункта) + ИЛИ ЗначениеЗаполнено(ЭтотОбъект.ИдентификаторУлицы)) Тогда + Идентификатор = ?(ЗначениеЗаполнено(ИдентификаторУлицы), + ИдентификаторУлицы, ИдентификаторНаселенногоПункта); + + ДанныеВыбора = СписокАвтоподбораВариантовДомов(Идентификатор, Дом); + Если ДанныеВыбора.Количество() > 0 Тогда + СтандартнаяОбработка = Ложь; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + + &НаКлиенте Процедура ТипПомещенияПриИзменении(Элемент) @@ -623,11 +667,12 @@ ТипВыбора = ТипЗнч(ВыбранноеЗначение); Если ТипВыбора = Тип("Структура") Тогда // Результат автоподбора или выбора кнопкой, берем все оттуда. - Если ЗначениеЗаполнено(ВыбранноеЗначение.Улица) Тогда + Если ЗначениеЗаполнено(ВыбранноеЗначение.Улица) Тогда НаселенныйПунктДетально.Улица.Представление = ВыбранноеЗначение.Улица; НаименованиеСокращение= УправлениеКонтактнойИнформациейКлиентСервер.НаименованиеСокращение(ВыбранноеЗначение.Улица); НаселенныйПунктДетально.Улица.Наименование = НаименованиеСокращение.Наименование; НаселенныйПунктДетально.Улица.Сокращение = НаименованиеСокращение.Сокращение; + НаселенныйПунктДетально.Улица.Идентификатор = ВыбранноеЗначение.Идентификатор; КонецЕсли; Если ЗначениеЗаполнено(ВыбранноеЗначение.ДополнительныйЭлемент) Тогда НаселенныйПунктДетально.ДополнительныйЭлемент.Представление = ВыбранноеЗначение.ДополнительныйЭлемент; @@ -730,13 +775,118 @@ Идентификатор = ?(ЗначениеЗаполнено(ИдентификаторУлицы), ИдентификаторУлицы, ИдентификаторНаселенногоПункта); - ДанныеВыбора = СписокАвтоподбораВариантовДомов(Идентификатор, Текст); + ДанныеВыбора = СписокАвтоподбораВариантовДомов(Идентификатор, Текст + "%"); Если ДанныеВыбора.Количество() > 0 Тогда СтандартнаяОбработка = Ложь; КонецЕсли; КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура НаселенныйПунктИностранныйАдресаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + // Если пришли впрямую после редактирования, то сбрасываем адрес. + Если Элемент.ТекстРедактирования <> НаселенныйПункт Тогда + Модифицированность = Истина; + НаселенныйПункт = Элемент.ТекстРедактирования; + + ИдентификаторНаселенногоПункта = Неопределено; + ОбновитьНаселенныйПунктИностранногоАдреса(); + КонецЕсли; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("НаселенныйПунктДетально", НаселенныйПунктДетально); + ПараметрыФормы.Вставить("ФорматАдреса","КЛАДР"); + ПараметрыФормы.Вставить("СервисКлассификатораНедоступен", Истина); + ОткрытьФорму("Обработка.ВводКонтактнойИнформации.Форма.НаселенныйПунктАдреса", ПараметрыФормы, Элемент, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); +КонецПроцедуры + +&НаКлиенте +Процедура НаселенныйПунктИностранныйАдресаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + Если ВыбранноеЗначение=Неопределено Тогда + Возврат; + КонецЕсли; + + Модифицированность = Истина; + ТипЗначения = ТипЗнч(ВыбранноеЗначение); + + ФормироватьДетально = Истина; + + Если ТипЗначения = Тип("Структура") Тогда + + НаселенныйПункт = ВыбранноеЗначение.Представление; + + Если ВыбранноеЗначение.Свойство("НаселенныйПунктДетально") Тогда + // Выбор из формы детального ввода. + НаселенныйПунктДетально = ВыбранноеЗначение.НаселенныйПунктДетально; + ФормироватьДетально = Ложь; + Иначе + Если НаселенныйПунктДетально <> Неопределено Тогда + НовыеДанныеПоНаселенномуПунктуДетально = НаселенныйПунктДетальноПоИдентификатору(ИдентификаторНаселенногоПункта, ВидКонтактнойИнформации.ФорматАдреса); + Для каждого ЧастьАдреса Из НовыеДанныеПоНаселенномуПунктуДетально Цикл + Если ЧастьАдреса.Значение.Уровень < 7 Тогда + НаселенныйПунктДетально[ЧастьАдреса.Ключ] = ЧастьАдреса.Значение; + КонецЕсли; + КонецЦикла; + Иначе + НаселенныйПунктДетально = НаселенныйПунктДетальноПоИдентификатору(ИдентификаторНаселенногоПункта, ВидКонтактнойИнформации.ФорматАдреса); + КонецЕсли; + КонецЕсли; + + РегионНеЗагружен = ВыбранноеЗначение.Свойство("РегионЗагружен") И (Не ВыбранноеЗначение.РегионЗагружен); + Если МожноЗагружатьКлассификатор И РегионНеЗагружен Тогда + // Предлагаем загрузить классификатор. + УправлениеКонтактнойИнформациейКлиент.ПредложениеЗагрузкиКлассификатора( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Данные для ""%1"" не загружены.'"), ВыбранноеЗначение.Представление), + ВыбранноеЗначение.Представление); + КонецЕсли; + + Иначе + // Иной источник, будет попытка разобрать. + НаселенныйПункт = Строка(ВыбранноеЗначение); + КонецЕсли; + + Контекст = КонтекстФормыКлиент(); + // Так как изменился населенный пункт, то перепроверяем улицу, индекс и представление обновятся там. + ЗаполнитьПредставлениеАдреса(Контекст); + КонтекстФормыКлиент(Контекст); + + +КонецПроцедуры + +&НаКлиенте +Процедура НаселенныйПунктИностранныйАдресаПриИзменении(Элемент) + + ОбновитьНаселенныйПунктИностранногоАдреса(); + +КонецПроцедуры + +&НаКлиенте +Процедура УлицаИностранныйАдресаПриИзменении(Элемент) + Контекст = КонтекстФормыКлиент(); + ЗаполнитьПредставлениеАдреса(Контекст); + КонтекстФормыКлиент(Контекст); + +КонецПроцедуры + +&НаКлиенте +Процедура ДомИностранныйАдресаПриИзменении(Элемент) + ОбновитьПредставлениеАдреса(); +КонецПроцедуры + +&НаКлиенте +Процедура СтроениеИностранныйАдресаПриИзменении(Элемент) + ОбновитьПредставлениеАдреса(); +КонецПроцедуры + +&НаКлиенте +Процедура ПомещениеИностранныйАдресаПриИзменении(Элемент) + ОбновитьПредставлениеАдреса(); +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -833,10 +983,165 @@ КонецПроцедуры +&НаКлиенте +Процедура ДомНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ПоказатьСписокДомов(Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура СтроениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ПоказатьСписокДомов(Истина); +КонецПроцедуры + +&НаКлиенте +Процедура ИсторияИзменений(Команда) + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Контекст", КонтекстФормыКлиент()); + + ОписаниеДополнительныхРеквизитов = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; + СписокКонтактнойИнформации = ЗаполнитьСписокКонтактнойИнформации(ВидКонтактнойИнформации.Ссылка, ОписаниеДополнительныхРеквизитов, ДополнительныеПараметры.Контекст); + + ПараметрыФормы = Новый Структура("СписокКонтактнойИнформации", СписокКонтактнойИнформации); + ПараметрыФормы.Вставить("ВидКонтактнойИнформации", ВидКонтактнойИнформации.Ссылка); + ПараметрыФормы.Вставить("ТолькоПросмотр", ЭтотОбъект.ТолькоПросмотр); + + ОповещениеОЗакрытие = Новый ОписаниеОповещения("ПослеЗакрытияФормыИстории", ЭтотОбъект, ДополнительныеПараметры); + ОткрытьФорму("Обработка.ВводКонтактнойИнформации.Форма.ИсторияКонтактнойИнформации", ПараметрыФормы, ЭтотОбъект,,,, ОповещениеОЗакрытие); + +КонецПроцедуры + +&НаКлиенте +Процедура АдресНаЯндексКарты(Команда) + УправлениеКонтактнойИнформациейКлиент.ПоказатьАдресНаКарте(ПредставлениеАдреса, "Яндекс.Карты"); +КонецПроцедуры + +&НаКлиенте +Процедура АдресНаGoogleMaps(Команда) + УправлениеКонтактнойИнформациейКлиент.ПоказатьАдресНаКарте(ПредставлениеАдреса, "GoogleMaps"); +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ЗаполнитьСписокКонтактнойИнформации(ВидКонтактнойИнформации, КонтактнаяИнформацияОписаниеДополнительныхРеквизитов, Контекст) + + Отбор = Новый Структура("Вид", ВидКонтактнойИнформации); + НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); + + СписокКонтактнойИнформации = Новый Массив; + Для каждого СтрокаКонтактнойИнформации Из НайденныеСтроки Цикл + КонтактнаяИнформация = Новый Структура("Представление, ЗначенияПолей, ДействуетС"); + Если СтрокаКонтактнойИнформации.ЭтоИсторическаяКонтактнаяИнформация Тогда + ЗаполнитьЗначенияСвойств(КонтактнаяИнформация, СтрокаКонтактнойИнформации); + Иначе + XDTOИнформация = КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст); + ЗначенияПолей = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(XDTOИнформация); + Если СтрСравнить(СтрокаКонтактнойИнформации.ЗначенияПолей, ЗначенияПолей) <> 0 Тогда + Если СтрокаКонтактнойИнформации.ДействуетС < НачалоДня(ТекущаяДатаСеанса()) Тогда + // старое значение + ЗаполнитьЗначенияСвойств(КонтактнаяИнформация, СтрокаКонтактнойИнформации); + СписокКонтактнойИнформации.Добавить(КонтактнаяИнформация); + // новое значение + КонтактнаяИнформация = Новый Структура("Представление, ЗначенияПолей, ДействуетС"); + КонтактнаяИнформация.Представление = Контекст.ПредставлениеАдреса; + КонтактнаяИнформация.ЗначенияПолей = ЗначенияПолей; + КонтактнаяИнформация.ДействуетС = ТекущаяДатаСеанса(); + Иначе + КонтактнаяИнформация.Представление = Контекст.ПредставлениеАдреса; + КонтактнаяИнформация.ЗначенияПолей = ЗначенияПолей; + КонтактнаяИнформация.ДействуетС = ТекущаяДатаСеанса(); + КонецЕсли; + Иначе + ЗаполнитьЗначенияСвойств(КонтактнаяИнформация, СтрокаКонтактнойИнформации); + КонецЕсли; + КонецЕсли; + + СписокКонтактнойИнформации.Добавить(КонтактнаяИнформация); + КонецЦикла; + + Возврат СписокКонтактнойИнформации; +КонецФункции + +&НаКлиенте +Процедура ПослеЗакрытияФормыИстории(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + Отбор = Новый Структура("Вид", ВидКонтактнойИнформации.Ссылка); + НайденныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); + + ИмяРеквизита = ""; + Для Каждого СтрокаКонтактнойИнформации Из НайденныеСтроки Цикл + Если НЕ СтрокаКонтактнойИнформации.ЭтоИсторическаяКонтактнаяИнформация Тогда + ИмяРеквизита = СтрокаКонтактнойИнформации.ИмяРеквизита; + КонецЕсли; + КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Удалить(СтрокаКонтактнойИнформации); + КонецЦикла; + + ЭтоИсторическаяКонтактнаяИнформация = Ложь; + ПараметрыОбновления = Новый Структура; + Для Каждого СтрокаКонтактнойИнформации Из Результат Цикл + ДанныеСтроки = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); + ЗаполнитьЗначенияСвойств(ДанныеСтроки, СтрокаКонтактнойИнформации); + Если НЕ СтрокаКонтактнойИнформации.ЭтоИсторическаяКонтактнаяИнформация Тогда + ДанныеСтроки.ИмяРеквизита = ИмяРеквизита; + Контекст = ДополнительныеПараметры.Контекст; + Если СтрСравнить(Контекст.ПредставлениеАдреса, СтрокаКонтактнойИнформации.Представление) <> 0 Тогда + ПерезаполнитьФормуВводаАдреса(Контекст, СтрокаКонтактнойИнформации.ЗначенияПолей, СтрокаКонтактнойИнформации.Тип); + КонтекстФормыКлиент(Контекст); + ОтобразитьДополнительныеЗданияИПомещения(); + КонецЕсли; + КонецЕсли; + КонецЦикла; + ЭтотОбъект.Модифицированность = Истина; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ПерезаполнитьФормуВводаАдреса(Контекст, ЗначенияПолей, ТипКонтактнойИнформации) + + РезультатыЧтения = ""; + XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(ЗначенияПолей, ТипКонтактнойИнформации, РезультатыЧтения); + ЗначениеРеквизитовПоКонтактнойИнформации(Контекст, XDTOКонтактная); + Возврат РезультатыЧтения; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура ПоказатьСписокДомов(ВключитьОтбор) + Идентификатор = ?(ЗначениеЗаполнено(ИдентификаторУлицы), ИдентификаторУлицы, ИдентификаторНаселенногоПункта); + ПараметрыФормы = Новый Структура("Идентификатор, Дом, Строение", Идентификатор, Дом, Строение); + ПараметрыФормы.Вставить("ТипСтроения", ТипСтроения); + ПараметрыФормы.Вставить("Отбор", ВключитьОтбор); + ОповещениеОЗакрытие = Новый ОписаниеОповещения("ВыбранДома", ЭтотОбъект); + ОткрытьФорму("Обработка.ВводКонтактнойИнформации.Форма.ВыборДома", ПараметрыФормы,,,,, ОповещениеОЗакрытие, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранДома(Результат, ДополнительныеПараметры) Экспорт + + Если Результат <> Неопределено Тогда + Ответ = Новый Структура; + Если Результат.Свойство("Дом") Тогда + Ответ.Вставить("Дом", Результат.Дом); + КонецЕсли; + Если Результат.Свойство("Корпус") Тогда + Ответ.Вставить("Корпус", Результат.Корпус); + КонецЕсли; + Если Результат.Свойство("Строение") Тогда + Ответ.Вставить("Строение", Результат.Строение); + КонецЕсли; + + ЗаполнитьПоляДомовИСтроений(Ответ); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура УстановитьПиктограммуКомментария() Элементы.АдресСтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Комментарий); @@ -860,6 +1165,9 @@ КонецЕсли; Результат = Результат.ДанныеВыбора; + Если ТипЗнч(Результат) = Тип("Структура") Тогда + Результат.Вставить("КонтактнаяИнформацияОписаниеДополнительныхРеквизитов", КонтактнаяИнформацияОписаниеДополнительныхРеквизитов); + КонецЕсли; СброситьМодифицированностьПриВыборе(); #Если ВебКлиент Тогда @@ -913,22 +1221,22 @@ Возврат; КонецЕсли; - Если ВыбранныйЭлемент.Значение=1 Тогда + Если ВыбранныйЭлемент.Значение = 1 Тогда Строка = ДополнительныеЗдания.Добавить(); Строка.Тип = ВыбранныйЭлемент.Представление; Строка.ПутьXPath = УправлениеКонтактнойИнформациейКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(Строка.Тип); - ИмяТекущего = ОтрисоватьДополнительныеЗдания(); + ИмяТекущего = ОтобразитьДополнительныеЗдания(); Иначе Строка = ДополнительныеПомещения.Добавить(); Строка.Тип = ВыбранныйЭлемент.Представление; Строка.ПутьXPath = УправлениеКонтактнойИнформациейКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(Строка.Тип); - ИмяТекущего = ОтрисоватьДополнительныеПомещения(); + ИмяТекущего = ОтобразитьДополнительныеПомещения(); КонецЕсли; // Запрещаем добавлять больше чем есть вариантов. - Элементы.ДобавитьОбъект.Доступность = ДополнительныеПараметры.КоличествоВариантов>1; + Элементы.ДобавитьОбъект.Доступность = ДополнительныеПараметры.КоличествоВариантов > 1; Если ИмяТекущего<>Неопределено Тогда ТекущийЭлемент = Элементы[ИмяТекущего]; @@ -1033,11 +1341,20 @@ УправлениеКонтактнойИнформациейСлужебный.АдресВведенВСвободнойФорме(XDTOИнформация)); Результат.ОшибкиЗаполнения = УправлениеКонтактнойИнформациейСлужебный.ОшибкиЗаполненияАдресаXDTO( - XDTOИнформация.Состав, - Контекст.ВидКонтактнойИнформации); + XDTOИнформация.Состав, Контекст.ВидКонтактнойИнформации); + + Если Контекст.ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес + И Контекст.ВидКонтактнойИнформации.РедактированиеТолькоВДиалоге Тогда + АдресВВидеГиперссылки = Истина; + Иначе + АдресВВидеГиперссылки = Ложь; + КонецЕсли; + Результат.ДанныеВыбора.Вставить("АдресВВидеГиперссылки", АдресВВидеГиперссылки); // Подавляем перенос строк в возвращаемом отдельно представлении. Результат.ДанныеВыбора.Представление = СокрЛП(СтрЗаменить(Результат.ДанныеВыбора.Представление, Символы.ПС, " ")); + Результат.ДанныеВыбора.Вставить("Вид", Контекст.ВидКонтактнойИнформации.Ссылка); + Результат.ДанныеВыбора.Вставить("Тип", Контекст.ВидКонтактнойИнформации.Тип); Возврат Результат; КонецФункции @@ -1159,7 +1476,13 @@ ПутьXPath = УправлениеКонтактнойИнформациейКлиентСервер.XPathДополнительногоОбъектаАдресации(91, Контекст.НаселенныйПунктДетально.ДополнительныйЭлемент.Сокращение); Контекст.НаселенныйПунктДетально.ПодчиненныйЭлемент.ПутьXPath = ПутьXPath; Иначе - Контекст.НаселенныйПунктДетально.Улица.Представление = ЧастьАдреса.Значение; + Если СтрСравнить(ЧастьАдреса.Наименование, Контекст.НаселенныйПунктДетально.ПодчиненныйЭлемент.Наименование) = 0 Тогда + Контекст.НаселенныйПунктДетально.ПодчиненныйЭлемент.Представление = ЧастьАдреса.Значение; + ИначеЕсли СтрСравнить(ЧастьАдреса.Наименование, Контекст.НаселенныйПунктДетально.ДополнительныйЭлемент.Наименование) = 0 Тогда + Контекст.НаселенныйПунктДетально.ДополнительныйЭлемент.Представление = ЧастьАдреса.Значение; + Иначе + Контекст.НаселенныйПунктДетально.Улица.Представление = ЧастьАдреса.Значение; + КонецЕсли; КонецЕсли; КонецЦикла; @@ -1168,7 +1491,7 @@ КонецЕсли; // Перепроверяем дом, индекс и представление обновятся там. - ОбновитьИндексИПредставление(Контекст); + УстановитьИндексИПредставление(Контекст); КонецПроцедуры &НаКлиенте @@ -1243,7 +1566,7 @@ КонецПроцедуры &НаСервереБезКонтекста -Процедура ОбновитьИндексИПредставление(Контекст, XDTOКонтактная = Неопределено) +Процедура УстановитьИндексИПредставление(Контекст, XDTOКонтактная = Неопределено) Инфо = ?(XDTOКонтактная = Неопределено, КонтактнаяИнформацияПоЗначениюРеквизитов(Контекст), XDTOКонтактная); @@ -1268,7 +1591,7 @@ Контекст.Индекс = Формат(ИндексИОКМТОПоКлассификатору.Индекс, "ЧЦ=6; ЧРГ=; ЧГ=0"); КонецЕсли; Если ЗначениеЗаполнено(ИндексИОКМТОПоКлассификатору.ОКТМО) Тогда - Контекст.ОКТМО = Формат(ИндексИОКМТОПоКлассификатору.ОКТМО, "ЧЦ=11; ЧРГ=; ЧГ=0"); + Контекст.ОКТМО = УправлениеКонтактнойИнформациейСлужебный.ОКТМО(ИндексИОКМТОПоКлассификатору.ОКТМО); КонецЕсли; УправлениеКонтактнойИнформациейСлужебный.ПочтовыйИндексАдреса(Адрес, Контекст.Индекс); XDTOКонтактная.Представление = УправлениеКонтактнойИнформациейСлужебный.ПредставлениеАдреса(Адрес, Контекст.ВидКонтактнойИнформации); @@ -1361,19 +1684,21 @@ Контекст.ПредставлениеАдреса = ДанныеАдреса.Состав.Адрес_по_документу; КонецЕсли; - Контекст.ОКТМО = Формат(ДанныеАдреса.Состав.ОКТМО, "ЧРГ=''; ЧН=-; ЧГ=0"); + Контекст.ОКТМО = УправлениеКонтактнойИнформациейСлужебный.ОКТМО(ДанныеАдреса.Состав.ОКТМО); ЗначениеРеквизитовПоКонтактнойИнформацииАдресРФ(ДанныеАдреса, Контекст); Иначе Адрес = Строка(ДанныеАдреса.Состав); Контекст.НаселенныйПунктДетально = УправлениеКонтактнойИнформациейКлиентСервер.СтруктураЧастейАдресаНаселенногоПункта("ФИАС"); - Если ЗначениеЗаполнено(Адрес) И СтрЧислоВхождений(Адрес, ",") = 9 Тогда + Если СтрЧислоВхождений(Адрес, ",") = 9 Тогда + Адрес = Сред(Адрес, СтрНайти(Адрес, ",") + 1); // удаляем страну + КонецЕсли; + Если ЗначениеЗаполнено(Адрес) И СтрЧислоВхождений(Адрес, ",") = 8 Тогда ЗначениеРеквизитовПоКонтактнойИнформацииАдресИностранныйАдрес(Адрес, Контекст); Контекст.РазрешитьВводАдресаВСвободнойФорме = Ложь; Иначе Контекст.РазрешитьВводАдресаВСвободнойФорме = Истина; КонецЕсли; Контекст.ПредставлениеАдреса = ВычисленноеПредставление; - КонецЕсли; КонецПроцедуры @@ -1469,20 +1794,28 @@ Контекст.ТипДома = СтрокаДома.Тип; Контекст.Дом = СтрокаДома.Значение; ТаблицаДанных.Удалить(СтрокаДома); + Иначе + Контекст.Дом = ""; КонецЕсли; СтрокаДома = ТаблицаДанных.Найти(2, "Вид"); - Если СтрокаДома<>Неопределено Тогда + Если СтрокаДома <> Неопределено Тогда Контекст.ТипСтроения = СтрокаДома.Тип; Контекст.Строение = СтрокаДома.Значение; ТаблицаДанных.Удалить(СтрокаДома); + Иначе + Контекст.Строение = ""; КонецЕсли; НомерСтроки = ТаблицаДанных.Количество(); - Пока НомерСтроки > 0 Цикл - НомерСтроки = НомерСтроки - 1; - ЗаполнитьЗначенияСвойств(Контекст.ДополнительныеЗдания.Вставить(0), ТаблицаДанных[НомерСтроки]); - КонецЦикла; + Если НомерСтроки > 0 Тогда + Пока НомерСтроки > 0 Цикл + НомерСтроки = НомерСтроки - 1; + ЗаполнитьЗначенияСвойств(Контекст.ДополнительныеЗдания.Вставить(0), ТаблицаДанных[НомерСтроки]); + КонецЦикла; + Иначе + Контекст.ДополнительныеЗдания.Очистить(); + КонецЕсли; // Первое помещение указываем отдельно, остальные в списке. ТаблицаДанных = ЗданияИПомещения.Помещения; @@ -1490,11 +1823,18 @@ Если НомерСтроки > 0 Тогда Контекст.ТипПомещения = ТаблицаДанных[0].Тип; Контекст.Помещение = ТаблицаДанных[0].Значение; + Иначе + Контекст.Помещение = ""; + КонецЕсли; + + Если НомерСтроки > 1 Тогда + Пока НомерСтроки > 1 Цикл + НомерСтроки = НомерСтроки - 1; + ЗаполнитьЗначенияСвойств(Контекст.ДополнительныеПомещения.Вставить(0), ТаблицаДанных[НомерСтроки]); + КонецЦикла; + Иначе + Контекст.ДополнительныеПомещения.Очистить(); КонецЕсли; - Пока НомерСтроки > 1 Цикл - НомерСтроки = НомерСтроки - 1; - ЗаполнитьЗначенияСвойств(Контекст.ДополнительныеПомещения.Вставить(0), ТаблицаДанных[НомерСтроки]); - КонецЦикла; КонецПроцедуры @@ -1723,17 +2063,17 @@ КонецПроцедуры &НаСервере -Функция ОтрисоватьДополнительныеЗданияИПомещения() +Функция ОтобразитьДополнительныеЗданияИПомещения() Возврат Новый Структура("ИмяЗдания, ИмяПомещения", - ОтрисоватьДополнительныеЗдания(), - ОтрисоватьДополнительныеПомещения()); + ОтобразитьДополнительныеЗдания(), + ОтобразитьДополнительныеПомещения()); КонецФункции &НаСервере -Функция ОтрисоватьДополнительныеЗдания() +Функция ОтобразитьДополнительныеЗдания() Удалять = Новый Массив; - Пока Элементы.ГруппаСтроенияДополнительно.ПодчиненныеЭлементы.Количество()>0 Цикл + Пока Элементы.ГруппаСтроенияДополнительно.ПодчиненныеЭлементы.Количество() > 0 Цикл Группа = Элементы.ГруппаСтроенияДополнительно.ПодчиненныеЭлементы[0]; Если ТипЗнч(Группа)=Тип("ГруппаФормы") Тогда Идентификатор = Сред(Группа.Имя, 1 + СтрДлина("ГруппаСтроение")); @@ -1741,7 +2081,7 @@ Удалять.Добавить("ТипСтроения" + Идентификатор); Удалять.Добавить("Строение" + Идентификатор); КомандаУдалить = Команды.Найти("УдалитьСтроение" + Идентификатор); - Если КомандаУдалить<>Неопределено Тогда + Если КомандаУдалить <> Неопределено Тогда Команды.Удалить(КомандаУдалить); КонецЕсли; КонецЕсли; @@ -1750,10 +2090,10 @@ Элементы.Удалить(Группа); КонецЕсли; КонецЦикла; - ИзменитьРеквизиты(,Удалять); + ИзменитьРеквизиты(, Удалять); - КоличествоЗданий = ДополнительныеЗдания.Количество()-1; - КоличествоТипов = Элементы.ТипСтроения.СписокВыбора.Количество()-2; + КоличествоЗданий = ДополнительныеЗдания.Количество() - 1; + КоличествоТипов = Элементы.ТипСтроения.СписокВыбора.Количество() - 2; Результат = Неопределено; Для НомерСтроки=0 По КоличествоЗданий Цикл @@ -1772,6 +2112,7 @@ ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элементы.Строение, , "ПутьКДанным, СписокВыбора, ВыделенныйТекст, СвязьПоТипу"); НовыйЭлемент.СписокВыбора.ЗагрузитьЗначения(Элементы.Строение.СписокВыбора.ВыгрузитьЗначения()); НовыйЭлемент.УстановитьДействие("ПриИзменении", "Подключаемый_СтроениеПриИзменении"); + НовыйЭлемент.КнопкаВыбора = Ложь; Если НомерСтроки=КоличествоЗданий Тогда Результат = НовыйЭлемент.Имя; @@ -1792,6 +2133,27 @@ Возврат Результат; КонецФункции +&НаСервере +Процедура ОтобразитьИнформациюОДатахДействияАдреса(ДействуетС, ДействуетДо) + + Если ЗначениеЗаполнено(ДействуетДо) И ЗначениеЗаполнено(ДействуетС)Тогда + Если НачалоДня(ДействуетДо -10) = НачалоДня(ДействуетС) Тогда + ТекстИсторическийАдрес = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Адрес действовал только %1'"), Формат(ДействуетС, "ДЛФ=DD")); + Иначе + ТекстИсторическийАдрес = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Адрес действовал с %1 по %2 (включительно)'"), Формат(ДействуетС, "ДЛФ=DD"), Формат(ДействуетДо - 10, "ДЛФ=DD")); + КонецЕсли; + ИначеЕсли НЕ ЗначениеЗаполнено(ДействуетС) И ЗначениеЗаполнено(ДействуетДо) Тогда + ТекстИсторическийАдрес = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Адрес действовал до %1 (включительно)'"), Формат(ДействуетДо - 10, "ДЛФ=DD")); + Иначе + ТекстИсторическийАдрес = НСтр("ru = 'Адрес действует в настоящее время'"); + КонецЕсли; + ИсторическийАдрес = ТекстИсторическийАдрес; + Элементы.ПоказатьИсториюВсеДействия.Видимость = Ложь; + Элементы.ИсторияИзменений.Видимость = Ложь; + Элементы.ГруппаИсторическийАдрес.Видимость = Истина; + +КонецПроцедуры + &НаКлиенте Процедура Подключаемый_ТипСтроенияПриИзменении(Элемент) НомерСтроки = Сред(Элемент.Имя, 1 + СтрДлина("ТипСтроения")); @@ -1799,10 +2161,7 @@ СтрокаЗданий.Тип = ЭтотОбъект[Элемент.Имя]; СтрокаЗданий.ПутьXPath = УправлениеКонтактнойИнформациейКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(СтрокаЗданий.Тип); - Контекст = КонтекстФормыКлиент(); - ОбновитьИндексИПредставление(Контекст); - КонтекстФормыКлиент(Контекст); - + ОбновитьИндексИПредставление(); Модифицированность = Истина; КонецПроцедуры @@ -1812,15 +2171,13 @@ СтрокаЗданий = ДополнительныеЗдания.Получить(НомерСтроки); СтрокаЗданий.Значение = ЭтотОбъект[Элемент.Имя]; - Контекст = КонтекстФормыКлиент(); - ОбновитьИндексИПредставление(Контекст); - КонтекстФормыКлиент(Контекст); - + ОбновитьИндексИПредставление(); Модифицированность = Истина; + КонецПроцедуры &НаСервере -Функция ОтрисоватьДополнительныеПомещения() +Функция ОтобразитьДополнительныеПомещения() Удалять = Новый Массив; Пока Элементы.ГруппаПомещенияДополнительно.ПодчиненныеЭлементы.Количество()>0 Цикл @@ -1918,8 +2275,10 @@ Если КоличествоОшибок = 0 И ПредупреждатьОбОтсутствии Тогда // Нет ошибок ПоказатьПредупреждение(, НСтр("ru='Адрес введен корректно.'")); + Элементы.СообщениеОбОбращенииВФНСРоссия.Видимость = Ложь; + Элементы.СервисДоступенДекорация.Видимость = Истина; Возврат; - КонецЕсли; + КонецЕсли; Если КоличествоОшибок = 1 Тогда МестоОшибки = СписокОшибок[0].Значение; @@ -1930,6 +2289,8 @@ КонецЕсли; КонецЕсли; + Элементы.СообщениеОбОбращенииВФНСРоссия.Видимость = Истина; + Элементы.СервисДоступенДекорация.Видимость = Ложь; // Сообщаем список с привязкой к полям. Для Каждого Элемент Из СписокОшибок Цикл ОбщегоНазначенияКлиентСервер.СообщитьПользователю( @@ -2059,7 +2420,7 @@ // Очищаем непосредственно на форме, в контексте уже очищено. ДополнительныеЗдания.Очистить(); ДополнительныеПомещения.Очистить(); - ОтрисоватьДополнительныеЗданияИПомещения(); + ОтобразитьДополнительныеЗданияИПомещения(); КонецПроцедуры &НаКлиенте @@ -2313,7 +2674,7 @@ ПредставлениеАдреса = ТекущееПредставление; Страна = ТекущаяСтрана; - ОтрисоватьДополнительныеЗданияИПомещения(); + ОтобразитьДополнительныеЗданияИПомещения(); КонецЕсли; // Включаем режим свободного ввода принудительно. @@ -2369,7 +2730,6 @@ КонецПроцедуры - &НаСервере Функция НедоступностьСервиса() @@ -2438,10 +2798,15 @@ КонецПроцедуры &НаСервере -Процедура УстановитьВозможностьПодбораПоИндексу(Знач ЭтоВебСервис) +Процедура УстановитьВозможностьПодбораИндексаИНомеровДомов(Знач ЭтоВебСервис) ПодборПоИндексуДоступен = Истина; + Если ЭтоВебСервис Тогда + Элементы.Дом.КнопкаВыбора = Ложь; + Элементы.Строение.КнопкаВыбора = Ложь; + КонецЕсли; + Если ЭтоВебСервис ИЛИ НЕ МожноЗагружатьКлассификатор Тогда ПодборПоИндексуДоступен = Ложь; Возврат; @@ -2468,96 +2833,6 @@ КонецФункции -&НаКлиенте -Процедура НаселенныйПунктИностранныйАдресаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - - // Если пришли впрямую после редактирования, то сбрасываем адрес. - Если Элемент.ТекстРедактирования <> НаселенныйПункт Тогда - Модифицированность = Истина; - НаселенныйПункт = Элемент.ТекстРедактирования; - - ИдентификаторНаселенногоПункта = Неопределено; - ОбновитьНаселенныйПунктИностранногоАдреса(); - КонецЕсли; - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("НаселенныйПунктДетально", НаселенныйПунктДетально); - ПараметрыФормы.Вставить("ФорматАдреса","КЛАДР"); - ПараметрыФормы.Вставить("СервисКлассификатораНедоступен", Истина); - ОткрытьФорму("Обработка.ВводКонтактнойИнформации.Форма.НаселенныйПунктАдреса", ПараметрыФормы, Элемент, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); -КонецПроцедуры - -&НаКлиенте -Процедура НаселенныйПунктИностранныйАдресаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - Если ВыбранноеЗначение=Неопределено Тогда - Возврат; - КонецЕсли; - - Модифицированность = Истина; - ТипЗначения = ТипЗнч(ВыбранноеЗначение); - - ФормироватьДетально = Истина; - - Если ТипЗначения = Тип("Структура") Тогда - - НаселенныйПункт = ВыбранноеЗначение.Представление; - - Если ВыбранноеЗначение.Свойство("НаселенныйПунктДетально") Тогда - // Выбор из формы детального ввода. - НаселенныйПунктДетально = ВыбранноеЗначение.НаселенныйПунктДетально; - ФормироватьДетально = Ложь; - Иначе - Если НаселенныйПунктДетально <> Неопределено Тогда - НовыеДанныеПоНаселенномуПунктуДетально = НаселенныйПунктДетальноПоИдентификатору(ИдентификаторНаселенногоПункта, ВидКонтактнойИнформации.ФорматАдреса); - Для каждого ЧастьАдреса Из НовыеДанныеПоНаселенномуПунктуДетально Цикл - Если ЧастьАдреса.Значение.Уровень < 7 Тогда - НаселенныйПунктДетально[ЧастьАдреса.Ключ] = ЧастьАдреса.Значение; - КонецЕсли; - КонецЦикла; - Иначе - НаселенныйПунктДетально = НаселенныйПунктДетальноПоИдентификатору(ИдентификаторНаселенногоПункта, ВидКонтактнойИнформации.ФорматАдреса); - КонецЕсли; - КонецЕсли; - - РегионНеЗагружен = ВыбранноеЗначение.Свойство("РегионЗагружен") И (Не ВыбранноеЗначение.РегионЗагружен); - Если МожноЗагружатьКлассификатор И РегионНеЗагружен Тогда - // Предлагаем загрузить классификатор. - УправлениеКонтактнойИнформациейКлиент.ПредложениеЗагрузкиКлассификатора( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Данные для ""%1"" не загружены.'"), ВыбранноеЗначение.Представление), - ВыбранноеЗначение.Представление); - КонецЕсли; - - Иначе - // Иной источник, будет попытка разобрать. - НаселенныйПункт = Строка(ВыбранноеЗначение); - КонецЕсли; - - Контекст = КонтекстФормыКлиент(); - // Так как изменился населенный пункт, то перепроверяем улицу, индекс и представление обновятся там. - ЗаполнитьПредставлениеАдреса(Контекст); - КонтекстФормыКлиент(Контекст); - - -КонецПроцедуры - -&НаКлиенте -Процедура УлицаИностранныйАдресаПриИзменении(Элемент) - Контекст = КонтекстФормыКлиент(); - ЗаполнитьПредставлениеАдреса(Контекст); - КонтекстФормыКлиент(Контекст); - -КонецПроцедуры - -&НаКлиенте -Процедура НаселенныйПунктИностранныйАдресаПриИзменении(Элемент) - - ОбновитьНаселенныйПунктИностранногоАдреса(); - -КонецПроцедуры - &НаКлиенте Процедура ОбновитьНаселенныйПунктИностранногоАдреса() @@ -2621,23 +2896,90 @@ КонецПроцедуры &НаКлиенте -Процедура ДомИностранныйАдресаПриИзменении(Элемент) - ОбновитьПредставлениеАдреса(); +Процедура ЗаполнитьПоляДомовИСтроений(Знач ВыбранноеЗначение) + + Модифицированность = Истина; + НеобходимоПерерисоватьПоляДомов = Ложь; + Если ДополнительныеЗдания.Количество() > 0 Тогда + ДополнительныеЗдания.Очистить(); + НеобходимоПерерисоватьПоляДомов = Истина; + КонецЕсли; + + Если ВыбранноеЗначение.Свойство("Дом") Тогда + ИнформацияОДоме = ВыбранноеЗначение.Дом; + Дом = ИнформацияОДоме.НомерВладения; + ТипДома = ИнформацияОДоме.ВидВладения; + Иначе + ИнформацияОДоме = Неопределено; + КонецЕсли; + ИнформацияОКорпусе = Неопределено; + ИнформацияОСтроение = Неопределено; + ВыбранноеЗначение.Свойство("Корпус", ИнформацияОКорпусе); + ВыбранноеЗначение.Свойство("Строение", ИнформацияОСтроение); + СтроениеПустое = Истина; + Элементы.Дом.ОбновитьТекстРедактирования(); + Если ИнформацияОКорпусе <> Неопределено Тогда + Строение = ИнформацияОКорпусе.НомерКорпуса; + ТипСтроения = ИнформацияОКорпусе.ВидКорпуса; + ТекущийЭлемент = Элементы.Строение; + СтроениеПустое = Ложь; + КонецЕсли; + Если ИнформацияОСтроение <> Неопределено Тогда + Если ИнформацияОКорпусе <> Неопределено Тогда + ДополнительныеЗдания.Очистить(); + Строка = ДополнительныеЗдания.Добавить(); + + Строка.Тип = ТРег(ИнформацияОСтроение.ВидСтроения); + Строка.ПутьXPath = УправлениеКонтактнойИнформациейКлиентСервер.XPathНомераДополнительногоОбъектаАдресации(Строка.Тип); + Строка.Значение = ИнформацияОСтроение.НомерСтроения; + ИмяТекущего = ОтобразитьДополнительныеЗдания(); + НеобходимоПерерисоватьПоляДомов = Ложь; + Если ИмяТекущего <> Неопределено Тогда + ЭтотОбъект[ИмяТекущего] = ИнформацияОСтроение.НомерСтроения; + ТекущийЭлемент = Элементы[ИмяТекущего]; + ТекущийЭлемент.ОбновитьТекстРедактирования(); + КонецЕсли; + Иначе + Строение = ИнформацияОСтроение.НомерСтроения; + ТипСтроения = ТРег(ИнформацияОСтроение.ВидСтроения); + ТекущийЭлемент = Элементы.Строение; + КонецЕсли; + СтроениеПустое = Ложь; + КонецЕсли; + + Если СтроениеПустое Тогда + Строение = ""; + КонецЕсли; + + Если НеобходимоПерерисоватьПоляДомов Тогда + ОтобразитьДополнительныеЗдания(); + КоличествоВариантов = НеиспользованныеЭлементыДополнительнойТаблицы(ДополнительныеЗдания, Элементы.ТипСтроения, 1); + Элементы.ДобавитьОбъект.Доступность = КоличествоВариантов.Количество() > 1; + КонецЕсли; + + ОбновитьИндексИПредставление(); + КонецПроцедуры &НаКлиенте -Процедура СтроениеИностранныйАдресаПриИзменении(Элемент) - ОбновитьПредставлениеАдреса(); +Процедура ОбновитьИндексИПредставление() + Контекст = КонтекстФормыКлиент(); + УстановитьИндексИПредставление(Контекст); + КонтекстФормыКлиент(Контекст); КонецПроцедуры -&НаКлиенте -Процедура ПомещениеИностранныйАдресаПриИзменении(Элемент) - ОбновитьПредставлениеАдреса(); -КонецПроцедуры +&НаСервереБезКонтекста +Функция НаличиеИндексаВКлассификаторе(ПочтовыйИндекс) + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); + Если МодульАдресныйКлассификаторСлужебный.КодСубъектаРФПоПочтовомуИндексуВКлассификаторе(ПочтовыйИндекс) <> Неопределено Тогда + Возврат Истина; + КонецЕсли; + КонецЕсли; + + Возврат Ложь; +КонецФункции -&НаКлиенте -Процедура ИндексПриИзменении(Элемент) - ОбновитьПредставлениеАдреса(); -КонецПроцедуры #КонецОбласти diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form index ffd438700..dd8317fae 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Form.form @@ -5,349 +5,31 @@ Номер телефона, факса - ТелефонПредставлениеКомментарий - 56 - - ТелефонСтраницаПредставление - 58 - - ОсновнойНомер - 14 - - ГруппаТелефона - 24 - - КодСтраны - 5 - true - true - - true - - - КодСтраны - - Top - - ru - Код страны в телефонном номере - - - OnChange - КодСтраныПриИзменении - - - КодСтраныExtendedTooltip - 41 - Label - true - true - - Left - - - - КодСтраныКонтекстноеМеню - 6 - true - - InputField - Enter - true - Left - true - - 6 - true - true - false - true - true - true - true - Normal - - - - КодГорода - 3 - true - true - - true - - - КодГорода - - Top - - ru - Код города в телефонном номере - - - OnChange - КодГородаПриИзменении - - - КодГородаExtendedTooltip - 42 - Label - true - true - - Left - - - - КодГородаКонтекстноеМеню - 4 - true - - InputField - Enter - true - Left - true - - 6 - true - true - false - true - true - true - true - Normal - - - - НомерТелефона - 9 - true - true - - true - - - НомерТелефона - - Top - - ru - Номер телефона в телефонном номере - - - OnChange - НомерТелефонаПриИзменении - - - НомерТелефонаExtendedTooltip - 43 - Label - true - true - - Left - - - - НомерТелефонаКонтекстноеМеню - 10 - true - - InputField - Enter - true - Left - true - - 21 - true - true - true - true - true - true - true - Normal - - - - Добавочный - 1 - true - true - - true - - - Добавочный - - Top - - ru - Добавочный номер - - - OnChange - ДобавочныйПриИзменении - - - ДобавочныйExtendedTooltip - 44 - Label - true - true - - Left - - - - ДобавочныйКонтекстноеМеню - 2 - true - - InputField - Enter - true - Left - true - - 8 - true - true - false - true - true - true - true - Normal - - - true - true - - true - - - ГруппаТелефонаExtendedTooltip - 40 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - Представление - 11 - true - true - - true - - - Представление - - None - - ПредставлениеExtendedTooltip - 45 - Label - true - true - - Left - - - - ПредставлениеКонтекстноеМеню - 12 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - true - - Style.ButtonBackColor - - Normal - - ru - Например: +7 123 4567890 - - - - true - true - - true - - - <key>ru</key> - <value>Основной номер</value> - - - ru - Основной номер - - - ОсновнойНомерExtendedTooltip - 39 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - + ГруппаТелефона + 24 + + КодСтраны + 5 true true true - - <key>ru</key> - <value>Номер</value> - + + КодСтраны + + Top ru - Телефон страница представление + Код страны в телефонном номере + + OnChange + КодСтраныПриИзменении + - ТелефонСтраницаПредставлениеРасширеннаяПодсказка - 59 + КодСтраныExtendedTooltip + 41 Label true true @@ -355,83 +37,55 @@ Left - Page - - Vertical - auto + + КодСтраныКонтекстноеМеню + 6 + true + + InputField + Enter + true + Left + true + + 6 + true + true + false + true + true + true + true + Normal + + ru + +7 + - - ТелефонСтраницаКомментарий - 60 - - Комментарий - 7 - true - true - - true - - - Комментарий - - None - - ru - Дополнительный комментарий, не попадающий в представление - - - OnChange - КомментарийПриИзменении - - - КомментарийExtendedTooltip - 47 - Label - true - true - - Left - - - - КомментарийКонтекстноеМеню - 8 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - true - true - Normal - - + + КодГорода + 3 true true true - - <key>ru</key> - <value>Комментарий</value> - + + КодГорода + + Top ru - Телефон страница комментарий + Код города в телефонном номере + + OnChange + КодГородаПриИзменении + - ТелефонСтраницаКомментарийРасширеннаяПодсказка - 61 + КодГородаExtendedTooltip + 42 Label true true @@ -439,10 +93,265 @@ Left - Page - - Vertical - auto + + КодГородаКонтекстноеМеню + 4 + true + + InputField + Enter + true + Left + true + + 6 + true + true + false + true + true + true + true + true + Normal + + ru + 123 + + + + + НомерТелефона + 9 + true + true + + true + + + НомерТелефона + + Top + + ru + Номер телефона в телефонном номере + + + OnChange + НомерТелефонаПриИзменении + + + НомерТелефонаExtendedTooltip + 43 + Label + true + true + + Left + + + + НомерТелефонаКонтекстноеМеню + 10 + true + + InputField + Enter + true + Left + true + + 21 + true + true + true + true + true + true + true + Normal + + ru + 123-45-67 + + + + + Добавочный + 1 + true + true + + true + + + Добавочный + + Top + + ru + Добавочный номер + + + OnChange + ДобавочныйПриИзменении + + + ДобавочныйExtendedTooltip + 44 + Label + true + true + + Left + + + + ДобавочныйКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + 8 + true + true + false + true + true + true + true + Normal + + + true + true + + true + + + ГруппаТелефонаExtendedTooltip + 40 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Представление + 11 + true + true + + true + + + Представление + + None + + ПредставлениеExtendedTooltip + 45 + Label + true + true + + Left + + + + ПредставлениеКонтекстноеМеню + 12 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + + Style.ButtonBackColor + + Normal + + ru + Введите номер телефона + + + + + ГруппаКомментарий + 72 + + Комментарий + 7 + true + true + + true + + + Комментарий + + Left + + ru + Дополнительный комментарий, не попадающий в представление + + + КомментарийExtendedTooltip + 47 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 8 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + true + Normal true @@ -452,15 +361,15 @@ <key>ru</key> - <value>Телефон представление комментарий</value> + <value>Группа комментарий</value> ru - Телефон представление комментарий + Группа комментарий - ТелефонПредставлениеКомментарийРасширеннаяПодсказка - 57 + ГруппаКомментарийРасширеннаяПодсказка + 73 Label true true @@ -468,9 +377,14 @@ Left - Pages - - TabsOnTop + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto Auto @@ -804,6 +718,9 @@ true + + КодСтраны + true @@ -825,6 +742,9 @@ true + + КодГорода + true @@ -1010,6 +930,216 @@ true + + СписокКодовГорода + + <key>ru</key> + <value>Список кодов города</value> + + 15 + + + true + + + true + + + + КонтактнаяИнформацияОписаниеДополнительныхРеквизитов + + <key>ru</key> + <value>Контактная информация описание дополнительных реквизитов</value> + + 16 + + ValueTable + + + true + + + true + + + ИмяРеквизита + + <key>ru</key> + <value>Имя реквизита</value> + + 1 + + String + + + + true + + + true + + + + Вид + + <key>ru</key> + <value>Вид</value> + + 2 + + CatalogRef.ВидыКонтактнойИнформации + + + true + + + true + + + + Тип + + <key>ru</key> + <value>Тип</value> + + 3 + + EnumRef.ТипыКонтактнойИнформации + + + true + + + true + + + + ЗначенияПолей + + <key>ru</key> + <value>Значения полей</value> + + 4 + + ValueList + 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 + + Date + + Date + + + + true + + + true + + + + ЭтоИсторическаяКонтактнаяИнформация + + <key>ru</key> + <value>Это историческая контактная информация</value> + + 9 + + Boolean + + + true + + + true + + + + ХранитьИсториюИзменений + + <key>ru</key> + <value>Хранить историю изменений</value> + + 11 + + Boolean + + + true + + + true + + + КомандаОК diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Help/ru.html b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Help/ru.html index c0063a979..d190dd505 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Help/ru.html +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Help/ru.html @@ -1,11 +1,11 @@ -<!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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для ввода номера телефона (факса) с использованием шаблона.</p> <p>Открывается из табличной части документов или элементов списков - носителей контактной информации по кнопке <img src="StdPicture.InputFieldSelect"></img> <strong>Выбрать</strong>.</p> <p>Для того чтобы ввести телефон (факс), необходимо заполнить поля:</p> <ul><li><strong>Код страны</strong> - программа автоматически добавляет "+" к коду страны; </li><li><strong>Код города</strong> - автоматически заключается в скобки; -</li><li><strong>Номер</strong> - пишется в произвольной форме; -</li><li><strong>Добавочный номер</strong> - перед цифрами добавочного номера программа автоматически проставляет доб. Зависит от настроек (добавочного номера может и не быть); +<ul><li>В шаблоне ввода номера телефона для ускорения ввода новых телефонных номеров в поля с кодом страны и города автоматически подставляются значения, введенные в предыдущий раз. Дополнительно для кода города запоминаются 10 ранее введенных кодов, которые можно быстро выбрать из выпадающего списка;</li></ul></li><li><strong>Номер телефона</strong> - пишется в произвольной форме; +</li><li><strong>Добавочный номер</strong> - перед цифрами добавочного номера программа автоматически проставляет доб; </li><li><strong>Комментарий</strong> - введите дополнительную информацию о телефоне.</li></ul><h3>Очистка номера телефона (факса)</h3> <ul><li>Для того чтобы удалить ошибочно введенный номер телефона (факса) и начать заполнение заново, воспользуйтесь командой  <strong>Еще</strong> - <strong>Очистить номер телефона</strong>. </li></ul><h3>См. также:</h3> <ul><li><a href="Catalog.ВидыКонтактнойИнформации/Help">Виды контактной информации</a>. diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl index 5b5c556a1..09de22429 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВводТелефона/Module.bsl @@ -31,7 +31,7 @@ Параметры.Свойство("ВозвращатьСписокЗначений", ВозвращатьСписокЗначений); // Разбор параметров в реквизиты. - Если ТипЗнч(Параметры.ВидКонтактнойИнформации) = Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда + Если ТипЗнч(Параметры.ВидКонтактнойИнформации) = Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда ВидКонтактнойИнформации = Параметры.ВидКонтактнойИнформации; ТипКонтактнойИнформации = ВидКонтактнойИнформации.Тип; Иначе @@ -43,7 +43,9 @@ Заголовок = ?(ПустаяСтрока(Параметры.Заголовок), Строка(ВидКонтактнойИнформации), Параметры.Заголовок); + ЭтоНовый = Истина; Если УправлениеКонтактнойИнформациейКлиентСервер.ЭтоКонтактнаяИнформацияВXML(Параметры.ЗначенияПолей) Тогда + ЭтоНовый = Ложь; РезультатыЧтения = Новый Структура; XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияИзXML(Параметры.ЗначенияПолей, ТипКонтактнойИнформации, РезультатыЧтения); Если РезультатыЧтения.Свойство("ТекстОшибки") Тогда @@ -51,13 +53,12 @@ ТекстПредупрежденияПриОткрытии = РезультатыЧтения.ТекстОшибки; XDTOКонтактная.Представление = Параметры.Представление; КонецЕсли; - - ИначеЕсли ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда - XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.ДесериализацияТелефона(Параметры.ЗначенияПолей, Параметры.Представление, ТипКонтактнойИнформации); - Иначе - XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.ДесериализацияФакса(Параметры.ЗначенияПолей, Параметры.Представление, ТипКонтактнойИнформации); - + Если ТипКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда + XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.ДесериализацияТелефона(Параметры.ЗначенияПолей, Параметры.Представление, ТипКонтактнойИнформации); + Иначе + XDTOКонтактная = УправлениеКонтактнойИнформациейСлужебный.ДесериализацияФакса(Параметры.ЗначенияПолей, Параметры.Представление, ТипКонтактнойИнформации); + КонецЕсли; КонецЕсли; Если Параметры.Комментарий <> Неопределено Тогда @@ -74,18 +75,39 @@ Элементы.ОчиститьТелефон.Видимость = Ложь; Элементы.ИзменитьФорму.Видимость = Ложь; КонецЕсли; + + Коды = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("Обработка.ВводКонтактнойИнформации.Форма.ВводТелефона", "КодыСтраныИГорода"); + Если ТипЗнч(Коды) = Тип("Структура") Тогда + Если ЭтоНовый Тогда + Коды.Свойство("КодСтраны", КодСтраны); + Коды.Свойство("КодГорода", КодГорода); + КонецЕсли; + Если Коды.Свойство("СписокКодовГорода") Тогда + Элементы.КодГорода.СписокВыбора.ЗагрузитьЗначения(Коды.СписокКодовГорода); + КонецЕсли; + КонецЕсли; + + Если ВидКонтактнойИнформации.ХранитьИсториюИзменений И Параметры.Свойство("КонтактнаяИнформацияОписаниеДополнительныхРеквизитов") Тогда + Для каждого СтрокаКИ Из Параметры.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов Цикл + НоваяСтрока = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаКИ); + КонецЦикла; + КонецЕсли; + КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - УстановитьПиктограммуКомментария(); - Если Не ПустаяСтрока(ТекстПредупрежденияПриОткрытии) Тогда ПодключитьОбработчикОжидания("Подключаемый_ПредупредитьПослеОткрытияФормы", 0.1, Истина); КонецЕсли; + Если ЗначениеЗаполнено(КодГорода) Тогда + ТекущийЭлемент = Элементы.КодГорода; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -129,13 +151,6 @@ КонецПроцедуры -&НаКлиенте -Процедура КомментарийПриИзменении(Элемент) - - ПодключитьОбработчикОжидания("УстановитьПиктограммуКомментария", 0.1, Истина); - -КонецПроцедуры - #КонецОбласти #Область ОбработчикиКомандФормы @@ -171,10 +186,6 @@ КонецПроцедуры -&НаКлиенте -Процедура УстановитьПиктограммуКомментария() - Элементы.ТелефонСтраницаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Комментарий); -КонецПроцедуры &НаКлиенте Процедура ПодтвердитьИЗакрыть(Результат = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт @@ -182,24 +193,25 @@ // При немодифицированности работает "отмена". Если Модифицированность Тогда - // Изменено значение адреса - + // Сохранить коды страны и города (нужно все убрать в один серверный вызов) + ЕстьОшибкиЗаполнения = Ложь; // Смотрим, надо ли проверять на корректность. Если ПроверятьКорректность Тогда - СписокОшибок = ОшибкиЗаполненияТелефонаСервер(); - ЕстьОшибкиЗаполнения = СписокОшибок.Количество()>0; + СписокОшибок = ОшибкиЗаполненияТелефона(); + ЕстьОшибкиЗаполнения = СписокОшибок.Количество() > 0; КонецЕсли; Если ЕстьОшибкиЗаполнения Тогда СообщитьОбОшибкахЗаполнения(СписокОшибок); Возврат; КонецЕсли; + Результат = РезультатВыбора(); СброситьМодифицированностьПриВыборе(); ОповеститьОВыборе(Результат); - ИначеЕсли Комментарий<>КопияКомментария Тогда + ИначеЕсли Комментарий <> КопияКомментария Тогда // Изменен только комментарий, пробуем вернуть обновленное. Результат = РезультатВыбораТолькоКомментария(); @@ -228,6 +240,26 @@ &НаСервере Функция РезультатВыбора() + + Результат = Новый Структура("КонтактнаяИнформация, Представление, Комментарий, Вид, Тип, КонтактнаяИнформацияОписаниеДополнительныхРеквизитов"); + + СписокВыбора = Элементы.КодГорода.СписокВыбора; + ЭлементСписка = СписокВыбора.НайтиПоЗначению(КодГорода); + Если ЭлементСписка = Неопределено Тогда + СписокВыбора.Вставить(0, КодГорода); + Если СписокВыбора.Количество() > 10 Тогда + СписокВыбора.Удалить(10); + КонецЕсли; + Иначе + Индекс = СписокВыбора.Индекс(ЭлементСписка); + Если Индекс <> 0 Тогда + СписокВыбора.Сдвинуть(Индекс, -Индекс); + КонецЕсли; + КонецЕсли; + + Коды = Новый Структура("КодСтраны, КодГорода, СписокКодовГорода", КодСтраны, КодГорода, СписокВыбора.ВыгрузитьЗначения()); + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("Обработка.ВводКонтактнойИнформации.Форма.ВводТелефона", "КодыСтраныИГорода", Коды, НСтр("ru = 'Коды страны и города'")); + XDTOИнформация = КонтактнаяИнформацияПоЗначениюРеквизитов(); Если ВозвращатьСписокЗначений Тогда @@ -236,13 +268,18 @@ Иначе ДанныеВыбора = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(XDTOИнформация); КонецЕсли; - - Возврат Новый Структура("КонтактнаяИнформация, Представление, Комментарий", - ДанныеВыбора, - XDTOИнформация.Представление, - XDTOИнформация.Комментарий); + + Результат.Вид = ВидКонтактнойИнформации; + Результат.Тип = ВидКонтактнойИнформации.Тип; + Результат.КонтактнаяИнформация = ДанныеВыбора; + Результат.Представление = XDTOИнформация.Представление; + Результат.Комментарий = XDTOИнформация.Комментарий; + Результат.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов = КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; + + Возврат Результат КонецФункции + &НаСервере Функция РезультатВыбораТолькоКомментария() @@ -325,7 +362,7 @@ ЗаполнитьПредставлениеТелефонаСервер(); -КонецПроцедуры +КонецПроцедуры &НаСервере Процедура ЗаполнитьПредставлениеТелефонаСервер(XDTOКонтактная = Неопределено) @@ -338,10 +375,28 @@ // Возвращает список ошибок заполнения в виде списка значений: // Представление - описание ошибки. // Значение - XPath для поля. -&НаСервере -Функция ОшибкиЗаполненияТелефонаСервер() - Возврат Новый СписокЗначений(); -КонецФункции +&НаКлиенте +Функция ОшибкиЗаполненияТелефона() + + СписокОшибок = Новый СписокЗначений; + ПолныйНомерТелефона = КодСтраны + КодГорода + НомерТелефона; + НомерТелефонаТолькоЦифры = ТолькоЦифры(ПолныйНомерТелефона); + Если СтрДлина(НомерТелефонаТолькоЦифры) > 15 Тогда + СписокОшибок.Добавить("НомерТелефона", НСтр("ru = 'Номере телефона слишком длинный'")); + КонецЕсли; + Если НомерТелефонаСодержитНедопустимыеСимволы(ПолныйНомерТелефона) Тогда + СписокОшибок.Добавить("НомерТелефона", НСтр("ru = 'Номер телефона содержит недопустимые символы'")); + КонецЕсли; + Если КодСтраны = "7" И СтрДлина(НомерТелефона) > 7 Тогда + СписокОшибок.Добавить("НомерТелефона", НСтр("ru = 'В России номер телефона не может быть больше 7 цифр'")); + КонецЕсли; + + Если СтрНачинаетсяС(КодГорода, "9") И СтрДлина(КодГорода) <> 3 Тогда + СписокОшибок.Добавить("НомерТелефона", НСтр("ru = 'В России номера мобильных телефонов должны содержать 3 цифры'")); + КонецЕсли; + + Возврат СписокОшибок; +КонецФункции // Сообщает об ошибках заполнения по результату функции ОшибкиЗаполненияТелефонаСервер. &НаКлиенте @@ -360,7 +415,7 @@ ПутьКДаннымФормыПоПутиXPath(Элемент.Значение)); КонецЦикла; -КонецПроцедуры +КонецПроцедуры &НаКлиенте Функция ПутьКДаннымФормыПоПутиXPath(ПутьXPath) @@ -379,5 +434,64 @@ Модифицированность = Истина; КонецПроцедуры +// Проверяет, содержит ли строка только ~ +// +// Параметры: +// СтрокаПроверки - Строка - Строка для проверки. +// +// Возвращаемое значение: +// Булево - Истина - строка содержит только цифры или пустая, Ложь - строка содержит иные символы. +// +&НаКлиенте +Функция НомерТелефонаСодержитНедопустимыеСимволы(Знач СтрокаПроверки) + + СписокДопустимыхСимволов = Новый Соответствие; + СписокДопустимыхСимволов.Вставить("+", "+"); + СписокДопустимыхСимволов.Вставить("-", "-"); + СписокДопустимыхСимволов.Вставить(".", "."); + СписокДопустимыхСимволов.Вставить(",", ","); + СписокДопустимыхСимволов.Вставить("(", "("); + СписокДопустимыхСимволов.Вставить(")", ")"); + СписокДопустимыхСимволов.Вставить(" ", " "); + СписокДопустимыхСимволов.Вставить("w", "w"); + СписокДопустимыхСимволов.Вставить("p", "p"); + СписокДопустимыхСимволов.Вставить("1", "1"); + СписокДопустимыхСимволов.Вставить("2", "2"); + СписокДопустимыхСимволов.Вставить("3", "3"); + СписокДопустимыхСимволов.Вставить("4", "4"); + СписокДопустимыхСимволов.Вставить("5", "5"); + СписокДопустимыхСимволов.Вставить("6", "6"); + СписокДопустимыхСимволов.Вставить("7", "7"); + СписокДопустимыхСимволов.Вставить("8", "8"); + СписокДопустимыхСимволов.Вставить("9", "9"); + СписокДопустимыхСимволов.Вставить("0", "0"); + + Для НомерСимвола = 1 По СтрДлина(СтрокаПроверки) Цикл + Символ = Сред(СтрокаПроверки, НомерСимвола, 1); + Если СписокДопустимыхСимволов.Получить(Символ) = Неопределено Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; +КонецФункции + + +&НаКлиентеНаСервереБезКонтекста +Функция ТолькоЦифры(Строка) + + ОбработаннаяСтрока = ""; + + Для НомерСимвола = 1 По СтрДлина(Строка) Цикл + Символ = Сред(Строка, НомерСимвола, 1); + Если Символ >= "0" И Символ <= "9" Тогда + ОбработаннаяСтрока = ОбработаннаяСтрока + Символ; + КонецЕсли; + КонецЦикла; + + Возврат ОбработаннаяСтрока; + +КонецФункции + #КонецОбласти diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Help/ru.html b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Help/ru.html index 4f94b9b1f..7bb061afa 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Help/ru.html +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборАдресаПоПочтовомуИндексу/Help/ru.html @@ -1,9 +1,12 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></meta></head><body> -<p>Предназначена для выбора адреса по почтовому индексу.</p> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.18427"></meta></head><body> +<p>Предназначена для выбора адреса по почтовому индексу. Если известен почтовый индекс, это убыстрит ввод адреса.</p> +<p>Почтовое деление России следует административному делению страны. Введенная в 1971 году система 6-значных почтовых индексов была унаследована от СССР и не претерпела существенных изменений. Первые три цифры индекса соответствуют определенному субъекту федерации. Следующие три - номеру почтового отделения в нем.</p> <p>Для поиска адреса по индексу необходимо, чтобы по соответствующему региону был загружен адресный классификатор.</p> <p>Открывается из окна <a href="DataProcessor.ВводКонтактнойИнформации.Form.ВводАдреса/Help">ввода адреса</a> автоматически или по команде <strong>Еще</strong> <strong>- Заполнить по почтовому индексу</strong> после ввода почтового индекса. </p> -<p>Вверху окна выводится часть адреса, которую удалось восстановить по индексу. Остается только уточнить. Для выбора предлагаются: улицы крупного города или населенные пункты и улицы населенных пунктов района. Выделите соответствующую часть адреса, нажмите <strong>Выбрать</strong>. Также можно воспользоваться двойным щелчком мыши. После выбора улицы в открывшемся окне ввода адреса введите оставшиеся части адреса.</p> -<h3>См. также:</h3> +<ul><li>Вверху окна выводится часть адреса, которую удалось восстановить по индексу. Остается только уточнить.  +</li><li>Для выбора предлагаются: улицы крупного города или населенные пункты и улицы населенных пунктов района.  +</li><li>Выделите соответствующую часть адреса, нажмите <strong>Выбрать</strong>. Также можно воспользоваться двойным щелчком мыши. +</li><li>После выбора улицы в открывшемся окне ввода адреса введите оставшиеся части адреса.</li></ul><h3>См. также:</h3> <ul><li><a href="Catalog.ВидыКонтактнойИнформации/Help">Виды контактной информации</a>; </li><li><a href="DataProcessor.ВводКонтактнойИнформации/Help">Ввод контактной информации</a>; </li><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ 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 8fdee7bfc..a88bd82e4 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для выбора адреса по почтовому индексу.</p> <p>Для поиска адреса по индексу необходимо, чтобы по соответствующему региону был загружен адресный классификатор.</p> <p>Открывается из окна <a href="DataProcessor.ВводКонтактнойИнформации.Form.ВводАдреса/Help">ввода адреса</a> по команде <strong>Еще</strong> <strong>- Заполнить по почтовому индексу</strong> после ввода почтового индекса. </p> diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Module.bsl index 6a444a047..0693c89fd 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборАдресаПоУровню/Module.bsl @@ -42,7 +42,7 @@ Если НЕ ЗначениеЗаполнено(Родитель) И Уровень > 1 Тогда // поиск адреса без родителя - КраткоеПредставлениеОшибки = НСтр("ru = 'Поле не содержит адресных сведений для выбора.'");; + КраткоеПредставлениеОшибки = НСтр("ru = 'Поле не содержит адресных сведений для выбора.'"); Возврат; КонецЕсли; @@ -54,7 +54,7 @@ Возврат; ИначеЕсли ДанныеКлассификатора.Данные.Количество() = 0 Тогда - КраткоеПредставлениеОшибки = НСтр("ru = 'Поле не содержит адресных сведений для выбора.'");; + КраткоеПредставлениеОшибки = НСтр("ru = 'Поле не содержит адресных сведений для выбора.'"); // Нет данных, функционал выбора не применим. КонецЕсли; diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборДома/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборДома/Form.form new file mode 100644 index 000000000..99dbe198e --- /dev/null +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборДома/Form.form @@ -0,0 +1,697 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="http://g5.1c.ru/v8/dt/mcore" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <title> + <key>ru</key> + <value>Выбрать дом, строение</value> + + + ГруппаКоманднаяПанель + 59 + + ГруппаКнопкаВыбрать + 61 + + ФормаВыбрать + 57 + true + true + + true + + + ФормаВыбратьРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + Form.Command.Выбрать + Auto + true + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа кнопка выбрать</value> + + + ru + Группа кнопка выбрать + + + ГруппаКнопкаВыбратьРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + CommandBar + + Left + + + + ГруппаСписокДомов + 35 + + Найти + 54 + true + true + + true + + + Найти + + + ru + Поиск по номеру дома или номеру строения + + + НайтиРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + + НайтиКонтекстноеМеню + 55 + true + + InputField + Enter + true + Left + true + + + AutoComplete + НомерДомаСтроенияАвтоПодбор + + + Clearing + НайтиОчистка + + true + true + true + true + true + true + true + DontUse + Normal + + ru + Номер дома, строения + + + + true + true + + true + + + <key>ru</key> + <value>Группа список домов</value> + + + ru + Группа список домов + + + ГруппаСписокДомовРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа командная панель</value> + + + ru + Группа командная панель + + + ГруппаКоманднаяПанельРасширеннаяПодсказка + 60 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + СписокДомов + 3 + + <key>ru</key> + <value>Дом, Владение</value> + + true + true + + true + + + СписокДомов + + None + Add + Change + Copy + Delete + EndEdit + + СписокДомовДом + 16 + + <key>ru</key> + <value>Дом, Владение, Домовладение</value> + + true + true + + true + + + СписокДомов.Представление + + + СписокДомовДомРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + СписокДомовДомКонтекстноеМеню + 17 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + СписокДомовКоманднаяПанель + 5 + Left + + + Selection + СписокДомовВыбор + + + СписокДомовСтрокаПоиска + 7 + + СписокДомовСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокДомовСтрокаПоискаКонтекстноеМеню + 8 + true + + СписокДомов + + true + + + + СписокДомовСостояниеПросмотра + 10 + + СписокДомовСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокДомовСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + СписокДомов + + true + + + + СписокДомовУправлениеПоиском + 13 + + СписокДомовУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокДомовУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + СписокДомов + + true + + + + СписокДомовРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокДомовКонтекстноеМеню + 4 + true + + Tree + true + true + 25 + true + true + true + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + true + true + true + true + true + + + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + 35 + 17 + LockOwner + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ВводКонтактнойИнформации + + + true + + + true + +
              true
              +
              + + СписокДомов + + <key>ru</key> + <value>Список домов</value> + + 2 + + ValueTable + + + true + + + true + + + Дом + + <key>ru</key> + <value>Дом</value> + + 1 + + String + + 20 + + + + true + + + true + + + + ДомЧислом + + <key>ru</key> + <value>Дом числом</value> + + 2 + + Number + + 5 + + + + true + + + true + + + + Описание + + <key>ru</key> + <value>Описание</value> + + 3 + + + true + + + true + + + + Корпус + + <key>ru</key> + <value>Корпус</value> + + 4 + + String + + 20 + + + + true + + + true + + + + Строение + + <key>ru</key> + <value>Строение</value> + + 5 + + String + + 20 + + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Представление</value> + + 6 + + String + + + + true + + + true + + + + Значение + + <key>ru</key> + <value>Значение</value> + + 7 + + + true + + + true + + + + + Найти + + <key>ru</key> + <value>Найти</value> + + 8 + + String + + + + true + + + true + + + + АдресныйОбъект + + <key>ru</key> + <value>Адресный объект</value> + + 9 + + UUID + + + true + + + true + + + + Выбрать + + <key>ru</key> + <value>Выбрать</value> + + 1 + + ru + Выбрать + + + true + + + + Выбрать + + + DontUse + Auto + + + Найти + + <key>ru</key> + <value>Найти</value> + + 2 + + ru + Найти + + + true + + DontUse + Auto + + + ОтменитьПоиск + + <key>ru</key> + <value>Отменить поиск</value> + + 3 + + ru + Отменить поиск + + + true + + + StdPicture.CancelSearch + + DontUse + Auto + + + Идентификатор + + UUID + + + + ТипСтроения + + String + + + + + Строение + + String + + 20 + + + + + Дом + + String + + 20 + + + + + Отбор + + Boolean + + + + + + + + diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборДома/Module.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборДома/Module.bsl new file mode 100644 index 000000000..5b1fa5365 --- /dev/null +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборДома/Module.bsl @@ -0,0 +1,79 @@ +#Область ОбработчикиСобытийФормы +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + АдресныйОбъект = Параметры.Идентификатор; + Если Параметры.Отбор Тогда + ЗаполнитьСписокДомов(Параметры.Дом); + Иначе + ЗаполнитьСписокДомов(Неопределено); + КонецЕсли; + + // позиционирование + Отбор = Новый Структура("Дом", Параметры.Дом); + Если ЗначениеЗаполнено(Параметры.ТипСтроения) Тогда + Если ВРег(Параметры.ТипСтроения) = НСтр("ru = 'КОРПУС'") Тогда + Отбор.Вставить("Корпус", Параметры.Строение); + Отбор.Вставить("Строение", ""); + Иначе + Отбор.Вставить("Строение", Параметры.Строение); + Отбор.Вставить("Корпус", ""); + КонецЕсли; + КонецЕсли; + + Строки = СписокДомов.НайтиСтроки(Отбор); + Если Строки.Количество() > 0 Тогда + Элементы.СписокДомов.ТекущаяСтрока = Строки[0].ПолучитьИдентификатор(); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура НайтиОчистка(Элемент, СтандартнаяОбработка) + СписокДомов.Очистить(); + ЗаполнитьСписокДомов(Неопределено); +КонецПроцедуры + +&НаКлиенте +Процедура НомерДомаСтроенияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) + ЗаполнитьСписокДомов(Текст + "%"); +КонецПроцедуры + +&НаКлиенте +Процедура СписокДомовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + Закрыть(Элементы.СписокДомов.ТекущиеДанные.Значение); +КонецПроцедуры + +#КонецОбласти + + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура Выбрать(Команда) + Закрыть(Элементы.СписокДомов.ТекущиеДанные.Значение); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура ЗаполнитьСписокДомов(Текст) + + СписокДомов.Очистить(); + СтрокаПоиска = ?(ЗначениеЗаполнено(Текст), Текст, ""); + СписокДомов.Загрузить(УправлениеКонтактнойИнформациейСлужебный.СписокДомов(АдресныйОбъект, СтрокаПоиска)); + +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборУлицы/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборУлицы/Form.form index 8f82293ff..680ac2d8a 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборУлицы/Form.form +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборУлицы/Form.form @@ -1079,6 +1079,7 @@ Vertical auto + false
              @@ -1501,6 +1502,7 @@ Vertical auto + false true diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборУлицы/Help/ru.html b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборУлицы/Help/ru.html index 8fdee7bfc..a88bd82e4 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 f78b98077..56c7c4194 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборУлицы/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ВыборУлицы/Module.bsl @@ -99,7 +99,7 @@ #Область ОбработчикиСобытийЭлементовФормы &НаКлиенте -Процедура НайтиАвтоПодбор(Элемент, Текст, ДанныеВыбора, Параметры, Ожидание, СтандартнаяОбработка) +Процедура НайтиАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) Если Ожидание = 0 Тогда // Формирование списка быстрого выбора, стандартную обработку не надо трогать. diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Form.form new file mode 100644 index 000000000..4e6a32ba7 --- /dev/null +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Form.form @@ -0,0 +1,1002 @@ + + + + <key>ru</key> + <value>История контактной информации</value> + + + История + 1 + true + true + + true + + + История + + None + CancelSearch + Copy + EndEdit + Find + MoveDown + MoveUp + ShowRowRearrangement + SortListAsc + SortListDesc + + ИсторияДействуетС + 14 + true + true + + true + + + История.ДействуетС + + + ИсторияДействуетСРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + ИсторияДействуетСКонтекстноеМеню + 15 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ИсторияПредставление + 17 + true + true + + true + + + История.Представление + + + OnChange + ИсторияПредставлениеПриИзменении + + + ИсторияПредставлениеРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + ИсторияПредставлениеКонтекстноеМеню + 18 + true + + InputField + Auto + true + Left + true + + + StartChoice + ИсторияАдресНачалоВыбора + + true + true + true + true + true + true + true + Normal + + + + ИсторияКоманднаяПанель + 3 + + ИсторияДобавить + 22 + true + true + + true + + + ИсторияДобавитьРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Form.Item.История.StandardCommand.Add + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ИсторияИзменить + 20 + true + true + + true + + + ИсторияИзменитьРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + Form.Item.История.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ИсторияУдалить + 24 + true + true + + true + + + ИсторияУдалитьРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + Form.Item.История.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + + + ИсторияГруппаДействия + 32 + + ИсторияИзменитьФорму + 28 + true + true + + true + + + ИсторияИзменитьФормуРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + + ИсторияВывестиСписок + 30 + true + true + + true + + + ИсторияВывестиСписокРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + Form.Item.История.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ИсторияГруппаДействияРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + + + ИсторияГруппаСправка + 34 + + ФормаСправка + 26 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>История группа справка</value> + + + ru + История группа справка + + + ИсторияГруппаСправкаРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + + Left + true + + + BeforeAddRow + ИсторияПередНачаломДобавления + + + BeforeDeleteRow + ИсторияПередУдалением + + + OnActivateRow + ИсторияПриАктивизацииСтроки + + + BeforeRowChange + ИсторияПередНачаломИзменения + + + OnChange + ИсторияПриИзменении + + + ИсторияСтрокаПоиска + 5 + + ИсторияСтрокаПоискаРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + ИсторияСтрокаПоискаКонтекстноеМеню + 6 + true + + История + + true + + + + ИсторияСостояниеПросмотра + 8 + + ИсторияСостояниеПросмотраРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + ИсторияСостояниеПросмотраКонтекстноеМеню + 9 + true + + ViewStatusAddition + История + + true + + + + ИсторияУправлениеПоиском + 11 + + ИсторияУправлениеПоискомРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + ИсторияУправлениеПоискомКонтекстноеМеню + 12 + true + + SearchControlAddition + История + + true + + + + ИсторияРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + + ИсторияКонтекстноеМеню + 2 + + ИсторияКонтекстноеМенюДобавить + 42 + true + true + + true + + + ИсторияКонтекстноеМенюДобавитьРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + Form.Item.История.StandardCommand.Add + Normal + Auto + true + true + UserCmds + Auto + + + ИсторияКонтекстноеМенюИзменить + 44 + true + true + + true + + + ИсторияКонтекстноеМенюИзменитьРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + Form.Item.История.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + + ИсторияКонтекстноеМенюУдалить + 46 + true + true + + true + + + ИсторияКонтекстноеМенюУдалитьРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + Form.Item.История.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + + true + + true + true + true + true + true + MultiRow +
              true
              + 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + true + +
              + + ГруппаКоманднаяПанель + 36 + + ОК + 40 + true + true + + true + + true + + ОКРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + Form.Command.ОК + Auto + true + true + true + UserCmds + Auto + + + Отмена + 38 + true + true + + true + + + ОтменаРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + Form.Command.Отмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа командная панель</value> + + + ru + Группа командная панель + + + ГруппаКоманднаяПанельРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + CommandBar + + Right + + + + ФормаКоманднаяПанель + -1 + Left + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + 60 + LockOwner + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ВводКонтактнойИнформации + + + true + + + true + +
              true
              +
              + + История + + <key>ru</key> + <value>История</value> + + 2 + + ValueTable + + + true + + + true + + + ДействуетС + + <key>ru</key> + <value>Действует с</value> + + 1 + + Date + + Date + + + + 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> + + 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> + + 7 + + EnumRef.ТипыКонтактнойИнформации + + + true + + + true + + + + Комментарий + + <key>ru</key> + <value>Комментарий</value> + + 8 + + String + + + + true + + + true + + + + + ПредыдущаяДата + + <key>ru</key> + <value>Предыдущая дата</value> + + 3 + + Date + + Date + + + + true + + + true + + + + ВидКонтактнойИнформации + + <key>ru</key> + <value>Вид контактной информации</value> + + 4 + + CatalogRef.ВидыКонтактнойИнформации + + + true + + + true + + + + ИмяФормыРедактирования + + <key>ru</key> + <value>Имя формы редактирования</value> + + 5 + + String + + + + true + + + true + + + + ПроверятьКорректность + + <key>ru</key> + <value>Проверять корректность</value> + + 6 + + Boolean + + + true + + + true + + + + ЗакрытиеФормыБезСохранения + + <key>ru</key> + <value>Закрытие формы без сохранения</value> + + 7 + + Boolean + + + true + + + true + + + + ТипКонтактнойИнформации + + <key>ru</key> + <value>Тип контактной информации</value> + + 8 + + EnumRef.ТипыКонтактнойИнформации + + + true + + + true + + + + ПредставлениеКонтактнойИнформации + + <key>ru</key> + <value>Представление контактной информации</value> + + 9 + + String + + + + true + + + true + + + + ОК + + <key>ru</key> + <value>ОК</value> + + 1 + + ru + ОК + + + true + + + + ОК + + + DontUse + Auto + + + Отмена + + <key>ru</key> + <value>Отмена</value> + + 2 + + ru + Отмена + + + true + + + + Отмена + + + DontUse + Auto + + + СписокКонтактнойИнформации + + + + ВидКонтактнойИнформации + + 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..bd0ae488c --- /dev/null +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Help/ru.html @@ -0,0 +1,9 @@ + +

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

              +

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

              +

              Изменение адреса

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

              См. также

              + \ 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..4aaa4ecfe --- /dev/null +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/ИсторияКонтактнойИнформации/Module.bsl @@ -0,0 +1,312 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Если Параметры.Свойство("ТолькоПросмотр") Тогда + Элементы.История.ТолькоПросмотр = Параметры.ТолькоПросмотр; + КонецЕсли; + + УстановитьУсловноеОформление(); + + ВидКонтактнойИнформации = Параметры.ВидКонтактнойИнформации; + ТипКонтактнойИнформации = Параметры.ВидКонтактнойИнформации.Тип; + ПроверятьКорректность = ВидКонтактнойИнформации.ПроверятьКорректность; + ПредставлениеКонтактнойИнформации = Параметры.ВидКонтактнойИнформации.Наименование; + + Если ТипЗнч(Параметры.СписокКонтактнойИнформации) = Тип("Массив") Тогда + Для каждого СтрокаКонтактнойИнформации Из Параметры.СписокКонтактнойИнформации Цикл + СтрокаТаблицы = История.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаТаблицы, СтрокаКонтактнойИнформации); + СтрокаТаблицы.Тип = ТипКонтактнойИнформации; + СтрокаТаблицы.Вид = ВидКонтактнойИнформации; + КонецЦикла; + ЭтотОбъект.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'История изменений (%1)'"), ПредставлениеКонтактнойИнформации); + Элементы.ИсторияПредставление.Заголовок = ПредставлениеКонтактнойИнформации; + Иначе + Отказ = Истина; + КонецЕсли; + + Если ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда + ИмяФормыРедактирования = "ВводаАдреса"; + ИначеЕсли ВидКонтактнойИнформации.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда + ИмяФормыРедактирования = "ВводаТелефона"; + Иначе + ИмяФормыРедактирования = ""; + Элементы.ИсторияПредставление.КнопкаВыбора = Ложь; + КонецЕсли; + + История.Сортировать("ДействуетС Убыв"); + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + Если Не ЗакрытиеФормыБезСохранения Тогда + СтандартнаяОбработка = Ложь; + Если КонтактнаяИнформациюПодготовлена() Тогда + Закрыть(История); + Иначе + Отказ = Истина; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ИсторияПредставлениеПриИзменении(Элемент) + ЭтотОбъект.ТекущийЭлемент.ТекущиеДанные.ЗначенияПолей = КонтактнаяИнформацияXMLПоПредставлению(Элемент.ТекстРедактирования, ВидКонтактнойИнформации); +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФормуРедактированияАдреса(Знач ВыбраннаяСтрока) + + ДанныеСтроки = История.НайтиПоИдентификатору(ВыбраннаяСтрока); + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("ВидКонтактнойИнформации", ВидКонтактнойИнформации); + ПараметрыОткрытия.Вставить("ЗначенияПолей", ДанныеСтроки.ЗначенияПолей); + ПараметрыОткрытия.Вставить("Представление", ДанныеСтроки.Представление); + ПараметрыОткрытия.Вставить("ДействуетС", ДанныеСтроки.ДействуетС); + ПараметрыОткрытия.Вставить("ДействуетДо", ОпределитьДатуДействия(ДанныеСтроки.ДействуетС)); + + ДополнительныеПараметры = Новый Структура("ДействуетС, Новый", ДанныеСтроки.ДействуетС, НЕ ЗначениеЗаполнено(ДанныеСтроки.ЗначенияПолей)); + Оповещение = Новый ОписаниеОповещения("ПослеРедактированияАдреса", ЭтотОбъект, ДополнительныеПараметры); + + УправлениеКонтактнойИнформациейКлиент.ОткрытьФормуКонтактнойИнформации(ПараметрыОткрытия,, Оповещение); + +КонецПроцедуры + +&НаКлиенте +Функция ОпределитьДатуДействия(ДействуетС) + + ДействуетДо = Неопределено; + Минимум = -1; + Для каждого СтрокаИстория Из История Цикл + Дельта = СтрокаИстория.ДействуетС - ДействуетС; + Если Минимум = -1 Тогда + Минимум = Дельта + 1; + КонецЕсли; + Если Дельта > 0 И Дельта < Минимум Тогда + ДействуетДо = СтрокаИстория.ДействуетС; + Минимум = Дельта; + КонецЕсли; + КонецЦикла; + + Возврат ДействуетДо; +КонецФункции + +&НаКлиенте +Процедура ИсторияПередУдалением(Элемент, Отказ) + // Если есть хотя бы одна запись старше удаляемой, то удалять можно + ДействуетС = Элемент.ТекущиеДанные.ДействуетС; + Если ЭтоПерваяДата(ДействуетС) Тогда + Отказ = Истина; + КонецЕсли; + Если НЕ Отказ Тогда + ДополнительныеПараметры = Новый Структура("ИдентификаторСтроки", Элемент.ТекущаяСтрока); + Оповещение = Новый ОписаниеОповещения("ПослеОтветаНаВопросПроУдаление", ЭтотОбъект, ДополнительныеПараметры); + ПоказатьВопрос(Оповещение, НСтр("ru = 'Вы хотите удалить адрес действующий с'") + " " + Формат(ДействуетС, "ДЛФ=DD")+ "?", РежимДиалогаВопрос.ДаНет); + КонецЕсли; + Отказ = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура ПослеОтветаНаВопросПроУдаление(Результат, ДополнительныеПараметры) Экспорт + Если Результат = КодВозвратаДиалога.Да Тогда + История.Удалить(История.НайтиПоИдентификатору(ДополнительныеПараметры.ИдентификаторСтроки)); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ИсторияПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + + Отказ = Истина; + Строка = История.Вставить(0); + Строка.ДействуетС = ОбщегоНазначенияКлиент.ДатаСеанса(); + Строка.ЗначенияПолей = ""; + Строка.Вид = ВидКонтактнойИнформации; + Строка.Тип = ТипКонтактнойИнформации; + Элементы.История.ТекущаяСтрока = 0; + Элементы.История.ТекущийЭлемент = Элементы.История.ПодчиненныеЭлементы.ИсторияПредставление; + +КонецПроцедуры + +&НаКлиенте +Процедура ИсторияПередНачаломИзменения(Элемент, Отказ) + Если Элемент.ТекущийЭлемент.Имя = "ИсторияДействуетС" Тогда + Если ЭтоПерваяДата(Элемент.ТекущиеДанные.ДействуетС) Тогда + Отказ = Истина; + КонецЕсли; + ПредыдущаяДата = Элемент.ТекущиеДанные.ДействуетС; + + ИначеЕсли Элемент.ТекущийЭлемент.Имя = "ИсторияПредставление" Тогда + Если ИмяФормыРедактирования = "ВводАдреса" Тогда + ОткрытьФормуРедактированияАдреса(Элементы.История.ТекущаяСтрока); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ИсторияПриИзменении(Элемент) + + Если Элемент.ТекущийЭлемент.Имя = "ИсторияДействуетС" Тогда + ЭтотОбъект.ТекущийЭлемент.ТекущиеДанные.ДействуетС = ДопустимаяДатаИстории(ПредыдущаяДата, ЭтотОбъект.ТекущийЭлемент.ТекущиеДанные.ДействуетС); + История.Сортировать("ДействуетС Убыв"); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ИсторияПриАктивизацииСтроки(Элемент) + + Элементы.ИсторияИзменить.Доступность = НЕ ЭтоПерваяДата(Элемент.ТекущиеДанные.ДействуетС) И НЕ ЭтотОбъект.ТолькоПросмотр; + Элементы.ИсторияУдалить.Доступность = НЕ ЭтоПерваяДата(Элемент.ТекущиеДанные.ДействуетС) И НЕ ЭтотОбъект.ТолькоПросмотр; + Элементы.ИсторияКонтекстноеМенюИзменить.Доступность = НЕ ЭтоПерваяДата(Элемент.ТекущиеДанные.ДействуетС) И НЕ ЭтотОбъект.ТолькоПросмотр;; + Элементы.ИсторияКонтекстноеМенюУдалить.Доступность = НЕ ЭтоПерваяДата(Элемент.ТекущиеДанные.ДействуетС) И НЕ ЭтотОбъект.ТолькоПросмотр;; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ОК(Команда) + ЗакрытиеФормыБезСохранения = Ложь; + Закрыть(История); +КонецПроцедуры + +&НаКлиенте +Процедура Отмена(Команда) + ЗакрытиеФормыБезСохранения = Истина; + Закрыть(); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ИсторияДействуетС.Имя); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("История.ДействуетС"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); + Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Первоначальное значение'")); + +КонецПроцедуры + +&НаКлиенте +Функция ДопустимаяДатаИстории(СтараяДата, НоваяДата) + + Отбор = Новый Структура("ДействуетС", НоваяДата); + НайденныеСтроки = История.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() > 1 Тогда + Возврат СтараяДата; + КонецЕсли; + + Возврат НоваяДата; +КонецФункции + +&НаКлиенте +Функция КонтактнаяИнформациюПодготовлена() + + История.Сортировать("ДействуетС Убыв"); + ЭтоИсторическаяКонтактнаяИнформация = Ложь; + + Если ПроверятьКорректность Тогда + Если КонтактнаяИнформацияНеКорректная() Тогда + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + Для каждого СтрокаКонтактнойИнформации Из История Цикл + СтрокаКонтактнойИнформации.ХранитьИсториюИзменений = Истина; + СтрокаКонтактнойИнформации.ЭтоИсторическаяКонтактнаяИнформация = ЭтоИсторическаяКонтактнаяИнформация; + ЭтоИсторическаяКонтактнаяИнформация = Истина; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +&НаСервере +Функция КонтактнаяИнформацияНеКорректная() + + ТекущийУровеньОшибок = 0; + Для Индекс = 0 По История.Количество() - 1 Цикл + СтрокаИстории = История.Получить(Индекс); + Если ПустаяСтрока(СтрокаИстории.ЗначенияПолей) ИЛИ ПустаяСтрока(СтрокаИстории.Представление)Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не может быть пустым.'"), ПредставлениеКонтактнойИнформации),, "История[" + Строка(Индекс) + "].Представление"); + ТекущийУровеньОшибок = ТекущийУровеньОшибок + 1; + Иначе + ТекущийУровеньОшибок = ТекущийУровеньОшибок + УправлениеКонтактнойИнформацией.ПроверитьЗаполнениеКонтактнойИнформации( + СтрокаИстории.Представление, СтрокаИстории.ЗначенияПолей, ВидКонтактнойИнформации, + ВидКонтактнойИнформации.Тип, "История[" + Строка(Индекс) + "].Представление"); + КонецЕсли; + КонецЦикла; + + Возврат ?(ТекущийУровеньОшибок > 0, Истина, Ложь); + +КонецФункции + +&НаКлиенте +Процедура ПослеРедактированияАдреса(РезультатЗакрытия, ДополнительныеПараметры) Экспорт + Если ТипЗнч(РезультатЗакрытия) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + + ДействуетС = ДополнительныеПараметры.ДействуетС; + + Отбор = Новый Структура("ДействуетС", ДействуетС); + НайденныеСтроки = История.НайтиСтроки(Отбор); + Если НайденныеСтроки.Количество() > 0 Тогда + НайденныеСтроки[0].Представление = РезультатЗакрытия.Представление; + НайденныеСтроки[0].ЗначенияПолей = РезультатЗакрытия.КонтактнаяИнформация; + НайденныеСтроки[0].Комментарий = РезультатЗакрытия.Комментарий; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Функция ЭтоПерваяДата(ДействуетС) + + Для каждого СтрокаИстории Из История Цикл + Если СтрокаИстории.ДействуетС < ДействуетС Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; +КонецФункции + +&НаКлиенте +Процедура ИсторияАдресНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + Если ИмяФормыРедактирования = "ВводаАдреса" Тогда + ОткрытьФормуРедактированияАдреса(Элементы.История.ТекущаяСтрока); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Функция КонтактнаяИнформацияXMLПоПредставлению(Текст, ВидКонтактнойИнформации) + Возврат УправлениеКонтактнойИнформацией.КонтактнаяИнформацияXMLПоПредставлению(Текст, ВидКонтактнойИнформации); +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Form.form b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Form.form index c4262ff66..4f1362d9a 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Form.form +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Form.form @@ -16,11 +16,6 @@ ru Группа частей адреса - - ru - Группа частей адреса - - true ГруппаЧастейАдресаРасширеннаяПодсказка 8 @@ -301,7 +296,7 @@ 1 ru - Выбрать введеный адрес + Выбрать введенный адрес true diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Help/ru.html b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Help/ru.html index 3bdf9730e..2a1e984f3 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 35022c49e..044d06706 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Forms/НаселенныйПунктАдреса/Module.bsl @@ -166,8 +166,8 @@ АдресИзменен = Истина; ДоступностьКнопкиОК = Ложь; - Для каждого Элемент Из ЭлементыФормыПоУровням Цикл - Если НЕ ПустаяСтрока(ЭтотОбъект[Элемент.Представление]) Тогда + Для каждого Элемент Из ЭлементыФормыПоУровням Цикл + Если НЕ ПустаяСтрока(ЭтотОбъект[Элемент.Представление]) Тогда ДоступностьКнопкиОК = Истина; КонецЕсли; КонецЦикла; @@ -317,7 +317,7 @@ КонецПроцедуры &НаКлиенте -Процедура Подключаемый_ПолеАвтоПодбор(Элемент, Текст, ДанныеВыбора, Параметры, Ожидание, СтандартнаяОбработка) +Процедура Подключаемый_ПолеАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) ДанныеВыбора = Новый СписокЗначений; Если Ожидание = 0 Тогда @@ -363,19 +363,12 @@ Результат = Новый Структура; Идентификатор = Неопределено; - УровеньИдентификатора = 0; - Для каждого ЧастьАдреса Из ЧастиАдреса Цикл - Если ЧастьАдреса.Значение.Уровень > УровеньИдентификатора И ЗначениеЗаполнено(ЧастьАдреса.Значение.Идентификатор) Тогда - УровеньИдентификатора = ЧастьАдреса.Значение.Уровень; - Идентификатор = ЧастьАдреса.Значение.Идентификатор; - КонецЕсли; - КонецЦикла; - Если ЗначениеЗаполнено(Идентификатор) Тогда - Результат.Вставить("Идентификатор", Идентификатор); - Иначе - Результат.Вставить("Идентификатор", УправлениеКонтактнойИнформациейСлужебный.ИдентификаторНаселенногоПунктаПоЧастямАдреса(ЧастиАдреса)); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.АдресныйКлассификатор") Тогда + МодульАдресныйКлассификаторСлужебный = ОбщегоНазначения.ОбщийМодуль("АдресныйКлассификаторСлужебный"); + Идентификатор = УправлениеКонтактнойИнформациейКлиентСервер.ИдентификаторЭлементаПоЧастямАдреса(ЧастиАдреса, Ложь); КонецЕсли; + Результат.Вставить("Идентификатор", Идентификатор); Результат.Вставить("Представление", УправлениеКонтактнойИнформациейКлиентСервер.ПредставлениеНаселенногоПунктаПоЧастямАдреса(ЧастиАдреса)); Результат.Вставить("НаселенныйПунктДетально", ЧастиАдреса); diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Help/ru.html b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Help/ru.html index 51da85b49..e6d9c6445 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/Help/ru.html +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/Help/ru.html @@ -1,4 +1,4 @@ - +

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

              Контактную информацию можно вводить:

              • в виде произвольной строки, @@ -15,4 +15,6 @@
              • Вставить (сочетание клавиш Ctrl+V);
              • Очистить (сочетание клавиш Shift+F4) - также очищаются поля для ввода по шаблону адреса и телефона. В поле Страна адреса автоматически вводится значение Россия.
              • Выделить все (сочетание клавиш Ctrl+A). -
              • Ввести комментарий - с помощью этой команды можно ввести или изменить комментарий, не открывая окно редактирования поля. Комментарии предусмотрены для всех видов контактной информации, кроме текстового поля Другое, т.к. в это поле можно ввести всю нужную информацию. Воспользуйтесь командой, затем введите текст комментария, нажмите кнопку ОК для продолжения работы в программе. Если комментарий не пуст, то он выводится под полем контактной информации.
              \ No newline at end of file +
            • Ввести комментарий - с помощью этой команды можно ввести или изменить комментарий, не открывая окно редактирования поля. Комментарии предусмотрены для всех видов контактной информации, кроме текстового поля Другое, т.к. в это поле можно ввести всю нужную информацию. Воспользуйтесь командой, затем введите текст комментария, нажмите кнопку ОК для продолжения работы в программе. Если комментарий не пуст, то он выводится под полем контактной информации. +
            • Адрес на Яндекс.Картах; Адрес на Google Maps - команды, которые позволяют увидеть адрес объекта на картах соответственно Яндекс или Google. Также можно эти команды найти в меню Еще в карточке ввода адреса. +
            • История изменений - с помощью этой команды можно просмотреть изменения контактной информации.
            \ No newline at end of file diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/ManagerModule.bsl b/SSL/src/DataProcessors/ВводКонтактнойИнформации/ManagerModule.bsl index e78edc609..c30244d5e 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/ManagerModule.bsl @@ -1,11 +1,10 @@ -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -#КонецЕсли #Область ОбработчикиПодписокНаСобытия Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Если Параметры <> Неопределено И Параметры.Свойство("ОткрытаПоСценарию") Тогда СтандартнаяОбработка = Ложь; ВидИнформации = Параметры.ВидКонтактнойИнформации; @@ -17,10 +16,14 @@ КонецЕсли; +#КонецЕсли + КонецПроцедуры #КонецОбласти +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + #Область СлужебныеПроцедурыИФункции // Возвращает имя формы для редактирования типа контактной информации. @@ -32,7 +35,7 @@ // Возвращаемое значение: // Строка - полное имя формы. // -Функция ИмяФормыВводаКонтактнойИнформации(Знач ВидИнформации) Экспорт +Функция ИмяФормыВводаКонтактнойИнформации(Знач ВидИнформации) ТипИнформации = ТипВидаКонтактнойИнформации(ВидИнформации); @@ -51,8 +54,7 @@ Возврат Неопределено; КонецФункции - -Функция ТипВидаКонтактнойИнформации(Знач ВидИнформации) Экспорт +Функция ТипВидаКонтактнойИнформации(Знач ВидИнформации) Результат = Неопределено; Тип = ТипЗнч(ВидИнформации); @@ -71,5 +73,6 @@ #КонецОбласти +#КонецЕсли diff --git a/SSL/src/DataProcessors/ВводКонтактнойИнформации/ВводКонтактнойИнформации.mdo b/SSL/src/DataProcessors/ВводКонтактнойИнформации/ВводКонтактнойИнформации.mdo index b93cbc043..a26614cae 100644 --- a/SSL/src/DataProcessors/ВводКонтактнойИнформации/ВводКонтактнойИнформации.mdo +++ b/SSL/src/DataProcessors/ВводКонтактнойИнформации/ВводКонтактнойИнформации.mdo @@ -43,20 +43,6 @@ PersonalComputer MobileDevice - - НаселенныйПунктАдреса - - ru - Населенный пункт адреса - - - - ru - - - PersonalComputer - MobileDevice - ВыборАдресаПоПочтовомуИндексу @@ -85,6 +71,15 @@ PersonalComputer MobileDevice + + ВыборДома + + ru + Выбор дома + + PersonalComputer + MobileDevice + ВыборУлицы @@ -108,4 +103,32 @@ PersonalComputer MobileDevice + + ИсторияКонтактнойИнформации + + ru + История контактной информации + + + + ru + + + PersonalComputer + MobileDevice + + + НаселенныйПунктАдреса + + ru + Населенный пункт адреса + + + + ru + + + PersonalComputer + MobileDevice + diff --git a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form index 4e9c29f2f..6b319087b 100644 --- a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form @@ -522,6 +522,7 @@ Vertical auto + false
            @@ -627,6 +628,7 @@ Page auto + false @@ -773,6 +775,7 @@ Vertical auto + false @@ -919,6 +922,7 @@ Vertical auto + false @@ -1029,6 +1033,7 @@ Page auto + false @@ -1133,6 +1138,7 @@ Page auto + false @@ -1300,6 +1306,7 @@ Page auto + false @@ -1412,6 +1419,7 @@ Page auto + false @@ -1525,6 +1533,7 @@ Vertical auto + false @@ -1594,6 +1603,7 @@ Vertical auto + false true @@ -1650,6 +1660,7 @@ Page auto + false
            @@ -1737,6 +1748,7 @@ Page auto + false true @@ -1856,6 +1868,7 @@ Vertical auto + false @@ -1970,6 +1983,7 @@ Vertical auto + false @@ -2072,6 +2086,7 @@ Vertical auto + false true @@ -2129,6 +2144,7 @@ Vertical auto + false true @@ -2362,6 +2378,24 @@ true + + ИмяОбработчикаПриПереходеНазад + + <key>ru</key> + <value>Имя обработчика при переходе назад</value> + + 3 + + String + + + + true + + + true + + ДлительнаяОперация diff --git a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl index 2ea1e0fc6..0efc8fe27 100644 --- a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl @@ -30,7 +30,7 @@ Заголовок = НСтр("ru = 'Синхронизация данных с ""%1""'"); Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Заголовок, Строка(УзелИнформационнойБазы)); - РольДоступнаДобавлениеИзменениеОбменовДанными = Пользователи.РолиДоступны("НастройкаСинхронизацииДанных"); + РольДоступнаДобавлениеИзменениеОбменовДанными = ОбменДаннымиСервер.ЕстьПраваНаАдминистрированиеОбменов(); РольДоступнаПолныеПрава = Пользователи.ЭтоПолноправныйПользователь(); Элементы.ПанельТребуетсяОбновление.ТекущаяСтраница = ?(РольДоступнаПолныеПрава, Элементы.ТребуетсяОбновлениеПолныеПрава, Элементы.ТребуетсяОбновлениеОграниченныеПрава); @@ -291,7 +291,7 @@ Отказ = Ложь; - А = Вычислить(ИмяПроцедуры); + РезультатВычисления = Вычислить(ИмяПроцедуры); Если Отказ Тогда @@ -322,7 +322,7 @@ Отказ = Ложь; - А = Вычислить(ИмяПроцедуры); + РезультатВычисления = Вычислить(ИмяПроцедуры); Если Отказ Тогда @@ -361,7 +361,7 @@ Отказ = Ложь; ПропуститьСтраницу = Ложь; - А = Вычислить(ИмяПроцедуры); + РезультатВычисления = Вычислить(ИмяПроцедуры); Если Отказ Тогда @@ -411,7 +411,7 @@ Отказ = Ложь; ПерейтиДалее = Истина; - А = Вычислить(ИмяПроцедуры); + РезультатВычисления = Вычислить(ИмяПроцедуры); Если Отказ Тогда @@ -472,6 +472,7 @@ НоваяСтрока.ИмяОсновнойСтраницы = ИмяОсновнойСтраницы; НоваяСтрока.ИмяОбработчикаПриПереходеДалее = ""; + НоваяСтрока.ИмяОбработчикаПриПереходеНазад = ""; НоваяСтрока.ИмяОбработчикаПриОткрытии = ИмяОбработчикаПриОткрытии; НоваяСтрока.ДлительнаяОперация = ДлительнаяОперация; @@ -688,7 +689,7 @@ // Выполнен переход на новый обмен. Необходимо закрыть форму и открыть ее заново с другими параметрами. Если Результат.Свойство("ЗакрытьФормуБезусловно") И Результат.ЗакрытьФормуБезусловно Тогда ПараметрыПовторногоОткрытияФормы = Результат.ПараметрыПовторногоОткрытияФормы; - ЭтаФорма.Закрыть(); + ЭтотОбъект.Закрыть(); КонецЕсли; ПроцентВыполнения = 100; ДопИнформацияВыполнение = ""; @@ -756,30 +757,40 @@ Результат.Вставить("ФоновоеЗаданиеЗапущено", Ложь); Результат.Вставить("Отказ", Ложь); // Запуск фонового задания - - РезультатФоновогоЗадания = ДлительныеОперации.ЗапуститьВыполнениеВФоне( - УникальныйИдентификатор, - "Обработки.ВыполнениеОбменаДанными.ВыполнитьЗапускОбменаДанными", - ПараметрыЗадания, - НаименованиеЗадания); - - ФоновоеЗаданиеИдентификатор = РезультатФоновогоЗадания.ИдентификаторЗадания; - ФоновоеЗаданиеАдресХранилища = РезультатФоновогоЗадания.АдресХранилища; - - Если РезультатФоновогоЗадания.ЗаданиеВыполнено Тогда - ФоновоеЗаданиеЗагрузитьРезультат(Результат); - Результат.ФоновоеЗаданиеЗапущено = Ложь; - // Выполнен переход на новый обмен. Необходимо закрыть форму и открыть ее заново с другими параметрами. - Если Результат.Свойство("ЗакрытьФормуБезусловно") И Результат.ЗакрытьФормуБезусловно Тогда - ПараметрыПовторногоОткрытияФормы = Результат.ПараметрыПовторногоОткрытияФормы; + Попытка + РезультатФоновогоЗадания = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификатор, + "Обработки.ВыполнениеОбменаДанными.ВыполнитьЗапускОбменаДанными", + ПараметрыЗадания, + НаименованиеЗадания); + ФоновоеЗаданиеИдентификатор = РезультатФоновогоЗадания.ИдентификаторЗадания; + ФоновоеЗаданиеАдресХранилища = РезультатФоновогоЗадания.АдресХранилища; + + Если РезультатФоновогоЗадания.ЗаданиеВыполнено Тогда + ФоновоеЗаданиеЗагрузитьРезультат(Результат); + Результат.ФоновоеЗаданиеЗапущено = Ложь; + // Выполнен переход на новый обмен. Необходимо закрыть форму и открыть ее заново с другими параметрами. + Если Результат.Свойство("ЗакрытьФормуБезусловно") И Результат.ЗакрытьФормуБезусловно Тогда + ПараметрыПовторногоОткрытияФормы = Результат.ПараметрыПовторногоОткрытияФормы; + КонецЕсли; + Если Результат.Отказ Тогда + ЕстьОшибки = Истина; + КонецЕсли; + Иначе + ФоновоеЗаданиеПрочитатьПромежуточныйРезультат(); + Результат.ФоновоеЗаданиеЗапущено = Истина; КонецЕсли; - Если Результат.Отказ Тогда - ЕстьОшибки = Истина; - КонецЕсли; - Иначе - ФоновоеЗаданиеПрочитатьПромежуточныйРезультат(); - Результат.ФоновоеЗаданиеЗапущено = Истина; - КонецЕсли; + + Исключение + ЕстьОшибки = Истина; + Результат.Отказ = Истина; + ОбменДаннымиВызовСервера.ЗафиксироватьЗавершениеОбменаСОшибкой( + ПараметрыЗадания.УзелИнформационнойБазы, + ?(ПараметрыЗадания.ВыполнятьЗагрузку,"ЗагрузкаДанных","ВыгрузкаДанных"), + ТекущаяДатаСеанса(), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + Возврат Результат; КонецФункции diff --git a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/ManagerModule.bsl b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/ManagerModule.bsl index 5fa485bf8..376ea865e 100644 --- a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/ManagerModule.bsl @@ -1,11 +1,13 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область СлужебныеПроцедурыИФункции + // Запускает обмен данными, используется в фоновом задании. // // Параметры: // ПараметрыВыполнения - Структура - Параметры, необходимые для удаления. // АдресХранилища - Строка - Адрес временного хранилища. - +// Процедура ВыполнитьЗапускОбменаДанными(ПараметрыВыполнения, АдресХранилища) Экспорт ПараметрыОбмена = ОбменДаннымиСервер.ПараметрыОбмена(); ЗаполнитьЗначенияСвойств(ПараметрыОбмена, ПараметрыВыполнения, @@ -19,4 +21,6 @@ ПоместитьВоВременноеХранилище(ПараметрыВыполнения, АдресХранилища); КонецПроцедуры +#КонецОбласти + #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Module.bsl index 80b1a2a0a..29a195a73 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ВыборВидаОбъектов/Module.bsl @@ -36,53 +36,10 @@ #Область СлужебныеПроцедурыИФункции -&НаСервере -Функция ЭтоСлужебныйОбъект(ОбъектМетаданных) - ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); - Возврат ОбработкаОбъект.ЭтоСлужебныйОбъект(ОбъектМетаданных); -КонецФункции - &НаСервере Процедура ЗаполнитьСписокТиповОбъектов() - - КоллекцииОбъектовМетаданных = Новый Массив; - КоллекцииОбъектовМетаданных.Добавить(Метаданные.Справочники); - КоллекцииОбъектовМетаданных.Добавить(Метаданные.Документы); - КоллекцииОбъектовМетаданных.Добавить(Метаданные.БизнесПроцессы); - КоллекцииОбъектовМетаданных.Добавить(Метаданные.Задачи); - КоллекцииОбъектовМетаданных.Добавить(Метаданные.ПланыВидовРасчета); - КоллекцииОбъектовМетаданных.Добавить(Метаданные.ПланыВидовХарактеристик); - КоллекцииОбъектовМетаданных.Добавить(Метаданные.ПланыСчетов); - КоллекцииОбъектовМетаданных.Добавить(Метаданные.ПланыОбмена); - - ПрефиксУдаляемыхОбъектов = "удалить"; - УдаляемыеОбъекты = Новый СписокЗначений; - Для Каждого КоллекцияОбъектовМетаданных Из КоллекцииОбъектовМетаданных Цикл - Для Каждого ОбъектМетаданных Из КоллекцияОбъектовМетаданных Цикл - Если Не Параметры.ПоказыватьСкрытые Тогда - Если СтрНачинаетсяС(НРег(ОбъектМетаданных.Имя),ПрефиксУдаляемыхОбъектов) - Или ЭтоСлужебныйОбъект(ОбъектМетаданных) Тогда - Продолжить; - КонецЕсли; - КонецЕсли; - - Если ПравоДоступа("Изменение", ОбъектМетаданных) Тогда - Если СтрНачинаетсяС(НРег(ОбъектМетаданных.Имя),ПрефиксУдаляемыхОбъектов) Тогда - УдаляемыеОбъекты.Добавить(ОбъектМетаданных.ПолноеИмя(), ОбъектМетаданных.Синоним); - Иначе - ДоступныеОбъектыДляИзменения.Добавить(ОбъектМетаданных.ПолноеИмя(), ОбъектМетаданных.Синоним); - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЦикла; - - ДоступныеОбъектыДляИзменения.СортироватьПоПредставлению(); - УдаляемыеОбъекты.СортироватьПоПредставлению(); - - Для Каждого Элемент Из УдаляемыеОбъекты Цикл - ДоступныеОбъектыДляИзменения.Добавить(Элемент.Значение, Элемент.Представление); - КонецЦикла; - + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + ОбработкаОбъект.ЗаполнитьКоллекциюДоступныхДляИзмененияОбъектов(ДоступныеОбъектыДляИзменения, Параметры.ПоказыватьСкрытые); КонецПроцедуры // Возвращает ссылку на общий модуль по имени. diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ДополнительныеПараметры/Help/ru.html b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ДополнительныеПараметры/Help/ru.html index c34cd522a..875d49627 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ДополнительныеПараметры/Help/ru.html +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/ДополнительныеПараметры/Help/ru.html @@ -1,4 +1,4 @@ - +

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

            • Изменять в транзакции (по умолчанию флажок установлен) - программа позволяет обрабатывать выбранные для изменения элементы списка в транзакции. Если в процессе записи при установленном флажке не удается записать один из объектов (например, потому что объект редактируется другим пользователем), то будут отменены изменения во всех объектах.
              @@ -6,13 +6,16 @@
              Прерывать по ошибке - если изменение объектов выполняется не в транзакции, то рекомендуется установить этот флажок (по умолчанию этот флажок установлен). В этом случае, если запись объекта по каким-либо причинам невозможна, программа выдаст предупреждение и предложит либо продолжить изменение оставшихся объектов, либо прервать обработку для выяснения причин проблемы. Если флажок не установлен, а объект записать нельзя, то программа пропустит такой объект и продолжит изменение оставшихся объектов.
            • -

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

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

            +

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

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

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

          • -
            -

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

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

              Параметр Обрабатывать дочерние элементы недоступен в данном режиме.

            См. также:

            +
            Режим разработчика - Выполнять запись объектов в режиме ОбменДанными.Загрузка = Истина;
            +
          • +

            Отключить отборы при выборе значений - при выборе значений не использовать отборы, прописанные в свойствах реквизитов СвязиПараметровВыбора и ПараметрыВыбора.

        • +
          Параметр Обрабатывать дочерние элементы недоступен в данном режиме.

        См. также:

        \ No newline at end of file diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Form.form b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Form.form index 112ce2b83..a1e39fcd5 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Form.form +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Form.form @@ -345,6 +345,7 @@ Vertical auto + false @@ -660,6 +661,7 @@ Page Vertical + false @@ -836,6 +838,7 @@ Page Vertical + false true diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Help/ru.html b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Help/ru.html index 2a99d7e8f..d691f0f39 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Help/ru.html +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/РедактированиеФормулы/Help/ru.html @@ -1,8 +1,19 @@ - +

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

        -

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

        +

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

        +

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

        +

        Состоит из трех частей:

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

        Проверка формулы

        +
        • +
          После составления формулы нажмите кнопку Проверить формулу.

        См. также:

        +

        +
        Совет. Для проверки правильности составления формулы можно воспользоваться кнопкой Проверить формулу.

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

        -
        Совет. Все разрешенные элементы расположены в списке "Операторы и функции"
        +
        Совет. Все разрешенные элементы расположены в списке Операторы и функции.

         

        \ No newline at end of file diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Form.form b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Form.form index c07fe9e15..279853544 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Form.form @@ -684,6 +684,7 @@ Vertical auto + false true @@ -817,6 +818,7 @@ Vertical auto + false @@ -1233,6 +1235,7 @@ Vertical auto + false @@ -1341,6 +1344,7 @@ Page auto + false @@ -1352,10 +1356,6 @@ КартинкаУспешноЗавершено 219 - - <key>ru</key> - <value> </value> - true true @@ -1428,14 +1428,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - ГруппаУспешноЗавершеноРасширеннаяПодсказка 218 @@ -1478,6 +1470,7 @@ Vertical auto + false true diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl index da2cb7474..ad8f02a0a 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Forms/Форма/Module.bsl @@ -35,7 +35,7 @@ &НаКлиенте Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) - Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Обработка.ГрупповоеИзменениеРеквизитов.Форма.ДополнительныеПараметры") Тогда + Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег(ПолноеИмяФормы("ДополнительныеПараметры")) Тогда ПерезаполнитьСтруктуруРеквизитовОбъекта = Ложь; Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда @@ -69,20 +69,6 @@ ОбновитьВидимостьЭлементов(); КонецЕсли; - ИначеЕсли ВРег(ИсточникВыбора.ИмяФормы) = ВРег(ПолноеИмяФормыРаботыСБлокируемымиРеквизитами) Тогда - - Если ТипЗнч(ВыбранноеЗначение) = Тип("Массив") И ВыбранноеЗначение.Количество() > 0 Тогда - - ЗаблокированныеРеквизитыСтроки = РеквизитыОбъекта.НайтиСтроки(Новый Структура("ЗаблокированныйРеквизит", Истина)); - - Для Каждого ОписаниеОперацииСтрока Из ЗаблокированныеРеквизитыСтроки Цикл - Если ОписаниеОперацииСтрока.ЗаблокированныйРеквизит И ВыбранноеЗначение.Найти(ОписаниеОперацииСтрока.ИмяРеквизита) <> Неопределено Тогда - ОписаниеОперацииСтрока.ЗаблокированныйРеквизит = Ложь; - КонецЕсли; - КонецЦикла; - - КонецЕсли; - КонецЕсли; КонецПроцедуры @@ -378,7 +364,7 @@ Или Элемент.ТекущийЭлемент = Элементы.РеквизитыОбъектаИзменять) И Элемент.ТекущиеДанные.ЗаблокированныйРеквизит Тогда Отказ = Истина; - ВопросПерейтиКРазблокированиюРеквизитов(); + ВопросПерейтиКРазблокированиюРеквизитов(Элемент.ТекущиеДанные); КонецЕсли; КонецПроцедуры @@ -396,6 +382,7 @@ Формула = "=" + Формула; КонецЕсли; ТекущиеДанные.Значение = Формула; + ТекущиеДанные.Изменять = Истина; КонецПроцедуры &НаСервере @@ -535,6 +522,8 @@ ВыбранныеОбъектыВКонтексте.ЗагрузитьЗначения(Параметры.МассивОбъектов); ИнициализироватьКомпоновщикНастроек(); + ЗагрузитьМетаданныеОбъекта(); + Если ТипыОбъектов.Количество() > 0 Тогда МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ТипыОбъектов[0].Значение); @@ -548,8 +537,6 @@ КонецЕсли; КонецЕсли; - ЗагрузитьМетаданныеОбъекта(); - ПредставлениеИзменяемыхОбъектов = ПредставлениеИзменяемыхОбъектов(); ОбновитьНадписьКоличествоВыбранных(); @@ -626,24 +613,38 @@ КонецПроцедуры &НаКлиенте -Процедура ВопросПерейтиКРазблокированиюРеквизитов() - - ТекстВопроса = НСтр("ru = 'Реквизит заблокирован, перейти к разблокированию реквизитов?'"); +Процедура ВопросПерейтиКРазблокированиюРеквизитов(ВыбранныйРеквизит) Кнопки = Новый СписокЗначений; - Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Да'")); + + Если КонтекстныйВызов Тогда + Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Перейти'")); + ТекстВопроса = НСтр("ru = 'Реквизит заблокирован, перейти к разблокированию реквизитов?'"); + Иначе + Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Разблокировать'")); + ТекстВопроса = ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для того чтобы не допустить рассогласования данных в программе, + |реквизит ""%1"" не доступен для редактирования. + | + |Перед тем, как разрешить его редактирование, рекомендуется оценить последствия, + |проверив все места использования выбранных элементов в программе. + | + |Разблокировать реквизит ""%1"" для изменения?'"), + ВыбранныйРеквизит.Представление); + КонецЕсли; + Кнопки.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Отмена'")); - ОписаниеОповещения = Новый ОписаниеОповещения("ВопросПерейтиКРазблокированиюРеквизитовЗавершение", ЭтотОбъект); + ОписаниеОповещения = Новый ОписаниеОповещения("ВопросПерейтиКРазблокированиюРеквизитовЗавершение", ЭтотОбъект, ВыбранныйРеквизит); ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, Кнопки, , КодВозвратаДиалога.Да, НСтр("ru = 'Реквизит заблокирован'")); КонецПроцедуры &НаКлиенте -Процедура ВопросПерейтиКРазблокированиюРеквизитовЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт +Процедура ВопросПерейтиКРазблокированиюРеквизитовЗавершение(РезультатВопроса, ОписаниеРеквизита) Экспорт Если РезультатВопроса = КодВозвратаДиалога.Да Тогда - РазрешитьРедактированиеРеквизитов(); + РазрешитьРедактированиеРеквизитов(ОписаниеРеквизита); КонецЕсли; КонецПроцедуры @@ -738,7 +739,12 @@ КонецПроцедуры &НаКлиенте -Процедура РазрешитьРедактированиеРеквизитов() +Процедура РазрешитьРедактированиеРеквизитов(ВыбранныйРеквизит) + + Если Не КонтекстныйВызов Тогда + ВыбранныйРеквизит.ЗаблокированныйРеквизит = Ложь; + Возврат; + КонецЕсли; ЗаблокированныеРеквизитыСтроки = РеквизитыОбъекта.НайтиСтроки( Новый Структура("ЗаблокированныйРеквизит", Истина)); @@ -748,13 +754,15 @@ ЗаблокированныеРеквизиты = Новый Массив; Для Каждого ОписаниеОперацииСтрока Из ЗаблокированныеРеквизитыСтроки Цикл - ЗаблокированныеРеквизиты.Добавить(ОписаниеОперацииСтрока.ИмяРеквизита); + ЗаблокированныеРеквизиты.Добавить(ОписаниеОперацииСтрока.Имя); КонецЦикла; ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("РежимВыбора", Истина); ПараметрыФормы.Вставить("ЗаблокированныеРеквизиты", ЗаблокированныеРеквизиты); - ОткрытьФорму(ПолноеИмяФормыРаботыСБлокируемымиРеквизитами, ПараметрыФормы, ЭтотОбъект); + + ОписаниеОповещения = Новый ОписаниеОповещения("ПриРазблокированииРеквизитов", ЭтотОбъект); + ОткрытьФорму(ПолноеИмяФормыРаботыСБлокируемымиРеквизитами, ПараметрыФормы, ЭтотОбъект, , , , ОписаниеОповещения); Иначе @@ -1886,6 +1894,13 @@ НоваяСтрока.ИмяРеквизита = РеквизитОМ.Имя; КонецЕсли; КонецЦикла; + + Для Каждого ТабличнаяЧасть Из ОбъектМетаданных.ТабличныеЧасти Цикл + Если ОписаниеФО.Состав.Содержит(ТабличнаяЧасть) Тогда + НоваяСтрока = ЗакрытыеФункциональнымиОпциями.Добавить(); + НоваяСтрока.ИмяРеквизита = ТабличнаяЧасть.Имя + ".*"; + КонецЕсли; + КонецЦикла; КонецЦикла; ЗакрытыеФункциональнымиОпциями.Свернуть("ИмяРеквизита"); @@ -2786,32 +2801,9 @@ &НаСервере Процедура ЗаполнитьСписокТиповОбъектов() - КоллекцииОбъектовМетаданных = Новый Массив; - КоллекцииОбъектовМетаданных.Добавить(Метаданные.Справочники); - КоллекцииОбъектовМетаданных.Добавить(Метаданные.Документы); - КоллекцииОбъектовМетаданных.Добавить(Метаданные.БизнесПроцессы); - КоллекцииОбъектовМетаданных.Добавить(Метаданные.Задачи); - КоллекцииОбъектовМетаданных.Добавить(Метаданные.ПланыВидовРасчета); - КоллекцииОбъектовМетаданных.Добавить(Метаданные.ПланыВидовХарактеристик); - КоллекцииОбъектовМетаданных.Добавить(Метаданные.ПланыСчетов); - КоллекцииОбъектовМетаданных.Добавить(Метаданные.ПланыОбмена); - - ПрефиксУдаляемыхОбъектов = "Удалить"; - Для Каждого КоллекцияОбъектовМетаданных Из КоллекцииОбъектовМетаданных Цикл - Для Каждого ОбъектМетаданных Из КоллекцияОбъектовМетаданных Цикл - Если Не Объект.ПоказыватьСлужебныеРеквизиты Тогда - Если НРег(Лев(ОбъектМетаданных.Имя, СтрДлина(ПрефиксУдаляемыхОбъектов))) = НРег(ПрефиксУдаляемыхОбъектов) - Или ЭтоСлужебныйОбъект(ОбъектМетаданных) Тогда - Продолжить; - КонецЕсли; - КонецЕсли; - Если ПравоДоступа("Изменение", ОбъектМетаданных) Тогда - Элементы.ПредставлениеИзменяемыхОбъектов.СписокВыбора.Добавить(ОбъектМетаданных.ПолноеИмя(), ОбъектМетаданных.Представление()); - КонецЕсли; - КонецЦикла; - КонецЦикла; - - Элементы.ПредставлениеИзменяемыхОбъектов.СписокВыбора.СортироватьПоПредставлению(); + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + ОбработкаОбъект.ЗаполнитьКоллекциюДоступныхДляИзмененияОбъектов( + Элементы.ПредставлениеИзменяемыхОбъектов.СписокВыбора, Объект.ПоказыватьСлужебныеРеквизиты); КонецПроцедуры &НаКлиенте @@ -2831,12 +2823,6 @@ КонецЕсли; КонецПроцедуры -&НаСервере -Функция ЭтоСлужебныйОбъект(ОбъектМетаданных) - ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); - Возврат ОбработкаОбъект.ЭтоСлужебныйОбъект(ОбъектМетаданных); -КонецФункции - &НаКлиенте Функция ПараметрыКонструктора(Формула) Результат = Новый Структура; @@ -2879,6 +2865,22 @@ КонецФункции +&НаКлиенте +Процедура ПриРазблокированииРеквизитов(РазблокированныеРеквизиты, ДополнительныеПараметры) Экспорт + Если РазблокированныеРеквизиты = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ТипЗнч(РазблокированныеРеквизиты) = Тип("Массив") И РазблокированныеРеквизиты.Количество() > 0 Тогда + ЗаблокированныеРеквизитыСтроки = РеквизитыОбъекта.НайтиСтроки(Новый Структура("ЗаблокированныйРеквизит", Истина)); + Для Каждого ОписаниеОперацииСтрока Из ЗаблокированныеРеквизитыСтроки Цикл + Если ОписаниеОперацииСтрока.ЗаблокированныйРеквизит И РазблокированныеРеквизиты.Найти(ОписаниеОперацииСтрока.Имя) <> Неопределено Тогда + ОписаниеОперацииСтрока.ЗаблокированныйРеквизит = Ложь; + КонецЕсли; + КонецЦикла; + КонецЕсли; +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции из базовой функциональности для обеспечения автономности. @@ -4093,7 +4095,7 @@ И Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости["Версия8_3_1"] И Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости["Версия8_3_2"]))) Тогда - ВызватьИсключение Нстр("ru = 'Обработка предназначена для запуска на версии платформы + ВызватьИсключение НСтр("ru = 'Обработка предназначена для запуска на версии платформы |1С:Предприятие 8.3 с отключенным режимом совместимости или выше'"); КонецЕсли; diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Help/ru.html b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Help/ru.html index cd9972d9c..6a10e20df 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Help/ru.html +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/Help/ru.html @@ -1,4 +1,4 @@ - +

        Групповое изменение реквизитов

        Групповое изменение реквизитов предусмотрено в двух вариантах:

        • в большинстве списков программы предусмотрена команда Изменить выделенные. @@ -7,7 +7,7 @@

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

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

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

            Особенности изменения проведенных документов

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

            Настройка параметров изменения реквизитов

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

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

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

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

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

            Выбор элементов для изменения

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

            См. также

            • diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl index 42af1611c..7d94f6896 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеРеквизитов/ObjectModule.bsl @@ -267,7 +267,21 @@ Отказ = Ложь; Для Каждого Операция Из ИзменяемыеРеквизиты Цикл - Значение = ВычислитьВыражение(Операция.Значение, ИзменяемыйОбъект, ДоступныеРеквизиты); + Попытка + Значение = ВычислитьВыражение(Операция.Значение, ИзменяемыйОбъект, ДоступныеРеквизиты); + Исключение + Отказ = Истина; + КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаполнитьРезультатИзменения(РезультатИзменения, Ссылка, "Ошибка_НеКлассифицированная", КраткоеПредставлениеОшибки); + Если ОстанавливатьИзменениеПриОшибке Или ИзменятьВТранзакции Тогда + Если ИзменятьВТранзакции Тогда + ОтменитьТранзакцию(); + КонецЕсли; + ПоместитьВоВременноеХранилище(РезультатИзменения, АдресРезультата); + Возврат; + КонецЕсли; + Прервать; + КонецПопытки; Если Операция.ВидОперации = 1 Тогда // изменение реквизита // Для групп не устанавливаем реквизиты, которых у них нет. @@ -617,12 +631,56 @@ КонецФункции -Функция ЭтоСлужебныйОбъект(ОбъектМетаданных) Экспорт +Процедура ЗаполнитьКоллекциюДоступныхДляИзмененияОбъектов(ДоступныеОбъекты, ПоказыватьСкрытые) Экспорт + + КоллекцииОбъектовМетаданных = Новый Массив; + КоллекцииОбъектовМетаданных.Добавить(Метаданные.Справочники); + КоллекцииОбъектовМетаданных.Добавить(Метаданные.Документы); + КоллекцииОбъектовМетаданных.Добавить(Метаданные.БизнесПроцессы); + КоллекцииОбъектовМетаданных.Добавить(Метаданные.Задачи); + КоллекцииОбъектовМетаданных.Добавить(Метаданные.ПланыВидовРасчета); + КоллекцииОбъектовМетаданных.Добавить(Метаданные.ПланыВидовХарактеристик); + КоллекцииОбъектовМетаданных.Добавить(Метаданные.ПланыСчетов); + КоллекцииОбъектовМетаданных.Добавить(Метаданные.ПланыОбмена); + + ПрефиксУдаляемыхОбъектов = "удалить"; + УдаляемыеОбъекты = Новый СписокЗначений; + МенеджерыОбъектов = Неопределено; Если ВерсияБСПСоответствуетТребованиям() Тогда МенеджерыОбъектов = МенеджерыОбъектовДляРедактированияРеквизитов(); КонецЕсли; + Для Каждого КоллекцияОбъектовМетаданных Из КоллекцииОбъектовМетаданных Цикл + Для Каждого ОбъектМетаданных Из КоллекцияОбъектовМетаданных Цикл + Если Не ПоказыватьСкрытые Тогда + Если СтрНачинаетсяС(НРег(ОбъектМетаданных.Имя),ПрефиксУдаляемыхОбъектов) + Или ЭтоСлужебныйОбъект(ОбъектМетаданных, МенеджерыОбъектов) Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + + Если ПравоДоступа("Изменение", ОбъектМетаданных) Тогда + Если СтрНачинаетсяС(НРег(ОбъектМетаданных.Имя),ПрефиксУдаляемыхОбъектов) Тогда + УдаляемыеОбъекты.Добавить(ОбъектМетаданных.ПолноеИмя(), ОбъектМетаданных.Представление()); + Иначе + ДоступныеОбъекты.Добавить(ОбъектМетаданных.ПолноеИмя(), ОбъектМетаданных.Представление()); + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + ДоступныеОбъекты.СортироватьПоПредставлению(); + УдаляемыеОбъекты.СортироватьПоПредставлению(); + + Для Каждого Элемент Из УдаляемыеОбъекты Цикл + ДоступныеОбъекты.Добавить(Элемент.Значение, Элемент.Представление); + КонецЦикла; + +КонецПроцедуры + +Функция ЭтоСлужебныйОбъект(ОбъектМетаданных, МенеджерыОбъектов) + Если МенеджерыОбъектов <> Неопределено Тогда ДоступныеМетоды = МетодыМенеджераОбъектаДляРедактированияРеквизитов(ОбъектМетаданных.ПолноеИмя(), МенеджерыОбъектов); Если ТипЗнч(ДоступныеМетоды) = Тип("Массив") И (ДоступныеМетоды.Количество() = 0 @@ -630,7 +688,6 @@ МенеджерОбъекта = МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя()); Редактируемые = МенеджерОбъекта.РеквизитыРедактируемыеВГрупповойОбработке(); КонецЕсли; - Иначе // В конфигурациях без БСП или на старых версиях БСП, пытаемся определить, // есть ли у объекта редактируемые реквизиты. @@ -852,7 +909,8 @@ КонецЦикла; КонецЕсли; - Выражение = СтрЗаменить(Выражение, "[" + ОписаниеРеквизита.Представление + "]", """" + Значение + """"); + Выражение = СтрЗаменить(Выражение, "[" + ОписаниеРеквизита.Представление + "]", """" + + СтрЗаменить(СтрЗаменить(Значение, """", """"""), Символы.ПС, Символы.ПС + "|") + """"); КонецЦикла; Возврат Вычислить(Выражение); diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form index cdccdb6ce..352259c9b 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form @@ -2011,6 +2011,7 @@ Vertical auto + false @@ -2092,6 +2093,7 @@ Vertical auto + false true diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl index 0a0865e2d..52486564c 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl @@ -66,12 +66,6 @@ ОтборЖурналаРегистрации.Вставить("ИмяПриложения", СписокПриложений); КонецЕсли; - Если ОтборЖурналаРегистрации.Количество() = 0 - И ОбщегоНазначенияПовтИсп.РазделениеВключено() - И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - ОтборЖурналаРегистрации.Вставить("ДатаНачала", НачалоДня(ТекущаяДатаСеанса())); - КонецЕсли; - КоличествоПоказываемыхСобытий = 200; ОтборПоУмолчанию = ОтборПоУмолчанию(ЗначенияОтбора); @@ -91,7 +85,7 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - ОбновитьТекущийСписок(); + ПодключитьОбработчикОжидания("ОбновитьТекущийСписок", 0.1, Истина); КонецПроцедуры @@ -324,21 +318,25 @@ ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.ПолеИндикаторДлительныхОпераций, "НеИспользовать"); - Если ЗапускатьНеВФоне Тогда - АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); - ЖурналРегистрации.ПрочитатьСобытияЖурналаРегистрации(ПараметрыОтчета, АдресХранилища); - РезультатВыполнения = Новый Структура("ЗаданиеВыполнено", Истина); - Иначе - РезультатВыполнения = ДлительныеОперации.ЗапуститьВыполнениеВФоне( - УникальныйИдентификатор, - "ЖурналРегистрации.ПрочитатьСобытияЖурналаРегистрации", - ПараметрыОтчета, - НСтр("ru = 'Обновление журнала регистрации'")); - - АдресХранилища = РезультатВыполнения.АдресХранилища; - ИдентификаторЗадания = РезультатВыполнения.ИдентификаторЗадания; - КонецЕсли; - + Попытка + Если ЗапускатьНеВФоне Тогда + АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); + ЖурналРегистрации.ПрочитатьСобытияЖурналаРегистрации(ПараметрыОтчета, АдресХранилища); + РезультатВыполнения = Новый Структура("ЗаданиеВыполнено", Истина); + Иначе + РезультатВыполнения = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификатор, + "ЖурналРегистрации.ПрочитатьСобытияЖурналаРегистрации", + ПараметрыОтчета, + НСтр("ru = 'Обновление журнала регистрации'")); + + АдресХранилища = РезультатВыполнения.АдресХранилища; + ИдентификаторЗадания = РезультатВыполнения.ИдентификаторЗадания; + КонецЕсли; + Исключение + Элементы.Страницы.ТекущаяСтраница = Элементы.ЖурналРегистрации; + ВызватьИсключение; + КонецПопытки; Если РезультатВыполнения.ЗаданиеВыполнено Тогда ЗагрузитьПодготовленныеДанные(); КонецЕсли; diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl index 0c210f0c7..0966e9fd2 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl @@ -85,16 +85,9 @@ Или ОтбираемыеПараметры = "Event" Или ОтбираемыеПараметры = "Метаданные" Или ОтбираемыеПараметры = "Metadata" Тогда + // Грузим как дерево Для Каждого ЭлементСоответствия Из ЗначенияОтбора Цикл - ПараметрыОтбораСобытий = Новый Структура("Представление", ЭлементСоответствия.Значение); - - Если ЭлементСоответствия.Ключ = ЭлементСоответствия.Значение - И ПредставленияСобытий.НайтиСтроки(ПараметрыОтбораСобытий).Количество() > 1 Тогда - ПользовательскиеСобытия.Добавить(ЭлементСоответствия.Ключ, ЭлементСоответствия.Значение); - Продолжить; - КонецЕсли; - НовыйЭлемент = ПолучитьВетвьДерева(ЭлементСоответствия.Значение); НовыйЭлемент.Пометка = Ложь; Если ПустаяСтрока(НовыйЭлемент.Значение) Тогда @@ -174,21 +167,11 @@ РедактируемыйСписок.Очистить(); ЕстьНеотмеченные = Ложь; ПолучитьСписокПоддерева(РедактируемыйСписок, Список.ПолучитьЭлементы(), ЕстьНеотмеченные); - ДобавитьПользовательскиеСобытия(); Возврат РедактируемыйСписок; КонецФункции -&НаКлиенте -Процедура ДобавитьПользовательскиеСобытия() - - Для Каждого Событие Из ПользовательскиеСобытия Цикл - РедактируемыйСписок.Добавить(Событие.Значение, Событие.Представление); - КонецЦикла; - -КонецПроцедуры - &НаКлиенте Функция ПолучитьВетвьДерева(Представление, Рекурсия = Ложь) СтрокиПути = РазложитьСтрокуПоТочкам(Представление); diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Form.form b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Form.form index 5c3ecbe72..0daf6fc10 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Form.form +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Form.form @@ -591,6 +591,7 @@ Vertical auto + false @@ -845,6 +846,7 @@ Vertical auto + false @@ -967,6 +969,7 @@ Vertical auto + false @@ -1263,6 +1266,7 @@ Vertical auto + false @@ -1417,6 +1421,7 @@ Vertical auto + false @@ -1830,6 +1835,7 @@ Vertical auto + false true diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Help/ru.html b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/Событие/Help/ru.html index abab67420..231da1880 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/ЖурналРегистрации/Help/ru.html b/SSL/src/DataProcessors/ЖурналРегистрации/Help/ru.html index 38367ccdf..943d79660 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Help/ru.html +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Help/ru.html @@ -1,9 +1,9 @@ - +

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

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

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

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

                -
      Роль исполнителя Основной объект адресации
      (тип, значение)
      Дополнительный объект адресации
      (тип, значение)
      Пользователь
      +
      diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Form.form b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Form.form index b3b31ebed..2f45facb5 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Form.form @@ -18,7 +18,8 @@ 12 <key>ru</key> - <value>Выбор справочника для загрузки данных из электронных таблиц через копирование в буфер обмена или из внешних файлов (например: Microsoft Office Excel, OpenOffice Calc и др.)</value> + <value>Выбор справочника для загрузки данных из электронных таблиц через копирование в буфер обмена или из внешних файлов +(например: Microsoft Office Excel, OpenOffice Calc и др.)</value> truetrue @@ -43,7 +44,6 @@ Labeltruetrue - true Left Top @@ -108,7 +108,6 @@ true true - false true true true @@ -296,6 +295,7 @@ Vertical auto + false @@ -395,7 +395,6 @@ Label true true - true Left @@ -492,17 +491,16 @@ true - Selection - ШаблонСДаннымиВыбор + OnActivate + ШаблонСДаннымиПриАктивизацииОбласти - 50 + 45 true 1 true true true true - true Special ScrollAlways ScrollAlways @@ -561,6 +559,7 @@ Vertical auto + false @@ -571,9 +570,12 @@ 609 <key>ru</key> - <value>Для загрузки данных необходимо сохранить бланк в файл для заполнения в другой программе. + <value>Для загрузки данных необходимо, сохранить бланк в файл для заполнения в другой программе. Затем загрузить заполненную таблицу в одном из форматов: -Книга Microsoft Excel 2007 (.xlsx), текст с разделителями (.csv) или табличный документ (.mxl).</value> +• Книги Microsoft Excel 97 (.xls) и Excel 2007 (.xlsx) +• Электронные таблицы LibreOffice Сalс (.ods) +• Текст с разделителями (.csv) +• Табличный документ (.mxl)</value> true true @@ -595,9 +597,10 @@ 610 true + true Label true - 5 + 8 true Left @@ -710,6 +713,7 @@ Vertical auto + false @@ -744,7 +748,6 @@ Label true true - true Left @@ -815,6 +818,7 @@ Vertical auto + false true @@ -860,6 +864,7 @@ Vertical auto + false @@ -991,6 +996,7 @@ Vertical auto + false @@ -1034,7 +1040,7 @@ - ДекорацияНенайденоИНеоднозначность + ДекорацияНеНайденоИНеоднозначность 509 <key>ru</key> @@ -1049,7 +1055,7 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ДекорацияНенайденоИНеоднозначностьРасширеннаяПодсказка</name> + <name>ДекорацияНеНайденоИНеоднозначностьРасширеннаяПодсказка</name> <id>511</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -1059,7 +1065,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ДекорацияНенайденоИНеоднозначностьКонтекстноеМеню</name> + <name>ДекорацияНеНайденоИНеоднозначностьКонтекстноеМеню</name> <id>510</id> <autoFill>true</autoFill> </contextMenu> @@ -1131,6 +1137,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1170,7 +1177,6 @@ <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> - <horizontalStretch>true</horizontalStretch> <extInfo xsi:type="form:LabelDecorationExtInfo"> <horizontalAlign>Left</horizontalAlign> <verticalAlign>Top</verticalAlign> @@ -1181,7 +1187,9 @@ <id>406</id> <title> <key>ru</key> - <value>Для некоторых загруженных данных в программе не найдено однозначного соответствия. Для несопоставленных данных будут созданы новые записи, либо они будут пропущены (в зависимости от настройки). При необходимости возможно сопоставить данные вручную, заполнив колонку "%1".</value> + <value>Для некоторых загруженных данных в программе не найдено однозначного соответствия. Для несопоставленных данных будут созданы +новые записи, либо они будут пропущены (в зависимости от настройки). При необходимости возможно сопоставить данные вручную, +заполнив колонку "%1".</value> true @@ -1205,7 +1213,6 @@ Label true true - true Left Top @@ -1214,12 +1221,6 @@ ПояснениеДляУниверсальнойЗагрузки 409 - - <key>ru</key> - <value>Сопоставьте загружаемые данные с элементами в справочнике. Сопоставление возможно произвести несколько раз, выбирая разные колонки для сравнения. Также возможно сопоставить отдельные строки таблицы, выбрав значение в колонке. - -В зависимости от настройки, для несопоставленных данных будут созданы новые элементы, либо они будут пропущены, сопоставленные данные также будут обновлены либо не загружены.</value> - true true @@ -1241,9 +1242,7 @@ Label true - 5 true - true Left @@ -1280,7 +1279,6 @@ Label true true - true Left @@ -1294,7 +1292,6 @@ ru Сопоставление загружаемых данных - true ПояснениеДляСопоставленияДанныхРасширеннаяПодсказка 402 @@ -1336,9 +1333,16 @@ ru Выберите одну или несколько колонок, по которым будут сопоставлены загруженные данные с данными из программы + Button СписокКолонокСопоставленияРасширеннаяПодсказка 458 + + <key>ru</key> + <value>Сопоставьте загружаемые данные с элементами в справочнике. Сопоставление возможно произвести несколько раз, выбирая разные колонки для сравнения. Также возможно сопоставить отдельные строки таблицы, выбрав значение в колонке. + +В зависимости от настройки, для несопоставленных данных будут созданы новые элементы, либо они будут пропущены, сопоставленные данные также будут обновлены либо не загружены.</value> + Label true true @@ -1449,7 +1453,7 @@ - РазрешитьНеоднозначность + УстранитьНеоднозначность 459 true false @@ -1457,7 +1461,7 @@ true - РазрешитьНеоднозначностьРасширеннаяПодсказка + УстранитьНеоднозначностьРасширеннаяПодсказка 460 Label true @@ -1467,7 +1471,7 @@ UsualButton - Form.Command.РазрешитьНеоднозначность + Form.Command.УстранитьНеоднозначностьНеоднозначностьNormalAutotrue @@ -1557,6 +1561,32 @@ AutoInAdditionalSubmenu + + ТаблицаСопоставленияДанныхИзменитьФорму + 679 + true + true + + true + + + ТаблицаСопоставленияДанныхИзменитьФормуРасширеннаяПодсказка + 680 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + truetrue @@ -1746,7 +1776,7 @@ Left - Form.Command.РазрешитьНеоднозначность + Form.Command.УстранитьНеоднозначностьНеоднозначность Normal Auto true @@ -1815,6 +1845,40 @@ ГруппаИтогоНеСопоставленных 421 + + ОбновлятьСуществующиеЗаголовок + 681 + + <key>ru</key> + <value>Сопоставленные элементы (%1):</value> + + true + true + + true + + + ОбновлятьСуществующиеЗаголовокРасширеннаяПодсказка + 683 + Label + true + true + + Left + + + + ОбновлятьСуществующиеЗаголовокКонтекстноеМеню + 682 + true + + Label + true + true + + Left + + ОбновлятьСуществующие 428 @@ -1830,7 +1894,7 @@ ОбновлятьСуществующие - Left + None ОбновлятьСуществующиеРасширеннаяПодсказка 430 @@ -1888,7 +1952,6 @@ СоздаватьЕслиНеСопоставлено - Left СоздаватьЕслиНеСопоставленоРасширеннаяПодсказка 425 @@ -1931,39 +1994,6 @@ Vertical - - ОписаниеНеоднозначность - 461 - - <key>ru</key> - <value>( в т.ч. неоднозначностей: %1 )</value> - - true - - true - - - ОписаниеНеоднозначностьРасширеннаяПодсказка - 463 - Label - true - true - - Left - - - - ОписаниеНеоднозначностьКонтекстноеМеню - 462 - true - - Label - true - true - - Left - - true true @@ -1988,6 +2018,39 @@ Auto + + ОписаниеНеоднозначность + 461 + + <key>ru</key> + <value>( в т.ч. неоднозначностей: %1 )</value> + + true + + true + + + ОписаниеНеоднозначностьРасширеннаяПодсказка + 463 + Label + true + true + + Left + + + + ОписаниеНеоднозначностьКонтекстноеМеню + 462 + true + + Label + true + true + + Left + + true true @@ -1997,7 +2060,6 @@ ru Сопоставление загружаемых данных: - false ГруппаНастройкиСопоставленияРасширеннаяПодсказка 420 @@ -2041,6 +2103,7 @@ Vertical auto + false @@ -2369,7 +2432,8 @@ 375 <key>ru</key> - <value>Созданные и обновленные элементы справочника "%1" можно откорректировать, выделив сразу несколько строк и нажав кнопку "Измененить реквизиты". Отдельные элементы можно открыть по двойному щелчку мыши. + <value>Созданные и обновленные элементы справочника "%1" можно откорректировать, выделив сразу несколько строк и +нажав кнопку "Изменить реквизиты". Отдельные элементы можно открыть по двойному щелчку мыши. При необходимости, пропущенные строки можно сохранить в файл, подкорректировать и позднее загрузить повторно.</value> true @@ -2712,7 +2776,7 @@ OnActivate ТаблицаОтчетПриАктивизацииОбласти - 50 + 45 true 1 true @@ -2751,6 +2815,7 @@ Vertical auto + false @@ -2925,6 +2990,7 @@ Vertical auto + false true @@ -3051,10 +3117,6 @@ ДекорацияРазделитель 38 - - <key>ru</key> - <value> </value> - true true @@ -3567,10 +3629,10 @@ - Ассоциация + Группа <key>ru</key> - <value>Ассоциация</value> + <value>Группа</value> 6 @@ -3587,10 +3649,10 @@ - Синоним + Родитель <key>ru</key> - <value>Синоним</value> + <value>Родитель</value> 7 @@ -3660,6 +3722,26 @@ true + + Синоним + + <key>ru</key> + <value>Синоним</value> + + 11 + + String + + 150 + + + + true + + + true + + ВнешняяОбработкаСсылка @@ -3965,6 +4047,26 @@ true + + ВысотаШапкиШаблонаСДанными + + <key>ru</key> + <value>Высота шапки шаблона с данными</value> + + 31 + + Number + + 10 + + + + true + + + true + + ЗагрузитьТаблицуИзФайла @@ -3996,7 +4098,7 @@ <id>3</id> <toolTip> <key>ru</key> - <value>Сохраняет в файл бланк для заполнения в виде пустой таблицы. Доступно сохранение в один из трех выбраных форматов файла (Книга Excel 2007, Текстовый файл с разделителями CSV, MXL таблица)</value> + <value>Сохраняет в файл бланк для заполнения в виде пустой таблицы. Доступно сохранение в один из трех выбранных форматов файла (Книга Excel 2007, Текстовый файл с разделителями CSV, MXL таблица) </value> </toolTip> <use> <common>true</common> @@ -4072,22 +4174,22 @@ <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> - <name>РазрешитьНеоднозначность</name> + <name>УстранитьНеоднозначностьНеоднозначность</name> <title> <key>ru</key> - <value>Разрешить неоднозначность...</value> + <value>Устранить неоднозначность...</value> 10 ru - Открывает окно со списков совпадающих элементов справочника для выбора правильногоэлемента + Открывает окно со списков совпадающих элементов справочника для выбора правильного элемента. true - РазрешитьНеоднозначность + УстранитьНеоднозначность DontUse diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Help/ru.html b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Help/ru.html new file mode 100644 index 000000000..a2eeac598 --- /dev/null +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Help/ru.html @@ -0,0 +1,40 @@ + +

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

      +

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

      +

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

      +

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

      +

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

      +

      Заполнение таблицы

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

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

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

      Сопоставление данных

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

      Загрузка данных в произвольный список программы (только для администратора)

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

      Сопоставление данных (только для администратора)

      +
      • Заполнив таблицу или скачав данные из файла, нажмите кнопку Далее. Необходимо провести сопоставление данных.  +
      • Поведение программы при сопоставлении данных можно настроить: +
        • С помощью переключателя выбрать, как поступать с Сопоставленными элементами: Обновлять или Пропускать (по умолчанию). +
        • С помощью переключателя выбрать, как поступать с Несопоставленными элементами: Создавать (по умолчанию) или Пропускать.
      • Данные будут автоматически сопоставлены, если соответствия не будет найдено, таблица выводится с предложением сопоставить данные. +
        • В некоторых списках существует возможность автоматического создания несопоставленных данных. Такие данные помечаются надписью <Новый>. Для автоматического создания в списке выберите Создавать с помощью переключателя (выбрано по умолчанию). +
        • После автоматического или ручного сопоставления данных, в случае, если все данные сопоставлены, нажмите кнопку Загрузить данные.
      • После этого данные будут загружены в документ или список. Остается лишь заполнить недостающие поля. Результаты загрузки выводятся на просмотр. +
        • С помощью поля Показывать можно вывести Все, Новые, Обновленные и Пропущенные элементы. +
        • Несколько выделенных строк Сохранить в файл, подкорректировать и позднее загрузить повторно. +
        • В списке можно изменить введенные элементы, если они не устраивают. Для изменения нескольких выделенных элементов нажмите кнопку Изменить реквизиты. +
        • При необходимости включите флажок Открыть справочник по кнопке "Готово".
      • Если в таблице все данные корректны, нажмите кнопку Готово для подтверждения. Если был включен флажок, открывается список с введенными элементами.
      \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl index 779a7acf2..ce54ebbeb 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/ЗагрузкаДанныхИзФайла/Module.bsl @@ -1,3 +1,5 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ПараметрыОбработчика; @@ -7,6 +9,8 @@ &НаКлиенте Перем ФормаДлительнойОперации; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -26,81 +30,51 @@ Возврат; КонецЕсли; - ДополнительныеПараметры = Параметры.ДополнительныеПараметры; - ПодтверждениеЗакрытияФормы = Неопределено; - УстановитьОформлениеДанных(); - СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект); - СоздаватьЕслиНеСопоставлено = 1; ОбновлятьСуществующие = 0; + ПодтверждениеЗакрытияФормы = Неопределено; + ДополнительныеПараметры = Параметры.ДополнительныеПараметры; - Если ЗначениеЗаполнено(Параметры.Заголовок) Тогда - ЭтотОбъект.АвтоЗаголовок = Ложь; - ЭтотОбъект.Заголовок = Параметры.Заголовок; - Иначе - ЭтотОбъект.АвтоЗаголовок = Ложь; - ЭтотОбъект.Заголовок = НСтр("ru = 'Загрузка данных в справочник'") - КонецЕсли; - - ВебКлиент = ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент(); - Если ВебКлиент Тогда - Элементы.СтраницаВариантЗаполнениеТаблицы.Видимость = Ложь; - Элементы.СтраницыЗаполненияДанных.ТекущаяСтраница = Элементы.СтраницаВариантЗагрузкаИзФайла; - Элементы.ВариантЗагрузки.Видимость = Ложь; - Элементы.ПояснениеДляВыбораСправочникаДляЗагрузки.Заголовок = НСтр("ru = 'Выбор справочника для загрузки данных из электронных таблиц, расположенных во внешних файлах (например: Microsoft Office Excel, OpenOffice Calc и др.).'"); - ВидЗагрузкиДанных = 1; - КонецЕсли; + УстановитьОформлениеДанных(); + СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп(ЭтотОбъект); + УстановитьВидимостьЭлементовФормы(); Если ТипЗагрузки = "ВставкаИзБуфераОбмена" Тогда - ФильтрТаблицаСопоставления = "Несопоставленные"; - Если Параметры.Свойство("ПредставлениеПоля") Тогда - Заголовок = НСтр("ru = 'Вставка из буфера обмена'") + " (" + Параметры.ПредставлениеПоля + ")"; - ЭтотОбъект.АвтоЗаголовок = Ложь; - Иначе - Заголовок = НСтр("ru = 'Вставка из буфера обмена'"); + ИнициализацияВставкиИзБуфераОбмена(); + ИначеЕсли ТипЗагрузки = "ТабличнаяЧасть" Тогда + ИмяОбъектаСопоставления = Обработки.ЗагрузкаДанныхИзФайла.ПолноеИмяОбъектаТабличнаяЧасть(Параметры.ПолноеИмяТабличнойЧасти); + + ТаблицаИнформацияПоКолонкам = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЗагрузкаДанныхИзФайла", ИмяОбъектаСопоставления,, ИмяПользователя()); + Если ТаблицаИнформацияПоКолонкам = Неопределено Тогда + ТаблицаИнформацияПоКолонкам = РеквизитФормыВЗначение("ИнформацияПоКолонкам"); КонецЕсли; - Обработки.ЗагрузкаДанныхИзФайла.ИнициализироватьРежимПоискСсылок(ШаблонСДанными, ИнформацияПоКолонкам, Параметры.ОписаниеТипов); - СоздатьТаблицуСопоставленияПоИнформацииОКолонкахАвто(Параметры.ОписаниеТипов); + ПараметрыЗагрузки = Новый Структура; + ПараметрыЗагрузки.Вставить("ТипЗагрузки", ТипЗагрузки); + ПараметрыЗагрузки.Вставить("ПолноеИмяОбъекта", ИмяОбъектаСопоставления); + ПараметрыЗагрузки.Вставить("Макет", Параметры.ИмяМакетаСШаблоном); + ПараметрыЗагрузки.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); - Если ИнформацияПоКолонкам.Количество() = 1 Тогда - Элементы.СтраницыЗаполненияДанных.ТекущаяСтраница = Элементы.СтраницаОднаКолонка; - Элементы.ВариантЗагрузки.Видимость = Ложь; - Элементы.ВставитьВСписок.Видимость = Ложь; - Элементы.Далее.Заголовок = НСтр("ru = 'Вставить в список'"); + Если Параметры.Свойство("КолонкиМакета") И Параметры.КолонкиМакета <> Неопределено Тогда + ОпределитьДинамическийМакет(ТаблицаИнформацияПоКолонкам, Параметры.КолонкиМакета); + Элементы.ИзменитьБланк.Видимость = Ложь; + Элементы.ИзменитьБланкЗаполнениеТаблицы.Видимость = Ложь; + ЗагрузкаДанныхИзФайла.ДобавитьСтатистическуюИнформацию("РежимЗапуска.ЗагрузкаВТабличнуюЧасть.ДинамическийМакет",, Параметры.ПолноеИмяТабличнойЧасти); Иначе - Элементы.СтраницыЗаполненияДанных.ТекущаяСтраница = Элементы.СтраницаМногоКолонок; - КонецЕсли; - - Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.ЗаполнениеТаблицыДанными; - Элементы.ГруппаНастройкиСопоставления.Видимость = Ложь; - Элементы.СписокКолонокСопоставления.Видимость = Ложь; - Элементы.Закрыть.Заголовок = НСтр("ru = 'Отмена'"); - - Иначе - Если НЕ ЗначениеЗаполнено(Параметры.ПолноеИмяТабличнойЧасти) Тогда - ЗаполнитьСписокВидЗагрузкиДанных(); - Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.ВыборСправочникаДляЗагрузки; - Иначе - ИмяОбъектаСопоставления = Обработки.ЗагрузкаДанныхИзФайла.ПолноеИмяОбъектаТабличнаяЧасть(Параметры.ПолноеИмяТабличнойЧасти); - - ТаблицаИнформацияПоКолонкам = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЗагрузкаДанныхИзФайла", ИмяОбъектаСопоставления,, ИмяПользователя()); - Если ТаблицаИнформацияПоКолонкам = Неопределено Тогда - ТаблицаИнформацияПоКолонкам = РеквизитФормыВЗначение("ИнформацияПоКолонкам"); - КонецЕсли; - - Обработки.ЗагрузкаДанныхИзФайла.ИнициализироватьЗагрузкуВТабличнуюЧасть(ИмяОбъектаСопоставления, Параметры.ИмяМакетаСШаблоном, ТаблицаИнформацияПоКолонкам, ШаблонСДанными, ДополнительныеПараметры, Отказ); + Обработки.ЗагрузкаДанныхИзФайла.ОпределитьИнформацияПоКолонкам(ПараметрыЗагрузки, ТаблицаИнформацияПоКолонкам); + ИзменитьБланкПоИнформацииПоКолонкам(); + ЗагрузкаДанныхИзФайла.ДобавитьСтатистическуюИнформацию("РежимЗапуска.ЗагрузкаВТабличнуюЧасть.СтатическийМакет",, Параметры.ПолноеИмяТабличнойЧасти); Если Отказ Тогда Возврат; КонецЕсли; - ЗначениеВРеквизитФормы(ТаблицаИнформацияПоКолонкам, "ИнформацияПоКолонкам"); - - ПоказатьИнформационнуюСтрокуПроОбязательныеКолонки(); - ИзменитьБланкПоИнформацииПоКолонкам(); - Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.ЗаполнениеТаблицыДанными; - Элементы.ГруппаНастройкиСопоставления.Видимость = Ложь; - Элементы.СписокКолонокСопоставления.Видимость = Ложь; КонецЕсли; + ЗначениеВРеквизитФормы(ТаблицаИнформацияПоКолонкам, "ИнформацияПоКолонкам"); + + ПоказатьИнформационнуюСтрокуПроОбязательныеКолонки(); + ИзменитьБланкПоИнформацииПоКолонкам(); + + Иначе + ЗаполнитьСписокВидЗагрузкиДанных(); КонецЕсли; КонецПроцедуры @@ -109,7 +83,7 @@ Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) Если ПодтверждениеЗакрытияФормы <> Неопределено Тогда - Если ПодтверждениеЗакрытияФормы <> Истина Тогда + Если ПодтверждениеЗакрытияФормы <> Истина Тогда Оповещение = Новый ОписаниеОповещения("ЗакрытиеФормыЗавершение", ЭтотОбъект); Отказ = Истина; ТекстВопроса = НСтр("ru = 'Введенные данные не будут записаны. Закрыть форму?'"); @@ -151,11 +125,11 @@ Если ТипЗагрузки = "ТабличнаяЧасть" Тогда Если Фильтр = "Сопоставленные" Тогда - Элементы.ТаблицаСопоставленияДанных.ОтборСтрок = Новый ФиксированнаяСтруктура("РезультатСопоставленияСтроки", "СтрокаСопоставлена"); + Элементы.ТаблицаСопоставленияДанных.ОтборСтрок = Новый ФиксированнаяСтруктура("РезультатСопоставленияСтроки", "СтрокаСопоставлена"); ИначеЕсли Фильтр = "Несопоставленные" Тогда - Элементы.ТаблицаСопоставленияДанных.ОтборСтрок = Новый ФиксированнаяСтруктура("РезультатСопоставленияСтроки", "НеСопоставлен"); + Элементы.ТаблицаСопоставленияДанных.ОтборСтрок = Новый ФиксированнаяСтруктура("РезультатСопоставленияСтроки", "Не"); ИначеЕсли Фильтр = "Неоднозначные" Тогда - Элементы.ТаблицаСопоставленияДанных.ОтборСтрок = Новый ФиксированнаяСтруктура("ОписаниеОшибки", ""); + Элементы.ТаблицаСопоставленияДанных.ОтборСтрок = Новый ФиксированнаяСтруктура("РезультатСопоставленияСтроки", "Неоднозначность"); Иначе Элементы.ТаблицаСопоставленияДанных.ОтборСтрок = Неопределено; КонецЕсли; @@ -190,11 +164,7 @@ Если СопоставитьПоКолонке.Количество() = 0 Тогда Для каждого строка Из ИнформацияПоКолонкам Цикл - Если ЗначениеЗаполнено(Строка.Синоним) Тогда - ПредставлениеКолонки = Строка.Синоним; - Иначе - ПредставлениеКолонки = Строка.ПредставлениеКолонки; - КонецЕсли; + ПредставлениеКолонки = ?(ПустаяСтрока(Строка.Синоним), Строка.ПредставлениеКолонки, Строка.Синоним); СопоставитьПоКолонке.Добавить(строка.ИмяКолонки, ПредставлениеКолонки); КонецЦикла; КонецЕсли; @@ -244,10 +214,8 @@ #Область ОбработчикиСобытийЭлементовТаблицыФормыШаблонСДанными &НаКлиенте -Процедура ШаблонСДаннымиВыбор(Элемент, Область, СтандартнаяОбработка) - Если Область.Верх = 1 Тогда - СтандартнаяОбработка = Ложь; // Нельзя редактировать шапку - КонецЕсли; +Процедура ШаблонСДаннымиПриАктивизацииОбласти(Элемент) + Элемент.Защита = ?(Элемент.ТекущаяОбласть.Верх > ВысотаШапкиШаблонаСДанными, Ложь, Истина); КонецПроцедуры #КонецОбласти @@ -262,16 +230,11 @@ &НаКлиенте Процедура ИзменитьБланк(Команда) - ПараметрыФормы = Новый Структура(); - ПараметрыФормы.Вставить("ИнформацияПоКолонкам", ИнформацияПоКолонкам); - ПараметрыФормы.Вставить("ИмяОбъектаСопоставления", ИмяОбъектаСопоставления); - - Оповещение = Новый ОписаниеОповещения("ПослеВызоваФормыИзменитьБланк", ЭтотОбъект); - ОткрытьФорму("Обработка.ЗагрузкаДанныхИзФайла.Форма.РедактированиеБланка", ПараметрыФормы, ЭтотОбъект,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ОткрытьФормуИзмененияБланка(); КонецПроцедуры &НаКлиенте -Процедура РазрешитьНеоднозначность(Команда) +Процедура УстранитьНеоднозначность(Команда) ОткрытьФормуРазрешенияНеоднозначности(Элементы.ТаблицаСопоставленияДанных.ТекущаяСтрока,Элементы.ТаблицаСопоставленияДанных.ТекущийЭлемент.Имя, Истина); КонецПроцедуры @@ -287,7 +250,7 @@ &НаКлиенте Процедура ПослеВопросаОДобавлениеВТабличнуюЧасть(Результат, ДополнительныеПараметры) Экспорт - Если Результат = КодВозвратаДиалога.Да Тогда + Если Результат = КодВозвратаДиалога.Да Тогда АдресЗагруженныхДанных = АдресВХранилищеТаблицыСопоставления(); Закрыть(АдресЗагруженныхДанных); КонецЕсли; @@ -343,68 +306,18 @@ &НаКлиенте Процедура ВыгрузитьШаблонВФайл(Команда) - Если ПодключитьРасширениеРаботыСФайлами() Тогда - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ФайловыеФункции") Тогда - МодульФайловыеФункцииСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ФайловыеФункцииСлужебныйКлиент"); - ПутьКФайлу = ""; - Иначе - ПутьКФайлу = ""; - КонецЕсли; - - ИмяФайла = СформироватьИмяФайлаДляОбъектаМетаданных(ИмяОбъектаСопоставления); - ПолучитьПутьКФайлуНачалоВыбора(РежимДиалогаВыбораФайла.Сохранение, ПутьКФайлу, ИмяФайла); - ВыбранныйФайл = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ПутьКФайлу); - РасширениеФайла = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(ВыбранныйФайл.Расширение); - Если ЗначениеЗаполнено(ВыбранныйФайл.Имя) Тогда - Если РасширениеФайла = "csv" Тогда - СохранитьТаблицуВCSVФайл(ПутьКФайлу); - ИначеЕсли РасширениеФайла = "xlsx" Тогда - ШаблонСДанными.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.xlsx); - ИначеЕсли РасширениеФайла = "mxl" Тогда - ШаблонСДанными.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.mxl); - Иначе - ПоказатьПредупреждение(, НСтр("ru = 'Шаблон файла не был сохранен.'")); - КонецЕсли; - КонецЕсли; - Иначе - Оповещение = Новый ОписаниеОповещения("ПослеВыбораРасширенияФайла", ЭтотОбъект); - ОткрытьФорму("Обработка.ЗагрузкаДанныхИзФайла.Форма.РасширениеФайла",, ЭтотОбъект, Истина,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); - ПутьКФайлу = ""; - КонецЕсли; + Оповещение = Новый ОписаниеОповещения("ВыгрузитьШаблонВФайлЗавершение", ЭтотОбъект); + НачатьПодключениеРасширенияРаботыСФайлами(Оповещение); + КонецПроцедуры &НаКлиенте Процедура ЗагрузитьШаблонИзФайла(Команда) - ПолноеИмяФайла = ""; - Интерактивно = Истина; + ИмяФайла = СформироватьИмяФайлаДляОбъектаМетаданных(ИмяОбъектаСопоставления); - #Если НЕ ВебКлиент Тогда - Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ФайловыеФункции") Тогда - МодульФайловыеФункцииСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ФайловыеФункцииСлужебныйКлиент"); - ПутьКФайлу = МодульФайловыеФункцииСлужебныйКлиент.КаталогМоиДокументы(); - Иначе - ПутьКФайлу = ""; - КонецЕсли; - - ИмяФайла = СформироватьИмяФайлаДляОбъектаМетаданных(ИмяОбъектаСопоставления); - - ПолучитьПутьКФайлуНачалоВыбора(РежимДиалогаВыбораФайла.Открытие, ПутьКФайлу, ""); - ВыбранныйФайл = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ПутьКФайлу); - РасширениеФайла = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(ВыбранныйФайл.Расширение); - Если ЗначениеЗаполнено(ВыбранныйФайл.Имя) Тогда - ПолноеИмяФайла = ВыбранныйФайл.ПолноеИмя; - Интерактивно = Ложь; - Иначе - Возврат; - КонецЕсли; - #Иначе - ПолноеИмяФайла = ""; - #КонецЕсли - АдресВременногоХранилища = ""; - Оповещение = Новый ОписаниеОповещения("ПриОкончаниеПомещенияФайла", ЭтотОбъект); - НачатьПомещениеФайла(Оповещение, АдресВременногоХранилища, ПолноеИмяФайла, Интерактивно); - ТаблицаОтчет.ФиксацияСверху = 1; + Оповещение = Новый ОписаниеОповещения("ЗагрузитьДанныеИзФайлаВШаблон", ЭтотОбъект); + ЗагрузкаДанныхИзФайлаКлиент.ДиалогЗагрузкиФайла(Оповещение, ИмяФайла); КонецПроцедуры @@ -428,7 +341,7 @@ &НаКлиенте Процедура ПереходКСледующемуШагуЗагрузкиДанных() - Если Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.ВыборСправочникаДляЗагрузки Тогда + Если Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.ВыборСправочникаДляЗагрузки Тогда ОписаниеСтрокиВыбора = Элементы.ВидЗагрузкиДанных.ТекущиеДанные.Значение; ВыполнитьШагЗаполнениеТаблицыДаннымиНаСервере(ОписаниеСтрокиВыбора); ВыполнитьШагЗаполнениеТаблицыДаннымиНаКлиенте(); @@ -444,15 +357,16 @@ Элементы.ВставитьВСписок.Видимость = Ложь; ПодтверждениеЗакрытияФормы = Истина; Если ТипЗагрузки = "ТабличнаяЧасть" Тогда - Отбор = Новый Структура("РезультатСопоставленияСтроки", "НеСопоставлен"); - Строки = ТаблицаСопоставленияДанных.НайтиСтроки(Отбор); - Если Строки.Количество() > 0 Тогда - Оповещение = Новый ОписаниеОповещения("ПослеВопросаОДобавлениеВТабличнуюЧасть", ЭтотОбъект); - ПоказатьВопрос(Оповещение, НСтр("ru = 'Строки в которых не заполнены обязательные колонки будут пропущены.'") + Отбор = Новый Структура(); + Отбор.Вставить("РезультатСопоставленияСтроки", "НеСопоставлен"); + Отбор.Вставить("РезультатСопоставленияСтроки", "Неоднозначность"); + Если УстановитьОформлениеДляПолейСНеоднозначностью(Отбор) Тогда + ПоказатьВопрос(Новый ОписаниеОповещения("ПослеВопросаОДобавлениеВТабличнуюЧасть", ЭтотОбъект), + НСтр("ru = 'Строки в которых не заполнены обязательные колонки будут пропущены.'") + Символы.ПС + НСтр("ru = 'Продолжить?'"), РежимДиалогаВопрос.ДаНет); Возврат; КонецЕсли; - + АдресЗагруженныхДанных = АдресВХранилищеТаблицыСопоставления(); Закрыть(АдресЗагруженныхДанных); ИначеЕсли ТипЗагрузки = "ВставкаИзБуфераОбмена" Тогда @@ -466,6 +380,30 @@ КонецПроцедуры +&НаКлиенте +Функция УстановитьОформлениеДляПолейСНеоднозначностью(Отбор) + + Строки = ТаблицаСопоставленияДанных.НайтиСтроки(Отбор); + Если Строки.Количество() > 0 Тогда + СписокКолонок = Новый Массив; + Для каждого СтрокаДанных Из Строки Цикл + Если СтрСравнить(СтрокаДанных.РезультатСопоставленияСтроки, "Неоднозначность") = 0 Тогда + МассивКолонок = СтрРазделить(СтрокаДанных.ОписаниеОшибки, ";", Ложь); + Для каждого ИмяКолонки Из МассивКолонок Цикл + СписокКолонок.Добавить(ИмяКолонки); + КонецЦикла; + КонецЕсли; + КонецЦикла; + Иначе + Возврат Ложь; + КонецЕсли; + + УстановитьОформлениеДанных(СписокКолонок); + + Возврат Истина; + +КонецФункции + &НаКлиенте Процедура ПослеСопоставленияНеоднозначностей(Результат, Параметр) Экспорт @@ -527,12 +465,12 @@ Если ТипЗагрузки = "ВставкаИзБуфераОбмена" Тогда Отбор = Новый Структура("РезультатСопоставленияСтроки", "НеСопоставлен"); Результат = ТаблицаСопоставленияДанных.НайтиСтроки(Отбор); + КолоВоНеоднозначных = ТаблицаСопоставленияДанных.Количество() - КоличествоСопоставленных - Результат.Количество(); Иначе Отбор = Новый Структура("ОписаниеОшибки", ""); Результат = ТаблицаСопоставленияДанных.НайтиСтроки(Отбор); + КолоВоНеоднозначных = ТаблицаСопоставленияДанных.Количество() - Результат.Количество(); КонецЕсли; - КолоВоНеоднозначных = ТаблицаСопоставленияДанных.Количество() - Результат.Количество(); - КоличествоНеСопоставленных = ТаблицаСопоставленияДанных.Количество() - КоличествоСопоставленных; Результат = Новый Структура; @@ -556,7 +494,7 @@ ТекстВсе = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Все (%1)'"), Статистика.Всего); Элементы.СоздаватьЕслиНеСопоставлено.Заголовок = НСтр("ru = 'Несопоставленные ('") + Статистика.НеСопоставленных + ")"; - Элементы.ОбновлятьСуществующие.Заголовок = НСтр("ru = 'Сопоставленные элементы ('") + Строка(Статистика.Сопоставленных) + ")"; + Элементы.ОбновлятьСуществующиеЗаголовок.Заголовок = НСтр("ru = 'Сопоставленные элементы ('") + Строка(Статистика.Сопоставленных) + ")"; СписокВыбора = Элементы.ФильтрТаблицаСопоставления.СписокВыбора; СписокВыбора.Очистить(); @@ -588,6 +526,85 @@ КонецПроцедуры +&НаКлиенте +Процедура ВыгрузитьШаблонВФайлЗавершение(Подключено, ДополнительныеПараметры) Экспорт + + Если Подключено Тогда + Оповещение = Новый ОписаниеОповещения("ПослеВыбораФайлаДляСохранения", ЭтотОбъект); + ИмяФайла = СформироватьИмяФайлаДляОбъектаМетаданных(ИмяОбъектаСопоставления); + ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); + ДиалогВыбораФайла.Фильтр = НСтр("ru='Книга Excel 97 (*.xls)|*.xls|Книга Excel 2007 (*.xlsx)|*.xlsx|Электронная таблица OpenDocument (*.ods)|*.ods|Текстовый документ c разделителями (*.csv)|*.csv|Табличный документ (*.mxl)|*.mxl'"); + ДиалогВыбораФайла.Расширение = "xls"; + ДиалогВыбораФайла.МножественныйВыбор = Ложь; + ДиалогВыбораФайла.ИндексФильтра = 0; + ДиалогВыбораФайла.ПолноеИмяФайла = ИмяФайла; + ДиалогВыбораФайла.Показать(Оповещение); + Иначе + Оповещение = Новый ОписаниеОповещения("ПослеВыбораРасширенияФайла", ЭтотОбъект); + ОткрытьФорму("Обработка.ЗагрузкаДанныхИзФайла.Форма.РасширениеФайла",, ЭтотОбъект, Истина,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ПутьКФайлу = ""; + КонецЕсли; + +КонецПроцедуры + +/////////////////////////////////////// СЕРВЕР /////////////////////////////////////////// + +&НаСервере +Процедура ИнициализацияВставкиИзБуфераОбмена() + ФильтрТаблицаСопоставления = "Несопоставленные"; + + Если Параметры.Свойство("ПредставлениеПоля") Тогда + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Вставка из буфера обмена (%1)'"), Параметры.ПредставлениеПоля); + Иначе + Заголовок = НСтр("ru = 'Вставка из буфера обмена'"); + КонецЕсли; + + ЗагрузкаДанныхИзФайла.ДобавитьСтатистическуюИнформацию("РежимЗапуска.ВставкаИзБуфераОбмена"); + + Обработки.ЗагрузкаДанныхИзФайла.УстановитьРежимВставкиИзБуфераОбмена(ШаблонСДанными, ИнформацияПоКолонкам, Параметры.ОписаниеТипов); + СоздатьТаблицуСопоставленияПоИнформацииОКолонкахАвто(Параметры.ОписаниеТипов); + + Если ИнформацияПоКолонкам.Количество() = 1 Тогда + Элементы.СтраницыЗаполненияДанных.ТекущаяСтраница = Элементы.СтраницаОднаКолонка; + Элементы.ВариантЗагрузки.Видимость = Ложь; + Элементы.ВставитьВСписок.Видимость = Ложь; + Элементы.Далее.Заголовок = НСтр("ru = 'Вставить в список'"); + Иначе + Элементы.СтраницыЗаполненияДанных.ТекущаяСтраница = Элементы.СтраницаМногоКолонок; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьВидимостьЭлементовФормы() + ЭтотОбъект.Заголовок = ?(ПустаяСтрока(Параметры.Заголовок), НСтр("ru = 'Загрузка данных в справочник'"), Параметры.Заголовок); + + Если ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент() Тогда + Элементы.СтраницаВариантЗаполнениеТаблицы.Видимость = Ложь; + Элементы.СтраницыЗаполненияДанных.ТекущаяСтраница = Элементы.СтраницаВариантЗагрузкаИзФайла; + Элементы.ВариантЗагрузки.Видимость = Ложь; + Элементы.ПояснениеДляВыбораСправочникаДляЗагрузки.Заголовок = НСтр("ru = 'Выбор справочника для загрузки данных из электронных таблиц, расположенных во внешних файлах + | (например: Microsoft Office Excel, OpenOffice Calc и др.).'"); + ВидЗагрузкиДанных = 1; + КонецЕсли; + + Если ТипЗагрузки = "ВставкаИзБуфераОбмена" Тогда + Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.ЗаполнениеТаблицыДанными; + Элементы.ГруппаНастройкиСопоставления.Видимость = Ложь; + Элементы.СписокКолонокСопоставления.Видимость = Ложь; + Элементы.Закрыть.Заголовок = НСтр("ru = 'Отмена'"); + ИначеЕсли ТипЗагрузки = "ТабличнаяЧасть" Тогда + Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.ЗаполнениеТаблицыДанными; + Элементы.ГруппаНастройкиСопоставления.Видимость = Ложь; + Элементы.СписокКолонокСопоставления.Видимость = Ложь; + Иначе + Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.ВыборСправочникаДляЗагрузки; + КонецЕсли; + +КонецПроцедуры + + + #Область ШагВыборВариантаЗагрузки &НаСервере @@ -604,6 +621,7 @@ Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.ЗаполнениеТаблицыДанными; Элементы.Назад.Видимость = Истина; + ВысотаШапкиШаблонаСДанными = ?(ЗагрузкаДанныхИзФайлаКлиентСервер.КолонкиИмеютГруппировку(ИнформацияПоКолонкам), 2, 1); КонецПроцедуры @@ -623,6 +641,21 @@ Возврат Ложь; КонецФункции +&НаКлиенте +Процедура ОткрытьФормуИзмененияБланка() + + Перем Оповещение, ПараметрыФормы; + + ПараметрыФормы = Новый Структура(); + ПараметрыФормы.Вставить("ИнформацияПоКолонкам", ИнформацияПоКолонкам); + ПараметрыФормы.Вставить("ИмяОбъектаСопоставления", ИмяОбъектаСопоставления); + ПараметрыФормы.Вставить("ПараметрыЗагрузки", ПараметрыЗагрузки); + + Оповещение = Новый ОписаниеОповещения("ПослеВызоваФормыИзменитьБланк", ЭтотОбъект); + ОткрытьФорму("Обработка.ЗагрузкаДанныхИзФайла.Форма.РедактированиеБланка", ПараметрыФормы, ЭтотОбъект,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + &НаСервереБезКонтекста Функция ПолучитьПолноеИмяОбъектаМетаданных(Имя) ОбъектМетаданных = Метаданные.Справочники.Найти(Имя); @@ -653,7 +686,9 @@ ТипЗагрузки = ОписаниеСтрокиВыбора.Тип; Если ТипЗагрузки = "ВнешняяЗагрузка" Тогда ВнешняяОбработкаСсылка = ОписаниеСтрокиВыбора.Ссылка; + ИдентификаторКоманды = ОписаниеСтрокиВыбора.Идентификатор; КонецЕсли; + ЗагрузкаДанныхИзФайла.ДобавитьСтатистическуюИнформацию("РежимЗапуска.ЗагрузкаВСправочник." + ИмяОбъектаСопоставления,, ТипЗагрузки); СформироватьМакетПоТипуЗагрузки(); СоздатьТаблицуСопоставленияПоИнформацииОКолонках(); @@ -666,7 +701,7 @@ ПараметрыЗагрузки = Новый Структура; Если ТипЗагрузки = "УниверсальнаяЗагрузка" Тогда - ЭтотОбъект.Заголовок = НСтр("ru = 'Загрузка данных в справочник ""'") + ПредставлениеСправочника(ИмяОбъектаСопоставления)+""""; + ЭтотОбъект.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Загрузка данных в справочник ""%1""'"), ПредставлениеСправочника(ИмяОбъектаСопоставления)); ЭтотОбъект.АвтоЗаголовок = Ложь; ИначеЕсли ТипЗагрузки = "ПрикладнаяЗагрузка" Тогда ОпределитьПараметрыЗагрузки(ПараметрыЗагрузки); @@ -674,23 +709,16 @@ Если ПараметрыЗагрузки.Свойство("Заголовок") Тогда ЭтотОбъект.Заголовок = ПараметрыЗагрузки.Заголовок; Иначе - ЭтотОбъект.Заголовок = НСтр("ru = 'Загрузка данных в справочник ""'") + ПредставлениеСправочника(ИмяОбъектаСопоставления)+""""; + ЭтотОбъект.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Загрузка данных в справочник ""%1""'"), ПредставлениеСправочника(ИмяОбъектаСопоставления)); КонецЕсли; ИначеЕсли ТипЗагрузки = "ВнешняяЗагрузка" Тогда - ИдентификаторКоманды = ИмяОбъектаСопоставления; - ПараметрыЗагрузки = Обработки.ЗагрузкаДанныхИзФайла.ПараметрыЗагрузкиИзФайлаВнешняяОбработка(ИмяОбъектаСопоставления, - ВнешняяОбработкаСсылка); + ПараметрыЗагрузки.Вставить("ИмяМакетаСШаблоном", "ЗагрузкаДанныхИзФайла"); + Обработки.ЗагрузкаДанныхИзФайла.ПараметрыЗагрузкиИзФайлаВнешняяОбработка(ИдентификаторКоманды, + ВнешняяОбработкаСсылка, ПараметрыЗагрузки); КонецЕсли; ПараметрыЗагрузки.Вставить("ТипЗагрузки", ТипЗагрузки); ПараметрыЗагрузки.Вставить("ПолноеИмяОбъекта", ИмяОбъектаСопоставления); - СформироватьМакет(ПараметрыЗагрузки); -КонецПроцедуры - - -&НаСервере -Процедура СформироватьМакет(ПараметрыЗагрузки) - ИнформацияПоКолонкамТаблица = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЗагрузкаДанныхИзФайла", ИмяОбъектаСопоставления,, ИмяПользователя()); Если ИнформацияПоКолонкамТаблица = Неопределено Тогда ИнформацияПоКолонкамТаблица = РеквизитФормыВЗначение("ИнформацияПоКолонкам"); @@ -699,8 +727,6 @@ ЗначениеВРеквизитФормы(ИнформацияПоКолонкамТаблица, "ИнформацияПоКолонкам"); ИзменитьБланкПоИнформацииПоКолонкам(); - - КонецПроцедуры &НаСервере @@ -742,13 +768,18 @@ &НаСервере Процедура ВыполнитьШагСопоставлениеЗагружаемыхДанныхНаСервере(ФоновоеЗадание = Ложь) + ЗагрузкаДанныхИзФайла.ДобавитьСтатистическуюИнформацию(?(ВариантЗагрузки = 0, + "ВариантЗагрузки.ЗаполнениеТаблицы", "ВариантЗагрузки.ИзВнешнегоФайла")); + ТаблицаСопоставления = РеквизитФормыВЗначение("ТаблицаСопоставленияДанных"); + ТаблицаИнформацияПоКолонкам = РеквизитФормыВЗначение("ИнформацияПоКолонкам"); Если ТипЗагрузки = "ТабличнаяЧасть" Тогда АдресЗагруженныхДанных = ""; АдресКопииТабличнойЧасти = ""; СписокНеоднозначностей = СоздатьТаблицуСоСпискомНеоднозначностей(); - Обработки.ЗагрузкаДанныхИзФайла.ВыгрузитьДанныеДляТЧ(ШаблонСДанными, ИнформацияПоКолонкам, АдресЗагруженныхДанных); + Обработки.ЗагрузкаДанныхИзФайла.ТабличныйДокументВТаблицуЗначений(ШаблонСДанными, ТаблицаИнформацияПоКолонкам, АдресЗагруженныхДанных); + СкопироватьСтруктуруТабличнойЧасти(АдресКопииТабличнойЧасти); МенеджерОбъекта = МенеджерОбъекта(ИмяОбъектаСопоставления); @@ -768,7 +799,6 @@ ПараметрыВызоваСервера = Новый Структура(); ПараметрыВызоваСервера.Вставить("ШаблонСДанными", ШаблонСДанными); ПараметрыВызоваСервера.Вставить("ТаблицаСопоставления", ТаблицаСопоставления); - ТаблицаИнформацияПоКолонкам = РеквизитФормыВЗначение("ИнформацияПоКолонкам"); ПараметрыВызоваСервера.Вставить("ИнформацияПоКолонкам", ТаблицаИнформацияПоКолонкам); @@ -820,8 +850,8 @@ ПодтверждениеЗакрытияФормы = Ложь; СписокНезаполненныхКолонок = НезаполненныеОбязательныеКолонки(); - Если СписокНезаполненныхКолонок.Количество() > 0 Тогда - Если СписокНезаполненныхКолонок.Количество() =1 Тогда + Если СписокНезаполненныхКолонок.Количество() > 0 Тогда + Если СписокНезаполненныхКолонок.Количество() =1 Тогда ТекстПроКолонки = НСтр("ru = 'Обязательная колонка""'") + " " + СписокНезаполненныхКолонок[0] + НСтр("ru = '"" содержит незаполненные строки, эти строки будут пропущены при загрузке'"); Иначе @@ -869,34 +899,53 @@ КонецПроцедуры +&НаКлиенте +Процедура ПерейтиКСтранице(ОтображаемаяСтраница) + + Элементы.Назад.Доступность = Истина; + Элементы.Далее.Доступность = Истина; + Элементы.СтраницыПомощника.ТекущаяСтраница = ОтображаемаяСтраница; +КонецПроцедуры + #Область ДлительныеОперации &НаКлиенте Процедура ФоновоеЗаданиеЗагрузкаФайлаНаКлиенте() Результат = ФоновоеЗаданиеЗагрузкаФайлаПолучитьРезультат(); Если Результат.ФоновоеЗаданиеВыполнено Тогда - Если ФормаДлительнойОперации.Открыта() + ШаблонСДанными = ПолучитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища); + Если ФормаДлительнойОперации.Открыта() И ФормаДлительнойОперации.ИдентификаторЗадания = ФоновоеЗаданиеИдентификатор Тогда ДлительныеОперацииКлиент.ЗакрытьФормуДлительнойОперации(ФормаДлительнойОперации); КонецЕсли; - ШаблонСДанными = ПолучитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища); - Элементы.ШаблонСДанными.Видимость = Истина; + ПереходКСледующемуШагуЗагрузкиДанных(); + ИначеЕсли Результат.ЕстьОшибки Тогда + Если ФормаДлительнойОперации.Открыта() + И ФормаДлительнойОперации.ИдентификаторЗадания = ФоновоеЗаданиеИдентификатор Тогда + ДлительныеОперацииКлиент.ЗакрытьФормуДлительнойОперации(ФормаДлительнойОперации); + КонецЕсли; + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Результат.ТекстОшибки); Иначе ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчика); ПодключитьОбработчикОжидания("ФоновоеЗаданиеЗагрузкаФайлаНаКлиенте", ПараметрыОбработчика.ТекущийИнтервал, Истина); - КонецЕсли; + КонецПроцедуры &НаКлиенте Процедура ФоновоеЗаданиеСопоставлениеНаКлиенте() + Результат = ФоновоеЗаданиеСопоставлениеПолучитьРезультат(); + Если Результат.ФоновоеЗаданиеВыполнено Тогда Если ВсеДанныеСопоставлены() И ТипЗагрузки = "ВставкаИзБуфераОбмена" Тогда ЗакрытьФормуИВернутьМассивСсылок(); Иначе ВыполнитьШагСопоставлениеЗагружаемыхДанныхКлиент(); КонецЕсли; + ИначеЕсли Результат.ЕстьОшибки Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Результат.ТекстОшибки); + ПерейтиКСтранице(Элементы.ЗаполнениеТаблицыДанными); Иначе ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчика); ПодключитьОбработчикОжидания("ФоновоеЗаданиеСопоставлениеНаКлиенте", ПараметрыОбработчика.ТекущийИнтервал, Истина); @@ -919,7 +968,7 @@ ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчика); ПодключитьОбработчикОжидания("ФоновоеЗаданиеЗаписьНаКлиенте", 1, Истина); ПараметрыОбработчика.МаксимальныйИнтервал = 5; - Иначе + Иначе ФоновоеЗаданиеОтчетНаКлиенте(Ложь); КонецЕсли; КонецПроцедуры @@ -930,6 +979,9 @@ Если Результат.ФоновоеЗаданиеВыполнено Тогда ЗаполнитьТаблицуСопоставленияИзВременногоХранилища(); ФоновоеЗаданиеОтчетНаКлиенте(Ложь); + ИначеЕсли Результат.ЕстьОшибки Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Результат.ТекстОшибки); + ПерейтиКСтранице(Элементы.СопоставлениеЗагружаемыхДанных); Иначе ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчика); ПодключитьОбработчикОжидания("ФоновоеЗаданиеЗаписьНаКлиенте", ПараметрыОбработчика.ТекущийИнтервал, Истина); @@ -938,9 +990,19 @@ &НаСервере Функция ФоновоеЗаданиеЗаписьПолучитьРезультат() - Результат = Новый Структура; - Результат.Вставить("ФоновоеЗаданиеВыполнено", Ложь); - Результат.ФоновоеЗаданиеВыполнено = ДлительныеОперации.ЗаданиеВыполнено(ФоновоеЗаданиеИдентификатор); + Результат = Новый Структура("ФоновоеЗаданиеВыполнено, ЕстьОшибки, ТекстОшибки", Ложь, Ложь); + Попытка + Результат.ФоновоеЗаданиеВыполнено = ДлительныеОперации.ЗаданиеВыполнено(ФоновоеЗаданиеИдентификатор); + Исключение + Результат.ЕстьОшибки = Истина; + ТекстСообщенияОбОшибке = НСтр("ru = 'Не удалось произвести запись данных. + |Возможная причина: Загружаемые данные некорректные. + |Техническая информация: %1'"); + Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщенияОбОшибке, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииЗагрузкаДанныхИзФайла(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + Если НЕ Результат.ФоновоеЗаданиеВыполнено Тогда ФоновоеЗаданиеПрочитатьПромежуточныйРезультат(Результат); КонецЕсли; @@ -1002,6 +1064,9 @@ Результат = ПолучитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища); ПоказатьОтчет(Результат); ПодтверждениеЗакрытияФормы = Истина; + ИначеЕсли РезультатВыполнения.ЕстьОшибки Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Результат.ТекстОшибки); + ПерейтиКСтранице(Элементы.СопоставлениеЗагружаемыхДанных); Иначе ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчика); ПодключитьОбработчикОжидания("ФоновоеЗаданиеСозданиеОтчетаНаКлиенте", ПараметрыОбработчика.ТекущийИнтервал, Истина); @@ -1011,17 +1076,37 @@ &НаСервере Функция ФоновоеЗаданиеЗагрузкаФайлаПолучитьРезультат() - Результат = Новый Структура; - Результат.Вставить("ФоновоеЗаданиеВыполнено", Ложь); - Результат.ФоновоеЗаданиеВыполнено = ДлительныеОперации.ЗаданиеВыполнено(ФоновоеЗаданиеИдентификатор); + Результат = Новый Структура("ФоновоеЗаданиеВыполнено, ЕстьОшибки, ТекстОшибки", Ложь, Ложь); + Попытка + Результат.ФоновоеЗаданиеВыполнено = ДлительныеОперации.ЗаданиеВыполнено(ФоновоеЗаданиеИдентификатор); + Исключение + Результат.ЕстьОшибки = Истина; + ТекстСообщенияОбОшибке = НСтр("ru = 'Не удалось произвести загрузку данных. + |Возможная причина: Загружаемые данные некорректные. + |Техническая информация: %1'"); + Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщенияОбОшибке, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииЗагрузкаДанныхИзФайла(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + Возврат Результат; КонецФункции &НаСервере Функция ФоновоеЗаданиеСопоставлениеПолучитьРезультат() - Результат = Новый Структура; - Результат.Вставить("ФоновоеЗаданиеВыполнено", Ложь); - Результат.ФоновоеЗаданиеВыполнено = ДлительныеОперации.ЗаданиеВыполнено(ФоновоеЗаданиеИдентификатор); + Результат = Новый Структура("ФоновоеЗаданиеВыполнено, ЕстьОшибки, ТекстОшибки", Ложь, Ложь); + Попытка + Результат.ФоновоеЗаданиеВыполнено = ДлительныеОперации.ЗаданиеВыполнено(ФоновоеЗаданиеИдентификатор); + Исключение + Результат.ЕстьОшибки = Истина; + ТекстСообщенияОбОшибке = НСтр("ru = 'Не удалось произвести сопоставление данных. + |Возможная причина: Загружаемые данные некорректные. + |Техническая информация: %1'"); + Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщенияОбОшибке, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииЗагрузкаДанныхИзФайла(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + Если Результат.ФоновоеЗаданиеВыполнено Тогда ВыполнитьШагСопоставлениеЗагружаемыхДанныхПослеСопоставленияНаСервере(); Иначе @@ -1032,13 +1117,26 @@ &НаСервере Функция ФоновоеЗаданиеОтчетПолучитьРезультат() - Результат = Новый Структура; - Результат.Вставить("ФоновоеЗаданиеВыполнено", Ложь); - Результат.ФоновоеЗаданиеВыполнено = ДлительныеОперации.ЗаданиеВыполнено(ФоновоеЗаданиеИдентификатор); + + Результат = Новый Структура("ФоновоеЗаданиеВыполнено, ЕстьОшибки, ТекстОшибки", Ложь, Ложь); + Попытка + Результат.ФоновоеЗаданиеВыполнено = ДлительныеОперации.ЗаданиеВыполнено(ФоновоеЗаданиеИдентификатор); + Исключение + Результат.ЕстьОшибки = Истина; + ТекстСообщенияОбОшибке = НСтр("ru = 'Не удалось сформировать отчет. + |Возможная причина: Загружаемые данные некорректные. + |Техническая информация: %1'"); + Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщенияОбОшибке, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииЗагрузкаДанныхИзФайла(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + Если НЕ Результат.ФоновоеЗаданиеВыполнено Тогда ФоновоеЗаданиеПрочитатьПромежуточныйРезультат(Результат); КонецЕсли; + Возврат Результат; + КонецФункции &НаСервере @@ -1063,9 +1161,12 @@ Статистика.Всего, Статистика.Сопоставленных); Если Статистика.Неоднозначных > 0 И Статистика.НеНайдено > 0 Тогда - ТекстНеНайдено = НСтр("ru = '11 строк будут пропущены:'") + Символы.ПС + " - " + НСтр("ru = 'Нет данных в программе: %1'") + ТекстНеНайдено = НСтр("ru = '%3 строк будут пропущены:'") + Символы.ПС + " - " + НСтр("ru = 'Нет данных в программе: %1'") + Символы.ПС + " - " +НСтр("ru = 'Несколько вариантов для вставки: %2'"); - ТекстНеНайдено = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстНеНайдено, Статистика.НеНайдено, Статистика.Неоднозначных); + ТекстНеНайдено = НСтр("ru = 'Будет пропущено строк: %3 + | - Нет данных в программе: %1 + | - Несколько вариантов для вставки: %2'"); + ТекстНеНайдено = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстНеНайдено, Статистика.НеНайдено, Статистика.Неоднозначных, Статистика.Несопоставленных); ИначеЕсли Статистика.Неоднозначных > 0 Тогда ТекстНеНайдено = НСтр("ru = 'Строки, для которых в программе имеется несколько вариантов, будут пропущены: %1'"); ТекстНеНайдено = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстНеНайдено, Статистика.Неоднозначных); @@ -1102,6 +1203,7 @@ Если ТипЗагрузки = "УниверсальнаяЗагрузка" Тогда УстановитьОформлениеДляСтраницыСопоставления(Истина, Элементы.ПояснениеДляУниверсальнойЗагрузки, Истина, НСтр("ru = 'Загрузить данные >'")); + Элементы.ПояснениеДляУниверсальнойЗагрузки.Видимость = Ложь; ИначеЕсли ТипЗагрузки = "ТабличнаяЧасть" Тогда Отбор = Новый Структура("РезультатСопоставленияСтроки", "НеСопоставлен"); Если ТаблицаСопоставленияДанных.НайтиСтроки(Отбор).Количество() = 0 Тогда @@ -1110,6 +1212,8 @@ КонецЕсли; УстановитьОформлениеДляСтраницыСопоставления(Ложь, Элементы.ПояснениеДляТабличнойЧасти, Истина, НСтр("ru = 'Загрузить данные'")); + УстановитьОформлениеДляПолейСНеоднозначностью(Новый Структура("РезультатСопоставленияСтроки", "Неоднозначность")); + ИначеЕсли ТипЗагрузки = "ВнешняяЗагрузка" Тогда УстановитьОформлениеДляСтраницыСопоставления(Ложь, Элементы.ПояснениеДляПрикладнойЗагрузки, Ложь, НСтр("ru = 'Загрузить данные >'")); Иначе @@ -1123,7 +1227,7 @@ КонецПроцедуры &НаКлиенте -Процедура УстановитьОформлениеДляСтраницыСопоставления(ВидимостьКнопкиСопоставление, ЭлементДляПоясняющегоТекста, ВидимостьКнопкиРазрешитьНеоднозначность, ТекстКнопкиДалее) +Процедура УстановитьОформлениеДляСтраницыСопоставления(ВидимостьКнопкиСопоставление, ЭлементДляПоясняющегоТекста, ВидимостьКнопкиУстранитьНеоднозначность, ТекстКнопкиДалее) Элементы.СписокКолонокСопоставления.Видимость = ВидимостьКнопкиСопоставление; Элементы.Назад.Видимость = Истина; @@ -1142,7 +1246,7 @@ Элементы.ПояснениеДляПрикладнойЗагрузки.Видимость = Истина; КонецЕсли; - Элементы.РазрешитьНеоднозначность.Видимость = ВидимостьКнопкиРазрешитьНеоднозначность; + Элементы.УстранитьНеоднозначность.Видимость = ВидимостьКнопкиУстранитьНеоднозначность; Элементы.Далее.Заголовок = ТекстКнопкиДалее; КонецПроцедуры @@ -1152,9 +1256,9 @@ Строка = ТаблицаСопоставленияДанных.НайтиПоИдентификатору(ВыбраннаяСтрока); Если ТипЗагрузки = "ТабличнаяЧасть" Тогда - Если Строка.РезультатСопоставленияСтроки = "НеСопоставлен" И СтрДлина(Строка.ОписаниеОшибки) > 0 Тогда - Если СтрДлина(ПолеИмя) > 3 И СтрНачинаетсяС(ПолеИмя, "ТЧ_") Тогда - Имя = Сред(ПолеИмя, 4); + Если Строка.РезультатСопоставленияСтроки = "Неоднозначность" И СтрДлина(Строка.ОписаниеОшибки) > 0 Тогда + Если СтрДлина(ПолеИмя) > 3 И СтрНачинаетсяС(ПолеИмя, "ТаблицаСопоставленияДанных_ТЧ_") Тогда + Имя = Сред(ПолеИмя, 31); Если СтрНайти(Строка.ОписаниеОшибки, Имя) Тогда СтандартнаяОбработка = Ложь; СтрокаИзТаблицы = Новый Массив; @@ -1166,7 +1270,7 @@ МассивКолонок.Добавить(Строка["ФЛ_" + Колонка.ИмяКолонки]); МассивКолонок.Добавить(Колонка.ТипКолонки); СтрокаИзТаблицы.Добавить(МассивКолонок); - Если Имя = Колонка.Ассоциация Тогда + Если Имя = Колонка.Родитель Тогда ЗначенияЗагружаемыхКолонок.Вставить(Колонка.ИмяКолонки, Строка["ФЛ_" + Колонка.ИмяКолонки]); КонецЕсли; КонецЦикла; @@ -1309,6 +1413,34 @@ /////////////////////////////////////// СЕРВЕР ////////////////////////////////////// +&НаСервере +Процедура ОпределитьДинамическийМакет(ТаблицаИнформацияПоКолонкам, КолонкиМакета) + + ТаблицаИнформацияПоКолонкам = РеквизитФормыВЗначение("ИнформацияПоКолонкам"); + ТаблицаИнформацияПоКолонкам.Очистить(); + Индекс = 1; + Для каждого Колонка Из КолонкиМакета Цикл + Строка = ТаблицаИнформацияПоКолонкам.Добавить(); + Строка.ИмяКолонки = Колонка.Имя; + Строка.Ширина = 20; + Если Колонка.Позиция = 0 Тогда + Строка.Позиция = Индекс; + Индекс = Индекс + 1; + Иначе + Строка.Позиция = Колонка.Позиция; + Индекс = Колонка.Позиция + 1; + КонецЕсли; + ЗаполнитьЗначенияСвойств(Строка, Колонка); + Строка.Видимость = Истина; + Строка.ПредставлениеКолонки = Колонка.Заголовок; + Строка.ТипКолонки = Колонка.Тип; + Если ПустаяСтрока(Строка.Группа) Тогда + Строка.Группа = Колонка.Заголовок; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + &НаСервере Процедура ОчиститьТаблицу() @@ -1333,7 +1465,7 @@ КонецПроцедуры &НаСервере -Процедура УстановитьОформлениеДанных() +Процедура УстановитьОформлениеДанных(СписокКолонок = Неопределено) Если ТипЗагрузки = "ВставкаИзБуфераОбмена" Тогда ТекстОбъектНеНайден = НСтр("ru='<Не найден>'"); @@ -1359,17 +1491,35 @@ ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветОбъектНеНайден); ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", ТекстОбъектНеНайден); - ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); - ПолеОформления = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); - ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ОбъектСопоставления"); - ПолеОформления.Использование = Истина; - ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаСопоставленияДанных.РезультатСопоставленияСтроки"); - ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ЭлементОтбора.ПравоеЗначение = "Неоднозначность"; - ЭлементОтбора.Использование = Истина; - ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветНеоднозначность); - ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru='<неоднозначность>'")); + Если ЗначениеЗаполнено(СписокКолонок) Тогда + Для каждого ИмяКолонки Из СписокКолонок Цикл + ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); + ПолеОформления = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); + ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ТаблицаСопоставленияДанных_ТЧ_" + ИмяКолонки); + ПолеОформления.Использование = Истина; + ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаСопоставленияДанных.РезультатСопоставленияСтроки"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.ПравоеЗначение = "Неоднозначность"; + ЭлементОтбора.Использование = Истина; + ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветНеоднозначность); + ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); + ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru='<неоднозначность>'")); + КонецЦикла; + Иначе + ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); + ПолеОформления = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); + ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ОбъектСопоставления"); + ПолеОформления.Использование = Истина; + ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаСопоставленияДанных.РезультатСопоставленияСтроки"); + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбора.ПравоеЗначение = "Неоднозначность"; + ЭлементОтбора.Использование = Истина; + ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветНеоднозначность); + ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); + ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru='<неоднозначность>'")); + КонецЕсли; КонецПроцедуры @@ -1469,7 +1619,7 @@ Условия = УсловияПоВыбраннымКолонкам(); - Если Не ЗначениеЗаполнено(Условия.УсловиеОбъединения ) Тогда + Если Не ЗначениеЗаполнено(Условия.УсловиеОбъединения) Тогда Возврат; КонецЕсли; @@ -1479,6 +1629,7 @@ СписокКолонок = ""; Разделитель = ""; + Для каждого Колонка Из ТаблицаСопоставления.Колонки Цикл Если Колонка.Имя <> "СписокНеоднозначностей" И Колонка.Имя <> "РезультатСопоставленияСтроки" И Колонка.Имя <> "ОписаниеОшибки" Тогда СписокКолонок = СписокКолонок + Разделитель + Колонка.Имя; @@ -1534,6 +1685,16 @@ КонецЕсли; КонецЦикла; + СписокКолонокСопоставления = ""; + Разделитель = ""; + Для каждого Колонка Из СопоставитьПоКолонке Цикл + Если Колонка.Пометка Тогда + СписокКолонокСопоставления = СписокКолонокСопоставления + Разделитель + Колонка.Представление; + Разделитель = ", "; + КонецЕсли; + КонецЦикла; + ЗагрузкаДанныхИзФайла.ДобавитьСтатистическуюИнформацию("СопоставлениеКолонок", КоличествоСопоставленных, СписокКолонокСопоставления); + ЗначениеВРеквизитФормы(ТаблицаСопоставления, "ТаблицаСопоставленияДанных"); КонецПроцедуры @@ -1548,10 +1709,10 @@ КонецЕсли; Отбор = Новый Структура("ОбязательнаДляЗаполнения", Истина); - ОтобранныеКолонкиОбязательнаДляЗаполненияТаблицы= ИнформацияПоКолонкам.НайтиСтроки(Отбор); + ОтобранныеКолонкиОбязательнаДляЗаполненияТаблицы = ИнформацияПоКолонкам.НайтиСтроки(Отбор); КолонкиОбязательныеДляЗаполнения = Новый Соответствие; Для каждого КолонкаТаблицы Из ОтобранныеКолонкиОбязательнаДляЗаполненияТаблицы Цикл - КолонкиОбязательныеДляЗаполнения.Вставить(КолонкаТаблицы.Ассоциация, Истина); + КолонкиОбязательныеДляЗаполнения.Вставить(КолонкаТаблицы.Родитель, Истина); КонецЦикла; ТаблицаСопоставленияДанных.Очистить(); @@ -1584,7 +1745,7 @@ Неоднозначности = СписокНеоднозначностей.НайтиСтроки(Отбор); Если Неоднозначности.Количество() > 0 Тогда - НоваяСтрока["РезультатСопоставленияСтроки"] = "НеСопоставлен"; + НоваяСтрока["РезультатСопоставленияСтроки"] = "Неоднозначность"; Для каждого Неоднозначность Из Неоднозначности Цикл НоваяСтрока["ОписаниеОшибки"] = НоваяСтрока["ОписаниеОшибки"] + Неоднозначность.Колонка+ ";"; ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); @@ -1597,24 +1758,20 @@ ЭлементОтбора.ПравоеЗначение = Неоднозначность.Колонка; ЭлементОтбора.Использование = Истина; ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПоясняющийОшибкуТекст); + ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru='<неоднозначность>'")); КонецЦикла; КонецЕсли; КонецЦикла; - Для каждого Строка Из ЗагружаемыеДанные Цикл + Для каждого Строка Из ЗагружаемыеДанные Цикл Отбор = Новый Структура("Идентификатор", Строка.Идентификатор); Строки = ТаблицаСопоставленияДанных.НайтиСтроки(Отбор); Если Строки.Количество() > 0 Тогда НоваяСтрока = Строки[0]; Для каждого Колонка Из ЗагружаемыеДанные.Колонки Цикл - Если Колонка.Имя <> "Идентификатор" И Колонка.Имя <> "РезультатСопоставленияСтроки" И Колонка.Имя <> "ОписаниеОшибки" - И Колонка.Имя <> "Количество" И Колонка.Имя <> "Цена" Тогда + Если Колонка.Имя <> "Идентификатор" И Колонка.Имя <> "РезультатСопоставленияСтроки" И Колонка.Имя <> "ОписаниеОшибки" Тогда НоваяСтрока["ФЛ_" + Колонка.Имя] = Строка[Колонка.Имя]; - Если КолонкиТабличнойЧасти.Получить(Колонка.Имя) <> Неопределено И ЗначениеЗаполнено(Строка[Колонка.Имя]) - И НЕ ЗначениеЗаполнено(НоваяСтрока["ТЧ_" + Колонка.Имя]) Тогда - НоваяСтрока["РезультатСопоставленияСтроки"] = "НеСопоставлен"; - КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; @@ -1671,7 +1828,11 @@ &НаСервереБезКонтекста Функция ФормаСписка(ИмяОбъектаСопоставления) ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ИмяОбъектаСопоставления); - Возврат ОбъектМетаданных.ОсновнаяФормаСписка.ПолноеИмя(); + Если ОбъектМетаданных.ОсновнаяФормаСписка <> Неопределено Тогда + Возврат ОбъектМетаданных.ОсновнаяФормаСписка.ПолноеИмя(); + Иначе + Возврат ОбъектМетаданных.ПолноеИмя() + ".ФормаСписка"; + КонецЕсли; КонецФункции &НаСервере @@ -1736,6 +1897,12 @@ МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); ВнешнийОбъект = МодульДополнительныеОтчетыИОбработки.ПолучитьОбъектВнешнейОбработки(ВнешняяОбработкаСсылка); ВнешнийОбъект.СопоставитьЗагружаемыеДанныеИзФайла(ИдентификаторКоманды, ТаблицаСопоставленияДанныхСервер); + + Для каждого Строка Из ТаблицаСопоставленияДанныхСервер Цикл + Если ЗначениеЗаполнено(Строка.ОбъектСопоставления) Тогда + Строка.РезультатСопоставленияСтроки = "СтрокаСопоставлена"; + КонецЕсли; + КонецЦикла; КонецЕсли; КонецПроцедуры @@ -1779,13 +1946,21 @@ &НаСервере Процедура СкопироватьСтруктуруТабличнойЧасти(АдресТабличнойЧасти) - ТабличнаяЧасть = Метаданные.НайтиПоПолномуИмени(ИмяОбъектаСопоставления); - ДанныеДляТабличнойЧасти = Новый ТаблицаЗначений; ДанныеДляТабличнойЧасти.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Число"), "Идентификатор"); - Для каждого РеквизитТабличнойЧасти Из ТабличнаяЧасть.Реквизиты Цикл - ДанныеДляТабличнойЧасти.Колонки.Добавить(РеквизитТабличнойЧасти.Имя, РеквизитТабличнойЧасти.Тип, РеквизитТабличнойЧасти.Представление()); - КонецЦикла; + + Если ЗначениеЗаполнено(ИмяОбъектаСопоставления) Тогда + ТабличнаяЧасть = Метаданные.НайтиПоПолномуИмени(ИмяОбъектаСопоставления); + + Для каждого РеквизитТабличнойЧасти Из ТабличнаяЧасть.Реквизиты Цикл + ДанныеДляТабличнойЧасти.Колонки.Добавить(РеквизитТабличнойЧасти.Имя, РеквизитТабличнойЧасти.Тип, РеквизитТабличнойЧасти.Представление()); + КонецЦикла; + Иначе + Для каждого Колонка Из ИнформацияПоКолонкам Цикл + ДанныеДляТабличнойЧасти.Колонки.Добавить(Колонка.ИмяКолонки, Колонка.ТипКолонки, Колонка.ПредставлениеКолонки); + КонецЦикла; + КонецЕсли; + АдресТабличнойЧасти = ПоместитьВоВременноеХранилище(ДанныеДляТабличнойЧасти); @@ -1841,8 +2016,12 @@ Процедура ПоказатьИнформационнуюСтрокуПроОбязательныеКолонки() Если Элементы.СтраницыЗаполненияДанных.ТекущаяСтраница = Элементы.СтраницаВариантЗагрузкаИзФайла Тогда - ТекстПодсказки = НСтр("ru = 'Для загрузки данных необходимо заполнить таблицу сохранив бланк в файл для заполнения в другой программе.'") + Символы.ПС; - ТекстПодсказки = ТекстПодсказки + НСтр("ru = 'Затем загрузить заполненную таблицу в одном из форматов: Книга Microsoft Excel (.xlsx), текст с разделителями (.csv) или табличный документ (.mxl).'") + Символы.ПС; + ТекстПодсказки = НСтр("ru = 'Для загрузки данных необходимо, сохранить бланк в файл для заполнения в другой программе. + |Затем загрузить заполненную таблицу в одном из форматов: + |• Книги Microsoft Excel 97 (.xls) и Excel 2007 (.xlsx) + |• Электронные таблицы LibreOffice Calc (.ods) + |• Текст с разделителями (.csv) + |• Табличный документ (.mxl)'") + Символы.ПС; Иначе ТекстПодсказки = НСтр("ru = 'Для заполнения таблицы необходимо скопировать данные в таблицу из внешнего файла через буфер обмена.'") + Символы.ПС; КонецЕсли; @@ -1863,9 +2042,9 @@ СписокКолонок = Сред(СписокКолонок, 3); Если ОбязательныеКолонки.Количество() = 1 Тогда - ТекстПодсказки = ТекстПодсказки + НСтр("ru = 'Колонка обязательная для заполнения:'") + " " + СписокКолонок; + ТекстПодсказки = ТекстПодсказки + НСтр("ru = 'Колонка, обязательная для заполнения:'") + " " + СписокКолонок; Иначе - ТекстПодсказки = ТекстПодсказки + НСтр("ru = 'Колонки обязательные для заполнения:'") + " " + СписокКолонок; + ТекстПодсказки = ТекстПодсказки + НСтр("ru = 'Колонки, обязательные для заполнения:'") + " " + СписокКолонок; КонецЕсли; КонецЕсли; @@ -2012,7 +2191,7 @@ ТипЧисло = Новый ОписаниеТипов("Число"); ТипСЗ = Новый ОписаниеТипов("СписокЗначений"); - ВременнаяТЗ = РеквизитФормыВЗначение("ТаблицаСопоставленияДанных"); + ВременнаяТЗ = РеквизитФормыВЗначение("ТаблицаСопоставленияДанных"); ВременнаяТЗ.Колонки.Очистить(); Синоним = ОбъектМетаданных.Синоним; @@ -2022,8 +2201,8 @@ Для каждого Колонка Из ИнформацияПоКолонкам Цикл Если ВременнаяТЗ.Колонки.Найти(Колонка.ИмяКолонки) = Неопределено Тогда - ПредставлениеКолонки = ?(ЗначениеЗаполнено(Колонка.Синоним), Колонка.Синоним, Колонка.ПредставлениеКолонки); - ВременнаяТЗ.Колонки.Добавить(Колонка.ИмяКолонки, Колонка.ТипКолонки,ПредставлениеКолонки); + ПредставлениеКолонки = Колонка.ПредставлениеКолонки; + ВременнаяТЗ.Колонки.Добавить(Колонка.ИмяКолонки, Колонка.ТипКолонки, ПредставлениеКолонки); МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.ИмяКолонки, Колонка.ТипКолонки, "ТаблицаСопоставленияДанных", ПредставлениеКолонки)); КонецЕсли; КонецЦикла; @@ -2104,7 +2283,7 @@ РеквизитыСозданы = Истина; ГруппаКолонокЗагружаемыеДанные = Элементы.Добавить("ЗагружаемыеДанные", Тип("ГруппаФормы"), Элементы.ТаблицаСопоставленияДанных); - ГруппаКолонокЗагружаемыеДанные.Группировка = ГруппировкаКолонок.Горизонтальная; + ГруппаКолонокЗагружаемыеДанные.Группировка = ГруппировкаКолонок.Горизонтальная; Для Каждого Колонка Из ВременнаяТЗ.Колонки Цикл @@ -2166,12 +2345,12 @@ НовыйЭлемент.СвязиПараметровВыбора = НовыеСвязи; КонецЕсли; - Отбор = Новый Структура("Ассоциация", Сред(Колонка.Имя, 4)); - КолонкиАссоциации = ИнформацияПоКолонкам.НайтиСтроки(Отбор); + Отбор = Новый Структура("Родитель", Сред(Колонка.Имя, 4)); + КолонкиГруппировки = ИнформацияПоКолонкам.НайтиСтроки(Отбор); - Если КолонкиАссоциации.Количество() = 1 Тогда + Если КолонкиГруппировки.Количество() = 1 Тогда - КолонкаУровень2 = ВременнаяТЗ.Колонки.Найти("ФЛ_" + КолонкиАссоциации[0].ИмяКолонки); + КолонкаУровень2 = ВременнаяТЗ.Колонки.Найти("ФЛ_" + КолонкиГруппировки[0].ИмяКолонки); Если КолонкаУровень2 <> Неопределено Тогда НовыйЭлемент = Элементы.Добавить(КолонкаУровень2.Имя, Тип("ПолеФормы"), Родитель); НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода; @@ -2186,14 +2365,14 @@ НовыйЭлемент.ЦветТекста = ЦветаСтиля.ПоясняющийТекст; КонецЕсли; - ИначеЕсли КолонкиАссоциации.Количество() > 1 Тогда + ИначеЕсли КолонкиГруппировки.Количество() > 1 Тогда ГруппаКолонокЗагружаемыеДанныеТЧ = Элементы.Добавить("ЗагружаемыеДанные_ФЛ_" + Колонка.Имя , Тип("ГруппаФормы"), Родитель); ГруппаКолонокЗагружаемыеДанныеТЧ.Группировка = ГруппировкаКолонок.ВЯчейке; Родитель = ГруппаКолонокЗагружаемыеДанныеТЧ; Префикс = НСтр("ru = 'Данные из файла:'"); - Для каждого КолонкаАссоциация Из КолонкиАссоциации Цикл - Колонка2 = ВременнаяТЗ.Колонки.Найти("ФЛ_" + КолонкаАссоциация.ИмяКолонки); + Для каждого КолонкаГруппа Из КолонкиГруппировки Цикл + Колонка2 = ВременнаяТЗ.Колонки.Найти("ФЛ_" + КолонкаГруппа.ИмяКолонки); Если Колонка2 <> Неопределено Тогда НовыйЭлемент = Элементы.Добавить(Колонка2.Имя, Тип("ПолеФормы"), Родитель); НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода; @@ -2235,7 +2414,9 @@ &НаСервере Процедура ОчисткаШаблонСДанными() - ОбластьЗаголовка = ШаблонСДанными.ПолучитьОбласть(1, 1, 1, ШаблонСДанными.ШиринаТаблицы); + НомерСтрокиСШапкойТаблицы = ?(ЗагрузкаДанныхИзФайлаКлиентСервер.КолонкиИмеютГруппировку(ИнформацияПоКолонкам), 2, 1); + + ОбластьЗаголовка = ШаблонСДанными.ПолучитьОбласть(1, 1, НомерСтрокиСШапкойТаблицы, ШаблонСДанными.ШиринаТаблицы); ШаблонСДанными.Очистить(); ШаблонСДанными.Вывести(ОбластьЗаголовка); КонецПроцедуры @@ -2252,27 +2433,60 @@ Возврат МассивСсылок; КонецФункции -#Область РаботаСФайлами +// Для внутреннего использования +// +Функция СобытиеЖурналаРегистрацииЗагрузкаДанныхИзФайла() + + Возврат НСтр("ru = 'Загрузка данных из файла'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + +КонецФункции + +////////////////////// Работа с файлами ////////////////////// &НаКлиенте -Процедура ПриОкончаниеПомещенияФайла(Результат, АдресВременногоХранилища, ИмяФайла, Параметр) Экспорт +Процедура ПослеВыбораФайлаДляСохранения(Результат, ДополнительныеПараметры) Экспорт - Если Результат = Истина Тогда - Расширение = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки( - ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ИмяФайла)); - Если Расширение = "csv" ИЛИ Расширение = "xlsx" ИЛИ Расширение = "mxl" Тогда - ФоновоеЗадание = Ложь; - ЗагрузитьФайлСДаннымиВТабличныйДокументНаСервере(АдресВременногоХранилища, Расширение, ФоновоеЗадание); - Если ФоновоеЗадание Тогда - ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчика); - ПодключитьОбработчикОжидания("ФоновоеЗаданиеЗагрузкаФайлаНаКлиенте", 1, Истина); - ПараметрыОбработчика.МаксимальныйИнтервал = 5; - ФормаДлительнойОперации = ДлительныеОперацииКлиент.ОткрытьФормуДлительнойОперации(ЭтотОбъект, ФоновоеЗаданиеИдентификатор); + Если Результат <> Неопределено Тогда + ПутьКФайлу = Результат[0]; + ВыбранныйФайл = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ПутьКФайлу); + РасширениеФайла = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(ВыбранныйФайл.Расширение); + + Если ЗначениеЗаполнено(ВыбранныйФайл.Имя) Тогда + Если РасширениеФайла = "csv" Тогда + СохранитьТаблицуВCSVФайл(ПутьКФайлу); + ИначеЕсли РасширениеФайла = "xlsx" Тогда + ШаблонСДанными.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX); + ИначеЕсли РасширениеФайла = "mxl" Тогда + ШаблонСДанными.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.MXL); + ИначеЕсли РасширениеФайла = "xls" Тогда + ШаблонСДанными.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLS); + ИначеЕсли РасширениеФайла = "ods" Тогда + ШаблонСДанными.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.ODS); Иначе - ПереходКСледующемуШагуЗагрузкиДанных(); + ПоказатьПредупреждение(, НСтр("ru = 'Шаблон файла не был сохранен.'")); КонецЕсли; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьДанныеИзФайлаВШаблон(Результат, ДополнительныеПараметры) Экспорт + + Если Результат <> Неопределено Тогда + ИмяФайла = Результат[0].Имя; + АдресВременногоХранилища = Результат[0].Хранение; + + Расширение = ОбщегоНазначенияКлиентСервер.РасширениеБезТочки( + ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ИмяФайла)); + ФоновоеЗадание = Ложь; + ЗагрузитьФайлСДаннымиВТабличныйДокументНаСервере(АдресВременногоХранилища, Расширение, ФоновоеЗадание); + Если ФоновоеЗадание Тогда + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчика); + ПодключитьОбработчикОжидания("ФоновоеЗаданиеЗагрузкаФайлаНаКлиенте", 1, Истина); + ПараметрыОбработчика.МаксимальныйИнтервал = 5; + ФормаДлительнойОперации = ДлительныеОперацииКлиент.ОткрытьФормуДлительнойОперации(ЭтотОбъект, ФоновоеЗаданиеИдентификатор); Иначе - ПоказатьПредупреждение(,НСтр("ru ='Не получилось загрузить данные из этого файла. Убедитесь в корректности данных в файле.'")); + ПереходКСледующемуШагуЗагрузкиДанных(); КонецЕсли; КонецЕсли; @@ -2293,14 +2507,20 @@ ИмяФайла = ПолучитьИмяВременногоФайла(РасширениеФайла); Если РасширениеФайла = "csv" Тогда СохранитьТаблицуВCSVФайл(ИмяФайла); - ИначеЕсли РасширениеФайла = "xlsx" Тогда - ШаблонСДанными.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.xlsx); + ИначеЕсли РасширениеФайла = "xlsx" Тогда + ШаблонСДанными.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX); + ИначеЕсли РасширениеФайла = "xls" Тогда + ШаблонСДанными.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLS); + ИначеЕсли РасширениеФайла = "ods" Тогда + ШаблонСДанными.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.ODS); Иначе - ШаблонСДанными.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.mxl); + ШаблонСДанными.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.MXL); КонецЕсли; ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайла); АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, АдресВоВременномХранилище); + УдалитьФайлы(ИмяФайла); + КонецПроцедуры &НаСервереБезКонтекста @@ -2329,25 +2549,6 @@ Возврат ИмяФайла; КонецФункции -&НаКлиенте -Процедура ПолучитьПутьКФайлуНачалоВыбора(РежимДиалога, ПутьКФайлу, ИмяФайла = "") - - ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалога); - - ДиалогВыбораФайла.Фильтр = НСтр("ru='Книга Excel 2007 (*.xlsx)|*.xlsx|Текстовый документ c разделителями (*.csv)|*.csv|Табличный документ (*.mxl)|*.mxl'"); - ДиалогВыбораФайла.Заголовок = Заголовок; - ДиалогВыбораФайла.ПредварительныйПросмотр = Ложь; - ДиалогВыбораФайла.Расширение = "xlsx"; - ДиалогВыбораФайла.ИндексФильтра = 0; - ДиалогВыбораФайла.ПолноеИмяФайла = ИмяФайла; - ДиалогВыбораФайла.ПроверятьСуществованиеФайла = Ложь; - - Если ДиалогВыбораФайла.Выбрать() Тогда - ПутьКФайлу = ДиалогВыбораФайла.ПолноеИмяФайла; - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура ПослеВопросаПроОтменитьСопоставление(Результат, Параметр) Экспорт @@ -2370,7 +2571,7 @@ ДвоичныеДанные.Записать(ИмяВременногоФайла); ОчисткаШаблонСДанными(); - + ПараметрыВызоваСервера = Новый Структура(); ПараметрыВызоваСервера.Вставить("Расширение", Расширение); ПараметрыВызоваСервера.Вставить("ШаблонСДанными", ШаблонСДанными); @@ -2379,13 +2580,14 @@ ПараметрыВызоваСервера.Вставить("ИнформацияПоКолонкам", ТаблицаИнформацияПоКолонкам); РезультатФоновогоЗадания = ДлительныеОперации.ЗапуститьВыполнениеВФоне(УникальныйИдентификатор, - "Обработки.ЗагрузкаДанныхИзФайла.ЗагрузитьФайлВТаблицу", - ПараметрыВызоваСервера, - НСтр("ru = 'Подсистема ЗагрузкаДанныхИзФайла: Выполнение серверного метода загрузка данных из файла'")); + "Обработки.ЗагрузкаДанныхИзФайла.ЗагрузитьФайлВТаблицу", + ПараметрыВызоваСервера, + НСтр("ru = 'Подсистема ЗагрузкаДанныхИзФайла: Выполнение серверного метода загрузка данных из файла'")); Если РезультатФоновогоЗадания.ЗаданиеВыполнено Тогда ФоновоеЗаданиеАдресХранилища = РезультатФоновогоЗадания.АдресХранилища; ШаблонСДанными = ПолучитьИзВременногоХранилища(ФоновоеЗаданиеАдресХранилища); + ЗагрузкаДанныхИзФайла.ДобавитьСтатистическуюИнформацию("ЗагрузкаИзВнешнегоФайла." + Расширение); Иначе ФоновоеЗадание = Истина; ФоновоеЗаданиеИдентификатор = РезультатФоновогоЗадания.ИдентификаторЗадания; @@ -2403,14 +2605,16 @@ ПараметрыОтбора = Новый Структура("ИмяКолонки", СтрокаТаблицы.ИмяКолонки); НайденнаяСтрока = ИнформацияПоКолонкам.НайтиСтроки(ПараметрыОтбора)[0]; ЗаполнитьЗначенияСвойств(НайденнаяСтрока, СтрокаТаблицы); + СохранятьНастройки = Истина; КонецЦикла; Иначе ИнформацияПоКолонкам.Очистить(); СформироватьМакетПоТипуЗагрузки(); + СохранятьНастройки = Ложь; КонецЕсли; ИнформацияПоКолонкам.Сортировать("Позиция Возр"); ОбновитьНаименованияКолонокТаблицыСопоставления(); - ИзменитьБланкПоИнформацииПоКолонкам(); + ИзменитьБланкПоИнформацииПоКолонкам(, СохранятьНастройки); КонецЕсли; КонецПроцедуры @@ -2430,14 +2634,17 @@ КонецПроцедуры &НаСервере -Процедура ИзменитьБланкПоИнформацииПоКолонкам(Бланк = Неопределено) +Процедура ИзменитьБланкПоИнформацииПоКолонкам(Бланк = Неопределено, СохранитьНастройки = Ложь) Если Бланк = Неопределено Тогда Бланк = ШаблонСДанными; КонецЕсли; ТаблицаКолонок = РеквизитФормыВЗначение("ИнформацияПоКолонкам"); - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ЗагрузкаДанныхИзФайла", ИмяОбъектаСопоставления, ТаблицаКолонок,, ИмяПользователя()); + Если СохранитьНастройки Тогда + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ЗагрузкаДанныхИзФайла", ИмяОбъектаСопоставления, ТаблицаКолонок,, ИмяПользователя()); + КонецЕсли; + Бланк.Очистить(); Шапка = Обработки.ЗагрузкаДанныхИзФайла.ШапкаБланкаДляЗаполненияПоИнформацииПоКолонкам(ТаблицаКолонок); Бланк.Вывести(Шапка); @@ -2451,8 +2658,6 @@ КонецПроцедуры -#КонецОбласти - #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыВидЗагрузкиДанных @@ -2487,8 +2692,8 @@ КолонкиОбязательнаДляЗаполнения = ИнформацияПоКолонкам.НайтиСтроки(Отбор); РезультатСопоставленияСтроки = "СтрокаСопоставлена"; Для каждого КолонкаТаблицы Из КолонкиОбязательнаДляЗаполнения Цикл - Если НЕ ЗначениеЗаполнено(Элемент.ТекущиеДанные["ТЧ_" + КолонкаТаблицы.Ассоциация]) Тогда - РезультатСопоставленияСтроки = "НеСопоставлен"; + Если НЕ ЗначениеЗаполнено(Элемент.ТекущиеДанные["ТЧ_" + КолонкаТаблицы.Родитель]) Тогда + РезультатСопоставленияСтроки = ?(ЗначениеЗаполнено(Элемент.ТекущиеДанные.ОписаниеОшибки), "Неоднозначность", "НеСопоставлен"); Прервать; КонецЕсли; КонецЦикла; @@ -2501,7 +2706,7 @@ &НаКлиенте Процедура ТаблицаСопоставленияДанныхПриАктивизацииЯчейки(Элемент) - Элементы.РазрешитьНеоднозначность.Доступность = Ложь; + Элементы.УстранитьНеоднозначность.Доступность = Ложь; Элементы.ТаблицаСопоставленияДанныхКонтекстноеМенюРазрешитьНеоднозначность.Доступность = Ложь; Если Элемент.ТекущиеДанные <> Неопределено И ЗначениеЗаполнено(Элемент.ТекущиеДанные.РезультатСопоставленияСтроки) Тогда @@ -2509,12 +2714,12 @@ Если СтрДлина(Элемент.ТекущийЭлемент.Имя) > 3 И СтрНачинаетсяС(Элемент.ТекущийЭлемент.Имя, "ТЧ_") Тогда ИмяКолонки = Сред(Элемент.ТекущийЭлемент.Имя, 4); Если СтрНайти(Элемент.ТекущиеДанные.ОписаниеОшибки, ИмяКолонки) > 0 Тогда - Элементы.РазрешитьНеоднозначность.Доступность = Истина; + Элементы.УстранитьНеоднозначность.Доступность = Истина; Элементы.ТаблицаСопоставленияДанныхКонтекстноеМенюРазрешитьНеоднозначность.Доступность = Истина; КонецЕсли; КонецЕсли; ИначеЕсли Элемент.ТекущиеДанные.РезультатСопоставленияСтроки = "Неоднозначность" Тогда - Элементы.РазрешитьНеоднозначность.Доступность = Истина; + Элементы.УстранитьНеоднозначность.Доступность = Истина; Элементы.ТаблицаСопоставленияДанныхКонтекстноеМенюРазрешитьНеоднозначность.Доступность = Истина; КонецЕсли; КонецЕсли; diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РазрешенияНеоднозначностей/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РазрешенияНеоднозначностей/Module.bsl index e7c8fc11f..ee468ab43 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РазрешенияНеоднозначностей/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РазрешенияНеоднозначностей/Module.bsl @@ -39,10 +39,10 @@ Элементы.ДекорацияЗаголовок.Видимость = Ложь; Элементы.ДекорацияЗагрузкаИзФайла.Видимость = Ложь; Элементы.ДекорацияЗаголовокПоискСсылок.Видимость = Истина; - СписокНеоднозначностей = Параметры.СписокНеоднозначностей; + СписокНеоднозначностей = Параметры.СписокНеоднозначностей.ВыгрузитьЗначения(); КолонкиСопоставления = Параметры.КолонкиСопоставления; - Иначе - СписокНеоднозначностей = Параметры.СписокНеоднозначностей; + Иначе + СписокНеоднозначностей = Параметры.СписокНеоднозначностей.ВыгрузитьЗначения(); КолонкиСопоставления = Параметры.КолонкиСопоставления; Элементы.ДекорацияЗаголовок.Видимость = Ложь; Элементы.ДекорацияЗагрузкаИзФайла.Видимость = Истина; diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РасширениеФайла/Form.form b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РасширениеФайла/Form.form index ede67aa5b..6b91400da 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РасширениеФайла/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РасширениеФайла/Form.form @@ -47,6 +47,24 @@ 0 + + + ru + Книга MS Excel 2003 (.xls) + + + 3 + + + + + ru + Табличный документ OpenDocument(.ods) + + + 4 + + ru diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РасширениеФайла/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РасширениеФайла/Module.bsl index 052861066..25e957c15 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РасширениеФайла/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РасширениеФайла/Module.bsl @@ -15,8 +15,12 @@ Процедура Выбрать(Команда) Если ТипСохраняемогоФайла = 0 Тогда Результат = "xlsx"; - ИначеЕсли ТипСохраняемогоФайла = 1 Тогда + ИначеЕсли ТипСохраняемогоФайла = 1 Тогда Результат = "csv"; + ИначеЕсли ТипСохраняемогоФайла = 4 Тогда + Результат = "xls"; + ИначеЕсли ТипСохраняемогоФайла = 5 Тогда + Результат = "ods"; Иначе Результат = "mxl"; КонецЕсли; diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РедактированиеБланка/Form.form b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РедактированиеБланка/Form.form index 935295be9..991cba8be 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РедактированиеБланка/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РедактированиеБланка/Form.form @@ -774,6 +774,79 @@ true + + ТипКолонки + + <key>ru</key> + <value>Тип колонки</value> + + 8 + + + true + + + true + + + + Группа + + <key>ru</key> + <value>Группа</value> + + 9 + + String + + 150 + + + + true + + + true + + + + Родитель + + <key>ru</key> + <value>Родитель</value> + + 10 + + String + + + + true + + + true + + + + Ширина + + <key>ru</key> + <value>Ширина</value> + + 11 + + Number + + 10 + + + + true + + + true + + ИмяОбъектаСопоставления @@ -811,6 +884,38 @@ true + + ПараметрыЗагрузки + + <key>ru</key> + <value>Параметры загрузки</value> + + 5 + + + true + + + true + + + + ИнформацияПоКолонкамТаблица + + <key>ru</key> + <value>Информация по колонкам таблица</value> + + 6 + + ValueTable + + + true + + + true + + ОК diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РедактированиеБланка/Module.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РедактированиеБланка/Module.bsl index 7052b32a5..6b6acd07a 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РедактированиеБланка/Module.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Forms/РедактированиеБланка/Module.bsl @@ -8,6 +8,8 @@ КонецЕсли; УстановитьОформлениеДанных(); + + ПараметрыЗагрузки = Параметры.ПараметрыЗагрузки; ИмяОбъектаСопоставления = Параметры.ИмяОбъектаСопоставления; Если Параметры.Свойство("ИнформацияПоКолонкам") Тогда @@ -109,18 +111,22 @@ КонецПроцедуры -&НаСервереБезКонтекста -Процедура СброситьНастройкиНаСервере(ИмяОбъектаСопоставления) - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ЗагрузкаДанныхИзФайла", ИмяОбъектаСопоставления, Неопределено,, ИмяПользователя()); -КонецПроцедуры - &НаКлиенте Процедура СброситьНастройкиЗавершение(РезультатВопроса, ИмяОбъектаСопоставления) Экспорт Если РезультатВопроса = КодВозвратаДиалога.Да Тогда - СброситьНастройкиНаСервере(ИмяОбъектаСопоставления); - СписокКолонок.Очистить(); - Закрыть(СписокКолонок); + СброситьНастройкиКолонок(); КонецЕсли; КонецПроцедуры +&НаСервере +Процедура СброситьНастройкиКолонок() + + СписокКолонокТаблица = СписокКолонок.Выгрузить(); + СписокКолонокТаблица.Очистить(); + Обработки.ЗагрузкаДанныхИзФайла.ОпределитьИнформацияПоКолонкам(ПараметрыЗагрузки, СписокКолонокТаблица); + ЗначениеВРеквизитФормы(СписокКолонокТаблица, "СписокКолонок"); + +КонецПроцедуры + + #КонецОбласти diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Help/ru.html b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Help/ru.html new file mode 100644 index 000000000..0ee42e6d7 --- /dev/null +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Help/ru.html @@ -0,0 +1,6 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 11.00.9600.18427"></meta></head><body> +<p>Предоставляет возможность загрузки табличных данных из файлов в произвольные списки и табличные части документов. Например, для разового переноса нормативно-справочной информации при переходе с других программ, или для регулярной загрузки данных в табличные части при заполнении документов.</p> +<h3>Преимущества загрузки данных из файла</h3> +<ul><li>Позволяет задействовать для ввода данных возможности других программ (например, можно вводить данные в Excel, а потом загрузить их в программу); +</li><li>Не требует для ввода данных в файл наличия на компьютере программы 1С:Предприятие, т.е. ввод данных в такой файл может осуществляться в удаленных офисах, небольших складах, тачках розничных продаж, т.е. там, где может не быть возможности наладить полноценную работу программы 1С:Предприятие (например, компьютер уже устарел для работы с данной программой); +</li><li>Позволяет подключить к вводу данных дополнительные кадры. Ввод данных во внешний файл требует только соблюдения структуры таблицы, а также знания правил ввода в той программе, для которой он предназначен, например, Excel, поэтому может быть поручен сотрудникам, которые имеют только начальные навыки работы с компьютером. </li></ul><p> </p></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl index c47ecc1a5..a7a1c4e75 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ManagerModule.bsl @@ -37,7 +37,7 @@ ОбязательныеКолонкиМакета = Новый Массив; Для каждого Реквизит Из МетаданныеСправочника.Реквизиты Цикл - Если Реквизит.ПроверкаЗаполнения=ПроверкаЗаполнения.ВыдаватьОшибку Тогда + Если Реквизит.ПроверкаЗаполнения=ПроверкаЗаполнения.ВыдаватьОшибку Тогда ОбязательныеКолонкиМакета.Добавить(Реквизит.Имя); КонецЕсли; КонецЦикла; @@ -47,14 +47,14 @@ ПараметрыПоУмолчанию.Вставить("ОбязательныеКолонки", ОбязательныеКолонкиМакета); ПараметрыПоУмолчанию.Вставить("ТипДанныхКолонки", Новый Соответствие); Возврат ПараметрыПоУмолчанию; -КонецФункции +КонецФункции // Сообщает все требуемые сведения о процедуре загрузки данных из файла в Табличную часть. -Функция ПараметрыЗагрузкиИзФайлаВТЧ(ИмяТабличнойЧасти, ДополнительныеПараметры) Экспорт +Функция ПараметрыЗагрузкиИзФайлаВТЧ(ИмяТабличнойЧасти, ДополнительныеПараметры) ПараметрыПоУмолчанию= Новый Структура; - ПараметрыПоУмолчанию.Вставить("ОбязательныеКолонки",Новый Массив); - ПараметрыПоУмолчанию.Вставить("ИмяМакетаСШаблоном","ЗагрузкаИзФайла"); + ПараметрыПоУмолчанию.Вставить("ОбязательныеКолонки", Новый Массив); + ПараметрыПоУмолчанию.Вставить("ИмяМакетаСШаблоном", "ЗагрузкаИзФайла"); ПараметрыПоУмолчанию.Вставить("ИмяТабличнойЧасти", ИмяТабличнойЧасти); ПараметрыПоУмолчанию.Вставить("ТипДанныхКолонки", Новый Соответствие); ПараметрыПоУмолчанию.Вставить("ДополнительныеПараметры", ДополнительныеПараметры); @@ -81,29 +81,16 @@ // справочника>"). // * ИмяОбъекта - Строка - Имя Объекта. // -Функция ПараметрыЗагрузкиИзФайлаВнешняяОбработка(ИмяКоманды, СсылкаНаОбработку, ИмяМакетаСШаблоном) Экспорт - ОбязательныеКолонкиМакета = Новый Массив; - - Если НЕ ЗначениеЗаполнено(ИмяМакетаСШаблоном) Тогда - ИмяМакетаСШаблоном = "ЗагрузкаИзФайла"; - КонецЕсли; - - ПараметрыЗагрузки = Новый Структура; - ПараметрыЗагрузки.Вставить("ИмяМакетаСШаблоном", ИмяМакетаСШаблоном); - ПараметрыЗагрузки.Вставить("ОбязательныеКолонкиМакета", ОбязательныеКолонкиМакета); - ПараметрыЗагрузки.Вставить("СоответствиеТипаДанныхКолонок", Новый Соответствие); +Процедура ПараметрыЗагрузкиИзФайлаВнешняяОбработка(ИмяКоманды, СсылкаНаОбработку, ПараметрыЗагрузки) Экспорт Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки"); ВнешнийОбъект = МодульДополнительныеОтчетыИОбработки.ПолучитьОбъектВнешнейОбработки(СсылкаНаОбработку); + ВнешнийОбъект.ОпределитьПараметрыЗагрузкиДанныхИзФайла(ИмяКоманды, ПараметрыЗагрузки); + ПараметрыЗагрузки.Вставить("Макет", ВнешнийОбъект.ПолучитьМакет(ПараметрыЗагрузки.ИмяМакетаСШаблоном)); КонецЕсли; - ВнешнийОбъект.ОпределитьПараметрыЗагрузкиДанныхИзФайла(ИмяКоманды, ПараметрыЗагрузки); - - ПараметрыЗагрузки.Вставить("Макет", ВнешнийОбъект.МакетСШаблоном(ПараметрыЗагрузки.ИмяМакетаСШаблоном)); - - Возврат ПараметрыЗагрузки; -КонецФункции +КонецПроцедуры #КонецОбласти @@ -144,35 +131,20 @@ КонецЦикла; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ДополнительныеОтчетыИОбработкиКоманды.Ссылка, - | ДополнительныеОтчетыИОбработкиКоманды.Идентификатор, - | ДополнительныеОтчетыИОбработкиКоманды.Представление, - | ДополнительныеОтчетыИОбработкиКоманды.Модификатор - |ИЗ - | Справочник.ДополнительныеОтчетыИОбработки.Команды КАК ДополнительныеОтчетыИОбработкиКоманды - |ГДЕ - | ДополнительныеОтчетыИОбработкиКоманды.ВариантЗапуска = &ВариантЗапуска - | И ДополнительныеОтчетыИОбработкиКоманды.Ссылка.Вид = &Вид - | И НЕ ДополнительныеОтчетыИОбработкиКоманды.Ссылка.ПометкаУдаления - | И ДополнительныеОтчетыИОбработкиКоманды.Ссылка.Публикация = &Публикация"; - Запрос.УстановитьПараметр("ВариантЗапуска", Перечисления.СпособыВызоваДополнительныхОбработок.ЗагрузкаДанныхИзФайла); - Запрос.УстановитьПараметр("Вид", Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка); - Запрос.УстановитьПараметр("Публикация", Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется); + + Запрос = ДополнительныеОтчетыИОбработки.НовыйЗапросПоДоступнымКомандам(Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка, + Неопределено, Ложь, Перечисления.СпособыВызоваДополнительныхОбработок.ЗагрузкаДанныхИзФайла); ТаблицаКоманд = Запрос.Выполнить().Выгрузить(); Для Каждого СтрокаТаблицы Из ТаблицаКоманд Цикл - ИнформацияОТипеЗагрузки = Новый Структура; - ИнформацияОТипеЗагрузки.Вставить("Тип", "ВнешняяЗагрузка"); - ИнформацияОТипеЗагрузки.Вставить("ПолноеИмяОбъектаМетаданных", СтрокаТаблицы.Идентификатор); + ИнформацияОТипеЗагрузки = Новый Структура("Тип", "ВнешняяЗагрузка"); + ИнформацияОТипеЗагрузки.Вставить("ПолноеИмяОбъектаМетаданных", СтрокаТаблицы.Модификатор); ИнформацияОТипеЗагрузки.Вставить("Ссылка", СтрокаТаблицы.Ссылка); - ИнформацияОТипеЗагрузки.Вставить("МакетСШаблоном", СтрокаТаблицы.Модификатор); + ИнформацияОТипеЗагрузки.Вставить("Идентификатор", СтрокаТаблицы.Идентификатор); Строка = ИнформацияОСправочниках.Добавить(); Строка.ПолноеИмя = ОбъектМетаданныхДляВывода.ПолноеИмя(); - Строка.ИнформацияОТипеЗагрузки= ИнформацияОТипеЗагрузки; + Строка.ИнформацияОТипеЗагрузки = ИнформацияОТипеЗагрузки; Строка.Представление = СтрокаТаблицы.Представление; КонецЦикла; КонецЕсли; @@ -214,7 +186,7 @@ #Область ПоискСсылок -Процедура ИнициализироватьРежимПоискСсылок(ШаблонСДанными, ИнформацияПоКолонкам, ОписаниеТипов) Экспорт +Процедура УстановитьРежимВставкиИзБуфераОбмена(ШаблонСДанными, ИнформацияПоКолонкам, ОписаниеТипов) Экспорт СоответствиеКолонок = Новый Соответствие; ЗаголовокКолонки = ""; Разделитель = ""; @@ -398,14 +370,14 @@ // Добавление информации по колонке для режима поиска ссылок. // -Процедура ДобавитьИнформациюПоКолонке(ИнформацияПоКолонкам, Имя, Представление, Тип, ОбязательнаДляЗаполнения, Позиция, Ассоциация = "") +Процедура ДобавитьИнформациюПоКолонке(ИнформацияПоКолонкам, Имя, Представление, Тип, ОбязательнаДляЗаполнения, Позиция, Группа = "") СтрокаИнфоПроКолонки = ИнформацияПоКолонкам.Добавить(); СтрокаИнфоПроКолонки.ИмяКолонки = Имя; СтрокаИнфоПроКолонки.ПредставлениеКолонки = Представление; СтрокаИнфоПроКолонки.ТипКолонки = Тип; СтрокаИнфоПроКолонки.ОбязательнаДляЗаполнения = ОбязательнаДляЗаполнения; СтрокаИнфоПроКолонки.Позиция = Позиция; - СтрокаИнфоПроКолонки.Ассоциация = ?(ЗначениеЗаполнено(Ассоциация), Ассоциация, Имя); + СтрокаИнфоПроКолонки.Группа = ?(ЗначениеЗаполнено(Группа), Группа, Имя); СтрокаИнфоПроКолонки.Видимость = Истина; КонецПроцедуры @@ -436,8 +408,10 @@ Процедура ЗаполнитьТаблицуСопоставленияЗагружаемымиДанными(ШаблонСДанными, ТаблицаИнформацияПоКолонкам, ТаблицаСопоставления, ФоновоеЗадание = Ложь) - КорректировкаИдентификатора = 0; - Для НомерСтроки = 2 По ШаблонСДанными.ВысотаТаблицы Цикл + ПерваяСтрокаТаблицы = ?(ЗагрузкаДанныхИзФайлаКлиентСервер.КолонкиИмеютГруппировку(ТаблицаИнформацияПоКолонкам), 3, 2); + + КорректировкаИдентификатора = ПерваяСтрокаТаблицы - 2; + Для НомерСтроки = ПерваяСтрокаТаблицы По ШаблонСДанными.ВысотаТаблицы Цикл СтрокаТаблицыПустая = Истина; НоваяСтрока = ТаблицаСопоставления.Добавить(); НоваяСтрока.Идентификатор = НомерСтроки - 1 - КорректировкаИдентификатора; @@ -550,13 +524,16 @@ #Область ПодготовкаКЗагрузкеДанных Функция ОбластьЗаголовкаШаблонаТаблицы(Шаблон) - МетаданныеОбластьЗаголовокТаблицы = Шаблон.Области.Найти("Шапка"); - Если МетаданныеОбластьЗаголовокТаблицы = Неопределено Тогда - ОбластьЗаголовокТаблицы = Шаблон.ПолучитьОбласть("R1"); - Иначе - ОбластьЗаголовокТаблицы = Шаблон.ПолучитьОбласть("Шапка"); - КонецЕсли; + ВысотаШапки = 1; + Для НомерКолонки = 1 По Шаблон.ШиринаТаблицы Цикл + Ячейка = Шаблон.ПолучитьОбласть(2, НомерКолонки, 2, НомерКолонки).ТекущаяОбласть; + Если ЗначениеЗаполнено(Ячейка.Текст) Тогда + ВысотаШапки = 2; + Прервать; + КонецЕсли; + КонецЦикла; + ОбластьЗаголовокТаблицы = Шаблон.ПолучитьОбласть(1, 1, ВысотаШапки, Шаблон.ШиринаТаблицы); Возврат ОбластьЗаголовокТаблицы; @@ -564,7 +541,7 @@ // Формирует макет табличного документа на основание реквизитов справочника для универсальной загрузки. // -Процедура ИнформациюПоКолонкамИзРеквизитовСправочника(ПараметрыЗагрузки, ИнформацияПоКолонкам) Экспорт +Процедура ИнформациюПоКолонкамИзРеквизитовСправочника(ПараметрыЗагрузки, ИнформацияПоКолонкам) ТекстПримечания = ""; ИнформацияПоКолонкам.Очистить(); @@ -584,13 +561,13 @@ КонецЕсли; Если МетаданныеСправочника.Иерархический Тогда - СоздатьКолонкуСтандартныеРеквизиты(ИнформацияПоКолонкам, МетаданныеСправочника, "Родитель", Позиция); - Позиция = Позиция + 1; + СоздатьКолонкуСтандартныеРеквизиты(ИнформацияПоКолонкам, МетаданныеСправочника, "Родитель", Позиция); + Позиция = Позиция + 1; КонецЕсли; Если МетаданныеСправочника.Владельцы.Количество() > 0 Тогда - СоздатьКолонкуСтандартныеРеквизиты(ИнформацияПоКолонкам, МетаданныеСправочника, "Владелец", Позиция); - Позиция = Позиция + 1; + СоздатьКолонкуСтандартныеРеквизиты(ИнформацияПоКолонкам, МетаданныеСправочника, "Владелец", Позиция); + Позиция = Позиция + 1; КонецЕсли; Для каждого Реквизит Из МетаданныеСправочника.Реквизиты Цикл @@ -630,6 +607,7 @@ СтрокаИнфоПроКолонки.ТипКолонки = Реквизит.Тип; СтрокаИнфоПроКолонки.ОбязательнаДляЗаполнения = ОбязательноеПоле; СтрокаИнфоПроКолонки.Позиция = Позиция; + СтрокаИнфоПроКолонки.Группа = МетаданныеСправочника.Представление(); СтрокаИнфоПроКолонки.Видимость = Истина; СтрокаИнфоПроКолонки.Примечание = Подсказка; СтрокаИнфоПроКолонки.Ширина = ШиринаКолонки; @@ -638,6 +616,16 @@ КонецЦикла; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + МодульУправлениеКонтактнойИнформацией.КолонкиДляЗагрузкиДанных(МетаданныеСправочника, ИнформацияПоКолонкам); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствамиСлужебный"); + МодульУправлениеСвойствамиСлужебный.КолонкиДляЗагрузкиДанных(МетаданныеСправочника, ИнформацияПоКолонкам); + КонецЕсли; + КонецПроцедуры // Добавление информации о колонке для стандартного реквизита при универсальной загрузке. @@ -677,6 +665,7 @@ СтрокаИнфоПроКолонки.ТипКолонки = ОписаниеТипа; СтрокаИнфоПроКолонки.ОбязательнаДляЗаполнения = ОбязательнаДляЗаполнения; СтрокаИнфоПроКолонки.Позиция = Позиция; + СтрокаИнфоПроКолонки.Группа = МетаданныеСправочника.Представление(); СтрокаИнфоПроКолонки.Видимость = Истина; СтрокаИнфоПроКолонки.Примечание = ТекстПримечания; СтрокаИнфоПроКолонки.Ширина = ШиринаКолонки; @@ -694,7 +683,7 @@ Макет = МенеджерОбъекта(ПараметрыЗагрузки.ПолноеИмяОбъекта).ПолучитьМакет("ЗагрузкаИзФайла"); КонецЕсли; ОбластьЗаголовокТаблицы = ОбластьЗаголовкаШаблонаТаблицы(Макет); - Если ИнформацияПоКолонкам.Количество() = 0 Тогда + Если ИнформацияПоКолонкам.Количество() = 0 Тогда СоздатьИнформациюПоКолонкамНаОснованиеШаблона(ОбластьЗаголовокТаблицы, ПараметрыЗагрузки, ИнформацияПоКолонкам, Неопределено); КонецЕсли; ИначеЕсли ПараметрыЗагрузки.ТипЗагрузки = "УниверсальнаяЗагрузка" Тогда @@ -711,7 +700,7 @@ СоздатьИнформациюПоКолонкамНаОснованиеШаблона(ОбластьЗаголовокТаблицы, ПараметрыЗагрузки, ИнформацияПоКолонкам); КонецЕсли; ИначеЕсли ПараметрыЗагрузки.ТипЗагрузки = "ТабличнаяЧасть" И ИнформацияПоКолонкам.Количество() = 0 Тогда - ОбластьЗаголовокТаблицы = ОбластьЗаголовкаШаблонаТаблицы(ПараметрыЗагрузки.Макет); + ОпределитьИнформацияПоКолонкамТабличнаяЧасть(ИнформацияПоКолонкам, Макет, ОбластьЗаголовокТаблицы, ПараметрыЗагрузки); КонецЕсли; ТребуетсяПересчетПозиций = Ложь; @@ -748,6 +737,39 @@ КонецПроцедуры +Процедура ОпределитьИнформацияПоКолонкамТабличнаяЧасть(Знач ИнформацияПоКолонкам, Макет, ОбластьЗаголовокТаблицы, Знач ПараметрыЗагрузки) + + СтруктураНаименованияОбъекта = РазложитьПолноеИмяОбъекта(ПараметрыЗагрузки.ПолноеИмяОбъекта); + ПараметрыЗагрузкиИзФайла = ПараметрыЗагрузкиИзФайлаВТЧ(ПараметрыЗагрузки.ПолноеИмяОбъекта, ПараметрыЗагрузки.ДополнительныеПараметры); + ПараметрыЗагрузкиИзФайла.Вставить("ПолноеИмяОбъекта", ПараметрыЗагрузки.ПолноеИмяОбъекта); + + МенеджерОбъекта = Документы[СтруктураНаименованияОбъекта.НазваниеОбъекта]; + МенеджерОбъекта.УстановитьПараметрыЗагрузкиИзФайлаВТЧ(ПараметрыЗагрузкиИзФайла); + + МакетМетаданные = Метаданные.Документы[СтруктураНаименованияОбъекта.НазваниеОбъекта].Макеты.Найти(ПараметрыЗагрузки.Макет); + Если МакетМетаданные = Неопределено Тогда + МакетМетаданные= Метаданные.Документы[СтруктураНаименованияОбъекта.НазваниеОбъекта].Макеты.Найти("ЗагрузкаИзФайла" + СтруктураНаименованияОбъекта.ИмяТабличнойЧасти); + Если МакетМетаданные = Неопределено Тогда + МакетМетаданные = Метаданные.Документы[СтруктураНаименованияОбъекта.НазваниеОбъекта].Макеты.Найти("ЗагрузкаИзФайла"); + КонецЕсли; + КонецЕсли; + + Если МакетМетаданные <> Неопределено Тогда + Макет = МенеджерОбъекта.ПолучитьМакет(МакетМетаданные.Имя); + Иначе + ВызватьИсключение НСтр("ru = 'Не найден макет для загрузки данных из файла'"); + Возврат; + КонецЕсли; + + ЗаголовокТаблицы = ОбластьЗаголовкаШаблонаТаблицы(Макет); + Если ИнформацияПоКолонкам.Количество() = 0 Тогда + СоздатьИнформациюПоКолонкамНаОснованиеШаблона(ЗаголовокТаблицы, ПараметрыЗагрузкиИзФайла, ИнформацияПоКолонкам); + КонецЕсли; + + ОбластьЗаголовокТаблицы = ОбластьЗаголовкаШаблонаТаблицы(Макет); + +КонецПроцедуры + // Заполняет таблицу о колонках в макете. Информация используется для построения таблицы сопоставления. // // Параметры: @@ -756,7 +778,7 @@ // ИнформацияПоКолонкам - ТаблицаЗначений - Таблица с описание колонок. // ИменаДобавляемыхКолонок - Строка - список добавляемых колонок через запятую. Если значение не заполонено, то // добавляются все. -Процедура СоздатьИнформациюПоКолонкамНаОснованиеШаблона(ОбластьЗаголовокТаблицы, ПараметрыЗагрузкиИзФайла, ИнформацияПоКолонкам, ИменаДобавляемыхКолонок = Неопределено) Экспорт +Процедура СоздатьИнформациюПоКолонкамНаОснованиеШаблона(ОбластьЗаголовокТаблицы, ПараметрыЗагрузкиИзФайла, ИнформацияПоКолонкам, ИменаДобавляемыхКолонок = Неопределено) ВыборочноеДобавление = Ложь; Если ЗначениеЗаполнено(ИменаДобавляемыхКолонок) Тогда @@ -774,45 +796,81 @@ СоответствиеТипаДанныхКолонок = Новый Соответствие; КонецЕсли; + ВысотаШапки = ОбластьЗаголовокТаблицы.ВысотаТаблицы; + Если ВысотаШапки = 2 Тогда + НомерКолонки = 1; + Группы = Новый Соответствие; + ИспользуетсяГруппировка = Истина; + Пока НомерКолонки <= ОбластьЗаголовокТаблицы.ШиринаТаблицы Цикл + Область = ОбластьЗаголовокТаблицы.ПолучитьОбласть(1, НомерКолонки); + Ячейка = ОбластьЗаголовокТаблицы.ПолучитьОбласть(1, НомерКолонки, 1, НомерКолонки).ТекущаяОбласть; + Группа = Ячейка.Текст; + Для Индекс = НомерКолонки По НомерКолонки + Область.ШиринаТаблицы -1 Цикл + Группы.Вставить(Индекс, Группа); + КонецЦикла; + НомерКолонки = НомерКолонки + Область.ШиринаТаблицы; + КонецЦикла; + Иначе + ИспользуетсяГруппировка = Ложь; + КонецЕсли; + СписокКолонокСФункциональнымиОпциями = КолонкиЗависимыеОтФункциональныхОпций(ПараметрыЗагрузкиИзФайла.ПолноеИмяОбъекта); Для НомерКолонки = 1 По ОбластьЗаголовокТаблицы.ШиринаТаблицы Цикл - Ячейка = ОбластьЗаголовокТаблицы.ПолучитьОбласть(1, НомерКолонки, 1, НомерКолонки).ТекущаяОбласть; + Ячейка = ОбластьЗаголовокТаблицы.ПолучитьОбласть(ВысотаШапки, НомерКолонки, ВысотаШапки, НомерКолонки).ТекущаяОбласть; Если СтрНайти(Ячейка.Имя, "R") > 0 И СтрНайти(Ячейка.Имя, "C") > 0 Тогда ИмяРеквизита = ?(ЗначениеЗаполнено(Ячейка.ПараметрРасшифровки), Ячейка.ПараметрРасшифровки, Ячейка.Текст); ПредставлениеРеквизита = ?(ЗначениеЗаполнено(Ячейка.Текст), Ячейка.Текст, Ячейка.ПараметрРасшифровки); - Ассоциация = ?(ЗначениеЗаполнено(Ячейка.ПараметрРасшифровки), Ячейка.ПараметрРасшифровки, Ячейка.Текст); - Иначе + Родитель = ?(ЗначениеЗаполнено(Ячейка.ПараметрРасшифровки), Ячейка.ПараметрРасшифровки, Ячейка.Текст); + Иначе ИмяРеквизита = Ячейка.Имя; ПредставлениеРеквизита = ?(ЗначениеЗаполнено(Ячейка.Текст), Ячейка.Текст, Ячейка.Имя); - Ассоциация = ?(ЗначениеЗаполнено(Ячейка.ПараметрРасшифровки), Ячейка.ПараметрРасшифровки, Ячейка.Имя); + Родитель = ?(ЗначениеЗаполнено(Ячейка.ПараметрРасшифровки), Ячейка.ПараметрРасшифровки, Ячейка.Имя); КонецЕсли; - ТипДанныхКолонки = Новый ОписаниеТипов("Строка"); - Если СоответствиеТипаДанныхКолонок <> Неопределено Тогда - ТипДанныхКолонкиПереопределенный = СоответствиеТипаДанныхКолонок.Получить(ИмяРеквизита); - Если ТипДанныхКолонкиПереопределенный <> Неопределено Тогда - ТипДанныхКолонки = ТипДанныхКолонкиПереопределенный; + Если ПредставлениеРеквизита = НСтр("ru = '<Дополнительные реквизиты>'") Тогда + МетаданныеСправочника = Метаданные.НайтиПоПолномуИмени(ПараметрыЗагрузкиИзФайла.ПолноеИмяОбъекта); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствамиСлужебный"); + МодульУправлениеСвойствамиСлужебный.КолонкиДляЗагрузкиДанных(МетаданныеСправочника, ИнформацияПоКолонкам); + КонецЕсли; + ИначеЕсли ПредставлениеРеквизита = НСтр("ru = '<Контактная информация>'") Тогда + МетаданныеСправочника = Метаданные.НайтиПоПолномуИмени(ПараметрыЗагрузкиИзФайла.ПолноеИмяОбъекта); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + МодульУправлениеКонтактнойИнформацией.КолонкиДляЗагрузкиДанных(МетаданныеСправочника, ИнформацияПоКолонкам); + КонецЕсли; + Иначе + ТипДанныхКолонки = Новый ОписаниеТипов("Строка"); + Если СоответствиеТипаДанныхКолонок <> Неопределено Тогда + ТипДанныхКолонкиПереопределенный = СоответствиеТипаДанныхКолонок.Получить(ИмяРеквизита); + Если ТипДанныхКолонкиПереопределенный <> Неопределено Тогда + ТипДанныхКолонки = ТипДанныхКолонкиПереопределенный; + КонецЕсли; + КонецЕсли; + + Если ВыборочноеДобавление И МассивДобавляемыхКолонок.Найти(ИмяРеквизита) = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если ЗначениеЗаполнено(ИмяРеквизита) Тогда + СтрокаИнфоПроКолонки = ИнформацияПоКолонкам.Добавить(); + СтрокаИнфоПроКолонки.ИмяКолонки = ИмяРеквизита; + СтрокаИнфоПроКолонки.ПредставлениеКолонки = ПредставлениеРеквизита; + СтрокаИнфоПроКолонки.ТипКолонки = ТипДанныхКолонки; + СтрокаИнфоПроКолонки.ОбязательнаДляЗаполнения = Ячейка.Шрифт.Жирный; + СтрокаИнфоПроКолонки.Позиция = Позиция; + СтрокаИнфоПроКолонки.Родитель = Родитель; + Если ИспользуетсяГруппировка Тогда + СтрокаИнфоПроКолонки.Группа = Группы.Получить(НомерКолонки); + КонецЕсли; + СтрокаИнфоПроКолонки.Видимость = Истина; + СтрокаИнфоПроКолонки.Примечание = Ячейка.Примечание.Текст; + СтрокаИнфоПроКолонки.Ширина = Ячейка.ШиринаКолонки; + Позиция = Позиция + 1; КонецЕсли; - КонецЕсли; - Если ВыборочноеДобавление И МассивДобавляемыхКолонок.Найти(ИмяРеквизита) = Неопределено Тогда - Продолжить; - КонецЕсли; - - Если ЗначениеЗаполнено(ИмяРеквизита) Тогда - СтрокаИнфоПроКолонки = ИнформацияПоКолонкам.Добавить(); - СтрокаИнфоПроКолонки.ИмяКолонки = ИмяРеквизита; - СтрокаИнфоПроКолонки.ПредставлениеКолонки = ПредставлениеРеквизита; - СтрокаИнфоПроКолонки.ТипКолонки = ТипДанныхКолонки; - СтрокаИнфоПроКолонки.ОбязательнаДляЗаполнения = Ячейка.Шрифт.Жирный; - СтрокаИнфоПроКолонки.Позиция = Позиция; - СтрокаИнфоПроКолонки.Ассоциация = ?(ЗначениеЗаполнено(Ассоциация), Ассоциация, ИмяРеквизита); - СтрокаИнфоПроКолонки.Видимость = Истина; - СтрокаИнфоПроКолонки.Примечание = Ячейка.Примечание.Текст; - СтрокаИнфоПроКолонки.Ширина = Ячейка.ШиринаКолонки; - Позиция = Позиция + 1; КонецЕсли; КонецЦикла; @@ -859,7 +917,7 @@ КонецФункции -Процедура ЗаполнитьЯчейкуЗаголовкаМакета(Ячейка, Текст, Ширина, Подсказка, ОбязательноеПоле, Имя = "") Экспорт +Процедура ЗаполнитьЯчейкуЗаголовкаМакета(Ячейка, Текст, Ширина, Подсказка, ОбязательноеПоле, Имя = "") Ячейка.ТекущаяОбласть.Текст = Текст; Ячейка.ТекущаяОбласть.Имя = Имя; @@ -875,103 +933,66 @@ КонецПроцедуры -Процедура ИнициализироватьЗагрузкуВТабличнуюЧасть(ПолноеИмяТабличнойЧасти, ИмяМакетаСШаблоном, ИнформацияПоКолонкам, ШаблонСДанными, ДополнительныеПараметры, Отказ) Экспорт - - СтруктураНаименованияОбъекта = РазложитьПолноеИмяОбъекта(ПолноеИмяТабличнойЧасти); - ПараметрыЗагрузкиИзФайла = ПараметрыЗагрузкиИзФайлаВТЧ(ПолноеИмяТабличнойЧасти, ДополнительныеПараметры); - ПараметрыЗагрузкиИзФайла.Вставить("ПолноеИмяОбъекта", ПолноеИмяТабличнойЧасти); - - Если СтруктураНаименованияОбъекта.ТипОбъекта = "Документ" Тогда - МенеджерОбъекта = Документы[СтруктураНаименованияОбъекта.НазваниеОбъекта]; - - МенеджерОбъекта.УстановитьПараметрыЗагрузкиИзФайлаВТЧ(ПараметрыЗагрузкиИзФайла); - - Если ПараметрыЗагрузкиИзФайла.Свойство("ИмяМакетаСШаблоном") И ЗначениеЗаполнено(ПараметрыЗагрузкиИзФайла.ИмяМакетаСШаблоном) Тогда - ИмяМакетаСШаблоном = ПараметрыЗагрузкиИзФайла.ИмяМакетаСШаблоном; - КонецЕсли; - - МакетМетаданные = Метаданные.Документы[СтруктураНаименованияОбъекта.НазваниеОбъекта].Макеты.Найти(ИмяМакетаСШаблоном); - Если МакетМетаданные = Неопределено Тогда - МакетМетаданные= Метаданные.Документы[СтруктураНаименованияОбъекта.НазваниеОбъекта].Макеты.Найти("ЗагрузкаИзФайла" + СтруктураНаименованияОбъекта.ИмяТабличнойЧасти); - Если МакетМетаданные = Неопределено Тогда - МакетМетаданные = Метаданные.Документы[СтруктураНаименованияОбъекта.НазваниеОбъекта].Макеты.Найти("ЗагрузкаИзФайла"); - КонецЕсли; - КонецЕсли; - - Если МакетМетаданные <> Неопределено Тогда - Макет = МенеджерОбъекта.ПолучитьМакет(МакетМетаданные.Имя); - Иначе - ВызватьИсключение НСтр("ru = 'Не найден макет для загрузки данных из файла'"); - Отказ = Истина; - Возврат; - КонецЕсли; - - ЗаголовокТаблицы = ОбластьЗаголовкаШаблонаТаблицы(Макет); - Если ИнформацияПоКолонкам.Количество() = 0 Тогда - СоздатьИнформациюПоКолонкамНаОснованиеШаблона(ЗаголовокТаблицы, ПараметрыЗагрузкиИзФайла, ИнформацияПоКолонкам); - КонецЕсли; - - СписокКолонокСФункциональнымиОпциями = КолонкиЗависимыеОтФункциональныхОпций(ПолноеИмяТабличнойЧасти); - Для каждого ФункциональнаяОпцияКолонкиВключена Из СписокКолонокСФункциональнымиОпциями Цикл - СтрокаСИнформациейОКолонке = ИнформацияПоКолонкам.Найти(ФункциональнаяОпцияКолонкиВключена.Ключ, "ИмяКолонки"); - Если СтрокаСИнформациейОКолонке <> Неопределено Тогда - Если НЕ ФункциональнаяОпцияКолонкиВключена.Значение Тогда - ИнформацияПоКолонкам.Удалить(СтрокаСИнформациейОКолонке); - КонецЕсли; - Иначе - Если ФункциональнаяОпцияКолонкиВключена.Значение Тогда - СоздатьИнформациюПоКолонкамНаОснованиеШаблона(ЗаголовокТаблицы, ПараметрыЗагрузкиИзФайла, ИнформацияПоКолонкам, ФункциональнаяОпцияКолонкиВключена.Ключ); - КонецЕсли; - КонецЕсли; - КонецЦикла; - - ИнформацияПоКолонкам.Сортировать("Позиция"); - Позиция = 1; - Для каждого Колонка Из ИнформацияПоКолонкам Цикл - Колонка.Позиция = Позиция; - Позиция = Позиция + 1; - КонецЦикла; - - ШаблонСДанными.Вывести(ЗаголовокТаблицы); - КонецЕсли; - -КонецПроцедуры - // Создает шапку бланка по информации о колонках. // Функция ШапкаБланкаДляЗаполненияПоИнформацииПоКолонкам(ИнформацияПоКолонкам) Экспорт ТабличныйДокумент = Новый ТабличныйДокумент; - - ПростойШаблон = Обработки.ЗагрузкаДанныхИзФайла.ПолучитьМакет("ПростойШаблон"); - ОбластьЗаголовок = ПростойШаблон.ПолучитьОбласть("Заголовок"); + КолонкиИмеютГруппировку = ЗагрузкаДанныхИзФайлаКлиентСервер.КолонкиИмеютГруппировку(ИнформацияПоКолонкам); + Если КолонкиИмеютГруппировку Тогда + ПростойШаблон = Обработки.ЗагрузкаДанныхИзФайла.ПолучитьМакет("ПростойШаблон"); + ОбластьЗаголовок = ПростойШаблон.ПолучитьОбласть("Шапка2Строки"); + НомерСтроки = 2; + Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная); + Иначе + ПростойШаблон = Обработки.ЗагрузкаДанныхИзФайла.ПолучитьМакет("ПростойШаблон"); + ОбластьЗаголовок = ПростойШаблон.ПолучитьОбласть("Заголовок"); + НомерСтроки = 1; + КонецЕсли; ИнформацияПоКолонкам.Сортировать("Позиция"); + Группа = Неопределено; + ПозицияНачалоГруппы = 1; + Сдвиг = 0; Для Позиция = 0 По ИнформацияПоКолонкам.Количество() -1 Цикл Колонка = ИнформацияПоКолонкам.Получить(Позиция); Если Колонка.Видимость = Истина Тогда - ОбластьЗаголовок.ТекущаяОбласть.Имя = Колонка.ИмяКолонки; - ОбластьЗаголовок.ТекущаяОбласть.Расшифровка = Колонка.Ассоциация; - ОбластьЗаголовок.ТекущаяОбласть.Примечание.Текст = Колонка.Примечание; - Если ЗначениеЗаполнено(Колонка.Синоним) Тогда - ОбластьЗаголовок.Параметры.Заголовок = Колонка.Синоним; - Иначе - ОбластьЗаголовок.Параметры.Заголовок = Колонка.ПредставлениеКолонки; - КонецЕсли; - Если Колонка.ОбязательнаДляЗаполнения Тогда - ОбластьЗаголовок.ТекущаяОбласть.Шрифт = Новый Шрифт(,, Истина); - Иначе - ОбластьЗаголовок.ТекущаяОбласть.Шрифт = Новый Шрифт(,, Ложь); - КонецЕсли; - Если Колонка.Ширина = 0 Тогда - ОбластьЗаголовок.ТекущаяОбласть.ШиринаКолонки = ШиринаКолонкиПоТипу(Колонка.ТипКолонки); - Иначе - ОбластьЗаголовок.ТекущаяОбласть.ШиринаКолонки = Колонка.Ширина; + Если Группа = Неопределено Тогда + Группа = Колонка.Группа; КонецЕсли; + ОбластьИмяКолонки = ОбластьЗаголовок.Область(НомерСтроки, 1, НомерСтроки, 1); + ОбластьИмяКолонки.Имя = Колонка.ИмяКолонки; + ОбластьИмяКолонки.Расшифровка = Колонка.Группа; + ОбластьИмяКолонки.Примечание.Текст = Колонка.Примечание; + ОбластьИмяКолонки.Шрифт = ?(Колонка.ОбязательнаДляЗаполнения, Новый Шрифт(,, Истина), Новый Шрифт(,, Ложь)); + ОбластьИмяКолонки.ШиринаКолонки = ?(Колонка.Ширина = 0, ШиринаКолонкиПоТипу(Колонка.ТипКолонки), Колонка.Ширина); + ОбластьЗаголовок.Параметры.Заголовок = ?(ПустаяСтрока(Колонка.Синоним), Колонка.ПредставлениеКолонки, Колонка.Синоним); ТабличныйДокумент.Присоединить(ОбластьЗаголовок); + + Если КолонкиИмеютГруппировку Тогда + Если Колонка.Группа <> Группа Тогда + Область = ТабличныйДокумент.Область(1, ПозицияНачалоГруппы, 1, Позиция - Сдвиг); + Область.Текст = Группа; + Область.Объединить(); + Область.Обвести(Линия, Линия, Линия,Линия); + ПозицияНачалоГруппы = Позиция + 1 - Сдвиг ; + Группа = Колонка.Группа; + ИначеЕсли ПустаяСтрока(Колонка.Группа) Тогда + Область = ТабличныйДокумент.Область(1, ПозицияНачалоГруппы, НомерСтроки, Позиция - Сдвиг); + Область.Объединить(); + КонецЕсли; + КонецЕсли; + Иначе + Сдвиг = Сдвиг + 1; КонецЕсли; КонецЦикла; + Если КолонкиИмеютГруппировку Тогда + Область = ТабличныйДокумент.Область(1, ПозицияНачалоГруппы, 1, Позиция - Сдвиг); + Область.Текст = Группа; + Область.Объединить(); + Область.Обвести(Линия, Линия, Линия,Линия); + КонецЕсли; Возврат ТабличныйДокумент; КонецФункции @@ -980,13 +1001,18 @@ // Создает таблицу значений по данным из шаблона и сохраняет ее во временное хранилище. // -Процедура ВыгрузитьДанныеДляТЧ(ШаблонСДанными, ИнформацияПоКолонкам, АдресЗагруженныхДанных) Экспорт +Процедура ТабличныйДокументВТаблицуЗначений(ШаблонСДанными, ИнформацияПоКолонкам, АдресЗагруженныхДанных) Экспорт + ТаблицаИнформацияПоКолонкам = ИнформацияПоКолонкам.Скопировать(); ЗагружаемыеДанные = Новый ТаблицаЗначений; - ОбластьЗаголовка = ОбластьЗаголовкаШаблонаТаблицы(ШаблонСДанными); - Для каждого Колонка Из ИнформацияПоКолонкам Цикл - ЗагружаемыеДанные.Колонки.Добавить(Колонка.ИмяКолонки, Новый ОписаниеТипов("Строка"), Колонка.ПредставлениеКолонки); + Для каждого Колонка Из ТаблицаИнформацияПоКолонкам Цикл + Если Колонка.ТипКолонки.Типы()[0] = Тип("Дата") Тогда + ТипКолонки = Колонка.ТипКолонки; + Иначе + ТипКолонки = Новый ОписаниеТипов("Строка") + КонецЕсли; + ЗагружаемыеДанные.Колонки.Добавить(Колонка.ИмяКолонки, ТипКолонки, Колонка.ПредставлениеКолонки); КонецЦикла; ОписаниеТипаЧисло = Новый ОписаниеТипов("Число"); ОписаниеТипаСтрока = Новый ОписаниеТипов("Строка"); @@ -995,31 +1021,21 @@ ЗагружаемыеДанные.Колонки.Добавить("ОписаниеОшибки",ОписаниеТипаСтрока, "Причина"); КорректировкаИдентификатора = 0; + ВысотаШапки = ?(ЗагрузкаДанныхИзФайлаКлиентСервер.КолонкиИмеютГруппировку(ТаблицаИнформацияПоКолонкам), 2, 1); - Для каждого Строка Из ИнформацияПоКолонкам Цикл - Строка.Позиция = -1; - КонецЦикла; + ИнициализироватьКолонки(ТаблицаИнформацияПоКолонкам, ШаблонСДанными, ВысотаШапки); - Для НомерКолонки = 1 По ШаблонСДанными.ШиринаТаблицы Цикл - ЯчейкаЗаголовок = ШаблонСДанными.ПолучитьОбласть(1, НомерКолонки, 1, НомерКолонки).ТекущаяОбласть; - Отбор = Новый Структура("ПредставлениеКолонки", ЯчейкаЗаголовок.Текст); - НайденныеКолонки = ИнформацияПоКолонкам.НайтиСтроки(Отбор); - Если НайденныеКолонки.Количество() > 0 Тогда - НайденныеКолонки[0].Позиция = НомерКолонки; - КонецЕсли; - КонецЦикла; - - Для НомерСтроки = 2 По ШаблонСДанными.ВысотаТаблицы Цикл + Для НомерСтроки = ВысотаШапки + 1 По ШаблонСДанными.ВысотаТаблицы Цикл СтрокаТаблицыПустая = Истина; НоваяСтрока = ЗагружаемыеДанные.Добавить(); НоваяСтрока.Идентификатор = НомерСтроки - 1 - КорректировкаИдентификатора; Для НомерКолонки = 1 По ШаблонСДанными.ШиринаТаблицы Цикл Ячейка = ШаблонСДанными.ПолучитьОбласть(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки).ТекущаяОбласть; - НайденнаяКолонка = НайтиИнформациюОКолонке(ИнформацияПоКолонкам, "Позиция", НомерКолонки); + НайденнаяКолонка = НайтиИнформациюОКолонке(ТаблицаИнформацияПоКолонкам, "Позиция", НомерКолонки); Если НайденнаяКолонка <> Неопределено Тогда ИмяКолонки = НайденнаяКолонка.ИмяКолонки; - НоваяСтрока[ИмяКолонки] = Ячейка.Текст; + НоваяСтрока[ИмяКолонки] = ПриведениеЗначениеКТипу(Ячейка.Текст, НайденнаяКолонка.ТипКолонки); Если СтрокаТаблицыПустая Тогда СтрокаТаблицыПустая = Не ЗначениеЗаполнено(Ячейка.Текст); КонецЕсли; @@ -1034,7 +1050,20 @@ АдресЗагруженныхДанных = ПоместитьВоВременноеХранилище(ЗагружаемыеДанные); КонецПроцедуры -Процедура ЗаполнитьТаблицуПоЗагруженнымДаннымИзФайла(ДанныеИзФайла, ШаблонСДанными, ИнформацияПоКолонкам) Экспорт +Функция ПриведениеЗначениеКТипу(Значение, ОписаниеТипов) + Для каждого Тип Из ОписаниеТипов.Типы() Цикл + Если Тип = Тип("Дата") Тогда + Возврат СтроковыеФункцииКлиентСервер.СтрокаВДату(Значение); + ИначеЕсли Тип = Тип("Число") Тогда + Возврат СтроковыеФункцииКлиентСервер.СтрокаВЧисло(Значение); + КонецЕсли; + КонецЦикла; + + Возврат Значение; + +КонецФункции + +Процедура ЗаполнитьТаблицуПоЗагруженнымДаннымИзФайла(ДанныеИзФайла, ШаблонСДанными, ИнформацияПоКолонкам) СтрокаЗаголовок= ДанныеИзФайла.Получить(0); СоответствиеКолонок = Новый Соответствие; @@ -1073,7 +1102,6 @@ КонецЕсли; КонецЦикла; КонецЦикла; - КонецПроцедуры @@ -1228,6 +1256,32 @@ /////////////// Загрузка данных ////////////////////////// +Функция ИнициализироватьКолонки(ИнформацияПоКолонкам, ШаблонСДанными, ВысотаШапки = 1) + + Для каждого Строка Из ИнформацияПоКолонкам Цикл + Строка.Позиция = -1; + КонецЦикла; + + Для НомерКолонки = 1 По ШаблонСДанными.ШиринаТаблицы Цикл + ЯчейкаЗаголовок = ШаблонСДанными.ПолучитьОбласть(ВысотаШапки, НомерКолонки, ВысотаШапки, НомерКолонки).ТекущаяОбласть; + + Если ЗначениеЗаполнено(ЯчейкаЗаголовок.Текст) Тогда + Отбор = Новый Структура("Синоним", СокрЛП(ЯчейкаЗаголовок.Текст)); + НайденныеКолонка = ИнформацияПоКолонкам.НайтиСтроки(Отбор); + Если НайденныеКолонка.Количество() > 0 Тогда + НайденныеКолонка[0].Позиция = НомерКолонки; + Иначе + Отбор = Новый Структура("ПредставлениеКолонки", СокрЛП(ЯчейкаЗаголовок.Текст)); + НайденныеКолонка = ИнформацияПоКолонкам.НайтиСтроки(Отбор); + Если НайденныеКолонка.Количество() > 0 Тогда + НайденныеКолонка[0].Позиция = НомерКолонки; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецФункции + Процедура ЗагрузитьФайлВТаблицу(ПараметрыВызоваСервера, АдресХранилища) Экспорт Расширение = ПараметрыВызоваСервера.Расширение; @@ -1235,364 +1289,44 @@ ИмяВременногоФайла = ПараметрыВызоваСервера.ИмяВременногоФайла; ИнформацияПоКолонкам = ПараметрыВызоваСервера.ИнформацияПоКолонкам; - Если Расширение = "xlsx" Тогда - ЗагрузитьФайлExcel2007ВТаблицу(ИмяВременногоФайла, ШаблонСДанными, ИнформацияПоКолонкам); - ИначеЕсли Расширение = "csv" Тогда + Если Расширение = "csv" Тогда ЗагрузитьCSVФайлВТаблицу(ИмяВременногоФайла, ШаблонСДанными, ИнформацияПоКолонкам); Иначе - ШаблонСДанными.Прочитать(ИмяВременногоФайла); + ЗагруженныйШаблонСДанными = Новый ТабличныйДокумент; + ЗагруженныйШаблонСДанными.Прочитать(ИмяВременногоФайла); + + НомерСтрокиСШапкойТаблицы = ?(ЗагрузкаДанныхИзФайлаКлиентСервер.КолонкиИмеютГруппировку(ИнформацияПоКолонкам), 2, 1); + + Адрес = ""; + ТабличныйДокументВТаблицуЗначений(ЗагруженныйШаблонСДанными, ИнформацияПоКолонкам, Адрес); + ЗагруженныеДанные = ПолучитьИзВременногоХранилища(Адрес); + + ОбластьВывода = ШаблонСДанными.ПолучитьОбласть(НомерСтрокиСШапкойТаблицы + 1, 1, НомерСтрокиСШапкойТаблицы + 1, ЗагруженныеДанные.Колонки.Количество()); + + Для Счетчик = 1 По ЗагруженныеДанные.Колонки.Количество() Цикл + ОбластьЗаполнения = ОбластьВывода.Область(1, Счетчик, 1, Счетчик); + Колонка = ИнформацияПоКолонкам.Найти(Счетчик, "Позиция"); + Если Колонка <> Неопределено И Колонка.Видимость Тогда + ОбластьЗаполнения.Примечание.Текст = Строка(Счетчик); + ОбластьЗаполнения.Параметр = Колонка.ИмяКолонки; + ОбластьЗаполнения.Заполнение = ТипЗаполненияОбластиТабличногоДокумента.Параметр; + КонецЕсли; + КонецЦикла; + + Для Каждого Выборка Из ЗагруженныеДанные Цикл + ОбластьВывода.Параметры.Заполнить(Выборка); + ШаблонСДанными.Вывести(ОбластьВывода); + КонецЦикла; + КонецЕсли; - АдресХранилища = ПоместитьВоВременноеХранилище(ШаблонСДанными, АдресХранилища); + УдалитьФайлы(ИмяВременногоФайла); КонецПроцедуры -#Область ЗагрузкаФайловФорматаExcel2007 - -Процедура ЗагрузитьФайлExcel2007ВТаблицу(ПутьКФайлу, ШаблонСДанными, ИнформацияПоКолонкам) Экспорт - - Файл = Новый Файл(ПутьКФайлу); - Если НЕ Файл.Существует() Тогда - Возврат; - КонецЕсли; - - Таблица = ТаблицаИзФайлаExcel2007(ПутьКФайлу); - Если Таблица <> Неопределено Тогда - ЗаполнитьТаблицуПоЗагруженнымДаннымИзФайла(Таблица, ШаблонСДанными, ИнформацияПоКолонкам); - КонецЕсли; - -КонецПроцедуры - -Функция ТаблицаИзФайлаExcel2007(ПутьКФайлу) - - ВременныйКаталог = КаталогВременныхФайлов() + ПолучитьРазделительПути() + "excel2007"; - УдалитьФайлы(ВременныйКаталог); - - РаспаковатьФайл(ПутьКФайлу, ВременныйКаталог); - - ФайлСтрок = ВременныйКаталог + ПолучитьРазделительПути() + "xl" + ПолучитьРазделительПути() +"sharedStrings.xml"; - СписокСтрок = ПрочитатьСписокСтрок(ФайлСтрок); - - ФайлФорматов = ВременныйКаталог + ПолучитьРазделительПути() + "xl" + ПолучитьРазделительПути() +"styles.xml"; - СписокФорматов = ПрочитатьСписокФорматов(ФайлФорматов); - - НомерЛиста = 1; - ФайлЛиста = ВременныйКаталог + ПолучитьРазделительПути() + "xl" + ПолучитьРазделительПути() + "worksheets" + ПолучитьРазделительПути() + "sheet" + НомерЛиста + ".xml"; - Файл = Новый Файл(ФайлЛиста); - Если НЕ Файл.Существует() Тогда - Возврат Неопределено; - КонецЕсли; - - МассивБукв = ПолучитьМассивБукв(); - ДеревоДанных = ПолучитьДеревоДанных(ФайлЛиста); - - Таблица = Новый ТаблицаЗначений; - - // Создаем колонки - Колонки = ДеревоДанных.Строки.Найти("dimension", "Объект", Истина); - Счетчик = 0; - Для Каждого Строка Из Колонки.Строки Цикл - Если Строка.Объект = "ref" Тогда - Диапазон = Строка.Значение; - // Поиск максимального значения колонки. - Счетчик = МассивБукв.Количество(); - Пока Счетчик > 0 Цикл - Счетчик = Счетчик - 1; - Если СтрНайти(Диапазон, МассивБукв[Счетчик]) > 0 Тогда - Для Индекс = 0 По Счетчик Цикл - Таблица.Колонки.Добавить(МассивБукв[Индекс]); - КонецЦикла; - Счетчик = 0; - КонецЕсли; - КонецЦикла; - Прервать; - КонецЕсли; - КонецЦикла; - - // читаем строки - СтрСтрок = ДеревоДанных.Строки.Найти("sheetData", "Объект", Истина); - Для Каждого Строка Из СтрСтрок.Строки Цикл - НоваяСтрока = Таблица.Добавить(); - - Для Каждого Колонка Из Строка.Строки Цикл - Если Колонка.Объект <> "c" Тогда - Продолжить; - КонецЕсли; - - ЗначениеЯчейки = Неопределено; - - СтрЗначение = Колонка.Строки.Найти("v", "Объект"); - Если СтрЗначение <> Неопределено Тогда - ЗначениеЯчейки = СтрЗначение.Значение; - КонецЕсли; - - ЯчейкаСодержитТекст = Ложь; - СтрЗначение = Колонка.Строки.Найти("t", "Объект"); - Если СтрЗначение <> Неопределено И СтрЗначение.Значение = "s" И ЗначениеЯчейки <> Неопределено Тогда - ЯчейкаСодержитТекст = Истина; - Позиция = Число(ЗначениеЯчейки); - Если СписокСтрок.Количество() > Позиция Тогда - ЗначениеЯчейки = СписокСтрок.Получить(Позиция).Значение; - КонецЕсли; - КонецЕсли; - - сОбъект = Колонка.Строки.Найти("s", "Объект"); - Если сОбъект <> Неопределено Тогда - СтрЗначение = СтрокуВЧисло(Колонка.Строки.Найти("s", "Объект").Значение, -1); - Если СтрЗначение >= 0 Тогда - ИмяФормата = СписокФорматов.Получить(СтрЗначение); - Если ИмяФормата = "Дата" ИЛИ ИмяФормата = "ДатаВремя" ИЛИ ИмяФормата = "Время" Тогда - Если ЗначениеЗаполнено(ЗначениеЯчейки) И НЕ ЯчейкаСодержитТекст Тогда - ПозицияРазделителя = СтрНайти(ЗначениеЯчейки, "."); - Если ПозицияРазделителя > 0 Тогда - КоличествоДней = СтрокуВЧисло(Лев(ЗначениеЯчейки, ПозицияРазделителя - 1)) * 86400 - 2 * 86400; - КоличествоСекунд = СтрокуВЧисло(Сред(ЗначениеЯчейки, ПозицияРазделителя + 1)) - 2 * 60; - Иначе - КоличествоДней = СтрокуВЧисло(ЗначениеЯчейки) * 86400 - 2 * 86400; - КоличествоСекунд = 0; - КонецЕсли; - ПолученнаяДата = Дата(1900, 1, 1, 0, 0, 0) + КоличествоДней + КоличествоСекунд; - Если ИмяФормата = "Дата" Тогда - ЗначениеЯчейки = Формат(ПолученнаяДата, "ДЛФ=D"); - ИначеЕсли ИмяФормата = "ДатаВремя" Тогда - ЗначениеЯчейки = Формат(ПолученнаяДата, "ДЛФ=DT"); - ИначеЕсли ИмяФормата = "Время" Тогда - ЗначениеЯчейки = Формат(ПолученнаяДата, "ДЛФ=T"); - КонецЕсли; - КонецЕсли; - Иначе - Если ИмяФормата = "Число" Тогда - ЗначениеЯчейкиЧисло = Формат(СтрокуВЧисло(ЗначениеЯчейки), "ЧРГ=''; ЧГ=0"); - Если НЕ ЗначениеЗаполнено(ЗначениеЯчейкиЧисло) Тогда - ЗначениеЯчейки = Формат(ЗначениеЯчейки, "ЧРГ=''; ЧГ=0"); - Иначе - ЗначениеЯчейки = ЗначениеЯчейкиЧисло; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - // поиск колонки - СтрЗначение = Колонка.Строки.Найти("r", "Объект"); - Если СтрЗначение <> Неопределено Тогда - ИмяКолонки = СтрЗначение.Значение; - КонецЕсли; - ИндексСтроки = Неопределено; - Счетчик = МассивБукв.Количество(); - Пока Счетчик > 0 Цикл - Счетчик = Счетчик - 1; - Если СтрНайти(ИмяКолонки, МассивБукв[Счетчик])>0 Тогда - ИндексСтроки = Счетчик; - Счетчик = 0; - КонецЕсли; - КонецЦикла; - - НоваяСтрока[МассивБукв[ИндексСтроки]] = ЗначениеЯчейки; - КонецЦикла; - КонецЦикла; - Возврат Таблица; - -КонецФункции - -Процедура РаспаковатьФайл(Файл, Каталог) - Архив = Новый ЧтениеZipФайла; - Архив.Открыть(Файл); - Архив.ИзвлечьВсе(Каталог, РежимВосстановленияПутейФайловZIP.Восстанавливать); -КонецПроцедуры - -Функция ПолучитьМассивБукв() - МассивБукв = Новый Массив; - МассивБукв.Добавить("A"); - МассивБукв.Добавить("B"); - МассивБукв.Добавить("C"); - МассивБукв.Добавить("D"); - МассивБукв.Добавить("E"); - МассивБукв.Добавить("F"); - МассивБукв.Добавить("G"); - МассивБукв.Добавить("H"); - МассивБукв.Добавить("I"); - МассивБукв.Добавить("J"); - МассивБукв.Добавить("K"); - МассивБукв.Добавить("L"); - МассивБукв.Добавить("M"); - МассивБукв.Добавить("N"); - МассивБукв.Добавить("O"); - МассивБукв.Добавить("P"); - МассивБукв.Добавить("Q"); - МассивБукв.Добавить("R"); - МассивБукв.Добавить("S"); - МассивБукв.Добавить("T"); - МассивБукв.Добавить("U"); - МассивБукв.Добавить("V"); - МассивБукв.Добавить("W"); - МассивБукв.Добавить("X"); - МассивБукв.Добавить("Y"); - МассивБукв.Добавить("Z"); - - Возврат МассивБукв; -КонецФункции - -Функция ПрочитатьСписокСтрок(ФайлСтрок) - - Строки = Новый СписокЗначений; - ЭлементСпискаЗначений = Неопределено; - ПроверкаНаличияФайла = Новый Файл(ФайлСтрок); - - Если ПроверкаНаличияФайла.Существует() Тогда - - XMLФайл = Новый ЧтениеXML; - XMLФайл.ОткрытьФайл(ФайлСтрок); - Пока XMLФайл.Прочитать() Цикл - - Если XMLФайл.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда - - Если XMLФайл.Имя = "sst" Тогда - КоличествоЗаписей = XMLФайл.ПолучитьАтрибут("uniqueCount"); // Количество полей (не используется на текущем этапе) - ИначеЕсли XMLФайл.Имя = "si" Тогда - ЭлементСпискаЗначений = Строки.Добавить(""); - КонецЕсли; - - ИначеЕсли XMLФайл.ТипУзла = ТипУзлаXML.Текст Тогда - ЭлементСпискаЗначений.Значение = ЭлементСпискаЗначений.Значение + ?(ЗначениеЗаполнено(ЭлементСпискаЗначений.Значение), XMLФайл.Значение, СокрЛ(XMLФайл.Значение)); - КонецЕсли; - - КонецЦикла; - XMLФайл.Закрыть(); - - КонецЕсли; - Возврат Строки; -КонецФункции - -Функция ПолучитьДеревоДанных(Файл) - - ДеревоДанных = Новый ДеревоЗначений; - ДеревоДанных.Колонки.Добавить("Объект"); - ДеревоДанных.Колонки.Добавить("Значение"); - - ЧтениеXML = Новый ЧтениеXML; - ЧтениеXML.ОткрытьФайл(Файл); - - ТекЭлемент = Неопределено; - ТекБаза = Неопределено; - - Пока ЧтениеXML.Прочитать() Цикл - Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда - РежимЗагрузки = ЧтениеXML.Имя; - - Если ТекЭлемент = Неопределено Тогда - ТекЭлемент = ДеревоДанных.Строки.Добавить(); - ТекЭлемент.Объект = РежимЗагрузки; - Иначе - ТекЭлемент = ТекЭлемент.Строки.Добавить(); - ТекЭлемент.Объект = РежимЗагрузки; - КонецЕсли; - - ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда - Если ТекЭлемент = Неопределено Тогда - ТекЭлемент = Неопределено; - Иначе - ТекЭлемент = ТекЭлемент.Родитель; - КонецЕсли; - ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда - ТекЭлемент.Значение = ЧтениеXML.Значение; - КонецЕсли; - - Для Индекс = 0 По ЧтениеXML.КоличествоАтрибутов() - 1 Цикл - Строка = ТекЭлемент.Строки.Добавить(); - Строка.Объект = ЧтениеXML.ИмяАтрибута(Индекс); - Строка.Значение = ЧтениеXML.ЗначениеАтрибута(Индекс); - КонецЦикла; - КонецЦикла; - - ЧтениеXML.Закрыть(); - - Возврат ДеревоДанных; -КонецФункции - -Функция ПрочитатьСписокФорматов(ФайлФорматов) - - ХМЛ = Новый ЧтениеXML; - ХМЛ.ОткрытьФайл(ФайлФорматов); - ОписаниеФорматов = Новый Соответствие; - - Пока ХМЛ.Прочитать() Цикл - Если ХМЛ.ТипУзла = ТипУзлаXML.НачалоЭлемента И ХМЛ.Имя = "cellXfs" Тогда - - Позиция = 0; - Пока ХМЛ.Прочитать() Цикл - Если ХМЛ.ТипУзла = ТипУзлаXML.НачалоЭлемента И ХМЛ.Имя = "xf" Тогда - - Если ХМЛ.ЗначениеАтрибута("numFmtId") <> Неопределено Тогда - ОписаниеФорматов.Вставить(Позиция, "Строка"); // Общий формат 0 берем как строку - НомерФормата = Число(ХМЛ.ЗначениеАтрибута("numFmtId")); - Если НомерФормата > 0 И НомерФормата < 12 Тогда - ОписаниеФорматов[Позиция] = "Число"; - ИначеЕсли НомерФормата > 13 И НомерФормата <= 17 Тогда - ОписаниеФорматов[Позиция] = "Дата"; - ИначеЕсли НомерФормата >= 18 И НомерФормата <= 21 Тогда - ОписаниеФорматов[Позиция] = "Время"; - ИначеЕсли НомерФормата = 22 Тогда - ОписаниеФорматов[Позиция] = "ДатаВремя"; - ИначеЕсли НомерФормата >= 164 Тогда // Пользовательские форматы пока оставляем текстом, но необходимо смотреть по признакам. - ОписаниеФорматов[Позиция] = "Строка"; - КонецЕсли; - - КонецЕсли; - Позиция = Позиция + 1; - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЦикла; - - ХМЛ.Закрыть(); - Возврат ОписаниеФорматов; -КонецФункции - -// Превращает строку в число без вызова исключений. Стандартная функция преобразования. -// Число() строго контролирует отсутствие каких либо символов кроме числовых. -// -Функция СтрокуВЧисло(Знач Значение, ЗначениеПоУмолчанию = 0) - - Попытка - Если Значение = Неопределено ИЛИ Значение ="0" Тогда - - // Представление значения по умолчанию обрабатываем отдельно - Результат =ЗначениеПоУмолчанию; - - Иначе - - СтепеньЧисла = 0; - Позиция = СтрНайти(Значение, "E"); - Если Позиция > 0 Тогда - СтепеньЧисла = Сред(Значение, Позиция + 1); - Значение = Лев(Значение, Позиция - 1); - КонецЕсли; - - ЦелевойТип = Новый ОписаниеТипов("Число"); - Результат = ЦелевойТип.ПривестиЗначение(Значение); - - Если СтепеньЧисла <> 0 Тогда - Результат = Результат * Pow(10, СтепеньЧисла); - КонецЕсли; - - КонецЕсли; - - Исключение - - Результат = Значение; - - КонецПопытки; - - Возврат Результат; - -КонецФункции - -#КонецОбласти - #Область РаботаСCSVФайлами -Процедура ЗагрузитьCSVФайлВТаблицу(ИмяФайла, ШаблонСДанными, ИнформацияПоКолонкам) Экспорт +Процедура ЗагрузитьCSVФайлВТаблицу(ИмяФайла, ШаблонСДанными, ИнформацияПоКолонкам) Файл = Новый Файл(ИмяФайла); Если НЕ Файл.Существует() Тогда @@ -1612,12 +1346,10 @@ Позиция = 1; Для каждого Колонка Из КолонкиШапки Цикл - НайденнаяКолонка = НайтиИнформациюОКолонке(ИнформацияПоКолонкам, "Синоним", Колонка); Если НайденнаяКолонка = Неопределено Тогда НайденнаяКолонка = НайтиИнформациюОКолонке(ИнформацияПоКолонкам, "ПредставлениеКолонки", Колонка); КонецЕсли; - Если НайденнаяКолонка <> Неопределено Тогда НоваяКолонка = Источник.Колонки.Добавить(); НоваяКолонка.Имя = НайденнаяКолонка.ИмяКолонки; @@ -1680,6 +1412,8 @@ #Область ДлительныеОперации +// Запись сопоставленных данных в программу +// Процедура ЗаписатьСопоставленныеДанные(ПараметрыВыгрузки, АдресХранилища) Экспорт СопоставленныеДанные = ПараметрыВыгрузки.СопоставленныеДанные; @@ -1695,12 +1429,36 @@ ИмяСправочника = РазложитьПолноеИмяОбъекта(ИмяОбъектаСопоставления).НазваниеОбъекта; МенеджерСправочника = Справочники[ИмяСправочника]; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + ВидыКонтактнойИнформации = МодульУправлениеКонтактнойИнформацией.ВидыКонтактнойИнформацияОбъекта(Справочники[ИмяСправочника].ПустаяСсылка()); + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + Свойства = Новый Соответствие; + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + ПустаяСсылкаНаОбъект = Справочники[ИмяСправочника].ПустаяСсылка(); + Если МодульУправлениеСвойствами.ИспользоватьДопРеквизиты(ПустаяСсылкаНаОбъект) + ИЛИ МодульУправлениеСвойствами.ИспользоватьДопСведения(ПустаяСсылкаНаОбъект) Тогда + СписокСвойств = МодульУправлениеСвойствами.ПолучитьСписокСвойств(ПустаяСсылкаНаОбъект); + Для каждого Свойство Из СписокСвойств Цикл + Свойства.Вставить(Свойство.Наименование, Свойство); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + ТаблицаСвойств = Новый ТаблицаЗначений; + ТаблицаСвойств.Колонки.Добавить("Свойство"); + ТаблицаСвойств.Колонки.Добавить("Значение"); + НомерСтроки = 0; ВсегоСтрок = СопоставленныеДанные.Количество(); - Для каждого СтрокаТаблицы Из СопоставленныеДанные Цикл + Для каждого СтрокаТаблицы Из СопоставленныеДанные Цикл + + НеобходимоОчиститьКонтактнуюИнформацию = Ложь; НомерСтроки = НомерСтроки + 1; + НачатьТранзакцию(); Попытка - НачатьТранзакцию(); Если НЕ ЗначениеЗаполнено(СтрокаТаблицы.ОбъектСопоставления) Тогда Если СоздаватьЕслиНеСопоставлено Тогда ЭлементСправочника = МенеджерСправочника.СоздатьЭлемент(); @@ -1724,20 +1482,47 @@ ЭлементСправочника = СтрокаТаблицы.ОбъектСопоставления.ПолучитьОбъект(); СтрокаТаблицы.РезультатСопоставленияСтроки = "Обновлен"; + НеобходимоОчиститьКонтактнуюИнформацию = Истина; Если ЭлементСправочника = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Номенклатура с артикулом %1 не существует.'"), - СтрокаТаблицы.Артикул); + СтрокаТаблицы.Артикул); КонецЕсли; КонецЕсли; Для каждого Колонка Из ИнформацияПоКолонкам Цикл Если Колонка.Видимость Тогда - ЭлементСправочника[Колонка.ИмяКолонки] = СтрокаТаблицы[Колонка.ИмяКолонки]; + Если СтрНачинаетсяС(Колонка.ИмяКолонки, "КонтактнаяИнформация_") Тогда + ИмяВидаКИ = СтандартныеПодсистемыСервер.ПреобразоватьАдаптированноеНаименованиеКолонкиВСтроку(Сред(Колонка.ИмяКолонки, 22)); + ВидКонтактнойИнформации = ВидыКонтактнойИнформации.Найти(ИмяВидаКИ, "Наименование"); + Если НеобходимоОчиститьКонтактнуюИнформацию Тогда + ЭлементСправочника.КонтактнаяИнформация.Очистить(); + НеобходимоОчиститьКонтактнуюИнформацию = Ложь; + КонецЕсли; + Если ВидКонтактнойИнформации <> Неопределено Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда + МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); + XMLПредставление = МодульУправлениеКонтактнойИнформацией.КонтактнаяИнформацияXMLПоПредставлению(СтрокаТаблицы[Колонка.ИмяКолонки], ВидКонтактнойИнформации.Ссылка); + МодульУправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию(ЭлементСправочника, XMLПредставление, ВидКонтактнойИнформации.Ссылка, ВидКонтактнойИнформации.Тип); + КонецЕсли; + КонецЕсли; + ИначеЕсли СтрНачинаетсяС(Колонка.ИмяКолонки, "ДополнительныйРеквизит_") Тогда + ДобавитьЗначениеСвойства(ТаблицаСвойств, Свойства, "ДополнительныйРеквизит_", Колонка.ИмяКолонки, СтрокаТаблицы[Колонка.ИмяКолонки]); + ИначеЕсли СтрНачинаетсяС(Колонка.ИмяКолонки, "Свойство_") Тогда + ДобавитьЗначениеСвойства(ТаблицаСвойств, Свойства, "Свойство_", Колонка.ИмяКолонки, СтрокаТаблицы[Колонка.ИмяКолонки]); + Иначе + ЭлементСправочника[Колонка.ИмяКолонки] = СтрокаТаблицы[Колонка.ИмяКолонки]; + КонецЕсли; КонецЕсли; КонецЦикла; - Если ЭлементСправочника.ПроверитьЗаполнение() Тогда + УстановитьПроцентПрогресса(ВсегоСтрок, НомерСтроки); + Если ЭлементСправочника.ПроверитьЗаполнение() Тогда ЭлементСправочника.Записать(); + // Свойства записываем когда объект уже существует + Если ТаблицаСвойств.Количество() > 0 И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами"); + МодульУправлениеСвойствами.ЗаписатьСвойстваУОбъекта(ЭлементСправочника.Ссылка, ТаблицаСвойств); + КонецЕсли; ЗафиксироватьТранзакцию(); Иначе СтрокаТаблицы.РезультатСопоставленияСтроки = "Пропущен"; @@ -1750,18 +1535,14 @@ КонецЦикла; СтрокаТаблицы.ОписаниеОшибки = ТекстСообщений; КонецЕсли; - ОтменитьТранзакцию(); - КонецЕсли; - - УстановитьПроцентПрогресса(ВсегоСтрок, НомерСтроки); Исключение - ОтменитьТранзакцию(); СтрокаТаблицы.РезультатСопоставленияСтроки = "Пропущен"; СтрокаТаблицы.ОписаниеОшибки = НСтр("ru = 'Невозможна запись из-за некорректности данных'"); + ОтменитьТранзакцию(); КонецПопытки; - + КонецЦикла; АдресХранилища = ПоместитьВоВременноеХранилище(СопоставленныеДанные, АдресХранилища); @@ -1908,7 +1689,7 @@ // Доступность объектов метаданных по функциональным опциям. // -Функция ДоступностьОбъектовПоОпциям(ИмяОбъекта) Экспорт +Функция ДоступностьОбъектовПоОпциям(ИмяОбъекта) Параметры = ОбщегоНазначенияПовтИсп.ОпцииИнтерфейса(); Если ТипЗнч(Параметры) = Тип("ФиксированнаяСтруктура") Тогда Параметры = Новый Структура(Параметры); @@ -1935,6 +1716,17 @@ Возврат ДоступностьОбъектов; КонецФункции +//////////////////// Служебные методы /////////////////////////////////////////// + +Процедура ДобавитьЗначениеСвойства(ТаблицаСвойств, Свойства, Префикс, ИмяКолонки, Значение) + ИмяСвойства = СокрЛП(СтандартныеПодсистемыСервер.ПреобразоватьАдаптированноеНаименованиеКолонкиВСтроку(Сред(ИмяКолонки, СтрДлина(Префикс) + 1))); + Свойство = Свойства.Получить(ИмяСвойства); + Если Свойство <> Неопределено Тогда + НоваяСтрокаСвойств = ТаблицаСвойств.Добавить(); + НоваяСтрокаСвойств.Свойство = Свойство.Ссылка; + НоваяСтрокаСвойств.Значение = Значение; + КонецЕсли; +КонецПроцедуры #КонецОбласти diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Templates/ПростойШаблон/Template.mxlx b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Templates/ПростойШаблон/Template.mxlx index 49fdf6b30..385a29386 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Templates/ПростойШаблон/Template.mxlx +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/Templates/ПростойШаблон/Template.mxlx @@ -30,10 +30,32 @@ </c> </row> </rowsItem> + <rowsItem> + <index>4</index> + <row> + <c> + <c> + <f>3</f> + <parameter>Группа</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>5</index> + <row> + <c> + <c> + <f>4</f> + <parameter>Заголовок</parameter> + </c> + </c> + </row> + </rowsItem> <templateMode>true</templateMode> - <defaultFormatIndex>3</defaultFormatIndex> - <height>1</height> - <vgRows>1</vgRows> + <defaultFormatIndex>5</defaultFormatIndex> + <height>6</height> + <vgRows>6</vgRows> <namedItem xsi:type="NamedItemCells"> <name>Заголовок</name> <area> @@ -44,7 +66,21 @@ <endColumn>0</endColumn> </area> </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>Шапка2Строки</name> + <area> + <type>Rectangle</type> + <beginRow>4</beginRow> + <endRow>5</endRow> + <beginColumn>0</beginColumn> + <endColumn>0</endColumn> + </area> + </namedItem> + <line width="1" gap="false"> + <v8ui:style xsi:type="v8ui:SpreadsheetDocumentCellLineType">Solid</v8ui:style> + </line> <font ref="style:NormalTextFont" bold="true" italic="false" underline="false" strikeout="false" kind="StyleItem"/> + <font faceName="Arial" height="8" bold="true" italic="false" underline="false" strikeout="false" kind="Absolute"/> <format> <width>135</width> </format> @@ -60,6 +96,15 @@ <autoIndent>0</autoIndent> <mask/> </format> + <format> + <font>1</font> + <border>0</border> + <fillType>Parameter</fillType> + </format> + <format> + <border>0</border> + <fillType>Parameter</fillType> + </format> <format> <width>72</width> </format> diff --git a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ЗагрузкаДанныхИзФайла.mdo b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ЗагрузкаДанныхИзФайла.mdo index f8cb598b9..80ba84c27 100644 --- a/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ЗагрузкаДанныхИзФайла.mdo +++ b/SSL/src/DataProcessors/ЗагрузкаДанныхИзФайла/ЗагрузкаДанныхИзФайла.mdo @@ -11,6 +11,11 @@ </synonym> <useStandardCommands>true</useStandardCommands> <defaultForm>DataProcessor.ЗагрузкаДанныхИзФайла.Form.ЗагрузкаДанныхИзФайла</defaultForm> + <help> + <pages> + <lang>ru</lang> + </pages> + </help> <explanation> <key>ru</key> <value>Загрузка справочной информации из табличных документов (файлы Microsoft Office Excel, Microsoft Office Word, OpenOffice Calc и др.) в справочники программы.</value> @@ -21,6 +26,11 @@ <key>ru</key> <value>Загрузка данных из файла</value> </synonym> + <help> + <pages> + <lang>ru</lang> + </pages> + </help> <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> </forms> diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form index 69d5d7ecf..e22689d20 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form @@ -37,14 +37,6 @@ <userVisible> <common>true</common> </userVisible> - <title> - <key>ru</key> - <value> </value> - - - ru - - false КоманднаяПанельЛеваяExtendedTooltip @@ -220,14 +212,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - КоманднаяПанельПраваяExtendedTooltip 51 @@ -249,14 +233,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - КоманднаяПанельРасширеннаяПодсказка 46 @@ -767,6 +743,7 @@ Vertical auto + false
      @@ -870,6 +847,7 @@ Page auto + false true diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Help/ru.html b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Help/ru.html index c4681c1b6..fcd854ea6 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 fa3f96144..e69de29bb 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ObjectModule.bsl @@ -1,37 +0,0 @@ -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -#Область СлужебныеПроцедурыИФункции - -// Процедура заполняет табличную часть списком валют. В список попадают только -// валюты, курс которых не зависит от курса других валют. -// -Процедура ЗаполнитьСписокВалют() Экспорт - - СписокВалют.Очистить(); - - ЗагружаемыеВалюты = РаботаСКурсамиВалют.ПолучитьМассивЗагружаемыхВалют(); - - Для Каждого ЭлементВалюта Из ЗагружаемыеВалюты Цикл - НоваяСтрока = СписокВалют.Добавить(); - НоваяСтрока.КодВалюты = ЭлементВалюта.Код; - НоваяСтрока.Валюта = ЭлементВалюта; - КонецЦикла; - -КонецПроцедуры - -// Процедура для каждой загружаемой валюты запрашивает файл с курсами. -// После загрузки, курсы, удовлетворяющие периоду записываются в регистр сведений. -// -Функция ЗагрузитьКурсыВалют(ПриЗагрузкеВозниклиОшибки = Ложь) Экспорт - - Возврат РаботаСКурсамиВалют.ЗагрузитьКурсыВалютПоПараметрам( - СписокВалют, - НачалоПериодаЗагрузки, - ОкончаниеПериодаЗагрузки, - ПриЗагрузкеВозниклиОшибки); - -КонецФункции - -#КонецОбласти - -#КонецЕсли diff --git a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl index 7a7fc17d2..99c22435d 100644 --- a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl @@ -1,5 +1,7 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ОписаниеПеременных + Перем Регистрация Экспорт; // Структура, содержащая параметры регистрации. Перем ПравилаРегистрацииОбъектов Экспорт; // Таблица значений с правилами регистрации объектов. Перем ФлагОшибки Экспорт; // глобальный флаг ошибки @@ -16,6 +18,8 @@ Перем БулевоЗначениеКорневойГруппыСвойств; // Булево значение для корневой группы свойств. Перем СообщенияОбОшибках; // Соответствие. Ключ - код ошибки, Значение - описание ошибки. +#КонецОбласти + #Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// @@ -436,8 +440,8 @@ // Свойство может быть свойством шапки или свойством ТЧ // если это свойство ТЧ, то переменная ПолноеНаименованиеСвойства // содержит наименование ТЧ и наименование свойства. - // Название ТЧ записано в кватратных скобках "[...]". - // Например, "[Организации].Организация" + // Название ТЧ записано в квадратных скобках "[...]". + // Например, "[Организации].Организация". ПолноеНаименованиеСвойства = одЗначениеЭлемента(Правила, ТипСтрока); ИмяТабличнойЧастиПланаОбмена = ""; @@ -703,7 +707,7 @@ СтрокаСмещения = ""; // Получаем строку смещения для группы свойств. - Для А = 0 По Смещение Цикл + Для НомерИтерации = 0 По Смещение Цикл СтрокаСмещения = СтрокаСмещения + " "; КонецЦикла; @@ -816,7 +820,7 @@ // // Пример: // СвойствоПланаОбмена <вид сравнения> &СвойствоОбъекта_МоеСвойство - // СвойствоПланаОбмена <вид сравнения> ДАТАВРЕМЯ(1987,10,19,0,0,0) + // СвойствоПланаОбмена <вид сравнения> ДАТАВРЕМЯ(1987,10,19,0,0,0). Если Правило.ЭтоСтрокаКонстанты Тогда @@ -1225,8 +1229,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Операторы основной программы. +#КонецОбласти + +#Область Инициализация ИнициализацияРеквизитовИМодульныхПеременных(); diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Form.form b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Form.form index 27682277e..592867123 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Form.form +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Form.form @@ -570,6 +570,7 @@ Vertical auto + false @@ -702,6 +703,7 @@ Vertical auto + false @@ -768,6 +770,7 @@ Vertical auto + false @@ -1448,6 +1451,7 @@ Vertical auto + false true diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Help/ru.html b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Help/ru.html index 6a6b45c21..8c8908770 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 2279d00e1..75e3cac88 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ЗаменаЭлементов/Module.bsl @@ -126,11 +126,11 @@ #Область ОбработчикиСобытийШапкиФормы &НаКлиенте -Процедура ПодсказкаВыбораЦелевогоЭлементаОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) +Процедура ПодсказкаВыбораЦелевогоЭлементаОбработкаНавигационнойСсылки(Элемент, Ссылка, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - Если НавигационнаяСсылка = "ПереключениеРежимаУдаления" Тогда + Если Ссылка = "ПереключениеРежимаУдаления" Тогда Если ТекущийВариантУдаления = "Непосредственно" Тогда ТекущийВариантУдаления = "Пометка" Иначе @@ -810,21 +810,23 @@ &НаКлиенте Процедура ПроверкаДопустимостиЗаменыПрикладнойОбласти(Знач ПараметрыШага) - - // Проверяем допустимость замены с прикладной точки зрения. + // Проверка допустимости замен с прикладной точки зрения. ТекстОшибки = ПроверитьВозможностьЗаменыСсылок(); - - Если ПустаяСтрока(ТекстОшибки) Тогда - // Все замены допустимы + Если ПустаяСтрока(ТекстОшибки) Тогда // Все замены допустимы. ЗавершитьШагМастера(ПараметрыШага); Возврат; КонецЕсли; - ПараметрыПредупреждения = Новый Структура; - ПараметрыПредупреждения.Вставить("Заголовок", НСтр("ru = 'Невозможно заменить элементы'")); - ПараметрыПредупреждения.Вставить("ТекстСообщения", ТекстОшибки); - ОткрытьФорму("Обработка.ЗаменаИОбъединениеЭлементов.Форма.МногострочноеПредупреждение", ПараметрыПредупреждения, ЭтотОбъект); + НастройкиДиалога = Новый Структура; + НастройкиДиалога.Вставить("ПредлагатьБольшеНеЗадаватьЭтотВопрос", Ложь); + НастройкиДиалога.Вставить("Картинка", БиблиотекаКартинок.Предупреждение32); + НастройкиДиалога.Вставить("КнопкаПоУмолчанию", 0); + НастройкиДиалога.Вставить("Заголовок", НСтр("ru = 'Невозможно заменить элементы'")); + Кнопки = Новый СписокЗначений; + Кнопки.Добавить(0, НСтр("ru = 'ОК'")); + + СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Неопределено, ТекстОшибки, Кнопки, НастройкиДиалога); КонецПроцедуры &НаСервере @@ -1303,7 +1305,8 @@ Если ИнформацияОЗадании.ИнформацияОбОшибке = Неопределено Тогда Если ИнформацияОЗадании.Результат = Истина Тогда // Полностью успешно - закрыть форму и вывести оповещение. - ПоказатьОповещениеПользователя(, + ПоказатьОповещениеПользователя( + , ПолучитьНавигационнуюСсылку(ЦелевойЭлемент), СообщениеОЗавершении(), БиблиотекаКартинок.Информация32); diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/МногострочноеПредупреждение/Module.bsl b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/МногострочноеПредупреждение/Module.bsl deleted file mode 100644 index 40b608e19..000000000 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/МногострочноеПредупреждение/Module.bsl +++ /dev/null @@ -1,44 +0,0 @@ - -#Область ОбработчикиСобытийФормы - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - - // Размещение заголовка. - Если Не ПустаяСтрока(Параметры.Заголовок) Тогда - Заголовок = Параметры.Заголовок; - ШиринаЗаголовка = 1.3 * СтрДлина(Заголовок); - Если ШиринаЗаголовка > 40 И ШиринаЗаголовка < 80 Тогда - Ширина = ШиринаЗаголовка; - КонецЕсли; - КонецЕсли; - - // Размещение текста. - Если СтрЧислоСтрок(Параметры.ТекстСообщения) < 15 Тогда - // Можно вывести все строки в виде надписи. - Элементы.ТекстСообщения.Заголовок = Параметры.ТекстСообщения; - Элементы.МногострочныйТекстСообщения.Видимость = Ложь; - Иначе - // Многострочный режим. - Элементы.ТекстСообщения.Видимость = Ложь; - ТекстСообщения = Параметры.ТекстСообщения; - КонецЕсли; - - // Сброс размеров и положения окна этой формы. - КлючСохраненияПоложенияОкна = Новый УникальныйИдентификатор; -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиКомандФормы - -&НаКлиенте -Процедура КомандаОК(Команда) - Закрыть(); -КонецПроцедуры - -#КонецОбласти diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Form.form b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Form.form index 05f5f232e..d3d500caf 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Form.form +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Form.form @@ -138,6 +138,7 @@ Vertical auto + false @@ -1372,6 +1373,7 @@ Vertical auto + false @@ -1505,6 +1507,7 @@ Vertical auto + false @@ -1571,6 +1574,7 @@ Vertical auto + false @@ -2252,6 +2256,7 @@ Vertical auto + false true diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Help/ru.html b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Help/ru.html index 0c8bf19d8..040a70ec3 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 e494e6a55..f29b5458e 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/Forms/ОбъединениеЭлементов/Module.bsl @@ -874,21 +874,23 @@ &НаКлиенте Процедура ШагВыборОсновногоЭлементаПередДействиемДалее(Знач ПараметрыШага, Знач ДополнительныеПараметры) Экспорт - - // Проверка на допустимость объединения с прикладной точки зрения. + // Проверка допустимости объединения с прикладной точки зрения. ТекстОшибки = ПроверитьВозможностьЗаменыСсылок(); - - Если ПустаяСтрока(ТекстОшибки) Тогда - // Все замены допустимы + Если ПустаяСтрока(ТекстОшибки) Тогда // Все объединения допустимы. ЗавершитьШагМастера(ПараметрыШага); Возврат; КонецЕсли; - ПараметрыПредупреждения = Новый Структура; - ПараметрыПредупреждения.Вставить("Заголовок", НСтр("ru = 'Невозможно объединить элементы'")); - ПараметрыПредупреждения.Вставить("ТекстСообщения", ТекстОшибки); - ОткрытьФорму("Обработка.ЗаменаИОбъединениеЭлементов.Форма.МногострочноеПредупреждение", ПараметрыПредупреждения, ЭтотОбъект); + НастройкиДиалога = Новый Структура; + НастройкиДиалога.Вставить("ПредлагатьБольшеНеЗадаватьЭтотВопрос", Ложь); + НастройкиДиалога.Вставить("Картинка", БиблиотекаКартинок.Предупреждение32); + НастройкиДиалога.Вставить("КнопкаПоУмолчанию", 0); + НастройкиДиалога.Вставить("Заголовок", НСтр("ru = 'Невозможно объединить элементы'")); + Кнопки = Новый СписокЗначений; + Кнопки.Добавить(0, НСтр("ru = 'ОК'")); + + СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Неопределено, ТекстОшибки, Кнопки, НастройкиДиалога); КонецПроцедуры &НаКлиенте @@ -1459,7 +1461,8 @@ Если ИнформацияОЗадании.ИнформацияОбОшибке = Неопределено Тогда Если ИнформацияОЗадании.Результат = Истина Тогда // Полностью успешно - закрыть форму и вывести оповещение. - ПоказатьОповещениеПользователя(, + ПоказатьОповещениеПользователя( + , ПолучитьНавигационнуюСсылку(ОсновнойЭлемент), СообщениеОЗавершении(), БиблиотекаКартинок.Информация32); diff --git a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/ЗаменаИОбъединениеЭлементов.mdo b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/ЗаменаИОбъединениеЭлементов.mdo index 165ac22f0..be450023d 100644 --- a/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/ЗаменаИОбъединениеЭлементов.mdo +++ b/SSL/src/DataProcessors/ЗаменаИОбъединениеЭлементов/ЗаменаИОбъединениеЭлементов.mdo @@ -38,15 +38,6 @@ PersonalComputer MobileDevice - - МногострочноеПредупреждение - - ru - Многострочное предупреждение - - PersonalComputer - MobileDevice - ОсновнаяСхемаКомпоновкиДанных diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form index e7a741c89..915aafef2 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form @@ -1816,6 +1816,7 @@ Vertical auto + false @@ -1897,6 +1898,7 @@ Vertical auto + false true diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl index b25482495..9a66614be 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl @@ -20,7 +20,7 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - ОбновитьТекущийСписок(); + ПодключитьОбработчикОжидания("ОбновитьТекущийСписок", 0.1, Истина); КонецПроцедуры @@ -60,14 +60,14 @@ &НаКлиенте Процедура ОбновитьТекущийСписок() - + Элементы.Страницы.ТекущаяСтраница = Элементы.ИндикаторДлительныхОпераций; РезультатВыполнения = ПрочитатьЖурнал(ОтборЖурналаРегистрации); ПараметрыОбработчикаОжидания = Новый Структура; - Если Не РезультатВыполнения.ЗаданиеВыполнено Тогда + Если Не РезультатВыполнения.ЗаданиеВыполнено Тогда ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина); ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.ПолеИндикаторДлительныхОпераций, "ФормированиеОтчета"); @@ -204,14 +204,18 @@ ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.ПолеИндикаторДлительныхОпераций, "НеИспользовать"); - РезультатВыполнения = ДлительныеОперации.ЗапуститьВыполнениеВФоне( - УникальныйИдентификатор, - "ЖурналРегистрации.ПрочитатьСобытияЖурналаРегистрации", - ПараметрыОтчета, - НСтр("ru = 'Защита персональных данных'")); - - АдресХранилища = РезультатВыполнения.АдресХранилища; - ИдентификаторЗадания = РезультатВыполнения.ИдентификаторЗадания; + Попытка + РезультатВыполнения = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификатор, + "ЖурналРегистрации.ПрочитатьСобытияЖурналаРегистрации", + ПараметрыОтчета, + НСтр("ru = 'Защита персональных данных'")); + АдресХранилища = РезультатВыполнения.АдресХранилища; + ИдентификаторЗадания = РезультатВыполнения.ИдентификаторЗадания; + Исключение + Элементы.Страницы.ТекущаяСтраница = Элементы.ЖурналРегистрации; + ВызватьИсключение; + КонецПопытки; Если РезультатВыполнения.ЗаданиеВыполнено Тогда ЗагрузитьПодготовленныеДанные(); diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Help/ru.html b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Help/ru.html index 40a724065..fc0ca2087 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Help/ru.html +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

        Согласно Федеральному закону от 27.06.2006 №152-Ф3 "О персональных данных" и подзаконным актам в программе реализована регистрация следующих событий:

        diff --git a/SSL/src/DataProcessors/ИнструментыРазработчикаПроверкаКонтрагентов/Commands/ИнструментыРазработчика/CommandModule.bsl b/SSL/src/DataProcessors/ИнструментыРазработчикаПроверкаКонтрагентов/Commands/ИнструментыРазработчика/CommandModule.bsl new file mode 100644 index 000000000..7019e7d7d --- /dev/null +++ b/SSL/src/DataProcessors/ИнструментыРазработчикаПроверкаКонтрагентов/Commands/ИнструментыРазработчика/CommandModule.bsl @@ -0,0 +1,10 @@ + +#Область ОбработчикиСобытий + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + ПараметрыФормы = Новый Структура("", ); + ОткрытьФорму("Обработка.ИнструментыРазработчикаПроверкаКонтрагентов.Форма", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка); +КонецПроцедуры + +#КонецОбласти \ 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..e2bd9d1e2 --- /dev/null +++ b/SSL/src/DataProcessors/ИнструментыРазработчикаПроверкаКонтрагентов/Forms/Форма/Form.form @@ -0,0 +1,203 @@ + + + + ГруппаСбросаНастроек + 3 + + СбросНастроек + 1 + true + true + + true + + + СбросНастроекРасширеннаяПодсказка + 2 + + <key>ru</key> + <value>- Отключение проверки контрагентов +- Сброс даты последнего отображения предложения на использование сервиса +- Cброс факта отказа от подключения к сервису +- Очистка состояний проверки контрагентов в разрезе контрагентов +- Очистка состояний проверки контрагентов в разрезе документов</value> + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + UsualButton + Form.Command.СбросНастроек + Normal + Auto + true + true + UserCmds + ShowBottom + Auto + + true + true + + true + + + ru + Группа сброса настроек + + + ГруппаСбросаНастроекРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + auto + Auto + Auto + + + + ГруппаПереходаКНастройкам + 5 + + ОткрытьНастройкиПроверкиКонтрагентов + 7 + + <key>ru</key> + <value>Открыть настройки проверки контрагентов</value> + + true + true + + true + + + ОткрытьНастройкиПроверкиКонтрагентовРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ОткрытьНастройкиПроверкиКонтрагентовКонтекстноеМеню + 8 + true + + Label + true + true + + + Click + ОткрытьНастройкиПроверкиКонтрагентовНажатие + + true + Left + + + true + true + + true + + + ru + Группа перехода к настройкам + + + ГруппаПереходаКНастройкамРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + auto + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + Left + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.ИнструментыРазработчикаПроверкаКонтрагентов + + + true + + + true + +
        true
        +
        + + СбросНастроек + + <key>ru</key> + <value>Сброс настроек</value> + + 1 + + ru + Сброс настроек + + + true + + + + СбросНастроек + + + DontUse + Auto + + + + + + +
        diff --git a/SSL/src/DataProcessors/ИнструментыРазработчикаПроверкаКонтрагентов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ИнструментыРазработчикаПроверкаКонтрагентов/Forms/Форма/Module.bsl new file mode 100644 index 000000000..8677e2ed8 --- /dev/null +++ b/SSL/src/DataProcessors/ИнструментыРазработчикаПроверкаКонтрагентов/Forms/Форма/Module.bsl @@ -0,0 +1,75 @@ +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура СбросНастроек(Команда) + СбросНастроекНаСервере(); + ПоказатьОповещениеПользователя(НСтр("ru = 'Проверка контрагентов'"),,НСтр("ru = 'Настройки проверки контрагентов сброшены'")); +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьНастройкиПроверкиКонтрагентовНажатие(Элемент) + ОткрытьФорму("ОбщаяФорма.НастройкиПроверкиКонтрагентов"); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервереБезКонтекста +Процедура СбросНастроекНаСервере() + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ПроверкаКонтрагентов", + "ПроверкаКонтрагентов_ДатаПоследнегоОтображенияПредложенияНаВключениеСервиса", Неопределено); + + УстановитьПривилегированныйРежим(Истина); + + ЭтоМодельСервисаВнутриОбласти = ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных(); + + НеМодельСервиса = НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено(); + + ПроверкаКонтрагентов.УдалитьРезультатПроверкиКонтрагентов(); + + // Очистка регистров. + Если ЭтоМодельСервисаВнутриОбласти ИЛИ НеМодельСервиса Тогда + + // Ветка для разделенной области в модели сервиса + // или для версии в "коробке". + ПроверкаКонтрагентов.УдалитьРезультатПроверкиКонтрагентовПоДокументам(); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + ПроверкаКонтрагентовВключена = ПроверкаКонтрагентов.ПроверкаКонтрагентовВключена(); + // В режиме проверки по кнопке при отключенной проверки данные в регистр все равно могут писаться. + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = '1. Очищены состояния контрагентов в данной области. + |2. Очищены состояния документов. + |3. Проверка не отключена. Для отключения Запустите сброс настроек повторно из неразделенной области.'")); + + Иначе + ВыключитьПроверку(); + КонецЕсли; + + Иначе + + // Ветка для модели сервиса, неразделенной области. + ВыключитьПроверку(); + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = '1. Очищены состояния контрагентов. + |2. Проверка отключена. + |3. Состояния документов не очищены. Данные по документам необходимо очищать из области данных. + |Запустите сброс настроек повторно из нужной области данных.'")); + + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ВыключитьПроверку() + + Константы.ИспользоватьПроверкуКонтрагентов.Установить(0); + +КонецПроцедуры + +#КонецОбласти + diff --git a/SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/СбросНастроекПроверкиКонтрагентов.mdo b/SSL/src/DataProcessors/ИнструментыРазработчикаПроверкаКонтрагентов/ИнструментыРазработчикаПроверкаКонтрагентов.mdo similarity index 66% rename from SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/СбросНастроекПроверкиКонтрагентов.mdo rename to SSL/src/DataProcessors/ИнструментыРазработчикаПроверкаКонтрагентов/ИнструментыРазработчикаПроверкаКонтрагентов.mdo index fefaff2d3..8ae304e36 100644 --- a/SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/СбросНастроекПроверкиКонтрагентов.mdo +++ b/SSL/src/DataProcessors/ИнструментыРазработчикаПроверкаКонтрагентов/ИнструментыРазработчикаПроверкаКонтрагентов.mdo @@ -4,12 +4,12 @@ - СбросНастроекПроверкиКонтрагентов + ИнструментыРазработчикаПроверкаКонтрагентов ru - Сброс настроек проверки контрагентов + Инструменты разработчика: проверка контрагентов - DataProcessor.СбросНастроекПроверкиКонтрагентов.Form.Форма + DataProcessor.ИнструментыРазработчикаПроверкаКонтрагентов.Form.Форма Форма @@ -20,10 +20,10 @@ MobileDevice - СбросНастроекПроверкиКонтрагентов + ИнструментыРазработчика ru - Сброс настроек проверки контрагентов + Инструменты разработчика NavigationPanelOrdinary Auto diff --git a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Help/ru.html b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеПериодаИОтбора/Help/ru.html index 55a004db1..fcbc4c844 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/РедактированиеСоставаНастроек/Help/ru.html b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/РедактированиеСоставаНастроек/Help/ru.html index c344d0f34..279e76484 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/СоставВыгрузки/Help/ru.html b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Forms/СоставВыгрузки/Help/ru.html index 91a00479e..ec21b39da 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/ИнтерактивноеИзменениеВыгрузки/Help/ru.html b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/Help/ru.html index cbadbbd4a..71a24b6c4 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 b4dd436a9..1d7da29e9 100644 --- a/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ИнтерактивноеИзменениеВыгрузки/ObjectModule.bsl @@ -148,7 +148,7 @@ // Источник - Строка, УникальныйИдентификатор - адрес объекта-источника во временном хранилище или данные. // // Возвращаемое значение: -// ОбработкаОбъект - ИнтерактивноеИзменениеВыгрузки +// ОбработкаОбъект - ИнтерактивноеИзменениеВыгрузки. // Функция ИнициализироватьЭтотОбъект(Знач Источник = "") Экспорт @@ -206,7 +206,7 @@ Возврат ПоместитьВоВременноеХранилище(Данные, АдресХранилища); КонецФункции -// Возвращает данные компоновщикв для общих отборов узла "УзелИнформационнойБазы". +// Возвращает данные компоновщика для общих отборов узла "УзелИнформационнойБазы". // Опирается на значения реквизитов "УзелИнформационнойБазы", "ДополнительнаяРегистрация". // // Параметры: @@ -691,7 +691,7 @@ // Устанавливает наборы данных в схему и инициализирует компоновщик. // Опирается на значения реквизитов: // "УзелИнформационнойБазы", "ДополнительнаяРегистрация", -// "ВариантВыгрузки", "ПериодОтбораВсехДокументов", "КомпоновщикОтбораВсехДокументов" +// "ВариантВыгрузки", "ПериодОтбораВсехДокументов", "КомпоновщикОтбораВсехДокументов". // // Параметры: // СписокИменМетаданных - Массив - имена метаданных (деревья значений группы ограничений, служебных @@ -762,6 +762,7 @@ | &ПричинаРегистрацииАвтоматически КАК ПричинаРегистрации |ИЗ | " + ПолноеИмяМетаданных + ".Изменения КАК " + ИмяНабора + "_Изменения + |ГДЕ " + ИмяНабора + "_Изменения.Узел = &УзелИнформационнойБазы |"; КонецЕсли; diff --git a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Form.form b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Form.form index 134b4d8ab..e78f29c03 100644 --- a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Form.form @@ -447,10 +447,10 @@ - ПакетыСтраниц + ПодготовленныеПакеты <key>ru</key> - <value>Пакеты страниц</value> + <value>Подготовленные пакеты</value> 4 @@ -589,10 +589,10 @@ - ВключатьВПервыйПоказ + НомерВРегистре <key>ru</key> - <value>Включать в первый показ</value> + <value>Номер в регистре</value> 10 @@ -683,7 +683,7 @@ - ПакетыСтраниц.ВебСтраницы + ПодготовленныеПакеты.ВебСтраницы ОтносительноеИмя diff --git a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl index d38b81a8c..31e2b375f 100644 --- a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Forms/Форма/Module.bsl @@ -110,12 +110,10 @@ &НаСервере Функция ПодготовитьДанныеФормы() - Сегодня = НачалоДня(ТекущаяДатаСеанса()); НаименованиеТекущегоРаздела = "-"; ТекущееПодменю = Неопределено; ДобавленоПодменю = 0; - МинимальныйПриоритет = 100; - ПакетыСтраницСМинимальнымПриоритетом = Новый Массив; + ПакетыСМинимальнымПриоритетом = Новый Массив; ГлавнаяЗанята = Ложь; ИспользоватьКэшРегистра = Истина; @@ -126,38 +124,29 @@ Если ИспользоватьКэшРегистра Тогда ЗаписьРегистра = РегистрыСведений.ПакетыИнформацииПриЗапуске.Получить(Новый Структура("Номер", 0)); - Кэш = ЗаписьРегистра.Состав.Получить(); - Иначе - Кэш = ИнформацияПриЗапуске.КэшДляПервогоПоказа(РеквизитФормыВЗначение("Объект")); - Кэш.Вставить("ПодготовленныеПакеты", Новый Соответствие); + ПакетыСтраниц = ЗаписьРегистра.Состав.Получить(); + Если ПакетыСтраниц = Неопределено Тогда + ИспользоватьКэшРегистра = Ложь; + КонецЕсли; КонецЕсли; - ПакетыСтраниц.Загрузить(Кэш.ПакетыСтраниц); - Если ПакетыСтраниц.Количество() = 0 Тогда + Если Не ИспользоватьКэшРегистра Тогда + ПакетыСтраниц = ИнформацияПриЗапуске.ПакетыСтраниц(РеквизитФормыВЗначение("Объект")); + КонецЕсли; + + Информация = ИнформацияПриЗапуске.ПодготовитьПакетыСтраницКВыводу(ПакетыСтраниц, НачалоДня(ТекущаяДатаСеанса())); + Если Информация.ПодготовленныеПакеты.Количество() = 0 + Или Информация.МинимальныйПриоритет = 100 Тогда Возврат Ложь; КонецЕсли; - ПакетыСтраниц.Сортировать("Раздел"); - Для Каждого ПакетСтраниц Из ПакетыСтраниц Цикл - // Пропуск если пакет не нужно показывать. - Если ПакетСтраниц.ДатаНачалаПоказа > Сегодня - Или ПакетСтраниц.ДатаОкончанияПоказа < Сегодня Тогда - Продолжить; - КонецЕсли; - + ПодготовленныеПакеты.Загрузить(Информация.ПодготовленныеПакеты); + ПодготовленныеПакеты.Сортировать("Раздел"); + Для Каждого ПакетСтраниц Из ПодготовленныеПакеты Цикл ПакетСтраниц.ЗаголовокФормы = НСтр("ru = 'Информация'"); - Если МинимальныйПриоритет > ПакетСтраниц.Приоритет Тогда - МинимальныйПриоритет = ПакетСтраниц.Приоритет; - ПакетыСтраницСМинимальнымПриоритетом = Новый Массив; - ПакетыСтраницСМинимальнымПриоритетом.Добавить(ПакетСтраниц); - ИначеЕсли МинимальныйПриоритет = ПакетСтраниц.Приоритет - И ПакетыСтраницСМинимальнымПриоритетом.Найти(ПакетСтраниц.ИмяМакета) = Неопределено Тогда - ПакетыСтраницСМинимальнымПриоритетом.Добавить(ПакетСтраниц); - КонецЕсли; - - Если Не ЗначениеЗаполнено(ПакетСтраниц.НаименованиеСтартовойСтраницы) Тогда - Продолжить; + Если ПакетСтраниц.Приоритет = Информация.МинимальныйПриоритет Тогда + ПакетыСМинимальнымПриоритетом.Добавить(ПакетСтраниц); КонецЕсли; Если СтрНачинаетсяС(ПакетСтраниц.Раздел, "_") Тогда @@ -180,7 +169,7 @@ КонецЕсли; ИначеЕсли НаименованиеТекущегоРаздела <> ПакетСтраниц.Раздел Тогда НаименованиеТекущегоРаздела = ПакетСтраниц.Раздел; - + ЭтоГлавная = (ПакетСтраниц.Раздел = НСтр("ru = 'Главная'")); Если ЭтоГлавная И Не ГлавнаяЗанята Тогда ПакетСтраниц.Идентификатор = "ГлавнаяСтраница"; @@ -219,25 +208,21 @@ Элементы.ГлавнаяСтраница.Видимость = ГлавнаяЗанята; - Если МинимальныйПриоритет = 100 Тогда - Возврат Ложь; - КонецЕсли; - // Определение пакета для отображения. - ГенераторСлучайныхЧисел = Новый ГенераторСлучайныхЧисел; - НомерСтроки = ГенераторСлучайныхЧисел.СлучайноеЧисло(1, ПакетыСтраницСМинимальнымПриоритетом.Количество()); - СтартовыйПакетСтраниц = ПакетыСтраницСМинимальнымПриоритетом[НомерСтроки-1]; + ГСЧ = Новый ГенераторСлучайныхЧисел; + НомерСтроки = ГСЧ.СлучайноеЧисло(1, ПакетыСМинимальнымПриоритетом.Количество()); + СтартовыйПакетСтраниц = ПакетыСМинимальнымПриоритетом[НомерСтроки-1]; // Чтение пакета из регистра. - НомерПакета = Кэш.ПодготовленныеПакеты.Получить(СтартовыйПакетСтраниц.ИмяМакета); - Если НомерПакета = Неопределено Тогда - ФайлыПакета = Неопределено; - Иначе - ЗаписьРегистра = РегистрыСведений.ПакетыИнформацииПриЗапуске.Получить(Новый Структура("Номер", НомерПакета)); + Если ИспользоватьКэшРегистра Тогда + Фильтр = Новый Структура("Номер", СтартовыйПакетСтраниц.НомерВРегистре); + ЗаписьРегистра = РегистрыСведений.ПакетыИнформацииПриЗапуске.Получить(Фильтр); ФайлыПакета = ЗаписьРегистра.Состав.Получить(); + Иначе + ФайлыПакета = Неопределено; КонецЕсли; Если ФайлыПакета = Неопределено Тогда - ФайлыПакета = ИнформацияПриЗапуске.ИзвлечьФайлыПакета(РеквизитФормыВЗначение("Объект"), ПакетСтраниц.ИмяМакета); + ФайлыПакета = ИнформацияПриЗапуске.ИзвлечьФайлыПакета(РеквизитФормыВЗначение("Объект"), СтартовыйПакетСтраниц.ИмяМакета); КонецЕсли; // Подготовка пакета к показу. @@ -259,7 +244,7 @@ ИмяОткрываемойСтраницы = Параметр; СтрокаИстории = ИсторияПросмотра.Получить(ТекущаяСтрокаИндекс); - ПакетСтраниц = ПакетыСтраниц.НайтиПоИдентификатору(СтрокаИстории.ИдентификаторПакета); + ПакетСтраниц = ПодготовленныеПакеты.НайтиПоИдентификатору(СтрокаИстории.ИдентификаторПакета); Поиск = Новый Структура("ОтносительноеИмя", СтрЗаменить(ИмяОткрываемойСтраницы, "\", "/")); @@ -276,13 +261,13 @@ НоваяСтрокаИндекс = ТекущаяСтрокаИндекс + ?(ТипДействия = "Назад", -1, +1); НоваяСтрокаИстории = ИсторияПросмотра[НоваяСтрокаИндекс]; - ПакетСтраниц = ПакетыСтраниц.НайтиПоИдентификатору(НоваяСтрокаИстории.ИдентификаторПакета); + ПакетСтраниц = ПодготовленныеПакеты.НайтиПоИдентификатору(НоваяСтрокаИстории.ИдентификаторПакета); АдресСтраницы = НоваяСтрокаИстории.АдресСтраницы; ИначеЕсли ТипДействия = "КомандаИзКоманднойПанели" Тогда ИмяКоманды = Параметр; - Найденные = ПакетыСтраниц.НайтиСтроки(Новый Структура("Идентификатор", СтрЗаменить(ИмяКоманды, "ДобавленныйЭлемент_", ""))); + Найденные = ПодготовленныеПакеты.НайтиСтроки(Новый Структура("Идентификатор", СтрЗаменить(ИмяКоманды, "ДобавленныйЭлемент_", ""))); Если Найденные.Количество() = 0 Тогда Возврат Ложь; КонецЕсли; diff --git a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Help/ru.html b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Help/ru.html index 6b2f122af..ca79cc8ae 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/ИнформацияПриЗапуске/Templates/Описатель/Template.mxlx b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Templates/Описатель/Template.mxlx index 2c7539639..ab176b58e 100644 --- a/SSL/src/DataProcessors/ИнформацияПриЗапуске/Templates/Описатель/Template.mxlx +++ b/SSL/src/DataProcessors/ИнформацияПриЗапуске/Templates/Описатель/Template.mxlx @@ -351,6 +351,12 @@ 22 + + + ru + КонецТаблицы + + @@ -373,6 +379,11 @@ 26 + + + 27 + + 26 @@ -380,22 +391,17 @@ - 27 + 28 - 27 + 28 - 27 - - - - - 27 + 28 @@ -405,20 +411,15 @@ - 28 + 29 ru - КонецТаблицы + Имя макета, присоединенного к обработке в ZIP архиве. Страницы могут принадлежать одному макету (например, есть ссылки на другие стартовые страницы, кот. удобнее расположить в одном макете). - - - 29 - - 30 @@ -439,70 +440,14 @@ 33 - - - 32 - - 34 - - - 34 - - - - - 34 - - - - - - 5 - 35 - - - ru - Имя макета, присоединенного к обработке в ZIP архиве. Страницы могут принадлежать одному макету (например, есть ссылки на другие стартовые страницы, кот. удобнее расположить в одном макете). - - - - - - - 36 - - - - - 37 - - - - - 38 - - - - - 39 - - - - - 40 - - - - - 41 @@ -512,27 +457,27 @@ - 42 + 36 - 42 + 36 - 6 + 5 - 43 + 37 - 44 + 38 ru @@ -543,27 +488,27 @@ - 37 + 31 - 38 + 32 - 39 + 33 - 40 + 34 - 41 + 35 @@ -573,22 +518,7 @@ - 42 - - - - - 42 - - - - - - 7 - - - - 43 + 36 @@ -596,9 +526,24 @@ 36 + + + + 6 + - 45 + 37 + + + + + 30 + + + + + 39 ru @@ -609,22 +554,22 @@ - 38 + 32 - 39 + 33 - 40 + 34 - 41 + 35 @@ -634,22 +579,7 @@ - 42 - - - - - 42 - - - - - - 8 - - - - 43 + 36 @@ -657,6 +587,11 @@ 36 + + + + 7 + 37 @@ -664,7 +599,17 @@ - 46 + 30 + + + + + 31 + + + + + 40 ru @@ -675,27 +620,27 @@ - 39 + 33 - 40 + 34 - 41 + 35 - 42 + 36 - 42 + 36 @@ -706,18 +651,8 @@ - 9 + 8 - - - 43 - - - - - 36 - - 37 @@ -725,22 +660,32 @@ - 38 + 30 - 39 + 31 - 40 + 32 - 47 + 33 + + + + + 34 + + + + + 41 ru @@ -756,22 +701,7 @@ - 42 - - - - - 42 - - - - - - 10 - - - - 43 + 36 @@ -779,6 +709,11 @@ 36 + + + + 9 + 37 @@ -786,27 +721,37 @@ - 38 + 30 - 39 + 31 - 40 + 32 + + + + + 33 + + + + + 34 + + + + + 35 41 - - - - - 47 ru @@ -817,18 +762,18 @@ - 42 + 36 - 42 + 36 - 11 + 10 @@ -839,9 +784,9 @@ true - 41 - 12 - 12 + 35 + 11 + 11 Solid @@ -973,31 +918,6 @@ Center d3p1:LightYellow - - 0 - 77 - - - 0 - 82 - - - 0 - 206 - - - 0 - 75 - - - 0 - 72 - - - 0 - 72 - Center - 0 0 diff --git a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Form.form b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Form.form index c75f37642..84db70e1b 100644 --- a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Form.form @@ -205,6 +205,7 @@ Page auto + false @@ -273,7 +274,9 @@ Page - + + false + true true diff --git a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Help/ru.html b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Help/ru.html index a8829d28b..b6bd20f37 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/КонвертацияОбъектовXDTO/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl index aeafb5067..344eddaed 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовXDTO/ObjectModule.bsl @@ -1,6 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -#Область ОбъявлениеПеременных +#Область ОписаниеПеременных Перем ПолеОбработкаДляЗагрузкиДанных; @@ -241,6 +241,9 @@ Если КомпонентыОбмена.ФлагОшибки Тогда ОбменДаннымиXDTOСервер.ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена); + Если КомпонентыОбмена.Свойство("ФайлОбмена") Тогда + КомпонентыОбмена.ФайлОбмена.Закрыть(); + КонецЕсли; Возврат; КонецЕсли; @@ -305,6 +308,7 @@ Если КомпонентыОбмена.ФлагОшибки Тогда ОбменДаннымиXDTOСервер.ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена); + КомпонентыОбмена.ФайлОбмена.Закрыть(); Возврат; КонецЕсли; @@ -326,6 +330,7 @@ Формат(КомпонентыОбмена.СчетчикЗагруженныхОбъектов, "ЧГ=0")); ОбменДаннымиXDTOСервер.ЗаписьЖурналаРегистрацииОбменДанными(СтрокаСообщения, КомпонентыОбмена, УровеньЖурналаРегистрации.Информация); + КомпонентыОбмена.ФайлОбмена.Закрыть(); КонецПроцедуры @@ -365,6 +370,7 @@ Если КомпонентыОбмена.ФлагОшибки Тогда ОбменДаннымиXDTOСервер.ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена); + КомпонентыОбмена.ФайлОбмена.Закрыть(); Возврат; КонецЕсли; @@ -440,6 +446,7 @@ Если КомпонентыОбмена.ФлагОшибки Тогда ОбменДаннымиXDTOСервер.ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена); + КомпонентыОбмена.ФайлОбмена.Закрыть(); Возврат; КонецЕсли; @@ -463,6 +470,7 @@ КонецЦикла; ОбменДаннымиXDTOСервер.ПроизвестиЧтениеДанных(КомпонентыОбмена, ТаблицыДляЗагрузки); + КомпонентыОбмена.ФайлОбмена.Закрыть(); КонецПроцедуры @@ -511,7 +519,7 @@ #КонецОбласти -#Область ОператорыОсновнойПрограммы +#Область Инициализация Параметры = Новый Структура; diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl index 8b19b16d5..e5ed83820 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl @@ -103,8 +103,6 @@ // ПЕРЕМЕННЫЕ МОДУЛЯ ОБРАБОТКИ ЗАГРУЗКИ Перем КоличествоВыполненныхОтложенныхДвиженийДокументов; -Перем АтрибутыФайлаОбмена; // Структура. После открытия файла - // содержит атрибуты файла обмена согласно формату. Перем НомерПоследнегоПоискаПоСсылке; Перем ЧислоХранимыхВыгруженныхОбъектовПоТипам; Перем СоответствиеДопПараметровПоиска; @@ -118,8 +116,6 @@ Перем СтекВызововВыгрузкиДанных; Перем ГлобальныйСтекНеЗаписанныхОбъектов; Перем СоответствиеДанныхДляОбновленияВыгруженныхЭлементов; -Перем ДатаНачалаВыполненияОтложенныхОперацийСДокументами; -Перем ДатаОкончанияВыполненияОтложенныхОперацийСДокументами; Перем СобытияПослеЗагрузкиПараметров; Перем МенеджерРегистраСоответствийОбъектов; Перем ТекущийУровеньВложенностиВыгрузитьПоПравилу; @@ -131,6 +127,7 @@ Перем ЗапросСоответствияОбъектовИнформационныхБаз; Перем ЕстьКорректировкаИнформацииОРегистрацииОбъекта; Перем ЕстьИнформацияОРегистрацииОбъекта; +Перем УзелОбменаЗагрузкаДанныхОбъект; Перем ПолеОбработкаДляЗагрузкиДанных; Перем КоличествоОбъектовКЗагрузке; @@ -177,55 +174,9 @@ #КонецОбласти -#Область СлужебныеПроцедурыИФункции +#Область ПрограммныйИнтерфейс -//////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ СВОЙСТВА - -// Функция-свойство: флаг ошибки выполнения обмена данными. -// -// Возвращаемое значение: -// Булево - флаг ошибки выполнения обмена данными. -// -Функция ФлагОшибки() Экспорт - - Если ТипЗнч(ПолеФлагОшибки) <> Тип("Булево") Тогда - - ПолеФлагОшибки = Ложь; - - КонецЕсли; - - Возврат ПолеФлагОшибки; - -КонецФункции - -// Функция-свойство: результат выполнения обмена данными. -// -// Возвращаемое значение: -// ПеречислениеСсылка.РезультатыВыполненияОбмена - результат выполнения обмена данными. -// -Функция РезультатВыполненияОбмена() Экспорт - - Если ТипЗнч(ПолеРезультатВыполненияОбмена) <> Тип("ПеречислениеСсылка.РезультатыВыполненияОбмена") Тогда - - ПолеРезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Выполнено; - - КонецЕсли; - - Возврат ПолеРезультатВыполненияОбмена; - -КонецФункции - -// Функция-свойство: результат выполнения обмена данными. -// -// Возвращаемое значение: -// Строка - Строковое представление значения перечисления ПеречислениеСсылка.РезультатыВыполненияОбмена. -// -Функция РезультатВыполненияОбменаСтрокой() Экспорт - - Возврат ОбщегоНазначения.ИмяЗначенияПеречисления(РезультатВыполненияОбмена()); - -КонецФункции +#Область ЭкспортныеСвойства // Функция-свойство: номер принятого сообщения обмена данными. // @@ -244,1346 +195,49 @@ КонецФункции -// Функция-свойство: соответствие с таблицами данных входящего сообщения обмена. -// -// Возвращаемое значение: -// Соответствие - соответствие с таблицами данных входящего сообщения обмена. -// -Функция ТаблицыДанныхСообщенияОбмена() Экспорт - - Если ТипЗнч(ПолеТаблицыДанныхСообщенияОбмена) <> Тип("Соответствие") Тогда - - ПолеТаблицыДанныхСообщенияОбмена = Новый Соответствие; - - КонецЕсли; - - Возврат ПолеТаблицыДанныхСообщенияОбмена; - -КонецФункции +#КонецОбласти -// Функция-свойство: таблица значений со статистической и дополнительной информацией о входящем сообщении обмена. -// -// Возвращаемое значение: -// ТаблицаЗначений - таблица значений со статистической и дополнительной информацией о входящем сообщении обмена. -// -Функция ТаблицаДанныхЗаголовкаПакета() Экспорт - - Если ТипЗнч(ПолеТаблицаДанныхЗаголовкаПакета) <> Тип("ТаблицаЗначений") Тогда - - ПолеТаблицаДанныхЗаголовкаПакета = Новый ТаблицаЗначений; - - Колонки = ПолеТаблицаДанныхЗаголовкаПакета.Колонки; - - Колонки.Добавить("ТипОбъектаСтрокой", одОписаниеТипа("Строка")); - Колонки.Добавить("КоличествоОбъектовВИсточнике", одОписаниеТипа("Число")); - Колонки.Добавить("ПоляПоиска", одОписаниеТипа("Строка")); - Колонки.Добавить("ПоляТаблицы", одОписаниеТипа("Строка")); - - Колонки.Добавить("ТипИсточникаСтрокой", одОписаниеТипа("Строка")); - Колонки.Добавить("ТипПриемникаСтрокой", одОписаниеТипа("Строка")); - - Колонки.Добавить("СинхронизироватьПоИдентификатору", одОписаниеТипа("Булево")); - Колонки.Добавить("ЭтоУдалениеОбъекта", одОписаниеТипа("Булево")); - Колонки.Добавить("ЭтоКлассификатор", одОписаниеТипа("Булево")); - Колонки.Добавить("ИспользоватьПредварительныйПросмотр", одОписаниеТипа("Булево")); - - КонецЕсли; - - Возврат ПолеТаблицаДанныхЗаголовкаПакета; - -КонецФункции +#Область РаботаСДанными -// Функция-свойство: строка, которая содержит сообщение об ошибке при обмене данными. -// -// Возвращаемое значение: -// Строка - строка, которая содержит сообщение об ошибке при обмене данными. -// -Функция СтрокаСообщенияОбОшибке() Экспорт - - Если ТипЗнч(ПолеСтрокаСообщенияОбОшибке) <> Тип("Строка") Тогда - - ПолеСтрокаСообщенияОбОшибке = ""; - - КонецЕсли; - - Возврат ПолеСтрокаСообщенияОбОшибке; - -КонецФункции - -// Функция-свойство: количество объектов, которые были загружены. -// -// Возвращаемое значение: -// Число - количество объектов, которые были загружены. -// -Функция СчетчикЗагруженныхОбъектов() Экспорт - - Если ТипЗнч(ПолеСчетчикЗагруженныхОбъектов) <> Тип("Число") Тогда - - ПолеСчетчикЗагруженныхОбъектов = 0; - - КонецЕсли; - - Возврат ПолеСчетчикЗагруженныхОбъектов; - -КонецФункции - -// Функция-свойство: количество объектов, которые были выгружены. -// -// Возвращаемое значение: -// Число - количество объектов, которые были выгружены. -// -Функция СчетчикВыгруженныхОбъектов() Экспорт - - Если ТипЗнч(ПолеСчетчикВыгруженныхОбъектов) <> Тип("Число") Тогда - - ПолеСчетчикВыгруженныхОбъектов = 0; - - КонецЕсли; - - Возврат ПолеСчетчикВыгруженныхОбъектов; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// ВНУТРЕННИЕ СВОЙСТВА - -Функция ОбработкаДляЗагрузкиДанных() - - Возврат ПолеОбработкаДляЗагрузкиДанных; - -КонецФункции - -Функция ЭтоОбменЧерезВнешнееСоединение() - - Возврат ОбработкаДляЗагрузкиДанных() <> Неопределено; - -КонецФункции - -Функция СостояниеОбменаДанными() - - Если ТипЗнч(ПолеСостояниеОбменаДанными) <> Тип("Структура") Тогда - - ПолеСостояниеОбменаДанными = Новый Структура; - ПолеСостояниеОбменаДанными.Вставить("УзелИнформационнойБазы"); - ПолеСостояниеОбменаДанными.Вставить("ДействиеПриОбмене"); - ПолеСостояниеОбменаДанными.Вставить("РезультатВыполненияОбмена"); - ПолеСостояниеОбменаДанными.Вставить("ДатаНачала"); - ПолеСостояниеОбменаДанными.Вставить("ДатаОкончания"); - - КонецЕсли; - - Возврат ПолеСостояниеОбменаДанными; - -КонецФункции - -Функция СоответствиеТиповДанныхДляЗагрузки() - - Если ТипЗнч(ПолеСоответствиеТиповДанныхДляЗагрузки) <> Тип("Соответствие") Тогда - - ПолеСоответствиеТиповДанныхДляЗагрузки = Новый Соответствие; - - КонецЕсли; - - Возврат ПолеСоответствиеТиповДанныхДляЗагрузки; - -КонецФункции - -Функция РежимЗагрузкиДанныхВТаблицуЗначений() - - Возврат Не РежимЗагрузкиДанныхВИнформационнуюБазу(); - -КонецФункции - -Функция ИмяКолонкиУникальныйИдентификатор() - - Возврат "УникальныйИдентификатор"; - -КонецФункции - -Функция ИмяКолонкиТипСтрокой() - - Возврат "ТипСтрокой"; - -КонецФункции - -Функция КлючСообщенияЖурналаРегистрации() - - Если ТипЗнч(КлючСообщенияЖурналаРегистрации) <> Тип("Строка") - ИЛИ ПустаяСтрока(КлючСообщенияЖурналаРегистрации) Тогда - - КлючСообщенияЖурналаРегистрации = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(); - - КонецЕсли; - - Возврат КлючСообщенияЖурналаРегистрации; -КонецФункции - -Функция ПриоритетыРезультатовОбмена() - - Если ТипЗнч(ПолеПриоритетыРезультатовОбмена) <> Тип("Массив") Тогда - - ПолеПриоритетыРезультатовОбмена = Новый Массив; - ПолеПриоритетыРезультатовОбмена.Добавить(Перечисления.РезультатыВыполненияОбмена.Ошибка); - ПолеПриоритетыРезультатовОбмена.Добавить(Перечисления.РезультатыВыполненияОбмена.Ошибка_ТранспортСообщения); - ПолеПриоритетыРезультатовОбмена.Добавить(Перечисления.РезультатыВыполненияОбмена.Отменено); - ПолеПриоритетыРезультатовОбмена.Добавить(Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято); - ПолеПриоритетыРезультатовОбмена.Добавить(Перечисления.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями); - ПолеПриоритетыРезультатовОбмена.Добавить(Перечисления.РезультатыВыполненияОбмена.Выполнено); - ПолеПриоритетыРезультатовОбмена.Добавить(Неопределено); - - КонецЕсли; - - Возврат ПолеПриоритетыРезультатовОбмена; -КонецФункции - -Функция ТаблицыОписанийСвойствОбъектов() - - Если ТипЗнч(ПолеТаблицыОписанийСвойствОбъектов) <> Тип("Соответствие") Тогда - - ПолеТаблицыОписанийСвойствОбъектов = Новый Соответствие; - - КонецЕсли; - - Возврат ПолеТаблицыОписанийСвойствОбъектов; -КонецФункции - -Функция ДополнительныеСвойстваДляОтложенногоПроведения() - - Если ТипЗнч(СоответствиеДокументовДляОтложенногоПроведения) <> Тип("Соответствие") Тогда - - // Инициализируем соответствие для отложенного проведения документов. - СоответствиеДокументовДляОтложенногоПроведения = Новый Соответствие; - - КонецЕсли; - - Возврат СоответствиеДокументовДляОтложенногоПроведения; - -КонецФункции - -Функция ОбъектыДляОтложеннойЗаписи() - - Если ТипЗнч(ПолеОбъектыДляОтложеннойЗаписи) <> Тип("Соответствие") Тогда - - // Инициализируем соответствие для отложенной записи объектов. - ПолеОбъектыДляОтложеннойЗаписи = Новый Соответствие; - - КонецЕсли; - - Возврат ПолеОбъектыДляОтложеннойЗаписи; - -КонецФункции - -Функция ВыгруженныеПоСсылкеОбъекты() - - Если ТипЗнч(ПолеВыгруженныеПоСсылкеОбъекты) <> Тип("Массив") Тогда - - ПолеВыгруженныеПоСсылкеОбъекты = Новый Массив; - - КонецЕсли; - - Возврат ПолеВыгруженныеПоСсылкеОбъекты; -КонецФункции - -Функция СозданныеПриВыгрузкеОбъекты() - - Если ТипЗнч(ПолеСозданныеПриВыгрузкеОбъекты) <> Тип("Массив") Тогда - - ПолеСозданныеПриВыгрузкеОбъекты = Новый Массив; - - КонецЕсли; - - Возврат ПолеСозданныеПриВыгрузкеОбъекты; -КонецФункции - -Функция ВыгружаемыеПоСсылкеОбъектыМетаданных() - - Если ТипЗнч(ПолеВыгружаемыеПоСсылкеОбъектыМетаданных) <> Тип("Соответствие") Тогда - - ПолеВыгружаемыеПоСсылкеОбъектыМетаданных = Новый Соответствие; - - КонецЕсли; - - Возврат ПолеВыгружаемыеПоСсылкеОбъектыМетаданных; -КонецФункции - -Функция ВыгружатьОбъектПоСсылке(Объект, УзелПланаОбмена) - - ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(Объект)); - - Если ОбъектМетаданных = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - - // получаем значение из кэша - Результат = ВыгружаемыеПоСсылкеОбъектыМетаданных().Получить(ОбъектМетаданных); - - Если Результат = Неопределено Тогда - - Результат = Ложь; - - // Получаем признак выгрузки по ссылке. - Отбор = Новый Структура("ОбъектМетаданныхИмя", ОбъектМетаданных.ПолноеИмя()); - - МассивПравил = ПравилаРегистрацииОбъектов(УзелПланаОбмена).НайтиСтроки(Отбор); - - Для Каждого Правило Из МассивПравил Цикл - - Если Не ПустаяСтрока(Правило.ИмяРеквизитаФлага) Тогда - - ЗначениеРеквизитаФлага = Неопределено; - СвойстваУзлаПланаОбмена(УзелПланаОбмена).Свойство(Правило.ИмяРеквизитаФлага, ЗначениеРеквизитаФлага); - - Результат = Результат ИЛИ ( ЗначениеРеквизитаФлага = Перечисления.РежимыВыгрузкиОбъектовОбмена.ВыгружатьПриНеобходимости - ИЛИ ЗначениеРеквизитаФлага = Перечисления.РежимыВыгрузкиОбъектовОбмена.ПустаяСсылка()); - // - Если Результат Тогда - Прервать; - КонецЕсли; - - КонецЕсли; - - КонецЦикла; - - // Сохраняем полученное значение в кэше. - ВыгружаемыеПоСсылкеОбъектыМетаданных().Вставить(ОбъектМетаданных, Результат); - - КонецЕсли; - - Возврат Результат; -КонецФункции - -Функция ИмяПланаОбмена() - - Если ТипЗнч(ПолеИмяПланаОбмена) <> Тип("Строка") - ИЛИ ПустаяСтрока(ПолеИмяПланаОбмена) Тогда - - Если ЗначениеЗаполнено(УзелДляОбмена) Тогда - - ПолеИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелДляОбмена); - - ИначеЕсли ЗначениеЗаполнено(УзелОбменаЗагрузкаДанных) Тогда - - ПолеИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелОбменаЗагрузкаДанных); - - ИначеЕсли ЗначениеЗаполнено(ИмяПланаОбменаВРО) Тогда - - ПолеИмяПланаОбмена = ИмяПланаОбменаВРО; - - Иначе - - ПолеИмяПланаОбмена = ""; - - КонецЕсли; - - КонецЕсли; - - Возврат ПолеИмяПланаОбмена; -КонецФункции - -Функция СвойстваУзлаПланаОбмена(Узел) - - Если ТипЗнч(ПолеСвойстваУзлаПланаОбмена) <> Тип("Структура") Тогда - - ПолеСвойстваУзлаПланаОбмена = Новый Структура; - - // получаем имена реквизитов - ИменаРеквизитов = ОбщегоНазначения.ИменаРеквизитовПоТипу(Узел, Тип("ПеречислениеСсылка.РежимыВыгрузкиОбъектовОбмена")); - - // Получаем значения реквизитов. - Если Не ПустаяСтрока(ИменаРеквизитов) Тогда - - ПолеСвойстваУзлаПланаОбмена = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Узел, ИменаРеквизитов); - - КонецЕсли; - - КонецЕсли; - - Возврат ПолеСвойстваУзлаПланаОбмена; -КонецФункции - -Функция ВерсияФорматаВходящегоСообщенияОбмена() - - Если ТипЗнч(ПолеВерсияФорматаВходящегоСообщенияОбмена) <> Тип("Строка") Тогда - - ПолеВерсияФорматаВходящегоСообщенияОбмена = "0.0.0.0"; - - КонецЕсли; - - // Дополняем версию формата входящего сообщения до 4-х разрядов. - РазрядыВерсий = СтрРазделить(ПолеВерсияФорматаВходящегоСообщенияОбмена, "."); - - Если РазрядыВерсий.Количество() < 4 Тогда - - КоличествоРазрядовДобавить = 4 - РазрядыВерсий.Количество(); - - Для А = 1 По КоличествоРазрядовДобавить Цикл - - РазрядыВерсий.Добавить("0"); - - КонецЦикла; - - ПолеВерсияФорматаВходящегоСообщенияОбмена = СтрСоединить(РазрядыВерсий, "."); - - КонецЕсли; - - Возврат ПолеВерсияФорматаВходящегоСообщенияОбмена; -КонецФункции - -Функция НомерСообщения() - - Если ТипЗнч(ПолеНомерСообщения) <> Тип("Число") Тогда - - ПолеНомерСообщения = 0; - - КонецЕсли; - - Возврат ПолеНомерСообщения; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// ФУНКЦИИ КЭШИРОВАНИЯ - -Функция ТаблицаОписанияСвойствОбъекта(ОбъектМетаданных) - - Результат = ТаблицыОписанийСвойствОбъектов().Получить(ОбъектМетаданных); - - Если Результат = Неопределено Тогда - - Результат = ОбщегоНазначения.ПолучитьТаблицуОписанияСвойствОбъекта(ОбъектМетаданных, "Имя"); - - ТаблицыОписанийСвойствОбъектов().Вставить(Результат); - - КонецЕсли; - - Возврат Результат; -КонецФункции - -Функция ПравилаРегистрацииОбъектов(УзелПланаОбмена) - - Если ТипЗнч(ПолеПравилаРегистрацииОбъектов) <> Тип("ТаблицаЗначений") Тогда - - ПравилаРегистрацииОбъектов = ОбменДаннымиВызовСервера.ПараметрыСеансаПравилаРегистрацииОбъектов().Получить(); - - Отбор = Новый Структура; - Отбор.Вставить("ИмяПланаОбмена", ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелПланаОбмена)); - - ПолеПравилаРегистрацииОбъектов = ПравилаРегистрацииОбъектов.Скопировать(Отбор, "ОбъектМетаданныхИмя, ИмяРеквизитаФлага"); - ПолеПравилаРегистрацииОбъектов.Индексы.Добавить("ОбъектМетаданныхИмя"); - - КонецЕсли; - - Возврат ПолеПравилаРегистрацииОбъектов; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -// ВЫГРУЗКА ДАННЫХ - -// Выполняет выгрузку данных -// -- Все объекты выгружаются в один файл. -// -- В заголовок файла выгружаются: -// - правила обмена -// - информация о типах данных -// - данные по обмену (имя плана обмена, коды узлов, номера сообщений (квитирование)). +// Возвращает строку - имя переданного значения перечисления. +// Функция может быть использована в обработчиках событий, программный код +// которых хранится в правила обмена данными. Вызывается методом Выполнить(). +// Сообщение "Не обнаружено ссылок на функцию" при проверке конфигурации +// не является ошибкой проверки конфигурации. // // Параметры: -// -Процедура ВыполнитьВыгрузкуДанных(ОбработкаДляЗагрузкиДанных = Неопределено) Экспорт - - УстановитьФлагОшибки(Ложь); - - ПолеСтрокаСообщенияОбОшибке = ""; - ПолеСостояниеОбменаДанными = Неопределено; - ПолеРезультатВыполненияОбмена = Неопределено; - ПолеВыгруженныеПоСсылкеОбъекты = Неопределено; - ПолеСозданныеПриВыгрузкеОбъекты = Неопределено; - ПолеВыгружаемыеПоСсылкеОбъектыМетаданных = Неопределено; - ПолеПравилаРегистрацииОбъектов = Неопределено; - ПолеСвойстваУзлаПланаОбмена = Неопределено; - ПолеОбработкаДляЗагрузкиДанных = ОбработкаДляЗагрузкиДанных; - - ИнициализироватьВедениеПротоколаОбмена(); - - // Открываем файл обмена - Если ЭтоОбменЧерезВнешнееСоединение() Тогда - ФайлОбмена = Новый ЗаписьТекста; - Иначе - ОткрытьФайлВыгрузки(); - КонецЕсли; - - Если ФлагОшибки() Тогда - ФайлОбмена = Неопределено; - ЗавершитьВедениеПротоколаОбмена(); - Возврат; - КонецЕсли; - - ИмяПрофиляБезопасности = ИнициализироватьОбработки(); - - Если ИмяПрофиляБезопасности <> Неопределено Тогда - УстановитьБезопасныйРежим(ИмяПрофиляБезопасности); - КонецЕсли; - - Если ЭтоОбменЧерезВнешнееСоединение() Тогда - - ОбработкаДляЗагрузкиДанных().ВнешнееСоединениеПередЗагрузкойДанных(); - - ОбработкаДляЗагрузкиДанных().ЗагрузитьПравилаОбмена(XMLПравила, "Строка"); - - Если ОбработкаДляЗагрузкиДанных().ФлагОшибки() Тогда - - СтрокаСообщения = НСтр("ru = 'ВНЕШНЕЕ СОЕДИНЕНИЕ: %1'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ОбработкаДляЗагрузкиДанных().СтрокаСообщенияОбОшибке()); - ЗаписатьВПротоколВыполнения(СтрокаСообщения); - ЗавершитьВедениеПротоколаОбмена(); - Возврат; - - КонецЕсли; - - Отказ = Ложь; - - ОбработкаДляЗагрузкиДанных().ВнешнееСоединениеОбработчикКонвертацииПередЗагрузкойДанных(Отказ); - - Если Отказ Тогда - ЗавершитьВедениеПротоколаОбмена(); - ОтключитьОбработкуДляОтладки(); - Возврат; - КонецЕсли; - - Иначе - - // Включаем правила обмена в файл. - ФайлОбмена.ЗаписатьСтроку(XMLПравила); - - КонецЕсли; - - // ВЫГРУЗКА ДАННЫХ - Попытка - ВыполнитьВыгрузку(); - Исключение - ЗаписатьВПротоколВыполнения(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ЗавершитьВедениеПротоколаОбмена(); - ФайлОбмена = Неопределено; - ПолеВыгруженныеПоСсылкеОбъекты = Неопределено; - ПолеСозданныеПриВыгрузкеОбъекты = Неопределено; - ПолеВыгружаемыеПоСсылкеОбъектыМетаданных = Неопределено; - Возврат; - КонецПопытки; - - Если ЭтоОбменЧерезВнешнееСоединение() Тогда - - Если Не ФлагОшибки() Тогда - - ОбработкаДляЗагрузкиДанных().ВнешнееСоединениеПослеЗагрузкиДанных(); - - КонецЕсли; - - Иначе - - // Закрываем файл обмена - ЗакрытьФайл(); - - КонецЕсли; - - ЗавершитьВедениеПротоколаОбмена(); - - // Сбрасываем модальные переменные перед помещением обработки в платформенный кэш. - ПолеВыгруженныеПоСсылкеОбъекты = Неопределено; - ПолеСозданныеПриВыгрузкеОбъекты = Неопределено; - ПолеВыгружаемыеПоСсылкеОбъектыМетаданных = Неопределено; - ОтключитьОбработкуДляОтладки(); - ФайлОбмена = Неопределено; - -КонецПроцедуры - -// ЗАГРУЗКА ДАННЫХ - -// Выполняет загрузку данных из файла сообщения обмена. -// Данные загружаются в информационную базу. +// Значение - значение перечисления. // -// Параметры: -// -Процедура ВыполнитьЗагрузкуДанных() Экспорт - - ЧтениеСообщения = Неопределено; - Попытка - - РежимЗагрузкиДанных = "ЗагрузкаВИнформационнуюБазу"; - - ПолеСтрокаСообщенияОбОшибке = ""; - ПолеСостояниеОбменаДанными = Неопределено; - ПолеРезультатВыполненияОбмена = Неопределено; - ПолеСоответствиеТиповДанныхДляЗагрузки = Неопределено; - ПолеСчетчикЗагруженныхОбъектов = Неопределено; - ПолеДокументыДляОтложенногоПроведения = Неопределено; - ПолеОбъектыДляОтложеннойЗаписи = Неопределено; - СоответствиеДокументовДляОтложенногоПроведения = Неопределено; - ПолеСвойстваУзлаПланаОбмена = Неопределено; - ПолеВерсияФорматаВходящегоСообщенияОбмена = Неопределено; - ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Ложь; - ЕстьИнформацияОРегистрацииОбъекта = Ложь; - - ГлобальныйСтекНеЗаписанныхОбъектов = Новый Соответствие; - НомерПоследнегоПоискаПоСсылке = 0; - - ИнициализироватьМенеджерыИСообщения(); - - УстановитьФлагОшибки(Ложь); - - ИнициализироватьКомментарииПриВыгрузкеИЗагрузкеДанных(); - - ИнициализироватьВедениеПротоколаОбмена(); - - ИнформацияОПользовательскихПоляхПоискаПриЗагрузкеДанных = Новый Соответствие; - - СоответствиеДопПараметровПоиска = Новый Соответствие; - СоответствиеПравилКонвертации = Новый Соответствие; - - КоличествоВыполненныхОтложенныхДвиженийДокументов = 0; - - Если ПродолжитьПриОшибке Тогда - ИспользоватьТранзакции = Ложь; - КонецЕсли; - - Если КоличествоОбработанныхОбъектовДляОбновленияСтатуса = 0 Тогда - КоличествоОбработанныхОбъектовДляОбновленияСтатуса = 100; - КонецЕсли; - - РезультатПодсчетаДанныхКЗагрузке = ОбменДаннымиСервер.РезультатПодсчетаДанныхКЗагрузке(ИмяФайлаОбмена, Ложь); - РазмерФайлаСообщенияОбмена = РезультатПодсчетаДанныхКЗагрузке.РазмерФайлаСообщенияОбмена; - КоличествоОбъектовКЗагрузке = РезультатПодсчетаДанныхКЗагрузке.КоличествоОбъектовКЗагрузке; - - ИмяПрофиляБезопасности = ИнициализироватьОбработки(); - - Если ИмяПрофиляБезопасности <> Неопределено Тогда - УстановитьБезопасныйРежим(ИмяПрофиляБезопасности); - КонецЕсли; - - НачатьЧтениеСообщения(ЧтениеСообщения); - - Если ИспользоватьТранзакции Тогда - НачатьТранзакцию(); - КонецЕсли; - Попытка - - ПроизвестиЧтениеДанных(ЧтениеСообщения); - - Если ФлагОшибки() Тогда - ВызватьИсключение НСтр("ru = 'Возникли ошибки при загрузке данных.'"); - КонецЕсли; - - // Отложенная запись того, что не записали. - ПровестиЗаписьНеЗаписанныхОбъектов(); - - ВыполнитьОбработчикПослеЗагрузкиДанных(); - - Если ФлагОшибки() Тогда - ВызватьИсключение НСтр("ru = 'Возникли ошибки при загрузке данных.'"); - КонецЕсли; - - Если ИспользоватьТранзакции Тогда - ЗафиксироватьТранзакцию(); - КонецЕсли; - Исключение - Если ИспользоватьТранзакции Тогда - ОтменитьТранзакцию(); - КонецЕсли; - ПрерватьЧтениеСообщения(ЧтениеСообщения); - ВызватьИсключение; - КонецПопытки; - - // Выполняем проведение документов в очереди. - ВыполнитьОтложенноеПроведениеДокументов(); - ВыполнитьОтложеннуюЗаписьОбъектов(); - - ЗакончитьЧтениеСообщения(ЧтениеСообщения); - - Исключение - Если ЧтениеСообщения <> Неопределено - И ЧтениеСообщения.СообщениеБылоПринятоРанее Тогда - ЗаписатьВПротоколВыполнения(174,,,,,, - Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято); - Иначе - ЗаписатьВПротоколВыполнения(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецЕсли; - КонецПопытки; - - ЗавершитьВедениеПротоколаОбмена(); - - // Сбрасываем модальные переменные перед помещением обработки в платформенный кэш. - ПолеДокументыДляОтложенногоПроведения = Неопределено; - ПолеОбъектыДляОтложеннойЗаписи = Неопределено; - СоответствиеДокументовДляОтложенногоПроведения = Неопределено; - ПолеСоответствиеТиповДанныхДляЗагрузки = Неопределено; - ГлобальныйСтекНеЗаписанныхОбъектов = Неопределено; - СоответствиеПравилКонвертации = Неопределено; - ОтключитьОбработкуДляОтладки(); - ФайлОбмена = Неопределено; - -КонецПроцедуры - -// ЗАГРУЗКА ДАННЫХ ПАКЕТНАЯ - -// Выполняет загрузку данных из файла сообщения обмена в Информационную Базу только заданных типов объектов. +// Возвращаемое значение: +// Строка - имя переданного значения перечисления. // -// Параметры: -// ТаблицыДляЗагрузки - Массив - массив типов, которые необходимо загрузить из сообщения обмена; элемент массива - -// Строка. -// Например, для загрузки из сообщения обмена только элементов справочника Контрагенты: -// ТаблицыДляЗагрузки = Новый Массив; -// ТаблицыДляЗагрузки.Добавить("СправочникСсылка.Контрагенты"); -// -// Список всех типов, которые содержаться в текущем сообщении обмена -// можно получить вызовом процедуры ВыполнитьАнализСообщенияОбмена(). -// -Процедура ВыполнитьЗагрузкуДанныхВИнформационнуюБазу(ТаблицыДляЗагрузки) Экспорт - - РежимЗагрузкиДанных = "ЗагрузкаВИнформационнуюБазу"; - ПолеСостояниеОбменаДанными = Неопределено; - ПолеРезультатВыполненияОбмена = Неопределено; - ПолеДокументыДляОтложенногоПроведения = Неопределено; - ПолеОбъектыДляОтложеннойЗаписи = Неопределено; - СоответствиеДокументовДляОтложенногоПроведения = Неопределено; - ПолеСвойстваУзлаПланаОбмена = Неопределено; - ПолеВерсияФорматаВходящегоСообщенияОбмена = Неопределено; - ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Ложь; - ЕстьИнформацияОРегистрацииОбъекта = Ложь; - ГлобальныйСтекНеЗаписанныхОбъектов = Новый Соответствие; - СоответствиеПравилКонвертации = Новый Соответствие; - - // дата начала загрузки - СостояниеОбменаДанными().ДатаНачала = ТекущаяДатаСеанса(); - - // Запись в журнале регистрации. - СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла: %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(УзелОбменаЗагрузкаДанных)); - ЗаписьЖурналаРегистрацииОбменДанными(СтрокаСообщения, УровеньЖурналаРегистрации.Информация); - - ВыполнитьВыборочноеЧтениеСообщения(ТаблицыДляЗагрузки); - - // дата окончания загрузки - СостояниеОбменаДанными().ДатаОкончания = ТекущаяДатаСеанса(); - - // Фиксируем завершение загрузки данных в РС. - ЗафиксироватьЗавершениеЗагрузкиДанных(); - - // Запись в журнале регистрации. - СтрокаСообщения = НСтр("ru = '%1, %2; Обработано %3 объектов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, - РезультатВыполненияОбмена(), - Перечисления.ДействияПриОбмене.ЗагрузкаДанных, - Формат(СчетчикЗагруженныхОбъектов(), "ЧГ=0")); - // - ЗаписьЖурналаРегистрацииОбменДанными(СтрокаСообщения, УровеньЖурналаРегистрации.Информация); - - // Сбрасываем модальные переменные перед помещением обработки в платформенный кэш. - ПолеДокументыДляОтложенногоПроведения = Неопределено; - ПолеОбъектыДляОтложеннойЗаписи = Неопределено; - СоответствиеДокументовДляОтложенногоПроведения = Неопределено; - ПолеСоответствиеТиповДанныхДляЗагрузки = Неопределено; - ГлобальныйСтекНеЗаписанныхОбъектов = Неопределено; - СоответствиеПравилКонвертации = Неопределено; - ФайлОбмена = Неопределено; - -КонецПроцедуры +Функция одИмяЗначенияПеречисления(Значение) Экспорт -// Выполняет загрузку данных из файла сообщения обмена в Таблицу значений только заданных типов объектов. + ОбъектМД = Значение.Метаданные(); + ИндексЗначения = Перечисления[ОбъектМД.Имя].Индекс(Значение); + + Возврат ОбъектМД.ЗначенияПеречисления[ИндексЗначения].Имя; + +КонецФункции + +#КонецОбласти + +#Область ПроцедурыРаботыСПравиламиОбмена + +// Устанавливает значения параметров в структуре Параметры +// по таблице ТаблицаНастройкиПараметров. // -// Параметры: -// ТаблицыДляЗагрузки - Массив - массив типов, которые необходимо загрузить из сообщения обмена; элемент массива - -// Строка. -// Например, для загрузки из сообщения обмена только элементов справочника Контрагенты: -// ТаблицыДляЗагрузки = Новый Массив; -// ТаблицыДляЗагрузки.Добавить("СправочникСсылка.Контрагенты"); -// -// Список всех типов, которые содержаться в текущем сообщении обмена -// можно получить вызовом процедуры ВыполнитьАнализСообщенияОбмена(). -// -Процедура ВыполнитьЗагрузкуДанныхВТаблицуЗначений(ТаблицыДляЗагрузки) Экспорт - - РежимЗагрузкиДанных = "ЗагрузкаВТаблицуЗначений"; - ПолеСостояниеОбменаДанными = Неопределено; - ПолеРезультатВыполненияОбмена = Неопределено; - ПолеДокументыДляОтложенногоПроведения = Неопределено; - ПолеОбъектыДляОтложеннойЗаписи = Неопределено; - СоответствиеДокументовДляОтложенногоПроведения = Неопределено; - ПолеСвойстваУзлаПланаОбмена = Неопределено; - ПолеВерсияФорматаВходящегоСообщенияОбмена = Неопределено; - ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Ложь; - ЕстьИнформацияОРегистрацииОбъекта = Ложь; - ГлобальныйСтекНеЗаписанныхОбъектов = Новый Соответствие; - СоответствиеПравилКонвертации = Новый Соответствие; - - ИспользоватьТранзакции = Ложь; - - // Инициализируем таблицы данных сообщения обмена. - Для Каждого КлючТаблицыДанных Из ТаблицыДляЗагрузки Цикл - - МассивПодстрок = СтрРазделить(КлючТаблицыДанных, "#"); - - ТипОбъекта = МассивПодстрок[1]; - - ТаблицыДанныхСообщенияОбмена().Вставить(КлючТаблицыДанных, ИнициализацияТаблицыДанныхСообщенияОбмена(Тип(ТипОбъекта))); - +Процедура УстановитьПараметрыИзДиалога() Экспорт + + Для Каждого СтрокаТаблицы Из ТаблицаНастройкиПараметров Цикл + Параметры.Вставить(СтрокаТаблицы.Имя, СтрокаТаблицы.Значение); КонецЦикла; - - ВыполнитьВыборочноеЧтениеСообщения(ТаблицыДляЗагрузки); - - // Сбрасываем модальные переменные перед помещением обработки в платформенный кэш. - ПолеДокументыДляОтложенногоПроведения = Неопределено; - ПолеОбъектыДляОтложеннойЗаписи = Неопределено; - СоответствиеДокументовДляОтложенногоПроведения = Неопределено; - ПолеСоответствиеТиповДанныхДляЗагрузки = Неопределено; - ГлобальныйСтекНеЗаписанныхОбъектов = Неопределено; - СоответствиеПравилКонвертации = Неопределено; - ФайлОбмена = Неопределено; - + КонецПроцедуры -// Выполняет последовательное чтение файла сообщения обмена при этом: -// - удаляется регистрация изменений по номеру входящей квитанции -// - загружаются правила обмена -// - загружается информация о типах данных -// - зачитывается информация сопоставления данных и записывается и ИБ -// - собирается информация о типах объектов и их количестве. -// -// Параметры: -// ПараметрыАнализа - Структура. Необязательные дополнительные параметры анализа. Допустимые поля: -// * СобиратьСтатистикуКлассификаторов - Булево - Флаг того, что данные по классификаторам будут включены в -// статистику. -// Под классификаторами понимаются справочники, ПВХ, планы -// счетов, ПВР, у которых в ПКО установлены -// СинхронизироватьПоИдентификатору. и -// ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли. -// -Процедура ВыполнитьАнализСообщенияОбмена(ПараметрыАнализа = Неопределено) Экспорт - - ЧтениеСообщения = Неопределено; - Попытка - - УстановитьФлагОшибки(Ложь); - - ИспользоватьТранзакции = Ложь; - - ПолеСтрокаСообщенияОбОшибке = ""; - ПолеСостояниеОбменаДанными = Неопределено; - ПолеРезультатВыполненияОбмена = Неопределено; - ПолеВерсияФорматаВходящегоСообщенияОбмена = Неопределено; - ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Ложь; - ЕстьИнформацияОРегистрацииОбъекта = Ложь; - ГлобальныйСтекНеЗаписанныхОбъектов = Новый Соответствие; - СоответствиеПравилКонвертации = Новый Соответствие; - - ИнициализироватьВедениеПротоколаОбмена(); - - ИнициализироватьМенеджерыИСообщения(); - - // дата начала анализа - СостояниеОбменаДанными().ДатаНачала = ТекущаяДатаСеанса(); - - // Обнуляем значение модальной переменной. - ПолеТаблицаДанныхЗаголовкаПакета = Неопределено; - - НачатьЧтениеСообщения(ЧтениеСообщения, Истина); - Попытка - - // Зачитываем данные из сообщения обмена. - ПроизвестиЧтениеДанныхВРежимеАнализа(ЧтениеСообщения, ПараметрыАнализа); - - Если ФлагОшибки() Тогда - ВызватьИсключение НСтр("ru = 'Возникли ошибки при анализе данных.'"); - КонецЕсли; - - // Формируем временную таблицу данных. - ТаблицаДанныхЗаголовкаПакетаВременная = ТаблицаДанныхЗаголовкаПакета().Скопировать(, "ТипИсточникаСтрокой, ТипПриемникаСтрокой, ПоляПоиска, ПоляТаблицы"); - ТаблицаДанныхЗаголовкаПакетаВременная.Свернуть("ТипИсточникаСтрокой, ТипПриемникаСтрокой, ПоляПоиска, ПоляТаблицы"); - - // Сворачиваем таблицу данных заголовка пакета. - ТаблицаДанныхЗаголовкаПакета().Свернуть( - "ТипОбъектаСтрокой, ТипИсточникаСтрокой, ТипПриемникаСтрокой, СинхронизироватьПоИдентификатору, ЭтоКлассификатор, ЭтоУдалениеОбъекта, ИспользоватьПредварительныйПросмотр", - "КоличествоОбъектовВИсточнике"); - // - ТаблицаДанныхЗаголовкаПакета().Колонки.Добавить("ПоляПоиска", одОписаниеТипа("Строка")); - ТаблицаДанныхЗаголовкаПакета().Колонки.Добавить("ПоляТаблицы", одОписаниеТипа("Строка")); - - Для Каждого СтрокаТаблицы Из ТаблицаДанныхЗаголовкаПакета() Цикл - - Отбор = Новый Структура; - Отбор.Вставить("ТипИсточникаСтрокой", СтрокаТаблицы.ТипИсточникаСтрокой); - Отбор.Вставить("ТипПриемникаСтрокой", СтрокаТаблицы.ТипПриемникаСтрокой); - - СтрокиВременнойТаблицы = ТаблицаДанныхЗаголовкаПакетаВременная.НайтиСтроки(Отбор); - - СтрокаТаблицы.ПоляПоиска = СтрокиВременнойТаблицы[0].ПоляПоиска; - СтрокаТаблицы.ПоляТаблицы = СтрокиВременнойТаблицы[0].ПоляТаблицы; - - КонецЦикла; - - ВыполнитьОбработчикПослеЗагрузкиДанных(); - - ЗакончитьЧтениеСообщения(ЧтениеСообщения); - - Исключение - ПрерватьЧтениеСообщения(ЧтениеСообщения); - ВызватьИсключение; - КонецПопытки; - - Исключение - Если ЧтениеСообщения <> Неопределено - И ЧтениеСообщения.СообщениеБылоПринятоРанее Тогда - ЗаписатьВПротоколВыполнения(174,,,,,, - Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято); - Иначе - ЗаписатьВПротоколВыполнения(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецЕсли; - - КонецПопытки; - - ЗавершитьВедениеПротоколаОбмена(); - - // дата окончания анализа - СостояниеОбменаДанными().ДатаОкончания = ТекущаяДатаСеанса(); - - // Фиксируем завершение анализа данных в РС. - ЗафиксироватьЗавершениеЗагрузкиДанных(); - - // Сбрасываем модальные переменные перед помещением обработки в платформенный кэш. - ПолеДокументыДляОтложенногоПроведения = Неопределено; - ПолеОбъектыДляОтложеннойЗаписи = Неопределено; - СоответствиеДокументовДляОтложенногоПроведения = Неопределено; - ПолеСоответствиеТиповДанныхДляЗагрузки = Неопределено; - ГлобальныйСтекНеЗаписанныхОбъектов = Неопределено; - СоответствиеПравилКонвертации = Неопределено; - ФайлОбмена = Неопределено; - -КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ОБРАБОТКИ СОБЫТИЙ ВНЕШНЕГО СОЕДИНЕНИЯ - -// Загружает данные из строки XML. -// -Процедура ВнешнееСоединениеВыполнитьЗагрузкуДанныхИзСтрокиXML(СтрокаXML) Экспорт - - ФайлОбмена.УстановитьСтроку(СтрокаXML); - - ЧтениеСообщения = Неопределено; - Попытка - - ПроизвестиЧтениеДанныхВРежимеВнешнегоСоединения(ЧтениеСообщения); - - Исключение - - Если ЧтениеСообщения <> Неопределено - И ЧтениеСообщения.СообщениеБылоПринятоРанее Тогда - ЗаписатьВПротоколВыполнения(174,,,,,, - Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято); - Иначе - ЗаписатьВПротоколВыполнения(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецЕсли; - - КонецПопытки; - -КонецПроцедуры - -// Выполняет обработчик конвертации Перед загрузкой данных для внешнего соединения. -// -Процедура ВнешнееСоединениеОбработчикКонвертацииПередЗагрузкойДанных(Отказ) Экспорт - - // {Обработчик: ПередЗагрузкойДанных} Начало - Если Не ПустаяСтрока(Конвертация.ПередЗагрузкойДанных) Тогда - - Попытка - - Если ОтладкаОбработчиковЗагрузки Тогда - - ВыполнитьОбработчик_Конвертация_ПередЗагрузкойДанных(ФайлОбмена, Отказ); - - Иначе - - Выполнить(Конвертация.ПередЗагрузкойДанных); - - КонецЕсли; - - Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(22, ОписаниеОшибки(), НСтр("ru = 'ПередЗагрузкойДанных (конвертация)'")); - Отказ = Истина; - КонецПопытки; - - КонецЕсли; - - Если Отказ Тогда // Отказ от загрузки данных - Возврат; - КонецЕсли; - // {Обработчик: ПередЗагрузкойДанных} Окончание - -КонецПроцедуры - -// Процедура инициализации перед загрузкой данных через внешнее соединение. -// -Процедура ВнешнееСоединениеПередЗагрузкойДанных() Экспорт - - РежимЗагрузкиДанных = "ЗагрузкаВИнформационнуюБазу"; - - ПолеСтрокаСообщенияОбОшибке = ""; - ПолеСостояниеОбменаДанными = Неопределено; - ПолеРезультатВыполненияОбмена = Неопределено; - ПолеСоответствиеТиповДанныхДляЗагрузки = Неопределено; - ПолеСчетчикЗагруженныхОбъектов = Неопределено; - ПолеДокументыДляОтложенногоПроведения = Неопределено; - ПолеОбъектыДляОтложеннойЗаписи = Неопределено; - СоответствиеДокументовДляОтложенногоПроведения = Неопределено; - ПолеСвойстваУзлаПланаОбмена = Неопределено; - ПолеВерсияФорматаВходящегоСообщенияОбмена = Неопределено; - - ГлобальныйСтекНеЗаписанныхОбъектов = Новый Соответствие; - НомерПоследнегоПоискаПоСсылке = 0; - - ИнициализироватьМенеджерыИСообщения(); - - УстановитьФлагОшибки(Ложь); - - ИнициализироватьКомментарииПриВыгрузкеИЗагрузкеДанных(); - - ИнициализироватьВедениеПротоколаОбмена(); - - ИнформацияОПользовательскихПоляхПоискаПриЗагрузкеДанных = Новый Соответствие; - - СоответствиеДопПараметровПоиска = Новый Соответствие; - СоответствиеПравилКонвертации = Новый Соответствие; - - КоличествоВыполненныхОтложенныхДвиженийДокументов = 0; - - Если КоличествоОбработанныхОбъектовДляОбновленияСтатуса = 0 Тогда - КоличествоОбработанныхОбъектовДляОбновленияСтатуса = 100; - КонецЕсли; - - // Выполняем очистку правил обмена. - Правила.Очистить(); - ТаблицаПравилКонвертации.Очистить(); - - ФайлОбмена = Новый ЧтениеXML; - - ЕстьИнформацияОРегистрацииОбъекта = Ложь; - ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Ложь; - -КонецПроцедуры - -// Выполняет обработчик После загрузки данных. -// Сбрасывает переменные и проводит отложенное проведение документов и запись объектов. -// -Процедура ВнешнееСоединениеПослеЗагрузкиДанных() Экспорт - - // Отложенная запись того, что не записали. - ПровестиЗаписьНеЗаписанныхОбъектов(); - - // Обработчик ПослеЗагрузкиДанных - Если Не ФлагОшибки() Тогда - - Если Не ПустаяСтрока(Конвертация.ПослеЗагрузкиДанных) Тогда - - Попытка - - Если ОтладкаОбработчиковЗагрузки Тогда - - ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиДанных(); - - Иначе - - Выполнить(Конвертация.ПослеЗагрузкиДанных); - - КонецЕсли; - - Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(23, ОписаниеОшибки(), НСтр("ru = 'ПослеЗагрузкиДанных (конвертация)'")); - КонецПопытки; - - КонецЕсли; - - КонецЕсли; - - Если Не ФлагОшибки() Тогда - - // Выполняем проведение документов в очереди. - ВыполнитьОтложенноеПроведениеДокументов(); - ВыполнитьОтложеннуюЗаписьОбъектов(); - - // Запишем информацию о номере входящего сообщения. - ОбъектУзла = УзелОбменаЗагрузкаДанных.ПолучитьОбъект(); - ОбъектУзла.НомерПринятого = НомерСообщения(); - ОбъектУзла.ОбменДанными.Загрузка = Истина; - - Попытка - ОбъектУзла.Заблокировать(); - Исключение - ЗаписатьИнформациюОбОшибкеВПротокол(173, КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), ОбъектУзла); - КонецПопытки; - - КонецЕсли; - - Если Не ФлагОшибки() Тогда - - ОбъектУзла.Записать(); - - Если ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Истина Тогда - - РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ЗафиксироватьВыполнениеКорректировкиИнформацииСопоставленияБезусловно(УзелОбменаЗагрузкаДанных); - - КонецЕсли; - - Если ЕстьИнформацияОРегистрацииОбъекта = Истина Тогда - - РегистрыСведений.СоответствияОбъектовИнформационныхБаз.УдалитьНеактуальныеЗаписиРежимаВыгрузкиПоСсылке(УзелОбменаЗагрузкаДанных); - - КонецЕсли; - - КонецЕсли; - - ЗавершитьВедениеПротоколаОбмена(); - - // Сбрасываем модальные переменные перед помещением обработки в платформенный кэш. - ПолеДокументыДляОтложенногоПроведения = Неопределено; - ПолеОбъектыДляОтложеннойЗаписи = Неопределено; - СоответствиеДокументовДляОтложенногоПроведения = Неопределено; - ПолеСоответствиеТиповДанныхДляЗагрузки = Неопределено; - ГлобальныйСтекНеЗаписанныхОбъектов = Неопределено; - ФайлОбмена = Неопределено; - -КонецПроцедуры - -// Открывает новую транзакцию. -// -Процедура ВнешнееСоединениеПроверитьНачалоИФиксациюТранзакцииПриЗагрузкеДанных() Экспорт - - Если ИспользоватьТранзакции - И КоличествоОбъектовНаТранзакцию > 0 - И СчетчикЗагруженныхОбъектов() % КоличествоОбъектовНаТранзакцию = 0 Тогда - - ЗафиксироватьТранзакцию(); - НачатьТранзакцию(); - - КонецЕсли; - -КонецПроцедуры - -// Открывает транзакцию для обмена через внешнее соединение, если требуется. -// -Процедура ВнешнееСоединениеНачатьТранзакциюПриЗагрузкеДанных() Экспорт - - Если ИспользоватьТранзакции Тогда - НачатьТранзакцию(); - КонецЕсли; - -КонецПроцедуры - -// Завершает транзакцию при обмене через внешнее соединение (если загрузка выполнялась в транзакции). -// -Процедура ВнешнееСоединениеЗафиксироватьТранзакциюПриЗагрузкеДанных() Экспорт - - Если ИспользоватьТранзакции Тогда - - Если ФлагОшибки() Тогда - ОтменитьТранзакцию(); - Иначе - ЗафиксироватьТранзакцию(); - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -// Отменяет транзакцию при обмене через внешнее соединение. -// -Процедура ВнешнееСоединениеОтменитьТранзакциюПриЗагрузкеДанных() Экспорт - - Пока ТранзакцияАктивна() Цикл - ОтменитьТранзакцию(); - КонецЦикла; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ, ИСПОЛЬЗУЕМЫЕ В ОБРАБОТЧИКАХ СОБЫТИЙ - -// Создает в файле обмена запись об удалении объекта. -// -// Параметры: -// Ссылка - Ссылка на удаляемый объект. -// ТипПриемника - Строка - Содержит строковое представление типа приемника. -// ТипИсточника - Строка - Содержит строковое представление типа источника. -// -Процедура ЗаписатьВФайлУдалениеОбъекта(Ссылка, Знач ТипПриемника, Знач ТипИсточника) Экспорт - - Приемник = СоздатьУзел("УдалениеОбъекта"); - - УстановитьАтрибут(Приемник, "ТипПриемника", ТипПриемника); - УстановитьАтрибут(Приемник, "ТипИсточника", ТипИсточника); - - УстановитьАтрибут(Приемник, "УникальныйИдентификатор", Ссылка.УникальныйИдентификатор()); - - Приемник.ЗаписатьКонецЭлемента(); // УдалениеОбъекта - - ЗаписатьВФайл(Приемник); - -КонецПроцедуры - -// Регистрирует объект, созданный при выгрузке. -// -// Параметры: -// Ссылка - Ссылка на регистрируемый объект. -// -Процедура ЗарегистрироватьОбъектСозданныйПриВыгрузке(Ссылка) Экспорт - - Если СозданныеПриВыгрузкеОбъекты().Найти(Ссылка) = Неопределено Тогда - - СозданныеПриВыгрузкеОбъекты().Добавить(Ссылка); - - КонецЕсли; - -КонецПроцедуры - -// Регистрирует предупреждение в журнале регистрации. -// Если в процессе обмена данными было обращение к этой процедуре, то обмен данными остановлен не будет. -// После завершения обмена статус выполнения обмена в мониторе для пользователя будет иметь значение "Предупреждение", -// если не было ошибок. -// -// Параметры: -// Предупреждение - Строка. Текст предупреждения, который надо зарегистрировать. -// Информация, предупреждения и ошибки, возникающие в процессе обмена данными регистрируются в журнале регистрации. -// -Процедура ЗарегистрироватьПредупреждение(Предупреждение) Экспорт - - ЗаписатьВПротоколВыполнения(Предупреждение,,Ложь,,,, Перечисления.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями); - -КонецПроцедуры - -// Признак того, что это загрузка в информационную базу. -// -// Возвращаемое значение: -// Булево - Признак режима загрузки данных. -// -Функция РежимЗагрузкиДанныхВИнформационнуюБазу() Экспорт - - Возврат ПустаяСтрока(РежимЗагрузкиДанных) ИЛИ ВРег(РежимЗагрузкиДанных) = ВРег("ЗагрузкаВИнформационнуюБазу"); - -КонецФункции - -// Записывает объект в информационную базу. -// -// Параметры: -// Объект - Записываемый объект. -// Тип - Строка - Тип объекта строкой. -// -Процедура ЗаписатьОбъектВИБ(Объект, Тип, ЗаписатьОбъект = Ложь, Знач ОтправкаНазад = Ложь) Экспорт - - // В режиме загрузки в ТЗ объекты не записываем. - Если РежимЗагрузкиДанныхВТаблицуЗначений() Тогда - Возврат; - КонецЕсли; - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() - И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() - И Не ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(Объект.Метаданные().ПолноеИмя(), ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных()) - И Не ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(Объект.Метаданные().ПолноеИмя(), ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных()) Тогда - - СтрокаСообщенияОбОшибке = НСтр("ru = 'Попытка изменения неразделенных данных (%1) в разделенном сеансе.'"); - СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, Объект.Метаданные().ПолноеИмя()); - - ЗаписатьВПротоколВыполнения(СтрокаСообщенияОбОшибке,, Ложь,,,, Перечисления.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями); - - Возврат; - - КонецЕсли; - - // Устанавливаем режим загрузки данных для объекта. - УстановитьОбменДаннымиЗагрузка(Объект,, ОтправкаНазад); - - // Выполняем проверку на пометку удаления предопределенного элемента. - СнятьПометкуУдаленияСПредопределенногоЭлемента(Объект, Тип); - - НачатьТранзакцию(); - Попытка - - // Записываем объект в транзакцию. - Объект.Записать(); - - СоответствияОбъектовИнформационныхБаз = Неопределено; - Если Объект.ДополнительныеСвойства.Свойство("СоответствияОбъектовИнформационныхБаз", СоответствияОбъектовИнформационныхБаз) - И СоответствияОбъектовИнформационныхБаз <> Неопределено Тогда - - СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника = Объект.Ссылка; - - РегистрыСведений.СоответствияОбъектовИнформационныхБаз.ДобавитьЗапись(СоответствияОбъектовИнформационныхБаз); - КонецЕсли; - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - - ЗаписатьОбъект = Ложь; - - СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеВПротокол(26, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Объект, Тип); - - Если Не ПродолжитьПриОшибке Тогда - ВызватьИсключение СтрокаСообщенияОбОшибке; - КонецЕсли; - - КонецПопытки; - -КонецПроцедуры - -// Отменяет проведение объекта в информационной базе. -// -// Параметры: -// Объект - Объект для отмены проведения. -// Тип - Строка - Тип объекта строкой. -// -Процедура ОтменитьПроведениеОбъектаВИБ(Объект, Тип, ЗаписатьОбъект = Ложь) Экспорт - - Если ОбменДаннымиСобытия.ЗагрузкаЗапрещена(Объект, УзелОбменаЗагрузкаДанных) Тогда - Возврат; - КонецЕсли; - - РегистрыСведений.РезультатыОбменаДанными.ЗарегистрироватьУстранениеПроблемы(Объект, - Перечисления.ТипыПроблемОбменаДанными.НепроведенныйДокумент); - - // Устанавливаем режим загрузки данных для объекта. - УстановитьОбменДаннымиЗагрузка(Объект); - - НачатьТранзакцию(); - Попытка - - // Отменяем проведение документа. - Объект.Проведен = Ложь; - Объект.Записать(); - - СоответствияОбъектовИнформационныхБаз = Неопределено; - Если Объект.ДополнительныеСвойства.Свойство("СоответствияОбъектовИнформационныхБаз", СоответствияОбъектовИнформационныхБаз) - И СоответствияОбъектовИнформационныхБаз <> Неопределено Тогда - - СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника = Объект.Ссылка; - - РегистрыСведений.СоответствияОбъектовИнформационныхБаз.ДобавитьЗапись(СоответствияОбъектовИнформационныхБаз); - КонецЕсли; - - УдалитьДвиженияУДокумента(Объект); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - - ЗаписатьОбъект = Ложь; - - СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеВПротокол(26, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Объект, Тип); - - Если Не ПродолжитьПриОшибке Тогда - ВызватьИсключение СтрокаСообщенияОбОшибке; - КонецЕсли; - - КонецПопытки; - -КонецПроцедуры +#Область ОтправкаДанных // Производит выгрузку объекта в соответствии с указанным правилом конвертации. // @@ -2388,6 +1042,342 @@ КонецФункции +// Выгружает регистр, вызывая правила ПередВыгрузкой и ПослеВыгрузки. +// +Функция ВыгрузкаРегистра(НаборЗаписейДляВыгрузки, + Правило = Неопределено, + ВходящиеДанные = Неопределено, + НеВыгружатьОбъектыСвойствПоСсылкам = Ложь, + ИмяПКО = "") Экспорт + + ИмяПКО = ""; + Отказ = Ложь; + ИсходящиеДанные = Неопределено; + + ВызватьСобытияПередВыгрузкойОбъекта(НаборЗаписейДляВыгрузки, Правило, Неопределено, ВходящиеДанные, + НеВыгружатьОбъектыСвойствПоСсылкам, ИмяПКО, Отказ, ИсходящиеДанные); + + Если Отказ Тогда + Возврат Ложь; + КонецЕсли; + + + ВыгрузитьРегистр(НаборЗаписейДляВыгрузки, + Неопределено, + ИсходящиеДанные, + НеВыгружатьОбъектыСвойствПоСсылкам, + ИмяПКО, + Правило); + + ВызватьСобытияПослеВыгрузкиОбъекта(НаборЗаписейДляВыгрузки, Правило, Неопределено, ВходящиеДанные, + НеВыгружатьОбъектыСвойствПоСсылкам, ИмяПКО, Отказ, ИсходящиеДанные); + + Возврат Не Отказ; + +КонецФункции + +// Формирует результат запроса для выгрузки очистки данных. +// +Функция ПолучитьРезультатЗапросаДляВыгрузкиОчисткиДанных(Свойства, ИмяТипа, + ВыборкаДляОчисткиДанных = Ложь, УдалятьОбъектыНепосредственно = Ложь, ВыбиратьВсеПоля = Истина) Экспорт + + СтрокаРазрешения = ?(ВыгружатьТолькоРазрешенные, " РАЗРЕШЕННЫЕ ", ""); + + СтрокаВыбораПолей = ?(ВыбиратьВсеПоля, " * ", " ОбъектДляВыгрузки.Ссылка КАК Ссылка "); + + Если ИмяТипа = "Справочник" + ИЛИ ИмяТипа = "ПланВидовХарактеристик" + ИЛИ ИмяТипа = "ПланСчетов" + ИЛИ ИмяТипа = "ПланВидовРасчета" + ИЛИ ИмяТипа = "РегистрБухгалтерии" + ИЛИ ИмяТипа = "ПланОбмена" + ИЛИ ИмяТипа = "Задача" + ИЛИ ИмяТипа = "БизнесПроцесс" Тогда + + Запрос = Новый Запрос(); + + Если ИмяТипа = "РегистрБухгалтерии" Тогда + + СтрокаВыбораПолей = "*"; + + КонецЕсли; + + Запрос.Текст = "ВЫБРАТЬ " + СтрокаРазрешения + " + | " + СтрокаВыбораПолей + " + |ИЗ + | " + ИмяТипа + "." + Свойства.Имя + " КАК ОбъектДляВыгрузки + | + |"; + + Если ВыборкаДляОчисткиДанных + И УдалятьОбъектыНепосредственно Тогда + + Если (ИмяТипа = "Справочник" + ИЛИ ИмяТипа = "ПланВидовХарактеристик") Тогда + + Если ИмяТипа = "Справочник" Тогда + НужнаИерархия = Метаданные.Справочники[Свойства.Имя].Иерархический; + Иначе + НужнаИерархия = Метаданные.ПланыВидовХарактеристик[Свойства.Имя].Иерархический; + КонецЕсли; + + Если НужнаИерархия Тогда + + Запрос.Текст = Запрос.Текст + " + | ГДЕ ОбъектДляВыгрузки.Родитель = &Родитель + |"; + + Запрос.УстановитьПараметр("Родитель", Свойства.Менеджер.ПустаяСсылка()); + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + ИначеЕсли ИмяТипа = "Документ" Тогда + + Запрос = Новый Запрос(); + + ИтоговоеОграничениеПоДате = ""; + + Запрос.Текст = "ВЫБРАТЬ " + СтрокаРазрешения + " + | " + СтрокаВыбораПолей + " + |ИЗ + | " + ИмяТипа + "." + Свойства.Имя + " КАК ОбъектДляВыгрузки + | + |" + ИтоговоеОграничениеПоДате; + + + ИначеЕсли ИмяТипа = "РегистрСведений" Тогда + + Непериодический = НЕ Свойства.Периодический; + ПодчиненныйРегистратору = Свойства.ПодчиненныйРегистратору; + + + НеНужноОграничениеПоДатам = ВыборкаДляОчисткиДанных ИЛИ Непериодический; + + Запрос = Новый Запрос(); + + ИтоговоеОграничениеПоДате = ""; + + СтрокаДополненияПолейВыборкиПодчиненРегистратору = ?(НЕ ПодчиненныйРегистратору, ", NULL КАК Активность, + | NULL КАК Регистратор, + | NULL КАК НомерСтроки", ""); + + СтрокаДополненияПолейВыборкиПериодичность = ?(Непериодический, ", NULL КАК Период", ""); + + Запрос.Текст = "ВЫБРАТЬ " + СтрокаРазрешения + + " + | * + | " + СтрокаДополненияПолейВыборкиПодчиненРегистратору + " + | " + СтрокаДополненияПолейВыборкиПериодичность + " + |ИЗ + | " + ИмяТипа + "." + Свойства.Имя + " КАК ОбъектДляВыгрузки + |" + ИтоговоеОграничениеПоДате; + + Иначе + + Возврат Неопределено; + + КонецЕсли; + + + Возврат Запрос.Выполнить(); + +КонецФункции + +// Формирует выборку для выгрузки очистки данных. +// +Функция ПолучитьВыборкуДляВыгрузкиОчисткиДанных(Свойства, ИмяТипа, + ВыборкаДляОчисткиДанных = Ложь, УдалятьОбъектыНепосредственно = Ложь, ВыбиратьВсеПоля = Истина) Экспорт + + РезультатЗапроса = ПолучитьРезультатЗапросаДляВыгрузкиОчисткиДанных(Свойства, ИмяТипа, + ВыборкаДляОчисткиДанных, УдалятьОбъектыНепосредственно, ВыбиратьВсеПоля); + + Если РезультатЗапроса = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Выборка = РезультатЗапроса.Выбрать(); + + + Возврат Выборка; + +КонецФункции + +// Выгружает данные по указанному правилу. +// +// Параметры: +// Правило - ссылка на правило выгрузки данных. +// +Процедура ВыгрузитьДанныеПоПравилу(Правило) Экспорт + + ИмяПКО = Правило.ПравилоКонвертации; + + Если Не ПустаяСтрока(ИмяПКО) Тогда + + ПКО = Правила[ИмяПКО]; + + КонецЕсли; + + + Если ФлагКомментироватьОбработкуОбъектов Тогда + + СтрокаСообщения = НСтр("ru = 'ПРАВИЛО ВЫГРУЗКИ ДАННЫХ: %1 (%2)'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СокрЛП(Правило.Имя), СокрЛП(Правило.Наименование)); + ЗаписатьВПротоколВыполнения(СтрокаСообщения, , Ложь, , 4); + + КонецЕсли; + + + // Обработчик ПередОбработкой + Отказ = Ложь; + ИсходящиеДанные = Неопределено; + ВыборкаДанных = Неопределено; + + Если Не ПустаяСтрока(Правило.ПередОбработкой) Тогда + + Попытка + + Если ОтладкаОбработчиковВыгрузки Тогда + + ВыполнитьОбработчик_ПВД_ПередОбработкойПравила(Отказ, ИмяПКО, Правило, ИсходящиеДанные, ВыборкаДанных); + + Иначе + + Выполнить(Правило.ПередОбработкой); + + КонецЕсли; + + Исключение + + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(31, ОписаниеОшибки(), Правило.Имя, "ПередОбработкойВыгрузкиДанных"); + + КонецПопытки; + + Если Отказ Тогда + + Возврат; + + КонецЕсли; + + КонецЕсли; + + // Стандартная выборка с отбором. + Если Правило.СпособОтбораДанных = "СтандартнаяВыборка" И Правило.ИспользоватьОтбор Тогда + + Выборка = ПолучитьВыборкуДляВыгрузкиСОграничениями(Правило); + + Пока Выборка.Следующий() Цикл + ВыгрузкаОбъектаВыборки(Выборка.Ссылка, Правило, , ИсходящиеДанные); + КонецЦикла; + + // Стандартная выборка без отбора. + ИначеЕсли (Правило.СпособОтбораДанных = "СтандартнаяВыборка") Тогда + + Свойства = Менеджеры[Правило.ОбъектВыборки]; + ИмяТипа = Свойства.ИмяТипа; + + Если ИмяТипа = "Константы" Тогда + + ВыгрузитьНаборКонстант(Правило, Свойства, ИсходящиеДанные); + + Иначе + + ЭтоНеСсылочныйТип = ИмяТипа = "РегистрСведений" + ИЛИ ИмяТипа = "РегистрБухгалтерии"; + + + Если ЭтоНеСсылочныйТип Тогда + + ВыбиратьВсеПоля = ОпределитьНужноВыбиратьВсеПоля(Правило); + + Иначе + + // получаем только ссылку + ВыбиратьВсеПоля = Ложь; + + КонецЕсли; + + + Выборка = ПолучитьВыборкуДляВыгрузкиОчисткиДанных(Свойства, ИмяТипа, , , ВыбиратьВсеПоля); + + Если Выборка = Неопределено Тогда + Возврат; + КонецЕсли; + + Пока Выборка.Следующий() Цикл + + Если ЭтоНеСсылочныйТип Тогда + + ВыгрузкаОбъектаВыборки(Выборка, Правило, Свойства, ИсходящиеДанные); + + Иначе + + ВыгрузкаОбъектаВыборки(Выборка.Ссылка, Правило, Свойства, ИсходящиеДанные); + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + ИначеЕсли Правило.СпособОтбораДанных = "ПроизвольныйАлгоритм" Тогда + + Если ВыборкаДанных <> Неопределено Тогда + + Выборка = ПолучитьВыборкуДляВыгрузкиПоПроизвольномуАлгоритму(ВыборкаДанных); + + Если Выборка <> Неопределено Тогда + + Пока Выборка.Следующий() Цикл + + ВыгрузкаОбъектаВыборки(Выборка, Правило, , ИсходящиеДанные); + + КонецЦикла; + + Иначе + + Для каждого Объект Из ВыборкаДанных Цикл + + ВыгрузкаОбъектаВыборки(Объект, Правило, , ИсходящиеДанные); + + КонецЦикла; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + + // Обработчик ПослеОбработки + + Если Не ПустаяСтрока(Правило.ПослеОбработки) Тогда + + Попытка + + Если ОтладкаОбработчиковВыгрузки Тогда + + ВыполнитьОбработчик_ПВД_ПослеОбработкиПравила(ИмяПКО, Правило, ИсходящиеДанные); + + Иначе + + Выполнить(Правило.ПослеОбработки); + + КонецЕсли; + + Исключение + + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ОписаниеОшибки(), Правило.Имя, "ПослеОбработкиВыгрузкиДанных"); + + КонецПопытки; + + КонецЕсли; + +КонецПроцедуры + // Выгружает регистр по отбору. // // Параметры: @@ -2514,6 +1504,245 @@ КонецПроцедуры +// Добавляет в xml файл информацию о типах значения. +// +// Параметры: +// Приемник - xml-узел объекта приемника. +// Тип - Строка - выгружаемый тип. +// - Массив - содержит список выгружаемых строковых типов. +// СписокАтрибутов - Структура - Ключ содержит имя атрибута. +// +Процедура ВыгрузитьИнформациюОТипах(Приемник, Тип, СписокАтрибутов = Неопределено) Экспорт + + УзелТипов = СоздатьУзел("Типы"); + + Если СписокАтрибутов <> Неопределено Тогда + Для Каждого ЭлементКоллекции Из СписокАтрибутов Цикл + УстановитьАтрибут(УзелТипов, ЭлементКоллекции.Ключ, ЭлементКоллекции.Значение); + КонецЦикла; + КонецЕсли; + + Если ТипЗнч(Тип) = Тип("Строка") Тогда + одЗаписатьЭлемент(УзелТипов, "Тип", Тип); + Иначе + Для Каждого ТипСтрокой Из Тип Цикл + одЗаписатьЭлемент(УзелТипов, "Тип", ТипСтрокой); + КонецЦикла; + КонецЕсли; + + ДобавитьПодчиненный(Приемник, УзелТипов); + +КонецПроцедуры + +// Создает в файле обмена запись об удалении объекта. +// +// Параметры: +// Ссылка - Ссылка на удаляемый объект. +// ТипПриемника - Строка - Содержит строковое представление типа приемника. +// ТипИсточника - Строка - Содержит строковое представление типа источника. +// +Процедура ЗаписатьВФайлУдалениеОбъекта(Ссылка, Знач ТипПриемника, Знач ТипИсточника) Экспорт + + Приемник = СоздатьУзел("УдалениеОбъекта"); + + УстановитьАтрибут(Приемник, "ТипПриемника", ТипПриемника); + УстановитьАтрибут(Приемник, "ТипИсточника", ТипИсточника); + + УстановитьАтрибут(Приемник, "УникальныйИдентификатор", Ссылка.УникальныйИдентификатор()); + + Приемник.ЗаписатьКонецЭлемента(); // УдалениеОбъекта + + ЗаписатьВФайл(Приемник); + +КонецПроцедуры + +// Регистрирует объект, созданный при выгрузке. +// +// Параметры: +// Ссылка - Ссылка на регистрируемый объект. +// +Процедура ЗарегистрироватьОбъектСозданныйПриВыгрузке(Ссылка) Экспорт + + Если СозданныеПриВыгрузкеОбъекты().Найти(Ссылка) = Неопределено Тогда + + СозданныеПриВыгрузкеОбъекты().Добавить(Ссылка); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ПолучениеДанных + +// Возвращает таблицу значений, в которой содержатся ссылки на документы для отложенного проведения, +// а также даты этих документов для предварительной сортировки. +// +// Возвращаемое значение: +// Таблица значений, колонки: +// ДокументСсылка - ссылка, ссылка на загруженный документ требующий отложенного проведения; +// ДатаДокумента - дата, дата загруженного документа для предварительной сортировки таблицы. +// +Функция ДокументыДляОтложенногоПроведения() Экспорт + + Если ТипЗнч(ПолеДокументыДляОтложенногоПроведения) <> Тип("ТаблицаЗначений") Тогда + + // Инициализируем таблицу для отложенного проведения документов. + ПолеДокументыДляОтложенногоПроведения = Новый ТаблицаЗначений; + ПолеДокументыДляОтложенногоПроведения.Колонки.Добавить("ДокументСсылка"); + ПолеДокументыДляОтложенногоПроведения.Колонки.Добавить("ДатаДокумента", одОписаниеТипа("Дата")); + + КонецЕсли; + + Возврат ПолеДокументыДляОтложенногоПроведения; + +КонецФункции + +// Признак того, что это загрузка в информационную базу. +// +// Возвращаемое значение: +// Булево - Признак режима загрузки данных. +// +Функция РежимЗагрузкиДанныхВИнформационнуюБазу() Экспорт + + Возврат ПустаяСтрока(РежимЗагрузкиДанных) ИЛИ ВРег(РежимЗагрузкиДанных) = ВРег("ЗагрузкаВИнформационнуюБазу"); + +КонецФункции + +// Добавляет в таблицу отложенного проведения строку содержащую ссылку на документ, +// который необходимо провести и дату документа для предварительной сортировки. +// +// Параметры: +// СсылкаНаОбъект - Ссылка, объект, который необходимо провести отложенно; +// ДатаОбъекта - Дата, дата объекта; +// ДополнительныеСвойства - Структура, дополнительные свойства записываемого объекта. +// +Процедура ДобавитьОбъектДляОтложенногоПроведения(СсылкаНаОбъект, ДатаОбъекта, ДополнительныеСвойства) Экспорт + + ТаблицаОтложенногоПроведения = ДокументыДляОтложенногоПроведения(); + НоваяСтрока = ТаблицаОтложенногоПроведения.Добавить(); + НоваяСтрока.ДокументСсылка = СсылкаНаОбъект; + НоваяСтрока.ДатаДокумента = ДатаОбъекта; + + ДополнительныеСвойстваДляОтложенногоПроведения().Вставить(СсылкаНаОбъект, ДополнительныеСвойства); + +КонецПроцедуры + +// Записывает объект в информационную базу. +// +// Параметры: +// Объект - Записываемый объект. +// Тип - Строка - Тип объекта строкой. +// +Процедура ЗаписатьОбъектВИБ(Объект, Тип, ЗаписатьОбъект = Ложь, Знач ОтправкаНазад = Ложь) Экспорт + + // В режиме загрузки в ТЗ объекты не записываем. + Если РежимЗагрузкиДанныхВТаблицуЗначений() Тогда + Возврат; + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() + И Не ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(Объект.Метаданные().ПолноеИмя(), ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных()) + И Не ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(Объект.Метаданные().ПолноеИмя(), ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных()) Тогда + + СтрокаСообщенияОбОшибке = НСтр("ru = 'Попытка изменения неразделенных данных (%1) в разделенном сеансе.'"); + СтрокаСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщенияОбОшибке, Объект.Метаданные().ПолноеИмя()); + + ЗаписатьВПротоколВыполнения(СтрокаСообщенияОбОшибке,, Ложь,,,, Перечисления.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями); + + Возврат; + + КонецЕсли; + + // Устанавливаем режим загрузки данных для объекта. + УстановитьОбменДаннымиЗагрузка(Объект,, ОтправкаНазад); + + // Выполняем проверку на пометку удаления предопределенного элемента. + СнятьПометкуУдаленияСПредопределенногоЭлемента(Объект, Тип); + + НачатьТранзакцию(); + Попытка + + // Записываем объект в транзакцию. + Объект.Записать(); + + СоответствияОбъектовИнформационныхБаз = Неопределено; + Если Объект.ДополнительныеСвойства.Свойство("СоответствияОбъектовИнформационныхБаз", СоответствияОбъектовИнформационныхБаз) + И СоответствияОбъектовИнформационныхБаз <> Неопределено Тогда + + СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника = Объект.Ссылка; + + РегистрыСведений.СоответствияОбъектовИнформационныхБаз.ДобавитьЗапись(СоответствияОбъектовИнформационныхБаз); + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + + ЗаписатьОбъект = Ложь; + + СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеВПротокол(26, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Объект, Тип); + + Если Не ПродолжитьПриОшибке Тогда + ВызватьИсключение СтрокаСообщенияОбОшибке; + КонецЕсли; + + КонецПопытки; + +КонецПроцедуры + +// Отменяет проведение объекта в информационной базе. +// +// Параметры: +// Объект - Объект для отмены проведения. +// Тип - Строка - Тип объекта строкой. +// +Процедура ОтменитьПроведениеОбъектаВИБ(Объект, Тип, ЗаписатьОбъект = Ложь) Экспорт + + Если ОбменДаннымиСобытия.ЗагрузкаЗапрещена(Объект, УзелОбменаЗагрузкаДанныхОбъект) Тогда + Возврат; + КонецЕсли; + + РегистрыСведений.РезультатыОбменаДанными.ЗарегистрироватьУстранениеПроблемы(Объект, + Перечисления.ТипыПроблемОбменаДанными.НепроведенныйДокумент); + + // Устанавливаем режим загрузки данных для объекта. + УстановитьОбменДаннымиЗагрузка(Объект); + + НачатьТранзакцию(); + Попытка + + // Отменяем проведение документа. + Объект.Проведен = Ложь; + Объект.Записать(); + + СоответствияОбъектовИнформационныхБаз = Неопределено; + Если Объект.ДополнительныеСвойства.Свойство("СоответствияОбъектовИнформационныхБаз", СоответствияОбъектовИнформационныхБаз) + И СоответствияОбъектовИнформационныхБаз <> Неопределено Тогда + + СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника = Объект.Ссылка; + + РегистрыСведений.СоответствияОбъектовИнформационныхБаз.ДобавитьЗапись(СоответствияОбъектовИнформационныхБаз); + КонецЕсли; + + ОбменДаннымиСервер.УдалитьДвиженияУДокумента(Объект); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + + ЗаписатьОбъект = Ложь; + + СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеВПротокол(26, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Объект, Тип); + + Если Не ПродолжитьПриОшибке Тогда + ВызватьИсключение СтрокаСообщенияОбОшибке; + КонецЕсли; + + КонецПопытки; + +КонецПроцедуры + // Устанавливает пометку удаления. // // Параметры: @@ -2524,7 +1753,7 @@ Процедура УстановитьПометкуУдаленияУОбъекта(Объект, ПометкаУдаления, ИмяТипаОбъекта) Экспорт Если (ПометкаУдаления = Неопределено И Объект.ПометкаУдаления <> Истина) - Или ОбменДаннымиСобытия.ЗагрузкаЗапрещена(Объект, УзелОбменаЗагрузкаДанных) Тогда + Или ОбменДаннымиСобытия.ЗагрузкаЗапрещена(Объект, УзелОбменаЗагрузкаДанныхОбъект) Тогда Возврат; КонецЕсли; @@ -2557,6 +1786,964 @@ КонецПроцедуры +#КонецОбласти + +#Область Прочее + +// Регистрирует предупреждение в журнале регистрации. +// Если в процессе обмена данными было обращение к этой процедуре, то обмен данными остановлен не будет. +// После завершения обмена статус выполнения обмена в мониторе для пользователя будет иметь значение "Предупреждение", +// если не было ошибок. +// +// Параметры: +// Предупреждение - Строка. Текст предупреждения, который надо зарегистрировать. +// Информация, предупреждения и ошибки, возникающие в процессе обмена данными регистрируются в журнале регистрации. +// +Процедура ЗарегистрироватьПредупреждение(Предупреждение) Экспорт + + ЗаписатьВПротоколВыполнения(Предупреждение,,Ложь,,,, Перечисления.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями); + +КонецПроцедуры + +// Устанавливает состояние пометки у подчиненных строк строки дерева значений +// в зависимости от пометки текущей строки. +// +// Параметры: +// ТекСтрока - Строка дерева значений. +// +Процедура УстановитьПометкиПодчиненных(ТекСтрока, Реквизит) Экспорт + + Подчиненные = ТекСтрока.Строки; + + Если Подчиненные.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Для Каждого Строка Из Подчиненные Цикл + + Если Строка.НастройкиПостроителя = Неопределено + И Реквизит = "ИспользоватьОтбор" Тогда + + Строка[Реквизит] = 0; + + Иначе + + Строка[Реквизит] = ТекСтрока[Реквизит]; + + КонецЕсли; + + УстановитьПометкиПодчиненных(Строка, Реквизит); + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +#Область ЭкспортныеСвойства + +// Функция-свойство: флаг ошибки выполнения обмена данными. +// +// Возвращаемое значение: +// Булево - флаг ошибки выполнения обмена данными. +// +Функция ФлагОшибки() Экспорт + + Если ТипЗнч(ПолеФлагОшибки) <> Тип("Булево") Тогда + + ПолеФлагОшибки = Ложь; + + КонецЕсли; + + Возврат ПолеФлагОшибки; + +КонецФункции + +// Функция-свойство: результат выполнения обмена данными. +// +// Возвращаемое значение: +// ПеречислениеСсылка.РезультатыВыполненияОбмена - результат выполнения обмена данными. +// +Функция РезультатВыполненияОбмена() Экспорт + + Если ТипЗнч(ПолеРезультатВыполненияОбмена) <> Тип("ПеречислениеСсылка.РезультатыВыполненияОбмена") Тогда + + ПолеРезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Выполнено; + + КонецЕсли; + + Возврат ПолеРезультатВыполненияОбмена; + +КонецФункции + +// Функция-свойство: результат выполнения обмена данными. +// +// Возвращаемое значение: +// Строка - Строковое представление значения перечисления ПеречислениеСсылка.РезультатыВыполненияОбмена. +// +Функция РезультатВыполненияОбменаСтрокой() Экспорт + + Возврат ОбщегоНазначения.ИмяЗначенияПеречисления(РезультатВыполненияОбмена()); + +КонецФункции + +// Функция-свойство: соответствие с таблицами данных входящего сообщения обмена. +// +// Возвращаемое значение: +// Соответствие - соответствие с таблицами данных входящего сообщения обмена. +// +Функция ТаблицыДанныхСообщенияОбмена() Экспорт + + Если ТипЗнч(ПолеТаблицыДанныхСообщенияОбмена) <> Тип("Соответствие") Тогда + + ПолеТаблицыДанныхСообщенияОбмена = Новый Соответствие; + + КонецЕсли; + + Возврат ПолеТаблицыДанныхСообщенияОбмена; + +КонецФункции + +// Функция-свойство: таблица значений со статистической и дополнительной информацией о входящем сообщении обмена. +// +// Возвращаемое значение: +// ТаблицаЗначений - таблица значений со статистической и дополнительной информацией о входящем сообщении обмена. +// +Функция ТаблицаДанныхЗаголовкаПакета() Экспорт + + Если ТипЗнч(ПолеТаблицаДанныхЗаголовкаПакета) <> Тип("ТаблицаЗначений") Тогда + + ПолеТаблицаДанныхЗаголовкаПакета = Новый ТаблицаЗначений; + + Колонки = ПолеТаблицаДанныхЗаголовкаПакета.Колонки; + + Колонки.Добавить("ТипОбъектаСтрокой", одОписаниеТипа("Строка")); + Колонки.Добавить("КоличествоОбъектовВИсточнике", одОписаниеТипа("Число")); + Колонки.Добавить("ПоляПоиска", одОписаниеТипа("Строка")); + Колонки.Добавить("ПоляТаблицы", одОписаниеТипа("Строка")); + + Колонки.Добавить("ТипИсточникаСтрокой", одОписаниеТипа("Строка")); + Колонки.Добавить("ТипПриемникаСтрокой", одОписаниеТипа("Строка")); + + Колонки.Добавить("СинхронизироватьПоИдентификатору", одОписаниеТипа("Булево")); + Колонки.Добавить("ЭтоУдалениеОбъекта", одОписаниеТипа("Булево")); + Колонки.Добавить("ЭтоКлассификатор", одОписаниеТипа("Булево")); + Колонки.Добавить("ИспользоватьПредварительныйПросмотр", одОписаниеТипа("Булево")); + + КонецЕсли; + + Возврат ПолеТаблицаДанныхЗаголовкаПакета; + +КонецФункции + +// Функция-свойство: строка, которая содержит сообщение об ошибке при обмене данными. +// +// Возвращаемое значение: +// Строка - строка, которая содержит сообщение об ошибке при обмене данными. +// +Функция СтрокаСообщенияОбОшибке() Экспорт + + Если ТипЗнч(ПолеСтрокаСообщенияОбОшибке) <> Тип("Строка") Тогда + + ПолеСтрокаСообщенияОбОшибке = ""; + + КонецЕсли; + + Возврат ПолеСтрокаСообщенияОбОшибке; + +КонецФункции + +// Функция-свойство: количество объектов, которые были загружены. +// +// Возвращаемое значение: +// Число - количество объектов, которые были загружены. +// +Функция СчетчикЗагруженныхОбъектов() Экспорт + + Если ТипЗнч(ПолеСчетчикЗагруженныхОбъектов) <> Тип("Число") Тогда + + ПолеСчетчикЗагруженныхОбъектов = 0; + + КонецЕсли; + + Возврат ПолеСчетчикЗагруженныхОбъектов; + +КонецФункции + +// Функция-свойство: количество объектов, которые были выгружены. +// +// Возвращаемое значение: +// Число - количество объектов, которые были выгружены. +// +Функция СчетчикВыгруженныхОбъектов() Экспорт + + Если ТипЗнч(ПолеСчетчикВыгруженныхОбъектов) <> Тип("Число") Тогда + + ПолеСчетчикВыгруженныхОбъектов = 0; + + КонецЕсли; + + Возврат ПолеСчетчикВыгруженныхОбъектов; + +КонецФункции + +#КонецОбласти + +#Область ВыгрузкаДанных + +// Выполняет выгрузку данных +// -- Все объекты выгружаются в один файл. +// -- В заголовок файла выгружаются: +// - правила обмена +// - информация о типах данных +// - данные по обмену (имя плана обмена, коды узлов, номера сообщений (квитирование)). +// +// Параметры: +// +Процедура ВыполнитьВыгрузкуДанных(ОбработкаДляЗагрузкиДанных = Неопределено) Экспорт + + УстановитьФлагОшибки(Ложь); + + ПолеСтрокаСообщенияОбОшибке = ""; + ПолеСостояниеОбменаДанными = Неопределено; + ПолеРезультатВыполненияОбмена = Неопределено; + ПолеВыгруженныеПоСсылкеОбъекты = Неопределено; + ПолеСозданныеПриВыгрузкеОбъекты = Неопределено; + ПолеВыгружаемыеПоСсылкеОбъектыМетаданных = Неопределено; + ПолеПравилаРегистрацииОбъектов = Неопределено; + ПолеСвойстваУзлаПланаОбмена = Неопределено; + ПолеОбработкаДляЗагрузкиДанных = ОбработкаДляЗагрузкиДанных; + + ИнициализироватьВедениеПротоколаОбмена(); + + // Открываем файл обмена + Если ЭтоОбменЧерезВнешнееСоединение() Тогда + ФайлОбмена = Новый ЗаписьТекста; + Иначе + ОткрытьФайлВыгрузки(); + КонецЕсли; + + Если ФлагОшибки() Тогда + ФайлОбмена = Неопределено; + ЗавершитьВедениеПротоколаОбмена(); + Возврат; + КонецЕсли; + + ИмяПрофиляБезопасности = ИнициализироватьОбработки(); + + Если ИмяПрофиляБезопасности <> Неопределено Тогда + УстановитьБезопасныйРежим(ИмяПрофиляБезопасности); + КонецЕсли; + + Если ЭтоОбменЧерезВнешнееСоединение() Тогда + + ОбработкаДляЗагрузкиДанных().ВнешнееСоединениеПередЗагрузкойДанных(); + + ОбработкаДляЗагрузкиДанных().ЗагрузитьПравилаОбмена(XMLПравила, "Строка"); + + Если ОбработкаДляЗагрузкиДанных().ФлагОшибки() Тогда + + СтрокаСообщения = НСтр("ru = 'ВНЕШНЕЕ СОЕДИНЕНИЕ: %1'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ОбработкаДляЗагрузкиДанных().СтрокаСообщенияОбОшибке()); + ЗаписатьВПротоколВыполнения(СтрокаСообщения); + ЗавершитьВедениеПротоколаОбмена(); + Возврат; + + КонецЕсли; + + Отказ = Ложь; + + ОбработкаДляЗагрузкиДанных().ВнешнееСоединениеОбработчикКонвертацииПередЗагрузкойДанных(Отказ); + + Если Отказ Тогда + ЗавершитьВедениеПротоколаОбмена(); + ОтключитьОбработкуДляОтладки(); + Возврат; + КонецЕсли; + + Иначе + + // Включаем правила обмена в файл. + ФайлОбмена.ЗаписатьСтроку(XMLПравила); + + КонецЕсли; + + // ВЫГРУЗКА ДАННЫХ + Попытка + ВыполнитьВыгрузку(); + Исключение + ЗаписатьВПротоколВыполнения(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗавершитьВедениеПротоколаОбмена(); + ФайлОбмена = Неопределено; + ПолеВыгруженныеПоСсылкеОбъекты = Неопределено; + ПолеСозданныеПриВыгрузкеОбъекты = Неопределено; + ПолеВыгружаемыеПоСсылкеОбъектыМетаданных = Неопределено; + Возврат; + КонецПопытки; + + Если ЭтоОбменЧерезВнешнееСоединение() Тогда + + Если Не ФлагОшибки() Тогда + + ОбработкаДляЗагрузкиДанных().ВнешнееСоединениеПослеЗагрузкиДанных(); + + КонецЕсли; + + Иначе + + // Закрываем файл обмена + ЗакрытьФайл(); + + КонецЕсли; + + ЗавершитьВедениеПротоколаОбмена(); + + // Сбрасываем модальные переменные перед помещением обработки в платформенный кэш. + ПолеВыгруженныеПоСсылкеОбъекты = Неопределено; + ПолеСозданныеПриВыгрузкеОбъекты = Неопределено; + ПолеВыгружаемыеПоСсылкеОбъектыМетаданных = Неопределено; + ОтключитьОбработкуДляОтладки(); + ФайлОбмена = Неопределено; + +КонецПроцедуры + +#КонецОбласти + +#Область ЗагрузкаДанных + +// Выполняет загрузку данных из файла сообщения обмена. +// Данные загружаются в информационную базу. +// +// Параметры: +// +Процедура ВыполнитьЗагрузкуДанных() Экспорт + + Если ЗначениеЗаполнено(УзелОбменаЗагрузкаДанных) Тогда + УзелОбменаЗагрузкаДанныхОбъект = УзелОбменаЗагрузкаДанных.ПолучитьОбъект(); + КонецЕсли; + + ЧтениеСообщения = Неопределено; + Попытка + + РежимЗагрузкиДанных = "ЗагрузкаВИнформационнуюБазу"; + + ПолеСтрокаСообщенияОбОшибке = ""; + ПолеСостояниеОбменаДанными = Неопределено; + ПолеРезультатВыполненияОбмена = Неопределено; + ПолеСоответствиеТиповДанныхДляЗагрузки = Неопределено; + ПолеСчетчикЗагруженныхОбъектов = Неопределено; + ПолеДокументыДляОтложенногоПроведения = Неопределено; + ПолеОбъектыДляОтложеннойЗаписи = Неопределено; + СоответствиеДокументовДляОтложенногоПроведения = Неопределено; + ПолеСвойстваУзлаПланаОбмена = Неопределено; + ПолеВерсияФорматаВходящегоСообщенияОбмена = Неопределено; + ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Ложь; + ЕстьИнформацияОРегистрацииОбъекта = Ложь; + + ГлобальныйСтекНеЗаписанныхОбъектов = Новый Соответствие; + НомерПоследнегоПоискаПоСсылке = 0; + + ИнициализироватьМенеджерыИСообщения(); + + УстановитьФлагОшибки(Ложь); + + ИнициализироватьКомментарииПриВыгрузкеИЗагрузкеДанных(); + + ИнициализироватьВедениеПротоколаОбмена(); + + ИнформацияОПользовательскихПоляхПоискаПриЗагрузкеДанных = Новый Соответствие; + + СоответствиеДопПараметровПоиска = Новый Соответствие; + СоответствиеПравилКонвертации = Новый Соответствие; + + КоличествоВыполненныхОтложенныхДвиженийДокументов = 0; + + Если ПродолжитьПриОшибке Тогда + ИспользоватьТранзакции = Ложь; + КонецЕсли; + + Если КоличествоОбработанныхОбъектовДляОбновленияСтатуса = 0 Тогда + КоличествоОбработанныхОбъектовДляОбновленияСтатуса = 100; + КонецЕсли; + + РезультатПодсчетаДанныхКЗагрузке = ОбменДаннымиСервер.РезультатПодсчетаДанныхКЗагрузке(ИмяФайлаОбмена, Ложь); + РазмерФайлаСообщенияОбмена = РезультатПодсчетаДанныхКЗагрузке.РазмерФайлаСообщенияОбмена; + КоличествоОбъектовКЗагрузке = РезультатПодсчетаДанныхКЗагрузке.КоличествоОбъектовКЗагрузке; + + ИмяПрофиляБезопасности = ИнициализироватьОбработки(); + + Если ИмяПрофиляБезопасности <> Неопределено Тогда + УстановитьБезопасныйРежим(ИмяПрофиляБезопасности); + КонецЕсли; + + НачатьЧтениеСообщения(ЧтениеСообщения); + + Если ИспользоватьТранзакции Тогда + НачатьТранзакцию(); + КонецЕсли; + Попытка + + ПроизвестиЧтениеДанных(ЧтениеСообщения); + + Если ФлагОшибки() Тогда + ВызватьИсключение НСтр("ru = 'Возникли ошибки при загрузке данных.'"); + КонецЕсли; + + // Отложенная запись того, что не записали. + ПровестиЗаписьНеЗаписанныхОбъектов(); + + ВыполнитьОбработчикПослеЗагрузкиДанных(); + + Если ФлагОшибки() Тогда + ВызватьИсключение НСтр("ru = 'Возникли ошибки при загрузке данных.'"); + КонецЕсли; + + Если ИспользоватьТранзакции Тогда + ЗафиксироватьТранзакцию(); + КонецЕсли; + Исключение + Если ИспользоватьТранзакции Тогда + ОтменитьТранзакцию(); + КонецЕсли; + ПрерватьЧтениеСообщения(ЧтениеСообщения); + ВызватьИсключение; + КонецПопытки; + + // Выполняем проведение документов в очереди. + ВыполнитьОтложенноеПроведениеДокументов(); + ВыполнитьОтложеннуюЗаписьОбъектов(); + + ЗакончитьЧтениеСообщения(ЧтениеСообщения); + + Исключение + Если ЧтениеСообщения <> Неопределено + И ЧтениеСообщения.СообщениеБылоПринятоРанее Тогда + ЗаписатьВПротоколВыполнения(174,,,,,, + Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято); + Иначе + ЗаписатьВПротоколВыполнения(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецЕсли; + КонецПопытки; + + ЗавершитьВедениеПротоколаОбмена(); + + // Сбрасываем модальные переменные перед помещением обработки в платформенный кэш. + ПолеДокументыДляОтложенногоПроведения = Неопределено; + ПолеОбъектыДляОтложеннойЗаписи = Неопределено; + СоответствиеДокументовДляОтложенногоПроведения = Неопределено; + ПолеСоответствиеТиповДанныхДляЗагрузки = Неопределено; + ГлобальныйСтекНеЗаписанныхОбъектов = Неопределено; + СоответствиеПравилКонвертации = Неопределено; + ОтключитьОбработкуДляОтладки(); + ФайлОбмена = Неопределено; + +КонецПроцедуры + +#КонецОбласти + +#Область ЗагрузкаДанныхПакетная + +// Выполняет загрузку данных из файла сообщения обмена в Информационную Базу только заданных типов объектов. +// +// Параметры: +// ТаблицыДляЗагрузки - Массив - массив типов, которые необходимо загрузить из сообщения обмена; элемент массива - +// Строка. +// Например, для загрузки из сообщения обмена только элементов справочника Контрагенты: +// ТаблицыДляЗагрузки = Новый Массив; +// ТаблицыДляЗагрузки.Добавить("СправочникСсылка.Контрагенты"); +// +// Список всех типов, которые содержаться в текущем сообщении обмена +// можно получить вызовом процедуры ВыполнитьАнализСообщенияОбмена(). +// +Процедура ВыполнитьЗагрузкуДанныхВИнформационнуюБазу(ТаблицыДляЗагрузки) Экспорт + + РежимЗагрузкиДанных = "ЗагрузкаВИнформационнуюБазу"; + ПолеСостояниеОбменаДанными = Неопределено; + ПолеРезультатВыполненияОбмена = Неопределено; + ПолеДокументыДляОтложенногоПроведения = Неопределено; + ПолеОбъектыДляОтложеннойЗаписи = Неопределено; + СоответствиеДокументовДляОтложенногоПроведения = Неопределено; + ПолеСвойстваУзлаПланаОбмена = Неопределено; + ПолеВерсияФорматаВходящегоСообщенияОбмена = Неопределено; + ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Ложь; + ЕстьИнформацияОРегистрацииОбъекта = Ложь; + ГлобальныйСтекНеЗаписанныхОбъектов = Новый Соответствие; + СоответствиеПравилКонвертации = Новый Соответствие; + + // дата начала загрузки + СостояниеОбменаДанными().ДатаНачала = ТекущаяДатаСеанса(); + + // Запись в журнале регистрации. + СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла: %1'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(УзелОбменаЗагрузкаДанных)); + ЗаписьЖурналаРегистрацииОбменДанными(СтрокаСообщения, УровеньЖурналаРегистрации.Информация); + + ВыполнитьВыборочноеЧтениеСообщения(ТаблицыДляЗагрузки); + + // дата окончания загрузки + СостояниеОбменаДанными().ДатаОкончания = ТекущаяДатаСеанса(); + + // Фиксируем завершение загрузки данных в РС. + ЗафиксироватьЗавершениеЗагрузкиДанных(); + + // Запись в журнале регистрации. + СтрокаСообщения = НСтр("ru = '%1, %2; Обработано %3 объектов'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, + РезультатВыполненияОбмена(), + Перечисления.ДействияПриОбмене.ЗагрузкаДанных, + Формат(СчетчикЗагруженныхОбъектов(), "ЧГ=0")); + // + ЗаписьЖурналаРегистрацииОбменДанными(СтрокаСообщения, УровеньЖурналаРегистрации.Информация); + + // Сбрасываем модальные переменные перед помещением обработки в платформенный кэш. + ПолеДокументыДляОтложенногоПроведения = Неопределено; + ПолеОбъектыДляОтложеннойЗаписи = Неопределено; + СоответствиеДокументовДляОтложенногоПроведения = Неопределено; + ПолеСоответствиеТиповДанныхДляЗагрузки = Неопределено; + ГлобальныйСтекНеЗаписанныхОбъектов = Неопределено; + СоответствиеПравилКонвертации = Неопределено; + ФайлОбмена = Неопределено; + +КонецПроцедуры + +// Выполняет загрузку данных из файла сообщения обмена в Таблицу значений только заданных типов объектов. +// +// Параметры: +// ТаблицыДляЗагрузки - Массив - массив типов, которые необходимо загрузить из сообщения обмена; элемент массива - +// Строка. +// Например, для загрузки из сообщения обмена только элементов справочника Контрагенты: +// ТаблицыДляЗагрузки = Новый Массив; +// ТаблицыДляЗагрузки.Добавить("СправочникСсылка.Контрагенты"); +// +// Список всех типов, которые содержаться в текущем сообщении обмена +// можно получить вызовом процедуры ВыполнитьАнализСообщенияОбмена(). +// +Процедура ВыполнитьЗагрузкуДанныхВТаблицуЗначений(ТаблицыДляЗагрузки) Экспорт + + Если ЗначениеЗаполнено(УзелОбменаЗагрузкаДанных) Тогда + УзелОбменаЗагрузкаДанныхОбъект = УзелОбменаЗагрузкаДанных.ПолучитьОбъект(); + КонецЕсли; + + РежимЗагрузкиДанных = "ЗагрузкаВТаблицуЗначений"; + ПолеСостояниеОбменаДанными = Неопределено; + ПолеРезультатВыполненияОбмена = Неопределено; + ПолеДокументыДляОтложенногоПроведения = Неопределено; + ПолеОбъектыДляОтложеннойЗаписи = Неопределено; + СоответствиеДокументовДляОтложенногоПроведения = Неопределено; + ПолеСвойстваУзлаПланаОбмена = Неопределено; + ПолеВерсияФорматаВходящегоСообщенияОбмена = Неопределено; + ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Ложь; + ЕстьИнформацияОРегистрацииОбъекта = Ложь; + ГлобальныйСтекНеЗаписанныхОбъектов = Новый Соответствие; + СоответствиеПравилКонвертации = Новый Соответствие; + + ИспользоватьТранзакции = Ложь; + + // Инициализируем таблицы данных сообщения обмена. + Для Каждого КлючТаблицыДанных Из ТаблицыДляЗагрузки Цикл + + МассивПодстрок = СтрРазделить(КлючТаблицыДанных, "#"); + + ТипОбъекта = МассивПодстрок[1]; + + ТаблицыДанныхСообщенияОбмена().Вставить(КлючТаблицыДанных, ИнициализацияТаблицыДанныхСообщенияОбмена(Тип(ТипОбъекта))); + + КонецЦикла; + + ВыполнитьВыборочноеЧтениеСообщения(ТаблицыДляЗагрузки); + + // Сбрасываем модальные переменные перед помещением обработки в платформенный кэш. + ПолеДокументыДляОтложенногоПроведения = Неопределено; + ПолеОбъектыДляОтложеннойЗаписи = Неопределено; + СоответствиеДокументовДляОтложенногоПроведения = Неопределено; + ПолеСоответствиеТиповДанныхДляЗагрузки = Неопределено; + ГлобальныйСтекНеЗаписанныхОбъектов = Неопределено; + СоответствиеПравилКонвертации = Неопределено; + ФайлОбмена = Неопределено; + +КонецПроцедуры + +// Выполняет последовательное чтение файла сообщения обмена при этом: +// - удаляется регистрация изменений по номеру входящей квитанции +// - загружаются правила обмена +// - загружается информация о типах данных +// - зачитывается информация сопоставления данных и записывается и ИБ +// - собирается информация о типах объектов и их количестве. +// +// Параметры: +// ПараметрыАнализа - Структура. Необязательные дополнительные параметры анализа. Допустимые поля: +// * СобиратьСтатистикуКлассификаторов - Булево - Флаг того, что данные по классификаторам будут включены в +// статистику. +// Под классификаторами понимаются справочники, ПВХ, планы +// счетов, ПВР, у которых в ПКО установлены +// СинхронизироватьПоИдентификатору. и +// ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли. +// +Процедура ВыполнитьАнализСообщенияОбмена(ПараметрыАнализа = Неопределено) Экспорт + + ЧтениеСообщения = Неопределено; + + Если ЗначениеЗаполнено(УзелОбменаЗагрузкаДанных) Тогда + УзелОбменаЗагрузкаДанныхОбъект = УзелОбменаЗагрузкаДанных.ПолучитьОбъект(); + КонецЕсли; + + Попытка + + УстановитьФлагОшибки(Ложь); + + ИспользоватьТранзакции = Ложь; + + ПолеСтрокаСообщенияОбОшибке = ""; + ПолеСостояниеОбменаДанными = Неопределено; + ПолеРезультатВыполненияОбмена = Неопределено; + ПолеВерсияФорматаВходящегоСообщенияОбмена = Неопределено; + ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Ложь; + ЕстьИнформацияОРегистрацииОбъекта = Ложь; + ГлобальныйСтекНеЗаписанныхОбъектов = Новый Соответствие; + СоответствиеПравилКонвертации = Новый Соответствие; + + ИнициализироватьВедениеПротоколаОбмена(); + + ИнициализироватьМенеджерыИСообщения(); + + // дата начала анализа + СостояниеОбменаДанными().ДатаНачала = ТекущаяДатаСеанса(); + + // Обнуляем значение модальной переменной. + ПолеТаблицаДанныхЗаголовкаПакета = Неопределено; + + НачатьЧтениеСообщения(ЧтениеСообщения, Истина); + Попытка + + // Зачитываем данные из сообщения обмена. + ПроизвестиЧтениеДанныхВРежимеАнализа(ЧтениеСообщения, ПараметрыАнализа); + + Если ФлагОшибки() Тогда + ВызватьИсключение НСтр("ru = 'Возникли ошибки при анализе данных.'"); + КонецЕсли; + + // Формируем временную таблицу данных. + ТаблицаДанныхЗаголовкаПакетаВременная = ТаблицаДанныхЗаголовкаПакета().Скопировать(, "ТипИсточникаСтрокой, ТипПриемникаСтрокой, ПоляПоиска, ПоляТаблицы"); + ТаблицаДанныхЗаголовкаПакетаВременная.Свернуть("ТипИсточникаСтрокой, ТипПриемникаСтрокой, ПоляПоиска, ПоляТаблицы"); + + // Сворачиваем таблицу данных заголовка пакета. + ТаблицаДанныхЗаголовкаПакета().Свернуть( + "ТипОбъектаСтрокой, ТипИсточникаСтрокой, ТипПриемникаСтрокой, СинхронизироватьПоИдентификатору, ЭтоКлассификатор, ЭтоУдалениеОбъекта, ИспользоватьПредварительныйПросмотр", + "КоличествоОбъектовВИсточнике"); + // + ТаблицаДанныхЗаголовкаПакета().Колонки.Добавить("ПоляПоиска", одОписаниеТипа("Строка")); + ТаблицаДанныхЗаголовкаПакета().Колонки.Добавить("ПоляТаблицы", одОписаниеТипа("Строка")); + + Для Каждого СтрокаТаблицы Из ТаблицаДанныхЗаголовкаПакета() Цикл + + Отбор = Новый Структура; + Отбор.Вставить("ТипИсточникаСтрокой", СтрокаТаблицы.ТипИсточникаСтрокой); + Отбор.Вставить("ТипПриемникаСтрокой", СтрокаТаблицы.ТипПриемникаСтрокой); + + СтрокиВременнойТаблицы = ТаблицаДанныхЗаголовкаПакетаВременная.НайтиСтроки(Отбор); + + СтрокаТаблицы.ПоляПоиска = СтрокиВременнойТаблицы[0].ПоляПоиска; + СтрокаТаблицы.ПоляТаблицы = СтрокиВременнойТаблицы[0].ПоляТаблицы; + + КонецЦикла; + + ВыполнитьОбработчикПослеЗагрузкиДанных(); + + ЗакончитьЧтениеСообщения(ЧтениеСообщения); + + Исключение + ПрерватьЧтениеСообщения(ЧтениеСообщения); + ВызватьИсключение; + КонецПопытки; + + Исключение + Если ЧтениеСообщения <> Неопределено + И ЧтениеСообщения.СообщениеБылоПринятоРанее Тогда + ЗаписатьВПротоколВыполнения(174,,,,,, + Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято); + Иначе + ЗаписатьВПротоколВыполнения(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецЕсли; + + КонецПопытки; + + ЗавершитьВедениеПротоколаОбмена(); + + // дата окончания анализа + СостояниеОбменаДанными().ДатаОкончания = ТекущаяДатаСеанса(); + + // Фиксируем завершение анализа данных в РС. + ЗафиксироватьЗавершениеЗагрузкиДанных(); + + // Сбрасываем модальные переменные перед помещением обработки в платформенный кэш. + ПолеДокументыДляОтложенногоПроведения = Неопределено; + ПолеОбъектыДляОтложеннойЗаписи = Неопределено; + СоответствиеДокументовДляОтложенногоПроведения = Неопределено; + ПолеСоответствиеТиповДанныхДляЗагрузки = Неопределено; + ГлобальныйСтекНеЗаписанныхОбъектов = Неопределено; + СоответствиеПравилКонвертации = Неопределено; + ФайлОбмена = Неопределено; + +КонецПроцедуры + +#КонецОбласти + +#Область ПроцедурыОбработкиСобытийВнешнегоСоединения + +// Загружает данные из строки XML. +// +Процедура ВнешнееСоединениеВыполнитьЗагрузкуДанныхИзСтрокиXML(СтрокаXML) Экспорт + + Если УзелОбменаЗагрузкаДанныхОбъект = Неопределено + И ЗначениеЗаполнено(УзелОбменаЗагрузкаДанных) Тогда + УзелОбменаЗагрузкаДанныхОбъект = УзелОбменаЗагрузкаДанных.ПолучитьОбъект(); + КонецЕсли; + + ФайлОбмена.УстановитьСтроку(СтрокаXML); + + ЧтениеСообщения = Неопределено; + Попытка + + ПроизвестиЧтениеДанныхВРежимеВнешнегоСоединения(ЧтениеСообщения); + + Исключение + + Если ЧтениеСообщения <> Неопределено + И ЧтениеСообщения.СообщениеБылоПринятоРанее Тогда + ЗаписатьВПротоколВыполнения(174,,,,,, + Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято); + Иначе + ЗаписатьВПротоколВыполнения(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецЕсли; + + КонецПопытки; + +КонецПроцедуры + +// Выполняет обработчик конвертации Перед загрузкой данных для внешнего соединения. +// +Процедура ВнешнееСоединениеОбработчикКонвертацииПередЗагрузкойДанных(Отказ) Экспорт + + // {Обработчик: ПередЗагрузкойДанных} Начало + Если Не ПустаяСтрока(Конвертация.ПередЗагрузкойДанных) Тогда + + Попытка + + Если ОтладкаОбработчиковЗагрузки Тогда + + ВыполнитьОбработчик_Конвертация_ПередЗагрузкойДанных(ФайлОбмена, Отказ); + + Иначе + + Выполнить(Конвертация.ПередЗагрузкойДанных); + + КонецЕсли; + + Исключение + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(22, ОписаниеОшибки(), НСтр("ru = 'ПередЗагрузкойДанных (конвертация)'")); + Отказ = Истина; + КонецПопытки; + + КонецЕсли; + + Если Отказ Тогда // Отказ от загрузки данных + Возврат; + КонецЕсли; + // {Обработчик: ПередЗагрузкойДанных} Окончание + +КонецПроцедуры + +// Процедура инициализации перед загрузкой данных через внешнее соединение. +// +Процедура ВнешнееСоединениеПередЗагрузкойДанных() Экспорт + + РежимЗагрузкиДанных = "ЗагрузкаВИнформационнуюБазу"; + + ПолеСтрокаСообщенияОбОшибке = ""; + ПолеСостояниеОбменаДанными = Неопределено; + ПолеРезультатВыполненияОбмена = Неопределено; + ПолеСоответствиеТиповДанныхДляЗагрузки = Неопределено; + ПолеСчетчикЗагруженныхОбъектов = Неопределено; + ПолеДокументыДляОтложенногоПроведения = Неопределено; + ПолеОбъектыДляОтложеннойЗаписи = Неопределено; + СоответствиеДокументовДляОтложенногоПроведения = Неопределено; + ПолеСвойстваУзлаПланаОбмена = Неопределено; + ПолеВерсияФорматаВходящегоСообщенияОбмена = Неопределено; + + ГлобальныйСтекНеЗаписанныхОбъектов = Новый Соответствие; + НомерПоследнегоПоискаПоСсылке = 0; + + ИнициализироватьМенеджерыИСообщения(); + + УстановитьФлагОшибки(Ложь); + + ИнициализироватьКомментарииПриВыгрузкеИЗагрузкеДанных(); + + ИнициализироватьВедениеПротоколаОбмена(); + + ИнформацияОПользовательскихПоляхПоискаПриЗагрузкеДанных = Новый Соответствие; + + СоответствиеДопПараметровПоиска = Новый Соответствие; + СоответствиеПравилКонвертации = Новый Соответствие; + + КоличествоВыполненныхОтложенныхДвиженийДокументов = 0; + + Если КоличествоОбработанныхОбъектовДляОбновленияСтатуса = 0 Тогда + КоличествоОбработанныхОбъектовДляОбновленияСтатуса = 100; + КонецЕсли; + + // Выполняем очистку правил обмена. + Правила.Очистить(); + ТаблицаПравилКонвертации.Очистить(); + + ФайлОбмена = Новый ЧтениеXML; + + ЕстьИнформацияОРегистрацииОбъекта = Ложь; + ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Ложь; + +КонецПроцедуры + +// Выполняет обработчик После загрузки данных. +// Сбрасывает переменные и проводит отложенное проведение документов и запись объектов. +// +Процедура ВнешнееСоединениеПослеЗагрузкиДанных() Экспорт + + // Отложенная запись того, что не записали. + ПровестиЗаписьНеЗаписанныхОбъектов(); + + // Обработчик ПослеЗагрузкиДанных + Если Не ФлагОшибки() Тогда + + Если Не ПустаяСтрока(Конвертация.ПослеЗагрузкиДанных) Тогда + + Попытка + + Если ОтладкаОбработчиковЗагрузки Тогда + + ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиДанных(); + + Иначе + + Выполнить(Конвертация.ПослеЗагрузкиДанных); + + КонецЕсли; + + Исключение + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(23, ОписаниеОшибки(), НСтр("ru = 'ПослеЗагрузкиДанных (конвертация)'")); + КонецПопытки; + + КонецЕсли; + + КонецЕсли; + + Если Не ФлагОшибки() Тогда + + // Выполняем проведение документов в очереди. + ВыполнитьОтложенноеПроведениеДокументов(); + ВыполнитьОтложеннуюЗаписьОбъектов(); + + // Запишем информацию о номере входящего сообщения. + ОбъектУзла = УзелОбменаЗагрузкаДанных.ПолучитьОбъект(); + ОбъектУзла.НомерПринятого = НомерСообщения(); + ОбъектУзла.ОбменДанными.Загрузка = Истина; + + Попытка + ОбъектУзла.Заблокировать(); + Исключение + ЗаписатьИнформациюОбОшибкеВПротокол(173, КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), ОбъектУзла); + КонецПопытки; + + КонецЕсли; + + Если Не ФлагОшибки() Тогда + + ОбъектУзла.Записать(); + + Если ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Истина Тогда + + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ЗафиксироватьВыполнениеКорректировкиИнформацииСопоставленияБезусловно(УзелОбменаЗагрузкаДанных); + + КонецЕсли; + + Если ЕстьИнформацияОРегистрацииОбъекта = Истина Тогда + + РегистрыСведений.СоответствияОбъектовИнформационныхБаз.УдалитьНеактуальныеЗаписиРежимаВыгрузкиПоСсылке(УзелОбменаЗагрузкаДанных); + + КонецЕсли; + + КонецЕсли; + + ЗавершитьВедениеПротоколаОбмена(); + + // Сбрасываем модальные переменные перед помещением обработки в платформенный кэш. + ПолеДокументыДляОтложенногоПроведения = Неопределено; + ПолеОбъектыДляОтложеннойЗаписи = Неопределено; + СоответствиеДокументовДляОтложенногоПроведения = Неопределено; + ПолеСоответствиеТиповДанныхДляЗагрузки = Неопределено; + ГлобальныйСтекНеЗаписанныхОбъектов = Неопределено; + ФайлОбмена = Неопределено; + +КонецПроцедуры + +// Открывает новую транзакцию. +// +Процедура ВнешнееСоединениеПроверитьНачалоИФиксациюТранзакцииПриЗагрузкеДанных() Экспорт + + Если ИспользоватьТранзакции + И КоличествоОбъектовНаТранзакцию > 0 + И СчетчикЗагруженныхОбъектов() % КоличествоОбъектовНаТранзакцию = 0 Тогда + + ЗафиксироватьТранзакцию(); + НачатьТранзакцию(); + + КонецЕсли; + +КонецПроцедуры + +// Открывает транзакцию для обмена через внешнее соединение, если требуется. +// +Процедура ВнешнееСоединениеНачатьТранзакциюПриЗагрузкеДанных() Экспорт + + Если ИспользоватьТранзакции Тогда + НачатьТранзакцию(); + КонецЕсли; + +КонецПроцедуры + +// Завершает транзакцию при обмене через внешнее соединение (если загрузка выполнялась в транзакции). +// +Процедура ВнешнееСоединениеЗафиксироватьТранзакциюПриЗагрузкеДанных() Экспорт + + Если ИспользоватьТранзакции Тогда + + Если ФлагОшибки() Тогда + ОтменитьТранзакцию(); + Иначе + ЗафиксироватьТранзакцию(); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Отменяет транзакцию при обмене через внешнее соединение. +// +Процедура ВнешнееСоединениеОтменитьТранзакциюПриЗагрузкеДанных() Экспорт + + Пока ТранзакцияАктивна() Цикл + ОтменитьТранзакцию(); + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область Прочее + // Устанавливает значение параметра "Загрузка" для свойства объекта "ОбменДанными". // // Параметры: @@ -2570,95 +2757,381 @@ КонецПроцедуры -// Добавляет в xml файл информацию о типах значения. +// Подготавливает строку с информацией о правилах на основании зачитанных данных из XML-файла. // // Параметры: -// Приемник - xml-узел объекта приемника. -// Тип - Строка - выгружаемый тип. -// - Массив - содержит список выгружаемых строковых типов. -// СписокАтрибутов - Структура - Ключ содержит имя атрибута. -// -Процедура ВыгрузитьИнформациюОТипах(Приемник, Тип, СписокАтрибутов = Неопределено) Экспорт - - УзелТипов = СоздатьУзел("Типы"); - - Если СписокАтрибутов <> Неопределено Тогда - Для Каждого ЭлементКоллекции Из СписокАтрибутов Цикл - УстановитьАтрибут(УзелТипов, ЭлементКоллекции.Ключ, ЭлементКоллекции.Значение); - КонецЦикла; - КонецЕсли; - - Если ТипЗнч(Тип) = Тип("Строка") Тогда - одЗаписатьЭлемент(УзелТипов, "Тип", Тип); - Иначе - Для Каждого ТипСтрокой Из Тип Цикл - одЗаписатьЭлемент(УзелТипов, "Тип", ТипСтрокой); - КонецЦикла; - КонецЕсли; - - ДобавитьПодчиненный(Приемник, УзелТипов); - -КонецПроцедуры - -// Возвращает таблицу значений, в которой содержатся ссылки на документы для отложенного проведения, -// а также даты этих документов для предварительной сортировки. -// +// Нет. +// // Возвращаемое значение: -// Таблица значений, колонки: -// ДокументСсылка - ссылка, ссылка на загруженный документ требующий отложенного проведения; -// ДатаДокумента - дата, дата загруженного документа для предварительной сортировки таблицы. +// СтрокаИнформации - Строка - строка с информацией о правилах. // -Функция ДокументыДляОтложенногоПроведения() Экспорт +Функция ПолучитьИнформациюОПравилах(ЭтоПравилаКорреспондента = Ложь) Экспорт - Если ТипЗнч(ПолеДокументыДляОтложенногоПроведения) <> Тип("ТаблицаЗначений") Тогда - - // Инициализируем таблицу для отложенного проведения документов. - ПолеДокументыДляОтложенногоПроведения = Новый ТаблицаЗначений; - ПолеДокументыДляОтложенногоПроведения.Колонки.Добавить("ДокументСсылка"); - ПолеДокументыДляОтложенногоПроведения.Колонки.Добавить("ДатаДокумента", одОписаниеТипа("Дата")); - + // Возвращаемое значение функции. + СтрокаИнформации = ""; + + Если ФлагОшибки() Тогда + Возврат СтрокаИнформации; КонецЕсли; - Возврат ПолеДокументыДляОтложенногоПроведения; + Если ЭтоПравилаКорреспондента Тогда + СтрокаИнформации = НСтр("ru = 'Правила конвертации корреспондента (%1) от %2'"); + Иначе + СтрокаИнформации = НСтр("ru = 'Правила конвертации этой информационной базы (%1) от %2'"); + КонецЕсли; + + ПредставлениеКонфигурацииИсточника = ПолучитьПредставлениеКонфигурацииИзПравилОбмена("Источника"); + ПредставлениеКонфигурацииПриемника = ПолучитьПредставлениеКонфигурацииИзПравилОбмена("Приемника"); + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаИнформации, + ПредставлениеКонфигурацииИсточника, + Формат(Конвертация.ДатаВремяСоздания, "ДЛФ =ДД")); +КонецФункции + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область ВнутренниеСвойства + +Функция ОбработкаДляЗагрузкиДанных() + + Возврат ПолеОбработкаДляЗагрузкиДанных; КонецФункции -// Добавляет в таблицу отложенного проведения строку содержащую ссылку на документ, -// который необходимо провести и дату документа для предварительной сортировки. -// -// Параметры: -// СсылкаНаОбъект - Ссылка, объект, который необходимо провести отложенно; -// ДатаОбъекта - Дата, дата объекта; -// ДополнительныеСвойства - Структура, дополнительные свойства записываемого объекта. -// -Процедура ДобавитьОбъектДляОтложенногоПроведения(СсылкаНаОбъект, ДатаОбъекта, ДополнительныеСвойства) Экспорт +Функция ЭтоОбменЧерезВнешнееСоединение() - ТаблицаОтложенногоПроведения = ДокументыДляОтложенногоПроведения(); - НоваяСтрока = ТаблицаОтложенногоПроведения.Добавить(); - НоваяСтрока.ДокументСсылка = СсылкаНаОбъект; - НоваяСтрока.ДатаДокумента = ДатаОбъекта; + Возврат ОбработкаДляЗагрузкиДанных() <> Неопределено; - ДополнительныеСвойстваДляОтложенногоПроведения().Вставить(СсылкаНаОбъект, ДополнительныеСвойства); - -КонецПроцедуры +КонецФункции -Процедура ПолучитьЗначенияПредопределенныхДанных(Знач ПКО) +Функция СостояниеОбменаДанными() - ПКО.ЗначенияПредопределенныхДанных = Новый Соответствие; - - Для Каждого Элемент Из ПКО.ЗначенияПредопределенныхДанныхПрочитанные Цикл + Если ТипЗнч(ПолеСостояниеОбменаДанными) <> Тип("Структура") Тогда - ПКО.ЗначенияПредопределенныхДанных.Вставить(одПолучитьЗначениеПоСтроке(Элемент.Ключ, ПКО.Источник), Элемент.Значение); + ПолеСостояниеОбменаДанными = Новый Структура; + ПолеСостояниеОбменаДанными.Вставить("УзелИнформационнойБазы"); + ПолеСостояниеОбменаДанными.Вставить("ДействиеПриОбмене"); + ПолеСостояниеОбменаДанными.Вставить("РезультатВыполненияОбмена"); + ПолеСостояниеОбменаДанными.Вставить("ДатаНачала"); + ПолеСостояниеОбменаДанными.Вставить("ДатаОкончания"); - КонецЦикла; + КонецЕсли; -КонецПроцедуры + Возврат ПолеСостояниеОбменаДанными; + +КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ ДЛЯ НАПИСАНИЯ АЛГОРИТМОВ +Функция СоответствиеТиповДанныхДляЗагрузки() + + Если ТипЗнч(ПолеСоответствиеТиповДанныхДляЗагрузки) <> Тип("Соответствие") Тогда + + ПолеСоответствиеТиповДанныхДляЗагрузки = Новый Соответствие; + + КонецЕсли; + + Возврат ПолеСоответствиеТиповДанныхДляЗагрузки; + +КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// РАБОТА СО СТРОКАМИ +Функция РежимЗагрузкиДанныхВТаблицуЗначений() + + Возврат Не РежимЗагрузкиДанныхВИнформационнуюБазу(); + +КонецФункции + +Функция ИмяКолонкиУникальныйИдентификатор() + + Возврат "УникальныйИдентификатор"; + +КонецФункции + +Функция ИмяКолонкиТипСтрокой() + + Возврат "ТипСтрокой"; + +КонецФункции + +Функция КлючСообщенияЖурналаРегистрации() + + Если ТипЗнч(КлючСообщенияЖурналаРегистрации) <> Тип("Строка") + ИЛИ ПустаяСтрока(КлючСообщенияЖурналаРегистрации) Тогда + + КлючСообщенияЖурналаРегистрации = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными(); + + КонецЕсли; + + Возврат КлючСообщенияЖурналаРегистрации; +КонецФункции + +Функция ПриоритетыРезультатовОбмена() + + Если ТипЗнч(ПолеПриоритетыРезультатовОбмена) <> Тип("Массив") Тогда + + ПолеПриоритетыРезультатовОбмена = Новый Массив; + ПолеПриоритетыРезультатовОбмена.Добавить(Перечисления.РезультатыВыполненияОбмена.Ошибка); + ПолеПриоритетыРезультатовОбмена.Добавить(Перечисления.РезультатыВыполненияОбмена.Ошибка_ТранспортСообщения); + ПолеПриоритетыРезультатовОбмена.Добавить(Перечисления.РезультатыВыполненияОбмена.Отменено); + ПолеПриоритетыРезультатовОбмена.Добавить(Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято); + ПолеПриоритетыРезультатовОбмена.Добавить(Перечисления.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями); + ПолеПриоритетыРезультатовОбмена.Добавить(Перечисления.РезультатыВыполненияОбмена.Выполнено); + ПолеПриоритетыРезультатовОбмена.Добавить(Неопределено); + + КонецЕсли; + + Возврат ПолеПриоритетыРезультатовОбмена; +КонецФункции + +Функция ТаблицыОписанийСвойствОбъектов() + + Если ТипЗнч(ПолеТаблицыОписанийСвойствОбъектов) <> Тип("Соответствие") Тогда + + ПолеТаблицыОписанийСвойствОбъектов = Новый Соответствие; + + КонецЕсли; + + Возврат ПолеТаблицыОписанийСвойствОбъектов; +КонецФункции + +Функция ДополнительныеСвойстваДляОтложенногоПроведения() + + Если ТипЗнч(СоответствиеДокументовДляОтложенногоПроведения) <> Тип("Соответствие") Тогда + + // Инициализируем соответствие для отложенного проведения документов. + СоответствиеДокументовДляОтложенногоПроведения = Новый Соответствие; + + КонецЕсли; + + Возврат СоответствиеДокументовДляОтложенногоПроведения; + +КонецФункции + +Функция ОбъектыДляОтложеннойЗаписи() + + Если ТипЗнч(ПолеОбъектыДляОтложеннойЗаписи) <> Тип("Соответствие") Тогда + + // Инициализируем соответствие для отложенной записи объектов. + ПолеОбъектыДляОтложеннойЗаписи = Новый Соответствие; + + КонецЕсли; + + Возврат ПолеОбъектыДляОтложеннойЗаписи; + +КонецФункции + +Функция ВыгруженныеПоСсылкеОбъекты() + + Если ТипЗнч(ПолеВыгруженныеПоСсылкеОбъекты) <> Тип("Массив") Тогда + + ПолеВыгруженныеПоСсылкеОбъекты = Новый Массив; + + КонецЕсли; + + Возврат ПолеВыгруженныеПоСсылкеОбъекты; +КонецФункции + +Функция СозданныеПриВыгрузкеОбъекты() + + Если ТипЗнч(ПолеСозданныеПриВыгрузкеОбъекты) <> Тип("Массив") Тогда + + ПолеСозданныеПриВыгрузкеОбъекты = Новый Массив; + + КонецЕсли; + + Возврат ПолеСозданныеПриВыгрузкеОбъекты; +КонецФункции + +Функция ВыгружаемыеПоСсылкеОбъектыМетаданных() + + Если ТипЗнч(ПолеВыгружаемыеПоСсылкеОбъектыМетаданных) <> Тип("Соответствие") Тогда + + ПолеВыгружаемыеПоСсылкеОбъектыМетаданных = Новый Соответствие; + + КонецЕсли; + + Возврат ПолеВыгружаемыеПоСсылкеОбъектыМетаданных; +КонецФункции + +Функция ВыгружатьОбъектПоСсылке(Объект, УзелПланаОбмена) + + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(Объект)); + + Если ОбъектМетаданных = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + // получаем значение из кэша + Результат = ВыгружаемыеПоСсылкеОбъектыМетаданных().Получить(ОбъектМетаданных); + + Если Результат = Неопределено Тогда + + Результат = Ложь; + + // Получаем признак выгрузки по ссылке. + Отбор = Новый Структура("ОбъектМетаданныхИмя", ОбъектМетаданных.ПолноеИмя()); + + МассивПравил = ПравилаРегистрацииОбъектов(УзелПланаОбмена).НайтиСтроки(Отбор); + + Для Каждого Правило Из МассивПравил Цикл + + Если Не ПустаяСтрока(Правило.ИмяРеквизитаФлага) Тогда + + ЗначениеРеквизитаФлага = Неопределено; + СвойстваУзлаПланаОбмена(УзелПланаОбмена).Свойство(Правило.ИмяРеквизитаФлага, ЗначениеРеквизитаФлага); + + Результат = Результат ИЛИ ( ЗначениеРеквизитаФлага = Перечисления.РежимыВыгрузкиОбъектовОбмена.ВыгружатьПриНеобходимости + ИЛИ ЗначениеРеквизитаФлага = Перечисления.РежимыВыгрузкиОбъектовОбмена.ПустаяСсылка()); + // + Если Результат Тогда + Прервать; + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + // Сохраняем полученное значение в кэше. + ВыгружаемыеПоСсылкеОбъектыМетаданных().Вставить(ОбъектМетаданных, Результат); + + КонецЕсли; + + Возврат Результат; +КонецФункции + +Функция ИмяПланаОбмена() + + Если ТипЗнч(ПолеИмяПланаОбмена) <> Тип("Строка") + ИЛИ ПустаяСтрока(ПолеИмяПланаОбмена) Тогда + + Если ЗначениеЗаполнено(УзелДляОбмена) Тогда + + ПолеИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелДляОбмена); + + ИначеЕсли ЗначениеЗаполнено(УзелОбменаЗагрузкаДанных) Тогда + + ПолеИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелОбменаЗагрузкаДанных); + + ИначеЕсли ЗначениеЗаполнено(ИмяПланаОбменаВРО) Тогда + + ПолеИмяПланаОбмена = ИмяПланаОбменаВРО; + + Иначе + + ПолеИмяПланаОбмена = ""; + + КонецЕсли; + + КонецЕсли; + + Возврат ПолеИмяПланаОбмена; +КонецФункции + +Функция СвойстваУзлаПланаОбмена(Узел) + + Если ТипЗнч(ПолеСвойстваУзлаПланаОбмена) <> Тип("Структура") Тогда + + ПолеСвойстваУзлаПланаОбмена = Новый Структура; + + // получаем имена реквизитов + ИменаРеквизитов = ОбщегоНазначения.ИменаРеквизитовПоТипу(Узел, Тип("ПеречислениеСсылка.РежимыВыгрузкиОбъектовОбмена")); + + // Получаем значения реквизитов. + Если Не ПустаяСтрока(ИменаРеквизитов) Тогда + + ПолеСвойстваУзлаПланаОбмена = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Узел, ИменаРеквизитов); + + КонецЕсли; + + КонецЕсли; + + Возврат ПолеСвойстваУзлаПланаОбмена; +КонецФункции + +Функция ВерсияФорматаВходящегоСообщенияОбмена() + + Если ТипЗнч(ПолеВерсияФорматаВходящегоСообщенияОбмена) <> Тип("Строка") Тогда + + ПолеВерсияФорматаВходящегоСообщенияОбмена = "0.0.0.0"; + + КонецЕсли; + + // Дополняем версию формата входящего сообщения до 4-х разрядов. + РазрядыВерсий = СтрРазделить(ПолеВерсияФорматаВходящегоСообщенияОбмена, "."); + + Если РазрядыВерсий.Количество() < 4 Тогда + + КоличествоРазрядовДобавить = 4 - РазрядыВерсий.Количество(); + + Для А = 1 По КоличествоРазрядовДобавить Цикл + + РазрядыВерсий.Добавить("0"); + + КонецЦикла; + + ПолеВерсияФорматаВходящегоСообщенияОбмена = СтрСоединить(РазрядыВерсий, "."); + + КонецЕсли; + + Возврат ПолеВерсияФорматаВходящегоСообщенияОбмена; +КонецФункции + +Функция НомерСообщения() + + Если ТипЗнч(ПолеНомерСообщения) <> Тип("Число") Тогда + + ПолеНомерСообщения = 0; + + КонецЕсли; + + Возврат ПолеНомерСообщения; + +КонецФункции + +#КонецОбласти + +#Область ФункцииКэширования + +Функция ТаблицаОписанияСвойствОбъекта(ОбъектМетаданных) + + Результат = ТаблицыОписанийСвойствОбъектов().Получить(ОбъектМетаданных); + + Если Результат = Неопределено Тогда + + Результат = ОбщегоНазначения.ПолучитьТаблицуОписанияСвойствОбъекта(ОбъектМетаданных, "Имя"); + + ТаблицыОписанийСвойствОбъектов().Вставить(Результат); + + КонецЕсли; + + Возврат Результат; +КонецФункции + +Функция ПравилаРегистрацииОбъектов(УзелПланаОбмена) + + Если ТипЗнч(ПолеПравилаРегистрацииОбъектов) <> Тип("ТаблицаЗначений") Тогда + + ПравилаРегистрацииОбъектов = ОбменДаннымиВызовСервера.ПараметрыСеансаПравилаРегистрацииОбъектов().Получить(); + + Отбор = Новый Структура; + Отбор.Вставить("ИмяПланаОбмена", ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелПланаОбмена)); + + ПолеПравилаРегистрацииОбъектов = ПравилаРегистрацииОбъектов.Скопировать(Отбор, "ОбъектМетаданныхИмя, ИмяРеквизитаФлага"); + ПолеПравилаРегистрацииОбъектов.Индексы.Добавить("ОбъектМетаданныхИмя"); + + КонецЕсли; + + Возврат ПолеПравилаРегистрацииОбъектов; + +КонецФункции + +#КонецОбласти + +#Область ВспомогательныеПроцедурыДляНаписанияАлгоритмов + +#Область РаботаСоСтроками // Разбирает строку на две части: до подстроки разделителя и после. // @@ -2837,29 +3310,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// РАБОТА С ДАННЫМИ +#КонецОбласти -// Возвращает строку - имя переданного значения перечисления. -// Функция может быть использована в обработчиках событий, программный код -// которых хранится в правила обмена данными. Вызывается методом Выполнить(). -// Сообщение "Не обнаружено ссылок на функцию" при проверке конфигурации -// не является ошибкой проверки конфигурации. -// -// Параметры: -// Значение - значение перечисления. -// -// Возвращаемое значение: -// Строка - имя переданного значения перечисления. -// -Функция одИмяЗначенияПеречисления(Значение) Экспорт - - ОбъектМД = Значение.Метаданные(); - ИндексЗначения = Перечисления[ОбъектМД.Имя].Индекс(Значение); - - Возврат ОбъектМД.ЗначенияПеречисления[ИндексЗначения].Имя; - -КонецФункции +#Область РаботаСДанными // Определяет заполнено ли переданное значение. // @@ -3161,8 +3614,11 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ РАБОТЫ С ОБЪЕКТОМ XMLЗапись +#КонецОбласти + +#КонецОбласти + +#Область ПроцедурыИФункцииРаботыСОбъектомXMLЗапись // Создает новый xml-узел // Функция может быть использована в обработчиках событий, программный код @@ -3235,8 +3691,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ РАБОТЫ С ОБЪЕКТОМ XMLЧтение +#КонецОбласти + +#Область ПроцедурыИФункцииРаботыСОбъектомXMLЧтение // Читает значение атрибута по имени из указанного объекта, приводит значение // к указанному примитивному типу. @@ -3375,8 +3832,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ РАБОТЫ С ФАЙЛОМ ОБМЕНА +#КонецОбласти + +#Область ПроцедурыИФункцииРаботыСФайломОбмена // Сохраняет в файл указанный xml-узел. // @@ -3477,8 +3935,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ РАБОТЫ С ПРОТОКОЛОМ ОБМЕНА +#КонецОбласти + +#Область ПроцедурыИФункцииРаботыСПротоколомОбмена // Возвращает объект типа структура, содержащий все возможные поля // записи протокола выполнения (сообщения об ошибках и т.п.). @@ -3835,8 +4294,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ЗАГРУЗКИ ПРАВИЛ ОБМЕНА +#КонецОбласти + +#Область ПроцедурыЗагрузкиПравилОбмена // Осуществляет загрузку правила конвертации группы свойств. // @@ -4646,7 +5106,8 @@ ПоляТаблицы = ""; ПоляПоиска = ""; - Если НоваяСтрока.Свойства.Количество() > 0 Тогда + Если НоваяСтрока.Свойства.Количество() > 0 + Или НоваяСтрока.СвойстваПоиска.Количество() > 0 Тогда СвойстваМассив = НоваяСтрока.Свойства.Скопировать(Новый Структура("ЭтоГруппа, ИмяПараметраДляПередачи", Ложь, ""), "Приемник").ВыгрузитьКолонку("Приемник"); @@ -5464,8 +5925,65 @@ Возврат Ложь; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ РАБОТЫ С ПРАВИЛАМИ ОБМЕНА +Процедура ЗагрузитьПравилоКонвертации_РежимыВыгрузкиОбъектовОбмена(ЗаписьXML) + + ТипИсточника = "ПеречислениеСсылка.РежимыВыгрузкиОбъектовОбмена"; + ТипПриемника = "ПеречислениеСсылка.РежимыВыгрузкиОбъектовОбмена"; + + Отбор = Новый Структура; + Отбор.Вставить("ТипИсточника", ТипИсточника); + Отбор.Вставить("ТипПриемника", ТипПриемника); + + Если ТаблицаПравилКонвертации.НайтиСтроки(Отбор).Количество() <> 0 Тогда + Возврат; + КонецЕсли; + + НоваяСтрока = ТаблицаПравилКонвертации.Добавить(); + + НоваяСтрока.ЗапоминатьВыгруженные = Истина; + НоваяСтрока.НеЗамещать = Ложь; + НоваяСтрока.ПриоритетОбъектовОбмена = Перечисления.ПриоритетыОбъектовОбмена.ПриоритетОбъектаОбменаВыше; + + НоваяСтрока.Свойства = ТаблицаПравилКонвертацииСвойств.Скопировать(); + НоваяСтрока.СвойстваПоиска = ТаблицаПравилКонвертацииСвойств.Скопировать(); + НоваяСтрока.СвойстваОтключенные = ТаблицаПравилКонвертацииСвойств.Скопировать(); + + НоваяСтрока.Имя = "РежимыВыгрузкиОбъектовОбмена"; + НоваяСтрока.Источник = Тип(ТипИсточника); + НоваяСтрока.Приемник = ТипПриемника; + НоваяСтрока.ТипИсточника = ТипИсточника; + НоваяСтрока.ТипПриемника = ТипПриемника; + + Значения = Новый Структура; + Значения.Вставить("ВыгружатьВсегда", "ВыгружатьВсегда"); + Значения.Вставить("ВыгружатьПоУсловию", "ВыгружатьПоУсловию"); + Значения.Вставить("ВыгружатьПриНеобходимости", "ВыгружатьПриНеобходимости"); + Значения.Вставить("ВыгружатьВручную", "ВыгружатьВручную"); + Значения.Вставить("НеВыгружать", "НеВыгружать"); + НоваяСтрока.ЗначенияПредопределенныхДанныхПрочитанные = Значения; + + ПоискПоТабличнымЧастям = Новый ТаблицаЗначений; + ПоискПоТабличнымЧастям.Колонки.Добавить("ИмяЭлемента"); + ПоискПоТабличнымЧастям.Колонки.Добавить("МассивКлючевыхПолейПоиска"); + ПоискПоТабличнымЧастям.Колонки.Добавить("КлючевыеПоляПоиска"); + ПоискПоТабличнымЧастям.Колонки.Добавить("Валидное", одОписаниеТипа("Булево")); + НоваяСтрока.ПоискПоТабличнымЧастям = ПоискПоТабличнымЧастям; + + Менеджеры[НоваяСтрока.Источник].ПКО = НоваяСтрока; + + Правила.Вставить(НоваяСтрока.Имя, НоваяСтрока); + + ЗаписьXML.ЗаписатьНачалоЭлемента("Правило"); + одЗаписатьЭлемент(ЗаписьXML, "Код", НоваяСтрока.Имя); + одЗаписатьЭлемент(ЗаписьXML, "Источник", НоваяСтрока.ТипИсточника); + одЗаписатьЭлемент(ЗаписьXML, "Приемник", НоваяСтрока.ТипПриемника); + ЗаписьXML.ЗаписатьКонецЭлемента(); // Правило + +КонецПроцедуры + +#КонецОбласти + +#Область ПроцедурыРаботыСПравиламиОбмена // Осуществляет поиск правила конвертации по имени или в соответствии с типом // переданного объекта. @@ -5578,17 +6096,6 @@ КонецПроцедуры -// Устанавливает значения параметров в структуре Параметры -// по таблице ТаблицаНастройкиПараметров. -// -Процедура УстановитьПараметрыИзДиалога() Экспорт - - Для Каждого СтрокаТаблицы Из ТаблицаНастройкиПараметров Цикл - Параметры.Вставить(СтрокаТаблицы.Имя, СтрокаТаблицы.Значение); - КонецЦикла; - -КонецПроцедуры - Процедура УстановитьЗначениеПараметраВТаблице(ИмяПараметра, ЗначениеПараметра) СтрокаТаблицы = ТаблицаНастройкиПараметров.Найти(ИмяПараметра, "Имя"); @@ -5611,8 +6118,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТКА ПРАВИЛ ОЧИСТКИ +#КонецОбласти + +#Область ОбработкаПравилОчистки Процедура УдалитьОбъект(Объект, УдалитьНепосредственно, ИмяТипа = "") @@ -5886,9 +6394,9 @@ КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ЗАГРУЗКИ ДАННЫХ +#Область ПроцедурыЗагрузкиДанных Процедура НачатьЧтениеСообщения(ЧтениеСообщения, АнализДанных = Ложь) @@ -6114,19 +6622,28 @@ ФайлОбмена.Закрыть(); НачатьТранзакцию(); - Если Не ЧтениеСообщения.АнализДанных Тогда - ЧтениеСообщения.ОтправительОбъект.НомерПринятого = ЧтениеСообщения.НомерСообщения; - ЧтениеСообщения.ОтправительОбъект.ОбменДанными.Загрузка = Истина; - ЧтениеСообщения.ОтправительОбъект.Записать(); - КонецЕсли; - Если ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Истина Тогда - РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ЗафиксироватьВыполнениеКорректировкиИнформацииСопоставленияБезусловно(УзелОбменаЗагрузкаДанных); - КонецЕсли; + Попытка + + Если Не ЧтениеСообщения.АнализДанных Тогда + ЧтениеСообщения.ОтправительОбъект.НомерПринятого = ЧтениеСообщения.НомерСообщения; + ЧтениеСообщения.ОтправительОбъект.ОбменДанными.Загрузка = Истина; + ЧтениеСообщения.ОтправительОбъект.Записать(); + КонецЕсли; + + Если ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Истина Тогда + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ЗафиксироватьВыполнениеКорректировкиИнформацииСопоставленияБезусловно(УзелОбменаЗагрузкаДанных); + КонецЕсли; + + Если ЕстьИнформацияОРегистрацииОбъекта = Истина Тогда + РегистрыСведений.СоответствияОбъектовИнформационныхБаз.УдалитьНеактуальныеЗаписиРежимаВыгрузкиПоСсылке(УзелОбменаЗагрузкаДанных); + КонецЕсли; + + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; - Если ЕстьИнформацияОРегистрацииОбъекта = Истина Тогда - РегистрыСведений.СоответствияОбъектовИнформационныхБаз.УдалитьНеактуальныеЗаписиРежимаВыгрузкиПоСсылке(УзелОбменаЗагрузкаДанных); - КонецЕсли; ЗафиксироватьТранзакцию(); РазблокироватьДанныеДляРедактирования(ЧтениеСообщения.Отправитель); @@ -6257,207 +6774,6 @@ КонецПроцедуры -Функция ОпределитьНаличиеДвиженийПоДокументу(ДокументСсылка) - ТекстЗапроса = ""; - // Для исключения падения для документов, проводящимся более чем по 256 таблицам. - счетчик_таблиц = 0; - - МетаданныеДокумента = ДокументСсылка.Метаданные(); - - Если МетаданныеДокумента.Движения.Количество() = 0 Тогда - Возврат Новый ТаблицаЗначений; - КонецЕсли; - - Для Каждого Движение Из МетаданныеДокумента.Движения Цикл - // В запросе получаем имена регистров, по которым есть хотя бы одно движение - // например, - // ВЫБРАТЬ Первые 1 «РегистрНакопления.ТоварыНаСкладах» - // ИЗ РегистрНакопления.ТоварыНаСкладах - // ГДЕ Регистратор = &Регистратор - - // Имя регистра приводим к Строка(200), см. ниже. - ТекстЗапроса = ТекстЗапроса + " - |" + ?(ТекстЗапроса = "", "", "ОБЪЕДИНИТЬ ВСЕ ") + " - |ВЫБРАТЬ ПЕРВЫЕ 1 ВЫРАЗИТЬ(""" + Движение.ПолноеИмя() - + """ КАК Строка(200)) КАК Имя ИЗ " + Движение.ПолноеИмя() - + " ГДЕ Регистратор = &Регистратор"; - - // Если в запрос попадает более 256 таблиц - разбиваем его на две части - // (вариант документа с проведением по 512 регистрам считаем нежизненным). - счетчик_таблиц = счетчик_таблиц + 1; - Если счетчик_таблиц = 256 Тогда - Прервать; - КонецЕсли; - - КонецЦикла; - - Запрос = Новый Запрос(ТекстЗапроса); - ЗАпрос.УстановитьПараметр("Регистратор", ДокументСсылка); - // При выгрузке для колонки «Имя» тип устанавливается по самой длинной строке из запроса - // при втором проходе по таблице новое имя может не «влезть», по этому сразу в запросе - // приводится к строка(200). - ТаблицаЗапроса = Запрос.Выполнить().Выгрузить(); - - // Если количество таблиц не превысило 256 - возвращаем таблицу. - Если счетчик_таблиц = МетаданныеДокумента.Движения.Количество() Тогда - Возврат ТаблицаЗапроса; - КонецЕсли; - - // Таблиц больше чем 256, делаем доп. запрос и дополняем строки таблицы. - - ТекстЗапроса = ""; - Для Каждого Движение Из МетаданныеДокумента.Движения Цикл - - Если счетчик_таблиц > 0 Тогда - счетчик_таблиц = счетчик_таблиц - 1; - Продолжить; - КонецЕсли; - - ТекстЗапроса = ТекстЗапроса + " - |" + ?(ТекстЗапроса = "", "", "ОБЪЕДИНИТЬ ВСЕ ") + " - |ВЫБРАТЬ ПЕРВЫЕ 1 """ + Движение.ПолноеИмя() + """ КАК Имя ИЗ " - + Движение.ПолноеИмя() + " ГДЕ Регистратор = &Регистратор"; - - - КонецЦикла; - Запрос.Текст = ТекстЗапроса; - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - СтрокаТаблицы = ТаблицаЗапроса.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаТаблицы, Выборка); - КонецЦикла; - - Возврат ТаблицаЗапроса; - -КонецФункции - -// Процедура удаления существующих движений документа при перепроведении (отмене проведения). -Процедура УдалитьДвиженияУДокумента(ДокументОбъект) - - МассивОбрабатываемыхСтрокТаблицыДвижений = Новый Массив(); - - // Получение списка регистров, по которым существуют движения. - ТаблицаДвижений = ОпределитьНаличиеДвиженийПоДокументу(ДокументОбъект.Ссылка); - ТаблицаДвижений.Колонки.Добавить("НаборЗаписей"); - ТаблицаДвижений.Колонки.Добавить("БезусловноеУдаление", Новый ОписаниеТипов("Булево")); - - Для Каждого СтрокаДвижения Из ТаблицаДвижений Цикл - // Имя регистра передается как значение, полученное с помощью - // функции ПолноеИмя() метаданных регистра. - ПозицияТочки = СтрНайти(СтрокаДвижения.Имя, "."); - ТипРегистра = Лев(СтрокаДвижения.Имя, ПозицияТочки - 1); - ИмяРегистра = СокрП(Сред(СтрокаДвижения.Имя, ПозицияТочки + 1)); - - МассивОбрабатываемыхСтрокТаблицыДвижений.Добавить(СтрокаДвижения); - - Если ТипРегистра = "РегистрНакопления" Тогда - МетаданныеНабора = Метаданные.РегистрыНакопления[ИмяРегистра]; - Набор = РегистрыНакопления[ИмяРегистра].СоздатьНаборЗаписей(); - - ИначеЕсли ТипРегистра = "РегистрБухгалтерии" Тогда - МетаданныеНабора = Метаданные.РегистрыБухгалтерии[ИмяРегистра]; - Набор = РегистрыБухгалтерии[ИмяРегистра].СоздатьНаборЗаписей(); - - ИначеЕсли ТипРегистра = "РегистрСведений" Тогда - МетаданныеНабора = Метаданные.РегистрыСведений[ИмяРегистра]; - Набор = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей(); - - ИначеЕсли ТипРегистра = "РегистрРасчета" Тогда - МетаданныеНабора = Метаданные.РегистрыРасчета[ИмяРегистра]; - Набор = РегистрыРасчета[ИмяРегистра].СоздатьНаборЗаписей(); - - КонецЕсли; - - Если Не ПравоДоступа("Изменение", Набор.Метаданные()) Тогда - // Отсутствуют права на всю таблицу регистра. - ТекстИсключения = Нстр("ru = 'Нарушение прав доступа: %1'"); - ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, СтрокаДвижения.Имя); - ВызватьИсключение ТекстИсключения; - Возврат; - КонецЕсли; - - Набор.Отбор.Регистратор.Установить(ДокументОбъект.Ссылка); - - // Набор не записывается сразу, чтобы не откатывать транзакцию, если впоследствии - // выяснится, что на один из регистров не хватает прав. - СтрокаДвижения.НаборЗаписей = Набор; - - КонецЦикла; - - ОбменДаннымиСервер.ПропуститьПроверкуЗапретаИзменения(); - - Для Каждого СтрокаДвижения Из МассивОбрабатываемыхСтрокТаблицыДвижений Цикл - Попытка - СтрокаДвижения.НаборЗаписей.Записать(); - Исключение - // Возможно «сработал» RLS или подсистема даты запрета изменения. - ТекстИсключения = Нстр("ru = 'Операция не выполнена: %1 - |%2'"); - ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстИсключения, - СтрокаДвижения.Имя, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение ТекстИсключения; - КонецПопытки; - КонецЦикла; - - ОбменДаннымиСервер.ПропуститьПроверкуЗапретаИзменения(Ложь); - - ОчисткаКоллекцииДвиженийДокумента(ДокументОбъект); - - // Удаление записей регистрации из всех последовательностей. - УдалитьРегистрациюДокументаВПоследовательностях(ДокументОбъект, Истина); - -КонецПроцедуры - -Процедура УдалитьРегистрациюДокументаВПоследовательностях(ДокументОбъект, ПроверятьДвижения = Ложь) - // Получение списка последовательностей в которых зарегистрирован документ. - Если ПроверятьДвижения Тогда - ТаблицаРегистраций = ОпределитьНаличиеРегистрацииДокументаВПоследовательности(ДокументОбъект); - КонецЕсли; - КоллекцияПоследовательностей = ДокументОбъект.ПринадлежностьПоследовательностям; - Для Каждого НаборЗаписейРегистрацииВПоследовательности Из КоллекцияПоследовательностей Цикл - Если (НаборЗаписейРегистрацииВПоследовательности.Количество() > 0) - ИЛИ (ПроверятьДвижения И (НЕ ТаблицаРегистраций.Найти(НаборЗаписейРегистрацииВПоследовательности.Метаданные().Имя,"Имя") = Неопределено)) Тогда - НаборЗаписейРегистрацииВПоследовательности.Очистить(); - КонецЕсли; - КонецЦикла; -КонецПроцедуры - -Функция ОпределитьНаличиеРегистрацииДокументаВПоследовательности(ДокументОбъект) - ТекстЗапроса = ""; - - Для Каждого Последовательность Из ДокументОбъект.ПринадлежностьПоследовательностям Цикл - // В запросе получаем имена последовательностей, в которых документ зарегистрирован. - ТекстЗапроса = ТекстЗапроса + " - |" + ?(ТекстЗапроса = "", "", "ОБЪЕДИНИТЬ ВСЕ ") + " - |ВЫБРАТЬ """ + Последовательность.Метаданные().Имя - + """ КАК Имя ИЗ " + Последовательность.Метаданные().ПолноеИмя() - + " ГДЕ Регистратор = &Регистратор"; - - КонецЦикла; - - Если ТекстЗапроса = "" Тогда - Возврат Новый ТаблицаЗначений(); - Иначе - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("Регистратор", ДокументОбъект.Ссылка); - ТаблицаЗапроса = Запрос.Выполнить().Выгрузить(); - Возврат ТаблицаЗапроса; - КонецЕсли; - -КонецФункции - -// Процедура очищает коллекцию движений документа. -// -Процедура ОчисткаКоллекцииДвиженийДокумента(ДокументОбъект) - - Для Каждого Движение Из ДокументОбъект.Движения Цикл - Если Движение.Количество() > 0 Тогда - Движение.Очистить(); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - Процедура УстановитьТекущуюДатуРеквизиту(РеквизитОбъекта) РеквизитОбъекта = ТекущаяДатаСеанса(); @@ -6477,7 +6793,8 @@ Функция СоздатьНовыйОбъект(Тип, СвойстваПоиска, Объект = Неопределено, ЗаписыватьОбъектСразуПослеСоздания = Истина, НоваяСсылка = Неопределено, НПП = 0, ГНПП = 0, Правило = Неопределено, - ПараметрыОбъекта = Неопределено, УстанавливатьУОбъектаВсеСвойстваПоиска = Истина) + ПараметрыОбъекта = Неопределено, УстанавливатьУОбъектаВсеСвойстваПоиска = Истина, + НаборЗаписейРегистра = Неопределено) СвойстваМД = Менеджеры[Тип]; ИмяТипа = СвойстваМД.ИмяТипа; @@ -6513,7 +6830,8 @@ ИначеЕсли ИмяТипа = "РегистрСведений" Тогда - Объект = Менеджер.СоздатьМенеджерЗаписи(); + НаборЗаписейРегистра = Менеджер.СоздатьНаборЗаписей(); + Объект = НаборЗаписейРегистра.Добавить(); Возврат Объект; ИначеЕсли ИмяТипа = "ПланОбмена" Тогда @@ -7601,7 +7919,7 @@ Исключение ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(73, ОписаниеОшибки(), "", "", - ТипОбъекта, Неопределено, Нстр("ru = 'Последовательность полей поиска'")); + ТипОбъекта, Неопределено, НСтр("ru = 'Последовательность полей поиска'")); КонецПопытки; @@ -8417,7 +8735,7 @@ Если ФлагКомментироватьОбработкуОбъектов Тогда - СтрокаСообщения = Нстр("ru = 'Загрузка объекта № %1'"); + СтрокаСообщения = НСтр("ru = 'Загрузка объекта № %1'"); Номер = ?(НПП <> 0, НПП, ГНПП); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Номер); @@ -8514,6 +8832,12 @@ // Получаем ссылку источника по GUID. УникальныйИдентификаторИсточника = СтруктураСвойств.Менеджер.ПолучитьСсылку(УникальныйИдентификаторИсточника); + // Если ссылка не получена, то записывать такой набор не следует. + Если Не ЗначениеЗаполнено(УникальныйИдентификаторИсточника) Тогда + одПропустить(ФайлОбмена, "ИнформацияОРегистрацииОбъекта"); + Возврат Неопределено; + КонецЕсли; + НаборЗаписей = МенеджерРегистраСоответствийОбъектов.СоздатьНаборЗаписей(); // отбор для набора записей @@ -8929,9 +9253,9 @@ Объект.ДополнительныеСвойства.Вставить("ОбменДанными", Новый Структура("АнализДанных", Не РежимЗагрузкиДанныхВИнформационнуюБазу())); Если ПриоритетОбъектаОбмена <> Перечисления.ПриоритетыОбъектовОбмена.ПриоритетОбъектаОбменаВыше Тогда - СтандартныеПодсистемыСервер.ПриПолученииДанныхОтПодчиненного(Объект, ПолучениеЭлемента, ОтправкаНазад, УзелОбменаЗагрузкаДанных); + СтандартныеПодсистемыСервер.ПриПолученииДанныхОтПодчиненного(Объект, ПолучениеЭлемента, ОтправкаНазад, УзелОбменаЗагрузкаДанныхОбъект); Иначе - СтандартныеПодсистемыСервер.ПриПолученииДанныхОтГлавного(Объект, ПолучениеЭлемента, ОтправкаНазад, УзелОбменаЗагрузкаДанных); + СтандартныеПодсистемыСервер.ПриПолученииДанныхОтГлавного(Объект, ПолучениеЭлемента, ОтправкаНазад, УзелОбменаЗагрузкаДанныхОбъект); КонецЕсли; Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда @@ -9185,6 +9509,7 @@ НППГлобальнойСсылки = 0; НППСсылки = 0; ПараметрыОбъекта = Неопределено; + НаборЗаписей = Неопределено; ЗаписатьОбъект = Истина; // Флаг определяет был ли объект найден по полям поиска в режиме сопоставления объектов или нет; @@ -9241,7 +9566,7 @@ Иначе - СоздатьНовыйОбъект(ТипОбъекта, СвойстваПоиска, Объект, Ложь, , НППСсылки, НППГлобальнойСсылки, Правило, ПараметрыОбъекта); + СоздатьНовыйОбъект(ТипОбъекта, СвойстваПоиска, Объект, Ложь, , НППСсылки, НППГлобальнойСсылки, Правило, ПараметрыОбъекта,,НаборЗаписей); КонецЕсли; @@ -9537,14 +9862,20 @@ ПолучениеЭлемента = ПолучениеЭлементаДанных.Авто; ОтправкаНазад = Ложь; - Если ИмяТипаОбъекта <> "Перечисление" Тогда - Объект.ДополнительныеСвойства.Вставить("ОбменДанными", Новый Структура("АнализДанных", Не РежимЗагрузкиДанныхВИнформационнуюБазу())); + ТекОбъект = Объект; + Если ИмяТипаОбъекта = "РегистрСведений" Тогда + ТекОбъект = НаборЗаписей; КонецЕсли; - - Если ПриоритетОбъектаОбмена <> Перечисления.ПриоритетыОбъектовОбмена.ПриоритетОбъектаОбменаВыше Тогда - СтандартныеПодсистемыСервер.ПриПолученииДанныхОтПодчиненного(Объект, ПолучениеЭлемента, ОтправкаНазад, УзелОбменаЗагрузкаДанных); - Иначе - СтандартныеПодсистемыСервер.ПриПолученииДанныхОтГлавного(Объект, ПолучениеЭлемента, ОтправкаНазад, УзелОбменаЗагрузкаДанных); + Если ТекОбъект <> Неопределено Тогда + Если ИмяТипаОбъекта <> "Перечисление" Тогда + ТекОбъект.ДополнительныеСвойства.Вставить("ОбменДанными", Новый Структура("АнализДанных", Не РежимЗагрузкиДанныхВИнформационнуюБазу())); + КонецЕсли; + + Если ПриоритетОбъектаОбмена <> Перечисления.ПриоритетыОбъектовОбмена.ПриоритетОбъектаОбменаВыше Тогда + СтандартныеПодсистемыСервер.ПриПолученииДанныхОтПодчиненного(ТекОбъект, ПолучениеЭлемента, ОтправкаНазад, УзелОбменаЗагрузкаДанныхОбъект); + Иначе + СтандартныеПодсистемыСервер.ПриПолученииДанныхОтГлавного(ТекОбъект, ПолучениеЭлемента, ОтправкаНазад, УзелОбменаЗагрузкаДанныхОбъект); + КонецЕсли; КонецЕсли; Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда @@ -9615,6 +9946,11 @@ // (оптимизация производительности загрузки данных). Объект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + // Установка ОбменДанными.Загрузка для движений документа. + Для Каждого ТекДвижение Из Объект.Движения Цикл + УстановитьОбменДаннымиЗагрузка(ТекДвижение,, ОтправкаНазад); + КонецЦикла; + ЗаписатьОбъектВИБ(Объект, ТипОбъекта, ЗаписатьОбъект, ОтправкаНазад); Если ЗаписатьОбъект @@ -9701,7 +10037,13 @@ КонецЕсли; КонецЕсли; - + Если НаборЗаписей <> Неопределено Тогда + // Нужно отбор установить у регистра. + Для Каждого ЭлементОтбора Из НаборЗаписей.Отбор Цикл + ЭлементОтбора.Установить(Объект[ЭлементОтбора.Имя]); + КонецЦикла; + Объект = НаборЗаписей; + КонецЕсли; КонецЕсли; ПровестиГенерациюКодаНомераПриНеобходимости(ГенерироватьНовыйНомерИлиКодЕслиНеУказан, Объект, @@ -9716,18 +10058,17 @@ ЗаписатьОбъектВИБ(Объект, ТипОбъекта, ЗаписатьОбъект, ОтправкаНазад); - // Если объект был успешно записан и создана ссылка, - // то помещаем объект в очередь для записи. - Если ЗаписатьОбъект - И Объект <> Неопределено - И Объект.Ссылка <> Неопределено Тогда - - ОбъектыДляОтложеннойЗаписи().Вставить(Объект.Ссылка, Объект.ДополнительныеСвойства); - - КонецЕсли; - Если НЕ (ИмяТипаОбъекта = "РегистрСведений" ИЛИ ИмяТипаОбъекта = "Константы") Тогда + // Если объект был успешно записан и создана ссылка, + // то помещаем объект в очередь для записи. + Если ЗаписатьОбъект + И Объект <> Неопределено + И Объект.Ссылка <> Неопределено Тогда + + ОбъектыДляОтложеннойЗаписи().Вставить(Объект.Ссылка, Объект.ДополнительныеСвойства); + + КонецЕсли; УдалитьИзСтекаНеЗаписанныхОбъектов(НПП, ГНПП); @@ -9795,8 +10136,9 @@ ВызватьИсключение НСтр("ru = 'Синхронизация данных по старой настройке отменена.'"); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ВЫГРУЗКИ ДАННЫХ ПО ПРАВИЛАМ ОБМЕНА +#КонецОбласти + +#Область ПроцедурыВыгрузкиДанных Функция ПолучитьНаборДвиженийДокумента(СсылкаНаДокумент, ВидИсточника, ИмяРегистра) @@ -10845,7 +11187,7 @@ ТипПриемника = одТипЗначенияСтрокой(Значение); // Есть ли хоть какое ПКО с типом приемника ТипПриемника - // если правила нат - то "", если есть , то то что нашли оставляем. + // если правила нет - то "", если есть , то то что нашли оставляем. СтрокаТаблицы = ТаблицаПравилКонвертации.Найти(ТипПриемника, "Приемник"); Если СтрокаТаблицы = Неопределено Тогда @@ -10969,7 +11311,6 @@ КонецПроцедуры - // Формирует узлы свойств объекта приемника в соответствии с указанной коллекцией правил конвертации свойств. // // Параметры: @@ -11623,7 +11964,7 @@ ПрОбъекта = ТипЗнч(Объект); КонецЕсли; - ИмяСобытия = Нстр("ru = 'ВыгрузкаОбъекта: %1'"); + ИмяСобытия = НСтр("ru = 'ВыгрузкаОбъекта: %1'"); ИмяСобытия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИмяСобытия, ПрОбъекта); ЗаписатьВПротоколВыполнения(ИмяСобытия, , Ложь, 1, 7); @@ -11785,170 +12126,6 @@ КонецФункции -// Выгружает регистр, вызывая правила ПередВыгрузкой и ПослеВыгрузки. -// -Функция ВыгрузкаРегистра(НаборЗаписейДляВыгрузки, - Правило = Неопределено, - ВходящиеДанные = Неопределено, - НеВыгружатьОбъектыСвойствПоСсылкам = Ложь, - ИмяПКО = "") Экспорт - - ИмяПКО = ""; - Отказ = Ложь; - ИсходящиеДанные = Неопределено; - - ВызватьСобытияПередВыгрузкойОбъекта(НаборЗаписейДляВыгрузки, Правило, Неопределено, ВходящиеДанные, - НеВыгружатьОбъектыСвойствПоСсылкам, ИмяПКО, Отказ, ИсходящиеДанные); - - Если Отказ Тогда - Возврат Ложь; - КонецЕсли; - - - ВыгрузитьРегистр(НаборЗаписейДляВыгрузки, - Неопределено, - ИсходящиеДанные, - НеВыгружатьОбъектыСвойствПоСсылкам, - ИмяПКО, - Правило); - - ВызватьСобытияПослеВыгрузкиОбъекта(НаборЗаписейДляВыгрузки, Правило, Неопределено, ВходящиеДанные, - НеВыгружатьОбъектыСвойствПоСсылкам, ИмяПКО, Отказ, ИсходящиеДанные); - - Возврат Не Отказ; - -КонецФункции - -// Формирует результат запроса для выгрузки очистки данных. -// -Функция ПолучитьРезультатЗапросаДляВыгрузкиОчисткиДанных(Свойства, ИмяТипа, - ВыборкаДляОчисткиДанных = Ложь, УдалятьОбъектыНепосредственно = Ложь, ВыбиратьВсеПоля = Истина) Экспорт - - СтрокаРазрешения = ?(ВыгружатьТолькоРазрешенные, " РАЗРЕШЕННЫЕ ", ""); - - СтрокаВыбораПолей = ?(ВыбиратьВсеПоля, " * ", " ОбъектДляВыгрузки.Ссылка КАК Ссылка "); - - Если ИмяТипа = "Справочник" - ИЛИ ИмяТипа = "ПланВидовХарактеристик" - ИЛИ ИмяТипа = "ПланСчетов" - ИЛИ ИмяТипа = "ПланВидовРасчета" - ИЛИ ИмяТипа = "РегистрБухгалтерии" - ИЛИ ИмяТипа = "ПланОбмена" - ИЛИ ИмяТипа = "Задача" - ИЛИ ИмяТипа = "БизнесПроцесс" Тогда - - Запрос = Новый Запрос(); - - Если ИмяТипа = "РегистрБухгалтерии" Тогда - - СтрокаВыбораПолей = "*"; - - КонецЕсли; - - Запрос.Текст = "ВЫБРАТЬ " + СтрокаРазрешения + " - | " + СтрокаВыбораПолей + " - |ИЗ - | " + ИмяТипа + "." + Свойства.Имя + " КАК ОбъектДляВыгрузки - | - |"; - - Если ВыборкаДляОчисткиДанных - И УдалятьОбъектыНепосредственно Тогда - - Если (ИмяТипа = "Справочник" - ИЛИ ИмяТипа = "ПланВидовХарактеристик") Тогда - - Если ИмяТипа = "Справочник" Тогда - НужнаИерархия = Метаданные.Справочники[Свойства.Имя].Иерархический; - Иначе - НужнаИерархия = Метаданные.ПланыВидовХарактеристик[Свойства.Имя].Иерархический; - КонецЕсли; - - Если НужнаИерархия Тогда - - Запрос.Текст = Запрос.Текст + " - | ГДЕ ОбъектДляВыгрузки.Родитель = &Родитель - |"; - - Запрос.УстановитьПараметр("Родитель", Свойства.Менеджер.ПустаяСсылка()); - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - ИначеЕсли ИмяТипа = "Документ" Тогда - - Запрос = Новый Запрос(); - - ИтоговоеОграничениеПоДате = ""; - - Запрос.Текст = "ВЫБРАТЬ " + СтрокаРазрешения + " - | " + СтрокаВыбораПолей + " - |ИЗ - | " + ИмяТипа + "." + Свойства.Имя + " КАК ОбъектДляВыгрузки - | - |" + ИтоговоеОграничениеПоДате; - - - ИначеЕсли ИмяТипа = "РегистрСведений" Тогда - - Непериодический = НЕ Свойства.Периодический; - ПодчиненныйРегистратору = Свойства.ПодчиненныйРегистратору; - - - НеНужноОграничениеПоДатам = ВыборкаДляОчисткиДанных ИЛИ Непериодический; - - Запрос = Новый Запрос(); - - ИтоговоеОграничениеПоДате = ""; - - СтрокаДополненияПолейВыборкиПодчиненРегистратору = ?(НЕ ПодчиненныйРегистратору, ", NULL КАК Активность, - | NULL КАК Регистратор, - | NULL КАК НомерСтроки", ""); - - СтрокаДополненияПолейВыборкиПериодичность = ?(Непериодический, ", NULL КАК Период", ""); - - Запрос.Текст = "ВЫБРАТЬ " + СтрокаРазрешения - + " - | * - | " + СтрокаДополненияПолейВыборкиПодчиненРегистратору + " - | " + СтрокаДополненияПолейВыборкиПериодичность + " - |ИЗ - | " + ИмяТипа + "." + Свойства.Имя + " КАК ОбъектДляВыгрузки - |" + ИтоговоеОграничениеПоДате; - - Иначе - - Возврат Неопределено; - - КонецЕсли; - - - Возврат Запрос.Выполнить(); - -КонецФункции - -// Формирует выборку для выгрузки очистки данных. -// -Функция ПолучитьВыборкуДляВыгрузкиОчисткиДанных(Свойства, ИмяТипа, - ВыборкаДляОчисткиДанных = Ложь, УдалятьОбъектыНепосредственно = Ложь, ВыбиратьВсеПоля = Истина) Экспорт - - РезультатЗапроса = ПолучитьРезультатЗапросаДляВыгрузкиОчисткиДанных(Свойства, ИмяТипа, - ВыборкаДляОчисткиДанных, УдалятьОбъектыНепосредственно, ВыбиратьВсеПоля); - - Если РезультатЗапроса = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - - Выборка = РезультатЗапроса.Выбрать(); - - - Возврат Выборка; - -КонецФункции - Функция ПолучитьВыборкуДляВыгрузкиСОграничениями(Правило) ИмяМетаданных = Правило.ИмяОбъектаДляЗапроса; @@ -12041,178 +12218,6 @@ КонецФункции -// Выгружает данные по указанному правилу. -// -// Параметры: -// Правило - ссылка на правило выгрузки данных. -// -Процедура ВыгрузитьДанныеПоПравилу(Правило) Экспорт - - ИмяПКО = Правило.ПравилоКонвертации; - - Если Не ПустаяСтрока(ИмяПКО) Тогда - - ПКО = Правила[ИмяПКО]; - - КонецЕсли; - - - Если ФлагКомментироватьОбработкуОбъектов Тогда - - СтрокаСообщения = НСтр("ru = 'ПРАВИЛО ВЫГРУЗКИ ДАННЫХ: %1 (%2)'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СокрЛП(Правило.Имя), СокрЛП(Правило.Наименование)); - ЗаписатьВПротоколВыполнения(СтрокаСообщения, , Ложь, , 4); - - КонецЕсли; - - - // Обработчик ПередОбработкой - Отказ = Ложь; - ИсходящиеДанные = Неопределено; - ВыборкаДанных = Неопределено; - - Если Не ПустаяСтрока(Правило.ПередОбработкой) Тогда - - Попытка - - Если ОтладкаОбработчиковВыгрузки Тогда - - ВыполнитьОбработчик_ПВД_ПередОбработкойПравила(Отказ, ИмяПКО, Правило, ИсходящиеДанные, ВыборкаДанных); - - Иначе - - Выполнить(Правило.ПередОбработкой); - - КонецЕсли; - - Исключение - - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(31, ОписаниеОшибки(), Правило.Имя, "ПередОбработкойВыгрузкиДанных"); - - КонецПопытки; - - Если Отказ Тогда - - Возврат; - - КонецЕсли; - - КонецЕсли; - - // Стандартная выборка с отбором. - Если Правило.СпособОтбораДанных = "СтандартнаяВыборка" И Правило.ИспользоватьОтбор Тогда - - Выборка = ПолучитьВыборкуДляВыгрузкиСОграничениями(Правило); - - Пока Выборка.Следующий() Цикл - ВыгрузкаОбъектаВыборки(Выборка.Ссылка, Правило, , ИсходящиеДанные); - КонецЦикла; - - // Стандартная выборка без отбора. - ИначеЕсли (Правило.СпособОтбораДанных = "СтандартнаяВыборка") Тогда - - Свойства = Менеджеры[Правило.ОбъектВыборки]; - ИмяТипа = Свойства.ИмяТипа; - - Если ИмяТипа = "Константы" Тогда - - ВыгрузитьНаборКонстант(Правило, Свойства, ИсходящиеДанные); - - Иначе - - ЭтоНеСсылочныйТип = ИмяТипа = "РегистрСведений" - ИЛИ ИмяТипа = "РегистрБухгалтерии"; - - - Если ЭтоНеСсылочныйТип Тогда - - ВыбиратьВсеПоля = ОпределитьНужноВыбиратьВсеПоля(Правило); - - Иначе - - // получаем только ссылку - ВыбиратьВсеПоля = Ложь; - - КонецЕсли; - - - Выборка = ПолучитьВыборкуДляВыгрузкиОчисткиДанных(Свойства, ИмяТипа, , , ВыбиратьВсеПоля); - - Если Выборка = Неопределено Тогда - Возврат; - КонецЕсли; - - Пока Выборка.Следующий() Цикл - - Если ЭтоНеСсылочныйТип Тогда - - ВыгрузкаОбъектаВыборки(Выборка, Правило, Свойства, ИсходящиеДанные); - - Иначе - - ВыгрузкаОбъектаВыборки(Выборка.Ссылка, Правило, Свойства, ИсходящиеДанные); - - КонецЕсли; - - КонецЦикла; - - КонецЕсли; - - ИначеЕсли Правило.СпособОтбораДанных = "ПроизвольныйАлгоритм" Тогда - - Если ВыборкаДанных <> Неопределено Тогда - - Выборка = ПолучитьВыборкуДляВыгрузкиПоПроизвольномуАлгоритму(ВыборкаДанных); - - Если Выборка <> Неопределено Тогда - - Пока Выборка.Следующий() Цикл - - ВыгрузкаОбъектаВыборки(Выборка, Правило, , ИсходящиеДанные); - - КонецЦикла; - - Иначе - - Для каждого Объект Из ВыборкаДанных Цикл - - ВыгрузкаОбъектаВыборки(Объект, Правило, , ИсходящиеДанные); - - КонецЦикла; - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - - // Обработчик ПослеОбработки - - Если Не ПустаяСтрока(Правило.ПослеОбработки) Тогда - - Попытка - - Если ОтладкаОбработчиковВыгрузки Тогда - - ВыполнитьОбработчик_ПВД_ПослеОбработкиПравила(ИмяПКО, Правило, ИсходящиеДанные); - - Иначе - - Выполнить(Правило.ПослеОбработки); - - КонецЕсли; - - Исключение - - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ОписаниеОшибки(), Правило.Имя, "ПослеОбработкиВыгрузкиДанных"); - - КонецПопытки; - - КонецЕсли; - -КонецПроцедуры - Процедура ОтработатьУдалениеОбъекта(ДанныеОбУдаленииОбъекта, СтрокаСообщенияОбОшибке = "") Ссылка = ДанныеОбУдаленииОбъекта.Ссылка; @@ -12237,7 +12242,7 @@ КонецЕсли; Исключение - СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(76, ОписаниеОшибки(), Нстр("ru = 'ПередОтправкойИнформацииОбУдалении (конвертация)'")); + СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(76, ОписаниеОшибки(), НСтр("ru = 'ПередОтправкойИнформацииОбУдалении (конвертация)'")); Если Не ПродолжитьПриОшибке Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; @@ -12273,8 +12278,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ КОМПИЛЯЦИИ ПРАВИЛ ОБМЕНА В СТРУКТУРУ +#КонецОбласти + +#Область ПроцедурыИФункцииКомпиляцииПравилОбменаВСтруктуру // возвращает структуру правил обмена. Функция ПолучитьСтруктуруПравилОбмена(Источник) Экспорт @@ -12584,7 +12590,6 @@ Возврат Ложь; КонецФункции - Процедура ЗаполнитьТаблицуРеквизитовРегистрацииОбъектовПоПравилу(ПКО, ТаблицаРезультат) ИмяОбъекта = СтрЗаменить(ПКО.ТипИсточника, "Ссылка", ""); @@ -12734,2845 +12739,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТИРУЕМЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти -// Подготавливает строку с информацией о правилах на основании зачитанных данных из XML-файла. -// -// Параметры: -// Нет. -// -// Возвращаемое значение: -// СтрокаИнформации - Строка - строка с информацией о правилах. -// -Функция ПолучитьИнформациюОПравилах(ЭтоПравилаКорреспондента = Ложь) Экспорт - - // Возвращаемое значение функции. - СтрокаИнформации = ""; - - Если ФлагОшибки() Тогда - Возврат СтрокаИнформации; - КонецЕсли; - - Если ЭтоПравилаКорреспондента Тогда - СтрокаИнформации = НСтр("ru = 'Правила конвертации корреспондента (%1) от %2'"); - Иначе - СтрокаИнформации = НСтр("ru = 'Правила конвертации этой информационной базы (%1) от %2'"); - КонецЕсли; - - ПредставлениеКонфигурацииИсточника = ПолучитьПредставлениеКонфигурацииИзПравилОбмена("Источника"); - ПредставлениеКонфигурацииПриемника = ПолучитьПредставлениеКонфигурацииИзПравилОбмена("Приемника"); - - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаИнформации, - ПредставлениеКонфигурацииИсточника, - Формат(Конвертация.ДатаВремяСоздания, "ДЛФ =ДД")); -КонецФункции - -Функция ПолучитьПредставлениеКонфигурацииИзПравилОбмена(ИмяОпределения) - - ИмяКонфигурации = ""; - Конвертация.Свойство("СинонимКонфигурации" + ИмяОпределения, ИмяКонфигурации); - - Если Не ЗначениеЗаполнено(ИмяКонфигурации) Тогда - Возврат ""; - КонецЕсли; - - ТочнаяВерсия = ""; - Конвертация.Свойство("ВерсияКонфигурации" + ИмяОпределения, ТочнаяВерсия); - - Если ЗначениеЗаполнено(ТочнаяВерсия) Тогда - - ТочнаяВерсия = ОбщегоНазначенияКлиентСервер.ВерсияКонфигурацииБезНомераСборки(ТочнаяВерсия); - - ИмяКонфигурации = ИмяКонфигурации + " версия " + ТочнаяВерсия; - - КонецЕсли; - - Возврат ИмяКонфигурации; - -КонецФункции - -// Устанавливает состояние пометки у подчиненных строк строки дерева значений -// в зависимости от пометки текущей строки. -// -// Параметры: -// ТекСтрока - Строка дерева значений. -// -Процедура УстановитьПометкиПодчиненных(ТекСтрока, Реквизит) Экспорт - - Подчиненные = ТекСтрока.Строки; - - Если Подчиненные.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - Для Каждого Строка Из Подчиненные Цикл - - Если Строка.НастройкиПостроителя = Неопределено - И Реквизит = "ИспользоватьОтбор" Тогда - - Строка[Реквизит] = 0; - - Иначе - - Строка[Реквизит] = ТекСтрока[Реквизит]; - - КонецЕсли; - - УстановитьПометкиПодчиненных(Строка, Реквизит); - - КонецЦикла; - -КонецПроцедуры - -Процедура ЗаполнитьСвойстваДляПоиска(СтруктураДанных, ПКС) - - Для Каждого СтрокаПолей Из ПКС Цикл - - Если СтрокаПолей.ЭтоГруппа Тогда - - Если СтрокаПолей.ВидПриемника = "ТабличнаяЧасть" - ИЛИ СтрНайти(СтрокаПолей.ВидПриемника, "НаборДвижений") > 0 Тогда - - ИмяСтруктурыПриемника = СтрокаПолей.Приемник + ?(СтрокаПолей.ВидПриемника = "ТабличнаяЧасть", "ТабличнаяЧасть", "НаборЗаписей"); - - ВнутренняяСтруктура = СтруктураДанных[ИмяСтруктурыПриемника]; - - Если ВнутренняяСтруктура = Неопределено Тогда - ВнутренняяСтруктура = Новый Соответствие(); - КонецЕсли; - - СтруктураДанных[ИмяСтруктурыПриемника] = ВнутренняяСтруктура; - - Иначе - - ВнутренняяСтруктура = СтруктураДанных; - - КонецЕсли; - - ЗаполнитьСвойстваДляПоиска(ВнутренняяСтруктура, СтрокаПолей.ПравилаГруппы); - - Иначе - - Если ПустаяСтрока(СтрокаПолей.ТипПриемника) Тогда - - Продолжить; - - КонецЕсли; - - СтруктураДанных[СтрокаПолей.Приемник] = СтрокаПолей.ТипПриемника; - - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -Процедура УдалитьЛишниеЭлементыИзСоответствия(СтруктураДанных) - - Для Каждого Элемент Из СтруктураДанных Цикл - - Если ТипЗнч(Элемент.Значение) = ТипСоответствие Тогда - - УдалитьЛишниеЭлементыИзСоответствия(Элемент.Значение); - - Если Элемент.Значение.Количество() = 0 Тогда - СтруктураДанных.Удалить(Элемент.Ключ); - КонецЕсли; - - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -Процедура ЗаполнитьИнформациюПоТипамДанныхПриемника(СтруктураДанных, Правила) - - Для Каждого Строка Из Правила Цикл - - Если ПустаяСтрока(Строка.Приемник) Тогда - Продолжить; - КонецЕсли; - - ДанныеСтруктуры = СтруктураДанных[Строка.Приемник]; - Если ДанныеСтруктуры = Неопределено Тогда - - ДанныеСтруктуры = Новый Соответствие(); - СтруктураДанных[Строка.Приемник] = ДанныеСтруктуры; - - КонецЕсли; - - // Бежим по полям поиск и прочим ПКС и запоминаем типы данных. - ЗаполнитьСвойстваДляПоиска(ДанныеСтруктуры, Строка.СвойстваПоиска); - - // Свойства - ЗаполнитьСвойстваДляПоиска(ДанныеСтруктуры, Строка.Свойства); - - КонецЦикла; - - УдалитьЛишниеЭлементыИзСоответствия(СтруктураДанных); - -КонецПроцедуры - -Процедура СоздатьСтрокуСТипамиСвойств(ЗаписьXML, ТипыСвойств) - - Если ТипЗнч(ТипыСвойств.Значение) = ТипСоответствие Тогда - - Если ТипыСвойств.Значение.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - ЗаписьXML.ЗаписатьНачалоЭлемента(ТипыСвойств.Ключ); - - Для Каждого Элемент Из ТипыСвойств.Значение Цикл - СоздатьСтрокуСТипамиСвойств(ЗаписьXML, Элемент); - КонецЦикла; - - ЗаписьXML.ЗаписатьКонецЭлемента(); - - Иначе - - одЗаписатьЭлемент(ЗаписьXML, ТипыСвойств.Ключ, ТипыСвойств.Значение); - - КонецЕсли; - -КонецПроцедуры - -Функция СоздатьСтрокуСТипамиДляПриемника(СтруктураДанных) - - ЗаписьXML = Новый ЗаписьXML; - ЗаписьXML.УстановитьСтроку(); - ЗаписьXML.ЗаписатьНачалоЭлемента("ИнформацияОТипахДанных"); - - Для Каждого Строка Из СтруктураДанных Цикл - - ЗаписьXML.ЗаписатьНачалоЭлемента("ТипДанных"); - УстановитьАтрибут(ЗаписьXML, "Имя", Строка.Ключ); - - Для Каждого СтрокаПодчинения Из Строка.Значение Цикл - - СоздатьСтрокуСТипамиСвойств(ЗаписьXML, СтрокаПодчинения); - - КонецЦикла; - - ЗаписьXML.ЗаписатьКонецЭлемента(); - - КонецЦикла; - - ЗаписьXML.ЗаписатьКонецЭлемента(); - - СтрокаРезультата = ЗаписьXML.Закрыть(); - Возврат СтрокаРезультата; - -КонецФункции - -Процедура ЗагрузитьОдинТипДанных(ПравилаОбмена, СоответствиеТипа, ИмяЛокальногоЭлемента) - - ИмяУзла = ИмяЛокальногоЭлемента; - - ПравилаОбмена.Прочитать(); - - Если (ПравилаОбмена.ТипУзла = ТипУзлаXMLКонецЭлемента) Тогда - - ПравилаОбмена.Прочитать(); - Возврат; - - ИначеЕсли ПравилаОбмена.ТипУзла = ТипУзлаXMLНачалоЭлемента Тогда - - // это новый элемент - НовоеСоответствие = Новый Соответствие; - СоответствиеТипа.Вставить(ИмяУзла, НовоеСоответствие); - - ЗагрузитьОдинТипДанных(ПравилаОбмена, НовоеСоответствие, ПравилаОбмена.ЛокальноеИмя); - ПравилаОбмена.Прочитать(); - - Иначе - СоответствиеТипа.Вставить(ИмяУзла, Тип(ПравилаОбмена.Значение)); - ПравилаОбмена.Прочитать(); - КонецЕсли; - - ЗагрузитьСоответствиеТиповДляОдногоТипа(ПравилаОбмена, СоответствиеТипа); - -КонецПроцедуры - -Процедура ЗагрузитьСоответствиеТиповДляОдногоТипа(ПравилаОбмена, СоответствиеТипа) - - Пока ПравилаОбмена.Прочитать() Цикл - - ИмяУзла = ПравилаОбмена.ЛокальноеИмя; - - Если (ПравилаОбмена.ТипУзла = ТипУзлаXMLКонецЭлемента) Тогда - - Прервать; - - КонецЕсли; - - // прочитали начало элемента - ПравилаОбмена.Прочитать(); - - Если ПравилаОбмена.ТипУзла = ТипУзлаXMLНачалоЭлемента Тогда - - // это новый элемент - НовоеСоответствие = Новый Соответствие; - СоответствиеТипа.Вставить(ИмяУзла, НовоеСоответствие); - - ЗагрузитьОдинТипДанных(ПравилаОбмена, НовоеСоответствие, ПравилаОбмена.ЛокальноеИмя); - - Иначе - СоответствиеТипа.Вставить(ИмяУзла, Тип(ПравилаОбмена.Значение)); - ПравилаОбмена.Прочитать(); - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -Процедура ЗагрузитьИнформациюОТипахДанных() - - Пока ФайлОбмена.Прочитать() Цикл - - ИмяУзла = ФайлОбмена.ЛокальноеИмя; - - Если ИмяУзла = "ТипДанных" Тогда - - ИмяТипа = одАтрибут(ФайлОбмена, ТипСтрока, "Имя"); - - СоответствиеТипа = Новый Соответствие; - СоответствиеТиповДанныхДляЗагрузки().Вставить(Тип(ИмяТипа), СоответствиеТипа); - - ЗагрузитьСоответствиеТиповДляОдногоТипа(ФайлОбмена, СоответствиеТипа); - - ИначеЕсли (ИмяУзла = "ИнформацияОТипахДанных") И (ФайлОбмена.ТипУзла = ТипУзлаXMLКонецЭлемента) Тогда - - Прервать; - - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -Процедура ЗагрузитьЗначенияПараметровОбменаДанными() - - Имя = одАтрибут(ФайлОбмена, ТипСтрока, "Имя"); - - ТипСвойства = ПолучитьТипСвойстваПоДополнительнымДанным(Неопределено, Имя); - - Значение = ПрочитатьСвойство(ТипСвойства); - - Параметры.Вставить(Имя, Значение); - - АлгоритмПослеЗагрузкиПараметра = ""; - Если СобытияПослеЗагрузкиПараметров.Свойство(Имя, АлгоритмПослеЗагрузкиПараметра) - И Не ПустаяСтрока(АлгоритмПослеЗагрузкиПараметра) Тогда - - Если ОтладкаОбработчиковЗагрузки Тогда - - ВыполнитьОбработчик_Параметры_ПослеЗагрузкиПараметра(Имя, Значение); - - Иначе - - Выполнить(АлгоритмПослеЗагрузкиПараметра); - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -Процедура ЗагрузитьИнформациюОПользовательскихПоляхПоиска() - - ИмяПравила = ""; - НастройкаПоиска = ""; - - Пока ФайлОбмена.Прочитать() Цикл - - ИмяУзла = ФайлОбмена.ЛокальноеИмя; - - Если ИмяУзла = "ИмяПравила" Тогда - - ИмяПравила = одЗначениеЭлемента(ФайлОбмена, ТипСтрока); - - ИначеЕсли ИмяУзла = "НастройкаПоиска" Тогда - - НастройкаПоиска = одЗначениеЭлемента(ФайлОбмена, ТипСтрока); - ИнформацияОПользовательскихПоляхПоискаПриЗагрузкеДанных.Вставить(ИмяПравила, НастройкаПоиска); - - ИначеЕсли (ИмяУзла = "НастройкаПользовательскогоПоиска") И (ФайлОбмена.ТипУзла = ТипУзлаXMLКонецЭлемента) Тогда - - Прервать; - - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -// Осуществляет загрузку правил обмена в соответствии с форматом. -// -// Параметры: -// Источник - Объект, из которого осуществляется загрузка правил обмена; -// ТипИсточника - Строка, указывающая тип источника: "XMLФайл", "ЧтениеXML", "Строка". -// -Процедура ЗагрузитьПравилаОбмена(Источник="", - ТипИсточника="XMLФайл", - СтрокаСообщенияОбОшибке = "", - ЗагружатьТолькоЗаголовокПравил = Ложь) Экспорт - - ИнициализироватьМенеджерыИСообщения(); - - ЕстьГлобальныйОбработчикПередВыгрузкойОбъекта = Ложь; - ЕстьГлобальныйОбработчикПослеВыгрузкиОбъекта = Ложь; - - ЕстьГлобальныйОбработчикПередКонвертациейОбъекта = Ложь; - - ЕстьГлобальныйОбработчикПередЗагрузкойОбъекта = Ложь; - ЕстьГлобальныйОбработчикПослеЗагрузкиОбъекта = Ложь; - - СоздатьСтруктуруКонвертации(); - - ТаблицаПравилКонвертацииСвойств = Новый ТаблицаЗначений; - ИнициализацияТаблицыПравилКонвертацииСвойств(ТаблицаПравилКонвертацииСвойств); - - // Возможно выбраны встроенные правила обмена (один из макетов). - - ИмяВременногоФайлаПравилОбмена = ""; - Если ПустаяСтрока(Источник) Тогда - - Источник = ИмяФайлаПравилОбмена; - - КонецЕсли; - - Если ТипИсточника="XMLФайл" Тогда - - Если ПустаяСтрока(Источник) Тогда - СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(12); - Возврат; - КонецЕсли; - - Файл = Новый Файл(Источник); - Если Не Файл.Существует() Тогда - СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(3); - Возврат; - КонецЕсли; - - ПравилаОбмена = Новый ЧтениеXML(); - ПравилаОбмена.ОткрытьФайл(Источник); - ПравилаОбмена.Прочитать(); - - ИначеЕсли ТипИсточника="Строка" Тогда - - ПравилаОбмена = Новый ЧтениеXML(); - ПравилаОбмена.УстановитьСтроку(Источник); - ПравилаОбмена.Прочитать(); - - ИначеЕсли ТипИсточника="ЧтениеXML" Тогда - - ПравилаОбмена = Источник; - - КонецЕсли; - - Если Не ((ПравилаОбмена.ЛокальноеИмя = "ПравилаОбмена") И (ПравилаОбмена.ТипУзла = ТипУзлаXMLНачалоЭлемента)) Тогда - СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(7); - Возврат; - КонецЕсли; - - ЗаписьXML = Новый ЗаписьXML; - ЗаписьXML.УстановитьСтроку(); - ЗаписьXML.ЗаписатьНачалоЭлемента("ПравилаОбмена"); - - Пока ПравилаОбмена.Прочитать() Цикл - - ИмяУзла = ПравилаОбмена.ЛокальноеИмя; - - // Реквизиты конвертации - Если ИмяУзла = "ВерсияФормата" Тогда - Значение = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); - Конвертация.Вставить("ВерсияФормата", Значение); - - ЗаписьXML.ЗаписатьНачалоЭлемента("ВерсияФормата"); - Стр = XMLСтрока(Значение); - - ЗаписьXML.ЗаписатьТекст(Стр); - ЗаписьXML.ЗаписатьКонецЭлемента(); - - ИначеЕсли ИмяУзла = "Ид" Тогда - Значение = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); - Конвертация.Вставить("Ид", Значение); - одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Значение); - ИначеЕсли ИмяУзла = "Наименование" Тогда - Значение = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); - Конвертация.Вставить("Наименование", Значение); - одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Значение); - ИначеЕсли ИмяУзла = "ДатаВремяСоздания" Тогда - Значение = одЗначениеЭлемента(ПравилаОбмена, ТипДата); - Конвертация.Вставить("ДатаВремяСоздания", Значение); - одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Значение); - ИначеЕсли ИмяУзла = "Источник" Тогда - - ВерсияПлатформыИсточника = ПравилаОбмена.ПолучитьАтрибут ("ВерсияПлатформы"); - СинонимКонфигурацииИсточника = ПравилаОбмена.ПолучитьАтрибут ("СинонимКонфигурации"); - ВерсияКонфигурацииИсточника = ПравилаОбмена.ПолучитьАтрибут ("ВерсияКонфигурации"); - - Конвертация.Вставить("ВерсияПлатформыИсточника", ВерсияПлатформыИсточника); - Конвертация.Вставить("СинонимКонфигурацииИсточника", СинонимКонфигурацииИсточника); - Конвертация.Вставить("ВерсияКонфигурацииИсточника", ВерсияКонфигурацииИсточника); - - Значение = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); - Конвертация.Вставить("Источник", Значение); - одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Значение); - - ИначеЕсли ИмяУзла = "Приемник" Тогда - - ВерсияПлатформыПриемника = ПравилаОбмена.ПолучитьАтрибут ("ВерсияПлатформы"); - СинонимКонфигурацииПриемника = ПравилаОбмена.ПолучитьАтрибут ("СинонимКонфигурации"); - ВерсияКонфигурацииПриемника = ПравилаОбмена.ПолучитьАтрибут ("ВерсияКонфигурации"); - - Конвертация.Вставить("ВерсияПлатформыПриемника", ВерсияПлатформыПриемника); - Конвертация.Вставить("СинонимКонфигурацииПриемника", СинонимКонфигурацииПриемника); - Конвертация.Вставить("ВерсияКонфигурацииПриемника", ВерсияКонфигурацииПриемника); - - Значение = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); - Конвертация.Вставить("Приемник", Значение); - одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Значение); - - Если ЗагружатьТолькоЗаголовокПравил Тогда - Возврат; - КонецЕсли; - - ИначеЕсли ИмяУзла = "РежимСовместимости" Тогда - // Поддержка обратной совместимости. - одПропустить(ПравилаОбмена); - - ИначеЕсли ИмяУзла = "Комментарий" Тогда - одПропустить(ПравилаОбмена); - - ИначеЕсли ИмяУзла = "ОсновнойПланОбмена" Тогда - одПропустить(ПравилаОбмена); - - ИначеЕсли ИмяУзла = "Параметры" Тогда - ЗагрузитьПараметры(ПравилаОбмена, ЗаписьXML) - - // События конвертации - - ИначеЕсли ИмяУзла = "" Тогда - - ИначеЕсли ИмяУзла = "ПослеЗагрузкиПравилОбмена" Тогда - Конвертация.Вставить("ПослеЗагрузкиПравилОбмена", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); - Конвертация.Вставить("ИмяОбработчикаПослеЗагрузкиПравилОбмена","Конвертация_ПослеЗагрузкиПравилОбмена"); - - ИначеЕсли ИмяУзла = "ПередВыгрузкойДанных" Тогда - Конвертация.Вставить("ПередВыгрузкойДанных", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); - Конвертация.Вставить("ИмяОбработчикаПередВыгрузкойДанных","Конвертация_ПередВыгрузкойДанных"); - - ИначеЕсли ИмяУзла = "ПередПолучениемИзмененныхОбъектов" Тогда - Конвертация.Вставить("ПередПолучениемИзмененныхОбъектов", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); - Конвертация.Вставить("ИмяОбработчикаПередПолучениемИзмененныхОбъектов","Конвертация_ПередПолучениемИзмененныхОбъектов"); - - ИначеЕсли ИмяУзла = "ПослеПолученияИнформацииОбУзлахОбмена" Тогда - - Конвертация.Вставить("ПослеПолученияИнформацииОбУзлахОбмена", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); - Конвертация.Вставить("ИмяОбработчикаПослеПолученияИнформацииОбУзлахОбмена","Конвертация_ПослеПолученияИнформацииОбУзлахОбмена"); - одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Конвертация.ПослеПолученияИнформацииОбУзлахОбмена); - - ИначеЕсли ИмяУзла = "ПослеВыгрузкиДанных" Тогда - Конвертация.Вставить("ПослеВыгрузкиДанных", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); - Конвертация.Вставить("ИмяОбработчикаПослеВыгрузкиДанных","Конвертация_ПослеВыгрузкиДанных"); - - ИначеЕсли ИмяУзла = "ПередОтправкойИнформацииОбУдалении" Тогда - Конвертация.Вставить("ПередОтправкойИнформацииОбУдалении", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); - Конвертация.Вставить("ИмяОбработчикаПередОтправкойИнформацииОбУдалении","Конвертация_ПередОтправкойИнформацииОбУдалении"); - - ИначеЕсли ИмяУзла = "ПередВыгрузкойОбъекта" Тогда - Конвертация.Вставить("ПередВыгрузкойОбъекта", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); - Конвертация.Вставить("ИмяОбработчикаПередВыгрузкойОбъекта","Конвертация_ПередВыгрузкойОбъекта"); - ЕстьГлобальныйОбработчикПередВыгрузкойОбъекта = Не ПустаяСтрока(Конвертация.ПередВыгрузкойОбъекта); - - ИначеЕсли ИмяУзла = "ПослеВыгрузкиОбъекта" Тогда - Конвертация.Вставить("ПослеВыгрузкиОбъекта", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); - Конвертация.Вставить("ИмяОбработчикаПослеВыгрузкиОбъекта","Конвертация_ПослеВыгрузкиОбъекта"); - ЕстьГлобальныйОбработчикПослеВыгрузкиОбъекта = Не ПустаяСтрока(Конвертация.ПослеВыгрузкиОбъекта); - - ИначеЕсли ИмяУзла = "ПередЗагрузкойОбъекта" Тогда - Конвертация.Вставить("ПередЗагрузкойОбъекта", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); - Конвертация.Вставить("ИмяОбработчикаПередЗагрузкойОбъекта","Конвертация_ПередЗагрузкойОбъекта"); - ЕстьГлобальныйОбработчикПередЗагрузкойОбъекта = Не ПустаяСтрока(Конвертация.ПередЗагрузкойОбъекта); - одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Конвертация.ПередЗагрузкойОбъекта); - - ИначеЕсли ИмяУзла = "ПослеЗагрузкиОбъекта" Тогда - Конвертация.Вставить("ПослеЗагрузкиОбъекта", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); - Конвертация.Вставить("ИмяОбработчикаПослеЗагрузкиОбъекта","Конвертация_ПослеЗагрузкиОбъекта"); - ЕстьГлобальныйОбработчикПослеЗагрузкиОбъекта = Не ПустаяСтрока(Конвертация.ПослеЗагрузкиОбъекта); - одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Конвертация.ПослеЗагрузкиОбъекта); - - ИначеЕсли ИмяУзла = "ПередКонвертациейОбъекта" Тогда - Конвертация.Вставить("ПередКонвертациейОбъекта", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); - Конвертация.Вставить("ИмяОбработчикаПередКонвертациейОбъекта","Конвертация_ПередКонвертациейОбъекта"); - ЕстьГлобальныйОбработчикПередКонвертациейОбъекта = Не ПустаяСтрока(Конвертация.ПередКонвертациейОбъекта); - - ИначеЕсли ИмяУзла = "ПередЗагрузкойДанных" Тогда - Конвертация.ПередЗагрузкойДанных = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); - Конвертация.Вставить("ИмяОбработчикаПередЗагрузкойДанных","Конвертация_ПередЗагрузкойДанных"); - одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Конвертация.ПередЗагрузкойДанных); - - ИначеЕсли ИмяУзла = "ПослеЗагрузкиДанных" Тогда - Конвертация.ПослеЗагрузкиДанных = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); - Конвертация.Вставить("ИмяОбработчикаПослеЗагрузкиДанных","Конвертация_ПослеЗагрузкиДанных"); - одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Конвертация.ПослеЗагрузкиДанных); - - ИначеЕсли ИмяУзла = "ПослеЗагрузкиПараметров" Тогда - Конвертация.Вставить("ПослеЗагрузкиПараметров", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); - Конвертация.Вставить("ИмяОбработчикаПослеЗагрузкиПараметров","Конвертация_ПослеЗагрузкиПараметров"); - одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Конвертация.ПослеЗагрузкиПараметров); - - ИначеЕсли ИмяУзла = "ПриПолученииИнформацииОбУдалении" Тогда - Конвертация.Вставить("ПриПолученииИнформацииОбУдалении", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); - Конвертация.Вставить("ИмяОбработчикаПриПолученииИнформацииОбУдалении","Конвертация_ПриПолученииИнформацииОбУдалении"); - одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Конвертация.ПриПолученииИнформацииОбУдалении); - - ИначеЕсли ИмяУзла = "УдалятьСопоставленныеОбъектыВПриемникеПриИхУдаленииВИсточнике" Тогда - Конвертация.УдалятьСопоставленныеОбъектыВПриемникеПриИхУдаленииВИсточнике = одЗначениеЭлемента(ПравилаОбмена, ТипБулево); - - // Правила - - ИначеЕсли ИмяУзла = "ПравилаВыгрузкиДанных" Тогда - Если РежимОбмена = "Загрузка" Тогда - одПропустить(ПравилаОбмена); - Иначе - ЗагрузитьПравилаВыгрузки(ПравилаОбмена); - КонецЕсли; - - ИначеЕсли ИмяУзла = "ПравилаКонвертацииОбъектов" Тогда - ЗагрузитьПравилаКонвертации(ПравилаОбмена, ЗаписьXML); - - ИначеЕсли ИмяУзла = "ПравилаОчисткиДанных" Тогда - ЗагрузитьПравилаОчистки(ПравилаОбмена, ЗаписьXML) - - ИначеЕсли ИмяУзла = "ПравилаРегистрацииОбъектов" Тогда - одПропустить(ПравилаОбмена); - - // Алгоритмы / Запросы / Обработки - - ИначеЕсли ИмяУзла = "Алгоритмы" Тогда - ЗагрузитьАлгоритмы(ПравилаОбмена, ЗаписьXML); - - ИначеЕсли ИмяУзла = "Запросы" Тогда - ЗагрузитьЗапросы(ПравилаОбмена, ЗаписьXML); - - ИначеЕсли ИмяУзла = "Обработки" Тогда - ЗагрузитьОбработки(ПравилаОбмена, ЗаписьXML); - - // Выход - ИначеЕсли (ИмяУзла = "ПравилаОбмена") И (ПравилаОбмена.ТипУзла = ТипУзлаXMLКонецЭлемента) Тогда - Если РежимОбмена <> "Загрузка" Тогда - ПравилаОбмена.Закрыть(); - КонецЕсли; - Прервать; - - - // Ошибка формата - Иначе - СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(7); - Возврат; - КонецЕсли; - КонецЦикла; - - ЗаписьXML.ЗаписатьКонецЭлемента(); - XMLПравила = ЗаписьXML.Закрыть(); - - // Удаляем временный файл правил. - Если Не ПустаяСтрока(ИмяВременногоФайлаПравилОбмена) Тогда - Попытка - УдалитьФайлы(ИмяВременногоФайлаПравилОбмена); - Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - КонецЕсли; - - Если ЗагружатьТолькоЗаголовокПравил Тогда - Возврат; - КонецЕсли; - - // Дополнительно нужна информация по типам данных приемника для быстрой загрузки данных. - СтруктураДанных = Новый Соответствие(); - ЗаполнитьИнформациюПоТипамДанныхПриемника(СтруктураДанных, ТаблицаПравилКонвертации); - - СтрокаТиповДляПриемника = СоздатьСтрокуСТипамиДляПриемника(СтруктураДанных); - - ИмяПрофиляБезопасности = ИнициализироватьОбработки(); - - Если ИмяПрофиляБезопасности <> Неопределено Тогда - УстановитьБезопасныйРежим(ИмяПрофиляБезопасности); - КонецЕсли; - - // Нужно вызвать событие после загрузки правил обмена. - ТекстСобытияПослеЗагрузкиПравилОбмена = ""; - Если РежимОбмена <> "Загрузка" И Конвертация.Свойство("ПослеЗагрузкиПравилОбмена", ТекстСобытияПослеЗагрузкиПравилОбмена) - И Не ПустаяСтрока(ТекстСобытияПослеЗагрузкиПравилОбмена) Тогда - - Попытка - - Если ОтладкаОбработчиковВыгрузки Тогда - - ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиПравилОбмена(); - - Иначе - - Выполнить(ТекстСобытияПослеЗагрузкиПравилОбмена); - - КонецЕсли; - - Исключение - СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(75, ОписаниеОшибки(), НСтр("ru = 'ПослеЗагрузкиПравилОбмена (конвертация)'")); - Отказ = Истина; - - Если Не ПродолжитьПриОшибке Тогда - ВызватьИсключение СтрокаСообщенияОбОшибке; - КонецЕсли; - - КонецПопытки; - - КонецЕсли; - - ИнициализироватьПервоначальныеЗначенияПараметров(); - -КонецПроцедуры - -Процедура ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки = Неопределено) - - УвеличитьСчетчикЗагруженныхОбъектов(); - - Если СчетчикЗагруженныхОбъектов() % 100 = 0 - И ГлобальныйСтекНеЗаписанныхОбъектов.Количество() > 100 Тогда - - ПровестиЗаписьНеЗаписанныхОбъектов(); - - КонецЕсли; - - // При загрузке в режиме внешнего соединения управление транзакциями выполняется из управляющего приложения. - Если Не ЗагрузкаДанныхВыполняетсяЧерезВнешнееСоединение Тогда - - Если ИспользоватьТранзакции - И КоличествоОбъектовНаТранзакцию > 0 - И СчетчикЗагруженныхОбъектов() % КоличествоОбъектовНаТранзакцию = 0 Тогда - - ЗафиксироватьТранзакцию(); - НачатьТранзакцию(); - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -Процедура УдалитьОбъектПоСсылке(Ссылка, СтрокаСообщенияОбОшибке) - - Объект = Ссылка.ПолучитьОбъект(); - - Если Объект = Неопределено Тогда - Возврат; - КонецЕсли; - - УстановитьОбменДаннымиЗагрузка(Объект); - - Если Не ПустаяСтрока(Конвертация.ПриПолученииИнформацииОбУдалении) Тогда - - Отказ = Ложь; - - Попытка - - Если ОтладкаОбработчиковЗагрузки Тогда - - ВыполнитьОбработчик_Конвертация_ПриПолученииИнформацииОбУдалении(Объект, Отказ); - - Иначе - - Выполнить(Конвертация.ПриПолученииИнформацииОбУдалении); - - КонецЕсли; - - Исключение - СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(77, ОписаниеОшибки(), НСтр("ru = 'ПриПолученииИнформацииОбУдалении (конвертация)'")); - Отказ = Истина; - - Если Не ПродолжитьПриОшибке Тогда - ВызватьИсключение СтрокаСообщенияОбОшибке; - КонецЕсли; - - КонецПопытки; - - Если Отказ Тогда - Возврат; - КонецЕсли; - - КонецЕсли; - - УдалитьОбъект(Объект, Истина); - -КонецПроцедуры - -Процедура ПрочитатьУдалениеОбъекта(СтрокаСообщенияОбОшибке) - - ТипИсточникаСтрокой = одАтрибут(ФайлОбмена, ТипСтрока, "ТипПриемника"); - ТипПриемникаСтрокой = одАтрибут(ФайлОбмена, ТипСтрока, "ТипИсточника"); - - УникальныйИдентификаторСтрокой = одАтрибут(ФайлОбмена, ТипСтрока, "УникальныйИдентификатор"); - - ВыполнитьЗаменуУникальногоИдентификатораПриНеобходимости(УникальныйИдентификаторСтрокой, ТипИсточникаСтрокой, ТипПриемникаСтрокой, Истина); - - СтруктураСвойств = Менеджеры[Тип(ТипИсточникаСтрокой)]; - - Ссылка = СтруктураСвойств.Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор(УникальныйИдентификаторСтрокой)); - - УдалитьОбъектПоСсылке(Ссылка, СтрокаСообщенияОбОшибке); - -КонецПроцедуры - -Процедура ВыполнитьВыборочноеЧтениеСообщения(ТаблицыДляЗагрузки) - - Если ТаблицыДляЗагрузки.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - ЧтениеСообщения = Неопределено; - Попытка - - УстановитьФлагОшибки(Ложь); - - ИнициализироватьКомментарииПриВыгрузкеИЗагрузкеДанных(); - - ИнформацияОПользовательскихПоляхПоискаПриЗагрузкеДанных = Новый Соответствие; - СоответствиеДопПараметровПоиска = Новый Соответствие; - СоответствиеПравилКонвертации = Новый Соответствие; - - // Инициализируем ведение протокола обмена. - ИнициализироватьВедениеПротоколаОбмена(); - - Если КоличествоОбработанныхОбъектовДляОбновленияСтатуса = 0 Тогда - КоличествоОбработанныхОбъектовДляОбновленияСтатуса = 100; - КонецЕсли; - - ГлобальныйСтекНеЗаписанныхОбъектов = Новый Соответствие; - - ПолеСчетчикЗагруженныхОбъектов = Неопределено; - НомерПоследнегоПоискаПоСсылке = 0; - - ИнициализироватьМенеджерыИСообщения(); - - НачатьЧтениеСообщения(ЧтениеСообщения, Истина); - - Если ИспользоватьТранзакции Тогда - НачатьТранзакцию(); - КонецЕсли; - Попытка - - ПроизвестиЧтениеДанныхДляТаблиц(ТаблицыДляЗагрузки); - - Если ФлагОшибки() Тогда - ВызватьИсключение НСтр("ru = 'Возникли ошибки при загрузке данных.'"); - КонецЕсли; - - // Отложенная запись того, что не записали. - ПровестиЗаписьНеЗаписанныхОбъектов(); - - ВыполнитьОбработчикПослеЗагрузкиДанных(); - - Если ФлагОшибки() Тогда - ВызватьИсключение НСтр("ru = 'Возникли ошибки при загрузке данных.'"); - КонецЕсли; - - Если ИспользоватьТранзакции Тогда - ЗафиксироватьТранзакцию(); - КонецЕсли; - Исключение - Если ИспользоватьТранзакции Тогда - ОтменитьТранзакцию(); - КонецЕсли; - ПрерватьЧтениеСообщения(ЧтениеСообщения); - ВызватьИсключение; - КонецПопытки; - - // Выполняем проведение документов в очереди. - ВыполнитьОтложенноеПроведениеДокументов(); - ВыполнитьОтложеннуюЗаписьОбъектов(); - - ЗакончитьЧтениеСообщения(ЧтениеСообщения); - - Исключение - Если ЧтениеСообщения <> Неопределено - И ЧтениеСообщения.СообщениеБылоПринятоРанее Тогда - ЗаписатьВПротоколВыполнения(174,,,,,, - Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято); - Иначе - ЗаписатьВПротоколВыполнения(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецЕсли; - КонецПопытки; - - ЗавершитьВедениеПротоколаОбмена(); - -КонецПроцедуры - -Процедура ПроизвестиЧтениеДанных(ЧтениеСообщения) - - СтрокаСообщенияОбОшибке = ""; - - Пока ФайлОбмена.Прочитать() Цикл - - ИмяУзла = ФайлОбмена.ЛокальноеИмя; - - Если ИмяУзла = "Объект" Тогда - - ОбменДаннымиСервер.РассчитатьПроцентЗагрузки(СчетчикЗагруженныхОбъектов(), КоличествоОбъектовКЗагрузке, РазмерФайлаСообщенияОбмена); - ПоследнийОбъектЗагрузки = ПрочитатьОбъект(); - - ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки); - - ИначеЕсли ИмяУзла = "НаборЗаписейРегистра" Тогда - - // набор записей регистра - ПоследнийОбъектЗагрузки = ПрочитатьНаборЗаписейРегистра(); - - ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки); - - ИначеЕсли ИмяУзла = "УдалениеОбъекта" Тогда - - // Обработка удаления объекта из информационной базы. - ПрочитатьУдалениеОбъекта(СтрокаСообщенияОбОшибке); - - одПропустить(ФайлОбмена, "УдалениеОбъекта"); - - ОбработатьОкончаниеЧтенияНовогоЭлемента(); - - ИначеЕсли ИмяУзла = "ИнформацияОРегистрацииОбъекта" Тогда - - ЕстьИнформацияОРегистрацииОбъекта = Истина; - - ПоследнийОбъектЗагрузки = ПрочитатьИнформациюОРегистрацииОбъекта(); - - ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки); - - ИначеЕсли ИмяУзла = "КорректировкаИнформацииОРегистрацииОбъекта" Тогда - - ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Истина; - - ПрочитатьКорректировкуИнформацииСопоставления(); - - одПропустить(ФайлОбмена, ИмяУзла); - - ИначеЕсли ИмяУзла = "ОбщиеДанныеУзлов" Тогда - - ПрочитатьОбщиеДанныеУзлов(ЧтениеСообщения); - - одПропустить(ФайлОбмена, ИмяУзла); - - ИначеЕсли (ИмяУзла = "ФайлОбмена") И (ФайлОбмена.ТипУзла = ТипУзлаXMLКонецЭлемента) Тогда - - Прервать; // выходим - - Иначе - - ВызватьИсключение НСтр("ru = 'Ошибка формата сообщения обмена.'"); - - КонецЕсли; - - // Прерываем цикл чтения файла в случае возникновения ошибки загрузки. - Если ФлагОшибки() Тогда - ВызватьИсключение НСтр("ru = 'Возникли ошибки при загрузке данных.'"); - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -Процедура ПроизвестиЧтениеДанныхДляТаблиц(ТаблицыДляЗагрузки) - - Пока ФайлОбмена.Прочитать() Цикл - - ИмяУзла = ФайлОбмена.ЛокальноеИмя; - - Если ИмяУзла = "Объект" Тогда - - ТипОбъектаСтрокой = одАтрибут(ФайлОбмена, ТипСтрока, "Тип"); - - Если ТипОбъектаСтрокой = "КонстантыНабор" Тогда - - ИмяКонстанты = одАтрибут(ФайлОбмена, ТипСтрока, "ИмяКонстанты"); - - ТипИсточникаСтрокой = ИмяКонстанты; - ТипПриемникаСтрокой = ИмяКонстанты; - - Иначе - - ИмяПравила = одАтрибут(ФайлОбмена, ТипСтрока, "ИмяПравила"); - - ПКО = Правила[ИмяПравила]; - - ТипИсточникаСтрокой = ПКО.ТипИсточника; - ТипПриемникаСтрокой = ПКО.ТипПриемника; - - КонецЕсли; - - КлючТаблицыДанных = ОбменДаннымиСервер.КлючТаблицыДанных(ТипИсточникаСтрокой, ТипПриемникаСтрокой, Ложь); - - Если ТаблицыДляЗагрузки.Найти(КлючТаблицыДанных) <> Неопределено Тогда - - Если РежимЗагрузкиДанныхВИнформационнуюБазу() Тогда // Загрузка в информационную базу. - - ОбработатьОкончаниеЧтенияНовогоЭлемента(ПрочитатьОбъект()); - - Иначе // Загрузка в таблицу значений. - - УникальныйИдентификаторСтрокой = ""; - - ПоследнийОбъектЗагрузки = ПрочитатьОбъект(УникальныйИдентификаторСтрокой); - - Если ПоследнийОбъектЗагрузки <> Неопределено Тогда - - ТаблицаДанныхСообщенияОбмена = ТаблицыДанныхСообщенияОбмена().Получить(КлючТаблицыДанных); - - СтрокаТаблицы = ТаблицаДанныхСообщенияОбмена.Найти(УникальныйИдентификаторСтрокой, ИмяКолонкиУникальныйИдентификатор()); - - Если СтрокаТаблицы = Неопределено Тогда - - УвеличитьСчетчикЗагруженныхОбъектов(); - - СтрокаТаблицы = ТаблицаДанныхСообщенияОбмена.Добавить(); - - СтрокаТаблицы[ИмяКолонкиТипСтрокой()] = ТипПриемникаСтрокой; - СтрокаТаблицы["Ссылка"] = ПоследнийОбъектЗагрузки.Ссылка; - СтрокаТаблицы[ИмяКолонкиУникальныйИдентификатор()] = УникальныйИдентификаторСтрокой; - - КонецЕсли; - - // Заполняем значения свойств объекта. - ЗаполнитьЗначенияСвойств(СтрокаТаблицы, ПоследнийОбъектЗагрузки); - - КонецЕсли; - - КонецЕсли; - - Иначе - - одПропустить(ФайлОбмена, ИмяУзла); - - КонецЕсли; - - ИначеЕсли ИмяУзла = "НаборЗаписейРегистра" Тогда - - Если РежимЗагрузкиДанныхВИнформационнуюБазу() Тогда - - ИмяПравила = одАтрибут(ФайлОбмена, ТипСтрока, "ИмяПравила"); - - ПКО = Правила[ИмяПравила]; - - ТипИсточникаСтрокой = ПКО.ТипИсточника; - ТипПриемникаСтрокой = ПКО.ТипПриемника; - - КлючТаблицыДанных = ОбменДаннымиСервер.КлючТаблицыДанных(ТипИсточникаСтрокой, ТипПриемникаСтрокой, Ложь); - - Если ТаблицыДляЗагрузки.Найти(КлючТаблицыДанных) <> Неопределено Тогда - - ОбработатьОкончаниеЧтенияНовогоЭлемента(ПрочитатьНаборЗаписейРегистра()); - - Иначе - - одПропустить(ФайлОбмена, ИмяУзла); - - КонецЕсли; - - Иначе - - одПропустить(ФайлОбмена, ИмяУзла); - - КонецЕсли; - - ИначеЕсли ИмяУзла = "УдалениеОбъекта" Тогда - - ТипПриемникаСтрокой = одАтрибут(ФайлОбмена, ТипСтрока, "ТипПриемника"); - ТипИсточникаСтрокой = одАтрибут(ФайлОбмена, ТипСтрока, "ТипИсточника"); - - КлючТаблицыДанных = ОбменДаннымиСервер.КлючТаблицыДанных(ТипИсточникаСтрокой, ТипПриемникаСтрокой, Истина); - - Если ТаблицыДляЗагрузки.Найти(КлючТаблицыДанных) <> Неопределено Тогда - - Если РежимЗагрузкиДанныхВИнформационнуюБазу() Тогда // Загрузка в информационную базу. - - // Обработка удаления объекта из информационной базы. - ПрочитатьУдалениеОбъекта(""); - - ОбработатьОкончаниеЧтенияНовогоЭлемента(); - - Иначе // Загрузка в таблицу значений. - - УникальныйИдентификаторСтрокой = одАтрибут(ФайлОбмена, ТипСтрока, "УникальныйИдентификатор"); - - // Добавляем удаление объекта в таблицу данных сообщения. - ТаблицаДанныхСообщенияОбмена = ТаблицыДанныхСообщенияОбмена().Получить(КлючТаблицыДанных); - - СтрокаТаблицы = ТаблицаДанныхСообщенияОбмена.Найти(УникальныйИдентификаторСтрокой, ИмяКолонкиУникальныйИдентификатор()); - - Если СтрокаТаблицы = Неопределено Тогда - - УвеличитьСчетчикЗагруженныхОбъектов(); - - СтрокаТаблицы = ТаблицаДанныхСообщенияОбмена.Добавить(); - - // Заполняем значения всех полей таблицы значением по умолчанию. - Для Каждого Колонка Из ТаблицаДанныхСообщенияОбмена.Колонки Цикл - - // фильтр - Если Колонка.Имя = ИмяКолонкиТипСтрокой() - ИЛИ Колонка.Имя = ИмяКолонкиУникальныйИдентификатор() - ИЛИ Колонка.Имя = "Ссылка" Тогда - Продолжить; - КонецЕсли; - - Если Колонка.ТипЗначения.СодержитТип(ТипСтрока) Тогда - - СтрокаТаблицы[Колонка.Имя] = НСтр("ru = 'Удаление объекта'"); - - КонецЕсли; - - КонецЦикла; - - СтруктураСвойств = Менеджеры[Тип(ТипПриемникаСтрокой)]; - - СсылкаНаУдаляемыйОбъект = СтруктураСвойств.Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор(УникальныйИдентификаторСтрокой)); - - СтрокаТаблицы[ИмяКолонкиТипСтрокой()] = ТипПриемникаСтрокой; - СтрокаТаблицы["Ссылка"] = СсылкаНаУдаляемыйОбъект; - СтрокаТаблицы[ИмяКолонкиУникальныйИдентификатор()] = УникальныйИдентификаторСтрокой; - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - одПропустить(ФайлОбмена, ИмяУзла); - - ИначеЕсли ИмяУзла = "ИнформацияОРегистрацииОбъекта" Тогда - - одПропустить(ФайлОбмена, ИмяУзла); // В режиме выборочного чтения сообщения пропускаем элемент. - - ИначеЕсли ИмяУзла = "КорректировкаИнформацииОРегистрацииОбъекта" Тогда - - одПропустить(ФайлОбмена, ИмяУзла); // В режиме выборочного чтения сообщения пропускаем элемент. - - ИначеЕсли ИмяУзла = "ОбщиеДанныеУзлов" Тогда - - одПропустить(ФайлОбмена, ИмяУзла); // В режиме выборочного чтения сообщения пропускаем элемент. - - ИначеЕсли (ИмяУзла = "ФайлОбмена") И (ФайлОбмена.ТипУзла = ТипУзлаXMLКонецЭлемента) Тогда - - Прервать; // выходим - - Иначе - - ВызватьИсключение НСтр("ru = 'Ошибка формата сообщения обмена.'"); - - КонецЕсли; - - // Прерываем цикл чтения файла в случае возникновения ошибки. - Если ФлагОшибки() Тогда - ВызватьИсключение НСтр("ru = 'Возникли ошибки при загрузке данных.'"); - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -// Под классификатором понимаем справочник, ПВХ, план счетов, ПВР, у которых -// в ПКО выставлены флаги СинхронизироватьПоИдентификатору И ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли. -// -Функция ЭтоОбъектКлассификатор(ТипОбъектаСтрокой, ПКО) - - ВидОбъекта = ТипОбъектаСтрокой; - Позиция = СтрНайти(ВидОбъекта, "."); - Если Позиция > 0 Тогда - ВидОбъекта = Лев(ВидОбъекта, Позиция - 1); - КонецЕсли; - - Если ВидОбъекта = "СправочникСсылка" - Или ВидОбъекта = "ПланВидовХарактеристикСсылка" - Или ВидОбъекта = "ПланСчетовСсылка" - Или ВидОбъекта = "ПланВидовРасчетаСсылка" Тогда - Возврат ПКО.СинхронизироватьПоИдентификатору И ПКО.ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли - КонецЕсли; - - Возврат Ложь; -КонецФункции - -Процедура ПроизвестиЧтениеДанныхВРежимеАнализа(ЧтениеСообщения, ПараметрыАнализа = Неопределено) - - // Параметры по умолчанию - ПараметрыСбораСтатистики = Новый Структура("СобиратьСтатистикуКлассификаторов", Ложь); - Если ПараметрыАнализа <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(ПараметрыСбораСтатистики, ПараметрыАнализа); - КонецЕсли; - - Пока ФайлОбмена.Прочитать() Цикл - - ИмяУзла = ФайлОбмена.ЛокальноеИмя; - - Если ИмяУзла = "Объект" Тогда - - ТипОбъектаСтрокой = одАтрибут(ФайлОбмена, ТипСтрока, "Тип"); - - Если ТипОбъектаСтрокой <> "КонстантыНабор" Тогда - - ИмяПравила = одАтрибут(ФайлОбмена, ТипСтрока, "ИмяПравила"); - ПКО = Правила[ИмяПравила]; - - Если ПараметрыСбораСтатистики.СобиратьСтатистикуКлассификаторов И ЭтоОбъектКлассификатор(ТипОбъектаСтрокой, ПКО) Тогда - // Новое поведение - СобиратьСтатистику = Истина; - ЭтоКлассификатор = Истина; - - ИначеЕсли Не (ПКО.СинхронизироватьПоИдентификатору И ПКО.ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли) И ПКО.СинхронизироватьПоИдентификатору Тогда - // Ветка совместимости. - // Объекты, для которых выполняется автоматическое сопоставление в процессе обмена (классификаторы), - // не отображаются пользователю в таблице информации статистики. Поэтому сбор информации статистики для них не - // нужен. - - // Также не отображаются объекты, которые идентифицируются по полям поиска, а не по уникальному идентификатору - // ссылки. - СобиратьСтатистику = Истина; - ЭтоКлассификатор = Ложь; - - Иначе - СобиратьСтатистику = Ложь; - - КонецЕсли; - - Если СобиратьСтатистику Тогда - СтрокаТаблицы = ТаблицаДанныхЗаголовкаПакета().Добавить(); - - СтрокаТаблицы.ТипОбъектаСтрокой = ТипОбъектаСтрокой; - СтрокаТаблицы.КоличествоОбъектовВИсточнике = 1; - - СтрокаТаблицы.ТипПриемникаСтрокой = ПКО.ТипПриемника; - СтрокаТаблицы.ТипИсточникаСтрокой = ПКО.ТипИсточника; - - СтрокаТаблицы.ПоляПоиска = ПоляПоискаМеханизмаСопоставленияОбъектов(ПКО.ПоляПоиска); - СтрокаТаблицы.ПоляТаблицы = ПКО.ПоляТаблицы; - - СтрокаТаблицы.СинхронизироватьПоИдентификатору = ПКО.СинхронизироватьПоИдентификатору; - СтрокаТаблицы.ИспользоватьПредварительныйПросмотр = ПКО.СинхронизироватьПоИдентификатору; - СтрокаТаблицы.ЭтоКлассификатор = ЭтоКлассификатор; - СтрокаТаблицы.ЭтоУдалениеОбъекта = Ложь; - - КонецЕсли; - - КонецЕсли; - - одПропустить(ФайлОбмена, ИмяУзла); - - ИначеЕсли ИмяУзла = "НаборЗаписейРегистра" Тогда - - одПропустить(ФайлОбмена, ИмяУзла); - - ИначеЕсли ИмяУзла = "УдалениеОбъекта" Тогда - - СтрокаТаблицы = ТаблицаДанныхЗаголовкаПакета().Добавить(); - - СтрокаТаблицы.ТипПриемникаСтрокой = одАтрибут(ФайлОбмена, ТипСтрока, "ТипПриемника"); - СтрокаТаблицы.ТипИсточникаСтрокой = одАтрибут(ФайлОбмена, ТипСтрока, "ТипИсточника"); - - СтрокаТаблицы.ТипОбъектаСтрокой = СтрокаТаблицы.ТипПриемникаСтрокой; - - СтрокаТаблицы.КоличествоОбъектовВИсточнике = 1; - - СтрокаТаблицы.СинхронизироватьПоИдентификатору = Ложь; - СтрокаТаблицы.ИспользоватьПредварительныйПросмотр = Истина; - СтрокаТаблицы.ЭтоКлассификатор = Ложь; - СтрокаТаблицы.ЭтоУдалениеОбъекта = Истина; - - СтрокаТаблицы.ПоляПоиска = ""; // Поля поиска будут назначены в конструкторе обработки сопоставления объектов. - - // Определяем значения для колонки ПоляТаблицы - // получаем описание всех полей объекта метаданного из конфигурации. - ТипОбъекта = Тип(СтрокаТаблицы.ТипОбъектаСтрокой); - ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипОбъекта); - - МассивПодстрок = ТаблицаОписанияСвойствОбъекта(ОбъектМетаданных).ВыгрузитьКолонку("Имя"); - - // Удаляем поле "Ссылка" из визуальных полей таблицы. - ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(МассивПодстрок, "Ссылка"); - - СтрокаТаблицы.ПоляТаблицы = СтрСоединить(МассивПодстрок, ","); - - одПропустить(ФайлОбмена, ИмяУзла); - - ИначеЕсли ИмяУзла = "ИнформацияОРегистрацииОбъекта" Тогда - - ЕстьИнформацияОРегистрацииОбъекта = Истина; - - ПоследнийОбъектЗагрузки = ПрочитатьИнформациюОРегистрацииОбъекта(); - - ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки); - - ИначеЕсли ИмяУзла = "КорректировкаИнформацииОРегистрацииОбъекта" Тогда - - ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Истина; - - ПрочитатьКорректировкуИнформацииСопоставления(); - - одПропустить(ФайлОбмена, ИмяУзла); - - ИначеЕсли ИмяУзла = "ОбщиеДанныеУзлов" Тогда - - ПрочитатьОбщиеДанныеУзлов(ЧтениеСообщения); - - одПропустить(ФайлОбмена, ИмяУзла); - - ИначеЕсли (ИмяУзла = "ФайлОбмена") И (ФайлОбмена.ТипУзла = ТипУзлаXML.КонецЭлемента) Тогда - - Прервать; // выход - - Иначе - - ВызватьИсключение НСтр("ru = 'Ошибка формата сообщения обмена.'"); - - КонецЕсли; - - // Прерываем цикл чтения файла в случае возникновения ошибки. - Если ФлагОшибки() Тогда - ВызватьИсключение НСтр("ru = 'Возникли ошибки при анализе данных.'"); - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -Процедура ПроизвестиЧтениеДанныхВРежимеВнешнегоСоединения(ЧтениеСообщения) - - СтрокаСообщенияОбОшибке = ""; - КоличествоОбъектовКЗагрузке = КоличествоОбъектовКЗагрузкеВнешнееСоединение; - - Пока ФайлОбмена.Прочитать() Цикл - - ИмяУзла = ФайлОбмена.ЛокальноеИмя; - - Если ИмяУзла = "Объект" Тогда - - ПоследнийОбъектЗагрузки = ПрочитатьОбъект(); - - ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки); - - ОбменДаннымиСервер.РассчитатьПроцентЗагрузки(СчетчикЗагруженныхОбъектов(), КоличествоОбъектовКЗагрузке, РазмерФайлаСообщенияОбмена); - - ИначеЕсли ИмяУзла = "НаборЗаписейРегистра" Тогда - - // набор записей регистра - ПоследнийОбъектЗагрузки = ПрочитатьНаборЗаписейРегистра(); - - ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки); - ОбменДаннымиСервер.РассчитатьПроцентЗагрузки(СчетчикЗагруженныхОбъектов(), КоличествоОбъектовКЗагрузке, РазмерФайлаСообщенияОбмена); - ИначеЕсли ИмяУзла = "УдалениеОбъекта" Тогда - - // Обработка удаления объекта из информационной базы. - ПрочитатьУдалениеОбъекта(СтрокаСообщенияОбОшибке); - - одПропустить(ФайлОбмена, "УдалениеОбъекта"); - - ОбработатьОкончаниеЧтенияНовогоЭлемента(); - ОбменДаннымиСервер.РассчитатьПроцентЗагрузки(СчетчикЗагруженныхОбъектов(), КоличествоОбъектовКЗагрузке, РазмерФайлаСообщенияОбмена); - ИначеЕсли ИмяУзла = "ИнформацияОРегистрацииОбъекта" Тогда - - ЕстьИнформацияОРегистрацииОбъекта = Истина; - - ПоследнийОбъектЗагрузки = ПрочитатьИнформациюОРегистрацииОбъекта(); - - ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки); - - ИначеЕсли ИмяУзла = "НастройкаПользовательскогоПоиска" Тогда - - ЗагрузитьИнформациюОПользовательскихПоляхПоиска(); - - ИначеЕсли ИмяУзла = "ИнформацияОТипахДанных" Тогда - - Если СоответствиеТиповДанныхДляЗагрузки().Количество() > 0 Тогда - - одПропустить(ФайлОбмена, ИмяУзла); - - Иначе - ЗагрузитьИнформациюОТипахДанных(); - КонецЕсли; - - ИначеЕсли ИмяУзла = "ЗначениеПараметра" Тогда - - ЗагрузитьЗначенияПараметровОбменаДанными(); - - ИначеЕсли ИмяУзла = "АлгоритмПослеЗагрузкиПараметров" Тогда - - Отказ = Ложь; - ПричинаОтказа = ""; - - ТекстАлгоритма = одЗначениеЭлемента(ФайлОбмена, ТипСтрока); - - Если Не ПустаяСтрока(ТекстАлгоритма) Тогда - - Попытка - - Если ОтладкаОбработчиковЗагрузки Тогда - - ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиПараметров(ФайлОбмена, Отказ, ПричинаОтказа); - - Иначе - - Выполнить(ТекстАлгоритма); - - КонецЕсли; - - Если Отказ = Истина Тогда - - Если Не ПустаяСтрока(ПричинаОтказа) Тогда - - СтрокаСообщения = НСтр("ru = 'Загрузка данных отменена по причине: %1'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ПричинаОтказа); - ВызватьИсключение СтрокаСообщения; - Иначе - ВызватьИсключение НСтр("ru = 'Загрузка данных отменена'"); - КонецЕсли; - - КонецЕсли; - - Исключение - - ЗП = ПолучитьСтруктуруЗаписиПротокола(78, ОписаниеОшибки()); - ЗП.Обработчик = "ПослеЗагрузкиПараметров"; - СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(78, ЗП, Истина); - - Если Не ПродолжитьПриОшибке Тогда - ВызватьИсключение СтрокаСообщенияОбОшибке; - КонецЕсли; - - КонецПопытки; - - КонецЕсли; - - ИначеЕсли ИмяУзла = "ДанныеПоОбмену" Тогда - - ПрочитатьДанныеПоОбмену(ЧтениеСообщения, Ложь); - - одПропустить(ФайлОбмена, ИмяУзла); - - Если ФлагОшибки() Тогда - Прервать; - КонецЕсли; - - ИначеЕсли ИмяУзла = "ОбщиеДанныеУзлов" Тогда - - ПрочитатьОбщиеДанныеУзлов(Неопределено); - - одПропустить(ФайлОбмена, ИмяУзла); - - Если ФлагОшибки() Тогда - Прервать; - КонецЕсли; - - ИначеЕсли ИмяУзла = "КорректировкаИнформацииОРегистрацииОбъекта" Тогда - - ПрочитатьКорректировкуИнформацииСопоставления(); - - ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Истина; - - одПропустить(ФайлОбмена, ИмяУзла); - - ИначеЕсли (ИмяУзла = "ФайлОбмена") И (ФайлОбмена.ТипУзла = ТипУзлаXMLКонецЭлемента) Тогда - - Прервать; // выходим - - Иначе - - одПропустить(ФайлОбмена, ИмяУзла); - - КонецЕсли; - - // Прерываем цикл чтения файла в случае возникновения ошибки загрузки. - Если ФлагОшибки() Тогда - Прервать; - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -Процедура ПрочитатьДанныеПоОбмену(ЧтениеСообщения, АнализДанных) - - ПолеИмяПланаОбмена = одАтрибут(ФайлОбмена, ТипСтрока, "ПланОбмена"); - КодОтКого = одАтрибут(ФайлОбмена, ТипСтрока, "ОтКого"); - ПолеНомерСообщения = одАтрибут(ФайлОбмена, ТипЧисло, "НомерИсходящегоСообщения"); - ПолеНомерПринятогоСообщения = одАтрибут(ФайлОбмена, ТипЧисло, "НомерВходящегоСообщения"); - УдалитьРегистрациюИзменений = одАтрибут(ФайлОбмена, ТипБулево, "УдалитьРегистрациюИзменений"); - ВерсияОтправителя = одАтрибут(ФайлОбмена, ТипСтрока, "ВерсияОтправителя"); - - УзелОбменаПолучатель = ПланыОбмена[ИмяПланаОбмена()].НайтиПоКоду(КодОтКого); - - // Проверка на наличие узла получателя - // проверка на правильность указания узла получателя в сообщении обмена. - Если Не ЗначениеЗаполнено(УзелОбменаПолучатель) - ИЛИ УзелОбменаПолучатель <> УзелОбменаЗагрузкаДанных Тогда - - СтрокаСообщения = НСтр("ru = 'Не найден узел обмена для загрузки данных. План обмена: %1, Код: %2'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяПланаОбмена(), КодОтКого); - ВызватьИсключение СтрокаСообщения; - КонецЕсли; - - ЧтениеСообщения = Новый Структура("НомерСообщения, НомерПринятого, Отправитель, ОтправительОбъект, СообщениеБылоПринятоРанее, АнализДанных"); - ЧтениеСообщения.Отправитель = УзелОбменаПолучатель; - ЧтениеСообщения.ОтправительОбъект = УзелОбменаПолучатель.ПолучитьОбъект(); - ЧтениеСообщения.НомерСообщения = ПолеНомерСообщения; - ЧтениеСообщения.НомерПринятого = ПолеНомерПринятогоСообщения; - ЧтениеСообщения.СообщениеБылоПринятоРанее = Ложь; - ЧтениеСообщения.АнализДанных = АнализДанных; - ЧтениеСообщения = Новый ФиксированнаяСтруктура(ЧтениеСообщения); - - ВосстановленаРезервнаяКопия = (ЧтениеСообщения.НомерПринятого > ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЧтениеСообщения.Отправитель, "НомерОтправленного")); - - Если РежимЗагрузкиДанныхВИнформационнуюБазу() Тогда - - НачатьТранзакцию(); - НомерПринятого = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЧтениеСообщения.Отправитель, "НомерПринятого"); - ЗафиксироватьТранзакцию(); - - Если НомерПринятого >= ЧтениеСообщения.НомерСообщения Тогда // Номер сообщения меньше либо равен ранее принятому. - - ЧтениеСообщенияВременное = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ЧтениеСообщения); - ЧтениеСообщенияВременное.СообщениеБылоПринятоРанее = Истина; - ЧтениеСообщения = Новый ФиксированнаяСтруктура(ЧтениеСообщенияВременное); - - ВызватьИсключение НСтр("ru = 'Сообщение обмена было принято ранее'"); - КонецЕсли; - - УдалитьРегистрациюИзменений = УдалитьРегистрациюИзменений И Не ВосстановленаРезервнаяКопия; - - Если УдалитьРегистрациюИзменений Тогда // Удаляем регистрацию изменений. - - Если ТранзакцияАктивна() Тогда - ВызватьИсключение НСтр("ru = 'Удаление регистрации изменений данных не может быть выполнено в активной транзакции.'"); - КонецЕсли; - - ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого); - - РегистрыСведений.ИзмененияОбщихДанныхУзлов.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого); - - Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияФорматаВходящегоСообщенияОбмена(), "3.1.0.0") >= 0 Тогда - - РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ЗафиксироватьВыполнениеКорректировкиИнформацииСопоставления(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого); - - КонецЕсли; - - РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.СнятьПризнакНачальнойВыгрузкиДанных(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого); - - КонецЕсли; - - Если ВосстановленаРезервнаяКопия Тогда - - ЧтениеСообщения.ОтправительОбъект.НомерОтправленного = ЧтениеСообщения.НомерПринятого; - ЧтениеСообщения.ОтправительОбъект.ОбменДанными.Загрузка = Истина; - ЧтениеСообщения.ОтправительОбъект.Записать(); - - ЧтениеСообщенияВременное = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ЧтениеСообщения); - ЧтениеСообщенияВременное.ОтправительОбъект = ЧтениеСообщения.Отправитель.ПолучитьОбъект(); - ЧтениеСообщения = Новый ФиксированнаяСтруктура(ЧтениеСообщенияВременное); - КонецЕсли; - - РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.УстановитьВерсиюКорреспондента(ЧтениеСообщения.Отправитель, ВерсияОтправителя); - - КонецЕсли; - - // {Обработчик: ПослеПолученияИнформацииОбУзлахОбмена} Начало - Если Не ПустаяСтрока(Конвертация.ПослеПолученияИнформацииОбУзлахОбмена) Тогда - - Попытка - - Если ОтладкаОбработчиковЗагрузки Тогда - - ВыполнитьОбработчик_Конвертация_ПослеПолученияИнформацииОбУзлахОбмена(ЧтениеСообщения.Отправитель); - - Иначе - - Выполнить(Конвертация.ПослеПолученияИнформацииОбУзлахОбмена); - - КонецЕсли; - - Исключение - ВызватьИсключение ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(176, ОписаниеОшибки(), Нстр("ru = 'ПослеПолученияИнформацииОбУзлахОбмена (конвертация)'")); - КонецПопытки; - - КонецЕсли; - // {Обработчик: ПослеПолученияИнформацииОбУзлахОбмена} Окончание - -КонецПроцедуры - -Процедура ПрочитатьОбщиеДанныеУзлов(ЧтениеСообщения) - - ФайлОбмена.Прочитать(); - - РежимЗагрузкиДанныхПредыдущий = РежимЗагрузкиДанных; - - РежимЗагрузкиДанных = "ЗагрузкаВТаблицуЗначений"; - - ОбщийУзел = ПрочитатьОбъект(); - - УвеличитьСчетчикЗагруженныхОбъектов(); - - РежимЗагрузкиДанных = РежимЗагрузкиДанныхПредыдущий; - - // {Обработчик: ПриПолученииДанныхОтправителя} Начало - Игнорировать = Ложь; - - ПланыОбмена[ОбщийУзел.Метаданные().Имя].ПриПолученииДанныхОтправителя(ОбщийУзел, Игнорировать); - - Если Игнорировать = Истина Тогда - Возврат; - КонецЕсли; - // {Обработчик: ПриПолученииДанныхОтправителя} Окончание - - Если ОбменДаннымиСобытия.ДанныеРазличаются(ОбщийУзел, ОбщийУзел.Ссылка.ПолучитьОбъект()) Тогда - - НачатьТранзакцию(); - Попытка - - ОбщийУзел.ОбменДанными.Загрузка = Истина; - ОбщийУзел.Записать(); - - // Обновляем повторно используемые значения механизма. - ОбменДаннымиВызовСервера.СброситьКэшМеханизмаРегистрацииОбъектов(); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - - ОткрытьТранзакцию = Ложь; - Если ТранзакцияАктивна() Тогда - ЗафиксироватьТранзакцию(); - ОткрытьТранзакцию = Истина; - КонецЕсли; - - // Удаляем регистрацию изменений на случай, если изменения были ранее зарегистрированы (в случае коллизии изменений). - РегистрыСведений.ИзмененияОбщихДанныхУзлов.УдалитьРегистрациюИзменений(ОбщийУзел.Ссылка); - - Если ОткрытьТранзакцию Тогда - НачатьТранзакцию(); - КонецЕсли; - - Если ЧтениеСообщения <> Неопределено - И ОбщийУзел.Ссылка = ЧтениеСообщения.Отправитель Тогда - - ЧтениеСообщенияВременное = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ЧтениеСообщения); - ЧтениеСообщенияВременное.ОтправительОбъект = ЧтениеСообщения.Отправитель.ПолучитьОбъект(); - ЧтениеСообщения = Новый ФиксированнаяСтруктура(ЧтениеСообщенияВременное); - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -Процедура ВыполнитьОтложенноеПроведениеДокументов() - - Если ДокументыДляОтложенногоПроведения().Количество() = 0 Тогда - Возврат // нет документов в очереди - КонецЕсли; - - // Сворачиваем таблицу по уникальным полям. - ДокументыДляОтложенногоПроведения().Свернуть("ДокументСсылка, ДатаДокумента"); - - // Сортируем документы по возрастанию даты документов. - ДокументыДляОтложенногоПроведения().Сортировать("ДатаДокумента"); - - Для Каждого СтрокаТаблицы Из ДокументыДляОтложенногоПроведения() Цикл - - ДокументСсылка = СтрокаТаблицы.ДокументСсылка; - - Если ДокументСсылка.Пустая() Тогда - Продолжить; - КонецЕсли; - - Объект = ДокументСсылка.ПолучитьОбъект(); - - Если Объект = Неопределено Тогда - Продолжить; - КонецЕсли; - - // Устанавливаем узел-отправитель для предотвращения регистрации объекта на узле, для которого производим загрузку - // проведение выполняем не в режиме загрузки. - УстановитьОбменДаннымиЗагрузка(Объект, Ложь); - - ОписаниеОшибки = ""; - ДокументПроведенУспешно = Ложь; - - Попытка - - ДополнительныеСвойства = ДополнительныеСвойстваДляОтложенногоПроведения().Получить(ДокументСсылка); - - Для Каждого Свойство Из ДополнительныеСвойства Цикл - - Объект.ДополнительныеСвойства.Вставить(Свойство.Ключ, Свойство.Значение); - - КонецЦикла; - - Объект.ДополнительныеСвойства.Вставить("ОтложенноеПроведение"); - - Если Объект.ПроверитьЗаполнение() Тогда - - // При проведении документа снимаем запрет на выполнение ПРО, - // т.к. ПРО были проигнорированы при обычной записи документа с целью оптимизации скорости загрузки данных. - Если Объект.ДополнительныеСвойства.Свойство("ОтключитьМеханизмРегистрацииОбъектов") Тогда - Объект.ДополнительныеСвойства.Удалить("ОтключитьМеханизмРегистрацииОбъектов"); - КонецЕсли; - - ОбменДаннымиСервер.ПропуститьПроверкуЗапретаИзменения(); - Объект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); - - СведенияОВерсииОбъекта = Новый Структура; - СведенияОВерсииОбъекта.Вставить("ОтложеннаяОбработка", Истина); - СведенияОВерсииОбъекта.Вставить("ТипВерсииОбъекта", "ИзмененоПользователем"); - СведенияОВерсииОбъекта.Вставить("АвторВерсии", УзелОбменаЗагрузкаДанных); - Объект.ДополнительныеСвойства.Вставить("СведенияОВерсииОбъекта", СведенияОВерсииОбъекта); - - // Выполняем попытку проведения документа. - Объект.Записать(РежимЗаписиДокумента.Проведение); - - ДокументПроведенУспешно = Объект.Проведен; - - Иначе - - ДокументПроведенУспешно = Ложь; - - КонецЕсли; - - Исключение - - ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - - ДокументПроведенУспешно = Ложь; - - КонецПопытки; - - ОбменДаннымиСервер.ПропуститьПроверкуЗапретаИзменения(Ложь); - - Если Не ДокументПроведенУспешно Тогда - - ОбменДаннымиСервер.ЗарегистрироватьОшибкуПроведенияДокумента(Объект, УзелОбменаЗагрузкаДанных, ОписаниеОшибки); - - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -Процедура ВыполнитьОтложеннуюЗаписьОбъектов() - - Если ОбъектыДляОтложеннойЗаписи().Количество() = 0 Тогда - Возврат // Нет объектов в очереди - КонецЕсли; - - Для Каждого ОбъектСоответствия Из ОбъектыДляОтложеннойЗаписи() Цикл - - Если ОбъектСоответствия.Ключ.Пустая() Тогда - Продолжить; - КонецЕсли; - - Объект = ОбъектСоответствия.Ключ.ПолучитьОбъект(); - - Если Объект = Неопределено Тогда - Продолжить; - КонецЕсли; - - // Устанавливаем узел-отправитель для предотвращения регистрации объекта на узле, для которого производим загрузку - // проведение выполняем не в режиме загрузки. - УстановитьОбменДаннымиЗагрузка(Объект, Ложь); - - ОписаниеОшибки = ""; - ОбъектЗаписанУспешно = Ложь; - - Попытка - - ДополнительныеСвойства = ОбъектСоответствия.Значение; - - Для Каждого Свойство Из ДополнительныеСвойства Цикл - - Объект.ДополнительныеСвойства.Вставить(Свойство.Ключ, Свойство.Значение); - - КонецЦикла; - - Объект.ДополнительныеСвойства.Вставить("ОтложеннаяЗапись"); - - Если Объект.ПроверитьЗаполнение() Тогда - - // При проведении документа снимаем запрет на выполнение ПРО, - // т.к. ПРО были проигнорированы при обычной записи с целью оптимизации скорости загрузки данных. - Если Объект.ДополнительныеСвойства.Свойство("ОтключитьМеханизмРегистрацииОбъектов") Тогда - Объект.ДополнительныеСвойства.Удалить("ОтключитьМеханизмРегистрацииОбъектов"); - КонецЕсли; - - ОбменДаннымиСервер.ПропуститьПроверкуЗапретаИзменения(); - Объект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); - - СведенияОВерсииОбъекта = Новый Структура; - СведенияОВерсииОбъекта.Вставить("ОтложеннаяОбработка", Истина); - СведенияОВерсииОбъекта.Вставить("ТипВерсииОбъекта", "ИзмененоПользователем"); - СведенияОВерсииОбъекта.Вставить("АвторВерсии", УзелОбменаЗагрузкаДанных); - Объект.ДополнительныеСвойства.Вставить("СведенияОВерсииОбъекта", СведенияОВерсииОбъекта); - - // Выполняем попытку записи объекта. - Объект.Записать(); - - ОбъектЗаписанУспешно = Истина; - - Иначе - - ОбъектЗаписанУспешно = Ложь; - - ОписаниеОшибки = НСтр("ru = 'Ошибка проверки заполнения реквизитов'"); - - КонецЕсли; - - Исключение - - ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - - ОбъектЗаписанУспешно = Ложь; - - КонецПопытки; - - ОбменДаннымиСервер.ПропуститьПроверкуЗапретаИзменения(Ложь); - - Если Не ОбъектЗаписанУспешно Тогда - - ОбменДаннымиСервер.ЗарегистрироватьОшибкуЗаписиОбъекта(Объект, УзелОбменаЗагрузкаДанных, ОписаниеОшибки); - - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -Процедура ЗаписатьИнформациюОбОбменеДаннымиЧерезПланыОбмена(Знач НомерОтправленного) - - Приемник = СоздатьУзел("ДанныеПоОбмену"); - - УстановитьАтрибут(Приемник, "ПланОбмена", ИмяПланаОбмена()); - УстановитьАтрибут(Приемник, "Кому", УзелДляОбмена.Код); - УстановитьАтрибут(Приемник, "ОтКого", ПланыОбмена[ИмяПланаОбмена()].ЭтотУзел().Код); - - // Атрибуты механизма квитирования сообщений обмена. - УстановитьАтрибут(Приемник, "НомерИсходящегоСообщения", НомерОтправленного); - УстановитьАтрибут(Приемник, "НомерВходящегоСообщения", УзелДляОбмена.НомерПринятого); - УстановитьАтрибут(Приемник, "УдалитьРегистрациюИзменений", Истина); - - УстановитьАтрибут(Приемник, "ВерсияОтправителя", СокрЛП(Метаданные.Версия)); - - // Запись объекта в файл - Приемник.ЗаписатьКонецЭлемента(); - - ЗаписатьВФайл(Приемник); - -КонецПроцедуры - -Процедура ВыгрузитьОбщиеДанныеУзлов(Знач НомерОтправленного) - - ВыборкаИзмененийУзлов = РегистрыСведений.ИзмененияОбщихДанныхУзлов.ВыбратьИзменения(УзелДляОбмена, НомерОтправленного); - - Если ВыборкаИзмененийУзлов.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелДляОбмена); - - ОбщиеДанныеУзлов = ОбменДаннымиПовтИсп.ОбщиеДанныеУзлов(УзелДляОбмена); - - Если ПустаяСтрока(ОбщиеДанныеУзлов) Тогда - Возврат; - КонецЕсли; - - ПравилаКонвертацииСвойств = Новый ТаблицаЗначений; - ИнициализацияТаблицыПравилКонвертацииСвойств(ПравилаКонвертацииСвойств); - - Свойства = ПравилаКонвертацииСвойств.Скопировать(); - СвойстваПоиска = ПравилаКонвертацииСвойств.Скопировать(); - - МетаданныеОбщегоУзла = Метаданные.ПланыОбмена[ИмяПланаОбмена]; - - ТабличныеЧастиОбщегоУзла = ОбменДаннымиСобытия.ТабличныеЧастиОбъекта(МетаданныеОбщегоУзла); - - СвойстваОбщегоУзла = СтрРазделить(ОбщиеДанныеУзлов, ","); - - Для Каждого Свойство Из СвойстваОбщегоУзла Цикл - - Если ТабличныеЧастиОбщегоУзла.Найти(Свойство) <> Неопределено Тогда - - ПКС = Свойства.Добавить(); - ПКС.ЭтоГруппа = Истина; - ПКС.ВидИсточника = "ТабличнаяЧасть"; - ПКС.ВидПриемника = "ТабличнаяЧасть"; - ПКС.Источник = Свойство; - ПКС.Приемник = Свойство; - ПКС.ПравилаГруппы = ПравилаКонвертацииСвойств.Скопировать(); - - Для Каждого Реквизит Из МетаданныеОбщегоУзла.ТабличныеЧасти[Свойство].Реквизиты Цикл - - ПКГС = ПКС.ПравилаГруппы.Добавить(); - ПКГС.ЭтоГруппа = Ложь; - ПКГС.ВидИсточника = "Реквизит"; - ПКГС.ВидПриемника = "Реквизит"; - ПКГС.Источник = Реквизит.Имя; - ПКГС.Приемник = Реквизит.Имя; - - КонецЦикла; - - Иначе - - ПКС = Свойства.Добавить(); - ПКС.ЭтоГруппа = Ложь; - ПКС.ВидИсточника = "Реквизит"; - ПКС.ВидПриемника = "Реквизит"; - ПКС.Источник = Свойство; - ПКС.Приемник = Свойство; - - КонецЕсли; - - КонецЦикла; - - ПКС = СвойстваПоиска.Добавить(); - ПКС.ВидИсточника = "Свойство"; - ПКС.ВидПриемника = "Свойство"; - ПКС.Источник = "Код"; - ПКС.Приемник = "Код"; - ПКС.ТипИсточника = "Строка"; - ПКС.ТипПриемника = "Строка"; - - ПКО = ТаблицаПравилКонвертации.Добавить(); - ПКО.СинхронизироватьПоИдентификатору = Ложь; - ПКО.ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли = Ложь; - ПКО.НеВыгружатьОбъектыСвойствПоСсылкам = Истина; - ПКО.ТипИсточника = "ПланОбменаСсылка." + ИмяПланаОбмена; - ПКО.Источник = Тип(ПКО.ТипИсточника); - ПКО.ТипПриемника = ПКО.ТипИсточника; - ПКО.Приемник = ПКО.ТипИсточника; - - ПКО.Свойства = Свойства; - ПКО.СвойстваПоиска = СвойстваПоиска; - - ОбщийУзел = ПланыОбмена[ИмяПланаОбмена].СоздатьУзел(); - ОбменДаннымиСобытия.ЗаполнитьЗначенияСвойствОбъекта(ОбщийУзел, УзелДляОбмена.ПолучитьОбъект(), ОбщиеДанныеУзлов); - - // {Обработчик: ПриОтправкеДанныхОтправителя} Начало - Игнорировать = Ложь; - - ПланыОбмена[ОбщийУзел.Метаданные().Имя].ПриОтправкеДанныхОтправителя(ОбщийУзел, Игнорировать); - - Если Игнорировать = Истина Тогда - Возврат; - КонецЕсли; - // {Обработчик: ПриОтправкеДанныхОтправителя} Окончание - - ОбщийУзел.Код = ОбменДаннымиПовтИсп.ПолучитьКодЭтогоУзлаДляПланаОбмена(ИмяПланаОбмена); - - УзелXML = СоздатьУзел("ОбщиеДанныеУзлов"); - - ВыгрузитьПоПравилу(ОбщийУзел,,,,,,, ПКО,,, УзелXML); - - УзелXML.ЗаписатьКонецЭлемента(); - - ЗаписатьВФайл(УзелXML); - -КонецПроцедуры - -Функция ВыгрузитьДанныеСсылочногоОбъекта(Значение, ИсходящиеДанные, ИмяПКО, ПКОСвойств, ТипПриемника, УзелСвойства, Знач ВыгрузитьТолькоСсылку) - - ЭтоПравилоСГлобальнойВыгрузкой = Ложь; - УзелСсылки = ВыгрузитьПоПравилу(Значение, , ИсходящиеДанные, , ИмяПКО, , ВыгрузитьТолькоСсылку, ПКОСвойств, ЭтоПравилоСГлобальнойВыгрузкой, , , , Ложь); - ТипУзлаСсылки = ТипЗнч(УзелСсылки); - - Если ПустаяСтрока(ТипПриемника) Тогда - - ТипПриемника = ПКОСвойств.Приемник; - УстановитьАтрибут(УзелСвойства, "Тип", ТипПриемника); - - КонецЕсли; - - Если УзелСсылки = Неопределено Тогда - - Возврат Неопределено; - - КонецЕсли; - - ДобавитьСвойстваДляВыгрузки(УзелСсылки, ТипУзлаСсылки, УзелСвойства, ЭтоПравилоСГлобальнойВыгрузкой); - - Возврат УзелСсылки; - -КонецФункции - -Процедура ПередатьОдинПараметрВПриемник(Имя, ИсходноеЗначениеПараметра, ПравилоКонвертации = "") - - Если ПустаяСтрока(ПравилоКонвертации) Тогда - - УзелПараметра = СоздатьУзел("ЗначениеПараметра"); - - УстановитьАтрибут(УзелПараметра, "Имя", Имя); - УстановитьАтрибут(УзелПараметра, "Тип", одТипЗначенияСтрокой(ИсходноеЗначениеПараметра)); - - ЭтоNULL = Ложь; - Пусто = одПустое(ИсходноеЗначениеПараметра, ЭтоNULL); - - Если Пусто Тогда - - // Надо записать что это пустое значение. - одЗаписатьЭлемент(УзелПараметра, "Пусто"); - - УзелПараметра.ЗаписатьКонецЭлемента(); - - ЗаписатьВФайл(УзелПараметра); - - Возврат; - - КонецЕсли; - - одЗаписатьЭлемент(УзелПараметра, "Значение", ИсходноеЗначениеПараметра); - - УзелПараметра.ЗаписатьКонецЭлемента(); - - ЗаписатьВФайл(УзелПараметра); - - Иначе - - УзелПараметра = СоздатьУзел("ЗначениеПараметра"); - - УстановитьАтрибут(УзелПараметра, "Имя", Имя); - - ЭтоNULL = Ложь; - Пусто = одПустое(ИсходноеЗначениеПараметра, ЭтоNULL); - - Если Пусто Тогда - - ПКОСвойств = НайтиПравило(ИсходноеЗначениеПараметра, ПравилоКонвертации); - ТипПриемника = ПКОСвойств.Приемник; - УстановитьАтрибут(УзелПараметра, "Тип", ТипПриемника); - - // Надо записать что это пустое значение. - одЗаписатьЭлемент(УзелПараметра, "Пусто"); - - УзелПараметра.ЗаписатьКонецЭлемента(); - - ЗаписатьВФайл(УзелПараметра); - - Возврат; - - КонецЕсли; - - ВыгрузитьДанныеСсылочногоОбъекта(ИсходноеЗначениеПараметра, , ПравилоКонвертации, , , УзелПараметра, Истина); - - УзелПараметра.ЗаписатьКонецЭлемента(); - - ЗаписатьВФайл(УзелПараметра); - - КонецЕсли; - -КонецПроцедуры - -Процедура ПередатьДополнительныеПараметрыВПриемник() - - Для Каждого Параметр Из ТаблицаНастройкиПараметров Цикл - - Если Параметр.ПередаватьПараметрПриВыгрузке = Истина Тогда - - ПередатьОдинПараметрВПриемник(Параметр.Имя, Параметр.Значение, Параметр.ПравилоКонвертации); - - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -Процедура ПередатьИнформациюОТипахВПриемник() - - Если Не ПустаяСтрока(СтрокаТиповДляПриемника) Тогда - ЗаписатьВФайл(СтрокаТиповДляПриемника); - КонецЕсли; - -КонецПроцедуры - -Процедура ПередатьИнформациюОПользовательскихПоляхПоискаВПриемник() - - Для Каждого КлючИЗначенияСопоставления Из ИнформацияОПользовательскихПоляхПоискаПриВыгрузкеДанных Цикл - - УзелПараметра = СоздатьУзел("НастройкаПользовательскогоПоиска"); - - одЗаписатьЭлемент(УзелПараметра, "ИмяПравила", КлючИЗначенияСопоставления.Ключ); - одЗаписатьЭлемент(УзелПараметра, "НастройкаПоиска", КлючИЗначенияСопоставления.Значение); - - УзелПараметра.ЗаписатьКонецЭлемента(); - ЗаписатьВФайл(УзелПараметра); - - КонецЦикла; - -КонецПроцедуры - -Процедура ИнициализироватьКомментарииПриВыгрузкеИЗагрузкеДанных() - - КомментарийПриВыгрузкеДанных = ""; - КомментарийПриЗагрузкеДанных = ""; - -КонецПроцедуры - -Процедура ВыгруженныеПоСсылкеОбъектыДобавитьЗначение(Значение) - - Если ВыгруженныеПоСсылкеОбъекты().Найти(Значение) = Неопределено Тогда - - ВыгруженныеПоСсылкеОбъекты().Добавить(Значение); - - КонецЕсли; - -КонецПроцедуры - -Функция ОбъектПроходитФильтрРазрешенныхОбъектов(Значение) - - Возврат РегистрыСведений.СоответствияОбъектовИнформационныхБаз.ОбъектЕстьВРегистре(Значение, УзелДляОбмена); - -КонецФункции - -Функция ПоляПоискаМеханизмаСопоставленияОбъектов(Знач ПоляПоиска) - - ПоляПоискаКоллекция = СтрРазделить(ПоляПоиска, ","); - - ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(ПоляПоискаКоллекция, "ЭтоГруппа"); - - Возврат СтрСоединить(ПоляПоискаКоллекция, ","); -КонецФункции - -// - -Процедура ВыполнитьВыгрузку(СтрокаСообщенияОбОшибке = "") - - ПолеИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелДляОбмена); - - ВыгрузитьИнформациюСопоставления = ВыгрузитьИнформациюСопоставленияОбъектов(УзелДляОбмена); - - ИнициализироватьКомментарииПриВыгрузкеИЗагрузкеДанных(); - - ТекущийУровеньВложенностиВыгрузитьПоПравилу = 0; - - СтекВызововВыгрузкиДанных = Новый ТаблицаЗначений; - СтекВызововВыгрузкиДанных.Колонки.Добавить("Ссылка"); - СтекВызововВыгрузкиДанных.Индексы.Добавить("Ссылка"); - - ИнициализироватьМенеджерыИСообщения(); - - ПолеСчетчикВыгруженныхОбъектов = Неопределено; - СчетчикНПП = 0; - НППЗаписанногоВФайл = 0; - - Для Каждого Правило Из ТаблицаПравилКонвертации Цикл - - Правило.Выгруженные = СоздатьТаблицуВыгруженныхОбъектов(); - - КонецЦикла; - - // Получаем типы объектов метаданных, которые будут участвовать в выгрузке. - ТаблицаПравилВыгрузкиИспользуемые = ТаблицаПравилВыгрузки.Скопировать(Новый Структура("Включить", Истина)); - - Для Каждого СтрокаТаблицы Из ТаблицаПравилВыгрузкиИспользуемые Цикл - - Если Не СтрокаТаблицы.ОбъектВыборки = Тип("КонстантыНабор") Тогда - - СтрокаТаблицы.ОбъектВыборкиМетаданные = Метаданные.НайтиПоТипу(СтрокаТаблицы.ОбъектВыборки); - - КонецЕсли; - - КонецЦикла; - - СоответствиеДанныхДляОбновленияВыгруженныхЭлементов = Новый Соответствие; - - // {ОБРАБОТЧИК ПередВыгрузкойДанных} - Отказ = Ложь; - - Если Не ПустаяСтрока(Конвертация.ПередВыгрузкойДанных) Тогда - - Попытка - - Если ОтладкаОбработчиковВыгрузки Тогда - - ВыполнитьОбработчик_Конвертация_ПередВыгрузкойДанных(ФайлОбмена, Отказ); - - Иначе - - Выполнить(Конвертация.ПередВыгрузкойДанных); - - КонецЕсли; - - Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(62, ОписаниеОшибки(), НСтр("ru = 'ПередВыгрузкойДанных (конвертация)'")); - Отказ = Истина; - КонецПопытки; - - Если Отказ Тогда // Отказ от выгрузки данных - ЗавершитьВедениеПротоколаОбмена(); - Возврат; - КонецЕсли; - - КонецЕсли; - // {ОБРАБОТЧИК ПередВыгрузкойДанных} - - ПередатьИнформациюОПользовательскихПоляхПоискаВПриемник(); - - ПередатьИнформациюОТипахВПриемник(); - - // Передаем доп. параметры в приемник. - ПередатьДополнительныеПараметрыВПриемник(); - - ТекстСобытияПослеЗагрузкиПараметров = ""; - Если Конвертация.Свойство("ПослеЗагрузкиПараметров", ТекстСобытияПослеЗагрузкиПараметров) - И Не ПустаяСтрока(ТекстСобытияПослеЗагрузкиПараметров) Тогда - - ЗаписьСобытия = Новый ЗаписьXML; - ЗаписьСобытия.УстановитьСтроку(); - одЗаписатьЭлемент(ЗаписьСобытия, "АлгоритмПослеЗагрузкиПараметров", ТекстСобытияПослеЗагрузкиПараметров); - - ЗаписатьВФайл(ЗаписьСобытия); - - КонецЕсли; - - НомерОтправленного = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелДляОбмена, "НомерОтправленного") + ?(ВыгрузитьИнформациюСопоставления, 2, 1); - - ЗаписатьИнформациюОбОбменеДаннымиЧерезПланыОбмена(НомерОтправленного); - - ВыгрузитьОбщиеДанныеУзлов(НомерОтправленного); - - Отказ = Ложь; - - // ВЫПОЛНЯЕМ ВЫГРУЗКУ РЕГИСТРА СОПОСТАВЛЕНИЯ - Если ВыгрузитьИнформациюСопоставления Тогда - - ЗаписьXML = Новый ЗаписьXML; - ЗаписьXML.УстановитьСтроку(); - ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения(); - ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелДляОбмена); - - Попытка - ВыполнитьВыгрузкуРегистраСопоставленияОбъектов(ЗаписьСообщения, СтрокаСообщенияОбОшибке); - Исключение - Отказ = Истина; - КонецПопытки; - - Если Отказ Тогда - ЗаписьСообщения.ПрерватьЗапись(); - Иначе - ЗаписьСообщения.ЗакончитьЗапись(); - КонецЕсли; - - ЗаписьXML.Закрыть(); - ЗаписьXML = Неопределено; - - Если Отказ Тогда - Возврат; - КонецЕсли; - - КонецЕсли; - - // ВЫПОЛНЯЕМ ВЫГРУЗКУ КОРРЕКТИРОВКИ РЕГИСТРА СОПОСТАВЛЕНИЯ - Если НеобходимоВыполнитьКорректировкуИнформацииСопоставления() Тогда - - ВыгрузитьКорректировкуИнформацииСопоставления(); - - КонецЕсли; - - // ВЫПОЛНЯЕМ ВЫГРУЗКУ ЗАРЕГИСТРИРОВАННЫХ ДАННЫХ - ЗаписьXML = Новый ЗаписьXML; - ЗаписьXML.УстановитьСтроку(); - ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения(); - ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелДляОбмена); - - Попытка - ВыполнитьВыгрузкуЗарегистрированныхДанных(ЗаписьСообщения, СтрокаСообщенияОбОшибке, ТаблицаПравилВыгрузкиИспользуемые); - Исключение - Отказ = Истина; - ЗаписатьВПротоколВыполнения(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - Если ЭтоОбменЧерезВнешнееСоединение() Тогда - - Если ЗагрузкаДанныхВыполняетсяВоВнешнемСоединении Тогда - - Пока ВнешнееСоединение.ТранзакцияАктивна() Цикл - ВнешнееСоединение.ОтменитьТранзакцию(); - КонецЦикла; - - Иначе - - ОбработкаДляЗагрузкиДанных().ВнешнееСоединениеОтменитьТранзакциюПриЗагрузкеДанных(); - - КонецЕсли; - - КонецЕсли; - - КонецПопытки; - - // Выполняем регистрацию объектов на текущем узле, которые были выгружены по ссылке. - Для Каждого Элемент Из ВыгруженныеПоСсылкеОбъекты() Цикл - - ПланыОбмена.ЗарегистрироватьИзменения(ЗаписьСообщения.Получатель, Элемент); - - КонецЦикла; - - // Назначаем номер отправленного сообщения для объектов, выгруженных по ссылке. - Если ВыгруженныеПоСсылкеОбъекты().Количество() > 0 Тогда - - ОбменДаннымиСервер.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения, ВыгруженныеПоСсылкеОбъекты()); - - КонецЕсли; - - // Назначаем номер отправленного сообщения для объектов, созданных в текущей сессии выгрузки данных. - Если СозданныеПриВыгрузкеОбъекты().Количество() > 0 Тогда - - ОбменДаннымиСервер.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения, СозданныеПриВыгрузкеОбъекты()); - - КонецЕсли; - - Если Отказ Тогда - ЗаписьСообщения.ПрерватьЗапись(); - Иначе - ЗаписьСообщения.ЗакончитьЗапись(); - КонецЕсли; - - ЗаписьXML.Закрыть(); - ЗаписьXML = Неопределено; - - // {ОБРАБОТЧИК ПослеВыгрузкиДанных} - Если Не Отказ И Не ПустаяСтрока(Конвертация.ПослеВыгрузкиДанных) Тогда - - Попытка - - Если ОтладкаОбработчиковВыгрузки Тогда - - ВыполнитьОбработчик_Конвертация_ПослеВыгрузкиДанных(ФайлОбмена); - - Иначе - - Выполнить(Конвертация.ПослеВыгрузкиДанных); - - КонецЕсли; - - Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(63, ОписаниеОшибки(), НСтр("ru = 'ПослеВыгрузкиДанных (конвертация)'")); - КонецПопытки; - - КонецЕсли; - // {ОБРАБОТЧИК ПослеВыгрузкиДанных} - -КонецПроцедуры - -Процедура ВыполнитьВыгрузкуРегистраСопоставленияОбъектов(ЗаписьСообщения, СтрокаСообщенияОбОшибке) - - // Выбираем изменения только для регистра сопоставления. - ВыборкаИзменений = ОбменДаннымиСервер.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения, Метаданные.РегистрыСведений.СоответствияОбъектовИнформационныхБаз); - - Пока ВыборкаИзменений.Следующий() Цикл - - Данные = ВыборкаИзменений.Получить(); - - // Накладываем фильтр на выгрузку данных. - Если Данные.Отбор.УзелИнформационнойБазы.Значение <> УзелДляОбмена Тогда - Продолжить; - ИначеЕсли ПустаяСтрока(Данные.Отбор.УникальныйИдентификаторПриемника.Значение) Тогда - Продолжить; - КонецЕсли; - - ВыгружатьОбъект = Истина; - - Для Каждого Запись Из Данные Цикл - - Если ВыгружатьОбъект И Запись.ОбъектВыгруженПоСсылке = Истина Тогда - - ВыгружатьОбъект = Ложь; - - КонецЕсли; - - КонецЦикла; - - // Выгружаем зарегистрированную информацию РС СоответствияОбъектовИнформационныхБаз; - // правила конвертации РС прописаны в коде этой обработки; - Если ВыгружатьОбъект Тогда - - ВыгрузитьИнформациюОЗарегистрированномОбъекте(Данные); - - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -Процедура ВыполнитьВыгрузкуЗарегистрированныхДанных(ЗаписьСообщения, СтрокаСообщенияОбОшибке, ТаблицаПравилВыгрузкиИспользуемые) - - // Переменные-заглушки для поддержки механизма отладки кода обработчиков событий. - Перем Отказ, ИмяПКО, ВыборкаДанных, ИсходящиеДанные; - // {ОБРАБОТЧИК ПередПолучениемИзмененныхОбъектов} - Если Не ПустаяСтрока(Конвертация.ПередПолучениемИзмененныхОбъектов) Тогда - - Попытка - - Получатель = УзелДляОбмена; - - Если ОтладкаОбработчиковВыгрузки Тогда - - ВыполнитьОбработчик_Конвертация_ПередПолучениемИзмененныхОбъектов(Получатель, УзелДляФоновогоОбмена); - - Иначе - - Выполнить(Конвертация.ПередПолучениемИзмененныхОбъектов); - - КонецЕсли; - - Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(175, ОписаниеОшибки(), Нстр("ru = 'ПередПолучениемИзмененныхОбъектов (конвертация)'")); - Возврат; - КонецПопытки; - - КонецЕсли; - // {ОБРАБОТЧИК ПередПолучениемИзмененныхОбъектов} - - МассивВыгружаемыхМетаданных = ТаблицаПравилВыгрузкиИспользуемые.ВыгрузитьКолонку("ОбъектВыборкиМетаданные"); - - // Значение "Неопределено" свидетельствует о необходимости выгрузки констант. - Если МассивВыгружаемыхМетаданных.Найти(Неопределено) <> Неопределено Тогда - - ДополнитьМассивВыгружаемыхМетаданныхКонстантами(МассивВыгружаемыхМетаданных); - - КонецЕсли; - - // Удаляем из массива элементы со значением "Неопределено". - УдалитьНедопустимыеЗначенияИзМассиваВыгружаемыхМетаданных(МассивВыгружаемыхМетаданных); - - // Регистр сведений СоответствияОбъектовИнформационныхБаз выгружается отдельно, поэтому в эту выборку он не должен - // входить. - Если МассивВыгружаемыхМетаданных.Найти(Метаданные.РегистрыСведений.СоответствияОбъектовИнформационныхБаз) <> Неопределено Тогда - - ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(МассивВыгружаемыхМетаданных, Метаданные.РегистрыСведений.СоответствияОбъектовИнформационныхБаз); - - КонецЕсли; - - // Обновляем повторно используемые значения МРО. - ОбменДаннымиВызовСервера.ПроверитьКэшМеханизмаРегистрацииОбъектов(); - - НачальнаяВыгрузкаДанных = ОбменДаннымиСервер.УстановленПризнакНачальнойВыгрузкиДанных(ЗаписьСообщения.Получатель); - - // ВЫБОРКА ИЗМЕНЕНИЙ - ВыборкаИзменений = ОбменДаннымиСервер.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения, МассивВыгружаемыхМетаданных); - - ОбъектМетаданныхПредыдущий = Неопределено; - ПравилоВыгрузкиДанныхПредыдущее = Неопределено; - ПравилоВыгрузкиДанных = Неопределено; - НомерФайлаВыгрузки = 0; - СтрокаФайла = Неопределено; - ВыгружаетсяРегистр = Ложь; - ВыгружаютсяКонстанты = Ложь; - - ЭтоОбменЧерезВнешнееСоединение = ЭтоОбменЧерезВнешнееСоединение(); - - Если ЭтоОбменЧерезВнешнееСоединение Тогда - - Если ЗагрузкаДанныхВыполняетсяВоВнешнемСоединении Тогда - - Если ОбработкаДляЗагрузкиДанных().ИспользоватьТранзакции Тогда - - ВнешнееСоединение.НачатьТранзакцию(); - - КонецЕсли; - - Иначе - - ОбработкаДляЗагрузкиДанных().ВнешнееСоединениеНачатьТранзакциюПриЗагрузкеДанных(); - - КонецЕсли; - - КонецЕсли; - - УзелДляОбменаОбъект = УзелДляОбмена.ПолучитьОбъект(); - - Пока ВыборкаИзменений.Следующий() Цикл - Инкремент(КоличествоОбъектовКВыгрузке); - КонецЦикла; - ВыборкаИзменений.Сбросить(); - - Если ЭтоОбменЧерезВнешнееСоединение() Тогда - // В базе-корреспонденте может не быть этого реквизита обработки. - Если ОбработкаДляЗагрузкиДанных().Метаданные().Реквизиты.Найти("КоличествоОбъектовКЗагрузкеВнешнееСоединение") <> Неопределено Тогда - ОбработкаДляЗагрузкиДанных().КоличествоОбъектовКЗагрузкеВнешнееСоединение = КоличествоОбъектовКВыгрузке; - КонецЕсли; - КонецЕсли; - - Пока ВыборкаИзменений.Следующий() Цикл - - Инкремент(ПолеСчетчикВыгруженныхОбъектов); - ОбменДаннымиСервер.РассчитатьПроцентВыгрузки(СчетчикВыгруженныхОбъектов(), КоличествоОбъектовКВыгрузке); - - Данные = ВыборкаИзменений.Получить(); - - ТипДанныхДляВыгрузки = ТипЗнч(Данные); - - // Отрабатываем удаление объекта. - Если ТипДанныхДляВыгрузки = ТипУдалениеОбъекта Тогда - - ОтработатьУдалениеОбъекта(Данные); - Продолжить; - - ИначеЕсли ТипДанныхДляВыгрузки = ТипРегистрСоответствия Тогда - Продолжить; - КонецЕсли; - - ОбъектМетаданныхТекущий = Данные.Метаданные(); - - // Выгружается новый тип объекта метаданных. - Если ОбъектМетаданныхПредыдущий <> ОбъектМетаданныхТекущий Тогда - - Если ОбъектМетаданныхПредыдущий <> Неопределено Тогда - - // {ОБРАБОТЧИК ПослеОбработки ПВД} - Если ПравилоВыгрузкиДанныхПредыдущее <> Неопределено - И Не ПустаяСтрока(ПравилоВыгрузкиДанныхПредыдущее.ПослеОбработки) Тогда - - Попытка - - Если ОтладкаОбработчиковВыгрузки Тогда - - ВыполнитьОбработчик_ПВД_ПослеОбработкиПравила(ИмяПКО, ПравилоВыгрузкиДанныхПредыдущее, ИсходящиеДанные); - - Иначе - - Выполнить(ПравилоВыгрузкиДанныхПредыдущее.ПослеОбработки); - - КонецЕсли; - - Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ОписаниеОшибки(), ПравилоВыгрузкиДанныхПредыдущее.Имя, "ПослеОбработкиВыгрузкиДанных"); - КонецПопытки; - - КонецЕсли; - // {ОБРАБОТЧИК ПослеОбработки ПВД} - - КонецЕсли; - - ОбъектМетаданныхПредыдущий = ОбъектМетаданныхТекущий; - - ВыгружаетсяРегистр = Ложь; - ВыгружаютсяКонстанты = Ложь; - - СтруктураДанных = МенеджерыДляПлановОбмена[ОбъектМетаданныхТекущий]; - - Если СтруктураДанных = Неопределено Тогда - - ВыгружаютсяКонстанты = Метаданные.Константы.Содержит(ОбъектМетаданныхТекущий); - - ИначеЕсли СтруктураДанных.ЭтоРегистр = Истина Тогда - - ВыгружаетсяРегистр = Истина; - - КонецЕсли; - - Если ВыгружаютсяКонстанты Тогда - - ПравилоВыгрузкиДанных = ТаблицаПравилВыгрузкиИспользуемые.Найти(Тип("КонстантыНабор"), "ОбъектВыборкиМетаданные"); - - Иначе - - ПравилоВыгрузкиДанных = ТаблицаПравилВыгрузкиИспользуемые.Найти(ОбъектМетаданныхТекущий, "ОбъектВыборкиМетаданные"); - - КонецЕсли; - - ПравилоВыгрузкиДанныхПредыдущее = ПравилоВыгрузкиДанных; - - // {ОБРАБОТЧИК ПередОбработкой ПВД} - ИсходящиеДанные = Неопределено; - - Если ПравилоВыгрузкиДанных <> Неопределено - И Не ПустаяСтрока(ПравилоВыгрузкиДанных.ПередОбработкой) Тогда - - Попытка - - Если ОтладкаОбработчиковВыгрузки Тогда - - ВыполнитьОбработчик_ПВД_ПередОбработкойПравила(Отказ, ИмяПКО, ПравилоВыгрузкиДанных, ИсходящиеДанные, ВыборкаДанных); - - Иначе - - Выполнить(ПравилоВыгрузкиДанных.ПередОбработкой); - - КонецЕсли; - - Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(31, ОписаниеОшибки(), ПравилоВыгрузкиДанных.Имя, "ПередОбработкойВыгрузкиДанных"); - КонецПопытки; - - - КонецЕсли; - // {ОБРАБОТЧИК ПередОбработкой ПВД} - - КонецЕсли; - - Если ТипДанныхДляВыгрузки <> ТипРегистрСоответствия Тогда - - // Определяем вид отправки объекта. - ОтправкаЭлемента = ОтправкаЭлементаДанных.Авто; - - СтандартныеПодсистемыСервер.ПриОтправкеДанныхПодчиненному(Данные, ОтправкаЭлемента, НачальнаяВыгрузкаДанных, УзелДляОбменаОбъект); - - Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить Тогда - - Если ВыгружаетсяРегистр Тогда - - // Удаление регистра отсылаем в виде пустого набора записей. - - Иначе - - // Посылаем информацию об удалении. - ОтработатьУдалениеОбъекта(Данные); - Продолжить; - - КонецЕсли; - - ИначеЕсли ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда - - Продолжить; - - КонецЕсли; - - КонецЕсли; - - // ВЫГРУЗКА ОБЪЕКТА - Если ВыгружаетсяРегистр Тогда - - // выгрузка регистра - ВыгрузкаРегистра(Данные, ПравилоВыгрузкиДанных, ИсходящиеДанные, НеВыгружатьОбъектыПоСсылкам); - - ИначеЕсли ВыгружаютсяКонстанты Тогда - - // выгрузка набора констант - Свойства = Менеджеры[Тип("КонстантыНабор")]; - - ВыгрузитьНаборКонстант(ПравилоВыгрузкиДанных, Свойства, ИсходящиеДанные, ОбъектМетаданныхТекущий.Имя); - - Иначе - - // выгрузка ссылочных типов - ВыгрузкаОбъектаВыборки(Данные, ПравилоВыгрузкиДанных, , ИсходящиеДанные, НеВыгружатьОбъектыПоСсылкам); - - КонецЕсли; - - Если ЭтоОбменЧерезВнешнееСоединение Тогда - - Если ЗагрузкаДанныхВыполняетсяВоВнешнемСоединении Тогда - - Если ОбработкаДляЗагрузкиДанных().ИспользоватьТранзакции - И ОбработкаДляЗагрузкиДанных().КоличествоОбъектовНаТранзакцию > 0 - И ОбработкаДляЗагрузкиДанных().СчетчикЗагруженныхОбъектов() % ОбработкаДляЗагрузкиДанных().КоличествоОбъектовНаТранзакцию = 0 Тогда - - ВнешнееСоединение.ЗафиксироватьТранзакцию(); - ВнешнееСоединение.НачатьТранзакцию(); - - КонецЕсли; - - - Иначе - - ОбработкаДляЗагрузкиДанных().ВнешнееСоединениеПроверитьНачалоИФиксациюТранзакцииПриЗагрузкеДанных(); - - КонецЕсли; - - КонецЕсли; - - КонецЦикла; - - Если ОбъектМетаданныхПредыдущий <> Неопределено Тогда - - // {ОБРАБОТЧИК ПослеОбработки ПВД} - Если ПравилоВыгрузкиДанных <> Неопределено - И Не ПустаяСтрока(ПравилоВыгрузкиДанных.ПослеОбработки) Тогда - - Попытка - - Если ОтладкаОбработчиковВыгрузки Тогда - - ВыполнитьОбработчик_ПВД_ПослеОбработкиПравила(ИмяПКО, ПравилоВыгрузкиДанных, ИсходящиеДанные); - - Иначе - - Выполнить(ПравилоВыгрузкиДанных.ПослеОбработки); - - КонецЕсли; - - Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ОписаниеОшибки(), ПравилоВыгрузкиДанных.Имя, "ПослеОбработкиВыгрузкиДанных"); - КонецПопытки; - - КонецЕсли; - // {ОБРАБОТЧИК ПослеОбработки ПВД} - - КонецЕсли; - - Если ЭтоОбменЧерезВнешнееСоединение Тогда - - Если ЗагрузкаДанныхВыполняетсяВоВнешнемСоединении Тогда - - Если ОбработкаДляЗагрузкиДанных().ИспользоватьТранзакции Тогда - - Если ОбработкаДляЗагрузкиДанных().ФлагОшибки() Тогда - - ВнешнееСоединение.ОтменитьТранзакцию(); - - Иначе - - ВнешнееСоединение.ЗафиксироватьТранзакцию(); - - КонецЕсли; - - КонецЕсли; - - Иначе - - ОбработкаДляЗагрузкиДанных().ВнешнееСоединениеЗафиксироватьТранзакциюПриЗагрузкеДанных(); - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -Процедура ЗаписьЖурналаРегистрацииОбменДанными(Комментарий, Уровень = Неопределено) - - Если Уровень = Неопределено Тогда - Уровень = УровеньЖурналаРегистрации.Ошибка; - КонецЕсли; - - ОбъектМетаданных = Неопределено; - - Если УзелОбменаЗагрузкаДанных <> Неопределено - И Не УзелОбменаЗагрузкаДанных.Пустая() Тогда - - ОбъектМетаданных = УзелОбменаЗагрузкаДанных.Метаданные(); - - КонецЕсли; - - ЗаписьЖурналаРегистрации(КлючСообщенияЖурналаРегистрации(), Уровень, ОбъектМетаданных,, Комментарий); - -КонецПроцедуры - -Функция ВыгрузитьИнформациюСопоставленияОбъектов(УзелИнформационнойБазы) - - ТекстЗапроса = " - |ВЫБРАТЬ ПЕРВЫЕ 1 1 - |ИЗ - | РегистрСведений.СоответствияОбъектовИнформационныхБаз.Изменения КАК СоответствияОбъектовИнформационныхБазИзменения - |ГДЕ - | СоответствияОбъектовИнформационныхБазИзменения.Узел = &УзелИнформационнойБазы - |"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелИнформационнойБазы); - - Возврат Не Запрос.Выполнить().Пустой(); - -КонецФункции - -Функция НеобходимоВыполнитьКорректировкуИнформацииСопоставления() - - Возврат РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.НеобходимоВыполнитьКорректировкуИнформацииСопоставления(УзелДляОбмена, УзелДляОбмена.НомерОтправленного + 1); - -КонецФункции - -Процедура УдалитьНедопустимыеЗначенияИзМассиваВыгружаемыхМетаданных(МассивВыгружаемыхМетаданных) - - Если МассивВыгружаемыхМетаданных.Найти(Неопределено) <> Неопределено Тогда - - ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(МассивВыгружаемыхМетаданных, Неопределено); - - УдалитьНедопустимыеЗначенияИзМассиваВыгружаемыхМетаданных(МассивВыгружаемыхМетаданных); - - КонецЕсли; - -КонецПроцедуры - -Процедура ДополнитьМассивВыгружаемыхМетаданныхКонстантами(МассивВыгружаемыхМетаданных) - - Состав = Метаданные.ПланыОбмена[ИмяПланаОбмена()].Состав; - - Для Каждого ОбъектМетаданныхКонстанта Из Метаданные.Константы Цикл - - Если Состав.Содержит(ОбъектМетаданныхКонстанта) Тогда - - МассивВыгружаемыхМетаданных.Добавить(ОбъектМетаданныхКонстанта); - - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРЕДОПРЕДЕЛЕННЫЕ ПРАВИЛА КОНВЕРТАЦИИ - -Процедура ЗагрузитьПравилоКонвертации_РежимыВыгрузкиОбъектовОбмена(ЗаписьXML) - - ТипИсточника = "ПеречислениеСсылка.РежимыВыгрузкиОбъектовОбмена"; - ТипПриемника = "ПеречислениеСсылка.РежимыВыгрузкиОбъектовОбмена"; - - Отбор = Новый Структура; - Отбор.Вставить("ТипИсточника", ТипИсточника); - Отбор.Вставить("ТипПриемника", ТипПриемника); - - Если ТаблицаПравилКонвертации.НайтиСтроки(Отбор).Количество() <> 0 Тогда - Возврат; - КонецЕсли; - - НоваяСтрока = ТаблицаПравилКонвертации.Добавить(); - - НоваяСтрока.ЗапоминатьВыгруженные = Истина; - НоваяСтрока.НеЗамещать = Ложь; - НоваяСтрока.ПриоритетОбъектовОбмена = Перечисления.ПриоритетыОбъектовОбмена.ПриоритетОбъектаОбменаВыше; - - НоваяСтрока.Свойства = ТаблицаПравилКонвертацииСвойств.Скопировать(); - НоваяСтрока.СвойстваПоиска = ТаблицаПравилКонвертацииСвойств.Скопировать(); - НоваяСтрока.СвойстваОтключенные = ТаблицаПравилКонвертацииСвойств.Скопировать(); - - НоваяСтрока.Имя = "РежимыВыгрузкиОбъектовОбмена"; - НоваяСтрока.Источник = Тип(ТипИсточника); - НоваяСтрока.Приемник = ТипПриемника; - НоваяСтрока.ТипИсточника = ТипИсточника; - НоваяСтрока.ТипПриемника = ТипПриемника; - - Значения = Новый Структура; - Значения.Вставить("ВыгружатьВсегда", "ВыгружатьВсегда"); - Значения.Вставить("ВыгружатьПоУсловию", "ВыгружатьПоУсловию"); - Значения.Вставить("ВыгружатьПриНеобходимости", "ВыгружатьПриНеобходимости"); - Значения.Вставить("ВыгружатьВручную", "ВыгружатьВручную"); - Значения.Вставить("НеВыгружать", "НеВыгружать"); - НоваяСтрока.ЗначенияПредопределенныхДанныхПрочитанные = Значения; - - ПоискПоТабличнымЧастям = Новый ТаблицаЗначений; - ПоискПоТабличнымЧастям.Колонки.Добавить("ИмяЭлемента"); - ПоискПоТабличнымЧастям.Колонки.Добавить("МассивКлючевыхПолейПоиска"); - ПоискПоТабличнымЧастям.Колонки.Добавить("КлючевыеПоляПоиска"); - ПоискПоТабличнымЧастям.Колонки.Добавить("Валидное", одОписаниеТипа("Булево")); - НоваяСтрока.ПоискПоТабличнымЧастям = ПоискПоТабличнымЧастям; - - Менеджеры[НоваяСтрока.Источник].ПКО = НоваяСтрока; - - Правила.Вставить(НоваяСтрока.Имя, НоваяСтрока); - - ЗаписьXML.ЗаписатьНачалоЭлемента("Правило"); - одЗаписатьЭлемент(ЗаписьXML, "Код", НоваяСтрока.Имя); - одЗаписатьЭлемент(ЗаписьXML, "Источник", НоваяСтрока.ТипИсточника); - одЗаписатьЭлемент(ЗаписьXML, "Приемник", НоваяСтрока.ТипПриемника); - ЗаписьXML.ЗаписатьКонецЭлемента(); // Правило - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ИНИЦИАЛИЗАЦИЯ ТАБЛИЦ ПРАВИЛ ОБМЕНА +#Область ИнициализацияТаблицПравилОбмена // Инициализирует колонки таблицы правил конвертации свойств объектов. // @@ -15852,8 +13021,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ИНИЦИАЛИЗАЦИЯ РЕКВИЗИТОВ И МОДУЛЬНЫХ ПЕРЕМЕННЫХ +#КонецОбласти + +#Область ИнициализацияРеквизитовИМодульныхПеременных Функция ИнициализацияТаблицыДанныхСообщенияОбмена(ТипОбъекта) @@ -16426,8 +13596,9 @@ Возврат Структура; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ОБРАБОТЧИКОВ +#КонецОбласти + +#Область ПроцедурыОбработчиков Функция ИмяСвойстваПКС(СтрокаТабличнойЧасти) @@ -17440,8 +14611,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// КОНСТАНТЫ +#КонецОбласти + +#Область Константы Функция ВерсияФорматаСообщенияОбмена() @@ -17463,7 +14635,2743 @@ #КонецОбласти -#Область ОператорыОсновнойПрограммы +#Область Прочее + +Процедура ПолучитьЗначенияПредопределенныхДанных(Знач ПКО) + + ПКО.ЗначенияПредопределенныхДанных = Новый Соответствие; + + Для Каждого Элемент Из ПКО.ЗначенияПредопределенныхДанныхПрочитанные Цикл + + ПКО.ЗначенияПредопределенныхДанных.Вставить(одПолучитьЗначениеПоСтроке(Элемент.Ключ, ПКО.Источник), Элемент.Значение); + + КонецЦикла; + +КонецПроцедуры + +Функция ПолучитьПредставлениеКонфигурацииИзПравилОбмена(ИмяОпределения) + + ИмяКонфигурации = ""; + Конвертация.Свойство("СинонимКонфигурации" + ИмяОпределения, ИмяКонфигурации); + + Если Не ЗначениеЗаполнено(ИмяКонфигурации) Тогда + Возврат ""; + КонецЕсли; + + ТочнаяВерсия = ""; + Конвертация.Свойство("ВерсияКонфигурации" + ИмяОпределения, ТочнаяВерсия); + + Если ЗначениеЗаполнено(ТочнаяВерсия) Тогда + + ТочнаяВерсия = ОбщегоНазначенияКлиентСервер.ВерсияКонфигурацииБезНомераСборки(ТочнаяВерсия); + + ИмяКонфигурации = ИмяКонфигурации + " версия " + ТочнаяВерсия; + + КонецЕсли; + + Возврат ИмяКонфигурации; + +КонецФункции + +Процедура ЗаполнитьСвойстваДляПоиска(СтруктураДанных, ПКС) + + Для Каждого СтрокаПолей Из ПКС Цикл + + Если СтрокаПолей.ЭтоГруппа Тогда + + Если СтрокаПолей.ВидПриемника = "ТабличнаяЧасть" + ИЛИ СтрНайти(СтрокаПолей.ВидПриемника, "НаборДвижений") > 0 Тогда + + ИмяСтруктурыПриемника = СтрокаПолей.Приемник + ?(СтрокаПолей.ВидПриемника = "ТабличнаяЧасть", "ТабличнаяЧасть", "НаборЗаписей"); + + ВнутренняяСтруктура = СтруктураДанных[ИмяСтруктурыПриемника]; + + Если ВнутренняяСтруктура = Неопределено Тогда + ВнутренняяСтруктура = Новый Соответствие(); + КонецЕсли; + + СтруктураДанных[ИмяСтруктурыПриемника] = ВнутренняяСтруктура; + + Иначе + + ВнутренняяСтруктура = СтруктураДанных; + + КонецЕсли; + + ЗаполнитьСвойстваДляПоиска(ВнутренняяСтруктура, СтрокаПолей.ПравилаГруппы); + + Иначе + + Если ПустаяСтрока(СтрокаПолей.ТипПриемника) Тогда + + Продолжить; + + КонецЕсли; + + СтруктураДанных[СтрокаПолей.Приемник] = СтрокаПолей.ТипПриемника; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура УдалитьЛишниеЭлементыИзСоответствия(СтруктураДанных) + + Для Каждого Элемент Из СтруктураДанных Цикл + + Если ТипЗнч(Элемент.Значение) = ТипСоответствие Тогда + + УдалитьЛишниеЭлементыИзСоответствия(Элемент.Значение); + + Если Элемент.Значение.Количество() = 0 Тогда + СтруктураДанных.Удалить(Элемент.Ключ); + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ЗаполнитьИнформациюПоТипамДанныхПриемника(СтруктураДанных, Правила) + + Для Каждого Строка Из Правила Цикл + + Если ПустаяСтрока(Строка.Приемник) Тогда + Продолжить; + КонецЕсли; + + ДанныеСтруктуры = СтруктураДанных[Строка.Приемник]; + Если ДанныеСтруктуры = Неопределено Тогда + + ДанныеСтруктуры = Новый Соответствие(); + СтруктураДанных[Строка.Приемник] = ДанныеСтруктуры; + + КонецЕсли; + + // Бежим по полям поиск и прочим ПКС и запоминаем типы данных. + ЗаполнитьСвойстваДляПоиска(ДанныеСтруктуры, Строка.СвойстваПоиска); + + // Свойства + ЗаполнитьСвойстваДляПоиска(ДанныеСтруктуры, Строка.Свойства); + + КонецЦикла; + + УдалитьЛишниеЭлементыИзСоответствия(СтруктураДанных); + +КонецПроцедуры + +Процедура СоздатьСтрокуСТипамиСвойств(ЗаписьXML, ТипыСвойств) + + Если ТипЗнч(ТипыСвойств.Значение) = ТипСоответствие Тогда + + Если ТипыСвойств.Значение.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ЗаписьXML.ЗаписатьНачалоЭлемента(ТипыСвойств.Ключ); + + Для Каждого Элемент Из ТипыСвойств.Значение Цикл + СоздатьСтрокуСТипамиСвойств(ЗаписьXML, Элемент); + КонецЦикла; + + ЗаписьXML.ЗаписатьКонецЭлемента(); + + Иначе + + одЗаписатьЭлемент(ЗаписьXML, ТипыСвойств.Ключ, ТипыСвойств.Значение); + + КонецЕсли; + +КонецПроцедуры + +Функция СоздатьСтрокуСТипамиДляПриемника(СтруктураДанных) + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку(); + ЗаписьXML.ЗаписатьНачалоЭлемента("ИнформацияОТипахДанных"); + + Для Каждого Строка Из СтруктураДанных Цикл + + ЗаписьXML.ЗаписатьНачалоЭлемента("ТипДанных"); + УстановитьАтрибут(ЗаписьXML, "Имя", Строка.Ключ); + + Для Каждого СтрокаПодчинения Из Строка.Значение Цикл + + СоздатьСтрокуСТипамиСвойств(ЗаписьXML, СтрокаПодчинения); + + КонецЦикла; + + ЗаписьXML.ЗаписатьКонецЭлемента(); + + КонецЦикла; + + ЗаписьXML.ЗаписатьКонецЭлемента(); + + СтрокаРезультата = ЗаписьXML.Закрыть(); + Возврат СтрокаРезультата; + +КонецФункции + +Процедура ЗагрузитьОдинТипДанных(ПравилаОбмена, СоответствиеТипа, ИмяЛокальногоЭлемента) + + ИмяУзла = ИмяЛокальногоЭлемента; + + ПравилаОбмена.Прочитать(); + + Если (ПравилаОбмена.ТипУзла = ТипУзлаXMLКонецЭлемента) Тогда + + ПравилаОбмена.Прочитать(); + Возврат; + + ИначеЕсли ПравилаОбмена.ТипУзла = ТипУзлаXMLНачалоЭлемента Тогда + + // это новый элемент + НовоеСоответствие = Новый Соответствие; + СоответствиеТипа.Вставить(ИмяУзла, НовоеСоответствие); + + ЗагрузитьОдинТипДанных(ПравилаОбмена, НовоеСоответствие, ПравилаОбмена.ЛокальноеИмя); + ПравилаОбмена.Прочитать(); + + Иначе + СоответствиеТипа.Вставить(ИмяУзла, Тип(ПравилаОбмена.Значение)); + ПравилаОбмена.Прочитать(); + КонецЕсли; + + ЗагрузитьСоответствиеТиповДляОдногоТипа(ПравилаОбмена, СоответствиеТипа); + +КонецПроцедуры + +Процедура ЗагрузитьСоответствиеТиповДляОдногоТипа(ПравилаОбмена, СоответствиеТипа) + + Пока ПравилаОбмена.Прочитать() Цикл + + ИмяУзла = ПравилаОбмена.ЛокальноеИмя; + + Если (ПравилаОбмена.ТипУзла = ТипУзлаXMLКонецЭлемента) Тогда + + Прервать; + + КонецЕсли; + + // прочитали начало элемента + ПравилаОбмена.Прочитать(); + + Если ПравилаОбмена.ТипУзла = ТипУзлаXMLНачалоЭлемента Тогда + + // это новый элемент + НовоеСоответствие = Новый Соответствие; + СоответствиеТипа.Вставить(ИмяУзла, НовоеСоответствие); + + ЗагрузитьОдинТипДанных(ПравилаОбмена, НовоеСоответствие, ПравилаОбмена.ЛокальноеИмя); + + Иначе + СоответствиеТипа.Вставить(ИмяУзла, Тип(ПравилаОбмена.Значение)); + ПравилаОбмена.Прочитать(); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ЗагрузитьИнформациюОТипахДанных() + + Пока ФайлОбмена.Прочитать() Цикл + + ИмяУзла = ФайлОбмена.ЛокальноеИмя; + + Если ИмяУзла = "ТипДанных" Тогда + + ИмяТипа = одАтрибут(ФайлОбмена, ТипСтрока, "Имя"); + + СоответствиеТипа = Новый Соответствие; + СоответствиеТиповДанныхДляЗагрузки().Вставить(Тип(ИмяТипа), СоответствиеТипа); + + ЗагрузитьСоответствиеТиповДляОдногоТипа(ФайлОбмена, СоответствиеТипа); + + ИначеЕсли (ИмяУзла = "ИнформацияОТипахДанных") И (ФайлОбмена.ТипУзла = ТипУзлаXMLКонецЭлемента) Тогда + + Прервать; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ЗагрузитьЗначенияПараметровОбменаДанными() + + Имя = одАтрибут(ФайлОбмена, ТипСтрока, "Имя"); + + ТипСвойства = ПолучитьТипСвойстваПоДополнительнымДанным(Неопределено, Имя); + + Значение = ПрочитатьСвойство(ТипСвойства); + + Параметры.Вставить(Имя, Значение); + + АлгоритмПослеЗагрузкиПараметра = ""; + Если СобытияПослеЗагрузкиПараметров.Свойство(Имя, АлгоритмПослеЗагрузкиПараметра) + И Не ПустаяСтрока(АлгоритмПослеЗагрузкиПараметра) Тогда + + Если ОтладкаОбработчиковЗагрузки Тогда + + ВыполнитьОбработчик_Параметры_ПослеЗагрузкиПараметра(Имя, Значение); + + Иначе + + Выполнить(АлгоритмПослеЗагрузкиПараметра); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Процедура ЗагрузитьИнформациюОПользовательскихПоляхПоиска() + + ИмяПравила = ""; + НастройкаПоиска = ""; + + Пока ФайлОбмена.Прочитать() Цикл + + ИмяУзла = ФайлОбмена.ЛокальноеИмя; + + Если ИмяУзла = "ИмяПравила" Тогда + + ИмяПравила = одЗначениеЭлемента(ФайлОбмена, ТипСтрока); + + ИначеЕсли ИмяУзла = "НастройкаПоиска" Тогда + + НастройкаПоиска = одЗначениеЭлемента(ФайлОбмена, ТипСтрока); + ИнформацияОПользовательскихПоляхПоискаПриЗагрузкеДанных.Вставить(ИмяПравила, НастройкаПоиска); + + ИначеЕсли (ИмяУзла = "НастройкаПользовательскогоПоиска") И (ФайлОбмена.ТипУзла = ТипУзлаXMLКонецЭлемента) Тогда + + Прервать; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Осуществляет загрузку правил обмена в соответствии с форматом. +// +// Параметры: +// Источник - Объект, из которого осуществляется загрузка правил обмена; +// ТипИсточника - Строка, указывающая тип источника: "XMLФайл", "ЧтениеXML", "Строка". +// +Процедура ЗагрузитьПравилаОбмена(Источник="", + ТипИсточника="XMLФайл", + СтрокаСообщенияОбОшибке = "", + ЗагружатьТолькоЗаголовокПравил = Ложь) Экспорт + + ИнициализироватьМенеджерыИСообщения(); + + ЕстьГлобальныйОбработчикПередВыгрузкойОбъекта = Ложь; + ЕстьГлобальныйОбработчикПослеВыгрузкиОбъекта = Ложь; + + ЕстьГлобальныйОбработчикПередКонвертациейОбъекта = Ложь; + + ЕстьГлобальныйОбработчикПередЗагрузкойОбъекта = Ложь; + ЕстьГлобальныйОбработчикПослеЗагрузкиОбъекта = Ложь; + + СоздатьСтруктуруКонвертации(); + + ТаблицаПравилКонвертацииСвойств = Новый ТаблицаЗначений; + ИнициализацияТаблицыПравилКонвертацииСвойств(ТаблицаПравилКонвертацииСвойств); + + // Возможно выбраны встроенные правила обмена (один из макетов). + + ИмяВременногоФайлаПравилОбмена = ""; + Если ПустаяСтрока(Источник) Тогда + + Источник = ИмяФайлаПравилОбмена; + + КонецЕсли; + + Если ТипИсточника="XMLФайл" Тогда + + Если ПустаяСтрока(Источник) Тогда + СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(12); + Возврат; + КонецЕсли; + + Файл = Новый Файл(Источник); + Если Не Файл.Существует() Тогда + СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(3); + Возврат; + КонецЕсли; + + ПравилаОбмена = Новый ЧтениеXML(); + ПравилаОбмена.ОткрытьФайл(Источник); + ПравилаОбмена.Прочитать(); + + ИначеЕсли ТипИсточника="Строка" Тогда + + ПравилаОбмена = Новый ЧтениеXML(); + ПравилаОбмена.УстановитьСтроку(Источник); + ПравилаОбмена.Прочитать(); + + ИначеЕсли ТипИсточника="ЧтениеXML" Тогда + + ПравилаОбмена = Источник; + + КонецЕсли; + + Если Не ((ПравилаОбмена.ЛокальноеИмя = "ПравилаОбмена") И (ПравилаОбмена.ТипУзла = ТипУзлаXMLНачалоЭлемента)) Тогда + СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(7); + Возврат; + КонецЕсли; + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку(); + ЗаписьXML.ЗаписатьНачалоЭлемента("ПравилаОбмена"); + + Пока ПравилаОбмена.Прочитать() Цикл + + ИмяУзла = ПравилаОбмена.ЛокальноеИмя; + + // Реквизиты конвертации + Если ИмяУзла = "ВерсияФормата" Тогда + Значение = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); + Конвертация.Вставить("ВерсияФормата", Значение); + + ЗаписьXML.ЗаписатьНачалоЭлемента("ВерсияФормата"); + Стр = XMLСтрока(Значение); + + ЗаписьXML.ЗаписатьТекст(Стр); + ЗаписьXML.ЗаписатьКонецЭлемента(); + + ИначеЕсли ИмяУзла = "Ид" Тогда + Значение = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); + Конвертация.Вставить("Ид", Значение); + одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Значение); + ИначеЕсли ИмяУзла = "Наименование" Тогда + Значение = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); + Конвертация.Вставить("Наименование", Значение); + одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Значение); + ИначеЕсли ИмяУзла = "ДатаВремяСоздания" Тогда + Значение = одЗначениеЭлемента(ПравилаОбмена, ТипДата); + Конвертация.Вставить("ДатаВремяСоздания", Значение); + одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Значение); + ИначеЕсли ИмяУзла = "Источник" Тогда + + ВерсияПлатформыИсточника = ПравилаОбмена.ПолучитьАтрибут ("ВерсияПлатформы"); + СинонимКонфигурацииИсточника = ПравилаОбмена.ПолучитьАтрибут ("СинонимКонфигурации"); + ВерсияКонфигурацииИсточника = ПравилаОбмена.ПолучитьАтрибут ("ВерсияКонфигурации"); + + Конвертация.Вставить("ВерсияПлатформыИсточника", ВерсияПлатформыИсточника); + Конвертация.Вставить("СинонимКонфигурацииИсточника", СинонимКонфигурацииИсточника); + Конвертация.Вставить("ВерсияКонфигурацииИсточника", ВерсияКонфигурацииИсточника); + + Значение = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); + Конвертация.Вставить("Источник", Значение); + одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Значение); + + ИначеЕсли ИмяУзла = "Приемник" Тогда + + ВерсияПлатформыПриемника = ПравилаОбмена.ПолучитьАтрибут ("ВерсияПлатформы"); + СинонимКонфигурацииПриемника = ПравилаОбмена.ПолучитьАтрибут ("СинонимКонфигурации"); + ВерсияКонфигурацииПриемника = ПравилаОбмена.ПолучитьАтрибут ("ВерсияКонфигурации"); + + Конвертация.Вставить("ВерсияПлатформыПриемника", ВерсияПлатформыПриемника); + Конвертация.Вставить("СинонимКонфигурацииПриемника", СинонимКонфигурацииПриемника); + Конвертация.Вставить("ВерсияКонфигурацииПриемника", ВерсияКонфигурацииПриемника); + + Значение = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); + Конвертация.Вставить("Приемник", Значение); + одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Значение); + + Если ЗагружатьТолькоЗаголовокПравил Тогда + Возврат; + КонецЕсли; + + ИначеЕсли ИмяУзла = "РежимСовместимости" Тогда + // Поддержка обратной совместимости. + одПропустить(ПравилаОбмена); + + ИначеЕсли ИмяУзла = "Комментарий" Тогда + одПропустить(ПравилаОбмена); + + ИначеЕсли ИмяУзла = "ОсновнойПланОбмена" Тогда + одПропустить(ПравилаОбмена); + + ИначеЕсли ИмяУзла = "Параметры" Тогда + ЗагрузитьПараметры(ПравилаОбмена, ЗаписьXML) + + // События конвертации + + ИначеЕсли ИмяУзла = "" Тогда + + ИначеЕсли ИмяУзла = "ПослеЗагрузкиПравилОбмена" Тогда + Конвертация.Вставить("ПослеЗагрузкиПравилОбмена", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); + Конвертация.Вставить("ИмяОбработчикаПослеЗагрузкиПравилОбмена","Конвертация_ПослеЗагрузкиПравилОбмена"); + + ИначеЕсли ИмяУзла = "ПередВыгрузкойДанных" Тогда + Конвертация.Вставить("ПередВыгрузкойДанных", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); + Конвертация.Вставить("ИмяОбработчикаПередВыгрузкойДанных","Конвертация_ПередВыгрузкойДанных"); + + ИначеЕсли ИмяУзла = "ПередПолучениемИзмененныхОбъектов" Тогда + Конвертация.Вставить("ПередПолучениемИзмененныхОбъектов", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); + Конвертация.Вставить("ИмяОбработчикаПередПолучениемИзмененныхОбъектов","Конвертация_ПередПолучениемИзмененныхОбъектов"); + + ИначеЕсли ИмяУзла = "ПослеПолученияИнформацииОбУзлахОбмена" Тогда + + Конвертация.Вставить("ПослеПолученияИнформацииОбУзлахОбмена", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); + Конвертация.Вставить("ИмяОбработчикаПослеПолученияИнформацииОбУзлахОбмена","Конвертация_ПослеПолученияИнформацииОбУзлахОбмена"); + одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Конвертация.ПослеПолученияИнформацииОбУзлахОбмена); + + ИначеЕсли ИмяУзла = "ПослеВыгрузкиДанных" Тогда + Конвертация.Вставить("ПослеВыгрузкиДанных", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); + Конвертация.Вставить("ИмяОбработчикаПослеВыгрузкиДанных","Конвертация_ПослеВыгрузкиДанных"); + + ИначеЕсли ИмяУзла = "ПередОтправкойИнформацииОбУдалении" Тогда + Конвертация.Вставить("ПередОтправкойИнформацииОбУдалении", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); + Конвертация.Вставить("ИмяОбработчикаПередОтправкойИнформацииОбУдалении","Конвертация_ПередОтправкойИнформацииОбУдалении"); + + ИначеЕсли ИмяУзла = "ПередВыгрузкойОбъекта" Тогда + Конвертация.Вставить("ПередВыгрузкойОбъекта", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); + Конвертация.Вставить("ИмяОбработчикаПередВыгрузкойОбъекта","Конвертация_ПередВыгрузкойОбъекта"); + ЕстьГлобальныйОбработчикПередВыгрузкойОбъекта = Не ПустаяСтрока(Конвертация.ПередВыгрузкойОбъекта); + + ИначеЕсли ИмяУзла = "ПослеВыгрузкиОбъекта" Тогда + Конвертация.Вставить("ПослеВыгрузкиОбъекта", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); + Конвертация.Вставить("ИмяОбработчикаПослеВыгрузкиОбъекта","Конвертация_ПослеВыгрузкиОбъекта"); + ЕстьГлобальныйОбработчикПослеВыгрузкиОбъекта = Не ПустаяСтрока(Конвертация.ПослеВыгрузкиОбъекта); + + ИначеЕсли ИмяУзла = "ПередЗагрузкойОбъекта" Тогда + Конвертация.Вставить("ПередЗагрузкойОбъекта", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); + Конвертация.Вставить("ИмяОбработчикаПередЗагрузкойОбъекта","Конвертация_ПередЗагрузкойОбъекта"); + ЕстьГлобальныйОбработчикПередЗагрузкойОбъекта = Не ПустаяСтрока(Конвертация.ПередЗагрузкойОбъекта); + одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Конвертация.ПередЗагрузкойОбъекта); + + ИначеЕсли ИмяУзла = "ПослеЗагрузкиОбъекта" Тогда + Конвертация.Вставить("ПослеЗагрузкиОбъекта", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); + Конвертация.Вставить("ИмяОбработчикаПослеЗагрузкиОбъекта","Конвертация_ПослеЗагрузкиОбъекта"); + ЕстьГлобальныйОбработчикПослеЗагрузкиОбъекта = Не ПустаяСтрока(Конвертация.ПослеЗагрузкиОбъекта); + одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Конвертация.ПослеЗагрузкиОбъекта); + + ИначеЕсли ИмяУзла = "ПередКонвертациейОбъекта" Тогда + Конвертация.Вставить("ПередКонвертациейОбъекта", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); + Конвертация.Вставить("ИмяОбработчикаПередКонвертациейОбъекта","Конвертация_ПередКонвертациейОбъекта"); + ЕстьГлобальныйОбработчикПередКонвертациейОбъекта = Не ПустаяСтрока(Конвертация.ПередКонвертациейОбъекта); + + ИначеЕсли ИмяУзла = "ПередЗагрузкойДанных" Тогда + Конвертация.ПередЗагрузкойДанных = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); + Конвертация.Вставить("ИмяОбработчикаПередЗагрузкойДанных","Конвертация_ПередЗагрузкойДанных"); + одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Конвертация.ПередЗагрузкойДанных); + + ИначеЕсли ИмяУзла = "ПослеЗагрузкиДанных" Тогда + Конвертация.ПослеЗагрузкиДанных = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); + Конвертация.Вставить("ИмяОбработчикаПослеЗагрузкиДанных","Конвертация_ПослеЗагрузкиДанных"); + одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Конвертация.ПослеЗагрузкиДанных); + + ИначеЕсли ИмяУзла = "ПослеЗагрузкиПараметров" Тогда + Конвертация.Вставить("ПослеЗагрузкиПараметров", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); + Конвертация.Вставить("ИмяОбработчикаПослеЗагрузкиПараметров","Конвертация_ПослеЗагрузкиПараметров"); + одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Конвертация.ПослеЗагрузкиПараметров); + + ИначеЕсли ИмяУзла = "ПриПолученииИнформацииОбУдалении" Тогда + Конвертация.Вставить("ПриПолученииИнформацииОбУдалении", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); + Конвертация.Вставить("ИмяОбработчикаПриПолученииИнформацииОбУдалении","Конвертация_ПриПолученииИнформацииОбУдалении"); + одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Конвертация.ПриПолученииИнформацииОбУдалении); + + ИначеЕсли ИмяУзла = "УдалятьСопоставленныеОбъектыВПриемникеПриИхУдаленииВИсточнике" Тогда + Конвертация.УдалятьСопоставленныеОбъектыВПриемникеПриИхУдаленииВИсточнике = одЗначениеЭлемента(ПравилаОбмена, ТипБулево); + + // Правила + + ИначеЕсли ИмяУзла = "ПравилаВыгрузкиДанных" Тогда + Если РежимОбмена = "Загрузка" Тогда + одПропустить(ПравилаОбмена); + Иначе + ЗагрузитьПравилаВыгрузки(ПравилаОбмена); + КонецЕсли; + + ИначеЕсли ИмяУзла = "ПравилаКонвертацииОбъектов" Тогда + ЗагрузитьПравилаКонвертации(ПравилаОбмена, ЗаписьXML); + + ИначеЕсли ИмяУзла = "ПравилаОчисткиДанных" Тогда + ЗагрузитьПравилаОчистки(ПравилаОбмена, ЗаписьXML) + + ИначеЕсли ИмяУзла = "ПравилаРегистрацииОбъектов" Тогда + одПропустить(ПравилаОбмена); + + // Алгоритмы / Запросы / Обработки + + ИначеЕсли ИмяУзла = "Алгоритмы" Тогда + ЗагрузитьАлгоритмы(ПравилаОбмена, ЗаписьXML); + + ИначеЕсли ИмяУзла = "Запросы" Тогда + ЗагрузитьЗапросы(ПравилаОбмена, ЗаписьXML); + + ИначеЕсли ИмяУзла = "Обработки" Тогда + ЗагрузитьОбработки(ПравилаОбмена, ЗаписьXML); + + // Выход + ИначеЕсли (ИмяУзла = "ПравилаОбмена") И (ПравилаОбмена.ТипУзла = ТипУзлаXMLКонецЭлемента) Тогда + Если РежимОбмена <> "Загрузка" Тогда + ПравилаОбмена.Закрыть(); + КонецЕсли; + Прервать; + + + // Ошибка формата + Иначе + СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(7); + Возврат; + КонецЕсли; + КонецЦикла; + + ЗаписьXML.ЗаписатьКонецЭлемента(); + XMLПравила = ЗаписьXML.Закрыть(); + + // Удаляем временный файл правил. + Если Не ПустаяСтрока(ИмяВременногоФайлаПравилОбмена) Тогда + Попытка + УдалитьФайлы(ИмяВременногоФайлаПравилОбмена); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + КонецЕсли; + + Если ЗагружатьТолькоЗаголовокПравил Тогда + Возврат; + КонецЕсли; + + // Дополнительно нужна информация по типам данных приемника для быстрой загрузки данных. + СтруктураДанных = Новый Соответствие(); + ЗаполнитьИнформациюПоТипамДанныхПриемника(СтруктураДанных, ТаблицаПравилКонвертации); + + СтрокаТиповДляПриемника = СоздатьСтрокуСТипамиДляПриемника(СтруктураДанных); + + ИмяПрофиляБезопасности = ИнициализироватьОбработки(); + + Если ИмяПрофиляБезопасности <> Неопределено Тогда + УстановитьБезопасныйРежим(ИмяПрофиляБезопасности); + КонецЕсли; + + // Нужно вызвать событие после загрузки правил обмена. + ТекстСобытияПослеЗагрузкиПравилОбмена = ""; + Если РежимОбмена <> "Загрузка" И Конвертация.Свойство("ПослеЗагрузкиПравилОбмена", ТекстСобытияПослеЗагрузкиПравилОбмена) + И Не ПустаяСтрока(ТекстСобытияПослеЗагрузкиПравилОбмена) Тогда + + Попытка + + Если ОтладкаОбработчиковВыгрузки Тогда + + ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиПравилОбмена(); + + Иначе + + Выполнить(ТекстСобытияПослеЗагрузкиПравилОбмена); + + КонецЕсли; + + Исключение + СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(75, ОписаниеОшибки(), НСтр("ru = 'ПослеЗагрузкиПравилОбмена (конвертация)'")); + Отказ = Истина; + + Если Не ПродолжитьПриОшибке Тогда + ВызватьИсключение СтрокаСообщенияОбОшибке; + КонецЕсли; + + КонецПопытки; + + КонецЕсли; + + ИнициализироватьПервоначальныеЗначенияПараметров(); + +КонецПроцедуры + +Процедура ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки = Неопределено) + + УвеличитьСчетчикЗагруженныхОбъектов(); + + Если СчетчикЗагруженныхОбъектов() % 100 = 0 + И ГлобальныйСтекНеЗаписанныхОбъектов.Количество() > 100 Тогда + + ПровестиЗаписьНеЗаписанныхОбъектов(); + + КонецЕсли; + + // При загрузке в режиме внешнего соединения управление транзакциями выполняется из управляющего приложения. + Если Не ЗагрузкаДанныхВыполняетсяЧерезВнешнееСоединение Тогда + + Если ИспользоватьТранзакции + И КоличествоОбъектовНаТранзакцию > 0 + И СчетчикЗагруженныхОбъектов() % КоличествоОбъектовНаТранзакцию = 0 Тогда + + ЗафиксироватьТранзакцию(); + НачатьТранзакцию(); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Процедура УдалитьОбъектПоСсылке(Ссылка, СтрокаСообщенияОбОшибке) + + Объект = Ссылка.ПолучитьОбъект(); + + Если Объект = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ОбменДаннымиСобытия.ЗагрузкаЗапрещена(Объект, УзелОбменаЗагрузкаДанныхОбъект) Тогда + Возврат; + КонецЕсли; + + УстановитьОбменДаннымиЗагрузка(Объект); + + Если Не ПустаяСтрока(Конвертация.ПриПолученииИнформацииОбУдалении) Тогда + + Отказ = Ложь; + + Попытка + + Если ОтладкаОбработчиковЗагрузки Тогда + + ВыполнитьОбработчик_Конвертация_ПриПолученииИнформацииОбУдалении(Объект, Отказ); + + Иначе + + Выполнить(Конвертация.ПриПолученииИнформацииОбУдалении); + + КонецЕсли; + + Исключение + СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(77, ОписаниеОшибки(), НСтр("ru = 'ПриПолученииИнформацииОбУдалении (конвертация)'")); + Отказ = Истина; + + Если Не ПродолжитьПриОшибке Тогда + ВызватьИсключение СтрокаСообщенияОбОшибке; + КонецЕсли; + + КонецПопытки; + + Если Отказ Тогда + Возврат; + КонецЕсли; + + КонецЕсли; + + УдалитьОбъект(Объект, Истина); + +КонецПроцедуры + +Процедура ПрочитатьУдалениеОбъекта(СтрокаСообщенияОбОшибке) + + ТипИсточникаСтрокой = одАтрибут(ФайлОбмена, ТипСтрока, "ТипПриемника"); + ТипПриемникаСтрокой = одАтрибут(ФайлОбмена, ТипСтрока, "ТипИсточника"); + + УникальныйИдентификаторСтрокой = одАтрибут(ФайлОбмена, ТипСтрока, "УникальныйИдентификатор"); + + ВыполнитьЗаменуУникальногоИдентификатораПриНеобходимости(УникальныйИдентификаторСтрокой, ТипИсточникаСтрокой, ТипПриемникаСтрокой, Истина); + + СтруктураСвойств = Менеджеры[Тип(ТипИсточникаСтрокой)]; + + Ссылка = СтруктураСвойств.Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор(УникальныйИдентификаторСтрокой)); + + УдалитьОбъектПоСсылке(Ссылка, СтрокаСообщенияОбОшибке); + +КонецПроцедуры + +Процедура ВыполнитьВыборочноеЧтениеСообщения(ТаблицыДляЗагрузки) + + Если ТаблицыДляЗагрузки.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ЧтениеСообщения = Неопределено; + Попытка + + УстановитьФлагОшибки(Ложь); + + ИнициализироватьКомментарииПриВыгрузкеИЗагрузкеДанных(); + + ИнформацияОПользовательскихПоляхПоискаПриЗагрузкеДанных = Новый Соответствие; + СоответствиеДопПараметровПоиска = Новый Соответствие; + СоответствиеПравилКонвертации = Новый Соответствие; + + // Инициализируем ведение протокола обмена. + ИнициализироватьВедениеПротоколаОбмена(); + + Если КоличествоОбработанныхОбъектовДляОбновленияСтатуса = 0 Тогда + КоличествоОбработанныхОбъектовДляОбновленияСтатуса = 100; + КонецЕсли; + + ГлобальныйСтекНеЗаписанныхОбъектов = Новый Соответствие; + + ПолеСчетчикЗагруженныхОбъектов = Неопределено; + НомерПоследнегоПоискаПоСсылке = 0; + + ИнициализироватьМенеджерыИСообщения(); + + НачатьЧтениеСообщения(ЧтениеСообщения, Истина); + + Если ИспользоватьТранзакции Тогда + НачатьТранзакцию(); + КонецЕсли; + Попытка + + ПроизвестиЧтениеДанныхДляТаблиц(ТаблицыДляЗагрузки); + + Если ФлагОшибки() Тогда + ВызватьИсключение НСтр("ru = 'Возникли ошибки при загрузке данных.'"); + КонецЕсли; + + // Отложенная запись того, что не записали. + ПровестиЗаписьНеЗаписанныхОбъектов(); + + ВыполнитьОбработчикПослеЗагрузкиДанных(); + + Если ФлагОшибки() Тогда + ВызватьИсключение НСтр("ru = 'Возникли ошибки при загрузке данных.'"); + КонецЕсли; + + Если ИспользоватьТранзакции Тогда + ЗафиксироватьТранзакцию(); + КонецЕсли; + Исключение + Если ИспользоватьТранзакции Тогда + ОтменитьТранзакцию(); + КонецЕсли; + ПрерватьЧтениеСообщения(ЧтениеСообщения); + ВызватьИсключение; + КонецПопытки; + + // Выполняем проведение документов в очереди. + ВыполнитьОтложенноеПроведениеДокументов(); + ВыполнитьОтложеннуюЗаписьОбъектов(); + + ЗакончитьЧтениеСообщения(ЧтениеСообщения); + + Исключение + Если ЧтениеСообщения <> Неопределено + И ЧтениеСообщения.СообщениеБылоПринятоРанее Тогда + ЗаписатьВПротоколВыполнения(174,,,,,, + Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято); + Иначе + ЗаписатьВПротоколВыполнения(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецЕсли; + КонецПопытки; + + ЗавершитьВедениеПротоколаОбмена(); + +КонецПроцедуры + +Процедура ПроизвестиЧтениеДанных(ЧтениеСообщения) + + СтрокаСообщенияОбОшибке = ""; + + Пока ФайлОбмена.Прочитать() Цикл + + ИмяУзла = ФайлОбмена.ЛокальноеИмя; + + Если ИмяУзла = "Объект" Тогда + + ОбменДаннымиСервер.РассчитатьПроцентЗагрузки(СчетчикЗагруженныхОбъектов(), КоличествоОбъектовКЗагрузке, РазмерФайлаСообщенияОбмена); + ПоследнийОбъектЗагрузки = ПрочитатьОбъект(); + + ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки); + + ИначеЕсли ИмяУзла = "НаборЗаписейРегистра" Тогда + + // набор записей регистра + ПоследнийОбъектЗагрузки = ПрочитатьНаборЗаписейРегистра(); + + ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки); + + ИначеЕсли ИмяУзла = "УдалениеОбъекта" Тогда + + // Обработка удаления объекта из информационной базы. + ПрочитатьУдалениеОбъекта(СтрокаСообщенияОбОшибке); + + одПропустить(ФайлОбмена, "УдалениеОбъекта"); + + ОбработатьОкончаниеЧтенияНовогоЭлемента(); + + ИначеЕсли ИмяУзла = "ИнформацияОРегистрацииОбъекта" Тогда + + ЕстьИнформацияОРегистрацииОбъекта = Истина; + + ПоследнийОбъектЗагрузки = ПрочитатьИнформациюОРегистрацииОбъекта(); + + ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки); + + ИначеЕсли ИмяУзла = "КорректировкаИнформацииОРегистрацииОбъекта" Тогда + + ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Истина; + + ПрочитатьКорректировкуИнформацииСопоставления(); + + одПропустить(ФайлОбмена, ИмяУзла); + + ИначеЕсли ИмяУзла = "ОбщиеДанныеУзлов" Тогда + + ПрочитатьОбщиеДанныеУзлов(ЧтениеСообщения); + + одПропустить(ФайлОбмена, ИмяУзла); + + ИначеЕсли (ИмяУзла = "ФайлОбмена") И (ФайлОбмена.ТипУзла = ТипУзлаXMLКонецЭлемента) Тогда + + Прервать; // выходим + + Иначе + + ВызватьИсключение НСтр("ru = 'Ошибка формата сообщения обмена.'"); + + КонецЕсли; + + // Прерываем цикл чтения файла в случае возникновения ошибки загрузки. + Если ФлагОшибки() Тогда + ВызватьИсключение НСтр("ru = 'Возникли ошибки при загрузке данных.'"); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ПроизвестиЧтениеДанныхДляТаблиц(ТаблицыДляЗагрузки) + + Пока ФайлОбмена.Прочитать() Цикл + + ИмяУзла = ФайлОбмена.ЛокальноеИмя; + + Если ИмяУзла = "Объект" Тогда + + ТипОбъектаСтрокой = одАтрибут(ФайлОбмена, ТипСтрока, "Тип"); + + Если ТипОбъектаСтрокой = "КонстантыНабор" Тогда + + ИмяКонстанты = одАтрибут(ФайлОбмена, ТипСтрока, "ИмяКонстанты"); + + ТипИсточникаСтрокой = ИмяКонстанты; + ТипПриемникаСтрокой = ИмяКонстанты; + + Иначе + + ИмяПравила = одАтрибут(ФайлОбмена, ТипСтрока, "ИмяПравила"); + + ПКО = Правила[ИмяПравила]; + + ТипИсточникаСтрокой = ПКО.ТипИсточника; + ТипПриемникаСтрокой = ПКО.ТипПриемника; + + КонецЕсли; + + КлючТаблицыДанных = ОбменДаннымиСервер.КлючТаблицыДанных(ТипИсточникаСтрокой, ТипПриемникаСтрокой, Ложь); + + Если ТаблицыДляЗагрузки.Найти(КлючТаблицыДанных) <> Неопределено Тогда + + Если РежимЗагрузкиДанныхВИнформационнуюБазу() Тогда // Загрузка в информационную базу. + + ОбработатьОкончаниеЧтенияНовогоЭлемента(ПрочитатьОбъект()); + + Иначе // Загрузка в таблицу значений. + + УникальныйИдентификаторСтрокой = ""; + + ПоследнийОбъектЗагрузки = ПрочитатьОбъект(УникальныйИдентификаторСтрокой); + + Если ПоследнийОбъектЗагрузки <> Неопределено Тогда + + ТаблицаДанныхСообщенияОбмена = ТаблицыДанныхСообщенияОбмена().Получить(КлючТаблицыДанных); + + СтрокаТаблицы = ТаблицаДанныхСообщенияОбмена.Найти(УникальныйИдентификаторСтрокой, ИмяКолонкиУникальныйИдентификатор()); + + Если СтрокаТаблицы = Неопределено Тогда + + УвеличитьСчетчикЗагруженныхОбъектов(); + + СтрокаТаблицы = ТаблицаДанныхСообщенияОбмена.Добавить(); + + СтрокаТаблицы[ИмяКолонкиТипСтрокой()] = ТипПриемникаСтрокой; + СтрокаТаблицы["Ссылка"] = ПоследнийОбъектЗагрузки.Ссылка; + СтрокаТаблицы[ИмяКолонкиУникальныйИдентификатор()] = УникальныйИдентификаторСтрокой; + + КонецЕсли; + + // Заполняем значения свойств объекта. + ЗаполнитьЗначенияСвойств(СтрокаТаблицы, ПоследнийОбъектЗагрузки); + + КонецЕсли; + + КонецЕсли; + + Иначе + + одПропустить(ФайлОбмена, ИмяУзла); + + КонецЕсли; + + ИначеЕсли ИмяУзла = "НаборЗаписейРегистра" Тогда + + Если РежимЗагрузкиДанныхВИнформационнуюБазу() Тогда + + ИмяПравила = одАтрибут(ФайлОбмена, ТипСтрока, "ИмяПравила"); + + ПКО = Правила[ИмяПравила]; + + ТипИсточникаСтрокой = ПКО.ТипИсточника; + ТипПриемникаСтрокой = ПКО.ТипПриемника; + + КлючТаблицыДанных = ОбменДаннымиСервер.КлючТаблицыДанных(ТипИсточникаСтрокой, ТипПриемникаСтрокой, Ложь); + + Если ТаблицыДляЗагрузки.Найти(КлючТаблицыДанных) <> Неопределено Тогда + + ОбработатьОкончаниеЧтенияНовогоЭлемента(ПрочитатьНаборЗаписейРегистра()); + + Иначе + + одПропустить(ФайлОбмена, ИмяУзла); + + КонецЕсли; + + Иначе + + одПропустить(ФайлОбмена, ИмяУзла); + + КонецЕсли; + + ИначеЕсли ИмяУзла = "УдалениеОбъекта" Тогда + + ТипПриемникаСтрокой = одАтрибут(ФайлОбмена, ТипСтрока, "ТипПриемника"); + ТипИсточникаСтрокой = одАтрибут(ФайлОбмена, ТипСтрока, "ТипИсточника"); + + КлючТаблицыДанных = ОбменДаннымиСервер.КлючТаблицыДанных(ТипИсточникаСтрокой, ТипПриемникаСтрокой, Истина); + + Если ТаблицыДляЗагрузки.Найти(КлючТаблицыДанных) <> Неопределено Тогда + + Если РежимЗагрузкиДанныхВИнформационнуюБазу() Тогда // Загрузка в информационную базу. + + // Обработка удаления объекта из информационной базы. + ПрочитатьУдалениеОбъекта(""); + + ОбработатьОкончаниеЧтенияНовогоЭлемента(); + + Иначе // Загрузка в таблицу значений. + + УникальныйИдентификаторСтрокой = одАтрибут(ФайлОбмена, ТипСтрока, "УникальныйИдентификатор"); + + // Добавляем удаление объекта в таблицу данных сообщения. + ТаблицаДанныхСообщенияОбмена = ТаблицыДанныхСообщенияОбмена().Получить(КлючТаблицыДанных); + + СтрокаТаблицы = ТаблицаДанныхСообщенияОбмена.Найти(УникальныйИдентификаторСтрокой, ИмяКолонкиУникальныйИдентификатор()); + + Если СтрокаТаблицы = Неопределено Тогда + + УвеличитьСчетчикЗагруженныхОбъектов(); + + СтрокаТаблицы = ТаблицаДанныхСообщенияОбмена.Добавить(); + + // Заполняем значения всех полей таблицы значением по умолчанию. + Для Каждого Колонка Из ТаблицаДанныхСообщенияОбмена.Колонки Цикл + + // фильтр + Если Колонка.Имя = ИмяКолонкиТипСтрокой() + ИЛИ Колонка.Имя = ИмяКолонкиУникальныйИдентификатор() + ИЛИ Колонка.Имя = "Ссылка" Тогда + Продолжить; + КонецЕсли; + + Если Колонка.ТипЗначения.СодержитТип(ТипСтрока) Тогда + + СтрокаТаблицы[Колонка.Имя] = НСтр("ru = 'Удаление объекта'"); + + КонецЕсли; + + КонецЦикла; + + СтруктураСвойств = Менеджеры[Тип(ТипПриемникаСтрокой)]; + + СсылкаНаУдаляемыйОбъект = СтруктураСвойств.Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор(УникальныйИдентификаторСтрокой)); + + СтрокаТаблицы[ИмяКолонкиТипСтрокой()] = ТипПриемникаСтрокой; + СтрокаТаблицы["Ссылка"] = СсылкаНаУдаляемыйОбъект; + СтрокаТаблицы[ИмяКолонкиУникальныйИдентификатор()] = УникальныйИдентификаторСтрокой; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + одПропустить(ФайлОбмена, ИмяУзла); + + ИначеЕсли ИмяУзла = "ИнформацияОРегистрацииОбъекта" Тогда + + одПропустить(ФайлОбмена, ИмяУзла); // В режиме выборочного чтения сообщения пропускаем элемент. + + ИначеЕсли ИмяУзла = "КорректировкаИнформацииОРегистрацииОбъекта" Тогда + + одПропустить(ФайлОбмена, ИмяУзла); // В режиме выборочного чтения сообщения пропускаем элемент. + + ИначеЕсли ИмяУзла = "ОбщиеДанныеУзлов" Тогда + + одПропустить(ФайлОбмена, ИмяУзла); // В режиме выборочного чтения сообщения пропускаем элемент. + + ИначеЕсли (ИмяУзла = "ФайлОбмена") И (ФайлОбмена.ТипУзла = ТипУзлаXMLКонецЭлемента) Тогда + + Прервать; // выходим + + Иначе + + ВызватьИсключение НСтр("ru = 'Ошибка формата сообщения обмена.'"); + + КонецЕсли; + + // Прерываем цикл чтения файла в случае возникновения ошибки. + Если ФлагОшибки() Тогда + ВызватьИсключение НСтр("ru = 'Возникли ошибки при загрузке данных.'"); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Под классификатором понимаем справочник, ПВХ, план счетов, ПВР, у которых +// в ПКО выставлены флаги СинхронизироватьПоИдентификатору И ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли. +// +Функция ЭтоОбъектКлассификатор(ТипОбъектаСтрокой, ПКО) + + ВидОбъекта = ТипОбъектаСтрокой; + Позиция = СтрНайти(ВидОбъекта, "."); + Если Позиция > 0 Тогда + ВидОбъекта = Лев(ВидОбъекта, Позиция - 1); + КонецЕсли; + + Если ВидОбъекта = "СправочникСсылка" + Или ВидОбъекта = "ПланВидовХарактеристикСсылка" + Или ВидОбъекта = "ПланСчетовСсылка" + Или ВидОбъекта = "ПланВидовРасчетаСсылка" Тогда + Возврат ПКО.СинхронизироватьПоИдентификатору И ПКО.ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли + КонецЕсли; + + Возврат Ложь; +КонецФункции + +Процедура ПроизвестиЧтениеДанныхВРежимеАнализа(ЧтениеСообщения, ПараметрыАнализа = Неопределено) + + // Параметры по умолчанию + ПараметрыСбораСтатистики = Новый Структура("СобиратьСтатистикуКлассификаторов", Ложь); + Если ПараметрыАнализа <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(ПараметрыСбораСтатистики, ПараметрыАнализа); + КонецЕсли; + + Пока ФайлОбмена.Прочитать() Цикл + + ИмяУзла = ФайлОбмена.ЛокальноеИмя; + + Если ИмяУзла = "Объект" Тогда + + ТипОбъектаСтрокой = одАтрибут(ФайлОбмена, ТипСтрока, "Тип"); + + Если ТипОбъектаСтрокой <> "КонстантыНабор" Тогда + + ИмяПравила = одАтрибут(ФайлОбмена, ТипСтрока, "ИмяПравила"); + ПКО = Правила[ИмяПравила]; + + Если ПараметрыСбораСтатистики.СобиратьСтатистикуКлассификаторов И ЭтоОбъектКлассификатор(ТипОбъектаСтрокой, ПКО) Тогда + // Новое поведение + СобиратьСтатистику = Истина; + ЭтоКлассификатор = Истина; + + ИначеЕсли Не (ПКО.СинхронизироватьПоИдентификатору И ПКО.ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли) И ПКО.СинхронизироватьПоИдентификатору Тогда + // Ветка совместимости. + // Объекты, для которых выполняется автоматическое сопоставление в процессе обмена (классификаторы), + // не отображаются пользователю в таблице информации статистики. Поэтому сбор информации статистики для них не + // нужен. + + // Также не отображаются объекты, которые идентифицируются по полям поиска, а не по уникальному идентификатору + // ссылки. + СобиратьСтатистику = Истина; + ЭтоКлассификатор = Ложь; + + Иначе + СобиратьСтатистику = Ложь; + + КонецЕсли; + + Если СобиратьСтатистику Тогда + СтрокаТаблицы = ТаблицаДанныхЗаголовкаПакета().Добавить(); + + СтрокаТаблицы.ТипОбъектаСтрокой = ТипОбъектаСтрокой; + СтрокаТаблицы.КоличествоОбъектовВИсточнике = 1; + + СтрокаТаблицы.ТипПриемникаСтрокой = ПКО.ТипПриемника; + СтрокаТаблицы.ТипИсточникаСтрокой = ПКО.ТипИсточника; + + СтрокаТаблицы.ПоляПоиска = ПоляПоискаМеханизмаСопоставленияОбъектов(ПКО.ПоляПоиска); + СтрокаТаблицы.ПоляТаблицы = ПКО.ПоляТаблицы; + + СтрокаТаблицы.СинхронизироватьПоИдентификатору = ПКО.СинхронизироватьПоИдентификатору; + СтрокаТаблицы.ИспользоватьПредварительныйПросмотр = ПКО.СинхронизироватьПоИдентификатору; + СтрокаТаблицы.ЭтоКлассификатор = ЭтоКлассификатор; + СтрокаТаблицы.ЭтоУдалениеОбъекта = Ложь; + + КонецЕсли; + + КонецЕсли; + + одПропустить(ФайлОбмена, ИмяУзла); + + ИначеЕсли ИмяУзла = "НаборЗаписейРегистра" Тогда + + одПропустить(ФайлОбмена, ИмяУзла); + + ИначеЕсли ИмяУзла = "УдалениеОбъекта" Тогда + + СтрокаТаблицы = ТаблицаДанныхЗаголовкаПакета().Добавить(); + + СтрокаТаблицы.ТипПриемникаСтрокой = одАтрибут(ФайлОбмена, ТипСтрока, "ТипПриемника"); + СтрокаТаблицы.ТипИсточникаСтрокой = одАтрибут(ФайлОбмена, ТипСтрока, "ТипИсточника"); + + СтрокаТаблицы.ТипОбъектаСтрокой = СтрокаТаблицы.ТипПриемникаСтрокой; + + СтрокаТаблицы.КоличествоОбъектовВИсточнике = 1; + + СтрокаТаблицы.СинхронизироватьПоИдентификатору = Ложь; + СтрокаТаблицы.ИспользоватьПредварительныйПросмотр = Истина; + СтрокаТаблицы.ЭтоКлассификатор = Ложь; + СтрокаТаблицы.ЭтоУдалениеОбъекта = Истина; + + СтрокаТаблицы.ПоляПоиска = ""; // Поля поиска будут назначены в конструкторе обработки сопоставления объектов. + + // Определяем значения для колонки ПоляТаблицы + // получаем описание всех полей объекта метаданного из конфигурации. + ТипОбъекта = Тип(СтрокаТаблицы.ТипОбъектаСтрокой); + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипОбъекта); + + МассивПодстрок = ТаблицаОписанияСвойствОбъекта(ОбъектМетаданных).ВыгрузитьКолонку("Имя"); + + // Удаляем поле "Ссылка" из визуальных полей таблицы. + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(МассивПодстрок, "Ссылка"); + + СтрокаТаблицы.ПоляТаблицы = СтрСоединить(МассивПодстрок, ","); + + одПропустить(ФайлОбмена, ИмяУзла); + + ИначеЕсли ИмяУзла = "ИнформацияОРегистрацииОбъекта" Тогда + + ЕстьИнформацияОРегистрацииОбъекта = Истина; + + ПоследнийОбъектЗагрузки = ПрочитатьИнформациюОРегистрацииОбъекта(); + + ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки); + + ИначеЕсли ИмяУзла = "КорректировкаИнформацииОРегистрацииОбъекта" Тогда + + ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Истина; + + ПрочитатьКорректировкуИнформацииСопоставления(); + + одПропустить(ФайлОбмена, ИмяУзла); + + ИначеЕсли ИмяУзла = "ОбщиеДанныеУзлов" Тогда + + ПрочитатьОбщиеДанныеУзлов(ЧтениеСообщения); + + одПропустить(ФайлОбмена, ИмяУзла); + + ИначеЕсли (ИмяУзла = "ФайлОбмена") И (ФайлОбмена.ТипУзла = ТипУзлаXML.КонецЭлемента) Тогда + + Прервать; // выход + + Иначе + + ВызватьИсключение НСтр("ru = 'Ошибка формата сообщения обмена.'"); + + КонецЕсли; + + // Прерываем цикл чтения файла в случае возникновения ошибки. + Если ФлагОшибки() Тогда + ВызватьИсключение НСтр("ru = 'Возникли ошибки при анализе данных.'"); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ПроизвестиЧтениеДанныхВРежимеВнешнегоСоединения(ЧтениеСообщения) + + СтрокаСообщенияОбОшибке = ""; + КоличествоОбъектовКЗагрузке = КоличествоОбъектовКЗагрузкеВнешнееСоединение; + + Пока ФайлОбмена.Прочитать() Цикл + + ИмяУзла = ФайлОбмена.ЛокальноеИмя; + + Если ИмяУзла = "Объект" Тогда + + ПоследнийОбъектЗагрузки = ПрочитатьОбъект(); + + ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки); + + ОбменДаннымиСервер.РассчитатьПроцентЗагрузки(СчетчикЗагруженныхОбъектов(), КоличествоОбъектовКЗагрузке, РазмерФайлаСообщенияОбмена); + + ИначеЕсли ИмяУзла = "НаборЗаписейРегистра" Тогда + + // набор записей регистра + ПоследнийОбъектЗагрузки = ПрочитатьНаборЗаписейРегистра(); + + ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки); + ОбменДаннымиСервер.РассчитатьПроцентЗагрузки(СчетчикЗагруженныхОбъектов(), КоличествоОбъектовКЗагрузке, РазмерФайлаСообщенияОбмена); + ИначеЕсли ИмяУзла = "УдалениеОбъекта" Тогда + + // Обработка удаления объекта из информационной базы. + ПрочитатьУдалениеОбъекта(СтрокаСообщенияОбОшибке); + + одПропустить(ФайлОбмена, "УдалениеОбъекта"); + + ОбработатьОкончаниеЧтенияНовогоЭлемента(); + ОбменДаннымиСервер.РассчитатьПроцентЗагрузки(СчетчикЗагруженныхОбъектов(), КоличествоОбъектовКЗагрузке, РазмерФайлаСообщенияОбмена); + ИначеЕсли ИмяУзла = "ИнформацияОРегистрацииОбъекта" Тогда + + ЕстьИнформацияОРегистрацииОбъекта = Истина; + + ПоследнийОбъектЗагрузки = ПрочитатьИнформациюОРегистрацииОбъекта(); + + ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки); + + ИначеЕсли ИмяУзла = "НастройкаПользовательскогоПоиска" Тогда + + ЗагрузитьИнформациюОПользовательскихПоляхПоиска(); + + ИначеЕсли ИмяУзла = "ИнформацияОТипахДанных" Тогда + + Если СоответствиеТиповДанныхДляЗагрузки().Количество() > 0 Тогда + + одПропустить(ФайлОбмена, ИмяУзла); + + Иначе + ЗагрузитьИнформациюОТипахДанных(); + КонецЕсли; + + ИначеЕсли ИмяУзла = "ЗначениеПараметра" Тогда + + ЗагрузитьЗначенияПараметровОбменаДанными(); + + ИначеЕсли ИмяУзла = "АлгоритмПослеЗагрузкиПараметров" Тогда + + Отказ = Ложь; + ПричинаОтказа = ""; + + ТекстАлгоритма = одЗначениеЭлемента(ФайлОбмена, ТипСтрока); + + Если Не ПустаяСтрока(ТекстАлгоритма) Тогда + + Попытка + + Если ОтладкаОбработчиковЗагрузки Тогда + + ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиПараметров(ФайлОбмена, Отказ, ПричинаОтказа); + + Иначе + + Выполнить(ТекстАлгоритма); + + КонецЕсли; + + Если Отказ = Истина Тогда + + Если Не ПустаяСтрока(ПричинаОтказа) Тогда + + СтрокаСообщения = НСтр("ru = 'Загрузка данных отменена по причине: %1'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ПричинаОтказа); + ВызватьИсключение СтрокаСообщения; + Иначе + ВызватьИсключение НСтр("ru = 'Загрузка данных отменена'"); + КонецЕсли; + + КонецЕсли; + + Исключение + + ЗП = ПолучитьСтруктуруЗаписиПротокола(78, ОписаниеОшибки()); + ЗП.Обработчик = "ПослеЗагрузкиПараметров"; + СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(78, ЗП, Истина); + + Если Не ПродолжитьПриОшибке Тогда + ВызватьИсключение СтрокаСообщенияОбОшибке; + КонецЕсли; + + КонецПопытки; + + КонецЕсли; + + ИначеЕсли ИмяУзла = "ДанныеПоОбмену" Тогда + + ПрочитатьДанныеПоОбмену(ЧтениеСообщения, Ложь); + + одПропустить(ФайлОбмена, ИмяУзла); + + Если ФлагОшибки() Тогда + Прервать; + КонецЕсли; + + ИначеЕсли ИмяУзла = "ОбщиеДанныеУзлов" Тогда + + ПрочитатьОбщиеДанныеУзлов(Неопределено); + + одПропустить(ФайлОбмена, ИмяУзла); + + Если ФлагОшибки() Тогда + Прервать; + КонецЕсли; + + ИначеЕсли ИмяУзла = "КорректировкаИнформацииОРегистрацииОбъекта" Тогда + + ПрочитатьКорректировкуИнформацииСопоставления(); + + ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Истина; + + одПропустить(ФайлОбмена, ИмяУзла); + + ИначеЕсли (ИмяУзла = "ФайлОбмена") И (ФайлОбмена.ТипУзла = ТипУзлаXMLКонецЭлемента) Тогда + + Прервать; // выходим + + Иначе + + одПропустить(ФайлОбмена, ИмяУзла); + + КонецЕсли; + + // Прерываем цикл чтения файла в случае возникновения ошибки загрузки. + Если ФлагОшибки() Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ПрочитатьДанныеПоОбмену(ЧтениеСообщения, АнализДанных) + + ПолеИмяПланаОбмена = одАтрибут(ФайлОбмена, ТипСтрока, "ПланОбмена"); + КодОтКого = одАтрибут(ФайлОбмена, ТипСтрока, "ОтКого"); + ПолеНомерСообщения = одАтрибут(ФайлОбмена, ТипЧисло, "НомерИсходящегоСообщения"); + ПолеНомерПринятогоСообщения = одАтрибут(ФайлОбмена, ТипЧисло, "НомерВходящегоСообщения"); + УдалитьРегистрациюИзменений = одАтрибут(ФайлОбмена, ТипБулево, "УдалитьРегистрациюИзменений"); + ВерсияОтправителя = одАтрибут(ФайлОбмена, ТипСтрока, "ВерсияОтправителя"); + + УзелОбменаПолучатель = ПланыОбмена[ИмяПланаОбмена()].НайтиПоКоду(КодОтКого); + + // Проверка на наличие узла получателя + // проверка на правильность указания узла получателя в сообщении обмена. + Если Не ЗначениеЗаполнено(УзелОбменаПолучатель) + ИЛИ УзелОбменаПолучатель <> УзелОбменаЗагрузкаДанных Тогда + + СтрокаСообщения = НСтр("ru = 'Не найден узел обмена для загрузки данных. План обмена: %1, Код: %2'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяПланаОбмена(), КодОтКого); + ВызватьИсключение СтрокаСообщения; + КонецЕсли; + + ЧтениеСообщения = Новый Структура("НомерСообщения, НомерПринятого, Отправитель, ОтправительОбъект, СообщениеБылоПринятоРанее, АнализДанных"); + ЧтениеСообщения.Отправитель = УзелОбменаПолучатель; + ЧтениеСообщения.ОтправительОбъект = УзелОбменаПолучатель.ПолучитьОбъект(); + ЧтениеСообщения.НомерСообщения = ПолеНомерСообщения; + ЧтениеСообщения.НомерПринятого = ПолеНомерПринятогоСообщения; + ЧтениеСообщения.СообщениеБылоПринятоРанее = Ложь; + ЧтениеСообщения.АнализДанных = АнализДанных; + ЧтениеСообщения = Новый ФиксированнаяСтруктура(ЧтениеСообщения); + + ВосстановленаРезервнаяКопия = (ЧтениеСообщения.НомерПринятого > ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЧтениеСообщения.Отправитель, "НомерОтправленного")); + + Если РежимЗагрузкиДанныхВИнформационнуюБазу() Тогда + + НачатьТранзакцию(); + Попытка + НомерПринятого = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЧтениеСообщения.Отправитель, "НомерПринятого"); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + ЗафиксироватьТранзакцию(); + + Если НомерПринятого >= ЧтениеСообщения.НомерСообщения Тогда // Номер сообщения меньше либо равен ранее принятому. + + ЧтениеСообщенияВременное = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ЧтениеСообщения); + ЧтениеСообщенияВременное.СообщениеБылоПринятоРанее = Истина; + ЧтениеСообщения = Новый ФиксированнаяСтруктура(ЧтениеСообщенияВременное); + + ВызватьИсключение НСтр("ru = 'Сообщение обмена было принято ранее'"); + КонецЕсли; + + УдалитьРегистрациюИзменений = УдалитьРегистрациюИзменений И Не ВосстановленаРезервнаяКопия; + + Если УдалитьРегистрациюИзменений Тогда // Удаляем регистрацию изменений. + + Если ТранзакцияАктивна() Тогда + ВызватьИсключение НСтр("ru = 'Удаление регистрации изменений данных не может быть выполнено в активной транзакции.'"); + КонецЕсли; + + ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого); + + РегистрыСведений.ИзмененияОбщихДанныхУзлов.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого); + + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияФорматаВходящегоСообщенияОбмена(), "3.1.0.0") >= 0 Тогда + + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ЗафиксироватьВыполнениеКорректировкиИнформацииСопоставления(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого); + + КонецЕсли; + + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.СнятьПризнакНачальнойВыгрузкиДанных(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого); + + КонецЕсли; + + Если ВосстановленаРезервнаяКопия Тогда + + ЧтениеСообщения.ОтправительОбъект.НомерОтправленного = ЧтениеСообщения.НомерПринятого; + ЧтениеСообщения.ОтправительОбъект.ОбменДанными.Загрузка = Истина; + ЧтениеСообщения.ОтправительОбъект.Записать(); + + ЧтениеСообщенияВременное = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ЧтениеСообщения); + ЧтениеСообщенияВременное.ОтправительОбъект = ЧтениеСообщения.Отправитель.ПолучитьОбъект(); + ЧтениеСообщения = Новый ФиксированнаяСтруктура(ЧтениеСообщенияВременное); + КонецЕсли; + + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.УстановитьВерсиюКорреспондента(ЧтениеСообщения.Отправитель, ВерсияОтправителя); + + КонецЕсли; + + // {Обработчик: ПослеПолученияИнформацииОбУзлахОбмена} Начало + Если Не ПустаяСтрока(Конвертация.ПослеПолученияИнформацииОбУзлахОбмена) Тогда + + Попытка + + Если ОтладкаОбработчиковЗагрузки Тогда + + ВыполнитьОбработчик_Конвертация_ПослеПолученияИнформацииОбУзлахОбмена(ЧтениеСообщения.Отправитель); + + Иначе + + Выполнить(Конвертация.ПослеПолученияИнформацииОбУзлахОбмена); + + КонецЕсли; + + Исключение + ВызватьИсключение ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(176, ОписаниеОшибки(), НСтр("ru = 'ПослеПолученияИнформацииОбУзлахОбмена (конвертация)'")); + КонецПопытки; + + КонецЕсли; + // {Обработчик: ПослеПолученияИнформацииОбУзлахОбмена} Окончание + +КонецПроцедуры + +Процедура ПрочитатьОбщиеДанныеУзлов(ЧтениеСообщения) + + ФайлОбмена.Прочитать(); + + РежимЗагрузкиДанныхПредыдущий = РежимЗагрузкиДанных; + + РежимЗагрузкиДанных = "ЗагрузкаВТаблицуЗначений"; + + ОбщийУзел = ПрочитатьОбъект(); + + УвеличитьСчетчикЗагруженныхОбъектов(); + + РежимЗагрузкиДанных = РежимЗагрузкиДанныхПредыдущий; + + // {Обработчик: ПриПолученииДанныхОтправителя} Начало + Игнорировать = Ложь; + + ПланыОбмена[ОбщийУзел.Метаданные().Имя].ПриПолученииДанныхОтправителя(ОбщийУзел, Игнорировать); + + Если Игнорировать = Истина Тогда + Возврат; + КонецЕсли; + // {Обработчик: ПриПолученииДанныхОтправителя} Окончание + + Если ОбменДаннымиСобытия.ДанныеРазличаются(ОбщийУзел, ОбщийУзел.Ссылка.ПолучитьОбъект()) Тогда + + НачатьТранзакцию(); + Попытка + + ОбщийУзел.ОбменДанными.Загрузка = Истина; + ОбщийУзел.Записать(); + + // Обновляем повторно используемые значения механизма. + ОбменДаннымиВызовСервера.СброситьКэшМеханизмаРегистрацииОбъектов(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + ОткрытьТранзакцию = Ложь; + Если ТранзакцияАктивна() Тогда + ЗафиксироватьТранзакцию(); + ОткрытьТранзакцию = Истина; + КонецЕсли; + + // Удаляем регистрацию изменений на случай, если изменения были ранее зарегистрированы (в случае коллизии изменений). + РегистрыСведений.ИзмененияОбщихДанныхУзлов.УдалитьРегистрациюИзменений(ОбщийУзел.Ссылка); + + Если ОткрытьТранзакцию Тогда + НачатьТранзакцию(); + КонецЕсли; + + Если ЧтениеСообщения <> Неопределено + И ОбщийУзел.Ссылка = ЧтениеСообщения.Отправитель Тогда + + ЧтениеСообщенияВременное = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ЧтениеСообщения); + ЧтениеСообщенияВременное.ОтправительОбъект = ЧтениеСообщения.Отправитель.ПолучитьОбъект(); + ЧтениеСообщения = Новый ФиксированнаяСтруктура(ЧтениеСообщенияВременное); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьОтложенноеПроведениеДокументов() + + Если ДокументыДляОтложенногоПроведения().Количество() = 0 Тогда + Возврат // нет документов в очереди + КонецЕсли; + + // Сворачиваем таблицу по уникальным полям. + ДокументыДляОтложенногоПроведения().Свернуть("ДокументСсылка, ДатаДокумента"); + + // Сортируем документы по возрастанию даты документов. + ДокументыДляОтложенногоПроведения().Сортировать("ДатаДокумента"); + + Для Каждого СтрокаТаблицы Из ДокументыДляОтложенногоПроведения() Цикл + + ДокументСсылка = СтрокаТаблицы.ДокументСсылка; + + Если ДокументСсылка.Пустая() Тогда + Продолжить; + КонецЕсли; + + Объект = ДокументСсылка.ПолучитьОбъект(); + + Если Объект = Неопределено Тогда + Продолжить; + КонецЕсли; + + // Устанавливаем узел-отправитель для предотвращения регистрации объекта на узле, для которого производим загрузку + // проведение выполняем не в режиме загрузки. + УстановитьОбменДаннымиЗагрузка(Объект, Ложь); + + ОписаниеОшибки = ""; + ДокументПроведенУспешно = Ложь; + + Попытка + + ДополнительныеСвойства = ДополнительныеСвойстваДляОтложенногоПроведения().Получить(ДокументСсылка); + + Для Каждого Свойство Из ДополнительныеСвойства Цикл + + Объект.ДополнительныеСвойства.Вставить(Свойство.Ключ, Свойство.Значение); + + КонецЦикла; + + Объект.ДополнительныеСвойства.Вставить("ОтложенноеПроведение"); + + Если Объект.ПроверитьЗаполнение() Тогда + + // При проведении документа снимаем запрет на выполнение ПРО, + // т.к. ПРО были проигнорированы при обычной записи документа с целью оптимизации скорости загрузки данных. + Если Объект.ДополнительныеСвойства.Свойство("ОтключитьМеханизмРегистрацииОбъектов") Тогда + Объект.ДополнительныеСвойства.Удалить("ОтключитьМеханизмРегистрацииОбъектов"); + КонецЕсли; + + ОбменДаннымиСервер.ПропуститьПроверкуЗапретаИзменения(); + Объект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); + + СведенияОВерсииОбъекта = Новый Структура; + СведенияОВерсииОбъекта.Вставить("ОтложеннаяОбработка", Истина); + СведенияОВерсииОбъекта.Вставить("ТипВерсииОбъекта", "ИзмененоПользователем"); + СведенияОВерсииОбъекта.Вставить("АвторВерсии", УзелОбменаЗагрузкаДанных); + Объект.ДополнительныеСвойства.Вставить("СведенияОВерсииОбъекта", СведенияОВерсииОбъекта); + + // Выполняем попытку проведения документа. + Объект.Записать(РежимЗаписиДокумента.Проведение); + + ДокументПроведенУспешно = Объект.Проведен; + + Иначе + + ДокументПроведенУспешно = Ложь; + + КонецЕсли; + + Исключение + + ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + + ДокументПроведенУспешно = Ложь; + + КонецПопытки; + + ОбменДаннымиСервер.ПропуститьПроверкуЗапретаИзменения(Ложь); + + Если Не ДокументПроведенУспешно Тогда + + ОбменДаннымиСервер.ЗарегистрироватьОшибкуПроведенияДокумента(Объект, УзелОбменаЗагрузкаДанных, ОписаниеОшибки); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ВыполнитьОтложеннуюЗаписьОбъектов() + + Если ОбъектыДляОтложеннойЗаписи().Количество() = 0 Тогда + Возврат // Нет объектов в очереди + КонецЕсли; + + Для Каждого ОбъектСоответствия Из ОбъектыДляОтложеннойЗаписи() Цикл + + Если ОбъектСоответствия.Ключ.Пустая() Тогда + Продолжить; + КонецЕсли; + + Объект = ОбъектСоответствия.Ключ.ПолучитьОбъект(); + + Если Объект = Неопределено Тогда + Продолжить; + КонецЕсли; + + // Устанавливаем узел-отправитель для предотвращения регистрации объекта на узле, для которого производим загрузку + // проведение выполняем не в режиме загрузки. + УстановитьОбменДаннымиЗагрузка(Объект, Ложь); + + ОписаниеОшибки = ""; + ОбъектЗаписанУспешно = Ложь; + + Попытка + + ДополнительныеСвойства = ОбъектСоответствия.Значение; + + Для Каждого Свойство Из ДополнительныеСвойства Цикл + + Объект.ДополнительныеСвойства.Вставить(Свойство.Ключ, Свойство.Значение); + + КонецЦикла; + + Объект.ДополнительныеСвойства.Вставить("ОтложеннаяЗапись"); + + Если Объект.ПроверитьЗаполнение() Тогда + + // При проведении документа снимаем запрет на выполнение ПРО, + // т.к. ПРО были проигнорированы при обычной записи с целью оптимизации скорости загрузки данных. + Если Объект.ДополнительныеСвойства.Свойство("ОтключитьМеханизмРегистрацииОбъектов") Тогда + Объект.ДополнительныеСвойства.Удалить("ОтключитьМеханизмРегистрацииОбъектов"); + КонецЕсли; + + ОбменДаннымиСервер.ПропуститьПроверкуЗапретаИзменения(); + Объект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗапретаИзменения"); + + СведенияОВерсииОбъекта = Новый Структура; + СведенияОВерсииОбъекта.Вставить("ОтложеннаяОбработка", Истина); + СведенияОВерсииОбъекта.Вставить("ТипВерсииОбъекта", "ИзмененоПользователем"); + СведенияОВерсииОбъекта.Вставить("АвторВерсии", УзелОбменаЗагрузкаДанных); + Объект.ДополнительныеСвойства.Вставить("СведенияОВерсииОбъекта", СведенияОВерсииОбъекта); + + // Выполняем попытку записи объекта. + Объект.Записать(); + + ОбъектЗаписанУспешно = Истина; + + Иначе + + ОбъектЗаписанУспешно = Ложь; + + ОписаниеОшибки = НСтр("ru = 'Ошибка проверки заполнения реквизитов'"); + + КонецЕсли; + + Исключение + + ОписаниеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + + ОбъектЗаписанУспешно = Ложь; + + КонецПопытки; + + ОбменДаннымиСервер.ПропуститьПроверкуЗапретаИзменения(Ложь); + + Если Не ОбъектЗаписанУспешно Тогда + + ОбменДаннымиСервер.ЗарегистрироватьОшибкуЗаписиОбъекта(Объект, УзелОбменаЗагрузкаДанных, ОписаниеОшибки); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ЗаписатьИнформациюОбОбменеДаннымиЧерезПланыОбмена(Знач НомерОтправленного) + + Приемник = СоздатьУзел("ДанныеПоОбмену"); + + УстановитьАтрибут(Приемник, "ПланОбмена", ИмяПланаОбмена()); + УстановитьАтрибут(Приемник, "Кому", УзелДляОбмена.Код); + УстановитьАтрибут(Приемник, "ОтКого", ПланыОбмена[ИмяПланаОбмена()].ЭтотУзел().Код); + + // Атрибуты механизма квитирования сообщений обмена. + УстановитьАтрибут(Приемник, "НомерИсходящегоСообщения", НомерОтправленного); + УстановитьАтрибут(Приемник, "НомерВходящегоСообщения", УзелДляОбмена.НомерПринятого); + УстановитьАтрибут(Приемник, "УдалитьРегистрациюИзменений", Истина); + + УстановитьАтрибут(Приемник, "ВерсияОтправителя", СокрЛП(Метаданные.Версия)); + + // Запись объекта в файл + Приемник.ЗаписатьКонецЭлемента(); + + ЗаписатьВФайл(Приемник); + +КонецПроцедуры + +Процедура ВыгрузитьОбщиеДанныеУзлов(Знач НомерОтправленного) + + ВыборкаИзмененийУзлов = РегистрыСведений.ИзмененияОбщихДанныхУзлов.ВыбратьИзменения(УзелДляОбмена, НомерОтправленного); + + Если ВыборкаИзмененийУзлов.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелДляОбмена); + + ОбщиеДанныеУзлов = ОбменДаннымиПовтИсп.ОбщиеДанныеУзлов(УзелДляОбмена); + + Если ПустаяСтрока(ОбщиеДанныеУзлов) Тогда + Возврат; + КонецЕсли; + + ПравилаКонвертацииСвойств = Новый ТаблицаЗначений; + ИнициализацияТаблицыПравилКонвертацииСвойств(ПравилаКонвертацииСвойств); + + Свойства = ПравилаКонвертацииСвойств.Скопировать(); + СвойстваПоиска = ПравилаКонвертацииСвойств.Скопировать(); + + МетаданныеОбщегоУзла = Метаданные.ПланыОбмена[ИмяПланаОбмена]; + + ТабличныеЧастиОбщегоУзла = ОбменДаннымиСобытия.ТабличныеЧастиОбъекта(МетаданныеОбщегоУзла); + + СвойстваОбщегоУзла = СтрРазделить(ОбщиеДанныеУзлов, ","); + + Для Каждого Свойство Из СвойстваОбщегоУзла Цикл + + Если ТабличныеЧастиОбщегоУзла.Найти(Свойство) <> Неопределено Тогда + + ПКС = Свойства.Добавить(); + ПКС.ЭтоГруппа = Истина; + ПКС.ВидИсточника = "ТабличнаяЧасть"; + ПКС.ВидПриемника = "ТабличнаяЧасть"; + ПКС.Источник = Свойство; + ПКС.Приемник = Свойство; + ПКС.ПравилаГруппы = ПравилаКонвертацииСвойств.Скопировать(); + + Для Каждого Реквизит Из МетаданныеОбщегоУзла.ТабличныеЧасти[Свойство].Реквизиты Цикл + + ПКГС = ПКС.ПравилаГруппы.Добавить(); + ПКГС.ЭтоГруппа = Ложь; + ПКГС.ВидИсточника = "Реквизит"; + ПКГС.ВидПриемника = "Реквизит"; + ПКГС.Источник = Реквизит.Имя; + ПКГС.Приемник = Реквизит.Имя; + + КонецЦикла; + + Иначе + + ПКС = Свойства.Добавить(); + ПКС.ЭтоГруппа = Ложь; + ПКС.ВидИсточника = "Реквизит"; + ПКС.ВидПриемника = "Реквизит"; + ПКС.Источник = Свойство; + ПКС.Приемник = Свойство; + + КонецЕсли; + + КонецЦикла; + + ПКС = СвойстваПоиска.Добавить(); + ПКС.ВидИсточника = "Свойство"; + ПКС.ВидПриемника = "Свойство"; + ПКС.Источник = "Код"; + ПКС.Приемник = "Код"; + ПКС.ТипИсточника = "Строка"; + ПКС.ТипПриемника = "Строка"; + + ПКО = ТаблицаПравилКонвертации.Добавить(); + ПКО.СинхронизироватьПоИдентификатору = Ложь; + ПКО.ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли = Ложь; + ПКО.НеВыгружатьОбъектыСвойствПоСсылкам = Истина; + ПКО.ТипИсточника = "ПланОбменаСсылка." + ИмяПланаОбмена; + ПКО.Источник = Тип(ПКО.ТипИсточника); + ПКО.ТипПриемника = ПКО.ТипИсточника; + ПКО.Приемник = ПКО.ТипИсточника; + + ПКО.Свойства = Свойства; + ПКО.СвойстваПоиска = СвойстваПоиска; + + ОбщийУзел = ПланыОбмена[ИмяПланаОбмена].СоздатьУзел(); + ОбменДаннымиСобытия.ЗаполнитьЗначенияСвойствОбъекта(ОбщийУзел, УзелДляОбмена.ПолучитьОбъект(), ОбщиеДанныеУзлов); + + // {Обработчик: ПриОтправкеДанныхОтправителя} Начало + Игнорировать = Ложь; + + ПланыОбмена[ОбщийУзел.Метаданные().Имя].ПриОтправкеДанныхОтправителя(ОбщийУзел, Игнорировать); + + Если Игнорировать = Истина Тогда + Возврат; + КонецЕсли; + // {Обработчик: ПриОтправкеДанныхОтправителя} Окончание + + ОбщийУзел.Код = ОбменДаннымиПовтИсп.ПолучитьКодЭтогоУзлаДляПланаОбмена(ИмяПланаОбмена); + + УзелXML = СоздатьУзел("ОбщиеДанныеУзлов"); + + ВыгрузитьПоПравилу(ОбщийУзел,,,,,,, ПКО,,, УзелXML); + + УзелXML.ЗаписатьКонецЭлемента(); + + ЗаписатьВФайл(УзелXML); + +КонецПроцедуры + +Функция ВыгрузитьДанныеСсылочногоОбъекта(Значение, ИсходящиеДанные, ИмяПКО, ПКОСвойств, ТипПриемника, УзелСвойства, Знач ВыгрузитьТолькоСсылку) + + ЭтоПравилоСГлобальнойВыгрузкой = Ложь; + УзелСсылки = ВыгрузитьПоПравилу(Значение, , ИсходящиеДанные, , ИмяПКО, , ВыгрузитьТолькоСсылку, ПКОСвойств, ЭтоПравилоСГлобальнойВыгрузкой, , , , Ложь); + ТипУзлаСсылки = ТипЗнч(УзелСсылки); + + Если ПустаяСтрока(ТипПриемника) Тогда + + ТипПриемника = ПКОСвойств.Приемник; + УстановитьАтрибут(УзелСвойства, "Тип", ТипПриемника); + + КонецЕсли; + + Если УзелСсылки = Неопределено Тогда + + Возврат Неопределено; + + КонецЕсли; + + ДобавитьСвойстваДляВыгрузки(УзелСсылки, ТипУзлаСсылки, УзелСвойства, ЭтоПравилоСГлобальнойВыгрузкой); + + Возврат УзелСсылки; + +КонецФункции + +Процедура ПередатьОдинПараметрВПриемник(Имя, ИсходноеЗначениеПараметра, ПравилоКонвертации = "") + + Если ПустаяСтрока(ПравилоКонвертации) Тогда + + УзелПараметра = СоздатьУзел("ЗначениеПараметра"); + + УстановитьАтрибут(УзелПараметра, "Имя", Имя); + УстановитьАтрибут(УзелПараметра, "Тип", одТипЗначенияСтрокой(ИсходноеЗначениеПараметра)); + + ЭтоNULL = Ложь; + Пусто = одПустое(ИсходноеЗначениеПараметра, ЭтоNULL); + + Если Пусто Тогда + + // Надо записать что это пустое значение. + одЗаписатьЭлемент(УзелПараметра, "Пусто"); + + УзелПараметра.ЗаписатьКонецЭлемента(); + + ЗаписатьВФайл(УзелПараметра); + + Возврат; + + КонецЕсли; + + одЗаписатьЭлемент(УзелПараметра, "Значение", ИсходноеЗначениеПараметра); + + УзелПараметра.ЗаписатьКонецЭлемента(); + + ЗаписатьВФайл(УзелПараметра); + + Иначе + + УзелПараметра = СоздатьУзел("ЗначениеПараметра"); + + УстановитьАтрибут(УзелПараметра, "Имя", Имя); + + ЭтоNULL = Ложь; + Пусто = одПустое(ИсходноеЗначениеПараметра, ЭтоNULL); + + Если Пусто Тогда + + ПКОСвойств = НайтиПравило(ИсходноеЗначениеПараметра, ПравилоКонвертации); + ТипПриемника = ПКОСвойств.Приемник; + УстановитьАтрибут(УзелПараметра, "Тип", ТипПриемника); + + // Надо записать что это пустое значение. + одЗаписатьЭлемент(УзелПараметра, "Пусто"); + + УзелПараметра.ЗаписатьКонецЭлемента(); + + ЗаписатьВФайл(УзелПараметра); + + Возврат; + + КонецЕсли; + + ВыгрузитьДанныеСсылочногоОбъекта(ИсходноеЗначениеПараметра, , ПравилоКонвертации, , , УзелПараметра, Истина); + + УзелПараметра.ЗаписатьКонецЭлемента(); + + ЗаписатьВФайл(УзелПараметра); + + КонецЕсли; + +КонецПроцедуры + +Процедура ПередатьДополнительныеПараметрыВПриемник() + + Для Каждого Параметр Из ТаблицаНастройкиПараметров Цикл + + Если Параметр.ПередаватьПараметрПриВыгрузке = Истина Тогда + + ПередатьОдинПараметрВПриемник(Параметр.Имя, Параметр.Значение, Параметр.ПравилоКонвертации); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ПередатьИнформациюОТипахВПриемник() + + Если Не ПустаяСтрока(СтрокаТиповДляПриемника) Тогда + ЗаписатьВФайл(СтрокаТиповДляПриемника); + КонецЕсли; + +КонецПроцедуры + +Процедура ПередатьИнформациюОПользовательскихПоляхПоискаВПриемник() + + Для Каждого КлючИЗначенияСопоставления Из ИнформацияОПользовательскихПоляхПоискаПриВыгрузкеДанных Цикл + + УзелПараметра = СоздатьУзел("НастройкаПользовательскогоПоиска"); + + одЗаписатьЭлемент(УзелПараметра, "ИмяПравила", КлючИЗначенияСопоставления.Ключ); + одЗаписатьЭлемент(УзелПараметра, "НастройкаПоиска", КлючИЗначенияСопоставления.Значение); + + УзелПараметра.ЗаписатьКонецЭлемента(); + ЗаписатьВФайл(УзелПараметра); + + КонецЦикла; + +КонецПроцедуры + +Процедура ИнициализироватьКомментарииПриВыгрузкеИЗагрузкеДанных() + + КомментарийПриВыгрузкеДанных = ""; + КомментарийПриЗагрузкеДанных = ""; + +КонецПроцедуры + +Процедура ВыгруженныеПоСсылкеОбъектыДобавитьЗначение(Значение) + + Если ВыгруженныеПоСсылкеОбъекты().Найти(Значение) = Неопределено Тогда + + ВыгруженныеПоСсылкеОбъекты().Добавить(Значение); + + КонецЕсли; + +КонецПроцедуры + +Функция ОбъектПроходитФильтрРазрешенныхОбъектов(Значение) + + Возврат РегистрыСведений.СоответствияОбъектовИнформационныхБаз.ОбъектЕстьВРегистре(Значение, УзелДляОбмена); + +КонецФункции + +Функция ПоляПоискаМеханизмаСопоставленияОбъектов(Знач ПоляПоиска) + + ПоляПоискаКоллекция = СтрРазделить(ПоляПоиска, ","); + + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(ПоляПоискаКоллекция, "ЭтоГруппа"); + + Возврат СтрСоединить(ПоляПоискаКоллекция, ","); +КонецФункции + +Процедура ВыполнитьВыгрузку(СтрокаСообщенияОбОшибке = "") + + ПолеИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелДляОбмена); + + ВыгрузитьИнформациюСопоставления = ВыгрузитьИнформациюСопоставленияОбъектов(УзелДляОбмена); + + ИнициализироватьКомментарииПриВыгрузкеИЗагрузкеДанных(); + + ТекущийУровеньВложенностиВыгрузитьПоПравилу = 0; + + СтекВызововВыгрузкиДанных = Новый ТаблицаЗначений; + СтекВызововВыгрузкиДанных.Колонки.Добавить("Ссылка"); + СтекВызововВыгрузкиДанных.Индексы.Добавить("Ссылка"); + + ИнициализироватьМенеджерыИСообщения(); + + ПолеСчетчикВыгруженныхОбъектов = Неопределено; + СчетчикНПП = 0; + НППЗаписанногоВФайл = 0; + + Для Каждого Правило Из ТаблицаПравилКонвертации Цикл + + Правило.Выгруженные = СоздатьТаблицуВыгруженныхОбъектов(); + + КонецЦикла; + + // Получаем типы объектов метаданных, которые будут участвовать в выгрузке. + ТаблицаПравилВыгрузкиИспользуемые = ТаблицаПравилВыгрузки.Скопировать(Новый Структура("Включить", Истина)); + + Для Каждого СтрокаТаблицы Из ТаблицаПравилВыгрузкиИспользуемые Цикл + + Если Не СтрокаТаблицы.ОбъектВыборки = Тип("КонстантыНабор") Тогда + + СтрокаТаблицы.ОбъектВыборкиМетаданные = Метаданные.НайтиПоТипу(СтрокаТаблицы.ОбъектВыборки); + + КонецЕсли; + + КонецЦикла; + + СоответствиеДанныхДляОбновленияВыгруженныхЭлементов = Новый Соответствие; + + // {ОБРАБОТЧИК ПередВыгрузкойДанных} + Отказ = Ложь; + + Если Не ПустаяСтрока(Конвертация.ПередВыгрузкойДанных) Тогда + + Попытка + + Если ОтладкаОбработчиковВыгрузки Тогда + + ВыполнитьОбработчик_Конвертация_ПередВыгрузкойДанных(ФайлОбмена, Отказ); + + Иначе + + Выполнить(Конвертация.ПередВыгрузкойДанных); + + КонецЕсли; + + Исключение + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(62, ОписаниеОшибки(), НСтр("ru = 'ПередВыгрузкойДанных (конвертация)'")); + Отказ = Истина; + КонецПопытки; + + Если Отказ Тогда // Отказ от выгрузки данных + ЗавершитьВедениеПротоколаОбмена(); + Возврат; + КонецЕсли; + + КонецЕсли; + // {ОБРАБОТЧИК ПередВыгрузкойДанных} + + ПередатьИнформациюОПользовательскихПоляхПоискаВПриемник(); + + ПередатьИнформациюОТипахВПриемник(); + + // Передаем доп. параметры в приемник. + ПередатьДополнительныеПараметрыВПриемник(); + + ТекстСобытияПослеЗагрузкиПараметров = ""; + Если Конвертация.Свойство("ПослеЗагрузкиПараметров", ТекстСобытияПослеЗагрузкиПараметров) + И Не ПустаяСтрока(ТекстСобытияПослеЗагрузкиПараметров) Тогда + + ЗаписьСобытия = Новый ЗаписьXML; + ЗаписьСобытия.УстановитьСтроку(); + одЗаписатьЭлемент(ЗаписьСобытия, "АлгоритмПослеЗагрузкиПараметров", ТекстСобытияПослеЗагрузкиПараметров); + + ЗаписатьВФайл(ЗаписьСобытия); + + КонецЕсли; + + НомерОтправленного = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелДляОбмена, "НомерОтправленного") + ?(ВыгрузитьИнформациюСопоставления, 2, 1); + + ЗаписатьИнформациюОбОбменеДаннымиЧерезПланыОбмена(НомерОтправленного); + + ВыгрузитьОбщиеДанныеУзлов(НомерОтправленного); + + Отказ = Ложь; + + // ВЫПОЛНЯЕМ ВЫГРУЗКУ РЕГИСТРА СОПОСТАВЛЕНИЯ + Если ВыгрузитьИнформациюСопоставления Тогда + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку(); + ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения(); + ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелДляОбмена); + + Попытка + ВыполнитьВыгрузкуРегистраСопоставленияОбъектов(ЗаписьСообщения, СтрокаСообщенияОбОшибке); + Исключение + Отказ = Истина; + КонецПопытки; + + Если Отказ Тогда + ЗаписьСообщения.ПрерватьЗапись(); + Иначе + ЗаписьСообщения.ЗакончитьЗапись(); + КонецЕсли; + + ЗаписьXML.Закрыть(); + ЗаписьXML = Неопределено; + + Если Отказ Тогда + Возврат; + КонецЕсли; + + КонецЕсли; + + // ВЫПОЛНЯЕМ ВЫГРУЗКУ КОРРЕКТИРОВКИ РЕГИСТРА СОПОСТАВЛЕНИЯ + Если НеобходимоВыполнитьКорректировкуИнформацииСопоставления() Тогда + + ВыгрузитьКорректировкуИнформацииСопоставления(); + + КонецЕсли; + + // ВЫПОЛНЯЕМ ВЫГРУЗКУ ЗАРЕГИСТРИРОВАННЫХ ДАННЫХ + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку(); + ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения(); + ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелДляОбмена); + + Попытка + ВыполнитьВыгрузкуЗарегистрированныхДанных(ЗаписьСообщения, СтрокаСообщенияОбОшибке, ТаблицаПравилВыгрузкиИспользуемые); + Исключение + Отказ = Истина; + ЗаписатьВПротоколВыполнения(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + Если ЭтоОбменЧерезВнешнееСоединение() Тогда + + Если ЗагрузкаДанныхВыполняетсяВоВнешнемСоединении Тогда + + Пока ВнешнееСоединение.ТранзакцияАктивна() Цикл + ВнешнееСоединение.ОтменитьТранзакцию(); + КонецЦикла; + + Иначе + + ОбработкаДляЗагрузкиДанных().ВнешнееСоединениеОтменитьТранзакциюПриЗагрузкеДанных(); + + КонецЕсли; + + КонецЕсли; + + КонецПопытки; + + // Выполняем регистрацию объектов на текущем узле, которые были выгружены по ссылке. + Для Каждого Элемент Из ВыгруженныеПоСсылкеОбъекты() Цикл + + ПланыОбмена.ЗарегистрироватьИзменения(ЗаписьСообщения.Получатель, Элемент); + + КонецЦикла; + + // Назначаем номер отправленного сообщения для объектов, выгруженных по ссылке. + Если ВыгруженныеПоСсылкеОбъекты().Количество() > 0 Тогда + + ОбменДаннымиСервер.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения, ВыгруженныеПоСсылкеОбъекты()); + + КонецЕсли; + + // Назначаем номер отправленного сообщения для объектов, созданных в текущей сессии выгрузки данных. + Если СозданныеПриВыгрузкеОбъекты().Количество() > 0 Тогда + + ОбменДаннымиСервер.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения, СозданныеПриВыгрузкеОбъекты()); + + КонецЕсли; + + Если Отказ Тогда + ЗаписьСообщения.ПрерватьЗапись(); + Иначе + ЗаписьСообщения.ЗакончитьЗапись(); + КонецЕсли; + + ЗаписьXML.Закрыть(); + ЗаписьXML = Неопределено; + + // {ОБРАБОТЧИК ПослеВыгрузкиДанных} + Если Не Отказ И Не ПустаяСтрока(Конвертация.ПослеВыгрузкиДанных) Тогда + + Попытка + + Если ОтладкаОбработчиковВыгрузки Тогда + + ВыполнитьОбработчик_Конвертация_ПослеВыгрузкиДанных(ФайлОбмена); + + Иначе + + Выполнить(Конвертация.ПослеВыгрузкиДанных); + + КонецЕсли; + + Исключение + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(63, ОписаниеОшибки(), НСтр("ru = 'ПослеВыгрузкиДанных (конвертация)'")); + КонецПопытки; + + КонецЕсли; + // {ОБРАБОТЧИК ПослеВыгрузкиДанных} + +КонецПроцедуры + +Процедура ВыполнитьВыгрузкуРегистраСопоставленияОбъектов(ЗаписьСообщения, СтрокаСообщенияОбОшибке) + + // Выбираем изменения только для регистра сопоставления. + ВыборкаИзменений = ОбменДаннымиСервер.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения, Метаданные.РегистрыСведений.СоответствияОбъектовИнформационныхБаз); + + Пока ВыборкаИзменений.Следующий() Цикл + + Данные = ВыборкаИзменений.Получить(); + + // Накладываем фильтр на выгрузку данных. + Если Данные.Отбор.УзелИнформационнойБазы.Значение <> УзелДляОбмена Тогда + Продолжить; + ИначеЕсли ПустаяСтрока(Данные.Отбор.УникальныйИдентификаторПриемника.Значение) Тогда + Продолжить; + КонецЕсли; + + ВыгружатьОбъект = Истина; + + Для Каждого Запись Из Данные Цикл + + Если ВыгружатьОбъект И Запись.ОбъектВыгруженПоСсылке = Истина Тогда + + ВыгружатьОбъект = Ложь; + + КонецЕсли; + + КонецЦикла; + + // Выгружаем зарегистрированную информацию РС СоответствияОбъектовИнформационныхБаз; + // правила конвертации РС прописаны в коде этой обработки; + Если ВыгружатьОбъект Тогда + + ВыгрузитьИнформациюОЗарегистрированномОбъекте(Данные); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ВыполнитьВыгрузкуЗарегистрированныхДанных(ЗаписьСообщения, СтрокаСообщенияОбОшибке, ТаблицаПравилВыгрузкиИспользуемые) + + // Переменные-заглушки для поддержки механизма отладки кода обработчиков событий. + Перем Отказ, ИмяПКО, ВыборкаДанных, ИсходящиеДанные; + // {ОБРАБОТЧИК ПередПолучениемИзмененныхОбъектов} + Если Не ПустаяСтрока(Конвертация.ПередПолучениемИзмененныхОбъектов) Тогда + + Попытка + + Получатель = УзелДляОбмена; + + Если ОтладкаОбработчиковВыгрузки Тогда + + ВыполнитьОбработчик_Конвертация_ПередПолучениемИзмененныхОбъектов(Получатель, УзелДляФоновогоОбмена); + + Иначе + + Выполнить(Конвертация.ПередПолучениемИзмененныхОбъектов); + + КонецЕсли; + + Исключение + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(175, ОписаниеОшибки(), НСтр("ru = 'ПередПолучениемИзмененныхОбъектов (конвертация)'")); + Возврат; + КонецПопытки; + + КонецЕсли; + // {ОБРАБОТЧИК ПередПолучениемИзмененныхОбъектов} + + МассивВыгружаемыхМетаданных = ТаблицаПравилВыгрузкиИспользуемые.ВыгрузитьКолонку("ОбъектВыборкиМетаданные"); + + // Значение "Неопределено" свидетельствует о необходимости выгрузки констант. + Если МассивВыгружаемыхМетаданных.Найти(Неопределено) <> Неопределено Тогда + + ДополнитьМассивВыгружаемыхМетаданныхКонстантами(МассивВыгружаемыхМетаданных); + + КонецЕсли; + + // Удаляем из массива элементы со значением "Неопределено". + УдалитьНедопустимыеЗначенияИзМассиваВыгружаемыхМетаданных(МассивВыгружаемыхМетаданных); + + // Регистр сведений СоответствияОбъектовИнформационныхБаз выгружается отдельно, поэтому в эту выборку он не должен + // входить. + Если МассивВыгружаемыхМетаданных.Найти(Метаданные.РегистрыСведений.СоответствияОбъектовИнформационныхБаз) <> Неопределено Тогда + + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(МассивВыгружаемыхМетаданных, Метаданные.РегистрыСведений.СоответствияОбъектовИнформационныхБаз); + + КонецЕсли; + + // Обновляем повторно используемые значения МРО. + ОбменДаннымиВызовСервера.ПроверитьКэшМеханизмаРегистрацииОбъектов(); + + НачальнаяВыгрузкаДанных = ОбменДаннымиСервер.УстановленПризнакНачальнойВыгрузкиДанных(ЗаписьСообщения.Получатель); + + // ВЫБОРКА ИЗМЕНЕНИЙ + ВыборкаИзменений = ОбменДаннымиСервер.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения, МассивВыгружаемыхМетаданных); + + ОбъектМетаданныхПредыдущий = Неопределено; + ПравилоВыгрузкиДанныхПредыдущее = Неопределено; + ПравилоВыгрузкиДанных = Неопределено; + НомерФайлаВыгрузки = 0; + СтрокаФайла = Неопределено; + ВыгружаетсяРегистр = Ложь; + ВыгружаютсяКонстанты = Ложь; + + ЭтоОбменЧерезВнешнееСоединение = ЭтоОбменЧерезВнешнееСоединение(); + + Если ЭтоОбменЧерезВнешнееСоединение Тогда + + Если ЗагрузкаДанныхВыполняетсяВоВнешнемСоединении Тогда + + Если ОбработкаДляЗагрузкиДанных().ИспользоватьТранзакции Тогда + + ВнешнееСоединение.НачатьТранзакцию(); + + КонецЕсли; + + Иначе + + ОбработкаДляЗагрузкиДанных().ВнешнееСоединениеНачатьТранзакциюПриЗагрузкеДанных(); + + КонецЕсли; + + КонецЕсли; + + УзелДляОбменаОбъект = УзелДляОбмена.ПолучитьОбъект(); + + Пока ВыборкаИзменений.Следующий() Цикл + Инкремент(КоличествоОбъектовКВыгрузке); + КонецЦикла; + ВыборкаИзменений.Сбросить(); + + Если ЭтоОбменЧерезВнешнееСоединение() Тогда + // В базе-корреспонденте может не быть этого реквизита обработки. + Если ОбработкаДляЗагрузкиДанных().Метаданные().Реквизиты.Найти("КоличествоОбъектовКЗагрузкеВнешнееСоединение") <> Неопределено Тогда + ОбработкаДляЗагрузкиДанных().КоличествоОбъектовКЗагрузкеВнешнееСоединение = КоличествоОбъектовКВыгрузке; + КонецЕсли; + КонецЕсли; + + Пока ВыборкаИзменений.Следующий() Цикл + + Инкремент(ПолеСчетчикВыгруженныхОбъектов); + ОбменДаннымиСервер.РассчитатьПроцентВыгрузки(СчетчикВыгруженныхОбъектов(), КоличествоОбъектовКВыгрузке); + + Данные = ВыборкаИзменений.Получить(); + + ТипДанныхДляВыгрузки = ТипЗнч(Данные); + + // Отрабатываем удаление объекта. + Если ТипДанныхДляВыгрузки = ТипУдалениеОбъекта Тогда + + ОтработатьУдалениеОбъекта(Данные); + Продолжить; + + ИначеЕсли ТипДанныхДляВыгрузки = ТипРегистрСоответствия Тогда + Продолжить; + КонецЕсли; + + ОбъектМетаданныхТекущий = Данные.Метаданные(); + + // Выгружается новый тип объекта метаданных. + Если ОбъектМетаданныхПредыдущий <> ОбъектМетаданныхТекущий Тогда + + Если ОбъектМетаданныхПредыдущий <> Неопределено Тогда + + // {ОБРАБОТЧИК ПослеОбработки ПВД} + Если ПравилоВыгрузкиДанныхПредыдущее <> Неопределено + И Не ПустаяСтрока(ПравилоВыгрузкиДанныхПредыдущее.ПослеОбработки) Тогда + + Попытка + + Если ОтладкаОбработчиковВыгрузки Тогда + + ВыполнитьОбработчик_ПВД_ПослеОбработкиПравила(ИмяПКО, ПравилоВыгрузкиДанныхПредыдущее, ИсходящиеДанные); + + Иначе + + Выполнить(ПравилоВыгрузкиДанныхПредыдущее.ПослеОбработки); + + КонецЕсли; + + Исключение + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ОписаниеОшибки(), ПравилоВыгрузкиДанныхПредыдущее.Имя, "ПослеОбработкиВыгрузкиДанных"); + КонецПопытки; + + КонецЕсли; + // {ОБРАБОТЧИК ПослеОбработки ПВД} + + КонецЕсли; + + ОбъектМетаданныхПредыдущий = ОбъектМетаданныхТекущий; + + ВыгружаетсяРегистр = Ложь; + ВыгружаютсяКонстанты = Ложь; + + СтруктураДанных = МенеджерыДляПлановОбмена[ОбъектМетаданныхТекущий]; + + Если СтруктураДанных = Неопределено Тогда + + ВыгружаютсяКонстанты = Метаданные.Константы.Содержит(ОбъектМетаданныхТекущий); + + ИначеЕсли СтруктураДанных.ЭтоРегистр = Истина Тогда + + ВыгружаетсяРегистр = Истина; + + КонецЕсли; + + Если ВыгружаютсяКонстанты Тогда + + ПравилоВыгрузкиДанных = ТаблицаПравилВыгрузкиИспользуемые.Найти(Тип("КонстантыНабор"), "ОбъектВыборкиМетаданные"); + + Иначе + + ПравилоВыгрузкиДанных = ТаблицаПравилВыгрузкиИспользуемые.Найти(ОбъектМетаданныхТекущий, "ОбъектВыборкиМетаданные"); + + КонецЕсли; + + ПравилоВыгрузкиДанныхПредыдущее = ПравилоВыгрузкиДанных; + + // {ОБРАБОТЧИК ПередОбработкой ПВД} + ИсходящиеДанные = Неопределено; + + Если ПравилоВыгрузкиДанных <> Неопределено + И Не ПустаяСтрока(ПравилоВыгрузкиДанных.ПередОбработкой) Тогда + + Попытка + + Если ОтладкаОбработчиковВыгрузки Тогда + + ВыполнитьОбработчик_ПВД_ПередОбработкойПравила(Отказ, ИмяПКО, ПравилоВыгрузкиДанных, ИсходящиеДанные, ВыборкаДанных); + + Иначе + + Выполнить(ПравилоВыгрузкиДанных.ПередОбработкой); + + КонецЕсли; + + Исключение + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(31, ОписаниеОшибки(), ПравилоВыгрузкиДанных.Имя, "ПередОбработкойВыгрузкиДанных"); + КонецПопытки; + + + КонецЕсли; + // {ОБРАБОТЧИК ПередОбработкой ПВД} + + КонецЕсли; + + Если ТипДанныхДляВыгрузки <> ТипРегистрСоответствия Тогда + + // Определяем вид отправки объекта. + ОтправкаЭлемента = ОтправкаЭлементаДанных.Авто; + + СтандартныеПодсистемыСервер.ПриОтправкеДанныхПодчиненному(Данные, ОтправкаЭлемента, НачальнаяВыгрузкаДанных, УзелДляОбменаОбъект); + + Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить Тогда + + Если ВыгружаетсяРегистр Тогда + + // Удаление регистра отсылаем в виде пустого набора записей. + + Иначе + + // Посылаем информацию об удалении. + ОтработатьУдалениеОбъекта(Данные); + Продолжить; + + КонецЕсли; + + ИначеЕсли ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда + + Продолжить; + + КонецЕсли; + + КонецЕсли; + + // ВЫГРУЗКА ОБЪЕКТА + Если ВыгружаетсяРегистр Тогда + + // выгрузка регистра + ВыгрузкаРегистра(Данные, ПравилоВыгрузкиДанных, ИсходящиеДанные, НеВыгружатьОбъектыПоСсылкам); + + ИначеЕсли ВыгружаютсяКонстанты Тогда + + // выгрузка набора констант + Свойства = Менеджеры[Тип("КонстантыНабор")]; + + ВыгрузитьНаборКонстант(ПравилоВыгрузкиДанных, Свойства, ИсходящиеДанные, ОбъектМетаданныхТекущий.Имя); + + Иначе + + // выгрузка ссылочных типов + ВыгрузкаОбъектаВыборки(Данные, ПравилоВыгрузкиДанных, , ИсходящиеДанные, НеВыгружатьОбъектыПоСсылкам); + + КонецЕсли; + + Если ЭтоОбменЧерезВнешнееСоединение Тогда + + Если ЗагрузкаДанныхВыполняетсяВоВнешнемСоединении Тогда + + Если ОбработкаДляЗагрузкиДанных().ИспользоватьТранзакции + И ОбработкаДляЗагрузкиДанных().КоличествоОбъектовНаТранзакцию > 0 + И ОбработкаДляЗагрузкиДанных().СчетчикЗагруженныхОбъектов() % ОбработкаДляЗагрузкиДанных().КоличествоОбъектовНаТранзакцию = 0 Тогда + + ВнешнееСоединение.ЗафиксироватьТранзакцию(); + ВнешнееСоединение.НачатьТранзакцию(); + + КонецЕсли; + + + Иначе + + ОбработкаДляЗагрузкиДанных().ВнешнееСоединениеПроверитьНачалоИФиксациюТранзакцииПриЗагрузкеДанных(); + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Если ОбъектМетаданныхПредыдущий <> Неопределено Тогда + + // {ОБРАБОТЧИК ПослеОбработки ПВД} + Если ПравилоВыгрузкиДанных <> Неопределено + И Не ПустаяСтрока(ПравилоВыгрузкиДанных.ПослеОбработки) Тогда + + Попытка + + Если ОтладкаОбработчиковВыгрузки Тогда + + ВыполнитьОбработчик_ПВД_ПослеОбработкиПравила(ИмяПКО, ПравилоВыгрузкиДанных, ИсходящиеДанные); + + Иначе + + Выполнить(ПравилоВыгрузкиДанных.ПослеОбработки); + + КонецЕсли; + + Исключение + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ОписаниеОшибки(), ПравилоВыгрузкиДанных.Имя, "ПослеОбработкиВыгрузкиДанных"); + КонецПопытки; + + КонецЕсли; + // {ОБРАБОТЧИК ПослеОбработки ПВД} + + КонецЕсли; + + Если ЭтоОбменЧерезВнешнееСоединение Тогда + + Если ЗагрузкаДанныхВыполняетсяВоВнешнемСоединении Тогда + + Если ОбработкаДляЗагрузкиДанных().ИспользоватьТранзакции Тогда + + Если ОбработкаДляЗагрузкиДанных().ФлагОшибки() Тогда + + ВнешнееСоединение.ОтменитьТранзакцию(); + + Иначе + + ВнешнееСоединение.ЗафиксироватьТранзакцию(); + + КонецЕсли; + + КонецЕсли; + + Иначе + + ОбработкаДляЗагрузкиДанных().ВнешнееСоединениеЗафиксироватьТранзакциюПриЗагрузкеДанных(); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаписьЖурналаРегистрацииОбменДанными(Комментарий, Уровень = Неопределено) + + Если Уровень = Неопределено Тогда + Уровень = УровеньЖурналаРегистрации.Ошибка; + КонецЕсли; + + ОбъектМетаданных = Неопределено; + + Если УзелОбменаЗагрузкаДанных <> Неопределено + И Не УзелОбменаЗагрузкаДанных.Пустая() Тогда + + ОбъектМетаданных = УзелОбменаЗагрузкаДанных.Метаданные(); + + КонецЕсли; + + ЗаписьЖурналаРегистрации(КлючСообщенияЖурналаРегистрации(), Уровень, ОбъектМетаданных,, Комментарий); + +КонецПроцедуры + +Функция ВыгрузитьИнформациюСопоставленияОбъектов(УзелИнформационнойБазы) + + ТекстЗапроса = " + |ВЫБРАТЬ ПЕРВЫЕ 1 1 + |ИЗ + | РегистрСведений.СоответствияОбъектовИнформационныхБаз.Изменения КАК СоответствияОбъектовИнформационныхБазИзменения + |ГДЕ + | СоответствияОбъектовИнформационныхБазИзменения.Узел = &УзелИнформационнойБазы + |"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелИнформационнойБазы); + + Возврат Не Запрос.Выполнить().Пустой(); + +КонецФункции + +Функция НеобходимоВыполнитьКорректировкуИнформацииСопоставления() + + Возврат РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.НеобходимоВыполнитьКорректировкуИнформацииСопоставления(УзелДляОбмена, УзелДляОбмена.НомерОтправленного + 1); + +КонецФункции + +Процедура УдалитьНедопустимыеЗначенияИзМассиваВыгружаемыхМетаданных(МассивВыгружаемыхМетаданных) + + Если МассивВыгружаемыхМетаданных.Найти(Неопределено) <> Неопределено Тогда + + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(МассивВыгружаемыхМетаданных, Неопределено); + + УдалитьНедопустимыеЗначенияИзМассиваВыгружаемыхМетаданных(МассивВыгружаемыхМетаданных); + + КонецЕсли; + +КонецПроцедуры + +Процедура ДополнитьМассивВыгружаемыхМетаданныхКонстантами(МассивВыгружаемыхМетаданных) + + Состав = Метаданные.ПланыОбмена[ИмяПланаОбмена()].Состав; + + Для Каждого ОбъектМетаданныхКонстанта Из Метаданные.Константы Цикл + + Если Состав.Содержит(ОбъектМетаданныхКонстанта) Тогда + + МассивВыгружаемыхМетаданных.Добавить(ОбъектМетаданныхКонстанта); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область Инициализация ИнициализацияРеквизитовИМодульныхПеременных(); diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl index 723ae76b2..7c85e6a51 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl @@ -235,6 +235,28 @@ Возврат; КонецПопытки; + // Установка параметров сеанса. + КоличествоОбъектовКВыгрузке = ОбменДаннымиСервер.РассчитатьКоличествоЗарегистрированныхОбъектов(УзелИнформационнойБазы); + ПараметрыСеансаСинхронизацииДанных = Новый Соответствие; + УстановитьПривилегированныйРежим(Истина); + Попытка + ТекущийПараметрСеанса = ПараметрыСеанса.ПараметрыСеансаСинхронизацииДанных.Получить(); + Исключение + ТекущийПараметрСеанса = Неопределено; + КонецПопытки; + + Если ТипЗнч(ТекущийПараметрСеанса) = Тип("Соответствие") Тогда + Для Каждого Элемент Из ТекущийПараметрСеанса Цикл + ПараметрыСеансаСинхронизацииДанных.Вставить(Элемент.Ключ, Элемент.Значение); + КонецЦикла; + КонецЕсли; + + ПараметрыСеансаСинхронизацииДанных.Вставить(УзелИнформационнойБазы, + Новый Структура("КоличествоОбъектовКВыгрузке", + КоличествоОбъектовКВыгрузке)); + ПараметрыСеанса.ПараметрыСеансаСинхронизацииДанных = Новый ХранилищеЗначения(ПараметрыСеансаСинхронизацииДанных); + УстановитьПривилегированныйРежим(Ложь); + Попытка ОбменДаннымиВызовСервера.ОчиститьПриоритетныеДанныеОбмена(); @@ -509,10 +531,14 @@ Если Данные.ЭтоНовый() Тогда Объект.УстановитьСсылкуНового(Данные.ПолучитьСсылкуНового()); Объект.ИмяПредопределенныхДанных = Данные.ИмяПредопределенныхДанных; + Объект.ДополнительныеСвойства.Вставить("ПропуститьЗаписьВерсииОбъекта"); + Объект.ДополнительныеСвойства.Вставить("ЗагрузкаПриоритетныхДанных"); ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); ИначеЕсли Объект.ИмяПредопределенныхДанных <> Данные.ИмяПредопределенныхДанных Тогда Объект.ИмяПредопределенныхДанных = Данные.ИмяПредопределенныхДанных; + Объект.ДополнительныеСвойства.Вставить("ПропуститьЗаписьВерсииОбъекта"); + Объект.ДополнительныеСвойства.Вставить("ЗагрузкаПриоритетныхДанных"); ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); Иначе // Если предопределенный элемент существует предварительная загрузка не требуется. @@ -687,6 +713,7 @@ Объект.ИмяПредопределенныхДанных = ""; Объект.ПометкаУдаления = Истина; + Объект.ДополнительныеСвойства.Вставить("ПропуститьЗаписьВерсииОбъекта"); ОбновлениеИнформационнойБазы.ЗаписатьДанные(Объект); КонецЕсли; diff --git a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Form.form b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Form.form index d5468b717..e6c9e2df9 100644 --- a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Form.form +++ b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Form.form @@ -135,7 +135,7 @@ ГруппаОтправкаСтатистики 26 - ДекорацияОтсупПередОтправкойСтатистики + ДекорацияОтступПередОтправкойСтатистики 18 true true @@ -143,7 +143,7 @@ true - ДекорацияОтсупПередОтправкойСтатистикиРасширеннаяПодсказка + ДекорацияОтступПередОтправкойСтатистикиРасширеннаяПодсказка 20 Label true @@ -153,7 +153,7 @@ - ДекорацияОтсупПередОтправкойСтатистикиКонтекстноеМеню + ДекорацияОтступПередОтправкойСтатистикиКонтекстноеМеню 19 true @@ -206,7 +206,7 @@ ГруппаОтправкаСтатистикиПояснение 21 - ДекорацияОтсупПояснение + ДекорацияОтступПояснение 23 true true @@ -214,7 +214,7 @@ true - ДекорацияОтсупПояснениеРасширеннаяПодсказка + ДекорацияОтступПояснениеРасширеннаяПодсказка 25 Label true @@ -224,7 +224,7 @@ - ДекорацияОтсупПояснениеКонтекстноеМеню + ДекорацияОтступПояснениеКонтекстноеМеню 24 true @@ -376,6 +376,10 @@ Right + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере @@ -500,6 +504,23 @@ true
          + + ИнформационнаяБазаФайловая + + <key>ru</key> + <value>Информационная база файловая</value> + + 7 + + Boolean + + + true + + + true + + Продолжить diff --git a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl index 8793af0d7..21f3969a2 100644 --- a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl +++ b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Forms/ПроверкаЛегальностиПолученияОбновления/Module.bsl @@ -22,6 +22,8 @@ ПодтверждениеВыбора = 0; // Пользователю требуется явно выбрать один из вариантов. Элементы.Примечание.Видимость = Параметры.ПоказыватьПредупреждениеОПерезапуске; + ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); + // СтандартныеПодсистемы.ЦентрМониторинга // ЦентрМониторингаСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга"); @@ -43,6 +45,16 @@ // КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + Если ИнформационнаяБазаФайловая + И СтрНайти(ПараметрЗапуска, "ВыполнитьОбновлениеИЗавершитьРаботу") > 0 Тогда + ЗаписатьПодтверждениеЛегальностиПолученияОбновлений(); + Отказ = Истина; + ПодключитьОбработчикОжидания("ПодтвердитьЛегальностьПолученияОбновления", 0.1, Истина); + КонецЕсли; +КонецПроцедуры + #КонецОбласти #Область ОбработчикиКомандФормы @@ -57,7 +69,7 @@ ПрекратитьРаботуСистемы(); КонецЕсли; Иначе - ЗаписатьПодтверждениеЛегальностиПолученияОбновлений(РазрешитьОтправкуСтатистики); + ЗаписатьПодтверждениеЛегальностиИОтправкиСтатистики(РазрешитьОтправкуСтатистики); КонецЕсли; Закрыть(Результат); @@ -72,7 +84,7 @@ ПрекратитьРаботуСистемы(); КонецЕсли; Иначе - ЗаписатьПодтверждениеЛегальностиПолученияОбновлений(РазрешитьОтправкуСтатистики); + ЗаписатьПодтверждениеЛегальностиИОтправкиСтатистики(РазрешитьОтправкуСтатистики); КонецЕсли; Оповестить("ЛегальностьПолученияОбновлений", Результат); @@ -83,13 +95,18 @@ #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура ПодтвердитьЛегальностьПолученияОбновления() + ВыполнитьОбработкуОповещения(ЭтотОбъект.ОписаниеОповещенияОЗакрытии, Истина); +КонецПроцедуры + &НаСервереБезКонтекста -Процедура ЗаписатьПодтверждениеЛегальностиПолученияОбновлений(РазрешитьОтправкуСтатистики) +Процедура ЗаписатьПодтверждениеЛегальностиИОтправкиСтатистики(РазрешитьОтправкуСтатистики) + + ЗаписатьПодтверждениеЛегальностиПолученияОбновлений(); УстановитьПривилегированныйРежим(Истина); - ОбновлениеИнформационнойБазыСлужебный.ЗаписатьПодтверждениеЛегальностиПолученияОбновлений(); - ЦентрМониторингаСуществует = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЦентрМониторинга"); Если ЦентрМониторингаСуществует Тогда МодульЦентрМониторингаСлужебный = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторингаСлужебный"); @@ -99,7 +116,7 @@ Если (НЕ ПараметрыОтправкиСтатистики.ВключитьЦентрМониторинга И ПараметрыОтправкиСтатистики.ЦентрОбработкиИнформацииОПрограмме) Тогда // Настроена отправка статистики стороннему разработчику - // настройки не меняем + // настройки не меняем. // Иначе Если РазрешитьОтправкуСтатистики Тогда @@ -117,4 +134,10 @@ КонецПроцедуры +&НаСервереБезКонтекста +Процедура ЗаписатьПодтверждениеЛегальностиПолученияОбновлений() + УстановитьПривилегированныйРежим(Истина); + ОбновлениеИнформационнойБазыСлужебный.ЗаписатьПодтверждениеЛегальностиПолученияОбновлений(); +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Help/ru.html b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Help/ru.html index 89679d292..7b31158a6 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для проверки легальности получения обновлений.</p> <p>При обновлении программа запрашивает у администратора подтверждение, что файлы обновления были получены легальным способом. </p> <p>Выберите с помощью переключателя:</p> diff --git a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Templates/УсловияРаспространенияОбновлений/ru.html b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Templates/УсловияРаспространенияОбновлений/ru.html index 4ebcdf671..bf8579648 100644 --- a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Templates/УсловияРаспространенияОбновлений/ru.html +++ b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Templates/УсловияРаспространенияОбновлений/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></meta></head><body scroll="auto"><font size="2" face="Verdana"> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><meta name="GENERATOR" content="MSHTML 11.00.9600.18427"></meta></head><body scroll="auto"><font size="2" face="Verdana"> <p align="center"><strong>УСЛОВИЯ РАСПРОСТРАНЕНИЯ ОБНОВЛЕНИЙ ПРОГРАММ "1С:ПРЕДПРИЯТИЕ"</strong></p> <p></p> <p>Обновления к программам производства фирмы "1С", также как и сами программы, являются объектами исключительного права фирмы "1С" и распространяются по правилам, установленным фирмой "1С" как правообладателем в соответствии со ст. 1225 Гражданского кодекса.</p> diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ЗавершениеЗапросаРазрешений/Module.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ЗавершениеЗапросаРазрешений/Module.bsl index 8e772450d..7b552cc98 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ЗавершениеЗапросаРазрешений/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ЗавершениеЗапросаРазрешений/Module.bsl @@ -1,8 +1,12 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем РазрешитьЗакрытие; &НаКлиенте Перем ОжиданиеЗавершено; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ИнициализацияЗапросаРазрешений/Module.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ИнициализацияЗапросаРазрешений/Module.bsl index c36417df9..f20ad1bcf 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ИнициализацияЗапросаРазрешений/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/ИнициализацияЗапросаРазрешений/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ЗаданиеАктивно; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Form.form b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Form.form index 3a1848b78..b0a21419a 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Form.form +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Form.form @@ -120,6 +120,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -227,6 +228,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -330,6 +332,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -435,6 +438,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -573,6 +577,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1205,6 +1210,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1361,6 +1367,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -1856,6 +1863,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -2142,6 +2150,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -2521,6 +2530,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Help/ru.html b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Help/ru.html index 3521e2af6..e4031bb3e 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>В случае если в кластере серверов 1С:Предприятия для данной информационной базы используются <a href="DataProcessor.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Help">профили безопасности</a>, ограничивающие доступ к внешним (относительно кластера серверов 1С:Предприятия) ресурсам, то для корректной работы программы требуется внести изменения в состав разрешений в профиле безопасности.</p> <p>В списке перечислены внешние ресурсы, возможность использования которых будет разрешена.</p> <p>Для подтверждения нажмите <strong>Применить изменения</strong>.</p> diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl index a9fadcf9c..fdce1ca28 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Module.bsl @@ -1,8 +1,10 @@ -&НаКлиенте -Перем ИтерацияПроверки; +#Область ОписаниеПеременных + &НаКлиенте Перем АдресХранилища; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Form.form b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Form.form index 4c1094046..7cc2fc865 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Form.form +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Form.form @@ -48,19 +48,11 @@ <items xsi:type="form:Decoration"> <name>Декорация1</name> <id>1585</id> - <title> - <key>ru</key> - <value> </value> - true true true - - ru - - Декорация1ExtendedTooltip 1602 @@ -118,14 +110,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - false false @@ -148,14 +132,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - ГруппаЗаголовокExtendedTooltip 1600 @@ -261,14 +237,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - 43 ГруппаРежимИспользованияПрофилейБезопасностиРасширеннаяПодсказка @@ -400,14 +368,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - 43 false @@ -523,14 +483,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - 43 false @@ -591,14 +543,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - ГруппаБезопасностьКолонкиРасширеннаяПодсказка 1608 @@ -804,14 +748,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - 43 false @@ -905,7 +841,7 @@ 1687 <key>ru</key> - <value>Автоматическое пересоздание профилей безопасностей в кластере сервров (например, после переноса информационной базы на другой кластер).</value> + <value>Автоматическое пересоздание профилей безопасности в кластере серверов (например, после переноса информационной базы на другой кластер).</value> true true @@ -944,14 +880,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - 43 false @@ -1016,10 +944,6 @@ ru Сервисные функции - - ru - - ГруппаСервисныеФункцииРасширеннаяПодсказка 1644 diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Help/ru.html b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Help/ru.html index f47ba62ba..d2c1411dd 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Help/ru.html @@ -4,7 +4,7 @@ TD { VERTICAL-ALIGN: top } - +

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

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

          Режим использования профилей безопасности

          @@ -33,5 +33,7 @@ TD {
          В поле Профиль безопасности информационной базы введите имя использующегося профиля безопасности (в кластере серверов 1С:Предприятия).

        Восстановление настроек профилей безопасности

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

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

        -
        • Нажмите Восстановить настройки профилей безопасности.

        См. также:

        +
        • Нажмите Восстановить настройки профилей безопасности.

        Редактирование внешней обработки или отчета

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

        См. также:

        \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Module.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Module.bsl index 159102034..8f3c87d70 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Forms/НастройкиИспользованияПрофилейБезопасности/Module.bsl @@ -1,11 +1,9 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ОбновитьИнтерфейс; -&НаКлиенте -Перем ПараметрыОбработчикаОжидания; - -&НаКлиенте -Перем ФормаДлительнойОперации; +#КонецОбласти #Область ОбработчикиСобытийФормы @@ -235,18 +233,18 @@ &НаКлиенте Процедура Подключаемый_ПриИзмененииРеквизита(Элемент, ОбновлятьИнтерфейс = Истина) - Результат = ПриИзмененииРеквизитаСервер(Элемент.Имя); + КонстантаИмя = ПриИзмененииРеквизитаСервер(Элемент.Имя); ОбновитьПовторноИспользуемыеЗначения(); Если ОбновлятьИнтерфейс Тогда - #Если НЕ ВебКлиент Тогда - ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 1, Истина); ОбновитьИнтерфейс = Истина; - #КонецЕсли + ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 2, Истина); КонецЕсли; - СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); + Если КонстантаИмя <> "" Тогда + Оповестить("Запись_НаборКонстант", Новый Структура, КонстантаИмя); + КонецЕсли; КонецПроцедуры @@ -265,26 +263,24 @@ &НаСервере Функция ПриИзмененииРеквизитаСервер(ИмяЭлемента) - Результат = Новый Структура; - РеквизитПутьКДанным = Элементы[ИмяЭлемента].ПутьКДанным; - СохранитьЗначениеРеквизита(РеквизитПутьКДанным, Результат); + КонстантаИмя = СохранитьЗначениеРеквизита(РеквизитПутьКДанным); УстановитьДоступность(РеквизитПутьКДанным); ОбновитьПовторноИспользуемыеЗначения(); - Возврат Результат; + Возврат КонстантаИмя; КонецФункции &НаСервере -Процедура СохранитьЗначениеРеквизита(РеквизитПутьКДанным, Результат) +Функция СохранитьЗначениеРеквизита(РеквизитПутьКДанным) // Сохранение значений реквизитов, не связанных с константами напрямую (в отношении один-к-одному). Если РеквизитПутьКДанным = "" Тогда - Возврат; + Возврат ""; КонецЕсли; // Определение имени константы. @@ -302,12 +298,11 @@ Если КонстантаМенеджер.Получить() <> КонстантаЗначение Тогда КонстантаМенеджер.Установить(КонстантаЗначение); КонецЕсли; - - СтандартныеПодсистемыКлиентСервер.ОповеститьОткрытыеФормы(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); - КонецЕсли; -КонецПроцедуры + Возврат КонстантаИмя; + +КонецФункции &НаСервере Процедура УстановитьДоступность(РеквизитПутьКДанным = "") diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Help/ru.html b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Help/ru.html index 0c7a537d8..fcf5ef7da 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

        diff --git a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ObjectModule.bsl b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ObjectModule.bsl index 44222b12a..c78b2809d 100644 --- a/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ObjectModule.bsl +++ b/SSL/src/DataProcessors/НастройкаРазрешенийНаИспользованиеВнешнихРесурсов/ObjectModule.bsl @@ -7,7 +7,7 @@ // //////////////////////////////////////////////////////////////////////////////// -#Область ВнутреннееСостояние +#Область ОписаниеПеременных // Массив(УникальныйИдентификатор) - массив идентификаторов запросов на использование внешних // ресурсов, для применения которых инициализирован объект. @@ -202,7 +202,7 @@ #КонецОбласти -#Область СлужебныеПроцедурыИФункции +#Область СлужебныйПрограммныйИнтерфейс // Добавляет идентификатор запроса в перечень обрабатываемых. После успешного применения будет выполнена очистка // запросов, идентификаторы которых были добавлены. @@ -422,6 +422,328 @@ КонецПроцедуры +// Проверяет необходимость применения разрешений в кластере серверов. +// +// Возвращаемое значение: Булево. +// +Функция ТребуетсяПрименениеРазрешенийВКластереСерверов() Экспорт + + Если ДельтаБезУчетаВладельцев.Добавляемые.Количество() > 0 Тогда + Возврат Истина; + КонецЕсли; + + Если ДельтаБезУчетаВладельцев.Удаляемые.Количество() > 0 Тогда + Возврат Истина; + КонецЕсли; + + Для Каждого ОперацияАдминистрирования Из ОперацииАдминистрирования Цикл + Если ОперацияАдминистрирования.Операция = Перечисления.ОперацииАдминистрированияПрофилейБезопасности.Удаление Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +// Проверяет необходимости записи разрешений в регистры. +// +// Возвращаемое значение: Булево. +// +Функция ТребуетсяЗаписьРазрешенийВРегистр() Экспорт + + Если ДельтаВРазрезеВладельцев.Добавляемые.Количество() > 0 Тогда + Возврат Истина; + КонецЕсли; + + Если ДельтаВРазрезеВладельцев.Удаляемые.Количество() > 0 Тогда + Возврат Истина; + КонецЕсли; + + Для Каждого ОперацияАдминистрирования Из ОперацииАдминистрирования Цикл + Если ОперацияАдминистрирования.Операция = Перечисления.ОперацииАдминистрированияПрофилейБезопасности.Удаление Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +// Возвращает представление запросов разрешений на использование внешних ресурсов. +// +// Параметры: +// КакТребуемые - Булево - представление формируется как список разрешений, а не как список операций +// при изменении разрешений. +// +// Возвращаемое значение: ТабличныйДокумент. +// +Функция Представление(Знач КакТребуемые = Ложь) Экспорт + + Возврат Отчеты.ИспользуемыеВнешниеРесурсы.ПредставлениеЗапросовРазрешенийНаИспользованиеВнешнихРесурсов( + ОперацииАдминистрирования, + ДельтаБезУчетаВладельцев.Добавляемые, + ДельтаБезУчетаВладельцев.Удаляемые, + КакТребуемые); + +КонецФункции + +// Возвращает сценарий применения запросов разрешений на использование внешних ресурсов. +// +// Возвращаемое значение: Массив(Структура), поля структуры: +// * Операция - ПеречислениеСсылка.ОперацииАдминистрированияПрофилейБезопасности, +// * Профиль - Строка - имя профиля безопасности, +// * Разрешения - Структура - см. +// АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(). +// +Функция СценарийПрименения() Экспорт + + Результат = Новый Массив(); + + Для Каждого Описание Из ОперацииАдминистрирования Цикл + + ЭлементРезультата = Новый Структура("Операция,Профиль,Разрешения"); + ЭлементРезультата.Операция = Описание.Операция; + ЭлементРезультата.Профиль = Описание.Имя; + ЭлементРезультата.Разрешения = ПрофильВНотацииИнтерфейсаАдминистрированияКластера(ЭлементРезультата.Профиль, Описание.ТипПрограммногоМодуля, Описание.ИдентификаторПрограммногоМодуля); + + ЭтоПрофильКонфигурации = (Описание.ТипПрограммногоМодуля = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка()); + + Если ЭтоПрофильКонфигурации Тогда + + ПриоритетДополнительнойОперации = Ложь; + + Если Описание.Операция = Перечисления.ОперацииАдминистрированияПрофилейБезопасности.Создание Тогда + ДополнительнаяОперация = Перечисления.ОперацииАдминистрированияПрофилейБезопасности.Назначение; + КонецЕсли; + + Если Описание.Операция = Перечисления.ОперацииАдминистрированияПрофилейБезопасности.Удаление Тогда + ДополнительнаяОперация = Перечисления.ОперацииАдминистрированияПрофилейБезопасности.УдалениеНазначения; + ПриоритетДополнительнойОперации = Истина; + КонецЕсли; + + ДополнительныйЭлемент = Новый Структура("Операция,Профиль,Разрешения", ДополнительнаяОперация, Описание.Имя); + + КонецЕсли; + + Если ЭтоПрофильКонфигурации И ПриоритетДополнительнойОперации Тогда + + Результат.Добавить(ДополнительныйЭлемент); + + КонецЕсли; + + Результат.Добавить(ЭлементРезультата); + + Если ЭтоПрофильКонфигурации И Не ПриоритетДополнительнойОперации Тогда + + Результат.Добавить(ДополнительныйЭлемент); + + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Формирует описание профиля безопасности для информационной базы или внешнего модуля. +// +// Параметры: +// ВнешнийМодуль - ЛюбаяСсылка - ссылка на элемент справочника, использующийся в +// качестве внешнего модуля. +// +// Возвращаемое значение: +// Строка - описание профиля безопасности. +// +Функция НовоеОписаниеПрофиляБезопасности(Знач ТипПрограммногоМодуля, Знач ИдентификаторПрограммногоМодуля) Экспорт + + Шаблон = НСтр("ru = '[ИБ %1] %2 ""%3""'"); + + ИмяИБ = ""; + СтрокаСоединения = СтрокаСоединенияИнформационнойБазы(); + Подстроки = СтрРазделить(СтрокаСоединения, ";"); + Для Каждого Подстрока Из Подстроки Цикл + Если СтрНачинаетсяС(Подстрока, "Ref") Тогда + ИмяИБ = СтрЗаменить(Прав(Подстрока, СтрДлина(Подстрока) - 4), """", ""); + КонецЕсли; + КонецЦикла; + Если ПустаяСтрока(ИмяИБ) Тогда + ВызватьИсключение НСтр("ru = 'Строка соединения информационной базы не содержит имени информационной базы!'"); + КонецЕсли; + + Если ТипПрограммногоМодуля = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка() Тогда + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ИмяИБ, + НСтр("ru = 'Профиль безопасности для информационной базы'"), СтрокаСоединенияИнформационнойБазы()); + Иначе + ПрограммныйМодуль = РаботаВБезопасномРежимеСлужебный.СсылкаИзРегистраРазрешений(ТипПрограммногоМодуля, ИдентификаторПрограммногоМодуля); + Словарь = РаботаВБезопасномРежимеСлужебный.МенеджерВнешнегоМодуля(ПрограммныйМодуль).СловарьКонтейнераВнешнегоМодуля(); + НаименованиеМодуля = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПрограммныйМодуль, "Наименование"); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ИмяИБ, Словарь.Именительный, НаименованиеМодуля); + КонецЕсли; + +КонецФункции + +// Сериализует внутреннее состояние объекта. +// +// Возвращаемое значение - Строка. +// +Функция ЗаписатьСостояниеВСтрокуXML() Экспорт + + Состояние = Новый Структура(); + + Состояние.Вставить("ИсходныйСрезРазрешенийВРазрезеВладельцев", ИсходныйСрезРазрешенийВРазрезеВладельцев); + Состояние.Вставить("РезультатПримененияЗапросовВРазрезеВладельцев", РезультатПримененияЗапросовВРазрезеВладельцев); + Состояние.Вставить("ДельтаВРазрезеВладельцев", ДельтаВРазрезеВладельцев); + Состояние.Вставить("ИсходныйСрезРазрешенийБезУчетаВладельцев", ИсходныйСрезРазрешенийБезУчетаВладельцев); + Состояние.Вставить("РезультатПримененияЗапросовБезУчетаВладельцев", РезультатПримененияЗапросовБезУчетаВладельцев); + Состояние.Вставить("ДельтаБезУчетаВладельцев", ДельтаБезУчетаВладельцев); + Состояние.Вставить("ОперацииАдминистрирования", ОперацииАдминистрирования); + Состояние.Вставить("ИдентификаторыЗапросов", ИдентификаторыЗапросов); + Состояние.Вставить("ОчисткаРазрешенийПередПрименением", ОчисткаРазрешенийПередПрименением); + + Возврат ОбщегоНазначения.ЗначениеВСтрокуXML(Состояние); + +КонецФункции + +// Десериализует внутреннее состояние объекта. +// +// Параметры: +// СтрокаXML - Строка - результат, возвращенный функцией ЗаписатьСостояниеВСтрокуXML(). +// +Процедура ПрочитатьСостояниеИзСтрокиXML(Знач СтрокаXML) Экспорт + + Состояние = ОбщегоНазначения.ЗначениеИзСтрокиXML(СтрокаXML); + + ИсходныйСрезРазрешенийВРазрезеВладельцев = Состояние.ИсходныйСрезРазрешенийВРазрезеВладельцев; + РезультатПримененияЗапросовВРазрезеВладельцев = Состояние.РезультатПримененияЗапросовВРазрезеВладельцев; + ДельтаВРазрезеВладельцев = Состояние.ДельтаВРазрезеВладельцев; + ИсходныйСрезРазрешенийБезУчетаВладельцев = Состояние.ИсходныйСрезРазрешенийБезУчетаВладельцев; + РезультатПримененияЗапросовБезУчетаВладельцев = Состояние.РезультатПримененияЗапросовБезУчетаВладельцев; + ДельтаБезУчетаВладельцев = Состояние.ДельтаБезУчетаВладельцев; + ОперацииАдминистрирования = Состояние.ОперацииАдминистрирования; + ИдентификаторыЗапросов = Состояние.ИдентификаторыЗапросов; + ОчисткаРазрешенийПередПрименением = Состояние.ОчисткаРазрешенийПередПрименением; + +КонецПроцедуры + +// Фиксирует в ИБ факт применения запросов на использование внешних ресурсов. +// +Процедура ЗавершитьПрименениеЗапросовНаИспользованиеВнешнихРесурсов() Экспорт + + НачатьТранзакцию(); + + Попытка + + Если ТребуетсяЗаписьРазрешенийВРегистр() Тогда + + Если ОчисткаРазрешенийПередПрименением Тогда + + Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ОчиститьПредоставленныеРазрешения(, Ложь); + + КонецЕсли; + + Для Каждого Удаляемые Из ДельтаВРазрезеВладельцев.Удаляемые Цикл + + Для Каждого КлючИЗначение Из Удаляемые.Разрешения Цикл + + РегистрыСведений.РазрешенияНаИспользованиеВнешнихРесурсов.УдалитьРазрешение( + Удаляемые.ТипПрограммногоМодуля, + Удаляемые.ИдентификаторПрограммногоМодуля, + Удаляемые.ТипВладельца, + Удаляемые.ИдентификаторВладельца, + КлючИЗначение.Ключ, + ОбщегоНазначения.ОбъектXDTOИзСтрокиXML(КлючИЗначение.Значение)); + + КонецЦикла; + + КонецЦикла; + + Для Каждого Добавляемые Из ДельтаВРазрезеВладельцев.Добавляемые Цикл + + Для Каждого КлючИЗначение Из Добавляемые.Разрешения Цикл + + Дополнение = Добавляемые.ДополненияРазрешений.Получить(КлючИЗначение.Ключ); + Если Дополнение <> Неопределено Тогда + Дополнение = ОбщегоНазначения.ЗначениеИзСтрокиXML(Дополнение); + КонецЕсли; + + РегистрыСведений.РазрешенияНаИспользованиеВнешнихРесурсов.ДобавитьРазрешение( + Добавляемые.ТипПрограммногоМодуля, + Добавляемые.ИдентификаторПрограммногоМодуля, + Добавляемые.ТипВладельца, + Добавляемые.ИдентификаторВладельца, + КлючИЗначение.Ключ, + ОбщегоНазначения.ОбъектXDTOИзСтрокиXML(КлючИЗначение.Значение), + Дополнение); + + КонецЦикла; + + КонецЦикла; + + Для Каждого Описание Из ОперацииАдминистрирования Цикл + + ЭтоПрофильКонфигурации = (Описание.ТипПрограммногоМодуля = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка()); + + Если Описание.Операция = Перечисления.ОперацииАдминистрированияПрофилейБезопасности.Создание Тогда + + Если ЭтоПрофильКонфигурации Тогда + + Константы.ПрофильБезопасностиИнформационнойБазы.Установить(Описание.Имя); + + Иначе + + Менеджер = РегистрыСведений.РежимыПодключенияВнешнихМодулей.СоздатьМенеджерЗаписи(); + Менеджер.ТипПрограммногоМодуля = Описание.ТипПрограммногоМодуля; + Менеджер.ИдентификаторПрограммногоМодуля = Описание.ИдентификаторПрограммногоМодуля; + Менеджер.БезопасныйРежим = Описание.Имя; + Менеджер.Записать(); + + КонецЕсли; + + КонецЕсли; + + Если Описание.Операция = Перечисления.ОперацииАдминистрированияПрофилейБезопасности.Удаление Тогда + + Если ЭтоПрофильКонфигурации Тогда + + Константы.ПрофильБезопасностиИнформационнойБазы.Установить(""); + Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ОчиститьПредоставленныеРазрешения(); + + Иначе + + ПрограммныйМодуль = РаботаВБезопасномРежимеСлужебный.СсылкаИзРегистраРазрешений( + Описание.ТипПрограммногоМодуля, Описание.ИдентификаторПрограммногоМодуля); + Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ОчиститьПредоставленныеРазрешения( + ПрограммныйМодуль, Истина); + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + РегистрыСведений.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.УдалитьЗапросы(ИдентификаторыЗапросов); + РегистрыСведений.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.ОчиститьНеактуальныеЗапросы(); + + ЗафиксироватьТранзакцию(); + + РазблокироватьДанныеДляРедактирования(Семафор()); + + Исключение + + ОтменитьТранзакцию(); + ВызватьИсключение; + + КонецПопытки; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + // Рассчитывает результат применения запросов в разрезе владельцев. // Процедура РассчитатьРезультатПримененияЗапросовВРазрезеВладельцев() @@ -819,130 +1141,6 @@ КонецПроцедуры -// Проверяет необходимость применения разрешений в кластере серверов. -// -// Возвращаемое значение: Булево. -// -Функция ТребуетсяПрименениеРазрешенийВКластереСерверов() Экспорт - - Если ДельтаБезУчетаВладельцев.Добавляемые.Количество() > 0 Тогда - Возврат Истина; - КонецЕсли; - - Если ДельтаБезУчетаВладельцев.Удаляемые.Количество() > 0 Тогда - Возврат Истина; - КонецЕсли; - - Для Каждого ОперацияАдминистрирования Из ОперацииАдминистрирования Цикл - Если ОперацияАдминистрирования.Операция = Перечисления.ОперацииАдминистрированияПрофилейБезопасности.Удаление Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - - Возврат Ложь; - -КонецФункции - -// Проверяет необходимости записи разрешений в регистры. -// -// Возвращаемое значение: Булево. -// -Функция ТребуетсяЗаписьРазрешенийВРегистр() Экспорт - - Если ДельтаВРазрезеВладельцев.Добавляемые.Количество() > 0 Тогда - Возврат Истина; - КонецЕсли; - - Если ДельтаВРазрезеВладельцев.Удаляемые.Количество() > 0 Тогда - Возврат Истина; - КонецЕсли; - - Для Каждого ОперацияАдминистрирования Из ОперацииАдминистрирования Цикл - Если ОперацияАдминистрирования.Операция = Перечисления.ОперацииАдминистрированияПрофилейБезопасности.Удаление Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - - Возврат Ложь; - -КонецФункции - -// Возвращает представление запросов разрешений на использование внешних ресурсов. -// -// Параметры: -// КакТребуемые - Булево - представление формируется как список разрешений, а не как список операций -// при изменении разрешений. -// -// Возвращаемое значение: ТабличныйДокумент. -// -Функция Представление(Знач КакТребуемые = Ложь) Экспорт - - Возврат Отчеты.ИспользуемыеВнешниеРесурсы.ПредставлениеЗапросовРазрешенийНаИспользованиеВнешнихРесурсов( - ОперацииАдминистрирования, - ДельтаБезУчетаВладельцев.Добавляемые, - ДельтаБезУчетаВладельцев.Удаляемые, - КакТребуемые); - -КонецФункции - -// Возвращает сценарий применения запросов разрешений на использование внешних ресурсов. -// -// Возвращаемое значение: Массив(Структура), поля структуры: -// * Операция - ПеречислениеСсылка.ОперацииАдминистрированияПрофилейБезопасности, -// * Профиль - Строка - имя профиля безопасности, -// * Разрешения - Структура - см. -// АдминистрированиеКластераКлиентСервер.СвойстваПрофиляБезопасности(). -// -Функция СценарийПрименения() Экспорт - - Результат = Новый Массив(); - - Для Каждого Описание Из ОперацииАдминистрирования Цикл - - ЭлементРезультата = Новый Структура("Операция,Профиль,Разрешения"); - ЭлементРезультата.Операция = Описание.Операция; - ЭлементРезультата.Профиль = Описание.Имя; - ЭлементРезультата.Разрешения = ПрофильВНотацииИнтерфейсаАдминистрированияКластера(ЭлементРезультата.Профиль, Описание.ТипПрограммногоМодуля, Описание.ИдентификаторПрограммногоМодуля); - - ЭтоПрофильКонфигурации = (Описание.ТипПрограммногоМодуля = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка()); - - Если ЭтоПрофильКонфигурации Тогда - - ПриоритетДополнительнойОперации = Ложь; - - Если Описание.Операция = Перечисления.ОперацииАдминистрированияПрофилейБезопасности.Создание Тогда - ДополнительнаяОперация = Перечисления.ОперацииАдминистрированияПрофилейБезопасности.Назначение; - КонецЕсли; - - Если Описание.Операция = Перечисления.ОперацииАдминистрированияПрофилейБезопасности.Удаление Тогда - ДополнительнаяОперация = Перечисления.ОперацииАдминистрированияПрофилейБезопасности.УдалениеНазначения; - ПриоритетДополнительнойОперации = Истина; - КонецЕсли; - - ДополнительныйЭлемент = Новый Структура("Операция,Профиль,Разрешения", ДополнительнаяОперация, Описание.Имя); - - КонецЕсли; - - Если ЭтоПрофильКонфигурации И ПриоритетДополнительнойОперации Тогда - - Результат.Добавить(ДополнительныйЭлемент); - - КонецЕсли; - - Результат.Добавить(ЭлементРезультата); - - Если ЭтоПрофильКонфигурации И Не ПриоритетДополнительнойОперации Тогда - - Результат.Добавить(ДополнительныйЭлемент); - - КонецЕсли; - - КонецЦикла; - - Возврат Результат; - -КонецФункции - // Формирует описание профиля безопасности в нотации программного интерфейса администрирования // кластера серверов. // @@ -1068,43 +1266,6 @@ КонецФункции -// Формирует описание профиля безопасности для информационной базы или внешнего модуля. -// -// Параметры: -// ВнешнийМодуль - ЛюбаяСсылка - ссылка на элемент справочника, использующийся в -// качестве внешнего модуля. -// -// Возвращаемое значение: -// Строка - описание профиля безопасности. -// -Функция НовоеОписаниеПрофиляБезопасности(Знач ТипПрограммногоМодуля, Знач ИдентификаторПрограммногоМодуля) Экспорт - - Шаблон = НСтр("ru = '[ИБ %1] %2 ""%3""'"); - - ИмяИБ = ""; - СтрокаСоединения = СтрокаСоединенияИнформационнойБазы(); - Подстроки = СтрРазделить(СтрокаСоединения, ";"); - Для Каждого Подстрока Из Подстроки Цикл - Если СтрНачинаетсяС(Подстрока, "Ref") Тогда - ИмяИБ = СтрЗаменить(Прав(Подстрока, СтрДлина(Подстрока) - 4), """", ""); - КонецЕсли; - КонецЦикла; - Если ПустаяСтрока(ИмяИБ) Тогда - ВызватьИсключение НСтр("ru = 'Строка соединения информационной базы не содержит имени информационной базы!'"); - КонецЕсли; - - Если ТипПрограммногоМодуля = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка() Тогда - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ИмяИБ, - НСтр("ru = 'Профиль безопасности для информационной базы'"), СтрокаСоединенияИнформационнойБазы()); - Иначе - ПрограммныйМодуль = РаботаВБезопасномРежимеСлужебный.СсылкаИзРегистраРазрешений(ТипПрограммногоМодуля, ИдентификаторПрограммногоМодуля); - Словарь = РаботаВБезопасномРежимеСлужебный.МенеджерВнешнегоМодуля(ПрограммныйМодуль).СловарьКонтейнераВнешнегоМодуля(); - НаименованиеМодуля = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПрограммныйМодуль, "Наименование"); - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ИмяИБ, Словарь.Именительный, НаименованиеМодуля); - КонецЕсли; - -КонецФункции - // Возвращает физические пути стандартных виртуальных каталогов. // // Возвращаемое значение - Соответствие: @@ -1135,163 +1296,6 @@ КонецФункции -// Сериализует внутреннее состояние объекта. -// -// Возвращаемое значение - Строка. -// -Функция ЗаписатьСостояниеВСтрокуXML() Экспорт - - Состояние = Новый Структура(); - - Состояние.Вставить("ИсходныйСрезРазрешенийВРазрезеВладельцев", ИсходныйСрезРазрешенийВРазрезеВладельцев); - Состояние.Вставить("РезультатПримененияЗапросовВРазрезеВладельцев", РезультатПримененияЗапросовВРазрезеВладельцев); - Состояние.Вставить("ДельтаВРазрезеВладельцев", ДельтаВРазрезеВладельцев); - Состояние.Вставить("ИсходныйСрезРазрешенийБезУчетаВладельцев", ИсходныйСрезРазрешенийБезУчетаВладельцев); - Состояние.Вставить("РезультатПримененияЗапросовБезУчетаВладельцев", РезультатПримененияЗапросовБезУчетаВладельцев); - Состояние.Вставить("ДельтаБезУчетаВладельцев", ДельтаБезУчетаВладельцев); - Состояние.Вставить("ОперацииАдминистрирования", ОперацииАдминистрирования); - Состояние.Вставить("ИдентификаторыЗапросов", ИдентификаторыЗапросов); - Состояние.Вставить("ОчисткаРазрешенийПередПрименением", ОчисткаРазрешенийПередПрименением); - - Возврат ОбщегоНазначения.ЗначениеВСтрокуXML(Состояние); - -КонецФункции - -// Десериализует внутреннее состояние объекта. -// -// Параметры: -// СтрокаXML - Строка - результат, возвращенный функцией ЗаписатьСостояниеВСтрокуXML(). -// -Процедура ПрочитатьСостояниеИзСтрокиXML(Знач СтрокаXML) Экспорт - - Состояние = ОбщегоНазначения.ЗначениеИзСтрокиXML(СтрокаXML); - - ИсходныйСрезРазрешенийВРазрезеВладельцев = Состояние.ИсходныйСрезРазрешенийВРазрезеВладельцев; - РезультатПримененияЗапросовВРазрезеВладельцев = Состояние.РезультатПримененияЗапросовВРазрезеВладельцев; - ДельтаВРазрезеВладельцев = Состояние.ДельтаВРазрезеВладельцев; - ИсходныйСрезРазрешенийБезУчетаВладельцев = Состояние.ИсходныйСрезРазрешенийБезУчетаВладельцев; - РезультатПримененияЗапросовБезУчетаВладельцев = Состояние.РезультатПримененияЗапросовБезУчетаВладельцев; - ДельтаБезУчетаВладельцев = Состояние.ДельтаБезУчетаВладельцев; - ОперацииАдминистрирования = Состояние.ОперацииАдминистрирования; - ИдентификаторыЗапросов = Состояние.ИдентификаторыЗапросов; - ОчисткаРазрешенийПередПрименением = Состояние.ОчисткаРазрешенийПередПрименением; - -КонецПроцедуры - -// Фиксирует в ИБ факт применения запросов на использование внешних ресурсов. -// -Процедура ЗавершитьПрименениеЗапросовНаИспользованиеВнешнихРесурсов() Экспорт - - НачатьТранзакцию(); - - Попытка - - Если ТребуетсяЗаписьРазрешенийВРегистр() Тогда - - Если ОчисткаРазрешенийПередПрименением Тогда - - Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ОчиститьПредоставленныеРазрешения(, Ложь); - - КонецЕсли; - - Для Каждого Удаляемые Из ДельтаВРазрезеВладельцев.Удаляемые Цикл - - Для Каждого КлючИЗначение Из Удаляемые.Разрешения Цикл - - РегистрыСведений.РазрешенияНаИспользованиеВнешнихРесурсов.УдалитьРазрешение( - Удаляемые.ТипПрограммногоМодуля, - Удаляемые.ИдентификаторПрограммногоМодуля, - Удаляемые.ТипВладельца, - Удаляемые.ИдентификаторВладельца, - КлючИЗначение.Ключ, - ОбщегоНазначения.ОбъектXDTOИзСтрокиXML(КлючИЗначение.Значение)); - - КонецЦикла; - - КонецЦикла; - - Для Каждого Добавляемые Из ДельтаВРазрезеВладельцев.Добавляемые Цикл - - Для Каждого КлючИЗначение Из Добавляемые.Разрешения Цикл - - Дополнение = Добавляемые.ДополненияРазрешений.Получить(КлючИЗначение.Ключ); - Если Дополнение <> Неопределено Тогда - Дополнение = ОбщегоНазначения.ЗначениеИзСтрокиXML(Дополнение); - КонецЕсли; - - РегистрыСведений.РазрешенияНаИспользованиеВнешнихРесурсов.ДобавитьРазрешение( - Добавляемые.ТипПрограммногоМодуля, - Добавляемые.ИдентификаторПрограммногоМодуля, - Добавляемые.ТипВладельца, - Добавляемые.ИдентификаторВладельца, - КлючИЗначение.Ключ, - ОбщегоНазначения.ОбъектXDTOИзСтрокиXML(КлючИЗначение.Значение), - Дополнение); - - КонецЦикла; - - КонецЦикла; - - Для Каждого Описание Из ОперацииАдминистрирования Цикл - - ЭтоПрофильКонфигурации = (Описание.ТипПрограммногоМодуля = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка()); - - Если Описание.Операция = Перечисления.ОперацииАдминистрированияПрофилейБезопасности.Создание Тогда - - Если ЭтоПрофильКонфигурации Тогда - - Константы.ПрофильБезопасностиИнформационнойБазы.Установить(Описание.Имя); - - Иначе - - Менеджер = РегистрыСведений.РежимыПодключенияВнешнихМодулей.СоздатьМенеджерЗаписи(); - Менеджер.ТипПрограммногоМодуля = Описание.ТипПрограммногоМодуля; - Менеджер.ИдентификаторПрограммногоМодуля = Описание.ИдентификаторПрограммногоМодуля; - Менеджер.БезопасныйРежим = Описание.Имя; - Менеджер.Записать(); - - КонецЕсли; - - КонецЕсли; - - Если Описание.Операция = Перечисления.ОперацииАдминистрированияПрофилейБезопасности.Удаление Тогда - - Если ЭтоПрофильКонфигурации Тогда - - Константы.ПрофильБезопасностиИнформационнойБазы.Установить(""); - Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ОчиститьПредоставленныеРазрешения(); - - Иначе - - ПрограммныйМодуль = РаботаВБезопасномРежимеСлужебный.СсылкаИзРегистраРазрешений( - Описание.ТипПрограммногоМодуля, Описание.ИдентификаторПрограммногоМодуля); - Обработки.НастройкаРазрешенийНаИспользованиеВнешнихРесурсов.ОчиститьПредоставленныеРазрешения( - ПрограммныйМодуль, Истина); - - КонецЕсли; - - КонецЕсли; - - КонецЦикла; - - КонецЕсли; - - РегистрыСведений.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.УдалитьЗапросы(ИдентификаторыЗапросов); - РегистрыСведений.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов.ОчиститьНеактуальныеЗапросы(); - - ЗафиксироватьТранзакцию(); - - РазблокироватьДанныеДляРедактирования(Семафор()); - - Исключение - - ОтменитьТранзакцию(); - ВызватьИсключение; - - КонецПопытки; - -КонецПроцедуры - // Возвращает семафор применения запросов на использование внешних ресурсов. // // Возвращаемое значение - РегистрСведенийКлючЗаписи.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов. @@ -1307,7 +1311,7 @@ #КонецОбласти -#Область ИнициализацияОбъекта +#Область Инициализация ИдентификаторыЗапросов = Новый Массив(); diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Form.form b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Form.form index a7485f2a6..c1644ed1c 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Form.form +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Form.form @@ -13,8 +13,8 @@ Обычный 436 - ВыполнятьАвтоматическоеРезервноеКопирование1 - 440 + ВыполнятьАвтоматическоеРезервноеКопирование + 405 true true @@ -30,8 +30,8 @@ ВыполнятьАвтоматическоеРезервноеКопированиеПриИзменении - ВыполнятьАвтоматическоеРезервноеКопирование1РасширеннаяПодсказка - 442 + ВыполнятьАвтоматическоеРезервноеКопированиеРасширеннаяПодсказка + 407 <key>ru</key> <value>Рекомендуется отключать выполнение резервного копирования только @@ -45,8 +45,8 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ВыполнятьАвтоматическоеРезервноеКопирование1КонтекстноеМеню</name> - <id>441</id> + <name>ВыполнятьАвтоматическоеРезервноеКопированиеКонтекстноеМеню</name> + <id>406</id> <autoFill>true</autoFill> </contextMenu> <type>CheckBoxField</type> @@ -401,14 +401,15 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> <name>Базовый</name> <id>438</id> <items xsi:type="form:FormField"> - <name>ВыполнятьАвтоматическоеРезервноеКопирование</name> - <id>405</id> + <name>ВыполнятьАвтоматическоеРезервноеКопирование1</name> + <id>440</id> <title> <key>ru</key> <value>Предлагать резервное копирование при завершении работы</value> @@ -428,8 +429,8 @@ <name>ВыполнятьАвтоматическоеРезервноеКопированиеПриИзменении</name> </handlers> <extendedTooltip> - <name>ВыполнятьАвтоматическоеРезервноеКопированиеРасширеннаяПодсказка</name> - <id>407</id> + <name>ВыполнятьАвтоматическоеРезервноеКопирование1РасширеннаяПодсказка</name> + <id>442</id> <title> <key>ru</key> <value>Рекомендуется отключать выполнение резервного копирования только @@ -443,8 +444,8 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ВыполнятьАвтоматическоеРезервноеКопированиеКонтекстноеМеню</name> - <id>406</id> + <name>ВыполнятьАвтоматическоеРезервноеКопирование1КонтекстноеМеню</name> + <id>441</id> <autoFill>true</autoFill> </contextMenu> <type>CheckBoxField</type> @@ -477,6 +478,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -1285,6 +1287,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1629,6 +1632,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Module.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Module.bsl index 76d6342c0..45cd61f3d 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопирования/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ЗаписатьНастройки, МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -213,13 +217,13 @@ Если ПустаяСтрока(Объект.КаталогСРезервнымиКопиями) Тогда - ТекстСообщения = Нстр("ru = 'Не выбран каталог для резервной копии.'"); + ТекстСообщения = НСтр("ru = 'Не выбран каталог для резервной копии.'"); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, "Объект.КаталогСРезервнымиКопиями"); РеквизитыЗаполнены = Ложь; ИначеЕсли НайтиФайлы(Объект.КаталогСРезервнымиКопиями).Количество() = 0 Тогда - ТекстСообщения = Нстр("ru = 'Указан несуществующий каталог.'"); + ТекстСообщения = НСтр("ru = 'Указан несуществующий каталог.'"); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, "Объект.КаталогСРезервнымиКопиями"); РеквизитыЗаполнены = Ложь; @@ -231,7 +235,7 @@ ТестовыйФайл.ЗаписатьОбъявлениеXML(); ТестовыйФайл.Закрыть(); Исключение - ТекстСообщения = Нстр("ru = 'Нет доступа к каталогу с резервными копиями.'"); + ТекстСообщения = НСтр("ru = 'Нет доступа к каталогу с резервными копиями.'"); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, "Объект.КаталогСРезервнымиКопиями"); РеквизитыЗаполнены = Ложь; КонецПопытки; diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопированияКлиентСервер/Form.form b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопированияКлиентСервер/Form.form index b6dc54a8e..65b06649c 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопированияКлиентСервер/Form.form +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/НастройкаРезервногоКопированияКлиентСервер/Form.form @@ -48,7 +48,7 @@ <id>1</id> <title> <key>ru</key> - <value>В клиент-серверноем варианте работы необходимо настроить + <value>В клиент-серверном варианте работы необходимо настроить резервное копирование и восстановление данных средствами СУБД или другими сторонними средствами.</value> diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Help/ru.html b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Help/ru.html index 82922a6e0..a9650785d 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

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

        Ошибки при резервном копировании

        Если  резервное копирование завершилось неудачей, а во временном log-файле имеется запись: "Исключение в createConnection: Error, Automation server can't create object", то, скорее всего, используется 32-разрядная компонента comcntr.dll на компьютере под управлением 64-разрядной операционной системы. Для устранения данной проблемы необходимо взять 64-разрядную компоненту comcntr.dll из поставки 1С Предприятие x64 Сервер и зарегистрировать ее, запустив из командной строки:

        regsvr32 <каталог 64-разрядного comcntr.dll>\comcntr.dll

        -

        Важно: для того чтобы войти в информационную базу, если резервное копирование не выполнилось, необходимо запустить 1С:Предприятие с параметрами: ENTERPRISE /F <путь к информационной базе> /CРазрешитьРаботуПользователей /UC РезервноеКопирование.

        +

        Важно: для того чтобы войти в информационную базу, если резервное копирование не выполнилось, необходимо запустить 1С:Предприятие с параметрами: ENTERPRISE /F <путь к информационной базе> /CРазрешитьРаботуПользователей /UC РезервноеКопирование.

        См. также:

        \ No newline at end of file +
      \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Module.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Module.bsl index e3479c5e7..7bb13b944 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаБезИнтервалов/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ОтветПередЗакрытием; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Form.form b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Form.form index 0fb447a51..ace213212 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Form.form +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Form.form @@ -204,6 +204,7 @@ Page auto + false true diff --git a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Module.bsl b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Module.bsl index db80338a3..44238af7d 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияПриложения/Forms/НастройкаСИнтервалами/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ОтветПередЗакрытием; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Form.form index 10e7bf57f..daceb8c47 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Form.form +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Form.form @@ -665,6 +665,7 @@ Vertical auto + false @@ -1100,6 +1101,7 @@ Vertical auto + false @@ -1535,6 +1537,7 @@ Vertical auto + false true @@ -1625,8 +1628,6 @@ ПриЗакрытии CustomizeForm - 50 - 20 DontBlock Use true diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Help/ru.html b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Help/ru.html index 12923db9a..15aabf995 100644 --- a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Help/ru.html +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Help/ru.html @@ -1,4 +1,4 @@ - +

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

      Список состоит из трех вкладок:

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

      @@ -31,6 +31,8 @@ TD {
    • Регламентные и фоновые задания
    • +
    • Журнал регистрации
    • Просмотр событий и действий, которые происходили в регламентных заданиях или в процессе работы пользователей в программе.
      Настройка, выполнение и отслеживание состояний регламентных и фоновых заданий. Регламентные задания автоматически выполняют регламентные операции по расписанию.
      +
    • Разблокировать работу с внешними ресурсами
    • С помощью кнопки можно снять блокировку регламентных заданий по работе с внешними ресурсами. Она автоматически устанавливается, если изменилось местоположение ИБ в связи с копированием или восстановлением из резервной копии.
    • Управление итогами и агрегатами
    • Управление итогами регистров накопления и бухгалтерии и агрегатами оборотных регистров. Правильная настройка итогов и агрегатов может повысить производительность программы.
      diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Module.bsl index 39cdfce2b..7d935689a 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоддержкаИОбслуживание/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ОбновитьИнтерфейс; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -14,26 +18,30 @@ РежимРаботы = Новый ФиксированнаяСтруктура(РежимРаботы); // СтандартныеПодсистемы.УдалениеПомеченныхОбъектов - Если Не РежимРаботы.МодельСервиса И РежимРаботы.ЭтоАдминистраторСистемы Тогда - РегламентноеЗадание = РегламентныеЗаданияНайтиПредопределенное("УдалениеПомеченных"); - Если РегламентноеЗадание <> Неопределено Тогда - УдалениеПомеченныхИдентификатор = РегламентноеЗадание.УникальныйИдентификатор; - УдалениеПомеченныхИспользование = РегламентноеЗадание.Использование; - УдалениеПомеченныхРасписание = РегламентноеЗадание.Расписание; - Иначе - Элементы.ГруппаУдалениеПомеченныхОбъектовПоРасписанию.Видимость = Ложь; - КонецЕсли; - Иначе - Элементы.ГруппаУдалениеПомеченныхОбъектовПоРасписанию.Видимость = Ложь; + РегламентноеЗадание = РегламентныеЗаданияНайтиПредопределенное("УдалениеПомеченных"); + ВидимостьФлажка = (РегламентноеЗадание <> Неопределено); + Если ВидимостьФлажка Тогда + УдалениеПомеченныхИдентификатор = РегламентноеЗадание.УникальныйИдентификатор; + УдалениеПомеченныхИспользование = РегламентноеЗадание.Использование; + УдалениеПомеченныхРасписание = РегламентноеЗадание.Расписание; КонецЕсли; + ВидимостьРасписания = ВидимостьФлажка И Не РежимРаботы.МодельСервиса И РежимРаботы.ЭтоАдминистраторСистемы; + Элементы.УдалениеПомеченныхИспользование.Видимость = ВидимостьФлажка; + Элементы.УдалениеПомеченныхНастроитьРасписание.Видимость = ВидимостьРасписания; + Элементы.УдалениеПомеченныхПредставлениеРасписания.Видимость = ВидимостьРасписания; // Конец СтандартныеПодсистемы.УдалениеПомеченныхОбъектов + // СтандартныеПодсистемы.РегламентныеЗадания + Элементы.ГруппаБлокировкаРаботыСВнешнимиРесурсами.Видимость = РегламентныеЗаданияСервер.РаботаСВнешнимиРесурсамиЗаблокирована(); + // Конец СтандартныеПодсистемы.РегламентныеЗадания + // СтандартныеПодсистемы.РегламентныеЗадания Элементы.ГруппаОбработкаРегламентныеИФоновыеЗадания.Видимость = РежимРаботы.ЭтоАдминистраторСистемы; // Конец СтандартныеПодсистемы.РегламентныеЗадания // СтандартныеПодсистемы.УправлениеИтогамиИАгрегатами - Элементы.ГруппаОбработкаУправлениеИтогамиИАгрегатамиОткрыть.Видимость = РежимРаботы.ЭтоАдминистраторПрограммы; + Элементы.ГруппаОбработкаУправлениеИтогамиИАгрегатамиОткрыть.Видимость = РежимРаботы.ЭтоАдминистраторПрограммы + И (РежимРаботы.Локальный Или РежимРаботы.Автономный); // Конец СтандартныеПодсистемы.УправлениеИтогамиИАгрегатами // СтандартныеПодсистемы.ПолнотекстовыйПоиск @@ -41,16 +49,9 @@ // Конец СтандартныеПодсистемы.ПолнотекстовыйПоиск // СтандартныеПодсистемы.РезервноеКопированиеИБ - ПоддержкаРезервногоКопированияВМоделиСервиса = Истина; - // СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных - ПоддержкаРезервногоКопированияВМоделиСервиса = РезервноеКопированиеОбластейДанных.РезервноеКопированиеИспользуется(); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных - Элементы.ГруппаРезервноеКопированиеИВосстановление.Видимость = ((РежимРаботы.Локальный Или РежимРаботы.Автономный) И РежимРаботы.ЭтоАдминистраторСистемы - И Не РежимРаботы.ЭтоВебКлиент) ИЛИ (РежимРаботы.МодельСервиса И РежимРаботы.ЭтоАдминистраторПрограммы И ПоддержкаРезервногоКопированияВМоделиСервиса); + Элементы.ГруппаРезервноеКопированиеИВосстановление.Видимость = ((РежимРаботы.Локальный Или РежимРаботы.Автономный) И РежимРаботы.ЭтоАдминистраторСистемы + И Не РежимРаботы.ЭтоВебКлиент И Не РежимРаботы.ЭтоLinuxКлиент); ОбновитьНастройкиРезервногоКопирования(); - Элементы.ГруппаВосстановлениеРезервнойКопии.Видимость = (РежимРаботы.Локальный Или РежимРаботы.Автономный) И РежимРаботы.ЭтоАдминистраторСистемы; - Элементы.ГруппаВосстановлениеРезервнойКопииВМоделиСервиса.Видимость = РежимРаботы.МодельСервиса И РежимРаботы.ЭтоАдминистраторПрограммы - И ПоддержкаРезервногоКопированияВМоделиСервиса; // Конец СтандартныеПодсистемы.РезервноеКопированиеИБ Элементы.ГруппаКлассификаторы.Видимость = РежимРаботы.Локальный Или РежимРаботы.Автономный; @@ -89,11 +90,11 @@ // СтандартныеПодсистемы.РаботаСКонтрагентами Элементы.ГруппаПроверкаКонтрагентов.Видимость = РежимРаботы.ЭтоАдминистраторСистемы; - Если РежимРаботы.ЭтоАдминистраторСистемы Тогда + + Если Элементы.ГруппаПроверкаКонтрагентов.Видимость Тогда ПроверкаКонтрагентов.УстановитьВидимостьИЗаголовокПредупрежденияПроТестовыйРежим( Элементы.ПредупреждениеПроТестовыйРежимПроверкиКонтрагента); - ОпределитьНастройкиРегламентногоЗаданияПроверкиКонтрагентов(); КонецЕсли; // Конец СтандартныеПодсистемы.РаботаСКонтрагентами @@ -183,13 +184,6 @@ &НаКлиенте Процедура РезервноеКопированиеПрограммыНажатие(Элемент) - // СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных - Если РежимРаботы.МодельСервиса Тогда - ОткрытьФорму("ОбщаяФорма.СозданиеРезервнойКопии", , ЭтотОбъект); - Возврат; - КонецЕсли; - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных - ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма", , ЭтотОбъект); КонецПроцедуры @@ -197,13 +191,6 @@ &НаКлиенте Процедура НастройкаРезервногоКопированияНажатие(Элемент) - // СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных - Если РежимРаботы.МодельСервиса Тогда - ОткрытьФорму("Обработка.НастройкаРезервногоКопированияПриложения.Форма", , ЭтотОбъект); - Возврат; - КонецЕсли; - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных - ОткрытьФорму(РезервноеКопированиеИБКлиент.ИмяФормыНастроекРезервногоКопирования(),, ЭтотОбъект); КонецПроцедуры @@ -239,18 +226,11 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.АдресныйКлассификатор -// СтандартныеПодсистемы.РаботаСКонтрагентами -&НаКлиенте -Процедура АвтоматическаяПроверкаИспользованиеПриИзменении(Элемент) - РегламентныеЗаданияИспользованиеПриИзменении("АвтоматическиПроверятьКонтрагентов"); -КонецПроцедуры -// Конец СтандартныеПодсистемы.РаботаСКонтрагентами - // СтандартныеПодсистемы.РаботаСКонтрагентами &НаКлиенте Процедура ИспользоватьПроверкуКонтрагентовПриИзменении(Элемент) - ИспользоватьПроверкуКонтрагентовПриИзмененииСервер(Элемент.Имя); + Подключаемый_ПриИзмененииРеквизита(Элемент); КонецПроцедуры // Конец СтандартныеПодсистемы.РаботаСКонтрагентами @@ -292,7 +272,7 @@ КонецЕсли; Исключение // Внимание, формат адреса должен соответствовать RFC 3986 - // см. описание функции ОбщегоНазначенияКлиентСервер.СтруктураURI + // см. описание функции ОбщегоНазначенияКлиентСервер.СтруктураURI. ОписаниеОшибки = НСтр("ru = 'Адрес сервиса'") + " " + ЦентрМониторингаАдресСервиса + " " + НСтр("ru = 'не является допустимым адресом веб-сервиса для отправки отчетов об использовании программы.'"); @@ -313,14 +293,21 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.УдалениеПомеченныхОбъектов -// СтандартныеПодсистемы.БазоваяФункциональность +// СтандартныеПодсистемы.ПоискИУдалениеДублей &НаКлиенте Процедура ПоискИУдалениеДублей(Команда) ОткрытьФорму("Обработка.ПоискИУдалениеДублей.Форма.ПоискДублей"); КонецПроцедуры -// Конец СтандартныеПодсистемы.БазоваяФункциональность +// Конец СтандартныеПодсистемы.ПоискИУдалениеДублей + +// СтандартныеПодсистемы.РегламентныеЗадания +&НаКлиенте +Процедура РазблокироватьРаботуСВнешнимиРесурсами(Команда) + РазблокироватьРаботуСВнешнимиРесурсамиНаСервере(); +КонецПроцедуры +// Конец СтандартныеПодсистемы.РегламентныеЗадания // СтандартныеПодсистемы.ВерсионированиеОбъектов &НаКлиенте @@ -367,15 +354,6 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.РаботаСКонтрагентами -// СтандартныеПодсистемы.РаботаСКонтрагентами -&НаКлиенте -Процедура НастроитьРасписаниеПроверкиКонтрагентов(Команда) - - РегламентныеЗаданияГиперссылкаНажатие("АвтоматическиПроверятьКонтрагентов"); - -КонецПроцедуры -// Конец СтандартныеПодсистемы.РаботаСКонтрагентами - // СтандартныеПодсистемы.ОбновлениеВерсииИБ &НаКлиенте Процедура ОтложеннаяОбработкаДанных(Команда) @@ -384,6 +362,15 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ +// СтандартныеПодсистемы.ДатыЗапретаИзменения +&НаКлиенте +Процедура НастроитьДатыЗапретаИзменения(Команда) + + ОткрытьФорму("РегистрСведений.ДатыЗапретаИзменения.Форма.ДатыЗапретаИзменения"); + +КонецПроцедуры +// Конец СтандартныеПодсистемы.ДатыЗапретаИзменения + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -394,14 +381,18 @@ &НаКлиенте Процедура Подключаемый_ПриИзмененииРеквизита(Элемент, НеобходимоОбновлятьИнтерфейс = Истина) - Результат = ПриИзмененииРеквизитаСервер(Элемент.Имя); + КонстантаИмя = ПриИзмененииРеквизитаСервер(Элемент.Имя); + + ОбновитьПовторноИспользуемыеЗначения(); Если НеобходимоОбновлятьИнтерфейс Тогда ОбновитьИнтерфейс = Истина; ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 2, Истина); КонецЕсли; - СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); + Если КонстантаИмя <> "" Тогда + Оповестить("Запись_НаборКонстант", Новый Структура, КонстантаИмя); + КонецЕсли; КонецПроцедуры @@ -420,16 +411,18 @@ ИмяРеквизитаИспользование = ПрефиксРеквизитов + "Использование"; Идентификатор = ЭтотОбъект[ПрефиксРеквизитов + "Идентификатор"]; Если ЭтотОбъект[ИмяРеквизитаИспользование] Тогда - ПараметрыВыполнения = Новый Структура; - ПараметрыВыполнения.Вставить("Идентификатор", Идентификатор); - ПараметрыВыполнения.Вставить("ИмяРеквизитаРасписание", ПрефиксРеквизитов + "Расписание"); - ПараметрыВыполнения.Вставить("ИмяРеквизитаИспользование", ИмяРеквизитаИспользование); - - РегламентныеЗаданияИзменитьРасписание(ПараметрыВыполнения); - Иначе - Изменения = Новый Структура("Использование", Ложь); - РегламентныеЗаданияСохранить(Идентификатор, Изменения, ИмяРеквизитаИспользование); + ЭлементПредставление = Элементы.Найти(ПрефиксРеквизитов + "ПредставлениеРасписания"); + Если ЭлементПредставление = Неопределено Или ЭлементПредставление.Видимость Тогда + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("Идентификатор", Идентификатор); + ПараметрыВыполнения.Вставить("ИмяРеквизитаРасписание", ПрефиксРеквизитов + "Расписание"); + ПараметрыВыполнения.Вставить("ИмяРеквизитаИспользование", ИмяРеквизитаИспользование); + РегламентныеЗаданияИзменитьРасписание(ПараметрыВыполнения); + Возврат; + КонецЕсли; КонецЕсли; + Изменения = Новый Структура("Использование", ЭтотОбъект[ИмяРеквизитаИспользование]); + РегламентныеЗаданияСохранить(Идентификатор, Изменения, ИмяРеквизитаИспользование); КонецПроцедуры &НаКлиенте @@ -473,23 +466,21 @@ &НаСервере Функция ПриИзмененииРеквизитаСервер(ИмяЭлемента) - Результат = Новый Структура; РеквизитПутьКДанным = Элементы[ИмяЭлемента].ПутьКДанным; - СохранитьЗначениеРеквизита(РеквизитПутьКДанным, Результат); + КонстантаИмя = СохранитьЗначениеРеквизита(РеквизитПутьКДанным); УстановитьДоступность(РеквизитПутьКДанным); + ОбновитьПовторноИспользуемыеЗначения(); - Возврат Результат; + Возврат КонстантаИмя; + КонецФункции &НаСервере Процедура РегламентныеЗаданияСохранить(УникальныйИдентификатор, Изменения, РеквизитПутьКДанным) - РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(УникальныйИдентификатор); - ЗаполнитьЗначенияСвойств(РегламентноеЗадание, Изменения); - РегламентноеЗадание.Записать(); - + РегламентныеЗаданияСервер.ИзменитьЗадание(УникальныйИдентификатор, Изменения); Если РеквизитПутьКДанным <> Неопределено Тогда УстановитьДоступность(РеквизитПутьКДанным); КонецЕсли; @@ -499,33 +490,47 @@ // Сервер &НаСервере -Процедура СохранитьЗначениеРеквизита(РеквизитПутьКДанным, Результат) +Функция СохранитьЗначениеРеквизита(РеквизитПутьКДанным) // Сохранение значений реквизитов, не связанных с константами напрямую. Если РеквизитПутьКДанным = "" Тогда - Возврат; + Возврат ""; КонецЕсли; - // Определение имени и запись значения реквизита в соответствующей константе из "НаборКонстант". - // Используется для тех реквизитов формы, которые связаны с константами напрямую. - + // Определение имени константы. + КонстантаИмя = ""; Если НРег(Лев(РеквизитПутьКДанным, 14)) = НРег("НаборКонстант.") Тогда + // Если путь к данным реквизита указан через "НаборКонстант". КонстантаИмя = Сред(РеквизитПутьКДанным, 15); + Иначе + // Определение имени и запись значения реквизита в соответствующей константе из "НаборКонстант". + // Используется для тех реквизитов формы, которые связаны с константами напрямую (в отношении один-к-одному). + КонецЕсли; + + // Сохранения значения константы. + Если НРег(Лев(РеквизитПутьКДанным, 14)) = НРег("НаборКонстант.") Тогда КонстантаМенеджер = Константы[КонстантаИмя]; КонстантаЗначение = НаборКонстант[КонстантаИмя]; Если КонстантаМенеджер.Получить() <> КонстантаЗначение Тогда - КонстантаМенеджер.Установить(КонстантаЗначение); + + Если КонстантаИмя = "ИспользоватьПроверкуКонтрагентов" Тогда + + // СтандартныеПодсистемы.РаботаСКонтрагентами + ВключитьПроверку = КонстантаЗначение = 1; + ПроверкаКонтрагентовВызовСервера.ПриВключенииВыключенииПроверки(ВключитьПроверку); + // Конец СтандартныеПодсистемы.РаботаСКонтрагентами + + Иначе + КонстантаМенеджер.Установить(КонстантаЗначение); + КонецЕсли; + КонецЕсли; - - СтандартныеПодсистемыКлиентСервер.ОповеститьОткрытыеФормы(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); - - // СтандартныеПодсистемы.ВариантыОтчетов - ВариантыОтчетов.ДобавитьОповещениеПриИзмененииЗначенияКонстанты(Результат, КонстантаМенеджер); - // Конец СтандартныеПодсистемы.ВариантыОтчетов КонецЕсли; -КонецПроцедуры + Возврат КонстантаИмя; + +КонецФункции &НаСервере Процедура УстановитьДоступность(РеквизитПутьКДанным = "") @@ -556,19 +561,19 @@ // Конец СтандартныеПодсистемы.ОценкаПроизводительности // СтандартныеПодсистемы.УдалениеПомеченныхОбъектов - Если Элементы.ГруппаУдалениеПомеченныхОбъектовПоРасписанию.Видимость + Если Элементы.УдалениеПомеченныхНастроитьРасписание.Видимость И (РеквизитПутьКДанным = "УдалениеПомеченныхРасписание" Или РеквизитПутьКДанным = "УдалениеПомеченныхИспользование" Или РеквизитПутьКДанным = "") Тогда - Элементы.УдалениеПомеченныхНастроитьРасписание.Доступность = УдалениеПомеченныхИспользование; - Элементы.ПояснениеУдалениеПомеченныхОбъектовПоРасписанию.Видимость = УдалениеПомеченныхИспользование; + Элементы.УдалениеПомеченныхНастроитьРасписание.Доступность = УдалениеПомеченныхИспользование; + Элементы.УдалениеПомеченныхПредставлениеРасписания.Видимость = УдалениеПомеченныхИспользование; Если УдалениеПомеченныхИспользование Тогда РасписаниеПредставление = Строка(УдалениеПомеченныхРасписание); Представление = ВРег(Лев(РасписаниеПредставление, 1)) + Сред(РасписаниеПредставление, 2); Иначе Представление = НСтр("ru = '<Отключено>'"); КонецЕсли; - Элементы.ПояснениеУдалениеПомеченныхОбъектовПоРасписанию.Заголовок = Представление; + Элементы.УдалениеПомеченныхПредставлениеРасписания.Заголовок = Представление; КонецЕсли; // Конец СтандартныеПодсистемы.УдалениеПомеченныхОбъектов @@ -583,7 +588,7 @@ НаборКонстант.ИспользоватьВерсионированиеОбъектов); КонецЕсли; // Конец СтандартныеПодсистемы.ВерсионированиеОбъектов - + // СтандартныеПодсистемы.АдресныйКлассификатор Если РеквизитПутьКДанным = "НаборКонстант.ИсточникДанныхАдресногоКлассификатора" Или РеквизитПутьКДанным = "" Тогда @@ -593,38 +598,6 @@ КонецЕсли; // Конец СтандартныеПодсистемы.АдресныйКлассификатор - // СтандартныеПодсистемы.РаботаСКонтрагентами - Если РежимРаботы.МодельСервиса Тогда - Элементы.АвтоматическиПроверятьКонтрагентовИспользование.Видимость = Ложь; - Элементы.АвтоматическиПроверятьКонтрагентовПояснение.Видимость = Ложь; - Элементы.НастроитьРасписаниеПроверкиКонтрагентов.Видимость = Ложь; - Иначе - Если РеквизитПутьКДанным = "АвтоматическиПроверятьКонтрагентовРасписание" - Или РеквизитПутьКДанным = "АвтоматическиПроверятьКонтрагентовИспользование" - Или РеквизитПутьКДанным = "НаборКонстант.ИспользоватьПроверкуКонтрагентов" - Или РеквизитПутьКДанным = "" Тогда - - // Настройка регламентного задания - ИспользоватьСервисПроверкиКонтрагентов = ПроверкаКонтрагентов.ПроверкаКонтрагентовВключена(); - - Элементы.АвтоматическиПроверятьКонтрагентовИспользование.Доступность = ИспользоватьСервисПроверкиКонтрагентов; - Элементы.АвтоматическиПроверятьКонтрагентовПояснение.Видимость = ИспользоватьСервисПроверкиКонтрагентов; - Элементы.НастроитьРасписаниеПроверкиКонтрагентов.Доступность = ИспользоватьСервисПроверкиКонтрагентов - И АвтоматическиПроверятьКонтрагентовИспользование; - - Если ИспользоватьСервисПроверкиКонтрагентов Тогда - РасписаниеПредставление = Строка(АвтоматическиПроверятьКонтрагентовРасписание); - Представление = ВРег(Лев(РасписаниеПредставление, 1)) + Сред(РасписаниеПредставление, 2); - Иначе - Представление = НСтр("ru = '<Отключено>'"); - КонецЕсли; - - Элементы.АвтоматическиПроверятьКонтрагентовПояснение.Заголовок = Представление; - - КонецЕсли; - КонецЕсли; - // Конец СтандартныеПодсистемы.РаботаСКонтрагентами - КонецПроцедуры // СтандартныеПодсистемы.РезервноеКопированиеИБ @@ -640,47 +613,15 @@ &НаСервере Функция РегламентныеЗаданияНайтиПредопределенное(ИмяПредопределенного) - МетаданныеПредопределенного = Метаданные.РегламентныеЗадания.Найти(ИмяПредопределенного); - Если МетаданныеПредопределенного = Неопределено Тогда - Возврат Неопределено; - Иначе - Возврат РегламентныеЗадания.НайтиПредопределенное(МетаданныеПредопределенного); + Фильтр = Новый Структура("Метаданные", ИмяПредопределенного); + Найденные = РегламентныеЗаданияСервер.НайтиЗадания(Фильтр); + Задание = ?(Найденные.Количество() = 0, Неопределено, Найденные[0]); + Если ТипЗнч(Задание) = Тип("СтрокаТаблицыЗначений") Тогда + Задание.Владелец().Колонки.Идентификатор.Имя = "УникальныйИдентификатор"; КонецЕсли; + Возврат Задание; КонецФункции -// СтандартныеПодсистемы.РаботаСКонтрагентами -&НаСервере -Процедура ИспользоватьПроверкуКонтрагентовПриИзмененииСервер(ИмяЭлемента) - - Результат = Новый Структура; - РеквизитПутьКДанным = Элементы[ИмяЭлемента].ПутьКДанным; - - СохранитьЗначениеРеквизита(РеквизитПутьКДанным, Результат); - - ОпределитьНастройкиРегламентногоЗаданияПроверкиКонтрагентов(); - - УстановитьДоступность(РеквизитПутьКДанным); - ОбновитьПовторноИспользуемыеЗначения(); - - ПроверкаКонтрагентов.ЗапуститьФоновуюПроверкуКонтрагентовПослеИзмененияНастройкиПриНеобходимости(); - -КонецПроцедуры -// Конец СтандартныеПодсистемы.РаботаСКонтрагентами - -// СтандартныеПодсистемы.РаботаСКонтрагентами -&НаСервере -Процедура ОпределитьНастройкиРегламентногоЗаданияПроверкиКонтрагентов() - - РегламентноеЗадание = РегламентныеЗаданияНайтиПредопределенное("ПроверкаКонтрагентов"); - Если РегламентноеЗадание <> Неопределено Тогда - АвтоматическиПроверятьКонтрагентовИдентификатор = РегламентноеЗадание.УникальныйИдентификатор; - АвтоматическиПроверятьКонтрагентовИспользование = РегламентноеЗадание.Использование; - АвтоматическиПроверятьКонтрагентовРасписание = РегламентноеЗадание.Расписание; - КонецЕсли; - -КонецПроцедуры -// Конец СтандартныеПодсистемы.РаботаСКонтрагентами - // СтандартныеПодсистемы.ЦентрМониторинга &НаСервереБезКонтекста Функция ПолучитьПереключательОтправкиДанных(ВключитьЦентрМониторинга, ЦентрОбработкиИнформацииОПрограмме) @@ -704,11 +645,11 @@ &НаСервере Процедура УстановитьДоступностьЦентрМониторингаНаСервере(Параметр) Если Параметр = 0 Тогда - ЭтаФорма.Элементы.ЦентрМониторингаАдресСервиса.Доступность = Ложь; + Элементы.ЦентрМониторингаАдресСервиса.Доступность = Ложь; ИначеЕсли Параметр = 1 Тогда - ЭтаФорма.Элементы.ЦентрМониторингаАдресСервиса.Доступность = Истина; + Элементы.ЦентрМониторингаАдресСервиса.Доступность = Истина; ИначеЕсли Параметр = 2 Тогда - ЭтаФорма.Элементы.ЦентрМониторингаАдресСервиса.Доступность = Ложь; + Элементы.ЦентрМониторингаАдресСервиса.Доступность = Ложь; КонецЕсли; КонецПроцедуры // Конец СтандартныеПодсистемы.ЦентрМониторинга @@ -717,11 +658,11 @@ &НаКлиенте Процедура УстановитьДоступностьЦентрМониторингаНаКлиенте(Параметр) Если Параметр = 0 Тогда - ЭтаФорма.Элементы.ЦентрМониторингаАдресСервиса.Доступность = Ложь; + Элементы.ЦентрМониторингаАдресСервиса.Доступность = Ложь; ИначеЕсли Параметр = 1 Тогда - ЭтаФорма.Элементы.ЦентрМониторингаАдресСервиса.Доступность = Истина; + Элементы.ЦентрМониторингаАдресСервиса.Доступность = Истина; ИначеЕсли Параметр = 2 Тогда - ЭтаФорма.Элементы.ЦентрМониторингаАдресСервиса.Доступность = Ложь; + Элементы.ЦентрМониторингаАдресСервиса.Доступность = Ложь; КонецЕсли; КонецПроцедуры // Конец СтандартныеПодсистемы.ЦентрМониторинга @@ -818,4 +759,13 @@ МодульЦентрМониторингаСлужебный.УстановитьПараметрыЦентраМониторингаВнешнийВызов(ПараметрыЦентраМониторинга); КонецПроцедуры // Конец СтандартныеПодсистемы.ЦентрМониторинга + +// СтандартныеПодсистемы.РегламентныеЗадания +&НаСервере +Процедура РазблокироватьРаботуСВнешнимиРесурсамиНаСервере() + Элементы.ГруппаБлокировкаРаботыСВнешнимиРесурсами.Видимость = Ложь; + РегламентныеЗаданияСлужебный.РазрешитьРаботуСВнешнимиРесурсами(); +КонецПроцедуры +// Конец СтандартныеПодсистемы.РегламентныеЗадания + #КонецОбласти diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоискИУстановкаОбновлений/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоискИУстановкаОбновлений/Form.form index 7cf6f370f..cb74306b2 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоискИУстановкаОбновлений/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоискИУстановкаОбновлений/Form.form @@ -44,19 +44,11 @@ Декорация 50 - - <key>ru</key> - <value> </value> - true true true - - ru - - ДекорацияРасширеннаяПодсказка 52 @@ -114,14 +106,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - false false @@ -144,14 +128,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - ГруппаЗаголовокExtendedTooltip 46 @@ -255,14 +231,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - 43 false @@ -389,14 +357,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - ГруппаОбновлениеИОписаниеИзмененийПерваяСтрокаРасширеннаяПодсказка 4 @@ -736,14 +696,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - 43 false diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоискИУстановкаОбновлений/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоискИУстановкаОбновлений/Help/ru.html index aa7e6428c..fbebb215c 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 faab9f779..fe7b6dbe6 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоискИУстановкаОбновлений/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/ПоискИУстановкаОбновлений/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ОбновитьИнтерфейс; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -109,56 +113,65 @@ КонецПроцедуры &НаКлиенте -Процедура Подключаемый_ПриИзмененииРеквизита(Элемент, НеобходимоОбновлятьИнтерфейс = Истина) +Процедура Подключаемый_ПриИзмененииРеквизита(Элемент, ОбновлятьИнтерфейс = Истина) - Результат = ПриИзмененииРеквизитаСервер(Элемент.Имя); + КонстантаИмя = ПриИзмененииРеквизитаСервер(Элемент.Имя); - Если НеобходимоОбновлятьИнтерфейс Тогда + ОбновитьПовторноИспользуемыеЗначения(); + + Если ОбновлятьИнтерфейс Тогда ОбновитьИнтерфейс = Истина; ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 2, Истина); КонецЕсли; - СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); + Если КонстантаИмя <> "" Тогда + Оповестить("Запись_НаборКонстант", Новый Структура, КонстантаИмя); + КонецЕсли; КонецПроцедуры &НаСервере Функция ПриИзмененииРеквизитаСервер(ИмяЭлемента) - Результат = Новый Структура; РеквизитПутьКДанным = Элементы[ИмяЭлемента].ПутьКДанным; - СохранитьЗначениеРеквизита(РеквизитПутьКДанным, Результат); + КонстантаИмя = СохранитьЗначениеРеквизита(РеквизитПутьКДанным); ОбновитьПовторноИспользуемыеЗначения(); - Возврат Результат; + Возврат КонстантаИмя; КонецФункции &НаСервере -Процедура СохранитьЗначениеРеквизита(РеквизитПутьКДанным, Результат) +Функция СохранитьЗначениеРеквизита(РеквизитПутьКДанным) // Сохранение значений реквизитов, не связанных с константами напрямую. Если РеквизитПутьКДанным = "" Тогда - Возврат; + Возврат ""; КонецЕсли; - // Определение имени и запись значения реквизита в соответствующей константе из "НаборКонстант". - // Используется для тех реквизитов формы, которые связаны с константами напрямую. - + // Определение имени константы. + КонстантаИмя = ""; Если НРег(Лев(РеквизитПутьКДанным, 14)) = НРег("НаборКонстант.") Тогда + // Если путь к данным реквизита указан через "НаборКонстант". КонстантаИмя = Сред(РеквизитПутьКДанным, 15); + Иначе + // Определение имени и запись значения реквизита в соответствующей константе из "НаборКонстант". + // Используется для тех реквизитов формы, которые связаны с константами напрямую (в отношении один-к-одному). + КонецЕсли; + + // Сохранения значения константы. + Если КонстантаИмя <> "" Тогда КонстантаМенеджер = Константы[КонстантаИмя]; КонстантаЗначение = НаборКонстант[КонстантаИмя]; Если КонстантаМенеджер.Получить() <> КонстантаЗначение Тогда КонстантаМенеджер.Установить(КонстантаЗначение); КонецЕсли; - - СтандартныеПодсистемыКлиентСервер.ОповеститьОткрытыеФормы(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); - КонецЕсли; -КонецПроцедуры + Возврат КонстантаИмя; + +КонецФункции #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Form.form b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Form.form index be3d91210..2d8661a9c 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Form.form +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Form.form @@ -44,19 +44,11 @@ Декорация 139 - - <key>ru</key> - <value> </value> - true true true - - ru - - ДекорацияРасширеннаяПодсказка 141 @@ -114,14 +106,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - false false @@ -144,14 +128,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - ГруппаЗаголовокExtendedTooltip 135 @@ -443,14 +419,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - ГруппаКнопки1ExtendedTooltip 120 @@ -711,10 +679,6 @@ ИзвлечениеТекстаПредставление 107 - - <key>ru</key> - <value> </value> - true true @@ -754,14 +718,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - 55 false @@ -861,14 +817,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - 55 false @@ -896,14 +844,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - ГруппаСтроки1ExtendedTooltip 127 @@ -929,14 +869,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - ГруппаКолонки1ExtendedTooltip 125 @@ -965,10 +897,6 @@ ru Автоматическое извлечение текстов - - ru - - ГруппаАвтоматическоеИзвлечениеТекстовExtendedTooltip 123 diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html index 70e5348ee..ddeb571e6 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Help/ru.html @@ -4,7 +4,7 @@ TD { VERTICAL-ALIGN: top } - +

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

      Открывается по команде Управление полнотекстовым поиском раздела Администрирование - Поддержка и обслуживание - Регламентные операции.

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

      diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl index dd0160f84..8a1b20a76 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Forms/УправлениеПолнотекстовымПоискомИИзвлечениемТекстов/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ОбновитьИнтерфейс; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -12,13 +16,12 @@ // Значения реквизитов формы РежимРаботы = ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы(); РежимРаботы = Новый ФиксированнаяСтруктура(РежимРаботы); - СведенияОРегламентныхЗаданиях = Новый Структура; // Значения реквизитов формы ИзвлекатьТекстыФайловНаСервере = НаборКонстант.ИзвлекатьТекстыФайловНаСервере; // Настройки видимости при запуске. - Элементы.ГруппаАвтоматическоеИзвлечениеТекстов.Видимость = РежимРаботы.ЭтоАдминистраторСистемы; + Элементы.ГруппаАвтоматическоеИзвлечениеТекстов.Видимость = РежимРаботы.ЭтоАдминистраторСистемы И Не РежимРаботы.МодельСервиса; Если РежимРаботы.ЭтоАдминистраторПрограммы И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ФайловыеФункции") Тогда Если РежимРаботы.Файловый Тогда @@ -28,6 +31,11 @@ КонецЕсли; Иначе Элементы.ГруппаАвтоматическоеИзвлечениеТекстов.Видимость = Ложь; + КонецЕсли; + Если Элементы.ГруппаАвтоматическоеИзвлечениеТекстов.Видимость Тогда + СведенияОРегламентныхЗаданиях = Новый Структура; + ЗаполнитьСведенияОРегламентномЗадании("ИзвлечениеТекста"); + Иначе АвтоЗаголовок = Ложь; Заголовок = НСтр("ru = 'Управление полнотекстовым поиском'"); Элементы.ОписаниеРаздела.Заголовок = @@ -40,6 +48,7 @@ СтандартныеПодсистемыСервер.УстановитьОтображениеЗаголовковГрупп( ЭтотОбъект, "ГруппаАвтоматическоеИзвлечениеТекстов"); + КонецПроцедуры &НаКлиенте @@ -132,6 +141,8 @@ Результат = ПриИзмененииРеквизитаСервер(Элемент.Имя); + ОбновитьПовторноИспользуемыеЗначения(); + Если Результат.Свойство("НеУдалосьУстановитьРежимПолнотекстовогоПоиска") Тогда // Выдача предупреждающего сообщения. ТекстВопроса = НСтр("ru = 'Для изменения режима полнотекстового поиска требуется завершение сеансов всех пользователей, кроме текущего.'"); @@ -150,13 +161,15 @@ ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 2, Истина); КонецЕсли; - СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); + Если Результат.КонстантаИмя <> "" Тогда + Оповестить("Запись_НаборКонстант", Новый Структура, Результат.КонстантаИмя); + КонецЕсли; КонецПроцедуры &НаКлиенте Процедура РегламентныеЗаданияГиперссылкаНажатие(ИмяПредопределенного) - Сведения = СведенияОРегламентномЗадании(ЭтотОбъект, ИмяПредопределенного); + Сведения = СведенияОРегламентныхЗаданиях[ИмяПредопределенного]; Если Сведения.Идентификатор = Неопределено Тогда Возврат; КонецЕсли; @@ -226,11 +239,9 @@ &НаСервере Функция ПриИзмененииРеквизитаСервер(ИмяЭлемента) - Результат = Новый Структура; - РеквизитПутьКДанным = Элементы[ИмяЭлемента].ПутьКДанным; - СохранитьЗначениеРеквизита(РеквизитПутьКДанным, Результат); + Результат = СохранитьЗначениеРеквизита(РеквизитПутьКДанным); УстановитьДоступность(РеквизитПутьКДанным); @@ -246,17 +257,13 @@ &НаСервере Процедура РегламентныеЗаданияСохранить(ИмяПредопределенного, Изменения, УстановитьВидимостьДоступность) - Сведения = СведенияОРегламентномЗадании(ЭтотОбъект, ИмяПредопределенного); + Сведения = СведенияОРегламентныхЗаданиях[ИмяПредопределенного]; Если Сведения.Идентификатор = Неопределено Тогда Возврат; КонецЕсли; - РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Сведения.Идентификатор); - ЗаполнитьЗначенияСвойств(РегламентноеЗадание, Изменения); - РегламентноеЗадание.Записать(); - + РегламентныеЗаданияСервер.ИзменитьЗадание(Сведения.Идентификатор, Изменения); ЗаполнитьЗначенияСвойств(Сведения, Изменения); - СведенияОРегламентныхЗаданиях.Вставить("ИмяПредопределенного", Сведения); - + СведенияОРегламентныхЗаданиях.Вставить(ИмяПредопределенного, Сведения); Если УстановитьВидимостьДоступность Тогда УстановитьДоступность("РегламентноеЗадание." + ИмяПредопределенного); КонецЕсли; @@ -266,10 +273,12 @@ // Сервер &НаСервере -Процедура СохранитьЗначениеРеквизита(РеквизитПутьКДанным, Результат) +Функция СохранитьЗначениеРеквизита(РеквизитПутьКДанным) + Результат = Новый Структура("КонстантаИмя", ""); + // Сохранение значений реквизитов, не связанных с константами напрямую (в отношении один-к-одному). Если РеквизитПутьКДанным = "" Тогда - Возврат; + Возврат Результат; КонецЕсли; // Определение имени константы. @@ -293,12 +302,31 @@ ПолнотекстовыйПоиск.УстановитьРежимПолнотекстовогоПоиска(РежимПолнотекстовогоПоиска.Запретить); КонецЕсли; Исключение + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Полнотекстовый поиск'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка, + , + , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Результат.Вставить("НеУдалосьУстановитьРежимПолнотекстовогоПоиска", Истина); - Возврат; + Возврат Результат; КонецПопытки; КонстантаИмя = "ИспользоватьПолнотекстовыйПоиск"; НаборКонстант.ИспользоватьПолнотекстовыйПоиск = ИспользоватьПолнотекстовыйПоиск; - ОбновитьРегламентныеЗадания(); + // Включение/отключение зависимых регламентных заданий. + Изменения = Новый Структура("Использование", НаборКонстант.ИспользоватьПолнотекстовыйПоиск); + Задание = РегламентныеЗаданияНайтиПредопределенное("ОбновлениеИндексаППД"); + Если Задание <> Неопределено Тогда + РегламентныеЗаданияСервер.ИзменитьЗадание(Задание, Изменения); + КонецЕсли; + Задание = РегламентныеЗаданияНайтиПредопределенное("СлияниеИндексаППД"); + Если Задание <> Неопределено Тогда + РегламентныеЗаданияСервер.ИзменитьЗадание(Задание, Изменения); + КонецЕсли; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ФайловыеФункции") Тогда + Изменения.Использование = Изменения.Использование И НаборКонстант.ИзвлекатьТекстыФайловНаСервере; + РегламентныеЗаданияСохранить("ИзвлечениеТекста", Изменения, Ложь); + КонецЕсли; КонецЕсли; КонецЕсли; @@ -311,13 +339,11 @@ КонстантаМенеджер.Установить(КонстантаЗначение); КонецЕсли; - СтандартныеПодсистемыКлиентСервер.ОповеститьОткрытыеФормы(Результат, "Запись_НаборКонстант", Новый Структура, КонстантаИмя); - // СтандартныеПодсистемы.ВариантыОтчетов - ВариантыОтчетов.ДобавитьОповещениеПриИзмененииЗначенияКонстанты(Результат, КонстантаМенеджер); - // Конец СтандартныеПодсистемы.ВариантыОтчетов + Результат.КонстантаИмя = КонстантаИмя; КонецЕсли; -КонецПроцедуры + Возврат Результат; +КонецФункции &НаСервере Процедура УстановитьДоступность(РеквизитПутьКДанным = "", ИндексПроверен = Ложь) @@ -369,13 +395,14 @@ КонецЕсли; - Если РеквизитПутьКДанным = "" + Если Элементы.ГруппаАвтоматическоеИзвлечениеТекстов.Видимость + И (РеквизитПутьКДанным = "" Или РеквизитПутьКДанным = "ИзвлекатьТекстыФайловНаСервере" - Или РеквизитПутьКДанным = "РегламентноеЗадание.ИзвлечениеТекста" Тогда + Или РеквизитПутьКДанным = "РегламентноеЗадание.ИзвлечениеТекста") Тогда Элементы.ГруппаРедактироватьРегламентноеЗадание.Доступность = НаборКонстант.ИзвлекатьТекстыФайловНаСервере; Элементы.ГруппаЗапуститьИзвлечениеТекстов.Доступность = Не НаборКонстант.ИзвлекатьТекстыФайловНаСервере; Если НаборКонстант.ИзвлекатьТекстыФайловНаСервере Тогда - Сведения = СведенияОРегламентномЗадании(ЭтотОбъект, "ИзвлечениеТекста"); + Сведения = СведенияОРегламентныхЗаданиях["ИзвлечениеТекста"]; РасписаниеПредставление = Строка(Сведения.Расписание); РасписаниеПредставление = ВРег(Лев(РасписаниеПредставление, 1)) + Сред(РасписаниеПредставление, 2); Иначе @@ -387,39 +414,23 @@ КонецПроцедуры &НаСервере -Процедура ОбновитьРегламентныеЗадания() - Изменения = Новый Структура("Использование", НаборКонстант.ИспользоватьПолнотекстовыйПоиск); - РегламентныеЗаданияСохранить("ОбновлениеИндексаППД", Изменения, Ложь); - РегламентныеЗаданияСохранить("СлияниеИндексаППД", Изменения, Ложь); - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ФайловыеФункции") Тогда - Если Не НаборКонстант.ИзвлекатьТекстыФайловНаСервере Тогда - Изменения.Использование = Ложь; - КонецЕсли; - РегламентныеЗаданияСохранить("ИзвлечениеТекста", Изменения, Ложь); +Процедура ЗаполнитьСведенияОРегламентномЗадании(ИмяПредопределенного) + Сведения = Новый Структура("Идентификатор, Использование, Расписание"); + СведенияОРегламентныхЗаданиях.Вставить(ИмяПредопределенного, Сведения); + Задание = РегламентныеЗаданияНайтиПредопределенное(ИмяПредопределенного); + Если Задание = Неопределено Тогда + Возврат; КонецЕсли; + Сведения.Идентификатор = Задание.УникальныйИдентификатор; + Сведения.Использование = Задание.Использование; + Сведения.Расписание = Задание.Расписание; КонецПроцедуры -&НаКлиентеНаСервереБезКонтекста -Функция СведенияОРегламентномЗадании(Форма, ИмяПредопределенного) - Сведения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Форма.СведенияОРегламентныхЗаданиях, ИмяПредопределенного, 0); - Если Сведения = 0 Тогда - Сведения = Новый Структура("Идентификатор, Использование, Расписание"); - #Если Сервер Тогда - Форма.СведенияОРегламентныхЗаданиях.Вставить(ИмяПредопределенного, Сведения); - МетаданныеПредопределенного = Метаданные.РегламентныеЗадания.Найти(ИмяПредопределенного); - Если МетаданныеПредопределенного = Неопределено Тогда - Возврат Сведения; - КонецЕсли; - Задание = РегламентныеЗадания.НайтиПредопределенное(МетаданныеПредопределенного); - Если Задание = Неопределено Тогда - Возврат Сведения; - КонецЕсли; - Сведения.Идентификатор = Задание.УникальныйИдентификатор; - Сведения.Использование = Задание.Использование; - Сведения.Расписание = Задание.Расписание; - #КонецЕсли - КонецЕсли; - Возврат Сведения; +&НаСервере +Функция РегламентныеЗаданияНайтиПредопределенное(ИмяПредопределенного) + Фильтр = Новый Структура("Метаданные", ИмяПредопределенного); + Найденные = РегламентныеЗаданияСервер.НайтиЗадания(Фильтр); + Возврат ?(Найденные.Количество() = 0, Неопределено, Найденные[0]); КонецФункции #КонецОбласти diff --git a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Help/ru.html b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Help/ru.html index 4a9d3f892..9db3a3191 100644 --- a/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Help/ru.html +++ b/SSL/src/DataProcessors/ПанельАдминистрированияБСП/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

      diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl index d99590c3c..b882ce9f0 100644 --- a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl @@ -302,7 +302,7 @@ ИмяДляЖурнала = ВерсияСтруктура.Текст; ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Ошибка переноса файла в том'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Информация,, ФайлСсылка, + УровеньЖурналаРегистрации.Ошибка,, ФайлСсылка, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'При переносе в том файла |""%1"" @@ -334,18 +334,18 @@ Возврат Ложь; // ничего не сообщаем КонецПопытки; + ТипХраненияФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВерсияСсылка, "ТипХраненияФайла"); + Если ТипХраненияФайла <> Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + // Тут файл на диске - так не должно быть. + РазблокироватьДанныеДляРедактирования(ФайлСсылка); + РазблокироватьДанныеДляРедактирования(ВерсияСсылка); + Возврат Ложь; + КонецЕсли; + + НачатьТранзакцию(); + Попытка - ТипХраненияФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВерсияСсылка, "ТипХраненияФайла"); - Если ТипХраненияФайла <> Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - // Тут файл на диске - так не должно быть. - РазблокироватьДанныеДляРедактирования(ФайлСсылка); - РазблокироватьДанныеДляРедактирования(ВерсияСсылка); - Возврат Ложь; - КонецЕсли; - - НачатьТранзакцию(); - ВерсияОбъект = ВерсияСсылка.ПолучитьОбъект(); ХранилищеФайла = РаботаСФайламиСлужебныйВызовСервера.ПолучитьХранилищеФайлаИзИнформационнойБазы(ВерсияСсылка); СведенияОФайле = ФайловыеФункцииСлужебный.ДобавитьФайлВТом(ХранилищеФайла.Получить(), ВерсияОбъект.ДатаМодификацииУниверсальная, @@ -388,7 +388,7 @@ МассивФайловСОшибками.Добавить(СтруктураОшибки); ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Ошибка переноса файла в том'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Информация,, ФайлСсылка, + УровеньЖурналаРегистрации.Ошибка,, ФайлСсылка, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'При переносе в том файла |""%1"" diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Help/ru.html b/SSL/src/DataProcessors/ПереносФайловВТома/Help/ru.html index 3741db89c..f9f7cedb3 100644 --- a/SSL/src/DataProcessors/ПереносФайловВТома/Help/ru.html +++ b/SSL/src/DataProcessors/ПереносФайловВТома/Help/ru.html @@ -1,4 +1,4 @@ - +

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

      Для успешного переноса файлов необходимо:

      • В настройках программы в разделе Администрирование - Настройки работы с файлами включить флажок Хранить файлы в томах на диске. diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Form.form b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Form.form index f2526accc..664643643 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Form.form +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Form.form @@ -173,6 +173,9 @@ Auto true true + + ОбластиПоискаДублей.Picture + None None None @@ -276,6 +279,24 @@ true + + АдресНастроек + + <key>ru</key> + <value>Адрес настроек</value> + + 4 + + String + + + + true + + + true + + Выбрать diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Module.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Module.bsl index 1fa101a8f..aa3715b3d 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Module.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ОбластьПоискаДублей/Module.bsl @@ -18,6 +18,7 @@ КонецЕсли; Параметры.Свойство("ОбластьПоискаДублей", ОбластьПоУмолчанию); + Параметры.Свойство("АдресНастроек", АдресНастроек); ИнициализироватьСписокОбластейПоискаДублей(); КонецПроцедуры @@ -67,17 +68,20 @@ &НаСервере Процедура ИнициализироватьСписокОбластейПоискаДублей() - - ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); - ОбластиПоискаДублей = ОбработкаОбъект.ОбластиПоискаДублей(Ложь); - - ОбластиПоискаДублей.СортироватьПоПредставлению(); - Элемент = ОбластиПоискаДублей.НайтиПоЗначению(ОбластьПоУмолчанию); - Если Элемент <> Неопределено Тогда - Элементы.ОбластиПоискаДублей.ТекущаяСтрока = Элемент.ПолучитьИдентификатор(); + Если ЗначениеЗаполнено(АдресНастроек) + И ЭтоАдресВременногоХранилища(АдресНастроек) Тогда + ТаблицаНастроек = ПолучитьИзВременногоХранилища(АдресНастроек); + Иначе + ТаблицаНастроек = ПоискИУдалениеДублей.НастройкиОбъектовМетаданных(); + АдресНастроек = ПоместитьВоВременноеХранилище(ТаблицаНастроек, УникальныйИдентификатор); КонецЕсли; + Для Каждого СтрокаТаблицы Из ТаблицаНастроек Цикл + Элемент = ОбластиПоискаДублей.Добавить(СтрокаТаблицы.ПолноеИмя, СтрокаТаблицы.ПредставлениеСписка, , БиблиотекаКартинок[СтрокаТаблицы.Вид]); + Если СтрокаТаблицы.ПолноеИмя = ОбластьПоУмолчанию Тогда + Элементы.ОбластиПоискаДублей.ТекущаяСтрока = Элемент.ПолучитьИдентификатор(); + КонецЕсли; + КонецЦикла; КонецПроцедуры - #КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form index a3f7c9dff..1a8238678 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Form.form @@ -8,7 +8,7 @@ <name>Шапка</name> <id>406</id> <items xsi:type="form:FormField"> - <name>ПредставлениеОбластиПоискаДублей</name> + <name>ОбластьПоискаДублей</name> <id>9</id> <visible>true</visible> <enabled>true</enabled> @@ -16,10 +16,14 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>ПредставлениеОбластиПоискаДублей</segments> + <segments>ОбластьПоискаДублей</segments> </dataPath> + <handlers> + <event>OnChange</event> + <name>ОбластьПоискаДублейПриИзменении</name> + </handlers> <extendedTooltip> - <name>ПредставлениеОбластиПоискаДублейРасширеннаяПодсказка</name> + <name>ОбластьПоискаДублейРасширеннаяПодсказка</name> <id>11</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -29,7 +33,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ПредставлениеОбластиПоискаДублейКонтекстноеМеню</name> + <name>ОбластьПоискаДублейКонтекстноеМеню</name> <id>10</id> <autoFill>true</autoFill> </contextMenu> @@ -41,11 +45,15 @@ <extInfo xsi:type="form:InputFieldExtInfo"> <handlers> <event>StartChoice</event> - <name>ПредставлениеОбластиПоискаНачалоВыбора</name> + <name>ОбластьПоискаДублейНачалоВыбора</name> + </handlers> + <handlers> + <event>StartListChoice</event> + <name>ОбластьПоискаДублейНачалоВыбораИзСписка</name> </handlers> <handlers> <event>Clearing</event> - <name>ПредставлениеОбластиПоискаДублейОчистка</name> + <name>ОбластьПоискаДублейОчистка</name> </handlers> <width>43</width> <autoMaxWidth>true</autoMaxWidth> @@ -55,12 +63,11 @@ <dropListButton>false</dropListButton> <choiceButton>true</choiceButton> <choiceButtonRepresentation>ShowInInputField</choiceButtonRepresentation> - <clearButton>false</clearButton> - <spinButton>false</spinButton> - <openButton>false</openButton> - <createButton>false</createButton> + <quickChoice>false</quickChoice> + <listChoiceMode>true</listChoiceMode> <chooseType>true</chooseType> <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> <textSize>Normal</textSize> </extInfo> </items> @@ -271,6 +278,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -350,6 +358,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1329,6 +1338,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1398,6 +1408,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -1640,6 +1651,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1719,6 +1731,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1883,6 +1896,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -2823,6 +2837,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -2924,6 +2939,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -3159,6 +3175,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -3238,6 +3255,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -3771,31 +3789,11 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>НастройкиОбъектовМетаданных</name> - <title> - <key>ru</key> - <value>Настройки объектов метаданных</value> - - 4 - - ValueList - - - true - - - true - - - - - ОбластьПоискаДублей <key>ru</key> - <value>Область поиска дублей</value> + <value>Искать в</value> 5 @@ -4516,24 +4514,6 @@ true - - ПредставлениеОбластиПоискаДублей - - <key>ru</key> - <value>Искать в</value> - - 26 - - String - - - - true - - - true - - НастройкиПошаговогоМастера @@ -4644,6 +4624,24 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>АдресНастроек</name> + <title> + <key>ru</key> + <value>Адрес настроек</value> + + 32 + + String + + + + true + + + true + + ВыбратьОсновнойЭлемент diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl index 883b69ebc..ee6c5f68f 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПоискДублей/Module.bsl @@ -12,6 +12,14 @@ КонецЕсли; НастройкиФормы = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(ИмяФормы, ""); + Если НастройкиФормы = Неопределено Тогда + НастройкиФормы = Новый Структура; + НастройкиФормы.Вставить("УчитыватьПрикладныеПравила", Истина); + НастройкиФормы.Вставить("ОбластьПоискаДублей", ""); + НастройкиФормы.Вставить("НастройкиКД", Неопределено); + НастройкиФормы.Вставить("ПравилаПоиска", Неопределено); + КонецЕсли; + ЗаполнитьЗначенияСвойств(НастройкиФормы, Параметры); ПриСозданииНаСервереИнициализацияДанных(НастройкиФормы); @@ -88,12 +96,18 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте -Процедура ПредставлениеОбластиПоискаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) +Процедура ОбластьПоискаДублейНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; +КонецПроцедуры + +&НаКлиенте +Процедура ОбластьПоискаДублейНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Имя = ПолноеИмяФормы("ОбластьПоискаДублей"); ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("АдресНастроек", АдресНастроек); ПараметрыФормы.Вставить("ОбластьПоискаДублей", ОбластьПоискаДублей); Обработчик = Новый ОписаниеОповещения("ОбластьПоискаДублейЗавершениеВыбора", ЭтотОбъект); @@ -113,7 +127,13 @@ КонецПроцедуры &НаКлиенте -Процедура ПредставлениеОбластиПоискаДублейОчистка(Элемент, СтандартнаяОбработка) +Процедура ОбластьПоискаДублейПриИзменении(Элемент) + ИнициализироватьКомпоновщикОтбораИПравила(Неопределено); + ПерейтиНаШагМастера(Элементы.ШагПоискНеВыполнялся, Истина); +КонецПроцедуры + +&НаКлиенте +Процедура ОбластьПоискаДублейОчистка(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; @@ -139,6 +159,13 @@ Имя = ПолноеИмяФормы("ПравилаОтбора"); + ЭлементСписка = Элементы.ОбластьПоискаДублей.СписокВыбора.НайтиПоЗначению(ОбластьПоискаДублей); + Если ЭлементСписка = Неопределено Тогда + ПредставлениеОбластиПоискаДублей = Неопределено; + Иначе + ПредставлениеОбластиПоискаДублей = ЭлементСписка.Представление; + КонецЕсли; + ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("АдресСхемыКомпоновки", АдресСхемыКомпоновки); ПараметрыФормы.Вставить("АдресНастроекКомпоновщикаОтбора", АдресНастроекКомпоновщикаОтбора()); @@ -175,6 +202,13 @@ Имя = ПолноеИмяФормы("ПравилаПоиска"); + ЭлементСписка = Элементы.ОбластьПоискаДублей.СписокВыбора.НайтиПоЗначению(ОбластьПоискаДублей); + Если ЭлементСписка = Неопределено Тогда + ПредставлениеОбластиПоискаДублей = Неопределено; + Иначе + ПредставлениеОбластиПоискаДублей = ЭлементСписка.Представление; + КонецЕсли; + ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ОбластьПоискаДублей", ОбластьПоискаДублей); ПараметрыФормы.Вставить("ОписаниеПрикладныхПравил", ОписаниеПрикладныхПравил); @@ -475,26 +509,24 @@ Возврат Имена[0] + "." + Имена[1] + ".Форма." + КраткоеИмяФормы; КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Сервер &НаСервере Процедура ПриСозданииНаСервереИнициализацияДанных(НастройкиФормы) - Если НастройкиФормы = Неопределено Тогда - УчитыватьПрикладныеПравила = Истина; - ОбластьПоискаДублей = ""; - Иначе - УчитыватьПрикладныеПравила = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиФормы, "УчитыватьПрикладныеПравила"); - ОбластьПоискаДублей = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиФормы, "ОбластьПоискаДублей"); - КонецЕсли; + УчитыватьПрикладныеПравила = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиФормы, "УчитыватьПрикладныеПравила"); + ОбластьПоискаДублей = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиФормы, "ОбластьПоискаДублей"); - ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); - НастройкиОбъектовМетаданных = ОбработкаОбъект.ОбластиПоискаДублей(Истина); + ТаблицаНастроек = ПоискИУдалениеДублей.НастройкиОбъектовМетаданных(); + АдресНастроек = ПоместитьВоВременноеХранилище(ТаблицаНастроек, УникальныйИдентификатор); + + СписокВыбора = Элементы.ОбластьПоискаДублей.СписокВыбора; + Для Каждого СтрокаТаблицы Из ТаблицаНастроек Цикл + СписокВыбора.Добавить(СтрокаТаблицы.ПолноеИмя, СтрокаТаблицы.ПредставлениеСписка, , БиблиотекаКартинок[СтрокаТаблицы.Вид]); + КонецЦикла; ВсеВариантыСравнения.Добавить("Равно", НСтр("ru = 'Совпадает'")); ВсеВариантыСравнения.Добавить("Подобно", НСтр("ru = 'Совпадает по похожим словам'")); - КонецПроцедуры &НаСервере @@ -795,8 +827,7 @@ // Данные - результат функции ГруппыДублей модуля. Если Не ПустаяСтрока(Данные.ОписаниеОшибки) Тогда // Фоновое сломалось - ОписаниеСостоянияНайденныхДублей = Новый ФорматированнаяСтрока(Элементы.Внимание16.Картинка, - Новый ФорматированнаяСтрока(Данные.ОписаниеОшибки, , ЦветПоясняющийОшибкуТекст)); + ОписаниеСостоянияНайденныхДублей = Новый ФорматированнаяСтрока(Элементы.Внимание16.Картинка, Данные.ОписаниеОшибки); Возврат -1; КонецЕсли; @@ -1006,6 +1037,7 @@ Процедура ОбновитьКомпоновщикОтбора(Адрес) КомпоновщикПредварительногоОтбора.ЗагрузитьНастройки( ПолучитьИзВременногоХранилища(Адрес) ); + КомпоновщикПредварительногоОтбора.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.Полное); УдалитьИзВременногоХранилища(Адрес); КонецПроцедуры @@ -1030,23 +1062,21 @@ ИначеЕсли Правило.Правило = "Подобно" Тогда Сравнение = Правило.ПредставлениеРеквизита + " " + НСтр("ru = 'совпадает по похожим словам'"); Иначе - Сравнение = ""; + Продолжить; КонецЕсли; - ТекстПравил = ТекстПравил + ?(ТекстПравил = "" Или Сравнение = "", "", Союз) + Сравнение; + ТекстПравил = ?(ТекстПравил = "", "", ТекстПравил + Союз) + Сравнение; КонецЦикла; - ПрикладнойТекст = ""; Если УчитыватьПрикладныеПравила Тогда Для Позиция = 1 По СтрЧислоСтрок(ОписаниеПрикладныхПравил) Цикл СтрокаПравила = СокрЛП(СтрПолучитьСтроку(ОписаниеПрикладныхПравил, Позиция)); Если Не ПустаяСтрока(СтрокаПравила) Тогда - ПрикладнойТекст = ПрикладнойТекст + Союз + СтрокаПравила; + ТекстПравил = ?(ТекстПравил = "", "", ТекстПравил + Союз) + СтрокаПравила; КонецЕсли; КонецЦикла; КонецЕсли; - ТекстПравил = ТекстПравил + ПрикладнойТекст; Если ПустаяСтрока(ТекстПравил) Тогда ТекстПравил = НСтр("ru = 'Правила не заданы'"); КонецЕсли; @@ -1066,15 +1096,15 @@ &НаСервере Процедура ИнициализироватьКомпоновщикОтбораИПравила(НастройкиФормы) // 1. Очистка и инициализация сведений об объекте метаданных. - ПредставлениеПравилОтбора = ""; - ПредставлениеПравилПоиска = ""; - ПредставлениеОбластиПоискаДублей = ""; - ЭлементСписка = НастройкиОбъектовМетаданных.НайтиПоЗначению(ОбластьПоискаДублей); - Если ЭлементСписка = Неопределено Тогда + ПредставлениеПравилОтбора = ""; + ПредставлениеПравилПоиска = ""; + + ТаблицаНастроек = ПолучитьИзВременногоХранилища(АдресНастроек); + СтрокаТаблицыНастроек = ТаблицаНастроек.Найти(ОбластьПоискаДублей, "ПолноеИмя"); + Если СтрокаТаблицыНастроек = Неопределено Тогда ОбластьПоискаДублей = ""; Возврат; КонецЕсли; - ПредставлениеОбластиПоискаДублей = ЭлементСписка.Представление; ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ОбластьПоискаДублей); @@ -1144,7 +1174,7 @@ // 6. Механизмы расширения в части прикладных правил. ОписаниеПрикладныхПравил = Неопределено; - Если ЭлементСписка.Пометка Тогда + Если СтрокаТаблицыНастроек.СобытиеПараметрыПоискаДублей Тогда ПараметрыПоУмолчанию = Новый Структура; ПараметрыПоУмолчанию.Вставить("ПравилаПоиска", ТаблицаПравил); ПараметрыПоУмолчанию.Вставить("ОграниченияСравнения", Новый Массив); @@ -1161,10 +1191,13 @@ ОписаниеПрикладныхПравил = СокрЛП(ОписаниеПрикладныхПравил); КонецЕсли; + КомпоновщикПредварительногоОтбора.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.Полное); + ТаблицаПравил.Сортировать("ПредставлениеРеквизита"); ЗначениеВРеквизитФормы(ТаблицаПравил, "ПравилаПоиска"); КонецПроцедуры +&НаСервереБезКонтекста Функция ДоступныеРеквизитыОтбора(ОбъектМетаданных) МассивРеквизитов = Новый Массив; Для Каждого РеквизитМетаданные Из ОбъектМетаданных.СтандартныеРеквизиты Цикл diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Help/ru.html b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Help/ru.html index 33745a99b..1e429d56c 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для отбора элементов списков.</p> <p>Открывается из окна <a href="DataProcessor.ПоискИУдалениеДублей/Help">Поиск и удаление дублей</a> по ссылке в поле <strong>Отбирать</strong>.</p> <h3>Ввод условий отбора</h3> diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Module.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Module.bsl index 415bf0ac8..515f61a39 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Module.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаОтбора/Module.bsl @@ -43,11 +43,7 @@ Процедура Выбрать(Команда) Если Модифицированность Тогда - ЗначениеВыбора = АдресНастроекКомпоновщикаОтбора(); - Если ЗначениеВыбора = Ложь Тогда - Возврат; - КонецЕсли; - ОповеститьОВыборе(ЗначениеВыбора); + ОповеститьОВыборе(АдресНастроекКомпоновщикаОтбора()); Иначе Закрыть(); КонецЕсли; @@ -60,33 +56,7 @@ &НаСервере Функция АдресНастроекКомпоновщикаОтбора() - Если Не ПроверитьРекурсивно(КомпоновщикПредварительногоОтбора.Настройки.Отбор.Элементы) Тогда - Возврат Ложь; - КонецЕсли; - Возврат ПоместитьВоВременноеХранилище(КомпоновщикПредварительногоОтбора.Настройки, ИдентификаторОсновнойФормы) - -КонецФункции - -&НаСервере -Функция ПроверитьРекурсивно(КоллекцияЭлементовОтбораКД) - Результат = Истина; - Для Каждого ЭлементКД Из КоллекцияЭлементовОтбораКД Цикл - Тип = ТипЗнч(ЭлементКД); - Если Тип = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - Если ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено - Или ЭлементКД.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено Тогда - ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Недопустимый вид сравнения ""%1""'"), ЭлементКД.ВидСравнения); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "КомпоновщикПредварительногоОтбора.Настройки.Отбор"); - Результат = Ложь; - КонецЕсли; - ИначеЕсли Тип = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда - Если Не ПроверитьРекурсивно(ЭлементКД.Элементы) Тогда - Результат = Ложь; - КонецЕсли; - КонецЕсли; - КонецЦикла; - Возврат Результат; КонецФункции #КонецОбласти diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Form.form b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Form.form index a2f26634b..1ccb72646 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Form.form +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Form.form @@ -153,10 +153,6 @@ <event>StartChoice</event> <name>ПравилаПоискаВидСравненияНачалоВыбора</name> </handlers> - <handlers> - <event>StartListChoice</event> - <name>ПравилаПоискаВидСравненияНачалоВыбораИзСписка</name> - </handlers> <width>21</width> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Module.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Module.bsl index 08b818d59..172ad8d36 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Module.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Forms/ПравилаПоиска/Module.bsl @@ -39,9 +39,9 @@ УдалитьИзВременногоХранилища(Параметры.АдресНастроек); ИсходныеНастройки.Свойство("УчитыватьПрикладныеПравила", УчитыватьПрикладныеПравила); - Если ОписаниеПрикладныхПравил = Неопределено Тогда - // Правила не определены + Если ОписаниеПрикладныхПравил = Неопределено Тогда // Правила не определены Элементы.ГруппаПрикладныхОграничений.Видимость = Ложь; + КлючСохраненияПоложенияОкна = "БезГруппыПрикладныхОграничений"; Иначе Элементы.УчитыватьПрикладныеПравила.Видимость = МожноОтменятьПрикладныеПравила(); КонецЕсли; @@ -119,12 +119,6 @@ ВыбратьВидСравнения(); КонецПроцедуры -&НаКлиенте -Процедура ПравилаПоискаВидСравненияНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - ВыбратьВидСравнения(); -КонецПроцедуры - #КонецОбласти #Область ОбработчикиКомандыФормы diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/Help/ru.html b/SSL/src/DataProcessors/ПоискИУдалениеДублей/Help/ru.html index cb1e41703..f687087fd 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для поиска и устранения дублирования элементов во всех списках программы (для администраторов программы). </p> <p>При работе <a href="Catalog.Пользователи/Help">пользователей</a> в программе часто ошибочно вводятся дубли (например, неправильно производился поиск элемента, в результате его не нашли и ввели заново), которые мешают правильному учету. В документах указывают то один экземпляр элемента, то другой, в результате при проведении документов возникают неправильные проводки, и баланс не сходится. Поэтому от дублирования в программе необходимо избавляться. </p> <p>Программа позволяет найти вхождения всех дублирующихся элементов и производит в документах замену всех ссылок на дубли ссылками на выбранный "правильный" элемент, затем помечает на удаление дублирующиеся элементы в списке.</p> diff --git a/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl b/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl index f6b565da8..fb9e3b447 100644 --- a/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПоискИУдалениеДублей/ObjectModule.bsl @@ -2,43 +2,13 @@ #Область СлужебныйПрограммныйИнтерфейс -// Заполняет список всех возможных областей для поиска дублей. -// -// Параметры: -// УчитыватьПрикладныеПравила - Булево - Флаг необходимости поиска прикладных правил поиска дублей. -// -// Возвращаемое значение: -// СписокЗначений - Заполняемый список, в котором устанавливаются: -// * Значение - Строка - Полное имя метаданных объекта-таблицы. -// * Представление - Строка - Представление для пользователя. -// * Картинка - Картинка - Соответствующая картинка из платформенной библиотеки. -// * Пометка - Булево - Флаг наличия прикладных правил поиска дублей. -// Устанавливается только если второй параметр равен Истина.// -// -Функция ОбластиПоискаДублей(Знач УчитыватьПрикладныеПравила = Ложь) Экспорт - Результат = Новый СписокЗначений; - - Если УчитыватьПрикладныеПравила Тогда - ОбъектыСПоискомДублей = Новый Соответствие; - ПоискИУдалениеДублейПереопределяемый.ПриОпределенииОбъектовСПоискомДублей(ОбъектыСПоискомДублей); - Иначе - ОбъектыСПоискомДублей = Неопределено; - КонецЕсли; - ГруппаОбластейПоискаДублей(Результат, ОбъектыСПоискомДублей, УчитыватьПрикладныеПравила, Справочники, "Справочник"); - ГруппаОбластейПоискаДублей(Результат, ОбъектыСПоискомДублей, УчитыватьПрикладныеПравила, ПланыВидовХарактеристик, "ПланВидовХарактеристик"); - ГруппаОбластейПоискаДублей(Результат, ОбъектыСПоискомДублей, УчитыватьПрикладныеПравила, ПланыСчетов, "ПланСчетов"); - ГруппаОбластейПоискаДублей(Результат, ОбъектыСПоискомДублей, УчитыватьПрикладныеПравила, ПланыВидовРасчета, "ПланВидовРасчета"); - - Возврат Результат; -КонецФункции - // Определение менеджера объекта для вызова прикладных правил. // // Параметры: // ИмяОбластиПоискаДанных - Строка - Имя области (полное имя метаданных). // // Возвращаемое значение: -// СправочникиМенеджер, ПланыВидовХарактеристик.Менеджер, ПланыСчетовПланыВидовРасчета.Менеджер +// СправочникиМенеджер, ПланыВидовХарактеристик.Менеджер, ПланыСчетовПланыВидовРасчета.Менеджер. // Функция МенеджерОбластиПоискаДублей(Знач ИмяОбластиПоискаДанных) Экспорт Мета = Метаданные.НайтиПоПолномуИмени(ИмяОбластиПоискаДанных); @@ -121,31 +91,32 @@ // верхний уровень - группы, нижний - найденные дубли. // Функция ГруппыДублей(Знач ПараметрыПоиска, Знач ЭталонныйОбъект = Неопределено) Экспорт - Перем РазмерВозвращаемойПорции, РассчитыватьМестаИспользования; + ПолноеИмяОМ = ПараметрыПоиска.ОбластьПоискаДублей; + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОМ); + ЧитатьТаблицу1ИзСУБД = (ЭталонныйОбъект = Неопределено); // 1. Определяем параметры с учетом прикладного кода. - - ПараметрыПоиска.Свойство("МаксимальноеЧислоДублей", РазмерВозвращаемойПорции); + РазмерВозвращаемойПорции = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыПоиска, "МаксимальноеЧислоДублей"); Если Не ЗначениеЗаполнено(РазмерВозвращаемойПорции) Тогда - // Все найденные - РазмерВозвращаемойПорции = 0; + РазмерВозвращаемойПорции = 0; // Без ограничения. КонецЕсли; - Если Не ПараметрыПоиска.Свойство("РассчитыватьМестаИспользования", РассчитыватьМестаИспользования) Тогда + РассчитыватьМестаИспользования = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыПоиска, "РассчитыватьМестаИспользования"); + Если ТипЗнч(РассчитыватьМестаИспользования) <> Тип("Булево") Тогда РассчитыватьМестаИспользования = Ложь; КонецЕсли; // Для передачи в прикладной код. - ДополнительныеПараметры = Неопределено; - ПараметрыПоиска.Свойство("ДополнительныеПараметры", ДополнительныеПараметры); + ДополнительныеПараметры = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыПоиска, "ДополнительныеПараметры"); // Вызываем прикладной код - ИспользоватьПрикладныеПравила = ПараметрыПоиска.УчитыватьПрикладныеПравила И ЕстьПрикладныеПравилаОбластиПоискаДублей(ПараметрыПоиска.ОбластьПоискаДублей); + ИспользоватьПрикладныеПравила = ПараметрыПоиска.УчитыватьПрикладныеПравила + И ЕстьПрикладныеПравилаОбластиПоискаДублей(ПолноеИмяОМ); - ПоляСравненияНаРавенство = ""; // Имена реквизитов, по которым сравниваем по равенству. - ПоляСравненияНаПодобие = ""; // Имена реквизитов, по которым будем нечетко сравнивать. - ПоляДополнительныхДанных = ""; // Имена реквизитов, дополнительно заказанные прикладными правилами. - РазмерПрикладнойПорции = 0; // Сколько отдавать в прикладные правила для расчета. + ПоляСравненияНаРавенство = ""; // Имена реквизитов, по которым сравниваем по равенству. + ПоляСравненияНаПодобие = ""; // Имена реквизитов, по которым будем нечетко сравнивать. + ПоляДополнительныхДанных = ""; // Имена реквизитов, дополнительно заказанные прикладными правилами. + РазмерПрикладнойПорции = 0; // Сколько отдавать в прикладные правила для расчета. Если ИспользоватьПрикладныеПравила Тогда ПрикладныеПараметры = Новый Структура; @@ -154,7 +125,7 @@ ПрикладныеПараметры.Вставить("КомпоновщикОтбора", ПараметрыПоиска.КомпоновщикПредварительногоОтбора); ПрикладныеПараметры.Вставить("КоличествоЭлементовДляСравнения", 1000); - МенеджерОбластиПоиска = МенеджерОбластиПоискаДублей(ПараметрыПоиска.ОбластьПоискаДублей); + МенеджерОбластиПоиска = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяОМ); МенеджерОбластиПоиска.ПараметрыПоискаДублей(ПрикладныеПараметры, ДополнительныеПараметры); ВсеДополнительныеПоля = Новый Соответствие; @@ -164,7 +135,7 @@ Если ВсеДополнительныеПоля[ИмяПоля] = Неопределено Тогда ПоляДополнительныхДанных = ПоляДополнительныхДанных + ", " + ИмяПоля; ВсеДополнительныеПоля[ИмяПоля] = Истина; - КонецЕсли; + КонецЕсли; КонецЦикла; КонецЦикла; ПоляДополнительныхДанных = Сред(ПоляДополнительныхДанных, 2); @@ -184,25 +155,17 @@ ПоляСравненияНаРавенство = Сред(ПоляСравненияНаРавенство, 2); ПоляСравненияНаПодобие = Сред(ПоляСравненияНаПодобие, 2); - // 2. Конструируем по возможно измененному компоновщику условия отбора. - Фильтр = ФильтрПоискаПоКомпоновщику(ПараметрыПоиска.КомпоновщикПредварительногоОтбора); + СтруктураПолейИдентичности = Новый Структура(ПоляСравненияНаРавенство); + СтруктураПолейПодобия = Новый Структура(ПоляСравненияНаПодобие); + СтруктураДополнительныхПолей = Новый Структура(ПоляДополнительныхДанных); - МетаданныеТаблицы = Метаданные.НайтиПоПолномуИмени(ПараметрыПоиска.ОбластьПоискаДублей); - Характеристики= Новый Структура("ДлинаКода, ДлинаНаименования, Иерархический, ВидИерархии", 0, 0, Ложь); - ЗаполнитьЗначенияСвойств(Характеристики, МетаданныеТаблицы); + // 2. Конструируем по возможно измененному компоновщику условия отбора. + Характеристики = Новый Структура("ДлинаКода, ДлинаНаименования, Иерархический, ВидИерархии", 0, 0, Ложь); + ЗаполнитьЗначенияСвойств(Характеристики, ОбъектМетаданных); ЕстьНаименование = Характеристики.ДлинаНаименования > 0; ЕстьКод = Характеристики.ДлинаКода > 0; - Если Характеристики.Иерархический И Характеристики.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов Тогда - // Среди групп не ищем - Если ПустаяСтрока(Фильтр.Текст) Тогда - Фильтр.Текст = "НЕ ЭтоГруппа"; - Иначе - Фильтр.Текст = "НЕ ЭтоГруппа И (" + Фильтр.Текст + ")"; - КонецЕсли; - КонецЕсли; - // Дополнительные поля могут пересекаться с остальными, им надо дать псевдонимы. ТаблицаКандидатов = Новый ТаблицаЗначений; КолонкиКандидатов = ТаблицаКандидатов.Колонки; @@ -213,101 +176,122 @@ КолонкиКандидатов.Добавить("ЭтоДубли", Новый ОписаниеТипов("Булево")); ТаблицаКандидатов.Индексы.Добавить("ЭтоДубли"); + ИменаПолейВЗапросе = ДоступныеРеквизитыОтбора(ОбъектМетаданных); + Если Не ЕстьКод Тогда + ИменаПолейВЗапросе = ИменаПолейВЗапросе + ", НЕОПРЕДЕЛЕНО КАК Код"; + КонецЕсли; + Если Не ЕстьНаименование Тогда + ИменаПолейВЗапросе = ИменаПолейВЗапросе + ", НЕОПРЕДЕЛЕНО КАК Наименование"; + КонецЕсли; + ИменаПолейВВыборе = СтрРазделить(ПоляСравненияНаРавенство + "," + ПоляСравненияНаПодобие, ",", Ложь); + РасшифровкаДополнительныхПолей = Новый Соответствие; - ДополнительныеПсевдонимы = ""; ПорядковыйНомер = 0; - Для Каждого КлючЗначение Из Новый Структура(ПоляДополнительныхДанных) Цикл + Для Каждого КлючЗначение Из СтруктураДополнительныхПолей Цикл ИмяПоля = КлючЗначение.Ключ; Псевдоним = "Доп" + Формат(ПорядковыйНомер, "ЧН=; ЧГ=") + "_" + ИмяПоля; РасшифровкаДополнительныхПолей.Вставить(Псевдоним, ИмяПоля); - ДополнительныеПсевдонимы = ДополнительныеПсевдонимы + "," + ИмяПоля + " КАК " + Псевдоним; + ИменаПолейВЗапросе = ИменаПолейВЗапросе + "," + ИмяПоля + " КАК " + Псевдоним; + ИменаПолейВВыборе.Добавить(Псевдоним); ПорядковыйНомер = ПорядковыйНомер + 1; КонецЦикла; - ДополнительныеПсевдонимы = Сред(ДополнительныеПсевдонимы, 2); - // Одинаковые поля будут сравниваться по равенству. - СтруктураПолейИдентичности = Новый Структура(ПоляСравненияНаРавенство); - УсловиеИдентичности = ""; - Для Каждого КлючЗначение Из СтруктураПолейИдентичности Цикл - ИмяПоля = КлючЗначение.Ключ; - УсловиеИдентичности = УсловиеИдентичности + "И " + ИмяПоля + " = &" + ИмяПоля + " "; + // Наполнение схемы. + СхемаКД = Новый СхемаКомпоновкиДанных; + + ИсточникДанныхСхемыКД = СхемаКД.ИсточникиДанных.Добавить(); + ИсточникДанныхСхемыКД.Имя = "ИсточникДанных1"; + ИсточникДанныхСхемыКД.ТипИсточникаДанных = "Local"; + + НаборДанных = СхемаКД.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); + НаборДанных.Имя = "НаборДанных1"; + НаборДанных.ИсточникДанных = "ИсточникДанных1"; + НаборДанных.Запрос = "ВЫБРАТЬ РАЗРЕШЕННЫЕ " + ИменаПолейВЗапросе + " ИЗ " + ПолноеИмяОМ; + НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина; + + // Инициализация компоновщика. + КомпоновщикНастроекКД = Новый КомпоновщикНастроекКомпоновкиДанных; + КомпоновщикНастроекКД.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКД)); + КомпоновщикНастроекКД.ЗагрузитьНастройки(ПараметрыПоиска.КомпоновщикПредварительногоОтбора.Настройки); + НастройкиКД = КомпоновщикНастроекКД.Настройки; + + // Поля. + НастройкиКД.Выбор.Элементы.Очистить(); + Для Каждого ИмяПоля Из ИменаПолейВВыборе Цикл + ПолеКД = Новый ПолеКомпоновкиДанных(СокрЛП(ИмяПоля)); + ДоступноеПолеКД = НастройкиКД.ДоступныеПоляВыбора.НайтиПоле(ПолеКД); + Если ДоступноеПолеКД = Неопределено Тогда + ЗаписьЖурналаРегистрации( + ПоискИУдалениеДублей.НаименованиеПодсистемы(Ложь), + УровеньЖурналаРегистрации.Предупреждение, + ОбъектМетаданных, + ЭталонныйОбъект, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Поле ""%1"" не найдено.'"), Строка(ПолеКД))); + Продолжить; + КонецЕсли; + ВыбранноеПолеКД = НастройкиКД.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПолеКД.Поле = ПолеКД; КонецЦикла; - УсловиеИдентичности = Сред(УсловиеИдентичности, 2); + ВыбранноеПолеКД = НастройкиКД.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПолеКД.Поле = Новый ПолеКомпоновкиДанных("Ссылка"); + ВыбранноеПолеКД = НастройкиКД.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПолеКД.Поле = Новый ПолеКомпоновкиДанных("Код"); + ВыбранноеПолеКД = НастройкиКД.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПолеКД.Поле = Новый ПолеКомпоновкиДанных("Наименование"); - СтруктураПолейПодобия = Новый Структура(ПоляСравненияНаПодобие); + // Сортировки. + НастройкиКД.Порядок.Элементы.Очистить(); + ЭлементПорядкаКД = НастройкиКД.Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); + ЭлементПорядкаКД.Поле = Новый ПолеКомпоновкиДанных("Ссылка"); - ОбщаяЧастьЗапроса = " - |ВЫБРАТЬ - | " + ?(ПустаяСтрока(ПоляСравненияНаРавенство), "", ПоляСравненияНаРавенство + "," ) + " - | " + ?(ПустаяСтрока(ПоляСравненияНаПодобие), "", ПоляСравненияНаПодобие + "," ) + " - | " + ?(ПустаяСтрока(ДополнительныеПсевдонимы), "", ДополнительныеПсевдонимы + "," ) + " - | Ссылка - |"; - Если Не СтруктураПолейИдентичности.Свойство("Код") И Не СтруктураПолейПодобия.Свойство("Код") Тогда - ОбщаяЧастьЗапроса = ОбщаяЧастьЗапроса + "," + ?(ЕстьКод, "Код", "НЕОПРЕДЕЛЕНО") + " КАК Код"; + // Отборы. + Если Характеристики.Иерархический + И Характеристики.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов Тогда + ЭлементОтбораКД = НастройкиКД.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбораКД.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЭтоГруппа"); + ЭлементОтбораКД.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбораКД.ПравоеЗначение = Ложь; КонецЕсли; - Если Не СтруктураПолейИдентичности.Свойство("Наименование") И Не СтруктураПолейПодобия.Свойство("Наименование") Тогда - ОбщаяЧастьЗапроса = ОбщаяЧастьЗапроса + "," + ?(ЕстьНаименование, "Наименование", "НЕОПРЕДЕЛЕНО") + " КАК Наименование"; - КонецЕсли; - ОбщаяЧастьЗапроса = ОбщаяЧастьЗапроса + " - |ИЗ - | " + ПараметрыПоиска.ОбластьПоискаДублей + " - |"; - // Основной запрос - для каждого элемента будем искать кандидаты-дубли. - Если ЭталонныйОбъект = Неопределено Тогда - - Запрос = Новый Запрос(ОбщаяЧастьЗапроса + " - |" + ?(ПустаяСтрока(Фильтр.Текст), "", "ГДЕ " + Фильтр.Текст) + " - |УПОРЯДОЧИТЬ ПО - | Ссылка - |"); + // Структура. + НастройкиКД.Структура.Очистить(); + ГруппировкаКД = НастройкиКД.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); + ГруппировкаКД.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); + ГруппировкаКД.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных")); + + // Чтение данных оригиналов. + Если ЧитатьТаблицу1ИзСУБД Тогда + Выборка1 = ИнициализироватьВыборкуКД(СхемаКД, КомпоновщикНастроекКД.ПолучитьНастройки()); Иначе - - ТекстПредвыборки = " - |ВЫБРАТЬ * ПОМЕСТИТЬ ЭталонныйОбъект ИЗ &_ЭталонныйОбъект КАК Эталон - |;//////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | " + ?(ПустаяСтрока(ПоляСравненияНаРавенство), "", ПоляСравненияНаРавенство + "," ) + " - | " + ?(ПустаяСтрока(ПоляСравненияНаПодобие), "", ПоляСравненияНаПодобие + "," ) + " - | " + ?(ПустаяСтрока(ДополнительныеПсевдонимы), "", ДополнительныеПсевдонимы + "," ) + " - | ЗНАЧЕНИЕ(" + ПараметрыПоиска.ОбластьПоискаДублей + ".ПустаяСсылка) КАК Ссылка - |"; - Если Не СтруктураПолейИдентичности.Свойство("Код") И Не СтруктураПолейПодобия.Свойство("Код") Тогда - ТекстПредвыборки = ТекстПредвыборки + "," + ?(ЕстьКод, "Код", "НЕОПРЕДЕЛЕНО") + " КАК Код"; + ТаблицаЗначений = ОбъектВТаблицуЗначений(ЭталонныйОбъект, РасшифровкаДополнительныхПолей); + Если Не ЕстьКод Тогда + ТаблицаЗначений.Колонки.Добавить("Код", Новый ОписаниеТипов("Неопределено")); КонецЕсли; - Если Не СтруктураПолейИдентичности.Свойство("Наименование") И Не СтруктураПолейПодобия.Свойство("Наименование") Тогда - ТекстПредвыборки = ТекстПредвыборки + "," + ?(ЕстьНаименование, "Наименование", "НЕОПРЕДЕЛЕНО") + " КАК Наименование"; + Если Не ЕстьНаименование Тогда + ТаблицаЗначений.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Неопределено")); КонецЕсли; - ТекстПредвыборки = ТекстПредвыборки + " - |ИЗ - | ЭталонныйОбъект - |"; - - Запрос = Новый Запрос(ТекстПредвыборки + " - |" + ?(ПустаяСтрока(Фильтр.Текст), "", "ГДЕ " + Фильтр.Текст) + " - |"); - - Запрос.УстановитьПараметр("_ЭталонныйОбъект", ОбъектВТаблицуЗначений(ЭталонныйОбъект)); + Выборка1 = ИнициализироватьВыборкуТЗ(ТаблицаЗначений); КонецЕсли; - - - // Запрос поиска кандидатов к текущей ссылке. - // Сравнение ссылок и упорядочение в предыдущем запросе дают возможность избежать повторных сравнений. - ЗапросКандидатов = Новый Запрос(ОбщаяЧастьЗапроса + " - |ГДЕ - | Ссылка > &_ИсходнаяСсылка - | " + ?(ПустаяСтрока(Фильтр.Текст), "", "И (" + Фильтр.Текст + ")") + " - | " + ?(ПустаяСтрока(УсловиеИдентичности), "", "И (" + УсловиеИдентичности+ ")") + " - |"); - - Для Каждого КлючЗначение Из Фильтр.Параметры Цикл - ИмяПараметра = КлючЗначение.Ключ; - ЗначениеПараметра = КлючЗначение.Значение; - Запрос.УстановитьПараметр(ИмяПараметра, ЗначениеПараметра); - ЗапросКандидатов.УстановитьПараметр(ИмяПараметра, ЗначениеПараметра); + + // Подготовка СКД к чтению данных дублей. + ОтборыКандидатов = Новый Соответствие; + ИменаПолей = СтрРазделить(ПоляСравненияНаРавенство, ",", Ложь); + Для Каждого ИмяПоля Из ИменаПолей Цикл + ИмяПоля = СокрЛП(ИмяПоля); + ЭлементОтбораКД = НастройкиКД.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбораКД.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяПоля); + ЭлементОтбораКД.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборыКандидатов.Вставить(ИмяПоля, ЭлементОтбораКД); КонецЦикла; + ЭлементОтбораКД = НастройкиКД.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбораКД.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка"); + Если ЧитатьТаблицу1ИзСУБД Тогда + ЭлементОтбораКД.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше; + Иначе + ЭлементОтбораКД.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно; + КонецЕсли; + ОтборыКандидатов.Вставить("Ссылка", ЭлементОтбораКД); // Результат и цикл поиска ТаблицаДублей = Новый ТаблицаЗначений; @@ -346,25 +330,26 @@ СтруктураПолей.Вставить("СписокПолейИдентичности", ПоляСравненияНаРавенство); СтруктураПолей.Вставить("СписокПолейПодобия", ПоляСравненияНаПодобие); - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл + Пока СледующийЭлементВыборки(Выборка1) Цикл + СтрокаТаблицы1 = Выборка1.ТекущийЭлемент; - // Отбираем похожих - ЗапросКандидатов.УстановитьПараметр("_ИсходнаяСсылка", Выборка.Ссылка); - Для Каждого КлючЗначение Из СтруктураПолейИдентичности Цикл - ИмяПоля = КлючЗначение.Ключ; - ЗапросКандидатов.УстановитьПараметр(ИмяПоля, Выборка[ИмяПоля]); + // Установка отборов для выбора кандидатов. + Для Каждого КлючИЗначение Из ОтборыКандидатов Цикл + ЭлементОтбораКД = КлючИЗначение.Значение; + ЭлементОтбораКД.ПравоеЗначение = СтрокаТаблицы1[КлючИЗначение.Ключ]; КонецЦикла; - ВыборкаКандидатов = ЗапросКандидатов.Выполнить().Выгрузить(); + // Выборка кандидатов данных из СУБД. + Выборка2 = ИнициализироватьВыборкуКД(СхемаКД, НастройкиКД); + Таблица2 = Выборка2.ПроцессорВыводаКД.Вывести(Выборка2.ПроцессорКД); Если СтруктураПолейПодобия.Количество() > 0 Тогда ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПоискаСтрок", "FuzzySearch", ТипВнешнейКомпоненты.Native); FuzzySearch = Новый("AddIn.FuzzySearch.FuzzyStringMatchExtension"); Для Каждого КлючЗначение Из СтруктураПолейПодобия Цикл ИмяПоля = КлючЗначение.Ключ; - МассивСтрок = ВыборкаКандидатов.ВыгрузитьКолонку(ИмяПоля); + МассивСтрок = Таблица2.ВыгрузитьКолонку(ИмяПоля); СтрокаМассивом = СтрСоединить(МассивСтрок,"~"); - СтрокаДляПоиска = Выборка[ИмяПоля]; + СтрокаДляПоиска = СтрокаТаблицы1[ИмяПоля]; МассивИндексовСтрокой = FuzzySearch.StringSearch(СтрокаДляПоиска, СтрокаМассивом, "~", 10, 80, 90); Если ПустаяСтрока(МассивИндексовСтрокой) Тогда Продолжить; @@ -375,61 +360,58 @@ Если ПустаяСтрока(ИндексСтроки) Тогда Продолжить; КонецЕсли; - СтрокаКандидата = ВыборкаКандидатов.Получить(ИндексСтроки); - Если ТаблицаДублей.Найти(СтрокаКандидата.Ссылка, "Ссылка") <> Неопределено Тогда + СтрокаТаблицы2 = Таблица2.Получить(ИндексСтроки); + Если ТаблицаДублей.Найти(СтрокаТаблицы2.Ссылка, "Ссылка") <> Неопределено Тогда Продолжить; КонецЕсли; Если ИспользоватьПрикладныеПравила Тогда // Наполняем таблицу для прикладных правил, вызываем их, если пора. - ДобавитьСтрокуКандидатов(ТаблицаКандидатов, Выборка, СтрокаКандидата, СтруктураПолей); + ДобавитьСтрокуКандидатов(ТаблицаКандидатов, СтрокаТаблицы1, СтрокаТаблицы2, СтруктураПолей); Если ТаблицаКандидатов.Количество() = РазмерПрикладнойПорции Тогда - ДобавитьДублиПоПрикладнымПравилам(ТаблицаДублей, МенеджерОбластиПоиска, Выборка, ТаблицаКандидатов, СтруктураПолей, ДополнительныеПараметры); + ДобавитьДублиПоПрикладнымПравилам(ТаблицаДублей, МенеджерОбластиПоиска, СтрокаТаблицы1, ТаблицаКандидатов, СтруктураПолей, ДополнительныеПараметры); ТаблицаКандидатов.Очистить(); КонецЕсли; Иначе - ДобавитьДубльВРезультат(ТаблицаДублей, Выборка, СтрокаКандидата, СтруктураПолей); + ДобавитьДубльВРезультат(ТаблицаДублей, СтрокаТаблицы1, СтрокаТаблицы2, СтруктураПолей); КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; Иначе - Для Каждого ВыборкаКандидатов Из ВыборкаКандидатов Цикл - + Для Каждого СтрокаТаблицы2 Из Таблица2 Цикл // Если мы его уже посчитали дублем в какой-то группе, то не трогаем. - Если ТаблицаДублей.Найти(ВыборкаКандидатов.Ссылка, "Ссылка") <> Неопределено Тогда + Если ТаблицаДублей.Найти(СтрокаТаблицы2.Ссылка, "Ссылка") <> Неопределено Тогда Продолжить; КонецЕсли; // Проигрываем правила подобия для строк. - Если ИспользоватьПрикладныеПравила Тогда // Наполняем таблицу для прикладных правил, вызываем их, если пора. - ДобавитьСтрокуКандидатов(ТаблицаКандидатов, Выборка, ВыборкаКандидатов, СтруктураПолей); + ДобавитьСтрокуКандидатов(ТаблицаКандидатов, СтрокаТаблицы1, СтрокаТаблицы2, СтруктураПолей); Если ТаблицаКандидатов.Количество() = РазмерПрикладнойПорции Тогда - ДобавитьДублиПоПрикладнымПравилам(ТаблицаДублей, МенеджерОбластиПоиска, Выборка, ТаблицаКандидатов, СтруктураПолей, ДополнительныеПараметры); + ДобавитьДублиПоПрикладнымПравилам(ТаблицаДублей, МенеджерОбластиПоиска, СтрокаТаблицы1, ТаблицаКандидатов, СтруктураПолей, ДополнительныеПараметры); ТаблицаКандидатов.Очистить(); КонецЕсли; Иначе - ДобавитьДубльВРезультат(ТаблицаДублей, Выборка, ВыборкаКандидатов, СтруктураПолей); + ДобавитьДубльВРезультат(ТаблицаДублей, СтрокаТаблицы1, СтрокаТаблицы2, СтруктураПолей); КонецЕсли; - КонецЦикла; КонецЕсли; // Обрабатываем остаток таблицы для прикладных правил. Если ИспользоватьПрикладныеПравила Тогда - ДобавитьДублиПоПрикладнымПравилам(ТаблицаДублей, МенеджерОбластиПоиска, Выборка, ТаблицаКандидатов, СтруктураПолей, ДополнительныеПараметры); + ДобавитьДублиПоПрикладнымПравилам(ТаблицаДублей, МенеджерОбластиПоиска, СтрокаТаблицы1, ТаблицаКандидатов, СтруктураПолей, ДополнительныеПараметры); ТаблицаКандидатов.Очистить(); КонецЕсли; // Завершен анализ группы, смотрим на количество. Много клиенту не отдаем. Если РазмерВозвращаемойПорции > 0 И (ТаблицаДублей.Количество() > РазмерВозвращаемойПорции) Тогда // Откатываем последнюю группу. - Для Каждого Строка Из ТаблицаДублей.НайтиСтроки( Новый Структура("Родитель ", Выборка.Ссылка) ) Цикл + Для Каждого Строка Из ТаблицаДублей.НайтиСтроки( Новый Структура("Родитель ", СтрокаТаблицы1.Ссылка) ) Цикл ТаблицаДублей.Удалить(Строка); КонецЦикла; - Для Каждого Строка Из ТаблицаДублей.НайтиСтроки( Новый Структура("Ссылка", Выборка.Ссылка) ) Цикл + Для Каждого Строка Из ТаблицаДублей.НайтиСтроки( Новый Структура("Ссылка", СтрокаТаблицы1.Ссылка) ) Цикл ТаблицаДублей.Удалить(Строка); КонецЦикла; // Если это была последняя группа, то сообщаем об ошибке. @@ -440,7 +422,6 @@ КонецЕсли; Прервать; КонецЕсли; - КонецЦикла; Если Результат.ОписаниеОшибки <> Неопределено Тогда @@ -509,7 +490,7 @@ #Область СлужебныеПроцедурыИФункции // Преобразуем объект в таблицу для помещения в запрос. -Функция ОбъектВТаблицуЗначений(Знач ОбъектДанных) +Функция ОбъектВТаблицуЗначений(Знач ОбъектДанных, Знач РасшифровкаДополнительныхПолей) Результат = Новый ТаблицаЗначений; СтрокаДанных = Результат.Добавить(); @@ -527,6 +508,13 @@ СтрокаДанных[Имя] = ОбъектДанных[Имя]; КонецЦикла; + Для Каждого КлючИЗначение Из РасшифровкаДополнительныхПолей Цикл + Имя1 = КлючИЗначение.Ключ; + Имя2 = КлючИЗначение.Значение; + Результат.Колонки.Добавить(Имя1, Результат.Колонки[Имя2].ТипЗначения); + СтрокаДанных[Имя1] = СтрокаДанных[Имя2]; + КонецЦикла; + Возврат Результат; КонецФункции @@ -628,190 +616,6 @@ СтрокаДублей.Родитель = ГруппаДублей.Ссылка; КонецПроцедуры -// Формируем текст условия запроса и набор параметров. -// -Функция ФильтрПоискаПоКомпоновщику(Знач КомпоновщикОтбора) - Результат = Новый Структура("Параметры", Новый Структура); - - СтекГрупп = Новый Массив; - СтекГрупп.Вставить(0, ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ); - - Результат.Вставить("Текст", ТекстОтбораГруппыКомпоновщика(КомпоновщикОтбора.Настройки.Отбор.Элементы, СтекГрупп, Результат.Параметры) ); - Результат.Вставить("Описание", Строка(КомпоновщикОтбора.Настройки.Отбор) ); - - Возврат Результат; -КонецФункции - -// Формируем текст для использования в запросе, заполняем параметры. -// -Функция ТекстОтбораГруппыКомпоновщика(Знач ЭлементыГруппы, СтекГрупп, ПараметрыКомпоновщика) - КоличествоЭлементов = ЭлементыГруппы.Количество(); - - Если КоличествоЭлементов = 0 Тогда - // Пустая группа условий - Возврат ""; - КонецЕсли; - - ТипТекущейГруппы = СтекГрупп[0]; - - Текст = ""; - ТокенСравнения = ТокенСравненияГруппыОтбораКомпоновки(ТипТекущейГруппы); - - Для Каждого Элемент Из ЭлементыГруппы Цикл - - Если Не Элемент.Использование Тогда - Продолжить; - КонецЕсли; - - Если ТипЗнч(Элемент) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - // Одиночный элемент - ИмяПараметра = "ПараметрОтбора" + Формат(ПараметрыКомпоновщика.Количество(), "ЧН=; ЧГ="); - - ПоискПоПодобию = Ложь; - Текст = Текст + " " + ТокенСравнения + " " + ТекстСравненияГруппыОтбораКомпоновки(Элемент.ЛевоеЗначение, Элемент.ВидСравнения, "&" + ИмяПараметра, ПоискПоПодобию); - - Если ПоискПоПодобию Тогда - ПараметрыКомпоновщика.Вставить(ИмяПараметра, "%" + Элемент.ПравоеЗначение + "%"); - Иначе - ПараметрыКомпоновщика.Вставить(ИмяПараметра, Элемент.ПравоеЗначение); - КонецЕсли; - Иначе - // Вложенная группа - СтекГрупп.Вставить(0, Элемент.ТипГруппы); - ТекстГруппы = ТекстОтбораГруппыКомпоновщика(Элемент.Элементы, СтекГрупп, ПараметрыКомпоновщика); - Если Не ПустаяСтрока(ТекстГруппы) Тогда - Текст = Текст + " " + ТокенСравнения + " " + ТекстОтбораГруппыКомпоновщика(Элемент.Элементы, СтекГрупп, ПараметрыКомпоновщика); - КонецЕсли; - СтекГрупп.Удалить(0); - КонецЕсли; - - КонецЦикла; - - Если ПустаяСтрока(Текст) Тогда - Возврат ""; - КонецЕсли; - - Текст = Сред(Текст, 2 + СтрДлина(ТокенСравнения)); - Возврат ТокенОткрытияГруппыОтбораКомпоновки(ТипТекущейГруппы) - + "(" + Текст + ")"; -КонецФункции - -// Токен сравнения элементов внутри группы. -// -Функция ТокенСравненияГруппыОтбораКомпоновки(Знач ТипГруппы) - - Если ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ Тогда - Возврат "И"; - - ИначеЕсли ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли Тогда - Возврат "ИЛИ"; - - ИначеЕсли ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаНе Тогда - Возврат "И"; - - КонецЕсли; - - Возврат ""; -КонецФункции - -// Токен операции перед группой. -// -Функция ТокенОткрытияГруппыОтбораКомпоновки(Знач ТипГруппы) - - Если ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаНе Тогда - Возврат "НЕ" - КонецЕсли; - - Возврат ""; -КонецФункции - -// Текст сравнения двух операндов по виду сравнения. -// -Функция ТекстСравненияГруппыОтбораКомпоновки(Знач Поле, Знач ВидСравнения, Знач ИмяПараметра, ИспользованПоискПоПодобию = Ложь) - - ИспользованПоискПоПодобию = Ложь; - ПолеСравнения = Строка(Поле); - - Если ВидСравнения = ВидСравненияКомпоновкиДанных.Больше Тогда - Возврат ПолеСравнения + " > " + ИмяПараметра; - - ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно Тогда - Возврат ПолеСравнения + " >= " + ИмяПараметра; - - ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии Тогда - Возврат ПолеСравнения + " В ИЕРАРХИИ (" + ИмяПараметра + ") "; - - ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке Тогда - Возврат ПолеСравнения + " В (" + ИмяПараметра + ") "; - - ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии Тогда - Возврат ПолеСравнения + " В ИЕРАРХИИ (" + ИмяПараметра + ") "; - - ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено Тогда - ИспользованПоискПоПодобию = Истина; - Возврат ПолеСравнения + " НЕ ПОДОБНО """" "; - - ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше Тогда - Возврат ПолеСравнения + " < " + ИмяПараметра; - - ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно Тогда - Возврат ПолеСравнения + " <= " + ИмяПараметра; - - ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.НеВИерархии Тогда - Возврат ПолеСравнения + " НЕ В ИЕРАРХИИ (" + ИмяПараметра + ") "; - - ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке Тогда - Возврат ПолеСравнения + " НЕ В (" + ИмяПараметра + ")"; - - ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда - Возврат ПолеСравнения + " НЕ В ИЕРАРХИИ (" + ИмяПараметра + ") "; - - ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено Тогда - ИспользованПоискПоПодобию = Истина; - Возврат ПолеСравнения + " ПОДОБНО """" "; - - ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно Тогда - Возврат ПолеСравнения + " <> " + ИмяПараметра + " "; - - ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.НеСодержит Тогда - ИспользованПоискПоПодобию = Истина; - Возврат ПолеСравнения + " НЕ ПОДОБНО " + ИмяПараметра + " "; - - ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.Равно Тогда - Возврат ПолеСравнения + " = " + ИмяПараметра; - - ИначеЕсли ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит Тогда - ИспользованПоискПоПодобию = Истина; - Возврат ПолеСравнения + " ПОДОБНО " + ИмяПараметра + " ";; - - КонецЕсли; - - Возврат ""; -КонецФункции - -Процедура ГруппаОбластейПоискаДублей(Результат, ОбъектыСПоискомДублей, Знач АнализироватьПрикладныеПравила, Знач МенеджерГруппы, Знач Пиктограмма) - - Для Каждого Элемент Из МенеджерГруппы Цикл - ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(Элемент)); - Если Не ПравоДоступа("Чтение", ОбъектМетаданных) Тогда - // Нет доступа, не выводим в список. - Продолжить; - КонецЕсли; - - ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); - Если АнализироватьПрикладныеПравила Тогда - СведенияОбОбъекте = ОбъектыСПоискомДублей[ПолноеИмя]; - ЕстьПрикладныеПравила = СведенияОбОбъекте <> Неопределено - И (СведенияОбОбъекте = "" Или СтрНайти(СведенияОбОбъекте, "ПараметрыПоискаДублей") > 0); - Иначе - ЕстьПрикладныеПравила = Ложь; - КонецЕсли; - - Результат.Добавить(ПолноеИмя, Строка(ОбъектМетаданных), ЕстьПрикладныеПравила, БиблиотекаКартинок[Пиктограмма]); - КонецЦикла; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Для автономной работы. @@ -831,6 +635,78 @@ КонецЕсли; КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Прочие. + +Функция ДоступныеРеквизитыОтбора(ОбъектМетаданных) + МассивРеквизитов = Новый Массив; + Для Каждого РеквизитМетаданные Из ОбъектМетаданных.СтандартныеРеквизиты Цикл + Если РеквизитМетаданные.Тип.СодержитТип(Тип("ХранилищеЗначения")) Тогда + Продолжить; + КонецЕсли; + МассивРеквизитов.Добавить(РеквизитМетаданные.Имя); + КонецЦикла; + Для Каждого РеквизитМетаданные Из ОбъектМетаданных.Реквизиты Цикл + Если РеквизитМетаданные.Тип.СодержитТип(Тип("ХранилищеЗначения")) Тогда + Продолжить; + КонецЕсли; + МассивРеквизитов.Добавить(РеквизитМетаданные.Имя); + КонецЦикла; + Возврат СтрСоединить(МассивРеквизитов, ","); +КонецФункции + +Функция ИнициализироватьВыборкуКД(СхемаКД, НастройкиКД) + Выборка = Новый Структура("Таблица, ТекущийЭлемент, Индекс, ВГраница, ПроцессорКД, ПроцессорВыводаКД"); + КомпоновщикМакетаКД = Новый КомпоновщикМакетаКомпоновкиДанных; + МакетКД = КомпоновщикМакетаКД.Выполнить(СхемаКД, НастройкиКД, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); + + Выборка.ПроцессорКД = Новый ПроцессорКомпоновкиДанных; + Выборка.ПроцессорКД.Инициализировать(МакетКД); + + Выборка.Таблица = Новый ТаблицаЗначений; + Выборка.Индекс = -1; + Выборка.ВГраница = -100; + + Выборка.ПроцессорВыводаКД = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; + Выборка.ПроцессорВыводаКД.УстановитьОбъект(Выборка.Таблица); + + Возврат Выборка; +КонецФункции + +Функция ИнициализироватьВыборкуТЗ(ТаблицаЗначений) + Выборка = Новый Структура("Таблица, ТекущийЭлемент, Индекс, ВГраница, ПроцессорКД, ПроцессорВыводаКД"); + Выборка.Таблица = ТаблицаЗначений; + Выборка.Индекс = -1; + Выборка.ВГраница = ТаблицаЗначений.Количество() - 1; + Возврат Выборка; +КонецФункции + +Функция СледующийЭлементВыборки(Выборка) + Если Выборка.Индекс >= Выборка.ВГраница Тогда + Если Выборка.ПроцессорКД = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + Если Выборка.ВГраница = -100 Тогда + Выборка.ПроцессорВыводаКД.НачатьВывод(); + КонецЕсли; + Выборка.Таблица.Очистить(); + Выборка.Индекс = -1; + Выборка.ВГраница = -1; + Пока Выборка.ВГраница = -1 Цикл + ЭлементРезультатаКД = Выборка.ПроцессорКД.Следующий(); + Если ЭлементРезультатаКД = Неопределено Тогда + Выборка.ПроцессорВыводаКД.ЗакончитьВывод(); + Возврат Ложь; + КонецЕсли; + Выборка.ПроцессорВыводаКД.ВывестиЭлемент(ЭлементРезультатаКД); + Выборка.ВГраница = Выборка.Таблица.Количество() - 1; + КонецЦикла; + КонецЕсли; + Выборка.Индекс = Выборка.Индекс + 1; + Выборка.ТекущийЭлемент = Выборка.Таблица[Выборка.Индекс]; + Возврат Истина; +КонецФункции + #КонецОбласти #КонецЕсли \ 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 a19a19305..a0fe7fa6e 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для настройки параметров <a href="DataProcessor.ПоискИУстановкаОбновлений/Help">обновления программы</a> через Интернет. </p> <p>Для обновления с пользовательского сайта необходимо указать код пользователя и пароль для доступа. Доступ к получению обновлений имеют только зарегистрированные пользователи программ 1С:Предприятие. Подробная информация о том, как можно получить код пользователя и пароль, содержится в разделе методической поддержки на сайте <a href="http://v8.1c.ru/"><strong>v8.1c.ru</strong></a>. </p> <p>Открывается по команде <strong>Настройка обновления программы через Интернет</strong> из раздела <strong>Администрирование - Поддержка и обслуживания - Обновление версии программы</strong>.</p> diff --git a/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/НастройкаРезервнойКопии/Form.form b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/НастройкаРезервнойКопии/Form.form index f484071bf..76c10bc66 100644 --- a/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/НастройкаРезервнойКопии/Form.form +++ b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/НастройкаРезервнойКопии/Form.form @@ -231,6 +231,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -345,6 +346,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -413,6 +415,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -489,6 +492,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -562,6 +566,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> diff --git a/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/НастройкаРезервнойКопии/Help/ru.html b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/НастройкаРезервнойКопии/Help/ru.html index 0499f6b92..1471576d6 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для настройки резервного копирования информационной базы при обновлении программы.</p> <p>Перед началом обновления программы рекомендуется создавать резервную копию информационной базы. Резервная копия используется для автоматического восстановления информационной базы в случае нештатной ситуации.</p> <p>Открывается по ссылке <strong>Создавать временную резервную копию ИБ и выполнять откат при нештатной ситуации</strong> из окна <a href="DataProcessor.ПоискИУстановкаОбновлений/Help">Поиск и установка обновлений</a>. </p> diff --git a/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/Форма/Form.form index d6bcb6a81..0e0493c0b 100644 --- a/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/Форма/Form.form @@ -156,6 +156,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -540,6 +541,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -955,6 +957,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1062,6 +1065,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1120,6 +1124,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -1431,6 +1436,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1683,6 +1689,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1749,6 +1756,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -1892,6 +1900,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -2552,6 +2561,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -2692,6 +2702,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -2791,6 +2802,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -2892,6 +2904,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -3017,6 +3030,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -3331,6 +3345,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -3591,6 +3606,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -3856,6 +3872,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -3916,6 +3933,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -4080,6 +4098,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -4184,6 +4203,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -4290,6 +4310,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -4536,6 +4557,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -5035,6 +5057,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -5220,6 +5243,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -5327,6 +5351,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -5397,6 +5422,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -5680,6 +5706,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -5810,6 +5837,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -5983,6 +6011,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -6486,41 +6515,6 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>ОбнаруженнаяОшибкаПодключения</name> - <title> - <key>ru</key> - <value>Обнаруженная ошибка подключения</value> - - 14 - - String - - - - true - - - true - - - - ОчищатьДоступныеОбновления - - <key>ru</key> - <value>Очищать доступные обновления</value> - - 16 - - Boolean - - - true - - - true - - КонфигурацияИзменена diff --git a/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/Форма/Module.bsl index b742056cc..a4945db8c 100644 --- a/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Forms/Форма/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ПараметрыАдминистрирования; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -279,7 +283,7 @@ КонецПроцедуры &НаКлиенте -Процедура НадписьПодробнееОбИТСОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) +Процедура НадписьПодробнееОбИТСОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ОбновлениеКонфигурацииКлиент.ОткрытьВебСтраницу("http://its.1c.ru/about.php"); КонецПроцедуры @@ -294,21 +298,32 @@ &НаКлиенте Процедура ПолеФайлОбновленияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; - Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); - Диалог.Каталог = ПолучитьКаталогФайла(Объект.ИмяФайлаОбновления); + Обработчик = Новый ОписаниеОповещения("ПослеПодтвержденияБезопасности", ЭтотОбъект); + ПараметрыФормы = Новый Структура("Ключ", "ПередВыборомФайлаОбновления"); + ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы, , , , , Обработчик); + +КонецПроцедуры + +&НаКлиенте +Процедура ПослеПодтвержденияБезопасности(Результат, ДополнительныеПараметры) Экспорт + + Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); + Диалог.Каталог = ПолучитьКаталогФайла(Элементы.ПолеФайлОбновления.ТекстРедактирования); Диалог.ПроверятьСуществованиеФайла = Истина; - Диалог.Фильтр = НСтр("ru = 'Все файлы поставки (*.cf*;*.cfu)|*.cf*;*.cfu|Файлы поставки конфигурации (*.cf)|*.cf|Файлы поставки обновления конфигурации(*.cfu)|*.cfu'"); - Диалог.Заголовок = НСтр("ru = 'Выбор поставки обновления конфигурации'"); + Диалог.Фильтр = НСтр("ru = 'Все файлы поставки (*.cf*;*.cfu)|*.cf*;*.cfu|Файлы поставки конфигурации (*.cf)|*.cf|Файлы поставки обновления конфигурации(*.cfu)|*.cfu'"); + Диалог.Заголовок = НСтр("ru = 'Выбор поставки обновления конфигурации'"); Если Диалог.Выбрать() Тогда Объект.ИмяФайлаОбновления = Диалог.ПолноеИмяФайла; КонецЕсли; + КонецПроцедуры &НаКлиенте -Процедура ДекорацияОбновитеПлатформуОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) +Процедура ДекорацияОбновитеПлатформуОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; @@ -343,7 +358,7 @@ // Страница ДоступноеОбновление &НаКлиенте -Процедура ДекорацияПорядокОбновленияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) +Процедура ДекорацияПорядокОбновленияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ПоказатьПорядокОбновления(); @@ -378,7 +393,7 @@ КонецПроцедуры &НаКлиенте -Процедура НадписьПорядокОбновленияФайлОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) +Процедура НадписьПорядокОбновленияФайлОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ПоказатьПорядокОбновления(); @@ -399,7 +414,7 @@ КонецПроцедуры &НаКлиенте -Процедура НадписьПорядокОбновленияСерверОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) +Процедура НадписьПорядокОбновленияСерверОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ПоказатьПорядокОбновления(); @@ -407,7 +422,7 @@ КонецПроцедуры &НаКлиенте -Процедура НадписьОтложенныеОбработчикиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) +Процедура НадписьОтложенныеОбработчикиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ОткрытьФорму("Обработка.РезультатыОбновленияПрограммы.Форма.ОтложенныеОбработчики"); @@ -446,7 +461,7 @@ Процедура НовоеВВерсии(Команда) Если НЕ ПустаяСтрока(ИмяФайлаИнформацияОбОбновлении) Тогда - ОбновлениеКонфигурацииКлиент.ОткрытьВебСтраницу(ИмяФайлаИнформацияОбОбновлении); + ОбновлениеКонфигурацииКлиент.ОткрытьВебСтраницу(ИмяФайлаИнформацияОбОбновлении, НСтр("ru = 'Новое в версии'")); Иначе ПоказатьПредупреждение(, НСтр("ru = 'Информация об обновлении отсутствует.'")); КонецЕсли; @@ -933,10 +948,11 @@ НоваяТекущаяСтраница = Элементы.СтраницыПомощника.ТекущаяСтраница; КонецЕсли; - ДоступностьКнопкиНазад = Истина; - ДоступностьКнопкиДалее = Истина; - ДоступностьКнопкиЗакрыть = Истина; - ФункцияКнопкиДалее = Истина; // Истина = "Далее", Ложь = "Готово" + ДоступностьКнопкиНазад = Истина; + ДоступностьКнопкиДалее = Истина; + ДоступностьКнопкиЗакрыть = Истина; + ФункцияКнопкиДалее = Истина; // Истина = "Далее", Ложь = "Готово" + ФункцияКнопкиЗакрыть = Истина; // Истина = "Отмена", Ложь = "Закрыть" Если НоваяТекущаяСтраница = Страницы.ДоброПожаловать Тогда ДоступностьКнопкиНазад = Ложь; @@ -990,9 +1006,10 @@ ИначеЕсли НоваяТекущаяСтраница = Страницы.ОбновленияНеОбнаружено Тогда - СтруктураДоступногоОбновления = ПолучитьСтруктуруДоступногоОбновления(); - ФункцияКнопкиДалее = Ложь; - ДоступностьКнопкиДалее = Ложь; + СтруктураДоступногоОбновления = ПолучитьСтруктуруДоступногоОбновления(); + ФункцияКнопкиДалее = Ложь; + ФункцияКнопкиЗакрыть = Ложь; + ДоступностьКнопкиДалее = Ложь; Элементы.НадписьОписаниеТекущейКонфигурации.Заголовок = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().СинонимКонфигурации; Элементы.НадписьВерсияТекущейКонфигурации.Заголовок = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ВерсияКонфигурации; Элементы.НадписьВерсияДляОбновления.Заголовок = ?(ТипЗнч(СтруктураДоступногоОбновления) = Тип("Структура"), НСтр("ru = 'Доступная версия для обновления -'") + " " + СтруктураДоступногоОбновления.Версия, ""); @@ -1134,6 +1151,7 @@ КонецЕсли; КнопкаДалее.Заголовок = ?(ФункцияКнопкиДалее, НСтр("ru = 'Далее >'"), НСтр("ru = 'Готово'")); + КнопкаЗакрыть.Заголовок = ?(ФункцияКнопкиЗакрыть, НСтр("ru = 'Отмена'"), НСтр("ru = 'Закрыть'")); Если НоваяТекущаяСтраница = Страницы.ДлительнаяОперация Тогда ПодключитьОбработчикОжидания("ВыполнитьПолучениеОбновления", 1, Истина); @@ -1176,7 +1194,6 @@ &НаКлиенте Функция ОбработатьСтраницуДоброПожаловать(ВыдаватьСообщения = Истина) - ОчищатьДоступныеОбновления = Истина; Если Объект.ИсточникОбновления = 0 Тогда Возврат ПроверитьОбновлениеИнтернет(ВыдаватьСообщения); ИначеЕсли Объект.ИсточникОбновления = 2 Тогда @@ -1476,7 +1493,7 @@ Страницы = Элементы.СтраницыПомощника.ПодчиненныеЭлементы; Объект.ТехническаяИнформацияОбОшибке = ""; - Если НЕ СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НастройкиОбновления.ЕстьДоступДляОбновления Тогда + Если Не СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НастройкиОбновления.ЕстьДоступДляОбновления Тогда ПоказатьПредупреждение(, НСтр("ru = 'Недостаточно прав для выполнения обновления конфигурации.'")); Возврат Страницы.ДоступноеОбновление.Имя; КонецЕсли; @@ -1706,13 +1723,13 @@ ЭтоФайловаяБаза = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая; ОписаниеОповещения = Новый ОписаниеОповещения("ПослеПолученияПараметровАдминистрирования", ЭтотОбъект, ЭтоПереходДалее); - ЗаголовокФормы = Нстр("ru = 'Установка обновления'"); + ЗаголовокФормы = НСтр("ru = 'Установка обновления'"); Если ЭтоФайловаяБаза Тогда - ПоясняющаяНадпись = Нстр("ru = 'Для установки обновления необходимо ввести + ПоясняющаяНадпись = НСтр("ru = 'Для установки обновления необходимо ввести |параметры администрирования информационной базы'"); ЗапрашиватьПараметрыАдминистрированияКластера = Ложь; Иначе - ПоясняющаяНадпись = Нстр("ru = 'Для установки обновления необходимо ввести параметры + ПоясняющаяНадпись = НСтр("ru = 'Для установки обновления необходимо ввести параметры |администрирования кластера серверов и информационной базы'"); ЗапрашиватьПараметрыАдминистрированияКластера = Истина; КонецЕсли; @@ -1766,11 +1783,11 @@ КонецЕсли; - ТекстПредупреждения = Нстр("ru = 'Для установки обновления необходимо ввести параметры администрирования.'"); + ТекстПредупреждения = НСтр("ru = 'Для установки обновления необходимо ввести параметры администрирования.'"); ПоказатьПредупреждение(, ТекстПредупреждения); ИмяСобытияЖурнала = ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(); - ТекстСообщения = Нстр("ru = 'Не удалось установить обновление программы, т.к. не были введены + ТекстСообщения = НСтр("ru = 'Не удалось установить обновление программы, т.к. не были введены |корректные параметры администрирования информационной базы.'"); ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, "Ошибка", ТекстСообщения); @@ -2288,7 +2305,7 @@ Если Не РезультатПроверкиЛегальности.ЗначениеРезультата Тогда Элементы.ГруппаДоступаНаСайт.ТекущаяСтраница = Элементы.ГруппаДоступаНаСайт.ПодчиненныеЭлементы.ОшибкаПроверкиЛегальности; - ТекстОшибки = Нстр("ru = 'Не удалось подтвердить легальность получения обновления через Интернет по причине: + ТекстОшибки = НСтр("ru = 'Не удалось подтвердить легальность получения обновления через Интернет по причине: |%1'"); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, РезультатПроверкиЛегальности.ТекстОшибки); Элементы.ТекстОшибкиПроверкиЛегальности.Заголовок = ТекстОшибки; @@ -2670,10 +2687,10 @@ КонецЕсли; Комментарий = СокрЛП(Сред(ТекущаяСтрока, СтрНайти(ТекущаяСтрока, "}") + 2)); - Если Комментарий = Нстр("ru = 'Обновление выполнено'") Тогда + Если Комментарий = НСтр("ru = 'Обновление выполнено'") Тогда Объект.РезультатОбновления = Истина; Продолжить; - ИначеЕсли Комментарий = Нстр("ru = 'Обновление не выполнено'") Тогда + ИначеЕсли Комментарий = НСтр("ru = 'Обновление не выполнено'") Тогда Объект.РезультатОбновления = Ложь; Продолжить; КонецЕсли; @@ -2787,7 +2804,7 @@ СлужбаПланировщика = СлужбаПланировщика(); ОписаниеЗадачи = СлужбаПланировщика.NewTask(0); - ОписаниеЗадачи.RegistrationInfo.Description = Нстр("ru = 'Обновление конфигурации 1С:Предприятие'"); + ОписаниеЗадачи.RegistrationInfo.Description = НСтр("ru = 'Обновление конфигурации 1С:Предприятие'"); ОписаниеЗадачи.Principal.RunLevel = 1; @@ -2945,7 +2962,7 @@ &НаКлиенте Функция ИмяЗадачиScheduleService(Знач КодЗадачи) - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Нстр("ru = 'Обновление конфигурации (%1)'"), Формат(КодЗадачи, "ЧГ=0")); + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Обновление конфигурации (%1)'"), Формат(КодЗадачи, "ЧГ=0")); КонецФункции diff --git a/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Help/ru.html b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Help/ru.html index 041d00d23..e9c9a3605 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Поиск и установка обновлений позволяет получать информацию о последних обновлениях на пользовательском сайте в сети Интернет и автоматически их устанавливать.</p> <p>Открывается по команде <strong>Поиск и установка обновлений</strong> раздела <strong>Администрирование - Поддержка и обслуживание</strong>.</p> <p>Программа позволяет обновлять конфигурацию ИБ в режиме 1С:Предприятия. Обновление производится по требованию или в указанное время.</p> diff --git a/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Templates/МакетФайлаОбновленияКонфигурации/Template.txt b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Templates/МакетФайлаОбновленияКонфигурации/Template.txt index e79c948c5..78266d0c3 100644 --- a/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Templates/МакетФайлаОбновленияКонфигурации/Template.txt +++ b/SSL/src/DataProcessors/ПоискИУстановкаОбновлений/Templates/МакетФайлаОбновленияКонфигурации/Template.txt @@ -21,6 +21,7 @@ var startEnterprise = [ЗапускСеансаПослеОбновления]; var makeCompression = [ВыполнятьСжатиеТаблицИБ]; // запускать сжатие таблиц информационной базы var executeDeferredHandlers = [ВыполнитьОтложенныеОбработчики]; // выполнить отложенные обработчики обновления var tempLogFileName = "templog.txt"; +var errorFileName = "error.txt"; #КонецОбласти #Область ОбластьОбновленияКонфигурации @@ -98,9 +99,9 @@ function runApp(sFilePath, sFileArgs, show, bWaitOnReturn) { } function hidePass(text) { - beforePass = text.substr(0, text.indexOf("/P") + 3); - afterPass = text.substr(text.indexOf(" /WA-") - 1, text.indexOf("/P") + 3); - return (beforePass + "******" + afterPass); + beforePass = text.substr(0, text.indexOf("/P") + 2); + afterPass = text.substr(text.indexOf(" /WA-")); + return (beforePass + '"******"' + afterPass); } function clearLogFile() { @@ -390,7 +391,7 @@ function allowConnections() { } function doExecuteUpdate(lastVersion) { - if (useComConnector) { + if (useComConnector && doBlockUsers) { var connection = createConnection(); if (connection == null) return 1; @@ -405,7 +406,12 @@ function doExecuteUpdate(lastVersion) { } return 0; } - else return runApp(v8client, format('ENTERPRISE {0} {1} /CВыполнитьОбновлениеИЗавершитьРаботу', infoBasePath, infoBaseAuthorization), SW_SHOW, true); + else { + var result = runApp(v8client, format('ENTERPRISE {0} {1} /CВыполнитьОбновлениеИЗавершитьРаботу', infoBasePath, infoBaseAuthorization), SW_SHOW, true); + if (result == 0 && oFileSystemObject.FileExists(errorFileName)) + result = 1; + return result; + } } // Выполнение обработчиков обновления информационной базы через com diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Настройки/Help/ru.html b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Настройки/Help/ru.html new file mode 100644 index 000000000..a0fc33fba --- /dev/null +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Настройки/Help/ru.html @@ -0,0 +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 11.00.9600.18427"></meta></head><body> +<p>Предназначено для настройки области полнотекстового поиска.  </p> +<p>Можно ограничить область полнотекстового поиска с помощью переключателя, тем самым увеличив точность результатов поиска.</p> +<p>По умолчанию поиск производится <strong>Везде</strong>.</p> +<h3>Ограничение области поиска</h3> +<ul><li>С помощью переключателя укажите <strong>В разделах</strong>. +</li><li>Выберите разделы и списки, в которых будет производиться поиск, с помощью флажков. +</li><li>Нажмите <strong>ОК</strong>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Настройки/Module.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Настройки/Module.bsl index 2678781f7..78345bf01 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Настройки/Module.bsl +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/Настройки/Module.bsl @@ -241,7 +241,7 @@ НайденныеОбъекты = ТаблицаСправочники.НайтиСтроки(Отбор); Для Каждого Стр Из НайденныеОбъекты Цикл - Если Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(Стр) Тогда + Если Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(Стр.Объект) Тогда Продолжить; КонецЕсли; diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Help/ru.html b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Help/ru.html index 1dde4f3d9..c141062dc 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Help/ru.html +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Help/ru.html @@ -1,6 +1,6 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></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 11.00.9600.18427"></meta></head><body> <p>Полнотекстовый поиск данных позволяет находить любые сведения не только по полям карточек, но и по содержимому присоединенных файлов.</p> -<p>Полнотекстовый поиск можно выполнять прямо с <strong>Рабочего стола</strong> программы. </p> +<p>Полнотекстовый поиск можно выполнять прямо с <strong>Начальной страницы</strong> программы. </p> <p>Полнотекстовый поиск предоставляет такие возможности как: </p> <ul><li>Поддержка транслитерации (написание русских слов символами латиницы в соответствии с ГОСТ); </li><li>Поддержка замещения (написание русских слов в английской раскладке); @@ -10,7 +10,7 @@ <p>В файловом варианте информационной базы индекс полнотекстового поиска не обновляется автоматически и поэтому должен периодически обновляться вручную. Если индекс полнотекстового поиска не актуален (т.е. есть такие данные, которые еще не прошли индексирование), то в файловом варианте информационной базы становится доступна кнопка <strong>Обновить индекс</strong>.</p> <h3>Примеры</h3> <p></p> -<table border="0" cellpadding="8" width="100%"><tbody><tr><td valign="top"><strong>Пример поиска</strong></td> +<table cellpadding="8" width="100%" border="0"><tbody><tr><td valign="top"><strong>Пример поиска</strong></td> <td valign="top"><strong>Результат</strong></td></tr><tr><td valign="top">«Реализация 00016422»</td> <td valign="top">Найдет документ «реализация товаров и услуг» с номером «00016422»</td></tr><tr><td valign="top">«Платежное 120000»</td> <td valign="top">Найдет платежные поручения на суммы 120000 и 120000,50</td></tr><tr><td valign="top">«Иванов Акация»</td> diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ПолнотекстовыйПоискВДанных.mdo b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ПолнотекстовыйПоискВДанных.mdo index 09457e8c3..40f629953 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ПолнотекстовыйПоискВДанных.mdo +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/ПолнотекстовыйПоискВДанных.mdo @@ -30,6 +30,11 @@ <key>ru</key> <value>Настройки</value> </synonym> + <help> + <pages> + <lang>ru</lang> + </pages> + </help> <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> </forms> diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form index 106e8f863..8fa45dad9 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form @@ -607,6 +607,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -690,6 +691,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -792,6 +794,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -1831,6 +1834,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1912,6 +1916,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1978,6 +1983,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -2048,6 +2054,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -2118,6 +2125,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -2284,6 +2292,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -2350,6 +2359,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -2420,6 +2430,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -2490,6 +2501,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -3043,6 +3055,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -4818,6 +4831,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -5035,6 +5049,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -5252,6 +5267,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -5338,6 +5354,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -5527,6 +5544,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -5716,6 +5734,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -5884,6 +5903,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -6014,6 +6034,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -6117,6 +6138,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -6220,6 +6242,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -6327,6 +6350,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl index 635fdef0d..216351daa 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl @@ -16,9 +16,13 @@ // параметре КодУзлаИнформационнойБазы. // +#Область ОписаниеПеременных + &НаКлиенте Перем ПропускатьКонтрольОтказаТекущейСтраницы; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -151,7 +155,6 @@ Если ОбменЧерезВебСервис И Не WSЗапомнитьПароль Тогда // Требуется пароль, скрываем лишние реквизиты. Элементы.ГруппаВыборВидаТранспортаИзДоступных.Видимость = Ложь; - Элементы.Декорация3.Видимость = Ложь; Элементы.КаталогОбменаИнформацией.Видимость = Ложь; ИзменитьЗаголовок = Истина; Иначе @@ -683,9 +686,9 @@ ДополнительныеПараметры = Новый Структура(); ДополнительныеПараметры.Вставить("ИмяКаталога", ИмяКаталога); - Оповещение = Новый ОписаниеОповещения("ПослеПроверкиРасширенияРаботыСФайлами", ЭтаФорма, ДополнительныеПараметры); + Оповещение = Новый ОписаниеОповещения("ПослеПроверкиРасширенияРаботыСФайлами", ЭтотОбъект, ДополнительныеПараметры); - ТекстПредложения = Нстр("ru = 'Для открытия каталога необходимо необходимо установить расширение работы с файлами.'"); + ТекстПредложения = НСтр("ru = 'Для открытия каталога необходимо необходимо установить расширение работы с файлами.'"); ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстПредложения); КонецПроцедуры @@ -697,11 +700,11 @@ Если Результат Тогда Файл = Новый Файл(); - ОписаниеОповещения = Новый ОписаниеОповещения("ПроверитьСуществованиеФайла", ЭтаФорма, ДополнительныеПараметры); + ОписаниеОповещения = Новый ОписаниеОповещения("ПроверитьСуществованиеФайла", ЭтотОбъект, ДополнительныеПараметры); Файл.НачатьИнициализацию(ОписаниеОповещения, ДополнительныеПараметры.ИмяКаталога); Иначе - ТекстПредупреждения = Нстр("ru = 'Расширение для работы с файлами не установлено, открытие каталога не возможно.'"); + ТекстПредупреждения = НСтр("ru = 'Расширение для работы с файлами не установлено, открытие каталога не возможно.'"); ПоказатьПредупреждение(, ТекстПредупреждения); КонецЕсли; @@ -711,7 +714,7 @@ &НаКлиенте Процедура ПроверитьСуществованиеФайла(Файл, ДополнительныеПараметры) Экспорт ДополнительныеПараметры.Вставить("Файл", Файл); - ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОпределенияСуществованияФайла", ЭтаФорма, ДополнительныеПараметры); + ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОпределенияСуществованияФайла", ЭтотОбъект, ДополнительныеПараметры); Файл.НачатьПроверкуСуществования(ОписаниеОповещения); КонецПроцедуры @@ -721,7 +724,7 @@ Если Существует Тогда Файл = ДополнительныеПараметры.Файл; - ОписаниеОповещения = Новый ОписаниеОповещения("ОпределитьЭтоКаталог", ЭтаФорма, ДополнительныеПараметры); + ОписаниеОповещения = Новый ОписаниеОповещения("ОпределитьЭтоКаталог", ЭтотОбъект, ДополнительныеПараметры); Файл.НачатьПроверкуЭтоКаталог(ОписаниеОповещения); Иначе ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -737,7 +740,7 @@ Процедура ОпределитьЭтоКаталог(ЭтоКаталог, ДополнительныеПараметры) Экспорт Если ЭтоКаталог Тогда - ОписаниеОповещения = Новый ОписаниеОповещения("ОткрытьКаталогСФайлом", ЭтаФорма, ДополнительныеПараметры); + ОписаниеОповещения = Новый ОписаниеОповещения("ОткрытьКаталогСФайлом", ЭтотОбъект, ДополнительныеПараметры); НачатьЗапускПриложения(ОписаниеОповещения, ДополнительныеПараметры.ИмяКаталога); Иначе ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -862,13 +865,14 @@ УзелИспользуетсяВСценарииОбмена = УзелИнформационнойБазыИспользуетсяВСценарииОбмена(Объект.УзелИнформационнойБазы); - Элементы.ИнформационнаяНадписьНастройкиРасписания.Видимость = Не УзелИспользуетсяВСценарииОбмена И Пользователи.РолиДоступны("НастройкаСинхронизацииДанных"); + Элементы.ИнформационнаяНадписьНастройкиРасписания.Видимость = Не УзелИспользуетсяВСценарииОбмена + И ОбменДаннымиСервер.ЕстьПраваНаАдминистрированиеОбменов(); - ОткрытьПомощникСозданияСценарияОбменаДанными = Пользователи.РолиДоступны("НастройкаСинхронизацииДанных"); - - Элементы.ИнформационнаяНадписьНастройкиРасписания.Видимость = ОткрытьПомощникСозданияСценарияОбменаДанными; + ОткрытьПомощникСозданияСценарияОбменаДанными = ОбменДаннымиСервер.ЕстьПраваНаАдминистрированиеОбменов(); + + Элементы.ИнформационнаяНадписьНастройкиРасписания.Видимость = ОткрытьПомощникСозданияСценарияОбменаДанными; КонецЕсли; - + // Устанавливаем текущую таблицу переходов. Если ОбменЧерезПодключениеККорреспонденту Тогда @@ -1079,7 +1083,7 @@ &НаСервере Процедура ОбновитьСтраницыНастроекТранспорта() - РольДоступнаДобавлениеИзменениеОбменовДанными = Пользователи.РолиДоступны("НастройкаСинхронизацииДанных"); + РольДоступнаДобавлениеИзменениеОбменовДанными = ОбменДаннымиСервер.ЕстьПраваНаАдминистрированиеОбменов(); Элементы.НастроитьПараметрыТранспортаСообщенийОбмена.Видимость = РольДоступнаДобавлениеИзменениеОбменовДанными; @@ -1199,14 +1203,18 @@ Если Состояние <> "Завершено" Тогда ДлительнаяОперацияЗавершенаСОшибкой = Истина; - + Иначе + // Чтение результата завершения. + Результат = Новый Структура("Отказ", Ложь); + ФоновоеЗаданиеЗагрузитьРезультат(Результат); + ДлительнаяОперацияЗавершенаСОшибкой = Результат.Отказ; КонецЕсли; ДлительнаяОперация = Ложь; ДлительнаяОперацияЗавершена = Истина; ПрочитатьСообщенияПользователю(); Если ЗакрытьФормуБезусловно Тогда - ЭтаФорма.Закрыть(); + ЭтотОбъект.Закрыть(); КонецЕсли; Если ИспользоватьПрогрессБар И ОтображаетсяПрогрессБар Тогда ПроцентВыполнения = 100; @@ -1283,7 +1291,7 @@ Отказ = Ложь; ПерейтиДалее = Истина; - А = Вычислить(ИмяПроцедуры); + РезультатВычисления = Вычислить(ИмяПроцедуры); Если Отказ Тогда @@ -1504,7 +1512,7 @@ Отказ = Ложь; - А = Вычислить(ИмяПроцедуры); + РезультатВычисления = Вычислить(ИмяПроцедуры); Если Отказ Тогда @@ -1549,7 +1557,7 @@ Отказ = Ложь; ПропуститьСтраницу = Ложь; - А = Вычислить(ИмяПроцедуры); + РезультатВычисления = Вычислить(ИмяПроцедуры); Если Отказ Тогда @@ -1653,6 +1661,20 @@ КонецФункции +&НаСервере +Процедура ФоновоеЗаданиеЗагрузитьРезультат(Результат) + Если АдресВременногоХранилища = Неопределено Тогда + Возврат; + КонецЕсли; + РезультатВыполненияВФоне = ПолучитьИзВременногоХранилища(АдресВременногоХранилища); + Если РезультатВыполненияВФоне = Неопределено Тогда + Возврат; + ИначеЕсли РезультатВыполненияВФоне.Свойство("Отказ") Тогда + Результат.Отказ = РезультатВыполненияВФоне.Отказ; + КонецЕсли; +КонецПроцедуры + + //////////////////////////////////////////////////////////////////////////////// // Переопределяемая часть - Обработчики событий переходов. @@ -1904,8 +1926,11 @@ Исключение ПропуститьПолучениеДанных = Истина; - ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - НСтр("ru = 'Помощник интерактивного обмена данными.Анализ данных'")); + ОбменДаннымиВызовСервера.ЗафиксироватьЗавершениеОбменаСОшибкой( + Объект.УзелИнформационнойБазы, + "ЗагрузкаДанных", + ТекущаяДатаСеанса(), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; @@ -1976,6 +2001,32 @@ Если РезультатАнализа.Свойство("ТекстОшибки") Тогда ОшибкаРасхожденияВерсийПриПолученииДанных = РезультатАнализа; + ИначеЕсли РезультатАнализа.Свойство("Отказ") Тогда + ПропуститьПолучениеДанных = Истина; + ЗафиксироватьОшибку = Истина; + Если РезультатАнализа.Свойство("РезультатВыполненияОбмена") Тогда + Если РезультатАнализа.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Предупреждение_СообщениеОбменаБылоРанееПринято Тогда + СтруктураНастроекОбмена = Новый Структура; + СтруктураНастроекОбмена.Вставить("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); + СтруктураНастроекОбмена.Вставить("РезультатВыполненияОбмена", РезультатАнализа.РезультатВыполненияОбмена); + СтруктураНастроекОбмена.Вставить("ДействиеПриОбмене", "ЗагрузкаДанных"); + СтруктураНастроекОбмена.Вставить("КоличествоОбъектовОбработано", 0); + СтруктураНастроекОбмена.Вставить("КлючСообщенияЖурналаРегистрации", ОбменДаннымиСервер.ПолучитьКлючСообщенияЖурналаРегистрации(Объект.УзелИнформационнойБазы, "ЗагрузкаДанных")); + СтруктураНастроекОбмена.Вставить("ДатаНачала", ТекущаяДатаСеанса()); + СтруктураНастроекОбмена.Вставить("ДатаОкончания", ТекущаяДатаСеанса()); + СтруктураНастроекОбмена.Вставить("ЭтоОбменВРИБ", ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(Объект.УзелИнформационнойБазы)); + + ОбменДаннымиСервер.ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); + ЗафиксироватьОшибку = Ложь; + КонецЕсли; + КонецЕсли; + Если ЗафиксироватьОшибку Тогда + ОбменДаннымиВызовСервера.ЗафиксироватьЗавершениеОбменаСОшибкой( + Объект.УзелИнформационнойБазы, + "ЗагрузкаДанных", + ТекущаяДатаСеанса(), + НСтр("ru = 'Не удалось загрузить данные из ""%1"" (этап анализа данных).'")); + КонецЕсли; Иначе ВсеДанныеСопоставлены = РезультатАнализа.ВсеДанныеСопоставлены; @@ -2096,15 +2147,17 @@ ДлительнаяОперация = Истина; ИдентификаторЗадания = Результат.ИдентификаторЗадания; - КонецЕсли; Исключение ПропуститьПолучениеДанных = Истина; УдалитьВременныйКаталогСообщенийОбмена(Объект.ИмяВременногоКаталогаСообщенийОбмена); - ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - НСтр("ru = 'Помощник интерактивного обмена данными.Загрузка данных'")); + ОбменДаннымиВызовСервера.ЗафиксироватьЗавершениеОбменаСОшибкой( + Объект.УзелИнформационнойБазы, + "ЗагрузкаДанных", + ТекущаяДатаСеанса(), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат; КонецПопытки; @@ -2187,7 +2240,7 @@ Процедура ВыгрузкаДанных() ИдентификаторЗадания = Неопределено; - + АдресВременногоХранилища = Неопределено; ДатаНачалаОперации = ТекущаяДатаСеанса(); // Сохраняем настройки дополнения выгрузки. @@ -2226,13 +2279,16 @@ ДлительнаяОперация = Истина; ИдентификаторЗадания = Результат.ИдентификаторЗадания; - + АдресВременногоХранилища = Результат.АдресХранилища; КонецЕсли; Исключение УдалитьВременныйКаталогСообщенийОбмена(Объект.ИмяВременногоКаталогаСообщенийОбмена); - ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), - НСтр("ru = 'Помощник интерактивного обмена данными.Выгрузка данных'")); + ОбменДаннымиВызовСервера.ЗафиксироватьЗавершениеОбменаСОшибкой( + Объект.УзелИнформационнойБазы, + "ВыгрузкаДанных", + ТекущаяДатаСеанса(), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат; КонецПопытки; diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Help/ru.html b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Help/ru.html index db7bd8346..71dbad84b 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Помощник интерактивной синхронизации данных предназначен для выполнения синхронизации данных с возможностью предварительного просмотра и сопоставления загружаемых данных. Помощник позволяет выполнять сопоставление объектов двух информационных баз, между которыми настроена синхронизация данных. После выполнения сопоставления выполняется загрузка данных и последующая выгрузка данных.</p> <p>Режим интерактивной синхронизации данных следует использовать в случае, когда до начала синхронизации один и тот же объект мог быть введен независимо в обеих обменивающихся ИБ. Другими словами, интерактивный режим синхронизации данных следует выбирать при первой синхронизации данных между ИБ, учет в которых уже ведется. Поскольку вероятность существования в таких ИБ одних и тех же объектов очень высока. В этом случае интерактивный режим позволит такие объекты сопоставить вручную.</p> <p>Открыть помощник можно, нажав кнопку <img src="CommonPicture.СинхронизацияДанныхИнтерактивноеВыполнение" width="16" height="16"></img> <strong>Синхронизировать данные, задав дополнительные параметры</strong> в списке <a href="CommonForm.СинхронизацияДанных/Help">Синхронизация данных</a>.</p> diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ManagerModule.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ManagerModule.bsl index 5fc50e3df..52b9dbaee 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ManagerModule.bsl @@ -14,7 +14,7 @@ // Для внутреннего использования. // -Функция РезультатАвтоматическогоСопоставленияДанных(Знач Корреспондент, Знач ИмяФайлаСообщенияОбмена, Знач ИмяВременногоКаталогаСообщенийОбмена, ПроверятьРасхождениеВерсий) Экспорт +Функция РезультатАвтоматическогоСопоставленияДанных(Знач Корреспондент, Знач ИмяФайлаСообщенияОбмена, Знач ИмяВременногоКаталогаСообщенийОбмена, ПроверятьРасхождениеВерсий) // Выполняем автоматическое сопоставление данных, полученных от корреспондента. // Получаем статистику сопоставления. @@ -32,10 +32,19 @@ // Выполняем анализ сообщения обмена. Отказ = Ложь; - ПомощникИнтерактивногоОбменаДанными.ВыполнитьАнализСообщенияОбмена(Отказ); + РезультатВыполненияОбмена = Неопределено; + ПомощникИнтерактивногоОбменаДанными.ВыполнитьАнализСообщенияОбмена(Отказ, РезультатВыполненияОбмена); Если Отказ Тогда Если ПараметрыСеанса.ОшибкаРасхожденияВерсийПриПолученииДанных.ЕстьОшибка Тогда Возврат ПараметрыСеанса.ОшибкаРасхожденияВерсийПриПолученииДанных; + ИначеЕсли РезультатВыполненияОбмена <> Неопределено Тогда + Результат = Новый Структура; + Результат.Вставить("ИнформацияСтатистики", Неопределено); + Результат.Вставить("ВсеДанныеСопоставлены", Истина); + Результат.Вставить("СтатистикаПустая", Истина); + Результат.Вставить("Отказ", Истина); + Результат.Вставить("РезультатВыполненияОбмена", РезультатВыполненияОбмена); + Возврат Результат; Иначе ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось загрузить данные из ""%1"" (этап анализа данных).'"), @@ -77,7 +86,7 @@ // Для внутреннего использования. // Выполняет выгрузку данных, вызывается фоновым заданием -// Параметры - структура с параметрами для передачи +// Параметры - структура с параметрами для передачи. Процедура ВыполнитьВыгрузкуДанных(Параметры, АдресВременногоХранилища) Экспорт Отказ = Ложь; @@ -98,7 +107,7 @@ Параметры.ИдентификаторОперации = ПараметрыОбмена.ИдентификаторОперации; Параметры.ИдентификаторФайла = ПараметрыОбмена.ИдентификаторФайла; Параметры.WSПароль = ПараметрыОбмена.ПараметрыАутентификации; - + ПоместитьВоВременноеХранилище(Новый Структура("Отказ", Отказ), АдресВременногоХранилища); КонецПроцедуры // Для внутреннего использования. diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl index 0ea21a4a1..183aca47d 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl @@ -292,8 +292,9 @@ // // Параметры: // Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибок при работе процедуры. +// РезультатВыполненияОбмена - ПеречислениеСсылка.РезультатыВыполненияОбмена - результат выполнения обмена данными. // -Процедура ВыполнитьАнализСообщенияОбмена(Отказ) Экспорт +Процедура ВыполнитьАнализСообщенияОбмена(Отказ, РезультатВыполненияОбмена = Неопределено) Экспорт Если ПустаяСтрока(ИмяВременногоКаталогаСообщенийОбмена) Тогда // Не удалось получить данные из другой программы. @@ -313,6 +314,7 @@ ПараметрыАнализа = Новый Структура("СобиратьСтатистикуКлассификаторов", Истина); ОбработкаОбменаДанными.ВыполнитьАнализСообщенияОбмена(ПараметрыАнализа); + РезультатВыполненияОбмена = ОбработкаОбменаДанными.РезультатВыполненияОбмена(); Если ОбработкаОбменаДанными.ФлагОшибки() Тогда Отказ = Истина; @@ -406,18 +408,10 @@ НСтрока = НСтр("ru = 'При загрузке сообщения обмена возникли ошибки: %1'"); НСтрока = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтрока, ОбработкаОбменаДанными.СтрокаСообщенияОбОшибке()); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,,,, Отказ); - - // В случае ошибки фиксируем результат загрузки. - СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("УзелИнформационнойБазы", СтруктураНастроекОбмена.УзелИнформационнойБазы); - СтруктураЗаписи.Вставить("ДействиеПриОбмене", СтруктураНастроекОбмена.ДействиеПриОбмене); - - СтруктураЗаписи.Вставить("РезультатВыполненияОбмена", Перечисления.РезультатыВыполненияОбмена.Ошибка); - СтруктураЗаписи.Вставить("ДатаНачала", СтруктураНастроекОбмена.ДатаНачала); - СтруктураЗаписи.Вставить("ДатаОкончания", ТекущаяДатаСеанса()); - - РегистрыСведений.СостоянияОбменовДанными.ДобавитьЗапись(СтруктураЗаписи); + ОбменДаннымиСервер.ЗафиксироватьЗавершениеОбменаСОшибкой(СтруктураНастроекОбмена.УзелИнформационнойБазы, + СтруктураНастроекОбмена.ДействиеПриОбмене, + СтруктураНастроекОбмена.ДатаНачала, + НСтрока); Возврат; КонецЕсли; diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Form.form index af8ec0af3..9aedbc0b0 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Form.form @@ -585,6 +585,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1187,6 +1188,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1611,6 +1613,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -2064,6 +2067,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -2502,6 +2506,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -2642,6 +2647,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -2767,6 +2773,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -3049,6 +3056,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -3111,6 +3119,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -3153,6 +3162,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -3268,6 +3278,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -3466,6 +3477,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -3671,11 +3683,6 @@ <userVisible> <common>true</common> </userVisible> - <title> - <key>ru</key> - <value> -</value> - System.DefaultGUIFont true @@ -4032,6 +4039,7 @@ Vertical auto + false @@ -4495,6 +4503,7 @@ Vertical auto + false @@ -4900,6 +4909,7 @@ Vertical auto + false @@ -5029,6 +5039,7 @@ Page auto + false true @@ -5440,6 +5451,7 @@ Vertical auto + false @@ -5965,6 +5977,7 @@ Vertical auto + false @@ -6078,6 +6091,7 @@ Vertical auto + false true @@ -6166,6 +6180,7 @@ Vertical auto + false @@ -6624,6 +6639,7 @@ Vertical auto + false @@ -7452,6 +7468,7 @@ Vertical auto + false @@ -7972,6 +7989,7 @@ Vertical auto + false @@ -8792,6 +8810,7 @@ Vertical auto + false @@ -9264,6 +9283,7 @@ Vertical auto + false @@ -9753,6 +9773,7 @@ Vertical auto + false @@ -10240,6 +10261,7 @@ Vertical auto + false @@ -10466,6 +10488,7 @@ Vertical auto + false @@ -11128,6 +11151,7 @@ Vertical auto + false @@ -11266,6 +11290,7 @@ Page auto + false true @@ -11421,6 +11446,7 @@ Vertical auto + false @@ -11608,188 +11634,6 @@ Auto - - ГруппаПрогрессБарВыгрузкаВнешнееСоединение - 2530 - - Декорация2 - 2532 - true - true - - true - - - Декорация2РасширеннаяПодсказка - 2534 - Label - true - true - - Left - - - - Декорация2КонтекстноеМеню - 2533 - true - - Label - 6 - true - 4 - true - - Left - - - - ГруппаПрогрессБарВыгрузкаВертикальная1 - 2535 - - ПроцентВыполнения1 - 2537 - true - true - - true - - - ПроцентВыполнения - - None - - ПроцентВыполнения1РасширеннаяПодсказка - 2539 - Label - true - true - - Left - - - - ПроцентВыполнения1КонтекстноеМеню - 2538 - true - - ProgressBarField - Enter - true - Left - true - - 32 - true - 1 - true - true - 100 - true - - - - ДопИнформацияВыполнение1 - 2540 - true - true - - true - - - ДопИнформацияВыполнение - - None - - ДопИнформацияВыполнение1РасширеннаяПодсказка - 2542 - Label - true - true - - Left - - - - ДопИнформацияВыполнение1КонтекстноеМеню - 2541 - true - - LabelField - Enter - true - Left - true - - true - true - - - true - true - - true - - - <key>ru</key> - <value>Группа прогресс бар выгрузка вертикальная</value> - - - ru - Группа прогресс бар выгрузка вертикальная - - - ГруппаПрогрессБарВыгрузкаВертикальная1РасширеннаяПодсказка - 2536 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Группа прогресс бар выгрузка</value> - - - ru - Группа прогресс бар выгрузка - - - ГруппаПрогрессБарВыгрузкаВнешнееСоединениеРасширеннаяПодсказка - 2531 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - Декорация104 897 @@ -11884,6 +11728,7 @@ Vertical auto + false @@ -12098,6 +11943,7 @@ Vertical auto + false @@ -12312,6 +12158,7 @@ Vertical auto + false @@ -12526,6 +12373,7 @@ Vertical auto + false @@ -12740,6 +12588,7 @@ Vertical auto + false @@ -12954,6 +12803,7 @@ Vertical auto + false @@ -13164,6 +13014,7 @@ Vertical auto + false @@ -13374,6 +13225,7 @@ Vertical auto + false @@ -13588,6 +13440,7 @@ Vertical auto + false true @@ -13831,6 +13684,7 @@ Page auto + false @@ -14037,6 +13891,7 @@ Page auto + false @@ -14243,6 +14098,7 @@ Page auto + false @@ -14453,6 +14309,7 @@ Page auto + false @@ -14658,6 +14515,7 @@ Page auto + false @@ -14871,6 +14729,7 @@ Page auto + false true @@ -15191,7 +15050,7 @@ ВыполнитьСозданиеНачальногоОбразаСейчас <key>ru</key> - <value>Создать начальный образ подчиненнего узла РИБ (рекомендуется)</value> + <value>Создать начальный образ подчиненного узла РИБ (рекомендуется)</value> 20 diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl index 85e09eb17..457bb905d 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ЗакрытьФормуБезусловно, ПользовательОтветилДаНаВопросОСопоставлении, ПропускатьКонтрольОтказаТекущейСтраницы, ВнешниеРесурсыРазрешены; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -98,7 +102,7 @@ ИспользоватьТранспортСообщенийОбменаCOM = (ИспользуемыеТранспортыСообщенийОбмена.Найти(Перечисления.ВидыТранспортаСообщенийОбмена.COM) <> Неопределено); ИспользоватьТранспортСообщенийОбменаWS = (ИспользуемыеТранспортыСообщенийОбмена.Найти(Перечисления.ВидыТранспортаСообщенийОбмена.WS) <> Неопределено); - // получаем другие настройки + // Получаем другие настройки. Объект.ПрефиксИнформационнойБазыИсточника = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); Объект.ПрефиксИнформационнойБазыИсточникаУстановлен = ЗначениеЗаполнено(Объект.ПрефиксИнформационнойБазыИсточника); @@ -301,9 +305,10 @@ ПользовательОтветилДаНаВопросОСопоставлении = Ложь; ВнешниеРесурсыРазрешены = Новый Структура; - ВнешниеРесурсыРазрешены.Вставить("РазрешенCom", Ложь); + ВнешниеРесурсыРазрешены.Вставить("РазрешенCom", Ложь); ВнешниеРесурсыРазрешены.Вставить("РазрешенFILE", Ложь); - ВнешниеРесурсыРазрешены.Вставить("РазрешенFTP", Ложь); + ВнешниеРесурсыРазрешены.Вставить("РазрешенFTP", Ложь); + ВнешниеРесурсыРазрешены.Вставить("РазрешенWS", Ложь); АутентификацияОперационнойСистемыПриИзменении(); @@ -594,6 +599,7 @@ ПараметрыФормы.Вставить("ВерсияКорреспондента", ВерсияКонфигурацииКорреспондента); ПараметрыФормы.Вставить("ПараметрыПодключения", СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения)); ПараметрыФормы.Вставить("Настройки", КонтекстФормыНастройкиУзлов); + ПараметрыФормы.Вставить("ИдентификаторНастройки", Объект.ВариантНастройкиОбмена); Обработчик = Новый ОписаниеОповещения("ВыполнитьНастройкуВыгрузкиДанныхЗавершение", ЭтотОбъект); Режим = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; @@ -740,8 +746,8 @@ ДополнительныеПараметры = Новый Структура(); ДополнительныеПараметры.Вставить("АдресВременногоХранилища", АдресВременногоХранилища); - ТекстПредложения = Нстр("ru = 'Для открытия каталога необходимо необходимо установить расширение работы с файлами.'"); - Оповещение = Новый ОписаниеОповещения("ПослеПроверкиРасширенияРаботыСФайлами", ЭтаФорма, ДополнительныеПараметры); + ТекстПредложения = НСтр("ru = 'Для открытия каталога необходимо необходимо установить расширение работы с файлами.'"); + Оповещение = Новый ОписаниеОповещения("ПослеПроверкиРасширенияРаботыСФайлами", ЭтотОбъект, ДополнительныеПараметры); ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстПредложения); #КонецЕсли @@ -763,7 +769,7 @@ Диалог.Фильтр = "Файл настроек синхронизации данных(*.xml)|*.xml"; Диалог.ПолноеИмяФайла = ИмяФайлаНастроекДляПриемника; - Оповещение = Новый ОписаниеОповещения("ПослеВыбораФайла", ЭтаФорма, ДополнительныеПараметры); + Оповещение = Новый ОписаниеОповещения("ПослеВыбораФайла", ЭтотОбъект, ДополнительныеПараметры); Диалог.Показать(Оповещение); КонецЕсли; @@ -822,9 +828,14 @@ &НаКлиенте Процедура ПроверитьПодключениеWS(Команда) - ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПроверитьПодключениеWSЗавершение", ЭтотОбъект); - Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект, Ложь, Ложь, Истина, Ложь); - РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); + Отказ = Ложь; + ПроверитьКорректностьПараметровПодключенияWS(Отказ); + + Если Не Отказ Тогда + ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПроверитьПодключениеWSЗавершение", ЭтотОбъект); + Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект, Ложь, Ложь, Истина, Ложь); + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); + КонецЕсли; КонецПроцедуры @@ -908,9 +919,9 @@ КонецПроцедуры &НаКлиенте -Процедура НадписьРезервноеКопированиеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) +Процедура НадписьРезервноеКопированиеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) - Если НавигационнаяСсылка = "СоздатьРезервнуюКопию" Тогда + Если НавигационнаяСсылкаФорматированнойСтроки = "СоздатьРезервнуюКопию" Тогда СтандартнаяОбработка = Ложь; @@ -1034,7 +1045,7 @@ Отказ = Ложь; - А = Вычислить(ИмяПроцедуры); + РезультатВычисления = Вычислить(ИмяПроцедуры); Если Отказ Тогда @@ -1065,7 +1076,7 @@ Отказ = Ложь; - А = Вычислить(ИмяПроцедуры); + РезультатВычисления = Вычислить(ИмяПроцедуры); Если Отказ Тогда @@ -1102,7 +1113,7 @@ Отказ = Ложь; ПропуститьСтраницу = Ложь; - А = Вычислить(ИмяПроцедуры); + РезультатВычисления = Вычислить(ИмяПроцедуры); Если Отказ Тогда @@ -1152,7 +1163,7 @@ Отказ = Ложь; ПерейтиДалее = Истина; - А = Вычислить(ИмяПроцедуры); + РезультатВычисления = Вычислить(ИмяПроцедуры); Если Отказ Тогда @@ -1759,6 +1770,62 @@ КонецПроцедуры +&НаКлиенте +Процедура ПроверитьКорректностьПараметровПодключенияWS(Отказ) + + Если ПустаяСтрока(Объект.WSURLВебСервиса) Тогда + + НСтрока = НСтр("ru = 'Укажите адрес приложения в Интернете.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.WSURLВебСервиса",, Отказ); + + ИначеЕсли ПустаяСтрока(Объект.WSИмяПользователя) Тогда + + НСтрока = НСтр("ru = 'Укажите имя пользователя.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.WSИмяПользователя",, Отказ); + + ИначеЕсли ПустаяСтрока(Объект.WSПароль) Тогда + + НСтрока = НСтр("ru = 'Укажите пароль пользователя.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.WSПароль",, Отказ); + + Иначе + + Попытка + ОбменДаннымиКлиентСервер.ПроверитьКорректностьФорматаАдресаWSПрокси(Объект.WSURLВебСервиса); + Исключение + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), , "Объект.WSURLВебСервиса", , Отказ); + Возврат; + КонецПопытки; + + Попытка + ОбменДаннымиКлиентСервер.ПроверитьНедопустимыеСимволыВИмениПользователяWSПрокси(Объект.WSИмяПользователя); + Исключение + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),, "Объект.WSИмяПользователя",, Отказ); + Возврат; + КонецПопытки; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьПодключениеWSНаКлиенте(Отказ, РасширеннаяПроверка = Ложь) + + ПредлагатьПерейтиВЖурналРегистрации = Истина; + + ПроверитьПодключениеWSНаСервере(Отказ, РасширеннаяПроверка, ПредлагатьПерейтиВЖурналРегистрации); + + Если Отказ И ПредлагатьПерейтиВЖурналРегистрации Тогда + + ТекстВопроса = НСтр("ru = 'Ошибка установки подключения. + |Перейти в журнал регистрации?'"); + + ПредложитьПерейтиВЖурналРегистрации(ТекстВопроса, СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису); + + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура ПроверитьПодключениеWSНаСервере(Отказ, РасширеннаяПроверка, ПредлагатьПерейтиВЖурналРегистрации) @@ -1876,14 +1943,22 @@ ОбменДаннымиСервер.ОбщиеДанныеУзлов(Объект.ИмяПланаОбмена, ВерсияКонфигурацииКорреспондента, ФормаНастройкиУзлов); - ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента = ОбменДаннымиСервер.ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента(Объект.ИмяПланаОбмена, ВерсияКонфигурацииКорреспондента, ФормаНастройкиЗначенийПоУмолчаниюБазыКорреспондента); + ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента = ОбменДаннымиСервер.ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента( + Объект.ИмяПланаОбмена, + ВерсияКонфигурацииКорреспондента, + ФормаНастройкиЗначенийПоУмолчаниюБазыКорреспондента, + Объект.ВариантНастройкиОбмена); ПредусмотреныЗначенияПоУмолчаниюНаУзлеБазыКорреспондента = ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента.Количество() > 0; Элементы.РамкаГруппыЗначенийПоУмолчанию4.Видимость = ПредусмотреныЗначенияПоУмолчаниюНаУзлеБазыКорреспондента; Элементы.РамкаГруппыЗначенийПоУмолчаниюБазыКорреспондента.Видимость = ПредусмотреныЗначенияПоУмолчаниюНаУзлеБазыКорреспондента; - ОписаниеЗначенийПоУмолчаниюБазыКорреспондента = ОбменДаннымиСервер.ОписаниеЗначенийПоУмолчаниюБазыКорреспондента(Объект.ИмяПланаОбмена, ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента, ВерсияКонфигурацииКорреспондента); + ОписаниеЗначенийПоУмолчаниюБазыКорреспондента = ОбменДаннымиСервер.ОписаниеЗначенийПоУмолчаниюБазыКорреспондента( + Объект.ИмяПланаОбмена, + ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента, + ВерсияКонфигурацииКорреспондента, + Объект.ВариантНастройкиОбмена); НастройкиПараметровУчетаКорреспондентаПоясняющаяНадпись = ОбменДаннымиСервер.ПояснениеДляНастройкиПараметровУчетаБазыКорреспондента(Объект.ИмяПланаОбмена, ВерсияКонфигурацииКорреспондента); @@ -1891,50 +1966,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ПроверитьПодключениеWSНаКлиенте(Отказ, РасширеннаяПроверка = Ложь) - - Если ПустаяСтрока(Объект.WSURLВебСервиса) Тогда - - НСтрока = НСтр("ru = 'Укажите адрес приложения в Интернете.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.WSURLВебСервиса",, Отказ); - - ИначеЕсли ПустаяСтрока(Объект.WSИмяПользователя) Тогда - - НСтрока = НСтр("ru = 'Укажите имя пользователя.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.WSИмяПользователя",, Отказ); - - ИначеЕсли ПустаяСтрока(Объект.WSПароль) Тогда - - НСтрока = НСтр("ru = 'Укажите пароль пользователя.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.WSПароль",, Отказ); - - Иначе - - Попытка - ОбменДаннымиКлиентСервер.ПроверитьНедопустимыеСимволыВИмениПользователяWSПрокси(Объект.WSИмяПользователя); - Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),, "Объект.WSИмяПользователя",, Отказ); - Возврат; - КонецПопытки; - - ПредлагатьПерейтиВЖурналРегистрации = Истина; - - ПроверитьПодключениеWSНаСервере(Отказ, РасширеннаяПроверка, ПредлагатьПерейтиВЖурналРегистрации); - - Если Отказ И ПредлагатьПерейтиВЖурналРегистрации Тогда - - ТекстВопроса = НСтр("ru = 'Ошибка установки подключения. - |Перейти в журнал регистрации?'"); - - ПредложитьПерейтиВЖурналРегистрации(ТекстВопроса, СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису); - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура ПредложитьПерейтиВЖурналРегистрации(ТекстВопроса, Знач Событие) @@ -2141,6 +2172,9 @@ &НаКлиенте Процедура ПроверитьЗаполнениеРеквизитовВФорме(Отказ, ИмяФормыДляПроверки, ПараметрыФормы, ИмяРеквизитаФормы) + ПараметрыФормы.Вставить("ВерсияКорреспондента", ВерсияКонфигурацииКорреспондента); + ПараметрыФормы.Вставить("ИдентификаторНастройки", Объект.ВариантНастройкиОбмена); + ИмяФормыНастройки = "ПланОбмена.[ИмяПланаОбмена].Форма.[ИмяФормы]"; ИмяФормыНастройки = СтрЗаменить(ИмяФормыНастройки, "[ИмяПланаОбмена]", Объект.ИмяПланаОбмена); ИмяФормыНастройки = СтрЗаменить(ИмяФормыНастройки, "[ИмяФормы]", ИмяФормыДляПроверки); @@ -2346,7 +2380,7 @@ Элементы.ГруппаПрогрессБарВыгрузка.Видимость = Истина; КонецЕсли; - ЭтаФорма.ТолькоПросмотр = Истина; + ЭтотОбъект.ТолькоПросмотр = Истина; Элементы.КомандаГотово6.Доступность = Ложь; Элементы.КомандаГотово7.Доступность = Ложь; @@ -2828,18 +2862,21 @@ &НаКлиенте Функция Подключаемый_СтраницаМастераВыборРежимаРаботыПомощника_ПриПереходеДалее(Отказ) - Если ((РежимРаботыМастера = "ОбменЧерезВнешнееСоединение" И (Не ПустаяСтрока(Объект.COMКаталогИнформационнойБазы) Или Не ПустаяСтрока(Объект.COMИмяСервера1СПредприятия))) - Или (РежимРаботыМастера = "ОбменЧерезВебСервис" И Не ПустаяСтрока(Объект.WSURLВебСервиса))) + Если РежимРаботыМастера = "ОбменЧерезВнешнееСоединение" И (Не ПустаяСтрока(Объект.COMКаталогИнформационнойБазы) Или Не ПустаяСтрока(Объект.COMИмяСервера1СПредприятия)) И Не ВнешниеРесурсыРазрешены.РазрешенCom Тогда ОповещениеОЗакрытии = Новый ОписаниеОповещения("РазрешитьРесурсЗавершение", ЭтотОбъект, "РазрешенCom"); - Если РежимРаботыМастера = "ОбменЧерезВебСервис" Тогда - Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект, Ложь, Ложь, Истина, Ложь); - ИначеЕсли РежимРаботыМастера = "ОбменЧерезВнешнееСоединение" Тогда - Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект, Истина, Ложь, Ложь, Ложь); - КонецЕсли; + Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект, Истина, Ложь, Ложь, Ложь); РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); Отказ = Истина; + ИначеЕсли РежимРаботыМастера = "ОбменЧерезВебСервис" И Не ВнешниеРесурсыРазрешены.РазрешенWS Тогда + ПроверитьКорректностьПараметровПодключенияWS(Отказ); + Если Не Отказ Тогда + ОповещениеОЗакрытии = Новый ОписаниеОповещения("РазрешитьРесурсЗавершение", ЭтотОбъект, "РазрешенWS"); + Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект, Ложь, Ложь, Истина, Ложь); + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); + Отказ = Истина; + КонецЕсли; КонецЕсли; КонецФункции @@ -2926,7 +2963,6 @@ // Проверяем заполнение реквизитов в форме настроек ограничения миграции данных. ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ВерсияКорреспондента", ВерсияКонфигурацииКорреспондента); ПараметрыФормы.Вставить("НастройкаОтборовНаУзле", НастройкаОтборовНаУзле); ПроверитьЗаполнениеРеквизитовВФорме(Отказ, ФормаНастройкиУзла, ПараметрыФормы, "ОписаниеОграниченийПередачиДанных"); @@ -2937,7 +2973,6 @@ // Проверяем заполнение реквизитов в форме дополнительных настроек. ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ВерсияКорреспондента", ВерсияКонфигурацииКорреспондента); ПараметрыФормы.Вставить("ЗначенияПоУмолчаниюНаУзле", ЗначенияПоУмолчаниюНаУзле); ПроверитьЗаполнениеРеквизитовВФорме(Отказ, ФормаНастройкиЗначенийПоУмолчанию, ПараметрыФормы, "ОписаниеЗначенийПоУмолчанию"); @@ -2962,7 +2997,6 @@ // Проверяем заполнение реквизитов в форме настроек ограничения миграции данных. ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ВерсияКорреспондента", ВерсияКонфигурацииКорреспондента); ПараметрыФормы.Вставить("НастройкаОтборовНаУзле", НастройкаОтборовНаУзле); ПроверитьЗаполнениеРеквизитовВФорме(Отказ, ФормаНастройкиУзла, ПараметрыФормы, "ОписаниеОграниченийПередачиДанных"); @@ -2973,7 +3007,6 @@ // Проверяем заполнение реквизитов в форме дополнительных настроек. ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ВерсияКорреспондента", ВерсияКонфигурацииКорреспондента); ПараметрыФормы.Вставить("ЗначенияПоУмолчаниюНаУзле", ЗначенияПоУмолчаниюНаУзле); ПроверитьЗаполнениеРеквизитовВФорме(Отказ, ФормаНастройкиЗначенийПоУмолчанию, ПараметрыФормы, "ОписаниеЗначенийПоУмолчанию"); @@ -2992,6 +3025,7 @@ ПараметрыФормы.Вставить("ВерсияКорреспондента", ВерсияКонфигурацииКорреспондента); ПараметрыФормы.Вставить("ПолучитьЗначенияПоУмолчанию"); ПараметрыФормы.Вставить("Настройки", КонтекстФормыНастройкиУзлов); + ПараметрыФормы.Вставить("ИдентификаторНастройки", Объект.ВариантНастройкиОбмена); ИмяФормыНастройки = "ПланОбмена.[ИмяПланаОбмена].Форма.[ФормаНастройкиУзлов]"; ИмяФормыНастройки = СтрЗаменить(ИмяФормыНастройки, "[ИмяПланаОбмена]", Объект.ИмяПланаОбмена); @@ -3027,7 +3061,6 @@ // Проверяем заполнение реквизитов в форме настроек ограничения миграции данных. ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ВерсияКорреспондента", ВерсияКонфигурацииКорреспондента); ПараметрыФормы.Вставить("НастройкаОтборовНаУзле", НастройкаОтборовНаУзле); ПроверитьЗаполнениеРеквизитовВФорме(Отказ, ФормаНастройкиУзла, ПараметрыФормы, "ОписаниеОграниченийПередачиДанных"); @@ -3038,7 +3071,6 @@ // Проверяем заполнение реквизитов в форме дополнительных настроек. ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ВерсияКорреспондента", ВерсияКонфигурацииКорреспондента); ПараметрыФормы.Вставить("ЗначенияПоУмолчаниюНаУзле", ЗначенияПоУмолчаниюНаУзле); ПроверитьЗаполнениеРеквизитовВФорме(Отказ, ФормаНастройкиЗначенийПоУмолчанию, ПараметрыФормы, "ОписаниеЗначенийПоУмолчанию"); @@ -3277,6 +3309,22 @@ КонецФункции +&НаКлиенте +Функция Подключаемый_СтраницаМастераНачалоНастройкиОбменаССервисом_ПриПереходеДалее(Отказ) + + Если Не ВнешниеРесурсыРазрешены.РазрешенWS Тогда + ПроверитьКорректностьПараметровПодключенияWS(Отказ); + + Если Не Отказ Тогда + ОповещениеОЗакрытии = Новый ОписаниеОповещения("РазрешитьРесурсЗавершение", ЭтотОбъект, "РазрешенWS"); + Запросы = СоздатьЗапросНаИспользованиеВнешнихРесурсов(Объект, Ложь, Ложь, Истина, Ложь); + РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Запросы, ЭтотОбъект, ОповещениеОЗакрытии); + Отказ = Истина; + КонецЕсли; + КонецЕсли; + +КонецФункции + &НаКлиенте Функция Подключаемый_СтраницаМастераОжиданиеПроверкиПодключенияЧерезВебСервис_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) @@ -3529,19 +3577,25 @@ ПараметрыМетода = Новый Структура; ПараметрыМетода.Вставить("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); ПараметрыМетода.Вставить("ИмяФайлаСообщенияОбмена", Объект.ИмяФайлаСообщенияОбмена); - - Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне( - УникальныйИдентификатор, - "Обработки.ПомощникСозданияОбменаДанными.ВыполнитьЗагрузкуСправочников", - ПараметрыМетода, - НСтр("ru = 'Загрузка справочников из сообщения обмена'")); - - Если Не Результат.ЗаданиеВыполнено Тогда - - ДлительнаяОперация = Истина; - ИдентификаторДлительнойОперации = Результат.ИдентификаторЗадания; - - КонецЕсли; + Попытка + Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификатор, + "Обработки.ПомощникСозданияОбменаДанными.ВыполнитьЗагрузкуСправочников", + ПараметрыМетода, + НСтр("ru = 'Загрузка справочников из сообщения обмена'")); + Если Не Результат.ЗаданиеВыполнено Тогда + + ДлительнаяОперация = Истина; + ИдентификаторДлительнойОперации = Результат.ИдентификаторЗадания; + + КонецЕсли; + Исключение + ОбменДаннымиВызовСервера.ЗафиксироватьЗавершениеОбменаСОшибкой( + Объект.УзелИнформационнойБазы, + "ЗагрузкаДанных", + ТекущаяДатаСеанса(), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; КонецПроцедуры @@ -3923,7 +3977,6 @@ // Проверяем заполнение реквизитов в форме дополнительных настроек. ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ВерсияКорреспондента", ВерсияКонфигурацииКорреспондента); ПараметрыФормы.Вставить("ЗначенияПоУмолчаниюНаУзле", ЗначенияПоУмолчаниюНаУзле); ПроверитьЗаполнениеРеквизитовВФорме(Отказ, ФормаНастройкиЗначенийПоУмолчанию, ПараметрыФормы, "ОписаниеЗначенийПоУмолчанию"); @@ -3934,7 +3987,6 @@ // Проверяем заполнение реквизитов в форме дополнительных настроек. ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ВерсияКорреспондента", ВерсияКонфигурацииКорреспондента); ПараметрыФормы.Вставить("ПараметрыВнешнегоСоединения", СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения)); ПараметрыФормы.Вставить("ЗначенияПоУмолчаниюНаУзле", ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента); @@ -4112,7 +4164,6 @@ // Проверяем заполнение реквизитов в форме. ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ВерсияКорреспондента", ВерсияКонфигурацииКорреспондента); ПараметрыФормы.Вставить("ПараметрыПодключения", СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения)); ПараметрыФормы.Вставить("Настройки", КонтекстФормыНастройкиУзлов); ПараметрыФормы.Вставить("ПроверкаЗаполнения"); @@ -4148,7 +4199,6 @@ // Проверяем заполнение реквизитов в форме настроек ограничения миграции данных. ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ВерсияКорреспондента", ВерсияКонфигурацииКорреспондента); ПараметрыФормы.Вставить("ПараметрыВнешнегоСоединения", СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения)); ПараметрыФормы.Вставить("НастройкаОтборовНаУзле", НастройкаОтборовНаУзлеБазыКорреспондента); @@ -4160,7 +4210,6 @@ // Проверяем заполнение реквизитов в форме дополнительных настроек. ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ВерсияКорреспондента", ВерсияКонфигурацииКорреспондента); ПараметрыФормы.Вставить("ПараметрыВнешнегоСоединения", СтруктураПараметровПодключенияВнешнегоСоединения(ТипСоединения)); ПараметрыФормы.Вставить("ЗначенияПоУмолчаниюНаУзле", ЗначенияПоУмолчаниюНаУзлеБазыКорреспондента); @@ -4474,21 +4523,27 @@ ДлительнаяОперация = Ложь; ДлительнаяОперацияЗавершена = Ложь; ИдентификаторДлительнойОперации = ""; - - Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне( - УникальныйИдентификатор, - "Обработки.ВыполнениеОбменаДанными.ВыполнитьЗапускОбменаДанными", - ПараметрыЗадания, - НСтр("ru = 'Выгрузка данных'")); - - Если Не Результат.ЗаданиеВыполнено Тогда - ДлительнаяОперация = Истина; - ИдентификаторДлительнойОперации = Результат.ИдентификаторЗадания; - КонецЕсли; + Попытка + Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификатор, + "Обработки.ВыполнениеОбменаДанными.ВыполнитьЗапускОбменаДанными", + ПараметрыЗадания, + НСтр("ru = 'Выгрузка данных'")); + Если Не Результат.ЗаданиеВыполнено Тогда + ДлительнаяОперация = Истина; + ИдентификаторДлительнойОперации = Результат.ИдентификаторЗадания; + КонецЕсли; + Исключение + ОбменДаннымиВызовСервера.ЗафиксироватьЗавершениеОбменаСОшибкой( + УзелИнформационнойБазы, + "ВыгрузкаДанных", + ТекущаяДатаСеанса(), + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + КонецПроцедуры - &НаСервере Процедура ФоновоеЗаданиеПрочитатьПромежуточныйРезультат() Прогресс = ДлительныеОперации.ПрочитатьПрогресс(ИдентификаторДлительнойОперации); @@ -4723,6 +4778,7 @@ НовыйПереход.ПорядковыйНомерПерехода = 2; НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераВыборРежимаРаботыПомощника"; НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииПродолжение"; + НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаМастераВыборРежимаРаботыПомощника_ПриПереходеДалее"; // Задание параметров подключения; Проверка подключения. @@ -4939,6 +4995,7 @@ НовыйПереход.ПорядковыйНомерПерехода = 1; НовыйПереход.ИмяОсновнойСтраницы = "СтраницаМастераНачалоНастройкиОбменаССервисом"; НовыйПереход.ИмяСтраницыНавигации = "СтраницаНавигацииНачало"; + НовыйПереход.ИмяОбработчикаПриПереходеДалее = "СтраницаМастераНачалоНастройкиОбменаССервисом_ПриПереходеДалее"; НовыйПереход = ТаблицаПереходов.Добавить(); НовыйПереход.ПорядковыйНомерПерехода = 2; diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html index 1d06baca3..55af35561 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 9425831d4..0c459aad1 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ManagerModule.bsl @@ -16,20 +16,6 @@ КонецПроцедуры -// Для внутреннего использования. -// -Процедура ВыполнитьЗагрузкуДанных(Параметры, АдресВременногоХранилища) Экспорт - - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации( - Ложь, - Параметры.УзелИнформационнойБазы, - Параметры.ИдентификаторФайла, - Параметры.ДатаНачалаОперации, - Параметры.ПараметрыАутентификации, - Истина); - -КонецПроцедуры - #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl index 772ec20a5..c095d9cb8 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl @@ -35,21 +35,6 @@ КонецПроцедуры -// Выполняет действия по настройке нового обмена в Сервисе. -// -Процедура ВыполнитьДействияПоНастройкеНовогоОбменаДаннымиВСервисе(Отказ, - НастройкаОтборовНаУзле, - ЗначенияПоУмолчаниюНаУзле, - Знач КодЭтогоУзла, - Знач КодНовогоУзла) Экспорт - - НастройкаОтборовНаУзле = ПолучитьЗначенияНастройкиОтборов(НастройкаОтборовНаУзле); - ЗначенияПоУмолчаниюНаУзле = ПолучитьЗначенияНастройкиОтборов(ЗначенияПоУмолчаниюНаУзле); - - ВыполнитьДействияПоНастройкеОбменаДанными(Отказ, НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, КодЭтогоУзла, КодНовогоУзла); - -КонецПроцедуры - // Выполняет действия по настройке нового обмена данными для обоих баз. // Процедура ВыполнитьДействияПоНастройкеНовогоОбменаДаннымиЧерезВебСервисВДвухБазах(Отказ, @@ -814,9 +799,6 @@ Процедура СоздатьОбновитьУзлыПланаОбмена(НастройкаОтборовНаУзле, ЗначенияПоУмолчаниюНаУзле, КодЭтогоУзла, КодНовогоУзла) - // Проверяем состав плана обмена. - СтандартныеПодсистемыСервер.ПроверитьСоставПланаОбмена(ИмяПланаОбмена); - МенеджерПланаОбмена = ПланыОбмена[ИмяПланаОбмена]; // ОБНОВЛЯЕМ ЭТОТ УЗЕЛ ПРИ НЕОБХОДИМОСТИ @@ -858,7 +840,8 @@ НовыйУзел = МенеджерПланаОбмена.СоздатьУзел(); НовыйУзел.Код = КодНовогоУзла; Иначе - НовыйУзел = НовыйУзел.ПолучитьОбъект(); + ВызватьИсключение НСтр("ru = 'Значение префикса первой информационной базы не уникально. + |В системе уже существует синхронизация данных для информационной базы (программы) с указанным префиксом.'"); КонецЕсли; НовыйУзел.Наименование = НаименованиеВторойБазы; @@ -1133,7 +1116,30 @@ Если СтруктураНастроек.Свойство("УчетнаяЗаписьЭлектроннойПочты", УчетнаяЗаписьЭлектроннойПочты) И УчетнаяЗаписьЭлектроннойПочты <> Неопределено Тогда - УчетнаяЗаписьЭлектроннойПочты.Записать(); + УчетнаяЗаписьЭтойБазы = Неопределено; + // Для предопределенной записи - перезаписываем предопределенный элемент текущей ИБ. + Если УчетнаяЗаписьЭлектроннойПочты.Предопределенный Тогда + УчетнаяЗаписьЭтойБазы = Справочники.УчетныеЗаписиЭлектроннойПочты[УчетнаяЗаписьЭлектроннойПочты.ИмяПредопределенныхДанных].ПолучитьОбъект(); + Иначе + // Для обычной записи ищем существующую запись с тем же адресом. + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 + | Ссылка + |ИЗ Справочник.УчетныеЗаписиЭлектроннойПочты + |ГДЕ АдресЭлектроннойПочты = &АдресЭлектроннойПочты"; + Запрос.УстановитьПараметр("АдресЭлектроннойПочты", УчетнаяЗаписьЭлектроннойПочты.АдресЭлектроннойПочты); + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + УчетнаяЗаписьЭтойБазы = Выборка.Ссылка.ПолучитьОбъект(); + КонецЕсли; + КонецЕсли; + Если УчетнаяЗаписьЭтойБазы <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(УчетнаяЗаписьЭтойБазы, УчетнаяЗаписьЭлектроннойПочты,,"ИмяПредопределенныхДанных, Родитель, Владелец, Ссылка"); + УчетнаяЗаписьЭтойБазы.Записать(); + ЭтотОбъект.EMAILУчетнаяЗапись = УчетнаяЗаписьЭтойБазы.Ссылка; + Иначе + УчетнаяЗаписьЭлектроннойПочты.Записать(); + КонецЕсли; КонецЕсли; diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl index c6ec215df..d205fc599 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/ВыборОбъектовОтбором/Module.bsl @@ -164,6 +164,7 @@ // Там структура с именами измерений. Если Данные.Свойство("Регистратор") Тогда Значение = Данные.Регистратор; + ТекИмяФормы = ЭтотОбъект().ПолучитьИмяФормы(Значение) + ".ФормаОбъекта"; Иначе ЗаполнитьЗначенияСвойств(КлючФормыДанных, Данные); ТекПараметры = Новый Массив; diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Module.bsl index 8bbda047d..3ae1dfef6 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Module.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Настройки/Module.bsl @@ -68,8 +68,8 @@ СтандартнаяОбработка = Ложь; ДополнительныеПараметры = Новый Структура(); - ТекстПредложения = Нстр("ru = 'Для открытия каталога необходимо необходимо установить расширение работы с файлами.'"); - ОписаниеОповещения = Новый ОписаниеОповещения("ПослеПроверкиРасширенияРаботыСФайлами", ЭтаФорма, ДополнительныеПараметры); + ТекстПредложения = НСтр("ru = 'Для открытия каталога необходимо необходимо установить расширение работы с файлами.'"); + ОписаниеОповещения = Новый ОписаниеОповещения("ПослеПроверкиРасширенияРаботыСФайлами", ЭтотОбъект, ДополнительныеПараметры); #Если Не ВебКлиент Тогда // В тонком и толстом клиентах расширение подключено всегда. @@ -93,7 +93,7 @@ Диалог.ПроверятьСуществованиеФайла = Истина; Диалог.Фильтр = НСтр("ru = 'Внешние обработки (*.epf)|*.epf'"); - Оповещение = Новый ОписаниеОповещения("ПослеВыбораФайла", ЭтаФорма, ДополнительныеПараметры); + Оповещение = Новый ОписаниеОповещения("ПослеВыбораФайла", ЭтотОбъект, ДополнительныеПараметры); Диалог.Показать(Оповещение); КонецЕсли; diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/СообщениеОбОбычномИнтерфейсе/Form.oform b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/СообщениеОбОбычномИнтерфейсе/Form.oform index b75c262892d12ab3a915806a9d683050f8a5e7f7..d1a09129db82110e92c1c255209226a09c19df6c 100644 GIT binary patch delta 241 zcmezG*zdH#kBRrff;%fVI59DR>B-SdMyMj2XEE6^DH|Cm7yyA`GLT`O1_27ZT<>@9 zuQoE*;pM6}wAlQcoeuBl0qnXZYMk%g{>rHO%Va#=f*p;>C0g>j;8a*DB~u8Fz1rLKixvWc#-sj*3NTC#yjQtIa0+=)y~ lh6bB$`3^EN=@@MO!@r21TgTYYOvli`K*!Q-^E~-PMgU6WOZET& delta 225 zcmeBo`tP{GkBN7|;>#2KotPNF^yFwJBUF*ivzY9dlno6O41mBe8OShCg8&6yuJ^n5 zR~wn@@N!ifnr;5ga*RdAz{J?X*wEZqH_g(>MAyXF(nvQk+0sBa)xf~qA~n^*IK?7$ z@>9+;#3{VW^;p^5+{ipJ%_3DdH8nX^*CfTnP}edg$xJsT%`!PL#UKUfrp>px6PXw- UHrw$XWZcXwuz-K_I{8FK0J!Ex=Kufz diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form index 4074e5653..d7ae5925e 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Form.form @@ -2475,6 +2475,7 @@ Vertical auto + false @@ -3224,6 +3225,7 @@ Vertical auto + false @@ -3909,6 +3911,7 @@ Vertical auto + false @@ -4010,6 +4013,7 @@ Vertical auto + false true @@ -4854,7 +4858,7 @@ УдалитьРегистрациюАвтоОбъектов <key>ru</key> - <value>Удалить регистрацию только авторегиструемых объектов выбранных типов</value> + <value>Удалить регистрацию только авторегистрируемых объектов выбранных типов</value> 7 diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl index 60cd0002d..0291a14eb 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Forms/Форма/Module.bsl @@ -17,9 +17,13 @@ // заполнен параметр "ИдентификаторКоманды". // +#Область ОписаниеПеременных + &НаКлиенте Перем ТекущаяСтрокаМетаданных; +#КонецОбласти + #Область ОбработчикиСобытийФормы // @@ -2293,7 +2297,7 @@ И Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости["Версия8_3_3"] И Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости["Версия8_3_4"]))) Тогда - ВызватьИсключение Нстр("ru = 'Обработка предназначена для запуска на версии платформы + ВызватьИсключение НСтр("ru = 'Обработка предназначена для запуска на версии платформы |1С:Предприятие 8.3.5 с отключенным режимом совместимости или выше'"); КонецЕсли; diff --git a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Help/ru.html b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/Help/ru.html index 3b7cf28a2..bf3fce11a 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 ee1fd92f2..3b90f4498 100644 --- a/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/РегистрацияИзмененийДляОбменаДанными/ObjectModule.bsl @@ -1560,12 +1560,17 @@ Параметры = Новый Структура(); ДоступностьОбъектов = Новый Соответствие; + Для Каждого ФункциональнаяОпция Из Метаданные.ФункциональныеОпции Цикл + Значение = -1; + Для Каждого Элемент Из ФункциональнаяОпция.Состав Цикл + Если Значение = -1 Тогда Значение = ПолучитьФункциональнуюОпцию(ФункциональнаяОпция.Имя, Параметры); КонецЕсли; + Если Значение = Истина Тогда ДоступностьОбъектов.Вставить(Элемент.Объект, Истина); Иначе @@ -1573,7 +1578,9 @@ ДоступностьОбъектов.Вставить(Элемент.Объект, Ложь); КонецЕсли; КонецЕсли; + КонецЦикла; + КонецЦикла; Возврат ДоступностьОбъектов; @@ -1753,7 +1760,7 @@ // Возвращает флаг того, что БСП в текущей конфигурации обеспечивает функционал. // -Функция БСП_ДоступнаТребуемаяВерсия(Знач Версия = Неопределено) Экспорт +Функция БСП_ДоступнаТребуемаяВерсия(Знач Версия = Неопределено) ТекущаяВерсия = Неопределено; МодульСтандартныеПодсистемыСервер = ОбщегоНазначенияОбщийМодуль("СтандартныеПодсистемыСервер"); diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Help/ru.html b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Help/ru.html index c916f168c..6664c523c 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 8b5a17731..012566ea9 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl @@ -24,9 +24,24 @@ Если Действие = "Добавить" Тогда + ПараметрыОтбора = Новый Структура; + ПараметризуемыеЗадания = Новый Массив; + ЗависимостиЗаданий = РегламентныеЗаданияСлужебный.РегламентныеЗаданияЗависимыеОтФункциональныхОпций(); + + ПараметрыОтбора.Вставить("Параметризуется", Истина); + РезультатПоиска = ЗависимостиЗаданий.НайтиСтроки(ПараметрыОтбора); + + Для Каждого СтрокаТаблицы Из РезультатПоиска Цикл + ПараметризуемыеЗадания.Добавить(СтрокаТаблицы.РегламентноеЗадание); + КонецЦикла; + Расписание = Новый РасписаниеРегламентногоЗадания; - Для каждого РегламентноеЗаданиеМетаданные Из Метаданные.РегламентныеЗадания Цикл + Для Каждого РегламентноеЗаданиеМетаданные Из Метаданные.РегламентныеЗадания Цикл + Если ПараметризуемыеЗадания.Найти(РегламентноеЗаданиеМетаданные) <> Неопределено Тогда + Продолжить; + КонецЕсли; + ОписанияМетаданныхРегламентныхЗаданий.Добавить( РегламентноеЗаданиеМетаданные.Имя + Символы.ПС diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form index bacee5665..6c1a6aae6 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form @@ -6,6 +6,105 @@ РегламентныеЗадания 27 + + ГруппаБлокировкаРаботыСВнешнимиРесурсами + 283 + + КартинкаБлокировкаРаботыСВнешнимиРесурсами + 285 + true + true + + true + + + КартинкаБлокировкаРаботыСВнешнимиРесурсамиРасширеннаяПодсказка + 287 + Label + true + true + + Left + + + + КартинкаБлокировкаРаботыСВнешнимиРесурсамиКонтекстноеМеню + 286 + true + + 4 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + ПояснениеБлокировкаРаботыСВнешнимиРесурсами + 288 + + <key>ru</key> + <value>Работа со всеми внешними ресурсами (синхронизация данных, отправка почты и т.п.), выполняемая по расписанию заблокирована для предотвращения конфликтов с основной информационной базой. <link Разблокировать>Разблокировать</>.</value> + + true + true + + true + + + ПояснениеБлокировкаРаботыСВнешнимиРесурсамиРасширеннаяПодсказка + 290 + Label + true + true + + Left + + + + ПояснениеБлокировкаРаботыСВнешнимиРесурсамиКонтекстноеМеню + 289 + true + + true + Label + true + 2 + true + + + URLProcessing + ПояснениеБлокировкаРаботыСВнешнимиРесурсамиОбработкаНавигационнойСсылки + + Left + + + true + + true + + + ГруппаБлокировкаРаботыСВнешнимиРесурсамиРасширеннаяПодсказка + 284 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + ТаблицаРегламентныеЗадания 29 @@ -499,7 +598,6 @@ Form.Command.ОбновитьРегламентныеЗадания Normal - Auto true true UserCmds @@ -731,7 +829,7 @@ Left - Form.Command.ОбновитьФоновыеЗадания + 0 Normal Auto true @@ -996,6 +1094,7 @@ Vertical auto + false @@ -1885,17 +1984,16 @@ ТаблицаФоновыеЗаданияКоманднаяПанель 67 - ТаблицаФоновыеЗаданияОбновитьДанные - 92 + ТаблицаФоновыеЗаданияОбновитьРегламентныеЗадания + 281 true true true - false - ТаблицаФоновыеЗаданияОбновитьДанныеExtendedTooltip - 222 + ТаблицаФоновыеЗаданияОбновитьРегламентныеЗаданияРасширеннаяПодсказка + 282 Label true true @@ -1903,9 +2001,8 @@ Left - Form.Command.ОбновитьФоновыеЗадания + Form.Command.ОбновитьРегламентныеЗадания Normal - Auto true true UserCmds @@ -2133,6 +2230,7 @@ Page Vertical + false @@ -2146,14 +2244,22 @@ true + ShowRight ДлительнаяОперацияРасширеннаяПодсказка 272 + + <key>ru</key> + <value>Формируется список фоновых заданий. +Пожалуйста, подождите...</value> + Label true + 3 true Left + Center @@ -2161,7 +2267,7 @@ 271 true - 5 + 7 true 3 true @@ -2190,6 +2296,7 @@ Vertical auto + false true @@ -2235,6 +2342,7 @@ Vertical auto + false true @@ -2282,10 +2390,6 @@ OnCreateAtServer ПриСозданииНаСервере - - OnClose - ПриЗакрытии - BeforeLoadDataFromSettingsAtServer ПриЗагрузкеДанныхИзНастроекНаСервере @@ -2563,6 +2667,23 @@ true + + Параметризуемое + + <key>ru</key> + <value>Параметризуемое</value> + + 14 + + Boolean + + + true + + + true + + ТаблицаФоновыеЗадания @@ -3129,41 +3250,6 @@ true - - ИдентификаторЗадания - - <key>ru</key> - <value>Идентификатор задания</value> - - 25 - - UUID - - - true - - - true - - - - АдресХранилища - - <key>ru</key> - <value>Адрес хранилища</value> - - 26 - - String - - - - true - - - true - - ОтключенныеЗадания @@ -3184,33 +3270,6 @@ <itemValueType/> </extInfo> </attributes> - <formCommands> - <name>ОбновитьФоновыеЗадания</name> - <title> - <key>ru</key> - <value>Обновить</value> - - 1 - - ru - Обновить список фоновых заданий (с учетом отбора) - - - true - - F5 - - StdPicture.Refresh - - - - ОбновитьФоновыеЗадания - - - Text - DontUse - Auto - ОткрытьФоновоеЗадание @@ -3365,11 +3424,15 @@ <id>8</id> <toolTip> <key>ru</key> - <value>Обновить список регламентных заданий</value> + <value>Обновить список заданий</value> </toolTip> <use> <common>true</common> </use> + <shortcut>F5</shortcut> + <picture xsi:type="core:PictureRef"> + <picture>StdPicture.Refresh</picture> + </picture> <action xsi:type="form:FormCommandHandlerContainer"> <handler> <name>ОбновитьРегламентныеЗадания</name> diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl index 4a00fb18f..6f0077577 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl @@ -25,6 +25,8 @@ Элементы.ТаблицаРегламентныеЗаданияВыполнитьНеВФоне.Видимость = Истина; КонецЕсли; + Элементы.ГруппаБлокировкаРаботыСВнешнимиРесурсами.Видимость = РегламентныеЗаданияСервер.РаботаСВнешнимиРесурсамиЗаблокирована(); + КонецПроцедуры &НаКлиенте @@ -36,13 +38,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ПриЗакрытии() - Если ИдентификаторЗадания <> Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") Тогда - ПриЗакрытииНаСервере(); - КонецЕсли; -КонецПроцедуры - &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) @@ -73,9 +68,7 @@ &НаКлиенте Процедура ЗаданияПриСменеСтраницы(Элемент, ТекущаяСтраница) - Если ТекущаяСтраница = Элементы.ФоновыеЗадания - И Не СтраницаФоновыеЗаданияОткрывалась Тогда - + Если ТекущаяСтраница = Элементы.ФоновыеЗадания И Не СтраницаФоновыеЗаданияОткрывалась Тогда СтраницаФоновыеЗаданияОткрывалась = Истина; ОбновитьТаблицуФоновыхЗаданийНаКлиенте(); КонецЕсли; @@ -120,6 +113,12 @@ КонецПроцедуры +&НаКлиенте +Процедура ПояснениеБлокировкаРаботыСВнешнимиРесурсамиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ПояснениеБлокировкаРаботыСВнешнимиРесурсамиОбработкаНавигационнойСсылкиНаСервере(); +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаФоновыеЗадания @@ -189,7 +188,11 @@ &НаКлиенте Процедура ОбновитьРегламентныеЗадания(Команда) - ОбновитьТаблицуРегламентныхЗаданий(); + Если Элементы.Задания.ТекущаяСтраница = Элементы.ФоновыеЗадания Тогда + ОбновитьТаблицуФоновыхЗаданийНаКлиенте(); + Иначе + ОбновитьТаблицуРегламентныхЗаданий(); + КонецЕсли; КонецПроцедуры @@ -207,12 +210,20 @@ КонецЦикла; Индекс = 0; + КоличествоВыделенныхЗаданий = ВыделенныеСтроки.Количество(); МассивСообщенийОбОшибках = Новый Массив; Для каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл ОбновитьВсе = (Индекс = ВыделенныеСтроки.Количество() - 1); ТекущиеДанные = ТаблицаРегламентныеЗадания.НайтиПоИдентификатору(ВыделеннаяСтрока); + Если ТекущиеДанные.Параметризуемое И КоличествоВыделенныхЗаданий = 1 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выбранное регламентное задание нельзя выполнить вручную.'")); + Возврат; + ИначеЕсли ТекущиеДанные.Параметризуемое Тогда + Продолжить; + КонецЕсли; + ПараметрыВыполнения = ВыполнитьРегламентноеЗаданиеВручнуюНаСервере(ТекущиеДанные.Идентификатор, ОбновитьВсе); Если ПараметрыВыполнения.ЗапускВыполнен Тогда @@ -276,13 +287,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ОбновитьФоновыеЗадания(Команда) - - ОбновитьТаблицуФоновыхЗаданийНаКлиенте(); - -КонецПроцедуры - &НаКлиенте Процедура НастроитьРасписание(Команда) @@ -749,7 +753,7 @@ РегламентныеЗаданияСлужебный.ОтменитьФоновоеЗадание(Идентификатор); ОбновитьТаблицуРегламентныхЗаданий(); - ОбновитьТаблицуФоновыхЗаданий(Ложь); + ОбновитьТаблицуФоновыхЗаданий(); КонецПроцедуры @@ -793,12 +797,19 @@ Таблица = ТаблицаРегламентныеЗадания; ОтключенныеЗадания.Очистить(); - ЗависимостиЗаданий = РегламентныеЗаданияСлужебный.РегламентныеЗаданияЗависимыеОтФункциональныхОпций(); + ПараметрыРегламентныхЗаданий = РегламентныеЗаданияСлужебный.РегламентныеЗаданияЗависимыеОтФункциональныхОпций(); + ПараметрыОтбора = Новый Структура; + ПараметризуемыеЗадания = Новый Массив; + ПараметрыОтбора.Вставить("Параметризуется", Истина); + РезультатПоиска = ПараметрыРегламентныхЗаданий.НайтиСтроки(ПараметрыОтбора); + Для Каждого СтрокаРезультата Из РезультатПоиска Цикл + ПараметризуемыеЗадания.Добавить(СтрокаРезультата.РегламентноеЗадание); + КонецЦикла; ЗаданияВМоделиСервиса = Новый Соответствие; ПодсистемаРаботаВМоделиСервиса = Метаданные.Подсистемы.СтандартныеПодсистемы.Подсистемы.Найти("РаботаВМоделиСервиса"); Для Каждого ОбъектМетаданных Из Метаданные.РегламентныеЗадания Цикл - Если Не РегламентныеЗаданияСлужебный.РегламентноеЗаданиеДоступноПоФункциональнымОпциям(ОбъектМетаданных, ЗависимостиЗаданий) Тогда + Если Не РегламентныеЗаданияСлужебный.РегламентноеЗаданиеДоступноПоФункциональнымОпциям(ОбъектМетаданных, ПараметрыРегламентныхЗаданий) Тогда ОтключенныеЗадания.Добавить(ОбъектМетаданных.Имя); Продолжить; КонецЕсли; @@ -839,6 +850,11 @@ Иначе Обновляемое = Таблица[Индекс]; КонецЕсли; + + Если ПараметризуемыеЗадания.Найти(Задание.Метаданные) <> Неопределено Тогда + Обновляемое.Параметризуемое = Истина; + КонецЕсли; + ОбновитьСтрокуТаблицыРегламентныхЗаданий(Обновляемое, Задание); Индекс = Индекс + 1; КонецЦикла; @@ -857,7 +873,11 @@ Если Задание <> Неопределено И Строки.Количество() > 0 Тогда - ОбновитьСтрокуТаблицыРегламентныхЗаданий(Строки[0], Задание); + СтрокаЗадание = Строки[0]; + Если ПараметризуемыеЗадания.Найти(Задание.Метаданные) <> Неопределено Тогда + СтрокаЗадание.Параметризуемое = Истина; + КонецЕсли; + ОбновитьСтрокуТаблицыРегламентныхЗаданий(СтрокаЗадание, Задание); КонецЕсли; КонецЕсли; @@ -941,43 +961,43 @@ &НаКлиенте Процедура ОбновитьТаблицуФоновыхЗаданийНаКлиенте() - Результат = ФормированиеТаблицыФоновыхЗаданийВФоне(); - - Если Не Результат.ЗаданиеВыполнено Тогда - Элементы.ГруппаШапка.Доступность = Ложь; - Элементы.СтраницыОтложеннаяЗагрузкаФоновыхЗаданий.ТекущаяСтраница = Элементы.СтраницаДлительнаяОперация; - ПараметрыОбработчикаОжидания = Новый Структура; - ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); - ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина); - Иначе - ОбновитьТаблицуФоновыхЗаданий(); + Результат = СформироватьТаблицуФоновыхЗаданийВФоне(); + Если Результат.Статус = "Выполнено" Или Результат.Статус = "Ошибка" Тогда + Возврат; КонецЕсли; + Элементы.ГруппаШапка.Доступность = Ложь; + Элементы.СтраницыОтложеннаяЗагрузкаФоновыхЗаданий.ТекущаяСтраница = Элементы.СтраницаДлительнаяОперация; + + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; + ОповещениеОЗавершении = Новый ОписаниеОповещения("ОбновитьТаблицуФоновыхЗаданийЗавершение", ЭтотОбъект); + ДлительныеОперацииКлиент.ОжидатьЗавершение(Результат, ОповещениеОЗавершении, ПараметрыОжидания); + КонецПроцедуры &НаСервере -Функция ФормированиеТаблицыФоновыхЗаданийВФоне() +Функция СформироватьТаблицуФоновыхЗаданийВФоне() Отбор = ОтборФоновыхЗаданий(); ПередаваемыеПараметры = Новый Структура; ПередаваемыеПараметры.Вставить("Отбор", Отбор); - Результат = ДлительныеОперации.ЗапуститьВыполнениеВФонеСлужебный( - УникальныйИдентификатор, - "РегламентныеЗаданияСлужебный.ТаблицаСвойствФоновыхЗаданийВФоне", - ПередаваемыеПараметры, - НСтр("ru = 'Регламентные задания. Обновление списка фоновых заданий'") - , , Ложь); - - АдресХранилища = Результат.АдресХранилища; - ИдентификаторЗадания = Результат.ИдентификаторЗадания; + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + ПараметрыВыполнения.ОжидатьЗавершение = 0; + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Регламентные задания. Обновление списка фоновых заданий'"); - Если Результат.ЗаданиеВыполнено Тогда - ОбновитьТаблицуФоновыхЗаданий(); + Результат = ДлительныеОперации.ВыполнитьВФоне("РегламентныеЗаданияСлужебный.ТаблицаСвойствФоновыхЗаданийВФоне", + ПередаваемыеПараметры, ПараметрыВыполнения); + + Если Результат.Статус = "Выполнено" Тогда + ОбновитьТаблицуФоновыхЗаданий(Результат.АдресРезультата); + ИначеЕсли Результат.Статус = "Ошибка" Тогда + ВызватьИсключение Результат.КраткоеПредставлениеОшибки; КонецЕсли; Возврат Результат; - + КонецФункции &НаСервере @@ -1034,12 +1054,12 @@ КонецФункции &НаСервере -Процедура ОбновитьТаблицуФоновыхЗаданий(ФоноваяЗагрузка = Истина) +Процедура ОбновитьТаблицуФоновыхЗаданий(АдресРезультата = Неопределено) - // 2. Обновление списка фоновых заданий. + // Обновление списка фоновых заданий. - Если ФоноваяЗагрузка Тогда - ДанныеИзХранилища = ПолучитьИзВременногоХранилища(АдресХранилища); + Если АдресРезультата <> Неопределено Тогда + ДанныеИзХранилища = ПолучитьИзВременногоХранилища(АдресРезультата); ТекущаяТаблица = ДанныеИзХранилища.ТаблицаСвойств; Иначе Отбор = ОтборФоновыхЗаданий(); @@ -1107,36 +1127,28 @@ КонецПроцедуры &НаКлиенте -Процедура Подключаемый_ПроверитьВыполнениеЗадания() +Процедура ОбновитьТаблицуФоновыхЗаданийЗавершение(Результат, ДополнительныеПараметры) Экспорт - Попытка - Если ЗаданиеВыполнено(ИдентификаторЗадания) Тогда - ОбновитьТаблицуФоновыхЗаданий(); - Элементы.ГруппаШапка.Доступность = Истина; - Элементы.СтраницыОтложеннаяЗагрузкаФоновыхЗаданий.ТекущаяСтраница = Элементы.СтраницаФоновыеЗадания; - Иначе - ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); - ПодключитьОбработчикОжидания( - "Подключаемый_ПроверитьВыполнениеЗадания", - ПараметрыОбработчикаОжидания.ТекущийИнтервал, - Истина); - КонецЕсли; - Исключение + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Результат.Статус = "Выполнено" Тогда + ОбновитьТаблицуФоновыхЗаданий(Результат.АдресРезультата); Элементы.ГруппаШапка.Доступность = Истина; Элементы.СтраницыОтложеннаяЗагрузкаФоновыхЗаданий.ТекущаяСтраница = Элементы.СтраницаФоновыеЗадания; - ВызватьИсключение; - КонецПопытки; + ИначеЕсли Результат.Статус = "Ошибка" Тогда + Элементы.ГруппаШапка.Доступность = Истина; + Элементы.СтраницыОтложеннаяЗагрузкаФоновыхЗаданий.ТекущаяСтраница = Элементы.СтраницаФоновыеЗадания; + ВызватьИсключение Результат.КраткоеПредставлениеОшибки; + КонецЕсли; КонецПроцедуры &НаСервере -Процедура ПриЗакрытииНаСервере() - ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); +Процедура ПояснениеБлокировкаРаботыСВнешнимиРесурсамиОбработкаНавигационнойСсылкиНаСервере() + Элементы.ГруппаБлокировкаРаботыСВнешнимиРесурсами.Видимость = Ложь; + РегламентныеЗаданияСервер.РазблокироватьРаботуСВнешнимиРесурсами(); КонецПроцедуры -&НаСервереБезКонтекста -Функция ЗаданиеВыполнено(ИдентификаторЗадания) - Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); -КонецФункции - #КонецОбласти diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Help/ru.html b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Help/ru.html index 869f07ef2..8eb3c04f9 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Описание свойств фонового задания.</p> <h3>Основное</h3> <ul><li><strong>Наименование</strong> - копия поля <strong>Наименование</strong> <a href="DataProcessor.РегламентныеИФоновыеЗадания.Form.РегламентноеЗадание/Help">регламентного задания</a>. При применении кнопки <strong>Выполнить сейчас</strong> на командной панели регламентного задания, наименованию фонового задания присваивается значение "Запуск вручную: <Представление регламентного задания>". diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Help/ru.html b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Help/ru.html index dbe9202bb..e754360fd 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для администрирования регламентных и фоновых заданий.</p> <p>Ряд действий в программе может выполняться автоматически в фоновом режиме, по определенному расписанию. Такие действия называются регламентными заданиями, например, это ежедневная загрузка курсов валют, регулярная рассылка отчетов, отложенное проведение документов и т.п. Регламентные задания облегчают работу в программе, позволяя перенести выполнение рутинных задач в саму программу, и в то же время они снижают человеческий фактор (например, можно забыть загрузить курсы валют в один из перегруженных другими задачами дней).</p> <p>Открывается по команде <strong>Регламентные и фоновые задания</strong> в разделе <strong>Администрирование - Поддержка и обслуживание</strong>.</p> @@ -11,7 +11,8 @@ <ul><li><img src="StdPicture.ScheduledJob"></img> - флажок в колонке означает, что регламентное задание <strong>Включено</strong> и выполняется в соответствии с заданным расписанием; </li><li><strong>Наименование</strong> - полное наименование регламентного задания; </li><li><strong>Состояние</strong> - информация о выполнении регламентного задания; -</li><li><strong>Дата окончания</strong> - дата и время завершения регламентного задания.</li></ul><h3>Обновление списка</h3> +</li><li><strong>Дата окончания</strong> - дата и время завершения регламентного задания.</li></ul><p>Если в колонках Состояние и Дата окончания проставлено <не определено>, а флажок включен, следует проверить расписание регламентного задания. Возможно, оно некорректное, поэтому регламентное задание не может выполняться.</p> +<h3>Обновление списка</h3> <ul><li> <div>С помощью кнопки <strong>Обновить</strong> можно актуализировать информацию в списке регламентных заданий, а также на вкладке <strong>Фоновые задания</strong>, т.к. списки связаны, при этом будет произведен отбор в соответствии с указанными ранее настройками.</div></li></ul><h3>Настройка расписания</h3> <ul><li> @@ -40,7 +41,7 @@ </li><li><strong>Окончание</strong> - дата и время окончания выполнения фонового задания; </li><li><strong>Регламентное задание</strong> - наименование регламентного задания.</li></ul><p>Для контроля выполнения регламентных заданий можно воспользоваться отбором фоновых заданий по различным признакам:</p> <p></p> -<table border="1" width="100%"><tbody><tr><td valign="top"><strong>Отбор</strong></td> +<table width="100%" border="1"><tbody><tr><td valign="top"><strong>Отбор</strong></td> <td valign="top"><strong>Описание</strong></td></tr><tr><td><strong>По состоянию</strong></td> <td> <ul><li>Позволяет выполнить отбор по состоянию (дополнительно к отбору по периоду и по регламентному заданию): diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Form.form b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Form.form index 282cca1d6..49231dd96 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Form.form +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Form.form @@ -238,6 +238,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -454,6 +455,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -703,6 +705,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -752,6 +755,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1173,6 +1177,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1397,6 +1402,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Help/ru.html b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Help/ru.html index b29fa6925..616acb6b4 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для восстановления данных из резервной копии.</p> <p>Открывается командой <strong>Восстановление из резервной копии</strong> раздела <strong>Администрирование - Поддержка и обслуживание - Резервное копирование и восстановление</strong>.</p> <p>В любой момент времени можно восстановить данные из созданной ранее резервной копии. Необходимо учитывать, что все данные в восстановленной информационно базе будут актуальны на момент создания копии. Данные, введенные в программу после создания резервной копии, будут отсутствовать в восстановленной ИБ.</p> @@ -7,6 +7,6 @@ </li><li>В данном помощнике при восстановлении данных можно использовать только архивы формата .zip, содержащие один файл - файл информационной базы 1cv8.cd. Лучше всего использовать архивы, созданные <a href="DataProcessor.РезервноеКопированиеИБ.Form.РезервноеКопированиеДанных/Help">помощником создания резервной копии</a>. </li><li>Программа выводит предупреждение о том, что имеются другие пользователи, которые кроме вас работают с информационной базой в текущий момент. Перейдите по ссылке, для того чтобы <strong>Посмотреть список активных сеансов</strong>. </li><li>Нажмите <strong>Восстановить данные</strong>. Если присутствуют активные сеансы, будет запущен <a href="DataProcessor.БлокировкаРаботыПользователей/Help">механизм отключения</a> их от информационной базы. Затем программа выполнит восстановление данных.</li></ul><h3>Вход в базу в случае сбоя восстановления данных</h3> -<ul><li><font size="1"><font color="black"><span style="LINE-HEIGHT: 120%; FONT-SIZE: 10pt; mso-fareast-language: RU"><span style="LINE-HEIGHT: 120%; mso-bidi-font-size: 10.5pt"><span style="FONT-FAMILY: Verdana; COLOR: black; FONT-SIZE: 8pt; mso-fareast-language: RU; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: RU; mso-bidi-language: AR-SA"><strong>Важно</strong>: Для того чтобы войти в информационную базу, если восстановление данных не выполнилось, необходимо запустить 1С:Предприятие с параметрами: <strong>ENTERPRISE /F <путь к информационной базе> /CРазрешитьРаботуПользователей /UC РезервноеКопирование.</strong></span></span></span></font></font></li></ul><h3 style="MARGIN: 11.35pt 0cm 8.5pt">См. также:</h3> +<ul><li><font size="1"><font color="black"><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 120%; mso-fareast-language: RU"><span style="LINE-HEIGHT: 120%; mso-bidi-font-size: 10.5pt"><span style="FONT-SIZE: 8pt; FONT-FAMILY: Verdana; COLOR: black; mso-fareast-language: RU; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: RU; mso-bidi-language: AR-SA"><strong>Важно</strong>: Для того чтобы войти в информационную базу, если восстановление данных не выполнилось, необходимо запустить 1С:Предприятие с параметрами: <strong>ENTERPRISE /F <путь к информационной базе> /CРазрешитьРаботуПользователей /UC РезервноеКопирование.</strong></span></span></span></font></font></li></ul><h3 style="MARGIN: 11.35pt 0cm 8.5pt">См. также:</h3> <ul><li> <div style="MARGIN: 11.35pt 0cm 8.5pt"><a href="v8help://frame/form_common">Работа с формами</a>.</div></li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl index d327b1df0..57c007a83 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИзРезервнойКопии/Module.bsl @@ -107,7 +107,7 @@ КонецПроцедуры &НаКлиенте -Процедура НадписьОбновитьВерсиюКомпонентыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) +Процедура НадписьОбновитьВерсиюКомпонентыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(); КонецПроцедуры @@ -151,7 +151,7 @@ Элементы.КоличествоАктивныхПользователей.Заголовок = КоличествоСеансовИнформационнойБазы; УстановитьБлокировкуСоединений = Истина; - СоединенияИБВызовСервера.УстановитьБлокировкуСоединений(Нстр("ru = 'Выполняется восстановление информационной базы.'"), "РезервноеКопирование"); + СоединенияИБВызовСервера.УстановитьБлокировкуСоединений(НСтр("ru = 'Выполняется восстановление информационной базы.'"), "РезервноеКопирование"); Если КоличествоСеансовИнформационнойБазы = 1 Тогда СоединенияИБКлиент.УстановитьПризнакРаботаПользователейЗавершается(УстановитьБлокировкуСоединений); @@ -474,10 +474,13 @@ КонецФункции -&НаСервереБезКонтекста +&НаСервере Функция ПодготовитьТекст(Знач Текст) - Возврат "'" + СтрЗаменить(Текст, "\", "\\") + "'"; + Строка = СтрЗаменить(Текст, "\", "\\"); + Строка = СтрЗаменить(Строка, "'", "\'"); + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("'%1'", Строка); КонецФункции diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Form.form b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Form.form index 6680502e4..18c80d26b 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Form.form +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Form.form @@ -310,6 +310,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -484,6 +485,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -692,6 +694,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -741,6 +744,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1068,6 +1072,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1131,6 +1136,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -1337,6 +1343,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1640,6 +1647,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1897,6 +1905,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Help/ru.html b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Help/ru.html index ba2edc450..3a6b1c86c 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для создания резервной копии информационной базы.</p> <p>Рекомендуется создавать резервные копии перед любой операцией в программе, которая может необратимо изменить большие объемы данных, например, перед групповым изменением реквизитов объектов программы. В этом случае необходимо выполнить резервное копирование в ручном режиме.</p> <p>Открывается по команде <strong>Создание резервной копии</strong> из раздела <strong>Администрирование - Поддержка и обслуживание - Резервное копирование</strong>.</p> @@ -14,5 +14,5 @@ </li><li>Если программе не удалось принудительно отключить сеансы, и администратором также не были предприняты какие-либо действия, то резервное копирование может не состояться. В этом случае программа выводит предупреждение, что резервное копирование не было проведено, и список сеансов, которые не удалось завершить (например, Конфигуратор).</li></ul><p></p> <h3>Запуск программы в случае ошибок во время резервного копирования</h3> <ul><li>Перед началом резервного копирования программа выводит сообщение с рекомендациями по немедленному запуску. -</li><li><font size="1"><font color="black"><span style="LINE-HEIGHT: 120%; FONT-SIZE: 10pt; mso-fareast-language: RU"><span style="LINE-HEIGHT: 120%; mso-bidi-font-size: 10.5pt"><span style="FONT-FAMILY: Verdana; COLOR: black; FONT-SIZE: 8pt; mso-fareast-language: RU; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: RU; mso-bidi-language: AR-SA">Для того, чтобы войти в информационную базу, если резервное копирование не выполнилось, необходимо запустить 1С:Предприятие с параметрами:<strong> ENTERPRISE /F <путь к информационной базе> /CРазрешитьРаботуПользователей /UC РезервноеКопирование.</strong></span></span></span></font></font></li></ul><h3>См. также:</h3> +</li><li><font size="1"><font color="black"><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 120%; mso-fareast-language: RU"><span style="LINE-HEIGHT: 120%; mso-bidi-font-size: 10.5pt"><span style="FONT-SIZE: 8pt; FONT-FAMILY: Verdana; COLOR: black; mso-fareast-language: RU; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: RU; mso-bidi-language: AR-SA">Для того, чтобы войти в информационную базу, если резервное копирование не выполнилось, необходимо запустить 1С:Предприятие с параметрами:<strong> ENTERPRISE /F <путь к информационной базе> /CРазрешитьРаботуПользователей /UC РезервноеКопирование.</strong></span></span></span></font></font></li></ul><h3>См. также:</h3> <ul><li><a href="v8help://frame/form_common">Работа с формами</a>.</li></ul></body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl index 1e7eec098..ed34e8c58 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеДанных/Module.bsl @@ -1,6 +1,10 @@ -&НаКлиенте +#Область ОписаниеПеременных + + &НаКлиенте Перем ВыполняетсяРезервноеКопирование; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -80,7 +84,7 @@ КонецЕсли; - Элементы.Далее.Заголовок = Нстр("ru = 'Сохранить резервную копию'"); + Элементы.Далее.Заголовок = НСтр("ru = 'Сохранить резервную копию'"); КонецЕсли; @@ -181,7 +185,7 @@ КонецПроцедуры &НаКлиенте -Процедура ДекорацияАвтоматическоеРезервноеКопированиеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) +Процедура ДекорацияАвтоматическоеРезервноеКопированиеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ОткрытьФорму(РезервноеКопированиеИБКлиент.ИмяФормыНастроекРезервногоКопирования()); @@ -283,7 +287,7 @@ Если КоличествоСеансовИнформационнойБазы() = 1 Тогда - СоединенияИБВызовСервера.УстановитьБлокировкуСоединений(Нстр("ru = 'Для выполнения резервного копирования.'"), "РезервноеКопирование"); + СоединенияИБВызовСервера.УстановитьБлокировкуСоединений(НСтр("ru = 'Для выполнения резервного копирования.'"), "РезервноеКопирование"); СоединенияИБКлиент.УстановитьПризнакЗавершитьВсеСеансыКромеТекущего(Истина); СоединенияИБКлиент.УстановитьПризнакРаботаПользователейЗавершается(Истина); СоединенияИБКлиент.ЗавершитьРаботуЭтогоСеанса(Ложь); @@ -296,7 +300,7 @@ ПроверитьНаличиеБлокирующихСеансов(); - СоединенияИБВызовСервера.УстановитьБлокировкуСоединений(Нстр("ru = 'Для выполнения резервного копирования.'"), "РезервноеКопирование"); + СоединенияИБВызовСервера.УстановитьБлокировкуСоединений(НСтр("ru = 'Для выполнения резервного копирования.'"), "РезервноеКопирование"); СоединенияИБКлиент.УстановитьОбработчикиОжиданияЗавершенияРаботыПользователей(Истина); УстановитьОбработчикОжиданияНачалаРезервногоКопирования(); УстановитьОбработчикОжиданияИстеченияТаймаутаРезервногоКопирования(); @@ -364,13 +368,13 @@ Если ПустаяСтрока(Объект.КаталогСРезервнымиКопиями) Тогда - ТекстСообщения = Нстр("ru = 'Не выбран каталог для резервной копии.'"); + ТекстСообщения = НСтр("ru = 'Не выбран каталог для резервной копии.'"); ЗафиксироватьОшибкуПроверкиРеквизитов(ТекстСообщения, "Объект.КаталогСРезервнымиКопиями", ВыдаватьОшибку); РеквизитыЗаполнены = Ложь; ИначеЕсли НайтиФайлы(Объект.КаталогСРезервнымиКопиями).Количество() = 0 Тогда - ТекстСообщения = Нстр("ru = 'Указан несуществующий каталог.'"); + ТекстСообщения = НСтр("ru = 'Указан несуществующий каталог.'"); ЗафиксироватьОшибкуПроверкиРеквизитов(ТекстСообщения, "Объект.КаталогСРезервнымиКопиями", ВыдаватьОшибку); РеквизитыЗаполнены = Ложь; @@ -382,7 +386,7 @@ ТестовыйФайл.ЗаписатьОбъявлениеXML(); ТестовыйФайл.Закрыть(); Исключение - ТекстСообщения = Нстр("ru = 'Нет доступа к каталогу с резервными копиями.'"); + ТекстСообщения = НСтр("ru = 'Нет доступа к каталогу с резервными копиями.'"); ЗафиксироватьОшибкуПроверкиРеквизитов(ТекстСообщения, "Объект.КаталогСРезервнымиКопиями", ВыдаватьОшибку); РеквизитыЗаполнены = Ложь; КонецПопытки; @@ -709,10 +713,13 @@ КонецФункции -&НаСервереБезКонтекста +&НаСервере Функция ПодготовитьТекст(Знач Текст) - Возврат "'" + СтрЗаменить(Текст, "\", "\\") + "'"; + Строка = СтрЗаменить(Текст, "\", "\\"); + Строка = СтрЗаменить(Строка, "'", "\'"); + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("'%1'", Строка); КонецФункции diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Form.form b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Form.form index 1fc055839..d285dffa3 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Form.form +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Form.form @@ -102,6 +102,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -197,6 +198,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -295,6 +297,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -390,6 +393,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Help/ru.html b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Help/ru.html index 2b80f4bbf..6ac78b15c 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Индикатор показывает ход обновления ИБ. </p> <p>В сообщении выводится номер версии, на которую производится <a href="DataProcessor.РезультатыОбновленияПрограммы/Help">обновление ИБ</a>.</p> <p>Обновление может занять длительное время, в зависимости от объема данных и производительности компьютера.</p> diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl index 7f339e166..6510aeb8b 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОбновленияИБ/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ПараметрыПродолжения; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -73,6 +77,7 @@ Процедура ТехническаяИнформацияНажатие(Элемент) ПараметрыОтбора = Новый Структура; ПараметрыОтбора.Вставить("ЗапускатьНеВФоне", Истина); + ПараметрыОтбора.Вставить("ДатаНачала", ВремяНачалаОбновления); ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", ПараметрыОтбора); КонецПроцедуры @@ -523,8 +528,7 @@ ДополнительныеПараметры.ВремяНачалаОбновления, ДополнительныеПараметры.ВремяОкончанияОбновления); ОбновитьПовторноИспользуемыеЗначения(); - Если (СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ЭтоБазоваяВерсияКонфигурации - Или СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске().ЭтоУчебнаяПлатформа) + Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая И СтрНайти(ПараметрЗапуска, "ВыполнитьОбновлениеИЗавершитьРаботу") > 0 Тогда ПрекратитьРаботуСистемы(Ложь); Иначе @@ -747,4 +751,4 @@ ПараметрыСеанса.ПараметрыКлиентаНаСервере = РезультатОбновления.ПараметрыКлиентаНаСервере; КонецПроцедуры -#КонецОбласти \ No newline at end of file +#КонецОбласти diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form index a331f54fb..e5d41788c 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Form.form @@ -510,6 +510,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -664,7 +665,9 @@ </extInfo> </extendedTooltip> <type>Page</type> - <extInfo xsi:type="form:PageGroupExtInfo"/> + <extInfo xsi:type="form:PageGroupExtInfo"> + <scrollOnCompress>false</scrollOnCompress> + </extInfo> </items> <items xsi:type="form:FormGroup"> <name>ОбновлениеВыполняется</name> @@ -1229,6 +1232,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1597,6 +1601,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -1839,7 +1844,7 @@ <id>3</id> <toolTip> <key>ru</key> - <value>Выполнить дополнительные процеудры обновления</value> + <value>Выполнить дополнительные процедуры обновления</value> </toolTip> <use> <common>true</common> diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Help/ru.html b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Help/ru.html index 17db3b117..ea01467d1 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для индикации хода и просмотра результатов отложенного <a href="DataProcessor.РезультатыОбновленияПрограммы/Help">обновления ИБ</a>.</p> <p>При обновлении версии ИБ в программе предусмотрена возможность часть данных обрабатывать отложенно, во время работы программы, в фоновом режиме. В этом случае документы, которые еще не были обработаны, будут недоступны. При попытке открыть такой документ программа выдает сообщение, что действия с документом временно запрещены, так как не завершен переход на новую версию программы. Некоторые отчеты также могут быть недоступны. Программа при попытке сформировать отчет выдает сообщение, что отчет может содержать некорректные данные, так как не завершен переход на новую версию программы.</p> <p>Открывается автоматически при входе в программу после обновления ИБ одновременно с открытием окна <a href="CommonForm.ОписаниеИзмененийПрограммы/Help">Описание изменений программы</a> (<strong>Что нового в конфигурации</strong>).</p> diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl index 04fec3c2c..ceeb3a94e 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ИндикацияХодаОтложенногоОбновленияИБ/Module.bsl @@ -27,7 +27,7 @@ // Зачитываем значение констант. СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); - ПриоритетОбновления = ?(СведенияОбОбновлении.ФорсироватьОтложенноеОбновление, "ОбработкаДанных", "РаботаПользователей"); + ПриоритетОбновления = ?(СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Свойство("ФорсироватьОбновление"), "ОбработкаДанных", "РаботаПользователей"); ВремяОкончанияОбновления = СведенияОбОбновлении.ВремяОкончанияОбновления; ВремяНачалаОтложенногоОбновления = СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления; @@ -252,7 +252,12 @@ Блокировка.Заблокировать(); СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); - СведенияОбОбновлении.ФорсироватьОтложенноеОбновление = ?(ПриоритетОбновления = "ОбработкаДанных", Истина, Ложь); + Если ПриоритетОбновления = "ОбработкаДанных" Тогда + СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Вставить("ФорсироватьОбновление"); + Иначе + СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Удалить("ФорсироватьОбновление"); + КонецЕсли; + ОбновлениеИнформационнойБазыСлужебный.ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); ЗафиксироватьТранзакцию(); @@ -322,6 +327,13 @@ КонецЦикла; КонецЦикла; КонецЦикла; + + Для Каждого ЦиклОбновления Из СведенияОбОбновлении.ПланОтложенногоОбновления Цикл + Если ЦиклОбновления.Свойство("ЗавершеноСОшибками") Тогда + ЦиклОбновления.Удалить("ЗавершеноСОшибками"); + КонецЕсли; + КонецЦикла; + ОбновлениеИнформационнойБазыСлужебный.ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); Если Не ИБФайловая Тогда @@ -337,7 +349,7 @@ КонецЕсли; - ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенноеОбновлениеСейчас(); + ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенноеОбновлениеСейчас(Неопределено); СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); ОбновитьСтраницуОбновлениеЗавершено(СведенияОбОбновлении); @@ -429,20 +441,20 @@ КонецПроцедуры &НаСервере -Процедура УстановитьРасписаниеОтложенногоОбновления(Расписание) +Процедура УстановитьРасписаниеОтложенногоОбновления(НовоеРасписание) РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОтложенноеОбновлениеИБ); - РегламентноеЗадание.Расписание = Расписание; + РегламентноеЗадание.Расписание = НовоеРасписание; РегламентноеЗадание.Записать(); КонецПроцедуры &НаКлиенте -Процедура ИзменитьРасписаниеПослеУстановкиРасписания(Расписание, ДополнительныеПараметры) Экспорт +Процедура ИзменитьРасписаниеПослеУстановкиРасписания(НовоеРасписание, ДополнительныеПараметры) Экспорт - Если Расписание <> Неопределено Тогда - Если Расписание.ПериодПовтораВТечениеДня = 0 Тогда - Оповещение = Новый ОписаниеОповещения("ИзменитьРасписаниеПослеВопроса", ЭтотОбъект, Расписание); + Если НовоеРасписание <> Неопределено Тогда + Если НовоеРасписание.ПериодПовтораВТечениеДня = 0 Тогда + Оповещение = Новый ОписаниеОповещения("ИзменитьРасписаниеПослеВопроса", ЭтотОбъект, НовоеРасписание); КнопкиВопроса = Новый СписокЗначений; КнопкиВопроса.Добавить("НастроитьРасписание", НСтр("ru = 'Настроить расписание'")); @@ -455,22 +467,24 @@ |и заполнить поле ""Повторять через"".'"); ПоказатьВопрос(Оповещение, ТекстСообщения, КнопкиВопроса,, "НастроитьРасписание"); Иначе - УстановитьРасписаниеОтложенногоОбновления(Расписание); + УстановитьРасписаниеОтложенногоОбновления(НовоеРасписание); КонецЕсли; КонецЕсли; + Расписание = НовоеРасписание; + КонецПроцедуры &НаКлиенте -Процедура ИзменитьРасписаниеПослеВопроса(Результат, Расписание) Экспорт +Процедура ИзменитьРасписаниеПослеВопроса(Результат, НовоеРасписание) Экспорт Если Результат = "РекомендуемыеНастройки" Тогда - Расписание.ПериодПовтораВТечениеДня = 60; - Расписание.ПаузаПовтора = 60; - УстановитьРасписаниеОтложенногоОбновления(Расписание); + НовоеРасписание.ПериодПовтораВТечениеДня = 60; + НовоеРасписание.ПаузаПовтора = 60; + УстановитьРасписаниеОтложенногоОбновления(НовоеРасписание); Иначе ОписаниеОповещения = Новый ОписаниеОповещения("ИзменитьРасписаниеПослеУстановкиРасписания", ЭтотОбъект); - Диалог = Новый ДиалогРасписанияРегламентногоЗадания(Расписание); + Диалог = Новый ДиалогРасписанияРегламентногоЗадания(НовоеРасписание); Диалог.Показать(ОписаниеОповещения); КонецЕсли; diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Form.form b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Form.form index ff312a048..fe793de10 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Form.form +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Form.form @@ -13,6 +13,10 @@ <items xsi:type="form:FormField"> <name>Статус</name> <id>54</id> + <title> + <key>ru</key> + <value>Отбор</value> + true true @@ -92,6 +96,15 @@ Выполнено + + + ru + Желательно быстрее + + + ЖелательноБыстрее + + Normal @@ -262,6 +275,60 @@ Auto InAdditionalSubmenu + + ВПлановомПорядке + 106 + true + true + + true + + + ВПлановомПорядкеРасширеннаяПодсказка + 107 + Label + true + true + + Left + + + Form.Command.ВПлановомПорядке + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ЖелательноБыстрее + 108 + true + true + + true + + + ЖелательноБыстрееРасширеннаяПодсказка + 109 + Label + true + true + + Left + + + Form.Command.ЖелательноБыстрее + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + true true @@ -337,6 +404,53 @@ MoveUp SortListAsc SortListDesc + + Приоритет + 99 + true + true + + true + + + ОтложенныеОбработчики.КартинкаПриоритет + + None + + ПриоритетРасширеннаяПодсказка + 101 + Label + true + true + + Left + + + + ПриоритетКонтекстноеМеню + 100 + true + + PictureField + Auto + true + + CommonPicture.ВосклицательныйЗнакСерый + + Left + true + + 2 + true + true + true + true + + + 1 + + + Номер 38 @@ -778,6 +892,58 @@ UserCmds Auto + + ВПлановомПорядкеКонтекстноеМеню + 104 + true + true + + true + + + ВПлановомПорядкеКонтекстноеМенюРасширеннаяПодсказка + 105 + Label + true + true + + Left + + + Form.Command.ВПлановомПорядке + Normal + Auto + true + true + UserCmds + Auto + + + ЖелательноБыстрееКонтекстноеМеню + 102 + true + true + + true + + + ЖелательноБыстрееКонтекстноеМенюРасширеннаяПодсказка + 103 + Label + true + true + + Left + + + Form.Command.ЖелательноБыстрее + Normal + Auto + true + true + UserCmds + Auto + true true @@ -853,6 +1019,45 @@ Normal + + ГиперссылкаПрогрессОбновления + 110 + + <key>ru</key> + <value>Отчет по прогрессу отложенного обновления</value> + + true + true + + true + + + ГиперссылкаПрогрессОбновленияРасширеннаяПодсказка + 112 + Label + true + true + + Left + + + + ГиперссылкаПрогрессОбновленияКонтекстноеМеню + 111 + true + + Label + true + true + + + Click + ГиперссылкаПрогрессОбновленияНажатие + + true + Left + + ГиперссылкаОтложенноеОбновление 13 @@ -1282,6 +1487,41 @@ true + + КартинкаПриоритет + + <key>ru</key> + <value>Картинка приоритет</value> + + 9 + + Picture + + + true + + + true + + + + Приоритет + + <key>ru</key> + <value>Приоритет</value> + + 11 + + String + + + + true + + + true + + ВремяНачалаОтложенногоОбновления @@ -1426,6 +1666,23 @@ true + + ПараллельныйРежимИспользуется + + <key>ru</key> + <value>Параллельный режим используется</value> + + 11 + + Boolean + + + true + + + true + + ЗакрытьФорму @@ -1498,7 +1755,7 @@ <name>Запустить</name> <title> <key>ru</key> - <value>Запустить</value> + <value>Возобновить</value> 4 @@ -1545,6 +1802,50 @@ DontUse Auto + + ЖелательноБыстрее + + <key>ru</key> + <value>Желательно быстрее</value> + + 6 + + ru + Желательно быстрее + + + true + + + + ЖелательноБыстрее + + + DontUse + Auto + + + ВПлановомПорядке + + <key>ru</key> + <value>В плановом порядке</value> + + 7 + + ru + В плановом порядке + + + true + + + + ВПлановомПорядке + + + DontUse + Auto + diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Help/ru.html b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Help/ru.html index 8f939323b..0db9fabf9 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 45dedb94c..42156e66a 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ОтложенныеОбработчики/Module.bsl @@ -19,8 +19,12 @@ Элементы.ГруппаПовторныйЗапуск.Видимость = Ложь; Элементы.Запустить.Видимость = Ложь; Элементы.Приостановить.Видимость = Ложь; + Элементы.ВПлановомПорядке.Видимость = Ложь; + Элементы.ЖелательноБыстрее.Видимость = Ложь; Элементы.КонтекстноеМенюПриостановить.Видимость = Ложь; Элементы.КонтекстноеМенюЗапустить.Видимость = Ложь; + Элементы.ВПлановомПорядкеКонтекстноеМеню.Видимость = Ложь; + Элементы.ЖелательноБыстрееКонтекстноеМеню.Видимость = Ложь; КонецЕсли; Если Не ИБФайловая Тогда @@ -35,6 +39,8 @@ СформироватьТаблицуОтложенныхОбработчиков(, Истина); + Элементы.ГиперссылкаПрогрессОбновления.Видимость = ПараллельныйРежимИспользуется; + КонецПроцедуры &НаКлиенте @@ -73,6 +79,9 @@ Элементы.Запустить.Доступность = Ложь; Элементы.Приостановить.Доступность = Ложь; КонецЕсли; + + ОбновитьСтатусыКомандПриоритета(Элемент); + КонецПроцедуры #КонецОбласти @@ -94,29 +103,35 @@ Процедура ГиперссылкаОтложенноеОбновлениеНажатие(Элемент) ПолучитьСведенияОбОбновлении(); - Если ЗначениеЗаполнено(ВремяНачалаОтложенногоОбновления) И ЗначениеЗаполнено(ВремяОкончанияОтложенногоОбновления) Тогда + Если ЗначениеЗаполнено(ВремяНачалаОтложенногоОбновления) Тогда ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ДатаНачала", ВремяНачалаОтложенногоОбновления); - ПараметрыФормы.Вставить("ДатаОкончания", ВремяОкончанияОтложенногоОбновления); + Если ЗначениеЗаполнено(ВремяОкончанияОтложенногоОбновления) Тогда + ПараметрыФормы.Вставить("ДатаОкончания", ВремяОкончанияОтложенногоОбновления); + КонецЕсли; ПараметрыФормы.Вставить("Сеанс", НомерТекущегоСеанса); ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", ПараметрыФормы); Иначе - - Если ЗначениеЗаполнено(ВремяНачалаОтложенногоОбновления) Тогда - ТекстПредупреждения = НСтр("ru = 'Обработка данных еще не завершилась.'"); - Иначе - ТекстПредупреждения = НСтр("ru = 'Обработка данных еще не выполнялась.'"); - КонецЕсли; - + ТекстПредупреждения = НСтр("ru = 'Обработка данных еще не выполнялась.'"); ПоказатьПредупреждение(,ТекстПредупреждения); КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ГиперссылкаПрогрессОбновленияНажатие(Элемент) + ОткрытьФорму("Отчет.ПрогрессОтложенногоОбновления.Форма"); +КонецПроцедуры + &НаКлиенте Процедура СтатусПриИзменении(Элемент) - Если Статус = "ВсеПроцедуры" Тогда + + Если Статус = "ЖелательноБыстрее" Тогда + ОтборСтрокТаблицы = Новый Структура; + ОтборСтрокТаблицы.Вставить("Приоритет", БиблиотекаКартинок.ВосклицательныйЗнакКрасный); + Элементы.ОтложенныеОбработчики.ОтборСтрок = Новый ФиксированнаяСтруктура(ОтборСтрокТаблицы); + ИначеЕсли Статус = "ВсеПроцедуры" Тогда Элементы.ОтложенныеОбработчики.ОтборСтрок = Новый ФиксированнаяСтруктура; Иначе ОтборСтрокТаблицы = Новый Структура; @@ -173,10 +188,104 @@ ОбновитьСтатусыОбработчиков(Истина); КонецПроцедуры +&НаКлиенте +Процедура ВПлановомПорядке(Команда) + + ТекущаяСтрока = Элементы.ОтложенныеОбработчики.ТекущиеДанные; + Если ТекущаяСтрока = Неопределено + Или Элементы.ВПлановомПорядке.Пометка Тогда + Возврат; + КонецЕсли; + + ИзменитьПриоритет("ПриоритетВПлановомПорядке", ТекущаяСтрока.Идентификатор); + ТекущаяСтрока.КартинкаПриоритет = БиблиотекаКартинок.ВосклицательныйЗнакСерый; + ТекущаяСтрока.Приоритет = "Неопределено"; + ОбновитьСтатусыКомандПриоритета(Элементы.ОтложенныеОбработчики); + +КонецПроцедуры + +&НаКлиенте +Процедура ЖелательноБыстрее(Команда) + ТекущаяСтрока = Элементы.ОтложенныеОбработчики.ТекущиеДанные; + Если ТекущаяСтрока = Неопределено + Или Элементы.ЖелательноБыстрее.Пометка Тогда + Возврат; + КонецЕсли; + + ИзменитьПриоритет("ПриоритетЖелательноБыстрее", ТекущаяСтрока.Идентификатор); + ТекущаяСтрока.КартинкаПриоритет = БиблиотекаКартинок.ВосклицательныйЗнакСерый; + ТекущаяСтрока.Приоритет = "Неопределено"; + ОбновитьСтатусыКомандПриоритета(Элементы.ОтложенныеОбработчики); + +КонецПроцедуры + +&НаСервере +Процедура ИзменитьПриоритет(Приоритет, Обработчик) + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Константа.СведенияОбОбновленииИБ"); + Блокировка.Заблокировать(); + + СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); + + Если СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Свойство(Приоритет) + И ТипЗнч(СведенияОбОбновлении.УправлениеОтложеннымОбновлением[Приоритет]) = Тип("Массив") Тогда + Коллекция = СведенияОбОбновлении.УправлениеОтложеннымОбновлением[Приоритет]; + Если Коллекция.Найти(Обработчик) = Неопределено Тогда + Коллекция.Добавить(Обработчик); + КонецЕсли; + Иначе + Коллекция = Новый Массив; + Коллекция.Добавить(Обработчик); + СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Вставить(Приоритет, Коллекция); + КонецЕсли; + + ОбновлениеИнформационнойБазыСлужебный.ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); + + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции +&НаКлиенте +Процедура ОбновитьСтатусыКомандПриоритета(Элемент) + + Если Элемент.ТекущиеДанные.Приоритет = "ЖелательноБыстрее" Тогда + Элементы.ЖелательноБыстрее.Пометка = Истина; + Элементы.ЖелательноБыстрееКонтекстноеМеню.Пометка = Истина; + Элементы.ВПлановомПорядке.Пометка = Ложь; + Элементы.ВПлановомПорядкеКонтекстноеМеню.Пометка = Ложь; + Иначе + Элементы.ВПлановомПорядке.Пометка = Истина; + Элементы.ВПлановомПорядкеКонтекстноеМеню.Пометка = Истина; + Элементы.ЖелательноБыстрее.Пометка = Ложь; + Элементы.ЖелательноБыстрееКонтекстноеМеню.Пометка = Ложь; + КонецЕсли; + + Если Элемент.ТекущиеДанные.Приоритет = "Неопределено" Тогда + Элементы.ВПлановомПорядке.Доступность = Ложь; + Элементы.ВПлановомПорядкеКонтекстноеМеню.Доступность = Ложь; + Элементы.ЖелательноБыстрее.Доступность = Ложь; + Элементы.ЖелательноБыстрееКонтекстноеМеню.Доступность = Ложь; + Иначе + Элементы.ВПлановомПорядке.Доступность = Истина; + Элементы.ВПлановомПорядкеКонтекстноеМеню.Доступность = Истина; + Элементы.ЖелательноБыстрее.Доступность = Истина; + Элементы.ЖелательноБыстрееКонтекстноеМеню.Доступность = Истина; + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура ПриостановитьВыполнениеОтложенногоОбработчика(Результат, ПроцедураОбновления) Экспорт Если Результат = "Нет" Тогда @@ -190,7 +299,18 @@ Блокировка.Заблокировать(); СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); - СведенияОбОбновлении.ПриостановленныеПроцедурыОбновления.Добавить(ПроцедураОбновления); + Если СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Свойство("ОстановитьОбработчики") + И ТипЗнч(СведенияОбОбновлении.УправлениеОтложеннымОбновлением.ОстановитьОбработчики) = Тип("Массив") Тогда + ОстановленныеОбработчики = СведенияОбОбновлении.УправлениеОтложеннымОбновлением.ОстановитьОбработчики; + Если ОстановленныеОбработчики.Найти(ПроцедураОбновления) = Неопределено Тогда + ОстановленныеОбработчики.Добавить(ПроцедураОбновления); + КонецЕсли; + Иначе + ОстановленныеОбработчики = Новый Массив; + ОстановленныеОбработчики.Добавить(ПроцедураОбновления); + СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Вставить("ОстановитьОбработчики", ОстановленныеОбработчики); + КонецЕсли; + ОбновлениеИнформационнойБазыСлужебный.ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); ЗафиксироватьТранзакцию(); @@ -211,7 +331,18 @@ Блокировка.Заблокировать(); СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); - СведенияОбОбновлении.ЗапущенныеПроцедурыОбновления.Добавить(ПроцедураОбновления); + Если СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Свойство("ЗапуститьОбработчики") + И ТипЗнч(СведенияОбОбновлении.УправлениеОтложеннымОбновлением.ЗапуститьОбработчики) = Тип("Массив") Тогда + ЗапущенныеОбработчики = СведенияОбОбновлении.УправлениеОтложеннымОбновлением.ЗапуститьОбработчики; + Если ЗапущенныеОбработчики.Найти(ПроцедураОбновления) = Неопределено Тогда + ЗапущенныеОбработчики.Добавить(ПроцедураОбновления); + КонецЕсли; + Иначе + ЗапущенныеОбработчики = Новый Массив; + ЗапущенныеОбработчики.Добавить(ПроцедураОбновления); + СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Вставить("ЗапуститьОбработчики", ЗапущенныеОбработчики); + КонецЕсли; + ОбновлениеИнформационнойБазыСлужебный.ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении); ЗафиксироватьТранзакцию(); @@ -243,37 +374,47 @@ СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); ВремяНачалаОтложенногоОбновления = СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления; ВремяОкончанияОтложенногоОбновления = СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления; + НомерТекущегоСеанса = СведенияОбОбновлении.НомерСеанса; КонецПроцедуры &НаСервере Процедура СформироватьТаблицуОтложенныхОбработчиков(ВыполненыВсеОбработчики = Истина, НачальноеЗаполнение = Ложь) + ОписанияПодсистем = СтандартныеПодсистемыПовтИсп.ОписанияПодсистем().ПоИменам; + ОбработчикиНеВыполнялись = Истина; СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); + ВыполняетсяИзменениеПриоритета = СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Свойство("ПриоритетЖелательноБыстрее") + Или СведенияОбОбновлении.УправлениеОтложеннымОбновлением.Свойство("ПриоритетВПлановомПорядке"); ОбновлениеВыполняется = (СведенияОбОбновлении.ОтложенноеОбновлениеЗавершеноУспешно = Неопределено); Для Каждого СтрокаДереваБиблиотека Из СведенияОбОбновлении.ДеревоОбработчиков.Строки Цикл Для Каждого СтрокаДереваВерсия Из СтрокаДереваБиблиотека.Строки Цикл + Если Не ПараллельныйРежимИспользуется + И ОписанияПодсистем[СтрокаДереваБиблиотека.ИмяБиблиотеки].РежимВыполненияОтложенныхОбработчиков = "Параллельно" + И СтрокаДереваВерсия.Строки.Количество() > 0 Тогда + ПараллельныйРежимИспользуется = Истина; + КонецЕсли; + Для Каждого СтрокаОбработчика Из СтрокаДереваВерсия.Строки Цикл Если Не ПустаяСтрока(СтрокаПоиска) Тогда - Если Не ПустаяСтрока(СтрокаОбработчика.Комментарий) Тогда - Если СтрНайти(ВРег(СтрокаОбработчика.Комментарий), ВРег(СтрокаПоиска)) = 0 Тогда - Продолжить; - КонецЕсли; - Иначе - Если СтрНайти(ВРег(СтрокаОбработчика.ИмяОбработчика), ВРег(СтрокаПоиска)) = 0 Тогда - Продолжить; - КонецЕсли; + Если СтрНайти(ВРег(СтрокаОбработчика.Комментарий), ВРег(СтрокаПоиска)) = 0 + И СтрНайти(ВРег(СтрокаОбработчика.ИмяОбработчика), ВРег(СтрокаПоиска)) = 0 Тогда + Продолжить; КонецЕсли; КонецЕсли; - ДобавитьОтложенныйОбработчик(СтрокаОбработчика, ОбработчикиНеВыполнялись, ВыполненыВсеОбработчики, НачальноеЗаполнение); + ДобавитьОтложенныйОбработчик(СтрокаОбработчика, ОбработчикиНеВыполнялись, ВыполненыВсеОбработчики, НачальноеЗаполнение, ВыполняетсяИзменениеПриоритета); КонецЦикла; КонецЦикла; КонецЦикла; - Если Статус <> "ВсеПроцедуры" Тогда + Если Статус = "ЖелательноБыстрее" Тогда + ОтборСтрокТаблицы = Новый Структура; + ОтборСтрокТаблицы.Вставить("Приоритет", БиблиотекаКартинок.ВосклицательныйЗнакКрасный); + Элементы.ОтложенныеОбработчики.ОтборСтрок = Новый ФиксированнаяСтруктура(ОтборСтрокТаблицы); + ИначеЕсли Статус <> "ВсеПроцедуры" Тогда ОтборСтрокТаблицы = Новый Структура; ОтборСтрокТаблицы.Вставить("Статус", Статус); Элементы.ОтложенныеОбработчики.ОтборСтрок = Новый ФиксированнаяСтруктура(ОтборСтрокТаблицы); @@ -300,7 +441,7 @@ КонецПроцедуры &НаСервере -Процедура ДобавитьОтложенныйОбработчик(СтрокаОбработчика, ОбработчикиНеВыполнялись, ВыполненыВсеОбработчики, НачальноеЗаполнение) +Процедура ДобавитьОтложенныйОбработчик(СтрокаОбработчика, ОбработчикиНеВыполнялись, ВыполненыВсеОбработчики, НачальноеЗаполнение, ВыполняетсяИзменениеПриоритета) Если НачальноеЗаполнение Тогда СтрокаСписка = ОтложенныеОбработчики.Добавить(); @@ -337,7 +478,7 @@ ШаблонИнформацияОПроцедуреОбновления = НСтр("ru = '%1%2Процедура ""%3"" обработки данных %4.'"); - СтрокаСписка.Статус = СтрокаОбработчика.Статус; + СтрокаСписка.Статус = ?(СтрокаОбработчика.Статус = "НеВыполнено", "НаЗапускалась", СтрокаОбработчика.Статус); Если СтрокаОбработчика.Статус = "Выполнено" Тогда ОбработчикиНеВыполнялись = Ложь; @@ -352,7 +493,7 @@ СтрокаСписка.СтатусКартинка = Новый Картинка; ПредставлениеСтатусаВыполнения = НСтр("ru = 'в данный момент выполняется'"); Если Прогресс <> Неопределено Тогда - ШаблонСтатус = НСтр("ru = 'Выполняется (%1%%)'"); + ШаблонСтатус = НСтр("ru = 'Выполняется (%1%)'"); СтрокаСписка.СтатусПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтатус, Прогресс) Иначе СтрокаСписка.СтатусПредставление = НСтр("ru = 'Выполняется'"); @@ -361,8 +502,9 @@ ОбработчикиНеВыполнялись = Ложь; ВыполненыВсеОбработчики = Ложь; - ПредставлениеСтатусаВыполнения = НСтр("ru = 'завершилась успешно'"); - СтрокаСписка.ИнформацияОПроцедуреОбновления = СтрокаОбработчика.ИнформацияОбОшибке; + ПредставлениеСтатусаВыполнения = НСтр("ru = 'Процедура ""%1"" обработки данных завершилась с ошибкой:'") + Символы.ПС + Символы.ПС; + ПредставлениеСтатусаВыполнения = СтрШаблон(ПредставлениеСтатусаВыполнения, СтрокаОбработчика.ИмяОбработчика); + СтрокаСписка.ИнформацияОПроцедуреОбновления = ПредставлениеСтатусаВыполнения + СтрокаОбработчика.ИнформацияОбОшибке; СтрокаСписка.СтатусПредставление = НСтр("ru = 'Ошибка'"); СтрокаСписка.СтатусКартинка = БиблиотекаКартинок.Остановить; СтрокаСписка.ДлительностьВыполнения = ДлительностьВыполненияПроцедурыОбновления(ДлительностьВыполнения); @@ -386,6 +528,16 @@ Отступ = ""; КонецЕсли; + Если ВыполняетсяИзменениеПриоритета И СтрокаСписка.Приоритет = "Неопределено" Тогда + // Приоритет для данной строки не изменяется. + ИначеЕсли СтрокаОбработчика.Приоритет = "ЖелательноБыстрее" Тогда + СтрокаСписка.КартинкаПриоритет = БиблиотекаКартинок.ВосклицательныйЗнакКрасный; + СтрокаСписка.Приоритет = СтрокаОбработчика.Приоритет; + Иначе + СтрокаСписка.КартинкаПриоритет = Новый Картинка; + СтрокаСписка.Приоритет = "ВПлановомПорядке"; + КонецЕсли; + Если СтрокаОбработчика.Статус <> "Ошибка" Тогда СтрокаСписка.ИнформацияОПроцедуреОбновления = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ШаблонИнформацияОПроцедуреОбновления, diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ПредупреждениеБезопасности/Form.form b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ПредупреждениеБезопасности/Form.form new file mode 100644 index 000000000..8f60be6bc --- /dev/null +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ПредупреждениеБезопасности/Form.form @@ -0,0 +1,227 @@ + + + + Группа + 1 + + Картинка + 14 + + <key>ru</key> + <value>Картинка</value> + + true + true + + true + + + КартинкаРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + КартинкаКонтекстноеМеню + 15 + true + + 3 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + Надпись + 3 + + <key>ru</key> + <value>При открытии внешнего отчета или обработки рекомендуется +обращать внимание на источник, из которого был получен файл. +Если вы не уверены в содержимом этого файла или в источнике, +то файл не рекомендуется подключать к программе. + +См. также: <link http://1c.ru/news/info.jsp?id=21537>Пример проблемы с вирусом во внешней обработке</>. +</value> + + true + true + + true + + + НадписьРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + + НадписьКонтекстноеМеню + 4 + true + + true + Label + true + true + false + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа</value> + + + ГруппаРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Auto + WeakSeparation + true + true + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаПродолжить + 10 + true + true + + true + + + ФормаПродолжитьРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + Form.Command.ПродолжитьОткрытие + Normal + Auto + true + true + UserCmds + Auto + + + ФормаОтмена + 12 + true + true + + true + + + ФормаОтменаРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + Form.Command.Отмена + Normal + Auto + true + true + UserCmds + Auto + + Right + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Отмена + + <key>ru</key> + <value>Отмена</value> + + 1 + + ru + Отмена + + + true + + + + Отмена + + + DontUse + Auto + + + ПродолжитьОткрытие + + <key>ru</key> + <value>Продолжить</value> + + 2 + + true + + + + ПродолжитьОткрытие + + + DontUse + Auto + + + + + + diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ПредупреждениеБезопасности/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ПредупреждениеБезопасности/Module.bsl new file mode 100644 index 000000000..70ddb5195 --- /dev/null +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/ПредупреждениеБезопасности/Module.bsl @@ -0,0 +1,14 @@ + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ПродолжитьОткрытие(Команда) + Закрыть(Истина); +КонецПроцедуры + +&НаКлиенте +Процедура Отмена(Команда) + Закрыть(Ложь); +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Form.form b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Form.form index 068153253..1619b9904 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Form.form +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Form.form @@ -272,6 +272,10 @@
          Right + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере @@ -351,6 +355,24 @@ true + + КаталогСкрипта + + <key>ru</key> + <value>Каталог скрипта</value> + + 5 + + String + + + + true + + + true + + ЗавершитьРаботу diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Help/ru.html b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Help/ru.html index 4c1f361ad..d57c485e8 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначено для информирования об ошибке во время <a href="DataProcessor.РезультатыОбновленияПрограммы/Help">обновления ИБ</a>.</p> <p>Для того чтобы посмотреть в <a href="DataProcessor.ЖурналРегистрации/Help">журнале регистрации</a> сведения об ошибках, перейдите по ссылке <strong>Подробности см. в Журнале регистрации</strong>. </p> <p>Для того чтобы выйти из программы, нажмите <strong>Завершить</strong>.</p> diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Module.bsl b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Module.bsl index 416cf38d6..aec5fba12 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Module.bsl +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Forms/СообщениеОНеудачномОбновлении/Module.bsl @@ -27,6 +27,21 @@ ИспользуютсяПрофилиБезопасности = ПолучитьФункциональнуюОпцию("ИспользуютсяПрофилиБезопасности"); + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда + МодульОбновлениеКонфигурации = ОбщегоНазначения.ОбщийМодуль("ОбновлениеКонфигурации"); + КаталогСкрипта = МодульОбновлениеКонфигурации.КаталогСкрипта(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Если Не ПустаяСтрока(КаталогСкрипта) Тогда + МодульОбновлениеКонфигурацииКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбновлениеКонфигурацииКлиент"); + МодульОбновлениеКонфигурацииКлиент.ЗаписатьФайлПротоколаОшибки(КаталогСкрипта); + КонецЕсли; + КонецПроцедуры #КонецОбласти @@ -41,7 +56,7 @@ ПараметрыФормы.Вставить("ДатаОкончания", ВремяОкончанияОбновления); ПараметрыФормы.Вставить("ЗапускатьНеВФоне", Истина); - ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", ПараметрыФормы,,,,,, РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", ПараметрыФормы,,,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецПроцедуры @@ -62,6 +77,17 @@ &НаКлиенте Процедура ОткрытьВнешнююОбработку(Команда) + ОбработкаПродолжения = Новый ОписаниеОповещения("ОткрытьВнешнююОбработкуПослеПодтвержденияБезопасности", ЭтотОбъект); + ОткрытьФорму("Обработка.РезультатыОбновленияПрограммы.Форма.ПредупреждениеБезопасности",,,,,, ОбработкаПродолжения); + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьВнешнююОбработкуПослеПодтвержденияБезопасности(Результат, ДополнительныеПараметры) Экспорт + Если Результат <> Истина Тогда + Возврат; + КонецЕсли; + Если ИспользуютсяПрофилиБезопасности Тогда ОткрытьФорму( @@ -91,7 +117,6 @@ ОписаниеОповещения = Новый ОписаниеОповещения("ОткрытьВнешнююОбработкуЗавершение", ЭтотОбъект); ДиалогОткрытияФайла.Показать(ОписаниеОповещения); - КонецПроцедуры &НаКлиенте diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Help/ru.html b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/Help/ru.html index c4a394b72..7c8ee4d28 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Существует два метода обновления ИБ, которые могут применяться, дополняя друг друга:</p> <ul><li> <div>с помощью монопольных обработчиков:</div> diff --git a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/РезультатыОбновленияПрограммы.mdo b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/РезультатыОбновленияПрограммы.mdo index d71e12ea3..4f70f0fb6 100644 --- a/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/РезультатыОбновленияПрограммы.mdo +++ b/SSL/src/DataProcessors/РезультатыОбновленияПрограммы/РезультатыОбновленияПрограммы.mdo @@ -82,4 +82,13 @@ <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> </forms> + <forms uuid="adcb0dca-d810-461e-8f45-1d3cd6ffad4d"> + <name>ПредупреждениеБезопасности</name> + <synonym> + <key>ru</key> + <value>Предупреждение безопасности</value> + </synonym> + <usePurposes>PersonalComputer</usePurposes> + <usePurposes>MobileDevice</usePurposes> + </forms> </mdclass:DataProcessor> diff --git a/SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/Commands/СбросНастроекПроверкиКонтрагентов/CommandModule.bsl b/SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/Commands/СбросНастроекПроверкиКонтрагентов/CommandModule.bsl deleted file mode 100644 index deea668ed..000000000 --- a/SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/Commands/СбросНастроекПроверкиКонтрагентов/CommandModule.bsl +++ /dev/null @@ -1,10 +0,0 @@ - -#Область ОбработчикиСобытий - -&НаКлиенте -Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ПараметрыФормы = Новый Структура("", ); - ОткрытьФорму("Обработка.СбросНастроекПроверкиКонтрагентов.Форма", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка); -КонецПроцедуры - -#КонецОбласти \ No newline at end of file diff --git a/SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/Forms/Форма/Form.form b/SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/Forms/Форма/Form.form deleted file mode 100644 index b1a7aa478..000000000 --- a/SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/Forms/Форма/Form.form +++ /dev/null @@ -1,94 +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:Button"> - <name>СбросНастроек</name> - <id>1</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <extendedTooltip> - <name>СбросНастроекРасширеннаяПодсказка</name> - <id>2</id> - <title> - <key>ru</key> - <value>Отключение проверки контрагентов, сброс даты последнего отображения предложения на использование сервиса, сброс отказа от подключения к сервису</value> - - Label - true - true - - Style.ПоясняющийТекст - - - Left - - - UsualButton - Form.Command.СбросНастроек - Normal - Auto - true - true - UserCmds - ShowBottom - Auto - - - ФормаКоманднаяПанель - -1 - Left - - DontBlock - true - true - true - Vertical - true - true - true - auto - true - - Объект - 1 - - DataProcessorObject.СбросНастроекПроверкиКонтрагентов - - - true - - - true - -
          true
          -
          - - СбросНастроек - - <key>ru</key> - <value>Сброс настроек</value> - - 1 - - ru - Сброс настроек - - - true - - - - СбросНастроек - - - DontUse - Auto - - - - - - - diff --git a/SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/Forms/Форма/Module.bsl deleted file mode 100644 index bd34cc049..000000000 --- a/SSL/src/DataProcessors/СбросНастроекПроверкиКонтрагентов/Forms/Форма/Module.bsl +++ /dev/null @@ -1,27 +0,0 @@ -#Область ОбработчикиКомандФормы - -&НаКлиенте -Процедура СбросНастроек(Команда) - СбросНастроекНаСервере(); -КонецПроцедуры - - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -&НаСервереБезКонтекста -Процедура СбросНастроекНаСервере() - - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ПроверкаКонтрагентов", - "ПроверкаКонтрагентов_ДатаПоследнегоОтображенияПредложенияНаВключениеСервиса", ТекущаяДатаСеанса() - 60*60*6); - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ПроверкаКонтрагентов", - "ПроверкаКонтрагентов_БольшеНеПоказыватьПредложениеИспользоватьСервис", Неопределено); - УстановитьПривилегированныйРежим(Истина); - - ПроверкаКонтрагентов.ВключитьВыключитьПроверкуКонтрагентов(Ложь); - -КонецПроцедуры - -#КонецОбласти - diff --git a/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Module.bsl index a3a8a662c..d22dff0c1 100644 --- a/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/СдвигГраницыИтогов/Forms/ОсновнаяФорма/Module.bsl @@ -1,6 +1,3 @@ -&НаКлиенте -Перем ПеременныеКлиента; - #Область ОбработчикиСобытийФормы &НаСервере @@ -16,80 +13,59 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - ПеременныеКлиента = Новый Структура; - ПеременныеКлиента.Вставить("ВремяНачала", ОбщегоНазначенияКлиент.ДатаСеанса()); - ПодключитьОбработчикОжидания("УстановитьПериодРассчитанныхИтогов", 0.1, Истина); + ДлительнаяОперация = ДлительнаяОперацияЗапускСервер(УникальныйИдентификатор); + + НастройкиОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + НастройкиОжидания.ВыводитьОкноОжидания = Ложь; + + Обработчик = Новый ОписаниеОповещения("ДлительнаяОперацияЗавершениеКлиент", ЭтотОбъект); + + ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Обработчик, НастройкиОжидания); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции -&НаКлиенте -Процедура УстановитьПериодРассчитанныхИтогов() - ПараметрыЗадания = ФоновоеЗаданиеЗапустить(УникальныйИдентификатор); - ПеременныеКлиента.Вставить("ПараметрыЗадания", ПараметрыЗадания); - Если ПараметрыЗадания.ЗаданиеВыполнено Тогда - СообщитьРезультатЗакрытьФорму(); - Иначе - ПодключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте", ПараметрыЗадания.ТекущийИнтервал, Истина); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура СообщитьРезультатЗакрытьФорму() - СкоростьВыполненияВСекундах = ОбщегоНазначенияКлиент.ДатаСеанса() - ПеременныеКлиента.ВремяНачала; - Если СкоростьВыполненияВСекундах >= 5 Тогда - Закрыть(); - СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, ПеременныеКлиента.ПараметрыЗадания.Результат); - Иначе - ПодключитьОбработчикОжидания("СообщитьРезультатЗакрытьФорму", 5 - СкоростьВыполненияВСекундах, Истина); - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ФоновоеЗаданиеПроверитьНаКлиенте() - ФоновоеЗаданиеОбновитьНаСервере(ПеременныеКлиента.ПараметрыЗадания); - Если ПеременныеКлиента.ПараметрыЗадания.ЗаданиеВыполнено Тогда - СообщитьРезультатЗакрытьФорму(); - Иначе - ПодключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте", ПеременныеКлиента.ПараметрыЗадания.ТекущийИнтервал, Истина); - КонецЕсли; -КонецПроцедуры - &НаСервереБезКонтекста -Функция ФоновоеЗаданиеЗапустить(Знач УникальныйИдентификатор) - ПараметрыЗадания = Новый Структура("ЗаданиеВыполнено, ИдентификаторЗадания, АдресХранилища"); +Функция ДлительнаяОперацияЗапускСервер(УникальныйИдентификатор) + ИмяМетода = "Обработки.СдвигГраницыИтогов.ВыполнитьКоманду"; - Запуск = ДлительныеОперации.ЗапуститьВыполнениеВФоне( - УникальныйИдентификатор, - "Обработки.СдвигГраницыИтогов.ВыполнитьКоманду", - Новый Структура, - НСтр("ru = 'Итоги и агрегаты: Ускорение проведения документов и формирования отчетов'")); - ЗаполнитьЗначенияСвойств(ПараметрыЗадания, Запуск); + НастройкиЗапуска = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + НастройкиЗапуска.НаименованиеФоновогоЗадания = НСтр("ru = 'Итоги и агрегаты: Ускорение проведения документов и формирования отчетов'"); - Если ПараметрыЗадания.ЗаданиеВыполнено Тогда - ПараметрыЗадания.Вставить("Результат", ПолучитьИзВременногоХранилища(ПараметрыЗадания.АдресХранилища)); - Иначе - ПараметрыЗадания.Вставить("МинимальныйИнтервал", 1); - ПараметрыЗадания.Вставить("МаксимальныйИнтервал", 5); - ПараметрыЗадания.Вставить("ТекущийИнтервал", 1); - ПараметрыЗадания.Вставить("КоэффициентУвеличенияИнтервала", 1); - КонецЕсли; - - Возврат ПараметрыЗадания; + Возврат ДлительныеОперации.ВыполнитьВФоне(ИмяМетода, Неопределено, НастройкиЗапуска); КонецФункции +&НаКлиенте +Процедура ДлительнаяОперацияЗавершениеКлиент(Операция, ДополнительныеПараметры) Экспорт + Результат = ДлительнаяОперацияЗавершениеСервер(Операция); + Обработчик = Новый ОписаниеОповещения("ДлительнаяОперацияПослеВыводаРезультата", ЭтотОбъект, Результат); + СтандартныеПодсистемыКлиент.ВывестиПредупреждение(ЭтотОбъект, Результат, Обработчик); +КонецПроцедуры + &НаСервереБезКонтекста -Процедура ФоновоеЗаданиеОбновитьНаСервере(ПараметрыЗадания) - ПараметрыЗадания.ЗаданиеВыполнено = ДлительныеОперации.ЗаданиеВыполнено(ПараметрыЗадания.ИдентификаторЗадания); - Если ПараметрыЗадания.ЗаданиеВыполнено Тогда - ПараметрыЗадания.Вставить("Результат", ПолучитьИзВременногоХранилища(ПараметрыЗадания.АдресХранилища)); - Иначе - ПараметрыЗадания.ТекущийИнтервал = ПараметрыЗадания.ТекущийИнтервал * ПараметрыЗадания.КоэффициентУвеличенияИнтервала; - Если ПараметрыЗадания.ТекущийИнтервал > ПараметрыЗадания.МаксимальныйИнтервал Тогда - ПараметрыЗадания.ТекущийИнтервал = ПараметрыЗадания.МаксимальныйИнтервал; - КонецЕсли; +Функция ДлительнаяОперацияЗавершениеСервер(Операция) + Результат = Новый Структура("ЗакрытьФорму, ВывестиПредупреждение", Истина, Ложь); + Если Операция = Неопределено Тогда + Результат.Вставить("Текст", НСтр("ru = 'Задание отменено'")); + ИначеЕсли Операция.Статус = "Выполнено" Тогда + РезультатОперации = ПолучитьИзВременногоХранилища(Операция.АдресРезультата); + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Результат, РезультатОперации, Истина); + ИначеЕсли Операция.Статус = "Ошибка" Тогда + Результат.Вставить("Текст", Операция.КраткоеПредставлениеОшибки); + Результат.Вставить("Подробно", Операция.ПодробноеПредставлениеОшибки); + КонецЕсли; + Возврат Результат; +КонецФункции + +&НаКлиенте +Процедура ДлительнаяОперацияПослеВыводаРезультата(ПустойПараметр, Результат) Экспорт + Если ОписаниеОповещенияОЗакрытии <> Неопределено Тогда + ВыполнитьОбработкуОповещения(ОписаниеОповещенияОЗакрытии, Истина); // Обход особенности вызова из ПриОткрытии. + КонецЕсли; + Если Результат.ЗакрытьФорму И Открыта() Тогда + Закрыть(Истина); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/СдвигГраницыИтогов/ManagerModule.bsl b/SSL/src/DataProcessors/СдвигГраницыИтогов/ManagerModule.bsl index 78ea6d9d0..0a25911f8 100644 --- a/SSL/src/DataProcessors/СдвигГраницыИтогов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/СдвигГраницыИтогов/ManagerModule.bsl @@ -5,12 +5,12 @@ // Выполняет сдвиг границы итогов. Процедура ВыполнитьКоманду(ПараметрыКоманды, АдресХранилища) Экспорт УстановитьПривилегированныйРежим(Истина); - УправлениеИтогамиИАгрегатамиСлужебный.УстановитьПериодРассчитанныхИтогов(); + УправлениеИтогамиИАгрегатамиСлужебный.РассчитатьИтоги(); Результат = Новый Структура; СтандартныеПодсистемыКлиентСервер.ВывестиОповещение( Результат, - НСтр("ru = 'Оптимизация программы'"), - НСтр("ru = 'успешно завершена'"), + НСтр("ru = 'Оптимизация успешно завершена'"), + , БиблиотекаКартинок.Успешно32); ПоместитьВоВременноеХранилище(Результат, АдресХранилища); КонецПроцедуры diff --git a/SSL/src/DataProcessors/Сканирование/Forms/ВыборУстройстваСканирования/Help/ru.html b/SSL/src/DataProcessors/Сканирование/Forms/ВыборУстройстваСканирования/Help/ru.html index a68cfd1b1..f2b26e167 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/НастройкаСканирования/Help/ru.html b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Help/ru.html index 9292ceb7b..19d9b85c3 100644 --- a/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Help/ru.html +++ b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканирования/Help/ru.html @@ -1,8 +1,15 @@ - +

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

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

          Имя сканера

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

          Возможность преобразования в PDF

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

          Основное

          +

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

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

          Диалог сканера

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

          Возможность преобразования в PDF

          • Включите флажок, для того чтобы Использовать ImageMagick для преобразования в PDF. В этом случае отсканированные изображения можно преобразовать в формат PDF с помощью программы ImageMagick. На клиентском компьютере, к которому подключен сканер, должны быть установлены бесплатные программы ImageMagick (используйте вариант Win32 dynamic at 8 bits-per-pixel) и Ghostscript.
          • Укажите Путь к программе преобразования в PDF - путь к исполняемому файлу программы ImageMagick (по умолчанию "convert.exe"). Если это имя конфликтует с другими программами, с помощью кнопки Выбрать нужно указать полный путь вида "C:\Program Files\ImageMagick-6.6.3-Q8\convert.exe".

          Для одностраничных изображений

          • @@ -11,15 +18,7 @@
          • Сжатие - если выбран формат TIF, можно настроить сжатие. Возможные варианты: LZW, RLE, CCITT3, CCITT4, Без сжатия. По умолчанию: Без сжатия.
          • Тип (для сканирования) - позволяет выбрать один из поддерживаемых форматов (BMP, JPG, GIF, PNG, TIF) для изображений, которые будут получены со сканера. Опция доступна, если выбран формат одностраничного изображения PDF. В этом случае формат PDF используется для хранения.

        Для многостраничных изображений

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

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

        Параметры сканирования

        -

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

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

        Диалог сканера

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

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

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

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

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

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

        • Нажмите Открыть номера отсканированных файлов, для того чтобы просмотреть соответствующий список.
      diff --git a/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Help/ru.html b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Help/ru.html index 9be442a71..c0dca574f 100644 --- a/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Help/ru.html +++ b/SSL/src/DataProcessors/Сканирование/Forms/НастройкаСканированияНаСеанс/Help/ru.html @@ -1,18 +1,18 @@ - +

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

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

      -

      Для одностраничных изображений

      -
      • Формат - позволяет выбрать один из поддерживаемых форматов (BMP, JPG, GIF, PNG, TIF, PDF) для помещения в информационную базу. -
        • Тип сканированного изображения - позволяет выбрать один из поддерживаемых форматов (BMP, JPG, GIF, PNG, TIF) для изображений, которые будут получены со сканера. Опция доступна, если формат одностраничного изображения - PDF. -
        • Качество - если выбран формат JPG, то можно настроить его качество (100 - максимальное качество и максимальный размер,  1 - минимальное качество и минимальный размер.). По умолчанию - 100. -
        • Сжатие - если выбран формат TIF, можно настроить сжатие. Возможные варианты: LZW, RLE, CCITT3, CCITT4, Без сжатия. По умолчанию: Без сжатия.

      Для многостраничных изображений

      -

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

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

      Параметры сканирования

      +

      Основное

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

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

      Диалог сканера

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

      +
      • Формат - позволяет выбрать один из поддерживаемых форматов (BMP, JPG, GIF, PNG, TIF, PDF) для помещения в информационную базу. +
        • Тип сканированного изображения - позволяет выбрать один из поддерживаемых форматов (BMP, JPG, GIF, PNG, TIF) для изображений, которые будут получены со сканера. Опция доступна, если формат одностраничного изображения - PDF. +
        • Качество - если выбран формат JPG, то можно настроить его качество (100 - максимальное качество и максимальный размер,  1 - минимальное качество и минимальный размер.). По умолчанию - 100. +
        • Сжатие - если выбран формат TIF, можно настроить сжатие. Возможные варианты: LZW, RLE, CCITT3, CCITT4, Без сжатия. По умолчанию: Без сжатия.

      Для многостраничных изображений

      +

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

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

      Диалог сканера

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

      См. также:

      \ 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 95929f08c..b866962c9 100644 --- a/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Help/ru.html +++ b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Help/ru.html @@ -1,13 +1,13 @@ - +

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

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

      Работа с отсканированными изображениями

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

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

        См. также:

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

      См. также:

      \ No newline at end of file diff --git a/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl index 1859b73c4..c8edd1fc9 100644 --- a/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl +++ b/SSL/src/DataProcessors/Сканирование/Forms/РезультатСканирования/Module.bsl @@ -1,9 +1,13 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем НарастающийНомерИзображения; &НаКлиенте Перем ПозицияДляВставки; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -495,14 +499,16 @@ УдалитьВременныеФайлы(МассивФайловКопия); Если КоличествоОшибок > 0 Тогда - Результат = Новый Структура; + ПараметрыПредупреждения = Новый Структура("Текст, Подробно"); Если КоличествоОшибок = 1 Тогда - СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(Результат, ПолныйТекстВсехОшибок); + ПараметрыПредупреждения.Текст = ПолныйТекстВсехОшибок; Иначе - КраткийТекстВсехОшибок = СтрЗаменить(НСтр("ru = 'При выполнении возникли ошибки (%1).'"), "%1", Строка(КоличествоОшибок)); - СтандартныеПодсистемыКлиентСервер.ВывестиПредупреждение(Результат, КраткийТекстВсехОшибок, ПолныйТекстВсехОшибок); + ПараметрыПредупреждения.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При выполнении возникли ошибки (%1).'"), + Строка(КоличествоОшибок)); + ПараметрыПредупреждения.Подробно = ПолныйТекстВсехОшибок; КонецЕсли; - СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); + СтандартныеПодсистемыКлиент.ВывестиПредупреждение(ЭтотОбъект, ПараметрыПредупреждения); КонецЕсли; КонецПроцедуры @@ -854,7 +860,7 @@ КонецЕсли; ИначеЕсли Источник = "TWAIN" И Событие = "UserPressedCancel" Тогда - Если ЭтаФорма.Открыта() Тогда + Если ЭтотОбъект.Открыта() Тогда Закрыть(); КонецЕсли; КонецЕсли; diff --git a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/ВыборПравилОбработки/Form.form b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/ВыборПравилОбработки/Form.form new file mode 100644 index 000000000..e475401d4 --- /dev/null +++ b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/ВыборПравилОбработки/Form.form @@ -0,0 +1,981 @@ + + + + <key>ru</key> + <value>Правило обработки</value> + + + СтраницаПравилоОбработкиСтрок + 3 + + ПравилоСтрока + 5 + true + true + + true + + + ПравилоСтрока + + None + + ПравилоСтрокаРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + ПравилоСтрокаКонтекстноеМеню + 6 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + true + true + true + + + ru + Не изменять + + + НеИзменять + + + + + ru + Очистить + + + Очистить + + + + + ru + Случайное значение + + + СлучайноеЗначение + + + + + ru + Имя поля и индекс + + + ИмяПоляИндекс + + + + + ru + Имя объекта и индекс + + + ИмяОбъектаИндекс + + + Normal + + + true + true + + true + + + <key>ru</key> + <value>Строки</value> + + + СтраницаПравилоОбработкиСтрокРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + СтраницаПравилоОбработкиЧисла + 12 + + ПравилоЧисло + 14 + true + true + + true + + + ПравилоЧисло + + None + + OnChange + ПравилоЧислоПриИзменении + + + ПравилоЧислоРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + ПравилоЧислоКонтекстноеМеню + 15 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + true + true + true + + + ru + Не изменять + + + НеИзменять + + + + + ru + Очистить + + + Очистить + + + + + ru + Умножить + + + Умножить + + + + + ru + Разделить + + + Разделить + + + + + ru + Прибавить + + + Прибавить + + + + + ru + Вычесть + + + Вычесть + + + + + ru + Случайное значение + + + СлучайноеЗначение + + + Normal + + + + ЗначениеЧисла + 17 + true + false + + true + + + ЗначениеЧисла + + None + + ЗначениеЧислаРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + ЗначениеЧислаКонтекстноеМеню + 18 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Числа</value> + + + СтраницаПравилоОбработкиЧислаРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + UsualGroup + + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + СтраницаПравилоОбработкиБулево + 20 + + ПравилоБулево + 22 + true + true + + true + + + ПравилоБулево + + None + + ПравилоБулевоРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + ПравилоБулевоКонтекстноеМеню + 23 + true + + InputField + Enter + true + Left + true + + 25 + true + true + false + true + true + true + true + true + + + ru + Не изменять + + + НеИзменять + + + + + ru + Инвертировать + + + Инвертировать + + + Normal + + + true + true + + true + + + <key>ru</key> + <value>Булево</value> + + + СтраницаПравилоОбработкиБулевоРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + СтраницаПравилоОбработкиДаты + 30 + + ПравилоДата + 32 + true + true + + true + + + ПравилоДата + + None + + OnChange + ПравилоДатаПриИзменении + + + ПравилоДатаРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + ПравилоДатаКонтекстноеМеню + 33 + true + + InputField + Enter + true + Left + true + + 25 + true + true + false + true + true + true + true + true + + + ru + Не изменять + + + НеИзменять + + + + + ru + Прибавить (дней) + + + Прибавить + + + + + ru + Вычесть (дней) + + + Вычесть + + + + + ru + Случайное значение + + + СлучайноеЗначение + + + Normal + + + + ЗначениеДата + 35 + true + false + + true + + + ЗначениеДата + + None + + ЗначениеДатаРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + ЗначениеДатаКонтекстноеМеню + 36 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Даты</value> + + + СтраницаПравилоОбработкиДатыРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + UsualGroup + + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + СтраницаПравилаОбработкиХранилищаЗначений + 25 + + ПравилоХранилищеЗначений + 27 + true + true + + true + + + ПравилоХранилищеЗначений + + None + + ПравилоХранилищеЗначенийРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + ПравилоХранилищеЗначенийКонтекстноеМеню + 28 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + true + true + true + + + ru + Не изменять + + + НеИзменять + + + + + ru + Очистить + + + Очистить + + + Normal + + + true + true + + true + + + <key>ru</key> + <value>Хранилище значений</value> + + + СтраницаПравилаОбработкиХранилищаЗначенийРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаОК + 8 + true + true + + true + + + ФормаОКРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + Form.Command.ОК + Auto + true + true + true + UserCmds + Auto + + + ФормаОтмена + 10 + true + true + + true + + + ФормаОтменаРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + Form.Command.Отмена + Normal + Auto + true + true + UserCmds + Auto + + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + auto + true + + ПравилоСтрока + + <key>ru</key> + <value>Правило строка</value> + + 1 + + String + + + + true + + + true + + + + ПравилоЧисло + + <key>ru</key> + <value>Правило число</value> + + 2 + + String + + + + true + + + true + + + + ЗначениеЧисла + + <key>ru</key> + <value>Значение числа</value> + + 3 + + Number + + 10 + 1 + + + + true + + + true + + + + ПравилоБулево + + <key>ru</key> + <value>Правило булево</value> + + 4 + + String + + + + true + + + true + + + + ПравилоХранилищеЗначений + + <key>ru</key> + <value>Правило хранилище значений</value> + + 5 + + String + + + + true + + + true + + + + ПравилоДата + + <key>ru</key> + <value>Правило дата</value> + + 6 + + String + + + + true + + + true + + + + ЗначениеДата + + <key>ru</key> + <value>Значение дата</value> + + 7 + + Number + + 10 + true + + + + true + + + true + + + + ПравилаОбработки + + <key>ru</key> + <value>Правила обработки</value> + + 9 + + + true + + + true + + + + ОбщиеПравилаОбработки + + <key>ru</key> + <value>Общие правила обработки</value> + + 10 + + + true + + + true + + + + КоличествоТиповСвойства + + <key>ru</key> + <value>Количество типов свойства</value> + + 11 + + Number + + 10 + + + + true + + + true + + + + ОК + + <key>ru</key> + <value>ОК</value> + + 1 + + ru + ОК + + + true + + + + ОК + + + DontUse + Auto + + + Отмена + + <key>ru</key> + <value>Отмена</value> + + 2 + + ru + Отмена + + + true + + + + Отмена + + + DontUse + Auto + + + ТипЗначения + + TypeDescription + + + + ОбщиеПравилаОбработки + + + + + + + diff --git a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/ВыборПравилОбработки/Module.bsl b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/ВыборПравилОбработки/Module.bsl new file mode 100644 index 000000000..12ee63b30 --- /dev/null +++ b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/ВыборПравилОбработки/Module.bsl @@ -0,0 +1,263 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + УстановитьПравилаПоУмолчанию(); + + ТипЗначенияСвойства = Параметры.ТипЗначения; + МассивТипов = ТипЗначенияСвойства.Типы(); + КоличествоТиповСвойства = МассивТипов.Количество(); + + УстановитьКлючНазначенияФормы(МассивТипов); + + Элементы.СтраницаПравилоОбработкиСтрок.Видимость = (МассивТипов.Найти(Тип("Строка")) <> Неопределено); + Элементы.СтраницаПравилоОбработкиЧисла.Видимость = (МассивТипов.Найти(Тип("Число")) <> Неопределено); + Элементы.СтраницаПравилоОбработкиБулево.Видимость = (МассивТипов.Найти(Тип("Булево")) <> Неопределено); + Элементы.СтраницаПравилоОбработкиДаты.Видимость = (МассивТипов.Найти(Тип("Дата")) <> Неопределено); + Элементы.СтраницаПравилаОбработкиХранилищаЗначений.Видимость = (МассивТипов.Найти(Тип("ХранилищеЗначения")) <> Неопределено); + + Если КоличествоТиповСвойства = 1 Тогда + Если Элементы.СтраницаПравилоОбработкиСтрок.Видимость Тогда + Элементы.СтраницаПравилоОбработкиСтрок.ОтображатьЗаголовок = Ложь; + ИначеЕсли Элементы.СтраницаПравилоОбработкиЧисла.Видимость Тогда + Элементы.СтраницаПравилоОбработкиЧисла.ОтображатьЗаголовок = Ложь; + ИначеЕсли Элементы.СтраницаПравилоОбработкиБулево.Видимость Тогда + Элементы.СтраницаПравилоОбработкиБулево.ОтображатьЗаголовок = Ложь; + ИначеЕсли Элементы.СтраницаПравилоОбработкиДаты.Видимость Тогда + Элементы.СтраницаПравилоОбработкиДаты.ОтображатьЗаголовок = Ложь; + ИначеЕсли Элементы.СтраницаПравилаОбработкиХранилищаЗначений.Видимость Тогда + Элементы.СтраницаПравилаОбработкиХранилищаЗначений.ОтображатьЗаголовок = Ложь; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ОК(Команда) + Результат = ИндивидуальныеНастройкиОбработкиСвойства(); + + Если Результат.ПравилоОбработки.Количество() <> 0 Тогда + Оповестить("СкрытиеПерсональныхДанных_УстановленоПравилоОбработки", Результат); + КонецЕсли; + + Закрыть(); + +КонецПроцедуры + +&НаКлиенте +Процедура Отмена(Команда) + Закрыть(); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовФормы + +&НаКлиенте +Процедура ПравилоЧислоПриИзменении(Элемент) + Если ПравилоЧисло = "НеИзменять" + Или ПравилоЧисло = "Очистить" Тогда + Элементы.ЗначениеЧисла.Доступность = Ложь; + Иначе + Элементы.ЗначениеЧисла.Доступность = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПравилоДатаПриИзменении(Элемент) + Если ПравилоДата = "НеИзменять" + Или ПравилоДата = "СлучайноеЗначение" Тогда + Элементы.ЗначениеДата.Доступность = Ложь; + Иначе + Элементы.ЗначениеДата.Доступность = Истина; + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Функция ИндивидуальныеНастройкиОбработкиСвойства() + + Представление = ""; + ПравилоОбработки = Новый СписокЗначений; + + Если Элементы.СтраницаПравилоОбработкиСтрок.Видимость Тогда + ПравилоОбработки.Добавить("Строка", ПравилоСтрока); + + Если КоличествоТиповСвойства = 1 Тогда + Представление = Элементы.ПравилоСтрока.СписокВыбора.НайтиПоЗначению(ПравилоСтрока).Представление; + КонецЕсли; + КонецЕсли; + + Если Элементы.СтраницаПравилоОбработкиЧисла.Видимость Тогда + + Если ПравилоЧисло = "Умножить" Тогда + ПредставлениеЧисла = НСтр("ru = 'Умножить на %1'"); + ПредставлениеЧисла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПредставлениеЧисла, ЗначениеЧисла); + + ИтоговоеПравило = ПравилоЧисло + ";" + ЗначениеЧисла; + ИначеЕсли ПравилоЧисло = "Разделить" Тогда + ПредставлениеЧисла = НСтр("ru = 'Разделить на %1'"); + ПредставлениеЧисла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПредставлениеЧисла, ЗначениеЧисла); + + ИтоговоеПравило = ПравилоЧисло + ";" + ЗначениеЧисла; + ИначеЕсли ПравилоЧисло = "Прибавить" Тогда + ПредставлениеЧисла = НСтр("ru = 'Прибавить %1'"); + ПредставлениеЧисла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПредставлениеЧисла, ЗначениеЧисла); + + ИтоговоеПравило = ПравилоЧисло + ";" + ЗначениеЧисла; + ИначеЕсли ПравилоЧисло = "Вычесть" Тогда + ПредставлениеЧисла = НСтр("ru = 'Вычесть %1'"); + ПредставлениеЧисла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПредставлениеЧисла, ЗначениеЧисла); + + ИтоговоеПравило = ПравилоЧисло + ";" + ЗначениеЧисла; + ИначеЕсли ПравилоЧисло = "НеИзменять" Тогда + ПредставлениеЧисла = НСтр("ru = 'Не изменять'"); + ИтоговоеПравило = ПравилоЧисло; + ИначеЕсли ПравилоЧисло = "СлучайноеЗначение" Тогда + ПредставлениеЧисла = НСтр("ru = 'Случайное значение'"); + ИтоговоеПравило = ПравилоЧисло; + Иначе + ПредставлениеЧисла = НСтр("ru = 'Очистить'"); + ИтоговоеПравило = ПравилоЧисло; + КонецЕсли; + + ПравилоОбработки.Добавить("Число", ИтоговоеПравило); + + Если КоличествоТиповСвойства = 1 Тогда + Представление = ПредставлениеЧисла; + КонецЕсли; + КонецЕсли; + + Если Элементы.СтраницаПравилоОбработкиБулево.Видимость Тогда + ПравилоОбработки.Добавить("Булево", ПравилоБулево); + + Если КоличествоТиповСвойства = 1 Тогда + Представление = Элементы.ПравилоБулево.СписокВыбора.НайтиПоЗначению(ПравилоБулево).Представление; + КонецЕсли; + КонецЕсли; + + Если Элементы.СтраницаПравилоОбработкиДаты.Видимость Тогда + + Если ПравилоДата = "Прибавить" Тогда + ПредставлениеДаты = НСтр("ru = 'Прибавить дней: %1'"); + ПредставлениеДаты = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПредставлениеДаты, ЗначениеДата); + + ИтоговоеПравило = ПравилоДата + ";" + ЗначениеДата; + ИначеЕсли ПравилоДата = "Вычесть" Тогда + ПредставлениеДаты = НСтр("ru = 'Вычесть дней: %1'"); + ПредставлениеДаты = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПредставлениеДаты, ЗначениеДата); + + ИтоговоеПравило = ПравилоДата + ";" + ЗначениеДата; + ИначеЕсли ПравилоДата = "СлучайноеЗначение" Тогда + ПредставлениеДаты = НСтр("ru = 'Случайное значение'"); + ИтоговоеПравило = ПравилоДата; + Иначе + ПредставлениеДаты = НСтр("ru = 'Не изменять'"); + ИтоговоеПравило = ПравилоДата; + КонецЕсли; + + ПравилоОбработки.Добавить("Дата", ИтоговоеПравило); + Если КоличествоТиповСвойства = 1 Тогда + Представление = ПредставлениеДаты; + КонецЕсли; + КонецЕсли; + + Если Элементы.СтраницаПравилаОбработкиХранилищаЗначений.Видимость Тогда + ПравилоОбработки.Добавить("ХранилищеЗначения", ПравилоХранилищеЗначений); + + Если КоличествоТиповСвойства = 1 Тогда + Представление = Элементы.ПравилоХранилищеЗначений.СписокВыбора.НайтиПоЗначению(ПравилоХранилищеЗначений).Представление; + КонецЕсли; + КонецЕсли; + + Если Представление = "" Тогда + Представление = НСтр("ru = 'Индивидуальные настройки'"); + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("Представление", Представление); + Результат.Вставить("ПравилоОбработки", ПравилоОбработки); + + Возврат Результат; + +КонецФункции + +&НаСервере +Процедура УстановитьПравилаПоУмолчанию() + + ОбщиеПравилаОбработки = Параметры.ОбщиеПравилаОбработки; + + Если ТипЗнч(ОбщиеПравилаОбработки) = Тип("СписокЗначений") Тогда + Для Каждого Правило Из ОбщиеПравилаОбработки Цикл + Если Правило.Значение = "Строка" Тогда + ПравилоСтрока = Правило.Представление; + ИначеЕсли Правило.Значение = "Число" Тогда + УстановитьПравилаЧиселИДат(Правило.Представление, "Число"); + ИначеЕсли Правило.Значение = "Булево" Тогда + ПравилоБулево = Правило.Представление; + ИначеЕсли Правило.Значение = "Дата" Тогда + УстановитьПравилаЧиселИДат(Правило.Представление, "Дата"); + ИначеЕсли Правило.Значение = "ХранилищеЗначений" Тогда + ПравилоХранилищеЗначений = Правило.Представление; + КонецЕсли; + КонецЦикла; + Иначе + ПравилоБулево = ОбщиеПравилаОбработки.ПравилоБулево; + УстановитьПравилаЧиселИДат(ОбщиеПравилаОбработки.ПравилоДата, "Дата"); + УстановитьПравилаЧиселИДат(ОбщиеПравилаОбработки.ПравилоЧисло, "Число"); + ПравилоСтрока = ОбщиеПравилаОбработки.ПравилоСтрока; + ПравилоХранилищеЗначений = ОбщиеПравилаОбработки.ПравилоХранилищеЗначений; + КонецЕсли; + + Элементы.ЗначениеДата.Доступность = Не (ПравилоДата = "НеИзменять"); + Элементы.ЗначениеЧисла.Доступность = Не ((ПравилоЧисло = "НеИзменять") Или (ПравилоЧисло = "Очистить") Или (ПравилоЧисло = "СлучайноеЗначение")); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьПравилаЧиселИДат(Правило, Тип) + + ПравилоМассив = СтрРазделить(Правило, ";"); + Если ПравилоМассив.Количество() = 1 Тогда + Если Тип = "Число" Тогда + ПравилоЧисло = Правило; + Иначе + ПравилоДата = Правило; + КонецЕсли; + Иначе + Если Тип = "Число" Тогда + ПравилоЧисло = ПравилоМассив[0]; + ЗначениеЧисла = ПравилоМассив[1]; + Иначе + ПравилоДата = ПравилоМассив[0]; + ЗначениеДата = ПравилоМассив[1]; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьКлючНазначенияФормы(МассивТипов) + + КлючФормы = ""; + Для Каждого Тип Из МассивТипов Цикл + КлючФормы = КлючФормы + Строка(Тип); + КонецЦикла; + КлючНазначенияИспользования = КлючФормы; + КлючСохраненияПоложенияОкна = КлючФормы; + +КонецПроцедуры + +#КонецОбласти \ 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..0a44ae6d2 --- /dev/null +++ b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Form.form @@ -0,0 +1,2597 @@ + + + + СтраницыВидФормы + 116 + + СтраницаЧастотныеВозможности + 118 + + Группа + 127 + + ВыполнитьСкрытие + 125 + + <key>ru</key> + <value>Выполнить</value> + + true + true + + true + + + ВыполнитьСкрытиеРасширеннаяПодсказка + 126 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыполнитьСкрытие + Normal + 15 + true + 1 + true + UserCmds + Auto + + + ДекорацияПояснение + 122 + + <key>ru</key> + <value>Подготовка информационной базы для передачи в техническую поддержку.</value> + + true + true + + true + + + ДекорацияПояснениеРасширеннаяПодсказка + 124 + Label + true + true + + Left + + + + ДекорацияПояснениеКонтекстноеМеню + 123 + true + + Label + true + 1 + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа</value> + + + ru + Группа + + + ГруппаРасширеннаяПодсказка + 128 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Пояснение + 136 + + <key>ru</key> + <value> +Скрытие конфиденциальной информации будет выполнено для всех данных информационной базы. +Запуск необходимо производить на копии рабочей базы, т.к. это приведет +к безвозвратной потере данных. + +Реквизиты, содержащие даты, строки или числа, будут заполнены произвольными значениями. + +Для пореквизитной настройки списка обрабатываемых реквизитов необходимо перейти +по гиперссылке "Полные возможности" внизу.</value> + + true + true + + true + + + ПояснениеРасширеннаяПодсказка + 138 + Label + true + true + + Left + + + + ПояснениеКонтекстноеМеню + 137 + true + + Label + true + true + + Left + + + true + true + + true + + + СтраницаЧастотныеВозможностиРасширеннаяПодсказка + 119 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтраницаДлительнаяОперация + 139 + + ДекорацияКартинка + 141 + true + true + + true + + + ДекорацияКартинкаРасширеннаяПодсказка + 143 + Label + true + true + + Left + + + + ДекорацияКартинкаКонтекстноеМеню + 142 + true + + true + true + + + CommonPicture.ДлительнаяОперация48 + + + + + ДлительнаяОперацияПояснение + 144 + + <key>ru</key> + <value>Пожалуйста, подождите...</value> + + true + true + + true + + + ДлительнаяОперацияПояснениеРасширеннаяПодсказка + 146 + Label + true + true + + Left + + + + ДлительнаяОперацияПояснениеКонтекстноеМеню + 145 + true + + Label + true + 5 + true + + Left + + + true + true + + true + + + СтраницаДлительнаяОперацияРасширеннаяПодсказка + 140 + Label + true + true + + Left + + + Page + + auto + false + + + + СтраницаРасширенныеВозможности + 120 + + КоманднаяПанель + 110 + + ФормаВыполнитьСкрытие + 39 + true + true + + true + + + ФормаВыполнитьСкрытиеРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + Form.Command.ВыполнитьСкрытие + Auto + true + true + true + UserCmds + Auto + + + ФормаЗагрузитьНастройки + 41 + true + true + + true + + + ФормаЗагрузитьНастройкиРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + Form.Command.ЗагрузитьНастройки + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСохранитьНастройки + 43 + true + true + + true + + + ФормаСохранитьНастройкиРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + Form.Command.СохранитьНастройки + Normal + Auto + true + true + UserCmds + Auto + + + ОбрабатываемыеОбъектыОтметитьВсе + 47 + true + true + + true + + + ОбрабатываемыеОбъектыОтметитьВсеРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + Form.Command.ОтметитьВсе + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ОбрабатываемыеОбъектыСнятьОтметку + 45 + true + true + + true + + + ОбрабатываемыеОбъектыСнятьОтметкуРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + Form.Command.СнятьОтметку + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ОбрабатываемыеОбъектыЗаполнитьПоСведениямОПерсональныхДанных + 49 + true + true + + true + + + ОбрабатываемыеОбъектыЗаполнитьПоСведениямОПерсональныхДанныхРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + Form.Command.ЗаполнитьПоУмолчанию + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ИзменитьФорму + 112 + true + true + + true + + + ИзменитьФормуРасширеннаяПодсказка + 113 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + + Справка + 114 + true + true + + true + + + СправкаРасширеннаяПодсказка + 115 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + ru + Командная панель + + + КоманднаяПанельРасширеннаяПодсказка + 111 + Label + true + true + + Left + + + CommandBar + + Left + + + + Страницы + 1 + + СтраницаОбрабатываемыеОбъекты + 3 + + ОбрабатываемыеОбъекты + 7 + true + true + + true + + + ОбрабатываемыеОбъекты + + None + + ГруппаОбрабатываемыеОбъекты + 35 + + ОбрабатываемыеОбъектыПометка + 32 + true + true + + true + + + ОбрабатываемыеОбъекты.Пометка + + None + + OnChange + ОбрабатываемыеОбъектыПометкаПриИзменении + + + ОбрабатываемыеОбъектыПометкаРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + ОбрабатываемыеОбъектыПометкаКонтекстноеМеню + 33 + true + + CheckBoxField + Auto + Left + true + + true + + + + ОбрабатываемыеОбъектыКартинка + 20 + true + true + + true + + + ОбрабатываемыеОбъекты.Картинка + + None + + ОбрабатываемыеОбъектыКартинкаРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + ОбрабатываемыеОбъектыКартинкаКонтекстноеМеню + 21 + true + + PictureField + Auto + Left + true + + true + true + true + true + + + 1 + + + + + ОбрабатываемыеОбъектыПредставление + 26 + true + true + + true + + + ОбрабатываемыеОбъекты.Представление + + None + + ОбрабатываемыеОбъектыПредставлениеРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + ОбрабатываемыеОбъектыПредставлениеКонтекстноеМеню + 27 + true + + LabelField + Auto + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Объект</value> + + + ГруппаОбрабатываемыеОбъектыРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + true + + + + ГруппаПравилоОбработки + 37 + + ОбрабатываемыеОбъектыПравилоОбработки + 29 + true + true + + true + + + ОбрабатываемыеОбъекты.ПредставлениеПравилаОбработки + + None + + ОбрабатываемыеОбъектыПравилоОбработкиРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + ОбрабатываемыеОбъектыПравилоОбработкиКонтекстноеМеню + 30 + true + + InputField + Auto + Left + true + + + StartChoice + ОбрабатываемыеОбъектыПравилоОбработкиНачалоВыбора + + 15 + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Правило обработки</value> + + + ГруппаПравилоОбработкиРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + true + + + + ОбрабатываемыеОбъектыКоманднаяПанель + 9 + Left + + + ОбрабатываемыеОбъектыСтрокаПоиска + 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 + + + + ОбрабатываемыеОбъектыКонтекстноеМеню + 8 + true + + Tree + true + true + true + MultiRow + Row +
      true
      + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + true + true + true + true + None + None + None + true +
      + true + true + + true + + + <key>ru</key> + <value>Обрабатываемые объекты</value> + + + СтраницаОбрабатываемыеОбъектыРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + Page + + Vertical + auto + false + +
      + + СтраницаПравилаОбработки + 5 + + ГруппаЧисла + 66 + + ПравилоЧисло + 51 + + <key>ru</key> + <value>Числа</value> + + true + true + + true + + + ПредставлениеПравилаЧисло + + None + + OnChange + ПравилоЧислоПриИзменении + + + ПравилоЧислоРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + + ПравилоЧислоКонтекстноеМеню + 52 + true + + InputField + Enter + true + Left + true + + 25 + true + true + false + true + true + true + true + true + + + ru + Не изменять + + + НеИзменять + + + + + ru + Очистить + + + Очистить + + + + + ru + Умножить + + + Умножить + + + + + ru + Разделить + + + Разделить + + + + + ru + Прибавить + + + Прибавить + + + + + ru + Вычесть + + + Вычесть + + + + + ru + Случайное значение + + + СлучайноеЗначение + + + Normal + + + + ГруппаЗначения + 78 + + СтраницыЗначения + 68 + + ПустаяСтраница + 70 + + ПустаяДекорация + 72 + true + true + + true + + + ПустаяДекорацияРасширеннаяПодсказка + 74 + Label + true + true + + Left + + + + ПустаяДекорацияКонтекстноеМеню + 73 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Пустая страница</value> + + + ПустаяСтраницаРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + ЗначениеЧисла + 80 + + ЗначениеЧисло + 82 + true + true + + true + + + ЗначениеЧисло + + None + + OnChange + ЗначениеЧислоПриИзменении + + + ЗначениеЧислоРасширеннаяПодсказка + 84 + Label + true + true + + Left + + + + ЗначениеЧислоКонтекстноеМеню + 83 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Значение числа</value> + + + ЗначениеЧислаРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + Page + + Vertical + false + + + true + true + + true + + + <key>ru</key> + <value>Страницы значения</value> + + false + + СтраницыЗначенияРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа значения</value> + + + ГруппаЗначенияРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Числа</value> + + + ГруппаЧислаРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + auto + Auto + Auto + + + + ГруппаСтроки + 104 + + ПравилоСтрока + 54 + + <key>ru</key> + <value>Строки</value> + + true + true + + true + + + Объект.ПравилоСтрока + + None + + ПравилоСтрокаРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + + ПравилоСтрокаКонтекстноеМеню + 55 + true + + InputField + Enter + true + Left + true + + 25 + true + true + false + true + true + true + true + true + + + ru + Не изменять + + + НеИзменять + + + + + ru + Очистить + + + Очистить + + + + + ru + Случайное значение + + + СлучайноеЗначение + + + + + ru + Имя поля и индекс + + + ИмяПоляИндекс + + + + + ru + Имя объекта и индекс + + + ИмяОбъектаИндекс + + + Normal + + + true + true + + true + + + <key>ru</key> + <value>Строки</value> + + + ГруппаСтрокиРасширеннаяПодсказка + 105 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + auto + Auto + Auto + + + + ГруппаБулево + 106 + + ПравилоБулево + 57 + + <key>ru</key> + <value>Булево</value> + + true + true + + true + + + Объект.ПравилоБулево + + None + + ПравилоБулевоРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + + ПравилоБулевоКонтекстноеМеню + 58 + true + + InputField + Enter + true + Left + true + + 25 + true + true + false + true + true + true + true + true + + + ru + Не изменять + + + НеИзменять + + + + + ru + Инвертировать + + + Инвертировать + + + Normal + + + true + true + + true + + + <key>ru</key> + <value>Булево</value> + + + ГруппаБулевоРасширеннаяПодсказка + 107 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + auto + Auto + Auto + + + + ГруппаХранилищеЗначений + 108 + + ПравилоХранилищеЗначений + 63 + + <key>ru</key> + <value>Хранилища значений</value> + + true + true + + true + + + Объект.ПравилоХранилищеЗначений + + None + + ПравилоХранилищеЗначенийРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + + ПравилоХранилищеЗначенийКонтекстноеМеню + 64 + true + + InputField + Enter + true + Left + true + + 25 + true + true + false + true + true + true + true + true + + + ru + Не изменять + + + НеИзменять + + + + + ru + Очистить + + + Очистить + + + Normal + + + true + true + + true + + + <key>ru</key> + <value>Хранилища значений</value> + + + ГруппаХранилищеЗначенийРасширеннаяПодсказка + 109 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + auto + Auto + Auto + + + + ГруппаДата + 85 + + ПравилоДата + 60 + + <key>ru</key> + <value>Дата</value> + + true + true + + true + + + ПредставлениеПравилаДата + + None + + OnChange + ПравилоДатаПриИзменении + + + ПравилоДатаРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + + ПравилоДатаКонтекстноеМеню + 61 + true + + InputField + Enter + true + Left + true + + 25 + true + true + false + true + true + true + true + true + + + ru + Не изменять + + + НеИзменять + + + + + ru + Прибавить (дней) + + + Прибавить + + + + + ru + Вычесть (дней) + + + Вычесть + + + + + ru + Случайное значение + + + СлучайноеЗначение + + + + + ru + Очистить + + + Очистить + + + Normal + + + + ГруппаЗначенияДаты + 87 + + СтраницыЗначенияДаты + 92 + + ПустаяСтраницаДата + 94 + + ПустаяДекорацияДата + 98 + true + true + + true + + + ПустаяДекорацияДатаРасширеннаяПодсказка + 100 + Label + true + true + + Left + + + + ПустаяДекорацияДатаКонтекстноеМеню + 99 + true + + Label + true + true + + Left + + + true + true + + true + + + ПустаяСтраницаДатаРасширеннаяПодсказка + 95 + Label + true + true + + Left + + + Page + + Vertical + false + + + + СтраницаЗначенияДата + 96 + + ЗначениеДата + 101 + true + true + + true + + + ЗначениеДата + + None + + OnChange + ЗначениеДатаПриИзменении + + + ЗначениеДатаРасширеннаяПодсказка + 103 + Label + true + true + + Left + + + + ЗначениеДатаКонтекстноеМеню + 102 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + СтраницаЗначенияДатаРасширеннаяПодсказка + 97 + Label + true + true + + Left + + + Page + + Vertical + false + + + true + true + + true + + + СтраницыЗначенияДатыРасширеннаяПодсказка + 93 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + ГруппаЗначенияДатыРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Даты</value> + + false + + ГруппаДатаРасширеннаяПодсказка + 86 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Правила обработки</value> + + + СтраницаПравилаОбработкиРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Страницы</value> + + + СтраницыРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + Pages + + TabsOnTop + Auto + +
      + true + true + + true + + + СтраницаРасширенныеВозможностиРасширеннаяПодсказка + 121 + Label + true + true + + Left + + + Page + + Vertical + auto + false + +
      + true + true + + true + + + <key>ru</key> + <value>Страницы вид формы</value> + + + СтраницыВидФормыРасширеннаяПодсказка + 117 + Label + true + true + + Left + + + Pages + + Auto + +
      + + ГруппаИзменениеРежима + 134 + + РасширенныеВозможности + 131 + + <key>ru</key> + <value>Полные возможности</value> + + true + true + + true + + + РасширенныеВозможностиРасширеннаяПодсказка + 133 + Label + true + true + + Left + + + + РасширенныеВозможностиКонтекстноеМеню + 132 + true + + Label + true + true + true + + + Click + РасширенныеВозможностиНажатие + + true + Right + + + true + true + + true + + + ГруппаИзменениеРежимаРасширеннаяПодсказка + 135 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + Left + + + NotificationProcessing + ОбработкаОповещения + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + + OnClose + ПриЗакрытии + + LockOwner + true + true + Vertical + true + true + true + auto + true + + Объект + 1 + + DataProcessorObject.СкрытиеКонфиденциальнойИнформации + + + true + + + true + +
      true
      +
      + + ОбрабатываемыеОбъекты + + <key>ru</key> + <value>Обрабатываемые объекты</value> + + 2 + + ValueTree + + + true + + + true + + + Картинка + + <key>ru</key> + <value>Картинка</value> + + 1 + + Picture + + + 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 + + Number + + + + true + + + true + + + + Тип + + <key>ru</key> + <value>Тип</value> + + 6 + + String + + + + true + + + true + + + + ТипЗначения + + <key>ru</key> + <value>Тип значения</value> + + 7 + + TypeDescription + + + true + + + true + + + + ПолноеИмя + + <key>ru</key> + <value>Полное имя</value> + + 8 + + String + + + + true + + + true + + + + ПравилоОбработки + + <key>ru</key> + <value>Правило обработки</value> + + 9 + + ValueList + + + true + + + true + + + + + ПредставлениеПравилаЧисло + + <key>ru</key> + <value>Представление правила строка</value> + + 4 + + String + + + + true + + + true + + + + ПредставлениеПравилаДата + + <key>ru</key> + <value>Представление правила строка</value> + + 6 + + String + + + + true + + + true + + + + ЗначениеЧисло + 9 + + Number + + true + + + + true + + + true + + + + ЗначениеДата + 10 + + Number + + true + + + + true + + + true + + + + АдресХранилища + + <key>ru</key> + <value>Адрес хранилища</value> + + 11 + + String + + + + true + + + true + + + + ИдентификаторЗадания + + <key>ru</key> + <value>Идентификатор задания</value> + + 12 + + + true + + + true + + + + ПараметрыОбработчикаОжидания + + <key>ru</key> + <value>Параметры обработчика ожидания</value> + + 13 + + + true + + + true + + + + ДеревоМетаданныхЗаполнено + + <key>ru</key> + <value>Дерево метаданных заполнено</value> + + 14 + + Boolean + + + true + + + true + + + + АдресХранилищаВторой + + <key>ru</key> + <value>Адрес хранилища второй</value> + + 15 + + String + + + + true + + + true + + + + ИдентификаторЗаданияВторой + + <key>ru</key> + <value>Идентификатор задания второй</value> + + 16 + + + true + + + true + + + + МакетОпределен + + <key>ru</key> + <value>Макет определен</value> + + 17 + + Boolean + + + true + + + true + + + + ВыполнитьСкрытие + + <key>ru</key> + <value>Выполнить</value> + + 1 + + ru + Выполнить + + + true + + + StdPicture.GenerateReport + + + + ВыполнитьСкрытие + + + TextPicture + DontUse + Auto + + + СохранитьНастройки + + <key>ru</key> + <value>Сохранить настройки</value> + + 2 + + ru + Сохранить настройки + + + true + + + StdPicture.SaveFile + + + + СохранитьНастройки + + + DontUse + Auto + + + ЗагрузитьНастройки + + <key>ru</key> + <value>Загрузить настройки</value> + + 3 + + ru + Загрузить настройки + + + true + + + StdPicture.OpenFile + + + + ЗагрузитьНастройки + + + DontUse + Auto + + + ОтметитьВсе + + <key>ru</key> + <value>Отметить все</value> + + 4 + + ru + Отметить все + + + true + + + StdPicture.CheckAll + + + + ОтметитьВсе + + + DontUse + Auto + + + СнятьОтметку + + <key>ru</key> + <value>Снять отметку</value> + + 5 + + ru + Снять отметку + + + true + + + StdPicture.UncheckAll + + + + СнятьОтметку + + + DontUse + Auto + + + ЗаполнитьПоУмолчанию + + <key>ru</key> + <value>Заполнить по умолчанию</value> + + 6 + + ru + Заполнить по умолчанию + + + true + + + + ЗаполнитьПоУмолчанию + + + DontUse + Auto + + + + + + +
      diff --git a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Module.bsl new file mode 100644 index 000000000..a56f038b3 --- /dev/null +++ b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Forms/Форма/Module.bsl @@ -0,0 +1,793 @@ +#Область ОписаниеПеременных + +&НаКлиенте +Перем ФормаДлительнойОперации; + +#КонецОбласти + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + СохраненныеНастройки = СохраненныеНастройки(ОбработкаОбъект); + + Заголовок = НСтр("ru = 'Скрытие конфиденциальной информации'"); + + ЗаполнитьДеревоОбрабатываемыхОбъектов(СохраненныеНастройки, ОбработкаОбъект); + + ЗаполнитьПравилаОбработки(ОбработкаОбъект); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ИмяСобытия = "СкрытиеПерсональныхДанных_УстановленоПравилоОбработки" Тогда + ИдентификаторТекущейСтроки = Элементы.ОбрабатываемыеОбъекты.ТекущаяСтрока; + ТекущаяСтрока = ОбрабатываемыеОбъекты.НайтиПоИдентификатору(ИдентификаторТекущейСтроки); + ТекущаяСтрока.ПредставлениеПравилаОбработки = Параметр.Представление; + ТекущаяСтрока.ПравилоОбработки = Параметр.ПравилоОбработки; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Если Не МакетОпределен Тогда + Элементы.ГруппаИзменениеРежима.Видимость = Ложь; + РасширенныеВозможностиНажатие(Неопределено); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии() + ПриЗакрытииНаСервере(); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийТаблицыФормыОбрабатываемыеОбъекты + +&НаКлиенте +Процедура ОбрабатываемыеОбъектыПравилоОбработкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ВыбраннаяСтрока = Элементы.ОбрабатываемыеОбъекты.ТекущиеДанные; + + Если ВыбраннаяСтрока = Неопределено Или Не ЗначениеЗаполнено(ВыбраннаяСтрока.ТипЗначения) Тогда + Возврат; + КонецЕсли; + + Если ВыбраннаяСтрока.ПравилоОбработки.Количество() > 0 Тогда + ОбщиеПравилаОбработки = ВыбраннаяСтрока.ПравилоОбработки; + Иначе + ОбщиеПравилаОбработки = Новый Структура; + ОбщиеПравилаОбработки.Вставить("ПравилоСтрока", Объект.ПравилоСтрока); + Если ПредставлениеПравилаЧисло = "НеИзменять" + Или ПредставлениеПравилаЧисло = "Очистить" Тогда + ПравилоЧисло = ПредставлениеПравилаЧисло; + Иначе + ПравилоЧисло = ПредставлениеПравилаЧисло + ";" + ЗначениеЧисло; + КонецЕсли; + ОбщиеПравилаОбработки.Вставить("ПравилоЧисло", ПравилоЧисло); + ОбщиеПравилаОбработки.Вставить("ПравилоБулево", Объект.ПравилоБулево); + Если ПредставлениеПравилаДата = "НеИзменять" + Или ПредставлениеПравилаДата = "Очистить" Тогда + ПравилоДата = ПредставлениеПравилаДата; + Иначе + ПравилоДата = ПредставлениеПравилаДата + ";" + ЗначениеДата; + КонецЕсли; + ОбщиеПравилаОбработки.Вставить("ПравилоДата", ПравилоДата); + ОбщиеПравилаОбработки.Вставить("ПравилоХранилищеЗначений", Объект.ПравилоХранилищеЗначений); + КонецЕсли; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ТипЗначения", ВыбраннаяСтрока.ТипЗначения); + ПараметрыФормы.Вставить("ОбщиеПравилаОбработки", ОбщиеПравилаОбработки); + + ОткрытьФорму(ПолноеИмяФормы("ВыборПравилОбработки"), ПараметрыФормы); +КонецПроцедуры + +&НаКлиенте +Процедура ОбрабатываемыеОбъектыПометкаПриИзменении(Элемент) + + ТекущиеДанные = Элементы.ОбрабатываемыеОбъекты.ТекущиеДанные; + ИдентификаторСтроки = Элементы.ОбрабатываемыеОбъекты.ТекущаяСтрока; + ТекущаяСтрока = ОбрабатываемыеОбъекты.НайтиПоИдентификатору(ИдентификаторСтроки); + + ЗначениеПометки = ?(ТекущиеДанные.Пометка = 2, 0, ТекущиеДанные.Пометка); + ТекущиеДанные.Пометка = ЗначениеПометки; + + ИзменитьДочерниеЭлементы(ТекущаяСтрока.ПолучитьЭлементы(), ЗначениеПометки); + ИзменитьРодительскиеЭлементы(ТекущаяСтрока); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовФормы + +&НаКлиенте +Процедура ПравилоЧислоПриИзменении(Элемент) + Если ПредставлениеПравилаЧисло = "Умножить" + Или ПредставлениеПравилаЧисло = "Разделить" + Или ПредставлениеПравилаЧисло = "Прибавить" + Или ПредставлениеПравилаЧисло = "Вычесть" Тогда + Элементы.СтраницыЗначения.ТекущаяСтраница = Элементы.ЗначениеЧисла; + Иначе + Элементы.СтраницыЗначения.ТекущаяСтраница = Элементы.ПустаяСтраница; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПравилоДатаПриИзменении(Элемент) + Если ПредставлениеПравилаДата = "НеИзменять" Тогда + Элементы.СтраницыЗначенияДаты.ТекущаяСтраница = Элементы.ПустаяСтраницаДата; + Иначе + Элементы.СтраницыЗначенияДаты.ТекущаяСтраница = Элементы.СтраницаЗначенияДата; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура РасширенныеВозможностиНажатие(Элемент) + + МодульДлительныеОперацииКлиент = ОбщийМодуль("ДлительныеОперацииКлиент"); + Если ДеревоМетаданныхЗаполнено Тогда + Если Элементы.СтраницыВидФормы.ТекущаяСтраница = Элементы.СтраницаЧастотныеВозможности Тогда + Элементы.СтраницыВидФормы.ТекущаяСтраница = Элементы.СтраницаРасширенныеВозможности; + Если МакетОпределен Тогда + Заголовок = НСтр("ru = 'Скрытие конфиденциальной информации - полные возможности'"); + КонецЕсли; + Элементы.РасширенныеВозможности.Заголовок = НСтр("ru = 'Обычный вид'"); + Иначе + Элементы.СтраницыВидФормы.ТекущаяСтраница = Элементы.СтраницаЧастотныеВозможности; + Заголовок = НСтр("ru = 'Скрытие конфиденциальной информации'"); + Элементы.РасширенныеВозможности.Заголовок = НСтр("ru = 'Полные возможности'"); + КонецЕсли; + Иначе + Если ДеревоМетаданныхЗаполнено() Тогда + Элементы.СтраницыВидФормы.ТекущаяСтраница = Элементы.СтраницаРасширенныеВозможности; + Элементы.РасширенныеВозможности.Доступность = Истина; + Если МакетОпределен Тогда + Заголовок = НСтр("ru = 'Скрытие конфиденциальной информации - полные возможности'"); + КонецЕсли; + Элементы.РасширенныеВозможности.Заголовок = НСтр("ru = 'Обычный вид'"); + Иначе + Элементы.СтраницыВидФормы.ТекущаяСтраница = Элементы.СтраницаДлительнаяОперация; + Элементы.РасширенныеВозможности.Доступность = Ложь; + МодульДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", ПараметрыОбработчикаОжидания.ТекущийИнтервал, Истина); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗначениеЧислоПриИзменении(Элемент) + Если ЗначениеЧисло = 0 Тогда + ТекстПредупреждения = НСтр("ru = 'Значение должно быть не нулевым.'"); + ПоказатьПредупреждение(, ТекстПредупреждения); + ЗначениеЧисло = 1; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ЗначениеДатаПриИзменении(Элемент) + Если ЗначениеДата = 0 Тогда + ТекстПредупреждения = НСтр("ru = 'Значение должно быть не нулевым.'"); + ПоказатьПредупреждение(, ТекстПредупреждения); + ЗначениеДата = 1; + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ОтметитьВсе(Команда) + Для Каждого ДочернийЭлемент Из ОбрабатываемыеОбъекты.ПолучитьЭлементы() Цикл + ДочернийЭлемент.Пометка = 1; + ИзменитьДочерниеЭлементы(ДочернийЭлемент.ПолучитьЭлементы(), 1); + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура СнятьОтметку(Команда) + Для Каждого ДочернийЭлемент Из ОбрабатываемыеОбъекты.ПолучитьЭлементы() Цикл + ДочернийЭлемент.Пометка = 0; + ИзменитьДочерниеЭлементы(ДочернийЭлемент.ПолучитьЭлементы(), 0); + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьСкрытие(Команда) + + ТекстПредупреждения = НСтр("ru = 'Скрытие конфиденциальной информации необходимо выполнять на копии рабочей базы, + |все изменения будут выполнены безвозвратно. + |Продолжить?'"); + + ОбработкаОповещения = Новый ОписаниеОповещения("ВыполнитьСкрытиеПродолжение", ЭтотОбъект); + ПоказатьВопрос(ОбработкаОповещения, ТекстПредупреждения, РежимДиалогаВопрос.ДаНет) + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьСкрытиеПродолжение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = КодВозвратаДиалога.Да Тогда + ПодключитьОбработчикОжидания("Подключаемый_ВыполнитьСкрытиеЗавершение", 1); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ВыполнитьСкрытиеЗавершение() + + МодульДлительныеОперацииКлиент = ОбщийМодуль("ДлительныеОперацииКлиент"); + Если МодульДлительныеОперацииКлиент = Неопределено Тогда + СкрытиеКонфиденциальнойИнформации(); + Возврат; + КонецЕсли; + + Если ДеревоМетаданныхЗаполнено + Или ЗаданиеВыполнено(ИдентификаторЗадания) Тогда + ОтключитьОбработчикОжидания("Подключаемый_ВыполнитьСкрытиеЗавершение"); + Иначе + Если ФормаДлительнойОперации = Неопределено Тогда + ФормаДлительнойОперации = МодульДлительныеОперацииКлиент.ОткрытьФормуДлительнойОперации(ЭтотОбъект, ИдентификаторЗадания); + КонецЕсли; + Возврат; + КонецЕсли; + + РезультатЗапуска = СкрытиеКонфиденциальнойИнформации(); + + Если РезультатЗапуска.Статус <> "Выполнено" Тогда + МодульДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания("Подключаемый_ПроверитьСкрытиеКонфиденциальнойИнформации", + ПараметрыОбработчикаОжидания.ТекущийИнтервал, Истина); + Если ФормаДлительнойОперации <> Неопределено Тогда + ФормаДлительнойОперации.ИдентификаторЗадания = ИдентификаторЗаданияВторой; + Иначе + ФормаДлительнойОперации = МодульДлительныеОперацииКлиент.ОткрытьФормуДлительнойОперации(ЭтотОбъект, ИдентификаторЗаданияВторой); + КонецЕсли; + Иначе + СообщитьПользователю(НСтр("ru = 'Скрытие конфиденциальной информации завершено.'")); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаполнитьПоУмолчанию(Команда) + ЗаполнитьПоУмолчаниюНаСервере(); +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьНастройки(Команда) + + Режим = РежимДиалогаВыбораФайла.Сохранение; + ДиалогСохранения = Новый ДиалогВыбораФайла(Режим); + ДиалогСохранения.МножественныйВыбор = Ложь; + ДиалогСохранения.Фильтр = НСтр("ru = 'Файл настроек'") + "(*.xml)|*.xml"; + ОписаниеОповещения = Новый ОписаниеОповещения("СохранитьНастройкиЗавершение", ЭтотОбъект); + ДиалогСохранения.Показать(ОписаниеОповещения); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьНастройки(Команда) + + Режим = РежимДиалогаВыбораФайла.Открытие; + ДиалогВыбора = Новый ДиалогВыбораФайла(Режим); + ДиалогВыбора.МножественныйВыбор = Ложь; + ДиалогВыбора.Фильтр = НСтр("ru = 'Файл настроек'") + "(*.xml)|*.xml"; + ОписаниеОповещения = Новый ОписаниеОповещения("ЗагрузитьНастройкиЗавершение", ЭтотОбъект); + ДиалогВыбора.Показать(ОписаниеОповещения); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура ПриЗакрытииНаСервере() + + ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); + ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗаданияВторой); + +КонецПроцедуры + +&НаСервере +Функция ДеревоМетаданныхЗаполнено() + + МодульДлительныеОперации = ОбщийМодуль("ДлительныеОперации"); + + Если МодульДлительныеОперации = Неопределено + Или ИдентификаторЗадания = Неопределено Тогда + ДеревоОбрабатываемыхОбъектов = ПолучитьИзВременногоХранилища(АдресХранилища); + ЗначениеВРеквизитФормы(ДеревоОбрабатываемыхОбъектов, "ОбрабатываемыеОбъекты"); + ДеревоМетаданныхЗаполнено = Истина; + Возврат Истина; + ИначеЕсли МодульДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания) Тогда + ДеревоОбрабатываемыхОбъектов = ПолучитьИзВременногоХранилища(АдресХранилища); + ЗначениеВРеквизитФормы(ДеревоОбрабатываемыхОбъектов, "ОбрабатываемыеОбъекты"); + ДеревоМетаданныхЗаполнено = Истина; + Возврат Истина; + Иначе + Возврат Ложь; + КонецЕсли; + +КонецФункции + +&НаКлиенте +Процедура Подключаемый_ПроверитьВыполнениеЗадания() + + МодульДлительныеОперацииКлиент = ОбщийМодуль("ДлительныеОперацииКлиент"); + ДеревоМетаданныхЗаполнено = Ложь; + Попытка + Если ДеревоМетаданныхЗаполнено() Тогда + ДеревоМетаданныхЗаполнено = Истина; + ОтключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания"); + КонецЕсли; + Исключение + ОтключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания"); + КонецПопытки; + + Если ДеревоМетаданныхЗаполнено Тогда + Элементы.СтраницыВидФормы.ТекущаяСтраница = Элементы.СтраницаРасширенныеВозможности; + Элементы.РасширенныеВозможности.Доступность = Истина; + Заголовок = НСтр("ru = 'Скрытие конфиденциальной информации - полные возможности'"); + Элементы.РасширенныеВозможности.Заголовок = НСтр("ru = 'Обычный вид'"); + Иначе + МодульДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", ПараметрыОбработчикаОжидания.ТекущийИнтервал, Истина); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПроверитьСкрытиеКонфиденциальнойИнформации() + + МодульДлительныеОперацииКлиент = ОбщийМодуль("ДлительныеОперацииКлиент"); + Попытка + Если ТипЗнч(ФормаДлительнойОперации) = Тип("УправляемаяФорма") + И ФормаДлительнойОперации.Открыта() Тогда + + Если Не ЗаданиеВыполнено() Тогда + + МодульДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + + ПодключитьОбработчикОжидания( + "Подключаемый_ПроверитьСкрытиеКонфиденциальнойИнформации", + ПараметрыОбработчикаОжидания.ТекущийИнтервал, + Истина); + Иначе + МодульДлительныеОперацииКлиент.ЗакрытьФормуДлительнойОперации( + ФормаДлительнойОперации); + ФормаДлительнойОперации = Неопределено; + СообщитьПользователю(НСтр("ru = 'Скрытие конфиденциальной информации завершено.'")); + КонецЕсли; + КонецЕсли; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + МодульДлительныеОперацииКлиент.ЗакрытьФормуДлительнойОперации( + ФормаДлительнойОперации); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +&НаСервере +Функция ЗаданиеВыполнено(ИдентификаторФоновогоЗадания = Неопределено) + МодульДлительныеОперации = ОбщийМодуль("ДлительныеОперации"); + + Если ИдентификаторФоновогоЗадания = Неопределено Тогда + ИдентификаторФоновогоЗадания = ИдентификаторЗаданияВторой; + КонецЕсли; + + Возврат МодульДлительныеОперации.ЗаданиеВыполнено(ИдентификаторФоновогоЗадания); +КонецФункции + +&НаКлиенте +Процедура СохранитьНастройкиЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + Настройки = НастройкиОбработки(); + + ПолноеИмяФайла = Результат[0]; + ПолучаемыеФайлы = Новый Массив; + ПолучаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ПолноеИмяФайла, Настройки)); + + Обработчик = Новый ОписаниеОповещения("НачатьПолучениеФайловЗавершение", ЭтотОбъект); + НачатьПолучениеФайлов(Обработчик, ПолучаемыеФайлы, ПолноеИмяФайла, Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура НачатьПолучениеФайловЗавершение(Результат, ДополнительныеПараметры) Экспорт + // Обработчик не требуется +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьНастройкиЗавершение(Результат, ДополнительныеПараметры) Экспорт + + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + УстановитьНастройки(Результат); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьНастройки(Результат) + + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.Прочитать(Результат[0]); + СтрокаНастроек = ТекстовыйДокумент.ПолучитьТекст(); + + СохраненныеНастройки = Новый Массив; + СохраненныеНастройки.Добавить(СтрокаНастроек); + + ДеревоОбрабатываемыхОбъектов = РеквизитФормыВЗначение("ОбрабатываемыеОбъекты"); + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + ОбработкаОбъект.УстановитьНастройки(СохраненныеНастройки, ДеревоОбрабатываемыхОбъектов, Ложь); + ЗначениеВРеквизитФормы(ДеревоОбрабатываемыхОбъектов, "ОбрабатываемыеОбъекты"); + +КонецПроцедуры + +&НаСервере +Функция НастройкиОбработки() + + ДеревоОбъектов = РеквизитФормыВЗначение("ОбрабатываемыеОбъекты"); + + ТаблицаОтмеченныхОбъектов = Новый ТаблицаЗначений; + ТаблицаОтмеченныхОбъектов.Колонки.Добавить("Пометка"); + ТаблицаОтмеченныхОбъектов.Колонки.Добавить("ПолноеИмя"); + ТаблицаОтмеченныхОбъектов.Колонки.Добавить("ПравилоОбработки"); + ТаблицаОтмеченныхОбъектов.Колонки.Добавить("ПредставлениеПравилаОбработки"); + + ПараметрыПоиска = Новый Структура; + ПараметрыПоиска.Вставить("Пометка", 1); + + ОтмеченныеОбъекты = ДеревоОбъектов.Строки.НайтиСтроки(ПараметрыПоиска, Истина); + Для Каждого ОтмеченныйОбъект Из ОтмеченныеОбъекты Цикл + ЗаполнитьЗначенияСвойств(ТаблицаОтмеченныхОбъектов.Добавить(), ОтмеченныйОбъект); + КонецЦикла; + + Возврат ПоместитьВоВременноеХранилище(ЗначениеВСтрокуXML(ТаблицаОтмеченныхОбъектов)); + +КонецФункции + +&НаКлиенте +Функция ПолноеИмяФормы(Имя) + ЧастиИмени = СтрРазделить(ИмяФормы, "."); + ЧастиИмени[3] = Имя; + Возврат СтрСоединить(ЧастиИмени, "."); +КонецФункции + +&НаСервере +Процедура ЗаполнитьПравилаОбработки(ОбработкаОбъект) + + ПравилаОбработки = ОбработкаОбъект.ПравилаОбработкиПоУмолчанию(); + + Объект.ПравилоБулево = ПравилаОбработки.Булево; + ПредставлениеПравилаДата = ПравилаОбработки.Дата; + Объект.ПравилоСтрока = ПравилаОбработки.Строка; + Объект.ПравилоХранилищеЗначений = ПравилаОбработки.ХранилищаЗначений; + ПредставлениеПравилаЧисло = ПравилаОбработки.Числа; + + ЗначениеЧисло = 1; + ЗначениеДата = 1; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьДеревоОбрабатываемыхОбъектов(СохраненныеНастройки, ОбработкаОбъект) + + ОбрабатываемыеМетаданные = ОбрабатываемыеМетаданные(); + ДеревоОбрабатываемыхОбъектов = РеквизитФормыВЗначение("ОбрабатываемыеОбъекты"); + + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("ОбрабатываемыеМетаданные", ОбрабатываемыеМетаданные); + ПараметрыПроцедуры.Вставить("ДеревоОбрабатываемыхОбъектов", ДеревоОбрабатываемыхОбъектов); + ПараметрыПроцедуры.Вставить("СохраненныеНастройки", СохраненныеНастройки); + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + МодульДлительныеОперации = ОбщийМодуль("ДлительныеОперации"); + Если МодульДлительныеОперации = Неопределено Тогда + АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); + ОбработкаОбъект.ЗаполнитьДеревоОбрабатываемыхОбъектов(ПараметрыПроцедуры, АдресХранилища); + Возврат; + КонецЕсли; + + МодульДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); + ЭтоВнешняяОбработка = Не Метаданные.Обработки.Содержит(ОбработкаОбъект.Метаданные()); + ИдентификаторЗадания = Неопределено; + + НаименованиеЗадания = НСтр("ru = 'Скрытие конфиденциальной информации'"); + + ВыполняемыйМетод = "ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки"; + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("ИмяОбработки", ИмяОбработки(ОбработкаОбъект)); + ПараметрыЗадания.Вставить("ИмяМетода", "ЗаполнитьДеревоОбрабатываемыхОбъектов"); + ПараметрыЗадания.Вставить("ПараметрыВыполнения", ПараметрыПроцедуры); + ПараметрыЗадания.Вставить("ЭтоВнешняяОбработка", ЭтоВнешняяОбработка); + ПараметрыЗадания.Вставить("ДополнительнаяОбработкаСсылка", ""); + + ПараметрыВыполненияВФоне = МодульДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + ПараметрыВыполненияВФоне.НаименованиеФоновогоЗадания = НСтр("ru = 'Скрытие конфиденциальной информации'"); + ПараметрыВыполненияВФоне.ОжидатьЗавершение = Ложь; + + РезультатФоновогоЗадания = МодульДлительныеОперации.ВыполнитьВФоне( + ВыполняемыйМетод, + ПараметрыЗадания, + ПараметрыВыполненияВФоне); + + АдресХранилища = РезультатФоновогоЗадания.АдресРезультата; + ИдентификаторЗадания = РезультатФоновогоЗадания.ИдентификаторЗадания; + +КонецПроцедуры + +&НаСервере +Функция ОбрабатываемыеМетаданные() + + Структура = Новый Структура; + Структура.Вставить("Константы", НСтр("ru = 'Константы'")); + Структура.Вставить("Справочники", НСтр("ru = 'Справочники'")); + Структура.Вставить("Документы", НСтр("ru = 'Документы'")); + Структура.Вставить("ПланыВидовХарактеристик", НСтр("ru = 'Планы видов характеристик'")); + Структура.Вставить("ПланыСчетов", НСтр("ru = 'Планы счетов'")); + Структура.Вставить("ПланыВидовРасчета", НСтр("ru = 'Планы видов расчета'")); + Структура.Вставить("РегистрыСведений", НСтр("ru = 'Регистры сведений'")); + Структура.Вставить("РегистрыНакопления", НСтр("ru = 'Регистры накопления'")); + Структура.Вставить("РегистрыБухгалтерии", НСтр("ru = 'Регистры бухгалтерии'")); + Структура.Вставить("РегистрыРасчета", НСтр("ru = 'Регистры расчета'")); + Структура.Вставить("БизнесПроцессы", НСтр("ru = 'Бизнес процессы'")); + Структура.Вставить("Задачи", НСтр("ru = 'Задачи'")); + + Возврат Структура; + +КонецФункции + +&НаКлиенте +Процедура ИзменитьДочерниеЭлементы(ОбрабатываемыеЭлементы, ЗначениеПометки) + + Для Каждого Элемент Из ОбрабатываемыеЭлементы Цикл + Элемент.Пометка = ЗначениеПометки; + ДочерниеЭлементы = Элемент.ПолучитьЭлементы(); + Если ДочерниеЭлементы.Количество() > 0 Тогда + ИзменитьДочерниеЭлементы(ДочерниеЭлементы, ЗначениеПометки); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура ИзменитьРодительскиеЭлементы(ТекущаяСтрока) + + Родитель = ТекущаяСтрока.ПолучитьРодителя(); + Если Родитель = Неопределено Тогда + Возврат; + КонецЕсли; + ЭлементыРодителя = Родитель.ПолучитьЭлементы(); + КоличествоЭлементов = ЭлементыРодителя.Количество(); + ОтмеченоЭлементов = 0; + ЕстьСНеопределеннымСтатусом = Ложь; + + Для Каждого Элемент Из ЭлементыРодителя Цикл + Если Элемент.Пометка = 1 Тогда + ОтмеченоЭлементов = ОтмеченоЭлементов + 1; + ИначеЕсли Элемент.Пометка = 2 Тогда + ЕстьСНеопределеннымСтатусом = Истина; + КонецЕсли; + КонецЦикла; + + Если ОтмеченоЭлементов = КоличествоЭлементов Тогда + Родитель.Пометка = 1; + ИначеЕсли ОтмеченоЭлементов > 0 Или ЕстьСНеопределеннымСтатусом Тогда + Родитель.Пометка = 2; + Иначе + Родитель.Пометка = 0; + КонецЕсли; + + ИзменитьРодительскиеЭлементы(Родитель); + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьПоУмолчаниюНаСервере() + + МодульЗащитаПерсональныхДанных = ОбщийМодуль("ЗащитаПерсональныхДанныхПереопределяемый"); + Если МодульЗащитаПерсональныхДанных = Неопределено Тогда + Возврат; + КонецЕсли; + + ДеревоОбрабатываемыхОбъектов = РеквизитФормыВЗначение("ОбрабатываемыеОбъекты"); + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + СохраненныеНастройки = СохраненныеНастройки(ОбработкаОбъект); + + ОбработкаОбъект.УстановитьНастройки(СохраненныеНастройки, ДеревоОбрабатываемыхОбъектов, Ложь); + ЗначениеВРеквизитФормы(ДеревоОбрабатываемыхОбъектов, "ОбрабатываемыеОбъекты"); + +КонецПроцедуры + +/////////////////////////////////////////////////////////////////////////////////////////// + +&НаСервере +Функция СкрытиеКонфиденциальнойИнформации() + + ПравилаОбработки = Новый Структура; + ПравилаОбработки.Вставить("ПравилоСтрока"); + ПравилаОбработки.Вставить("ПравилоЧисло"); + ПравилаОбработки.Вставить("ПравилоБулево"); + ПравилаОбработки.Вставить("ПравилоДата"); + ПравилаОбработки.Вставить("ПравилоХранилищеЗначений"); + + Если ПредставлениеПравилаЧисло = "Умножить" + Или ПредставлениеПравилаЧисло = "Разделить" + Или ПредставлениеПравилаЧисло = "Прибавить" + Или ПредставлениеПравилаЧисло = "Вычесть" Тогда + Объект.ПравилоЧисло = ПредставлениеПравилаЧисло + ";" + ЗначениеЧисло; + Иначе + Объект.ПравилоЧисло = ПредставлениеПравилаЧисло; + КонецЕсли; + + Если ПредставлениеПравилаДата = "НеИзменять" Тогда + Объект.ПравилоДата = ПредставлениеПравилаДата; + Иначе + Объект.ПравилоДата = ПредставлениеПравилаДата + ";" + ЗначениеДата; + КонецЕсли; + + ЗаполнитьЗначенияСвойств(ПравилаОбработки, Объект); + + Если Не ДеревоМетаданныхЗаполнено + И ЗначениеЗаполнено(АдресХранилища) Тогда + ДеревоОбрабатываемыхОбъектов = ПолучитьИзВременногоХранилища(АдресХранилища); + Иначе + ДеревоОбрабатываемыхОбъектов = РеквизитФормыВЗначение("ОбрабатываемыеОбъекты"); + КонецЕсли; + АдресХранилищаВторой = ""; + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + + ПараметрыПроцедуры = Новый Структура; + ПараметрыПроцедуры.Вставить("ДеревоОбрабатываемыхОбъектов", ДеревоОбрабатываемыхОбъектов); + ПараметрыПроцедуры.Вставить("ПравилаОбработки", ПравилаОбработки); + + МодульДлительныеОперации = ОбщийМодуль("ДлительныеОперации"); + Если МодульДлительныеОперации = Неопределено Тогда + АдресХранилищаВторой = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); + ОбработкаОбъект.ВыполнитьСкрытиеНаСервере(ПараметрыПроцедуры, АдресХранилищаВторой); + Возврат Истина; + КонецЕсли; + + МодульДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗаданияВторой); + ЭтоВнешняяОбработка = Не Метаданные.Обработки.Содержит(ОбработкаОбъект.Метаданные()); + ИдентификаторЗаданияВторой = Неопределено; + + НаименованиеЗадания = НСтр("ru = 'Скрытие конфиденциальной информации'"); + + ВыполняемыйМетод = "ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки"; + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("ИмяОбработки", ИмяОбработки(ОбработкаОбъект)); + ПараметрыЗадания.Вставить("ИмяМетода", "ВыполнитьСкрытиеНаСервере"); + ПараметрыЗадания.Вставить("ПараметрыВыполнения", ПараметрыПроцедуры); + ПараметрыЗадания.Вставить("ЭтоВнешняяОбработка", ЭтоВнешняяОбработка); + ПараметрыЗадания.Вставить("ДополнительнаяОбработкаСсылка", ""); + + ПараметрыВыполненияВФоне = МодульДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + ПараметрыВыполненияВФоне.НаименованиеФоновогоЗадания = НСтр("ru = 'Скрытие конфиденциальной информации'"); + ПараметрыВыполненияВФоне.ОжидатьЗавершение = Ложь; + + РезультатФоновогоЗадания = МодульДлительныеОперации.ВыполнитьВФоне( + ВыполняемыйМетод, + ПараметрыЗадания, + ПараметрыВыполненияВФоне); + + АдресХранилищаВторой = РезультатФоновогоЗадания.АдресРезультата; + ИдентификаторЗаданияВторой = РезультатФоновогоЗадания.ИдентификаторЗадания; + + Возврат РезультатФоновогоЗадания; + +КонецФункции + +&НаСервере +Функция СохраненныеНастройки(ОбработкаОбъект) + + Макеты = ОбработкаОбъект.Метаданные().Макеты; + + КоличествоНастроек = 0; + СохраненныеНастройки = Новый Массив; + Для Каждого Макет Из Макеты Цикл + МакетОбъект = ОбработкаОбъект.ПолучитьМакет(Макет.Имя); + ИмяВременногоФайла = ПолучитьИмяВременногоФайла("XML"); + МакетОбъект.Записать(ИмяВременногоФайла); + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.Прочитать(ИмяВременногоФайла); + СтрокаНастроек = ТекстовыйДокумент.ПолучитьТекст(); + + СохраненныеНастройки.Добавить(СтрокаНастроек); + КоличествоНастроек = КоличествоНастроек + 1; + КонецЦикла; + МакетОпределен = (КоличествоНастроек > 1); + + УдалитьФайлы(ИмяВременногоФайла); + + Возврат СохраненныеНастройки; +КонецФункции + +&НаСервере +Функция ЗначениеВСтрокуXML(Значение) + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку(); + СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Значение, НазначениеТипаXML.Явное); + + Возврат ЗаписьXML.Закрыть(); +КонецФункции + +&НаСервере +Функция ИмяОбработки(ОбработкаОбъект) + ЭтоВнешняяОбработка = Не Метаданные.Обработки.Содержит(ОбработкаОбъект.Метаданные()); + ЧастиИмени = СтрРазделить(ИмяФормы, "."); + Если ЭтоВнешняяОбработка Тогда + Возврат ОбработкаОбъект.ИспользуемоеИмяФайла; + Иначе + Возврат ЧастиИмени[1]; + КонецЕсли; +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ОбщийМодуль(Имя) + +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Если Метаданные.ОбщиеМодули.Найти(Имя) <> Неопределено Тогда + Модуль = Вычислить(Имя); + Иначе + Модуль = Неопределено; + КонецЕсли; + + Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя); + КонецЕсли; +#Иначе + Модуль = Вычислить(Имя); +#Если НЕ ВебКлиент Тогда + Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя); + КонецЕсли; +#КонецЕсли +#КонецЕсли + + Возврат Модуль; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Процедура СообщитьПользователю(Знач ТекстСообщенияПользователю) + + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = ТекстСообщенияПользователю; + + Сообщение.Сообщить(); + + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Help/ru.html b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Help/ru.html new file mode 100644 index 000000000..64a0cd31d --- /dev/null +++ b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Help/ru.html @@ -0,0 +1,50 @@ + +

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

      +

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

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

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

      +

      Автоматический режим

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

      Полные возможности

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

      Обрабатываемые объекты

      +

      Список состоит из двух колонок:

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

      Правила обработки

      +
      • +
        Строки: "Не изменять", "Очистить", "Случайное значение", "ИмяПоля+Индекс", "ИмяОбъекта+Индекс".
        +
      • +
        Числа: "Случайное значение", "Не изменять", "Очистить", "Умножить/Разделить/Прибавить/Вычесть".
        +
      • +
        Булево: "Не изменять", "Инвертировать".
        +
      • +
        Даты: "Случайное значение", "Не изменять", "Прибавить/Вычесть(дней)", "Очистить".
        +
      • +
        Хранилище значений: "Не изменять", "Очистить".

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

      +

      Обезличивание персональных данных

      +
      • +
        После окончания действия соглашения об обработке персональных данных необходимо их очищать.
        +
      • +
        Реализован программный интерфейс для уничтожения персональных данных по переданному отбору;
        +
      • +
        Регламентное задание для автоматического уничтожения данных по истечению срока согласия на предоставление персональных данных.
      \ 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..1c1032c66 --- /dev/null +++ b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/ObjectModule.bsl @@ -0,0 +1,1230 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОписаниеПеременных + +Перем КартинкиОбъектов; +Перем ГенераторСлучайныхЧисел; +Перем ПрограммныйВызов; +Перем ОтборПоИли; + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +// Очищает персональные данные по переданному отбору. +// +// Параметры: +// Объект - Строка - полное имя обрабатываемого объекта метаданных. +// Реквизиты - Строка - обрабатываемые реквизиты через запятую. +// Табличные части задаются через точку - "ИмяТабличнойЧасти.ИмяРеквизита". +// Отбор - Соответствие - фильтр обрабатываемых объектов. +// +Процедура СкрытьКонфиденциальнуюИнформацию(Объект, Реквизиты = "", Отбор = "", ОтборПоИ = Ложь) Экспорт + + ОбъектЧастями = СтрРазделить(Объект, "."); + + УстановитьПравилаОбработкиПрограммныйВызов(); + + Параметры = Новый Структура; + Параметры.Вставить("ПолноеИмя", Объект); + Параметры.Вставить("ПравилоОбработки", Новый СписокЗначений); + Параметры.Вставить("Имя", ОбъектЧастями[1]); + + ГенераторСлучайныхЧисел = Новый ГенераторСлучайныхЧисел; + ПрограммныйВызов = Истина; + ОтборПоИли = Не ОтборПоИ; + + ТекстОтборНеЗадан = НСтр("ru = 'Отбор на задан!'"); + Если ВРег(ОбъектЧастями[0]) = "КОНСТАНТА" Тогда + ОбработатьКонстанты(Параметры); + Возврат; + ИначеЕсли ВРег(ОбъектЧастями[0]) = "РЕГИСТРСВЕДЕНИЙ" + Или ВРег(ОбъектЧастями[0]) = "РЕГИСТРНАКОПЛЕНИЯ" + Или ВРег(ОбъектЧастями[0]) = "РЕГИСТРБУХГАЛТЕРИИ" + Или ВРег(ОбъектЧастями[0]) = "РЕГИСТРРЕСЧЕТА" Тогда + ОбработатьРегистрыПрограммно(Параметры, Реквизиты, Отбор, ОбъектЧастями[0]); + Иначе + ОбработатьСсылочныеОбъекты(Параметры, Реквизиты, Отбор); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры скрытия конфиденциальной информации в программном режиме. + +Процедура ОбработатьСсылочныеОбъекты(Параметры, Реквизиты, Отбор) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОбъектМетаданных.Ссылка КАК Ссылка + |ИЗ + | " + Параметры.ПолноеИмя + " КАК ОбъектМетаданных + |"; + + ДобавитьОтборКЗапросу(Запрос, Отбор); + + Результат = Запрос.Выполнить().Выгрузить(); + + МассивРеквизитов = СтрРазделить(Реквизиты, ","); + + Для Каждого СтрокаРезультата Из Результат Цикл + + ОбрабатываемыйОбъект = СтрокаРезультата.Ссылка.ПолучитьОбъект(); + Обработано = Истина; + ВыполнитьЗаписьОбъекта = Ложь; + Для Каждого Реквизит Из МассивРеквизитов Цикл + Реквизит = СокрЛП(Реквизит); + ЧастиРеквизита = СтрРазделить(Реквизит, "."); + // Проверка, что это реквизит табличной части. + Если ЧастиРеквизита.Количество() > 1 Тогда + ОбрабатываемыеСвойства = ОбрабатываемыйОбъект[ЧастиРеквизита[0]]; + + Для Каждого СтрокаТабличнойЧасти Из ОбрабатываемыеСвойства Цикл + Параметры.Вставить("Имя", ЧастиРеквизита[1]); + Значение = СтрокаТабличнойЧасти[ЧастиРеквизита[1]]; + ОбработатьСвойство(Значение, Параметры, Обработано); + Если Обработано Тогда + СтрокаТабличнойЧасти[ЧастиРеквизита[1]] = Значение; + КонецЕсли; + + ВыполнитьЗаписьОбъекта = ВыполнитьЗаписьОбъекта Или Обработано; + КонецЦикла; + Иначе + Параметры.Вставить("Имя", Реквизит); + Значение = ОбрабатываемыйОбъект[Реквизит]; + ОбработатьСвойство(Значение, Параметры, Обработано); + Если Обработано Тогда + ОбрабатываемыйОбъект[Реквизит] = Значение; + КонецЕсли; + + ВыполнитьЗаписьОбъекта = ВыполнитьЗаписьОбъекта Или Обработано; + КонецЕсли; + КонецЦикла; + + Если ВыполнитьЗаписьОбъекта Тогда + ЗаписатьДанные(ОбрабатываемыйОбъект); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Процедура ДобавитьОтборКЗапросу(Запрос, Отбор) + + ВидОперации = ?(ОтборПоИли, "ИЛИ", "И"); + + Префикс = "ГДЕ" + Символы.ПС + Символы.Таб + "("; + Индекс = 1; + Для Каждого ЭлементОтбора Из Отбор Цикл + ИмяСвойства = ЭлементОтбора.Ключ; + ЗначенияСвойства = ЭлементОтбора.Значение; + Для Каждого ЗначениеСвойства Из ЗначенияСвойства Цикл + Шаблон = "%1.%2 = &%3"; + ИмяЗначенияПараметра = "Значение" + Индекс; + Условие = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, "ОбъектМетаданных", ИмяСвойства, ИмяЗначенияПараметра); + + Запрос.Текст = Запрос.Текст + Префикс + Условие; + Запрос.УстановитьПараметр(ИмяЗначенияПараметра, ЗначениеСвойства); + + Индекс = Индекс + 1; + Префикс = Символы.ПС + Символы.Таб + Символы.Таб + ВидОперации + " "; + КонецЦикла; + Запрос.Текст = Запрос.Текст + ")"; + Префикс = Символы.ПС + Символы.Таб + ВидОперации + " ("; + КонецЦикла; + +КонецПроцедуры + +Процедура ОбработатьРегистрыПрограммно(Параметры, Реквизиты, Отбор, Тип) + + Если Тип = "РегистрСведений" Тогда + Коллекция = РегистрыСведений; + ИначеЕсли Тип = "РегистрНакопления" Тогда + Коллекция = РегистрыНакопления; + ИначеЕсли Тип = "РегистрБухгалтерии" Тогда + Коллекция = РегистрыБухгалтерии; + ИначеЕсли Тип = "РегистрРасчета" Тогда + Коллекция = РегистрыРасчета; + КонецЕсли; + + Регистр = Коллекция[Параметры.Имя]; + НаборЗаписейРегистра = Регистр.СоздатьНаборЗаписей(); + МетаданныеРегистра = НаборЗаписейРегистра.Метаданные(); + + Если Тип = "РегистрСведений" Тогда + РегистрПериодический = (МетаданныеРегистра.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический); + РежимЗаписиНезависимый = (МетаданныеРегистра.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый); + + // Периодический и независимый режим записи. + Если РегистрПериодический И РежимЗаписиНезависимый Тогда + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ИмяРегистраОбъект.Период КАК Период + |ИЗ + | " + Параметры.ПолноеИмя + " КАК ИмяРегистраОбъект"; + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + НаборЗаписейРегистра.Отбор.Период.Использование = Истина; + НаборЗаписейРегистра.Отбор.Период.Значение = Выборка.Период; + ОбработатьНезависимыйРегистрПрограммно(НаборЗаписейРегистра, Реквизиты, Параметры, Отбор); + КонецЦикла; + + // Непериодический и режим записи независимый. + ИначеЕсли РежимЗаписиНезависимый Тогда + ОбработатьНезависимыйРегистрПрограммно(НаборЗаписейРегистра, Реквизиты, Параметры, Отбор); + Иначе + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ИмяРегистраОбъект.Регистратор КАК Регистратор + |ИЗ + | " + Параметры.ПолноеИмя + " КАК ИмяРегистраОбъект + |"; + ДобавитьОтборКЗапросу(Запрос, Отбор); + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + НаборЗаписейРегистра.Отбор.Регистратор.Установить(Выборка.Регистратор); + ОбработатьНаборЗаписейПрограммно(НаборЗаписейРегистра, Параметры, Реквизиты); + КонецЦикла; + + КонецЕсли; + + Иначе // Остальные регистры. + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ИмяРегистраОбъект.Регистратор КАК Регистратор + |ИЗ + | " + Параметры.ПолноеИмя + " КАК ИмяРегистраОбъект + |"; + ДобавитьОтборКЗапросу(Запрос, Отбор); + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + НаборЗаписейРегистра.Отбор.Регистратор.Установить(Выборка.Регистратор); + ОбработатьНаборЗаписейПрограммно(НаборЗаписейРегистра, Параметры, Реквизиты); + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +Процедура ОбработатьНезависимыйРегистрПрограммно(НаборЗаписейРегистра, Реквизиты, Параметры, Отбор) + + Для Каждого ЭлементОтбора Из Отбор Цикл + НаборЗаписейРегистра.Отбор[ЭлементОтбора.Ключ].Использование = Истина; + + ЗначенияОтбора = ЭлементОтбора.Значение; + Если ЗначенияОтбора.Количество() > 1 Тогда + СписокЗначений = Новый СписокЗначений; + Для Каждого Значение Из ЗначенияОтбора Цикл + СписокЗначений.Добавить(Значение); + КонецЦикла; + НаборЗаписейРегистра.Отбор[ЭлементОтбора.Ключ].ВидСравнения = ВидСравнения.ВСписке; + НаборЗаписейРегистра.Отбор[ЭлементОтбора.Ключ].Значение = СписокЗначений; + Иначе + НаборЗаписейРегистра.Отбор[ЭлементОтбора.Ключ].Значение = ЗначенияОтбора[0]; + КонецЕсли; + Если ОтборПоИли Тогда + ОбработатьНаборЗаписейПрограммно(НаборЗаписейРегистра, Параметры, Реквизиты); + НаборЗаписейРегистра.Отбор[ЭлементОтбора.Ключ].Использование = Ложь; + КонецЕсли; + КонецЦикла; + + ОбработатьНаборЗаписейПрограммно(НаборЗаписейРегистра, Параметры, Реквизиты); + +КонецПроцедуры + +Процедура ОбработатьНаборЗаписейПрограммно(НаборЗаписейРегистра, Параметры, Реквизиты) + + РеквизитыМассивом = СтрРазделить(Реквизиты, ","); + + НаборЗаписейРегистра.Прочитать(); + + Обработано = Истина; + ВыполнитьЗаписьОбъекта = Ложь; + Для Каждого ЗаписьРегистра Из НаборЗаписейРегистра Цикл + + Для Каждого Реквизит Из РеквизитыМассивом Цикл + Параметры.Вставить("Имя", Реквизит); + Значение = ЗаписьРегистра[Реквизит]; + ОбработатьСвойство(Значение, Параметры, Обработано); + Если Обработано Тогда + ЗаписьРегистра[Реквизит] = Значение; + КонецЕсли; + + ВыполнитьЗаписьОбъекта = ВыполнитьЗаписьОбъекта Или Обработано; + КонецЦикла; + + КонецЦикла; + + Если ВыполнитьЗаписьОбъекта Тогда + ЗаписатьДанные(НаборЗаписейРегистра); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры скрытия конфиденциальной информации в интерактивном режиме. + +Процедура ВыполнитьСкрытиеНаСервере(Параметры, АдресХранилища) Экспорт + + ГенераторСлучайныхЧисел = Новый ГенераторСлучайныхЧисел; + ПрограммныйВызов = Ложь; + + ДеревоОбрабатываемыхОбъектов = Параметры.ДеревоОбрабатываемыхОбъектов; + ПравилаОбработки = Параметры.ПравилаОбработки; + ЗаполнитьЗначенияСвойств(ЭтотОбъект, ПравилаОбработки); + + Для Каждого ТипМетаданных Из ДеревоОбрабатываемыхОбъектов.Строки Цикл + Если ТипМетаданных.Пометка = 0 Тогда + Продолжить; + КонецЕсли; + + Для Каждого ОбъектМетаданных Из ТипМетаданных.Строки Цикл + Если ОбъектМетаданных.Пометка = 0 Тогда + Продолжить; + КонецЕсли; + + Если ОбъектМетаданных.Тип = "Константы" Тогда + ОбработатьКонстанты(ОбъектМетаданных); + Продолжить; + КонецЕсли; + + Если СтрНайти(ОбъектМетаданных.Тип, "Регистры") > 0 Тогда + ОбработатьРегистры(ОбъектМетаданных); + Иначе + ОбработатьОбъектМетаданных(ОбъектМетаданных); + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + + ИмяРегистраВерсииОбъектов = "ВерсииОбъектов"; + Если Метаданные.НайтиПоПолномуИмени("РегистрСведений." + ИмяРегистраВерсииОбъектов) <> Неопределено Тогда + НаборЗаписей = РегистрыСведений[ИмяРегистраВерсииОбъектов].СоздатьНаборЗаписей(); + НаборЗаписей.Записать(); + КонецЕсли; + + ПоместитьВоВременноеХранилище(Истина, АдресХранилища); + +КонецПроцедуры + +Процедура ОбработатьРегистры(ОбъектМетаданных) + + Если ОбъектМетаданных.Тип = "РегистрыСведений" Тогда + Коллекция = РегистрыСведений; + ИначеЕсли ОбъектМетаданных.Тип = "РегистрыНакопления" Тогда + Коллекция = РегистрыНакопления; + ИначеЕсли ОбъектМетаданных.Тип = "РегистрыБухгалтерии" Тогда + Коллекция = РегистрыБухгалтерии; + ИначеЕсли ОбъектМетаданных.Тип = "РегистрыРасчета" Тогда + Коллекция = РегистрыРасчета; + КонецЕсли; + + Регистр = Коллекция[ОбъектМетаданных.Имя]; + НаборЗаписейРегистра = Регистр.СоздатьНаборЗаписей(); + МетаданныеРегистра = НаборЗаписейРегистра.Метаданные(); + + Если ОбъектМетаданных.Тип = "РегистрыСведений" Тогда + РегистрПериодический = (МетаданныеРегистра.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический); + РежимЗаписиНезависимый = (МетаданныеРегистра.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый); + + // Периодический и независимый режим записи. + Если РегистрПериодический И РежимЗаписиНезависимый Тогда + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ИмяРегистраОбъект.Период КАК Период + |ИЗ + | " + ОбъектМетаданных.ПолноеИмя + " КАК ИмяРегистраОбъект"; + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + НаборЗаписейРегистра.Отбор.Период.Использование = Истина; + НаборЗаписейРегистра.Отбор.Период.Значение = Выборка.Период; + ОбработатьНаборЗаписей(НаборЗаписейРегистра, ОбъектМетаданных); + КонецЦикла; + + // Непериодический и режим записи независимый. + ИначеЕсли РежимЗаписиНезависимый Тогда + ПолноеИмяРегистра = МетаданныеРегистра.ПолноеИмя(); + КоличествоЗаписей = КоличествоЗаписейРегистра(ПолноеИмяРегистра); + + Если КоличествоЗаписей > 100000 Тогда + ШаблонЗапроса = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(*) КАК Количество + |ПОМЕСТИТЬ ВтВыборка + |ИЗ + | %1 КАК Регистр + | + |СГРУППИРОВАТЬ ПО + | Регистр.%2 + |; + |ВЫБРАТЬ + | КОЛИЧЕСТВО(*) КАК ВышеПорога, + | МАКСИМУМ(ВтВыборка.Количество) КАК Максимум, + | 0 КАК Всего + |ИЗ + | ВтВыборка КАК ВтВыборка + |ГДЕ + | ВтВыборка.Количество > 100000 + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | 0 КАК ВышеПорога, + | 0 КАК Максимум, + | КОЛИЧЕСТВО(*) КАК Всего + |ИЗ + | ВтВыборка КАК ВтВыборка"; + + ОписанияИзмерений = Новый ТаблицаЗначений; + ОписанияИзмерений.Колонки.Добавить("Измерение"); + ОписанияИзмерений.Колонки.Добавить("ВышеПорога"); + ОписанияИзмерений.Колонки.Добавить("Максимум"); + ОписанияИзмерений.Колонки.Добавить("Всего"); + ЕстьИзмеренияНижеПорога = Ложь; + Для Каждого Измерение Из МетаданныеРегистра.Измерения Цикл + Запрос = Новый Запрос; + Запрос.Текст = ШаблонЗапроса; + Запрос.Текст = СтрЗаменить(Запрос.Текст, "%1", ПолноеИмяРегистра); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "%2", Измерение.Имя); + Результат = Запрос.Выполнить().Выгрузить(); + + Строка = ОписанияИзмерений.Добавить(); + Строка.Измерение = Измерение.Имя; + Строка.ВышеПорога = Результат[0].ВышеПорога; + Строка.Максимум = Результат[0].Максимум; + Строка.Всего = Результат[1].Всего; + Если Строка.ВышеПорога = 0 Тогда + ЕстьИзмеренияНижеПорога = Истина; + КонецЕсли; + КонецЦикла; + + Если ЕстьИзмеренияНижеПорога Тогда + ОписанияИзмерений.Сортировать("ВышеПорога Возр, Всего Возр"); + Иначе + ОписанияИзмерений.Сортировать("Максимум Возр"); + КонецЕсли; + + ОптимальноеИзмерение = ОписанияИзмерений[0].Измерение; + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Регистр.%2 КАК ЗначениеИзмерения, + | КОЛИЧЕСТВО(*) КАК Количество + |ИЗ + | %1 КАК Регистр + | + |СГРУППИРОВАТЬ ПО + | Регистр.%2"; + Запрос.Текст = СтрЗаменить(Запрос.Текст, "%1", ПолноеИмяРегистра); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "%2", ОптимальноеИзмерение); + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + НаборЗаписейРегистра.Отбор[ОптимальноеИзмерение].Установить(Выборка.ЗначениеИзмерения); + ОбработатьНаборЗаписей(НаборЗаписейРегистра, ОбъектМетаданных); + КонецЦикла; + Иначе + ОбработатьНаборЗаписей(НаборЗаписейРегистра, ОбъектМетаданных); + КонецЕсли; + Иначе + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ИмяРегистраОбъект.Регистратор КАК Регистратор + |ИЗ + | " + ОбъектМетаданных.ПолноеИмя + " КАК ИмяРегистраОбъект"; + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + НаборЗаписейРегистра.Отбор.Регистратор.Установить(Выборка.Регистратор); + ОбработатьНаборЗаписей(НаборЗаписейРегистра, ОбъектМетаданных); + КонецЦикла; + + КонецЕсли; + + Иначе // Остальные регистры. + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ИмяРегистраОбъект.Регистратор КАК Регистратор + |ИЗ + | " + ОбъектМетаданных.ПолноеИмя + " КАК ИмяРегистраОбъект"; + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + НаборЗаписейРегистра.Отбор.Регистратор.Установить(Выборка.Регистратор); + ОбработатьНаборЗаписей(НаборЗаписейРегистра, ОбъектМетаданных); + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +Функция КоличествоЗаписейРегистра(ПолноеИмя) + + ТекстЗапроса = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(*) КАК Количество + |ИЗ + | %1 КАК Регистр"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "%1", ПолноеИмя); + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + Возврат Выборка.Количество; + +КонецФункции + +Процедура ОбработатьНаборЗаписей(НаборЗаписейРегистра, ОбъектМетаданных) + + НаборЗаписейРегистра.Прочитать(); + + Обработано = Истина; + ВыполнитьЗаписьОбъекта = Ложь; + Для Каждого ЗаписьРегистра Из НаборЗаписейРегистра Цикл + + Для Каждого ГруппаСвойствОбъекта Из ОбъектМетаданных.Строки Цикл + Если ГруппаСвойствОбъекта.Пометка = 0 Тогда + Продолжить; + КонецЕсли; + + Для Каждого ОбрабатываемоеСвойство Из ГруппаСвойствОбъекта.Строки Цикл + Если ОбрабатываемоеСвойство.Пометка = 0 Тогда + Продолжить; + КонецЕсли; + + Если ОбъектМетаданных.Тип = "РегистрыБухгалтерии" И ОбрабатываемоеСвойство.Тип = "Ресурсы" Тогда + ЗначениеДт = ЗаписьРегистра[ОбрабатываемоеСвойство.Имя + "Дт"]; + ЗначениеДт = ?(ТипЗнч(ЗначениеДт) = Тип("Число"), ЗначениеДт, 0); + ЗначениеКт = ЗаписьРегистра[ОбрабатываемоеСвойство.Имя + "Кт"]; + ЗначениеКт = ?(ТипЗнч(ЗначениеКт) = Тип("Число"), ЗначениеКт, 0); + ОбработатьСвойство(ЗначениеДт, ОбрабатываемоеСвойство, Обработано); + ОбработатьСвойство(ЗначениеКт, ОбрабатываемоеСвойство, Обработано); + Если Обработано Тогда + ЗаписьРегистра[ОбрабатываемоеСвойство.Имя + "Дт"] = ЗначениеДт; + ЗаписьРегистра[ОбрабатываемоеСвойство.Имя + "Кт"] = ЗначениеКт; + КонецЕсли; + Иначе + Значение = ЗаписьРегистра[ОбрабатываемоеСвойство.Имя]; + ОбработатьСвойство(Значение, ОбрабатываемоеСвойство, Обработано); + Если Обработано Тогда + ЗаписьРегистра[ОбрабатываемоеСвойство.Имя] = Значение; + КонецЕсли; + КонецЕсли; + + ВыполнитьЗаписьОбъекта = ВыполнитьЗаписьОбъекта Или Обработано; + КонецЦикла; + + КонецЦикла; + + КонецЦикла; + + Если ВыполнитьЗаписьОбъекта Тогда + ЗаписатьДанные(НаборЗаписейРегистра); + КонецЕсли; + +КонецПроцедуры + +Процедура ОбработатьОбъектМетаданных(ОбъектМетаданных) + + Ссылка = ""; + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Ссылка", Ссылка); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1000 + | ОбъектМетаданных.Ссылка + |ИЗ + | " + ОбъектМетаданных.ПолноеИмя + " КАК ОбъектМетаданных + |ГДЕ + | ОбъектМетаданных.Ссылка > &Ссылка + |УПОРЯДОЧИТЬ ПО + | ОбъектМетаданных.Ссылка"; + Результат = Запрос.Выполнить().Выгрузить(); + + Пока Истина Цикл + + Если Результат.Количество() = 0 Тогда + Прервать; + КонецЕсли; + + Для Каждого СтрокаРезультата Из Результат Цикл + + Обработано = Истина; + ВыполнитьЗаписьОбъекта = Ложь; + ОбрабатываемыйОбъект = СтрокаРезультата.Ссылка.ПолучитьОбъект(); + Для Каждого ГруппаСвойствОбъекта Из ОбъектМетаданных.Строки Цикл + Если ГруппаСвойствОбъекта.Пометка = 0 Тогда + Продолжить; + КонецЕсли; + + Для Каждого ОбрабатываемоеСвойство Из ГруппаСвойствОбъекта.Строки Цикл + Если ОбрабатываемоеСвойство.Пометка = 0 Тогда + Продолжить; + КонецЕсли; + + Если ГруппаСвойствОбъекта.Тип = "ТабличнаяЧасть" Тогда + ОбрабатываемыеСвойства = ОбрабатываемыйОбъект[ГруппаСвойствОбъекта.Имя]; + + Для Каждого СтрокаТабличнойЧасти Из ОбрабатываемыеСвойства Цикл + Значение = СтрокаТабличнойЧасти[ОбрабатываемоеСвойство.Имя]; + ОбработатьСвойство(Значение, ОбрабатываемоеСвойство, Обработано); + Если Обработано Тогда + СтрокаТабличнойЧасти[ОбрабатываемоеСвойство.Имя] = Значение; + КонецЕсли; + + ВыполнитьЗаписьОбъекта = ВыполнитьЗаписьОбъекта Или Обработано; + КонецЦикла; + + Иначе + Значение = ОбрабатываемыйОбъект[ОбрабатываемоеСвойство.Имя]; + ОбработатьСвойство(Значение, ОбрабатываемоеСвойство, Обработано); + Если Обработано Тогда + ОбрабатываемыйОбъект[ОбрабатываемоеСвойство.Имя] = Значение; + КонецЕсли; + + ВыполнитьЗаписьОбъекта = ВыполнитьЗаписьОбъекта Или Обработано; + КонецЕсли; + + КонецЦикла; + КонецЦикла; + Если ВыполнитьЗаписьОбъекта Тогда + ЗаписатьДанные(ОбрабатываемыйОбъект); + КонецЕсли; + КонецЦикла; + + Запрос.УстановитьПараметр("Ссылка", СтрокаРезультата.Ссылка); + Результат = Запрос.Выполнить().Выгрузить(); + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции формирования дерева метаданных. + +Процедура ЗаполнитьДеревоОбрабатываемыхОбъектов(Параметры, АдресХранилища) Экспорт + + ОбрабатываемыеМетаданные = Параметры.ОбрабатываемыеМетаданные; + ДеревоОбрабатываемыхОбъектов = Параметры.ДеревоОбрабатываемыхОбъектов; + СохраненныеНастройки = Параметры.СохраненныеНастройки; + + РазделениеВключено = ОбщегоНазначенияПовтИсп.РазделениеВключено(); + ДоступноИспользованиеРазделенныхДанных = ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных(); + + АдминистраторСистемы = Пользователи.ЭтоПолноправныйПользователь(, Истина); + + ЗаполнитьКартинки(); + СкрываемыеОбъектыПоТипам = СкрываемыеОбъекты(); + + // Заполнение дерева объектов. + Для Каждого ТипМетаданных Из ОбрабатываемыеМетаданные Цикл + СтрокаДерева = ДеревоОбрабатываемыхОбъектов.Строки.Добавить(); + СтрокаДерева.Имя = ТипМетаданных.Ключ; + СтрокаДерева.Представление = ТипМетаданных.Значение; + СтрокаДерева.Картинка = КартинкиОбъектов[ТипМетаданных.Ключ]; + СтрокаДерева.ПолноеИмя = ЭлементИмениПоТипуМетаданных(СтрокаДерева.Имя); + + СкрываемыеОбъекты = СкрываемыеОбъектыПоТипам[ТипМетаданных.Ключ]; + Для Каждого ОбъектМетаданных Из Метаданные[ТипМетаданных.Ключ] Цикл + Если РазделениеВключено Тогда + ПолноеИмя = СтрокаДерева.ПолноеИмя + "." + ОбъектМетаданных.Имя; + + ЭтоРазделенныйОМД = ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(ПолноеИмя, ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных()) + Или ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(ПолноеИмя, ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных()); + + Если (ДоступноИспользованиеРазделенныхДанных И Не ЭтоРазделенныйОМД) + Или (Не ДоступноИспользованиеРазделенныхДанных И ЭтоРазделенныйОМД) Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + + Если СкрываемыеОбъекты <> Неопределено + И СкрываемыеОбъекты.Найти(ОбъектМетаданных.Имя) <> Неопределено Тогда + Продолжить; + КонецЕсли; + ДобавитьОбъекты(ОбъектМетаданных, СтрокаДерева, ТипМетаданных); + КонецЦикла; + + СтрокаДерева.Строки.Сортировать("Представление Возр"); + КонецЦикла; + + УстановитьНастройки(СохраненныеНастройки, ДеревоОбрабатываемыхОбъектов); + + ПоместитьВоВременноеХранилище(ДеревоОбрабатываемыхОбъектов, АдресХранилища); + +КонецПроцедуры + +Функция СкрываемыеОбъекты() + СкрываемыеРегистрыСведений = Новый Массив; + СкрываемыеРегистрыСведений.Добавить("ВерсииПодсистем"); + СкрываемыеРегистрыСведений.Добавить("ВерсииПодсистемОбластейДанных"); + СкрываемыеРегистрыСведений.Добавить("ВерсииОбъектов"); + + СкрываемыеСправочники = Новый Массив; + СкрываемыеСправочники.Добавить("ИдентификаторыОбъектовМетаданных"); + СкрываемыеСправочники.Добавить("ИдентификаторыОбъектовРасширений"); + + СкрываемыеКонстанты = Новый Массив; + СкрываемыеКонстанты.Добавить("ОтложенноеОбновлениеЗавершеноУспешно"); + СкрываемыеКонстанты.Добавить("СведенияОБлокируемыхОбъектах"); + СкрываемыеКонстанты.Добавить("СведенияОбОбновленииИБ"); + + СкрываемыеОбъектыПоТипам = Новый Соответствие; + СкрываемыеОбъектыПоТипам.Вставить("РегистрыСведений", СкрываемыеРегистрыСведений); + СкрываемыеОбъектыПоТипам.Вставить("Справочники", СкрываемыеСправочники); + СкрываемыеОбъектыПоТипам.Вставить("Константы", СкрываемыеКонстанты); + + Возврат СкрываемыеОбъектыПоТипам; +КонецФункции + +Процедура ДобавитьОбъекты(ОбъектМетаданных, СтрокаДерева, ТипМетаданных) + + Если ТипМетаданных.Ключ = "Константы" Тогда + Если Не ДопустимыйТип(ОбъектМетаданных.Тип) Тогда + Возврат; + КонецЕсли; + + СтрокаОбъект = СтрокаДерева.Строки.Добавить(); + СтрокаОбъект.Имя = ОбъектМетаданных.Имя; + СтрокаОбъект.Представление = ОбъектМетаданных.Синоним + ПредставлениеТиповСвойства(ОбъектМетаданных.Тип); + СтрокаОбъект.Картинка = КартинкиОбъектов[ТипМетаданных.Ключ]; + СтрокаОбъект.Тип = ТипМетаданных.Ключ; + СтрокаОбъект.ТипЗначения = ОбъектМетаданных.Тип; + СтрокаОбъект.ПолноеИмя = СтрокаДерева.ПолноеИмя + "." + СтрокаОбъект.Имя; + СтрокаОбъект.ПредставлениеПравилаОбработки = НСтр("ru = 'По умолчанию'"); + + Иначе + ЕстьОбрабатываемыеСвойства = Ложь; + + СтрокаОбъект = СтрокаДерева.Строки.Добавить(); + СтрокаОбъект.Имя = ОбъектМетаданных.Имя; + СтрокаОбъект.Представление = ОбъектМетаданных.Синоним; + СтрокаОбъект.Картинка = КартинкиОбъектов[ТипМетаданных.Ключ]; + СтрокаОбъект.Тип = ТипМетаданных.Ключ; + СтрокаОбъект.ПолноеИмя = СтрокаДерева.ПолноеИмя + "." + СтрокаОбъект.Имя; + + ЭтоРегистр = (СтрНайти(ТипМетаданных.Ключ, "Регистры") > 0); + // Добавление стандартных реквизитов. + ДобавитьСвойства(ОбъектМетаданных, СтрокаОбъект, "СтандартныеРеквизиты", ЕстьОбрабатываемыеСвойства); + // Добавление реквизитов. + ДобавитьСвойства(ОбъектМетаданных, СтрокаОбъект, "Реквизиты", ЕстьОбрабатываемыеСвойства); + + Если Не ЭтоРегистр Тогда + Для Каждого ТабличнаяЧасть Из ОбъектМетаданных.ТабличныеЧасти Цикл + ДобавитьСвойства(ТабличнаяЧасть, СтрокаОбъект, "ТабличнаяЧасть", ЕстьОбрабатываемыеСвойства); + КонецЦикла; + Иначе + ДобавитьСвойства(ОбъектМетаданных, СтрокаОбъект, "Ресурсы", ЕстьОбрабатываемыеСвойства); + ДобавитьСвойства(ОбъектМетаданных, СтрокаОбъект, "Измерения", ЕстьОбрабатываемыеСвойства); + КонецЕсли; + + Если ТипМетаданных.Ключ = "ПланыСчетов" Тогда + ДобавитьСвойства(ОбъектМетаданных, СтрокаОбъект, "ПризнакиУчета", ЕстьОбрабатываемыеСвойства); + КонецЕсли; + + Если Не ЕстьОбрабатываемыеСвойства Тогда + СтрокаДерева.Строки.Удалить(СтрокаОбъект); // У объекта нет реквизитов, которые можно обработать. + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьСвойства(ОбъектМетаданных, СтрокаДерева, Тип, ЕстьОбрабатываемыеСвойства) + + Если Тип = "СтандартныеРеквизиты" Тогда + Имя = Тип; + Синоним = НСтр("ru = 'Стандартные реквизиты'"); + Коллекция = ОбъектМетаданных[Тип]; + ИначеЕсли Тип = "ТабличнаяЧасть" Тогда + Имя = ОбъектМетаданных.Имя; + Синоним = ОбъектМетаданных.Синоним; + Коллекция = ОбъектМетаданных.Реквизиты; + Иначе + Имя = Тип; + Если Тип = "ПризнакиУчета" Тогда + Синоним = НСтр("ru = 'Признаки учета'"); + Иначе + Синоним = Тип; + КонецЕсли; + Коллекция = ОбъектМетаданных[Тип]; + КонецЕсли; + + СтрокаЭлементовДобавлена = Ложь; + Для Каждого ЭлементКоллекции Из Коллекция Цикл + + Если Тип = "СтандартныеРеквизиты" + И ЭлементКоллекции.Имя <> "Наименование" Тогда + Продолжить; + КонецЕсли; + + Если Не ДопустимыйТип(ЭлементКоллекции.Тип) Тогда + Продолжить; + КонецЕсли; + + Если Не СтрокаЭлементовДобавлена Тогда + СтрокаЭлементов = СтрокаДерева.Строки.Добавить(); + СтрокаЭлементов.Имя = Имя; + СтрокаЭлементов.Представление = Синоним; + СтрокаЭлементов.Картинка = КартинкиОбъектов[Тип]; + СтрокаЭлементов.ПолноеИмя = СтрокаДерева.ПолноеИмя + "." + Имя; + СтрокаЭлементов.Тип = ?(Тип = "ТабличнаяЧасть", Тип, ""); + СтрокаЭлементовДобавлена = Истина; + КонецЕсли; + + ТипОбъекта = ?(Тип = "ТабличнаяЧасть", "РеквизитТабличнойЧасти", Тип); + Если ТипОбъекта = "Ресурсы" И СтрокаДерева.Тип = "РегистрыБухгалтерии" И ЭлементКоллекции.Балансовый Тогда + ТипОбъекта = ТипОбъекта + "Балансовый"; + КонецЕсли; + + ПредставлениеСвойства = ?(ЭлементКоллекции.Синоним = "", ЭлементКоллекции.Имя, ЭлементКоллекции.Синоним); + + СтрокаСвойство = СтрокаЭлементов.Строки.Добавить(); + СтрокаСвойство.Имя = ЭлементКоллекции.Имя; + СтрокаСвойство.Представление = ПредставлениеСвойства + ПредставлениеТиповСвойства(ЭлементКоллекции.Тип); + СтрокаСвойство.Картинка = КартинкиОбъектов[ТипОбъекта]; + СтрокаСвойство.Тип = ТипОбъекта; + СтрокаСвойство.ТипЗначения = ЭлементКоллекции.Тип; + СтрокаСвойство.ПолноеИмя = СтрокаЭлементов.ПолноеИмя + "." + ЭлементКоллекции.Имя; + СтрокаСвойство.ПредставлениеПравилаОбработки = НСтр("ru = 'По умолчанию'"); + + ЕстьОбрабатываемыеСвойства = Истина; + + КонецЦикла; + +КонецПроцедуры + +Функция ПредставлениеТиповСвойства(ТипЗначения) + МассивТипов = ТипЗначения.Типы(); + Представление = ""; + Для Каждого Тип Из МассивТипов Цикл + Если Представление = "" Тогда + Представление = Строка(Тип); + Иначе + Представление = Представление + ", " + Строка(Тип); + КонецЕсли; + КонецЦикла; + + Представление = " (" + Представление + ")"; + + Возврат Представление; +КонецФункции + +Функция ДопустимыйТип(ТипЗначения) + + Если ТипЗначения.СодержитТип(Тип("Строка")) + Или ТипЗначения.СодержитТип(Тип("Булево")) + Или ТипЗначения.СодержитТип(Тип("Число")) + Или ТипЗначения.СодержитТип(Тип("Дата")) + Или ТипЗначения.СодержитТип(Тип("ХранилищеЗначения")) Тогда + Возврат Истина; + Иначе + Возврат Ложь; + КонецЕсли; + +КонецФункции + +Функция ЭлементИмениПоТипуМетаданных(ТипМетаданных) + + Соответствие = Новый Соответствие; + Соответствие.Вставить("Константы", "Константа"); + Соответствие.Вставить("Справочники", "Справочник"); + Соответствие.Вставить("Документы", "Документ"); + Соответствие.Вставить("ПланыВидовХарактеристик", "ПланВидовХарактеристик"); + Соответствие.Вставить("ПланыСчетов", "ПланСчетов"); + Соответствие.Вставить("ПланыВидовРасчета", "ПланВидовРасчета"); + Соответствие.Вставить("РегистрыСведений", "РегистрСведений"); + Соответствие.Вставить("РегистрыНакопления", "РегистрНакопления"); + Соответствие.Вставить("РегистрыБухгалтерии", "РегистрБухгалтерии"); + Соответствие.Вставить("РегистрыРасчета", "РегистрРасчета"); + Соответствие.Вставить("БизнесПроцессы", "БизнесПроцесс"); + Соответствие.Вставить("Задачи", "Задача"); + + Возврат Соответствие[ТипМетаданных]; + +КонецФункции + +Процедура УстановитьНастройки(МассивНастроек, ДеревоОбрабатываемыхОбъектов, ВключаяПерсональные = Истина) Экспорт + + Если МассивНастроек.Количество() = 1 Тогда + СохраненныеНастройки = ЗначениеИзСтрокиXML(МассивНастроек[0]); + Иначе + СохраненныеНастройки = Неопределено; + ОбъединитьТаблицы(СохраненныеНастройки, МассивНастроек); + КонецЕсли; + + Если СохраненныеНастройки <> Неопределено Тогда + Для Каждого СохраненнаяНастройка Из СохраненныеНастройки Цикл + НайденнаяСтрока = ДеревоОбрабатываемыхОбъектов.Строки.Найти(СохраненнаяНастройка.ПолноеИмя, "ПолноеИмя", Истина); + Если НайденнаяСтрока = Неопределено Тогда + Продолжить; + КонецЕсли; + + ЗаполнитьЗначенияСвойств(НайденнаяСтрока, СохраненнаяНастройка); + КонецЦикла; + КонецЕсли; + + // Отметка сведений о персональных данных. + Если ВключаяПерсональные И Метаданные.ОбщиеМодули.Найти("ЗащитаПерсональныхДанныхПереопределяемый") <> Неопределено Тогда + МодульЗащитаПерсональныхДанных = Вычислить("ЗащитаПерсональныхДанныхПереопределяемый"); + + // Таблица сведений о персональных данных. + ТаблицаСведений = Новый ТаблицаЗначений; + ТаблицаСведений.Колонки.Добавить("Объект", Новый ОписаниеТипов("Строка")); + ТаблицаСведений.Колонки.Добавить("ПоляРегистрации", Новый ОписаниеТипов("Строка")); + ТаблицаСведений.Колонки.Добавить("ПоляДоступа", Новый ОписаниеТипов("Строка")); + ТаблицаСведений.Колонки.Добавить("ОбластьДанных", Новый ОписаниеТипов("Строка")); + + МодульЗащитаПерсональныхДанных.ЗаполнитьСведенияОПерсональныхДанных(ТаблицаСведений); + + Для Каждого СтрокаСведения Из ТаблицаСведений Цикл + СтрокаОбъекта = ДеревоОбрабатываемыхОбъектов.Строки.Найти(СтрокаСведения.Объект, "ПолноеИмя", Истина); + Если СтрокаОбъекта = Неопределено Тогда + Продолжить; + КонецЕсли; + ПоляДоступа = СтрокаСведения.ПоляДоступа; + МассивПолейДоступа = СтрРазделить(ПоляДоступа, ","); + + Для Каждого ПолеДоступа Из МассивПолейДоступа Цикл + ПолеДоступа = СокрЛП(ПолеДоступа); + СтрокаПолеДоступа = СтрокаОбъекта.Строки.Найти(ПолеДоступа, "Имя", Истина); + Если СтрокаПолеДоступа <> Неопределено Тогда + СтрокаПолеДоступа.Пометка = 1; + КонецЕсли; + КонецЦикла; + КонецЦикла; + КонецЕсли; + + Для Каждого ОбрабатываемыйОбъект Из ДеревоОбрабатываемыхОбъектов.Строки Цикл + ОбновитьФлажкиДерева(ОбрабатываемыйОбъект); + КонецЦикла; + +КонецПроцедуры + +Процедура ОбъединитьТаблицы(ТаблицаПриемник, МассивНастроек) + + Для Каждого СтрокаНастроек Из МассивНастроек Цикл + ТаблицаНастроек = ЗначениеИзСтрокиXML(СтрокаНастроек); + Если ТаблицаПриемник = Неопределено Тогда + ТаблицаПриемник = ТаблицаНастроек.Скопировать(); + Иначе + Для Каждого СтрокаТаблицы Из ТаблицаНастроек Цикл + Если ТаблицаПриемник.Найти(СтрокаТаблицы.ПолноеИмя, "ПолноеИмя") = Неопределено Тогда + ЗаполнитьЗначенияСвойств(ТаблицаПриемник.Добавить(), СтрокаТаблицы); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ОбновитьФлажкиДерева(Родитель) + + ДочерниеЭлементы = Родитель.Строки; + ПометкаРодителя = Неопределено; + + Для Каждого СтрокаДерева Из ДочерниеЭлементы Цикл + Если СтрокаДерева.Строки.Количество() > 0 Тогда + ОбновитьФлажкиДерева(СтрокаДерева); + Иначе + Возврат; + КонецЕсли; + + ЕстьОтмеченные = Ложь; + ЕстьНеОтмеченные = Ложь; + ЕстьПолуотмеченные = Ложь; + Для Каждого Элемент Из СтрокаДерева.Строки Цикл + ЕстьОтмеченные = ЕстьОтмеченные Или (Элемент.Пометка = 1); + ЕстьНеОтмеченные = ЕстьНеОтмеченные Или (Элемент.Пометка = 0); + ЕстьПолуотмеченные = ЕстьПолуотмеченные Или (Элемент.Пометка = 2); + КонецЦикла; + + Если ЕстьНеОтмеченные И Не ЕстьОтмеченные И Не ЕстьПолуотмеченные Тогда + СтрокаДерева.Пометка = 0; + Если ПометкаРодителя = 1 Тогда + ПометкаРодителя = 2; + КонецЕсли; + ИначеЕсли ЕстьОтмеченные И Не ЕстьНеОтмеченные И Не ЕстьПолуотмеченные Тогда + СтрокаДерева.Пометка = 1; + Если ПометкаРодителя = 0 Тогда + ПометкаРодителя = 2; + КонецЕсли; + Иначе + СтрокаДерева.Пометка = 2; + ПометкаРодителя = 2; + КонецЕсли; + + Если ПометкаРодителя = Неопределено Тогда + ПометкаРодителя = СтрокаДерева.Пометка; + КонецЕсли; + КонецЦикла; + + Родитель.Пометка = ПометкаРодителя; + +КонецПроцедуры + +Процедура ЗаполнитьКартинки() + + КартинкиОбъектов = Новый Соответствие; + КартинкиОбъектов.Вставить("Константы", БиблиотекаКартинок.Константа); + КартинкиОбъектов.Вставить("Справочники", БиблиотекаКартинок.Справочник); + КартинкиОбъектов.Вставить("Документы", БиблиотекаКартинок.Документ); + КартинкиОбъектов.Вставить("ПланыВидовХарактеристик", БиблиотекаКартинок.ПланВидовХарактеристик); + КартинкиОбъектов.Вставить("ПланыСчетов", БиблиотекаКартинок.ПланСчетов); + КартинкиОбъектов.Вставить("ПланыВидовРасчета", БиблиотекаКартинок.ПланВидовРасчета); + КартинкиОбъектов.Вставить("РегистрыСведений", БиблиотекаКартинок.РегистрСведений); + КартинкиОбъектов.Вставить("РегистрыНакопления", БиблиотекаКартинок.РегистрНакопления); + КартинкиОбъектов.Вставить("РегистрыБухгалтерии", БиблиотекаКартинок.РегистрБухгалтерии); + КартинкиОбъектов.Вставить("РегистрыРасчета", БиблиотекаКартинок.РегистрРасчета); + КартинкиОбъектов.Вставить("БизнесПроцессы", БиблиотекаКартинок.БизнесПроцесс); + КартинкиОбъектов.Вставить("Задачи", БиблиотекаКартинок.Задача); + КартинкиОбъектов.Вставить("Реквизиты", БиблиотекаКартинок.Реквизит); + КартинкиОбъектов.Вставить("СтандартныеРеквизиты", БиблиотекаКартинок.Реквизит); + КартинкиОбъектов.Вставить("ТабличнаяЧасть", БиблиотекаКартинок.ВложеннаяТаблица); + КартинкиОбъектов.Вставить("Ресурсы", БиблиотекаКартинок.Ресурс); + КартинкиОбъектов.Вставить("Измерения", БиблиотекаКартинок.Измерение); + +КонецПроцедуры + +Функция ЗначениеИзСтрокиXML(СтрокаXML) + + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(СтрокаXML); + + Возврат СериализаторXDTO.ПрочитатьXML(ЧтениеXML); +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Прочие процедуры и функции. + +Процедура ОбработатьКонстанты(ОбъектМетаданных) + + ЗначениеКонстанты = Константы[ОбъектМетаданных.Имя].Получить(); + МенеджерКонстанты = Константы[ОбъектМетаданных.Имя].СоздатьМенеджерЗначения(); + Обработано = Истина; + ОбработатьСвойство(ЗначениеКонстанты, ОбъектМетаданных, Обработано); + + Если Обработано Тогда + МенеджерКонстанты.Значение = ЗначениеКонстанты; + ЗаписатьДанные(МенеджерКонстанты); + КонецЕсли; + +КонецПроцедуры + +Процедура ОбработатьСвойство(Свойство, ПараметрыСвойства, Обработано) + + Обработано = Истина; + ТипСвойства = ТипЗнч(Свойство); + Если ТипСвойства = Тип("Строка") Тогда + ОбработатьСтроку(Свойство, ПараметрыСвойства, Обработано); + ИначеЕсли ТипСвойства = Тип("Число") Тогда + ОбработатьЧисло(Свойство, ПараметрыСвойства, Обработано); + ИначеЕсли ТипСвойства = Тип("Булево") Тогда + ОбработатьБулево(Свойство, ПараметрыСвойства, Обработано); + ИначеЕсли ТипСвойства = Тип("Дата") Тогда + ОбработатьДату(Свойство, ПараметрыСвойства, Обработано); + ИначеЕсли ТипСвойства = Тип("ХранилищеЗначения") Тогда + ОбработатьХранилищеЗначений(Свойство, ПараметрыСвойства, Обработано); + Иначе + Обработано = Ложь; + КонецЕсли; + +КонецПроцедуры + +Процедура ОбработатьСтроку(Свойство, ПараметрыСвойства, Обработано) + + Индекс = ГенераторСлучайныхЧисел.СлучайноеЧисло(100000, 999999); + Индекс = Строка(Индекс); + Индекс = СтрЗаменить(Индекс, Символы.НПП, ""); + + ПравилоОбработки = ПравилоСтрока; + Если ПараметрыСвойства.ПравилоОбработки.Количество() > 0 Тогда + ПараметрыОбработкиСтроки = ПараметрыСвойства.ПравилоОбработки.НайтиПоЗначению("Строка"); + Если ПараметрыОбработкиСтроки <> Неопределено Тогда + ПравилоОбработки = ПараметрыОбработкиСтроки.Представление; + КонецЕсли; + КонецЕсли; + + Если ПрограммныйВызов + И ПараметрыСвойства.Имя = "Наименование" Тогда + ПравилоОбработки = "ИмяОбъектаИндекс" + КонецЕсли; + + Если ПравилоОбработки = "Очистить" Тогда + Свойство = ""; + ИначеЕсли ПравилоОбработки = "СлучайноеЗначение" Тогда + СлучайнаяСтрока = Новый УникальныйИдентификатор; + Свойство = СтрЗаменить(СлучайнаяСтрока, "-", ""); + ИначеЕсли ПравилоОбработки = "ИмяПоляИндекс" Тогда + Свойство = ПараметрыСвойства.Имя + Индекс; + ИначеЕсли ПравилоОбработки = "ИмяОбъектаИндекс" Тогда + ИмяОбъекта = СтрРазделить(ПараметрыСвойства.ПолноеИмя, ".")[1]; + Свойство = ИмяОбъекта + Индекс; + Иначе + Обработано = Ложь; + КонецЕсли; + +КонецПроцедуры + +Процедура ОбработатьЧисло(Свойство, ПараметрыСвойства, Обработано) + + ПравилоОбработки = ПравилоЧисло; + Если ПараметрыСвойства.ПравилоОбработки.Количество() > 0 Тогда + ПараметрыОбработкиЧисел = ПараметрыСвойства.ПравилоОбработки.НайтиПоЗначению("Число"); + Если ПараметрыОбработкиЧисел <> Неопределено Тогда + ПравилоОбработки = ПараметрыОбработкиЧисел.Представление; + КонецЕсли; + КонецЕсли; + + Если ПравилоОбработки = "Очистить" Тогда + Свойство = 0; + ИначеЕсли СтрНайти(ПравилоОбработки, "Умножить") > 0 Тогда + ПравилоМассив = СтрРазделить(ПравилоОбработки, ";"); + Свойство = Свойство * Число(ПравилоМассив[1]); + ИначеЕсли СтрНайти(ПравилоОбработки, "Разделить") > 0 Тогда + ПравилоМассив = СтрРазделить(ПравилоОбработки, ";"); + Свойство = Свойство / Число(ПравилоМассив[1]); + ИначеЕсли СтрНайти(ПравилоОбработки, "Прибавить") > 0 Тогда + ПравилоМассив = СтрРазделить(ПравилоОбработки, ";"); + Свойство = Свойство + Число(ПравилоМассив[1]); + ИначеЕсли СтрНайти(ПравилоОбработки, "Вычесть") > 0 Тогда + ПравилоМассив = СтрРазделить(ПравилоОбработки, ";"); + Свойство = Свойство - Число(ПравилоМассив[1]); + ИначеЕсли СтрНайти(ПравилоОбработки, "СлучайноеЗначение") > 0 Тогда + Свойство = ГенераторСлучайныхЧисел.СлучайноеЧисло(1, 1000000); + Иначе + Обработано = Ложь; + КонецЕсли; + +КонецПроцедуры + +Процедура ОбработатьБулево(Свойство, ПараметрыСвойства, Обработано) + + ПравилоОбработки = ПравилоБулево; + Если ПараметрыСвойства.ПравилоОбработки.Количество() > 0 Тогда + ПараметрыОбработкиБулево = ПараметрыСвойства.ПравилоОбработки.НайтиПоЗначению("Булево"); + Если ПараметрыОбработкиБулево <> Неопределено Тогда + ПравилоОбработки = ПараметрыОбработкиБулево.Представление; + КонецЕсли; + КонецЕсли; + + Если ПравилоОбработки = "Инвертировать" Тогда + Свойство = Не Свойство; + Иначе + Обработано = Ложь; + КонецЕсли; + +КонецПроцедуры + +Процедура ОбработатьДату(Свойство, ПараметрыСвойства, Обработано) + + ПравилоОбработки = ПравилоДата; + Если ПараметрыСвойства.ПравилоОбработки.Количество() > 0 Тогда + ПараметрыОбработкиДат = ПараметрыСвойства.ПравилоОбработки.НайтиПоЗначению("Булево"); + Если ПараметрыОбработкиДат <> Неопределено Тогда + ПравилоОбработки = ПараметрыОбработкиДат.Представление; + КонецЕсли; + КонецЕсли; + + Если ПрограммныйВызов = Истина Тогда + Свойство = Неопределено; + Возврат; + КонецЕсли; + + СуткиВСекундах = 60 * 60 * 24; + Если СтрНайти(ПравилоОбработки, "Прибавить") > 0 Тогда + ПравилоМассив = СтрРазделить(ПравилоОбработки, ";"); + Свойство = Свойство + СуткиВСекундах * Число(ПравилоМассив[1]); + ИначеЕсли СтрНайти(ПравилоОбработки, "Вычесть") > 0 Тогда + ПравилоМассив = СтрРазделить(ПравилоОбработки, ";"); + Свойство = Свойство - СуткиВСекундах * Число(ПравилоМассив[1]); + ИначеЕсли СтрНайти(ПравилоОбработки, "СлучайноеЗначение") > 0 Тогда + Разница = ГенераторСлучайныхЧисел.СлучайноеЧисло(1, 730); + Свойство = Свойство - СуткиВСекундах * Разница; + Иначе + Обработано = Ложь; + КонецЕсли; + +КонецПроцедуры + +Процедура ОбработатьХранилищеЗначений(Свойство, ПараметрыСвойства, Обработано) + + ПравилоОбработки = ПравилоХранилищеЗначений; + Если ПараметрыСвойства.ПравилоОбработки.Количество() > 0 Тогда + ПараметрыОбработкиХранилищаЗначений = ПараметрыСвойства.ПравилоОбработки.НайтиПоЗначению("Булево"); + Если ПараметрыОбработкиХранилищаЗначений <> Неопределено Тогда + ПравилоОбработки = ПараметрыОбработкиХранилищаЗначений.Представление; + КонецЕсли; + КонецЕсли; + + Если ПравилоОбработки = "Очистить" Тогда + Свойство = Неопределено; + Иначе + Обработано = Ложь; + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаписатьДанные(Знач Данные, Знач РегистрироватьНаУзлахПлановОбмена = Ложь, + Знач ВключитьБизнесЛогику = Ложь) Экспорт + + Данные.ОбменДанными.Загрузка = Не ВключитьБизнесЛогику; + Если Не РегистрироватьНаУзлахПлановОбмена Тогда + Данные.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + Данные.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; + КонецЕсли; + + Данные.Записать(); + +КонецПроцедуры + +Функция ПравилаОбработкиПоУмолчанию() Экспорт + + Правила = Новый Структура; + Правила.Вставить("Строка", "СлучайноеЗначение"); + Правила.Вставить("Дата", "СлучайноеЗначение"); + Правила.Вставить("Булево", "НеИзменять"); + Правила.Вставить("ХранилищаЗначений", "Очистить"); + Правила.Вставить("Числа", "СлучайноеЗначение"); + + Возврат Правила; + +КонецФункции + +Процедура УстановитьПравилаОбработкиПрограммныйВызов() + + ПравилоСтрока = "Очистить"; + ПравилоЧисло = "Очистить"; + ПравилоБулево = "НеИзменять"; + ПравилоДата = "НеИзменять"; + ПравилоХранилищеЗначений = "Очистить"; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Templates/НастройкиБСП/Template.bin b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Templates/НастройкиБСП/Template.bin new file mode 100644 index 000000000..033a21748 --- /dev/null +++ b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/Templates/НастройкиБСП/Template.bin @@ -0,0 +1,180 @@ + + + Пометка + + + + ПолноеИмя + + + + ПравилоОбработки + + + + ПредставлениеПравилаОбработки + + + + 1 + Справочник.ЗначенияСвойствОбъектов.СтандартныеРеквизиты + + + -1 + + + + + 1 + Справочник.ЗначенияСвойствОбъектов.СтандартныеРеквизиты.Наименование + + + -1 + + По умолчанию + + + 1 + Справочник.ЗначенияСвойствОбъектовИерархия.СтандартныеРеквизиты + + + -1 + + + + + 1 + Справочник.ЗначенияСвойствОбъектовИерархия.СтандартныеРеквизиты.Наименование + + + -1 + + По умолчанию + + + 1 + Документ.СогласиеНаОбработкуПерсональныхДанных.Реквизиты.ФИОСубъекта + + + -1 + + По умолчанию + + + 1 + Документ.СогласиеНаОбработкуПерсональныхДанных.Реквизиты.АдресСубъекта + + + -1 + + По умолчанию + + + 1 + Документ.СогласиеНаОбработкуПерсональныхДанных.Реквизиты.ПаспортныеДанные + + + -1 + + По умолчанию + + + 1 + Документ.СогласиеНаОбработкуПерсональныхДанных.Реквизиты.СрокДействия + + + -1 + + По умолчанию + + + 1 + ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.СтандартныеРеквизиты + + + -1 + + + + + 1 + ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.СтандартныеРеквизиты.Наименование + + + -1 + + По умолчанию + + + 1 + РегистрСведений.БезопасноеХранилищеДанных + + + -1 + + + + + 1 + РегистрСведений.БезопасноеХранилищеДанных.Ресурсы + + + -1 + + + + + 1 + РегистрСведений.БезопасноеХранилищеДанных.Ресурсы.Данные + + + -1 + + По умолчанию + + + 1 + РегистрСведений.ДополнительныеСведения + + + -1 + + + + + 1 + РегистрСведений.ДополнительныеСведения.Ресурсы + + + -1 + + + + + 1 + РегистрСведений.ДополнительныеСведения.Ресурсы.Значение + + + -1 + + По умолчанию + + + 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..57f1ae8f0 --- /dev/null +++ b/SSL/src/DataProcessors/СкрытиеКонфиденциальнойИнформации/СкрытиеКонфиденциальнойИнформации.mdo @@ -0,0 +1,110 @@ + + + + + + + СкрытиеКонфиденциальнойИнформации + + ru + Скрытие конфиденциальной информации + + true + DataProcessor.СкрытиеКонфиденциальнойИнформации.Form.Форма + + + ru + + + + ПравилоСтрока + + ru + Правило строка + + + String + + + + + + + ПравилоЧисло + + ru + Правило число + + + String + + + + + + + ПравилоБулево + + ru + Правило булево + + + String + + + + + + + ПравилоДата + + ru + Правило дата + + + String + + + + + + + ПравилоХранилищеЗначений + + ru + Правило хранилище значений + + + String + + + + + + + Форма + + ru + Форма + + PersonalComputer + MobileDevice + + + ВыборПравилОбработки + + ru + Выбор правил обработки + + PersonalComputer + MobileDevice + + + НастройкиБСП + + ru + Настройки БСП + + BinaryData + + diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Form.form b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Form.form index db01dcb44..89fdc8a9f 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Form.form +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Form.form @@ -944,6 +944,7 @@ Vertical auto + false @@ -1188,6 +1189,7 @@ Vertical auto + false @@ -1513,6 +1515,7 @@ Vertical auto + false @@ -1839,6 +1842,7 @@ Vertical auto + false true diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl index 017cdb123..f032838ca 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/РезультатАвтоматическогоСопоставления/Module.bsl @@ -185,7 +185,7 @@ Отказ = Ложь; ПропуститьСтраницу = Ложь; - А = Вычислить(ИмяПроцедуры); + РезультатВычисления = Вычислить(ИмяПроцедуры); Если Отказ Тогда @@ -235,7 +235,7 @@ Отказ = Ложь; ПерейтиДалее = Истина; - А = Вычислить(ИмяПроцедуры); + РезультатВычисления = Вычислить(ИмяПроцедуры); Если Отказ Тогда diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form index b74d502ec..8783d6361 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Form.form @@ -1759,6 +1759,7 @@ Vertical auto + false @@ -2003,6 +2004,7 @@ Vertical auto + false @@ -2247,6 +2249,7 @@ Vertical auto + false true diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl index 521cb42f7..4bc24cd68 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Forms/Форма/Module.bsl @@ -34,6 +34,28 @@ ОбработкаОбъект.Конструктор(); ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); + // Удалим из списка возможных полей поиска, реквизиты с неограниченной длинной строки. + ТипОбъектаМетаданных = Метаданные.НайтиПоТипу(Тип(Объект.ТипПриемникаСтрокой)); + + Если ТипОбъектаМетаданных <> Неопределено Тогда + + ИндексСтроки = Объект.СписокПолейТаблицы.Количество() - 1; + + Пока ИндексСтроки >= 0 Цикл + + Элемент = Объект.СписокПолейТаблицы[ИндексСтроки]; + ИндексСтроки = ИндексСтроки - 1; + РеквизитОбъектаМетаданных = ТипОбъектаМетаданных.Реквизиты.Найти(Элемент.Значение); + + Если РеквизитОбъектаМетаданных <> Неопределено + И РеквизитОбъектаМетаданных.Тип = Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(0)) Тогда + Объект.СписокПолейТаблицы.Удалить(Элемент); + Продолжить; + КонецЕсли; + + КонецЦикла; + КонецЕсли; + // Список отборов по статусу: // // СтатусСопоставления - Число: @@ -534,7 +556,7 @@ Отказ = Ложь; ПропуститьСтраницу = Ложь; - А = Вычислить(ИмяПроцедуры); + РезультатВычисления = Вычислить(ИмяПроцедуры); Если Отказ Тогда @@ -584,7 +606,7 @@ Отказ = Ложь; ПерейтиДалее = Истина; - А = Вычислить(ИмяПроцедуры); + РезультатВычисления = Вычислить(ИмяПроцедуры); Если Отказ Тогда diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Help/ru.html b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Help/ru.html index 60ae9afed..7b987a14a 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 45c04590f..e28310a50 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ManagerModule.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ManagerModule.bsl @@ -12,7 +12,7 @@ // Для внутреннего использования. // -Функция РезультатСопоставленияОбъектов(Параметры) Экспорт +Функция РезультатСопоставленияОбъектов(Параметры) СопоставлениеОбъектов = Обработки.СопоставлениеОбъектовИнформационныхБаз.Создать(); ОбменДаннымиСервер.ЗагрузитьКонтекстОбъекта(Параметры.КонтекстОбъекта, СопоставлениеОбъектов); @@ -84,7 +84,7 @@ // Для внутреннего использования. // -Функция РезультатАвтоматическогоСопоставленияОбъектов(Параметры) Экспорт +Функция РезультатАвтоматическогоСопоставленияОбъектов(Параметры) СопоставлениеОбъектов = Обработки.СопоставлениеОбъектовИнформационныхБаз.Создать(); ОбменДаннымиСервер.ЗагрузитьКонтекстОбъекта(Параметры.КонтекстОбъекта, СопоставлениеОбъектов); diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl index d6f57a915..efc115338 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl @@ -1084,8 +1084,30 @@ | ЛЕВОЕ СОЕДИНЕНИЕ | ТаблицаСопоставленныхОбъектов КАК ТаблицаСопоставленныхОбъектов | ПО - | ТаблицаИсточника.Ссылка = ТаблицаСопоставленныхОбъектов.Ссылка - | ИЛИ ТаблицаИсточника.УникальныйИдентификатор = ТаблицаСопоставленныхОбъектов.УникальныйИдентификаторИсточника + | ТаблицаИсточника.Ссылка = ТаблицаСопоставленныхОбъектов.Ссылка + | ГДЕ + | ТаблицаСопоставленныхОбъектов.Ссылка ЕСТЬ NULL + | + | ОБЪЕДИНИТЬ + | + | ВЫБРАТЬ + | + | #ТаблицаИсточникаЭтоГруппа#, + | NULL, + | ТаблицаИсточника.Ссылка, + | #ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаНеСопоставленныхОбъектовИсточника_ВложенныйЗапрос1# + | + | // {ДАННЫЕ РЕГИСТРА СОПОСТАВЛЕНИЯ} + | NULL, + | ТаблицаИсточника.УникальныйИдентификатор, + | &ТипИсточника, + | &ТипПриемника + | ИЗ + | ТаблицаИсточника КАК ТаблицаИсточника + | ЛЕВОЕ СОЕДИНЕНИЕ + | ТаблицаСопоставленныхОбъектов КАК ТаблицаСопоставленныхОбъектов + | ПО + | ТаблицаИсточника.УникальныйИдентификатор = ТаблицаСопоставленныхОбъектов.УникальныйИдентификаторИсточника | ГДЕ | ТаблицаСопоставленныхОбъектов.Ссылка ЕСТЬ NULL | ) КАК ВложенныйЗапрос @@ -1169,6 +1191,7 @@ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовПриемникаПоРегистру_ВложенныйЗапрос#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ТаблицаПриемника.# КАК ПриемникПолеNN, NULL КАК ИсточникПолеNN,")); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаСопоставленныхОбъектовПоНеутвержденнымСвязям_ВложенныйЗапрос#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ВЫРАЗИТЬ(ТаблицаНеутвержденныхСвязей.УникальныйИдентификаторИсточника КАК [ИмяТаблицыПриемника]).# КАК ПриемникПолеNN, ТаблицаИсточника.# КАК ИсточникПолеNN,")); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаНеСопоставленныхОбъектовИсточника_ВложенныйЗапрос#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ТаблицаИсточника.# КАК ИсточникПолеNN, NULL КАК ПриемникПолеNN,")); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаНеСопоставленныхОбъектовИсточника_ВложенныйЗапрос1#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ТаблицаИсточника.#, NULL,")); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЬЗОВАТЕЛЬСКИЕ_ПОЛЯ_ТаблицаНеСопоставленныхОбъектовПриемника_ВложенныйЗапрос#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "NULL КАК ИсточникПолеNN, ТаблицаПриемника.Ссылка.# КАК ПриемникПолеNN,")); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПОЛЕ_СОРТИРОВКИ_Источник#", ПолучитьПользовательскиеПоля(ПользовательскиеПоля, "ИсточникПолеNN КАК ПолеСортировкиNN,")); diff --git a/SSL/src/DataProcessors/СписокРеспондента/Forms/АрхивАнкет/Help/ru.html b/SSL/src/DataProcessors/СписокРеспондента/Forms/АрхивАнкет/Help/ru.html index 4a56a0a12..98b5807c2 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/Форма/Form.form b/SSL/src/DataProcessors/СписокРеспондента/Forms/Форма/Form.form index cdd729f1b..0c1956aca 100644 --- a/SSL/src/DataProcessors/СписокРеспондента/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/СписокРеспондента/Forms/Форма/Form.form @@ -287,6 +287,7 @@ Vertical auto + false @@ -391,6 +392,7 @@ Page auto + false true diff --git a/SSL/src/DataProcessors/СписокРеспондента/Help/ru.html b/SSL/src/DataProcessors/СписокРеспондента/Help/ru.html index 4ba6c2b41..17a13ee1f 100644 --- a/SSL/src/DataProcessors/СписокРеспондента/Help/ru.html +++ b/SSL/src/DataProcessors/СписокРеспондента/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

      diff --git a/SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаТекущихДел/Form.form b/SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаТекущихДел/Form.form index 0606d1e28..a40a1eedb 100644 --- a/SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаТекущихДел/Form.form +++ b/SSL/src/DataProcessors/ТекущиеДела/Forms/НастройкаТекущихДел/Form.form @@ -440,6 +440,7 @@ Vertical auto + false @@ -643,6 +644,7 @@ Vertical auto + false true diff --git a/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Form.form b/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Form.form index c335be7d8..8e7681b44 100644 --- a/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Form.form @@ -338,24 +338,6 @@ - - ТекущиеДелаВХранилище - - <key>ru</key> - <value>Текущие дела в хранилище</value> - - 1 - - String - - - - true - - - true - - НастройкиАвтообновления @@ -388,21 +370,6 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>ИдентификаторЗадания</name> - <title> - <key>ru</key> - <value>Идентификатор задания</value> - - 5 - - - true - - - true - - ТолькоОбновлениеДел @@ -436,14 +403,30 @@ </edit> </attributes> <attributes> - <name>ВыполнениеПрерваноНаЗапуске</name> + <name>ДлительнаяОперация</name> <title> <key>ru</key> - <value>Выполнение прервано на запуске</value> + <value>Длительная операция</value> - 8 + 9 + + + true + + + true + + + + ТекущиеДелаВХранилище + + <key>ru</key> + <value>Текущие дела в хранилище</value> + + 1 - Boolean + String + true diff --git a/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl index 0c0d96522..b3d561cf5 100644 --- a/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ТекущиеДела/Forms/Форма/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаСервере Перем ВыводимыеДелаИРазделы; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -12,25 +16,25 @@ ИнтерфейсТакси = (ТекущийВариантИнтерфейсаКлиентскогоПриложения() = ВариантИнтерфейсаКлиентскогоПриложения.Такси); - ЗапуститьФоновоеЗаданиеНаСервере(ВыполнениеПрерваноНаЗапуске); - + ДлительнаяОперация = СформироватьСписокТекущихДелВФоне(); ЗагрузитьНастройкиАвтообновления(); Элементы.ФормаНастроить.Доступность = Ложь; - Если Не ВыполнениеПрерваноНаЗапуске Тогда - Элементы.ФормаОбновить.Доступность = Ложь; - КонецЕсли; - - Если Не ПравоДоступа("СохранениеДанныхПользователя", Метаданные) Тогда - Элементы.ФормаНастроить.Видимость = Ложь; - КонецЕсли; + Элементы.ФормаОбновить.Доступность = (ДлительнаяОперация = Неопределено); + Элементы.ФормаНастроить.Видимость = ПравоДоступа("СохранениеДанныхПользователя", Метаданные); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 2); + Если ДлительнаяОперация <> Неопределено Тогда + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; + ПараметрыОжидания.Интервал = 2; // Быстрее стандартного интервала, т.к. выводится на начальной странице. + ОповещениеОЗавершении = Новый ОписаниеОповещения("СформироватьСписокТекущихДелВФонеЗавершение", ЭтотОбъект); + ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания); + КонецЕсли; КонецПроцедуры @@ -49,7 +53,7 @@ &НаКлиенте Процедура ПриЗакрытии() - ОтключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания"); + ОтключитьОбработчикОжидания("ОбновитьТекущиеДелаАвтоматически"); ДействияПриЗакрытииПанелиТекущихДел(); КонецПроцедуры @@ -73,14 +77,14 @@ КонецПроцедуры &НаКлиенте -Процедура Подключаемый_ОбработкаНажатияНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) +Процедура Подключаемый_ОбработкаНажатияНавигационнойСсылки(Элемент, Ссылка, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ОповещениеОЗакрытии = Новый ОписаниеОповещения("ОбработатьНажатиеНаГиперссылкуЗавершение", ЭтотОбъект); ПараметрыОтбора = Новый Структура(); - ПараметрыОтбора.Вставить("Идентификатор", НавигационнаяСсылка); + ПараметрыОтбора.Вставить("Идентификатор", Ссылка); ПараметрыДела = ПараметрыДел.НайтиСтроки(ПараметрыОтбора)[0]; ОткрытьФорму(ПараметрыДела.Форма, ПараметрыДела.ПараметрыФормы ,,,,, ОповещениеОЗакрытии); @@ -129,6 +133,8 @@ ТекущиеДела.Сортировать("ЭтоРаздел Убыв, ПредставлениеРаздела Возр, Важное Убыв"); + ПоместитьВоВременноеХранилище(ТекущиеДела, ТекущиеДелаВХранилище); + РазделыСВажнымиДелами = Новый Структура; СохраненныеНастройкиОтображения = ТекущиеДелаСлужебный.СохраненныеНастройкиОтображения(); Если СохраненныеНастройкиОтображения = Неопределено Тогда @@ -244,6 +250,8 @@ ТекущиеДела.Сортировать("ЭтоРаздел Убыв, ПредставлениеРаздела Возр, Важное Убыв"); + ПоместитьВоВременноеХранилище(ТекущиеДела, ТекущиеДелаВХранилище); + // Если пользователь не настраивал положение разделов в списке дел, то // они сортируются согласно порядку, определенному в процедуре ПриОпределенииПорядкаРазделовКомандногоИнтерфейса. Если СохраненныеНастройкиОтображения = Неопределено Тогда @@ -366,49 +374,42 @@ // Фоновое обновление &НаСервере -Процедура ЗапуститьФоновоеЗаданиеНаСервере(ВыполнениеПрервано = Ложь) +Функция СформироватьСписокТекущихДелВФоне() Если МонопольныйРежим() Тогда - ВыполнениеПрервано = Истина; - Возврат; + Возврат Неопределено; КонецЕсли; - ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); - ИдентификаторЗадания = Неопределено; + Если ДлительнаяОперация <> Неопределено Тогда + ДлительныеОперации.ОтменитьВыполнениеЗадания(ДлительнаяОперация.ИдентификаторЗадания); + КонецЕсли; Если ТекущиеДелаВХранилище = "" Тогда ТекущиеДелаВХранилище = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); КонецЕсли; - Если ОбщегоНазначенияКлиентСервер.РежимОтладки() Тогда - ТекущиеДелаСлужебный.СписокТекущихДелПользователя(ТекущиеДелаВХранилище); - Иначе - ПараметрыПроцедуры = Новый Массив; - ПараметрыПроцедуры.Добавить(ТекущиеДелаВХранилище); - ПараметрыПроцедуры.Добавить(ПараметрыСеанса.ПараметрыКлиентаНаСервере); - - ПараметрыЗадания = Новый Массив; - ПараметрыЗадания.Добавить("ТекущиеДелаСлужебный.СписокТекущихДелПользователя"); - ПараметрыЗадания.Добавить(ПараметрыПроцедуры); - - НаименованиеЗадания = НСтр("ru = 'Обновление списка текущих дел'"); - - Задание = ФоновыеЗадания.Выполнить("РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации", ПараметрыЗадания,, НаименованиеЗадания); - - ИдентификаторЗадания = Задание.УникальныйИдентификатор; - КонецЕсли; + ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); + ПараметрыВыполнения.ОжидатьЗавершение = 0; // запускать сразу + ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Обновление списка текущих дел'"); + ПараметрыВыполнения.АдресРезультата = ТекущиеДелаВХранилище; -КонецПроцедуры + Результат = ДлительныеОперации.ВыполнитьВФоне("ТекущиеДелаСлужебный.СформироватьСписокТекущихДелПользователя", + Новый Структура, ПараметрыВыполнения); + + Возврат Результат; + +КонецФункции &НаСервере -Процедура ЗагрузитьТекущиеДела() +Процедура ЗагрузитьТекущиеДела(АдресТекущихДел) - ТекущиеДела = ПолучитьИзВременногоХранилища(ТекущиеДелаВХранилище); + ТекущиеДела = ПолучитьИзВременногоХранилища(АдресТекущихДел); ВыводимыеДелаИРазделы = Новый Структура; Если ТолькоОбновлениеДел Тогда ЗаполнитьСвернутыеГруппы(); ОбновитьСписокТекущихДел(ТекущиеДела); Иначе + ТолькоОбновлениеДел = Истина; СформироватьСписокТекущихДел(ТекущиеДела); КонецЕсли; @@ -440,46 +441,24 @@ КонецПроцедуры -&НаСервере -Функция ЗаданиеВыполнено(ИдентификаторЗадания) - - Если ОбщегоНазначенияКлиентСервер.РежимОтладки() Тогда - ЗаданиеВыполненоУспешно = Истина; - Иначе - ЗаданиеВыполненоУспешно = ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); - КонецЕсли; - - Если ЗаданиеВыполненоУспешно = Истина Тогда - ЗагрузитьТекущиеДела(); - КонецЕсли; - Возврат ЗаданиеВыполненоУспешно; - -КонецФункции - &НаКлиенте -Процедура Подключаемый_ПроверитьВыполнениеЗадания() +Процедура СформироватьСписокТекущихДелВФонеЗавершение(Результат, ДополнительныеПараметры) Экспорт - ЗаданиеВыполненоУспешно = Ложь; - Попытка - Если ЗаданиеВыполнено(ИдентификаторЗадания) Тогда - ЗаданиеВыполненоУспешно = Истина; - Элементы.СтраницаДела.Видимость = Истина; - Элементы.СтраницаДлительнаяОперация.Видимость = Ложь; - Элементы.ФормаНастроить.Доступность = Истина; - Элементы.ФормаОбновить.Доступность = Истина; - ОтключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания"); - КонецЕсли; - Исключение - ОтключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания"); - Элементы.СтраницаДела.Видимость = Истина; - Элементы.СтраницаДлительнаяОперация.Видимость = Ложь; - Элементы.ФормаОбновить.Доступность = Истина; - Если Не ВыполнениеПрерваноНаЗапуске Тогда - ВызватьИсключение; - КонецЕсли; - КонецПопытки; + ДлительнаяОперация = Неопределено; - Если ЗаданиеВыполненоУспешно Тогда + Элементы.СтраницаДела.Видимость = Истина; + Элементы.СтраницаДлительнаяОперация.Видимость = Ложь; + Элементы.ФормаОбновить.Доступность = Истина; + + Если Результат = Неопределено Тогда + Элементы.ФормаНастроить.Доступность = ТолькоОбновлениеДел; + Возврат; + ИначеЕсли Результат.Статус = "Ошибка" Тогда + Элементы.ФормаНастроить.Доступность = ТолькоОбновлениеДел; + ВызватьИсключение Результат.КраткоеПредставлениеОшибки; + ИначеЕсли Результат.Статус = "Выполнено" Тогда + ЗагрузитьТекущиеДела(Результат.АдресРезультата); + Элементы.ФормаНастроить.Доступность = Истина; Если НастройкиАвтообновления.Свойство("АвтообновлениеВключено") И НастройкиАвтообновления.АвтообновлениеВключено Тогда ПериодОбновления = НастройкиАвтообновления.ПериодАвтообновления * 60; @@ -501,15 +480,11 @@ ОтключитьОбработчикОжидания("ОбновитьТекущиеДелаАвтоматически"); КонецЕсли; - ТолькоОбновлениеДел = Не ВыполнениеПрерваноНаЗапуске; - - ВыполнениеПрервано = Ложь; - ЗапуститьФоновоеЗаданиеНаСервере(ВыполнениеПрервано); - Если ВыполнениеПрервано Тогда + ДлительнаяОперация = СформироватьСписокТекущихДелВФоне(); + Если ДлительнаяОперация = Неопределено Тогда Возврат; КонецЕсли; - ВыполнениеПрерваноНаЗапуске = Ложь; - + Если Не ОбновитьНезаметно Тогда Элементы.СтраницаДела.Видимость = Ложь; Элементы.СтраницаДлительнаяОперация.Видимость = Истина; @@ -517,7 +492,12 @@ Элементы.ФормаОбновить.Доступность = Ложь; Элементы.СтраницаТекущихДелНет.Видимость = Ложь; КонецЕсли; - ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 2); + + ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); + ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; + ПараметрыОжидания.Интервал = 2; // Быстрее стандартного интервала, т.к. выводится на начальной странице. + ОповещениеОЗавершении = Новый ОписаниеОповещения("СформироватьСписокТекущихДелВФонеЗавершение", ЭтотОбъект); + ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания); КонецПроцедуры @@ -764,7 +744,9 @@ Процедура ДействияПриЗакрытииПанелиТекущихДел() ЗаполнитьСвернутыеГруппы(); - ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); + Если ДлительнаяОперация <> Неопределено Тогда + ДлительныеОперации.ОтменитьВыполнениеЗадания(ДлительнаяОперация.ИдентификаторЗадания); + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/ТекущиеДела/Help/ru.html b/SSL/src/DataProcessors/ТекущиеДела/Help/ru.html index 94e84c5e7..dd983c84f 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/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl index 4f9fde138..7e55219fa 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl @@ -99,47 +99,6 @@ КонецФункции -// Выполняет проверку наличия сообщения обмена на заданном ресурсе. -// -// Параметры: -// Нет. -// -// Возвращаемое значение: -// Булево - Истина - сообщение обмена присутствует на заданном ресурсе; Лож - нет. -// -Функция ФайлСообщенияОбменаСуществует() Экспорт - - ИнициализацияСообщений(); - - МассивКолонок = Новый Массив; - МассивКолонок.Добавить("Тема"); - - ПараметрыЗагрузки = Новый Структура; - ПараметрыЗагрузки.Вставить("Колонки", МассивКолонок); - ПараметрыЗагрузки.Вставить("ПолучениеЗаголовков", Истина); - - Попытка - НаборСообщений = РаботаСПочтовымиСообщениями.ЗагрузитьПочтовыеСообщения(EMAILУчетнаяЗапись, ПараметрыЗагрузки); - Исключение - ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ПолучитьСообщениеОбОшибке(103); - ДополнитьСообщениеОбОшибке(ТекстОшибки); - Возврат Ложь; - КонецПопытки; - - Для Каждого ПочтовоеСообщение Из НаборСообщений Цикл - - Если ВРег(СокрЛП(ПочтовоеСообщение.Тема)) = ВРег(СокрЛП(ТемаСообщения)) Тогда - - Возврат Истина; - - КонецЕсли; - - КонецЦикла; - - Возврат Ложь; -КонецФункции - // Выполняет инициализацию свойств обработки начальными значениями и константами. // // Параметры: @@ -593,8 +552,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Операторы основной программы. +#КонецОбласти + +#Область Инициализация ИнициализацияСообщений(); ИнициализацияСообщенийОшибок(); diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl index 9a8b0f6c5..c300eb505 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl @@ -105,20 +105,6 @@ Возврат Истина; КонецФункции -// Выполняет проверку наличия сообщения обмена на заданном ресурсе. -// -// Параметры: -// Нет. -// -// Возвращаемое значение: -// Булево - Истина - сообщение обмена присутствует на заданном ресурсе; Лож - нет. -// -Функция ФайлСообщенияОбменаСуществует() Экспорт - - Возврат (НайтиФайлы(ИмяКаталогаОбменаИнформацией(), ШаблонИмениФайлаСообщения + ".*", Ложь).Количество() > 0); - -КонецФункции - // Выполняет инициализацию свойств обработки начальными значениями и константами. // // Параметры: @@ -315,7 +301,7 @@ Попытка - Архиватор = Новый ЗаписьZipФайла(ИмяВременногоФайлаАрхива, ПарольАрхиваСообщенияОбмена, Нстр("ru = 'Файл сообщения обмена'")); + Архиватор = Новый ЗаписьZipФайла(ИмяВременногоФайлаАрхива, ПарольАрхиваСообщенияОбмена, НСтр("ru = 'Файл сообщения обмена'")); Архиватор.Добавить(ИмяФайлаСообщенияОбмена()); Архиватор.Записать(); @@ -515,7 +501,7 @@ Процедура УстановитьСтрокуСообщенияОбОшибке(Знач Сообщение) Если Сообщение = Неопределено Тогда - Сообщение = Нстр("ru = 'Внутренняя ошибка'"); + Сообщение = НСтр("ru = 'Внутренняя ошибка'"); КонецЕсли; СтрокаСообщенияОбОшибке = Сообщение; @@ -571,8 +557,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Операторы основной программы. +#КонецОбласти + +#Область Инициализация ИнициализацияСообщений(); ИнициализацияСообщенийОшибок(); diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl index 5c6d07932..9e51132a1 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl @@ -96,40 +96,6 @@ КонецФункции -// Выполняет проверку наличия сообщения обмена на заданном ресурсе. -// -// Параметры: -// Нет. -// -// Возвращаемое значение: -// Булево - Истина - сообщение обмена присутствует на заданном ресурсе; Лож - нет. -// -Функция ФайлСообщенияОбменаСуществует() Экспорт - - ИнициализацияСообщений(); - - Попытка - FTPСоединение = ПолучитьFTPСоединение(); - Исключение - ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ПолучитьСообщениеОбОшибке(102); - ДополнитьСообщениеОбОшибке(ТекстОшибки); - Возврат Ложь; - КонецПопытки; - - Попытка - МассивНайденныхФайлов = FTPСоединение.НайтиФайлы(КаталогНаFTPСервере, ШаблонИмениФайлаСообщения + ".*", Ложь); - Исключение - ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ПолучитьСообщениеОбОшибке(104); - ДополнитьСообщениеОбОшибке(ТекстОшибки); - Возврат Ложь; - КонецПопытки; - - Возврат МассивНайденныхФайлов.Количество() > 0; - -КонецФункции - // Выполняет инициализацию свойств обработки начальными значениями и константами. // // Параметры: @@ -308,7 +274,7 @@ Попытка - Архиватор = Новый ЗаписьZipФайла(ИмяВременногоФайлаАрхива, ПарольАрхиваСообщенияОбмена, Нстр("ru = 'Файл сообщения обмена'")); + Архиватор = Новый ЗаписьZipФайла(ИмяВременногоФайлаАрхива, ПарольАрхиваСообщенияОбмена, НСтр("ru = 'Файл сообщения обмена'")); Архиватор.Добавить(ИмяФайлаСообщенияОбмена()); Архиватор.Записать(); @@ -500,7 +466,7 @@ Процедура УстановитьСтрокуСообщенияОбОшибке(Знач Сообщение) Если Сообщение = Неопределено Тогда - Сообщение = Нстр("ru = 'Внутренняя ошибка'"); + Сообщение = НСтр("ru = 'Внутренняя ошибка'"); КонецЕсли; СтрокаСообщенияОбОшибке = Сообщение; @@ -672,8 +638,9 @@ Возврат Результат; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Операторы основной программы. +#КонецОбласти + +#Область Инициализация ИнициализацияСообщений(); ИнициализацияСообщенийОшибок(); diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form index 85341164d..710e04cb2 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form @@ -175,7 +175,6 @@ Label true true - true URLProcessing @@ -189,14 +188,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - ГруппаАктивныеПользователиРасширеннаяПодсказка 170 @@ -269,14 +260,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - СтраницаВыборРежимаУдаленияРасширеннаяПодсказка 82 @@ -291,6 +274,7 @@ Vertical auto + false @@ -978,14 +962,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - СтраницаПомеченныеНаУдалениеРасширеннаяПодсказка 84 @@ -1000,6 +976,7 @@ Vertical auto + false @@ -1008,10 +985,6 @@ АвтоОтступ1 205 - - <key>ru</key> - <value> </value> - true true @@ -1086,6 +1059,10 @@ НадписьДлительнаяОперация 202 + + <key>ru</key> + <value>Надпись длительная операция</value> + true true @@ -1112,7 +1089,7 @@ true true - Left + Center @@ -1247,10 +1224,6 @@ АвтоОтступ2 208 - - <key>ru</key> - <value> </value> - true true @@ -1284,14 +1257,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - СтраницаДлительнаяОперацияРасширеннаяПодсказка 110 @@ -1306,6 +1271,7 @@ Vertical auto + false @@ -1317,10 +1283,6 @@ КартинкаУдалениеНеТребуется 178 - - <key>ru</key> - <value> </value> - true true @@ -1393,14 +1355,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - ГруппаУдалениеНеТребуетсяРасширеннаяПодсказка 177 @@ -1425,14 +1379,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - СтраницаУдалениеНеТребуетсяРасширеннаяПодсказка 175 @@ -1447,6 +1393,7 @@ Vertical auto + false @@ -1458,10 +1405,6 @@ КартинкаУспешноЗавершено 146 - - <key>ru</key> - <value> </value> - true true @@ -1534,14 +1477,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - ГруппаУспешноЗавершеноРасширеннаяПодсказка 145 @@ -1566,14 +1501,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - СтраницаУспешноЗавершеноРасширеннаяПодсказка 143 @@ -1588,6 +1515,7 @@ Vertical auto + false @@ -1701,7 +1629,6 @@ Opening НеУдаленныеПредставлениеОткрытие - 10 true true true @@ -2275,6 +2202,7 @@ Page auto + false @@ -2568,8 +2496,8 @@ true true - 30 true + 5 true true MultiRow @@ -2604,14 +2532,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - СтраницаПричиныНеУдаленияРасширеннаяПодсказка 258 @@ -2626,6 +2546,7 @@ Vertical auto + false true @@ -2657,10 +2578,6 @@ ru Группа причины - - ru - - ГруппаПричиныРасширеннаяПодсказка 316 @@ -2690,10 +2607,6 @@ ru Объекты, которые не удалось удалить (%1) - - ru - - ГруппаНеУдаленныеРасширеннаяПодсказка 230 @@ -2743,7 +2656,6 @@ Label true - 3 true Style.ПоясняющийТекст @@ -2758,14 +2670,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - true СтраницаПричиныНевозможностиУдаленияРасширеннаяПодсказка @@ -2781,6 +2685,7 @@ Vertical auto + false true @@ -2850,14 +2755,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - true ЛеваяКоманднаяПанельРасширеннаяПодсказка @@ -2989,14 +2886,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - true ПраваяКоманднаяПанельРасширеннаяПодсказка @@ -3018,14 +2907,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - КомандныеПанелиРасширеннаяПодсказка 165 @@ -3081,7 +2962,7 @@ Retry SaveValues Yes - 100 + 70 LockOwner Use true @@ -3419,10 +3300,6 @@
      ЖурналРегистрацииДатаНачала - - <key>ru</key> - <value> </value> - 18 Date @@ -3807,6 +3684,21 @@ true + + БыстрыйПоиск + + <key>ru</key> + <value>Быстрый поиск</value> + + 24 + + + true + + + true + + КомандаДалее diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl index d08973f20..480cb6795 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ПараметрыОбработчика; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -26,6 +30,9 @@ Элементы.НеУдаленныеЗаменитьНаИзМеню.Видимость = Ложь; КонецЕсли; + БыстрыйПоиск = Новый Структура; + БыстрыйПоиск.Вставить("ПолныеИменаОбъектовМетаданных", Новый Соответствие); + РежимУдаления = "Полный"; ПриСозданииНаСервереУстановитьТекстПоясненияКОбработке(); ВидимостьДоступность(ЭтотОбъект); @@ -267,21 +274,12 @@ &НаСервере Процедура УстановитьУсловноеОформление() - Элемент = УсловноеОформление.Элементы.Добавить(); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СвязиНеУдаленных.Имя); - - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СвязиНеУдаленныхПредставление.Имя); - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СвязиНеУдаленных.Видимость"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; - ОтборЭлемента.ПравоеЗначение = Ложь; - - Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); - Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); + Инструкция.Поля = "СвязиНеУдаленных, СвязиНеУдаленныхПредставление"; + Инструкция.Отборы.Вставить("СвязиНеУдаленных.Видимость", Ложь); + Инструкция.Оформление.Вставить("Видимость", Ложь); + Инструкция.Оформление.Вставить("Отображать", Ложь); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -325,7 +323,11 @@ ПараметрыЗадания.ПрочитатьПомеченныеСоСтраницыУстановкиФлажков = Истина; ПараметрыЗадания.УдалятьПомеченные = Истина; ИначеЕсли ТекущаяСтраница = Элементы.СтраницаПричиныНевозможностиУдаления Тогда - ПараметрыЗадания.ПрочитатьПомеченныеСоСтраницыРезультатов = Истина; + Если РежимУдаления = "Полный" Тогда + ПараметрыЗадания.ИскатьПомеченные = Истина; + Иначе + ПараметрыЗадания.ПрочитатьПомеченныеСоСтраницыРезультатов = Истина; + КонецЕсли; ПараметрыЗадания.УдалятьПомеченные = Истина; КонецЕсли; ИначеЕсли Действие = 2 Тогда @@ -432,13 +434,25 @@ ПутьКФорме = Значение + ".ФормаСписка"; КонецЕсли; ОткрытьФорму(ПутьКФорме); - ИначеЕсли ТипЗнч(Значение) = Тип("СписокЗначений") Тогда - ОписаниеЗначения = Значение.Получить(0); - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Ключ", ОписаниеЗначения.Значение); - ОткрытьФорму(ОписаниеЗначения.Представление + ".ФормаЗаписи", ПараметрыФормы, ЭтотОбъект); Иначе - ПоказатьЗначение(, Значение); + ПолноеИмяОМ = БыстрыйПоиск.ПолныеИменаОбъектовМетаданных[ТипЗнч(Значение)]; + Если ТипЗнч(ПолноеИмяОМ) = Тип("Строка") Тогда + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПоказатьКарточку", Истина); + ПараметрыФормы.Вставить("Ключ", Значение); + ВидОМ = СтрРазделить(ПолноеИмяОМ, ".")[0]; + Если ВидОМ = "РЕГИСТРСВЕДЕНИЙ" + Или ВидОМ = "РЕГИСТРНАКОПЛЕНИЯ" + Или ВидОМ = "РЕГИСТРБУХГАЛТЕРИИ" + Или ВидОМ = "РЕГИСТРРАСЧЕТА" Тогда + ПолноеИмяФормы = ПолноеИмяОМ + ".ФормаЗаписи"; + Иначе + ПолноеИмяФормы = ПолноеИмяОМ + ".ФормаОбъекта"; + КонецЕсли; + ОткрытьФорму(ПолноеИмяФормы, ПараметрыФормы); + Иначе + ПоказатьЗначение(, Значение); + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -468,13 +482,15 @@ МассивСтрокТаблицы = Новый Массив; МассивСсылокПомеченныхНаУдаление = Новый Массив; МассивСсылокНеПомеченныхНаУдаление = Новый Массив; - ЕстьПомеченныеНаУдаление = Ложь; + УстанавливатьПометку = Ложь; ЕстьЗаписиРегистров = Ложь; ЕстьКонстанты = Ложь; Для Каждого Идентификатор Из МассивИдентификаторов Цикл СтрокаТаблицы = ТаблицаРеквизит.НайтиПоИдентификатору(Идентификатор); Если ЭтоСвязиНеУдаленных Тогда - Если СтрокаТаблицы.ЭтоКонстанта Тогда + Если Не СтрокаТаблицы.Видимость Тогда + Продолжить; // Обход особенности с CTRL+A. + ИначеЕсли СтрокаТаблицы.ЭтоКонстанта Тогда ЕстьКонстанты = Истина; Продолжить; ИначеЕсли Не СтрокаТаблицы.СсылочногоТипа Тогда @@ -488,9 +504,9 @@ Продолжить; // Пропуск групп. КонецЕсли; Если СтрокаТаблицы.ПометкаУдаления Тогда - ЕстьПомеченныеНаУдаление = Истина; МассивСсылокПомеченныхНаУдаление.Добавить(Значение); Иначе + УстанавливатьПометку = Истина; МассивСсылокНеПомеченныхНаУдаление.Добавить(Значение); КонецЕсли; Если ТипЗнч(ТаблицаРеквизит) = Тип("ДанныеФормыКоллекция") Тогда @@ -503,7 +519,7 @@ КонецЕсли; КонецЦикла; - МассивСсылок = ?(ЕстьПомеченныеНаУдаление, МассивСсылокПомеченныхНаУдаление, МассивСсылокНеПомеченныхНаУдаление); + МассивСсылок = ?(УстанавливатьПометку, МассивСсылокНеПомеченныхНаУдаление, МассивСсылокПомеченныхНаУдаление); КоличествоМожноУдалить = МассивСсылок.Количество(); Если КоличествоМожноУдалить = 0 Тогда ТекстОшибки = НСтр("ru = 'Выберите объект.'"); @@ -527,22 +543,22 @@ ПараметрыОбработчика.Вставить("МассивСтрокТаблицы", МассивСтрокТаблицы); ПараметрыОбработчика.Вставить("МассивСсылок", МассивСсылок); ПараметрыОбработчика.Вставить("ИмяРеквизитаЗначение", ИмяРеквизитаЗначение); - ПараметрыОбработчика.Вставить("ЕстьПомеченныеНаУдаление", ЕстьПомеченныеНаУдаление); + ПараметрыОбработчика.Вставить("УстанавливатьПометку", УстанавливатьПометку); Обработчик = Новый ОписаниеОповещения("ПометитьВыделенныеОбъектыТаблицыНаУдалениеЗавершение", ЭтотОбъект, ПараметрыОбработчика); Если КоличествоМожноУдалить = 1 Тогда - Если ЕстьПомеченныеНаУдаление Тогда - ТекстВопроса = НСтр("ru = 'Снять с ""%1"" пометку на удаление?'"); - Иначе + Если УстанавливатьПометку Тогда ТекстВопроса = НСтр("ru = 'Пометить ""%1"" на удаление?'"); + Иначе + ТекстВопроса = НСтр("ru = 'Снять с ""%1"" пометку на удаление?'"); КонецЕсли; ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, МассивСтрокТаблицы[0].Представление); Иначе - Если ЕстьПомеченныеНаУдаление Тогда - ТекстВопроса = НСтр("ru = 'Снять с выделенных объектов (%1) пометку на удаление?'"); - Иначе + Если УстанавливатьПометку Тогда ТекстВопроса = НСтр("ru = 'Пометить выделенные объекты (%1) на удаление?'"); + Иначе + ТекстВопроса = НСтр("ru = 'Снять с выделенных объектов (%1) пометку на удаление?'"); КонецЕсли; ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, Формат(КоличествоМожноУдалить, "ЧН=0; ЧГ=")); КонецЕсли; @@ -559,7 +575,7 @@ Если Ответ <> КодВозвратаДиалога.Да Тогда Возврат; КонецЕсли; - ПометкаУдаления = Не ПараметрыВыполнения.ЕстьПомеченныеНаУдаление; + ПометкаУдаления = ПараметрыВыполнения.УстанавливатьПометку; РезультатРаботыСервера = ИзменитьПометкуУдаленияОбъектов(ПараметрыВыполнения.МассивСсылок, ПометкаУдаления); СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, РезультатРаботыСервера); КонецПроцедуры @@ -875,7 +891,10 @@ СтандартныеПодсистемыКлиентСервер.РазвернутьУзлыДерева(Результат, "НеУдаленные", "*", Истина); КонецЕсли; - СтандартныеПодсистемыКлиентСервер.ОповеститьДинамическиеСписки(Результат, МассивСсылок); + СтандартныеПодсистемыКлиентСервер.ОповеститьДинамическиеСписки( + Результат, + МассивСсылок, + Новый Структура("ПометкаУдаления", ПометкаУдаления)); ОповещениеТекст = Неопределено; ОповещениеСсылка = Неопределено; @@ -1098,12 +1117,15 @@ Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаДлительнаяОперация; Если ПоказыватьБублик Тогда Элементы.НадписьДлительнаяОперация.Заголовок = НСтр("ru = 'Пожалуйста, подождите...'"); + Элементы.НадписьДлительнаяОперация.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Лево; Элементы.ФоновоеЗаданиеСостояние.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Лево; ИначеЕсли ПараметрыЗадания.УдалятьПомеченные Тогда Элементы.НадписьДлительнаяОперация.Заголовок = НСтр("ru = 'Удаляются объекты, помеченные на удаление...'"); + Элементы.НадписьДлительнаяОперация.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Центр; Элементы.ФоновоеЗаданиеСостояние.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Центр; Иначе Элементы.НадписьДлительнаяОперация.Заголовок = НСтр("ru = 'Поиск объектов, помеченных на удаление...'"); + Элементы.НадписьДлительнаяОперация.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Центр; Элементы.ФоновоеЗаданиеСостояние.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Центр; КонецЕсли; КонецПроцедуры @@ -1132,7 +1154,10 @@ Если РезультатВыполненияВФоне.УдалятьПомеченные Тогда // Подготовка оповещения для динамических списков. - СтандартныеПодсистемыКлиентСервер.ОповеститьДинамическиеСписки(Результат, РезультатВыполненияВФоне.Удаленные); + СтандартныеПодсистемыКлиентСервер.ОповеститьДинамическиеСписки( + Результат, + РезультатВыполненияВФоне.Удаленные, + Новый Структура("УдалениеПомеченных", Истина)); УдаленныеКоличество = РезультатВыполненияВФоне.Удаленные.Количество(); НеУдаленныеКоличество = РезультатВыполненияВФоне.НеУдаленные.Количество(); @@ -1225,6 +1250,7 @@ УзелТипа.Количество = 0; УзелТипа.НомерКартинки = -1; УзлыПервогоУровня.Вставить(ТипУдаляемого, УзелТипа); + БыстрыйПоиск.ПолныеИменаОбъектовМетаданных.Вставить(ТипУдаляемого, УдаляемыйИнформация.ПолноеИмя); КонецЕсли; УзелТипа.Количество = УзелТипа.Количество + 1; @@ -1302,6 +1328,7 @@ ГруппаНеУдаленного.Представление = УдаляемыйИнформация.ПредставлениеСписка; ГруппыНеУдаленных.Вставить(Причина.УдаляемыйТип, ГруппаНеУдаленного); + БыстрыйПоиск.ПолныеИменаОбъектовМетаданных.Вставить(Причина.УдаляемыйТип, УдаляемыйИнформация.ПолноеИмя); КонецЕсли; ГруппаНеУдаленного.КоличествоСвязей = ГруппаНеУдаленного.КоличествоСвязей + 1; @@ -1354,6 +1381,7 @@ СтрокаПрепятствующегоУдалению.Представление = ОбнаруженныйИнформация.ПредставлениеЭлемента + " (" + НСтр("ru = 'Константа'") + ")"; Иначе СтрокаПрепятствующегоУдалению.Представление = Строка(Причина.ОбнаруженныйСсылка) + " (" + ОбнаруженныйИнформация.ПредставлениеЭлемента + ")"; + БыстрыйПоиск.ПолныеИменаОбъектовМетаданных.Вставить(Причина.ОбнаруженныйТип, ОбнаруженныйИнформация.ПолноеИмя); КонецЕсли; СтрокаПрепятствующегоУдалению.НомерКартинки = НомерКартинки( diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html index d38d1c88c..83f4bb065 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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для окончательного удаления помеченных объектов.</p> <p>В процессе работы с программой можно помечать на удаление объекты (например, ошибочно введенные). Помеченные на удаление объекты могут быть безвозвратно удалены <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователем</a> с административными правами.</p> <p>Команда <strong>Удаление помеченных объектов</strong> находится в разделе <strong>Администрирование - Поддержка и обслуживание</strong>.</p> diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl index da0f0e00c..6cd4bbd45 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl @@ -122,6 +122,9 @@ НачатьТранзакцию(); Попытка ПопробоватьУдалитьСсылку(ПараметрыВыполнения, Ссылка, Информация, Результат); + Если Результат.Успех Тогда + ЗафиксироватьТранзакцию(); + КонецЕсли; Исключение Результат.Успех = Ложь; Результат.ИнформацияОбОшибке = ИнформацияОбОшибке(); @@ -130,9 +133,7 @@ Для Каждого Сообщение Из ИсходныеСообщения Цикл Сообщение.Сообщить(); КонецЦикла; - Если Результат.Успех Тогда - ЗафиксироватьТранзакцию(); - Иначе + Если Не Результат.Успех Тогда ОтменитьТранзакцию(); ЗаписатьПредупреждение(Ссылка, Результат.ИнформацияОбОшибке); КонецЕсли; @@ -343,14 +344,17 @@ КонецЕсли; КонецЕсли; + Если Успех Тогда + ЗафиксироватьТранзакцию(); + КонецЕсли; + Исключение + Успех = Ложь; ЗаписатьПредупреждение(Ссылка, ИнформацияОбОшибке()); КонецПопытки; // 4. Регистрация результата (если успех). Если Успех Тогда - ЗафиксироватьТранзакцию(); - Для Каждого Ссылка Из МассивСсылок Цикл // Регистрация ссылки в коллекции удаленных. Если ПараметрыВыполнения.Удаленные.Найти(Ссылка) = Неопределено Тогда @@ -642,7 +646,7 @@ // Общая механика. // Инициализирует структуру параметров, необходимых для выполнения других служебных методов. -Процедура ИнициализироватьПараметры(ПараметрыВыполнения) Экспорт +Процедура ИнициализироватьПараметры(ПараметрыВыполнения) // Определение параметров работы программы. Если Не ПараметрыВыполнения.Свойство("ИскатьПомеченные") Тогда ПараметрыВыполнения.Вставить("ИскатьПомеченные", Истина); @@ -694,7 +698,7 @@ КонецПроцедуры // Формирует массив помеченных на удаление с учетом разделения. -Процедура ПолучитьПомеченныеНаУдаление(ПараметрыВыполнения) Экспорт +Процедура ПолучитьПомеченныеНаУдаление(ПараметрыВыполнения) КлиентОтметитьНачалоОбхода(ПараметрыВыполнения, "ПередПоискомПомеченныхНаУдаление"); УдалениеПомеченныхОбъектовПереопределяемый.ПередПоискомПомеченныхНаУдаление(ПараметрыВыполнения); diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Form.form b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Form.form index 01efb8771..8681db65b 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Form.form +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Form.form @@ -363,6 +363,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -626,6 +627,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -743,6 +745,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -1016,6 +1019,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1078,6 +1082,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -1119,6 +1124,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -1810,6 +1816,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -2104,6 +2111,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -2179,6 +2187,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -2365,6 +2374,7 @@ <type>Page</type> <extInfo xsi:type="form:PageGroupExtInfo"> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -2456,7 +2466,9 @@ </extInfo> </extendedTooltip> <type>Page</type> - <extInfo xsi:type="form:PageGroupExtInfo"/> + <extInfo xsi:type="form:PageGroupExtInfo"> + <scrollOnCompress>false</scrollOnCompress> + </extInfo> </items> <visible>true</visible> <enabled>true</enabled> @@ -2505,6 +2517,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -2648,6 +2661,157 @@ <textSize>Normal</textSize> </extInfo> </items> + <items xsi:type="form:FormField"> + <name>БезопаснаяЗагрузка</name> + <id>393</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Объект.БезопаснаяЗагрузка</segments> + </dataPath> + <titleLocation>Right</titleLocation> + <handlers> + <event>OnChange</event> + <name>БезопаснаяЗагрузкаПриИзменении</name> + </handlers> + <extendedTooltip> + <name>БезопаснаяЗагрузкаРасширеннаяПодсказка</name> + <id>395</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>БезопаснаяЗагрузкаКонтекстноеМеню</name> + <id>394</id> + <autoFill>true</autoFill> + </contextMenu> + <type>CheckBoxField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:CheckBoxFieldExtInfo"/> + </items> + <items xsi:type="form:FormGroup"> + <name>ГруппаБезопаснаяЗагрузка</name> + <id>396</id> + <items xsi:type="form:Decoration"> + <name>Декорация1</name> + <id>401</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>Декорация1РасширеннаяПодсказка</name> + <id>403</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>Декорация1КонтекстноеМеню</name> + <id>402</id> + <autoFill>true</autoFill> + </contextMenu> + <type>Label</type> + <width>1</width> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </items> + <items xsi:type="form:FormField"> + <name>ИмяФайлаПравилЗагрузки</name> + <id>398</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>ИмяФайлаПравилЗагрузки</segments> + </dataPath> + <extendedTooltip> + <name>ИмяФайлаПравилЗагрузкиРасширеннаяПодсказка</name> + <id>400</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ИмяФайлаПравилЗагрузкиКонтекстноеМеню</name> + <id>399</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:InputFieldExtInfo"> + <handlers> + <event>StartChoice</event> + <name>ИмяФайлаПравилЗагрузкиНачалоВыбора</name> + </handlers> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <wrap>true</wrap> + <choiceButton>true</choiceButton> + <openButton>true</openButton> + <chooseType>true</chooseType> + <typeDomainEnabled>true</typeDomainEnabled> + <textEdit>true</textEdit> + <textSize>Normal</textSize> + </extInfo> + </items> + <visible>true</visible> + <enabled>false</enabled> + <userVisible> + <common>true</common> + </userVisible> + <title> + <key>ru</key> + <value>Группа безопасная загрузка</value> + + + ru + Группа безопасная загрузка + + + ГруппаБезопаснаяЗагрузкаРасширеннаяПодсказка + 397 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + ИспользоватьТранзакции 72 @@ -3352,7 +3516,9 @@ Page - + + false + ГруппаЗагрузкаВебКлиент @@ -3439,7 +3605,9 @@ Page - + + false + true true @@ -3488,11 +3656,51 @@ Vertical auto + false НастройкиОбменаДанными 4 + + БезопасныйРежим + 404 + true + true + + true + + + Объект.БезопасныйРежим + + Right + Button + + БезопасныйРежимРасширеннаяПодсказка + 406 + + <key>ru</key> + <value>Устанавливает или отключает безопасный режим исполнения алгоритмов правил конвертации. Рекомендуется выполнять выгрузку и загрузку данных в безопасном режиме. Более подробно о безопасном режиме см. документацию к платформе 1С:Предприятие.</value> + + Label + true + true + + Left + + + + БезопасныйРежимКонтекстноеМеню + 405 + true + + CheckBoxField + Enter + true + Left + true + + ФлагРежимОтладки 94 @@ -4194,6 +4402,7 @@ Vertical auto + false @@ -4670,6 +4879,7 @@ Vertical auto + false true @@ -4987,9 +5197,6 @@ Объект.ИмяФайлаОбработчиковСобытий - - Объект.ИмяФайлаПравилОбмена - Объект.ИмяФайлаПротоколаОбмена @@ -5569,6 +5776,45 @@ ПериодВыгрузки + + ИмяФайлаПравилЗагрузки + + <key>ru</key> + <value>Имя файла правил</value> + + 16 + + String + + + + true + + + true + + + ИмяФайлаПравилЗагрузки + + + + АдресФайлаПравилЗагрузкиВХранилище + + <key>ru</key> + <value>Адрес файла правил в хранилище</value> + + 17 + + String + + + + true + + + true + + ПрочитатьПравилаОбмена diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl index a04db2673..4725aa54c 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl @@ -16,6 +16,7 @@ ПроверитьВерсиюИРежимСовместимостиПлатформы(); Объект.ЭтоИнтерактивныйРежим = Истина; + Объект.БезопасныйРежим = Истина; ЗаголовокФормы = НСтр("ru = 'Универсальный обмен данными в формате XML (%ВерсияОбработки%)'"); ЗаголовокФормы = СтрЗаменить(ЗаголовокФормы, "%ВерсияОбработки%", ВерсияОбъектаСтрокойНаСервере()); @@ -77,7 +78,7 @@ Если Объект.НастройкаАвтоматическойЗагрузкиДанных = 1 Тогда ОписаниеОповещения = Новый ОписаниеОповещения("ПриОткрытииЗавершение", ЭтотОбъект); - ПоказатьВопрос(ОписаниеОповещения, Нстр("ru = 'Выполнить загрузку данных из файла обмена?'"), РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да); + ПоказатьВопрос(ОписаниеОповещения, НСтр("ru = 'Выполнить загрузку данных из файла обмена?'"), РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да); Иначе @@ -382,6 +383,27 @@ КонецПроцедуры +&НаКлиенте +Процедура БезопаснаяЗагрузкаПриИзменении(Элемент) + + ИзменитьРежимБезопаснаяЗагрузка(); + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяФайлаПравилЗагрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ВыборФайла(Элемент, ИмяФайлаПравилЗагрузки, Истина, , Ложь, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяФайлаПравилЗагрузкиПриИзменении(Элемент) + + ПоместитьФайлПравилЗагрузкиВХранилище(); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаПравилВыгрузки @@ -450,7 +472,7 @@ Если ЭтоКлиент Тогда ОписаниеОповещения = Новый ОписаниеОповещения("ПолучитьИнформациюОФайлеОбменаЗавершение", ЭтотОбъект); - НачатьПомещениеФайла(ОписаниеОповещения, АдресФайла,Нстр("ru = 'Файл обмена'"),, УникальныйИдентификатор); + НачатьПомещениеФайла(ОписаниеОповещения, АдресФайла,НСтр("ru = 'Файл обмена'"),, УникальныйИдентификатор); Иначе @@ -507,7 +529,7 @@ Процедура УдалениеУдалить(Команда) ОписаниеОповещения = Новый ОписаниеОповещения("УдалениеУдалитьЗавершение", ЭтотОбъект); - ПоказатьВопрос(ОписаниеОповещения, Нстр("ru = 'Удалить выбранные данные в информационной базе?'"), РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет); + ПоказатьВопрос(ОписаниеОповещения, НСтр("ru = 'Удалить выбранные данные в информационной базе?'"), РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет); КонецПроцедуры @@ -619,7 +641,7 @@ Если ЭтоКлиент Тогда ОписаниеОповещения = Новый ОписаниеОповещения("НастройкаОтладкиЗагрузкиЗавершение", ЭтотОбъект); - НачатьПомещениеФайла(ОписаниеОповещения, АдресФайлаОбменаВХранилище,Нстр("ru = 'Файл обмена'"),, УникальныйИдентификатор); + НачатьПомещениеФайла(ОписаниеОповещения, АдресФайлаОбменаВХранилище,НСтр("ru = 'Файл обмена'"),, УникальныйИдентификатор); Иначе @@ -664,7 +686,7 @@ Процедура ПрочитатьПравилаОбмена(Команда) Если ЭтоLinuxКлиент() И ПрямаяВыгрузка = 1 Тогда - ПоказатьПредупреждение(,Нстр("ru = 'Прямое подключение к информационной базе не поддерживается в клиенте под управлением ОС Linux.'")); + ПоказатьПредупреждение(,НСтр("ru = 'Прямое подключение к информационной базе не поддерживается в клиенте под управлением ОС Linux.'")); Возврат; КонецЕсли; @@ -673,7 +695,7 @@ Если ЭтоКлиент Тогда ОписаниеОповещения = Новый ОписаниеОповещения("ПрочитатьПравилаОбменаЗавершение", ЭтотОбъект); - НачатьПомещениеФайла(ОписаниеОповещения, АдресФайлаПравилВХранилище,Нстр("ru = 'Файл правил обмена'"),, УникальныйИдентификатор); + НачатьПомещениеФайла(ОписаниеОповещения, АдресФайлаПравилВХранилище,НСтр("ru = 'Файл правил обмена'"),, УникальныйИдентификатор); Иначе @@ -728,17 +750,17 @@ ДополнительныеПараметры = Новый Структура(); ДополнительныеПараметры.Вставить("ИмяФайла", ИмяФайла); - ДополнительныеПараметры.Вставить("ОписаниеОповещения", Новый ОписаниеОповещения("ОткрытьКаталогСФайлом", ЭтаФорма, ДополнительныеПараметры)); + ДополнительныеПараметры.Вставить("ОписаниеОповещения", Новый ОписаниеОповещения("ОткрытьКаталогСФайлом", ЭтотОбъект, ДополнительныеПараметры)); Файл = Новый Файл(); - Файл.НачатьИнициализацию(Новый ОписаниеОповещения("ПроверитьСуществованиеФайла", ЭтаФорма, ДополнительныеПараметры), ИмяФайла); + Файл.НачатьИнициализацию(Новый ОписаниеОповещения("ПроверитьСуществованиеФайла", ЭтотОбъект, ДополнительныеПараметры), ИмяФайла); КонецПроцедуры // Продолжение процедуры (см. выше). &НаКлиенте Процедура ПроверитьСуществованиеФайла(Файл, ДополнительныеПараметры) Экспорт - ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОпределенияСуществованияФайла", ЭтаФорма, ДополнительныеПараметры); + ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОпределенияСуществованияФайла", ЭтотОбъект, ДополнительныеПараметры); Файл.НачатьПроверкуСуществования(ОписаниеОповещения); КонецПроцедуры @@ -834,7 +856,7 @@ ДеревоДанных.Строки.Очистить(); СтрокаДерева = ДеревоДанных.Строки.Добавить(); - СтрокаДерева.Представление = Нстр("ru = 'Справочники'"); + СтрокаДерева.Представление = НСтр("ru = 'Справочники'"); Для каждого ОбъектМД Из Метаданные.Справочники Цикл @@ -849,7 +871,7 @@ КонецЦикла; СтрокаДерева = ДеревоДанных.Строки.Добавить(); - СтрокаДерева.Представление = Нстр("ru = 'Планы видов характеристик'"); + СтрокаДерева.Представление = НСтр("ru = 'Планы видов характеристик'"); Для каждого ОбъектМД Из Метаданные.ПланыВидовХарактеристик Цикл @@ -864,7 +886,7 @@ КонецЦикла; СтрокаДерева = ДеревоДанных.Строки.Добавить(); - СтрокаДерева.Представление = Нстр("ru = 'Документы'"); + СтрокаДерева.Представление = НСтр("ru = 'Документы'"); Для каждого ОбъектМД Из Метаданные.Документы Цикл @@ -1048,10 +1070,13 @@ КонецЕсли; Иначе - - ДиалогВыбораФайла.Фильтр = "Файл данных (*.xml)|*.xml|Архивный файл данных (*.zip)|*.zip"; - ДиалогВыбораФайла.Расширение = "xml"; - + Если ВыборФайлаПравил Тогда + ДиалогВыбораФайла.Фильтр = "Файл данных (*.xml)|*.xml"; + ДиалогВыбораФайла.Расширение = "xml"; + Иначе + ДиалогВыбораФайла.Фильтр = "Файл данных (*.xml)|*.xml|Архивный файл данных (*.zip)|*.zip"; + ДиалогВыбораФайла.Расширение = "xml"; + КонецЕсли; КонецЕсли; ДиалогВыбораФайла.Заголовок = НСтр("ru = 'Выберите файл'"); @@ -1066,13 +1091,12 @@ Если Элемент = Элементы.ИмяФайлаПравил Тогда ИмяФайлаПравилПриИзменении(Элемент); - ИначеЕсли Элемент = Элементы.ИмяФайлаОбмена Тогда ИмяФайлаОбменаПриИзменении(Элемент); - ИначеЕсли Элемент = Элементы.ИмяФайлаДанных Тогда ИмяФайлаДанныхПриИзменении(Элемент); - + ИначеЕсли Элемент = Элементы.ИмяФайлаПравилЗагрузки Тогда + ИмяФайлаПравилЗагрузкиПриИзменении(Элемент); КонецЕсли; КонецЕсли; @@ -1306,7 +1330,7 @@ Если ЭтоКлиент Тогда ОписаниеОповещения = Новый ОписаниеОповещения("ВыполнитьЗагрузкуИзФормыЗавершение", ЭтотОбъект); - НачатьПомещениеФайла(ОписаниеОповещения, АдресФайла,Нстр("ru = 'Файл обмена'"),, УникальныйИдентификатор); + НачатьПомещениеФайла(ОписаниеОповещения, АдресФайла,НСтр("ru = 'Файл обмена'"),, УникальныйИдентификатор); Иначе @@ -1349,6 +1373,18 @@ КонецЕсли; + Если Объект.БезопаснаяЗагрузка Тогда + Если ЭтоАдресВременногоХранилища(АдресФайлаПравилЗагрузкиВХранилище) Тогда + ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайлаПравилЗагрузкиВХранилище); + АдресНаСервере = ПолучитьИмяВременногоФайла("xml"); + ДвоичныеДанные.Записать(АдресНаСервере); + Объект.ИмяФайлаПравилОбмена = АдресНаСервере; + Иначе + СообщитьПользователю(НСтр("ru = 'Не указан файл правил для загрузки данных.'")); + Возврат; + КонецЕсли; + КонецЕсли; + ОбъектДляСервера = РеквизитФормыВЗначение("Объект"); ЗаполнитьЗначенияСвойств(ОбъектДляСервера, Объект); ОбъектДляСервера.ВыполнитьЗагрузку(); @@ -1714,6 +1750,7 @@ Элементы.ИмяФайлаПравил.Видимость = Не ЭтоКлиент; Элементы.ИмяФайлаДанных.Видимость = Не ЭтоКлиент; Элементы.ИмяФайлаОбмена.Видимость = Не ЭтоКлиент; + Элементы.ГруппаБезопаснаяЗагрузка.Видимость = Не ЭтоКлиент; УстановитьПризнакЗагрузкиПравил(Ложь); @@ -1776,7 +1813,7 @@ Если ПустаяСтрока(Реквизит) Тогда - ТекстСообщения = Нстр("ru = 'Поле ""%1"" не заполнено'"); + ТекстСообщения = НСтр("ru = 'Поле ""%1"" не заполнено'"); ТекстСообщения = СтрЗаменить(ТекстСообщения, "%1", Заголовок); СообщитьПользователю(ТекстСообщения, ПутьКДанным); @@ -1840,11 +1877,51 @@ И Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости["Версия8_3_1"] И Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости["Версия8_3_2"]))) Тогда - ВызватьИсключение Нстр("ru = 'Обработка предназначена для запуска на версии платформы + ВызватьИсключение НСтр("ru = 'Обработка предназначена для запуска на версии платформы |1С:Предприятие 8.3 с отключенным режимом совместимости или выше'"); КонецЕсли; КонецФункции +&НаКлиенте +Процедура ИзменитьРежимБезопаснаяЗагрузка(Интерактивно = Истина) + + Элементы.ГруппаБезопаснаяЗагрузка.Доступность = Объект.БезопаснаяЗагрузка; + + ЧерезХранилище = ЭтоКлиент; + #Если ВебКлиент Тогда + ЧерезХранилище = Истина; + #КонецЕсли + + Если Объект.БезопаснаяЗагрузка И ЧерезХранилище Тогда + ПоместитьФайлПравилЗагрузкиВХранилище(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПоместитьФайлПравилЗагрузкиВХранилище() + + ЧерезХранилище = ЭтоКлиент; + #Если ВебКлиент Тогда + ЧерезХранилище = Истина; + #КонецЕсли + + АдресФайла = ""; + ОписаниеОповещения = Новый ОписаниеОповещения("ПоместитьФайлПравилЗагрузкиВХранилищеЗавершить", ЭтотОбъект); + НачатьПомещениеФайла(ОписаниеОповещения, АдресФайла, + ?(ЧерезХранилище, НСтр("ru = 'Файл обмена'"), ИмяФайлаПравилЗагрузки), ЧерезХранилище, УникальныйИдентификатор); + +КонецПроцедуры + +&НаКлиенте +Процедура ПоместитьФайлПравилЗагрузкиВХранилищеЗавершить(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт + + Если Результат Тогда + АдресФайлаПравилЗагрузкиВХранилище = Адрес; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Form.form b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Form.form index ad4114258..ac0bca93f 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Form.form +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Form.form @@ -142,6 +142,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -210,6 +211,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -278,6 +280,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -293,7 +296,6 @@ <key>ru</key> <value>Подсказка отладка алгоритмов</value> </toolTip> - <height>1</height> <extendedTooltip> <name>ПодсказкаОтладкаАлгоритмовExtendedTooltip</name> <id>32</id> diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Module.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Module.bsl index c1cf689cf..46df10bd2 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Module.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Module.bsl @@ -201,13 +201,13 @@ ОбработчикиСобытий = ОбработчикиСобытий(); Если ОбработчикиСобытий <> Неопределено Тогда - ОбработчикиСобытий.Показать(Нстр("ru = 'Модуль отладки обработчиков'")); + ОбработчикиСобытий.Показать(НСтр("ru = 'Модуль отладки обработчиков'")); КонецЕсли; ПротоколОбмена = ПротоколОбмена(); Если ПротоколОбмена <> Неопределено Тогда - ПротоколОбмена.Показать(Нстр("ru = 'Ошибки выгрузки модуля обработчиков'")); + ПротоколОбмена.Показать(НСтр("ru = 'Ошибки выгрузки модуля обработчиков'")); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Help/ru.html b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Help/ru.html index 246f42b4c..0369e75d8 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Help/ru.html +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Обработка "Универсальный обмен данными в формате XML" предназначена для загрузки и выгрузки данных в файл из любой конфигурации, реализованной на платформе 1С:Предприятие 8.</p> <h2>Режим работы</h2> <p>При использовании управляемой формы обработка имеет два режим работы:<br>1. На клиенте. При использовании этого режима файлы правил и загружаемых данных передаются с клиента на сервер, а файл выгружаемых данных передается с сервера на клиент. Пути к этим файлам, находящимся на клиенте, необходимо указывать в диалоговом окне непосредственно перед выполнением действия.<br>2. На сервере. В этом режиме файлы не передаются на клиент и пути к ним необходимо указывать на сервере.<br>Примечание: Файл внешней обработки и файлы протоколов обмена всегда должны находиться на сервере вне зависимости от режима работы.</p> diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl index 139460ffc..3d075b223 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl @@ -52,6 +52,7 @@ Перем ИменаОбработчиков; // Структура, содержащая имена всех обработчиков правил обмена. +Перем РазделителиКонфигурации; // Массив: содержащий разделители конфигурации. //////////////////////////////////////////////////////////////////////////////// // ФЛАГИ НАЛИЧИЯ ГЛОБАЛЬНЫХ ОБРАБОТЧИКОВ СОБЫТИЙ @@ -99,7 +100,6 @@ Перем мСчетчикВыгруженныхОбъектов Экспорт; // Число - счетчик выгруженных объектов. Перем мСчетчикНПП Экспорт; // Число - счетчик НПП -Перем мXMLДокумент; // Вспомогательный DOM-XML документ, используемый при создании узлов xml. Перем мТаблицаПравилКонвертацииСвойств; // ТаблицаЗначений - шаблон для воссоздания структуры таблицы путем // копирования. Перем мXMLПравила; // Xml-Строка, содержащая описание правил обмена. @@ -145,13 +145,9 @@ #КонецОбласти -#Область СлужебныеПроцедурыИФункции +#Область ПрограммныйИнтерфейс -//////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ ДЛЯ НАПИСАНИЯ АЛГОРИТМОВ - -//////////////////////////////////////////////////////////////////////////////// -// РАБОТА СО СТРОКАМИ +#Область РаботаСоСтроками // Разбирает строку на две части: до подстроки разделителя и после. // @@ -453,9 +449,9 @@ КонецФункции +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// РАБОТА С ДАННЫМИ +#Область РаботаСДанными // Возвращает строку - имя переданного значения перечисления. // Функция может быть использована в обработчиках событий, программный код @@ -511,7 +507,12 @@ // Для остальных будем считать значение пустым, если оно равно // значению по умолчанию своего типа. - Возврат Не ЗначениеЗаполнено(Значение); + Попытка + Возврат Не ЗначениеЗаполнено(Значение); + Исключение + // На случай мутабельных значений. + Возврат Ложь; + КонецПопытки; КонецЕсли; @@ -629,19 +630,40 @@ ОбщаяСтруктураСвойств = Неопределено, ОбщиеСвойстваПоиска = Неопределено, СтрокаЗапросаПоискаПоУникальномуИдентификатору = "") Экспорт + Если ОбщаяСтруктураСвойств = Неопределено Тогда + ТекСтруктураСвойств = Менеджеры[ТипЗнч(Менеджер.ПустаяСсылка())]; + ИмяТипа = ТекСтруктураСвойств.ИмяТипа; + Иначе + ИмяТипа = ОбщаяСтруктураСвойств.ИмяТипа; + КонецЕсли; + Если Свойство = "Имя" Тогда Возврат Менеджер[Значение]; - ИначеЕсли Свойство = "Код" Тогда + ИначеЕсли Свойство = "Код" + И (ИмяТипа = "Справочник" + ИЛИ ИмяТипа = "ПланВидовХарактеристик" + ИЛИ ИмяТипа = "ПланСчетов" + ИЛИ ИмяТипа = "ПланОбмена" + ИЛИ ИмяТипа = "ПланВидовРасчета") Тогда Возврат Менеджер.НайтиПоКоду(Значение); - ИначеЕсли Свойство = "Наименование" Тогда + ИначеЕсли Свойство = "Наименование" + И (ИмяТипа = "Справочник" + ИЛИ ИмяТипа = "ПланВидовХарактеристик" + ИЛИ ИмяТипа = "ПланСчетов" + ИЛИ ИмяТипа = "ПланОбмена" + ИЛИ ИмяТипа = "ПланВидовРасчета" + ИЛИ ИмяТипа = "Задача") Тогда Возврат Менеджер.НайтиПоНаименованию(Значение, ИСТИНА); - ИначеЕсли Свойство = "Номер" Тогда + ИначеЕсли Свойство = "Номер" + И (ИмяТипа = "Документ" + ИЛИ ИмяТипа = "БизнесПроцесс" + ИЛИ ИмяТипа = "Задача") Тогда Возврат Менеджер.НайтиПоНомеру(Значение); @@ -842,8 +864,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ РАБОТЫ С ОБЪЕКТОМ XMLЗапись +#КонецОбласти + +#Область ПроцедурыИФункцииДляРаботыСОбъектомXMLЗапись // Заменяет недопустимые символы XML на другой символ. // @@ -1003,9 +1026,9 @@ КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ РАБОТЫ С ОБЪЕКТОМ XMLЧтение +#Область ПроцедурыИФункцииДляРаботыСОбъектомXMLЧтение // Читает значение атрибута по имени из указанного объекта, приводит значение // к указанному примитивному типу. @@ -1144,9 +1167,9 @@ КонецФункции +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ РАБОТЫ С ФАЙЛОМ ОБМЕНА +#Область ПроцедурыИФункцииРаботыСФайломОбмена // Сохраняет в файл указанный xml-узел. // @@ -1179,6 +1202,1590 @@ КонецПроцедуры +#КонецОбласти + +#Область ПроцедурыИФункцииРаботыСПротоколомОбмена + +// Возвращает объект типа структура, содержащий все возможные поля +// записи протокола выполнения (сообщения об ошибках и т.п.). +// +// Параметры: +// Нет. +// +// Возвращаемое значение: +// Объект типа структура +// +Функция ПолучитьСтруктуруЗаписиПротокола(КодСообщения = "", СтрокаОшибки = "") Экспорт + + СтруктураОшибки = Новый Структура("ИмяПКО,ИмяПОД,Нпп,Гнпп,Источник,ТипОбъекта,Свойство,Значение,ТипЗначения,ПКО,ПКС,ПКГС,ПВД,ПОД,Объект,СвойствоПриемника,КонвертируемоеЗначение,Обработчик,ОписаниеОшибки,ПозицияМодуля,Текст,КодСообщения,УзелПланаОбмена"); + + СтрокаМодуля = ОтделитьРазделителем(СтрокаОшибки, "{"); + ОписаниеОшибки = ОтделитьРазделителем(СтрокаМодуля, "}: "); + + Если ОписаниеОшибки <> "" Тогда + + СтруктураОшибки.ОписаниеОшибки = ОписаниеОшибки; + СтруктураОшибки.ПозицияМодуля = СтрокаМодуля; + + КонецЕсли; + + Если СтруктураОшибки.КодСообщения <> "" Тогда + + СтруктураОшибки.КодСообщения = КодСообщения; + + КонецЕсли; + + Возврат СтруктураОшибки; + +КонецФункции + +// Записывает информацию об ошибке в протокол выполнения обмена. +// +Функция ЗаписатьИнформациюОбОшибкеВПротокол(КодСообщения, СтрокаОшибки, Объект, ТипОбъекта = Неопределено) Экспорт + + ЗП = ПолучитьСтруктуруЗаписиПротокола(КодСообщения, СтрокаОшибки); + ЗП.Объект = Объект; + + Если ТипОбъекта <> Неопределено Тогда + ЗП.ТипОбъекта = ТипОбъекта; + КонецЕсли; + + СтрокаОшибки = ЗаписатьВПротоколВыполнения(КодСообщения, ЗП); + + Возврат СтрокаОшибки; + +КонецФункции + +// Регистрирует в протоколе выполнения ошибку обработчика ПКО (загрузка). +// +Функция ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(КодСообщения, СтрокаОшибки, ИмяПравила, Источник, + ТипОбъекта, Объект, ИмяОбработчика) Экспорт + + ЗП = ПолучитьСтруктуруЗаписиПротокола(КодСообщения, СтрокаОшибки); + ЗП.ИмяПКО = ИмяПравила; + ЗП.ТипОбъекта = ТипОбъекта; + ЗП.Обработчик = ИмяОбработчика; + + Если Не ПустаяСтрока(Источник) Тогда + + ЗП.Источник = Источник; + + КонецЕсли; + + Если Объект <> Неопределено Тогда + + ЗП.Объект = Строка(Объект); + + КонецЕсли; + + СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(КодСообщения, ЗП); + + Если Не ФлагРежимОтладки Тогда + ВызватьИсключение СтрокаСообщенияОбОшибке; + КонецЕсли; + +КонецФункции + +// Регистрирует в протоколе выполнения ошибку обработчика ПКС. +// +Функция ЗаписатьИнформациюОбОшибкеОбработчикиПКС(КодСообщения, СтрокаОшибки, ПКО, ПКС, Источник = "", + ИмяОбработчика = "", Значение = Неопределено, ЭтоПКС = Истина) Экспорт + + ЗП = ПолучитьСтруктуруЗаписиПротокола(КодСообщения, СтрокаОшибки); + ЗП.ПКО = ПКО.Имя + " (" + ПКО.Наименование + ")"; + + ИмяПравила = ПКС.Имя + " (" + ПКС.Наименование + ")"; + Если ЭтоПКС Тогда + ЗП.ПКС = ИмяПравила; + Иначе + ЗП.ПКГС = ИмяПравила; + КонецЕсли; + + ОписаниеТипов = Новый ОписаниеТипов("Строка"); + ИсточникСтрока = ОписаниеТипов.ПривестиЗначение(Источник); + Если Не ПустаяСтрока(ИсточникСтрока) Тогда + ЗП.Объект = ИсточникСтрока + " (" + ТипЗнч(Источник) + ")"; + Иначе + ЗП.Объект = "(" + ТипЗнч(Источник) + ")"; + КонецЕсли; + + Если ЭтоПКС Тогда + ЗП.СвойствоПриемника = ПКС.Приемник + " (" + ПКС.ТипПриемника + ")"; + КонецЕсли; + + Если ИмяОбработчика <> "" Тогда + ЗП.Обработчик = ИмяОбработчика; + КонецЕсли; + + Если Значение <> Неопределено Тогда + ЗП.КонвертируемоеЗначение = Строка(Значение) + " (" + ТипЗнч(Значение) + ")"; + КонецЕсли; + + СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(КодСообщения, ЗП); + + Если Не ФлагРежимОтладки Тогда + ВызватьИсключение СтрокаСообщенияОбОшибке; + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#Область ПроцедурыСозданияИнтерфейсаВызоваОбработчиковВПравилахОбмена + +// Дополняет имеющиеся коллекции с правилами обмена интерфейсами вызова обработчиков. +// +// Параметры: +// СтруктураКонвертация - Структура - содержит правила конвертации и глобальные обработчики. +// ТаблицаПКО - ТаблицаЗначений - содержит правила конвертации объектов. +// ТаблицаПВД - ДеревоЗначений - содержит правила выгрузки данных. +// ТаблицаПОД - ДеревоЗначений - содержит правила очистки данных. +// +Процедура ДополнитьПравилаИнтерфейсамиОбработчиков(СтруктураКонвертация, ТаблицаПКО, ТаблицаПВД, ТаблицаПОД) Экспорт + + мМакетПараметровОбработчиков = ПолучитьМакет("ПараметрыОбработчиков"); + + // Добавляем интерфейсы Конвертации (глобальные). + ДополнитьИнтерфейсамиОбработчиковПравилаКонвертации(СтруктураКонвертация); + + // Добавляем интерфейсы ПВД + ДополнитьИнтерфейсамиОбработчиковПравилаВыгрузкиДанных(ТаблицаПВД, ТаблицаПВД.Строки); + + // Добавляем интерфейсы ПОД + ДополнитьИнтерфейсамиОбработчиковПравилаОчисткиДанных(ТаблицаПОД, ТаблицаПОД.Строки); + + // Добавляем интерфейсы ПКО, ПКС, ПКГС. + ДополнитьИнтерфейсамиОбработчиковПравилаКонвертацииОбъектов(ТаблицаПКО); + +КонецПроцедуры + +#КонецОбласти + +#Область ПроцедурыРаботыСПравиламиОбмена + +// Осуществляет поиск правила конвертации по имени или в соответствии с типом +// переданного объекта. +// +// Параметры: +// Объект - Объект-источник, для которого ищем правило конвертации. +// ИмяПравила - имя правила конвертации. +// +// Возвращаемое значение: +// Ссылка на правило конвертации (строка в таблице правил). +// +Функция НайтиПравило(Объект, ИмяПравила="") Экспорт + + Если Не ПустаяСтрока(ИмяПравила) Тогда + + Правило = Правила[ИмяПравила]; + + Иначе + + Правило = Менеджеры[ТипЗнч(Объект)]; + Если Правило <> Неопределено Тогда + Правило = Правило.ПКО; + + Если Правило <> Неопределено Тогда + ИмяПравила = Правило.Имя; + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Возврат Правило; + +КонецФункции + +// Сохраняет правила обмена во внутреннем формате. +// +// Параметры: +// Нет. +// +Процедура СохранитьПравилаВоВнутреннемФормате() Экспорт + + Для Каждого Правило Из ТаблицаПравилКонвертации Цикл + Правило.Выгруженные.Очистить(); + Правило.ВыгруженныеТолькоСсылки.Очистить(); + КонецЦикла; + + СтруктураПравил = Новый Структура; + + // Сохраняем запросы + ЗапросыДляСохранения = Новый Структура; + Для Каждого ЭлементСтруктуры Из Запросы Цикл + ЗапросыДляСохранения.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение.Текст); + КонецЦикла; + + ПараметрыДляСохранения = Новый Структура; + Для Каждого ЭлементСтруктуры Из Параметры Цикл + ПараметрыДляСохранения.Вставить(ЭлементСтруктуры.Ключ, Неопределено); + КонецЦикла; + + СтруктураПравил.Вставить("ТаблицаПравилВыгрузки", ТаблицаПравилВыгрузки); + СтруктураПравил.Вставить("ТаблицаПравилКонвертации", ТаблицаПравилКонвертации); + СтруктураПравил.Вставить("Алгоритмы", Алгоритмы); + СтруктураПравил.Вставить("Запросы", ЗапросыДляСохранения); + СтруктураПравил.Вставить("Конвертация", Конвертация); + СтруктураПравил.Вставить("мXMLПравила", мXMLПравила); + СтруктураПравил.Вставить("ТаблицаНастройкиПараметров", ТаблицаНастройкиПараметров); + СтруктураПравил.Вставить("Параметры", ПараметрыДляСохранения); + + СтруктураПравил.Вставить("ВерсияПлатформыПриемника", ВерсияПлатформыПриемника); + + СохраненныеНастройки = Новый ХранилищеЗначения(СтруктураПравил); + +КонецПроцедуры + +// Устанавливает значения параметров в структуре Параметры +// по таблице ТаблицаНастройкиПараметров. +// +Процедура УстановитьПараметрыИзДиалога() Экспорт + + Для Каждого СтрокаТаблицы Из ТаблицаНастройкиПараметров Цикл + Параметры.Вставить(СтрокаТаблицы.Имя, СтрокаТаблицы.Значение); + КонецЦикла; + +КонецПроцедуры + +// Устанавливает значение параметра в таблице параметров в форме обработки. +// +Процедура УстановитьЗначениеПараметраВТаблице(ИмяПараметра, ЗначениеПараметра) Экспорт + + СтрокаТаблицы = ТаблицаНастройкиПараметров.Найти(ИмяПараметра, "Имя"); + + Если СтрокаТаблицы <> Неопределено Тогда + + СтрокаТаблицы.Значение = ЗначениеПараметра; + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработкаПравилОчистки + +// Производит удаление (или помечает на удаление) объект выборки в соответствии с указанным правилом. +// +// Параметры: +// Объект - удаляемый (помечаемый на удаление) объект выборки. +// Правило - ссылка на правило очистки данных. +// Свойства - свойства объекта метаданного удаляемого объекта. +// ВходящиеДанные - произвольные вспомогательные данные. +// +Процедура УдалениеОбъектаВыборки(Объект, Правило, Свойства=Неопределено, ВходящиеДанные=Неопределено) Экспорт + + Если БезопасныйРежим Тогда + УстановитьБезопасныйРежим(Истина); + Для Каждого ИмяРазделителя Из РазделителиКонфигурации Цикл + УстановитьБезопасныйРежимРазделенияДанных(ИмяРазделителя, Истина); + КонецЦикла; + КонецЕсли; + + Отказ = Ложь; + УдалитьНепосредственно = Правило.Непосредственно; + + + // Обработчик ПередУдалениемОбъектаВыборки + Если Не ПустаяСтрока(Правило.ПередУдалением) Тогда + + Попытка + + Если ФлагРежимОтладкиОбработчиков Тогда + + Выполнить(ПолучитьСтрокуВызоваОбработчика(Правило, "ПередУдалением")); + + Иначе + + Выполнить(Правило.ПередУдалением); + + КонецЕсли; + + Исключение + + ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(29, ОписаниеОшибки(), Правило.Имя, Объект, "ПередУдалениемОбъектаВыборки"); + + КонецПопытки; + + Если Отказ Тогда + + Возврат; + + КонецЕсли; + + КонецЕсли; + + + Попытка + + ВыполнитьУдалениеОбъекта(Объект, Свойства, УдалитьНепосредственно); + + Исключение + + ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(24, ОписаниеОшибки(), Правило.Имя, Объект, ""); + + КонецПопытки; + +КонецПроцедуры + +#КонецОбласти + +#Область ПроцедурыВыгрузкиДанных + +// Производит выгрузку объекта в соответствии с указанным правилом конвертации. +// +// Параметры: +// Источник - произвольный источник данных. +// Приемник - xml-узел объекта приемника. +// ВходящиеДанные - произвольные вспомогательные данные, передаваемые правилу +// для выполнения конвертации. +// ИсходящиеДанные - произвольные вспомогательные данные, передаваемые правилам +// конвертации свойств. +// ИмяПКО - имя правила конвертации, согласно которому осуществляется выгрузка. +// УзелСсылки - xml-узел ссылки объекта приемника. +// ТолькоПолучитьУзелСсылки - если Истина, то выгрузка объекта не производится, только формируется +// xml-узел ссылки. +// ПКО - ссылка на правило конвертации. +// +// Возвращаемое значение: +// xml-узел ссылки или значение приемника. +// +Функция ВыгрузитьПоПравилу(Источник = Неопределено, + Приемник = Неопределено, + ВходящиеДанные = Неопределено, + ИсходящиеДанные = Неопределено, + ИмяПКО = "", + УзелСсылки = Неопределено, + ТолькоПолучитьУзелСсылки = Ложь, + ПКО = Неопределено, + ЭтоПравилоСГлобальнойВыгрузкойОбъектов = Ложь, + ВыборкаДляВыгрузкиДанных = Неопределено) Экспорт + + Если БезопасныйРежим Тогда + УстановитьБезопасныйРежим(Истина); + Для Каждого ИмяРазделителя Из РазделителиКонфигурации Цикл + УстановитьБезопасныйРежимРазделенияДанных(ИмяРазделителя, Истина); + КонецЦикла; + КонецЕсли; + + // Поиск ПКО + Если ПКО = Неопределено Тогда + + ПКО = НайтиПравило(Источник, ИмяПКО); + + ИначеЕсли (Не ПустаяСтрока(ИмяПКО)) + И ПКО.Имя <> ИмяПКО Тогда + + ПКО = НайтиПравило(Источник, ИмяПКО); + + КонецЕсли; + + Если ПКО = Неопределено Тогда + + ЗП = ПолучитьСтруктуруЗаписиПротокола(45); + + ЗП.Объект = Источник; + ЗП.ТипОбъекта = ТипЗнч(Источник); + + ЗаписатьВПротоколВыполнения(45, ЗП, Истина); // не найдено ПКО + Возврат Неопределено; + + КонецЕсли; + + ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу + 1; + + Если ФлагКомментироватьОбработкуОбъектов Тогда + + ОписаниеТипа = Новый ОписаниеТипов("Строка"); + ИсточникВСтроку = ОписаниеТипа.ПривестиЗначение(Источник); + ИсточникВСтроку = ?(ИсточникВСтроку = "", " ", ИсточникВСтроку); + + ПрОбъекта = ИсточникВСтроку + " (" + ТипЗнч(Источник) + ")"; + + СтрокаНазванияПКО = " ПКО: " + СокрЛП(ИмяПКО) + " (" + СокрЛП(ПКО.Наименование) + ")"; + + СтрокаПользователю = ?(ТолькоПолучитьУзелСсылки, НСтр("ru = 'Конвертация ссылки на объект: %1'"), НСтр("ru = 'Конвертация объекта: %1'")); + СтрокаПользователю = ПодставитьПараметрыВСтроку(СтрокаПользователю, ПрОбъекта); + + ЗаписатьВПротоколВыполнения(СтрокаПользователю + СтрокаНазванияПКО, , Ложь, ТекущийУровеньВложенностиВыгрузитьПоПравилу + 1, 7); + + КонецЕсли; + + ЭтоПравилоСГлобальнойВыгрузкойОбъектов = ВыполнитьОбменДаннымиВОптимизированномФормате И ПКО.ИспользоватьБыстрыйПоискПриЗагрузке; + + ЗапоминатьВыгруженные = ПКО.ЗапоминатьВыгруженные; + ВыгруженныеОбъекты = ПКО.Выгруженные; + ВыгруженныеОбъектыТолькоСсылки = ПКО.ВыгруженныеТолькоСсылки; + ВсеОбъектыВыгружены = ПКО.ВсеОбъектыВыгружены; + НеЗамещатьОбъектПриЗагрузке = ПКО.НеЗамещать; + НеСоздаватьЕслиНеНайден = ПКО.НеСоздаватьЕслиНеНайден; + ПриПереносеОбъектаПоСсылкеУстанавливатьТолькоGIUD = ПКО.ПриПереносеОбъектаПоСсылкеУстанавливатьТолькоGIUD; + + ПрефиксАвтонумерации = ""; + РежимЗаписи = ""; + РежимПроведения = ""; + СписокВременныхФайлов = Неопределено; + + ИмяТипа = ""; + СтруктураСвойств = Менеджеры[ПКО.Источник]; + Если СтруктураСвойств = Неопределено Тогда + СтруктураСвойств = Менеджеры[ТипЗнч(Источник)]; + КонецЕсли; + + Если СтруктураСвойств <> Неопределено Тогда + ИмяТипа = СтруктураСвойств.ИмяТипа; + КонецЕсли; + + // КлючВыгружаемыхДанных + + Если (Источник <> Неопределено) И ЗапоминатьВыгруженные Тогда + Если ИмяТипа = "РегистрСведений" ИЛИ ИмяТипа = "Константы" ИЛИ ПустаяСтрока(ИмяТипа) Тогда + ЗапоминатьВыгруженные = Ложь; + Иначе + КлючВыгружаемыхДанных = ЗначениеВСтрокуВнутр(Источник); + КонецЕсли; + Иначе + КлючВыгружаемыхДанных = ИмяПКО; + ЗапоминатьВыгруженные = Ложь; + КонецЕсли; + + + // Переменная для хранения имени предопределенного элемента. + ИмяПредопределенногоЭлемента = Неопределено; + + // Глобальный обработчик ПередКонвертациейОбъекта. + Отказ = Ложь; + Если ЕстьГлобальныйОбработчикПередКонвертациейОбъекта Тогда + + Попытка + + Если ФлагРежимОтладкиОбработчиков Тогда + + Выполнить(ПолучитьСтрокуВызоваОбработчика(Конвертация, "ПередКонвертациейОбъекта")); + + Иначе + + Выполнить(Конвертация.ПередКонвертациейОбъекта); + + КонецЕсли; + + Исключение + ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(64, ОписаниеОшибки(), ПКО, Источник, НСтр("ru = 'ПередКонвертациейОбъекта (глобальный)'")); + КонецПопытки; + + Если Отказ Тогда // Отказ от дальнейшей обработки правила. + ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; + Возврат Приемник; + КонецЕсли; + + КонецЕсли; + + // Обработчик ПередВыгрузкой + Если ПКО.ЕстьОбработчикПередВыгрузкой Тогда + + Попытка + + Если ФлагРежимОтладкиОбработчиков Тогда + + Выполнить(ПолучитьСтрокуВызоваОбработчика(ПКО, "ПередВыгрузкой")); + + Иначе + + Выполнить(ПКО.ПередВыгрузкой); + + КонецЕсли; + + Исключение + ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(41, ОписаниеОшибки(), ПКО, Источник, "ПередВыгрузкойОбъекта"); + КонецПопытки; + + Если Отказ Тогда // Отказ от дальнейшей обработки правила. + ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; + Возврат Приемник; + КонецЕсли; + + КонецЕсли; + + // Возможно такие данные уже выгружались. + Если Не ВсеОбъектыВыгружены Тогда + + НПП = 0; + + Если ЗапоминатьВыгруженные Тогда + + УзелСсылки = ВыгруженныеОбъекты[КлючВыгружаемыхДанных]; + Если УзелСсылки <> Неопределено Тогда + + Если ТолькоПолучитьУзелСсылки Тогда + ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; + Возврат УзелСсылки; + КонецЕсли; + + НомерВыгруженнойСсылки = ВыгруженныеОбъектыТолькоСсылки[КлючВыгружаемыхДанных]; + Если НомерВыгруженнойСсылки = Неопределено Тогда + ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; + Возврат УзелСсылки; + Иначе + + СтрокаВСтекеВыгрузки = мСтекВызововВыгрузкиДанных.Найти(КлючВыгружаемыхДанных, "Ссылка"); + + Если СтрокаВСтекеВыгрузки <> Неопределено Тогда + ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; + Возврат УзелСсылки; + КонецЕсли; + + СтрокаВСтекеВыгрузки = мСтекВызововВыгрузкиДанных.Добавить(); + СтрокаВСтекеВыгрузки.Ссылка = КлючВыгружаемыхДанных; + + НПП = НомерВыгруженнойСсылки; + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + Если НПП = 0 Тогда + + мСчетчикНПП = мСчетчикНПП + 1; + НПП = мСчетчикНПП; + + КонецЕсли; + + // Это позволит избежать циклических ссылок. + Если ЗапоминатьВыгруженные Тогда + + ВыгруженныеОбъекты[КлючВыгружаемыхДанных] = НПП; + Если ТолькоПолучитьУзелСсылки Тогда + ВыгруженныеОбъектыТолькоСсылки[КлючВыгружаемыхДанных] = НПП; + Иначе + + СтрокаВСтекеВыгрузки = мСтекВызововВыгрузкиДанных.Добавить(); + СтрокаВСтекеВыгрузки.Ссылка = КлючВыгружаемыхДанных; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + СоответствиеЗначений = ПКО.Значения; + КоличествоЭлементовСоответствияЗначений = СоответствиеЗначений.Количество(); + + // Обработка соответствий предопределенных элементов. + Если ПлатформаПриемника = "V8" Тогда + + // Если имя предопределенного элемента пока не определено, то попытаемся его определить. + Если ИмяПредопределенногоЭлемента = Неопределено Тогда + + Если СтруктураСвойств <> Неопределено + И КоличествоЭлементовСоответствияЗначений > 0 + И СтруктураСвойств.ВозможенПоискПоПредопределенным Тогда + + Попытка + ИмяПредопределенногоИсточник = ИмяПредопределенного(Источник); + Исключение + ИмяПредопределенногоИсточник = ""; + КонецПопытки; + + Иначе + + ИмяПредопределенногоИсточник = ""; + + КонецЕсли; + + Если НЕ ПустаяСтрока(ИмяПредопределенногоИсточник) + И КоличествоЭлементовСоответствияЗначений > 0 Тогда + + ИмяПредопределенногоЭлемента = СоответствиеЗначений[Источник]; + + Иначе + ИмяПредопределенногоЭлемента = Неопределено; + КонецЕсли; + + КонецЕсли; + + Если ИмяПредопределенногоЭлемента <> Неопределено Тогда + КоличествоЭлементовСоответствияЗначений = 0; + КонецЕсли; + + Иначе + ИмяПредопределенногоЭлемента = Неопределено; + КонецЕсли; + + НеНужноВыгружатьПоСоответствиюЗначений = (КоличествоЭлементовСоответствияЗначений = 0); + + Если Не НеНужноВыгружатьПоСоответствиюЗначений Тогда + + // Если нет объекта в соответствии значений - выгружаем его штатным образом. + УзелСсылки = СоответствиеЗначений[Источник]; + Если УзелСсылки = Неопределено + И ПКО.СвойстваПоиска.Количество() > 0 Тогда + + // Возможно это конвертация из перечисления в перечисление и мы просто не нашли по. + // ПКЗ нужное свойство - тогда просто выгружаем пустую ссылку и все. + Если СтруктураСвойств.ИмяТипа = "Перечисление" + И СтрНайти(ПКО.Приемник, "ПеречислениеСсылка.") > 0 Тогда + + УзелСсылки = ""; + + Иначе + + НеНужноВыгружатьПоСоответствиюЗначений = Истина; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + НужноЗапоминатьОбъект = ЗапоминатьВыгруженные И (Не ВсеОбъектыВыгружены); + + Если НеНужноВыгружатьПоСоответствиюЗначений Тогда + + Если ПКО.СвойстваПоиска.Количество() > 0 + ИЛИ ИмяПредопределенногоЭлемента <> Неопределено Тогда + + // Формируем узел ссылки + УзелСсылки = СоздатьУзел("Ссылка"); + + Если НужноЗапоминатьОбъект Тогда + + Если ЭтоПравилоСГлобальнойВыгрузкойОбъектов Тогда + УстановитьАтрибут(УзелСсылки, "ГНпп", НПП); + Иначе + УстановитьАтрибут(УзелСсылки, "Нпп", НПП); + КонецЕсли; + + КонецЕсли; + + ВыгрузитьТолькоСсылку = ПКО.НеВыгружатьОбъектыСвойствПоСсылкам ИЛИ ТолькоПолучитьУзелСсылки; + + Если НеСоздаватьЕслиНеНайден Тогда + УстановитьАтрибут(УзелСсылки, "НеСоздаватьЕслиНеНайден", НеСоздаватьЕслиНеНайден); + КонецЕсли; + + Если ПриПереносеОбъектаПоСсылкеУстанавливатьТолькоGIUD Тогда + УстановитьАтрибут(УзелСсылки, "ПриПереносеОбъектаПоСсылкеУстанавливатьТолькоGIUD", ПриПереносеОбъектаПоСсылкеУстанавливатьТолькоGIUD); + КонецЕсли; + + ВыгрузитьСвойства(Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, ПКО.СвойстваПоиска, + УзелСсылки, ВыборкаДляВыгрузкиДанных, ИмяПредопределенногоЭлемента, ПКО.НеВыгружатьОбъектыСвойствПоСсылкам ИЛИ ТолькоПолучитьУзелСсылки); + + УзелСсылки.ЗаписатьКонецЭлемента(); + УзелСсылки = УзелСсылки.Закрыть(); + + Если НужноЗапоминатьОбъект Тогда + + ВыгруженныеОбъекты[КлючВыгружаемыхДанных] = УзелСсылки; + + КонецЕсли; + + Иначе + УзелСсылки = НПП; + КонецЕсли; + + Иначе + + // Поиск в соответствии значений по ПКЗ. + Если УзелСсылки = Неопределено Тогда + // По Соответствию значений не нашли - пробуем найти по свойствам поиска. + СтруктураЗаписи = Новый Структура("Источник,ТипИсточника", Источник, ТипЗнч(Источник)); + ЗаписатьВПротоколВыполнения(71, СтруктураЗаписи); + Если СтрокаВСтекеВыгрузки <> Неопределено Тогда + мСтекВызововВыгрузкиДанных.Удалить(СтрокаВСтекеВыгрузки); + КонецЕсли; + ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; + Возврат Неопределено; + КонецЕсли; + + Если ЗапоминатьВыгруженные Тогда + ВыгруженныеОбъекты[КлючВыгружаемыхДанных] = УзелСсылки; + КонецЕсли; + + Если СтрокаВСтекеВыгрузки <> Неопределено Тогда + мСтекВызововВыгрузкиДанных.Удалить(СтрокаВСтекеВыгрузки); + КонецЕсли; + ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; + Возврат УзелСсылки; + + КонецЕсли; + + Если ТолькоПолучитьУзелСсылки Или ВсеОбъектыВыгружены Тогда + + Если СтрокаВСтекеВыгрузки <> Неопределено Тогда + мСтекВызововВыгрузкиДанных.Удалить(СтрокаВСтекеВыгрузки); + КонецЕсли; + ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; + Возврат УзелСсылки; + + КонецЕсли; + + Если Приемник = Неопределено Тогда + + Приемник = СоздатьУзел("Объект"); + + Если ЭтоПравилоСГлобальнойВыгрузкойОбъектов Тогда + УстановитьАтрибут(Приемник, "ГНпп", НПП); + Иначе + УстановитьАтрибут(Приемник, "Нпп", НПП); + КонецЕсли; + + УстановитьАтрибут(Приемник, "Тип", ПКО.Приемник); + УстановитьАтрибут(Приемник, "ИмяПравила", ПКО.Имя); + + Если НеЗамещатьОбъектПриЗагрузке Тогда + УстановитьАтрибут(Приемник, "НеЗамещать", "true"); + КонецЕсли; + + Если Не ПустаяСтрока(ПрефиксАвтонумерации) Тогда + УстановитьАтрибут(Приемник, "ПрефиксАвтонумерации", ПрефиксАвтонумерации); + КонецЕсли; + + Если Не ПустаяСтрока(РежимЗаписи) Тогда + УстановитьАтрибут(Приемник, "РежимЗаписи", РежимЗаписи); + Если Не ПустаяСтрока(РежимПроведения) Тогда + УстановитьАтрибут(Приемник, "РежимПроведения", РежимПроведения); + КонецЕсли; + КонецЕсли; + + Если ТипЗнч(УзелСсылки) <> одТипЧисло Тогда + ДобавитьПодчиненный(Приемник, УзелСсылки); + КонецЕсли; + + КонецЕсли; + + // Обработчик ПриВыгрузке + СтандартнаяОбработка = Истина; + Отказ = Ложь; + + Если ПКО.ЕстьОбработчикПриВыгрузке Тогда + + Попытка + + Если ФлагРежимОтладкиОбработчиков Тогда + + Выполнить(ПолучитьСтрокуВызоваОбработчика(ПКО, "ПриВыгрузке")); + + Иначе + + Выполнить(ПКО.ПриВыгрузке); + + КонецЕсли; + + Исключение + ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(42, ОписаниеОшибки(), ПКО, Источник, "ПриВыгрузкеОбъекта"); + КонецПопытки; + + Если Отказ Тогда // Отказ от записи объекта в файл. + Если СтрокаВСтекеВыгрузки <> Неопределено Тогда + мСтекВызововВыгрузкиДанных.Удалить(СтрокаВСтекеВыгрузки); + КонецЕсли; + ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; + Возврат УзелСсылки; + КонецЕсли; + + КонецЕсли; + + // Выгрузка свойств + Если СтандартнаяОбработка Тогда + + ВыгрузитьСвойства(Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, ПКО.Свойства, , ВыборкаДляВыгрузкиДанных, , + ПКО.НеВыгружатьОбъектыСвойствПоСсылкам ИЛИ ТолькоПолучитьУзелСсылки, СписокВременныхФайлов); + + КонецЕсли; + + // Обработчик ПослеВыгрузки + Если ПКО.ЕстьОбработчикПослеВыгрузки Тогда + + Попытка + + Если ФлагРежимОтладкиОбработчиков Тогда + + Выполнить(ПолучитьСтрокуВызоваОбработчика(ПКО, "ПослеВыгрузки")); + + Иначе + + Выполнить(ПКО.ПослеВыгрузки); + + КонецЕсли; + + Исключение + ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(43, ОписаниеОшибки(), ПКО, Источник, "ПослеВыгрузкиОбъекта"); + КонецПопытки; + + Если Отказ Тогда // Отказ от записи объекта в файл. + + Если СтрокаВСтекеВыгрузки <> Неопределено Тогда + мСтекВызововВыгрузкиДанных.Удалить(СтрокаВСтекеВыгрузки); + КонецЕсли; + ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; + Возврат УзелСсылки; + + КонецЕсли; + + КонецЕсли; + + Если СписокВременныхФайлов = Неопределено Тогда + + // Запись объекта в файл + Приемник.ЗаписатьКонецЭлемента(); + ЗаписатьВФайл(Приемник); + + Иначе + + ЗаписатьВФайл(Приемник); + + ВременныйФайл = Новый ЧтениеТекста; + Для каждого ИмяВременногоФайла Из СписокВременныхФайлов Цикл + + ВременныйФайл.Открыть(ИмяВременногоФайла, КодировкаТекста.UTF8); + + СтрокаВременногоФайла = ВременныйФайл.ПрочитатьСтроку(); + Пока СтрокаВременногоФайла <> Неопределено Цикл + ЗаписатьВФайл(СтрокаВременногоФайла); + СтрокаВременногоФайла = ВременныйФайл.ПрочитатьСтроку(); + КонецЦикла; + + ВременныйФайл.Закрыть(); + + УдалитьФайлы(ИмяВременногоФайла); + КонецЦикла; + + ЗаписатьВФайл("</Объект>"); + + КонецЕсли; + + мСчетчикВыгруженныхОбъектов = 1 + мСчетчикВыгруженныхОбъектов; + + Если НужноЗапоминатьОбъект Тогда + + Если ЭтоПравилоСГлобальнойВыгрузкойОбъектов Тогда + ВыгруженныеОбъекты[КлючВыгружаемыхДанных] = НПП; + КонецЕсли; + + КонецЕсли; + + Если СтрокаВСтекеВыгрузки <> Неопределено Тогда + мСтекВызововВыгрузкиДанных.Удалить(СтрокаВСтекеВыгрузки); + КонецЕсли; + + ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; + + // Обработчик ПослеВыгрузкиВФайл + Если ПКО.ЕстьОбработчикПослеВыгрузкиВФайл Тогда + + Попытка + + Если ФлагРежимОтладкиОбработчиков Тогда + + Выполнить(ПолучитьСтрокуВызоваОбработчика(ПКО, "ПослеВыгрузкиВФайл")); + + Иначе + + Выполнить(ПКО.ПослеВыгрузкиВФайл); + + КонецЕсли; + + Исключение + ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(76, ОписаниеОшибки(), ПКО, Источник, "ЕстьОбработчикПослеВыгрузкиВФайл"); + КонецПопытки; + + КонецЕсли; + + Возврат УзелСсылки; + +КонецФункции // ВыгрузитьПоПравилу() + +// Возвращает фрагмент текста языка запросов, который выражает условие ограничения на интервал дат. +// +Функция ПолучитьСтрокуОграниченияПоДатеДляЗапроса(Свойства, ИмяТипа, ИмяГруппыТаблицы = "", ВыборкаДляОчисткиДанных = Ложь) Экспорт + + ИтоговоеОграничениеПоДате = ""; + + Если НЕ (ИмяТипа = "Документ" ИЛИ ИмяТипа = "РегистрСведений") Тогда + Возврат ИтоговоеОграничениеПоДате; + КонецЕсли; + + Если ИмяТипа = "РегистрСведений" Тогда + + Непериодический = НЕ Свойства.Периодический; + НеНужноОграничениеПоДатам = ВыборкаДляОчисткиДанных ИЛИ Непериодический; + + Если НеНужноОграничениеПоДатам Тогда + Возврат ИтоговоеОграничениеПоДате; + КонецЕсли; + + КонецЕсли; + + Если ПустаяСтрока(ИмяГруппыТаблицы) Тогда + ИмяПоляОграничения = ?(ИмяТипа = "Документ", "Дата", "Период"); + Иначе + ИмяПоляОграничения = ИмяГруппыТаблицы + "." + ?(ИмяТипа = "Документ", "Дата", "Период"); + КонецЕсли; + + Если ДатаНачала <> ЗначениеПустаяДата Тогда + + ИтоговоеОграничениеПоДате = " + | ГДЕ + | " + ИмяПоляОграничения + " >= &ДатаНачала"; + + КонецЕсли; + + Если ДатаОкончания <> ЗначениеПустаяДата Тогда + + Если ПустаяСтрока(ИтоговоеОграничениеПоДате) Тогда + + ИтоговоеОграничениеПоДате = " + | ГДЕ + | " + ИмяПоляОграничения + " <= &ДатаОкончания"; + + Иначе + + ИтоговоеОграничениеПоДате = ИтоговоеОграничениеПоДате + " + | И + | " + ИмяПоляОграничения + " <= &ДатаОкончания"; + + КонецЕсли; + + КонецЕсли; + + Возврат ИтоговоеОграничениеПоДате; + +КонецФункции + +// Формирует результат запроса для выгрузки очистки данных. +// +Функция ПолучитьРезультатЗапросаДляВыгрузкиОчисткиДанных(Свойства, ИмяТипа, + ВыборкаДляОчисткиДанных = Ложь, УдалятьОбъектыНепосредственно = Ложь, ВыбиратьВсеПоля = Истина) Экспорт + + СтрокаРазрешения = ?(ВыгружатьТолькоРазрешенные, " РАЗРЕШЕННЫЕ ", ""); + + СтрокаВыбораПолей = ?(ВыбиратьВсеПоля, " * ", " ОбъектДляВыгрузки.Ссылка КАК Ссылка "); + + Если ИмяТипа = "Справочник" + ИЛИ ИмяТипа = "ПланВидовХарактеристик" + ИЛИ ИмяТипа = "ПланСчетов" + ИЛИ ИмяТипа = "ПланВидовРасчета" + ИЛИ ИмяТипа = "РегистрБухгалтерии" + ИЛИ ИмяТипа = "ПланОбмена" + ИЛИ ИмяТипа = "Задача" + ИЛИ ИмяТипа = "БизнесПроцесс" Тогда + + Запрос = Новый Запрос(); + + Если ИмяТипа = "Справочник" Тогда + МетаданныеОбъектов = Метаданные.Справочники[Свойства.Имя]; + ИначеЕсли ИмяТипа = "ПланВидовХарактеристик" Тогда + МетаданныеОбъектов = Метаданные.ПланыВидовХарактеристик[Свойства.Имя]; + ИначеЕсли ИмяТипа = "ПланСчетов" Тогда + МетаданныеОбъектов = Метаданные.ПланыСчетов[Свойства.Имя]; + ИначеЕсли ИмяТипа = "ПланВидовРасчета" Тогда + МетаданныеОбъектов = Метаданные.ПланыВидовРасчета[Свойства.Имя]; + ИначеЕсли ИмяТипа = "РегистрБухгалтерии" Тогда + МетаданныеОбъектов = Метаданные.РегистрыБухгалтерии[Свойства.Имя]; + ИначеЕсли ИмяТипа = "ПланОбмена" Тогда + МетаданныеОбъектов = Метаданные.ПланыОбмена[Свойства.Имя]; + ИначеЕсли ИмяТипа = "Задача" Тогда + МетаданныеОбъектов = Метаданные.Задачи[Свойства.Имя]; + ИначеЕсли ИмяТипа = "БизнесПроцесс" Тогда + МетаданныеОбъектов = Метаданные.БизнесПроцессы[Свойства.Имя]; + КонецЕсли; + + Если ИмяТипа = "РегистрБухгалтерии" Тогда + + СтрокаВыбораПолей = "*"; + ИмяТаблицыДляВыборки = Свойства.Имя + ".ДвиженияССубконто"; + + Иначе + + ИмяТаблицыДляВыборки = Свойства.Имя; + + Если ВыгружатьТолькоРазрешенные + И НЕ ВыбиратьВсеПоля Тогда + + ИмяПервогоРеквизита = ПолучитьИмяПервогоРеквизитаМетаданных(МетаданныеОбъектов); + Если Не ПустаяСтрока(ИмяПервогоРеквизита) Тогда + СтрокаВыбораПолей = СтрокаВыбораПолей + ", ОбъектДляВыгрузки." + ИмяПервогоРеквизита; + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Запрос.Текст = "ВЫБРАТЬ " + СтрокаРазрешения + " + | " + СтрокаВыбораПолей + " + |ИЗ + | " + ИмяТипа + "." + ИмяТаблицыДляВыборки + " КАК ОбъектДляВыгрузки + | + |"; + + ИначеЕсли ИмяТипа = "Документ" Тогда + + Если ВыгружатьТолькоРазрешенные Тогда + + ИмяПервогоРеквизита = ПолучитьИмяПервогоРеквизитаМетаданных(Метаданные.Документы[Свойства.Имя]); + Если Не ПустаяСтрока(ИмяПервогоРеквизита) Тогда + СтрокаВыбораПолей = СтрокаВыбораПолей + ", ОбъектДляВыгрузки." + ИмяПервогоРеквизита; + КонецЕсли; + + КонецЕсли; + + ИтоговоеОграничениеПоДате = ПолучитьСтрокуОграниченияПоДатеДляЗапроса(Свойства, ИмяТипа, "ОбъектДляВыгрузки", ВыборкаДляОчисткиДанных); + + Запрос = Новый Запрос(); + + Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); + Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); + + Запрос.Текст = "ВЫБРАТЬ " + СтрокаРазрешения + " + | " + СтрокаВыбораПолей + " + |ИЗ + | " + ИмяТипа + "." + Свойства.Имя + " КАК ОбъектДляВыгрузки + | + |" + ИтоговоеОграничениеПоДате; + + + ИначеЕсли ИмяТипа = "РегистрСведений" Тогда + + Непериодический = НЕ Свойства.Периодический; + ПодчиненныйРегистратору = Свойства.ПодчиненныйРегистратору; + + ИтоговоеОграничениеПоДате = ПолучитьСтрокуОграниченияПоДатеДляЗапроса(Свойства, ИмяТипа, "ОбъектДляВыгрузки", ВыборкаДляОчисткиДанных); + + Запрос = Новый Запрос(); + + Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); + Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); + + СтрокаДополненияПолейВыборкиПодчиненРегистратору = ?(НЕ ПодчиненныйРегистратору, ", NULL КАК Активность, + | NULL КАК Регистратор, + | NULL КАК НомерСтроки", ""); + + СтрокаДополненияПолейВыборкиПериодичность = ?(Непериодический, ", NULL КАК Период", ""); + + Запрос.Текст = "ВЫБРАТЬ " + СтрокаРазрешения + " + | * + | + | " + СтрокаДополненияПолейВыборкиПодчиненРегистратору + " + | " + СтрокаДополненияПолейВыборкиПериодичность + " + | + |ИЗ + | " + ИмяТипа + "." + Свойства.Имя + " КАК ОбъектДляВыгрузки + | + |" + ИтоговоеОграничениеПоДате; + + Иначе + + Возврат Неопределено; + + КонецЕсли; + + Возврат Запрос.Выполнить(); + +КонецФункции + +// Формирует выборку для выгрузки очистки данных. +// +Функция ПолучитьВыборкуДляВыгрузкиОчисткиДанных(Свойства, ИмяТипа, + ВыборкаДляОчисткиДанных = Ложь, УдалятьОбъектыНепосредственно = Ложь, ВыбиратьВсеПоля = Истина) Экспорт + + РезультатЗапроса = ПолучитьРезультатЗапросаДляВыгрузкиОчисткиДанных(Свойства, ИмяТипа, + ВыборкаДляОчисткиДанных, УдалятьОбъектыНепосредственно, ВыбиратьВсеПоля); + + Если РезультатЗапроса = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Выборка = РезультатЗапроса.Выбрать(); + + Возврат Выборка; + +КонецФункции + +#КонецОбласти + +#Область ЭкспортируемыеПроцедурыИФункции + +// Заполняет переданную таблицу значений типами объектов метаданных для удаления, на которые есть право доступа для +// удаления. +// +Процедура ЗаполнитьСписокТиповДоступныхДляУдаления(ТаблицаДанных) Экспорт + + ТаблицаДанных.Очистить(); + + Для каждого ОбъектМД Из Метаданные.Справочники Цикл + + Если Не ПравоДоступа("Удаление", ОбъектМД) Тогда + Продолжить; + КонецЕсли; + + СтрокаТаблицы = ТаблицаДанных.Добавить(); + СтрокаТаблицы.Метаданные = "СправочникСсылка." + ОбъектМД.Имя; + + КонецЦикла; + + Для каждого ОбъектМД Из Метаданные.ПланыВидовХарактеристик Цикл + + Если Не ПравоДоступа("Удаление", ОбъектМД) Тогда + Продолжить; + КонецЕсли; + + СтрокаТаблицы = ТаблицаДанных.Добавить(); + СтрокаТаблицы.Метаданные = "ПланВидовХарактеристикСсылка." + ОбъектМД.Имя; + КонецЦикла; + + Для Каждого ОбъектМД Из Метаданные.Документы Цикл + + Если Не ПравоДоступа("Удаление", ОбъектМД) Тогда + Продолжить; + КонецЕсли; + + СтрокаТаблицы = ТаблицаДанных.Добавить(); + СтрокаТаблицы.Метаданные = "ДокументСсылка." + ОбъектМД.Имя; + КонецЦикла; + + Для каждого ОбъектМД Из Метаданные.РегистрыСведений Цикл + + Если Не ПравоДоступа("Удаление", ОбъектМД) Тогда + Продолжить; + КонецЕсли; + + Подчинен = (ОбъектМД.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору); + Если Подчинен Тогда Продолжить КонецЕсли; + + СтрокаТаблицы = ТаблицаДанных.Добавить(); + СтрокаТаблицы.Метаданные = "РегистрСведенийЗапись." + ОбъектМД.Имя; + + КонецЦикла; + +КонецПроцедуры + +// Устанавливает состояние пометки у подчиненных строк строки дерева значений +// в зависимости от пометки текущей строки. +// +// Параметры: +// ТекСтрока - Строка дерева значений. +// +Процедура УстановитьПометкиПодчиненных(ТекСтрока, Реквизит) Экспорт + + Подчиненные = ТекСтрока.Строки; + + Если Подчиненные.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Для Каждого Строка Из Подчиненные Цикл + + Если Строка.НастройкиПостроителя = Неопределено + И Реквизит = "ИспользоватьОтбор" Тогда + + Строка[Реквизит] = 0; + + Иначе + + Строка[Реквизит] = ТекСтрока[Реквизит]; + + КонецЕсли; + + УстановитьПометкиПодчиненных(Строка, Реквизит); + + КонецЦикла; + +КонецПроцедуры + +// Устанавливает состояние пометки у родительских строк строки дерева значений +// в зависимости от пометки текущей строки. +// +// Параметры: +// ТекСтрока - Строка дерева значений. +// +Процедура УстановитьПометкиРодителей(ТекСтрока, Реквизит) Экспорт + + Родитель = ТекСтрока.Родитель; + Если Родитель = Неопределено Тогда + Возврат; + КонецЕсли; + + ТекСостояние = Родитель[Реквизит]; + + НайденыВключенные = Ложь; + НайденыВыключенные = Ложь; + + Если Реквизит = "ИспользоватьОтбор" Тогда + + Для Каждого Строка Из Родитель.Строки Цикл + + Если Строка[Реквизит] = 0 + И Строка.НастройкиПостроителя <> Неопределено Тогда + + НайденыВыключенные = Истина; + + ИначеЕсли Строка[Реквизит] = 1 Тогда + НайденыВключенные = Истина; + КонецЕсли; + + Если НайденыВключенные И НайденыВыключенные Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + Иначе + + Для Каждого Строка Из Родитель.Строки Цикл + Если Строка[Реквизит] = 0 Тогда + НайденыВыключенные = Истина; + ИначеЕсли Строка[Реквизит] = 1 + ИЛИ Строка[Реквизит] = 2 Тогда + НайденыВключенные = Истина; + КонецЕсли; + Если НайденыВключенные И НайденыВыключенные Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + КонецЕсли; + + + Если НайденыВключенные И НайденыВыключенные Тогда + Включить = 2; + ИначеЕсли НайденыВключенные И (Не НайденыВыключенные) Тогда + Включить = 1; + ИначеЕсли (Не НайденыВключенные) И НайденыВыключенные Тогда + Включить = 0; + ИначеЕсли (Не НайденыВключенные) И (Не НайденыВыключенные) Тогда + Включить = 2; + КонецЕсли; + + Если Включить = ТекСостояние Тогда + Возврат; + Иначе + Родитель[Реквизит] = Включить; + УстановитьПометкиРодителей(Родитель, Реквизит); + КонецЕсли; + +КонецПроцедуры + +// Составляет полное имя файла из имени каталога и имени файла. +// +// Параметры: +// ИмяКаталога - Строка, содержащая путь к каталогу файла на диске. +// ИмяФайла - Строка, содержащая имя файла, без имени каталога. +// +// Возвращаемое значение: +// Строка - полное имя файла с учетом каталога. +// +Функция ПолучитьИмяФайлаОбмена(ИмяКаталога, ИмяФайла) Экспорт + + Если Не ПустаяСтрока(ИмяФайла) Тогда + + Возврат ИмяКаталога + ?(Прав(ИмяКаталога, 1) = "\", "", "\") + ИмяФайла; + + Иначе + + Возврат ИмяКаталога; + + КонецЕсли; + +КонецФункции + +// Выполняет передачу строки данных для загрузки в базе-приемнике. +// +// Параметры: +// ИнформацияДляЗаписиВФайл - Строка (текст XML) - строка с данными. +// СтрокаОшибкиВБазеПриемнике - Строка - содержит описание ошибки при загрузке в базе-приемнике. +// +Процедура ПередатьИнформациюОЗаписиВПриемник(ИнформацияДляЗаписиВФайл, СтрокаОшибкиВБазеПриемнике = "") Экспорт + + мОбработкаДляЗагрузкиДанных.ФайлОбмена.УстановитьСтроку(ИнформацияДляЗаписиВФайл); + + мОбработкаДляЗагрузкиДанных.ПроизвестиЧтениеДанных(СтрокаОшибкиВБазеПриемнике); + + Если Не ПустаяСтрока(СтрокаОшибкиВБазеПриемнике) Тогда + + СтрокаСообщения = ПодставитьПараметрыВСтроку(НСтр("ru = 'Загрузка в приемнике: %1'"), СтрокаОшибкиВБазеПриемнике); + ЗаписатьВПротоколВыполнения(СтрокаСообщения, Неопределено, Истина, , , Истина); + + КонецЕсли; + +КонецПроцедуры + +// Выполняет запись имени, типа и значения параметра в фай сообщения обмена для передачи в базу-приемник. +// +// Параметры: +// +Процедура ПередатьОдинПараметрВПриемник(Имя, ИсходноеЗначениеПараметра, ПравилоКонвертации = "") Экспорт + + Если ПустаяСтрока(ПравилоКонвертации) Тогда + + УзелПараметра = СоздатьУзел("ЗначениеПараметра"); + + УстановитьАтрибут(УзелПараметра, "Имя", Имя); + УстановитьАтрибут(УзелПараметра, "Тип", одТипЗначенияСтрокой(ИсходноеЗначениеПараметра)); + + ЭтоNULL = Ложь; + Пусто = одПустое(ИсходноеЗначениеПараметра, ЭтоNULL); + + Если Пусто Тогда + + // Надо записать что это пустое значение. + одЗаписатьЭлемент(УзелПараметра, "Пусто"); + + УзелПараметра.ЗаписатьКонецЭлемента(); + + ЗаписатьВФайл(УзелПараметра); + + Возврат; + + КонецЕсли; + + одЗаписатьЭлемент(УзелПараметра, "Значение", ИсходноеЗначениеПараметра); + + УзелПараметра.ЗаписатьКонецЭлемента(); + + ЗаписатьВФайл(УзелПараметра); + + Иначе + + УзелПараметра = СоздатьУзел("ЗначениеПараметра"); + + УстановитьАтрибут(УзелПараметра, "Имя", Имя); + + ЭтоNULL = Ложь; + Пусто = одПустое(ИсходноеЗначениеПараметра, ЭтоNULL); + + Если Пусто Тогда + + ПКОСвойств = НайтиПравило(ИсходноеЗначениеПараметра, ПравилоКонвертации); + ТипПриемника = ПКОСвойств.Приемник; + УстановитьАтрибут(УзелПараметра, "Тип", ТипПриемника); + + // Надо записать что это пустое значение. + одЗаписатьЭлемент(УзелПараметра, "Пусто"); + + УзелПараметра.ЗаписатьКонецЭлемента(); + + ЗаписатьВФайл(УзелПараметра); + + Возврат; + + КонецЕсли; + + ВыгрузитьДанныеСсылочногоОбъекта(ИсходноеЗначениеПараметра, , ПравилоКонвертации, , , УзелПараметра, Истина); + + УзелПараметра.ЗаписатьКонецЭлемента(); + + ЗаписатьВФайл(УзелПараметра); + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область УстановкаЗначенийРеквизитовИМодальныхПеременныхОбработки + +// Возвращает текущее значение версии обработки. +// +// Параметры: +// Нет. +// +// Возвращаемое значение: +// Текущее значение версии обработки. +// +Функция ВерсияОбъекта() Экспорт + + Возврат 218; + +КонецФункции + +#КонецОбласти + +#Область ИнициализацияТаблицПравилОбмена + +// Инициализирует колонки таблицы правил конвертации свойств объектов. +// +// Параметры: +// Таб - ТаблицаЗначений. инициализируемая таблица правил конвертации свойств. +// +Процедура ИнициализацияТаблицыПравилКонвертацииСвойств(Таб) Экспорт + + Колонки = Таб.Колонки; + + ДобавитьНедостающиеКолонки(Колонки, "Имя"); + ДобавитьНедостающиеКолонки(Колонки, "Наименование"); + ДобавитьНедостающиеКолонки(Колонки, "Порядок"); + + ДобавитьНедостающиеКолонки(Колонки, "ЭтоГруппа", одОписаниеТипа("Булево")); + ДобавитьНедостающиеКолонки(Колонки, "ПравилаГруппы"); + + ДобавитьНедостающиеКолонки(Колонки, "ВидИсточника"); + ДобавитьНедостающиеКолонки(Колонки, "ВидПриемника"); + + ДобавитьНедостающиеКолонки(Колонки, "УпрощеннаяВыгрузкаСвойства", одОписаниеТипа("Булево")); + ДобавитьНедостающиеКолонки(Колонки, "НуженУзелXMLПриВыгрузке", одОписаниеТипа("Булево")); + ДобавитьНедостающиеКолонки(Колонки, "НуженУзелXMLПриВыгрузкеГруппы", одОписаниеТипа("Булево")); + + ДобавитьНедостающиеКолонки(Колонки, "ТипИсточника", одОписаниеТипа("Строка")); + ДобавитьНедостающиеКолонки(Колонки, "ТипПриемника", одОписаниеТипа("Строка")); + + ДобавитьНедостающиеКолонки(Колонки, "Источник"); + ДобавитьНедостающиеКолонки(Колонки, "Приемник"); + + ДобавитьНедостающиеКолонки(Колонки, "ПравилоКонвертации"); + + ДобавитьНедостающиеКолонки(Колонки, "ПолучитьИзВходящихДанных", одОписаниеТипа("Булево")); + + ДобавитьНедостающиеКолонки(Колонки, "НеЗамещать", одОписаниеТипа("Булево")); + + ДобавитьНедостающиеКолонки(Колонки, "ПередВыгрузкой"); + ДобавитьНедостающиеКолонки(Колонки, "ПриВыгрузке"); + ДобавитьНедостающиеКолонки(Колонки, "ПослеВыгрузки"); + + ДобавитьНедостающиеКолонки(Колонки, "ПередОбработкойВыгрузки"); + ДобавитьНедостающиеКолонки(Колонки, "ПослеОбработкиВыгрузки"); + + ДобавитьНедостающиеКолонки(Колонки, "ЕстьОбработчикПередВыгрузкой", одОписаниеТипа("Булево")); + ДобавитьНедостающиеКолонки(Колонки, "ЕстьОбработчикПриВыгрузке", одОписаниеТипа("Булево")); + ДобавитьНедостающиеКолонки(Колонки, "ЕстьОбработчикПослеВыгрузки", одОписаниеТипа("Булево")); + + ДобавитьНедостающиеКолонки(Колонки, "ЕстьОбработчикПередОбработкойВыгрузки", одОписаниеТипа("Булево")); + ДобавитьНедостающиеКолонки(Колонки, "ЕстьОбработчикПослеОбработкиВыгрузки", одОписаниеТипа("Булево")); + + ДобавитьНедостающиеКолонки(Колонки, "ПриводитьКДлине", одОписаниеТипа("Число")); + ДобавитьНедостающиеКолонки(Колонки, "ИмяПараметраДляПередачи"); + ДобавитьНедостающиеКолонки(Колонки, "ПоискПоДатеНаРавенство", одОписаниеТипа("Булево")); + ДобавитьНедостающиеКолонки(Колонки, "ВыгружатьГруппуЧерезФайл", одОписаниеТипа("Булево")); + + ДобавитьНедостающиеКолонки(Колонки, "СтрокаПолейПоиска"); + +КонецПроцедуры + +#КонецОбласти + +#Область ИнициализацияРеквизитовИМодульныхПеременных + +// Инициализирует внешнюю обработку с модулем отладки обработчиков событий. +// +// Параметры: +// РаботаВозможна - Булево - флаг успешной инициализации внешней обработки. +// ОбъектВладелец - ОбработкаОбъект - объект, который будет являться владельцем +// инициализируемой внешней обработки. +// +Процедура ИнициализацияВнешнейОбработкиОбработчиковСобытий(РаботаВозможна, ОбъектВладелец) Экспорт + + Если Не РаботаВозможна Тогда + Возврат; + КонецЕсли; + + Если ФлагРежимОтладкиОбработчиков И ПустаяСтрока(ИмяФайлаВнешнейОбработкиОбработчиковСобытий) Тогда + + ЗаписатьВПротоколВыполнения(77); + РаботаВозможна = Ложь; + + ИначеЕсли ФлагРежимОтладкиОбработчиков Тогда + + Попытка + + Если ЭтоВнешняяОбработка() Тогда + + ВнешняяОбработкаОбработчиковСобытий = ВнешниеОбработки.Создать(ИмяФайлаВнешнейОбработкиОбработчиковСобытий, Ложь); + + Иначе + + ВнешняяОбработкаОбработчиковСобытий = Обработки[ИмяФайлаВнешнейОбработкиОбработчиковСобытий].Создать(); + + КонецЕсли; + + ВнешняяОбработкаОбработчиковСобытий.Конструктор(ОбъектВладелец); + + Исключение + + ДеструкторВнешнейОбработкиОбработчиковСобытий(); + + СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписатьВПротоколВыполнения(78); + + РаботаВозможна = Ложь; + ФлагРежимОтладкиОбработчиков = Ложь; + + КонецПопытки; + + КонецЕсли; + + Если РаботаВозможна Тогда + + ОбщиеПроцедурыФункции = ЭтотОбъект; + + КонецЕсли; + +КонецПроцедуры + +// Деструктор внешней обработки. +// +// Параметры: +// Нет. +// +// Деструктор внешней обработки. +// +// Параметры: +// Нет. +// +Процедура ДеструкторВнешнейОбработкиОбработчиковСобытий(ВключенРежимОтладки = Ложь) Экспорт + + Если Не ВключенРежимОтладки Тогда + + Если ВнешняяОбработкаОбработчиковСобытий <> Неопределено Тогда + + Попытка + + ВнешняяОбработкаОбработчиковСобытий.Деструктор(); + + Исключение + СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + КонецЕсли; + + ВнешняяОбработкаОбработчиковСобытий = Неопределено; + ОбщиеПроцедурыФункции = Неопределено; + + КонецЕсли; + +КонецПроцедуры + +// Удаляет временные файлы с заданным именем. +// +// Параметры: +// ИмяВременногоФайла - Строка - полное имя удаляемого файла. После выполнения процедуры очищается. +// +Процедура УдалитьВременныеФайлы(ИмяВременногоФайла) Экспорт + + Если Не ПустаяСтрока(ИмяВременногоФайла) Тогда + + Попытка + + УдалитьФайлы(ИмяВременногоФайла); + + ИмяВременногоФайла = ""; + + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Универсальный обмен данными в формате XML'", КодОсновногоЯзыка()), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область ПроцедурыИФункцииРаботыСФайломОбмена + // Открывает файл обмена, записывает заголовок файла в соответствии с форматом обмена. // // Параметры: @@ -1251,42 +2858,9 @@ КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ РАБОТЫ С ПРОТОКОЛОМ ОБМЕНА - -// Возвращает объект типа структура, содержащий все возможные поля -// записи протокола выполнения (сообщения об ошибках и т.п.). -// -// Параметры: -// Нет. -// -// Возвращаемое значение: -// Объект типа структура -// -Функция ПолучитьСтруктуруЗаписиПротокола(КодСообщения = "", СтрокаОшибки = "") Экспорт - - СтруктураОшибки = Новый Структура("ИмяПКО,ИмяПОД,Нпп,Гнпп,Источник,ТипОбъекта,Свойство,Значение,ТипЗначения,ПКО,ПКС,ПКГС,ПВД,ПОД,Объект,СвойствоПриемника,КонвертируемоеЗначение,Обработчик,ОписаниеОшибки,ПозицияМодуля,Текст,КодСообщения,УзелПланаОбмена"); - - СтрокаМодуля = ОтделитьРазделителем(СтрокаОшибки, "{"); - ОписаниеОшибки = ОтделитьРазделителем(СтрокаМодуля, "}: "); - - Если ОписаниеОшибки <> "" Тогда - - СтруктураОшибки.ОписаниеОшибки = ОписаниеОшибки; - СтруктураОшибки.ПозицияМодуля = СтрокаМодуля; - - КонецЕсли; - - Если СтруктураОшибки.КодСообщения <> "" Тогда - - СтруктураОшибки.КодСообщения = КодСообщения; - - КонецЕсли; - - Возврат СтруктураОшибки; - -КонецФункции +#Область ПроцедурыИФункцииРаботыСПротоколомОбмена // Выполняет инициализацию файла для записи событий загрузки/выгрузки данных. // @@ -1421,26 +2995,9 @@ КонецФункции -// Записывает информацию об ошибке в протокол выполнения обмена. -// -Функция ЗаписатьИнформациюОбОшибкеВПротокол(КодСообщения, СтрокаОшибки, Объект, ТипОбъекта = Неопределено) Экспорт - - ЗП = ПолучитьСтруктуруЗаписиПротокола(КодСообщения, СтрокаОшибки); - ЗП.Объект = Объект; - - Если ТипОбъекта <> Неопределено Тогда - ЗП.ТипОбъекта = ТипОбъекта; - КонецЕсли; - - СтрокаОшибки = ЗаписатьВПротоколВыполнения(КодСообщения, ЗП); - - Возврат СтрокаОшибки; - -КонецФункции - // Записывает информацию об ошибке в протокол выполнения обмена для обработчика очистки данных. // -Функция ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(КодСообщения, СтрокаОшибки, ИмяПравилаОчисткиДанных, Объект = "", ИмяОбработчика = "")Экспорт +Функция ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(КодСообщения, СтрокаОшибки, ИмяПравилаОчисткиДанных, Объект = "", ИмяОбработчика = "") ЗП = ПолучитьСтруктуруЗаписиПротокола(КодСообщения, СтрокаОшибки); ЗП.ПОД = ИмяПравилаОчисткиДанных; @@ -1467,36 +3024,6 @@ КонецФункции -// Регистрирует в протоколе выполнения ошибку обработчика ПКО (загрузка). -// -Функция ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(КодСообщения, СтрокаОшибки, ИмяПравила, Источник, - ТипОбъекта, Объект, ИмяОбработчика) Экспорт - - ЗП = ПолучитьСтруктуруЗаписиПротокола(КодСообщения, СтрокаОшибки); - ЗП.ИмяПКО = ИмяПравила; - ЗП.ТипОбъекта = ТипОбъекта; - ЗП.Обработчик = ИмяОбработчика; - - Если Не ПустаяСтрока(Источник) Тогда - - ЗП.Источник = Источник; - - КонецЕсли; - - Если Объект <> Неопределено Тогда - - ЗП.Объект = Строка(Объект); - - КонецЕсли; - - СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(КодСообщения, ЗП); - - Если Не ФлагРежимОтладки Тогда - ВызватьИсключение СтрокаСообщенияОбОшибке; - КонецЕсли; - -КонецФункции - // Регистрирует в протоколе выполнения ошибку обработчика ПКО (выгрузка). // Функция ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(КодСообщения, СтрокаОшибки, ПКО, Источник, ИмяОбработчика) @@ -1522,49 +3049,6 @@ КонецФункции -// Регистрирует в протоколе выполнения ошибку обработчика ПКС. -// -Функция ЗаписатьИнформациюОбОшибкеОбработчикиПКС(КодСообщения, СтрокаОшибки, ПКО, ПКС, Источник = "", - ИмяОбработчика = "", Значение = Неопределено, ЭтоПКС = Истина) Экспорт - - ЗП = ПолучитьСтруктуруЗаписиПротокола(КодСообщения, СтрокаОшибки); - ЗП.ПКО = ПКО.Имя + " (" + ПКО.Наименование + ")"; - - ИмяПравила = ПКС.Имя + " (" + ПКС.Наименование + ")"; - Если ЭтоПКС Тогда - ЗП.ПКС = ИмяПравила; - Иначе - ЗП.ПКГС = ИмяПравила; - КонецЕсли; - - ОписаниеТипов = Новый ОписаниеТипов("Строка"); - ИсточникСтрока = ОписаниеТипов.ПривестиЗначение(Источник); - Если Не ПустаяСтрока(ИсточникСтрока) Тогда - ЗП.Объект = ИсточникСтрока + " (" + ТипЗнч(Источник) + ")"; - Иначе - ЗП.Объект = "(" + ТипЗнч(Источник) + ")"; - КонецЕсли; - - Если ЭтоПКС Тогда - ЗП.СвойствоПриемника = ПКС.Приемник + " (" + ПКС.ТипПриемника + ")"; - КонецЕсли; - - Если ИмяОбработчика <> "" Тогда - ЗП.Обработчик = ИмяОбработчика; - КонецЕсли; - - Если Значение <> Неопределено Тогда - ЗП.КонвертируемоеЗначение = Строка(Значение) + " (" + ТипЗнч(Значение) + ")"; - КонецЕсли; - - СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(КодСообщения, ЗП); - - Если Не ФлагРежимОтладки Тогда - ВызватьИсключение СтрокаСообщенияОбОшибке; - КонецЕсли; - -КонецФункции - Функция ЗаписатьИнформациюОбОшибкеОбработчикиПВД(КодСообщения, СтрокаОшибки, ИмяПравила, ИмяОбработчика, Объект = Неопределено) ЗП = ПолучитьСтруктуруЗаписиПротокола(КодСообщения, СтрокаОшибки); @@ -1599,8 +3083,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ЗАГРУЗКИ ПРАВИЛ ОБМЕНА +#КонецОбласти + +#Область ПроцедурыЗагрузкиПравилОбмена // Осуществляет загрузку правила конвертации группы свойств. // @@ -1883,8 +3368,10 @@ КонецЕсли; КонецЦикла; - - Значения[одПолучитьЗначениеПоСтроке(Источник, ТипИсточника)] = Приемник; + + Если РежимОбмена <> "Загрузка" Тогда + Значения[одПолучитьЗначениеПоСтроке(Источник, ТипИсточника)] = Приемник; + КонецЕсли; КонецПроцедуры @@ -2078,7 +3565,6 @@ ИначеЕсли ИмяУзла = "Значения" Тогда ЗагрузитьЗначения(ПравилаОбмена, НоваяСтрока.Значения, НоваяСтрока.Источник); - // Обработчики событий @@ -2612,6 +4098,10 @@ КонецЕсли; + Если РежимОбмена = "Загрузка" И НЕ ИспользуетсяПриЗагрузке Тогда + Продолжить; + КонецЕсли; + // Определяем типы значений и устанавливаем начальные значения. Если Не ПустаяСтрока(СтрокаТипаЗначения) Тогда @@ -2916,8 +4406,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ЭКСПОРТА ОБРАБОТЧИКОВ И АЛГОРИТМОВ В TXT-ФАЙЛ ИЗ ПРАВИЛ ОБМЕНА +#КонецОбласти + +#Область ПроцедурыЭкспортаОбработчиковИАлгоритмовВTXTФайлИзПравилОбмена // Выгружает обработчики событий и алгоритмы во временный текстовый файл // (во временный каталог пользователя). @@ -3242,7 +4733,7 @@ КонецПроцедуры // Выгружает конструктор внешней обработки в текстовый файл. -// Если режми отладки алгоритмов - "алгоритмы отлаживать как процедуры", то в конструктор добавляется структура +// Если режим отладки алгоритмов - "алгоритмы отлаживать как процедуры", то в конструктор добавляется структура // "Алгоритмы". // Ключ элемента структуры - имя алгоритма, значение - интерфейс вызова процедуры, содержащей код алгоритма. // @@ -3291,7 +4782,6 @@ КонецПроцедуры - // Добавляет в объект "Результат" обработчик ПКО, ПКС или ПКГС. // // Параметры: @@ -3469,7 +4959,7 @@ КонецПроцедуры -// Получает служебный код из указанной обоасти макета "мМакетОбщиеПроцедурыФункции". +// Получает служебный код из указанной области макета "мМакетОбщиеПроцедурыФункции". // // Параметры: // ИмяОбласти - Строка - имя области текстового макета "мМакетОбщиеПроцедурыФункции". @@ -3485,8 +4975,9 @@ Возврат ПолучитьТекстПоОбластиБезНазванияОбласти(ТекущаяОбласть); КонецФункции -////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ ПОЛУЧЕНИЯ ПОЛНОГО КОДА АЛГОРИТМОВ С УЧЕТОМ ИХ ВЛОЖЕННОСТИ +#КонецОбласти + +#Область ПроцедурыИФункцииПолученияПолногоКодаАлгоритмовСУчетомИхВложенности // Формирует полный код алгоритмов с учетом их вложенности друг в друга. // @@ -3719,8 +5210,9 @@ Возврат СтрокаПрефиксаДляВложенногоКода; КонецФункции -////////////////////////////////////////////////////////////////////////////// -// ФУНКЦИИ ФОРМИРОВАНИЯ УНИКАЛЬНОГО ИМЕНИ ОБРАБОТЧИКОВ СОБЫТИЙ +#КонецОбласти + +#Область ФункцииФормированияУникальногоИмениОбработчиковСобытий // Формирует интерфейс обработчика ПКС, ПКГС (уникальное имя процедуры с параметрами соответствующего обработчика). // @@ -3900,35 +5392,9 @@ Возврат Сред(ПараметрыОбработчика, 1, СтрДлина(ПараметрыОбработчика) - 1); КонецФункции +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ СОЗДАНИЯ ИНТЕРФЕЙСА ВЫЗОВА ОБРАБОТЧИКОВ В ПРАВИЛАХ ОБМЕНА - -// Дополняет имеющиеся коллекции с правилами обмена интерфейсами вызова обработчиков. -// -// Параметры: -// СтруктураКонвертация - Структура - содержит правила конвертации и глобальные обработчики. -// ТаблицаПКО - ТаблицаЗначений - содержит правила конвертации объектов. -// ТаблицаПВД - ДеревоЗначений - содержит правила выгрузки данных. -// ТаблицаПОД - ДеревоЗначений - содержит правила очистки данных. -// -Процедура ДополнитьПравилаИнтерфейсамиОбработчиков(СтруктураКонвертация, ТаблицаПКО, ТаблицаПВД, ТаблицаПОД) Экспорт - - мМакетПараметровОбработчиков = ПолучитьМакет("ПараметрыОбработчиков"); - - // Добавляем интерфейсы Конвертации (глобальные). - ДополнитьИнтерфейсамиОбработчиковПравилаКонвертации(СтруктураКонвертация); - - // Добавляем интерфейсы ПВД - ДополнитьИнтерфейсамиОбработчиковПравилаВыгрузкиДанных(ТаблицаПВД, ТаблицаПВД.Строки); - - // Добавляем интерфейсы ПОД - ДополнитьИнтерфейсамиОбработчиковПравилаОчисткиДанных(ТаблицаПОД, ТаблицаПОД.Строки); - - // Добавляем интерфейсы ПКО, ПКС, ПКГС. - ДополнитьИнтерфейсамиОбработчиковПравилаКонвертацииОбъектов(ТаблицаПКО); - -КонецПроцедуры +#Область ПроцедурыСозданияИнтерфейсаВызоваОбработчиковВПравилахОбмена // Дополняет коллекцию значений правил очистки данных интерфейсами обработчиков. // @@ -4060,7 +5526,6 @@ КонецПроцедуры - Процедура ДобавитьИнтерфейсОбработчика(Таблица, Правило, ПрефиксОбработчика, ИмяОбработчика) Если ПустаяСтрока(Правило[ИмяОбработчика]) Тогда @@ -4119,83 +5584,9 @@ КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ РАБОТЫ С ПРАВИЛАМИ ОБМЕНА - -// Осуществляет поиск правила конвертации по имени или в соответствии с типом -// переданного объекта. -// -// Параметры: -// Объект - Объект-источник, для которого ищем правило конвертации. -// ИмяПравила - имя правила конвертации. -// -// Возвращаемое значение: -// Ссылка на правило конвертации (строка в таблице правил). -// -Функция НайтиПравило(Объект, ИмяПравила="") Экспорт - - Если Не ПустаяСтрока(ИмяПравила) Тогда - - Правило = Правила[ИмяПравила]; - - Иначе - - Правило = Менеджеры[ТипЗнч(Объект)]; - Если Правило <> Неопределено Тогда - Правило = Правило.ПКО; - - Если Правило <> Неопределено Тогда - ИмяПравила = Правило.Имя; - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - Возврат Правило; - -КонецФункции - -// Сохраняет правила обмена во внутреннем формате. -// -// Параметры: -// Нет. -// -Процедура СохранитьПравилаВоВнутреннемФормате() Экспорт - - Для Каждого Правило Из ТаблицаПравилКонвертации Цикл - Правило.Выгруженные.Очистить(); - Правило.ВыгруженныеТолькоСсылки.Очистить(); - КонецЦикла; - - СтруктураПравил = Новый Структура; - - // Сохраняем запросы - ЗапросыДляСохранения = Новый Структура; - Для Каждого ЭлементСтруктуры Из Запросы Цикл - ЗапросыДляСохранения.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение.Текст); - КонецЦикла; - - ПараметрыДляСохранения = Новый Структура; - Для Каждого ЭлементСтруктуры Из Параметры Цикл - ПараметрыДляСохранения.Вставить(ЭлементСтруктуры.Ключ, Неопределено); - КонецЦикла; - - СтруктураПравил.Вставить("ТаблицаПравилВыгрузки", ТаблицаПравилВыгрузки); - СтруктураПравил.Вставить("ТаблицаПравилКонвертации", ТаблицаПравилКонвертации); - СтруктураПравил.Вставить("Алгоритмы", Алгоритмы); - СтруктураПравил.Вставить("Запросы", ЗапросыДляСохранения); - СтруктураПравил.Вставить("Конвертация", Конвертация); - СтруктураПравил.Вставить("мXMLПравила", мXMLПравила); - СтруктураПравил.Вставить("ТаблицаНастройкиПараметров", ТаблицаНастройкиПараметров); - СтруктураПравил.Вставить("Параметры", ПараметрыДляСохранения); - - СтруктураПравил.Вставить("ВерсияПлатформыПриемника", ВерсияПлатформыПриемника); - - СохраненныеНастройки = Новый ХранилищеЗначения(СтруктураПравил); - -КонецПроцедуры +#Область ПроцедурыРаботыСПравиламиОбмена Функция ОпределитьПоВерсииПлатформыПриемникаПлатформу(ВерсияПлатформы) @@ -4281,31 +5672,6 @@ КонецПроцедуры -// Устанавливает значения параметров в структуре Параметры -// по таблице ТаблицаНастройкиПараметров. -// -Процедура УстановитьПараметрыИзДиалога() Экспорт - - Для Каждого СтрокаТаблицы Из ТаблицаНастройкиПараметров Цикл - Параметры.Вставить(СтрокаТаблицы.Имя, СтрокаТаблицы.Значение); - КонецЦикла; - -КонецПроцедуры - -// Устанавливает значение параметра в таблице параметров в форме обработки. -// -Процедура УстановитьЗначениеПараметраВТаблице(ИмяПараметра, ЗначениеПараметра) Экспорт - - СтрокаТаблицы = ТаблицаНастройкиПараметров.Найти(ИмяПараметра, "Имя"); - - Если СтрокаТаблицы <> Неопределено Тогда - - СтрокаТаблицы.Значение = ЗначениеПараметра; - - КонецЕсли; - -КонецПроцедуры - // Выполняет инициализацию параметров значениями по умолчанию, из правил обмена. // // Параметры: @@ -4321,8 +5687,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТКА ПРАВИЛ ОЧИСТКИ +#КонецОбласти + +#Область ОбработкаПравилОчистки Процедура ВыполнитьУдалениеОбъекта(Объект, Свойства, УдалитьНепосредственно) @@ -4358,62 +5725,6 @@ КонецПроцедуры -// Производит удаление (или помечает на удаление) объект выборки в соответствии с указанным правилом. -// -// Параметры: -// Объект - удаляемый (помечаемый на удаление) объект выборки. -// Правило - ссылка на правило очистки данных. -// Свойства - свойства объекта метаданного удаляемого объекта. -// ВходящиеДанные - произвольные вспомогательные данные. -// -Процедура УдалениеОбъектаВыборки(Объект, Правило, Свойства=Неопределено, ВходящиеДанные=Неопределено) Экспорт - - Отказ = Ложь; - УдалитьНепосредственно = Правило.Непосредственно; - - - // Обработчик ПередУдалениемОбъектаВыборки - Если Не ПустаяСтрока(Правило.ПередУдалением) Тогда - - Попытка - - Если ФлагРежимОтладкиОбработчиков Тогда - - Выполнить(ПолучитьСтрокуВызоваОбработчика(Правило, "ПередУдалением")); - - Иначе - - Выполнить(Правило.ПередУдалением); - - КонецЕсли; - - Исключение - - ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(29, ОписаниеОшибки(), Правило.Имя, Объект, "ПередУдалениемОбъектаВыборки"); - - КонецПопытки; - - Если Отказ Тогда - - Возврат; - - КонецЕсли; - - КонецЕсли; - - - Попытка - - ВыполнитьУдалениеОбъекта(Объект, Свойства, УдалитьНепосредственно); - - Исключение - - ЗаписатьИнформациюОбОшибкеОбработчикаОчисткиДанных(24, ОписаниеОшибки(), Правило.Имя, Объект, ""); - - КонецПопытки; - -КонецПроцедуры - // Очищает данные по указанному правилу. // // Параметры: @@ -4421,6 +5732,13 @@ // Процедура ОчиститьДанныеПоПравилу(Правило) + Если БезопасныйРежим Тогда + УстановитьБезопасныйРежим(Истина); + Для Каждого ИмяРазделителя Из РазделителиКонфигурации Цикл + УстановитьБезопасныйРежимРазделенияДанных(ИмяРазделителя, Истина); + КонецЦикла; + КонецЕсли; + // Обработчик ПередОбработкой Отказ = Ложь; @@ -4588,9 +5906,9 @@ КонецПроцедуры +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ЗАГРУЗКИ ДАННЫХ +#Область ПроцедурыЗагрузкиДанных // Устанавливает значение параметра "Загрузка" для свойства объекта "ОбменДанными". // @@ -5827,7 +7145,13 @@ ИзвестнаяСсылкаУникальногоИдентификатора = Неопределено, ПараметрыОбъекта = Неопределено) - + Если БезопасныйРежим Тогда + УстановитьБезопасныйРежим(Истина); + Для Каждого ИмяРазделителя Из РазделителиКонфигурации Цикл + УстановитьБезопасныйРежимРазделенияДанных(ИмяРазделителя, Истина); + КонецЦикла; + КонецЕсли; + ПоискПоДатеНаРавенство = Ложь; СсылкаНаОбъект = Неопределено; СтруктураСвойств = Неопределено; @@ -6722,6 +8046,11 @@ Процедура УдалитьИзСтекаНеЗаписанныхОбъектов(НПП, ГНПП) НомерДляСтека = ?(НПП = 0, ГНПП, НПП); + СтрокаСтека = мГлобальныйСтекНеЗаписанныхОбъектов[НомерДляСтека]; + Если СтрокаСтека = Неопределено Тогда + Возврат; + КонецЕсли; + мГлобальныйСтекНеЗаписанныхОбъектов.Удалить(НомерДляСтека); КонецПроцедуры @@ -6789,6 +8118,13 @@ // Функция ПрочитатьОбъект() + Если БезопасныйРежим Тогда + УстановитьБезопасныйРежим(Истина); + Для Каждого ИмяРазделителя Из РазделителиКонфигурации Цикл + УстановитьБезопасныйРежимРазделенияДанных(ИмяРазделителя, Истина); + КонецЦикла; + КонецЕсли; + НПП = одАтрибут(ФайлОбмена, одТипЧисло, "Нпп"); ГНПП = одАтрибут(ФайлОбмена, одТипЧисло, "ГНпп"); Источник = одАтрибут(ФайлОбмена, одТипСтрока, "Источник"); @@ -7123,7 +8459,7 @@ НужноЗаписатьОбъект = ОбъектМодифицирован ИЛИ НужноБылоЗаписатьОбъект; Исключение - + УдалитьИзСтекаНеЗаписанныхОбъектов(НПП, ГНПП); ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(20, ОписаниеОшибки(), ИмяПравила, Источник, ТипОбъекта, Объект, "ПриЗагрузкеОбъекта"); @@ -7167,7 +8503,7 @@ НужноЗаписатьОбъект = ОбъектМодифицирован ИЛИ НужноБылоЗаписатьОбъект; Исключение - + УдалитьИзСтекаНеЗаписанныхОбъектов(НПП, ГНПП); ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(20, ОписаниеОшибки(), ИмяПравила, Источник, ТипОбъекта, Объект, "ПриЗагрузкеОбъекта"); @@ -7232,7 +8568,7 @@ НужноЗаписатьОбъект = ОбъектМодифицирован ИЛИ НужноБылоЗаписатьОбъект; Исключение - + УдалитьИзСтекаНеЗаписанныхОбъектов(НПП, ГНПП); ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(54, ОписаниеОшибки(), ИмяПравила, Источник, ТипОбъекта, Объект, НСтр("ru = 'ПослеЗагрузкиОбъекта (глобальный)'")); @@ -7261,9 +8597,9 @@ НужноЗаписатьОбъект = ОбъектМодифицирован ИЛИ НужноБылоЗаписатьОбъект; Исключение - + УдалитьИзСтекаНеЗаписанныхОбъектов(НПП, ГНПП); ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(21, ОписаниеОшибки(), ИмяПравила, Источник, - ТипОбъекта, Объект, "ПослеЗагрузкиОбъекта"); + ТипОбъекта, Объект, "ПослеЗагрузкиОбъекта"); КонецПопытки; @@ -7520,9 +8856,9 @@ КонецФункции +#КонецОбласти -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ВЫГРУЗКИ ДАННЫХ ПО ПРАВИЛАМ ОБМЕНА +#Область ПроцедурыВыгрузкиДанных Функция ПолучитьНаборДвиженийДокумента(СсылкаНаДокумент, ВидИсточника, ИмяРегистра) @@ -7555,7 +8891,6 @@ КонецФункции - Процедура ВыполнитьЗаписьСтруктурыВXML(СтруктураДанных, УзелКоллекцииСвойств) УзелКоллекцииСвойств.ЗаписатьНачалоЭлемента("Свойство"); @@ -7620,8 +8955,6 @@ КонецПроцедуры - - // Формирует узлы свойств объекта приемника в соответствии с указанной коллекцией правил конвертации свойств. // // Параметры: @@ -7638,6 +8971,13 @@ Процедура ВыгрузитьГруппуСвойств(Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, ПКГС, УзелКоллекцииСвойств, ВыгрузитьТолькоСсылку, СписокВременныхФайлов = Неопределено) + Если БезопасныйРежим Тогда + УстановитьБезопасныйРежим(Истина); + Для Каждого ИмяРазделителя Из РазделителиКонфигурации Цикл + УстановитьБезопасныйРежимРазделенияДанных(ИмяРазделителя, Истина); + КонецЦикла; + КонецЕсли; + КоллекцияОбъектов = Неопределено; НеЗамещать = ПКГС.НеЗамещать; НеОчищать = Ложь; @@ -8119,6 +9459,13 @@ // (поддержка интерфейса процедуры-обертки обработчика). Перем ТипПриемника, Пусто, Выражение, НеЗамещать, УзелСвойства, ПКОСвойств; + Если БезопасныйРежим Тогда + УстановитьБезопасныйРежим(Истина); + Для Каждого ИмяРазделителя Из РазделителиКонфигурации Цикл + УстановитьБезопасныйРежимРазделенияДанных(ИмяРазделителя, Истина); + КонецЦикла; + КонецЕсли; + // Инициализация значения Значение = Неопределено; ИмяПКО = ""; @@ -8507,7 +9854,6 @@ КонецПроцедуры - Функция ВыгрузитьДанныеСсылочногоОбъекта(Значение, ИсходящиеДанные, ИмяПКО, ПКОСвойств, ТипПриемника, УзелСвойства, Знач ВыгрузитьТолькоСсылку) ЭтоПравилоСГлобальнойВыгрузкой = Ложь; @@ -8538,7 +9884,7 @@ ТипПриемника = одТипЗначенияСтрокой(Значение); // Есть ли хоть какое ПКО с типом приемника ТипПриемника - // если правила нат - то "", если есть , то то что нашли оставляем. + // если правила нет - то "", если есть , то то что нашли оставляем. СтрокаТаблицы = ТаблицаПравилКонвертации.Найти(ТипПриемника, "Приемник"); Если СтрокаТаблицы = Неопределено Тогда @@ -9005,562 +10351,6 @@ КонецПроцедуры -// Производит выгрузку объекта в соответствии с указанным правилом конвертации. -// -// Параметры: -// Источник - произвольный источник данных. -// Приемник - xml-узел объекта приемника. -// ВходящиеДанные - произвольные вспомогательные данные, передаваемые правилу -// для выполнения конвертации. -// ИсходящиеДанные - произвольные вспомогательные данные, передаваемые правилам -// конвертации свойств. -// ИмяПКО - имя правила конвертации, согласно которому осуществляется выгрузка. -// УзелСсылки - xml-узел ссылки объекта приемника. -// ТолькоПолучитьУзелСсылки - если Истина, то выгрузка объекта не производится, только формируется -// xml-узел ссылки. -// ПКО - ссылка на правило конвертации. -// -// Возвращаемое значение: -// xml-узел ссылки или значение приемника. -// -Функция ВыгрузитьПоПравилу(Источник = Неопределено, - Приемник = Неопределено, - ВходящиеДанные = Неопределено, - ИсходящиеДанные = Неопределено, - ИмяПКО = "", - УзелСсылки = Неопределено, - ТолькоПолучитьУзелСсылки = Ложь, - ПКО = Неопределено, - ЭтоПравилоСГлобальнойВыгрузкойОбъектов = Ложь, - ВыборкаДляВыгрузкиДанных = Неопределено) Экспорт - - // Поиск ПКО - Если ПКО = Неопределено Тогда - - ПКО = НайтиПравило(Источник, ИмяПКО); - - ИначеЕсли (Не ПустаяСтрока(ИмяПКО)) - И ПКО.Имя <> ИмяПКО Тогда - - ПКО = НайтиПравило(Источник, ИмяПКО); - - КонецЕсли; - - Если ПКО = Неопределено Тогда - - ЗП = ПолучитьСтруктуруЗаписиПротокола(45); - - ЗП.Объект = Источник; - ЗП.ТипОбъекта = ТипЗнч(Источник); - - ЗаписатьВПротоколВыполнения(45, ЗП, Истина); // не найдено ПКО - Возврат Неопределено; - - КонецЕсли; - - ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу + 1; - - Если ФлагКомментироватьОбработкуОбъектов Тогда - - ОписаниеТипа = Новый ОписаниеТипов("Строка"); - ИсточникВСтроку = ОписаниеТипа.ПривестиЗначение(Источник); - ИсточникВСтроку = ?(ИсточникВСтроку = "", " ", ИсточникВСтроку); - - ПрОбъекта = ИсточникВСтроку + " (" + ТипЗнч(Источник) + ")"; - - СтрокаНазванияПКО = " ПКО: " + СокрЛП(ИмяПКО) + " (" + СокрЛП(ПКО.Наименование) + ")"; - - СтрокаПользователю = ?(ТолькоПолучитьУзелСсылки, НСтр("ru = 'Конвертация ссылки на объект: %1'"), НСтр("ru = 'Конвертация объекта: %1'")); - СтрокаПользователю = ПодставитьПараметрыВСтроку(СтрокаПользователю, ПрОбъекта); - - ЗаписатьВПротоколВыполнения(СтрокаПользователю + СтрокаНазванияПКО, , Ложь, ТекущийУровеньВложенностиВыгрузитьПоПравилу + 1, 7); - - КонецЕсли; - - ЭтоПравилоСГлобальнойВыгрузкойОбъектов = ВыполнитьОбменДаннымиВОптимизированномФормате И ПКО.ИспользоватьБыстрыйПоискПриЗагрузке; - - ЗапоминатьВыгруженные = ПКО.ЗапоминатьВыгруженные; - ВыгруженныеОбъекты = ПКО.Выгруженные; - ВыгруженныеОбъектыТолькоСсылки = ПКО.ВыгруженныеТолькоСсылки; - ВсеОбъектыВыгружены = ПКО.ВсеОбъектыВыгружены; - НеЗамещатьОбъектПриЗагрузке = ПКО.НеЗамещать; - НеСоздаватьЕслиНеНайден = ПКО.НеСоздаватьЕслиНеНайден; - ПриПереносеОбъектаПоСсылкеУстанавливатьТолькоGIUD = ПКО.ПриПереносеОбъектаПоСсылкеУстанавливатьТолькоGIUD; - - ПрефиксАвтонумерации = ""; - РежимЗаписи = ""; - РежимПроведения = ""; - СписокВременныхФайлов = Неопределено; - - ИмяТипа = ""; - СтруктураСвойств = Менеджеры[ПКО.Источник]; - Если СтруктураСвойств = Неопределено Тогда - СтруктураСвойств = Менеджеры[ТипЗнч(Источник)]; - КонецЕсли; - - Если СтруктураСвойств <> Неопределено Тогда - ИмяТипа = СтруктураСвойств.ИмяТипа; - КонецЕсли; - - // КлючВыгружаемыхДанных - - Если (Источник <> Неопределено) И ЗапоминатьВыгруженные Тогда - Если ИмяТипа = "РегистрСведений" ИЛИ ИмяТипа = "Константы" ИЛИ ПустаяСтрока(ИмяТипа) Тогда - ЗапоминатьВыгруженные = Ложь; - Иначе - КлючВыгружаемыхДанных = ЗначениеВСтрокуВнутр(Источник); - КонецЕсли; - Иначе - КлючВыгружаемыхДанных = ИмяПКО; - ЗапоминатьВыгруженные = Ложь; - КонецЕсли; - - - // Переменная для хранения имени предопределенного элемента. - ИмяПредопределенногоЭлемента = Неопределено; - - // Глобальный обработчик ПередКонвертациейОбъекта. - Отказ = Ложь; - Если ЕстьГлобальныйОбработчикПередКонвертациейОбъекта Тогда - - Попытка - - Если ФлагРежимОтладкиОбработчиков Тогда - - Выполнить(ПолучитьСтрокуВызоваОбработчика(Конвертация, "ПередКонвертациейОбъекта")); - - Иначе - - Выполнить(Конвертация.ПередКонвертациейОбъекта); - - КонецЕсли; - - Исключение - ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(64, ОписаниеОшибки(), ПКО, Источник, НСтр("ru = 'ПередКонвертациейОбъекта (глобальный)'")); - КонецПопытки; - - Если Отказ Тогда // Отказ от дальнейшей обработки правила. - ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; - Возврат Приемник; - КонецЕсли; - - КонецЕсли; - - // Обработчик ПередВыгрузкой - Если ПКО.ЕстьОбработчикПередВыгрузкой Тогда - - Попытка - - Если ФлагРежимОтладкиОбработчиков Тогда - - Выполнить(ПолучитьСтрокуВызоваОбработчика(ПКО, "ПередВыгрузкой")); - - Иначе - - Выполнить(ПКО.ПередВыгрузкой); - - КонецЕсли; - - Исключение - ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(41, ОписаниеОшибки(), ПКО, Источник, "ПередВыгрузкойОбъекта"); - КонецПопытки; - - Если Отказ Тогда // Отказ от дальнейшей обработки правила. - ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; - Возврат Приемник; - КонецЕсли; - - КонецЕсли; - - // Возможно такие данные уже выгружались. - Если Не ВсеОбъектыВыгружены Тогда - - НПП = 0; - - Если ЗапоминатьВыгруженные Тогда - - УзелСсылки = ВыгруженныеОбъекты[КлючВыгружаемыхДанных]; - Если УзелСсылки <> Неопределено Тогда - - Если ТолькоПолучитьУзелСсылки Тогда - ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; - Возврат УзелСсылки; - КонецЕсли; - - НомерВыгруженнойСсылки = ВыгруженныеОбъектыТолькоСсылки[КлючВыгружаемыхДанных]; - Если НомерВыгруженнойСсылки = Неопределено Тогда - ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; - Возврат УзелСсылки; - Иначе - - СтрокаВСтекеВыгрузки = мСтекВызововВыгрузкиДанных.Найти(КлючВыгружаемыхДанных, "Ссылка"); - - Если СтрокаВСтекеВыгрузки <> Неопределено Тогда - ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; - Возврат УзелСсылки; - КонецЕсли; - - СтрокаВСтекеВыгрузки = мСтекВызововВыгрузкиДанных.Добавить(); - СтрокаВСтекеВыгрузки.Ссылка = КлючВыгружаемыхДанных; - - НПП = НомерВыгруженнойСсылки; - КонецЕсли; - КонецЕсли; - - КонецЕсли; - - Если НПП = 0 Тогда - - мСчетчикНПП = мСчетчикНПП + 1; - НПП = мСчетчикНПП; - - КонецЕсли; - - // Это позволит избежать циклических ссылок. - Если ЗапоминатьВыгруженные Тогда - - ВыгруженныеОбъекты[КлючВыгружаемыхДанных] = НПП; - Если ТолькоПолучитьУзелСсылки Тогда - ВыгруженныеОбъектыТолькоСсылки[КлючВыгружаемыхДанных] = НПП; - Иначе - - СтрокаВСтекеВыгрузки = мСтекВызововВыгрузкиДанных.Добавить(); - СтрокаВСтекеВыгрузки.Ссылка = КлючВыгружаемыхДанных; - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - СоответствиеЗначений = ПКО.Значения; - КоличествоЭлементовСоответствияЗначений = СоответствиеЗначений.Количество(); - - // Обработка соответствий предопределенных элементов. - Если ПлатформаПриемника = "V8" Тогда - - // Если имя предопределенного элемента пока не определено, то попытаемся его определить. - Если ИмяПредопределенногоЭлемента = Неопределено Тогда - - Если СтруктураСвойств <> Неопределено - И КоличествоЭлементовСоответствияЗначений > 0 - И СтруктураСвойств.ВозможенПоискПоПредопределенным Тогда - - Попытка - ИмяПредопределенногоИсточник = ИмяПредопределенного(Источник); - Исключение - ИмяПредопределенногоИсточник = ""; - КонецПопытки; - - Иначе - - ИмяПредопределенногоИсточник = ""; - - КонецЕсли; - - Если НЕ ПустаяСтрока(ИмяПредопределенногоИсточник) - И КоличествоЭлементовСоответствияЗначений > 0 Тогда - - ИмяПредопределенногоЭлемента = СоответствиеЗначений[Источник]; - - Иначе - ИмяПредопределенногоЭлемента = Неопределено; - КонецЕсли; - - КонецЕсли; - - Если ИмяПредопределенногоЭлемента <> Неопределено Тогда - КоличествоЭлементовСоответствияЗначений = 0; - КонецЕсли; - - Иначе - ИмяПредопределенногоЭлемента = Неопределено; - КонецЕсли; - - НеНужноВыгружатьПоСоответствиюЗначений = (КоличествоЭлементовСоответствияЗначений = 0); - - Если Не НеНужноВыгружатьПоСоответствиюЗначений Тогда - - // Если нет объекта в соответствии значений - выгружаем его штатным образом. - УзелСсылки = СоответствиеЗначений[Источник]; - Если УзелСсылки = Неопределено - И ПКО.СвойстваПоиска.Количество() > 0 Тогда - - // Возможно это конвертация из перечисления в перечисление и мы просто не нашли по. - // ПКЗ нужное свойство - тогда просто выгружаем пустую ссылку и все. - Если СтруктураСвойств.ИмяТипа = "Перечисление" - И СтрНайти(ПКО.Приемник, "ПеречислениеСсылка.") > 0 Тогда - - УзелСсылки = ""; - - Иначе - - НеНужноВыгружатьПоСоответствиюЗначений = Истина; - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - НужноЗапоминатьОбъект = ЗапоминатьВыгруженные И (Не ВсеОбъектыВыгружены); - - Если НеНужноВыгружатьПоСоответствиюЗначений Тогда - - Если ПКО.СвойстваПоиска.Количество() > 0 - ИЛИ ИмяПредопределенногоЭлемента <> Неопределено Тогда - - // Формируем узел ссылки - УзелСсылки = СоздатьУзел("Ссылка"); - - Если НужноЗапоминатьОбъект Тогда - - Если ЭтоПравилоСГлобальнойВыгрузкойОбъектов Тогда - УстановитьАтрибут(УзелСсылки, "ГНпп", НПП); - Иначе - УстановитьАтрибут(УзелСсылки, "Нпп", НПП); - КонецЕсли; - - КонецЕсли; - - ВыгрузитьТолькоСсылку = ПКО.НеВыгружатьОбъектыСвойствПоСсылкам ИЛИ ТолькоПолучитьУзелСсылки; - - Если НеСоздаватьЕслиНеНайден Тогда - УстановитьАтрибут(УзелСсылки, "НеСоздаватьЕслиНеНайден", НеСоздаватьЕслиНеНайден); - КонецЕсли; - - Если ПриПереносеОбъектаПоСсылкеУстанавливатьТолькоGIUD Тогда - УстановитьАтрибут(УзелСсылки, "ПриПереносеОбъектаПоСсылкеУстанавливатьТолькоGIUD", ПриПереносеОбъектаПоСсылкеУстанавливатьТолькоGIUD); - КонецЕсли; - - ВыгрузитьСвойства(Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, ПКО.СвойстваПоиска, - УзелСсылки, ВыборкаДляВыгрузкиДанных, ИмяПредопределенногоЭлемента, ПКО.НеВыгружатьОбъектыСвойствПоСсылкам ИЛИ ТолькоПолучитьУзелСсылки); - - УзелСсылки.ЗаписатьКонецЭлемента(); - УзелСсылки = УзелСсылки.Закрыть(); - - Если НужноЗапоминатьОбъект Тогда - - ВыгруженныеОбъекты[КлючВыгружаемыхДанных] = УзелСсылки; - - КонецЕсли; - - Иначе - УзелСсылки = НПП; - КонецЕсли; - - Иначе - - // Поиск в соответствии значений по ПКЗ. - Если УзелСсылки = Неопределено Тогда - // По Соответствию значений не нашли - пробуем найти по свойствам поиска. - СтруктураЗаписи = Новый Структура("Источник,ТипИсточника", Источник, ТипЗнч(Источник)); - ЗаписатьВПротоколВыполнения(71, СтруктураЗаписи); - Если СтрокаВСтекеВыгрузки <> Неопределено Тогда - мСтекВызововВыгрузкиДанных.Удалить(СтрокаВСтекеВыгрузки); - КонецЕсли; - ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; - Возврат Неопределено; - КонецЕсли; - - Если ЗапоминатьВыгруженные Тогда - ВыгруженныеОбъекты[КлючВыгружаемыхДанных] = УзелСсылки; - КонецЕсли; - - Если СтрокаВСтекеВыгрузки <> Неопределено Тогда - мСтекВызововВыгрузкиДанных.Удалить(СтрокаВСтекеВыгрузки); - КонецЕсли; - ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; - Возврат УзелСсылки; - - КонецЕсли; - - Если ТолькоПолучитьУзелСсылки Или ВсеОбъектыВыгружены Тогда - - Если СтрокаВСтекеВыгрузки <> Неопределено Тогда - мСтекВызововВыгрузкиДанных.Удалить(СтрокаВСтекеВыгрузки); - КонецЕсли; - ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; - Возврат УзелСсылки; - - КонецЕсли; - - Если Приемник = Неопределено Тогда - - Приемник = СоздатьУзел("Объект"); - - Если ЭтоПравилоСГлобальнойВыгрузкойОбъектов Тогда - УстановитьАтрибут(Приемник, "ГНпп", НПП); - Иначе - УстановитьАтрибут(Приемник, "Нпп", НПП); - КонецЕсли; - - УстановитьАтрибут(Приемник, "Тип", ПКО.Приемник); - УстановитьАтрибут(Приемник, "ИмяПравила", ПКО.Имя); - - Если НеЗамещатьОбъектПриЗагрузке Тогда - УстановитьАтрибут(Приемник, "НеЗамещать", "true"); - КонецЕсли; - - Если Не ПустаяСтрока(ПрефиксАвтонумерации) Тогда - УстановитьАтрибут(Приемник, "ПрефиксАвтонумерации", ПрефиксАвтонумерации); - КонецЕсли; - - Если Не ПустаяСтрока(РежимЗаписи) Тогда - УстановитьАтрибут(Приемник, "РежимЗаписи", РежимЗаписи); - Если Не ПустаяСтрока(РежимПроведения) Тогда - УстановитьАтрибут(Приемник, "РежимПроведения", РежимПроведения); - КонецЕсли; - КонецЕсли; - - Если ТипЗнч(УзелСсылки) <> одТипЧисло Тогда - ДобавитьПодчиненный(Приемник, УзелСсылки); - КонецЕсли; - - КонецЕсли; - - // Обработчик ПриВыгрузке - СтандартнаяОбработка = Истина; - Отказ = Ложь; - - Если ПКО.ЕстьОбработчикПриВыгрузке Тогда - - Попытка - - Если ФлагРежимОтладкиОбработчиков Тогда - - Выполнить(ПолучитьСтрокуВызоваОбработчика(ПКО, "ПриВыгрузке")); - - Иначе - - Выполнить(ПКО.ПриВыгрузке); - - КонецЕсли; - - Исключение - ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(42, ОписаниеОшибки(), ПКО, Источник, "ПриВыгрузкеОбъекта"); - КонецПопытки; - - Если Отказ Тогда // Отказ от записи объекта в файл. - Если СтрокаВСтекеВыгрузки <> Неопределено Тогда - мСтекВызововВыгрузкиДанных.Удалить(СтрокаВСтекеВыгрузки); - КонецЕсли; - ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; - Возврат УзелСсылки; - КонецЕсли; - - КонецЕсли; - - // Выгрузка свойств - Если СтандартнаяОбработка Тогда - - ВыгрузитьСвойства(Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, ПКО.Свойства, , ВыборкаДляВыгрузкиДанных, , - ПКО.НеВыгружатьОбъектыСвойствПоСсылкам ИЛИ ТолькоПолучитьУзелСсылки, СписокВременныхФайлов); - - КонецЕсли; - - // Обработчик ПослеВыгрузки - Если ПКО.ЕстьОбработчикПослеВыгрузки Тогда - - Попытка - - Если ФлагРежимОтладкиОбработчиков Тогда - - Выполнить(ПолучитьСтрокуВызоваОбработчика(ПКО, "ПослеВыгрузки")); - - Иначе - - Выполнить(ПКО.ПослеВыгрузки); - - КонецЕсли; - - Исключение - ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(43, ОписаниеОшибки(), ПКО, Источник, "ПослеВыгрузкиОбъекта"); - КонецПопытки; - - Если Отказ Тогда // Отказ от записи объекта в файл. - - Если СтрокаВСтекеВыгрузки <> Неопределено Тогда - мСтекВызововВыгрузкиДанных.Удалить(СтрокаВСтекеВыгрузки); - КонецЕсли; - ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; - Возврат УзелСсылки; - - КонецЕсли; - - КонецЕсли; - - Если СписокВременныхФайлов = Неопределено Тогда - - // Запись объекта в файл - Приемник.ЗаписатьКонецЭлемента(); - ЗаписатьВФайл(Приемник); - - Иначе - - ЗаписатьВФайл(Приемник); - - ВременныйФайл = Новый ЧтениеТекста; - Для каждого ИмяВременногоФайла Из СписокВременныхФайлов Цикл - - ВременныйФайл.Открыть(ИмяВременногоФайла, КодировкаТекста.UTF8); - - СтрокаВременногоФайла = ВременныйФайл.ПрочитатьСтроку(); - Пока СтрокаВременногоФайла <> Неопределено Цикл - ЗаписатьВФайл(СтрокаВременногоФайла); - СтрокаВременногоФайла = ВременныйФайл.ПрочитатьСтроку(); - КонецЦикла; - - ВременныйФайл.Закрыть(); - - УдалитьФайлы(ИмяВременногоФайла); - КонецЦикла; - - ЗаписатьВФайл("</Объект>"); - - КонецЕсли; - - мСчетчикВыгруженныхОбъектов = 1 + мСчетчикВыгруженныхОбъектов; - - Если НужноЗапоминатьОбъект Тогда - - Если ЭтоПравилоСГлобальнойВыгрузкойОбъектов Тогда - ВыгруженныеОбъекты[КлючВыгружаемыхДанных] = НПП; - КонецЕсли; - - КонецЕсли; - - Если СтрокаВСтекеВыгрузки <> Неопределено Тогда - мСтекВызововВыгрузкиДанных.Удалить(СтрокаВСтекеВыгрузки); - КонецЕсли; - - ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; - - // Обработчик ПослеВыгрузкиВФайл - Если ПКО.ЕстьОбработчикПослеВыгрузкиВФайл Тогда - - Попытка - - Если ФлагРежимОтладкиОбработчиков Тогда - - Выполнить(ПолучитьСтрокуВызоваОбработчика(ПКО, "ПослеВыгрузкиВФайл")); - - Иначе - - Выполнить(ПКО.ПослеВыгрузкиВФайл); - - КонецЕсли; - - Исключение - ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(76, ОписаниеОшибки(), ПКО, Источник, "ЕстьОбработчикПослеВыгрузкиВФайл"); - КонецПопытки; - - КонецЕсли; - - Возврат УзелСсылки; - -КонецФункции // ВыгрузитьПоПравилу() - // Производит выгрузку объекта выборки в соответствии с указанным правилом. // // Параметры: @@ -9571,6 +10361,13 @@ // Процедура ВыгрузкаОбъектаВыборки(Объект, Правило, Свойства=Неопределено, ВходящиеДанные=Неопределено, ВыборкаДляВыгрузкиДанных = Неопределено) + Если БезопасныйРежим Тогда + УстановитьБезопасныйРежим(Истина); + Для Каждого ИмяРазделителя Из РазделителиКонфигурации Цикл + УстановитьБезопасныйРежимРазделенияДанных(ИмяРазделителя, Истина); + КонецЦикла; + КонецЕсли; + Если ФлагКомментироватьОбработкуОбъектов Тогда ОписаниеТипов = Новый ОписаниеТипов("Строка"); @@ -9698,212 +10495,6 @@ КонецФункции -// Возвращает фрагмент текста языка запросов, который выражает условие ограничения на интервал дат. -// -Функция ПолучитьСтрокуОграниченияПоДатеДляЗапроса(Свойства, ИмяТипа, ИмяГруппыТаблицы = "", ВыборкаДляОчисткиДанных = Ложь) Экспорт - - ИтоговоеОграничениеПоДате = ""; - - Если НЕ (ИмяТипа = "Документ" ИЛИ ИмяТипа = "РегистрСведений") Тогда - Возврат ИтоговоеОграничениеПоДате; - КонецЕсли; - - Если ИмяТипа = "РегистрСведений" Тогда - - Непериодический = НЕ Свойства.Периодический; - НеНужноОграничениеПоДатам = ВыборкаДляОчисткиДанных ИЛИ Непериодический; - - Если НеНужноОграничениеПоДатам Тогда - Возврат ИтоговоеОграничениеПоДате; - КонецЕсли; - - КонецЕсли; - - Если ПустаяСтрока(ИмяГруппыТаблицы) Тогда - ИмяПоляОграничения = ?(ИмяТипа = "Документ", "Дата", "Период"); - Иначе - ИмяПоляОграничения = ИмяГруппыТаблицы + "." + ?(ИмяТипа = "Документ", "Дата", "Период"); - КонецЕсли; - - Если ДатаНачала <> ЗначениеПустаяДата Тогда - - ИтоговоеОграничениеПоДате = " - | ГДЕ - | " + ИмяПоляОграничения + " >= &ДатаНачала"; - - КонецЕсли; - - Если ДатаОкончания <> ЗначениеПустаяДата Тогда - - Если ПустаяСтрока(ИтоговоеОграничениеПоДате) Тогда - - ИтоговоеОграничениеПоДате = " - | ГДЕ - | " + ИмяПоляОграничения + " <= &ДатаОкончания"; - - Иначе - - ИтоговоеОграничениеПоДате = ИтоговоеОграничениеПоДате + " - | И - | " + ИмяПоляОграничения + " <= &ДатаОкончания"; - - КонецЕсли; - - КонецЕсли; - - Возврат ИтоговоеОграничениеПоДате; - -КонецФункции - -// Формирует результат запроса для выгрузки очистки данных. -// -Функция ПолучитьРезультатЗапросаДляВыгрузкиОчисткиДанных(Свойства, ИмяТипа, - ВыборкаДляОчисткиДанных = Ложь, УдалятьОбъектыНепосредственно = Ложь, ВыбиратьВсеПоля = Истина) Экспорт - - СтрокаРазрешения = ?(ВыгружатьТолькоРазрешенные, " РАЗРЕШЕННЫЕ ", ""); - - СтрокаВыбораПолей = ?(ВыбиратьВсеПоля, " * ", " ОбъектДляВыгрузки.Ссылка КАК Ссылка "); - - Если ИмяТипа = "Справочник" - ИЛИ ИмяТипа = "ПланВидовХарактеристик" - ИЛИ ИмяТипа = "ПланСчетов" - ИЛИ ИмяТипа = "ПланВидовРасчета" - ИЛИ ИмяТипа = "РегистрБухгалтерии" - ИЛИ ИмяТипа = "ПланОбмена" - ИЛИ ИмяТипа = "Задача" - ИЛИ ИмяТипа = "БизнесПроцесс" Тогда - - Запрос = Новый Запрос(); - - Если ИмяТипа = "Справочник" Тогда - МетаданныеОбъектов = Метаданные.Справочники[Свойства.Имя]; - ИначеЕсли ИмяТипа = "ПланВидовХарактеристик" Тогда - МетаданныеОбъектов = Метаданные.ПланыВидовХарактеристик[Свойства.Имя]; - ИначеЕсли ИмяТипа = "ПланСчетов" Тогда - МетаданныеОбъектов = Метаданные.ПланыСчетов[Свойства.Имя]; - ИначеЕсли ИмяТипа = "ПланВидовРасчета" Тогда - МетаданныеОбъектов = Метаданные.ПланыВидовРасчета[Свойства.Имя]; - ИначеЕсли ИмяТипа = "РегистрБухгалтерии" Тогда - МетаданныеОбъектов = Метаданные.РегистрыБухгалтерии[Свойства.Имя]; - ИначеЕсли ИмяТипа = "ПланОбмена" Тогда - МетаданныеОбъектов = Метаданные.ПланыОбмена[Свойства.Имя]; - ИначеЕсли ИмяТипа = "Задача" Тогда - МетаданныеОбъектов = Метаданные.Задачи[Свойства.Имя]; - ИначеЕсли ИмяТипа = "БизнесПроцесс" Тогда - МетаданныеОбъектов = Метаданные.БизнесПроцессы[Свойства.Имя]; - КонецЕсли; - - Если ИмяТипа = "РегистрБухгалтерии" Тогда - - СтрокаВыбораПолей = "*"; - ИмяТаблицыДляВыборки = Свойства.Имя + ".ДвиженияССубконто"; - - Иначе - - ИмяТаблицыДляВыборки = Свойства.Имя; - - Если ВыгружатьТолькоРазрешенные - И НЕ ВыбиратьВсеПоля Тогда - - ИмяПервогоРеквизита = ПолучитьИмяПервогоРеквизитаМетаданных(МетаданныеОбъектов); - Если Не ПустаяСтрока(ИмяПервогоРеквизита) Тогда - СтрокаВыбораПолей = СтрокаВыбораПолей + ", ОбъектДляВыгрузки." + ИмяПервогоРеквизита; - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - Запрос.Текст = "ВЫБРАТЬ " + СтрокаРазрешения + " - | " + СтрокаВыбораПолей + " - |ИЗ - | " + ИмяТипа + "." + ИмяТаблицыДляВыборки + " КАК ОбъектДляВыгрузки - | - |"; - - ИначеЕсли ИмяТипа = "Документ" Тогда - - Если ВыгружатьТолькоРазрешенные Тогда - - ИмяПервогоРеквизита = ПолучитьИмяПервогоРеквизитаМетаданных(Метаданные.Документы[Свойства.Имя]); - Если Не ПустаяСтрока(ИмяПервогоРеквизита) Тогда - СтрокаВыбораПолей = СтрокаВыбораПолей + ", ОбъектДляВыгрузки." + ИмяПервогоРеквизита; - КонецЕсли; - - КонецЕсли; - - ИтоговоеОграничениеПоДате = ПолучитьСтрокуОграниченияПоДатеДляЗапроса(Свойства, ИмяТипа, "ОбъектДляВыгрузки", ВыборкаДляОчисткиДанных); - - Запрос = Новый Запрос(); - - Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); - Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); - - Запрос.Текст = "ВЫБРАТЬ " + СтрокаРазрешения + " - | " + СтрокаВыбораПолей + " - |ИЗ - | " + ИмяТипа + "." + Свойства.Имя + " КАК ОбъектДляВыгрузки - | - |" + ИтоговоеОграничениеПоДате; - - - ИначеЕсли ИмяТипа = "РегистрСведений" Тогда - - Непериодический = НЕ Свойства.Периодический; - ПодчиненныйРегистратору = Свойства.ПодчиненныйРегистратору; - - ИтоговоеОграничениеПоДате = ПолучитьСтрокуОграниченияПоДатеДляЗапроса(Свойства, ИмяТипа, "ОбъектДляВыгрузки", ВыборкаДляОчисткиДанных); - - Запрос = Новый Запрос(); - - Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); - Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); - - СтрокаДополненияПолейВыборкиПодчиненРегистратору = ?(НЕ ПодчиненныйРегистратору, ", NULL КАК Активность, - | NULL КАК Регистратор, - | NULL КАК НомерСтроки", ""); - - СтрокаДополненияПолейВыборкиПериодичность = ?(Непериодический, ", NULL КАК Период", ""); - - Запрос.Текст = "ВЫБРАТЬ " + СтрокаРазрешения + " - | * - | - | " + СтрокаДополненияПолейВыборкиПодчиненРегистратору + " - | " + СтрокаДополненияПолейВыборкиПериодичность + " - | - |ИЗ - | " + ИмяТипа + "." + Свойства.Имя + " КАК ОбъектДляВыгрузки - | - |" + ИтоговоеОграничениеПоДате; - - Иначе - - Возврат Неопределено; - - КонецЕсли; - - Возврат Запрос.Выполнить(); - -КонецФункции - -// Формирует выборку для выгрузки очистки данных. -// -Функция ПолучитьВыборкуДляВыгрузкиОчисткиДанных(Свойства, ИмяТипа, - ВыборкаДляОчисткиДанных = Ложь, УдалятьОбъектыНепосредственно = Ложь, ВыбиратьВсеПоля = Истина) Экспорт - - РезультатЗапроса = ПолучитьРезультатЗапросаДляВыгрузкиОчисткиДанных(Свойства, ИмяТипа, - ВыборкаДляОчисткиДанных, УдалятьОбъектыНепосредственно, ВыбиратьВсеПоля); - - Если РезультатЗапроса = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - - Выборка = РезультатЗапроса.Выбрать(); - - Возврат Выборка; - -КонецФункции - Функция ПолучитьВыборкуДляВыгрузкиСОграничениями(Правило, ВыборкаДляПодстановкиВПКО = Неопределено, Свойства = Неопределено) ИмяМетаданных = Правило.ИмяОбъектаДляЗапроса; @@ -10066,6 +10657,13 @@ // Процедура ВыгрузитьДанныеПоПравилу(Правило) + Если БезопасныйРежим Тогда + УстановитьБезопасныйРежим(Истина); + Для Каждого ИмяРазделителя Из РазделителиКонфигурации Цикл + УстановитьБезопасныйРежимРазделенияДанных(ИмяРазделителя, Истина); + КонецЦикла; + КонецЕсли; + ИмяПКО = Правило.ПравилоКонвертации; Если Не ПустаяСтрока(ИмяПКО) Тогда @@ -10416,6 +11014,13 @@ Функция ВыполнитьВыгрузкуИзмененныхДанныхДляУзлаОбмена(УзелОбмена, МассивПравилКонвертации, СтруктураДляУдаленияРегистрацииИзменений) + Если БезопасныйРежим Тогда + УстановитьБезопасныйРежим(Истина); + Для Каждого ИмяРазделителя Из РазделителиКонфигурации Цикл + УстановитьБезопасныйРежимРазделенияДанных(ИмяРазделителя, Истина); + КонецЦикла; + КонецЕсли; + СтруктураДляУдаленияРегистрацииИзменений.Вставить("МассивПКО", Неопределено); СтруктураДляУдаленияРегистрацииИзменений.Вставить("НомерСообщения", Неопределено); @@ -10750,8 +11355,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТИРУЕМЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +#КонецОбласти + +#Область ЭкспортируемыеПроцедурыИФункции // Открывает файл обмена, читает атрибуты корневого узла файла в соответствии с форматом обмена. // @@ -10830,8 +11436,12 @@ ИмяУзла = ФайлОбмена.ЛокальноеИмя; Если ИмяУзла = "ПравилаОбмена" Тогда - ЗагрузитьПравилаОбмена(ФайлОбмена, "ЧтениеXML"); - + Если БезопаснаяЗагрузка И ЗначениеЗаполнено(ИмяФайлаПравилОбмена) Тогда + ЗагрузитьПравилаОбмена(ИмяФайлаПравилОбмена, "XMLФайл"); + ФайлОбмена.Пропустить(); + Иначе + ЗагрузитьПравилаОбмена(ФайлОбмена, "ЧтениеXML"); + КонецЕсли; Иначе ФайлОбмена.Закрыть(); ФайлОбмена = Новый ЧтениеXML(); @@ -10865,167 +11475,6 @@ КонецПроцедуры -// Заполняет переданную таблицу значений типами объектов метаданных для удаления, на которые есть право доступа для -// удаления. -// -Процедура ЗаполнитьСписокТиповДоступныхДляУдаления(ТаблицаДанных) Экспорт - - ТаблицаДанных.Очистить(); - - Для каждого ОбъектМД Из Метаданные.Справочники Цикл - - Если Не ПравоДоступа("Удаление", ОбъектМД) Тогда - Продолжить; - КонецЕсли; - - СтрокаТаблицы = ТаблицаДанных.Добавить(); - СтрокаТаблицы.Метаданные = "СправочникСсылка." + ОбъектМД.Имя; - - КонецЦикла; - - Для каждого ОбъектМД Из Метаданные.ПланыВидовХарактеристик Цикл - - Если Не ПравоДоступа("Удаление", ОбъектМД) Тогда - Продолжить; - КонецЕсли; - - СтрокаТаблицы = ТаблицаДанных.Добавить(); - СтрокаТаблицы.Метаданные = "ПланВидовХарактеристикСсылка." + ОбъектМД.Имя; - КонецЦикла; - - Для Каждого ОбъектМД Из Метаданные.Документы Цикл - - Если Не ПравоДоступа("Удаление", ОбъектМД) Тогда - Продолжить; - КонецЕсли; - - СтрокаТаблицы = ТаблицаДанных.Добавить(); - СтрокаТаблицы.Метаданные = "ДокументСсылка." + ОбъектМД.Имя; - КонецЦикла; - - Для каждого ОбъектМД Из Метаданные.РегистрыСведений Цикл - - Если Не ПравоДоступа("Удаление", ОбъектМД) Тогда - Продолжить; - КонецЕсли; - - Подчинен = (ОбъектМД.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору); - Если Подчинен Тогда Продолжить КонецЕсли; - - СтрокаТаблицы = ТаблицаДанных.Добавить(); - СтрокаТаблицы.Метаданные = "РегистрСведенийЗапись." + ОбъектМД.Имя; - - КонецЦикла; - -КонецПроцедуры - -// Устанавливает состояние пометки у подчиненных строк строки дерева значений -// в зависимости от пометки текущей строки. -// -// Параметры: -// ТекСтрока - Строка дерева значений. -// -Процедура УстановитьПометкиПодчиненных(ТекСтрока, Реквизит) Экспорт - - Подчиненные = ТекСтрока.Строки; - - Если Подчиненные.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - Для Каждого Строка Из Подчиненные Цикл - - Если Строка.НастройкиПостроителя = Неопределено - И Реквизит = "ИспользоватьОтбор" Тогда - - Строка[Реквизит] = 0; - - Иначе - - Строка[Реквизит] = ТекСтрока[Реквизит]; - - КонецЕсли; - - УстановитьПометкиПодчиненных(Строка, Реквизит); - - КонецЦикла; - -КонецПроцедуры - -// Устанавливает состояние пометки у родительских строк строки дерева значений -// в зависимости от пометки текущей строки. -// -// Параметры: -// ТекСтрока - Строка дерева значений. -// -Процедура УстановитьПометкиРодителей(ТекСтрока, Реквизит) Экспорт - - Родитель = ТекСтрока.Родитель; - Если Родитель = Неопределено Тогда - Возврат; - КонецЕсли; - - ТекСостояние = Родитель[Реквизит]; - - НайденыВключенные = Ложь; - НайденыВыключенные = Ложь; - - Если Реквизит = "ИспользоватьОтбор" Тогда - - Для Каждого Строка Из Родитель.Строки Цикл - - Если Строка[Реквизит] = 0 - И Строка.НастройкиПостроителя <> Неопределено Тогда - - НайденыВыключенные = Истина; - - ИначеЕсли Строка[Реквизит] = 1 Тогда - НайденыВключенные = Истина; - КонецЕсли; - - Если НайденыВключенные И НайденыВыключенные Тогда - Прервать; - КонецЕсли; - - КонецЦикла; - - Иначе - - Для Каждого Строка Из Родитель.Строки Цикл - Если Строка[Реквизит] = 0 Тогда - НайденыВыключенные = Истина; - ИначеЕсли Строка[Реквизит] = 1 - ИЛИ Строка[Реквизит] = 2 Тогда - НайденыВключенные = Истина; - КонецЕсли; - Если НайденыВключенные И НайденыВыключенные Тогда - Прервать; - КонецЕсли; - КонецЦикла; - - КонецЕсли; - - - Если НайденыВключенные И НайденыВыключенные Тогда - Включить = 2; - ИначеЕсли НайденыВключенные И (Не НайденыВыключенные) Тогда - Включить = 1; - ИначеЕсли (Не НайденыВключенные) И НайденыВыключенные Тогда - Включить = 0; - ИначеЕсли (Не НайденыВключенные) И (Не НайденыВыключенные) Тогда - Включить = 2; - КонецЕсли; - - Если Включить = ТекСостояние Тогда - Возврат; - Иначе - Родитель[Реквизит] = Включить; - УстановитьПометкиРодителей(Родитель, Реквизит); - КонецЕсли; - -КонецПроцедуры - - Функция ОбновитьПометкиВсехРодителейУПравилВыгрузки(СтрокиДереваПравилВыгрузки, НужноУстанавливатьПометки = Истина) Если СтрокиДереваПравилВыгрузки.Строки.Количество() = 0 Тогда @@ -11053,7 +11502,6 @@ КонецФункции - Процедура ЗаполнитьСвойстваДляПоиска(СтруктураДанных, ПКС) Для Каждого СтрокаПолей Из ПКС Цикл @@ -11283,6 +11731,13 @@ Процедура ЗагрузитьЗначенияПараметровОбменаДанными() + Если БезопасныйРежим Тогда + УстановитьБезопасныйРежим(Истина); + Для Каждого ИмяРазделителя Из РазделителиКонфигурации Цикл + УстановитьБезопасныйРежимРазделенияДанных(ИмяРазделителя, Истина); + КонецЦикла; + КонецЕсли; + Имя = одАтрибут(ФайлОбмена, одТипСтрока, "Имя"); ТипСвойства = ПолучитьТипСвойстваПоДополнительнымДанным(Неопределено, Имя); @@ -11389,7 +11844,7 @@ // распаковка файла правил Источник = РаспаковатьZipФайл(Источник); - + КонецЕсли; ПравилаОбмена = Новый ЧтениеXML(); @@ -11473,8 +11928,11 @@ ИначеЕсли ИмяУзла = "" Тогда ИначеЕсли ИмяУзла = "ПослеЗагрузкиПравилОбмена" Тогда - Конвертация.Вставить("ПослеЗагрузкиПравилОбмена", ПолучитьИзТекстаЗначениеОбработчика(ПравилаОбмена)); - + Если РежимОбмена = "Загрузка" Тогда + ПравилаОбмена.Пропустить(); + Иначе + Конвертация.Вставить("ПослеЗагрузкиПравилОбмена", ПолучитьИзТекстаЗначениеОбработчика(ПравилаОбмена)); + КонецЕсли; ИначеЕсли ИмяУзла = "ПередВыгрузкойДанных" Тогда Конвертация.Вставить("ПередВыгрузкойДанных", ПолучитьИзТекстаЗначениеОбработчика(ПравилаОбмена)); @@ -11676,6 +12134,13 @@ Если Конвертация.Свойство("ПослеЗагрузкиПравилОбмена", ТекстСобытияПослеЗагрузкиПравилОбмена) И Не ПустаяСтрока(ТекстСобытияПослеЗагрузкиПравилОбмена) Тогда + Если БезопасныйРежим Тогда + УстановитьБезопасныйРежим(Истина); + Для Каждого ИмяРазделителя Из РазделителиКонфигурации Цикл + УстановитьБезопасныйРежимРазделенияДанных(ИмяРазделителя, Истина); + КонецЦикла; + КонецЕсли; + Попытка Если ФлагРежимОтладкиОбработчиков Тогда @@ -11704,7 +12169,6 @@ КонецПроцедуры - Процедура ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки) мСчетчикЗагруженныхОбъектов = 1 + мСчетчикЗагруженныхОбъектов; @@ -11757,6 +12221,13 @@ // Процедура ПроизвестиЧтениеДанных(РезультирующаяСтрокаСИнформациейОбОшибке = "") Экспорт + Если БезопасныйРежим Тогда + УстановитьБезопасныйРежим(Истина); + Для Каждого ИмяРазделителя Из РазделителиКонфигурации Цикл + УстановитьБезопасныйРежимРазделенияДанных(ИмяРазделителя, Истина); + КонецЦикла; + КонецЕсли; + Попытка Пока ФайлОбмена.Прочитать() Цикл @@ -11778,7 +12249,16 @@ Отказ = Ложь; ПричинаОтказа = ""; - ТекстАлгоритма = одЗначениеЭлемента(ФайлОбмена, одТипСтрока); + ТекстАлгоритма = ""; + Конвертация.Свойство("ПослеЗагрузкиПараметров", ТекстАлгоритма); + + // При загрузке в безопасном режиме текст алгоритма получен при чтении правил. + // В противном случае его следует получать из файла обмена. + Если ПустаяСтрока(ТекстАлгоритма) Тогда + ТекстАлгоритма = одЗначениеЭлемента(ФайлОбмена, одТипСтрока); + Иначе + ФайлОбмена.Пропустить(); + КонецЕсли; Если Не ПустаяСтрока(ТекстАлгоритма) Тогда @@ -11970,6 +12450,13 @@ // Обработчик ПередЗагрузкойДанных Отказ = Ложь; + Если БезопасныйРежим Тогда + УстановитьБезопасныйРежим(Истина); + Для Каждого ИмяРазделителя Из РазделителиКонфигурации Цикл + УстановитьБезопасныйРежимРазделенияДанных(ИмяРазделителя, Истина); + КонецЦикла; + КонецЕсли; + Если Не ПустаяСтрока(Конвертация.ПередЗагрузкойДанных) Тогда Попытка @@ -12020,6 +12507,13 @@ // Процедура ВыполнитьДействияПослеЗавершенияЧтенияДанных() Экспорт + Если БезопасныйРежим Тогда + УстановитьБезопасныйРежим(Истина); + Для Каждого ИмяРазделителя Из РазделителиКонфигурации Цикл + УстановитьБезопасныйРежимРазделенияДанных(ИмяРазделителя, Истина); + КонецЦикла; + КонецЕсли; + // Отложенная запись того, что не записали с самого начала. ПровестиЗаписьНеЗаписанныхОбъектов(); @@ -12083,7 +12577,6 @@ КонецПроцедуры - Процедура СжатьРезультирующийФайлОбмена() Попытка @@ -12106,29 +12599,6 @@ КонецПроцедуры -// Составляет полное имя файла из имени каталога и имени файла. -// -// Параметры: -// ИмяКаталога - Строка, содержащая путь к каталогу файла на диске. -// ИмяФайла - Строка, содержащая имя файла, без имени каталога. -// -// Возвращаемое значение: -// Строка - полное имя файла с учетом каталога. -// -Функция ПолучитьИмяФайлаОбмена(ИмяКаталога, ИмяФайла) Экспорт - - Если Не ПустаяСтрока(ИмяФайла) Тогда - - Возврат ИмяКаталога + ?(Прав(ИмяКаталога, 1) = "\", "", "\") + ИмяФайла; - - Иначе - - Возврат ИмяКаталога; - - КонецЕсли; - -КонецФункции - Функция РаспаковатьZipФайл(ИмяФайлаДляРаспаковки) КаталогДляРаспаковки = КаталогВременныхФайлов(); @@ -12165,27 +12635,6 @@ КонецФункции -// Выполняет передачу строки данных для загрузки в базе-приемнике. -// -// Параметры: -// ИнформацияДляЗаписиВФайл - Строка (текст XML) - строка с данными. -// СтрокаОшибкиВБазеПриемнике - Строка - содержит описание ошибки при загрузке в базе-приемнике. -// -Процедура ПередатьИнформациюОЗаписиВПриемник(ИнформацияДляЗаписиВФайл, СтрокаОшибкиВБазеПриемнике = "") Экспорт - - мОбработкаДляЗагрузкиДанных.ФайлОбмена.УстановитьСтроку(ИнформацияДляЗаписиВФайл); - - мОбработкаДляЗагрузкиДанных.ПроизвестиЧтениеДанных(СтрокаОшибкиВБазеПриемнике); - - Если Не ПустаяСтрока(СтрокаОшибкиВБазеПриемнике) Тогда - - СтрокаСообщения = ПодставитьПараметрыВСтроку(НСтр("ru = 'Загрузка в приемнике: %1'"), СтрокаОшибкиВБазеПриемнике); - ЗаписатьВПротоколВыполнения(СтрокаСообщения, Неопределено, Истина, , , Истина); - - КонецЕсли; - -КонецПроцедуры - Функция ВыполнитьПередачуИнформацииОНачалеОбменаВПриемник(ТекущаяСтрокаДляЗаписи) Если НЕ НепосредственноеЧтениеВИБПриемнике Тогда @@ -12210,77 +12659,6 @@ КонецФункции -// Выполняет запись имени, типа и значения параметра в фай сообщения обмена для передачи в базу-приемник. -// -// Параметры: -// -Процедура ПередатьОдинПараметрВПриемник(Имя, ИсходноеЗначениеПараметра, ПравилоКонвертации = "") Экспорт - - Если ПустаяСтрока(ПравилоКонвертации) Тогда - - УзелПараметра = СоздатьУзел("ЗначениеПараметра"); - - УстановитьАтрибут(УзелПараметра, "Имя", Имя); - УстановитьАтрибут(УзелПараметра, "Тип", одТипЗначенияСтрокой(ИсходноеЗначениеПараметра)); - - ЭтоNULL = Ложь; - Пусто = одПустое(ИсходноеЗначениеПараметра, ЭтоNULL); - - Если Пусто Тогда - - // Надо записать что это пустое значение. - одЗаписатьЭлемент(УзелПараметра, "Пусто"); - - УзелПараметра.ЗаписатьКонецЭлемента(); - - ЗаписатьВФайл(УзелПараметра); - - Возврат; - - КонецЕсли; - - одЗаписатьЭлемент(УзелПараметра, "Значение", ИсходноеЗначениеПараметра); - - УзелПараметра.ЗаписатьКонецЭлемента(); - - ЗаписатьВФайл(УзелПараметра); - - Иначе - - УзелПараметра = СоздатьУзел("ЗначениеПараметра"); - - УстановитьАтрибут(УзелПараметра, "Имя", Имя); - - ЭтоNULL = Ложь; - Пусто = одПустое(ИсходноеЗначениеПараметра, ЭтоNULL); - - Если Пусто Тогда - - ПКОСвойств = НайтиПравило(ИсходноеЗначениеПараметра, ПравилоКонвертации); - ТипПриемника = ПКОСвойств.Приемник; - УстановитьАтрибут(УзелПараметра, "Тип", ТипПриемника); - - // Надо записать что это пустое значение. - одЗаписатьЭлемент(УзелПараметра, "Пусто"); - - УзелПараметра.ЗаписатьКонецЭлемента(); - - ЗаписатьВФайл(УзелПараметра); - - Возврат; - - КонецЕсли; - - ВыгрузитьДанныеСсылочногоОбъекта(ИсходноеЗначениеПараметра, , ПравилоКонвертации, , , УзелПараметра, Истина); - - УзелПараметра.ЗаписатьКонецЭлемента(); - - ЗаписатьВФайл(УзелПараметра); - - КонецЕсли; - -КонецПроцедуры - Процедура ПередатьДополнительныеПараметрыВПриемник() Для Каждого Параметр Из ТаблицаНастройкиПараметров Цикл @@ -12421,6 +12799,13 @@ Возврат; КонецЕсли; + Если БезопасныйРежим Тогда + УстановитьБезопасныйРежим(Истина); + Для Каждого ИмяРазделителя Из РазделителиКонфигурации Цикл + УстановитьБезопасныйРежимРазделенияДанных(ИмяРазделителя, Истина); + КонецЦикла; + КонецЕсли; + // Обработчик ПередВыгрузкойДанных Отказ = Ложь; Попытка @@ -12560,8 +12945,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// УСТАНОВКА ЗНАЧЕНИЙ РЕКВИЗИТОВ И МОДАЛЬНЫХ ПЕРЕМЕННЫХ ОБРАБОТКИ +#КонецОбласти + +#Область УстановкаЗначенийРеквизитовИМодальныхПеременныхОбработки // Процедура установки значения глобальной переменной "ФлагОшибки". // @@ -12580,20 +12966,6 @@ КонецПроцедуры -// Возвращает текущее значение версии обработки. -// -// Параметры: -// Нет. -// -// Возвращаемое значение: -// Текущее значение версии обработки. -// -Функция ВерсияОбъекта() Экспорт - - Возврат 218; - -КонецФункции - // Возвращает текущее значение версии обработки. // // Параметры: @@ -12608,8 +12980,9 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// ИНИЦИАЛИЗАЦИЯ ТАБЛИЦ ПРАВИЛ ОБМЕНА +#КонецОбласти + +#Область ИнициализацияТаблицПравилОбмена Процедура ДобавитьНедостающиеКолонки(Колонки, Имя, Типы = Неопределено) @@ -12621,64 +12994,6 @@ КонецПроцедуры -// Инициализирует колонки таблицы правил конвертации свойств объектов. -// -// Параметры: -// Таб - ТаблицаЗначений. инициализируемая таблица правил конвертации свойств. -// -Процедура ИнициализацияТаблицыПравилКонвертацииСвойств(Таб) Экспорт - - Колонки = Таб.Колонки; - - ДобавитьНедостающиеКолонки(Колонки, "Имя"); - ДобавитьНедостающиеКолонки(Колонки, "Наименование"); - ДобавитьНедостающиеКолонки(Колонки, "Порядок"); - - ДобавитьНедостающиеКолонки(Колонки, "ЭтоГруппа", одОписаниеТипа("Булево")); - ДобавитьНедостающиеКолонки(Колонки, "ПравилаГруппы"); - - ДобавитьНедостающиеКолонки(Колонки, "ВидИсточника"); - ДобавитьНедостающиеКолонки(Колонки, "ВидПриемника"); - - ДобавитьНедостающиеКолонки(Колонки, "УпрощеннаяВыгрузкаСвойства", одОписаниеТипа("Булево")); - ДобавитьНедостающиеКолонки(Колонки, "НуженУзелXMLПриВыгрузке", одОписаниеТипа("Булево")); - ДобавитьНедостающиеКолонки(Колонки, "НуженУзелXMLПриВыгрузкеГруппы", одОписаниеТипа("Булево")); - - ДобавитьНедостающиеКолонки(Колонки, "ТипИсточника", одОписаниеТипа("Строка")); - ДобавитьНедостающиеКолонки(Колонки, "ТипПриемника", одОписаниеТипа("Строка")); - - ДобавитьНедостающиеКолонки(Колонки, "Источник"); - ДобавитьНедостающиеКолонки(Колонки, "Приемник"); - - ДобавитьНедостающиеКолонки(Колонки, "ПравилоКонвертации"); - - ДобавитьНедостающиеКолонки(Колонки, "ПолучитьИзВходящихДанных", одОписаниеТипа("Булево")); - - ДобавитьНедостающиеКолонки(Колонки, "НеЗамещать", одОписаниеТипа("Булево")); - - ДобавитьНедостающиеКолонки(Колонки, "ПередВыгрузкой"); - ДобавитьНедостающиеКолонки(Колонки, "ПриВыгрузке"); - ДобавитьНедостающиеКолонки(Колонки, "ПослеВыгрузки"); - - ДобавитьНедостающиеКолонки(Колонки, "ПередОбработкойВыгрузки"); - ДобавитьНедостающиеКолонки(Колонки, "ПослеОбработкиВыгрузки"); - - ДобавитьНедостающиеКолонки(Колонки, "ЕстьОбработчикПередВыгрузкой", одОписаниеТипа("Булево")); - ДобавитьНедостающиеКолонки(Колонки, "ЕстьОбработчикПриВыгрузке", одОписаниеТипа("Булево")); - ДобавитьНедостающиеКолонки(Колонки, "ЕстьОбработчикПослеВыгрузки", одОписаниеТипа("Булево")); - - ДобавитьНедостающиеКолонки(Колонки, "ЕстьОбработчикПередОбработкойВыгрузки", одОписаниеТипа("Булево")); - ДобавитьНедостающиеКолонки(Колонки, "ЕстьОбработчикПослеОбработкиВыгрузки", одОписаниеТипа("Булево")); - - ДобавитьНедостающиеКолонки(Колонки, "ПриводитьКДлине", одОписаниеТипа("Число")); - ДобавитьНедостающиеКолонки(Колонки, "ИмяПараметраДляПередачи"); - ДобавитьНедостающиеКолонки(Колонки, "ПоискПоДатеНаРавенство", одОписаниеТипа("Булево")); - ДобавитьНедостающиеКолонки(Колонки, "ВыгружатьГруппуЧерезФайл", одОписаниеТипа("Булево")); - - ДобавитьНедостающиеКолонки(Колонки, "СтрокаПолейПоиска"); - -КонецПроцедуры - // Инициализирует колонки таблицы правил конвертации объектов. // // Параметры: @@ -12833,8 +13148,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ИНИЦИАЛИЗАЦИЯ РЕКВИЗИТОВ И МОДУЛЬНЫХ ПЕРЕМЕННЫХ +#КонецОбласти + +#Область ИнициализацияРеквизитовИМодульныхПеременных Процедура ИнициализироватьКомментарииПриВыгрузкеИЗагрузкеДанных() @@ -13255,6 +13571,14 @@ РежимОтладкиАлгоритмов = мРежимыОтладкиАлгоритмов.НеИспользовать; + РазделителиКонфигурации = Новый Массив; + Для Каждого ОбщийРеквизит Из Метаданные.ОбщиеРеквизиты Цикл + Если ОбщийРеквизит.РазделениеДанных = Метаданные.СвойстваОбъектов.РазделениеДанныхОбщегоРеквизита.Разделять Тогда + РазделителиКонфигурации.Добавить(ОбщийРеквизит.Имя); + КонецЕсли; + КонецЦикла; + РазделителиКонфигурации = Новый ФиксированныйМассив(РазделителиКонфигурации); + КонецПроцедуры Функция ОпределитьДостаточностьПараметровДляПодключенияКИнформационнойБазе(СтруктураПодключения, СтрокаПодключения = "", СтрокаСообщенияОбОшибке = "") @@ -13523,119 +13847,6 @@ КонецПроцедуры -// Инициализирует внешнюю обработку с модулем отладки обработчиков событий. -// -// Параметры: -// РаботаВозможна - Булево - флаг успешной инициализации внешней обработки. -// ОбъектВладелец - ОбработкаОбъект - объект, который будет являться владельцем -// инициализируемой внешней обработки. -// -Процедура ИнициализацияВнешнейОбработкиОбработчиковСобытий(РаботаВозможна, ОбъектВладелец) Экспорт - - Если Не РаботаВозможна Тогда - Возврат; - КонецЕсли; - - Если ФлагРежимОтладкиОбработчиков И ПустаяСтрока(ИмяФайлаВнешнейОбработкиОбработчиковСобытий) Тогда - - ЗаписатьВПротоколВыполнения(77); - РаботаВозможна = Ложь; - - ИначеЕсли ФлагРежимОтладкиОбработчиков Тогда - - Попытка - - Если ЭтоВнешняяОбработка() Тогда - - ВнешняяОбработкаОбработчиковСобытий = ВнешниеОбработки.Создать(ИмяФайлаВнешнейОбработкиОбработчиковСобытий, Ложь); - - Иначе - - ВнешняяОбработкаОбработчиковСобытий = Обработки[ИмяФайлаВнешнейОбработкиОбработчиковСобытий].Создать(); - - КонецЕсли; - - ВнешняяОбработкаОбработчиковСобытий.Конструктор(ОбъектВладелец); - - Исключение - - ДеструкторВнешнейОбработкиОбработчиковСобытий(); - - СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - ЗаписатьВПротоколВыполнения(78); - - РаботаВозможна = Ложь; - ФлагРежимОтладкиОбработчиков = Ложь; - - КонецПопытки; - - КонецЕсли; - - Если РаботаВозможна Тогда - - ОбщиеПроцедурыФункции = ЭтотОбъект; - - КонецЕсли; - -КонецПроцедуры - -// Деструктор внешней обработки. -// -// Параметры: -// Нет. -// -// Деструктор внешней обработки. -// -// Параметры: -// Нет. -// -Процедура ДеструкторВнешнейОбработкиОбработчиковСобытий(ВключенРежимОтладки = Ложь) Экспорт - - Если Не ВключенРежимОтладки Тогда - - Если ВнешняяОбработкаОбработчиковСобытий <> Неопределено Тогда - - Попытка - - ВнешняяОбработкаОбработчиковСобытий.Деструктор(); - - Исключение - СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - - КонецЕсли; - - ВнешняяОбработкаОбработчиковСобытий = Неопределено; - ОбщиеПроцедурыФункции = Неопределено; - - КонецЕсли; - -КонецПроцедуры - -// Удаляет временные файлы с заданным именем. -// -// Параметры: -// ИмяВременногоФайла - Строка - полное имя удаляемого файла. После выполнения процедуры очищается. -// -Процедура УдалитьВременныеФайлы(ИмяВременногоФайла) Экспорт - - Если Не ПустаяСтрока(ИмяВременногоФайла) Тогда - - Попытка - - УдалитьФайлы(ИмяВременногоФайла); - - ИмяВременногоФайла = ""; - - Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Универсальный обмен данными в формате XML'", КодОсновногоЯзыка()), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - - КонецЕсли; - -КонецПроцедуры - Функция ПолучитьНовоеУникальноеИмяВременногоФайла(Префикс, Расширение, СтароеИмяВременногоФайла) // Удаляем предыдущий временный файл. @@ -13763,7 +13974,7 @@ Функция ЭтоВнешняяОбработка() - Возврат ?(Найти(ИмяФайлаВнешнейОбработкиОбработчиковСобытий, ".") <> 0, Истина, Ложь); + Возврат ?(СтрНайти(ИмяФайлаВнешнейОбработкиОбработчиковСобытий, ".") <> 0, Истина, Ложь); КонецФункции @@ -13840,7 +14051,9 @@ #КонецОбласти -#Область ОператорыОсновнойПрограммы +#КонецОбласти + +#Область Инициализация ИнициализацияРеквизитовИМодульныхПеременных(); ДополнитьСлужебныеТаблицыКолонками(); diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/УниверсальныйОбменДаннымиXML.mdo b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/УниверсальныйОбменДаннымиXML.mdo index 6e2a2e5d5..60cf5ace1 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/УниверсальныйОбменДаннымиXML.mdo +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/УниверсальныйОбменДаннымиXML.mdo @@ -48,6 +48,39 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> + <attributes uuid="9b9e81f9-e23f-4c77-bf6f-edbce8ebabfa"> + <name>БезопаснаяЗагрузка</name> + <synonym> + <key>ru</key> + <value>Безопасная загрузка данных</value> + </synonym> + <comment>Загрузка данных по правилам, поставляемым отдельно от данных.</comment> + <type> + <types>Boolean</types> + </type> + <toolTip> + <key>ru</key> + <value>Загрузка данных выполняется по правилам, указанным в реквизите "Имя файла правил".</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </attributes> + <attributes uuid="d43438d8-713a-4ceb-b653-1b5d5083ab3b"> + <name>БезопасныйРежим</name> + <synonym> + <key>ru</key> + <value>Безопасный режим</value> + </synonym> + <type> + <types>Boolean</types> + </type> + <toolTip> + <key>ru</key> + <value>Устанавливает или отключает безопасный режим исполнения алгоритма.</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </attributes> <attributes uuid="7df6c94b-3cfe-4764-988e-858d733e35d9"> <name>ВерсияПлатформыИнформационнойБазыДляПодключения</name> <synonym> diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form index bfafb9ee4..3512308a5 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form @@ -549,6 +549,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -1670,6 +1671,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -3087,6 +3089,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -3145,6 +3148,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -3188,7 +3192,7 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>ТекстГиперСсылки</segments> + <segments>ТекстГиперссылки</segments> </dataPath> <titleLocation>None</titleLocation> <extendedTooltip> @@ -4090,10 +4094,10 @@ </settingsSavedData> </attributes> <attributes> - <name>ТекстГиперСсылки</name> + <name>ТекстГиперссылки</name> <title> <key>ru</key> - <value>Текст гипер ссылки</value> + <value>Текст гиперссылки</value> 11 diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl index 18e0fbbe0..a046a6420 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем КонтекстВыбора; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -780,8 +784,8 @@ КонецПроцедуры &НаКлиенте -Процедура ПоказатьРезультатВыполнения(Результат, ПараметрыВыполнения) Экспорт - СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, ПараметрыВыполнения); +Процедура ПоказатьРезультатВыполнения(ПустойПараметр, РезультатВыполнения) Экспорт + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, РезультатВыполнения); КонецПроцедуры &НаКлиенте @@ -1356,13 +1360,13 @@ Если ПолныеВозможности Тогда Заголовок = НСтр("ru = 'Управление итогами - полные возможности'"); - ТекстГиперСсылки = НСтр("ru = 'Часто используемые возможности'"); + ТекстГиперссылки = НСтр("ru = 'Часто используемые возможности'"); Элементы.Операции.ТекущаяСтраница = Элементы.РасширенныеВозможности; Элементы.БыстрыйДоступ.Видимость = Ложь; Элементы.РасширенныеВозможности.Видимость = Истина; Иначе Заголовок = НСтр("ru = 'Управление итогами - часто используемые возможности'"); - ТекстГиперСсылки = НСтр("ru = 'Полные возможности'"); + ТекстГиперссылки = НСтр("ru = 'Полные возможности'"); Элементы.Операции.ТекущаяСтраница = Элементы.БыстрыйДоступ; Элементы.БыстрыйДоступ.Видимость = Истина; Элементы.РасширенныеВозможности.Видимость = Ложь; diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Help/ru.html b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Help/ru.html index 97791a2a0..ca7374864 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

      +

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

      +

      Ввод документов взаимодействия

      • -
        Нажмите Создать, выберите из списка нужный документ.

      Виды панелей навигации списка взаимодействий

      -

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

      +
      Нажмите Создать, выберите из списка нужный документ.

      Виды панелей навигации списка взаимодействий

      +

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

      • По предметам - панель навигации заполняется предметами взаимодействий. Все взаимодействия в списке группируются по предметам.
        • При позиционировании на предмете в списке отображаются взаимодействия по данному предмету.
        •  В панели группировки можно открывать предметы, по которым сгруппированы взаимодействия (двойным щелчком мыши в панели группировки). @@ -104,7 +104,7 @@
          Если ни одно взаимодействие не найдено, поле ввода строки поиска подсвечивается красным.
        • Для того чтобы отменить отображение списка по результатам полнотекстового поиска, необходимо очистить строку поиска.
      • -
        По умолчанию поиск работает по целому слову или словосочетанию.
        +
        По умолчанию поиск работает по целому слову или словосочетанию. Производится с учетом морфологии, т.е. можно найти слово в других падежах, другого рода (мужского или женского), другом числе (единственном или множественном) и т.д.
      • Если необходимо выполнить какой-то другой вид поиска - например, по части слова, то необходимо использовать служебные символы языка запросов полнотекстового поиска.
        • diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl index 3829e373b..ed243ce83 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем КонтекстВыбора; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -98,13 +102,13 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - Если Врег(ИмяСобытия) = Врег("Запись_ЗакладкиВзаимодействий") Тогда + Если ВРег(ИмяСобытия) = ВРег("Запись_ЗакладкиВзаимодействий") Тогда Если Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаЗакладки Тогда Элементы.Закладки.Обновить(); ОбработатьАктивизациюСтрокиПанелиНавигации(); КонецЕсли; - ИначеЕсли Врег(ИмяСобытия) = Врег("Запись_ПапкиЭлектронныхПисем") - ИЛИ Врег(ИмяСобытия) = Врег("ПримененыПравилаОбработкиПисем") Тогда + ИначеЕсли ВРег(ИмяСобытия) = ВРег("Запись_ПапкиЭлектронныхПисем") + ИЛИ ВРег(ИмяСобытия) = ВРег("ПримененыПравилаОбработкиПисем") Тогда Если Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПапки Тогда ОбновитьПанельНавигации(); ВосстановитьРаскрытыеУзлыДерева(); @@ -116,14 +120,31 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - Если ПустаяСтрока(ИмяТекущейПанелиНавигации) Тогда - Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПредмет; - ОбновитьПанельНавигацииНаСервере() + Если ПустаяСтрока(ИмяТекущейПанелиНавигации) + Или ПустаяСтрока(Статус) + Или ПустаяСтрока(ТипВзаимодействия) Тогда + + УстановитьНачальныеЗначенияПриОткрытии(); + КонецЕсли; + ВосстановитьРаскрытыеУзлыДерева(); КонецПроцедуры +&НаСервере +Процедура УстановитьНачальныеЗначенияПриОткрытии() + + Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПредмет; + Статус = НСтр("ru = 'Все'"); + ТипВзаимодействия = НСтр("ru = 'Все'"); + ПриИзмененииСтатусаСервер(Ложь); + ПриИзмененииТипаСервер(Ложь); + ОбновитьПанельНавигацииНаСервере(); + +КонецПроцедуры + + &НаКлиенте Процедура ОбработкаПерехода(ОбъектПерехода, СтандартнаяОбработка) Если Не ЗначениеЗаполнено(ОбъектПерехода) Или ОбъектПерехода = Элементы.Список.ТекущаяСтрока Тогда @@ -1493,7 +1514,7 @@ ГруппаОтбора = СоздатьГруппуОтбораПанелиНавигации(); - Если ДанныеДляОбработки.Значение = Нстр("ru = 'Все'") Тогда + Если ДанныеДляОбработки.Значение = НСтр("ru = 'Все'") Тогда ВзаимодействияКлиентСервер.ОтборДинамическогоСписка(Список).Элементы.Удалить(ГруппаОтбора); Возврат; @@ -1786,8 +1807,8 @@ НоваяСтрока = ДанныеФормыКоллекция.Добавить(); КонецЕсли; - НоваяСтрока.Значение = Нстр("ru = 'Все'"); - НоваяСтрока.Представление = Нстр("ru = 'Все'"); + НоваяСтрока.Значение = НСтр("ru = 'Все'"); + НоваяСтрока.Представление = НСтр("ru = 'Все'"); НоваяСтрока.НомерКартинки = НомерКартинки; Возврат НоваяСтрока; @@ -2244,11 +2265,8 @@ | СвойстваТипаБулево КАК СвойстваТипаБулево | ГДЕ | (НЕ СвойстваТипаБулево.ЭтоРеквизит)) - | И (ДополнительныеСведения.Объект ССЫЛКА Документ.Встреча - | ИЛИ ДополнительныеСведения.Объект ССЫЛКА Документ.ТелефонныйЗвонок - | ИЛИ ДополнительныеСведения.Объект ССЫЛКА Документ.ЭлектронноеПисьмоВходящее - | ИЛИ ДополнительныеСведения.Объект ССЫЛКА Документ.ЭлектронноеПисьмоИсходящее - | ИЛИ ДополнительныеСведения.Объект ССЫЛКА Документ.ЗапланированноеВзаимодействие) " + ТекстУсловияСведения + " + | И ТИПЗНАЧЕНИЯ(ДополнительныеСведения.Объект) В (ТИП(Документ.ЗапланированноеВзаимодействие), ТИП(Документ.Встреча), ТИП(Документ.ТелефонныйЗвонок), ТИП(Документ.ЭлектронноеПисьмоВходящее), ТИП(Документ.ЭлектронноеПисьмоИсходящее), ТИП(Документ.ЗапланированноеВзаимодействие), ТИП(Документ.СообщениеSMS)) + | " + ТекстУсловияСведения + " | | СГРУППИРОВАТЬ ПО | ДополнительныеСведения.Свойство) КАК ВложенныйЗапрос @@ -2684,11 +2702,7 @@ |ИЗ | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК НаборыДополнительныхРеквизитовИСведенийДополнительныеРеквизиты |ГДЕ - | (НаборыДополнительныхРеквизитовИСведенийДополнительныеРеквизиты.Ссылка = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_Встреча) - | ИЛИ НаборыДополнительныхРеквизитовИСведенийДополнительныеРеквизиты.Ссылка = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_ЗапланированноеВзаимодействие) - | ИЛИ НаборыДополнительныхРеквизитовИСведенийДополнительныеРеквизиты.Ссылка = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_ТелефонныйЗвонок) - | ИЛИ НаборыДополнительныхРеквизитовИСведенийДополнительныеРеквизиты.Ссылка = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_ЭлектронноеПисьмоВходящее) - | ИЛИ НаборыДополнительныхРеквизитовИСведенийДополнительныеРеквизиты.Ссылка = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_ЭлектронноеПисьмоИсходящее)) + | НаборыДополнительныхРеквизитовИСведенийДополнительныеРеквизиты.Ссылка В (ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_Встреча), ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_ЗапланированноеВзаимодействие), ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_ТелефонныйЗвонок), ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_ЭлектронноеПисьмоВходящее), ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_СообщениеSMS)) | |ОБЪЕДИНИТЬ ВСЕ | @@ -2699,11 +2713,7 @@ |ИЗ | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения КАК НаборыДополнительныхРеквизитовИСведенийДополнительныеСведения |ГДЕ - | (НаборыДополнительныхРеквизитовИСведенийДополнительныеСведения.Ссылка = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_Встреча) - | ИЛИ НаборыДополнительныхРеквизитовИСведенийДополнительныеСведения.Ссылка = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_ЗапланированноеВзаимодействие) - | ИЛИ НаборыДополнительныхРеквизитовИСведенийДополнительныеСведения.Ссылка = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_ТелефонныйЗвонок) - | ИЛИ НаборыДополнительныхРеквизитовИСведенийДополнительныеСведения.Ссылка = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_ЭлектронноеПисьмоВходящее) - | ИЛИ НаборыДополнительныхРеквизитовИСведенийДополнительныеСведения.Ссылка = ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_ЭлектронноеПисьмоИсходящее)) + | НаборыДополнительныхРеквизитовИСведенийДополнительныеСведения.Ссылка В (ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_Встреча), ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_ЗапланированноеВзаимодействие), ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_ТелефонныйЗвонок), ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_ЭлектронноеПисьмоВходящее), ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Документ_СообщениеSMS)) |; | |//////////////////////////////////////////////////////////////////////////////// @@ -3131,7 +3141,7 @@ ИначеЕсли ИмяЭлементаФормы = "Свойства" Тогда Если ТипЗнч(ДанныеДляОбработки.Значение) = Тип("Строка") - И ДанныеДляОбработки.Значение = Нстр("ru = 'Не указан'") Тогда + И ДанныеДляОбработки.Значение = НСтр("ru = 'Не указан'") Тогда НаименованиеЗакладки = ТекущееСвойствоПанелиНавигации.Наименование + " " + НСтр("ru = 'не указан'"); Результат.ПредставлениеЭлемента = ?(ТолькоПочта, НСтр("ru = 'Письма'"), НСтр("ru = 'Взаимодействия'")); Иначе diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form index e5448d8ec..9d1330c6c 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Form.form @@ -1762,6 +1762,7 @@ Vertical auto + false @@ -2799,6 +2800,7 @@ Vertical auto + false true diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Help/ru.html b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Help/ru.html index 7dfd605c9..af98de580 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Help/ru.html +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Help/ru.html @@ -1,35 +1,35 @@ - +

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

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

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

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

          -

          Какие режимы просмотра доступны, и как изменить текущий режим просмотра?

          -

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

          -

          Как установить признак Рассмотрено для нескольких документов?

          -

          Как снять признак Рассмотрено для нескольких документов?

          -

          Как отложить рассмотрение нескольких документов?

          -

          Как установить предмет взаимодействий для нескольких документов?

          -

          Как назначить ответственного для нескольких документов?

          -

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

          +

          Какие режимы просмотра доступны, и как изменить текущий режим просмотра?

          +

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

          +

          Как установить признак Рассмотрено для нескольких документов?

          +

          Как снять признак Рассмотрено для нескольких документов?

          +

          Как отложить рассмотрение нескольких документов?

          +

          Как установить предмет взаимодействий для нескольких документов?

          +

          Как назначить ответственного для нескольких документов?

          +

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

        • +
          Участники - контакты, с которыми были взаимодействия;
        • -
          Дата - дата создания документа;
          +
          Дата - дата создания документа;
        • -
          Тема - краткое содержание взаимодействия.

        Жирным шрифтом в списке выделяются документы к рассмотрению, письма и сообщения SMS с установленным признаком На контроле. После установки флажка Рассмотрено выделение снимается.

        +
        Тема - краткое содержание взаимодействия.

      Жирным шрифтом в списке выделяются документы к рассмотрению, письма и сообщения SMS с установленным признаком На контроле. После установки флажка Рассмотрено выделение снимается.

      Доступные режимы просмотра

      • Доступно два режима просмотра:
        diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl index 5b21651e9..b447f46e6 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСпискаПараметрическая/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем КонтекстВыбора; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -1014,7 +1018,7 @@ |ВЫБРАТЬ | Таблица.Ссылка |ИЗ - | Справочник." + Лев(Связь,Найти(Связь,".")-1) + " КАК Таблица + | Справочник." + Лев(Связь,СтрНайти(Связь,".")-1) + " КАК Таблица |ГДЕ | Таблица." + Прав(Связь,СтрДлина(Связь) - СтрНайти(Связь,".")) + " = &Контакт"; @@ -1060,57 +1064,14 @@ Процедура УстановитьОтборПоКонтакту() Запрос = Новый Запрос( - "ВЫБРАТЬ РАЗЛИЧНЫЕ РАЗРЕШЕННЫЕ - | ВстречаУчастники.Ссылка КАК Ссылка + "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | КонтактыВзаимодействий.Взаимодействие КАК Ссылка |ИЗ - | Документ.Встреча.Участники КАК ВстречаУчастники + | ЖурналДокументов.Взаимодействия КАК Взаимодействия + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий + | ПО Взаимодействия.Ссылка = КонтактыВзаимодействий.Взаимодействие |ГДЕ - | ВстречаУчастники.Контакт В(&Контакт) - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | СообщениеSMSАдресаты.Ссылка - |ИЗ - | Документ.СообщениеSMS.Адресаты КАК СообщениеSMSАдресаты - |ГДЕ - | СообщениеSMSАдресаты.Контакт В(&Контакт) - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ТелефонныйЗвонок.Ссылка - |ИЗ - | Документ.ТелефонныйЗвонок КАК ТелефонныйЗвонок - |ГДЕ - | ТелефонныйЗвонок.АбонентКонтакт В(&Контакт) - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ЭлектронноеПисьмоВходящее.Ссылка - |ИЗ - | Документ.ЭлектронноеПисьмоВходящее КАК ЭлектронноеПисьмоВходящее - |ГДЕ - | ЭлектронноеПисьмоВходящее.ОтправительКонтакт В(&Контакт) - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ РАЗЛИЧНЫЕ - | ЭлектронноеПисьмоИсходящееПолучателиПисьма.Ссылка - |ИЗ - | Документ.ЭлектронноеПисьмоИсходящее.ПолучателиПисьма КАК ЭлектронноеПисьмоИсходящееПолучателиПисьма - |ГДЕ - | ЭлектронноеПисьмоИсходящееПолучателиПисьма.Контакт В(&Контакт) - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ РАЗЛИЧНЫЕ - | ЗапланированноеВзаимодействиеУчастники.Ссылка - |ИЗ - | Документ.ЗапланированноеВзаимодействие.Участники КАК ЗапланированноеВзаимодействиеУчастники - |ГДЕ - | ЗапланированноеВзаимодействиеУчастники.Контакт В(&Контакт)"); + | КонтактыВзаимодействий.Контакт В(&Контакт)"); МассивПараметрКонтакт = ПолучитьПараметрКонтактВЗависимостиОтТипа(Контакт); Если МассивПараметрКонтакт.Количество() = 0 Тогда diff --git a/SSL/src/DocumentJournals/Взаимодействия/Templates/ИерархияВзаимодействийКонтакт/Template.dcs b/SSL/src/DocumentJournals/Взаимодействия/Templates/ИерархияВзаимодействийКонтакт/Template.dcs index e33f746e9..0fce9932e 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Templates/ИерархияВзаимодействийКонтакт/Template.dcs +++ b/SSL/src/DocumentJournals/Взаимодействия/Templates/ИерархияВзаимодействийКонтакт/Template.dcs @@ -71,7 +71,7 @@ ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК Взаимодействия ПО КонтактыВзаимодействий.Взаимодействие = Взаимодействия.Ссылка ГДЕ - КонтактыВзаимодействий.Контакт В(&Контакт) + КонтактыВзаимодействий.Контакт = &Контакт {ГДЕ (Взаимодействия.Дата МЕЖДУ &НачалоПериода И &КонецПериода)} ; @@ -203,8 +203,8 @@ d4p1:CatalogRef.Пользователи + false - true ДатаНачала diff --git a/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Help/ru.html b/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Help/ru.html index cc55f877f..3eada6852 100644 --- a/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Help/ru.html +++ b/SSL/src/DocumentJournals/СогласияНаОбработкуПерсональныхДанных/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

        Ввод новых документов

        diff --git a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form index 9b1b3adfb..a15f9638b 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Form.form @@ -1762,10 +1762,10 @@ - ИмяМетаданныхРеспонент + ИмяМетаданныхРеспондент <key>ru</key> - <value>Имя метаданных респонент</value> + <value>Имя метаданных респондент</value> 5 diff --git a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Help/ru.html b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Help/ru.html index 4068ca9f8..08f7c68f3 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 bf65d62de..08a681593 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl @@ -72,7 +72,7 @@ Элементы.ПредыдущийРазделПодвал.Видимость = Ложь; Элементы.СледующийРазделПодвал.Видимость = Ложь; Если Не ПозиционированиеНаРазделе Тогда - ПереключитьВидимостьГруппТелаАнкеты(); + АнкетированиеКлиентСервер.ПереключитьВидимостьГруппТелаАнкеты(ЭтотОбъект, Истина); КонецЕсли; ДействияВЗависимостиОтВидаФормы(); @@ -120,7 +120,7 @@ МассивОтбора.Добавить(АнкетированиеКлиент.СоздатьСтруктуруПараметраОтбора(Тип("ЭлементОтбораКомпоновкиДанных"),"Ссылка",ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии,ОтборРеспондентов)); КонецЕсли; - ОткрытьФорму(ИмяМетаданныхРеспонент + ".ФормаВыбора",Новый Структура("МассивОтбора",МассивОтбора),Элемент); + ОткрытьФорму(ИмяМетаданныхРеспондент + ".ФормаВыбора",Новый Структура("МассивОтбора",МассивОтбора),Элемент); КонецПроцедуры @@ -134,7 +134,7 @@ // Обработчик события при изменении для простых и табличных вопросов. &НаКлиенте -Процедура ПриИзмененииВопроса(Элемент) +Процедура Подключаемый_ПриИзмененииВопроса(Элемент) Модифицированность = Истина; @@ -913,7 +913,7 @@ Элементы.ПредыдущийРазделПодвал.Видимость = (ТаблицаВопросовРаздела.Количество() > 0); Элементы.СледующийРазделПодвал.Видимость = (ТаблицаВопросовРаздела.Количество() > 0); - ПереключитьВидимостьГруппТелаАнкеты(); + АнкетированиеКлиентСервер.ПереключитьВидимостьГруппТелаАнкеты(ЭтотОбъект, Истина); КонецПроцедуры @@ -1248,20 +1248,20 @@ ИмяВопроса = АнкетированиеКлиентСервер.ПолучитьИмяВопроса(СтрокаТаблицы.КлючСтроки); Если СтрокаТаблицы.ТипВопроса = Перечисления.ТипыВопросовШаблонаАнкеты.Табличный Тогда - Элементы[ИмяВопроса + "_Таблица"].УстановитьДействие("ПриИзменении","ПриИзмененииВопроса"); + Элементы[ИмяВопроса + "_Таблица"].УстановитьДействие("ПриИзменении","Подключаемый_ПриИзмененииВопроса"); Иначе Если СтрокаТаблицы.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.НесколькоВариантовИз Тогда ВариантыОтветовНаВопрос = Анкетирование.ПолучитьВариантыОтветовНаВопрос(СтрокаТаблицы.ЭлементарныйВопрос,ЭтотОбъект); Для инд = 1 По ВариантыОтветовНаВопрос.Количество() Цикл - Элементы[ИмяВопроса + "_Реквизит_" + инд].УстановитьДействие("ПриИзменении","ПриИзмененииВопроса"); + Элементы[ИмяВопроса + "_Реквизит_" + инд].УстановитьДействие("ПриИзменении","Подключаемый_ПриИзмененииВопроса"); Если ВариантыОтветовНаВопрос[инд-1].ТребуетОткрытогоОтвета Тогда - Элементы[ИмяВопроса + "_Комментарий_" + инд].УстановитьДействие("ПриИзменении","ПриИзмененииВопроса"); + Элементы[ИмяВопроса + "_Комментарий_" + инд].УстановитьДействие("ПриИзменении","Подключаемый_ПриИзмененииВопроса"); КонецЕсли; КонецЦикла; Иначе - Элементы[ИмяВопроса].УстановитьДействие("ПриИзменении","ПриИзмененииВопроса"); + Элементы[ИмяВопроса].УстановитьДействие("ПриИзменении","Подключаемый_ПриИзмененииВопроса"); Если СтрокаТаблицы.ТребуетсяКомментарий Тогда - Элементы[ИмяВопроса + "_Комментарий"].УстановитьДействие("ПриИзменении","ПриИзмененииВопроса"); + Элементы[ИмяВопроса + "_Комментарий"].УстановитьДействие("ПриИзменении","Подключаемый_ПриИзмененииВопроса"); КонецЕсли; КонецЕсли; КонецЕсли; @@ -1274,7 +1274,7 @@ &НаКлиенте Процедура ВыполнитьПостроениеФормыЗаполнения() - ПереключитьВидимостьГруппТелаАнкеты(); + АнкетированиеКлиентСервер.ПереключитьВидимостьГруппТелаАнкеты(ЭтотОбъект, Ложь); ПодключитьОбработчикОжидания("ОкончаниеПостроенияФормыЗаполнения",0.1,Истина); КонецПроцедуры @@ -1294,13 +1294,6 @@ КонецПроцедуры -Процедура ПереключитьВидимостьГруппТелаАнкеты() - - Элементы.ГруппаТелоАнкеты.Видимость = НЕ Элементы.ГруппаТелоАнкеты.Видимость; - Элементы.ГруппаОжидание.Видимость = НЕ Элементы.ГруппаТелоАнкеты.Видимость; - -КонецПроцедуры - // Изменяет видимость дерева разделов. &НаКлиенте Процедура ИзменитьВидимостьДеревоРазделов() diff --git a/SSL/src/Documents/Анкета/Forms/ФормаСписка/Help/ru.html b/SSL/src/Documents/Анкета/Forms/ФормаСписка/Help/ru.html index 0c3bd0c34..450fc0e40 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/Анкета/ManagerModule.bsl b/SSL/src/Documents/Анкета/ManagerModule.bsl index 54c2c1ca9..1de6a7927 100644 --- a/SSL/src/Documents/Анкета/ManagerModule.bsl +++ b/SSL/src/Documents/Анкета/ManagerModule.bsl @@ -5,9 +5,11 @@ //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. -// Возвращает список реквизитов, которые разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Documents/Встреча/Forms/ФормаВыбора/Help/ru.html b/SSL/src/Documents/Встреча/Forms/ФормаВыбора/Help/ru.html index f4d80a5bf..2dd31d571 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/ФормаДокумента/Form.form b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form index a1ca6fb65..67b36c3c1 100644 --- a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form @@ -492,6 +492,7 @@ Vertical auto + false @@ -831,6 +832,7 @@ Объект.Участники.RowsCount + false @@ -863,6 +865,7 @@ Vertical auto + false @@ -938,6 +941,7 @@ Vertical auto + false true @@ -1295,6 +1299,7 @@ Vertical auto + false @@ -1360,6 +1365,7 @@ Vertical auto + false true diff --git a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Help/ru.html b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Help/ru.html index 32c6d0b2f..fd786f072 100644 --- a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Help/ru.html +++ b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Help/ru.html @@ -1,9 +1,9 @@ - +

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

        -

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

        -

        Как указать участников встречи?

        -

        Какие взаимодействия можно создать на основании встречи?

        -

        Как просмотреть взаимодействия, созданные на основании встречи?

        +

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

        +

        Как указать участников встречи?

        +

        Какие взаимодействия можно создать на основании встречи?

        +

        Как просмотреть взаимодействия, созданные на основании встречи?

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

        • Начало - дата и время начала встречи.
        • Окончание - дата и время окончания встречи. diff --git a/SSL/src/Documents/Встреча/ManagerModule.bsl b/SSL/src/Documents/Встреча/ManagerModule.bsl index 28e2c92fb..58c572b16 100644 --- a/SSL/src/Documents/Встреча/ManagerModule.bsl +++ b/SSL/src/Documents/Встреча/ManagerModule.bsl @@ -19,9 +19,11 @@ //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. -// Возвращает список реквизитов, которые разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Documents/Встреча/ObjectModule.bsl b/SSL/src/Documents/Встреча/ObjectModule.bsl index 430312098..00dc47df2 100644 --- a/SSL/src/Documents/Встреча/ObjectModule.bsl +++ b/SSL/src/Documents/Встреча/ObjectModule.bsl @@ -77,7 +77,6 @@ - #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаВыбора/Help/ru.html b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаВыбора/Help/ru.html index cd9428507..0196e5996 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаВыбора/Help/ru.html +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаВыбора/Help/ru.html @@ -1,4 +1,4 @@ - +

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

          Открывается по кнопке  после выбора типа данных Запланированное взаимодействие (например, при заполнении поля Предмет в каком-либо документе взаимодействий).

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

          diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form index 4746b72ea..ab279c7b3 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form @@ -122,6 +122,7 @@ Vertical auto + false @@ -155,6 +156,7 @@ Vertical auto + false @@ -492,6 +494,7 @@ КоличествоУчастников + false @@ -568,6 +571,7 @@ Vertical auto + false true @@ -927,6 +931,7 @@ Vertical auto + false @@ -992,6 +997,7 @@ Vertical auto + false true diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Help/ru.html b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Help/ru.html index 8badf40d8..ab8020455 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Help/ru.html +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Help/ru.html @@ -1,9 +1,9 @@ - +

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

          -

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

          -

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

          -

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

          -

          Как просмотреть взаимодействия, созданные на основании данного документа?

          +

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

          +

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

          +

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

          +

          Как просмотреть взаимодействия, созданные на основании данного документа?

          Заполните необходимые поля:
          • Предмет - то, чему посвящено взаимодействие, например, претензии клиента. Предметом могут быть документы программы, а также документы взаимодействий. Если предмет взаимодействия не определен, то в качестве предмета выступает текущий документ (т.е. такой документ начинает цепочку взаимодействий).
            • Для заполнения поля нажмите  Выбрать, выберите тип данных, затем из соответствующего списка выберите конкретный документ.
          • Тема - краткое описание того, чему будет посвящено запланированное взаимодействие. diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Help/ru.html b/SSL/src/Documents/ЗапланированноеВзаимодействие/Help/ru.html index 3a42de587..95c82a49d 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Help/ru.html +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

             

            \ No newline at end of file diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl b/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl index 47808c303..414bac3ea 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl @@ -19,9 +19,11 @@ //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. -// Возвращает список реквизитов, которые разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаВыбора/Help/ru.html b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаВыбора/Help/ru.html index 8828e6819..bf17c2cbe 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/ФормаДокумента/Form.form b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Form.form index a75d8a539..f8835d777 100644 --- a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Form.form @@ -1212,6 +1212,7 @@ Объект.Респонденты.RowsCount + false @@ -1292,6 +1293,7 @@ Vertical auto + false true diff --git a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Help/ru.html b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Help/ru.html index 8adb7a68e..5d23e55b4 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 82e2adf91..37d1dce16 100644 --- a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаДокумента/Module.bsl @@ -48,7 +48,7 @@ Если (Объект.ДатаНачала > Объект.ДатаОкончания) И (Объект.ДатаОкончания <> Дата(1,1,1)) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Нстр("ru = 'Дата начала не может быть больше чем дата окончания.'"),,"Объект.ДатаНачала"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Дата начала не может быть больше чем дата окончания.'"),,"Объект.ДатаНачала"); Отказ = Истина; КонецЕсли; diff --git a/SSL/src/Documents/НазначениеОпросов/Forms/ФормаПодбораРеспондентов/Help/ru.html b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаПодбораРеспондентов/Help/ru.html index 63f01ee97..8a3690f2e 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/ФормаСписка/Help/ru.html b/SSL/src/Documents/НазначениеОпросов/Forms/ФормаСписка/Help/ru.html index d427c109c..8dd7b3d6f 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/НазначениеОпросов/ManagerModule.bsl b/SSL/src/Documents/НазначениеОпросов/ManagerModule.bsl index 37d804b82..9ae9529ee 100644 --- a/SSL/src/Documents/НазначениеОпросов/ManagerModule.bsl +++ b/SSL/src/Documents/НазначениеОпросов/ManagerModule.bsl @@ -5,9 +5,11 @@ //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. -// Возвращает список реквизитов, которые разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Help/ru.html b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Help/ru.html index 59ca7aa42..2710bf3d4 100644 --- a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Help/ru.html +++ b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

            Заполняется на основании документа Согласие на обработку ПДн.

            diff --git a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ОтзывСогласияНаОбработкуПерсональныхДанных.mdo b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ОтзывСогласияНаОбработкуПерсональныхДанных.mdo index 08214c665..44bb09eef 100644 --- a/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ОтзывСогласияНаОбработкуПерсональныхДанных.mdo +++ b/SSL/src/Documents/ОтзывСогласияНаОбработкуПерсональныхДанных/ОтзывСогласияНаОбработкуПерсональныхДанных.mdo @@ -83,6 +83,7 @@ true true Document.ОтзывСогласияНаОбработкуПерсональныхДанных.Form.ФормаДокумента + Deny InformationRegister.СогласияНаОбработкуПерсональныхДанных true true diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Help/ru.html b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Help/ru.html index e05b59e48..bdc26aef9 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Help/ru.html +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

            • Проверяется наличие зарегистрированных физических лиц; diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl index 4ec7315a2..2098b4847 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl @@ -104,7 +104,7 @@ // Процедура печати согласия на обработку персональных данных. // -Функция ПечатьСогласияНаОбработкуПДн(Согласия, ОбъектыПечати) Экспорт +Функция ПечатьСогласияНаОбработкуПДн(Согласия, ОбъектыПечати) ТабличныйДокумент = Новый ТабличныйДокумент; ТабличныйДокумент.КлючПараметровПечати = "ПараметрыПечати_СогласиеНаОбработкуПерсональныхДанных"; @@ -155,11 +155,11 @@ // Структура данных для подготовки печатных форм. // // Параметры: -// Согласия - массив документов типа ДокументСсылка.СогласиеНаОбработкуПерсональныхДанных +// Согласия - массив документов типа ДокументСсылка.СогласиеНаОбработкуПерсональныхДанных. // // Возвращаемое значение - массив структур, см. ОписаниеСогласия(). // -Функция ДанныеДляПечатиСогласий(Согласия) Экспорт +Функция ДанныеДляПечатиСогласий(Согласия) ДанныеДляПечати = Новый Массив; @@ -205,7 +205,7 @@ // Структура данных для подготовки печатных форм. // // Параметры: -// Согласия - массив документов типа ДокументСсылка.СогласиеНаОбработкуПерсональныхДанных +// Согласия - массив документов типа ДокументСсылка.СогласиеНаОбработкуПерсональныхДанных. // // Возвращаемое значение - соответствие, в котором ключом является ссылкой, а значением описание, см. ОписаниеСогласия(). // diff --git a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/СогласиеНаОбработкуПерсональныхДанных.mdo b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/СогласиеНаОбработкуПерсональныхДанных.mdo index 8d5a2e05f..1aa7632ab 100644 --- a/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/СогласиеНаОбработкуПерсональныхДанных.mdo +++ b/SSL/src/Documents/СогласиеНаОбработкуПерсональныхДанных/СогласиеНаОбработкуПерсональныхДанных.mdo @@ -216,7 +216,7 @@ String - 150 + 500 diff --git a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Form.form index d4cb2bf92..10e8b78cc 100644 --- a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Form.form @@ -185,6 +185,7 @@ Vertical auto + false @@ -655,6 +656,7 @@ КоличествоАдресатов + false @@ -687,6 +689,7 @@ Vertical auto + false @@ -766,6 +769,7 @@ Vertical auto + false true @@ -1210,6 +1214,7 @@ Vertical auto + false @@ -1275,6 +1280,7 @@ Vertical auto + false true diff --git a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Help/ru.html b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Help/ru.html index 26b976e03..d1ef89351 100644 --- a/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Help/ru.html +++ b/SSL/src/Documents/СообщениеSMS/Forms/ФормаДокумента/Help/ru.html @@ -1,12 +1,12 @@ - +

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

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

              -

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

              -

              Как указать адресатов сообщения?

              -

              Как отправить сообщения?

              -

              Как узнать текущее состояние сообщения SMS?

              -

              Какие взаимодействия можно создать на основании сообщения SMS?

              -

              Как просмотреть взаимодействия, созданные на основании сообщения SMS?

              +

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

              +

              Как указать адресатов сообщения?

              +

              Как отправить сообщения?

              +

              Как узнать текущее состояние сообщения SMS?

              +

              Какие взаимодействия можно создать на основании сообщения SMS?

              +

              Как просмотреть взаимодействия, созданные на основании сообщения SMS?

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

              • Предмет - то, чему посвящено взаимодействие, например, претензии клиента. Предметом могут быть документы программы, а также документы взаимодействий. Если предмет взаимодействия не определен, то в качестве предмета выступает текущий документ (т.е. такой документ начинает цепочку взаимодействий). 
              • Для заполнения поля нажмите  Выбрать, выберите тип данных, затем из соответствующего списка выберите конкретный документ. diff --git a/SSL/src/Documents/СообщениеSMS/Help/ru.html b/SSL/src/Documents/СообщениеSMS/Help/ru.html index 91e8f1697..5c9845c5b 100644 --- a/SSL/src/Documents/СообщениеSMS/Help/ru.html +++ b/SSL/src/Documents/СообщениеSMS/Help/ru.html @@ -1,4 +1,4 @@ - +

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

                Открывается по кнопке  после выбора типа данных Сообщение SMS (например, при заполнении поля Предмет в каком-либо документе взаимодействий).

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

                diff --git a/SSL/src/Documents/СообщениеSMS/ManagerModule.bsl b/SSL/src/Documents/СообщениеSMS/ManagerModule.bsl index c746852de..61b26debb 100644 --- a/SSL/src/Documents/СообщениеSMS/ManagerModule.bsl +++ b/SSL/src/Documents/СообщениеSMS/ManagerModule.bsl @@ -19,9 +19,11 @@ //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. -// Возвращает список реквизитов, которые разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form index 1f1a5a3ec..03f3ea1c1 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form @@ -396,6 +396,7 @@ Vertical auto + false @@ -428,6 +429,7 @@ Vertical auto + false @@ -502,6 +504,7 @@ Vertical auto + false true @@ -863,6 +866,7 @@ Page Vertical + false @@ -928,6 +932,7 @@ Page Vertical + false true diff --git a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Help/ru.html b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Help/ru.html index 188dada0e..e2fdfc924 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Help/ru.html +++ b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Help/ru.html @@ -1,9 +1,9 @@ - +

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

                -

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

                -

                Как указать абонента телефонного звонка?

                -

                Какие взаимодействия можно создать на основании телефонного звонка?

                -

                Как просмотреть взаимодействия, созданные на основании телефонного звонка?

                +

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

                +

                Как указать абонента телефонного звонка?

                +

                Какие взаимодействия можно создать на основании телефонного звонка?

                +

                Как просмотреть взаимодействия, созданные на основании телефонного звонка?

                Заполните необходимые поля:
                • Предмет - то, чему посвящен телефонный звонок, например, претензии клиента. Предметом могут быть документы программы и документы взаимодействий. Если предмет взаимодействия не определен, то в качестве предмета автоматически проставляется значение текущего документа, т.е. такой документ начинает цепочку взаимодействий. При выполнении команды Взаимодействия из документа предметом взаимодействия во вновь созданном документе будет предмет, указанный в исходном документе, при этом основные поля будут также скопированы.
                • Для заполнения поля нажмите  Выбрать, выберите тип данных, затем из соответствующего списка выберите конкретный документ. diff --git a/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl b/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl index 423939520..117dede94 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl +++ b/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl @@ -37,9 +37,11 @@ //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. -// Возвращает список реквизитов, которые разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl b/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl index 5f07da47e..5f3d3858d 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl +++ b/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl @@ -63,7 +63,7 @@ #Область СлужебныеПроцедурыИФункции - + #КонецОбласти diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Help/ru.html b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаВыбора/Help/ru.html index 090fa2805..1e530172c 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/ФормаДокумента/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form index f1203cb78..8c7a67e91 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form @@ -252,6 +252,7 @@ Vertical auto + false @@ -284,6 +285,7 @@ Vertical auto + false @@ -358,6 +360,7 @@ Vertical auto + false true @@ -1043,6 +1046,7 @@ Page auto + false @@ -1102,6 +1106,7 @@ Page auto + false true diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Help/ru.html b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Help/ru.html index 2af08e948..edb105038 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Help/ru.html +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Help/ru.html @@ -1,15 +1,15 @@ - +

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

                  -

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

                  -

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

                  -

                  Как создать исходящее электронное письмо на основании входящего электронного письма?

                  -

                  В каких случаях в документе появляется ссылка Уточнить контакты?

                  -

                  Как изменить папку электронного письма?

                  -

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

                  -

                  Какие взаимодействия можно создать на основании входящего письма?

                  -

                  Как просмотреть взаимодействия, созданные на основании входящего письма?

                  -

                  Как распечатать письмо?

                  -

                  Как работать со списком вложений?

                  +

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

                  +

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

                  +

                  Как создать исходящее электронное письмо на основании входящего электронного письма?

                  +

                  В каких случаях в документе появляется ссылка Уточнить контакты?

                  +

                  Как изменить папку электронного письма?

                  +

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

                  +

                  Какие взаимодействия можно создать на основании входящего письма?

                  +

                  Как просмотреть взаимодействия, созданные на основании входящего письма?

                  +

                  Как распечатать письмо?

                  +

                  Как работать со списком вложений?

                  Информация для просмотра

                  • От - информация об отправителе письма.
                  • Кому - информация об основных получателях письма. diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl index 19dfb927d..47fb745f4 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl @@ -481,7 +481,7 @@ ЗаписьТекста.Записать( ?(Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTML, Объект.ТекстHTML, Объект.Текст)); ЗаписьТекста.Закрыть(); - + ЧтениеТекста = Новый ЧтениеТекста(ИмяВременногоФайла, ВыбраннаяКодировка); Если Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTML Тогда Объект.ТекстHTML = ЧтениеТекста.Прочитать(); @@ -491,6 +491,7 @@ ТекстПисьма = Объект.Текст; КонецЕсли; ЧтениеТекста.Закрыть(); + УдалитьФайлы(ИмяВременногоФайла); ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); ЗаписьТекста = Новый ЗаписьТекста(ИмяВременногоФайла, Объект.Кодировка); @@ -508,6 +509,7 @@ ПолучателиПредставление = ЧтениеТекста.ПрочитатьСтроку(); Объект.Тема = ЧтениеТекста.ПрочитатьСтроку(); ЧтениеТекста.Закрыть(); + УдалитьФайлы(ИмяВременногоФайла); Объект.Кодировка = ВыбраннаяКодировка; diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаСписка/Help/ru.html b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаСписка/Help/ru.html index 2ea66a373..f16339327 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/ЭлектронноеПисьмоВходящее/ManagerModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl index 9c17ea920..1614ca1ce 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl @@ -91,9 +91,11 @@ //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. -// Возвращает список реквизитов, которые разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl index bf5347c20..4ce1ae48a 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl @@ -35,7 +35,7 @@ #Область СлужебныеПроцедурыИФункции - + #КонецОбласти diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаВыбора/Help/ru.html b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаВыбора/Help/ru.html index 891088063..cf5dbc047 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/ФормаДокумента/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form index 0a687ebb2..6e68b7905 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form @@ -386,6 +386,7 @@ Vertical auto + false @@ -485,7 +486,6 @@ 50 true 7 - true true true @@ -517,6 +517,7 @@ Vertical auto + false true @@ -729,6 +730,7 @@ Vertical auto + false @@ -761,6 +763,7 @@ Vertical auto + false @@ -835,6 +838,7 @@ Vertical auto + false true @@ -1803,6 +1807,7 @@ Page auto + false @@ -1899,6 +1904,7 @@ Page auto + false true diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Help/ru.html b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Help/ru.html index a39fdbb95..0a2c0a5a0 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Help/ru.html +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Help/ru.html @@ -1,21 +1,21 @@ - +

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

                      -

                      Какая из доступных учетных записей подставляется по умолчанию?

                      -

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

                      -

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

                      -

                      Можно ли редактировать письмо в формате HTML?

                      -

                      Как приложить к письму файлы?

                      -

                      Какие еще действия доступны с вложениями письма?

                      -

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

                      -

                      Как указать что необходимо уведомление о доставке и/или прочтении письма?

                      -

                      Как указать, что письмо нужно отправить в определенной кодировке?

                      -

                      В каких случаях в документе появляется ссылка Уточнить контакты?

                      -

                      Как изменить папку электронного письма?

                      -

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

                      -

                      Какие взаимодействия можно создать на основании исходящего письма?

                      -

                      Как просмотреть взаимодействия, созданные на основании исходящего письма?

                      -

                      Как распечатать письмо?

                      -

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

                      +

                      Какая из доступных учетных записей подставляется по умолчанию?

                      +

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

                      +

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

                      +

                      Можно ли редактировать письмо в формате HTML?

                      +

                      Как приложить к письму файлы?

                      +

                      Какие еще действия доступны с вложениями письма?

                      +

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

                      +

                      Как указать что необходимо уведомление о доставке и/или прочтении письма?

                      +

                      Как указать, что письмо нужно отправить в определенной кодировке?

                      +

                      В каких случаях в документе появляется ссылка Уточнить контакты?

                      +

                      Как изменить папку электронного письма?

                      +

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

                      +

                      Какие взаимодействия можно создать на основании исходящего письма?

                      +

                      Как просмотреть взаимодействия, созданные на основании исходящего письма?

                      +

                      Как распечатать письмо?

                      +

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

                      Учетная запись в письме по умолчанию

                      • В поле От (электронный адрес отправителя) программой автоматически проставляется:
                        • Учетная запись письма-основания, если данное письмо создается на основании другого письма. Например, как ответ на входящее письмо; diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl index dd487cf04..cf118cd59 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl @@ -505,6 +505,7 @@ ИмяЭлемента = Элемент.Имя; ИмяСвязаннойТаблицы = ПолучитьИмяСвязаннойТаблицы(ИмяЭлемента); + Текст = СокрЛП(Текст); Если Не ПустаяСтрока(Текст) Тогда @@ -512,8 +513,8 @@ ТекстДляПолученияДанныхВыбора = ""; - ПодстрокиВведенногоТекста = СтрРазделить(Текст, ";"); - ПодстрокиДанныхОбъекта = СтрРазделить(Объект[ИмяЭлемента], ";"); + ПодстрокиВведенногоТекста = СтрРазделить(Текст, ";", Ложь); + ПодстрокиДанныхОбъекта = СтрРазделить(Объект[ИмяЭлемента], ";", Ложь); Если (ПодстрокиВведенногоТекста.Количество() < ПодстрокиДанныхОбъекта.Количество()) ИЛИ (ПодстрокиВведенногоТекста.Количество() > (ПодстрокиДанныхОбъекта.Количество()+1)) Тогда @@ -757,7 +758,8 @@ Возврат; КонецЕсли; - Если Объект.ПолучателиПисьма.Количество() = 0 Тогда + Если Объект.ПолучателиПисьма.Количество() = 0 + И Объект.ПолучателиСкрытыхКопий.Количество() = 0 Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru='Необходимо указать хотя бы одного получателя письма.'"),, "Объект.СписокПолучателейПисьма"); @@ -1150,6 +1152,7 @@ ДвоичныеДанные.Записать(ПутьКФайлу); КонецЕсли; ЗапуститьПриложение("""" + ПутьКФайлу + """"); + УдалитьФайлы(ИмяВременнойПапки); #Иначе ПолучитьФайл(ПутьКФайлу, ТекДанные.ИмяФайла, Истина); #КонецЕсли @@ -1159,15 +1162,15 @@ КонецПроцедуры &НаСервере -Процедура ЗаполнитьВложения(Параметры = Неопределено) +Процедура ЗаполнитьВложения(ПереданныеПараметры = Неопределено) - Если Объект.Ссылка.Пустая() И Параметры <> Неопределено Тогда - Если Параметры.Свойство("Основание") - И ТипЗнч(Параметры.Основание) = Тип("Структура") - И Параметры.Основание.Свойство("Команда") - И Параметры.Основание.Команда = "Переслать" Тогда + Если Объект.Ссылка.Пустая() И ПереданныеПараметры <> Неопределено Тогда + Если ПереданныеПараметры.Свойство("Основание") + И ТипЗнч(ПереданныеПараметры.Основание) = Тип("Структура") + И ПереданныеПараметры.Основание.Свойство("Команда") + И ПереданныеПараметры.Основание.Команда = "Переслать" Тогда - табВложения = УправлениеЭлектроннойПочтой.ПолучитьВложенияЭлектронногоПисьма(Параметры.Основание.Основание, Истина); + табВложения = УправлениеЭлектроннойПочтой.ПолучитьВложенияЭлектронногоПисьма(ПереданныеПараметры.Основание.Основание, Истина); Для Каждого СтрокаТаблицыВложений Из табВложения Цикл Если ПустаяСтрока(СтрокаТаблицыВложений.ИДФайлаЭлектронногоПисьма) Тогда НоваяСтрока = Вложения.Добавить(); @@ -1225,14 +1228,14 @@ ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайла); АдресФайлаВХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные); - ПрисоединенныеФайлы.ДобавитьФайл( - ТекущийОбъект.Ссылка, - НСтр("ru = 'Пересылаемое сообщение'"), - "html", - , - , - АдресФайлаВХранилище, - ""); + ПараметрыФайла = Новый Структура; + ПараметрыФайла.Вставить("ВладелецФайлов", ТекущийОбъект.Ссылка); + ПараметрыФайла.Вставить("Автор", Неопределено); + ПараметрыФайла.Вставить("ИмяБезРасширения", НСтр("ru = 'Пересылаемое сообщение'")); + ПараметрыФайла.Вставить("РасширениеБезТочки", "html"); + ПараметрыФайла.Вставить("ВремяИзменения", Неопределено); + ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", Неопределено); + ПрисоединенныеФайлы.ДобавитьПрисоединенныйФайл(ПараметрыФайла, АдресФайлаВХранилище); КонецЕсли; @@ -1434,7 +1437,7 @@ КонецЦикла; // Подготовим шапку письма основания. - // Горизонтальный разделитель + // Горизонтальный разделитель. СтруктураАтрибутов = Новый Структура; СтруктураАтрибутов.Вставить("size", "2"); СтруктураАтрибутов.Вставить("width", "100%"); @@ -1467,7 +1470,7 @@ ""); СтрокаШапка = СтрокаШапка + Символы.ПС+ НСтр("ru = 'Отправлено'") + ": " - + Формат(ВыборкаДанныеВходящегоПисьма.Дата,"ДФ='dd MMMM yyyy'"); + + Формат(ВыборкаДанныеВходящегоПисьма.Дата,"ДЛФ=DT"); СтрокаШапка = СтрокаШапка + Символы.ПС+ НСтр("ru = 'Кому'") + ": " + Взаимодействия.ПолучитьПредставленияПолучателейВходящегоПисьма(ВыборкаДанныеВходящегоПисьма.ПолучателиПисьма.Выгрузить()); @@ -1585,16 +1588,16 @@ // Обрабатывает переданные параметры при создании письма. &НаСервере -Процедура ОбработатьПереданныеПараметры(Параметры) +Процедура ОбработатьПереданныеПараметры(ПереданныеПараметры) Если Объект.Ссылка.Пустая() Тогда - Если Параметры.Свойство("Вложения") И Параметры.Вложения <> Неопределено Тогда + Если ПереданныеПараметры.Свойство("Вложения") И ПереданныеПараметры.Вложения <> Неопределено Тогда - Если ТипЗнч(Параметры.Вложения) = Тип("СписокЗначений") Или ТипЗнч(Параметры.Вложения) = Тип("Массив") Тогда - Для Каждого Вложение Из Параметры.Вложения Цикл + Если ТипЗнч(ПереданныеПараметры.Вложения) = Тип("СписокЗначений") Или ТипЗнч(ПереданныеПараметры.Вложения) = Тип("Массив") Тогда + Для Каждого Вложение Из ПереданныеПараметры.Вложения Цикл ОписаниеВложения = Вложения.Добавить(); - Если ТипЗнч(Параметры.Вложения) = Тип("СписокЗначений") Тогда + Если ТипЗнч(ПереданныеПараметры.Вложения) = Тип("СписокЗначений") Тогда Если ЭтоАдресВременногоХранилища(Вложение.Значение) Тогда ОписаниеВложения.Расположение = 4; ОписаниеВложения.ИмяФайлаНаКомпьютере = ПоместитьВоВременноеХранилище(ПолучитьИзВременногоХранилища(Вложение.Значение), УникальныйИдентификатор); @@ -1606,7 +1609,7 @@ ОписаниеВложения.ИмяФайлаНаКомпьютере = Вложение.Значение; КонецЕсли; ОписаниеВложения.ИмяФайла = Вложение.Представление; - Иначе // ТипЗнч(Параметры.Вложения) = "массив структур" + Иначе // ТипЗнч(ПереданныеПараметры.Вложения) = "массив структур" Если Не ПустаяСтрока(Вложение.АдресВоВременномХранилище) Тогда ОписаниеВложения.Расположение = 4; ОписаниеВложения.ИмяФайлаНаКомпьютере = ПоместитьВоВременноеХранилище( @@ -1624,33 +1627,33 @@ КонецЕсли; - Если НЕ ПустаяСтрока(Параметры.Тема) Тогда - Объект.Тема = Параметры.Тема; + Если НЕ ПустаяСтрока(ПереданныеПараметры.Тема) Тогда + Объект.Тема = ПереданныеПараметры.Тема; КонецЕсли; - Если ТипЗнч(Параметры.Тело) = Тип("Структура") Тогда - ТекстПисьмаФорматированныйДокумент.УстановитьHTML(Параметры.Тело.ТекстHTML, Параметры.Тело.СтруктураВложений); + Если ТипЗнч(ПереданныеПараметры.Тело) = Тип("Структура") Тогда + ТекстПисьмаФорматированныйДокумент.УстановитьHTML(ПереданныеПараметры.Тело.ТекстHTML, ПереданныеПараметры.Тело.СтруктураВложений); Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTMLСКартинками; - ИначеЕсли ТипЗнч(Параметры.Тело) = Тип("Строка") И Не ПустаяСтрока(Параметры.Тело) Тогда - Объект.Текст = Параметры.Тело; + ИначеЕсли ТипЗнч(ПереданныеПараметры.Тело) = Тип("Строка") И Не ПустаяСтрока(ПереданныеПараметры.Тело) Тогда + Объект.Текст = ПереданныеПараметры.Тело; ТекстПисьмаФорматированныйДокумент.Добавить(Объект.Текст); СтруктураВложений = Новый Структура; ТекстПисьмаФорматированныйДокумент.ПолучитьHTML(Объект.ТекстHTML, СтруктураВложений); КонецЕсли; - Если Параметры.Свойство("Кому") И Параметры.Кому <> Неопределено Тогда + Если ПереданныеПараметры.Свойство("Кому") И ПереданныеПараметры.Кому <> Неопределено Тогда // Если передан параметр "Кому", то эта табличная часть очищается перед заполнением согласно данным параметра. Объект.ПолучателиПисьма.Очистить(); - Если ТипЗнч(Параметры.Кому) = Тип("Строка") И НЕ ПустаяСтрока(Параметры.Кому) Тогда - Объект.СписокПолучателейПисьма = Параметры.Кому; + Если ТипЗнч(ПереданныеПараметры.Кому) = Тип("Строка") И НЕ ПустаяСтрока(ПереданныеПараметры.Кому) Тогда + Объект.СписокПолучателейПисьма = ПереданныеПараметры.Кому; НоваяСтрока = Объект.ПолучателиПисьма.Добавить(); - НоваяСтрока.Адрес = Параметры.Кому; + НоваяСтрока.Адрес = ПереданныеПараметры.Кому; - ИначеЕсли ТипЗнч(Параметры.Кому) = Тип("СписокЗначений") Тогда + ИначеЕсли ТипЗнч(ПереданныеПараметры.Кому) = Тип("СписокЗначений") Тогда - Для Каждого ЭлементСписка Из Параметры.Кому Цикл + Для Каждого ЭлементСписка Из ПереданныеПараметры.Кому Цикл НоваяСтрока = Объект.ПолучателиПисьма.Добавить(); НоваяСтрока.Адрес = ЭлементСписка.Значение; НоваяСтрока.Представление = ЭлементСписка.Представление; @@ -1658,9 +1661,9 @@ Объект.СписокПолучателейПисьма = ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиПисьма, Ложь); - ИначеЕсли ТипЗнч(Параметры.Кому) = Тип("Массив") Тогда + ИначеЕсли ТипЗнч(ПереданныеПараметры.Кому) = Тип("Массив") Тогда - Для Каждого ЭлементМассива Из Параметры.Кому Цикл + Для Каждого ЭлементМассива Из ПереданныеПараметры.Кому Цикл МассивАдресов = СтрРазделить(ЭлементМассива.Адрес, ";"); @@ -1684,11 +1687,11 @@ ОчиститьДублиАдресатов(Объект.ПолучателиПисьма); - Если НЕ Параметры.УчетнаяЗапись.Пустая() Тогда + Если НЕ ПереданныеПараметры.УчетнаяЗапись.Пустая() Тогда - Объект.УчетнаяЗапись = Параметры.УчетнаяЗапись; + Объект.УчетнаяЗапись = ПереданныеПараметры.УчетнаяЗапись; РеквизитыОтправителя = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( - Параметры.УчетнаяЗапись,"Ссылка, ИмяПользователя, АдресЭлектроннойПочты"); + ПереданныеПараметры.УчетнаяЗапись,"Ссылка, ИмяПользователя, АдресЭлектроннойПочты"); Объект.ОтправительПредставление = ВзаимодействияКлиентСервер.ПолучитьПредставлениеАдресата( РеквизитыОтправителя.ИмяПользователя, РеквизитыОтправителя.АдресЭлектроннойПочты, ""); @@ -1797,9 +1800,9 @@ Процедура УстановитьЗаголовокКнопкиПоУмолчанию() Если Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено Тогда - Элементы.Отправить.Заголовок = Нстр("ru = 'Переслать'"); + Элементы.Отправить.Заголовок = НСтр("ru = 'Переслать'"); ИначеЕсли Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Исходящее Тогда - Элементы.Отправить.Заголовок = Нстр("ru = 'Отправить сейчас'"); + Элементы.Отправить.Заголовок = НСтр("ru = 'Отправить сейчас'"); ИначеЕсли Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик Тогда Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда НастройкиРаботыСПочтой = Взаимодействия.ПолучитьНастройкуРаботаСПочтой(); @@ -1808,7 +1811,7 @@ КонецЕсли; КонецЕсли; - Элементы.Отправить.Заголовок = Нстр("ru = 'Отправить'"); + Элементы.Отправить.Заголовок = НСтр("ru = 'Отправить'"); КонецЕсли; @@ -2484,17 +2487,23 @@ Для Инд = 0 По ДобавляемыйДокумент.Элементы.Количество() -1 Цикл ДобавляемыйЭлемент = ДобавляемыйДокумент.Элементы[Инд]; Если ТипЗнч(ДобавляемыйЭлемент) = Тип("ПараграфФорматированногоДокумента") Тогда - НовыйЭлемент = ПриемникДокумент.Добавить( , Тип("ПереводСтрокиФорматированногоДокумента")); - ДобавитьФорматированныйДокументКФорматированномуДокументу(ПриемникДокумент, ДобавляемыйЭлемент); + НовыйПараграф = ПриемникДокумент.Элементы.Добавить(); + ЗаполнитьЗначенияСвойств(НовыйПараграф, ДобавляемыйЭлемент, "ТипПараграфа, ГоризонтальноеПоложение, МеждустрочныйИнтервал,Отступ"); + ДобавитьФорматированныйДокументКФорматированномуДокументу(НовыйПараграф, ДобавляемыйЭлемент); Иначе Если ТипЗнч(ДобавляемыйЭлемент) = Тип("ТекстФорматированногоДокумента") Тогда - НовыйЭлемент = ПриемникДокумент.Добавить(ДобавляемыйЭлемент.Текст, Тип("ТекстФорматированногоДокумента")); + НовыйЭлемент = ПриемникДокумент.Элементы.Добавить(ДобавляемыйЭлемент.Текст, Тип("ТекстФорматированногоДокумента")); ЗаполнитьЗначенияСвойств(НовыйЭлемент,ДобавляемыйЭлемент,,"ЗакладкаКонца, ЗакладкаНачала, Родитель"); ИначеЕсли ТипЗнч(ДобавляемыйЭлемент) = Тип("КартинкаФорматированногоДокумента") Тогда - НовыйЭлемент = ПриемникДокумент.Добавить(ДобавляемыйЭлемент.Картинка, Тип("КартинкаФорматированногоДокумента")); + НовыйЭлемент = ПриемникДокумент.Элементы.Добавить(ДобавляемыйЭлемент.Картинка, Тип("КартинкаФорматированногоДокумента")); ЗаполнитьЗначенияСвойств(НовыйЭлемент,ДобавляемыйЭлемент,,"ЗакладкаКонца, ЗакладкаНачала, Родитель"); ИначеЕсли ТипЗнч(ДобавляемыйЭлемент) = Тип("ПереводСтрокиФорматированногоДокумента") Тогда - НовыйЭлемент = ПриемникДокумент.Добавить( , Тип("ПереводСтрокиФорматированногоДокумента")); + Если ТипЗнч(ДобавляемыйДокумент) = Тип("ПараграфФорматированногоДокумента") + И (ДобавляемыйДокумент.ТипПараграфа = ТипПараграфа.МаркированныйСписок + Или ДобавляемыйДокумент.ТипПараграфа = ТипПараграфа.НумерованныйСписок) Тогда + Продолжить; + КонецЕсли; + НовыйЭлемент = ПриемникДокумент.Элементы.Добавить( , Тип("ПереводСтрокиФорматированногоДокумента")); КонецЕсли; КонецЕсли КонецЦикла; diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Form.form index d92771633..f82a89d3f 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормированиеВнешнейСсылкиНаОбъект/Form.form @@ -195,7 +195,7 @@ 14 <key>ru</key> - <value>Для получения внутренней ссылки необходимо открыть форму объекта, выполнить комаду "Получить ссылку..."(Ctrl+F11) , полученную ссылку скопировать в буфер и вставить в это поле.</value> + <value>Для получения внутренней ссылки необходимо открыть форму объекта, выполнить команду "Получить ссылку..."(Ctrl+F11) , полученную ссылку скопировать в буфер и вставить в это поле.</value> true true diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl index 114a08224..4cdd029f6 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl @@ -67,9 +67,11 @@ //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. -// Возвращает список реквизитов, которые разрешается редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl index fd597a10e..c7cfb8850 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl @@ -144,7 +144,7 @@ #Область СлужебныеПроцедурыИФункции - + Процедура ЗаполнитьНаОснованииПисьма(Основание, ТипОтвета) diff --git a/SSL/src/Enums/СостоянияСуществованияКонтрагента/СостоянияСуществованияКонтрагента.mdo b/SSL/src/Enums/СостоянияСуществованияКонтрагента/СостоянияСуществованияКонтрагента.mdo index c71618d6c..acfede19f 100644 --- a/SSL/src/Enums/СостоянияСуществованияКонтрагента/СостоянияСуществованияКонтрагента.mdo +++ b/SSL/src/Enums/СостоянияСуществованияКонтрагента/СостоянияСуществованияКонтрагента.mdo @@ -77,4 +77,60 @@ Пустой ИНН или КПП + + НеверныйИНН + + ru + Неверный ИНН + + + + НевернаяДлинаИНН + + ru + Неверная длина ИНН + + + + НевернаяДлинаКПП + + ru + Неверная длина КПП + + + + ИПНеМожетИметьКПП + + ru + ИП не может иметь КПП + + + + НевернаяДата + + ru + Неверная дата (ранее 01.01.1991 или позднее текущей даты) + + + + НедопустимыеСимволыВИНН + + ru + Недопустимые символы в ИНН + + + + НедопустимыеСимволыВКПП + + ru + Недопустимые символы в КПП + + + + НекорректныйФорматДаты + + ru + Некорректный формат даты + + diff --git a/SSL/src/Enums/ТипыПользователей/ТипыПользователей.mdo b/SSL/src/Enums/ТипыПользователей/ТипыПользователей.mdo deleted file mode 100644 index 2cc78df53..000000000 --- a/SSL/src/Enums/ТипыПользователей/ТипыПользователей.mdo +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - ТипыПользователей - - ru - Типы пользователей - - - Use - Order - - Use - - - - - Use - Ref - - Use - - - - true - BothWays - - ВнешнийПользователь - - ru - Внешний пользователь - - - - ПользовательЛокальногоРешения - - ru - Пользователь локального решения - - - - ПользовательОбластиДанных - - ru - Пользователь области данных - - - diff --git a/SSL/src/EventSubscriptions/ВариантыОтчетовПриУдаленииПользователя/ВариантыОтчетовПриУдаленииПользователя.mdo b/SSL/src/EventSubscriptions/ВариантыОтчетовПриУдаленииПользователя/ВариантыОтчетовПриУдаленииПользователя.mdo index ba9fe6413..4dbf45564 100644 --- a/SSL/src/EventSubscriptions/ВариантыОтчетовПриУдаленииПользователя/ВариантыОтчетовПриУдаленииПользователя.mdo +++ b/SSL/src/EventSubscriptions/ВариантыОтчетовПриУдаленииПользователя/ВариантыОтчетовПриУдаленииПользователя.mdo @@ -6,6 +6,7 @@ Варианты отчетов при удалении пользователя + CatalogObject.ВнешниеПользователи CatalogObject.Пользователи OnWrite diff --git a/SSL/src/EventSubscriptions/ЗаписатьВерсиюПриОбменеДанными/ЗаписатьВерсиюПриОбменеДанными.mdo b/SSL/src/EventSubscriptions/ЗаписатьВерсиюПриОбменеДанными/ЗаписатьВерсиюПриОбменеДанными.mdo deleted file mode 100644 index 722ec3d11..000000000 --- a/SSL/src/EventSubscriptions/ЗаписатьВерсиюПриОбменеДанными/ЗаписатьВерсиюПриОбменеДанными.mdo +++ /dev/null @@ -1,20 +0,0 @@ - - - ЗаписатьВерсиюПриОбменеДанными - - ru - Записать версию при обмене данными - - Запись версии объекта при обмене данными - - BusinessProcessObject - ChartOfCalculationTypesObject - ChartOfAccountsObject - ChartOfCharacteristicTypesObject - CatalogObject - TaskObject - DocumentObject - - OnWrite - CommonModule.ВерсионированиеОбъектовСобытия.ЗаписатьВерсиюОбъектаПриОбменеДанными - diff --git a/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo b/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo index 7836b6372..b941f47d0 100644 --- a/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo +++ b/SSL/src/EventSubscriptions/КонтрольНеразделенныхОбъектовПриЗаписи/КонтрольНеразделенныхОбъектовПриЗаписи.mdo @@ -35,6 +35,7 @@ ConstantValueManager.ИзвлекатьТекстыФайловНаСервере ConstantValueManager.ПрофильБезопасностиИнформационнойБазы ConstantValueManager.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском + ConstantValueManager.ЛогинДоступаКСервисуMorpher CatalogObject.СценарииОбменовДанными ConstantValueManager.ИсточникДанныхАдресногоКлассификатора ConstantValueManager.КаталогОбменаФайламиВМоделиСервиса @@ -47,6 +48,7 @@ ConstantValueManager.ИспользуютсяПрофилиБезопасности ConstantValueManager.ЭтоАвтономноеРабочееМесто ConstantValueManager.ИспользоватьДополнительныеОтчетыИОбработки + ConstantValueManager.ИспользоватьСервисСклоненияMorpher ChartOfCharacteristicTypesObject.РазделыДатЗапретаИзменения ConstantValueManager.ОценкаПроизводительностиЭкспортВсехКлючевыхОпераций ConstantValueManager.ВерсияКлассификатораБанковРФ diff --git a/SSL/src/EventSubscriptions/ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента/ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента.mdo b/SSL/src/EventSubscriptions/ПроверитьДатуЗапретаИзмененияПередЗаписьюДокументаЗащитаПерсональныхДанных/ПроверитьДатуЗапретаИзмененияПередЗаписьюДокументаЗащитаПерсональныхДанных.mdo similarity index 61% rename from SSL/src/EventSubscriptions/ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента/ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента.mdo rename to SSL/src/EventSubscriptions/ПроверитьДатуЗапретаИзмененияПередЗаписьюДокументаЗащитаПерсональныхДанных/ПроверитьДатуЗапретаИзмененияПередЗаписьюДокументаЗащитаПерсональныхДанных.mdo index 1176e91db..b09812156 100644 --- a/SSL/src/EventSubscriptions/ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента/ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента.mdo +++ b/SSL/src/EventSubscriptions/ПроверитьДатуЗапретаИзмененияПередЗаписьюДокументаЗащитаПерсональныхДанных/ПроверитьДатуЗапретаИзмененияПередЗаписьюДокументаЗащитаПерсональныхДанных.mdo @@ -1,14 +1,14 @@ - ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента + ПроверитьДатуЗапретаИзмененияПередЗаписьюДокументаЗащитаПерсональныхДанных ru - Проверить дату запрета изменения перед записью документа + Проверить дату запрета изменения перед записью документа защита персональных данных DocumentObject.ОтзывСогласияНаОбработкуПерсональныхДанных DocumentObject.СогласиеНаОбработкуПерсональныхДанных BeforeWrite - CommonModule.ДатыЗапретаИзменения.ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента + CommonModule.ЗащитаПерсональныхДанных.ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента diff --git a/SSL/src/EventSubscriptions/ПроверитьДатуЗапретаИзмененияПередУдалениемЗащитаПерсональныхДанных/ПроверитьДатуЗапретаИзмененияПередУдалениемЗащитаПерсональныхДанных.mdo b/SSL/src/EventSubscriptions/ПроверитьДатуЗапретаИзмененияПередУдалениемЗащитаПерсональныхДанных/ПроверитьДатуЗапретаИзмененияПередУдалениемЗащитаПерсональныхДанных.mdo new file mode 100644 index 000000000..e6e803e5e --- /dev/null +++ b/SSL/src/EventSubscriptions/ПроверитьДатуЗапретаИзмененияПередУдалениемЗащитаПерсональныхДанных/ПроверитьДатуЗапретаИзмененияПередУдалениемЗащитаПерсональныхДанных.mdo @@ -0,0 +1,14 @@ + + + ПроверитьДатуЗапретаИзмененияПередУдалениемЗащитаПерсональныхДанных + + ru + Проверить дату запрета изменения перед удалением защита персональных данных + + + DocumentObject.ОтзывСогласияНаОбработкуПерсональныхДанных + DocumentObject.СогласиеНаОбработкуПерсональныхДанных + + BeforeDelete + CommonModule.ЗащитаПерсональныхДанных.ПроверитьДатуЗапретаИзмененияПередУдалением + diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl b/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl index 4d805e467..973e39cc6 100644 --- a/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl +++ b/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl @@ -409,12 +409,11 @@ //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. -// Возвращает список реквизитов, которые не нужно редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые не рекомендуется редактировать +// с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: -// Массив - Содержит имена реквизитов, запрещенных для редактирования. -// +// Массив - список имен реквизитов объекта. Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ManagerModule.bsl b/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ManagerModule.bsl new file mode 100644 index 000000000..373f4d54c --- /dev/null +++ b/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ManagerModule.bsl @@ -0,0 +1,80 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращает ссылки на узлы с очередью меньшей, чем переданная +// +// Параметры: +// Очередь - Число - очередь обработки данных. +// +// Возвращаемое значение: +// Массив - массив со значениями: +// * ПланОбменаСсылка.ОбновлениеИнформационнойБазы +// +Функция УзлыМеньшейОчереди(Очередь) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОбновлениеИнформационнойБазы.Ссылка КАК Ссылка + |ИЗ + | ПланОбмена.ОбновлениеИнформационнойБазы КАК ОбновлениеИнформационнойБазы + |ГДЕ + | ОбновлениеИнформационнойБазы.Очередь < &Очередь + | И НЕ ОбновлениеИнформационнойБазы.ЭтотУзел + | И ОбновлениеИнформационнойБазы.Очередь <> 0"; + + Запрос.УстановитьПараметр("Очередь", Очередь); + + Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + +КонецФункции + +// Ищет узел плана обмена по очереди и возвращает ссылку на него. +// Если узла еще нет, то он будет создан. +// +// Параметры: +// Очередь - Число - очередь обработки данных. +// +// Возвращаемое значение: +// ПланОбменаСсылка.ОбновлениеИнформационнойБазы. +// +Функция УзелПоОчереди(Очередь) Экспорт + + Если ТипЗнч(Очередь) <> Тип("Число") + Или Очередь = 0 Тогда + ТекстИсключения = НСтр("ru = 'Не возможно получить узел плана обмена ОбновлениеИнформационнойБазы, т.к. не передан номер очереди.'"); + ВызватьИсключение ТекстИсключения; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОбновлениеИнформационнойБазы.Ссылка КАК Ссылка + |ИЗ + | ПланОбмена.ОбновлениеИнформационнойБазы КАК ОбновлениеИнформационнойБазы + |ГДЕ + | ОбновлениеИнформационнойБазы.Очередь = &Очередь + | И НЕ ОбновлениеИнформационнойБазы.ЭтотУзел"; + + Запрос.УстановитьПараметр("Очередь", Очередь); + + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Следующий() Тогда + Узел = Выборка.Ссылка; + Иначе + УзелОбъект = ПланыОбмена.ОбновлениеИнформационнойБазы.СоздатьУзел(); + УзелОбъект.Очередь = Очередь; + УзелОбъект.УстановитьНовыйКод(Строка(Очередь)); + УзелОбъект.Наименование = Строка(Очередь); + УзелОбъект.Записать(); + Узел = УзелОбъект.Ссылка; + КонецЕсли; + + Возврат Узел; +КонецФункции + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo b/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo new file mode 100644 index 000000000..d10e45e87 --- /dev/null +++ b/SSL/src/ExchangePlans/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo @@ -0,0 +1,112 @@ + + + + + + + + + + ОбновлениеИнформационнойБазы + + ru + Обновление информационной базы + + true + ExchangePlan.ОбновлениеИнформационнойБазы.StandardAttribute.Description + ExchangePlan.ОбновлениеИнформационнойБазы.StandardAttribute.Code + DontUse + + Use + ThisNode + + Use + + + + + Use + ReceivedNo + + Use + + + + + Use + SentNo + + Use + + + + + Use + Ref + + Use + + + + + Use + DeletionMark + + Use + + + + + Use + Description + + ShowError + Use + + + + + Use + Code + + ShowError + Use + + + + DontUse + Managed + Use + + ru + Обрабатываемый объект + + + ru + Обрабатываемые объекты + + 9 + Variable + 25 + AsDescription + InDialog + BothWays + + Очередь + + ru + Очередь + + + Number + + 10 + + + + + + Use + Use + + diff --git a/SSL/src/FunctionalOptions/ИспользоватьДатыЗапретаЗагрузки/ИспользоватьДатыЗапретаЗагрузки.mdo b/SSL/src/FunctionalOptions/ИспользоватьДатыЗапретаЗагрузки/ИспользоватьДатыЗапретаЗагрузки.mdo new file mode 100644 index 000000000..9833aaa32 --- /dev/null +++ b/SSL/src/FunctionalOptions/ИспользоватьДатыЗапретаЗагрузки/ИспользоватьДатыЗапретаЗагрузки.mdo @@ -0,0 +1,12 @@ + + + ИспользоватьДатыЗапретаЗагрузки + + ru + Использовать даты запрета загрузки + + Constant.ИспользоватьДатыЗапретаЗагрузки + true + InformationRegister.ДатыЗапретаИзменения.Command.ДатыЗапретаЗагрузкиДанных + Report.ДатыЗапретаЗагрузки + diff --git a/SSL/src/FunctionalOptions/ИспользоватьДатыЗапретаИзменения/ИспользоватьДатыЗапретаИзменения.mdo b/SSL/src/FunctionalOptions/ИспользоватьДатыЗапретаИзменения/ИспользоватьДатыЗапретаИзменения.mdo new file mode 100644 index 000000000..0ab6d37d3 --- /dev/null +++ b/SSL/src/FunctionalOptions/ИспользоватьДатыЗапретаИзменения/ИспользоватьДатыЗапретаИзменения.mdo @@ -0,0 +1,12 @@ + + + ИспользоватьДатыЗапретаИзменения + + ru + Использовать даты запрета изменения + + Constant.ИспользоватьДатыЗапретаИзменения + true + InformationRegister.ДатыЗапретаИзменения.Command.ДатыЗапретаИзмененияДанных + Report.ДатыЗапретаИзменения + diff --git a/SSL/src/FunctionalOptions/ИспользоватьИнтеграцию1СБухфон/ИспользоватьИнтеграцию1СБухфон.mdo b/SSL/src/FunctionalOptions/ИспользоватьИнтеграцию1СБухфон/ИспользоватьИнтеграцию1СБухфон.mdo index 2f59b1189..4794f5259 100644 --- a/SSL/src/FunctionalOptions/ИспользоватьИнтеграцию1СБухфон/ИспользоватьИнтеграцию1СБухфон.mdo +++ b/SSL/src/FunctionalOptions/ИспользоватьИнтеграцию1СБухфон/ИспользоватьИнтеграцию1СБухфон.mdo @@ -3,7 +3,7 @@ ИспользоватьИнтеграцию1СБухфон ru - Использовать интеграцию с 1С-Бухфон + Использовать онлайн-поддержку Constant.ИспользоватьИнтеграцию1СБухфон true diff --git a/SSL/src/FunctionalOptions/ИспользоватьСинхронизациюФайлов/ИспользоватьСинхронизациюФайлов.mdo b/SSL/src/FunctionalOptions/ИспользоватьСинхронизациюФайлов/ИспользоватьСинхронизациюФайлов.mdo new file mode 100644 index 000000000..20b966ca1 --- /dev/null +++ b/SSL/src/FunctionalOptions/ИспользоватьСинхронизациюФайлов/ИспользоватьСинхронизациюФайлов.mdo @@ -0,0 +1,13 @@ + + + ИспользоватьСинхронизациюФайлов + + ru + Использовать синхронизацию файлов + + Constant.СинхронизироватьФайлы + true + InformationRegister.СтатусыСинхронизацииФайловСОблачнымСервисом + Catalog.УчетныеЗаписиСинхронизацииФайлов + InformationRegister.НастройкиСинхронизацииФайлов + diff --git a/SSL/src/FunctionalOptions/ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно/ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно.mdo b/SSL/src/FunctionalOptions/ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно/ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно.mdo new file mode 100644 index 000000000..61cbc0822 --- /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..309592f60 --- /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 index 7e3d6f1aa..c7028ddad 100644 --- a/SSL/src/FunctionalOptions/СтандартныеПодсистемыВЛокальномРежиме/СтандартныеПодсистемыВЛокальномРежиме.mdo +++ b/SSL/src/FunctionalOptions/СтандартныеПодсистемыВЛокальномРежиме/СтандартныеПодсистемыВЛокальномРежиме.mdo @@ -11,10 +11,11 @@ DataProcessor.РезервноеКопированиеИБ DataProcessor.ПоискИУстановкаОбновлений DataProcessor.НастройкаРезервногоКопированияИБ - Catalog.КлассификаторБанковРФ.Command.КлассификаторБанковРФ + Catalog.КлассификаторБанковРФ.Command.ЗагрузкаКлассификатораБанковРФ Report.АнализЖурналаРегистрации DataProcessor.УправлениеИтогамиИАгрегатами DataProcessor.СдвигГраницыИтогов DataProcessor.АвтоматическоеИзвлечениеТекстов DataProcessor.АвтоматическоеИзвлечениеТекстов.Command.АвтоматическоеИзвлечениеТекстов + DataProcessor.ЗагрузкаКурсовВалют diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/АвторизацияНаСайтеПоддержкиПользователей/CommandModule.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Commands/АвторизацияНаСайтеПоддержки/CommandModule.bsl similarity index 100% rename from SSL/src/InformationRegisters/АдресныеОбъекты/Commands/АвторизацияНаСайтеПоддержкиПользователей/CommandModule.bsl rename to SSL/src/InformationRegisters/АдресныеОбъекты/Commands/АвторизацияНаСайтеПоддержки/CommandModule.bsl diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Form.form b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Form.form index 28cf7f3a8..9a73f08ec 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Form.form +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Form.form @@ -175,6 +175,7 @@ Vertical auto + false @@ -313,6 +314,7 @@ Vertical auto + false true diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Module.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Module.bsl index cb73ee419..84eec977c 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/АктуализацияУстаревшегоКлассификатора/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ПараметрыОбработчика, ПодтверждениеЗакрытияФормы; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form index a4f1f7b39..3b96e555c 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Form.form @@ -609,6 +609,7 @@ Left true + 26 true true @@ -619,7 +620,6 @@ Отступ 146 - true true true @@ -826,6 +826,7 @@ true + true ЗагрузитьРасширеннаяПодсказка 11 @@ -955,6 +956,7 @@ Vertical auto + false @@ -1074,7 +1076,7 @@ - Декорация2 + ЗаглушкаОжиданиеЗагрузки 80 true true @@ -1082,7 +1084,7 @@ true - Декорация2РасширеннаяПодсказка + ЗаглушкаОжиданиеЗагрузкиРасширеннаяПодсказка 82 Label true @@ -1092,7 +1094,7 @@ - Декорация2КонтекстноеМеню + ЗаглушкаОжиданиеЗагрузкиКонтекстноеМеню 81 true @@ -1145,7 +1147,7 @@ ГруппаКомандОтмены 76 - Декорация3 + ЗаглушкаОжиданиеЗагрузкиКоманднаяПанель 85 true true @@ -1153,7 +1155,7 @@ true - Декорация3РасширеннаяПодсказка + ЗаглушкаОжиданиеЗагрузкиКоманднаяПанельРасширеннаяПодсказка 87 Label true @@ -1163,7 +1165,7 @@ - Декорация3КонтекстноеМеню + ЗаглушкаОжиданиеЗагрузкиКоманднаяПанельКонтекстноеМеню 86 true @@ -1285,6 +1287,7 @@ Vertical auto + false @@ -1404,7 +1407,7 @@ - Декорация4 + ЗаглушкаУспешноеЗавершение 103 true true @@ -1412,7 +1415,7 @@ true - Декорация4РасширеннаяПодсказка + ЗаглушкаУспешноеЗавершениеРасширеннаяПодсказка 105 Label true @@ -1422,7 +1425,7 @@ - Декорация4КонтекстноеМеню + ЗаглушкаУспешноеЗавершениеКонтекстноеМеню 104 true @@ -1437,37 +1440,6 @@ ГруппаКомандЗавершения 101 - - Декорация5 - 111 - true - true - - true - - - Декорация5РасширеннаяПодсказка - 113 - Label - true - true - - Left - - - - Декорация5КонтекстноеМеню - 112 - true - - Label - true - true - true - - Left - - ГруппаКомандЗавершенияПанель 157 @@ -1534,8 +1506,6 @@ ru Группа команд завершения - true - true ГруппаКомандЗавершенияРасширеннаяПодсказка 102 @@ -1582,6 +1552,194 @@ Vertical auto + false + + + + ОбновлениеКлассификатора + 165 + + ТекстИндексНеНайден + 167 + + <key>ru</key> + <value> +Индекс %1%2 не найден в адресном классификаторе. Возможные причины: + - индекс относится к региону, по которому в программе отсутствуют адресные сведения; + - адресные сведения, загруженные в программу, устарели + - индекс введен некорректно. +</value> + + true + true + + true + + + ТекстИндексНеНайденРасширеннаяПодсказка + 169 + Label + true + true + + Left + + + + ТекстИндексНеНайденКонтекстноеМеню + 168 + true + + Label + true + true + + Left + + + + ЗаглушкаОбновлениеКлассификатора + 174 + true + true + + true + + + ЗаглушкаОбновлениеКлассификатораРасширеннаяПодсказка + 176 + Label + true + true + + Left + + + + ЗаглушкаОбновлениеКлассификатораКонтекстноеМеню + 175 + true + + Label + true + true + true + + Left + + + + КоманднаяПанельОбновление + 170 + + ОбновитьКлассификатор + 172 + true + true + + true + + true + + ОбновитьКлассификаторРасширеннаяПодсказка + 173 + Label + true + true + + Left + + + Form.Command.ОбновитьКлассификатор + Normal + Auto + true + true + UserCmds + Auto + + + ОтменаОбновитьКлассификатор + 177 + true + true + + true + + + ОтменаОбновитьКлассификаторРасширеннаяПодсказка + 178 + Label + true + true + + Left + + + Form.Command.Отмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель обновление</value> + + + ru + Командная панель обновление + + + КоманднаяПанельОбновлениеРасширеннаяПодсказка + 171 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Обновление классификатора</value> + + + ru + Обновление классификатора + + + ОбновлениеКлассификатораРасширеннаяПодсказка + 166 + Label + true + true + + Left + + + Page + + Vertical + auto + false true @@ -1899,10 +2057,10 @@ - КоличествоОбновлений + ОставшиесяКоличествоПопытокПолучитьОбновление <key>ru</key> - <value>Количество обновлений</value> + <value>Оставшиеся количество попыток получить обновление</value> 11 @@ -1952,16 +2110,16 @@ - АдресВоВременномХранилище + РежимРаботы <key>ru</key> - <value>Адрес во временном хранилище</value> + <value>Режим работы</value> 14 String - 100 + 30 @@ -1971,13 +2129,28 @@ true + + ДоступныеВерсии + + <key>ru</key> + <value>Доступные версии</value> + + 15 + + + true + + + true + + ИдентификаторЗадания <key>ru</key> <value>Идентификатор задания</value> - 15 + 16 UUID @@ -1989,12 +2162,30 @@ - ОставшиесяКоличествоПопытокПолучитьОбновление + АдресВоВременномХранилище <key>ru</key> - <value>Оставшиеся количество попыток получить обновление</value> + <value>Адрес во временном хранилище</value> - 16 + 17 + + String + + + + true + + + true + + + + НомерПопыткиПолучитьОбновление + + <key>ru</key> + <value>Номер попытки получить обновление</value> + + 18 Number @@ -2142,6 +2333,28 @@ DontUse Auto + + ОбновитьКлассификатор + + <key>ru</key> + <value>Обновить классификатор</value> + + 7 + + ru + Обновить классификатор + + + true + + + + ОбновитьКлассификатор + + + DontUse + Auto + diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Help/ru.html b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Help/ru.html index fb5eb7aaa..f766ba1df 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Help/ru.html +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

                          @@ -8,7 +8,7 @@
                        • С помощью переключателя выберите Вариант загрузки:
                          • С веб-сайта 1С;
                            • Для загрузки необходимо заполнить данные для авторизации на сайте поддержки пользователей. Для этого перейдите по ссылке Ввести логин и пароль.
                          • Из папки на диске. -
                            •  укажите путь к папке (также можно нажать клавишу F4);
                        • После указания всех параметров нажмите Загрузить. +
                          •  укажите путь к папке (также можно нажать клавишу F4);
                      • После указания всех параметров нажмите Загрузить адресные сведения.
                      • Во время загрузки программой выводится сообщение о состоянии загрузки:
                        • количество загружаемых регионов;
                        • источник загрузки; diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl index e29704bf0..5d75d8799 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl @@ -11,6 +11,8 @@ // загрузить обновленные. // +#Область ОписаниеПеременных + &НаКлиенте Перем ПодтверждениеЗакрытияФормы; @@ -18,6 +20,8 @@ &НаКлиенте Перем ПараметрыФоновойЗагрузкиКлассификатора; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -30,13 +34,14 @@ ПараметрыДлительнойОперации = Новый Структура("Завершено, АдресРезультата, Идентификатор, Ошибка, ПодробноеПредставлениеОшибки"); ПараметрыДлительнойОперации.Вставить("ИнтервалОжидания", 5); - ОставшиесяКоличествоПопытокПолучитьОбновление = 20; ЗаполнитьЗначенияСвойств(ДоступныеИсточникиЗагрузки.Добавить(), Элементы.ДоступныеИсточникиЗагрузки.СписокВыбора[0]); ЗаполнитьЗначенияСвойств(ДоступныеИсточникиЗагрузки.Добавить(), Элементы.ДоступныеИсточникиЗагрузки.СписокВыбора[1]); // Умолчание, возможно будет перекрыто при восстановлении настроек. КодИсточникаЗагрузки = "КАТАЛОГ"; + ОставшиесяКоличествоПопытокПолучитьОбновление = 20; + ИдентификаторыДляОбновления = Новый Массив; // Получаем уже загруженные регионы. ТаблицаРегионов = АдресныйКлассификаторСлужебный.СведенияОЗагрузкеСубъектовРФ(); @@ -46,18 +51,43 @@ Регион.Представление = " " + Формат(Регион.КодСубъектаРФ, "ЧЦ=2; ЧН=; ЧВН=; ЧГ=") + ", " + Регион.Представление; КонецЦикла; - ТекущийКодРегиона = Неопределено; - Параметры.Свойство("КодРегионаДляЗагрузки", ТекущийКодРегиона); - - // Анализируем варианты работы - нас могли вызвать для проверки обновления. - ИдентификаторыДляОбновления = Новый Массив; - ТаблицаРегионов.ЗагрузитьКолонку(ТаблицаРегионов.ВыгрузитьКолонку("Загружено"), "Загружать"); + Если Параметры.Свойство("ВыборАдресаПоПочтовомуИндексу") Тогда + РежимРаботы = "ОБНОВЛЕНИЕ"; + ПочтовыйИндекс = Параметры.Индекс; + СведенияОРегионе = АдресныйКлассификаторСлужебный.ОпределитьРегионПоИндексу(ПочтовыйИндекс); + Если СведенияОРегионе <> Неопределено Тогда + ПредставлениеРегиона = " (" + СведенияОРегионе.Представление + ")"; + ТекущийКодРегиона = СведенияОРегионе.КодСубъектаРФ; + КонецЕсли; + Элементы.ТекстИндексНеНайден.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ТекстИндексНеНайден.Заголовок, ПочтовыйИндекс, ПредставлениеРегиона); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Индекс %1 не найден'"), ПочтовыйИндекс); + Элементы.ОбновитьКлассификатор.КнопкаПоУмолчанию = Истина; + Элементы.ШагиЗагрузки.ТекущаяСтраница = Элементы.ОбновлениеКлассификатора; + Иначе + ТаблицаРегионов.ЗагрузитьКолонку(ТаблицаРегионов.ВыгрузитьКолонку("Загружено"), "Загружать"); + РежимРаботы = "ЗАГРУЗКА"; + ТекущийКодРегиона = Неопределено; + Параметры.Свойство("КодРегионаДляЗагрузки", ТекущийКодРегиона); + АдресВоВременномХранилище = Неопределено; + ПроверитьДоступностьОбновления(); + КонецЕсли; // Добавляем пометку для загружаемого региона-параметра и ставим его текущей строкой. ТипТекущегоКодаРегиона = ТипЗнч(ТекущийКодРегиона); ТипЧисло = Новый ОписаниеТипов("Число"); - Если ТипТекущегоКодаРегиона = Тип("Массив") И ТекущийКодРегиона.Количество() > 0 Тогда + Если ИдентификаторыДляОбновления.Количество() > 0 Тогда + // Обновление строго указанных. + Фильтр = Новый Структура("Идентификатор"); + Для Каждого Идентификатор Из ИдентификаторыДляОбновления Цикл + Фильтр.Идентификатор = Идентификатор; + Кандидаты = ТаблицаРегионов.НайтиСтроки(Фильтр); + Если Кандидаты.Количество() > 0 Тогда + Кандидаты[0].Загружать = Истина; + КонецЕсли; + КонецЦикла; + + ИначеЕсли ТипТекущегоКодаРегиона = Тип("Массив") И ТекущийКодРегиона.Количество() > 0 Тогда // Указан массив для загрузки Фильтр = Новый Структура("КодСубъектаРФ"); Для Каждого КодРегиона Из ТекущийКодРегиона Цикл @@ -76,42 +106,41 @@ ИначеЕсли Параметры.Свойство("НазваниеРегионаДляЗагрузки") Тогда // Как наименование ТекущийКодРегиона = АдресныйКлассификатор.КодРегионаПоНаименованию(Параметры.НазваниеРегионаДляЗагрузки); - КонецЕсли; ЗначениеВРеквизитФормы(ТаблицаРегионов, "СубъектыРФ"); - // Установка текущей строки по коду. Если ТекущийКодРегиона <> Неопределено Тогда - Кандидаты = СубъектыРФ.НайтиСтроки(Новый Структура("КодСубъектаРФ", ТекущийКодРегиона)); + Кандидаты = СубъектыРФ.НайтиСтроки(Новый Структура("КодСубъектаРФ", ТекущийКодРегиона)); Если Кандидаты.Количество() > 0 Тогда ТекущаяСтрока = Кандидаты[0]; ТекущаяСтрока.Загружать = Истина; Элементы.СубъектыРФ.ТекущаяСтрока = ТекущаяСтрока.ПолучитьИдентификатор(); КонецЕсли; КонецЕсли; - - // Если не установили текущую строку по параметру, то пытаемся поставить ее на первый отмеченный. - Если Элементы.СубъектыРФ.ТекущаяСтрока = Неопределено Тогда - Кандидаты = СубъектыРФ.НайтиСтроки(Новый Структура("Загружать", Истина)); - Если Кандидаты.Количество() > 0 Тогда - Элементы.СубъектыРФ.ТекущаяСтрока = Кандидаты[0].ПолучитьИдентификатор(); + + Если РежимРаботы = "ЗАГРУЗКА" Тогда + // Если не установили текущую строку по параметру, то пытаемся поставить ее на первый отмеченный. + Если Элементы.СубъектыРФ.ТекущаяСтрока = Неопределено Тогда + Кандидаты = СубъектыРФ.НайтиСтроки(Новый Структура("Загружать", Истина)); + Если Кандидаты.Количество() > 0 Тогда + Элементы.СубъектыРФ.ТекущаяСтрока = Кандидаты[0].ПолучитьИдентификатор(); + КонецЕсли; КонецЕсли; + + // Зависимости от интерфейса + Если ТекущийВариантИнтерфейсаКлиентскогоПриложения() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда + Элементы.АдресЗагрузки.КартинкаКнопкиВыбора = Новый Картинка; + КонецЕсли; + + Аутентификация = СохраненныеДанныеАутентификацииСайта(); + Элементы.АвторизацияНаСайтеПоддержкиПользователей.Видимость = ПустаяСтрока(Аутентификация.Пароль); + Элементы.ИнформацияОбОбновление.Видимость = НЕ Элементы.АвторизацияНаСайтеПоддержкиПользователей.Видимость; + + // Автосохранение настроек + СохраняемыеВНастройкахДанныеМодифицированы = Истина; КонецЕсли; - - // Зависимости от интерфейса - Если ТекущийВариантИнтерфейсаКлиентскогоПриложения() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда - Элементы.АдресЗагрузки.КартинкаКнопкиВыбора = Новый Картинка; - КонецЕсли; - - Аутентификация = СохраненныеДанныеАутентификацииСайта(); - Элементы.АвторизацияНаСайтеПоддержкиПользователей.Видимость = ПустаяСтрока(Аутентификация.Пароль); - Элементы.ИнформацияОбОбновление.Видимость = НЕ Элементы.АвторизацияНаСайтеПоддержкиПользователей.Видимость; - ПроверитьДоступностьОбновления(); - - // Автосохранение настроек - СохраняемыеВНастройкахДанныеМодифицированы = Истина; КонецПроцедуры &НаСервере @@ -140,6 +169,7 @@ УстановитьДоступностьИсточниковЗагрузки(); ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 0.5, Истина); + КонецПроцедуры &НаКлиенте @@ -252,7 +282,7 @@ Иначе ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Не указан вариант загрузки классификатора.'") ); КонецЕсли; - + КонецПроцедуры &НаКлиенте @@ -291,6 +321,19 @@ КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьКлассификатор(Команда) + + Если КодИсточникаЗагрузки = "САЙТ" Тогда + ЗагрузитьКлассификаторССайта(Аутентификация); + Элементы.ШагиЗагрузки.ТекущаяСтраница = Элементы.ОжиданиеЗагрузки; + Иначе + Элементы.ШагиЗагрузки.ТекущаяСтраница = Элементы.ВыборРегионовЗагрузки; + КонецЕсли; + +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -298,13 +341,13 @@ &НаКлиенте Процедура Подключаемый_ПроверитьВыполнениеЗадания() - ОставшиесяКоличествоПопытокПолучитьОбновление = ОставшиесяКоличествоПопытокПолучитьОбновление - 1; + ОставшиесяКоличествоПопытокПолучитьОбновление = ОставшиесяКоличествоПопытокПолучитьОбновление - 1; Если ОставшиесяКоличествоПопытокПолучитьОбновление > 0 Тогда Если Не ПустаяСтрока(АдресВоВременномХранилище) Тогда Если ЗаданиеВыполнено(ИдентификаторЗадания) Тогда ОбновитьДоступностьОбновления(); Иначе - ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 2, Истина); + ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1.5, Истина); КонецЕсли; КонецЕсли; КонецЕсли; @@ -395,7 +438,7 @@ Процедура ОбновитьИнтерфейсПоКоличествуЗагружаемых() // Страница выбора - ВыбраноРегионовДляЗагрузки = СубъектыРФ.НайтиСтроки( Новый Структура("Загружать", Истина) ).Количество(); + ВыбраноРегионовДляЗагрузки = СубъектыРФ.НайтиСтроки(Новый Структура("Загружать", Истина) ).Количество(); // Страница загрузки ТекстОписанияЗагрузки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Загружаются данные по выбранным регионам (%1)'"), ВыбраноРегионовДляЗагрузки); @@ -523,21 +566,15 @@ Исключение Информация = ИнформацияОбОшибке(); КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(Информация); - Если СтрНайти(КраткоеПредставлениеОшибки , "404 Not Found") > 0 ИЛИ СтрНайти(КраткоеПредставлениеОшибки , "401 Unauthorized") > 0 Тогда - ТекстОшибки = НСтр("ru = 'Не удается загрузить адресные сведения.'"); - ТекстОшибки = ТекстОшибки + НСтр("ru = 'Возможные причины:'") + Символы.ПС; - ТекстОшибки = ТекстОшибки + НСтр("ru = '• Некорректно введен или не введен логин и пароль;'") + Символы.ПС; - ТекстОшибки = ТекстОшибки + НСтр("ru = '• Нет подключения к Интернету;'") + Символы.ПС; - ТекстОшибки = ТекстОшибки + НСтр("ru = '• На сайте ведутся технические работы. Попробуйте повторить загрузку позднее.'") + Символы.ПС; - ТекстОшибки = ТекстОшибки + НСтр("ru = '• Брандмауэр или другое промежуточное ПО (антивирусы и т.п.) блокируют попытки программы подключиться к Интернету;'") + Символы.ПС; - ТекстОшибки = ТекстОшибки + НСтр("ru = '• Подключение к Интернету выполняется через прокси-сервер, но его параметры не заданы в программе.'") + Символы.ПС; - ТекстОшибки = ТекстОшибки + НСтр("ru = 'Техническая информация:'") + " " + Символы.ПС; - ТекстОшибки = ТекстОшибки + СтрПолучитьСтроку(КраткоеПредставлениеОшибки(Информация), 1); - Иначе - ТекстОшибки = НСтр("ru = 'Вероятно в данный момент на сайте ведутся технические работы. Попробуйте повторить загрузку позднее.'") + Символы.ПС; - ТекстОшибки = ТекстОшибки + НСтр("ru = 'Техническая информация:'") + " " + Символы.ПС; - ТекстОшибки = ТекстОшибки + КраткоеПредставлениеОшибки(Информация); - КонецЕсли; + ТекстОшибки = НСтр("ru = 'Не удается загрузить адресные сведения.'"); + ТекстОшибки = ТекстОшибки + НСтр("ru = 'Возможные причины:'") + Символы.ПС; + ТекстОшибки = ТекстОшибки + НСтр("ru = '• Некорректно введен или не введен логин и пароль;'") + Символы.ПС; + ТекстОшибки = ТекстОшибки + НСтр("ru = '• Нет подключения к Интернету;'") + Символы.ПС; + ТекстОшибки = ТекстОшибки + НСтр("ru = '• На сайте ведутся технические работы. Попробуйте повторить загрузку позднее.'") + Символы.ПС; + ТекстОшибки = ТекстОшибки + НСтр("ru = '• Брандмауэр или другое промежуточное ПО (антивирусы и т.п.) блокируют попытки программы подключиться к Интернету;'") + Символы.ПС; + ТекстОшибки = ТекстОшибки + НСтр("ru = '• Подключение к Интернету выполняется через прокси-сервер, но его параметры не заданы в программе.'") + Символы.ПС; + ТекстОшибки = ТекстОшибки + НСтр("ru = 'Техническая информация:'") + " " + Символы.ПС; + ТекстОшибки = ТекстОшибки + СтрПолучитьСтроку(КраткоеПредставлениеОшибки(Информация), 1); ПараметрыДлительнойОперации.Ошибка = ТекстОшибки; ПараметрыДлительнойОперации.ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(Информация); Элементы.АвторизацияНаСайтеПоддержкиПользователей.Видимость = Истина; @@ -549,6 +586,7 @@ ПараметрыДлительнойОперации.Завершено = РезультатЗапуска.ЗаданиеВыполнено; ПараметрыДлительнойОперации.АдресРезультата = РезультатЗапуска.АдресХранилища; + // Запущенное Элементы.ПрерватьЗагрузку.Доступность = Истина; КонецПроцедуры @@ -614,7 +652,7 @@ Файл = Новый Файл(); Файл.НачатьИнициализацию(ОписаниеОповещения, Описание.Имя); - Иначе + Иначе // выход из цикла // Запуск фонового по загрузке из переданных файлов. Если ЭтоАдресВременногоХранилища(ПараметрыДлительнойОперации.АдресРезультата) Тогда @@ -665,9 +703,9 @@ ДанныеФайла.Вставить("Хранение", ПолучитьИзВременногоХранилища(Описание.Хранение)); ОписаниеФайлов.Добавить(ДанныеФайла); + КонецЦикла; - ПараметрыМетода.Добавить(ОписаниеФайлов); - + ПараметрыМетода.Добавить(Неопределено); // ОписаниеФайлов ПараметрыМетода.Добавить(Режим); ПараметрыДлительнойОперации.Идентификатор = Неопределено; @@ -675,6 +713,16 @@ ПараметрыДлительнойОперации.АдресРезультата = Неопределено; ПараметрыДлительнойОперации.Ошибка = Неопределено; + ХранилищеПараметров = Константы.ПараметрыАдресногоКлассификатора.Получить(); + ПараметрыАдресногоКлассификатора = ХранилищеПараметров.Получить(); + Если ПараметрыАдресногоКлассификатора = Неопределено Тогда + ХранилищеПараметров = Новый ХранилищеЗначения(Новый Структура("ОписаниеФайлов", ОписаниеФайлов)); + Иначе + ПараметрыАдресногоКлассификатора.Вставить("ОписаниеФайлов", ОписаниеФайлов); + ХранилищеПараметров = Новый ХранилищеЗначения(ПараметрыАдресногоКлассификатора); + КонецЕсли; + Константы.ПараметрыАдресногоКлассификатора.Установить(ХранилищеПараметров); + Попытка РезультатЗапуска = ДлительныеОперации.ЗапуститьВыполнениеВФоне(УникальныйИдентификатор, "АдресныйКлассификаторСлужебный.ФоновоеЗаданиеЗагрузкиКлассификатораАдресов", @@ -692,6 +740,7 @@ ПараметрыДлительнойОперации.Завершено = РезультатЗапуска.ЗаданиеВыполнено; ПараметрыДлительнойОперации.АдресРезультата = РезультатЗапуска.АдресХранилища; + // Запущенное Элементы.ПрерватьЗагрузку.Доступность = Истина; КонецПроцедуры @@ -745,16 +794,20 @@ Возврат; ИначеЕсли Состояние.Завершено Тогда - Элементы.ШагиЗагрузки.ТекущаяСтраница = Элементы.УспешноеЗавершение; - ТекстОписанияЗагрузки = НСтр("ru = 'Адресный классификатор успешно загружен.'"); - Оповестить("ЗагруженАдресныйКлассификатор", , ЭтотОбъект); - - Элементы.Закрыть.КнопкаПоУмолчанию = Истина; - ТекущийЭлемент = Элементы.Закрыть; - ПодтверждениеЗакрытияФормы = Истина; // Для сброса признака АдресныйКлассификаторУстарел в параметрах работы клиента. ОбновитьПовторноИспользуемыеЗначения(); + ПодтверждениеЗакрытияФормы = Истина; + + Если РежимРаботы = "ОБНОВЛЕНИЕ" Тогда + Закрыть(Истина); + КонецЕсли; + + Элементы.ШагиЗагрузки.ТекущаяСтраница = Элементы.УспешноеЗавершение; + ТекстОписанияЗагрузки = НСтр("ru = 'Адресный классификатор успешно загружен.'"); + Элементы.Закрыть.КнопкаПоУмолчанию = Истина; + ТекущийЭлемент = Элементы.Закрыть; + Если ЕстьУстаревшиеАдресныеСведенияКЛАДРДляУдаления() Тогда ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВопросаОбУдалениеКЛАДР", ЭтотОбъект); ТекстВопроса = НСтр("ru = 'Найдены устаревшие сведения о регионах в формате КЛАДР, которые не используются в программе.'"); @@ -821,21 +874,6 @@ КонецПроцедуры -&НаСервереБезКонтекста -Функция ЕстьУстаревшиеАдресныеСведенияКЛАДРДляУдаления() - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | УдалитьАдресныйКлассификатор.Код - |ИЗ - | РегистрСведений.УдалитьАдресныйКлассификатор КАК УдалитьАдресныйКлассификатор"; - - РезультатЗапроса = Запрос.Выполнить().Выбрать(); - Если РезультатЗапроса .Следующий() Тогда - Возврат Истина; - КонецЕсли; - Возврат Ложь; -КонецФункции - &НаСервере Процедура ПроверитьДоступностьОбновления(Знач РезультатПроверки = Неопределено) @@ -867,12 +905,41 @@ ИнформацияОбновление = ПолучитьИзВременногоХранилища(АдресВоВременномХранилище); АдресВоВременномХранилище = ""; ИдентификаторЗадания = ""; + Элементы.ИнформацияОбОбновление.Видимость = Ложь; - Если ЗначениеЗаполнено(ИнформацияОбновление) Тогда - ОставшиесяКоличествоПопытокПолучитьОбновление = 0; - ДатаОбновления = Формат(ИнформацияОбновление.Таблица[0].ДатаОбновления, "ДЛФ=DD"); - ИнформацияОбОбновление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Доступно обновление от %1'"), ДатаОбновления); - Элементы.ИнформацияОбОбновление.Видимость = НЕ ИнформацияОбновление.Отказ; + Если ЗначениеЗаполнено(ИнформацияОбновление) + И ИнформацияОбновление.Свойство("Таблица") + И ИнформацияОбновление.Таблица.Количество() > 0 Тогда + ОставшиесяКоличествоПопытокПолучитьОбновление = 0; + ДатаОбновления = ИнформацияОбновление.Таблица[0].ДатаОбновления; + Если ТипЗнч(ДатаОбновления) <> Тип("Дата") Тогда + Возврат Ложь; + КонецЕсли; + ДатаОбновления = НачалоДня(ДатаОбновления); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ВЫБОР + | КОГДА НАЧАЛОПЕРИОДА(МИНИМУМ(ЗагруженныеВерсииАдресныхСведений.ДатаВерсии), ДЕНЬ) ЕСТЬ NULL + | ТОГДА ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) + | ИНАЧЕ НАЧАЛОПЕРИОДА(МИНИМУМ(ЗагруженныеВерсииАдресныхСведений.ДатаВерсии), ДЕНЬ) + | КОНЕЦ КАК ДатаВерсии + |ИЗ + | РегистрСведений.ЗагруженныеВерсииАдресныхСведений КАК ЗагруженныеВерсииАдресныхСведений"; + + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + Если РезультатЗапроса.Следующий() Тогда + ДатаСамойСтаройЗагрузки = РезультатЗапроса.ДатаВерсии; + Иначе + ДатаСамойСтаройЗагрузки = Дата(1, 1, 1); + КонецЕсли; + + Если ДатаОбновления > ДатаСамойСтаройЗагрузки Тогда + ДатаОбновленияСтрокой = Формат(ИнформацияОбновление.Таблица[0].ДатаОбновления, "ДЛФ=DD"); + ИнформацияОбОбновление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Доступно обновление от %1'"), ДатаОбновленияСтрокой); + Элементы.ИнформацияОбОбновление.Видимость = НЕ ИнформацияОбновление.Отказ; + КонецЕсли; КонецЕсли; КонецФункции @@ -890,6 +957,22 @@ КонецФункции + +&НаСервереБезКонтекста +Функция ЕстьУстаревшиеАдресныеСведенияКЛАДРДляУдаления() + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 + | УдалитьАдресныйКлассификатор.Код + |ИЗ + | РегистрСведений.УдалитьАдресныйКлассификатор КАК УдалитьАдресныйКлассификатор"; + + РезультатЗапроса = Запрос.Выполнить().Выбрать(); + Если РезультатЗапроса .Следующий() Тогда + Возврат Истина; + КонецЕсли; + Возврат Ложь; +КонецФункции + // Удаляет устаревшие данные КЛАДР если они есть. // &НаСервере @@ -912,5 +995,4 @@ КонецПопытки; КонецПроцедуры - #КонецОбласти diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Form.form b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Form.form index 6be388798..7ef09f783 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Form.form +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Form.form @@ -557,6 +557,7 @@ Vertical auto + false @@ -887,6 +888,7 @@ Vertical auto + false @@ -1179,6 +1181,7 @@ Vertical auto + false true diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Help/ru.html b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Help/ru.html index 75a00ef38..754bfe28c 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Help/ru.html +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Help/ru.html @@ -1,7 +1,8 @@ - +

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

                          -

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

                          +

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

                          +

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

                          • Включите флажки рядом с наименованиями нужных регионов.
                          • Для того чтобы выбрать для очистки все регионы, нажмите , для того чтобы отменить выбор, нажмите .
                          • Для поиска регионов в списке используйте кнопку Найти. В нижней части списка идет подсчет количества выбранных регионов. -
                          • После установки необходимых параметров нажмите Очистить.
                          \ No newline at end of file +
                        • После установки необходимых параметров нажмите Очистить адресные сведения.
                        \ No newline at end of file diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Module.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Module.bsl index 498537a9b..122b5fca2 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Forms/ОчисткаАдресногоКлассификатора/Module.bsl @@ -1,3 +1,5 @@ +#Область ОписаниеПеременных + // Флаг подтверждения, используется при закрытии. &НаКлиенте Перем ПодтверждениеЗакрытияФормы; @@ -6,6 +8,8 @@ &НаКлиенте Перем ПараметрыФоновойОчисткиКлассификатора; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/ManagerModule.bsl b/SSL/src/InformationRegisters/АдресныеОбъекты/ManagerModule.bsl index 2fe539890..fc8d60fdc 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/ManagerModule.bsl @@ -89,6 +89,27 @@ КонецФункции +// Возвращает информацию о адресных сокращениях. +// +// Возвращаемое значение: +// ТаблицаЗначений - поставляемые данные. Колонки: +// * Уровень - Число - Уровень сокращения. +// * Наименование - Строка - Полное наименование адресного объекта. +// * Сокращение - Строка - Сокращенное наименование адресного объекта. +// +Функция АдресныеСокращения() Экспорт + + Макет = РегистрыСведений.АдресныеОбъекты.ПолучитьМакет("АдресныеСокращения"); + + Чтение = Новый ЧтениеXML; + Чтение.УстановитьСтроку(Макет.ПолучитьТекст()); + Результат = СериализаторXDTO.ПрочитатьXML(Чтение); + + Возврат Результат; + +КонецФункции + + #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Templates/АдресныеСокращения/Template.txt b/SSL/src/InformationRegisters/АдресныеОбъекты/Templates/АдресныеСокращения/Template.txt new file mode 100644 index 000000000..9f5d6f385 --- /dev/null +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Templates/АдресныеСокращения/Template.txt @@ -0,0 +1,295 @@ + + + + Уровень + + xs:decimal + + + + + Наименование + + xs:string + + 120 + Variable + + + + + + Сокращение + + xs:string + + 10 + Variable + + + + + Уровень + Наименование + Сокращение + + 1Областьобл + 1Крайкрай + 1Городг + 1Автономная областьАобл + 1Автономный округАО + 1Чувашия Чувашия + 1Округокруг + 1РеспубликаРесп + 2Автономный округАО + 3Автономный округАО + 3Поселениеп + 3Районр-н + 3Территориятер + 3Улусу + 4Территориятер + 4Сельсоветс/с + 4Сельское поселениес/п + 4Сельский округс/о + 4Волостьволость + 4Городг + 4Дачный поселокдп + 4Курортный поселоккп + 4Массивмассив + 4Поселокп + 4Почтовое отделениеп/о + 4Сельское муницип.образованиес/мо + 4Сельская администрацияс/а + 4Рабочий поселокрп + 4Поселок городского типапгт + 5Районр-н + 5Территориятер + 6Железнодорожная станцияж/д_ст + 6Жилая зонажилзона + 6Жилой районжилрайон + 6Заимказаимка + 6Казармаказарма + 6Почтовое отделениеп/о + 6Кварталкв-л + 6Кордонкордон + 6Курортный поселоккп + 6Леспромхозлпх + 6Местечком + 6Массивмассив + 6Микрорайонмкр + 6Населенный пунктнп + 6Островостров + 6Поселокп + 6Аалаал + 6Автодорогаавтодорога + 6Арбанарбан + 6Аулаул + 6Волостьволость + 6Выселки(ок)высел + 6Городг + 6Городокгородок + 6Городской поселокгп + 6Деревняд + 6Дачный поселокдп + 6Железнодорожная будкаж/д_будка + 6Железнодорожная казармаж/д_казарм + 6Ж/д останов. (обгонный) пунктж/д_оп + 6Железнодорожная платформаж/д_платф + 6Железнодорожный постж/д_пост + 6Железнодорожный разъездж/д_рзд + 6Хуторх + 6Улусу + 6Территориятер + 6Станицаст-ца + 6Станцияст + 6Садовое неком-е товариществоснт + 6Слободасл + 6Селос + 6Рабочий поселокрп + 6Разъездрзд + 6Промышленная зонапромзона + 6Починокпочинок + 6Погостпогост + 6Поселок городского типапгт + 6Поселок и(при) станция(и)п/ст + 6Планировочный районп/р + 7Территориятер + 7Строениестр + 7Станцияст + 7Спускспуск + 7Садовое неком-е товариществоснт + 7Слободасл + 7Скверсквер + 7Садсад + 7Селос + 7Рядыряды + 7тоннельтоннель + 7Тракттракт + 7Тупиктуп + 7Улицаул + 7Участокуч-к + 7Фермерскоеф/х + 7Фермаферма + 7Хуторх + 7Шоссеш + 7Эстакадаэстакада + 7Почтовое отделениеп/о + 7Планировочный районп/р + 7Поселок и(при) станция(и)п/ст + 7Паркпарк + 7Переулокпер + 7Переездпереезд + 7Площадьпл + 7Платформаплатф + 7Площадкапл-ка + 7Полустанокполустанок + 7Починокпочинок + 7Причалпричал + 7Проспектпр-кт + 7Проездпроезд + 7Просекпросек + 7Просекапросека + 7Проселокпроселок + 7Протокпроток + 7Протокапротока + 7Проулокпроулок + 7Разъездрзд + 7Железнодорожный постж/д_пост + 7Железнодорожный разъездж/д_рзд + 7Железнодорожная станцияж/д_ст + 7Животноводческая точкажт + 7Заездзаезд + 7Зоназона + 7Казармаказарма + 7Каналканал + 7Кварталкв-л + 7Километркм + 7Кольцокольцо + 7Косакоса + 7Линиялиния + 7Леспромхозлпх + 7Местечком + 7Маякмаяк + 7Местностьместность + 7Микрорайонмкр + 7Мостмост + 7Мысмыс + 7Некоммерчен/п + 7Набережнаянаб + 7Населенный пунктнп + 7Островостров + 7Поселокп + 7Абонентский ящика/я + 7Аалаал + 7Аллеяаллея + 7Арбанарбан + 7Аулаул + 7Балкабалка + 7Берегберег + 7Бульварб-р + 7Бугорбугор + 7Бухтабухта + 7Валвал + 7Въездвъезд + 7Выселки(ок)высел + 7Горкагорка + 7Городокгородок + 7Гаражно-строит-ный кооперативгск + 7Деревняд + 7Дачное некднп + 7Дорогадор + 7Железнодорожная будкаж/д_будка + 7Железнодорожная казармаж/д_казарм + 7Ж/д останов. (обгонный) пунктж/д_оп + 7Железнодорожная платформаж/д_платф + 8ДомДОМ + 65Некоммерческое партнерствон/п + 65Дачное некоммерческое партнерстводнп + 90Фермерское хозяйствоф/х + 90Территориятер + 90Садовое товариществоснт + 90Садсад + 90Промышленная зонапромзона + 90Некоммерческое партнерствон/п + 90Микрорайонмкр + 90Местностьместность + 90Дачное некоммерческое партнерстводнп + 90Гаражно-строительный кооперативгск + 91Протокапротока + 91Протокпроток + 91Проселокпроселок + 91Просекапросека + 91Просекпросек + 91Проездпроезд + 91Проспектпр-кт + 91Починокпочинок + 91Полустанокполустанок + 91Площадкапл-ка + 91Платформаплатф + 91Площадьпл + 91Переездпереезд + 91Переулокпер + 91Паркпарк + 91Поселок и(при) станция(и)п/ст + 91Планировочный районп/р + 91Почтовое отделениеп/о + 91Поселокп + 91Шоссеш + 91Хуторх + 91Фермаферма + 91Участокуч-к + 91Улицаул + 91Тупиктуп + 91Тракттракт + 91Территориятер + 91Строениестр + 91Станцияст + 91Спускспуск + 91Садовое неком-е товариществоснт + 91Слободасл + 91Скверсквер + 91Садсад + 91Селос + 91Рядыряды + 91Разъездрзд + 91Проулокпроулок + 91Железнодорожная платформаж/д_платф + 91Ж/д останов. (обгонный) пунктж/д_оп + 91Железнодорожная казармаж/д_казарм + 91Железнодорожная будкаж/д_будка + 91Дорогадор + 91Деревняд + 91Гаражно-строит-ный кооперативгск + 91Городокгородок + 91Выселки(ок)высел + 91Въездвъезд + 91Валвал + 91Бугорбугор + 91Бульварб-р + 91Берегберег + 91Аулаул + 91Арбанарбан + 91Аллеяаллея + 91Аалаал + 91Абонентский ящика/я + 91Островостров + 91Населенный пунктнп + 91Набережнаянаб + 91Мостмост + 91Микрорайонмкр + 91Местечком + 91Леспромхозлпх + 91Линиялиния + 91Косакоса + 91Кольцокольцо + 91Километркм + 91Кварталкв-л + 91Каналканал + 91Казармаказарма + 91Зоназона + 91Заездзаезд + 91Животноводческая точкажт + 91Железнодорожная станцияж/д_ст + 91Железнодорожный разъездж/д_рзд + 91Железнодорожный постж/д_пост + diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/Templates/КлассификаторСубъектовРФ/Template.txt b/SSL/src/InformationRegisters/АдресныеОбъекты/Templates/КлассификаторСубъектовРФ/Template.txt index 68d100cbf..0d8aefb7f 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/Templates/КлассификаторСубъектовРФ/Template.txt +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/Templates/КлассификаторСубъектовРФ/Template.txt @@ -36,6 +36,17 @@ + + ДиапазонПочтовыхИндексов + + xs:string + + 120 + Variable + + + + Идентификатор @@ -48,97 +59,97 @@ НаименованиеСокращение Идентификатор - 01Адыгея Респ 385000d8327a56-80de-4df2-815c-4f6ab1224c50 - 02Башкортостан Респ 4500006f2cbfd8-692a-4ee4-9b16-067210bde3fc - 03Бурятия Респ 670000a84ebed3-153d-4ba9-8532-8bdf879e1f5a - 04Алтай Респ 6490005c48611f-5de6-4771-9695-7e36a4e7529d - 05Дагестан Респ 3680000bb7fa19-736d-49cf-ad0e-9774c4dae09b - 06Ингушетия Респ 386000b2d8cd20-cabc-4deb-afad-f3c4b4d55821 - 07Кабардино-Балкарская Респ 0000001781f74e-be4a-4697-9c6b-493057c94818 - 08Калмыкия Респ 000000491cde9d-9d76-4591-ab46-ea93c079e686 - 09Карачаево-Черкесская Респ 00000061b95807-388a-4cb1-9bee-889f7cf811c8 - 10Карелия Респ 000000248d8071-06e1-425e-a1cf-d1ff4c4a14a8 - 11Коми Респ 000000c20180d9-ad9c-46d1-9eff-d60bc424592a - 12Марий Эл Респ 000000de2cbfdf-9662-44a4-a4a4-8ad237ae4a3e - 13Мордовия Респ 00000037a0c60a-9240-48b5-a87f-0d8c86cdb6e1 - 14Саха /Якутия/ Респ 000000c225d3db-1db6-4063-ace0-b3fe9ea3805f - 15Северная Осетия - Алания Респ 000000de459e9c-2933-4923-83d1-9c64cfd7a817 - 16Татарстан Респ 4200000c089b04-099e-4e0e-955a-6bf1ce525f1a - 17Тыва Респ 660000026bc56f-3731-48e9-8245-655331f596c0 - 18Удмуртская Респ 00000052618b9c-bcbb-47e7-8957-95c63f0b17cc - 19Хакасия Респ 6550008d3f1d35-f0f4-41b5-b5b7-e7cadf3e7bd7 - 20Чеченская Респ 000000de67dc49-b9ba-48a3-a4cc-c2ebfeca6c5e - 21Чувашская Республика - Чувашия000000878fc621-3708-46c7-a97f-5a13a4176b3e - 22Алтайский край 0000008276c6a1-1a86-4f0d-8920-aba34d4cc34a - 23Краснодарский край 000000d00e1013-16bd-4c09-b3d5-3cb09fc54bd8 - 24Красноярский край 000000db9c4f8b-b706-40e2-b2b4-d31b98dcd3d1 - 25Приморский край 00000043909681-d6e1-432d-b61f-ddac393cb5da - 26Ставропольский край 000000327a060b-878c-4fb4-8dc4-d5595871a3d8 - 27Хабаровский край 0000007d468b39-1afa-41ec-8c4f-97a8603cb3d4 - 28Амурская обл 675000844a80d6-5e31-4017-b422-4d9c01e9942c - 29Архангельская обл 000000294277aa-e25d-428c-95ad-46719c4ddb44 - 30Астраханская обл 00000083009239-25cb-4561-af8e-7ee111b1cb73 - 31Белгородская обл 000000639efe9d-3fc8-4438-8e70-ec4f2321f2a7 - 32Брянская обл 000000f5807226-8be0-4ea8-91fc-39d053aec1e2 - 33Владимирская обл 000000b8837188-39ee-4ff9-bc91-fcc9ed451bb3 - 34Волгоградская обл 000000da051ec8-da2e-4a66-b542-473b8d221ab4 - 35Вологодская обл 000000ed36085a-b2f5-454f-b9a9-1c9a678ee618 - 36Воронежская обл 000000b756fe6b-bbd3-44d5-9302-5bfcc740f46e - 37Ивановская обл 0000000824434f-4098-4467-af72-d4f702fed335 - 38Иркутская обл 0000006466c988-7ce3-45e5-8b97-90ae16cb1249 - 39Калининградская обл 00000090c7181e-724f-41b3-b6c6-bd3ec7ae3f30 - 40Калужская обл 00000018133adf-90c2-438e-88c4-62c41656de70 - 41Камчатский край 000000d02f30fc-83bf-4c0f-ac2b-5729a866a207 - 42Кемеровская обл 000000393aeccb-89ef-4a7e-ae42-08d5cebc2e30 - 43Кировская обл 6100000b940b96-103f-4248-850c-26b6c7296728 - 44Костромская обл 00000015784a67-8cea-425b-834a-6afe0e3ed61c - 45Курганская обл 6410004a3d970f-520e-46b9-b16c-50d4ca7535a8 - 46Курская обл 000000ee594d5e-30a9-40dc-b9f2-0add1be44ba1 - 47Ленинградская обл 0000006d1ebb35-70c6-4129-bd55-da3969658f5d - 48Липецкая обл 0000001490490e-49c5-421c-9572-5673ba5d80c8 - 49Магаданская обл 0000009c05e812-8679-4710-b8cb-5e8bd43cdf48 - 50Московская обл 00000029251dcf-00a1-4e34-98d4-5c47484a36d4 - 51Мурманская обл 0000001c727518-c96a-4f34-9ae6-fd510da3be03 - 52Нижегородская обл 00000088cd27e2-6a8a-4421-9718-719a28a0a088 - 53Новгородская обл 000000e5a84b81-8ea1-49e3-b3c4-0528651be129 - 54Новосибирская обл 0000001ac46b49-3209-4814-b7bf-a509ea1aecd9 - 55Омская обл 00000005426864-466d-41a3-82c4-11e61cdc98ce - 56Оренбургская обл 4600008bcec9d6-05bc-4e53-b45c-ba0c6f3a5c44 - 57Орловская обл 0000005e465691-de23-4c4e-9f46-f35a125b5970 - 58Пензенская обл 000000c99e7924-0428-4107-a302-4fd7c0cca3ff - 59Пермский край 0000004f8b1a21-e4bb-422f-9087-d3cbf4bebc14 - 60Псковская обл 000000f6e148a1-c9d0-4141-a608-93e3bd95e6c4 - 61Ростовская обл 000000f10763dc-63e3-48db-83e1-9c566fe3092b - 62Рязанская обл 390000963073ee-4dfc-48bd-9a70-d2dfc6bd1f31 - 63Самарская обл 000000df3d7359-afa9-4aaa-8ff9-197e73906b1c - 64Саратовская обл 410000df594e0e-a935-4664-9d26-0bae13f904fe - 65Сахалинская обл 693000aea6280f-4648-460f-b8be-c2bc18923191 - 66Свердловская обл 62000092b30014-4d52-4e2e-892d-928142b924bf - 67Смоленская обл 000000e8502180-6d08-431b-83ea-c7038f0df905 - 68Тамбовская обл 392000a9a71961-9363-44ba-91b5-ddf0463aebc2 - 69Тверская обл 00000061723327-1c20-42fe-8dfa-402638d9b396 - 70Томская обл 000000889b1f3a-98aa-40fc-9d3d-0f41192758ab - 71Тульская обл 000000d028ec4f-f6da-4843-ada6-b68b3e0efa3d - 72Тюменская обл 00000054049357-326d-4b8f-b224-3c6dc25d6dd3 - 73Ульяновская обл 433000fee76045-fe22-43a4-ad58-ad99e903bd58 - 74Челябинская обл 45400027eb7c10-a234-44da-a59c-8b1f864966de - 75Забайкальский край 000000b6ba5716-eb48-401b-8443-b197c9578734 - 76Ярославская обл 000000a84b2ef4-db03-474b-b552-6229e801ae9b - 77Москва г 0000000c5b2444-70a0-4932-980c-b4dc0d3f02b5 - 78Санкт-Петербург г 190000c2deb16a-0330-4f05-821f-1d09c93331e6 - 79Еврейская Аобл 0000001b507b09-48c9-434f-bf6f-65066211c73e - 80Забайкальский край Агинский Бурятский округ 00000053ec9705-ec3e-4cbf-921f-229968e10aeb - 81Коми-Пермяцкий АО 000000e3d95b95-cc2d-440d-95c6-65577fae076e - 82Корякский АО 0000001e97910c-34fb-428a-a113-13a0024684ae - 83Ненецкий АО 16600089db3198-6803-4106-9463-cbf781eff0b8 - 84Таймырский (Долгано-Ненецкий) АО 00000029a47e2d-7606-481d-98d5-444e755dec34 - 85Иркутская обл Усть-Ордынский Бурятский округ 669000c2f0810a-d71e-4af6-85f1-e0bbd81b3e4d - 86Ханты-Мансийский Автономный округ - ЮграАО 000000d66e5325-3a25-4d29-ba86-4ca351d9704b - 87Чукотский АО 000000f136159b-404a-4f1f-8d8d-d169e1374d5c - 88Эвенкийский АО 0000002d7468f0-bec1-4571-85f3-bdefd62b3d50 - 89Ямало-Ненецкий АО 629000826fa834-3ee8-404f-bdbc-13a5221cfb6e - 91Крым Респ 000000bd8e6511-e4b9-4841-90de-6bbc231a789e - 92Севастополь г 0000006fdecb78-893a-4e3f-a5ba-aa062459463b - 99Байконур г 46832063ed1a35-4be6-4564-a1ec-0c51f7383314 + 01Адыгея Респ 385000385d8327a56-80de-4df2-815c-4f6ab1224c50 + 02Башкортостан Респ 450000450-4536f2cbfd8-692a-4ee4-9b16-067210bde3fc + 03Бурятия Респ 670000670-671a84ebed3-153d-4ba9-8532-8bdf879e1f5a + 04Алтай Респ 6490006495c48611f-5de6-4771-9695-7e36a4e7529d + 05Дагестан Респ 368000367-3680bb7fa19-736d-49cf-ad0e-9774c4dae09b + 06Ингушетия Респ 386000386b2d8cd20-cabc-4deb-afad-f3c4b4d55821 + 07Кабардино-Балкарская Респ 000000360-3671781f74e-be4a-4697-9c6b-493057c94818 + 08Калмыкия Респ 000000358-359491cde9d-9d76-4591-ab46-ea93c079e686 + 09Карачаево-Черкесская Респ 00000036961b95807-388a-4cb1-9bee-889f7cf811c8 + 10Карелия Респ 000000185-186248d8071-06e1-425e-a1cf-d1ff4c4a14a8 + 11Коми Респ 000000167-169c20180d9-ad9c-46d1-9eff-d60bc424592a + 12Марий Эл Респ 000000424-425de2cbfdf-9662-44a4-a4a4-8ad237ae4a3e + 13Мордовия Респ 000000430-43137a0c60a-9240-48b5-a87f-0d8c86cdb6e1 + 14Саха /Якутия/ Респ 000000677-678c225d3db-1db6-4063-ace0-b3fe9ea3805f + 15Северная Осетия - Алания Респ 000000362-363de459e9c-2933-4923-83d1-9c64cfd7a817 + 16Татарстан Респ 420000420-4230c089b04-099e-4e0e-955a-6bf1ce525f1a + 17Тыва Респ 660000667-668026bc56f-3731-48e9-8245-655331f596c0 + 18Удмуртская Респ 000000426-42752618b9c-bcbb-47e7-8957-95c63f0b17cc + 19Хакасия Респ 6550006558d3f1d35-f0f4-41b5-b5b7-e7cadf3e7bd7 + 20Чеченская Респ 000000364-366de67dc49-b9ba-48a3-a4cc-c2ebfeca6c5e + 21Чувашская Республика - Чувашия000000428-429878fc621-3708-46c7-a97f-5a13a4176b3e + 22Алтайский край 000000656-6598276c6a1-1a86-4f0d-8920-aba34d4cc34a + 23Краснодарский край 000000350-354d00e1013-16bd-4c09-b3d5-3cb09fc54bd8 + 24Красноярский край 000000660-663,647-648db9c4f8b-b706-40e2-b2b4-d31b98dcd3d1 + 25Приморский край 000000690-69243909681-d6e1-432d-b61f-ddac393cb5da + 26Ставропольский край 000000355-357327a060b-878c-4fb4-8dc4-d5595871a3d8 + 27Хабаровский край 000000680-6827d468b39-1afa-41ec-8c4f-97a8603cb3d4 + 28Амурская обл 675000675-676844a80d6-5e31-4017-b422-4d9c01e9942c + 29Архангельская обл 000000163-165294277aa-e25d-428c-95ad-46719c4ddb44 + 30Астраханская обл 000000414-41683009239-25cb-4561-af8e-7ee111b1cb73 + 31Белгородская обл 000000308-309639efe9d-3fc8-4438-8e70-ec4f2321f2a7 + 32Брянская обл 000000241-243f5807226-8be0-4ea8-91fc-39d053aec1e2 + 33Владимирская обл 000000600-602b8837188-39ee-4ff9-bc91-fcc9ed451bb3 + 34Волгоградская обл 000000400-404da051ec8-da2e-4a66-b542-473b8d221ab4 + 35Вологодская обл 000000160-162ed36085a-b2f5-454f-b9a9-1c9a678ee618 + 36Воронежская обл 000000394-397b756fe6b-bbd3-44d5-9302-5bfcc740f46e + 37Ивановская обл 000000153-1550824434f-4098-4467-af72-d4f702fed335 + 38Иркутская обл 000000664-668,6696466c988-7ce3-45e5-8b97-90ae16cb1249 + 39Калининградская обл 000000236-23890c7181e-724f-41b3-b6c6-bd3ec7ae3f30 + 40Калужская обл 000000248-24918133adf-90c2-438e-88c4-62c41656de70 + 41Камчатский край 000000683-684,688d02f30fc-83bf-4c0f-ac2b-5729a866a207 + 42Кемеровская обл 000000650-654393aeccb-89ef-4a7e-ae42-08d5cebc2e30 + 43Кировская обл 610000610-6130b940b96-103f-4248-850c-26b6c7296728 + 44Костромская обл 000000156-15715784a67-8cea-425b-834a-6afe0e3ed61c + 45Курганская обл 641000640-6414a3d970f-520e-46b9-b16c-50d4ca7535a8 + 46Курская обл 000000305-307ee594d5e-30a9-40dc-b9f2-0add1be44ba1 + 47Ленинградская обл 000000187-1886d1ebb35-70c6-4129-bd55-da3969658f5d + 48Липецкая обл 000000398-3991490490e-49c5-421c-9572-5673ba5d80c8 + 49Магаданская обл 000000685-6869c05e812-8679-4710-b8cb-5e8bd43cdf48 + 50Московская обл 000000140-14429251dcf-00a1-4e34-98d4-5c47484a36d4 + 51Мурманская обл 000000183-1841c727518-c96a-4f34-9ae6-fd510da3be03 + 52Нижегородская обл 000000603-60788cd27e2-6a8a-4421-9718-719a28a0a088 + 53Новгородская обл 000000173-175e5a84b81-8ea1-49e3-b3c4-0528651be129 + 54Новосибирская обл 000000630-6331ac46b49-3209-4814-b7bf-a509ea1aecd9 + 55Омская обл 000000644-64605426864-466d-41a3-82c4-11e61cdc98ce + 56Оренбургская обл 460000460-4628bcec9d6-05bc-4e53-b45c-ba0c6f3a5c44 + 57Орловская обл 000000302-3035e465691-de23-4c4e-9f46-f35a125b5970 + 58Пензенская обл 000000440-442c99e7924-0428-4107-a302-4fd7c0cca3ff + 59Пермский край 000000614-6194f8b1a21-e4bb-422f-9087-d3cbf4bebc14 + 60Псковская обл 000000180-182f6e148a1-c9d0-4141-a608-93e3bd95e6c4 + 61Ростовская обл 000000344-347f10763dc-63e3-48db-83e1-9c566fe3092b + 62Рязанская обл 390000390-391963073ee-4dfc-48bd-9a70-d2dfc6bd1f31 + 63Самарская обл 000000443-446df3d7359-afa9-4aaa-8ff9-197e73906b1c + 64Саратовская обл 410000410-413df594e0e-a935-4664-9d26-0bae13f904fe + 65Сахалинская обл 693000693-694aea6280f-4648-460f-b8be-c2bc18923191 + 66Свердловская обл 620000620-62492b30014-4d52-4e2e-892d-928142b924bf + 67Смоленская обл 000000214-216e8502180-6d08-431b-83ea-c7038f0df905 + 68Тамбовская обл 392000392-393a9a71961-9363-44ba-91b5-ddf0463aebc2 + 69Тверская обл 000000170-17261723327-1c20-42fe-8dfa-402638d9b396 + 70Томская обл 000000634-636889b1f3a-98aa-40fc-9d3d-0f41192758ab + 71Тульская обл 000000300-301d028ec4f-f6da-4843-ada6-b68b3e0efa3d + 72Тюменская обл 000000625-62754049357-326d-4b8f-b224-3c6dc25d6dd3 + 73Ульяновская обл 433000432-433fee76045-fe22-43a4-ad58-ad99e903bd58 + 74Челябинская обл 454000454-45727eb7c10-a234-44da-a59c-8b1f864966de + 75Забайкальский край 000000672-674,687b6ba5716-eb48-401b-8443-b197c9578734 + 76Ярославская обл 000000150-152a84b2ef4-db03-474b-b552-6229e801ae9b + 77Москва г 000000101-1350c5b2444-70a0-4932-980c-b4dc0d3f02b5 + 78Санкт-Петербург г 190000190-199c2deb16a-0330-4f05-821f-1d09c93331e6 + 79Еврейская Аобл 0000006791b507b09-48c9-434f-bf6f-65066211c73e + 80Забайкальский край Агинский Бурятский округ 000000053ec9705-ec3e-4cbf-921f-229968e10aeb + 81Коми-Пермяцкий АО 0000000e3d95b95-cc2d-440d-95c6-65577fae076e + 82Корякский АО 00000001e97910c-34fb-428a-a113-13a0024684ae + 83Ненецкий АО 16600016689db3198-6803-4106-9463-cbf781eff0b8 + 84Таймырский (Долгано-Ненецкий) АО 000000029a47e2d-7606-481d-98d5-444e755dec34 + 85Иркутская обл Усть-Ордынский Бурятский округ 6690000c2f0810a-d71e-4af6-85f1-e0bbd81b3e4d + 86Ханты-Мансийский Автономный округ - ЮграАО 000000628d66e5325-3a25-4d29-ba86-4ca351d9704b + 87Чукотский АО 000000689f136159b-404a-4f1f-8d8d-d169e1374d5c + 88Эвенкийский АО 00000002d7468f0-bec1-4571-85f3-bdefd62b3d50 + 89Ямало-Ненецкий АО 629000629826fa834-3ee8-404f-bdbc-13a5221cfb6e + 91Крым Респ 000000295-298bd8e6511-e4b9-4841-90de-6bbc231a789e + 92Севастополь г 0000002996fdecb78-893a-4e3f-a5ba-aa062459463b + 99Байконур г 46832046863ed1a35-4be6-4564-a1ec-0c51f7383314 diff --git a/SSL/src/InformationRegisters/АдресныеОбъекты/АдресныеОбъекты.mdo b/SSL/src/InformationRegisters/АдресныеОбъекты/АдресныеОбъекты.mdo index 2a13c8a0f..7721e00f3 100644 --- a/SSL/src/InformationRegisters/АдресныеОбъекты/АдресныеОбъекты.mdo +++ b/SSL/src/InformationRegisters/АдресныеОбъекты/АдресныеОбъекты.mdo @@ -473,6 +473,14 @@ TextDocument + + АдресныеСокращения + + ru + Адресные сокращения + + TextDocument + ЗагрузитьАдресныйКлассификатор @@ -483,10 +491,10 @@ Auto - АвторизацияНаСайтеПоддержкиПользователей + АвторизацияНаСайтеПоддержки ru - Авторизация на сайте поддержки пользователей + Авторизация на сайте поддержки NavigationPanelOrdinary Auto diff --git a/SSL/src/InformationRegisters/БуферОперацийСтатистики/ManagerModule.bsl b/SSL/src/InformationRegisters/БуферОперацийСтатистики/ManagerModule.bsl index cb904c947..e8ccda578 100644 --- a/SSL/src/InformationRegisters/БуферОперацийСтатистики/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/БуферОперацийСтатистики/ManagerModule.bsl @@ -32,8 +32,6 @@ НаборЗаписей.ОбменДанными.Загрузка = Истина; НаборЗаписей.Записать(Ложь); - - УстановитьПривилегированныйРежим(Ложь); КонецПроцедуры Функция ПолучитьАгрегированныеЗаписиОпераций(ДатаЗаписи, ПериодАгрегации, ПериодУдаления) Экспорт diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form index c4e29c184..c46d58928 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form @@ -164,7 +164,7 @@ Left - Form.Item.СписокВерсий.StandardCommand.Find + 0 Normal Auto true @@ -191,7 +191,7 @@ Left - Form.Item.СписокВерсий.StandardCommand.CancelSearch + 0 Normal Auto true @@ -235,44 +235,43 @@ ВыборВерсийДляСравнения 22 - СписокВерсий - 10 + ДеревоВерсий + 74 true true true - СписокВерсий + ДеревоВерсий - false None Add Change Copy - CopyToClipboard Delete EndEdit + HierarchicalList + List MoveDown MoveUp - OutputList - SelectAll - SortListAsc - SortListDesc + ShowMultipleSelection + ShowRowRearrangement + Tree - НомерВерсии - 13 + ДеревоВерсийПредставлениеНомераВерсии + 105 true true true - СписокВерсий.НомерВерсии + ДеревоВерсий.ПредставлениеНомераВерсии - НомерВерсииExtendedTooltip - 50 + ДеревоВерсийПредставлениеНомераВерсииРасширеннаяПодсказка + 107 Label true true @@ -281,20 +280,22 @@ - НомерВерсииКонтекстноеМеню - 14 + ДеревоВерсийПредставлениеНомераВерсииКонтекстноеМеню + 106 true InputField true - Enter + Auto true Left true - 3 + 5 true true + false + true true true true @@ -302,19 +303,19 @@ - АвторВерсии - 15 + ДеревоВерсийАвторВерсии + 90 true true true - СписокВерсий.АвторВерсии + ДеревоВерсий.АвторВерсии - АвторВерсииExtendedTooltip - 51 + ДеревоВерсийАвторВерсииРасширеннаяПодсказка + 92 Label true true @@ -323,19 +324,20 @@ - АвторВерсииКонтекстноеМеню - 16 + ДеревоВерсийАвторВерсииКонтекстноеМеню + 91 true InputField true - Enter + Auto true Left true true true + true true true true @@ -343,19 +345,19 @@ - Дата - 17 + ДеревоВерсийДатаВерсии + 93 true true true - СписокВерсий.ДатаВерсии + ДеревоВерсий.ДатаВерсии - ДатаExtendedTooltip - 52 + ДеревоВерсийДатаВерсииРасширеннаяПодсказка + 95 Label true true @@ -364,20 +366,20 @@ - ДатаКонтекстноеМеню - 18 + ДеревоВерсийДатаВерсииКонтекстноеМеню + 94 true InputField true - Enter + Auto true Left true - 10 true true + true true true true @@ -385,23 +387,70 @@ - СписокВерсийКомментарий - 32 + ДеревоВерсийУзел + 114 + + <key>ru</key> + <value>Источник изменений</value> + true true true - СписокВерсий.Комментарий + ДеревоВерсий.Узел + + + ДеревоВерсийУзелРасширеннаяПодсказка + 116 + Label + true + true + + Left + + + + ДеревоВерсийУзелКонтекстноеМеню + 115 + true + + InputField + true + Auto + true + Left + true + + 30 + true + true + true + true + true + true + Normal + + + + ДеревоВерсийКомментарий + 96 + true + true + + true + + + ДеревоВерсий.Комментарий OnChange - СписокВерсийКомментарийПриИзменении + ДеревоВерсийКомментарийПриИзменении - СписокВерсийКомментарийExtendedTooltip - 53 + ДеревоВерсийКомментарийРасширеннаяПодсказка + 98 Label true true @@ -410,8 +459,8 @@ - СписокВерсийКомментарийКонтекстноеМеню - 33 + ДеревоВерсийКомментарийКонтекстноеМеню + 97 true InputField @@ -428,30 +477,29 @@ Normal - Top - СписокВерсийКоманднаяПанель - 12 + ДеревоВерсийКоманднаяПанель + 76 Left Selection - СписокВерсийВыбор + ДеревоВерсийВыбор OnActivateRow - СписокВерсийПриАктивизацииСтроки + ДеревоВерсийПриАктивизацииСтроки BeforeRowChange - СписокВерсийПередНачаломИзменения + ДеревоВерсийПередНачаломИзменения - СписокВерсийСтрокаПоиска - 65 + ДеревоВерсийСтрокаПоиска + 78 - СписокВерсийСтрокаПоискаРасширеннаяПодсказка - 67 + ДеревоВерсийСтрокаПоискаРасширеннаяПодсказка + 80 Label true true @@ -460,21 +508,21 @@ - СписокВерсийСтрокаПоискаКонтекстноеМеню - 66 + ДеревоВерсийСтрокаПоискаКонтекстноеМеню + 79 true - СписокВерсий + ДеревоВерсий true - СписокВерсийСостояниеПросмотра - 68 + ДеревоВерсийСостояниеПросмотра + 81 - СписокВерсийСостояниеПросмотраРасширеннаяПодсказка - 70 + ДеревоВерсийСостояниеПросмотраРасширеннаяПодсказка + 83 Label true true @@ -483,22 +531,22 @@ - СписокВерсийСостояниеПросмотраКонтекстноеМеню - 69 + ДеревоВерсийСостояниеПросмотраКонтекстноеМеню + 82 true ViewStatusAddition - СписокВерсий + ДеревоВерсий true - СписокВерсийУправлениеПоиском - 71 + ДеревоВерсийУправлениеПоиском + 84 - СписокВерсийУправлениеПоискомРасширеннаяПодсказка - 73 + ДеревоВерсийУправлениеПоискомРасширеннаяПодсказка + 86 Label true true @@ -507,19 +555,19 @@ - СписокВерсийУправлениеПоискомКонтекстноеМеню - 72 + ДеревоВерсийУправлениеПоискомКонтекстноеМеню + 85 true SearchControlAddition - СписокВерсий + ДеревоВерсий true - СписокВерсийExtendedTooltip - 49 + ДеревоВерсийРасширеннаяПодсказка + 77 Label true true @@ -528,20 +576,19 @@ - СписокВерсийКонтекстноеМеню - 11 + ДеревоВерсийКонтекстноеМеню + 75 - СписокВерсийОткрытьВерсиюОбъекта - 27 + ДеревоВерсийКонтекстноеМенюОткрытьВерсию + 108 true true true - false - СписокВерсийОткрытьВерсиюОбъектаExtendedTooltip - 46 + ДеревоВерсийКонтекстноеМенюОткрытьВерсиюРасширеннаяПодсказка + 109 Label true true @@ -558,17 +605,16 @@ Auto - СписокВерсийОтчетПоИзменениям - 26 + ДеревоВерсийКонтекстноеМенюСравнитьВерсии + 112 true true true - false - СписокВерсийОтчетПоИзменениямExtendedTooltip - 47 + ДеревоВерсийКонтекстноеМенюСравнитьВерсииРасширеннаяПодсказка + 113 Label true true @@ -585,16 +631,16 @@ Auto - СписокВерсийПерейтиНаВерсию - 31 + ДеревоВерсийКонтекстноеМенюПерейтиНаВерсию + 110 true true true - СписокВерсийПерейтиНаВерсиюExtendedTooltip - 48 + ДеревоВерсийКонтекстноеМенюПерейтиНаВерсиюРасширеннаяПодсказка + 111 Label true true @@ -610,8 +656,9 @@ UserCmds Auto + true - 50 + Tree true true true @@ -624,16 +671,14 @@ true true false - false + true Auto Auto true true - None - None - None + true + true true - true true @@ -653,6 +698,7 @@ Page Vertical + false @@ -746,7 +792,9 @@ Page - + + false + true true @@ -843,110 +891,6 @@ true auto true - - СписокВерсий - - <key>ru</key> - <value>Список версий</value> - - 1 - - ValueTable - - - true - - - true - - - НомерВерсии - - <key>ru</key> - <value>№</value> - - 2 - - Number - - 10 - true - - - - true - - - - - АвторВерсии - - <key>ru</key> - <value>Автор изменений</value> - - 1 - - CatalogRef.ВнешниеПользователи - CatalogRef.Пользователи - ExchangePlanRef - - - true - - - - - ДатаВерсии - - <key>ru</key> - <value>Дата</value> - - 3 - - Date - - - - true - - - - - Комментарий - - <key>ru</key> - <value>Комментарий</value> - - 4 - - String - - - - true - - - true - - - - ЕстьДанныеВерсии - - <key>ru</key> - <value>Есть данные версии</value> - - 5 - - Boolean - - - true - - - true - - - Ссылка @@ -1022,6 +966,188 @@ <itemValueType/> </extInfo> </attributes> + <attributes> + <name>ДеревоВерсий</name> + <title> + <key>ru</key> + <value>Дерево версий</value> + + 6 + + ValueTree + + + true + + + true + + + АвторВерсии + + <key>ru</key> + <value>Автор изменений</value> + + 2 + + CatalogRef.ВнешниеПользователи + CatalogRef.Пользователи + ExchangePlanRef + + + true + + + + + ДатаВерсии + + <key>ru</key> + <value>Дата</value> + + 3 + + Date + + + + true + + + + + Комментарий + + <key>ru</key> + <value>Комментарий</value> + + 4 + + String + + + + true + + + true + + + + ПредставлениеНомераВерсии + + <key>ru</key> + <value>№</value> + + 7 + + String + + 10 + + + + true + + + true + + + + НомерВерсии + + <key>ru</key> + <value>№</value> + + 1 + + Number + + 10 + true + + + + true + + + + + Отклонена + + <key>ru</key> + <value>Отклонена</value> + + 5 + + Boolean + + + true + + + true + + + + Узел + + <key>ru</key> + <value>Узел</value> + + 6 + + String + + 255 + + + + true + + + true + + + + ТекущаяВерсия + + <key>ru</key> + <value>Текущая версия</value> + + 8 + + Boolean + + + true + + + true + + + + + НомерТекущейВерсии + + <key>ru</key> + <value>Номер текущей версии</value> + + 1 + + Number + + 10 + true + + + + true + + + true + + СформироватьОтчетПоИзменениям @@ -1053,7 +1179,7 @@ <id>2</id> <toolTip> <key>ru</key> - <value>Открыть предыдущую версию</value> + <value>Открыть отчет по версии</value> </toolTip> <use> <common>true</common> diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Help/ru.html b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Help/ru.html index 4abad3216..dced07a4b 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Help/ru.html +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для просмотра истории изменений объекта и выбора хранимых версий. История версий позволяет быстро ответить на вопросы: "Кто изменил объект?", "Когда произошли изменения?" и "Что было изменено в объекте?". </p> <p>С помощью списка можно вести историю изменений документов и списков, просматривать любую версию объекта или сравнивать любые версии объекта между собой.</p> <p>Для работы с историей изменений объектов необходимо выполнить предварительную <a href="InformationRegister.НастройкиВерсионированияОбъектов/Help">настройку</a> их версионирования. Настройку и просмотр истории версий выполняет администратор программы.</p> @@ -7,7 +7,7 @@ <ul><li><strong>№</strong> - порядковый номер версии, версии перечисляются по убыванию номеров, самая первая версия находится внизу списка; </li><li><strong>Автор изменений</strong> - пользователь, который редактировал объект; </li><li><strong>Дата</strong> - дата и время редактирования; -</li><li><strong>Комментарий</strong> - напишите подробную информацию по поводу этой версии. Программа автоматически заполняет это поле, например, при переходе на другую версию указывается, на какую версию и когда был выполнен переход.</li></ul><h3>Отбор версий</h3> +</li><li><strong>Комментарий</strong> - напишите подробную информацию по поводу этой версии (возможность доступна пользователю с полными правами). Это может быть полезно, например, при анализе изменений какого-либо документа. Программа автоматически заполняет это поле, например, при переходе на другую версию указывается, на какую версию и когда был выполнен переход.</li></ul><h3>Отбор версий</h3> <ul><li> <div>С помощью отбора <strong>Изменения в реквизитах</strong> можно отражать изменения определенных реквизитов. Для этого с помощью кнопки <img src="StdPicture.InputFieldSelect"></img> <strong>Выбрать</strong> откройте список реквизитов, выберите с помощью флажков реквизиты, изменения по которым необходимо отражать в списке версий.</div></li></ul><h3>Просмотр событий изменения объекта</h3> <ul><li> diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl index d750bbb92..7f22d9564 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl @@ -1,5 +1,3 @@ - - #Область ОбработчикиСобытийФормы &НаСервере @@ -22,7 +20,6 @@ ПереходНаВерсиюРазрешен = Пользователи.ЭтоПолноправныйПользователь(); Элементы.ПерейтиНаВерсию.Видимость = ПереходНаВерсиюРазрешен; - Элементы.СписокВерсийПерейтиНаВерсию.Видимость = ПереходНаВерсиюРазрешен; Элементы.ТехническиеСведенияОбИзмененииОбъекта.Видимость = ПереходНаВерсиюРазрешен; Реквизиты = НСтр("ru = 'Все'") @@ -57,19 +54,31 @@ #Область ОбработчикиСобытийЭлементовТаблицыФормыСписокВерсий &НаКлиенте -Процедура СписокВерсийПриАктивизацииСтроки(Элемент) - - УстановитьДоступность(); - +Процедура ДеревоВерсийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + ОткрытьОтчетПоВерсииОбъекта(); КонецПроцедуры &НаКлиенте -Процедура СписокВерсийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - ОткрытьОтчетПоВерсииОбъекта(); - +Процедура ДеревоВерсийПриАктивизацииСтроки(Элемент) + УстановитьДоступность(); КонецПроцедуры +&НаКлиенте +Процедура ДеревоВерсийКомментарийПриИзменении(Элемент) + ТекущиеДанные = Элементы.ДеревоВерсий.ТекущиеДанные; + Если ТекущиеДанные <> Неопределено Тогда + ДобавитьКомментарийКВерсии(Ссылка, ТекущиеДанные.НомерВерсии, ТекущиеДанные.Комментарий); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоВерсийПередНачаломИзменения(Элемент, Отказ) + Если Не РедактированиеКомментарияРазрешено(Элемент.ТекущиеДанные.АвторВерсии) Тогда + Отказ = Истина; + КонецЕсли; +КонецПроцедуры + + #КонецОбласти #Область ОбработчикиКомандФормы @@ -91,7 +100,7 @@ &НаКлиенте Процедура СформироватьОтчетПоИзменениям(Команда) - ВыделенныеСтроки = Элементы.СписокВерсий.ВыделенныеСтроки; + ВыделенныеСтроки = Элементы.ДеревоВерсий.ВыделенныеСтроки; СравниваемыеВерсии = СформироватьСписокВыбранныхВерсий(ВыделенныеСтроки); Если СравниваемыеВерсии.Количество() < 2 Тогда @@ -110,7 +119,7 @@ &НаСервере Функция СформироватьТаблицуВерсий() - Если ВерсионированиеОбъектов.ЕстьПравоНаЧтениеВерсийОбъектов() Тогда + Если ВерсионированиеОбъектов.ЕстьПравоЧтенияДанныхВерсийОбъектов() Тогда УстановитьПривилегированныйРежим(Истина); КонецЕсли; @@ -128,7 +137,10 @@ | ВерсииОбъектов.КонтрольнаяСумма, | ВерсииОбъектов.ЕстьДанныеВерсии, | &БезОтбора - | ИЛИ ВерсииОбъектов.НомерВерсии В (&НомераВерсий) КАК СоответствуетОтбору + | ИЛИ ВерсииОбъектов.НомерВерсии В (&НомераВерсий) КАК СоответствуетОтбору, + | ВерсииОбъектов.ВерсияВладелец, + | ВерсииОбъектов.ТипВерсииОбъекта, + | ВерсииОбъектов.Узел |ИЗ | РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов |ГДЕ @@ -143,20 +155,33 @@ Запрос.УстановитьПараметр("Ссылка", Ссылка); ТаблицаВерсий = Запрос.Выполнить().Выгрузить(); - Если ТаблицаВерсий.Количество() > 0 Тогда - ТаблицаВерсий[0].ЕстьДанныеВерсии = Истина; + + ТаблицаВерсий.Колонки.Добавить("ТекущаяВерсия", Новый ОписаниеТипов("Булево")); + + ПользовательскиеВерсии = ТаблицаВерсий.НайтиСтроки(Новый Структура("ТипВерсииОбъекта", Перечисления.ТипыВерсийОбъекта.ИзмененоПользователем)); + Если ПользовательскиеВерсии.Количество() > 0 Тогда + ПользовательскиеВерсии[0].ЕстьДанныеВерсии = Истина; + ПользовательскиеВерсии[0].ТекущаяВерсия = Истина; + НомерТекущейВерсии = ПользовательскиеВерсии[0].НомерВерсии; КонецЕсли; - Для Индекс = 1 По ТаблицаВерсий.Количество() - 1 Цикл - Если Не ТаблицаВерсий[Индекс].ЕстьДанныеВерсии Тогда - Если ПустаяСтрока(ТаблицаВерсий[Индекс].КонтрольнаяСумма) Или ТаблицаВерсий[Индекс].КонтрольнаяСумма = ТаблицаВерсий[Индекс-1].КонтрольнаяСумма Тогда - ТаблицаВерсий[Индекс].ЕстьДанныеВерсии = ТаблицаВерсий[Индекс-1].ЕстьДанныеВерсии; + Для Индекс = 1 По ПользовательскиеВерсии.Количество() - 1 Цикл + Если Не ПользовательскиеВерсии[Индекс].ЕстьДанныеВерсии Тогда + Если ПустаяСтрока(ПользовательскиеВерсии[Индекс].КонтрольнаяСумма) Или ПользовательскиеВерсии[Индекс].КонтрольнаяСумма = ПользовательскиеВерсии[Индекс-1].КонтрольнаяСумма Тогда + ПользовательскиеВерсии[Индекс].ЕстьДанныеВерсии = ПользовательскиеВерсии[Индекс-1].ЕстьДанныеВерсии; КонецЕсли; КонецЕсли; КонецЦикла; - + + ИмяЭтойИнформационнойБазы = ИмяЭтойИнформационнойБазы(); + Для Каждого Версия Из ТаблицаВерсий Цикл + Если ПустаяСтрока(Версия.Узел) Тогда + Версия.Узел = ИмяЭтойИнформационнойБазы; + КонецЕсли; + КонецЦикла; + Результат = ТаблицаВерсий.Скопировать(ТаблицаВерсий.НайтиСтроки(Новый Структура("СоответствуетОтбору", Истина)), - "НомерВерсии, АвторВерсии, ДатаВерсии, Комментарий, ЕстьДанныеВерсии"); + "НомерВерсии, АвторВерсии, ДатаВерсии, Комментарий, ЕстьДанныеВерсии, ВерсияВладелец, Узел, ТекущаяВерсия"); Возврат Результат; @@ -165,11 +190,13 @@ &НаКлиенте Процедура ВыполнитьПереходНаВыбраннуюВерсию(ОтменятьПроведение = Ложь) - Если Элементы.СписокВерсий.ТекущиеДанные = Неопределено Тогда + ТекущиеДанные = Элементы.ДеревоВерсий.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда Возврат; КонецЕсли; - Результат = ПерейтиНаВерсиюСервер(Ссылка, Элементы.СписокВерсий.ТекущиеДанные.НомерВерсии, ОтменятьПроведение); + ПредставлениеНомераВерсии = ТекущиеДанные.ПредставлениеНомераВерсии; + Результат = ПерейтиНаВерсиюСервер(Ссылка, ТекущиеДанные.НомерВерсии, ПредставлениеНомераВерсии, ОтменятьПроведение); Если Результат = "ОшибкаВосстановления" Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОбОшибке); @@ -194,7 +221,11 @@ // Ничего не делаем, если у формы нет метода Прочитать(). КонецПопытки; КонецЕсли; - ПоказатьПредупреждение(, НСтр("ru = 'Переход к старой версии выполнен успешно.'")); + ПоказатьОповещениеПользователя( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Восстановлена версия № %1.'"), ПредставлениеНомераВерсии), + ПолучитьНавигационнуюСсылку(Ссылка), + Строка(Ссылка), + БиблиотекаКартинок.Информация32); КонецЕсли; КонецПроцедуры @@ -209,13 +240,21 @@ КонецПроцедуры &НаСервере -Функция ПерейтиНаВерсиюСервер(Ссылка, НомерВерсии, ОтменаПроведения = Ложь) +Функция ПерейтиНаВерсиюСервер(Ссылка, НомерВерсии, ПользовательскоеПредставлениеНомера, ОтменаПроведения = Ложь) Информация = ВерсионированиеОбъектов.СведенияОВерсииОбъекта(Ссылка, НомерВерсии); - АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(Информация.ВерсияОбъекта); + ДополнительныеРеквизиты = Неопределено; + Если ТипЗнч(Информация.ВерсияОбъекта) = Тип("Структура") Тогда + Если Информация.ВерсияОбъекта.Свойство("ДополнительныеРеквизиты", ДополнительныеРеквизиты) Тогда + НайденныеРеквизиты = ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Идентификатор", Неопределено)); + Для Каждого Реквизит Из НайденныеРеквизиты Цикл + ДополнительныеРеквизиты.Удалить(Реквизит); + КонецЦикла; + КонецЕсли; + КонецЕсли; ТекстСообщенияОбОшибке = ""; - Объект = ВерсионированиеОбъектов.ВосстановитьОбъектПоXML(АдресВоВременномХранилище, ТекстСообщенияОбОшибке); + Объект = ВерсионированиеОбъектов.ВосстановитьОбъектПоXML(Информация.ВерсияОбъекта, ТекстСообщенияОбОшибке); Если Не ПустаяСтрока(ТекстСообщенияОбОшибке) Тогда Возврат "ОшибкаВосстановления"; @@ -223,35 +262,49 @@ Объект.ДополнительныеСвойства.Вставить("ВерсионированиеОбъектовКомментарийКВерсии", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выполнен переход к версии №%1 от %2'"), - Строка(НомерВерсии), + ПользовательскоеПредставлениеНомера, Формат(Информация.ДатаВерсии, "ДЛФ=DT"))); - РежимЗаписи = РежимЗаписиДокумента.Запись; + НачатьТранзакцию(); + + РежимЗаписи = Неопределено; + ИдентификаторОшибки = "ОшибкаВосстановления"; + Если ОбщегоНазначения.ЭтоДокумент(Объект.Метаданные()) Тогда Если Объект.Проведен И Не ОтменаПроведения Тогда РежимЗаписи = РежимЗаписиДокумента.Проведение; Иначе РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения; КонецЕсли; - - Попытка - Объект.Записать(РежимЗаписи); - Исключение - ТекстСообщенияОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - Возврат "ОшибкаПроведения" - КонецПопытки; - Иначе - Попытка - Объект.Записать(); - Исключение - ТекстСообщенияОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - Возврат "ОшибкаВосстановления" - КонецПопытки; + ИдентификаторОшибки = "ОшибкаПроведения"; КонецЕсли; + ВерсионированиеОбъектов.ЗаписатьДанныеТекущейВерсии(Ссылка); + ВерсионированиеОбъектов.ВыполняетсяЗаписьОбъекта(Истина); + Попытка + Если ЗначениеЗаполнено(РежимЗаписи) Тогда + Объект.Записать(РежимЗаписи); + Иначе + Объект.Записать(); + КонецЕсли; + Если ЗначениеЗаполнено(ДополнительныеРеквизиты) Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда + МодульУправлениеСвойствамиСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствамиСлужебный"); + МодульУправлениеСвойствамиСлужебный.ПриВосстановленииВерсииОбъекта(Объект, ДополнительныеРеквизиты); + КонецЕсли; + ВерсионированиеОбъектовПереопределяемый.ПриВосстановленииВерсииОбъекта(Объект, ДополнительныеРеквизиты); + КонецЕсли; + ВерсионированиеОбъектов.ВыполняетсяЗаписьОбъекта(Ложь); + ВерсионированиеОбъектов.ЗаписатьВерсиюОбъекта(Объект); + ЗафиксироватьТранзакцию(); + Исключение + ВерсионированиеОбъектов.ВыполняетсяЗаписьОбъекта(Ложь); + ОтменитьТранзакцию(); + ТекстСообщенияОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Возврат ИдентификаторОшибки; + КонецПопытки; ОбновитьСписокВерсий(); - Возврат "ВосстановлениеВыполнено"; КонецФункции @@ -259,8 +312,8 @@ &НаКлиенте Процедура ОткрытьОтчетПоВерсииОбъекта() - СравниваемыеВерсии = Новый Массив; - СравниваемыеВерсии.Добавить(Элементы.СписокВерсий.ТекущиеДанные.НомерВерсии); + СравниваемыеВерсии = Новый СписокЗначений; + СравниваемыеВерсии.Добавить(Элементы.ДеревоВерсий.ТекущиеДанные.НомерВерсии, Элементы.ДеревоВерсий.ТекущиеДанные.ПредставлениеНомераВерсии); ОткрытьФормуОтчета(СравниваемыеВерсии); КонецПроцедуры @@ -285,29 +338,33 @@ СравниваемыеВерсии = Новый СписокЗначений; Для Каждого НомерВыделеннойСтроки Из ВыделенныеСтроки Цикл - СравниваемыеВерсии.Добавить(Элементы.СписокВерсий.ДанныеСтроки(НомерВыделеннойСтроки).НомерВерсии); + ДанныеСтроки = Элементы.ДеревоВерсий.ДанныеСтроки(НомерВыделеннойСтроки); + СравниваемыеВерсии.Добавить(ДанныеСтроки.НомерВерсии, ДанныеСтроки.ПредставлениеНомераВерсии); КонецЦикла; СравниваемыеВерсии.СортироватьПоЗначению(НаправлениеСортировки.Возр); - Возврат СравниваемыеВерсии.ВыгрузитьЗначения(); + Если СравниваемыеВерсии.Количество() = 1 Тогда + Если СравниваемыеВерсии.НайтиПоЗначению(НомерТекущейВерсии) = Неопределено Тогда + СравниваемыеВерсии.Добавить(НомерТекущейВерсии); + КонецЕсли; + КонецЕсли; + + Возврат СравниваемыеВерсии; КонецФункции &НаКлиенте Процедура УстановитьДоступность() - ВыбранаОднаВерсия = Элементы.СписокВерсий.ВыделенныеСтроки.Количество() = 1; - ВыбраноНесколькоВерсий = Элементы.СписокВерсий.ВыделенныеСтроки.Количество() > 1; + ВыбранаОднаВерсия = Элементы.ДеревоВерсий.ВыделенныеСтроки.Количество() = 1; + ВыбраноНесколькоВерсий = Элементы.ДеревоВерсий.ВыделенныеСтроки.Количество() > 1; Элементы.ОткрытьВерсиюОбъекта.Доступность = ВыбранаОднаВерсия; - Элементы.СписокВерсийОткрытьВерсиюОбъекта.Доступность = ВыбранаОднаВерсия; - - Элементы.ОтчетПоИзменениям.Доступность = ВыбраноНесколькоВерсий; - Элементы.СписокВерсийОтчетПоИзменениям.Доступность = ВыбраноНесколькоВерсий; + Элементы.ДеревоВерсийКонтекстноеМенюОткрытьВерсию.Доступность = ВыбранаОднаВерсия; Элементы.ПерейтиНаВерсию.Доступность = ВыбранаОднаВерсия; - Элементы.СписокВерсийПерейтиНаВерсию.Доступность = ВыбранаОднаВерсия; + Элементы.ДеревоВерсийКонтекстноеМенюПерейтиНаВерсию.Доступность = ВыбранаОднаВерсия; КонецПроцедуры @@ -324,7 +381,68 @@ &НаСервере Процедура ОбновитьСписокВерсий() - ЗначениеВРеквизитФормы(СформироватьТаблицуВерсий(), "СписокВерсий"); + + ТаблицаВерсий = СформироватьТаблицуВерсий(); + + ТаблицаВерсий.Сортировать("ВерсияВладелец Возр, НомерВерсии Убыв"); + + ИерархияВерсий = РеквизитФормыВЗначение("ДеревоВерсий"); + ИерархияВерсий.Строки.Очистить(); + + ЗаполнитьИерархиюВерсий(ИерархияВерсий, ТаблицаВерсий); + ПронумероватьВерсии(ИерархияВерсий.Строки); + + ЗначениеВРеквизитФормы(ИерархияВерсий, "ДеревоВерсий"); + + ТаблицаВерсий.Свернуть("Узел"); + Элементы.ДеревоВерсийУзел.Видимость = ТаблицаВерсий.Количество() > 1 Или ТаблицаВерсий.Количество() = 1 И ТаблицаВерсий[0].Узел <> ИмяЭтойИнформационнойБазы(); + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьИерархиюВерсий(ИерархияВерсий, СписокВерсий) + + ПропущенныеВерсии = Новый Массив; + Для Каждого ОписаниеВерсии Из СписокВерсий Цикл + Если ОписаниеВерсии.ВерсияВладелец = 0 Тогда + Элемент = ИерархияВерсий.Строки.Добавить(); + Иначе + НайденнаяВерсия = ИерархияВерсий.Строки.Найти(ОписаниеВерсии.ВерсияВладелец, "НомерВерсии", Истина); + Если НайденнаяВерсия <> Неопределено Тогда + Элемент = НайденнаяВерсия.Строки.Добавить(); + НайденнаяВерсия.Отклонена = Истина; + Иначе + ПропущенныеВерсии.Добавить(ОписаниеВерсии); + Продолжить; + КонецЕсли; + КонецЕсли; + ЗаполнитьЗначенияСвойств(Элемент, ОписаниеВерсии); + КонецЦикла; + + Если ПропущенныеВерсии.Количество() > 0 Тогда + Если СписокВерсий.Количество() = ПропущенныеВерсии.Количество() Тогда + ВызватьИсключение НСтр("ru = 'Не удалось сформировать полный список версий. Часть вложенных версий пропущена.'"); + КонецЕсли; + ЗаполнитьИерархиюВерсий(ИерархияВерсий, ПропущенныеВерсии); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПронумероватьВерсии(КоллекцияВерсий) + + ТекущийНомерВерсии = КоллекцияВерсий.Количество(); + Для Каждого Версия Из КоллекцияВерсий Цикл + ПрефиксНомера = ""; + Если Версия.Родитель <> Неопределено И Не ПустаяСтрока(Версия.Родитель.ПредставлениеНомераВерсии) Тогда + ПрефиксНомера = Версия.Родитель.ПредставлениеНомераВерсии + "."; + КонецЕсли; + + Версия.ПредставлениеНомераВерсии = ПрефиксНомера + Формат(ТекущийНомерВерсии, "ЧГ=0"); + ПронумероватьВерсии(Версия.Строки); + ТекущийНомерВерсии = ТекущийНомерВерсии - 1; + КонецЦикла; + КонецПроцедуры &НаКлиенте @@ -468,26 +586,11 @@ Возврат Ложь; КонецФункции -&НаКлиенте -Процедура СписокВерсийКомментарийПриИзменении(Элемент) - ТекущиеДанные = Элементы.СписокВерсий.ТекущиеДанные; - Если ТекущиеДанные <> Неопределено Тогда - ДобавитьКомментарийКВерсии(Ссылка, ТекущиеДанные.НомерВерсии, ТекущиеДанные.Комментарий); - КонецЕсли; -КонецПроцедуры - &НаСервереБезКонтекста Процедура ДобавитьКомментарийКВерсии(СсылкаНаОбъект, НомерВерсии, Комментарий); ВерсионированиеОбъектов.ДобавитьКомментарийКВерсии(СсылкаНаОбъект, НомерВерсии, Комментарий); КонецПроцедуры -&НаКлиенте -Процедура СписокВерсийПередНачаломИзменения(Элемент, Отказ) - Если Не РедактированиеКомментарияРазрешено(Элемент.ТекущиеДанные.АвторВерсии) Тогда - Отказ = Истина; - КонецЕсли; -КонецПроцедуры - &НаСервере Функция РедактированиеКомментарияРазрешено(АвторВерсии) Возврат Пользователи.ЭтоПолноправныйПользователь() @@ -498,18 +601,56 @@ Процедура УстановитьУсловноеОформление() УсловноеОформление.Элементы.Очистить(); + + // Отсутствующие данные у версий Элемент = УсловноеОформление.Элементы.Добавить(); ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокВерсий.ЕстьДанныеВерсии"); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоВерсий.ЕстьДанныеВерсии"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Ложь; Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокВерсий.Имя); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоВерсий.Имя); + + + // Отклоненные версии + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоВерсий.Отклонена"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоВерсий.Имя); + + // Текущая версия + + Элемент = УсловноеОформление.Элементы.Добавить(); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоВерсий.ТекущаяВерсия"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Шрифт = Новый Шрифт(Элементы.ДеревоВерсийПредставлениеНомераВерсии.Шрифт, , , Истина, , , , ); + + Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Шрифт); + + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоВерсий.Имя); КонецПроцедуры +&НаСервере +Функция ИмяЭтойИнформационнойБазы() + Возврат НСтр("ru = 'Эта программа'"); +КонецФункции + #КонецОбласти diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl index d014746a7..f6c869b3e 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl @@ -16,37 +16,37 @@ ЦветКрасноФиолетовый = ЦветаСтиля.ЗаголовокУдаленногоРеквизитаФон; Если ТипЗнч(Параметры.СравниваемыеВерсии) = Тип("Массив") Тогда - // Номера версий из регистра ВерсииОбъектов для сравнения, - // или одна версия если отчет по одному объекту. - СравниваемыеВерсии = Новый ФиксированныйМассив(СортироватьПоВозрастанию(Параметры.СравниваемыеВерсии)); - - Если СравниваемыеВерсии.Количество() > 1 Тогда - СтрокаНомераВерсий = ""; - - СравниваемыеВерсииСЗ = Новый СписокЗначений; - СравниваемыеВерсииСЗ.ЗагрузитьЗначения(Параметры.СравниваемыеВерсии); - СравниваемыеВерсииСЗ.СортироватьПоЗначению(); - - Для Каждого ЭлементСпискаВерсий Из СравниваемыеВерсииСЗ Цикл - СтрокаНомераВерсий = СтрокаНомераВерсий + Строка(ЭлементСпискаВерсий.Значение) + ", "; - КонецЦикла; - - СтрокаНомераВерсий = Лев(СтрокаНомераВерсий, СтрДлина(СтрокаНомераВерсий) - 2); - - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Сравнение версий ""%1"" (№№ %2)'"), - ОбщегоНазначения.ПредметСтрокой(СсылкаНаОбъект), СтрокаНомераВерсий); - Иначе - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Версия объекта ""%1"" №%2'"), - СсылкаНаОбъект, Строка(СравниваемыеВерсии[0])); - КонецЕсли; - - СформироватьОтчет(ТаблицаОтчета, СравниваемыеВерсии); + СравниваемыеВерсии = Новый СписокЗначений; + Для Каждого НомерВерсии Из Параметры.СравниваемыеВерсии Цикл + СравниваемыеВерсии.Добавить(НомерВерсии, НомерВерсии); + КонецЦикла; + ИначеЕсли ТипЗнч(Параметры.СравниваемыеВерсии) = Тип("СписокЗначений") Тогда + СравниваемыеВерсии = Параметры.СравниваемыеВерсии; Иначе // Используется переданная версия объекта. СериализованныйОбъект = ПолучитьИзВременногоХранилища(Параметры.АдресСериализованногоОбъекта); Если Параметры.ПоВерсии Тогда // Используется отчет по одной версии. ТаблицаОтчета = ВерсионированиеОбъектов.ОтчетПоВерсииОбъекта(СсылкаНаОбъект, СериализованныйОбъект); КонецЕсли; + Возврат; КонецЕсли; + + СравниваемыеВерсии.СортироватьПоЗначению(); + Если СравниваемыеВерсии.Количество() > 1 Тогда + СтрокаНомераВерсий = ""; + Для Каждого Версия Из СравниваемыеВерсии Цикл + СтрокаНомераВерсий = СтрокаНомераВерсий + Строка(Версия.Представление) + ", "; + КонецЦикла; + + СтрокаНомераВерсий = Лев(СтрокаНомераВерсий, СтрДлина(СтрокаНомераВерсий) - 2); + + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Сравнение версий ""%1"" (№№ %2)'"), + ОбщегоНазначения.ПредметСтрокой(СсылкаНаОбъект), СтрокаНомераВерсий); + Иначе + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Версия объекта ""%1"" №%2'"), + СсылкаНаОбъект, Строка(СравниваемыеВерсии[0].Представление)); + КонецЕсли; + + СформироватьОтчет(ТаблицаОтчета, СравниваемыеВерсии); КонецПроцедуры @@ -84,7 +84,7 @@ Процедура СформироватьОтчет(ТЧОтчета, СравниваемыеВерсии) Если СравниваемыеВерсии.Количество() = 1 Тогда - ТЧОтчета = ВерсионированиеОбъектов.ОтчетПоВерсииОбъекта(СсылкаНаОбъект, СравниваемыеВерсии[0]); + ТЧОтчета = ВерсионированиеОбъектов.ОтчетПоВерсииОбъекта(СсылкаНаОбъект, СравниваемыеВерсии[0].Значение, СравниваемыеВерсии[0].Представление); Иначе СформироватьОтчетПоИзменениям(ТЧОтчета, СравниваемыеВерсии); КонецЕсли; @@ -98,10 +98,10 @@ // Состоит из трех этапов: // 1. Получение XML представления хранимых версий объекта. Формирование // специальных структур данных для сравнения объектов. -// 2. Получение +// 2. Получение. // &НаСервере -Процедура СформироватьОтчетПоИзменениям(ТЧОтчета, Знач МассивВерсий) +Процедура СформироватьОтчетПоИзменениям(ТЧОтчета, Знач СписокВерсий) // Хранит переходную разобранную версию объекта, // чтобы сократить число разборов XML. @@ -114,7 +114,7 @@ // Формируем массив номеров версий (так как некоторые могут отсутствовать // и иметь непоследовательную нумерацию), массив отсортирован по возрастанию. - МассивНомеровВерсий = МассивВерсий; + МассивНомеровВерсий = СписокВерсий.ВыгрузитьЗначения(); // Количество версий объекта хранящихся в базе (k). // Для формирования отчета необходимо сделать (k-1) сравнений. @@ -309,12 +309,13 @@ КонецЦикла; // Передаем скомпонованную информацию в спец блок для вывода данных в отчет. - ВывестиРезультатыКомпоновкиВОтчет(ТаблицаИзмененийРеквизитов, - ТаблицаИзмененийТабличныхЧастей, - ТаблицаИзмененийТабличныхДокументов, - счетчикУникальныйИд, - МассивНомеровВерсий, - ТЧОтчета); + ВывестиРезультатыКомпоновкиВОтчет( + ТаблицаИзмененийРеквизитов, + ТаблицаИзмененийТабличныхЧастей, + ТаблицаИзмененийТабличныхДокументов, + счетчикУникальныйИд, + СписокВерсий, + ТЧОтчета); ШаблонЛегенда = ОбщийШаблон.ПолучитьОбласть("Легенда"); ТЧОтчета.Вывести(ШаблонЛегенда); @@ -655,13 +656,15 @@ &НаСервере Функция ВывестиРезультатыКомпоновкиВОтчет(ТаблицаИзмененийРеквизитов, ТаблицаИзмененийТабличныхЧастей, - ТаблицаИзмененийТабличныхДокументов, счетчикУникальныйИд, МассивНомеровВерсий, ТЧОтчета) + ТаблицаИзмененийТабличныхДокументов, счетчикУникальныйИд, СписокВерсий, ТЧОтчета) + + МассивНомеровВерсий = СписокВерсий.ВыгрузитьЗначения(); ЧислоИзменившихсяРеквизитов = РассчитатьЧислоИзменившихсяРеквизитов(ТаблицаИзмененийРеквизитов, МассивНомеровВерсий); ЧислоВерсий = МассивНомеровВерсий.Количество(); ТЧОтчета.Очистить(); - ВывестиШапку(ТЧОтчета, МассивНомеровВерсий, ЧислоВерсий); + ВывестиШапку(ТЧОтчета, СписокВерсий, ЧислоВерсий); Если ЧислоИзменившихсяРеквизитов = 0 Тогда ОбластьШапкаРеквизитов = ОбщийШаблон.ПолучитьОбласть("ШапкаРеквизитов"); @@ -685,7 +688,7 @@ КонецФункции &НаСервере -Функция ВывестиШапку(ТЧОтчета, МассивНомеровВерсий, ЧислоВерсий) +Функция ВывестиШапку(ТЧОтчета, СписокВерсий, ЧислоВерсий) ОбластьШапка = ОбщийШаблон.ПолучитьОбласть("Шапка"); ОбластьШапка.Параметры.НаименованиеОтчета = НСтр("ru = 'Отчет по изменениям версий объекта'"); @@ -705,7 +708,7 @@ ИндексПоВерсиям = ЧислоВерсий; Пока ИндексПоВерсиям > 0 Цикл - СведенияОВерсии = ПолучитьОписаниеПоВерсии(МассивНомеровВерсий[ИндексПоВерсиям-1]); + СведенияОВерсии = ПолучитьОписаниеПоВерсии(СписокВерсий[ИндексПоВерсиям-1]); ОбластьВерсии.Параметры.ПредставлениеВерсии = СведенияОВерсии.Описание; КомментарииКВерсиям.Вставить("Комментарий" + ИндексПоВерсиям, СведенияОВерсии.Комментарий); @@ -967,7 +970,7 @@ ТаблицаИзмененныхСтрок.Колонки.Добавить("ИндексВТЧ1"); ТаблицаИзмененныхСтрок.Колонки.Добавить("Различия"); - СоответствиеСтрокТЧ0СтрокамТЧ1 = НайтиПохожиеСтрокиТаблиц(ТЧ0, ТЧ1); + СоответствиеСтрокТЧ0СтрокамТЧ1 = СоответствиеСтрокТаблиц(ТЧ0, ТЧ1); СоответствиеСтрокТЧ1СтрокамТЧ0 = Новый Соответствие; ПроверяемыеКолонки = НайтиОбщиеКолонки(ТЧ0, ТЧ1); Для Каждого Соответствие Из СоответствиеСтрокТЧ0СтрокамТЧ1 Цикл @@ -1213,9 +1216,9 @@ &НаСервере Функция ПолучитьОписаниеПоВерсии(НомерВерсии) - СведенияОВерсии = ВерсионированиеОбъектов.СведенияОВерсииОбъекта(СсылкаНаОбъект, НомерВерсии); + СведенияОВерсии = ВерсионированиеОбъектов.СведенияОВерсииОбъекта(СсылкаНаОбъект, НомерВерсии.Значение); - Описание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '№ %1 / (%2) / %3'"), НомерВерсии, + Описание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '№ %1 / (%2) / %3'"), НомерВерсии.Представление, Строка(СведенияОВерсии.ДатаВерсии), СокрЛП(Строка(СведенияОВерсии.АвторВерсии))); СведенияОВерсии.Вставить("Описание", Описание); @@ -1313,7 +1316,7 @@ // "и" - изменение // "д" - добавление // "у" - удаление -// "" - обычный вывод +// "" - обычный вывод. &НаСервере Функция СформироватьСекторСтрокиТЧ(Знач ЗначенияЗаполнения, Знач ТипВывода = "") @@ -1421,14 +1424,6 @@ КонецФункции -&НаСервере -Функция СортироватьПоВозрастанию(Знач Массив) - СписокЗначений = Новый СписокЗначений; - СписокЗначений.ЗагрузитьЗначения(Массив); - СписокЗначений.СортироватьПоЗначению(НаправлениеСортировки.Возр); - Возврат СписокЗначений.ВыгрузитьЗначения(); -КонецФункции - &НаСервере Функция ИндексСтроки(СтрокаТаблицы) Возврат СтрокаТаблицы.Владелец().Индекс(СтрокаТаблицы); @@ -1466,7 +1461,7 @@ // СоответствиеСтрокТаблицы1СтрокамТаблицы2 - Соответствие - уже найденное соответствие строк. // // Возвращаемое значение: -// Соответствие - соответствия строк, где ключи - строки Таблицы1, значения - строки Таблицы2. +// Соответствие - соответствия строк, где ключи - номера строк Таблицы1, значения - номера строк Таблицы2. // // Использование: // @@ -1481,7 +1476,14 @@ // СоответствиеСтрок = НайтиПохожиеСтрокиТаблиц(Таблица1, Таблица2, 0, 0); // &НаСервере -Функция НайтиПохожиеСтрокиТаблиц(Таблица1, Таблица2, Знач ТребуемоеКоличествоРазличий = 0, Знач МаксимумРазличий = Неопределено, СоответствиеСтрокТаблицы1СтрокамТаблицы2 = Неопределено) +Функция НайтиПохожиеСтрокиТаблиц(Таблица1, Знач Таблица2, Знач ТребуемоеКоличествоРазличий = 0, Знач МаксимумРазличий = Неопределено, СоответствиеСтрокТаблицы1СтрокамТаблицы2 = Неопределено) + + Пропустить = "Пропустить_"; + + Таблица2 = Таблица2.Скопировать(); + Если Таблица2.Колонки.Найти(Пропустить) = Неопределено Тогда + Таблица2.Колонки.Добавить(Пропустить, Новый ОписаниеТипов("Булево")); + КонецЕсли; Если СоответствиеСтрокТаблицы1СтрокамТаблицы2 = Неопределено Тогда СоответствиеСтрокТаблицы1СтрокамТаблицы2 = Новый Соответствие; @@ -1491,40 +1493,41 @@ МаксимумРазличий = МаксимальноеКоличествоРазличийМеждуСтрокамиТаблиц(Таблица1, Таблица2); КонецЕсли; - // Вычисляем обратное соответствие для быстрого поиска по значению. - СоответствиеСтрокТаблицы2СтрокамТаблицы1 = Новый Соответствие; // Ключи - строки таблицы2, значения = строки таблицы1. - Для Каждого Элемент Из СоответствиеСтрокТаблицы1СтрокамТаблицы2 Цикл - СоответствиеСтрокТаблицы2СтрокамТаблицы1.Вставить(Элемент.Значение, Элемент.Ключ); - КонецЦикла; - // Сравниваем строки каждую с каждой. Для Каждого СтрокаТаблицы1 Из Таблица1 Цикл - Для Каждого СтрокаТаблицы2 Из Таблица2 Цикл - Если СоответствиеСтрокТаблицы1СтрокамТаблицы2[СтрокаТаблицы1] = Неопределено - И СоответствиеСтрокТаблицы2СтрокамТаблицы1[СтрокаТаблицы2] = Неопределено Тогда // Пропускаем найденные строки. + Для Каждого СтрокаТаблицы2 Из Таблица2.НайтиСтроки(Новый Структура(Пропустить, Ложь)) Цикл + // Считаем различия без учета служебной колонки. + КоличествоРазличий = КоличествоРазличийВСтрокахТаблиц(СтрокаТаблицы1, СтрокаТаблицы2) - 1; - // считаем различия - КоличествоРазличий = КоличествоРазличийВСтрокахТаблиц(СтрокаТаблицы1, СтрокаТаблицы2); - - // Анализируем результат сравнения строк. - Если КоличествоРазличий = ТребуемоеКоличествоРазличий Тогда - СоответствиеСтрокТаблицы1СтрокамТаблицы2.Вставить(СтрокаТаблицы1, СтрокаТаблицы2); - СоответствиеСтрокТаблицы2СтрокамТаблицы1.Вставить(СтрокаТаблицы2, СтрокаТаблицы1); - Прервать; - КонецЕсли; - + // Анализируем результат сравнения строк. + Если КоличествоРазличий = ТребуемоеКоличествоРазличий Тогда + СоответствиеСтрокТаблицы1СтрокамТаблицы2.Вставить(СтрокаТаблицы1.НомерСтроки, СтрокаТаблицы2.НомерСтроки); + СтрокаТаблицы2[Пропустить] = Истина; + Прервать; КонецЕсли; КонецЦикла; КонецЦикла; - Если ТребуемоеКоличествоРазличий < МаксимумРазличий Тогда - НайтиПохожиеСтрокиТаблиц(Таблица1, Таблица2, ТребуемоеКоличествоРазличий + 1, МаксимумРазличий, СоответствиеСтрокТаблицы1СтрокамТаблицы2); + Если СоответствиеСтрокТаблицы1СтрокамТаблицы2.Количество() < Таблица1.Количество() И Таблица2.НайтиСтроки(Новый Структура(Пропустить, Ложь)).Количество() > 0 Тогда + Если ТребуемоеКоличествоРазличий < МаксимумРазличий Тогда + НайтиПохожиеСтрокиТаблиц(Таблица1, Таблица2, ТребуемоеКоличествоРазличий + 1, МаксимумРазличий, СоответствиеСтрокТаблицы1СтрокамТаблицы2); + КонецЕсли; КонецЕсли; Возврат СоответствиеСтрокТаблицы1СтрокамТаблицы2; КонецФункции +&НаСервере +Функция СоответствиеСтрокТаблиц(Таблица1, Таблица2) + СоответствиеНомеровСтрок = НайтиПохожиеСтрокиТаблиц(Таблица1, Таблица2); + Результат = Новый Соответствие; + Для Каждого Элемент Из СоответствиеНомеровСтрок Цикл + Результат.Вставить(Таблица1[Элемент.Ключ - 1], Таблица2[Элемент.Значение - 1]); + КонецЦикла; + Возврат Результат; +КонецФункции + &НаСервере Функция МаксимальноеКоличествоРазличийМеждуСтрокамиТаблиц(Таблица1, Таблица2) diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/Help/ru.html b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/Help/ru.html index d1844dbab..00c878746 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/Help/ru.html +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаЗаписи/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.16421"></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 11.00.9600.18427"></meta></head><body>Форма записи</body></html> \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/RecordSetModule.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/RecordSetModule.bsl index f4d5f1920..80ddd56a8 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/RecordSetModule.bsl @@ -9,18 +9,13 @@ КонецЕсли; Для Каждого Запись Из ЭтотОбъект Цикл - Запись.РазмерДанных = РазмерДанных(Запись.ВерсияОбъекта); + Запись.РазмерДанных = ВерсионированиеОбъектов.РазмерДанных(Запись.ВерсияОбъекта); ДанныеВерсии = Запись.ВерсияОбъекта.Получить(); Запись.ЕстьДанныеВерсии = ДанныеВерсии <> Неопределено; Если ПустаяСтрока(Запись.КонтрольнаяСумма) И Запись.ЕстьДанныеВерсии Тогда - Если ТипЗнч(ДанныеВерсии) = Тип("Структура") Тогда - ВерсияОбъекта = ДанныеВерсии.Объект; - Иначе - ВерсияОбъекта = ДанныеВерсии; - КонецЕсли; - Запись.КонтрольнаяСумма = ВерсионированиеОбъектов.КонтрольнаяСумма(ВерсияОбъекта); + Запись.КонтрольнаяСумма = ВерсионированиеОбъектов.КонтрольнаяСумма(ДанныеВерсии); КонецЕсли; КонецЦикла; @@ -28,12 +23,4 @@ #КонецОбласти -#Область СлужебныеПроцедурыИФункции - -Функция РазмерДанных(Данные) - Возврат Base64Значение(СериализаторXDTO.XMLСтрока(Данные)).Размер(); -КонецФункции - -#КонецОбласти - #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo b/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo index 1b73ccf7d..e62c187d0 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo @@ -245,6 +245,95 @@ <dataHistory>Use</dataHistory> <fillValue xsi:type="core:UndefinedValue"/> </attributes> + <attributes uuid="91a1bd81-e6fa-476c-85e6-317a91f6c8bc"> + <name>ВерсияВладелец</name> + <synonym> + <key>ru</key> + <value>Версия владелец</value> + </synonym> + <type> + <types>Number</types> + <numberQualifiers> + <precision>10</precision> + <nonNegative>true</nonNegative> + </numberQualifiers> + </type> + <toolTip> + <key>ru</key> + <value>Номер версии, относительно которой данная версия является "вложенной".</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:UndefinedValue"/> + </attributes> + <attributes uuid="f799e1d1-bb78-4a7a-bb1a-d79ba29acd0c"> + <name>Узел</name> + <synonym> + <key>ru</key> + <value>Узел</value> + </synonym> + <comment>Технический реквизит, используется при выгрузке данных в РИБ</comment> + <type> + <types>String</types> + <stringQualifiers> + <length>255</length> + </stringQualifiers> + </type> + <toolTip> + <key>ru</key> + <value>Представление узла-создателя версии.</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:UndefinedValue"/> + </attributes> + <attributes uuid="c7b46558-d688-4c42-ae52-f98de7923176"> + <name>Синхронизируется</name> + <synonym> + <key>ru</key> + <value>Синхронизируется</value> + </synonym> + <comment>Технический реквизит, используется при выгрузке данных в РИБ</comment> + <type> + <types>Boolean</types> + </type> + <toolTip> + <key>ru</key> + <value>Признак того, что версия синхронизируется в РИБ. Истина для всех новых версий, Ложь - для версий, созданных в прежних версиях конфигурации.</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:UndefinedValue"/> + </attributes> + <attributes uuid="31fdbb46-1df1-4b74-a54e-b922260dcca6"> + <name>Смещение</name> + <synonym> + <key>ru</key> + <value>Смещение</value> + </synonym> + <comment>Технический реквизит, используется при выгрузке данных в РИБ</comment> + <type> + <types>Number</types> + <numberQualifiers> + <precision>10</precision> + <nonNegative>true</nonNegative> + </numberQualifiers> + </type> + <toolTip> + <key>ru</key> + <value>Хранит количество "старых" (несинхронизируемых) версий объекта.</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + <fillValue xsi:type="core:UndefinedValue"/> + </attributes> <dimensions uuid="0f6f8fd9-b3af-4d06-bc47-bdad238d15b7"> <name>Объект</name> <synonym> @@ -252,7 +341,13 @@ <value>Объект</value> </synonym> <type> - <types>AnyRef</types> + <types>BusinessProcessRef</types> + <types>DocumentRef</types> + <types>ChartOfCalculationTypesRef</types> + <types>TaskRef</types> + <types>ChartOfCharacteristicTypesRef</types> + <types>ChartOfAccountsRef</types> + <types>CatalogRef</types> </type> <toolTip> <key>ru</key> diff --git a/SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаЗаписи/Form.form new file mode 100644 index 000000000..fa026eb9b --- /dev/null +++ b/SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаЗаписи/Form.form @@ -0,0 +1,316 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <items xsi:type="form:FormField"> + <name>ИмяПодсистемы</name> + <id>1</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Запись.ИмяПодсистемы</segments> + </dataPath> + <extendedTooltip> + <name>ИмяПодсистемыРасширеннаяПодсказка</name> + <id>3</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ИмяПодсистемыКонтекстноеМеню</name> + <id>2</id> + <autoFill>true</autoFill> + </contextMenu> + <type>InputField</type> + <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> + <items xsi:type="form:FormGroup"> + <name>Группа1</name> + <id>13</id> + <items xsi:type="form:FormField"> + <name>Версия</name> + <id>4</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>Запись.Версия</segments> + </dataPath> + <toolTipRepresentation>Button</toolTipRepresentation> + <extendedTooltip> + <name>ВерсияРасширеннаяПодсказка</name> + <id>6</id> + <title> + <key>ru</key> + <value><b>{Р|РР}.{П|ПП}.{З|ЗЗ}.{С|СС} </> + +где: +<b>Р</> - номер редакции (минимум 1 цифра, может занимать и больше разрядов); +<b>П</> - номер подредакции (минимум 1 цифра, может занимать и больше разрядов); +<b>З</> - номер версии (минимум 1 цифра, может занимать и больше разрядов); +<b>С</> - номер сборки (минимум 1 цифра, может занимать и больше разрядов). + +Пример: +<b>1.6.4.7</> – 7-я сборка, 4-й версии, редакции 1.6 + +Подробнее см. <link http://its.1c.ru/db/v8std#content:2149184132:hdoc>Нумерация редакций и версий</></value> + + true + Label + true + true + + Left + + + + ВерсияКонтекстноеМеню + 5 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + true + true + Normal + + + + ЭтоОсновнаяКонфигурация + 7 + true + true + + true + + + Запись.ЭтоОсновнаяКонфигурация + + Right + + ЭтоОсновнаяКонфигурацияРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + ЭтоОсновнаяКонфигурацияКонтекстноеМеню + 8 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + Группа1РасширеннаяПодсказка + 14 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Группа2 + 15 + + ВыполненаРегистрацияОтложенныхОбработчиков + 10 + true + true + + true + + + Запись.ВыполненаРегистрацияОтложенныхОбработчиков + + Right + + ВыполненаРегистрацияОтложенныхОбработчиковРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + ВыполненаРегистрацияОтложенныхОбработчиковКонтекстноеМеню + 11 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + Группа2РасширеннаяПодсказка + 16 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + + ФормаВключитьВозможностьРедактирования + 17 + true + true + + true + + + ФормаВключитьВозможностьРедактированияРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + Запись + 1 + + InformationRegisterRecordManager.ВерсииПодсистем + + + true + + + true + +
                        true
                        + true +
                        + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + + + + + diff --git a/SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаЗаписи/Module.bsl new file mode 100644 index 000000000..2cd660d32 --- /dev/null +++ b/SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаЗаписи/Module.bsl @@ -0,0 +1,23 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + Элементы.ФормаВключитьВозможностьРедактирования.Доступность = Ложь; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..a7b5d6a90 --- /dev/null +++ b/SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаСписка/Form.form @@ -0,0 +1,427 @@ + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + + ИмяПодсистемы + 16 + true + true + + true + + + Список.ИмяПодсистемы + + true + + ИмяПодсистемыРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ИмяПодсистемыКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Версия + 19 + true + true + + true + + + Список.Версия + + true + + ВерсияРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + ВерсияКонтекстноеМеню + 20 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ЭтоОсновнаяКонфигурация + 22 + true + true + + true + + + Список.ЭтоОсновнаяКонфигурация + + true + None + + ЭтоОсновнаяКонфигурацияРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + ЭтоОсновнаяКонфигурацияКонтекстноеМеню + 23 + true + + CheckBoxField + Enter + true + + CommonPicture.Подсистема + + Left + true + + + + ВыполненаРегистрацияОтложенныхОбработчиков + 25 + true + true + + true + + + Список.ВыполненаРегистрацияОтложенныхОбработчиков + + true + None + + ВыполненаРегистрацияОтложенныхОбработчиковРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + + ВыполненаРегистрацияОтложенныхОбработчиковКонтекстноеМеню + 26 + true + + CheckBoxField + Enter + true + + CommonPicture.Успешно + + Left + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
                        true
                        + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
                        + + ФормаКоманднаяПанель + -1 + + ФормаВключитьВозможностьРедактирования + 28 + true + true + + true + + + ФормаВключитьВозможностьРедактированияРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + Form.Command.ВключитьВозможностьРедактирования + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + 80 + 10 + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
                        true
                        + + InformationRegister.ВерсииПодсистем + true + true + true + true + +
                        + + ВключитьВозможностьРедактирования + + <key>ru</key> + <value>Включить возможность редактирования</value> + + 1 + + ru + Только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + + true + + + + ВключитьВозможностьРедактирования + + + DontUse + Auto + + + + + + +
                        diff --git a/SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..2cd660d32 --- /dev/null +++ b/SSL/src/InformationRegisters/ВерсииПодсистем/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,23 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ТолькоПросмотр = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + Элементы.ФормаВключитьВозможностьРедактирования.Доступность = Ложь; + +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/ВерсииПодсистем/ВерсииПодсистем.mdo b/SSL/src/InformationRegisters/ВерсииПодсистем/ВерсииПодсистем.mdo index d5d4bb6ae..eca629ad6 100644 --- a/SSL/src/InformationRegisters/ВерсииПодсистем/ВерсииПодсистем.mdo +++ b/SSL/src/InformationRegisters/ВерсииПодсистем/ВерсииПодсистем.mdo @@ -16,6 +16,8 @@ Версии этой конфигурации и родительских конфигураций на поддержке InDialog + InformationRegister.ВерсииПодсистем.Form.ФормаЗаписи + InformationRegister.ВерсииПодсистем.Form.ФормаСписка Use Active @@ -112,6 +114,25 @@ Use + + ВыполненаРегистрацияОтложенныхОбработчиков + + ru + Выполнена регистрация отложенных обработчиков + + + Boolean + + + ru + Выполнена регистрация всех отложенных обработчиков обновления (служебный реквизит) + + + + Use + Use + + ИмяПодсистемы @@ -138,4 +159,22 @@ true + + ФормаЗаписи + + ru + Форма записи + + PersonalComputer + MobileDevice + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + diff --git a/SSL/src/InformationRegisters/ВерсииПодсистемОбластейДанных/ВерсииПодсистемОбластейДанных.mdo b/SSL/src/InformationRegisters/ВерсииПодсистемОбластейДанных/ВерсииПодсистемОбластейДанных.mdo index 3f9d71b4f..a2f1f5721 100644 --- a/SSL/src/InformationRegisters/ВерсииПодсистемОбластейДанных/ВерсииПодсистемОбластейДанных.mdo +++ b/SSL/src/InformationRegisters/ВерсииПодсистемОбластейДанных/ВерсииПодсистемОбластейДанных.mdo @@ -74,6 +74,25 @@ + + ВыполненаРегистрацияОтложенныхОбработчиков + + ru + Выполнена регистрация отложенных обработчиков + + + Boolean + + + ru + Служебный реквизит + + + + Use + Use + + ИмяПодсистемы diff --git a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl index 77ce4ad0e..3d05d30a9 100644 --- a/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ГруппыЗначенийДоступа/ManagerModule.bsl @@ -386,7 +386,7 @@ КонецЕсли; Если ЗначенияДоступаСГруппами.ПоТипамСсылок.Получить(ТипЗначенияДоступа) = Неопределено Тогда - Ссылка = УправлениеДоступомСлужебный.СсылкаОбъекта(ЗначениеДоступа); + Ссылка = ПользователиСлужебный.СсылкаОбъекта(ЗначениеДоступа); Объект = ЗначениеДоступа; Иначе Ссылка = ЗначениеДоступа; @@ -458,7 +458,10 @@ Если СвойстваВидаДоступа.НесколькоГруппЗначений Тогда Значение = Объект[ИмяТабличнойЧасти].Выгрузить(); Значение.Сортировать(ИмяРеквизита); - СтарыеЗначения[ИмяТабличнойЧасти].Сортировать(ИмяРеквизита); + Если СтарыеЗначения[ИмяТабличнойЧасти] <> Неопределено Тогда + СтарыеЗначения[ИмяТабличнойЧасти] = СтарыеЗначения[ИмяТабличнойЧасти].Выгрузить(); + СтарыеЗначения[ИмяТабличнойЧасти].Сортировать(ИмяРеквизита); + КонецЕсли; Иначе Значение = Объект[ИмяРеквизита]; КонецЕсли; @@ -497,6 +500,8 @@ КонецЕсли; Если ГруппыЗначенийДоступа.Количество() = 0 Тогда ГруппыЗначенийДоступа.Добавить(); + Иначе + ГруппыЗначенийДоступа.Свернуть("ГруппаДоступа"); КонецЕсли; Для каждого Строка Из ГруппыЗначенийДоступа Цикл Запись = НовыеЗаписи.Добавить(); diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Help/ru.html b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Help/ru.html index 22b9f2826..0d45f4cbd 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 new file mode 100644 index 000000000..03c62774c --- /dev/null +++ b/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ManagerModule.bsl @@ -0,0 +1,218 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныйПрограммныйИнтерфейс + +// Заполняет регистр обновленных данных для передачи в подчиненные узлы РИБ +// +// Параметры: +// Очередь - Число - очередь обработки, в которой выполняется текущий обработчик. +// Данные - Ссылка, Массив, НаборДанных - данные, по которым нужно зарегистрировать изменения. +// Регистрация по независимому регистру сведений не поддерживается. +// ДополнительныеПараметры - Структура - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки. +// +Процедура ОтметитьВыполнениеОбработки(Очередь, Данные, ДополнительныеПараметры) Экспорт + + Если (ПараметрыСеанса.ПараметрыОбработчикаОбновления.ЗапускатьТолькоВГлавномУзле + И Не СтандартныеПодсистемыПовтИсп.ИспользуетсяРИБ()) + Или (Не ПараметрыСеанса.ПараметрыОбработчикаОбновления.ЗапускатьТолькоВГлавномУзле + И Не СтандартныеПодсистемыПовтИсп.ИспользуетсяРИБ("СФильтром")) Тогда + Возврат; + КонецЕсли; + + ТипДанных = ТипЗнч(Данные); + + Если ТипДанных = Тип("Массив") + И Данные.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Если ПараметрыСеанса.ПараметрыОбработчикаОбновления.ЗапускатьТолькоВГлавномУзле Тогда + УзлыРИБ = СтандартныеПодсистемыПовтИсп.УзлыРИБ(); + Иначе + УзлыРИБ = СтандартныеПодсистемыПовтИсп.УзлыРИБ("СФильтром"); + КонецЕсли; + + Если УзлыРИБ.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Если ДополнительныеПараметры.ЭтоДвижения + Или ДополнительныеПараметры.ЭтоНезависимыйРегистрСведений Тогда + + ИдентификаторОбъектаМетаданных = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ДополнительныеПараметры.ПолноеИмяРегистра); + + Иначе + + Если ТипДанных = Тип("Массив") Тогда + ИдентификаторОбъектаМетаданных = Неопределено; + Иначе + ИдентификаторОбъектаМетаданных = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипДанных); + КонецЕсли; + + КонецЕсли; + + НаборДанных = РегистрыСведений.ДанныеОбработанныеВЦентральномУзлеРИБ.СоздатьНаборЗаписей(); + + Если ЗначениеЗаполнено(ИдентификаторОбъектаМетаданных) Тогда + НаборДанных.Отбор.ОбъектМетаданных.Установить(ИдентификаторОбъектаМетаданных); + КонецЕсли; + + НаборДанных.Отбор.Очередь.Установить(Очередь); + + Если ДополнительныеПараметры.ЭтоДвижения Тогда + ДобавитьДанныеВНабор(УзлыРИБ, НаборДанных, Данные); + ИначеЕсли ДополнительныеПараметры.ЭтоНезависимыйРегистрСведений Тогда + + Для Каждого СтрТабл Из Данные Цикл + + СтруктураЗначенийИзмерений = Новый Структура; + ГУИД = Новый УникальныйИдентификатор; + + НаборДанных.Отбор.КлючУникальности.Установить(ГУИД); + + Для Каждого ЭлементОтбора Из Данные.Колонки Цикл + СтруктураЗначенийИзмерений.Вставить(ЭлементОтбора.Имя, СтрТабл[ЭлементОтбора.Имя]); + КонецЦикла; + + Для Каждого УзелРИБ Из УзлыРИБ Цикл + + НоваяСтрока = НаборДанных.Добавить(); + + НоваяСтрока.УзелПланаОбмена = УзелРИБ.Значение; + НоваяСтрока.ОбъектМетаданных = ИдентификаторОбъектаМетаданных; + НоваяСтрока.КлючУникальности = ГУИД; + НоваяСтрока.Очередь = Очередь; + НоваяСтрока.ЗначенияОтборовНезависимогоРегистра = Новый ХранилищеЗначения(СтруктураЗначенийИзмерений, Новый СжатиеДанных(9)); + + КонецЦикла; + + НаборДанных.Записать(); + + КонецЦикла; + + Иначе + + Если ТипЗнч(Данные) <> Тип("Массив") Тогда + + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипДанных); + + Если ОбщегоНазначения.ЭтоРегистрСведений(ОбъектМетаданных) + И ОбъектМетаданных.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый Тогда + + СтруктураЗначенийИзмерений = Новый Структура; + ГУИД = Новый УникальныйИдентификатор; + + НаборДанных.Отбор.КлючУникальности.Установить(ГУИД); + + Для Каждого ЭлементОтбора Из Данные.Отбор Цикл + СтруктураЗначенийИзмерений.Вставить(ЭлементОтбора.Имя, ЭлементОтбора.Значение); + КонецЦикла; + + Для Каждого УзелРИБ Из УзлыРИБ Цикл + + НоваяСтрока = НаборДанных.Добавить(); + + НоваяСтрока.УзелПланаОбмена = УзелРИБ.Значение; + НоваяСтрока.ОбъектМетаданных = ИдентификаторОбъектаМетаданных; + НоваяСтрока.КлючУникальности = ГУИД; + НоваяСтрока.Очередь = Очередь; + НоваяСтрока.ЗначенияОтборовНезависимогоРегистра = Новый ХранилищеЗначения(СтруктураЗначенийИзмерений, Новый СжатиеДанных(9)); + + КонецЦикла; + + НаборДанных.Записать(); + + Возврат; + + КонецЕсли; + + ДобавитьДанныеВНабор(УзлыРИБ, НаборДанных, Данные, ОбъектМетаданных); + + Иначе + + ДобавитьДанныеВНабор(УзлыРИБ, НаборДанных, Данные); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ДобавитьДанныеВНабор(УзлыРИБ, НаборДанных, Данные, ОбъектМетаданных = Неопределено) + + Если Данные = Тип("Массив") Тогда + + Для Каждого СтрокаМассива Из Данные Цикл + + НаборДанных.Отбор.Данные.Установить(СтрокаМассива); + + Если Не НаборДанных.Отбор.ОбъектМетаданных.Использование + Или Не ЗначениеЗаполнено(НаборДанных.Отбор.ОбъектМетаданных.Значение) Тогда + + НаборДанных.Отбор.ОбъектМетаданных.Установить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипЗнч(СтрокаМассива))); + + КонецЕсли; + + Для Каждого УзелРИБ Из УзлыРИБ Цикл + + НоваяСтрока = НаборДанных.Добавить(); + + НоваяСтрока.УзелПланаОбмена = УзелРИБ.Значение; + НоваяСтрока.ОбъектМетаданных = НаборДанных.Отбор.ОбъектМетаданных.Значение; + НоваяСтрока.Данные = СтрокаМассива; + НоваяСтрока.Очередь = НаборДанных.Отбор.Очередь.Значение; + + КонецЦикла; + + НаборДанных.Записать(); + + КонецЦикла; + + Иначе + + Значение = Неопределено; + + Если ОбъектМетаданных = Неопределено Тогда + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(Данные)); + КонецЕсли; + + Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(Данные)) Тогда + Значение = Данные; + ИначеЕсли ОбщегоНазначения.ЭтоОбъектСсылочногоТипа(ОбъектМетаданных) Тогда + Значение = Данные.Ссылка; + Иначе + Значение = Данные.Отбор.Регистратор.Значение; + КонецЕсли; + + НаборДанных.Отбор.Данные.Установить(Значение); + + Если Не НаборДанных.Отбор.ОбъектМетаданных.Использование + Или Не ЗначениеЗаполнено(НаборДанных.Отбор.ОбъектМетаданных.Значение) Тогда + + НаборДанных.Отбор.ОбъектМетаданных.Установить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипЗнч(Значение))); + + КонецЕсли; + + Для Каждого УзелРИБ Из УзлыРИБ Цикл + + НоваяСтрока = НаборДанных.Добавить(); + + НоваяСтрока.УзелПланаОбмена = УзелРИБ.Значение; + НоваяСтрока.ОбъектМетаданных = НаборДанных.Отбор.ОбъектМетаданных.Значение; + НоваяСтрока.Данные = Значение; + НоваяСтрока.Очередь = НаборДанных.Отбор.Очередь.Значение; + + КонецЦикла; + + НаборДанных.Записать(); + + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/RecordSetModule.bsl b/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/RecordSetModule.bsl new file mode 100644 index 000000000..75794eaed --- /dev/null +++ b/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/RecordSetModule.bsl @@ -0,0 +1,89 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПередЗаписью(Отказ, Замещение) + + Если ОбменДанными.Загрузка Тогда + + Если ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() Тогда + + Для Каждого СтрТабл Из ЭтотОбъект Цикл + + ДополнительныеПараметры = ОбновлениеИнформационнойБазы.ДополнительныеПараметрыОтметкиОбработки(); + ПолноеИмяОбъектаМетаданных = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрТабл.ОбъектМетаданных, "ПолноеИмя"); + + Если СтрНайти(ПолноеИмяОбъектаМетаданных, "РегистрНакопления") > 0 + Или СтрНайти(ПолноеИмяОбъектаМетаданных, "РегистрБухгалтерии") > 0 + Или СтрНайти(ПолноеИмяОбъектаМетаданных, "РегистрРасчета") > 0 Тогда + + ДополнительныеПараметры.ЭтоДвижения = Истина; + ДополнительныеПараметры.ПолноеИмяРегистра = ПолноеИмяОбъектаМетаданных; + ДанныеДляОтметки = СтрТабл.Данные; + + ИначеЕсли СтрНайти(ПолноеИмяОбъектаМетаданных, "РегистрСведений") > 0 Тогда + + МетаданныеРегистра = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъектаМетаданных); + + Если МетаданныеРегистра.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый Тогда + + МенеджерРегистра = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмяОбъектаМетаданных); + ДанныеДляОтметки = МенеджерРегистра.СоздатьНаборЗаписей(); + ЗначенияОтбора = СтрТабл.ЗначенияОтборовНезависимогоРегистра.Получить(); + + Для Каждого КлючЗначение Из ЗначенияОтбора Цикл + ДанныеДляОтметки.Отбор[КлючЗначение.Ключ].Установить(КлючЗначение.Значение); + КонецЦикла; + + Иначе + + ДополнительныеПараметры.ЭтоДвижения = Истина; + ДополнительныеПараметры.ПолноеИмяРегистра = ПолноеИмяОбъектаМетаданных; + ДанныеДляОтметки = СтрТабл.Данные; + + КонецЕсли; + + Иначе + ДанныеДляОтметки = СтрТабл.Данные; + КонецЕсли; + + ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(ДанныеДляОтметки, ДополнительныеПараметры, СтрТабл.Очередь); + + Если ОбменДанными.Отправитель <> Неопределено Тогда // не создание начального образа + НаборДляРегистрацииОтветаВГлавныйУзел = РегистрыСведений.ДанныеОбработанныеВЦентральномУзлеРИБ.СоздатьНаборЗаписей(); + НаборДляРегистрацииОтветаВГлавныйУзел.Отбор.УзелПланаОбмена.Установить(СтрТабл.УзелПланаОбмена); + НаборДляРегистрацииОтветаВГлавныйУзел.Отбор.ОбъектМетаданных.Установить(СтрТабл.ОбъектМетаданных); + НаборДляРегистрацииОтветаВГлавныйУзел.Отбор.Данные.Установить(СтрТабл.Данные); + НаборДляРегистрацииОтветаВГлавныйУзел.Отбор.Очередь.Установить(СтрТабл.Очередь); + НаборДляРегистрацииОтветаВГлавныйУзел.Отбор.КлючУникальности.Установить(СтрТабл.КлючУникальности); + + ПланыОбмена.ЗарегистрироватьИзменения(ОбменДанными.Отправитель, НаборДляРегистрацииОтветаВГлавныйУзел); + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + Очистить(); + + Иначе + Если Количество() > 0 + И (Не ЗначениеЗаполнено(ПараметрыСеанса.ПараметрыОбработчикаОбновления.ОчередьОтложеннойОбработки) + Или ОбщегоНазначения.ЭтоПодчиненныйУзелРИБ() + Или (ПараметрыСеанса.ПараметрыОбработчикаОбновления.ЗапускатьТолькоВГлавномУзле + И Не СтандартныеПодсистемыПовтИсп.ИспользуетсяРИБ()) + Или (Не ПараметрыСеанса.ПараметрыОбработчикаОбновления.ЗапускатьТолькоВГлавномУзле + И Не СтандартныеПодсистемыПовтИсп.ИспользуетсяРИБ("СФильтром"))) Тогда + + Отказ = Истина; + ТекстИсключения = НСтр("ru = 'Запись в РегистрСведений.ДанныеОбработанныеВЦентральномУзлеРИБ возможна только при отметке выполнения отложенного обработчика обновления информационной базы, который выполняется только в центральном узле.'"); + ВызватьИсключение ТекстИсключения; + + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ДанныеОбработанныеВЦентральномУзлеРИБ.mdo b/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ДанныеОбработанныеВЦентральномУзлеРИБ.mdo new file mode 100644 index 000000000..630b2f30b --- /dev/null +++ b/SSL/src/InformationRegisters/ДанныеОбработанныеВЦентральномУзлеРИБ/ДанныеОбработанныеВЦентральномУзлеРИБ.mdo @@ -0,0 +1,157 @@ + + + + + + + + + + + + ДанныеОбработанныеВЦентральномУзлеРИБ + + ru + Данные обработанные в центральном узле РИБ + + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ЗначенияОтборовНезависимогоРегистра + + ru + Значения отборов независимого регистра + + + ValueStorage + + + + Use + Use + + + + УзелПланаОбмена + + ru + Узел плана обмена + + + ExchangePlanRef + + + + true + Use + Use + true + + true + true + + + ОбъектМетаданных + + ru + Объект метаданных + + + CatalogRef.ИдентификаторыОбъектовМетаданных + + + + true + Use + Use + true + + true + true + + + Данные + + ru + Данные + + + AnyRef + + + + Use + Use + true + + true + true + + + Очередь + + ru + Очередь + + + Number + + 10 + + + + + Use + Use + + true + + + КлючУникальности + + ru + Ключ уникальности + + + UUID + + + + Use + + true + + diff --git a/SSL/src/InformationRegisters/ДанныеОбъектовДляРегистрацииВОбменах/ManagerModule.bsl b/SSL/src/InformationRegisters/ДанныеОбъектовДляРегистрацииВОбменах/ManagerModule.bsl index 0d7d90cff..6536d0976 100644 --- a/SSL/src/InformationRegisters/ДанныеОбъектовДляРегистрацииВОбменах/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ДанныеОбъектовДляРегистрацииВОбменах/ManagerModule.bsl @@ -1,6 +1,6 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -#Область СлужебныеПроцедурыИФункции +#Область СлужебныйПрограммныйИнтерфейс Процедура ДобавитьОбъектВФильтрРазрешенныхОбъектов(Знач Объект, Знач Получатель) Экспорт @@ -15,7 +15,6 @@ КонецПроцедуры - Функция ОбъектЕстьВРегистре(Объект, УзелИнформационнойБазы) Экспорт ТекстЗапроса = " @@ -35,8 +34,12 @@ Возврат Не Запрос.Выполнить().Пустой(); КонецФункции +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + // Процедура добавляет запись в регистр по переданным значениям структуры. -Процедура ДобавитьЗапись(СтруктураЗаписи, Загрузка = Ложь) Экспорт +Процедура ДобавитьЗапись(СтруктураЗаписи, Загрузка = Ложь) ОбменДаннымиСервер.ДобавитьЗаписьВРегистрСведений(СтруктураЗаписи, "ДанныеОбъектовДляРегистрацииВОбменах", Загрузка); diff --git a/SSL/src/InformationRegisters/ДанныеОбъектовДляРегистрацииВОбменах/ДанныеОбъектовДляРегистрацииВОбменах.mdo b/SSL/src/InformationRegisters/ДанныеОбъектовДляРегистрацииВОбменах/ДанныеОбъектовДляРегистрацииВОбменах.mdo index e005a31af..e1bcffd19 100644 --- a/SSL/src/InformationRegisters/ДанныеОбъектовДляРегистрацииВОбменах/ДанныеОбъектовДляРегистрацииВОбменах.mdo +++ b/SSL/src/InformationRegisters/ДанныеОбъектовДляРегистрацииВОбменах/ДанныеОбъектовДляРегистрацииВОбменах.mdo @@ -75,7 +75,9 @@ Ссылка
                        - AnyRef + DocumentRef + ChartOfCharacteristicTypesRef + CatalogRef diff --git a/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/Templates/ДанныеПроизводственныхКалендарей/Template.txt b/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/Templates/ДанныеПроизводственныхКалендарей/Template.txt index 6d0882689..f4a3f6f2e 100644 --- a/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/Templates/ДанныеПроизводственныхКалендарей/Template.txt +++ b/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/Templates/ДанныеПроизводственныхКалендарей/Template.txt @@ -5600,7 +5600,7 @@ - + @@ -5843,4 +5843,369 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Commands/ДатыЗапретаЗагрузкиДанных/CommandModule.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Commands/ДатыЗапретаЗагрузкиДанных/CommandModule.bsl index a69bad526..7eb3a897a 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Commands/ДатыЗапретаЗагрузкиДанных/CommandModule.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Commands/ДатыЗапретаЗагрузкиДанных/CommandModule.bsl @@ -3,9 +3,8 @@ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ДатыЗапретаЗагрузкиДанных", Истина); - ОткрытьФорму("РегистрСведений.ДатыЗапретаИзменения.Форма.ДатыЗапретаИзменения", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); + ПараметрыФормы = Новый Структура("ДатыЗапретаЗагрузкиДанных", Истина); + ОткрытьФорму("РегистрСведений.ДатыЗапретаИзменения.Форма.ДатыЗапретаИзменения", ПараметрыФормы); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Commands/ДатыЗапретаИзмененияДанных/CommandModule.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Commands/ДатыЗапретаИзмененияДанных/CommandModule.bsl index 09aeac031..d100dea40 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Commands/ДатыЗапретаИзмененияДанных/CommandModule.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Commands/ДатыЗапретаИзмененияДанных/CommandModule.bsl @@ -3,8 +3,7 @@ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ПараметрыФормы = Новый Структура; - ОткрытьФорму("РегистрСведений.ДатыЗапретаИзменения.Форма.ДатыЗапретаИзменения", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); + ОткрытьФорму("РегистрСведений.ДатыЗапретаИзменения.Форма.ДатыЗапретаИзменения"); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form index b6a89220b..288b8a2e8 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Form.form @@ -4,6 +4,108 @@ ru Даты запрета изменения данных + + ИспользованиеДатЗапретаВыключено + 431 + + ИспользованиеДатЗапретаВыключеноКартинка + 433 + + <key>ru</key> + <value>Использование дат запрета выключено картинка</value> + + true + true + + true + + + ИспользованиеДатЗапретаВыключеноКартинкаРасширеннаяПодсказка + 435 + Label + true + true + + Left + + + + ИспользованиеДатЗапретаВыключеноКартинкаКонтекстноеМеню + 434 + true + + 2 + true + 1 + true + + + CommonPicture.Предупреждение + + + + + ИспользованиеДатЗапретаВыключеноНадпись + 436 + + <key>ru</key> + <value>Использование дат запрета выключено в настройках программы.</value> + + true + true + + true + + + ИспользованиеДатЗапретаВыключеноНадписьРасширеннаяПодсказка + 438 + Label + true + true + + Left + + + + ИспользованиеДатЗапретаВыключеноНадписьКонтекстноеМеню + 437 + true + + Label + true + true + + Left + + + true + + true + + + <key>ru</key> + <value>Использование дат запрета выключено</value> + + + ИспользованиеДатЗапретаВыключеноРасширеннаяПодсказка + 432 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + УстановкаДатыЗапрета 201 @@ -582,6 +684,7 @@ Vertical auto + false @@ -832,10 +935,6 @@ ДатаЗапрета 227 - - <key>ru</key> - <value> </value> - true true @@ -907,6 +1006,7 @@ Vertical auto + false @@ -969,6 +1069,7 @@ Vertical auto + false true @@ -1195,6 +1296,7 @@ Page auto + false @@ -1257,6 +1359,7 @@ Vertical auto + false true @@ -1348,6 +1451,7 @@ Page Vertical + false @@ -1410,6 +1514,7 @@ Vertical auto + false true @@ -1467,6 +1572,7 @@ Vertical auto + false @@ -1484,7 +1590,6 @@ ДатыЗапрета None - Change Copy EndEdit HierarchicalList @@ -1750,7 +1855,7 @@ Left
                        - Form.Command.ДатыЗапретаИзменить + Form.Item.ДатыЗапрета.StandardCommand.Change Normal Auto true @@ -1950,7 +2055,7 @@ Left - Form.Command.ДатыЗапретаИзменить + Form.Item.ДатыЗапрета.StandardCommand.Change Normal Auto true @@ -2066,6 +2171,7 @@ Vertical auto + false true @@ -2123,6 +2229,7 @@ Vertical auto + false true @@ -2266,6 +2373,10 @@ ChoiceProcessing ОбработкаВыбора + + NotificationProcessing + ОбработкаОповещения + BeforeClose ПередЗакрытием @@ -3240,32 +3351,6 @@ DontUse Auto
                        - - ДатыЗапретаИзменить - - <key>ru</key> - <value>Изменить</value> - - 7 - - ru - Изменить - - - true - - F2 - - StdPicture.Change - - - - ДатыЗапретаИзменить - - - DontUse - Auto - ПоказатьОтчет diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl index eb083243e..f72d607ef 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ПользователиПродолжитьДобавление; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -29,9 +33,16 @@ Если Параметры.ДатыЗапретаЗагрузкиДанных Тогда Если НЕ СвойстваРазделов.ДатыЗапретаЗагрузкиВнедрены Тогда - ВызватьИсключение НСтр("ru = 'Даты запрета загрузки данных не применяются.'"); + ВызватьИсключение ДатыЗапретаИзмененияСлужебный.ТекстОшибкиДатыЗапретаЗагрузкиНеВнедрены(); КонецЕсли; + Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда + ВызватьИсключение НСтр("ru = 'Недостаточно прав для работы с датами запрета загрузки.'"); + КонецЕсли; + + Элементы.ИспользованиеДатЗапретаВыключеноНадпись.Заголовок = + НСтр("ru = 'Использование дат запрета загрузки выключено в настройках программы.'"); + Заголовок = НСтр("ru = 'Даты запрета загрузки данных'"); Элементы.УстановкаДатыЗапрета.СписокВыбора.НайтиПоЗначению("НетЗапрета").Представление = НСтр("ru = 'Нет запрета загрузки данных'"); @@ -62,6 +73,13 @@ КонецЦикла; Элементы.Пользователи.КартинкаСтрок = БиблиотекаКартинок.ПиктограммыПланОбменаУзел; Иначе + Если Не Пользователи.РолиДоступны("ДобавлениеИзменениеДатЗапретаИзменения") Тогда + ВызватьИсключение НСтр("ru = 'Недостаточно прав для работы с датами запрета изменения.'"); + КонецЕсли; + + Элементы.ИспользованиеДатЗапретаВыключеноНадпись.Заголовок = + НСтр("ru = 'Использование дат запрета изменения выключено в настройках программы.'"); + ЗначениеДляВсехПользователей = Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей; СписокТиповПользователей.Добавить( @@ -131,6 +149,21 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ВРег(ИмяСобытия) <> ВРег("Запись_НаборКонстант") Тогда + Возврат; + КонецЕсли; + + Если ВРег(Источник) = ВРег("ИспользоватьДатыЗапретаЗагрузки") + Или ВРег(Источник) = ВРег("ИспользоватьДатыЗапретаИзменения") Тогда + + ПодключитьОбработчикОжидания("ПриИзмененииИспользованияДатЗапрета", 0.1, Истина); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) @@ -166,6 +199,24 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы +&НаКлиенте +Процедура ПриИзмененииИспользованияДатЗапрета() + + ПриИзмененииИспользованияДатЗапретаНаСервере(); + +КонецПроцедуры + +&НаСервере +Процедура ПриИзмененииИспользованияДатЗапретаНаСервере() + + Элементы.ИспользованиеДатЗапретаВыключено.Видимость = + Параметры.ДатыЗапретаЗагрузкиДанных + И Не Константы.ИспользоватьДатыЗапретаЗагрузки.Получить() + Или Не Параметры.ДатыЗапретаЗагрузкиДанных + И Не Константы.ИспользоватьДатыЗапретаИзменения.Получить(); + +КонецПроцедуры + &НаКлиенте Процедура УстановкаДатыЗапретаОчистка(Элемент, СтандартнаяОбработка) @@ -387,7 +438,7 @@ Отказ = Истина; ИначеЕсли Поле <> Элементы.ПользователиПолноеПредставление И НЕ ЗначениеЗаполнено(ТекущиеДанные.Представление) Тогда - // Все значения, кроме преопределенного значения "<Для всех пользователей>", + // Все значения, кроме предопределенного значения "<Для всех пользователей>", // должны быть заполнены до установки описания или даты запрета. Элемент.ТекущийЭлемент = Элементы.ПользователиПолноеПредставление; ОбщегоНазначенияКлиентСервер.СообщитьПользователю( @@ -664,6 +715,11 @@ &НаКлиенте Процедура ДатыЗапретаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) + Если Не Элементы.ДатыЗапретаДобавить.Доступность Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + Если Копирование ИЛИ ВсеРазделыБезОбъектов ИЛИ СпособУказанияДатыЗапрета = "ПоРазделам" Тогда @@ -717,6 +773,11 @@ &НаКлиенте Процедура ДатыЗапретаПередНачаломИзменения(Элемент, Отказ) + Если Не Элементы.ДатыЗапретаИзменить.Доступность Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + ТекущиеДанные = Элемент.ТекущиеДанные; Поле = Элементы.ДатыЗапрета.ТекущийЭлемент; @@ -985,8 +1046,9 @@ КонецЦикла; Если ОбъектыДляДобавления.Количество() > 0 Тогда + ЗаписатьДаты = ТекущийПользователь <> Неопределено; - Если ТекущийПользователь <> Неопределено Тогда + Если ЗаписатьДаты Тогда Комментарий = КомментарийТекущегоПользователя(ЭтотОбъект); ЗаблокироватьИЗаписатьПустыеДаты( @@ -1005,6 +1067,8 @@ ОписаниеОбъекта.ОписаниеДатыЗапретаПредставление = ПредставлениеОписанияДатыЗапрета(ОписаниеОбъекта); + + ОписаниеОбъекта.ЗаписьСуществует = ЗаписатьДаты; КонецЦикла; Если ИдентификаторРаздела <> Неопределено Тогда @@ -1128,6 +1192,8 @@ Новый ОписаниеОповещения("ОбновитьЗавершение", ЭтотОбъект), ТекстВопроса, РежимДиалогаВопрос.ДаНет); + Иначе + ОбновитьЗавершение(КодВозвратаДиалога.Да, Неопределено); КонецЕсли; КонецПроцедуры @@ -1152,19 +1218,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ДатыЗапретаИзменить(Команда) - - ТекущиеДанные = Элементы.ДатыЗапрета.ТекущиеДанные; - Если ТекущиеДанные = Неопределено Тогда - Отказ = Истина; - Возврат; - КонецЕсли; - - Элементы.ДатыЗапрета.ИзменитьСтроку(); - -КонецПроцедуры - &НаКлиенте Процедура ПодобратьПользователей(Команда) @@ -1519,6 +1572,8 @@ &НаСервере Процедура ОбновитьНаСервере() + ПриИзмененииИспользованияДатЗапретаНаСервере(); + // Расчет установки даты запрета. УстановкаДатыЗапрета = ТекущаяУстановкаДатыЗапрета(Параметры.ДатыЗапретаЗагрузкиДанных); // Установка видимости по рассчитанной установке дате запрета. @@ -1539,7 +1594,7 @@ Элементы.Пользователи.ТекущаяСтрока = НайденныеСтроки[0].ПолучитьИдентификатор(); ТекущийПользователь = СтарыйПользователь; КонецЕсли; - + ПрочитатьДанныеПользователя(ЭтотОбъект); КонецПроцедуры @@ -1697,8 +1752,6 @@ &НаСервере Процедура ПрочитатьПользователей() - УстановитьПривилегированныйРежим(Истина); - НачатьТранзакцию(); Попытка Запрос = Новый Запрос; @@ -1869,6 +1922,7 @@ ПередаваемыеПараметры.Вставить("ИдентификаторФормы", Контекст.УникальныйИдентификатор); ПередаваемыеПараметры.Вставить("СпособУказанияДатыЗапрета", Контекст.СпособУказанияДатыЗапрета); ПередаваемыеПараметры.Вставить("ЗначениеДляВсехПользователей", Контекст.ЗначениеДляВсехПользователей); + ПередаваемыеПараметры.Вставить("ДатыЗапретаЗагрузкиДанных", Контекст.Параметры.ДатыЗапретаЗагрузкиДанных); ПередаваемыеПараметры.Вставить("ЗначенияКлючейЗаблокированныхЗаписей", ПолучитьЗначенияКлючейЗаблокированныхЗаписей(Контекст)); @@ -1934,8 +1988,6 @@ &НаСервереБезКонтекста Процедура ПрочитатьДанныеПользователяНаСервере(Знач Контекст, ДанныеПользователя, ПоказыватьРазделыТекущегоПользователя) - УстановитьПривилегированныйРежим(Истина); - РазблокироватьВсеЗаписиНаСервере(Контекст.ЗначенияКлючейЗаблокированныхЗаписей, Контекст.ИдентификаторФормы); ПоказыватьРазделыТекущегоПользователя @@ -1950,7 +2002,8 @@ Контекст.ВсеРазделыБезОбъектов, Контекст.РазделыБезОбъектов, Контекст.ЗначениеДляВсехПользователей, - Контекст.НачалоДня); + Контекст.НачалоДня, + Контекст.ДатыЗапретаЗагрузкиДанных); Иначе ПрочитанныеДатыЗапрета = ПрочитатьДанныеПользователяБезРазделов( Контекст.Пользователь, Контекст.ЕдинственныйРаздел, Контекст.ЗначениеДляВсехПользователей); @@ -1980,7 +2033,8 @@ Знач ВсеРазделыБезОбъектов, Знач РазделыБезОбъектов, Знач ЗначениеДляВсехПользователей, - Знач НачалоДня) + Знач НачалоДня, + Знач ДатыЗапретаЗагрузкиДанных) // Подготовка дерева значений дат запрета изменения // с первым уровнем по разделам. @@ -1991,6 +2045,7 @@ Запрос.УстановитьПараметр("ВсеРазделыБезОбъектов", ВсеРазделыБезОбъектов); Запрос.УстановитьПараметр("ОбщаяДатаПредставление", ТекстПредставленияОбщейДаты()); Запрос.УстановитьПараметр("ЗначениеДляВсехПользователей", ЗначениеДляВсехПользователей); + Запрос.УстановитьПараметр("ДатыЗапретаЗагрузкиДанных", ДатыЗапретаЗагрузкиДанных); Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | Разделы.Ссылка, @@ -2023,14 +2078,24 @@ | ИЗ | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения | ГДЕ - | ДатыЗапретаИзменения.Раздел <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка)) КАК Разделы + | ДатыЗапретаИзменения.Раздел <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) + | И ДатыЗапретаИзменения.Пользователь <> НЕОПРЕДЕЛЕНО + | И ВЫБОР + | КОГДА ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.Пользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ГруппыПользователей) + | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ВнешниеПользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ГруппыВнешнихПользователей) + | ИЛИ ДатыЗапретаИзменения.Пользователь = ЗНАЧЕНИЕ(Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей) + | ТОГДА &ДатыЗапретаЗагрузкиДанных = ЛОЖЬ + | ИНАЧЕ &ДатыЗапретаЗагрузкиДанных = ИСТИНА + | КОНЕЦ) КАК Разделы | |ИНДЕКСИРОВАТЬ ПО | Разделы.Ссылка |; | |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ + |ВЫБРАТЬ РАЗРЕШЕННЫЕ | Разделы.Ссылка КАК Раздел, | Разделы.Предопределенный КАК Предопределенный, | Разделы.Представление КАК РазделПредставление, @@ -2106,6 +2171,10 @@ КонецЕсли; КонецЕсли; Строка.ПолноеПредставление = Строка.Представление; + Для Каждого Подстрока Из Строка.Строки Цикл + Подстрока.ДатаЗапрета = ДатыЗапретаИзмененияСлужебный.ДатаЗапретаПоОписанию( + Подстрока.ОписаниеДатыЗапрета, Подстрока.ДатаЗапрета, НачалоДня); + КонецЦикла; КонецЦикла; Возврат ПрочитанныеДатыЗапрета; @@ -2124,7 +2193,7 @@ Запрос.УстановитьПараметр("ОбщаяДатаПредставление", ТекстПредставленияОбщейДаты()); Запрос.УстановитьПараметр("ЗначениеДляВсехПользователей", ЗначениеДляВсехПользователей); Запрос.Текст = - "ВЫБРАТЬ + "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) КАК Раздел, | ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) КАК Объект, | &ОбщаяДатаПредставление КАК ПолноеПредставление, @@ -2305,8 +2374,6 @@ &НаСервере Функция ЗаменитьПользователяНабораЗаписей(СтарыйПользователь, НовыйПользователь) - УстановитьПривилегированныйРежим(Истина); - Если СтарыйПользователь <> Неопределено Тогда ЗаблокироватьНаборЗаписейПользователя(СтарыйПользователь); КонецЕсли; @@ -2352,8 +2419,6 @@ &НаСервере Процедура УдалитьНаборЗаписейПользователя(Пользователь) - УстановитьПривилегированныйРежим(Истина); - ЗаблокироватьНаборЗаписейПользователя(Пользователь); НаборЗаписей = РегистрыСведений.ДатыЗапретаИзменения.СоздатьНаборЗаписей(); @@ -2367,8 +2432,6 @@ &НаСервереБезКонтекста Процедура ЗаписатьКомментарий(Пользователь, Комментарий); - УстановитьПривилегированныйРежим(Истина); - НаборЗаписей = РегистрыСведений.ДатыЗапретаИзменения.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Пользователь.Установить(Пользователь, Истина); НаборЗаписей.Прочитать(); @@ -2523,8 +2586,6 @@ &НаСервере Функция ЗаменитьОбъектВЗаписиПользователяНаСервере(Знач Раздел, Знач СтарыйОбъект, Знач НовыйОбъект, Знач Пользователь, ТекущиеЗначенияСвойств) - УстановитьПривилегированныйРежим(Истина); - // Блокировка новой записи и проверка, что ее не существует. ЗаблокироватьЗаписьПользователя(ЭтотОбъект, Раздел, НовыйОбъект, Пользователь); @@ -2667,8 +2728,6 @@ &НаСервереБезКонтекста Процедура ЗаписатьДатуЗапретаСОписанием(Знач Раздел, Знач Объект, Знач Пользователь, Знач ДатаЗапрета, Знач ВнутреннееОписаниеДатыЗапрета, Знач Комментарий) - УстановитьПривилегированныйРежим(Истина); - МенеджерЗаписи = РегистрыСведений.ДатыЗапретаИзменения.СоздатьМенеджерЗаписи(); МенеджерЗаписи.Раздел = Раздел; МенеджерЗаписи.Объект = Объект; @@ -2683,8 +2742,6 @@ &НаСервере Процедура УдалитьЗаписьПользователя(Знач Раздел, Знач Объект, Знач Пользователь) - УстановитьПривилегированныйРежим(Истина); - МенеджерЗаписи = РегистрыСведений.ДатыЗапретаИзменения.СоздатьМенеджерЗаписи(); Если ТипЗнч(Объект) = Тип("Массив") Тогда @@ -2922,16 +2979,19 @@ КонецПроцедуры &НаКлиенте -Процедура ДатыЗапретаУстановитьДоступностьКоманд(Знач Доступность) +Процедура ДатыЗапретаУстановитьДоступностьКоманд(Знач ДоступностьКоманд) - Элементы.ДатыЗапретаИзменить.Доступность = Доступность; + Элементы.ДатыЗапретаИзменить.Доступность = ДоступностьКоманд; + Элементы.ДатыЗапретаКонтекстноеМенюИзменить.Доступность = ДоступностьКоманд; Если СпособУказанияДатыЗапрета = "ПоОбъектам" Тогда - Доступность = Истина; + ДоступностьКоманд = Истина; КонецЕсли; - Элементы.ДатыЗапретаПодобрать.Доступность = Доступность; - Элементы.ДатыЗапретаДобавить.Доступность = Доступность; + Элементы.ДатыЗапретаПодобрать.Доступность = ДоступностьКоманд; + + Элементы.ДатыЗапретаДобавить.Доступность = ДоступностьКоманд; + Элементы.ДатыЗапретаКонтекстноеМенюДобавить.Доступность = ДоступностьКоманд; КонецПроцедуры @@ -3578,7 +3638,19 @@ &НаКлиенте Процедура ВыбратьРазделыЗавершение(Результат, РазделыДляОтметки) Экспорт - Если Результат = Ложь Тогда + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + НетОтмеченных = Истина; + Для Каждого ЭлементСписка Из РазделыДляОтметки Цикл + Если ЭлементСписка.Пометка Тогда + НетОтмеченных = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + + Если НетОтмеченных Тогда Возврат; КонецЕсли; @@ -3613,6 +3685,8 @@ ЭлементДанных.ОписаниеДатыЗапретаПредставление = ПредставлениеОписанияДатыЗапрета(ЭлементДанных); + + ЭлементДанных.ЗаписьСуществует = Истина; КонецЕсли; КонецЦикла; diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form index 00ecd1f4e..80ee6ec1b 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/РедактированиеДатыЗапрета/Form.form @@ -267,10 +267,6 @@ <items xsi:type="form:FormField"> <name>ДатаЗапрета</name> <id>24</id> - <title> - <key>ru</key> - <value> </value> - true true @@ -342,6 +338,7 @@ Vertical auto + false @@ -404,6 +401,7 @@ Vertical auto + false true @@ -630,6 +628,7 @@ Page auto + false @@ -692,6 +691,7 @@ Vertical auto + false true @@ -781,6 +781,7 @@ Page Vertical + false @@ -843,6 +844,7 @@ Vertical auto + false true diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Module.bsl index 33d4e88f0..aa88ecf1f 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ФормаСписка/Module.bsl @@ -20,19 +20,19 @@ Порядок.Элементы.Очистить(); ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); - ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокПользователь.Имя); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Пользователь"); ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; ЭлементПорядка.Использование = Истина; ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); - ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокРаздел.Имя); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Раздел"); ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; ЭлементПорядка.Использование = Истина; ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); - ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокОбъект.Имя); + ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Объект"); ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; ЭлементПорядка.Использование = Истина; diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Help/ru.html b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Help/ru.html index 09e1506a0..50b0e6f03 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 41afa8d0a..639686172 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 new file mode 100644 index 000000000..afb072cdb --- /dev/null +++ b/SSL/src/InformationRegisters/ДополнительныеСведения/RecordSetModule.bsl @@ -0,0 +1,25 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПередЗаписью(Отказ, Замещение) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда + ЭлементОтбора = ЭтотОбъект.Отбор.Найти("Объект"); + Если ЭлементОтбора <> Неопределено Тогда + МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); + УстановитьПривилегированныйРежим(Истина); + МодульВерсионированиеОбъектов.ЗаписатьВерсиюОбъекта(ЭлементОтбора.Значение); + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ДополнительныеСведения/ДополнительныеСведения.mdo b/SSL/src/InformationRegisters/ДополнительныеСведения/ДополнительныеСведения.mdo index 0b543ad3a..3533f7e3f 100644 --- a/SSL/src/InformationRegisters/ДополнительныеСведения/ДополнительныеСведения.mdo +++ b/SSL/src/InformationRegisters/ДополнительныеСведения/ДополнительныеСведения.mdo @@ -91,7 +91,10 @@ BusinessProcessRef DocumentRef + ChartOfCalculationTypesRef TaskRef + ChartOfCharacteristicTypesRef + ChartOfAccountsRef CatalogRef diff --git a/SSL/src/InformationRegisters/ЗависимостиПравДоступа/ЗависимостиПравДоступа.mdo b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/ЗависимостиПравДоступа.mdo index 22f6817a9..b8be8ef1b 100644 --- a/SSL/src/InformationRegisters/ЗависимостиПравДоступа/ЗависимостиПравДоступа.mdo +++ b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/ЗависимостиПравДоступа.mdo @@ -82,7 +82,14 @@ Тип ведущей таблицы, заданный пустой ссылкой - AnyRef + ExchangePlanRef + BusinessProcessRef + DocumentRef + ChartOfCalculationTypesRef + TaskRef + ChartOfCharacteristicTypesRef + ChartOfAccountsRef + CatalogRef ru diff --git a/SSL/src/InformationRegisters/ЗамерыВремени/Help/ru.html b/SSL/src/InformationRegisters/ЗамерыВремени/Help/ru.html index df7ea2a2f..418392a56 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 eb11a4e58..892f7fa1c 100644 --- a/SSL/src/InformationRegisters/ЗамерыВремени/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗамерыВремени/ManagerModule.bsl @@ -43,7 +43,16 @@ КонецФункции Функция ПолучитьТопAPDEX(ДатаНачала, ДатаОкончания, ПериодАгрегации, Количество) Экспорт + + МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + Запрос = Новый Запрос; + Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + + НастроечнаяТаблицаИнтервалов = НастроечнаяТаблицаИнтервалов(); + + ТаблицаИнтервалов = ТаблицаИнтерваловПоНастройкам(НастроечнаяТаблицаИнтервалов); + ТекстЗапросаПоИнтервалам = ЧастьТекстаЗапросаПоИнтервалам(ТаблицаИнтервалов, "Замеры", "ВремяВыполнения"); Если Количество > 0 Тогда Запрос.Текст = " @@ -52,16 +61,16 @@ | КлючевыеОперации.ЦелевоеВремя КАК ЦелевоеВремя, | КОЛИЧЕСТВО(*) КАК КоличествоЗамеров, | СУММА(ВЫБОР - | КОГДА Замеры.ВремяВыполнения <= КлючевыеОперации.ЦелевоеВремя ТОГДА 1 - | ИНАЧЕ 0 + | КОГДА Замеры.ВремяВыполнения <= КлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 | КОНЕЦ) КАК N_T, | СУММА(ВЫБОР - | КОГДА Замеры.ВремяВыполнения > КлючевыеОперации.ЦелевоеВремя И Замеры.ВремяВыполнения <= 4 * КлючевыеОперации.ЦелевоеВремя ТОГДА 1 - | ИНАЧЕ 0 + | КОГДА Замеры.ВремяВыполнения > КлючевыеОперации.ЦелевоеВремя И Замеры.ВремяВыполнения <= 4 * КлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 | КОНЕЦ) КАК N_T_4T, | СУММА(ВЫБОР - | КОГДА Замеры.ВремяВыполнения > 4 * КлючевыеОперации.ЦелевоеВремя ТОГДА 1 - | ИНАЧЕ 0 + | КОГДА Замеры.ВремяВыполнения > 4 * КлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 | КОНЕЦ) КАК N_4T |ПОМЕСТИТЬ | Выборка @@ -88,6 +97,9 @@ | Выборка.КлючеваяОперацияСсылка, | Выборка.ЦелевоеВремя, | Выборка.КоличествоЗамеров, + | Выборка.N_T, + | Выборка.N_T_4T, + | Выборка.N_4T, | ВЫРАЗИТЬ((Выборка.N_T + Выборка.N_T_4T/2)/Выборка.КоличествоЗамеров КАК ЧИСЛО(15,3)) КАК APDEX, | ВЫРАЗИТЬ((Выборка.N_4T + Выборка.N_T_4T/2)/ВсегоЗамеров.КоличествоЗамеров КАК ЧИСЛО(15,3)) КАК APDEXВлияние |ПОМЕСТИТЬ @@ -101,22 +113,45 @@ |УПОРЯДОЧИТЬ ПО | (Выборка.N_4T + Выборка.N_T_4T/2)/ВсегоЗамеров.КоличествоЗамеров УБЫВ |; + |"; + Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); + Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); + Запрос.УстановитьПараметр("ПериодАгрегации", ПериодАгрегации); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "%Количество", Формат(Количество, "ЧН=0; ЧГ=")); + Запрос.Выполнить(); + + РассчитатьСтатистикуОпераций(Запрос, ДатаНачала, ДатаОкончания, ПериодАгрегации); + + Запрос.Текст = " |ВЫБРАТЬ | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) КАК Период, | СпрКлючевыеОперации.Наименование КАК КлючеваяОперация, | КлючевыеОперации.ЦелевоеВремя КАК ЦелевоеВремя, | СУММА(ВЫБОР - | КОГДА Замеры.ВремяВыполнения <= КлючевыеОперации.ЦелевоеВремя ТОГДА 1 - | ИНАЧЕ 0 + | КОГДА Замеры.ВремяВыполнения <= КлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 | КОНЕЦ) КАК N_T, | СУММА(ВЫБОР - | КОГДА Замеры.ВремяВыполнения > КлючевыеОперации.ЦелевоеВремя И Замеры.ВремяВыполнения <= 4 * КлючевыеОперации.ЦелевоеВремя ТОГДА 1 - | ИНАЧЕ 0 + | КОГДА Замеры.ВремяВыполнения > КлючевыеОперации.ЦелевоеВремя И Замеры.ВремяВыполнения <= 4 * КлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 | КОНЕЦ) КАК N_T_4T, | СУММА(ВЫБОР - | КОГДА Замеры.ВремяВыполнения > 4 * КлючевыеОперации.ЦелевоеВремя ТОГДА 1 - | ИНАЧЕ 0 - | КОНЕЦ) КАК N_4T + | КОГДА Замеры.ВремяВыполнения > 4 * КлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК N_4T, + | //%Интервалы + | ТаблицаСтатистики.Максимум КАК ВремяВыполненияМаксимум, + | ТаблицаСтатистики.Медиана КАК ВремяВыполненияМедиана, + | ТаблицаСтатистики.Минимум КАК ВремяВыполненияМинимум, + | ТаблицаСтатистики.Среднее КАК ВремяВыполненияСреднее, + | ТаблицаСтатистики.СтандартноеОтклонение КАК ВремяВыполненияСтандартноеОтклонение, + | ТаблицаСтатистики.КоличествоОпераций КАК КоличествоОпераций, + | ТаблицаСтатистики.Максимум90 КАК ВремяВыполненияМаксимум90, + | ТаблицаСтатистики.Медиана90 КАК ВремяВыполненияМедиана90, + | ТаблицаСтатистики.Минимум90 КАК ВремяВыполненияМинимум90, + | ТаблицаСтатистики.Среднее90 КАК ВремяВыполненияСреднее90, + | ТаблицаСтатистики.СтандартноеОтклонение90 КАК ВремяВыполненияСтандартноеОтклонение90, + | ТаблицаСтатистики.КоличествоОпераций90 КАК КоличествоОпераций90 |ИЗ | РегистрСведений.ЗамерыВремени КАК Замеры |ВНУТРЕННЕЕ СОЕДИНЕНИЕ @@ -127,20 +162,60 @@ | Справочник.КлючевыеОперации КАК СпрКлючевыеОперации |ПО | Замеры.КлючеваяОперация = СпрКлючевыеОперации.Ссылка + |ЛЕВОЕ СОЕДИНЕНИЕ + | ТаблицаСтатистики КАК ТаблицаСтатистики + |ПО + | ТаблицаСтатистики.КлючеваяОперация = Замеры.КлючеваяОперация + | И ТаблицаСтатистики.Период = ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) |ГДЕ | Замеры.ДатаНачалаЗамера МЕЖДУ &ДатаНачала И &ДатаОкончания |СГРУППИРОВАТЬ ПО | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200), | СпрКлючевыеОперации.Наименование, - | КлючевыеОперации.ЦелевоеВремя + | КлючевыеОперации.ЦелевоеВремя, + | ТаблицаСтатистики.Максимум, + | ТаблицаСтатистики.Медиана, + | ТаблицаСтатистики.Минимум, + | ТаблицаСтатистики.Среднее, + | ТаблицаСтатистики.СтандартноеОтклонение, + | ТаблицаСтатистики.КоличествоОпераций, + | ТаблицаСтатистики.Максимум90, + | ТаблицаСтатистики.Медиана90, + | ТаблицаСтатистики.Минимум90, + | ТаблицаСтатистики.Среднее90, + | ТаблицаСтатистики.СтандартноеОтклонение90, + | ТаблицаСтатистики.КоличествоОпераций90 |УПОРЯДОЧИТЬ ПО | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) |;"; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "//%Интервалы", ТекстЗапросаПоИнтервалам); Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); Запрос.УстановитьПараметр("ПериодАгрегации", ПериодАгрегации); - Запрос.Текст = СтрЗаменить(Запрос.Текст, "%Количество", Формат(Количество, "ЧН=0; ЧГ=")); Иначе + МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + + Запрос = Новый Запрос; + Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + + Запрос.Текст = " + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | Замеры.КлючеваяОперация КАК КлючеваяОперацияСсылка + |ПОМЕСТИТЬ + | ВыборкаХудшиеОперации + |ИЗ + | РегистрСведений.ЗамерыВремени КАК Замеры + |ГДЕ + | Замеры.ДатаНачалаЗамера МЕЖДУ &ДатаНачала И &ДатаОкончания + |"; + Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); + Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); + + Запрос.Выполнить(); + + РассчитатьСтатистикуОпераций(Запрос, ДатаНачала, ДатаОкончания, ПериодАгрегации); + Запрос.Текст = " |ВЫБРАТЬ | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) КАК Период, @@ -157,22 +232,53 @@ | СУММА(ВЫБОР | КОГДА Замеры.ВремяВыполнения > 4 * СпрКлючевыеОперации.ЦелевоеВремя ТОГДА 1 | ИНАЧЕ 0 - | КОНЕЦ) КАК N_4T + | КОНЕЦ) КАК N_4T, + | //%Интервалы + | ТаблицаСтатистики.Максимум КАК ВремяВыполненияМаксимум, + | ТаблицаСтатистики.Медиана КАК ВремяВыполненияМедиана, + | ТаблицаСтатистики.Минимум КАК ВремяВыполненияМинимум, + | ТаблицаСтатистики.Среднее КАК ВремяВыполненияСреднее, + | ТаблицаСтатистики.СтандартноеОтклонение КАК ВремяВыполненияСтандартноеОтклонение, + | ТаблицаСтатистики.КоличествоОпераций КАК КоличествоОпераций, + | ТаблицаСтатистики.Максимум90 КАК ВремяВыполненияМаксимум90, + | ТаблицаСтатистики.Медиана90 КАК ВремяВыполненияМедиана90, + | ТаблицаСтатистики.Минимум90 КАК ВремяВыполненияМинимум90, + | ТаблицаСтатистики.Среднее90 КАК ВремяВыполненияСреднее90, + | ТаблицаСтатистики.СтандартноеОтклонение90 КАК ВремяВыполненияСтандартноеОтклонение90, + | ТаблицаСтатистики.КоличествоОпераций90 КАК КоличествоОпераций90 |ИЗ | РегистрСведений.ЗамерыВремени КАК Замеры |ВНУТРЕННЕЕ СОЕДИНЕНИЕ | Справочник.КлючевыеОперации КАК СпрКлючевыеОперации |ПО | Замеры.КлючеваяОперация = СпрКлючевыеОперации.Ссылка + |ЛЕВОЕ СОЕДИНЕНИЕ + | ТаблицаСтатистики КАК ТаблицаСтатистики + |ПО + | ТаблицаСтатистики.КлючеваяОперация = Замеры.КлючеваяОперация + | И ТаблицаСтатистики.Период = ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) |ГДЕ | Замеры.ДатаНачалаЗамера МЕЖДУ &ДатаНачала И &ДатаОкончания |СГРУППИРОВАТЬ ПО | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200), | СпрКлючевыеОперации.Наименование, - | СпрКлючевыеОперации.ЦелевоеВремя + | СпрКлючевыеОперации.ЦелевоеВремя, + | ТаблицаСтатистики.Максимум, + | ТаблицаСтатистики.Медиана, + | ТаблицаСтатистики.Минимум, + | ТаблицаСтатистики.Среднее, + | ТаблицаСтатистики.СтандартноеОтклонение, + | ТаблицаСтатистики.КоличествоОпераций, + | ТаблицаСтатистики.Максимум90, + | ТаблицаСтатистики.Медиана90, + | ТаблицаСтатистики.Минимум90, + | ТаблицаСтатистики.Среднее90, + | ТаблицаСтатистики.СтандартноеОтклонение90, + | ТаблицаСтатистики.КоличествоОпераций90 |УПОРЯДОЧИТЬ ПО | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) |;"; + Запрос.Текст = СтрЗаменить(Запрос.Текст, "//%Интервалы", ТекстЗапросаПоИнтервалам); Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); Запрос.УстановитьПараметр("ПериодАгрегации", ПериодАгрегации); @@ -183,6 +289,367 @@ Возврат РезультатЗапроса; КонецФункции +Процедура РассчитатьСтатистикуОпераций(Запрос, ДатаНачала, ДатаОкончания, ПериодАгрегации) + + Запрос.Текст = " + |ВЫБРАТЬ + | КлючеваяОперацияСсылка + |ИЗ + | ВыборкаХудшиеОперации КАК КлючевыеОперации + |"; + + РезультатЗапроса = Запрос.Выполнить(); + + ЗапросСтатистики = Новый Запрос; + ЗапросСтатистики.Текст = " + |ВЫБРАТЬ + | ВремяВыполнения + |ИЗ + | РегистрСведений.ЗамерыВремени КАК Замеры + |ГДЕ + | Замеры.КлючеваяОперация = &КлючеваяОперация + | И Замеры.ДатаНачалаЗамера >= &ДатаНачала + | И Замеры.ДатаНачалаЗамера < &ДатаОкончания + |УПОРЯДОЧИТЬ ПО + | ВремяВыполнения + |"; + + ТаблицаСтатистики = ТаблицаСтатистикиИнициализировать(); + + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + ДатаНачалаЦикла = ДатаНачала; + Пока ДатаНачалаЦикла < ДатаОкончания Цикл + ЗапросСтатистики.УстановитьПараметр("КлючеваяОперация", Выборка.КлючеваяОперацияСсылка); + ЗапросСтатистики.УстановитьПараметр("ДатаНачала", ДатаНачалаЦикла); + ЗапросСтатистики.УстановитьПараметр("ДатаОкончания", ДатаНачалаЦикла + ПериодАгрегации); + + РезультатЗапросаСтатистики = ЗапросСтатистики.Выполнить(); + ТаблицаСтатистикиПолная = РезультатЗапросаСтатистики.Выгрузить(); + РезультатЗапросаСтатистики = Неопределено; + + РезультатАнализа = ПровестиАнализДанных(ТаблицаСтатистикиПолная); + КоличествоУдалить = Цел(ТаблицаСтатистикиПолная.Количество() * 0.05/2); + + Для ТекКоличествоУдалить = 1 По КоличествоУдалить Цикл + ТаблицаСтатистикиПолная.Удалить(0); + ТаблицаСтатистикиПолная.Удалить(ТаблицаСтатистикиПолная.Количество() - 1); + КонецЦикла; + РезультатАнализа90 = ПровестиАнализДанных(ТаблицаСтатистикиПолная); + + НоваяСтрока = ТаблицаСтатистики.Добавить(); + НоваяСтрока.Период = ДатаНачалаЦикла; + НоваяСтрока.КлючеваяОперация = Выборка.КлючеваяОперацияСсылка; + + НоваяСтрока.КоличествоОпераций = РезультатАнализа.КоличествоОпераций; + НоваяСтрока.Максимум = РезультатАнализа.Максимум; + НоваяСтрока.Медиана = РезультатАнализа.Медиана; + НоваяСтрока.Минимум = РезультатАнализа.Минимум; + НоваяСтрока.Среднее = РезультатАнализа.Среднее; + НоваяСтрока.СтандартноеОтклонение = РезультатАнализа.СтандартноеОтклонение; + + НоваяСтрока.КоличествоОпераций90 = РезультатАнализа90.КоличествоОпераций; + НоваяСтрока.Максимум90 = РезультатАнализа90.Максимум; + НоваяСтрока.Медиана90 = РезультатАнализа90.Медиана; + НоваяСтрока.Минимум90 = РезультатАнализа90.Минимум; + НоваяСтрока.Среднее90 = РезультатАнализа90.Среднее; + НоваяСтрока.СтандартноеОтклонение90 = РезультатАнализа90.СтандартноеОтклонение; + + ДатаНачалаЦикла = ДатаНачалаЦикла + ПериодАгрегации; + + КонецЦикла; + КонецЦикла; + + Запрос.Текст = " + |ВЫБРАТЬ + | * + |ПОМЕСТИТЬ + | ТаблицаСтатистики + |ИЗ + | &ТаблицаСтатистики КАК ТаблицаСтатистики + |"; + + Запрос.УстановитьПараметр("ТаблицаСтатистики", ТаблицаСтатистики); + Запрос.Выполнить(); + +КонецПроцедуры + +Функция ПровестиАнализДанных(Данные) + + АнализДанных = Новый АнализДанных; + АнализДанных.ТипАнализа = Тип("АнализДанныхОбщаяСтатистика"); + АнализДанных.ИсточникДанных = Данные; + + РезультатАнализа = АнализДанных.Выполнить(); + + Результат = Новый Структура("КоличествоОпераций, Максимум, Медиана, Минимум, Среднее, СтандартноеОтклонение"); + Если РезультатАнализа.НепрерывныеПоля.Количество() = 1 Тогда + ДанныеПоКлючевойОперации = РезультатАнализа.НепрерывныеПоля[0]; + Результат.КоличествоОпераций = ДанныеПоКлючевойОперации.Количество; + Результат.Максимум = ДанныеПоКлючевойОперации.Максимум; + Результат.Медиана = ДанныеПоКлючевойОперации.Медиана; + Результат.Минимум = ДанныеПоКлючевойОперации.Минимум; + Результат.Среднее = ДанныеПоКлючевойОперации.Среднее; + Результат.СтандартноеОтклонение = ДанныеПоКлючевойОперации.СтандартноеОтклонение; + Иначе + Результат.КоличествоОпераций = 0; + Результат.Максимум = 0; + Результат.Медиана = 0; + Результат.Минимум = 0; + Результат.Среднее = 0; + Результат.СтандартноеОтклонение = 0; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ТаблицаСтатистикиИнициализировать() + + ТаблицаСтатистики = Новый ТаблицаЗначений; + ТаблицаСтатистики.Колонки.Добавить("Период", Новый ОписаниеТипов("Дата",,Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя))); + ТаблицаСтатистики.Колонки.Добавить("КлючеваяОперация", Новый ОписаниеТипов("СправочникСсылка.КлючевыеОперации")); + + ТаблицаСтатистики.Колонки.Добавить("КоличествоОпераций", Новый ОписаниеТипов("Число",,Новый КвалификаторыЧисла(15,3))); + ТаблицаСтатистики.Колонки.Добавить("Максимум", Новый ОписаниеТипов("Число",,Новый КвалификаторыЧисла(15,3))); + ТаблицаСтатистики.Колонки.Добавить("Медиана", Новый ОписаниеТипов("Число",,Новый КвалификаторыЧисла(15,3))); + ТаблицаСтатистики.Колонки.Добавить("Минимум", Новый ОписаниеТипов("Число",,Новый КвалификаторыЧисла(15,3))); + ТаблицаСтатистики.Колонки.Добавить("Среднее", Новый ОписаниеТипов("Число",,Новый КвалификаторыЧисла(15,3))); + ТаблицаСтатистики.Колонки.Добавить("СтандартноеОтклонение", Новый ОписаниеТипов("Число",,Новый КвалификаторыЧисла(15,3))); + + ТаблицаСтатистики.Колонки.Добавить("КоличествоОпераций90", Новый ОписаниеТипов("Число",,Новый КвалификаторыЧисла(15,3))); + ТаблицаСтатистики.Колонки.Добавить("Максимум90", Новый ОписаниеТипов("Число",,Новый КвалификаторыЧисла(15,3))); + ТаблицаСтатистики.Колонки.Добавить("Медиана90", Новый ОписаниеТипов("Число",,Новый КвалификаторыЧисла(15,3))); + ТаблицаСтатистики.Колонки.Добавить("Минимум90", Новый ОписаниеТипов("Число",,Новый КвалификаторыЧисла(15,3))); + ТаблицаСтатистики.Колонки.Добавить("Среднее90", Новый ОписаниеТипов("Число",,Новый КвалификаторыЧисла(15,3))); + ТаблицаСтатистики.Колонки.Добавить("СтандартноеОтклонение90", Новый ОписаниеТипов("Число",,Новый КвалификаторыЧисла(15,3))); + + + Возврат ТаблицаСтатистики; + +КонецФункции + +// Возвращает таблицу настроек интервалов по умолчанию +// +// Возвращаемое значение: +// НастроечнаяТаблицаИнтервалов - таблица значений, содержащая настройки интервалов по умолчанию. +// Колонки: НижняяГраница, ВерхняяГраница, Шаг. +// +Функция НастроечнаяТаблицаИнтервалов() + + НастроечнаяТаблицаИнтервалов = Новый ТаблицаЗначений; + НастроечнаяТаблицаИнтервалов.Колонки.Добавить("НижняяГраница", Новый ОписаниеТипов("Число",,, Новый КвалификаторыЧисла(10, 3, ДопустимыйЗнак.Неотрицательный))); + НастроечнаяТаблицаИнтервалов.Колонки.Добавить("ВерхняяГраница", Новый ОписаниеТипов("Число",,, Новый КвалификаторыЧисла(10, 3, ДопустимыйЗнак.Неотрицательный))); + НастроечнаяТаблицаИнтервалов.Колонки.Добавить("Шаг", Новый ОписаниеТипов("Число",,, Новый КвалификаторыЧисла(10, 3, ДопустимыйЗнак.Неотрицательный))); + + // Если шаг и нижняя граница равны нулю, то это бесконечный интервал, не ограниченный снизу: x <= ВерхняяГраница. + // Если же шаг и верхняя граница равны нулю, то это бесконечный интервал, не ограниченный сверху: x > ВерхняяГраница. + + // Менее 0,5с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 0; + НоваяСтрокаНастроек.ВерхняяГраница = 0.5; + НоваяСтрокаНастроек.Шаг = 0; + + // От 0,5с до 5с с шагом 0,25 с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 0.5; + НоваяСтрокаНастроек.ВерхняяГраница = 5; + НоваяСтрокаНастроек.Шаг = 0.25; + + // От 5с до 7с с шагом 0,5 с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 5; + НоваяСтрокаНастроек.ВерхняяГраница = 7; + НоваяСтрокаНастроек.Шаг = 0.5; + + // От 7 до 12 с шагом 1с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 7; + НоваяСтрокаНастроек.ВерхняяГраница = 12; + НоваяСтрокаНастроек.Шаг = 1; + + // От 12 до 20 с шагом 2с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 12; + НоваяСтрокаНастроек.ВерхняяГраница = 20; + НоваяСтрокаНастроек.Шаг = 2; + + // От 20 до 30 с шагом 5с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 20; + НоваяСтрокаНастроек.ВерхняяГраница = 30; + НоваяСтрокаНастроек.Шаг = 5; + + // От 30 до 80 с шагом 10с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 30; + НоваяСтрокаНастроек.ВерхняяГраница = 80; + НоваяСтрокаНастроек.Шаг = 10; + + // От 80 до 120 с шагом 20с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 80; + НоваяСтрокаНастроек.ВерхняяГраница = 120; + НоваяСтрокаНастроек.Шаг = 20; + + // От 120 до 300 с шагом 30с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 120; + НоваяСтрокаНастроек.ВерхняяГраница = 300; + НоваяСтрокаНастроек.Шаг = 30; + + // От 300 до 600 с шагом 60с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 300; + НоваяСтрокаНастроек.ВерхняяГраница = 600; + НоваяСтрокаНастроек.Шаг = 60; + + // От 600 до 1800 с шагом 300с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 600; + НоваяСтрокаНастроек.ВерхняяГраница = 1800; + НоваяСтрокаНастроек.Шаг = 300; + + // От 1800 до 3600 с шагом 600с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 1800; + НоваяСтрокаНастроек.ВерхняяГраница = 3600; + НоваяСтрокаНастроек.Шаг = 600; + + // От 3600 до 7200 с шагом 1800с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 3600; + НоваяСтрокаНастроек.ВерхняяГраница = 7200; + НоваяСтрокаНастроек.Шаг = 1800; + + // От 7200 до 42300 с шагом 3600с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 7200; + НоваяСтрокаНастроек.ВерхняяГраница = 43200; + НоваяСтрокаНастроек.Шаг = 3600; + + // Более 42300с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 43200; + НоваяСтрокаНастроек.ВерхняяГраница = 0; + НоваяСтрокаНастроек.Шаг = 0; + + Возврат НастроечнаяТаблицаИнтервалов; + +КонецФункции // НастроечнаяТаблицаИнтерваловПоУмолчанию() + +// Формирует и возвращает таблицу интервалов из таблицы настроек интервалов. +// +// Параметры: +// ТаблицаНастроек - ТаблицаЗначений - содержит настройки интервалов. +// Должна содержать колонки НижняяГраница, ВерхняяГраница, Шаг типа Число. +// +// Возвращаемое значение: +// ТаблицаИнтервалов - Таблица, содержащая нижнее и верхнее граничные значения для каждого из интервалов. +// Колонки: НижняяГраница, ВерхняяГраница. +// +Функция ТаблицаИнтерваловПоНастройкам(ТаблицаНастроек) + + ТаблицаИнтервалов = Новый ТаблицаЗначений; + ТаблицаИнтервалов.Колонки.Добавить("НижняяГраница", Новый ОписаниеТипов("Число",,, Новый КвалификаторыЧисла(10, 3, ДопустимыйЗнак.Неотрицательный))); + ТаблицаИнтервалов.Колонки.Добавить("ВерхняяГраница", Новый ОписаниеТипов("Число",,, Новый КвалификаторыЧисла(10, 3, ДопустимыйЗнак.Неотрицательный))); + + // Ограничивает количество интервалов. Если интервалов будет больше указанного значения, + // то в таблицу интервалов они уже не попадут + // ограничение вызвано тем, что по интервалам будут динамически формироваться колонки, + // следовательно, бесконтрольный рост недопустим. + МаксимальноеКоличествоИнтервалов = 80; + ВсегоИнтервалов = 0; + + Для каждого СтрокаНастроек Из ТаблицаНастроек Цикл + + // Проверка интервалов на корректность. + // Если шаг не равен нулю, то нижняя граница должна быть больше верхней. + Если СтрокаНастроек.НижняяГраница >= СтрокаНастроек.ВерхняяГраница И СтрокаНастроек.Шаг <> 0 + ИЛИ СтрокаНастроек.НижняяГраница = СтрокаНастроек.ВерхняяГраница Тогда + Продолжить; + КонецЕсли; + + Если СтрокаНастроек.НижняяГраница = 0 И СтрокаНастроек.Шаг = 0 Тогда + НоваяСтрокаИнтервала = ТаблицаИнтервалов.Добавить(); + НоваяСтрокаИнтервала.НижняяГраница = 0; + НоваяСтрокаИнтервала.ВерхняяГраница = СтрокаНастроек.ВерхняяГраница; + ВсегоИнтервалов = ВсегоИнтервалов + 1; + ИначеЕсли СтрокаНастроек.ВерхняяГраница = 0 И СтрокаНастроек.Шаг = 0 Тогда + НоваяСтрокаИнтервала = ТаблицаИнтервалов.Добавить(); + НоваяСтрокаИнтервала.НижняяГраница = СтрокаНастроек.НижняяГраница; + НоваяСтрокаИнтервала.ВерхняяГраница = 0; + ВсегоИнтервалов = ВсегоИнтервалов + 1; + Иначе + ТекущееЗначение = СтрокаНастроек.НижняяГраница; + Пока ТекущееЗначение < СтрокаНастроек.ВерхняяГраница Цикл + // проверка превышения лимита колонок. + Если ВсегоИнтервалов >= МаксимальноеКоличествоИнтервалов Тогда + Прервать; + КонецЕсли; + ВерхнееЗначение = ТекущееЗначение + СтрокаНастроек.Шаг; + Если ВерхнееЗначение > СтрокаНастроек.ВерхняяГраница Тогда + // Некорректные настройки интервалов. Верхняя граница текущего интервала выходит за верхнюю границу настроек. + Прервать; + КонецЕсли; + НоваяСтрокаИнтервала = ТаблицаИнтервалов.Добавить(); + НоваяСтрокаИнтервала.НижняяГраница = ТекущееЗначение; + НоваяСтрокаИнтервала.ВерхняяГраница = ВерхнееЗначение; + ТекущееЗначение = ВерхнееЗначение; + ВсегоИнтервалов = ВсегоИнтервалов + 1; + + КонецЦикла; + КонецЕсли; + + КонецЦикла; + + Возврат ТаблицаИнтервалов; + +КонецФункции // ТаблицаИнтерваловПоНастройкам() + +// Формирует и возвращает часть текстам запроса по таблице интервалов +// +// Параметры: +// ТаблицаИнтервалов - ТаблицаЗначений - содержит перечень интервалов. +// Должна содержать колонки НижняяГраница, ВерхняяГраница. +// +// Возвращаемое значение: +// ТекстЗапроса - часть текста запроса, соответствующая переданной таблице интервалов. +// +Функция ЧастьТекстаЗапросаПоИнтервалам(ТаблицаИнтервалов, ИмяТаблицыИсточника, ИмяКолонкиИсточника) + + ТекстЗапроса = ""; + ШаблонСтроки = " СУММА(ВЫБОР + | КОГДА %1 %2 ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК N_%3,"; + + Для Каждого СтрокаИнтервала Из ТаблицаИнтервалов Цикл + + Если СтрокаИнтервала.НижняяГраница = 0 Тогда + ТекстНижнейГраницы = ""; + ТекстВерхнейГраницы = ИмяТаблицыИсточника + "." + ИмяКолонкиИсточника + " <= " + Формат(СтрокаИнтервала.ВерхняяГраница,"ЧРД=.; ЧН=0; ЧГ="); + ИмяКолонкиВЗапросе = Формат(СтрокаИнтервала.ВерхняяГраница,"ЧРД=_; ЧН=0; ЧГ=") + ИначеЕсли СтрокаИнтервала.ВерхняяГраница = 0 Тогда + ТекстНижнейГраницы = ИмяТаблицыИсточника + "." + ИмяКолонкиИсточника + " > " + Формат(СтрокаИнтервала.НижняяГраница,"ЧРД=.; ЧН=0; ЧГ="); + ТекстВерхнейГраницы = ""; + ИмяКолонкиВЗапросе = "MORE_" + Формат(СтрокаИнтервала.НижняяГраница,"ЧРД=_; ЧН=0; ЧГ=") + Иначе + ТекстНижнейГраницы = ИмяТаблицыИсточника + "." + ИмяКолонкиИсточника + " > " + Формат(СтрокаИнтервала.НижняяГраница,"ЧРД=.; ЧН=0; ЧГ=") + " И "; + ТекстВерхнейГраницы = ИмяТаблицыИсточника + "." + ИмяКолонкиИсточника + " <= " + Формат(СтрокаИнтервала.ВерхняяГраница,"ЧРД=.; ЧН=0; ЧГ="); + ИмяКолонкиВЗапросе = Формат(СтрокаИнтервала.ВерхняяГраница,"ЧРД=_; ЧН=0; ЧГ=") + КонецЕсли; + + ТекстЗапросаДляИнтервала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтроки, ТекстНижнейГраницы, ТекстВерхнейГраницы, ИмяКолонкиВЗапросе); + ТекстЗапроса = ТекстЗапроса + ?(ПустаяСтрока(ТекстЗапроса),"",Символы.ПС) + ТекстЗапросаДляИнтервала; + + КонецЦикла; + + Возврат ТекстЗапроса; + +КонецФункции + #КонецОбласти #КонецЕсли diff --git a/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/Help/ru.html b/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/Help/ru.html index b97c6f2ec..febadb170 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 340bb052e..039e7d47c 100644 --- a/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗамерыВремениТехнологические/ManagerModule.bsl @@ -2,48 +2,17 @@ #Область СлужебныеПроцедурыИФункции -Функция ПолучитьПоследниеКомментарии() Экспорт - Запрос = Новый Запрос; - ТекстЗапроса = " - |ВЫБРАТЬ - | Комментарий КАК Комментарий, - | КОЛИЧЕСТВО(Комментарий) КАК ЧастотаИспользования - |ИЗ - | ( - | ВЫБРАТЬ ПЕРВЫЕ 1000 - | ЗамерыВремени.Комментарий КАК Комментарий - | ИЗ - | РегистрСведений.ЗамерыВремени КАК ЗамерыВремени - | УПОРЯДОЧИТЬ ПО - | ЗамерыВремени.ДатаЗаписи УБЫВ - | ) КАК Выборка - |СГРУППИРОВАТЬ ПО - | Комментарий - |УПОРЯДОЧИТЬ ПО - | КОЛИЧЕСТВО(Комментарий) УБЫВ - |"; - - Запрос.Текст = ТекстЗапроса; - РезультатЗапроса = Запрос.Выполнить(); - - Комментарии = Новый Массив(); - - Количество = 0; - ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); - Пока ВыборкаДетальныеЗаписи.Следующий() Цикл - Комментарии.Добавить(ВыборкаДетальныеЗаписи.Комментарий); - Количество = Количество + 1; - - Если Количество = 5 Тогда - Прервать; - КонецЕсли; - КонецЦикла; - - Возврат Комментарии; -КонецФункции - Функция ПолучитьТопAPDEX(ДатаНачала, ДатаОкончания, ПериодАгрегации, Количество) Экспорт + + МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + Запрос = Новый Запрос; + Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + + НастроечнаяТаблицаИнтервалов = НастроечнаяТаблицаИнтервалов(); + + ТаблицаИнтервалов = ТаблицаИнтерваловПоНастройкам(НастроечнаяТаблицаИнтервалов); + ТекстЗапросаПоИнтервалам = ЧастьТекстаЗапросаПоИнтервалам(ТаблицаИнтервалов, "Замеры", "ВремяВыполнения"); Если Количество > 0 Тогда Запрос.Текст = " @@ -52,16 +21,16 @@ | КлючевыеОперации.ЦелевоеВремя КАК ЦелевоеВремя, | КОЛИЧЕСТВО(*) КАК КоличествоЗамеров, | СУММА(ВЫБОР - | КОГДА Замеры.ВремяВыполнения <= КлючевыеОперации.ЦелевоеВремя ТОГДА 1 - | ИНАЧЕ 0 + | КОГДА Замеры.ВремяВыполнения <= КлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 | КОНЕЦ) КАК N_T, | СУММА(ВЫБОР - | КОГДА Замеры.ВремяВыполнения > КлючевыеОперации.ЦелевоеВремя И Замеры.ВремяВыполнения <= 4 * КлючевыеОперации.ЦелевоеВремя ТОГДА 1 - | ИНАЧЕ 0 + | КОГДА Замеры.ВремяВыполнения > КлючевыеОперации.ЦелевоеВремя И Замеры.ВремяВыполнения <= 4 * КлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 | КОНЕЦ) КАК N_T_4T, | СУММА(ВЫБОР - | КОГДА Замеры.ВремяВыполнения > 4 * КлючевыеОперации.ЦелевоеВремя ТОГДА 1 - | ИНАЧЕ 0 + | КОГДА Замеры.ВремяВыполнения > 4 * КлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 | КОНЕЦ) КАК N_4T |ПОМЕСТИТЬ | Выборка @@ -88,6 +57,9 @@ | Выборка.КлючеваяОперацияСсылка, | Выборка.ЦелевоеВремя, | Выборка.КоличествоЗамеров, + | Выборка.N_T, + | Выборка.N_T_4T, + | Выборка.N_4T, | ВЫРАЗИТЬ((Выборка.N_T + Выборка.N_T_4T/2)/Выборка.КоличествоЗамеров КАК ЧИСЛО(15,3)) КАК APDEX, | ВЫРАЗИТЬ((Выборка.N_4T + Выборка.N_T_4T/2)/ВсегоЗамеров.КоличествоЗамеров КАК ЧИСЛО(15,3)) КАК APDEXВлияние |ПОМЕСТИТЬ @@ -101,22 +73,45 @@ |УПОРЯДОЧИТЬ ПО | (Выборка.N_4T + Выборка.N_T_4T/2)/ВсегоЗамеров.КоличествоЗамеров УБЫВ |; + |"; + Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); + Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); + Запрос.УстановитьПараметр("ПериодАгрегации", ПериодАгрегации); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "%Количество", Формат(Количество, "ЧН=0; ЧГ=")); + Запрос.Выполнить(); + + РассчитатьСтатистикуОпераций(Запрос, ДатаНачала, ДатаОкончания, ПериодАгрегации); + + Запрос.Текст = " |ВЫБРАТЬ | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) КАК Период, | СпрКлючевыеОперации.Наименование КАК КлючеваяОперация, | КлючевыеОперации.ЦелевоеВремя КАК ЦелевоеВремя, | СУММА(ВЫБОР - | КОГДА Замеры.ВремяВыполнения <= КлючевыеОперации.ЦелевоеВремя ТОГДА 1 - | ИНАЧЕ 0 + | КОГДА Замеры.ВремяВыполнения <= КлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 | КОНЕЦ) КАК N_T, | СУММА(ВЫБОР - | КОГДА Замеры.ВремяВыполнения > КлючевыеОперации.ЦелевоеВремя И Замеры.ВремяВыполнения <= 4 * КлючевыеОперации.ЦелевоеВремя ТОГДА 1 - | ИНАЧЕ 0 + | КОГДА Замеры.ВремяВыполнения > КлючевыеОперации.ЦелевоеВремя И Замеры.ВремяВыполнения <= 4 * КлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 | КОНЕЦ) КАК N_T_4T, | СУММА(ВЫБОР - | КОГДА Замеры.ВремяВыполнения > 4 * КлючевыеОперации.ЦелевоеВремя ТОГДА 1 - | ИНАЧЕ 0 - | КОНЕЦ) КАК N_4T + | КОГДА Замеры.ВремяВыполнения > 4 * КлючевыеОперации.ЦелевоеВремя ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК N_4T, + | //%Интервалы + | ТаблицаСтатистики.Максимум КАК ВремяВыполненияМаксимум, + | ТаблицаСтатистики.Медиана КАК ВремяВыполненияМедиана, + | ТаблицаСтатистики.Минимум КАК ВремяВыполненияМинимум, + | ТаблицаСтатистики.Среднее КАК ВремяВыполненияСреднее, + | ТаблицаСтатистики.СтандартноеОтклонение КАК ВремяВыполненияСтандартноеОтклонение, + | ТаблицаСтатистики.КоличествоОпераций КАК КоличествоОпераций, + | ТаблицаСтатистики.Максимум90 КАК ВремяВыполненияМаксимум90, + | ТаблицаСтатистики.Медиана90 КАК ВремяВыполненияМедиана90, + | ТаблицаСтатистики.Минимум90 КАК ВремяВыполненияМинимум90, + | ТаблицаСтатистики.Среднее90 КАК ВремяВыполненияСреднее90, + | ТаблицаСтатистики.СтандартноеОтклонение90 КАК ВремяВыполненияСтандартноеОтклонение90, + | ТаблицаСтатистики.КоличествоОпераций90 КАК КоличествоОпераций90 |ИЗ | РегистрСведений.ЗамерыВремениТехнологические КАК Замеры |ВНУТРЕННЕЕ СОЕДИНЕНИЕ @@ -127,20 +122,60 @@ | Справочник.КлючевыеОперации КАК СпрКлючевыеОперации |ПО | Замеры.КлючеваяОперация = СпрКлючевыеОперации.Ссылка + |ЛЕВОЕ СОЕДИНЕНИЕ + | ТаблицаСтатистики КАК ТаблицаСтатистики + |ПО + | ТаблицаСтатистики.КлючеваяОперация = Замеры.КлючеваяОперация + | И ТаблицаСтатистики.Период = ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) |ГДЕ | Замеры.ДатаНачалаЗамера МЕЖДУ &ДатаНачала И &ДатаОкончания |СГРУППИРОВАТЬ ПО | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200), | СпрКлючевыеОперации.Наименование, - | КлючевыеОперации.ЦелевоеВремя + | КлючевыеОперации.ЦелевоеВремя, + | ТаблицаСтатистики.Максимум, + | ТаблицаСтатистики.Медиана, + | ТаблицаСтатистики.Минимум, + | ТаблицаСтатистики.Среднее, + | ТаблицаСтатистики.СтандартноеОтклонение, + | ТаблицаСтатистики.КоличествоОпераций, + | ТаблицаСтатистики.Максимум90, + | ТаблицаСтатистики.Медиана90, + | ТаблицаСтатистики.Минимум90, + | ТаблицаСтатистики.Среднее90, + | ТаблицаСтатистики.СтандартноеОтклонение90, + | ТаблицаСтатистики.КоличествоОпераций90 |УПОРЯДОЧИТЬ ПО | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) |;"; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "//%Интервалы", ТекстЗапросаПоИнтервалам); Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); Запрос.УстановитьПараметр("ПериодАгрегации", ПериодАгрегации); - Запрос.Текст = СтрЗаменить(Запрос.Текст, "%Количество", Формат(Количество, "ЧН=0; ЧГ=")); Иначе + МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + + Запрос = Новый Запрос; + Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + + Запрос.Текст = " + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | Замеры.КлючеваяОперация КАК КлючеваяОперацияСсылка + |ПОМЕСТИТЬ + | ВыборкаХудшиеОперации + |ИЗ + | РегистрСведений.ЗамерыВремениТехнологические КАК Замеры + |ГДЕ + | Замеры.ДатаНачалаЗамера МЕЖДУ &ДатаНачала И &ДатаОкончания + |"; + Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); + Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); + + Запрос.Выполнить(); + + РассчитатьСтатистикуОпераций(Запрос, ДатаНачала, ДатаОкончания, ПериодАгрегации); + Запрос.Текст = " |ВЫБРАТЬ | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) КАК Период, @@ -154,25 +189,52 @@ | КОГДА Замеры.ВремяВыполнения > СпрКлючевыеОперации.ЦелевоеВремя И Замеры.ВремяВыполнения <= 4 * СпрКлючевыеОперации.ЦелевоеВремя ТОГДА 1 | ИНАЧЕ 0 | КОНЕЦ) КАК N_T_4T, - | СУММА(ВЫБОР - | КОГДА Замеры.ВремяВыполнения > 4 * СпрКлючевыеОперации.ЦелевоеВремя ТОГДА 1 - | ИНАЧЕ 0 - | КОНЕЦ) КАК N_4T + | //%Интервалы + | ТаблицаСтатистики.Максимум КАК ВремяВыполненияМаксимум, + | ТаблицаСтатистики.Медиана КАК ВремяВыполненияМедиана, + | ТаблицаСтатистики.Минимум КАК ВремяВыполненияМинимум, + | ТаблицаСтатистики.Среднее КАК ВремяВыполненияСреднее, + | ТаблицаСтатистики.СтандартноеОтклонение КАК ВремяВыполненияСтандартноеОтклонение, + | ТаблицаСтатистики.КоличествоОпераций КАК КоличествоОпераций, + | ТаблицаСтатистики.Максимум90 КАК ВремяВыполненияМаксимум90, + | ТаблицаСтатистики.Медиана90 КАК ВремяВыполненияМедиана90, + | ТаблицаСтатистики.Минимум90 КАК ВремяВыполненияМинимум90, + | ТаблицаСтатистики.Среднее90 КАК ВремяВыполненияСреднее90, + | ТаблицаСтатистики.СтандартноеОтклонение90 КАК ВремяВыполненияСтандартноеОтклонение90, + | ТаблицаСтатистики.КоличествоОпераций90 КАК КоличествоОпераций90 |ИЗ | РегистрСведений.ЗамерыВремениТехнологические КАК Замеры |ВНУТРЕННЕЕ СОЕДИНЕНИЕ | Справочник.КлючевыеОперации КАК СпрКлючевыеОперации |ПО | Замеры.КлючеваяОперация = СпрКлючевыеОперации.Ссылка + |ЛЕВОЕ СОЕДИНЕНИЕ + | ТаблицаСтатистики КАК ТаблицаСтатистики + |ПО + | ТаблицаСтатистики.КлючеваяОперация = Замеры.КлючеваяОперация + | И ТаблицаСтатистики.Период = ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) |ГДЕ | Замеры.ДатаНачалаЗамера МЕЖДУ &ДатаНачала И &ДатаОкончания |СГРУППИРОВАТЬ ПО | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200), | СпрКлючевыеОперации.Наименование, - | СпрКлючевыеОперации.ЦелевоеВремя + | СпрКлючевыеОперации.ЦелевоеВремя, + | ТаблицаСтатистики.Максимум, + | ТаблицаСтатистики.Медиана, + | ТаблицаСтатистики.Минимум, + | ТаблицаСтатистики.Среднее, + | ТаблицаСтатистики.СтандартноеОтклонение, + | ТаблицаСтатистики.КоличествоОпераций, + | ТаблицаСтатистики.Максимум90, + | ТаблицаСтатистики.Медиана90, + | ТаблицаСтатистики.Минимум90, + | ТаблицаСтатистики.Среднее90, + | ТаблицаСтатистики.СтандартноеОтклонение90, + | ТаблицаСтатистики.КоличествоОпераций90 |УПОРЯДОЧИТЬ ПО | ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2015,1,1),СЕКУНДА, ВЫРАЗИТЬ((РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2015,1,1), Замеры.ДатаНачалаЗамера, СЕКУНДА) + 63555667200)/&ПериодАгрегации - 0.5 КАК ЧИСЛО(11,0)) * &ПериодАгрегации - 63555667200) |;"; + Запрос.Текст = СтрЗаменить(Запрос.Текст, "//%Интервалы", ТекстЗапросаПоИнтервалам); Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); Запрос.УстановитьПараметр("ПериодАгрегации", ПериодАгрегации); @@ -183,6 +245,367 @@ Возврат РезультатЗапроса; КонецФункции +Процедура РассчитатьСтатистикуОпераций(Запрос, ДатаНачала, ДатаОкончания, ПериодАгрегации) + + Запрос.Текст = " + |ВЫБРАТЬ + | КлючеваяОперацияСсылка + |ИЗ + | ВыборкаХудшиеОперации КАК КлючевыеОперации + |"; + + РезультатЗапроса = Запрос.Выполнить(); + + ЗапросСтатистики = Новый Запрос; + ЗапросСтатистики.Текст = " + |ВЫБРАТЬ + | ВремяВыполнения + |ИЗ + | РегистрСведений.ЗамерыВремени КАК Замеры + |ГДЕ + | Замеры.КлючеваяОперация = &КлючеваяОперация + | И Замеры.ДатаНачалаЗамера >= &ДатаНачала + | И Замеры.ДатаНачалаЗамера < &ДатаОкончания + |УПОРЯДОЧИТЬ ПО + | ВремяВыполнения + |"; + + ТаблицаСтатистики = ТаблицаСтатистикиИнициализировать(); + + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + ДатаНачалаЦикла = ДатаНачала; + Пока ДатаНачалаЦикла < ДатаОкончания Цикл + ЗапросСтатистики.УстановитьПараметр("КлючеваяОперация", Выборка.КлючеваяОперацияСсылка); + ЗапросСтатистики.УстановитьПараметр("ДатаНачала", ДатаНачалаЦикла); + ЗапросСтатистики.УстановитьПараметр("ДатаОкончания", ДатаНачалаЦикла + ПериодАгрегации); + + РезультатЗапросаСтатистики = ЗапросСтатистики.Выполнить(); + ТаблицаСтатистикиПолная = РезультатЗапросаСтатистики.Выгрузить(); + РезультатЗапросаСтатистики = Неопределено; + + РезультатАнализа = ПровестиАнализДанных(ТаблицаСтатистикиПолная); + КоличествоУдалить = Цел(ТаблицаСтатистикиПолная.Количество() * 0.05/2); + + Для ТекКоличествоУдалить = 1 По КоличествоУдалить Цикл + ТаблицаСтатистикиПолная.Удалить(0); + ТаблицаСтатистикиПолная.Удалить(ТаблицаСтатистикиПолная.Количество() - 1); + КонецЦикла; + РезультатАнализа90 = ПровестиАнализДанных(ТаблицаСтатистикиПолная); + + НоваяСтрока = ТаблицаСтатистики.Добавить(); + НоваяСтрока.Период = ДатаНачалаЦикла; + НоваяСтрока.КлючеваяОперация = Выборка.КлючеваяОперацияСсылка; + + НоваяСтрока.КоличествоОпераций = РезультатАнализа.КоличествоОпераций; + НоваяСтрока.Максимум = РезультатАнализа.Максимум; + НоваяСтрока.Медиана = РезультатАнализа.Медиана; + НоваяСтрока.Минимум = РезультатАнализа.Минимум; + НоваяСтрока.Среднее = РезультатАнализа.Среднее; + НоваяСтрока.СтандартноеОтклонение = РезультатАнализа.СтандартноеОтклонение; + + НоваяСтрока.КоличествоОпераций90 = РезультатАнализа90.КоличествоОпераций; + НоваяСтрока.Максимум90 = РезультатАнализа90.Максимум; + НоваяСтрока.Медиана90 = РезультатАнализа90.Медиана; + НоваяСтрока.Минимум90 = РезультатАнализа90.Минимум; + НоваяСтрока.Среднее90 = РезультатАнализа90.Среднее; + НоваяСтрока.СтандартноеОтклонение90 = РезультатАнализа90.СтандартноеОтклонение; + + ДатаНачалаЦикла = ДатаНачалаЦикла + ПериодАгрегации; + + КонецЦикла; + КонецЦикла; + + Запрос.Текст = " + |ВЫБРАТЬ + | * + |ПОМЕСТИТЬ + | ТаблицаСтатистики + |ИЗ + | &ТаблицаСтатистики КАК ТаблицаСтатистики + |"; + + Запрос.УстановитьПараметр("ТаблицаСтатистики", ТаблицаСтатистики); + Запрос.Выполнить(); + +КонецПроцедуры + +Функция ПровестиАнализДанных(Данные) + + АнализДанных = Новый АнализДанных; + АнализДанных.ТипАнализа = Тип("АнализДанныхОбщаяСтатистика"); + АнализДанных.ИсточникДанных = Данные; + + РезультатАнализа = АнализДанных.Выполнить(); + + Результат = Новый Структура("КоличествоОпераций, Максимум, Медиана, Минимум, Среднее, СтандартноеОтклонение"); + Если РезультатАнализа.НепрерывныеПоля.Количество() = 1 Тогда + ДанныеПоКлючевойОперации = РезультатАнализа.НепрерывныеПоля[0]; + Результат.КоличествоОпераций = ДанныеПоКлючевойОперации.Количество; + Результат.Максимум = ДанныеПоКлючевойОперации.Максимум; + Результат.Медиана = ДанныеПоКлючевойОперации.Медиана; + Результат.Минимум = ДанныеПоКлючевойОперации.Минимум; + Результат.Среднее = ДанныеПоКлючевойОперации.Среднее; + Результат.СтандартноеОтклонение = ДанныеПоКлючевойОперации.СтандартноеОтклонение; + Иначе + Результат.КоличествоОпераций = 0; + Результат.Максимум = 0; + Результат.Медиана = 0; + Результат.Минимум = 0; + Результат.Среднее = 0; + Результат.СтандартноеОтклонение = 0; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция ТаблицаСтатистикиИнициализировать() + + ТаблицаСтатистики = Новый ТаблицаЗначений; + ТаблицаСтатистики.Колонки.Добавить("Период", Новый ОписаниеТипов("Дата",,Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя))); + ТаблицаСтатистики.Колонки.Добавить("КлючеваяОперация", Новый ОписаниеТипов("СправочникСсылка.КлючевыеОперации")); + + ТаблицаСтатистики.Колонки.Добавить("КоличествоОпераций", Новый ОписаниеТипов("Число",,Новый КвалификаторыЧисла(15,3))); + ТаблицаСтатистики.Колонки.Добавить("Максимум", Новый ОписаниеТипов("Число",,Новый КвалификаторыЧисла(15,3))); + ТаблицаСтатистики.Колонки.Добавить("Медиана", Новый ОписаниеТипов("Число",,Новый КвалификаторыЧисла(15,3))); + ТаблицаСтатистики.Колонки.Добавить("Минимум", Новый ОписаниеТипов("Число",,Новый КвалификаторыЧисла(15,3))); + ТаблицаСтатистики.Колонки.Добавить("Среднее", Новый ОписаниеТипов("Число",,Новый КвалификаторыЧисла(15,3))); + ТаблицаСтатистики.Колонки.Добавить("СтандартноеОтклонение", Новый ОписаниеТипов("Число",,Новый КвалификаторыЧисла(15,3))); + + ТаблицаСтатистики.Колонки.Добавить("КоличествоОпераций90", Новый ОписаниеТипов("Число",,Новый КвалификаторыЧисла(15,3))); + ТаблицаСтатистики.Колонки.Добавить("Максимум90", Новый ОписаниеТипов("Число",,Новый КвалификаторыЧисла(15,3))); + ТаблицаСтатистики.Колонки.Добавить("Медиана90", Новый ОписаниеТипов("Число",,Новый КвалификаторыЧисла(15,3))); + ТаблицаСтатистики.Колонки.Добавить("Минимум90", Новый ОписаниеТипов("Число",,Новый КвалификаторыЧисла(15,3))); + ТаблицаСтатистики.Колонки.Добавить("Среднее90", Новый ОписаниеТипов("Число",,Новый КвалификаторыЧисла(15,3))); + ТаблицаСтатистики.Колонки.Добавить("СтандартноеОтклонение90", Новый ОписаниеТипов("Число",,Новый КвалификаторыЧисла(15,3))); + + + Возврат ТаблицаСтатистики; + +КонецФункции + +// Возвращает таблицу настроек интервалов по умолчанию +// +// Возвращаемое значение: +// НастроечнаяТаблицаИнтервалов - таблица значений, содержащая настройки интервалов по умолчанию +// Колонки: НижняяГраница, ВерхняяГраница, Шаг. +// +Функция НастроечнаяТаблицаИнтервалов() + + НастроечнаяТаблицаИнтервалов = Новый ТаблицаЗначений; + НастроечнаяТаблицаИнтервалов.Колонки.Добавить("НижняяГраница", Новый ОписаниеТипов("Число",,, Новый КвалификаторыЧисла(10, 3, ДопустимыйЗнак.Неотрицательный))); + НастроечнаяТаблицаИнтервалов.Колонки.Добавить("ВерхняяГраница", Новый ОписаниеТипов("Число",,, Новый КвалификаторыЧисла(10, 3, ДопустимыйЗнак.Неотрицательный))); + НастроечнаяТаблицаИнтервалов.Колонки.Добавить("Шаг", Новый ОписаниеТипов("Число",,, Новый КвалификаторыЧисла(10, 3, ДопустимыйЗнак.Неотрицательный))); + + // Если шаг и нижняя граница равны нулю, то это бесконечный интервал, не ограниченный снизу: x <= ВерхняяГраница. + // Если же шаг и верхняя граница равны нулю, то это бесконечный интервал, не ограниченный сверху: x > ВерхняяГраница. + + // Менее 0,5с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 0; + НоваяСтрокаНастроек.ВерхняяГраница = 0.5; + НоваяСтрокаНастроек.Шаг = 0; + + // От 0,5с до 5с с шагом 0,25 с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 0.5; + НоваяСтрокаНастроек.ВерхняяГраница = 5; + НоваяСтрокаНастроек.Шаг = 0.25; + + // От 5с до 7с с шагом 0,5 с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 5; + НоваяСтрокаНастроек.ВерхняяГраница = 7; + НоваяСтрокаНастроек.Шаг = 0.5; + + // От 7 до 12 с шагом 1с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 7; + НоваяСтрокаНастроек.ВерхняяГраница = 12; + НоваяСтрокаНастроек.Шаг = 1; + + // От 12 до 20 с шагом 2с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 12; + НоваяСтрокаНастроек.ВерхняяГраница = 20; + НоваяСтрокаНастроек.Шаг = 2; + + // От 20 до 30 с шагом 5с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 20; + НоваяСтрокаНастроек.ВерхняяГраница = 30; + НоваяСтрокаНастроек.Шаг = 5; + + // От 30 до 80 с шагом 10с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 30; + НоваяСтрокаНастроек.ВерхняяГраница = 80; + НоваяСтрокаНастроек.Шаг = 10; + + // От 80 до 120 с шагом 20с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 80; + НоваяСтрокаНастроек.ВерхняяГраница = 120; + НоваяСтрокаНастроек.Шаг = 20; + + // От 120 до 300 с шагом 30с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 120; + НоваяСтрокаНастроек.ВерхняяГраница = 300; + НоваяСтрокаНастроек.Шаг = 30; + + // От 300 до 600 с шагом 60с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 300; + НоваяСтрокаНастроек.ВерхняяГраница = 600; + НоваяСтрокаНастроек.Шаг = 60; + + // От 600 до 1800 с шагом 300с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 600; + НоваяСтрокаНастроек.ВерхняяГраница = 1800; + НоваяСтрокаНастроек.Шаг = 300; + + // От 1800 до 3600 с шагом 600с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 1800; + НоваяСтрокаНастроек.ВерхняяГраница = 3600; + НоваяСтрокаНастроек.Шаг = 600; + + // От 3600 до 7200 с шагом 1800с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 3600; + НоваяСтрокаНастроек.ВерхняяГраница = 7200; + НоваяСтрокаНастроек.Шаг = 1800; + + // От 7200 до 42300 с шагом 3600с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 7200; + НоваяСтрокаНастроек.ВерхняяГраница = 43200; + НоваяСтрокаНастроек.Шаг = 3600; + + // Более 42300с + НоваяСтрокаНастроек = НастроечнаяТаблицаИнтервалов.Добавить(); + НоваяСтрокаНастроек.НижняяГраница = 43200; + НоваяСтрокаНастроек.ВерхняяГраница = 0; + НоваяСтрокаНастроек.Шаг = 0; + + Возврат НастроечнаяТаблицаИнтервалов; + +КонецФункции // НастроечнаяТаблицаИнтерваловПоУмолчанию() + +// Формирует и возвращает таблицу интервалов из таблицы настроек интервалов +// +// Параметры: +// ТаблицаНастроек - ТаблицаЗначений - содержит настройки интервалов +// должна содержать колонки НижняяГраница, ВерхняяГраница, Шаг типа Число. +// +// Возвращаемое значение: +// ТаблицаИнтервалов - Таблица, содержащая нижнее и верхнее граничные значения для каждого из интервалов +// Колонки: НижняяГраница, ВерхняяГраница. +// +Функция ТаблицаИнтерваловПоНастройкам(ТаблицаНастроек) + + ТаблицаИнтервалов = Новый ТаблицаЗначений; + ТаблицаИнтервалов.Колонки.Добавить("НижняяГраница", Новый ОписаниеТипов("Число",,, Новый КвалификаторыЧисла(10, 3, ДопустимыйЗнак.Неотрицательный))); + ТаблицаИнтервалов.Колонки.Добавить("ВерхняяГраница", Новый ОписаниеТипов("Число",,, Новый КвалификаторыЧисла(10, 3, ДопустимыйЗнак.Неотрицательный))); + + // Ограничивает количество интервалов. Если интервалов будет больше указанного значения, + // то в таблицу интервалов они уже не попадут + // ограничение вызвано тем, что по интервалам будут динамически формироваться колонки, + // следовательно, бесконтрольный рост недопустим. + МаксимальноеКоличествоИнтервалов = 80; + ВсегоИнтервалов = 0; + + Для каждого СтрокаНастроек Из ТаблицаНастроек Цикл + + // Проверка интервалов на корректность. + // Если шаг не равен нулю, то нижняя граница должна быть больше верхней. + Если СтрокаНастроек.НижняяГраница >= СтрокаНастроек.ВерхняяГраница И СтрокаНастроек.Шаг <> 0 + ИЛИ СтрокаНастроек.НижняяГраница = СтрокаНастроек.ВерхняяГраница Тогда + Продолжить; + КонецЕсли; + + Если СтрокаНастроек.НижняяГраница = 0 И СтрокаНастроек.Шаг = 0 Тогда + НоваяСтрокаИнтервала = ТаблицаИнтервалов.Добавить(); + НоваяСтрокаИнтервала.НижняяГраница = 0; + НоваяСтрокаИнтервала.ВерхняяГраница = СтрокаНастроек.ВерхняяГраница; + ВсегоИнтервалов = ВсегоИнтервалов + 1; + ИначеЕсли СтрокаНастроек.ВерхняяГраница = 0 И СтрокаНастроек.Шаг = 0 Тогда + НоваяСтрокаИнтервала = ТаблицаИнтервалов.Добавить(); + НоваяСтрокаИнтервала.НижняяГраница = СтрокаНастроек.НижняяГраница; + НоваяСтрокаИнтервала.ВерхняяГраница = 0; + ВсегоИнтервалов = ВсегоИнтервалов + 1; + Иначе + ТекущееЗначение = СтрокаНастроек.НижняяГраница; + Пока ТекущееЗначение < СтрокаНастроек.ВерхняяГраница Цикл + // проверка превышения лимита колонок. + Если ВсегоИнтервалов >= МаксимальноеКоличествоИнтервалов Тогда + Прервать; + КонецЕсли; + ВерхнееЗначение = ТекущееЗначение + СтрокаНастроек.Шаг; + Если ВерхнееЗначение > СтрокаНастроек.ВерхняяГраница Тогда + // Некорректные настройки интервалов. Верхняя граница текущего интервала выходит за верхнюю границу настроек. + Прервать; + КонецЕсли; + НоваяСтрокаИнтервала = ТаблицаИнтервалов.Добавить(); + НоваяСтрокаИнтервала.НижняяГраница = ТекущееЗначение; + НоваяСтрокаИнтервала.ВерхняяГраница = ВерхнееЗначение; + ТекущееЗначение = ВерхнееЗначение; + ВсегоИнтервалов = ВсегоИнтервалов + 1; + + КонецЦикла; + КонецЕсли; + + КонецЦикла; + + Возврат ТаблицаИнтервалов; + +КонецФункции // ТаблицаИнтерваловПоНастройкам() + +// Формирует и возвращает часть текстам запроса по таблице интервалов +// +// Параметры: +// ТаблицаИнтервалов - ТаблицаЗначений - содержит перечень интервалов +// должна содержать колонки НижняяГраница, ВерхняяГраница. +// +// Возвращаемое значение: +// ТекстЗапроса - часть текста запроса, соответствующая переданной таблице интервалов. +// +Функция ЧастьТекстаЗапросаПоИнтервалам(ТаблицаИнтервалов, ИмяТаблицыИсточника, ИмяКолонкиИсточника) + + ТекстЗапроса = ""; + ШаблонСтроки = " СУММА(ВЫБОР + | КОГДА %1 %2 ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ) КАК N_%3,"; + + Для Каждого СтрокаИнтервала Из ТаблицаИнтервалов Цикл + + Если СтрокаИнтервала.НижняяГраница = 0 Тогда + ТекстНижнейГраницы = ""; + ТекстВерхнейГраницы = ИмяТаблицыИсточника + "." + ИмяКолонкиИсточника + " <= " + Формат(СтрокаИнтервала.ВерхняяГраница,"ЧРД=.; ЧН=0; ЧГ="); + ИмяКолонкиВЗапросе = Формат(СтрокаИнтервала.ВерхняяГраница,"ЧРД=_; ЧН=0; ЧГ=") + ИначеЕсли СтрокаИнтервала.ВерхняяГраница = 0 Тогда + ТекстНижнейГраницы = ИмяТаблицыИсточника + "." + ИмяКолонкиИсточника + " > " + Формат(СтрокаИнтервала.НижняяГраница,"ЧРД=.; ЧН=0; ЧГ="); + ТекстВерхнейГраницы = ""; + ИмяКолонкиВЗапросе = "MORE_" + Формат(СтрокаИнтервала.НижняяГраница,"ЧРД=_; ЧН=0; ЧГ=") + Иначе + ТекстНижнейГраницы = ИмяТаблицыИсточника + "." + ИмяКолонкиИсточника + " > " + Формат(СтрокаИнтервала.НижняяГраница,"ЧРД=.; ЧН=0; ЧГ=") + " И "; + ТекстВерхнейГраницы = ИмяТаблицыИсточника + "." + ИмяКолонкиИсточника + " <= " + Формат(СтрокаИнтервала.ВерхняяГраница,"ЧРД=.; ЧН=0; ЧГ="); + ИмяКолонкиВЗапросе = Формат(СтрокаИнтервала.ВерхняяГраница,"ЧРД=_; ЧН=0; ЧГ=") + КонецЕсли; + + ТекстЗапросаДляИнтервала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтроки, ТекстНижнейГраницы, ТекстВерхнейГраницы, ИмяКолонкиВЗапросе); + ТекстЗапроса = ТекстЗапроса + ?(ПустаяСтрока(ТекстЗапроса),"",Символы.ПС) + ТекстЗапросаДляИнтервала; + + КонецЦикла; + + Возврат ТекстЗапроса; + +КонецФункции + #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl b/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl index 152be954f..68022ef74 100644 --- a/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов/ManagerModule.bsl @@ -1,5 +1,32 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращает имя профиля безопасности для информационной базы или внешнего модуля. +// +// Параметры: +// ВнешнийМодуль - ЛюбаяСсылка - ссылка на элемент справочника, использующийся в +// качестве внешнего модуля. +// +// Возвращаемое значение: +// Строка - имя профиля безопасности. +// +Функция ИмяПрофиляБезопасности(Знач ПрограммныйМодуль) Экспорт + + Если ПрограммныйМодуль = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка() Тогда + + Возврат Константы.ПрофильБезопасностиИнформационнойБазы.Получить(); + + Иначе + + Возврат РегистрыСведений.РежимыПодключенияВнешнихМодулей.РежимПодключенияВнешнегоМодуля(ПрограммныйМодуль); + + КонецЕсли; + +КонецФункции + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Создает запрос администрирования профилей безопасности. @@ -307,29 +334,6 @@ КонецФункции -// Возвращает имя профиля безопасности для информационной базы или внешнего модуля. -// -// Параметры: -// ВнешнийМодуль - ЛюбаяСсылка - ссылка на элемент справочника, использующийся в -// качестве внешнего модуля. -// -// Возвращаемое значение: -// Строка - имя профиля безопасности. -// -Функция ИмяПрофиляБезопасности(Знач ПрограммныйМодуль) Экспорт - - Если ПрограммныйМодуль = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка() Тогда - - Возврат Константы.ПрофильБезопасностиИнформационнойБазы.Получить(); - - Иначе - - Возврат РегистрыСведений.РежимыПодключенияВнешнихМодулей.РежимПодключенияВнешнегоМодуля(ПрограммныйМодуль); - - КонецЕсли; - -КонецФункции - // Очищает неактуальные запросы на использование внешних ресурсов. // Процедура ОчиститьНеактуальныеЗапросы() Экспорт diff --git a/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ManagerModule.bsl b/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ManagerModule.bsl index d3e5ee126..2d3d7c440 100644 --- a/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ManagerModule.bsl @@ -16,17 +16,17 @@ Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ИзмененияОбщихДанныхУзлов"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; - ЭлементБлокировки.УстановитьЗначение("Узел", Узел); + ЭлементБлокировки.УстановитьЗначение("УзелИнформационнойБазы", Узел); Блокировка.Заблокировать(); ТекстЗапроса = "ВЫБРАТЬ - | ИзмененияОбщихДанныхУзлов.Узел КАК Узел, + | ИзмененияОбщихДанныхУзлов.УзелИнформационнойБазы КАК Узел, | ИзмененияОбщихДанныхУзлов.НомерСообщения КАК НомерСообщения |ИЗ | РегистрСведений.ИзмененияОбщихДанныхУзлов КАК ИзмененияОбщихДанныхУзлов |ГДЕ - | ИзмененияОбщихДанныхУзлов.Узел = &Узел"; + | ИзмененияОбщихДанныхУзлов.УзелИнформационнойБазы = &Узел"; Запрос = Новый Запрос; Запрос.УстановитьПараметр("Узел", Узел); @@ -41,7 +41,7 @@ Если Выборка.НомерСообщения = 0 Тогда СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("Узел", Узел); + СтруктураЗаписи.Вставить("УзелИнформационнойБазы", Узел); СтруктураЗаписи.Вставить("НомерСообщения", НомерСообщения); ДобавитьЗапись(СтруктураЗаписи); @@ -66,11 +66,11 @@ Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ИзмененияОбщихДанныхУзлов"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; - ЭлементБлокировки.УстановитьЗначение("Узел", Узел); + ЭлементБлокировки.УстановитьЗначение("УзелИнформационнойБазы", Узел); Блокировка.Заблокировать(); СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("Узел", Узел); + СтруктураЗаписи.Вставить("УзелИнформационнойБазы", Узел); СтруктураЗаписи.Вставить("НомерСообщения", 0); ДобавитьЗапись(СтруктураЗаписи); @@ -90,7 +90,7 @@ Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ИзмененияОбщихДанныхУзлов"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; - ЭлементБлокировки.УстановитьЗначение("Узел", Узел); + ЭлементБлокировки.УстановитьЗначение("УзелИнформационнойБазы", Узел); Блокировка.Заблокировать(); Если НомерСообщения = Неопределено Тогда @@ -101,7 +101,7 @@ |ИЗ | РегистрСведений.ИзмененияОбщихДанныхУзлов КАК ИзмененияОбщихДанныхУзлов |ГДЕ - | ИзмененияОбщихДанныхУзлов.Узел = &Узел"; + | ИзмененияОбщихДанныхУзлов.УзелИнформационнойБазы = &Узел"; Иначе @@ -111,7 +111,7 @@ |ИЗ | РегистрСведений.ИзмененияОбщихДанныхУзлов КАК ИзмененияОбщихДанныхУзлов |ГДЕ - | ИзмененияОбщихДанныхУзлов.Узел = &Узел + | ИзмененияОбщихДанныхУзлов.УзелИнформационнойБазы = &Узел | И ИзмененияОбщихДанныхУзлов.НомерСообщения <= &НомерСообщения | И ИзмененияОбщихДанныхУзлов.НомерСообщения <> 0"; @@ -125,7 +125,7 @@ Если Не Запрос.Выполнить().Пустой() Тогда СтруктураЗаписи = Новый Структура; - СтруктураЗаписи.Вставить("Узел", Узел); + СтруктураЗаписи.Вставить("УзелИнформационнойБазы", Узел); УдалитьЗапись(СтруктураЗаписи); КонецЕсли; diff --git a/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ИзмененияОбщихДанныхУзлов.mdo b/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ИзмененияОбщихДанныхУзлов.mdo index 2c6263382..d52949787 100644 --- a/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ИзмененияОбщихДанныхУзлов.mdo +++ b/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ИзмененияОбщихДанныхУзлов.mdo @@ -73,10 +73,10 @@ - Узел + УзелИнформационнойБазы ru - Узел + Узел информационной базы ExchangePlanRef @@ -92,5 +92,6 @@ true true + true diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Help/ru.html b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Help/ru.html index f65e96818..aa850ca79 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 9c1182dbe..cb9cacffa 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Module.bsl @@ -4,12 +4,23 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + УстановитьУсловноеОформление(); + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; + НастроитьОтображениеСпискаРолей(); + +КонецПроцедуры + +&НаСервере +Процедура НастроитьОтображениеСпискаРолей() + + Перем ПолеГруппировки, СвойстваРоли; + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Исполнители, - "РольИсполнителя", Параметры.РольИсполнителя, ВидСравненияКомпоновкиДанных.Равно); + "РольИсполнителя", Параметры.РольИсполнителя, ВидСравненияКомпоновкиДанных.Равно); СвойстваРоли = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Параметры.РольИсполнителя, "ИспользуетсяСОбъектамиАдресации,ТипыДополнительногоОбъектаАдресации,ТипыОсновногоОбъектаАдресации"); Если СвойстваРоли.ИспользуетсяСОбъектамиАдресации Тогда ПолеГруппировки = Исполнители.Группировка.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); @@ -21,6 +32,30 @@ ПолеГруппировки.Использование = Истина; КонецЕсли; КонецЕсли; + КонецПроцедуры #КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + ЭлементУсловногоОформления = Исполнители.УсловноеОформление.Элементы.Добавить(); + ЭлементУсловногоОформления.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + + ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); + ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Исполнитель"); + ОформляемоеПоле.Использование = Истина; + + ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Исполнитель.Недействителен"); + ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбораДанных.ПравоеЗначение = Истина; + + ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет.Значение); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Form.form b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Form.form index 08b4646fe..a0bb50a98 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Form.form +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Form.form @@ -124,7 +124,6 @@ true true - true true true Normal @@ -456,6 +455,23 @@
                          true
                          true + + Недействителен + + <key>ru</key> + <value>Недействителен</value> + + 1 + + Boolean + + + true + + + true + + ТипыДополнительногоОбъектаАдресации @@ -474,6 +490,60 @@ 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 + + ValueList + + + true + + + true + + + + + Подобрать @@ -523,5 +593,9 @@ <event>AfterWrite</event> <name>ПослеЗаписи</name> </handlers> + <handlers> + <event>OnReadAtServer</event> + <name>ПриЧтенииНаСервере</name> + </handlers> </extInfo> </form:Form> diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Help/ru.html b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Help/ru.html index 29e879f3c..e6cc2cbee 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Help/ru.html +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для назначения пользователей на <a href="Catalog.РолиИсполнителей/Help">роль исполнителя</a>. </p> <p>Открывается по команде <strong>Назначить исполнителей на роль</strong> из списка <a href="InformationRegister.ИсполнителиЗадач.Form.РолиИИсполнителиЗадач/Help">Роли и исполнители задач</a>.</p> <p>В нижней части списка ведется подсчет назначенных исполнителей.</p> diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Module.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Module.bsl index 93d41eb9d..56f9b5565 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРолиСОбъектомАдресации/Module.bsl @@ -4,17 +4,20 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + УстановитьУсловноеОформление(); + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; Роль = Параметры.Роль; + УстановитьДоступностьРоли(Роль); ОсновнойОбъектАдресации = Параметры.ОсновнойОбъектАдресации; Если ОсновнойОбъектАдресации = Неопределено Или ОсновнойОбъектАдресации = "" Тогда Элементы.ДополнительныйОбъектАдресации.Видимость = Ложь; Элементы.Список.Шапка = Ложь; Элементы.ОсновнойОбъектАдресации.Видимость = Ложь; - Иначе + Иначе Элементы.ОсновнойОбъектАдресации.Заголовок = ОсновнойОбъектАдресации.Метаданные().ПредставлениеОбъекта; ДополнительныйОбъектАдресации = Параметры.Роль.ТипыДополнительногоОбъектаАдресации; Элементы.ДополнительныйОбъектАдресации.Видимость = НЕ ДополнительныйОбъектАдресации.Пустая(); @@ -24,12 +27,72 @@ Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Исполнители роли ""%1""'"), Роль); + УстановитьОтборНабораЗаписей(); + + +КонецПроцедуры + +&НаСервере +Процедура УстановитьДоступностьРоли(Роль) + + РольДоступнаДляВнешнихПользователей = ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей"); + Если Не РольДоступнаДляВнешнихПользователей Тогда + РольДоступнаДляПользователей = Истина; + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | РолиИсполнителейНазначение.ТипПользователей + |ИЗ + | Справочник.РолиИсполнителей.Назначение КАК РолиИсполнителейНазначение + |ГДЕ + | РолиИсполнителейНазначение.Ссылка = &Ссылка"; + + Запрос.УстановитьПараметр("Ссылка", Роль); + + РезультатЗапроса = Запрос.Выполнить(); + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + РольДоступнаДляПользователей = Ложь; + УРолиНеНазначеныВнешниеПользователи = Истина; + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Назначение.Добавить(ВыборкаДетальныеЗаписи.ТипПользователей); + Если ВыборкаДетальныеЗаписи.ТипПользователей = Справочники.Пользователи.ПустаяСсылка() Тогда + РольДоступнаДляПользователей = Истина; + Иначе + УРолиНеНазначеныВнешниеПользователи = Ложь; + КонецЕсли; + КонецЦикла; + + Если УРолиНеНазначеныВнешниеПользователи Тогда + РольДоступнаДляВнешнихПользователей = Ложь; + КонецЕсли; + + Если РольДоступнаДляВнешнихПользователей И РольДоступнаДляПользователей Тогда + Элементы.Исполнитель.ВыбиратьТип = Истина; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + УстановитьОтборНабораЗаписей(); +КонецПроцедуры + +&НаСервере +Процедура УстановитьОтборНабораЗаписей() + НаборЗаписейОбъект = РеквизитФормыВЗначение("НаборЗаписей"); НаборЗаписейОбъект.Отбор.ОсновнойОбъектАдресации.Установить(ОсновнойОбъектАдресации); НаборЗаписейОбъект.Отбор.РольИсполнителя.Установить(Роль); НаборЗаписейОбъект.Прочитать(); ЗначениеВРеквизитФормы(НаборЗаписейОбъект, "НаборЗаписей"); - + Для каждого Запись Из НаборЗаписей Цикл + Запись.Недействителен = Запись.Исполнитель.Недействителен; + КонецЦикла; + КонецПроцедуры &НаКлиенте @@ -51,8 +114,11 @@ Если ОсновнойОбъектАдресации <> Неопределено Тогда Элемент.ТекущиеДанные.ОсновнойОбъектАдресации = ОсновнойОбъектАдресации; КонецЕсли; + + Элемент.ТекущиеДанные.Недействителен = ОпределитьДействительностьПользователей(Элемент.ТекущиеДанные.Исполнитель); + КонецПроцедуры - + &НаКлиенте Процедура СписокПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование) @@ -60,19 +126,28 @@ Элементы.ДополнительныйОбъектАдресации.ОграничениеТипа = ТипыДополнительногоОбъектаАдресации; КонецЕсли; + Если РольДоступнаДляПользователей И НЕ РольДоступнаДляВнешнихПользователей Тогда + Элемент.ТекущиеДанные.Исполнитель = ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка"); + ИначеЕсли НЕ РольДоступнаДляПользователей И РольДоступнаДляВнешнихПользователей Тогда + Элемент.ТекущиеДанные.Исполнитель = ПредопределенноеЗначение("Справочник.ВнешниеПользователи.ПустаяСсылка"); + КонецЕсли; + КонецПроцедуры &НаКлиенте Процедура СписокОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - Для каждого Значение Из ВыбранноеЗначение Цикл + Пользователи = ОпределитьДействительностьПользователей(ВыбранноеЗначение); + Для каждого Значение Из Пользователи Цикл Если НаборЗаписей.НайтиСтроки(Новый Структура("Исполнитель", Значение)).Количество() > 0 Тогда Продолжить; КонецЕсли; Исполнитель = НаборЗаписей.Добавить(); - Исполнитель.Исполнитель = Значение; + + Исполнитель.Исполнитель = Значение.Ключ; + Исполнитель.Недействителен = Значение.Значение; Если Роль <> Неопределено Тогда Исполнитель.РольИсполнителя = Роль; КонецЕсли; @@ -88,9 +163,56 @@ #Область ОбработчикиКомандФормы +&НаСервереБезКонтекста +Функция ОпределитьДействительностьПользователей(Пользователи) + + Если ЗначениеЗаполнено(Пользователи) Тогда + Если ТипЗнч(Пользователи) = тип("Массив") Тогда + Результат = Новый Соответствие; + Для каждого Значение Из Пользователи Цикл + Результат.Вставить(Значение, Значение.Недействителен); + КонецЦикла; + Возврат Результат; + Иначе + Возврат Пользователи.Недействителен; + КонецЕсли; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + &НаКлиенте Процедура Подобрать(Команда) + Если РольДоступнаДляВнешнихПользователей И РольДоступнаДляПользователей Тогда + Выбор = Новый СписокЗначений; + Выбор.Добавить("ВнешнийПользователь", НСтр("ru = 'Внешний пользователь'")); + Выбор.Добавить("Пользователь", НСтр("ru = 'Пользователь'")); + ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораТипаПользователя", ЭтотОбъект); + Выбор.ПоказатьВыборЭлемента(ОписаниеОповещения, НСтр("ru = 'Выберите тип пользователя'")); + ИначеЕсли РольДоступнаДляПользователей Тогда + ОткрытьФормуПодбора("Пользователь"); + ИначеЕсли РольДоступнаДляВнешнихПользователей Тогда + ОткрытьФормуПодбора("ВнешнийПользователь"); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура ПослеВыбораТипаПользователя(Результат, ДополнительныеПараметры) Экспорт + Если Результат <> Неопределено Тогда + ОткрытьФормуПодбора(Результат.Значение); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФормуПодбора(РежимОткрытия) + ПараметрыФормыВыбора = Новый Структура; ПараметрыФормыВыбора.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.ГруппыИЭлементы); ПараметрыФормыВыбора.Вставить("ЗакрыватьПриВыборе", Ложь); @@ -99,8 +221,31 @@ ПараметрыФормыВыбора.Вставить("РежимВыбора", Истина); ПараметрыФормыВыбора.Вставить("ВыборГрупп", Ложь); ПараметрыФормыВыбора.Вставить("ВыборГруппПользователей", Ложь); + + Если РежимОткрытия = "ВнешнийПользователь" Тогда + ПараметрыФормыВыбора.Вставить("Назначение", Назначение.ВыгрузитьЗначения()); + ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаВыбора", ПараметрыФормыВыбора, Элементы.Список); + Иначе + ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормыВыбора, Элементы.Список); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьУсловноеОформление() - ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормыВыбора, Элементы.Список); + УсловноеОформление.Элементы.Очистить(); + + Элемент = УсловноеОформление.Элементы.Добавить(); + ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); + ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("Исполнитель"); + + ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НаборЗаписей.Недействителен"); + ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборЭлемента.ПравоеЗначение = Истина; + + Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет.Значение); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Help/ru.html b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Help/ru.html index b1671b9af..034442366 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Help/ru.html +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/РолиИИсполнителиЗадач/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></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 11.00.9600.18427"></meta></head><body> <p>В списке содержится актуальная (текущая) информация о соответствии пользователей <a href="Catalog.РолиИсполнителей/Help">ролям исполнителей</a>.</p> <p>Перед началом работы с бизнес-процессами и задачами рекомендуется заполнить список.</p> <p>Для того чтобы назначить исполнителей ролей, которые участвуют в бизнес-процессах без объектов адресации, выполните команду <strong>Роли и исполнители задач</strong> в разделе <strong>Администрирование - Органайзер</strong>.</p> diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Help/ru.html b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Help/ru.html index 7c7e101e0..b8342a5ff 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Help/ru.html +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаЗаписи/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></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 11.00.9600.18427"></meta></head><body> <p>Сведения об исполнителе задач при ролевой адресации.</p> <p>Открывается по команде <strong>Создать</strong> из списка <a href="InformationRegister.ИсполнителиЗадач.Form.ИсполнителиРоли/Help">Исполнители роли</a>.</p> <h3>Ввод исполнителя роли</h3> diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаСписка/Form.form index 6540e215e..4aecaf9f5 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаСписка/Form.form @@ -392,6 +392,10 @@ <event>NotificationProcessing</event> <name>ОбработкаОповещения</name> </handlers> + <handlers> + <event>OnCreateAtServer</event> + <name>ПриСозданииНаСервере</name> + </handlers> <windowOpeningMode>DontBlock</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> <autoTitle>true</autoTitle> diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаСписка/Module.bsl index 35fc23021..2ad6af513 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ФормаСписка/Module.bsl @@ -1,11 +1,45 @@ #Область ОбработчикиСобытийФормы +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + УстановитьУсловноеОформление(); + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ИмяСобытия = "Запись_РолеваяАдресация" Тогда Элементы.Список.Обновить(); - КонецЕсли; + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура УстановитьУсловноеОформление() + + ЭлементУсловногоОформления = Список.УсловноеОформление.Элементы.Добавить(); + ЭлементУсловногоОформления.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + + ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); + ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Исполнитель"); + ОформляемоеПоле.Использование = Истина; + + ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Исполнитель.Недействителен"); + ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбораДанных.ПравоеЗначение = Истина; + + ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет.Значение); + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Help/ru.html b/SSL/src/InformationRegisters/ИсполнителиЗадач/Help/ru.html index 51648f23f..3309258a2 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Help/ru.html +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></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 11.00.9600.18427"></meta></head><body> <p>В этом списке содержится актуальная (текущая) информация о соответствии пользователей <a href="Catalog.РолиИсполнителей/Help">ролям</a> и <a href="ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач/Help">объектам адресации</a>, которая используется механизмом <a href="v8help://1cv8/EnterprWorkingWithBusinessProcesses_StandardInterface">бизнес-процессов</a> для доставки <a href="Task.ЗадачаИсполнителя/Help">задач</a> конкретным исполнителям.</p> <p>В зависимости от специфики бизнес-процессов задачи могут быть адресованы исполнителю или группе исполнителей как персонально (персональная адресация), так и для некоторых бизнес процессов с использованием ролей бизнес-процесса (ролевая адресация). В случае ролевой адресации поручение выдается не персонально исполнителю, а некоторой роли бизнес-процесса (например, <strong>Старший по залу</strong>).</p> <h3>Особенности взаимодействия с внешними пользователями</h3> @@ -9,7 +9,7 @@ </li><li> <div>Для этого нужно настроить <a href="Catalog.РолиИсполнителей/Help">список</a> таких ролей, указав, что они предназначены для определенных категорий внешних пользователей.</div></li></ul><h3>Примеры заполнения списка ролевой адресации</h3> <p></p> -<table border="0" cellpadding="8" width="100%"><tbody><tr><td><strong>Роль исполнителя</strong></td> +<table cellpadding="8" width="100%" border="0"><tbody><tr><td><strong>Роль исполнителя</strong></td> <td><strong>Пользователь</strong></td> <td><strong>Пояснение</strong></td></tr><tr><td><strong>Старший по залу</strong></td> <td>Иванов И.</td> @@ -19,7 +19,7 @@ <td>Петров А.</td> <td>Поручения, выданные роли <strong>Руководителя</strong>, попадут в список поручений Петрова А.</td></tr></tbody></table><p>В определенных случаях <a href="Catalog.РолиИсполнителей.Form.ФормаЭлемента/Help">роли исполнителя</a> бывает недостаточно, чтобы точно определить исполнителей. Тогда необходимо указывать основной и дополнительный объекты адресации. Например:</p> <p></p> -<table border="0" cellpadding="8" width="100%"><tbody><tr><td><strong>Роль исполнителя</strong></td> +<table cellpadding="8" width="100%" border="0"><tbody><tr><td><strong>Роль исполнителя</strong></td> <td><strong>Основной объект адресации<br>(тип, значение)</strong></td> <td><strong>Дополнительный объект адресации<br>(тип, значение)</strong></td> <td><strong>Пользователь</strong></td> diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl index 4b5fd69c8..06259782e 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl @@ -1,9 +1,13 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ОписаниеПеременных + // СтандартныеПодсистемы.УправлениеДоступом Перем ИзмененныеГруппыИсполнителей; // Группы исполнителей, состав которых был изменен. // Конец СтандартныеПодсистемы.УправлениеДоступом +#КонецОбласти + #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ, Замещение) diff --git a/SSL/src/InformationRegisters/КалендарныеГрафики/Help/ru.html b/SSL/src/InformationRegisters/КалендарныеГрафики/Help/ru.html index caf7e8612..773da3f1f 100644 --- a/SSL/src/InformationRegisters/КалендарныеГрафики/Help/ru.html +++ b/SSL/src/InformationRegisters/КалендарныеГрафики/Help/ru.html @@ -1,2 +1,2 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></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 11.00.9600.18427"></meta></head><body> <p>Система позволяет хранить графики работы, которые используются на предприятии.</p></body></html> \ No newline at end of file diff --git a/SSL/src/InformationRegisters/КомментарииОперацииСтатистики/ManagerModule.bsl b/SSL/src/InformationRegisters/КомментарииОперацииСтатистики/ManagerModule.bsl index 4d9dc6863..a84bfa407 100644 --- a/SSL/src/InformationRegisters/КомментарииОперацииСтатистики/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/КомментарииОперацииСтатистики/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + #Область СлужебныеПроцедурыИФункции Процедура СоздатьНовуюЗапись(ОперацияСтатистики, КомментарийСтатистики) Экспорт @@ -56,3 +58,4 @@ #КонецОбласти +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/КомментарииСтатистики/ManagerModule.bsl b/SSL/src/InformationRegisters/КомментарииСтатистики/ManagerModule.bsl index fa1d520b0..0079747d6 100644 --- a/SSL/src/InformationRegisters/КомментарииСтатистики/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/КомментарииСтатистики/ManagerModule.bsl @@ -42,7 +42,7 @@ НачатьТранзакцию(); Попытка ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.SHA1); - СлишкомМногоКомментариев = НСтр("ru = 'Слишком много комментариев'"); + СлишкомМногоКомментариев = НСтр("ru='Слишком много комментариев'"); ХешированиеДанных.Добавить(СлишкомМногоКомментариев); ХешНаименования = СтрЗаменить(Строка(ХешированиеДанных.ХешСумма), " ", ""); diff --git a/SSL/src/InformationRegisters/КурсыВалют/Help/ru.html b/SSL/src/InformationRegisters/КурсыВалют/Help/ru.html index 45dde7124..ca73f99dc 100644 --- a/SSL/src/InformationRegisters/КурсыВалют/Help/ru.html +++ b/SSL/src/InformationRegisters/КурсыВалют/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для хранения и просмотра курсов <a href="Catalog.Валюты/Help">валют</a>.</p> <p>Курсы валют можно загружать с сайта РБК, автоматически (с помощью <a href="DataProcessor.РегламентныеИФоновыеЗадания/Help">регламентного задания</a>) или вручную (см. <a href="DataProcessor.ЗагрузкаКурсовВалют/Help">загрузка курсов валют</a>).</p> <p>Открывается по соответствующей команде в панели навигации <a href="Catalog.Валюты.Form.ФормаЭлемента/Help">валюты</a>.</p> diff --git a/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl b/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl index b074b9224..ab4485a71 100644 --- a/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl @@ -1,7 +1,11 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ОписаниеПеременных + Перем ОшибкаРасчетаКурсаПоФормуле; +#КонецОбласти + #Область ОбработчикиСобытий // При записи контролируются курсы подчиненных валют. diff --git a/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/RecordSetModule.bsl b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/RecordSetModule.bsl index f8cba22be..e7ee530bb 100644 --- a/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/КэшПрограммныхИнтерфейсов/RecordSetModule.bsl @@ -1,9 +1,13 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ОписаниеПеременных + Перем ТребуетсяКонтроль; Перем ДанныеДляЗаписи; Перем ПодготовленыДанные; +#КонецОбласти + #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ, Замещение) @@ -89,6 +93,10 @@ КонецПроцедуры +#КонецОбласти + +#Область Инициализация + ДанныеДляЗаписи = Новый ТаблицаЗначений(); ТребуетсяКонтроль = ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных(); ПодготовленыДанные = Ложь; diff --git a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/НаборыЗначенийДоступа.mdo b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/НаборыЗначенийДоступа.mdo index 26635ee7d..5195c6b6e 100644 --- a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/НаборыЗначенийДоступа.mdo +++ b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/НаборыЗначенийДоступа.mdo @@ -107,7 +107,6 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> <indexing>Index</indexing> - <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> <fillValue xsi:type="core:UndefinedValue"/> </attributes> @@ -128,7 +127,6 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> <indexing>Index</indexing> - <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> <fillValue xsi:type="core:UndefinedValue"/> </attributes> @@ -183,11 +181,11 @@ </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> + <indexing>Index</indexing> <dataHistory>Use</dataHistory> <fillValue xsi:type="core:NumberValue"> <value>0</value> </fillValue> - <master>true</master> <mainFilter>true</mainFilter> </dimensions> <dimensions uuid="ac9dcb8c-d4f5-4f0d-affb-e4187eafdf14"> @@ -211,10 +209,10 @@ </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> + <indexing>Index</indexing> <dataHistory>Use</dataHistory> <fillFromFillingValue>true</fillFromFillingValue> <fillValue xsi:type="core:ReferenceValue"/> - <master>true</master> <mainFilter>true</mainFilter> </dimensions> <dimensions uuid="04ec5e44-8469-4e9c-8021-83d258f2ec54"> @@ -235,12 +233,12 @@ </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> + <indexing>Index</indexing> <dataHistory>Use</dataHistory> <fillFromFillingValue>true</fillFromFillingValue> <fillValue xsi:type="core:ReferenceValue"> <value>Catalog.ИдентификаторыОбъектовМетаданных.EmptyRef</value> </fillValue> - <master>true</master> <mainFilter>true</mainFilter> </dimensions> <forms uuid="cff36ede-0bd1-424b-8c75-b9695133f32e"> diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Help/ru.html b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Help/ru.html index 618006bb7..7c87edebf 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Help/ru.html +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/МоиНапоминания/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для работы со всеми напоминаниями, действующими в программе на текущий момент. При этом каждый <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователь</a> видит только свои <a href="InformationRegister.НапоминанияПользователя/Help">напоминания</a>.</p> <p>В списке выводится:</p> <ul><li><strong>Срок напоминания</strong> - время срабатывания напоминания; diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Form.form b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Form.form index 94beb88b9..d19d77e75 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Form.form +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Form.form @@ -210,7 +210,9 @@ </extInfo> </extendedTooltip> <type>Page</type> - <extInfo xsi:type="form:PageGroupExtInfo"/> + <extInfo xsi:type="form:PageGroupExtInfo"> + <scrollOnCompress>false</scrollOnCompress> + </extInfo> </items> <items xsi:type="form:FormGroup"> <name>ДатаВремя</name> @@ -357,7 +359,9 @@ </extInfo> </extendedTooltip> <type>Page</type> - <extInfo xsi:type="form:PageGroupExtInfo"/> + <extInfo xsi:type="form:PageGroupExtInfo"> + <scrollOnCompress>false</scrollOnCompress> + </extInfo> </items> <items xsi:type="form:FormGroup"> <name>НастройкаИсточника</name> @@ -673,7 +677,9 @@ </extInfo> </extendedTooltip> <type>Page</type> - <extInfo xsi:type="form:PageGroupExtInfo"/> + <extInfo xsi:type="form:PageGroupExtInfo"> + <scrollOnCompress>false</scrollOnCompress> + </extInfo> </items> <items xsi:type="form:FormGroup"> <name>НастройкаПериодичности</name> @@ -787,7 +793,9 @@ </extInfo> </extendedTooltip> <type>Page</type> - <extInfo xsi:type="form:PageGroupExtInfo"/> + <extInfo xsi:type="form:PageGroupExtInfo"> + <scrollOnCompress>false</scrollOnCompress> + </extInfo> </items> <visible>true</visible> <enabled>true</enabled> diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Help/ru.html b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Help/ru.html index 2812454ca..b0eba9818 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Help/ru.html +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></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 11.00.9600.18427"></meta></head><body> <p>В программе можно вводить напоминания, указав время и предмет, по поводу которого в программе в указанное время будет выведен <a href="InformationRegister.НапоминанияПользователя.Form.ФормаОповещения/Help">список напоминаний</a>.</p> <p>Предметом напоминаний могут быть различные справочники, документы и другие объекты программы. Например, напоминание можно ввести по конкретному партнеру, документу товародвижения и т.д., для того чтобы не забыть уточнить или дозаполнить какие-либо данные.</p> <p>Открывается по команде <strong>Органайзер - Напомнить</strong> из различных объектов программы. При этом можно ввести только одно напоминание для одного объекта.</p> diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Help/ru.html b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Help/ru.html index c94c027bf..b0bcab73e 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Help/ru.html +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для вывода сработавших напоминаний.</p> <p>В указанное в напоминании время в программе открывается список Напоминания. В списке содержатся все вновь созданные и отложенные напоминания, у которых подошло время срабатывания. По каждому напоминанию выводится его текст и время, насколько оно было просрочено. Если напоминание связано с датой какого-либо предмета, например, со сроком по задаче, то в напоминании указывается, сколько времени осталось до этого события.</p> <p>Из списка можно сразу перейти к элементу справочника или другому объекту программы, с которым связано напоминанме (по команде Открыть или двойному щелчку мыши). Если напоминание не связано с объектом программы (то открывается само напоминание).</p> diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Help/ru.html b/SSL/src/InformationRegisters/НапоминанияПользователя/Help/ru.html index 809bc7f0e..bafed9005 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Help/ru.html +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></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 11.00.9600.18427"></meta></head><body> <p>В программе можно вводить напоминания, указав время и предмет, по поводу которого в программе в указанное время будет выведен список напоминаний.</p> <p>Предметом напоминаний могут быть различные справочники, документы и другие объекты программы. Например, <a href="InformationRegister.НапоминанияПользователя.Form.Напоминание/Help">напоминание</a> можно ввести по конкретному партнеру, документу товародвижения и т.д., для того чтобы не забыть уточнить или дозаполнить какие-либо данные.</p> <p>Открывается по команде <strong>Органайзер - Напомнить</strong> из различных объектов программы. При этом можно ввести только одно напоминание для одного объекта.</p> diff --git a/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl index 440efa4a1..18d20eb2d 100644 --- a/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НаследованиеНастроекПравОбъектов/ManagerModule.bsl @@ -61,21 +61,21 @@ // Например, справочник ПапкиФайлов. // // Параметры: -// ВладелецНастроекПрав - Ссылка, например, СправочникСсылка.ПапкиФайлов или другого типа, +// ВладелецНастроекПрав - Ссылка - например, СправочникСсылка.ПапкиФайлов или другого типа, // по которым права настраиваются непосредственно. -// - Объект, например, СправочникОбъект.ПапкиФайлов, при передаче +// - Объект - например, СправочникОбъект.ПапкиФайлов, при передаче // объекта обновление будет только, если объект перед записью и // он изменился (родитель изменен). // -// ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, +// ЕстьИзменения - Булево - (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. // // ОбновитьИерархию - Булево - принудительно обновляет нижестоящую иерархию, // независимо от изменения родителей владельца. // -// ОбъектыСИзменениями - только для внутреннего использования. +// ОбъектыСИзменениями - Массив - только для внутреннего использования. // -Процедура ОбновитьРодителейВладельца(ВладелецНастроекПрав, ЕстьИзменения, ОбновитьИерархию = Ложь, ОбъектыСИзменениями = Неопределено) Экспорт +Процедура ОбновитьРодителейВладельца(ВладелецНастроекПрав, ЕстьИзменения = Ложь, ОбновитьИерархию = Ложь, ОбъектыСИзменениями = Неопределено) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -95,7 +95,7 @@ КонецЕсли; Если ВозможныеПрава.ПоТипамСсылок.Получить(ТипВладельца) = Неопределено Тогда - Ссылка = УправлениеДоступомСлужебный.СсылкаОбъекта(ВладелецНастроекПрав); + Ссылка = ПользователиСлужебный.СсылкаОбъекта(ВладелецНастроекПрав); Объект = ВладелецНастроекПрав; Иначе Ссылка = ВладелецНастроекПрав; @@ -190,18 +190,18 @@ // Заполняет НаборЗаписей родителями объекта, включая себя, как родителя. // // Параметры: -// Ссылка - Ссылка в иерархии СсылкаОбъекта или СсылкаОбъекта. -// СсылкаОбъекта - Ссылка на исходный объект. -// СвойстваРодителяОбъекта - Структура со свойствами: -// Ссылка - Ссылка на родителя исходного объекта, +// Ссылка - Ссылка - ссылка в иерархии СсылкаОбъекта или СсылкаОбъекта. +// СсылкаОбъекта - Ссылка, Неопределено - ссылка на исходный объект. +// СвойстваРодителяОбъекта - Структура - со свойствами: +// * Ссылка - Ссылка - ссылка на родителя исходного объекта, // который может отличаться от родителя, // записанного в базе данных. -// Наследовать - Булево - наследование настроек родителем. +// * Наследовать - Булево - наследование настроек родителем. // // Возвращаемое значение: // НаборЗаписей - РегистрСведенийНаборЗаписей.НаследованиеНастроекПравОбъектов. // -Функция РодителиОбъекта(Ссылка, СсылкаОбъекта, СвойстваРодителяОбъекта = "", ПолучатьНаследование = Истина) Экспорт +Функция РодителиОбъекта(Ссылка, СсылкаОбъекта = Неопределено, СвойстваРодителяОбъекта = "", ПолучатьНаследование = Истина) Экспорт НовыеЗаписи = УправлениеДоступомСлужебныйПовтИсп.ТаблицаПустогоНабораЗаписей( Метаданные.РегистрыСведений.НаследованиеНастроекПравОбъектов.ПолноеИмя()).Скопировать(); diff --git a/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl index f8a980f58..7bcd24f23 100644 --- a/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl @@ -45,7 +45,7 @@ // Очищает настройки указанного (или текущего) пользователя в разделе. Процедура СброситьНастройкиПользователяВРазделе(РазделСсылка, Пользователь = Неопределено) Экспорт Если Пользователь = Неопределено Тогда - Пользователь = Пользователи.ТекущийПользователь(); + Пользователь = Пользователи.АвторизованныйПользователь(); КонецЕсли; Запрос = Новый Запрос; diff --git a/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/НастройкиВариантовОтчетов.mdo b/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/НастройкиВариантовОтчетов.mdo index 139f09f13..f670d4c0b 100644 --- a/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/НастройкиВариантовОтчетов.mdo +++ b/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/НастройкиВариантовОтчетов.mdo @@ -60,7 +60,7 @@ </type> <toolTip> <key>ru</key> - <value> </value> + <value>Видимость варианта отчета в указанном разделе для указанного пользователя.</value> </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> @@ -79,7 +79,7 @@ </type> <toolTip> <key>ru</key> - <value> </value> + <value>Показывать указанный вариант отчета в группе быстрого доступа в указанном разделе для указанного пользователя.</value> </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> @@ -94,11 +94,12 @@ <value>Пользователь</value> </synonym> <type> + <types>CatalogRef.ВнешниеПользователи</types> <types>CatalogRef.Пользователи</types> </type> <toolTip> <key>ru</key> - <value> </value> + <value>Пользователь, для которого установлена настройка</value> </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> @@ -120,7 +121,7 @@ </type> <toolTip> <key>ru</key> - <value> </value> + <value>Раздел или группа, в которой установлена настройка</value> </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> @@ -142,7 +143,7 @@ </type> <toolTip> <key>ru</key> - <value> </value> + <value>Отчет или вариант отчета, для которого установлена настройка</value> </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> diff --git a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Module.bsl b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Module.bsl index 01c80466f..8e9516b3c 100644 --- a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Module.bsl @@ -374,114 +374,62 @@ Если Расписание = Неопределено Тогда Возврат; КонецЕсли; - - УстановитьРасписаниеРегламентногоЗадания(Расписание); + УстановитьПараметрРегламентногоЗадания("Расписание", Расписание); Элементы.Расписание.Заголовок = Расписание; - -КонецПроцедуры - -&НаСервере -Процедура УстановитьРасписаниеРегламентногоЗадания(Расписание); - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); - ИмяМетода = Метаданные.РегламентныеЗадания.ОчисткаУстаревшихВерсийОбъектов.ИмяМетода; - - ПараметрыЗадания = Новый Структура; - ПараметрыЗадания.Вставить("ИмяМетода", ИмяМетода); - ПараметрыЗадания.Вставить("ОбластьДанных", ОбластьДанных); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда - МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); - - УстановитьПривилегированныйРежим(Истина); - - СписокЗаданий = МодульОчередьЗаданий.ПолучитьЗадания(ПараметрыЗадания); - Если СписокЗаданий.Количество() = 0 Тогда - ПараметрыЗадания.Вставить("Расписание", Расписание); - МодульОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); - Иначе - ПараметрыЗадания = Новый Структура("Расписание", Расписание); - Для Каждого Задание Из СписокЗаданий Цикл - МодульОчередьЗаданий.ИзменитьЗадание(Задание.Идентификатор, ПараметрыЗадания); - КонецЦикла; - КонецЕсли; - КонецЕсли; - Иначе - РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОчисткаУстаревшихВерсийОбъектов); - РегламентноеЗадание.Расписание = Расписание; - РегламентноеЗадание.Записать(); - КонецЕсли; - КонецПроцедуры &НаСервере Функция ТекущееРасписание() - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); - ИмяМетода = Метаданные.РегламентныеЗадания.ОчисткаУстаревшихВерсийОбъектов.ИмяМетода; - - ПараметрыЗадания = Новый Структура; - ПараметрыЗадания.Вставить("ИмяМетода", ИмяМетода); - ПараметрыЗадания.Вставить("ОбластьДанных", ОбластьДанных); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда - МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); - - УстановитьПривилегированныйРежим(Истина); - - СписокЗаданий = МодульОчередьЗаданий.ПолучитьЗадания(ПараметрыЗадания); - Для Каждого Задание Из СписокЗаданий Цикл - Возврат Задание.Расписание; - КонецЦикла; - - Возврат Новый РасписаниеРегламентногоЗадания; - КонецЕсли; - Иначе - Возврат РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОчисткаУстаревшихВерсийОбъектов).Расписание; - КонецЕсли; + Возврат ПолучитьПараметрРегламентногоЗадания("Расписание", Новый РасписаниеРегламентногоЗадания); КонецФункции &НаКлиенте Процедура АвтоматическиУдалятьУстаревшиеВерсииПриИзменении(Элемент) - ВключитьОтключитьРегламентноеЗадание(АвтоматическиУдалятьУстаревшиеВерсии); + УстановитьПараметрРегламентногоЗадания("Использование", АвтоматическиУдалятьУстаревшиеВерсии); Элементы.Расписание.Доступность = АвтоматическиУдалятьУстаревшиеВерсии; Элементы.НастроитьРасписание.Доступность = АвтоматическиУдалятьУстаревшиеВерсии; КонецПроцедуры &НаСервере -Процедура ВключитьОтключитьРегламентноеЗадание(Использование) - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); - ИмяМетода = Метаданные.РегламентныеЗадания.ОчисткаУстаревшихВерсийОбъектов.ИмяМетода; - +Процедура УстановитьПараметрРегламентногоЗадания(ИмяПараметра, ЗначениеПараметра) + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("Метаданные", Метаданные.РегламентныеЗадания.ОчисткаУстаревшихВерсийОбъектов); + + УстановитьПривилегированныйРежим(Истина); + + СписокЗаданий = РегламентныеЗаданияСервер.НайтиЗадания(ПараметрыЗадания); + Если СписокЗаданий.Количество() = 0 Тогда ПараметрыЗадания = Новый Структура; - ПараметрыЗадания.Вставить("ИмяМетода", ИмяМетода); - ПараметрыЗадания.Вставить("ОбластьДанных", ОбластьДанных); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда - МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); - - УстановитьПривилегированныйРежим(Истина); - - СписокЗаданий = МодульОчередьЗаданий.ПолучитьЗадания(ПараметрыЗадания); - Если СписокЗаданий.Количество() = 0 Тогда - ПараметрыЗадания.Вставить("Использование", Использование); - МодульОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); - Иначе - ПараметрыЗадания = Новый Структура("Использование", Использование); - Для Каждого Задание Из СписокЗаданий Цикл - МодульОчередьЗаданий.ИзменитьЗадание(Задание.Идентификатор, ПараметрыЗадания); - КонецЦикла; - КонецЕсли; - КонецЕсли; + ПараметрыЗадания.Вставить(ИмяПараметра, ЗначениеПараметра); + ПараметрыЗадания.Вставить("Метаданные", Метаданные.РегламентныеЗадания.ОчисткаУстаревшихВерсийОбъектов); + РегламентныеЗаданияСервер.ДобавитьЗадание(ПараметрыЗадания); Иначе - РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОчисткаУстаревшихВерсийОбъектов); - РегламентноеЗадание.Использование = Не РегламентноеЗадание.Использование; - РегламентноеЗадание.Записать(); + ПараметрыЗадания = Новый Структура(ИмяПараметра, ЗначениеПараметра); + Для Каждого Задание Из СписокЗаданий Цикл + РегламентныеЗаданияСервер.ИзменитьЗадание(Задание, ПараметрыЗадания); + КонецЦикла; КонецЕсли; КонецПроцедуры +&НаСервере +Функция ПолучитьПараметрРегламентногоЗадания(ИмяПараметра, ЗначениеПоУмолчанию) + ПараметрыЗадания = Новый Структура; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ПараметрыЗадания.Вставить("ИмяМетода", Метаданные.РегламентныеЗадания.ОчисткаУстаревшихВерсийОбъектов.ИмяМетода); + Иначе + ПараметрыЗадания.Вставить("Метаданные", Метаданные.РегламентныеЗадания.ОчисткаУстаревшихВерсийОбъектов); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + СписокЗаданий = РегламентныеЗаданияСервер.НайтиЗадания(ПараметрыЗадания); + Для Каждого Задание Из СписокЗаданий Цикл + Возврат Задание[ИмяПараметра]; + КонецЦикла; + + Возврат ЗначениеПоУмолчанию; +КонецФункции + &НаКлиенте Процедура ПроверитьВыполнениеФоновогоЗадания() Если Не ЗаданиеВыполнено(ИдентификаторФоновогоЗадания) Тогда @@ -632,28 +580,6 @@ &НаСервере Функция АвтоматическаяОчисткаВключена() - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); - ИмяМетода = Метаданные.РегламентныеЗадания.ОчисткаУстаревшихВерсийОбъектов.ИмяМетода; - - ПараметрыЗадания = Новый Структура; - ПараметрыЗадания.Вставить("ИмяМетода", ИмяМетода); - ПараметрыЗадания.Вставить("ОбластьДанных", ОбластьДанных); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда - МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); - - УстановитьПривилегированныйРежим(Истина); - - СписокЗаданий = МодульОчередьЗаданий.ПолучитьЗадания(ПараметрыЗадания); - Для Каждого Задание Из СписокЗаданий Цикл - Возврат Задание.Использование; - КонецЦикла; - КонецЕсли; - Иначе - Возврат РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОчисткаУстаревшихВерсийОбъектов).Использование; - КонецЕсли; - - Возврат Ложь; + Возврат ПолучитьПараметрРегламентногоЗадания("Использование", Ложь); КонецФункции #КонецОбласти diff --git a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Help/ru.html b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Help/ru.html index f7139eb51..99bd1263f 100644 --- a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Help/ru.html +++ b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для настройки версионирования объектов.</p> <p>С помощью версионирования документов и справочников можно отслеживать историю изменений. </p> <p>Для ведения истории изменений объектов необходимо выбрать команду <strong>Поддержка и обслуживание</strong> раздела <strong>Администрирование</strong>, включить флажок <strong>Версионирование объектов</strong> (по умолчанию включен).</p> @@ -7,21 +7,21 @@ <ul><li><strong>Объект</strong> - список объектов программы в виде дерева с группировкой по типам объектов. </li><li><strong>Вариант версионирования</strong> - выбранный вариант версионирования; </li><li><strong>Срок хранения версий</strong> - выбранный срок хранения версий.</li></ul><h3>Выбор варианта версионирования</h3> -<ul><li>Выберите один или несколько объектов, затем выполните команду <strong>Установить вариант версионирования</strong>, из выпадающего списка выберите нужный вариант версионирования для каждого типа документов и справочников (также можно найти команду в меню <strong>Еще</strong> или в контекстном меню по правой кнопке мыши): -<ul><li style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt" class="MsoNormal"><strong>Не версионировать</strong> - история версий объекта не ведется; -</li><li style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt" class="MsoNormal"><strong>Версионировать при записи</strong> - новая запись заносится в <a href="InformationRegister.ВерсииОбъектов.Form.ВыборХранимыхВерсий/Help">историю версий</a> каждый раз при изменении (или создании нового) справочника или документа; -</li><li style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt" class="MsoNormal"><strong>Версионировать при проведении</strong> - версии сохраняются только при проведении; применимо только для документов, для которых разрешено проведение; -</li><li style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt" class="MsoNormal"><strong>Версионировать при старте</strong> - версии сохраняются только после запуска бизнес-процесса; применимо только для бизнес-процессов; -</li><li style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt" class="MsoNormal"><strong>По умолчанию</strong> - установить рекомендуемые настройки (для справочников - не версионировать, для документов - версионировать при проведении).</li></ul></li><li> +<ul><li>Выберите один или несколько объектов, затем нажмите кнопку <strong>Установить вариант версионирования</strong>, из выпадающего списка выберите нужный вариант версионирования для каждого типа документов и справочников (также можно найти команду в меню <strong>Еще</strong> или в контекстном меню по правой кнопке мыши): +<ul><li class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><strong>Не версионировать</strong> - история версий объекта не ведется; +</li><li class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><strong>Версионировать при записи</strong> - новая запись заносится в <a href="InformationRegister.ВерсииОбъектов.Form.ВыборХранимыхВерсий/Help">историю версий</a> каждый раз при изменении (или создании нового) справочника или документа; +</li><li class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><strong>Версионировать при проведении</strong> - версии сохраняются только при проведении; применимо только для документов, для которых разрешено проведение; +</li><li class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><strong>Версионировать при старте</strong> - версии сохраняются только после запуска бизнес-процесса; применимо только для бизнес-процессов; +</li><li class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><strong>По умолчанию</strong> - установить рекомендуемые настройки (для справочников - не версионировать, для документов - версионировать при проведении).</li></ul></li><li> <div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Также возможна настройка версионирования сразу для группы объектов программы, например, можно выбрать все документы или справочники.</div></li></ul><h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Выбор срока хранения версий</h3> <ul><li> -<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Выполните команду <strong>Установить срок хранения версий</strong>, затем из выпадающего списка выберите нужный срок хранения версий для каждого типа документов и справочников: версии можно хранить <strong>За последнюю неделю</strong>, <strong>За последний месяц</strong>, <strong>За последние три месяца</strong>, <strong>За последние шесть месяцев</strong>, <strong>За последний год</strong> и <strong>Бессрочно</strong>.</div></li></ul><h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Просмотр отчета "Количество и объем хранимых версий объектов"</h3> +<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Нажмите кнопку <strong>Установить срок хранения версий</strong>, затем из выпадающего списка выберите нужный срок хранения версий для каждого типа документов и справочников: версии можно хранить <strong>За последнюю неделю</strong>, <strong>За последний месяц</strong>, <strong>За последние три месяца</strong>, <strong>За последние шесть месяцев</strong>, <strong>За последний год</strong> и <strong>Бессрочно</strong>.</div></li></ul><h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Просмотр отчета "Количество и объем хранимых версий объектов"</h3> <ul><li> <div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">По соответствующей ссылке можно перейти к просмотру <a href="Report.АнализВерсийОбъектов/Help">отчета</a> <strong>Количество и объем хранимых версий объектов</strong>.</div></li></ul><h3 style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Очистка устаревших версий</h3> <ul><li> <div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">В поле <strong>Всего устаревших версий </strong>выдается информация о количестве и объеме устаревших версий в программе.</div> </li><li> -<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Нажмите <strong>Очистить</strong>, для того чтобы удалить устаревшие версии.</div> +<div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Нажмите <strong>Очистить</strong>, для того чтобы удалить устаревшие версии. Кнопка становится доступной, если в программе имеются устаревшие версии.</div> </li><li> <div style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt">Для того чтобы <strong>Автоматически удалять устаревшие версии</strong>, включите соответствующий флажок.</div> </li><li> diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Help/ru.html b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Help/ru.html index 2aaa322be..08341b3cf 100644 --- a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Help/ru.html +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначена для настройки правила очистки файлов для каждого владельца (документа, папки и других объектов программы).</p> <p>Открывается из окна <a href="InformationRegister.НастройкиОчисткиФайлов/Help">Настройки очистки файлов</a> по ссылке <strong>Изменить</strong> в колонке <strong>Правило</strong> для каждого владельца.</p> <h3>Новый отбор</h3> diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Module.bsl index 606de3f9a..d38cf7622 100644 --- a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаЗаписи/Module.bsl @@ -121,7 +121,7 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("МассивЗначений", МассивРеквизитовСТипомДата); - ОткрытьФорму("РегистрСведений.НастройкиОчисткиФайлов.Форма.ФормаДобавленияУсловияПоДате",ПараметрыФормы, ЭтаФорма); + ОткрытьФорму("РегистрСведений.НастройкиОчисткиФайлов.Форма.ФормаДобавленияУсловияПоДате", ПараметрыФормы, ЭтотОбъект); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Form.form index ff76daf76..736759e5a 100644 --- a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Form.form @@ -461,6 +461,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <items xsi:type="form:FormGroup"> @@ -527,6 +528,7 @@ <extInfo xsi:type="form:PageGroupExtInfo"> <group>Vertical</group> <showTitle>auto</showTitle> + <scrollOnCompress>false</scrollOnCompress> </extInfo> </items> <visible>true</visible> @@ -1429,6 +1431,21 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>РежимРаботы</name> + <title> + <key>ru</key> + <value>Режим работы</value> + + 9 + + + true + + + true + + ДобавитьНастройку diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Module.bsl index 89dbb969d..e5a01da73 100644 --- a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Forms/ФормаСписка/Module.bsl @@ -7,20 +7,30 @@ Возврат; КонецЕсли; + // Значения реквизитов формы + РежимРаботы = ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы(); + РежимРаботы = Новый ФиксированнаяСтруктура(РежимРаботы); + ЗаполнитьТипыОбъектовВДеревеЗначений(); ЗаполнитьСпискиВыбора(); - Элементы.Расписание.Заголовок = ТекущееРасписание(); АвтоматическиОчищатьНенужныеФайлы = АвтоматическаяОчисткаВключена(); + Элементы.Расписание.Заголовок = ТекущееРасписание(); + Элементы.Расписание.Доступность = АвтоматическиОчищатьНенужныеФайлы; Элементы.НастроитьРасписание.Доступность = АвтоматическиОчищатьНенужныеФайлы; + Если РежимРаботы.МодельСервиса Тогда + Элементы.НастроитьРасписание.Видимость = Ложь; + Элементы.Расписание.Видимость = Ложь; + КонецЕсли; + КонецПроцедуры &НаКлиенте Процедура АвтоматическиОчищатьНенужныеФайлыПриИзменении(Элемент) - ВключитьОтключитьРегламентноеЗадание(АвтоматическиОчищатьНенужныеФайлы); + УстановитьПараметрРегламентногоЗадания("Использование", АвтоматическиОчищатьНенужныеФайлы); Элементы.Расписание.Доступность = АвтоматическиОчищатьНенужныеФайлы; Элементы.НастроитьРасписание.Доступность = АвтоматическиОчищатьНенужныеФайлы; КонецПроцедуры @@ -286,6 +296,7 @@ ТаблицаТипов.Колонки.Добавить("ВозможностьДетализации" , Новый ОписаниеТипов("Булево")); ВидИерархииГруппИЭлементов = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов; + МассивИсключений = ФайловыеФункцииСлужебный.ОбъектыИсключенияПриОчисткеФайлов(); Для Каждого Справочник Из МетаданныеСправочники Цикл @@ -381,116 +392,17 @@ КонецПроцедуры -&НаСервере -Функция ТекущееРасписание() - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); - ИмяМетода = Метаданные.РегламентныеЗадания.ОчисткаНенужныхФайлов.ИмяМетода; - - ПараметрыЗадания = Новый Структура; - ПараметрыЗадания.Вставить("ИмяМетода", ИмяМетода); - ПараметрыЗадания.Вставить("ОбластьДанных", ОбластьДанных); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда - МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); - - УстановитьПривилегированныйРежим(Истина); - - СписокЗаданий = МодульОчередьЗаданий.ПолучитьЗадания(ПараметрыЗадания); - Для Каждого Задание Из СписокЗаданий Цикл - Возврат Задание.Расписание; - КонецЦикла; - - Возврат Новый РасписаниеРегламентногоЗадания; - КонецЕсли; - Иначе - Возврат РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОчисткаНенужныхФайлов).Расписание; - КонецЕсли; - -КонецФункции - &НаКлиенте Процедура НастроитьРасписаниеЗавершение(Расписание, ДополнительныеПараметры) Экспорт Если Расписание = Неопределено Тогда Возврат; КонецЕсли; - УстановитьРасписаниеРегламентногоЗадания(Расписание); + УстановитьПараметрРегламентногоЗадания("Расписание", Расписание); Элементы.Расписание.Заголовок = Расписание; КонецПроцедуры -&НаСервере -Процедура УстановитьРасписаниеРегламентногоЗадания(Расписание); - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); - ИмяМетода = Метаданные.РегламентныеЗадания.ОчисткаНенужныхФайлов.ИмяМетода; - - ПараметрыЗадания = Новый Структура; - ПараметрыЗадания.Вставить("ИмяМетода", ИмяМетода); - ПараметрыЗадания.Вставить("ОбластьДанных", ОбластьДанных); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда - МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); - - УстановитьПривилегированныйРежим(Истина); - - СписокЗаданий = МодульОчередьЗаданий.ПолучитьЗадания(ПараметрыЗадания); - Если СписокЗаданий.Количество() = 0 Тогда - ПараметрыЗадания.Вставить("Расписание", Расписание); - МодульОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); - Иначе - ПараметрыЗадания = Новый Структура("Расписание", Расписание); - Для Каждого Задание Из СписокЗаданий Цикл - МодульОчередьЗаданий.ИзменитьЗадание(Задание.Идентификатор, ПараметрыЗадания); - КонецЦикла; - КонецЕсли; - КонецЕсли; - Иначе - РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОчисткаНенужныхФайлов); - РегламентноеЗадание.Расписание = Расписание; - РегламентноеЗадание.Записать(); - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ВключитьОтключитьРегламентноеЗадание(Использование) - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); - ИмяМетода = Метаданные.РегламентныеЗадания.ОчисткаНенужныхФайлов.ИмяМетода; - - ПараметрыЗадания = Новый Структура; - ПараметрыЗадания.Вставить("ИмяМетода", ИмяМетода); - ПараметрыЗадания.Вставить("ОбластьДанных", ОбластьДанных); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда - МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); - - УстановитьПривилегированныйРежим(Истина); - - СписокЗаданий = МодульОчередьЗаданий.ПолучитьЗадания(ПараметрыЗадания); - Если СписокЗаданий.Количество() = 0 Тогда - ПараметрыЗадания.Вставить("Использование", Использование); - МодульОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); - Иначе - ПараметрыЗадания = Новый Структура("Использование", Использование); - Для Каждого Задание Из СписокЗаданий Цикл - МодульОчередьЗаданий.ИзменитьЗадание(Задание.Идентификатор, ПараметрыЗадания); - КонецЦикла; - КонецЕсли; - КонецЕсли; - Иначе - РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОчисткаНенужныхФайлов); - РегламентноеЗадание.Использование = Не РегламентноеЗадание.Использование; - РегламентноеЗадание.Записать(); - КонецЕсли; - -КонецПроцедуры - &НаСервере Процедура УстановитьПериодОчисткиДляВыбранныхОбъектов(ПериодОчистки) @@ -596,7 +508,7 @@ ПараметрыЗаписи = Новый Структура; ПараметрыЗаписи.Вставить("Ключ", КлючЗаписи); - ОткрытьФорму("РегистрСведений.НастройкиОчисткиФайлов.ФормаЗаписи", ПараметрыЗаписи, ЭтаФорма); + ОткрытьФорму("РегистрСведений.НастройкиОчисткиФайлов.ФормаЗаписи", ПараметрыЗаписи, ЭтотОбъект); КонецПроцедуры @@ -632,23 +544,18 @@ &НаСервере Процедура ЗапуститьРегламентноеЗадание() - РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОчисткаНенужныхФайлов); + РегламентноеЗаданиеМетаданные = Метаданные.РегламентныеЗадания.ОчисткаНенужныхФайлов; Отбор = Новый Структура; - Отбор.Вставить("РегламентноеЗадание", РегламентноеЗадание); + ИмяМетода = РегламентноеЗаданиеМетаданные.ИмяМетода; + Отбор.Вставить("ИмяМетода", ИмяМетода); Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); ФоновыеЗаданияОчистки = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); Если ФоновыеЗаданияОчистки.Количество() > 0 Тогда ИдентификаторФоновогоЗадания = ФоновыеЗаданияОчистки[0].УникальныйИдентификатор; Иначе - НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Запуск вручную: %1'"), РегламентноеЗадание.Метаданные.Синоним); - - ФоновоеЗадание = ФоновыеЗадания.Выполнить( - РегламентноеЗадание.Метаданные.ИмяМетода, - РегламентноеЗадание.Параметры, - Строка(РегламентноеЗадание.УникальныйИдентификатор), - НаименованиеФоновогоЗадания); - + НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Запуск вручную: %1'"), РегламентноеЗаданиеМетаданные.Синоним); + ФоновоеЗадание = ФоновыеЗадания.Выполнить(РегламентноеЗаданиеМетаданные.ИмяМетода, , , НаименованиеФоновогоЗадания); ИдентификаторФоновогоЗадания = ФоновоеЗадание.УникальныйИдентификатор; КонецЕсли; @@ -656,6 +563,50 @@ КонецПроцедуры +&НаСервере +Процедура УстановитьПараметрРегламентногоЗадания(ИмяПараметра, ЗначениеПараметра) + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("Метаданные", Метаданные.РегламентныеЗадания.ОчисткаНенужныхФайлов); + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ПараметрыЗадания.Вставить("ИмяМетода", Метаданные.РегламентныеЗадания.ОчисткаНенужныхФайлов.ИмяМетода); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + СписокЗаданий = РегламентныеЗаданияСервер.НайтиЗадания(ПараметрыЗадания); + Если СписокЗаданий.Количество() = 0 Тогда + ПараметрыЗадания.Вставить(ИмяПараметра, ЗначениеПараметра); + РегламентныеЗаданияСервер.ДобавитьЗадание(ПараметрыЗадания); + Иначе + ПараметрыЗадания = Новый Структура(ИмяПараметра, ЗначениеПараметра); + Для Каждого Задание Из СписокЗаданий Цикл + РегламентныеЗаданияСервер.ИзменитьЗадание(Задание, ПараметрыЗадания); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ПолучитьПараметрРегламентногоЗадания(ИмяПараметра, ЗначениеПоУмолчанию) + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("Метаданные", Метаданные.РегламентныеЗадания.ОчисткаНенужныхФайлов); + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ПараметрыЗадания.Вставить("ИмяМетода", Метаданные.РегламентныеЗадания.ОчисткаНенужныхФайлов.ИмяМетода); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + СписокЗаданий = РегламентныеЗаданияСервер.НайтиЗадания(ПараметрыЗадания); + Для Каждого Задание Из СписокЗаданий Цикл + Возврат Задание[ИмяПараметра]; + КонецЦикла; + + Возврат ЗначениеПоУмолчанию; + +КонецФункции + &НаСервере Процедура ДобавитьНастройкиПоВладельцу(ВыбранноеЗначение) @@ -703,33 +654,14 @@ КонецПроцедуры +&НаСервере +Функция ТекущееРасписание() + Возврат ПолучитьПараметрРегламентногоЗадания("Расписание", Новый РасписаниеРегламентногоЗадания); +КонецФункции + &НаСервере Функция АвтоматическаяОчисткаВключена() - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); - ИмяМетода = Метаданные.РегламентныеЗадания.ОчисткаНенужныхФайлов.ИмяМетода; - - ПараметрыЗадания = Новый Структура; - ПараметрыЗадания.Вставить("ИмяМетода", ИмяМетода); - ПараметрыЗадания.Вставить("ОбластьДанных", ОбластьДанных); - - Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий") Тогда - МодульОчередьЗаданий = ОбщегоНазначения.ОбщийМодуль("ОчередьЗаданий"); - - УстановитьПривилегированныйРежим(Истина); - - СписокЗаданий = МодульОчередьЗаданий.ПолучитьЗадания(ПараметрыЗадания); - Для Каждого Задание Из СписокЗаданий Цикл - Возврат Задание.Использование; - КонецЦикла; - КонецЕсли; - Иначе - Возврат РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОчисткаНенужныхФайлов).Использование; - КонецЕсли; - - Возврат Ложь; - + Возврат ПолучитьПараметрРегламентногоЗадания("Использование", Ложь); КонецФункции #КонецОбласти diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Help/ru.html b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Help/ru.html index 7d7e9b9a2..91d94bf0d 100644 --- a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Help/ru.html +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для очистки места на диске, занимаемого "ненужными" файлами (устаревшими, добавленными по ошибке).</p> <p>Программа позволяет сократить объем данных, занимаемый "ненужными" файлами. Под ненужными понимаются файлы, потерявшие свою актуальность (например, по истечении определенного времени).</p> <p>В программе предусмотрен механизм, который позволяет настраивать правила удаления "ненужных" файлов по свойствам самих файлов и свойствам, типам их владельцев, а также удалять эти файлы регламентным заданием. </p> @@ -18,7 +18,8 @@ </li><li><strong>Старше года</strong>.</li></ul></li><li>Имеется также возможность разработать свои правила очистки файлов. Для этого в колонке <strong>Период очистки</strong> выберите значение <strong>По правилу</strong>. <ul><li>В колонке <strong>Правило</strong> становится доступной кнопка <img src="StdPicture.InputFieldSelect"></img> <strong>Изменить</strong>. Нажав ее, можно задать более точное правило отбора "ненужных" файлов. <ul><li>Например, для папки <strong>Счета</strong> можно настроить очистку файлов и их версий, которые были созданы до начала этого года. -</li><li>В окне <strong>Настройка очистки файлов</strong> для соответствующего владельца введите новый <a href="InformationRegister.НастройкиОчисткиФайлов.Form.ФормаЗаписи/Help">отбор</a> с помощью кнопки <strong>Добавить</strong>. </li></ul></li><li> +</li><li>В окне <strong>Настройка очистки файлов</strong> для соответствующего владельца введите новый <a href="InformationRegister.НастройкиОчисткиФайлов.Form.ФормаЗаписи/Help">отбор</a> с помощью кнопки <strong>Добавить</strong>. +</li><li>Если у объекта есть реквизит с типом <strong>Дата</strong>, в этом случае появляется возможность настройки правила очистки относительно этого реквизита. В этом случае по кнопке <strong>Добавить</strong> выберите команду <strong>Добавить условие по дате</strong>, введите дату для отбора.</li></ul></li><li> <div>После подтверждения выбора становится активной ссылка <strong>Изменить</strong>, с помощью которой можно менять введенные условия отбора.</div></li></ul></li></ul><h3>Отчет "Объем ненужных файлов"</h3> <ul><li>Для получения <a href="Report.ОбъемНенужныхФайлов/Help">отчета об объеме данных</a> на диске, который занимают "ненужные" файлы, нажмите ссылку <strong>Объем ненужных файлов</strong>. </li></ul><h3>Очистка файлов вручную</h3> <ul><li>С помощью кнопки <strong>Очистить</strong> можно в любой момент времени вручную удалить "ненужные" файлы с учетом настроенных правил очистки.</li></ul><h3>Настройка автоматической очистки файлов</h3> diff --git a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/НастройкиОчисткиФайлов.mdo b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/НастройкиОчисткиФайлов.mdo index 2eea587fe..4fe98976a 100644 --- a/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/НастройкиОчисткиФайлов.mdo +++ b/SSL/src/InformationRegisters/НастройкиОчисткиФайлов/НастройкиОчисткиФайлов.mdo @@ -139,7 +139,14 @@ <value>Владелец</value> </synonym> <type> - <types>AnyRef</types> + <types>ExchangePlanRef</types> + <types>BusinessProcessRef</types> + <types>DocumentRef</types> + <types>ChartOfCalculationTypesRef</types> + <types>TaskRef</types> + <types>ChartOfCharacteristicTypesRef</types> + <types>ChartOfAccountsRef</types> + <types>CatalogRef</types> </type> <toolTip> <key>ru</key> diff --git a/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаЗаписи/Form.form index 518a45d22..8faa50bb5 100644 --- a/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/НастройкиПравОбъектов/Forms/ФормаЗаписи/Form.form @@ -407,14 +407,6 @@ <userVisible> <common>true</common> </userVisible> - <title> - <key>ru</key> - <value> </value> - - - ru - - ВертикальнаяГруппа3РасширеннаяПодсказка 55 @@ -525,14 +517,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - ВертикальнаяГруппа1ExtendedTooltip 45 @@ -643,14 +627,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - ВертикальнаяГруппа2ExtendedTooltip 50 diff --git a/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl index 30512f985..5607c7859 100644 --- a/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиПравОбъектов/ManagerModule.bsl @@ -682,7 +682,7 @@ // ТаблицаЗначений // ВладелецПрав - Строка - полное имя таблицы значения доступа, // Имя - Строка - идентификатор права, например, ИзменениеПапок, -// право с имененем "УправлениеПравами" должно быть обязательно определено для общей формы настройки +// право с именем "УправлениеПравами" должно быть обязательно определено для общей формы настройки // прав // "Права доступа", "Управление правами" - это право на изменение прав по владельцу прав, // которое проверяется при открытии РегистрСведений.НастройкиПравОбъектов.Форма.НастройкиПравОбъектов; diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Form.form b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Form.form new file mode 100644 index 000000000..c8f4bd558 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Form.form @@ -0,0 +1,306 @@ + + + + ГруппаУсловиеПоДате + 7 + + ИнтервалИсключение + 4 + + <key>ru</key> + <value>Очищать файлы спустя</value> + + true + true + + true + + + ИнтервалИсключение + + + ИнтервалИсключениеРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + ИнтервалИсключениеКонтекстноеМеню + 5 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + РеквизитСТипомДата + 1 + + <key>ru</key> + <value>дней относительно</value> + + true + true + + true + + + РеквизитСТипомДата + + + РеквизитСТипомДатаРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + РеквизитСТипомДатаКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Настройка интервала-исключения</value> + + + ru + Группа условие по дате + + + ГруппаУсловиеПоДатеРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + UsualGroup + + Auto + WeakSeparation + true + true + Auto + Auto + + + + КоманднаяПанель + 9 + + ОК + 11 + true + true + + true + + + ОКРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + Form.Command.ОК + Auto + true + true + true + UserCmds + Auto + + + Отмена + 13 + true + true + + true + + + ОтменаРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + ru + Командная панель + + + КоманднаяПанельРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + CommandBar + + Right + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + Abort + CustomizeForm + Help + Ignore + No + RestoreValues + Retry + SaveValues + Yes + LockOwner + true + true + true + Vertical + true + true + true + auto + true + + РеквизитСТипомДата + + <key>ru</key> + <value>Реквизит с типом дата</value> + + 1 + + String + + + + true + + + true + + ShowError + + + ИнтервалИсключение + + <key>ru</key> + <value>Интервал исключение</value> + + 2 + + Number + + 10 + + + + true + + + true + + + + ОК + + <key>ru</key> + <value>ОК</value> + + 1 + + ru + ОК + + + true + + + + ОК + + + DontUse + Auto + + + + + + diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Module.bsl b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Module.bsl new file mode 100644 index 000000000..b06572197 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ДобавленияУсловияПоДате/Module.bsl @@ -0,0 +1,36 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Не Параметры.Свойство("МассивЗначений") Тогда // Возврат, если нет реквизитов с типом дата. + Возврат; + КонецЕсли; + + ЕстьТолькоОдинРеквизит = Параметры.МассивЗначений.Количество() = 1; + + Для Каждого Реквизит Из Параметры.МассивЗначений Цикл + Элементы.РеквизитСТипомДата.СписокВыбора.Добавить(Реквизит.Значение, Реквизит.Представление); + Если ЕстьТолькоОдинРеквизит Тогда + РеквизитСТипомДата = Реквизит.Значение; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ОК(Команда) + + СтруктураРезультат = Новый Структура(); + СтруктураРезультат.Вставить("ИнтервалИсключение", ИнтервалИсключение); + СтруктураРезультат.Вставить("РеквизитСТипомДата", РеквизитСТипомДата); + + ОповеститьОВыборе(СтруктураРезультат); + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/ConditionalAppearance.dcssca b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/ConditionalAppearance.dcssca new file mode 100644 index 000000000..55f9b3e9f --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/ConditionalAppearance.dcssca @@ -0,0 +1,67 @@ + + + + + + ДеревоОбъектовМетаданныхСинонимНаименованияОбъекта + + + + + ДеревоОбъектовМетаданных.Синхронизировать + Equal + true + + + + + Шрифт + + + + + + + + ДеревоОбъектовМетаданныхПравилоОтбора + + + + + ДеревоОбъектовМетаданных.Синхронизировать + Equal + false + + + + + Видимость + false + + + + + + + ДеревоОбъектовМетаданныхУчетнаяЗапись + + + + + ДеревоОбъектовМетаданных.Синхронизировать + Equal + true + + + ДеревоОбъектовМетаданных.УчетнаяЗапись + NotFilled + + + + + ОтметкаНезаполненного + true + + + + diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Form.form b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Form.form new file mode 100644 index 000000000..a80359032 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Form.form @@ -0,0 +1,1381 @@ + + + + ДеревоОбъектовМетаданных + 13 + true + true + + true + + + ДеревоОбъектовМетаданных + + None + Add + Change + Copy + CopyToClipboard + Delete + EndEdit + HierarchicalList + List + MoveDown + MoveUp + OutputList + SelectAll + ShowRowRearrangement + SortListAsc + SortListDesc + Tree + + ДеревоОбъектовМетаданныхСинхронизировать + 44 + true + true + + true + + + ДеревоОбъектовМетаданных.Синхронизировать + + None + + OnChange + ДеревоОбъектовМетаданныхСинхронизироватьПриИзменении + + + ДеревоОбъектовМетаданныхСинхронизироватьРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + ДеревоОбъектовМетаданныхСинхронизироватьКонтекстноеМеню + 45 + true + + CheckBoxField + Auto + true + Left + true + + + + ДеревоОбъектовМетаданныхСинонимНаименованияОбъекта + 29 + true + true + + true + + + ДеревоОбъектовМетаданных.СинонимНаименованияОбъекта + + + ДеревоОбъектовМетаданныхСинонимНаименованияОбъектаРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + ДеревоОбъектовМетаданныхСинонимНаименованияОбъектаКонтекстноеМеню + 30 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДеревоОбъектовМетаданныхУчетнаяЗапись + 47 + true + true + + true + + + ДеревоОбъектовМетаданных.УчетнаяЗапись + + + OnChange + ЗаписатьТекущиеНастройки + + + ДеревоОбъектовМетаданныхУчетнаяЗаписьРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + + ДеревоОбъектовМетаданныхУчетнаяЗаписьКонтекстноеМеню + 48 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДеревоОбъектовМетаданныхПравилоОтбора + 32 + true + true + + true + + + ДеревоОбъектовМетаданных.ПравилоОтбора + + + ДеревоОбъектовМетаданныхПравилоОтбораРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + ДеревоОбъектовМетаданныхПравилоОтбораКонтекстноеМеню + 33 + true + + InputField + Auto + true + true + Left + true + Show + Always + + + StartChoice + ДеревоОбъектовМетаданныхПравилоОтбораНачалоВыбора + + true + true + true + true + true + true + Normal + + + + ДеревоОбъектовМетаданныхКоманднаяПанель + 15 + Left + + + Selection + ДеревоОбъектовМетаданныхВыбор + + + ChoiceProcessing + ДеревоОбъектовМетаданныхОбработкаВыбора + + + ДеревоОбъектовМетаданныхСтрокаПоиска + 17 + + ДеревоОбъектовМетаданныхСтрокаПоискаРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + ДеревоОбъектовМетаданныхСтрокаПоискаКонтекстноеМеню + 18 + true + + ДеревоОбъектовМетаданных + + true + + + + ДеревоОбъектовМетаданныхСостояниеПросмотра + 20 + + ДеревоОбъектовМетаданныхСостояниеПросмотраРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + ДеревоОбъектовМетаданныхСостояниеПросмотраКонтекстноеМеню + 21 + true + + ViewStatusAddition + ДеревоОбъектовМетаданных + + true + + + + ДеревоОбъектовМетаданныхУправлениеПоиском + 23 + + ДеревоОбъектовМетаданныхУправлениеПоискомРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + ДеревоОбъектовМетаданныхУправлениеПоискомКонтекстноеМеню + 24 + true + + SearchControlAddition + ДеревоОбъектовМетаданных + + true + + + + ДеревоОбъектовМетаданныхРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + ДеревоОбъектовМетаданныхКонтекстноеМеню + 14 + + ДеревоОбъектовМетаданныхКонтекстноеМенюСоздатьСинхронизациюФайлов + 84 + true + true + + true + + + ДеревоОбъектовМетаданныхКонтекстноеМенюСоздатьСинхронизациюФайловРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + Form.Command.СоздатьСинхронизациюФайлов + Normal + Auto + true + true + UserCmds + + StdPicture.CreateListItem + + Auto + + + ДеревоОбъектовМетаданныхКонтекстноеМенюИзменитьНастройкуСинхронизации + 86 + true + true + + true + + + ДеревоОбъектовМетаданныхКонтекстноеМенюИзменитьНастройкуСинхронизацииРасширеннаяПодсказка + 87 + Label + true + true + + Left + + + Form.Command.ИзменитьНастройкуСинхронизации + Normal + Auto + true + true + UserCmds + Auto + + + ДеревоОбъектовМетаданныхКонтекстноеМенюУдалитьНастройку + 82 + true + true + + true + + + ДеревоОбъектовМетаданныхКонтекстноеМенюУдалитьНастройкуРасширеннаяПодсказка + 83 + Label + true + true + + Left + + + Form.Command.УдалитьНастройку + Normal + Auto + true + true + UserCmds + Auto + + true + + Tree + true + true + true + MultiRow +
                          true
                          + 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + ExpandAllLevels + true + true + true +
                          + + СинхронизацияПоРасписанию + 1 + + НастройкиСинхронизации + 3 + + АвтоматическиСинхронизироватьФайлы + 5 + true + true + + true + + + АвтоматическиСинхронизироватьФайлы + + Right + + OnChange + АвтоматическиСинхронизироватьФайлыПриИзменении + + + АвтоматическиСинхронизироватьФайлыРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + АвтоматическиСинхронизироватьФайлыКонтекстноеМеню + 6 + true + + CheckBoxField + Enter + true + Left + true + + + + НастроитьРасписание + 8 + true + true + + true + + + НастроитьРасписаниеРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + Hyperlink + Form.Command.НастроитьРасписание + Normal + Auto + true + true + UserCmds + Auto + + + СинхронизацияФайлов + 88 + + Синхронизация + 90 + + Синхронизировать + 80 + + <key>ru</key> + <value>Синхронизировать</value> + + true + true + + true + + + СинхронизироватьРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + UsualButton + Form.Command.Синхронизировать + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Синхронизация</value> + + + ru + Синхронизация + + + СинхронизацияРасширеннаяПодсказка + 91 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + СтатусФоновогоЗадания + 92 + + ИнформацияОФоновомЗадании + 94 + + <key>ru</key> + <value>Выполняется синхронизация файлов...</value> + + true + true + + true + + + ИнформацияОФоновомЗаданииРасширеннаяПодсказка + 96 + Label + true + true + + Left + + + + ИнформацияОФоновомЗаданииКонтекстноеМеню + 95 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Статус фонового задания</value> + + + ru + Статус фонового задания + + + СтатусФоновогоЗаданияРасширеннаяПодсказка + 93 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Синхронизация файлов</value> + + + ru + Синхронизация файлов + + + СинхронизацияФайловРасширеннаяПодсказка + 89 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Настройки синхронизации</value> + + + ru + Настройки синхронизации + + + НастройкиСинхронизацииРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Расписание + 10 + + <key>ru</key> + <value>каждый день, по дням недели [суббота, воскресенье ]; с 1:00:00 один раз в день, завершать после 7:00:00</value> + + true + true + + true + + + РасписаниеРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + РасписаниеКонтекстноеМеню + 11 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + Top + + + true + true + + true + + + <key>ru</key> + <value>Синхронизация по расписанию</value> + + + ru + Синхронизация по расписанию + + + СинхронизацияПоРасписаниюРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + + ФормаДобавитьСинхронизациюФайлов + 78 + + <key>ru</key> + <value>Настроить синхронизацию файлов</value> + + true + true + + true + + + ФормаДобавитьСинхронизациюФайловРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + Form.Command.СоздатьСинхронизациюФайлов + Normal + PictureAndText + true + true + UserCmds + + StdPicture.CreateListItem + + Auto + + + НастройкиСинхронизацииГруппа + 54 + + ФормаДобавитьНастройку + 56 + true + true + + true + + + ФормаДобавитьНастройкуРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + Form.Command.СинхронизацияЭлемента + Normal + Auto + true + true + UserCmds + Auto + + true + + true + + + <key>ru</key> + <value>Настроить синхронизацию файлов</value> + + + ru + Настройки синхронизации группа + + + НастройкиСинхронизацииГруппаРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + Popup + + + StdPicture.CreateListItem + + Auto + Normal + + + + НастройкиУчетнойЗаписиГруппа + 72 + + ДоступныеУчетныеЗаписи + 76 + true + true + + true + + + <key>ru</key> + <value>Доступные учетные записи</value> + + + ru + Доступные учетные записи + + + ДоступныеУчетныеЗаписиРасширеннаяПодсказка + 77 + Label + true + true + + Left + + + + + true + + true + + + <key>ru</key> + <value>Установить учетную запись</value> + + + ru + Настройки учетной записи группа + + + НастройкиУчетнойЗаписиГруппаРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + + ФормаУдалитьНастройку + 58 + true + true + + true + + + ФормаУдалитьНастройкуРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + Form.Command.УдалитьНастройку + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + true + + + ChoiceProcessing + ОбработкаВыбора + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + АвтоматическиСинхронизироватьФайлы + + <key>ru</key> + <value>Автоматически синхронизировать файлы</value> + + 1 + + Boolean + + + true + + + true + + + + ИдентификаторФоновогоЗадания + + <key>ru</key> + <value>Идентификатор фонового задания</value> + + 2 + + UUID + + + true + + + true + + + + ТекущееФоновоеЗадание + + <key>ru</key> + <value>Текущее фоновое задание</value> + + 3 + + String + + + + true + + + true + + + + ДеревоОбъектовМетаданных + + <key>ru</key> + <value>Дерево объектов метаданных</value> + + 4 + + ValueTree + + + true + + + true + + + ВладелецФайла + + <key>ru</key> + <value>Владелец файла</value> + + 1 + + AnyRef + + + true + + + true + + + + СинонимНаименованияОбъекта + + <key>ru</key> + <value>Владелец файла</value> + + 2 + + String + + + + true + + + true + + + + ПравилоОтбора + + <key>ru</key> + <value>Правило</value> + + 3 + + String + + + + true + + + true + + + + ЭтоФайл + + <key>ru</key> + <value>Это файл</value> + + 4 + + Boolean + + + true + + + true + + + + ТипВладельцаФайла + + <key>ru</key> + <value>Тип владельца файла</value> + + 5 + + CatalogRef.ИдентификаторыОбъектовМетаданных + + + true + + + true + + + + ВозможностьДетализации + + <key>ru</key> + <value>Возможность детализации</value> + + 6 + + Boolean + + + true + + + true + + + + Синхронизировать + + <key>ru</key> + <value>Синхронизировать</value> + + 7 + + Boolean + + + true + + + true + + + + УчетнаяЗапись + + <key>ru</key> + <value>Учетная запись</value> + + 8 + + CatalogRef.УчетныеЗаписиСинхронизацииФайлов + + + true + + + true + + + + ПодПапкаОблачногоСервиса + + <key>ru</key> + <value>Под папка облачного сервиса</value> + + 9 + + String + + + + true + + + true + + + + + ТекущийВладелецФайла + + <key>ru</key> + <value>Текущий владелец файла</value> + + 5 + + CatalogRef.ИдентификаторыОбъектовМетаданных + + + true + + + true + + + + ВладелецФайла + + <key>ru</key> + <value>Владелец файла</value> + + 6 + + AnyRef + + + true + + + true + + + + СтрокаНайдена + + <key>ru</key> + <value>Строка найдена</value> + + 7 + + Boolean + + + true + + + true + + + + РежимРаботы + + <key>ru</key> + <value>Режим работы</value> + + 8 + + + true + + + true + + + + НастроитьРасписание + + <key>ru</key> + <value>Настроить расписание</value> + + 1 + + ru + Настроить расписание + + + true + + + + НастроитьРасписание + + + DontUse + Auto + + + СинхронизацияЭлемента + + <key>ru</key> + <value>Синхронизация элемента справочника</value> + + 3 + + ru + Синхронизация элемента + + + true + + + + СинхронизацияЭлемента + + + DontUse + Auto + + + УдалитьНастройку + + <key>ru</key> + <value>Удалить настройку</value> + + 4 + + ru + Удалить настройку + + + true + + + StdPicture.Delete + + + + УдалитьНастройку + + + DontUse + Auto + + + Синхронизировать + + <key>ru</key> + <value>Синхронизировать</value> + + 5 + + ru + Синхронизировать + + + true + + + CommonPicture.СинхронизацияДанных + + + + Синхронизировать + + + DontUse + Auto + + + СоздатьСинхронизациюФайлов + + <key>ru</key> + <value>Настроить синхронизацию файлов</value> + + 7 + + ru + Создать синхронизацию файлов + + + true + + + + СоздатьСинхронизациюФайлов + + + DontUse + Auto + + + ИзменитьНастройкуСинхронизации + + <key>ru</key> + <value>Изменить</value> + + 8 + + ru + Изменить настройку синхронизации + + + true + + + StdPicture.Change + + + + ИзменитьНастройкуСинхронизации + + + DontUse + Auto + + + + + +
                          diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Module.bsl b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Module.bsl new file mode 100644 index 000000000..871f8afc4 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/НастройкиСинхронизацииФайлов/Module.bsl @@ -0,0 +1,638 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + // Значения реквизитов формы + РежимРаботы = ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы(); + РежимРаботы = Новый ФиксированнаяСтруктура(РежимРаботы); + + Если Параметры.Свойство("ВладелецФайла") Тогда + ТекущийВладелецФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипЗнч(Параметры.ВладелецФайла)); + ВладелецФайла = Параметры.ВладелецФайла; + КонецЕсли; + + ЗаполнитьТипыОбъектовВДеревеЗначений(); + + АвтоматическиСинхронизироватьФайлы = АвтоматическаяСинхронизацияВключена(); + Элементы.Расписание.Заголовок = ТекущееРасписание(); + + Элементы.Расписание.Доступность = АвтоматическиСинхронизироватьФайлы; + Элементы.НастроитьРасписание.Доступность = АвтоматическиСинхронизироватьФайлы; + + Если РежимРаботы.МодельСервиса Тогда + Элементы.НастроитьРасписание.Видимость = Ложь; + Элементы.Расписание.Видимость = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура АвтоматическиСинхронизироватьФайлыПриИзменении(Элемент) + + УстановитьПараметрРегламентногоЗадания("Использование", АвтоматическиСинхронизироватьФайлы); + Элементы.Расписание.Доступность = АвтоматическиСинхронизироватьФайлы; + Элементы.НастроитьРасписание.Доступность = АвтоматическиСинхронизироватьФайлы; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ИсточникВыбора.ИмяФормы = "РегистрСведений.НастройкиСинхронизацииФайлов.Форма.ФормаЗаписиНастройки" Тогда + ДобавитьНастройкиПоВладельцу(ВыбранноеЗначение); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоОбъектовМетаданных + +&НаКлиенте +Процедура ДеревоОбъектовМетаданныхСинхронизироватьПриИзменении(Элемент) + + ТекущиеДанные = Элементы.ДеревоОбъектовМетаданных.ТекущиеДанные; + + Если Не ЗначениеЗаполнено(ТекущиеДанные.УчетнаяЗапись) Тогда + ТекущиеДанные.Синхронизировать = Ложь; + ОткрытьФормуНастроек(); + Возврат; + КонецЕсли; + + Если ТекущиеДанные.ПолучитьЭлементы().Количество() > 0 Тогда + УстановитьЗначениеСинхронизацииПодчиненнымОбъектам(ТекущиеДанные.Синхронизировать); + Иначе + ЗаписатьТекущиеНастройки(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоОбъектовМетаданныхВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + Если Поле.Имя = "ДеревоОбъектовМетаданныхПравилоОтбора" Тогда + СтандартнаяОбработка = Ложь; + ОткрытьФормуНастроек(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоОбъектовМетаданныхПравилоОтбораНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ОткрытьФормуНастроек(); + +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоОбъектовМетаданныхОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ДобавитьНастройкиПоВладельцу(ВыбранноеЗначение); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура НастроитьРасписание(Команда) + ДиалогРасписания = Новый ДиалогРасписанияРегламентногоЗадания(ТекущееРасписание()); + ОписаниеОповещения = Новый ОписаниеОповещения("НастроитьРасписаниеЗавершение", ЭтотОбъект); + ДиалогРасписания.Показать(ОписаниеОповещения); +КонецПроцедуры + +&НаКлиенте +Процедура СинхронизацияЭлемента(Команда) + + СтрокаДерева = Элементы.ДеревоОбъектовМетаданных.ТекущиеДанные; + Если Не СтрокаДерева.ВозможностьДетализации Тогда + ТекстСообщения = НСтр("ru = 'Добавление настройки возможно только для иерархических справочников'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + Возврат; + КонецЕсли; + + ПараметрыФормыВыбора = Новый Структура; + + ПараметрыФормыВыбора.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.ГруппыИЭлементы); + ПараметрыФормыВыбора.Вставить("ЗакрыватьПриВыборе", Истина); + ПараметрыФормыВыбора.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина); + ПараметрыФормыВыбора.Вставить("МножественныйВыбор", Истина); + ПараметрыФормыВыбора.Вставить("РежимВыбора", Истина); + + ПараметрыФормыВыбора.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ПараметрыФормыВыбора.Вставить("ВыборГрупп", Истина); + ПараметрыФормыВыбора.Вставить("ВыборГруппПользователей", Истина); + + ПараметрыФормыВыбора.Вставить("РасширенныйПодбор", Истина); + ПараметрыФормыВыбора.Вставить("ЗаголовокФормыПодбора", НСтр("ru = 'Подбор элементов настроек'")); + + // Исключим из списка выбора уже существующие настройки. + СуществующиеНастройки = СтрокаДерева.ПолучитьЭлементы(); + ФиксированныеНастройки = Новый НастройкиКомпоновкиДанных; + ЭлементНастройки = ФиксированныеНастройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементНастройки.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка"); + ЭлементНастройки.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке; + СписокСуществующих = Новый Массив; + Для Каждого Настройка Из СуществующиеНастройки Цикл + СписокСуществующих.Добавить(Настройка.ВладелецФайла); + КонецЦикла; + ЭлементНастройки.ПравоеЗначение = СписокСуществующих; + ЭлементНастройки.Использование = Истина; + ЭлементНастройки.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ПараметрыФормыВыбора.Вставить("ФиксированныеНастройки", ФиксированныеНастройки); + + ОткрытьФорму(ПутьФормыВыбора(СтрокаДерева.ВладелецФайла), ПараметрыФормыВыбора, Элементы.ДеревоОбъектовМетаданных); + +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьНастройку(Команда) + + ОчиститьДанныеНастройки(); + +КонецПроцедуры + +&НаКлиенте +Процедура Синхронизировать(Команда) + + ПрерватьФоновоеЗадание(); + ЗапуститьРегламентноеЗадание(); + УстановитьВидимостьКомандыСинхронизировать(); + ПодключитьОбработчикОжидания("ПроверитьВыполнениеФоновогоЗадания", 2, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьНастройкуСинхронизации(Команда) + + ОткрытьФормуНастроек(); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура НастроитьРасписаниеЗавершение(Расписание, ДополнительныеПараметры) Экспорт + + Если Расписание = Неопределено Тогда + Возврат; + КонецЕсли; + + УстановитьПараметрРегламентногоЗадания("Расписание", Расписание); + Элементы.Расписание.Заголовок = Расписание; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьТипыОбъектовВДеревеЗначений() + + НастройкиСинхронизации = РегистрыСведений.НастройкиСинхронизацииФайлов.ТекущиеНастройкиСинхронизации(); + + ДеревоОМ = РеквизитФормыВЗначение("ДеревоОбъектовМетаданных"); + ДеревоОМ.Строки.Очистить(); + + МетаданныеСправочники = Метаданные.Справочники; + + ТаблицаТипов = Новый ТаблицаЗначений; + ТаблицаТипов.Колонки.Добавить("ВладелецФайла"); + ТаблицаТипов.Колонки.Добавить("ТипВладельцаФайла"); + ТаблицаТипов.Колонки.Добавить("ЭтоФайл", Новый ОписаниеТипов("Булево")); + ТаблицаТипов.Колонки.Добавить("ВозможностьДетализации" , Новый ОписаниеТипов("Булево")); + + ВидИерархииГруппИЭлементов = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов; + МассивИсключений = ФайловыеФункцииСлужебный.ПриОпределенииОбъектовИсключенияСинхронизацииФайлов(); + + Для Каждого Справочник Из МетаданныеСправочники Цикл + Если Справочник.Реквизиты.Найти("ВладелецФайла") <> Неопределено Тогда + ТипыВладельцевФайлов = Справочник.Реквизиты.ВладелецФайла.Тип.Типы(); + Для Каждого ТипВладельца Из ТипыВладельцевФайлов Цикл + + Если МассивИсключений.Найти(Справочник) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + НоваяСтрока = ТаблицаТипов.Добавить(); + НоваяСтрока.ВладелецФайла = ТипВладельца; + НоваяСтрока.ТипВладельцаФайла = Справочник; + МетаданныеВладельца = Метаданные.НайтиПоТипу(ТипВладельца); + Если МетаданныеСправочники.Найти(МетаданныеВладельца.Имя) <> Неопределено Тогда + НоваяСтрока.ВозможностьДетализации = Истина; + КонецЕсли; + Если Не СтрЗаканчиваетсяНа(Справочник.Имя, "ПрисоединенныеФайлы") Тогда + НоваяСтрока.ЭтоФайл = Истина; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЦикла; + + ВсеСправочники = Справочники.ТипВсеСсылки(); + + ВсеДокументы = Документы.ТипВсеСсылки(); + УзелСправочники = Неопределено; + УзелДокументы = Неопределено; + УзелБизнесПроцессы = Неопределено; + Для Каждого Тип Из ТаблицаТипов Цикл + НастройкаИмеетГлобальныеПравила = Ложь; + Если ВсеСправочники.СодержитТип(Тип.ВладелецФайла) Тогда + Если УзелСправочники = Неопределено Тогда + УзелСправочники = ДеревоОМ.Строки.Добавить(); + УзелСправочники.СинонимНаименованияОбъекта = НСтр("ru = 'Справочники'"); + КонецЕсли; + НоваяСтрокаТаблицы = УзелСправочники.Строки.Добавить(); + + ИдентификаторОбъекта = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Тип.ВладелецФайла); + ДетализированныеНастройки = НастройкиСинхронизации.НайтиСтроки(Новый Структура( + "ВладелецФайла", + ИдентификаторОбъекта)); + Если ДетализированныеНастройки.Количество() > 1 Тогда + НастройкаИмеетГлобальныеПравила = Истина; + Для Каждого Настройка Из ДетализированныеНастройки Цикл + ПравилоОтбора = Настройка.ПравилоОтбора.Получить(); + ДетализированнаяНастройка = НоваяСтрокаТаблицы.Строки.Добавить(); + ДетализированнаяНастройка.ВладелецФайла = Настройка.ВладелецФайла; + ДетализированнаяНастройка.ТипВладельцаФайла = Настройка.ТипВладельцаФайла; + ЕстьПравилоОтбора = Ложь; + Если ПравилоОтбора <> Неопределено Тогда + ЕстьПравилоОтбора = ПравилоОтбора.Отбор.Элементы.Количество() > 0; + КонецЕсли; + Если Не ПустаяСтрока(Настройка.Наименование) Тогда + ДетализированнаяНастройка.СинонимНаименованияОбъекта = Настройка.Наименование; + Иначе + ДетализированнаяНастройка.СинонимНаименованияОбъекта = Настройка.ВладелецФайла.Синоним; + КонецЕсли; + ДетализированнаяНастройка.Синхронизировать = Настройка.Синхронизировать; + ДетализированнаяНастройка.УчетнаяЗапись = Настройка.УчетнаяЗапись; + ДетализированнаяНастройка.ПравилоОтбора = + ?(ЕстьПравилоОтбора, НСтр("ru = 'Выбранные файлы'"), НСтр("ru = 'Все файлы'")); + ДетализированнаяНастройка.ЭтоФайл = Настройка.ЭтоФайл; + КонецЦикла; + КонецЕсли; + + ИдентификаторОбъекта = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Тип.ВладелецФайла); + ДетализированныеНастройки = НастройкиСинхронизации.НайтиСтроки(Новый Структура( + "ИдентификаторВладельца", + ИдентификаторОбъекта)); + Если ДетализированныеНастройки.Количество() > 0 Тогда + Для Каждого Настройка Из ДетализированныеНастройки Цикл + ПравилоОтбора = Настройка.ПравилоОтбора.Получить(); + ДетализированнаяНастройка = НоваяСтрокаТаблицы.Строки.Добавить(); + ДетализированнаяНастройка.ВладелецФайла = Настройка.ВладелецФайла; + ДетализированнаяНастройка.ТипВладельцаФайла = Настройка.ТипВладельцаФайла; + ЕстьПравилоОтбора = Ложь; + Если ПравилоОтбора <> Неопределено Тогда + ЕстьПравилоОтбора = ПравилоОтбора.Отбор.Элементы.Количество() > 0; + КонецЕсли; + Если Не ПустаяСтрока(Настройка.Наименование) Тогда + ДетализированнаяНастройка.СинонимНаименованияОбъекта = Настройка.Наименование; + Иначе + ДетализированнаяНастройка.СинонимНаименованияОбъекта = Настройка.ВладелецФайла; + КонецЕсли; + ЕстьПравилоОтбора = Ложь; + Если ПравилоОтбора <> Неопределено Тогда + ЕстьПравилоОтбора = ПравилоОтбора.Отбор.Элементы.Количество() > 0; + КонецЕсли; + ДетализированнаяНастройка.Синхронизировать = Настройка.Синхронизировать; + ДетализированнаяНастройка.УчетнаяЗапись = Настройка.УчетнаяЗапись; + ДетализированнаяНастройка.ПравилоОтбора = + ?(ЕстьПравилоОтбора, НСтр("ru = 'Выбранные файлы'"), НСтр("ru = 'Все файлы'")); + ДетализированнаяНастройка.ЭтоФайл = Настройка.ЭтоФайл; + КонецЦикла; + КонецЕсли; + ИначеЕсли ВсеДокументы.СодержитТип(Тип.ВладелецФайла) Тогда + Если УзелДокументы = НеОпределено Тогда + УзелДокументы = ДеревоОМ.Строки.Добавить(); + УзелДокументы.СинонимНаименованияОбъекта = НСтр("ru = 'Документы'"); + КонецЕсли; + НоваяСтрокаТаблицы = УзелДокументы.Строки.Добавить(); + ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(Тип.ВладелецФайла) Тогда + Если УзелБизнесПроцессы = Неопределено Тогда + УзелБизнесПроцессы = ДеревоОМ.Строки.Добавить(); + УзелБизнесПроцессы.СинонимНаименованияОбъекта = НСтр("ru = 'Бизнес-процессы'"); + КонецЕсли; + НоваяСтрокаТаблицы = УзелБизнесПроцессы.Строки.Добавить(); + КонецЕсли; + МетаданныеОбъекта = Метаданные.НайтиПоТипу(Тип.ВладелецФайла); + НоваяСтрокаТаблицы.ВладелецФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Тип.ВладелецФайла); + НоваяСтрокаТаблицы.ТипВладельцаФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Тип.ТипВладельцаФайла); + НоваяСтрокаТаблицы.СинонимНаименованияОбъекта = МетаданныеОбъекта.Синоним; + НоваяСтрокаТаблицы.ЭтоФайл = Тип.ЭтоФайл; + НоваяСтрокаТаблицы.ВозможностьДетализации = Тип.ВозможностьДетализации; + + Если Не НастройкаИмеетГлобальныеПравила Тогда + НайденныеНастройки = НастройкиСинхронизации.НайтиСтроки(Новый Структура("ВладелецФайла", НоваяСтрокаТаблицы.ВладелецФайла)); + Если НайденныеНастройки.Количество() > 0 Тогда + ПравилоОтбора = НайденныеНастройки[0].ПравилоОтбора.Получить(); + ЕстьПравилоОтбора = Ложь; + Если ПравилоОтбора <> Неопределено Тогда + ЕстьПравилоОтбора = ПравилоОтбора.Отбор.Элементы.Количество() > 0; + КонецЕсли; + НоваяСтрокаТаблицы.Синхронизировать = НайденныеНастройки[0].Синхронизировать; + НоваяСтрокаТаблицы.УчетнаяЗапись = НайденныеНастройки[0].УчетнаяЗапись; + НоваяСтрокаТаблицы.ПравилоОтбора = ?(ЕстьПравилоОтбора, НСтр("ru = 'Выбранные файлы'"), НСтр("ru = 'Все файлы'")); + Иначе + НоваяСтрокаТаблицы.Синхронизировать = Перечисления.ВариантыОчисткиФайлов.НеОчищать; + НоваяСтрокаТаблицы.ПравилоОтбора = НСтр("ru = 'Все файлы'"); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Для Каждого УзелВерхнегоУровня Из ДеревоОМ.Строки Цикл + УзелВерхнегоУровня.Строки.Сортировать("СинонимНаименованияОбъекта"); + КонецЦикла; + ЗначениеВРеквизитФормы(ДеревоОМ, "ДеревоОбъектовМетаданных"); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаписатьТекущиеНастройки() + + ТекущиеДанные = Элементы.ДеревоОбъектовМетаданных.ТекущиеДанные; + ЗаписатьТекущиеНастройкиПоОбъекту( + ТекущиеДанные.ВладелецФайла, + ТекущиеДанные.ТипВладельцаФайла, + ТекущиеДанные.Синхронизировать, + ТекущиеДанные.УчетнаяЗапись, + ТекущиеДанные.ЭтоФайл); + +КонецПроцедуры + +&НаСервере +Процедура ДобавитьНастройкиПоВладельцу(ВыбранноеЗначение) + + Если ВыбранноеЗначение = Неопределено Тогда + Возврат + КонецЕсли; + + СтрокаВладелец = ДеревоОбъектовМетаданных.НайтиПоИдентификатору(Элементы.ДеревоОбъектовМетаданных.ТекущаяСтрока); + + Если ВыбранноеЗначение.НоваяНастройка Тогда + ЭлементВладелец = СтрокаВладелец.ПолучитьЭлементы(); + ОбновляемаяСтрока = ЭлементВладелец.Добавить(); + Иначе + ОбновляемаяСтрока = СтрокаВладелец; + КонецЕсли; + + ПравилоОтбора = ВыбранноеЗначение.Правило.Получить(); + ЕстьПравилоОтбора = Ложь; + Если ПравилоОтбора <> Неопределено Тогда + ЕстьПравилоОтбора = ПравилоОтбора.Отбор.Элементы.Количество() > 0; + КонецЕсли; + ЗаполнитьЗначенияСвойств(ОбновляемаяСтрока, ВыбранноеЗначение); + ОбновляемаяСтрока.ПравилоОтбора = + ?(ЕстьПравилоОтбора, НСтр("ru = 'Выбранные файлы'"), НСтр("ru = 'Все файлы'")); + Если ЗначениеЗаполнено(ВыбранноеЗначение.Наименование) Тогда + ОбновляемаяСтрока.СинонимНаименованияОбъекта = ВыбранноеЗначение.Наименование; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьЗначениеСинхронизацииПодчиненнымОбъектам(Знач Синхронизировать) + + Для Каждого ИдентификаторСтроки Из Элементы.ДеревоОбъектовМетаданных.ВыделенныеСтроки Цикл + ЭлементДерева = ДеревоОбъектовМетаданных.НайтиПоИдентификатору(ИдентификаторСтроки); + Если ЭлементДерева.ПолучитьРодителя() = Неопределено Тогда + Для Каждого ПодчиненныйЭлементДерева Из ЭлементДерева.ПолучитьЭлементы() Цикл + УстановитьЗначениеСинхронизацииОбъекта(ПодчиненныйЭлементДерева, Синхронизировать); + КонецЦикла; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьЗначениеСинхронизацииОбъекта(ВыбранныйОбъект, Знач Синхронизировать) + + ВыбранныйОбъект.Синхронизировать = Синхронизировать; + ЗаписатьТекущиеНастройкиПоОбъекту( + ВыбранныйОбъект.ВладелецФайла, + ВыбранныйОбъект.ТипВладельцаФайла, + Синхронизировать, + ВыбранныйОбъект.УчетнаяЗапись, + ВыбранныйОбъект.ЭтоФайл); + +КонецПроцедуры + +&НаСервере +Процедура ЗаписатьТекущиеНастройкиПоОбъекту(ВладелецФайла, ТипВладельцаФайла, Синхронизировать, УчетнаяЗапись, ЭтоФайл) + Настройка = РегистрыСведений.НастройкиСинхронизацииФайлов.СоздатьМенеджерЗаписи(); + Настройка.ВладелецФайла = ВладелецФайла; + Настройка.ТипВладельцаФайла = ТипВладельцаФайла; + Настройка.Синхронизировать = Синхронизировать; + Настройка.УчетнаяЗапись = УчетнаяЗапись; + Настройка.ЭтоФайл = ЭтоФайл; + Настройка.Записать(); +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФормуНастроек(); + + ТекущиеДанные = Элементы.ДеревоОбъектовМетаданных.ТекущиеДанные; + + Если Не ЗначениеЗаполнено(ТекущиеДанные.ВладелецФайла) + Или Не ЗначениеЗаполнено(ТекущиеДанные.ТипВладельцаФайла) Тогда + Возврат; + КонецЕсли; + + Отбор = Новый Структура; + Отбор.Вставить("ВладелецФайла", ТекущиеДанные.ВладелецФайла); + Отбор.Вставить("ТипВладельцаФайла", ТекущиеДанные.ТипВладельцаФайла); + Отбор.Вставить("УчетнаяЗапись", ТекущиеДанные.УчетнаяЗапись); + + Если ЗначениеЗаполнено(ТекущиеДанные.УчетнаяЗапись) Тогда + + ТипЗначения = Тип("РегистрСведенийКлючЗаписи.НастройкиСинхронизацииФайлов"); + ПараметрыЗаписи = Новый Массив(1); + ПараметрыЗаписи[0] = Отбор; + + КлючЗаписи = Новый(ТипЗначения, ПараметрыЗаписи); + + ПараметрыЗаписи = Новый Структура; + ПараметрыЗаписи.Вставить("Ключ", КлючЗаписи); + Иначе + ПараметрыЗаписи = Отбор; + ПараметрыЗаписи.Вставить("ЭтоФайл", ТекущиеДанные.ЭтоФайл); + КонецЕсли; + + ОткрытьФорму("РегистрСведений.НастройкиСинхронизацииФайлов.Форма.ФормаЗаписиНастройки", ПараметрыЗаписи, ЭтотОбъект); + +КонецПроцедуры + +&НаСервере +Функция ПутьФормыВыбора(ВладелецФайла) + + ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(ВладелецФайла); + Возврат ОбъектМетаданных.ПолноеИмя() + ".ФормаВыбора"; + +КонецФункции + +&НаСервере +Процедура ОчиститьДанныеНастройки() + + НастройкаДляУдаления = ДеревоОбъектовМетаданных.НайтиПоИдентификатору(Элементы.ДеревоОбъектовМетаданных.ТекущаяСтрока); + + МенеджерЗаписи = РегистрыСведений.НастройкиСинхронизацииФайлов.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ВладелецФайла = НастройкаДляУдаления.ВладелецФайла; + МенеджерЗаписи.ТипВладельцаФайла = НастройкаДляУдаления.ТипВладельцаФайла; + МенеджерЗаписи.УчетнаяЗапись = НастройкаДляУдаления.УчетнаяЗапись; + МенеджерЗаписи.Прочитать(); + МенеджерЗаписи.Удалить(); + + РодительЭлементаНастроек = НастройкаДляУдаления.ПолучитьРодителя(); + Если РодительЭлементаНастроек <> Неопределено Тогда + РодительЭлементаНастроек.ПолучитьЭлементы().Удалить(НастройкаДляУдаления); + Иначе + ДеревоОбъектовМетаданных.ПолучитьЭлементы().Удалить(НастройкаДляУдаления); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СоздатьСинхронизациюФайлов(Команда) + + СтрокаДерева = Элементы.ДеревоОбъектовМетаданных.ТекущиеДанные; + Если Не СтрокаДерева.ВозможностьДетализации Тогда + ТекстСообщения = НСтр("ru = 'Добавление настройки возможно только для справочников'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); + Возврат; + КонецЕсли; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ВладелецФайла", СтрокаДерева.ВладелецФайла); + ПараметрыФормы.Вставить("ТипВладельцаФайла", СтрокаДерева.ТипВладельцаФайла); + ПараметрыФормы.Вставить("ЭтоФайл", СтрокаДерева.ЭтоФайл); + ПараметрыФормы.Вставить("НоваяНастройка", Истина); + + ОткрытьФорму("РегистрСведений.НастройкиСинхронизацииФайлов.Форма.ФормаЗаписиНастройки", ПараметрыФормы, ЭтотОбъект); + +КонецПроцедуры + +&НаКлиенте +Процедура ПрерватьФоновоеЗадание() + ОтменитьВыполнениеЗадания(ИдентификаторФоновогоЗадания); + ОтключитьОбработчикОжидания("ПроверитьВыполнениеФоновогоЗадания"); + ТекущееФоновоеЗадание = ""; + ИдентификаторФоновогоЗадания = ""; +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ОтменитьВыполнениеЗадания(ИдентификаторФоновогоЗадания) + ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторФоновогоЗадания); +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьВыполнениеФоновогоЗадания() + Если Не ЗаданиеВыполнено(ИдентификаторФоновогоЗадания) Тогда + ПодключитьОбработчикОжидания("ПроверитьВыполнениеФоновогоЗадания", 5, Истина); + Иначе + ИдентификаторФоновогоЗадания = ""; + ТекущееФоновоеЗадание = ""; + УстановитьВидимостьКомандыСинхронизировать(); + КонецЕсли; +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ЗаданиеВыполнено(ИдентификаторФоновогоЗадания) + Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторФоновогоЗадания); +КонецФункции + +&НаСервере +Процедура ЗапуститьРегламентноеЗадание() + + РегламентноеЗаданиеМетаданные = Метаданные.РегламентныеЗадания.СинхронизацияФайлов; + + Отбор = Новый Структура; + ИмяМетода = РегламентноеЗаданиеМетаданные.ИмяМетода; + Отбор.Вставить("ИмяМетода", ИмяМетода); + Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + ФоновыеЗаданияОчистки = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); + Если ФоновыеЗаданияОчистки.Количество() > 0 Тогда + ИдентификаторФоновогоЗадания = ФоновыеЗаданияОчистки[0].УникальныйИдентификатор; + Иначе + НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Запуск вручную: %1'"), РегламентноеЗаданиеМетаданные.Синоним); + ФоновоеЗадание = ФоновыеЗадания.Выполнить(РегламентноеЗаданиеМетаданные.ИмяМетода, , , НаименованиеФоновогоЗадания); + ИдентификаторФоновогоЗадания = ФоновоеЗадание.УникальныйИдентификатор; + КонецЕсли; + + ТекущееФоновоеЗадание = "Синхронизация"; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьВидимостьКомандыСинхронизировать() + + ПодчиненныеСтраницы = Элементы.СинхронизацияФайлов.ПодчиненныеЭлементы; + Если ПустаяСтрока(ТекущееФоновоеЗадание) Тогда + Элементы.СинхронизацияФайлов.ТекущаяСтраница = ПодчиненныеСтраницы.Синхронизация; + Иначе + Элементы.СинхронизацияФайлов.ТекущаяСтраница = ПодчиненныеСтраницы.СтатусФоновогоЗадания; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьПараметрРегламентногоЗадания(ИмяПараметра, ЗначениеПараметра) + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("Метаданные", Метаданные.РегламентныеЗадания.СинхронизацияФайлов); + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ПараметрыЗадания.Вставить("ИмяМетода", Метаданные.РегламентныеЗадания.СинхронизацияФайлов.ИмяМетода); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + СписокЗаданий = РегламентныеЗаданияСервер.НайтиЗадания(ПараметрыЗадания); + Если СписокЗаданий.Количество() = 0 Тогда + ПараметрыЗадания.Вставить(ИмяПараметра, ЗначениеПараметра); + РегламентныеЗаданияСервер.ДобавитьЗадание(ПараметрыЗадания); + Иначе + ПараметрыЗадания = Новый Структура(ИмяПараметра, ЗначениеПараметра); + Для Каждого Задание Из СписокЗаданий Цикл + РегламентныеЗаданияСервер.ИзменитьЗадание(Задание, ПараметрыЗадания); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ПолучитьПараметрРегламентногоЗадания(ИмяПараметра, ЗначениеПоУмолчанию) + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("Метаданные", Метаданные.РегламентныеЗадания.СинхронизацияФайлов); + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ПараметрыЗадания.Вставить("ИмяМетода", Метаданные.РегламентныеЗадания.СинхронизацияФайлов.ИмяМетода); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + СписокЗаданий = РегламентныеЗаданияСервер.НайтиЗадания(ПараметрыЗадания); + Для Каждого Задание Из СписокЗаданий Цикл + Возврат Задание[ИмяПараметра]; + КонецЦикла; + + Возврат ЗначениеПоУмолчанию; + +КонецФункции + +&НаСервере +Функция ТекущееРасписание() + Возврат ПолучитьПараметрРегламентногоЗадания("Расписание", Новый РасписаниеРегламентногоЗадания); +КонецФункции + +&НаСервере +Функция АвтоматическаяСинхронизацияВключена() + Возврат ПолучитьПараметрРегламентногоЗадания("Использование", Ложь); +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ПростаяФормаЗаписиНастройки/ConditionalAppearance.dcssca b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ПростаяФормаЗаписиНастройки/ConditionalAppearance.dcssca new file mode 100644 index 000000000..5f517848d --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ПростаяФормаЗаписиНастройки/ConditionalAppearance.dcssca @@ -0,0 +1,28 @@ + + + + + + ДобавитьУсловиеПоДате + + + + + Запись.Действие + NotEqual + Перечисление.ВариантыОчисткиФайлов.НеОчищать + + + + + false + Видимость + false + + + Доступность + false + + + + diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ПростаяФормаЗаписиНастройки/Form.form b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ПростаяФормаЗаписиНастройки/Form.form new file mode 100644 index 000000000..fb442c293 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ПростаяФормаЗаписиНастройки/Form.form @@ -0,0 +1,240 @@ + + + + Синхронизировать + 138 + + <key>ru</key> + <value>Синхронизировать файлы с облачным сервисом:</value> + + true + true + + true + + + Запись.Синхронизировать + + Right + + СинхронизироватьРасширеннаяПодсказка + 140 + Label + true + true + + Left + + + + СинхронизироватьКонтекстноеМеню + 139 + true + + CheckBoxField + Enter + true + Left + true + + + + УчетнаяЗапись + 118 + true + true + + true + + + Запись.УчетнаяЗапись + + None + + ru + Укажите учетную запись облачного сервиса, с которым будет производиться синхронизация файлов. + + ShowBottom + + УчетнаяЗаписьРасширеннаяПодсказка + 120 + + <key>ru</key> + <value>Укажите учетную запись облачного сервиса, с которым будет производиться синхронизация файлов.</value> + + Label + true + true + + Left + + + + УчетнаяЗаписьКонтекстноеМеню + 119 + true + + InputField + Enter + true + Left + true + + 60 + true + true + false + true + true + true + true + true + Normal + + + + ФормаКоманднаяПанель + -1 + + ГруппаКоманднаяПанель + 34 + + ЗаписатьИЗакрыть + 36 + true + true + + true + + + ЗаписатьИЗакрытьРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + Form.StandardCommand.WriteAndClose + Auto + true + true + true + UserCmds + Auto + + + Записать + 38 + true + true + + true + + + ЗаписатьРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + Form.StandardCommand.Write + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа командная панель</value> + + + ru + Группа командная панель + + + ГруппаКоманднаяПанельРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + + + ФормаСправка + 48 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + auto + true + + Запись + 1 + + InformationRegisterRecordManager.НастройкиСинхронизацииФайлов + + + true + + + true + +
                          true
                          + true +
                          + + + + + +
                          diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ПростаяФормаЗаписиНастройки/Help/ru.html b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ПростаяФормаЗаписиНастройки/Help/ru.html new file mode 100644 index 000000000..e448d453a --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ПростаяФормаЗаписиНастройки/Help/ru.html @@ -0,0 +1,8 @@ + +

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

                          +

                          Открывается из списка Присоединенные файлы объектов программы по команде Еще - Синхронизация с облаком.

                          +

                          Настройка синхронизации файлов

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

                          См. также:

                          +

                           

                          \ 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..43baaacd3 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ПростаяФормаЗаписиНастройки/Module.bsl @@ -0,0 +1,27 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ИдентификаторВладельцаФайлов = Неопределено; + + Если Параметры.Свойство("ВладелецФайла") Тогда + Запись.ВладелецФайла = Параметры.ВладелецФайла; + КонецЕсли; + + Если Параметры.Свойство("ТипВладельцаФайла") Тогда + Запись.ТипВладельцаФайла = Параметры.ТипВладельцаФайла; + КонецЕсли; + + Если Параметры.Свойство("ЭтоФайл") Тогда + Запись.ЭтоФайл = Параметры.ЭтоФайл; + КонецЕсли; + + ПредставлениеВладельца = ОбщегоНазначения.ПредметСтрокой(Запись.ВладелецФайла); + + Заголовок = НСтр("ru='Настройка синхронизации файлов:'") + + " " + ПредставлениеВладельца; + +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/ConditionalAppearance.dcssca b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/ConditionalAppearance.dcssca new file mode 100644 index 000000000..5f517848d --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/ConditionalAppearance.dcssca @@ -0,0 +1,28 @@ + + + + + + ДобавитьУсловиеПоДате + + + + + Запись.Действие + NotEqual + Перечисление.ВариантыОчисткиФайлов.НеОчищать + + + + + false + Видимость + false + + + Доступность + false + + + + diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/Form.form b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/Form.form new file mode 100644 index 000000000..9100717b2 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/Form.form @@ -0,0 +1,1037 @@ + + + + Синхронизировать + 138 + + <key>ru</key> + <value>Синхронизировать файлы с облачным сервисом:</value> + + true + true + + true + + + Запись.Синхронизировать + + Right + + СинхронизироватьРасширеннаяПодсказка + 140 + Label + true + true + + Left + + + + СинхронизироватьКонтекстноеМеню + 139 + true + + CheckBoxField + Enter + true + Left + true + + + + УчетнаяЗапись + 118 + true + true + + true + + + Запись.УчетнаяЗапись + + None + ShowBottom + + УчетнаяЗаписьРасширеннаяПодсказка + 120 + + <key>ru</key> + <value>Укажите учетную запись облачного сервиса, с которым будет производиться синхронизация файлов.</value> + + Label + true + true + + Left + + + + УчетнаяЗаписьКонтекстноеМеню + 119 + true + + InputField + Enter + true + Left + true + + 58 + true + true + false + true + true + true + true + Normal + + + + ГруппаОбъектСинхронизации + 67 + + ГруппаСинхронизацияФайловОбъекта + 72 + + ОбъектСинхронизацииФайлыЭлемента + 74 + + <key>ru</key> + <value>Файлы, присоединенные к</value> + + true + true + + true + + + ОбъектСинхронизации + + None + + OnChange + ОбъектСинхронизацииФайлыЭлементаПриИзменении + + + ОбъектСинхронизацииФайлыЭлементаРасширеннаяПодсказка + 76 + Label + true + true + + Left + + + + ОбъектСинхронизацииФайлыЭлементаКонтекстноеМеню + 75 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + Файлы, присоединенные к: + + + ТолькоФайлыЭлемента + + + Vertical + + + + ЭлементСправочника + 115 + true + true + + true + + + ЭлементСправочника + + None + + ЭлементСправочникаРасширеннаяПодсказка + 117 + Label + true + true + + Left + + + + ЭлементСправочникаКонтекстноеМеню + 116 + true + + InputField + Enter + true + Left + true + + + StartChoice + ЭлементСправочникаНачалоВыбора + + 35 + true + true + false + true + false + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа синхронизация файлов объекта</value> + + + ru + Группа синхронизация файлов объекта + + + ГруппаСинхронизацияФайловОбъектаРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ОбъектСинхронизацииВсеФайлы + 69 + true + true + + true + + + ОбъектСинхронизации + + None + + OnChange + ОбъектСинхронизацииПриИзменении + + + ОбъектСинхронизацииВсеФайлыРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + + ОбъектСинхронизацииВсеФайлыКонтекстноеМеню + 70 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + Файлы %1 по правилам, заданным ниже + + + ВсеФайлы + + + Vertical + + + true + true + + true + + + <key>ru</key> + <value>Что синхронизировать:</value> + + + ru + Группа объект синхронизации + + None + + ГруппаОбъектСинхронизацииРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + ПравилоСинхронизацииГруппа + 86 + + Наименование + 88 + + <key>ru</key> + <value>Описание</value> + + true + true + + true + + + Запись.Наименование + + ShowBottom + + НаименованиеРасширеннаяПодсказка + 90 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 89 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДекорацияПояснениеОтбора + 91 + + <key>ru</key> + <value>Заполнять условия отбора файлов не требуется, если необходимо синхронизировать все файлы %1. +Либо задайте правила, в соответствие с которыми должны синхронизироваться файлы. +Синхронизируемые файлы должны удовлетворять условиям отбора, например, только файлы организации ООО Ромашка. </value> + + true + true + + true + + + ДекорацияПояснениеОтбораРасширеннаяПодсказка + 93 + Label + true + true + + Left + + + + ДекорацияПояснениеОтбораКонтекстноеМеню + 92 + true + + Label + 90 + true + true + + Style.ПоясняющийТекст + + + Left + + + + ПравилоНастройкиОтбор + 10 + true + true + + true + + + Правило.Settings.Filter + + None + AddFilterItemGroup + Change + Copy + Detailed + EndEdit + HierarchicalList + List + MoveDown + MoveUp + SetPresentation + Tree + UseFieldAsValue + UserSettingItemProperties + + ПравилоНастройкиОтборКоманднаяПанель + 12 + + Добавить + 44 + + ДобавитьЭлементОтбора + 40 + true + true + + true + + + ДобавитьЭлементОтбораРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + Form.Item.ПравилоНастройкиОтбор.StandardCommand.AddFilterItem + Normal + PictureAndText + true + true + UserCmds + Auto + + + ДобавитьУсловиеПоДате + 46 + true + true + + true + + + ДобавитьУсловиеПоДатеРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + Form.Command.ДобавитьУсловиеПоДате + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Добавить</value> + + + ru + Добавить + + + ДобавитьРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + + СгруппироватьЭлементыОтбора + 42 + true + true + + true + + + СгруппироватьЭлементыОтбораРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + Form.Item.ПравилоНастройкиОтбор.StandardCommand.GroupFilterItems + Normal + Auto + true + true + UserCmds + Auto + + Left + + + ПравилоНастройкиОтборСтрокаПоиска + 14 + + ПравилоНастройкиОтборСтрокаПоискаРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + ПравилоНастройкиОтборСтрокаПоискаКонтекстноеМеню + 17 + true + + ПравилоНастройкиОтбор + + true + + + + ПравилоНастройкиОтборСостояниеПросмотра + 19 + + ПравилоНастройкиОтборСостояниеПросмотраРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + + ПравилоНастройкиОтборСостояниеПросмотраКонтекстноеМеню + 22 + true + + ViewStatusAddition + ПравилоНастройкиОтбор + + true + + + + ПравилоНастройкиОтборУправлениеПоиском + 24 + + ПравилоНастройкиОтборУправлениеПоискомРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + ПравилоНастройкиОтборУправлениеПоискомКонтекстноеМеню + 27 + true + + SearchControlAddition + ПравилоНастройкиОтбор + + true + + + + ПравилоНастройкиОтборРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + ПравилоНастройкиОтборКонтекстноеМеню + 11 + true + + Tree + true + true + true + true + true + true + MultiRow +
                          true
                          + 1 + 1 + AutoUse + AutoUse + true + true + false + Auto + Auto + ExpandAllLevels + true + true + true + true + true + All + false +
                          + true + true + + true + + + <key>ru</key> + <value>Правила синхронизации</value> + + + ru + Правило синхронизации группа + + + ПравилоСинхронизацииГруппаРасширеннаяПодсказка + 87 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + +
                          + + ФормаКоманднаяПанель + -1 + + ГруппаКоманднаяПанель + 34 + + ЗаписатьИЗакрыть + 36 + true + true + + true + + + ЗаписатьИЗакрытьРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + Form.StandardCommand.WriteAndClose + Auto + true + true + true + UserCmds + Auto + + + Записать + 38 + true + true + + true + + + ЗаписатьРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + Form.StandardCommand.Write + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа командная панель</value> + + + ru + Группа командная панель + + + ГруппаКоманднаяПанельРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + + + ФормаСправка + 48 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + Left + true + + + ChoiceProcessing + ОбработкаВыбора + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + + OnClose + ПриЗакрытии + + LockOwner + true + true + Vertical + true + true + auto + true + + Запись + 1 + + InformationRegisterRecordManager.НастройкиСинхронизацииФайлов + + + true + + + true + +
                          true
                          + true +
                          + + Правило + + <key>ru</key> + <value>Правило</value> + + 2 + + DataCompositionSettingsComposer + + + 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 + + BusinessProcessRef + DocumentRef + TaskRef + CatalogRef + + + true + + + true + + + + СписокСуществующихНастроек + + <key>ru</key> + <value>Список существующих настроек</value> + + 6 + + ValueList + + + true + + + true + + + + + + + ИдентификаторВладельцаФайлов + + <key>ru</key> + <value>Идентификатор владельца файлов</value> + + 7 + + CatalogRef.ИдентификаторыОбъектовМетаданных + + + true + + + true + + + + НоваяНастройка + + <key>ru</key> + <value>Новая настройка</value> + + 8 + + Boolean + + + true + + + true + + + + ВозвращаемоеЗначение + + <key>ru</key> + <value>Возвращаемое значение</value> + + 9 + + + true + + + true + + + + ДобавитьУсловиеПоДате + + <key>ru</key> + <value>Добавить условие по дате</value> + + 1 + + ru + Добавить условие по дате + + + true + + + StdPicture.CreateListItem + + + + ДобавитьУсловиеПоДате + + + DontUse + Auto + + + + + + + + AfterWriteAtServer + ПослеЗаписиНаСервере + + + OnReadAtServer + ПриЧтенииНаСервере + + + BeforeWrite + ПередЗаписью + + + BeforeWriteAtServer + ПередЗаписьюНаСервере + + +
                          diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/Help/ru.html b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/Help/ru.html new file mode 100644 index 000000000..f0b2a629d --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/Help/ru.html @@ -0,0 +1,26 @@ + +

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

                          +

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

                          +

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

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

                          Правила синхронизации

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

                          Условие по дате

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

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

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

                          См. также:

                          + \ 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..40dc12a11 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Forms/ФормаЗаписиНастройки/Module.bsl @@ -0,0 +1,372 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Если МассивРеквизитовСТипомДата.Количество() = 0 Тогда + Элементы.ДобавитьУсловиеПоДате.Доступность = Ложь; + КонецЕсли; + + Если Параметры.Свойство("ВладелецФайла") Тогда + Запись.ВладелецФайла = Параметры.ВладелецФайла; + Если Не ЗначениеЗаполнено(Параметры.Ключ) Тогда + ИнициализироватьКомпоновщик(); + КонецЕсли; + КонецЕсли; + + Если Параметры.Свойство("ТипВладельцаФайла") Тогда + Запись.ТипВладельцаФайла = Параметры.ТипВладельцаФайла; + КонецЕсли; + + Если Параметры.Свойство("ЭтоФайл") Тогда + Запись.ЭтоФайл = Параметры.ЭтоФайл; + КонецЕсли; + + Если Параметры.Свойство("НоваяНастройка") Тогда + НоваяНастройка = Параметры.НоваяНастройка; + КонецЕсли; + + Если Запись.ВладелецФайла = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Не ЗначениеЗаполнено(Запись.УчетнаяЗапись) Тогда + ЗаполнитьУчетнуюЗаписьСинхронизации(); + КонецЕсли; + + Если ТипЗнч(Запись.ВладелецФайла) <> Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + + ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипЗнч(Запись.ВладелецФайла)); + ОбъектСинхронизации = "ТолькоФайлыЭлемента"; + + ИдентификаторВладельцаФайлов = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипЗнч(Запись.ВладелецФайла)); + ПредставлениеТипВФ = Запись.ТипВладельцаФайла.Наименование; + ПредставлениеВладельцаДляЗаголовка = ОбщегоНазначения.ПредметСтрокой(Запись.ВладелецФайла); + ЭлементСправочника = Запись.ВладелецФайла; + + СписокСуществующихНастроек.ЗагрузитьЗначения(СуществующиеОбъектыСинхронизации(ТипЗнч(Запись.ВладелецФайла))); + + Иначе + + ОбъектСинхронизации = "ВсеФайлы"; + + СписокСуществующихНастроек.ЗагрузитьЗначения(СуществующиеОбъектыСинхронизации(ТипЗнч(Запись.ВладелецФайла.ЗначениеПустойСсылки))); + + ИдентификаторВладельцаФайлов = Запись.ВладелецФайла; + ПредставлениеТипВФ = Запись.ВладелецФайла.Наименование; + ПредставлениеВладельцаДляЗаголовка = ПредставлениеТипВФ; + ЭлементСправочника = Запись.ВладелецФайла.ЗначениеПустойСсылки; + + КонецЕсли; + + Заголовок = НСтр("ru='Настройка синхронизации файлов:'") + + " " + ПредставлениеВладельцаДляЗаголовка; + + Элементы.ДекорацияПояснениеОтбора.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ДекорацияПояснениеОтбора.Заголовок, ПредставлениеТипВФ); + Элементы.ОбъектСинхронизацииВсеФайлы.СписокВыбора[0].Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ОбъектСинхронизацииВсеФайлы.СписокВыбора[0].Представление, ПредставлениеТипВФ); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + УстановитьДоступностьЭлементовФормы(); + +КонецПроцедуры + +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + Если ЗначениеЗаполнено(ТекущийОбъект.ВладелецФайла) Тогда + ИнициализироватьКомпоновщик(); + КонецЕсли; + Если ТекущийОбъект.ПравилоОтбора.Получить() <> Неопределено Тогда + Правило.ЗагрузитьНастройки(ТекущийОбъект.ПравилоОтбора.Получить()); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) + + Если ОбъектСинхронизации = "ТолькоФайлыЭлемента" И Не ЗначениеЗаполнено(ЭлементСправочника) Тогда + Отказ = Истина; + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Не заполнен объект с присоединенными файлами.'"), + , + "ЭлементСправочника"); + КонецЕсли; + + Запись.ВладелецФайла = + ?(ОбъектСинхронизации = "ВсеФайлы", ИдентификаторВладельцаФайлов, ЭлементСправочника); + + КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + ПравилоОтбора = Правило.ПолучитьНастройки(); + + Если ОбъектСинхронизации = "ТолькоФайлыЭлемента" Тогда + ПравилоОтбора.Отбор.Элементы.Очистить(); + ТекущийОбъект.Наименование = ""; + КонецЕсли; + + ТекущийОбъект.ПравилоОтбора = Новый ХранилищеЗначения(ПравилоОтбора); + +КонецПроцедуры + +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + + ВозвращаемоеЗначение = Новый Структура; + + Если ОбъектСинхронизации = "ТолькоФайлыЭлемента" Тогда + ВозвращаемоеЗначение.Вставить("СинонимНаименованияОбъекта", ТекущийОбъект.ВладелецФайла); + Иначе + ВозвращаемоеЗначение.Вставить("СинонимНаименованияОбъекта", ИдентификаторВладельцаФайлов.Синоним); + КонецЕсли; + ВозвращаемоеЗначение.Вставить("НоваяНастройка", НоваяНастройка); + ВозвращаемоеЗначение.Вставить("ВладелецФайла", ТекущийОбъект.ВладелецФайла); + ВозвращаемоеЗначение.Вставить("ТипВладельцаФайла", ТекущийОбъект.ТипВладельцаФайла); + ВозвращаемоеЗначение.Вставить("Синхронизировать", ТекущийОбъект.Синхронизировать); + ВозвращаемоеЗначение.Вставить("Наименование", ТекущийОбъект.Наименование); + ВозвращаемоеЗначение.Вставить("УчетнаяЗапись", ТекущийОбъект.УчетнаяЗапись); + ВозвращаемоеЗначение.Вставить("ЭтоФайл", ТекущийОбъект.ЭтоФайл); + ВозвращаемоеЗначение.Вставить("Правило", ТекущийОбъект.ПравилоОтбора); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Если ИсточникВыбора.ИмяФормы = "РегистрСведений.НастройкиСинхронизацииФайлов.Форма.ДобавленияУсловияПоДате" Тогда + ДобавитьВОтборИнтервалИсключение(ВыбранноеЗначение); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбъектСинхронизацииПриИзменении(Элемент) + + УстановитьДоступностьЭлементовФормы(); + Запись.ВладелецФайла = ИдентификаторВладельцаФайлов; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбъектСинхронизацииФайлыЭлементаПриИзменении(Элемент) + + УстановитьДоступностьЭлементовФормы(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии() + + ОповеститьОВыборе(ВозвращаемоеЗначение); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаСервере +Процедура ИнициализироватьКомпоновщик() + + Если Не ЗначениеЗаполнено(Запись.ВладелецФайла) Тогда + Возврат; + КонецЕсли; + + Правило.Настройки.Отбор.Элементы.Очистить(); + + СКД = Новый СхемаКомпоновкиДанных; + ИсточникДанных = СКД.ИсточникиДанных.Добавить(); + ИсточникДанных.Имя = "ИсточникДанных1"; + ИсточникДанных.ТипИсточникаДанных = "Local"; + + НаборДанных = СКД.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); + НаборДанных.Имя = "НаборДанных1"; + НаборДанных.ИсточникДанных = ИсточникДанных.Имя; + + СКД.ПоляИтога.Очистить(); + + СКД.НаборыДанных[0].Запрос = ПолучитьТекстЗапроса(); + + СхемаКомпоновкиДанных = ПоместитьВоВременноеХранилище(СКД, УникальныйИдентификатор); + + Правило.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); + + Правило.Восстановить(); + Правило.Настройки.Структура.Очистить(); + +КонецПроцедуры + +&НаСервере +Функция ПолучитьТекстЗапроса() + + МассивРеквизитовСТипомДата.Очистить(); + Если ТипЗнч(Запись.ВладелецФайла) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + ТипОбъекта = Запись.ВладелецФайла; + Иначе + ТипОбъекта = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипЗнч(Запись.ВладелецФайла)); + КонецЕсли; + ВсеСправочники = Справочники.ТипВсеСсылки(); + ВсеДокументы = Документы.ТипВсеСсылки(); + ЕстьТипДата = Ложь; + ТекстЗапроса = + "ВЫБРАТЬ + | " + ТипОбъекта.Имя + ".Ссылка,"; + Если ВсеСправочники.СодержитТип(ТипЗнч(ТипОбъекта.ЗначениеПустойСсылки)) Тогда + Справочник = Метаданные.Справочники[ТипОбъекта.Имя]; + Для Каждого Реквизит Из Справочник.Реквизиты Цикл + ТекстЗапроса = ТекстЗапроса + Символы.ПС + ТипОбъекта.Имя + "." + Реквизит.Имя + ","; + КонецЦикла; + ИначеЕсли + ВсеДокументы.СодержитТип(ТипЗнч(ТипОбъекта.ЗначениеПустойСсылки)) Тогда + Документ = Метаданные.Документы[ТипОбъекта.Имя]; + Для Каждого Реквизит Из Документ.Реквизиты Цикл + ТекстЗапроса = ТекстЗапроса + Символы.ПС + ТипОбъекта.Имя + "." + Реквизит.Имя + ","; + Если Реквизит.Тип = Новый ОписаниеТипов("Дата") Тогда + МассивРеквизитовСТипомДата.Добавить(Реквизит.Имя, Реквизит.Синоним); + ТекстЗапроса = ТекстЗапроса + Символы.ПС + "РАЗНОСТЬДАТ(" + Реквизит.Имя + ", &ТекущаяДата, ДЕНЬ) Как ДнейДоУдаленияОт" + Реквизит.Имя + ","; + ЕстьТипДата = Истина; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + // Удаляем лишнюю запятую + ТекстЗапроса= Лев(ТекстЗапроса, СтрДлина(ТекстЗапроса) - 1); + ТекстЗапроса = ТекстЗапроса + " + |ИЗ + | " + ТипОбъекта.ПолноеИмя+ " КАК " + ТипОбъекта.Имя; + + Возврат ТекстЗапроса; + +КонецФункции + +&НаКлиенте +Процедура ДобавитьУсловиеПоДате(Команда) + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("МассивЗначений", МассивРеквизитовСТипомДата); + ОткрытьФорму("РегистрСведений.НастройкиСинхронизацииФайлов.Форма.ДобавленияУсловияПоДате", ПараметрыФормы, ЭтотОбъект); + +КонецПроцедуры + +&НаСервере +Процедура ДобавитьВОтборИнтервалИсключение(ВыбранноеЗначение) + + ОтборПоИнтервалу = Правило.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборПоИнтервалу.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДнейДоУдаленияОт" + ВыбранноеЗначение.РеквизитСТипомДата); + ОтборПоИнтервалу.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно; + ОтборПоИнтервалу.ПравоеЗначение = ВыбранноеЗначение.ИнтервалИсключение; + ПредставлениеРеквизитаСТипомДата = МассивРеквизитовСТипомДата.НайтиПоЗначению(ВыбранноеЗначение.РеквизитСТипомДата).Представление; + ТекстПредставления = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Очищать спустя %1 дней относительно даты (%2)'"), + ВыбранноеЗначение.ИнтервалИсключение, ПредставлениеРеквизитаСТипомДата); + ОтборПоИнтервалу.Представление = ТекстПредставления; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьДоступностьЭлементовФормы() + + СинхронизацияСправочника = ОбъектСинхронизации = "ВсеФайлы"; + + Элементы.ПравилоСинхронизацииГруппа.Доступность = СинхронизацияСправочника; + Элементы.ЭлементСправочника.Доступность = Не СинхронизацияСправочника; + +КонецПроцедуры + +&НаКлиенте +Процедура ЭлементСправочникаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + ПараметрыФормыВыбора = Новый Структура; + + ПараметрыФормыВыбора.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.ГруппыИЭлементы); + ПараметрыФормыВыбора.Вставить("ЗакрыватьПриВыборе", Истина); + ПараметрыФормыВыбора.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина); + ПараметрыФормыВыбора.Вставить("МножественныйВыбор", Ложь); + ПараметрыФормыВыбора.Вставить("РежимВыбора", Истина); + + ПараметрыФормыВыбора.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ПараметрыФормыВыбора.Вставить("ВыборГрупп", Истина); + ПараметрыФормыВыбора.Вставить("ВыборГруппПользователей", Истина); + + ПараметрыФормыВыбора.Вставить("РасширенныйПодбор", Истина); + ПараметрыФормыВыбора.Вставить("ЗаголовокФормыПодбора", НСтр("ru = 'Подбор элементов настроек'")); + + ФиксированныеНастройки = Новый НастройкиКомпоновкиДанных; + ЭлементНастройки = ФиксированныеНастройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементНастройки.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка"); + ЭлементНастройки.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке; + ЭлементНастройки.ПравоеЗначение = СписокСуществующихНастроек; + ЭлементНастройки.Использование = Истина; + ЭлементНастройки.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + ПараметрыФормыВыбора.Вставить("ФиксированныеНастройки", ФиксированныеНастройки); + + ОткрытьФорму(ПутьФормыВыбора(ЭлементСправочника), ПараметрыФормыВыбора, Элементы.ЭлементСправочника); + +КонецПроцедуры + +&НаСервере +Функция ПутьФормыВыбора(ВладелецФайла) + + ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(ИдентификаторВладельцаФайлов); + Возврат ОбъектМетаданных.ПолноеИмя() + ".ФормаВыбора"; + +КонецФункции + +&НаСервере +Функция СуществующиеОбъектыСинхронизации(ТипВладельцаФайла) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | НастройкиСинхронизацииФайлов.ВладелецФайла + |ИЗ + | РегистрСведений.НастройкиСинхронизацииФайлов КАК НастройкиСинхронизацииФайлов + |ГДЕ + | ТИПЗНАЧЕНИЯ(НастройкиСинхронизацииФайлов.ВладелецФайла) = &ТипВладельцаФайла"; + + Запрос.УстановитьПараметр("ТипВладельцаФайла", ТипВладельцаФайла); + + РезультатЗапроса = Запрос.Выполнить(); + + Возврат РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("ВладелецФайла"); + +КонецФункции + +&НаСервере +Процедура ЗаполнитьУчетнуюЗаписьСинхронизации() + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | УчетныеЗаписиСинхронизацииФайлов.Ссылка + |ИЗ + | Справочник.УчетныеЗаписиСинхронизацииФайлов КАК УчетныеЗаписиСинхронизацииФайлов + |ГДЕ + | НЕ УчетныеЗаписиСинхронизацииФайлов.ПометкаУдаления"; + + РезультатЗапроса = Запрос.Выполнить(); + + ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); + + Если ВыборкаДетальныеЗаписи.Количество() = 1 Тогда + Пока ВыборкаДетальныеЗаписи.Следующий() Цикл + Запись.УчетнаяЗапись = ВыборкаДетальныеЗаписи.Ссылка; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти \ 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..b9bf40917 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/Help/ru.html @@ -0,0 +1,42 @@ + +

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

                          +

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

                          +

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

                          +

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

                          +

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

                          +

                          Список облачных сервисов

                          +

                          Ограничен и не редактируется. Поддерживаются:

                          +
                          • Яндекс.Диск; +
                          • 4shared.com; +
                          • Box.com; +
                          • ICloud; +
                          • Dropbox (через платный сервис dropdav).

                          Принципы синхронизации файлов

                          +
                          • Синхронизировать можно только одну папку в одном плане обмена. +
                          • Если настроена синхронизация файлов с облачным сервисом, то редактирование и создание файлов в самой программе будет недоступно во избежание конфликтов. Можно возобновить редактирование файлов в программе, если отключить синхронизацию с облаком. +
                          • В облачном сервисе файлы хранятся в папке по шаблону <Общий путь учетной записи>\Представление объекта программы\Представление элемента данных, например: \YandexDisk\БСП 2.3.2\Демо Заказ Покупателя (Документ) \Демо Заказ Покупателя 00-0000001 от 17.12.2010 17 46 36. +
                          • При создании новых файлов или изменении существующих, файлы автоматически захватываются Автором файлов, указанным в учетной записи. +
                          • После выполнения синхронизации освобождаются файлы, которые не были обработаны во время синхронизации. +
                          • После выполнения синхронизации проверяются все неиспользуемые учетные записи. Если они захватили файлы, то файлы освобождаются. Например, если необходимо полностью отключить синхронизацию, то следует отключить все настройки с флажком Синхронизировать и при следующем выполнении регламентного задания все файлы освобождаются. +
                          • Не поддерживается режим RLS (возможность ограничивать права доступа на уровне записей). +
                          • Внимание! Если необходимо одновременно синхронизировать файлы двух подсистем: Работа с файлами и Присоединенные файлы, то рекомендуется использовать разные учетные записи или разные корневые папки облачных сервисов для файлов разных подсистем.

                          Настройка синхронизации файлов

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

                          Синхронизация файлов

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

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

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

                          См. также:

                          + \ 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..f5db2b5c9 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/ManagerModule.bsl @@ -0,0 +1,155 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныеПроцедурыИФункции + +Функция ТекущиеНастройкиСинхронизации() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ОбновитьНастройкиСинхронизации(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | НастройкиСинхронизацииФайлов.ВладелецФайла, + | ИдентификаторыОбъектовМетаданных.Ссылка КАК ИдентификаторВладельца, + | ВЫБОР + | КОГДА ТИПЗНАЧЕНИЯ(ИдентификаторыОбъектовМетаданных.Ссылка) <> ТИПЗНАЧЕНИЯ(НастройкиСинхронизацииФайлов.ВладелецФайла) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ЭтоНастройкаДляЭлементаСправочника, + | НастройкиСинхронизацииФайлов.ТипВладельцаФайла, + | НастройкиСинхронизацииФайлов.ПравилоОтбора, + | НастройкиСинхронизацииФайлов.ЭтоФайл, + | НастройкиСинхронизацииФайлов.Синхронизировать, + | НастройкиСинхронизацииФайлов.УчетнаяЗапись, + | НастройкиСинхронизацииФайлов.Наименование + |ИЗ + | РегистрСведений.НастройкиСинхронизацииФайлов КАК НастройкиСинхронизацииФайлов + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданных + | ПО (ТИПЗНАЧЕНИЯ(НастройкиСинхронизацииФайлов.ВладелецФайла) = ТИПЗНАЧЕНИЯ(ИдентификаторыОбъектовМетаданных.ЗначениеПустойСсылки)) + |ГДЕ + | НастройкиСинхронизацииФайлов.УчетнаяЗапись <> ЗНАЧЕНИЕ(Справочник.УчетныеЗаписиСинхронизацииФайлов.ПустаяСсылка)"; + + Возврат Запрос.Выполнить().Выгрузить(); + +КонецФункции + +Процедура ОбновитьНастройкиСинхронизации() + + МетаданныеСправочники = Метаданные.Справочники; + + ТаблицаВладельцевФайлов = Новый ТаблицаЗначений; + ТаблицаВладельцевФайлов.Колонки.Добавить("ВладелецФайла", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); + ТаблицаВладельцевФайлов.Колонки.Добавить("ТипВладельцаФайла", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); + ТаблицаВладельцевФайлов.Колонки.Добавить("ЭтоФайл", Новый ОписаниеТипов("Булево")); + + МассивИсключений = ФайловыеФункцииСлужебный.ПриОпределенииОбъектовИсключенияСинхронизацииФайлов(); + + Для Каждого Справочник Из МетаданныеСправочники Цикл + Если Справочник.Реквизиты.Найти("ВладелецФайла") <> Неопределено Тогда + Если МассивИсключений.Найти(Справочник) <> Неопределено Тогда + Продолжить; + КонецЕсли; + + ТипыВладельцевФайлов = Справочник.Реквизиты.ВладелецФайла.Тип.Типы(); + Для Каждого ТипВладельца Из ТипыВладельцевФайлов Цикл + НоваяСтрока = ТаблицаВладельцевФайлов.Добавить(); + НоваяСтрока.ВладелецФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипВладельца); + НоваяСтрокаЗначениеПустойСсылкиВладельца = НоваяСтрока.ВладелецФайла.ЗначениеПустойСсылки; + НоваяСтрока.ТипВладельцаФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Справочник); + Если Не СтрЗаканчиваетсяНа(Справочник.Имя, "ПрисоединенныеФайлы") Тогда + НоваяСтрока.ЭтоФайл = Истина; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЦикла; + + ВыборкаЗаписей = РегистрыСведений.НастройкиСинхронизацииФайлов.Выбрать(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ТаблицаВладельцевФайлов.ВладелецФайла КАК ВладелецФайла, + | ТаблицаВладельцевФайлов.ТипВладельцаФайла КАК ТипВладельцаФайла, + | ТаблицаВладельцевФайлов.ЭтоФайл КАК ЭтоФайл + |ПОМЕСТИТЬ ТаблицаВладельцевФайлов + |ИЗ + | &ТаблицаВладельцевФайлов КАК ТаблицаВладельцевФайлов + | + |ИНДЕКСИРОВАТЬ ПО + | ВладелецФайла, + | ЭтоФайл + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | НастройкиСинхронизацииФайлов.ВладелецФайла, + | НастройкиСинхронизацииФайлов.ТипВладельцаФайла КАК ТипВладельцаФайла, + | НастройкиСинхронизацииФайлов.ЭтоФайл КАК ЭтоФайл, + | ИдентификаторыОбъектовМетаданных.Ссылка КАК ИдентификаторОбъекта, + | НастройкиСинхронизацииФайлов.Наименование + |ПОМЕСТИТЬ ПодчиненныеНастройки + |ИЗ + | РегистрСведений.НастройкиСинхронизацииФайлов КАК НастройкиСинхронизацииФайлов + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданных + | ПО (ТИПЗНАЧЕНИЯ(НастройкиСинхронизацииФайлов.ВладелецФайла) = ТИПЗНАЧЕНИЯ(ИдентификаторыОбъектовМетаданных.ЗначениеПустойСсылки)) + |ГДЕ + | ТИПЗНАЧЕНИЯ(НастройкиСинхронизацииФайлов.ВладелецФайла) <> ТИП(Справочник.ИдентификаторыОбъектовМетаданных) + | + |ИНДЕКСИРОВАТЬ ПО + | ИдентификаторОбъекта, + | ЭтоФайл, + | ТипВладельцаФайла + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | НастройкиСинхронизацииФайлов.ВладелецФайла, + | НастройкиСинхронизацииФайлов.ТипВладельцаФайла КАК ТипВладельцаФайла, + | НастройкиСинхронизацииФайлов.ЭтоФайл, + | ЛОЖЬ КАК НоваяНастройка, + | НастройкиСинхронизацииФайлов.Наименование + |ИЗ + | РегистрСведений.НастройкиСинхронизацииФайлов КАК НастройкиСинхронизацииФайлов + | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаВладельцевФайлов КАК ТаблицаВладельцевФайлов + | ПО НастройкиСинхронизацииФайлов.ВладелецФайла = ТаблицаВладельцевФайлов.ВладелецФайла + | И НастройкиСинхронизацииФайлов.ЭтоФайл = ТаблицаВладельцевФайлов.ЭтоФайл + | И НастройкиСинхронизацииФайлов.ТипВладельцаФайла = ТаблицаВладельцевФайлов.ТипВладельцаФайла + |ГДЕ + | ТаблицаВладельцевФайлов.ВладелецФайла ЕСТЬ NULL + | И ТИПЗНАЧЕНИЯ(НастройкиСинхронизацииФайлов.ВладелецФайла) = ТИП(Справочник.ИдентификаторыОбъектовМетаданных) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ПодчиненныеНастройки.ВладелецФайла, + | ПодчиненныеНастройки.ТипВладельцаФайла, + | ПодчиненныеНастройки.ЭтоФайл, + | ЛОЖЬ, + | ПодчиненныеНастройки.Наименование + |ИЗ + | ПодчиненныеНастройки КАК ПодчиненныеНастройки + | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаВладельцевФайлов КАК ТаблицаВладельцевФайлов + | ПО ПодчиненныеНастройки.ТипВладельцаФайла = ТаблицаВладельцевФайлов.ТипВладельцаФайла + | И ПодчиненныеНастройки.ЭтоФайл = ТаблицаВладельцевФайлов.ЭтоФайл + | И ПодчиненныеНастройки.ИдентификаторОбъекта = ТаблицаВладельцевФайлов.ВладелецФайла + |ГДЕ + | ТаблицаВладельцевФайлов.ВладелецФайла ЕСТЬ NULL "; + + Запрос.Параметры.Вставить("ТаблицаВладельцевФайлов", ТаблицаВладельцевФайлов); + ОбщаяТаблицаНастроек = Запрос.Выполнить().Выгрузить(); + + НастройкиДляУдаления = ОбщаяТаблицаНастроек.НайтиСтроки(Новый Структура("НоваяНастройка", Ложь)); + Для Каждого Настройка Из НастройкиДляУдаления Цикл + МенеджерЗаписи = РегистрыСведений.НастройкиСинхронизацииФайлов.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ВладелецФайла = Настройка.ВладелецФайла; + МенеджерЗаписи.ТипВладельцаФайла = Настройка.ТипВладельцаФайла; + МенеджерЗаписи.Удалить(); + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/НастройкиСинхронизацииФайлов.mdo b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/НастройкиСинхронизацииФайлов.mdo new file mode 100644 index 000000000..67f40dd8a --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиСинхронизацииФайлов/НастройкиСинхронизацииФайлов.mdo @@ -0,0 +1,237 @@ + + + + + + + + + + + + НастройкиСинхронизацииФайлов + + ru + Настройки синхронизации файлов + + true + InDialog + InformationRegister.НастройкиСинхронизацииФайлов.Form.ФормаЗаписиНастройки + InformationRegister.НастройкиСинхронизацииФайлов.Form.НастройкиСинхронизацииФайлов + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + + + ru + + + Managed + + ПравилоОтбора + + ru + Правило отбора + + + ValueStorage + + + ru + Компоновщик с настройками отбора + + + + Use + Use + + + + Синхронизировать + + ru + Синхронизировать + + + Boolean + + + + Use + Use + true + + true + + + + ЭтоФайл + + ru + Это файл + + + Boolean + + + + Use + Use + + + + Наименование + + ru + Наименование + + + String + + 250 + + + + + Use + Use + + + + ВладелецФайла + + ru + Владелец + + + BusinessProcessRef + DocumentRef + TaskRef + CatalogRef + + + ru + Имя владельца файла + + + + ShowError + Use + Use + + true + + + ТипВладельцаФайла + + ru + Тип владельца файла + + + CatalogRef.ИдентификаторыОбъектовМетаданных + + + ru + Имя справочника владельца файла + + + + Use + Use + + true + + + УчетнаяЗапись + + ru + Учетная запись + + + CatalogRef.УчетныеЗаписиСинхронизацииФайлов + + + + ShowError + Use + Use + + true + + + НастройкиСинхронизацииФайлов + + ru + Настройки синхронизации файлов + + PersonalComputer + MobileDevice + + + ДобавленияУсловияПоДате + + ru + Добавление условия по дате + + PersonalComputer + MobileDevice + + + ФормаЗаписиНастройки + + ru + Форма записи настройки + + + + ru + + + PersonalComputer + MobileDevice + + + ПростаяФормаЗаписиНастройки + + ru + Простая форма записи настройки + + + + ru + + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Form.form b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Form.form index 620e5d4d7..d553b32a3 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Form.form +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Form.form @@ -147,10 +147,6 @@ ru Группа пароль - - ru - Группа пароль - ГруппаПарольРасширеннаяПодсказка 27 @@ -171,7 +167,7 @@
                          - ГруппаИнформация + ГруппаПредупреждение 15 ДекорацияИконка @@ -211,7 +207,7 @@ - ДекорацияТекст + ДекорацияПояснение 18 <key>ru</key> @@ -226,7 +222,7 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ДекорацияТекстРасширеннаяПодсказка</name> + <name>ДекорацияПояснениеРасширеннаяПодсказка</name> <id>32</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -236,7 +232,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ДекорацияТекстКонтекстноеМеню</name> + <name>ДекорацияПояснениеКонтекстноеМеню</name> <id>19</id> <autoFill>true</autoFill> </contextMenu> @@ -257,14 +253,10 @@ </userVisible> <title> <key>ru</key> - <value>Группа информация</value> + <value>Группа предупреждение</value> - - ru - Группа информация - - ГруппаИнформацияРасширеннаяПодсказка + ГруппаПредупреждениеРасширеннаяПодсказка 30 Label true @@ -291,10 +283,6 @@ ru Имя и пароль пользователя приложения в Интернете - - ru - Группа пользователь и пароль - ГруппаПользовательИПарольРасширеннаяПодсказка 25 diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Module.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Module.bsl index 045ce85fe..139fe0937 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Module.bsl @@ -36,9 +36,7 @@ Элементы.ЗабылиПароль.Видимость = Не ПустаяСтрока(АдресДляВосстановленияПароляУчетнойЗаписи); Если ЗначениеЗаполнено(Запись.Узел) Тогда - УстановитьПривилегированныйРежим(Истина); Пароль = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Запись.Узел, "WSПароль", Истина); - УстановитьПривилегированныйРежим(Ложь); WSПароль = ?(ЗначениеЗаполнено(Пароль), ЭтотОбъект.УникальныйИдентификатор, ""); КонецЕсли; @@ -68,7 +66,6 @@ КонецПроцедуры - #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы @@ -129,8 +126,10 @@ Если Не ОбменДаннымиСервер.ЕстьПодключениеККорреспонденту(Запись.Узел, ПараметрыПодключения, СообщениеПользователю) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю,, "WSПароль",, Отказ); Иначе - // Проверка подключения прошла успешно, записываем пароль - ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(Запись.Узел, WSПароль, "WSПароль"); + // Проверка подключения прошла успешно, записываем пароль если он был изменен + Если WSПарольИзменен Тогда + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(Запись.Узел, WSПароль, "WSПароль"); + КонецЕсли; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form index 2a053b498..09eac6064 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Form.form @@ -165,6 +165,7 @@ Page auto + false @@ -318,6 +319,7 @@ Page auto + false true @@ -398,6 +400,7 @@ Vertical auto + false @@ -501,6 +504,7 @@ Page auto + false true @@ -1003,7 +1007,7 @@ 2 ru - Завершить работу и провторить запуск позднее + Завершить работу и повторить запуск позднее true @@ -1074,6 +1078,11 @@ true + + + ЗабылиПароль + + DontUse Auto diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl index 89535c68c..9c00412e0 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ПовторнаяСинхронизацияДанныхПередЗапуском/Module.bsl @@ -33,7 +33,7 @@ НадписьИмяУзла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НадписьИмяУзла, УзелИнформационнойБазы.Наименование); Элементы.ИнформационнаяНадписьИмяУзла.Заголовок = СтроковыеФункцииКлиентСервер.ФорматированнаяСтрока(НадписьИмяУзла); - УстановитьДоступность(); + УстановитьОтображениеЭлементовФормы(); КонецПроцедуры @@ -42,7 +42,7 @@ #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте -Процедура ИнформационнаяНадписьИмяУзлаОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) +Процедура ИнформационнаяНадписьИмяУзлаОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; @@ -116,6 +116,11 @@ КонецПроцедуры +&НаКлиенте +Процедура ЗабылиПароль(Команда) + ОбменДаннымиКлиент.ПриОткрытииИнструкцииКакИзменитьПарольСинхронизацииДанных(АдресДляВосстановленияПароляУчетнойЗаписи); +КонецПроцедуры + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -489,7 +494,7 @@ &НаКлиенте Процедура СинхронизироватьИПродолжитьЗавершение() - УстановитьДоступность(); + УстановитьОтображениеЭлементовФормы(); Если ПустаяСтрока(ТекстПредупреждения) Тогда Закрыть("Продолжить"); @@ -510,23 +515,6 @@ КонецПроцедуры -&НаСервере -Процедура УстановитьДоступность() - - Если ОбменДаннымиСервер.ЗагрузитьСообщениеОбменаДанными() - И ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда - - Элементы.ФормаНеСинхронизироватьИПродолжить.Доступность = Ложь; - Элементы.ИнформационнаяНадписьНеСинхронизировать.Доступность = Ложь; - Иначе - Элементы.ФормаНеСинхронизироватьИПродолжить.Доступность = Истина; - Элементы.ИнформационнаяНадписьНеСинхронизировать.Доступность = Истина; - КонецЕсли; - - УстановитьОтображениеЭлементовФормы(); - -КонецПроцедуры - &НаКлиенте Процедура ОбработчикОжиданияДлительнойОперации() @@ -604,6 +592,16 @@ &НаСервере Процедура УстановитьОтображениеЭлементовФормы() + Если ОбменДаннымиСервер.ЗагрузитьСообщениеОбменаДанными() + И ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда + + Элементы.ФормаНеСинхронизироватьИПродолжить.Видимость = Ложь; + Элементы.ИнформационнаяНадписьНеСинхронизировать.Видимость = Ложь; + Иначе + Элементы.ФормаНеСинхронизироватьИПродолжить.Видимость = Истина; + Элементы.ИнформационнаяНадписьНеСинхронизировать.Видимость = Истина; + КонецЕсли; + Элементы.ПанельОсновная.ТекущаяСтраница = ?(ДлительнаяОперация, Элементы.ДлительнаяОперация, Элементы.Начало); Элементы.ГруппаКнопокДлительнаяОперация.Видимость = ДлительнаяОперация; Элементы.ГруппаКнопокОсновная.Видимость = Не ДлительнаяОперация; @@ -684,4 +682,5 @@ КонецПроцедуры + #КонецОбласти \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Form.form index bde4264a2..32809c85d 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Form.form @@ -197,6 +197,7 @@ Vertical auto + false @@ -319,6 +320,7 @@ Vertical auto + false true @@ -590,6 +592,7 @@ Vertical auto + false @@ -928,6 +931,7 @@ Vertical auto + false @@ -1212,6 +1216,7 @@ Vertical auto + false @@ -1821,6 +1826,7 @@ Vertical auto + false @@ -2167,6 +2173,7 @@ Vertical auto + false true diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Module.bsl index e9eb8b769..e94d65e2a 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ВнешниеРесурсыРазрешены; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -46,6 +50,7 @@ WSПароль = ?(ЗначениеЗаполнено(Пароли.WSПароль), ЭтотОбъект.УникальныйИдентификатор, ""); ПарольАрхиваСообщенияОбмена = ?(ЗначениеЗаполнено(Пароли.ПарольАрхиваСообщенияОбмена), ЭтотОбъект.УникальныйИдентификатор, ""); КонецЕсли; + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss new file mode 100644 index 000000000..61e6fb4bb --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -0,0 +1,17 @@ + + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..de2a103a0 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаСписка/Form.form @@ -0,0 +1,289 @@ + + + + СписокКомпоновщикНастроекПользовательскиеНастройки + 1 + true + true + + true + + + <key>ru</key> + <value>Группа пользовательских настроек</value> + + false + + СписокКомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + Список + 3 + true + true + + true + + + Список + + true + None + Copy + Create + + Узел + 16 + true + true + + true + + + Список.Узел + + true + + УзелРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + УзелКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 5 + Left + + + СписокСтрокаПоиска + 7 + + СписокСтрокаПоискаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 8 + true + + Список + + true + + + + СписокСостояниеПросмотра + 10 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 11 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 13 + + СписокУправлениеПоискомРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 14 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 4 + true + + true + true + true + true + true + MultiRow +
                          true
                          + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + ExpandTopLevel + true + true + true + + Список.DefaultPicture + + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + СписокКомпоновщикНастроекПользовательскиеНастройки + +
                          + + ФормаКоманднаяПанель + -1 + + ФормаИзменить + 19 + true + true + + true + + + ФормаИзменитьРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + Form.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + Left + true + + Copy + Create + DontBlock + true + true + true + Vertical + true + true + true + auto + true + + Список + 1 + + DynamicList + + + true + + + true + +
                          true
                          + + InformationRegister.НастройкиТранспортаОбмена + true + true + true + true + +
                          + + + + + +
                          diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Help/ru.html b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Help/ru.html index 3ffa49a6f..f63467dda 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 01191bd30..3a9bc648c 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/ManagerModule.bsl @@ -407,12 +407,13 @@ УстановитьПривилегированныйРежим(Истина); Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Узел, СписокПаролей, Истина); УстановитьПривилегированныйРежим(Ложь); + Если ТипЗнч(Пароли) = Тип("Структура") Тогда Для каждого КлючИЗначение Из Пароли Цикл Результат.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); КонецЦикла; Иначе - Результат.Вставить("ПарольАрхиваСообщенияОбмена", Пароли); + Результат.Вставить(СписокПаролей, Пароли); КонецЕсли; Возврат Результат; diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/НастройкиТранспортаОбмена.mdo b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/НастройкиТранспортаОбмена.mdo index 8439d6252..29132ea7d 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/НастройкиТранспортаОбмена.mdo +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/НастройкиТранспортаОбмена.mdo @@ -15,6 +15,7 @@ Параметры подключения InformationRegister.НастройкиТранспортаОбмена.Form.ФормаЗаписи + InformationRegister.НастройкиТранспортаОбмена.Form.ФормаСписка Use Active @@ -664,6 +665,7 @@ true true + true ФормаЗаписи @@ -692,4 +694,13 @@ PersonalComputer MobileDevice + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + diff --git a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Form.form index c60c9cbd2..7f19f8d01 100644 --- a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Form.form @@ -279,6 +279,7 @@ Vertical auto + false @@ -394,6 +395,7 @@ Vertical auto + false true @@ -689,6 +691,7 @@ Vertical auto + false @@ -902,6 +905,7 @@ Vertical auto + false @@ -975,7 +979,6 @@ 10 true 10 - true true true @@ -1007,6 +1010,7 @@ Vertical auto + false true @@ -1097,6 +1101,7 @@ Page auto + false @@ -1310,6 +1315,7 @@ Vertical auto + false @@ -1383,7 +1389,6 @@ 10 true 10 - true true true @@ -1415,6 +1420,7 @@ Vertical auto + false true @@ -1506,6 +1512,7 @@ Vertical auto + false true diff --git a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Help/ru.html b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Help/ru.html index a9b52b3e6..de1d19a22 100644 --- a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Help/ru.html +++ b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Help/ru.html @@ -1,13 +1,13 @@ - +

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

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

                          -

                          Как настроить использование учетной записи во встроенном почтовом клиенте?

                          -

                          На что влияет флажок Персональная учетная запись?

                          -

                          Как можно использовать коллективную учетную запись?

                          -

                          На что влияет флажок Удалять письма после отправки?

                          -

                          На что влияет флажок Помещать письма в папку письма основания?

                          -

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

                          -

                          Как настроить подпись к письму?

                          +

                          Как настроить использование учетной записи во встроенном почтовом клиенте?

                          +

                          На что влияет флажок Персональная учетная запись?

                          +

                          Как можно использовать коллективную учетную запись?

                          +

                          На что влияет флажок Удалять письма после отправки?

                          +

                          На что влияет флажок Помещать письма в папку письма основания?

                          +

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

                          +

                          Как настроить подпись к письму?

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

                          • Настройки производятся на вкладке Основное с помощью переключателя Использование для встроенного почтового клиента:
                            • Выберите значение Получать, сохранять и отправлять письма с этой учетной записи во встроенном почтовом клиенте, если с данной учетной записи электронной почты планируется переписка. diff --git a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Module.bsl index 53164ee82..9ef8275ec 100644 --- a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Module.bsl @@ -271,6 +271,9 @@ Иначе Форма.Элементы.СтраницыОтветственный.ТекущаяСтраница = Форма.Элементы.СтраницаКорпоративная; КонецЕсли; + + Форма.Элементы.ФорматПодписиДляНовыхСообщений.Доступность = Форма.Запись.ВключатьПодписьДляНовыхСообщений; + Форма.Элементы.ФорматПодписиПриОтветеПересылке.Доступность = Форма.Запись.ВключатьПодписьПриОтветеПересылке; КонецПроцедуры diff --git a/SSL/src/InformationRegisters/НомераОтсканированныхФайлов/Help/ru.html b/SSL/src/InformationRegisters/НомераОтсканированныхФайлов/Help/ru.html index 82829145b..36018a381 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/НомераОтсканированныхФайлов/НомераОтсканированныхФайлов.mdo b/SSL/src/InformationRegisters/НомераОтсканированныхФайлов/НомераОтсканированныхФайлов.mdo index a809f970c..9fc4a2199 100644 --- a/SSL/src/InformationRegisters/НомераОтсканированныхФайлов/НомераОтсканированныхФайлов.mdo +++ b/SSL/src/InformationRegisters/НомераОтсканированныхФайлов/НомераОтсканированныхФайлов.mdo @@ -84,7 +84,14 @@ Владелец - AnyRef + ExchangePlanRef + BusinessProcessRef + DocumentRef + ChartOfCalculationTypesRef + TaskRef + ChartOfCharacteristicTypesRef + ChartOfAccountsRef + CatalogRef ru diff --git a/SSL/src/InformationRegisters/ОбработчикиСобытийСинхронизацииДанных/ManagerModule.bsl b/SSL/src/InformationRegisters/ОбработчикиСобытийСинхронизацииДанных/ManagerModule.bsl new file mode 100644 index 000000000..5719bac02 --- /dev/null +++ b/SSL/src/InformationRegisters/ОбработчикиСобытийСинхронизацииДанных/ManagerModule.bsl @@ -0,0 +1,88 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область СлужебныйПрограммныйИнтерфейс + +// Процедура регистрирует необходимость выполнения обработчиков обновления информационной базы +// после получения данных из каждого периферийного узла РИБ. +// +Процедура ЗарегистрироватьОбновлениеДанныхИнформационнойБазы() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ПланыОбменаРИБ = СтандартныеПодсистемыПовтИсп.ПланыОбменаРИБ(); + Запрос = Новый Запрос(); + Запрос.УстановитьПараметр("ГлавныйУзел", ПланыОбмена.ГлавныйУзел()); + Для Каждого ИмяПланаОбмена Из ПланыОбменаРИБ Цикл + Если СтрНайти(ОбменДаннымиСервер.НазначениеПланаОбмена(ИмяПланаОбмена), "РИБ") = 0 Тогда + Продолжить; + КонецЕсли; + + Запрос.Текст = + "ВЫБРАТЬ + | ПланОбмена.Ссылка КАК Ссылка + |ИЗ + | ПланОбмена.[ИмяПланаОбмена] КАК ПланОбмена + |ГДЕ + | НЕ ПланОбмена.ЭтотУзел + | И НЕ ПланОбмена.ПометкаУдаления + | И ПланОбмена.Ссылка <> &ГлавныйУзел"; + Запрос.Текст = СтрЗаменить(Запрос.Текст, "[ИмяПланаОбмена]", ИмяПланаОбмена); + ВыборкаУзлов = Запрос.Выполнить().Выбрать(); + Пока ВыборкаУзлов.Следующий() Цикл + + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("УзелИнформационнойБазы", ВыборкаУзлов.Ссылка); + СтруктураЗаписи.Вставить("Событие", "ПослеПолученияДанных"); + СтруктураЗаписи.Вставить("Обработчик", "ОбновлениеИнформационнойБазы"); + ОбменДаннымиСервер.ДобавитьЗаписьВРегистрСведений(СтруктураЗаписи, "ОбработчикиСобытийСинхронизацииДанных"); + + КонецЦикла; + КонецЦикла; + + +КонецПроцедуры + +// Процедура выполняет обработчики, зарегистрированные для событий узлов планов обмена. +// +// Параметры: +// УзелИнформационнойБазы - ПланОбменаСсылка - Узел информационной базы для выполнения обработчиков. +// Событие - Строка - Имя события, для которого необходимо выполнить обработчики. +// +Процедура ВыполнитьОбработчики(УзелИнформационнойБазы, Событие) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | Обработчики.Обработчик + |ИЗ + | РегистрСведений.ОбработчикиСобытийСинхронизацииДанных КАК Обработчики + |ГДЕ + | Обработчики.УзелИнформационнойБазы = &УзелИнформационнойБазы + | И Обработчики.Событие = &Событие"; + + Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелИнформационнойБазы); + Запрос.УстановитьПараметр("Событие", Событие); + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + + Если Выборка.Обработчик = "ОбновлениеИнформационнойБазы" Тогда + + ОбновлениеИнформационнойБазыСлужебный.ПриПолученииПервогоСообщенияОбменаРИБПослеОбновления(); + + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("УзелИнформационнойБазы", УзелИнформационнойБазы); + СтруктураЗаписи.Вставить("Событие", "ПослеПолученияДанных"); + СтруктураЗаписи.Вставить("Обработчик", "ОбновлениеИнформационнойБазы"); + ОбменДаннымиСервер.УдалитьНаборЗаписейВРегистреСведений(СтруктураЗаписи, "ОбработчикиСобытийСинхронизацииДанных"); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ОбработчикиСобытийСинхронизацииДанных/ОбработчикиСобытийСинхронизацииДанных.mdo b/SSL/src/InformationRegisters/ОбработчикиСобытийСинхронизацииДанных/ОбработчикиСобытийСинхронизацииДанных.mdo new file mode 100644 index 000000000..2a6257669 --- /dev/null +++ b/SSL/src/InformationRegisters/ОбработчикиСобытийСинхронизацииДанных/ОбработчикиСобытийСинхронизацииДанных.mdo @@ -0,0 +1,109 @@ + + + + + + + + + + + + ОбработчикиСобытийСинхронизацииДанных + + ru + Обработчики событий синхронизации данных + + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + УзелИнформационнойБазы + + ru + Узел информационной базы + + + ExchangePlanRef + + + + true + Use + Use + true + + true + true + + + Событие + + ru + Событие + + + String + + 50 + + + + + Use + Use + + true + + + Обработчик + + ru + Обработчик + + + String + + 50 + + + + + Use + Use + + true + + diff --git a/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl b/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl index 6ccb9beda..4e6220665 100644 --- a/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl @@ -6,6 +6,46 @@ // Добавлять записи в этот регистр наборами записей запрещено, // т.к. при этом будут утеряны настройки, не попавшие в набор записей. +#Область ПрограммныйИнтерфейс + +// Возвращает, пользователя для синхронизации данных из общих настроек узлов информационных баз. +// Параметры: +// УзелПланаОбмена - ПланОбменаСсылка - узел плана обмена, для которого необходимо получить переопределяемое имя. +// +// Возвращаемое значение: +// СправочникСсылка.Пользователи - пользователь информационной базы для выполнения обмена. +// +Функция ПользовательДляСинхронизацииДанных(Знач УзелИнформационнойБазы) Экспорт + + ТекстЗапроса = + "ВЫБРАТЬ + | ОбщиеНастройкиУзловИнформационныхБаз.ПользовательДляСинхронизацииДанных КАК ПользовательДляСинхронизацииДанных + |ИЗ + | РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз КАК ОбщиеНастройкиУзловИнформационныхБаз + |ГДЕ + | ОбщиеНастройкиУзловИнформационныхБаз.УзелИнформационнойБазы = &УзелИнформационнойБазы"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелИнформационнойБазы); + Запрос.Текст = ТекстЗапроса; + + РезультатЗапроса = Запрос.Выполнить(); + + Если Не РезультатЗапроса.Пустой() Тогда + + Выборка = РезультатЗапроса.Выбрать(); + + Выборка.Следующий(); + + Возврат ?(ЗначениеЗаполнено(Выборка.ПользовательДляСинхронизацииДанных), Выборка.ПользовательДляСинхронизацииДанных, Неопределено); + + КонецЕсли; + + Возврат Неопределено; +КонецФункции + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции Процедура УстановитьПризнакНачальнойВыгрузкиДанных(Знач УзелИнформационнойБазы) Экспорт @@ -187,35 +227,6 @@ Возврат Результат; КонецФункции -Функция ПользовательДляСинхронизацииДанных(Знач УзелИнформационнойБазы) Экспорт - - ТекстЗапроса = - "ВЫБРАТЬ - | ОбщиеНастройкиУзловИнформационныхБаз.ПользовательДляСинхронизацииДанных КАК ПользовательДляСинхронизацииДанных - |ИЗ - | РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз КАК ОбщиеНастройкиУзловИнформационныхБаз - |ГДЕ - | ОбщиеНастройкиУзловИнформационныхБаз.УзелИнформационнойБазы = &УзелИнформационнойБазы"; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелИнформационнойБазы); - Запрос.Текст = ТекстЗапроса; - - РезультатЗапроса = Запрос.Выполнить(); - - Если Не РезультатЗапроса.Пустой() Тогда - - Выборка = РезультатЗапроса.Выбрать(); - - Выборка.Следующий(); - - Возврат ?(ЗначениеЗаполнено(Выборка.ПользовательДляСинхронизацииДанных), Выборка.ПользовательДляСинхронизацииДанных, Неопределено); - - КонецЕсли; - - Возврат Неопределено; -КонецФункции - // Процедура УстановитьПризнакОтправкиДанных(Знач Получатель) Экспорт @@ -343,7 +354,7 @@ // // Процедура обновляет запись в регистре по переданным значениям структуры. -Процедура ОбновитьЗапись(СтруктураЗаписи) Экспорт +Процедура ОбновитьЗапись(СтруктураЗаписи) ОбменДаннымиСервер.ОбновитьЗаписьВРегистрСведений(СтруктураЗаписи, "ОбщиеНастройкиУзловИнформационныхБаз"); diff --git a/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ОбщиеНастройкиУзловИнформационныхБаз.mdo b/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ОбщиеНастройкиУзловИнформационныхБаз.mdo index 25c99bb6e..e0fd3f9e3 100644 --- a/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ОбщиеНастройкиУзловИнформационныхБаз.mdo +++ b/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ОбщиеНастройкиУзловИнформационныхБаз.mdo @@ -218,5 +218,6 @@ true true + true diff --git a/SSL/src/InformationRegisters/ОперацииСтатистики/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ОперацииСтатистики/Forms/ФормаСписка/Form.form index 3daae0631..a83ae22e0 100644 --- a/SSL/src/InformationRegisters/ОперацииСтатистики/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/ОперацииСтатистики/Forms/ФормаСписка/Form.form @@ -47,43 +47,6 @@ true None - - УникальныйИдентификаторОперации - 19 - true - true - - true - - - Список.УникальныйИдентификаторОперации - - true - - УникальныйИдентификаторОперацииРасширеннаяПодсказка - 21 - Label - true - true - - Left - - - - УникальныйИдентификаторОперацииКонтекстноеМеню - 20 - true - - LabelField - Enter - true - Left - true - - true - true - - Наименование 22 diff --git a/SSL/src/InformationRegisters/ПакетыДляОтправки/ManagerModule.bsl b/SSL/src/InformationRegisters/ПакетыДляОтправки/ManagerModule.bsl index 00b796630..fd3abb413 100644 --- a/SSL/src/InformationRegisters/ПакетыДляОтправки/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПакетыДляОтправки/ManagerModule.bsl @@ -86,46 +86,13 @@ Исключение ОтменитьТранзакцию(); Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru = 'УдалитьСтарыеПакеты'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); + ЗаписьЖурналаРегистрации(НСтр("ru='УдалитьСтарыеПакеты'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); ВызватьИсключение Ошибка; КонецПопытки; КонецЕсли; КонецПроцедуры -Процедура УдалитьПакеты(НомерПакета) Экспорт - Запрос = Новый Запрос; - - Запрос.Текст = " - |ВЫБРАТЬ - | ПакетыДляОтправки.НомерПакета КАК НомерПакета - |ИЗ - | РегистрСведений.ПакетыДляОтправки КАК ПакетыДляОтправки - |ГДЕ - | ПакетыДляОтправки.НомерПакета <= &КрайнийПакет - |"; - - Запрос.УстановитьПараметр("КрайнийПакет", НомерПакета); - Результат = Запрос.Выполнить(); - Выборка = Результат.Выбрать(); - - НачатьТранзакцию(); - Попытка - НаборЗаписей = РегистрыСведений.ПакетыДляОтправки.СоздатьНаборЗаписей(); - Пока Выборка.Следующий() Цикл - НаборЗаписей.Отбор.НомерПакета.Установить(Выборка.НомерПакета); - НаборЗаписей.Записать(Истина); - КонецЦикла; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru = 'УдалитьПакеты'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); - ВызватьИсключение Ошибка; - КонецПопытки; -КонецПроцедуры - Процедура УдалитьПакет(НомерПакета) Экспорт Запрос = Новый Запрос; @@ -154,26 +121,11 @@ Исключение ОтменитьТранзакцию(); Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru = 'УдалитьПакеты'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); + ЗаписьЖурналаРегистрации(НСтр("ru='УдалитьПакеты'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, Метаданные.ОбщиеМодули.ЦентрМониторингаСлужебный,,Ошибка); ВызватьИсключение Ошибка; КонецПопытки; КонецПроцедуры -Функция ПолучитьДатуКрайнегоПакета() Экспорт - Запрос = Новый Запрос; - Запрос.Текст = " - |ВЫБРАТЬ - | ISNULL(МАКСИМУМ(ПакетыДляОтправки.Период), ДАТАВРЕМЯ(1,1,1)) КАК ДатаКрайнегоПакета - |ИЗ - | РегистрСведений.ПакетыДляОтправки КАК ПакетыДляОтправки - |"; - Результат = Запрос.Выполнить(); - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - - Возврат Выборка.ДатаКрайнегоПакета; -КонецФункции - Функция ПолучитьПакет(НомерПакета) Экспорт Запрос = Новый Запрос; diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Help/ru.html b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Help/ru.html index 5b65b9608..27353367a 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/МакетыПечатныхФорм/Help/ru.html b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Help/ru.html index ca0d8e233..80219eaee 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 06d83efd7..4d07cb109 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем КонтекстВыбора; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -147,6 +151,7 @@ КоллекцииОбъектовМетаданных.Добавить(Метаданные.БизнесПроцессы); КоллекцииОбъектовМетаданных.Добавить(Метаданные.Задачи); КоллекцииОбъектовМетаданных.Добавить(Метаданные.ЖурналыДокументов); + КоллекцииОбъектовМетаданных.Добавить(Метаданные.Отчеты); Для Каждого КоллекцияОбъектовМетаданных Из КоллекцииОбъектовМетаданных Цикл Для Каждого ОбъектМетаданныхКоллекции Из КоллекцияОбъектовМетаданных Цикл diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Form.form b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Form.form index e9d0e725e..d0770570f 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Form.form +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Form.form @@ -155,6 +155,7 @@ Page Vertical + false @@ -303,6 +304,7 @@ Page Vertical + false @@ -420,6 +422,7 @@ Page Vertical + false @@ -537,6 +540,7 @@ Page Vertical + false true @@ -708,6 +712,7 @@ Page Vertical + false @@ -848,6 +853,7 @@ Page Vertical + false true diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Help/ru.html b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Help/ru.html index 91cdb4154..bfd635b15 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Help/ru.html +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/РедактированиеМакета/Help/ru.html @@ -1,11 +1,11 @@ - +

                                Макеты в виде табличного документа редактируются в самой программе, а для редактирования макетов в виде офисных документов в форматах Microsoft Word и OpenOffice.org Writer на компьютере должны быть установлены соответствующие офисные программы.

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

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

                                Если программа уже установлена, нажмите Продолжить.

                                Программа, с помощью которой можно отредактировать макет, определяется типом (форматом) макета:

                                - +
                                Тип макета
                                diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Help/ru.html b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Help/ru.html index 3cc87af61..6712457c8 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Help/ru.html +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Help/ru.html @@ -1,4 +1,4 @@ - +

                                Многие документы, справочники и другие объекты программы имеют свои печатные формы. Печатные формы могут формироваться в виде табличных документов или офисных документов в форматах Microsoft Word, OpenOffice.org Writer, Adobe PDF, HTML, Microsoft Excel, а также в формате табличного документа 1С:Предприятие (.mxl). При этом не требуется, чтобы сами эти программы были установлены на компьютере.

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

                                Особенности формирования печатных форм в веб-клиенте

                                diff --git a/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаЗаписи/Form.form index 526db2553..c33052eb5 100644 --- a/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/ПраваРолей/Forms/ФормаЗаписи/Form.form @@ -338,10 +338,6 @@ true - - <key>ru</key> - <value> </value> - ВертикальнаяГруппа2ExtendedTooltip 41 diff --git a/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl b/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl index 4be8cbacf..da425105b 100644 --- a/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПраваРолей/ManagerModule.bsl @@ -295,7 +295,7 @@ // Параметры: // ОбъектМетаданных - ОбъектМетаданных // ОбъектИБ - Неопределено, COMОбъект -// ПолучитьМассивИмен - Булево +// ПолучитьМассивИмен - Булево. // // Возвращаемое значение: // Строка (имен через запятую). diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Form.form b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Form.form index d48dfd155..0ebdc72f2 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Form.form +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Form.form @@ -128,6 +128,7 @@ Vertical auto + false true diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Help/ru.html b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Help/ru.html index 29c2b788f..bd01c134b 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 432c41f4b..257156b92 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ЗагрузитьПравилаСинхронизацииДанных/Module.bsl @@ -1,7 +1,11 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ВнешниеРесурсыРазрешены; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -60,8 +64,8 @@ ДополнительныеПараметры.Вставить("ПользовательскиеНастройкиШаблонов", КаталогAppData() + "1C\1CEStart\1CEStart.cfg"); ДополнительныеПараметры.Вставить("РасположениеФайла", ""); - ТекстПредложения = Нстр("ru = 'Для открытия каталога необходимо необходимо установить расширение работы с файлами.'"); - Оповещение = Новый ОписаниеОповещения("ПослеПроверкиРасширенияРаботыСФайлами", ЭтаФорма, ДополнительныеПараметры); + ТекстПредложения = НСтр("ru = 'Для открытия каталога необходимо необходимо установить расширение работы с файлами.'"); + Оповещение = Новый ОписаниеОповещения("ПослеПроверкиРасширенияРаботыСФайлами", ЭтотОбъект, ДополнительныеПараметры); ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(Оповещение, ТекстПредложения); Иначе @@ -76,8 +80,8 @@ Если Результат Тогда Файл = Новый Файл(); - ДополнительныеПараметры.Вставить("СледующееОповещение", Новый ОписаниеОповещения("ОпределениеСуществованияФайла", ЭтаФорма, ДополнительныеПараметры)); - Оповещение = Новый ОписаниеОповещения("ИнициализироватьФайл", ЭтаФорма, ДополнительныеПараметры); + ДополнительныеПараметры.Вставить("СледующееОповещение", Новый ОписаниеОповещения("ОпределениеСуществованияФайла", ЭтотОбъект, ДополнительныеПараметры)); + Оповещение = Новый ОписаниеОповещения("ИнициализироватьФайл", ЭтотОбъект, ДополнительныеПараметры); Файл.НачатьИнициализацию(Оповещение, ДополнительныеПараметры.ПользовательскиеНастройкиШаблонов); Иначе УстановитьЗаголовокИнформацииОПолучении(ДополнительныеПараметры); @@ -107,10 +111,10 @@ Если Стр = Неопределено Тогда Прервать; КонецЕсли; - Если Найти(ВРег(Стр), ВРег("ConfigurationTemplatesLocation")) = 0 Тогда + Если СтрНайти(ВРег(Стр), ВРег("ConfigurationTemplatesLocation")) = 0 Тогда Продолжить; КонецЕсли; - ПозицияРазделителя = Найти(Стр, "="); + ПозицияРазделителя = СтрНайти(Стр, "="); Если ПозицияРазделителя = 0 Тогда Продолжить; КонецЕсли; @@ -127,8 +131,8 @@ КонецЕсли; Файл = Новый Файл(); - ДополнительныеПараметры.СледующееОповещение = Новый ОписаниеОповещения("ОпределениеСуществованияКаталога", ЭтаФорма, ДополнительныеПараметры); - Оповещение = Новый ОписаниеОповещения("ИнициализироватьФайл", ЭтаФорма, ДополнительныеПараметры); + ДополнительныеПараметры.СледующееОповещение = Новый ОписаниеОповещения("ОпределениеСуществованияКаталога", ЭтотОбъект, ДополнительныеПараметры); + Оповещение = Новый ОписаниеОповещения("ИнициализироватьФайл", ЭтотОбъект, ДополнительныеПараметры); Файл.НачатьИнициализацию(Оповещение, ДополнительныеПараметры.РасположениеФайла); КонецПроцедуры @@ -308,14 +312,15 @@ КонецПроцедуры &НаКлиенте -Процедура ДекорацияИнформацияОПолученииПравилОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) +Процедура ДекорацияИнформацияОПолученииПравилОбработкаНавигационнойСсылки( + Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) - Если СтрНайти(НавигационнаяСсылка, "http") = 0 Тогда + Если СтрНайти(НавигационнаяСсылкаФорматированнойСтроки, "http") = 0 Тогда СтандартнаяОбработка = Ложь; Оповещение = Новый ОписаниеОповещения("ОткрытьКаталогСПоставкамиКонфигураций", ЭтотОбъект); - НачатьЗапускПриложения(Оповещение, НавигационнаяСсылка); + НачатьЗапускПриложения(Оповещение, НавигационнаяСсылкаФорматированнойСтроки); КонецЕсли; diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Form.form b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Form.form index 491ae5a92..99fc2a24f 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Form.form +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Form.form @@ -235,6 +235,7 @@ Vertical auto + false @@ -293,6 +294,7 @@ Vertical auto + false true diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Help/ru.html b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Help/ru.html index bbf5e4c3f..3c41673c6 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 bae53a1cd..2cce82006 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Module.bsl @@ -1,7 +1,11 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ВнешниеРесурсыРазрешены; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -63,7 +67,7 @@ Если ИсточникПравил = "ЗагруженныеИзФайла" И ПустаяСтрока(Запись.ИмяФайлаПравил) Тогда - СтрокаСообщения = Нстр("ru = 'Не задан файл правил обмена.'"); + СтрокаСообщения = НСтр("ru = 'Не задан файл правил обмена.'"); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения,,,, ЕстьНезаполненныеПоля); КонецЕсли; @@ -305,7 +309,7 @@ Если ПустаяСтрока(Запись.ИмяПланаОбмена) Тогда - Элементы.ГруппаОсновная.Заголовок = Нстр("ru = 'Правила конвертации'"); + Элементы.ГруппаОсновная.Заголовок = НСтр("ru = 'Правила конвертации'"); Иначе diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Form.form b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Form.form index bc16d40c0..a1fde34b8 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Form.form +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Form.form @@ -219,6 +219,7 @@ Vertical auto + false @@ -273,6 +274,7 @@ Vertical auto + false true diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Help/ru.html b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Help/ru.html index 030b01871..3db24f24c 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Help/ru.html +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

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

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

                                +

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

                                См. также:

                                \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Module.bsl index 46d0b48a2..0a8c096b5 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ВнешниеРесурсыРазрешены; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере @@ -165,7 +169,7 @@ Если ПустаяСтрока(Запись.ИмяПланаОбмена) Тогда - Элементы.ГруппаОсновная.Заголовок = Нстр("ru = 'Правила конвертации'"); + Элементы.ГруппаОсновная.Заголовок = НСтр("ru = 'Правила конвертации'"); Иначе diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Module.bsl index fac7967cc..52f160339 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/СообщениеОНеудачномОбновлении/Module.bsl @@ -25,11 +25,11 @@ ПравилаИзФайла = РегистрыСведений.ПравилаДляОбменаДанными.ИспользуютсяПравилаИзФайла(ИмяПланаОбмена, Истина); Если ПравилаИзФайла.ПравилаКонвертации И ПравилаИзФайла.ПравилаРегистрации Тогда - ТипПравил = Нстр("ru = 'конвертации и регистрации'"); + ТипПравил = НСтр("ru = 'конвертации и регистрации'"); ИначеЕсли ПравилаИзФайла.ПравилаКонвертации Тогда - ТипПравил = Нстр("ru = 'конвертации'"); + ТипПравил = НСтр("ru = 'конвертации'"); ИначеЕсли ПравилаИзФайла.ПравилаРегистрации Тогда - ТипПравил = Нстр("ru = 'регистрации'"); + ТипПравил = НСтр("ru = 'регистрации'"); КонецЕсли; Элементы.ТекстПравилаИзФайла.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Form.form index 782281fd9..0e41cbdf5 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Form.form @@ -374,6 +374,9 @@ true None + Copy + Create + Delete ИмяПланаОбмена 4 @@ -495,6 +498,10 @@ 3 Left + + BeforeDeleteRow + СписокПередУдалением + СписокСтрокаПоиска 46 @@ -627,6 +634,9 @@ OnCreateAtServer ПриСозданииНаСервере + Copy + Create + Delete DontBlock true true diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Module.bsl index b5645fdae..2031c3bc6 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаСписка/Module.bsl @@ -17,6 +17,15 @@ #КонецОбласти +#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок + +&НаКлиенте +Процедура СписокПередУдалением(Элемент, Отказ) + Отказ = Истина; +КонецПроцедуры + +#КонецОбласти + #Область ОбработчикиКомандФормы &НаКлиенте diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Help/ru.html b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Help/ru.html index b0c2ae300..ade605ea3 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Help/ru.html +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Help/ru.html @@ -1,4 +1,4 @@ - +

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

                                Типовые правила обмена состоят из правил конвертации объектов и правил регистрации объектов. Правила конвертации данных используются при синхронизации данных двух программ. Правила регистрации предусмотрены для всех видов синхронизации данных. Комплект актуальных правил обмена публикуется на сайте технической поддержки http://users.v8.1c.ru. Исправительные версии правил обмена также публикуются на данном сайте.

                                Контроль актуальности правил синхронизации

                                diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl index 72e92ad55..33c0ecc1b 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl @@ -1,4 +1,264 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Загружает поставляемые правила для плана обмена. +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена, для которого загружаются правила. +// ИмяФайлаПравил - Строка - полное имя файла правил обмена (*.zip). +// +Процедура ЗагрузитьПоставляемыеПравила(ИмяПланаОбмена, ИмяФайлаПравил) Экспорт + + Файл = Новый Файл(ИмяФайлаПравил); + ИмяФайла = Файл.Имя; + + // Распаковываем архив + ИмяВременнойПапки = ПолучитьИмяВременногоФайла(""); + Если ОбменДаннымиСервер.РаспаковатьZipФайл(ИмяФайлаПравил, ИмяВременнойПапки) Тогда + + СписокРаспакованныхФайлов = НайтиФайлы(ИмяВременнойПапки, "*.*", Истина); + + // В архиве не было ни одного файла - отказываемся от загрузки. + Если СписокРаспакованныхФайлов.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'При распаковке архива не найден файл с правилами.'"); + КонецЕсли; + + // В архиве количество файлов не соответствует ожидаемому - отказываемся от загрузки. + Если СписокРаспакованныхФайлов.Количество() <> 3 Тогда + ВызватьИсключение НСтр("ru = 'Не верный формат комплекта правил. Ожидаемое количество файлов в архиве - три. Ожидаются файлы: + |ExchangeRules.xml - правила конвертации для текущей программы; + |CorrespondentExchangeRules.xml - правила конвертации для программы-корреспондента; + |RegistrationRules.xml - правила регистрации для текущей программы.'"); + КонецЕсли; + + // Закладываем полученный файл правил обратно в двоичные данные. + Для Каждого ПолученныйФайл Из СписокРаспакованныхФайлов Цикл + + Если ПолученныйФайл.Имя = "ExchangeRules.xml" Тогда + ДвоичныеДанные = Новый ДвоичныеДанные(ПолученныйФайл.ПолноеИмя); + ИначеЕсли ПолученныйФайл.Имя ="CorrespondentExchangeRules.xml" Тогда + ДвоичныеДанныеКорреспондента = Новый ДвоичныеДанные(ПолученныйФайл.ПолноеИмя); + ИначеЕсли ПолученныйФайл.Имя ="RegistrationRules.xml" Тогда + ДвоичныеДанныеРегистрации = Новый ДвоичныеДанные(ПолученныйФайл.ПолноеИмя); + Иначе + ВызватьИсключение НСтр("ru = 'Имена файлов в архиве не соответствуют ожидаемым. Ожидаются файлы: + |ExchangeRules.xml - правила конвертации для текущей программы; + |CorrespondentExchangeRules.xml - правила конвертации для программы-корреспондента; + |RegistrationRules.xml - правила регистрации для текущей программы.'"); + КонецЕсли; + + КонецЦикла; + + Иначе + // Если не удалось распаковать файл - отказываемся от загрузки. + ВызватьИсключение НСтр("ru = 'Не удалось распаковать архив с правилами.'"); + КонецЕсли; + + // Удаляем временный архив и временную папку, в которую был распакован архив. + УдалитьВременныйФайл(ИмяВременнойПапки); + + ИнформацияОПравилахКонвертации = "[ИнформацияОПравилахИсточника] + | + |[ИнформацияОПравилахКорреспондента]"; + + // Получаем имя временного файла конвертации в локальной ФС на сервере. + ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml"); + + // Получаем файл правил для зачитки. + ДвоичныеДанные.Записать(ИмяВременногоФайла); + + // Зачитываем правила конвертации. + КонвертацияОбъектовИнформационныхБаз = Обработки.КонвертацияОбъектовИнформационныхБаз.Создать(); + + // свойства обработки + КонвертацияОбъектовИнформационныхБаз.РежимОбмена = "Выгрузка"; + КонвертацияОбъектовИнформационныхБаз.ИмяПланаОбменаВРО = ИмяПланаОбмена; + КонвертацияОбъектовИнформационныхБаз.КлючСообщенияЖурналаРегистрации = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными(); + + ОбменДаннымиСервер.УстановитьНастройкиОтладкиВыгрузкиДляПравилОбмена(КонвертацияОбъектовИнформационныхБаз, ИмяПланаОбмена, Ложь); + + ПравилаЗачитанные = КонвертацияОбъектовИнформационныхБаз.ПолучитьСтруктуруПравилОбмена(ИмяВременногоФайла); + + ИнформацияОПравилахИсточника = КонвертацияОбъектовИнформационныхБаз.ПолучитьИнформациюОПравилах(Ложь); + + Если КонвертацияОбъектовИнформационныхБаз.ФлагОшибки() Тогда + Отказ = Истина; + КонецЕсли; + + // Получаем имя временного файла конвертации корреспондента в локальной ФС на сервере. + ИмяВременногоФайлаКорреспондента = ПолучитьИмяВременногоФайла("xml"); + // Получаем файл правил для зачитки. + ДвоичныеДанныеКорреспондента.Записать(ИмяВременногоФайлаКорреспондента); + + // Зачитываем правила конвертации. + КонвертацияОбъектовИнформационныхБаз = Обработки.КонвертацияОбъектовИнформационныхБаз.Создать(); + + // свойства обработки + КонвертацияОбъектовИнформационныхБаз.РежимОбмена = "Загрузка"; + КонвертацияОбъектовИнформационныхБаз.ИмяПланаОбменаВРО = ИмяПланаОбмена; + КонвертацияОбъектовИнформационныхБаз.КлючСообщенияЖурналаРегистрации = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными(); + + // методы обработки + ПравилаЗачитанныеКорреспондента = КонвертацияОбъектовИнформационныхБаз.ПолучитьСтруктуруПравилОбмена(ИмяВременногоФайлаКорреспондента); + + ИнформацияОПравилахКорреспондента = КонвертацияОбъектовИнформационныхБаз.ПолучитьИнформациюОПравилах(Истина); + + Если КонвертацияОбъектовИнформационныхБаз.ФлагОшибки() Тогда + Отказ = Истина; + КонецЕсли; + + ИнформацияОПравилахКонвертации = СтрЗаменить(ИнформацияОПравилахКонвертации, "[ИнформацияОПравилахИсточника]", ИнформацияОПравилахИсточника); + ИнформацияОПравилахКонвертации = СтрЗаменить(ИнформацияОПравилахКонвертации, "[ИнформацияОПравилахКорреспондента]", ИнформацияОПравилахКорреспондента); + + // Получаем имя временного файла регистрации в локальной ФС на сервере. + ИмяВременногоФайлаРегистрации = ПолучитьИмяВременногоФайла("xml"); + // Получаем файл правил для зачитки. + ДвоичныеДанныеРегистрации.Записать(ИмяВременногоФайлаРегистрации); + + // Зачитываем правила регистрации. + ЗагрузкаПравилРегистрации = Обработки.ЗагрузкаПравилРегистрацииОбъектов.Создать(); + + // свойства обработки + ЗагрузкаПравилРегистрации.ИмяПланаОбменаДляЗагрузки = ИмяПланаОбмена; + + // методы обработки + ЗагрузкаПравилРегистрации.ЗагрузитьПравила(ИмяВременногоФайлаРегистрации); + ПравилаРегистрацииЗачитанные = ЗагрузкаПравилРегистрации.ПравилаРегистрацииОбъектов; + ИнформацияОПравилахРегистрации = ЗагрузкаПравилРегистрации.ПолучитьИнформациюОПравилах(); + + Если ЗагрузкаПравилРегистрации.ФлагОшибки Тогда + ВызватьИсключение НСтр("ru = 'Ошибка при загрузке правил регистрации.'"); + КонецЕсли; + + // Удаляем временные файлы правил. + УдалитьВременныйФайл(ИмяВременногоФайла); + УдалитьВременныйФайл(ИмяВременногоФайлаКорреспондента); + УдалитьВременныйФайл(ИмяВременногоФайлаРегистрации); + + // Сделаем запись правил конвертации. + ЗаписьПравилКонвертации = РегистрыСведений.ПравилаДляОбменаДанными.СоздатьМенеджерЗаписи(); + ЗаписьПравилКонвертации.ИмяПланаОбмена = ИмяПланаОбмена; + ЗаписьПравилКонвертации.ВидПравил = Перечисления.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов; + ЗаписьПравилКонвертации.ИмяМакетаПравил = "ПравилаОбмена"; + ЗаписьПравилКонвертации.ИмяМакетаПравилКорреспондента = "ПравилаОбменаКорреспондента"; + ЗаписьПравилКонвертации.ИмяПланаОбменаИзПравил = ИмяПланаОбмена; + ЗаписьПравилКонвертации.ИмяФайлаПравил = ИмяФайла; + ЗаписьПравилКонвертации.ИнформацияОПравилах = ИнформацияОПравилахКонвертации; + ЗаписьПравилКонвертации.ИсточникПравил = Перечисления.ИсточникиПравилДляОбменаДанными.Файл; + ЗаписьПравилКонвертации.ПравилаXML = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных()); + ЗаписьПравилКонвертации.ПравилаXMLКорреспондента = Новый ХранилищеЗначения(ДвоичныеДанныеКорреспондента, Новый СжатиеДанных()); + ЗаписьПравилКонвертации.ПравилаЗачитанные = Новый ХранилищеЗначения(ПравилаЗачитанные); + ЗаписьПравилКонвертации.ПравилаЗачитанныеКорреспондента = Новый ХранилищеЗначения(ПравилаЗачитанныеКорреспондента); + ЗаписьПравилКонвертации.РежимОтладки = Ложь; + ЗаписьПравилКонвертации.ИспользоватьФильтрВыборочнойРегистрацииОбъектов = Истина; + ЗаписьПравилКонвертации.ПравилаЗагружены = Истина; + ЗаписьПравилКонвертации.Записать(); + + // Сделаем запись правил регистрации. + ЗаписьПравилРегистрации = РегистрыСведений.ПравилаДляОбменаДанными.СоздатьМенеджерЗаписи(); + ЗаписьПравилРегистрации.ИмяПланаОбмена = ИмяПланаОбмена; + ЗаписьПравилРегистрации.ВидПравил = Перечисления.ВидыПравилДляОбменаДанными.ПравилаРегистрацииОбъектов; + ЗаписьПравилРегистрации.ИмяМакетаПравил = "ПравилаРегистрации"; + ЗаписьПравилРегистрации.ИмяПланаОбменаИзПравил = ИмяПланаОбмена; + ЗаписьПравилРегистрации.ИмяФайлаПравил = ИмяФайла; + ЗаписьПравилРегистрации.ИнформацияОПравилах = ИнформацияОПравилахРегистрации; + ЗаписьПравилРегистрации.ИсточникПравил = Перечисления.ИсточникиПравилДляОбменаДанными.Файл; + ЗаписьПравилРегистрации.ПравилаXML = Новый ХранилищеЗначения(ДвоичныеДанныеРегистрации, Новый СжатиеДанных()); + ЗаписьПравилРегистрации.ПравилаЗачитанные = Новый ХранилищеЗначения(ПравилаРегистрацииЗачитанные); + ЗаписьПравилРегистрации.ПравилаЗагружены = Истина; + ЗаписьПравилРегистрации.Записать(); + +КонецПроцедуры + +// Удаляет поставляемые правила для плана обмена (очищает данные в регистре). +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена, для которого удаляются правила. +// +Процедура УдалитьПоставляемыеПравила(ИмяПланаОбмена) Экспорт + + Для Каждого ВидПравил Из Перечисления.ВидыПравилДляОбменаДанными Цикл + + МенеджерЗаписи = РегистрыСведений.ПравилаДляОбменаДанными.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ВидПравил = ВидПравил; + МенеджерЗаписи.ИмяПланаОбмена = ИмяПланаОбмена; + МенеджерЗаписи.Прочитать(); + МенеджерЗаписи.ИсточникПравил = Перечисления.ИсточникиПравилДляОбменаДанными.МакетКонфигурации; + ЕстьОшибки = Ложь; + РегистрыСведений.ПравилаДляОбменаДанными.ЗагрузитьПравила(ЕстьОшибки, МенеджерЗаписи); + Если ЕстьОшибки Тогда + ВызватьИсключение НСтр("ru = 'Ошибка при загрузке правил из конфигурации.'"); + Иначе + МенеджерЗаписи.Записать(); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Определяет, используются ли типовых правила конвертации для плана обмена. +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена, для которого загружаются правила. +// +// Возвращаемое значение: +// Булево - если Истина, то используются; Ложь - нет. +// +Функция ИспользуютсяТиповыеПравила(ИмяПланаОбмена) Экспорт + ТекстЗапроса = " + |ВЫБРАТЬ + | ПравилаДляОбменаДанными.ПравилаXML КАК ПравилаXML + |ИЗ + | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными + |ГДЕ + | ПравилаДляОбменаДанными.ИмяПланаОбмена = &ИмяПланаОбмена + | И ПравилаДляОбменаДанными.ВидПравил = ЗНАЧЕНИЕ(Перечисление.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов) + | И ПравилаДляОбменаДанными.ПравилаЗагружены + |"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("ИмяПланаОбмена", ИмяПланаОбмена); + + Результат = Запрос.Выполнить(); + + Если Результат.Пустой() Тогда + Возврат Ложь; + КонецЕсли; + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + + ДвоичныеДанныеПравил = Выборка.ПравилаXML.Получить(); + ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml"); + ДвоичныеДанныеПравил.Записать(ИмяВременногоФайла); + + ПравилаОбмена = Новый ЧтениеXML(); + ПравилаОбмена.ОткрытьФайл(ИмяВременногоФайла); + ПравилаТиповые = Ложь; + Пока ПравилаОбмена.Прочитать() Цикл + ИмяУзла = ПравилаОбмена.ЛокальноеИмя; + Если ИмяУзла = "ВерсияФормата" Тогда + Пока ПравилаОбмена.ПрочитатьАтрибут() Цикл + Если ПравилаОбмена.ЛокальноеИмя = "Типовые" Тогда + ПравилаТиповые = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + Прервать; + КонецЕсли; + КонецЦикла; + ПравилаОбмена.Закрыть(); + УдалитьФайлы(ИмяВременногоФайла); + + Возврат ПравилаТиповые; +КонецФункции + +#КонецОбласти + +#КонецЕсли + #Область ОбработчикиСобытий Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) @@ -39,8 +299,16 @@ // Процедура ЗагрузитьПравила(Отказ, Запись, АдресВременногоХранилища = "", ИмяФайлаПравил = "", ЭтоАрхив = Ложь) Экспорт - // Проверка заполнения обязательных полей записи. - ВыполнитьПроверкуЗаполненияПолей(Отказ, Запись); + // Проверка существования плана обмена. + СписокПлановОбмена = ОбменДаннымиПовтИсп.СписокПлановОбменаБСП(); + Если СписокПлановОбмена.НайтиПоЗначению(Запись.ИмяПланаОбмена) = Неопределено Тогда + НСтрока = НСтр("ru = 'План обмена %1 не используется для синхронизации данных, правила не обновлены.'"); + НСтрока = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтрока, Запись.ИмяПланаОбмена); + ОбменДаннымиСервер.СообщитьОбОшибке(НСтрока, Отказ); + Иначе + // Проверка заполнения обязательных полей записи. + ВыполнитьПроверкуЗаполненияПолей(Отказ, Запись); + КонецЕсли; Если Отказ Тогда Возврат; @@ -443,190 +711,6 @@ КонецПроцедуры -Процедура ЗагрузитьПоставляемыеПравила(ИмяПланаОбмена, ИмяФайлаПравил) Экспорт - - Файл = Новый Файл(ИмяФайлаПравил); - ИмяФайла = Файл.Имя; - - // Распаковываем архив - ИмяВременнойПапки = ПолучитьИмяВременногоФайла(""); - Если ОбменДаннымиСервер.РаспаковатьZipФайл(ИмяФайлаПравил, ИмяВременнойПапки) Тогда - - СписокРаспакованныхФайлов = НайтиФайлы(ИмяВременнойПапки, "*.*", Истина); - - // В архиве не было ни одного файла - отказываемся от загрузки. - Если СписокРаспакованныхФайлов.Количество() = 0 Тогда - ВызватьИсключение НСтр("ru = 'При распаковке архива не найден файл с правилами.'"); - КонецЕсли; - - // В архиве количество файлов не соответствует ожидаемому - отказываемся от загрузки. - Если СписокРаспакованныхФайлов.Количество() <> 3 Тогда - ВызватьИсключение НСтр("ru = 'Не верный формат комплекта правил. Ожидаемое количество файлов в архиве - три. Ожидаются файлы: - |ExchangeRules.xml - правила конвертации для текущей программы; - |CorrespondentExchangeRules.xml - правила конвертации для программы-корреспондента; - |RegistrationRules.xml - правила регистрации для текущей программы.'"); - КонецЕсли; - - // Закладываем полученный файл правил обратно в двоичные данные. - Для Каждого ПолученныйФайл Из СписокРаспакованныхФайлов Цикл - - Если ПолученныйФайл.Имя = "ExchangeRules.xml" Тогда - ДвоичныеДанные = Новый ДвоичныеДанные(ПолученныйФайл.ПолноеИмя); - ИначеЕсли ПолученныйФайл.Имя ="CorrespondentExchangeRules.xml" Тогда - ДвоичныеДанныеКорреспондента = Новый ДвоичныеДанные(ПолученныйФайл.ПолноеИмя); - ИначеЕсли ПолученныйФайл.Имя ="RegistrationRules.xml" Тогда - ДвоичныеДанныеРегистрации = Новый ДвоичныеДанные(ПолученныйФайл.ПолноеИмя); - Иначе - ВызватьИсключение НСтр("ru = 'Имена файлов в архиве не соответствуют ожидаемым. Ожидаются файлы: - |ExchangeRules.xml - правила конвертации для текущей программы; - |CorrespondentExchangeRules.xml - правила конвертации для программы-корреспондента; - |RegistrationRules.xml - правила регистрации для текущей программы.'"); - КонецЕсли; - - КонецЦикла; - - Иначе - // Если не удалось распаковать файл - отказываемся от загрузки. - ВызватьИсключение НСтр("ru = 'Не удалось распаковать архив с правилами.'"); - КонецЕсли; - - // Удаляем временный архив и временную папку, в которую был распакован архив. - УдалитьВременныйФайл(ИмяВременнойПапки); - - ИнформацияОПравилахКонвертации = "[ИнформацияОПравилахИсточника] - | - |[ИнформацияОПравилахКорреспондента]"; - - // Получаем имя временного файла конвертации в локальной ФС на сервере. - ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml"); - - // Получаем файл правил для зачитки. - ДвоичныеДанные.Записать(ИмяВременногоФайла); - - // Зачитываем правила конвертации. - КонвертацияОбъектовИнформационныхБаз = Обработки.КонвертацияОбъектовИнформационныхБаз.Создать(); - - // свойства обработки - КонвертацияОбъектовИнформационныхБаз.РежимОбмена = "Выгрузка"; - КонвертацияОбъектовИнформационныхБаз.ИмяПланаОбменаВРО = ИмяПланаОбмена; - КонвертацияОбъектовИнформационныхБаз.КлючСообщенияЖурналаРегистрации = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными(); - - ОбменДаннымиСервер.УстановитьНастройкиОтладкиВыгрузкиДляПравилОбмена(КонвертацияОбъектовИнформационныхБаз, ИмяПланаОбмена, Ложь); - - ПравилаЗачитанные = КонвертацияОбъектовИнформационныхБаз.ПолучитьСтруктуруПравилОбмена(ИмяВременногоФайла); - - ИнформацияОПравилахИсточника = КонвертацияОбъектовИнформационныхБаз.ПолучитьИнформациюОПравилах(Ложь); - - Если КонвертацияОбъектовИнформационныхБаз.ФлагОшибки() Тогда - Отказ = Истина; - КонецЕсли; - - // Получаем имя временного файла конвертации корреспондента в локальной ФС на сервере. - ИмяВременногоФайлаКорреспондента = ПолучитьИмяВременногоФайла("xml"); - // Получаем файл правил для зачитки. - ДвоичныеДанныеКорреспондента.Записать(ИмяВременногоФайлаКорреспондента); - - // Зачитываем правила конвертации. - КонвертацияОбъектовИнформационныхБаз = Обработки.КонвертацияОбъектовИнформационныхБаз.Создать(); - - // свойства обработки - КонвертацияОбъектовИнформационныхБаз.РежимОбмена = "Загрузка"; - КонвертацияОбъектовИнформационныхБаз.ИмяПланаОбменаВРО = ИмяПланаОбмена; - КонвертацияОбъектовИнформационныхБаз.КлючСообщенияЖурналаРегистрации = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными(); - - // методы обработки - ПравилаЗачитанныеКорреспондента = КонвертацияОбъектовИнформационныхБаз.ПолучитьСтруктуруПравилОбмена(ИмяВременногоФайлаКорреспондента); - - ИнформацияОПравилахКорреспондента = КонвертацияОбъектовИнформационныхБаз.ПолучитьИнформациюОПравилах(Истина); - - Если КонвертацияОбъектовИнформационныхБаз.ФлагОшибки() Тогда - Отказ = Истина; - КонецЕсли; - - ИнформацияОПравилахКонвертации = СтрЗаменить(ИнформацияОПравилахКонвертации, "[ИнформацияОПравилахИсточника]", ИнформацияОПравилахИсточника); - ИнформацияОПравилахКонвертации = СтрЗаменить(ИнформацияОПравилахКонвертации, "[ИнформацияОПравилахКорреспондента]", ИнформацияОПравилахКорреспондента); - - // Получаем имя временного файла регистрации в локальной ФС на сервере. - ИмяВременногоФайлаРегистрации = ПолучитьИмяВременногоФайла("xml"); - // Получаем файл правил для зачитки. - ДвоичныеДанныеРегистрации.Записать(ИмяВременногоФайлаРегистрации); - - // Зачитываем правила регистрации. - ЗагрузкаПравилРегистрации = Обработки.ЗагрузкаПравилРегистрацииОбъектов.Создать(); - - // свойства обработки - ЗагрузкаПравилРегистрации.ИмяПланаОбменаДляЗагрузки = ИмяПланаОбмена; - - // методы обработки - ЗагрузкаПравилРегистрации.ЗагрузитьПравила(ИмяВременногоФайлаРегистрации); - ПравилаРегистрацииЗачитанные = ЗагрузкаПравилРегистрации.ПравилаРегистрацииОбъектов; - ИнформацияОПравилахРегистрации = ЗагрузкаПравилРегистрации.ПолучитьИнформациюОПравилах(); - - Если ЗагрузкаПравилРегистрации.ФлагОшибки Тогда - ВызватьИсключение Нстр("ru = 'Ошибка при загрузке правил регистрации.'"); - КонецЕсли; - - // Удаляем временные файлы правил. - УдалитьВременныйФайл(ИмяВременногоФайла); - УдалитьВременныйФайл(ИмяВременногоФайлаКорреспондента); - УдалитьВременныйФайл(ИмяВременногоФайлаРегистрации); - - // Сделаем запись правил конвертации. - ЗаписьПравилКонвертации = РегистрыСведений.ПравилаДляОбменаДанными.СоздатьМенеджерЗаписи(); - ЗаписьПравилКонвертации.ИмяПланаОбмена = ИмяПланаОбмена; - ЗаписьПравилКонвертации.ВидПравил = Перечисления.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов; - ЗаписьПравилКонвертации.ИмяМакетаПравил = "ПравилаОбмена"; - ЗаписьПравилКонвертации.ИмяМакетаПравилКорреспондента = "ПравилаОбменаКорреспондента"; - ЗаписьПравилКонвертации.ИмяПланаОбменаИзПравил = ИмяПланаОбмена; - ЗаписьПравилКонвертации.ИмяФайлаПравил = ИмяФайла; - ЗаписьПравилКонвертации.ИнформацияОПравилах = ИнформацияОПравилахКонвертации; - ЗаписьПравилКонвертации.ИсточникПравил = Перечисления.ИсточникиПравилДляОбменаДанными.Файл; - ЗаписьПравилКонвертации.ПравилаXML = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных()); - ЗаписьПравилКонвертации.ПравилаXMLКорреспондента = Новый ХранилищеЗначения(ДвоичныеДанныеКорреспондента, Новый СжатиеДанных()); - ЗаписьПравилКонвертации.ПравилаЗачитанные = Новый ХранилищеЗначения(ПравилаЗачитанные); - ЗаписьПравилКонвертации.ПравилаЗачитанныеКорреспондента = Новый ХранилищеЗначения(ПравилаЗачитанныеКорреспондента); - ЗаписьПравилКонвертации.РежимОтладки = Ложь; - ЗаписьПравилКонвертации.ИспользоватьФильтрВыборочнойРегистрацииОбъектов = Истина; - ЗаписьПравилКонвертации.ПравилаЗагружены = Истина; - ЗаписьПравилКонвертации.Записать(); - - // Сделаем запись правил регистрации. - ЗаписьПравилРегистрации = РегистрыСведений.ПравилаДляОбменаДанными.СоздатьМенеджерЗаписи(); - ЗаписьПравилРегистрации.ИмяПланаОбмена = ИмяПланаОбмена; - ЗаписьПравилРегистрации.ВидПравил = Перечисления.ВидыПравилДляОбменаДанными.ПравилаРегистрацииОбъектов; - ЗаписьПравилРегистрации.ИмяМакетаПравил = "ПравилаРегистрации"; - ЗаписьПравилРегистрации.ИмяПланаОбменаИзПравил = ИмяПланаОбмена; - ЗаписьПравилРегистрации.ИмяФайлаПравил = ИмяФайла; - ЗаписьПравилРегистрации.ИнформацияОПравилах = ИнформацияОПравилахРегистрации; - ЗаписьПравилРегистрации.ИсточникПравил = Перечисления.ИсточникиПравилДляОбменаДанными.Файл; - ЗаписьПравилРегистрации.ПравилаXML = Новый ХранилищеЗначения(ДвоичныеДанныеРегистрации, Новый СжатиеДанных()); - ЗаписьПравилРегистрации.ПравилаЗачитанные = Новый ХранилищеЗначения(ПравилаРегистрацииЗачитанные); - ЗаписьПравилРегистрации.ПравилаЗагружены = Истина; - ЗаписьПравилРегистрации.Записать(); - -КонецПроцедуры - -Процедура УдалитьПоставляемыеПравила(ИмяПланаОбмена) Экспорт - - Для Каждого ВидПравил Из Перечисления.ВидыПравилДляОбменаДанными Цикл - - МенеджерЗаписи = РегистрыСведений.ПравилаДляОбменаДанными.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ВидПравил = ВидПравил; - МенеджерЗаписи.ИмяПланаОбмена = ИмяПланаОбмена; - МенеджерЗаписи.Прочитать(); - МенеджерЗаписи.ИсточникПравил = Перечисления.ИсточникиПравилДляОбменаДанными.МакетКонфигурации; - ЕстьОшибки = Ложь; - РегистрыСведений.ПравилаДляОбменаДанными.ЗагрузитьПравила(ЕстьОшибки, МенеджерЗаписи); - Если ЕстьОшибки Тогда - ВызватьИсключение Нстр("ru = 'Ошибка при загрузке правил из конфигурации.'"); - Иначе - МенеджерЗаписи.Записать(); - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - // Получает зачитанные правила конвертации объектов из ИБ для плана обмена. // // Параметры: @@ -711,112 +795,6 @@ КонецФункции -Функция ИспользуютсяТиповыеПравила(ИмяПланаОбмена) Экспорт - ТекстЗапроса = " - |ВЫБРАТЬ - | ПравилаДляОбменаДанными.ПравилаXML КАК ПравилаXML - |ИЗ - | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными - |ГДЕ - | ПравилаДляОбменаДанными.ИмяПланаОбмена = &ИмяПланаОбмена - | И ПравилаДляОбменаДанными.ВидПравил = ЗНАЧЕНИЕ(Перечисление.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов) - | И ПравилаДляОбменаДанными.ПравилаЗагружены - |"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("ИмяПланаОбмена", ИмяПланаОбмена); - - Результат = Запрос.Выполнить(); - - Если Результат.Пустой() Тогда - Возврат Ложь; - КонецЕсли; - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - - ДвоичныеДанныеПравил = Выборка.ПравилаXML.Получить(); - ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml"); - ДвоичныеДанныеПравил.Записать(ИмяВременногоФайла); - - ПравилаОбмена = Новый ЧтениеXML(); - ПравилаОбмена.ОткрытьФайл(ИмяВременногоФайла); - ПравилаТиповые = Ложь; - Пока ПравилаОбмена.Прочитать() Цикл - ИмяУзла = ПравилаОбмена.ЛокальноеИмя; - Если ИмяУзла = "ВерсияФормата" Тогда - Пока ПравилаОбмена.ПрочитатьАтрибут() Цикл - Если ПравилаОбмена.ЛокальноеИмя = "Типовые" Тогда - ПравилаТиповые = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - Прервать; - КонецЕсли; - КонецЦикла; - ПравилаОбмена.Закрыть(); - УдалитьФайлы(ИмяВременногоФайла); - - Возврат ПравилаТиповые; -КонецФункции - -Процедура ЗагрузитьИнформациюОПравилах(Отказ, АдресВременногоХранилища, СтрокаИнформацииОПравилах) Экспорт - - Перем ВидПравил; - - СтрокаИнформацииОПравилах = ""; - - ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВременногоХранилища); - - // Получаем имя временного файла в локальной ФС на сервере. - ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml"); - - // Получаем файл правил для зачитки. - ДвоичныеДанные.Записать(ИмяВременногоФайла); - - ОпределитьВидПравилДляОбменаДанными(ВидПравил, ИмяВременногоФайла, Отказ); - - Если Отказ Тогда - Возврат; - КонецЕсли; - - Если ВидПравил = Перечисления.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов Тогда - - // Зачитываем правила конвертации. - КонвертацияОбъектовИнформационныхБаз = Обработки.КонвертацияОбъектовИнформационныхБаз.Создать(); - - КонвертацияОбъектовИнформационныхБаз.ЗагрузитьПравилаОбмена(ИмяВременногоФайла, "XMLФайл",, Истина); - - Если КонвертацияОбъектовИнформационныхБаз.ФлагОшибки() Тогда - Отказ = Истина; - КонецЕсли; - - Если Не Отказ Тогда - СтрокаИнформацииОПравилах = КонвертацияОбъектовИнформационныхБаз.ПолучитьИнформациюОПравилах(); - КонецЕсли; - - Иначе // ПравилаРегистрацииОбъектов - - // Зачитываем правила регистрации. - ЗагрузкаПравилРегистрации = Обработки.ЗагрузкаПравилРегистрацииОбъектов.Создать(); - - ЗагрузкаПравилРегистрации.ЗагрузитьПравила(ИмяВременногоФайла, Истина); - - Если ЗагрузкаПравилРегистрации.ФлагОшибки Тогда - Отказ = Истина; - КонецЕсли; - - Если Не Отказ Тогда - СтрокаИнформацииОПравилах = ЗагрузкаПравилРегистрации.ПолучитьИнформациюОПравилах(); - КонецЕсли; - - КонецЕсли; - - // Удаляем временный файл правил. - УдалитьВременныйФайл(ИмяВременногоФайла); - -КонецПроцедуры - Функция ПолучитьДвоичныеДанныеИзМакетаКонфигурации(Отказ, ИмяПланаОбмена, ИмяМакета) // Получаем имя временного файла в локальной ФС на сервере. @@ -873,63 +851,6 @@ КонецПроцедуры -Процедура ОпределитьВидПравилДляОбменаДанными(ВидПравил, ИмяФайла, Отказ) - - // открываем файл для чтения - Попытка - Правила = Новый ЧтениеXML(); - Правила.ОткрытьФайл(ИмяФайла); - Правила.Прочитать(); - Исключение - Правила = Неопределено; - - НСтрока = НСтр("ru = 'Не удалось определить вид правил из-за ошибки в разбора XML-файла [ИмяФайла]. - |Возможно выбран не тот файл, либо XML-файл имеет некорректную структуру. Выберите корректный файл.'"); - НСтрока = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(НСтрока, Новый Структура("ИмяФайла", ИмяФайла)); - ОбменДаннымиСервер.СообщитьОбОшибке(НСтрока, Отказ); - Возврат; - КонецПопытки; - - Если Правила.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда - - Если Правила.ЛокальноеИмя = "ПравилаОбмена" Тогда - - ВидПравил = Перечисления.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов; - - ИначеЕсли Правила.ЛокальноеИмя = "ПравилаРегистрации" Тогда - - ВидПравил = Перечисления.ВидыПравилДляОбменаДанными.ПравилаРегистрацииОбъектов; - - Иначе - - НСтрока = НСтр("ru = 'Не удалось определить вид правил из-за ошибки в формате правил XML-файла [ИмяФайла]. - |Возможно выбран не тот файл, либо XML-файл имеет некорректную структуру. Выберите корректный файл.'"); - НСтрока = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(НСтрока, Новый Структура("ИмяФайла", ИмяФайла)); - ОбменДаннымиСервер.СообщитьОбОшибке(НСтрока, Отказ); - - КонецЕсли; - - Иначе - - НСтрока = НСтр("ru = 'Не удалось определить вид правил из-за ошибки в формате правил XML-файла [ИмяФайла]. - |Возможно выбран не тот файл, либо XML-файл имеет некорректную структуру. Выберите корректный файл.'"); - НСтрока = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(НСтрока, Новый Структура("ИмяФайла", ИмяФайла)); - ОбменДаннымиСервер.СообщитьОбОшибке(НСтрока, Отказ); - - КонецЕсли; - - Правила.Закрыть(); - Правила = Неопределено; - -КонецПроцедуры - -// Процедура добавляет запись в регистр по переданным значениям структуры. -Процедура ДобавитьЗапись(СтруктураЗаписи) Экспорт - - ОбменДаннымиСервер.ДобавитьЗаписьВРегистрСведений(СтруктураЗаписи, "ПравилаДляОбменаДанными"); - -КонецПроцедуры - Функция ИнформацияОПравилахИзФайла(ИмяФайлаПравил) ПравилаОбмена = Новый ЧтениеXML(); @@ -992,12 +913,12 @@ Если РезультатСравнения < 0 Тогда - ТекстОшибки = Нстр("ru = 'Синхронизация данных может работать некорректно, так как загружаемые правила предназначены для предыдущей версии программы ""%1"" (%2). Рекомендуется использовать правила из конфигурации или загрузить комплект правил, предназначенный для текущей версии программы (%3).'"); + ТекстОшибки = НСтр("ru = 'Синхронизация данных может работать некорректно, так как загружаемые правила предназначены для предыдущей версии программы ""%1"" (%2). Рекомендуется использовать правила из конфигурации или загрузить комплект правил, предназначенный для текущей версии программы (%3).'"); ВидОшибки = "УстаревшаяВерсияКонфигурации"; Иначе - ТекстОшибки = Нстр("ru = 'Синхронизация данных может работать некорректно, так как загружаемые правила предназначены для более новой версии программы ""%1"" (%2). Рекомендуется обновить версию программы или использовать комплект правил, предназначенный для текущей версии программы (%3).'"); + ТекстОшибки = НСтр("ru = 'Синхронизация данных может работать некорректно, так как загружаемые правила предназначены для более новой версии программы ""%1"" (%2). Рекомендуется обновить версию программы или использовать комплект правил, предназначенный для текущей версии программы (%3).'"); ВидОшибки = "УстаревшиеПравила"; КонецЕсли; @@ -1213,4 +1134,4 @@ #КонецОбласти -#КонецЕсли +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ManagerModule.bsl b/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ManagerModule.bsl index 70e0d86fc..3ccf02bcc 100644 --- a/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПредметыПапкиВзаимодействий/ManagerModule.bsl @@ -23,8 +23,8 @@ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий | ПО (ПредметыПапкиВзаимодействий.Взаимодействие = Встреча.Ссылка) |ГДЕ - | (Встреча.Удалить_Рассмотрено <> ПредметыПапкиВзаимодействий.Рассмотрено - | ИЛИ Встреча.Удалить_РассмотретьПосле <> ПредметыПапкиВзаимодействий.РассмотретьПосле) + | НЕ (НЕ Встреча.Удалить_Рассмотрено <> ПредметыПапкиВзаимодействий.Рассмотрено + | И НЕ Встреча.Удалить_РассмотретьПосле <> ПредметыПапкиВзаимодействий.РассмотретьПосле) | |ОБЪЕДИНИТЬ ВСЕ | @@ -37,8 +37,8 @@ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий | ПО (ПредметыПапкиВзаимодействий.Взаимодействие = ЗапланированноеВзаимодействие.Ссылка) |ГДЕ - | (ЗапланированноеВзаимодействие.Удалить_Рассмотрено <> ПредметыПапкиВзаимодействий.Рассмотрено - | ИЛИ ЗапланированноеВзаимодействие.Удалить_РассмотретьПосле <> ПредметыПапкиВзаимодействий.РассмотретьПосле) + | НЕ (НЕ ЗапланированноеВзаимодействие.Удалить_Рассмотрено <> ПредметыПапкиВзаимодействий.Рассмотрено + | И НЕ ЗапланированноеВзаимодействие.Удалить_РассмотретьПосле <> ПредметыПапкиВзаимодействий.РассмотретьПосле) | |ОБЪЕДИНИТЬ ВСЕ | @@ -51,8 +51,8 @@ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий | ПО (ПредметыПапкиВзаимодействий.Взаимодействие = ТелефонныйЗвонок.Ссылка) |ГДЕ - | (ТелефонныйЗвонок.Удалить_Рассмотрено <> ПредметыПапкиВзаимодействий.Рассмотрено - | ИЛИ ТелефонныйЗвонок.Удалить_РассмотретьПосле <> ПредметыПапкиВзаимодействий.РассмотретьПосле) + | НЕ (НЕ ТелефонныйЗвонок.Удалить_Рассмотрено <> ПредметыПапкиВзаимодействий.Рассмотрено + | И НЕ ТелефонныйЗвонок.Удалить_РассмотретьПосле <> ПредметыПапкиВзаимодействий.РассмотретьПосле) | |ОБЪЕДИНИТЬ ВСЕ | @@ -65,8 +65,8 @@ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий | ПО (ПредметыПапкиВзаимодействий.Взаимодействие = ЭлектронноеПисьмоВходящее.Ссылка) |ГДЕ - | (ЭлектронноеПисьмоВходящее.Удалить_Рассмотрено <> ПредметыПапкиВзаимодействий.Рассмотрено - | ИЛИ ЭлектронноеПисьмоВходящее.Удалить_РассмотретьПосле <> ПредметыПапкиВзаимодействий.РассмотретьПосле) + | НЕ (НЕ ЭлектронноеПисьмоВходящее.Удалить_Рассмотрено <> ПредметыПапкиВзаимодействий.Рассмотрено + | И НЕ ЭлектронноеПисьмоВходящее.Удалить_РассмотретьПосле <> ПредметыПапкиВзаимодействий.РассмотретьПосле) | |ОБЪЕДИНИТЬ ВСЕ | @@ -79,8 +79,8 @@ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий | ПО (ПредметыПапкиВзаимодействий.Взаимодействие = ЭлектронноеПисьмоИсходящее.Ссылка) |ГДЕ - | (ЭлектронноеПисьмоИсходящее.Удалить_Рассмотрено <> ПредметыПапкиВзаимодействий.Рассмотрено - | ИЛИ ЭлектронноеПисьмоИсходящее.Удалить_РассмотретьПосле <> ПредметыПапкиВзаимодействий.РассмотретьПосле) + | НЕ (НЕ ЭлектронноеПисьмоИсходящее.Удалить_Рассмотрено <> ПредметыПапкиВзаимодействий.Рассмотрено + | И НЕ ЭлектронноеПисьмоИсходящее.Удалить_РассмотретьПосле <> ПредметыПапкиВзаимодействий.РассмотретьПосле) | |ОБЪЕДИНИТЬ ВСЕ | @@ -93,8 +93,8 @@ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий | ПО (ПредметыПапкиВзаимодействий.Взаимодействие = СообщениеSMS.Ссылка) |ГДЕ - | (СообщениеSMS.Удалить_Рассмотрено <> ПредметыПапкиВзаимодействий.Рассмотрено - | ИЛИ СообщениеSMS.Удалить_РассмотретьПосле <> ПредметыПапкиВзаимодействий.РассмотретьПосле)"; + | НЕ (НЕ СообщениеSMS.Удалить_Рассмотрено <> ПредметыПапкиВзаимодействий.Рассмотрено + | И НЕ СообщениеSMS.Удалить_РассмотретьПосле <> ПредметыПапкиВзаимодействий.РассмотретьПосле)"; Выборка = Запрос.Выполнить().Выбрать(); diff --git a/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/ManagerModule.bsl b/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/ManagerModule.bsl index b859ee099..26f6112a5 100644 --- a/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/ManagerModule.bsl @@ -11,16 +11,16 @@ Функция ЗаписьЕстьВРегистре(СтруктураЗаписи) Экспорт - НаборЗаписей = РегистрыСведений.ПубличныеИдентификаторыСинхронизируемыхОбъектов.СоздатьНаборЗаписей(); - - // Устанавливаем отбор по измерениям регистра. - Для Каждого Элемент Из СтруктураЗаписи Цикл - НаборЗаписей.Отбор[Элемент.Ключ].Установить(Элемент.Значение); - КонецЦикла; - - НаборЗаписей.Прочитать(); - - Возврат НаборЗаписей.Количество() > 0; + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 + |1 + |ИЗ РегистрСведений.ПубличныеИдентификаторыСинхронизируемыхОбъектов + |ГДЕ УзелИнформационнойБазы = &УзелИнформационнойБазы + | И Ссылка = &Ссылка"; + Запрос.УстановитьПараметр("УзелИнформационнойБазы", СтруктураЗаписи.УзелИнформационнойБазы); + Запрос.УстановитьПараметр("Ссылка", СтруктураЗаписи.Ссылка); + РезультатЗапроса = Запрос.Выполнить(); + Возврат Не РезультатЗапроса.Пустой(); КонецФункции @@ -59,9 +59,10 @@ Выборка.Следующий(); Возврат СокрЛП(Выборка.Идентификатор); ИначеЕсли Выборка.Количество() > 1 Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для ссылки <%1> и узла <%2> назначено несколько уникальных идентификаторов.'"), - Строка(СсылкаНаОбъект), Строка(УзелИнформационнойБазы)); + СтруктураЗаписи = Новый Структура(); + СтруктураЗаписи.Вставить("УзелИнформационнойБазы", УзелИнформационнойБазы); + СтруктураЗаписи.Вставить("Ссылка", СсылкаНаОбъект); + УдалитьЗапись(СтруктураЗаписи, Истина); КонецЕсли; // Получение УИД текущей ссылки. Возврат СокрЛП(СсылкаНаОбъект.УникальныйИдентификатор()); diff --git a/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/ПубличныеИдентификаторыСинхронизируемыхОбъектов.mdo b/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/ПубличныеИдентификаторыСинхронизируемыхОбъектов.mdo index fad54c9f6..d601d1ce6 100644 --- a/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/ПубличныеИдентификаторыСинхронизируемыхОбъектов.mdo +++ b/SSL/src/InformationRegisters/ПубличныеИдентификаторыСинхронизируемыхОбъектов/ПубличныеИдентификаторыСинхронизируемыхОбъектов.mdo @@ -75,7 +75,9 @@ Ссылка - AnyRef + DocumentRef + ChartOfCharacteristicTypesRef + CatalogRef diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form index e3eb77259..5d0c7d00d 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Form.form @@ -1400,6 +1400,7 @@ Vertical auto + false
                                @@ -2465,6 +2466,7 @@ Vertical auto + false @@ -3602,6 +3604,7 @@ Vertical auto + false @@ -4634,6 +4637,9 @@ true + + Items.НепринятыеПоДате.CurrentData.НомерЭтойВерсии + НепринятыеПоДатеПричинаЗапретаПодробноExtendedTooltip 498 @@ -4697,6 +4703,7 @@ Vertical auto + false true @@ -5465,7 +5472,7 @@ 20 ru - Показать отличия между версиями в этой и в дргой программе + Показать отличия между версиями в этой и в другой программе true @@ -5566,7 +5573,7 @@ 6 ru - Снять с конфликта признак его рассмотренния + Снять с конфликта признак его рассмотрения true diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl index 4287e9caf..ba3d81c6e 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Forms/Форма/Module.bsl @@ -26,64 +26,14 @@ ОбменДаннымиСервер.ПриОпределенииИспользованияДатЗапретаИзменения(ИспользуетсяДатыЗапретаИзменения); ИспользуетсяВерсионирование = ОбменДаннымиПовтИсп.ИспользуетсяВерсионирование(, Истина); - - ТекстЗапросаКоллизии = "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ВерсииДругойПрограммы.ДатаВерсии КАК Дата, - | ВерсииДругойПрограммы.Объект КАК Ссылка, - | ТИПЗНАЧЕНИЯ(ВерсииДругойПрограммы.Объект) КАК ТипСтрокой, - | ВерсииЭтойПрограммы.НомерВерсии КАК НомерЭтойВерсии, - | ВерсииДругойПрограммы.НомерВерсии КАК НомерДругойВерсии, - | ВерсииДругойПрограммы.АвторВерсии КАК АвторДругойВерсии, - | ВЫБОР - | КОГДА ВерсииДругойПрограммы.ТипВерсииОбъекта = ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.ПринятыеДанныеПоКоллизии) - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ДругаяВерсияПринята, - | ВерсииДругойПрограммы.ВерсияПроигнорирована КАК ВерсияПроигнорирована - |ИЗ - | РегистрСведений.ВерсииОбъектов КАК ВерсииДругойПрограммы - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВерсииОбъектов КАК ВерсииЭтойПрограммы - | ПО ВерсииДругойПрограммы.Объект = ВерсииЭтойПрограммы.Объект - | И (ВерсииДругойПрограммы.НомерВерсии = ВерсииЭтойПрограммы.НомерВерсии + 1) - |ГДЕ - | НЕ(ВерсииДругойПрограммы.ТипВерсииОбъекта <> ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.ПринятыеДанныеПоКоллизии) - | И ВерсииДругойПрограммы.ТипВерсииОбъекта <> ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НеПринятыеДанныеПоКоллизии))"; - - ТекстЗапросаНепринятыеПоДате = "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | НепринятаяВерсия.ДатаВерсии КАК Дата, - | НепринятаяВерсия.Объект КАК Ссылка, - | НепринятаяВерсия.Комментарий КАК ПричинаЗапрета, - | ВЫБОР - | КОГДА НепринятаяВерсия.ТипВерсииОбъекта = ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектСуществуетВБазе) - | ТОГДА ЛОЖЬ - | ИНАЧЕ ИСТИНА - | КОНЕЦ КАК НовыйОбъект, - | ЕСТЬNULL(НепринятаяВерсия.НомерВерсии, 0) КАК НомерДругойВерсии, - | НепринятаяВерсия.АвторВерсии КАК АвторДругойВерсии, - | ЕСТЬNULL(ТекущаяВерсия.НомерВерсии, 0) КАК НомерЭтойВерсии, - | ТИПЗНАЧЕНИЯ(НепринятаяВерсия.Объект) КАК ТипСтрокой, - | НепринятаяВерсия.ВерсияПроигнорирована - |ИЗ - | РегистрСведений.ВерсииОбъектов КАК НепринятаяВерсия - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВерсииОбъектов КАК ТекущаяВерсия - | ПО НепринятаяВерсия.Объект = ТекущаяВерсия.Объект - | И (НепринятаяВерсия.НомерВерсии = ТекущаяВерсия.НомерВерсии + 1) - |ГДЕ - | НЕ(НепринятаяВерсия.ТипВерсииОбъекта <> ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектСуществуетВБазе) - | И НепринятаяВерсия.ТипВерсииОбъекта <> ЗНАЧЕНИЕ(Перечисление.ТипыВерсийОбъекта.НепринятыйПоДатеЗапретаОбъектНеСуществуетВБазе))"; - Если ИспользуетсяВерсионирование Тогда - Коллизии.ТекстЗапроса = ТекстЗапросаКоллизии; - Коллизии.ПроизвольныйЗапрос = Истина; - Коллизии.ОсновнаяТаблица = "РегистрСведений.ВерсииОбъектов"; - Коллизии.ДинамическоеСчитываниеДанных = Истина; - КонецЕсли; - Если ИспользуетсяВерсионирование И ИспользуетсяДатыЗапретаИзменения Тогда - НепринятыеПоДате.ТекстЗапроса = ТекстЗапросаНепринятыеПоДате; - НепринятыеПоДате.ПроизвольныйЗапрос = Истина; - НепринятыеПоДате.ОсновнаяТаблица = "РегистрСведений.ВерсииОбъектов"; - НепринятыеПоДате.ДинамическоеСчитываниеДанных = Истина; + МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов"); + МодульВерсионированиеОбъектов.ИнициализацияДинамическогоСпискаПроблемныхВерсий(Коллизии, "Коллизии"); + + Если ИспользуетсяДатыЗапретаИзменения Тогда + МодульВерсионированиеОбъектов.ИнициализацияДинамическогоСпискаПроблемныхВерсий(НепринятыеПоДате, "НепринятыеПоДате"); + КонецЕсли; КонецЕсли; Элементы.СтраницаКоллизии.Видимость = ИспользуетсяВерсионирование; @@ -94,7 +44,7 @@ Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ИспользуетсяВерсионирование Тогда - Элементы.КоллизииАвторДругойВерсии.Заголовок = Нстр("ru = 'Версия получена из приложения'"); + Элементы.КоллизииАвторДругойВерсии.Заголовок = НСтр("ru = 'Версия получена из приложения'"); КонецЕсли; @@ -255,13 +205,13 @@ Если Элемент.ТекущиеДанные.ДругаяВерсияПринята Тогда - ПричинаКонфликта = Нстр("ru = 'Конфликт был разрешен автоматически в пользу программы ""%1"". - |Версия в этой программе была замененена на версию из другой программы.'"); + ПричинаКонфликта = НСтр("ru = 'Конфликт был разрешен автоматически в пользу программы ""%1"". + |Версия в этой программе была заменена на версию из другой программы.'"); ПричинаКонфликта = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПричинаКонфликта, Элемент.ТекущиеДанные.АвторДругойВерсии); Иначе - ПричинаКонфликта =Нстр("ru = 'Конфликт был разрешен автоматически в пользу этой программы. + ПричинаКонфликта =НСтр("ru = 'Конфликт был разрешен автоматически в пользу этой программы. |Версия в этой программе была сохранена, версия из другой программы была отклонена.'"); КонецЕсли; @@ -506,11 +456,11 @@ Если Элементы.Коллизии.ТекущиеДанные.ДругаяВерсияПринята Тогда - ТекстВопроса = Нстр("ru = 'Заменить версию, полученную из другой программы, на версию из этой программы?'"); + ТекстВопроса = НСтр("ru = 'Заменить версию, полученную из другой программы, на версию из этой программы?'"); Иначе - ТекстВопроса = Нстр("ru = 'Заменить версию этой программы на версию, полученную из другой программы?'"); + ТекстВопроса = НСтр("ru = 'Заменить версию этой программы на версию, полученную из другой программы?'"); КонецЕсли; @@ -686,7 +636,7 @@ КонецЕсли; Если КонтекстноеОткрытие И ОтсутствуетОбменПоПравилам Тогда - Заголовок = Нстр("ru = 'Конфликты при синхронизации данных'"); + Заголовок = НСтр("ru = 'Конфликты при синхронизации данных'"); Элементы.СтрокаПоиска.Видимость = Ложь; Элементы.РезультатыОбменаДанными.ТекущаяСтраница = Элементы.РезультатыОбменаДанными.ПодчиненныеЭлементы.СтраницаКоллизии; Элементы.РезультатыОбменаДанными.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; diff --git a/SSL/src/InformationRegisters/РезультатыОбменаДанными/Help/ru.html b/SSL/src/InformationRegisters/РезультатыОбменаДанными/Help/ru.html index 36c865ebb..95b2c075c 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/РезультатыОбменаДанными/РезультатыОбменаДанными.mdo b/SSL/src/InformationRegisters/РезультатыОбменаДанными/РезультатыОбменаДанными.mdo index a3fa0a843..9409b50c8 100644 --- a/SSL/src/InformationRegisters/РезультатыОбменаДанными/РезультатыОбменаДанными.mdo +++ b/SSL/src/InformationRegisters/РезультатыОбменаДанными/РезультатыОбменаДанными.mdo @@ -206,7 +206,11 @@ Проблемный объект - AnyRef + DocumentRef + ChartOfCalculationTypesRef + ChartOfCharacteristicTypesRef + ChartOfAccountsRef + CatalogRef ru diff --git a/SSL/src/InformationRegisters/СклоненияПредставленийОбъектов/СклоненияПредставленийОбъектов.mdo b/SSL/src/InformationRegisters/СклоненияПредставленийОбъектов/СклоненияПредставленийОбъектов.mdo new file mode 100644 index 000000000..36a1e3316 --- /dev/null +++ b/SSL/src/InformationRegisters/СклоненияПредставленийОбъектов/СклоненияПредставленийОбъектов.mdo @@ -0,0 +1,186 @@ + + + + + + + + + + + + СклоненияПредставленийОбъектов + + ru + Склонения представлений объектов + + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ИменительныйПадеж + + ru + Именительный падеж + + + String + + + + + Use + Use + + + + РодительныйПадеж + + ru + Родительный падеж + + + String + + + + + Use + Use + + + + ДательныйПадеж + + ru + Дательный падеж + + + String + + + + + Use + Use + + + + ВинительныйПадеж + + ru + Винительный падеж + + + String + + + + + Use + Use + + + + ТворительныйПадеж + + ru + Творительный падеж + + + String + + + + + Use + Use + + + + ПредложныйПадеж + + ru + Предложный падеж + + + String + + + + + Use + Use + + + + ХешПредставления + + ru + Хеш представления + + + String + + 40 + + + + + true + Use + Use + + true + + + Объект + + ru + Объект + + + DefinedType.ОбъектСклонения + + + + Use + Use + true + + true + true + + diff --git a/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/ManagerModule.bsl b/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/ManagerModule.bsl index bbeb99e01..817ce8fd9 100644 --- a/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/ManagerModule.bsl @@ -5,6 +5,29 @@ // Процедура добавляет запись в регистр по переданным значениям структуры. Процедура ДобавитьЗапись(СтруктураЗаписи, Загрузка = Ложь) Экспорт + ПроверяемыеРеквизиты = Новый Массив; + ПроверяемыеРеквизиты.Добавить("УзелИнформационнойБазы"); + ПроверяемыеРеквизиты.Добавить("УникальныйИдентификаторПриемника"); + + Для Каждого ПроверяемыйРеквизит Из ПроверяемыеРеквизиты Цикл + Если СтруктураЗаписи.Свойство(ПроверяемыйРеквизит) + И Не ЗначениеЗаполнено(СтруктураЗаписи[ПроверяемыйРеквизит]) Тогда + + ОписаниеСобытия = НСтр("ru = 'Добавление записи регистра сведений ""Соответствия объектов информационных баз""'", + ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()); + Комментарий = НСтр("ru = 'Не заполнен реквизит %1. Создание записи регистра невозможно.'"); + Комментарий = СтрШаблон(Комментарий, ПроверяемыйРеквизит); + ЗаписьЖурналаРегистрации(ОписаниеСобытия, + УровеньЖурналаРегистрации.Ошибка, + Метаданные.РегистрыСведений.СоответствияОбъектовИнформационныхБаз, + , + Комментарий); + + Возврат; + + КонецЕсли; + КонецЦикла; + ОбменДаннымиСервер.ДобавитьЗаписьВРегистрСведений(СтруктураЗаписи, "СоответствияОбъектовИнформационныхБаз", Загрузка); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/СоответствияОбъектовИнформационныхБаз.mdo b/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/СоответствияОбъектовИнформационныхБаз.mdo index d109981f3..a62ff5aa4 100644 --- a/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/СоответствияОбъектовИнформационныхБаз.mdo +++ b/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/СоответствияОбъектовИнформационныхБаз.mdo @@ -124,7 +124,11 @@ Уникальный идентификатор источника - AnyRef + DocumentRef + ChartOfCalculationTypesRef + ChartOfCharacteristicTypesRef + ChartOfAccountsRef + CatalogRef ru diff --git a/SSL/src/InformationRegisters/СостоянияОбменовДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияОбменовДанными/ManagerModule.bsl index c7a4cdf14..588eeb217 100644 --- a/SSL/src/InformationRegisters/СостоянияОбменовДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияОбменовДанными/ManagerModule.bsl @@ -1,5 +1,20 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ПрограммныйИнтерфейс + +// Удаляет набор записей в регистре по переданным значениям структуры. +// +// Параметры: +// СтруктураЗаписи - Структура - структура, по значениям которой необходимо удалить набор записей. +// +Процедура УдалитьЗапись(СтруктураЗаписи) Экспорт + + ОбменДаннымиСервер.УдалитьНаборЗаписейВРегистреСведений(СтруктураЗаписи, "СостоянияОбменовДанными"); + +КонецПроцедуры + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Процедура добавляет запись в регистр по переданным значениям структуры. @@ -15,12 +30,6 @@ КонецПроцедуры -Процедура УдалитьЗапись(СтруктураЗаписи) Экспорт - - ОбменДаннымиСервер.УдалитьНаборЗаписейВРегистреСведений(СтруктураЗаписи, "СостоянияОбменовДанными"); - -КонецПроцедуры - #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СостоянияОбменовДанными/СостоянияОбменовДанными.mdo b/SSL/src/InformationRegisters/СостоянияОбменовДанными/СостоянияОбменовДанными.mdo index af1cbcadf..181042cde 100644 --- a/SSL/src/InformationRegisters/СостоянияОбменовДанными/СостоянияОбменовДанными.mdo +++ b/SSL/src/InformationRegisters/СостоянияОбменовДанными/СостоянияОбменовДанными.mdo @@ -133,6 +133,7 @@ true true + true ДействиеПриОбмене @@ -152,5 +153,6 @@ Use Use + true diff --git a/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/ManagerModule.bsl index 66a478fc8..c81da76e4 100644 --- a/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/ManagerModule.bsl @@ -1,5 +1,21 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ПрограммныйИнтерфейс + +// Удаляет набор записей в регистре по переданным значениям структуры. +// +// Параметры: +// СтруктураЗаписи - Структура - структура, по значениям которой необходимо удалить набор записей. +// +Процедура УдалитьЗапись(СтруктураЗаписи) Экспорт + + ОбменДаннымиСервер.УдалитьНаборЗаписейВРегистреСведений(СтруктураЗаписи, "СостоянияУспешныхОбменовДанными"); + +КонецПроцедуры + +#КонецОбласти + + #Область СлужебныеПроцедурыИФункции // Процедура добавляет запись в регистр по переданным значениям структуры. @@ -15,12 +31,6 @@ КонецПроцедуры -Процедура УдалитьЗапись(СтруктураЗаписи) Экспорт - - ОбменДаннымиСервер.УдалитьНаборЗаписейВРегистреСведений(СтруктураЗаписи, "СостоянияУспешныхОбменовДанными"); - -КонецПроцедуры - #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/СостоянияУспешныхОбменовДанными.mdo b/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/СостоянияУспешныхОбменовДанными.mdo index d12f73cb6..1e6c0fcd2 100644 --- a/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/СостоянияУспешныхОбменовДанными.mdo +++ b/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/СостоянияУспешныхОбменовДанными.mdo @@ -93,6 +93,7 @@ true true + true ДействиеПриОбмене @@ -112,5 +113,6 @@ Use Use + true diff --git a/SSL/src/InformationRegisters/СтатистикаКонфигурации/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/СтатистикаКонфигурации/Forms/ФормаСписка/Form.form index 9238539d5..a7eff0050 100644 --- a/SSL/src/InformationRegisters/СтатистикаКонфигурации/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/СтатистикаКонфигурации/Forms/ФормаСписка/Form.form @@ -521,6 +521,10 @@ Left true + + OnCreateAtServer + ПриСозданииНаСервере + DontBlock true true @@ -552,15 +556,15 @@ КОГДА 0 ТОГДА РегистрСведенийСтатистикаКонфигурации.Значение КОГДА 1 ТОГДА ВЫБОР РегистрСведенийСтатистикаКонфигурации.Значение - КОГДА 0 ТОГДА Ложь + КОГДА 0 ТОГДА ЛОЖЬ КОГДА 1 ТОГДА ИСТИНА КОНЕЦ КОНЕЦ КАК ЗначениеПредставление, ОперацииСтатистики.Наименование, РегистрСведенийСтатистикаКонфигурации.ВидСтатистики КАК ВидСтатистики, ВЫБОР РегистрСведенийСтатистикаКонфигурации.ВидСтатистики - КОГДА 0 ТОГДА "Метаданные" - КОГДА 1 ТОГДА "Функциональная опция" + КОГДА 0 ТОГДА ВЫРАЗИТЬ(&Метаданные КАК СТРОКА(50)) + КОГДА 1 ТОГДА ВЫРАЗИТЬ(&ФункциональнаяОпция КАК СТРОКА(50)) КОНЕЦ КАК ВидСтатистикиПредставление, РегистрСведенийСтатистикаКонфигурации.ИдентификаторОбластиСтатистики, ОбластиСтатистики.Наименование КАК НаименованиеОбласти diff --git a/SSL/src/InformationRegisters/СтатистикаКонфигурации/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/СтатистикаКонфигурации/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..fc22df4b9 --- /dev/null +++ b/SSL/src/InformationRegisters/СтатистикаКонфигурации/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,10 @@ + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Список.Параметры.УстановитьЗначениеПараметра("Метаданные", НСтр("ru='Метаданные'")); + Список.Параметры.УстановитьЗначениеПараметра("ФункциональнаяОпция", НСтр("ru='Функциональная опция'")); +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/InformationRegisters/СтатистикаКонфигурации/ManagerModule.bsl b/SSL/src/InformationRegisters/СтатистикаКонфигурации/ManagerModule.bsl index ed7785d07..848c007ed 100644 --- a/SSL/src/InformationRegisters/СтатистикаКонфигурации/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СтатистикаКонфигурации/ManagerModule.bsl @@ -98,24 +98,85 @@ Функция НовыйСтатистикаКонфигурации(СоответствиеИменМетаданных = Неопределено) СоответствиеИменМетаданныхРезультат = Новый Соответствие; - МассивИменМетаданных = Новый Массив(); - + РазделениеПоОбластямДанныхВключено = ЦентрМониторингаСлужебный.РазделениеПоОбластямДанныхВключено(); Если СоответствиеИменМетаданных <> Неопределено Тогда Для Каждого ИмяМетаданных Из СоответствиеИменМетаданных Цикл СоответствиеИменМетаданныхРезультат.Вставить(ИмяМетаданных.Ключ, ИмяМетаданных.Значение); - МассивИменМетаданных.Добавить(ИмяМетаданных.Ключ); КонецЦикла; КонецЕсли; - Таблицы = ПолучитьСтруктуруХраненияБазыДанных(МассивИменМетаданных); + Таблицы = ПолучитьСтруктуруХраненияМетаданных(); СоответствиеИменМетаданныхПоОбластям = РазделитьКонфигурациюПоОбластям(Таблицы, СоответствиеИменМетаданных, СоответствиеИменМетаданныхРезультат, РазделениеПоОбластямДанныхВключено); Возврат СоответствиеИменМетаданныхПоОбластям; КонецФункции +Функция ПолучитьСтруктуруХраненияМетаданных() + + ТаблицаЗначений = Новый ТаблицаЗначений; + ТаблицаЗначений.Колонки.Добавить("ИмяТаблицы", Новый ОписаниеТипов("Строка")); + ТаблицаЗначений.Колонки.Добавить("Назначение", Новый ОписаниеТипов("Строка")); + ТаблицаЗначений.Колонки.Добавить("ОбъектМетаданных"); + + ОбъектыМетаданных = Новый Соответствие; + ОбъектыМетаданных.Вставить("Справочники", "Справочник"); + ОбъектыМетаданных.Вставить("Документы", "Документ"); + ОбъектыМетаданных.Вставить("ЖурналыДокументов", "ЖурналДокументов"); + ОбъектыМетаданных.Вставить("ПланыСчетов", "ПланСчетов"); + ОбъектыМетаданных.Вставить("ПланыВидовРасчета", "ПланВидовРасчета"); + ОбъектыМетаданных.Вставить("РегистрыСведений", "РегистрСведений"); + ОбъектыМетаданных.Вставить("РегистрыНакопления", "РегистрНакопления"); + ОбъектыМетаданных.Вставить("РегистрыБухгалтерии", "РегистрБухгалтерии"); + ОбъектыМетаданных.Вставить("РегистрыРасчета", "РегистрРасчета"); + ОбъектыМетаданных.Вставить("БизнесПроцессы", "БизнесПроцесс"); + ОбъектыМетаданных.Вставить("Задачи", "Задача"); + + ЗаполнитьСтруктуруОбъектаМетаданных(ТаблицаЗначений, ОбъектыМетаданных); + + Возврат ТаблицаЗначений; + +КонецФункции + +Процедура ЗаполнитьСтруктуруОбъектаМетаданных(ТаблицаЗначений, ОбъектыМетаданных) + + НетТабличныхЧастей = Новый Соответствие; + НетТабличныхЧастей.Вставить("ЖурналыДокументов", Истина); + НетТабличныхЧастей.Вставить("РегистрыСведений", Истина); + НетТабличныхЧастей.Вставить("РегистрыНакопления", Истина); + НетТабличныхЧастей.Вставить("РегистрыБухгалтерии", Истина); + НетТабличныхЧастей.Вставить("РегистрыРасчета", Истина); + + Для Каждого ТекОбъект Из ОбъектыМетаданных Цикл + Для Каждого ТекОбъектМетаданных Из Метаданные[ТекОбъект.Ключ] Цикл + ПолноеИмяТаблицы = Новый Массив; + ПолноеИмяТаблицы.Добавить(ТекОбъект.Значение); + ПолноеИмяТаблицы.Добавить(ТекОбъектМетаданных.Имя); + + НовСтрока = ТаблицаЗначений.Добавить(); + НовСтрока.ИмяТаблицы = СтрСоединить(ПолноеИмяТаблицы, "."); + НовСтрока.Назначение = "Основная"; + НовСтрока.ОбъектМетаданных = ТекОбъектМетаданных; + + Если НетТабличныхЧастей[ТекОбъект.Ключ] = Неопределено Тогда + Для Каждого ТекТабличнаяЧасть Из ТекОбъектМетаданных.ТабличныеЧасти Цикл + ПолноеИмяТаблицы.Добавить(ТекТабличнаяЧасть.Имя); + + НовСтрока = ТаблицаЗначений.Добавить(); + НовСтрока.ИмяТаблицы = СтрСоединить(ПолноеИмяТаблицы, "."); + НовСтрока.Назначение = "ТабличнаяЧасть"; + НовСтрока.ОбъектМетаданных = ТекТабличнаяЧасть; + + ПолноеИмяТаблицы.Удалить(ПолноеИмяТаблицы.ВГраница()); + КонецЦикла; + КонецЕсли; + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + Функция РазделитьКонфигурациюПоОбластям(Таблицы, СоответствиеИменМетаданных, СоответствиеИменМетаданныхРезультат, РазделениеПоОбластямДанныхВключено) Если РазделениеПоОбластямДанныхВключено Тогда СоответствиеИменМетаданныхПоОбластям = Новый Структура("НеРазделенная, Разделенная", Новый Соответствие, Новый Соответствие); @@ -136,52 +197,53 @@ КонецЕсли; КонецЕсли; - Основная = ?(ТекСтрока.Назначение = "Основная", Истина, Ложь); - ТабличнаяЧасть = ?(ТекСтрока.Назначение = "ТабличнаяЧасть", Истина, Ложь); + Если СоответствиеИменМетаданныхРезультат[ТекСтрока.ИмяТаблицы] = Неопределено Тогда + ТекстЗапроса = ЗапросПоУмолчанию(ТекСтрока.ИмяТаблицы); + Иначе + ТекстЗапроса = СоответствиеИменМетаданныхРезультат[ТекСтрока.ИмяТаблицы]["Запрос"]; + КонецЕсли; - Если (Основная ИЛИ ТабличнаяЧасть) И ЗначениеЗаполнено(ТекСтрока.ИмяТаблицы) Тогда - Если Основная Тогда - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ТекСтрока.Метаданные); - Если РазделениеПоОбластямДанныхВключено Тогда - ЭлементСоставаОбщегоРеквизита = ОбластьДанныхОсновныеДанныеСостав.Найти(ОбъектМетаданных); - КонецЕсли; - КонецЕсли; - - Если СоответствиеИменМетаданныхРезультат[ТекСтрока.ИмяТаблицы] = Неопределено Тогда - ТекстЗапроса = ЗапросПоУмолчанию(ТекСтрока.ИмяТаблицы); - Иначе - ТекстЗапроса = СоответствиеИменМетаданныхРезультат[ТекСтрока.ИмяТаблицы]["Запрос"]; - КонецЕсли; - + Если ТекСтрока.Назначение = "Основная" Тогда Если РазделениеПоОбластямДанныхВключено Тогда - Если ЭлементСоставаОбщегоРеквизита <> Неопределено Тогда - Если ЭлементСоставаОбщегоРеквизита.Использование = Метаданные.СвойстваОбъектов.ИспользованиеОбщегоРеквизита.НеИспользовать Тогда - ЕстьРазделение = Ложь; - Иначе - ЕстьРазделение = Истина; - КонецЕсли; - Иначе - МетаданныеМассив = СтрРазделить(ТекСтрока.Метаданные, "."); - Если МетаданныеМассив[0] = "ЖурналДокументов" Тогда - ЕстьРазделение = Истина; - ИначеЕсли МетаданныеМассив[0] = "Перечисление" Тогда - ЕстьРазделение = Ложь; - ИначеЕсли МетаданныеМассив[0] = "Последовательность" Тогда - ЕстьРазделение = Истина; - Иначе - ЕстьРазделение = Истина; - КонецЕсли; - КонецЕсли; - Иначе - ЕстьРазделение = Ложь; - КонецЕсли; - - Если ЕстьРазделение Тогда - СоответствиеИменМетаданныхПоОбластям.Разделенная.Вставить(ТекСтрока.ИмяТаблицы, Новый Структура("Запрос, ОперацииСтатистики, ВидСтатистики", ТекстЗапроса, Неопределено, 0)); - Иначе - СоответствиеИменМетаданныхПоОбластям.НеРазделенная.Вставить(ТекСтрока.ИмяТаблицы, Новый Структура("Запрос, ОперацииСтатистики, ВидСтатистики", ТекстЗапроса, Неопределено, 0)); + ЭлементСоставаОбщегоРеквизита = ОбластьДанныхОсновныеДанныеСостав.Найти(ТекСтрока.ОбъектМетаданных); КонецЕсли; КонецЕсли; + + Если СоответствиеИменМетаданныхРезультат[ТекСтрока.ИмяТаблицы] = Неопределено Тогда + ТекстЗапроса = ЗапросПоУмолчанию(ТекСтрока.ИмяТаблицы); + Иначе + ТекстЗапроса = СоответствиеИменМетаданныхРезультат[ТекСтрока.ИмяТаблицы]["Запрос"]; + КонецЕсли; + + Если РазделениеПоОбластямДанныхВключено Тогда + Если ЭлементСоставаОбщегоРеквизита <> Неопределено Тогда + Если ЭлементСоставаОбщегоРеквизита.Использование = Метаданные.СвойстваОбъектов.ИспользованиеОбщегоРеквизита.НеИспользовать Тогда + ЕстьРазделение = Ложь; + Иначе + ЕстьРазделение = Истина; + КонецЕсли; + Иначе + МетаданныеМассив = СтрРазделить(ТекСтрока.Метаданные, "."); + Если МетаданныеМассив[0] = "ЖурналДокументов" Тогда + ЕстьРазделение = Истина; + ИначеЕсли МетаданныеМассив[0] = "Перечисление" Тогда + ЕстьРазделение = Ложь; + ИначеЕсли МетаданныеМассив[0] = "Последовательность" Тогда + ЕстьРазделение = Истина; + Иначе + ЕстьРазделение = Истина; + КонецЕсли; + КонецЕсли; + Иначе + ЕстьРазделение = Ложь; + КонецЕсли; + + Если ЕстьРазделение Тогда + СоответствиеИменМетаданныхПоОбластям.Разделенная.Вставить(ТекСтрока.ИмяТаблицы, Новый Структура("Запрос, ОперацииСтатистики, ВидСтатистики", ТекстЗапроса, Неопределено, 0)); + Иначе + СоответствиеИменМетаданныхПоОбластям.НеРазделенная.Вставить(ТекСтрока.ИмяТаблицы, Новый Структура("Запрос, ОперацииСтатистики, ВидСтатистики", ТекстЗапроса, Неопределено, 0)); + КонецЕсли; + КонецЦикла; Возврат СоответствиеИменМетаданныхПоОбластям; @@ -256,48 +318,40 @@ КонецПроцедуры Процедура Записать(СтатистикаКонфигурации, Область) Экспорт - НачатьТранзакцию(); - Попытка - НаборЗаписей = РегистрыСведений.СтатистикаКонфигурации.СоздатьНаборЗаписей(); - ЕстьЗапись = Ложь; + + НаборЗаписей = РегистрыСведений.СтатистикаКонфигурации.СоздатьНаборЗаписей(); + ЕстьЗапись = Ложь; + + ОперацииСсылки = Новый Соответствие; + Для Каждого ТекОбъект Из СтатистикаКонфигурации Цикл + Если ТекОбъект.Значение["ВидСтатистики"] = 0 Тогда + РезультатЗапроса = ПолучитьРезультат(ТекОбъект.Значение["Запрос"]); + ОперацииСтатистики = ПолучитьРезультатОперацииСтатистики(ТекОбъект.Ключ, РезультатЗапроса); + ИначеЕсли ТекОбъект.Значение["ВидСтатистики"] = 1 Тогда + Значение = ?(Константы[ТекОбъект.Значение["Запрос"].Имя].Получить(), 1, 0); + ОперацииСтатистики = Новый Массив; + ОперацияСтатистики = Новый Структура("ОперацияСтатистикиНаименование, КоличествоОпераций", ТекОбъект.Ключ, Значение); + ОперацииСтатистики.Добавить(ОперацияСтатистики); + КонецЕсли; - ОперацииСсылки = Новый Соответствие; - Для Каждого ТекОбъект Из СтатистикаКонфигурации Цикл - Если ТекОбъект.Значение["ВидСтатистики"] = 0 Тогда - РезультатЗапроса = ПолучитьРезультат(ТекОбъект.Значение["Запрос"]); - ОперацииСтатистики = ПолучитьРезультатОперацииСтатистики(ТекОбъект.Ключ, РезультатЗапроса); - ИначеЕсли ТекОбъект.Значение["ВидСтатистики"] = 1 Тогда - Значение = ?(Константы[ТекОбъект.Значение["Запрос"].Имя].Получить(), 1, 0); - ОперацииСтатистики = Новый Массив; - ОперацияСтатистики = Новый Структура("ОперацияСтатистикиНаименование, КоличествоОпераций", ТекОбъект.Ключ, Значение); - ОперацииСтатистики.Добавить(ОперацияСтатистики); + Для Каждого ОперацияСтатистики Из ОперацииСтатистики Цикл + Если ОперацииСсылки[ОперацияСтатистики.ОперацияСтатистикиНаименование] = Неопределено Тогда + ОперацииСсылки.Вставить(ОперацияСтатистики.ОперацияСтатистикиНаименование, РегистрыСведений.ОперацииСтатистики.ПолучитьСсылку(ОперацияСтатистики.ОперацияСтатистикиНаименование)); КонецЕсли; - Для Каждого ОперацияСтатистики Из ОперацииСтатистики Цикл - Если ОперацииСсылки[ОперацияСтатистики.ОперацияСтатистикиНаименование] = Неопределено Тогда - ОперацииСсылки.Вставить(ОперацияСтатистики.ОперацияСтатистикиНаименование, РегистрыСведений.ОперацииСтатистики.ПолучитьСсылку(ОперацияСтатистики.ОперацияСтатистикиНаименование)); - КонецЕсли; - - ЕстьЗапись = Истина; - НовЗапись = НаборЗаписей.Добавить(); - НовЗапись.ИдентификаторОбластиСтатистики = Область; - НовЗапись.ОперацияСтатистики = ОперацииСсылки[ОперацияСтатистики.ОперацияСтатистикиНаименование]; - НовЗапись.ВидСтатистики = ТекОбъект.Значение.ВидСтатистики; - НовЗапись.Значение = Число(СтрЗаменить(ОперацияСтатистики.КоличествоОпераций,",",".")); - КонецЦикла; + ЕстьЗапись = Истина; + НовЗапись = НаборЗаписей.Добавить(); + НовЗапись.ИдентификаторОбластиСтатистики = Область; + НовЗапись.ОперацияСтатистики = ОперацииСсылки[ОперацияСтатистики.ОперацияСтатистикиНаименование]; + НовЗапись.ВидСтатистики = ТекОбъект.Значение.ВидСтатистики; + НовЗапись.Значение = Число(СтрЗаменить(ОперацияСтатистики.КоличествоОпераций,",",".")); КонецЦикла; - - Если ЕстьЗапись Тогда - НаборЗаписей.Записать(Ложь); - КонецЕсли; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - - Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru = 'ОбработкаОперацииСтатистики'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,,Ошибка); - КонецПопытки; + КонецЦикла; + + Если ЕстьЗапись Тогда + НаборЗаписей.Записать(Ложь); + КонецЕсли; + КонецПроцедуры Процедура ЗаписатьРазделенную(СтатистикаКонфигурации) @@ -311,7 +365,7 @@ ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, Выборка.ОбластьДанных); Исключение Инфо = ИнформацияОбОшибке(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'СтатистикаКонфигурации'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), + ЗаписьЖурналаРегистрации(НСтр("ru='СтатистикаКонфигурации'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка, ,, ПодробноеПредставлениеОшибки(Инфо)); diff --git a/SSL/src/InformationRegisters/СтатусыСинхронизацииФайловСОблачнымСервисом/СтатусыСинхронизацииФайловСОблачнымСервисом.mdo b/SSL/src/InformationRegisters/СтатусыСинхронизацииФайловСОблачнымСервисом/СтатусыСинхронизацииФайловСОблачнымСервисом.mdo new file mode 100644 index 000000000..87855c3d0 --- /dev/null +++ b/SSL/src/InformationRegisters/СтатусыСинхронизацииФайловСОблачнымСервисом/СтатусыСинхронизацииФайловСОблачнымСервисом.mdo @@ -0,0 +1,188 @@ + + + + + + + + + + + + СтатусыСинхронизацииФайловСОблачнымСервисом + + ru + Статусы синхронизации файлов с облачным сервисом + + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + Href + + ru + Href + + + String + + + + + Use + Use + + + + Etag + + ru + Etag + + + String + + + + + Use + Use + + + + УникальныйИдентификатор1С + + ru + Уникальный идентификатор 1С + + + UUID + + + + Use + + + + ЭтоФайл + + ru + Это файл + + + Boolean + + + + Use + Use + + + + ЭтоВладелецФайла + + ru + Это владелец файла + + + Boolean + + + + Use + Use + + + + ВладелецФайла + + ru + Владелец файла + + + BusinessProcessRef + DocumentRef + TaskRef + CatalogRef + + + + Use + Use + + + + Файл + + ru + Файл + + + String + BusinessProcessRef + DocumentRef + TaskRef + CatalogRef + + 50 + + + + + true + Use + Use + true + + true + true + + + УчетнаяЗапись + + ru + Учетная запись + + + CatalogRef.УчетныеЗаписиСинхронизацииФайлов + + + + Use + Use + + true + + diff --git a/SSL/src/InformationRegisters/УдалитьНаборыЗначенийДоступа/УдалитьНаборыЗначенийДоступа.mdo b/SSL/src/InformationRegisters/УдалитьНаборыЗначенийДоступа/УдалитьНаборыЗначенийДоступа.mdo index f0791fa9c..b83a4b212 100644 --- a/SSL/src/InformationRegisters/УдалитьНаборыЗначенийДоступа/УдалитьНаборыЗначенийДоступа.mdo +++ b/SSL/src/InformationRegisters/УдалитьНаборыЗначенийДоступа/УдалитьНаборыЗначенийДоступа.mdo @@ -136,7 +136,6 @@ 0 - true true @@ -160,7 +159,6 @@ ChartOfCharacteristicTypes.УдалитьВидыДоступа.EmptyRef - true true @@ -182,7 +180,6 @@ Use true - true true diff --git a/SSL/src/InformationRegisters/УдалитьНастройкиВерсионированияОбъектов/Help/ru.html b/SSL/src/InformationRegisters/УдалитьНастройкиВерсионированияОбъектов/Help/ru.html index 07f8631d5..0ec07791f 100644 --- a/SSL/src/InformationRegisters/УдалитьНастройкиВерсионированияОбъектов/Help/ru.html +++ b/SSL/src/InformationRegisters/УдалитьНастройкиВерсионированияОбъектов/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

                                @@ -7,10 +7,10 @@
                                • Объект - список объектов программы в виде дерева с группировкой по типам объектов.
                                • Вариант версионирования - выбранный вариант версионирования.

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

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

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

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

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

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

                                Применение версионирования

                                • В начале внедрения программы, когда объемы информации еще небольшие, когда исполнители делают много ошибок в работе (например, вводят лишнюю информацию или нечаянно удаляют нужную), версионирование может помочь привести списки и документы в порядок, избавиться от допущенных ошибок, помочь исполнителям понять свои ошибочные действия и не допускать их в дальнейшей работе.
                                • Благодаря версионированию объектов можно вернуться к какой-либо предыдущей версии документа или элемента справочника, которая была наиболее полной или более правильной в отличие от последнего состояния. diff --git a/SSL/src/InformationRegisters/ФайлыВРабочемКаталоге/Help/ru.html b/SSL/src/InformationRegisters/ФайлыВРабочемКаталоге/Help/ru.html index 0e074c2f0..a53bc15a5 100644 --- a/SSL/src/InformationRegisters/ФайлыВРабочемКаталоге/Help/ru.html +++ b/SSL/src/InformationRegisters/ФайлыВРабочемКаталоге/Help/ru.html @@ -1 +1 @@ -В списке перечислены файлы, занятые для редактирования. \ No newline at end of file +В списке перечислены файлы, занятые для редактирования. \ No newline at end of file diff --git a/SSL/src/Reports/АнализВерсийОбъектов/Help/ru.html b/SSL/src/Reports/АнализВерсийОбъектов/Help/ru.html index 95a234edd..9cba30cba 100644 --- a/SSL/src/Reports/АнализВерсийОбъектов/Help/ru.html +++ b/SSL/src/Reports/АнализВерсийОбъектов/Help/ru.html @@ -1,11 +1,14 @@ - +

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

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

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

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

                                  • Диаграмма Объем хранимых версий по типам объектов;
                                  • Диаграмма Количество хранимых версий по типам объектов; -
                                  • Числовые данные по количеству и объему хранимых версий объектов.

                                  См. также:

                                  +
                                • Таблица Количество и объем хранимых версий объектов - числовые данные по количеству и объему хранимых версий объектов. Состоит из колонок: +
                                  • Тип объекта - объект программы; +
                                  • Количество - количество версий объекта; +
                                  • Размер данных (Мб) - объем, занимаемый версиями объекта.

                                См. также:

                                • diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Help/ru.html b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Help/ru.html index 4214f492e..e6f88c7bc 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Help/ru.html +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

                                  diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Module.bsl b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Module.bsl index 1dbba6c3f..ee7735dca 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Module.bsl +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Module.bsl @@ -3,14 +3,40 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; - Отчет = Параметры.Отчет; - ИдентификаторРегламентногоЗадания = Параметры.ИдентификаторРегламентногоЗадания; - Заголовок = Параметры.Заголовок; + РасшифровкаИзОтчета = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "РасшифровкаИзОтчета"); + Если РасшифровкаИзОтчета <> Неопределено Тогда + Отчет = Отчеты.АнализЖурналаРегистрации.РасшифровкаРегламентногоЗадания(РасшифровкаИзОтчета).Отчет; + + ИмяРегламентногоЗадания = РасшифровкаИзОтчета.Получить(1); + НаименованиеСобытия = РасшифровкаИзОтчета.Получить(2); + Заголовок = НаименованиеСобытия; + Если ИмяРегламентногоЗадания <> "" Тогда + НазваниеСобытия = СтрЗаменить(ИмяРегламентногоЗадания, "РегламентноеЗадание.", ""); + + УстановитьПривилегированныйРежим(Истина); + ОтборПоРегламентнымЗаданиям = Новый Структура; + МетаданныеРегламентногоЗадания = Метаданные.РегламентныеЗадания.Найти(НазваниеСобытия); + Если МетаданныеРегламентногоЗадания <> Неопределено Тогда + ОтборПоРегламентнымЗаданиям.Вставить("Метаданные", МетаданныеРегламентногоЗадания); + Если НаименованиеСобытия <> Неопределено Тогда + ОтборПоРегламентнымЗаданиям.Вставить("Наименование", НаименованиеСобытия); + КонецЕсли; + РегЗадание = РегламентныеЗадания.ПолучитьРегламентныеЗадания(ОтборПоРегламентнымЗаданиям); + Если ЗначениеЗаполнено(РегЗадание) Тогда + ИдентификаторРегламентногоЗадания = РегЗадание[0].УникальныйИдентификатор; + КонецЕсли; + КонецЕсли; + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + Иначе + Отчет = Параметры.Отчет; + ИдентификаторРегламентногоЗадания = Параметры.ИдентификаторРегламентногоЗадания; + Заголовок = Параметры.Заголовок; + КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РегламентныеЗадания") Тогда ПодсистемаРегламентныеЗаданияСуществует = Истина; diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаНастроек/Form.form b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаНастроек/Form.form deleted file mode 100644 index 91ddf2fc8..000000000 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаНастроек/Form.form +++ /dev/null @@ -1,76 +0,0 @@ - - - - КомпоновщикНастроекПользовательскиеНастройки - 1 - true - true - - true - - - <key>ru</key> - <value>Пользовательские настройки</value> - - false - - КомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка - 2 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - Bottom - true - - ФормаКоманднаяПанель - -1 - Right - true - - DontBlock - true - true - true - Vertical - true - true - true - auto - true - - Отчет - 1 - - ReportObject.АнализЖурналаРегистрации - - - true - - - true - -
                                  true
                                  -
                                  - - - - - - Settings - КомпоновщикНастроекПользовательскиеНастройки - -
                                  diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаОтчета/Form.form b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаОтчета/Form.form deleted file mode 100644 index 667f12a8e..000000000 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаОтчета/Form.form +++ /dev/null @@ -1,629 +0,0 @@ - - - - ГруппаВарианта - 1 - - НаименованиеТекущегоВарианта - 2 - true - true - - true - - - НаименованиеТекущегоВарианта - - Left - - НаименованиеТекущегоВариантаExtendedTooltip - 19 - Label - true - true - - Left - - - - НаименованиеТекущегоВариантаКонтекстноеМеню - 3 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ЗагрузитьВариант - 4 - true - true - - true - - - ЗагрузитьВариантExtendedTooltip - 20 - Label - true - true - - Left - - - UsualButton - Form.StandardCommand.LoadVariant - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Группа варианта</value> - - - ГруппаВариантаExtendedTooltip - 18 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ОсновнаяКоманднаяПанель - 5 - - СформироватьОтчет - 15 - true - true - - true - - - СформироватьОтчетExtendedTooltip - 22 - Label - true - true - - Left - - - Form.Command.СформироватьОтчет - PictureAndText - true - true - true - UserCmds - - StdPicture.GenerateReport - - Auto - - - Справка - 17 - true - true - - true - - - СправкаExtendedTooltip - 23 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - - ГруппаНастроек - 16 - true - true - - true - - - <key>ru</key> - <value>Группа настроек</value> - - - ru - Группа настроек - - - ГруппаНастроекExtendedTooltip - 24 - Label - true - true - - Left - - - - Form - - - true - true - - true - - - <key>ru</key> - <value>Основная командная панель</value> - - - ОсновнаяКоманднаяПанельExtendedTooltip - 21 - 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 - - - - КомпоновщикНастроекПользовательскиеНастройкиExtendedTooltip - 25 - 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 - - РезультатExtendedTooltip - 26 - Label - true - true - - Left - - - - РезультатКонтекстноеМеню - 10 - true - - SpreadsheetDocumentField - Enter - true - Left - true - - - AdditionalDetailProcessing - РезультатОбработкаДополнительнойРасшифровки - - - DetailProcessing - РезультатОбработкаРасшифровки - - 100 - true - 10 - true - true - true - Special - ScrollAlways - ScrollAlways - Always - Auto - true - true - true - - - None - false - - ФормаКоманднаяПанель - -1 - Left - - - OnCreateAtServer - ПриСозданииНаСервере - - - OnClose - ПриЗакрытии - - Generate - DontBlock - true - true - true - Vertical - true - true - true - 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 - - - - СформироватьОтчет - - - DontUse - Auto - - - - - - - Результат - ДанныеРасшифровки - НаименованиеТекущегоВарианта - -
                                  diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаОтчета/Module.bsl deleted file mode 100644 index f66b66327..000000000 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаОтчета/Module.bsl +++ /dev/null @@ -1,282 +0,0 @@ - -#Область ОбработчикиСобытийФормы - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. - Возврат; - КонецЕсли; - - МассивРегламентныхЗаданий = СписокВсехРегламентныхЗаданий(); - СкрытьРегламентныеЗадания = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.ДоступныеПараметры.НайтиПараметр(Новый ПараметрКомпоновкиДанных("СкрытьРегламентныеЗадания")); - СкрытьРегламентныеЗадания.ДоступныеЗначения.Очистить(); - Для Каждого Элемент Из МассивРегламентныхЗаданий Цикл - СкрытьРегламентныеЗадания.ДоступныеЗначения.Добавить(Элемент.УИД, Элемент.Наименование); - КонецЦикла; - СкрытьРегламентныеЗадания.ДоступныеЗначения.СортироватьПоПредставлению(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПриЗакрытии() - - Если ИдентификаторЗадания <> Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") Тогда - ПриЗакрытииНаСервере(); - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиСобытийЭлементовШапкиФормы - -&НаКлиенте -Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) - - Если ТипЗнч(Элемент.ТекущаяОбласть) = Тип("РисунокТабличногоДокумента") Тогда - - Если ТипЗнч(Элемент.ТекущаяОбласть.Объект) = Тип("Диаграмма") Тогда - СтандартнаяОбработка = Ложь; - Возврат; - КонецЕсли; - - КонецЕсли; - - Если Не НаименованиеТекущегоВарианта = НСтр("ru = 'Продолжительность работы регламентных заданий'") Тогда - СтандартнаяОбработка = Истина; - Возврат; - КонецЕсли; - - СтандартнаяОбработка = Ложь; - ТипРасшифровки = Расшифровка.Получить(0); - Если ТипРасшифровки = "РасшифровкаРегламентногоЗадания" Тогда - - ВариантРасшифровки = Новый СписокЗначений; - ВариантРасшифровки.Добавить("СведенияОРегламентномЗадании", НСтр("ru = 'Сведения о регламентном задании'")); - ВариантРасшифровки.Добавить("ОткрытьЖурналРегистрации", НСтр("ru = 'Перейти к журналу регистрации'")); - - ОписаниеОповещения = Новый ОписаниеОповещения("РезультатОбработкаРасшифровкиЗавершение", ЭтотОбъект, Расшифровка); - ПоказатьВыборИзМеню(ОписаниеОповещения, ВариантРасшифровки); - - Иначе - СведенияОРегламентномЗадании(Расшифровка); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура РезультатОбработкаДополнительнойРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) - - Если ТипЗнч(Элемент.ТекущаяОбласть) = Тип("РисунокТабличногоДокумента") Тогда - Если ТипЗнч(Элемент.ТекущаяОбласть.Объект) = Тип("Диаграмма") Тогда - СтандартнаяОбработка = Ложь; - Возврат; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - -#Область ОбработчикиКомандФормы - -&НаКлиенте -Процедура СформироватьОтчет(Команда) - ОчиститьСообщения(); - ПараметрыОтчета = ПараметрыОтчета(); - РезультатВыполнения = СформироватьОтчетСервер(ПараметрыОтчета); - ПараметрыОбработчикаОжидания = Новый Структура(); - - Если Не РезультатВыполнения.ЗаданиеВыполнено Тогда - ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); - ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина); - ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.Результат, "ФормированиеОтчета"); - КонецЕсли; -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -&НаКлиенте -Процедура РезультатОбработкаРасшифровкиЗавершение(ВыбранныйВариант, Расшифровка) Экспорт - - Если ВыбранныйВариант = Неопределено Тогда - Возврат; - КонецЕсли; - - Действие = ВыбранныйВариант.Значение; - Если Действие = "СведенияОРегламентномЗадании" Тогда - - СписокТочек = Результат.Области.ДиаграммаГанта.Объект.Точки; - Для Каждого ТочкаДиаграммыГанта Из СписокТочек Цикл - - РасшифровкаТочки = ТочкаДиаграммыГанта.Расшифровка; - Если ТочкаДиаграммыГанта.Значение = НСтр("ru = 'Фоновые задания'") Тогда - Продолжить; - КонецЕсли; - - Если РасшифровкаТочки.Найти(Расшифровка.Получить(2)) <> Неопределено Тогда - СведенияОРегламентномЗадании(РасшифровкаТочки); - Прервать; - КонецЕсли; - - КонецЦикла; - - ИначеЕсли Действие = "ОткрытьЖурналРегистрации" Тогда - - СеансРегламентногоЗадания.Очистить(); - СеансРегламентногоЗадания.Добавить(Расшифровка.Получить(1)); - ДатаНачала = Расшифровка.Получить(3); - ДатаОкончания = Расшифровка.Получить(4); - ОтборЖурналаРегистрации = Новый Структура("Сеанс, ДатаНачала, ДатаОкончания", - СеансРегламентногоЗадания, ДатаНачала, ДатаОкончания); - ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", ОтборЖурналаРегистрации); - - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ПриЗакрытииНаСервере() - - ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); - -КонецПроцедуры - -&НаСервере -Функция СписокВсехРегламентныхЗаданий() - УстановитьПривилегированныйРежим(Истина); - СписокРегламентныхЗаданий = РегламентныеЗадания.ПолучитьРегламентныеЗадания(); - МассивРегламентныхЗаданий = Новый Массив; - Для Каждого Элемент Из СписокРегламентныхЗаданий Цикл - Если Элемент.Наименование <> "" Тогда - МассивРегламентныхЗаданий.Добавить(Новый Структура("УИД, Наименование", Элемент.УникальныйИдентификатор, - Элемент.Наименование)); - ИначеЕсли Элемент.Метаданные.Синоним <> "" Тогда - МассивРегламентныхЗаданий.Добавить(Новый Структура("УИД, Наименование", Элемент.УникальныйИдентификатор, - Элемент.Метаданные.Синоним)); - КонецЕсли; - КонецЦикла; - - Возврат МассивРегламентныхЗаданий; -КонецФункции - -&НаСервере -Функция ПараметрыОтчета() - ПараметрыОтчета = Новый Структура; - ПараметрыОтчета.Вставить("Настройки", Отчет.КомпоновщикНастроек.Настройки); - ПараметрыОтчета.Вставить("ПользовательскиеНастройки", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); - ПараметрыОтчета.Вставить("ФиксированныеНастройки", Отчет.КомпоновщикНастроек.ФиксированныеНастройки); - ПараметрыОтчета.Вставить("ИдентификаторФормы", УникальныйИдентификатор); - - Возврат ПараметрыОтчета; -КонецФункции - -&НаСервере -Процедура ПолучитьИдентификаторРегламентногоЗадания(НазваниеСобытия, НаименованиеСобытия) - УстановитьПривилегированныйРежим(Истина); - ОтборПоРегламентнымЗаданиям = Новый Структура; - МетаданныеРегламентногоЗадания = Метаданные.РегламентныеЗадания.Найти(НазваниеСобытия); - Если МетаданныеРегламентногоЗадания <> Неопределено Тогда - ОтборПоРегламентнымЗаданиям.Вставить("Метаданные", МетаданныеРегламентногоЗадания); - Если НаименованиеСобытия <> Неопределено Тогда - ОтборПоРегламентнымЗаданиям.Вставить("Наименование", НаименованиеСобытия); - КонецЕсли; - РегЗадание = РегламентныеЗадания.ПолучитьРегламентныеЗадания(ОтборПоРегламентнымЗаданиям); - Если ЗначениеЗаполнено(РегЗадание) Тогда - ИдентификаторРегламентногоЗадания = РегЗадание[0].УникальныйИдентификатор; - КонецЕсли; - КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура СведенияОРегламентномЗадании(Расшифровка) - ИдентификаторРегламентногоЗадания = Неопределено; - РезультатРасшифровка = ОтчетПоРегламентномуЗаданию(Расшифровка); - ИмяРегламентногоЗадания = Расшифровка.Получить(1); - НаименованиеСобытия = Расшифровка.Получить(2); - Если ИмяРегламентногоЗадания <> "" Тогда - НазваниеСобытия = СтрЗаменить(ИмяРегламентногоЗадания, "РегламентноеЗадание." , ""); - ПолучитьИдентификаторРегламентногоЗадания(НазваниеСобытия, НаименованиеСобытия); - КонецЕсли; - ПараметрыФормы = Новый Структура("Отчет, ИдентификаторРегламентногоЗадания, Заголовок", - РезультатРасшифровка.Отчет, ИдентификаторРегламентногоЗадания, Расшифровка.Получить(2)); - ОткрытьФорму("Отчет.АнализЖурналаРегистрации.Форма.СведенияОРегламентномЗадании", ПараметрыФормы); -КонецПроцедуры - -&НаСервере -Функция ОтчетПоРегламентномуЗаданию(Расшифровка) - РезультатФормированияОтчета = Отчеты.АнализЖурналаРегистрации.РасшифровкаРегламентногоЗадания(Расшифровка); - Возврат РезультатФормированияОтчета; -КонецФункции - -&НаСервере -Функция СформироватьОтчетСервер(ПараметрыОтчета) - Если Не ПроверитьЗаполнение() Тогда - Возврат Новый Структура("ЗаданиеВыполнено", Истина); - КонецЕсли; - - ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); - - ИдентификаторЗадания = Неопределено; - - ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.Результат, "НеИспользовать"); - - АдресРасшифровки = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); - ПараметрыОтчета.Вставить("АдресРасшифровки", АдресРасшифровки); - - РезультатВыполнения = ДлительныеОперации.ЗапуститьВыполнениеВФоне( - УникальныйИдентификатор, - "Отчеты.АнализЖурналаРегистрации.Сформировать", - ПараметрыОтчета, - НСтр("ru = 'Выполнение отчета: Анализ журнала регистрации'")); - - АдресХранилища = РезультатВыполнения.АдресХранилища; - ИдентификаторЗадания = РезультатВыполнения.ИдентификаторЗадания; - - Если РезультатВыполнения.ЗаданиеВыполнено Тогда - ЗагрузитьПодготовленныеДанные(); - КонецЕсли; - - Возврат РезультатВыполнения; - -КонецФункции - -&НаСервере -Процедура ЗагрузитьПодготовленныеДанные() - РезультатВыполнения = ПолучитьИзВременногоХранилища(АдресХранилища); - Результат = РезультатВыполнения.Результат; - ДанныеРасшифровки = РезультатВыполнения.ДанныеРасшифровки; - - ИдентификаторЗадания = Неопределено; -КонецПроцедуры - -&НаКлиенте -Процедура Подключаемый_ПроверитьВыполнениеЗадания() - Попытка - Если ЗаданиеВыполнено(ИдентификаторЗадания) Тогда - ЗагрузитьПодготовленныеДанные(); - ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.Результат, "НеИспользовать"); - Иначе - ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); - ПодключитьОбработчикОжидания( - "Подключаемый_ПроверитьВыполнениеЗадания", - ПараметрыОбработчикаОжидания.ТекущийИнтервал, - Истина); - КонецЕсли; - Исключение - ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.Результат, "НеИспользовать"); - ВызватьИсключение; - КонецПопытки; -КонецПроцедуры - -&НаСервереБезКонтекста -Функция ЗаданиеВыполнено(ИдентификаторЗадания) - - Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); - -КонецФункции - -#КонецОбласти diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Help/ru.html b/SSL/src/Reports/АнализЖурналаРегистрации/Help/ru.html index c8da5361c..19aa522df 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Help/ru.html +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

                                  @@ -19,7 +19,7 @@
                                  Выберите Пользователей из списка (можно выбрать всех пользователей или группы пользователей);
                                • Укажите Период.
                              • -

                                Дополнительные настройки: Выполните команду Настройки меню Еще. Кроме основных настроек, доступны:

                                +

                                Дополнительные настройки: Нажмите кнопку Настройки. Кроме основных настроек, доступны:

                                • С помощью флажков включите или выключите вывод информации по количеству введенных и измененных документов и справочников в виде диаграмм;
                                • @@ -32,7 +32,7 @@
                                  Выберите Пользователя из списка;
                                • Укажите Период.
                              • -

                                Дополнительные настройки: Выполните команду Настройки меню Еще. Кроме основных настроек, доступны:

                                +

                                Дополнительные настройки: Нажмите кнопку Настройки. Кроме основных настроек, доступны:

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

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

                                Дополнительные настройки: Выполните команду Настройки меню Еще. Кроме основных настроек, доступны:

                                +

                                Дополнительные настройки: Нажмите кнопку Настройки. Кроме основных настроек, доступны:

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

                                \ No newline at end of file + \ No newline at end of file diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl b/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl index 3b4507cba..643018403 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl +++ b/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl @@ -5,20 +5,32 @@ // Настройки размещения в панели отчетов. // // Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). -// НастройкиОтчета - СтрокаДереваЗначений - Настройки размещения всех вариантов отчета. -// См. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// Настройки - Коллекция - Передается "как есть" из ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// Может использоваться для получения настроек варианта этого отчета при помощи функции ВариантыОтчетов.ОписаниеВарианта(). +// НастройкиОтчета - СтрокаДереваЗначений - Настройки этого отчета, +// уже сформированные при помощи функции ВариантыОтчетов.ОписаниеОтчета() и готовые к изменению. +// См. "Свойства для изменения" процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Описание: // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Вспомогательные методы: -// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); // Отчет -// поддерживает только этот режим. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// +// Примеры: +// +// 1. Установка описания варианта. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Описание = НСтр("ru = '<Описание>'"); +// +// 2. Отключение варианта отчета. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Включен = Ложь; // Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт + НастройкиОтчета.ОпределитьНастройкиФормы = Истина; + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); МодульВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Ложь); @@ -512,27 +524,6 @@ #Область СлужебныеПроцедурыИФункции -// Процедура формирования отчета. -// -// Параметры: -// ПараметрыОтчета - структура - набор параметров, необходимых для построения отчета. -// АдресХранилища - адрес временного хранилища. -Процедура Сформировать(ПараметрыОтчета, АдресХранилища) Экспорт - Результат = Новый Структура; - ДанныеРасшифровкиОбъект = Новый ДанныеРасшифровкиКомпоновкиДанных; - ДокументРезультат = Новый ТабличныйДокумент; - ОтчетОбъект = Отчеты.АнализЖурналаРегистрации.Создать(); - - ОтчетОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(ПараметрыОтчета.Настройки); - ОтчетОбъект.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(ПараметрыОтчета.ПользовательскиеНастройки); - ОтчетОбъект.КомпоновщикНастроек.ЗагрузитьФиксированныеНастройки(ПараметрыОтчета.ФиксированныеНастройки); - ОтчетОбъект.СкомпоноватьРезультат(ДокументРезультат, ДанныеРасшифровкиОбъект); - ДанныеРасшифровки = ПоместитьВоВременноеХранилище(ДанныеРасшифровкиОбъект, ПараметрыОтчета.АдресРасшифровки); - - ПоместитьВоВременноеХранилище(Новый Структура("Результат, ДанныеРасшифровки", - ДокументРезультат, ДанныеРасшифровки), АдресХранилища); -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Анализ активности пользователей. @@ -570,8 +561,8 @@ Функция УникальныеИдентификаторыПользователей(ИдентификаторыПользователей) МассивУникальныеИдентификаторыПользователей = Новый Массив; - ОбщегоНазначения.ЗаполнитьМассивУникальнымиЗначениями(МассивУникальныеИдентификаторыПользователей, - ИдентификаторыПользователей); + ОбщегоНазначенияКлиентСервер.ДополнитьМассив(МассивУникальныеИдентификаторыПользователей, + ИдентификаторыПользователей, Истина); СоответствиеУИД = Новый Соответствие; Для Каждого Элемент Из МассивУникальныеИдентификаторыПользователей Цикл @@ -894,7 +885,7 @@ // // Возвращаемое значение // таблица значений - таблица, содержащая информацию по работе регламентных заданий -// из журнала регистрации +// из журнала регистрации. // Функция ДанныеДляОтчетаПоПродолжительностиРаботыРегламентныхЗаданий(ПараметрыЗаполнения) @@ -1461,7 +1452,7 @@ // ДанныеЖурналаРегистрации - таблица значений - выгруженная таблица из журнала регистраций. // // Должны присутствовать следующие колонки: Дата, ИмяПользователя, ПредставлениеПриложения, -// ПредставлениеСобытия, Комментарий, Уровень +// ПредставлениеСобытия, Комментарий, Уровень. // Функция СформироватьОтчетКонтрольЖурналаРегистрации(ДатаНачала, ДатаОкончания) Экспорт diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/ObjectModule.bsl b/SSL/src/Reports/АнализЖурналаРегистрации/ObjectModule.bsl index 849ed1814..8b73c26b9 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/ObjectModule.bsl +++ b/SSL/src/Reports/АнализЖурналаРегистрации/ObjectModule.bsl @@ -1,12 +1,66 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда +#Область ПрограммныйИнтерфейс + +// Настройки общей формы отчета подсистемы "Варианты отчетов". +// +// Параметры: +// Форма - УправляемаяФорма, Неопределено - Форма отчета или форма настроек отчета. +// Неопределено когда вызов без контекста. +// КлючВарианта - Строка, Неопределено - Имя предопределенного +// или уникальный идентификатор пользовательского варианта отчета. +// Неопределено когда вызов без контекста. +// Настройки - Структура - см. возвращаемое значение +// ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(). +// +Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт + Настройки.События.ПриОпределенииПараметровВыбора = Истина; +КонецПроцедуры + +// Вызывается в форме отчета перед выводом настройки. +// +// Параметры: +// Форма - УправляемаяФорма, Неопределено - Форма отчета. +// СвойстваНастройки - Структура - Описание настройки отчета, которая будет выведена в форме отчета. +// * ОписаниеТипов - ОписаниеТипов - +// Тип настройки. +// * ЗначенияДляВыбора - СписокЗначений - +// Объекты, которые будут предложены пользователю в списке выбора. +// Дополняет список объектов, уже выбранных пользователем ранее. +// * ЗапросЗначенийВыбора - Запрос - +// Возвращает объекты, которыми необходимо дополнить ЗначенияДляВыбора. +// Первой колонкой (с 0м индексом) должен выбираться объект, +// который следует добавить в ЗначенияДляВыбора.Значение. +// Для отключения автозаполнения +// в свойство ЗапросЗначенийВыбора.Текст следует записать пустую строку. +// * ОграничиватьВыборУказаннымиЗначениями - Булево - +// Когда Истина, то выбор пользователя будет ограничен значениями, +// указанными в ЗначенияДляВыбора (его конечным состоянием). +// +// См. также: +// ОтчетыПереопределяемый.ПриОпределенииПараметровВыбора(). +// +Процедура ПриОпределенииПараметровВыбора(Форма, СвойстваНастройки) Экспорт + ИмяПоля = Строка(СвойстваНастройки.ПолеКД); + Если ИмяПоля = "ПараметрыДанных.СкрытьРегламентныеЗадания" Тогда + МассивРегламентныхЗаданий = СписокВсехРегламентныхЗаданий(); + СвойстваНастройки.ЗначенияДляВыбора.Очистить(); + Для Каждого Элемент Из МассивРегламентныхЗаданий Цикл + СвойстваНастройки.ЗначенияДляВыбора.Добавить(Элемент.УИД, Элемент.Наименование); + КонецЦикла; + СвойстваНастройки.ЗначенияДляВыбора.СортироватьПоПредставлению(); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + #Область ОбработчикиСобытий -Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровкиОбъект, СтандартнаяОбработка, АдресХранилища) +Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровкиОбъект, СтандартнаяОбработка, АдресХранилища) СтандартнаяОбработка = Ложь; НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки(); Период = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("Период").Значение; - ВариантОтчета = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("ВариантОтчета").Значение; + ВариантОтчета = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("ВариантОтчета").Значение; Если ВариантОтчета = "КонтрольЖурналаРегистрации" Тогда РезультатФормированияОтчета = Отчеты.АнализЖурналаРегистрации. СформироватьОтчетКонтрольЖурналаРегистрации(Период.ДатаНачала, Период.ДатаОкончания); @@ -26,7 +80,7 @@ ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, Отчеты.АнализЖурналаРегистрации.ДанныеИзЖурналаРегистрации(ПараметрыОтчета), ДанныеРасшифровкиОбъект, Истина); - ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; + ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.НачатьВывод(); Пока Истина Цикл @@ -113,7 +167,7 @@ КонецЕсли; КонецПроцедуры - + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -211,6 +265,23 @@ ДокументРезультат.Вывести(РезультатФормированияОтчета.Отчет); КонецПроцедуры +Функция СписокВсехРегламентныхЗаданий() + УстановитьПривилегированныйРежим(Истина); + СписокРегламентныхЗаданий = РегламентныеЗадания.ПолучитьРегламентныеЗадания(); + МассивРегламентныхЗаданий = Новый Массив; + Для Каждого Элемент Из СписокРегламентныхЗаданий Цикл + Если Элемент.Наименование <> "" Тогда + МассивРегламентныхЗаданий.Добавить(Новый Структура("УИД, Наименование", Элемент.УникальныйИдентификатор, + Элемент.Наименование)); + ИначеЕсли Элемент.Метаданные.Синоним <> "" Тогда + МассивРегламентныхЗаданий.Добавить(Новый Структура("УИД, Наименование", Элемент.УникальныйИдентификатор, + Элемент.Метаданные.Синоним)); + КонецЕсли; + КонецЦикла; + + Возврат МассивРегламентныхЗаданий; +КонецФункции + #КонецОбласти #КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Template.mxlx b/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Template.mxlx index 468b7f51e..14e79c716 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Template.mxlx +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Template.mxlx @@ -2881,7 +2881,7 @@ 0.832351015062213 0.00196463654223969 - 0.0539419087136929 + 0.0539419087136928 0 @@ -2986,9 +2986,9 @@ Day 1 true - 2015-12-17T10:00:00 - 2015-12-26T10:59:59 - 2015-12-17T10:00:00 + 2013-10-04T15:00:00 + 2013-10-13T16:59:59 + 2013-10-04T15:00:00 Gradient 3 Day diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/АнализЖурналаРегистрации.mdo b/SSL/src/Reports/АнализЖурналаРегистрации/АнализЖурналаРегистрации.mdo index b63109ce8..1c2fa7f6d 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/АнализЖурналаРегистрации.mdo +++ b/SSL/src/Reports/АнализЖурналаРегистрации/АнализЖурналаРегистрации.mdo @@ -10,10 +10,10 @@ Анализ журнала регистрации true - Report.АнализЖурналаРегистрации.Form.ФормаОтчета + CommonForm.ФормаОтчета Report.АнализЖурналаРегистрации.Template.ОсновнаяСхемаКомпоновкиДанных - Report.АнализЖурналаРегистрации.Form.ФормаНастроек - Report.АнализЖурналаРегистрации.Form.ФормаВарианта + CommonForm.ФормаНастроекОтчета + CommonForm.ФормаВариантаОтчета SettingsStorage.ХранилищеВариантовОтчетов true @@ -21,15 +21,6 @@ ru - - ФормаОтчета - - ru - Форма отчета - - PersonalComputer - MobileDevice - СведенияОРегламентномЗадании @@ -44,24 +35,6 @@ PersonalComputer MobileDevice - - ФормаНастроек - - ru - Форма настроек - - PersonalComputer - MobileDevice - - - ФормаВарианта - - ru - Форма варианта - - PersonalComputer - MobileDevice - ОсновнаяСхемаКомпоновкиДанных diff --git a/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаПростыхОтветов/Module.bsl b/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаПростыхОтветов/Module.bsl index 2fffda7ba..794850f15 100644 --- a/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаПростыхОтветов/Module.bsl +++ b/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаПростыхОтветов/Module.bsl @@ -13,7 +13,7 @@ КонецЕсли; ШаблонЗаголовка = НСтр("ru = 'Ответы на вопрос № %1 опроса %2 + от %3.'"); - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, ПолныйКод, НаименованиеОпроса, Формат(ДатаОпроса,"ДФ=dd.MM.yyyy")); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, ПолныйКод, НаименованиеОпроса, Формат(ДатаОпроса,"ДЛФ=D")); СформироватьОтчет(); diff --git a/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Module.bsl b/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Module.bsl index e8022babe..dc285b695 100644 --- a/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Module.bsl +++ b/SSL/src/Reports/АнализОпроса/Forms/РасшифровкаТабличныхВопросов/Module.bsl @@ -347,7 +347,7 @@ ПредопределенныеОтветы.Загрузить(РеквизитыВопросШаблона.ПредопределенныеОтветы.Выгрузить()); ПолучитьФормулировкиЭлементарныхВопросов(ФормулировкиЭлементарныхВопросов); - Заголовок = НСтр("ru='Ответы на вопрос №'") + " " + ПолныйКод + " " + НСтр("ru='опроса'") + " " + НаименованиеОпроса + " " + НСтр("ru='от'") + " " + Формат(ДатаОпроса,"ДФ=dd.MM.yyyy"); + Заголовок = НСтр("ru='Ответы на вопрос №'") + " " + ПолныйКод + " " + НСтр("ru='опроса'") + " " + НаименованиеОпроса + " " + НСтр("ru='от'") + " " + Формат(ДатаОпроса,"ДЛФ=D"); Возврат Ложь; diff --git a/SSL/src/Reports/АнализОпроса/Help/ru.html b/SSL/src/Reports/АнализОпроса/Help/ru.html index 83efc08f2..581481376 100644 --- a/SSL/src/Reports/АнализОпроса/Help/ru.html +++ b/SSL/src/Reports/АнализОпроса/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

                                diff --git a/SSL/src/Reports/АнализОпроса/ManagerModule.bsl b/SSL/src/Reports/АнализОпроса/ManagerModule.bsl index 75c77e4ef..4c69df973 100644 --- a/SSL/src/Reports/АнализОпроса/ManagerModule.bsl +++ b/SSL/src/Reports/АнализОпроса/ManagerModule.bsl @@ -5,18 +5,28 @@ // Настройки размещения в панели отчетов. // // Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). -// НастройкиОтчета - СтрокаДереваЗначений - Настройки размещения всех вариантов отчета. -// См. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// Настройки - Коллекция - Передается "как есть" из ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// Может использоваться для получения настроек варианта этого отчета при помощи функции ВариантыОтчетов.ОписаниеВарианта(). +// НастройкиОтчета - СтрокаДереваЗначений - Настройки этого отчета, +// уже сформированные при помощи функции ВариантыОтчетов.ОписаниеОтчета() и готовые к изменению. +// См. "Свойства для изменения" процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Описание: // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Вспомогательные методы: -// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); // Отчет -// поддерживает только этот режим. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// +// Примеры: +// +// 1. Установка описания варианта. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Описание = НСтр("ru = '<Описание>'"); +// +// 2. Отключение варианта отчета. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Включен = Ложь; // Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); diff --git a/SSL/src/Reports/АнализОпроса/ObjectModule.bsl b/SSL/src/Reports/АнализОпроса/ObjectModule.bsl index 8b0d82d19..904bb0d8d 100644 --- a/SSL/src/Reports/АнализОпроса/ObjectModule.bsl +++ b/SSL/src/Reports/АнализОпроса/ObjectModule.bsl @@ -116,7 +116,7 @@ // ТаблицаОтчета - ТабличныйДокумент - // СтрокаДерева - СтрокаДереваЗначений - // Макет - Макет - -// Полный код - Строка +// Полный код - Строка. // Процедура ВывестиРаздел(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод) @@ -133,7 +133,7 @@ // ТаблицаОтчета - ТабличныйДокумент - // СтрокаДерева - СтрокаДереваЗначений - // Макет - Макет - -// Полный код - Строка +// Полный код - Строка. // Процедура ВывестиВопрос(ТаблицаОтчета,СтрокаДерева,Макет,ПолныйКод, ПредставленияВопросов) @@ -731,8 +731,7 @@ | ГДЕ | ВопросыШаблонаАнкеты.Владелец = &ШаблонАнкеты | И (НЕ ВопросыШаблонаАнкеты.ЭтоГруппа) - | И (ВопросыДляАнкетирования.ТипОтвета = ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.ОдинВариантИЗ) - | ИЛИ ВопросыДляАнкетирования.ТипОтвета = ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз))) КАК Вопросы + | И ВопросыДляАнкетирования.ТипОтвета В (ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.ОдинВариантИЗ), ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз))) КАК Вопросы | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ОтветыНаВопросыАнкет.Вопрос КАК Вопрос, | ОтветыНаВопросыАнкет.ЭлементарныйВопрос КАК ЭлементарныйВопрос, @@ -743,8 +742,7 @@ | РегистрСведений.ОтветыНаВопросыАнкет КАК ОтветыНаВопросыАнкет | ГДЕ | ОтветыНаВопросыАнкет.Анкета.Опрос = &Опрос - | И (ТИПЗНАЧЕНИЯ(ОтветыНаВопросыАнкет.Ответ) = ТИП(БУЛЕВО) - | ИЛИ ТИПЗНАЧЕНИЯ(ОтветыНаВопросыАнкет.Ответ) = ТИП(Справочник.ВариантыОтветовАнкет)) + | И ТИПЗНАЧЕНИЯ(ОтветыНаВопросыАнкет.Ответ) В (ТИП(БУЛЕВО), ТИП(Справочник.ВариантыОтветовАнкет)) | | СГРУППИРОВАТЬ ПО | ОтветыНаВопросыАнкет.Вопрос, @@ -789,9 +787,7 @@ | ОтветыНаВопросыАнкет.Анкета.Опрос = &Опрос | И (НЕ ВопросыШаблонаАнкеты.ТипТабличногоВопроса = ЗНАЧЕНИЕ(Перечисление.ТипыТабличныхВопросов.Составной)) | И ВопросыШаблонаАнкеты.ТипВопроса = ЗНАЧЕНИЕ(Перечисление.ТипыВопросовШаблонаАнкеты.Табличный) - | И (ВопросыДляАнкетирования.ТипОтвета = ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.Булево) - | ИЛИ ВопросыДляАнкетирования.ТипОтвета = ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.ОдинВариантИз) - | ИЛИ ВопросыДляАнкетирования.ТипОтвета = ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз))) КАК ДанныеРегистра + | И ВопросыДляАнкетирования.ТипОтвета В (ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.Булево), ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.ОдинВариантИз), ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз))) КАК ДанныеРегистра | ПО ВопросыШаблонаАнкетыСоставТабличногоВопроса.Ссылка = ДанныеРегистра.Вопрос | И ВопросыШаблонаАнкетыСоставТабличногоВопроса.ЭлементарныйВопрос = ДанныеРегистра.ЭлементарныйВопрос | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты @@ -806,9 +802,7 @@ | ВопросыШаблонаАнкеты.ТипВопроса = ЗНАЧЕНИЕ(Перечисление.ТипыВопросовШаблонаАнкеты.Табличный) | И ВопросыШаблонаАнкеты.Владелец = &ШаблонАнкеты | И (НЕ ВопросыШаблонаАнкеты.ТипТабличногоВопроса = ЗНАЧЕНИЕ(Перечисление.ТипыТабличныхВопросов.Составной))) - | И (ВопросыДляАнкетирования.ТипОтвета = ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.Булево) - | ИЛИ ВопросыДляАнкетирования.ТипОтвета = ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.ОдинВариантИз) - | ИЛИ ВопросыДляАнкетирования.ТипОтвета = ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз)) + | И ВопросыДляАнкетирования.ТипОтвета В (ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.Булево), ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.ОдинВариантИз), ЗНАЧЕНИЕ(Перечисление.ТипыОтветовНаВопрос.НесколькоВариантовИз)) | | СГРУППИРОВАТЬ ПО | ВопросыШаблонаАнкетыСоставТабличногоВопроса.Ссылка, @@ -842,13 +836,13 @@ Функция АгрегатныеЗначенияВСтроку(СтрокаДерева,АгрегироватьСуммуВОтчетах = Неопределено) Если ТипЗнч(СтрокаДерева.Максимум) = Тип("Дата") Тогда - Максимум = Формат(СтрокаДерева.Максимум, "ДФ=dd.MM.yyyy"); + Максимум = Формат(СтрокаДерева.Максимум, "ДЛФ=D"); Иначе Максимум = Формат(ОКР(СтрокаДерева.Максимум,2),"ЧРД=."); КонецЕсли; Если ТипЗнч(СтрокаДерева.Минимум) = Тип("Дата") Тогда - Минимум = Формат(СтрокаДерева.Минимум, "ДФ=dd.MM.yyyy"); + Минимум = Формат(СтрокаДерева.Минимум, "ДЛФ=D"); Иначе Минимум = Формат(ОКР(СтрокаДерева.Минимум,2),"ЧРД=."); КонецЕсли; @@ -1025,16 +1019,18 @@ // Функция ВыполнитьЗапросПоОтветившимСвободныйОпрос(Опрос,ТипРеспондентов) + МетаданныеТипаРеспондентов = ТипРеспондентов.Метаданные(); + Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | ТаблицаСправочника.Ссылка |ПОМЕСТИТЬ ДанныеСправочника |ИЗ - | " + ТипРеспондентов.Метаданные().ПолноеИмя() + " КАК ТаблицаСправочника + | " + МетаданныеТипаРеспондентов.ПолноеИмя() + " КАК ТаблицаСправочника |ГДЕ | (НЕ ТаблицаСправочника.ПометкаУдаления) - | " + ?(ТипРеспондентов.Метаданные().Иерархический," И (НЕ ТаблицаСправочника.ЭтоГруппа)","") + " + | " + ?(МетаданныеТипаРеспондентов.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов," И (НЕ ТаблицаСправочника.ЭтоГруппа)","") + " |; | |//////////////////////////////////////////////////////////////////////////////// diff --git a/SSL/src/Reports/АналитическийОтчетПоАнкетированию/Help/ru.html b/SSL/src/Reports/АналитическийОтчетПоАнкетированию/Help/ru.html index 0b71a3ee5..e57012c8f 100644 --- a/SSL/src/Reports/АналитическийОтчетПоАнкетированию/Help/ru.html +++ b/SSL/src/Reports/АналитическийОтчетПоАнкетированию/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

                                diff --git a/SSL/src/Reports/АналитическийОтчетПоАнкетированию/ManagerModule.bsl b/SSL/src/Reports/АналитическийОтчетПоАнкетированию/ManagerModule.bsl index 7b7a6d4ef..576cdc6ea 100644 --- a/SSL/src/Reports/АналитическийОтчетПоАнкетированию/ManagerModule.bsl +++ b/SSL/src/Reports/АналитическийОтчетПоАнкетированию/ManagerModule.bsl @@ -5,18 +5,28 @@ // Настройки размещения в панели отчетов. // // Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). -// НастройкиОтчета - СтрокаДереваЗначений - Настройки размещения всех вариантов отчета. -// См. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// Настройки - Коллекция - Передается "как есть" из ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// Может использоваться для получения настроек варианта этого отчета при помощи функции ВариантыОтчетов.ОписаниеВарианта(). +// НастройкиОтчета - СтрокаДереваЗначений - Настройки этого отчета, +// уже сформированные при помощи функции ВариантыОтчетов.ОписаниеОтчета() и готовые к изменению. +// См. "Свойства для изменения" процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Описание: // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Вспомогательные методы: -// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); // Отчет -// поддерживает только этот режим. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// +// Примеры: +// +// 1. Установка описания варианта. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Описание = НСтр("ru = '<Описание>'"); +// +// 2. Отключение варианта отчета. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Включен = Ложь; // Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); diff --git a/SSL/src/Reports/БизнесПроцессы/Help/ru.html b/SSL/src/Reports/БизнесПроцессы/Help/ru.html index 2ebc19dfa..727c0984f 100644 --- a/SSL/src/Reports/БизнесПроцессы/Help/ru.html +++ b/SSL/src/Reports/БизнесПроцессы/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

                                diff --git a/SSL/src/Reports/БизнесПроцессы/ManagerModule.bsl b/SSL/src/Reports/БизнесПроцессы/ManagerModule.bsl index c49590820..fe162f0a1 100644 --- a/SSL/src/Reports/БизнесПроцессы/ManagerModule.bsl +++ b/SSL/src/Reports/БизнесПроцессы/ManagerModule.bsl @@ -5,18 +5,28 @@ // Настройки размещения в панели отчетов. // // Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). -// НастройкиОтчета - СтрокаДереваЗначений - Настройки размещения всех вариантов отчета. -// См. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// Настройки - Коллекция - Передается "как есть" из ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// Может использоваться для получения настроек варианта этого отчета при помощи функции ВариантыОтчетов.ОписаниеВарианта(). +// НастройкиОтчета - СтрокаДереваЗначений - Настройки этого отчета, +// уже сформированные при помощи функции ВариантыОтчетов.ОписаниеОтчета() и готовые к изменению. +// См. "Свойства для изменения" процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Описание: // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Вспомогательные методы: -// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); // Отчет -// поддерживает только этот режим. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// +// Примеры: +// +// 1. Установка описания варианта. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Описание = НСтр("ru = '<Описание>'"); +// +// 2. Отключение варианта отчета. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Включен = Ложь; // Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); diff --git a/SSL/src/Reports/ДатыЗапретаЗагрузки/ManagerModule.bsl b/SSL/src/Reports/ДатыЗапретаЗагрузки/ManagerModule.bsl index cc5392498..6bd2a05a9 100644 --- a/SSL/src/Reports/ДатыЗапретаЗагрузки/ManagerModule.bsl +++ b/SSL/src/Reports/ДатыЗапретаЗагрузки/ManagerModule.bsl @@ -5,18 +5,28 @@ // Настройки размещения в панели отчетов. // // Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). -// НастройкиОтчета - СтрокаДереваЗначений - Настройки размещения всех вариантов отчета. -// См. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// Настройки - Коллекция - Передается "как есть" из ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// Может использоваться для получения настроек варианта этого отчета при помощи функции ВариантыОтчетов.ОписаниеВарианта(). +// НастройкиОтчета - СтрокаДереваЗначений - Настройки этого отчета, +// уже сформированные при помощи функции ВариантыОтчетов.ОписаниеОтчета() и готовые к изменению. +// См. "Свойства для изменения" процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Описание: // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Вспомогательные методы: -// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); // Отчет -// поддерживает только этот режим. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// +// Примеры: +// +// 1. Установка описания варианта. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Описание = НСтр("ru = '<Описание>'"); +// +// 2. Отключение варианта отчета. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Включен = Ложь; // Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт diff --git a/SSL/src/Reports/ДатыЗапретаИзменения/ManagerModule.bsl b/SSL/src/Reports/ДатыЗапретаИзменения/ManagerModule.bsl index bbb7c7471..cbd2083a6 100644 --- a/SSL/src/Reports/ДатыЗапретаИзменения/ManagerModule.bsl +++ b/SSL/src/Reports/ДатыЗапретаИзменения/ManagerModule.bsl @@ -5,18 +5,28 @@ // Настройки размещения в панели отчетов. // // Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). -// НастройкиОтчета - СтрокаДереваЗначений - Настройки размещения всех вариантов отчета. -// См. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// Настройки - Коллекция - Передается "как есть" из ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// Может использоваться для получения настроек варианта этого отчета при помощи функции ВариантыОтчетов.ОписаниеВарианта(). +// НастройкиОтчета - СтрокаДереваЗначений - Настройки этого отчета, +// уже сформированные при помощи функции ВариантыОтчетов.ОписаниеОтчета() и готовые к изменению. +// См. "Свойства для изменения" процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Описание: // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Вспомогательные методы: -// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); // Отчет -// поддерживает только этот режим. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// +// Примеры: +// +// 1. Установка описания варианта. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Описание = НСтр("ru = '<Описание>'"); +// +// 2. Отключение варианта отчета. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Включен = Ложь; // Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт diff --git a/SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/ManagerModule.bsl b/SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/ManagerModule.bsl deleted file mode 100644 index c09f98d27..000000000 --- a/SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/ManagerModule.bsl +++ /dev/null @@ -1,31 +0,0 @@ -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -#Область ПрограммныйИнтерфейс - -// Настройки размещения в панели отчетов. -// -// Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). -// НастройкиОтчета - СтрокаДереваЗначений - Настройки размещения всех вариантов отчета. -// См. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). -// -// Описание: -// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). -// -// Вспомогательные методы: -// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); // Отчет -// поддерживает только этот режим. -// -Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт - МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); - НастройкиОтчета.Описание = НСтр("ru = 'Действующие согласия на обработку персональных данных.'"); - - НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "ДействующиеСогласия"); - НастройкиВарианта.Описание = НСтр("ru = 'Действующие на выбранную дату согласия на обработку персональных данных.'"); -КонецПроцедуры - -#КонецОбласти - -#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ДосьеКонтрагента/Forms/Форма/Form.form b/SSL/src/Reports/ДосьеКонтрагента/Forms/Форма/Form.form index 5e5f745a8..d4cf4f2a7 100644 --- a/SSL/src/Reports/ДосьеКонтрагента/Forms/Форма/Form.form +++ b/SSL/src/Reports/ДосьеКонтрагента/Forms/Форма/Form.form @@ -91,9 +91,6 @@ true true UserCmds - - StdPicture.GenerateReport - Auto @@ -118,7 +115,7 @@ Left
                                - Form.Item.ТабличныйДокумент.StandardCommand.PrintImmediately + 0NormalAutotrue @@ -149,7 +146,7 @@ Left - Form.Item.ТабличныйДокумент.StandardCommand.SaveAs + 0Normaltruetrue @@ -275,31 +272,23 @@ - ГруппаУсловияПолученияСервиса - 17 + ГруппаРазделыДосье + 28 - ТекстУсловияПолученияСервиса - 19 + ДекорацияРазделГлавное + 32 <key>ru</key> - <value><fontstyle -31>После 3</><fontstyle -31>1.05</><fontstyle -31>.2015 условия получения сервиса будут изменены. Подробнее:</><fontstyle -31> </><fontstyle -31><link https://portal.1c.ru/applications/3#conditions>https://portal.1c.ru/applications/3#conditions</></></value> + <value>Главное</value> true true true - None - ТекстУсловияПолученияСервисаРасширеннаяПодсказка - 21 - - <key>ru</key> - <value>Корректный отчет можно сформировать только на основе актуальных данных. -<link e1cib/command/ОбщаяКоманда.ОписаниеАктуализацииДанных>Подробнее</> -</value> - - true + ДекорацияРазделГлавноеРасширеннаяПодсказка + 34 Label true true @@ -308,18 +297,261 @@ - ТекстУсловияПолученияСервисаКонтекстноеМеню - 20 + ДекорацияРазделГлавноеКонтекстноеМеню + 33 true - true Label true true - true + - Left - Center + + Click + ДекорацияРазделГлавноеНажатие + + true + Center + + + + ДекорацияРазделДанныеГосРеестров + 37 + + <key>ru</key> + <value>ЕГРЮЛ</value> + + true + true + + true + + + ДекорацияРазделДанныеГосРеестровРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + ДекорацияРазделДанныеГосРеестровКонтекстноеМеню + 38 + true + + Label + true + true + + + + Click + ДекорацияРазделДанныеГосРеестровНажатие + + true + Center + + + + ДекорацияРазделДанныеПрограммы + 42 + + <key>ru</key> + <value>Данные программы</value> + + true + true + + true + + + ДекорацияРазделДанныеПрограммыРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + ДекорацияРазделДанныеПрограммыКонтекстноеМеню + 43 + true + + Label + true + true + + + + Click + ДекорацияРазделДанныеПрограммыНажатие + + true + Center + + + + ДекорацияРазделБухгалтерскаяОтчетность + 47 + + <key>ru</key> + <value>Бухгалтерская отчетность</value> + + true + true + + true + + + ДекорацияРазделБухгалтерскаяОтчетностьРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + + ДекорацияРазделБухгалтерскаяОтчетностьКонтекстноеМеню + 48 + true + + Label + true + true + + + + Click + ДекорацияРазделБухгалтерскаяОтчетностьНажатие + + true + Center + + + + ДекорацияРазделАнализОтчетности + 52 + + <key>ru</key> + <value>Анализ отчетности</value> + + true + true + + true + + + ДекорацияРазделАнализОтчетностиРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + ДекорацияРазделАнализОтчетностиКонтекстноеМеню + 53 + true + + Label + true + true + + + + Click + ДекорацияРазделАнализОтчетностиНажатие + + true + Center + + + + ДекорацияРазделФинансовыйАнализ + 57 + + <key>ru</key> + <value>Финансовый анализ</value> + + true + true + + true + + + ДекорацияРазделФинансовыйАнализРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + + ДекорацияРазделФинансовыйАнализКонтекстноеМеню + 58 + true + + Label + true + true + + + + Click + ДекорацияРазделФинансовыйАнализНажатие + + true + Center + + + + ДекорацияРазделПроверки + 92 + + <key>ru</key> + <value>Проверки</value> + + true + true + + true + + + ДекорацияРазделПроверкиРасширеннаяПодсказка + 94 + Label + true + true + + Left + + + + ДекорацияРазделПроверкиКонтекстноеМеню + 93 + true + + Label + true + true + + + + Click + ДекорацияРазделПроверкиНажатие + + true + Center true @@ -329,15 +561,15 @@ <key>ru</key> - <value>Условия получения сервиса</value> + <value>Разделы досье</value> ru - Условия получения сервиса + Разделы досье - ГруппаУсловияПолученияСервисаРасширеннаяПодсказка - 18 + ГруппаРазделыДосьеРасширеннаяПодсказка + 29 Label true true @@ -351,27 +583,621 @@ true true - Style.ЦветФонаДокументаСНекорректнымиКонтрагентамиВСпискеДокументов + Style.ДосьеПанельРазделовЦвет Auto Auto - - ТабличныйДокумент - 1 + + ГруппаРезультат + 60 + + ГруппаРезультатГлавное + 62 + + РезультатГлавное + 64 + true + true + + true + + + РезультатГлавное + + None + + РезультатГлавноеРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + + РезультатГлавноеКонтекстноеМеню + 65 + true + + SpreadsheetDocumentField + Enter + true + Left + true + + 50 + true + 10 + true + true + true + Special + ScrollAlways + Always + Auto + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Главное</value> + + + ru + Результат - Главное + + + ГруппаРезультатГлавноеРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + ГруппаРезультатДанныеГосРеестров + 67 + + РезультатДанныеГосРеестров + 69 + true + true + + true + + + РезультатДанныеГосРеестров + + None + + РезультатДанныеГосРеестровРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + + РезультатДанныеГосРеестровКонтекстноеМеню + 70 + true + + SpreadsheetDocumentField + Enter + true + Left + true + + + DetailProcessing + РезультатДанныеГосРеестровОбработкаРасшифровки + + 50 + true + 10 + true + true + true + Special + ScrollAlways + Always + Auto + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>ЕГРЮЛ</value> + + + ru + Результат - Данные гос. реестров + + + ГруппаРезультатДанныеГосРеестровРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + ГруппаРезультатДанныеПрограммы + 72 + + РезультатДанныеПрограммы + 74 + true + true + + true + + + РезультатДанныеПрограммы + + None + + РезультатДанныеПрограммыРасширеннаяПодсказка + 76 + Label + true + true + + Left + + + + РезультатДанныеПрограммыКонтекстноеМеню + 75 + true + + SpreadsheetDocumentField + Enter + true + Left + true + + + DetailProcessing + РезультатДанныеПрограммыОбработкаРасшифровки + + 50 + true + 10 + true + true + true + Special + ScrollAlways + Always + Auto + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Данные программы</value> + + + ru + Результат - данные программы + + + ГруппаРезультатДанныеПрограммыРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + ГруппаРезультатБухгалтерскаяОтчетность + 77 + + РезультатБухгалтерскаяОтчетность + 79 + true + true + + true + + + РезультатБухгалтерскаяОтчетность + + None + + РезультатБухгалтерскаяОтчетностьРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + + РезультатБухгалтерскаяОтчетностьКонтекстноеМеню + 80 + true + + SpreadsheetDocumentField + Enter + true + Left + true + + 50 + true + 10 + true + true + true + Special + ScrollAlways + Always + Auto + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Бухгалтерская отчетность</value> + + + ru + Результат - бухгалтерская отчетность + + + ГруппаРезультатБухгалтерскаяОтчетностьРасширеннаяПодсказка + 78 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + ГруппаРезультатАнализОтчетности + 82 + + РезультатАнализОтчетности + 84 + true + true + + true + + + РезультатАнализОтчетности + + None + + РезультатАнализОтчетностиРасширеннаяПодсказка + 86 + Label + true + true + + Left + + + + РезультатАнализОтчетностиКонтекстноеМеню + 85 + true + + SpreadsheetDocumentField + Enter + true + Left + true + + 50 + true + 10 + true + true + true + Special + ScrollAlways + Always + Auto + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Анализ отчетности</value> + + + ru + Результат - анализ отчетности + + + ГруппаРезультатАнализОтчетностиРасширеннаяПодсказка + 83 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + ГруппаРезультатФинансовыйАнализ + 87 + + РезультатФинансовыйАнализ + 89 + true + true + + true + + + РезультатФинансовыйАнализ + + None + + РезультатФинансовыйАнализРасширеннаяПодсказка + 91 + Label + true + true + + Left + + + + РезультатФинансовыйАнализКонтекстноеМеню + 90 + true + + SpreadsheetDocumentField + Enter + true + Left + true + + + DetailProcessing + РезультатФинансовыйАнализОбработкаРасшифровки + + 50 + true + 10 + true + true + true + Special + ScrollAlways + Always + Auto + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Финансовый анализ</value> + + + ru + Результат - финансовый анализ + + + ГруппаРезультатФинансовыйАнализРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + + ГруппаРезультатПроверки + 95 + + РезультатПроверки + 97 + true + true + + true + + + РезультатПроверки + + None + + РезультатПроверкиРасширеннаяПодсказка + 99 + Label + true + true + + Left + + + + РезультатПроверкиКонтекстноеМеню + 98 + true + + SpreadsheetDocumentField + Enter + true + Left + true + + + DetailProcessing + РезультатПроверкиОбработкаРасшифровки + + 50 + true + 10 + true + true + true + Special + ScrollAlways + Always + Auto + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Проверки</value> + + + ru + Результат - проверки + + + ГруппаРезультатПроверкиРасширеннаяПодсказка + 96 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + true true true - - ТабличныйДокумент - - None + + <key>ru</key> + <value>Результат</value> + + + ru + Результат + - ТабличныйДокументРасширеннаяПодсказка - 3 + ГруппаРезультатРасширеннаяПодсказка + 61 Label true true @@ -379,35 +1205,9 @@ Left - - ТабличныйДокументКонтекстноеМеню - 2 - true - - SpreadsheetDocumentField - Enter - true - Left - true - - - DetailProcessing - ТабличныйДокументОбработкаРасшифровки - - 50 - true - 10 - true - true - true - Special - ScrollAlways - Always - Auto - true - true - true - Normal + Pages + + Auto @@ -462,10 +1262,10 @@
                                true
                                - ТабличныйДокумент + РезультатГлавное <key>ru</key> - <value>Табличный документ</value> + <value>Результат - Главное</value> 2 @@ -576,6 +1376,24 @@ true + + ИмяДокумента + + <key>ru</key> + <value>Имя документа</value> + + 4 + + String + + + + true + + + true + + НайденныйИНН @@ -667,6 +1485,186 @@ true + + ОжиданиеОтвета + + <key>ru</key> + <value>Ожидание ответа</value> + + 8 + + Boolean + + + true + + + true + + + + ИННПоиска + + <key>ru</key> + <value>ИНН поиска</value> + + 11 + + String + + 250 + + + + true + + + true + + + + РезультатДанныеГосРеестров + + <key>ru</key> + <value>Результат - Данные гос. реестров</value> + + 12 + + SpreadsheetDocument + + + true + + + true + + + + + РезультатДанныеПрограммы + + <key>ru</key> + <value>Результат - данные программы</value> + + 13 + + SpreadsheetDocument + + + true + + + true + + + + + РезультатБухгалтерскаяОтчетность + + <key>ru</key> + <value>Результат - бухгалтерская отчетность</value> + + 14 + + SpreadsheetDocument + + + true + + + true + + + + + РезультатАнализОтчетности + + <key>ru</key> + <value>Результат - анализ отчетности</value> + + 15 + + SpreadsheetDocument + + + true + + + true + + + + + РезультатФинансовыйАнализ + + <key>ru</key> + <value>Результат - Финансовый анализ</value> + + 16 + + SpreadsheetDocument + + + true + + + true + + + + + ЭтоЮридическоеЛицо + + <key>ru</key> + <value>Это юридическое лицо</value> + + 17 + + Boolean + + + true + + + true + + + + НаименованиеКонтрагента + + <key>ru</key> + <value>Наименование контрагента</value> + + 18 + + String + + + + true + + + true + + + + РезультатПроверки + + <key>ru</key> + <value>Результат - проверки</value> + + 19 + + SpreadsheetDocument + + + true + + + true + + + СформироватьОтчет diff --git a/SSL/src/Reports/ДосьеКонтрагента/Forms/Форма/Module.bsl b/SSL/src/Reports/ДосьеКонтрагента/Forms/Форма/Module.bsl index 4f392dd3b..7b012ebaa 100644 --- a/SSL/src/Reports/ДосьеКонтрагента/Forms/Форма/Module.bsl +++ b/SSL/src/Reports/ДосьеКонтрагента/Forms/Форма/Module.bsl @@ -1,19 +1,22 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ПараметрыОбработчикаОжидания; &НаКлиенте Перем ОтключитьФормированиеОтчета; +#КонецОбласти + #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если ЗначениеЗаполнено(Параметры.Контрагент) Тогда - Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Параметры.Контрагент, "ЭтоГруппа,ИНН"); - Если НЕ Реквизиты.ЭтоГруппа - И ЗначениеЗаполнено(Реквизиты.ИНН) Тогда - СтрокаПоиска = Реквизиты.ИНН; - Контрагент = Параметры.Контрагент; + ИННКонтрагента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Параметры.Контрагент, "ИНН"); + Если ЗначениеЗаполнено(ИННКонтрагента) Тогда + СтрокаПоиска = ИННКонтрагента; + Контрагент = Параметры.Контрагент; КонецЕсли; ИначеЕсли ЗначениеЗаполнено(Параметры.ИНН) Тогда СтрокаПоиска = Параметры.ИНН; @@ -23,23 +26,41 @@ Если ПоискПоИНН И (СтрДлина(СтрокаПоиска) = 10 ИЛИ СтрДлина(СтрокаПоиска) = 12) Тогда - СформироватьОтчетНаСервере(СтрокаПоиска); + ИННПоиска = СтрокаПоиска; + ЭтоЮридическоеЛицо = СтрДлина(ИННПоиска) = 10; + СформироватьОтчетНаСервере(); + Иначе + ЭтоЮридическоеЛицо = Истина; + УправлениеФормойНаСервере(); КонецЕсли; - УправлениеФормойНаСервере(); - КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) + ИмяДокумента = ?(ЭтоЮридическоеЛицо, "РезультатГлавное", "РезультатДанныеГосРеестров"); + Если ЗначениеЗаполнено(ИдентификаторЗадания) Тогда ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 0.5, Истина); ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента( - Элементы.ТабличныйДокумент, "ФормированиеОтчета"); + Элементы[ИмяДокумента], "ФормированиеОтчета"); ИначеЕсли ЗначениеЗаполнено(ОписаниеОшибки) Тогда ПодключитьОбработчикОжидания("Подключаемый_ПоказатьПредупреждениеОбОшибке", 0.1, Истина); + ИначеЕсли ОжиданиеОтвета Тогда + ПодключитьОбработчикОжидания("Подключаемый_СформироватьОтчет", 3, Истина); + ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента( + Элементы[ИмяДокумента], "ФормированиеОтчета"); + КонецЕсли; + + Элементы.ГруппаРезультат.ТекущаяСтраница = Элементы["Группа" + ИмяДокумента]; + Если ЗначениеЗаполнено(ИдентификаторЗадания) + ИЛИ ОжиданиеОтвета + ИЛИ ЭтотОбъект[ИмяДокумента].ВысотаТаблицы > 0 Тогда + ТекущийЭлемент = Элементы[ИмяДокумента]; + Иначе + ТекущийЭлемент = Элементы.СтрокаПоиска; КонецЕсли; КонецПроцедуры @@ -65,36 +86,94 @@ КонецПроцедуры &НаКлиенте -Процедура ТабличныйДокументОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) +Процедура ДекорацияРазделГлавноеНажатие(Элемент) - СтандартнаяОбработка = Ложь; + Элементы.ГруппаРезультат.ТекущаяСтраница = Элементы.ГруппаРезультатГлавное; + ТекущийЭлемент = Элементы.РезультатГлавное; + УстановитьСвойстваЗаголовкамРазделовНаСервере("Главное"); - Если ТипЗнч(Расшифровка) <> Тип("Структура") - ИЛИ НЕ Расшифровка.Свойство("Действие") Тогда - Возврат; - КонецЕсли; - - Если Расшифровка.Действие = "Показать" - ИЛИ Расшифровка.Действие = "Свернуть" Тогда - - ПоказатьСкрытьОбластьДокумента(Расшифровка); - - ИначеЕсли Расшифровка.Действие = "Открыть" Тогда - - Если НЕ Расшифровка.Свойство("ИНН") Тогда - Возврат; - КонецЕсли; - - Если НЕ ЗначениеЗаполнено(Расшифровка.ИНН) - ИЛИ (СтрДлина(Расшифровка.ИНН) <> 10 - И СтрДлина(Расшифровка.ИНН) <> 12) Тогда - Возврат; - КонецЕсли; - ПараметрыФормы = Новый Структура("ИНН", Расшифровка.ИНН); - ОткрытьФорму("Отчет.ДосьеКонтрагента.Форма", ПараметрыФормы, , Расшифровка.ИНН); - - КонецЕсли; +КонецПроцедуры +&НаКлиенте +Процедура ДекорацияРазделДанныеГосРеестровНажатие(Элемент) + + Элементы.ГруппаРезультат.ТекущаяСтраница = Элементы.ГруппаРезультатДанныеГосРеестров; + ТекущийЭлемент = Элементы.РезультатДанныеГосРеестров; + УстановитьСвойстваЗаголовкамРазделовНаСервере("ДанныеГосРеестров"); + +КонецПроцедуры + +&НаКлиенте +Процедура ДекорацияРазделДанныеПрограммыНажатие(Элемент) + + Элементы.ГруппаРезультат.ТекущаяСтраница = Элементы.ГруппаРезультатДанныеПрограммы; + ТекущийЭлемент = Элементы.РезультатДанныеПрограммы; + УстановитьСвойстваЗаголовкамРазделовНаСервере("ДанныеПрограммы"); + +КонецПроцедуры + +&НаКлиенте +Процедура ДекорацияРазделБухгалтерскаяОтчетностьНажатие(Элемент) + + Элементы.ГруппаРезультат.ТекущаяСтраница = Элементы.ГруппаРезультатБухгалтерскаяОтчетность; + ТекущийЭлемент = Элементы.РезультатБухгалтерскаяОтчетность; + УстановитьСвойстваЗаголовкамРазделовНаСервере("БухгалтерскаяОтчетность"); + +КонецПроцедуры + +&НаКлиенте +Процедура ДекорацияРазделАнализОтчетностиНажатие(Элемент) + + Элементы.ГруппаРезультат.ТекущаяСтраница = Элементы.ГруппаРезультатАнализОтчетности; + ТекущийЭлемент = Элементы.РезультатАнализОтчетности; + УстановитьСвойстваЗаголовкамРазделовНаСервере("АнализОтчетности"); + +КонецПроцедуры + +&НаКлиенте +Процедура ДекорацияРазделФинансовыйАнализНажатие(Элемент) + + Элементы.ГруппаРезультат.ТекущаяСтраница = Элементы.ГруппаРезультатФинансовыйАнализ; + ТекущийЭлемент = Элементы.РезультатФинансовыйАнализ; + УстановитьСвойстваЗаголовкамРазделовНаСервере("ФинансовыйАнализ"); + +КонецПроцедуры + +&НаКлиенте +Процедура ДекорацияРазделПроверкиНажатие(Элемент) + + Элементы.ГруппаРезультат.ТекущаяСтраница = Элементы.ГруппаРезультатПроверки; + ТекущийЭлемент = Элементы.РезультатПроверки; + УстановитьСвойстваЗаголовкамРазделовНаСервере("Проверки"); + +КонецПроцедуры + +&НаКлиенте +Процедура РезультатДанныеГосРеестровОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) + + ОбработатьРасшифровкуТабличногоДокумента(Расшифровка, СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура РезультатДанныеПрограммыОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) + + ОбработатьРасшифровкуТабличногоДокумента(Расшифровка, СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура РезультатФинансовыйАнализОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) + + ОбработатьРасшифровкуТабличногоДокумента(Расшифровка, СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура РезультатПроверкиОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) + + ОбработатьРасшифровкуТабличногоДокумента(Расшифровка, СтандартнаяОбработка); + КонецПроцедуры #КонецОбласти @@ -110,7 +189,7 @@ Если НЕ ЗначениеЗаполнено(СтрокаПоиска) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - Нстр("ru='Поле ""ИНН или наименование контрагента"" не заполнено'"), , "СтрокаПоиска"); + НСтр("ru='Поле ""ИНН или наименование контрагента"" не заполнено'"), , "СтрокаПоиска"); Возврат; КонецЕсли; @@ -138,24 +217,37 @@ &НаСервере Процедура УправлениеФормойНаСервере() - СвойстваКонтрагентов = ПроверкаКонтрагентовКлиентСервер.СвойстваСправочникаКонтрагенты(); - ИмяСправочника = СвойстваКонтрагентов.Имя; - Элементы.КнопкаДобавитьВСправочник.Видимость = ЗначениеЗаполнено(ИмяСправочника) - И ПравоДоступа("Добавление", Метаданные.Справочники[ИмяСправочника]) - И НЕ ЗначениеЗаполнено(Контрагент) - И ЗначениеЗаполнено(НайденныйИНН); - - Если ЗначениеЗаполнено(Контрагент) Тогда + Если ЗначениеЗаполнено(НаименованиеКонтрагента) Тогда + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Досье контрагента: %1'"), + НаименованиеКонтрагента); + ИначеЕсли ЗначениеЗаполнено(Контрагент) Тогда Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='Досье контрагента: %1'"), Контрагент); Иначе Заголовок = НСтр("ru='Досье контрагента'"); КонецЕсли; + Элементы.ДекорацияРазделДанныеГосРеестров.Заголовок = ?(ЭтоЮридическоеЛицо, + НСтр("ru='ЕГРЮЛ'"), + НСтр("ru='ЕГРИП'")); - ТекущийЭлемент = ?(НЕ ЗначениеЗаполнено(ОписаниеОшибки) И ТабличныйДокумент.ВысотаТаблицы > 0, - Элементы.ТабличныйДокумент, - Элементы.СтрокаПоиска); + Элементы.ДекорацияРазделГлавное.Видимость = ЭтоЮридическоеЛицо; + Элементы.ДекорацияРазделБухгалтерскаяОтчетность.Видимость = ЭтоЮридическоеЛицо; + Элементы.ДекорацияРазделАнализОтчетности.Видимость = ЭтоЮридическоеЛицо; + Элементы.ДекорацияРазделФинансовыйАнализ.Видимость = ЭтоЮридическоеЛицо; + + СвойстваКонтрагентов = ПроверкаКонтрагентовКлиентСервер.СвойстваСправочникаКонтрагенты(); + Элементы.КнопкаДобавитьВСправочник.Видимость = ЗначениеЗаполнено(СвойстваКонтрагентов.Имя) + И НЕ ЗначениеЗаполнено(Контрагент) + И ЗначениеЗаполнено(НайденныйИНН); + + Элементы.ГруппаРезультат.ТекущаяСтраница = ?(ЭтоЮридическоеЛицо, + Элементы.ГруппаРезультатГлавное, + Элементы.ГруппаРезультатДанныеГосРеестров); + ТекущийЭлемент = ?(ЗначениеЗаполнено(ОписаниеОшибки), + Элементы.СтрокаПоиска, + ?(ЭтоЮридическоеЛицо, Элементы.РезультатГлавное, Элементы.РезультатДанныеГосРеестров)); КонецПроцедуры @@ -166,7 +258,7 @@ Возврат; КонецЕсли; - Отбор = Новый Структура("ИмяОбласти", Расшифровка.ИмяОбласти); + Отбор = Новый Структура("ИмяДокумента,ИмяОбласти", Расшифровка.ИмяДокумента, Расшифровка.ИмяОбласти); СтрокиТаблицы = ОбластиРасшифровки.НайтиСтроки(Отбор); Если СтрокиТаблицы.Количество() = 0 Тогда Возврат; @@ -175,14 +267,15 @@ НомерСтрокиЕще = СтрокаОбласти.ПерваяСтрока - 1; + ТабличныйДокумент = ЭтотОбъект[Расшифровка.ИмяДокумента]; Если Расшифровка.Действие = "Показать" Тогда ТабличныйДокумент.Область(НомерСтрокиЕще, , НомерСтрокиЕще).Видимость = Ложь; ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Истина; - Элементы.ТабличныйДокумент.ТекущаяОбласть = ТабличныйДокумент.Область(СтрокаОбласти.ПоследняяСтрока, 2); + Элементы[Расшифровка.ИмяДокумента].ТекущаяОбласть = ТабличныйДокумент.Область(СтрокаОбласти.ПоследняяСтрока, 3); Иначе // "Свернуть" ТабличныйДокумент.Область(НомерСтрокиЕще, , НомерСтрокиЕще).Видимость = Истина; ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; - Элементы.ТабличныйДокумент.ТекущаяОбласть = ТабличныйДокумент.Область(НомерСтрокиЕще, 2); + Элементы[Расшифровка.ИмяДокумента].ТекущаяОбласть = ТабличныйДокумент.Область(НомерСтрокиЕще, 3); КонецЕсли; КонецПроцедуры @@ -204,34 +297,30 @@ Возврат; КонецЕсли; - ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента( - Элементы.ТабличныйДокумент, "ФормированиеОтчета"); + ИННПоиска = ТекстПоиска; - Результат = СформироватьОтчетНаСервере(ТекстПоиска); + ЭтоЮридическоеЛицо = СтрДлина(ИННПоиска) = 10; + + ИмяДокумента = ?(ЭтоЮридическоеЛицо, "РезультатГлавное", "РезультатДанныеГосРеестров"); + ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента( + Элементы[ИмяДокумента], "ФормированиеОтчета"); + + Результат = СформироватьОтчетНаСервере(); Если НЕ Результат Тогда ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина); Иначе - ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента( - Элементы.ТабличныйДокумент, "НеИспользовать"); - - // Обработка ошибок - Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда - Если ОписаниеОшибки = "НеУказаныПараметрыАутентификации" Тогда - ТекстВопроса = НСтр("ru='Для автоматического заполнения реквизитов контрагентов - |необходимо подключиться к интернет-поддержке пользователей. - |Подключиться сейчас?'"); - ОписаниеОповещения = Новый ОписаниеОповещения("ПодключитьИнтернетПоддержку", ЭтотОбъект); - ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет); - ИначеЕсли ОписаниеОшибки = "НеУказанПароль" Тогда - ТекстВопроса = НСтр("ru='Необходимо указать пароль к Интернет-поддержке пользователей - |и установить флажок ""Запомнить пароль"". - |Указать сейчас?'"); - ОписаниеОповещения = Новый ОписаниеОповещения("ПодключитьИнтернетПоддержку", ЭтотОбъект); - ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет); - Иначе - ПоказатьПредупреждение(, ОписаниеОшибки); + + ОбработатьОшибкиФормированияОтчета(); + + Если ОжиданиеОтвета Тогда + // Повторный вызов процедуры формирования при асинхронном получении данных от сервиса. + ПодключитьОбработчикОжидания("Подключаемый_СформироватьОтчет", 3, Истина); + Иначе + Если НЕ ЗначениеЗаполнено(ИдентификаторЗадания) Тогда + ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента( + Элементы[ИмяДокумента], "НеИспользовать"); КонецЕсли; КонецЕсли; @@ -255,7 +344,7 @@ КонецПроцедуры &НаСервере -Функция СформироватьОтчетНаСервере(ТекстПоиска) +Функция СформироватьОтчетНаСервере() ИдентификаторЗадания = Неопределено; ОписаниеОшибки = ""; @@ -265,19 +354,20 @@ КонецЕсли; ПараметрыОтчета = Новый Структура; - ПараметрыОтчета.Вставить("ИНН", ТекстПоиска); + ПараметрыОтчета.Вставить("ИНН", ИННПоиска); Если ЗначениеЗаполнено(Контрагент) - И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Контрагент, "ИНН") <> ТекстПоиска Тогда + И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Контрагент, "ИНН") <> ИННПоиска Тогда Контрагент = Неопределено; КонецЕсли; ПараметрыОтчета.Вставить("Контрагент", Контрагент); + РезультатВыполнения = ДлительныеОперации.ЗапуститьВыполнениеВФоне( Новый УникальныйИдентификатор, "Отчеты.ДосьеКонтрагента.СформироватьОтчет", ПараметрыОтчета, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='Формирование отчета: Досье контрагента: %1'"), - СтрокаПоиска)); + ИННПоиска)); АдресХранилища = РезультатВыполнения.АдресХранилища; @@ -294,38 +384,41 @@ &НаКлиенте Процедура Подключаемый_ПоказатьПредупреждениеОбОшибке() - - ПоказатьПредупреждение(, ОписаниеОшибки); - ОписаниеОшибки = ""; + + ОбработатьОшибкиФормированияОтчета(); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ПроверитьВыполнениеЗадания() - Если ЗначениеЗаполнено(ИдентификаторЗадания) Тогда - - Если ЗаданиеВыполнено(ИдентификаторЗадания) Тогда - ИдентификаторЗадания = Неопределено; - ЗагрузитьПодготовленныеДанные(); - Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда - ПоказатьПредупреждение(, ОписаниеОшибки); - ОписаниеОшибки = ""; - КонецЕсли; - Иначе - ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); - ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", - ПараметрыОбработчикаОжидания.ТекущийИнтервал, - Истина); - КонецЕсли; - - КонецЕсли; - Если НЕ ЗначениеЗаполнено(ИдентификаторЗадания) Тогда - ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента( - Элементы.ТабличныйДокумент, "НеИспользовать"); + Возврат; КонецЕсли; - + + Если ЗаданиеВыполнено(ИдентификаторЗадания) Тогда + + ИдентификаторЗадания = Неопределено; + ЗагрузитьПодготовленныеДанные(); + + ОбработатьОшибкиФормированияОтчета(); + + Если ОжиданиеОтвета Тогда + // Повторный вызов процедуры формирования при асинхронном получении данных от сервиса. + ПодключитьОбработчикОжидания("Подключаемый_СформироватьОтчет", 3, Истина); + Иначе + ИмяДокумента = ?(ЭтоЮридическоеЛицо, "РезультатГлавное", "РезультатДанныеГосРеестров"); + ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента( + Элементы[ИмяДокумента], "НеИспользовать"); + КонецЕсли; + + Иначе + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", + ПараметрыОбработчикаОжидания.ТекущийИнтервал, + Истина); + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -335,6 +428,13 @@ КонецПроцедуры +&НаКлиенте +Процедура Подключаемый_СформироватьОтчет() + + СформироватьОтчетНаКлиенте(ИННПоиска); + +КонецПроцедуры + &НаКлиенте Процедура ПодключитьИнтернетПоддержку(Ответ, ДопПараметры) Экспорт @@ -386,25 +486,187 @@ ДанныеОтчета = ПолучитьИзВременногоХранилища(АдресХранилища); ОписаниеОшибки = ДанныеОтчета.ОписаниеОшибки; Контрагент = ДанныеОтчета.Контрагент; - ТабличныйДокумент.Очистить(); - Элементы.ТабличныйДокумент.ИспользуемоеИмяФайла = Неопределено; - ТабличныйДокумент.ТекущаяОбласть = ТабличныйДокумент.Область(1, 1, 1, 1); - ОбластиРасшифровки.Очистить(); + ОжиданиеОтвета = ДанныеОтчета.ОжиданиеОтвета; + + // Очистка + + // Общие свойства НайденныйИНН = ""; - Если НЕ ЗначениеЗаполнено(ОписаниеОшибки) Тогда - ТабличныйДокумент.Вывести(ДанныеОтчета.ТабличныйДокумент); - ТабличныйДокумент.ФиксацияСверху = 2; - Элементы.ТабличныйДокумент.ИспользуемоеИмяФайла = СокрЛП(ДанныеОтчета.ИспользуемоеИмяФайла); + НаименованиеКонтрагента = ""; + ОбластиРасшифровки.Очистить(); + // Главное + РезультатГлавное.Очистить(); + Элементы.РезультатГлавное.ИспользуемоеИмяФайла = Неопределено; + РезультатГлавное.ТекущаяОбласть = РезультатГлавное.Область(1, 2, 1, 2); + // Данные единых гос. реестров + РезультатДанныеГосРеестров.Очистить(); + Элементы.РезультатДанныеГосРеестров.ИспользуемоеИмяФайла = Неопределено; + РезультатДанныеГосРеестров.ТекущаяОбласть = РезультатДанныеГосРеестров.Область(1, 2, 1, 2); + // Данные программы + РезультатДанныеПрограммы.Очистить(); + Элементы.РезультатДанныеПрограммы.ИспользуемоеИмяФайла = Неопределено; + РезультатДанныеПрограммы.ТекущаяОбласть = РезультатДанныеПрограммы.Область(1, 2, 1, 2); + // Бух. отчетность + РезультатБухгалтерскаяОтчетность.Очистить(); + Элементы.РезультатБухгалтерскаяОтчетность.ИспользуемоеИмяФайла = Неопределено; + РезультатБухгалтерскаяОтчетность.ТекущаяОбласть = РезультатБухгалтерскаяОтчетность.Область(1, 2, 1, 2); + // Показатели + РезультатАнализОтчетности.Очистить(); + Элементы.РезультатАнализОтчетности.ИспользуемоеИмяФайла = Неопределено; + РезультатАнализОтчетности.ТекущаяОбласть = РезультатАнализОтчетности.Область(1, 2, 1, 2); + // Фин. анализ + РезультатФинансовыйАнализ.Очистить(); + Элементы.РезультатФинансовыйАнализ.ИспользуемоеИмяФайла = Неопределено; + РезультатФинансовыйАнализ.ТекущаяОбласть = РезультатФинансовыйАнализ.Область(1, 2, 1, 2); + // Проверки + РезультатПроверки.Очистить(); + Элементы.РезультатПроверки.ИспользуемоеИмяФайла = Неопределено; + РезультатПроверки.ТекущаяОбласть = РезультатПроверки.Область(1, 2, 1, 2); + + + // Заполнение + + Если НЕ ОжиданиеОтвета + И НЕ ЗначениеЗаполнено(ОписаниеОшибки) Тогда + // Общие свойства НайденныйИНН = ДанныеОтчета.НайденныйИНН; + НаименованиеКонтрагента = ДанныеОтчета.НаименованиеКонтрагента; Для каждого СтрокаОбласти Из ДанныеОтчета.ОбластиРасшифровки Цикл НоваяСтрока = ОбластиРасшифровки.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаОбласти); КонецЦикла; + // Главное + Если ДанныеОтчета.Свойство("РезультатГлавное") Тогда + РезультатГлавное.Вывести(ДанныеОтчета.РезультатГлавное); + Элементы.РезультатГлавное.ИспользуемоеИмяФайла = СокрЛП(ДанныеОтчета.ИмяФайлаГлавное); + КонецЕсли; + // Данные единых гос. реестров + РезультатДанныеГосРеестров.Вывести(ДанныеОтчета.РезультатДанныеГосРеестров); + Элементы.РезультатДанныеГосРеестров.ИспользуемоеИмяФайла = СокрЛП(ДанныеОтчета.ИмяФайлаДанныеГосРеестров); + // Данные программы + Если ДанныеОтчета.Свойство("РезультатДанныеПрограммы") Тогда + РезультатДанныеПрограммы.Вывести(ДанныеОтчета.РезультатДанныеПрограммы); + Элементы.РезультатДанныеПрограммы.ИспользуемоеИмяФайла = СокрЛП(ДанныеОтчета.ИмяФайлаДанныеПрограммы); + КонецЕсли; + // Бух. отчетность + Если ДанныеОтчета.Свойство("РезультатБухгалтерскаяОтчетность") Тогда + РезультатБухгалтерскаяОтчетность.Вывести(ДанныеОтчета.РезультатБухгалтерскаяОтчетность); + Элементы.РезультатБухгалтерскаяОтчетность.ИспользуемоеИмяФайла = СокрЛП(ДанныеОтчета.ИмяФайлаБухгалтерскаяОтчетность); + КонецЕсли; + // Показатели + Если ДанныеОтчета.Свойство("РезультатАнализОтчетности") Тогда + РезультатАнализОтчетности.Вывести(ДанныеОтчета.РезультатАнализОтчетности); + Элементы.РезультатАнализОтчетности.ИспользуемоеИмяФайла = СокрЛП(ДанныеОтчета.ИмяФайлаАнализОтчетности); + КонецЕсли; + // Фин. анализ + Если ДанныеОтчета.Свойство("РезультатФинансовыйАнализ") Тогда + РезультатФинансовыйАнализ.Вывести(ДанныеОтчета.РезультатФинансовыйАнализ); + Элементы.РезультатФинансовыйАнализ.ИспользуемоеИмяФайла = СокрЛП(ДанныеОтчета.ИмяФайлаФинансовыйАнализ); + КонецЕсли; + // Проверки + Если ДанныеОтчета.Свойство("РезультатПроверки") Тогда + РезультатПроверки.Вывести(ДанныеОтчета.РезультатПроверки); + Элементы.РезультатПроверки.ИспользуемоеИмяФайла = СокрЛП(ДанныеОтчета.ИмяФайлаПроверки); + КонецЕсли; + КонецЕсли; + УстановитьСвойстваЗаголовкамРазделовНаСервере(?(ЭтоЮридическоеЛицо, "Главное", "ДанныеГосРеестров")); УправлениеФормойНаСервере(); КонецПроцедуры +&НаСервере +Процедура УстановитьСвойстваЗаголовкамРазделовНаСервере(ИмяТекущегоРаздела) + + Элементы.ДекорацияРазделГлавное.Гиперссылка = Истина; + Элементы.ДекорацияРазделДанныеГосРеестров.Гиперссылка = Истина; + Элементы.ДекорацияРазделДанныеПрограммы.Гиперссылка = Истина; + Элементы.ДекорацияРазделБухгалтерскаяОтчетность.Гиперссылка = Истина; + Элементы.ДекорацияРазделАнализОтчетности.Гиперссылка = Истина; + Элементы.ДекорацияРазделФинансовыйАнализ.Гиперссылка = Истина; + Элементы.ДекорацияРазделПроверки.Гиперссылка = Истина; + + Элементы.ДекорацияРазделГлавное.ЦветФона = Новый Цвет; + Элементы.ДекорацияРазделДанныеГосРеестров.ЦветФона = Новый Цвет; + Элементы.ДекорацияРазделДанныеПрограммы.ЦветФона = Новый Цвет; + Элементы.ДекорацияРазделБухгалтерскаяОтчетность.ЦветФона = Новый Цвет; + Элементы.ДекорацияРазделАнализОтчетности.ЦветФона = Новый Цвет; + Элементы.ДекорацияРазделФинансовыйАнализ.ЦветФона = Новый Цвет; + Элементы.ДекорацияРазделПроверки.ЦветФона = Новый Цвет; + + Элементы["ДекорацияРаздел" + ИмяТекущегоРаздела].Гиперссылка = Ложь; + Элементы["ДекорацияРаздел" + ИмяТекущегоРаздела].ЦветФона = ЦветаСтиля.ДосьеТекущийРазделЦвет; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработатьРасшифровкуТабличногоДокумента(Расшифровка, СтандартнаяОбработка) + + Если ТипЗнч(Расшифровка) <> Тип("Структура") + ИЛИ НЕ Расшифровка.Свойство("Действие") Тогда + Возврат; + КонецЕсли; + + СтандартнаяОбработка = Ложь; + + Если Расшифровка.Действие = "Показать" + ИЛИ Расшифровка.Действие = "Свернуть" Тогда + + ПоказатьСкрытьОбластьДокумента(Расшифровка); + + ИначеЕсли Расшифровка.Действие = "Открыть" Тогда + + Если НЕ Расшифровка.Свойство("ИНН") Тогда + Возврат; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(Расшифровка.ИНН) + ИЛИ (СтрДлина(Расшифровка.ИНН) <> 10 + И СтрДлина(Расшифровка.ИНН) <> 12) Тогда + Возврат; + КонецЕсли; + ПараметрыФормы = Новый Структура("ИНН", Расшифровка.ИНН); + ОткрытьФорму("Отчет.ДосьеКонтрагента.Форма", ПараметрыФормы, , Расшифровка.ИНН); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработатьОшибкиФормированияОтчета() + + Если НЕ ЗначениеЗаполнено(ОписаниеОшибки) Тогда + Возврат; + КонецЕсли; + + Если ОписаниеОшибки = "НеУказаныПараметрыАутентификации" Тогда + + ТекстВопроса = НСтр("ru='Для формирования ""Досье контрагента"" + |необходимо подключиться к интернет-поддержке пользователей. + |Подключиться сейчас?'"); + ОписаниеОповещения = Новый ОписаниеОповещения("ПодключитьИнтернетПоддержку", ЭтотОбъект); + ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет); + + ИначеЕсли ОписаниеОшибки = "НеУказанПароль" Тогда + ТекстВопроса = НСтр("ru='Необходимо указать пароль к Интернет-поддержке пользователей + |и установить флажок ""Запомнить пароль"". + |Указать сейчас?'"); + ОписаниеОповещения = Новый ОписаниеОповещения("ПодключитьИнтернетПоддержку", ЭтотОбъект); + ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет); + + ИначеЕсли ОписаниеОшибки = "Сервис1СКонтрагентНеПодключен" Тогда + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ИдентификаторМестаВызова", "dosie_kontragenta"); + ОткрытьФорму("ОбщаяФорма.Сервис1СКонтрагентНеПодключен", ПараметрыФормы, ЭтотОбъект); + + Иначе + ПоказатьПредупреждение(, ОписаниеОшибки); + КонецЕсли; + + ОписаниеОшибки = ""; + +КонецПроцедуры + #КонецОбласти diff --git a/SSL/src/Reports/ДосьеКонтрагента/ManagerModule.bsl b/SSL/src/Reports/ДосьеКонтрагента/ManagerModule.bsl index 7708f0b94..1822531fb 100644 --- a/SSL/src/Reports/ДосьеКонтрагента/ManagerModule.bsl +++ b/SSL/src/Reports/ДосьеКонтрагента/ManagerModule.bsl @@ -1,10 +1,15 @@ #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - + #Область СлужебныеПроцедурыИФункции +#Область ФормированиеОтчета + Процедура СформироватьОтчет(ПараметрыОтчета, АдресХранилища) Экспорт - ДанныеОтчета = Новый Структура("Контрагент,ОписаниеОшибки", ПараметрыОтчета.Контрагент, ""); + ДанныеОтчета = Новый Структура; + ДанныеОтчета.Вставить("Контрагент", ПараметрыОтчета.Контрагент); + ДанныеОтчета.Вставить("ОписаниеОшибки", ""); + ДанныеОтчета.Вставить("ОжиданиеОтвета", Ложь); ЭтоЮридическоеЛицо = СтрДлина(ПараметрыОтчета.ИНН) = 10; Если ЭтоЮридическоеЛицо Тогда @@ -12,21 +17,357 @@ Иначе ИнформацияОСвязях = ДанныеЕдиныхГосРеестров.ИнформацияОСвязяхПредпринимателяПоИНН(ПараметрыОтчета.ИНН); КонецЕсли; + Если ЗначениеЗаполнено(ИнформацияОСвязях.ОписаниеОшибки) Тогда ДанныеОтчета.ОписаниеОшибки = ИнформацияОСвязях.ОписаниеОшибки; ПоместитьВоВременноеХранилище(ДанныеОтчета, АдресХранилища); Возврат; КонецЕсли; + ИнформацияОПроверках = ДанныеЕдиныхГосРеестров.ИнформацияОПроверкахКонтролирующимиОрганамиПоИНН( + ПараметрыОтчета.ИНН, Истина, Истина, Истина, Ложь); + + Если ЗначениеЗаполнено(ИнформацияОПроверках.ОписаниеОшибки) Тогда + ДанныеОтчета.ОписаниеОшибки = ИнформацияОПроверках.ОписаниеОшибки; + ПоместитьВоВременноеХранилище(ДанныеОтчета, АдресХранилища); + Возврат; + ИначеЕсли ИнформацияОСвязях.ОжиданиеОтвета ИЛИ ИнформацияОПроверках.ОжиданиеОтвета Тогда + ДанныеОтчета.ОжиданиеОтвета = Истина; + ПоместитьВоВременноеХранилище(ДанныеОтчета, АдресХранилища); + Возврат; + КонецЕсли; + + ДанныеОтчета.Вставить("ЭтоЮридическоеЛицо", ЭтоЮридическоеЛицо); + ДанныеОтчета.Вставить("НайденныйИНН", ИнформацияОСвязях.ИНН); + ДанныеОтчета.Вставить("НаименованиеКонтрагента", ИнформацияОСвязях.НаименованиеСокращенное); + ДанныеОтчета.Вставить("ОбластиРасшифровки", НоваяТаблицаОбластиРасшифровки()); + + ИнформацияОПроверках.Вставить("НаименованиеСокращенное", ИнформацияОСвязях.НаименованиеСокращенное); + + // Подготовка данных + ПолучитьСостояниеКонтрагентаПоДаннымЕГРН(ИнформацияОСвязях); - ДополнитьИнформациюОКонтрагентеДаннымиИБ(ИнформацияОСвязях, ДанныеОтчета); + Если ИнформацияОСвязях.Свойство("ВидыДеятельности") Тогда + РаботаСКонтрагентамиПереопределяемый.ЗаполнитьНаименованияВидовДеятельностиКонтрагента( + ИнформацияОСвязях.ВидыДеятельности); + КонецЕсли; + ОписаниеДанныхПрограммы = НоваяТаблицаОписаниеДанныхПрограммы(); + РаботаСКонтрагентамиПереопределяемый.ЗаполнитьОписаниеДанныхПрограммы(ОписаниеДанныхПрограммы); + + ИнформацияОСвязях.Вставить("ДанныеПрограммы", Новый Структура); + РаботаСКонтрагентамиПереопределяемый.ДополнитьИнформациюДаннымиПрограммы(ИнформацияОСвязях, ДанныеОтчета.Контрагент); + + Если ЭтоЮридическоеЛицо Тогда + + ПодготовитьДанныеБухгалтерскойОтчетности(ИнформацияОСвязях); + ПодготовитьДанныеАнализаОтчетности(ИнформацияОСвязях); + ПодготовитьДанныеФинансовогоАнализа(ИнформацияОСвязях); + + КонецЕсли; + + // Вывод данных в отчет + + Если ЭтоЮридическоеЛицо Тогда + СформироватьРезультатГлавное(ИнформацияОСвязях, ИнформацияОПроверках, ДанныеОтчета); + КонецЕсли; + + СформироватьРезультатДанныеГосРеестров(ИнформацияОСвязях, ДанныеОтчета); + + СформироватьРезультатДанныеПрограммы(ИнформацияОСвязях, ДанныеОтчета, ОписаниеДанныхПрограммы); + + Если ЭтоЮридическоеЛицо Тогда + + СформироватьРезультатБухгалтерскаяОтчетность(ИнформацияОСвязях, ДанныеОтчета); + СформироватьРезультатАнализОтчетности(ИнформацияОСвязях, ДанныеОтчета); + СформироватьРезультатФинансовыйАнализ(ИнформацияОСвязях, ДанныеОтчета); + + КонецЕсли; + + СформироватьРезультатПроверкиКонтролирующимиОрганами(ИнформацияОПроверках, ДанныеОтчета); + + ПоместитьВоВременноеХранилище(ДанныеОтчета, АдресХранилища); + +КонецПроцедуры + +#КонецОбласти + +#Область Главное + +Процедура СформироватьРезультатГлавное(ИнформацияОСвязях, ИнформацияОПроверках, ДанныеОтчета) + + Если НЕ ДанныеОтчета.ЭтоЮридическоеЛицо Тогда + Возврат; + КонецЕсли; + + ТабличныйДокумент = Новый ТабличныйДокумент; + ОбластиРасшифровки = НоваяТаблицаОбластиРасшифровки(); + ОбластиМакета = ВсеОбластиМакета("Главное"); + ТабличныйДокумент.Вывести(ОбластиМакета.Шапка); + + // ЕГРЮЛ + + // Реквизиты + ОбластиМакета.ЕГРЮЛ.Параметры.НаименованиеСокращенное = ИнформацияОСвязях.НаименованиеСокращенное; + ОбластиМакета.ЕГРЮЛ.Параметры.ИНН = ИнформацияОСвязях.ИНН; + ОбластиМакета.ЕГРЮЛ.Параметры.КПП = ИнформацияОСвязях.КПП; + ОбластиМакета.ЕГРЮЛ.Параметры.ДатаРегистрации = Формат(ИнформацияОСвязях.ДатаРегистрации, "ДЛФ=D"); + Если ИнформацияОСвязях.КодСтатуса <> Неопределено Тогда + Если ИнформацияОСвязях.КодСтатуса = "001" Тогда + ОбластиМакета.ЕГРЮЛ.Параметры.ДействующаяОрганизация = НСтр("ru='Действующая организация (по данным ЕГРЮЛ)'"); + ОбластиМакета.ЕГРЮЛ.Область(3, 3, 3, 3).ЦветТекста = ЦветаСтиля.ДосьеХорошаяОценкаЦвет; + Иначе + ОбластиМакета.ЕГРЮЛ.Параметры.ДействующаяОрганизация = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 (по данным ЕГРЮЛ)'"), + ИнформацияОСвязях.НаименованиеСтатуса); + ОбластиМакета.ЕГРЮЛ.Область(3, 3, 3, 3).ЦветТекста = ЦветаСтиля.ДосьеПлохаяОценкаЦвет; + КонецЕсли; + КонецЕсли; + + // Адрес + ОбластиМакета.ЕГРЮЛ.Параметры.ЮридическийАдрес = ИнформацияОСвязях.ЮридическийАдрес.Представление; + КоличествоОрганизаций = ИнформацияОСвязях.ОрганизацииПоАдресу.Количество(); + Если КоличествоОрганизаций > 0 Тогда + ОрганизацииПоЭтомуАдресу = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='По этому адресу %1 еще %2'"), + ?(КоличествоОрганизаций % 10 = 1 И НЕ КоличествоОрганизаций % 100 = 11, + НСтр("ru='зарегистрирована'"), + НСтр("ru='зарегистрированы'")), + СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью( + КоличествоОрганизаций, "организация,организации,организаций")); + ОбластиМакета.ЕГРЮЛ.Параметры.ОрганизацииПоЭтомуАдресу = ОрганизацииПоЭтомуАдресу; + КонецЕсли; + + // Руководитель + Если ЗначениеЗаполнено(ИнформацияОСвязях.Руководитель) Тогда + Руководитель = ИнформацияОСвязях.Руководитель.Представление; + Если ЗначениеЗаполнено(ИнформацияОСвязях.Руководитель.Должность) Тогда + Если ЗначениеЗаполнено(ИнформацияОСвязях.Руководитель.ДатаЗаписи) Тогда + Руководитель = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1, %2 с %3'"), + Руководитель, + ИнформацияОСвязях.Руководитель.Должность, + Формат(ИнформацияОСвязях.Руководитель.ДатаЗаписи, "ДЛФ=D")); + Иначе + Руководитель = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1, %2'"), + Руководитель, + ИнформацияОСвязях.Руководитель.Должность); + КонецЕсли; + КонецЕсли; + Иначе + Руководитель = "-"; + КонецЕсли; + ОбластиМакета.ЕГРЮЛ.Параметры.Руководитель = Руководитель; + КоличествоОрганизацийГдеРуководитель = ИнформацияОСвязях.ОрганизацииГдеРуководитель.Количество(); + КоличествоОрганизацийГдеУчредитель = ИнформацияОСвязях.ОрганизацииГдеУчредитель.Количество(); + Если КоличествоОрганизацийГдеРуководитель > 0 Тогда + ТекстРуководитель = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Руководитель еще в %1'"), + СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью( + КоличествоОрганизацийГдеРуководитель, "организации,организациях,организациях")); + Иначе + ТекстРуководитель = ""; + КонецЕсли; + Если КоличествоОрганизацийГдеУчредитель > 0 Тогда + ВыводитьЕще = (ЗначениеЗаполнено(ИнформацияОСвязях.Руководитель.ИНН) + И ИнформацияОСвязях.Учредители.Найти(ИнформацияОСвязях.Руководитель.ИНН, "ИНН") <> Неопределено) + ИЛИ (НЕ ЗначениеЗаполнено(ИнформацияОСвязях.Руководитель.ИНН) + И ИнформацияОСвязях.Учредители.Найти(ИнформацияОСвязях.Руководитель.Представление, "Учредитель") <> Неопределено); + Если ВыводитьЕще Тогда + СтрокаПодстановки = ?(ПустаяСтрока(ТекстРуководитель), + НСтр("ru='Учредитель еще в %1'"), + НСтр("ru=', учредитель еще в %1'")); + Иначе + СтрокаПодстановки = ?(ПустаяСтрока(ТекстРуководитель), + НСтр("ru='Учредитель в %1'"), + НСтр("ru=', учредитель в %1'")); + КонецЕсли; + ТекстУчредитель = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + СтрокаПодстановки, + СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью( + КоличествоОрганизацийГдеУчредитель, "организации,организациях,организациях")); + Иначе + ТекстУчредитель = ""; + КонецЕсли; + ИнформацияОРуководителе = ТекстРуководитель + ТекстУчредитель; + Если НЕ ПустаяСтрока(ИнформацияОРуководителе) Тогда + ИнформацияОРуководителе = ИнформацияОРуководителе + + ?(ИнформацияОСвязях.ОрганизацииГдеРуководительПоФИО ИЛИ ИнформацияОСвязях.ОрганизацииГдеУчредительПоФИО, + " (" + НСтр("ru='поиск проведен по ФИО и может быть неточным'") + ")", + ""); + КонецЕсли; + ОбластиМакета.ЕГРЮЛ.Параметры.ИнформацияОРуководителе = ИнформацияОРуководителе; + + // Уставный капитал + Если ИнформацияОСвязях.УставныйКапитал > 0 Тогда + ОбластиМакета.ЕГРЮЛ.Параметры.УставныйКапитал = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 руб.'"), + Формат(ИнформацияОСвязях.УставныйКапитал, "ЧДЦ=")); + Иначе + ОбластиМакета.ЕГРЮЛ.Параметры.УставныйКапитал = "-"; + КонецЕсли; + ТабличныйДокумент.Вывести(ОбластиМакета.ЕГРЮЛ); + + // Бухгалтерская отчетность + + СтруктураГодов = ПериодыБухгалтерскойОтчетности(); + ГодыЕстьОтчетность = Новый Массив; + ГодыНетОтчетности = Новый Массив; + Для НомерГода = 1 По 3 Цикл + Если ИнформацияОСвязях["ЕстьОтчетностьГод_" + НомерГода] Тогда + ГодыЕстьОтчетность.Добавить(СтруктураГодов["Год_" + НомерГода]); + Иначе + ГодыНетОтчетности.Добавить(СтруктураГодов["Год_" + НомерГода]); + КонецЕсли; + КонецЦикла; + Если ГодыЕстьОтчетность.Количество() = 3 Тогда + НаличиеБухгалтерскойОтчетности = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Есть в базе Росстата за %1, %2 и %3 годы'"), + ГодыЕстьОтчетность[0], + ГодыЕстьОтчетность[1], + ГодыЕстьОтчетность[2]); + ИначеЕсли ГодыЕстьОтчетность.Количество() = 2 Тогда + НаличиеБухгалтерскойОтчетности = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Есть в базе Росстата за %1 и %2 годы, отсутствует за %3 год'"), + ГодыЕстьОтчетность[0], + ГодыЕстьОтчетность[1], + ГодыНетОтчетности[0]); + ИначеЕсли ГодыЕстьОтчетность.Количество() = 1 Тогда + НаличиеБухгалтерскойОтчетности = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Есть в базе Росстата за %1 год, отсутствует за %2 и %3 годы'"), + ГодыЕстьОтчетность[0], + ГодыНетОтчетности[0], + ГодыНетОтчетности[1]); + Иначе + НаличиеБухгалтерскойОтчетности = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Отсутствует в базе Росстата за %1, %2 и %3 годы'"), + ГодыНетОтчетности[0], + ГодыНетОтчетности[1], + ГодыНетОтчетности[2]); + КонецЕсли; + ОбластиМакета.БухгалтерскаяОтчетность.Параметры.НаличиеБухгалтерскойОтчетности = НаличиеБухгалтерскойОтчетности; + ТабличныйДокумент.Вывести(ОбластиМакета.БухгалтерскаяОтчетность); + + // Анализ отчетности + + Если (ИнформацияОСвязях.ЕстьОтчетностьГод_1 + ИЛИ ИнформацияОСвязях.ЕстьОтчетностьГод_2 + ИЛИ ИнформацияОСвязях.ЕстьОтчетностьГод_3) + И ИнформацияОСвязях.АнализОтчетности.Количество() > 0 Тогда + + АнализОтчетностиЗаголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Показатели за %1 год'"), + ?(ИнформацияОСвязях.ЕстьОтчетностьГод_1, СтруктураГодов.Год_1, + ?(ИнформацияОСвязях.ЕстьОтчетностьГод_2, СтруктураГодов.Год_2, СтруктураГодов.Год_3))); + ДанныеОтчетности = ИнформацияОСвязях.ДанныеБухгалтерскойОтчетности[0]; + ОбластиМакета.АнализОтчетности.Параметры.Заполнить(ДанныеОтчетности.Показатели); + ОбластиМакета.АнализОтчетности.Параметры.АнализОтчетностиЗаголовок = АнализОтчетностиЗаголовок; + ОбластиМакета.АнализОтчетности.Параметры.АнализОтчетностиВалюта = ДанныеОтчетности.ВалютаОтчетности; + ЗначенияПоказателей = ИнформацияОСвязях.АнализОтчетности[0].Показатели; + Если ИнформацияОСвязях.ЕстьОтчетностьГод_1 Тогда + ОбластиМакета.АнализОтчетности.Параметры.Продажи = ЗначенияПоказателей.Продажи_1; + ОбластиМакета.АнализОтчетности.Параметры.Прибыль = ЗначенияПоказателей.Прибыль_1; + ОбластиМакета.АнализОтчетности.Параметры.ЧистыеАктивы = ЗначенияПоказателей.ЧистыеАктивы_1; + ПоказателиДляКартинок = ЗначенияПоказателей; + ИначеЕсли ИнформацияОСвязях.ЕстьОтчетностьГод_2 Тогда + ОбластиМакета.АнализОтчетности.Параметры.Продажи = ЗначенияПоказателей.Продажи_2; + ОбластиМакета.АнализОтчетности.Параметры.Прибыль = ЗначенияПоказателей.Прибыль_2; + ОбластиМакета.АнализОтчетности.Параметры.ЧистыеАктивы = ЗначенияПоказателей.ЧистыеАктивы_2; + ПоказателиДляКартинок = Новый Структура; + ПоказателиДляКартинок.Вставить("Продажи_1", ЗначенияПоказателей.Продажи_2); + ПоказателиДляКартинок.Вставить("Продажи_2", ЗначенияПоказателей.Продажи_3); + ПоказателиДляКартинок.Вставить("Прибыль_1", ЗначенияПоказателей.Прибыль_2); + ПоказателиДляКартинок.Вставить("Прибыль_2", ЗначенияПоказателей.Прибыль_3); + ПоказателиДляКартинок.Вставить("ЧистыеАктивы_1", ЗначенияПоказателей.ЧистыеАктивы_2); + ПоказателиДляКартинок.Вставить("ЧистыеАктивы_2", ЗначенияПоказателей.ЧистыеАктивы_3); + Иначе + ОбластиМакета.АнализОтчетности.Параметры.Продажи = ЗначенияПоказателей.Продажи_3; + ОбластиМакета.АнализОтчетности.Параметры.Прибыль = ЗначенияПоказателей.Прибыль_3; + ОбластиМакета.АнализОтчетности.Параметры.ЧистыеАктивы = ЗначенияПоказателей.ЧистыеАктивы_3; + ПоказателиДляКартинок = Новый Структура; + КонецЕсли; + УстановитьКартинкиАнализаОтчетности(ОбластиМакета.АнализОтчетности, ПоказателиДляКартинок, + "Продажи;Прибыль;ЧистыеАктивы", "1", "2"); + ТабличныйДокумент.Вывести(ОбластиМакета.АнализОтчетности); + + // Финансовый анализ + Если ИнформацияОСвязях.ФинансовыйАнализ.Количество() > 0 Тогда + ДанныеАнализа = ИнформацияОСвязях.ФинансовыйАнализ[0]; + ПояснениеОценкиРискБанкротства = ДанныеАнализа.ПоказателиРискБанкротства.ПояснениеОценкиРискБанкротства; + ОбластиМакета.ФинансовыйАнализ.Параметры.ПояснениеОценкиРискБанкротства = ПояснениеОценкиРискБанкротства; + ПояснениеОценкиКредитоспособность = ДанныеАнализа.ПоказателиКредитоспособность.ПояснениеОценкиКредитоспособность; + ОбластиМакета.ФинансовыйАнализ.Параметры.ПояснениеОценкиКредитоспособность = ПояснениеОценкиКредитоспособность; + ТабличныйДокумент.Вывести(ОбластиМакета.ФинансовыйАнализ); + КонецЕсли; + + КонецЕсли; + + // Проверки гос. органами + ВсегоПроверок = ИнформацияОПроверках.Проверки.Количество(); + Если ВсегоПроверок > 0 Тогда + ПроверокСНарушениями = 0; + Для каждого СтрокаПроверки Из ИнформацияОПроверках.Проверки Цикл + Если СтрокаПроверки.Нарушения.Количество() > 0 Тогда + ПроверокСНарушениями = ПроверокСНарушениями + 1; + КонецЕсли; + КонецЦикла; + Если ПроверокСНарушениями = 0 Тогда + РезультатыПроверок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Известны результаты %1, нарушений не выявлено'"), + СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью( + ВсегоПроверок, НСтр("ru='проверки,проверок,проверок'"))); + Иначе + ТекстПроверки = СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью( + ВсегоПроверок, НСтр("ru='проверки,проверок,проверок'")); + Если ВсегоПроверок = 1 Тогда + ТекстНарушения = НСтр("ru='выявлены нарушения'"); + ИначеЕсли ВсегоПроверок = ПроверокСНарушениями Тогда + ТекстНарушения = НСтр("ru='все проверки выявили нарушения'"); + Иначе + ТекстНарушения = СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью( + ПроверокСНарушениями, + НСтр("ru='проверка выявила нарушения,проверки выявили нарушения,проверок выявили нарушения'")); + КонецЕсли; + РезультатыПроверок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Известны результаты %1, %2'"), ТекстПроверки, ТекстНарушения); + КонецЕсли; + ОбластиМакета.РезультатыПроверок.Параметры.РезультатыПроверок = РезультатыПроверок; + ТабличныйДокумент.Вывести(ОбластиМакета.РезультатыПроверок); + КонецЕсли; + + ОбластиРасшифровки.ЗаполнитьЗначения("РезультатГлавное", "ИмяДокумента"); + Для каждого СтрокаТаблицы Из ОбластиРасшифровки Цикл + НоваяСтрока = ДанныеОтчета.ОбластиРасшифровки.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТаблицы); + КонецЦикла; + + ДанныеОтчета.Вставить("РезультатГлавное", ТабличныйДокумент); + ДанныеОтчета.Вставить("ИмяФайлаГлавное", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Досье контрагента %1 - главное'"), + ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла( + ИнформацияОСвязях.НаименованиеСокращенное, ""))); + +КонецПроцедуры + +#КонецОбласти + +#Область ДанныеГосРеестров + +Процедура СформироватьРезультатДанныеГосРеестров(ИнформацияОСвязях, ДанныеОтчета) + ТабличныйДокумент = Новый ТабличныйДокумент; ПараметрыВывода = Новый Структура; - ПараметрыВывода.Вставить("ОбластиМакета", ВсеОбластиМакета()); + ПараметрыВывода.Вставить("ОбластиМакета", ВсеОбластиМакета("ДанныеГосРеестров")); ПараметрыВывода.Вставить("ОбластиРасшифровки", НоваяТаблицаОбластиРасшифровки()); - ПараметрыВывода.Вставить("ЭтоЮридическоеЛицо", ЭтоЮридическоеЛицо); + ПараметрыВывода.Вставить("ЭтоЮридическоеЛицо", ДанныеОтчета.ЭтоЮридическоеЛицо); + ПараметрыВывода.Вставить("ИмяДокумента", "РезультатДанныеГосРеестров"); + + ОбластьШапка = ?(ДанныеОтчета.ЭтоЮридическоеЛицо, + ПараметрыВывода.ОбластиМакета.ШапкаЮридическоеЛицо, + ПараметрыВывода.ОбластиМакета.ШапкаПредприниматель); + ТабличныйДокумент.Вывести(ОбластьШапка); ВывестиРазделНаименование(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); @@ -34,43 +375,37 @@ ВывестиРазделРеквизиты(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); - ВывестиРазделРасчетныеСчета(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); - ВывестиРазделВидыДеятельности(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); ВывестиРазделЛицензии(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); ВывестиРазделЮридическийАдрес(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); - ВывестиРазделПочтовыйАдрес(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); - - ВывестиРазделКонтакты(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); - - ВывестиРазделУставныйКапитал(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); - ВывестиРазделРуководитель(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); ВывестиРазделУчрежденныеФирмы(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); + ВывестиРазделУставныйКапитал(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); + ВывестиРазделУчредители(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); ВывестиРазделПодразделения(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); ВывестиРазделИзмененияВРеестре(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода); - ДанныеОтчета.Вставить("НайденныйИНН", ИнформацияОСвязях.ИНН); - ДанныеОтчета.Вставить("ТабличныйДокумент", ТабличныйДокумент); - ДанныеОтчета.Вставить("ОбластиРасшифровки", ПараметрыВывода.ОбластиРасшифровки); - ДанныеОтчета.Вставить("ИспользуемоеИмяФайла", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Досье контрагента %1'"), + ПараметрыВывода.ОбластиРасшифровки.ЗаполнитьЗначения("РезультатДанныеГосРеестров", "ИмяДокумента"); + Для каждого СтрокаТаблицы Из ПараметрыВывода.ОбластиРасшифровки Цикл + НоваяСтрока = ДанныеОтчета.ОбластиРасшифровки.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТаблицы); + КонецЦикла; + + ДанныеОтчета.Вставить("РезультатДанныеГосРеестров", ТабличныйДокумент); + ДанныеОтчета.Вставить("ИмяФайлаДанныеГосРеестров", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Досье контрагента %1 - данные реестра'"), ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла( ИнформацияОСвязях.НаименованиеСокращенное, ""))); - ПоместитьВоВременноеХранилище(ДанныеОтчета, АдресХранилища); - -КонецПроцедуры - -#Область ВыводРазделовОтчета +КонецПроцедуры Процедура ВывестиРазделНаименование(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) @@ -93,6 +428,8 @@ ОбластиМакета.Регистрация.Параметры.ДатаРегистрации = Формат(ИнформацияОСвязях.ДатаРегистрации, "ДЛФ=D"); ТабличныйДокумент.Вывести(ОбластиМакета.Регистрация); + + // Статус по ЕГРЮЛ Если ИнформацияОСвязях.КодСтатуса <> Неопределено Тогда Если ИнформацияОСвязях.КодСтатуса = "001" Тогда @@ -121,9 +458,11 @@ КонецЕсли; + // Статус по ЕГРН Если ЗначениеЗаполнено(ИнформацияОСвязях.СостояниеПоДаннымЕГРН) Тогда - Если ИнформацияОСвязях.СостояниеПоДаннымЕГРН = Перечисления.СостоянияСуществованияКонтрагента.КонтрагентЕстьВБазеФНС Тогда + Если ИнформацияОСвязях.СостояниеПоДаннымЕГРН = + Перечисления.СостоянияСуществованияКонтрагента.КонтрагентЕстьВБазеФНС Тогда Если ЭтоЮридическоеЛицо Тогда ОбластиМакета.ДействующаяОрганизация.Параметры.ДействующаяОрганизация = НСтр("ru='Организация есть в базе ЕГРН'"); @@ -149,12 +488,13 @@ КонецЕсли; + // Регистрация в ФНС, ПФР, ФСС Если ИнформацияОСвязях.РегистрацияВНалоговомОргане <> Неопределено ИЛИ ИнформацияОСвязях.РегистрацияВПенсионномФонде <> Неопределено ИЛИ ИнформацияОСвязях.РегистрацияВФСС <> Неопределено Тогда // Свернуто - ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, "Регистрация", 0); + ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, ПараметрыВывода.ИмяДокумента, "Регистрация", 0); // Развернуто СтрокаОбласти = ОбластиРасшифровки.Добавить(); @@ -185,7 +525,8 @@ ОбластиМакета.РегистрацияВГосОрганах.Параметры.РегистрационныйНомер = РегистрационныйНомер; ТабличныйДокумент.Вывести(ОбластиМакета.РегистрацияВГосОрганах); КонецЕсли; - Расшифровка = Новый Структура("Действие,ИмяОбласти", "Свернуть", "Регистрация"); + Расшифровка = Новый Структура("Действие,ИмяДокумента,ИмяОбласти", + "Свернуть", ПараметрыВывода.ИмяДокумента, "Регистрация"); ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; @@ -202,207 +543,132 @@ ЭтоЮридическоеЛицо = ПараметрыВывода.ЭтоЮридическоеЛицо; Если ЭтоЮридическоеЛицо Тогда - ОбластиМакета.РеквизитыЮридическогоЛица.Параметры.Заполнить(ИнформацияОСвязях); - ТабличныйДокумент.Вывести(ОбластиМакета.РеквизитыЮридическогоЛица); + ОбластиМакета.РеквизитыЮридическоеЛицо.Параметры.Заполнить(ИнформацияОСвязях); + ТабличныйДокумент.Вывести(ОбластиМакета.РеквизитыЮридическоеЛицо); Иначе - ОбластиМакета.РеквизитыПредпринимателя.Параметры.Заполнить(ИнформацияОСвязях); - ТабличныйДокумент.Вывести(ОбластиМакета.РеквизитыПредпринимателя); + ОбластиМакета.РеквизитыПредприниматель.Параметры.Заполнить(ИнформацияОСвязях); + ТабличныйДокумент.Вывести(ОбластиМакета.РеквизитыПредприниматель); КонецЕсли; ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); КонецПроцедуры -Процедура ВывестиРазделРасчетныеСчета(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) - - ОбластиМакета = ПараметрыВывода.ОбластиМакета; - ОбластиРасшифровки = ПараметрыВывода.ОбластиРасшифровки; - ЭтоЮридическоеЛицо = ПараметрыВывода.ЭтоЮридическоеЛицо; - - КоличествоРасчетныхСчетов = ИнформацияОСвязях.РасчетныеСчета.Количество(); - Если КоличествоРасчетныхСчетов > 0 Тогда - - // Расчетный счет 1 - СтрокаРасчетногоСчета = ИнформацияОСвязях.РасчетныеСчета[0]; - ОбластиМакета.РасчетныеСчета.Параметры.Банк = СтрокаРасчетногоСчета.Банк; - ТабличныйДокумент.Вывести(ОбластиМакета.РасчетныеСчета); - БанковскиеРеквизиты = ?(ЗначениеЗаполнено(СтрокаРасчетногоСчета.КоррСчет), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='р/с %1, БИК %2, корр. счет %3'"), - СтрокаРасчетногоСчета.НомерСчета, - СтрокаРасчетногоСчета.БИК, - СтрокаРасчетногоСчета.КоррСчет), - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='р/с %1, БИК %2'"), - СтрокаРасчетногоСчета.НомерСчета, - СтрокаРасчетногоСчета.БИК)); - ОбластиМакета.РасчетныеСчетаРеквизиты.Параметры.БанковскиеРеквизиты = БанковскиеРеквизиты; - ТабличныйДокумент.Вывести(ОбластиМакета.РасчетныеСчетаРеквизиты); - - // Еще расчетные счета - - Если КоличествоРасчетныхСчетов = 2 Тогда - - // Расчетный счет 2 - СтрокаРасчетногоСчета = ИнформацияОСвязях.РасчетныеСчета[1]; - ОбластиМакета.ЕщеРасчетныеСчета.Параметры.Банк = СтрокаРасчетногоСчета.Банк; - ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеРасчетныеСчета); - БанковскиеРеквизиты = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ?(ЗначениеЗаполнено(СтрокаРасчетногоСчета.КоррСчет), - НСтр("ru='р/с %1, БИК %2, корр. счет %3'"), - НСтр("ru='р/с %1, БИК %2'")), - СтрокаРасчетногоСчета.НомерСчета, - СтрокаРасчетногоСчета.БИК, - СтрокаРасчетногоСчета.КоррСчет); - ОбластиМакета.РасчетныеСчетаРеквизиты.Параметры.БанковскиеРеквизиты = БанковскиеРеквизиты; - ТабличныйДокумент.Вывести(ОбластиМакета.РасчетныеСчетаРеквизиты); - - ИначеЕсли КоличествоРасчетныхСчетов > 2 Тогда - - // Свернуто - ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, "РасчетныеСчета", КоличествоРасчетныхСчетов); - - // Развернуто - СтрокаОбласти = ОбластиРасшифровки.Добавить(); - СтрокаОбласти.ИмяОбласти = "РасчетныеСчета"; - СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; - Для НомерСтроки = 2 По КоличествоРасчетныхСчетов Цикл - // Расчетные счета 2 - N - СтрокаРасчетногоСчета = ИнформацияОСвязях.РасчетныеСчета[НомерСтроки - 1]; - ОбластиМакета.ЕщеРасчетныеСчета.Параметры.Банк = СтрокаРасчетногоСчета.Банк; - ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеРасчетныеСчета); - БанковскиеРеквизиты = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ?(ЗначениеЗаполнено(СтрокаРасчетногоСчета.КоррСчет), - НСтр("ru='р/с %1, БИК %2, корр. счет %3'"), - НСтр("ru='р/с %1, БИК %2'")), - СтрокаРасчетногоСчета.НомерСчета, - СтрокаРасчетногоСчета.БИК, - СтрокаРасчетногоСчета.КоррСчет); - ОбластиМакета.РасчетныеСчетаРеквизиты.Параметры.БанковскиеРеквизиты = БанковскиеРеквизиты; - ТабличныйДокумент.Вывести(ОбластиМакета.РасчетныеСчетаРеквизиты); - КонецЦикла; - Расшифровка = Новый Структура("Действие,ИмяОбласти", "Свернуть", "РасчетныеСчета"); - ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; - ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); - СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; - ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; - КонецЕсли; - - ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); - - КонецЕсли; - -КонецПроцедуры - Процедура ВывестиРазделВидыДеятельности(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) + КоличествоВидовДеятельности = ИнформацияОСвязях.ВидыДеятельности.Количество(); + Если КоличествоВидовДеятельности = 0 Тогда + Возврат; + КонецЕсли; + ОбластиМакета = ПараметрыВывода.ОбластиМакета; ОбластиРасшифровки = ПараметрыВывода.ОбластиРасшифровки; ЭтоЮридическоеЛицо = ПараметрыВывода.ЭтоЮридическоеЛицо; - КоличествоВидовДеятельности = ИнформацияОСвязях.ВидыДеятельности.Количество(); - Если КоличествоВидовДеятельности > 0 Тогда + // Вид деятельности 1 + СтрокаВидаДеятельности = ИнформацияОСвязях.ВидыДеятельности[0]; + ОбластиМакета.ВидыДеятельности.Параметры.Заполнить(СтрокаВидаДеятельности); + ТабличныйДокумент.Вывести(ОбластиМакета.ВидыДеятельности); + + // Еще виды деятельности + + Если КоличествоВидовДеятельности = 2 Тогда - // Вид деятельности 1 - СтрокаВидаДеятельности = ИнформацияОСвязях.ВидыДеятельности[0]; - ОбластиМакета.ВидыДеятельности.Параметры.Заполнить(СтрокаВидаДеятельности); - ТабличныйДокумент.Вывести(ОбластиМакета.ВидыДеятельности); + // Вид деятельности 2 + СтрокаВидаДеятельности = ИнформацияОСвязях.ВидыДеятельности[1]; + ОбластиМакета.ЕщеВидыДеятельности.Параметры.Заполнить(СтрокаВидаДеятельности); + ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеВидыДеятельности); - // Еще виды деятельности + ИначеЕсли КоличествоВидовДеятельности > 2 Тогда - Если КоличествоВидовДеятельности = 2 Тогда - - // Вид деятельности 2 - СтрокаВидаДеятельности = ИнформацияОСвязях.ВидыДеятельности[1]; + // Свернуто + ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, ПараметрыВывода.ИмяДокумента, + "ВидыДеятельности", КоличествоВидовДеятельности); + + // Развернуто + СтрокаОбласти = ОбластиРасшифровки.Добавить(); + СтрокаОбласти.ИмяОбласти = "ВидыДеятельности"; + СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; + Для НомерСтроки = 2 По КоличествоВидовДеятельности Цикл + // Виды деятельности 2 - N + СтрокаВидаДеятельности = ИнформацияОСвязях.ВидыДеятельности[НомерСтроки - 1]; ОбластиМакета.ЕщеВидыДеятельности.Параметры.Заполнить(СтрокаВидаДеятельности); ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеВидыДеятельности); - - ИначеЕсли КоличествоВидовДеятельности > 2 Тогда - - // Свернуто - ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, "ВидыДеятельности", КоличествоВидовДеятельности); - - // Развернуто - СтрокаОбласти = ОбластиРасшифровки.Добавить(); - СтрокаОбласти.ИмяОбласти = "ВидыДеятельности"; - СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; - Для НомерСтроки = 2 По КоличествоВидовДеятельности Цикл - // Виды деятельности 2 - N - СтрокаВидаДеятельности = ИнформацияОСвязях.ВидыДеятельности[НомерСтроки - 1]; - ОбластиМакета.ЕщеВидыДеятельности.Параметры.Заполнить(СтрокаВидаДеятельности); - ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеВидыДеятельности); - КонецЦикла; - Расшифровка = Новый Структура("Действие,ИмяОбласти", "Свернуть", "ВидыДеятельности"); - ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; - ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); - СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; - ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; - КонецЕсли; - - ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); - + КонецЦикла; + Расшифровка = Новый Структура("Действие,ИмяДокумента,ИмяОбласти", + "Свернуть", ПараметрыВывода.ИмяДокумента, "ВидыДеятельности"); + ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); + СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; КонецЕсли; - + + ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); + КонецПроцедуры Процедура ВывестиРазделЛицензии(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) + КоличествоЛицензий = ИнформацияОСвязях.Лицензии.Количество(); + Если КоличествоЛицензий = 0 Тогда + Возврат; + КонецЕсли; + ОбластиМакета = ПараметрыВывода.ОбластиМакета; ОбластиРасшифровки = ПараметрыВывода.ОбластиРасшифровки; ЭтоЮридическоеЛицо = ПараметрыВывода.ЭтоЮридическоеЛицо; - КоличествоЛицензий = ИнформацияОСвязях.Лицензии.Количество(); - Если КоличествоЛицензий > 0 Тогда + // Лицензия 1 + СтрокаЛицензии = ИнформацияОСвязях.Лицензии[0]; + ОбластиМакета.Лицензии.Параметры.Лицензия = СтрокаЛицензии.Лицензия; + ТабличныйДокумент.Вывести(ОбластиМакета.Лицензии); + Если НЕ ПустаяСтрока(СтрокаЛицензии.ОписаниеЛицензии) Тогда + ОбластиМакета.ЛицензииОписание.Параметры.ОписаниеЛицензии = СтрокаЛицензии.ОписаниеЛицензии; + ТабличныйДокумент.Вывести(ОбластиМакета.ЛицензииОписание); + КонецЕсли; + + // Еще лицензии + + Если КоличествоЛицензий = 2 Тогда - // Лицензия 1 - СтрокаЛицензии = ИнформацияОСвязях.Лицензии[0]; - ОбластиМакета.Лицензии.Параметры.Лицензия = СтрокаЛицензии.Лицензия; - ТабличныйДокумент.Вывести(ОбластиМакета.Лицензии); + // Лицензия 2 + СтрокаЛицензии = ИнформацияОСвязях.Лицензии[1]; + ОбластиМакета.ЕщеЛицензии.Параметры.Лицензия = СтрокаЛицензии.Лицензия; + ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеЛицензии); Если НЕ ПустаяСтрока(СтрокаЛицензии.ОписаниеЛицензии) Тогда ОбластиМакета.ЛицензииОписание.Параметры.ОписаниеЛицензии = СтрокаЛицензии.ОписаниеЛицензии; ТабличныйДокумент.Вывести(ОбластиМакета.ЛицензииОписание); КонецЕсли; - // Еще лицензии + ИначеЕсли КоличествоЛицензий > 2 Тогда - Если КоличествоЛицензий = 2 Тогда - - // Лицензия 2 - СтрокаЛицензии = ИнформацияОСвязях.Лицензии[1]; + // Свернуто + ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, ПараметрыВывода.ИмяДокумента, + "Лицензии", КоличествоЛицензий); + + // Развернуто + СтрокаОбласти = ОбластиРасшифровки.Добавить(); + СтрокаОбласти.ИмяОбласти = "Лицензии"; + СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; + Для НомерСтроки = 2 По КоличествоЛицензий Цикл + // Лицензии 2 - N + СтрокаЛицензии = ИнформацияОСвязях.Лицензии[НомерСтроки-1]; ОбластиМакета.ЕщеЛицензии.Параметры.Лицензия = СтрокаЛицензии.Лицензия; ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеЛицензии); Если НЕ ПустаяСтрока(СтрокаЛицензии.ОписаниеЛицензии) Тогда ОбластиМакета.ЛицензииОписание.Параметры.ОписаниеЛицензии = СтрокаЛицензии.ОписаниеЛицензии; ТабличныйДокумент.Вывести(ОбластиМакета.ЛицензииОписание); КонецЕсли; - - ИначеЕсли КоличествоЛицензий > 2 Тогда - - // Свернуто - ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, "Лицензии", КоличествоЛицензий); - - // Развернуто - СтрокаОбласти = ОбластиРасшифровки.Добавить(); - СтрокаОбласти.ИмяОбласти = "Лицензии"; - СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; - Для НомерСтроки = 2 По КоличествоЛицензий Цикл - // Лицензии 2 - N - СтрокаЛицензии = ИнформацияОСвязях.Лицензии[НомерСтроки-1]; - ОбластиМакета.ЕщеЛицензии.Параметры.Лицензия = СтрокаЛицензии.Лицензия; - ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеЛицензии); - Если НЕ ПустаяСтрока(СтрокаЛицензии.ОписаниеЛицензии) Тогда - ОбластиМакета.ЛицензииОписание.Параметры.ОписаниеЛицензии = СтрокаЛицензии.ОписаниеЛицензии; - ТабличныйДокумент.Вывести(ОбластиМакета.ЛицензииОписание); - КонецЕсли; - КонецЦикла; - Расшифровка = Новый Структура("Действие,ИмяОбласти", "Свернуть", "Лицензии"); - ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; - ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); - СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; - ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; - КонецЕсли; - - ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); - + КонецЦикла; + Расшифровка = Новый Структура("Действие,ИмяДокумента,ИмяОбласти", + "Свернуть", ПараметрыВывода.ИмяДокумента, "Лицензии"); + ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); + СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; КонецЕсли; - + + ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); + КонецПроцедуры Процедура ВывестиРазделЮридическийАдрес(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) @@ -426,16 +692,12 @@ // Сколько всего ИнформацияОСвязях.ОрганизацииПоАдресу.Сортировать("НаименованиеОрганизации"); СколькоЕщеОрганизаций = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='По этому адресу %1 еще %2 %3:'"), + НСтр("ru='По этому адресу %1 еще %2:'"), ?(КоличествоОрганизаций % 10 = 1 И НЕ КоличествоОрганизаций % 100 = 11, НСтр("ru='зарегистрирована'"), НСтр("ru='зарегистрированы'")), - Формат(КоличествоОрганизаций, "ЧГ="), - ?(КоличествоОрганизаций % 10 = 1 И Цел(КоличествоОрганизаций/10) <> 1, - НСтр("ru='организация'"), - ?(КоличествоОрганизаций % 10 > 1 И КоличествоОрганизаций % 10 < 5 И Цел(КоличествоОрганизаций/10) <> 1, - НСтр("ru='организации'"), - НСтр("ru='организаций'")))); + СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью( + КоличествоОрганизаций, "организация,организации,организаций")); ОбластиМакета.СколькоЕщеОрганизаций.Параметры.СколькоЕщеОрганизаций = СколькоЕщеОрганизаций; ТабличныйДокумент.Вывести(ОбластиМакета.СколькоЕщеОрганизаций); @@ -452,7 +714,8 @@ ИначеЕсли КоличествоОрганизаций > 2 Тогда // Свернуто - ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, "ОрганизацииПоАдресу", КоличествоОрганизаций); + ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, ПараметрыВывода.ИмяДокумента, + "ОрганизацииПоАдресу", КоличествоОрганизаций); // Развернуто СтрокаОбласти = ОбластиРасшифровки.Добавить(); @@ -463,7 +726,8 @@ ВывестиСтрокуОбОрганизации(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", ИнформацияОСвязях.ОрганизацииПоАдресу[НомерСтроки-1]); КонецЦикла; - Расшифровка = Новый Структура("Действие,ИмяОбласти", "Свернуть", "ОрганизацииПоАдресу"); + Расшифровка = Новый Структура("Действие,ИмяДокумента,ИмяОбласти", + "Свернуть", ПараметрыВывода.ИмяДокумента, "ОрганизацииПоАдресу"); ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; @@ -476,73 +740,6 @@ КонецПроцедуры -Процедура ВывестиРазделПочтовыйАдрес(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) - - ОбластиМакета = ПараметрыВывода.ОбластиМакета; - ОбластиРасшифровки = ПараметрыВывода.ОбластиРасшифровки; - ЭтоЮридическоеЛицо = ПараметрыВывода.ЭтоЮридическоеЛицо; - - Если ЗначениеЗаполнено(ИнформацияОСвязях.ПочтовыйАдрес) - И (НЕ ЭтоЮридическоеЛицо - ИЛИ ИнформацияОСвязях.ПочтовыйАдрес <> ИнформацияОСвязях.ЮридическийАдрес.Представление) Тогда - - ОбластиМакета.ПочтовыйАдрес.Параметры.ПочтовыйАдрес = ИнформацияОСвязях.ПочтовыйАдрес; - ТабличныйДокумент.Вывести(ОбластиМакета.ПочтовыйАдрес); - ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); - - КонецЕсли; - -КонецПроцедуры - -Процедура ВывестиРазделКонтакты(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) - - ОбластиМакета = ПараметрыВывода.ОбластиМакета; - ОбластиРасшифровки = ПараметрыВывода.ОбластиРасшифровки; - ЭтоЮридическоеЛицо = ПараметрыВывода.ЭтоЮридическоеЛицо; - - КоличествоКонтактов = ИнформацияОСвязях.КонтактныеЛица.Количество(); - Если КоличествоКонтактов > 0 Тогда - - // Контактное лицо 1 - СтрокаКонтактногоЛица = ИнформацияОСвязях.КонтактныеЛица[0]; - ОбластиМакета.Контакты.Параметры.КонтактноеЛицо = СтрокаКонтактногоЛица.Представление; - ТабличныйДокумент.Вывести(ОбластиМакета.Контакты); - - Если КоличествоКонтактов = 2 Тогда - - // Контактное лицо 2 - СтрокаКонтактногоЛица = ИнформацияОСвязях.КонтактныеЛица[1]; - ОбластиМакета.ЕщеКонтакты.Параметры.КонтактноеЛицо = СтрокаКонтактногоЛица.Представление; - ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеКонтакты); - - ИначеЕсли КоличествоКонтактов > 2 Тогда - - // Свернуто - ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, "КонтактныеЛица", КоличествоКонтактов); - - // Развернуто - СтрокаОбласти = ОбластиРасшифровки.Добавить(); - СтрокаОбласти.ИмяОбласти = "КонтактныеЛица"; - СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; - Для НомерСтроки = 2 По КоличествоКонтактов Цикл - // Контактные лица 2 - N - СтрокаКонтактногоЛица = ИнформацияОСвязях.КонтактныеЛица[НомерСтроки - 1]; - ОбластиМакета.ЕщеКонтакты.Параметры.КонтактноеЛицо = СтрокаКонтактногоЛица.Представление; - ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеКонтакты); - КонецЦикла; - Расшифровка = Новый Структура("Действие,ИмяОбласти", "Свернуть", "КонтактныеЛица"); - ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; - ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); - СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; - ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; - КонецЕсли; - - ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); - - КонецЕсли; - -КонецПроцедуры - Процедура ВывестиРазделУставныйКапитал(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) ОбластиМакета = ПараметрыВывода.ОбластиМакета; @@ -576,187 +773,286 @@ ИЛИ ИнформацияОСвязях.ОрганизацииГдеУчредитель.Количество() > 0; КонецЕсли; - Если ВыводитьСекциюРуководитель Тогда - - Если ЭтоЮридическоеЛицо Тогда - Руководитель = ИнформацияОСвязях.Руководитель.Представление; - Если ЗначениеЗаполнено(ИнформацияОСвязях.Телефон) Тогда - Руководитель = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='%1, тел. %2'"), - Руководитель, - ИнформацияОСвязях.Телефон.Представление); - КонецЕсли; - ДолжностьРуководителя = ИнформацияОСвязях.Руководитель.Должность; - Если ЗначениеЗаполнено(ИнформацияОСвязях.Руководитель.ДатаЗаписи) Тогда - ДолжностьРуководителя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='%1 с %2'"), - ДолжностьРуководителя, - Формат(ИнформацияОСвязях.Руководитель.ДатаЗаписи, "ДЛФ=D")); - КонецЕсли; - ОбластиМакета.Руководитель.Параметры.Руководитель = Руководитель; - ОбластиМакета.Руководитель.Параметры.ДолжностьРуководителя = ДолжностьРуководителя; - ТабличныйДокумент.Вывести(ОбластиМакета.Руководитель); - Иначе - ОбластиМакета.Предприниматель.Параметры.Предприниматель = ИнформацияОСвязях.Наименование; - ТабличныйДокумент.Вывести(ОбластиМакета.Предприниматель); - КонецЕсли; - - // Организации, где еще этот руководитель (предприниматель) является руководителем - - КоличествоОрганизаций = ИнформацияОСвязях.ОрганизацииГдеРуководитель.Количество(); - Если КоличествоОрганизаций > 0 Тогда - - // Сколько всего - ИнформацияОСвязях.ОрганизацииГдеРуководитель.Сортировать("НаименованиеОрганизации"); - СколькоЕщеОрганизаций = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ?(ЭтоЮридическоеЛицо, - НСтр("ru='Является руководителем еще в %1'"), - НСтр("ru='Является руководителем в %1'")), - СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью( - КоличествоОрганизаций, - НСтр("ru='организации,организациях,организациях'"))) - + ?(ИнформацияОСвязях.ОрганизацииГдеРуководительПоФИО, - " (" + НСтр("ru='поиск проведен по ФИО и может быть неточным'") + ")", - ""); - ОбластиМакета.СколькоЕщеОрганизаций.Параметры.СколькоЕщеОрганизаций = СколькоЕщеОрганизаций; - ТабличныйДокумент.Вывести(ОбластиМакета.СколькоЕщеОрганизаций); - - // Организация 1 - ВывестиСтрокуОбОрганизации(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", - ИнформацияОСвязях.ОрганизацииГдеРуководитель[0]); - - Если КоличествоОрганизаций = 2 Тогда - - // Организация 2 - ВывестиСтрокуОбОрганизации(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", - ИнформацияОСвязях.ОрганизацииГдеРуководитель[1]); - - ИначеЕсли КоличествоОрганизаций > 2 Тогда - - // Свернуто - ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, "ОрганизацииГдеРуководитель", КоличествоОрганизаций); - - // Развернуто - СтрокаОбласти = ОбластиРасшифровки.Добавить(); - СтрокаОбласти.ИмяОбласти = "ОрганизацииГдеРуководитель"; - СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; - Для НомерСтроки = 2 По КоличествоОрганизаций Цикл - // Организации 2 - N - ВывестиСтрокуОбОрганизации(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", - ИнформацияОСвязях.ОрганизацииГдеРуководитель[НомерСтроки-1]); - КонецЦикла; - Расшифровка = Новый Структура("Действие,ИмяОбласти", "Свернуть", "ОрганизацииГдеРуководитель"); - ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; - ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); - СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; - ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; - КонецЕсли; - - КонецЕсли; - - // Организации, где еще этот руководитель (предприниматель) является учредителем - - КоличествоОрганизаций = ИнформацияОСвязях.ОрганизацииГдеУчредитель.Количество(); - Если КоличествоОрганизаций > 0 Тогда - - // Сколько всего - ИнформацияОСвязях.ОрганизацииГдеУчредитель.Сортировать("НаименованиеОрганизации"); - ВыводитьЕще = ЭтоЮридическоеЛицо - И ((ЗначениеЗаполнено(ИнформацияОСвязях.Руководитель.ИНН) - И ИнформацияОСвязях.Учредители.Найти(ИнформацияОСвязях.Руководитель.ИНН, "ИНН") <> Неопределено) - ИЛИ (НЕ ЗначениеЗаполнено(ИнформацияОСвязях.Руководитель.ИНН) - И ИнформацияОСвязях.Учредители.Найти(ИнформацияОСвязях.Руководитель.Представление, "Учредитель") <> Неопределено)); - СколькоЕщеОрганизаций = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ?(ВыводитьЕще, - НСтр("ru='Является учредителем еще в %1'"), - НСтр("ru='Является учредителем в %1'")), - СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью( - КоличествоОрганизаций, - НСтр("ru='организации,организациях,организациях'"))) - + ?(ИнформацияОСвязях.ОрганизацииГдеУчредительПоФИО, - " (" + НСтр("ru='поиск проведен по ФИО и может быть неточным'") + ")", - ""); - ОбластиМакета.СколькоЕщеОрганизаций.Параметры.СколькоЕщеОрганизаций = СколькоЕщеОрганизаций; - ТабличныйДокумент.Вывести(ОбластиМакета.СколькоЕщеОрганизаций); - - // Организация 1 - ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизацииГдеУчредитель", - ИнформацияОСвязях.ОрганизацииГдеУчредитель[0]); - - Если КоличествоОрганизаций = 2 Тогда - - // Организация 2 - ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизацииГдеУчредитель", - ИнформацияОСвязях.ОрганизацииГдеУчредитель[1]); - - ИначеЕсли КоличествоОрганизаций > 2 Тогда - - // Свернуто - ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, "ОрганизацииГдеУчредитель", КоличествоОрганизаций); - - // Развернуто - СтрокаОбласти = ОбластиРасшифровки.Добавить(); - СтрокаОбласти.ИмяОбласти = "ОрганизацииГдеУчредитель"; - СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; - Для НомерСтроки = 2 По КоличествоОрганизаций Цикл - // Организации 2 - N - ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизацииГдеУчредитель", - ИнформацияОСвязях.ОрганизацииГдеУчредитель[НомерСтроки - 1]); - КонецЦикла; - Расшифровка = Новый Структура("Действие,ИмяОбласти", "Свернуть", "ОрганизацииГдеУчредитель"); - ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; - ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); - СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; - ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; - - КонецЕсли; - - КонецЕсли; - - ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); - + Если НЕ ВыводитьСекциюРуководитель Тогда + Возврат; КонецЕсли; + + Если ЭтоЮридическоеЛицо Тогда + Руководитель = ИнформацияОСвязях.Руководитель.Представление; + Если ЗначениеЗаполнено(ИнформацияОСвязях.Телефон) Тогда + Руководитель = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1, тел. %2'"), + Руководитель, + ИнформацияОСвязях.Телефон.Представление); + КонецЕсли; + ДолжностьРуководителя = ИнформацияОСвязях.Руководитель.Должность; + Если ЗначениеЗаполнено(ИнформацияОСвязях.Руководитель.ДатаЗаписи) Тогда + ДолжностьРуководителя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 с %2'"), + ДолжностьРуководителя, + Формат(ИнформацияОСвязях.Руководитель.ДатаЗаписи, "ДЛФ=D")); + КонецЕсли; + ОбластиМакета.Руководитель.Параметры.Руководитель = Руководитель; + ОбластиМакета.Руководитель.Параметры.ДолжностьРуководителя = ДолжностьРуководителя; + ТабличныйДокумент.Вывести(ОбластиМакета.Руководитель); + Иначе + ОбластиМакета.Предприниматель.Параметры.Предприниматель = ИнформацияОСвязях.Наименование; + ТабличныйДокумент.Вывести(ОбластиМакета.Предприниматель); + КонецЕсли; + + // Организации, где еще этот руководитель (предприниматель) является руководителем + + КоличествоОрганизаций = ИнформацияОСвязях.ОрганизацииГдеРуководитель.Количество(); + Если КоличествоОрганизаций > 0 Тогда + + // Сколько всего + ИнформацияОСвязях.ОрганизацииГдеРуководитель.Сортировать("НаименованиеОрганизации"); + СколькоЕщеОрганизаций = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ?(ЭтоЮридическоеЛицо, + НСтр("ru='Является руководителем еще в %1%2:'"), + НСтр("ru='Является руководителем в %1%2:'")), + СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью( + КоличествоОрганизаций, "организации,организациях, организациях"), + ?(ИнформацияОСвязях.ОрганизацииГдеРуководительПоФИО, + " (" + НСтр("ru='поиск проведен по ФИО и может быть неточным'") + ")", + "")); + ОбластиМакета.СколькоЕщеОрганизаций.Параметры.СколькоЕщеОрганизаций = СколькоЕщеОрганизаций; + ТабличныйДокумент.Вывести(ОбластиМакета.СколькоЕщеОрганизаций); + + // Организация 1 + ВывестиСтрокуОбОрганизации(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", + ИнформацияОСвязях.ОрганизацииГдеРуководитель[0]); + + Если КоличествоОрганизаций = 2 Тогда + + // Организация 2 + ВывестиСтрокуОбОрганизации(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", + ИнформацияОСвязях.ОрганизацииГдеРуководитель[1]); + + ИначеЕсли КоличествоОрганизаций > 2 Тогда + + // Свернуто + ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, ПараметрыВывода.ИмяДокумента, + "ОрганизацииГдеРуководитель", КоличествоОрганизаций); + + // Развернуто + СтрокаОбласти = ОбластиРасшифровки.Добавить(); + СтрокаОбласти.ИмяОбласти = "ОрганизацииГдеРуководитель"; + СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; + Для НомерСтроки = 2 По КоличествоОрганизаций Цикл + // Организации 2 - N + ВывестиСтрокуОбОрганизации(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", + ИнформацияОСвязях.ОрганизацииГдеРуководитель[НомерСтроки-1]); + КонецЦикла; + Расшифровка = Новый Структура("Действие,ИмяДокумента,ИмяОбласти", + "Свернуть", ПараметрыВывода.ИмяДокумента, "ОрганизацииГдеРуководитель"); + ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); + СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; + КонецЕсли; + + КонецЕсли; + + // Организации, где еще этот руководитель (предприниматель) является учредителем + + КоличествоОрганизаций = ИнформацияОСвязях.ОрганизацииГдеУчредитель.Количество(); + Если КоличествоОрганизаций > 0 Тогда + + // Сколько всего + ИнформацияОСвязях.ОрганизацииГдеУчредитель.Сортировать("НаименованиеОрганизации"); + ВыводитьЕще = ЭтоЮридическоеЛицо + И ((ЗначениеЗаполнено(ИнформацияОСвязях.Руководитель.ИНН) + И ИнформацияОСвязях.Учредители.Найти(ИнформацияОСвязях.Руководитель.ИНН, "ИНН") <> Неопределено) + ИЛИ (НЕ ЗначениеЗаполнено(ИнформацияОСвязях.Руководитель.ИНН) + И ИнформацияОСвязях.Учредители.Найти(ИнформацияОСвязях.Руководитель.Представление, "Учредитель") <> Неопределено)); + СколькоЕщеОрганизаций = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ?(ВыводитьЕще, + НСтр("ru='Является учредителем еще в %1%2:'"), + НСтр("ru='Является учредителем в %1%2:'")), + СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью( + КоличествоОрганизаций, "организации,организациях, организациях"), + ?(ИнформацияОСвязях.ОрганизацииГдеУчредительПоФИО, + " (" + НСтр("ru='поиск проведен по ФИО и может быть неточным'") + ")", + "")); + ОбластиМакета.СколькоЕщеОрганизаций.Параметры.СколькоЕщеОрганизаций = СколькоЕщеОрганизаций; + ТабличныйДокумент.Вывести(ОбластиМакета.СколькоЕщеОрганизаций); + + // Организация 1 + ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", + ИнформацияОСвязях.ОрганизацииГдеУчредитель[0]); + + Если КоличествоОрганизаций = 2 Тогда + + // Организация 2 + ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", + ИнформацияОСвязях.ОрганизацииГдеУчредитель[1]); + + ИначеЕсли КоличествоОрганизаций > 2 Тогда + + // Свернуто + ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, ПараметрыВывода.ИмяДокумента, + "ОрганизацииГдеУчредитель", КоличествоОрганизаций); + + // Развернуто + СтрокаОбласти = ОбластиРасшифровки.Добавить(); + СтрокаОбласти.ИмяОбласти = "ОрганизацииГдеУчредитель"; + СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; + Для НомерСтроки = 2 По КоличествоОрганизаций Цикл + // Организации 2 - N + ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", + ИнформацияОСвязях.ОрганизацииГдеУчредитель[НомерСтроки - 1]); + КонецЦикла; + Расшифровка = Новый Структура("Действие,ИмяДокумента,ИмяОбласти", + "Свернуть", ПараметрыВывода.ИмяДокумента, "ОрганизацииГдеУчредитель"); + ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); + СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; + + КонецЕсли; + + КонецЕсли; + + ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); КонецПроцедуры Процедура ВывестиРазделУчрежденныеФирмы(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) - ОбластиМакета = ПараметрыВывода.ОбластиМакета; - ОбластиРасшифровки = ПараметрыВывода.ОбластиРасшифровки; ЭтоЮридическоеЛицо = ПараметрыВывода.ЭтоЮридическоеЛицо; + Если НЕ ЭтоЮридическоеЛицо Тогда + Возврат; + КонецЕсли; - Если ЭтоЮридическоеЛицо Тогда + КоличествоОрганизаций = ИнформацияОСвязях.УчрежденныеФирмы.Количество(); + Если КоличествоОрганизаций = 0 Тогда + Возврат; + КонецЕсли; - КоличествоОрганизаций = ИнформацияОСвязях.УчрежденныеФирмы.Количество(); - Если КоличествоОрганизаций > 0 Тогда + ОбластиМакета = ПараметрыВывода.ОбластиМакета; + ОбластиРасшифровки = ПараметрыВывода.ОбластиРасшифровки; + + ИнформацияОСвязях.УчрежденныеФирмы.Сортировать("НаименованиеОрганизации"); + + // Организация 1 + ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, "УчрежденныеФирмы", + ИнформацияОСвязях.УчрежденныеФирмы[0]); + + Если КоличествоОрганизаций = 2 Тогда + + // Организация 2 + ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, "ЕщеУчрежденныеФирмы", + ИнформацияОСвязях.УчрежденныеФирмы[1]); + + ИначеЕсли КоличествоОрганизаций > 2 Тогда + + // Свернуто + ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, ПараметрыВывода.ИмяДокумента, + "УчрежденныеФирмы", КоличествоОрганизаций); + + // Развернуто + СтрокаОбласти = ОбластиРасшифровки.Добавить(); + СтрокаОбласти.ИмяОбласти = "УчрежденныеФирмы"; + СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; + Для НомерСтроки = 2 По КоличествоОрганизаций Цикл + // Организации 2 - N + ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, "ЕщеУчрежденныеФирмы", + ИнформацияОСвязях.УчрежденныеФирмы[НомерСтроки - 1]); + КонецЦикла; + Расшифровка = Новый Структура("Действие,ИмяДокумента,ИмяОбласти", + "Свернуть", ПараметрыВывода.ИмяДокумента, "УчрежденныеФирмы"); + ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); + СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; + + КонецЕсли; + + ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); + +КонецПроцедуры + +Процедура ВывестиРазделУчредители(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) + + ЭтоЮридическоеЛицо = ПараметрыВывода.ЭтоЮридическоеЛицо; + Если НЕ ЭтоЮридическоеЛицо Тогда + Возврат; + КонецЕсли; + + КоличествоУчредителей = ИнформацияОСвязях.Учредители.Количество(); + Если КоличествоУчредителей = 0 Тогда + Возврат; + КонецЕсли; - ИнформацияОСвязях.УчрежденныеФирмы.Сортировать("НаименованиеОрганизации"); + ОбластиМакета = ПараметрыВывода.ОбластиМакета; + ОбластиРасшифровки = ПараметрыВывода.ОбластиРасшифровки; + + Для НомерУчредителя = 1 По КоличествоУчредителей Цикл + + // Учредитель + + ПрефиксОбластиРасшифровки = "Учредитель" + Формат(НомерУчредителя, "ЧГ="); + + СтрокаУчредителя = ИнформацияОСвязях.Учредители[НомерУчредителя - 1]; + Если НомерУчредителя > 1 Тогда + ТабличныйДокумент.Вывести(ОбластиМакета.РазделительСтрокСписка); + КонецЕсли; + ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, ?(НомерУчредителя = 1, "Учредители", "ЕщеУчредители"), + СтрокаУчредителя); + + // Организации, где еще этот учредитель является руководителем + + КоличествоОрганизаций = СтрокаУчредителя.ОрганизацииГдеРуководитель.Количество(); + Если КоличествоОрганизаций > 0 Тогда + + // Сколько всего + СтрокаУчредителя.ОрганизацииГдеРуководитель.Сортировать("НаименованиеОрганизации"); + ИмяОбластиРасшифровки = ПрефиксОбластиРасшифровки + "ОрганизацииГдеРуководитель"; + ВыводитьЕще = ИнформацияОСвязях.Руководитель <> Неопределено + И ((ЗначениеЗаполнено(ИнформацияОСвязях.Руководитель.ИНН) + И СтрокаУчредителя.ИНН = ИнформацияОСвязях.Руководитель.ИНН) + ИЛИ (НЕ ЗначениеЗаполнено(ИнформацияОСвязях.Руководитель.ИНН) + И СтрокаУчредителя.Учредитель = ИнформацияОСвязях.Руководитель.Представление)); + СколькоЕщеОрганизаций = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ?(ВыводитьЕще, + НСтр("ru='Является руководителем еще в %1%2:'"), + НСтр("ru='Является руководителем в %1%2:'")), + СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью( + КоличествоОрганизаций, "организации,организациях, организациях"), + ?(СтрокаУчредителя.ОрганизацииГдеРуководительПоФИО, + " (" + НСтр("ru='поиск проведен по ФИО и может быть неточным'") + ")", + "")); + ОбластиМакета.СколькоЕщеОрганизаций.Параметры.СколькоЕщеОрганизаций = СколькоЕщеОрганизаций; + ТабличныйДокумент.Вывести(ОбластиМакета.СколькоЕщеОрганизаций); // Организация 1 - ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, "УчрежденныеФирмы", - ИнформацияОСвязях.УчрежденныеФирмы[0]); + ВывестиСтрокуОбОрганизации(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", + СтрокаУчредителя.ОрганизацииГдеРуководитель[0]); Если КоличествоОрганизаций = 2 Тогда // Организация 2 - ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, "ЕщеУчрежденныеФирмы", - ИнформацияОСвязях.УчрежденныеФирмы[1]); + ВывестиСтрокуОбОрганизации(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", + СтрокаУчредителя.ОрганизацииГдеРуководитель[1]); ИначеЕсли КоличествоОрганизаций > 2 Тогда // Свернуто - ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, "УчрежденныеФирмы", КоличествоОрганизаций); - + ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, ПараметрыВывода.ИмяДокумента, + ИмяОбластиРасшифровки, КоличествоОрганизаций); + // Развернуто СтрокаОбласти = ОбластиРасшифровки.Добавить(); - СтрокаОбласти.ИмяОбласти = "УчрежденныеФирмы"; + СтрокаОбласти.ИмяОбласти = ИмяОбластиРасшифровки; СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; Для НомерСтроки = 2 По КоличествоОрганизаций Цикл // Организации 2 - N - ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, "ЕщеУчрежденныеФирмы", - ИнформацияОСвязях.УчрежденныеФирмы[НомерСтроки - 1]); + ВывестиСтрокуОбОрганизации(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", + СтрокаУчредителя.ОрганизацииГдеРуководитель[НомерСтроки-1]); КонецЦикла; - Расшифровка = Новый Структура("Действие,ИмяОбласти", "Свернуть", "УчрежденныеФирмы"); + Расшифровка = Новый Структура("Действие,ИмяДокумента,ИмяОбласти", + "Свернуть", ПараметрыВывода.ИмяДокумента, ИмяОбластиРасшифровки); ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; @@ -764,241 +1060,176 @@ КонецЕсли; - ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Процедура ВывестиРазделУчредители(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) - - ОбластиМакета = ПараметрыВывода.ОбластиМакета; - ОбластиРасшифровки = ПараметрыВывода.ОбластиРасшифровки; - ЭтоЮридическоеЛицо = ПараметрыВывода.ЭтоЮридическоеЛицо; + // Организации, где еще этот учредитель является учредителем - Если ЭтоЮридическоеЛицо Тогда - - КоличествоУчредителей = ИнформацияОСвязях.Учредители.Количество(); - Если КоличествоУчредителей > 0 Тогда + КоличествоОрганизаций = СтрокаУчредителя.ОрганизацииГдеУчредитель.Количество(); + Если КоличествоОрганизаций > 0 Тогда - Для НомерУчредителя = 1 По КоличествоУчредителей Цикл - - // Учредитель - - ПрефиксОбластиРасшифровки = "Учредитель" + Формат(НомерУчредителя, "ЧГ="); - - СтрокаУчредителя = ИнформацияОСвязях.Учредители[НомерУчредителя - 1]; - Если НомерУчредителя > 1 Тогда - ТабличныйДокумент.Вывести(ОбластиМакета.РазделительСтрокСписка); - КонецЕсли; - ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, ?(НомерУчредителя = 1, "Учредители", "ЕщеУчредители"), - СтрокаУчредителя); - - // Организации, где еще этот учредитель является руководителем + // Сколько всего + СтрокаУчредителя.ОрганизацииГдеУчредитель.Сортировать("НаименованиеОрганизации"); + ИмяОбластиРасшифровки = ПрефиксОбластиРасшифровки + "ОрганизацииГдеУчредитель"; + СколькоЕщеОрганизаций = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Является учредителем еще в %1%2:'"), + СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью( + КоличествоОрганизаций, "организации,организациях, организациях"), + ?(СтрокаУчредителя.ОрганизацииГдеУчредительПоФИО, + " (" + НСтр("ru='поиск проведен по ФИО и может быть неточным'") + ")", + "")); + ОбластиМакета.СколькоЕщеОрганизаций.Параметры.СколькоЕщеОрганизаций = СколькоЕщеОрганизаций; + ТабличныйДокумент.Вывести(ОбластиМакета.СколькоЕщеОрганизаций); - КоличествоОрганизаций = СтрокаУчредителя.ОрганизацииГдеРуководитель.Количество(); - Если КоличествоОрганизаций > 0 Тогда - - // Сколько всего - СтрокаУчредителя.ОрганизацииГдеРуководитель.Сортировать("НаименованиеОрганизации"); - ИмяОбластиРасшифровки = ПрефиксОбластиРасшифровки + "ОрганизацииГдеРуководитель"; - ВыводитьЕще = ИнформацияОСвязях.Руководитель <> Неопределено - И ((ЗначениеЗаполнено(ИнформацияОСвязях.Руководитель.ИНН) - И СтрокаУчредителя.ИНН = ИнформацияОСвязях.Руководитель.ИНН) - ИЛИ (НЕ ЗначениеЗаполнено(ИнформацияОСвязях.Руководитель.ИНН) - И СтрокаУчредителя.Учредитель = ИнформацияОСвязях.Руководитель.Представление)); - СколькоЕщеОрганизаций = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ?(ВыводитьЕще, - НСтр("ru='Является руководителем еще в %1'"), - НСтр("ru='Является руководителем в %1'")), - СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью( - КоличествоОрганизаций, - НСтр("ru='организации,организациях,организациях'"))) - + ?(СтрокаУчредителя.ОрганизацииГдеРуководительПоФИО, - " (" + НСтр("ru='поиск проведен по ФИО и может быть неточным'") + ")", - ""); - ОбластиМакета.СколькоЕщеОрганизаций.Параметры.СколькоЕщеОрганизаций = СколькоЕщеОрганизаций; - ТабличныйДокумент.Вывести(ОбластиМакета.СколькоЕщеОрганизаций); - - // Организация 1 - ВывестиСтрокуОбОрганизации(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", - СтрокаУчредителя.ОрганизацииГдеРуководитель[0]); - - Если КоличествоОрганизаций = 2 Тогда - - // Организация 2 - ВывестиСтрокуОбОрганизации(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", - СтрокаУчредителя.ОрганизацииГдеРуководитель[1]); - - ИначеЕсли КоличествоОрганизаций > 2 Тогда - - // Свернуто - ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, ИмяОбластиРасшифровки, КоличествоОрганизаций); - - // Развернуто - СтрокаОбласти = ОбластиРасшифровки.Добавить(); - СтрокаОбласти.ИмяОбласти = ИмяОбластиРасшифровки; - СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; - Для НомерСтроки = 2 По КоличествоОрганизаций Цикл - // Организации 2 - N - ВывестиСтрокуОбОрганизации(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", - СтрокаУчредителя.ОрганизацииГдеРуководитель[НомерСтроки-1]); - КонецЦикла; - Расшифровка = Новый Структура("Действие,ИмяОбласти", "Свернуть", ИмяОбластиРасшифровки); - ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; - ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); - СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; - ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; - - КонецЕсли; - - КонецЕсли; + // Организация 1 + ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", + СтрокаУчредителя.ОрганизацииГдеУчредитель[0]); + + Если КоличествоОрганизаций = 2 Тогда - // Организации, где еще этот учредитель является учредителем - - КоличествоОрганизаций = СтрокаУчредителя.ОрганизацииГдеУчредитель.Количество(); - Если КоличествоОрганизаций > 0 Тогда - - // Сколько всего - СтрокаУчредителя.ОрганизацииГдеУчредитель.Сортировать("НаименованиеОрганизации"); - ИмяОбластиРасшифровки = ПрефиксОбластиРасшифровки + "ОрганизацииГдеУчредитель"; - СколькоЕщеОрганизаций = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Является учредителем еще в %1'"), - СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью( - КоличествоОрганизаций, - НСтр("ru='организации,организациях,организациях'"))) - + ?(СтрокаУчредителя.ОрганизацииГдеУчредительПоФИО, - " (" + НСтр("ru='поиск проведен по ФИО и может быть неточным'") + ")", - ""); - ОбластиМакета.СколькоЕщеОрганизаций.Параметры.СколькоЕщеОрганизаций = СколькоЕщеОрганизаций; - ТабличныйДокумент.Вывести(ОбластиМакета.СколькоЕщеОрганизаций); - - // Организация 1 - ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизацииГдеУчредитель", - СтрокаУчредителя.ОрганизацииГдеУчредитель[0]); - - Если КоличествоОрганизаций = 2 Тогда - - // Организация 2 - ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизацииГдеУчредитель", - СтрокаУчредителя.ОрганизацииГдеУчредитель[1]); - - ИначеЕсли КоличествоОрганизаций > 2 Тогда - - // Свернуто - ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, ИмяОбластиРасшифровки, КоличествоОрганизаций); - - // Развернуто - СтрокаОбласти = ОбластиРасшифровки.Добавить(); - СтрокаОбласти.ИмяОбласти = ИмяОбластиРасшифровки; - СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; - Для НомерСтроки = 2 По КоличествоОрганизаций Цикл - // Организации 2 - N - ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизацииГдеУчредитель", - СтрокаУчредителя.ОрганизацииГдеУчредитель[НомерСтроки - 1]); - КонецЦикла; - Расшифровка = Новый Структура("Действие,ИмяОбласти", "Свернуть", ИмяОбластиРасшифровки); - ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; - ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); - СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; - ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; - - КонецЕсли; - - КонецЕсли; + // Организация 2 + ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", + СтрокаУчредителя.ОрганизацииГдеУчредитель[1]); - КонецЦикла; - - ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); + ИначеЕсли КоличествоОрганизаций > 2 Тогда + + // Свернуто + ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, ПараметрыВывода.ИмяДокумента, + ИмяОбластиРасшифровки, КоличествоОрганизаций); + // Развернуто + СтрокаОбласти = ОбластиРасшифровки.Добавить(); + СтрокаОбласти.ИмяОбласти = ИмяОбластиРасшифровки; + СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; + Для НомерСтроки = 2 По КоличествоОрганизаций Цикл + // Организации 2 - N + ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, "ЕщеОрганизации", + СтрокаУчредителя.ОрганизацииГдеУчредитель[НомерСтроки - 1]); + КонецЦикла; + Расшифровка = Новый Структура("Действие,ИмяДокумента,ИмяОбласти", + "Свернуть", ПараметрыВывода.ИмяДокумента, ИмяОбластиРасшифровки); + ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); + СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; + + КонецЕсли; + КонецЕсли; - КонецЕсли; + КонецЦикла; + + ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); КонецПроцедуры Процедура ВывестиРазделПодразделения(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) - ОбластиМакета = ПараметрыВывода.ОбластиМакета; - ОбластиРасшифровки = ПараметрыВывода.ОбластиРасшифровки; ЭтоЮридическоеЛицо = ПараметрыВывода.ЭтоЮридическоеЛицо; - - Если ЭтоЮридическоеЛицо Тогда - - КоличествоПодразделений = ИнформацияОСвязях.Подразделения.Количество(); - Если КоличествоПодразделений > 0 Тогда - - // Подразделение 1 - СтрокаПодразделения = ИнформацияОСвязях.Подразделения[0]; - ОбластиМакета.Подразделения.Параметры.ОписаниеПодразделения = СтрокаПодразделения.ОписаниеПодразделения; - ТабличныйДокумент.Вывести(ОбластиМакета.Подразделения); - - // Еще подразделения - - Если КоличествоПодразделений = 2 Тогда - - // Подразделение 2 - СтрокаПодразделения = ИнформацияОСвязях.Подразделения[1]; - ОбластиМакета.ЕщеПодразделения.Параметры.ОписаниеПодразделения = СтрокаПодразделения.ОписаниеПодразделения; - ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеПодразделения); - - ИначеЕсли КоличествоПодразделений > 2 Тогда - - // Свернуто - ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, "Подразделения", КоличествоПодразделений); - - // Развернуто - СтрокаОбласти = ОбластиРасшифровки.Добавить(); - СтрокаОбласти.ИмяОбласти = "Подразделения"; - СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; - Для НомерСтроки = 2 По КоличествоПодразделений Цикл - // Подразделения 2 - N - СтрокаПодразделения = ИнформацияОСвязях.Подразделения[НомерСтроки-1]; - ОбластиМакета.ЕщеПодразделения.Параметры.ОписаниеПодразделения = СтрокаПодразделения.ОписаниеПодразделения; - ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеПодразделения); - КонецЦикла; - Расшифровка = Новый Структура("Действие,ИмяОбласти", "Свернуть", "Подразделения"); - ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; - ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); - СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; - ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; - КонецЕсли; - - ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); - - КонецЕсли; - + Если НЕ ЭтоЮридическоеЛицо Тогда + Возврат; КонецЕсли; - + + КоличествоПодразделений = ИнформацияОСвязях.Подразделения.Количество(); + Если КоличествоПодразделений = 0 Тогда + Возврат; + КонецЕсли; + + ОбластиМакета = ПараметрыВывода.ОбластиМакета; + ОбластиРасшифровки = ПараметрыВывода.ОбластиРасшифровки; + + // Подразделение 1 + СтрокаПодразделения = ИнформацияОСвязях.Подразделения[0]; + ОбластиМакета.Подразделения.Параметры.ОписаниеПодразделения = СтрокаПодразделения.ОписаниеПодразделения; + ТабличныйДокумент.Вывести(ОбластиМакета.Подразделения); + + // Еще подразделения + + Если КоличествоПодразделений = 2 Тогда + + // Подразделение 2 + СтрокаПодразделения = ИнформацияОСвязях.Подразделения[1]; + ОбластиМакета.ЕщеПодразделения.Параметры.ОписаниеПодразделения = СтрокаПодразделения.ОписаниеПодразделения; + ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеПодразделения); + + ИначеЕсли КоличествоПодразделений > 2 Тогда + + // Свернуто + ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, ПараметрыВывода.ИмяДокумента, + "Подразделения", КоличествоПодразделений); + + // Развернуто + СтрокаОбласти = ОбластиРасшифровки.Добавить(); + СтрокаОбласти.ИмяОбласти = "Подразделения"; + СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; + Для НомерСтроки = 2 По КоличествоПодразделений Цикл + // Подразделения 2 - N + СтрокаПодразделения = ИнформацияОСвязях.Подразделения[НомерСтроки-1]; + ОбластиМакета.ЕщеПодразделения.Параметры.ОписаниеПодразделения = СтрокаПодразделения.ОписаниеПодразделения; + ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеПодразделения); + КонецЦикла; + Расшифровка = Новый Структура("Действие,ИмяДокумента,ИмяОбласти", + "Свернуть", ПараметрыВывода.ИмяДокумента, "Подразделения"); + ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); + СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; + КонецЕсли; + + ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); + КонецПроцедуры Процедура ВывестиРазделИзмененияВРеестре(ТабличныйДокумент, ИнформацияОСвязях, ПараметрыВывода) + КоличествоИзменений = ИнформацияОСвязях.ИзмененияВРеестре.Количество(); + Если КоличествоИзменений = 0 Тогда + Возврат; + КонецЕсли; + ОбластиМакета = ПараметрыВывода.ОбластиМакета; ОбластиРасшифровки = ПараметрыВывода.ОбластиРасшифровки; ЭтоЮридическоеЛицо = ПараметрыВывода.ЭтоЮридическоеЛицо; - КоличествоИзменений = ИнформацияОСвязях.ИзмененияВРеестре.Количество(); - Если КоличествоИзменений > 0 Тогда + // Изменение 1 + СтрокаИзменения = ИнформацияОСвязях.ИзмененияВРеестре[0]; + ОбластьИзменения = ?(ЭтоЮридическоеЛицо, + ОбластиМакета.ИзмененияВРеестре, + ОбластиМакета.ИзмененияВРеестреПредприниматель); + ОбластьИзменения.Параметры.ДатаИзменения = Формат(СтрокаИзменения.ДатаИзменения, "ДЛФ=D"); + ОбластьИзменения.Параметры.ГосударственныйОрган = СтрокаИзменения.ГосударственныйОрган; + ТабличныйДокумент.Вывести(ОбластьИзменения); + Если НЕ ПустаяСтрока(СтрокаИзменения.ОписаниеИзменения) Тогда + ОбластиМакета.ИзмененияВРеестреОписание.Параметры.ОписаниеИзменения = СтрокаИзменения.ОписаниеИзменения; + ТабличныйДокумент.Вывести(ОбластиМакета.ИзмененияВРеестреОписание); + КонецЕсли; + + // Еще изменения + + Если КоличествоИзменений = 2 Тогда - // Изменение 1 - СтрокаИзменения = ИнформацияОСвязях.ИзмененияВРеестре[0]; - ОбластиМакета.ИзмененияВРеестре.Параметры.ДатаИзменения = Формат(СтрокаИзменения.ДатаИзменения, "ДЛФ=D"); - ОбластиМакета.ИзмененияВРеестре.Параметры.ГосударственныйОрган = СтрокаИзменения.ГосударственныйОрган; - ТабличныйДокумент.Вывести(ОбластиМакета.ИзмененияВРеестре); + // Изменение 2 + СтрокаИзменения = ИнформацияОСвязях.ИзмененияВРеестре[1]; + ОбластиМакета.ЕщеИзмененияВРеестре.Параметры.ДатаИзменения = Формат(СтрокаИзменения.ДатаИзменения, "ДЛФ=D"); + ОбластиМакета.ЕщеИзмененияВРеестре.Параметры.ГосударственныйОрган = СтрокаИзменения.ГосударственныйОрган; + ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеИзмененияВРеестре); Если НЕ ПустаяСтрока(СтрокаИзменения.ОписаниеИзменения) Тогда ОбластиМакета.ИзмененияВРеестреОписание.Параметры.ОписаниеИзменения = СтрокаИзменения.ОписаниеИзменения; ТабличныйДокумент.Вывести(ОбластиМакета.ИзмененияВРеестреОписание); КонецЕсли; - // Еще изменения + ИначеЕсли КоличествоИзменений > 2 Тогда - Если КоличествоИзменений = 2 Тогда - - // Изменение 2 - СтрокаИзменения = ИнформацияОСвязях.ИзмененияВРеестре[1]; + // Свернуто + ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, ПараметрыВывода.ИмяДокумента, + "ИзмененияВРеестре", КоличествоИзменений); + + // Развернуто + СтрокаОбласти = ОбластиРасшифровки.Добавить(); + СтрокаОбласти.ИмяОбласти = "ИзмененияВРеестре"; + СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; + Для НомерСтроки = 2 По КоличествоИзменений Цикл + // Изменения 2 - N + СтрокаИзменения = ИнформацияОСвязях.ИзмененияВРеестре[НомерСтроки-1]; ОбластиМакета.ЕщеИзмененияВРеестре.Параметры.ДатаИзменения = Формат(СтрокаИзменения.ДатаИзменения, "ДЛФ=D"); ОбластиМакета.ЕщеИзмененияВРеестре.Параметры.ГосударственныйОрган = СтрокаИзменения.ГосударственныйОрган; ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеИзмененияВРеестре); @@ -1006,74 +1237,72 @@ ОбластиМакета.ИзмененияВРеестреОписание.Параметры.ОписаниеИзменения = СтрокаИзменения.ОписаниеИзменения; ТабличныйДокумент.Вывести(ОбластиМакета.ИзмененияВРеестреОписание); КонецЕсли; - - ИначеЕсли КоличествоИзменений > 2 Тогда - - // Свернуто - ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, "ИзмененияВРеестре", КоличествоИзменений); - - // Развернуто - СтрокаОбласти = ОбластиРасшифровки.Добавить(); - СтрокаОбласти.ИмяОбласти = "ИзмененияВРеестре"; - СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; - Для НомерСтроки = 2 По КоличествоИзменений Цикл - // Изменения 2 - N - СтрокаИзменения = ИнформацияОСвязях.ИзмененияВРеестре[НомерСтроки-1]; - ОбластиМакета.ЕщеИзмененияВРеестре.Параметры.ДатаИзменения = Формат(СтрокаИзменения.ДатаИзменения, "ДЛФ=D"); - ОбластиМакета.ЕщеИзмененияВРеестре.Параметры.ГосударственныйОрган = СтрокаИзменения.ГосударственныйОрган; - ТабличныйДокумент.Вывести(ОбластиМакета.ЕщеИзмененияВРеестре); - Если НЕ ПустаяСтрока(СтрокаИзменения.ОписаниеИзменения) Тогда - ОбластиМакета.ИзмененияВРеестреОписание.Параметры.ОписаниеИзменения = СтрокаИзменения.ОписаниеИзменения; - ТабличныйДокумент.Вывести(ОбластиМакета.ИзмененияВРеестреОписание); - КонецЕсли; - КонецЦикла; - Расшифровка = Новый Структура("Действие,ИмяОбласти", "Свернуть", "ИзмененияВРеестре"); - ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; - ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); - СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; - ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; - КонецЕсли; - - ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); - + КонецЦикла; + Расшифровка = Новый Структура("Действие,ИмяДокумента,ИмяОбласти", + "Свернуть", ПараметрыВывода.ИмяДокумента, "ИзмененияВРеестре"); + ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); + СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; КонецЕсли; + ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); + КонецПроцедуры -#КонецОбласти - -#Область ОписанияРеквизитов - -Функция НоваяТаблицаРасчетныеСчета() - - Результат = Новый ТаблицаЗначений; - Результат.Колонки.Добавить("Ссылка", Справочники.ТипВсеСсылки()); - Результат.Колонки.Добавить("Банк", Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("НомерСчета", Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("БИК", Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("КоррСчет", Новый ОписаниеТипов("Строка")); - Возврат Результат; - -КонецФункции - -Функция НоваяТаблицаКонтактныеЛица() - - Результат = Новый ТаблицаЗначений; - Результат.Колонки.Добавить("Ссылка", Справочники.ТипВсеСсылки()); - Результат.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); - Возврат Результат; - -КонецФункции - -Функция НоваяТаблицаОбластиРасшифровки() - - Результат = Новый ТаблицаЗначений; - Результат.Колонки.Добавить("ИмяОбласти", Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("ПерваяСтрока", Новый ОписаниеТипов("Число")); - Результат.Колонки.Добавить("ПоследняяСтрока", Новый ОписаниеТипов("Число")); - Возврат Результат; +Процедура ВывестиСтрокуОбОрганизации(ТабличныйДокумент, ОбластиМакета, ИмяОбласти, СтрокаДанных) -КонецФункции + СтруктураДанных = НовыеРеквизитыОрганизации(); + // Наименование + ЗаполнитьЗначенияСвойств(СтруктураДанных, СтрокаДанных); + Если ЗначениеЗаполнено(СтруктураДанных.ИНН) Тогда + ОбластиМакета[ИмяОбласти].Параметры.Заполнить(СтруктураДанных); + Расшифровка = Новый Структура("Действие,ИНН", "Открыть", СтруктураДанных.ИНН); + ОбластиМакета[ИмяОбласти].Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета[ИмяОбласти]); + Иначе + ОбластиМакета[ИмяОбласти + "БезРасшифровки"].Параметры.Заполнить(СтруктураДанных); + ТабличныйДокумент.Вывести(ОбластиМакета[ИмяОбласти + "БезРасшифровки"]); + КонецЕсли; + // Статус для недействующих + Если ЗначениеЗаполнено(СтруктураДанных.КодСтатуса) И СтруктураДанных.КодСтатуса <> "001" Тогда + ОбластиМакета.СтатусОрганизации.Параметры.НаименованиеСтатуса = СтруктураДанных.НаименованиеСтатуса; + ТабличныйДокумент.Вывести(ОбластиМакета.СтатусОрганизации); + КонецЕсли; + +КонецПроцедуры + +Процедура ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, ИмяОбласти, СтрокаДанных) + + СтруктураДанных = НовыеРеквизитыУчредителя(); + // Наименование, процент и сумма доли + ЗаполнитьЗначенияСвойств(СтруктураДанных, СтрокаДанных); + Если ЗначениеЗаполнено(СтруктураДанных.ПроцентКапитала) Тогда + СтруктураДанных.ПроцентКапитала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 %'"), + СтруктураДанных.ПроцентКапитала); + КонецЕсли; + Если ЗначениеЗаполнено(СтруктураДанных.СуммаКапитала) Тогда + СтруктураДанных.СуммаКапитала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 руб.'"), + СтруктураДанных.СуммаКапитала); + КонецЕсли; + Если ЗначениеЗаполнено(СтруктураДанных.ИНН) Тогда + ОбластиМакета[ИмяОбласти].Параметры.Заполнить(СтруктураДанных); + Расшифровка = Новый Структура("Действие,ИНН", "Открыть", СтруктураДанных.ИНН); + ОбластиМакета[ИмяОбласти].Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета[ИмяОбласти]); + Иначе + ОбластиМакета[ИмяОбласти + "БезРасшифровки"].Параметры.Заполнить(СтруктураДанных); + ТабличныйДокумент.Вывести(ОбластиМакета[ИмяОбласти + "БезРасшифровки"]); + КонецЕсли; + // Статус для недействующих + Если ЗначениеЗаполнено(СтруктураДанных.КодСтатуса) И СтруктураДанных.КодСтатуса <> "001" Тогда + ОбластиМакета.СтатусОрганизации.Параметры.НаименованиеСтатуса = СтруктураДанных.НаименованиеСтатуса; + ТабличныйДокумент.Вывести(ОбластиМакета.СтатусОрганизации); + КонецЕсли; + +КонецПроцедуры Функция НовыеРеквизитыОрганизации() @@ -1100,114 +1329,14 @@ КонецФункции -#КонецОбласти - -#Область Прочее - -Процедура ВывестиСтрокуОбОрганизации(ТабличныйДокумент, ОбластиМакета, ИмяОбласти, СтрокаДанных) - - СтруктураДанных = НовыеРеквизитыОрганизации(); - ЗаполнитьЗначенияСвойств(СтруктураДанных, СтрокаДанных); - Если ЗначениеЗаполнено(СтруктураДанных.ИНН) Тогда - ОбластиМакета[ИмяОбласти].Параметры.Заполнить(СтруктураДанных); - Расшифровка = Новый Структура("Действие,ИНН", "Открыть", СтруктураДанных.ИНН); - ОбластиМакета[ИмяОбласти].Параметры.Расшифровка = Расшифровка; - ТабличныйДокумент.Вывести(ОбластиМакета[ИмяОбласти]); - Иначе - ОбластиМакета[ИмяОбласти + "БезРасшифровки"].Параметры.Заполнить(СтруктураДанных); - ТабличныйДокумент.Вывести(ОбластиМакета[ИмяОбласти + "БезРасшифровки"]); - КонецЕсли; - Если ЗначениеЗаполнено(СтруктураДанных.КодСтатуса) И СтруктураДанных.КодСтатуса <> "001" Тогда - ТекОбласть = ТабличныйДокумент.Область(ТабличныйДокумент.ВысотаТаблицы, 2, ТабличныйДокумент.ВысотаТаблицы, 2); - ЦветаКонтрагентов = ПроверкаКонтрагентовВызовСервераПовтИсп.ЦветаРезультатовПроверки(); - ТекОбласть.ЦветТекста = ЦветаКонтрагентов.ЦветТекстаНекорректногоКонтрагента; - ОбластиМакета.СтатусОрганизации.Параметры.НаименованиеСтатуса = СтруктураДанных.НаименованиеСтатуса; - ТабличныйДокумент.Вывести(ОбластиМакета.СтатусОрганизации); - КонецЕсли; - -КонецПроцедуры - -Процедура ВывестиСтрокуОбУчредителе(ТабличныйДокумент, ОбластиМакета, ИмяОбласти, СтрокаДанных) - - СтруктураДанных = НовыеРеквизитыУчредителя(); - ЗаполнитьЗначенияСвойств(СтруктураДанных, СтрокаДанных); - Если ЗначениеЗаполнено(СтруктураДанных.ПроцентКапитала) Тогда - СтруктураДанных.ПроцентКапитала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='%1 %%'"), - СтруктураДанных.ПроцентКапитала); - КонецЕсли; - Если ЗначениеЗаполнено(СтруктураДанных.СуммаКапитала) Тогда - СтруктураДанных.СуммаКапитала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='%1 руб.'"), - СтруктураДанных.СуммаКапитала); - КонецЕсли; - Если ЗначениеЗаполнено(СтруктураДанных.ИНН) Тогда - ОбластиМакета[ИмяОбласти].Параметры.Заполнить(СтруктураДанных); - Расшифровка = Новый Структура("Действие,ИНН", "Открыть", СтруктураДанных.ИНН); - ОбластиМакета[ИмяОбласти].Параметры.Расшифровка = Расшифровка; - ТабличныйДокумент.Вывести(ОбластиМакета[ИмяОбласти]); - Иначе - ОбластиМакета[ИмяОбласти + "БезРасшифровки"].Параметры.Заполнить(СтруктураДанных); - ТабличныйДокумент.Вывести(ОбластиМакета[ИмяОбласти + "БезРасшифровки"]); - КонецЕсли; - Если ЗначениеЗаполнено(СтруктураДанных.КодСтатуса) И СтруктураДанных.КодСтатуса <> "001" Тогда - ТекОбласть = ТабличныйДокумент.Область(ТабличныйДокумент.ВысотаТаблицы, 2, ТабличныйДокумент.ВысотаТаблицы, 2); - ЦветаКонтрагентов = ПроверкаКонтрагентовВызовСервераПовтИсп.ЦветаРезультатовПроверки(); - ТекОбласть.ЦветТекста = ЦветаКонтрагентов.ЦветТекстаНекорректногоКонтрагента; - ОбластиМакета.СтатусОрганизации.Параметры.НаименованиеСтатуса = СтруктураДанных.НаименованиеСтатуса; - ТабличныйДокумент.Вывести(ОбластиМакета.СтатусОрганизации); - КонецЕсли; - -КонецПроцедуры - -Процедура ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, ИмяОбластиРасшифровки, КоличествоВсего) - - Если КоличествоВсего = 0 Тогда - ТекстЕще = НСтр("ru='Еще'"); - Иначе - ТекстЕще = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru='Еще %1'"), - КоличествоВсего - 1); - КонецЕсли; - ОбластиМакета.Еще.Параметры.ТекстЕще = ТекстЕще; - Расшифровка = Новый Структура("Действие,ИмяОбласти", "Показать", ИмяОбластиРасшифровки); - ОбластиМакета.Еще.Параметры.Расшифровка = Расшифровка; - ТабличныйДокумент.Вывести(ОбластиМакета.Еще); - -КонецПроцедуры - -Процедура ДополнитьИнформациюОКонтрагентеДаннымиИБ(ИнформацияОСвязях, ДанныеОтчета) - - ИнформацияОСвязях.Вставить("РасчетныеСчета", НоваяТаблицаРасчетныеСчета()); - ИнформацияОСвязях.Вставить("ПочтовыйАдрес"); - ИнформацияОСвязях.Вставить("КонтактныеЛица", НоваяТаблицаКонтактныеЛица()); - - Если НЕ ЗначениеЗаполнено(ДанныеОтчета.Контрагент) Тогда - - РаботаСКонтрагентамиПереопределяемый.ЗаполнитьКонтрагентаПоИнформацииОСвязях( - ДанныеОтчета.Контрагент, ИнформацияОСвязях); - - КонецЕсли; - - Если ЗначениеЗаполнено(ДанныеОтчета.Контрагент) Тогда - - РаботаСКонтрагентамиПереопределяемый.ЗаполнитьРасчетныеСчетаИнформацииОСвязяхКонтрагента( - ИнформацияОСвязях.РасчетныеСчета, ДанныеОтчета.Контрагент, ИнформацияОСвязях); - - РаботаСКонтрагентамиПереопределяемый.ЗаполнитьКонтактныеЛицаИнформацииОСвязяхКонтрагента( - ИнформацияОСвязях.КонтактныеЛица, ДанныеОтчета.Контрагент, ИнформацияОСвязях); - - РаботаСКонтрагентамиПереопределяемый.ЗаполнитьПочтовыйАдресИнформацииОСвязяхКонтрагента( - ИнформацияОСвязях.ПочтовыйАдрес, ДанныеОтчета.Контрагент, ИнформацияОСвязях); - - КонецЕсли; - -КонецПроцедуры - Процедура ПолучитьСостояниеКонтрагентаПоДаннымЕГРН(ИнформацияОСвязях) ИнформацияОСвязях.Вставить("СостояниеПоДаннымЕГРН"); + Если НЕ ПроверкаКонтрагентов.ЕстьДоступКВебСервисуФНС() Тогда + Возврат; + КонецЕсли; + КПП = ?(ИнформацияОСвязях.Свойство("КПП"), ИнформацияОСвязях.КПП, ""); СвойстваКонтрагентов = ПроверкаКонтрагентовКлиентСервер.СвойстваСправочникаКонтрагенты(); @@ -1232,17 +1361,1997 @@ КонецПроцедуры -Функция ВсеОбластиМакета() +#КонецОбласти + +#Область ДанныеПрограммы + +Процедура СформироватьРезультатДанныеПрограммы(ИнформацияОСвязях, ДанныеОтчета, ОписаниеДанныхПрограммы) - Макет = Отчеты.ДосьеКонтрагента.ПолучитьМакет("Макет"); + Если ОписаниеДанныхПрограммы.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ТабличныйДокумент = Новый ТабличныйДокумент; + ПараметрыВывода = Новый Структура; + ОбластиМакета = ВсеОбластиМакета("ДанныеПрограммы"); + ПараметрыВывода.Вставить("ОбластиМакета", ОбластиМакета); + ПараметрыВывода.Вставить("ОбластиРасшифровки", НоваяТаблицаОбластиРасшифровки()); + ПараметрыВывода.Вставить("ЭтоЮридическоеЛицо", ДанныеОтчета.ЭтоЮридическоеЛицо); + ПараметрыВывода.Вставить("ИмяДокумента", "РезультатДанныеПрограммы"); + + ТабличныйДокумент.Вывести(ОбластиМакета.Шапка); + + Если НЕ ЗначениеЗаполнено(ДанныеОтчета.Контрагент) Тогда + ТабличныйДокумент.Вывести(ОбластиМакета.ШапкаНетДанных); + Иначе + ТабличныйДокумент.Вывести(ОбластиМакета.ШапкаКомментарий); + ВывестиДанныеПрограммы(ТабличныйДокумент, ИнформацияОСвязях, ОписаниеДанныхПрограммы, ПараметрыВывода); + КонецЕсли; + + ПараметрыВывода.ОбластиРасшифровки.ЗаполнитьЗначения("РезультатДанныеПрограммы", "ИмяДокумента"); + Для каждого СтрокаТаблицы Из ПараметрыВывода.ОбластиРасшифровки Цикл + НоваяСтрока = ДанныеОтчета.ОбластиРасшифровки.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТаблицы); + КонецЦикла; + + ДанныеОтчета.Вставить("РезультатДанныеПрограммы", ТабличныйДокумент); + ДанныеОтчета.Вставить("ИмяФайлаДанныеПрограммы", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Досье контрагента %1 - данные программы'"), + ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла( + ИнформацияОСвязях.НаименованиеСокращенное, ""))); + +КонецПроцедуры + +Процедура ВывестиДанныеПрограммы(ТабличныйДокумент, ИнформацияОСвязях, ОписаниеДанныхПрограммы, ПараметрыВывода) + + Для каждого СтрокаОписания Из ОписаниеДанныхПрограммы Цикл + + Если СтрокаОписания.ЭтоТаблица Тогда + ВывестиТаблицуДанныхПрограммы(ТабличныйДокумент, ИнформацияОСвязях, СтрокаОписания, ПараметрыВывода); + Иначе + ВывестиРеквизитДанныхПрограммы(ТабличныйДокумент, ИнформацияОСвязях, СтрокаОписания, ПараметрыВывода); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ВывестиТаблицуДанныхПрограммы(ТабличныйДокумент, ИнформацияОСвязях, СтрокаОписания, ПараметрыВывода) + + ТаблицаДанных = ИнформацияОСвязях.ДанныеПрограммы[СтрокаОписания.ИмяДанных]; + КоличествоСтрок = ТаблицаДанных.Количество(); + Если КоличествоСтрок = 0 Тогда + Возврат; + КонецЕсли; + + ОбластиМакета = ПараметрыВывода.ОбластиМакета; + ОбластиРасшифровки = ПараметрыВывода.ОбластиРасшифровки; + ОбластьОписание = ОбластиМакета.РеквизитОписание; + + // Строка 1 + СтрокаДанных = ТаблицаДанных[0]; + ЕстьРасшифровка = ЗначениеЗаполнено(СтрокаДанных.Ссылка); + ОбластьСтроки = ?(ЕстьРасшифровка, ОбластиМакета.Реквизит, ОбластиМакета.РеквизитБезРасшифровки); + ОбластьСтроки.Параметры.Заполнить(СтрокаОписания); + ОбластьСтроки.Параметры.Заполнить(СтрокаДанных); + ТабличныйДокумент.Вывести(ОбластьСтроки); + Если ЗначениеЗаполнено(СтрокаДанных.Описание) Тогда + ОбластьОписание.Параметры.Заполнить(СтрокаДанных); + ТабличныйДокумент.Вывести(ОбластьОписание); + КонецЕсли; + + // Еще данные + + Если КоличествоСтрок = 2 Тогда + + // Строка 2 + СтрокаДанных = ТаблицаДанных[1]; + ЕстьРасшифровка = ЗначениеЗаполнено(СтрокаДанных.Ссылка); + ОбластьСтроки = ?(ЕстьРасшифровка, ОбластиМакета.ЕщеРеквизит, ОбластиМакета.ЕщеРеквизитБезРасшифровки); + ОбластьСтроки.Параметры.Заполнить(СтрокаОписания); + ОбластьСтроки.Параметры.Заполнить(СтрокаДанных); + ТабличныйДокумент.Вывести(ОбластьСтроки); + Если ЗначениеЗаполнено(СтрокаДанных.Описание) Тогда + ОбластьОписание.Параметры.Заполнить(СтрокаДанных); + ТабличныйДокумент.Вывести(ОбластьОписание); + КонецЕсли; + + ИначеЕсли КоличествоСтрок > 2 Тогда + + // Свернуто + ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, ПараметрыВывода.ИмяДокумента, + СтрокаОписания.ИмяДанных, КоличествоСтрок); + + // Развернуто + СтрокаОбласти = ОбластиРасшифровки.Добавить(); + СтрокаОбласти.ИмяОбласти = СтрокаОписания.ИмяДанных; + СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; + Для НомерСтроки = 2 По КоличествоСтрок Цикл + // Строки 2 - N + СтрокаДанных = ТаблицаДанных[НомерСтроки - 1]; + ЕстьРасшифровка = ЗначениеЗаполнено(СтрокаДанных.Ссылка); + ОбластьСтроки = ?(ЕстьРасшифровка, ОбластиМакета.ЕщеРеквизит, ОбластиМакета.ЕщеРеквизитБезРасшифровки); + ОбластьСтроки.Параметры.Заполнить(СтрокаОписания); + ОбластьСтроки.Параметры.Заполнить(СтрокаДанных); + ТабличныйДокумент.Вывести(ОбластьСтроки); + Если ЗначениеЗаполнено(СтрокаДанных.Описание) Тогда + ОбластьОписание.Параметры.Заполнить(СтрокаДанных); + ТабличныйДокумент.Вывести(ОбластьОписание); + КонецЕсли; + КонецЦикла; + + Расшифровка = Новый Структура("Действие,ИмяДокумента,ИмяОбласти", + "Свернуть", ПараметрыВывода.ИмяДокумента, СтрокаОписания.ИмяДанных); + ОбластиМакета.Свернуть.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.Свернуть); + СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; + + КонецЕсли; + + ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); + +КонецПроцедуры + +Процедура ВывестиРеквизитДанныхПрограммы(ТабличныйДокумент, ИнформацияОСвязях, СтрокаОписания, ПараметрыВывода) + + ЗначениеРеквизита = ИнформацияОСвязях.ДанныеПрограммы[СтрокаОписания.ИмяДанных]; + Если ТипЗнч(ЗначениеРеквизита) = Тип("Структура") + И (НЕ ЗначениеРеквизита.Свойство("Представление") + ИЛИ НЕ ЗначениеЗаполнено(ЗначениеРеквизита.Представление)) Тогда + Возврат; + ИначеЕсли НЕ ЗначениеЗаполнено(ЗначениеРеквизита) Тогда + Возврат; + КонецЕсли; + + ОбластиМакета = ПараметрыВывода.ОбластиМакета; + ЕстьРасшифровка = ТипЗнч(ЗначениеРеквизита) = Тип("Структура") + И ЗначениеРеквизита.Свойство("Ссылка") + И ЗначениеЗаполнено(ЗначениеРеквизита.Ссылка); + ОбластьСтроки = ?(ЕстьРасшифровка, ОбластиМакета.Реквизит, ОбластиМакета.РеквизитБезРасшифровки); + ОбластьОписание = ОбластиМакета.РеквизитОписание; + ОбластьПримечание = ОбластиМакета.РеквизитПримечание; + + ОбластьСтроки.Параметры.Заполнить(СтрокаОписания); + Если ТипЗнч(ЗначениеРеквизита) = Тип("Структура") Тогда + ОбластьСтроки.Параметры.Заполнить(ЗначениеРеквизита); + ТабличныйДокумент.Вывести(ОбластьСтроки); + Если ЗначениеРеквизита.Свойство("ПримечаниеПредставление") + И ЗначениеЗаполнено(ЗначениеРеквизита.ПримечаниеПредставление) Тогда + ТабличныйДокумент.Область(ТабличныйДокумент.ВысотаТаблицы, 3, ТабличныйДокумент.ВысотаТаблицы, 3).ЦветФона = + ЦветаСтиля.ЦветФонаНекорректногоКонтрагентаВДокументе; + ОбластьПримечание.Параметры.Примечание = ЗначениеРеквизита.ПримечаниеПредставление; + ТабличныйДокумент.Вывести(ОбластьПримечание); + КонецЕсли; + Если ЗначениеРеквизита.Свойство("Описание") + И ЗначениеЗаполнено(ЗначениеРеквизита.Описание) Тогда + ОбластьОписание.Параметры.Заполнить(ЗначениеРеквизита); + ТабличныйДокумент.Вывести(ОбластьОписание); + Если ЗначениеРеквизита.Свойство("ПримечаниеОписание") + И ЗначениеЗаполнено(ЗначениеРеквизита.ПримечаниеОписание) Тогда + ТабличныйДокумент.Область(ТабличныйДокумент.ВысотаТаблицы, 3, ТабличныйДокумент.ВысотаТаблицы, 3).ЦветФона = + ЦветаСтиля.ЦветФонаНекорректногоКонтрагентаВДокументе; + ОбластьПримечание.Параметры.Примечание = ЗначениеРеквизита.ПримечаниеОписание; + ТабличныйДокумент.Вывести(ОбластьПримечание); + КонецЕсли; + КонецЕсли; + Иначе + ОбластьСтроки.Параметры.Представление = ЗначениеРеквизита; + ТабличныйДокумент.Вывести(ОбластьСтроки); + КонецЕсли; + + ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); + +КонецПроцедуры + +Функция НоваяТаблицаОписаниеДанныхПрограммы() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("ИмяДанных", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ЭтоТаблица", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("Заголовок", Новый ОписаниеТипов("Строка")); + + Возврат Результат; + +КонецФункции + +Функция НоваяТаблицаДанныеПрограммы() Экспорт + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Ссылка", Справочники.ТипВсеСсылки()); + Результат.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("Описание", Новый ОписаниеТипов("Строка")); + Возврат Результат; + +КонецФункции + +Функция НовыеДанныеПрограммы() Экспорт + + Результат = Новый Структура; + Результат.Вставить("Ссылка"); + Результат.Вставить("Представление"); + Результат.Вставить("Описание"); + Результат.Вставить("ПримечаниеПредставление"); + Результат.Вставить("ПримечаниеОписание"); + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область БухгалтерскаяОтчетность + +Процедура СформироватьРезультатБухгалтерскаяОтчетность(ИнформацияОСвязях, ДанныеОтчета) + + Если НЕ ДанныеОтчета.ЭтоЮридическоеЛицо Тогда + Возврат; + КонецЕсли; + + ТабличныйДокумент = Новый ТабличныйДокумент; + ПараметрыВывода = Новый Структура; + ПараметрыВывода.Вставить("ОбластиМакета", ВсеОбластиМакета("БухгалтерскаяОтчетность")); + ПараметрыВывода.Вставить("ОбластиРасшифровки", НоваяТаблицаОбластиРасшифровки()); + ПараметрыВывода.Вставить("ЭтоЮридическоеЛицо", ДанныеОтчета.ЭтоЮридическоеЛицо); + + ОбластиМакета = ПараметрыВывода.ОбластиМакета; + + Если ИнформацияОСвязях.ДанныеБухгалтерскойОтчетности.Количество() = 0 Тогда + + ТабличныйДокумент.Вывести(ОбластиМакета.Шапка); + ТабличныйДокумент.Вывести(ОбластиМакета.ШапкаНетОтчетности); + + Иначе + + СтруктураГодов = ПериодыБухгалтерскойОтчетности(); + ТипОтчетности = ""; + Для каждого СтрокаТаблицы Из ИнформацияОСвязях.ДанныеБухгалтерскойОтчетности Цикл + + Если НЕ ПустаяСтрока(ТипОтчетности) Тогда + ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); + КонецЕсли; + Если СтрокаТаблицы.ТипОтчетности <> ТипОтчетности Тогда + ТипОтчетности = СтрокаТаблицы.ТипОтчетности; + Если ТипОтчетности = "2" Тогда + ОбластьШапка = ОбластиМакета.Шапка; + ОбластьБалансШапка = ОбластиМакета.БалансШапка; + ОбластьБаланс = ОбластиМакета.Баланс; + ОбластьПрибылиУбыткиШапка = ОбластиМакета.ПрибылиУбыткиШапка; + ОбластьПрибылиУбытки = ОбластиМакета.ПрибылиУбытки; + ОбластьИспользованиеСредствШапка = ОбластиМакета.ИспользованиеСредствШапка; + ОбластьИспользованиеСредств = ОбластиМакета.ИспользованиеСредств; + ИначеЕсли ТипОтчетности = "1" Тогда + ОбластьШапка = ОбластиМакета.ШапкаМП; + ОбластьБалансШапка = ОбластиМакета.БалансМПШапка; + ОбластьБаланс = ОбластиМакета.БалансМП; + ОбластьПрибылиУбыткиШапка = ОбластиМакета.ПрибылиУбыткиМПШапка; + ОбластьПрибылиУбытки = ОбластиМакета.ПрибылиУбыткиМП; + Иначе //"0" + ОбластьШапка = ОбластиМакета.ШапкаНКО; + ОбластьБалансШапка = ОбластиМакета.БалансНКОШапка; + ОбластьБаланс = ОбластиМакета.БалансНКО; + ОбластьИспользованиеСредствШапка = ОбластиМакета.ИспользованиеСредствНКОШапка; + ОбластьИспользованиеСредств = ОбластиМакета.ИспользованиеСредствНКО; + КонецЕсли; + ТабличныйДокумент.Вывести(ОбластьШапка); + ТабличныйДокумент.Вывести(ОбластиМакета.ШапкаКомментарий); + КонецЕсли; + + // Баланс + ОбластьБалансШапка.Параметры.Заполнить(СтрокаТаблицы); + ТабличныйДокумент.Вывести(ОбластьБалансШапка); + ТабличныйДокумент.НачатьГруппуСтрок(, Истина); + ОбластьБаланс.Параметры.Заполнить(СтрокаТаблицы); + ОбластьБаланс.Параметры.Заполнить(СтруктураГодов); + ОбластьБаланс.Параметры.Заполнить(СтрокаТаблицы.Показатели); + ТабличныйДокумент.Вывести(ОбластьБаланс); + ТабличныйДокумент.ЗакончитьГруппуСтрок(); + + // Отчет о прибылях и убытках + Если СтрокаТаблицы.ЕстьПрибылиУбытки Тогда + ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); + ОбластьПрибылиУбыткиШапка.Параметры.Заполнить(СтрокаТаблицы); + ТабличныйДокумент.Вывести(ОбластьПрибылиУбыткиШапка); + ТабличныйДокумент.НачатьГруппуСтрок(, Истина); + ОбластьПрибылиУбытки.Параметры.Заполнить(СтрокаТаблицы); + ОбластьПрибылиУбытки.Параметры.Заполнить(СтруктураГодов); + ОбластьПрибылиУбытки.Параметры.Заполнить(СтрокаТаблицы.Показатели); + ТабличныйДокумент.Вывести(ОбластьПрибылиУбытки); + ТабличныйДокумент.ЗакончитьГруппуСтрок(); + КонецЕсли; + + // Отчет об изменении капитала + Если СтрокаТаблицы.ЕстьИзменениеКапитала Тогда + ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); + ОбластиМакета.ИзменениеКапиталаШапка.Параметры.Заполнить(СтрокаТаблицы); + ТабличныйДокумент.Вывести(ОбластиМакета.ИзменениеКапиталаШапка); + ТабличныйДокумент.НачатьГруппуСтрок(, Истина); + ОбластиМакета.ИзменениеКапитала.Параметры.Заполнить(СтрокаТаблицы); + ОбластиМакета.ИзменениеКапитала.Параметры.Заполнить(СтруктураГодов); + ОбластиМакета.ИзменениеКапитала.Параметры.Заполнить(СтрокаТаблицы.Показатели); + ТабличныйДокумент.Вывести(ОбластиМакета.ИзменениеКапитала); + ТабличныйДокумент.ЗакончитьГруппуСтрок(); + КонецЕсли; + + // Отчет о движении денежных средств + Если СтрокаТаблицы.ЕстьДвижениеДенег Тогда + ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); + ОбластиМакета.ДвижениеДенегШапка.Параметры.Заполнить(СтрокаТаблицы); + ТабличныйДокумент.Вывести(ОбластиМакета.ДвижениеДенегШапка); + ТабличныйДокумент.НачатьГруппуСтрок(, Истина); + ОбластиМакета.ДвижениеДенег.Параметры.Заполнить(СтрокаТаблицы); + ОбластиМакета.ДвижениеДенег.Параметры.Заполнить(СтруктураГодов); + ОбластиМакета.ДвижениеДенег.Параметры.Заполнить(СтрокаТаблицы.Показатели); + ТабличныйДокумент.Вывести(ОбластиМакета.ДвижениеДенег); + ТабличныйДокумент.ЗакончитьГруппуСтрок(); + КонецЕсли; + + // Отчет о целевом использовании средств + Если СтрокаТаблицы.ЕстьИспользованиеСредств Тогда + ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); + ОбластьИспользованиеСредствШапка.Параметры.Заполнить(СтрокаТаблицы); + ТабличныйДокумент.Вывести(ОбластьИспользованиеСредствШапка); + ТабличныйДокумент.НачатьГруппуСтрок(, Истина); + ОбластьИспользованиеСредств.Параметры.Заполнить(СтрокаТаблицы); + ОбластьИспользованиеСредств.Параметры.Заполнить(СтруктураГодов); + ОбластьИспользованиеСредств.Параметры.Заполнить(СтрокаТаблицы.Показатели); + ТабличныйДокумент.Вывести(ОбластьИспользованиеСредств); + ТабличныйДокумент.ЗакончитьГруппуСтрок(); + КонецЕсли; + + // Расчет чистых активов + Если СтрокаТаблицы.ЕстьРасчетЧистыхАктивов Тогда + ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); + ОбластиМакета.ЧистыеАктивыШапка.Параметры.Заполнить(СтрокаТаблицы); + ТабличныйДокумент.Вывести(ОбластиМакета.ЧистыеАктивыШапка); + ТабличныйДокумент.НачатьГруппуСтрок(, Истина); + ОбластиМакета.ЧистыеАктивы.Параметры.Заполнить(СтрокаТаблицы); + ОбластиМакета.ЧистыеАктивы.Параметры.Заполнить(СтруктураГодов); + ОбластиМакета.ЧистыеАктивы.Параметры.Заполнить(СтрокаТаблицы.Показатели); + ТабличныйДокумент.Вывести(ОбластиМакета.ЧистыеАктивы); + ТабличныйДокумент.ЗакончитьГруппуСтрок(); + КонецЕсли; + + КонецЦикла; + + ПараметрыВывода.ОбластиРасшифровки.ЗаполнитьЗначения("РезультатБухгалтерскаяОтчетность", "ИмяДокумента"); + Для каждого СтрокаТаблицы Из ПараметрыВывода.ОбластиРасшифровки Цикл + НоваяСтрока = ДанныеОтчета.ОбластиРасшифровки.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТаблицы); + КонецЦикла; + + КонецЕсли; + + ДанныеОтчета.Вставить("РезультатБухгалтерскаяОтчетность", ТабличныйДокумент); + ДанныеОтчета.Вставить("ИмяФайлаБухгалтерскаяОтчетность", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Досье контрагента %1 - бухгалтерская отчетность'"), + ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла( + ИнформацияОСвязях.НаименованиеСокращенное, ""))); + +КонецПроцедуры + +Функция НоваяТаблицаДанныеБухгалтерскойОтчетности() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("ТипОтчетности", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ВалютаОтчетности", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("Показатели"); // Структура + Результат.Колонки.Добавить("ЕстьПрибылиУбытки", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("ЕстьИзменениеКапитала", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("ЕстьДвижениеДенег", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("ЕстьИспользованиеСредств", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("ЕстьРасчетЧистыхАктивов", Новый ОписаниеТипов("Булево")); + Возврат Результат; + +КонецФункции + +Процедура ПодготовитьДанныеБухгалтерскойОтчетности(ИнформацияОСвязях) + + ИнформацияОСвязях.Вставить("ДанныеБухгалтерскойОтчетности", НоваяТаблицаДанныеБухгалтерскойОтчетности()); + ИнформацияОСвязях.Вставить("ЕстьОтчетностьГод_1", Ложь); + ИнформацияОСвязях.Вставить("ЕстьОтчетностьГод_2", Ложь); + ИнформацияОСвязях.Вставить("ЕстьОтчетностьГод_3", Ложь); + Если ИнформацияОСвязях.БухгалтерскаяОтчетность.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + // Данные за 3 года + СтруктураГодов = ПериодыБухгалтерскойОтчетности(); + ОтчетностьГод_1 = ИнформацияОСвязях.БухгалтерскаяОтчетность.Найти(Число(СтруктураГодов.Год_1), "Год"); + ИнформацияОСвязях.ЕстьОтчетностьГод_1 = ОтчетностьГод_1 <> Неопределено; + ОтчетностьГод_2 = ИнформацияОСвязях.БухгалтерскаяОтчетность.Найти(Число(СтруктураГодов.Год_2), "Год"); + ИнформацияОСвязях.ЕстьОтчетностьГод_2 = ОтчетностьГод_2 <> Неопределено; + ОтчетностьГод_3 = ИнформацияОСвязях.БухгалтерскаяОтчетность.Найти(Число(СтруктураГодов.Год_3), "Год"); + ИнформацияОСвязях.ЕстьОтчетностьГод_3 = ОтчетностьГод_3 <> Неопределено; + + Если ИнформацияОСвязях.ЕстьОтчетностьГод_1 Тогда + + НоваяСтрока = ИнформацияОСвязях.ДанныеБухгалтерскойОтчетности.Добавить(); + НоваяСтрока.ТипОтчетности = ОтчетностьГод_1.ТипОтчетности; + НоваяСтрока.ВалютаОтчетности = ВалютаБухгалтерскойОтчетности(ОтчетностьГод_1.КодВалютыОтчетности); + Показатели = Новый Структура; + Для каждого СтрокаТаблицы Из ОтчетностьГод_1.Показатели Цикл + Если Лев(СтрокаТаблицы.Код, 1) = "3" Тогда + // Для отчета об изменении капитала используем специальный формат имен показателей. + ИмяПоказателя = "П" + СтрокаТаблицы.Код + "_1"; + Иначе + ИмяПоказателя = "П" + Лев(СтрокаТаблицы.Код, 4) + ?(Прав(СтрокаТаблицы.Код, 1) = "3", "_1", "_2"); + КонецЕсли; + Показатели.Вставить(ИмяПоказателя, СтрокаТаблицы.Значение); + КонецЦикла; + НоваяСтрока.Показатели = Показатели; + КонецЕсли; + + Если ИнформацияОСвязях.ЕстьОтчетностьГод_2 Тогда + + Если НЕ ИнформацияОСвязях.ЕстьОтчетностьГод_1 + ИЛИ ОтчетностьГод_2.ТипОтчетности <> ОтчетностьГод_1.ТипОтчетности + ИЛИ ОтчетностьГод_2.КодВалютыОтчетности <> ОтчетностьГод_2.КодВалютыОтчетности Тогда + НоваяСтрока = ИнформацияОСвязях.ДанныеБухгалтерскойОтчетности.Добавить(); + НоваяСтрока.ТипОтчетности = ОтчетностьГод_2.ТипОтчетности; + НоваяСтрока.ВалютаОтчетности = ВалютаБухгалтерскойОтчетности(ОтчетностьГод_2.КодВалютыОтчетности); + Показатели = Новый Структура; + ЗаполнятьПоказатели_2 = Истина; + Иначе + ЗаполнятьПоказатели_2 = Ложь; + КонецЕсли; + + Для каждого СтрокаТаблицы Из ОтчетностьГод_2.Показатели Цикл + Если ИнформацияОСвязях.ЕстьОтчетностьГод_1 + И НЕ ЗаполнятьПоказатели_2 + И Лев(СтрокаТаблицы.Код, 1) <> "3" // ОИК из Росстата содержит данные только за текущий год. + И Лев(СтрокаТаблицы.Код, 1) <> "4" // ОДДС из Росстата содержит данные только за текущий год. + И Прав(СтрокаТаблицы.Код, 1) = "3" Тогда + Продолжить; + Иначе + Если Лев(СтрокаТаблицы.Код, 1) = "3" Тогда + // Для отчета об изменении капитала используем специальный формат имен показателей. + ИмяПоказателя = "П" + СтрокаТаблицы.Код + "_2"; + Иначе + ИмяПоказателя = "П" + Лев(СтрокаТаблицы.Код, 4) + ?(Прав(СтрокаТаблицы.Код, 1) = "3", "_2", "_3"); + КонецЕсли; + Показатели.Вставить(ИмяПоказателя, СтрокаТаблицы.Значение); + КонецЕсли; + КонецЦикла; + НоваяСтрока.Показатели = Показатели; + + КонецЕсли; + + Если ИнформацияОСвязях.ЕстьОтчетностьГод_3 Тогда + + Если НЕ ИнформацияОСвязях.ЕстьОтчетностьГод_2 + ИЛИ ОтчетностьГод_3.ТипОтчетности <> ОтчетностьГод_2.ТипОтчетности + ИЛИ ОтчетностьГод_3.КодВалютыОтчетности <> ОтчетностьГод_2.КодВалютыОтчетности Тогда + НоваяСтрока = ИнформацияОСвязях.ДанныеБухгалтерскойОтчетности.Добавить(); + НоваяСтрока.ТипОтчетности = ОтчетностьГод_3.ТипОтчетности; + НоваяСтрока.ВалютаОтчетности = ВалютаБухгалтерскойОтчетности(ОтчетностьГод_3.КодВалютыОтчетности); + Показатели = Новый Структура; + ЗаполнятьПоказатели_3 = Истина; + Иначе + ЗаполнятьПоказатели_3 = Ложь; + КонецЕсли; + + Для каждого СтрокаТаблицы Из ОтчетностьГод_3.Показатели Цикл + Если ИнформацияОСвязях.ЕстьОтчетностьГод_2 + И НЕ ЗаполнятьПоказатели_3 + И Лев(СтрокаТаблицы.Код, 1) <> "3" // ОИК из Росстата содержит данные только за текущий год. + И Лев(СтрокаТаблицы.Код, 1) <> "4" Тогда // ОДДС из Росстата содержит данные только за текущий год. + Продолжить; + Иначе + Если Лев(СтрокаТаблицы.Код, 1) = "3" Тогда + // Для отчета об изменении капитала используем специальный формат имен показателей. + ИмяПоказателя = "П" + СтрокаТаблицы.Код + "_3"; + Иначе + ИмяПоказателя = "П" + Лев(СтрокаТаблицы.Код, 4) + "_3"; + КонецЕсли; + Показатели.Вставить(ИмяПоказателя, СтрокаТаблицы.Значение); + КонецЕсли; + КонецЦикла; + НоваяСтрока.Показатели = Показатели; + + КонецЕсли; + + // Запоминаем наличие различных форм отчетности. + Для каждого СтрокаТаблицы Из ИнформацияОСвязях.ДанныеБухгалтерскойОтчетности Цикл + СтрокаТаблицы.ЕстьПрибылиУбытки = СтрокаТаблицы.ТипОтчетности <> "0"; + СтрокаТаблицы.ЕстьИзменениеКапитала = СтрокаТаблицы.ТипОтчетности = "2" + И ЕстьДанныеДляФормыОтчетности(СтрокаТаблицы.Показатели, "3"); + СтрокаТаблицы.ЕстьДвижениеДенег = СтрокаТаблицы.ТипОтчетности = "2" + И ЕстьДанныеДляФормыОтчетности(СтрокаТаблицы.Показатели, "4"); + СтрокаТаблицы.ЕстьИспользованиеСредств = СтрокаТаблицы.ТипОтчетности = "0" + ИЛИ (СтрокаТаблицы.ТипОтчетности = "2" + И ЕстьДанныеДляФормыОтчетности(СтрокаТаблицы.Показатели, "6")); + СтрокаТаблицы.ЕстьРасчетЧистыхАктивов = СтрокаТаблицы.ТипОтчетности = "2"; + КонецЦикла; + + ДобавитьДанныеОбычнойОтчетности(ИнформацияОСвязях.ДанныеБухгалтерскойОтчетности); + + ДобавитьДанныеОтчетностиМП(ИнформацияОСвязях.ДанныеБухгалтерскойОтчетности); + + ДобавитьДанныеОтчетностиНКО(ИнформацияОСвязях.ДанныеБухгалтерскойОтчетности); + +КонецПроцедуры + +Функция ЕстьДанныеДляФормыОтчетности(Показатели, КодФормы) + + Для каждого Показатель Из Показатели Цикл + Если Сред(Показатель.Ключ, 2, 1) = КодФормы + И Показатель.Значение <> 0 Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + Возврат Ложь; + +КонецФункции + +Процедура ДобавитьДанныеОбычнойОтчетности(ДанныеБухгалтерскойОтчетности) + + // Ключ - код для вывода в отчет, значение - суммируемые (с минусом - вычитаемые) показатели бухгалтерской отчетности. + КодыОтчетности = Новый Соответствие; + КодыОтчетности.Вставить("91", "1110;1120;1130;1140;1150;1160;1170;1180;1190;1210;1220;1230;1240;1250;1260;"); + КодыОтчетности.Вставить("92", "1410;1420;1430;1450;1510;1520;1540;1550"); + КодыОтчетности.Вставить("93", "1110;1120;1130;1140;1150;1160;1170;1180;1190;1210;1220;1230;1240;1250;1260;" + + "-1410;-1420;-1430;-1450;-1510;-1520;-1540;-1550"); + Для каждого КодОтчетности Из КодыОтчетности Цикл + КодыОтчетности[КодОтчетности.Ключ] = СтрРазделить(КодОтчетности.Значение, ";", Ложь); + КонецЦикла; + НомераГодов = СтрРазделить("1;2;3",";", Ложь); + + Для каждого СтрокаТаблицы Из ДанныеБухгалтерскойОтчетности Цикл + + Если СтрокаТаблицы.ТипОтчетности <> "2" Тогда + Продолжить; + КонецЕсли; + + Для каждого КодОтчетности Из КодыОтчетности Цикл + ЗначениеПоказателяКод = ""; + Для каждого НомерГода Из НомераГодов Цикл + ЕстьДанные = СтрокаТаблицы.Показатели.Свойство("П1110_" + НомерГода); + Если НЕ ЕстьДанные Тогда + Продолжить; + КонецЕсли; + ЗначениеПоказателя = 0; + Для каждого КодСтроки Из КодОтчетности.Значение Цикл + Множитель = ?(Лев(КодСтроки, 1) = "-", -1, 1); + ИмяПоказателя = "П" + СтрЗаменить(КодСтроки, "-", "") + "_" + НомерГода; + ЗначениеПоказателя = ЗначениеПоказателя + Множитель * СтрокаТаблицы.Показатели[ИмяПоказателя]; + КонецЦикла; + СтрокаТаблицы.Показатели.Вставить("П" + КодОтчетности.Ключ + "_" + НомерГода, ЗначениеПоказателя); + КонецЦикла; + Если ПустаяСтрока(ЗначениеПоказателяКод) Тогда + ЗначениеПоказателяКод = КодОтчетности.Значение[0]; + КонецЕсли; + СтрокаТаблицы.Показатели.Вставить("Код" + КодОтчетности.Ключ, ЗначениеПоказателяКод); + КонецЦикла; + + Если СтрокаТаблицы.ЕстьДвижениеДенег Тогда + // Сальдо на начало и конец года для отчета о движении денег берем из баланса. + Если СтрокаТаблицы.Показатели.Свойство("П4100_1") Тогда + Если СтрокаТаблицы.Показатели.Свойство("П1250_1") Тогда + СтрокаТаблицы.Показатели.Вставить("П4500_1", СтрокаТаблицы.Показатели.П1250_1); + КонецЕсли; + Если СтрокаТаблицы.Показатели.Свойство("П1250_2") Тогда + СтрокаТаблицы.Показатели.Вставить("П4450_1", СтрокаТаблицы.Показатели.П1250_2); + КонецЕсли; + КонецЕсли; + Если СтрокаТаблицы.Показатели.Свойство("П4100_2") Тогда + Если СтрокаТаблицы.Показатели.Свойство("П1250_2") Тогда + СтрокаТаблицы.Показатели.Вставить("П4500_2", СтрокаТаблицы.Показатели.П1250_2); + КонецЕсли; + Если СтрокаТаблицы.Показатели.Свойство("П1250_3") Тогда + СтрокаТаблицы.Показатели.Вставить("П4450_2", СтрокаТаблицы.Показатели.П1250_3); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ДобавитьДанныеОтчетностиМП(ДанныеБухгалтерскойОтчетности) + + // Ключ - код для вывода в отчет, значение - суммируемые (с минусом - вычитаемые) показатели бухгалтерской отчетности. + КодыМП = Новый Соответствие; + КодыМП.Вставить("11", "1140;1150;1160"); + КодыМП.Вставить("12", "1110;1120;1130;1170;1180;1190"); + КодыМП.Вставить("13", "1220;1230;1240;1260"); + КодыМП.Вставить("14", "1300;1310;1320;1340;1350;1360;1370"); + КодыМП.Вставить("15", "1420;1430;1450"); + КодыМП.Вставить("16", "1530;1540;1550"); + КодыМП.Вставить("21", "2120;2210;2220"); + КодыМП.Вставить("22", "2310;2320;2340"); + КодыМП.Вставить("23", "2410;2421;2430;2450;2460"); + Для каждого КодМП Из КодыМП Цикл + КодыМП[КодМП.Ключ] = СтрРазделить(КодМП.Значение, ";", Ложь); + КонецЦикла; + НомераГодов = СтрРазделить("1;2;3",";", Ложь); + + Для каждого СтрокаТаблицы Из ДанныеБухгалтерскойОтчетности Цикл + + Если СтрокаТаблицы.ТипОтчетности <> "1" Тогда + Продолжить; + КонецЕсли; + + Для каждого КодМП Из КодыМП Цикл + ЗначениеПоказателяКод = ""; + Для каждого НомерГода Из НомераГодов Цикл + ЕстьДанные = СтрокаТаблицы.Показатели.Свойство("П1110_" + НомерГода); + Если НЕ ЕстьДанные Тогда + Продолжить; + КонецЕсли; + ЗначениеПоказателя = 0; + Для каждого КодСтроки Из КодМП.Значение Цикл + Если ЗначениеПоказателя < СтрокаТаблицы.Показатели["П" + КодСтроки + "_" + НомерГода] Тогда + ЗначениеПоказателя = СтрокаТаблицы.Показатели["П" + КодСтроки + "_" + НомерГода]; + ЗначениеПоказателяКод = КодСтроки; + КонецЕсли; + КонецЦикла; + СтрокаТаблицы.Показатели.Вставить("П" + КодМП.Ключ + "_" + НомерГода, ЗначениеПоказателя); + КонецЦикла; + Если ПустаяСтрока(ЗначениеПоказателяКод) Тогда + ЗначениеПоказателяКод = КодМП.Значение[0]; + КонецЕсли; + СтрокаТаблицы.Показатели.Вставить("Код" + КодМП.Ключ, ЗначениеПоказателяКод); + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +Процедура ДобавитьДанныеОтчетностиНКО(ДанныеБухгалтерскойОтчетности) + + // Ключ - код для вывода в отчет, значение - суммируемые (с минусом - вычитаемые) показатели бухгалтерской отчетности. + КодыНКО = Новый Соответствие; + КодыНКО.Вставить("11", "1140;1150;1160"); + КодыНКО.Вставить("12", "1110;1120;1130;1170;1180;1190"); + КодыНКО.Вставить("13", "1210;1220;1230;1240;1260"); + КодыНКО.Вставить("14", "1310;1320;1350"); + КодыНКО.Вставить("15", "1360;1370"); + КодыНКО.Вставить("16", "1410;1420;1430;1450"); + КодыНКО.Вставить("17", "1510;1530;1540;1550"); + КодыНКО.Вставить("61", "6210;6215;6220;6230"); + Для каждого КодНКО Из КодыНКО Цикл + КодыНКО[КодНКО.Ключ] = СтрРазделить(КодНКО.Значение, ";", Ложь); + КонецЦикла; + НомераГодов = СтрРазделить("1;2;3", ";", Ложь); + + Для каждого СтрокаТаблицы Из ДанныеБухгалтерскойОтчетности Цикл + + Если СтрокаТаблицы.ТипОтчетности <> "0" Тогда + Продолжить; + КонецЕсли; + + Для каждого КодНКО Из КодыНКО Цикл + ЗначениеПоказателяКод = ""; + Для каждого НомерГода Из НомераГодов Цикл + ЕстьДанные = СтрокаТаблицы.Показатели.Свойство("П1110_" + НомерГода); + Если НЕ ЕстьДанные Тогда + Продолжить; + ИначеЕсли КодНКО.Ключ = "61" + И (НомерГода = "2" ИЛИ НомерГода = "3") Тогда + Продолжить; + КонецЕсли; + ЗначениеПоказателя = 0; + Для каждого КодСтроки Из КодНКО.Значение Цикл + Если ЗначениеПоказателя < СтрокаТаблицы.Показатели["П" + КодСтроки + "_" + НомерГода] Тогда + ЗначениеПоказателя = СтрокаТаблицы.Показатели["П" + КодСтроки + "_" + НомерГода]; + ЗначениеПоказателяКод = КодСтроки; + КонецЕсли; + КонецЦикла; + СтрокаТаблицы.Показатели.Вставить("П" + КодНКО.Ключ + "_" + НомерГода, ЗначениеПоказателя); + КонецЦикла; + Если ПустаяСтрока(ЗначениеПоказателяКод) Тогда + ЗначениеПоказателяКод = КодНКО.Значение[0]; + КонецЕсли; + СтрокаТаблицы.Показатели.Вставить("Код" + КодНКО.Ключ, ЗначениеПоказателяКод); + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +Функция ВалютаБухгалтерскойОтчетности(КодВалютыОтчетности) + + Если КодВалютыОтчетности = "383" Тогда + Возврат НСтр("ru='В рублях'"); + ИначеЕсли КодВалютыОтчетности = "384" Тогда + Возврат НСтр("ru='В тысячах рублей'"); + Иначе // "385" + Возврат НСтр("ru='В миллионах рублей'"); + КонецЕсли; + +КонецФункции + +#КонецОбласти + +#Область АнализОтчетности + +Процедура СформироватьРезультатАнализОтчетности(ИнформацияОСвязях, ДанныеОтчета) + + Если НЕ ДанныеОтчета.ЭтоЮридическоеЛицо Тогда + Возврат; + КонецЕсли; + + ТабличныйДокумент = Новый ТабличныйДокумент; + ПараметрыВывода = Новый Структура; + ПараметрыВывода.Вставить("ОбластиМакета", ВсеОбластиМакета("АнализОтчетности")); + ПараметрыВывода.Вставить("ОбластиРасшифровки", НоваяТаблицаОбластиРасшифровки()); + ПараметрыВывода.Вставить("ЭтоЮридическоеЛицо", ДанныеОтчета.ЭтоЮридическоеЛицо); + + ОбластиМакета = ПараметрыВывода.ОбластиМакета; + ТабличныйДокумент.Вывести(ОбластиМакета.Шапка); + + Если ИнформацияОСвязях.АнализОтчетности.Количество() = 0 Тогда + + Если ИнформацияОСвязях.ДанныеБухгалтерскойОтчетности.Количество() = 0 Тогда + ТабличныйДокумент.Вывести(ОбластиМакета.АнализНеПроведенНетОтчетности); + ИначеЕсли ИнформацияОСвязях.ДанныеБухгалтерскойОтчетности[0].ТипОтчетности = "0" Тогда + ТабличныйДокумент.Вывести(ОбластиМакета.АнализНеПроведенОтчетностьНКО); + Иначе + ТабличныйДокумент.Вывести(ОбластиМакета.АнализНеПроведенПрочее); + КонецЕсли; + + Иначе + + СтруктураГодов = ПериодыБухгалтерскойОтчетности(); + ИменаПоказателейСКартинками = "Продажи;Прибыль;Деньги;Запасы;ОС;Дебиторы;Кредиторы;Кредиты;ЧистыеАктивы"; + Для каждого СтрокаТаблицы Из ИнформацияОСвязях.АнализОтчетности Цикл + ОбластиМакета.Показатели.Параметры.Заполнить(СтрокаТаблицы); + ОбластиМакета.Показатели.Параметры.Заполнить(СтруктураГодов); + ОбластиМакета.Показатели.Параметры.Заполнить(СтрокаТаблицы.Показатели); + УстановитьКартинкиАнализаОтчетности( + ОбластиМакета.Показатели, СтрокаТаблицы.Показатели, ИменаПоказателейСКартинками, "1", "2"); + УстановитьКартинкиАнализаОтчетности( + ОбластиМакета.Показатели, СтрокаТаблицы.Показатели, ИменаПоказателейСКартинками, "2", "3"); + ТабличныйДокумент.Вывести(ОбластиМакета.Показатели); + КонецЦикла; + + ПараметрыВывода.ОбластиРасшифровки.ЗаполнитьЗначения("РезультатПоказатели", "ИмяДокумента"); + Для каждого СтрокаТаблицы Из ПараметрыВывода.ОбластиРасшифровки Цикл + НоваяСтрока = ДанныеОтчета.ОбластиРасшифровки.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТаблицы); + КонецЦикла; + + КонецЕсли; + + ДанныеОтчета.Вставить("РезультатАнализОтчетности", ТабличныйДокумент); + ДанныеОтчета.Вставить("ИмяФайлаАнализОтчетности", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Досье контрагента %1 - анализ отчетности'"), + ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла( + ИнформацияОСвязях.НаименованиеСокращенное, ""))); + +КонецПроцедуры + +Процедура УстановитьКартинкиАнализаОтчетности(ОбластьМакета, Показатели, ИменаПоказателейСКартинками, Номер1, Номер2) + + ЕстьДанные = Показатели.Свойство("Продажи_" + Номер1) + И Показатели["Продажи_" + Номер1] <> Неопределено + И Показатели.Свойство("Продажи_" + Номер2) + И Показатели["Продажи_" + Номер2] <> Неопределено; + + ВсеКартинки = ВсеКартинкиТабличногоДокумента(ОбластьМакета); + ИменаПоказателей = СтрРазделить(ИменаПоказателейСКартинками, ";", Ложь); + Для каждого ИмяПоказателя Из ИменаПоказателей Цикл + + Если ЕстьДанные Тогда + ЗначениеПоказателя1 = Показатели[ИмяПоказателя + "_" + Номер1]; + ЗначениеПоказателя2 = Показатели[ИмяПоказателя + "_" + Номер2]; + Если ЗначениеПоказателя1 > ЗначениеПоказателя2 Тогда + ВыбраннаяКартинка = БиблиотекаКартинок.ДосьеУвеличениеПоказателя; + ИначеЕсли ЗначениеПоказателя1 < ЗначениеПоказателя2 Тогда + ВыбраннаяКартинка = БиблиотекаКартинок.ДосьеУменьшениеПоказателя; + Иначе + ВыбраннаяКартинка = Новый Картинка; + КонецЕсли; + Иначе + ВыбраннаяКартинка = Новый Картинка; + КонецЕсли; + + ВсеКартинки["Картинка" + ИмяПоказателя + "_" + Номер1].Картинка = ВыбраннаяКартинка; + + КонецЦикла; + +КонецПроцедуры + +Функция НоваяТаблицаАнализОтчетности() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("ВалютаОтчетности", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("Показатели"); // Структура + Возврат Результат; + +КонецФункции + +Процедура ПодготовитьДанныеАнализаОтчетности(ИнформацияОСвязях) + + ИнформацияОСвязях.Вставить("АнализОтчетности", НоваяТаблицаАнализОтчетности()); + Если НЕ ИнформацияОСвязях.Свойство("ДанныеБухгалтерскойОтчетности") + ИЛИ ИнформацияОСвязях.ДанныеБухгалтерскойОтчетности.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + СтрокаОтчетности = ИнформацияОСвязях.ДанныеБухгалтерскойОтчетности[0]; + Если СтрокаОтчетности.ТипОтчетности = "0" Тогда + Возврат; + КонецЕсли; + + // Ключ - код для вывода в отчет, значение - суммируемые (с минусом - вычитаемые) показатели бухгалтерской отчетности. + + РасчетПоказателейТипа2 = Новый Структура; + РасчетПоказателейТипа2.Вставить("Продажи", "2110"); + РасчетПоказателейТипа2.Вставить("Прибыль", "2400"); + РасчетПоказателейТипа2.Вставить("Деньги", "1250"); + РасчетПоказателейТипа2.Вставить("Запасы", "1210"); + РасчетПоказателейТипа2.Вставить("ОС", "1150"); + РасчетПоказателейТипа2.Вставить("Дебиторы", "1220;1230;1240;1260"); + РасчетПоказателейТипа2.Вставить("Кредиторы", "1520"); + РасчетПоказателейТипа2.Вставить("Кредиты", "1410;1510"); + РасчетПоказателейТипа2.Вставить("ЧистыеАктивы", + "1110;1120;1130;1140;1150;1160;1170;1180;1190;1210;1220;1230;1240;1250;1260;" + + "-1410;-1420;-1430;-1450;-1510;-1520;-1540;-1550"); + Для каждого РасчетПоказателя Из РасчетПоказателейТипа2 Цикл + РасчетПоказателейТипа2[РасчетПоказателя.Ключ] = СтрРазделить(РасчетПоказателя.Значение, ";", Ложь); + КонецЦикла; + + РасчетПоказателейТипа1 = Новый Структура; + РасчетПоказателейТипа1.Вставить("Продажи", "2110"); + РасчетПоказателейТипа1.Вставить("Прибыль", "2400"); + РасчетПоказателейТипа1.Вставить("Деньги", "1250"); + РасчетПоказателейТипа1.Вставить("Запасы", "1210"); + РасчетПоказателейТипа1.Вставить("ОС", "1150;1140;1160"); + РасчетПоказателейТипа1.Вставить("Дебиторы", "1220;1230;1240;1260"); + РасчетПоказателейТипа1.Вставить("Кредиторы", "1520"); + РасчетПоказателейТипа1.Вставить("Кредиты", "1410;1510"); + РасчетПоказателейТипа1.Вставить("ЧистыеАктивы", + "1110;1120;1130;1140;1150;1160;1170;1180;1190;1210;1220;1230;1240;1250;1260;" + + "-1410;-1420;-1430;-1450;-1510;-1520"); + Для каждого РасчетПоказателя Из РасчетПоказателейТипа1 Цикл + РасчетПоказателейТипа1[РасчетПоказателя.Ключ] = СтрРазделить(РасчетПоказателя.Значение, ";", Ложь); + КонецЦикла; + + ВалютаОтчетности = ""; + ЗаполненныеПоказателиПоГодам = Новый Структура("Год1,Год2,Год3", Ложь, Ложь, Ложь); + Для каждого СтрокаТаблицы Из ИнформацияОСвязях.ДанныеБухгалтерскойОтчетности Цикл + + Если СтрокаТаблицы.ТипОтчетности = "0" Тогда // Показатели для отчетности НКО не рассчитываем. + Продолжить; + КонецЕсли; + ДанныеОтчетности = СтрокаТаблицы.Показатели; + ДанныеПоГодам = Новый Соответствие; + ДанныеПоГодам.Вставить("1", ДанныеОтчетности.Свойство("П1110_1")); + ДанныеПоГодам.Вставить("2", ДанныеОтчетности.Свойство("П1110_2")); + ДанныеПоГодам.Вставить("3", ДанныеОтчетности.Свойство("П1110_3")); + Если НЕ (ДанныеПоГодам["1"] ИЛИ ДанныеПоГодам["2"] ИЛИ ДанныеПоГодам["3"]) Тогда + Продолжить; + КонецЕсли; + + Если ВалютаОтчетности <> СтрокаТаблицы.ВалютаОтчетности Тогда + НоваяСтрока = ИнформацияОСвязях.АнализОтчетности.Добавить(); + НоваяСтрока.ВалютаОтчетности = СтрокаТаблицы.ВалютаОтчетности; + НоваяСтрока.Показатели = Новый Структура; + ВалютаОтчетности = СтрокаТаблицы.ВалютаОтчетности; + КонецЕсли; + + РасчетПоказателей = ?(СтрокаТаблицы.ТипОтчетности = "2", РасчетПоказателейТипа2, РасчетПоказателейТипа1); + Для каждого ДанныеГода Из ДанныеПоГодам Цикл + Если НЕ ДанныеГода.Значение + ИЛИ ЗаполненныеПоказателиПоГодам["Год" + ДанныеГода.Ключ] Тогда + Продолжить; + КонецЕсли; + ЗаполненныеПоказателиПоГодам["Год" + ДанныеГода.Ключ] = Истина; + Для каждого РасчетПоказателя Из РасчетПоказателей Цикл + ИмяПоказателя = РасчетПоказателя.Ключ + "_" + ДанныеГода.Ключ; + ЗначениеПоказателя = 0; + Для каждого ЭлементРасчета Из РасчетПоказателя.Значение Цикл + Множитель = ?(Лев(ЭлементРасчета, 1) = "-", -1, 1); + ИмяДанных = "П" + СтрЗаменить(ЭлементРасчета, "-", "") + "_" + ДанныеГода.Ключ; + ЗначениеПоказателя = ЗначениеПоказателя + Множитель * ДанныеОтчетности[ИмяДанных]; + КонецЦикла; + НоваяСтрока.Показатели.Вставить(ИмяПоказателя, ЗначениеПоказателя); + КонецЦикла; + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти + +#Область ФинансовыйАнализ + +Процедура СформироватьРезультатФинансовыйАнализ(ИнформацияОСвязях, ДанныеОтчета) + + Если НЕ ДанныеОтчета.ЭтоЮридическоеЛицо Тогда + Возврат; + КонецЕсли; + + ТабличныйДокумент = Новый ТабличныйДокумент; + ПараметрыВывода = Новый Структура; + ПараметрыВывода.Вставить("ОбластиМакета", ВсеОбластиМакета("ФинансовыйАнализ")); + ПараметрыВывода.Вставить("ОбластиРасшифровки", НоваяТаблицаОбластиРасшифровки()); + ПараметрыВывода.Вставить("СтруктураГодов", ПериодыБухгалтерскойОтчетности()); + + ОбластьШапка = ПараметрыВывода.ОбластиМакета.Шапка; + + Если ИнформацияОСвязях.ФинансовыйАнализ.Количество() = 0 Тогда + + ОбластьШапка.Параметры.ТекстЗаголовка = НСтр("ru='Финансовый анализ'"); + ТабличныйДокумент.Вывести(ОбластьШапка); + + Если ИнформацияОСвязях.ДанныеБухгалтерскойОтчетности.Количество() = 0 Тогда + ТабличныйДокумент.Вывести(ПараметрыВывода.ОбластиМакета.АнализНеПроведенНетОтчетности); + ИначеЕсли ИнформацияОСвязях.ДанныеБухгалтерскойОтчетности[0].ТипОтчетности = "0" Тогда + ТабличныйДокумент.Вывести(ПараметрыВывода.ОбластиМакета.АнализНеПроведенОтчетностьНКО); + Иначе + ТабличныйДокумент.Вывести(ПараметрыВывода.ОбластиМакета.АнализНеПроведенПрочее); + КонецЕсли; + + Иначе + + СтрокаТаблицы = ИнформацияОСвязях.ФинансовыйАнализ[0]; + + ОбластьШапка.Параметры.ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Финансовый анализ за %1 год'"), + СтрокаТаблицы.ГодОтчетности); + ТабличныйДокумент.Вывести(ОбластьШапка); + + ВывестиРазделРискБанкротства(ТабличныйДокумент, СтрокаТаблицы, ПараметрыВывода); + + ВывестиРазделКредитоспособность(ТабличныйДокумент, СтрокаТаблицы, ПараметрыВывода); + + ВывестиРазделРентабельностьАктивов(ТабличныйДокумент, СтрокаТаблицы, ПараметрыВывода); + + ВывестиРазделРентабельностьПродаж(ТабличныйДокумент, СтрокаТаблицы, ПараметрыВывода); + + ПараметрыВывода.ОбластиРасшифровки.ЗаполнитьЗначения("РезультатФинансовыйАнализ", "ИмяДокумента"); + Для каждого СтрокаТаблицы Из ПараметрыВывода.ОбластиРасшифровки Цикл + НоваяСтрока = ДанныеОтчета.ОбластиРасшифровки.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТаблицы); + КонецЦикла; + + КонецЕсли; + + ДанныеОтчета.Вставить("РезультатФинансовыйАнализ", ТабличныйДокумент); + ДанныеОтчета.Вставить("ИмяФайлаФинансовыйАнализ", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Досье контрагента %1 - финансовый анализ'"), + ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла( + ИнформацияОСвязях.НаименованиеСокращенное, ""))); + +КонецПроцедуры + +Процедура ВывестиРазделРискБанкротства(ТабличныйДокумент, СтрокаДанных, ПараметрыВывода) + + Показатели = СтрокаДанных.ПоказателиРискБанкротства; + ОбластиМакета = ПараметрыВывода.ОбластиМакета; + + // Диаграмма + Диаграмма = ОбластиМакета.РискБанкротства.Рисунки.ДиаграммаРискБанкротства.Объект; + Если НЕ Показатели.ПятиФакторнаяМодель Тогда + Полоса1 = Диаграмма.ПолосыИзмерительнойДиаграммы[0]; + Полоса1.Конец = 110; + Полоса2 = Диаграмма.ПолосыИзмерительнойДиаграммы[1]; + Полоса2.Начало = 110; + Полоса2.Конец = 260; + Полоса3 = Диаграмма.ПолосыИзмерительнойДиаграммы[2]; + Полоса3.Начало = 260; + КонецЕсли; + ИндексАльтмана = ?(Показатели.Свойство("ИндексАльтмана_1"), Показатели.ИндексАльтмана_1, 0); + ЗначениеТочкиДиаграммы = ?(ИндексАльтмана < 0, 0, ?(ИндексАльтмана > 5, 500, ИндексАльтмана * 100)); + ТекстТочкиДиаграммы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Индекс Альтмана Z = %1'"), + ИндексАльтмана); + Диаграмма.УстановитьЗначение(0, 0, ЗначениеТочкиДиаграммы, , ТекстТочкиДиаграммы); + // Комментарии к диаграмме + ОбластиМакета.РискБанкротства.Параметры.Заполнить(Показатели); + ОбластиМакета.РискБанкротства.Параметры.ИндексАльтмана = ИндексАльтмана; + ОбластиМакета.РискБанкротства.Параметры.ПояснениеОценкиРискБанкротства = Показатели.ПояснениеОценкиРискБанкротства; + Если Показатели.ОценкаРискБанкротства = "ПлохаяОценка" Тогда + ОбластиМакета.РискБанкротства.Области.ПояснениеОценкиРискБанкротства.ЦветТекста = + ЦветаСтиля.ДосьеПлохаяОценкаЦвет; + ИначеЕсли Показатели.ОценкаРискБанкротства = "ХорошаяОценка" Тогда + ОбластиМакета.РискБанкротства.Области.ПояснениеОценкиРискБанкротства.ЦветТекста = + ЦветаСтиля.ДосьеХорошаяОценкаЦвет; + КонецЕсли; + + ТабличныйДокумент.Вывести(ОбластиМакета.РискБанкротства); + // Формат шкалы не переносится из макета. + ТабличныйДокумент.Рисунки.ДиаграммаРискБанкротства.Объект.ОбластьПостроения.ФорматШкалыЗначений = "ЧС=2;ЧН="; + + // Свернуто + Расшифровка = Новый Структура("Действие,ИмяДокумента,ИмяОбласти", + "Показать", "РезультатФинансовыйАнализ", "РискБанкротства"); + ОбластиМакета.ПоказатьРасчет.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.ПоказатьРасчет); + + // Развернуто + + СтрокаОбласти = ПараметрыВывода.ОбластиРасшифровки.Добавить(); + СтрокаОбласти.ИмяОбласти = "РискБанкротства"; + СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; + // Порядок расчета + ОбластьРасчет = ?(Показатели.ПятиФакторнаяМодель, + ОбластиМакета.РискБанкротстваРасчетПроизводство, + ОбластиМакета.РискБанкротстваРасчет); + ТабличныйДокумент.Вывести(ОбластьРасчет); + // Показатели для расчета + ОбластьПоказатели = ?(Показатели.ПятиФакторнаяМодель, + ОбластиМакета.РискБанкротстваПоказателиПроизводство, + ОбластиМакета.РискБанкротстваПоказатели); + ОбластьПоказатели.Параметры.Заполнить(СтрокаДанных); + ОбластьПоказатели.Параметры.Заполнить(ПараметрыВывода.СтруктураГодов); + ОбластьПоказатели.Параметры.Заполнить(Показатели); + ТабличныйДокумент.Вывести(ОбластьПоказатели); + // Скрыть расчет + Расшифровка = Новый Структура("Действие,ИмяДокумента,ИмяОбласти", + "Свернуть", "РезультатФинансовыйАнализ", "РискБанкротства"); + ОбластиМакета.СкрытьРасчет.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.СкрытьРасчет); + СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; + +КонецПроцедуры + +Процедура ВывестиРазделКредитоспособность(ТабличныйДокумент, СтрокаДанных, ПараметрыВывода) + + Показатели = СтрокаДанных.ПоказателиКредитоспособность; + ОбластиМакета = ПараметрыВывода.ОбластиМакета; + + // Диаграмма + Диаграмма = ОбластиМакета.Кредитоспособность.Рисунки.ДиаграммаКредитоспособность.Объект; + Кредитоспособность = ?(Показатели.Свойство("Кредитоспособность_1"), Показатели.Кредитоспособность_1, 0); + ЗначениеТочкиДиаграммы = ?(Кредитоспособность < 1, 50, ?(Кредитоспособность > 3, 300, Кредитоспособность * 100)); + ТекстТочкиДиаграммы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Оценка кредитоспособности S = %1'"), + Кредитоспособность); + Диаграмма.УстановитьЗначение(0, 0, ЗначениеТочкиДиаграммы, , ТекстТочкиДиаграммы); + // Комментарии к диаграмме + ОбластиМакета.Кредитоспособность.Параметры.Заполнить(Показатели); + ОбластиМакета.Кредитоспособность.Параметры.Кредитоспособность = Кредитоспособность; + Если Показатели.ОценкаКредитоспособность = "ПлохаяОценка" Тогда + ОбластиМакета.Кредитоспособность.Области.ПояснениеОценкиКредитоспособность.ЦветТекста = + ЦветаСтиля.ДосьеПлохаяОценкаЦвет; + ИначеЕсли Показатели.ОценкаКредитоспособность = "ХорошаяОценка" Тогда + ОбластиМакета.Кредитоспособность.Области.ПояснениеОценкиКредитоспособность.ЦветТекста = + ЦветаСтиля.ДосьеХорошаяОценкаЦвет; + КонецЕсли; + + ТабличныйДокумент.Вывести(ОбластиМакета.Кредитоспособность); + // Формат шкалы не переносится из макета. + ТабличныйДокумент.Рисунки.ДиаграммаКредитоспособность.Объект.ОбластьПостроения.ФорматШкалыЗначений = "ЧС=2;ЧН="; + + // Свернуто + Расшифровка = Новый Структура("Действие,ИмяДокумента,ИмяОбласти", + "Показать", "РезультатФинансовыйАнализ", "Кредитоспособность"); + ОбластиМакета.ПоказатьРасчет.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.ПоказатьРасчет); + + // Развернуто + + СтрокаОбласти = ПараметрыВывода.ОбластиРасшифровки.Добавить(); + СтрокаОбласти.ИмяОбласти = "Кредитоспособность"; + СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; + // Порядок расчета + ОбластьРасчет = ОбластиМакета.КредитоспособностьРасчет; + ТабличныйДокумент.Вывести(ОбластьРасчет); + // Показатели для расчета + ОбластьПоказатели = ОбластиМакета.КредитоспособностьПоказатели; + ОбластьПоказатели.Параметры.Заполнить(СтрокаДанных); + ОбластьПоказатели.Параметры.Заполнить(ПараметрыВывода.СтруктураГодов); + ОбластьПоказатели.Параметры.Заполнить(Показатели); + ТабличныйДокумент.Вывести(ОбластьПоказатели); + // Скрыть расчет + Расшифровка = Новый Структура("Действие,ИмяДокумента,ИмяОбласти", + "Свернуть", "РезультатФинансовыйАнализ", "Кредитоспособность"); + ОбластиМакета.СкрытьРасчет.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.СкрытьРасчет); + СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; + +КонецПроцедуры + +Процедура ВывестиРазделРентабельностьАктивов(ТабличныйДокумент, СтрокаДанных, ПараметрыВывода) + + Показатели = СтрокаДанных.ПоказателиРентабельностьАктивов; + ОбластиМакета = ПараметрыВывода.ОбластиМакета; + + // Диаграмма + РентабельностьАктивов = ?(Показатели.Свойство("РентабельностьАктивов_1"), Показатели.РентабельностьАктивов_1, 0); + СредняяРентабельность = ?(Показатели.Свойство("РентабельностьАктивов3_1"), Показатели.РентабельностьАктивов3_1, 0); + ПредельнаяРентабельность = ?(Показатели.Свойство("РентабельностьАктивов4_1"), Показатели.РентабельностьАктивов4_1, 0); + ОбластьРентабельностьАктивов = ?(СредняяРентабельность = 0, + ОбластиМакета.РентабельностьАктивов0, + ОбластиМакета.РентабельностьАктивов); + Если СредняяРентабельность = 0 Тогда + Диаграмма = ОбластьРентабельностьАктивов.Рисунки.ДиаграммаРентабельностьАктивов0.Объект; + Иначе + Диаграмма = ОбластьРентабельностьАктивов.Рисунки.ДиаграммаРентабельностьАктивов.Объект; + Диаграмма.МинимальноеЗначение = 0; + МаксимальноеЗначение = СредняяРентабельность * 2 * 100; + МаксимальноеЗначение = ?(МаксимальноеЗначение > 100, МаксимальноеЗначение - МаксимальноеЗначение % 100, + ?(МаксимальноеЗначение > 10, МаксимальноеЗначение - МаксимальноеЗначение % 10, + ?(МаксимальноеЗначение > 1, Окр(МаксимальноеЗначение, 0), + МаксимальноеЗначение))); + Диаграмма.МаксимальноеЗначение = МаксимальноеЗначение; + Полоса1 = Диаграмма.ПолосыИзмерительнойДиаграммы[0]; + Полоса1.Конец = ПредельнаяРентабельность * 100; + Полоса2 = Диаграмма.ПолосыИзмерительнойДиаграммы[1]; + Полоса2.Начало = ПредельнаяРентабельность * 100; + Полоса2.Конец = СредняяРентабельность * 100; + Полоса3 = Диаграмма.ПолосыИзмерительнойДиаграммы[2]; + Полоса3.Начало = СредняяРентабельность * 100; + КонецЕсли; + ЗначениеТочкиДиаграммы = ?(РентабельностьАктивов * 100 < Диаграмма.МинимальноеЗначение, + Диаграмма.МинимальноеЗначение, + ?(РентабельностьАктивов * 100 > Диаграмма.МаксимальноеЗначение, + Диаграмма.МаксимальноеЗначение, + РентабельностьАктивов * 100)); + ТекстТочкиДиаграммы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Рентабельность активов %1'"), + РентабельностьАктивов) + " %"; + Диаграмма.УстановитьЗначение(0, 0, ЗначениеТочкиДиаграммы, , ТекстТочкиДиаграммы); + // Комментарии к диаграмме + ОбластьРентабельностьАктивов.Параметры.Заполнить(Показатели); + ОбластьРентабельностьАктивов.Параметры.РентабельностьАктивов = РентабельностьАктивов; + ОбластьПояснениеОценки = ?(СредняяРентабельность = 0, + ОбластьРентабельностьАктивов.Области.ПояснениеОценкиРентабельностьАктивов0, + ОбластьРентабельностьАктивов.Области.ПояснениеОценкиРентабельностьАктивов); + Если Показатели.ОценкаРентабельностьАктивов = "ПлохаяОценка" Тогда + ОбластьПояснениеОценки.ЦветТекста = ЦветаСтиля.ДосьеПлохаяОценкаЦвет; + ИначеЕсли Показатели.ОценкаРентабельностьАктивов = "ХорошаяОценка" Тогда + ОбластьПояснениеОценки.ЦветТекста = ЦветаСтиля.ДосьеХорошаяОценкаЦвет; + КонецЕсли; + + ТабличныйДокумент.Вывести(ОбластьРентабельностьАктивов); + // Формат шкалы не переносится из макета. + Если СредняяРентабельность = 0 Тогда + ТабличныйДокумент.Рисунки.ДиаграммаРентабельностьАктивов0.Объект.ОбластьПостроения.ФорматШкалыЗначений = "ЧС=2;ЧН="; + Иначе + ТабличныйДокумент.Рисунки.ДиаграммаРентабельностьАктивов.Объект.ОбластьПостроения.ФорматШкалыЗначений = "ЧС=2;ЧН="; + КонецЕсли; + + // Свернуто + Расшифровка = Новый Структура("Действие,ИмяДокумента,ИмяОбласти", + "Показать", "РезультатФинансовыйАнализ", "РентабельностьАктивов"); + ОбластиМакета.ПоказатьРасчет.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.ПоказатьРасчет); + + // Развернуто + + СтрокаОбласти = ПараметрыВывода.ОбластиРасшифровки.Добавить(); + СтрокаОбласти.ИмяОбласти = "РентабельностьАктивов"; + СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; + // Порядок расчета + ОбластьРасчет = ОбластиМакета.РентабельностьАктивовРасчет; + ТабличныйДокумент.Вывести(ОбластьРасчет); + // Показатели для расчета + ОбластьПоказатели = ОбластиМакета.РентабельностьАктивовПоказатели; + ОбластьПоказатели.Параметры.Заполнить(СтрокаДанных); + ОбластьПоказатели.Параметры.Заполнить(ПараметрыВывода.СтруктураГодов); + ОбластьПоказатели.Параметры.Заполнить(Показатели); + Если ЗначениеЗаполнено(Показатели.ВидДеятельности) Тогда + ПояснениеРасчета = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Средняя рентабельность приведена по данным Росстата для вида деятельности ""%1""'"), + Показатели.ВидДеятельности); + ОбластьПоказатели.Параметры.ПояснениеРасчета = ПояснениеРасчета; + КонецЕсли; + ТабличныйДокумент.Вывести(ОбластьПоказатели); + // Скрыть расчет + Расшифровка = Новый Структура("Действие,ИмяДокумента,ИмяОбласти", + "Свернуть", "РезультатФинансовыйАнализ", "РентабельностьАктивов"); + ОбластиМакета.СкрытьРасчет.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.СкрытьРасчет); + СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; + +КонецПроцедуры + +Процедура ВывестиРазделРентабельностьПродаж(ТабличныйДокумент, СтрокаДанных, ПараметрыВывода) + + Показатели = СтрокаДанных.ПоказателиРентабельностьПродаж; + ОбластиМакета = ПараметрыВывода.ОбластиМакета; + + // Диаграмма + РентабельностьПродаж = ?(Показатели.Свойство("РентабельностьПродаж_1"), Показатели.РентабельностьПродаж_1, 0); + СредняяРентабельность = ?(Показатели.Свойство("РентабельностьПродаж3_1"), Показатели.РентабельностьПродаж3_1, 0); + ПредельнаяРентабельность = ?(Показатели.Свойство("РентабельностьПродаж4_1"), Показатели.РентабельностьПродаж4_1, 0); + ОбластьРентабельностьПродаж = ?(СредняяРентабельность = 0, + ОбластиМакета.РентабельностьПродаж0, + ОбластиМакета.РентабельностьПродаж); + Если СредняяРентабельность = 0 Тогда + Диаграмма = ОбластьРентабельностьПродаж.Рисунки.ДиаграммаРентабельностьПродаж0.Объект; + Иначе + Диаграмма = ОбластьРентабельностьПродаж.Рисунки.ДиаграммаРентабельностьПродаж.Объект; + Диаграмма.МинимальноеЗначение = 0; + МаксимальноеЗначение = СредняяРентабельность * 2 * 100; + МаксимальноеЗначение = ?(МаксимальноеЗначение > 100, МаксимальноеЗначение - МаксимальноеЗначение % 100, + ?(МаксимальноеЗначение > 10, МаксимальноеЗначение - МаксимальноеЗначение % 10, + ?(МаксимальноеЗначение > 1, Окр(МаксимальноеЗначение, 0), + МаксимальноеЗначение))); + Диаграмма.МаксимальноеЗначение = МаксимальноеЗначение; + Полоса1 = Диаграмма.ПолосыИзмерительнойДиаграммы[0]; + Полоса1.Конец = ПредельнаяРентабельность * 100; + Полоса2 = Диаграмма.ПолосыИзмерительнойДиаграммы[1]; + Полоса2.Начало = ПредельнаяРентабельность * 100; + Полоса2.Конец = СредняяРентабельность * 100; + Полоса3 = Диаграмма.ПолосыИзмерительнойДиаграммы[2]; + Полоса3.Начало = СредняяРентабельность * 100; + КонецЕсли; + ЗначениеТочкиДиаграммы = ?(РентабельностьПродаж * 100 < Диаграмма.МинимальноеЗначение, + Диаграмма.МинимальноеЗначение, + ?(РентабельностьПродаж * 100 > Диаграмма.МаксимальноеЗначение, + Диаграмма.МаксимальноеЗначение, + РентабельностьПродаж * 100)); + ТекстТочкиДиаграммы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Рентабельность продаж %1'"), + РентабельностьПродаж) + " %"; + Диаграмма.УстановитьЗначение(0, 0, ЗначениеТочкиДиаграммы, , ТекстТочкиДиаграммы); + // Комментарии к диаграмме + ОбластьРентабельностьПродаж.Параметры.Заполнить(Показатели); + ОбластьРентабельностьПродаж.Параметры.РентабельностьПродаж = РентабельностьПродаж; + ОбластьПояснениеОценки = ?(СредняяРентабельность = 0, + ОбластьРентабельностьПродаж.Области.ПояснениеОценкиРентабельностьПродаж0, + ОбластьРентабельностьПродаж.Области.ПояснениеОценкиРентабельностьПродаж); + Если Показатели.ОценкаРентабельностьПродаж = "ПлохаяОценка" Тогда + ОбластьПояснениеОценки.ЦветТекста = ЦветаСтиля.ДосьеПлохаяОценкаЦвет; + ИначеЕсли Показатели.ОценкаРентабельностьПродаж = "ХорошаяОценка" Тогда + ОбластьПояснениеОценки.ЦветТекста = ЦветаСтиля.ДосьеХорошаяОценкаЦвет; + КонецЕсли; + + ТабличныйДокумент.Вывести(ОбластьРентабельностьПродаж); + // Формат шкалы не переносится из макета. + Если СредняяРентабельность = 0 Тогда + ТабличныйДокумент.Рисунки.ДиаграммаРентабельностьПродаж0.Объект.ОбластьПостроения.ФорматШкалыЗначений = "ЧС=2;ЧН="; + Иначе + ТабличныйДокумент.Рисунки.ДиаграммаРентабельностьПродаж.Объект.ОбластьПостроения.ФорматШкалыЗначений = "ЧС=2;ЧН="; + КонецЕсли; + + // Свернуто + Расшифровка = Новый Структура("Действие,ИмяДокумента,ИмяОбласти", + "Показать", "РезультатФинансовыйАнализ", "РентабельностьПродаж"); + ОбластиМакета.ПоказатьРасчет.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.ПоказатьРасчет); + + // Развернуто + + СтрокаОбласти = ПараметрыВывода.ОбластиРасшифровки.Добавить(); + СтрокаОбласти.ИмяОбласти = "РентабельностьПродаж"; + СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; + // Порядок расчета + ОбластьРасчет = ОбластиМакета.РентабельностьПродажРасчет; + ТабличныйДокумент.Вывести(ОбластьРасчет); + // Показатели для расчета + ОбластьПоказатели = ОбластиМакета.РентабельностьПродажПоказатели; + ОбластьПоказатели.Параметры.Заполнить(СтрокаДанных); + ОбластьПоказатели.Параметры.Заполнить(ПараметрыВывода.СтруктураГодов); + ОбластьПоказатели.Параметры.Заполнить(Показатели); + Если ЗначениеЗаполнено(Показатели.ВидДеятельности) Тогда + ПояснениеРасчета = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Средняя рентабельность приведена по данным Росстата для вида деятельности ""%1""'"), + Показатели.ВидДеятельности); + ОбластьПоказатели.Параметры.ПояснениеРасчета = ПояснениеРасчета; + КонецЕсли; + ТабличныйДокумент.Вывести(ОбластьПоказатели); + // Скрыть расчет + Расшифровка = Новый Структура("Действие,ИмяДокумента,ИмяОбласти", + "Свернуть", "РезультатФинансовыйАнализ", "РентабельностьПродаж"); + ОбластиМакета.СкрытьРасчет.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.СкрытьРасчет); + СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; + +КонецПроцедуры + +Функция НоваяТаблицаФинансовыйАнализ() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("ГодОтчетности", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ВалютаОтчетности", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ПоказателиРискБанкротства"); // Структура + Результат.Колонки.Добавить("ПоказателиКредитоспособность"); // Структура + Результат.Колонки.Добавить("ПоказателиРентабельностьАктивов"); // Структура + Результат.Колонки.Добавить("ПоказателиРентабельностьПродаж"); // Структура + Возврат Результат; + +КонецФункции + +Процедура ПодготовитьДанныеФинансовогоАнализа(ИнформацияОСвязях) + + ИнформацияОСвязях.Вставить("ФинансовыйАнализ", НоваяТаблицаФинансовыйАнализ()); + Если НЕ ИнформацияОСвязях.Свойство("ДанныеБухгалтерскойОтчетности") + ИЛИ ИнформацияОСвязях.ДанныеБухгалтерскойОтчетности.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + СтрокаОтчетности = ИнформацияОСвязях.ДанныеБухгалтерскойОтчетности[0]; + Если СтрокаОтчетности.ТипОтчетности = "0" Тогда + Возврат; + КонецЕсли; + + СтруктураГодов = ПериодыБухгалтерскойОтчетности(); + + ДанныеПоГодам = Новый ТаблицаЗначений; + ДанныеПоГодам.Колонки.Добавить("НомерГода"); + ДанныеПоГодам.Колонки.Добавить("Год"); + Если СтрокаОтчетности.Показатели.Свойство("П1110_1") Тогда + НоваяСтрока = ДанныеПоГодам.Добавить(); + НоваяСтрока.НомерГода = "1"; + НоваяСтрока.Год = СтруктураГодов.Год_1; + Иначе + Возврат; + КонецЕсли; + Если СтрокаОтчетности.Показатели.Свойство("П1110_2") Тогда + НоваяСтрока = ДанныеПоГодам.Добавить(); + НоваяСтрока.НомерГода = "2"; + НоваяСтрока.Год = СтруктураГодов.Год_2; + КонецЕсли; + Если СтрокаОтчетности.Показатели.Свойство("П1110_3") Тогда + НоваяСтрока = ДанныеПоГодам.Добавить(); + НоваяСтрока.НомерГода = "3"; + НоваяСтрока.Год = СтруктураГодов.Год_3; + КонецЕсли; + + НоваяСтрока = ИнформацияОСвязях.ФинансовыйАнализ.Добавить(); + НоваяСтрока.ГодОтчетности = ДанныеПоГодам[0].Год; + НоваяСтрока.ВалютаОтчетности = СтрокаОтчетности.ВалютаОтчетности; + + // Риск банкротства + НоваяСтрока.ПоказателиРискБанкротства = Новый Структура; + ДобавитьПоказателиРискБанкротства(НоваяСтрока.ПоказателиРискБанкротства, + СтрокаОтчетности, ДанныеПоГодам, ИнформацияОСвязях); + + // Кредитоспособность + НоваяСтрока.ПоказателиКредитоспособность = Новый Структура; + ДобавитьПоказателиКредитоспособность(НоваяСтрока.ПоказателиКредитоспособность, + СтрокаОтчетности, ДанныеПоГодам, ИнформацияОСвязях); + + // Рентабельность активов + НоваяСтрока.ПоказателиРентабельностьАктивов = Новый Структура; + ДобавитьПоказателиРентабельностьАктивов(НоваяСтрока.ПоказателиРентабельностьАктивов, + СтрокаОтчетности, ДанныеПоГодам, ИнформацияОСвязях); + + // Рентабельность продаж + НоваяСтрока.ПоказателиРентабельностьПродаж = Новый Структура; + ДобавитьПоказателиРентабельностьПродаж(НоваяСтрока.ПоказателиРентабельностьПродаж, + СтрокаОтчетности, ДанныеПоГодам, ИнформацияОСвязях); + +КонецПроцедуры + +Процедура ДобавитьПоказателиРискБанкротства(Показатели, СтрокаОтчетности, ДанныеПоГодам, ИнформацияОСвязях) + + Показатели.Вставить("ОценкаРискБанкротства", ""); + Показатели.Вставить("ПояснениеОценкиРискБанкротства", ""); + + // Ключ - код для вывода в отчет, значение - числитель и знаменатель, + // каждый из которых - суммируемые (с минусом - вычитаемые) показатели бухгалтерской отчетности. + РасчетПоказателей = Новый Структура; + Если СтрокаОтчетности.ТипОтчетности = "2" Тогда + РасчетПоказателей.Вставить("РискБанкротства1", Новый Структура("Числитель,Знаменатель", + "1300;1400;-1100", + "1600")); + РасчетПоказателей.Вставить("РискБанкротства2", Новый Структура("Числитель,Знаменатель", + "1370", + "1600")); + РасчетПоказателей.Вставить("РискБанкротства3", Новый Структура("Числитель,Знаменатель", + "2300;2330", + "1600")); + РасчетПоказателей.Вставить("РискБанкротства4", Новый Структура("Числитель,Знаменатель", + "1300", + "1400;1500")); + РасчетПоказателей.Вставить("РискБанкротства5", Новый Структура("Числитель,Знаменатель", + "2110", + "1600")); + Иначе + РасчетПоказателей.Вставить("РискБанкротства1", Новый Структура("Числитель,Знаменатель", + "1300;1410;1420;1430;1450;-1140;-1150;-1160;-1110;-1120;-1130;-1170;-1180;-1190", + "1600")); + РасчетПоказателей.Вставить("РискБанкротства2", Новый Структура("Числитель,Знаменатель", + "1300", + "1600")); + РасчетПоказателей.Вставить("РискБанкротства3", Новый Структура("Числитель,Знаменатель", + "2110;-2120;-2210;-2220;2310;2320;2340;-2350", + "1600")); + РасчетПоказателей.Вставить("РискБанкротства4", Новый Структура("Числитель,Знаменатель", + "1300", + "1410;1420;1430;1450;1510;1520;1530;1540;1550")); + РасчетПоказателей.Вставить("РискБанкротства5", Новый Структура("Числитель,Знаменатель", + "2110", + "1600")); + КонецЕсли; + Для каждого РасчетПоказателя Из РасчетПоказателей Цикл + РасчетПоказателя.Значение.Числитель = СтрРазделить(РасчетПоказателя.Значение.Числитель, ";", Ложь); + РасчетПоказателя.Значение.Знаменатель = СтрРазделить(РасчетПоказателя.Значение.Знаменатель, ";", Ложь); + КонецЦикла; + + Показатели.Вставить("ПятиФакторнаяМодель", ЭтоПроизводственноеПредприятие(ИнформацияОСвязях.ВидыДеятельности)); + + ДанныеОтчетности = СтрокаОтчетности.Показатели; + Для каждого ДанныеГода Из ДанныеПоГодам Цикл + НомерГода = ДанныеГода.НомерГода; + Для каждого РасчетПоказателя Из РасчетПоказателей Цикл + ИмяПоказателя = РасчетПоказателя.Ключ + "_" + НомерГода; + ЗначениеЧислителя = 0; + Для каждого ЭлементРасчета Из РасчетПоказателя.Значение.Числитель Цикл + Множитель = ?(Лев(ЭлементРасчета, 1) = "-", -1, 1); + ИмяДанных = "П" + СтрЗаменить(ЭлементРасчета, "-", "") + "_" + НомерГода; + ЗначениеЧислителя = ЗначениеЧислителя + Множитель * ДанныеОтчетности[ИмяДанных]; + КонецЦикла; + ЗначениеЗнаменателя = 0; + Для каждого ЭлементРасчета Из РасчетПоказателя.Значение.Знаменатель Цикл + Множитель = ?(Лев(ЭлементРасчета, 1) = "-", -1, 1); + ИмяДанных = "П" + СтрЗаменить(ЭлементРасчета, "-", "") + "_" + НомерГода; + ЗначениеЗнаменателя = ЗначениеЗнаменателя + Множитель * ДанныеОтчетности[ИмяДанных]; + КонецЦикла; + ЗначениеПоказателя = ?(ЗначениеЗнаменателя = 0, 0, Окр(ЗначениеЧислителя / ЗначениеЗнаменателя, 3)); + Показатели.Вставить(ИмяПоказателя, ЗначениеПоказателя); + КонецЦикла; + Если Показатели.ПятиФакторнаяМодель Тогда + ИндексАльтмана = Окр(0.717 * Показатели["РискБанкротства1_" + НомерГода] + + 0.847 * Показатели["РискБанкротства2_" + НомерГода] + + 3.107 * Показатели["РискБанкротства3_" + НомерГода] + + 0.42 * Показатели["РискБанкротства4_" + НомерГода] + + 0.995 * Показатели["РискБанкротства5_" + НомерГода], 3); + Иначе + ИндексАльтмана = Окр(6.56 * Показатели["РискБанкротства1_" + НомерГода] + + 3.26 * Показатели["РискБанкротства2_" + НомерГода] + + 6.72 * Показатели["РискБанкротства3_" + НомерГода] + + 1.05 * Показатели["РискБанкротства4_" + НомерГода], 3); + КонецЕсли; + Показатели.Вставить("ИндексАльтмана_" + НомерГода, ИндексАльтмана); + Если НомерГода = "1" Тогда + Если Показатели.ПятиФакторнаяМодель Тогда + ОценкаРискБанкротства = ?(ИндексАльтмана >= 2.9, "ХорошаяОценка", + ?(ИндексАльтмана > 1.23, "СредняяОценка", "ПлохаяОценка")); + Иначе + ОценкаРискБанкротства = ?(ИндексАльтмана >= 2.6, "ХорошаяОценка", + ?(ИндексАльтмана > 1.1, "СредняяОценка", "ПлохаяОценка")); + КонецЕсли; + Показатели.ОценкаРискБанкротства = ОценкаРискБанкротства; + Если ОценкаРискБанкротства = "ПлохаяОценка" Тогда + Показатели.ПояснениеОценкиРискБанкротства = НСтр("ru='Высокий риск банкротства'"); + ИначеЕсли ОценкаРискБанкротства = "СредняяОценка" Тогда + Показатели.ПояснениеОценкиРискБанкротства = НСтр("ru='Вероятность банкротства невысока'"); + Иначе // "ХорошаяОценка" + Показатели.ПояснениеОценкиРискБанкротства = НСтр("ru='Устойчивое финансовое состояние'"); + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Процедура ДобавитьПоказателиКредитоспособность(Показатели, СтрокаОтчетности, ДанныеПоГодам, ИнформацияОСвязях) + + Показатели.Вставить("ОценкаКредитоспособность", ""); + Показатели.Вставить("ПояснениеОценкиКредитоспособность", ""); + + // Ключ - код для вывода в отчет, значение - числитель и знаменатель, + // каждый из которых - суммируемые (с минусом - вычитаемые) показатели бухгалтерской отчетности. + РасчетПоказателей = Новый Структура; + Если СтрокаОтчетности.ТипОтчетности = "2" Тогда + РасчетПоказателей.Вставить("Кредитоспособность1", Новый Структура("Числитель,Знаменатель", + "1250", + "1510;1520;1550")); + РасчетПоказателей.Вставить("Кредитоспособность2", Новый Структура("Числитель,Знаменатель", + "1230;1240;1250", + "1510;1520;1550")); + РасчетПоказателей.Вставить("Кредитоспособность3", Новый Структура("Числитель,Знаменатель", + "1200", + "1510;1520;1550")); + РасчетПоказателей.Вставить("Кредитоспособность4", Новый Структура("Числитель,Знаменатель", + "1300;1530;1540", + "1700")); + РасчетПоказателей.Вставить("Кредитоспособность5", Новый Структура("Числитель,Знаменатель", + "2200", + "2110")); + РасчетПоказателей.Вставить("Кредитоспособность6", Новый Структура("Числитель,Знаменатель", + "2400", + "2110")); + Иначе + РасчетПоказателей.Вставить("Кредитоспособность1", Новый Структура("Числитель,Знаменатель", + "1250", + "1510;1520")); + РасчетПоказателей.Вставить("Кредитоспособность2", Новый Структура("Числитель,Знаменатель", + "1250;1220;1230;1240;1260", + "1510;1520")); + РасчетПоказателей.Вставить("Кредитоспособность3", Новый Структура("Числитель,Знаменатель", + "1210;1250;1220;1230;1240;1260", + "1510;1520")); + РасчетПоказателей.Вставить("Кредитоспособность4", Новый Структура("Числитель,Знаменатель", + "1300;1530;1540;1550", + "1700")); + РасчетПоказателей.Вставить("Кредитоспособность5", Новый Структура("Числитель,Знаменатель", + "2110;-2120;-2210;-2220", + "2110")); + РасчетПоказателей.Вставить("Кредитоспособность6", Новый Структура("Числитель,Знаменатель", + "2400", + "2110")); + КонецЕсли; + Для каждого РасчетПоказателя Из РасчетПоказателей Цикл + РасчетПоказателя.Значение.Числитель = СтрРазделить(РасчетПоказателя.Значение.Числитель, ";", Ложь); + РасчетПоказателя.Значение.Знаменатель = СтрРазделить(РасчетПоказателя.Значение.Знаменатель, ";", Ложь); + КонецЦикла; + + Показатели.Вставить("КредитоспособностьВесКатегории1", 0.05); + Показатели.Вставить("КредитоспособностьВесКатегории2", 0.1); + Показатели.Вставить("КредитоспособностьВесКатегории3", 0.4); + Показатели.Вставить("КредитоспособностьВесКатегории4", 0.2); + Показатели.Вставить("КредитоспособностьВесКатегории5", 0.15); + Показатели.Вставить("КредитоспособностьВесКатегории6", 0.1); + + ЭтоТорговля = ЭтоТорговоеПредприятие(ИнформацияОСвязях.ВидыДеятельности); + + ДанныеОтчетности = СтрокаОтчетности.Показатели; + Для каждого ДанныеГода Из ДанныеПоГодам Цикл + НомерГода = ДанныеГода.НомерГода; + Для каждого РасчетПоказателя Из РасчетПоказателей Цикл + ИмяПоказателя = РасчетПоказателя.Ключ + "_" + НомерГода; + ЗначениеЧислителя = 0; + Для каждого ЭлементРасчета Из РасчетПоказателя.Значение.Числитель Цикл + Множитель = ?(Лев(ЭлементРасчета, 1) = "-", -1, 1); + ИмяДанных = "П" + СтрЗаменить(ЭлементРасчета, "-", "") + "_" + НомерГода; + ЗначениеЧислителя = ЗначениеЧислителя + Множитель * ДанныеОтчетности[ИмяДанных]; + КонецЦикла; + ЗначениеЗнаменателя = 0; + Для каждого ЭлементРасчета Из РасчетПоказателя.Значение.Знаменатель Цикл + Множитель = ?(Лев(ЭлементРасчета, 1) = "-", -1, 1); + ИмяДанных = "П" + СтрЗаменить(ЭлементРасчета, "-", "") + "_" + НомерГода; + ЗначениеЗнаменателя = ЗначениеЗнаменателя + Множитель * ДанныеОтчетности[ИмяДанных]; + КонецЦикла; + ЗначениеПоказателя = ?(ЗначениеЗнаменателя = 0, 0, Окр(ЗначениеЧислителя / ЗначениеЗнаменателя, 3)); + Показатели.Вставить(ИмяПоказателя, ЗначениеПоказателя); + КонецЦикла; + + Кредитоспособность1 = Показатели["Кредитоспособность1_" + НомерГода]; + Категория1 = ?(Кредитоспособность1 >= 0.1, 1, ?(Кредитоспособность1 >= 0.05, 2, 3)); + Показатели.Вставить("КредитоспособностьКатегория1_" + НомерГода, Категория1); + + Кредитоспособность2 = Показатели["Кредитоспособность2_" + НомерГода]; + Категория2 = ?(Кредитоспособность2 >= 0.8, 1, ?(Кредитоспособность2 >= 0.5, 2, 3)); + Показатели.Вставить("КредитоспособностьКатегория2_" + НомерГода, Категория2); + + Кредитоспособность3 = Показатели["Кредитоспособность3_" + НомерГода]; + Категория3 = ?(Кредитоспособность3 >= 1.5, 1, ?(Кредитоспособность3 >= 1, 2, 3)); + Показатели.Вставить("КредитоспособностьКатегория3_" + НомерГода, Категория3); + + Кредитоспособность4 = Показатели["Кредитоспособность4_" + НомерГода]; + Если ЭтоТорговля Тогда + Категория4 = ?(Кредитоспособность4 >= 0.25, 1, ?(Кредитоспособность4 >= 0.15, 2, 3)); + Иначе + Категория4 = ?(Кредитоспособность4 >= 0.4, 1, ?(Кредитоспособность4 >= 0.25, 2, 3)); + КонецЕсли; + Показатели.Вставить("КредитоспособностьКатегория4_" + НомерГода, Категория4); + + Кредитоспособность5 = Показатели["Кредитоспособность5_" + НомерГода]; + Категория5 = ?(Кредитоспособность5 >= 0.1, 1, ?(Кредитоспособность5 >= 0, 2, 3)); + Показатели.Вставить("КредитоспособностьКатегория5_" + НомерГода, Категория5); + + Кредитоспособность6 = Показатели["Кредитоспособность6_" + НомерГода]; + Категория6 = ?(Кредитоспособность6 >= 0.06, 1, ?(Кредитоспособность6 >= 0, 2, 3)); + Показатели.Вставить("КредитоспособностьКатегория6_" + НомерГода, Категория6); + + Кредитоспособность = 0; + Для Номер = 1 По 6 Цикл + Категория = Показатели["КредитоспособностьКатегория" + Номер + "_" + НомерГода]; + ВесКатегории = Показатели["КредитоспособностьВесКатегории" + Номер]; + Кредитоспособность = Кредитоспособность + Категория * ВесКатегории; + КонецЦикла; + Кредитоспособность = Окр(Кредитоспособность, 2); + Показатели.Вставить("Кредитоспособность_" + НомерГода, Кредитоспособность); + + Если НомерГода = "1" Тогда + ОценкаКредитоспособность = ?(Кредитоспособность <= 1.25, "ХорошаяОценка", + ?(Кредитоспособность <= 2.35, "СредняяОценка", "ПлохаяОценка")); + Показатели.ОценкаКредитоспособность = ОценкаКредитоспособность; + Если ОценкаКредитоспособность = "ПлохаяОценка" Тогда + Показатели.ПояснениеОценкиКредитоспособность = НСтр("ru='Кредитование связано с повышенным риском'"); + ИначеЕсли ОценкаКредитоспособность = "СредняяОценка" Тогда + Показатели.ПояснениеОценкиКредитоспособность = НСтр("ru='Кредитование требует взвешенного подхода'"); + Иначе // "ХорошаяОценка" + Показатели.ПояснениеОценкиКредитоспособность = НСтр("ru='Кредитоспособность не вызывает сомнений'"); + КонецЕсли; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ДобавитьПоказателиРентабельностьАктивов(Показатели, СтрокаОтчетности, ДанныеПоГодам, ИнформацияОСвязях) + + Показатели.Вставить("ОценкаРентабельностьАктивов", ""); + Показатели.Вставить("ПояснениеОценкиРентабельностьАктивов", ""); + + ДанныеОтчетности = СтрокаОтчетности.Показатели; + Для каждого ДанныеГода Из ДанныеПоГодам Цикл + НомерГода = ДанныеГода.НомерГода; + // Чистая прибыль + ИмяПоказателя = "РентабельностьАктивов1_" + НомерГода; + ЧистаяПрибыль = ДанныеОтчетности["П2400_" + НомерГода]; + Показатели.Вставить(ИмяПоказателя, ЧистаяПрибыль); + // Активы + ИмяПоказателя = "РентабельностьАктивов2_" + НомерГода; + Активы = ДанныеОтчетности["П1600_" + НомерГода]; + Показатели.Вставить(ИмяПоказателя, Активы); + // Средняя цифра по отрасли + РентабельностьПоОтрасли = СредняяРентабельностьАктивовПоОтрасли(ИнформацияОСвязях.ВидыДеятельности, ДанныеГода.Год); + ИмяПоказателя = "РентабельностьАктивов3_" + НомерГода; + СредняяРентабельность = РентабельностьПоОтрасли.Рентабельность; + Показатели.Вставить(ИмяПоказателя, СредняяРентабельность); + Показатели.Вставить("ВидДеятельности", РентабельностьПоОтрасли.ВидДеятельности); + // 90% от средней + ИмяПоказателя = "РентабельностьАктивов4_" + НомерГода; + ПредельнаяРентабельность = Окр(0.9 * СредняяРентабельность, 2); + Показатели.Вставить(ИмяПоказателя, ПредельнаяРентабельность); + // Рентабельность контрагента + ИмяПоказателя = "РентабельностьАктивов_" + НомерГода; + РентабельностьАктивов = ?(Активы = 0, 0, Окр(ЧистаяПрибыль / Активы * 100, 2)); + Показатели.Вставить(ИмяПоказателя, РентабельностьАктивов); + + Если НомерГода = "1" Тогда + ОценкаРентабельностьАктивов = ?(РентабельностьАктивов < ПредельнаяРентабельность, "ПлохаяОценка", + ?(РентабельностьАктивов <= СредняяРентабельность, "СредняяОценка", "ХорошаяОценка")); + Показатели.ОценкаРентабельностьАктивов = ОценкаРентабельностьАктивов; + Если ОценкаРентабельностьАктивов = "ПлохаяОценка" Тогда + Показатели.ПояснениеОценкиРентабельностьАктивов = ?(СредняяРентабельность = 0, + НСтр("ru='Ниже нуля'"), + НСтр("ru='Значительно ниже средней'")); + ИначеЕсли ОценкаРентабельностьАктивов = "СредняяОценка" Тогда + Показатели.ПояснениеОценкиРентабельностьАктивов = ?(СредняяРентабельность = 0, + НСтр("ru='Равна нулю'"), + НСтр("ru='Немного ниже средней'")); + Иначе // "ХорошаяОценка" + Показатели.ПояснениеОценкиРентабельностьАктивов = ?(СредняяРентабельность = 0, + НСтр("ru='Выше нуля'"), + НСтр("ru='Выше средней'")); + КонецЕсли; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ДобавитьПоказателиРентабельностьПродаж(Показатели, СтрокаОтчетности, ДанныеПоГодам, ИнформацияОСвязях) + + Показатели.Вставить("ОценкаРентабельностьПродаж", ""); + Показатели.Вставить("ПояснениеОценкиРентабельностьПродаж", ""); + + ДанныеОтчетности = СтрокаОтчетности.Показатели; + Для каждого ДанныеГода Из ДанныеПоГодам Цикл + НомерГода = ДанныеГода.НомерГода; + // Прибыль от продаж + ИмяПоказателя = "РентабельностьПродаж1_" + НомерГода; + Если СтрокаОтчетности.ТипОтчетности = "2" Тогда + ПрибыльОтПродаж = ДанныеОтчетности["П2200_" + НомерГода]; + Иначе // "1" + ПрибыльОтПродаж = ДанныеОтчетности["П2110_" + НомерГода] + - ДанныеОтчетности["П2120_" + НомерГода] + - ДанныеОтчетности["П2210_" + НомерГода] + - ДанныеОтчетности["П2220_" + НомерГода]; + КонецЕсли; + Показатели.Вставить(ИмяПоказателя, ПрибыльОтПродаж); + // Себестоимость продаж + ИмяПоказателя = "РентабельностьПродаж2_" + НомерГода; + Себестоимость = ДанныеОтчетности["П2120_" + НомерГода] + + ДанныеОтчетности["П2210_" + НомерГода] + + ДанныеОтчетности["П2220_" + НомерГода]; + Показатели.Вставить(ИмяПоказателя, Себестоимость); + // Средняя цифра по отрасли + РентабельностьПоОтрасли = СредняяРентабельностьПродажПоОтрасли(ИнформацияОСвязях.ВидыДеятельности, ДанныеГода.Год); + ИмяПоказателя = "РентабельностьПродаж3_" + НомерГода; + СредняяРентабельность = РентабельностьПоОтрасли.Рентабельность; + Показатели.Вставить(ИмяПоказателя, СредняяРентабельность); + Показатели.Вставить("ВидДеятельности", РентабельностьПоОтрасли.ВидДеятельности); + // 90% от средней + ИмяПоказателя = "РентабельностьПродаж4_" + НомерГода; + ПредельнаяРентабельность = Окр(0.9 * СредняяРентабельность, 2); + Показатели.Вставить(ИмяПоказателя, ПредельнаяРентабельность); + // Рентабельность контрагента + ИмяПоказателя = "РентабельностьПродаж_" + НомерГода; + РентабельностьПродаж = ?(Себестоимость = 0, 0, Окр(ПрибыльОтПродаж / Себестоимость * 100, 2)); + Показатели.Вставить(ИмяПоказателя, РентабельностьПродаж); + + Если НомерГода = "1" Тогда + ОценкаРентабельностьПродаж = ?(РентабельностьПродаж < ПредельнаяРентабельность, "ПлохаяОценка", + ?(РентабельностьПродаж <= СредняяРентабельность, "СредняяОценка", "ХорошаяОценка")); + Показатели.ОценкаРентабельностьПродаж = ОценкаРентабельностьПродаж; + Если ОценкаРентабельностьПродаж = "ПлохаяОценка" Тогда + Показатели.ПояснениеОценкиРентабельностьПродаж = ?(СредняяРентабельность = 0, + НСтр("ru='Ниже нуля'"), + НСтр("ru='Значительно ниже средней'")); + ИначеЕсли ОценкаРентабельностьПродаж = "СредняяОценка" Тогда + Показатели.ПояснениеОценкиРентабельностьПродаж = ?(СредняяРентабельность = 0, + НСтр("ru='Равна нулю'"), + НСтр("ru='Немного ниже средней'")); + Иначе // "ХорошаяОценка" + Показатели.ПояснениеОценкиРентабельностьПродаж = ?(СредняяРентабельность = 0, + НСтр("ru='Выше нуля'"), + НСтр("ru='Выше средней'")); + КонецЕсли; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Функция ЭтоПроизводственноеПредприятие(ВидыДеятельности) + + Если ВидыДеятельности.Количество() = 0 Тогда + Возврат Ложь; + КонецЕсли; + + ОсновнойКодОКВЭД = ВидыДеятельности[0].КодОКВЭД; + ПроизводственныеКоды = СтрРазделить( + "15;16;17;18;19;20;21;23;24;25;26;27;28;29;30;31;32;33;34;35;36;40", ";", Ложь); + + Возврат ПроизводственныеКоды.Найти(Лев(ОсновнойКодОКВЭД, 2)) <> Неопределено; + +КонецФункции + +Функция ЭтоТорговоеПредприятие(ВидыДеятельности) + + Если ВидыДеятельности.Количество() = 0 Тогда + Возврат Ложь; + КонецЕсли; + + ОсновнойКодОКВЭД = ВидыДеятельности[0].КодОКВЭД; + ТорговыеКоды = СтрРазделить("50;51;52;65.21", ";", Ложь); + + Для каждого ТорговыйКод Из ТорговыеКоды Цикл + Если Лев(ОсновнойКодОКВЭД, СтрДлина(ТорговыйКод)) = ТорговыйКод Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + Возврат Ложь; + +КонецФункции + +Функция СредняяРентабельностьАктивовПоОтрасли(ВидыДеятельности, Год) + + Результат = Новый Структура("ВидДеятельности,Рентабельность", Неопределено, 0); + Если ВидыДеятельности.Количество() = 0 Тогда + Возврат Результат; + КонецЕсли; + + ОсновнойКодОКВЭД = Лев(ВидыДеятельности[0].КодОКВЭД, 2); + + Макет = ПолучитьМакет("ПредельныеЗначенияРентабельностиИНалоговойНагрузки"); + + ОбластьКлассификатор = Макет.Область("Классификатор"); + ОбластьСтроки = Макет.НайтиТекст(ОсновнойКодОКВЭД, , ОбластьКлассификатор, , Истина); + Если ОбластьСтроки = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + НомерСтроки = ОбластьСтроки.Верх; + ОбластьРентабельностьАктивов = Макет.Область("РентабельностьАктивов"); + ОбластьКолонки = Макет.НайтиТекст(Год, , ОбластьРентабельностьАктивов, , Истина); + НомерКолонки = ОбластьКолонки.Лево; + Результат.Рентабельность = Число(Макет.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки).Текст); + Результат.ВидДеятельности = ВидыДеятельности[0].НаименованиеОКВЭД; + + Возврат Результат; + +КонецФункции + +Функция СредняяРентабельностьПродажПоОтрасли(ВидыДеятельности, Год) + + Результат = Новый Структура("ВидДеятельности,Рентабельность", Неопределено, 0); + Если ВидыДеятельности.Количество() = 0 Тогда + Возврат Результат; + КонецЕсли; + + ОсновнойКодОКВЭД = Лев(ВидыДеятельности[0].КодОКВЭД, 2); + + Макет = ПолучитьМакет("ПредельныеЗначенияРентабельностиИНалоговойНагрузки"); + + ОбластьКлассификатор = Макет.Область("Классификатор"); + ОбластьСтроки = Макет.НайтиТекст(ОсновнойКодОКВЭД, , ОбластьКлассификатор, , Истина); + Если ОбластьСтроки = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + НомерСтроки = ОбластьСтроки.Верх; + ОбластьРентабельностьПродаж = Макет.Область("РентабельностьПродаж"); + ОбластьКолонки = Макет.НайтиТекст(Год, , ОбластьРентабельностьПродаж, , Истина); + НомерКолонки = ОбластьКолонки.Лево; + Результат.Рентабельность = Число(Макет.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки).Текст); + Результат.ВидДеятельности = ВидыДеятельности[0].НаименованиеОКВЭД; + + Возврат Результат; + +КонецФункции + +#КонецОбласти + +#Область ПроверкиКонтролирующимиОрганами + +Процедура СформироватьРезультатПроверкиКонтролирующимиОрганами(ИнформацияОПроверках, ДанныеОтчета) + + ТабличныйДокумент = Новый ТабличныйДокумент; + ОбластиМакета = ВсеОбластиМакета("Проверки"); + ОбластиРасшифровки = НоваяТаблицаОбластиРасшифровки(); + + // Шапка + ТабличныйДокумент.Вывести(ОбластиМакета.Шапка); + + ЕстьПроверки = ИнформацияОПроверках.Проверки.Количество() > 0; + + Если ЕстьПроверки Тогда + + // Проверки с группировкой по месяцам + + ТаблицаПериоды = ИнформацияОПроверках.Проверки.Скопировать(, "ПериодПроверки"); + ТаблицаПериоды.Свернуть("ПериодПроверки"); + ТаблицаПериоды.Сортировать("ПериодПроверки"); + ИнформацияОПроверках.Проверки.Индексы.Добавить("ПериодПроверки"); + НомерПроверки = 0; + + Для каждого СтрокаПериода Из ТаблицаПериоды Цикл + + // Период + ОбластиМакета.ПериодПроверки.Параметры.Заполнить(СтрокаПериода); + ТабличныйДокумент.Вывести(ОбластиМакета.ПериодПроверки); + ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); + + // Проверки + ОтборПоПериоду = Новый Структура("ПериодПроверки", СтрокаПериода.ПериодПроверки); + ПроверкиПериода = ИнформацияОПроверках.Проверки.Скопировать(ОтборПоПериоду); + ПроверкиПериода.Сортировать("ДатаПроверки,КонтролирующийОрган"); + Для каждого СтрокаПроверки Из ПроверкиПериода Цикл + НомерПроверки = НомерПроверки + 1; + Проверка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1, %2", + СтрокаПроверки.КонтролирующийОрган, + ?(СтрокаПроверки.ПлановаяПроверка, НСтр("ru='плановая проверка'"), НСтр("ru='внеплановая проверка'"))); + ОбластиМакета.Проверка.Параметры.Проверка = Проверка; + ТабличныйДокумент.Вывести(ОбластиМакета.Проверка); + ОбластиМакета.ОписаниеПроверки.Параметры.Заполнить(СтрокаПроверки); + ТабличныйДокумент.Вывести(ОбластиМакета.ОписаниеПроверки); + Если ЗначениеЗаполнено(СтрокаПроверки.ЦельПроверки) Тогда + ОбластиМакета.ЦельПроверки.Параметры.Заполнить(СтрокаПроверки); + ТабличныйДокумент.Вывести(ОбластиМакета.ЦельПроверки); + КонецЕсли; + ОбластиМакета.РезультатПроверки.Параметры.Заполнить(СтрокаПроверки); + ТабличныйДокумент.Вывести(ОбластиМакета.РезультатПроверки); + + // Нарушения + ЕстьНарушения = СтрокаПроверки.Нарушения.Количество() > 0; + Если ЕстьНарушения Тогда + + // Свернуто + ИмяОбластиРасшифровки = "Проверка" + Формат(НомерПроверки, "ЧГ="); + Расшифровка = Новый Структура("Действие,ИмяДокумента,ИмяОбласти", + "Показать", "РезультатПроверки", ИмяОбластиРасшифровки); + ОбластиМакета.ПоказатьНарушения.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.ПоказатьНарушения); + + // Развернуто + СтрокаОбласти = ОбластиРасшифровки.Добавить(); + СтрокаОбласти.ИмяОбласти = ИмяОбластиРасшифровки; + СтрокаОбласти.ПерваяСтрока = ТабличныйДокумент.ВысотаТаблицы + 1; + + Для каждого СтрокаНарушения Из СтрокаПроверки.Нарушения Цикл + ОбластиМакета.НомерНарушения.Параметры.Заполнить(СтрокаНарушения); + ТабличныйДокумент.Вывести(ОбластиМакета.НомерНарушения); + Если ЗначениеЗаполнено(СтрокаНарушения.Нарушение) Тогда + ОбластиМакета.Нарушение.Параметры.Заполнить(СтрокаНарушения); + ТабличныйДокумент.Вывести(ОбластиМакета.Нарушение); + КонецЕсли; + Если ЗначениеЗаполнено(СтрокаНарушения.НарушенныйАкт) Тогда + ОбластиМакета.НарушенныйАкт.Параметры.Заполнить(СтрокаНарушения); + ТабличныйДокумент.Вывести(ОбластиМакета.НарушенныйАкт); + КонецЕсли; + Если ЗначениеЗаполнено(СтрокаНарушения.Предписание) Тогда + ОбластиМакета.Предписание.Параметры.Заполнить(СтрокаНарушения); + ТабличныйДокумент.Вывести(ОбластиМакета.Предписание); + КонецЕсли; + Если ЗначениеЗаполнено(СтрокаНарушения.Исполнение) Тогда + ОбластиМакета.Исполнение.Параметры.Заполнить(СтрокаНарушения); + ТабличныйДокумент.Вывести(ОбластиМакета.Исполнение); + КонецЕсли; + КонецЦикла; + + Расшифровка = Новый Структура("Действие,ИмяДокумента,ИмяОбласти", + "Свернуть", "РезультатПроверки", ИмяОбластиРасшифровки); + ОбластиМакета.СвернутьНарушения.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.СвернутьНарушения); + СтрокаОбласти.ПоследняяСтрока = ТабличныйДокумент.ВысотаТаблицы; + ТабличныйДокумент.Область(СтрокаОбласти.ПерваяСтрока, , СтрокаОбласти.ПоследняяСтрока).Видимость = Ложь; + + КонецЕсли; + + ТабличныйДокумент.Вывести(ОбластиМакета.Разделитель); + + КонецЦикла; + + КонецЦикла; + + ОбластиРасшифровки.ЗаполнитьЗначения("РезультатПроверки", "ИмяДокумента"); + Для каждого СтрокаТаблицы Из ОбластиРасшифровки Цикл + НоваяСтрока = ДанныеОтчета.ОбластиРасшифровки.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТаблицы); + КонецЦикла; + + Иначе + + ТабличныйДокумент.Вывести(ОбластиМакета.ШапкаНетДанных); + + КонецЕсли; + + ДанныеОтчета.Вставить("РезультатПроверки", ТабличныйДокумент); + ДанныеОтчета.Вставить("ИмяФайлаПроверки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Досье контрагента %1 - проверки'"), + ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла( + ИнформацияОПроверках.НаименованиеСокращенное, ""))); + +КонецПроцедуры + +#КонецОбласти + +#Область Прочее + +Процедура ВывестиСтрокуЕще(ТабличныйДокумент, ОбластиМакета, ИмяДокумента, ИмяОбластиРасшифровки, КоличествоВсего) + + Если КоличествоВсего = 0 Тогда + ТекстЕще = НСтр("ru='Еще'"); + Иначе + ТекстЕще = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Еще %1'"), + КоличествоВсего - 1); + КонецЕсли; + ОбластиМакета.Еще.Параметры.ТекстЕще = ТекстЕще; + Расшифровка = Новый Структура("Действие,ИмяДокумента,ИмяОбласти", + "Показать", ИмяДокумента, ИмяОбластиРасшифровки); + ОбластиМакета.Еще.Параметры.Расшифровка = Расшифровка; + ТабличныйДокумент.Вывести(ОбластиМакета.Еще); + +КонецПроцедуры + +Функция ВсеОбластиМакета(ИмяМакета) + + Макет = Отчеты.ДосьеКонтрагента.ПолучитьМакет(ИмяМакета); Результат = Новый Структура; Для каждого Область Из Макет.Области Цикл - Результат.Вставить(Область.Имя, Макет.ПолучитьОбласть(Область.Имя)); + Если ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда + Результат.Вставить(Область.Имя, Макет.ПолучитьОбласть(Область.Имя)); + КонецЕсли; КонецЦикла; Возврат Результат; КонецФункции +Функция ВсеКартинкиТабличногоДокумента(ТабличныйДокумент) + + Результат = Новый Структура; + Для каждого Рисунок Из ТабличныйДокумент.Рисунки Цикл + Если Рисунок.ТипРисунка = ТипРисункаТабличногоДокумента.Картинка Тогда + Результат.Вставить(Рисунок.Имя, Рисунок); + КонецЕсли; + КонецЦикла; + Возврат Результат; + +КонецФункции + +Функция НоваяТаблицаОбластиРасшифровки() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("ИмяДокумента", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ИмяОбласти", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ПерваяСтрока", Новый ОписаниеТипов("Число")); + Результат.Колонки.Добавить("ПоследняяСтрока", Новый ОписаниеТипов("Число")); + Возврат Результат; + +КонецФункции + +Функция ПериодыБухгалтерскойОтчетности() + + Результат = Новый Структура; + Результат.Вставить("Год_1", "2014"); + Результат.Вставить("Год_2", "2013"); + Результат.Вставить("Год_3", "2012"); + Результат.Вставить("КонецГода_1", Формат(Дата(2014,12,31), "ДЛФ=DD")); + Результат.Вставить("КонецГода_2", Формат(Дата(2013,12,31), "ДЛФ=DD")); + Результат.Вставить("КонецГода_3", Формат(Дата(2012,12,31), "ДЛФ=DD")); + Возврат Результат; + +КонецФункции + #КонецОбласти #КонецОбласти diff --git a/SSL/src/Reports/ДосьеКонтрагента/Templates/АнализОтчетности/Template.mxlx b/SSL/src/Reports/ДосьеКонтрагента/Templates/АнализОтчетности/Template.mxlx new file mode 100644 index 000000000..960075f92 --- /dev/null +++ b/SSL/src/Reports/ДосьеКонтрагента/Templates/АнализОтчетности/Template.mxlx @@ -0,0 +1,1397 @@ +<?xml version="1.0" encoding="UTF-8"?> +<document xmlns="http://v8.1c.ru/8.2/data/spreadsheet" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <languageSettings> + <currentLanguage>ru</currentLanguage> + <defaultLanguage>ru</defaultLanguage> + <languageInfo> + <id>ru</id> + <code>Русский</code> + <description>Русский</description> + </languageInfo> + </languageSettings> + <columns> + <size>8</size> + <columnsItem> + <index>0</index> + <column> + <formatIndex>1</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>1</index> + <column> + <formatIndex>2</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>2</index> + <column> + <formatIndex>3</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>3</index> + <column> + <formatIndex>4</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>4</index> + <column> + <formatIndex>3</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>5</index> + <column> + <formatIndex>4</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>6</index> + <column> + <formatIndex>3</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>7</index> + <column> + <formatIndex>4</formatIndex> + </column> + </columnsItem> + </columns> + <rowsItem> + <index>0</index> + <row> + <c> + <c> + <f>5</f> + </c> + </c> + <c> + <c> + <f>6</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Анализ отчетности</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>1</index> + <row> + <c> + <i>1</i> + <c> + <f>7</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>2</index> + <row> + <formatIndex>8</formatIndex> + <c> + <i>1</i> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Данные бухгалтерской отчетности. [ВалютаОтчетности]</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <parameter>Год_1</parameter> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>12</f> + <parameter>Год_2</parameter> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>12</f> + <parameter>Год_3</parameter> + </c> + </c> + <c> + <c> + <f>13</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>3</index> + <row> + <formatIndex>14</formatIndex> + <c> + <i>1</i> + <c> + <f>15</f> + </c> + </c> + <c> + <i>3</i> + <c> + <f>16</f> + </c> + </c> + <c> + <c> + <f>16</f> + </c> + </c> + <c> + <c> + <f>16</f> + </c> + </c> + <c> + <c> + <f>16</f> + </c> + </c> + <c> + <c> + <f>16</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>4</index> + <row> + <formatIndex>8</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>18</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Продажи</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>19</f> + <parameter>Продажи_1</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + </c> + </c> + <c> + <c> + <f>19</f> + <parameter>Продажи_2</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + </c> + </c> + <c> + <c> + <f>19</f> + <parameter>Продажи_3</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>5</index> + <row> + <formatIndex>8</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>21</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прибыль</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>19</f> + <parameter>Прибыль_1</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + </c> + </c> + <c> + <c> + <f>19</f> + <parameter>Прибыль_2</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + </c> + </c> + <c> + <c> + <f>19</f> + <parameter>Прибыль_3</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>6</index> + <row> + <formatIndex>8</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>21</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Деньги</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>19</f> + <parameter>Деньги_1</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + </c> + </c> + <c> + <c> + <f>19</f> + <parameter>Деньги_2</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + </c> + </c> + <c> + <c> + <f>19</f> + <parameter>Деньги_3</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>7</index> + <row> + <formatIndex>8</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>21</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Материалы, товары, полуфабрикаты (запасы)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>19</f> + <parameter>Запасы_1</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + </c> + </c> + <c> + <c> + <f>19</f> + <parameter>Запасы_2</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + </c> + </c> + <c> + <c> + <f>19</f> + <parameter>Запасы_3</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>8</index> + <row> + <formatIndex>8</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>21</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Здания, оборудование, автомобили, земля (ОС)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>19</f> + <parameter>ОС_1</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + </c> + </c> + <c> + <c> + <f>19</f> + <parameter>ОС_2</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + </c> + </c> + <c> + <c> + <f>19</f> + <parameter>ОС_3</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>9</index> + <row> + <formatIndex>8</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>21</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Авансы выданные, задолженность контрагентов</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>19</f> + <parameter>Дебиторы_1</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + </c> + </c> + <c> + <c> + <f>19</f> + <parameter>Дебиторы_2</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + </c> + </c> + <c> + <c> + <f>19</f> + <parameter>Дебиторы_3</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>10</index> + <row> + <formatIndex>8</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>21</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Авансы полученные, задолженность поставщикам</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>19</f> + <parameter>Кредиторы_1</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + </c> + </c> + <c> + <c> + <f>19</f> + <parameter>Кредиторы_2</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + </c> + </c> + <c> + <c> + <f>19</f> + <parameter>Кредиторы_3</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>11</index> + <row> + <formatIndex>8</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>21</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Полученные кредиты и займы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>19</f> + <parameter>Кредиты_1</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + </c> + </c> + <c> + <c> + <f>19</f> + <parameter>Кредиты_2</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + </c> + </c> + <c> + <c> + <f>19</f> + <parameter>Кредиты_3</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>12</index> + <row> + <formatIndex>8</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>22</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Чистые активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>19</f> + <parameter>ЧистыеАктивы_1</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + </c> + </c> + <c> + <c> + <f>19</f> + <parameter>ЧистыеАктивы_2</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + </c> + </c> + <c> + <c> + <f>19</f> + <parameter>ЧистыеАктивы_3</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>13</index> + <row> + <formatIndex>14</formatIndex> + <c> + <i>1</i> + <c> + <f>23</f> + </c> + </c> + <c> + <i>3</i> + <c> + <f>16</f> + </c> + </c> + <c> + <c> + <f>16</f> + </c> + </c> + <c> + <c> + <f>16</f> + </c> + </c> + <c> + <c> + <f>16</f> + </c> + </c> + <c> + <c> + <f>16</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>16</index> + <row> + <c> + <i>1</i> + <c> + <f>8</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Анализ отчетности не проведен, т.к. бухгалтерская отчетность за последние 3 года отсутствует в базе Росстата</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>18</index> + <row> + <c> + <i>1</i> + <c> + <f>8</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Анализ отчетности не проводится для социально ориентированных некоммерческих организаций</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>20</index> + <row> + <c> + <i>1</i> + <c> + <f>8</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Анализ отчетности не проведен</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <drawing> + <drawingType>Picture</drawingType> + <id>1</id> + <formatIndex>24</formatIndex> + <beginRow>4</beginRow> + <beginRowOffset>9</beginRowOffset> + <endRow>4</endRow> + <endRowOffset>57</endRowOffset> + <beginColumn>3</beginColumn> + <beginColumnOffset>9</beginColumnOffset> + <endColumn>3</endColumn> + <endColumnOffset>57</endColumnOffset> + <autoSize>false</autoSize> + <pictureSize>RealSize</pictureSize> + <zOrder>0</zOrder> + <pictureIndex>1</pictureIndex> + </drawing> + <drawing> + <drawingType>Picture</drawingType> + <id>2</id> + <formatIndex>24</formatIndex> + <beginRow>5</beginRow> + <beginRowOffset>6</beginRowOffset> + <endRow>5</endRow> + <endRowOffset>54</endRowOffset> + <beginColumn>3</beginColumn> + <beginColumnOffset>9</beginColumnOffset> + <endColumn>3</endColumn> + <endColumnOffset>57</endColumnOffset> + <autoSize>false</autoSize> + <pictureSize>RealSize</pictureSize> + <zOrder>0</zOrder> + <pictureIndex>1</pictureIndex> + </drawing> + <drawing> + <drawingType>Picture</drawingType> + <id>3</id> + <formatIndex>24</formatIndex> + <beginRow>6</beginRow> + <beginRowOffset>9</beginRowOffset> + <endRow>6</endRow> + <endRowOffset>57</endRowOffset> + <beginColumn>3</beginColumn> + <beginColumnOffset>9</beginColumnOffset> + <endColumn>3</endColumn> + <endColumnOffset>57</endColumnOffset> + <autoSize>false</autoSize> + <pictureSize>RealSize</pictureSize> + <zOrder>0</zOrder> + <pictureIndex>1</pictureIndex> + </drawing> + <drawing> + <drawingType>Picture</drawingType> + <id>4</id> + <formatIndex>24</formatIndex> + <beginRow>7</beginRow> + <beginRowOffset>6</beginRowOffset> + <endRow>7</endRow> + <endRowOffset>54</endRowOffset> + <beginColumn>3</beginColumn> + <beginColumnOffset>9</beginColumnOffset> + <endColumn>3</endColumn> + <endColumnOffset>57</endColumnOffset> + <autoSize>false</autoSize> + <pictureSize>RealSize</pictureSize> + <zOrder>0</zOrder> + <pictureIndex>1</pictureIndex> + </drawing> + <drawing> + <drawingType>Picture</drawingType> + <id>5</id> + <formatIndex>24</formatIndex> + <beginRow>8</beginRow> + <beginRowOffset>9</beginRowOffset> + <endRow>8</endRow> + <endRowOffset>57</endRowOffset> + <beginColumn>3</beginColumn> + <beginColumnOffset>9</beginColumnOffset> + <endColumn>3</endColumn> + <endColumnOffset>57</endColumnOffset> + <autoSize>false</autoSize> + <pictureSize>RealSize</pictureSize> + <zOrder>0</zOrder> + <pictureIndex>1</pictureIndex> + </drawing> + <drawing> + <drawingType>Picture</drawingType> + <id>6</id> + <formatIndex>24</formatIndex> + <beginRow>9</beginRow> + <beginRowOffset>6</beginRowOffset> + <endRow>9</endRow> + <endRowOffset>54</endRowOffset> + <beginColumn>3</beginColumn> + <beginColumnOffset>9</beginColumnOffset> + <endColumn>3</endColumn> + <endColumnOffset>57</endColumnOffset> + <autoSize>false</autoSize> + <pictureSize>RealSize</pictureSize> + <zOrder>0</zOrder> + <pictureIndex>1</pictureIndex> + </drawing> + <drawing> + <drawingType>Picture</drawingType> + <id>7</id> + <formatIndex>24</formatIndex> + <beginRow>10</beginRow> + <beginRowOffset>6</beginRowOffset> + <endRow>10</endRow> + <endRowOffset>54</endRowOffset> + <beginColumn>3</beginColumn> + <beginColumnOffset>9</beginColumnOffset> + <endColumn>3</endColumn> + <endColumnOffset>57</endColumnOffset> + <autoSize>false</autoSize> + <pictureSize>RealSize</pictureSize> + <zOrder>0</zOrder> + <pictureIndex>1</pictureIndex> + </drawing> + <drawing> + <drawingType>Picture</drawingType> + <id>8</id> + <formatIndex>24</formatIndex> + <beginRow>11</beginRow> + <beginRowOffset>6</beginRowOffset> + <endRow>11</endRow> + <endRowOffset>54</endRowOffset> + <beginColumn>3</beginColumn> + <beginColumnOffset>9</beginColumnOffset> + <endColumn>3</endColumn> + <endColumnOffset>57</endColumnOffset> + <autoSize>false</autoSize> + <pictureSize>RealSize</pictureSize> + <zOrder>0</zOrder> + <pictureIndex>1</pictureIndex> + </drawing> + <drawing> + <drawingType>Picture</drawingType> + <id>9</id> + <formatIndex>24</formatIndex> + <beginRow>12</beginRow> + <beginRowOffset>9</beginRowOffset> + <endRow>12</endRow> + <endRowOffset>57</endRowOffset> + <beginColumn>3</beginColumn> + <beginColumnOffset>9</beginColumnOffset> + <endColumn>3</endColumn> + <endColumnOffset>57</endColumnOffset> + <autoSize>false</autoSize> + <pictureSize>RealSize</pictureSize> + <zOrder>0</zOrder> + <pictureIndex>1</pictureIndex> + </drawing> + <drawing> + <drawingType>Picture</drawingType> + <id>10</id> + <formatIndex>24</formatIndex> + <beginRow>5</beginRow> + <beginRowOffset>6</beginRowOffset> + <endRow>5</endRow> + <endRowOffset>54</endRowOffset> + <beginColumn>5</beginColumn> + <beginColumnOffset>9</beginColumnOffset> + <endColumn>5</endColumn> + <endColumnOffset>57</endColumnOffset> + <autoSize>false</autoSize> + <pictureSize>RealSize</pictureSize> + <zOrder>0</zOrder> + <pictureIndex>1</pictureIndex> + </drawing> + <drawing> + <drawingType>Picture</drawingType> + <id>11</id> + <formatIndex>24</formatIndex> + <beginRow>4</beginRow> + <beginRowOffset>9</beginRowOffset> + <endRow>4</endRow> + <endRowOffset>57</endRowOffset> + <beginColumn>5</beginColumn> + <beginColumnOffset>9</beginColumnOffset> + <endColumn>5</endColumn> + <endColumnOffset>57</endColumnOffset> + <autoSize>false</autoSize> + <pictureSize>RealSize</pictureSize> + <zOrder>0</zOrder> + <pictureIndex>1</pictureIndex> + </drawing> + <drawing> + <drawingType>Picture</drawingType> + <id>12</id> + <formatIndex>24</formatIndex> + <beginRow>6</beginRow> + <beginRowOffset>9</beginRowOffset> + <endRow>6</endRow> + <endRowOffset>57</endRowOffset> + <beginColumn>5</beginColumn> + <beginColumnOffset>9</beginColumnOffset> + <endColumn>5</endColumn> + <endColumnOffset>57</endColumnOffset> + <autoSize>false</autoSize> + <pictureSize>RealSize</pictureSize> + <zOrder>0</zOrder> + <pictureIndex>1</pictureIndex> + </drawing> + <drawing> + <drawingType>Picture</drawingType> + <id>13</id> + <formatIndex>24</formatIndex> + <beginRow>7</beginRow> + <beginRowOffset>6</beginRowOffset> + <endRow>7</endRow> + <endRowOffset>54</endRowOffset> + <beginColumn>5</beginColumn> + <beginColumnOffset>9</beginColumnOffset> + <endColumn>5</endColumn> + <endColumnOffset>57</endColumnOffset> + <autoSize>false</autoSize> + <pictureSize>RealSize</pictureSize> + <zOrder>0</zOrder> + <pictureIndex>1</pictureIndex> + </drawing> + <drawing> + <drawingType>Picture</drawingType> + <id>14</id> + <formatIndex>24</formatIndex> + <beginRow>8</beginRow> + <beginRowOffset>9</beginRowOffset> + <endRow>8</endRow> + <endRowOffset>57</endRowOffset> + <beginColumn>5</beginColumn> + <beginColumnOffset>9</beginColumnOffset> + <endColumn>5</endColumn> + <endColumnOffset>57</endColumnOffset> + <autoSize>false</autoSize> + <pictureSize>RealSize</pictureSize> + <zOrder>0</zOrder> + <pictureIndex>1</pictureIndex> + </drawing> + <drawing> + <drawingType>Picture</drawingType> + <id>15</id> + <formatIndex>24</formatIndex> + <beginRow>9</beginRow> + <beginRowOffset>6</beginRowOffset> + <endRow>9</endRow> + <endRowOffset>54</endRowOffset> + <beginColumn>5</beginColumn> + <beginColumnOffset>9</beginColumnOffset> + <endColumn>5</endColumn> + <endColumnOffset>57</endColumnOffset> + <autoSize>false</autoSize> + <pictureSize>RealSize</pictureSize> + <zOrder>0</zOrder> + <pictureIndex>1</pictureIndex> + </drawing> + <drawing> + <drawingType>Picture</drawingType> + <id>16</id> + <formatIndex>24</formatIndex> + <beginRow>10</beginRow> + <beginRowOffset>6</beginRowOffset> + <endRow>10</endRow> + <endRowOffset>54</endRowOffset> + <beginColumn>5</beginColumn> + <beginColumnOffset>9</beginColumnOffset> + <endColumn>5</endColumn> + <endColumnOffset>57</endColumnOffset> + <autoSize>false</autoSize> + <pictureSize>RealSize</pictureSize> + <zOrder>0</zOrder> + <pictureIndex>1</pictureIndex> + </drawing> + <drawing> + <drawingType>Picture</drawingType> + <id>17</id> + <formatIndex>24</formatIndex> + <beginRow>11</beginRow> + <beginRowOffset>6</beginRowOffset> + <endRow>11</endRow> + <endRowOffset>54</endRowOffset> + <beginColumn>5</beginColumn> + <beginColumnOffset>9</beginColumnOffset> + <endColumn>5</endColumn> + <endColumnOffset>57</endColumnOffset> + <autoSize>false</autoSize> + <pictureSize>RealSize</pictureSize> + <zOrder>0</zOrder> + <pictureIndex>1</pictureIndex> + </drawing> + <drawing> + <drawingType>Picture</drawingType> + <id>18</id> + <formatIndex>24</formatIndex> + <beginRow>12</beginRow> + <beginRowOffset>9</beginRowOffset> + <endRow>12</endRow> + <endRowOffset>57</endRowOffset> + <beginColumn>5</beginColumn> + <beginColumnOffset>9</beginColumnOffset> + <endColumn>5</endColumn> + <endColumnOffset>57</endColumnOffset> + <autoSize>false</autoSize> + <pictureSize>RealSize</pictureSize> + <zOrder>0</zOrder> + <pictureIndex>1</pictureIndex> + </drawing> + <templateMode>true</templateMode> + <defaultFormatIndex>25</defaultFormatIndex> + <height>22</height> + <vgRows>22</vgRows> + <merge> + <r>0</r> + <c>1</c> + <w>6</w> + </merge> + <merge> + <r>1</r> + <c>1</c> + <w>6</w> + </merge> + <merge> + <r>16</r> + <c>1</c> + <w>6</w> + </merge> + <merge> + <r>18</r> + <c>1</c> + <w>6</w> + </merge> + <merge> + <r>20</r> + <c>1</c> + <w>6</w> + </merge> + <namedItem xsi:type="NamedItemCells"> + <name>АнализНеПроведенНетОтчетности</name> + <area> + <type>Rows</type> + <beginRow>16</beginRow> + <endRow>16</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>АнализНеПроведенОтчетностьНКО</name> + <area> + <type>Rows</type> + <beginRow>18</beginRow> + <endRow>18</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>АнализНеПроведенПрочее</name> + <area> + <type>Rows</type> + <beginRow>20</beginRow> + <endRow>20</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemDrawing"> + <name>КартинкаДебиторы_1</name> + <drawingID>6</drawingID> + </namedItem> + <namedItem xsi:type="NamedItemDrawing"> + <name>КартинкаДебиторы_2</name> + <drawingID>15</drawingID> + </namedItem> + <namedItem xsi:type="NamedItemDrawing"> + <name>КартинкаДеньги_1</name> + <drawingID>3</drawingID> + </namedItem> + <namedItem xsi:type="NamedItemDrawing"> + <name>КартинкаДеньги_2</name> + <drawingID>12</drawingID> + </namedItem> + <namedItem xsi:type="NamedItemDrawing"> + <name>КартинкаЗапасы_1</name> + <drawingID>4</drawingID> + </namedItem> + <namedItem xsi:type="NamedItemDrawing"> + <name>КартинкаЗапасы_2</name> + <drawingID>13</drawingID> + </namedItem> + <namedItem xsi:type="NamedItemDrawing"> + <name>КартинкаКредиторы_1</name> + <drawingID>7</drawingID> + </namedItem> + <namedItem xsi:type="NamedItemDrawing"> + <name>КартинкаКредиторы_2</name> + <drawingID>16</drawingID> + </namedItem> + <namedItem xsi:type="NamedItemDrawing"> + <name>КартинкаКредиты_1</name> + <drawingID>8</drawingID> + </namedItem> + <namedItem xsi:type="NamedItemDrawing"> + <name>КартинкаКредиты_2</name> + <drawingID>17</drawingID> + </namedItem> + <namedItem xsi:type="NamedItemDrawing"> + <name>КартинкаОС_1</name> + <drawingID>5</drawingID> + </namedItem> + <namedItem xsi:type="NamedItemDrawing"> + <name>КартинкаОС_2</name> + <drawingID>14</drawingID> + </namedItem> + <namedItem xsi:type="NamedItemDrawing"> + <name>КартинкаПрибыль_1</name> + <drawingID>2</drawingID> + </namedItem> + <namedItem xsi:type="NamedItemDrawing"> + <name>КартинкаПрибыль_2</name> + <drawingID>10</drawingID> + </namedItem> + <namedItem xsi:type="NamedItemDrawing"> + <name>КартинкаПродажи_1</name> + <drawingID>1</drawingID> + </namedItem> + <namedItem xsi:type="NamedItemDrawing"> + <name>КартинкаПродажи_2</name> + <drawingID>11</drawingID> + </namedItem> + <namedItem xsi:type="NamedItemDrawing"> + <name>КартинкаЧистыеАктивы_1</name> + <drawingID>9</drawingID> + </namedItem> + <namedItem xsi:type="NamedItemDrawing"> + <name>КартинкаЧистыеАктивы_2</name> + <drawingID>18</drawingID> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>Показатели</name> + <area> + <type>Rows</type> + <beginRow>2</beginRow> + <endRow>13</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>Шапка</name> + <area> + <type>Rows</type> + <beginRow>0</beginRow> + <endRow>1</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <line width="1" gap="false"> + <v8ui:style xsi:type="v8ui:SpreadsheetDocumentCellLineType">Solid</v8ui:style> + </line> + <line width="1" gap="false"> + <v8ui:style xsi:type="v8ui:SpreadsheetDocumentDrawingLineType">None</v8ui:style> + </line> + <font faceName="Arial" height="18" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="12" bold="true" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="8" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="9" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="10" bold="true" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="12" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="8" bold="true" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <format> + <width>24</width> + </format> + <format> + <width>392</width> + </format> + <format> + <width>104</width> + </format> + <format> + <width>34</width> + </format> + <format> + <font>0</font> + </format> + <format> + <font>1</font> + <verticalAlignment>Center</verticalAlignment> + </format> + <format> + <font>2</font> + <verticalAlignment>Top</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <textPlacement>Wrap</textPlacement> + </format> + <format> + <font>3</font> + </format> + <format> + <font>4</font> + <height>138</height> + <width>346</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <fillType>Template</fillType> + <bySelectedColumns>true</bySelectedColumns> + </format> + <format> + <font>5</font> + <horizontalAlignment>Right</horizontalAlignment> + <fillType>Parameter</fillType> + </format> + <format> + <font>4</font> + <width>99</width> + <horizontalAlignment>Right</horizontalAlignment> + </format> + <format> + <font>5</font> + <width>99</width> + <horizontalAlignment>Right</horizontalAlignment> + <fillType>Parameter</fillType> + </format> + <format> + <font>3</font> + <width>99</width> + <horizontalAlignment>Right</horizontalAlignment> + </format> + <format> + <font>2</font> + </format> + <format> + <font>3</font> + <height>138</height> + <width>346</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <bySelectedColumns>true</bySelectedColumns> + </format> + <format> + <font>2</font> + <width>99</width> + </format> + <format> + <font>6</font> + </format> + <format> + <font>4</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>26</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + <bySelectedColumns>true</bySelectedColumns> + <indent>0</indent> + </format> + <format> + <font>4</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>51</width> + <horizontalAlignment>Right</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Parameter</fillType> + <markNegatives>true</markNegatives> + <format> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧН=0</v8:content> + </v8:item> + </format> + </format> + <format> + <font>4</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>51</width> + <horizontalAlignment>Right</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + </format> + <format> + <font>4</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>346</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + <bySelectedColumns>true</bySelectedColumns> + </format> + <format> + <font>4</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>346</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + </format> + <format> + <font>7</font> + <height>78</height> + <width>346</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Top</verticalAlignment> + <textPlacement>Wrap</textPlacement> + </format> + <format> + <drawingBorder>1</drawingBorder> + </format> + <format> + <width>72</width> + </format> + <picture> + <index>0</index> + <picture ref="v8ui:ДосьеУвеличениеПоказателя"/> + </picture> +</document> \ 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..6011e2ff7 --- /dev/null +++ b/SSL/src/Reports/ДосьеКонтрагента/Templates/БухгалтерскаяОтчетность/Template.mxlx @@ -0,0 +1,20543 @@ +<?xml version="1.0" encoding="UTF-8"?> +<document xmlns="http://v8.1c.ru/8.2/data/spreadsheet" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <languageSettings> + <currentLanguage>ru</currentLanguage> + <defaultLanguage>ru</defaultLanguage> + <languageInfo> + <id>ru</id> + <code>Русский</code> + <description>Русский</description> + </languageInfo> + </languageSettings> + <columns> + <size>6</size> + <columnsItem> + <index>0</index> + <column> + <formatIndex>1</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>1</index> + <column> + <formatIndex>2</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>2</index> + <column> + <formatIndex>3</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>3</index> + <column> + <formatIndex>4</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>4</index> + <column> + <formatIndex>4</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>5</index> + <column> + <formatIndex>4</formatIndex> + </column> + </columnsItem> + </columns> + <columns> + <id>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</id> + <size>7</size> + <columnsItem> + <index>0</index> + <column> + <formatIndex>1</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>1</index> + <column> + <formatIndex>5</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>2</index> + <column> + <formatIndex>6</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>3</index> + <column> + <formatIndex>7</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>4</index> + <column> + <formatIndex>8</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>5</index> + <column> + <formatIndex>4</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>6</index> + <column> + <formatIndex>4</formatIndex> + </column> + </columnsItem> + </columns> + <columns> + <id>28710584-ebc3-4878-8093-106c7aafe379</id> + <size>8</size> + <columnsItem> + <index>0</index> + <column> + <formatIndex>1</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>1</index> + <column> + <formatIndex>5</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>2</index> + <column> + <formatIndex>9</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>3</index> + <column> + <formatIndex>10</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>4</index> + <column> + <formatIndex>7</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>5</index> + <column> + <formatIndex>8</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>6</index> + <column> + <formatIndex>4</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>7</index> + <column> + <formatIndex>4</formatIndex> + </column> + </columnsItem> + </columns> + <rowsItem> + <index>0</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>12</f> + </c> + </c> + <c> + <c> + <f>13</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Бухгалтерская отчетность</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>1</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>14</f> + </c> + </c> + <c> + <c> + <f>15</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Информация о бухгалтерской отчетности сформирована по данным Росстата и является открытой в соответствии с ПБУ 4/99</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>2</index> + <row> + <formatIndex>11</formatIndex> + <c> + <i>1</i> + <c> + <f>15</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>3</index> + <row> + <formatIndex>11</formatIndex> + <c> + <i>1</i> + <c> + <f>16</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Бухгалтерская отчетность за последние 3 года отсутствует в базе Росстата</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>4</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>12</f> + </c> + </c> + <c> + <c> + <f>17</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Бухгалтерский баланс</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>5</index> + <row> + <formatIndex>16</formatIndex> + <c> + <i>1</i> + <c> + <f>18</f> + <parameter>ВалютаОтчетности</parameter> + </c> + </c> + <c> + <c> + <f>19</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>20</f> + <parameter>Год_1</parameter> + </c> + </c> + <c> + <c> + <f>21</f> + <parameter>Год_2</parameter> + </c> + </c> + <c> + <c> + <f>21</f> + <parameter>Год_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>6</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>23</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Актив</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>24</f> + </c> + </c> + <c> + <c> + <f>25</f> + </c> + </c> + <c> + <c> + <f>26</f> + </c> + </c> + <c> + <c> + <f>26</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>7</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>27</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>I. Внеоборотные активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>28</f> + </c> + </c> + <c> + <c> + <f>25</f> + </c> + </c> + <c> + <c> + <f>26</f> + </c> + </c> + <c> + <c> + <f>26</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>8</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>30</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Нематериальные активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1110</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1110_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1110_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1110_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>9</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Результаты исследований и разработок</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1120</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1120_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1120_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1120_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>10</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Нематериальные поисковые активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1130</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1130_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1130_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1130_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>11</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Материальные поисковые активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1140</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1140_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1140_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1140_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>12</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Основные средства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1150</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1150_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1150_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1150_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>13</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Доходные вложения в материальные ценности</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1160</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1160_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1160_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1160_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>14</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Финансовые вложения</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1170</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1170_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1170_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1170_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>15</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отложенные налоговые активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1180</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1180_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1180_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1180_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>16</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прочие внеоборотные активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1190</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1190_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1190_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1190_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>17</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>34</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Итого по разделу I</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1100</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1100_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1100_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1100_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>18</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>27</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>II. Оборотные активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>35</f> + </c> + </c> + <c> + <c> + <f>36</f> + </c> + </c> + <c> + <c> + <f>36</f> + </c> + </c> + <c> + <c> + <f>36</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>19</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Запасы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1210</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1210_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1210_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1210_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>20</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>37</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Налог на добавленную стоимость по приобретенным ценностям</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1220</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1220_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1220_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1220_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>21</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>37</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дебиторская задолженность</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1230</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1230_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1230_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1230_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>22</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>37</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Финансовые вложения</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1240</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1240_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1240_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1240_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>23</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>37</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Денежные средства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1250</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1250_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1250_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1250_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>24</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>37</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прочие оборотные активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1260</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1260_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1260_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1260_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>25</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>34</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Итого по разделу II</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1200</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1200_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1200_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1200_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>26</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>34</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Баланс</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1600</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1600_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1600_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1600_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>27</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>38</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Пассив</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>39</f> + </c> + </c> + <c> + <c> + <f>40</f> + </c> + </c> + <c> + <c> + <f>40</f> + </c> + </c> + <c> + <c> + <f>40</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>28</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>27</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>III. Капитал и резервы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>35</f> + </c> + </c> + <c> + <c> + <f>41</f> + </c> + </c> + <c> + <c> + <f>41</f> + </c> + </c> + <c> + <c> + <f>41</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>29</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уставный капитал (складочный капитал, уставный фонд, вклады товарищей)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1310</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1310_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1310_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1310_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>30</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Собственные акции, выкупленные у акционеров</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1320</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1320_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1320_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1320_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>31</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Переоценка внеоборотных активов</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1340</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1340_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1340_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1340_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>32</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Добавочный капитал (без переоценки)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1350</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1350_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1350_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1350_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>33</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Резервный капитал</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1360</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1360_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1360_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1360_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>34</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Нераспределенная прибыль (непокрытый убыток)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1370</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1370_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1370_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1370_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>35</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>34</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Итого по разделу III</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1300</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1300_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1300_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1300_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>36</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>27</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>IV. Долгосрочные обязательства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>35</f> + </c> + </c> + <c> + <c> + <f>36</f> + </c> + </c> + <c> + <c> + <f>36</f> + </c> + </c> + <c> + <c> + <f>36</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>37</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Заемные средства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1410</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1410_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1410_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1410_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>38</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>37</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отложенные налоговые обязательства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1420</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1420_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1420_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1420_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>39</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>37</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Резервы под условные обязательства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1430</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1430_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1430_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1430_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>40</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>37</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прочие обязательства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1450</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1450_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1450_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1450_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>41</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>34</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Итого по разделу IV</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1400</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1400_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1400_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1400_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>42</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>42</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>V. Краткосрочные обязательства +</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>35</f> + </c> + </c> + <c> + <c> + <f>36</f> + </c> + </c> + <c> + <c> + <f>36</f> + </c> + </c> + <c> + <c> + <f>36</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>43</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>37</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Заемные средства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1510</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1510_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1510_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1510_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>44</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>37</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Кредиторская задолженность</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1520</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1520_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1520_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1520_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>45</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>37</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Доходы будущих периодов</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1530</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1530_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1530_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1530_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>46</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>37</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Резервы предстоящих расходов</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1540</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1540_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1540_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1540_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>47</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>37</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прочие обязательства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1550</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1550_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1550_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1550_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>48</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>34</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Итого по разделу V</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1500</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1500_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1500_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1500_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>49</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>34</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Баланс</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1700</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1700_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1700_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1700_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>50</index> + <row> + <formatIndex>14</formatIndex> + <c> + <i>1</i> + <c> + <f>43</f> + </c> + </c> + <c> + <c> + <f>44</f> + </c> + </c> + <c> + <c> + <f>45</f> + </c> + </c> + <c> + <c> + <f>46</f> + </c> + </c> + <c> + <c> + <f>46</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>51</index> + <row> + <formatIndex>11</formatIndex> + <c> + <i>4</i> + <c> + <f>47</f> + </c> + </c> + <c> + <c> + <f>47</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>52</index> + <row> + <formatIndex>48</formatIndex> + <c> + <c> + <f>12</f> + </c> + </c> + <c> + <c> + <f>17</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отчет о прибылях и убытках</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>53</index> + <row> + <formatIndex>16</formatIndex> + <c> + <i>1</i> + <c> + <f>49</f> + <parameter>ВалютаОтчетности</parameter> + </c> + </c> + <c> + <c> + <f>19</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>50</f> + <parameter>Год_1</parameter> + </c> + </c> + <c> + <c> + <f>51</f> + <parameter>Год_2</parameter> + </c> + </c> + <c> + <c> + <f>51</f> + <parameter>Год_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>54</index> + <row> + <formatIndex>14</formatIndex> + <c> + <i>1</i> + <c> + <f>52</f> + </c> + </c> + <c> + <c> + <f>53</f> + </c> + </c> + <c> + <c> + <f>54</f> + </c> + </c> + <c> + <c> + <f>54</f> + </c> + </c> + <c> + <c> + <f>54</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>55</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>55</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выручка</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>56</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2110</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2110_1</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2110_2</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2110_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>56</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>58</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Себестоимость продаж</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>56</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2120</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2120_1</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2120_2</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2120_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>57</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>58</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Валовая прибыль (убыток)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>56</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2100</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2100_1</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2100_2</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2100_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>58</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>58</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Коммерческие расходы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>56</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2210</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2210_1</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2210_2</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2210_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>59</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>58</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Управленческие расходы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>56</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2220</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2220_1</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2220_2</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2220_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>60</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>58</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прибыль (убыток) от продаж</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>56</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2200</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2200_1</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2200_2</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2200_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>61</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>58</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Доходы от участия в других организациях</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>56</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2310</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2310_1</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2310_2</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2310_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>62</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>58</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Проценты к получению</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>56</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2320</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2320_1</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2320_2</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2320_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>63</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>58</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Проценты к уплате</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>56</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2330</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2330_1</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2330_2</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2330_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>64</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>59</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прочие доходы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>56</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2340</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2340_1</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2340_2</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2340_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>65</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>58</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прочие расходы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>56</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2350</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2350_1</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2350_2</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2350_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>66</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>58</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прибыль (убыток) до налогообложения</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>56</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2300</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2300_1</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2300_2</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2300_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>67</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>59</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Текущий налог на прибыль</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>56</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2410</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2410_1</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2410_2</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2410_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>68</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>59</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>в т.ч. постоянные налоговые обязательства +(активы)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>56</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2421</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2421_1</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2421_2</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2421_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>69</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>59</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Изменение отложенных налоговых обязательств</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>56</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2430</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2430_1</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2430_2</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2430_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>70</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>59</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Изменение отложенных налоговых активов</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>56</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2450</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2450_1</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2450_2</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2450_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>71</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>59</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прочее</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>56</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2460</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2460_1</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2460_2</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2460_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>72</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>60</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Чистая прибыль (убыток)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>56</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2400</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2400_1</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2400_2</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2400_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>73</index> + <row> + <formatIndex>11</formatIndex> + <c> + <i>4</i> + <c> + <f>47</f> + </c> + </c> + <c> + <c> + <f>47</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>74</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>61</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>СПРАВОЧНО</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>62</f> + </c> + </c> + <c> + <c> + <f>63</f> + </c> + </c> + <c> + <c> + <f>64</f> + </c> + </c> + <c> + <c> + <f>64</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>75</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>65</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Результат от переоценки внеоборотных активов, не включаемый в чистую прибыль (убыток) периода</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>66</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2510</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>67</f> + <parameter>П2510_1</parameter> + </c> + </c> + <c> + <c> + <f>67</f> + <parameter>П2510_2</parameter> + </c> + </c> + <c> + <c> + <f>67</f> + <parameter>П2510_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>76</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>58</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Результат от прочих операций, не включаемый в чистую прибыль (убыток) периода</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>56</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2520</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2520_1</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2520_2</parameter> + </c> + </c> + <c> + <c> + <f>57</f> + <parameter>П2520_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>77</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>68</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Совокупный финансовый результат периода</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>69</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2500</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>70</f> + <parameter>П2500_1</parameter> + </c> + </c> + <c> + <c> + <f>70</f> + <parameter>П2500_2</parameter> + </c> + </c> + <c> + <c> + <f>70</f> + <parameter>П2500_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>78</index> + <row> + <formatIndex>11</formatIndex> + <c> + <i>4</i> + <c> + <f>47</f> + </c> + </c> + <c> + <c> + <f>47</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>80</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>12</f> + </c> + </c> + <c> + <c> + <f>17</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отчет об изменении капитала</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>81</index> + <row> + <formatIndex>16</formatIndex> + <c> + <i>1</i> + <c> + <f>49</f> + <parameter>ВалютаОтчетности</parameter> + </c> + </c> + <c> + <c> + <f>71</f> + </c> + </c> + <c> + <c> + <f>72</f> + <parameter>Год_1</parameter> + </c> + </c> + <c> + <c> + <f>51</f> + <parameter>Год_2</parameter> + </c> + </c> + <c> + <c> + <f>51</f> + <parameter>Год_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>82</index> + <row> + <formatIndex>11</formatIndex> + <c> + <i>1</i> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>3</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>83</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>75</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Величина капитала на конец года</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>76</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33008_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33008_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33008_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>84</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>78</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>В том числе</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>79</f> + </c> + </c> + <c> + <c> + <f>80</f> + </c> + </c> + <c> + <c> + <f>80</f> + </c> + </c> + <c> + <c> + <f>80</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>85</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уставный капитал</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33003_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33003_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33003_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>86</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Собственные акции</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33004_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33004_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33004_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>87</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Добавочный капитал</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33005_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33005_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33005_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>88</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Резервный капитал</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33006_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33006_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33006_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>89</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Нераспределенная прибыль</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33007_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33007_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33007_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>90</index> + <row> + <formatIndex>45</formatIndex> + <c> + <i>1</i> + <c> + <f>83</f> + </c> + </c> + <c> + <c> + <f>84</f> + </c> + </c> + <c> + <c> + <f>85</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>91</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>75</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Увеличение капитала за год</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33108_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33108_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33108_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>92</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>78</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>В том числе</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>79</f> + </c> + </c> + <c> + <c> + <f>80</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>93</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уставный капитал</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33103_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33103_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33103_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>94</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>78</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>В том числе</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>79</f> + </c> + </c> + <c> + <c> + <f>80</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>95</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дополнительный выпуск акций</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33143_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33143_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33143_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>96</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Увеличение номинальной стоимости акций</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33153_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33153_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33153_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>97</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Реорганизация юридического лица</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33163_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33163_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33163_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>98</index> + <row> + <formatIndex>45</formatIndex> + <c> + <i>1</i> + <c> + <f>83</f> + </c> + </c> + <c> + <c> + <f>84</f> + </c> + </c> + <c> + <c> + <f>85</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>99</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Собственные акции, выкупленные у акционеров</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33104_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33104_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33104_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>100</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>78</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>В том числе</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>79</f> + </c> + </c> + <c> + <c> + <f>80</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>101</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дополнительный выпуск акций</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33144_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33144_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33144_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>102</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Увеличение номинальной стоимости акций</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33154_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33154_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33154_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>103</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Реорганизация юридического лица</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33164_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33164_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33164_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>104</index> + <row> + <formatIndex>45</formatIndex> + <c> + <i>1</i> + <c> + <f>83</f> + </c> + </c> + <c> + <c> + <f>84</f> + </c> + </c> + <c> + <c> + <f>85</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>105</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Добавочный капитал</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33105_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33105_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33105_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>106</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>78</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>В том числе</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>79</f> + </c> + </c> + <c> + <c> + <f>80</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>107</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Переоценка имущества</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33125_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33125_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33125_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>108</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Доходы, относящиеся на увеличение капитала</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33135_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33135_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33135_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>109</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дополнительный выпуск акций</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33145_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33145_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33145_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>110</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Увеличение номинальной стоимости акций</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33155_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33155_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33155_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>111</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Реорганизация юридического лица</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33165_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33165_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33165_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>112</index> + <row> + <formatIndex>45</formatIndex> + <c> + <i>1</i> + <c> + <f>83</f> + </c> + </c> + <c> + <c> + <f>84</f> + </c> + </c> + <c> + <c> + <f>85</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>113</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Резервный капитал</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33106_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33106_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33106_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>114</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>78</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>В том числе</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>79</f> + </c> + </c> + <c> + <c> + <f>80</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>115</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Реорганизация юридического лица</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33166_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33166_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33166_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>116</index> + <row> + <formatIndex>45</formatIndex> + <c> + <i>1</i> + <c> + <f>83</f> + </c> + </c> + <c> + <c> + <f>84</f> + </c> + </c> + <c> + <c> + <f>85</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>117</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Нераспределенная прибыль</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33107_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33107_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33107_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>118</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>78</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>В том числе</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>79</f> + </c> + </c> + <c> + <c> + <f>80</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>119</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Чистая прибыль</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33117_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33117_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33117_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>120</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Переоценка имущества</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33127_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33127_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33127_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>121</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Доходы, относящиеся на увеличение капитала</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33137_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33137_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33137_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>122</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дополнительный выпуск акций</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33147_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33147_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33147_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>123</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Увеличение номинальной стоимости акций</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33157_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33157_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33157_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>124</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>87</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Реорганизация юридического лица</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33167_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33167_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33167_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>125</index> + <row> + <formatIndex>88</formatIndex> + <c> + <i>1</i> + <c> + <f>83</f> + </c> + </c> + <c> + <c> + <f>84</f> + </c> + </c> + <c> + <c> + <f>85</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>126</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>75</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уменьшение капитала за год</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33208_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33208_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33208_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>127</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>78</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>В том числе</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>79</f> + </c> + </c> + <c> + <c> + <f>80</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>128</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уставный капитал</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33203_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33203_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33203_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>129</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>78</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>В том числе</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>79</f> + </c> + </c> + <c> + <c> + <f>80</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>130</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уменьшение номинальной стоимости акций</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33243_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33243_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33243_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>131</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уменьшение количества акций</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33253_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33253_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33253_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>132</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Реорганизация юридического лица</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33263_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33263_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33263_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>133</index> + <row> + <formatIndex>45</formatIndex> + <c> + <i>1</i> + <c> + <f>83</f> + </c> + </c> + <c> + <c> + <f>84</f> + </c> + </c> + <c> + <c> + <f>85</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>134</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Собственные акции, выкупленные у акционеров</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33204_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33204_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33204_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>135</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>78</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>В том числе</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>79</f> + </c> + </c> + <c> + <c> + <f>80</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>136</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>89</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уменьшение номинальной стоимости акций</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33244_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33244_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33244_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>137</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>89</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уменьшение количества акций</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33254_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33254_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33254_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>138</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Реорганизация юридического лица</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33264_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33264_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33264_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>139</index> + <row> + <formatIndex>45</formatIndex> + <c> + <i>1</i> + <c> + <f>83</f> + </c> + </c> + <c> + <c> + <f>84</f> + </c> + </c> + <c> + <c> + <f>85</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>140</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Добавочный капитал</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33205_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33205_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33205_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>141</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>78</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>В том числе</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>79</f> + </c> + </c> + <c> + <c> + <f>80</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>142</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Переоценка имущества</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33225_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33225_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33225_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>143</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Расходы, относящиеся на увеличение капитала</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33235_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33235_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33235_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>144</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>89</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уменьшение номинальной стоимости акций</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33245_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33245_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33245_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>145</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>89</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уменьшение количества акций</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33255_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33255_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33255_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>146</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Реорганизация юридического лица</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33265_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33265_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33265_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>147</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Изменение добавочного капитала</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33305_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33305_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33305_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>148</index> + <row> + <formatIndex>45</formatIndex> + <c> + <i>1</i> + <c> + <f>83</f> + </c> + </c> + <c> + <c> + <f>84</f> + </c> + </c> + <c> + <c> + <f>85</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>149</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Резервный капитал</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33206_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33206_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33206_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>150</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>78</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>В том числе</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>79</f> + </c> + </c> + <c> + <c> + <f>80</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>151</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Реорганизация юридического лица</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33266_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33266_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33266_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>152</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Изменение резервного капитала</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33406_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33406_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33406_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>153</index> + <row> + <formatIndex>45</formatIndex> + <c> + <i>1</i> + <c> + <f>83</f> + </c> + </c> + <c> + <c> + <f>84</f> + </c> + </c> + <c> + <c> + <f>85</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>154</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Нераспределенная прибыль</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33207_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33207_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33207_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>155</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>78</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>В том числе</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>79</f> + </c> + </c> + <c> + <c> + <f>80</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>156</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Убыток</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33217_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33217_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33217_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>157</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Переоценка имущества</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33127_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33127_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33127_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>158</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Расходы, относящиеся на увеличение капитала</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33227_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33227_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33227_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>159</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>89</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уменьшение номинальной стоимости акций</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33237_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33237_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33237_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>160</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>89</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уменьшение количества акций</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33247_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33247_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33247_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>161</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Реорганизация юридического лица</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33257_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33257_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33257_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>162</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дивиденды</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33267_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33267_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33267_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>163</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Изменение добавочного капитала</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33307_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33307_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33307_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>164</index> + <row> + <columnsID>28710584-ebc3-4878-8093-106c7aafe379</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Изменение резервного капитала</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33407_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33407_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П33407_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>165</index> + <row> + <formatIndex>45</formatIndex> + <c> + <i>1</i> + <c> + <f>83</f> + </c> + </c> + <c> + <c> + <f>84</f> + </c> + </c> + <c> + <c> + <f>85</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>166</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>75</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Величина капитала на начало года</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П32008_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П32008_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П32008_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>167</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>78</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>В том числе</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>79</f> + </c> + </c> + <c> + <c> + <f>80</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>168</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уставный капитал</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П32003_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П32003_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П32003_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>169</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Собственные акции</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П32004_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П32004_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П32004_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>170</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Добавочный капитал</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П32005_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П32005_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П32005_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>171</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Резервный капитал</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П32006_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П32006_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П32006_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>172</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Нераспределенная прибыль</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П32007_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П32007_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П32007_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>173</index> + <row> + <formatIndex>45</formatIndex> + <c> + <i>1</i> + <c> + <f>83</f> + </c> + </c> + <c> + <c> + <f>84</f> + </c> + </c> + <c> + <c> + <f>85</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>175</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>12</f> + </c> + </c> + <c> + <c> + <f>17</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отчет о движении денежных средств</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>176</index> + <row> + <formatIndex>16</formatIndex> + <c> + <i>1</i> + <c> + <f>49</f> + <parameter>ВалютаОтчетности</parameter> + </c> + </c> + <c> + <c> + <f>19</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>20</f> + <parameter>Год_1</parameter> + </c> + </c> + <c> + <c> + <f>21</f> + <parameter>Год_2</parameter> + </c> + </c> + <c> + <c> + <f>21</f> + <parameter>Год_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>177</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>27</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Денежные потоки от текущих операций</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>28</f> + </c> + </c> + <c> + <c> + <f>25</f> + </c> + </c> + <c> + <c> + <f>26</f> + </c> + </c> + <c> + <c> + <f>26</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>178</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>30</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Поступления - всего</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4110</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4110_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4110_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4110_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>179</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>78</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>В том числе</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>79</f> + </c> + </c> + <c> + <c> + <f>80</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>180</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>от продажи продукции, товаров, работ и услуг</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4111</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4111_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4111_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4111_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>181</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>арендных платежей, лицензионных платежей, роялти, комиссионных и иных аналогичных платежей</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4112</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4112_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4112_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4112_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>182</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>от перепродажи финансовых вложений</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4113</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4113_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4113_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4113_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>183</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Платежи - всего</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4120</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4120_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4120_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4120_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>184</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>78</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>В том числе</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>79</f> + </c> + </c> + <c> + <c> + <f>80</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>185</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>поставщикам (подрядчикам) за сырье, материалы, работы, услуги</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4121</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4121_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4121_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4121_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>186</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>в связи с оплатой труда работников</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4122</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4122_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4122_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4122_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>187</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>процентов по долговым обязательствам</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4123</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4123_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4123_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4123_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>188</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>налога на прибыль организаций</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4124</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4124_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4124_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4124_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>189</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сальдо денежных потоков от текущих операций</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4100</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4100_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4100_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4100_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>191</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>27</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Денежные потоки от инвестиционных операций</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>28</f> + </c> + </c> + <c> + <c> + <f>25</f> + </c> + </c> + <c> + <c> + <f>26</f> + </c> + </c> + <c> + <c> + <f>26</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>192</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>30</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Поступления - всего</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4210</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4210_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4210_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4210_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>193</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>78</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>В том числе</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>79</f> + </c> + </c> + <c> + <c> + <f>80</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>194</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>от продажи внеоборотных активов (кроме финансовых вложений)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4211</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4211_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4211_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4211_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>195</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>от продажи акций других организаций (долей участия)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4212</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4212_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4212_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4212_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>196</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>от возврата предоставленных займов, от продажи долговых ценных бумаг (прав требования денежных средств к другим лицам)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4213</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4213_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4213_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4213_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>197</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>дивидендов, процентов по долговым финансовым вложениям и аналогичных поступлений от долевого участия в других организациях</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4214</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4214_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4214_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4214_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>198</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Платежи - всего</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4220</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4220_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4220_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4220_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>199</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>78</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>В том числе</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>79</f> + </c> + </c> + <c> + <c> + <f>80</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>200</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>в связи с приобретением, созданием, модернизацией, реконструкцией и подготовкой к использованию внеоборотных активов</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4221</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4221_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4221_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4221_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>201</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>в связи с приобретением акций других организаций (долей участия)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4222</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4222_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4222_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4222_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>202</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>в связи с приобретением долговых ценных бумаг (прав требования денежных средств к другим лицам), предоставление займов другим лицам</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4223</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4223_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4223_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4223_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>203</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>процентов по долговым обязательствам, включаемым в стоимость инвестиционного актива</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4224</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4224_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4224_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4224_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>204</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сальдо денежных потоков от инвестиционных операций</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4200</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4200_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4200_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4200_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>205</index> + <row> + <formatIndex>90</formatIndex> + <empty>true</empty> + </row> + </rowsItem> + <rowsItem> + <index>206</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>27</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Денежные потоки от финансовых операций</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>28</f> + </c> + </c> + <c> + <c> + <f>25</f> + </c> + </c> + <c> + <c> + <f>26</f> + </c> + </c> + <c> + <c> + <f>26</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>207</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>30</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Поступления - всего</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4310</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4310_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4310_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4310_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>208</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>78</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>В том числе</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>79</f> + </c> + </c> + <c> + <c> + <f>80</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>209</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>получение кредитов и займов</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4311</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4311_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4311_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4311_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>210</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>денежных вкладов собственников (участников)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4312</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4312_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4312_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4312_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>211</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>от выпуска акций, увеличения долей участия</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4313</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4313_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4313_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4313_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>212</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>от выпуска облигаций, векселей и других долговых ценных бумаг и др.</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4314</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4314_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4314_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4314_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>213</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Платежи - всего</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4320</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4320_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4320_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4320_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>214</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>78</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>В том числе</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>79</f> + </c> + </c> + <c> + <c> + <f>80</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>215</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>собственникам (участникам) в связи с выкупом у них акций (долей участия) организации или их выходом из состава участников</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4321</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4321_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4321_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4321_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>216</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>на уплату дивидендов и иных платежей по распределению прибыли в пользу собственников (участников)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4322</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4322_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4322_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4322_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>217</index> + <row> + <columnsID>b016bb7c-d99c-4ad1-be9c-4ce19a1f50b4</columnsID> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>в связи с погашением (выкупом) векселей и других долговых ценных бумаг, возврат кредитов и займов</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4323</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4323_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4323_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4323_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>218</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сальдо денежных потоков от финансовых операций</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4300</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4300_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4300_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4300_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>220</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>91</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сальдо денежных потоков за отчетный период</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4400</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4400_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4400_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4400_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>222</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>92</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сальдо денежных средств и денежных эквивалентов на начало отчетного периода</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4450</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4450_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4450_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4450_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>224</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>92</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сальдо денежных средств и денежных эквивалентов на конец отчетного периода</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4500</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4500_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4500_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4500_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>226</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Величина влияния изменения курса иностранной валюты по отношению к рублю</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4490</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4490_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4490_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П4490_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>229</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>12</f> + </c> + </c> + <c> + <c> + <f>17</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отчет о целевом использовании средств</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>230</index> + <row> + <formatIndex>16</formatIndex> + <c> + <i>1</i> + <c> + <f>49</f> + <parameter>ВалютаОтчетности</parameter> + </c> + </c> + <c> + <c> + <f>19</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>20</f> + <parameter>Год_1</parameter> + </c> + </c> + <c> + <c> + <f>21</f> + <parameter>Год_2</parameter> + </c> + </c> + <c> + <c> + <f>93</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>231</index> + <row> + <formatIndex>11</formatIndex> + <c> + <i>1</i> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <i>5</i> + <c> + <f>11</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>232</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Остаток средств на начало отчетного года</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6100</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6100_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6100_2</parameter> + </c> + </c> + <c> + <c> + <f>95</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>233</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>96</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Поступило средств</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>97</f> + </c> + </c> + <c> + <c> + <f>98</f> + </c> + </c> + <c> + <c> + <f>80</f> + </c> + </c> + <c> + <c> + <f>95</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>234</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Вступительные взносы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6210</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6210_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6210_2</parameter> + </c> + </c> + <c> + <c> + <f>95</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>235</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Членские взносы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6215</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6215_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6215_2</parameter> + </c> + </c> + <c> + <c> + <f>95</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>236</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Целевые взносы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6220</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6220_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6220_2</parameter> + </c> + </c> + <c> + <c> + <f>95</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>237</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Добровольные имущественные взносы и пожертвования</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6230</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6230_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6230_2</parameter> + </c> + </c> + <c> + <c> + <f>95</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>238</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прибыль от предпринимательской деятельности организации</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6240</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6240_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6240_2</parameter> + </c> + </c> + <c> + <c> + <f>95</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>239</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прочее</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6250</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6250_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6250_2</parameter> + </c> + </c> + <c> + <c> + <f>95</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>240</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Всего поступило средств</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>76</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6200</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6200_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6200_2</parameter> + </c> + </c> + <c> + <c> + <f>95</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>241</index> + <row> + <formatIndex>45</formatIndex> + <c> + <i>1</i> + <c> + <f>83</f> + </c> + </c> + <c> + <c> + <f>84</f> + </c> + </c> + <c> + <c> + <f>85</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>242</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>96</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Использовано средств</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>97</f> + </c> + </c> + <c> + <c> + <f>98</f> + </c> + </c> + <c> + <c> + <f>80</f> + </c> + </c> + <c> + <c> + <f>95</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>243</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>На целевые мероприятия</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6310</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6310_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6310_2</parameter> + </c> + </c> + <c> + <c> + <f>95</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>244</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>На содержание аппарата управления</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6320</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6320_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6320_2</parameter> + </c> + </c> + <c> + <c> + <f>95</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>245</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>На приобретение основных средств и иного имущества</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6330</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6330_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6330_2</parameter> + </c> + </c> + <c> + <c> + <f>95</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>246</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прочее</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6350</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6350_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6350_2</parameter> + </c> + </c> + <c> + <c> + <f>95</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>247</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Всего использовано средств</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>76</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6300</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6300_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6300_2</parameter> + </c> + </c> + <c> + <c> + <f>95</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>248</index> + <row> + <formatIndex>45</formatIndex> + <c> + <i>1</i> + <c> + <f>83</f> + </c> + </c> + <c> + <c> + <f>84</f> + </c> + </c> + <c> + <c> + <f>85</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>249</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Остаток средств на конец отчетного года</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6400</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6400_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6400_2</parameter> + </c> + </c> + <c> + <c> + <f>95</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>252</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>12</f> + </c> + </c> + <c> + <c> + <f>17</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Расчет стоимости чистых активов</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>253</index> + <row> + <formatIndex>16</formatIndex> + <c> + <i>1</i> + <c> + <f>49</f> + <parameter>ВалютаОтчетности</parameter> + </c> + </c> + <c> + <c> + <f>19</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>20</f> + <parameter>Год_1</parameter> + </c> + </c> + <c> + <c> + <f>21</f> + <parameter>Год_2</parameter> + </c> + </c> + <c> + <c> + <f>21</f> + <parameter>Год_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>254</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>27</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>28</f> + </c> + </c> + <c> + <c> + <f>25</f> + </c> + </c> + <c> + <c> + <f>26</f> + </c> + </c> + <c> + <c> + <f>26</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>255</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>99</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Нематериальные активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>100</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1110</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1110_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1110_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1110_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>256</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>101</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Результаты исследований и разработок</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>100</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1120</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1120_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1120_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1120_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>257</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>101</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Нематериальные поисковые активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>100</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1130</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1130_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1130_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1130_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>258</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>101</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Материальные поисковые активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>100</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1140</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1140_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1140_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1140_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>259</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>101</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Основные средства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>100</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1150</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1150_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1150_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1150_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>260</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>101</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Доходные вложения в материальные ценности</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>100</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1160</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1160_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1160_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1160_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>261</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>101</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Финансовые вложения долгосрочные</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>102</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1170</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1170_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1170_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1170_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>262</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>101</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отложенные налоговые активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>102</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1180</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1180_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1180_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1180_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>263</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>101</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прочие внеоборотные активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>102</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1190</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1190_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1190_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1190_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>264</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>101</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Запасы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>100</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1210</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1210_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1210_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1210_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>265</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>101</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Налог на добавленную стоимость по приобретенным ценностям</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>100</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1220</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1220_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1220_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1220_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>266</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>99</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дебиторская задолженность*</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>100</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1230</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1230_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1230_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1230_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>267</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>101</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Финансовые вложения краткосрочные</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>100</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1240</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1240_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1240_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1240_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>268</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>101</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Денежные средства и денежные эквиваленты</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>100</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1250</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1250_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1250_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1250_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>269</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>101</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прочие оборотные активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>100</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1260</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1260_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1260_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1260_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>270</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>103</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ИТОГО активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>100</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>-</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П91_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П91_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П91_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>272</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>27</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Пассивы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>28</f> + </c> + </c> + <c> + <c> + <f>25</f> + </c> + </c> + <c> + <c> + <f>26</f> + </c> + </c> + <c> + <c> + <f>26</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>273</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>101</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Заемные средства долгосрочные</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>104</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1410</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1410_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1410_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1410_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>274</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>101</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отложенные налоговые обязательства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>104</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1420</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1420_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1420_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1420_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>275</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>101</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Оценочные обязательства долгосрочные</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>105</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1430</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1430_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1430_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1430_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>276</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>101</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прочие обязательства долгосрочные</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>105</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1450</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1450_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1450_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1450_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>277</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>99</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Заемные средства краткосрочные</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>105</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1510</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1510_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1510_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1510_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>278</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>101</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Кредиторская задолженность </v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>105</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1520</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1520_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1520_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1520_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>279</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>101</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Оценочные обязательства краткосрочные</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>105</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1540</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1540_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1540_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1540_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>280</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>101</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прочие обязательства краткосрочные</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>105</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1550</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1550_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1550_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П1550_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>281</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>103</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ИТОГО пассивы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>100</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>-</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П92_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П92_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П92_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>282</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>103</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Стоимость чистых активов</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>100</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>-</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П93_1</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П93_2</parameter> + </c> + </c> + <c> + <c> + <f>32</f> + <parameter>П93_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>285</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>12</f> + </c> + </c> + <c> + <c> + <f>13</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Бухгалтерская отчетность малого предприятия</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>286</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>12</f> + </c> + </c> + <c> + <c> + <f>17</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Бухгалтерский баланс</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>287</index> + <row> + <formatIndex>16</formatIndex> + <c> + <i>1</i> + <c> + <f>49</f> + <parameter>ВалютаОтчетности</parameter> + </c> + </c> + <c> + <c> + <f>19</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>20</f> + <parameter>Год_1</parameter> + </c> + </c> + <c> + <c> + <f>21</f> + <parameter>Год_2</parameter> + </c> + </c> + <c> + <c> + <f>21</f> + <parameter>Год_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>288</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>106</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Актив</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>107</f> + </c> + </c> + <c> + <c> + <f>108</f> + </c> + </c> + <c> + <c> + <f>109</f> + </c> + </c> + <c> + <c> + <f>109</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>289</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Материальные поисковые активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1140</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П11_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П11_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П11_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>290</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Основные средства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1150</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>291</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Доходные вложения в материальные ценности</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1160</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>292</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Материальные внеоборотные активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>112</f> + <parameter>Код11</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П11_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П11_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П11_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>293</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Нематериальные активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1110</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П12_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П12_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П12_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>294</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Результаты исследований и разработок</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1120</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>295</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Нематериальные поисковые активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1130</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>296</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Финансовые вложения</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1170</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>297</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отложенные налоговые активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1180</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>298</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прочие внеоборотные активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1190</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>299</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Нематериальные, финансовые и другие внеоборотные активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>112</f> + <parameter>Код12</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П12_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П12_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П12_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>300</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Запасы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>76</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1210</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П1210_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П1210_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П1210_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>301</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Денежные средства и денежные эквиваленты</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>76</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1250</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П1250_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П1250_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П1250_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>302</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Налог на добавленную стоимость по приобретенным ценностям</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1220</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П13_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П13_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П13_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>303</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дебиторская задолженность</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1230</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>304</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Финансовые вложения (за исключением денежных эквивалентов)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1240</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>305</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прочие оборотные активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1260</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>306</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Финансовые и другие оборотные средства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>112</f> + <parameter>Код13</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П13_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П13_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П13_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>307</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>БАЛАНС</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1600</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П1600_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П1600_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П1600_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>308</index> + <row> + <formatIndex>73</formatIndex> + <c> + <i>1</i> + <c> + <f>113</f> + </c> + </c> + <c> + <i>3</i> + <c> + <f>114</f> + </c> + </c> + <c> + <c> + <f>114</f> + </c> + </c> + <c> + <c> + <f>114</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>309</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Пассив</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>115</f> + </c> + </c> + <c> + <c> + <f>116</f> + </c> + </c> + <c> + <c> + <f>116</f> + </c> + </c> + <c> + <c> + <f>116</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>310</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уставный капитал (складочный капитал, уставный фонд, вклады товарищей)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1310</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П14_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П14_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П14_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>311</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Собственные акции, выкупленные у акционеров</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1320</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>312</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Переоценка внеоборотных активов</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1340</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>313</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Добавочный капитал (без переоценки)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1350</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>314</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Резервный капитал</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1360</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>315</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Нераспределенная прибыль (непокрытый убыток)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1370</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>316</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Капитал и резервы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>112</f> + <parameter>Код14</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П14_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П14_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П14_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>317</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Долгосрочные заемные средства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>76</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1410</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П1410_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П1410_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П1410_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>318</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отложенные налоговые обязательства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1420</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П15_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П15_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П15_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>319</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Оценочные обязательства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1430</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>320</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прочие долгосрочные обязательства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1450</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>321</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Другие долгосрочные обязательства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>112</f> + <parameter>Код15</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П15_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П15_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П15_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>322</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Краткосрочные заемные средства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>76</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1510</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П1510_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П1510_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П1510_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>323</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Кредиторская задолженность</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>76</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1520</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П1520_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П1520_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П1520_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>324</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Доходы будущих периодов</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1530</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П16_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П16_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П16_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>325</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Оценочные обязательства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1540</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>326</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прочие краткосрочные обязательства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>76</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1550</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>327</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Другие краткосрочные обязательства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>112</f> + <parameter>Код16</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П16_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П16_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П16_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>328</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Баланс</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1700</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П1700_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П1700_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П1700_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>329</index> + <row> + <formatIndex>11</formatIndex> + <c> + <i>3</i> + <c> + <f>114</f> + </c> + </c> + <c> + <c> + <f>114</f> + </c> + </c> + <c> + <c> + <f>114</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>330</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>12</f> + </c> + </c> + <c> + <c> + <f>17</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отчет о финансовых результатах</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>331</index> + <row> + <formatIndex>73</formatIndex> + <c> + <i>1</i> + <c> + <f>49</f> + <parameter>ВалютаОтчетности</parameter> + </c> + </c> + <c> + <c> + <f>19</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>20</f> + <parameter>Год_1</parameter> + </c> + </c> + <c> + <c> + <f>21</f> + <parameter>Год_2</parameter> + </c> + </c> + <c> + <c> + <f>21</f> + <parameter>Год_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>332</index> + <row> + <formatIndex>117</formatIndex> + <c> + <i>1</i> + <c> + <f>118</f> + </c> + </c> + <c> + <c> + <f>119</f> + </c> + </c> + <c> + <c> + <f>120</f> + </c> + </c> + <c> + <c> + <f>120</f> + </c> + </c> + <c> + <c> + <f>120</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>333</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>121</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выручка</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>76</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2110</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П2110_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П2110_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П2110_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>334</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>108</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Себестоимость продаж</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2120</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>122</f> + <parameter>П21_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П21_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П21_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>335</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>108</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Коммерческие расходы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2210</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>123</f> + </c> + </c> + <c> + <c> + <f>123</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>336</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>108</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Управленческие расходы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2220</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>123</f> + </c> + </c> + <c> + <c> + <f>123</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>337</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>121</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Расходы по обычной деятельности</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>112</f> + <parameter>Код21</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П21_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П21_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П21_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>338</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>121</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Проценты к уплате</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>76</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2330</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П2330_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П2330_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П2330_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>339</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>108</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Доходы от участия в других организациях</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2310</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П22_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П22_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П22_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>340</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>108</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Проценты к получению</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2320</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>123</f> + </c> + </c> + <c> + <c> + <f>123</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>341</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>108</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прочие доходы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2340</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>123</f> + </c> + </c> + <c> + <c> + <f>123</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>342</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>121</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прочие доходы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>112</f> + <parameter>Код22</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П22_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П22_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П22_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>343</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>121</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прочие расходы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>76</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2350</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П2350_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П2350_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П2350_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>344</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>108</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Текущий налог на прибыль</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2410</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П23_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П23_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П23_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>345</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>108</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Постоянные налоговые обязательства (активы)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2421</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>123</f> + </c> + </c> + <c> + <c> + <f>123</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>346</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>108</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Изменение отложенных налоговых обязательств</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2430</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>123</f> + </c> + </c> + <c> + <c> + <f>123</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>347</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>108</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Изменение отложенных налоговых активов</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2450</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>123</f> + </c> + </c> + <c> + <c> + <f>123</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>348</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>108</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прочее</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2460</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>123</f> + </c> + </c> + <c> + <c> + <f>123</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>349</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>121</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Налог на прибыль</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>112</f> + <parameter>Код23</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П23_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П23_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П23_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>350</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>121</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Чистая прибыль (убыток)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>76</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2400</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П2400_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П2400_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П2400_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>353</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>12</f> + </c> + </c> + <c> + <c> + <f>13</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Бухгалтерская отчетность СО НКО</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>354</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>12</f> + </c> + </c> + <c> + <c> + <f>17</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Бухгалтерский баланс</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>355</index> + <row> + <formatIndex>16</formatIndex> + <c> + <i>1</i> + <c> + <f>49</f> + <parameter>ВалютаОтчетности</parameter> + </c> + </c> + <c> + <c> + <f>19</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>20</f> + <parameter>Год_1</parameter> + </c> + </c> + <c> + <c> + <f>21</f> + <parameter>Год_2</parameter> + </c> + </c> + <c> + <c> + <f>21</f> + <parameter>Год_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>356</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>106</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Актив</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>107</f> + </c> + </c> + <c> + <c> + <f>108</f> + </c> + </c> + <c> + <c> + <f>109</f> + </c> + </c> + <c> + <c> + <f>109</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>357</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Материальные поисковые активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1140</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П11_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П11_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П11_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>358</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Основные средства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1150</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>359</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Доходные вложения в материальные ценности</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1160</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>360</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Материальные внеоборотные активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>124</f> + <parameter>Код11</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П11_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П11_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П11_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>361</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Нематериальные активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1110</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П12_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П12_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П12_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>362</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Результаты исследований и разработок</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1120</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>363</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Нематериальные поисковые активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1130</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>364</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Финансовые вложения</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1170</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>365</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отложенные налоговые активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1180</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>366</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прочие внеоборотные активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1190</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>367</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Нематериальные, финансовые и другие внеоборотные активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>124</f> + <parameter>Код12</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П12_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П12_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П12_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>368</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Денежные средства и денежные эквиваленты</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>76</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1250</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П1250_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П1250_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П1250_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>369</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Запасы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>125</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1210</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П13_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П13_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П13_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>370</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Налог на добавленную стоимость по приобретенным ценностям</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1220</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>123</f> + </c> + </c> + <c> + <c> + <f>123</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>371</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дебиторская задолженность</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1230</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>123</f> + </c> + </c> + <c> + <c> + <f>123</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>372</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Финансовые вложения (за исключением денежных эквивалентов)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1240</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>123</f> + </c> + </c> + <c> + <c> + <f>123</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>373</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прочие оборотные активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1260</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>123</f> + </c> + </c> + <c> + <c> + <f>123</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>374</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Другие оборотные активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>124</f> + <parameter>Код13</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П13_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П13_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П13_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>375</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>БАЛАНС</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1600</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П1600_1</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П1600_2</parameter> + </c> + </c> + <c> + <c> + <f>110</f> + <parameter>П1600_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>376</index> + <row> + <formatIndex>45</formatIndex> + <c> + <i>1</i> + <c> + <f>126</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>377</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Пассив</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>108</f> + </c> + </c> + <c> + <c> + <f>108</f> + </c> + </c> + <c> + <c> + <f>108</f> + </c> + </c> + <c> + <c> + <f>108</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>378</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уставный капитал (складочный капитал, уставный фонд, вклады товарищей)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1310</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>122</f> + <parameter>П14_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П14_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П14_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>379</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Собственные акции, выкупленные у акционеров</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1320</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>123</f> + </c> + </c> + <c> + <c> + <f>123</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>380</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Добавочный капитал (без переоценки)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1350</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>123</f> + </c> + </c> + <c> + <c> + <f>123</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>381</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Целевые средства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>127</f> + <parameter>Код14</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П14_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П14_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П14_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>382</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Резервный капитал</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1360</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П15_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П15_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П15_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>383</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Нераспределенная прибыль (непокрытый убыток)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1370</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>123</f> + </c> + </c> + <c> + <c> + <f>123</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>384</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Фонд недвижимого и особо ценного движимого имущества и иные целевые фонды</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>124</f> + <parameter>Код15</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П15_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П15_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П15_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>385</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Долгосрочные заемные средства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1410</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П16_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П16_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П16_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>386</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отложенные налоговые обязательства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1420</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>123</f> + </c> + </c> + <c> + <c> + <f>123</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>387</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Оценочные обязательства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1430</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>123</f> + </c> + </c> + <c> + <c> + <f>123</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>388</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прочие долгосрочные обязательства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1450</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>123</f> + </c> + </c> + <c> + <c> + <f>123</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>389</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Долгосрочные обязательства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>124</f> + <parameter>Код16</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П16_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П16_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П16_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>390</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Кредиторская задолженность</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1520</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П1520_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П1520_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П1520_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>391</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Краткосрочные заемные обязательства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1510</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П17_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П17_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П17_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>392</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Доходы будущих периодов</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1530</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>123</f> + </c> + </c> + <c> + <c> + <f>123</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>393</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Оценочные обязательства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1540</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>123</f> + </c> + </c> + <c> + <c> + <f>123</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>394</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прочие краткосрочные обязательства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1550</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>123</f> + </c> + </c> + <c> + <c> + <f>123</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>395</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Другие краткосрочные обязательства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>124</f> + <parameter>Код17</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П17_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П17_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П17_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>396</index> + <row> + <formatIndex>45</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Баланс</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1700</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П1700_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П1700_2</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П1700_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>397</index> + <row> + <formatIndex>45</formatIndex> + <c> + <i>1</i> + <c> + <f>126</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>398</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>12</f> + </c> + </c> + <c> + <c> + <f>17</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отчет о целевом использовании средств</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>399</index> + <row> + <formatIndex>16</formatIndex> + <c> + <i>1</i> + <c> + <f>49</f> + <parameter>ВалютаОтчетности</parameter> + </c> + </c> + <c> + <c> + <f>19</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Код</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>20</f> + <parameter>Год_1</parameter> + </c> + </c> + <c> + <c> + <f>21</f> + <parameter>Год_2</parameter> + </c> + </c> + <c> + <c> + <f>93</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>400</index> + <row> + <formatIndex>11</formatIndex> + <c> + <i>1</i> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <i>5</i> + <c> + <f>11</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>401</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Остаток средств на начало отчетного года</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6100</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6100_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6100_2</parameter> + </c> + </c> + <c> + <c> + <f>95</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>402</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Поступило средств</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>128</f> + </c> + </c> + <c> + <c> + <f>129</f> + </c> + </c> + <c> + <c> + <f>130</f> + </c> + </c> + <c> + <c> + <f>95</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>403</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Вступительные взносы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6210</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П61_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П61_2</parameter> + </c> + </c> + <c> + <c> + <f>95</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>404</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Членские взносы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6215</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>405</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Целевые взносы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6220</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>406</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>81</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Добровольные имущественные взносы и пожертвования</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6230</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>4</i> + <c> + <f>111</f> + </c> + </c> + <c> + <c> + <f>111</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>407</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Взносы и иные целевые поступления</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>131</f> + <parameter>Код61</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П61_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П61_2</parameter> + </c> + </c> + <c> + <c> + <f>95</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>408</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прибыль от предпринимательской и иной приносящей доход деятельности</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6240</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6240_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6240_2</parameter> + </c> + </c> + <c> + <c> + <f>95</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>409</index> + <row> + <formatIndex>45</formatIndex> + <c> + <i>1</i> + <c> + <f>132</f> + </c> + </c> + <c> + <c> + <f>133</f> + </c> + </c> + <c> + <c> + <f>134</f> + </c> + </c> + <c> + <c> + <f>135</f> + </c> + </c> + <c> + <c> + <f>86</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>410</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>132</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Использовано средств</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>133</f> + </c> + </c> + <c> + <c> + <f>134</f> + </c> + </c> + <c> + <c> + <f>135</f> + </c> + </c> + <c> + <c> + <f>95</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>411</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>На целевые мероприятия</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6310</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6310_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6310_2</parameter> + </c> + </c> + <c> + <c> + <f>95</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>412</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>На содержание организации</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6320</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6320_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6320_2</parameter> + </c> + </c> + <c> + <c> + <f>95</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>413</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>На приобретение основных средств и иного имущества</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6330</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6330_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6330_2</parameter> + </c> + </c> + <c> + <c> + <f>95</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>414</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прочее</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6350</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6350_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6350_2</parameter> + </c> + </c> + <c> + <c> + <f>95</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>415</index> + <row> + <formatIndex>73</formatIndex> + <c> + <c> + <f>74</f> + </c> + </c> + <c> + <c> + <f>94</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Остаток средств на конец отчетного года</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>82</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6400</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6400_1</parameter> + </c> + </c> + <c> + <c> + <f>77</f> + <parameter>П6400_2</parameter> + </c> + </c> + <c> + <c> + <f>95</f> + </c> + </c> + </row> + </rowsItem> + <templateMode>true</templateMode> + <defaultFormatIndex>136</defaultFormatIndex> + <height>417</height> + <vgRows>417</vgRows> + <merge> + <r>0</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>1</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>2</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>3</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>4</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>52</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>80</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>175</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>229</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>252</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>285</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>286</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>289</r> + <c>3</c> + <h>2</h> + </merge> + <merge> + <r>289</r> + <c>4</c> + <h>2</h> + </merge> + <merge> + <r>289</r> + <c>5</c> + <h>2</h> + </merge> + <merge> + <r>293</r> + <c>3</c> + <h>5</h> + </merge> + <merge> + <r>293</r> + <c>4</c> + <h>5</h> + </merge> + <merge> + <r>293</r> + <c>5</c> + <h>5</h> + </merge> + <merge> + <r>302</r> + <c>3</c> + <h>3</h> + </merge> + <merge> + <r>302</r> + <c>4</c> + <h>3</h> + </merge> + <merge> + <r>302</r> + <c>5</c> + <h>3</h> + </merge> + <merge> + <r>310</r> + <c>3</c> + <h>5</h> + </merge> + <merge> + <r>310</r> + <c>4</c> + <h>5</h> + </merge> + <merge> + <r>310</r> + <c>5</c> + <h>5</h> + </merge> + <merge> + <r>318</r> + <c>3</c> + <h>2</h> + </merge> + <merge> + <r>318</r> + <c>4</c> + <h>2</h> + </merge> + <merge> + <r>318</r> + <c>5</c> + <h>2</h> + </merge> + <merge> + <r>324</r> + <c>3</c> + <h>2</h> + </merge> + <merge> + <r>324</r> + <c>4</c> + <h>2</h> + </merge> + <merge> + <r>324</r> + <c>5</c> + <h>2</h> + </merge> + <merge> + <r>330</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>334</r> + <c>3</c> + <h>2</h> + </merge> + <merge> + <r>334</r> + <c>4</c> + <h>2</h> + </merge> + <merge> + <r>334</r> + <c>5</c> + <h>2</h> + </merge> + <merge> + <r>339</r> + <c>3</c> + <h>2</h> + </merge> + <merge> + <r>339</r> + <c>4</c> + <h>2</h> + </merge> + <merge> + <r>339</r> + <c>5</c> + <h>2</h> + </merge> + <merge> + <r>344</r> + <c>3</c> + <h>4</h> + </merge> + <merge> + <r>344</r> + <c>4</c> + <h>4</h> + </merge> + <merge> + <r>344</r> + <c>5</c> + <h>4</h> + </merge> + <merge> + <r>353</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>354</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>357</r> + <c>3</c> + <h>2</h> + </merge> + <merge> + <r>357</r> + <c>4</c> + <h>2</h> + </merge> + <merge> + <r>357</r> + <c>5</c> + <h>2</h> + </merge> + <merge> + <r>361</r> + <c>3</c> + <h>5</h> + </merge> + <merge> + <r>361</r> + <c>4</c> + <h>5</h> + </merge> + <merge> + <r>361</r> + <c>5</c> + <h>5</h> + </merge> + <merge> + <r>369</r> + <c>3</c> + <h>4</h> + </merge> + <merge> + <r>369</r> + <c>4</c> + <h>4</h> + </merge> + <merge> + <r>369</r> + <c>5</c> + <h>4</h> + </merge> + <merge> + <r>378</r> + <c>3</c> + <h>2</h> + </merge> + <merge> + <r>378</r> + <c>4</c> + <h>2</h> + </merge> + <merge> + <r>378</r> + <c>5</c> + <h>2</h> + </merge> + <merge> + <r>382</r> + <c>3</c> + <h>1</h> + </merge> + <merge> + <r>382</r> + <c>4</c> + <h>1</h> + </merge> + <merge> + <r>382</r> + <c>5</c> + <h>1</h> + </merge> + <merge> + <r>385</r> + <c>3</c> + <h>3</h> + </merge> + <merge> + <r>385</r> + <c>4</c> + <h>3</h> + </merge> + <merge> + <r>385</r> + <c>5</c> + <h>3</h> + </merge> + <merge> + <r>391</r> + <c>3</c> + <h>3</h> + </merge> + <merge> + <r>391</r> + <c>4</c> + <h>3</h> + </merge> + <merge> + <r>391</r> + <c>5</c> + <h>3</h> + </merge> + <merge> + <r>398</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>403</r> + <c>3</c> + <h>3</h> + </merge> + <merge> + <r>403</r> + <c>4</c> + <h>3</h> + </merge> + <merge> + <r>403</r> + <c>5</c> + <h>3</h> + </merge> + <namedItem xsi:type="NamedItemCells"> + <name>Баланс</name> + <area> + <type>Rows</type> + <beginRow>5</beginRow> + <endRow>50</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>БалансМП</name> + <area> + <type>Rows</type> + <beginRow>287</beginRow> + <endRow>329</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>БалансМПШапка</name> + <area> + <type>Rows</type> + <beginRow>286</beginRow> + <endRow>286</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>БалансНКО</name> + <area> + <type>Rows</type> + <beginRow>355</beginRow> + <endRow>397</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>БалансНКОШапка</name> + <area> + <type>Rows</type> + <beginRow>354</beginRow> + <endRow>354</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>БалансШапка</name> + <area> + <type>Rows</type> + <beginRow>4</beginRow> + <endRow>4</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ДвижениеДенег</name> + <area> + <type>Rows</type> + <beginRow>176</beginRow> + <endRow>227</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ДвижениеДенегШапка</name> + <area> + <type>Rows</type> + <beginRow>175</beginRow> + <endRow>175</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ИзменениеКапитала</name> + <area> + <type>Rows</type> + <beginRow>81</beginRow> + <endRow>173</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ИзменениеКапиталаШапка</name> + <area> + <type>Rows</type> + <beginRow>80</beginRow> + <endRow>80</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ИспользованиеСредств</name> + <area> + <type>Rows</type> + <beginRow>230</beginRow> + <endRow>250</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ИспользованиеСредствНКО</name> + <area> + <type>Rows</type> + <beginRow>399</beginRow> + <endRow>416</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ИспользованиеСредствНКОШапка</name> + <area> + <type>Rows</type> + <beginRow>398</beginRow> + <endRow>398</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ИспользованиеСредствШапка</name> + <area> + <type>Rows</type> + <beginRow>229</beginRow> + <endRow>229</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ПрибылиУбытки</name> + <area> + <type>Rows</type> + <beginRow>53</beginRow> + <endRow>78</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ПрибылиУбыткиМП</name> + <area> + <type>Rows</type> + <beginRow>331</beginRow> + <endRow>351</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ПрибылиУбыткиМПШапка</name> + <area> + <type>Rows</type> + <beginRow>330</beginRow> + <endRow>330</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ПрибылиУбыткиШапка</name> + <area> + <type>Rows</type> + <beginRow>52</beginRow> + <endRow>52</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ЧистыеАктивы</name> + <area> + <type>Rows</type> + <beginRow>253</beginRow> + <endRow>283</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ЧистыеАктивыШапка</name> + <area> + <type>Rows</type> + <beginRow>252</beginRow> + <endRow>252</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>Шапка</name> + <area> + <type>Rows</type> + <beginRow>0</beginRow> + <endRow>0</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ШапкаКомментарий</name> + <area> + <type>Rows</type> + <beginRow>1</beginRow> + <endRow>1</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ШапкаМП</name> + <area> + <type>Rows</type> + <beginRow>285</beginRow> + <endRow>285</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ШапкаНетОтчетности</name> + <area> + <type>Rows</type> + <beginRow>2</beginRow> + <endRow>3</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ШапкаНКО</name> + <area> + <type>Rows</type> + <beginRow>353</beginRow> + <endRow>353</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <line width="1" gap="false"> + <v8ui:style xsi:type="v8ui:SpreadsheetDocumentCellLineType">Solid</v8ui:style> + </line> + <font faceName="Arial" height="18" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="12" bold="true" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="8" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="9" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="11" bold="true" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="10" bold="true" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="12" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="11" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="8" bold="true" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <format> + <width>22</width> + <protection>true</protection> + </format> + <format> + <width>376</width> + <protection>true</protection> + </format> + <format> + <width>80</width> + <protection>true</protection> + </format> + <format> + <width>112</width> + <protection>true</protection> + </format> + <format> + <width>26</width> + <protection>true</protection> + </format> + <format> + <width>350</width> + <protection>true</protection> + </format> + <format> + <width>79</width> + <protection>true</protection> + </format> + <format> + <width>113</width> + <protection>true</protection> + </format> + <format> + <width>24</width> + <protection>true</protection> + </format> + <format> + <width>326</width> + <protection>true</protection> + </format> + <format> + <protection>true</protection> + </format> + <format> + <font>0</font> + <protection>true</protection> + </format> + <format> + <font>1</font> + <verticalAlignment>Center</verticalAlignment> + <protection>true</protection> + </format> + <format> + <font>2</font> + <protection>true</protection> + </format> + <format> + <font>2</font> + <verticalAlignment>Top</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <textPlacement>Wrap</textPlacement> + <protection>true</protection> + </format> + <format> + <font>3</font> + <protection>true</protection> + </format> + <format> + <font>4</font> + <verticalAlignment>Center</verticalAlignment> + <protection>true</protection> + </format> + <format> + <font>5</font> + <height>138</height> + <width>346</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <fillType>Parameter</fillType> + <protection>true</protection> + <bySelectedColumns>true</bySelectedColumns> + </format> + <format> + <font>6</font> + <height>138</height> + <width>51</width> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <fillType>Text</fillType> + <protection>true</protection> + </format> + <format> + <font>6</font> + <horizontalAlignment>Right</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <fillType>Parameter</fillType> + <protection>true</protection> + </format> + <format> + <font>6</font> + <width>99</width> + <horizontalAlignment>Right</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <fillType>Parameter</fillType> + <protection>true</protection> + </format> + <format> + <font>7</font> + <protection>true</protection> + </format> + <format> + <font>6</font> + <height>78</height> + <width>346</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + <protection>true</protection> + </format> + <format> + <font>8</font> + <height>78</height> + <width>51</width> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <fillType>Text</fillType> + <protection>true</protection> + </format> + <format> + <font>8</font> + <verticalAlignment>Center</verticalAlignment> + <protection>true</protection> + </format> + <format> + <font>8</font> + <width>99</width> + <verticalAlignment>Center</verticalAlignment> + <protection>true</protection> + </format> + <format> + <font>6</font> + <height>0</height> + <width>346</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + <protection>true</protection> + <bySelectedColumns>true</bySelectedColumns> + </format> + <format> + <font>8</font> + <height>0</height> + <width>51</width> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <fillType>Text</fillType> + <protection>true</protection> + </format> + <format> + <font>9</font> + <protection>true</protection> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>26</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + <protection>true</protection> + <bySelectedColumns>true</bySelectedColumns> + <indent>0</indent> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>51</width> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <fillType>Text</fillType> + <protection>true</protection> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>51</width> + <horizontalAlignment>Right</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Parameter</fillType> + <protection>true</protection> + <markNegatives>true</markNegatives> + <format> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧН=0</v8:content> + </v8:item> + </format> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>346</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + <protection>true</protection> + <bySelectedColumns>true</bySelectedColumns> + </format> + <format> + <font>6</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>346</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + <protection>true</protection> + </format> + <format> + <font>8</font> + <height>0</height> + <width>51</width> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <fillType>Text</fillType> + <protection>true</protection> + </format> + <format> + <font>8</font> + <height>0</height> + <width>51</width> + <horizontalAlignment>Right</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + <protection>true</protection> + <markNegatives>true</markNegatives> + <format> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧН=0</v8:content> + </v8:item> + </format> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>346</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + <protection>true</protection> + </format> + <format> + <font>6</font> + <height>75</height> + <width>346</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + <protection>true</protection> + </format> + <format> + <font>8</font> + <height>75</height> + <width>51</width> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <fillType>Text</fillType> + <protection>true</protection> + </format> + <format> + <font>8</font> + <height>75</height> + <width>51</width> + <horizontalAlignment>Right</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + <protection>true</protection> + </format> + <format> + <font>8</font> + <height>0</height> + <width>51</width> + <horizontalAlignment>Right</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + <protection>true</protection> + </format> + <format> + <font>6</font> + <height>0</height> + <width>346</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + <protection>true</protection> + </format> + <format> + <font>10</font> + <height>78</height> + <width>346</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <protection>true</protection> + </format> + <format> + <font>2</font> + <height>78</height> + <width>51</width> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <protection>true</protection> + </format> + <format> + <verticalAlignment>Center</verticalAlignment> + <protection>true</protection> + </format> + <format> + <font>2</font> + <width>99</width> + <verticalAlignment>Center</verticalAlignment> + <protection>true</protection> + </format> + <format> + <width>99</width> + <protection>true</protection> + </format> + <format> + <height>0</height> + <protection>true</protection> + </format> + <format> + <font>8</font> + <height>138</height> + <width>346</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <fillType>Parameter</fillType> + <protection>true</protection> + <bySelectedColumns>true</bySelectedColumns> + </format> + <format> + <font>6</font> + <horizontalAlignment>Right</horizontalAlignment> + <fillType>Parameter</fillType> + <protection>true</protection> + </format> + <format> + <font>6</font> + <width>99</width> + <horizontalAlignment>Right</horizontalAlignment> + <fillType>Parameter</fillType> + <protection>true</protection> + </format> + <format> + <font>2</font> + <width>361</width> + <protection>true</protection> + </format> + <format> + <font>2</font> + <width>72</width> + <protection>true</protection> + </format> + <format> + <font>2</font> + <width>99</width> + <protection>true</protection> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>24</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Top</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + <protection>true</protection> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>24</width> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <fillType>Text</fillType> + <protection>true</protection> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>24</width> + <horizontalAlignment>Right</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <fillType>Parameter</fillType> + <protection>true</protection> + <markNegatives>true</markNegatives> + <format> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧН=0</v8:content> + </v8:item> + </format> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>24</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + <protection>true</protection> + <bySelectedColumns>true</bySelectedColumns> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>24</width> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + <protection>true</protection> + </format> + <format> + <font>6</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>24</width> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + <protection>true</protection> + </format> + <format> + <font>6</font> + <height>75</height> + <width>16</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Top</verticalAlignment> + <fillType>Text</fillType> + <protection>true</protection> + </format> + <format> + <font>6</font> + <height>75</height> + <width>355</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Top</verticalAlignment> + <fillType>Text</fillType> + <protection>true</protection> + </format> + <format> + <font>8</font> + <protection>true</protection> + </format> + <format> + <font>8</font> + <width>99</width> + <protection>true</protection> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <height>219</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>24</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Bottom</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + <protection>true</protection> + <bySelectedColumns>true</bySelectedColumns> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <height>219</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>24</width> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <fillType>Text</fillType> + <protection>true</protection> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <height>219</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>24</width> + <horizontalAlignment>Right</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <fillType>Parameter</fillType> + <protection>true</protection> + <markNegatives>true</markNegatives> + <format> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧН=0</v8:content> + </v8:item> + </format> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <height>81</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>24</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Bottom</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + <protection>true</protection> + <bySelectedColumns>true</bySelectedColumns> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <height>81</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>24</width> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <fillType>Text</fillType> + <protection>true</protection> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <height>81</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>24</width> + <horizontalAlignment>Right</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <fillType>Parameter</fillType> + <protection>true</protection> + <markNegatives>true</markNegatives> + <format> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧН=0</v8:content> + </v8:item> + </format> + </format> + <format> + <font>8</font> + <height>138</height> + <width>51</width> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <protection>true</protection> + </format> + <format> + <font>6</font> + <width>112</width> + <horizontalAlignment>Right</horizontalAlignment> + <fillType>Parameter</fillType> + <protection>true</protection> + </format> + <format> + <font>3</font> + <verticalAlignment>Center</verticalAlignment> + <protection>true</protection> + </format> + <format> + <font>7</font> + <verticalAlignment>Center</verticalAlignment> + <protection>true</protection> + </format> + <format> + <font>6</font> + <bottomBorder>0</bottomBorder> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + <protection>true</protection> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>80</width> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <protection>true</protection> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>112</width> + <horizontalAlignment>Right</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <fillType>Parameter</fillType> + <protection>true</protection> + <format> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧН=0</v8:content> + </v8:item> + </format> + </format> + <format> + <font>8</font> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <protection>true</protection> + </format> + <format> + <font>8</font> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <protection>true</protection> + </format> + <format> + <font>8</font> + <width>112</width> + <horizontalAlignment>Right</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <protection>true</protection> + <format> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧН=0</v8:content> + </v8:item> + </format> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <protection>true</protection> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <protection>true</protection> + </format> + <format> + <font>10</font> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <protection>true</protection> + </format> + <format> + <horizontalAlignment>Center</horizontalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <protection>true</protection> + </format> + <format> + <horizontalAlignment>Right</horizontalAlignment> + <protection>true</protection> + <format> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧН=0</v8:content> + </v8:item> + </format> + </format> + <format> + <width>112</width> + <horizontalAlignment>Right</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <protection>true</protection> + <format> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧН=0</v8:content> + </v8:item> + </format> + </format> + <format> + <font>3</font> + <width>0</width> + <verticalAlignment>Center</verticalAlignment> + <protection>true</protection> + </format> + <format> + <width>4</width> + <verticalAlignment>Center</verticalAlignment> + <protection>true</protection> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>326</width> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <protection>true</protection> + </format> + <format> + <width>4</width> + <protection>true</protection> + </format> + <format> + <font>6</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>26</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + <protection>true</protection> + <bySelectedColumns>true</bySelectedColumns> + <indent>0</indent> + </format> + <format> + <font>6</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>346</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + <protection>true</protection> + <bySelectedColumns>true</bySelectedColumns> + </format> + <format> + <font>3</font> + <width>99</width> + <horizontalAlignment>Right</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <protection>true</protection> + </format> + <format> + <font>6</font> + <bottomBorder>0</bottomBorder> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <protection>true</protection> + </format> + <format> + <font>3</font> + <width>112</width> + <horizontalAlignment>Right</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <protection>true</protection> + <format> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧН=0</v8:content> + </v8:item> + </format> + </format> + <format> + <font>6</font> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <protection>true</protection> + </format> + <format> + <font>8</font> + <horizontalAlignment>Center</horizontalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <protection>true</protection> + </format> + <format> + <font>8</font> + <horizontalAlignment>Right</horizontalAlignment> + <protection>true</protection> + <format> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧН=0</v8:content> + </v8:item> + </format> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>280</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <protection>true</protection> + <indent>1</indent> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>120</width> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <fillType>Text</fillType> + <protection>true</protection> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>280</width> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <protection>true</protection> + <indent>1</indent> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>104</width> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <fillType>Text</fillType> + <protection>true</protection> + </format> + <format> + <font>6</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>280</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <protection>true</protection> + <indent>1</indent> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>104</width> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <protection>true</protection> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>120</width> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <protection>true</protection> + </format> + <format> + <font>6</font> + <bottomBorder>0</bottomBorder> + <height>78</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>346</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + <protection>true</protection> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <height>78</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>51</width> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <fillType>Text</fillType> + <protection>true</protection> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <verticalAlignment>Center</verticalAlignment> + <protection>true</protection> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>99</width> + <verticalAlignment>Center</verticalAlignment> + <protection>true</protection> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>80</width> + <horizontalAlignment>Right</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <fillType>Parameter</fillType> + <protection>true</protection> + <format> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧН=0</v8:content> + </v8:item> + </format> + </format> + <format> + <font>3</font> + <width>112</width> + <verticalAlignment>Center</verticalAlignment> + <protection>true</protection> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>80</width> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <fillType>Parameter</fillType> + <protection>true</protection> + </format> + <format> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <protection>true</protection> + </format> + <format> + <horizontalAlignment>Right</horizontalAlignment> + <protection>true</protection> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <protection>true</protection> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <horizontalAlignment>Right</horizontalAlignment> + <protection>true</protection> + </format> + <format> + <font>2</font> + <verticalAlignment>Center</verticalAlignment> + <protection>true</protection> + </format> + <format> + <font>2</font> + <width>361</width> + <verticalAlignment>Center</verticalAlignment> + <protection>true</protection> + </format> + <format> + <font>2</font> + <width>72</width> + <verticalAlignment>Center</verticalAlignment> + <protection>true</protection> + </format> + <format> + <font>2</font> + <width>99</width> + <horizontalAlignment>Right</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <protection>true</protection> + </format> + <format> + <font>6</font> + <bottomBorder>0</bottomBorder> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <verticalAlignment>Center</verticalAlignment> + <protection>true</protection> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <horizontalAlignment>Right</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <fillType>Parameter</fillType> + <protection>true</protection> + <format> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧН=0</v8:content> + </v8:item> + </format> + </format> + <format> + <width>112</width> + <verticalAlignment>Center</verticalAlignment> + <protection>true</protection> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>80</width> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <textPlacement>Auto</textPlacement> + <fillType>Parameter</fillType> + <protection>true</protection> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>80</width> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <textPlacement>Auto</textPlacement> + <fillType>Text</fillType> + <protection>true</protection> + </format> + <format> + <textPlacement>Wrap</textPlacement> + <protection>true</protection> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <textPlacement>Auto</textPlacement> + <fillType>Parameter</fillType> + <protection>true</protection> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <horizontalAlignment>Center</horizontalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <protection>true</protection> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <horizontalAlignment>Right</horizontalAlignment> + <protection>true</protection> + <format> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧН=0</v8:content> + </v8:item> + </format> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>112</width> + <horizontalAlignment>Right</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <protection>true</protection> + <format> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧН=0</v8:content> + </v8:item> + </format> + </format> + <format> + <font>8</font> + <bottomBorder>0</bottomBorder> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <fillType>Parameter</fillType> + <protection>true</protection> + </format> + <format> + <font>6</font> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <protection>true</protection> + </format> + <format> + <font>8</font> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <horizontalAlignment>Center</horizontalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <protection>true</protection> + </format> + <format> + <font>8</font> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <horizontalAlignment>Right</horizontalAlignment> + <protection>true</protection> + <format> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧН=0</v8:content> + </v8:item> + </format> + </format> + <format> + <font>8</font> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>112</width> + <horizontalAlignment>Right</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <protection>true</protection> + <format> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧН=0</v8:content> + </v8:item> + </format> + </format> + <format> + <width>72</width> + <protection>true</protection> + </format> +</document> \ 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..2c7a8d15a --- /dev/null +++ b/SSL/src/Reports/ДосьеКонтрагента/Templates/Главное/Template.mxlx @@ -0,0 +1,1410 @@ +<?xml version="1.0" encoding="UTF-8"?> +<document xmlns="http://v8.1c.ru/8.2/data/spreadsheet" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <languageSettings> + <currentLanguage>ru</currentLanguage> + <defaultLanguage>ru</defaultLanguage> + <languageInfo> + <id>ru</id> + <code>Русский</code> + <description>Русский</description> + </languageInfo> + </languageSettings> + <columns> + <size>9</size> + <columnsItem> + <index>0</index> + <column> + <formatIndex>1</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>1</index> + <column> + <formatIndex>2</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>2</index> + <column> + <formatIndex>3</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>3</index> + <column> + <formatIndex>3</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>4</index> + <column> + <formatIndex>3</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>5</index> + <column> + <formatIndex>3</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>6</index> + <column> + <formatIndex>3</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>7</index> + <column> + <formatIndex>3</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>8</index> + <column> + <formatIndex>3</formatIndex> + </column> + </columnsItem> + </columns> + <columns> + <id>666b9cba-f406-41fc-aac7-699534f6f0ca</id> + <size>11</size> + <columnsItem> + <index>0</index> + <column> + <formatIndex>4</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>8</index> + <column> + <formatIndex>5</formatIndex> + </column> + </columnsItem> + </columns> + <columns> + <id>1e87157b-3893-421b-bcfa-bbafa70892ac</id> + <size>8</size> + <columnsItem> + <index>0</index> + <column> + <formatIndex>1</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>1</index> + <column> + <formatIndex>2</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>2</index> + <column> + <formatIndex>6</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>3</index> + <column> + <formatIndex>7</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>4</index> + <column> + <formatIndex>3</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>5</index> + <column> + <formatIndex>3</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>6</index> + <column> + <formatIndex>3</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>7</index> + <column> + <formatIndex>8</formatIndex> + </column> + </columnsItem> + </columns> + <rowsItem> + <index>0</index> + <row> + <columnsID>666b9cba-f406-41fc-aac7-699534f6f0ca</columnsID> + <c> + <c> + <f>9</f> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Главное</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>1</index> + <row> + <columnsID>666b9cba-f406-41fc-aac7-699534f6f0ca</columnsID> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>12</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Основные данные для оценки надежности</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>2</index> + <row> + <c> + <c> + <f>1</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>3</index> + <row> + <formatIndex>13</formatIndex> + <c> + <c> + <f>14</f> + </c> + </c> + <c> + <c> + <f>13</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Наименование</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>15</f> + <parameter>НаименованиеСокращенное</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>4</index> + <row> + <formatIndex>13</formatIndex> + <c> + <c> + <f>14</f> + </c> + </c> + <c> + <c> + <f>13</f> + <tl/> + </c> + </c> + <c> + <c> + <f>16</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ИНН [ИНН] КПП [КПП]</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>5</index> + <row> + <formatIndex>13</formatIndex> + <c> + <c> + <f>14</f> + </c> + </c> + <c> + <c> + <f>13</f> + </c> + </c> + <c> + <c> + <f>17</f> + <parameter>ДействующаяОрганизация</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>6</index> + <row> + <formatIndex>13</formatIndex> + <c> + <c> + <f>14</f> + </c> + </c> + <c> + <c> + <f>13</f> + <tl/> + </c> + </c> + <c> + <c> + <f>18</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дата регистрации: [ДатаРегистрации]</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>7</index> + <row> + <formatIndex>19</formatIndex> + <c> + <c> + <f>20</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>8</index> + <row> + <formatIndex>13</formatIndex> + <c> + <c> + <f>14</f> + </c> + </c> + <c> + <c> + <f>13</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Юридический адрес</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>15</f> + <parameter>ЮридическийАдрес</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>9</index> + <row> + <formatIndex>19</formatIndex> + <c> + <c> + <f>20</f> + </c> + </c> + <c> + <i>2</i> + <c> + <f>21</f> + <parameter>ОрганизацииПоЭтомуАдресу</parameter> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>10</index> + <row> + <formatIndex>19</formatIndex> + <c> + <c> + <f>20</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>11</index> + <row> + <formatIndex>19</formatIndex> + <c> + <c> + <f>14</f> + </c> + </c> + <c> + <c> + <f>13</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Руководитель</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>23</f> + <parameter>Руководитель</parameter> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>12</index> + <row> + <formatIndex>19</formatIndex> + <c> + <c> + <f>20</f> + </c> + </c> + <c> + <i>2</i> + <c> + <f>21</f> + <parameter>ИнформацияОРуководителе</parameter> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>13</index> + <row> + <formatIndex>19</formatIndex> + <c> + <c> + <f>20</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>14</index> + <row> + <formatIndex>19</formatIndex> + <c> + <c> + <f>14</f> + </c> + </c> + <c> + <c> + <f>13</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уставный капитал</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>23</f> + <parameter>УставныйКапитал</parameter> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>15</index> + <row> + <formatIndex>24</formatIndex> + <c> + <c> + <f>25</f> + </c> + </c> + <c> + <c> + <f>24</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>16</index> + <row> + <formatIndex>19</formatIndex> + <c> + <c> + <f>20</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>17</index> + <row> + <formatIndex>19</formatIndex> + <c> + <c> + <f>14</f> + </c> + </c> + <c> + <c> + <f>13</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Бухгалтерская отчетность</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>21</f> + <parameter>НаличиеБухгалтерскойОтчетности</parameter> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>18</index> + <row> + <formatIndex>24</formatIndex> + <c> + <c> + <f>25</f> + </c> + </c> + <c> + <c> + <f>24</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>19</index> + <row> + <formatIndex>19</formatIndex> + <c> + <c> + <f>20</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>20</index> + <row> + <columnsID>1e87157b-3893-421b-bcfa-bbafa70892ac</columnsID> + <formatIndex>19</formatIndex> + <c> + <c> + <f>13</f> + </c> + </c> + <c> + <c> + <f>26</f> + <parameter>АнализОтчетностиЗаголовок</parameter> + </c> + </c> + <c> + <c> + <f>27</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Продажи</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>28</f> + <parameter>Продажи</parameter> + </c> + </c> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>29</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>21</index> + <row> + <columnsID>1e87157b-3893-421b-bcfa-bbafa70892ac</columnsID> + <formatIndex>19</formatIndex> + <c> + <i>1</i> + <c> + <f>30</f> + <parameter>АнализОтчетностиВалюта</parameter> + </c> + </c> + <c> + <c> + <f>27</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прибыль</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>28</f> + <parameter>Прибыль</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>22</index> + <row> + <columnsID>1e87157b-3893-421b-bcfa-bbafa70892ac</columnsID> + <formatIndex>19</formatIndex> + <c> + <i>2</i> + <c> + <f>27</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Чистые активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>28</f> + <parameter>ЧистыеАктивы</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>23</index> + <row> + <c> + <c> + <f>1</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>24</index> + <row> + <formatIndex>19</formatIndex> + <c> + <c> + <f>14</f> + </c> + </c> + <c> + <c> + <f>13</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Оценка риска банкротства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>21</f> + <parameter>ПояснениеОценкиРискБанкротства</parameter> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>25</index> + <row> + <formatIndex>19</formatIndex> + <c> + <c> + <f>20</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>26</index> + <row> + <formatIndex>19</formatIndex> + <c> + <c> + <f>14</f> + </c> + </c> + <c> + <c> + <f>13</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Кредитоспособность</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>21</f> + <parameter>ПояснениеОценкиКредитоспособность</parameter> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>27</index> + <row> + <formatIndex>24</formatIndex> + <c> + <c> + <f>25</f> + </c> + </c> + <c> + <c> + <f>24</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>29</index> + <row> + <formatIndex>19</formatIndex> + <c> + <c> + <f>14</f> + </c> + </c> + <c> + <c> + <f>13</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Проверки гос. органами</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>21</f> + <parameter>РезультатыПроверок</parameter> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>30</index> + <row> + <formatIndex>24</formatIndex> + <c> + <c> + <f>25</f> + </c> + </c> + <c> + <c> + <f>24</f> + </c> + </c> + </row> + </rowsItem> + <drawing> + <drawingType>Picture</drawingType> + <id>8</id> + <formatIndex>32</formatIndex> + <beginRow>22</beginRow> + <beginRowOffset>0</beginRowOffset> + <endRow>22</endRow> + <endRowOffset>48</endRowOffset> + <beginColumn>4</beginColumn> + <beginColumnOffset>9</beginColumnOffset> + <endColumn>4</endColumn> + <endColumnOffset>57</endColumnOffset> + <autoSize>false</autoSize> + <pictureSize>RealSize</pictureSize> + <zOrder>0</zOrder> + <pictureIndex>1</pictureIndex> + </drawing> + <drawing> + <drawingType>Picture</drawingType> + <id>9</id> + <formatIndex>32</formatIndex> + <beginRow>20</beginRow> + <beginRowOffset>60</beginRowOffset> + <endRow>21</endRow> + <endRowOffset>45</endRowOffset> + <beginColumn>4</beginColumn> + <beginColumnOffset>9</beginColumnOffset> + <endColumn>4</endColumn> + <endColumnOffset>57</endColumnOffset> + <autoSize>false</autoSize> + <pictureSize>RealSize</pictureSize> + <zOrder>0</zOrder> + <pictureIndex>1</pictureIndex> + </drawing> + <drawing> + <drawingType>Picture</drawingType> + <id>10</id> + <formatIndex>32</formatIndex> + <beginRow>20</beginRow> + <beginRowOffset>0</beginRowOffset> + <endRow>20</endRow> + <endRowOffset>48</endRowOffset> + <beginColumn>4</beginColumn> + <beginColumnOffset>9</beginColumnOffset> + <endColumn>4</endColumn> + <endColumnOffset>57</endColumnOffset> + <autoSize>false</autoSize> + <pictureSize>RealSize</pictureSize> + <zOrder>0</zOrder> + <pictureIndex>1</pictureIndex> + </drawing> + <templateMode>true</templateMode> + <defaultFormatIndex>33</defaultFormatIndex> + <height>31</height> + <vgRows>31</vgRows> + <merge> + <r>0</r> + <c>1</c> + <w>9</w> + </merge> + <merge> + <r>1</r> + <c>1</c> + <w>9</w> + </merge> + <merge> + <r>3</r> + <c>2</c> + <w>6</w> + </merge> + <merge> + <r>4</r> + <c>2</c> + <w>6</w> + </merge> + <merge> + <r>5</r> + <c>2</c> + <w>6</w> + </merge> + <merge> + <r>6</r> + <c>2</c> + <w>6</w> + </merge> + <merge> + <r>8</r> + <c>2</c> + <w>6</w> + </merge> + <merge> + <r>9</r> + <c>2</c> + <w>6</w> + </merge> + <merge> + <r>11</r> + <c>2</c> + <w>6</w> + </merge> + <merge> + <r>12</r> + <c>2</c> + <w>6</w> + </merge> + <merge> + <r>14</r> + <c>2</c> + <w>6</w> + </merge> + <merge> + <r>17</r> + <c>2</c> + <w>6</w> + </merge> + <merge> + <r>24</r> + <c>2</c> + <w>6</w> + </merge> + <merge> + <r>26</r> + <c>2</c> + <w>6</w> + </merge> + <merge> + <r>29</r> + <c>2</c> + <w>6</w> + </merge> + <namedItem xsi:type="NamedItemCells"> + <name>АнализОтчетности</name> + <area> + <type>Rows</type> + <beginRow>20</beginRow> + <endRow>23</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>БухгалтерскаяОтчетность</name> + <area> + <type>Rows</type> + <beginRow>17</beginRow> + <endRow>18</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ДействующаяОрганизация</name> + <area> + <type>Rectangle</type> + <beginRow>5</beginRow> + <endRow>5</endRow> + <beginColumn>2</beginColumn> + <endColumn>8</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ЕГРЮЛ</name> + <area> + <type>Rows</type> + <beginRow>3</beginRow> + <endRow>15</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemDrawing"> + <name>КартинкаПрибыль_1</name> + <drawingID>9</drawingID> + </namedItem> + <namedItem xsi:type="NamedItemDrawing"> + <name>КартинкаПродажи_1</name> + <drawingID>10</drawingID> + </namedItem> + <namedItem xsi:type="NamedItemDrawing"> + <name>КартинкаЧистыеАктивы_1</name> + <drawingID>8</drawingID> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>РезультатыПроверок</name> + <area> + <type>Rows</type> + <beginRow>29</beginRow> + <endRow>30</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ФинансовыйАнализ</name> + <area> + <type>Rows</type> + <beginRow>24</beginRow> + <endRow>27</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>Шапка</name> + <area> + <type>Rows</type> + <beginRow>0</beginRow> + <endRow>1</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + <columnsID>666b9cba-f406-41fc-aac7-699534f6f0ca</columnsID> + </area> + </namedItem> + <line width="1" gap="false"> + <v8ui:style xsi:type="v8ui:SpreadsheetDocumentDrawingLineType">None</v8ui:style> + </line> + <font faceName="Arial" height="18" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="12" bold="true" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="16" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="8" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <format> + <width>22</width> + </format> + <format> + <width>208</width> + </format> + <format> + <width>80</width> + </format> + <format> + <width>21</width> + </format> + <format> + <width>120</width> + </format> + <format> + <width>128</width> + </format> + <format> + <width>104</width> + </format> + <format> + <width>88</width> + </format> + <format> + <font>0</font> + <width>21</width> + </format> + <format> + <font>1</font> + <verticalAlignment>Center</verticalAlignment> + </format> + <format> + <font>2</font> + <width>21</width> + </format> + <format> + <verticalAlignment>Top</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + </format> + <format> + <font>3</font> + <verticalAlignment>Top</verticalAlignment> + </format> + <format> + <font>3</font> + <width>22</width> + <verticalAlignment>Top</verticalAlignment> + </format> + <format> + <font>4</font> + <verticalAlignment>Top</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Parameter</fillType> + </format> + <format> + <font>4</font> + <verticalAlignment>Top</verticalAlignment> + <fillType>Template</fillType> + </format> + <format> + <font>3</font> + <verticalAlignment>Top</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Parameter</fillType> + </format> + <format> + <font>3</font> + <verticalAlignment>Top</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Template</fillType> + </format> + <format> + <verticalAlignment>Top</verticalAlignment> + </format> + <format> + <width>22</width> + <verticalAlignment>Top</verticalAlignment> + </format> + <format> + <font>3</font> + <width>72</width> + <verticalAlignment>Top</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Parameter</fillType> + </format> + <format> + <font>3</font> + <width>72</width> + <verticalAlignment>Top</verticalAlignment> + </format> + <format> + <font>4</font> + <width>72</width> + <verticalAlignment>Top</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Parameter</fillType> + </format> + <format> + <font>5</font> + </format> + <format> + <font>5</font> + <width>22</width> + </format> + <format> + <font>3</font> + <verticalAlignment>Top</verticalAlignment> + <fillType>Parameter</fillType> + </format> + <format> + <font>3</font> + <width>72</width> + <verticalAlignment>Top</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + </format> + <format> + <font>3</font> + <width>72</width> + <horizontalAlignment>Right</horizontalAlignment> + <verticalAlignment>Top</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Parameter</fillType> + <markNegatives>true</markNegatives> + <format> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧН=0</v8:content> + </v8:item> + </format> + </format> + <format> + <font>3</font> + <width>72</width> + <verticalAlignment>Top</verticalAlignment> + <textPlacement>Wrap</textPlacement> + </format> + <format> + <font>5</font> + <width>187</width> + <verticalAlignment>Center</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <fillType>Parameter</fillType> + </format> + <format> + <font>3</font> + </format> + <format> + <drawingBorder>0</drawingBorder> + </format> + <format> + <width>72</width> + </format> + <picture> + <index>0</index> + <picture ref="v8ui:ДосьеУвеличениеПоказателя"/> + </picture> +</document> \ No newline at end of file diff --git a/SSL/src/Reports/ДосьеКонтрагента/Templates/Макет/Template.mxlx b/SSL/src/Reports/ДосьеКонтрагента/Templates/ДанныеГосРеестров/Template.mxlx similarity index 79% rename from SSL/src/Reports/ДосьеКонтрагента/Templates/Макет/Template.mxlx rename to SSL/src/Reports/ДосьеКонтрагента/Templates/ДанныеГосРеестров/Template.mxlx index abc33f61d..a7b2afe7d 100644 --- a/SSL/src/Reports/ДосьеКонтрагента/Templates/Макет/Template.mxlx +++ b/SSL/src/Reports/ДосьеКонтрагента/Templates/ДанныеГосРеестров/Template.mxlx @@ -10,7 +10,7 @@ </languageInfo> </languageSettings> <columns> - <size>9</size> + <size>10</size> <columnsItem> <index>0</index> <column> @@ -18,25 +18,43 @@ </column> </columnsItem> <columnsItem> - <index>8</index> + <index>1</index> <column> <formatIndex>2</formatIndex> </column> </columnsItem> - </columns> - <columns> - <id>42fbdf9a-63ec-425e-9de0-9eb1ac97b574</id> - <size>1</size> <columnsItem> - <index>0</index> + <index>9</index> <column> <formatIndex>3</formatIndex> </column> </columnsItem> </columns> + <columns> + <id>cb852424-93f1-488f-aea9-b18f93b12e4e</id> + <size>11</size> + <columnsItem> + <index>0</index> + <column> + <formatIndex>1</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>8</index> + <column> + <formatIndex>4</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>10</index> + <column> + <formatIndex>5</formatIndex> + </column> + </columnsItem> + </columns> <columns> <id>fe57ae9e-ae73-4776-bd05-913cd17283da</id> - <size>9</size> + <size>10</size> <columnsItem> <index>0</index> <column> @@ -46,19 +64,31 @@ <columnsItem> <index>1</index> <column> - <formatIndex>4</formatIndex> + <formatIndex>2</formatIndex> </column> </columnsItem> <columnsItem> - <index>8</index> + <index>2</index> <column> - <formatIndex>5</formatIndex> + <formatIndex>3</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>7</index> + <column> + <formatIndex>6</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>9</index> + <column> + <formatIndex>7</formatIndex> </column> </columnsItem> </columns> <columns> <id>28fabb70-5f56-4096-8f9b-5eaabd431556</id> - <size>9</size> + <size>10</size> <columnsItem> <index>0</index> <column> @@ -67,70 +97,26 @@ </columnsItem> <columnsItem> <index>1</index> - <column> - <formatIndex>6</formatIndex> - </column> - </columnsItem> - <columnsItem> - <index>8</index> <column> <formatIndex>2</formatIndex> </column> </columnsItem> - </columns> - <columns> - <id>7bead1f9-0aca-4731-a3cf-56abe96e686e</id> - <size>9</size> <columnsItem> - <index>0</index> - <column> - <formatIndex>1</formatIndex> - </column> - </columnsItem> - <columnsItem> - <index>1</index> - <column> - <formatIndex>6</formatIndex> - </column> - </columnsItem> - <columnsItem> - <index>8</index> - <column> - <formatIndex>2</formatIndex> - </column> - </columnsItem> - </columns> - <columns> - <id>e17a4de9-0b5e-41dd-adec-00d146f6da65</id> - <size>9</size> - <columnsItem> - <index>0</index> - <column> - <formatIndex>1</formatIndex> - </column> - </columnsItem> - <columnsItem> - <index>5</index> - <column> - <formatIndex>7</formatIndex> - </column> - </columnsItem> - <columnsItem> - <index>6</index> + <index>2</index> <column> <formatIndex>8</formatIndex> </column> </columnsItem> <columnsItem> - <index>8</index> + <index>9</index> <column> - <formatIndex>9</formatIndex> + <formatIndex>3</formatIndex> </column> </columnsItem> </columns> <columns> - <id>3e612652-6c5e-40c7-81e3-923eea19e77c</id> - <size>9</size> + <id>7bead1f9-0aca-4731-a3cf-56abe96e686e</id> + <size>10</size> <columnsItem> <index>0</index> <column> @@ -140,24 +126,102 @@ <columnsItem> <index>1</index> <column> - <formatIndex>4</formatIndex> + <formatIndex>2</formatIndex> </column> </columnsItem> <columnsItem> - <index>8</index> + <index>2</index> <column> - <formatIndex>5</formatIndex> + <formatIndex>8</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>9</index> + <column> + <formatIndex>3</formatIndex> + </column> + </columnsItem> + </columns> + <columns> + <id>e17a4de9-0b5e-41dd-adec-00d146f6da65</id> + <size>10</size> + <columnsItem> + <index>0</index> + <column> + <formatIndex>1</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>1</index> + <column> + <formatIndex>2</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>6</index> + <column> + <formatIndex>9</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>7</index> + <column> + <formatIndex>10</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>9</index> + <column> + <formatIndex>11</formatIndex> + </column> + </columnsItem> + </columns> + <columns> + <id>3e612652-6c5e-40c7-81e3-923eea19e77c</id> + <size>10</size> + <columnsItem> + <index>0</index> + <column> + <formatIndex>1</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>1</index> + <column> + <formatIndex>2</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>2</index> + <column> + <formatIndex>3</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>9</index> + <column> + <formatIndex>8</formatIndex> </column> </columnsItem> </columns> <rowsItem> <index>0</index> <row> - <columnsID>42fbdf9a-63ec-425e-9de0-9eb1ac97b574</columnsID> + <columnsID>cb852424-93f1-488f-aea9-b18f93b12e4e</columnsID> <c> <c> - <f>10</f> - <parameter>НаименованиеСокращенное</parameter> + <f>12</f> + </c> + </c> + <c> + <c> + <f>13</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЕГРЮЛ</v8:content> + </v8:item> + </tl> </c> </c> </row> @@ -165,11 +229,21 @@ <rowsItem> <index>1</index> <row> - <columnsID>42fbdf9a-63ec-425e-9de0-9eb1ac97b574</columnsID> + <columnsID>cb852424-93f1-488f-aea9-b18f93b12e4e</columnsID> <c> <c> - <f>11</f> - <parameter>НаименованиеПолное</parameter> + <f>14</f> + </c> + </c> + <c> + <c> + <f>15</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Приведены открытые сведения из Единого государственного реестра юридических лиц</v8:content> + </v8:item> + </tl> </c> </c> </row> @@ -177,10 +251,180 @@ <rowsItem> <index>2</index> <row> - <formatIndex>12</formatIndex> + <columnsID>cb852424-93f1-488f-aea9-b18f93b12e4e</columnsID> + <c> + <c> + <f>12</f> + </c> + </c> <c> <c> <f>13</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЕГРИП</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>3</index> + <row> + <columnsID>cb852424-93f1-488f-aea9-b18f93b12e4e</columnsID> + <c> + <c> + <f>14</f> + </c> + </c> + <c> + <c> + <f>15</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Приведены открытые сведения из Единого государственного реестра индивидуальных предпринимателей</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>4</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>17</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Наименование</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>18</f> + <parameter>НаименованиеСокращенное</parameter> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>5</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>17</f> + <tl/> + </c> + </c> + <c> + <c> + <f>18</f> + <parameter>НаименованиеПолное</parameter> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>6</index> + <row> + <formatIndex>17</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>17</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -191,7 +435,7 @@ </c> <c> <c> - <f>14</f> + <f>20</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -203,77 +447,97 @@ </row> </rowsItem> <rowsItem> - <index>3</index> + <index>7</index> <row> - <formatIndex>12</formatIndex> + <formatIndex>17</formatIndex> <c> <c> - <f>13</f> + <f>17</f> </c> </c> <c> <c> - <f>15</f> + <f>17</f> + </c> + </c> + <c> + <c> + <f>21</f> <parameter>ДействующаяОрганизация</parameter> </c> </c> </row> </rowsItem> <rowsItem> - <index>4</index> + <index>8</index> <row> - <formatIndex>12</formatIndex> + <formatIndex>17</formatIndex> <c> <c> - <f>12</f> + <f>17</f> </c> </c> <c> <c> - <f>16</f> + <f>17</f> + </c> + </c> + <c> + <c> + <f>22</f> <parameter>НедействующаяОрганизация</parameter> </c> </c> </row> </rowsItem> <rowsItem> - <index>5</index> + <index>9</index> <row> <columnsID>fe57ae9e-ae73-4776-bd05-913cd17283da</columnsID> - <formatIndex>12</formatIndex> + <formatIndex>17</formatIndex> <c> <c> - <f>13</f> + <f>17</f> </c> </c> <c> <c> <f>17</f> + </c> + </c> + <c> + <c> + <f>23</f> <parameter>ДатаРегистрации</parameter> </c> </c> <c> <c> - <f>17</f> + <f>23</f> <parameter>ГосударственныйОрган</parameter> </c> </c> <c> - <i>7</i> + <i>8</i> <c> - <f>17</f> + <f>23</f> <parameter>РегистрационныйНомер</parameter> </c> </c> </row> </rowsItem> <rowsItem> - <index>6</index> + <index>10</index> <row> - <formatIndex>12</formatIndex> + <formatIndex>17</formatIndex> <c> <c> - <f>13</f> + <f>17</f> + </c> + </c> + <c> + <c> + <f>17</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -284,7 +548,7 @@ </c> <c> <c> - <f>14</f> + <f>20</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -296,18 +560,23 @@ </row> </rowsItem> <rowsItem> - <index>7</index> + <index>11</index> <row> <columnsID>28fabb70-5f56-4096-8f9b-5eaabd431556</columnsID> - <formatIndex>12</formatIndex> + <formatIndex>17</formatIndex> <c> <c> - <f>18</f> + <f>24</f> </c> </c> <c> <c> - <f>19</f> + <f>24</f> + </c> + </c> + <c> + <c> + <f>25</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -318,48 +587,53 @@ </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>21</f> + <f>26</f> </c> </c> </row> </rowsItem> <rowsItem> - <index>8</index> + <index>12</index> <row> - <formatIndex>12</formatIndex> + <formatIndex>17</formatIndex> <c> <c> - <f>12</f> + <f>17</f> + </c> + </c> + <c> + <c> + <f>17</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -370,7 +644,7 @@ </c> <c> <c> - <f>14</f> + <f>20</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -382,173 +656,18 @@ </row> </rowsItem> <rowsItem> - <index>9</index> + <index>13</index> <row> - <columnsID>28fabb70-5f56-4096-8f9b-5eaabd431556</columnsID> - <formatIndex>12</formatIndex> + <columnsID>7bead1f9-0aca-4731-a3cf-56abe96e686e</columnsID> + <formatIndex>17</formatIndex> <c> <c> - <f>18</f> - <tl> - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Расчетные счета</v8:content> - </v8:item> - </tl> - </c> - </c> - <c> - <c> - <f>22</f> - <parameter>Банк</parameter> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - </row> - </rowsItem> - <rowsItem> - <index>10</index> - <row> - <c> - <i>1</i> - <c> - <f>22</f> - <parameter>Банк</parameter> - <detailParameter>Расшифровка</detailParameter> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - </row> - </rowsItem> - <rowsItem> - <index>11</index> - <row> - <columnsID>28fabb70-5f56-4096-8f9b-5eaabd431556</columnsID> - <formatIndex>12</formatIndex> - <c> - <c> - <f>23</f> + <f>24</f> </c> </c> <c> <c> <f>24</f> - <parameter>БанковскиеРеквизиты</parameter> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - </row> - </rowsItem> - <rowsItem> - <index>12</index> - <row> - <columnsID>7bead1f9-0aca-4731-a3cf-56abe96e686e</columnsID> - <formatIndex>12</formatIndex> - <c> - <c> - <f>25</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -559,26 +678,31 @@ </c> <c> <c> - <f>26</f> + <f>27</f> <parameter>КодОКВЭД</parameter> </c> </c> <c> <c> - <f>27</f> + <f>23</f> <parameter>НаименованиеОКВЭД</parameter> </c> </c> </row> </rowsItem> <rowsItem> - <index>13</index> + <index>14</index> <row> <columnsID>7bead1f9-0aca-4731-a3cf-56abe96e686e</columnsID> - <formatIndex>12</formatIndex> + <formatIndex>17</formatIndex> <c> <c> - <f>23</f> + <f>24</f> + </c> + </c> + <c> + <c> + <f>24</f> </c> </c> <c> @@ -596,13 +720,18 @@ </row> </rowsItem> <rowsItem> - <index>14</index> + <index>15</index> <row> <columnsID>28fabb70-5f56-4096-8f9b-5eaabd431556</columnsID> - <formatIndex>12</formatIndex> + <formatIndex>17</formatIndex> <c> <c> - <f>18</f> + <f>24</f> + </c> + </c> + <c> + <c> + <f>24</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -613,96 +742,43 @@ </c> <c> <c> - <f>22</f> + <f>18</f> <parameter>Лицензия</parameter> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> - </c> - </c> - </row> - </rowsItem> - <rowsItem> - <index>15</index> - <row> - <columnsID>28fabb70-5f56-4096-8f9b-5eaabd431556</columnsID> - <formatIndex>12</formatIndex> - <c> - <c> - <f>23</f> - </c> - </c> - <c> - <c> - <f>22</f> - <parameter>Лицензия</parameter> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> + <f>19</f> </c> </c> </row> @@ -711,51 +787,56 @@ <index>16</index> <row> <columnsID>28fabb70-5f56-4096-8f9b-5eaabd431556</columnsID> - <formatIndex>12</formatIndex> + <formatIndex>17</formatIndex> <c> <c> - <f>23</f> + <f>24</f> </c> </c> <c> <c> - <f>30</f> - <parameter>ОписаниеЛицензии</parameter> + <f>24</f> </c> </c> <c> <c> - <f>20</f> + <f>18</f> + <parameter>Лицензия</parameter> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> </c> </c> </row> @@ -763,10 +844,73 @@ <rowsItem> <index>17</index> <row> - <formatIndex>12</formatIndex> + <columnsID>28fabb70-5f56-4096-8f9b-5eaabd431556</columnsID> + <formatIndex>17</formatIndex> + <c> + <c> + <f>24</f> + </c> + </c> + <c> + <c> + <f>24</f> + </c> + </c> <c> <c> <f>18</f> + <parameter>ОписаниеЛицензии</parameter> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>18</index> + <row> + <formatIndex>17</formatIndex> + <c> + <c> + <f>24</f> + </c> + </c> + <c> + <c> + <f>24</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -777,103 +921,56 @@ </c> <c> <c> - <f>31</f> + <f>30</f> <parameter>ЮридическийАдрес</parameter> </c> </c> </row> </rowsItem> - <rowsItem> - <index>18</index> - <row> - <c> - <i>1</i> - <c> - <f>24</f> - <parameter>СколькоЕщеОрганизаций</parameter> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - </row> - </rowsItem> <rowsItem> <index>19</index> <row> + <formatIndex>16</formatIndex> <c> - <i>1</i> + <i>2</i> <c> - <f>32</f> - <parameter>НаименованиеОрганизации</parameter> - <detailParameter>Расшифровка</detailParameter> + <f>18</f> + <parameter>СколькоЕщеОрганизаций</parameter> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> </row> @@ -881,46 +978,48 @@ <rowsItem> <index>20</index> <row> + <formatIndex>16</formatIndex> <c> - <i>1</i> + <i>2</i> <c> - <f>24</f> + <f>31</f> <parameter>НаименованиеОрганизации</parameter> + <detailParameter>Расшифровка</detailParameter> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> </row> @@ -928,46 +1027,47 @@ <rowsItem> <index>21</index> <row> + <formatIndex>16</formatIndex> <c> - <i>1</i> + <i>2</i> <c> - <f>33</f> - <parameter>НаименованиеСтатуса</parameter> + <f>18</f> + <parameter>НаименованиеОрганизации</parameter> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> </row> @@ -975,57 +1075,47 @@ <rowsItem> <index>22</index> <row> - <formatIndex>12</formatIndex> + <formatIndex>16</formatIndex> <c> + <i>2</i> <c> - <f>18</f> - <tl> - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Почтовый адрес</v8:content> - </v8:item> - </tl> + <f>32</f> + <parameter>НаименованиеСтатуса</parameter> </c> </c> <c> <c> - <f>22</f> - <parameter>ПочтовыйАдрес</parameter> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>34</f> + <f>19</f> </c> </c> </row> @@ -1033,136 +1123,15 @@ <rowsItem> <index>23</index> <row> - <formatIndex>12</formatIndex> + <formatIndex>16</formatIndex> <c> <c> - <f>18</f> - <tl> - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Контакты</v8:content> - </v8:item> - </tl> + <f>17</f> </c> </c> <c> <c> - <f>31</f> - <parameter>КонтактноеЛицо</parameter> - </c> - </c> - </row> - </rowsItem> - <rowsItem> - <index>24</index> - <row> - <c> - <i>1</i> - <c> - <f>24</f> - <parameter>КонтактноеЛицо</parameter> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - </row> - </rowsItem> - <rowsItem> - <index>25</index> - <row> - <c> - <c> - <f>12</f> - <tl> - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Уставный капитал</v8:content> - </v8:item> - </tl> - </c> - </c> - <c> - <c> - <f>22</f> - <parameter>УставныйКапитал</parameter> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - <c> - <c> - <f>20</f> - </c> - </c> - </row> - </rowsItem> - <rowsItem> - <index>26</index> - <row> - <c> - <c> - <f>12</f> + <f>17</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -1173,100 +1142,107 @@ </c> <c> <c> - <f>22</f> + <f>18</f> <parameter>Руководитель</parameter> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> </row> </rowsItem> <rowsItem> - <index>27</index> + <index>24</index> <row> + <formatIndex>16</formatIndex> <c> - <i>1</i> + <i>2</i> <c> - <f>30</f> + <f>18</f> <parameter>ДолжностьРуководителя</parameter> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> </row> </rowsItem> <rowsItem> - <index>28</index> + <index>25</index> <row> + <formatIndex>16</formatIndex> <c> <c> - <f>35</f> + <f>33</f> + </c> + </c> + <c> + <c> + <f>33</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -1277,43 +1253,206 @@ </c> <c> <c> - <f>27</f> + <f>23</f> <parameter>Предприниматель</parameter> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>26</index> + <row> + <formatIndex>16</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>17</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Уставный капитал</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>18</f> + <parameter>УставныйКапитал</parameter> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>27</index> + <row> + <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> + <formatIndex>16</formatIndex> + <c> + <c> + <f>24</f> + </c> + </c> + <c> + <c> + <f>24</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Учредители (участники)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>34</f> + <parameter>Учредитель</parameter> + <detailParameter>Расшифровка</detailParameter> + </c> + </c> + <c> + <i>7</i> + <c> + <f>35</f> + <parameter>ПроцентКапитала</parameter> + </c> + </c> + <c> + <c> + <f>36</f> + <parameter>СуммаКапитала</parameter> + </c> + </c> + <c> + <c> + <f>37</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>28</index> + <row> + <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> + <formatIndex>16</formatIndex> + <c> + <i>2</i> + <c> + <f>34</f> + <parameter>Учредитель</parameter> + <detailParameter>Расшифровка</detailParameter> + </c> + </c> + <c> + <c> + <f>37</f> + </c> + </c> + <c> + <c> + <f>37</f> + </c> + </c> + <c> + <c> + <f>37</f> + </c> + </c> + <c> + <c> + <f>37</f> + </c> + </c> + <c> + <c> + <f>35</f> + <parameter>ПроцентКапитала</parameter> + </c> + </c> + <c> + <c> + <f>36</f> + <parameter>СуммаКапитала</parameter> + </c> + </c> + <c> + <c> + <f>37</f> </c> </c> </row> @@ -1322,9 +1461,15 @@ <index>29</index> <row> <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> + <formatIndex>16</formatIndex> <c> <c> - <f>18</f> + <f>24</f> + </c> + </c> + <c> + <c> + <f>24</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -1335,27 +1480,26 @@ </c> <c> <c> - <f>36</f> + <f>23</f> <parameter>Учредитель</parameter> - <detailParameter>Расшифровка</detailParameter> </c> </c> <c> - <i>6</i> + <i>7</i> <c> - <f>37</f> + <f>35</f> <parameter>ПроцентКапитала</parameter> </c> </c> <c> <c> - <f>38</f> + <f>36</f> <parameter>СуммаКапитала</parameter> </c> </c> <c> <c> - <f>6</f> + <f>37</f> </c> </c> </row> @@ -1364,49 +1508,49 @@ <index>30</index> <row> <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> + <formatIndex>16</formatIndex> <c> - <i>1</i> + <i>2</i> <c> - <f>36</f> + <f>23</f> <parameter>Учредитель</parameter> - <detailParameter>Расшифровка</detailParameter> - </c> - </c> - <c> - <c> - <f>6</f> - </c> - </c> - <c> - <c> - <f>6</f> - </c> - </c> - <c> - <c> - <f>6</f> - </c> - </c> - <c> - <c> - <f>6</f> </c> </c> <c> <c> <f>37</f> + </c> + </c> + <c> + <c> + <f>37</f> + </c> + </c> + <c> + <c> + <f>37</f> + </c> + </c> + <c> + <c> + <f>37</f> + </c> + </c> + <c> + <c> + <f>35</f> <parameter>ПроцентКапитала</parameter> </c> </c> <c> <c> - <f>38</f> + <f>36</f> <parameter>СуммаКапитала</parameter> </c> </c> <c> <c> - <f>6</f> + <f>37</f> </c> </c> </row> @@ -1415,39 +1559,46 @@ <index>31</index> <row> <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> + <formatIndex>16</formatIndex> <c> <c> - <f>18</f> + <f>24</f> + </c> + </c> + <c> + <c> + <f>24</f> <tl> <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Учредители (участники)</v8:content> + <v8:content>Учрежденные фирмы</v8:content> </v8:item> </tl> </c> </c> <c> <c> - <f>27</f> - <parameter>Учредитель</parameter> + <f>34</f> + <parameter>НаименованиеОрганизации</parameter> + <detailParameter>Расшифровка</detailParameter> </c> </c> <c> - <i>6</i> + <i>7</i> <c> - <f>37</f> + <f>35</f> <parameter>ПроцентКапитала</parameter> </c> </c> <c> <c> - <f>38</f> + <f>36</f> <parameter>СуммаКапитала</parameter> </c> </c> <c> <c> - <f>6</f> + <f>37</f> </c> </c> </row> @@ -1456,48 +1607,50 @@ <index>32</index> <row> <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> + <formatIndex>16</formatIndex> <c> - <i>1</i> + <i>2</i> <c> - <f>27</f> - <parameter>Учредитель</parameter> - </c> - </c> - <c> - <c> - <f>6</f> - </c> - </c> - <c> - <c> - <f>6</f> - </c> - </c> - <c> - <c> - <f>6</f> - </c> - </c> - <c> - <c> - <f>6</f> + <f>34</f> + <parameter>НаименованиеОрганизации</parameter> + <detailParameter>Расшифровка</detailParameter> </c> </c> <c> <c> <f>37</f> + </c> + </c> + <c> + <c> + <f>37</f> + </c> + </c> + <c> + <c> + <f>37</f> + </c> + </c> + <c> + <c> + <f>37</f> + </c> + </c> + <c> + <c> + <f>35</f> <parameter>ПроцентКапитала</parameter> </c> </c> <c> <c> - <f>38</f> + <f>36</f> <parameter>СуммаКапитала</parameter> </c> </c> <c> <c> - <f>6</f> + <f>37</f> </c> </c> </row> @@ -1506,9 +1659,15 @@ <index>33</index> <row> <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> + <formatIndex>16</formatIndex> <c> <c> - <f>18</f> + <f>24</f> + </c> + </c> + <c> + <c> + <f>24</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -1519,27 +1678,26 @@ </c> <c> <c> - <f>36</f> + <f>23</f> <parameter>НаименованиеОрганизации</parameter> - <detailParameter>Расшифровка</detailParameter> </c> </c> <c> - <i>6</i> + <i>7</i> <c> - <f>37</f> + <f>35</f> <parameter>ПроцентКапитала</parameter> </c> </c> <c> <c> - <f>38</f> + <f>36</f> <parameter>СуммаКапитала</parameter> </c> </c> <c> <c> - <f>6</f> + <f>37</f> </c> </c> </row> @@ -1548,49 +1706,49 @@ <index>34</index> <row> <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> + <formatIndex>16</formatIndex> <c> - <i>1</i> + <i>2</i> <c> - <f>36</f> + <f>23</f> <parameter>НаименованиеОрганизации</parameter> - <detailParameter>Расшифровка</detailParameter> - </c> - </c> - <c> - <c> - <f>6</f> - </c> - </c> - <c> - <c> - <f>6</f> - </c> - </c> - <c> - <c> - <f>6</f> - </c> - </c> - <c> - <c> - <f>6</f> </c> </c> <c> <c> <f>37</f> + </c> + </c> + <c> + <c> + <f>37</f> + </c> + </c> + <c> + <c> + <f>37</f> + </c> + </c> + <c> + <c> + <f>37</f> + </c> + </c> + <c> + <c> + <f>35</f> <parameter>ПроцентКапитала</parameter> </c> </c> <c> <c> - <f>38</f> + <f>36</f> <parameter>СуммаКапитала</parameter> </c> </c> <c> <c> - <f>6</f> + <f>37</f> </c> </c> </row> @@ -1599,39 +1757,40 @@ <index>35</index> <row> <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> + <formatIndex>16</formatIndex> <c> <c> - <f>18</f> - <tl> - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Учрежденные фирмы</v8:content> - </v8:item> - </tl> - </c> - </c> - <c> - <c> - <f>27</f> - <parameter>НаименованиеОрганизации</parameter> - </c> - </c> - <c> - <i>6</i> - <c> - <f>37</f> - <parameter>ПроцентКапитала</parameter> + <f>38</f> </c> </c> <c> <c> <f>38</f> + </c> + </c> + <c> + <c> + <f>34</f> + <parameter>НаименованиеОрганизации</parameter> + <detailParameter>Расшифровка</detailParameter> + </c> + </c> + <c> + <i>7</i> + <c> + <f>35</f> + <parameter>ПроцентКапитала</parameter> + </c> + </c> + <c> + <c> + <f>36</f> <parameter>СуммаКапитала</parameter> </c> </c> <c> <c> - <f>6</f> + <f>37</f> </c> </c> </row> @@ -1640,48 +1799,39 @@ <index>36</index> <row> <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> - <c> - <i>1</i> - <c> - <f>27</f> - <parameter>НаименованиеОрганизации</parameter> - </c> - </c> + <formatIndex>16</formatIndex> <c> <c> - <f>6</f> - </c> - </c> - <c> - <c> - <f>6</f> - </c> - </c> - <c> - <c> - <f>6</f> - </c> - </c> - <c> - <c> - <f>6</f> - </c> - </c> - <c> - <c> - <f>37</f> - <parameter>ПроцентКапитала</parameter> + <f>38</f> </c> </c> <c> <c> <f>38</f> + </c> + </c> + <c> + <c> + <f>23</f> + <parameter>НаименованиеОрганизации</parameter> + </c> + </c> + <c> + <i>7</i> + <c> + <f>35</f> + <parameter>ПроцентКапитала</parameter> + </c> + </c> + <c> + <c> + <f>36</f> <parameter>СуммаКапитала</parameter> </c> </c> <c> <c> - <f>6</f> + <f>37</f> </c> </c> </row> @@ -1689,81 +1839,15 @@ <rowsItem> <index>37</index> <row> - <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> + <formatIndex>17</formatIndex> <c> <c> - <f>23</f> + <f>33</f> </c> </c> <c> <c> - <f>39</f> - <parameter>НаименованиеОрганизации</parameter> - <detailParameter>Расшифровка</detailParameter> - </c> - </c> - <c> - <i>6</i> - <c> - <f>40</f> - <parameter>ПроцентКапитала</parameter> - </c> - </c> - <c> - <c> - <f>41</f> - <parameter>СуммаКапитала</parameter> - </c> - </c> - <c> - <c> - <f>6</f> - </c> - </c> - </row> - </rowsItem> - <rowsItem> - <index>38</index> - <row> - <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> - <c> - <c> - <f>23</f> - </c> - </c> - <c> - <c> - <f>42</f> - <parameter>НаименованиеОрганизации</parameter> - </c> - </c> - <c> - <i>6</i> - <c> - <f>40</f> - <parameter>ПроцентКапитала</parameter> - </c> - </c> - <c> - <c> - <f>41</f> - <parameter>СуммаКапитала</parameter> - </c> - </c> - <c> - <c> - <f>6</f> - </c> - </c> - </row> - </rowsItem> - <rowsItem> - <index>39</index> - <row> - <formatIndex>12</formatIndex> - <c> - <c> - <f>35</f> + <f>33</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -1774,67 +1858,73 @@ </c> <c> <c> - <f>43</f> + <f>29</f> <parameter>ОписаниеПодразделения</parameter> </c> </c> </row> </rowsItem> <rowsItem> - <index>40</index> + <index>38</index> <row> + <formatIndex>16</formatIndex> <c> - <i>1</i> + <i>2</i> <c> - <f>17</f> + <f>23</f> <parameter>ОписаниеПодразделения</parameter> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>20</f> + <f>19</f> </c> </c> <c> <c> - <f>21</f> + <f>26</f> </c> </c> </row> </rowsItem> <rowsItem> - <index>41</index> + <index>39</index> <row> <columnsID>3e612652-6c5e-40c7-81e3-923eea19e77c</columnsID> - <formatIndex>18</formatIndex> + <formatIndex>24</formatIndex> <c> <c> - <f>18</f> + <f>24</f> + </c> + </c> + <c> + <c> + <f>24</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -1845,132 +1935,177 @@ </c> <c> <c> - <f>27</f> + <f>23</f> <parameter>ДатаИзменения</parameter> </c> </c> <c> <c> - <f>27</f> + <f>23</f> <parameter>ГосударственныйОрган</parameter> </c> </c> </row> </rowsItem> + <rowsItem> + <index>40</index> + <row> + <columnsID>3e612652-6c5e-40c7-81e3-923eea19e77c</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>24</f> + </c> + </c> + <c> + <c> + <f>24</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Изменения в ЕГРИП</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>23</f> + <parameter>ДатаИзменения</parameter> + </c> + </c> + <c> + <c> + <f>23</f> + <parameter>ГосударственныйОрган</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>41</index> + <row> + <columnsID>3e612652-6c5e-40c7-81e3-923eea19e77c</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>24</f> + </c> + </c> + <c> + <c> + <f>24</f> + </c> + </c> + <c> + <c> + <f>23</f> + <parameter>ДатаИзменения</parameter> + </c> + </c> + <c> + <c> + <f>23</f> + <parameter>ГосударственныйОрган</parameter> + </c> + </c> + <c> + <c> + <f>39</f> + </c> + </c> + <c> + <c> + <f>39</f> + </c> + </c> + <c> + <c> + <f>39</f> + </c> + </c> + <c> + <c> + <f>39</f> + </c> + </c> + <c> + <c> + <f>39</f> + </c> + </c> + <c> + <c> + <f>40</f> + </c> + </c> + </row> + </rowsItem> <rowsItem> <index>42</index> - <row> - <columnsID>3e612652-6c5e-40c7-81e3-923eea19e77c</columnsID> - <formatIndex>18</formatIndex> - <c> - <c> - <f>23</f> - </c> - </c> - <c> - <c> - <f>27</f> - <parameter>ДатаИзменения</parameter> - </c> - </c> - <c> - <c> - <f>27</f> - <parameter>ГосударственныйОрган</parameter> - </c> - </c> - <c> - <c> - <f>44</f> - </c> - </c> - <c> - <c> - <f>44</f> - </c> - </c> - <c> - <c> - <f>44</f> - </c> - </c> - <c> - <c> - <f>44</f> - </c> - </c> - <c> - <c> - <f>44</f> - </c> - </c> - <c> - <c> - <f>45</f> - </c> - </c> - </row> - </rowsItem> - <rowsItem> - <index>43</index> <row> <columnsID>28fabb70-5f56-4096-8f9b-5eaabd431556</columnsID> - <formatIndex>18</formatIndex> + <formatIndex>24</formatIndex> <c> <c> - <f>23</f> + <f>24</f> </c> </c> <c> <c> - <f>42</f> + <f>24</f> + </c> + </c> + <c> + <c> + <f>23</f> <parameter>ОписаниеИзменения</parameter> </c> </c> <c> <c> - <f>44</f> + <f>39</f> </c> </c> <c> <c> - <f>44</f> + <f>39</f> </c> </c> <c> <c> - <f>44</f> + <f>39</f> </c> </c> <c> <c> - <f>44</f> + <f>39</f> </c> </c> <c> <c> - <f>44</f> + <f>39</f> </c> </c> <c> <c> - <f>44</f> + <f>39</f> </c> </c> <c> <c> - <f>44</f> + <f>39</f> </c> </c> </row> </rowsItem> <rowsItem> - <index>51</index> + <index>50</index> <row> <c> - <i>1</i> + <i>2</i> <c> - <f>46</f> + <f>41</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -1980,15 +2115,21 @@ <detailParameter>Расшифровка</detailParameter> </c> </c> + <c> + <i>4</i> + <c> + <f>42</f> + </c> + </c> </row> </rowsItem> <rowsItem> - <index>53</index> + <index>52</index> <row> <c> - <i>1</i> + <i>2</i> <c> - <f>47</f> + <f>43</f> <tl> <v8:item> <v8:lang>ru</v8:lang> @@ -1998,354 +2139,344 @@ <detailParameter>Расшифровка</detailParameter> </c> </c> - </row> - </rowsItem> - <rowsItem> - <index>55</index> - <row> - <formatIndex>48</formatIndex> <c> - <i>1</i> + <i>4</i> <c> - <f>12</f> + <f>44</f> </c> </c> </row> </rowsItem> <rowsItem> - <index>57</index> + <index>54</index> <row> - <formatIndex>49</formatIndex> + <formatIndex>45</formatIndex> <c> - <i>1</i> + <i>2</i> <c> - <f>50</f> + <f>46</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>56</index> + <row> + <formatIndex>47</formatIndex> + <c> + <i>2</i> + <c> + <f>48</f> </c> </c> </row> </rowsItem> <templateMode>true</templateMode> - <defaultFormatIndex>6</defaultFormatIndex> - <height>58</height> - <vgRows>58</vgRows> + <defaultFormatIndex>8</defaultFormatIndex> + <height>57</height> + <vgRows>57</vgRows> + <merge> + <r>0</r> + <c>1</c> + <w>9</w> + </merge> + <merge> + <r>1</r> + <c>1</c> + <w>9</w> + </merge> <merge> <r>2</r> <c>1</c> - <w>7</w> + <w>9</w> </merge> <merge> <r>3</r> <c>1</c> - <w>7</w> + <w>9</w> </merge> <merge> <r>4</r> - <c>1</c> + <c>2</c> <w>7</w> </merge> <merge> <r>5</r> <c>2</c> - <w>4</w> - </merge> - <merge> - <r>5</r> - <c>7</c> - <w>1</w> + <w>7</w> </merge> <merge> <r>6</r> - <c>1</c> + <c>2</c> <w>7</w> </merge> <merge> <r>7</r> - <c>1</c> + <c>2</c> <w>7</w> </merge> <merge> <r>8</r> - <c>1</c> + <c>2</c> <w>7</w> </merge> <merge> <r>9</r> - <c>1</c> - <w>7</w> + <c>3</c> + <w>4</w> + </merge> + <merge> + <r>9</r> + <c>8</c> + <w>1</w> </merge> <merge> <r>10</r> - <c>1</c> + <c>2</c> <w>7</w> </merge> <merge> <r>11</r> - <c>1</c> + <c>2</c> <w>7</w> </merge> <merge> <r>12</r> <c>2</c> - <w>6</w> + <w>7</w> </merge> <merge> <r>13</r> - <c>2</c> + <c>3</c> <w>6</w> </merge> <merge> <r>14</r> - <c>1</c> - <w>7</w> + <c>3</c> + <w>6</w> </merge> <merge> <r>15</r> - <c>1</c> + <c>2</c> <w>7</w> </merge> <merge> <r>16</r> - <c>1</c> + <c>2</c> <w>7</w> </merge> <merge> <r>17</r> - <c>1</c> + <c>2</c> <w>7</w> </merge> <merge> <r>18</r> - <c>1</c> + <c>2</c> <w>7</w> </merge> <merge> <r>19</r> - <c>1</c> + <c>2</c> <w>7</w> </merge> <merge> <r>20</r> - <c>1</c> + <c>2</c> <w>7</w> </merge> <merge> <r>21</r> - <c>1</c> + <c>2</c> <w>7</w> </merge> <merge> <r>22</r> - <c>1</c> + <c>2</c> <w>7</w> </merge> <merge> <r>23</r> - <c>1</c> + <c>2</c> <w>7</w> </merge> <merge> <r>24</r> - <c>1</c> + <c>2</c> <w>7</w> </merge> <merge> <r>25</r> - <c>1</c> + <c>2</c> <w>7</w> </merge> <merge> <r>26</r> - <c>1</c> + <c>2</c> <w>7</w> </merge> <merge> <r>27</r> - <c>1</c> - <w>7</w> + <c>2</c> + <w>4</w> + </merge> + <merge> + <r>27</r> + <c>8</c> + <w>1</w> </merge> <merge> <r>28</r> - <c>1</c> + <c>2</c> + <w>4</w> + </merge> + <merge> + <r>28</r> + <c>8</c> + <w>1</w> + </merge> + <merge> + <r>29</r> + <c>2</c> + <w>4</w> + </merge> + <merge> + <r>29</r> + <c>8</c> + <w>1</w> + </merge> + <merge> + <r>30</r> + <c>2</c> + <w>4</w> + </merge> + <merge> + <r>30</r> + <c>8</c> + <w>1</w> + </merge> + <merge> + <r>31</r> + <c>2</c> + <w>4</w> + </merge> + <merge> + <r>31</r> + <c>8</c> + <w>1</w> + </merge> + <merge> + <r>32</r> + <c>2</c> + <w>4</w> + </merge> + <merge> + <r>32</r> + <c>8</c> + <w>1</w> + </merge> + <merge> + <r>33</r> + <c>2</c> + <w>4</w> + </merge> + <merge> + <r>33</r> + <c>8</c> + <w>1</w> + </merge> + <merge> + <r>34</r> + <c>2</c> + <w>4</w> + </merge> + <merge> + <r>34</r> + <c>8</c> + <w>1</w> + </merge> + <merge> + <r>35</r> + <c>2</c> + <w>4</w> + </merge> + <merge> + <r>35</r> + <c>8</c> + <w>1</w> + </merge> + <merge> + <r>36</r> + <c>2</c> + <w>4</w> + </merge> + <merge> + <r>36</r> + <c>8</c> + <w>1</w> + </merge> + <merge> + <r>37</r> + <c>2</c> <w>7</w> </merge> - <merge> - <r>29</r> - <c>1</c> - <w>4</w> - </merge> - <merge> - <r>29</r> - <c>7</c> - <w>1</w> - </merge> - <merge> - <r>30</r> - <c>1</c> - <w>4</w> - </merge> - <merge> - <r>30</r> - <c>7</c> - <w>1</w> - </merge> - <merge> - <r>31</r> - <c>1</c> - <w>4</w> - </merge> - <merge> - <r>31</r> - <c>7</c> - <w>1</w> - </merge> - <merge> - <r>32</r> - <c>1</c> - <w>4</w> - </merge> - <merge> - <r>32</r> - <c>7</c> - <w>1</w> - </merge> - <merge> - <r>33</r> - <c>1</c> - <w>4</w> - </merge> - <merge> - <r>33</r> - <c>7</c> - <w>1</w> - </merge> - <merge> - <r>34</r> - <c>1</c> - <w>4</w> - </merge> - <merge> - <r>34</r> - <c>7</c> - <w>1</w> - </merge> - <merge> - <r>35</r> - <c>1</c> - <w>4</w> - </merge> - <merge> - <r>35</r> - <c>7</c> - <w>1</w> - </merge> - <merge> - <r>36</r> - <c>1</c> - <w>4</w> - </merge> - <merge> - <r>36</r> - <c>7</c> - <w>1</w> - </merge> - <merge> - <r>37</r> - <c>1</c> - <w>4</w> - </merge> - <merge> - <r>37</r> - <c>7</c> - <w>1</w> - </merge> <merge> <r>38</r> - <c>1</c> - <w>4</w> - </merge> - <merge> - <r>38</r> - <c>7</c> - <w>1</w> + <c>2</c> + <w>7</w> </merge> <merge> <r>39</r> - <c>1</c> - <w>7</w> + <c>3</c> + <w>6</w> </merge> <merge> <r>40</r> - <c>1</c> - <w>7</w> + <c>3</c> + <w>6</w> </merge> <merge> <r>41</r> - <c>2</c> + <c>3</c> <w>6</w> </merge> <merge> <r>42</r> <c>2</c> - <w>6</w> - </merge> - <merge> - <r>43</r> - <c>1</c> <w>7</w> </merge> <merge> - <r>51</r> - <c>1</c> + <r>50</r> + <c>2</c> + <w>1</w> + </merge> + <merge> + <r>50</r> + <c>4</c> + <w>5</w> + </merge> + <merge> + <r>52</r> + <c>2</c> + <w>1</w> + </merge> + <merge> + <r>52</r> + <c>4</c> + <w>5</w> + </merge> + <merge> + <r>54</r> + <c>2</c> <w>7</w> </merge> <merge> - <r>53</r> - <c>1</c> - <w>7</w> - </merge> - <merge> - <r>55</r> - <c>1</c> - <w>7</w> - </merge> - <merge> - <r>57</r> - <c>1</c> + <r>56</r> + <c>2</c> <w>7</w> </merge> <namedItem xsi:type="NamedItemCells"> <name>ВидыДеятельности</name> - <area> - <type>Rows</type> - <beginRow>12</beginRow> - <endRow>12</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - <columnsID>7bead1f9-0aca-4731-a3cf-56abe96e686e</columnsID> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>ДействующаяОрганизация</name> - <area> - <type>Rows</type> - <beginRow>3</beginRow> - <endRow>3</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>Еще</name> - <area> - <type>Rows</type> - <beginRow>51</beginRow> - <endRow>51</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>ЕщеВидыДеятельности</name> <area> <type>Rows</type> <beginRow>13</beginRow> @@ -2355,146 +2486,39 @@ <columnsID>7bead1f9-0aca-4731-a3cf-56abe96e686e</columnsID> </area> </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ДействующаяОрганизация</name> + <area> + <type>Rows</type> + <beginRow>7</beginRow> + <endRow>7</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>Еще</name> + <area> + <type>Rows</type> + <beginRow>50</beginRow> + <endRow>50</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ЕщеВидыДеятельности</name> + <area> + <type>Rows</type> + <beginRow>14</beginRow> + <endRow>14</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + <columnsID>7bead1f9-0aca-4731-a3cf-56abe96e686e</columnsID> + </area> + </namedItem> <namedItem xsi:type="NamedItemCells"> <name>ЕщеИзмененияВРеестре</name> - <area> - <type>Rows</type> - <beginRow>42</beginRow> - <endRow>42</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - <columnsID>3e612652-6c5e-40c7-81e3-923eea19e77c</columnsID> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>ЕщеКонтакты</name> - <area> - <type>Rows</type> - <beginRow>24</beginRow> - <endRow>24</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>ЕщеЛицензии</name> - <area> - <type>Rows</type> - <beginRow>15</beginRow> - <endRow>15</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - <columnsID>28fabb70-5f56-4096-8f9b-5eaabd431556</columnsID> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>ЕщеОрганизации</name> - <area> - <type>Rows</type> - <beginRow>19</beginRow> - <endRow>19</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>ЕщеОрганизацииБезРасшифровки</name> - <area> - <type>Rows</type> - <beginRow>20</beginRow> - <endRow>20</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>ЕщеОрганизацииГдеУчредитель</name> - <area> - <type>Rows</type> - <beginRow>37</beginRow> - <endRow>37</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>ЕщеОрганизацииГдеУчредительБезРасшифровки</name> - <area> - <type>Rows</type> - <beginRow>38</beginRow> - <endRow>38</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>ЕщеПодразделения</name> - <area> - <type>Rows</type> - <beginRow>40</beginRow> - <endRow>40</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>ЕщеРасчетныеСчета</name> - <area> - <type>Rows</type> - <beginRow>10</beginRow> - <endRow>10</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>ЕщеУчредители</name> - <area> - <type>Rows</type> - <beginRow>30</beginRow> - <endRow>30</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>ЕщеУчредителиБезРасшифровки</name> - <area> - <type>Rows</type> - <beginRow>32</beginRow> - <endRow>32</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>ЕщеУчрежденныеФирмы</name> - <area> - <type>Rows</type> - <beginRow>34</beginRow> - <endRow>34</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>ЕщеУчрежденныеФирмыБезРасшифровки</name> - <area> - <type>Rows</type> - <beginRow>36</beginRow> - <endRow>36</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>ИзмененияВРеестре</name> <area> <type>Rows</type> <beginRow>41</beginRow> @@ -2505,38 +2529,7 @@ </area> </namedItem> <namedItem xsi:type="NamedItemCells"> - <name>ИзмененияВРеестреОписание</name> - <area> - <type>Rows</type> - <beginRow>43</beginRow> - <endRow>43</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>Контакты</name> - <area> - <type>Rows</type> - <beginRow>23</beginRow> - <endRow>23</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>Лицензии</name> - <area> - <type>Rows</type> - <beginRow>14</beginRow> - <endRow>14</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - <columnsID>28fabb70-5f56-4096-8f9b-5eaabd431556</columnsID> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>ЛицензииОписание</name> + <name>ЕщеЛицензии</name> <area> <type>Rows</type> <beginRow>16</beginRow> @@ -2547,169 +2540,17 @@ </area> </namedItem> <namedItem xsi:type="NamedItemCells"> - <name>Наименование</name> + <name>ЕщеОрганизации</name> <area> <type>Rows</type> - <beginRow>0</beginRow> - <endRow>1</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - <columnsID>42fbdf9a-63ec-425e-9de0-9eb1ac97b574</columnsID> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>НедействующаяОрганизация</name> - <area> - <type>Rows</type> - <beginRow>4</beginRow> - <endRow>4</endRow> + <beginRow>20</beginRow> + <endRow>20</endRow> <beginColumn>-1</beginColumn> <endColumn>-1</endColumn> </area> </namedItem> <namedItem xsi:type="NamedItemCells"> - <name>Подразделения</name> - <area> - <type>Rows</type> - <beginRow>39</beginRow> - <endRow>39</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>ПочтовыйАдрес</name> - <area> - <type>Rows</type> - <beginRow>22</beginRow> - <endRow>22</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>Предприниматель</name> - <area> - <type>Rows</type> - <beginRow>28</beginRow> - <endRow>28</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>Разделитель</name> - <area> - <type>Rows</type> - <beginRow>55</beginRow> - <endRow>55</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>РазделительСтрокСписка</name> - <area> - <type>Rows</type> - <beginRow>57</beginRow> - <endRow>57</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>РасчетныеСчета</name> - <area> - <type>Rows</type> - <beginRow>9</beginRow> - <endRow>9</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>РасчетныеСчетаРеквизиты</name> - <area> - <type>Rows</type> - <beginRow>11</beginRow> - <endRow>11</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>Регистрация</name> - <area> - <type>Rows</type> - <beginRow>2</beginRow> - <endRow>2</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>РегистрацияВГосОрганах</name> - <area> - <type>Rows</type> - <beginRow>5</beginRow> - <endRow>5</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - <columnsID>fe57ae9e-ae73-4776-bd05-913cd17283da</columnsID> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>РеквизитыПредпринимателя</name> - <area> - <type>Rows</type> - <beginRow>8</beginRow> - <endRow>8</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>РеквизитыЮридическогоЛица</name> - <area> - <type>Rows</type> - <beginRow>6</beginRow> - <endRow>7</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>Руководитель</name> - <area> - <type>Rows</type> - <beginRow>26</beginRow> - <endRow>27</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>Свернуть</name> - <area> - <type>Rows</type> - <beginRow>53</beginRow> - <endRow>53</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>СколькоЕщеОрганизаций</name> - <area> - <type>Rows</type> - <beginRow>18</beginRow> - <endRow>18</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>СтатусОрганизации</name> + <name>ЕщеОрганизацииБезРасшифровки</name> <area> <type>Rows</type> <beginRow>21</beginRow> @@ -2719,50 +2560,7 @@ </area> </namedItem> <namedItem xsi:type="NamedItemCells"> - <name>УставныйКапитал</name> - <area> - <type>Rows</type> - <beginRow>25</beginRow> - <endRow>25</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>Учредители</name> - <area> - <type>Rows</type> - <beginRow>29</beginRow> - <endRow>29</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>УчредителиБезРасшифровки</name> - <area> - <type>Rows</type> - <beginRow>31</beginRow> - <endRow>31</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>УчрежденныеФирмы</name> - <area> - <type>Rows</type> - <beginRow>33</beginRow> - <endRow>33</endRow> - <beginColumn>-1</beginColumn> - <endColumn>-1</endColumn> - <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> - </area> - </namedItem> - <namedItem xsi:type="NamedItemCells"> - <name>УчрежденныеФирмыБезРасшифровки</name> + <name>ЕщеОрганизацииГдеУчредитель</name> <area> <type>Rows</type> <beginRow>35</beginRow> @@ -2773,13 +2571,345 @@ </area> </namedItem> <namedItem xsi:type="NamedItemCells"> - <name>ЮридическийАдрес</name> + <name>ЕщеОрганизацииГдеУчредительБезРасшифровки</name> + <area> + <type>Rows</type> + <beginRow>36</beginRow> + <endRow>36</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ЕщеПодразделения</name> + <area> + <type>Rows</type> + <beginRow>38</beginRow> + <endRow>38</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ЕщеУчредители</name> + <area> + <type>Rows</type> + <beginRow>28</beginRow> + <endRow>28</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ЕщеУчредителиБезРасшифровки</name> + <area> + <type>Rows</type> + <beginRow>30</beginRow> + <endRow>30</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ЕщеУчрежденныеФирмы</name> + <area> + <type>Rows</type> + <beginRow>32</beginRow> + <endRow>32</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ЕщеУчрежденныеФирмыБезРасшифровки</name> + <area> + <type>Rows</type> + <beginRow>34</beginRow> + <endRow>34</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ИзмененияВРеестре</name> + <area> + <type>Rows</type> + <beginRow>39</beginRow> + <endRow>39</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ИзмененияВРеестреОписание</name> + <area> + <type>Rows</type> + <beginRow>42</beginRow> + <endRow>42</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ИзмененияВРеестреПредприниматель</name> + <area> + <type>Rows</type> + <beginRow>40</beginRow> + <endRow>40</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>Лицензии</name> + <area> + <type>Rows</type> + <beginRow>15</beginRow> + <endRow>15</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + <columnsID>28fabb70-5f56-4096-8f9b-5eaabd431556</columnsID> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ЛицензииОписание</name> <area> <type>Rows</type> <beginRow>17</beginRow> <endRow>17</endRow> <beginColumn>-1</beginColumn> <endColumn>-1</endColumn> + <columnsID>28fabb70-5f56-4096-8f9b-5eaabd431556</columnsID> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>Наименование</name> + <area> + <type>Rows</type> + <beginRow>4</beginRow> + <endRow>5</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>НедействующаяОрганизация</name> + <area> + <type>Rows</type> + <beginRow>8</beginRow> + <endRow>8</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>Подразделения</name> + <area> + <type>Rows</type> + <beginRow>37</beginRow> + <endRow>37</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>Предприниматель</name> + <area> + <type>Rows</type> + <beginRow>25</beginRow> + <endRow>25</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>Разделитель</name> + <area> + <type>Rows</type> + <beginRow>54</beginRow> + <endRow>54</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>РазделительСтрокСписка</name> + <area> + <type>Rows</type> + <beginRow>56</beginRow> + <endRow>56</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>Регистрация</name> + <area> + <type>Rows</type> + <beginRow>6</beginRow> + <endRow>6</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>РегистрацияВГосОрганах</name> + <area> + <type>Rows</type> + <beginRow>9</beginRow> + <endRow>9</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + <columnsID>fe57ae9e-ae73-4776-bd05-913cd17283da</columnsID> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>РеквизитыПредприниматель</name> + <area> + <type>Rows</type> + <beginRow>12</beginRow> + <endRow>12</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>РеквизитыЮридическоеЛицо</name> + <area> + <type>Rows</type> + <beginRow>10</beginRow> + <endRow>11</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>Руководитель</name> + <area> + <type>Rows</type> + <beginRow>23</beginRow> + <endRow>24</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>Свернуть</name> + <area> + <type>Rows</type> + <beginRow>52</beginRow> + <endRow>52</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>СколькоЕщеОрганизаций</name> + <area> + <type>Rows</type> + <beginRow>19</beginRow> + <endRow>19</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>СтатусОрганизации</name> + <area> + <type>Rows</type> + <beginRow>22</beginRow> + <endRow>22</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>УставныйКапитал</name> + <area> + <type>Rows</type> + <beginRow>26</beginRow> + <endRow>26</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>Учредители</name> + <area> + <type>Rows</type> + <beginRow>27</beginRow> + <endRow>27</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>УчредителиБезРасшифровки</name> + <area> + <type>Rows</type> + <beginRow>29</beginRow> + <endRow>29</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>УчрежденныеФирмы</name> + <area> + <type>Rows</type> + <beginRow>31</beginRow> + <endRow>31</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>УчрежденныеФирмыБезРасшифровки</name> + <area> + <type>Rows</type> + <beginRow>33</beginRow> + <endRow>33</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + <columnsID>e17a4de9-0b5e-41dd-adec-00d146f6da65</columnsID> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ШапкаПредприниматель</name> + <area> + <type>Rows</type> + <beginRow>2</beginRow> + <endRow>3</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ШапкаЮридическоеЛицо</name> + <area> + <type>Rows</type> + <beginRow>0</beginRow> + <endRow>1</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ЮридическийАдрес</name> + <area> + <type>Rows</type> + <beginRow>18</beginRow> + <endRow>18</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> </area> </namedItem> <printSettings> @@ -2804,26 +2934,31 @@ <duplexType>None</duplexType> <pagePlacementAlternation>Auto</pagePlacementAlternation> </printSettings> - <font faceName="Arial" height="14" bold="true" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="18" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="12" bold="true" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="16" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="8" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> <font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> <font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> - <font faceName="Arial" height="10" bold="true" italic="false" underline="false" strikeout="false" kind="Absolute"/> - <font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> - <font faceName="Arial" height="10" bold="false" italic="true" underline="false" strikeout="false" kind="Absolute"/> - <font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> <font faceName="Arial" height="10" bold="false" italic="false" underline="true" strikeout="false" kind="Absolute"/> <font faceName="Arial" height="6" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <format> + <width>24</width> + </format> <format> <width>187</width> </format> + <format> + <width>98</width> + </format> <format> <width>120</width> </format> <format> - <width>811</width> + <width>94</width> </format> <format> - <width>98</width> + <width>48</width> </format> <format> <width>95</width> @@ -2838,40 +2973,57 @@ <width>89</width> </format> <format> - <width>125</width> + <width>103</width> </format> <format> <font>0</font> - <textPlacement>Wrap</textPlacement> - <fillType>Parameter</fillType> - </format> - <format> - <font>1</font> - <horizontalAlignment>Left</horizontalAlignment> - <textPlacement>Wrap</textPlacement> - <fillType>Parameter</fillType> </format> <format> <font>1</font> + <verticalAlignment>Center</verticalAlignment> + <fillType>Text</fillType> </format> <format> <font>2</font> </format> <format> <font>3</font> + <width>376</width> + <verticalAlignment>Top</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <textPlacement>Wrap</textPlacement> + </format> + <format> + <font>3</font> + </format> + <format> + <font>4</font> + </format> + <format> + <font>4</font> + <width>72</width> + <textPlacement>Wrap</textPlacement> + <fillType>Parameter</fillType> + </format> + <format> + <font>4</font> + <width>72</width> + </format> + <format> + <font>4</font> <fillType>Template</fillType> </format> <format> <font>4</font> <verticalAlignment>Top</verticalAlignment> - <textColor>style:ЦветТекстаКонтрагентаДействующего</textColor> + <textColor>style:ДосьеХорошаяОценкаЦвет</textColor> <textPlacement>Wrap</textPlacement> <fillType>Parameter</fillType> </format> <format> - <font>1</font> + <font>4</font> <verticalAlignment>Top</verticalAlignment> - <textColor>style:ЦветТекстаНекорректногоКонтрагента</textColor> + <textColor>style:ДосьеПлохаяОценкаЦвет</textColor> <textPlacement>Wrap</textPlacement> <fillType>Parameter</fillType> </format> @@ -2883,7 +3035,7 @@ <fillType>Parameter</fillType> </format> <format> - <font>1</font> + <font>4</font> <verticalAlignment>Top</verticalAlignment> </format> <format> @@ -2892,101 +3044,62 @@ <fillType>Template</fillType> </format> <format> - <font>1</font> - <width>72</width> - </format> - <format> - <font>1</font> + <font>4</font> <width>89</width> </format> <format> - <font>3</font> - <width>72</width> - <textPlacement>Wrap</textPlacement> - <fillType>Parameter</fillType> - </format> - <format> - <verticalAlignment>Top</verticalAlignment> - </format> - <format> - <font>1</font> - <width>72</width> - <textPlacement>Wrap</textPlacement> - <fillType>Parameter</fillType> - </format> - <format> - <font>2</font> - <verticalAlignment>Top</verticalAlignment> - </format> - <format> - <font>3</font> + <font>4</font> <verticalAlignment>Top</verticalAlignment> <textPlacement>Auto</textPlacement> <fillType>Parameter</fillType> </format> <format> - <font>3</font> - <width>72</width> - <verticalAlignment>Top</verticalAlignment> - <textPlacement>Wrap</textPlacement> - <fillType>Parameter</fillType> - </format> - <format> - <font>1</font> + <font>4</font> <width>72</width> <verticalAlignment>Top</verticalAlignment> <textPlacement>Auto</textPlacement> <fillType>Parameter</fillType> </format> <format> - <font>1</font> + <font>4</font> <verticalAlignment>Top</verticalAlignment> <textPlacement>Wrap</textPlacement> <fillType>Parameter</fillType> </format> <format> - <font>2</font> - <width>72</width> + <font>4</font> <textPlacement>Wrap</textPlacement> <fillType>Parameter</fillType> </format> <format> - <font>3</font> - <textPlacement>Wrap</textPlacement> - <fillType>Parameter</fillType> - </format> - <format> - <font>1</font> + <font>4</font> <width>72</width> - <textColor>#1C55AE</textColor> + <textColor>style:ДосьеГиперссылкаЦвет</textColor> <textPlacement>Wrap</textPlacement> <fillType>Parameter</fillType> </format> <format> <font>5</font> <width>72</width> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> <textPlacement>Wrap</textPlacement> <fillType>Parameter</fillType> </format> <format> - <font>1</font> - <width>120</width> - </format> - <format> - <font>1</font> + <font>4</font> <verticalAlignment>Top</verticalAlignment> <textPlacement>Wrap</textPlacement> </format> <format> - <font>3</font> + <font>4</font> <width>72</width> <verticalAlignment>Top</verticalAlignment> - <textColor>#1C55AE</textColor> + <textColor>style:ДосьеГиперссылкаЦвет</textColor> <textPlacement>Wrap</textPlacement> <fillType>Parameter</fillType> </format> <format> - <font>3</font> + <font>4</font> <width>72</width> <horizontalAlignment>Right</horizontalAlignment> <verticalAlignment>Top</verticalAlignment> @@ -2995,81 +3108,65 @@ <format/> </format> <format> - <font>3</font> + <font>4</font> <width>72</width> <horizontalAlignment>Right</horizontalAlignment> <verticalAlignment>Top</verticalAlignment> <textPlacement>Wrap</textPlacement> <fillType>Parameter</fillType> </format> - <format> - <font>1</font> - <width>72</width> - <verticalAlignment>Top</verticalAlignment> - <textColor>#1C55AE</textColor> - <textPlacement>Wrap</textPlacement> - <fillType>Parameter</fillType> - </format> - <format> - <font>6</font> - <width>72</width> - <horizontalAlignment>Right</horizontalAlignment> - <verticalAlignment>Top</verticalAlignment> - <textPlacement>Wrap</textPlacement> - <fillType>Parameter</fillType> - <format/> - </format> - <format> - <font>6</font> - <width>72</width> - <horizontalAlignment>Right</horizontalAlignment> - <verticalAlignment>Top</verticalAlignment> - <textPlacement>Wrap</textPlacement> - <fillType>Parameter</fillType> - </format> - <format> - <font>1</font> - <width>72</width> - <verticalAlignment>Top</verticalAlignment> - <textPlacement>Wrap</textPlacement> - <fillType>Parameter</fillType> - </format> <format> <font>3</font> - <verticalAlignment>Top</verticalAlignment> - <textPlacement>Wrap</textPlacement> - <fillType>Parameter</fillType> + <width>72</width> </format> <format> - <font>1</font> + <font>3</font> + <verticalAlignment>Top</verticalAlignment> + </format> + <format> + <font>4</font> <width>72</width> <verticalAlignment>Top</verticalAlignment> </format> <format> - <font>1</font> + <font>4</font> <width>63</width> <verticalAlignment>Top</verticalAlignment> </format> <format> - <font>7</font> - <textColor>auto</textColor> + <font>6</font> + <horizontalAlignment>Left</horizontalAlignment> + <textColor>style:ДосьеГиперссылкаЦвет</textColor> <fillType>Template</fillType> <hyperLink>true</hyperLink> </format> <format> - <font>7</font> - <textColor>auto</textColor> + <font>6</font> + <fillType>Text</fillType> <hyperLink>true</hyperLink> </format> <format> - <font>1</font> + <font>6</font> + <horizontalAlignment>Left</horizontalAlignment> + <textColor>style:ДосьеГиперссылкаЦвет</textColor> + <hyperLink>true</hyperLink> + </format> + <format> + <font>6</font> + <hyperLink>true</hyperLink> + </format> + <format> + <font>5</font> <height>0</height> </format> <format> - <font>8</font> + <font>5</font> + </format> + <format> + <font>7</font> <height>0</height> </format> <format> - <font>8</font> + <font>7</font> </format> </document> \ 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..de4e68704 --- /dev/null +++ b/SSL/src/Reports/ДосьеКонтрагента/Templates/ДанныеПрограммы/Template.mxlx @@ -0,0 +1,928 @@ +<?xml version="1.0" encoding="UTF-8"?> +<document xmlns="http://v8.1c.ru/8.2/data/spreadsheet" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <languageSettings> + <currentLanguage>ru</currentLanguage> + <defaultLanguage>ru</defaultLanguage> + <languageInfo> + <id>ru</id> + <code>Русский</code> + <description>Русский</description> + </languageInfo> + </languageSettings> + <columns> + <size>10</size> + <columnsItem> + <index>0</index> + <column> + <formatIndex>1</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>1</index> + <column> + <formatIndex>2</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>9</index> + <column> + <formatIndex>3</formatIndex> + </column> + </columnsItem> + </columns> + <columns> + <id>cb852424-93f1-488f-aea9-b18f93b12e4e</id> + <size>11</size> + <columnsItem> + <index>0</index> + <column> + <formatIndex>1</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>8</index> + <column> + <formatIndex>4</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>10</index> + <column> + <formatIndex>5</formatIndex> + </column> + </columnsItem> + </columns> + <columns> + <id>28fabb70-5f56-4096-8f9b-5eaabd431556</id> + <size>10</size> + <columnsItem> + <index>0</index> + <column> + <formatIndex>1</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>1</index> + <column> + <formatIndex>2</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>2</index> + <column> + <formatIndex>6</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>9</index> + <column> + <formatIndex>3</formatIndex> + </column> + </columnsItem> + </columns> + <rowsItem> + <index>0</index> + <row> + <columnsID>cb852424-93f1-488f-aea9-b18f93b12e4e</columnsID> + <c> + <c> + <f>7</f> + </c> + </c> + <c> + <c> + <f>8</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Данные программы</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>1</index> + <row> + <columnsID>cb852424-93f1-488f-aea9-b18f93b12e4e</columnsID> + <c> + <c> + <f>9</f> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Данные, внесенные в информационную базу</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>2</index> + <row> + <columnsID>cb852424-93f1-488f-aea9-b18f93b12e4e</columnsID> + <c> + <i>1</i> + <c> + <f>11</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>3</index> + <row> + <columnsID>cb852424-93f1-488f-aea9-b18f93b12e4e</columnsID> + <c> + <i>1</i> + <c> + <f>12</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Организация отсутствует в данных информационной базы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <i>7</i> + <c> + <f>13</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>4</index> + <row> + <columnsID>28fabb70-5f56-4096-8f9b-5eaabd431556</columnsID> + <formatIndex>14</formatIndex> + <c> + <c> + <f>15</f> + </c> + </c> + <c> + <c> + <f>15</f> + </c> + </c> + <c> + <c> + <f>16</f> + </c> + </c> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>17</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>5</index> + <row> + <formatIndex>18</formatIndex> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>20</f> + <parameter>Заголовок</parameter> + </c> + </c> + <c> + <c> + <f>21</f> + <parameter>Представление</parameter> + <detailParameter>Ссылка</detailParameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>6</index> + <row> + <formatIndex>18</formatIndex> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>21</f> + <parameter>Представление</parameter> + <detailParameter>Ссылка</detailParameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>7</index> + <row> + <columnsID>28fabb70-5f56-4096-8f9b-5eaabd431556</columnsID> + <formatIndex>14</formatIndex> + <c> + <c> + <f>15</f> + </c> + </c> + <c> + <c> + <f>15</f> + </c> + </c> + <c> + <c> + <f>16</f> + </c> + </c> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>17</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>8</index> + <row> + <formatIndex>18</formatIndex> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>20</f> + <parameter>Заголовок</parameter> + </c> + </c> + <c> + <c> + <f>20</f> + <parameter>Представление</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>9</index> + <row> + <formatIndex>18</formatIndex> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>20</f> + <parameter>Представление</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>10</index> + <row> + <formatIndex>18</formatIndex> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>22</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>11</index> + <row> + <formatIndex>18</formatIndex> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>20</f> + <parameter>Описание</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>12</index> + <row> + <columnsID>28fabb70-5f56-4096-8f9b-5eaabd431556</columnsID> + <formatIndex>14</formatIndex> + <c> + <c> + <f>15</f> + </c> + </c> + <c> + <c> + <f>15</f> + </c> + </c> + <c> + <c> + <f>16</f> + </c> + </c> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>17</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>13</index> + <row> + <formatIndex>18</formatIndex> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + <c> + <c> + <f>20</f> + <parameter>Примечание</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>15</index> + <row> + <c> + <i>2</i> + <c> + <f>23</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>[ТекстЕще]</v8:content> + </v8:item> + </tl> + <detailParameter>Расшифровка</detailParameter> + </c> + </c> + <c> + <i>4</i> + <c> + <f>24</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>17</index> + <row> + <c> + <i>2</i> + <c> + <f>25</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Свернуть</v8:content> + </v8:item> + </tl> + <detailParameter>Расшифровка</detailParameter> + </c> + </c> + <c> + <i>4</i> + <c> + <f>26</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>19</index> + <row> + <formatIndex>27</formatIndex> + <c> + <i>2</i> + <c> + <f>18</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>21</index> + <row> + <formatIndex>28</formatIndex> + <c> + <i>2</i> + <c> + <f>29</f> + </c> + </c> + </row> + </rowsItem> + <templateMode>true</templateMode> + <defaultFormatIndex>6</defaultFormatIndex> + <height>22</height> + <vgRows>22</vgRows> + <merge> + <r>0</r> + <c>1</c> + <w>9</w> + </merge> + <merge> + <r>1</r> + <c>1</c> + <w>9</w> + </merge> + <merge> + <r>2</r> + <c>1</c> + <w>9</w> + </merge> + <merge> + <r>3</r> + <c>1</c> + <w>5</w> + </merge> + <merge> + <r>3</r> + <c>7</c> + <w>3</w> + </merge> + <merge> + <r>5</r> + <c>2</c> + <w>7</w> + </merge> + <merge> + <r>6</r> + <c>2</c> + <w>7</w> + </merge> + <merge> + <r>8</r> + <c>2</c> + <w>7</w> + </merge> + <merge> + <r>9</r> + <c>2</c> + <w>7</w> + </merge> + <merge> + <r>11</r> + <c>2</c> + <w>7</w> + </merge> + <merge> + <r>13</r> + <c>2</c> + <w>7</w> + </merge> + <merge> + <r>15</r> + <c>2</c> + <w>1</w> + </merge> + <merge> + <r>15</r> + <c>4</c> + <w>5</w> + </merge> + <merge> + <r>17</r> + <c>2</c> + <w>1</w> + </merge> + <merge> + <r>17</r> + <c>4</c> + <w>5</w> + </merge> + <merge> + <r>19</r> + <c>2</c> + <w>7</w> + </merge> + <merge> + <r>21</r> + <c>2</c> + <w>7</w> + </merge> + <namedItem xsi:type="NamedItemCells"> + <name>Еще</name> + <area> + <type>Rows</type> + <beginRow>15</beginRow> + <endRow>15</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ЕщеРеквизит</name> + <area> + <type>Rows</type> + <beginRow>6</beginRow> + <endRow>6</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ЕщеРеквизитБезРасшифровки</name> + <area> + <type>Rows</type> + <beginRow>9</beginRow> + <endRow>9</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>Разделитель</name> + <area> + <type>Rows</type> + <beginRow>19</beginRow> + <endRow>19</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>РазделительСтрокСписка</name> + <area> + <type>Rows</type> + <beginRow>21</beginRow> + <endRow>21</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>Реквизит</name> + <area> + <type>Rows</type> + <beginRow>5</beginRow> + <endRow>5</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>РеквизитБезРасшифровки</name> + <area> + <type>Rows</type> + <beginRow>8</beginRow> + <endRow>8</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>РеквизитОписание</name> + <area> + <type>Rows</type> + <beginRow>11</beginRow> + <endRow>11</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>РеквизитПримечание</name> + <area> + <type>Rows</type> + <beginRow>13</beginRow> + <endRow>13</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>Свернуть</name> + <area> + <type>Rows</type> + <beginRow>17</beginRow> + <endRow>17</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>Шапка</name> + <area> + <type>Rows</type> + <beginRow>0</beginRow> + <endRow>0</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ШапкаКомментарий</name> + <area> + <type>Rows</type> + <beginRow>1</beginRow> + <endRow>1</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ШапкаНетДанных</name> + <area> + <type>Rows</type> + <beginRow>2</beginRow> + <endRow>3</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <printSettings> + <pageOrientation>Portrait</pageOrientation> + <scale>100</scale> + <collate>true</collate> + <copies>1</copies> + <perPage>1</perPage> + <topMargin>1000</topMargin> + <leftMargin>1000</leftMargin> + <bottomMargin>1000</bottomMargin> + <rightMargin>1000</rightMargin> + <headerSize>1000</headerSize> + <footerSize>1000</footerSize> + <fitToPage>false</fitToPage> + <blackAndWhite>false</blackAndWhite> + <printerName>\\mars.solar.local\PRN-D9-4L-PCL6</printerName> + <paper>9</paper> + <paperSource>15</paperSource> + <pageWidth>0</pageWidth> + <pageHeight>0</pageHeight> + <duplexType>None</duplexType> + <pagePlacementAlternation>Auto</pagePlacementAlternation> + </printSettings> + <font faceName="Arial" height="18" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="12" bold="true" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="16" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="9" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="10" bold="false" italic="false" underline="true" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="6" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <format> + <width>24</width> + </format> + <format> + <width>187</width> + </format> + <format> + <width>98</width> + </format> + <format> + <width>120</width> + </format> + <format> + <width>94</width> + </format> + <format> + <width>72</width> + </format> + <format> + <font>0</font> + </format> + <format> + <font>1</font> + <verticalAlignment>Center</verticalAlignment> + <fillType>Text</fillType> + </format> + <format> + <font>2</font> + </format> + <format> + <verticalAlignment>Top</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + </format> + <format> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + </format> + <format> + <font>3</font> + <width>72</width> + </format> + <format> + <font>3</font> + </format> + <format> + <font>4</font> + </format> + <format> + <font>4</font> + <verticalAlignment>Top</verticalAlignment> + </format> + <format> + <font>4</font> + <width>72</width> + <textPlacement>Wrap</textPlacement> + </format> + <format> + <font>4</font> + <width>72</width> + </format> + <format> + <font>5</font> + </format> + <format> + <font>5</font> + <verticalAlignment>Top</verticalAlignment> + </format> + <format> + <font>5</font> + <verticalAlignment>Top</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Parameter</fillType> + </format> + <format> + <font>5</font> + <verticalAlignment>Top</verticalAlignment> + <textColor>style:ДосьеГиперссылкаЦвет</textColor> + <textPlacement>Wrap</textPlacement> + <fillType>Parameter</fillType> + </format> + <format> + <font>5</font> + <textPlacement>Wrap</textPlacement> + </format> + <format> + <font>6</font> + <horizontalAlignment>Left</horizontalAlignment> + <textColor>style:ДосьеГиперссылкаЦвет</textColor> + <fillType>Template</fillType> + <hyperLink>true</hyperLink> + </format> + <format> + <font>6</font> + <fillType>Text</fillType> + <hyperLink>true</hyperLink> + </format> + <format> + <font>6</font> + <horizontalAlignment>Left</horizontalAlignment> + <textColor>style:ДосьеГиперссылкаЦвет</textColor> + <hyperLink>true</hyperLink> + </format> + <format> + <font>6</font> + <hyperLink>true</hyperLink> + </format> + <format> + <font>5</font> + <height>0</height> + </format> + <format> + <font>7</font> + <height>0</height> + </format> + <format> + <font>7</font> + </format> +</document> \ 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..5f959d965 --- /dev/null +++ b/SSL/src/Reports/ДосьеКонтрагента/Templates/ПредельныеЗначенияРентабельностиИНалоговойНагрузки/Template.mxlx @@ -0,0 +1,13993 @@ +<?xml version="1.0" encoding="UTF-8"?> +<document xmlns="http://v8.1c.ru/8.2/data/spreadsheet" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <languageSettings> + <currentLanguage>ru</currentLanguage> + <defaultLanguage>ru</defaultLanguage> + <languageInfo> + <id>ru</id> + <code>Русский</code> + <description>Русский</description> + </languageInfo> + </languageSettings> + <columns> + <size>20</size> + <columnsItem> + <index>0</index> + <column> + <formatIndex>1</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>1</index> + <column> + <formatIndex>2</formatIndex> + </column> + </columnsItem> + </columns> + <rowsItem> + <index>0</index> + <row> + <c> + <i>1</i> + <c> + <f>3</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Общероссийский классификатор видов экономической деятельности</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>4</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2010</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>4</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2011</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>4</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2012</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>4</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2013</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>5</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2014</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>5</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2015</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>4</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2010</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>4</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2011</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>4</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2012</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>4</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2013</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>5</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2014</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>5</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2015</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>5</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2010</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>5</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2011</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>5</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2012</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>5</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2013</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>5</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2014</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>4</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2015</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>1</index> + <row> + <c> + <i>1</i> + <c> + <f>6</f> + </c> + </c> + <c> + <c> + <f>7</f> + </c> + </c> + <c> + <c> + <f>7</f> + </c> + </c> + <c> + <c> + <f>7</f> + </c> + </c> + <c> + <c> + <f>7</f> + </c> + </c> + <c> + <c> + <f>8</f> + </c> + </c> + <c> + <c> + <f>8</f> + </c> + </c> + <c> + <i>12</i> + <c> + <f>8</f> + </c> + </c> + <c> + <c> + <f>8</f> + </c> + </c> + <c> + <c> + <f>8</f> + </c> + </c> + <c> + <c> + <f>8</f> + </c> + </c> + <c> + <c> + <f>8</f> + </c> + </c> + <c> + <c> + <f>8</f> + </c> + </c> + <c> + <c> + <f>8</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>2</index> + <row> + <c> + <c> + <f>0</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>01</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>0</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сельское хозяйство, охота и предоставление услуг в этих областях</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>18,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>21,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,4</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>3</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>02</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Лесное хозяйство и предоставление услуг в этой области</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>18,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>21,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,4</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>4</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>05</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Рыболовство, рыбоводство и предоставление услуг в этих областях</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>20,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>22,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>21,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>21,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>33,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>59,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>13,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>13,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>18,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>15,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>25,3</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>5</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Добыча каменного угля, бурого угля и торфа</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>33,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>36,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>39,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>39,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>42,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>41,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>33,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>32,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>28,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>24,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>20,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>24,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>14,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>17,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>15,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>13,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>15,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>13,2</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>6</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Добыча сырой нефти и природного газа; предоставление услуг в этих областях</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>33,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>36,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>39,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>39,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>42,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>41,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>33,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>32,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>28,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>24,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>20,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>24,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>14,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>17,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>15,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>13,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>15,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>13,2</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>7</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Добыча урановой и ториевой руд</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>33,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>36,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>39,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>39,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>42,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>41,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>33,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>32,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>28,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>24,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>20,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>24,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>14,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>17,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>15,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>13,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>15,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>13,2</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>8</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>13</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Добыча металлических руд</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>13,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>54,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>64,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>48,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>33,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>36</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>46,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>16,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>20,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>16,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,3</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>9</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>14</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Добыча прочих полезных ископаемых</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>13,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>54,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>64,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>48,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>33,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>36</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>46,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>16,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>20,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>16,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,3</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>10</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>15</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Производство пищевых продуктов, включая напитки</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>15,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>14,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>16,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>19,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>19,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>18,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,0</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>11</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>16</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Производство табачных изделий</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>15,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>14,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>16,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>19,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>19,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>18,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,0</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>12</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>17</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Текстильное производство</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,1</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>13</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>18</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Производство одежды; выделка и крашение меха</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,1</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>14</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>19</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Производство кожи, изделий из кожи и производство обуви</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,8</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>15</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>20</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Обработка древесины и производство изделий из дерева и пробки, кроме мебели</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>13</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,0</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>16</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>21</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Производство целлюлозы, древесной массы, бумаги, картона и изделий из них</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>18,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,9</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>17</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>22</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Издательская и полиграфическая деятельность, тиражирование записанных носителей информации</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>13,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>14,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>13,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>13,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>18,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,9</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>18</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>23</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Производство кокса, нефтепродуктов и ядерных материалов</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>23,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>19,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>13,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>13,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,0</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>19</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>24</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Химическое производство</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>19,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>24,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>22,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>16,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>22,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>33,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>17,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>15,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,1</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>20</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>25</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Производство резиновых и пластмассовых изделий</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,9</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>21</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>26</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Производство прочих неметаллических минеральных продуктов</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,0</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>22</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>27</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Металлургическое производство</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>20,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>17,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>18,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>24,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,1</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>23</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>28</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Производство готовых металлических изделий</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,1</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>24</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>29</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Производство машин и оборудования</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,3</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>25</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>30</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Производство офисного оборудования и вычислительной техники</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,0</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>26</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>31</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Производство электрических машин и электрооборудования</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,0</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>27</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>32</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Производство аппаратуры для радио, телевидения и связи</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,0</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>28</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>33</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Производство изделий медицинской техники, средств измерений, оптических приборов и аппаратуры, часов</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,0</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>29</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>34</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Производство автомобилей, прицепов и полуприцепов</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,0</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>30</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>35</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Производство судов, летательных и космических аппаратов и прочих транспортных средств</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,0</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>31</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>36</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Производство мебели и прочей продукции, не включенной в другие группировки</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>14,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>13,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,7</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>32</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>37</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Обработка вторичного сырья</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>14,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>13,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,7</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>33</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>40</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Производство, передача и распределение электроэнергии, газа, пара и горячей воды</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,8</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>34</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>41</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сбор, очистка и распределение воды</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,8</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>35</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>45</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Строительство</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>13,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,9</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>36</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>50</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Торговля автотранспортными средствами и мотоциклами, их техническое обслуживание и ремонт</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,5</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>37</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>51</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Оптовая торговля, включая торговлю через агентов, кроме торговли автотранспортными средствами и мотоциклами</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>13,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,4</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>38</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>52</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Розничная торговля, кроме торговли автотранспортными средствами и мотоциклами; ремонт бытовых изделий и предметов личного пользования</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,0</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>39</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>55</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Деятельность гостиниц и ресторанов</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,0</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>40</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>60</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Деятельность сухопутного транспорта</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>13,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,6</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>41</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>61</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Деятельность водного транспорта</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>13,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>13,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>13,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,6</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>42</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>62</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Деятельность воздушного транспорта</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>13,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,6</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>43</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>63</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Вспомогательная и дополнительная транспортная деятельность</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>13,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,6</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>44</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>64</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Связь</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>15,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>14,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>14,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>14,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>12,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>27,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>24,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>26,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>26</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>23,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>21,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,5</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>45</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>65</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Финансовое посредничество</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,1</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>46</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>66</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Страхование</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,1</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>47</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>67</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Вспомогательная деятельность в сфере финансового посредничества и страхования</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,1</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>48</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>70</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Операции с недвижимым имуществом</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>19,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>22,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>18,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>17,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>17,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>17,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,5</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>49</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>71</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Аренда машин и оборудования без оператора; прокат бытовых изделий и предметов личного пользования</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>19,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>22,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>18,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>17,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>17,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>17,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,5</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>50</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>72</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Деятельность, связанная с использованием вычислительной техники и информационных технологий</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>19,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>22,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>18,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>17,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>17,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>17,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,5</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>51</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>73</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Научные исследования и разработки</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>19,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>22,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>18,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>17,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>17,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>17,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,5</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>52</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>74</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Предоставление прочих видов услуг</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>19,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>22,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>18,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>17,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>17,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>17,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>10,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,5</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>53</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>75</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Государственное управление и обеспечение военной безопасности; обязательное социальное обеспечение</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,7</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>54</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>80</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Образование</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,9</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>55</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>85</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Здравоохранение и предоставление социальных услуг</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,2</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>4,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>2,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,6</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>56</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>90</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Удаление сточных вод, отходов и аналогичная деятельность</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>22,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>23,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>26,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>26,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>25,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>25,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,8</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>57</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>91</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Деятельность общественных объединений</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>22,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>23,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>26,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>26,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>25,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>25,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,8</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>58</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>92</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Деятельность по организации отдыха и развлечений, культуры и спорта</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>23,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>26,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>29,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>30,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>29,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>29,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,8</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>59</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>93</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Предоставление персональных услуг</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>22,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>23,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>26,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>26,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>25,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>25,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,1</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>0,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>1,8</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>60</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>95</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Предоставление услуг по ведению домашнего хозяйства</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,0</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>61</index> + <row> + <c> + <c> + <f>1</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>99</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Деятельность экстерриториальных организаций</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,4</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>11,5</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,7</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>8,6</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>9,3</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>7,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>6,8</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,0</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>7</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>3,9</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>9</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>5,0</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>62</index> + <row> + <c> + <i>1</i> + <c> + <f>0</f> + </c> + </c> + <c> + <c> + <f>0</f> + </c> + </c> + <c> + <c> + <f>0</f> + </c> + </c> + <c> + <c> + <f>0</f> + </c> + </c> + <c> + <c> + <f>0</f> + </c> + </c> + <c> + <c> + <f>8</f> + </c> + </c> + <c> + <c> + <f>8</f> + </c> + </c> + <c> + <c> + <f>0</f> + </c> + </c> + <c> + <c> + <f>0</f> + </c> + </c> + <c> + <c> + <f>0</f> + </c> + </c> + <c> + <c> + <f>0</f> + </c> + </c> + <c> + <c> + <f>8</f> + </c> + </c> + <c> + <c> + <f>8</f> + </c> + </c> + <c> + <c> + <f>8</f> + </c> + </c> + <c> + <c> + <f>8</f> + </c> + </c> + <c> + <c> + <f>8</f> + </c> + </c> + <c> + <c> + <f>8</f> + </c> + </c> + <c> + <c> + <f>8</f> + </c> + </c> + </row> + </rowsItem> + <templateMode>true</templateMode> + <defaultFormatIndex>8</defaultFormatIndex> + <height>63</height> + <vgRows>63</vgRows> + <namedItem xsi:type="NamedItemCells"> + <name>Классификатор</name> + <area> + <type>Rectangle</type> + <beginRow>2</beginRow> + <endRow>61</endRow> + <beginColumn>0</beginColumn> + <endColumn>0</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>НалоговаяНагрузка</name> + <area> + <type>Rectangle</type> + <beginRow>0</beginRow> + <endRow>0</endRow> + <beginColumn>2</beginColumn> + <endColumn>7</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>РентабельностьАктивов</name> + <area> + <type>Rectangle</type> + <beginRow>0</beginRow> + <endRow>0</endRow> + <beginColumn>14</beginColumn> + <endColumn>19</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>РентабельностьПродаж</name> + <area> + <type>Rectangle</type> + <beginRow>0</beginRow> + <endRow>0</endRow> + <beginColumn>8</beginColumn> + <endColumn>13</endColumn> + </area> + </namedItem> + <font faceName="Arial" height="10" bold="true" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="8" bold="true" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <format> + <width>58</width> + </format> + <format> + <width>753</width> + </format> + <format> + <font>0</font> + </format> + <format> + <horizontalAlignment>Center</horizontalAlignment> + </format> + <format> + <width>72</width> + <horizontalAlignment>Center</horizontalAlignment> + </format> + <format> + <font>1</font> + </format> + <format> + <width>72</width> + <horizontalAlignment>Right</horizontalAlignment> + </format> + <format> + <width>72</width> + </format> + <format> + <horizontalAlignment>Right</horizontalAlignment> + </format> + <format> + <width>2798</width> + </format> +</document> \ 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..1a5e0d8ba --- /dev/null +++ b/SSL/src/Reports/ДосьеКонтрагента/Templates/Проверки/Template.mxlx @@ -0,0 +1,1455 @@ +<?xml version="1.0" encoding="UTF-8"?> +<document xmlns="http://v8.1c.ru/8.2/data/spreadsheet" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <languageSettings> + <currentLanguage>ru</currentLanguage> + <defaultLanguage>ru</defaultLanguage> + <languageInfo> + <id>ru</id> + <code>Русский</code> + <description>Русский</description> + </languageInfo> + </languageSettings> + <columns> + <size>11</size> + <columnsItem> + <index>0</index> + <column> + <formatIndex>1</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>1</index> + <column> + <formatIndex>2</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>10</index> + <column> + <formatIndex>3</formatIndex> + </column> + </columnsItem> + </columns> + <columns> + <id>3bd17d50-febf-4967-9292-76505d00c354</id> + <size>11</size> + <columnsItem> + <index>0</index> + <column> + <formatIndex>1</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>8</index> + <column> + <formatIndex>4</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>9</index> + <column> + <formatIndex>4</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>10</index> + <column> + <formatIndex>5</formatIndex> + </column> + </columnsItem> + </columns> + <columns> + <id>25c28d10-9a53-4907-bb59-bbc4be93975e</id> + <size>12</size> + <columnsItem> + <index>0</index> + <column> + <formatIndex>1</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>1</index> + <column> + <formatIndex>6</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>2</index> + <column> + <formatIndex>2</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>10</index> + <column> + <formatIndex>3</formatIndex> + </column> + </columnsItem> + </columns> + <rowsItem> + <index>0</index> + <row> + <columnsID>3bd17d50-febf-4967-9292-76505d00c354</columnsID> + <c> + <c> + <f>7</f> + </c> + </c> + <c> + <c> + <f>8</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Проверки государственными органами</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>1</index> + <row> + <columnsID>3bd17d50-febf-4967-9292-76505d00c354</columnsID> + <c> + <c> + <f>9</f> + </c> + </c> + <c> + <c> + <f>10</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>По данным Единого реестра проверок</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>2</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>12</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сведения о результатах проверок отсутствуют</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>3</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>13</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>4</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>14</f> + <parameter>ПериодПроверки</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>5</index> + <row> + <formatIndex>15</formatIndex> + <c> + <c> + <f>15</f> + </c> + </c> + <c> + <c> + <f>16</f> + <parameter>Проверка</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>6</index> + <row> + <formatIndex>17</formatIndex> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>7</index> + <row> + <formatIndex>15</formatIndex> + <c> + <c> + <f>15</f> + </c> + </c> + <c> + <c> + <f>15</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Адрес</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>18</f> + <parameter>АдресПроверки</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>8</index> + <row> + <formatIndex>17</formatIndex> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>9</index> + <row> + <formatIndex>15</formatIndex> + <c> + <c> + <f>15</f> + </c> + </c> + <c> + <c> + <f>15</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Длительность</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>18</f> + <parameter>Длительность</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>10</index> + <row> + <formatIndex>17</formatIndex> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>11</index> + <row> + <formatIndex>15</formatIndex> + <c> + <c> + <f>15</f> + </c> + </c> + <c> + <c> + <f>15</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Цель</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>18</f> + <parameter>ЦельПроверки</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>12</index> + <row> + <formatIndex>17</formatIndex> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>13</index> + <row> + <formatIndex>15</formatIndex> + <c> + <c> + <f>15</f> + </c> + </c> + <c> + <c> + <f>15</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Результат</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>18</f> + <parameter>Результат</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>14</index> + <row> + <formatIndex>11</formatIndex> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>19</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>16</index> + <row> + <formatIndex>20</formatIndex> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>17</index> + <row> + <c> + <i>1</i> + <c> + <f>21</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Номер нарушения</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>22</f> + <parameter>НомерНарушения</parameter> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>24</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>18</index> + <row> + <formatIndex>17</formatIndex> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>19</index> + <row> + <c> + <i>1</i> + <c> + <f>21</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Нарушение</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>25</f> + <parameter>Нарушение</parameter> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>24</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>20</index> + <row> + <formatIndex>17</formatIndex> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>21</index> + <row> + <c> + <i>1</i> + <c> + <f>21</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Нарушенный акт</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>25</f> + <parameter>НарушенныйАкт</parameter> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>24</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>22</index> + <row> + <formatIndex>17</formatIndex> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>23</index> + <row> + <c> + <i>1</i> + <c> + <f>21</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Предписание</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>25</f> + <parameter>Предписание</parameter> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>24</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>24</index> + <row> + <formatIndex>17</formatIndex> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>25</index> + <row> + <c> + <i>1</i> + <c> + <f>21</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Исполнение</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>25</f> + <parameter>Исполнение</parameter> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>23</f> + </c> + </c> + <c> + <c> + <f>24</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>27</index> + <row> + <columnsID>25c28d10-9a53-4907-bb59-bbc4be93975e</columnsID> + <formatIndex>17</formatIndex> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <i>4</i> + <c> + <f>11</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>28</index> + <row> + <columnsID>25c28d10-9a53-4907-bb59-bbc4be93975e</columnsID> + <c> + <i>1</i> + <c> + <f>26</f> + </c> + </c> + <c> + <c> + <f>27</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Показать нарушения</v8:content> + </v8:item> + </tl> + <detailParameter>Расшифровка</detailParameter> + </c> + </c> + <c> + <i>4</i> + <c> + <f>28</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>30</index> + <row> + <columnsID>25c28d10-9a53-4907-bb59-bbc4be93975e</columnsID> + <formatIndex>17</formatIndex> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <c> + <f>11</f> + </c> + </c> + <c> + <i>4</i> + <c> + <f>11</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>31</index> + <row> + <columnsID>25c28d10-9a53-4907-bb59-bbc4be93975e</columnsID> + <c> + <i>1</i> + <c> + <f>26</f> + </c> + </c> + <c> + <c> + <f>27</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Свернуть</v8:content> + </v8:item> + </tl> + <detailParameter>Расшифровка</detailParameter> + </c> + </c> + <c> + <i>4</i> + <c> + <f>28</f> + </c> + </c> + </row> + </rowsItem> + <templateMode>true</templateMode> + <defaultFormatIndex>29</defaultFormatIndex> + <height>32</height> + <vgRows>32</vgRows> + <merge> + <r>0</r> + <c>1</c> + <w>9</w> + </merge> + <merge> + <r>1</r> + <c>1</c> + <w>9</w> + </merge> + <merge> + <r>2</r> + <c>1</c> + <w>9</w> + </merge> + <merge> + <r>4</r> + <c>1</c> + <w>9</w> + </merge> + <merge> + <r>5</r> + <c>1</c> + <w>9</w> + </merge> + <merge> + <r>6</r> + <c>2</c> + <w>8</w> + </merge> + <merge> + <r>7</r> + <c>2</c> + <w>8</w> + </merge> + <merge> + <r>8</r> + <c>2</c> + <w>8</w> + </merge> + <merge> + <r>9</r> + <c>2</c> + <w>8</w> + </merge> + <merge> + <r>10</r> + <c>2</c> + <w>8</w> + </merge> + <merge> + <r>11</r> + <c>2</c> + <w>8</w> + </merge> + <merge> + <r>12</r> + <c>2</c> + <w>8</w> + </merge> + <merge> + <r>13</r> + <c>2</c> + <w>8</w> + </merge> + <merge> + <r>16</r> + <c>2</c> + <w>8</w> + </merge> + <merge> + <r>17</r> + <c>2</c> + <w>8</w> + </merge> + <merge> + <r>18</r> + <c>2</c> + <w>8</w> + </merge> + <merge> + <r>19</r> + <c>2</c> + <w>8</w> + </merge> + <merge> + <r>20</r> + <c>2</c> + <w>8</w> + </merge> + <merge> + <r>21</r> + <c>2</c> + <w>8</w> + </merge> + <merge> + <r>22</r> + <c>2</c> + <w>8</w> + </merge> + <merge> + <r>23</r> + <c>2</c> + <w>8</w> + </merge> + <merge> + <r>24</r> + <c>2</c> + <w>8</w> + </merge> + <merge> + <r>25</r> + <c>2</c> + <w>8</w> + </merge> + <merge> + <r>27</r> + <c>2</c> + <w>1</w> + </merge> + <merge> + <r>27</r> + <c>4</c> + <w>7</w> + </merge> + <merge> + <r>28</r> + <c>2</c> + <w>1</w> + </merge> + <merge> + <r>28</r> + <c>4</c> + <w>7</w> + </merge> + <merge> + <r>30</r> + <c>2</c> + <w>1</w> + </merge> + <merge> + <r>30</r> + <c>4</c> + <w>7</w> + </merge> + <merge> + <r>31</r> + <c>2</c> + <w>1</w> + </merge> + <merge> + <r>31</r> + <c>4</c> + <w>7</w> + </merge> + <namedItem xsi:type="NamedItemCells"> + <name>Исполнение</name> + <area> + <type>Rows</type> + <beginRow>24</beginRow> + <endRow>25</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>Нарушение</name> + <area> + <type>Rows</type> + <beginRow>18</beginRow> + <endRow>19</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>НарушенныйАкт</name> + <area> + <type>Rows</type> + <beginRow>20</beginRow> + <endRow>21</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>НомерНарушения</name> + <area> + <type>Rows</type> + <beginRow>16</beginRow> + <endRow>17</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ОписаниеПроверки</name> + <area> + <type>Rows</type> + <beginRow>6</beginRow> + <endRow>9</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ПериодПроверки</name> + <area> + <type>Rows</type> + <beginRow>4</beginRow> + <endRow>4</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ПоказатьНарушения</name> + <area> + <type>Rows</type> + <beginRow>27</beginRow> + <endRow>28</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + <columnsID>25c28d10-9a53-4907-bb59-bbc4be93975e</columnsID> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>Предписание</name> + <area> + <type>Rows</type> + <beginRow>22</beginRow> + <endRow>23</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>Проверка</name> + <area> + <type>Rows</type> + <beginRow>5</beginRow> + <endRow>5</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>Разделитель</name> + <area> + <type>Rows</type> + <beginRow>14</beginRow> + <endRow>14</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>РезультатПроверки</name> + <area> + <type>Rows</type> + <beginRow>12</beginRow> + <endRow>13</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>СвернутьНарушения</name> + <area> + <type>Rows</type> + <beginRow>30</beginRow> + <endRow>31</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + <columnsID>25c28d10-9a53-4907-bb59-bbc4be93975e</columnsID> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ЦельПроверки</name> + <area> + <type>Rows</type> + <beginRow>10</beginRow> + <endRow>11</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>Шапка</name> + <area> + <type>Rows</type> + <beginRow>0</beginRow> + <endRow>1</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ШапкаНетДанных</name> + <area> + <type>Rows</type> + <beginRow>2</beginRow> + <endRow>2</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <printSettings> + <pageOrientation>Portrait</pageOrientation> + <scale>100</scale> + <collate>true</collate> + <copies>1</copies> + <perPage>1</perPage> + <topMargin>1000</topMargin> + <leftMargin>1000</leftMargin> + <bottomMargin>1000</bottomMargin> + <rightMargin>1000</rightMargin> + <headerSize>1000</headerSize> + <footerSize>1000</footerSize> + <fitToPage>false</fitToPage> + <blackAndWhite>false</blackAndWhite> + <printerName>\\mars.solar.local\PRN-D9-4L-PCL6</printerName> + <paper>9</paper> + <paperSource>15</paperSource> + <pageWidth>0</pageWidth> + <pageHeight>0</pageHeight> + <duplexType>None</duplexType> + <pagePlacementAlternation>Auto</pagePlacementAlternation> + </printSettings> + <font faceName="Arial" height="18" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="12" bold="true" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="16" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="8" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="10" bold="true" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="10" bold="false" italic="false" underline="true" strikeout="false" kind="Absolute"/> + <format> + <width>24</width> + </format> + <format> + <width>145</width> + </format> + <format> + <width>73</width> + </format> + <format> + <width>96</width> + </format> + <format> + <width>97</width> + </format> + <format> + <width>125</width> + <hidden>true</hidden> + </format> + <format> + <font>0</font> + </format> + <format> + <font>1</font> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + </format> + <format> + <font>2</font> + </format> + <format> + <font>3</font> + <width>376</width> + <verticalAlignment>Top</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <textPlacement>Wrap</textPlacement> + </format> + <format> + <font>4</font> + </format> + <format> + <font>5</font> + <verticalAlignment>Center</verticalAlignment> + <format> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ДФ='MMMM yyyy'</v8:content> + </v8:item> + </format> + </format> + <format> + <font>6</font> + <verticalAlignment>Center</verticalAlignment> + <format> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ДФ='MMMM yyyy'</v8:content> + </v8:item> + </format> + </format> + <format> + <font>6</font> + <verticalAlignment>Center</verticalAlignment> + <fillType>Parameter</fillType> + <format> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ДФ='MMMM yyyy'</v8:content> + </v8:item> + </format> + </format> + <format> + <font>4</font> + <verticalAlignment>Top</verticalAlignment> + </format> + <format> + <font>6</font> + <verticalAlignment>Top</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Parameter</fillType> + </format> + <format> + <font>4</font> + <height>20</height> + </format> + <format> + <font>4</font> + <verticalAlignment>Top</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Parameter</fillType> + </format> + <format> + <font>4</font> + <width>72</width> + </format> + <format> + <font>4</font> + <height>0</height> + </format> + <format> + <font>4</font> + <width>145</width> + <verticalAlignment>Top</verticalAlignment> + </format> + <format> + <font>4</font> + <width>72</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Top</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Parameter</fillType> + </format> + <format> + <font>4</font> + <width>72</width> + <verticalAlignment>Top</verticalAlignment> + </format> + <format> + <font>4</font> + <width>73</width> + <verticalAlignment>Top</verticalAlignment> + </format> + <format> + <font>4</font> + <width>72</width> + <verticalAlignment>Top</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Parameter</fillType> + </format> + <format> + <font>7</font> + <horizontalAlignment>Left</horizontalAlignment> + <hyperLink>true</hyperLink> + </format> + <format> + <font>7</font> + <width>145</width> + <horizontalAlignment>Left</horizontalAlignment> + <textColor>style:ДосьеРасшифровкаЦвет</textColor> + <hyperLink>true</hyperLink> + </format> + <format> + <font>7</font> + <horizontalAlignment>Center</horizontalAlignment> + <textColor>style:ДосьеРасшифровкаЦвет</textColor> + <hyperLink>true</hyperLink> + </format> + <format> + <width>72</width> + </format> +</document> \ 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..c9da01652 --- /dev/null +++ b/SSL/src/Reports/ДосьеКонтрагента/Templates/ФинансовыйАнализ/Template.mxlx @@ -0,0 +1,5222 @@ +<?xml version="1.0" encoding="UTF-8"?> +<document xmlns="http://v8.1c.ru/8.2/data/spreadsheet" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <languageSettings> + <currentLanguage>ru</currentLanguage> + <defaultLanguage>ru</defaultLanguage> + <languageInfo> + <id>ru</id> + <code>Русский</code> + <description>Русский</description> + </languageInfo> + </languageSettings> + <columns> + <size>6</size> + <columnsItem> + <index>0</index> + <column> + <formatIndex>1</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>1</index> + <column> + <formatIndex>2</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>2</index> + <column> + <formatIndex>3</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>3</index> + <column> + <formatIndex>4</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>4</index> + <column> + <formatIndex>4</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>5</index> + <column> + <formatIndex>4</formatIndex> + </column> + </columnsItem> + </columns> + <columns> + <id>f7121de8-e240-48bb-b53a-2138bd302e1a</id> + <size>5</size> + <columnsItem> + <index>0</index> + <column> + <formatIndex>5</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>1</index> + <column> + <formatIndex>2</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>2</index> + <column> + <formatIndex>6</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>3</index> + <column> + <formatIndex>6</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>4</index> + <column> + <formatIndex>6</formatIndex> + </column> + </columnsItem> + </columns> + <columns> + <id>5c37ea7f-3f72-4ce6-aa93-ed0588a70b95</id> + <size>9</size> + <columnsItem> + <index>0</index> + <column> + <formatIndex>5</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>1</index> + <column> + <formatIndex>7</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>2</index> + <column> + <formatIndex>8</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>3</index> + <column> + <formatIndex>9</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>4</index> + <column> + <formatIndex>8</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>5</index> + <column> + <formatIndex>9</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>6</index> + <column> + <formatIndex>8</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>7</index> + <column> + <formatIndex>9</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>8</index> + <column> + <formatIndex>10</formatIndex> + </column> + </columnsItem> + </columns> + <columns> + <id>37006c65-2b7f-4f85-8374-bf0a0c619aef</id> + <size>11</size> + <columnsItem> + <index>0</index> + <column> + <formatIndex>1</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>1</index> + <column> + <formatIndex>11</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>2</index> + <column> + <formatIndex>3</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>3</index> + <column> + <formatIndex>4</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>4</index> + <column> + <formatIndex>4</formatIndex> + </column> + </columnsItem> + <columnsItem> + <index>5</index> + <column> + <formatIndex>4</formatIndex> + </column> + </columnsItem> + </columns> + <rowsItem> + <index>0</index> + <row> + <c> + <c> + <f>12</f> + </c> + </c> + <c> + <c> + <f>13</f> + <parameter>ТекстЗаголовка</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>1</index> + <row> + <formatIndex>14</formatIndex> + <c> + <c> + <f>14</f> + </c> + </c> + <c> + <c> + <f>15</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>2</index> + <row> + <formatIndex>14</formatIndex> + <c> + <c> + <f>14</f> + </c> + </c> + <c> + <c> + <f>16</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>3</index> + <row> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>18</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Оценка риска банкротства</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>8</index> + <row> + <c> + <i>2</i> + <c> + <f>19</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Индекс Альтмана Z = [ИндексАльтмана]</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>9</index> + <row> + <c> + <i>2</i> + <c> + <f>20</f> + <parameter>ПояснениеОценкиРискБанкротства</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>14</index> + <row> + <c> + <i>1</i> + <c> + <f>21</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Для оценки риска банкротства используется четырехфакторная модель Альтмана для непроизводственных предприятий. В рамках этой модели показателем риска банкротства является значение индекса Альтмана (Z), который определяется по следующей формуле:</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>15</index> + <row> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>23</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Z = 6.56 * T1 + 3.26 * T2 + 6.72 * T3 + 1.05 * T4</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>16</index> + <row> + <c> + <i>1</i> + <c> + <f>24</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Если Z ≤ 1.1, есть существенная вероятность банкротства предприятия. +Если 1.1 < Z < 2.6, вероятность банкротства предприятия невысока, но не исключается. +Если Z ≥ 2.6, финансовое состояние предприятия устойчивое, вероятность банкротства низкая.</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>17</index> + <row> + <c> + <i>1</i> + <c> + <f>0</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>18</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>24</formatIndex> + <c> + <i>1</i> + <c> + <f>25</f> + </c> + </c> + <c> + <c> + <f>26</f> + <parameter>Год_1</parameter> + </c> + </c> + <c> + <c> + <f>27</f> + <parameter>Год_2</parameter> + </c> + </c> + <c> + <c> + <f>27</f> + <parameter>Год_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>19</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>14</formatIndex> + <c> + <i>1</i> + <c> + <f>28</f> + </c> + </c> + <c> + <i>3</i> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>29</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>20</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>30</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>T1 (оборотный капитал / активы)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РискБанкротства1_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РискБанкротства1_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РискБанкротства1_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>21</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>32</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>T2 (нераспределенная прибыль / активы)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РискБанкротства2_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РискБанкротства2_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РискБанкротства2_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>22</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>32</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>T3 (EBIT / активы)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РискБанкротства3_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РискБанкротства3_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РискБанкротства3_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>23</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>32</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>T4 (собственный капитал / заемный капитал)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РискБанкротства4_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РискБанкротства4_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РискБанкротства4_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>24</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Индекс Альтмана Z</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>ИндексАльтмана_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>ИндексАльтмана_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>ИндексАльтмана_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>25</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>14</formatIndex> + <c> + <i>1</i> + <c> + <f>34</f> + </c> + </c> + <c> + <i>3</i> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>29</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>27</index> + <row> + <c> + <i>1</i> + <c> + <f>21</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Для оценки риска банкротства используется пятифакторная модель Альтмана для производственных предприятий. В рамках этой модели показателем риска банкротства является значение индекса Альтмана (Z), который определяется по следующей формуле:</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>28</index> + <row> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>23</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Z = 0.717 * T1 + 0.847 * T2 + 3.107 * T3 + 0.42 * T4 + 0.995 * T5</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>29</index> + <row> + <c> + <i>1</i> + <c> + <f>24</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Если Z ≤ 1.23, есть существенная вероятность банкротства предприятия. +Если 1.23 < Z < 2.9, вероятность банкротства предприятия невысока, но не исключается. +Если Z ≥ 2.9, финансовое состояние предприятия устойчивое, вероятность банкротства низкая.</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>30</index> + <row> + <c> + <i>1</i> + <c> + <f>0</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>31</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>24</formatIndex> + <c> + <i>1</i> + <c> + <f>25</f> + </c> + </c> + <c> + <c> + <f>26</f> + <parameter>Год_1</parameter> + </c> + </c> + <c> + <c> + <f>27</f> + <parameter>Год_2</parameter> + </c> + </c> + <c> + <c> + <f>27</f> + <parameter>Год_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>32</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>14</formatIndex> + <c> + <i>1</i> + <c> + <f>28</f> + </c> + </c> + <c> + <i>3</i> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>29</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>33</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>30</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>T1 (оборотный капитал / активы)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РискБанкротства1_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РискБанкротства1_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РискБанкротства1_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>34</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>32</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>T2 (нераспределенная прибыль / активы)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РискБанкротства2_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РискБанкротства2_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РискБанкротства2_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>35</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>32</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>T3 (EBIT / активы)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РискБанкротства3_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РискБанкротства3_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РискБанкротства3_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>36</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>32</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>T4 (собственный капитал / заемный капитал)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РискБанкротства4_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РискБанкротства4_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РискБанкротства4_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>37</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>32</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>T5 (выручка / активы)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РискБанкротства5_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РискБанкротства5_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РискБанкротства5_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>38</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Индекс Альтмана Z</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>ИндексАльтмана_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>ИндексАльтмана_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>ИндексАльтмана_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>39</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>14</formatIndex> + <c> + <i>1</i> + <c> + <f>34</f> + </c> + </c> + <c> + <i>3</i> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>29</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>41</index> + <row> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>18</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Кредитоспособность</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>46</index> + <row> + <c> + <i>2</i> + <c> + <f>19</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Оценка кредитоспособности S = [Кредитоспособность]</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>47</index> + <row> + <c> + <i>2</i> + <c> + <f>20</f> + <parameter>ПояснениеОценкиКредитоспособность</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>52</index> + <row> + <c> + <i>1</i> + <c> + <f>21</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Для определения финансового состояния и кредитоспособности заемщика используется анализ отчетности по методике Сбербанка РФ (утверждена Комитетом Сбербанка России по предоставлению кредитов и инвестиций от 30 июня 2006 г. N 285-5-р). По данным отчетности определяются финансовые коэффициенты и рентабельность. В зависимости от значений каждый показатель относится к первой, второй или третьей категории. Итоговый показатель кредитоспособности заемщика определяется путем суммирования значений категорий отдельных показателей, взятых с весами категории показателей. Показатель кредитоспособности S рассчитывается по формуле:</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>53</index> + <row> + <c> + <c> + <f>35</f> + </c> + </c> + <c> + <c> + <f>23</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>S = сумма значений категорий по всем показателям, умноженных на веса. При этом рентабельность продукции +первоклассного заемщика должна соответствовать 1 категории, второго класса — 2 категории.</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>54</index> + <row> + <c> + <i>1</i> + <c> + <f>24</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Если S ≤ 1.25, кредитоспособность заемщика не вызывает сомнений. +Если 1.25 < S ≤ 2.35, кредитование заемщика требует взвешенного подхода. +Если S > 2.35, кредитование связано с повышенным риском.</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>55</index> + <row> + <c> + <i>1</i> + <c> + <f>36</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Окончательное решение об отнесении заемщика к определенному классу кредитоспособности, а также о выдаче +кредита принимается банком.</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>56</index> + <row> + <c> + <i>1</i> + <c> + <f>0</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>57</index> + <row> + <columnsID>5c37ea7f-3f72-4ce6-aa93-ed0588a70b95</columnsID> + <formatIndex>24</formatIndex> + <c> + <i>1</i> + <c> + <f>25</f> + </c> + </c> + <c> + <c> + <f>37</f> + <parameter>Год_1</parameter> + </c> + </c> + <c> + <i>4</i> + <c> + <f>38</f> + <parameter>Год_2</parameter> + </c> + </c> + <c> + <i>6</i> + <c> + <f>38</f> + <parameter>Год_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>58</index> + <row> + <columnsID>5c37ea7f-3f72-4ce6-aa93-ed0588a70b95</columnsID> + <formatIndex>14</formatIndex> + <c> + <i>1</i> + <c> + <f>28</f> + </c> + </c> + <c> + <c> + <f>39</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Значение</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>40</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Категория</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>41</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Значение</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>40</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Категория</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>41</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Значение</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>40</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Категория</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>40</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Вес</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>59</index> + <row> + <columnsID>5c37ea7f-3f72-4ce6-aa93-ed0588a70b95</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>30</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Коэффициент абсолютной ликвидности</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>Кредитоспособность1_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>КредитоспособностьКатегория1_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>Кредитоспособность1_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>КредитоспособностьКатегория1_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>Кредитоспособность1_3</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>КредитоспособностьКатегория1_3</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>КредитоспособностьВесКатегории1</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>60</index> + <row> + <columnsID>5c37ea7f-3f72-4ce6-aa93-ed0588a70b95</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>32</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Коэффициент быстрой ликвидности</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>Кредитоспособность2_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>КредитоспособностьКатегория2_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>Кредитоспособность2_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>КредитоспособностьКатегория2_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>Кредитоспособность2_3</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>КредитоспособностьКатегория2_3</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>КредитоспособностьВесКатегории2</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>61</index> + <row> + <columnsID>5c37ea7f-3f72-4ce6-aa93-ed0588a70b95</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>32</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Коэффициент текущей ликвидности</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>Кредитоспособность3_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>КредитоспособностьКатегория3_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>Кредитоспособность3_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>КредитоспособностьКатегория3_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>Кредитоспособность3_3</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>КредитоспособностьКатегория3_3</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>КредитоспособностьВесКатегории3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>62</index> + <row> + <columnsID>5c37ea7f-3f72-4ce6-aa93-ed0588a70b95</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>32</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Коэффициент наличия собственных средств</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>Кредитоспособность4_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>КредитоспособностьКатегория4_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>Кредитоспособность4_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>КредитоспособностьКатегория4_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>Кредитоспособность4_3</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>КредитоспособностьКатегория4_3</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>КредитоспособностьВесКатегории4</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>63</index> + <row> + <columnsID>5c37ea7f-3f72-4ce6-aa93-ed0588a70b95</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>32</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Рентабельность продукции</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>Кредитоспособность5_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>КредитоспособностьКатегория5_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>Кредитоспособность5_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>КредитоспособностьКатегория5_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>Кредитоспособность5_3</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>КредитоспособностьКатегория5_3</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>КредитоспособностьВесКатегории5</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>64</index> + <row> + <columnsID>5c37ea7f-3f72-4ce6-aa93-ed0588a70b95</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>32</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Рентабельность организации</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>Кредитоспособность6_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>КредитоспособностьКатегория6_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>Кредитоспособность6_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>КредитоспособностьКатегория6_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>Кредитоспособность6_3</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>КредитоспособностьКатегория6_3</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>КредитоспособностьВесКатегории6</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>65</index> + <row> + <columnsID>5c37ea7f-3f72-4ce6-aa93-ed0588a70b95</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Показатель кредитоспособности S</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>42</f> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>Кредитоспособность_1</parameter> + </c> + </c> + <c> + <c> + <f>42</f> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>Кредитоспособность_2</parameter> + </c> + </c> + <c> + <c> + <f>42</f> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>Кредитоспособность_3</parameter> + </c> + </c> + <c> + <c> + <f>42</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>66</index> + <row> + <columnsID>5c37ea7f-3f72-4ce6-aa93-ed0588a70b95</columnsID> + <formatIndex>14</formatIndex> + <c> + <i>1</i> + <c> + <f>34</f> + </c> + </c> + <c> + <i>3</i> + <c> + <f>43</f> + </c> + </c> + <c> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>43</f> + </c> + </c> + <c> + <c> + <f>29</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>68</index> + <row> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>18</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Рентабельность активов</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>73</index> + <row> + <c> + <i>2</i> + <c> + <f>19</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Рентабельность активов [РентабельностьАктивов] %</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>74</index> + <row> + <c> + <i>2</i> + <c> + <f>20</f> + <parameter>ПояснениеОценкиРентабельностьАктивов</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>78</index> + <row> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>18</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Рентабельность активов</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>83</index> + <row> + <c> + <i>2</i> + <c> + <f>19</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Рентабельность активов [РентабельностьАктивов] %</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>84</index> + <row> + <c> + <i>2</i> + <c> + <f>20</f> + <parameter>ПояснениеОценкиРентабельностьАктивов</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>89</index> + <row> + <c> + <i>1</i> + <c> + <f>21</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Рентабельность активов является показателем способности компании эффективно получать прибыль. Сравнение рентабельности активов со средней по отрасли позволяет сделать вывод о конкурентоспособности и +успешности компании на рынке. Низкие показатели рентабельности (ниже 90 % от средней рентабельности по +отрасли) являются одним из критериев для назначения выездной налоговой проверки.</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>90</index> + <row> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>23</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Рентабельность активов = чистая прибыль / активы.</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>91</index> + <row> + <c> + <i>1</i> + <c> + <f>0</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>92</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>24</formatIndex> + <c> + <i>1</i> + <c> + <f>44</f> + <parameter>ВалютаОтчетности</parameter> + </c> + </c> + <c> + <c> + <f>26</f> + <parameter>Год_1</parameter> + </c> + </c> + <c> + <c> + <f>27</f> + <parameter>Год_2</parameter> + </c> + </c> + <c> + <c> + <f>27</f> + <parameter>Год_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>93</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>14</formatIndex> + <c> + <i>1</i> + <c> + <f>28</f> + </c> + </c> + <c> + <i>3</i> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>29</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>94</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>30</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Чистая прибыль</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьАктивов1_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьАктивов1_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьАктивов1_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>95</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>32</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Активы</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьАктивов2_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьАктивов2_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьАктивов2_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>96</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>32</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Средняя рентабельность активов по отрасли, %</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьАктивов3_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьАктивов3_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьАктивов3_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>97</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>32</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Предельная рентабельность (90% от средней), %</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьАктивов4_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьАктивов4_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьАктивов4_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>98</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Рентабельность активов, %</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьАктивов_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьАктивов_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьАктивов_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>99</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>14</formatIndex> + <c> + <i>1</i> + <c> + <f>45</f> + <parameter>ПояснениеРасчета</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>100</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>14</formatIndex> + <c> + <i>1</i> + <c> + <f>34</f> + </c> + </c> + <c> + <i>3</i> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>29</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>102</index> + <row> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>18</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Рентабельность продаж</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>107</index> + <row> + <c> + <i>2</i> + <c> + <f>19</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Рентабельность продаж [РентабельностьПродаж] %</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>108</index> + <row> + <c> + <i>2</i> + <c> + <f>20</f> + <parameter>ПояснениеОценкиРентабельностьПродаж</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>112</index> + <row> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>18</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Рентабельность продаж</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>117</index> + <row> + <c> + <i>2</i> + <c> + <f>19</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Рентабельность продаж [РентабельностьПродаж] %</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>118</index> + <row> + <c> + <i>2</i> + <c> + <f>20</f> + <parameter>ПояснениеОценкиРентабельностьПродаж</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>123</index> + <row> + <c> + <i>1</i> + <c> + <f>21</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Рентабельность проданных товаров, продукции, работ, услуг является индикатором способности компании контролировать издержки. Сравнение рентабельности продаж со средней по отрасли позволяет сделать вывод о конкурентоспособности и успешности компании на рынке. Низкие показатели рентабельности (ниже 90 % от средней рентабельности по отрасли) являются одним из критериев для назначения выездной налоговой проверки.</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>124</index> + <row> + <c> + <c> + <f>22</f> + </c> + </c> + <c> + <c> + <f>23</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Рентабельность продаж = прибыль от продаж / себестоимость продаж</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>125</index> + <row> + <c> + <i>1</i> + <c> + <f>0</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>126</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>24</formatIndex> + <c> + <i>1</i> + <c> + <f>44</f> + <parameter>ВалютаОтчетности</parameter> + </c> + </c> + <c> + <c> + <f>26</f> + <parameter>Год_1</parameter> + </c> + </c> + <c> + <c> + <f>27</f> + <parameter>Год_2</parameter> + </c> + </c> + <c> + <c> + <f>27</f> + <parameter>Год_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>127</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>14</formatIndex> + <c> + <i>1</i> + <c> + <f>28</f> + </c> + </c> + <c> + <i>3</i> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>29</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>128</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>30</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прибыль от продаж</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьПродаж1_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьПродаж1_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьПродаж1_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>129</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>32</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Себестоимость продаж (с учетом коммерческих и +управленческих расходов)</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьПродаж2_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьПродаж2_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьПродаж2_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>130</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>32</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Средняя рентабельность продаж по отрасли, %</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьПродаж3_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьПродаж3_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьПродаж3_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>131</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>32</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Предельная рентабельность (90% от средней), %</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьПродаж4_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьПродаж4_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьПродаж4_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>132</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>24</formatIndex> + <c> + <c> + <f>17</f> + </c> + </c> + <c> + <c> + <f>33</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Рентабельность продаж, %</v8:content> + </v8:item> + </tl> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьПродаж_1</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьПродаж_2</parameter> + </c> + </c> + <c> + <c> + <f>31</f> + <parameter>РентабельностьПродаж_3</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>133</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>14</formatIndex> + <c> + <i>1</i> + <c> + <f>46</f> + <parameter>ПояснениеРасчета</parameter> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>134</index> + <row> + <columnsID>f7121de8-e240-48bb-b53a-2138bd302e1a</columnsID> + <formatIndex>14</formatIndex> + <c> + <i>1</i> + <c> + <f>34</f> + </c> + </c> + <c> + <i>3</i> + <c> + <f>29</f> + </c> + </c> + <c> + <c> + <f>29</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>137</index> + <row> + <columnsID>37006c65-2b7f-4f85-8374-bf0a0c619aef</columnsID> + <c> + <c> + <f>47</f> + </c> + </c> + <c> + <c> + <f>36</f> + </c> + </c> + <c> + <c> + <f>48</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Показать расчет</v8:content> + </v8:item> + </tl> + <detailParameter>Расшифровка</detailParameter> + </c> + </c> + <c> + <i>4</i> + <c> + <f>49</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>139</index> + <row> + <columnsID>37006c65-2b7f-4f85-8374-bf0a0c619aef</columnsID> + <c> + <c> + <f>50</f> + </c> + </c> + <c> + <c> + <f>36</f> + </c> + </c> + <c> + <c> + <f>48</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Скрыть расчет</v8:content> + </v8:item> + </tl> + <detailParameter>Расшифровка</detailParameter> + </c> + </c> + <c> + <i>4</i> + <c> + <f>49</f> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>141</index> + <row> + <c> + <i>1</i> + <c> + <f>24</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Финансовый анализ не проведен, т.к. бухгалтерская отчетность за последние 3 года отсутствует в базе Росстата</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>143</index> + <row> + <c> + <i>1</i> + <c> + <f>24</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Финансовый анализ не проводится для социально ориентированных некоммерческих организаций</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <rowsItem> + <index>145</index> + <row> + <c> + <i>1</i> + <c> + <f>24</f> + <tl> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Финансовый анализ не проведен</v8:content> + </v8:item> + </tl> + </c> + </c> + </row> + </rowsItem> + <drawing> + <drawingType>Chart</drawingType> + <id>1</id> + <formatIndex>51</formatIndex> + <beginRow>4</beginRow> + <beginRowOffset>15</beginRowOffset> + <endRow>12</endRow> + <endRowOffset>33</endRowOffset> + <beginColumn>1</beginColumn> + <beginColumnOffset>9</beginColumnOffset> + <endColumn>1</endColumn> + <endColumnOffset>759</endColumnOffset> + <autoSize>false</autoSize> + <pictureSize>Stretch</pictureSize> + <zOrder>0</zOrder> + <object xmlns:d3p1="http://v8.1c.ru/8.2/data/chart" xsi:type="d3p1:Chart"> + <d3p1:seriesCurId>18</d3p1:seriesCurId> + <d3p1:pointsCurId>16</d3p1:pointsCurId> + <d3p1:isSeriesDesign>true</d3p1:isSeriesDesign> + <d3p1:realSeriesCount>1</d3p1:realSeriesCount> + <d3p1:realSeriesData> + <d3p1:id>2</d3p1:id> + <d3p1:color>#484848</d3p1:color> + <d3p1:line width="2" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:line> + <d3p1:marker>Rhomb</d3p1:marker> + <d3p1:text/> + <d3p1:strIsChanged>true</d3p1:strIsChanged> + <d3p1:isExpand>false</d3p1:isExpand> + <d3p1:isIndicator>false</d3p1:isIndicator> + <d3p1:colorPriority>false</d3p1:colorPriority> + </d3p1:realSeriesData> + <d3p1:realExSeriesData> + <d3p1:id>1</d3p1:id> + <d3p1:color>#991919</d3p1:color> + <d3p1:line width="2" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:line> + <d3p1:marker>Rhomb</d3p1:marker> + <d3p1:text> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сводная</v8:content> + </v8:item> + </d3p1:text> + <d3p1:strIsChanged>false</d3p1:strIsChanged> + <d3p1:isExpand>false</d3p1:isExpand> + <d3p1:isIndicator>false</d3p1:isIndicator> + <d3p1:colorPriority>false</d3p1:colorPriority> + </d3p1:realExSeriesData> + <d3p1:isPointsDesign>true</d3p1:isPointsDesign> + <d3p1:realPointCount>1</d3p1:realPointCount> + <d3p1:realPointData> + <d3p1:id>1</d3p1:id> + <d3p1:color>#D02A35</d3p1:color> + <d3p1:line width="2" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:line> + <d3p1:marker>Rhomb</d3p1:marker> + <d3p1:text/> + <d3p1:strIsChanged>true</d3p1:strIsChanged> + <d3p1:isExpand>false</d3p1:isExpand> + <d3p1:isIndicator>false</d3p1:isIndicator> + <d3p1:colorPriority>false</d3p1:colorPriority> + </d3p1:realPointData> + <d3p1:curSeries>0</d3p1:curSeries> + <d3p1:curPoint>0</d3p1:curPoint> + <d3p1:chartType>Gauge</d3p1:chartType> + <d3p1:circleLabelType>None</d3p1:circleLabelType> + <d3p1:labelsDelimiter>, </d3p1:labelsDelimiter> + <d3p1:labelsLocation>Edge</d3p1:labelsLocation> + <d3p1:lbFormat/> + <d3p1:lbpFormat/> + <d3p1:labelsColor>style:FormTextColor</d3p1:labelsColor> + <d3p1:labelsFont kind="AutoFont"/> + <d3p1:transparentLabelsBkg>true</d3p1:transparentLabelsBkg> + <d3p1:labelsBkgColor>auto</d3p1:labelsBkgColor> + <d3p1:labelsBorder width="1"> + <v8ui:style xsi:type="v8ui:ControlBorderType">Single</v8ui:style> + </d3p1:labelsBorder> + <d3p1:labelsBorderColor>auto</d3p1:labelsBorderColor> + <d3p1:circleExpandMode>None</d3p1:circleExpandMode> + <d3p1:chart3Dcrd>SouthWest</d3p1:chart3Dcrd> + <d3p1:title> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>D1</v8:content> + </v8:item> + </d3p1:title> + <d3p1:isShowTitle>false</d3p1:isShowTitle> + <d3p1:isShowLegend>false</d3p1:isShowLegend> + <d3p1:ttlBorder width="0"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:ttlBorder> + <d3p1:ttlBorderColor>style:BorderColor</d3p1:ttlBorderColor> + <d3p1:lgBorder width="0"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:lgBorder> + <d3p1:lgBorderColor>style:BorderColor</d3p1:lgBorderColor> + <d3p1:chBorder width="0"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:chBorder> + <d3p1:chBorderColor>style:BorderColor</d3p1:chBorderColor> + <d3p1:transparent>false</d3p1:transparent> + <d3p1:bkgColor>style:FormBackColor</d3p1:bkgColor> + <d3p1:isTrnspTtl>true</d3p1:isTrnspTtl> + <d3p1:ttlColor>style:FormBackColor</d3p1:ttlColor> + <d3p1:isTrnspLeg>true</d3p1:isTrnspLeg> + <d3p1:legColor>style:FormBackColor</d3p1:legColor> + <d3p1:isTrnspCh>false</d3p1:isTrnspCh> + <d3p1:chColor>#FFFFFF</d3p1:chColor> + <d3p1:ttlTxtColor>style:FormTextColor</d3p1:ttlTxtColor> + <d3p1:legTxtColor>style:FormTextColor</d3p1:legTxtColor> + <d3p1:chTxtColor>style:FormTextColor</d3p1:chTxtColor> + <d3p1:ttlFont ref="style:TextFont" kind="StyleItem"/> + <d3p1:legFont ref="style:TextFont" kind="StyleItem"/> + <d3p1:chFont ref="style:TextFont" kind="StyleItem"/> + <d3p1:isShowScale>true</d3p1:isShowScale> + <d3p1:isShowScaleVL>true</d3p1:isShowScaleVL> + <d3p1:isShowSeriesScale>true</d3p1:isShowSeriesScale> + <d3p1:isShowPointsScale>true</d3p1:isShowPointsScale> + <d3p1:isShowValuesScale>true</d3p1:isShowValuesScale> + <d3p1:vsFormat> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧС=2; ЧН=</v8:content> + </v8:item> + </d3p1:vsFormat> + <d3p1:xLabelsOrientation>Auto</d3p1:xLabelsOrientation> + <d3p1:scaleLine width="1" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:scaleLine> + <d3p1:scaleColor>#A9A9A9</d3p1:scaleColor> + <d3p1:isAutoSeriesName>false</d3p1:isAutoSeriesName> + <d3p1:isAutoPointName>false</d3p1:isAutoPointName> + <d3p1:maxMode>NotDefined</d3p1:maxMode> + <d3p1:maxSeries>4</d3p1:maxSeries> + <d3p1:maxSeriesPrc>30</d3p1:maxSeriesPrc> + <d3p1:spaceMode>Half</d3p1:spaceMode> + <d3p1:baseVal>0</d3p1:baseVal> + <d3p1:isOutline>true</d3p1:isOutline> + <d3p1:realPiePoint>0</d3p1:realPiePoint> + <d3p1:realStockSeries>0</d3p1:realStockSeries> + <d3p1:isLight>true</d3p1:isLight> + <d3p1:isGradient>false</d3p1:isGradient> + <d3p1:isTransposition>false</d3p1:isTransposition> + <d3p1:hideBaseVal>false</d3p1:hideBaseVal> + <d3p1:dataTable>false</d3p1:dataTable> + <d3p1:dtVerLines>true</d3p1:dtVerLines> + <d3p1:dtHorLines>true</d3p1:dtHorLines> + <d3p1:dtHAlign>Right</d3p1:dtHAlign> + <d3p1:dtFormat/> + <d3p1:dtKeys>true</d3p1:dtKeys> + <d3p1:paletteKind>Palette32</d3p1:paletteKind> + <d3p1:animation>Auto</d3p1:animation> + <d3p1:rebuildTime>8906422</d3p1:rebuildTime> + <d3p1:isTransposed>false</d3p1:isTransposed> + <d3p1:autoTransposition>false</d3p1:autoTransposition> + <d3p1:legendScrollEnable>false</d3p1:legendScrollEnable> + <d3p1:surfaceColor>#A90000</d3p1:surfaceColor> + <d3p1:radarScaleType>Circle</d3p1:radarScaleType> + <d3p1:gaugeValuesPresentation>Needle</d3p1:gaugeValuesPresentation> + <d3p1:gaugeQualityBands useTextStr="false" useTooltipStr="false"> + <v8ui:item> + <v8ui:begin>0</v8ui:begin> + <v8ui:end>123</v8ui:end> + <v8ui:backColor>#FF0000</v8ui:backColor> + <v8ui:text/> + <v8ui:tooltip/> + </v8ui:item> + <v8ui:item> + <v8ui:begin>123</v8ui:begin> + <v8ui:end>290</v8ui:end> + <v8ui:backColor>#FFFF00</v8ui:backColor> + <v8ui:text/> + <v8ui:tooltip/> + </v8ui:item> + <v8ui:item> + <v8ui:begin>290</v8ui:begin> + <v8ui:end>999999</v8ui:end> + <v8ui:backColor>#32CD32</v8ui:backColor> + <v8ui:text/> + <v8ui:tooltip/> + </v8ui:item> + </d3p1:gaugeQualityBands> + <d3p1:beginGaugeAngle>0</d3p1:beginGaugeAngle> + <d3p1:endGaugeAngle>180</d3p1:endGaugeAngle> + <d3p1:gaugeThickness>2</d3p1:gaugeThickness> + <d3p1:gaugeLabelsLocation>InsideScale</d3p1:gaugeLabelsLocation> + <d3p1:gaugeLabelsArcDirection>false</d3p1:gaugeLabelsArcDirection> + <d3p1:gaugeBushThickness>5</d3p1:gaugeBushThickness> + <d3p1:gaugeBushColor>#A9A9A9</d3p1:gaugeBushColor> + <d3p1:autoMaxValue>false</d3p1:autoMaxValue> + <d3p1:userMaxValue>500</d3p1:userMaxValue> + <d3p1:autoMinValue>true</d3p1:autoMinValue> + <d3p1:userMinValue>0</d3p1:userMinValue> + <d3p1:elementsIsInit>true</d3p1:elementsIsInit> + <d3p1:titleIsInit>true</d3p1:titleIsInit> + <d3p1:legendIsInit>true</d3p1:legendIsInit> + <d3p1:chartIsInit>true</d3p1:chartIsInit> + <d3p1:elementsChart> + <d3p1:left>0</d3p1:left> + <d3p1:right>0</d3p1:right> + <d3p1:top>0</d3p1:top> + <d3p1:bottom>0</d3p1:bottom> + </d3p1:elementsChart> + <d3p1:elementsLegend> + <d3p1:left>0.831804281345565</d3p1:left> + <d3p1:right>0</d3p1:right> + <d3p1:top>0.126666666666667</d3p1:top> + <d3p1:bottom>0</d3p1:bottom> + </d3p1:elementsLegend> + <d3p1:elementsTitle> + <d3p1:left>0.831804281345565</d3p1:left> + <d3p1:right>0</d3p1:right> + <d3p1:top>0</d3p1:top> + <d3p1:bottom>0.873333333333333</d3p1:bottom> + </d3p1:elementsTitle> + <d3p1:borderColor>style:BorderColor</d3p1:borderColor> + <d3p1:border width="0"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:border> + <d3p1:dataSourceDescription/> + <d3p1:isDataSourceMode>false</d3p1:isDataSourceMode> + <d3p1:isRandomizedNewValues>true</d3p1:isRandomizedNewValues> + <d3p1:realDataItems> + <d3p1:item> + <d3p1:valData xsi:type="xs:decimal">5.48</d3p1:valData> + <d3p1:valInfo xsi:nil="true"/> + <d3p1:toolTip/> + </d3p1:item> + </d3p1:realDataItems> + <d3p1:splineStrain>95</d3p1:splineStrain> + <d3p1:translucencePercent>0</d3p1:translucencePercent> + <d3p1:funnelNeckHeightPercent>10</d3p1:funnelNeckHeightPercent> + <d3p1:funnelNeckWidthPercent>10</d3p1:funnelNeckWidthPercent> + <d3p1:funnelGapSumPercent>3</d3p1:funnelGapSumPercent> + <d3p1:multiStageLinkLine width="1" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:multiStageLinkLine> + <d3p1:multiStageLinkColor>#000000</d3p1:multiStageLinkColor> + <d3p1:valuesAxis> + <d3p1:maxValue xsi:type="xs:decimal">500</d3p1:maxValue> + <d3p1:maxValueDetectionMethod>UseValueWithLimitations</d3p1:maxValueDetectionMethod> + </d3p1:valuesAxis> + <d3p1:pointsAxis/> + <d3p1:valuesScale> + <d3p1:titleArea> + <d3p1:font kind="AutoFont"/> + <d3p1:textColor>auto</d3p1:textColor> + <d3p1:backColor>auto</d3p1:backColor> + <d3p1:border width="1"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:border> + <d3p1:borderColor>auto</d3p1:borderColor> + </d3p1:titleArea> + <d3p1:labelFormat> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧС=2; ЧН=</v8:content> + </v8:item> + </d3p1:labelFormat> + </d3p1:valuesScale> + <d3p1:legendPlacement>None</d3p1:legendPlacement> + <d3p1:plotAreaPlacement>UseCoordinates</d3p1:plotAreaPlacement> + <d3p1:titleAreaPlacement>None</d3p1:titleAreaPlacement> + </object> + </drawing> + <drawing> + <drawingType>Chart</drawingType> + <id>21</id> + <formatIndex>51</formatIndex> + <beginRow>69</beginRow> + <beginRowOffset>15</beginRowOffset> + <endRow>77</endRow> + <endRowOffset>33</endRowOffset> + <beginColumn>1</beginColumn> + <beginColumnOffset>9</beginColumnOffset> + <endColumn>1</endColumn> + <endColumnOffset>759</endColumnOffset> + <autoSize>false</autoSize> + <pictureSize>Stretch</pictureSize> + <zOrder>0</zOrder> + <object xmlns:d3p1="http://v8.1c.ru/8.2/data/chart" xsi:type="d3p1:Chart"> + <d3p1:seriesCurId>21</d3p1:seriesCurId> + <d3p1:pointsCurId>19</d3p1:pointsCurId> + <d3p1:isSeriesDesign>true</d3p1:isSeriesDesign> + <d3p1:realSeriesCount>1</d3p1:realSeriesCount> + <d3p1:realSeriesData> + <d3p1:id>2</d3p1:id> + <d3p1:color>#484848</d3p1:color> + <d3p1:line width="2" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:line> + <d3p1:marker>Rhomb</d3p1:marker> + <d3p1:text/> + <d3p1:strIsChanged>true</d3p1:strIsChanged> + <d3p1:isExpand>false</d3p1:isExpand> + <d3p1:isIndicator>false</d3p1:isIndicator> + <d3p1:colorPriority>false</d3p1:colorPriority> + </d3p1:realSeriesData> + <d3p1:realExSeriesData> + <d3p1:id>1</d3p1:id> + <d3p1:color>#991919</d3p1:color> + <d3p1:line width="2" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:line> + <d3p1:marker>Rhomb</d3p1:marker> + <d3p1:text> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сводная</v8:content> + </v8:item> + </d3p1:text> + <d3p1:strIsChanged>false</d3p1:strIsChanged> + <d3p1:isExpand>false</d3p1:isExpand> + <d3p1:isIndicator>false</d3p1:isIndicator> + <d3p1:colorPriority>false</d3p1:colorPriority> + </d3p1:realExSeriesData> + <d3p1:isPointsDesign>true</d3p1:isPointsDesign> + <d3p1:realPointCount>1</d3p1:realPointCount> + <d3p1:realPointData> + <d3p1:id>1</d3p1:id> + <d3p1:color>#D02A35</d3p1:color> + <d3p1:line width="2" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:line> + <d3p1:marker>Rhomb</d3p1:marker> + <d3p1:text/> + <d3p1:strIsChanged>true</d3p1:strIsChanged> + <d3p1:isExpand>false</d3p1:isExpand> + <d3p1:isIndicator>false</d3p1:isIndicator> + <d3p1:colorPriority>false</d3p1:colorPriority> + </d3p1:realPointData> + <d3p1:curSeries>0</d3p1:curSeries> + <d3p1:curPoint>0</d3p1:curPoint> + <d3p1:chartType>Gauge</d3p1:chartType> + <d3p1:circleLabelType>None</d3p1:circleLabelType> + <d3p1:labelsDelimiter>, </d3p1:labelsDelimiter> + <d3p1:labelsLocation>Edge</d3p1:labelsLocation> + <d3p1:lbFormat/> + <d3p1:lbpFormat/> + <d3p1:labelsColor>style:FormTextColor</d3p1:labelsColor> + <d3p1:labelsFont kind="AutoFont"/> + <d3p1:transparentLabelsBkg>true</d3p1:transparentLabelsBkg> + <d3p1:labelsBkgColor>auto</d3p1:labelsBkgColor> + <d3p1:labelsBorder width="1"> + <v8ui:style xsi:type="v8ui:ControlBorderType">Single</v8ui:style> + </d3p1:labelsBorder> + <d3p1:labelsBorderColor>auto</d3p1:labelsBorderColor> + <d3p1:circleExpandMode>None</d3p1:circleExpandMode> + <d3p1:chart3Dcrd>SouthWest</d3p1:chart3Dcrd> + <d3p1:title> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>D1</v8:content> + </v8:item> + </d3p1:title> + <d3p1:isShowTitle>false</d3p1:isShowTitle> + <d3p1:isShowLegend>false</d3p1:isShowLegend> + <d3p1:ttlBorder width="0"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:ttlBorder> + <d3p1:ttlBorderColor>style:BorderColor</d3p1:ttlBorderColor> + <d3p1:lgBorder width="0"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:lgBorder> + <d3p1:lgBorderColor>style:BorderColor</d3p1:lgBorderColor> + <d3p1:chBorder width="0"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:chBorder> + <d3p1:chBorderColor>style:BorderColor</d3p1:chBorderColor> + <d3p1:transparent>false</d3p1:transparent> + <d3p1:bkgColor>style:FormBackColor</d3p1:bkgColor> + <d3p1:isTrnspTtl>true</d3p1:isTrnspTtl> + <d3p1:ttlColor>style:FormBackColor</d3p1:ttlColor> + <d3p1:isTrnspLeg>true</d3p1:isTrnspLeg> + <d3p1:legColor>style:FormBackColor</d3p1:legColor> + <d3p1:isTrnspCh>false</d3p1:isTrnspCh> + <d3p1:chColor>#FFFFFF</d3p1:chColor> + <d3p1:ttlTxtColor>style:FormTextColor</d3p1:ttlTxtColor> + <d3p1:legTxtColor>style:FormTextColor</d3p1:legTxtColor> + <d3p1:chTxtColor>style:FormTextColor</d3p1:chTxtColor> + <d3p1:ttlFont ref="style:TextFont" kind="StyleItem"/> + <d3p1:legFont ref="style:TextFont" kind="StyleItem"/> + <d3p1:chFont ref="style:TextFont" kind="StyleItem"/> + <d3p1:isShowScale>true</d3p1:isShowScale> + <d3p1:isShowScaleVL>true</d3p1:isShowScaleVL> + <d3p1:isShowSeriesScale>true</d3p1:isShowSeriesScale> + <d3p1:isShowPointsScale>true</d3p1:isShowPointsScale> + <d3p1:isShowValuesScale>true</d3p1:isShowValuesScale> + <d3p1:vsFormat> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧС=2;ЧН=</v8:content> + </v8:item> + </d3p1:vsFormat> + <d3p1:xLabelsOrientation>Auto</d3p1:xLabelsOrientation> + <d3p1:scaleLine width="1" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:scaleLine> + <d3p1:scaleColor>#A9A9A9</d3p1:scaleColor> + <d3p1:isAutoSeriesName>false</d3p1:isAutoSeriesName> + <d3p1:isAutoPointName>false</d3p1:isAutoPointName> + <d3p1:maxMode>NotDefined</d3p1:maxMode> + <d3p1:maxSeries>4</d3p1:maxSeries> + <d3p1:maxSeriesPrc>30</d3p1:maxSeriesPrc> + <d3p1:spaceMode>Half</d3p1:spaceMode> + <d3p1:baseVal>0</d3p1:baseVal> + <d3p1:isOutline>true</d3p1:isOutline> + <d3p1:realPiePoint>0</d3p1:realPiePoint> + <d3p1:realStockSeries>0</d3p1:realStockSeries> + <d3p1:isLight>true</d3p1:isLight> + <d3p1:isGradient>false</d3p1:isGradient> + <d3p1:isTransposition>false</d3p1:isTransposition> + <d3p1:hideBaseVal>false</d3p1:hideBaseVal> + <d3p1:dataTable>false</d3p1:dataTable> + <d3p1:dtVerLines>true</d3p1:dtVerLines> + <d3p1:dtHorLines>true</d3p1:dtHorLines> + <d3p1:dtHAlign>Right</d3p1:dtHAlign> + <d3p1:dtFormat/> + <d3p1:dtKeys>true</d3p1:dtKeys> + <d3p1:paletteKind>Palette32</d3p1:paletteKind> + <d3p1:animation>Auto</d3p1:animation> + <d3p1:rebuildTime>8906422</d3p1:rebuildTime> + <d3p1:isTransposed>false</d3p1:isTransposed> + <d3p1:autoTransposition>false</d3p1:autoTransposition> + <d3p1:legendScrollEnable>false</d3p1:legendScrollEnable> + <d3p1:surfaceColor>#A90000</d3p1:surfaceColor> + <d3p1:radarScaleType>Circle</d3p1:radarScaleType> + <d3p1:gaugeValuesPresentation>Needle</d3p1:gaugeValuesPresentation> + <d3p1:gaugeQualityBands useTextStr="false" useTooltipStr="false"> + <v8ui:item> + <v8ui:begin>-99999</v8ui:begin> + <v8ui:end>900</v8ui:end> + <v8ui:backColor>#FF0000</v8ui:backColor> + <v8ui:text/> + <v8ui:tooltip/> + </v8ui:item> + <v8ui:item> + <v8ui:begin>900</v8ui:begin> + <v8ui:end>1000</v8ui:end> + <v8ui:backColor>#FFFF00</v8ui:backColor> + <v8ui:text/> + <v8ui:tooltip/> + </v8ui:item> + <v8ui:item> + <v8ui:begin>1000</v8ui:begin> + <v8ui:end>999999</v8ui:end> + <v8ui:backColor>#32CD32</v8ui:backColor> + <v8ui:text/> + <v8ui:tooltip/> + </v8ui:item> + </d3p1:gaugeQualityBands> + <d3p1:beginGaugeAngle>0</d3p1:beginGaugeAngle> + <d3p1:endGaugeAngle>180</d3p1:endGaugeAngle> + <d3p1:gaugeThickness>2</d3p1:gaugeThickness> + <d3p1:gaugeLabelsLocation>InsideScale</d3p1:gaugeLabelsLocation> + <d3p1:gaugeLabelsArcDirection>false</d3p1:gaugeLabelsArcDirection> + <d3p1:gaugeBushThickness>5</d3p1:gaugeBushThickness> + <d3p1:gaugeBushColor>#A9A9A9</d3p1:gaugeBushColor> + <d3p1:autoMaxValue>false</d3p1:autoMaxValue> + <d3p1:userMaxValue>2000</d3p1:userMaxValue> + <d3p1:autoMinValue>false</d3p1:autoMinValue> + <d3p1:userMinValue>0</d3p1:userMinValue> + <d3p1:elementsIsInit>true</d3p1:elementsIsInit> + <d3p1:titleIsInit>true</d3p1:titleIsInit> + <d3p1:legendIsInit>true</d3p1:legendIsInit> + <d3p1:chartIsInit>true</d3p1:chartIsInit> + <d3p1:elementsChart> + <d3p1:left>0</d3p1:left> + <d3p1:right>0</d3p1:right> + <d3p1:top>0</d3p1:top> + <d3p1:bottom>0</d3p1:bottom> + </d3p1:elementsChart> + <d3p1:elementsLegend> + <d3p1:left>0.831804281345565</d3p1:left> + <d3p1:right>0</d3p1:right> + <d3p1:top>0.126666666666667</d3p1:top> + <d3p1:bottom>0</d3p1:bottom> + </d3p1:elementsLegend> + <d3p1:elementsTitle> + <d3p1:left>0.831804281345565</d3p1:left> + <d3p1:right>0</d3p1:right> + <d3p1:top>0</d3p1:top> + <d3p1:bottom>0.873333333333333</d3p1:bottom> + </d3p1:elementsTitle> + <d3p1:borderColor>style:BorderColor</d3p1:borderColor> + <d3p1:border width="0"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:border> + <d3p1:dataSourceDescription/> + <d3p1:isDataSourceMode>false</d3p1:isDataSourceMode> + <d3p1:isRandomizedNewValues>true</d3p1:isRandomizedNewValues> + <d3p1:realDataItems> + <d3p1:item> + <d3p1:valData xsi:type="xs:decimal">5.48</d3p1:valData> + <d3p1:valInfo xsi:nil="true"/> + <d3p1:toolTip/> + </d3p1:item> + </d3p1:realDataItems> + <d3p1:splineStrain>95</d3p1:splineStrain> + <d3p1:translucencePercent>0</d3p1:translucencePercent> + <d3p1:funnelNeckHeightPercent>10</d3p1:funnelNeckHeightPercent> + <d3p1:funnelNeckWidthPercent>10</d3p1:funnelNeckWidthPercent> + <d3p1:funnelGapSumPercent>3</d3p1:funnelGapSumPercent> + <d3p1:multiStageLinkLine width="1" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:multiStageLinkLine> + <d3p1:multiStageLinkColor>#000000</d3p1:multiStageLinkColor> + <d3p1:valuesAxis> + <d3p1:maxValue xsi:type="xs:decimal">2000</d3p1:maxValue> + <d3p1:minValueDetectionMethod>UseValueWithLimitations</d3p1:minValueDetectionMethod> + <d3p1:maxValueDetectionMethod>UseValueWithLimitations</d3p1:maxValueDetectionMethod> + </d3p1:valuesAxis> + <d3p1:pointsAxis/> + <d3p1:valuesScale> + <d3p1:titleArea> + <d3p1:font kind="AutoFont"/> + <d3p1:textColor>auto</d3p1:textColor> + <d3p1:backColor>auto</d3p1:backColor> + <d3p1:border width="1"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:border> + <d3p1:borderColor>auto</d3p1:borderColor> + </d3p1:titleArea> + <d3p1:labelFormat> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧС=2;ЧН=</v8:content> + </v8:item> + </d3p1:labelFormat> + </d3p1:valuesScale> + <d3p1:legendPlacement>None</d3p1:legendPlacement> + <d3p1:plotAreaPlacement>UseCoordinates</d3p1:plotAreaPlacement> + <d3p1:titleAreaPlacement>None</d3p1:titleAreaPlacement> + </object> + </drawing> + <drawing> + <drawingType>Chart</drawingType> + <id>22</id> + <formatIndex>51</formatIndex> + <beginRow>103</beginRow> + <beginRowOffset>15</beginRowOffset> + <endRow>111</endRow> + <endRowOffset>33</endRowOffset> + <beginColumn>1</beginColumn> + <beginColumnOffset>9</beginColumnOffset> + <endColumn>1</endColumn> + <endColumnOffset>759</endColumnOffset> + <autoSize>false</autoSize> + <pictureSize>Stretch</pictureSize> + <zOrder>0</zOrder> + <object xmlns:d3p1="http://v8.1c.ru/8.2/data/chart" xsi:type="d3p1:Chart"> + <d3p1:seriesCurId>24</d3p1:seriesCurId> + <d3p1:pointsCurId>22</d3p1:pointsCurId> + <d3p1:isSeriesDesign>true</d3p1:isSeriesDesign> + <d3p1:realSeriesCount>1</d3p1:realSeriesCount> + <d3p1:realSeriesData> + <d3p1:id>2</d3p1:id> + <d3p1:color>#484848</d3p1:color> + <d3p1:line width="2" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:line> + <d3p1:marker>Rhomb</d3p1:marker> + <d3p1:text/> + <d3p1:strIsChanged>true</d3p1:strIsChanged> + <d3p1:isExpand>false</d3p1:isExpand> + <d3p1:isIndicator>false</d3p1:isIndicator> + <d3p1:colorPriority>false</d3p1:colorPriority> + </d3p1:realSeriesData> + <d3p1:realExSeriesData> + <d3p1:id>1</d3p1:id> + <d3p1:color>#991919</d3p1:color> + <d3p1:line width="2" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:line> + <d3p1:marker>Rhomb</d3p1:marker> + <d3p1:text> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сводная</v8:content> + </v8:item> + </d3p1:text> + <d3p1:strIsChanged>false</d3p1:strIsChanged> + <d3p1:isExpand>false</d3p1:isExpand> + <d3p1:isIndicator>false</d3p1:isIndicator> + <d3p1:colorPriority>false</d3p1:colorPriority> + </d3p1:realExSeriesData> + <d3p1:isPointsDesign>true</d3p1:isPointsDesign> + <d3p1:realPointCount>1</d3p1:realPointCount> + <d3p1:realPointData> + <d3p1:id>1</d3p1:id> + <d3p1:color>#D02A35</d3p1:color> + <d3p1:line width="2" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:line> + <d3p1:marker>Rhomb</d3p1:marker> + <d3p1:text/> + <d3p1:strIsChanged>true</d3p1:strIsChanged> + <d3p1:isExpand>false</d3p1:isExpand> + <d3p1:isIndicator>false</d3p1:isIndicator> + <d3p1:colorPriority>false</d3p1:colorPriority> + </d3p1:realPointData> + <d3p1:curSeries>0</d3p1:curSeries> + <d3p1:curPoint>0</d3p1:curPoint> + <d3p1:chartType>Gauge</d3p1:chartType> + <d3p1:circleLabelType>None</d3p1:circleLabelType> + <d3p1:labelsDelimiter>, </d3p1:labelsDelimiter> + <d3p1:labelsLocation>Edge</d3p1:labelsLocation> + <d3p1:lbFormat/> + <d3p1:lbpFormat/> + <d3p1:labelsColor>style:FormTextColor</d3p1:labelsColor> + <d3p1:labelsFont kind="AutoFont"/> + <d3p1:transparentLabelsBkg>true</d3p1:transparentLabelsBkg> + <d3p1:labelsBkgColor>auto</d3p1:labelsBkgColor> + <d3p1:labelsBorder width="1"> + <v8ui:style xsi:type="v8ui:ControlBorderType">Single</v8ui:style> + </d3p1:labelsBorder> + <d3p1:labelsBorderColor>auto</d3p1:labelsBorderColor> + <d3p1:circleExpandMode>None</d3p1:circleExpandMode> + <d3p1:chart3Dcrd>SouthWest</d3p1:chart3Dcrd> + <d3p1:title> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>D1</v8:content> + </v8:item> + </d3p1:title> + <d3p1:isShowTitle>false</d3p1:isShowTitle> + <d3p1:isShowLegend>false</d3p1:isShowLegend> + <d3p1:ttlBorder width="0"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:ttlBorder> + <d3p1:ttlBorderColor>style:BorderColor</d3p1:ttlBorderColor> + <d3p1:lgBorder width="0"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:lgBorder> + <d3p1:lgBorderColor>style:BorderColor</d3p1:lgBorderColor> + <d3p1:chBorder width="0"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:chBorder> + <d3p1:chBorderColor>style:BorderColor</d3p1:chBorderColor> + <d3p1:transparent>false</d3p1:transparent> + <d3p1:bkgColor>style:FormBackColor</d3p1:bkgColor> + <d3p1:isTrnspTtl>true</d3p1:isTrnspTtl> + <d3p1:ttlColor>style:FormBackColor</d3p1:ttlColor> + <d3p1:isTrnspLeg>true</d3p1:isTrnspLeg> + <d3p1:legColor>style:FormBackColor</d3p1:legColor> + <d3p1:isTrnspCh>false</d3p1:isTrnspCh> + <d3p1:chColor>#FFFFFF</d3p1:chColor> + <d3p1:ttlTxtColor>style:FormTextColor</d3p1:ttlTxtColor> + <d3p1:legTxtColor>style:FormTextColor</d3p1:legTxtColor> + <d3p1:chTxtColor>style:FormTextColor</d3p1:chTxtColor> + <d3p1:ttlFont ref="style:TextFont" kind="StyleItem"/> + <d3p1:legFont ref="style:TextFont" kind="StyleItem"/> + <d3p1:chFont ref="style:TextFont" kind="StyleItem"/> + <d3p1:isShowScale>true</d3p1:isShowScale> + <d3p1:isShowScaleVL>true</d3p1:isShowScaleVL> + <d3p1:isShowSeriesScale>true</d3p1:isShowSeriesScale> + <d3p1:isShowPointsScale>true</d3p1:isShowPointsScale> + <d3p1:isShowValuesScale>true</d3p1:isShowValuesScale> + <d3p1:vsFormat> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧС=2;ЧН=</v8:content> + </v8:item> + </d3p1:vsFormat> + <d3p1:xLabelsOrientation>Auto</d3p1:xLabelsOrientation> + <d3p1:scaleLine width="1" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:scaleLine> + <d3p1:scaleColor>#A9A9A9</d3p1:scaleColor> + <d3p1:isAutoSeriesName>false</d3p1:isAutoSeriesName> + <d3p1:isAutoPointName>false</d3p1:isAutoPointName> + <d3p1:maxMode>NotDefined</d3p1:maxMode> + <d3p1:maxSeries>4</d3p1:maxSeries> + <d3p1:maxSeriesPrc>30</d3p1:maxSeriesPrc> + <d3p1:spaceMode>Half</d3p1:spaceMode> + <d3p1:baseVal>0</d3p1:baseVal> + <d3p1:isOutline>true</d3p1:isOutline> + <d3p1:realPiePoint>0</d3p1:realPiePoint> + <d3p1:realStockSeries>0</d3p1:realStockSeries> + <d3p1:isLight>true</d3p1:isLight> + <d3p1:isGradient>false</d3p1:isGradient> + <d3p1:isTransposition>false</d3p1:isTransposition> + <d3p1:hideBaseVal>false</d3p1:hideBaseVal> + <d3p1:dataTable>false</d3p1:dataTable> + <d3p1:dtVerLines>true</d3p1:dtVerLines> + <d3p1:dtHorLines>true</d3p1:dtHorLines> + <d3p1:dtHAlign>Right</d3p1:dtHAlign> + <d3p1:dtFormat/> + <d3p1:dtKeys>true</d3p1:dtKeys> + <d3p1:paletteKind>Palette32</d3p1:paletteKind> + <d3p1:animation>Auto</d3p1:animation> + <d3p1:rebuildTime>8906422</d3p1:rebuildTime> + <d3p1:isTransposed>false</d3p1:isTransposed> + <d3p1:autoTransposition>false</d3p1:autoTransposition> + <d3p1:legendScrollEnable>false</d3p1:legendScrollEnable> + <d3p1:surfaceColor>#A90000</d3p1:surfaceColor> + <d3p1:radarScaleType>Circle</d3p1:radarScaleType> + <d3p1:gaugeValuesPresentation>Needle</d3p1:gaugeValuesPresentation> + <d3p1:gaugeQualityBands useTextStr="false" useTooltipStr="false"> + <v8ui:item> + <v8ui:begin>-99999</v8ui:begin> + <v8ui:end>900</v8ui:end> + <v8ui:backColor>#FF0000</v8ui:backColor> + <v8ui:text/> + <v8ui:tooltip/> + </v8ui:item> + <v8ui:item> + <v8ui:begin>900</v8ui:begin> + <v8ui:end>1000</v8ui:end> + <v8ui:backColor>#FFFF00</v8ui:backColor> + <v8ui:text/> + <v8ui:tooltip/> + </v8ui:item> + <v8ui:item> + <v8ui:begin>1000</v8ui:begin> + <v8ui:end>999999</v8ui:end> + <v8ui:backColor>#32CD32</v8ui:backColor> + <v8ui:text/> + <v8ui:tooltip/> + </v8ui:item> + </d3p1:gaugeQualityBands> + <d3p1:beginGaugeAngle>0</d3p1:beginGaugeAngle> + <d3p1:endGaugeAngle>180</d3p1:endGaugeAngle> + <d3p1:gaugeThickness>2</d3p1:gaugeThickness> + <d3p1:gaugeLabelsLocation>InsideScale</d3p1:gaugeLabelsLocation> + <d3p1:gaugeLabelsArcDirection>false</d3p1:gaugeLabelsArcDirection> + <d3p1:gaugeBushThickness>5</d3p1:gaugeBushThickness> + <d3p1:gaugeBushColor>#A9A9A9</d3p1:gaugeBushColor> + <d3p1:autoMaxValue>false</d3p1:autoMaxValue> + <d3p1:userMaxValue>2000</d3p1:userMaxValue> + <d3p1:autoMinValue>false</d3p1:autoMinValue> + <d3p1:userMinValue>0</d3p1:userMinValue> + <d3p1:elementsIsInit>true</d3p1:elementsIsInit> + <d3p1:titleIsInit>true</d3p1:titleIsInit> + <d3p1:legendIsInit>true</d3p1:legendIsInit> + <d3p1:chartIsInit>true</d3p1:chartIsInit> + <d3p1:elementsChart> + <d3p1:left>0</d3p1:left> + <d3p1:right>0</d3p1:right> + <d3p1:top>0</d3p1:top> + <d3p1:bottom>0</d3p1:bottom> + </d3p1:elementsChart> + <d3p1:elementsLegend> + <d3p1:left>0.831804281345565</d3p1:left> + <d3p1:right>0</d3p1:right> + <d3p1:top>0.126666666666667</d3p1:top> + <d3p1:bottom>0</d3p1:bottom> + </d3p1:elementsLegend> + <d3p1:elementsTitle> + <d3p1:left>0.831804281345565</d3p1:left> + <d3p1:right>0</d3p1:right> + <d3p1:top>0</d3p1:top> + <d3p1:bottom>0.873333333333333</d3p1:bottom> + </d3p1:elementsTitle> + <d3p1:borderColor>style:BorderColor</d3p1:borderColor> + <d3p1:border width="0"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:border> + <d3p1:dataSourceDescription/> + <d3p1:isDataSourceMode>false</d3p1:isDataSourceMode> + <d3p1:isRandomizedNewValues>true</d3p1:isRandomizedNewValues> + <d3p1:realDataItems> + <d3p1:item> + <d3p1:valData xsi:type="xs:decimal">5.48</d3p1:valData> + <d3p1:valInfo xsi:nil="true"/> + <d3p1:toolTip/> + </d3p1:item> + </d3p1:realDataItems> + <d3p1:splineStrain>95</d3p1:splineStrain> + <d3p1:translucencePercent>0</d3p1:translucencePercent> + <d3p1:funnelNeckHeightPercent>10</d3p1:funnelNeckHeightPercent> + <d3p1:funnelNeckWidthPercent>10</d3p1:funnelNeckWidthPercent> + <d3p1:funnelGapSumPercent>3</d3p1:funnelGapSumPercent> + <d3p1:multiStageLinkLine width="1" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:multiStageLinkLine> + <d3p1:multiStageLinkColor>#000000</d3p1:multiStageLinkColor> + <d3p1:valuesAxis> + <d3p1:maxValue xsi:type="xs:decimal">2000</d3p1:maxValue> + <d3p1:minValueDetectionMethod>UseValueWithLimitations</d3p1:minValueDetectionMethod> + <d3p1:maxValueDetectionMethod>UseValueWithLimitations</d3p1:maxValueDetectionMethod> + </d3p1:valuesAxis> + <d3p1:pointsAxis/> + <d3p1:valuesScale> + <d3p1:titleArea> + <d3p1:font kind="AutoFont"/> + <d3p1:textColor>auto</d3p1:textColor> + <d3p1:backColor>auto</d3p1:backColor> + <d3p1:border width="1"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:border> + <d3p1:borderColor>auto</d3p1:borderColor> + </d3p1:titleArea> + <d3p1:labelFormat> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧС=2;ЧН=</v8:content> + </v8:item> + </d3p1:labelFormat> + </d3p1:valuesScale> + <d3p1:legendPlacement>None</d3p1:legendPlacement> + <d3p1:plotAreaPlacement>UseCoordinates</d3p1:plotAreaPlacement> + <d3p1:titleAreaPlacement>None</d3p1:titleAreaPlacement> + </object> + </drawing> + <drawing> + <drawingType>Chart</drawingType> + <id>24</id> + <formatIndex>51</formatIndex> + <beginRow>42</beginRow> + <beginRowOffset>15</beginRowOffset> + <endRow>50</endRow> + <endRowOffset>33</endRowOffset> + <beginColumn>1</beginColumn> + <beginColumnOffset>9</beginColumnOffset> + <endColumn>1</endColumn> + <endColumnOffset>759</endColumnOffset> + <autoSize>false</autoSize> + <pictureSize>Stretch</pictureSize> + <zOrder>0</zOrder> + <object xmlns:d3p1="http://v8.1c.ru/8.2/data/chart" xsi:type="d3p1:Chart"> + <d3p1:seriesCurId>24</d3p1:seriesCurId> + <d3p1:pointsCurId>22</d3p1:pointsCurId> + <d3p1:isSeriesDesign>true</d3p1:isSeriesDesign> + <d3p1:realSeriesCount>1</d3p1:realSeriesCount> + <d3p1:realSeriesData> + <d3p1:id>2</d3p1:id> + <d3p1:color>#484848</d3p1:color> + <d3p1:line width="2" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:line> + <d3p1:marker>Rhomb</d3p1:marker> + <d3p1:text/> + <d3p1:strIsChanged>true</d3p1:strIsChanged> + <d3p1:isExpand>false</d3p1:isExpand> + <d3p1:isIndicator>false</d3p1:isIndicator> + <d3p1:colorPriority>false</d3p1:colorPriority> + </d3p1:realSeriesData> + <d3p1:realExSeriesData> + <d3p1:id>1</d3p1:id> + <d3p1:color>#991919</d3p1:color> + <d3p1:line width="2" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:line> + <d3p1:marker>Rhomb</d3p1:marker> + <d3p1:text> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сводная</v8:content> + </v8:item> + </d3p1:text> + <d3p1:strIsChanged>false</d3p1:strIsChanged> + <d3p1:isExpand>false</d3p1:isExpand> + <d3p1:isIndicator>false</d3p1:isIndicator> + <d3p1:colorPriority>false</d3p1:colorPriority> + </d3p1:realExSeriesData> + <d3p1:isPointsDesign>true</d3p1:isPointsDesign> + <d3p1:realPointCount>1</d3p1:realPointCount> + <d3p1:realPointData> + <d3p1:id>1</d3p1:id> + <d3p1:color>#D02A35</d3p1:color> + <d3p1:line width="2" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:line> + <d3p1:marker>Rhomb</d3p1:marker> + <d3p1:text/> + <d3p1:strIsChanged>true</d3p1:strIsChanged> + <d3p1:isExpand>false</d3p1:isExpand> + <d3p1:isIndicator>false</d3p1:isIndicator> + <d3p1:colorPriority>false</d3p1:colorPriority> + </d3p1:realPointData> + <d3p1:curSeries>0</d3p1:curSeries> + <d3p1:curPoint>0</d3p1:curPoint> + <d3p1:chartType>Gauge</d3p1:chartType> + <d3p1:circleLabelType>None</d3p1:circleLabelType> + <d3p1:labelsDelimiter>, </d3p1:labelsDelimiter> + <d3p1:labelsLocation>Edge</d3p1:labelsLocation> + <d3p1:lbFormat/> + <d3p1:lbpFormat/> + <d3p1:labelsColor>style:FormTextColor</d3p1:labelsColor> + <d3p1:labelsFont kind="AutoFont"/> + <d3p1:transparentLabelsBkg>true</d3p1:transparentLabelsBkg> + <d3p1:labelsBkgColor>auto</d3p1:labelsBkgColor> + <d3p1:labelsBorder width="1"> + <v8ui:style xsi:type="v8ui:ControlBorderType">Single</v8ui:style> + </d3p1:labelsBorder> + <d3p1:labelsBorderColor>auto</d3p1:labelsBorderColor> + <d3p1:circleExpandMode>None</d3p1:circleExpandMode> + <d3p1:chart3Dcrd>SouthWest</d3p1:chart3Dcrd> + <d3p1:title> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>D1</v8:content> + </v8:item> + </d3p1:title> + <d3p1:isShowTitle>false</d3p1:isShowTitle> + <d3p1:isShowLegend>false</d3p1:isShowLegend> + <d3p1:ttlBorder width="0"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:ttlBorder> + <d3p1:ttlBorderColor>style:BorderColor</d3p1:ttlBorderColor> + <d3p1:lgBorder width="0"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:lgBorder> + <d3p1:lgBorderColor>style:BorderColor</d3p1:lgBorderColor> + <d3p1:chBorder width="0"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:chBorder> + <d3p1:chBorderColor>style:BorderColor</d3p1:chBorderColor> + <d3p1:transparent>false</d3p1:transparent> + <d3p1:bkgColor>style:FormBackColor</d3p1:bkgColor> + <d3p1:isTrnspTtl>true</d3p1:isTrnspTtl> + <d3p1:ttlColor>style:FormBackColor</d3p1:ttlColor> + <d3p1:isTrnspLeg>true</d3p1:isTrnspLeg> + <d3p1:legColor>style:FormBackColor</d3p1:legColor> + <d3p1:isTrnspCh>false</d3p1:isTrnspCh> + <d3p1:chColor>#FFFFFF</d3p1:chColor> + <d3p1:ttlTxtColor>style:FormTextColor</d3p1:ttlTxtColor> + <d3p1:legTxtColor>style:FormTextColor</d3p1:legTxtColor> + <d3p1:chTxtColor>style:FormTextColor</d3p1:chTxtColor> + <d3p1:ttlFont ref="style:TextFont" kind="StyleItem"/> + <d3p1:legFont ref="style:TextFont" kind="StyleItem"/> + <d3p1:chFont ref="style:TextFont" kind="StyleItem"/> + <d3p1:isShowScale>true</d3p1:isShowScale> + <d3p1:isShowScaleVL>true</d3p1:isShowScaleVL> + <d3p1:isShowSeriesScale>true</d3p1:isShowSeriesScale> + <d3p1:isShowPointsScale>true</d3p1:isShowPointsScale> + <d3p1:isShowValuesScale>true</d3p1:isShowValuesScale> + <d3p1:vsFormat> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧС=2</v8:content> + </v8:item> + </d3p1:vsFormat> + <d3p1:xLabelsOrientation>Auto</d3p1:xLabelsOrientation> + <d3p1:scaleLine width="1" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:scaleLine> + <d3p1:scaleColor>#A9A9A9</d3p1:scaleColor> + <d3p1:isAutoSeriesName>false</d3p1:isAutoSeriesName> + <d3p1:isAutoPointName>false</d3p1:isAutoPointName> + <d3p1:maxMode>NotDefined</d3p1:maxMode> + <d3p1:maxSeries>4</d3p1:maxSeries> + <d3p1:maxSeriesPrc>30</d3p1:maxSeriesPrc> + <d3p1:spaceMode>Half</d3p1:spaceMode> + <d3p1:baseVal>50</d3p1:baseVal> + <d3p1:isOutline>true</d3p1:isOutline> + <d3p1:realPiePoint>0</d3p1:realPiePoint> + <d3p1:realStockSeries>0</d3p1:realStockSeries> + <d3p1:isLight>true</d3p1:isLight> + <d3p1:isGradient>false</d3p1:isGradient> + <d3p1:isTransposition>false</d3p1:isTransposition> + <d3p1:hideBaseVal>false</d3p1:hideBaseVal> + <d3p1:dataTable>false</d3p1:dataTable> + <d3p1:dtVerLines>true</d3p1:dtVerLines> + <d3p1:dtHorLines>true</d3p1:dtHorLines> + <d3p1:dtHAlign>Right</d3p1:dtHAlign> + <d3p1:dtFormat/> + <d3p1:dtKeys>true</d3p1:dtKeys> + <d3p1:paletteKind>Palette32</d3p1:paletteKind> + <d3p1:animation>Auto</d3p1:animation> + <d3p1:rebuildTime>8906422</d3p1:rebuildTime> + <d3p1:isTransposed>false</d3p1:isTransposed> + <d3p1:autoTransposition>false</d3p1:autoTransposition> + <d3p1:legendScrollEnable>false</d3p1:legendScrollEnable> + <d3p1:surfaceColor>#A90000</d3p1:surfaceColor> + <d3p1:radarScaleType>Circle</d3p1:radarScaleType> + <d3p1:gaugeValuesPresentation>Needle</d3p1:gaugeValuesPresentation> + <d3p1:gaugeQualityBands useTextStr="false" useTooltipStr="false"> + <v8ui:item> + <v8ui:begin>-99999</v8ui:begin> + <v8ui:end>125</v8ui:end> + <v8ui:backColor>#32CD32</v8ui:backColor> + <v8ui:text/> + <v8ui:tooltip/> + </v8ui:item> + <v8ui:item> + <v8ui:begin>125</v8ui:begin> + <v8ui:end>235</v8ui:end> + <v8ui:backColor>#FFFF00</v8ui:backColor> + <v8ui:text/> + <v8ui:tooltip/> + </v8ui:item> + <v8ui:item> + <v8ui:begin>235</v8ui:begin> + <v8ui:end>99999</v8ui:end> + <v8ui:backColor>#FF0000</v8ui:backColor> + <v8ui:text/> + <v8ui:tooltip/> + </v8ui:item> + </d3p1:gaugeQualityBands> + <d3p1:beginGaugeAngle>0</d3p1:beginGaugeAngle> + <d3p1:endGaugeAngle>180</d3p1:endGaugeAngle> + <d3p1:gaugeThickness>2</d3p1:gaugeThickness> + <d3p1:gaugeLabelsLocation>InsideScale</d3p1:gaugeLabelsLocation> + <d3p1:gaugeLabelsArcDirection>false</d3p1:gaugeLabelsArcDirection> + <d3p1:gaugeBushThickness>5</d3p1:gaugeBushThickness> + <d3p1:gaugeBushColor>#A9A9A9</d3p1:gaugeBushColor> + <d3p1:autoMaxValue>false</d3p1:autoMaxValue> + <d3p1:userMaxValue>300</d3p1:userMaxValue> + <d3p1:autoMinValue>false</d3p1:autoMinValue> + <d3p1:userMinValue>50</d3p1:userMinValue> + <d3p1:elementsIsInit>true</d3p1:elementsIsInit> + <d3p1:titleIsInit>true</d3p1:titleIsInit> + <d3p1:legendIsInit>true</d3p1:legendIsInit> + <d3p1:chartIsInit>true</d3p1:chartIsInit> + <d3p1:elementsChart> + <d3p1:left>0</d3p1:left> + <d3p1:right>0</d3p1:right> + <d3p1:top>0</d3p1:top> + <d3p1:bottom>0</d3p1:bottom> + </d3p1:elementsChart> + <d3p1:elementsLegend> + <d3p1:left>0.831804281345565</d3p1:left> + <d3p1:right>0</d3p1:right> + <d3p1:top>0.126666666666667</d3p1:top> + <d3p1:bottom>0</d3p1:bottom> + </d3p1:elementsLegend> + <d3p1:elementsTitle> + <d3p1:left>0.831804281345565</d3p1:left> + <d3p1:right>0</d3p1:right> + <d3p1:top>0</d3p1:top> + <d3p1:bottom>0.873333333333333</d3p1:bottom> + </d3p1:elementsTitle> + <d3p1:borderColor>style:BorderColor</d3p1:borderColor> + <d3p1:border width="0"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:border> + <d3p1:dataSourceDescription/> + <d3p1:isDataSourceMode>false</d3p1:isDataSourceMode> + <d3p1:isRandomizedNewValues>true</d3p1:isRandomizedNewValues> + <d3p1:realDataItems> + <d3p1:item> + <d3p1:valData xsi:type="xs:decimal">5.48</d3p1:valData> + <d3p1:valInfo xsi:nil="true"/> + <d3p1:toolTip/> + </d3p1:item> + </d3p1:realDataItems> + <d3p1:splineStrain>95</d3p1:splineStrain> + <d3p1:translucencePercent>0</d3p1:translucencePercent> + <d3p1:funnelNeckHeightPercent>10</d3p1:funnelNeckHeightPercent> + <d3p1:funnelNeckWidthPercent>10</d3p1:funnelNeckWidthPercent> + <d3p1:funnelGapSumPercent>3</d3p1:funnelGapSumPercent> + <d3p1:multiStageLinkLine width="1" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:multiStageLinkLine> + <d3p1:multiStageLinkColor>#000000</d3p1:multiStageLinkColor> + <d3p1:valuesAxis> + <d3p1:baseValue>50</d3p1:baseValue> + <d3p1:minValue xsi:type="xs:decimal">50</d3p1:minValue> + <d3p1:maxValue xsi:type="xs:decimal">300</d3p1:maxValue> + <d3p1:minValueDetectionMethod>UseValueWithLimitations</d3p1:minValueDetectionMethod> + <d3p1:maxValueDetectionMethod>UseValueWithLimitations</d3p1:maxValueDetectionMethod> + </d3p1:valuesAxis> + <d3p1:pointsAxis/> + <d3p1:valuesScale> + <d3p1:titleArea> + <d3p1:font kind="AutoFont"/> + <d3p1:textColor>auto</d3p1:textColor> + <d3p1:backColor>auto</d3p1:backColor> + <d3p1:border width="1"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:border> + <d3p1:borderColor>auto</d3p1:borderColor> + </d3p1:titleArea> + <d3p1:labelFormat> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧС=2</v8:content> + </v8:item> + </d3p1:labelFormat> + </d3p1:valuesScale> + <d3p1:legendPlacement>None</d3p1:legendPlacement> + <d3p1:plotAreaPlacement>UseCoordinates</d3p1:plotAreaPlacement> + <d3p1:titleAreaPlacement>None</d3p1:titleAreaPlacement> + </object> + </drawing> + <drawing> + <drawingType>Chart</drawingType> + <id>25</id> + <formatIndex>51</formatIndex> + <beginRow>79</beginRow> + <beginRowOffset>15</beginRowOffset> + <endRow>87</endRow> + <endRowOffset>33</endRowOffset> + <beginColumn>1</beginColumn> + <beginColumnOffset>9</beginColumnOffset> + <endColumn>1</endColumn> + <endColumnOffset>759</endColumnOffset> + <autoSize>false</autoSize> + <pictureSize>Stretch</pictureSize> + <zOrder>0</zOrder> + <object xmlns:d3p1="http://v8.1c.ru/8.2/data/chart" xsi:type="d3p1:Chart"> + <d3p1:seriesCurId>24</d3p1:seriesCurId> + <d3p1:pointsCurId>22</d3p1:pointsCurId> + <d3p1:isSeriesDesign>true</d3p1:isSeriesDesign> + <d3p1:realSeriesCount>1</d3p1:realSeriesCount> + <d3p1:realSeriesData> + <d3p1:id>2</d3p1:id> + <d3p1:color>#484848</d3p1:color> + <d3p1:line width="2" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:line> + <d3p1:marker>Rhomb</d3p1:marker> + <d3p1:text/> + <d3p1:strIsChanged>true</d3p1:strIsChanged> + <d3p1:isExpand>false</d3p1:isExpand> + <d3p1:isIndicator>false</d3p1:isIndicator> + <d3p1:colorPriority>false</d3p1:colorPriority> + </d3p1:realSeriesData> + <d3p1:realExSeriesData> + <d3p1:id>1</d3p1:id> + <d3p1:color>#991919</d3p1:color> + <d3p1:line width="2" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:line> + <d3p1:marker>Rhomb</d3p1:marker> + <d3p1:text> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сводная</v8:content> + </v8:item> + </d3p1:text> + <d3p1:strIsChanged>false</d3p1:strIsChanged> + <d3p1:isExpand>false</d3p1:isExpand> + <d3p1:isIndicator>false</d3p1:isIndicator> + <d3p1:colorPriority>false</d3p1:colorPriority> + </d3p1:realExSeriesData> + <d3p1:isPointsDesign>true</d3p1:isPointsDesign> + <d3p1:realPointCount>1</d3p1:realPointCount> + <d3p1:realPointData> + <d3p1:id>1</d3p1:id> + <d3p1:color>#D02A35</d3p1:color> + <d3p1:line width="2" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:line> + <d3p1:marker>Rhomb</d3p1:marker> + <d3p1:text/> + <d3p1:strIsChanged>true</d3p1:strIsChanged> + <d3p1:isExpand>false</d3p1:isExpand> + <d3p1:isIndicator>false</d3p1:isIndicator> + <d3p1:colorPriority>false</d3p1:colorPriority> + </d3p1:realPointData> + <d3p1:curSeries>0</d3p1:curSeries> + <d3p1:curPoint>0</d3p1:curPoint> + <d3p1:chartType>Gauge</d3p1:chartType> + <d3p1:circleLabelType>None</d3p1:circleLabelType> + <d3p1:labelsDelimiter>, </d3p1:labelsDelimiter> + <d3p1:labelsLocation>Edge</d3p1:labelsLocation> + <d3p1:lbFormat/> + <d3p1:lbpFormat/> + <d3p1:labelsColor>style:FormTextColor</d3p1:labelsColor> + <d3p1:labelsFont kind="AutoFont"/> + <d3p1:transparentLabelsBkg>true</d3p1:transparentLabelsBkg> + <d3p1:labelsBkgColor>auto</d3p1:labelsBkgColor> + <d3p1:labelsBorder width="1"> + <v8ui:style xsi:type="v8ui:ControlBorderType">Single</v8ui:style> + </d3p1:labelsBorder> + <d3p1:labelsBorderColor>auto</d3p1:labelsBorderColor> + <d3p1:circleExpandMode>None</d3p1:circleExpandMode> + <d3p1:chart3Dcrd>SouthWest</d3p1:chart3Dcrd> + <d3p1:title> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>D1</v8:content> + </v8:item> + </d3p1:title> + <d3p1:isShowTitle>false</d3p1:isShowTitle> + <d3p1:isShowLegend>false</d3p1:isShowLegend> + <d3p1:ttlBorder width="0"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:ttlBorder> + <d3p1:ttlBorderColor>style:BorderColor</d3p1:ttlBorderColor> + <d3p1:lgBorder width="0"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:lgBorder> + <d3p1:lgBorderColor>style:BorderColor</d3p1:lgBorderColor> + <d3p1:chBorder width="0"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:chBorder> + <d3p1:chBorderColor>style:BorderColor</d3p1:chBorderColor> + <d3p1:transparent>false</d3p1:transparent> + <d3p1:bkgColor>style:FormBackColor</d3p1:bkgColor> + <d3p1:isTrnspTtl>true</d3p1:isTrnspTtl> + <d3p1:ttlColor>style:FormBackColor</d3p1:ttlColor> + <d3p1:isTrnspLeg>true</d3p1:isTrnspLeg> + <d3p1:legColor>style:FormBackColor</d3p1:legColor> + <d3p1:isTrnspCh>false</d3p1:isTrnspCh> + <d3p1:chColor>#FFFFFF</d3p1:chColor> + <d3p1:ttlTxtColor>style:FormTextColor</d3p1:ttlTxtColor> + <d3p1:legTxtColor>style:FormTextColor</d3p1:legTxtColor> + <d3p1:chTxtColor>style:FormTextColor</d3p1:chTxtColor> + <d3p1:ttlFont ref="style:TextFont" kind="StyleItem"/> + <d3p1:legFont ref="style:TextFont" kind="StyleItem"/> + <d3p1:chFont ref="style:TextFont" kind="StyleItem"/> + <d3p1:isShowScale>true</d3p1:isShowScale> + <d3p1:isShowScaleVL>true</d3p1:isShowScaleVL> + <d3p1:isShowSeriesScale>true</d3p1:isShowSeriesScale> + <d3p1:isShowPointsScale>true</d3p1:isShowPointsScale> + <d3p1:isShowValuesScale>true</d3p1:isShowValuesScale> + <d3p1:vsFormat> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧС=2;ЧН=</v8:content> + </v8:item> + </d3p1:vsFormat> + <d3p1:xLabelsOrientation>Auto</d3p1:xLabelsOrientation> + <d3p1:scaleLine width="1" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:scaleLine> + <d3p1:scaleColor>#A9A9A9</d3p1:scaleColor> + <d3p1:isAutoSeriesName>false</d3p1:isAutoSeriesName> + <d3p1:isAutoPointName>false</d3p1:isAutoPointName> + <d3p1:maxMode>NotDefined</d3p1:maxMode> + <d3p1:maxSeries>4</d3p1:maxSeries> + <d3p1:maxSeriesPrc>30</d3p1:maxSeriesPrc> + <d3p1:spaceMode>Half</d3p1:spaceMode> + <d3p1:baseVal>0</d3p1:baseVal> + <d3p1:isOutline>true</d3p1:isOutline> + <d3p1:realPiePoint>0</d3p1:realPiePoint> + <d3p1:realStockSeries>0</d3p1:realStockSeries> + <d3p1:isLight>true</d3p1:isLight> + <d3p1:isGradient>false</d3p1:isGradient> + <d3p1:isTransposition>false</d3p1:isTransposition> + <d3p1:hideBaseVal>false</d3p1:hideBaseVal> + <d3p1:dataTable>false</d3p1:dataTable> + <d3p1:dtVerLines>true</d3p1:dtVerLines> + <d3p1:dtHorLines>true</d3p1:dtHorLines> + <d3p1:dtHAlign>Right</d3p1:dtHAlign> + <d3p1:dtFormat/> + <d3p1:dtKeys>true</d3p1:dtKeys> + <d3p1:paletteKind>Palette32</d3p1:paletteKind> + <d3p1:animation>Auto</d3p1:animation> + <d3p1:rebuildTime>8906422</d3p1:rebuildTime> + <d3p1:isTransposed>false</d3p1:isTransposed> + <d3p1:autoTransposition>false</d3p1:autoTransposition> + <d3p1:legendScrollEnable>false</d3p1:legendScrollEnable> + <d3p1:surfaceColor>#A90000</d3p1:surfaceColor> + <d3p1:radarScaleType>Circle</d3p1:radarScaleType> + <d3p1:gaugeValuesPresentation>Needle</d3p1:gaugeValuesPresentation> + <d3p1:gaugeQualityBands useTextStr="false" useTooltipStr="false"> + <v8ui:item> + <v8ui:begin>-99999</v8ui:begin> + <v8ui:end>0</v8ui:end> + <v8ui:backColor>#FF0000</v8ui:backColor> + <v8ui:text/> + <v8ui:tooltip/> + </v8ui:item> + <v8ui:item> + <v8ui:begin>0</v8ui:begin> + <v8ui:end>999999</v8ui:end> + <v8ui:backColor>#32CD32</v8ui:backColor> + <v8ui:text/> + <v8ui:tooltip/> + </v8ui:item> + </d3p1:gaugeQualityBands> + <d3p1:beginGaugeAngle>0</d3p1:beginGaugeAngle> + <d3p1:endGaugeAngle>180</d3p1:endGaugeAngle> + <d3p1:gaugeThickness>2</d3p1:gaugeThickness> + <d3p1:gaugeLabelsLocation>InsideScale</d3p1:gaugeLabelsLocation> + <d3p1:gaugeLabelsArcDirection>false</d3p1:gaugeLabelsArcDirection> + <d3p1:gaugeBushThickness>5</d3p1:gaugeBushThickness> + <d3p1:gaugeBushColor>#A9A9A9</d3p1:gaugeBushColor> + <d3p1:autoMaxValue>false</d3p1:autoMaxValue> + <d3p1:userMaxValue>300</d3p1:userMaxValue> + <d3p1:autoMinValue>false</d3p1:autoMinValue> + <d3p1:userMinValue>-300</d3p1:userMinValue> + <d3p1:elementsIsInit>true</d3p1:elementsIsInit> + <d3p1:titleIsInit>true</d3p1:titleIsInit> + <d3p1:legendIsInit>true</d3p1:legendIsInit> + <d3p1:chartIsInit>true</d3p1:chartIsInit> + <d3p1:elementsChart> + <d3p1:left>0</d3p1:left> + <d3p1:right>0</d3p1:right> + <d3p1:top>0</d3p1:top> + <d3p1:bottom>0</d3p1:bottom> + </d3p1:elementsChart> + <d3p1:elementsLegend> + <d3p1:left>0.831804281345565</d3p1:left> + <d3p1:right>0</d3p1:right> + <d3p1:top>0.126666666666667</d3p1:top> + <d3p1:bottom>0</d3p1:bottom> + </d3p1:elementsLegend> + <d3p1:elementsTitle> + <d3p1:left>0.831804281345565</d3p1:left> + <d3p1:right>0</d3p1:right> + <d3p1:top>0</d3p1:top> + <d3p1:bottom>0.873333333333333</d3p1:bottom> + </d3p1:elementsTitle> + <d3p1:borderColor>style:BorderColor</d3p1:borderColor> + <d3p1:border width="0"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:border> + <d3p1:dataSourceDescription/> + <d3p1:isDataSourceMode>false</d3p1:isDataSourceMode> + <d3p1:isRandomizedNewValues>true</d3p1:isRandomizedNewValues> + <d3p1:realDataItems> + <d3p1:item> + <d3p1:valData xsi:type="xs:decimal">5.48</d3p1:valData> + <d3p1:valInfo xsi:nil="true"/> + <d3p1:toolTip/> + </d3p1:item> + </d3p1:realDataItems> + <d3p1:splineStrain>95</d3p1:splineStrain> + <d3p1:translucencePercent>0</d3p1:translucencePercent> + <d3p1:funnelNeckHeightPercent>10</d3p1:funnelNeckHeightPercent> + <d3p1:funnelNeckWidthPercent>10</d3p1:funnelNeckWidthPercent> + <d3p1:funnelGapSumPercent>3</d3p1:funnelGapSumPercent> + <d3p1:multiStageLinkLine width="1" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:multiStageLinkLine> + <d3p1:multiStageLinkColor>#000000</d3p1:multiStageLinkColor> + <d3p1:valuesAxis> + <d3p1:minValue xsi:type="xs:decimal">-300</d3p1:minValue> + <d3p1:maxValue xsi:type="xs:decimal">300</d3p1:maxValue> + <d3p1:minValueDetectionMethod>UseValueWithLimitations</d3p1:minValueDetectionMethod> + <d3p1:maxValueDetectionMethod>UseValueWithLimitations</d3p1:maxValueDetectionMethod> + </d3p1:valuesAxis> + <d3p1:pointsAxis/> + <d3p1:valuesScale> + <d3p1:titleArea> + <d3p1:font kind="AutoFont"/> + <d3p1:textColor>auto</d3p1:textColor> + <d3p1:backColor>auto</d3p1:backColor> + <d3p1:border width="1"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:border> + <d3p1:borderColor>auto</d3p1:borderColor> + </d3p1:titleArea> + <d3p1:labelFormat> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧС=2;ЧН=</v8:content> + </v8:item> + </d3p1:labelFormat> + </d3p1:valuesScale> + <d3p1:legendPlacement>None</d3p1:legendPlacement> + <d3p1:plotAreaPlacement>UseCoordinates</d3p1:plotAreaPlacement> + <d3p1:titleAreaPlacement>None</d3p1:titleAreaPlacement> + </object> + </drawing> + <drawing> + <drawingType>Chart</drawingType> + <id>26</id> + <formatIndex>51</formatIndex> + <beginRow>113</beginRow> + <beginRowOffset>15</beginRowOffset> + <endRow>121</endRow> + <endRowOffset>33</endRowOffset> + <beginColumn>1</beginColumn> + <beginColumnOffset>9</beginColumnOffset> + <endColumn>1</endColumn> + <endColumnOffset>759</endColumnOffset> + <autoSize>false</autoSize> + <pictureSize>Stretch</pictureSize> + <zOrder>0</zOrder> + <object xmlns:d3p1="http://v8.1c.ru/8.2/data/chart" xsi:type="d3p1:Chart"> + <d3p1:seriesCurId>27</d3p1:seriesCurId> + <d3p1:pointsCurId>25</d3p1:pointsCurId> + <d3p1:isSeriesDesign>true</d3p1:isSeriesDesign> + <d3p1:realSeriesCount>1</d3p1:realSeriesCount> + <d3p1:realSeriesData> + <d3p1:id>2</d3p1:id> + <d3p1:color>#484848</d3p1:color> + <d3p1:line width="2" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:line> + <d3p1:marker>Rhomb</d3p1:marker> + <d3p1:text/> + <d3p1:strIsChanged>true</d3p1:strIsChanged> + <d3p1:isExpand>false</d3p1:isExpand> + <d3p1:isIndicator>false</d3p1:isIndicator> + <d3p1:colorPriority>false</d3p1:colorPriority> + </d3p1:realSeriesData> + <d3p1:realExSeriesData> + <d3p1:id>1</d3p1:id> + <d3p1:color>#991919</d3p1:color> + <d3p1:line width="2" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:line> + <d3p1:marker>Rhomb</d3p1:marker> + <d3p1:text> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сводная</v8:content> + </v8:item> + </d3p1:text> + <d3p1:strIsChanged>false</d3p1:strIsChanged> + <d3p1:isExpand>false</d3p1:isExpand> + <d3p1:isIndicator>false</d3p1:isIndicator> + <d3p1:colorPriority>false</d3p1:colorPriority> + </d3p1:realExSeriesData> + <d3p1:isPointsDesign>true</d3p1:isPointsDesign> + <d3p1:realPointCount>1</d3p1:realPointCount> + <d3p1:realPointData> + <d3p1:id>1</d3p1:id> + <d3p1:color>#D02A35</d3p1:color> + <d3p1:line width="2" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:line> + <d3p1:marker>Rhomb</d3p1:marker> + <d3p1:text/> + <d3p1:strIsChanged>true</d3p1:strIsChanged> + <d3p1:isExpand>false</d3p1:isExpand> + <d3p1:isIndicator>false</d3p1:isIndicator> + <d3p1:colorPriority>false</d3p1:colorPriority> + </d3p1:realPointData> + <d3p1:curSeries>0</d3p1:curSeries> + <d3p1:curPoint>0</d3p1:curPoint> + <d3p1:chartType>Gauge</d3p1:chartType> + <d3p1:circleLabelType>None</d3p1:circleLabelType> + <d3p1:labelsDelimiter>, </d3p1:labelsDelimiter> + <d3p1:labelsLocation>Edge</d3p1:labelsLocation> + <d3p1:lbFormat/> + <d3p1:lbpFormat/> + <d3p1:labelsColor>style:FormTextColor</d3p1:labelsColor> + <d3p1:labelsFont kind="AutoFont"/> + <d3p1:transparentLabelsBkg>true</d3p1:transparentLabelsBkg> + <d3p1:labelsBkgColor>auto</d3p1:labelsBkgColor> + <d3p1:labelsBorder width="1"> + <v8ui:style xsi:type="v8ui:ControlBorderType">Single</v8ui:style> + </d3p1:labelsBorder> + <d3p1:labelsBorderColor>auto</d3p1:labelsBorderColor> + <d3p1:circleExpandMode>None</d3p1:circleExpandMode> + <d3p1:chart3Dcrd>SouthWest</d3p1:chart3Dcrd> + <d3p1:title> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>D1</v8:content> + </v8:item> + </d3p1:title> + <d3p1:isShowTitle>false</d3p1:isShowTitle> + <d3p1:isShowLegend>false</d3p1:isShowLegend> + <d3p1:ttlBorder width="0"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:ttlBorder> + <d3p1:ttlBorderColor>style:BorderColor</d3p1:ttlBorderColor> + <d3p1:lgBorder width="0"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:lgBorder> + <d3p1:lgBorderColor>style:BorderColor</d3p1:lgBorderColor> + <d3p1:chBorder width="0"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:chBorder> + <d3p1:chBorderColor>style:BorderColor</d3p1:chBorderColor> + <d3p1:transparent>false</d3p1:transparent> + <d3p1:bkgColor>style:FormBackColor</d3p1:bkgColor> + <d3p1:isTrnspTtl>true</d3p1:isTrnspTtl> + <d3p1:ttlColor>style:FormBackColor</d3p1:ttlColor> + <d3p1:isTrnspLeg>true</d3p1:isTrnspLeg> + <d3p1:legColor>style:FormBackColor</d3p1:legColor> + <d3p1:isTrnspCh>false</d3p1:isTrnspCh> + <d3p1:chColor>#FFFFFF</d3p1:chColor> + <d3p1:ttlTxtColor>style:FormTextColor</d3p1:ttlTxtColor> + <d3p1:legTxtColor>style:FormTextColor</d3p1:legTxtColor> + <d3p1:chTxtColor>style:FormTextColor</d3p1:chTxtColor> + <d3p1:ttlFont ref="style:TextFont" kind="StyleItem"/> + <d3p1:legFont ref="style:TextFont" kind="StyleItem"/> + <d3p1:chFont ref="style:TextFont" kind="StyleItem"/> + <d3p1:isShowScale>true</d3p1:isShowScale> + <d3p1:isShowScaleVL>true</d3p1:isShowScaleVL> + <d3p1:isShowSeriesScale>true</d3p1:isShowSeriesScale> + <d3p1:isShowPointsScale>true</d3p1:isShowPointsScale> + <d3p1:isShowValuesScale>true</d3p1:isShowValuesScale> + <d3p1:vsFormat> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧС=2;ЧН=</v8:content> + </v8:item> + </d3p1:vsFormat> + <d3p1:xLabelsOrientation>Auto</d3p1:xLabelsOrientation> + <d3p1:scaleLine width="1" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:scaleLine> + <d3p1:scaleColor>#A9A9A9</d3p1:scaleColor> + <d3p1:isAutoSeriesName>false</d3p1:isAutoSeriesName> + <d3p1:isAutoPointName>false</d3p1:isAutoPointName> + <d3p1:maxMode>NotDefined</d3p1:maxMode> + <d3p1:maxSeries>4</d3p1:maxSeries> + <d3p1:maxSeriesPrc>30</d3p1:maxSeriesPrc> + <d3p1:spaceMode>Half</d3p1:spaceMode> + <d3p1:baseVal>0</d3p1:baseVal> + <d3p1:isOutline>true</d3p1:isOutline> + <d3p1:realPiePoint>0</d3p1:realPiePoint> + <d3p1:realStockSeries>0</d3p1:realStockSeries> + <d3p1:isLight>true</d3p1:isLight> + <d3p1:isGradient>false</d3p1:isGradient> + <d3p1:isTransposition>false</d3p1:isTransposition> + <d3p1:hideBaseVal>false</d3p1:hideBaseVal> + <d3p1:dataTable>false</d3p1:dataTable> + <d3p1:dtVerLines>true</d3p1:dtVerLines> + <d3p1:dtHorLines>true</d3p1:dtHorLines> + <d3p1:dtHAlign>Right</d3p1:dtHAlign> + <d3p1:dtFormat/> + <d3p1:dtKeys>true</d3p1:dtKeys> + <d3p1:paletteKind>Palette32</d3p1:paletteKind> + <d3p1:animation>Auto</d3p1:animation> + <d3p1:rebuildTime>8906422</d3p1:rebuildTime> + <d3p1:isTransposed>false</d3p1:isTransposed> + <d3p1:autoTransposition>false</d3p1:autoTransposition> + <d3p1:legendScrollEnable>false</d3p1:legendScrollEnable> + <d3p1:surfaceColor>#A90000</d3p1:surfaceColor> + <d3p1:radarScaleType>Circle</d3p1:radarScaleType> + <d3p1:gaugeValuesPresentation>Needle</d3p1:gaugeValuesPresentation> + <d3p1:gaugeQualityBands useTextStr="false" useTooltipStr="false"> + <v8ui:item> + <v8ui:begin>-99999</v8ui:begin> + <v8ui:end>0</v8ui:end> + <v8ui:backColor>#FF0000</v8ui:backColor> + <v8ui:text/> + <v8ui:tooltip/> + </v8ui:item> + <v8ui:item> + <v8ui:begin>0</v8ui:begin> + <v8ui:end>999999</v8ui:end> + <v8ui:backColor>#32CD32</v8ui:backColor> + <v8ui:text/> + <v8ui:tooltip/> + </v8ui:item> + </d3p1:gaugeQualityBands> + <d3p1:beginGaugeAngle>0</d3p1:beginGaugeAngle> + <d3p1:endGaugeAngle>180</d3p1:endGaugeAngle> + <d3p1:gaugeThickness>2</d3p1:gaugeThickness> + <d3p1:gaugeLabelsLocation>InsideScale</d3p1:gaugeLabelsLocation> + <d3p1:gaugeLabelsArcDirection>false</d3p1:gaugeLabelsArcDirection> + <d3p1:gaugeBushThickness>5</d3p1:gaugeBushThickness> + <d3p1:gaugeBushColor>#A9A9A9</d3p1:gaugeBushColor> + <d3p1:autoMaxValue>false</d3p1:autoMaxValue> + <d3p1:userMaxValue>300</d3p1:userMaxValue> + <d3p1:autoMinValue>false</d3p1:autoMinValue> + <d3p1:userMinValue>-300</d3p1:userMinValue> + <d3p1:elementsIsInit>true</d3p1:elementsIsInit> + <d3p1:titleIsInit>true</d3p1:titleIsInit> + <d3p1:legendIsInit>true</d3p1:legendIsInit> + <d3p1:chartIsInit>true</d3p1:chartIsInit> + <d3p1:elementsChart> + <d3p1:left>0</d3p1:left> + <d3p1:right>0</d3p1:right> + <d3p1:top>0</d3p1:top> + <d3p1:bottom>0</d3p1:bottom> + </d3p1:elementsChart> + <d3p1:elementsLegend> + <d3p1:left>0.831804281345565</d3p1:left> + <d3p1:right>0</d3p1:right> + <d3p1:top>0.126666666666667</d3p1:top> + <d3p1:bottom>0</d3p1:bottom> + </d3p1:elementsLegend> + <d3p1:elementsTitle> + <d3p1:left>0.831804281345565</d3p1:left> + <d3p1:right>0</d3p1:right> + <d3p1:top>0</d3p1:top> + <d3p1:bottom>0.873333333333333</d3p1:bottom> + </d3p1:elementsTitle> + <d3p1:borderColor>style:BorderColor</d3p1:borderColor> + <d3p1:border width="0"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:border> + <d3p1:dataSourceDescription/> + <d3p1:isDataSourceMode>false</d3p1:isDataSourceMode> + <d3p1:isRandomizedNewValues>true</d3p1:isRandomizedNewValues> + <d3p1:realDataItems> + <d3p1:item> + <d3p1:valData xsi:type="xs:decimal">5.48</d3p1:valData> + <d3p1:valInfo xsi:nil="true"/> + <d3p1:toolTip/> + </d3p1:item> + </d3p1:realDataItems> + <d3p1:splineStrain>95</d3p1:splineStrain> + <d3p1:translucencePercent>0</d3p1:translucencePercent> + <d3p1:funnelNeckHeightPercent>10</d3p1:funnelNeckHeightPercent> + <d3p1:funnelNeckWidthPercent>10</d3p1:funnelNeckWidthPercent> + <d3p1:funnelGapSumPercent>3</d3p1:funnelGapSumPercent> + <d3p1:multiStageLinkLine width="1" gap="false"> + <v8ui:style xsi:type="v8ui:ChartLineType">Solid</v8ui:style> + </d3p1:multiStageLinkLine> + <d3p1:multiStageLinkColor>#000000</d3p1:multiStageLinkColor> + <d3p1:valuesAxis> + <d3p1:minValue xsi:type="xs:decimal">-300</d3p1:minValue> + <d3p1:maxValue xsi:type="xs:decimal">300</d3p1:maxValue> + <d3p1:minValueDetectionMethod>UseValueWithLimitations</d3p1:minValueDetectionMethod> + <d3p1:maxValueDetectionMethod>UseValueWithLimitations</d3p1:maxValueDetectionMethod> + </d3p1:valuesAxis> + <d3p1:pointsAxis/> + <d3p1:valuesScale> + <d3p1:titleArea> + <d3p1:font kind="AutoFont"/> + <d3p1:textColor>auto</d3p1:textColor> + <d3p1:backColor>auto</d3p1:backColor> + <d3p1:border width="1"> + <v8ui:style xsi:type="v8ui:ControlBorderType">WithoutBorder</v8ui:style> + </d3p1:border> + <d3p1:borderColor>auto</d3p1:borderColor> + </d3p1:titleArea> + <d3p1:labelFormat> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧС=2;ЧН=</v8:content> + </v8:item> + </d3p1:labelFormat> + </d3p1:valuesScale> + <d3p1:legendPlacement>None</d3p1:legendPlacement> + <d3p1:plotAreaPlacement>UseCoordinates</d3p1:plotAreaPlacement> + <d3p1:titleAreaPlacement>None</d3p1:titleAreaPlacement> + </object> + </drawing> + <templateMode>true</templateMode> + <defaultFormatIndex>9</defaultFormatIndex> + <height>146</height> + <vgRows>146</vgRows> + <merge> + <r>0</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>1</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>8</r> + <c>2</c> + <w>3</w> + </merge> + <merge> + <r>9</r> + <c>2</c> + <w>3</w> + </merge> + <merge> + <r>14</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>15</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>16</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>17</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>27</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>28</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>29</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>30</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>46</r> + <c>2</c> + <w>3</w> + </merge> + <merge> + <r>47</r> + <c>2</c> + <w>3</w> + </merge> + <merge> + <r>52</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>53</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>54</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>55</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>56</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>57</r> + <c>2</c> + <w>1</w> + </merge> + <merge> + <r>57</r> + <c>4</c> + <w>1</w> + </merge> + <merge> + <r>57</r> + <c>6</c> + <w>1</w> + </merge> + <merge> + <r>73</r> + <c>2</c> + <w>3</w> + </merge> + <merge> + <r>74</r> + <c>2</c> + <w>3</w> + </merge> + <merge> + <r>83</r> + <c>2</c> + <w>3</w> + </merge> + <merge> + <r>84</r> + <c>2</c> + <w>3</w> + </merge> + <merge> + <r>89</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>90</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>91</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>99</r> + <c>1</c> + <w>3</w> + </merge> + <merge> + <r>107</r> + <c>2</c> + <w>3</w> + </merge> + <merge> + <r>108</r> + <c>2</c> + <w>3</w> + </merge> + <merge> + <r>117</r> + <c>2</c> + <w>3</w> + </merge> + <merge> + <r>118</r> + <c>2</c> + <w>3</w> + </merge> + <merge> + <r>123</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>124</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>125</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>133</r> + <c>1</c> + <w>3</w> + </merge> + <merge> + <r>137</r> + <c>2</c> + <w>1</w> + </merge> + <merge> + <r>137</r> + <c>4</c> + <w>6</w> + </merge> + <merge> + <r>139</r> + <c>2</c> + <w>1</w> + </merge> + <merge> + <r>139</r> + <c>4</c> + <w>6</w> + </merge> + <merge> + <r>141</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>143</r> + <c>1</c> + <w>4</w> + </merge> + <merge> + <r>145</r> + <c>1</c> + <w>4</w> + </merge> + <namedItem xsi:type="NamedItemCells"> + <name>АнализНеПроведенНетОтчетности</name> + <area> + <type>Rows</type> + <beginRow>141</beginRow> + <endRow>141</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>АнализНеПроведенОтчетностьНКО</name> + <area> + <type>Rows</type> + <beginRow>143</beginRow> + <endRow>143</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>АнализНеПроведенПрочее</name> + <area> + <type>Rows</type> + <beginRow>145</beginRow> + <endRow>145</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemDrawing"> + <name>ДиаграммаКредитоспособность</name> + <drawingID>24</drawingID> + </namedItem> + <namedItem xsi:type="NamedItemDrawing"> + <name>ДиаграммаРентабельностьАктивов</name> + <drawingID>21</drawingID> + </namedItem> + <namedItem xsi:type="NamedItemDrawing"> + <name>ДиаграммаРентабельностьАктивов0</name> + <drawingID>25</drawingID> + </namedItem> + <namedItem xsi:type="NamedItemDrawing"> + <name>ДиаграммаРентабельностьПродаж</name> + <drawingID>22</drawingID> + </namedItem> + <namedItem xsi:type="NamedItemDrawing"> + <name>ДиаграммаРентабельностьПродаж0</name> + <drawingID>26</drawingID> + </namedItem> + <namedItem xsi:type="NamedItemDrawing"> + <name>ДиаграммаРискБанкротства</name> + <drawingID>1</drawingID> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>Кредитоспособность</name> + <area> + <type>Rows</type> + <beginRow>41</beginRow> + <endRow>50</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>КредитоспособностьПоказатели</name> + <area> + <type>Rows</type> + <beginRow>57</beginRow> + <endRow>66</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>КредитоспособностьРасчет</name> + <area> + <type>Rows</type> + <beginRow>52</beginRow> + <endRow>56</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ПоказатьРасчет</name> + <area> + <type>Rows</type> + <beginRow>137</beginRow> + <endRow>137</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + <columnsID>37006c65-2b7f-4f85-8374-bf0a0c619aef</columnsID> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ПояснениеОценкиКредитоспособность</name> + <area> + <type>Rectangle</type> + <beginRow>47</beginRow> + <endRow>47</endRow> + <beginColumn>2</beginColumn> + <endColumn>5</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ПояснениеОценкиРентабельностьАктивов</name> + <area> + <type>Rectangle</type> + <beginRow>74</beginRow> + <endRow>74</endRow> + <beginColumn>2</beginColumn> + <endColumn>5</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ПояснениеОценкиРентабельностьАктивов0</name> + <area> + <type>Rectangle</type> + <beginRow>84</beginRow> + <endRow>84</endRow> + <beginColumn>2</beginColumn> + <endColumn>5</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ПояснениеОценкиРентабельностьПродаж</name> + <area> + <type>Rectangle</type> + <beginRow>108</beginRow> + <endRow>108</endRow> + <beginColumn>2</beginColumn> + <endColumn>5</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ПояснениеОценкиРентабельностьПродаж0</name> + <area> + <type>Rectangle</type> + <beginRow>118</beginRow> + <endRow>118</endRow> + <beginColumn>2</beginColumn> + <endColumn>5</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>ПояснениеОценкиРискБанкротства</name> + <area> + <type>Rectangle</type> + <beginRow>9</beginRow> + <endRow>9</endRow> + <beginColumn>2</beginColumn> + <endColumn>5</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>РентабельностьАктивов</name> + <area> + <type>Rows</type> + <beginRow>68</beginRow> + <endRow>77</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>РентабельностьАктивов0</name> + <area> + <type>Rows</type> + <beginRow>78</beginRow> + <endRow>87</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>РентабельностьАктивовПоказатели</name> + <area> + <type>Rows</type> + <beginRow>92</beginRow> + <endRow>100</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>РентабельностьАктивовРасчет</name> + <area> + <type>Rows</type> + <beginRow>89</beginRow> + <endRow>91</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>РентабельностьПродаж</name> + <area> + <type>Rows</type> + <beginRow>102</beginRow> + <endRow>111</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>РентабельностьПродаж0</name> + <area> + <type>Rows</type> + <beginRow>112</beginRow> + <endRow>121</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>РентабельностьПродажПоказатели</name> + <area> + <type>Rows</type> + <beginRow>126</beginRow> + <endRow>134</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>РентабельностьПродажРасчет</name> + <area> + <type>Rows</type> + <beginRow>123</beginRow> + <endRow>125</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>РискБанкротства</name> + <area> + <type>Rows</type> + <beginRow>3</beginRow> + <endRow>12</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>РискБанкротстваПоказатели</name> + <area> + <type>Rows</type> + <beginRow>18</beginRow> + <endRow>25</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>РискБанкротстваПоказателиПроизводство</name> + <area> + <type>Rows</type> + <beginRow>31</beginRow> + <endRow>39</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>РискБанкротстваРасчет</name> + <area> + <type>Rows</type> + <beginRow>14</beginRow> + <endRow>17</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>РискБанкротстваРасчетПроизводство</name> + <area> + <type>Rows</type> + <beginRow>27</beginRow> + <endRow>30</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>СкрытьРасчет</name> + <area> + <type>Rows</type> + <beginRow>139</beginRow> + <endRow>139</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <namedItem xsi:type="NamedItemCells"> + <name>Шапка</name> + <area> + <type>Rows</type> + <beginRow>0</beginRow> + <endRow>1</endRow> + <beginColumn>-1</beginColumn> + <endColumn>-1</endColumn> + </area> + </namedItem> + <line width="1" gap="false"> + <v8ui:style xsi:type="v8ui:SpreadsheetDocumentCellLineType">Solid</v8ui:style> + </line> + <line width="1" gap="false"> + <v8ui:style xsi:type="v8ui:SpreadsheetDocumentDrawingLineType">None</v8ui:style> + </line> + <font faceName="Arial" height="18" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="12" bold="true" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="8" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="8" bold="true" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="12" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="11" bold="true" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="11" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="9" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="16" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="10" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="10" bold="true" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="24" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="8" bold="false" italic="false" underline="false" strikeout="false" kind="Absolute"/> + <font faceName="Arial" height="10" bold="false" italic="false" underline="true" strikeout="false" kind="Absolute"/> + <format> + <width>24</width> + </format> + <format> + <width>376</width> + </format> + <format> + <width>80</width> + </format> + <format> + <width>112</width> + </format> + <format> + <width>22</width> + </format> + <format> + <width>120</width> + </format> + <format> + <width>288</width> + </format> + <format> + <width>76</width> + </format> + <format> + <width>72</width> + </format> + <format> + <width>60</width> + </format> + <format> + <width>16</width> + </format> + <format> + <font>0</font> + </format> + <format> + <font>1</font> + <verticalAlignment>Center</verticalAlignment> + <fillType>Parameter</fillType> + </format> + <format> + <font>2</font> + </format> + <format> + <font>2</font> + <verticalAlignment>Top</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <textPlacement>Wrap</textPlacement> + </format> + <format> + <font>3</font> + </format> + <format> + <font>4</font> + </format> + <format> + <font>5</font> + </format> + <format> + <font>6</font> + <fillType>Template</fillType> + </format> + <format> + <font>6</font> + <width>80</width> + <fillType>Parameter</fillType> + </format> + <format> + <font>7</font> + <textPlacement>Wrap</textPlacement> + </format> + <format> + <font>8</font> + </format> + <format> + <font>7</font> + <verticalAlignment>Center</verticalAlignment> + </format> + <format> + <font>7</font> + </format> + <format> + <font>9</font> + <height>138</height> + <width>346</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <bySelectedColumns>true</bySelectedColumns> + </format> + <format> + <font>10</font> + <horizontalAlignment>Right</horizontalAlignment> + <fillType>Parameter</fillType> + </format> + <format> + <font>10</font> + <width>99</width> + <horizontalAlignment>Right</horizontalAlignment> + <fillType>Parameter</fillType> + </format> + <format> + <font>7</font> + <height>138</height> + <width>346</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <bySelectedColumns>true</bySelectedColumns> + </format> + <format> + <font>2</font> + <width>99</width> + </format> + <format> + <font>9</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>26</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + <bySelectedColumns>true</bySelectedColumns> + <indent>0</indent> + </format> + <format> + <font>9</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>51</width> + <horizontalAlignment>Right</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Parameter</fillType> + <markNegatives>true</markNegatives> + <format> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ЧН=0</v8:content> + </v8:item> + </format> + </format> + <format> + <font>9</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>346</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + <bySelectedColumns>true</bySelectedColumns> + </format> + <format> + <font>10</font> + <bottomBorder>0</bottomBorder> + <height>0</height> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + <width>346</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textPlacement>Wrap</textPlacement> + <fillType>Text</fillType> + </format> + <format> + <font>3</font> + <height>78</height> + <width>346</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Top</verticalAlignment> + <textPlacement>Wrap</textPlacement> + </format> + <format> + <font>11</font> + </format> + <format> + <font>9</font> + </format> + <format> + <font>10</font> + <horizontalAlignment>Center</horizontalAlignment> + <fillType>Parameter</fillType> + </format> + <format> + <font>10</font> + <width>99</width> + <horizontalAlignment>Center</horizontalAlignment> + <fillType>Parameter</fillType> + </format> + <format> + <font>2</font> + <horizontalAlignment>Right</horizontalAlignment> + </format> + <format> + <font>2</font> + <width>72</width> + <horizontalAlignment>Right</horizontalAlignment> + </format> + <format> + <font>2</font> + <width>120</width> + <horizontalAlignment>Right</horizontalAlignment> + </format> + <format> + <bottomBorder>0</bottomBorder> + <borderColor>style:ДосьеРамкаСтрокиЦвет</borderColor> + </format> + <format> + <font>2</font> + <width>72</width> + </format> + <format> + <font>9</font> + <height>138</height> + <width>346</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <fillType>Parameter</fillType> + <bySelectedColumns>true</bySelectedColumns> + </format> + <format> + <font>12</font> + <height>78</height> + <width>346</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <textPlacement>Wrap</textPlacement> + <fillType>Parameter</fillType> + </format> + <format> + <font>2</font> + <height>78</height> + <width>346</width> + <horizontalAlignment>Left</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + <textColor>style:ДосьеВторостепеннаяНадписьЦвет</textColor> + <textPlacement>Wrap</textPlacement> + <fillType>Parameter</fillType> + </format> + <format> + <font>0</font> + <width>24</width> + </format> + <format> + <font>13</font> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Top</verticalAlignment> + <textColor>style:ДосьеГиперссылкаЦвет</textColor> + <detailsUse>Cell</detailsUse> + <hyperLink>true</hyperLink> + </format> + <format> + <font>13</font> + <verticalAlignment>Top</verticalAlignment> + <detailsUse>Row</detailsUse> + <hyperLink>true</hyperLink> + </format> + <format> + <font>8</font> + <width>24</width> + </format> + <format> + <drawingBorder>1</drawingBorder> + <verticalAlignment>Top</verticalAlignment> + <backColor>style:FieldBackColor</backColor> + </format> +</document> \ No newline at end of file diff --git a/SSL/src/Reports/ДосьеКонтрагента/ДосьеКонтрагента.mdo b/SSL/src/Reports/ДосьеКонтрагента/ДосьеКонтрагента.mdo index 79c338a26..e5c4c7cda 100644 --- a/SSL/src/Reports/ДосьеКонтрагента/ДосьеКонтрагента.mdo +++ b/SSL/src/Reports/ДосьеКонтрагента/ДосьеКонтрагента.mdo @@ -20,11 +20,60 @@ <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> </forms> - <templates uuid="5c874c9a-fe67-45a3-a1d3-7ec1d1c55090"> - <name>Макет</name> + <templates uuid="6cd10bda-0741-4445-9ffa-17182c9c5a58"> + <name>Главное</name> <synonym> <key>ru</key> - <value>Макет</value> + <value>Главное</value> + </synonym> + </templates> + <templates uuid="5c874c9a-fe67-45a3-a1d3-7ec1d1c55090"> + <name>ДанныеГосРеестров</name> + <synonym> + <key>ru</key> + <value>Данные гос. реестров</value> + </synonym> + </templates> + <templates uuid="68a623fa-099a-4688-a7e9-444fb42eb650"> + <name>БухгалтерскаяОтчетность</name> + <synonym> + <key>ru</key> + <value>Бухгалтерская отчетность</value> + </synonym> + </templates> + <templates uuid="36ed0626-e389-4106-81bc-77462598bb45"> + <name>АнализОтчетности</name> + <synonym> + <key>ru</key> + <value>Анализ отчетности</value> + </synonym> + </templates> + <templates uuid="faeefd44-4e11-4a7d-8d4e-4dc9c6b60d59"> + <name>ФинансовыйАнализ</name> + <synonym> + <key>ru</key> + <value>Финансовый анализ</value> + </synonym> + </templates> + <templates uuid="737d5b7f-0ee9-46b5-a509-f06b6176a293"> + <name>ДанныеПрограммы</name> + <synonym> + <key>ru</key> + <value>Данные программы</value> + </synonym> + </templates> + <templates uuid="42eb6f71-0ed7-486a-92fb-976d1b46b081"> + <name>ПредельныеЗначенияРентабельностиИНалоговойНагрузки</name> + <synonym> + <key>ru</key> + <value>Предельные значения рентабельности и налоговой нагрузки</value> + </synonym> + </templates> + <templates uuid="4a389216-b4c9-4368-af2c-1e51e32671a5"> + <name>Проверки</name> + <synonym> + <key>ru</key> + <value>Проверки</value> </synonym> </templates> </mdclass:Report> diff --git a/SSL/src/Reports/ЗависшиеЗадачи/Help/ru.html b/SSL/src/Reports/ЗависшиеЗадачи/Help/ru.html index 1e78daa56..242e4e6d2 100644 --- a/SSL/src/Reports/ЗависшиеЗадачи/Help/ru.html +++ b/SSL/src/Reports/ЗависшиеЗадачи/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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для мониторинга <a href="Task.ЗадачаИсполнителя/Help">задач</a> и <a href="v8help://1cv8/EnterprWorkingWithBusinessProcesses_StandardInterface">бизнес-процессов</a>. В отчете выводятся "зависшие" задачи, которые не могут быть выполнены из-за того, что не заполнен <a href="InformationRegister.ИсполнителиЗадач/Help">список ролей и исполнителей</a>. </p> <p>Если установлен отбор по <strong>Координатору</strong>, то в отчет будут выводиться только те задачи, которые назначены исполнителям в <a href="ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач/Help">объектах адресации</a>, за которые отвечает указанный координатор выполнения задач. Можно установить фильтр по <strong>Автору</strong> задачи. Также предусмотрен отбор по <strong>Периоду</strong>.</p> <h3>Варианты отчета</h3> diff --git a/SSL/src/Reports/ЗависшиеЗадачи/ManagerModule.bsl b/SSL/src/Reports/ЗависшиеЗадачи/ManagerModule.bsl index e0c316191..a782ba48c 100644 --- a/SSL/src/Reports/ЗависшиеЗадачи/ManagerModule.bsl +++ b/SSL/src/Reports/ЗависшиеЗадачи/ManagerModule.bsl @@ -5,18 +5,28 @@ // Настройки размещения в панели отчетов. // // Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). -// НастройкиОтчета - СтрокаДереваЗначений - Настройки размещения всех вариантов отчета. -// См. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// Настройки - Коллекция - Передается "как есть" из ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// Может использоваться для получения настроек варианта этого отчета при помощи функции ВариантыОтчетов.ОписаниеВарианта(). +// НастройкиОтчета - СтрокаДереваЗначений - Настройки этого отчета, +// уже сформированные при помощи функции ВариантыОтчетов.ОписаниеОтчета() и готовые к изменению. +// См. "Свойства для изменения" процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Описание: // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Вспомогательные методы: -// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); // Отчет -// поддерживает только этот режим. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// +// Примеры: +// +// 1. Установка описания варианта. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Описание = НСтр("ru = '<Описание>'"); +// +// 2. Отключение варианта отчета. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Включен = Ложь; // Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); diff --git a/SSL/src/Reports/Задания/Help/ru.html b/SSL/src/Reports/Задания/Help/ru.html index 92dcf5c25..e8b536fff 100644 --- a/SSL/src/Reports/Задания/Help/ru.html +++ b/SSL/src/Reports/Задания/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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для мониторинга <a href="v8help://1cv8/EnterprWorkingWithBusinessProcesses_StandardInterface">бизнес-процесса</a> <strong>Задание</strong>.</p> <p>Открывается по команде <strong>Список заданий за период</strong> из списка <strong>Отчеты по задачам</strong> раздела <strong>Бизнес-Процессы и задачи</strong>.</p> <h3>Варианты отчета</h3> diff --git a/SSL/src/Reports/Задания/ManagerModule.bsl b/SSL/src/Reports/Задания/ManagerModule.bsl index 06639d66b..8cad22b78 100644 --- a/SSL/src/Reports/Задания/ManagerModule.bsl +++ b/SSL/src/Reports/Задания/ManagerModule.bsl @@ -5,18 +5,28 @@ // Настройки размещения в панели отчетов. // // Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). -// НастройкиОтчета - СтрокаДереваЗначений - Настройки размещения всех вариантов отчета. -// См. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// Настройки - Коллекция - Передается "как есть" из ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// Может использоваться для получения настроек варианта этого отчета при помощи функции ВариантыОтчетов.ОписаниеВарианта(). +// НастройкиОтчета - СтрокаДереваЗначений - Настройки этого отчета, +// уже сформированные при помощи функции ВариантыОтчетов.ОписаниеОтчета() и готовые к изменению. +// См. "Свойства для изменения" процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Описание: // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Вспомогательные методы: -// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); // Отчет -// поддерживает только этот режим. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// +// Примеры: +// +// 1. Установка описания варианта. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Описание = НСтр("ru = '<Описание>'"); +// +// 2. Отключение варианта отчета. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Включен = Ложь; // Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); diff --git a/SSL/src/Reports/Задачи/Help/ru.html b/SSL/src/Reports/Задачи/Help/ru.html index 1918f5ac3..d56420646 100644 --- a/SSL/src/Reports/Задачи/Help/ru.html +++ b/SSL/src/Reports/Задачи/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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для мониторинга <a href="Task.ЗадачаИсполнителя/Help">задач</a>.</p> <p>Открывается по команде <strong>Текущие задачи</strong> в списке <strong>Отчеты по задачам</strong> раздела <strong>Бизнес-процессы и задачи</strong>.</p> <h3>Варианты отчета</h3> diff --git a/SSL/src/Reports/Задачи/ManagerModule.bsl b/SSL/src/Reports/Задачи/ManagerModule.bsl index f556d404d..887a626e8 100644 --- a/SSL/src/Reports/Задачи/ManagerModule.bsl +++ b/SSL/src/Reports/Задачи/ManagerModule.bsl @@ -5,18 +5,28 @@ // Настройки размещения в панели отчетов. // // Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). -// НастройкиОтчета - СтрокаДереваЗначений - Настройки размещения всех вариантов отчета. -// См. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// Настройки - Коллекция - Передается "как есть" из ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// Может использоваться для получения настроек варианта этого отчета при помощи функции ВариантыОтчетов.ОписаниеВарианта(). +// НастройкиОтчета - СтрокаДереваЗначений - Настройки этого отчета, +// уже сформированные при помощи функции ВариантыОтчетов.ОписаниеОтчета() и готовые к изменению. +// См. "Свойства для изменения" процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Описание: // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Вспомогательные методы: -// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); // Отчет -// поддерживает только этот режим. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// +// Примеры: +// +// 1. Установка описания варианта. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Описание = НСтр("ru = '<Описание>'"); +// +// 2. Отключение варианта отчета. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Включен = Ложь; // Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); diff --git a/SSL/src/Reports/Задачи/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/Задачи/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs index acf80011b..d98612c46 100644 --- a/SSL/src/Reports/Задачи/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs +++ b/SSL/src/Reports/Задачи/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -109,6 +109,10 @@ <dataPath>КоличествоЗадач</dataPath> <field>КоличествоЗадач</field> </field> + <field xsi:type="DataSetFieldField"> + <dataPath>Выполнена</dataPath> + <field>Выполнена</field> + </field> <dataSource>ИсточникДанных1</dataSource> <query>ВЫБРАТЬ РАЗРЕШЕННЫЕ Задачи.Номер, @@ -116,13 +120,14 @@ Задачи.СрокИсполнения, Задачи.ДатаИсполнения, Задачи.Важность, + Задачи.Выполнена, ПОДСТРОКА(Задачи.Описание, 1, 250) КАК Описание, Задачи.Автор, ВЫБОР - КОГДА Задачи.Исполнитель ЕСТЬ НЕ NULL - И Задачи.Исполнитель <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) - ТОГДА Задачи.Исполнитель - ИНАЧЕ Задачи.РольИсполнителя + КОГДА Задачи.РольИсполнителя ЕСТЬ НЕ NULL И + Задачи.РольИсполнителя <> ЗНАЧЕНИЕ(Справочник.РолиИсполнителей.ПустаяСсылка) + ТОГДА Задачи.РольИсполнителя + ИНАЧЕ Задачи.Исполнитель КОНЕЦ КАК Исполнитель, Задачи.РольИсполнителя, Задачи.Дата, @@ -185,6 +190,7 @@ ТОГДА Задачи.Исполнитель ИНАЧЕ Задачи.РольИсполнителя КОНЕЦ, + Задачи.Выполнена, Задачи.РольИсполнителя, Задачи.Дата, Задачи.Ссылка, @@ -370,8 +376,7 @@ </dcsset:selection> <dcsset:filter> <dcsset:item xsi:type="dcsset:FilterItemComparison"> - <dcsset:use>false</dcsset:use> - <dcsset:left xsi:type="dcscor:Field">Ссылка.Выполнена</dcsset:left> + <dcsset:left xsi:type="dcscor:Field">Выполнена</dcsset:left> <dcsset:comparisonType>Equal</dcsset:comparisonType> <dcsset:right xsi:type="xs:boolean">false</dcsset:right> <dcsset:viewMode>Normal</dcsset:viewMode> diff --git a/SSL/src/Reports/ЗадачиИстекающиеНаДату/Help/ru.html b/SSL/src/Reports/ЗадачиИстекающиеНаДату/Help/ru.html index b9fc46c51..aefcd9775 100644 --- a/SSL/src/Reports/ЗадачиИстекающиеНаДату/Help/ru.html +++ b/SSL/src/Reports/ЗадачиИстекающиеНаДату/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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для мониторинга <a href="Task.ЗадачаИсполнителя/Help">задач</a>.</p> <p>Открывается по команде <strong>Задачи, истекающие на дату</strong> в списке <strong>Отчеты по задачам</strong> раздела <strong>Бизнес-процессы</strong>.</p> <p>Для контроля своих задач исполнитель может воспользоваться этим отчетом. По каждому исполнителю выводится сводка по количеству задач со сроками исполнения, истекающими на указанную в поле <strong>Крайний срок</strong> дату. Отчет позволяет выполнить расшифровку по <strong>Автору</strong>, <strong>Важности</strong>, <strong>Задаче</strong> и <strong>Сроку</strong>.</p> diff --git a/SSL/src/Reports/ЗадачиИстекающиеНаДату/ManagerModule.bsl b/SSL/src/Reports/ЗадачиИстекающиеНаДату/ManagerModule.bsl index ead5e364e..3a400aae3 100644 --- a/SSL/src/Reports/ЗадачиИстекающиеНаДату/ManagerModule.bsl +++ b/SSL/src/Reports/ЗадачиИстекающиеНаДату/ManagerModule.bsl @@ -5,18 +5,28 @@ // Настройки размещения в панели отчетов. // // Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). -// НастройкиОтчета - СтрокаДереваЗначений - Настройки размещения всех вариантов отчета. -// См. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// Настройки - Коллекция - Передается "как есть" из ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// Может использоваться для получения настроек варианта этого отчета при помощи функции ВариантыОтчетов.ОписаниеВарианта(). +// НастройкиОтчета - СтрокаДереваЗначений - Настройки этого отчета, +// уже сформированные при помощи функции ВариантыОтчетов.ОписаниеОтчета() и готовые к изменению. +// См. "Свойства для изменения" процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Описание: // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Вспомогательные методы: -// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); // Отчет -// поддерживает только этот режим. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// +// Примеры: +// +// 1. Установка описания варианта. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Описание = НСтр("ru = '<Описание>'"); +// +// 2. Отключение варианта отчета. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Включен = Ложь; // Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); diff --git a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl index 9b2a25058..016e8bedb 100644 --- a/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl +++ b/SSL/src/Reports/ИспользуемыеВнешниеРесурсы/ManagerModule.bsl @@ -5,18 +5,28 @@ // Настройки размещения в панели отчетов. // // Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). -// НастройкиОтчета - СтрокаДереваЗначений - Настройки размещения всех вариантов отчета. -// См. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// Настройки - Коллекция - Передается "как есть" из ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// Может использоваться для получения настроек варианта этого отчета при помощи функции ВариантыОтчетов.ОписаниеВарианта(). +// НастройкиОтчета - СтрокаДереваЗначений - Настройки этого отчета, +// уже сформированные при помощи функции ВариантыОтчетов.ОписаниеОтчета() и готовые к изменению. +// См. "Свойства для изменения" процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Описание: // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Вспомогательные методы: -// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); // Отчет -// поддерживает только этот режим. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// +// Примеры: +// +// 1. Установка описания варианта. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Описание = НСтр("ru = '<Описание>'"); +// +// 2. Отключение варианта отчета. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Включен = Ложь; // Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт НастройкиОтчета.Описание = НСтр("ru = 'Внешние ресурсы, используемые программой и дополнительными модулями'"); @@ -38,6 +48,27 @@ #КонецОбласти +#Область СлужебныйПрограммныйИнтерфейс + +// Возвращает словарь свойств конфигурации. +// +// Возвращаемое значение: Структура: +// * Именительный - синоним вида модуля в именительном падеже, +// * Родительный - синоним вида модуля в родительном падеже. +// +Функция СловарьМодуляКонфигурации() Экспорт + + Результат = Новый Структура(); + + Результат.Вставить("Именительный", НСтр("ru = 'Программа'")); + Результат.Вставить("Родительный", НСтр("ru = 'Программы'")); + + Возврат Результат; + +КонецФункции + +#КонецОбласти + #Область СлужебныеПроцедурыИФункции // Только для внутреннего использования. @@ -380,23 +411,6 @@ КонецПроцедуры -// Возвращает словарь свойств конфигурации. -// -// Возвращаемое значение: Структура: -// * Именительный - синоним вида модуля в именительном падеже, -// * Родительный - синоним вида модуля в родительном падеже. -// -Функция СловарьМодуляКонфигурации() Экспорт - - Результат = Новый Структура(); - - Результат.Вставить("Именительный", НСтр("ru = 'Программа'")); - Результат.Вставить("Родительный", НСтр("ru = 'Программы'")); - - Возврат Результат; - -КонецФункции - // Только для внутреннего использования. // Функция ПорядокСортировкиТиповРазрешений() diff --git a/SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/ManagerModule.bsl b/SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/ManagerModule.bsl deleted file mode 100644 index dab175b77..000000000 --- a/SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/ManagerModule.bsl +++ /dev/null @@ -1,31 +0,0 @@ -#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда - -#Область ПрограммныйИнтерфейс - -// Настройки размещения в панели отчетов. -// -// Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). -// НастройкиОтчета - СтрокаДереваЗначений - Настройки размещения всех вариантов отчета. -// См. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). -// -// Описание: -// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). -// -// Вспомогательные методы: -// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); // Отчет -// поддерживает только этот режим. -// -Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт - МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); - НастройкиОтчета.Описание = НСтр("ru = 'Согласия на обработку персональных данных, срок действия которых истекает.'"); - - НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "ИстекающиеСогласия"); - НастройкиВарианта.Описание = НСтр("ru = 'Согласия, срок действия которых истекает в заданном периоде.'"); -КонецПроцедуры - -#КонецОбласти - -#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/МестаИспользованияСсылок/Help/ru.html b/SSL/src/Reports/МестаИспользованияСсылок/Help/ru.html index 92102b768..feed541fd 100644 --- a/SSL/src/Reports/МестаИспользованияСсылок/Help/ru.html +++ b/SSL/src/Reports/МестаИспользованияСсылок/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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Отчет предназначен для просмотра сведений об использовании элементов списков в документах программы.</p> <p>При работе в программе <a href="Catalog.Пользователи/Help">пользователи</a> могут по ошибке допускать дублирование элементов, от которого необходимо избавляться, т.к. это мешает правильному учету в программе. При использовании этих дублирующихся элементов могут быть ссылки то на один, то на другой, в результате происходят ошибки, например, в бухгалтерском учете списание денежных средств проходит некорректно и т.п. </p> <p>Для того чтобы была возможность удалить дубли из программы, сначала необходимо удалить ссылки на них в документах.  Отчет показывает, в каких документах программы используются данные объекты. </p> diff --git a/SSL/src/Reports/МестаИспользованияСсылок/ManagerModule.bsl b/SSL/src/Reports/МестаИспользованияСсылок/ManagerModule.bsl index 1830c5305..8b1e4b24f 100644 --- a/SSL/src/Reports/МестаИспользованияСсылок/ManagerModule.bsl +++ b/SSL/src/Reports/МестаИспользованияСсылок/ManagerModule.bsl @@ -5,18 +5,28 @@ // Настройки размещения в панели отчетов. // // Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). -// НастройкиОтчета - СтрокаДереваЗначений - Настройки размещения всех вариантов отчета. -// См. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// Настройки - Коллекция - Передается "как есть" из ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// Может использоваться для получения настроек варианта этого отчета при помощи функции ВариантыОтчетов.ОписаниеВарианта(). +// НастройкиОтчета - СтрокаДереваЗначений - Настройки этого отчета, +// уже сформированные при помощи функции ВариантыОтчетов.ОписаниеОтчета() и готовые к изменению. +// См. "Свойства для изменения" процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Описание: // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Вспомогательные методы: -// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); // Отчет -// поддерживает только этот режим. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// +// Примеры: +// +// 1. Установка описания варианта. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Описание = НСтр("ru = '<Описание>'"); +// +// 2. Отключение варианта отчета. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Включен = Ложь; // Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); diff --git a/SSL/src/Reports/ОбъемНенужныхФайлов/Help/ru.html b/SSL/src/Reports/ОбъемНенужныхФайлов/Help/ru.html index f4355e79e..aa2ca2502 100644 --- a/SSL/src/Reports/ОбъемНенужныхФайлов/Help/ru.html +++ b/SSL/src/Reports/ОбъемНенужныхФайлов/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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Предназначен для получения информации об объеме данных на диске, который занимают "ненужные" файлы.</p> <p>Открывается из окна <strong>Настройки очистки файлов</strong>.</p><a name="СтандартныеПодсистемы.Варианты отчетов"> <p>С помощью кнопки <strong>Настройки</strong> можно перейти к использованию возможностей более тонкого <a href="CommonForm.ФормаНастроекОтчета/Help">отбора записей</a> отчета.</p></a> diff --git a/SSL/src/Reports/ОбъемНенужныхФайлов/ManagerModule.bsl b/SSL/src/Reports/ОбъемНенужныхФайлов/ManagerModule.bsl index d488ec90a..5212ca9af 100644 --- a/SSL/src/Reports/ОбъемНенужныхФайлов/ManagerModule.bsl +++ b/SSL/src/Reports/ОбъемНенужныхФайлов/ManagerModule.bsl @@ -5,18 +5,28 @@ // Настройки размещения в панели отчетов. // // Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). -// НастройкиОтчета - СтрокаДереваЗначений - Настройки размещения всех вариантов отчета. -// См. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// Настройки - Коллекция - Передается "как есть" из ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// Может использоваться для получения настроек варианта этого отчета при помощи функции ВариантыОтчетов.ОписаниеВарианта(). +// НастройкиОтчета - СтрокаДереваЗначений - Настройки этого отчета, +// уже сформированные при помощи функции ВариантыОтчетов.ОписаниеОтчета() и готовые к изменению. +// См. "Свойства для изменения" процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Описание: // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Вспомогательные методы: -// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); // Отчет -// поддерживает только этот режим. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// +// Примеры: +// +// 1. Установка описания варианта. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Описание = НСтр("ru = '<Описание>'"); +// +// 2. Отключение варианта отчета. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Включен = Ложь; // Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт diff --git a/SSL/src/Reports/ОбъемНенужныхФайлов/ОбъемНенужныхФайлов.mdo b/SSL/src/Reports/ОбъемНенужныхФайлов/ОбъемНенужныхФайлов.mdo index 6a275748c..895591482 100644 --- a/SSL/src/Reports/ОбъемНенужныхФайлов/ОбъемНенужныхФайлов.mdo +++ b/SSL/src/Reports/ОбъемНенужныхФайлов/ОбъемНенужныхФайлов.mdo @@ -10,7 +10,6 @@ <value>Объем ненужных файлов</value> </synonym> <useStandardCommands>true</useStandardCommands> - <defaultForm>CommonForm.ФормаОтчета</defaultForm> <mainDataCompositionSchema>Report.ОбъемНенужныхФайлов.Template.ОсновнаяСхемаКомпоновкиДанных</mainDataCompositionSchema> <variantsStorage>SettingsStorage.ХранилищеВариантовОтчетов</variantsStorage> <help> diff --git a/SSL/src/Reports/ПраваДоступа/Help/ru.html b/SSL/src/Reports/ПраваДоступа/Help/ru.html index d5712a567..92db10902 100644 --- a/SSL/src/Reports/ПраваДоступа/Help/ru.html +++ b/SSL/src/Reports/ПраваДоступа/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.16421"></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 11.00.9600.18427"></meta></head><body> <p>Просмотр полного списка прав пользователя.</p> <p>Отчет открывается из карточки <a href="Catalog.Пользователи.Form.ФормаЭлемента/Help">пользователя</a> или <a href="Catalog.ВнешниеПользователи.Form.ФормаЭлемента/Help">внешнего пользователя</a> (<a href="Catalog.ГруппыПользователей.Form.ФормаЭлемента/Help">группы пользователей</a> или <a href="Catalog.ГруппыВнешнихПользователей.Form.ФормаЭлемента/Help">группы внешних пользователей</a>) со страницы <strong>Права доступа</strong> по команде <strong>Отчет по правам доступа</strong>.</p> <p>Отчет с помощью стандартных команд можно распечатать или сохранить на компьютере в нужном формате.</p> diff --git a/SSL/src/Reports/ПраваДоступа/ManagerModule.bsl b/SSL/src/Reports/ПраваДоступа/ManagerModule.bsl index a16bfd1a2..a0e3f835b 100644 --- a/SSL/src/Reports/ПраваДоступа/ManagerModule.bsl +++ b/SSL/src/Reports/ПраваДоступа/ManagerModule.bsl @@ -5,18 +5,28 @@ // Настройки размещения в панели отчетов. // // Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). -// НастройкиОтчета - СтрокаДереваЗначений - Настройки размещения всех вариантов отчета. -// См. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// Настройки - Коллекция - Передается "как есть" из ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// Может использоваться для получения настроек варианта этого отчета при помощи функции ВариантыОтчетов.ОписаниеВарианта(). +// НастройкиОтчета - СтрокаДереваЗначений - Настройки этого отчета, +// уже сформированные при помощи функции ВариантыОтчетов.ОписаниеОтчета() и готовые к изменению. +// См. "Свойства для изменения" процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Описание: // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Вспомогательные методы: -// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); // Отчет -// поддерживает только этот режим. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// +// Примеры: +// +// 1. Установка описания варианта. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Описание = НСтр("ru = '<Описание>'"); +// +// 2. Отключение варианта отчета. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Включен = Ложь; // Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт НастройкиОтчета.Включен = Ложь; diff --git a/SSL/src/Reports/ПраваДоступа/Templates/Макет/Template.mxlx b/SSL/src/Reports/ПраваДоступа/Templates/Макет/Template.mxlx index 46f850ba4..a50674981 100644 --- a/SSL/src/Reports/ПраваДоступа/Templates/Макет/Template.mxlx +++ b/SSL/src/Reports/ПраваДоступа/Templates/Макет/Template.mxlx @@ -882,7 +882,7 @@ <tl> <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Ответственный за участинков группы доступа: [ПредставлениеОтветственного]</v8:content> + <v8:content>Ответственный за участников группы доступа: [ПредставлениеОтветственного]</v8:content> </v8:item> </tl> <detailParameter>Администратор</detailParameter> diff --git a/SSL/src/Reports/ПроверкаЦелостностиТома/ManagerModule.bsl b/SSL/src/Reports/ПроверкаЦелостностиТома/ManagerModule.bsl index aa8e1818f..e63dc1487 100644 --- a/SSL/src/Reports/ПроверкаЦелостностиТома/ManagerModule.bsl +++ b/SSL/src/Reports/ПроверкаЦелостностиТома/ManagerModule.bsl @@ -5,18 +5,28 @@ // Настройки размещения в панели отчетов. // // Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). -// НастройкиОтчета - СтрокаДереваЗначений - Настройки размещения всех вариантов отчета. -// См. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// Настройки - Коллекция - Передается "как есть" из ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// Может использоваться для получения настроек варианта этого отчета при помощи функции ВариантыОтчетов.ОписаниеВарианта(). +// НастройкиОтчета - СтрокаДереваЗначений - Настройки этого отчета, +// уже сформированные при помощи функции ВариантыОтчетов.ОписаниеОтчета() и готовые к изменению. +// См. "Свойства для изменения" процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Описание: // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Вспомогательные методы: -// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); // Отчет -// поддерживает только этот режим. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// +// Примеры: +// +// 1. Установка описания варианта. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Описание = НСтр("ru = '<Описание>'"); +// +// 2. Отключение варианта отчета. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Включен = Ложь; // Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт diff --git a/SSL/src/Reports/ПрогрессОтложенногоОбновления/ManagerModule.bsl b/SSL/src/Reports/ПрогрессОтложенногоОбновления/ManagerModule.bsl new file mode 100644 index 000000000..c2f285caa --- /dev/null +++ b/SSL/src/Reports/ПрогрессОтложенногоОбновления/ManagerModule.bsl @@ -0,0 +1,41 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Настройки размещения в панели отчетов. +// +// Параметры: +// Настройки - Коллекция - Передается "как есть" из ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// Может использоваться для получения настроек варианта этого отчета при помощи функции ВариантыОтчетов.ОписаниеВарианта(). +// НастройкиОтчета - СтрокаДереваЗначений - Настройки этого отчета, +// уже сформированные при помощи функции ВариантыОтчетов.ОписаниеОтчета() и готовые к изменению. +// См. "Свойства для изменения" процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// +// Описание: +// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// +// Вспомогательные методы: +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// +// Примеры: +// +// 1. Установка описания варианта. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Описание = НСтр("ru = '<Описание>'"); +// +// 2. Отключение варианта отчета. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Включен = Ложь; +// +Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "ПрогрессОтложенногоОбновления"); + НастройкиВарианта.Описание = НСтр("ru = 'Прогресс выполнения дополнительных процедур обработки данных.'"); + НастройкиВарианта.НастройкиДляПоиска.КлючевыеСлова = НСтр("ru = 'Отложенное обновление'"); +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ 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..1bb555646 --- /dev/null +++ b/SSL/src/Reports/ПрогрессОтложенногоОбновления/ObjectModule.bsl @@ -0,0 +1,191 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОбработчикиСобытий + +Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) + + ТаблицаРезультата = ЗарегистрированныеОбъекты(); + + СтандартнаяОбработка = Ложь; + НастройкиКД = КомпоновщикНастроек.ПолучитьНастройки(); + ВнешниеНаборыДанных = Новый Структура("ТаблицаРезультата", ТаблицаРезультата); + + КомпоновщикМакетаКД = Новый КомпоновщикМакетаКомпоновкиДанных; + МакетКД = КомпоновщикМакетаКД.Выполнить(СхемаКомпоновкиДанных, НастройкиКД, ДанныеРасшифровки); + + ПроцессорКД = Новый ПроцессорКомпоновкиДанных; + ПроцессорКД.Инициализировать(МакетКД, ВнешниеНаборыДанных, ДанныеРасшифровки); + + ПроцессорВыводаРезультатаКД = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; + ПроцессорВыводаРезультатаКД.УстановитьДокумент(ДокументРезультат); + ПроцессорВыводаРезультатаКД.Вывести(ПроцессорКД); + + ДокументРезультат.ПоказатьУровеньГруппировокСтрок(2); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ЗарегистрированныеОбъекты() + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОбновлениеИнформационнойБазы.Ссылка КАК Ссылка + |ИЗ + | ПланОбмена.ОбновлениеИнформационнойБазы КАК ОбновлениеИнформационнойБазы"; + Результат = Запрос.Выполнить().Выгрузить(); + МассивУзлов = Результат.ВыгрузитьКолонку("Ссылка"); + СписокУзлов = Новый СписокЗначений; + СписокУзлов.ЗагрузитьЗначения(МассивУзлов); + + ТаблицаРезультата = Новый ТаблицаЗначений; + ТаблицаРезультата.Колонки.Добавить("СинонимКонфигурации"); + ТаблицаРезультата.Колонки.Добавить("ПолноеИмя"); + ТаблицаРезультата.Колонки.Добавить("ТипОбъекта"); + ТаблицаРезультата.Колонки.Добавить("Представление"); + ТаблицаРезультата.Колонки.Добавить("ТипМетаданных"); + ТаблицаРезультата.Колонки.Добавить("КоличествоОбъектов"); + ТаблицаРезультата.Колонки.Добавить("Очередь"); + ТаблицаРезультата.Колонки.Добавить("ОбработчикОбновления"); + ТаблицаРезультата.Колонки.Добавить("ВсегоОбъектов", Новый ОписаниеТипов("Число")); + + СоставПланаОбмена = Метаданные.ПланыОбмена.ОбновлениеИнформационнойБазы.Состав; + СоответствиеПредставлений = Новый Соответствие; + + СинонимКонфигурации = Метаданные.Синоним; + ТекстЗапроса = ""; + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("СписокУзлов", СписокУзлов); + Ограничение = 0; + Для Каждого ЭлементПланаОбмена Из СоставПланаОбмена Цикл + ОбъектМетаданных = ЭлементПланаОбмена.Метаданные; + Если Не ПравоДоступа("Чтение", ОбъектМетаданных) Тогда + Продолжить; + КонецЕсли; + Представление = ОбъектМетаданных.Представление(); + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + ПолноеИмяЧастями = СтрРазделить(ПолноеИмя, "."); + + ТекстЗапроса = ТекстЗапроса + ?(ТекстЗапроса = "", "", "ОБЪЕДИНИТЬ ВСЕ") + " + |ВЫБРАТЬ + | """ + СинонимКонфигурации + """ КАК СинонимКонфигурации, + | """ + ПредставлениеТипаМетаданных(ПолноеИмяЧастями[0]) + """ КАК ТипМетаданных, + | """ + ПолноеИмяЧастями[1] + """ КАК ТипОбъекта, + | """ + ПолноеИмя + """ КАК ПолноеИмя, + | Узел.Очередь КАК Очередь, + | КОЛИЧЕСТВО(*) КАК КоличествоОбъектов + |ИЗ + | " + ПолноеИмя + ".Изменения + |ГДЕ + | Узел В (&СписокУзлов) + |СГРУППИРОВАТЬ ПО + | Узел + |"; + + Ограничение = Ограничение + 1; + СоответствиеПредставлений.Вставить(ПолноеИмяЧастями[1], Представление); + Если Ограничение = 200 Тогда + Запрос.Текст = ТекстЗапроса; + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + Строка = ТаблицаРезультата.Добавить(); + ЗаполнитьЗначенияСвойств(Строка, Выборка); + Строка.Представление = СоответствиеПредставлений[Строка.ТипОбъекта]; + КонецЦикла; + Ограничение = 0; + ТекстЗапроса = ""; + СоответствиеПредставлений = Новый Соответствие; + КонецЕсли; + + КонецЦикла; + + Если ТекстЗапроса <> "" Тогда + Запрос.Текст = ТекстЗапроса; + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + Строка = ТаблицаРезультата.Добавить(); + ЗаполнитьЗначенияСвойств(Строка, Выборка); + Строка.Представление = СоответствиеПредставлений[Строка.ТипОбъекта]; + КонецЦикла; + КонецЕсли; + + ДанныеПоОбработчикам = ОбработчикиОбновления(); + Для Каждого ДанныеПоОбработчику Из ДанныеПоОбработчикам Цикл + ИмяОбработчика = ДанныеПоОбработчику.Ключ; + Для Каждого ДанныеПоОбъекту Из ДанныеПоОбработчику.Значение Цикл + ПолноеИмяОбъекта = ДанныеПоОбъекту.Ключ; + Очередь = ДанныеПоОбъекту.Значение.Очередь; + Количество = ДанныеПоОбъекту.Значение.Количество; + + ПараметрыОтбора = Новый Структура; + ПараметрыОтбора.Вставить("ПолноеИмя", ПолноеИмяОбъекта); + ПараметрыОтбора.Вставить("Очередь", Очередь); + Строки = ТаблицаРезультата.НайтиСтроки(ПараметрыОтбора); + Для Каждого Строка Из Строки Цикл + Если Не ЗначениеЗаполнено(Строка.ОбработчикОбновления) Тогда + Строка.ОбработчикОбновления = ИмяОбработчика; + Иначе + Строка.ОбработчикОбновления = Строка.ОбработчикОбновления + "," + Символы.ПС + ИмяОбработчика; + КонецЕсли; + Строка.ВсегоОбъектов = Строка.ВсегоОбъектов + Количество; + КонецЦикла; + + // Объект полностью обработан. + Если Строки.Количество() = 0 Тогда + Строка = ТаблицаРезультата.Добавить(); + ПолноеИмяЧастями = СтрРазделить(ПолноеИмяОбъекта, "."); + + Строка.СинонимКонфигурации = СинонимКонфигурации; + Строка.ПолноеИмя = ПолноеИмяОбъекта; + Строка.ТипОбъекта = ПолноеИмяЧастями[1]; + Строка.Представление = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъекта).Представление(); + Строка.ТипМетаданных = ПредставлениеТипаМетаданных(ПолноеИмяЧастями[0]); + Строка.Очередь = Очередь; + Строка.ОбработчикОбновления = ИмяОбработчика; + Строка.ВсегоОбъектов = Строка.ВсегоОбъектов + Количество; + Строка.КоличествоОбъектов = 0; + КонецЕсли; + + КонецЦикла; + КонецЦикла; + + Возврат ТаблицаРезультата; + +КонецФункции + +Функция ПредставлениеТипаМетаданных(ТипМетаданных) + + Соответствие = Новый Соответствие; + Соответствие.Вставить("Константа", НСтр("ru = 'Константы'")); + Соответствие.Вставить("Справочник", НСтр("ru = 'Справочники'")); + Соответствие.Вставить("Документ", НСтр("ru = 'Документы'")); + Соответствие.Вставить("ПланВидовХарактеристик", НСтр("ru = 'Планы видов характеристик'")); + Соответствие.Вставить("ПланСчетов", НСтр("ru = 'Планы счетов'")); + Соответствие.Вставить("ПланВидовРасчета", НСтр("ru = 'Планы видов расчета'")); + Соответствие.Вставить("РегистрСведений", НСтр("ru = 'Регистры сведений'")); + Соответствие.Вставить("РегистрНакопления", НСтр("ru = 'Регистры накопления'")); + Соответствие.Вставить("РегистрБухгалтерии", НСтр("ru = 'Регистры бухгалтерии'")); + Соответствие.Вставить("РегистрРасчета", НСтр("ru = 'Регистры расчета'")); + Соответствие.Вставить("БизнесПроцесс", НСтр("ru = 'Бизнес процессы'")); + Соответствие.Вставить("Задача", НСтр("ru = 'Задачи'")); + + Возврат Соответствие[ТипМетаданных]; + +КонецФункции + +Функция ОбработчикиОбновления() + + СведенияОбОбновлении = ОбновлениеИнформационнойБазыСлужебный.СведенияОбОбновленииИнформационнойБазы(); + ОбрабатываемыеДанные = СведенияОбОбновлении.ОбрабатываемыеДанные; + + Возврат ОбрабатываемыеДанные; + +КонецФункции + +#КонецОбласти + +#КонецЕсли + diff --git a/SSL/src/Reports/ПрогрессОтложенногоОбновления/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/ПрогрессОтложенногоОбновления/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs new file mode 100644 index 000000000..1a45a018d --- /dev/null +++ b/SSL/src/Reports/ПрогрессОтложенногоОбновления/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -0,0 +1,453 @@ +<?xml version="1.0" encoding="UTF-8"?> +<DataCompositionSchema xmlns="http://v8.1c.ru/8.1/data-composition-system/schema" xmlns:dcscom="http://v8.1c.ru/8.1/data-composition-system/common" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core" xmlns:dcsset="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <dataSource> + <name>ИсточникДанных1</name> + <dataSourceType>Local</dataSourceType> + </dataSource> + <dataSet xsi:type="DataSetObject"> + <name>НаборДанных1</name> + <field xsi:type="DataSetFieldField"> + <dataPath>ПолноеИмя</dataPath> + <field>ПолноеИмя</field> + <title xsi:type="v8:LocalStringType"> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Полное имя</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + ТипОбъекта + ТипОбъекта + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Объект</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + ТипМетаданных + ТипМетаданных + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Метаданные</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + КоличествоОбъектов + КоличествоОбъектов + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Осталось обработать</v8:content> + </v8:item> + + + xs:decimal + + 0 + 0 + Any + + + + + Формат + ЧН=0 + + + + + Очередь + Очередь + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Очередь</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + ОбработчикОбновления + ОбработчикОбновления + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Обработчик</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + Размещение + Wrap + + + МинимальнаяШирина + 60 + + + МаксимальнаяШирина + 60 + + + + + ВсегоОбъектов + ВсегоОбъектов + + <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:string + + 0 + Variable + + + + + СинонимКонфигурации + СинонимКонфигурации + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Конфигурация</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + ИсточникДанных1 + ТаблицаРезультата + + + Прогресс + (ВсегоОбъектов - КоличествоОбъектов)/ВсегоОбъектов*100 + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Прогресс, %</v8:content> + </v8:item> + + + + Формат + ЧДЦ=1; ЧН=0 + + + + xs:decimal + + 0 + 0 + Any + + + + + КоличествоОбъектов + Сумма(КоличествоОбъектов) + + + ВсегоОбъектов + Сумма(ВсегоОбъектов) + + + Прогресс + Среднее(Прогресс) + + + ПрогрессОтложенногоОбновления + + + ru + Прогресс отложенного обновления + + + + + + КоличествоОбъектов + + + ОбработчикОбновления + + + ПолноеИмя + + + Очередь + + + ТипМетаданных + + + ТипОбъекта + + + Прогресс + + + + + + + СинонимКонфигурации + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + + ТипМетаданных + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + + + ТипМетаданных + + + КоличествоОбъектов + + + Прогресс + + + + + КоличествоОбъектов + Equal + 0 + + + + + ЦветТекста + style:ГруппаВариантовОтчетовЦвет + + + + + + + + Представление + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + Представление + + + КоличествоОбъектов + + + Прогресс + + + + + + + Представление + + + КоличествоОбъектов + + + Прогресс + + + + + КоличествоОбъектов + Equal + 0 + + + + + ЦветТекста + style:ГруппаВариантовОтчетовЦвет + + + + + + + + ОбработчикОбновления + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + Очередь + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + Очередь + Asc + + + + + ОбработчикОбновления + + + Очередь + + + КоличествоОбъектов + + + Прогресс + + + + + + + ОбработчикОбновления + + + Очередь + + + КоличествоОбъектов + + + Прогресс + + + + + КоличествоОбъектов + Equal + 0 + + + + + ЦветТекста + style:ГруппаВариантовОтчетовЦвет + + + + + + + false + ВариантИспользованияГруппировки + AdditionalInformation + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/Reports/ПрогрессОтложенногоОбновления/ПрогрессОтложенногоОбновления.mdo b/SSL/src/Reports/ПрогрессОтложенногоОбновления/ПрогрессОтложенногоОбновления.mdo new file mode 100644 index 000000000..3e670a84e --- /dev/null +++ b/SSL/src/Reports/ПрогрессОтложенногоОбновления/ПрогрессОтложенногоОбновления.mdo @@ -0,0 +1,26 @@ + + + + + + + ПрогрессОтложенногоОбновления + + ru + Прогресс отложенного обновления + + true + CommonForm.ФормаОтчета + Report.ПрогрессОтложенногоОбновления.Template.ОсновнаяСхемаКомпоновкиДанных + CommonForm.ФормаНастроекОтчета + CommonForm.ФормаВариантаОтчета + SettingsStorage.ХранилищеВариантовОтчетов + + ОсновнаяСхемаКомпоновкиДанных + + ru + Основная схема компоновки данных + + DataCompositionSchema + + diff --git a/SSL/src/Reports/ПросроченныеЗадачи/Help/ru.html b/SSL/src/Reports/ПросроченныеЗадачи/Help/ru.html index faea9908a..eb159c87e 100644 --- a/SSL/src/Reports/ПросроченныеЗадачи/Help/ru.html +++ b/SSL/src/Reports/ПросроченныеЗадачи/Help/ru.html @@ -1,4 +1,4 @@ - +

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

                                Открывается по команде Задачи, выполненные с нарушением сроков в списке Отчеты по задачам раздела Бизнес-процессы и задачи.

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

                                diff --git a/SSL/src/Reports/ПросроченныеЗадачи/ManagerModule.bsl b/SSL/src/Reports/ПросроченныеЗадачи/ManagerModule.bsl index d175d02b5..f190d6574 100644 --- a/SSL/src/Reports/ПросроченныеЗадачи/ManagerModule.bsl +++ b/SSL/src/Reports/ПросроченныеЗадачи/ManagerModule.bsl @@ -5,18 +5,28 @@ // Настройки размещения в панели отчетов. // // Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). -// НастройкиОтчета - СтрокаДереваЗначений - Настройки размещения всех вариантов отчета. -// См. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// Настройки - Коллекция - Передается "как есть" из ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// Может использоваться для получения настроек варианта этого отчета при помощи функции ВариантыОтчетов.ОписаниеВарианта(). +// НастройкиОтчета - СтрокаДереваЗначений - Настройки этого отчета, +// уже сформированные при помощи функции ВариантыОтчетов.ОписаниеОтчета() и готовые к изменению. +// См. "Свойства для изменения" процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Описание: // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Вспомогательные методы: -// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); // Отчет -// поддерживает только этот режим. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// +// Примеры: +// +// 1. Установка описания варианта. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Описание = НСтр("ru = '<Описание>'"); +// +// 2. Отключение варианта отчета. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Включен = Ложь; // Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); diff --git a/SSL/src/Reports/СведенияОПользователях/Help/ru.html b/SSL/src/Reports/СведенияОПользователях/Help/ru.html index 940b1e26b..c4b505918 100644 --- a/SSL/src/Reports/СведенияОПользователях/Help/ru.html +++ b/SSL/src/Reports/СведенияОПользователях/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

                                diff --git a/SSL/src/Reports/СведенияОПользователях/ManagerModule.bsl b/SSL/src/Reports/СведенияОПользователях/ManagerModule.bsl index fab5d92fd..7658aa2b0 100644 --- a/SSL/src/Reports/СведенияОПользователях/ManagerModule.bsl +++ b/SSL/src/Reports/СведенияОПользователях/ManagerModule.bsl @@ -5,18 +5,28 @@ // Настройки размещения в панели отчетов. // // Параметры: -// Настройки - Коллекция - Используется для описания настроек отчетов и вариантов -// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). -// НастройкиОтчета - СтрокаДереваЗначений - Настройки размещения всех вариантов отчета. -// См. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(). +// Настройки - Коллекция - Передается "как есть" из ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// Может использоваться для получения настроек варианта этого отчета при помощи функции ВариантыОтчетов.ОписаниеВарианта(). +// НастройкиОтчета - СтрокаДереваЗначений - Настройки этого отчета, +// уже сформированные при помощи функции ВариантыОтчетов.ОписаниеОтчета() и готовые к изменению. +// См. "Свойства для изменения" процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Описание: // См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). // // Вспомогательные методы: -// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); -// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); // Отчет -// поддерживает только этот режим. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// +// Примеры: +// +// 1. Установка описания варианта. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Описание = НСтр("ru = '<Описание>'"); +// +// 2. Отключение варианта отчета. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Включен = Ложь; // Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); diff --git a/SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/Help/ru.html b/SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхДействующие/Help/ru.html similarity index 95% rename from SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/Help/ru.html rename to SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхДействующие/Help/ru.html index 3be9b58d4..13570066e 100644 --- a/SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/Help/ru.html +++ b/SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхДействующие/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

                                Отражаются Субъект, Дата получения, Срок действия.

                                diff --git a/SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхДействующие/ManagerModule.bsl b/SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхДействующие/ManagerModule.bsl new file mode 100644 index 000000000..3b579bf13 --- /dev/null +++ b/SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхДействующие/ManagerModule.bsl @@ -0,0 +1,41 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Настройки размещения в панели отчетов. +// +// Параметры: +// Настройки - Коллекция - Передается "как есть" из ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// Может использоваться для получения настроек варианта этого отчета при помощи функции ВариантыОтчетов.ОписаниеВарианта(). +// НастройкиОтчета - СтрокаДереваЗначений - Настройки этого отчета, +// уже сформированные при помощи функции ВариантыОтчетов.ОписаниеОтчета() и готовые к изменению. +// См. "Свойства для изменения" процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// +// Описание: +// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// +// Вспомогательные методы: +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// +// Примеры: +// +// 1. Установка описания варианта. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Описание = НСтр("ru = '<Описание>'"); +// +// 2. Отключение варианта отчета. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Включен = Ложь; +// +Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + НастройкиОтчета.Описание = НСтр("ru = 'Действующие согласия на обработку персональных данных.'"); + + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "ДействующиеСогласия"); + НастройкиВарианта.Описание = НСтр("ru = 'Действующие на выбранную дату согласия на обработку персональных данных.'"); +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/ObjectModule.bsl b/SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхДействующие/ObjectModule.bsl similarity index 100% rename from SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/ObjectModule.bsl rename to SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхДействующие/ObjectModule.bsl diff --git a/SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхДействующие/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs similarity index 100% rename from SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs rename to SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхДействующие/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs diff --git a/SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/ДействующиеСогласияНаОбработкуПерсональныхДанных.mdo b/SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхДействующие/СогласияНаОбработкуПерсональныхДанныхДействующие.mdo similarity index 75% rename from SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/ДействующиеСогласияНаОбработкуПерсональныхДанных.mdo rename to SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхДействующие/СогласияНаОбработкуПерсональныхДанныхДействующие.mdo index 9f6cd0d3d..d7cea4e5f 100644 --- a/SSL/src/Reports/ДействующиеСогласияНаОбработкуПерсональныхДанных/ДействующиеСогласияНаОбработкуПерсональныхДанных.mdo +++ b/SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхДействующие/СогласияНаОбработкуПерсональныхДанныхДействующие.mdo @@ -4,13 +4,13 @@ - ДействующиеСогласияНаОбработкуПерсональныхДанных + СогласияНаОбработкуПерсональныхДанныхДействующие ru - Действующие согласия на обработку персональных данных + Согласия на обработку персональных данных действующие true - Report.ДействующиеСогласияНаОбработкуПерсональныхДанных.Template.ОсновнаяСхемаКомпоновкиДанных + Report.СогласияНаОбработкуПерсональныхДанныхДействующие.Template.ОсновнаяСхемаКомпоновкиДанных SettingsStorage.ХранилищеВариантовОтчетов true diff --git a/SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/Help/ru.html b/SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхИстекающие/Help/ru.html similarity index 97% rename from SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/Help/ru.html rename to SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхИстекающие/Help/ru.html index 7c1dcdd7a..d3cb80f1b 100644 --- a/SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/Help/ru.html +++ b/SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхИстекающие/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

                                diff --git a/SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхИстекающие/ManagerModule.bsl b/SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхИстекающие/ManagerModule.bsl new file mode 100644 index 000000000..9feb80175 --- /dev/null +++ b/SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхИстекающие/ManagerModule.bsl @@ -0,0 +1,41 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Настройки размещения в панели отчетов. +// +// Параметры: +// Настройки - Коллекция - Передается "как есть" из ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// Может использоваться для получения настроек варианта этого отчета при помощи функции ВариантыОтчетов.ОписаниеВарианта(). +// НастройкиОтчета - СтрокаДереваЗначений - Настройки этого отчета, +// уже сформированные при помощи функции ВариантыОтчетов.ОписаниеОтчета() и готовые к изменению. +// См. "Свойства для изменения" процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// +// Описание: +// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// +// Вспомогательные методы: +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// +// Примеры: +// +// 1. Установка описания варианта. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Описание = НСтр("ru = '<Описание>'"); +// +// 2. Отключение варианта отчета. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Включен = Ложь; +// +Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + НастройкиОтчета.Описание = НСтр("ru = 'Согласия на обработку персональных данных, срок действия которых истекает.'"); + + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "ИстекающиеСогласия"); + НастройкиВарианта.Описание = НСтр("ru = 'Согласия, срок действия которых истекает в заданном периоде.'"); +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/ObjectModule.bsl b/SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхИстекающие/ObjectModule.bsl similarity index 100% rename from SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/ObjectModule.bsl rename to SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхИстекающие/ObjectModule.bsl diff --git a/SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхИстекающие/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs similarity index 100% rename from SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs rename to SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхИстекающие/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs diff --git a/SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/ИстекающиеСогласияНаОбработкуПерсональныхДанных.mdo b/SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхИстекающие/СогласияНаОбработкуПерсональныхДанныхИстекающие.mdo similarity index 76% rename from SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/ИстекающиеСогласияНаОбработкуПерсональныхДанных.mdo rename to SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхИстекающие/СогласияНаОбработкуПерсональныхДанныхИстекающие.mdo index 667e0ccf8..d24c27cd9 100644 --- a/SSL/src/Reports/ИстекающиеСогласияНаОбработкуПерсональныхДанных/ИстекающиеСогласияНаОбработкуПерсональныхДанных.mdo +++ b/SSL/src/Reports/СогласияНаОбработкуПерсональныхДанныхИстекающие/СогласияНаОбработкуПерсональныхДанныхИстекающие.mdo @@ -4,13 +4,13 @@ - ИстекающиеСогласияНаОбработкуПерсональныхДанных + СогласияНаОбработкуПерсональныхДанныхИстекающие ru - Истекающие согласия на обработку персональных данных + Согласия на обработку персональных данных истекающие true - Report.ИстекающиеСогласияНаОбработкуПерсональныхДанных.Template.ОсновнаяСхемаКомпоновкиДанных + Report.СогласияНаОбработкуПерсональныхДанныхИстекающие.Template.ОсновнаяСхемаКомпоновкиДанных SettingsStorage.ХранилищеВариантовОтчетов true diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаВарианта/Form.form b/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаВариантаОтчета/Form.form similarity index 92% rename from SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаВарианта/Form.form rename to SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаВариантаОтчета/Form.form index d656d914c..d1d039b6e 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаВарианта/Form.form +++ b/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаВариантаОтчета/Form.form @@ -32,10 +32,10 @@ КомпоновщикНастроекНастройкиСтрокаПоиска - 195 + 201 КомпоновщикНастроекНастройкиСтрокаПоискаРасширеннаяПодсказка - 197 + 203 Label true true @@ -45,7 +45,7 @@ КомпоновщикНастроекНастройкиСтрокаПоискаКонтекстноеМеню - 196 + 202 true КомпоновщикНастроекНастройки @@ -55,10 +55,10 @@ КомпоновщикНастроекНастройкиСостояниеПросмотра - 198 + 204 КомпоновщикНастроекНастройкиСостояниеПросмотраРасширеннаяПодсказка - 200 + 206 Label true true @@ -68,7 +68,7 @@ КомпоновщикНастроекНастройкиСостояниеПросмотраКонтекстноеМеню - 199 + 205 true ViewStatusAddition @@ -79,10 +79,10 @@ КомпоновщикНастроекНастройкиУправлениеПоиском - 201 + 207 КомпоновщикНастроекНастройкиУправлениеПоискомРасширеннаяПодсказка - 203 + 209 Label true true @@ -92,7 +92,7 @@ КомпоновщикНастроекНастройкиУправлениеПоискомКонтекстноеМеню - 202 + 208 true SearchControlAddition @@ -102,8 +102,8 @@ - КомпоновщикНастроекНастройкиРасширеннаяПодсказка - 4 + КомпоновщикНастроекНастройкиExtendedTooltip + 130 Label true true @@ -146,13 +146,13 @@
                                СтраницыНастроек - 5 + 4 СтраницаПараметровДанных - 7 + 5 КомпоновщикНастроекНастройкиПараметрыДанных - 9 + 6 <key>ru</key> <value>Настройки параметров</value> @@ -168,16 +168,16 @@ <titleLocation>None</titleLocation> <autoCommandBar> <name>КомпоновщикНастроекНастройкиПараметрыДанныхКоманднаяПанель</name> - <id>11</id> + <id>8</id> <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> <searchStringAddition> <name>КомпоновщикНастроекНастройкиПараметрыДанныхСтрокаПоиска</name> - <id>204</id> + <id>210</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиПараметрыДанныхСтрокаПоискаРасширеннаяПодсказка</name> - <id>206</id> + <id>212</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -187,7 +187,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПараметрыДанныхСтрокаПоискаКонтекстноеМеню</name> - <id>205</id> + <id>211</id> <autoFill>true</autoFill> </contextMenu> <source>КомпоновщикНастроекНастройкиПараметрыДанных</source> @@ -197,10 +197,10 @@ </searchStringAddition> <viewStatusAddition> <name>КомпоновщикНастроекНастройкиПараметрыДанныхСостояниеПросмотра</name> - <id>207</id> + <id>213</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиПараметрыДанныхСостояниеПросмотраРасширеннаяПодсказка</name> - <id>209</id> + <id>215</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -210,7 +210,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПараметрыДанныхСостояниеПросмотраКонтекстноеМеню</name> - <id>208</id> + <id>214</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> @@ -221,10 +221,10 @@ </viewStatusAddition> <searchControlAddition> <name>КомпоновщикНастроекНастройкиПараметрыДанныхУправлениеПоиском</name> - <id>210</id> + <id>216</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиПараметрыДанныхУправлениеПоискомРасширеннаяПодсказка</name> - <id>212</id> + <id>218</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -234,7 +234,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПараметрыДанныхУправлениеПоискомКонтекстноеМеню</name> - <id>211</id> + <id>217</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -244,8 +244,8 @@ </extInfo> </searchControlAddition> <extendedTooltip> - <name>КомпоновщикНастроекНастройкиПараметрыДанныхРасширеннаяПодсказка</name> - <id>12</id> + <name>КомпоновщикНастроекНастройкиПараметрыДанныхExtendedTooltip</name> + <id>133</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -255,7 +255,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПараметрыДанныхКонтекстноеМеню</name> - <id>10</id> + <id>7</id> <autoFill>true</autoFill> </contextMenu> <representation>Tree</representation> @@ -295,8 +295,8 @@ <value>Параметры</value> - СтраницаПараметровДанныхРасширеннаяПодсказка - 8 + СтраницаПараметровДанныхExtendedTooltip + 132 Label true true @@ -311,14 +311,15 @@ Vertical auto + false СтраницаПользовательскихПолей - 13 + 9 КомпоновщикНастроекНастройкиПользовательскиеПоля - 15 + 10 <key>ru</key> <value>Настройки пользовательских полей</value> @@ -334,16 +335,16 @@ <titleLocation>None</titleLocation> <autoCommandBar> <name>КомпоновщикНастроекНастройкиПользовательскиеПоляКоманднаяПанель</name> - <id>17</id> + <id>12</id> <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> <searchStringAddition> <name>КомпоновщикНастроекНастройкиПользовательскиеПоляСтрокаПоиска</name> - <id>213</id> + <id>219</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиПользовательскиеПоляСтрокаПоискаРасширеннаяПодсказка</name> - <id>215</id> + <id>221</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -353,7 +354,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПользовательскиеПоляСтрокаПоискаКонтекстноеМеню</name> - <id>214</id> + <id>220</id> <autoFill>true</autoFill> </contextMenu> <source>КомпоновщикНастроекНастройкиПользовательскиеПоля</source> @@ -363,10 +364,10 @@ </searchStringAddition> <viewStatusAddition> <name>КомпоновщикНастроекНастройкиПользовательскиеПоляСостояниеПросмотра</name> - <id>216</id> + <id>222</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиПользовательскиеПоляСостояниеПросмотраРасширеннаяПодсказка</name> - <id>218</id> + <id>224</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -376,7 +377,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПользовательскиеПоляСостояниеПросмотраКонтекстноеМеню</name> - <id>217</id> + <id>223</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> @@ -387,10 +388,10 @@ </viewStatusAddition> <searchControlAddition> <name>КомпоновщикНастроекНастройкиПользовательскиеПоляУправлениеПоиском</name> - <id>219</id> + <id>225</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиПользовательскиеПоляУправлениеПоискомРасширеннаяПодсказка</name> - <id>221</id> + <id>227</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -400,7 +401,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПользовательскиеПоляУправлениеПоискомКонтекстноеМеню</name> - <id>220</id> + <id>226</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -410,8 +411,8 @@ </extInfo> </searchControlAddition> <extendedTooltip> - <name>КомпоновщикНастроекНастройкиПользовательскиеПоляРасширеннаяПодсказка</name> - <id>18</id> + <name>КомпоновщикНастроекНастройкиПользовательскиеПоляExtendedTooltip</name> + <id>135</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -421,7 +422,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПользовательскиеПоляКонтекстноеМеню</name> - <id>16</id> + <id>11</id> <autoFill>true</autoFill> </contextMenu> <autoFill>true</autoFill> @@ -460,8 +461,8 @@ <value>Пользовательские поля</value> - СтраницаПользовательскихПолейРасширеннаяПодсказка - 14 + СтраницаПользовательскихПолейExtendedTooltip + 134 Label true true @@ -475,20 +476,21 @@ StdPicture.DataCompositionUserFields auto + false СтраницаПолейГруппировки - 19 + 13 СтраницыПолейГруппировки - 21 + 14 НастройкиПолейГруппировки - 23 + 15 КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировок - 25 + 16 <key>ru</key> <value>Доступные поля группируемых полей</value> @@ -504,16 +506,16 @@ <titleLocation>None</titleLocation> <autoCommandBar> <name>КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировокКоманднаяПанель</name> - <id>27</id> + <id>18</id> <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> <searchStringAddition> <name>КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировокСтрокаПоиска</name> - <id>222</id> + <id>228</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировокСтрокаПоискаРасширеннаяПодсказка</name> - <id>224</id> + <id>230</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -523,7 +525,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировокСтрокаПоискаКонтекстноеМеню</name> - <id>223</id> + <id>229</id> <autoFill>true</autoFill> </contextMenu> <source>КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировок</source> @@ -533,10 +535,10 @@ </searchStringAddition> <viewStatusAddition> <name>КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировокСостояниеПросмотра</name> - <id>225</id> + <id>231</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировокСостояниеПросмотраРасширеннаяПодсказка</name> - <id>227</id> + <id>233</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -546,7 +548,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировокСостояниеПросмотраКонтекстноеМеню</name> - <id>226</id> + <id>232</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> @@ -557,10 +559,10 @@ </viewStatusAddition> <searchControlAddition> <name>КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировокУправлениеПоиском</name> - <id>228</id> + <id>234</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировокУправлениеПоискомРасширеннаяПодсказка</name> - <id>230</id> + <id>236</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -570,7 +572,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировокУправлениеПоискомКонтекстноеМеню</name> - <id>229</id> + <id>235</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -580,8 +582,8 @@ </extInfo> </searchControlAddition> <extendedTooltip> - <name>КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировокРасширеннаяПодсказка</name> - <id>28</id> + <name>КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировокExtendedTooltip</name> + <id>139</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -591,7 +593,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировокКонтекстноеМеню</name> - <id>26</id> + <id>17</id> <autoFill>true</autoFill> </contextMenu> <representation>Tree</representation> @@ -628,7 +630,7 @@ </items> <items xsi:type="form:Table"> <name>КомпоновщикНастроекНастройкиПоляГруппировки</name> - <id>29</id> + <id>19</id> <title> <key>ru</key> <value>Таблица группируемых полей</value> @@ -644,16 +646,16 @@ <titleLocation>None</titleLocation> <autoCommandBar> <name>КомпоновщикНастроекНастройкиПоляГруппировкиКоманднаяПанель</name> - <id>31</id> + <id>21</id> <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> <searchStringAddition> <name>КомпоновщикНастроекНастройкиПоляГруппировкиСтрокаПоиска</name> - <id>231</id> + <id>237</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиПоляГруппировкиСтрокаПоискаРасширеннаяПодсказка</name> - <id>233</id> + <id>239</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -663,7 +665,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПоляГруппировкиСтрокаПоискаКонтекстноеМеню</name> - <id>232</id> + <id>238</id> <autoFill>true</autoFill> </contextMenu> <source>КомпоновщикНастроекНастройкиПоляГруппировки</source> @@ -673,10 +675,10 @@ </searchStringAddition> <viewStatusAddition> <name>КомпоновщикНастроекНастройкиПоляГруппировкиСостояниеПросмотра</name> - <id>234</id> + <id>240</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиПоляГруппировкиСостояниеПросмотраРасширеннаяПодсказка</name> - <id>236</id> + <id>242</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -686,7 +688,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПоляГруппировкиСостояниеПросмотраКонтекстноеМеню</name> - <id>235</id> + <id>241</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> @@ -697,10 +699,10 @@ </viewStatusAddition> <searchControlAddition> <name>КомпоновщикНастроекНастройкиПоляГруппировкиУправлениеПоиском</name> - <id>237</id> + <id>243</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиПоляГруппировкиУправлениеПоискомРасширеннаяПодсказка</name> - <id>239</id> + <id>245</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -710,7 +712,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПоляГруппировкиУправлениеПоискомКонтекстноеМеню</name> - <id>238</id> + <id>244</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -720,8 +722,8 @@ </extInfo> </searchControlAddition> <extendedTooltip> - <name>КомпоновщикНастроекНастройкиПоляГруппировкиРасширеннаяПодсказка</name> - <id>32</id> + <name>КомпоновщикНастроекНастройкиПоляГруппировкиExtendedTooltip</name> + <id>140</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -731,7 +733,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПоляГруппировкиКонтекстноеМеню</name> - <id>30</id> + <id>20</id> <autoFill>true</autoFill> </contextMenu> <autoFill>true</autoFill> @@ -770,8 +772,8 @@ <value>Страница группируемых полей</value> - НастройкиПолейГруппировкиРасширеннаяПодсказка - 24 + НастройкиПолейГруппировкиExtendedTooltip + 138 Label true true @@ -783,14 +785,15 @@ LeftNarrowest auto + false НедоступныеНастройкиПолейГруппировки - 33 + 22 НадписьНедоступныхПолейГруппировки - 35 + 23 <key>ru</key> <value>Текущий элемент не может содержать поля группировки. @@ -802,8 +805,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>НадписьНедоступныхПолейГруппировкиРасширеннаяПодсказка</name> - <id>37</id> + <name>НадписьНедоступныхПолейГруппировкиExtendedTooltip</name> + <id>142</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -813,7 +816,7 @@ </extendedTooltip> <contextMenu> <name>НадписьНедоступныхПолейГруппировкиКонтекстноеМеню</name> - <id>36</id> + <id>24</id> <autoFill>true</autoFill> </contextMenu> <type>Label</type> @@ -836,8 +839,8 @@ <value>Страница недоступных группируемых полей</value> - НедоступныеНастройкиПолейГруппировкиРасширеннаяПодсказка - 34 + НедоступныеНастройкиПолейГруппировкиExtendedTooltip + 141 Label true true @@ -849,6 +852,7 @@ Vertical auto + false true @@ -861,8 +865,8 @@ Страницы группируемых полей - СтраницыПолейГруппировкиРасширеннаяПодсказка - 22 + СтраницыПолейГруппировкиExtendedTooltip + 137 Label true true @@ -885,8 +889,8 @@ Группируемые поля - СтраницаПолейГруппировкиРасширеннаяПодсказка - 20 + СтраницаПолейГруппировкиExtendedTooltip + 136 Label true true @@ -901,14 +905,15 @@ Vertical auto + false СтраницаПолейВыбора - 38 + 25 ЛокальныеВыбранныеПоля - 40 + 26 <key>ru</key> <value>Текущий элемент имеет собственные настройки выбранных полей (для детальной настройки элемента)</value> @@ -927,8 +932,8 @@ <name>ЛокальныеВыбранныеПоляПриИзменении</name> </handlers> <extendedTooltip> - <name>ЛокальныеВыбранныеПоляРасширеннаяПодсказка</name> - <id>42</id> + <name>ЛокальныеВыбранныеПоляExtendedTooltip</name> + <id>144</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -938,7 +943,7 @@ </extendedTooltip> <contextMenu> <name>ЛокальныеВыбранныеПоляКонтекстноеМеню</name> - <id>41</id> + <id>27</id> <autoFill>true</autoFill> </contextMenu> <type>CheckBoxField</type> @@ -950,13 +955,13 @@ </items> <items xsi:type="form:FormGroup"> <name>СтраницыПолейВыбора</name> - <id>43</id> + <id>28</id> <items xsi:type="form:FormGroup"> <name>НастройкиВыбранныхПолей</name> - <id>45</id> + <id>29</id> <items xsi:type="form:Table"> <name>КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбора</name> - <id>47</id> + <id>30</id> <title> <key>ru</key> <value>Доступные поля полей</value> @@ -972,16 +977,16 @@ <titleLocation>None</titleLocation> <autoCommandBar> <name>КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбораКоманднаяПанель</name> - <id>49</id> + <id>32</id> <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> <searchStringAddition> <name>КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбораСтрокаПоиска</name> - <id>240</id> + <id>246</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбораСтрокаПоискаРасширеннаяПодсказка</name> - <id>242</id> + <id>248</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -991,7 +996,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбораСтрокаПоискаКонтекстноеМеню</name> - <id>241</id> + <id>247</id> <autoFill>true</autoFill> </contextMenu> <source>КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбора</source> @@ -1001,10 +1006,10 @@ </searchStringAddition> <viewStatusAddition> <name>КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбораСостояниеПросмотра</name> - <id>243</id> + <id>249</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбораСостояниеПросмотраРасширеннаяПодсказка</name> - <id>245</id> + <id>251</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1014,7 +1019,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбораСостояниеПросмотраКонтекстноеМеню</name> - <id>244</id> + <id>250</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> @@ -1025,10 +1030,10 @@ </viewStatusAddition> <searchControlAddition> <name>КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбораУправлениеПоиском</name> - <id>246</id> + <id>252</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбораУправлениеПоискомРасширеннаяПодсказка</name> - <id>248</id> + <id>254</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1038,7 +1043,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбораУправлениеПоискомКонтекстноеМеню</name> - <id>247</id> + <id>253</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -1048,8 +1053,8 @@ </extInfo> </searchControlAddition> <extendedTooltip> - <name>КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбораРасширеннаяПодсказка</name> - <id>50</id> + <name>КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбораExtendedTooltip</name> + <id>147</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1059,7 +1064,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбораКонтекстноеМеню</name> - <id>48</id> + <id>31</id> <autoFill>true</autoFill> </contextMenu> <representation>Tree</representation> @@ -1096,7 +1101,7 @@ </items> <items xsi:type="form:Table"> <name>КомпоновщикНастроекНастройкиВыбор</name> - <id>51</id> + <id>33</id> <title> <key>ru</key> <value>Таблица полей</value> @@ -1112,16 +1117,16 @@ <titleLocation>None</titleLocation> <autoCommandBar> <name>КомпоновщикНастроекНастройкиВыборКоманднаяПанель</name> - <id>53</id> + <id>35</id> <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> <searchStringAddition> <name>КомпоновщикНастроекНастройкиВыборСтрокаПоиска</name> - <id>249</id> + <id>255</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиВыборСтрокаПоискаРасширеннаяПодсказка</name> - <id>251</id> + <id>257</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1131,7 +1136,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиВыборСтрокаПоискаКонтекстноеМеню</name> - <id>250</id> + <id>256</id> <autoFill>true</autoFill> </contextMenu> <source>КомпоновщикНастроекНастройкиВыбор</source> @@ -1141,10 +1146,10 @@ </searchStringAddition> <viewStatusAddition> <name>КомпоновщикНастроекНастройкиВыборСостояниеПросмотра</name> - <id>252</id> + <id>258</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиВыборСостояниеПросмотраРасширеннаяПодсказка</name> - <id>254</id> + <id>260</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1154,7 +1159,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиВыборСостояниеПросмотраКонтекстноеМеню</name> - <id>253</id> + <id>259</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> @@ -1165,10 +1170,10 @@ </viewStatusAddition> <searchControlAddition> <name>КомпоновщикНастроекНастройкиВыборУправлениеПоиском</name> - <id>255</id> + <id>261</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиВыборУправлениеПоискомРасширеннаяПодсказка</name> - <id>257</id> + <id>263</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1178,7 +1183,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиВыборУправлениеПоискомКонтекстноеМеню</name> - <id>256</id> + <id>262</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -1188,8 +1193,8 @@ </extInfo> </searchControlAddition> <extendedTooltip> - <name>КомпоновщикНастроекНастройкиВыборРасширеннаяПодсказка</name> - <id>54</id> + <name>КомпоновщикНастроекНастройкиВыборExtendedTooltip</name> + <id>148</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1199,7 +1204,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиВыборКонтекстноеМеню</name> - <id>52</id> + <id>34</id> <autoFill>true</autoFill> </contextMenu> <representation>Tree</representation> @@ -1240,8 +1245,8 @@ <value>Страница полей</value> - НастройкиВыбранныхПолейРасширеннаяПодсказка - 46 + НастройкиВыбранныхПолейExtendedTooltip + 146 Label true true @@ -1253,14 +1258,15 @@ LeftNarrowest auto + false ОтключенныеНастройкиВыбранныхПолей - 55 + 36 НадписьЛокальныхВыбранныхПолей - 57 + 37 <key>ru</key> <value>Выбранные поля для текущего элемента будут автоматически формироваться на основании выбранных полей всего отчета. @@ -1273,8 +1279,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>НадписьЛокальныхВыбранныхПолейРасширеннаяПодсказка</name> - <id>59</id> + <name>НадписьЛокальныхВыбранныхПолейExtendedTooltip</name> + <id>150</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1284,7 +1290,7 @@ </extendedTooltip> <contextMenu> <name>НадписьЛокальныхВыбранныхПолейКонтекстноеМеню</name> - <id>58</id> + <id>38</id> <autoFill>true</autoFill> </contextMenu> <type>Label</type> @@ -1299,7 +1305,7 @@ </items> <items xsi:type="form:Decoration"> <name>ПереходКВыбраннымПолямОтчета</name> - <id>60</id> + <id>39</id> <title> <key>ru</key> <value>Нажмите здесь для перехода к выбранным полям отчета.</value> @@ -1310,8 +1316,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ПереходКВыбраннымПолямОтчетаРасширеннаяПодсказка</name> - <id>62</id> + <name>ПереходКВыбраннымПолямОтчетаExtendedTooltip</name> + <id>151</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1321,7 +1327,7 @@ </extendedTooltip> <contextMenu> <name>ПереходКВыбраннымПолямОтчетаКонтекстноеМеню</name> - <id>61</id> + <id>40</id> <autoFill>true</autoFill> </contextMenu> <type>Label</type> @@ -1346,8 +1352,8 @@ <value>Страница отключенных полей</value> - ОтключенныеНастройкиВыбранныхПолейРасширеннаяПодсказка - 56 + ОтключенныеНастройкиВыбранныхПолейExtendedTooltip + 149 Label true true @@ -1359,14 +1365,15 @@ Vertical auto + false НедоступныеНастройкиВыбранныхПолей - 63 + 41 НадписьНедоступныхВыбранныхПолей - 65 + 42 <key>ru</key> <value>У текущего элемента не могут быть установлены выбранные поля. @@ -1378,8 +1385,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>НадписьНедоступныхВыбранныхПолейРасширеннаяПодсказка</name> - <id>67</id> + <name>НадписьНедоступныхВыбранныхПолейExtendedTooltip</name> + <id>153</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1389,7 +1396,7 @@ </extendedTooltip> <contextMenu> <name>НадписьНедоступныхВыбранныхПолейКонтекстноеМеню</name> - <id>66</id> + <id>43</id> <autoFill>true</autoFill> </contextMenu> <type>Label</type> @@ -1403,8 +1410,8 @@ </extInfo> </items> <items xsi:type="form:Decoration"> - <name>ПереходКВыбраннымПолямОтчетаОтНедоступныхВыбранныхПолей</name> - <id>68</id> + <name>ПереходКВыбраннымПолямОтчета1</name> + <id>44</id> <title> <key>ru</key> <value>Нажмите здесь для перехода к выбранным полям отчета.</value> @@ -1415,8 +1422,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ПереходКВыбраннымПолямОтчетаОтНедоступныхВыбранныхПолейРасширеннаяПодсказка</name> - <id>70</id> + <name>ПереходКВыбраннымПолямОтчета1ExtendedTooltip</name> + <id>154</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1425,8 +1432,8 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ПереходКВыбраннымПолямОтчетаОтНедоступныхВыбранныхПолейКонтекстноеМеню</name> - <id>69</id> + <name>ПереходКВыбраннымПолямОтчета1КонтекстноеМеню</name> + <id>45</id> <autoFill>true</autoFill> </contextMenu> <type>Label</type> @@ -1451,8 +1458,8 @@ <value>Страница недоступных полей</value> - НедоступныеНастройкиВыбранныхПолейРасширеннаяПодсказка - 64 + НедоступныеНастройкиВыбранныхПолейExtendedTooltip + 152 Label true true @@ -1464,6 +1471,7 @@ Vertical auto + false true @@ -1476,8 +1484,8 @@ Страницы полей - СтраницыПолейВыбораРасширеннаяПодсказка - 44 + СтраницыПолейВыбораExtendedTooltip + 145 Label true true @@ -1500,8 +1508,8 @@ Поля - СтраницаПолейВыбораРасширеннаяПодсказка - 39 + СтраницаПолейВыбораExtendedTooltip + 143 Label true true @@ -1516,14 +1524,15 @@ Vertical auto + false СтраницаОтбора - 71 + 46 ЛокальныйОтбор - 73 + 47 <key>ru</key> <value>Текущий элемент имеет собственный отбор (для фильтрации записей, выводимых в элементе)</value> @@ -1542,8 +1551,8 @@ <name>ЛокальныйОтборПриИзменении</name> </handlers> <extendedTooltip> - <name>ЛокальныйОтборРасширеннаяПодсказка</name> - <id>75</id> + <name>ЛокальныйОтборExtendedTooltip</name> + <id>156</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1553,7 +1562,7 @@ </extendedTooltip> <contextMenu> <name>ЛокальныйОтборКонтекстноеМеню</name> - <id>74</id> + <id>48</id> <autoFill>true</autoFill> </contextMenu> <type>CheckBoxField</type> @@ -1565,13 +1574,13 @@ </items> <items xsi:type="form:FormGroup"> <name>СтраницыОтбора</name> - <id>76</id> + <id>49</id> <items xsi:type="form:FormGroup"> <name>НастройкиОтбора</name> - <id>78</id> + <id>50</id> <items xsi:type="form:Table"> <name>КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбора</name> - <id>80</id> + <id>51</id> <title> <key>ru</key> <value>Доступные поля отбора</value> @@ -1587,16 +1596,16 @@ <titleLocation>None</titleLocation> <autoCommandBar> <name>КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбораКоманднаяПанель</name> - <id>82</id> + <id>53</id> <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> <searchStringAddition> <name>КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбораСтрокаПоиска</name> - <id>258</id> + <id>264</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбораСтрокаПоискаРасширеннаяПодсказка</name> - <id>260</id> + <id>266</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1606,7 +1615,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбораСтрокаПоискаКонтекстноеМеню</name> - <id>259</id> + <id>265</id> <autoFill>true</autoFill> </contextMenu> <source>КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбора</source> @@ -1616,10 +1625,10 @@ </searchStringAddition> <viewStatusAddition> <name>КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбораСостояниеПросмотра</name> - <id>261</id> + <id>267</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбораСостояниеПросмотраРасширеннаяПодсказка</name> - <id>263</id> + <id>269</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1629,7 +1638,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбораСостояниеПросмотраКонтекстноеМеню</name> - <id>262</id> + <id>268</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> @@ -1640,10 +1649,10 @@ </viewStatusAddition> <searchControlAddition> <name>КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбораУправлениеПоиском</name> - <id>264</id> + <id>270</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбораУправлениеПоискомРасширеннаяПодсказка</name> - <id>266</id> + <id>272</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1653,7 +1662,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбораУправлениеПоискомКонтекстноеМеню</name> - <id>265</id> + <id>271</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -1663,8 +1672,8 @@ </extInfo> </searchControlAddition> <extendedTooltip> - <name>КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбораРасширеннаяПодсказка</name> - <id>83</id> + <name>КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбораExtendedTooltip</name> + <id>159</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1674,7 +1683,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбораКонтекстноеМеню</name> - <id>81</id> + <id>52</id> <autoFill>true</autoFill> </contextMenu> <representation>Tree</representation> @@ -1711,7 +1720,7 @@ </items> <items xsi:type="form:Table"> <name>КомпоновщикНастроекНастройкиОтбор</name> - <id>84</id> + <id>54</id> <title> <key>ru</key> <value>Таблица отбора</value> @@ -1727,16 +1736,16 @@ <titleLocation>None</titleLocation> <autoCommandBar> <name>КомпоновщикНастроекНастройкиОтборКоманднаяПанель</name> - <id>86</id> + <id>56</id> <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> <searchStringAddition> <name>КомпоновщикНастроекНастройкиОтборСтрокаПоиска</name> - <id>267</id> + <id>273</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиОтборСтрокаПоискаРасширеннаяПодсказка</name> - <id>269</id> + <id>275</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1746,7 +1755,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиОтборСтрокаПоискаКонтекстноеМеню</name> - <id>268</id> + <id>274</id> <autoFill>true</autoFill> </contextMenu> <source>КомпоновщикНастроекНастройкиОтбор</source> @@ -1756,10 +1765,10 @@ </searchStringAddition> <viewStatusAddition> <name>КомпоновщикНастроекНастройкиОтборСостояниеПросмотра</name> - <id>270</id> + <id>276</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиОтборСостояниеПросмотраРасширеннаяПодсказка</name> - <id>272</id> + <id>278</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1769,7 +1778,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиОтборСостояниеПросмотраКонтекстноеМеню</name> - <id>271</id> + <id>277</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> @@ -1780,10 +1789,10 @@ </viewStatusAddition> <searchControlAddition> <name>КомпоновщикНастроекНастройкиОтборУправлениеПоиском</name> - <id>273</id> + <id>279</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиОтборУправлениеПоискомРасширеннаяПодсказка</name> - <id>275</id> + <id>281</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1793,7 +1802,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиОтборУправлениеПоискомКонтекстноеМеню</name> - <id>274</id> + <id>280</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -1803,8 +1812,8 @@ </extInfo> </searchControlAddition> <extendedTooltip> - <name>КомпоновщикНастроекНастройкиОтборРасширеннаяПодсказка</name> - <id>87</id> + <name>КомпоновщикНастроекНастройкиОтборExtendedTooltip</name> + <id>160</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1814,7 +1823,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиОтборКонтекстноеМеню</name> - <id>85</id> + <id>55</id> <autoFill>true</autoFill> </contextMenu> <representation>Tree</representation> @@ -1857,8 +1866,8 @@ <value>Страница полей</value> - НастройкиОтбораРасширеннаяПодсказка - 79 + НастройкиОтбораExtendedTooltip + 158 Label true true @@ -1870,14 +1879,15 @@ LeftNarrowest auto + false ОтключенныеНастройкиОтбора - 88 + 57 НадписьЛокальногоОтбора - 90 + 58 <key>ru</key> <value>В текущем элементе отбор не установлен. @@ -1890,8 +1900,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>НадписьЛокальногоОтбораРасширеннаяПодсказка</name> - <id>92</id> + <name>НадписьЛокальногоОтбораExtendedTooltip</name> + <id>162</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1901,7 +1911,7 @@ </extendedTooltip> <contextMenu> <name>НадписьЛокальногоОтбораКонтекстноеМеню</name> - <id>91</id> + <id>59</id> <autoFill>true</autoFill> </contextMenu> <type>Label</type> @@ -1916,7 +1926,7 @@ </items> <items xsi:type="form:Decoration"> <name>ПереходКОтборуОтчета</name> - <id>93</id> + <id>60</id> <title> <key>ru</key> <value>Нажмите здесь для перехода к отбору отчета.</value> @@ -1927,8 +1937,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ПереходКОтборуОтчетаРасширеннаяПодсказка</name> - <id>95</id> + <name>ПереходКОтборуОтчетаExtendedTooltip</name> + <id>163</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1938,7 +1948,7 @@ </extendedTooltip> <contextMenu> <name>ПереходКОтборуОтчетаКонтекстноеМеню</name> - <id>94</id> + <id>61</id> <autoFill>true</autoFill> </contextMenu> <type>Label</type> @@ -1963,8 +1973,8 @@ <value>Страница отключенного отбора</value> - ОтключенныеНастройкиОтбораРасширеннаяПодсказка - 89 + ОтключенныеНастройкиОтбораExtendedTooltip + 161 Label true true @@ -1976,14 +1986,15 @@ Vertical auto + false НедоступныеНастройкиОтбора - 96 + 62 НадписьНедоступногоОтбора - 98 + 63 <key>ru</key> <value>У текущего элемента не может быть установлен отбор. @@ -1995,8 +2006,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>НадписьНедоступногоОтбораРасширеннаяПодсказка</name> - <id>100</id> + <name>НадписьНедоступногоОтбораExtendedTooltip</name> + <id>165</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2006,7 +2017,7 @@ </extendedTooltip> <contextMenu> <name>НадписьНедоступногоОтбораКонтекстноеМеню</name> - <id>99</id> + <id>64</id> <autoFill>true</autoFill> </contextMenu> <type>Label</type> @@ -2020,8 +2031,8 @@ </extInfo> </items> <items xsi:type="form:Decoration"> - <name>ПереходКОтборуОтчетаОтНедоступногоОтбора</name> - <id>101</id> + <name>ПереходКОтборуОтчета1</name> + <id>65</id> <title> <key>ru</key> <value>Нажмите здесь для перехода к отбору отчета.</value> @@ -2032,8 +2043,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ПереходКОтборуОтчетаОтНедоступногоОтбораРасширеннаяПодсказка</name> - <id>103</id> + <name>ПереходКОтборуОтчета1ExtendedTooltip</name> + <id>166</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2042,8 +2053,8 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ПереходКОтборуОтчетаОтНедоступногоОтбораКонтекстноеМеню</name> - <id>102</id> + <name>ПереходКОтборуОтчета1КонтекстноеМеню</name> + <id>66</id> <autoFill>true</autoFill> </contextMenu> <type>Label</type> @@ -2068,8 +2079,8 @@ <value>Страница недоступного отбора</value> - НедоступныеНастройкиОтбораРасширеннаяПодсказка - 97 + НедоступныеНастройкиОтбораExtendedTooltip + 164 Label true true @@ -2081,6 +2092,7 @@ Vertical auto + false true @@ -2093,8 +2105,8 @@ Страницы отбора - СтраницыОтбораРасширеннаяПодсказка - 77 + СтраницыОтбораExtendedTooltip + 157 Label true true @@ -2117,8 +2129,8 @@ Отбор - СтраницаОтбораРасширеннаяПодсказка - 72 + СтраницаОтбораExtendedTooltip + 155 Label true true @@ -2133,14 +2145,15 @@ Vertical auto + false СтраницаПорядка - 104 + 67 ЛокальныйПорядок - 106 + 68 <key>ru</key> <value>Текущий элемент имеет собственную сортировку (для упорядочивания записей, выводимых в элементе)</value> @@ -2159,8 +2172,8 @@ <name>ЛокальныйПорядокПриИзменении</name> </handlers> <extendedTooltip> - <name>ЛокальныйПорядокРасширеннаяПодсказка</name> - <id>108</id> + <name>ЛокальныйПорядокExtendedTooltip</name> + <id>168</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2170,7 +2183,7 @@ </extendedTooltip> <contextMenu> <name>ЛокальныйПорядокКонтекстноеМеню</name> - <id>107</id> + <id>69</id> <autoFill>true</autoFill> </contextMenu> <type>CheckBoxField</type> @@ -2182,13 +2195,13 @@ </items> <items xsi:type="form:FormGroup"> <name>СтраницыПорядка</name> - <id>109</id> + <id>70</id> <items xsi:type="form:FormGroup"> <name>НастройкиПорядка</name> - <id>111</id> + <id>71</id> <items xsi:type="form:Table"> <name>КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядка</name> - <id>113</id> + <id>72</id> <title> <key>ru</key> <value>Доступные поля сортировки</value> @@ -2204,16 +2217,16 @@ <titleLocation>None</titleLocation> <autoCommandBar> <name>КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядкаКоманднаяПанель</name> - <id>115</id> + <id>74</id> <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> <searchStringAddition> <name>КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядкаСтрокаПоиска</name> - <id>276</id> + <id>282</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядкаСтрокаПоискаРасширеннаяПодсказка</name> - <id>278</id> + <id>284</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2223,7 +2236,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядкаСтрокаПоискаКонтекстноеМеню</name> - <id>277</id> + <id>283</id> <autoFill>true</autoFill> </contextMenu> <source>КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядка</source> @@ -2233,10 +2246,10 @@ </searchStringAddition> <viewStatusAddition> <name>КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядкаСостояниеПросмотра</name> - <id>279</id> + <id>285</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядкаСостояниеПросмотраРасширеннаяПодсказка</name> - <id>281</id> + <id>287</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2246,7 +2259,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядкаСостояниеПросмотраКонтекстноеМеню</name> - <id>280</id> + <id>286</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> @@ -2257,10 +2270,10 @@ </viewStatusAddition> <searchControlAddition> <name>КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядкаУправлениеПоиском</name> - <id>282</id> + <id>288</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядкаУправлениеПоискомРасширеннаяПодсказка</name> - <id>284</id> + <id>290</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2270,7 +2283,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядкаУправлениеПоискомКонтекстноеМеню</name> - <id>283</id> + <id>289</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -2280,8 +2293,8 @@ </extInfo> </searchControlAddition> <extendedTooltip> - <name>КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядкаРасширеннаяПодсказка</name> - <id>116</id> + <name>КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядкаExtendedTooltip</name> + <id>171</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2291,7 +2304,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядкаКонтекстноеМеню</name> - <id>114</id> + <id>73</id> <autoFill>true</autoFill> </contextMenu> <representation>Tree</representation> @@ -2328,7 +2341,7 @@ </items> <items xsi:type="form:Table"> <name>КомпоновщикНастроекНастройкиПорядок</name> - <id>117</id> + <id>75</id> <title> <key>ru</key> <value>Таблица сортировки</value> @@ -2344,16 +2357,16 @@ <titleLocation>None</titleLocation> <autoCommandBar> <name>КомпоновщикНастроекНастройкиПорядокКоманднаяПанель</name> - <id>119</id> + <id>77</id> <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> <searchStringAddition> <name>КомпоновщикНастроекНастройкиПорядокСтрокаПоиска</name> - <id>285</id> + <id>291</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиПорядокСтрокаПоискаРасширеннаяПодсказка</name> - <id>287</id> + <id>293</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2363,7 +2376,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПорядокСтрокаПоискаКонтекстноеМеню</name> - <id>286</id> + <id>292</id> <autoFill>true</autoFill> </contextMenu> <source>КомпоновщикНастроекНастройкиПорядок</source> @@ -2373,10 +2386,10 @@ </searchStringAddition> <viewStatusAddition> <name>КомпоновщикНастроекНастройкиПорядокСостояниеПросмотра</name> - <id>288</id> + <id>294</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиПорядокСостояниеПросмотраРасширеннаяПодсказка</name> - <id>290</id> + <id>296</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2386,7 +2399,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПорядокСостояниеПросмотраКонтекстноеМеню</name> - <id>289</id> + <id>295</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> @@ -2397,10 +2410,10 @@ </viewStatusAddition> <searchControlAddition> <name>КомпоновщикНастроекНастройкиПорядокУправлениеПоиском</name> - <id>291</id> + <id>297</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиПорядокУправлениеПоискомРасширеннаяПодсказка</name> - <id>293</id> + <id>299</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2410,7 +2423,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПорядокУправлениеПоискомКонтекстноеМеню</name> - <id>292</id> + <id>298</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -2420,8 +2433,8 @@ </extInfo> </searchControlAddition> <extendedTooltip> - <name>КомпоновщикНастроекНастройкиПорядокРасширеннаяПодсказка</name> - <id>120</id> + <name>КомпоновщикНастроекНастройкиПорядокExtendedTooltip</name> + <id>172</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2431,7 +2444,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПорядокКонтекстноеМеню</name> - <id>118</id> + <id>76</id> <autoFill>true</autoFill> </contextMenu> <autoFill>true</autoFill> @@ -2470,8 +2483,8 @@ <value>Страница сортировки</value> - НастройкиПорядкаРасширеннаяПодсказка - 112 + НастройкиПорядкаExtendedTooltip + 170 Label true true @@ -2483,14 +2496,15 @@ LeftNarrowest auto + false ОтключенныеНастройкиПорядка - 121 + 78 НадписьЛокальногоПорядка - 123 + 79 <key>ru</key> <value>В текущем элементе сортировка не установлена. @@ -2503,8 +2517,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>НадписьЛокальногоПорядкаРасширеннаяПодсказка</name> - <id>125</id> + <name>НадписьЛокальногоПорядкаExtendedTooltip</name> + <id>174</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2514,7 +2528,7 @@ </extendedTooltip> <contextMenu> <name>НадписьЛокальногоПорядкаКонтекстноеМеню</name> - <id>124</id> + <id>80</id> <autoFill>true</autoFill> </contextMenu> <type>Label</type> @@ -2529,7 +2543,7 @@ </items> <items xsi:type="form:Decoration"> <name>ПереходКПорядкуОтчета</name> - <id>126</id> + <id>81</id> <title> <key>ru</key> <value>Нажмите здесь для перехода к сортировке отчета.</value> @@ -2540,8 +2554,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ПереходКПорядкуОтчетаРасширеннаяПодсказка</name> - <id>128</id> + <name>ПереходКПорядкуОтчетаExtendedTooltip</name> + <id>175</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2551,7 +2565,7 @@ </extendedTooltip> <contextMenu> <name>ПереходКПорядкуОтчетаКонтекстноеМеню</name> - <id>127</id> + <id>82</id> <autoFill>true</autoFill> </contextMenu> <type>Label</type> @@ -2576,8 +2590,8 @@ <value>Страница отключенной сортировки</value> - ОтключенныеНастройкиПорядкаРасширеннаяПодсказка - 122 + ОтключенныеНастройкиПорядкаExtendedTooltip + 173 Label true true @@ -2589,14 +2603,15 @@ Vertical auto + false НедоступныеНастройкиПорядка - 129 + 83 НадписьНедоступногоПорядка - 131 + 84 <key>ru</key> <value>У текущего элемента не может быть установлена сортировка. @@ -2608,8 +2623,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>НадписьНедоступногоПорядкаРасширеннаяПодсказка</name> - <id>133</id> + <name>НадписьНедоступногоПорядкаExtendedTooltip</name> + <id>177</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2619,7 +2634,7 @@ </extendedTooltip> <contextMenu> <name>НадписьНедоступногоПорядкаКонтекстноеМеню</name> - <id>132</id> + <id>85</id> <autoFill>true</autoFill> </contextMenu> <type>Label</type> @@ -2633,8 +2648,8 @@ </extInfo> </items> <items xsi:type="form:Decoration"> - <name>ПереходКПорядкуОтчетаОтНедоступногоПорядка</name> - <id>134</id> + <name>ПереходКПорядкуОтчета1</name> + <id>86</id> <title> <key>ru</key> <value>Нажмите здесь для перехода к сортировке отчета.</value> @@ -2645,8 +2660,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ПереходКПорядкуОтчетаОтНедоступногоПорядкаРасширеннаяПодсказка</name> - <id>136</id> + <name>ПереходКПорядкуОтчета1ExtendedTooltip</name> + <id>178</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2655,8 +2670,8 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ПереходКПорядкуОтчетаОтНедоступногоПорядкаКонтекстноеМеню</name> - <id>135</id> + <name>ПереходКПорядкуОтчета1КонтекстноеМеню</name> + <id>87</id> <autoFill>true</autoFill> </contextMenu> <type>Label</type> @@ -2681,8 +2696,8 @@ <value>Страница недоступной сортировки</value> - НедоступныеНастройкиПорядкаРасширеннаяПодсказка - 130 + НедоступныеНастройкиПорядкаExtendedTooltip + 176 Label true true @@ -2694,6 +2709,7 @@ Vertical auto + false true @@ -2706,8 +2722,8 @@ Страницы сортировки - СтраницыПорядкаРасширеннаяПодсказка - 110 + СтраницыПорядкаExtendedTooltip + 169 Label true true @@ -2730,8 +2746,8 @@ Сортировка - СтраницаПорядкаРасширеннаяПодсказка - 105 + СтраницаПорядкаExtendedTooltip + 167 Label true true @@ -2746,14 +2762,15 @@ Vertical auto + false СтраницаУсловногоОформления - 137 + 88 ЛокальноеУсловноеОформление - 139 + 89 <key>ru</key> <value>Текущий элемент имеет собственное условное оформление (для оформления записей, выводимых в элементе)</value> @@ -2772,8 +2789,8 @@ <name>ЛокальноеУсловноеОформлениеПриИзменении</name> </handlers> <extendedTooltip> - <name>ЛокальноеУсловноеОформлениеРасширеннаяПодсказка</name> - <id>141</id> + <name>ЛокальноеУсловноеОформлениеExtendedTooltip</name> + <id>180</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2783,7 +2800,7 @@ </extendedTooltip> <contextMenu> <name>ЛокальноеУсловноеОформлениеКонтекстноеМеню</name> - <id>140</id> + <id>90</id> <autoFill>true</autoFill> </contextMenu> <type>CheckBoxField</type> @@ -2795,13 +2812,13 @@ </items> <items xsi:type="form:FormGroup"> <name>СтраницыУсловногоОформления</name> - <id>142</id> + <id>91</id> <items xsi:type="form:FormGroup"> <name>НастройкиУсловногоОформления</name> - <id>144</id> + <id>92</id> <items xsi:type="form:Table"> <name>КомпоновщикНастроекНастройкиУсловноеОформление</name> - <id>146</id> + <id>93</id> <title> <key>ru</key> <value>Таблица условного оформления</value> @@ -2817,16 +2834,16 @@ <titleLocation>None</titleLocation> <autoCommandBar> <name>КомпоновщикНастроекНастройкиУсловноеОформлениеКоманднаяПанель</name> - <id>148</id> + <id>95</id> <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> <searchStringAddition> <name>КомпоновщикНастроекНастройкиУсловноеОформлениеСтрокаПоиска</name> - <id>294</id> + <id>300</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиУсловноеОформлениеСтрокаПоискаРасширеннаяПодсказка</name> - <id>296</id> + <id>302</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2836,7 +2853,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиУсловноеОформлениеСтрокаПоискаКонтекстноеМеню</name> - <id>295</id> + <id>301</id> <autoFill>true</autoFill> </contextMenu> <source>КомпоновщикНастроекНастройкиУсловноеОформление</source> @@ -2846,10 +2863,10 @@ </searchStringAddition> <viewStatusAddition> <name>КомпоновщикНастроекНастройкиУсловноеОформлениеСостояниеПросмотра</name> - <id>297</id> + <id>303</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиУсловноеОформлениеСостояниеПросмотраРасширеннаяПодсказка</name> - <id>299</id> + <id>305</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2859,7 +2876,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиУсловноеОформлениеСостояниеПросмотраКонтекстноеМеню</name> - <id>298</id> + <id>304</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> @@ -2870,10 +2887,10 @@ </viewStatusAddition> <searchControlAddition> <name>КомпоновщикНастроекНастройкиУсловноеОформлениеУправлениеПоиском</name> - <id>300</id> + <id>306</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиУсловноеОформлениеУправлениеПоискомРасширеннаяПодсказка</name> - <id>302</id> + <id>308</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2883,7 +2900,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиУсловноеОформлениеУправлениеПоискомКонтекстноеМеню</name> - <id>301</id> + <id>307</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -2893,8 +2910,8 @@ </extInfo> </searchControlAddition> <extendedTooltip> - <name>КомпоновщикНастроекНастройкиУсловноеОформлениеРасширеннаяПодсказка</name> - <id>149</id> + <name>КомпоновщикНастроекНастройкиУсловноеОформлениеExtendedTooltip</name> + <id>183</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2904,7 +2921,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиУсловноеОформлениеКонтекстноеМеню</name> - <id>147</id> + <id>94</id> <autoFill>true</autoFill> </contextMenu> <autoFill>true</autoFill> @@ -2944,8 +2961,8 @@ <value>Страница условного оформления</value> - НастройкиУсловногоОформленияРасширеннаяПодсказка - 145 + НастройкиУсловногоОформленияExtendedTooltip + 182 Label true true @@ -2956,14 +2973,15 @@ Page auto + false ОтключенныеНастройкиУсловногоОформления - 150 + 96 НадписьЛокальногоУсловногоОформления - 152 + 97 <key>ru</key> <value>В текущем элементе условное оформление не установлено. @@ -2976,8 +2994,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>НадписьЛокальногоУсловногоОформленияРасширеннаяПодсказка</name> - <id>154</id> + <name>НадписьЛокальногоУсловногоОформленияExtendedTooltip</name> + <id>185</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -2987,7 +3005,7 @@ </extendedTooltip> <contextMenu> <name>НадписьЛокальногоУсловногоОформленияКонтекстноеМеню</name> - <id>153</id> + <id>98</id> <autoFill>true</autoFill> </contextMenu> <type>Label</type> @@ -3002,7 +3020,7 @@ </items> <items xsi:type="form:Decoration"> <name>ПереходКУсловномуОформлениюОтчета</name> - <id>155</id> + <id>99</id> <title> <key>ru</key> <value>Нажмите здесь для перехода к условному оформлению отчета.</value> @@ -3013,8 +3031,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ПереходКУсловномуОформлениюОтчетаРасширеннаяПодсказка</name> - <id>157</id> + <name>ПереходКУсловномуОформлениюОтчетаExtendedTooltip</name> + <id>186</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3024,7 +3042,7 @@ </extendedTooltip> <contextMenu> <name>ПереходКУсловномуОформлениюОтчетаКонтекстноеМеню</name> - <id>156</id> + <id>100</id> <autoFill>true</autoFill> </contextMenu> <type>Label</type> @@ -3049,8 +3067,8 @@ <value>Страница отключенного условного оформления</value> - ОтключенныеНастройкиУсловногоОформленияРасширеннаяПодсказка - 151 + ОтключенныеНастройкиУсловногоОформленияExtendedTooltip + 184 Label true true @@ -3062,14 +3080,15 @@ Vertical auto + false НедоступныеНастройкиУсловногоОформления - 158 + 101 НадписьНедоступногоУсловногоОформления - 160 + 102 <key>ru</key> <value>У текущего элемента не может быть установлено условное оформление. @@ -3081,8 +3100,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>НадписьНедоступногоУсловногоОформленияРасширеннаяПодсказка</name> - <id>162</id> + <name>НадписьНедоступногоУсловногоОформленияExtendedTooltip</name> + <id>188</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3092,7 +3111,7 @@ </extendedTooltip> <contextMenu> <name>НадписьНедоступногоУсловногоОформленияКонтекстноеМеню</name> - <id>161</id> + <id>103</id> <autoFill>true</autoFill> </contextMenu> <type>Label</type> @@ -3106,8 +3125,8 @@ </extInfo> </items> <items xsi:type="form:Decoration"> - <name>ПереходКУсловномуОформлениюОтчетаОтНедоступногоУсловногоОформления</name> - <id>163</id> + <name>ПереходКУсловномуОформлениюОтчета1</name> + <id>104</id> <title> <key>ru</key> <value>Нажмите здесь для перехода к условному оформлению отчета.</value> @@ -3118,8 +3137,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ПереходКУсловномуОформлениюОтчетаОтНедоступногоУсловногоОформленияРасширеннаяПодсказка</name> - <id>165</id> + <name>ПереходКУсловномуОформлениюОтчета1ExtendedTooltip</name> + <id>189</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3128,8 +3147,8 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ПереходКУсловномуОформлениюОтчетаОтНедоступногоУсловногоОформленияКонтекстноеМеню</name> - <id>164</id> + <name>ПереходКУсловномуОформлениюОтчета1КонтекстноеМеню</name> + <id>105</id> <autoFill>true</autoFill> </contextMenu> <type>Label</type> @@ -3154,8 +3173,8 @@ <value>Страница недоступного условного оформления</value> - НедоступныеНастройкиУсловногоОформленияРасширеннаяПодсказка - 159 + НедоступныеНастройкиУсловногоОформленияExtendedTooltip + 187 Label true true @@ -3167,6 +3186,7 @@ Vertical auto + false true @@ -3179,8 +3199,8 @@ Страницы условного оформления - СтраницыУсловногоОформленияРасширеннаяПодсказка - 143 + СтраницыУсловногоОформленияExtendedTooltip + 181 Label true true @@ -3203,8 +3223,8 @@ Условное оформление - СтраницаУсловногоОформленияРасширеннаяПодсказка - 138 + СтраницаУсловногоОформленияExtendedTooltip + 179 Label true true @@ -3219,14 +3239,15 @@ Vertical auto + false СтраницаПараметровВывода - 166 + 106 ЛокальныеПараметрыВывода - 168 + 107 <key>ru</key> <value>Текущий элемент имеет собственные дополнительные настройки</value> @@ -3245,8 +3266,8 @@ <name>ЛокальныеПараметрыВыводаПриИзменении</name> </handlers> <extendedTooltip> - <name>ЛокальныеПараметрыВыводаРасширеннаяПодсказка</name> - <id>170</id> + <name>ЛокальныеПараметрыВыводаExtendedTooltip</name> + <id>191</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3256,7 +3277,7 @@ </extendedTooltip> <contextMenu> <name>ЛокальныеПараметрыВыводаКонтекстноеМеню</name> - <id>169</id> + <id>108</id> <autoFill>true</autoFill> </contextMenu> <type>CheckBoxField</type> @@ -3268,13 +3289,13 @@ </items> <items xsi:type="form:FormGroup"> <name>СтраницыПараметровВывода</name> - <id>171</id> + <id>109</id> <items xsi:type="form:FormGroup"> <name>НастройкиПараметровВывода</name> - <id>173</id> + <id>110</id> <items xsi:type="form:Table"> <name>КомпоновщикНастроекНастройкиПараметрыВывода</name> - <id>175</id> + <id>111</id> <title> <key>ru</key> <value>Таблица дополнительных настроек</value> @@ -3290,16 +3311,16 @@ <titleLocation>None</titleLocation> <autoCommandBar> <name>КомпоновщикНастроекНастройкиПараметрыВыводаКоманднаяПанель</name> - <id>177</id> + <id>113</id> <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> <searchStringAddition> <name>КомпоновщикНастроекНастройкиПараметрыВыводаСтрокаПоиска</name> - <id>303</id> + <id>309</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиПараметрыВыводаСтрокаПоискаРасширеннаяПодсказка</name> - <id>305</id> + <id>311</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3309,7 +3330,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПараметрыВыводаСтрокаПоискаКонтекстноеМеню</name> - <id>304</id> + <id>310</id> <autoFill>true</autoFill> </contextMenu> <source>КомпоновщикНастроекНастройкиПараметрыВывода</source> @@ -3319,10 +3340,10 @@ </searchStringAddition> <viewStatusAddition> <name>КомпоновщикНастроекНастройкиПараметрыВыводаСостояниеПросмотра</name> - <id>306</id> + <id>312</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиПараметрыВыводаСостояниеПросмотраРасширеннаяПодсказка</name> - <id>308</id> + <id>314</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3332,7 +3353,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПараметрыВыводаСостояниеПросмотраКонтекстноеМеню</name> - <id>307</id> + <id>313</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> @@ -3343,10 +3364,10 @@ </viewStatusAddition> <searchControlAddition> <name>КомпоновщикНастроекНастройкиПараметрыВыводаУправлениеПоиском</name> - <id>309</id> + <id>315</id> <extendedTooltip> <name>КомпоновщикНастроекНастройкиПараметрыВыводаУправлениеПоискомРасширеннаяПодсказка</name> - <id>311</id> + <id>317</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3356,7 +3377,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПараметрыВыводаУправлениеПоискомКонтекстноеМеню</name> - <id>310</id> + <id>316</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -3366,8 +3387,8 @@ </extInfo> </searchControlAddition> <extendedTooltip> - <name>КомпоновщикНастроекНастройкиПараметрыВыводаРасширеннаяПодсказка</name> - <id>178</id> + <name>КомпоновщикНастроекНастройкиПараметрыВыводаExtendedTooltip</name> + <id>194</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3377,7 +3398,7 @@ </extendedTooltip> <contextMenu> <name>КомпоновщикНастроекНастройкиПараметрыВыводаКонтекстноеМеню</name> - <id>176</id> + <id>112</id> <autoFill>true</autoFill> </contextMenu> <representation>Tree</representation> @@ -3417,8 +3438,8 @@ <value>Страница дополнительных настроек</value> - НастройкиПараметровВыводаРасширеннаяПодсказка - 174 + НастройкиПараметровВыводаExtendedTooltip + 193 Label true true @@ -3429,14 +3450,15 @@ Page auto + false ОтключенныеНастройкиПараметровВывода - 179 + 114 НадписьЛокальныхПараметровВывода - 181 + 115 <key>ru</key> <value>В текущем элементе дополнительные настройки не установлены. @@ -3449,8 +3471,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>НадписьЛокальныхПараметровВыводаРасширеннаяПодсказка</name> - <id>183</id> + <name>НадписьЛокальныхПараметровВыводаExtendedTooltip</name> + <id>196</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3460,7 +3482,7 @@ </extendedTooltip> <contextMenu> <name>НадписьЛокальныхПараметровВыводаКонтекстноеМеню</name> - <id>182</id> + <id>116</id> <autoFill>true</autoFill> </contextMenu> <type>Label</type> @@ -3475,7 +3497,7 @@ </items> <items xsi:type="form:Decoration"> <name>ПереходКПараметрамВыводаОтчета</name> - <id>184</id> + <id>117</id> <title> <key>ru</key> <value>Нажмите здесь для перехода к дополнительным настройкам отчета.</value> @@ -3486,8 +3508,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ПереходКПараметрамВыводаОтчетаРасширеннаяПодсказка</name> - <id>186</id> + <name>ПереходКПараметрамВыводаОтчетаExtendedTooltip</name> + <id>197</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3497,7 +3519,7 @@ </extendedTooltip> <contextMenu> <name>ПереходКПараметрамВыводаОтчетаКонтекстноеМеню</name> - <id>185</id> + <id>118</id> <autoFill>true</autoFill> </contextMenu> <type>Label</type> @@ -3522,8 +3544,8 @@ <value>Страница отключенных дополнительных настроек</value> - ОтключенныеНастройкиПараметровВыводаРасширеннаяПодсказка - 180 + ОтключенныеНастройкиПараметровВыводаExtendedTooltip + 195 Label true true @@ -3535,14 +3557,15 @@ Vertical auto + false НедоступныеНастройкиПараметровВывода - 187 + 119 НадписьНедоступныхПараметровВывода - 189 + 120 <key>ru</key> <value>У текущего элемента не могут быть установлены дополнительные настройки. @@ -3554,8 +3577,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>НадписьНедоступныхПараметровВыводаРасширеннаяПодсказка</name> - <id>191</id> + <name>НадписьНедоступныхПараметровВыводаExtendedTooltip</name> + <id>199</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3565,7 +3588,7 @@ </extendedTooltip> <contextMenu> <name>НадписьНедоступныхПараметровВыводаКонтекстноеМеню</name> - <id>190</id> + <id>121</id> <autoFill>true</autoFill> </contextMenu> <type>Label</type> @@ -3579,8 +3602,8 @@ </extInfo> </items> <items xsi:type="form:Decoration"> - <name>ПереходКПараметрамВыводаОтчетаОтНедоступныхПараметровВывода</name> - <id>192</id> + <name>ПереходКПараметрамВыводаОтчета1</name> + <id>122</id> <title> <key>ru</key> <value>Нажмите здесь для перехода к дополнительным настройкам отчета.</value> @@ -3591,8 +3614,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ПереходКПараметрамВыводаОтчетаОтНедоступныхПараметровВыводаРасширеннаяПодсказка</name> - <id>194</id> + <name>ПереходКПараметрамВыводаОтчета1ExtendedTooltip</name> + <id>200</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -3601,8 +3624,8 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ПереходКПараметрамВыводаОтчетаОтНедоступныхПараметровВыводаКонтекстноеМеню</name> - <id>193</id> + <name>ПереходКПараметрамВыводаОтчета1КонтекстноеМеню</name> + <id>123</id> <autoFill>true</autoFill> </contextMenu> <type>Label</type> @@ -3627,8 +3650,8 @@ <value>Страница недоступных дополнительных настроек</value> - НедоступныеНастройкиПараметровВыводаРасширеннаяПодсказка - 188 + НедоступныеНастройкиПараметровВыводаExtendedTooltip + 198 Label true true @@ -3640,6 +3663,7 @@ Vertical auto + false true @@ -3652,8 +3676,8 @@ Страницы дополнительных настроек - СтраницыПараметровВыводаРасширеннаяПодсказка - 172 + СтраницыПараметровВыводаExtendedTooltip + 192 Label true true @@ -3676,8 +3700,8 @@ Дополнительные настройки - СтраницаПараметровВыводаРасширеннаяПодсказка - 167 + СтраницаПараметровВыводаExtendedTooltip + 190 Label true true @@ -3692,6 +3716,7 @@ Vertical auto + false true @@ -3704,8 +3729,8 @@ Группа настроек - СтраницыНастроекРасширеннаяПодсказка - 6 + СтраницыНастроекExtendedTooltip + 131 Label true true @@ -3724,10 +3749,91 @@ ФормаКоманднаяПанель -1 + + ЗавершитьРедактирование + 124 + true + true + + true + + + ЗавершитьРедактированиеExtendedTooltip + 127 + Label + true + true + + Left + + + Form.Command.ЗавершитьРедактирование + Auto + true + true + true + UserCmds + Auto + + + ФормаЗакончитьРедактирование + 125 + true + + true + + + ФормаЗакончитьРедактированиеExtendedTooltip + 128 + Label + true + true + + Left + + + Form.StandardCommand.EndEdit + Normal + Auto + true + true + UserCmds + Auto + + + ФормаОтмена + 126 + true + true + + true + + + ФормаОтменаExtendedTooltip + 129 + Label + true + true + + Left + + + Form.StandardCommand.CancelEdit + Normal + Auto + true + true + UserCmds + Auto + Right true - DontBlock + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner true true true @@ -3741,7 +3847,7 @@ Отчет 1 - ReportObject.АнализЖурналаРегистрации + ReportObject true @@ -3836,6 +3942,41 @@ true + + НастройкиОтчета + + <key>ru</key> + <value>Настройки отчета</value> + + 7 + + + true + + + + + ЗавершитьРедактирование + + <key>ru</key> + <value>Завершить редактирование</value> + + 1 + + ru + Завершить редактирование + + + true + + + + ЗавершитьРедактирование + + + DontUse + Auto + diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаВарианта/Module.bsl b/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаВариантаОтчета/Module.bsl similarity index 80% rename from SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаВарианта/Module.bsl rename to SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаВариантаОтчета/Module.bsl index 1b39839e6..dfec6203b 100644 --- a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаВарианта/Module.bsl +++ b/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаВариантаОтчета/Module.bsl @@ -1,215 +1,13 @@ -#Область ОбработчикиСобытийЭлементовФормы +//////////////////////////////////////////////////////////////////////////////// +// Стандартный функционал -&НаКлиенте -Процедура КомпоновщикНастроекНастройкиПриАктивизацииПоля(Элемент) - - Перем ВыбраннаяСтраница; - - Если Элементы.КомпоновщикНастроекНастройки.ТекущийЭлемент.Имя = "КомпоновщикНастроекНастройкиНаличиеВыбора" Тогда - - ВыбраннаяСтраница = Элементы.СтраницаПолейВыбора; - - ИначеЕсли Элементы.КомпоновщикНастроекНастройки.ТекущийЭлемент.Имя = "КомпоновщикНастроекНастройкиНаличиеОтбора" Тогда - - ВыбраннаяСтраница = Элементы.СтраницаОтбора; - - ИначеЕсли Элементы.КомпоновщикНастроекНастройки.ТекущийЭлемент.Имя = "КомпоновщикНастроекНастройкиНаличиеПорядка" Тогда - - ВыбраннаяСтраница = Элементы.СтраницаПорядка; - - ИначеЕсли Элементы.КомпоновщикНастроекНастройки.ТекущийЭлемент.Имя = "КомпоновщикНастроекНастройкиНаличиеУсловногоОформления" Тогда - - ВыбраннаяСтраница = Элементы.СтраницаУсловногоОформления; - - ИначеЕсли Элементы.КомпоновщикНастроекНастройки.ТекущийЭлемент.Имя = "КомпоновщикНастроекНастройкиНаличиеПараметровВывода" Тогда - - ВыбраннаяСтраница = Элементы.СтраницаПараметровВывода; - - КонецЕсли; - - Если ВыбраннаяСтраница <> Неопределено Тогда - - Элементы.СтраницыНастроек.ТекущаяСтраница = ВыбраннаяСтраница; - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура КомпоновщикНастроекНастройкиПриАктивизацииСтроки(Элемент) - - ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока); - ТипЭлемента = ТипЗнч(ЭлементСтруктуры); - - Если ТипЭлемента = Неопределено - ИЛИ ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") - ИЛИ ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") Тогда - - ПоляГруппировкиНедоступны(); - ВыбранныеПоляНедоступны(); - ОтборНедоступен(); - ПорядокНедоступен(); - УсловноеОформлениеНедоступно(); - ПараметрыВыводаНедоступны(); - - ИначеЕсли ТипЭлемента = Тип("НастройкиКомпоновкиДанных") - ИЛИ ТипЭлемента = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда - - ПоляГруппировкиНедоступны(); - - ЛокальныеВыбранныеПоля = Истина; - Элементы.ЛокальныеВыбранныеПоля.ТолькоПросмотр = Истина; - Элементы.СтраницыПолейВыбора.ТекущаяСтраница = Элементы.НастройкиВыбранныхПолей; - - ЛокальныйОтбор = Истина; - Элементы.ЛокальныйОтбор.ТолькоПросмотр = Истина; - Элементы.СтраницыОтбора.ТекущаяСтраница = Элементы.НастройкиОтбора; - - ЛокальныйПорядок = Истина; - Элементы.ЛокальныйПорядок.ТолькоПросмотр = Истина; - Элементы.СтраницыПорядка.ТекущаяСтраница = Элементы.НастройкиПорядка; - - ЛокальноеУсловноеОформление = Истина; - Элементы.ЛокальноеУсловноеОформление.ТолькоПросмотр = Истина; - Элементы.СтраницыУсловногоОформления.ТекущаяСтраница = Элементы.НастройкиУсловногоОформления; - - ЛокальныеПараметрыВывода = Истина; - Элементы.ЛокальныеПараметрыВывода.ТолькоПросмотр = Истина; - Элементы.СтраницыПараметровВывода.ТекущаяСтраница = Элементы.НастройкиПараметровВывода; - - ИначеЕсли ТипЭлемента = Тип("ГруппировкаКомпоновкиДанных") - ИЛИ ТипЭлемента = Тип("ГруппировкаТаблицыКомпоновкиДанных") - ИЛИ ТипЭлемента = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда - - Элементы.СтраницыПолейГруппировки.ТекущаяСтраница = Элементы.НастройкиПолейГруппировки; - - ВыбранныеПоляДоступны(ЭлементСтруктуры); - ОтборДоступен(ЭлементСтруктуры); - ПорядокДоступен(ЭлементСтруктуры); - УсловноеОформлениеДоступно(ЭлементСтруктуры); - ПараметрыВыводаДоступны(ЭлементСтруктуры); - - ИначеЕсли ТипЭлемента = Тип("ТаблицаКомпоновкиДанных") - ИЛИ ТипЭлемента = Тип("ДиаграммаКомпоновкиДанных") Тогда - - ПоляГруппировкиНедоступны(); - ВыбранныеПоляДоступны(ЭлементСтруктуры); - ОтборНедоступен(); - ПорядокНедоступен(); - УсловноеОформлениеДоступно(ЭлементСтруктуры); - ПараметрыВыводаДоступны(ЭлементСтруктуры); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПерейтиКОтчету(Элемент) - - ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока); - НастройкиЭлемента = Отчет.КомпоновщикНастроек.Настройки.НастройкиЭлемента(ЭлементСтруктуры); - Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока = Отчет.КомпоновщикНастроек.Настройки.ПолучитьИдентификаторПоОбъекту(НастройкиЭлемента); - -КонецПроцедуры - -&НаКлиенте -Процедура ЛокальныеВыбранныеПоляПриИзменении(Элемент) - - Если ЛокальныеВыбранныеПоля Тогда - - Элементы.СтраницыПолейВыбора.ТекущаяСтраница = Элементы.НастройкиВыбранныхПолей; - - Иначе - - Элементы.СтраницыПолейВыбора.ТекущаяСтраница = Элементы.ОтключенныеНастройкиВыбранныхПолей; - - ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока); - Отчет.КомпоновщикНастроек.Настройки.ОчиститьВыборЭлемента(ЭлементСтруктуры); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ЛокальныйОтборПриИзменении(Элемент) - - Если ЛокальныйОтбор Тогда - - Элементы.СтраницыОтбора.ТекущаяСтраница = Элементы.НастройкиОтбора; - - Иначе - - Элементы.СтраницыОтбора.ТекущаяСтраница = Элементы.ОтключенныеНастройкиОтбора; - - ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока); - Отчет.КомпоновщикНастроек.Настройки.ОчиститьОтборЭлемента(ЭлементСтруктуры); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ЛокальныйПорядокПриИзменении(Элемент) - - Если ЛокальныйПорядок Тогда - - Элементы.СтраницыПорядка.ТекущаяСтраница = Элементы.НастройкиПорядка; - - Иначе - - Элементы.СтраницыПорядка.ТекущаяСтраница = Элементы.ОтключенныеНастройкиПорядка; - - ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока); - Отчет.КомпоновщикНастроек.Настройки.ОчиститьПорядокЭлемента(ЭлементСтруктуры); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ЛокальноеУсловноеОформлениеПриИзменении(Элемент) - - Если ЛокальноеУсловноеОформление Тогда - - Элементы.СтраницыУсловногоОформления.ТекущаяСтраница = Элементы.НастройкиУсловногоОформления; - - Иначе - - Элементы.СтраницыУсловногоОформления.ТекущаяСтраница = Элементы.ОтключенныеНастройкиУсловногоОформления; - - ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока); - Отчет.КомпоновщикНастроек.Настройки.ОчиститьУсловноеОформлениеЭлемента(ЭлементСтруктуры); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ЛокальныеПараметрыВыводаПриИзменении(Элемент) - - Если ЛокальныеПараметрыВывода Тогда - - Элементы.СтраницыПараметровВывода.ТекущаяСтраница = Элементы.НастройкиПараметровВывода; - - Иначе - - Элементы.СтраницыПараметровВывода.ТекущаяСтраница = Элементы.ОтключенныеНастройкиПараметровВывода; - - ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока); - Отчет.КомпоновщикНастроек.Настройки.ОчиститьПараметрыВыводаЭлемента(ЭлементСтруктуры); - КонецЕсли; - -КонецПроцедуры - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции +#Область СтандартныйФункционал &НаКлиенте Процедура ПоляГруппировкиНедоступны() Элементы.СтраницыПолейГруппировки.ТекущаяСтраница = Элементы.НедоступныеНастройкиПолейГруппировки; - + КонецПроцедуры &НаКлиенте @@ -352,4 +150,266 @@ КонецПроцедуры -#КонецОбласти \ No newline at end of file +&НаКлиенте +Процедура КомпоновщикНастроекНастройкиПриАктивизацииПоля(Элемент) + + Перем ВыбраннаяСтраница; + + Если Элементы.КомпоновщикНастроекНастройки.ТекущийЭлемент.Имя = "КомпоновщикНастроекНастройкиНаличиеВыбора" Тогда + + ВыбраннаяСтраница = Элементы.СтраницаПолейВыбора; + + ИначеЕсли Элементы.КомпоновщикНастроекНастройки.ТекущийЭлемент.Имя = "КомпоновщикНастроекНастройкиНаличиеОтбора" Тогда + + ВыбраннаяСтраница = Элементы.СтраницаОтбора; + + ИначеЕсли Элементы.КомпоновщикНастроекНастройки.ТекущийЭлемент.Имя = "КомпоновщикНастроекНастройкиНаличиеПорядка" Тогда + + ВыбраннаяСтраница = Элементы.СтраницаПорядка; + + ИначеЕсли Элементы.КомпоновщикНастроекНастройки.ТекущийЭлемент.Имя = "КомпоновщикНастроекНастройкиНаличиеУсловногоОформления" Тогда + + ВыбраннаяСтраница = Элементы.СтраницаУсловногоОформления; + + ИначеЕсли Элементы.КомпоновщикНастроекНастройки.ТекущийЭлемент.Имя = "КомпоновщикНастроекНастройкиНаличиеПараметровВывода" Тогда + + ВыбраннаяСтраница = Элементы.СтраницаПараметровВывода; + + КонецЕсли; + + Если ВыбраннаяСтраница <> Неопределено Тогда + + Элементы.СтраницыНастроек.ТекущаяСтраница = ВыбраннаяСтраница; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура КомпоновщикНастроекНастройкиПриАктивизацииСтроки(Элемент) + + ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока); + ТипЭлемента = ТипЗнч(ЭлементСтруктуры); + + Если ТипЭлемента = Неопределено + Или ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") + Или ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") Тогда + + ПоляГруппировкиНедоступны(); + ВыбранныеПоляНедоступны(); + ОтборНедоступен(); + ПорядокНедоступен(); + УсловноеОформлениеНедоступно(); + ПараметрыВыводаНедоступны(); + + ИначеЕсли ТипЭлемента = Тип("НастройкиКомпоновкиДанных") + Или ТипЭлемента = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + + ПоляГруппировкиНедоступны(); + + ЛокальныеВыбранныеПоля = Истина; + Элементы.ЛокальныеВыбранныеПоля.ТолькоПросмотр = Истина; + Элементы.СтраницыПолейВыбора.ТекущаяСтраница = Элементы.НастройкиВыбранныхПолей; + + ЛокальныйОтбор = Истина; + Элементы.ЛокальныйОтбор.ТолькоПросмотр = Истина; + Элементы.СтраницыОтбора.ТекущаяСтраница = Элементы.НастройкиОтбора; + + ЛокальныйПорядок = Истина; + Элементы.ЛокальныйПорядок.ТолькоПросмотр = Истина; + Элементы.СтраницыПорядка.ТекущаяСтраница = Элементы.НастройкиПорядка; + + ЛокальноеУсловноеОформление = Истина; + Элементы.ЛокальноеУсловноеОформление.ТолькоПросмотр = Истина; + Элементы.СтраницыУсловногоОформления.ТекущаяСтраница = Элементы.НастройкиУсловногоОформления; + + ЛокальныеПараметрыВывода = Истина; + Элементы.ЛокальныеПараметрыВывода.ТолькоПросмотр = Истина; + Элементы.СтраницыПараметровВывода.ТекущаяСтраница = Элементы.НастройкиПараметровВывода; + + ИначеЕсли ТипЭлемента = Тип("ГруппировкаКомпоновкиДанных") + Или ТипЭлемента = Тип("ГруппировкаТаблицыКомпоновкиДанных") + Или ТипЭлемента = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда + + Элементы.СтраницыПолейГруппировки.ТекущаяСтраница = Элементы.НастройкиПолейГруппировки; + + ВыбранныеПоляДоступны(ЭлементСтруктуры); + ОтборДоступен(ЭлементСтруктуры); + ПорядокДоступен(ЭлементСтруктуры); + УсловноеОформлениеДоступно(ЭлементСтруктуры); + ПараметрыВыводаДоступны(ЭлементСтруктуры); + + ИначеЕсли ТипЭлемента = Тип("ТаблицаКомпоновкиДанных") + Или ТипЭлемента = Тип("ДиаграммаКомпоновкиДанных") Тогда + + ПоляГруппировкиНедоступны(); + ВыбранныеПоляДоступны(ЭлементСтруктуры); + ОтборНедоступен(); + ПорядокНедоступен(); + УсловноеОформлениеДоступно(ЭлементСтруктуры); + ПараметрыВыводаДоступны(ЭлементСтруктуры); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПерейтиКОтчету(Элемент) + + ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока); + НастройкиЭлемента = Отчет.КомпоновщикНастроек.Настройки.НастройкиЭлемента(ЭлементСтруктуры); + Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока = Отчет.КомпоновщикНастроек.Настройки.ПолучитьИдентификаторПоОбъекту(НастройкиЭлемента); + +КонецПроцедуры + +&НаКлиенте +Процедура ЛокальныеВыбранныеПоляПриИзменении(Элемент) + + Если ЛокальныеВыбранныеПоля Тогда + + Элементы.СтраницыПолейВыбора.ТекущаяСтраница = Элементы.НастройкиВыбранныхПолей; + + Иначе + + Элементы.СтраницыПолейВыбора.ТекущаяСтраница = Элементы.ОтключенныеНастройкиВыбранныхПолей; + + ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока); + Отчет.КомпоновщикНастроек.Настройки.ОчиститьВыборЭлемента(ЭлементСтруктуры); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЛокальныйОтборПриИзменении(Элемент) + + Если ЛокальныйОтбор Тогда + + Элементы.СтраницыОтбора.ТекущаяСтраница = Элементы.НастройкиОтбора; + + Иначе + + Элементы.СтраницыОтбора.ТекущаяСтраница = Элементы.ОтключенныеНастройкиОтбора; + + ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока); + Отчет.КомпоновщикНастроек.Настройки.ОчиститьОтборЭлемента(ЭлементСтруктуры); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЛокальныйПорядокПриИзменении(Элемент) + + Если ЛокальныйПорядок Тогда + + Элементы.СтраницыПорядка.ТекущаяСтраница = Элементы.НастройкиПорядка; + + Иначе + + Элементы.СтраницыПорядка.ТекущаяСтраница = Элементы.ОтключенныеНастройкиПорядка; + + ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока); + Отчет.КомпоновщикНастроек.Настройки.ОчиститьПорядокЭлемента(ЭлементСтруктуры); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЛокальноеУсловноеОформлениеПриИзменении(Элемент) + + Если ЛокальноеУсловноеОформление Тогда + + Элементы.СтраницыУсловногоОформления.ТекущаяСтраница = Элементы.НастройкиУсловногоОформления; + + Иначе + + Элементы.СтраницыУсловногоОформления.ТекущаяСтраница = Элементы.ОтключенныеНастройкиУсловногоОформления; + + ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока); + Отчет.КомпоновщикНастроек.Настройки.ОчиститьУсловноеОформлениеЭлемента(ЭлементСтруктуры); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЛокальныеПараметрыВыводаПриИзменении(Элемент) + + Если ЛокальныеПараметрыВывода Тогда + + Элементы.СтраницыПараметровВывода.ТекущаяСтраница = Элементы.НастройкиПараметровВывода; + + Иначе + + Элементы.СтраницыПараметровВывода.ТекущаяСтраница = Элементы.ОтключенныеНастройкиПараметровВывода; + + ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока); + Отчет.КомпоновщикНастроек.Настройки.ОчиститьПараметрыВыводаЭлемента(ЭлементСтруктуры); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Если Параметры.Свойство("ПредставлениеВарианта") И ЗначениеЗаполнено(Параметры.ПредставлениеВарианта) Тогда + АвтоЗаголовок = Ложь; + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Изменение варианта отчета ""%1""'"), Параметры.ПредставлениеВарианта); + КонецЕсли; + + Если Параметры.Свойство("НастройкиОтчета", НастройкиОтчета) Тогда + Если НастройкиОтчета.СхемаМодифицирована Тогда + Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(НастройкиОтчета.АдресСхемы)); + КонецЕсли; + КонецЕсли; + + Отчеты.УниверсальныйОтчет.ИнициализироватьОтчет(Отчет.КомпоновщикНастроек, Ложь, УникальныйИдентификатор, Параметры.Вариант); + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ЗавершитьРедактирование(Команда) + Если МодальныйРежим + Или РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс + Или ВладелецФормы = Неопределено Тогда + Закрыть(Истина); + Иначе + РезультатВыбора = Новый Структура; + РезультатВыбора.Вставить("ВариантМодифицирован", Ложь); + РезультатВыбора.Вставить("ПользовательскиеНастройкиМодифицированы", Ложь); + + Если ВариантМодифицирован Тогда + РезультатВыбора.ВариантМодифицирован = Истина; + РезультатВыбора.Вставить("НастройкиКД", Отчет.КомпоновщикНастроек.Настройки); + КонецЕсли; + + Если ВариантМодифицирован Или ПользовательскиеНастройкиМодифицированы Тогда + РезультатВыбора.ПользовательскиеНастройкиМодифицированы = Истина; + РезультатВыбора.Вставить("ПользовательскиеНастройкиКД", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + КонецЕсли; + + #Если ВебКлиент Тогда + РезультатВыбора.ВариантМодифицирован = Истина; // Для платформы. + РезультатВыбора.Вставить("НастройкиКД", Отчет.КомпоновщикНастроек.Настройки); + РезультатВыбора.ПользовательскиеНастройкиМодифицированы = Истина; + РезультатВыбора.Вставить("ПользовательскиеНастройкиКД", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + #КонецЕсли + + ОповеститьОВыборе(РезультатВыбора); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти diff --git a/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаНастроекОтчета/ConditionalAppearance.dcssca b/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаНастроекОтчета/ConditionalAppearance.dcssca new file mode 100644 index 000000000..6aee488fa --- /dev/null +++ b/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаНастроекОтчета/ConditionalAppearance.dcssca @@ -0,0 +1,72 @@ + + + + + + СтруктураВариантаПредставление + + + + + СтруктураВарианта.ЭтоГруппа + Equal + true + + + + + Шрифт + + + + + + + + СтруктураВариантаПредставление + + + + + СтруктураВарианта.Подсвечивать + Equal + true + + + + + Шрифт + + + + + + + + СтруктураВариантаИспользование + + + + + СтруктураВарианта.ФлажокДоступен + Equal + false + + + + + false + Шрифт + + + + Видимость + false + + + Отображать + false + + + + diff --git a/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаНастроекОтчета/Form.form b/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаНастроекОтчета/Form.form new file mode 100644 index 000000000..5028be4f6 --- /dev/null +++ b/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаНастроекОтчета/Form.form @@ -0,0 +1,10141 @@ + + + + ТекущийУзелКДТипДиаграммы + 788 + true + true + + true + + + ТекущийУзелКДТипДиаграммы + + + OnChange + ТекущийУзелКДТипДиаграммыПриИзменении + + + ТекущийУзелКДТипДиаграммыРасширеннаяПодсказка + 790 + Label + true + true + + Left + + + + ТекущийУзелКДТипДиаграммыКонтекстноеМеню + 789 + true + + InputField + Enter + true + Left + true + + 35 + true + true + false + true + true + true + true + Normal + + + + СтраницыНастроек + 35 + + СтраницаСоставГруппировки + 585 + + КомандыСоставаГруппировки + 604 + + КомандыСоставаГруппировки_ДобавлениеУдаление + 606 + + СоставГруппировки_Добавить + 608 + + <key>ru</key> + <value>Добавить</value> + + true + true + + true + + + СоставГруппировки_ДобавитьРасширеннаяПодсказка + 609 + Label + true + true + + Left + + + Form.Item.СоставГруппировки.StandardCommand.Add + Normal + PictureAndText + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + СоставГруппировки_Удалить + 610 + true + true + + true + + + СоставГруппировки_УдалитьРасширеннаяПодсказка + 611 + Label + true + true + + Left + + + Form.Item.СоставГруппировки.StandardCommand.Delete + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + КомандыСоставаГруппировки_ДобавлениеУдалениеРасширеннаяПодсказка + 607 + Label + true + true + + Left + + + + + + КомандыСоставаГруппировки_Приоритет + 612 + + СоставГруппировки_ПереместитьВверх + 614 + true + true + + true + + + СоставГруппировки_ПереместитьВверхРасширеннаяПодсказка + 615 + Label + true + true + + Left + + + Form.Command.СоставГруппировки_ПереместитьВверх + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + СоставГруппировки_ПереместитьВниз + 616 + true + true + + true + + + СоставГруппировки_ПереместитьВнизРасширеннаяПодсказка + 617 + Label + true + true + + Left + + + Form.Command.СоставГруппировки_ПереместитьВниз + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + КомандыСоставаГруппировки_ПриоритетРасширеннаяПодсказка + 613 + Label + true + true + + Left + + + + + true + true + + true + + + КомандыСоставаГруппировкиРасширеннаяПодсказка + 605 + Label + true + true + + Left + + + CommandBar + + Left + + + + СоставГруппировки + 624 + true + true + + true + + + СоставГруппировки + + None + Change + Copy + CopyToClipboard + EndEdit + HierarchicalList + List + MoveDown + MoveUp + OutputList + SelectAll + SortListAsc + SortListDesc + Tree + + СоставГруппировкиГруппа1 + 643 + + СоставГруппировкиИспользование + 659 + true + true + + true + + + СоставГруппировки.Использование + + + OnChange + СоставГруппировкиИспользованиеПриИзменении + + + СоставГруппировкиИспользованиеРасширеннаяПодсказка + 661 + Label + true + true + + Left + + + + СоставГруппировкиИспользованиеКонтекстноеМеню + 660 + true + + CheckBoxField + Auto + Left + true + + + + СоставГруппировкиПредставление + 662 + true + true + + true + + + СоставГруппировки.Представление + + + СоставГруппировкиПредставлениеРасширеннаяПодсказка + 664 + Label + true + true + + Left + + + + СоставГруппировкиПредставлениеКонтекстноеМеню + 663 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + СоставГруппировкиГруппа1РасширеннаяПодсказка + 644 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + СоставГруппировкиГруппа2 + 817 + + СоставГруппировкиТипГруппировки + 665 + true + true + + true + + + СоставГруппировки.ТипГруппировки + + + OnChange + СоставГруппировкиТипГруппировкиПриИзменении + + + СоставГруппировкиТипГруппировкиРасширеннаяПодсказка + 667 + Label + true + true + + Left + + + + СоставГруппировкиТипГруппировкиКонтекстноеМеню + 666 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + СоставГруппировкиТипДополнения + 814 + true + true + + true + + + СоставГруппировки.ТипДополнения + + + OnChange + СоставГруппировкиТипДополненияПриИзменении + + + СоставГруппировкиТипДополненияРасширеннаяПодсказка + 816 + Label + true + true + + Left + + + + СоставГруппировкиТипДополненияКонтекстноеМеню + 815 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + СоставГруппировкиГруппа2РасширеннаяПодсказка + 818 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + Top + + СоставГруппировкиКоманднаяПанель + 626 + Left + + + Selection + СоставГруппировкиВыбор + + + BeforeAddRow + СоставГруппировкиПередНачаломДобавления + + + BeforeDeleteRow + СоставГруппировкиПередУдалением + + + СоставГруппировкиСтрокаПоиска + 628 + + СоставГруппировкиСтрокаПоискаРасширеннаяПодсказка + 632 + Label + true + true + + Left + + + + СоставГруппировкиСтрокаПоискаКонтекстноеМеню + 631 + true + + СоставГруппировки + + true + + + + СоставГруппировкиСостояниеПросмотра + 633 + + СоставГруппировкиСостояниеПросмотраРасширеннаяПодсказка + 637 + Label + true + true + + Left + + + + СоставГруппировкиСостояниеПросмотраКонтекстноеМеню + 636 + true + + ViewStatusAddition + СоставГруппировки + + true + + + + СоставГруппировкиУправлениеПоиском + 638 + + СоставГруппировкиУправлениеПоискомРасширеннаяПодсказка + 642 + Label + true + true + + Left + + + + СоставГруппировкиУправлениеПоискомКонтекстноеМеню + 641 + true + + SearchControlAddition + СоставГруппировки + + true + + + + СоставГруппировкиРасширеннаяПодсказка + 627 + Label + true + true + + Left + + + + СоставГруппировкиКонтекстноеМеню + 625 + + КомандыСоставаГруппировки_ДобавлениеУдаление1 + 647 + + СоставГруппировки_Добавить1 + 649 + + <key>ru</key> + <value>Добавить</value> + + true + true + + true + + + СоставГруппировки_Добавить1РасширеннаяПодсказка + 650 + Label + true + true + + Left + + + Form.Item.СоставГруппировки.StandardCommand.Add + Normal + PictureAndText + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + СоставГруппировки_Удалить1 + 651 + true + true + + true + + + СоставГруппировки_Удалить1РасширеннаяПодсказка + 652 + Label + true + true + + Left + + + Form.Item.СоставГруппировки.StandardCommand.Delete + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + КомандыСоставаГруппировки_ДобавлениеУдаление1РасширеннаяПодсказка + 648 + Label + true + true + + Left + + + + + + КомандыСоставаГруппировки_Приоритет1 + 653 + + СоставГруппировки_ПереместитьВверх1 + 655 + true + true + + true + + + СоставГруппировки_ПереместитьВверх1РасширеннаяПодсказка + 656 + Label + true + true + + Left + + + Form.Command.СоставГруппировки_ПереместитьВверх + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + СоставГруппировки_ПереместитьВниз1 + 657 + true + true + + true + + + СоставГруппировки_ПереместитьВниз1РасширеннаяПодсказка + 658 + Label + true + true + + Left + + + Form.Command.СоставГруппировки_ПереместитьВниз + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + КомандыСоставаГруппировки_Приоритет1РасширеннаяПодсказка + 654 + Label + true + true + + Left + + + + + + Tree + true + true + true + true + true + true + AfterCurrentRow + MultiRow +
                                true
                                + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + false + false + DontUse + Auto + ExpandAllLevels + true + true + true + true + + СоставГруппировки.ИндексКартинки + + + CommonPicture.ПиктограммыНастроекОтчета + + true +
                                + true + true + + true + + + <key>ru</key> + <value>Состав группировки</value> + + + ru + Страница состав группировки + + + СтраницаСоставГруппировкиРасширеннаяПодсказка + 586 + Label + true + true + + Left + + + Page + + + StdPicture.DataCompositionGroupFields + + Vertical + auto + false + +
                                + + СтраницаОтборы + 320 + + БыстрыеОтборы + 98 + true + true + + true + + + <key>ru</key> + <value>Быстрые отборы</value> + + + ru + Быстрые отборы + + + БыстрыеОтборыРасширеннаяПодсказка + 99 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + + ОбычныеОтборы + 39 + true + true + + true + + + ОбычныеОтборыРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаОтборыРасширенныйРежим + 924 + + Отборы + 342 + true + true + + true + + + Отборы + + None + Change + Copy + CopyToClipboard + EndEdit + HierarchicalList + List + MoveDown + MoveUp + OutputList + SelectAll + SortListAsc + SortListDesc + Tree + + ОтборыГруппа1 + 361 + + ОтборыИспользование + 363 + true + true + + true + + + Отборы.Использование + + + OnChange + ОтборыИспользованиеПриИзменении + + + ОтборыИспользованиеРасширеннаяПодсказка + 365 + Label + true + true + + Left + + + + ОтборыИспользованиеКонтекстноеМеню + 364 + true + + CheckBoxField + Auto + Left + true + + + + ОтборыПредставление + 366 + true + true + + true + + + Отборы.Представление + + + ОтборыПредставлениеРасширеннаяПодсказка + 368 + Label + true + true + + Left + + + + ОтборыПредставлениеКонтекстноеМеню + 367 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + ОтборыГруппа1РасширеннаяПодсказка + 362 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ОтборыУсловие + 375 + true + true + + true + + + Отборы.Условие + + + ОтборыУсловиеРасширеннаяПодсказка + 377 + Label + true + true + + Left + + + + ОтборыУсловиеКонтекстноеМеню + 376 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + Items.Отборы.CurrentData.ТипУсловия + + + + + + ОтборыГруппа2 + 804 + + ОтборыЗначение + 372 + true + true + + true + + + Отборы.Значение + + + OnChange + ОтборыЗначениеПриИзменении + + + ОтборыЗначениеРасширеннаяПодсказка + 374 + Label + true + true + + Left + + + + ОтборыЗначениеКонтекстноеМеню + 373 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + Items.Отборы.CurrentData.ТипЗначения + + + + + + ОтборыПредставлениеЗначения + 801 + true + true + + true + + + Отборы.ПредставлениеЗначения + + + ОтборыПредставлениеЗначенияРасширеннаяПодсказка + 803 + Label + true + true + + Left + + + + ОтборыПредставлениеЗначенияКонтекстноеМеню + 802 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + ОтборыГруппа2РасширеннаяПодсказка + 805 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + ОтборыИндексКартинкиДоступа + 369 + true + true + + true + + + Отборы.ИндексКартинкиДоступа + + None + + ru + Размещение определяет где и как виден этот параметр или отбор. + + + ОтборыИндексКартинкиДоступаРасширеннаяПодсказка + 371 + Label + true + true + + Left + + + + ОтборыИндексКартинкиДоступаКонтекстноеМеню + 370 + true + + PictureField + Auto + true + + CommonPicture.БыстрыйДоступ + + Left + true + + 2 + true + true + true + + CommonPicture.ПиктограммыДоступаКНастройкамОтчета + + + + 1 + + + + + ОтборыЗаголовок + 378 + true + true + + true + + + Отборы.Заголовок + + + OnChange + ОтборыЗаголовокПриИзменении + + + ОтборыЗаголовокРасширеннаяПодсказка + 380 + Label + true + true + + Left + + + + ОтборыЗаголовокКонтекстноеМеню + 379 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + true + Normal + + + Top + + ОтборыКоманднаяПанель + 344 + + КомандыОтборов_ДобавлениеУдаление + 324 + + Отборы_Добавить + 326 + + <key>ru</key> + <value>Добавить отбор</value> + + true + true + + true + + + Отборы_ДобавитьРасширеннаяПодсказка + 327 + Label + true + true + + Left + + + Form.Item.Отборы.StandardCommand.Add + Normal + PictureAndText + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + Отборы_Удалить + 328 + true + true + + true + + + Отборы_УдалитьРасширеннаяПодсказка + 329 + Label + true + true + + Left + + + Form.Item.Отборы.StandardCommand.Delete + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + КомандыОтборов_ДобавлениеУдалениеРасширеннаяПодсказка + 325 + Label + true + true + + Left + + + + + + КомандыОтборов_Приоритет + 415 + + Отборы_ПереместитьВверх + 417 + true + true + + true + + + Отборы_ПереместитьВверхРасширеннаяПодсказка + 418 + Label + true + true + + Left + + + Form.Command.Отборы_ПереместитьВверх + Normal + Auto + true + true + UserCmds + Auto + + + Отборы_ПереместитьВниз + 419 + true + true + + true + + + Отборы_ПереместитьВнизРасширеннаяПодсказка + 420 + Label + true + true + + Left + + + Form.Command.Отборы_ПереместитьВниз + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + КомандыОтборов_ПриоритетРасширеннаяПодсказка + 416 + Label + true + true + + Left + + + + + + КомандыОтборов_Группы + 336 + + Отборы_Сгруппировать + 338 + true + true + + true + + + Отборы_СгруппироватьРасширеннаяПодсказка + 339 + Label + true + true + + Left + + + Form.Command.Отборы_Сгруппировать + Normal + Auto + true + true + UserCmds + + StdPicture.CreateFolder + + Auto + InAdditionalSubmenu + + + Отборы_Разгруппировать + 340 + true + true + + true + + + Отборы_РазгруппироватьРасширеннаяПодсказка + 341 + Label + true + true + + Left + + + Form.Command.Отборы_Разгруппировать + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + КомандыОтборов_ГруппыРасширеннаяПодсказка + 337 + Label + true + true + + Left + + + + + + КомандыОтборов_Флажки + 1059 + + ОтборыОтборы_УстановитьФлажки + 1061 + true + true + + true + + + ОтборыОтборы_УстановитьФлажкиРасширеннаяПодсказка + 1062 + Label + true + true + + Left + + + Form.Command.Отборы_УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + ОтборыОтборы_СнятьФлажки + 1063 + true + true + + true + + + ОтборыОтборы_СнятьФлажкиРасширеннаяПодсказка + 1064 + Label + true + true + + Left + + + Form.Command.Отборы_СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды отборов флажки</value> + + + ru + Команды отборов флажки + + + КомандыОтборов_ФлажкиРасширеннаяПодсказка + 1060 + Label + true + true + + Left + + + + + Left + + + Selection + ОтборыВыбор + + + BeforeAddRow + ОтборыПередНачаломДобавления + + + BeforeDeleteRow + ОтборыПередУдалением + + + OnActivateRow + ОтборыПриАктивизацииСтроки + + + ОтборыСтрокаПоиска + 346 + + ОтборыСтрокаПоискаРасширеннаяПодсказка + 350 + Label + true + true + + Left + + + + ОтборыСтрокаПоискаКонтекстноеМеню + 349 + true + + Отборы + + true + + + + ОтборыСостояниеПросмотра + 351 + + ОтборыСостояниеПросмотраРасширеннаяПодсказка + 355 + Label + true + true + + Left + + + + ОтборыСостояниеПросмотраКонтекстноеМеню + 354 + true + + ViewStatusAddition + Отборы + + true + + + + ОтборыУправлениеПоиском + 356 + + ОтборыУправлениеПоискомРасширеннаяПодсказка + 360 + Label + true + true + + Left + + + + ОтборыУправлениеПоискомКонтекстноеМеню + 359 + true + + SearchControlAddition + Отборы + + true + + + + ОтборыРасширеннаяПодсказка + 345 + Label + true + true + + Left + + + + ОтборыКонтекстноеМеню + 343 + + КомандыОтборов_ДобавлениеУдаление1 + 403 + + Отборы_Добавить1 + 405 + + <key>ru</key> + <value>Добавить отбор</value> + + true + true + + true + + + Отборы_Добавить1РасширеннаяПодсказка + 406 + Label + true + true + + Left + + + Form.Item.Отборы.StandardCommand.Add + Normal + PictureAndText + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + Отборы_Удалить1 + 407 + true + true + + true + + + Отборы_Удалить1РасширеннаяПодсказка + 408 + Label + true + true + + Left + + + Form.Item.Отборы.StandardCommand.Delete + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + КомандыОтборов_ДобавлениеУдаление1РасширеннаяПодсказка + 404 + Label + true + true + + Left + + + + + + КомандыОтборов_Приоритет1 + 421 + + Отборы_ПереместитьВверх1 + 423 + true + true + + true + + + Отборы_ПереместитьВверх1РасширеннаяПодсказка + 424 + Label + true + true + + Left + + + Form.Command.Отборы_ПереместитьВверх + Normal + Auto + true + true + UserCmds + Auto + + + Отборы_ПереместитьВниз1 + 425 + true + true + + true + + + Отборы_ПереместитьВниз1РасширеннаяПодсказка + 426 + Label + true + true + + Left + + + Form.Command.Отборы_ПереместитьВниз + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + КомандыОтборов_Приоритет1РасширеннаяПодсказка + 422 + Label + true + true + + Left + + + + + + КомандыОтборов_Группы1 + 409 + + Отборы_Сгруппировать1 + 411 + true + true + + true + + + Отборы_Сгруппировать1РасширеннаяПодсказка + 412 + Label + true + true + + Left + + + Form.Command.Отборы_Сгруппировать + Normal + Auto + true + true + UserCmds + + StdPicture.CreateFolder + + Auto + InAdditionalSubmenu + + + Отборы_Разгруппировать1 + 413 + true + true + + true + + + Отборы_Разгруппировать1РасширеннаяПодсказка + 414 + Label + true + true + + Left + + + Form.Command.Отборы_Разгруппировать + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + КомандыОтборов_Группы1РасширеннаяПодсказка + 410 + Label + true + true + + Left + + + + + + КомандыОтборов_Флажки1 + 1065 + + ОтборыОтборы_УстановитьФлажки1 + 1067 + true + true + + true + + + ОтборыОтборы_УстановитьФлажки1РасширеннаяПодсказка + 1068 + Label + true + true + + Left + + + Form.Command.Отборы_УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + ОтборыОтборы_СнятьФлажки1 + 1069 + true + true + + true + + + ОтборыОтборы_СнятьФлажки1РасширеннаяПодсказка + 1070 + Label + true + true + + Left + + + Form.Command.Отборы_СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды отборов флажки</value> + + + ru + Команды отборов флажки + + + КомандыОтборов_Флажки1РасширеннаяПодсказка + 1066 + Label + true + true + + Left + + + + + + Tree + true + true + true + true + true + AfterCurrentRow + MultiRow +
                                true
                                + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + false + false + DontUse + Auto + ExpandAllLevels + true + true + + Отборы.ИндексКартинки + + + CommonPicture.ПиктограммыПараметровИОтборов + + true +
                                + + ГруппаЕстьВложенныеОтборы + 806 + + КартинкаИнформация1 + 808 + + <key>ru</key> + <value>Картинка информация</value> + + true + true + + true + + + КартинкаИнформация1РасширеннаяПодсказка + 810 + Label + true + true + + Left + + + + КартинкаИнформация1КонтекстноеМеню + 809 + true + + 2 + true + 1 + true + + + CommonPicture.Информация + + + + + ПодсказкаЕстьВложенныеОтборы + 811 + + <key>ru</key> + <value>В отчете имеются вложенные отборы, которые можно настроить на странице <b>Структура</>.</value> + + true + true + + true + + + ПодсказкаЕстьВложенныеОтборыРасширеннаяПодсказка + 813 + Label + true + true + + Left + + + + ПодсказкаЕстьВложенныеОтборыКонтекстноеМеню + 812 + true + + true + Label + true + true + + Style.ПоясняющийТекст + + + + URLProcessing + ПодсказкаЕстьВложенныеОтчетыОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа есть вложенные отборы</value> + + + ru + Группа есть вложенные отборы + + + ГруппаЕстьВложенныеОтборыРасширеннаяПодсказка + 807 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа отборы расширенный режим</value> + + + ru + Группа отборы расширенный режим + + + ГруппаОтборыРасширенныйРежимРасширеннаяПодсказка + 925 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + +
                                + true + true + + true + + + <key>ru</key> + <value>Отборы</value> + + + ru + Страница выбранные поля + + + СтраницаОтборыРасширеннаяПодсказка + 321 + Label + true + true + + Left + + + Page + + + CommonPicture.Отборы + + Vertical + auto + false + +
                                + + СтраницаВыбранныеПоляИСортировки + 126 + + ГруппаПоляИСортировки + 900 + + ВыбранныеПоля + 230 + true + true + + true + + + ВыбранныеПоля + + None + Change + Copy + CopyToClipboard + EndEdit + HierarchicalList + List + MoveDown + MoveUp + OutputList + SelectAll + SortListAsc + SortListDesc + Tree + + ВыбранныеПоляГруппа1 + 257 + + ВыбранныеПоляИспользование + 259 + true + true + + true + + + ВыбранныеПоля.Использование + + + OnChange + ВыбранныеПоляИспользованиеПриИзменении + + + ВыбранныеПоляИспользованиеРасширеннаяПодсказка + 261 + Label + true + true + + Left + + + + ВыбранныеПоляИспользованиеКонтекстноеМеню + 260 + true + + CheckBoxField + Auto + Left + true + + + + ВыбранныеПоляПредставление + 262 + true + true + + true + + + ВыбранныеПоля.Представление + + + ВыбранныеПоляПредставлениеРасширеннаяПодсказка + 264 + Label + true + true + + Left + + + + ВыбранныеПоляПредставлениеКонтекстноеМеню + 263 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Выбранные поля группа1</value> + + + ru + Выбранные поля группа1 + + + ВыбранныеПоляГруппа1РасширеннаяПодсказка + 258 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + Top + + ВыбранныеПоляКоманднаяПанель + 232 + + КомандыВыбранныхПолей_ДобавлениеУдаление + 212 + + ВыбранныеПоля_Добавить + 214 + + <key>ru</key> + <value>Добавить</value> + + true + true + + true + + + ВыбранныеПоля_ДобавитьРасширеннаяПодсказка + 215 + Label + true + true + + Left + + + Form.Item.ВыбранныеПоля.StandardCommand.Add + Normal + PictureAndText + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ВыбранныеПоля_Удалить + 216 + true + true + + true + + + ВыбранныеПоля_УдалитьРасширеннаяПодсказка + 217 + Label + true + true + + Left + + + Form.Item.ВыбранныеПоля.StandardCommand.Delete + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + КомандыВыбранныхПолей_ДобавлениеУдалениеРасширеннаяПодсказка + 213 + Label + true + true + + Left + + + + + + КомандыВыбранныхПолей_Приоритет + 218 + + ВыбранныеПоля_ПереместитьВверх + 220 + true + true + + true + + + ВыбранныеПоля_ПереместитьВверхРасширеннаяПодсказка + 221 + Label + true + true + + Left + + + Form.Command.ВыбранныеПоля_ПереместитьВверх + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ВыбранныеПоля_ПереместитьВниз + 222 + true + true + + true + + + ВыбранныеПоля_ПереместитьВнизРасширеннаяПодсказка + 223 + Label + true + true + + Left + + + Form.Command.ВыбранныеПоля_ПереместитьВниз + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + КомандыВыбранныхПолей_ПриоритетРасширеннаяПодсказка + 219 + Label + true + true + + Left + + + + + + КомандыВыбранныхПолей_Группы + 284 + + ВыбранныеПоля_Сгруппировать + 288 + true + true + + true + + + ВыбранныеПоля_СгруппироватьРасширеннаяПодсказка + 289 + Label + true + true + + Left + + + Form.Command.ВыбранныеПоля_Сгруппировать + Normal + Auto + true + true + UserCmds + + StdPicture.CreateFolder + + Auto + InAdditionalSubmenu + + + ВыбранныеПоля_Разгруппировать + 290 + true + true + + true + + + ВыбранныеПоля_РазгруппироватьРасширеннаяПодсказка + 291 + Label + true + true + + Left + + + Form.Command.ВыбранныеПоля_Разгруппировать + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Команды выбранных полей группы</value> + + + ru + Команды выбранных полей группы + + + КомандыВыбранныхПолей_ГруппыРасширеннаяПодсказка + 285 + Label + true + true + + Left + + + + + + КомандыВыбранныхПолей_Флажки + 1035 + + ВыбранныеПоляВыбранныеПоля_УстановитьФлажки + 1037 + true + true + + true + + + ВыбранныеПоляВыбранныеПоля_УстановитьФлажкиРасширеннаяПодсказка + 1038 + Label + true + true + + Left + + + Form.Command.ВыбранныеПоля_УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + ВыбранныеПоляВыбранныеПоля_СнятьФлажки + 1039 + true + true + + true + + + ВыбранныеПоляВыбранныеПоля_СнятьФлажкиРасширеннаяПодсказка + 1040 + Label + true + true + + Left + + + Form.Command.ВыбранныеПоля_СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды выбранных полей флажки</value> + + + ru + Команды выбранных полей флажки + + + КомандыВыбранныхПолей_ФлажкиРасширеннаяПодсказка + 1036 + Label + true + true + + Left + + + + + Left + + + DragCheck + ВыбранныеПоляПроверкаПеретаскивания + + + Selection + ВыбранныеПоляВыбор + + + BeforeAddRow + ВыбранныеПоляПередНачаломДобавления + + + BeforeDeleteRow + ВыбранныеПоляПередУдалением + + + DragStart + ВыбранныеПоляНачалоПеретаскивания + + + Drag + ВыбранныеПоляПеретаскивание + + + DragEnd + ВыбранныеПоляОкончаниеПеретаскивания + + + ВыбранныеПоляСтрокаПоиска + 234 + + ВыбранныеПоляСтрокаПоискаРасширеннаяПодсказка + 238 + Label + true + true + + Left + + + + ВыбранныеПоляСтрокаПоискаКонтекстноеМеню + 237 + true + + ВыбранныеПоля + + true + + + + ВыбранныеПоляСостояниеПросмотра + 239 + + ВыбранныеПоляСостояниеПросмотраРасширеннаяПодсказка + 243 + Label + true + true + + Left + + + + ВыбранныеПоляСостояниеПросмотраКонтекстноеМеню + 242 + true + + ViewStatusAddition + ВыбранныеПоля + + true + + + + ВыбранныеПоляУправлениеПоиском + 244 + + ВыбранныеПоляУправлениеПоискомРасширеннаяПодсказка + 248 + Label + true + true + + Left + + + + ВыбранныеПоляУправлениеПоискомКонтекстноеМеню + 247 + true + + SearchControlAddition + ВыбранныеПоля + + true + + + + ВыбранныеПоляРасширеннаяПодсказка + 233 + Label + true + true + + Left + + + + ВыбранныеПоляКонтекстноеМеню + 231 + + КомандыВыбранныхПолей_ДобавлениеУдаление1 + 397 + + ВыбранныеПоля_Добавить1 + 399 + + <key>ru</key> + <value>Добавить</value> + + true + true + + true + + + ВыбранныеПоля_Добавить1РасширеннаяПодсказка + 400 + Label + true + true + + Left + + + Form.Item.ВыбранныеПоля.StandardCommand.Add + Normal + PictureAndText + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ВыбранныеПоля_Удалить1 + 401 + true + true + + true + + + ВыбранныеПоля_Удалить1РасширеннаяПодсказка + 402 + Label + true + true + + Left + + + Form.Item.ВыбранныеПоля.StandardCommand.Delete + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + КомандыВыбранныхПолей_ДобавлениеУдаление1РасширеннаяПодсказка + 398 + Label + true + true + + Left + + + + + + КомандыВыбранныхПолей_Приоритет1 + 391 + + ВыбранныеПоля_ПереместитьВверх1 + 393 + true + true + + true + + + ВыбранныеПоля_ПереместитьВверх1РасширеннаяПодсказка + 394 + Label + true + true + + Left + + + Form.Command.ВыбранныеПоля_ПереместитьВверх + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ВыбранныеПоля_ПереместитьВниз1 + 395 + true + true + + true + + + ВыбранныеПоля_ПереместитьВниз1РасширеннаяПодсказка + 396 + Label + true + true + + Left + + + Form.Command.ВыбранныеПоля_ПереместитьВниз + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + КомандыВыбранныхПолей_Приоритет1РасширеннаяПодсказка + 392 + Label + true + true + + Left + + + + + + КомандыВыбранныхПолей_Группы1 + 385 + + ВыбранныеПоля_Сгруппировать1 + 387 + true + true + + true + + + ВыбранныеПоля_Сгруппировать1РасширеннаяПодсказка + 388 + Label + true + true + + Left + + + Form.Command.ВыбранныеПоля_Сгруппировать + Normal + Auto + true + true + UserCmds + + StdPicture.CreateFolder + + Auto + InAdditionalSubmenu + + + ВыбранныеПоля_Разгруппировать1 + 389 + true + true + + true + + + ВыбранныеПоля_Разгруппировать1РасширеннаяПодсказка + 390 + Label + true + true + + Left + + + Form.Command.ВыбранныеПоля_Разгруппировать + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Команды выбранных полей группы</value> + + + ru + Команды выбранных полей группы + + + КомандыВыбранныхПолей_Группы1РасширеннаяПодсказка + 386 + Label + true + true + + Left + + + + + + КомандыВыбранныхПолей_Флажки1 + 1041 + + ВыбранныеПоляВыбранныеПоля_УстановитьФлажки1 + 1043 + true + true + + true + + + ВыбранныеПоляВыбранныеПоля_УстановитьФлажки1РасширеннаяПодсказка + 1044 + Label + true + true + + Left + + + Form.Command.ВыбранныеПоля_УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + ВыбранныеПоляВыбранныеПоля_СнятьФлажки1 + 1045 + true + true + + true + + + ВыбранныеПоляВыбранныеПоля_СнятьФлажки1РасширеннаяПодсказка + 1046 + Label + true + true + + Left + + + Form.Command.ВыбранныеПоля_СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды выбранных полей флажки</value> + + + ru + Команды выбранных полей флажки + + + КомандыВыбранныхПолей_Флажки1РасширеннаяПодсказка + 1042 + Label + true + true + + Left + + + + + + Tree + true + true + true + true + true + AfterCurrentRow + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + false + false + DontUse + Auto + ExpandAllLevels + true + true + true + true + + ВыбранныеПоля.ИндексКартинки + + + CommonPicture.ПиктограммыНастроекОтчета + + true + + + ГруппаСортировки + 1013 + + КомандыПолейИСортировок + 902 + + Декорация1 + 904 + true + true + + true + + + Декорация1РасширеннаяПодсказка + 906 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 905 + true + + Label + true + true + true + + Left + + + + ВыбранныеПоля_Сортировка_Вправо + 907 + true + true + + true + + + ВыбранныеПоля_Сортировка_ВправоРасширеннаяПодсказка + 908 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыбранныеПоля_Сортировка_Вправо + Normal + Auto + true + true + UserCmds + Auto + + + ВыбранныеПоля_Сортировка_Влево + 909 + true + true + + true + + + ВыбранныеПоля_Сортировка_ВлевоРасширеннаяПодсказка + 910 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыбранныеПоля_Сортировка_Влево + Normal + Auto + true + true + UserCmds + Auto + + + ВыбранныеПоля_Сортировка_ВлевоВсе + 911 + true + true + + true + + + ВыбранныеПоля_Сортировка_ВлевоВсеРасширеннаяПодсказка + 912 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыбранныеПоля_Сортировка_ВлевоВсе + Normal + Auto + true + true + UserCmds + Auto + + + Декорация2 + 913 + true + true + + true + + + Декорация2РасширеннаяПодсказка + 915 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню + 914 + true + + Label + true + true + true + + Left + + + + Декорация3 + 1010 + true + true + + true + + + Декорация3РасширеннаяПодсказка + 1012 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 1011 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Команды полей и сортировок</value> + + + ru + Команды полей и сортировок + + + КомандыПолейИСортировокРасширеннаяПодсказка + 903 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + Сортировка + 130 + true + true + + true + + + Сортировка + + None + Change + Copy + CopyToClipboard + EndEdit + MoveDown + MoveUp + OutputList + SelectAll + SortListAsc + SortListDesc + + СортировкаГруппа1 + 163 + + СортировкаИспользование + 773 + true + true + + true + + + Сортировка.Использование + + + OnChange + СортировкаИспользованиеПриИзменении + + + СортировкаИспользованиеРасширеннаяПодсказка + 775 + Label + true + true + + Left + + + + СортировкаИспользованиеКонтекстноеМеню + 774 + true + + CheckBoxField + Auto + true + Left + true + + + + СортировкаПредставление + 155 + true + true + + true + + + Сортировка.Представление + + + СортировкаПредставлениеРасширеннаяПодсказка + 157 + Label + true + true + + Left + + + + СортировкаПредставлениеКонтекстноеМеню + 156 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + СортировкаГруппа1РасширеннаяПодсказка + 164 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + СортировкаНаправление + 158 + true + true + + true + + + Сортировка.Направление + + + СортировкаНаправлениеРасширеннаяПодсказка + 160 + Label + true + true + + Left + + + + СортировкаНаправлениеКонтекстноеМеню + 159 + true + + LabelField + Auto + Right + true + true + Left + true + Show + Always + + 12 + true + true + false + true + + + Top + + СортировкаКоманднаяПанель + 132 + + КомандыСортировки_ДобавлениеУдаление + 204 + + Сортировка_Добавить + 206 + true + true + + true + + + Сортировка_ДобавитьРасширеннаяПодсказка + 207 + Label + true + true + + Left + + + Form.Item.Сортировка.StandardCommand.Add + Normal + PictureAndText + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + Сортировка_Удалить + 208 + true + true + + true + + + Сортировка_УдалитьРасширеннаяПодсказка + 209 + Label + true + true + + Left + + + Form.Item.Сортировка.StandardCommand.Delete + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Команды сортировки добавление удаление</value> + + + ru + Команды сортировки добавление удаление + + + КомандыСортировки_ДобавлениеУдалениеРасширеннаяПодсказка + 205 + Label + true + true + + Left + + + + + + КомандыСортировки_Приоритет + 175 + + Сортировка_ПереместитьВверх + 165 + true + true + + true + + + Сортировка_ПереместитьВверхРасширеннаяПодсказка + 166 + Label + true + true + + Left + + + Form.Command.Сортировка_ПереместитьВверх + Normal + Auto + true + true + UserCmds + Auto + + + Сортировка_ПереместитьВниз + 167 + true + true + + true + + + Сортировка_ПереместитьВнизРасширеннаяПодсказка + 168 + Label + true + true + + Left + + + Form.Command.Сортировка_ПереместитьВниз + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды сортировки приоритет</value> + + + ru + Команды сортировки приоритет + + + КомандыСортировки_ПриоритетРасширеннаяПодсказка + 176 + Label + true + true + + Left + + + + + + КомандыСортировки_Направление + 173 + + Сортировка_ПоВозрастанию + 169 + true + + true + + + Сортировка_ПоВозрастаниюРасширеннаяПодсказка + 170 + Label + true + true + + Left + + + Form.Command.Сортировка_ПоВозрастанию + Normal + Auto + true + true + UserCmds + Auto + + + Сортировка_ПоУбыванию + 171 + true + + true + + + Сортировка_ПоУбываниюРасширеннаяПодсказка + 172 + Label + true + true + + Left + + + Form.Command.Сортировка_ПоУбыванию + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды сортировки направление</value> + + + ru + Команды сортировки направление + + + КомандыСортировки_НаправлениеРасширеннаяПодсказка + 174 + Label + true + true + + Left + + + + + + КомандыСортировки_Флажки + 1047 + + СортировкаСортировка_УстановитьФлажки + 1049 + true + true + + true + + + СортировкаСортировка_УстановитьФлажкиРасширеннаяПодсказка + 1050 + Label + true + true + + Left + + + Form.Command.Сортировка_УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + СортировкаСортировка_СнятьФлажки + 1051 + true + true + + true + + + СортировкаСортировка_СнятьФлажкиРасширеннаяПодсказка + 1052 + Label + true + true + + Left + + + Form.Command.Сортировка_СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды сортировки флажки</value> + + + ru + Команды сортировки флажки + + + КомандыСортировки_ФлажкиРасширеннаяПодсказка + 1048 + Label + true + true + + Left + + + + + Left + + + DragCheck + СортировкаПроверкаПеретаскивания + + + Selection + СортировкаВыбор + + + BeforeAddRow + СортировкаПередНачаломДобавления + + + BeforeDeleteRow + СортировкаПередУдалением + + + DragStart + СортировкаНачалоПеретаскивания + + + Drag + СортировкаПеретаскивание + + + DragEnd + СортировкаОкончаниеПеретаскивания + + + СортировкаСтрокаПоиска + 134 + + СортировкаСтрокаПоискаРасширеннаяПодсказка + 138 + Label + true + true + + Left + + + + СортировкаСтрокаПоискаКонтекстноеМеню + 137 + true + + Сортировка + + true + + + + СортировкаСостояниеПросмотра + 139 + + СортировкаСостояниеПросмотраРасширеннаяПодсказка + 143 + Label + true + true + + Left + + + + СортировкаСостояниеПросмотраКонтекстноеМеню + 142 + true + + ViewStatusAddition + Сортировка + + true + + + + СортировкаУправлениеПоиском + 144 + + СортировкаУправлениеПоискомРасширеннаяПодсказка + 148 + Label + true + true + + Left + + + + СортировкаУправлениеПоискомКонтекстноеМеню + 147 + true + + SearchControlAddition + Сортировка + + true + + + + СортировкаРасширеннаяПодсказка + 133 + Label + true + true + + Left + + + + СортировкаКонтекстноеМеню + 131 + + КомандыСортировки_ДобавлениеУдаление1 + 1015 + + Сортировка_Добавить2 + 1017 + true + true + + true + + + Сортировка_Добавить2РасширеннаяПодсказка + 1018 + Label + true + true + + Left + + + Form.Item.Сортировка.StandardCommand.Add + Normal + PictureAndText + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + Сортировка_Удалить2 + 1019 + true + true + + true + + + Сортировка_Удалить2РасширеннаяПодсказка + 1020 + Label + true + true + + Left + + + Form.Item.Сортировка.StandardCommand.Delete + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Команды сортировки добавление удаление</value> + + + ru + Команды сортировки добавление удаление + + + КомандыСортировки_ДобавлениеУдаление1РасширеннаяПодсказка + 1016 + Label + true + true + + Left + + + + + + КомандыСортировки_Приоритет1 + 1021 + + Сортировка_ПереместитьВверх1 + 1023 + true + true + + true + + + Сортировка_ПереместитьВверх1РасширеннаяПодсказка + 1024 + Label + true + true + + Left + + + Form.Command.Сортировка_ПереместитьВверх + Normal + Auto + true + true + UserCmds + Auto + + + Сортировка_ПереместитьВниз1 + 1025 + true + true + + true + + + Сортировка_ПереместитьВниз1РасширеннаяПодсказка + 1026 + Label + true + true + + Left + + + Form.Command.Сортировка_ПереместитьВниз + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды сортировки приоритет</value> + + + ru + Команды сортировки приоритет + + + КомандыСортировки_Приоритет1РасширеннаяПодсказка + 1022 + Label + true + true + + Left + + + + + + КомандыСортировки_Направление1 + 1027 + + Сортировка_ПоВозрастанию1 + 1029 + true + + true + + + Сортировка_ПоВозрастанию1РасширеннаяПодсказка + 1030 + Label + true + true + + Left + + + Form.Command.Сортировка_ПоВозрастанию + Normal + Auto + true + true + UserCmds + Auto + + + Сортировка_ПоУбыванию1 + 1031 + true + + true + + + Сортировка_ПоУбыванию1РасширеннаяПодсказка + 1032 + Label + true + true + + Left + + + Form.Command.Сортировка_ПоУбыванию + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды сортировки направление</value> + + + ru + Команды сортировки направление + + + КомандыСортировки_Направление1РасширеннаяПодсказка + 1028 + Label + true + true + + Left + + + + + + КомандыСортировки_Флажки1 + 1053 + + СортировкаСортировка_УстановитьФлажки1 + 1055 + true + true + + true + + + СортировкаСортировка_УстановитьФлажки1РасширеннаяПодсказка + 1056 + Label + true + true + + Left + + + Form.Command.Сортировка_УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + СортировкаСортировка_СнятьФлажки1 + 1057 + true + true + + true + + + СортировкаСортировка_СнятьФлажки1РасширеннаяПодсказка + 1058 + Label + true + true + + Left + + + Form.Command.Сортировка_СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды сортировки флажки</value> + + + ru + Команды сортировки флажки + + + КомандыСортировки_Флажки1РасширеннаяПодсказка + 1054 + Label + true + true + + Left + + + + + + Tree + true + true + true + true + true + AfterCurrentRow + MultiRow + 1 + 1 + AutoUse + true + true + false + false + false + false + false + DontUse + Auto + ExpandAllLevels + true + true + true + true + + Сортировка.ИндексКартинки + + + CommonPicture.ПиктограммыНастроекОтчета + + true + + true + true + + true + + + <key>ru</key> + <value>Группа сортировки</value> + + + ru + Группа сортировки + + false + + ГруппаСортировкиРасширеннаяПодсказка + 1014 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа поля и сортировки</value> + + + ru + Группа поля и сортировки + + + ГруппаПоляИСортировкиРасширеннаяПодсказка + 901 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаЕстьВложенныеПоляИлиСортировки + 1002 + + КартинкаИнформация3 + 1004 + + <key>ru</key> + <value>Картинка информация</value> + + true + true + + true + + + КартинкаИнформация3РасширеннаяПодсказка + 1006 + Label + true + true + + Left + + + + КартинкаИнформация3КонтекстноеМеню + 1005 + true + + 2 + true + 1 + true + + + CommonPicture.Информация + + + + + ПодсказкаЕстьВложенныеПоляИлиСортировки + 1007 + + <key>ru</key> + <value>В отчете имеются вложенные поля и сортировки, которые можно настроить на странице <b>Структура</>.</value> + + true + true + + true + + + ПодсказкаЕстьВложенныеПоляИлиСортировкиРасширеннаяПодсказка + 1009 + Label + true + true + + Left + + + + ПодсказкаЕстьВложенныеПоляИлиСортировкиКонтекстноеМеню + 1008 + true + + true + Label + true + true + + Style.ПоясняющийТекст + + + + URLProcessing + ПодсказкаЕстьВложенныеОтчетыОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + ГруппаЕстьВложенныеПоляИлиСортировкиРасширеннаяПодсказка + 1003 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Поля и сортировки</value> + + + ru + Страница выбранные поля и сортировки + + + СтраницаВыбранныеПоляИСортировкиРасширеннаяПодсказка + 127 + Label + true + true + + Left + + + Page + + + CommonPicture.ПоляИСортировки + + Vertical + auto + false + + + + СтраницаОформление + 590 + + СтраницаДополнительноПодвал + 51 + true + true + + true + + + СтраницаДополнительноПодвалРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + СтраницаДополнительноГруппировки + 49 + true + true + + true + + + СтраницаДополнительноГруппировкиРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + СтраницаДополнительноШапка + 47 + true + true + + true + + + СтраницаДополнительноШапкаРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаОформлениеРасширенныйРежим + 922 + + Оформление + 838 + true + true + + true + + + Оформление + + None + Change + Copy + CopyToClipboard + EndEdit + HierarchicalList + List + MoveDown + MoveUp + OutputList + SelectAll + SortListAsc + SortListDesc + Tree + + ОформлениеГруппа1 + 889 + + ОформлениеИспользование + 891 + true + true + + true + + + Оформление.Использование + + + ОформлениеИспользованиеРасширеннаяПодсказка + 893 + Label + true + true + + Left + + + + ОформлениеИспользованиеКонтекстноеМеню + 892 + true + + CheckBoxField + Auto + Left + true + + + + ОформлениеЗаголовок + 894 + true + true + + true + + + Оформление.Заголовок + + + ОформлениеЗаголовокРасширеннаяПодсказка + 896 + Label + true + true + + Left + + + + ОформлениеЗаголовокКонтекстноеМеню + 895 + true + + InputField + Auto + true + Left + true + + true + true + false + true + true + true + true + Normal + + + true + true + + true + + + ОформлениеГруппа1РасширеннаяПодсказка + 890 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ОформлениеИндексКартинкиДоступа + 897 + true + true + + true + + + Оформление.ИндексКартинкиДоступа + + None + + ОформлениеИндексКартинкиДоступаРасширеннаяПодсказка + 899 + Label + true + true + + Left + + + + ОформлениеИндексКартинкиДоступаКонтекстноеМеню + 898 + true + + PictureField + Auto + true + + CommonPicture.БыстрыйДоступ + + Left + true + + 2 + true + true + true + true + + CommonPicture.ПиктограммыДоступаКНастройкамОтчета + + + + 1 + + + + Top + + ОформлениеКоманднаяПанель + 840 + + КомандыОформления_ДобавлениеУдаление + 826 + + Оформление_Добавить + 828 + + <key>ru</key> + <value>Добавить</value> + + true + true + + true + + + Оформление_ДобавитьРасширеннаяПодсказка + 829 + Label + true + true + + Left + + + Form.Item.Оформление.StandardCommand.Add + Normal + PictureAndText + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + Оформление_Удалить + 830 + true + true + + true + + + Оформление_УдалитьРасширеннаяПодсказка + 831 + Label + true + true + + Left + + + Form.Item.Оформление.StandardCommand.Delete + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + КомандыОформления_ДобавлениеУдалениеРасширеннаяПодсказка + 827 + Label + true + true + + Left + + + + + + КомандыОформления_Приоритет + 832 + + Оформление_ПереместитьВверх + 834 + true + true + + true + + + Оформление_ПереместитьВверхРасширеннаяПодсказка + 835 + Label + true + true + + Left + + + Form.Command.Оформление_ПереместитьВверх + Normal + Auto + true + true + UserCmds + Auto + + + Оформление_ПереместитьВниз + 836 + true + true + + true + + + Оформление_ПереместитьВнизРасширеннаяПодсказка + 837 + Label + true + true + + Left + + + Form.Command.Оформление_ПереместитьВниз + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + КомандыОформления_ПриоритетРасширеннаяПодсказка + 833 + Label + true + true + + Left + + + + + Left + + + Selection + ОформлениеВыбор + + + BeforeAddRow + ОформлениеПередНачаломДобавления + + + BeforeDeleteRow + ОформлениеПередУдалением + + + ОформлениеСтрокаПоиска + 842 + + ОформлениеСтрокаПоискаРасширеннаяПодсказка + 846 + Label + true + true + + Left + + + + ОформлениеСтрокаПоискаКонтекстноеМеню + 845 + true + + Оформление + + true + + + + ОформлениеСостояниеПросмотра + 847 + + ОформлениеСостояниеПросмотраРасширеннаяПодсказка + 851 + Label + true + true + + Left + + + + ОформлениеСостояниеПросмотраКонтекстноеМеню + 850 + true + + ViewStatusAddition + Оформление + + true + + + + ОформлениеУправлениеПоиском + 852 + + ОформлениеУправлениеПоискомРасширеннаяПодсказка + 856 + Label + true + true + + Left + + + + ОформлениеУправлениеПоискомКонтекстноеМеню + 855 + true + + SearchControlAddition + Оформление + + true + + + + ОформлениеРасширеннаяПодсказка + 841 + Label + true + true + + Left + + + + ОформлениеКонтекстноеМеню + 839 + true + + Tree + true + true + true + true + true + AfterCurrentRow + MultiRow +
                                true
                                + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + ExpandAllLevels + true + true + true + true + + CommonPicture.ПиктограммыЭлементов + + true +
                                + true + true + + true + + + <key>ru</key> + <value>Группа оформление расширенный режим</value> + + + ru + Группа оформление расширенный режим + + + ГруппаОформлениеРасширенныйРежимРасширеннаяПодсказка + 923 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + +
                                + + ГруппаЕстьВложенноеОформление + 926 + + КартинкаИнформация2 + 928 + + <key>ru</key> + <value>Картинка информация</value> + + true + true + + true + + + КартинкаИнформация2РасширеннаяПодсказка + 930 + Label + true + true + + Left + + + + КартинкаИнформация2КонтекстноеМеню + 929 + true + + 2 + true + 1 + true + + + CommonPicture.Информация + + + + + ПодсказкаЕстьВложенноеОформление + 931 + + <key>ru</key> + <value>В отчете имеется оформление вложенных элементов, которое можно настроить на странице <b>Структура</>.</value> + + true + true + + true + + + ПодсказкаЕстьВложенноеОформлениеРасширеннаяПодсказка + 933 + Label + true + true + + Left + + + + ПодсказкаЕстьВложенноеОформлениеКонтекстноеМеню + 932 + true + + true + Label + true + true + + Style.ПоясняющийТекст + + + + URLProcessing + ПодсказкаЕстьВложенныеОтчетыОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа есть вложенное оформление</value> + + + ru + Группа есть вложенное оформление + + + ГруппаЕстьВложенноеОформлениеРасширеннаяПодсказка + 927 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Оформление</value> + + + ru + Страница оформление + + + СтраницаОформлениеРасширеннаяПодсказка + 591 + Label + true + true + + Left + + + Page + + + CommonPicture.Оформление + + Vertical + auto + false + +
                                + + СтраницаСтруктураВарианта + 427 + + СтруктураВарианта + 429 + true + true + + true + + + СтруктураВарианта + + None + Change + Choose + Copy + CopyToClipboard + EndEdit + HierarchicalList + List + MoveDown + MoveUp + OutputList + SortListAsc + SortListDesc + Tree + + СтруктураВариантаГруппа2 + 448 + + СтруктураВариантаИспользование + 494 + true + true + + true + + + СтруктураВарианта.Использование + + + OnChange + СтруктураВариантаИспользованиеПриИзменении + + + СтруктураВариантаИспользованиеРасширеннаяПодсказка + 496 + Label + true + true + + Left + + + + СтруктураВариантаИспользованиеКонтекстноеМеню + 495 + true + + CheckBoxField + Auto + Left + true + + + + СтруктураВариантаПредставление + 497 + true + true + + true + + + СтруктураВарианта.Представление + + + СтруктураВариантаПредставлениеРасширеннаяПодсказка + 499 + Label + true + true + + Left + + + + СтруктураВариантаПредставлениеКонтекстноеМеню + 498 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + Normal + + + true + true + + true + + + СтруктураВариантаГруппа2РасширеннаяПодсказка + 449 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + СтруктураВариантаЗаголовок + 554 + true + true + + true + + + СтруктураВарианта.Заголовок + + + OnChange + СтруктураВариантаЗаголовокПриИзменении + + + СтруктураВариантаЗаголовокРасширеннаяПодсказка + 556 + Label + true + true + + Left + + + + СтруктураВариантаЗаголовокКонтекстноеМеню + 555 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + true + Normal + + System.DefaultGUIFont + Arial + 10.0 + true + false + false + false + + + + + СтруктураВариантаСодержитОтборы + 967 + true + true + + true + + + СтруктураВарианта.СодержитОтборы + + true + None + + ru + Картинка показывается если у элемента настроены отборы. + + + СтруктураВариантаСодержитОтборыРасширеннаяПодсказка + 969 + Label + true + true + + Left + + + + СтруктураВариантаСодержитОтборыКонтекстноеМеню + 968 + true + + PictureField + Auto + true + + CommonPicture.Отборы + + Left + true + + 2 + true + true + + CommonPicture.Отборы + + + + 1 + + + + + СтруктураВариантаСодержитПоляИлиСортировки + 997 + true + true + + true + + + СтруктураВарианта.СодержитПоляИлиСортировки + + true + None + + ru + Картинка показывается если у элемента настроены поля и сортировки. + + + СтруктураВариантаСодержитПоляИлиСортировкиРасширеннаяПодсказка + 999 + Label + true + true + + Left + + + + СтруктураВариантаСодержитПоляИлиСортировкиКонтекстноеМеню + 998 + true + + PictureField + Auto + true + + CommonPicture.ПоляИСортировки + + Left + true + + 2 + true + true + + CommonPicture.ПоляИСортировки + + + + 1 + + + + + СтруктураВариантаСодержитУсловноеОформление + 934 + true + true + + true + + + СтруктураВарианта.СодержитУсловноеОформление + + true + None + + ru + Картинка показывается если у элемента настроено оформление. + + + СтруктураВариантаСодержитУсловноеОформлениеРасширеннаяПодсказка + 936 + Label + true + true + + Left + + + + СтруктураВариантаСодержитУсловноеОформлениеКонтекстноеМеню + 935 + true + + PictureField + Auto + true + + CommonPicture.Оформление + + Left + true + + 2 + true + true + + CommonPicture.Оформление + + + + 1 + + + + Top + + СтруктураВариантаКоманднаяПанель + 431 + + КомандыСтруктурыВарианта_Добавление + 468 + + СтруктураВарианта_Добавить + 508 + true + true + + true + + + СтруктураВарианта_ДобавитьРасширеннаяПодсказка + 509 + Label + true + true + + Left + + + Form.Item.СтруктураВарианта.StandardCommand.Add + Normal + Picture + true + true + UserCmds + Auto + + + СтруктураВарианта_Сгруппировать + 510 + true + true + + true + + + СтруктураВарианта_СгруппироватьРасширеннаяПодсказка + 511 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_Сгруппировать + Normal + Auto + true + true + UserCmds + Auto + + + СтруктураВарианта_ДобавлениеТаблицИДиаграмм + 776 + + СтруктураВарианта_ДобавитьТаблицу + 780 + true + true + + true + + + СтруктураВарианта_ДобавитьТаблицуРасширеннаяПодсказка + 781 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_ДобавитьТаблицу + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СтруктураВарианта_ДобавитьДиаграмму + 778 + true + true + + true + + + СтруктураВарианта_ДобавитьДиаграммуРасширеннаяПодсказка + 779 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_ДобавитьДиаграмму + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Структура варианта добавление таблиц и диаграмм</value> + + + ru + Структура варианта добавление таблиц и диаграмм + + + СтруктураВарианта_ДобавлениеТаблицИДиаграммРасширеннаяПодсказка + 777 + Label + true + true + + Left + + + + + true + true + + true + + + КомандыСтруктурыВарианта_ДобавлениеРасширеннаяПодсказка + 469 + Label + true + true + + Left + + + + + + КомандыСтруктурыВарианта_Изменение + 516 + + СтруктураВарианта_Изменить + 512 + true + true + + true + + + СтруктураВарианта_ИзменитьРасширеннаяПодсказка + 513 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_Изменить + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + СтруктураВарианта_Удалить + 668 + true + true + + true + + + СтруктураВарианта_УдалитьРасширеннаяПодсказка + 669 + Label + true + true + + Left + + + Form.Item.СтруктураВарианта.StandardCommand.Delete + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Команды структуры варианта изменение</value> + + + ru + Команды структуры варианта изменение + + + КомандыСтруктурыВарианта_ИзменениеРасширеннаяПодсказка + 517 + Label + true + true + + Left + + + + + + КомандыСтруктурыВарианта_ДвижениеПоИерархии + 456 + + СтруктураВарианта_ПереместитьВышеИЛевее + 500 + true + true + + true + + + СтруктураВарианта_ПереместитьВышеИЛевееРасширеннаяПодсказка + 501 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_ПереместитьВышеИЛевее + Normal + Auto + true + true + UserCmds + Auto + + + СтруктураВарианта_ПереместитьНижеИПравее + 502 + true + true + + true + + + СтруктураВарианта_ПереместитьНижеИПравееРасширеннаяПодсказка + 503 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_ПереместитьНижеИПравее + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + КомандыСтруктурыВарианта_ДвижениеПоИерархииРасширеннаяПодсказка + 457 + Label + true + true + + Left + + + + + + КомандыСтруктурыВарианта_ДвижениеВнутриРодителя + 462 + + СтруктураВарианта_ПереместитьВверх + 504 + true + true + + true + + + СтруктураВарианта_ПереместитьВверхРасширеннаяПодсказка + 505 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_ПереместитьВверх + Normal + Auto + true + true + UserCmds + Auto + + + СтруктураВарианта_ПереместитьВниз + 506 + true + true + + true + + + СтруктураВарианта_ПереместитьВнизРасширеннаяПодсказка + 507 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_ПереместитьВниз + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + КомандыСтруктурыВарианта_ДвижениеВнутриРодителяРасширеннаяПодсказка + 463 + Label + true + true + + Left + + + + + + КомандыСтруктурыВарианта_Флажки + 518 + + СтруктураВарианта_УстановитьФлажки + 520 + true + true + + true + + + СтруктураВарианта_УстановитьФлажкиРасширеннаяПодсказка + 521 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + СтруктураВарианта_СнятьФлажки + 522 + true + true + + true + + + СтруктураВарианта_СнятьФлажкиРасширеннаяПодсказка + 523 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Команды структуры варианта флажки</value> + + + ru + Команды структуры варианта флажки + + + КомандыСтруктурыВарианта_ФлажкиРасширеннаяПодсказка + 519 + Label + true + true + + Left + + + + + Left + + + DragCheck + СтруктураВариантаПроверкаПеретаскивания + + + Selection + СтруктураВариантаВыбор + + + BeforeAddRow + СтруктураВариантаПередНачаломДобавления + + + BeforeDeleteRow + СтруктураВариантаПередУдалением + + + OnActivateRow + СтруктураВариантаПриАктивизацииСтроки + + + DragStart + СтруктураВариантаНачалоПеретаскивания + + + Drag + СтруктураВариантаПеретаскивание + + + СтруктураВариантаСтрокаПоиска + 433 + + СтруктураВариантаСтрокаПоискаРасширеннаяПодсказка + 437 + Label + true + true + + Left + + + + СтруктураВариантаСтрокаПоискаКонтекстноеМеню + 436 + true + + СтруктураВарианта + + true + + + + СтруктураВариантаСостояниеПросмотра + 438 + + СтруктураВариантаСостояниеПросмотраРасширеннаяПодсказка + 442 + Label + true + true + + Left + + + + СтруктураВариантаСостояниеПросмотраКонтекстноеМеню + 441 + true + + ViewStatusAddition + СтруктураВарианта + + true + + + + СтруктураВариантаУправлениеПоиском + 443 + + СтруктураВариантаУправлениеПоискомРасширеннаяПодсказка + 447 + Label + true + true + + Left + + + + СтруктураВариантаУправлениеПоискомКонтекстноеМеню + 446 + true + + SearchControlAddition + СтруктураВарианта + + true + + + + СтруктураВариантаРасширеннаяПодсказка + 432 + Label + true + true + + Left + + + + СтруктураВариантаКонтекстноеМеню + 430 + + КомандыСтруктурыВарианта_Добавление1 + 741 + + СтруктураВарианта_Добавить1 + 743 + true + true + + true + + + СтруктураВарианта_Добавить1РасширеннаяПодсказка + 744 + Label + true + true + + Left + + + Form.Item.СтруктураВарианта.StandardCommand.Add + Normal + Picture + true + true + UserCmds + Auto + + + СтруктураВарианта_Сгруппировать1 + 747 + true + true + + true + + + СтруктураВарианта_Сгруппировать1РасширеннаяПодсказка + 748 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_Сгруппировать + Normal + Auto + true + true + UserCmds + Auto + + + СтруктураВарианта_ДобавлениеТаблицИДиаграмм1 + 782 + + СтруктураВарианта_ДобавитьТаблицу1 + 784 + true + true + + true + + + СтруктураВарианта_ДобавитьТаблицу1РасширеннаяПодсказка + 785 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_ДобавитьТаблицу + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СтруктураВарианта_ДобавитьДиаграмму1 + 786 + true + true + + true + + + СтруктураВарианта_ДобавитьДиаграмму1РасширеннаяПодсказка + 787 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_ДобавитьДиаграмму + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Структура варианта добавление таблиц и диаграмм</value> + + + ru + Структура варианта добавление таблиц и диаграмм + + + СтруктураВарианта_ДобавлениеТаблицИДиаграмм1РасширеннаяПодсказка + 783 + Label + true + true + + Left + + + + + true + true + + true + + + КомандыСтруктурыВарианта_Добавление1РасширеннаяПодсказка + 742 + Label + true + true + + Left + + + + + + КомандыСтруктурыВарианта_Изменение1 + 749 + + СтруктураВарианта_Изменить1 + 751 + true + true + + true + + + СтруктураВарианта_Изменить1РасширеннаяПодсказка + 752 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_Изменить + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + СтруктураВарианта_Удалить1 + 753 + true + true + + true + + + СтруктураВарианта_Удалить1РасширеннаяПодсказка + 754 + Label + true + true + + Left + + + Form.Item.СтруктураВарианта.StandardCommand.Delete + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Команды структуры варианта изменение</value> + + + ru + Команды структуры варианта изменение + + + КомандыСтруктурыВарианта_Изменение1РасширеннаяПодсказка + 750 + Label + true + true + + Left + + + + + + КомандыСтруктурыВарианта_ДвижениеПоИерархии1 + 755 + + СтруктураВарианта_ПереместитьВышеИЛевее1 + 757 + true + true + + true + + + СтруктураВарианта_ПереместитьВышеИЛевее1РасширеннаяПодсказка + 758 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_ПереместитьВышеИЛевее + Normal + Auto + true + true + UserCmds + Auto + + + СтруктураВарианта_ПереместитьНижеИПравее1 + 759 + true + true + + true + + + СтруктураВарианта_ПереместитьНижеИПравее1РасширеннаяПодсказка + 760 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_ПереместитьНижеИПравее + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + КомандыСтруктурыВарианта_ДвижениеПоИерархии1РасширеннаяПодсказка + 756 + Label + true + true + + Left + + + + + + КомандыСтруктурыВарианта_ДвижениеВнутриРодителя1 + 761 + + СтруктураВарианта_ПереместитьВверх1 + 763 + true + true + + true + + + СтруктураВарианта_ПереместитьВверх1РасширеннаяПодсказка + 764 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_ПереместитьВверх + Normal + Auto + true + true + UserCmds + Auto + + + СтруктураВарианта_ПереместитьВниз1 + 765 + true + true + + true + + + СтруктураВарианта_ПереместитьВниз1РасширеннаяПодсказка + 766 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_ПереместитьВниз + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + КомандыСтруктурыВарианта_ДвижениеВнутриРодителя1РасширеннаяПодсказка + 762 + Label + true + true + + Left + + + + + + КомандыСтруктурыВарианта_Флажки1 + 767 + + СтруктураВарианта_УстановитьФлажки1 + 769 + true + true + + true + + + СтруктураВарианта_УстановитьФлажки1РасширеннаяПодсказка + 770 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + СтруктураВарианта_СнятьФлажки1 + 771 + true + true + + true + + + СтруктураВарианта_СнятьФлажки1РасширеннаяПодсказка + 772 + Label + true + true + + Left + + + Form.Command.СтруктураВарианта_СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Команды структуры варианта флажки</value> + + + ru + Команды структуры варианта флажки + + + КомандыСтруктурыВарианта_Флажки1РасширеннаяПодсказка + 768 + Label + true + true + + Left + + + + + + Tree + true + true + true + true + true + true + AfterCurrentRow +
                                true
                                + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + ExpandAllLevels + true + true + true + true + + СтруктураВарианта.ИндексКартинки + + + CommonPicture.ПиктограммыСтруктурыОтчета + + true +
                                + true + true + + true + + + <key>ru</key> + <value>Структура</value> + + + ru + Страница структура варианта + + + СтраницаСтруктураВариантаРасширеннаяПодсказка + 428 + Label + true + true + + Left + + + Page + + + CommonPicture.Структура + + Vertical + auto + false + +
                                + + СтраницаНетПользовательскихНастроек + 1071 + + КартинкаИнформация4 + 1078 + + <key>ru</key> + <value>Картинка информация</value> + + true + true + + true + + + КартинкаИнформация4РасширеннаяПодсказка + 1080 + Label + true + true + + Left + + + + КартинкаИнформация4КонтекстноеМеню + 1079 + true + + 2 + true + 1 + true + + + CommonPicture.Информация + + + + + ПодсказкаНетПользовательскихНастроек + 1081 + + <key>ru</key> + <value>У этого отчета нет ни одной пользовательской настройки. +<link 1>Перейти к расширенной настройке.</></value> + + true + true + + true + + + ПодсказкаНетПользовательскихНастроекРасширеннаяПодсказка + 1083 + Label + true + true + + Left + + + + ПодсказкаНетПользовательскихНастроекКонтекстноеМеню + 1082 + true + + true + Label + true + true + + + URLProcessing + ПодсказкаНетПользовательскихНастроекОбработкаНавигационнойСсылки + + Left + + + true + + true + + + <key>ru</key> + <value>Страница нет пользовательских настроек</value> + + true + + СтраницаНетПользовательскихНастроекРасширеннаяПодсказка + 1072 + Label + true + true + + Left + + + Page + + auto + false + + + + НеОтсортированное + 62 + true + true + + true + + + <key>ru</key> + <value>Не отсортированные</value> + + true + + НеОтсортированноеРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + Page + + Vertical + auto + false + + + true + true + + true + + + <key>ru</key> + <value>Страницы настроек</value> + + + ru + Страницы настроек + + true + true + + СтраницыНастроекРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + Pages + + TabsOnTop + Auto + +
                                + + ГруппаЕстьВложенныеОтчеты + 791 + + КартинкаИнформация + 793 + + <key>ru</key> + <value>Картинка информация</value> + + true + true + + true + + + КартинкаИнформацияРасширеннаяПодсказка + 795 + Label + true + true + + Left + + + + КартинкаИнформацияКонтекстноеМеню + 794 + true + + 2 + true + 1 + true + + + CommonPicture.Информация + + + + + ПодсказкаЕстьВложенныеОтчеты + 796 + + <key>ru</key> + <value>У этого отчета сложная структура настроек (имеются вложенные отчеты). +<link 1>Перейти к </><link 1>настройке</><link 1> вложенных отчетов</>.</value> + + true + true + + true + + + ПодсказкаЕстьВложенныеОтчетыРасширеннаяПодсказка + 798 + Label + true + true + + Left + + + + ПодсказкаЕстьВложенныеОтчетыКонтекстноеМеню + 797 + true + + true + Label + true + true + + + URLProcessing + ПодсказкаЕстьВложенныеОтчетыОбработкаНавигационнойСсылки + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа есть вложенные отчеты</value> + + + ru + Группа есть вложенные отчеты + + + ГруппаЕстьВложенныеОтчетыРасширеннаяПодсказка + 792 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + КомандыФормы + 73 + + РасширенныйРежим + 113 + + <key>ru</key> + <value>Вид</value> + + true + true + + true + + + РасширенныйРежим + + Button + + OnChange + РасширенныйРежимПриИзменении + + + РасширенныйРежимРасширеннаяПодсказка + 115 + + <key>ru</key> + <value>Простой режим предназначен для изменения текущих настроек отчета, которые сохраняются автоматически. +Расширенный режим предназначен для изменения структуры отчета. После изменения структуры отчет необходимо сохранить как новый или перезаписать существующий.</value> + + Label + true + true + + Left + + + + РасширенныйРежимКонтекстноеМеню + 114 + true + + RadioButtonField + Enter + true + Left + true + + Tumbler + false + + + ru + Простой + + + 0 + + + + + ru + Расширенный + + + 1 + + + Vertical + + + + КомандыФормы_Правая + 80 + + Группа1 + 1033 + + ИзменитьФорму + 318 + + <key>ru</key> + <value>Изменить форму...</value> + + true + + true + + + ИзменитьФормуРасширеннаяПодсказка + 319 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>1</value> + + + Группа1РасширеннаяПодсказка + 1034 + Label + true + true + + Left + + + + + + ЗакрытьИСформировать + 21 + true + true + + true + + + ЗакрытьИСформироватьРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + Form.Command.ЗакрытьИСформировать + true + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + Закрыть + 4 + true + true + + true + + + ЗакрытьРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + Form.Command.ЗакрытьБезФормирования + Normal + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ИзменитьУсловияОтборов + 1000 + true + true + + true + + + ИзменитьУсловияОтборовРасширеннаяПодсказка + 1001 + Label + true + true + + Left + + + Form.Command.ИзменитьУсловияОтборов + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + Справка + 799 + true + true + + true + + + СправкаРасширеннаяПодсказка + 800 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + true + + КомандыФормы_ПраваяРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + true + + КомандыФормыРасширеннаяПодсказка + 74 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + Right + + + OnOpen + ПриОткрытии + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + + OnClose + ПриЗакрытии + + LockOwner + true + true + Vertical + true + true + true + auto + true + + НастройкиОтчета + + <key>ru</key> + <value>Настройки отчета</value> + + 2 + + + true + + + + + ПостоянныеКоманды + + <key>ru</key> + <value>Постоянные команды</value> + + 3 + + ValueList + + + + + + + + + ПостоянныеРеквизиты + + <key>ru</key> + <value>Постоянные реквизиты</value> + + 4 + + ValueList + + + + + + + + + ВариантНаименование + + <key>ru</key> + <value>Вариант отчета</value> + + 11 + + String + + + + true + + + true + + + + ВариантСсылка + + <key>ru</key> + <value>Вариант ссылка</value> + + 13 + + CatalogRef.ВариантыОтчетов + + + true + + + true + + + + БыстрыйПоискИменОбъектовМетаданных + + <key>ru</key> + <value>Быстрый поиск имен объектов метаданных</value> + + 18 + + + true + + + true + + + + БыстрыйПоискОтключаемыхСвязей + + <key>ru</key> + <value>Быстрый поиск отключаемых связей</value> + + 19 + + + true + + + true + + + + БыстрыйПоискПользовательскихНастроек + + <key>ru</key> + <value>Быстрый поиск пользовательских настроек</value> + + 20 + + + true + + + true + + + + ШрифтОбычнойГруппы + + <key>ru</key> + <value>Шрифт обычной группы</value> + + 23 + + Font + + + true + + + true + + + + РасширенныйРежим + + <key>ru</key> + <value>Расширенный режим</value> + + 5 + + Number + + 1 + + + + true + + + true + + + + Сортировка + + <key>ru</key> + <value>Сортировка</value> + + 10 + + ValueTree + + + true + + + true + + + ИдентификаторКД + + <key>ru</key> + <value>Идентификатор КД</value> + + 1 + + + true + + + true + + + + Использование + + <key>ru</key> + <value>Использование</value> + + 2 + + Boolean + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Представление</value> + + 3 + + String + + + + true + + + true + + + + Направление + + <key>ru</key> + <value>Направление</value> + + 4 + + DataCompositionSortDirection + + + true + + + true + + + + ЭтоРаздел + + <key>ru</key> + <value>Это раздел</value> + + 5 + + Boolean + + + true + + + true + + + + ИндексКартинки + + <key>ru</key> + <value>Индекс картинки</value> + + 6 + + Number + + 10 + + + + 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> + + 15 + + Boolean + + + true + + + true + + + + ВыбранныеПоля + + <key>ru</key> + <value>Поля</value> + + 21 + + ValueTree + + + true + + + true + + + ИдентификаторКД + + <key>ru</key> + <value>Идентификатор КД</value> + + 1 + + + true + + + true + + + + Использование + + <key>ru</key> + <value>Использование</value> + + 2 + + Boolean + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Представление</value> + + 3 + + String + + + + true + + + true + + + + ЭтоГруппа + + <key>ru</key> + <value>Это группа</value> + + 4 + + Boolean + + + true + + + true + + + + Расположение + + <key>ru</key> + <value>Расположение</value> + + 5 + + DataCompositionFieldPlacement + + + true + + + true + + + + ИндексКартинки + + <key>ru</key> + <value>Индекс картинки</value> + + 6 + + Number + + 10 + + + + true + + + true + + + + ЭтоРаздел + + <key>ru</key> + <value>Это раздел</value> + + 7 + + Boolean + + + true + + + true + + + + ТипНастройки + + <key>ru</key> + <value>Тип настройки</value> + + 8 + + String + + + + true + + + true + + + + ПолеКД + + <key>ru</key> + <value>Поле КД</value> + + 9 + + + true + + + true + + + + + Отборы + + <key>ru</key> + <value>Отборы</value> + + 24 + + ValueTree + + + true + + + true + + + ИдентификаторКД + + <key>ru</key> + <value>Идентификатор КД</value> + + 1 + + + true + + + true + + + + Использование + + <key>ru</key> + <value>Использование</value> + + 2 + + Boolean + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Поле</value> + + 3 + + String + + + + true + + + true + + + + Расположение + + <key>ru</key> + <value>Расположение</value> + + 5 + + DataCompositionFieldPlacement + + + true + + + true + + + + ИндексКартинки + + <key>ru</key> + <value>Индекс картинки</value> + + 6 + + Number + + 10 + + + + true + + + true + + + + Условие + + <key>ru</key> + <value>Условие</value> + + 7 + + EnumRef.ДоступныеПериодыОтчета + DataCompositionComparisonType + + + true + + + true + + + + Значение + + <key>ru</key> + <value>Значение</value> + + 8 + + + true + + + true + + + + ИндексКартинкиДоступа + + <key>ru</key> + <value>Отображение</value> + + 9 + + Number + + 10 + + + + true + + + true + + + + Заголовок + + <key>ru</key> + <value>Заголовок</value> + + 10 + + String + + + + true + + + true + + + + ЭтоРаздел + + <key>ru</key> + <value>Это раздел</value> + + 11 + + Boolean + + + true + + + true + + + + ЭтоГруппа + + <key>ru</key> + <value>Это группа</value> + + 4 + + Boolean + + + true + + + true + + + + ЭтоПараметр + + <key>ru</key> + <value>Это параметр</value> + + 12 + + Boolean + + + true + + + true + + + + ТипЗначения + + <key>ru</key> + <value>Тип значения</value> + + 13 + + TypeDescription + + + true + + + true + + + + ЗаголовокПереопределен + + <key>ru</key> + <value>Заголовок переопределен</value> + + 14 + + Boolean + + + true + + + true + + + + ТипУсловия + + <key>ru</key> + <value>Тип условия</value> + + 15 + + TypeDescription + + + true + + + true + + + + Дополнительно + + <key>ru</key> + <value>Дополнительно</value> + + 17 + + + true + + + true + + + + ВводСписком + + <key>ru</key> + <value>Ввод списком</value> + + 18 + + Boolean + + + true + + + true + + + + ВыводитьФлажок + + <key>ru</key> + <value>Выводить флажок</value> + + 19 + + Boolean + + + true + + + true + + + + ВыборГруппИЭлементов + + <key>ru</key> + <value>Выбор групп и элементов</value> + + 16 + + + true + + + true + + + + ФиксированныйСписокВыбора + + <key>ru</key> + <value>Фиксированный список выбора</value> + + 20 + + Boolean + + + true + + + true + + + + ПредставлениеЗначения + + <key>ru</key> + <value>Значение</value> + + 21 + + String + + + + true + + + true + + + + ФормаВыбора + + <key>ru</key> + <value>Форма выбора</value> + + 22 + + String + + + + true + + + true + + + + + СтруктураВарианта + + <key>ru</key> + <value>Структура</value> + + 26 + + ValueTree + + + true + + + true + + + ИдентификаторКД + + <key>ru</key> + <value>Идентификатор КД</value> + + 1 + + + true + + + true + + + + Использование + + <key>ru</key> + <value>Использование</value> + + 2 + + Boolean + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Группируемые поля</value> + + 3 + + String + + + + true + + + true + + + + ЭтоГруппа + + <key>ru</key> + <value>Это группа</value> + + 4 + + Boolean + + + true + + + true + + + + ИндексКартинки + + <key>ru</key> + <value>Индекс картинки</value> + + 6 + + Number + + 10 + + + + true + + + true + + + + ФлажокДоступен + + <key>ru</key> + <value>Флажок доступен</value> + + 7 + + Boolean + + + 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> + + 11 + + String + + + + true + + + true + + + + Подсвечивать + + <key>ru</key> + <value>Подсвечивать</value> + + 13 + + Boolean + + + true + + + true + + + + СодержитОтборы + + <key>ru</key> + <value>Содержит отборы</value> + + 5 + + 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> + + 14 + + Boolean + + + true + + + true + + + + + ЦветНеактивныхЗначенийТаблицы + + <key>ru</key> + <value>Цвет неактивных значений таблицы</value> + + 27 + + Color + + + true + + + true + + + + КомпоновщикНастроек + + <key>ru</key> + <value>Компоновщик настроек</value> + + 22 + + DataCompositionSettingsComposer + + + true + + + true + + + + ВариантИзменен + + <key>ru</key> + <value>Вариант изменен</value> + + 28 + + Boolean + + + true + + + true + + + + РезультатВыбораСформирован + + <key>ru</key> + <value>Результат выбора сформирован</value> + + 1 + + Boolean + + + true + + + true + + + + ИдентификаторТекущегоУзлаКД + + <key>ru</key> + <value>Идентификатор текущего узла КД</value> + + 29 + + + true + + + true + + + + СоставГруппировки + + <key>ru</key> + <value>Состав группировки</value> + + 36 + + ValueTree + + + true + + + true + + + ИдентификаторКД + + <key>ru</key> + <value>Идентификатор КД</value> + + 1 + + + true + + + true + + + + Использование + + <key>ru</key> + <value>Использование</value> + + 2 + + Boolean + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Поле</value> + + 3 + + String + + + + true + + + true + + + + ЭтоГруппа + + <key>ru</key> + <value>Это группа</value> + + 4 + + Boolean + + + true + + + true + + + + ТипГруппировки + + <key>ru</key> + <value>Тип группировки</value> + + 5 + + DataCompositionGroupType + + + true + + + true + + + + ИндексКартинки + + <key>ru</key> + <value>Индекс картинки</value> + + 6 + + Number + + 10 + + + + true + + + true + + + + Картинка + + <key>ru</key> + <value>Картинка</value> + + 7 + + Picture + + + true + + + true + + + + ТипДополнения + + <key>ru</key> + <value>Тип дополнения</value> + + 8 + + DataCompositionPeriodAdditionType + + + true + + + true + + + + ПоказыватьТипДополнения + + <key>ru</key> + <value>Показывать тип дополнения</value> + + 9 + + Boolean + + + true + + + true + + + + ТипНастройки + + <key>ru</key> + <value>Тип настройки</value> + + 10 + + String + + + + true + + + true + + + + ПолеКД + + <key>ru</key> + <value>Поле КД</value> + + 11 + + + true + + + true + + + + + БыстрыйПоискНастроекВарианта + + <key>ru</key> + <value>Быстрый поиск настроек варианта</value> + + 6 + + + 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 + + + true + + + true + + + + ПодчиненныйИдентификаторВФорме + + <key>ru</key> + <value>Подчиненный идентификатор в форме</value> + + 3 + + + true + + + true + + + + ВедущийТип + + <key>ru</key> + <value>Ведущий тип</value> + + 4 + + TypeDescription + + + true + + + true + + + + ПодчиненныйТип + + <key>ru</key> + <value>Подчиненный тип</value> + + 5 + + TypeDescription + + + true + + + true + + + + ПодчиненныйИмяПараметра + + <key>ru</key> + <value>Подчиненный имя параметра</value> + + 6 + + String + + + + true + + + true + + + + ПодчиненныйДействие + + <key>ru</key> + <value>Подчиненный действие</value> + + 7 + + + true + + + true + + + + + ПользовательскиеНастройкиМодифицированы + + <key>ru</key> + <value>Пользовательские настройки модифицированы</value> + + 8 + + Boolean + + + true + + + true + + + + ТипТекущегоУзлаКД + + <key>ru</key> + <value>Тип текущего узла КД</value> + + 37 + + String + + + + true + + + true + + + + ТекущийУзелКДТипДиаграммы + + <key>ru</key> + <value>Тип диаграммы</value> + + 38 + + + true + + + true + + + + Оформление + + <key>ru</key> + <value>Оформление</value> + + 9 + + ValueTree + + + true + + + true + + + ИдентификаторКД + + <key>ru</key> + <value>Идентификатор КД</value> + + 1 + + + true + + + true + + + + Использование + + <key>ru</key> + <value>Использование</value> + + 2 + + Boolean + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Стиль, оформляемые поля и условие</value> + + 3 + + String + + + + true + + + true + + + + ЭтоГруппа + + <key>ru</key> + <value>Это группа</value> + + 4 + + Boolean + + + true + + + true + + + + Расположение + + <key>ru</key> + <value>Расположение</value> + + 5 + + DataCompositionFieldPlacement + + + true + + + true + + + + ИндексКартинки + + <key>ru</key> + <value>Индекс картинки</value> + + 6 + + Number + + 10 + + + + true + + + true + + + + ОбластьИспользования + + <key>ru</key> + <value>Область использования</value> + + 10 + + String + + + + true + + + true + + + + ИндексКартинкиДоступа + + <key>ru</key> + <value>Индекс картинки доступа</value> + + 11 + + Number + + 10 + + + + 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> + + 39 + + ReportObject + + + true + + + true + +
                                true
                                +
                                + + НеобходимоОбновитьНастройки + + <key>ru</key> + <value>Необходимо обновить настройки</value> + + 40 + + Boolean + + + true + + + true + + + + РезультатЗаполненияНастроек + + <key>ru</key> + <value>Результат заполнения настроек</value> + + 41 + + + true + + + true + + + + ФормаПараметры + + <key>ru</key> + <value>Форма параметры</value> + + 42 + + + true + + + + + ЗакрытьБезФормирования + + <key>ru</key> + <value>Закрыть</value> + + 1 + + ru + Завершить редактирование настроек и закрыть + + + true + + + + ЗакрытьБезФормирования + + + DontUse + Auto + + + ЗакрытьИСформировать + + <key>ru</key> + <value>Закрыть и сформировать</value> + + 2 + + ru + Закрыть и сформировать + + + true + + + StdPicture.GenerateReport + + + + ЗакрытьИСформировать + + + DontUse + Auto + + + Сортировка_ПереместитьВверх + + <key>ru</key> + <value>Переместить вверх</value> + + 6 + + ru + Поднять приоритет сортировки по колонке + + + true + + + StdPicture.MoveUp + + + + Сортировка_ПереместитьВверх + + + DontUse + Auto + + + Сортировка_ПереместитьВниз + + <key>ru</key> + <value>Переместить вниз</value> + + 7 + + ru + Понизить приоритет сортировки по колонке + + + true + + + StdPicture.MoveDown + + + + Сортировка_ПереместитьВниз + + + DontUse + Auto + + + Сортировка_ПоВозрастанию + + <key>ru</key> + <value>Сортировать по возрастанию</value> + + 8 + + ru + Сортировать данные колонки по возрастанию + + + true + + + StdPicture.SortListAsc + + + + Сортировка_ПоВозрастанию + + + DontUse + Auto + + + Сортировка_ПоУбыванию + + <key>ru</key> + <value>Сортировать по убыванию</value> + + 9 + + ru + Сортировать данные колонки по убыванию + + + true + + + StdPicture.SortListDesc + + + + Сортировка_ПоУбыванию + + + DontUse + Auto + + + ВыбранныеПоля_ПереместитьВверх + + <key>ru</key> + <value>Переместить вверх</value> + + 10 + + ru + Переместить поле выше или левее + + + true + + + StdPicture.MoveUp + + + + ВыбранныеПоля_ПереместитьВверх + + + DontUse + Auto + + + ВыбранныеПоля_ПереместитьВниз + + <key>ru</key> + <value>Переместить вниз</value> + + 11 + + ru + Переместить поле ниже или правее + + + true + + + StdPicture.MoveDown + + + + ВыбранныеПоля_ПереместитьВниз + + + DontUse + Auto + + + ВыбранныеПоля_Сгруппировать + + <key>ru</key> + <value>Сгруппировать</value> + + 12 + + ru + Выбранные поля сгруппировать + + + true + + + StdPicture.CreateFolder + + + + ВыбранныеПоля_Сгруппировать + + + DontUse + Auto + + + ВыбранныеПоля_Разгруппировать + + <key>ru</key> + <value>Разгруппировать</value> + + 13 + + ru + Выбранные поля разгруппировать + + + true + + + + ВыбранныеПоля_Разгруппировать + + + DontUse + Auto + + + Отборы_Сгруппировать + + <key>ru</key> + <value>Сгруппировать отборы</value> + + 3 + + ru + Создать группу и поместить в нее выделенные отборы + + + true + + + StdPicture.CreateFolder + + + + Отборы_Сгруппировать + + + DontUse + Auto + + + Отборы_Разгруппировать + + <key>ru</key> + <value>Разгруппировать</value> + + 4 + + ru + Удалить выделенную группу, сохранив вложенные отборы + + + true + + + + Отборы_Разгруппировать + + + DontUse + Auto + + + Отборы_ПереместитьВверх + + <key>ru</key> + <value>Переместить вверх</value> + + 5 + + ru + Переместить вверх + + + true + + + StdPicture.MoveUp + + + + Отборы_ПереместитьВверх + + + DontUse + Auto + + + Отборы_ПереместитьВниз + + <key>ru</key> + <value>Переместить вниз</value> + + 14 + + ru + Переместить вниз + + + true + + + StdPicture.MoveDown + + + + Отборы_ПереместитьВниз + + + DontUse + Auto + + + СтруктураВарианта_Сгруппировать + + <key>ru</key> + <value>Сгруппировать...</value> + + 15 + + ru + Обернуть эту строку в группировку по полю... + + + true + + + CommonPicture.ДобавитьРодительский + + + + СтруктураВарианта_Сгруппировать + + + Picture + DontUse + Auto + + + СтруктураВарианта_ПереместитьВышеИЛевее + + <key>ru</key> + <value>Переместить выше и левее</value> + + 17 + + ru + Структура варианта переместить выше и левее + + + true + + + CommonPicture.ПереместитьВлевоВверх + + + + СтруктураВарианта_ПереместитьВышеИЛевее + + + Picture + DontUse + Auto + + + СтруктураВарианта_ПереместитьНижеИПравее + + <key>ru</key> + <value>Переместить ниже и правее</value> + + 18 + + ru + Структура варианта переместить ниже и правее + + + true + + + CommonPicture.ПереместитьВправоВниз + + + + СтруктураВарианта_ПереместитьНижеИПравее + + + Picture + DontUse + Auto + + + СтруктураВарианта_ПереместитьВверх + + <key>ru</key> + <value>Переместить вверх</value> + + 19 + + ru + Переместить вверх + + + true + + + StdPicture.MoveUp + + + + СтруктураВарианта_ПереместитьВверх + + + Picture + DontUse + Auto + + + СтруктураВарианта_ПереместитьВниз + + <key>ru</key> + <value>Переместить вниз</value> + + 20 + + ru + Переместить вниз + + + true + + + StdPicture.MoveDown + + + + СтруктураВарианта_ПереместитьВниз + + + Picture + DontUse + Auto + + + СтруктураВарианта_УстановитьФлажки + + <key>ru</key> + <value>Установить флажки</value> + + 21 + + ru + Включить все группировки + + + true + + + StdPicture.CheckAll + + + + СтруктураВарианта_УстановитьФлажки + + + Picture + DontUse + Auto + + + СтруктураВарианта_СнятьФлажки + + <key>ru</key> + <value>Снять флажки</value> + + 22 + + ru + Отключить все группировки + + + true + + + StdPicture.UncheckAll + + + + СтруктураВарианта_СнятьФлажки + + + Picture + DontUse + Auto + + + СоставГруппировки_ПереместитьВверх + + <key>ru</key> + <value>Переместить вверх</value> + + 16 + + ru + Переместить поле выше или левее + + + true + + + StdPicture.MoveUp + + + + СоставГруппировки_ПереместитьВверх + + + DontUse + Auto + + + СоставГруппировки_ПереместитьВниз + + <key>ru</key> + <value>Переместить вниз</value> + + 23 + + ru + Переместить поле ниже или правее + + + true + + + StdPicture.MoveDown + + + + СоставГруппировки_ПереместитьВниз + + + DontUse + Auto + + + Оформление_ПереместитьВниз + + <key>ru</key> + <value>Переместить вниз</value> + + 24 + + ru + Переместить поле ниже или правее + + + true + + + StdPicture.MoveDown + + + + ВыбранныеПоля_ПереместитьВниз + + + DontUse + Auto + + + Оформление_ПереместитьВверх + + <key>ru</key> + <value>Переместить вверх</value> + + 25 + + ru + Переместить поле выше или левее + + + true + + + StdPicture.MoveUp + + + + ВыбранныеПоля_ПереместитьВверх + + + DontUse + Auto + + + СтруктураВарианта_Изменить + + <key>ru</key> + <value>Изменить</value> + + 26 + + true + + F2 + + StdPicture.Change + + + + СтруктураВарианта_Изменить + + + Picture + DontUse + Auto + + + СтруктураВарианта_ДобавитьТаблицу + + <key>ru</key> + <value>Добавить таблицу</value> + + 27 + + ru + Добавить таблицу + + + true + + + StdPicture.DataCompositionNewTable + + + + СтруктураВарианта_ДобавитьТаблицу + + + DontUse + Auto + + + СтруктураВарианта_ДобавитьДиаграмму + + <key>ru</key> + <value>Добавить диаграмму</value> + + 28 + + ru + Добавить диаграмму + + + true + + + StdPicture.DataCompositionNewChart + + + + СтруктураВарианта_ДобавитьДиаграмму + + + DontUse + Auto + + + ВыбранныеПоля_Сортировка_Влево + + <key>ru</key> + <value>Удалить выбранные сортировки</value> + + 29 + + ru + Удалить выбранные сортировки + + + true + + + StdPicture.MoveLeft + + + + ВыбранныеПоля_Сортировка_Влево + + + Picture + DontUse + Auto + + + ВыбранныеПоля_Сортировка_Вправо + + <key>ru</key> + <value>Добавить сортировку по выбранному полю</value> + + 30 + + ru + Добавить сортировку по выбранному полю + + + true + + + StdPicture.MoveRight + + + + ВыбранныеПоля_Сортировка_Вправо + + + Picture + DontUse + Auto + + + ВыбранныеПоля_Сортировка_ВлевоВсе + + <key>ru</key> + <value>Удалить все сортировки</value> + + 31 + + ru + Удалить все сортировки + + + true + + + CommonPicture.ПереместитьВлевоВсе + + + + ВыбранныеПоля_Сортировка_ВлевоВсе + + + Picture + DontUse + Auto + + + ИзменитьУсловияОтборов + + <key>ru</key> + <value>Изменить условия отборов...</value> + + 32 + + ru + Изменить условия отборов + + + true + + + CommonPicture.ВидСравнения + + + + ИзменитьУсловияОтборов + + + DontUse + Auto + + + ВыбранныеПоля_УстановитьФлажки + + <key>ru</key> + <value>Установить флажки</value> + + 33 + + ru + Включить флажки всех полей + + + true + + + StdPicture.CheckAll + + + + ВыбранныеПоля_УстановитьФлажки + + + Picture + DontUse + Auto + + + ВыбранныеПоля_СнятьФлажки + + <key>ru</key> + <value>Снять флажки</value> + + 34 + + ru + Снять флажки всех полей + + + true + + + StdPicture.UncheckAll + + + + ВыбранныеПоля_СнятьФлажки + + + Picture + DontUse + Auto + + + Сортировка_СнятьФлажки + + <key>ru</key> + <value>Снять флажки</value> + + 35 + + ru + Отключить все сортировки + + + true + + + StdPicture.UncheckAll + + + + Сортировка_СнятьФлажки + + + Picture + DontUse + Auto + + + Сортировка_УстановитьФлажки + + <key>ru</key> + <value>Установить флажки</value> + + 36 + + ru + Включить все сортировки + + + true + + + StdPicture.CheckAll + + + + Сортировка_УстановитьФлажки + + + Picture + DontUse + Auto + + + Отборы_УстановитьФлажки + + <key>ru</key> + <value>Установить флажки</value> + + 37 + + ru + Включить все параметры и отборы + + + true + + + StdPicture.CheckAll + + + + Отборы_УстановитьФлажки + + + DontUse + Auto + + + Отборы_СнятьФлажки + + <key>ru</key> + <value>Снять флажки</value> + + 38 + + ru + Отключить все параметры и отборы + + + true + + + StdPicture.UncheckAll + + + + Отборы_СнятьФлажки + + + DontUse + Auto + + + + + + + + BeforeLoadVariantAtServer + ПередЗагрузкойВариантаНаСервере + + + BeforeLoadUserSettingsAtServer + ПередЗагрузкойПользовательскихНастроекНаСервере + + + OnUpdateUserSettingSetAtServer + ПриОбновленииСоставаПользовательскихНастроекНаСервере + + +
                                diff --git a/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаНастроекОтчета/Help/ru.html b/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаНастроекОтчета/Help/ru.html new file mode 100644 index 000000000..fad626823 --- /dev/null +++ b/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаНастроекОтчета/Help/ru.html @@ -0,0 +1,41 @@ + +

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

                                +

                                Открывается из формы отчета по кнопке Настройки.

                                +

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

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

                                Окно настроек в зависимости от сложности отчета состоит из нескольких вкладок:

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

                                Отборы

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

                                Поля

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

                                Сортировка

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

                                Оформление

                                +
                                • На вкладке можно поменять некоторые параметры оформления отчета, например, с помощью флажка включить или выключить Цвет фона, в который можно окрасить все поля.

                                Структура

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

                                Получение данных отчета

                                +
                                • Укажите нужные параметры, нажмите кнопку Закрыть и сформировать. Последние настройки будут сохранены автоматически. Если были применены ошибочные настройки, их можно не только изменить, но и сбросить с помощью соответствующих команд формы отчета.
                                \ No newline at end of file diff --git a/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаНастроекОтчета/Module.bsl b/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаНастроекОтчета/Module.bsl new file mode 100644 index 000000000..cebec0083 --- /dev/null +++ b/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаНастроекОтчета/Module.bsl @@ -0,0 +1,5973 @@ +#Область ОписаниеПеременных + +&НаКлиенте +Перем ПеременныеКлиента; + +#КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// ФОРМА + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ФормаПараметры = Новый Структура( + "КлючНазначенияИспользования, КлючПользовательскихНастроек, + |Расшифровка, СформироватьПриОткрытии, ТолькоПросмотр, + |ФиксированныеНастройки, Раздел, Подсистема, ПодсистемаПредставление"); + ЗаполнитьЗначенияСвойств(ФормаПараметры, Параметры); + ФормаПараметры.Вставить("Отбор", Новый Структура); + Если ТипЗнч(Параметры.Отбор) = Тип("Структура") Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ФормаПараметры.Отбор, Параметры.Отбор, Истина); + Параметры.Отбор.Очистить(); + КонецЕсли; + + Если Не Параметры.Свойство("НастройкиОтчета", НастройкиОтчета) Тогда + ВызватьИсключение НСтр("ru = 'Не передан служебный параметр ""НастройкиОтчета"".'"); + КонецЕсли; + Если Не Параметры.Свойство("ВариантНаименование", ВариантНаименование) Тогда + ВызватьИсключение НСтр("ru = 'Не передан служебный параметр ""ВариантНаименование"".'"); + КонецЕсли; + Параметры.Свойство("ИдентификаторТекущегоУзлаКД", ИдентификаторТекущегоУзлаКД); + КлючСохраненияПоложенияОкна = НастройкиОтчета.ПолноеИмя; + Если ИдентификаторТекущегоУзлаКД <> Неопределено Тогда + РежимИзмененияУзлаВарианта = Истина; + Высота = 0; + КлючСохраненияПоложенияОкна = КлючСохраненияПоложенияОкна + ".Узел"; + Если Не Параметры.Свойство("Заголовок", Заголовок) Тогда + ВызватьИсключение НСтр("ru = 'Не передан служебный параметр ""Заголовок"".'"); + КонецЕсли; + Если Не Параметры.Свойство("ТипТекущегоУзлаКД", ТипТекущегоУзлаКД) Тогда + ВызватьИсключение НСтр("ru = 'Не передан служебный параметр ""ТипТекущегоУзлаКД"".'"); + КонецЕсли; + Иначе + Если Не ЗначениеЗаполнено(ВариантНаименование) Тогда + ВариантНаименование = НастройкиОтчета.Наименование; + КонецЕсли; + Заголовок = НСтр("ru = 'Настройки отчета'") + " """ + ВариантНаименование + """"; + КонецЕсли; + КлючНазначенияИспользования = КлючСохраненияПоложенияОкна; + + Элементы.РасширенныйРежим.Видимость = НастройкиОтчета.РазрешеноМенятьВарианты; + + Если РежимИзмененияУзлаВарианта Тогда + ИмяСтраницы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ИмяСтраницы", "СтраницаСоставГруппировки"); + РасширенныйРежим = 1; + Иначе + РасширенныйРежим = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "ФормаНастроекРасширенныйРежим", 0); + ИмяСтраницы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "ФормаНастроекИмяСтраницы", "СтраницаОтборы"); + КонецЕсли; + Страница = Элементы.Найти(ИмяСтраницы); + Если Страница <> Неопределено Тогда + Элементы.СтраницыНастроек.ТекущаяСтраница = Страница; + КонецЕсли; + + Если НастройкиОтчета.СхемаМодифицирована Тогда + Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(НастройкиОтчета.АдресСхемы)); + КонецЕсли; + + ЦветНеактивныхЗначенийТаблицы = ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет; + + // Регистрация команд и реквизитов формы, которые не удаляются при перезаполнении быстрых настроек. + НаборРеквизитов = ПолучитьРеквизиты(); + Для Каждого Реквизит Из НаборРеквизитов Цикл + ПостоянныеРеквизиты.Добавить(ПолноеИмяРеквизита(Реквизит)); + КонецЦикла; + Для Каждого Команда Из Команды Цикл + ПостоянныеКоманды.Добавить(Команда.Имя); + КонецЦикла; + + ДобавитьУсловноеОформление(); + + НеобходимоОбновитьНастройки = Истина; + + Отчеты.УниверсальныйОтчет.ИнициализироватьОтчет(Отчет.КомпоновщикНастроек, Ложь, УникальныйИдентификатор, Параметры.Вариант); + +КонецПроцедуры + +&НаСервере +Процедура ПередЗагрузкойВариантаНаСервере(НовыеНастройкиКД) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Если ТипЗнч(ФормаПараметры.Отбор) = Тип("Структура") Тогда + ОтчетыСервер.УстановитьФиксированныеОтборы(ФормаПараметры.Отбор, НовыеНастройкиКД, НастройкиОтчета); + КонецЕсли; + + НеобходимоОбновитьНастройки = Истина; + + // Подготовка к вызову события переинициализации. + Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда + Попытка + НовыеНастройкиXML = ОбщегоНазначения.ЗначениеВСтрокуXML(НовыеНастройкиКД); + Исключение + НовыеНастройкиXML = Неопределено; + КонецПопытки; + НастройкиОтчета.Вставить("НовыеНастройкиXML", НовыеНастройкиXML); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ПередЗагрузкойПользовательскихНастроекНаСервере(НовыеПользовательскиеНастройкиКД) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + НеобходимоОбновитьНастройки = Истина; + + // Подготовка к вызову события переинициализации. + Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда + Попытка + НовыеПользовательскиеНастройкиXML = ОбщегоНазначения.ЗначениеВСтрокуXML(НовыеПользовательскиеНастройкиКД); + Исключение + НовыеПользовательскиеНастройкиXML = Неопределено; + КонецПопытки; + НастройкиОтчета.Вставить("НовыеПользовательскиеНастройкиXML", НовыеПользовательскиеНастройкиXML); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ПриОбновленииСоставаПользовательскихНастроекНаСервере(СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + СтандартнаяОбработка = Ложь; + ВариантМодифицирован = Ложь; + + Если НеобходимоОбновитьНастройки Тогда + НеобходимоОбновитьНастройки = Ложь; + + ПараметрыЗаполнения = Новый Структура; + ПараметрыЗаполнения.Вставить("ИмяСобытия", "ПриСозданииНаСервере"); + Если Не РежимИзмененияУзлаВарианта И РасширенныйРежим = 1 Тогда + ПараметрыЗаполнения.Вставить("ОбновитьНастройкиВарианта", Истина); + КонецЕсли; + РезультатЗаполненияНастроек = БыстрыеНастройкиЗаполнить(ПараметрыЗаполнения); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + ПеременныеКлиента = Новый Структура; + ПоказатьРезультатЗаполненияНастроек(Неопределено); +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + ВариантМодифицирован = Ложь; +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии() + Если Не РезультатВыбораСформирован Тогда + Если ОписаниеОповещенияОЗакрытии <> Неопределено Тогда + ВыполнитьОбработкуОповещения(ОписаниеОповещенияОЗакрытии, РезультатВыбора(Ложь)); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// ЭЛЕМЕНТЫ + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура РасширенныйРежимПриИзменении(Элемент) + ПараметрыЗаполнения = Новый Структура; + ПараметрыЗаполнения.Вставить("ИмяСобытия", "РасширенныйРежимПриИзменении"); + Если РасширенныйРежим = 1 Тогда + ПараметрыЗаполнения.Вставить("ОбновитьНастройкиВарианта", Истина); + Иначе + ПараметрыЗаполнения.Вставить("СброситьПользовательскиеНастройки", Истина); + КонецЕсли; + БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения); +КонецПроцедуры + +&НаКлиенте +Процедура ПодсказкаНетПользовательскихНастроекОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + РасширенныйРежим = Истина; + РасширенныйРежимПриИзменении(Неопределено); +КонецПроцедуры + +&НаКлиенте +Процедура ТекущийУзелКДТипДиаграммыПриИзменении(Элемент) + КорневойУзелКД = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторТекущегоУзлаКД); + Если ТипЗнч(КорневойУзелКД) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + КорневойУзелКД = КорневойУзелКД.Настройки; + КонецЕсли; + УстановитьПараметрВывода(КорневойУзелКД, "ТипДиаграммы", ТекущийУзелКДТипДиаграммы); + + ПользовательскиеНастройкиМодифицированы = Истина; + ВариантМодифицирован = Ложь; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПодсказкаЕстьВложенныеОтчетыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + ПараметрыФормы = Новый Структура; + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыФормы, ФормаПараметры, Истина); + ПараметрыФормы.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки); + ПараметрыФормы.Вставить("КлючВарианта", Строка(КлючТекущегоВарианта)); + ПараметрыФормы.Вставить("ПользовательскиеНастройки", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + ПараметрыФормы.Вставить("ПредставлениеВарианта", ВариантНаименование); + ПараметрыФормы.Вставить("ПредставлениеПользовательскихНастроек", ""); + + Обработчик = Новый ОписаниеОповещения("ФормаВариантаЗавершение", ЭтотОбъект); + + Режим = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + + ОткрытьФорму(НастройкиОтчета.ПолноеИмя + ".ФормаВарианта", ПараметрыФормы, ЭтотОбъект, , , , Обработчик, Режим); +КонецПроцедуры + +&НаКлиенте +Процедура ФормаВариантаЗавершение(Результат, ПараметрыВыполнения) Экспорт + Если ТипЗнч(Результат) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + БыстрыеНастройкиЗаполнитьКлиент(Результат); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Подключаемые + +&НаКлиенте +Процедура Подключаемый_ФлажокИспользование_ПриИзменении(Элемент) + ФлажокИмя = Элемент.Имя; + ИдентификаторЭлемента = Прав(ФлажокИмя, 32); + Тип = Лев(ФлажокИмя, СтрНайти(ФлажокИмя, "_")-1); + + ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + + Если Тип = "ЭлементОтбора" Или Тип = "ЗначениеПараметра" Тогда + ТаблицаИмя = Тип + "_СписокЗначений_" + ИдентификаторЭлемента; + ТаблицаФормы = Элементы.Найти(ТаблицаИмя); + Если ТаблицаФормы <> Неопределено Тогда + ТаблицаФормы.ЦветТекста = ?(ПользовательскаяНастройкаКД.Использование, Новый Цвет, ЦветНеактивныхЗначенийТаблицы); + КонецЕсли; + КонецЕсли; + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + Найденные = НайтиНастройкуВарианта(ЭтотОбъект, ИдентификаторЭлемента); + Если Найденные <> Неопределено Тогда + Найденные.ЭлементКД.Использование = ПользовательскаяНастройкаКД.Использование; + ВариантИзменен = Истина; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПолеВвода_ПриИзменении(Элемент) + ИдентификаторЭлемента = Прав(Элемент.Имя, 32); + + ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + Значение = ПользовательскаяНастройкаКД.Значение; + ИначеЕсли ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Значение = ПользовательскаяНастройкаКД.ПравоеЗначение; + Иначе + Возврат; + КонецЕсли; + + Если ЗначениеЗаполнено(Значение) Тогда + ПользовательскаяНастройкаКД.Использование = Истина; + КонецЕсли; + + Если ПользовательскаяНастройкаКД.Использование Тогда // Очистка значений при изменении значения. + Найденные = ОтключаемыеСвязи.НайтиСтроки(Новый Структура("ВедущийИдентификаторВФорме", ИдентификаторЭлемента)); + Для Каждого Связь Из Найденные Цикл + Если Не ЗначениеЗаполнено(Связь.ПодчиненныйИдентификаторВФорме) Тогда + Продолжить; + КонецЕсли; + Если Связь.ТипСвязи = "ПараметровВыбора" Тогда + Если Связь.ПодчиненныйДействие <> РежимИзмененияСвязанногоЗначения.Очищать Тогда + Продолжить; + КонецЕсли; + Иначе + Продолжить; + КонецЕсли; + ПодчиненныйДополнительно = НайтиДополнительныеНастройкиЭлемента(Связь.ПодчиненныйИдентификаторВФорме); + Если ПодчиненныйДополнительно <> Неопределено Тогда + Если ПодчиненныйДополнительно.ВыводитьФлажок Тогда + ПодчиненныйНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(Связь.ПодчиненныйИдентификаторВФорме); + Если ПодчиненныйНастройкаКД <> Неопределено Тогда + ПодчиненныйНастройкаКД.Использование = Ложь; + КонецЕсли; + КонецЕсли; + Если Не ПодчиненныйДополнительно.ОграничиватьВыборУказаннымиЗначениями Тогда + ПодчиненныйДополнительно.ЗначенияДляВыбора.Очистить(); + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ПользовательскиеНастройкиМодифицированы = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ФлажокЗначения_ПриИзменении(Элемент) + ИдентификаторЭлемента = Прав(Элемент.Имя, 32); + Значение = ЭтотОбъект[Элемент.Имя]; + + ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ПользовательскаяНастройкаКД.Значение = Значение; + Иначе + ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; + КонецЕсли; + + ПользовательскиеНастройкиМодифицированы = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СписокКомпоновщика_НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ОтчетыКлиент.СписокКомпоновщикаНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ЗначениеКомпоновщика_НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ОтчетыКлиент.ЗначениеКомпоновщикаНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Подключаемые - Стандартный период. + +&НаКлиенте +Процедура Подключаемый_СтандартныйПериод_НачалоПериода_ПриИзменении(Элемент) + // Формирование сведений по элементу. + ПериодНачалоИмя = Элемент.Имя; + ЗначениеИмя = СтрЗаменить(ПериодНачалоИмя, "_Начало_", "_Значение_"); + ИдентификаторЭлемента = Прав(ПериодНачалоИмя, 32); + + Значение = ЭтотОбъект[ЗначениеИмя]; + Заполнено = ЗначениеЗаполнено(Значение.ДатаНачала); + Если Заполнено Тогда + Значение.ДатаНачала = НачалоДня(Значение.ДатаНачала); + КонецЕсли; + + // Запись значения в пользовательские настройки компоновки данных. + ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ПользовательскаяНастройкаКД.Значение = Значение; + Иначе + ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; + КонецЕсли; + Если Заполнено Тогда + ПользовательскаяНастройкаКД.Использование = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СтандартныйПериод_КонецПериода_ПриИзменении(Элемент) + // Формирование сведений по элементу. + ПериодОкончаниеИмя = Элемент.Имя; + ЗначениеИмя = СтрЗаменить(ПериодОкончаниеИмя, "_Окончание_", "_Значение_"); + ИдентификаторЭлемента = Прав(ПериодОкончаниеИмя, 32); + + Значение = ЭтотОбъект[ЗначениеИмя]; + Заполнено = ЗначениеЗаполнено(Значение.ДатаОкончания); + Если Заполнено Тогда + Значение.ДатаОкончания = КонецДня(Значение.ДатаОкончания); + КонецЕсли; + + // Запись значения в пользовательские настройки компоновки данных. + ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ПользовательскаяНастройкаКД.Значение = Значение; + Иначе + ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; + КонецЕсли; + Если Заполнено Тогда + ПользовательскаяНастройкаКД.Использование = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ВыбратьПериод(Команда) + КнопкаВыбораИмя = Команда.Имя; + ЗначениеИмя = СтрЗаменить(КнопкаВыбораИмя, "_КнопкаВыбора_", "_Значение_"); + ИдентификаторЭлемента = Прав(КнопкаВыбораИмя, 32); + ОтчетыКлиент.ВыбратьПериод(ЭтотОбъект, ЗначениеИмя, ИдентификаторЭлемента); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Подключаемые - Список значений с кнопкой "Подбор". + +&НаКлиенте +Процедура Подключаемый_СписокСПодбором_ПриИзменении(ТаблицаФормы) + // Обновление выбранных значений в данных СКД. + ИдентификаторЭлемента = Прав(ТаблицаФормы.Имя, 32); + + СписокЗначенийВФорме = ЭтотОбъект[ТаблицаФормы.Имя]; + ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + ДополнительныеНастройки = НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента); + + СписокЗначенийВСКД = Новый СписокЗначений; + Если Не ДополнительныеНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда + ДополнительныеНастройки.ЗначенияДляВыбора = Новый СписокЗначений; + КонецЕсли; + Для Каждого ЭлементСпискаВФорме Из СписокЗначенийВФорме Цикл + ЗначениеВФорме = ЭлементСпискаВФорме.Значение; + Если Не ДополнительныеНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда + Если ДополнительныеНастройки.ЗначенияДляВыбора.НайтиПоЗначению(ЗначениеВФорме) <> Неопределено Тогда + Продолжить; + КонецЕсли; + ЗаполнитьЗначенияСвойств(ДополнительныеНастройки.ЗначенияДляВыбора.Добавить(), ЭлементСпискаВФорме); + КонецЕсли; + Если ЭлементСпискаВФорме.Пометка Тогда + СписокЗначенийВСКД.Добавить(ЗначениеВФорме); + КонецЕсли; + КонецЦикла; + Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ПользовательскаяНастройкаКД.ПравоеЗначение = СписокЗначенийВСКД; + Иначе + ПользовательскаяНастройкаКД.Значение = СписокЗначенийВСКД; + КонецЕсли; + + // Включение флажка Использование. + ПользовательскаяНастройкаКД.Использование = Истина; + ТаблицаФормы.ЦветТекста = ?(ПользовательскаяНастройкаКД.Использование, Новый Цвет, ЦветНеактивныхЗначенийТаблицы); + + ПользовательскиеНастройкиМодифицированы = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СписокСПодбором_Значение_АвтоПодбор(Элемент, Текст, ДанныеВыбора, Параметры, Ожидание, СтандартнаяОбработка) + Если Параметры = Неопределено Тогда + Возврат; + КонецЕсли; + + ИдентификаторЭлемента = Прав(Элемент.Имя, 32); + + // Добавление динамических параметров выбора (от ведущих). + Найденные = ОтключаемыеСвязи.НайтиСтроки(Новый Структура("ПодчиненныйИдентификаторВФорме", ИдентификаторЭлемента)); + Для Каждого Связь Из Найденные Цикл + Если Не ЗначениеЗаполнено(Связь.ВедущийИдентификаторВФорме) + Или Не ЗначениеЗаполнено(Связь.ПодчиненныйИмяПараметра) Тогда + Продолжить; + КонецЕсли; + ВедущийНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(Связь.ВедущийИдентификаторВФорме); + Если Не ВедущийНастройкаКД.Использование Тогда + Продолжить; + КонецЕсли; + Если ТипЗнч(ВедущийНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ВедущийЗначение = ВедущийНастройкаКД.ПравоеЗначение; + Иначе + ВедущийЗначение = ВедущийНастройкаКД.Значение; + КонецЕсли; + Если Связь.ТипСвязи = "ПараметровВыбора" Тогда + МассивКлючей = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Связь.ПодчиненныйИмяПараметра, ".", Истина, Истина); + ВГраница = МассивКлючей.ВГраница(); + Контекст = Параметры; + Для Индекс = 0 По ВГраница Цикл + Ключ = МассивКлючей[Индекс]; + Если Индекс = ВГраница Тогда + Контекст.Вставить(Ключ, ВедущийЗначение); + Иначе + ВложенныйКонтекст = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Контекст, Ключ); + Если ВложенныйКонтекст = Неопределено Тогда + ВложенныйКонтекст = Контекст.Вставить(Ключ, Новый Структура); + ИначеЕсли ТипЗнч(ВложенныйКонтекст) <> Тип("Структура") Тогда + Прервать; + КонецЕсли; + Контекст = ВложенныйКонтекст; + КонецЕсли; + КонецЦикла; + ИначеЕсли Связь.ТипСвязи = "ПоТипу" Тогда + ВедущийТип = ТипЗнч(ВедущийЗначение); + ДополнительныеНастройки = НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента); + Если ДополнительныеНастройки <> Неопределено + И ДополнительныеНастройки.ОписаниеТипов.СодержитТип(ВедущийТип) + И ДополнительныеНастройки.ОписаниеТипов.Типы().Количество() > 1 Тогда + МассивТипов = Новый Массив; + МассивТипов.Добавить(ВедущийТип); + Элемент.ДоступныеТипы = Новый ОписаниеТипов(МассивТипов); + КонецЕсли; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СписокСПодбором_Использование_ПриИзменении(Элемент) + // Включение флажка Использование если пользователь включил флажок в строке таблицы. + КолонкаИспользованиеИмя = Элемент.Имя; + ИдентификаторЭлемента = Прав(КолонкаИспользованиеИмя, 32); + СвойстваНастройкиТип = Лев(КолонкаИспользованиеИмя, СтрНайти(КолонкаИспользованиеИмя, "_Колонка_Использование_")-1); + + ТаблицаИмя = СвойстваНастройкиТип + "_СписокЗначений_" + ИдентификаторЭлемента; + + ЭлементСпискаВФорме = Элементы[ТаблицаИмя].ТекущиеДанные; + Если ЭлементСпискаВФорме <> Неопределено И ЭлементСпискаВФорме.Пометка Тогда + // Включение флажка Использование. + ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + ПользовательскаяНастройкаКД.Использование = Истина; + + // Оформление строк. + ТаблицаФормы = Элементы.Найти(ТаблицаИмя); + ТаблицаФормы.ЦветТекста = ?(ПользовательскаяНастройкаКД.Использование, Новый Цвет, ЦветНеактивныхЗначенийТаблицы); + + ПользовательскиеНастройкиМодифицированы = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СписокСПодбором_ПередНачаломИзменения(Элемент, Отказ) + СтрокаИдентификатор = Элемент.ТекущаяСтрока; + Если СтрокаИдентификатор = Неопределено Тогда + Возврат; + КонецЕсли; + + СписокЗначенийВФорме = ЭтотОбъект[Элемент.Имя]; + ЭлементСпискаВФорме = СписокЗначенийВФорме.НайтиПоИдентификатору(СтрокаИдентификатор); + + ТекущаяСтрока = Элемент.ТекущиеДанные; + Если ТекущаяСтрока = Неопределено Тогда + Возврат; + КонецЕсли; + ЭлементСпискаДоНачалаИзменения = Новый Структура("Идентификатор, Пометка, Значение, Представление"); + ЗаполнитьЗначенияСвойств(ЭлементСпискаДоНачалаИзменения, ЭлементСпискаВФорме); + ЭлементСпискаДоНачалаИзменения.Идентификатор = СтрокаИдентификатор; + ПеременныеКлиента.Вставить("ЭлементСпискаДоНачалаИзменения", ЭлементСпискаДоНачалаИзменения); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СписокСПодбором_ПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаНачалаРедактирования, ОтменаЗавершенияРедактирования) + Если ОтменаНачалаРедактирования Тогда + Возврат; + КонецЕсли; + + СтрокаИдентификатор = Элемент.ТекущаяСтрока; + Если СтрокаИдентификатор = Неопределено Тогда + Возврат; + КонецЕсли; + ИдентификаторЭлемента = Прав(Элемент.Имя, 32); + СписокЗначенийВФорме = ЭтотОбъект[Элемент.Имя]; + ЭлементСпискаВФорме = СписокЗначенийВФорме.НайтиПоИдентификатору(СтрокаИдентификатор); + + Значение = ЭлементСпискаВФорме.Значение; + Если Значение = Неопределено + Или Значение = Тип("Неопределено") + Или Значение = Новый ОписаниеТипов("Неопределено") + Или Не ЗначениеЗаполнено(Значение) Тогда + ОтменаЗавершенияРедактирования = Истина; // Запрет пустых значений. + Иначе + Для Каждого ЭлементСпискаДубльВФорме Из СписокЗначенийВФорме Цикл + Если ЭлементСпискаДубльВФорме.Значение = Значение И ЭлементСпискаДубльВФорме <> ЭлементСпискаВФорме Тогда + Состояние(НСтр("ru = 'Обнаружены дублирующиеся записи. Редактирование отменено.'")); + ОтменаЗавершенияРедактирования = Истина; // Запрет дублей. + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ЭлементСпискаДоНачалаИзменения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПеременныеКлиента, "ЭлементСпискаДоНачалаИзменения"); + ЕстьИнформация = (ЭлементСпискаДоНачалаИзменения <> Неопределено И ЭлементСпискаДоНачалаИзменения.Идентификатор = СтрокаИдентификатор); + Если Не ОтменаЗавершенияРедактирования И ЕстьИнформация И ЭлементСпискаДоНачалаИзменения.Значение <> Значение Тогда + ДополнительныеНастройки = НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента); + Если ДополнительныеНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда + ОтменаЗавершенияРедактирования = Истина; + Иначе + ЭлементСпискаВФорме.Представление = ""; // Автозаполнение представления. + ЭлементСпискаВФорме.Пометка = Истина; // Включение флажка. + КонецЕсли; + КонецЕсли; + + Если ОтменаЗавершенияРедактирования Тогда + // Откат значений. + Если ЕстьИнформация Тогда + ЗаполнитьЗначенияСвойств(ЭлементСпискаВФорме, ЭлементСпискаДоНачалаИзменения); + КонецЕсли; + // Перезапуск события "ПередОкончаниемРедактирования" с ОтменаНачалаРедактирования = Истина. + Элемент.ЗакончитьРедактированиеСтроки(Истина); + Иначе + Если НоваяСтрока Тогда + ЭлементСпискаВФорме.Пометка = Истина; // Включение флажка. + КонецЕсли; + ПользовательскиеНастройкиМодифицированы = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СписокСПодбором_Подбор(Команда) + КнопкаПодборИмя = Команда.Имя; + + ИдентификаторЭлемента = Прав(КнопкаПодборИмя, 32); + СвойстваНастройкиТип = Лев(КнопкаПодборИмя, СтрНайти(КнопкаПодборИмя, "_Подбор_")-1); + + ТаблицаИмя = СвойстваНастройкиТип + "_СписокЗначений_" + ИдентификаторЭлемента; + КолонкаЗначениеИмя = СвойстваНастройкиТип + "_Колонка_Значение_" + ИдентификаторЭлемента; + КнопкаПодборИмя = СвойстваНастройкиТип + "_Подбор_" + ИдентификаторЭлемента; + + ТаблицаЗначение = ЭтотОбъект[ТаблицаИмя]; + КолонкаЗначениеЭлемент = Элементы[КолонкаЗначениеИмя]; + + ОписаниеТипов = ТаблицаЗначение.ТипЗначения; + + ПараметрыЭлемента = Новый Структура; + ПараметрыЭлемента.Вставить("ИдентификаторЭлемента", ИдентификаторЭлемента); + ПараметрыЭлемента.Вставить("ВыбранныйТип", Неопределено); + ПараметрыЭлемента.Вставить("КолонкаЗначениеЭлемент", КолонкаЗначениеЭлемент); + ПараметрыЭлемента.Вставить("ТаблицаЭлемент", Элементы[ТаблицаИмя]); + ПараметрыЭлемента.Вставить("ВыборТолькоГрупп", КолонкаЗначениеЭлемент.ВыборГруппИЭлементов = ГруппыИЭлементы.Группы); + ПараметрыЭлемента.Вставить("ПараметрыВыбора", Новый Массив); + + Найденные = ОтключаемыеСвязи.НайтиСтроки(Новый Структура("ПодчиненныйИдентификаторВФорме", ИдентификаторЭлемента)); + Для Каждого Связь Из Найденные Цикл + Если Не ЗначениеЗаполнено(Связь.ВедущийИдентификаторВФорме) + Или Не ЗначениеЗаполнено(Связь.ПодчиненныйИмяПараметра) Тогда + Продолжить; + КонецЕсли; + ВедущийНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(Связь.ВедущийИдентификаторВФорме); + Если Не ВедущийНастройкаКД.Использование Тогда + Продолжить; + КонецЕсли; + Если ТипЗнч(ВедущийНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ВедущийЗначение = ВедущийНастройкаКД.ПравоеЗначение; + Иначе + ВедущийЗначение = ВедущийНастройкаКД.Значение; + КонецЕсли; + Если Связь.ТипСвязи = "ПараметровВыбора" Тогда + ПараметрыЭлемента.ПараметрыВыбора.Добавить(Новый ПараметрВыбора(Связь.ПодчиненныйИмяПараметра, ВедущийЗначение)); + ИначеЕсли Связь.ТипСвязи = "ПоТипу" Тогда + ТипВедущего = ТипЗнч(ВедущийЗначение); + Если ОписаниеТипов.СодержитТип(ТипВедущего) Тогда + ПараметрыЭлемента.ВыбранныйТип = ТипВедущего; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если ПараметрыЭлемента.ВыбранныйТип <> Неопределено Тогда // Тип определен ведущим. + Подключаемый_СписокСПодбором_Подбор_ОткрытьФормуВыбора(-1, ПараметрыЭлемента); + Возврат; + КонецЕсли; + + // Выбор типа из списка. + СписокВыбора = Новый СписокЗначений; + + ПростыеТипы = Новый Соответствие; + ПростыеТипы.Вставить(Тип("Строка"), Истина); + ПростыеТипы.Вставить(Тип("Дата"), Истина); + ПростыеТипы.Вставить(Тип("Число"), Истина); + + МассивТипов = ОписаниеТипов.Типы(); + Для Каждого Тип Из МассивТипов Цикл + // Исключение типов, для которых нет групп. + Если ПараметрыЭлемента.ВыборТолькоГрупп Тогда + ИмяОбъектаМетаданных = БыстрыйПоискИменОбъектовМетаданных.Получить(Тип); + ВидОбъектаМетаданных = ВРег(Лев(ИмяОбъектаМетаданных, СтрНайти(ИмяОбъектаМетаданных, ".")-1)); + Если ВидОбъектаМетаданных <> "СПРАВОЧНИК" И ВидОбъектаМетаданных <> "ПЛАНВИДОВХАРАКТЕРИСТИК" И ВидОбъектаМетаданных <> "ПЛАНСЧЕТОВ" Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + // Исключение простых типов. + Если ПростыеТипы[Тип] = Истина Тогда + Продолжить; + КонецЕсли; + // Добавление типа в список выбора. + СписокВыбора.Добавить(Тип, Строка(Тип)); + КонецЦикла; + + Если СписокВыбора.Количество() = 0 Тогда + ПараметрыЭлемента.ТаблицаЭлемент.ДобавитьСтроку(); + Возврат; + ИначеЕсли СписокВыбора.Количество() = 1 Тогда + // Один тип - выбор не требуется. + ПараметрыЭлемента.ВыбранныйТип = СписокВыбора[0].Значение; + Подключаемый_СписокСПодбором_Подбор_ОткрытьФормуВыбора(-1, ПараметрыЭлемента); + Иначе + // Более одного типа. + Обработчик = Новый ОписаниеОповещения("Подключаемый_СписокСПодбором_Подбор_ОткрытьФормуВыбора", ЭтотОбъект, ПараметрыЭлемента); + ПоказатьВыборИзМеню(Обработчик, СписокВыбора, Элементы[КнопкаПодборИмя]); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СписокСПодбором_Подбор_ОткрытьФормуВыбора(ВыбранныйЭлемент, ПараметрыЭлемента) Экспорт + Если ВыбранныйЭлемент = Неопределено Тогда + Возврат; + ИначеЕсли ВыбранныйЭлемент <> -1 Тогда + ПараметрыЭлемента.ВыбранныйТип = ВыбранныйЭлемент.Значение; + КонецЕсли; + + КолонкаЗначениеЭлемент = ПараметрыЭлемента.КолонкаЗначениеЭлемент; + + // Полное имя формы выбора. + // Свойство "ФормаВыбора" недоступно на клиенте даже для чтения, + // поэтому для хранения предустановленных имен форм выбора используется коллекция БыстрыйПоискИменОбъектовМетаданных. + ПутьКФорме = БыстрыйПоискИменОбъектовМетаданных.Получить(ПараметрыЭлемента.ИдентификаторЭлемента); + Если Не ЗначениеЗаполнено(ПутьКФорме) Тогда + ИмяОбъектаМетаданных = БыстрыйПоискИменОбъектовМетаданных.Получить(ПараметрыЭлемента.ВыбранныйТип); + Если ПараметрыЭлемента.ВыборТолькоГрупп Тогда + ВидОбъектаМетаданных = ВРег(Лев(ИмяОбъектаМетаданных, СтрНайти(ИмяОбъектаМетаданных, ".")-1)); + Если ВидОбъектаМетаданных = "СПРАВОЧНИК" Или ВидОбъектаМетаданных = "ПЛАНВИДОВХАРАКТЕРИСТИК" Тогда + ПутьКФорме = ИмяОбъектаМетаданных + ".ФормаВыбораГруппы"; + Иначе + ПутьКФорме = ИмяОбъектаМетаданных + ".ФормаВыбора"; + КонецЕсли; + Иначе + ПутьКФорме = ИмяОбъектаМетаданных + ".ФормаВыбора"; + КонецЕсли; + КонецЕсли; + + ВыборГруппИЭлементов = ОтчетыКлиентСервер.ПривестиЗначениеКТипуИспользованиеГруппИЭлементов(КолонкаЗначениеЭлемент.ВыборГруппИЭлементов); + + ПараметрыФормыВыбора = Новый Структура; + // Стандартные параметры формы. + ПараметрыФормыВыбора.Вставить("ЗакрыватьПриВыборе", Ложь); + ПараметрыФормыВыбора.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина); + ПараметрыФормыВыбора.Вставить("Отбор", Новый Структура); + // Стандартные параметры формы выбора (см. Расширение управляемой формы для динамического списка). + ПараметрыФормыВыбора.Вставить("ВыборГруппИЭлементов", ВыборГруппИЭлементов); + ПараметрыФормыВыбора.Вставить("МножественныйВыбор", Истина); + ПараметрыФормыВыбора.Вставить("РежимВыбора", Истина); + // Предполагаемые реквизиты. + ПараметрыФормыВыбора.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ПараметрыФормыВыбора.Вставить("РазрешитьНачалоПеретаскивания", Ложь); + + // Добавление фиксированных параметров выбора. + Для Каждого ПараметрВыбора Из КолонкаЗначениеЭлемент.ПараметрыВыбора Цикл + Если ПустаяСтрока(ПараметрВыбора.Имя) Тогда + Продолжить; + КонецЕсли; + Если ЗначениеЗаполнено(ПараметрВыбора.Имя) Тогда + Если ВРег(Лев(ПараметрВыбора.Имя, 6)) = ВРег("Отбор.") Тогда + ПараметрыФормыВыбора.Отбор.Вставить(Сред(ПараметрВыбора.Имя, 7), ПараметрВыбора.Значение); + Иначе + ПараметрыФормыВыбора.Вставить(ПараметрВыбора.Имя, ПараметрВыбора.Значение); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + // Добавление динамических параметров выбора (от ведущих). Для обратной совместимости. + Для Каждого СвязьПараметраВыбора Из КолонкаЗначениеЭлемент.СвязиПараметровВыбора Цикл + Если ПустаяСтрока(СвязьПараметраВыбора.Имя) Тогда + Продолжить; + КонецЕсли; + ВедущийЗначение = ЭтотОбъект[СвязьПараметраВыбора.ПутьКДанным]; + Если ВРег(Лев(СвязьПараметраВыбора.Имя, 6)) = ВРег("Отбор.") Тогда + ПараметрыФормыВыбора.Отбор.Вставить(Сред(СвязьПараметраВыбора.Имя, 7), ВедущийЗначение); + Иначе + ПараметрыФормыВыбора.Вставить(СвязьПараметраВыбора.Имя, ВедущийЗначение); + КонецЕсли; + КонецЦикла; + + // Добавление динамических параметров выбора (от ведущих). + Для Каждого ПараметрВыбора Из ПараметрыЭлемента.ПараметрыВыбора Цикл + Если ПустаяСтрока(ПараметрВыбора.Имя) Тогда + Продолжить; + КонецЕсли; + Если ЗначениеЗаполнено(ПараметрВыбора.Имя) Тогда + Если ВРег(Лев(ПараметрВыбора.Имя, 6)) = ВРег("Отбор.") Тогда + ПараметрыФормыВыбора.Отбор.Вставить(Сред(ПараметрВыбора.Имя, 7), ПараметрВыбора.Значение); + Иначе + ПараметрыФормыВыбора.Вставить(ПараметрВыбора.Имя, ПараметрВыбора.Значение); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + ОткрытьФорму(ПутьКФорме, ПараметрыФормыВыбора, ПараметрыЭлемента.ТаблицаЭлемент); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СписокСПодбором_ОбработкаВыбора(Элемент, РезультатВыбора, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + + // Списки в данных формы. + ТаблицаИмя = Элемент.Имя; + ИдентификаторЭлемента = Прав(Элемент.Имя, 32); + СписокЗначенийВФорме = ЭтотОбъект[Элемент.Имя]; + ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + + Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + СписокЗначенийВСКД = ПользовательскаяНастройкаКД.Значение; + Иначе + СписокЗначенийВСКД = ПользовательскаяНастройкаКД.ПравоеЗначение; + КонецЕсли; + СписокЗначенийВСКД = ОтчетыКлиентСервер.ЗначенияСписком(СписокЗначенийВСКД); + + Выбранные = ОтчетыКлиентСервер.ЗначенияСписком(РезультатВыбора); + Выбранные.ЗаполнитьПометки(Истина); + + Дополнение = ОтчетыКлиентСервер.ДополнитьСписок(СписокЗначенийВСКД, Выбранные, Ложь, Истина); + ОтчетыКлиентСервер.ДополнитьСписок(СписокЗначенийВФорме, Выбранные, Ложь, Истина); + + // Включение флажка Использование. + ПользовательскаяНастройкаКД.Использование = Истина; + + Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ПользовательскаяНастройкаКД.Значение = СписокЗначенийВСКД; + Иначе + ПользовательскаяНастройкаКД.ПравоеЗначение = СписокЗначенийВСКД; + КонецЕсли; + + // Оформление строк. + ТаблицаФормы = Элементы.Найти(ТаблицаИмя); + ТаблицаФормы.ЦветТекста = ?(ПользовательскаяНастройкаКД.Использование, Новый Цвет, ЦветНеактивныхЗначенийТаблицы); + + ПользовательскиеНастройкиМодифицированы = Истина; + + Если Дополнение.Всего > 0 Тогда + Результат = Новый Структура; + Если Дополнение.Всего = 1 Тогда + ЗаголовокОповещения = НСтр("ru = 'Элемент добавлен в список'"); + Иначе + ЗаголовокОповещения = НСтр("ru = 'Элементы добавлены в список'"); + КонецЕсли; + СтандартныеПодсистемыКлиентСервер.ВывестиОповещение( + Результат, + ЗаголовокОповещения, + Строка(Выбранные), + БиблиотекаКартинок.ВыполнитьЗадачу); + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СписокСПодбором_ВставитьИзБуфера(Команда) + КнопкаВставитьИмя = Команда.Имя; + + ИдентификаторЭлемента = Прав(КнопкаВставитьИмя, 32); + СвойстваНастройкиТип = Лев(КнопкаВставитьИмя, СтрНайти(КнопкаВставитьИмя, "_")-1); + + ТаблицаИмя = СвойстваНастройкиТип + "_СписокЗначений_" + ИдентификаторЭлемента; + КолонкаЗначениеИмя = СвойстваНастройкиТип + "_Колонка_Значение_" + ИдентификаторЭлемента; + + Список = ЭтотОбъект[ТаблицаИмя]; + СписокЭлемент = Элементы[ТаблицаИмя]; + КолонкаЗначениеЭлемент = Элементы[КолонкаЗначениеИмя]; + + ПараметрыПоиска = Новый Структура; + ПараметрыПоиска.Вставить("ОписаниеТипов", ОписаниеТиповУдалитьПримитивные(Список.ТипЗначения)); + ПараметрыПоиска.Вставить("ПараметрыВыбора", КолонкаЗначениеЭлемент.ПараметрыВыбора); + ПараметрыПоиска.Вставить("ПредставлениеПоля", СписокЭлемент.Заголовок); + ПараметрыПоиска.Вставить("Сценарий", "ВставкаИзБуфераОбмена"); + + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("ИдентификаторЭлемента", ИдентификаторЭлемента); + ПараметрыВыполнения.Вставить("ТаблицаИмя", ТаблицаИмя); + Обработчик = Новый ОписаниеОповещения("Подключаемый_СписокСПодбором_ВставитьИзБуфера_Завершение", ЭтотОбъект, ПараметрыВыполнения); + + МодульЗагрузкаДанныхИзФайлаКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЗагрузкаДанныхИзФайлаКлиент"); + МодульЗагрузкаДанныхИзФайлаКлиент.ПоказатьФормуЗаполненияСсылок(ПараметрыПоиска, Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СписокСПодбором_ВставитьИзБуфера_Завершение(НайденныеОбъекты, ПараметрыВыполнения) Экспорт + Если НайденныеОбъекты = Неопределено Тогда + Возврат; + КонецЕсли; + + ИдентификаторЭлемента = ПараметрыВыполнения.ИдентификаторЭлемента; + + ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + ДополнительныеНастройки = НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента); + + Список = ЭтотОбъект[ПараметрыВыполнения.ТаблицаИмя]; + Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Отмеченные = ПользовательскаяНастройкаКД.ПравоеЗначение; + Иначе + Отмеченные = ПользовательскаяНастройкаКД.Значение; + КонецЕсли; + Для Каждого Значение Из НайденныеОбъекты Цикл + ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(Список, Значение, Неопределено, Истина); + ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(Отмеченные, Значение, Неопределено, Истина); + КонецЦикла; + + // Включение флажка Использование. + ПользовательскаяНастройкаКД.Использование = Истина; + + // Оформление строк. + ТаблицаФормы = Элементы.Найти(ПараметрыВыполнения.ТаблицаИмя); + ТаблицаФормы.ЦветТекста = ?(ПользовательскаяНастройкаКД.Использование, Новый Цвет, ЦветНеактивныхЗначенийТаблицы); + + ПользовательскиеНастройкиМодифицированы = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СписокСПодбором_Добавить(Команда) + + КнопкаПодборИмя = Команда.Имя; + + ИдентификаторЭлемента = Прав(КнопкаПодборИмя, 32); + СвойстваНастройкиТип = Лев(КнопкаПодборИмя, СтрНайти(КнопкаПодборИмя, "_Подбор_") - 1); + + ТаблицаИмя = СвойстваНастройкиТип + "_СписокЗначений_" + ИдентификаторЭлемента; + + Элементы[ТаблицаИмя].ДобавитьСтроку(); + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ФиксированныйСписок_ПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + Отказ = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ФиксированныйСписок_ПередУдалением(Элемент, Отказ) + Отказ = Истина; +КонецПроцедуры + +#КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// ТАБЛИЦА Сортировка + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСортировка + +&НаКлиенте +Процедура СортировкаВыбор(Элемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + СтрокаТаблицы = Элементы.Сортировка.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + Если СтрокаТаблицы.ТипНастройки = "ЭлементПорядка" Тогда + ИмяКолонки = Поле.Имя; + Если ИмяКолонки = "СортировкаПредставление" Тогда // Изменение поля + ТаблицыПолейИзменить("Сортировка", СтрокаИдентификатор, СтрокаТаблицы); + ИначеЕсли ИмяКолонки = "СортировкаНаправление" Тогда // Изменение порядка. + ТаблицыПолейИзменитьНаправлениеСортировки("Сортировка", СтрокаТаблицы, Неопределено); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СортировкаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + Отказ = Истина; + Обработчик = Новый ОписаниеОповещения("СортировкаПослеВыбораПоля", ЭтотОбъект); + ТаблицыПолейПоказатьВыборПоля("Сортировка", Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура СортировкаПослеВыбораПоля(ДоступноеПолеКД, ПараметрыВыполнения) Экспорт + Если ДоступноеПолеКД = Неопределено Тогда + Возврат; + КонецЕсли; + + Результат = ТаблицыПолейВставить("Сортировка", Тип("ЭлементПорядкаКомпоновкиДанных"), 0, Неопределено); + + ЭлементКД = Результат.ЭлементКД; + ЭлементКД.Использование = Истина; + ЭлементКД.Поле = ДоступноеПолеКД.Поле; + ЭлементКД.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; + + СтрокаТаблицы = Результат.СтрокаТаблицы; + СтрокаТаблицы.Использование = ЭлементКД.Использование; + СтрокаТаблицы.Представление = ДоступноеПолеКД.Заголовок; + СтрокаТаблицы.Направление = ЭлементКД.ТипУпорядочивания; + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура СортировкаПередУдалением(Элемент, Отказ) + ТаблицыПолейПередУдалением(Элемент.Имя, Отказ); +КонецПроцедуры + +&НаКлиенте +Процедура СортировкаИспользованиеПриИзменении(Элемент) + ТаблицыПолейИзменитьИспользование("Сортировка"); +КонецПроцедуры + +&НаКлиенте +Процедура Сортировка_ПоУбыванию(Команда) + ТаблицыПолейИзменитьНаправлениеСортировки("Сортировка", Неопределено, НаправлениеСортировкиКомпоновкиДанных.Убыв); +КонецПроцедуры + +&НаКлиенте +Процедура Сортировка_ПоВозрастанию(Команда) + ТаблицыПолейИзменитьНаправлениеСортировки("Сортировка", Неопределено, НаправлениеСортировкиКомпоновкиДанных.Возр); +КонецПроцедуры + +&НаКлиенте +Процедура Сортировка_ПереместитьВверх(Команда) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, СдвинутьСтроки"); + Сценарий.Вставить("Действие", "Переместить"); + Сценарий.Вставить("ТаблицаИмя", "Сортировка"); + Сценарий.Вставить("Направление", -1); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + +&НаКлиенте +Процедура Сортировка_ПереместитьВниз(Команда) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, СдвинутьСтроки"); + Сценарий.Вставить("Действие", "Переместить"); + Сценарий.Вставить("ТаблицаИмя", "Сортировка"); + Сценарий.Вставить("Направление", 1); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + +&НаКлиенте +Процедура Сортировка_УстановитьФлажки(Команда) + УстановитьФлажкиИспользованиеВоВсемДереве("Сортировка", Истина); +КонецПроцедуры + +&НаКлиенте +Процедура Сортировка_СнятьФлажки(Команда) + УстановитьФлажкиИспользованиеВоВсемДереве("Сортировка", Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура СортировкаНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, РазрешитьПеретаскивание) + Если Не ЗарегистрироватьНачалоПеретаскивания("Сортировка") Тогда + РазрешитьПеретаскивание = Ложь; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СортировкаПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ИдентификаторЦели, Поле) + СтандартнаяОбработка = Ложь; + ПроверитьВозможностьПеретаскивания("Сортировка", ИдентификаторЦели, ПараметрыПеретаскивания); +КонецПроцедуры + +&НаКлиенте +Процедура СортировкаПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ИдентификаторЦели, Поле) + // Возникает в приемнике при окончании перетаскивания когда все проверки пройдены. + СтандартнаяОбработка = Ложь; + ИсточникПеретаскивания = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПеременныеКлиента, "ИсточникПеретаскивания"); + Если ИсточникПеретаскивания = Неопределено Тогда + Возврат; + КонецЕсли; + Если ИсточникПеретаскивания.ТаблицаИмя = "Сортировка" Тогда + ПеретаскиваниеВПределахТаблицы(ИсточникПеретаскивания, ИдентификаторЦели); + ИначеЕсли ИсточникПеретаскивания.ТаблицаИмя = "ВыбранныеПоля" Тогда + ПеретаскиваниеВыбранныхПолейВСортировки(ИсточникПеретаскивания, ИдентификаторЦели); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СортировкаОкончаниеПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоля_Сортировка_Вправо(Команда) + ИсточникПеретаскивания = Неопределено; + Если Не ЗарегистрироватьНачалоПеретаскивания("ВыбранныеПоля", ИсточникПеретаскивания) Тогда + Возврат; + КонецЕсли; + ПеретаскиваниеВыбранныхПолейВСортировки(ИсточникПеретаскивания, Элементы.Сортировка.ТекущаяСтрока); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоля_Сортировка_Влево(Команда) + ИсточникПеретаскивания = Неопределено; + Если Не ЗарегистрироватьНачалоПеретаскивания("Сортировка", ИсточникПеретаскивания) Тогда + Возврат; + КонецЕсли; + ПеретаскиваниеСортировокВВыбранныеПоля(ИсточникПеретаскивания, Элементы.ВыбранныеПоля.ТекущаяСтрока); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоля_Сортировка_ВлевоВсе(Команда) + КорневаяСтрока = КорневаяСтрокаПоУмолчанию("Сортировка"); + ТаблицыПолейУдалить("Сортировка", КорневаяСтрока.ПолучитьЭлементы(), Истина); +КонецПроцедуры + +#КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// ТАБЛИЦА ВыбранныеПоля + +#Область ОбработчикиСобытийЭлементовТаблицыФормыВыбранныеПоля + +&НаКлиенте +Процедура ВыбранныеПоляВыбор(Элемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + СтрокаТаблицы = Элементы.ВыбранныеПоля.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + ИмяКолонки = Поле.Имя; + Если ИмяКолонки = "ВыбранныеПоляПредставление" Тогда // Изменение порядка. + Если СтрокаТаблицы.ТипНастройки = "ВыбранноеПоле" Тогда + ТаблицыПолейИзменить("ВыбранныеПоля", СтрокаИдентификатор, СтрокаТаблицы); + ИначеЕсли СтрокаТаблицы.ТипНастройки = "ГруппаВыбранныхПолей" Тогда + ТаблицыПолейИзменитьГруппу("ВыбранныеПоля", СтрокаИдентификатор, СтрокаТаблицы); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоляПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + Отказ = Истина; + Обработчик = Новый ОписаниеОповещения("ВыбранныеПоляПослеВыбораПоля", ЭтотОбъект); + ТаблицыПолейПоказатьВыборПоля("ВыбранныеПоля", Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоляПослеВыбораПоля(ДоступноеПолеКД, ПараметрыВыполнения) Экспорт + Если ДоступноеПолеКД = Неопределено Тогда + Возврат; + КонецЕсли; + + Результат = ТаблицыПолейВставить("ВыбранныеПоля", Тип("ВыбранноеПолеКомпоновкиДанных"), 0, Неопределено); + + ЭлементКД = Результат.ЭлементКД; + ЭлементКД.Использование = Истина; + ЭлементКД.Поле = ДоступноеПолеКД.Поле; + + СтрокаТаблицы = Результат.СтрокаТаблицы; + СтрокаТаблицы.Использование = ЭлементКД.Использование; + СтрокаТаблицы.Представление = ДоступноеПолеКД.Заголовок; + СтрокаТаблицы.ЭтоГруппа = Ложь; + СтрокаТаблицы.ИндексКартинки = 4; + СтрокаТаблицы.ПолеКД = ЭлементКД.Поле; + + ПослеИзмененияФлажкаИспользование("ВыбранныеПоля", СтрокаТаблицы, ЭлементКД); + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоляПередУдалением(Элемент, Отказ) + ТаблицыПолейПередУдалением(Элемент.Имя, Отказ); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоляИспользованиеПриИзменении(Элемент) + ТаблицыПолейИзменитьИспользование("ВыбранныеПоля"); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоля_ПереместитьВверх(Команда) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, СдвинутьСтроки"); + Сценарий.Вставить("Действие", "Переместить"); + Сценарий.Вставить("ТаблицаИмя", "ВыбранныеПоля"); + Сценарий.Вставить("Направление", -1); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоля_ПереместитьВниз(Команда) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, СдвинутьСтроки"); + Сценарий.Вставить("Действие", "Переместить"); + Сценарий.Вставить("ТаблицаИмя", "ВыбранныеПоля"); + Сценарий.Вставить("Направление", 1); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоля_Сгруппировать(Команда) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, ОтредактироватьГруппуПолей, СгруппироватьСтроки, ОбновитьФорму"); + Сценарий.Вставить("Действие", "Сгруппировать"); + Сценарий.Вставить("ТаблицаИмя", "ВыбранныеПоля"); + Сценарий.Вставить("ТипГруппыКД", Тип("ГруппаВыбранныхПолейКомпоновкиДанных")); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоля_Разгруппировать(Команда) + ТаблицыПолейРазгруппировать("ВыбранныеПоля"); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоля_УстановитьФлажки(Команда) + УстановитьФлажкиИспользованиеВоВсемДереве("ВыбранныеПоля", Истина); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоля_СнятьФлажки(Команда) + УстановитьФлажкиИспользованиеВоВсемДереве("ВыбранныеПоля", Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоляНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, РазрешитьПеретаскивание) + Если Не ЗарегистрироватьНачалоПеретаскивания("ВыбранныеПоля") Тогда + РазрешитьПеретаскивание = Ложь; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоляПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ИдентификаторЦели, Поле) + СтандартнаяОбработка = Ложь; + ПроверитьВозможностьПеретаскивания("ВыбранныеПоля", ИдентификаторЦели, ПараметрыПеретаскивания); +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоляПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ИдентификаторЦели, Поле) + // Возникает в приемнике при окончании перетаскивания когда все проверки пройдены. + СтандартнаяОбработка = Ложь; + ИсточникПеретаскивания = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПеременныеКлиента, "ИсточникПеретаскивания"); + Если ИсточникПеретаскивания = Неопределено Тогда + Возврат; + КонецЕсли; + Если ИсточникПеретаскивания.ТаблицаИмя = "ВыбранныеПоля" Тогда + ПеретаскиваниеВПределахТаблицы(ИсточникПеретаскивания, ИдентификаторЦели); + ИначеЕсли ИсточникПеретаскивания.ТаблицаИмя = "Сортировка" Тогда + ПеретаскиваниеСортировокВВыбранныеПоля(ИсточникПеретаскивания, ИдентификаторЦели); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоляОкончаниеПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; +КонецПроцедуры + +#КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// ТАБЛИЦА Отборы + +#Область ОбработчикиСобытийЭлементовТаблицыФормыОтборы + +&НаКлиенте +Процедура ОтборыВыбор(Элемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ИмяКолонки = Поле.Имя; + Если РасширенныйРежим <> 1 Тогда + Возврат; + КонецЕсли; + СтрокаТаблицы = Элементы.Отборы.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + Если СтрокаТаблицы.ЭтоРаздел Тогда + Возврат; + КонецЕсли; + + Если ИмяКолонки = "ОтборыПредставление" Тогда // Изменение порядка. + + Если СтрокаТаблицы.ЭтоПараметр Тогда + Возврат; + КонецЕсли; + Если СтрокаТаблицы.ЭтоГруппа Тогда + ТаблицыПолейИзменитьГруппу("Отборы", СтрокаИдентификатор, СтрокаТаблицы); + Иначе + ТаблицыПолейИзменить("Отборы", СтрокаИдентификатор, СтрокаТаблицы); + КонецЕсли; + + ИначеЕсли ИмяКолонки = "ОтборыИндексКартинкиДоступа" Тогда // Изменение быстрого доступа к отбору. + + ТаблицыПолейИзменитьУровеньДоступа("Отборы", СтрокаИдентификатор, Истина, Не СтрокаТаблицы.ЭтоПараметр); + + ИначеЕсли ИмяКолонки = "ОтборыЗначение" + Или ИмяКолонки = "ОтборыПредставлениеЗначения" Тогда + + Если СтрокаТаблицы.ЭтоГруппа Тогда + Возврат; + КонецЕсли; + Если СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.Заполнено + Или СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.НеЗаполнено Тогда + Возврат; + КонецЕсли; + + ЭтоПериод = (СтрокаТаблицы.ТипУсловия = Новый ОписаниеТипов("ПеречислениеСсылка.ДоступныеПериодыОтчета")); + Если ЭтоПериод Тогда + ОтборыПоказатьВыборПериода(СтрокаТаблицы); + Иначе + Если СтрокаТаблицы.ВводСписком Тогда + ОтборыПоказатьСписокСФлажками(СтрокаТаблицы); + ИначеЕсли СтрокаТаблицы.ФиксированныйСписокВыбора Тогда + ОтборыВыбратьЗначениеИзСписка(СтрокаТаблицы); + Иначе + ОтборыПоказатьВыборСсылки(СтрокаТаблицы, СтандартнаяОбработка); + КонецЕсли; + КонецЕсли; + + ИначеЕсли ИмяКолонки = "ОтборыУсловие" Тогда + + Если СтрокаТаблицы.ЭтоГруппа Тогда + Возврат; + КонецЕсли; + ЭтоПериод = (СтрокаТаблицы.ТипУсловия = Новый ОписаниеТипов("ПеречислениеСсылка.ДоступныеПериодыОтчета")); + Если ЭтоПериод Тогда + ОтборыПоказатьВыборПериода(СтрокаТаблицы); + Иначе + ОтборыВыбратьВидСравнения(СтрокаТаблицы); + КонецЕсли; + + ИначеЕсли ИмяКолонки = "ОтборыЗаголовок" Тогда + + СтандартнаяОбработка = Истина; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + Отказ = Истина; + Если РасширенныйРежим = 0 Тогда + Возврат; + КонецЕсли; + + Если Не РежимИзмененияУзлаВарианта Тогда + ТекущаяСтрока = Элементы.Отборы.ТекущиеДанные; + Если (ТекущаяСтрока = Неопределено) + Или (ТекущаяСтрока.ЭтоПараметр) + Или (ТекущаяСтрока.ЭтоРаздел И ТекущаяСтрока.ИдентификаторКД = "ПараметрыДанных") Тогда + ТекущаяСтрока = Отборы.ПолучитьЭлементы()[1]; + Элементы.Отборы.ТекущаяСтрока = ТекущаяСтрока.ПолучитьИдентификатор(); + КонецЕсли; + КонецЕсли; + + Обработчик = Новый ОписаниеОповещения("ОтборыПослеВыбораПоля", ЭтотОбъект); + ТаблицыПолейПоказатьВыборПоля("Отборы", Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыПослеВыбораПоля(ДоступноеПолеОтбораКД, ПараметрыВыполнения) Экспорт + Если ДоступноеПолеОтбораКД = Неопределено Тогда + Возврат; + КонецЕсли; + + Результат = ТаблицыПолейВставить("Отборы", Тип("ЭлементОтбораКомпоновкиДанных"), 0, Неопределено); + + ЭлементКД = Результат.ЭлементКД; + ЭлементКД.Использование = Истина; + ЭлементКД.ЛевоеЗначение = ДоступноеПолеОтбораКД.Поле; + ЭлементКД.ПравоеЗначение = ДоступноеПолеОтбораКД.Тип.ПривестиЗначение(); + ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный; + ЭлементКД.ИдентификаторПользовательскойНастройки = Строка(Новый УникальныйИдентификатор()); + + УстановитьМодифицированность(); + Обновить(); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыПередУдалением(Элемент, Отказ) + СтрокаТаблицы = Элемент.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + Если СтрокаТаблицы.ЭтоРаздел + Или СтрокаТаблицы.ЭтоПараметр Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + ТаблицыПолейПередУдалением(Элемент.Имя, Отказ); +КонецПроцедуры + +&НаКлиенте +Процедура Отборы_Сгруппировать(Команда) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, СгруппироватьСтроки, ОбновитьФорму"); + Сценарий.Вставить("Действие", "Сгруппировать"); + Сценарий.Вставить("ТаблицаИмя", "Отборы"); + Сценарий.Вставить("ТипГруппыКД", Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + +&НаКлиенте +Процедура Отборы_Разгруппировать(Команда) + ТаблицыПолейРазгруппировать("Отборы"); +КонецПроцедуры + +&НаКлиенте +Процедура Отборы_ПереместитьВверх(Команда) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, СдвинутьСтроки"); + Сценарий.Вставить("Действие", "Переместить"); + Сценарий.Вставить("ТаблицаИмя", "Отборы"); + Сценарий.Вставить("Направление", -1); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + +&НаКлиенте +Процедура Отборы_ПереместитьВниз(Команда) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, СдвинутьСтроки"); + Сценарий.Вставить("Действие", "Переместить"); + Сценарий.Вставить("ТаблицаИмя", "Отборы"); + Сценарий.Вставить("Направление", 1); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + +&НаКлиенте +Процедура Отборы_УстановитьФлажки(Команда) + УстановитьФлажкиИспользованиеВоВсемДереве("Отборы", Истина); +КонецПроцедуры + +&НаКлиенте +Процедура Отборы_СнятьФлажки(Команда) + УстановитьФлажкиИспользованиеВоВсемДереве("Отборы", Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыИспользованиеПриИзменении(Элемент) + ТаблицыПолейИзменитьИспользование("Отборы"); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыЗначениеПриИзменении(Элемент) + ТаблицыПолейИзменитьЗначение("Отборы"); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыЗаголовокПриИзменении(Элемент) + СтрокаТаблицы = Элементы.Отборы.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Отборы", СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ПустаяСтрока(СтрокаТаблицы.Заголовок) Тогда + СтрокаТаблицы.Заголовок = СтрокаТаблицы.Представление; + КонецЕсли; + СтрокаТаблицы.ЗаголовокПереопределен = (СтрокаТаблицы.Заголовок <> СтрокаТаблицы.Представление); + + Если Не СтрокаТаблицы.ЭтоПараметр Тогда + Если СтрокаТаблицы.ИндексКартинкиДоступа = 1 Или СтрокаТаблицы.ИндексКартинкиДоступа = 3 Тогда + ЭлементКД.Представление = "1"; + Иначе + ЭлементКД.Представление = ""; + КонецЕсли; + КонецЕсли; + Если СтрокаТаблицы.ЗаголовокПереопределен Тогда + ЭлементКД.ПредставлениеПользовательскойНастройки = СтрокаТаблицы.Заголовок; + Иначе + ЭлементКД.ПредставлениеПользовательскойНастройки = ""; + КонецЕсли; + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыПриАктивизацииСтроки(Элемент) + СтрокаТаблицы = Элементы.Отборы.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + МожноУдалятьИПеремещать = Истина; + Если СтрокаТаблицы.ЭтоРаздел + Или СтрокаТаблицы.ЭтоПараметр Тогда + МожноУдалятьИПеремещать = Ложь; + КонецЕсли; + + Элементы.Отборы_Удалить.Доступность = МожноУдалятьИПеремещать; + Элементы.Отборы_Удалить1.Доступность = МожноУдалятьИПеремещать; + Элементы.Отборы_Сгруппировать.Доступность = МожноУдалятьИПеремещать; + Элементы.Отборы_Сгруппировать1.Доступность = МожноУдалятьИПеремещать; + Элементы.Отборы_Разгруппировать.Доступность = МожноУдалятьИПеремещать; + Элементы.Отборы_Разгруппировать1.Доступность = МожноУдалятьИПеремещать; + Элементы.Отборы_ПереместитьВверх.Доступность = МожноУдалятьИПеремещать; + Элементы.Отборы_ПереместитьВверх1.Доступность = МожноУдалятьИПеремещать; + Элементы.Отборы_ПереместитьВниз.Доступность = МожноУдалятьИПеремещать; + Элементы.Отборы_ПереместитьВниз1.Доступность = МожноУдалятьИПеремещать; + + Если Не СтрокаТаблицы.ЭтоРаздел И Не СтрокаТаблицы.ЭтоГруппа Тогда + Элементы.ОтборыЗначение.ВыборГруппИЭлементов = ОтчетыКлиентСервер.ПривестиЗначениеКТипуГруппыИЭлементы( + СтрокаТаблицы.Условие, + СтрокаТаблицы.ВыборГруппИЭлементов); + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// ТАБЛИЦА СтруктураВарианта + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСтруктураВарианта + +&НаКлиенте +Процедура СтруктураВариантаПриАктивизацииСтроки(Элемент) + СтрокаТаблицы = Элементы.СтруктураВарианта.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + МожноДобавлятьВложенные = Истина; + МожноГруппировать = Истина; + МожноОткрывать = Истина; + МожноУдалятьИПеремещать = Истина; + МожноДобавлятьТаблицыИДиаграммы = Ложь; + + Родитель = СтрокаТаблицы.ПолучитьРодителя(); + РодителяМожноПеремещать = (Родитель <> Неопределено + И Родитель.Тип <> "Настройки" + И Родитель.Тип <> "КоллекцияЭлементовСтруктурыТаблицы" + И Родитель.Тип <> "КоллекцияЭлементовСтруктурыДиаграммы"); + ЕстьСоседние = ПолучитьЭлементы(СтруктураВарианта, Родитель).Количество() > 1; + + ЕстьПодчиненные = (СтрокаТаблицы.ПолучитьЭлементы().Количество() > 0); + Если СтрокаТаблицы.Тип = "Таблица" + Или СтрокаТаблицы.Тип = "Диаграмма" + Или СтрокаТаблицы.Тип = "НастройкиВложенногоОбъекта" Тогда + МожноОткрывать = Ложь; + МожноДобавлятьВложенные = Ложь; + ИначеЕсли СтрокаТаблицы.Тип = "Настройки" + Или СтрокаТаблицы.Тип = "КоллекцияЭлементовСтруктурыТаблицы" + Или СтрокаТаблицы.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" Тогда + МожноОткрывать = Ложь; + МожноУдалятьИПеремещать = Ложь; + МожноГруппировать = Ложь; + ИначеЕсли СтрокаТаблицы.Тип = "НастройкиВложенногоОбъекта" Тогда + МожноОткрывать = Ложь; + МожноГруппировать = Ложь; + КонецЕсли; + + Если СтрокаТаблицы.Тип = "Настройки" Или СтрокаТаблицы.Тип = "Группировка" Тогда + МожноДобавлятьТаблицыИДиаграммы = Истина; + КонецЕсли; + + Элементы.СтруктураВарианта_Добавить.Доступность = МожноДобавлятьВложенные; + Элементы.СтруктураВарианта_Добавить1.Доступность = МожноДобавлятьВложенные; + Элементы.СтруктураВарианта_Изменить.Доступность = МожноОткрывать; + Элементы.СтруктураВарианта_Изменить1.Доступность = МожноОткрывать; + Элементы.СтруктураВарианта_ДобавитьТаблицу.Доступность = МожноДобавлятьТаблицыИДиаграммы; + Элементы.СтруктураВарианта_ДобавитьТаблицу1.Доступность = МожноДобавлятьТаблицыИДиаграммы; + Элементы.СтруктураВарианта_ДобавитьДиаграмму.Доступность = МожноДобавлятьТаблицыИДиаграммы; + Элементы.СтруктураВарианта_ДобавитьДиаграмму1.Доступность = МожноДобавлятьТаблицыИДиаграммы; + Элементы.СтруктураВарианта_Удалить.Доступность = МожноУдалятьИПеремещать; + Элементы.СтруктураВарианта_Удалить1.Доступность = МожноУдалятьИПеремещать; + Элементы.СтруктураВарианта_Сгруппировать.Доступность = МожноГруппировать; + Элементы.СтруктураВарианта_Сгруппировать1.Доступность = МожноГруппировать; + Элементы.СтруктураВарианта_ПереместитьВышеИЛевее.Доступность = МожноУдалятьИПеремещать И РодителяМожноПеремещать И МожноДобавлятьВложенные И МожноГруппировать; + Элементы.СтруктураВарианта_ПереместитьВышеИЛевее1.Доступность = МожноУдалятьИПеремещать И РодителяМожноПеремещать И МожноДобавлятьВложенные И МожноГруппировать; + Элементы.СтруктураВарианта_ПереместитьНижеИПравее.Доступность = МожноУдалятьИПеремещать И ЕстьПодчиненные И МожноДобавлятьВложенные И МожноГруппировать; + Элементы.СтруктураВарианта_ПереместитьНижеИПравее1.Доступность = МожноУдалятьИПеремещать И ЕстьПодчиненные И МожноДобавлятьВложенные И МожноГруппировать; + Элементы.СтруктураВарианта_ПереместитьВверх.Доступность = МожноУдалятьИПеремещать И ЕстьСоседние; + Элементы.СтруктураВарианта_ПереместитьВверх1.Доступность = МожноУдалятьИПеремещать И ЕстьСоседние; + Элементы.СтруктураВарианта_ПереместитьВниз.Доступность = МожноУдалятьИПеремещать И ЕстьСоседние; + Элементы.СтруктураВарианта_ПереместитьВниз1.Доступность = МожноУдалятьИПеремещать И ЕстьСоседние; + +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВариантаВыбор(Элемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + Если РасширенныйРежим <> 1 Тогда + Возврат; + КонецЕсли; + СтрокаТаблицы = Элементы.СтруктураВарианта.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + Если СтрокаТаблицы.Тип = "КоллекцияЭлементовСтруктурыТаблицы" + Или СтрокаТаблицы.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" + Или СтрокаТаблицы.Тип = "Настройки" Тогда + Возврат; + КонецЕсли; + ИмяКолонки = Поле.Имя; + Если ИмяКолонки = "СтруктураВариантаПредставление" + Или ИмяКолонки = "СтруктураВариантаСодержитОтборы" + Или ИмяКолонки = "СтруктураВариантаСодержитПоляИлиСортировки" + Или ИмяКолонки = "СтруктураВариантаСодержитУсловноеОформление" Тогда + Если СтрокаТаблицы.Тип = "Таблица" + Или СтрокаТаблицы.Тип = "НастройкиВложенногоОбъекта" Тогда + Возврат; + КонецЕсли; + + Если ИмяКолонки = "СтруктураВариантаСодержитОтборы" Тогда + ИмяСтраницы = "СтраницаОтборы"; + ИначеЕсли ИмяКолонки = "СтруктураВариантаСодержитПоляИлиСортировки" Тогда + ИмяСтраницы = "СтраницаВыбранныеПоляИСортировки"; + ИначеЕсли ИмяКолонки = "СтруктураВариантаСодержитУсловноеОформление" Тогда + ИмяСтраницы = "СтраницаОформление"; + Иначе + ИмяСтраницы = Неопределено; + КонецЕсли; + + СтруктураВариантаИзменитьУзел("СтруктураВарианта", СтрокаИдентификатор, СтрокаТаблицы, ИмяСтраницы); + Иначе + СтандартнаяОбработка = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВариантаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + Отказ = Истина; + Если РасширенныйРежим = 0 Тогда + Возврат; + КонецЕсли; + Если Не Элементы.СтруктураВарианта_Добавить.Доступность Тогда + Возврат; + КонецЕсли; + Если Копирование Тогда + Возврат; + КонецЕсли; + + СтруктураВариантаДобавитьГруппировку(Истина); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВарианта_Сгруппировать(Команда) + Если Не Элементы.СтруктураВарианта_Сгруппировать.Доступность Тогда + Возврат; + КонецЕсли; + СтруктураВариантаДобавитьГруппировку(Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВариантаДобавитьГруппировку(ВнутрьТекущей) + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("ВнутрьТекущей", ВнутрьТекущей); + ПараметрыВыполнения.Вставить("Оборачивать", Истина); + + ИдентификаторУзлаНастроек = Неопределено; + СтрокаТаблицы = Элементы.СтруктураВарианта.ТекущиеДанные; + Если СтрокаТаблицы <> Неопределено Тогда + Если Не ВнутрьТекущей Тогда + СтрокаТаблицы = СтрокаТаблицы.ПолучитьРодителя(); + КонецЕсли; + Если ВнутрьТекущей Тогда + Если СтрокаТаблицы.Тип = "Настройки" И Не СтрокаТаблицы.ФлажокДоступен Тогда + ПараметрыВыполнения.Оборачивать = Ложь; + ИначеЕсли СтрокаТаблицы.ПолучитьЭлементы().Количество() > 1 Тогда + ПараметрыВыполнения.Оборачивать = Ложь; + КонецЕсли; + КонецЕсли; + Пока СтрокаТаблицы <> Неопределено Цикл + Если СтрокаТаблицы.Тип = "Настройки" + Или СтрокаТаблицы.Тип = "НастройкиВложенногоОбъекта" + Или СтрокаТаблицы.Тип = "Группировка" + Или СтрокаТаблицы.Тип = "ГруппировкаТаблицы" + Или СтрокаТаблицы.Тип = "ГруппировкаДиаграммы" Тогда + ИдентификаторУзлаНастроек = СтрокаТаблицы.ИдентификаторКД; + Прервать; + КонецЕсли; + СтрокаТаблицы = СтрокаТаблицы.ПолучитьРодителя(); + КонецЦикла; + КонецЕсли; + + Обработчик = Новый ОписаниеОповещения("СтруктураВариантаДобавитьГруппировкуПослеВыбораПоля", ЭтотОбъект, ПараметрыВыполнения); + ТаблицыПолейПоказатьВыборПоля("СтруктураВарианта", Обработчик, Неопределено, ИдентификаторУзлаНастроек); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВариантаДобавитьГруппировкуПослеВыбораПоля(ДоступноеПолеКД, ПараметрыВыполнения) Экспорт + Если ДоступноеПолеКД = Неопределено Тогда + Возврат; + КонецЕсли; + + ТекущаяСтрока = Элементы.СтруктураВарианта.ТекущиеДанные; + + СтрокиПеремещаемыеВНовуюГруппировку = Новый Массив; + Если ПараметрыВыполнения.Оборачивать Тогда + Если ПараметрыВыполнения.ВнутрьТекущей Тогда + Найденные = ТекущаяСтрока.ПолучитьЭлементы(); + Для Каждого ПеремещаемаяСтрока Из Найденные Цикл + СтрокиПеремещаемыеВНовуюГруппировку.Добавить(ПеремещаемаяСтрока); + КонецЦикла; + Иначе + СтрокиПеремещаемыеВНовуюГруппировку.Добавить(ТекущаяСтрока); + КонецЕсли; + КонецЕсли; + + // Добавление новой группировки. + Результат = ТаблицыПолейВставить("СтруктураВарианта", Тип("ГруппировкаКомпоновкиДанных"), ТекущаяСтрока, ПараметрыВыполнения.ВнутрьТекущей); + + ЭлементКД = Результат.ЭлементКД; + ЭлементКД.Использование = Истина; + ЭлементКД.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); + ЭлементКД.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных")); + + Если ДоступноеПолеКД = "<>" Тогда + // Детальные записи - добавлять поле не требуется. + Представление = НСтр("ru = '<Детальные записи>'"); + Иначе + ПолеГруппировкиКД = ЭлементКД.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); + ПолеГруппировкиКД.Использование = Истина; + ПолеГруппировкиКД.Поле = ДоступноеПолеКД.Поле; + Представление = Строка(ДоступноеПолеКД.Заголовок); + КонецЕсли; + + СтрокаТаблицы = Результат.СтрокаТаблицы; + СтрокаТаблицы.Использование = ЭлементКД.Использование; + СтрокаТаблицы.Представление = Представление; + СтрокаТаблицы.ИндексКартинки = 1; + СтрокаТаблицы.ФлажокДоступен = Истина; + СтрокаТаблицы.Тип = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ЭлементКД)); + + Если Не ПараметрыВыполнения.ВнутрьТекущей Тогда + СтрокаТаблицы.Заголовок = ТекущаяСтрока.Заголовок; + СтруктураВариантаОбновитьЗаголовокЭлементаВКомпоновщике(СтрокаТаблицы); + ТекущаяСтрока.Заголовок = ""; + СтруктураВариантаОбновитьЗаголовокЭлементаВКомпоновщике(ТекущаяСтрока); + КонецЕсли; + + // Перемещение текущей группировки в новую. + Для Каждого ПеремещаемаяСтрока Из СтрокиПеремещаемыеВНовуюГруппировку Цикл + Результат = ТаблицыПолейПереместить("СтруктураВарианта", ПеремещаемаяСтрока, СтрокаТаблицы, Неопределено, Ложь); + КонецЦикла; + + // Бантики. + Элементы.СтруктураВарианта.Развернуть(СтрокаТаблицы.ПолучитьИдентификатор(), Истина); + Элементы.СтруктураВарианта.ТекущаяСтрока = СтрокаТаблицы.ПолучитьИдентификатор(); + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВарианта_ДобавитьТаблицу(Команда) + Если Не Элементы.СтруктураВарианта_ДобавитьТаблицу.Доступность Тогда + Возврат; + КонецЕсли; + ДобавитьТаблицуИлиДиаграмму(Тип("ТаблицаКомпоновкиДанных")); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВарианта_ДобавитьДиаграмму(Команда) + Если Не Элементы.СтруктураВарианта_ДобавитьДиаграмму.Доступность Тогда + Возврат; + КонецЕсли; + ДобавитьТаблицуИлиДиаграмму(Тип("ДиаграммаКомпоновкиДанных")); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВарианта_УстановитьФлажки(Команда) + УстановитьФлажкиИспользованиеВоВсемДереве("СтруктураВарианта", Истина); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВарианта_СнятьФлажки(Команда) + УстановитьФлажкиИспользованиеВоВсемДереве("СтруктураВарианта", Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьТаблицуИлиДиаграмму(ТипЭлемента) + ТекущаяСтрока = Элементы.СтруктураВарианта.ТекущиеДанные; + + Результат = ТаблицыПолейВставить("СтруктураВарианта", ТипЭлемента, ТекущаяСтрока, Истина); + + Если ТипЭлемента = Тип("ДиаграммаКомпоновкиДанных") Тогда + ЭлементКД = Результат.ЭлементКД; + ЭлементКД.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); + УстановитьПараметрВывода(ЭлементКД, "ТипДиаграммы.СоединениеЗначенийПоСериям", ТипСоединенияЗначенийПоСериямДиаграммы.СоединениеКраев); + УстановитьПараметрВывода(ЭлементКД, "ТипДиаграммы.ЛинииСоединенияЗначенийПоСериям"); + УстановитьПараметрВывода(ЭлементКД, "ТипДиаграммы.ЦветСоединенияЗначенийПоСериям", WebЦвета.СеребристоСерый); + УстановитьПараметрВывода(ЭлементКД, "ТипДиаграммы.РежимСглаживания", РежимСглаживанияДиаграммы.ГладкаяКривая); + УстановитьПараметрВывода(ЭлементКД, "ТипДиаграммы.РежимПолупрозрачности", РежимПолупрозрачностиДиаграммы.Использовать); + КонецЕсли; + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВариантаНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка) + // Проверка общих условий. + Если РасширенныйРежим = 0 Тогда + СтандартнаяОбработка = Ложь; + Возврат; + КонецЕсли; + // Проверка источника. + СтрокаТаблицы = СтруктураВарианта.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); + Если СтрокаТаблицы = Неопределено Тогда + СтандартнаяОбработка = Ложь; + Возврат; + КонецЕсли; + Если СтрокаТаблицы.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" + Или СтрокаТаблицы.Тип = "КоллекцияЭлементовСтруктурыТаблицы" + Или СтрокаТаблицы.Тип = "Настройки" Тогда + СтандартнаяОбработка = Ложь; + Возврат; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВариантаПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ИдентификаторЦели, Поле) + // Проверка общих условий. + Если ИдентификаторЦели = Неопределено Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + Возврат; + КонецЕсли; + // Проверка источника. + СтрокаТаблицы = СтруктураВарианта.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); + Если СтрокаТаблицы = Неопределено Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + Возврат; + КонецЕсли; + // Проверка приемника. + НовыйРодитель = СтруктураВарианта.НайтиПоИдентификатору(ИдентификаторЦели); + Если НовыйРодитель = Неопределено Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + Возврат; + КонецЕсли; + Если НовыйРодитель.Тип = "Таблица" + Или НовыйРодитель.Тип = "Диаграмма" Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + Возврат; + КонецЕсли; + + // Проверка совместимости источника с приемником. + ДопустимоТолькоНаличиеГруппировок = Ложь; + Если НовыйРодитель.Тип = "КоллекцияЭлементовСтруктурыТаблицы" + Или НовыйРодитель.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" + Или НовыйРодитель.Тип = "ГруппировкаТаблицы" + Или НовыйРодитель.Тип = "ГруппировкаДиаграммы" Тогда + ДопустимоТолькоНаличиеГруппировок = Истина; + КонецЕсли; + + Если ДопустимоТолькоНаличиеГруппировок + И СтрокаТаблицы.Тип <> "Группировка" + И СтрокаТаблицы.Тип <> "ГруппировкаТаблицы" + И СтрокаТаблицы.Тип <> "ГруппировкаДиаграммы" Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + Возврат; + КонецЕсли; + + КоллекцииКоллекций = Новый Массив; + КоллекцииКоллекций.Добавить(СтрокаТаблицы.ПолучитьЭлементы()); + Количество = 1; + Пока Количество > 0 Цикл + Коллекция = КоллекцииКоллекций[0]; + Количество = Количество - 1; + КоллекцииКоллекций.Удалить(0); + Для Каждого ВложеннаяСтрокаТаблицы Из Коллекция Цикл + Если ВложеннаяСтрокаТаблицы = НовыйРодитель Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + Возврат; + КонецЕсли; + Если ДопустимоТолькоНаличиеГруппировок + И ВложеннаяСтрокаТаблицы.Тип <> "Группировка" + И ВложеннаяСтрокаТаблицы.Тип <> "ГруппировкаТаблицы" + И ВложеннаяСтрокаТаблицы.Тип <> "ГруппировкаДиаграммы" Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + Возврат; + КонецЕсли; + КоллекцииКоллекций.Добавить(ВложеннаяСтрокаТаблицы.ПолучитьЭлементы()); + Количество = Количество + 1; + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВариантаПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ИдентификаторЦели, Поле) + // Все проверки пройдены. + СтандартнаяОбработка = Ложь; + + СтрокаТаблицы = СтруктураВарианта.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение); + НовыйРодитель = СтруктураВарианта.НайтиПоИдентификатору(ИдентификаторЦели); + + Результат = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицы, НовыйРодитель, Неопределено, Ложь); + + Элементы.СтруктураВарианта.Развернуть(НовыйРодитель.ПолучитьИдентификатор(), Истина); + Элементы.СтруктураВарианта.ТекущаяСтрока = Результат.СтрокаДерева.ПолучитьИдентификатор(); + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВариантаИспользованиеПриИзменении(Элемент) + ТаблицыПолейИзменитьИспользование("СтруктураВарианта"); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВариантаЗаголовокПриИзменении(Элемент) + СтрокаТаблицы = Элементы.СтруктураВарианта.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + СтруктураВариантаОбновитьЗаголовокЭлементаВКомпоновщике(СтрокаТаблицы); + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВарианта_ПереместитьВверх(Команда) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, СдвинутьСтроки"); + Сценарий.Вставить("Действие", "Переместить"); + Сценарий.Вставить("ТаблицаИмя", "СтруктураВарианта"); + Сценарий.Вставить("Направление", -1); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВарианта_ПереместитьВниз(Команда) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, СдвинутьСтроки"); + Сценарий.Вставить("Действие", "Переместить"); + Сценарий.Вставить("ТаблицаИмя", "СтруктураВарианта"); + Сценарий.Вставить("Направление", 1); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВарианта_Изменить(Команда) + ТаблицаЭлемент = Элементы.СтруктураВарианта; + Поле = ТаблицаЭлемент.ТекущийЭлемент; + СтандартнаяОбработка = Истина; + СтрокаИдентификатор = ТаблицаЭлемент.ТекущаяСтрока; + СтруктураВариантаВыбор(ТаблицаЭлемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВариантаПередУдалением(Элемент, Отказ) + Отказ = Истина; + Если РасширенныйРежим = 0 Или Не Элементы.СтруктураВарианта_Удалить.Доступность Тогда + Возврат; + КонецЕсли; + + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, УдалитьСтроки, ОбновитьФорму"); + Сценарий.Вставить("Действие", "Удалить"); + Сценарий.Вставить("ТаблицаИмя", "СтруктураВарианта"); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВарианта_ПереместитьВышеИЛевее(Команда) + Если Не Элементы.СтруктураВарианта_ПереместитьВышеИЛевее.Доступность Тогда + Возврат; + КонецЕсли; + СтрокаТаблицыВверх = Элементы.СтруктураВарианта.ТекущиеДанные; + Если СтрокаТаблицыВверх = Неопределено Тогда + Возврат; + КонецЕсли; + СтрокаТаблицыВниз = СтрокаТаблицыВверх.ПолучитьРодителя(); + Если СтрокаТаблицыВниз = Неопределено Тогда + Возврат; + КонецЕсли; + + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("Режим", "ВверхИВлево"); + ПараметрыВыполнения.Вставить("СтрокаТаблицыВверх", СтрокаТаблицыВверх); + ПараметрыВыполнения.Вставить("СтрокаТаблицыВниз", СтрокаТаблицыВниз); + СтруктураВарианта_Переместить(-1, ПараметрыВыполнения); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВарианта_ПереместитьНижеИПравее(Команда) + Если Не Элементы.СтруктураВарианта_ПереместитьНижеИПравее.Доступность Тогда + Возврат; + КонецЕсли; + СтрокаТаблицыВниз = Элементы.СтруктураВарианта.ТекущиеДанные; + Если СтрокаТаблицыВниз = Неопределено Тогда + Возврат; + КонецЕсли; + ПараметрыВыполнения = Новый Структура; + ПараметрыВыполнения.Вставить("Режим", "ВнизИВправо"); + ПараметрыВыполнения.Вставить("СтрокаТаблицыВверх", Неопределено); + ПараметрыВыполнения.Вставить("СтрокаТаблицыВниз", СтрокаТаблицыВниз); + + ПодчиненныеСтроки = СтрокаТаблицыВниз.ПолучитьЭлементы(); + Количество = ПодчиненныеСтроки.Количество(); + Если Количество = 0 Тогда + Возврат; + ИначеЕсли Количество = 1 Тогда + ПараметрыВыполнения.СтрокаТаблицыВверх = ПодчиненныеСтроки[0]; + СтруктураВарианта_Переместить(-1, ПараметрыВыполнения); + Иначе + Список = Новый СписокЗначений; + Для НомерСтроки = 1 По Количество Цикл + ПодчиненнаяСтрока = ПодчиненныеСтроки[НомерСтроки-1]; + Список.Добавить(ПодчиненнаяСтрока.ПолучитьИдентификатор(), ПодчиненнаяСтрока.Представление); + КонецЦикла; + Обработчик = Новый ОписаниеОповещения("СтруктураВарианта_Переместить", ЭтотОбъект, ПараметрыВыполнения); + ПоказатьВыборИзСписка(Обработчик, Список); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВарианта_Переместить(Результат, ПараметрыВыполнения) Экспорт + Если Результат <> -1 Тогда + Если ТипЗнч(Результат) <> Тип("ЭлементСпискаЗначений") Тогда + Возврат; + КонецЕсли; + СтрокаТаблицыВверх = СтруктураВарианта.НайтиПоИдентификатору(Результат.Значение); + Иначе + СтрокаТаблицыВверх = ПараметрыВыполнения.СтрокаТаблицыВверх; + КонецЕсли; + СтрокаТаблицыВниз = ПараметрыВыполнения.СтрокаТаблицыВниз; + + // 0. Запомнить перед каким элементом вставлять верхнюю строку. + СтрокиВниз = СтрокаТаблицыВниз.ПолучитьЭлементы(); + Индекс = СтрокиВниз.Индекс(СтрокаТаблицыВверх); + МассивИдентификаторовСтрокВниз = Новый Массив; + Для Каждого СтрокаТаблицы Из СтрокиВниз Цикл + Если СтрокаТаблицы = СтрокаТаблицыВверх Тогда + Продолжить; + КонецЕсли; + МассивИдентификаторовСтрокВниз.Добавить(СтрокаТаблицы.ПолучитьИдентификатор()); + КонецЦикла; + + // 1. Переместить нижнюю строку на уровень с верхней. + Результат1 = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицыВверх, СтрокаТаблицыВниз.ПолучитьРодителя(), СтрокаТаблицыВниз, Ложь); + СтрокаТаблицыВверх = Результат1.СтрокаДерева; + + // 2. Запомнить какие строки нужно переместить. + СтрокиВверх = СтрокаТаблицыВверх.ПолучитьЭлементы(); + + // 3. Обмен строками. + Для Каждого СтрокаТаблицы Из СтрокиВверх Цикл + Результат2 = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицы, СтрокаТаблицыВниз, Неопределено, Ложь); + КонецЦикла; + Для Каждого СтрокаТаблицыИдентификатор Из МассивИдентификаторовСтрокВниз Цикл + СтрокаТаблицы = СтруктураВарианта.НайтиПоИдентификатору(СтрокаТаблицыИдентификатор); + Результат3 = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицы, СтрокаТаблицыВверх, Неопределено, Ложь); + КонецЦикла; + + // 4. Переместить верхнюю строку в нижнюю. + СтрокиВверх = СтрокаТаблицыВверх.ПолучитьЭлементы(); + Если СтрокиВверх.Количество() - 1 < Индекс Тогда + ПередЧемВставить = Неопределено; + Иначе + ПередЧемВставить = СтрокиВверх[Индекс]; + КонецЕсли; + Результат4 = ТаблицыПолейПереместить("СтруктураВарианта", СтрокаТаблицыВниз, СтрокаТаблицыВверх, ПередЧемВставить, Ложь); + СтрокаТаблицыВниз = Результат4.СтрокаДерева; + + // Бантики. + Если ПараметрыВыполнения.Режим = "ВнизИВправо" Тогда + ТекущаяСтрока = СтрокаТаблицыВниз; + Иначе + ТекущаяСтрока = СтрокаТаблицыВверх; + КонецЕсли; + ТекущаяСтрокаИдентификатор = ТекущаяСтрока.ПолучитьИдентификатор(); + Элементы.СтруктураВарианта.Развернуть(ТекущаяСтрокаИдентификатор, Истина); + Элементы.СтруктураВарианта.ТекущаяСтрока = ТекущаяСтрокаИдентификатор; + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// ТАБЛИЦА СоставГруппировки + +#Область ОбработчикиСобытийЭлементовТаблицыФормыСоставГруппировки + +&НаКлиенте +Процедура СоставГруппировкиИспользованиеПриИзменении(Элемент) + ТаблицыПолейИзменитьИспользование("СоставГруппировки"); +КонецПроцедуры + +&НаКлиенте +Процедура СоставГруппировкиВыбор(Элемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + СтрокаТаблицы = Элементы.СоставГруппировки.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + ИмяКолонки = Поле.Имя; + Если ИмяКолонки = "СоставГруппировкиПредставление" Тогда + Если СтрокаТаблицы.ТипНастройки = "ПолеГруппировки" Тогда + ТаблицыПолейИзменить("СоставГруппировки", СтрокаИдентификатор, СтрокаТаблицы); + КонецЕсли; + ИначеЕсли ИмяКолонки = "СоставГруппировкиТипГруппировки" + Или ИмяКолонки = "СоставГруппировкиТипДополнения" Тогда + СтандартнаяОбработка = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СоставГруппировкиПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + Отказ = Истина; + Обработчик = Новый ОписаниеОповещения("СоставГруппировкиПослеВыбораПоля", ЭтотОбъект); + ТаблицыПолейПоказатьВыборПоля("СоставГруппировки", Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура СоставГруппировкиПослеВыбораПоля(ДоступноеПолеКД, ПараметрыВыполнения) Экспорт + Если ДоступноеПолеКД = Неопределено Тогда + Возврат; + КонецЕсли; + + Результат = ТаблицыПолейВставить("СоставГруппировки", Тип("ПолеГруппировкиКомпоновкиДанных"), 0, Ложь); + + ЭлементКД = Результат.ЭлементКД; + ЭлементКД.Использование = Истина; + ЭлементКД.Поле = ДоступноеПолеКД.Поле; + + СтрокаТаблицы = Результат.СтрокаТаблицы; + СтрокаТаблицы.Использование = ЭлементКД.Использование; + СтрокаТаблицы.Представление = ДоступноеПолеКД.Заголовок; + СтрокаТаблицы.ТипГруппировки = ЭлементКД.ТипГруппировки; + СтрокаТаблицы.ТипДополнения = ЭлементКД.ТипДополнения; + СтрокаТаблицы.ПолеКД = ЭлементКД.Поле; + + Если ДоступноеПолеКД.Ресурс Тогда + СтрокаТаблицы.ИндексКартинки = 20; + ИначеЕсли ДоступноеПолеКД.Таблица Тогда + СтрокаТаблицы.ИндексКартинки = 21; + ИначеЕсли ДоступноеПолеКД.Папка Тогда + СтрокаТаблицы.ИндексКартинки = 1; + Иначе + СтрокаТаблицы.ИндексКартинки = 4; + КонецЕсли; + + ИнформацияОТипах = ОтчетыКлиентСервер.АнализТипов(ДоступноеПолеКД.ТипЗначения, Ложь); + Если ИнформацияОТипах.СодержитТипПериод Или ИнформацияОТипах.СодержитТипДата Тогда + СтрокаТаблицы.ПоказыватьТипДополнения = Истина; + КонецЕсли; + + ПослеИзмененияФлажкаИспользование("СоставГруппировки", СтрокаТаблицы, ЭлементКД); + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура СоставГруппировкиТипГруппировкиПриИзменении(Элемент) + ТаблицыПолейИзменитьТипГруппировки("СоставГруппировки"); +КонецПроцедуры + +&НаКлиенте +Процедура СоставГруппировкиТипДополненияПриИзменении(Элемент) + ТаблицыПолейИзменитьТипГруппировки("СоставГруппировки"); +КонецПроцедуры + +&НаКлиенте +Процедура СоставГруппировкиПередУдалением(Элемент, Отказ) + ТаблицыПолейПередУдалением(Элемент.Имя, Отказ); +КонецПроцедуры + +&НаКлиенте +Процедура СоставГруппировки_ПереместитьВверх(Команда) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, СдвинутьСтроки"); + Сценарий.Вставить("Действие", "Переместить"); + Сценарий.Вставить("ТаблицаИмя", "СоставГруппировки"); + Сценарий.Вставить("Направление", -1); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + +&НаКлиенте +Процедура СоставГруппировки_ПереместитьВниз(Команда) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки, СдвинутьСтроки"); + Сценарий.Вставить("Действие", "Переместить"); + Сценарий.Вставить("ТаблицаИмя", "СоставГруппировки"); + Сценарий.Вставить("Направление", 1); + + ЗапуститьСценарий(Сценарий); +КонецПроцедуры + +#КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// ТАБЛИЦА Оформление + +#Область ОбработчикиСобытийЭлементовТаблицыФормыОформление + +&НаКлиенте +Процедура ОформлениеПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + Отказ = Истина; + Если РасширенныйРежим = 0 Тогда + Возврат; + КонецЕсли; + + ОформлениеИзменитьЭлемент("Оформление", Неопределено, Неопределено); +КонецПроцедуры + +&НаКлиенте +Процедура ОформлениеВыбор(Элемент, СтрокаИдентификатор, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + Если РасширенныйРежим <> 1 Тогда + Возврат; + КонецЕсли; + СтрокаТаблицы = Элементы.Оформление.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + ИмяКолонки = Поле.Имя; + Если ИмяКолонки = "ОформлениеЗаголовок" Тогда // Изменение порядка. + + ОформлениеИзменитьЭлемент("Оформление", СтрокаИдентификатор, СтрокаТаблицы); + + ИначеЕсли ИмяКолонки = "ОформлениеИндексКартинкиДоступа" Тогда // Изменение быстрого доступа к отбору. + + ТаблицыПолейИзменитьУровеньДоступа("Оформление", СтрокаИдентификатор, Истина, Ложь); + + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОформлениеПередУдалением(Элемент, Отказ) + ТаблицыПолейПередУдалением(Элемент.Имя, Отказ); +КонецПроцедуры + +#КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// КОМАНДЫ + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ЗакрытьИСформировать(Команда) + ЗаписатьИЗакрыть(Истина); +КонецПроцедуры + +&НаКлиенте +Процедура ЗакрытьБезФормирования(Команда) + ЗаписатьИЗакрыть(Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиПоУмолчанию(Команда) + ПараметрыЗаполнения = Новый Структура; + ПараметрыЗаполнения.Вставить("ИмяСобытия", "НастройкиПоУмолчанию"); + ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); + ПараметрыЗаполнения.Вставить("СброситьПользовательскиеНастройки", Истина); + БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения); +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьУсловияОтборов(Команда) + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); + ПараметрыФормы.Вставить("КомпоновщикНастроек", Отчет.КомпоновщикНастроек); + Обработчик = Новый ОписаниеОповещения("ИзменитьУсловияОтборовЗавершение", ЭтотОбъект); + ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.УсловияОтборовОтчета", ПараметрыФормы, ЭтотОбъект, Истина, , , Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьУсловияОтборовЗавершение(ВыборПользователя, Контекст) Экспорт + Если ВыборПользователя = Неопределено + Или ВыборПользователя = КодВозвратаДиалога.Отмена + Или ВыборПользователя.Количество() = 0 Тогда + Возврат; + КонецЕсли; + ПараметрыЗаполнения = Новый Структура; + ПараметрыЗаполнения.Вставить("ИмяСобытия", "ИзменитьУсловияОтборов"); + ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); + ПараметрыЗаполнения.Вставить("УсловияОтборов", ВыборПользователя); + БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Подключаемые команды + +&НаКлиенте +Процедура Подключаемый_Команда(Команда) + // Механизмы расширения + Результат = Ложь; + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") Тогда + МодульРассылкаОтчетовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РассылкаОтчетовКлиент"); + МодульРассылкаОтчетовКлиент.ФормаОтчетаОбработчикКоманды(ЭтотОбъект, Команда, Результат); + КонецЕсли; + ОтчетыКлиентПереопределяемый.ОбработчикКоманды(ЭтотОбъект, Команда, Результат); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ИзменитьВидСравнения(Команда) + ИдентификаторЭлемента = Прав(Команда.Имя, 32); + Контекст = Новый Структура; + Контекст.Вставить("ИдентификаторЭлемента", ИдентификаторЭлемента); + Обработчик = Новый ОписаниеОповещения("ПослеВыбораВидаСравнения", ЭтотОбъект, Контекст); + ОтчетыКлиент.ИзменитьВидСравнения(ЭтотОбъект, ИдентификаторЭлемента, Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура ПослеВыбораВидаСравнения(ВидСравнения, Контекст) Экспорт + Если ВидСравнения <> Неопределено Тогда + ПараметрыЗаполнения = Новый Структура; + ПараметрыЗаполнения.Вставить("ИмяСобытия", "ИзменитьВидСравнения"); + ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); + БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +#Область СлужебныеПроцедурыИФункции + +//////////////////////////////////////////////////////////////////////////////// +// Клиент + +&НаКлиенте +Процедура ЗаписатьИЗакрыть(Переформировать) + ОповеститьОВыборе(РезультатВыбора(Переформировать)); +КонецПроцедуры + +&НаКлиенте +Функция РезультатВыбора(Переформировать) + РезультатВыбораСформирован = Истина; + + Если РежимИзмененияУзлаВарианта И Не Переформировать Тогда + Возврат Неопределено; + КонецЕсли; + + РезультатВыбора = Новый Структура; + РезультатВыбора.Вставить("ИмяСобытия", "ФормаНастроек"); + РезультатВыбора.Вставить("Переформировать", Переформировать); + РезультатВыбора.Вставить("ВариантМодифицирован", Ложь); + РезультатВыбора.Вставить("ПользовательскиеНастройкиМодифицированы", Ложь); + РезультатВыбора.Вставить("ФормаНастроекРасширенныйРежим", РасширенныйРежим); + РезультатВыбора.Вставить("ФормаНастроекИмяСтраницы", Элементы.СтраницыНастроек.ТекущаяСтраница.Имя); + + Если ВариантИзменен Тогда + РезультатВыбора.ВариантМодифицирован = Истина; + РезультатВыбора.Вставить("НастройкиКД", Отчет.КомпоновщикНастроек.Настройки); + КонецЕсли; + + Если ВариантИзменен Или ПользовательскиеНастройкиМодифицированы Тогда + РезультатВыбора.ПользовательскиеНастройкиМодифицированы = Истина; + РезультатВыбора.Вставить("ПользовательскиеНастройкиКД", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + КонецЕсли; + + Если ВариантИзменен И РасширенныйРежим = 1 Тогда + РезультатВыбора.Вставить("СброситьПользовательскиеНастройки", Истина); + КонецЕсли; + + Возврат РезультатВыбора; +КонецФункции + +&НаКлиенте +Функция НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента) Экспорт + // Для пользовательских настроек хранятся идентификаторы компоновки данных, + // поскольку они не могут храниться по ссылке (происходит копирование значения). + Если ИдентификаторЭлемента = "Сортировка" Тогда + Если РежимИзмененияУзлаВарианта Тогда + КорневойУзел = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторТекущегоУзлаКД); + Возврат КорневойУзел.Порядок; + ИначеЕсли РасширенныйРежим = 1 Тогда + Возврат Отчет.КомпоновщикНастроек.Настройки.Порядок; + Иначе + ИдентификаторЭлемента = ИдентификаторЭлемента; + КонецЕсли; + ИначеЕсли ИдентификаторЭлемента = "ВыбранныеПоля" Тогда + Если РежимИзмененияУзлаВарианта Тогда + КорневойУзел = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторТекущегоУзлаКД); + Возврат КорневойУзел.Выбор; + ИначеЕсли РасширенныйРежим = 1 Тогда + Возврат Отчет.КомпоновщикНастроек.Настройки.Выбор; + Иначе + ИдентификаторЭлемента = ИдентификаторЭлемента; + КонецЕсли; + ИначеЕсли ИдентификаторЭлемента = "Отборы" Тогда + Если РежимИзмененияУзлаВарианта Тогда + КорневойУзел = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторТекущегоУзлаКД); + Возврат КорневойУзел.Отбор; + ИначеЕсли РасширенныйРежим = 1 Тогда + Возврат Отчет.КомпоновщикНастроек.Настройки.Отбор; + Иначе + ИдентификаторЭлемента = ИдентификаторЭлемента; + КонецЕсли; + ИначеЕсли ИдентификаторЭлемента = "СтруктураВарианта" Тогда + Если РасширенныйРежим = 1 Тогда + Возврат Отчет.КомпоновщикНастроек.Настройки; + Иначе + Возврат Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; + КонецЕсли; + КонецЕсли; + ИдентификаторКД = БыстрыйПоискПользовательскихНастроек.Получить(ИдентификаторЭлемента); + Возврат Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ПолучитьОбъектПоИдентификатору(ИдентификаторКД); +КонецФункции + +&НаКлиенте +Функция НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента) Экспорт + // Для пользовательских настроек хранятся идентификаторы компоновки данных, + // поскольку они не могут храниться по ссылке (происходит копирование значения). + ВсеДополнительныеНастройки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства, "ЭлементыФормы"); + Если ВсеДополнительныеНастройки = Неопределено Тогда + Возврат Неопределено; + Иначе + Возврат ВсеДополнительныеНастройки[ИдентификаторЭлемента]; + КонецЕсли; +КонецФункции + +&НаКлиенте +Процедура БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения) + Если ПараметрыЗаполнения = Неопределено Тогда + ПараметрыЗаполнения = Новый Структура("ИмяСобытия", "ПослеИзмененияКоллекции"); + КонецЕсли; + РезультатКлиента = БыстрыеНастройкиЗаполнить(ПараметрыЗаполнения); + ПоказатьРезультатЗаполненияНастроек(РезультатКлиента); +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьРезультатЗаполненияНастроек(РезультатКлиента) + Если РезультатКлиента = Неопределено Тогда + РезультатКлиента = РезультатЗаполненияНастроек; + РезультатЗаполненияНастроек = Неопределено; + КонецЕсли; + Если ТипЗнч(РезультатКлиента) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + + // Для платформы (переопределение доступных значений на клиенте). + СвоиСпискиВыбора = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(РезультатКлиента, "СвоиСпискиВыбора"); + Если ТипЗнч(СвоиСпискиВыбора) = Тип("Массив") Тогда + Для Каждого ИдентификаторЭлемента Из СвоиСпискиВыбора Цикл + НастройкаВарианта = НайтиНастройкуВарианта(ЭтотОбъект, ИдентификаторЭлемента); + Если НастройкаВарианта = Неопределено Тогда + Продолжить; + КонецЕсли; + ДополнительныеНастройки = НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента); + Если ДополнительныеНастройки = Неопределено Тогда + Продолжить; + КонецЕсли; + Тип = ТипЗнч(НастройкаВарианта.ЭлементКД); + Если Тип = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ДоступныеПараметры = НастройкаВарианта.УзелКД.ДоступныеПараметры; + ДоступнаяНастройкаКД = ДоступныеПараметры.НайтиПараметр(НастройкаВарианта.ЭлементКД.Параметр); + Если ДоступнаяНастройкаКД.ДоступныеЗначения = Неопределено Тогда + Продолжить; + КонецЕсли; + ДоступнаяНастройкаКД.ДоступныеЗначения.Очистить(); + Для Каждого Элемент Из ДополнительныеНастройки.ЗначенияДляВыбора Цикл + ЗаполнитьЗначенияСвойств(ДоступнаяНастройкаКД.ДоступныеЗначения.Добавить(), Элемент); + КонецЦикла; + ИначеЕсли Тип = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ДоступныеПоляОтбора = НастройкаВарианта.УзелКД.ДоступныеПоляОтбора; + ДоступнаяНастройкаКД = ДоступныеПоляОтбора.НайтиПоле(НастройкаВарианта.ЭлементКД.ЛевоеЗначение); + ДоступнаяНастройкаКД.ДоступныеЗначения = ДополнительныеНастройки.ЗначенияДляВыбора; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, РезультатКлиента); +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьПараметрВывода(ЭлементКД, Имя, Значение = Неопределено, Использование = Истина) + ПараметрКД = ЭлементКД.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(Имя)); + Если ПараметрКД = Неопределено Тогда + Возврат; + КонецЕсли; + Если Значение <> Неопределено Тогда + ПараметрКД.Значение = Значение; + КонецЕсли; + Если Использование <> Неопределено Тогда + ПараметрКД.Использование = Использование; + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Клиент - Движок сценарного выполнения. + +&НаКлиенте +Процедура ЗапуститьСценарий(Сценарий) + // Плюсы сценарного выполнения: + // Изоляция обработчиков. + // Текущий шаг может ничего не знать о следующем или предыдущем шаге. + // Единый обработчик оповещения. + // Минимальный клиентский программный интерфейс формы. + // Избавляет от необходимости "разворачивать" стек в обратную сторону + // после закрытия диалога с пользователем. + // Удобная группировка кода. + // Код, вызывающий диалог и обрабатывающий ответ располагаются в одной функции. + // Простая последовательность шагов. + // Удобное отключение шагов. + + Если ТипЗнч(Сценарий.Шаги) = Тип("Строка") Тогда + Сценарий.Шаги = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Сценарий.Шаги, ",", Истина, Истина); + КонецЕсли; + Сценарий.Вставить("ШагиВГраница", Сценарий.Шаги.ВГраница()); + Сценарий.Вставить("СледующийШагИндекс", 0); + Сценарий.Вставить("ТекущийШаг", Неопределено); + Сценарий.Вставить("ТекущийШагУточнение", ""); + Сценарий.Вставить("Обработчик", Новый ОписаниеОповещения("ВыполнитьСценарий", ЭтотОбъект, Сценарий)); + Сценарий.Вставить("ПричинаОтказа", ""); + + НайтиСледующийШаг(Сценарий); + + ВыполнитьСценарий(Неопределено, Сценарий); +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьСценарий(ВыборПользователя, Сценарий) Экспорт + Пока ВыполнитьШаг(ВыборПользователя, Сценарий) Цикл + Если Не НайтиСледующийШаг(Сценарий) Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + Если ЗначениеЗаполнено(Сценарий.ПричинаОтказа) Тогда + ПоказатьПредупреждение(, Сценарий.ПричинаОтказа); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Функция НайтиСледующийШаг(Сценарий) + Если Сценарий.СледующийШагИндекс > Сценарий.ШагиВГраница Тогда + Возврат Ложь; + КонецЕсли; + Сценарий.ТекущийШаг = Сценарий.Шаги.Получить(Сценарий.СледующийШагИндекс); + Сценарий.ТекущийШагУточнение = ""; + Сценарий.СледующийШагИндекс = Сценарий.СледующийШагИндекс + 1; + Возврат Истина; +КонецФункции + +&НаКлиенте +Функция ВыполнитьШаг(ВыборПользователя, Сценарий) + + Если Сценарий.ТекущийШаг = "ОпределитьВыделенныеСтроки" Тогда + Возврат ШагОпределитьВыделенныеСтроки(ВыборПользователя, Сценарий); + + ИначеЕсли Сценарий.ТекущийШаг = "ОтредактироватьГруппуПолей" Тогда + Возврат ШагОтредактироватьГруппуПолей(ВыборПользователя, Сценарий); + + ИначеЕсли Сценарий.ТекущийШаг = "СгруппироватьСтроки" Тогда + Возврат ШагСгруппироватьСтроки(ВыборПользователя, Сценарий); + + ИначеЕсли Сценарий.ТекущийШаг = "СдвинутьСтроки" Тогда + Возврат ШагСдвинутьСтроки(ВыборПользователя, Сценарий); + + ИначеЕсли Сценарий.ТекущийШаг = "УдалитьСтроки" Тогда + Возврат ШагУдалитьСтроки(ВыборПользователя, Сценарий); + + ИначеЕсли Сценарий.ТекущийШаг = "ОбновитьФорму" Тогда + Возврат ШагОбновитьФорму(ВыборПользователя, Сценарий); + + Иначе + Сценарий.ПричинаОтказа = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка в сценарии: Неизвестный шаг ""%1"".'"), Сценарий.ТекущийШаг); + Возврат Ложь; + + КонецЕсли; + + // Альтернативы этим веткам условий: + // "Вычислить()" - неприемлемо использовать только для минимизации кода; + // "ВыполнитьОбработкуОповещения()" - не выгодно, т.к. поддерживаются только процедуры, + // а следовательно следующий шаг придется запускать из предыдущего шага; + // Т.е. исчезает такой большой плюс как изоляция обработчиков от асинхронной логики. + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Клиент - Шаги сценарного выполнения. + +&НаКлиенте +Функция ШагОбновитьФорму(ВыборПользователя, Сценарий) + Сценарий.Вставить("ИмяСобытия", Сценарий.ТаблицаИмя + "." + Сценарий.Действие); + + // Временное хранилище несериализуемых параметров. + Хранилище = Новый Структура("Обработчик, СтрокиДерева, ТекущаяСтрока, ТекущийРодитель"); + ЗаполнитьЗначенияСвойств(Хранилище, Сценарий); + Для Каждого КлючИЗначение Из Хранилище Цикл + Сценарий.Удалить(КлючИЗначение.Ключ); + КонецЦикла; + + // Вызов сервера. + БыстрыеНастройкиЗаполнитьКлиент(Сценарий); + + // Возвращение параметров. + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Сценарий, Хранилище, Истина); + + Возврат Истина; // Продолжить сценарий. +КонецФункции + +&НаКлиенте +Функция ШагОпределитьВыделенныеСтроки(ВыборПользователя, Сценарий) + // 1. Дополняет структуру сценария информацией: + Сценарий.Вставить("СтрокиДерева", Новый Массив); // Выделенные строки (не идентификаторы). + Сценарий.Вставить("ТекущаяСтрока", Неопределено); // Активная строка (не идентификатор). + // 2. Осуществляет проверку выделенных строк согласно сценарию. + // 3. Останавливает сценарий если ничего не выделено. + ТаблицаЭлемент = Элементы[Сценарий.ТаблицаИмя]; + ТаблицаРеквизит = ЭтотОбъект[Сценарий.ТаблицаИмя]; + ТекущаяСтрокаИдентификатор = ТаблицаЭлемент.ТекущаяСтрока; + + Особенности = Новый Структура("МогутБытьРазделы, МогутБытьПараметры, + |ТребоватьОдногоРодителя"); + Особенности.МогутБытьРазделы = (Сценарий.ТаблицаИмя = "Отборы" Или Сценарий.ТаблицаИмя = "ВыбранныеПоля" Или Сценарий.ТаблицаИмя = "Сортировка"); + Особенности.МогутБытьПараметры = (Сценарий.ТаблицаИмя = "Отборы"); + Особенности.ТребоватьОдногоРодителя = (Сценарий.Действие = "Переместить" Или Сценарий.Действие = "Сгруппировать"); + Если Особенности.ТребоватьОдногоРодителя Тогда + Сценарий.Вставить("ТекущийРодитель", -1); + КонецЕсли; + + ВыделенныеСтроки = МассивСортировать(ТаблицаЭлемент.ВыделенныеСтроки, НаправлениеСортировки.Возр); + Для Каждого СтрокаИдентификатор Из ВыделенныеСтроки Цикл + СтрокаДерева = ТаблицаРеквизит.НайтиПоИдентификатору(СтрокаИдентификатор); + Если Не ЗарегистрироватьВыделеннуюСтроку(Сценарий, СтрокаДерева, Особенности) Тогда + Возврат Ложь; // Завершить сценарий. + КонецЕсли; + Если СтрокаИдентификатор = ТекущаяСтрокаИдентификатор Тогда + Сценарий.ТекущаяСтрока = СтрокаДерева; + КонецЕсли; + КонецЦикла; + Если Сценарий.СтрокиДерева.Количество() = 0 Тогда + Сценарий.ПричинаОтказа = НСтр("ru = 'Выберите элементы.'"); + Возврат Ложь; // Завершить сценарий. + КонецЕсли; + Если Сценарий.ТекущаяСтрока = Неопределено Тогда + Если Сценарий.Действие = "ИзменитьГруппу" Тогда + Сценарий.ПричинаОтказа = НСтр("ru = 'Выберите группу.'"); + Возврат Ложь; // Завершить сценарий. + КонецЕсли; + КонецЕсли; + + Возврат Истина; // Продолжить сценарий. +КонецФункции + +&НаКлиенте +Функция ЗарегистрироватьВыделеннуюСтроку(Сценарий, СтрокаДерева, Особенности) + Если Сценарий.СтрокиДерева.Найти(СтрокаДерева) <> Неопределено Тогда + Возврат Истина; // Пропустить строку. + КонецЕсли; + Если Особенности.МогутБытьРазделы И СтрокаДерева.ЭтоРаздел Тогда + Возврат Истина; // Пропустить строку. + КонецЕсли; + Если Особенности.МогутБытьПараметры И СтрокаДерева.ЭтоПараметр Тогда + Если Сценарий.Действие = "Переместить" Тогда + Сценарий.ПричинаОтказа = НСтр("ru = 'Параметры не могут быть перемещены.'"); + ИначеЕсли Сценарий.Действие = "Сгруппировать" Тогда + Сценарий.ПричинаОтказа = НСтр("ru = 'Параметры не могут быть участниками групп.'"); + ИначеЕсли Сценарий.Действие = "Удалить" Тогда + Сценарий.ПричинаОтказа = НСтр("ru = 'Параметры не могут быть удалены.'"); + КонецЕсли; + Возврат Ложь; // Завершить сценарий. + КонецЕсли; + Если Особенности.ТребоватьОдногоРодителя Тогда + Родитель = СтрокаДерева.ПолучитьРодителя(); + Если Сценарий.ТекущийРодитель = -1 Тогда + Сценарий.ТекущийРодитель = Родитель; + ИначеЕсли Сценарий.ТекущийРодитель <> Родитель Тогда + Если Сценарий.Действие = "Переместить" Тогда + Сценарий.ПричинаОтказа = НСтр("ru = 'Выбранные элементы не могут быть перемещены, поскольку они принадлежат разным родителям.'"); + ИначеЕсли Сценарий.Действие = "Сгруппировать" Тогда + Сценарий.ПричинаОтказа = НСтр("ru = 'Выбранные элементы не могут быть сгруппированы, поскольку они принадлежат разным родителям.'"); + КонецЕсли; + Возврат Ложь; // Завершить сценарий. + КонецЕсли; + КонецЕсли; + Сценарий.СтрокиДерева.Добавить(СтрокаДерева); + Возврат Истина; // Следующая строка. +КонецФункции + +&НаКлиенте +Функция ШагОтредактироватьГруппуПолей(ВыборПользователя, Сценарий) + // По результатам редактирования группы дополняет структуру сценария информацией: + // * ЗаголовокГруппы - Строка + // * Расположение - РасположениеПоляКомпоновкиДанных. + + Если Сценарий.ТекущийШагУточнение = "" Тогда // Первый вызов + ПараметрыФормы = Новый Структура; + Если Сценарий.Действие = "ИзменитьГруппу" Тогда + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Сценарий.ТаблицаИмя, Сценарий.ТекущаяСтрока); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(Сценарий.ТекущаяСтрока.ИдентификаторКД); + ПараметрыФормы.Вставить("ЗаголовокГруппы", ЭлементКД.Заголовок); + ПараметрыФормы.Вставить("Расположение", ЭлементКД.Расположение); + Иначе + ПараметрыФормы.Вставить("Расположение", РасположениеПоляКомпоновкиДанных.Авто); + КонецЕсли; + + Блокировать = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + + Сценарий.ТекущийШагУточнение = "ОбработкаВыбора"; + ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.ГруппаВыбранныхПолей", ПараметрыФормы, ЭтотОбъект, Истина, , , Сценарий.Обработчик, Блокировать); + Возврат Ложь; // Приостановить сценарий. + + ИначеЕсли Сценарий.ТекущийШагУточнение = "ОбработкаВыбора" Тогда // После закрытия формы. + + Если ВыборПользователя = Неопределено Или ВыборПользователя = КодВозвратаДиалога.Отмена Тогда + Возврат Ложь; // Отменить сценарий. + КонецЕсли; + + Сценарий.Вставить("ЗаголовокГруппы", ВыборПользователя.ЗаголовокГруппы); + Сценарий.Вставить("Расположение", ВыборПользователя.Расположение); + Возврат Истина; // Продолжить сценарий. + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция ШагСгруппироватьСтроки(ВыборПользователя, Сценарий) + ТекущийРодитель = Сценарий.ТекущийРодитель; + ТаблицаЭлемент = Элементы[Сценарий.ТаблицаИмя]; + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Сценарий.ТаблицаИмя, Неопределено); + + Если Сценарий.ТекущийРодитель = Неопределено Тогда + ТаблицаРеквизит = ЭтотОбъект[Сценарий.ТаблицаИмя]; + Если Сценарий.ТаблицаИмя = "Отборы" И Не РежимИзмененияУзлаВарианта Тогда + ТекущийРодитель = ТаблицаРеквизит.ПолучитьЭлементы()[1]; + Иначе + ТекущийРодитель = ТаблицаРеквизит; + КонецЕсли; + ТекущийРодительКД = УзелКД; + ИначеЕсли ТипЗнч(ТекущийРодитель.ИдентификаторКД) <> Тип("ИдентификаторКомпоновкиДанных") Тогда + ТекущийРодительКД = УзелКД; + Иначе + ТекущийРодительКД = УзелКД.ПолучитьОбъектПоИдентификатору(ТекущийРодитель.ИдентификаторКД); + КонецЕсли; + СтрокиРодителя = ТекущийРодитель.ПолучитьЭлементы(); + СтрокиРодителяКД = ТекущийРодительКД.Элементы; + + // Проверки пройдены. Добавление группы в родителя родителя. + Группы = ТаблицыПолейВставить(Сценарий.ТаблицаИмя, Сценарий.ТипГруппыКД, 0, Ложь); + + ЭлементКД = Группы.ЭлементКД; + ЭлементКД.Использование = Истина; + НоваяКоллекцияЭлементовКД = ЭлементКД.Элементы; + + ГруппаДерева = Группы.СтрокаТаблицы; + ГруппаДерева.Использование = ЭлементКД.Использование; + ГруппаДерева.ЭтоГруппа = Истина; + НоваяКоллекцияСтрокДерева = ГруппаДерева.ПолучитьЭлементы(); + + Если Сценарий.ТаблицаИмя = "Отборы" Тогда + ГруппаДерева.Представление = Строка(ЭлементКД.ТипГруппы); + ГруппаДерева.ИндексКартинки = -1; + ГруппаДерева.ИндексКартинкиДоступа = 5; + ГруппаДерева.Заголовок = ГруппаДерева.Представление; + Иначе + ЭлементКД.Заголовок = Сценарий.ЗаголовокГруппы; + ЭлементКД.Расположение = Сценарий.Расположение; + ГруппаДерева.ИндексКартинки = 1; + ГруппаДерева.Представление = ЭлементКД.Заголовок; + Если ЭлементКД.Расположение <> РасположениеПоляКомпоновкиДанных.Авто Тогда + ГруппаДерева.Представление = ГруппаДерева.Представление + " (" + Строка(ЭлементКД.Расположение) + ")"; + КонецЕсли; + КонецЕсли; + + Для Каждого СтараяСтрокаДерева Из Сценарий.СтрокиДерева Цикл + СтарыйЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтараяСтрокаДерева.ИдентификаторКД); + ТаблицыПолейСкопироватьРекурсивно(УзелКД, СтараяСтрокаДерева, НоваяКоллекцияСтрокДерева, СтарыйЭлементКД, НоваяКоллекцияЭлементовКД); + СтрокиРодителя.Удалить(СтараяСтрокаДерева); + СтрокиРодителяКД.Удалить(СтарыйЭлементКД); + КонецЦикла; + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; + + Возврат Истина; // Продолжить сценарий. +КонецФункции + +&НаКлиенте +Функция ШагСдвинутьСтроки(ВыборПользователя, Сценарий) + ТекущийРодитель = Сценарий.ТекущийРодитель; + ТаблицаЭлемент = Элементы[Сценарий.ТаблицаИмя]; + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Сценарий.ТаблицаИмя, Неопределено); + + Если Сценарий.ТекущийРодитель = Неопределено Тогда + ТаблицаРеквизит = ЭтотОбъект[Сценарий.ТаблицаИмя]; + Если Сценарий.ТаблицаИмя = "Отборы" И Не РежимИзмененияУзлаВарианта Тогда + ТекущийРодитель = ТаблицаРеквизит.ПолучитьЭлементы()[1]; + Иначе + ТекущийРодитель = ТаблицаРеквизит; + КонецЕсли; + ТекущийРодительКД = УзелКД; + ИначеЕсли ТипЗнч(ТекущийРодитель.ИдентификаторКД) <> Тип("ИдентификаторКомпоновкиДанных") Тогда + ТекущийРодительКД = УзелКД; + Иначе + ТекущийРодительКД = УзелКД.ПолучитьОбъектПоИдентификатору(ТекущийРодитель.ИдентификаторКД); + КонецЕсли; + СтрокиРодителя = ТекущийРодитель.ПолучитьЭлементы(); + СтрокиРодителяКД = ПолучитьЭлементыКД(УзелКД, ТекущийРодительКД); + + ВерхняяГраницаСтрок = СтрокиРодителя.Количество() - 1; + ВыделеноСтрок = Сценарий.СтрокиДерева.Количество(); + + // Массив выделенных строк на встречу движению: + // Если двигаем строки в "+", то обходим "от большего к меньшему"; + // Если в "-", то обходим "от меньшего к большему". + ДвигаемсяПоВозрастанию = (Сценарий.Направление < 0); + + Для Номер = 1 По ВыделеноСтрок Цикл + Если ДвигаемсяПоВозрастанию Тогда + ИндексВМассиве = Номер - 1; + Иначе + ИндексВМассиве = ВыделеноСтрок - Номер; + КонецЕсли; + + СтрокаДерева = Сценарий.СтрокиДерева[ИндексВМассиве]; + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаДерева.ИдентификаторКД); + + ИндексВДереве = СтрокиРодителя.Индекс(СтрокаДерева); + ГдеОкажетсяСтрока = ИндексВДереве + Сценарий.Направление; + Если ГдеОкажетсяСтрока < 0 Тогда // Перемещаем "в конец". + СтрокиРодителя.Сдвинуть(ИндексВДереве, ВерхняяГраницаСтрок - ИндексВДереве); + СтрокиРодителяКД.Сдвинуть(ЭлементКД, ВерхняяГраницаСтрок - ИндексВДереве); + ИначеЕсли ГдеОкажетсяСтрока > ВерхняяГраницаСтрок Тогда // Перемещаем "в начало". + СтрокиРодителя.Сдвинуть(ИндексВДереве, -ИндексВДереве); + СтрокиРодителяКД.Сдвинуть(ЭлементКД, -ИндексВДереве); + Иначе + СтрокиРодителя.Сдвинуть(ИндексВДереве, Сценарий.Направление); + СтрокиРодителяКД.Сдвинуть(ЭлементКД, Сценарий.Направление); + КонецЕсли; + КонецЦикла; + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; + + Возврат Истина; // Продолжить сценарий. +КонецФункции + +&НаКлиенте +Функция ШагУдалитьСтроки(ВыборПользователя, Сценарий) + + ТаблицаРеквизит = ЭтотОбъект[Сценарий.ТаблицаИмя]; + + Для Каждого СтрокаТаблицы Из Сценарий.СтрокиДерева Цикл + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Сценарий.ТаблицаИмя, СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + + СтрокаРодитель = СтрокаТаблицы.ПолучитьРодителя(); + РодительКД = НайтиОбъектКД(УзелКД, СтрокаРодитель); + + ОткудаУдалить = ПолучитьЭлементы(ТаблицаРеквизит, СтрокаРодитель); + ОткудаУдалить.Удалить(СтрокаТаблицы); + + ОткудаУдалитьКД = ПолучитьЭлементыКД(УзелКД, РодительКД); + ОткудаУдалитьКД.Удалить(ЭлементКД); + + КонецЦикла; + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; + + Возврат Истина; // Продолжить сценарий. +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Клиент - Параметры и отборы. + +&НаКлиенте +Процедура ОтборыПоказатьВыборПериода(СтрокаТаблицы) + Контекст = Новый Структура; + Контекст.Вставить("СтрокаИдентификатор", СтрокаТаблицы.ПолучитьИдентификатор()); + Обработчик = Новый ОписаниеОповещения("ОтборыЗавершениеВыбораПериода", ЭтотОбъект, Контекст); + Диалог = Новый ДиалогРедактированияСтандартногоПериода; + Диалог.Период = СтрокаТаблицы.Значение; + Диалог.Показать(Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыЗавершениеВыбораПериода(Период, Контекст) Экспорт + Если Период = Неопределено Тогда + Возврат; + КонецЕсли; + + СтрокаТаблицы = Отборы.НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Отборы", СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + СтрокаТаблицы.Значение = Период; + СтрокаТаблицы.Условие = ОтчетыКлиентСервер.ПолучитьВидСтандартногоПериода(СтрокаТаблицы.Значение); + + Если СтрокаТаблицы.ЭтоПараметр Тогда + ЭлементКД.Значение = СтрокаТаблицы.Значение; + Иначе + ЭлементКД.ПравоеЗначение = СтрокаТаблицы.Значение; + КонецЕсли; + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыПоказатьВыборСсылки(СтрокаТаблицы, СтандартнаяОбработка) + ПараметрыФормы = ПараметрыВыбораОтбора(СтрокаТаблицы); + Если ПараметрыФормы = Неопределено Тогда + СтандартнаяОбработка = Истина; + Возврат; + КонецЕсли; + + Анализ = ОтчетыКлиентСервер.АнализТипов(ПараметрыФормы.ОписаниеТипов, Ложь); + Если Не Анализ.СодержитОбъектныеТипы Тогда + СтандартнаяОбработка = Истина; + Возврат; + КонецЕсли; + + ПараметрыФормы.Вставить("МножественныйВыбор", Ложь); + ПараметрыФормы.Вставить("Отмеченные", ОтчетыКлиентСервер.ЗначенияСписком(СтрокаТаблицы.Значение)); + ПараметрыФормы.Вставить("Представление", СтрокаТаблицы.Представление); + + Контекст = Новый Структура; + Контекст.Вставить("СтрокаИдентификатор", СтрокаТаблицы.ПолучитьИдентификатор()); + Контекст.Вставить("ПараметрыФормы", ПараметрыФормы); + + Обработчик = Новый ОписаниеОповещения("ОтборыПоказатьВыборСсылкиПослеВыбораТипа", ЭтотОбъект, Контекст); + + // Полное имя формы выбора. + // Свойство "ФормаВыбора" недоступно на клиенте даже для чтения, + // поэтому для хранения предустановленных имен форм выбора используется коллекция БыстрыйПоискИменОбъектовМетаданных. + Если ЗначениеЗаполнено(ПараметрыФормы.ПутьКФорме) Тогда + ВыполнитьОбработкуОповещения(Обработчик, ПараметрыФормы.ПутьКФорме); + Иначе + // Выбор типа из списка. + СписокВыбора = Новый СписокЗначений; + СписокВыбора.ЗагрузитьЗначения(Анализ.ОбъектныеТипы); + + Если СписокВыбора.Количество() = 1 Тогда // Один тип - выбор не требуется. + ВыполнитьОбработкуОповещения(Обработчик, СписокВыбора[0]); + Иначе + ПоказатьВыборИзСписка(Обработчик, СписокВыбора); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыПоказатьВыборСсылкиПослеВыбораТипа(ПутьКФормеИлиЭлементСписка, Контекст) Экспорт + Если ТипЗнч(ПутьКФормеИлиЭлементСписка) = Тип("Строка") Тогда + ПутьКФорме = ПутьКФормеИлиЭлементСписка; + ИначеЕсли ТипЗнч(ПутьКФормеИлиЭлементСписка) = Тип("ЭлементСпискаЗначений") Тогда + Тип = ПутьКФормеИлиЭлементСписка.Значение; + ИмяОбъектаМетаданных = БыстрыйПоискИменОбъектовМетаданных.Получить(Тип); + Если Контекст.ПараметрыФормы.ВыборГруппИЭлементов = ГруппыИЭлементы.Группы Тогда + ВидОбъектаМетаданных = ВРег(СтрРазделить(ИмяОбъектаМетаданных, ".")[0]); + Если ВидОбъектаМетаданных = "СПРАВОЧНИК" Или ВидОбъектаМетаданных = "ПЛАНВИДОВХАРАКТЕРИСТИК" Тогда + ПутьКФорме = ИмяОбъектаМетаданных + ".ФормаВыбораГруппы"; + Иначе + ПутьКФорме = ИмяОбъектаМетаданных + ".ФормаВыбора"; + КонецЕсли; + Иначе + ПутьКФорме = ИмяОбъектаМетаданных + ".ФормаВыбора"; + КонецЕсли; + Иначе + Возврат; + КонецЕсли; + + Обработчик = Новый ОписаниеОповещения("ОтборыЗавершениеВыбораСсылки", ЭтотОбъект, Контекст); + + Блокировать = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + + ОткрытьФорму(ПутьКФорме, Контекст.ПараметрыФормы, ЭтотОбъект, , , , Обработчик, Блокировать); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыЗавершениеВыбораСсылки(Ссылка, Контекст) Экспорт + Если Не Контекст.ПараметрыФормы.ОписаниеТипов.СодержитТип(ТипЗнч(Ссылка)) Или Не ЗначениеЗаполнено(Ссылка) Тогда + Возврат; + КонецЕсли; + + СтрокаТаблицы = Отборы.НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Отборы", СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + СтрокаТаблицы.Значение = Ссылка; + + Если СтрокаТаблицы.ЭтоПараметр Тогда + ЭлементКД.Значение = Ссылка; + Иначе + ЭлементКД.ПравоеЗначение = Ссылка; + КонецЕсли; + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыПоказатьСписокСФлажками(СтрокаТаблицы) + ПараметрыФормы = ПараметрыВыбораОтбора(СтрокаТаблицы); + Если ПараметрыФормы = Неопределено Тогда + Возврат; + КонецЕсли; + + ПараметрыОбработчика = Новый Структура; + ПараметрыОбработчика.Вставить("СтрокаИдентификатор", СтрокаТаблицы.ПолучитьИдентификатор()); + Обработчик = Новый ОписаниеОповещения("ОтборыЗавершениеВводаСпискомСФлажками", ЭтотОбъект, ПараметрыОбработчика); + + ПараметрыФормы.Вставить("Отмеченные", ОтчетыКлиентСервер.ЗначенияСписком(СтрокаТаблицы.Значение)); + ПараметрыФормы.Вставить("Представление", СтрокаТаблицы.Представление); + + Блокировать = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + + ОткрытьФорму("ОбщаяФорма.ВводЗначенийСпискомСФлажками", ПараметрыФормы, ЭтотОбъект, , , , Обработчик, Блокировать); +КонецПроцедуры + +&НаКлиенте +Функция ПараметрыВыбораОтбора(СтрокаТаблицы) + ИдентификаторЭлемента = СтрокаТаблицы.ПолучитьИдентификатор(); + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Отборы", СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Результат = Новый Структура("ЗначенияДляВыбора, ОграничиватьВыборУказаннымиЗначениями, ОписаниеТипов"); + + ДополнительныеНастройки = СтрокаТаблицы.Дополнительно; + ЗаполнитьЗначенияСвойств(Результат, ДополнительныеНастройки); + + ВыборГруппИЭлементов = ОтчетыКлиентСервер.ПривестиЗначениеКТипуГруппыИЭлементы( + СтрокаТаблицы.Условие, + СтрокаТаблицы.ВыборГруппИЭлементов); + + // Включенный флажок ВводСписком означает что параметры готовятся для промежуточной формы ВводЗначенийСпискомСФлажками. + Результат.Вставить("ВводСписком", СтрокаТаблицы.ВводСписком); + + // Стандартные параметры формы. + Результат.Вставить("ЗакрыватьПриВыборе", Истина); + Результат.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина); + Результат.Вставить("Отбор", Новый Структура); + // Стандартные параметры формы выбора (см. Расширение управляемой формы для динамического списка). + Результат.Вставить("ВыборГруппИЭлементов", ВыборГруппИЭлементов); + Результат.Вставить("МножественныйВыбор", Ложь); + Результат.Вставить("РежимВыбора", Истина); + // Предполагаемые реквизиты. + Результат.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + Результат.Вставить("РазрешитьНачалоПеретаскивания", Ложь); + + Результат.Вставить("ПутьКФорме", ДополнительныеНастройки.ФормаВыбора); + + Результат.Вставить("ПараметрыВыбора", Новый Массив); + Результат.Вставить("КлючУникальности", ЭлементКД.ИдентификаторПользовательскойНастройки); + + // Фиксированные параметры выбора и связи от скрытых ведущих (предопределенные в текущем контексте). + Для Каждого ПараметрВыбора Из ДополнительныеНастройки.ПараметрыВыбора Цикл + Если ПустаяСтрока(ПараметрВыбора.Имя) Тогда + Продолжить; + КонецЕсли; + Если Результат.ВводСписком Тогда + Результат.ПараметрыВыбора.Добавить(ПараметрВыбора); + Иначе + Если ВРег(Лев(ПараметрВыбора.Имя, 6)) = ВРег("Отбор.") Тогда + Результат.Отбор.Вставить(Сред(ПараметрВыбора.Имя, 7), ПараметрВыбора.Значение); + Иначе + Результат.Вставить(ПараметрВыбора.Имя, ПараметрВыбора.Значение); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + // Динамические связи от ведущих. + Связи = ОтключаемыеСвязи.НайтиСтроки(Новый Структура("ПодчиненныйИдентификаторВФорме", ИдентификаторЭлемента)); + Для Каждого Связь Из Связи Цикл + СтрокаВедущий = Отборы.НайтиПоИдентификатору(Связь.ВедущийИдентификаторВФорме); + Если СтрокаВедущий = Неопределено Тогда + Продолжить; + КонецЕсли; + Если Не СтрокаВедущий.Использование Тогда + Продолжить; + КонецЕсли; + ЗначениеВедущего = СтрокаВедущий.Значение; + ТипЗначенияВедущего = ТипЗнч(ЗначениеВедущего); + Если Связь.ТипСвязи = "ПоТипу" Тогда + Если СтрокаВедущий.Условие <> ВидСравненияКомпоновкиДанных.Равно Тогда + Продолжить; + КонецЕсли; + Результат.Вставить("ОграничениеТипа", ТипЗначенияВедущего); + Если Результат.ОписаниеТипов.СодержитТип(ТипЗначенияВедущего) Тогда + Вычитаемые = Результат.ОписаниеТипов.Типы(); + Вычитаемые.Удалить(Вычитаемые.Найти(ТипЗначенияВедущего)); + Результат.ОписаниеТипов = Новый ОписаниеТипов(Результат.ОписаниеТипов, , Вычитаемые); + КонецЕсли; + ИначеЕсли Связь.ТипСвязи = "ПоМетаданным" Или Связь.ТипСвязи = "ПараметровВыбора" Тогда + Если Связь.ТипСвязи = "ПоМетаданным" И Не Связь.ВедущийТип.СодержитТип(ТипЗначенияВедущего) Тогда + Продолжить; + КонецЕсли; + Если Результат.ВводСписком Тогда + Результат.ПараметрыВыбора.Добавить(Новый ПараметрВыбора(Связь.ПодчиненныйИмяПараметра, ЗначениеВедущего)); + Иначе + Если ВРег(Лев(Связь.ПодчиненныйИмяПараметра, 6)) = ВРег("Отбор.") Тогда + Результат.Отбор.Вставить(Сред(Связь.ПодчиненныйИмяПараметра, 7), ЗначениеВедущего); + Иначе + Результат.Вставить(Связь.ПодчиненныйИмяПараметра, ЗначениеВедущего); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +&НаКлиенте +Процедура ОтборыЗавершениеВводаСпискомСФлажками(РезультатВыбора, Контекст) Экспорт + Если ТипЗнч(РезультатВыбора) <> Тип("СписокЗначений") Тогда + Возврат; + КонецЕсли; + + СтрокаТаблицы = Отборы.НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Отборы", СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + ДополнительныеНастройки = СтрокаТаблицы.Дополнительно; + + // Загрузка выбранных значений в 2 списка. + СписокЗначенийВСКД = Новый СписокЗначений; + Если Не ДополнительныеНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда + ДополнительныеНастройки.ЗначенияДляВыбора = Новый СписокЗначений; + КонецЕсли; + Для Каждого ЭлементСпискаВФорме Из РезультатВыбора Цикл + ЗначениеВФорме = ЭлементСпискаВФорме.Значение; + Если Не ДополнительныеНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда + Если ДополнительныеНастройки.ЗначенияДляВыбора.НайтиПоЗначению(ЗначениеВФорме) <> Неопределено Тогда + Продолжить; + КонецЕсли; + ЗаполнитьЗначенияСвойств(ДополнительныеНастройки.ЗначенияДляВыбора.Добавить(), ЭлементСпискаВФорме); + КонецЕсли; + Если ЭлементСпискаВФорме.Пометка Тогда + ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(СписокЗначенийВСКД, ЗначениеВФорме, ЭлементСпискаВФорме.Представление, Истина); + КонецЕсли; + КонецЦикла; + Если ТипЗнч(ЭлементКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ЭлементКД.ПравоеЗначение = СписокЗначенийВСКД; + Иначе + ЭлементКД.Значение = СписокЗначенийВСКД; + КонецЕсли; + СтрокаТаблицы.Значение = СписокЗначенийВСКД; + + // Включение флажка Использование. + ЭлементКД.Использование = Истина; + СтрокаТаблицы.Использование = Истина; + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыВыбратьВидСравнения(СтрокаТаблицы) + Если СтрокаТаблицы.ЭтоПараметр Тогда + Возврат; + КонецЕсли; + + Контекст = Новый Структура; + Контекст.Вставить("СтрокаИдентификатор", СтрокаТаблицы.ПолучитьИдентификатор()); + Обработчик = Новый ОписаниеОповещения("ОтборыЗавершениеВыбораВидаСравнения", ЭтотОбъект, Контекст); + + ИнформацияОТипах = ОтчетыКлиентСервер.АнализТипов(СтрокаТаблицы.ТипЗначения, Ложь); + + Список = Новый СписокЗначений; + + ФиксированныйСписок = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтрокаТаблицы.Дополнительно, "ОграничиватьВыборУказаннымиЗначениями", Ложь); + Если ИнформацияОТипах.ОграниченнойДлины Или ФиксированныйСписок Тогда + + Список.Добавить(ВидСравненияКомпоновкиДанных.Равно); + Список.Добавить(ВидСравненияКомпоновкиДанных.НеРавно); + + Список.Добавить(ВидСравненияКомпоновкиДанных.ВСписке); + Список.Добавить(ВидСравненияКомпоновкиДанных.НеВСписке); + + КонецЕсли; + + Если ИнформацияОТипах.ОграниченнойДлины + И ИнформацияОТипах.СодержитОбъектныеТипы Тогда + + Список.Добавить(ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии); // НСтр("ru = 'В списке включая подчиненные'") + Список.Добавить(ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии); // НСтр("ru = 'Не в списке включая подчиненные'"). + + Список.Добавить(ВидСравненияКомпоновкиДанных.ВИерархии); // НСтр("ru = 'В группе'") + Список.Добавить(ВидСравненияКомпоновкиДанных.НеВИерархии); // НСтр("ru = 'Не в группе'") + + КонецЕсли; + + Если ИнформацияОТипах.ОграниченнойДлины + И ИнформацияОТипах.КоличествоПримитивныхТипов > 0 Тогда + + Список.Добавить(ВидСравненияКомпоновкиДанных.Меньше); + Список.Добавить(ВидСравненияКомпоновкиДанных.МеньшеИлиРавно); + + Список.Добавить(ВидСравненияКомпоновкиДанных.Больше); + Список.Добавить(ВидСравненияКомпоновкиДанных.БольшеИлиРавно); + + КонецЕсли; + + Если Не ФиксированныйСписок И ИнформацияОТипах.СодержитТипСтрока Тогда + + Список.Добавить(ВидСравненияКомпоновкиДанных.Содержит); + Список.Добавить(ВидСравненияКомпоновкиДанных.НеСодержит); + + Список.Добавить(ВидСравненияКомпоновкиДанных.Подобно); + Список.Добавить(ВидСравненияКомпоновкиДанных.НеПодобно); + + Список.Добавить(ВидСравненияКомпоновкиДанных.НачинаетсяС); + Список.Добавить(ВидСравненияКомпоновкиДанных.НеНачинаетсяС); + + КонецЕсли; + + Если ИнформацияОТипах.ОграниченнойДлины Или ФиксированныйСписок Тогда + + Список.Добавить(ВидСравненияКомпоновкиДанных.Заполнено); + Список.Добавить(ВидСравненияКомпоновкиДанных.НеЗаполнено); + + КонецЕсли; + + ПоказатьВыборИзМеню(Обработчик, Список, Элементы.Отборы); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыЗавершениеВыбораВидаСравнения(Результат, Контекст) Экспорт + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + СтрокаТаблицы = Отборы.НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Отборы", СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + СтрокаТаблицы.Условие = Результат.Значение; + ЭлементКД.ВидСравнения = Результат.Значение; + + БылВводСписком = СтрокаТаблицы.ВводСписком; + СталВводСписком = Ложь; + Если СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.ВСписке + Или СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии + Или СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.НеВСписке + Или СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда + Элементы.ОтборыЗначение.ВыборГруппИЭлементов = ГруппыИЭлементы.ГруппыИЭлементы; + СталВводСписком = Истина; + ИначеЕсли СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.ВИерархии + Или СтрокаТаблицы.Условие = ВидСравненияКомпоновкиДанных.НеВИерархии Тогда + Элементы.ОтборыЗначение.ВыборГруппИЭлементов = ГруппыИЭлементы.Группы; + Иначе + Элементы.ОтборыЗначение.ВыборГруппИЭлементов = СтрокаТаблицы.ВыборГруппИЭлементов; + КонецЕсли; + + Если БылВводСписком <> СталВводСписком Тогда + Если БылВводСписком Тогда + Если ТипЗнч(ЭлементКД.ПравоеЗначение) = Тип("СписокЗначений") + И ЭлементКД.ПравоеЗначение.Количество() > 0 Тогда + ЭлементКД.ПравоеЗначение = ЭлементКД.ПравоеЗначение[0].Значение; + Иначе + ЭлементКД.ПравоеЗначение = Неопределено; + КонецЕсли; + Иначе + ЭлементКД.ПравоеЗначение = ОтчетыКлиентСервер.ЗначенияСписком(ЭлементКД.ПравоеЗначение); + КонецЕсли; + Обновить(); // Серьезные изменения, для учета всех связей и особенностей вывода следует перерисовать полностью. + КонецЕсли; + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыВыбратьЗначениеИзСписка(СтрокаТаблицы) + Если СтрокаТаблицы.Дополнительно = Неопределено Тогда + Возврат; + КонецЕсли; + ЗначенияДляВыбора = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтрокаТаблицы.Дополнительно, "ЗначенияДляВыбора"); + Если ТипЗнч(ЗначенияДляВыбора) <> Тип("СписокЗначений") Или ЗначенияДляВыбора.Количество() = 0 Тогда + Возврат; + КонецЕсли; + Контекст = Новый Структура; + Контекст.Вставить("СтрокаИдентификатор", СтрокаТаблицы.ПолучитьИдентификатор()); + Обработчик = Новый ОписаниеОповещения("ОтборыЗавершениеВыбораЗначенияИзСписка", ЭтотОбъект, Контекст); + ПоказатьВыборИзМеню(Обработчик, ЗначенияДляВыбора, Элементы.Отборы); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборыЗавершениеВыбораЗначенияИзСписка(Результат, Контекст) Экспорт + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + + СтрокаТаблицы = Отборы.НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Отборы", СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + // Отражение изменений в значении. + Если ТипЗнч(ЭлементКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ЭлементКД.ПравоеЗначение = Результат.Значение; + Иначе + ЭлементКД.Значение = Результат.Значение; + КонецЕсли; + СтрокаТаблицы.ПредставлениеЗначения = Результат.Представление; + + // Включение флажка Использование. + ЭлементКД.Использование = Истина; + СтрокаТаблицы.Использование = Истина; + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Клиент - Структура варианта. + +&НаКлиенте +Процедура СтруктураВариантаИзменитьУзел(ТаблицаИмя, СтрокаИдентификатор, СтрокаТаблицы, ИмяСтраницы) + Контекст = Новый Структура("ТаблицаИмя, СтрокаИдентификатор", ТаблицаИмя, СтрокаИдентификатор); + Обработчик = Новый ОписаниеОповещения("СтруктураВариантаИзменитьУзелЗавершение", ЭтотОбъект, Контекст); + + ШаблонЗаголовка = НСтр("ru = 'Настройка %1 отчета ""%2""'"); + Если СтрокаТаблицы.Тип = "Диаграмма" Тогда + ПредставлениеУзла = НСтр("ru = 'диаграммы'"); + Иначе + ПредставлениеУзла = НСтр("ru = 'группировки'"); + КонецЕсли; + Если ЗначениеЗаполнено(СтрокаТаблицы.Заголовок) Тогда + ПредставлениеУзла = ПредставлениеУзла + " """ + СтрокаТаблицы.Заголовок + """"; + КонецЕсли; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("КлючВарианта", Строка(КлючТекущегоВарианта)); + ПараметрыФормы.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки); + ПараметрыФормы.Вставить("ПользовательскиеНастройки", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); + ПараметрыФормы.Вставить("ВариантНаименование", ВариантНаименование); + ПараметрыФормы.Вставить("ИдентификаторТекущегоУзлаКД", СтрокаТаблицы.ИдентификаторКД); + ПараметрыФормы.Вставить("ТипТекущегоУзлаКД", СтрокаТаблицы.Тип); + ПараметрыФормы.Вставить("Заголовок", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, ПредставлениеУзла, ВариантНаименование)); + Если ИмяСтраницы <> Неопределено Тогда + ПараметрыФормы.Вставить("ИмяСтраницы", ИмяСтраницы); + КонецЕсли; + + Режим = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + + ВыполнятьЗамеры = НастройкиОтчета.ВыполнятьЗамеры И ЗначениеЗаполнено(НастройкиОтчета.КлючЗамеров); + Если ВыполнятьЗамеры Тогда + ИдентификаторЗамера = Новый УникальныйИдентификатор; + МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); + МодульОценкаПроизводительностиКлиентСервер.НачатьРучнойЗамерВремени( + НастройкиОтчета.КлючЗамеров + ".Настройки", + ИдентификаторЗамера, + НастройкиОтчета.ПрефиксЗамеров); + КонецЕсли; + + ОткрытьФорму(НастройкиОтчета.ПолноеИмя + ".ФормаНастроек", ПараметрыФормы, ЭтотОбъект, , , , Обработчик, Режим); +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураВариантаИзменитьУзелЗавершение(Результат, Контекст) Экспорт + Если Результат = Неопределено Или Результат = КодВозвратаДиалога.Отмена Тогда + Возврат; + КонецЕсли; + РезультатКлиента = БыстрыеНастройкиЗаполнить(Результат); + ПоказатьРезультатЗаполненияНастроек(РезультатКлиента); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Клиент - Таблицы полей (универсальные точки входа). + +&НаКлиенте +Процедура ТаблицыПолейИзменитьУровеньДоступа(ТаблицаИмя, СтрокаИдентификатор, ПоказыватьРежимыВвода, ПоказыватьРежимыФлажков) + Контекст = Новый Структура("ТаблицаИмя, СтрокаИдентификатор", ТаблицаИмя, СтрокаИдентификатор); + Обработчик = Новый ОписаниеОповещения("ТаблицыПолейИзменитьУровеньДоступаЗавершение", ЭтотОбъект, Контекст); + + Список = Новый СписокЗначений; + Если ПоказыватьРежимыВвода Тогда + Список.Добавить(2, НСтр("ru = 'В шапке отчета'"), , БиблиотекаКартинок.БыстрыйДоступ); + КонецЕсли; + Если ПоказыватьРежимыФлажков Тогда + Список.Добавить(1, НСтр("ru = 'Только флажок в шапке отчета'"), , БиблиотекаКартинок.БыстрыйДоступСФлажком); + КонецЕсли; + Если ПоказыватьРежимыВвода Тогда + Список.Добавить(4, НСтр("ru = 'В настройках отчета'"), , БиблиотекаКартинок.Реквизит); + КонецЕсли; + Если ПоказыватьРежимыФлажков Тогда + Список.Добавить(3, НСтр("ru = 'Только флажок в настройках отчета'"), , БиблиотекаКартинок.ОбычныйДоступСФлажком); + КонецЕсли; + Список.Добавить(5, НСтр("ru = 'Не показывать'"), , БиблиотекаКартинок.СкрытаяНастройкаОтчета); + + ПоказатьВыборИзМеню(Обработчик, Список); +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицыПолейИзменитьУровеньДоступаЗавершение(Результат, Контекст) Экспорт + Если Результат = Неопределено Или Результат = КодВозвратаДиалога.Отмена Тогда + Возврат; + КонецЕсли; + ИндексКартинкиДоступа = Результат.Значение; + + СтрокаТаблицы = ЭтотОбъект[Контекст.ТаблицаИмя].НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Контекст.ТаблицаИмя, СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + ТаблицыПолейУстановитьУровеньДоступа(Контекст.ТаблицаИмя, СтрокаТаблицы, ЭлементКД, ИндексКартинкиДоступа); + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицыПолейУстановитьУровеньДоступа(ИмяТаблицы, СтрокаТаблицы, ЭлементКД, ИндексКартинкиДоступа) + Если ИндексКартинкиДоступа = Неопределено Тогда + ИндексКартинкиДоступа = СтрокаТаблицы.ИндексКартинкиДоступа; + Иначе + СтрокаТаблицы.ИндексКартинкиДоступа = ИндексКартинкиДоступа; + КонецЕсли; + + Если ИндексКартинкиДоступа = 1 Или ИндексКартинкиДоступа = 2 Тогда + ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ; + ИначеЕсли ИндексКартинкиДоступа = 3 Или ИндексКартинкиДоступа = 4 Тогда + ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный; + Иначе + ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; + КонецЕсли; + + Если ИмяТаблицы = "Отборы" И Не СтрокаТаблицы.ЭтоПараметр Тогда + Если ИндексКартинкиДоступа = 1 Или ИндексКартинкиДоступа = 3 Тогда + ЭлементКД.Представление = "1"; + Иначе + ЭлементКД.Представление = ""; + КонецЕсли; + ИначеЕсли ИмяТаблицы = "Оформление" Тогда + Если СтрокаТаблицы.ЗаголовокПереопределен Тогда + ЭлементКД.Представление = СтрокаТаблицы.Заголовок; + Иначе + Если ИндексКартинкиДоступа = 1 Или ИндексКартинкиДоступа = 3 Тогда + ЭлементКД.Представление = "1"; + Иначе + ЭлементКД.Представление = ""; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный Тогда + ЭлементКД.ИдентификаторПользовательскойНастройки = ""; + ИначеЕсли Не ЗначениеЗаполнено(ЭлементКД.ИдентификаторПользовательскойНастройки) Тогда + ЭлементКД.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор; + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Клиент - Оформление. + +&НаКлиенте +Процедура ОформлениеИзменитьЭлемент(ТаблицаИмя, СтрокаИдентификатор, СтрокаТаблицы) + Контекст = Новый Структура("ТаблицаИмя, СтрокаИдентификатор", ТаблицаИмя, СтрокаИдентификатор); + Обработчик = Новый ОписаниеОповещения("ОформлениеИзменитьЭлементЗавершение", ЭтотОбъект, Контекст); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); + ПараметрыФормы.Вставить("КомпоновщикНастроек", Отчет.КомпоновщикНастроек); + ПараметрыФормы.Вставить("ИдентификаторТекущегоУзлаКД", ИдентификаторТекущегоУзлаКД); + Если СтрокаТаблицы = Неопределено Тогда + ПараметрыФормы.Вставить("ИдентификаторКД", Неопределено); + ПараметрыФормы.Вставить("Наименование", ""); + Иначе + ПараметрыФормы.Вставить("ИдентификаторКД", СтрокаТаблицы.ИдентификаторКД); + ПараметрыФормы.Вставить("Наименование", СтрокаТаблицы.Заголовок); + КонецЕсли; + ПараметрыФормы.Вставить("Заголовок", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Элемент условного оформления отчета ""%1""'"), ВариантНаименование)); + + ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.ЭлементУсловногоОформленияОтчета", ПараметрыФормы, ЭтотОбъект, , , , Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура ОформлениеИзменитьЭлементЗавершение(Результат, Контекст) Экспорт + Если Результат = Неопределено Или Результат = КодВозвратаДиалога.Отмена Тогда + Возврат; + КонецЕсли; + ЭтоНовый = (Контекст.СтрокаИдентификатор = Неопределено); + + Таблица = ЭтотОбъект[Контекст.ТаблицаИмя]; + Если ЭтоНовый Тогда + РезультатВставки = ТаблицыПолейВставить(Контекст.ТаблицаИмя, Тип("ЭлементУсловногоОформленияКомпоновкиДанных"), 0, Ложь); + СтрокаТаблицы = РезультатВставки.СтрокаТаблицы; + УзелКД = РезультатВставки.УзелКД; + ЭлементКД = РезультатВставки.ЭлементКД; + СтрокаТаблицы.ИндексКартинкиДоступа = 4; + Иначе + СтрокаТаблицы = Таблица.НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Контекст.ТаблицаИмя, СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + ЭлементКД.Отбор.Элементы.Очистить(); + ЭлементКД.Поля.Элементы.Очистить(); + КонецЕсли; + + ОтчетыКлиентСервер.ЗаполнитьСвойстваРекурсивно(УзелКД, ЭлементКД, Результат.ЭлементКД); + + СтрокаТаблицы.Использование = ЭлементКД.Использование; + СтрокаТаблицы.Заголовок = Результат.Наименование; + СтрокаТаблицы.ЗаголовокПереопределен = (СтрокаТаблицы.Заголовок <> СтрокаТаблицы.Представление); + + ТаблицыПолейУстановитьУровеньДоступа(Контекст.ТаблицаИмя, СтрокаТаблицы, ЭлементКД, Неопределено); + + Если СтрокаТаблицы.ЗаголовокПереопределен Тогда + ЭлементКД.ПредставлениеПользовательскойНастройки = СтрокаТаблицы.Заголовок; + Иначе + ЭлементКД.ПредставлениеПользовательскойНастройки = ""; + КонецЕсли; + + УстановитьМодифицированность(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Клиент - Таблицы полей (функциональная часть). + +&НаКлиенте +Процедура ТаблицыПолейРазгруппировать(ТаблицаИмя) + ТаблицаЭлемент = Элементы[ТаблицаИмя]; + ТаблицаРеквизит = ЭтотОбъект[ТаблицаИмя]; + ВыделенныеСтроки = ТаблицаЭлемент.ВыделенныеСтроки; + ВыделенныеСтроки = ОбщегоНазначенияКлиентСервер.СвернутьМассив(ВыделенныеСтроки); // Для платформы. + Если ВыделенныеСтроки.Количество() <> 1 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выберите одну группу.'")); + Возврат; + КонецЕсли; + + ГруппаДерева = ТаблицаРеквизит.НайтиПоИдентификатору(ВыделенныеСтроки[0]); + Если ГруппаДерева = Неопределено Или Не ГруппаДерева.ЭтоГруппа Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Выберите группу.'")); + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, Неопределено); + ГруппаКД = УзелКД.ПолучитьОбъектПоИдентификатору(ГруппаДерева.ИдентификаторКД); + + Родитель = ГруппаДерева.ПолучитьРодителя(); + Если Родитель = Неопределено Тогда + Родитель = ТаблицаРеквизит; + КонецЕсли; + НоваяКоллекцияСтрокДерева = Родитель.ПолучитьЭлементы(); + + РодительКД = ГруппаКД.Родитель; + Если РодительКД = Неопределено Тогда + РодительКД = УзелКД; + КонецЕсли; + НоваяКоллекцияЭлементовКД = РодительКД.Элементы; + + Индекс = НоваяКоллекцияСтрокДерева.Индекс(ГруппаДерева); + ИндексКД = НоваяКоллекцияЭлементовКД.Индекс(ГруппаКД); + + ТекущаяСтрока = Неопределено; + + СтрокиРодителя = ГруппаДерева.ПолучитьЭлементы(); + СтрокиРодителяКД = ГруппаКД.Элементы; + Для Каждого СтараяСтрокаДерева Из СтрокиРодителя Цикл + СтарыйЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтараяСтрокаДерева.ИдентификаторКД); + ПеренесенныеСтроки = ТаблицыПолейСкопироватьРекурсивно(УзелКД, СтараяСтрокаДерева, НоваяКоллекцияСтрокДерева, СтарыйЭлементКД, НоваяКоллекцияЭлементовКД, Индекс, ИндексКД); + Если ТекущаяСтрока = Неопределено Тогда + ТекущаяСтрока = ПеренесенныеСтроки.СтрокаДерева; + КонецЕсли; + КонецЦикла; + + НоваяКоллекцияСтрокДерева.Удалить(ГруппаДерева); + НоваяКоллекцияЭлементовКД.Удалить(ГруппаКД); + + Если ТекущаяСтрока <> Неопределено Тогда + ТаблицаЭлемент.ТекущаяСтрока = ТекущаяСтрока.ПолучитьИдентификатор(); + КонецЕсли; + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицыПолейПередУдалением(ТаблицаИмя, Отказ) + Отказ = Истина; + СтрокаТаблицы = Элементы[ТаблицаИмя].ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + ТаблицыПолейУдалить(ТаблицаИмя, СтрокаТаблицы, Ложь); + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицыПолейИзменить(ТаблицаИмя, СтрокаИдентификатор, СтрокаТаблицы) + Контекст = Новый Структура("ТаблицаИмя, СтрокаИдентификатор", ТаблицаИмя, СтрокаИдентификатор); + Обработчик = Новый ОписаниеОповещения("ТаблицыПолейИзменитьЗавершение", ЭтотОбъект, Контекст); + + Таблица = ЭтотОбъект[ТаблицаИмя]; + СтрокаТаблицы = Таблица.НайтиПоИдентификатору(СтрокаИдентификатор); + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + + ТаблицыПолейПоказатьВыборПоля(ТаблицаИмя, Обработчик, ?(ТаблицаИмя = "Отборы", ЭлементКД.ЛевоеЗначение, ЭлементКД.Поле)); +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицыПолейИзменитьЗавершение(ДоступноеПолеКД, Контекст) Экспорт + Если ДоступноеПолеКД = Неопределено Тогда + Возврат; + КонецЕсли; + + СтрокаТаблицы = ЭтотОбъект[Контекст.ТаблицаИмя].НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Контекст.ТаблицаИмя, СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + СтрокаТаблицы.Представление = ДоступноеПолеКД.Заголовок; + Если Контекст.ТаблицаИмя = "Отборы" Тогда + ЭлементКД.ЛевоеЗначение = ДоступноеПолеКД.Поле; + Если ДоступноеПолеКД.ДоступныеВидыСравнения <> Неопределено + И ДоступноеПолеКД.ДоступныеВидыСравнения.НайтиПоЗначению(ЭлементКД.ВидСравнения) = Неопределено + И ДоступноеПолеКД.ДоступныеВидыСравнения.Количество() > 0 Тогда + ЭлементКД.ВидСравнения = ДоступноеПолеКД.ДоступныеВидыСравнения[0].Значение; + КонецЕсли; + ОтчетыКлиентСервер.ПривестиЗначениеКТипу(ЭлементКД.ПравоеЗначение, ДоступноеПолеКД.ТипЗначения); + Обновить(); // Серьезные изменения, для учета всех связей и особенностей вывода следует перерисовать полностью. + Иначе + ЭлементКД.Поле = ДоступноеПолеКД.Поле; + КонецЕсли; + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицыПолейИзменитьИспользование(ТаблицаИмя) + Таблица = Элементы[ТаблицаИмя]; + СтрокаТаблицы = Таблица.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + ВыводитьФлажок = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтрокаТаблицы, "ВыводитьФлажок"); + Если ВыводитьФлажок = Ложь Тогда + СтрокаТаблицы.Использование = Истина; + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + ЭлементКД.Использование = СтрокаТаблицы.Использование; + + ПослеИзмененияФлажкаИспользование(ТаблицаИмя, СтрокаТаблицы, ЭлементКД); + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ПослеИзмененияФлажкаИспользование(ТаблицаИмя, СтрокаТаблицы, ЭлементКД) + Если ТаблицаИмя = "СоставГруппировки" Тогда + СвязаннаяТаблицаИмя = "ВыбранныеПоля"; + ИначеЕсли ТаблицаИмя = "ВыбранныеПоля" Тогда + СвязаннаяТаблицаИмя = "СоставГруппировки"; + Иначе + СвязаннаяТаблицаИмя = Неопределено; + КонецЕсли; + + Если СвязаннаяТаблицаИмя <> Неопределено И ЗначениеЗаполнено(СтрокаТаблицы.ПолеКД) Тогда + Условие = Новый Структура("ПолеКД", СтрокаТаблицы.ПолеКД); + УстановитьФлажокИспользованиеПоУсловию(СвязаннаяТаблицаИмя, Условие, СтрокаТаблицы.Использование); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьФлажокИспользованиеПоУсловию(ТаблицаИмя, Условие, Использование) + Таблица = ЭтотОбъект[ТаблицаИмя]; + Найденные = ОтчетыКлиентСервер.НайтиСтрокиТаблицы(Таблица, Условие); + УзелКД = Неопределено; + Для Каждого СтрокаТаблицы Из Найденные Цикл + Если СтрокаТаблицы.Использование = Использование Тогда + Продолжить; + КонецЕсли; + Если УзелКД = Неопределено Тогда + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); + КонецЕсли; + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Продолжить; + КонецЕсли; + СтрокаТаблицы.Использование = Использование; + ЭлементКД.Использование = Использование; + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьФлажкиИспользованиеВоВсемДереве(ТаблицаИмя, Использование, МассивСтрок = Неопределено, УзелКД = Неопределено) + ОпределятьУзелНаЛету = Ложь; + Если МассивСтрок = Неопределено Тогда + МассивСтрок = ЭтотОбъект[ТаблицаИмя].ПолучитьЭлементы(); + ОпределятьУзелНаЛету = (ТаблицаИмя = "Отборы"); + КонецЕсли; + + Для Каждого СтрокаДерева Из МассивСтрок Цикл + Если УзелКД = Неопределено Или ОпределятьУзелНаЛету Тогда + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаДерева); + КонецЕсли; + + ВыводитьФлажок = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтрокаДерева, "ВыводитьФлажок"); + ЭтоРаздел = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтрокаДерева, "ЭтоРаздел"); + Если ВыводитьФлажок <> Ложь И ЭтоРаздел <> Истина Тогда + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаДерева.ИдентификаторКД); + Если ЭлементКД <> Неопределено Тогда + СтрокаДерева.Использование = Использование; + ЭлементКД.Использование = Использование; + ПослеИзмененияФлажкаИспользование(ТаблицаИмя, СтрокаДерева, ЭлементКД); + КонецЕсли; + КонецЕсли; + + УстановитьФлажкиИспользованиеВоВсемДереве(ТаблицаИмя, Использование, СтрокаДерева.ПолучитьЭлементы(), УзелКД); + КонецЦикла; + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицыПолейИзменитьЗначение(ТаблицаИмя) + СтрокаТаблицы = Элементы[ТаблицаИмя].ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + Если СтрокаТаблицы.ЭтоПараметр Тогда + ЭлементКД.Значение = СтрокаТаблицы.Значение; + Иначе + ЭлементКД.ПравоеЗначение = СтрокаТаблицы.Значение; + КонецЕсли; + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицыПолейИзменитьТипГруппировки(ТаблицаИмя) + СтрокаТаблицы = Элементы[ТаблицаИмя].ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + Если СтрокаТаблицы.ПоказыватьТипДополнения Тогда + ЭлементКД.ТипДополнения = СтрокаТаблицы.ТипДополнения; + Иначе + ЭлементКД.ТипГруппировки = СтрокаТаблицы.ТипГруппировки; + КонецЕсли; + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицыПолейИзменитьГруппу(ТаблицаИмя, СтрокаИдентификатор, СтрокаТаблицы) + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + + Контекст = Новый Структура("ТаблицаИмя, СтрокаИдентификатор", ТаблицаИмя, СтрокаИдентификатор); + Обработчик = Новый ОписаниеОповещения("ТаблицыПолейИзменитьГруппуЗавершение", ЭтотОбъект, Контекст); + + Если ТаблицаИмя = "Отборы" Тогда + Список = Новый СписокЗначений; + Список.Добавить(ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ); + Список.Добавить(ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли); + Список.Добавить(ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаНе); + ПоказатьВыборИзМеню(Обработчик, Список); + Иначе + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ЗаголовокГруппы", ЭлементКД.Заголовок); + ПараметрыФормы.Вставить("Расположение", ЭлементКД.Расположение); + + Блокировать = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + + ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.ГруппаВыбранныхПолей", ПараметрыФормы, ЭтотОбъект, Истина, , , Обработчик, Блокировать); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицыПолейИзменитьГруппуЗавершение(Результат, Контекст) Экспорт + Если Результат = Неопределено Или Результат = КодВозвратаДиалога.Отмена Тогда + Возврат; + КонецЕсли; + + СтрокаТаблицы = ЭтотОбъект[Контекст.ТаблицаИмя].НайтиПоИдентификатору(Контекст.СтрокаИдентификатор); + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, Контекст.ТаблицаИмя, СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Контекст.ТаблицаИмя = "Отборы" Тогда + ЭлементКД.ТипГруппы = Результат.Значение; + СтрокаТаблицы.Представление = Строка(Результат.Значение); + Если Не СтрокаТаблицы.ЗаголовокПереопределен Тогда + СтрокаТаблицы.Заголовок = СтрокаТаблицы.Представление; + КонецЕсли; + Иначе + ЭлементКД.Заголовок = Результат.ЗаголовокГруппы; + ЭлементКД.Расположение = Результат.Расположение; + СтрокаТаблицы.Представление = ЭлементКД.Заголовок; + Если ЭлементКД.Расположение <> РасположениеПоляКомпоновкиДанных.Авто Тогда + СтрокаТаблицы.Представление = СтрокаТаблицы.Представление + " (" + Строка(ЭлементКД.Расположение) + ")"; + КонецЕсли; + КонецЕсли; + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Функция ТаблицыПолейВставить(ТаблицаИмя, ТипЭлемента, ТекущаяСтрока, ВнутрьСтроки) + Если ТекущаяСтрока = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + ТаблицаЭлемент = Элементы[ТаблицаИмя]; + ТаблицаРеквизит = ЭтотОбъект[ТаблицаИмя]; + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя); + + Если ТекущаяСтрока = 0 Тогда + ТекущаяСтрока = ТаблицаЭлемент.ТекущиеДанные; + КонецЕсли; + + Если ТекущаяСтрока = Неопределено Тогда + + КудаВставить = ТаблицаРеквизит.ПолучитьЭлементы(); + Индекс = Неопределено; + ЭлементКД = Неопределено; + КудаВставитьКД = ПолучитьЭлементыКД(УзелКД, ТекущаяСтрока); + ИндексКД = Неопределено; + + Иначе + + ЭлементКД = НайтиОбъектКД(УзелКД, ТекущаяСтрока); + Если ВнутрьСтроки = Неопределено Тогда + ВнутрьСтроки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ТекущаяСтрока, "ЭтоГруппа", Ложь); + КонецЕсли; + + Если ЭлементКД = Неопределено Тогда + ВнутрьСтроки = Истина; + КонецЕсли; + + Если ВнутрьСтроки Тогда + КудаВставить = ТекущаяСтрока.ПолучитьЭлементы(); + Индекс = Неопределено; + КудаВставитьКД = ПолучитьЭлементыКД(УзелКД, ЭлементКД); + ИндексКД = Неопределено + Иначе // Вставка на один уровень со строкой. + СтрокаРодитель = ТекущаяСтрока.ПолучитьРодителя(); + Если СтрокаРодитель = Неопределено Тогда + КудаВставить = ТаблицаРеквизит.ПолучитьЭлементы(); + Иначе + КудаВставить = СтрокаРодитель.ПолучитьЭлементы(); + КонецЕсли; + Индекс = КудаВставить.Индекс(ТекущаяСтрока) + 1; + РодительКД = НайтиОбъектКД(УзелКД, СтрокаРодитель); + КудаВставитьКД = ПолучитьЭлементыКД(УзелКД, РодительКД); + ИндексКД = КудаВставитьКД.Индекс(ЭлементКД) + 1; + КонецЕсли; + + КонецЕсли; + + Если Индекс = Неопределено Тогда + НоваяСтрока = КудаВставить.Добавить(); + Иначе + НоваяСтрока = КудаВставить.Вставить(Индекс); + КонецЕсли; + + Если ОтчетыКлиентСервер.ПриДобавленииВКоллекциюНужноУказыватьТипЭлемента(ТипЗнч(КудаВставитьКД)) Тогда + Если ИндексКД = Неопределено Тогда + НовыйЭлементКД = КудаВставитьКД.Добавить(ТипЭлемента); + Иначе + НовыйЭлементКД = КудаВставитьКД.Вставить(ИндексКД, ТипЭлемента); + КонецЕсли; + Иначе + Если ИндексКД = Неопределено Тогда + НовыйЭлементКД = КудаВставитьКД.Добавить(); + Иначе + НовыйЭлементКД = КудаВставитьКД.Вставить(ИндексКД); + КонецЕсли; + КонецЕсли; + ТаблицаЭлемент.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор(); + НоваяСтрока.ИдентификаторКД = УзелКД.ПолучитьИдентификаторПоОбъекту(НовыйЭлементКД); + + Результат = Новый Структура("СтрокаТаблицы, УзелКД, ЭлементКД"); + Результат.СтрокаТаблицы = НоваяСтрока; + Результат.УзелКД = УзелКД; + Результат.ЭлементКД = НовыйЭлементКД; + Возврат Результат; +КонецФункции + +&НаКлиенте +Функция ТаблицыПолейПереместить(Знач ТаблицаИмя, Знач СтрокаТаблицы, Знач НовыйРодитель, Знач ПередЧемВставить, Знач ОставитьКопию) + ТаблицаЭлемент = Элементы[ТаблицаИмя]; + ТаблицаРеквизит = ЭтотОбъект[ТаблицаИмя]; + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя); + ЭлементКД = НайтиОбъектКД(УзелКД, СтрокаТаблицы); + + Если НовыйРодитель = Неопределено Тогда + НовыйРодитель = ПолучитьРодителя(ТаблицаИмя, ПередЧемВставить); + КонецЕсли; + + Если ПередЧемВставить = Неопределено Тогда + ЭтоРаздел = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НовыйРодитель, "ЭтоРаздел"); + ЭтоГруппа = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НовыйРодитель, "ЭтоГруппа"); + Если ТаблицаИмя = "СтруктураВарианта" + Или НовыйРодитель = Неопределено + Или ЭтоРаздел = Истина + Или ЭтоГруппа = Истина Тогда + // Внутрь родителя. + Иначе + // На один уровень с родителем. + ПередЧемВставить = НовыйРодитель; + НовыйРодитель = ПолучитьРодителя(ТаблицаИмя, НовыйРодитель); + КонецЕсли; + КонецЕсли; + + НовыйРодительКД = НайтиОбъектКД(УзелКД, НовыйРодитель); + КудаВставить = ПолучитьЭлементы(ТаблицаРеквизит, НовыйРодитель); + КудаВставитьКД = ПолучитьЭлементыКД(УзелКД, НовыйРодительКД); + + СтарыйРодитель = ПолучитьРодителя(ТаблицаИмя, СтрокаТаблицы); + ОткудаПереместить = ПолучитьЭлементы(ТаблицаРеквизит, СтарыйРодитель); + + СтарыйРодительКД = НайтиОбъектКД(УзелКД, СтарыйРодитель); + ОткудаПереместитьКД = ПолучитьЭлементыКД(УзелКД, СтарыйРодительКД); + + Если ПередЧемВставить = Неопределено Тогда + Индекс = Неопределено; + ИндексКД = Неопределено; + Иначе + ПередЧемВставитьКД = НайтиОбъектКД(УзелКД, ПередЧемВставить); + Индекс = КудаВставить.Индекс(ПередЧемВставить); + ИндексКД = КудаВставитьКД.Индекс(ПередЧемВставитьКД); + Если НовыйРодитель = СтарыйРодитель + И ОткудаПереместить.Индекс(СтрокаТаблицы) > Индекс Тогда + Индекс = Индекс - 1; + ИндексКД = ИндексКД - 1; + КонецЕсли; + КонецЕсли; + + Результат = Новый Структура("СтрокаДерева, СтрокаКД"); + + ПоискЭлементовКД = Новый Соответствие; + Результат.СтрокаКД = ОтчетыКлиентСервер.СкопироватьРекурсивно(УзелКД, ЭлементКД, КудаВставитьКД, ИндексКД, ПоискЭлементовКД); + + ПоискСтрокТаблицы = Новый Соответствие; + Результат.СтрокаДерева = ОтчетыКлиентСервер.СкопироватьРекурсивно(Неопределено, СтрокаТаблицы, КудаВставить, Индекс, ПоискСтрокТаблицы); + + Для Каждого КлючИЗначение Из ПоискСтрокТаблицы Цикл + СтараяСтрока = КлючИЗначение.Ключ; + НоваяСтрока = КлючИЗначение.Значение; + НоваяСтрока.ИдентификаторКД = ПоискЭлементовКД.Получить(СтараяСтрока.ИдентификаторКД); + КонецЦикла; + + Если Не ОставитьКопию Тогда + ОткудаПереместить.Удалить(СтрокаТаблицы); + ОткудаПереместитьКД.Удалить(ЭлементКД); + КонецЕсли; + + Возврат Результат; +КонецФункции + +&НаКлиенте +Процедура ТаблицыПолейУдалить(Знач ТаблицаИмя, Знач СтрокаТаблицыИлиМассивСтрок, Знач ИспользованиеАвто) + Таблица = ЭтотОбъект[ТаблицаИмя]; + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя); + Если ТипЗнч(СтрокаТаблицыИлиМассивСтрок) = Тип("ДанныеФормыЭлементДерева") Тогда + ТаблицыПолейУдалитьМеханика(ТаблицаИмя, Таблица, УзелКД, СтрокаТаблицыИлиМассивСтрок, ИспользованиеАвто); + Иначе + Количество = СтрокаТаблицыИлиМассивСтрок.Количество(); + Для Номер = 1 По Количество Цикл + ОбратныйИндекс = Количество - Номер; + СтрокаТаблицы = СтрокаТаблицыИлиМассивСтрок[ОбратныйИндекс]; + ТаблицыПолейУдалитьМеханика(ТаблицаИмя, Таблица, УзелКД, СтрокаТаблицы, ИспользованиеАвто); + КонецЦикла; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицыПолейУдалитьМеханика(ТаблицаИмя, Таблица, УзелКД, СтрокаТаблицы, ИспользованиеАвто) + ЭлементКД = НайтиОбъектКД(УзелКД, СтрокаТаблицы); + + СвязаннаяТаблицаИмя = Неопределено; + Если ТаблицаИмя = "ВыбранныеПоля" Тогда + Если СтрокаТаблицы.ЭтоРаздел Тогда + Возврат; + ИначеЕсли СтрокаТаблицы.ТипНастройки = "АвтоВыбранноеПоле" Тогда + Если ИспользованиеАвто <> Неопределено И ЭлементКД.Использование <> ИспользованиеАвто Тогда + СтрокаТаблицы.Использование = ИспользованиеАвто; + ЭлементКД.Использование = ИспользованиеАвто; + КонецЕсли; + Возврат; + КонецЕсли; + СвязаннаяТаблицаИмя = "СоставГруппировки"; + ИначеЕсли ТаблицаИмя = "Сортировка" Тогда + Если СтрокаТаблицы.ЭтоРаздел Тогда + Возврат; + ИначеЕсли СтрокаТаблицы.ТипНастройки = "АвтоЭлементПорядка" Тогда + Если ИспользованиеАвто <> Неопределено И ЭлементКД.Использование <> ИспользованиеАвто Тогда + СтрокаТаблицы.Использование = ИспользованиеАвто; + ЭлементКД.Использование = ИспользованиеАвто; + КонецЕсли; + Возврат; + КонецЕсли; + ИначеЕсли ТаблицаИмя = "СоставГруппировки" Тогда + Если СтрокаТаблицы.ТипНастройки = "АвтоПолеГруппировки" Тогда + Если ИспользованиеАвто <> Неопределено И ЭлементКД.Использование <> ИспользованиеАвто Тогда + СтрокаТаблицы.Использование = ИспользованиеАвто; + ЭлементКД.Использование = ИспользованиеАвто; + КонецЕсли; + Возврат; + КонецЕсли; + СвязаннаяТаблицаИмя = "ВыбранныеПоля"; + КонецЕсли; + Если СвязаннаяТаблицаИмя <> Неопределено И ЗначениеЗаполнено(СтрокаТаблицы.ПолеКД) Тогда + Условие = Новый Структура("ПолеКД", СтрокаТаблицы.ПолеКД); + УстановитьФлажокИспользованиеПоУсловию(СвязаннаяТаблицаИмя, Условие, Ложь); + КонецЕсли; + + Родитель = ПолучитьРодителя(ТаблицаИмя, СтрокаТаблицы); + СтрокиРодителя = ПолучитьЭлементы(Таблица, Родитель); + + РодительКД = НайтиОбъектКД(УзелКД, Родитель); + СтрокиРодителяКД = ПолучитьЭлементыКД(УзелКД, РодительКД); + + СтрокиРодителя.Удалить(СтрокаТаблицы); + СтрокиРодителяКД.Удалить(ЭлементКД); + +КонецПроцедуры + +&НаКлиенте +Функция НайтиОбъектКД(Знач УзелКД, Знач СтрокаТаблицы) + Если СтрокаТаблицы = Неопределено Или ТипЗнч(СтрокаТаблицы.ИдентификаторКД) <> Тип("ИдентификаторКомпоновкиДанных") Тогда + Возврат Неопределено; + Иначе + Возврат УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + КонецЕсли; +КонецФункции + +&НаКлиенте +Функция ПолучитьЭлементыКД(Знач УзелКД, Знач ОбъектКД) + Если ОбъектКД = Неопределено Тогда + ОбъектКД = УзелКД; + КонецЕсли; + ТипОбъекта = ТипЗнч(ОбъектКД); + Если ТипОбъекта = Тип("НастройкиКомпоновкиДанных") + Или ТипОбъекта = Тип("ГруппировкаКомпоновкиДанных") + Или ТипОбъекта = Тип("ГруппировкаТаблицыКомпоновкиДанных") + Или ТипОбъекта = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда + Возврат ОбъектКД.Структура; + ИначеЕсли ТипОбъекта = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") + Или ТипОбъекта = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") Тогда + Возврат ОбъектКД; + Иначе + Возврат ОбъектКД.Элементы; + КонецЕсли; +КонецФункции + +&НаКлиенте +Функция ПолучитьЭлементы(Знач ДеревоФормы, Знач СтрокаДерева) + Если СтрокаДерева = Неопределено Тогда + СтрокаДерева = ДеревоФормы; + КонецЕсли; + Возврат СтрокаДерева.ПолучитьЭлементы(); +КонецФункции + +&НаКлиенте +Функция ПолучитьРодителя(Знач ТаблицаИмя, Знач СтрокаДерева) + Если СтрокаДерева = Неопределено Тогда + СтрокаРодителя = Неопределено; + Иначе + СтрокаРодителя = СтрокаДерева.ПолучитьРодителя(); + КонецЕсли; + + Если СтрокаРодителя = Неопределено Тогда + СтрокаРодителя = КорневаяСтрокаПоУмолчанию(ТаблицаИмя); + КонецЕсли; + + Возврат СтрокаРодителя; +КонецФункции + +&НаКлиенте +Функция КорневаяСтрокаПоУмолчанию(Знач ТаблицаИмя) + + Если ТаблицаИмя = "ВыбранныеПоля" Тогда + Возврат ВыбранныеПоля.ПолучитьЭлементы()[0]; + + ИначеЕсли ТаблицаИмя = "Сортировка" Тогда + Возврат Сортировка.ПолучитьЭлементы()[0]; + + ИначеЕсли ТаблицаИмя = "СтруктураВарианта" Тогда + Возврат СтруктураВарианта.ПолучитьЭлементы()[0]; + + ИначеЕсли ТаблицаИмя = "Отборы" Тогда + Если РежимИзмененияУзлаВарианта Тогда + Возврат Отборы.ПолучитьЭлементы()[0]; + Иначе + Возврат Отборы.ПолучитьЭлементы()[1]; + КонецЕсли; + + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция НайтиПоИдентификатору(ТаблицаРеквизит, ИдентификаторСтроки) + Если ИдентификаторСтроки = Неопределено Тогда + СтрокаТаблицы = Неопределено; + Иначе + СтрокаТаблицы = ТаблицаРеквизит.НайтиПоИдентификатору(ИдентификаторСтроки); + КонецЕсли; + Возврат СтрокаТаблицы; +КонецФункции + +&НаКлиенте +Процедура ТаблицыПолейИзменитьНаправлениеСортировки(ТаблицаИмя, СтрокаТаблицы, Направление) + Если СтрокаТаблицы = Неопределено Тогда + СтрокаТаблицы = Элементы[ТаблицаИмя].ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + // Заполнение необязательных параметров. + Если Направление = Неопределено Тогда + Если ЭлементКД.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр Тогда + Направление = НаправлениеСортировкиКомпоновкиДанных.Убыв; + Иначе + Направление = НаправлениеСортировкиКомпоновкиДанных.Возр; + КонецЕсли; + КонецЕсли; + + // Изменение направления сортировки. + ЭлементКД.ТипУпорядочивания = Направление; + СтрокаТаблицы.Направление = Направление; + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицыПолейПоказатьВыборПоля(ТаблицаИмя, Обработчик, ПолеКД = Неопределено, ИдентификаторУзлаКД = Неопределено) + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); + ПараметрыФормы.Вставить("КомпоновщикНастроек", Отчет.КомпоновщикНастроек); + ПараметрыФормы.Вставить("Режим", ТаблицаИмя); + ПараметрыФормы.Вставить("ПолеКД", ПолеКД); + ПараметрыФормы.Вставить("ИдентификаторТекущегоУзлаКД", ?(ИдентификаторУзлаКД = Неопределено, ИдентификаторТекущегоУзлаКД, ИдентификаторУзлаКД)); + + Блокировать = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + + ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.ВыборПоляОтчета", ПараметрыФормы, ЭтотОбъект, Истина, , , Обработчик, Блокировать); +КонецПроцедуры + +&НаКлиенте +Функция ТаблицыПолейСкопироватьРекурсивно(УзелКД, ЧтоКопировать, КудаВставить, ЧтоКопироватьКД, КудаВставитьКД, Индекс = Неопределено, ИндексКД = Неопределено) + Результат = Новый Структура("СтрокаДерева, СтрокаКД"); + + ПоискЭлементовКД = Новый Соответствие; + Результат.СтрокаКД = ОтчетыКлиентСервер.СкопироватьРекурсивно(УзелКД, ЧтоКопироватьКД, КудаВставитьКД, ИндексКД, ПоискЭлементовКД); + + ПоискСтрокТаблицы = Новый Соответствие; + Результат.СтрокаДерева = ОтчетыКлиентСервер.СкопироватьРекурсивно(Неопределено, ЧтоКопировать, КудаВставить, Индекс, ПоискСтрокТаблицы); + + Для Каждого КлючИЗначение Из ПоискСтрокТаблицы Цикл + СтараяСтрока = КлючИЗначение.Ключ; + НоваяСтрока = КлючИЗначение.Значение; + НоваяСтрока.ИдентификаторКД = ПоискЭлементовКД.Получить(СтараяСтрока.ИдентификаторКД); + КонецЦикла; + + Возврат Результат; +КонецФункции + +&НаКлиенте +Процедура СтруктураВариантаОбновитьЗаголовокЭлементаВКомпоновщике(СтрокаТаблицы) + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "СтруктураВарианта", СтрокаТаблицы); + ЭлементКД = УзелКД.ПолучитьОбъектПоИдентификатору(СтрокаТаблицы.ИдентификаторКД); + Если ЭлементКД = Неопределено Тогда + Возврат; + КонецЕсли; + + ЗаголовокИспользование = ЗначениеЗаполнено(СтрокаТаблицы.Заголовок); + + ЗначениеПараметраКД = ЭлементКД.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВыводитьЗаголовок")); + Если ЗначениеПараметраКД <> Неопределено Тогда + ЗначениеПараметраКД.Использование = Истина; + Если ЗаголовокИспользование Тогда + ЗначениеПараметраКД.Значение = ТипВыводаТекстаКомпоновкиДанных.Выводить; + Иначе + ЗначениеПараметраКД.Значение = ТипВыводаТекстаКомпоновкиДанных.НеВыводить; + КонецЕсли; + КонецЕсли; + + ЗначениеПараметраКД = ЭлементКД.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Заголовок")); + Если ЗначениеПараметраКД <> Неопределено Тогда + ЗначениеПараметраКД.Использование = Истина; + ЗначениеПараметраКД.Значение = СтрокаТаблицы.Заголовок; + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Клиент или сервер + +&НаКлиентеНаСервереБезКонтекста +Функция ЭтоГруппа(ТипЭлемента) + Если ТипЭлемента = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") + Или ТипЭлемента = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") + Или ТипЭлемента = Тип("ГруппировкаКомпоновкиДанных") + Или ТипЭлемента = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") + Или ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") + Или ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") Тогда + Возврат Истина; + КонецЕсли; + Возврат Ложь; +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ОписаниеТиповУдалитьПримитивные(ИсходноеОписаниеТипов) + ВычитаемыеТипы = Новый Массив; + Если ИсходноеОписаниеТипов.СодержитТип(Тип("Строка")) Тогда + ВычитаемыеТипы.Добавить(Тип("Строка")); + КонецЕсли; + Если ИсходноеОписаниеТипов.СодержитТип(Тип("Дата")) Тогда + ВычитаемыеТипы.Добавить(Тип("Дата")); + КонецЕсли; + Если ИсходноеОписаниеТипов.СодержитТип(Тип("Число")) Тогда + ВычитаемыеТипы.Добавить(Тип("Число")); + КонецЕсли; + Если ВычитаемыеТипы.Количество() = 0 Тогда + Возврат ИсходноеОписаниеТипов; + КонецЕсли; + Возврат Новый ОписаниеТипов(ИсходноеОписаниеТипов, , ВычитаемыеТипы); +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ТаблицыПолейНайтиУзел(ЭтотОбъект, ТаблицаИмя, СтрокаТаблицы = Неопределено, ИдентификаторУзлаКД = Неопределено) + Если ЭтотОбъект.РасширенныйРежим = 1 Тогда + Если ИдентификаторУзлаКД = Неопределено Тогда + ИдентификаторУзлаКД = ЭтотОбъект.ИдентификаторТекущегоУзлаКД; + КонецЕсли; + Если ИдентификаторУзлаКД = Неопределено Тогда + КорневойУзел = ЭтотОбъект.Отчет.КомпоновщикНастроек.Настройки; + Иначе + КорневойУзел = ЭтотОбъект.Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторУзлаКД); + Если ТипЗнч(КорневойУзел) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + КорневойУзел = КорневойУзел.Настройки; + КонецЕсли; + КонецЕсли; + Если ТаблицаИмя = "Сортировка" Тогда + Возврат КорневойУзел.Порядок; + ИначеЕсли ТаблицаИмя = "ВыбранныеПоля" Тогда + Возврат КорневойУзел.Выбор; + ИначеЕсли ТаблицаИмя = "Отборы" Тогда + Если СтрокаТаблицы = Неопределено Или Не СтрокаТаблицы.ЭтоПараметр Тогда + Возврат КорневойУзел.Отбор; + Иначе + Возврат КорневойУзел.ПараметрыДанных; + КонецЕсли; + ИначеЕсли ТаблицаИмя = "СоставГруппировки" Тогда + Возврат КорневойУзел.ПоляГруппировки; + ИначеЕсли ТаблицаИмя = "Оформление" Тогда + Возврат КорневойУзел.УсловноеОформление; + ИначеЕсли ТаблицаИмя = "СтруктураВарианта" Тогда + Возврат КорневойУзел; + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Изменение узлов таблицы ""%1"" не поддерживается.'"), ТаблицаИмя); + КонецЕсли; + Иначе + Если ТаблицаИмя = "СтруктураВарианта" Тогда + Возврат ЭтотОбъект.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; + КонецЕсли; + ИдентификаторКД = ЭтотОбъект.БыстрыйПоискПользовательскихНастроек.Получить(ТаблицаИмя); + Если ИдентификаторКД = Неопределено Тогда + Возврат Неопределено; + Иначе + Возврат ЭтотОбъект.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ПолучитьОбъектПоИдентификатору(ИдентификаторКД); + КонецЕсли; + КонецЕсли; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция МассивСортировать(ИсходныйМассив, НаправлениеСортировки = Неопределено) + Список = Новый СписокЗначений; + Список.ЗагрузитьЗначения(ИсходныйМассив); + Список.СортироватьПоЗначению(НаправлениеСортировки); + Возврат Список.ВыгрузитьЗначения(); +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция НайтиНастройкуВарианта(ЭтотОбъект, ИдентификаторЭлемента) + ПоискНастройкиВарианта = ЭтотОбъект.БыстрыйПоискНастроекВарианта.Получить(ИдентификаторЭлемента); + Если ПоискНастройкиВарианта = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + КорневойУзелКД = ЭтотОбъект.Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ПоискНастройкиВарианта.ИдентификаторУзлаКД); + Результат = Новый Структура("УзелКД, ЭлементКД"); + Результат.УзелКД = КорневойУзелКД[ПоискНастройкиВарианта.ИмяКоллекции]; + Результат.ЭлементКД = Результат.УзелКД.ПолучитьОбъектПоИдентификатору(ПоискНастройкиВарианта.ИдентификаторЭлементаКД); + Возврат Результат; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Вызов сервера + +&НаСервере +Функция БыстрыеНастройкиЗаполнить(Знач ПараметрыКлиента) + + // Вставка значений по умолчанию для обязательных ключей параметров заполнения. + ПараметрыЗаполнения = БыстрыеНастройкиДозаполнитьПараметры(ПараметрыКлиента); + + // Вызов переопределяемого модуля. + Если НастройкиОтчета.События.ПередЗаполнениемПанелиБыстрыхНастроек Тогда + ОтчетОбъект = ОтчетыСервер.ОтчетОбъект(ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя); + ОтчетОбъект.ПередЗаполнениемПанелиБыстрыхНастроек(ЭтотОбъект, ПараметрыЗаполнения); + КонецЕсли; + + // Сохранить состояние до начала изменения. + БыстрыеНастройкиЗапомнитьСостояние(ПараметрыЗаполнения); + + // Запись новых настроек варианта и пользовательских настроек в компоновщик. + БыстрыеНастройкиЗагрузитьНастройкиВКомпоновщик(ПараметрыЗаполнения); + Если ПараметрыЗаполнения.Прервать Тогда + Возврат ПараметрыЗаполнения.Результат; + КонецЕсли; + + // Получение информации из КД. + УсловияВывода = Новый Структура; + УсловияВывода.Вставить("ТолькоПользовательские", РасширенныйРежим = 0); + УсловияВывода.Вставить("ТолькоБыстрые", Ложь); + УсловияВывода.Вставить("ИдентификаторТекущегоУзлаКД", ИдентификаторТекущегоУзлаКД); + Информация = ОтчетыСервер.РасширеннаяИнформацияОНастройках( + Отчет.КомпоновщикНастроек, + НастройкиОтчета, + ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя, + УсловияВывода); + + // Удаление элементов старых настроек. + БыстрыеНастройкиУдалитьСтарыеЭлементыИКоманды(ПараметрыЗаполнения); + + // Добавление элементов актуальных настроек и загрузка значений. + БыстрыеНастройкиСоздатьЭлементыУправленияИЗагрузитьЗначения(ПараметрыЗаполнения, Информация); + + // Добавление элементов актуальных настроек и загрузка значений. + РасширенныеНастройкиЗагрузитьЗначения(ПараметрыЗаполнения, Информация); + + // Связи. + ЗарегистрироватьОтключаемыеСвязи(Информация); + + // Сохранить состояние до начала изменения. + БыстрыеНастройкиВосстановитьСостояние(ПараметрыЗаполнения); + + // Заголовок и свойства элементов. + ВидимостьДоступностьКорректность(ПараметрыЗаполнения.ИмяСобытия); + + // Вызов переопределяемого модуля. + Если НастройкиОтчета.События.ПослеЗаполненияПанелиБыстрыхНастроек Тогда + ОтчетОбъект = ОтчетыСервер.ОтчетОбъект(ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя); + ОтчетОбъект.ПослеЗаполненияПанелиБыстрыхНастроек(ЭтотОбъект, ПараметрыЗаполнения); + КонецЕсли; + + Возврат ПараметрыЗаполнения.Результат; +КонецФункции + +&НаСервере +Процедура ВидимостьДоступностьКорректность(ИмяСобытия = "") + + // Видимость элементов. + Элементы.КомандыСтруктурыВарианта_Добавление.Видимость = (РасширенныйРежим = 1); + Элементы.КомандыСтруктурыВарианта_Добавление1.Видимость = (РасширенныйРежим = 1); + Элементы.КомандыСтруктурыВарианта_Изменение.Видимость = (РасширенныйРежим = 1); + Элементы.КомандыСтруктурыВарианта_Изменение1.Видимость = (РасширенныйРежим = 1); + Элементы.КомандыСтруктурыВарианта_ДвижениеПоИерархии.Видимость = (РасширенныйРежим = 1); + Элементы.КомандыСтруктурыВарианта_ДвижениеПоИерархии1.Видимость = (РасширенныйРежим = 1); + Элементы.КомандыСтруктурыВарианта_ДвижениеВнутриРодителя.Видимость = (РасширенныйРежим = 1); + Элементы.КомандыСтруктурыВарианта_ДвижениеВнутриРодителя1.Видимость = (РасширенныйРежим = 1); + Элементы.СтруктураВарианта.ИзменятьСоставСтрок = (РасширенныйРежим = 1); + Элементы.СтруктураВарианта.ИзменятьПорядокСтрок = (РасширенныйРежим = 1); + Элементы.СтруктураВарианта.РазрешитьНачалоПеретаскивания = (РасширенныйРежим = 1); + Элементы.СтруктураВарианта.РазрешитьПеретаскивание = (РасширенныйРежим = 1); + Элементы.СтруктураВарианта.Шапка = (РасширенныйРежим = 1); + Элементы.СтруктураВариантаЗаголовок.Видимость = (РасширенныйРежим = 1); + Элементы.СтруктураВариантаСодержитОтборы.Видимость = (РасширенныйРежим = 1); + Элементы.СтруктураВариантаСодержитПоляИлиСортировки.Видимость = (РасширенныйРежим = 1); + Элементы.СтруктураВариантаСодержитУсловноеОформление.Видимость = (РасширенныйРежим = 1); + Элементы.КомандыВыбранныхПолей_ДобавлениеУдаление.Видимость = (РасширенныйРежим = 1); + Элементы.КомандыВыбранныхПолей_ДобавлениеУдаление1.Видимость = (РасширенныйРежим = 1); + Элементы.КомандыВыбранныхПолей_Группы.Видимость = (РасширенныйРежим = 1); + Элементы.КомандыВыбранныхПолей_Группы1.Видимость = (РасширенныйРежим = 1); + Элементы.КомандыСортировки_ДобавлениеУдаление.Видимость = (РасширенныйРежим = 1); + Элементы.КомандыСортировки_ДобавлениеУдаление1.Видимость = (РасширенныйРежим = 1); + + Если ИмяСобытия = "ПриСозданииНаСервере" Тогда + Если РежимИзмененияУзлаВарианта Тогда + Элементы.РасширенныйРежим.Видимость = Ложь; + Элементы.ЗакрытьИСформировать.Заголовок = НСтр("ru = 'Завершить редактирование'"); + Элементы.Закрыть.Заголовок = НСтр("ru = 'Отмена'"); + Элементы.Переместить(Элементы.СтраницаОтборы, Элементы.СтраницыНастроек, Элементы.СтраницаОформление); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Сервер + +&НаСервере +Функция ОтчетОбъект() + Возврат ОбщегоНазначения.ОбъектПоПолномуИмени(НастройкиОтчета.ПолноеИмя); +КонецФункции + +&НаСервере +Процедура ДобавитьУсловноеОформление() + // Отборы. + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); + Инструкция.Отборы.Вставить("Отборы.ЗаголовокПереопределен", Ложь); + Инструкция.Поля = "ОтборыЗаголовок"; + Инструкция.Оформление.Вставить("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); + Инструкция.Отборы.Вставить("Отборы.ВыводитьФлажок", Ложь); + Инструкция.Поля = "ОтборыИспользование"; + Инструкция.Оформление.Вставить("Видимость", Ложь); + Инструкция.Оформление.Вставить("Отображать", Ложь); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); + Инструкция.Отборы.Вставить("Отборы.ЭтоРаздел", Истина); + Инструкция.Поля = "ОтборыУсловие, ОтборыЗначение, ОтборыПредставлениеЗначения, ОтборыИндексКартинкиДоступа, ОтборыЗаголовок"; + Инструкция.Оформление.Вставить("ТолькоПросмотр", Истина); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); + Инструкция.Отборы.Вставить("Отборы.ЭтоГруппа", Истина); + Инструкция.Поля = "ОтборыУсловие, ОтборыЗначение, ОтборыПредставлениеЗначения"; + Инструкция.Оформление.Вставить("ТолькоПросмотр", Истина); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); + Инструкция.Отборы.Вставить("Отборы.ФиксированныйСписокВыбора", Ложь); + Инструкция.Поля = "ОтборыПредставлениеЗначения"; + Инструкция.Оформление.Вставить("Видимость", Ложь); + Инструкция.Оформление.Вставить("Отображать", Ложь); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); + Инструкция.Отборы.Вставить("Отборы.ФиксированныйСписокВыбора", Истина); + Инструкция.Поля = "ОтборыЗначение"; + Инструкция.Оформление.Вставить("Видимость", Ложь); + Инструкция.Оформление.Вставить("Отображать", Ложь); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + + // Выбранные поля. + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); + Инструкция.Отборы.Вставить("ВыбранныеПоля.ЭтоРаздел", Истина); + Инструкция.Поля = "ВыбранныеПоляИспользование"; + Инструкция.Оформление.Вставить("Видимость", Ложь); + Инструкция.Оформление.Вставить("Отображать", Ложь); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + + // Сортировки. + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); + Инструкция.Отборы.Вставить("Сортировка.ЭтоРаздел", Истина); + Инструкция.Поля = "СортировкаИспользование, СортировкаНаправление"; + Инструкция.Оформление.Вставить("Видимость", Ложь); + Инструкция.Оформление.Вставить("Отображать", Ложь); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); + Инструкция.Отборы.Вставить("Сортировка.ТипНастройки", "АвтоЭлементПорядка"); + Инструкция.Поля = "СортировкаНаправление"; + Инструкция.Оформление.Вставить("Видимость", Ложь); + Инструкция.Оформление.Вставить("Отображать", Ложь); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + + // Состав группировки. + Если РежимИзмененияУзлаВарианта Тогда + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); + Инструкция.Отборы.Вставить("СоставГруппировки.ПоказыватьТипДополнения", Истина); + Инструкция.Поля = "СоставГруппировкиТипГруппировки"; + Инструкция.Оформление.Вставить("Видимость", Ложь); + Инструкция.Оформление.Вставить("Отображать", Ложь); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + + Инструкция = СтандартныеПодсистемыСервер.ИнструкцияУсловногоОформления(); + Инструкция.Отборы.Вставить("СоставГруппировки.ПоказыватьТипДополнения", Ложь); + Инструкция.Поля = "СоставГруппировкиТипДополнения"; + Инструкция.Оформление.Вставить("Видимость", Ложь); + Инструкция.Оформление.Вставить("Отображать", Ложь); + СтандартныеПодсистемыСервер.ДобавитьЭлементУсловногоОформления(ЭтотОбъект, Инструкция); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция БыстрыеНастройкиДозаполнитьПараметры(ПараметрыКлиента) + ПараметрыЗаполнения = Новый Структура; + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыЗаполнения, ПараметрыКлиента, Истина); + Если Не ПараметрыЗаполнения.Свойство("ИмяСобытия") Тогда + ПараметрыЗаполнения.Вставить("ИмяСобытия", ""); + КонецЕсли; + Если Не ПараметрыЗаполнения.Свойство("ВариантМодифицирован") Тогда + ПараметрыЗаполнения.Вставить("ВариантМодифицирован", Ложь); + КонецЕсли; + Если Не ПараметрыЗаполнения.Свойство("ПользовательскиеНастройкиМодифицированы") Тогда + ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Ложь); + КонецЕсли; + Если Не ПараметрыЗаполнения.Свойство("Результат") Тогда + ПараметрыЗаполнения.Вставить("Результат", Новый Структура); + КонецЕсли; + ПараметрыЗаполнения.Вставить("Прервать", Ложь); + ПараметрыЗаполнения.Вставить("ОтчетОбъектИлиПолноеИмя", НастройкиОтчета.ПолноеИмя); + + Возврат ПараметрыЗаполнения; +КонецФункции + +&НаСервере +Процедура БыстрыеНастройкиЗапомнитьСостояние(ПараметрыЗаполнения) + Если ПараметрыЗаполнения.ИмяСобытия = "ПриСозданииНаСервере" Тогда + Возврат; // Ничего восстанавливать не требуется. + КонецЕсли; + + ВыделенныеСтроки = Новый Структура; + ПараметрыЗаполнения.Вставить("ВыделенныеСтроки", ВыделенныеСтроки); + + ИменаТаблиц = "Отборы, ВыбранныеПоля, Сортировка, " + ?(РежимИзмененияУзлаВарианта, "СтруктураВарианта", "СоставГруппировки"); + ИменаТаблиц = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаТаблиц, ",", Истина, Истина); + Для Каждого ИмяТаблицы Из ИменаТаблиц Цикл + ВыделенныеСтроки.Вставить(ИмяТаблицы, ОтчетыСервер.ЗапомнитьВыделенныеСтроки(ЭтотОбъект, ИмяТаблицы, "ИдентификаторКД")); + СтандартныеПодсистемыКлиентСервер.РазвернутьУзлыДерева(ПараметрыЗаполнения.Результат, ИмяТаблицы, "*", Истина); + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура БыстрыеНастройкиВосстановитьСостояние(ПараметрыЗаполнения) + ВыделенныеСтроки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "ВыделенныеСтроки"); + Если ТипЗнч(ВыделенныеСтроки) = Тип("Структура") Тогда + Для Каждого КлючИЗначение Из ВыделенныеСтроки Цикл + ОтчетыСервер.ВосстановитьВыделенныеСтроки(ЭтотОбъект, КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура БыстрыеНастройкиЗагрузитьНастройкиВКомпоновщик(ПараметрыЗаполнения) + НовыеНастройкиКД = Неопределено; + НовыеПользовательскиеНастройкиКД = Неопределено; + Если ПараметрыЗаполнения.Свойство("КомпоновщикНастроекКД") Тогда + НовыеНастройкиКД = ПараметрыЗаполнения.КомпоновщикНастроекКД.Настройки; + НовыеПользовательскиеНастройкиКД = ПараметрыЗаполнения.КомпоновщикНастроекКД.ПользовательскиеНастройки; + Иначе + Если ПараметрыЗаполнения.Свойство("НастройкиКД") Тогда + НовыеНастройкиКД = ПараметрыЗаполнения.НастройкиКД; + КонецЕсли; + Если ПараметрыЗаполнения.Свойство("ПользовательскиеНастройкиКД") Тогда + НовыеПользовательскиеНастройкиКД = ПараметрыЗаполнения.ПользовательскиеНастройкиКД; + КонецЕсли; + КонецЕсли; + + Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда + НовыеНастройкиXML = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "НовыеНастройкиXML"); + Если ТипЗнч(НовыеНастройкиXML) = Тип("Строка") Тогда + Попытка + НовыеНастройкиКД = ОбщегоНазначения.ЗначениеИзСтрокиXML(НовыеНастройкиXML); + Исключение + НовыеНастройкиКД = Неопределено; + КонецПопытки; + НастройкиОтчета.НовыеНастройкиXML = Неопределено; + КонецЕсли; + + НовыеПользовательскиеНастройкиXML = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "НовыеПользовательскиеНастройкиXML"); + Если ТипЗнч(НовыеПользовательскиеНастройкиXML) = Тип("Строка") Тогда + Попытка + НовыеПользовательскиеНастройкиКД = ОбщегоНазначения.ЗначениеИзСтрокиXML(НовыеПользовательскиеНастройкиXML); + Исключение + НовыеПользовательскиеНастройкиКД = Неопределено; + КонецПопытки; + НастройкиОтчета.НовыеПользовательскиеНастройкиXML = Неопределено; + КонецЕсли; + КонецЕсли; + + ОбновитьНастройкиВарианта = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "ОбновитьНастройкиВарианта", Ложь); + Если ОбновитьНастройкиВарианта Тогда + ИнформацияОбОшибке = Неопределено; + Попытка + НовыеНастройкиКД = Отчет.КомпоновщикНастроек.ПолучитьНастройки(); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + КонецПопытки; + Если ИнформацияОбОшибке <> Неопределено Тогда + СтандартныеПодсистемыКлиентСервер.ВывестиИнформациюОбОшибке( + ПараметрыЗаполнения.Результат, + НСтр("ru = 'Не удалось получить настройки отчета:'"), + ИнформацияОбОшибке); + ПараметрыЗаполнения.Прервать = Истина; + Возврат; + КонецЕсли; + Отчет.КомпоновщикНастроек.ЗагрузитьФиксированныеНастройки(Новый НастройкиКомпоновкиДанных); + КонецЕсли; + + СброситьПользовательскиеНастройки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "СброситьПользовательскиеНастройки", Ложь); + Если СброситьПользовательскиеНастройки Тогда + НовыеПользовательскиеНастройкиКД = Новый ПользовательскиеНастройкиКомпоновкиДанных; + КонецЕсли; + + Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда + ОтчетОбъект = ОтчетыСервер.ОтчетОбъект(ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя); + ОтчетОбъект.ПередЗагрузкойНастроекВКомпоновщик( + ЭтотОбъект, + НастройкиОтчета.КлючСхемы, + КлючТекущегоВарианта, + НовыеНастройкиКД, + НовыеПользовательскиеНастройкиКД); + КонецЕсли; + + Если ТипЗнч(НовыеНастройкиКД) = Тип("НастройкиКомпоновкиДанных") + И Отчет.КомпоновщикНастроек.Настройки <> НовыеНастройкиКД Тогда + Если ТипЗнч(ФормаПараметры.Отбор) = Тип("Структура") Тогда + ОтчетыСервер.УстановитьФиксированныеОтборы(ФормаПараметры.Отбор, НовыеНастройкиКД, НастройкиОтчета); + КонецЕсли; + Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(НовыеНастройкиКД); + КонецЕсли; + Если ТипЗнч(НовыеПользовательскиеНастройкиКД) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") + И Отчет.КомпоновщикНастроек.ПользовательскиеНастройки <> НовыеПользовательскиеНастройкиКД Тогда + Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(НовыеПользовательскиеНастройкиКД); + КонецЕсли; + + УсловияОтборов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "УсловияОтборов"); + Если УсловияОтборов <> Неопределено Тогда + УзелКД = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; + Для Каждого КлючИЗначение Из УсловияОтборов Цикл + ПользовательскаяНастройкаКД = УзелКД.ПолучитьОбъектПоИдентификатору(КлючИЗначение.Ключ); + ПользовательскаяНастройкаКД.ВидСравнения = КлючИЗначение.Значение; + КонецЦикла; + КонецЕсли; + + Если ПараметрыЗаполнения.ВариантМодифицирован Тогда + ВариантИзменен = Истина; + КонецЕсли; + Если ПараметрыЗаполнения.ПользовательскиеНастройкиМодифицированы Тогда + ПользовательскиеНастройкиМодифицированы = Истина; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура БыстрыеНастройкиУдалитьСтарыеЭлементыИКоманды(ПараметрыЗаполнения) + // Удаление элементов. + УдаляемыеЭлементы = Новый Массив; + ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, Элементы.БыстрыеОтборы.ПодчиненныеЭлементы); + ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, Элементы.ОбычныеОтборы.ПодчиненныеЭлементы); + ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, Элементы.СтраницаДополнительноШапка.ПодчиненныеЭлементы); + ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, Элементы.СтраницаДополнительноГруппировки.ПодчиненныеЭлементы); + ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, Элементы.СтраницаДополнительноПодвал.ПодчиненныеЭлементы); + Для Каждого Элемент Из УдаляемыеЭлементы Цикл + Элементы.Удалить(Элемент); + КонецЦикла; + + // Удаление команд + УдаляемыеКоманды = Новый Массив; + Для Каждого Команда Из Команды Цикл + Если ПостоянныеКоманды.НайтиПоЗначению(Команда.Имя) = Неопределено Тогда + УдаляемыеКоманды.Добавить(Команда); + КонецЕсли; + КонецЦикла; + Для Каждого Команда Из УдаляемыеКоманды Цикл + Команды.Удалить(Команда); + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура ДобавитьПодчиненныеЭлементы(Куда, Откуда) + Для Каждого ПодчиненныйЭлемент Из Откуда Цикл + Если ТипЗнч(ПодчиненныйЭлемент) = Тип("ГруппаФормы") + Или ТипЗнч(ПодчиненныйЭлемент) = Тип("ТаблицаФормы") Тогда + ДобавитьПодчиненныеЭлементы(Куда, ПодчиненныйЭлемент.ПодчиненныеЭлементы); + КонецЕсли; + Куда.Добавить(ПодчиненныйЭлемент); + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура БыстрыеНастройкиСоздатьЭлементыУправленияИЗагрузитьЗначения(ПараметрыЗаполнения, Информация) + // Кэши для быстрого поиска с клиента. + СоответствиеПользовательскихНастроек = Новый Соответствие; + СоответствиеИменОбъектовМетаданных = Информация.СоответствиеИменОбъектовМетаданных; + СоответствиеОтключаемыхСвязей = Новый Соответствие; + СоответствиеНастроекВарианта = Новый Соответствие; + + // Удаление реквизитов + ПараметрыЗаполнения.Вставить("Реквизиты", Новый Структура); + ПараметрыЗаполнения.Реквизиты.Вставить("Добавляемые", Новый Массив); + ПараметрыЗаполнения.Реквизиты.Вставить("Удаляемые", Новый Массив); + ПараметрыЗаполнения.Реквизиты.Вставить("Существующие", Новый Соответствие); + ОписаниеТиповТаблицаЗначений = Новый ОписаниеТипов("ТаблицаЗначений"); + ВсеРеквизиты = ПолучитьРеквизиты(); + Для Каждого Реквизит Из ВсеРеквизиты Цикл + РеквизитПолноеИмя = ПолноеИмяРеквизита(Реквизит); + Если ПостоянныеРеквизиты.НайтиПоЗначению(РеквизитПолноеИмя) = Неопределено Тогда + ПараметрыЗаполнения.Реквизиты.Существующие.Вставить(РеквизитПолноеИмя, Реквизит.ТипЗначения); + Подчиненные = ПолучитьРеквизиты(РеквизитПолноеИмя); + Если ОтчетыСервер.ОписанияТиповСовпадают(Реквизит.ТипЗначения, ОписаниеТиповТаблицаЗначений) Тогда + Для Каждого Подчиненный Из Подчиненные Цикл + ПодчиненныйПолноеИмя = ПолноеИмяРеквизита(Подчиненный); + ПараметрыЗаполнения.Реквизиты.Существующие.Вставить(ПодчиненныйПолноеИмя, Подчиненный.ТипЗначения); + КонецЦикла; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + // Локальные переменные для установки значений и свойств после создания реквизитов. + ДобавленныеПоляВвода = Новый Структура; + ДобавленныеСпискиЗначений = Новый Массив; + ДобавленныеСтандартныеПериоды = Новый Массив; + + // Структура связей. + Связи = Информация.Связи; + + ИменаОсновныхРеквизитовФормы = Новый Соответствие; + ИменаЭлементовДляУстановкиСвязей = Новый Соответствие; + НастройкиСВидомСравненияРавно = Новый Соответствие; + + КомпоновщикНастроекКД = Отчет.КомпоновщикНастроек; + ПользовательскиеНастройкиКД = КомпоновщикНастроекКД.ПользовательскиеНастройки; + НастройкиКД = КомпоновщикНастроекКД.Настройки; + + ДополнительныеНастройкиЭлементов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПользовательскиеНастройкиКД.ДополнительныеСвойства, "ЭлементыФормы"); + Если ДополнительныеНастройкиЭлементов = Неопределено Тогда + ДополнительныеНастройкиЭлементов = Новый Соответствие; + КонецЕсли; + + Режимы = РежимОтображенияЭлементаНастройкиКомпоновкиДанных; + + ГруппыВывода = Новый Структура; + ГруппыВывода.Вставить("БыстрыеОтборы", Новый Структура("Порядок, Размер", Новый Массив, 0)); + ГруппыВывода.Вставить("ОбычныеОтборы", Новый Структура("Порядок, Размер", Новый Массив, 0)); + ГруппыВывода.Вставить("ДополнительныеШапка", Новый Структура("Порядок, Размер", Новый Массив, 0)); + ГруппыВывода.Вставить("ДополнительныеПодвал", Новый Структура("Порядок, Размер", Новый Массив, 0)); + ГруппыВывода.Вставить("ДополнительныеЗакладки", Новый СписокЗначений); + ДополнительныеЗакладкиПоиск = Новый Соответствие; + + ОтчетОбъект = Неопределено; + + ЕстьЗагрузкаДанныхИзФайла = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗагрузкаДанныхИзФайла"); + + Если РежимИзмененияУзлаВарианта Тогда + ВыводимыеНастройки = Новый Массив; + Иначе + ВыводимыеНастройки = Информация.ПользовательскиеНастройки.Скопировать(Новый Структура("ВыводРазрешен", Истина)); + ВыводимыеНастройки.Сортировать("ИндексВКоллекции Возр"); + КонецЕсли; + + ВыводимыеТипыНастроек = Новый Массив; + Если РасширенныйРежим <> 1 Тогда + ВыводимыеТипыНастроек.Добавить("ЭлементОтбора"); + ВыводимыеТипыНастроек.Добавить("ГруппаЭлементовОтбора"); + ВыводимыеТипыНастроек.Добавить("ЗначениеПараметраНастроек"); + ВыводимыеТипыНастроек.Добавить("ЭлементУсловногоОформления"); + КонецЕсли; + + Прочее = Новый Структура; + Прочее.Вставить("Связи", Связи); + Прочее.Вставить("ОтчетОбъект", Неопределено); + Прочее.Вставить("ПараметрыЗаполнения", ПараметрыЗаполнения); + Прочее.Вставить("ПутьККомпоновщику", "Отчет.КомпоновщикНастроек"); + Прочее.Вставить("ЕстьЗагрузкаДанныхИзФайла", ЕстьЗагрузкаДанныхИзФайла); + Прочее.Вставить("ДополнительныеНастройкиЭлементов", ДополнительныеНастройкиЭлементов); + Прочее.Вставить("ИменаОсновныхРеквизитовФормы", ИменаОсновныхРеквизитовФормы); + Прочее.Вставить("ИменаЭлементовДляУстановкиСвязей", ИменаЭлементовДляУстановкиСвязей); + Прочее.Вставить("СоответствиеИменОбъектовМетаданных", СоответствиеИменОбъектовМетаданных); + Прочее.Вставить("ДобавленныеПоляВвода", ДобавленныеПоляВвода); + Прочее.Вставить("ДобавленныеСтандартныеПериоды", ДобавленныеСтандартныеПериоды); + Прочее.Вставить("ДобавленныеСпискиЗначений", ДобавленныеСпискиЗначений); + Прочее.Вставить("ЕстьОтборыСУсловиями", Ложь); + + Для Каждого СвойстваНастройки Из ВыводимыеНастройки Цикл + НастройкаВарианта = СвойстваНастройки.НастройкаВарианта; + Если НастройкаВарианта = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если (СвойстваНастройки.Тип = "ВыбранныеПоля" + Или СвойстваНастройки.Тип = "Отбор" + Или СвойстваНастройки.Тип = "Порядок") + И СвойстваНастройки.СтрокаДерева = Информация.ДеревоВариантаКорневаяСтрока Тогда + // Регистрация в информации о пользовательских настройках. + ТаблицаИмя = СвойстваНастройки.Тип; + Если ТаблицаИмя = "Порядок" Тогда + ТаблицаИмя = "Сортировка"; + КонецЕсли; + СоответствиеПользовательскихНастроек.Вставить(ТаблицаИмя, СвойстваНастройки.ИдентификаторКД); + Продолжить; // Вывод не требуется. + КонецЕсли; + + Если ВыводимыеТипыНастроек.Найти(СвойстваНастройки.Тип) = Неопределено Тогда + Продолжить; + КонецЕсли; + + СоответствиеПользовательскихНастроек.Вставить(СвойстваНастройки.ИдентификаторЭлемента, СвойстваНастройки.ИдентификаторКД); + + ПоискНастройкиВарианта = Новый Структура; + ПоискНастройкиВарианта.Вставить("ИдентификаторУзлаКД", СвойстваНастройки.СтрокаДерева.ИдентификаторКД); + ПоискНастройкиВарианта.Вставить("ИмяКоллекции", НастройкаВарианта.ИмяКоллекции); + ПоискНастройкиВарианта.Вставить("ИдентификаторЭлементаКД", НастройкаВарианта.ИдентификаторКД); + СоответствиеНастроекВарианта.Вставить(СвойстваНастройки.ИдентификаторЭлемента, ПоискНастройкиВарианта); + + // Определение группы для вывода. + Если СвойстваНастройки.Тип = "ЭлементУсловногоОформления" Тогда + // Определение раздела. + КорневаяСтрокаДереваВарианта = Неопределено; + ТекущаяСтрока = СвойстваНастройки.СтрокаДерева; + Пока ТекущаяСтрока <> Неопределено Цикл + Если ЗначениеЗаполнено(ТекущаяСтрока.Заголовок) И ТекущаяСтрока.УзелКД <> НастройкиКД Тогда + КорневаяСтрокаДереваВарианта = ТекущаяСтрока; + КонецЕсли; + ТекущаяСтрока = ТекущаяСтрока.Родитель; + КонецЦикла; + Если КорневаяСтрокаДереваВарианта = Неопределено Тогда // Раздел не найден. Вывод в основную часть. + ГруппаВывода = ГруппыВывода.ДополнительныеПодвал; + Иначе // Раздел найден. Вывод в группу на закладке "Дополнительно": + ЗаголовокЗакладки = КорневаяСтрокаДереваВарианта.Заголовок; + ГруппаВывода = ДополнительныеЗакладкиПоиск.Получить(ЗаголовокЗакладки); + Если ГруппаВывода = Неопределено Тогда + ГруппаВывода = Новый Структура("Порядок, Размер", Новый Массив, 0); + ГруппаВывода.Вставить("Заголовок", ЗаголовокЗакладки); + ГруппаВывода.Вставить("ИмяФлажка", ""); + ГруппыВывода.ДополнительныеЗакладки.Добавить(ГруппаВывода, ЗаголовокЗакладки); + ДополнительныеЗакладкиПоиск.Вставить(ЗаголовокЗакладки, ГруппаВывода); + КонецЕсли; + КонецЕсли; + Иначе + Если СвойстваНастройки.Быстрая Тогда + ГруппаВывода = ГруппыВывода.БыстрыеОтборы; + Иначе + ГруппаВывода = ГруппыВывода.ОбычныеОтборы; + КонецЕсли; + КонецЕсли; + + //////////////////////////////////////////////////////////////////////////////// + // Генератор + + ОтчетыСервер.ВывестиЭлементыНастройки(ЭтотОбъект, Элементы, СвойстваНастройки, ГруппаВывода, Прочее); + КонецЦикла; + + Элементы.ИзменитьУсловияОтборов.Видимость = Прочее.ЕстьОтборыСУсловиями; + + ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппыВывода.БыстрыеОтборы, Элементы.БыстрыеОтборы, 2, Ложь); + ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппыВывода.ОбычныеОтборы, Элементы.ОбычныеОтборы, 2, Ложь); + ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппыВывода.ДополнительныеШапка, Элементы.СтраницаДополнительноШапка, 1); + ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппыВывода.ДополнительныеПодвал, Элементы.СтраницаДополнительноПодвал, 1); + + НомерДополнительнойГруппы = 0; + Для Каждого ОписаниеЗакладки Из ГруппыВывода.ДополнительныеЗакладки Цикл + НомерДополнительнойГруппы = НомерДополнительнойГруппы + 1; + ГруппаВывода = ОписаниеЗакладки.Значение; + + ГруппаИмя = "ГруппаНастроек_" + Строка(НомерДополнительнойГруппы); + КолонкиИмя = "ГруппаНастроек_Колонки_" + Строка(НомерДополнительнойГруппы); + ОтступИмя = "ГруппаНастроек_Отступ_" + Строка(НомерДополнительнойГруппы); + + ТекущаяГруппа = Элементы.Добавить(ГруппаИмя, Тип("ГруппаФормы"), Элементы.СтраницаДополнительноГруппировки); + ТекущаяГруппа.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ТекущаяГруппа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; + ТекущаяГруппа.Заголовок = ГруппаВывода.Заголовок; + ТекущаяГруппа.Отображение = ОтображениеОбычнойГруппы.Нет; + ТекущаяГруппа.ОтображатьЗаголовок = Истина; + ТекущаяГруппа.ШрифтЗаголовка = Новый Шрифт(ШрифтыСтиля.ОбычныйШрифтТекста, , , Истина); + ТекущаяГруппа.ЦветТекстаЗаголовка = ЦветаСтиля.ЦветТекстаПоля; + + Если ГруппаВывода.ИмяФлажка <> "" Тогда + ТекущаяГруппа.ОтображатьЗаголовок = Ложь; + Флажок = Элементы[ГруппаВывода.ИмяФлажка]; + Флажок.Заголовок = ГруппаВывода.Заголовок; + Элементы.Переместить(Флажок, ТекущаяГруппа); + КонецЕсли; + + Если ГруппаВывода.Размер > 0 Тогда + Колонки = Элементы.Добавить(КолонкиИмя, Тип("ГруппаФормы"), ТекущаяГруппа); + Колонки.Вид = ВидГруппыФормы.ОбычнаяГруппа; + Колонки.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + Колонки.Отображение = ОтображениеОбычнойГруппы.Нет; + Колонки.ОтображатьЗаголовок = Ложь; + + Отступ = Элементы.Добавить(ОтступИмя, Тип("ДекорацияФормы"), Колонки); + Отступ.Вид = ВидДекорацииФормы.Надпись; + Отступ.Заголовок = " "; + + ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппаВывода, Колонки, 1); + КонецЕсли; + КонецЦикла; + + // Удаление старых и добавление новых реквизитов. + Для Каждого КлючИЗначение Из ПараметрыЗаполнения.Реквизиты.Существующие Цикл + ПараметрыЗаполнения.Реквизиты.Удаляемые.Добавить(КлючИЗначение.Ключ); + КонецЦикла; + ИзменитьРеквизиты(ПараметрыЗаполнения.Реквизиты.Добавляемые, ПараметрыЗаполнения.Реквизиты.Удаляемые); + + // Поля ввода (установка значений и связей). + Для Каждого КлючИЗначение Из ДобавленныеПоляВвода Цикл + ИмяРеквизита = КлючИЗначение.Ключ; + ЭтотОбъект[ИмяРеквизита] = КлючИЗначение.Значение; + Элементы[ИмяРеквизита].ПутьКДанным = ИмяРеквизита; + КонецЦикла; + + // Стандартные периоды (установка значений и связей). + Для Каждого СвойстваНастройки Из ДобавленныеСтандартныеПериоды Цикл + Дополнительно = СвойстваНастройки.Дополнительно; + ЭтотОбъект[Дополнительно.ЗначениеИмя] = СвойстваНастройки.Значение; + Элементы[Дополнительно.ПериодНачалоИмя].ПутьКДанным = Дополнительно.ЗначениеИмя + ".ДатаНачала"; + Элементы[Дополнительно.ПериодОкончаниеИмя].ПутьКДанным = Дополнительно.ЗначениеИмя + ".ДатаОкончания"; + КонецЦикла; + + // Поля подбора (установка значений и связей). + Для Каждого СвойстваНастройки Из ДобавленныеСпискиЗначений Цикл + Дополнительно = СвойстваНастройки.Дополнительно; + ТаблицаИмя = Дополнительно.ТаблицаИмя; + ТаблицаФормы = Элементы[ТаблицаИмя]; + КолонкаИспользование = Элементы[Дополнительно.ИмяКолонкиИспользование]; + КолонкаЗначение = Элементы[Дополнительно.ИмяКолонкиЗначение]; + СписокСФлажками = Новый СписокЗначений; + + ТипНеопределено = Тип("Неопределено"); + ОписаниеТиповНеопределено = Новый ОписаниеТипов("Неопределено"); + Количество = СвойстваНастройки.ОтмеченныеЗначения.Количество(); + Для Номер = 1 По Количество Цикл + ОбратныйИндекс = Количество - Номер; + ЭлементСписка = СвойстваНастройки.ОтмеченныеЗначения[ОбратныйИндекс]; + Значение = ЭлементСписка.Значение; + Если Не ЗначениеЗаполнено(ЭлементСписка.Представление) + И (Значение = Неопределено + Или Значение = ТипНеопределено + Или Значение = ОписаниеТиповНеопределено + Или Не ЗначениеЗаполнено(Значение)) Тогда + СвойстваНастройки.ОтмеченныеЗначения.Удалить(ОбратныйИндекс); + Продолжить; // Запрет пустых значений. + КонецЕсли; + Если СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями + И СвойстваНастройки.ЗначенияДляВыбора.НайтиПоЗначению(Значение) = Неопределено Тогда + СвойстваНастройки.ОтмеченныеЗначения.Удалить(ОбратныйИндекс); + Продолжить; // Выбранное значение не входит в список доступных для выбора. + КонецЕсли; + ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(СписокСФлажками, Значение, ЭлементСписка.Представление, Истина); + КонецЦикла; + + Для Каждого ЭлементСписка Из СвойстваНастройки.ЗначенияДляВыбора Цикл + ОтчетыКлиентСервер.ДобавитьУникальноеЗначениеВСписок(СписокСФлажками, ЭлементСписка.Значение, ЭлементСписка.Представление, Ложь); + КонецЦикла; + + СписокСФлажками.СортироватьПоПредставлению(НаправлениеСортировки.Возр); + + ЭтотОбъект[ТаблицаИмя] = СписокСФлажками; + ЭтотОбъект[ТаблицаИмя].ТипЗначения = СвойстваНастройки.ОписаниеТипов; + ТаблицаФормы.ПутьКДанным = ТаблицаИмя; + КолонкаЗначение.ПутьКДанным = ТаблицаИмя + ".Значение"; + КолонкаИспользование.ПутьКДанным = ТаблицаИмя + ".Пометка"; + + // Некоторые обработчики событий можно подключить только после установки связи элементов с данными. + ТаблицаФормы.УстановитьДействие("ПередНачаломИзменения", "Подключаемый_СписокСПодбором_ПередНачаломИзменения"); + ТаблицаФормы.УстановитьДействие("ПередОкончаниемРедактирования", "Подключаемый_СписокСПодбором_ПередОкончаниемРедактирования"); + ТаблицаФормы.УстановитьДействие("ПриИзменении", "Подключаемый_СписокСПодбором_ПриИзменении"); + Если СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда + ТаблицаФормы.УстановитьДействие("ПередНачаломДобавления", "Подключаемый_ФиксированныйСписок_ПередНачаломДобавления"); + ТаблицаФормы.УстановитьДействие("ПередУдалением", "Подключаемый_ФиксированныйСписок_ПередУдалением"); + Иначе + ТаблицаФормы.УстановитьДействие("ОбработкаВыбора", "Подключаемый_СписокСПодбором_ОбработкаВыбора"); + КолонкаЗначение.УстановитьДействие("АвтоПодбор", "Подключаемый_СписокСПодбором_Значение_АвтоПодбор"); + КонецЕсли; + КолонкаИспользование.УстановитьДействие("ПриИзменении", "Подключаемый_СписокСПодбором_Использование_ПриИзменении"); + КонецЦикла; + + // Сохранение соответствий для быстрого поиска в данные формы. + БыстрыйПоискПользовательскихНастроек = Новый ФиксированноеСоответствие(СоответствиеПользовательскихНастроек); + БыстрыйПоискИменОбъектовМетаданных = Новый ФиксированноеСоответствие(СоответствиеИменОбъектовМетаданных); + БыстрыйПоискОтключаемыхСвязей = Новый ФиксированноеСоответствие(СоответствиеОтключаемыхСвязей); + БыстрыйПоискНастроекВарианта = Новый ФиксированноеСоответствие(СоответствиеНастроекВарианта); + + ПользовательскиеНастройкиКД.ДополнительныеСвойства.Вставить("ЭлементыФормы", ДополнительныеНастройкиЭлементов); +КонецПроцедуры + +&НаСервере +Функция ПолноеИмяРеквизита(Реквизит) + Возврат ?(ПустаяСтрока(Реквизит.Путь), "", Реквизит.Путь + ".") + Реквизит.Имя; +КонецФункции + +&НаСервере +Процедура РасширенныеНастройкиЗагрузитьЗначения(ПараметрыЗаполнения, Информация) + Если РежимИзмененияУзлаВарианта Тогда + Найденные = Информация.ДеревоВарианта.Строки.НайтиСтроки(Новый Структура("ИдентификаторКД", ИдентификаторТекущегоУзлаКД), Истина); + КорневаяСтрока = Найденные[0]; + Иначе + КорневаяСтрока = Информация.ДеревоВариантаКорневаяСтрока; + КонецЕсли; + Информация.Вставить("ТекущаяСтрокаДерева", КорневаяСтрока); + Информация.НастройкиВарианта.Колонки.Добавить("ИдентификаторВФорме"); + + Если РежимИзмененияУзлаВарианта И ТипТекущегоУзлаКД <> "Диаграмма" Тогда + СоставГруппировки.ПолучитьЭлементы().Очистить(); + ЗарегистрироватьЭлементыСоставаГруппировки(); + Иначе + Элементы.СтраницаСоставГруппировки.Видимость = Ложь; + КонецЕсли; + + ВыбранныеПоля.ПолучитьЭлементы().Очистить(); + ВидимостьВыбранныхПолей = ЗарегистрироватьЭлементыВыбранныхПолей(); + Если ВидимостьВыбранныхПолей Тогда + СтандартныеПодсистемыКлиентСервер.РазвернутьУзлыДерева(ПараметрыЗаполнения.Результат, "ВыбранныеПоля", "*", Истина); + КонецЕсли; + + ВидимостьСортировок = Ложь; + Если ВидимостьВыбранныхПолей И ТипТекущегоУзлаКД <> "Диаграмма" Тогда + Сортировка.ПолучитьЭлементы().Очистить(); + ВидимостьСортировок = ЗарегистрироватьЭлементыСортировки(); + Если ВидимостьСортировок Тогда + СтандартныеПодсистемыКлиентСервер.РазвернутьУзлыДерева(ПараметрыЗаполнения.Результат, "Сортировка", "*", Истина); + КонецЕсли; + КонецЕсли; + + ВидимостьТаблицыОтборов = (РасширенныйРежим = 1 И ТипТекущегоУзлаКД <> "Диаграмма"); + Если ВидимостьТаблицыОтборов Тогда + Отборы.ПолучитьЭлементы().Очистить(); + ЗарегистрироватьПараметры(Информация); + ЗарегистрироватьЭлементыОтборов(Информация); + СтандартныеПодсистемыКлиентСервер.РазвернутьУзлыДерева(ПараметрыЗаполнения.Результат, "Отборы", "*", Истина); + КонецЕсли; + + ВидимостьУсловногоОформления = (РасширенныйРежим = 1); + Если ВидимостьУсловногоОформления Тогда + Оформление.ПолучитьЭлементы().Очистить(); + ЗарегистрироватьЭлементыОформления(Информация); + СтандартныеПодсистемыКлиентСервер.РазвернутьУзлыДерева(ПараметрыЗаполнения.Результат, "Оформление", "*", Истина); + КонецЕсли; + + Если ВидимостьВыбранныхПолей Тогда + Элементы.СтраницаВыбранныеПоляИСортировки.Заголовок = ?(ВидимостьСортировок, НСтр("ru = 'Поля и сортировки'"), НСтр("ru = 'Поля'")); + КонецЕсли; + + Если РасширенныйРежим = 1 И Не РежимИзмененияУзлаВарианта Тогда + Элементы.ГруппаЕстьВложенныеОтчеты.Видимость = Информация.ЕстьВложенныеОтчеты; + Элементы.ГруппаЕстьВложенныеОтборы.Видимость = Информация.ЕстьВложенныеОтборы; + Элементы.ГруппаЕстьВложенноеОформление.Видимость = Информация.ЕстьВложенноеОформление; + Элементы.ГруппаЕстьВложенныеПоляИлиСортировки.Видимость = Информация.ЕстьВложенныеПоля Или Информация.ЕстьВложенныеСортировки; + Иначе + Элементы.ГруппаЕстьВложенныеОтчеты.Видимость = Ложь; + Элементы.ГруппаЕстьВложенныеОтборы.Видимость = Ложь; + Элементы.ГруппаЕстьВложенноеОформление.Видимость = Ложь; + Элементы.ГруппаЕстьВложенныеПоляИлиСортировки.Видимость = Ложь; + КонецЕсли; + + Если ТипТекущегоУзлаКД = "Диаграмма" Тогда + Элементы.ТекущийУзелКДТипДиаграммы.Видимость = Истина; + Элементы.ТекущийУзелКДТипДиаграммы.ОграничениеТипа = Новый ОписаниеТипов("ТипДиаграммы"); + + КорневойУзелКД = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ИдентификаторТекущегоУзлаКД); + Если ТипЗнч(КорневойУзелКД) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + КорневойУзелКД = КорневойУзелКД.Настройки; + КонецЕсли; + ПараметрКД = КорневойУзелКД.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ТипДиаграммы")); + Если ПараметрКД = Неопределено Тогда + Элементы.ТекущийУзелКДТипДиаграммы.Видимость = Ложь; + Иначе + ТекущийУзелКДТипДиаграммы = ПараметрКД.Значение; + КонецЕсли; + Иначе + Элементы.ТекущийУзелКДТипДиаграммы.Видимость = Ложь; + КонецЕсли; + + ВидимостьСтруктуры = Ложь; + Если Не РежимИзмененияУзлаВарианта И КорневаяСтрока.Тип <> "НастройкиВложенногоОбъекта" Тогда + СтрокиРодителя = СтруктураВарианта.ПолучитьЭлементы(); + СтрокиРодителя.Очистить(); + ЕстьФлажки = ЗарегистрироватьЭлементСтруктурыОтчета(КорневаяСтрока, СтрокиРодителя); + СтандартныеПодсистемыКлиентСервер.РазвернутьУзлыДерева(ПараметрыЗаполнения.Результат, "СтруктураВарианта", "*", Истина); + ВидимостьСтруктуры = ЕстьФлажки Или РасширенныйРежим = 1; + КонецЕсли; + + Если Не Информация.ЕстьБыстрыеНастройки + И Не Информация.ЕстьОбычныеНастройки + И Не ВидимостьСтруктуры + И Не ВидимостьУсловногоОформления + И Не ВидимостьВыбранныхПолей + И Не ВидимостьСортировок + И Не ВидимостьТаблицыОтборов Тогда + Элементы.СтраницаНетПользовательскихНастроек.Видимость = Истина; + Элементы.СтраницыНастроек.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; + Элементы.СтраницыНастроек.ТекущаяСтраница = Элементы.СтраницаНетПользовательскихНастроек; + Элементы.ЗакрытьИСформировать.Видимость = Ложь; + Иначе + Элементы.СтраницаВыбранныеПоляИСортировки.Видимость = ВидимостьВыбранныхПолей; + Элементы.ГруппаСортировки.Видимость = ВидимостьСортировок; + Элементы.ГруппаОтборыРасширенныйРежим.Видимость = ВидимостьТаблицыОтборов; + Элементы.ГруппаОформлениеРасширенныйРежим.Видимость = ВидимостьУсловногоОформления; + Элементы.СтраницаСтруктураВарианта.Видимость = ВидимостьСтруктуры; + Элементы.СтраницаНетПользовательскихНастроек.Видимость = Ложь; + Элементы.СтраницыНастроек.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху; + Элементы.ЗакрытьИСформировать.Видимость = Истина; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ЗарегистрироватьЭлементСтруктурыОтчета(СтрокаДерева, СтрокиРодителя) + СтрокаФормы = СтрокиРодителя.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаФормы, СтрокаДерева, "ИдентификаторКД, Представление, Заголовок, Тип, Подтип, + |СодержитОтборы, СодержитУсловноеОформление"); + СтрокаФормы.СодержитПоляИлиСортировки = СтрокаДерева.СодержитПоля Или СтрокаДерева.СодержитСортировки; + + СтрокаФормы.ФлажокДоступен = Истина; + Если (РасширенныйРежим = 0 И СтрокаДерева.ПользовательскаяНастройка = Неопределено) + Или СтрокаДерева.Тип = "КоллекцияЭлементовСтруктурыДиаграммы" + Или СтрокаДерева.Тип = "КоллекцияЭлементовСтруктурыТаблицы" + Или СтрокаДерева.Тип = "Настройки" Тогда + СтрокаФормы.ФлажокДоступен = Ложь; + КонецЕсли; + + Если РасширенныйРежим = 0 И ЗначениеЗаполнено(СтрокаФормы.Заголовок) Тогда + СтрокаФормы.Представление = СтрокаФормы.Заголовок; + СтрокаФормы.Подсвечивать = Истина; + КонецЕсли; + + СтрокаФормы.ИндексКартинки = -1; + Если СтрокаДерева.Тип = "Группировка" + Или СтрокаДерева.Тип = "ГруппировкаТаблицы" + Или СтрокаДерева.Тип = "ГруппировкаДиаграммы" Тогда + СтрокаФормы.ИндексКартинки = 1; + ИначеЕсли СтрокаДерева.Тип = "Таблица" Тогда + СтрокаФормы.ИндексКартинки = 2; + ИначеЕсли СтрокаДерева.Тип = "Диаграмма" Тогда + СтрокаФормы.ИндексКартинки = 3; + ИначеЕсли СтрокаДерева.Тип = "НастройкиВложенногоОбъекта" Тогда + СтрокаФормы.ИндексКартинки = 4; + КонецЕсли; + + Если СтрокаФормы.Тип = "Настройки" Тогда + СтрокаФормы.ЭтоРаздел = Истина; + СтрокаФормы.Заголовок = ""; + СтрокаФормы.Представление = НСтр("ru = 'Отчет'"); + СтрокаФормы.СодержитОтборы = Ложь; + СтрокаФормы.СодержитПоляИлиСортировки = Ложь; + СтрокаФормы.СодержитУсловноеОформление = Ложь; + СтрокаФормы.Подсвечивать = Ложь; + КонецЕсли; + + Если СтрокаФормы.ФлажокДоступен Тогда + Если РасширенныйРежим = 0 Тогда + СтрокаФормы.ИдентификаторКД = СтрокаДерева.ПользовательскаяНастройка.ИдентификаторКД; + СтрокаФормы.Использование = СтрокаДерева.ПользовательскаяНастройка.ПользовательскаяНастройкаКД.Использование; + Иначе + СтрокаФормы.Использование = СтрокаДерева.УзелКД.Использование; + КонецЕсли; + КонецЕсли; + + ПодчиненныеСтрокиРодителя = СтрокаФормы.ПолучитьЭлементы(); + + ЕстьВложенныеФлажки = Ложь; + Для Каждого ПодчиненнаяСтрокаДерева Из СтрокаДерева.Строки Цикл + Если ЗарегистрироватьЭлементСтруктурыОтчета(ПодчиненнаяСтрокаДерева, ПодчиненныеСтрокиРодителя) Тогда + ЕстьВложенныеФлажки = Истина; + КонецЕсли; + КонецЦикла; + + Возврат СтрокаФормы.ФлажокДоступен Или ЕстьВложенныеФлажки; +КонецФункции + +&НаСервере +Функция ЗарегистрироватьЭлементыСортировки() + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "Сортировка", Неопределено); + Если УзелКД = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + НаборСтрокКД = УзелКД.Элементы; + + СтрокаРаздел = Сортировка.ПолучитьЭлементы().Добавить(); + СтрокаРаздел.ЭтоРаздел = Истина; + СтрокаРаздел.Представление = НСтр("ru = 'Сортировки'"); + СтрокаРаздел.ИндексКартинки = 15; + СтрокаРаздел.ИдентификаторКД = Неопределено; + НаборСтрок = СтрокаРаздел.ПолучитьЭлементы(); + + ДоступныеПоля = УзелКД.ДоступныеПоляПорядка; + Для Каждого ЭлементКД Из НаборСтрокКД Цикл + ТипНастройки = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ЭлементКД)); + Если ТипНастройки = "ЭлементПорядка" И Не ЗначениеЗаполнено(ЭлементКД.Поле) Тогда + Продолжить; + КонецЕсли; + + СтрокаТаблицы = НаборСтрок.Добавить(); + СтрокаТаблицы.ИдентификаторКД = УзелКД.ПолучитьИдентификаторПоОбъекту(ЭлементКД); + СтрокаТаблицы.ТипНастройки = ТипНастройки; + СтрокаТаблицы.Использование = ЭлементКД.Использование; + СтрокаТаблицы.ИндексКартинки = -1; + + Если ТипНастройки = "АвтоЭлементПорядка" Тогда + СтрокаТаблицы.Представление = НСтр("ru = 'Авто (сортировки родителя)'"); + ИначеЕсли ТипНастройки = "ЭлементПорядка" Тогда + СтрокаТаблицы.Направление = ЭлементКД.ТипУпорядочивания; + ДоступноеПоле = ДоступныеПоля.НайтиПоле(ЭлементКД.Поле); + Если ДоступноеПоле = Неопределено Тогда + СтрокаТаблицы.Представление = ОтчетыКлиентСервер.ИмяВПредставление(Строка(ЭлементКД.Поле)); + Иначе + СтрокаТаблицы.Представление = ДоступноеПоле.Заголовок; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат Истина; +КонецФункции + +&НаСервере +Процедура ЗарегистрироватьЭлементыСоставаГруппировки(УзелКД = Неопределено, НаборСтрокКД = Неопределено, НаборСтрок = Неопределено) + Если УзелКД = Неопределено Тогда + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "СоставГруппировки", Неопределено); + Если УзелКД = Неопределено Тогда + Возврат; + КонецЕсли; + КонецЕсли; + Если НаборСтрокКД = Неопределено Тогда + НаборСтрокКД = УзелКД.Элементы; + КонецЕсли; + Если НаборСтрок = Неопределено Тогда + НаборСтрок = СоставГруппировки.ПолучитьЭлементы(); + КонецЕсли; + ДоступныеПоля = УзелКД.ДоступныеПоляПолейГруппировок; + Для Каждого ЭлементКД Из НаборСтрокКД Цикл + ТипНастройки = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ЭлементКД)); + ПолеКД = Неопределено; + Если ТипНастройки = "ПолеГруппировки" Тогда + Если Не ЗначениеЗаполнено(ЭлементКД.Поле) Тогда + Продолжить; + КонецЕсли; + ПолеКД = ЭлементКД.Поле; + КонецЕсли; + + СтрокаТаблицы = НаборСтрок.Добавить(); + СтрокаТаблицы.ИдентификаторКД = УзелКД.ПолучитьИдентификаторПоОбъекту(ЭлементКД); + СтрокаТаблицы.ТипНастройки = ТипНастройки; + СтрокаТаблицы.Использование = ЭлементКД.Использование; + СтрокаТаблицы.ПолеКД = ПолеКД; + + Если ТипНастройки = "АвтоПолеГруппировки" Тогда + СтрокаТаблицы.Представление = НСтр("ru = 'Авто (по всем полям)'"); + СтрокаТаблицы.ИндексКартинки = 6; + ИначеЕсли ТипНастройки = "ПолеГруппировки" Тогда + СтрокаТаблицы.ТипГруппировки = ЭлементКД.ТипГруппировки; + СтрокаТаблицы.ТипДополнения = ЭлементКД.ТипДополнения; + ДоступноеПоле = ДоступныеПоля.НайтиПоле(ЭлементКД.Поле); + Если ДоступноеПоле = Неопределено Тогда + СтрокаТаблицы.Представление = ОтчетыКлиентСервер.ИмяВПредставление(Строка(ЭлементКД.Поле)); + СтрокаТаблицы.ИндексКартинки = 5; + Иначе + СтрокаТаблицы.Представление = ДоступноеПоле.Заголовок; + Если ДоступноеПоле.Ресурс Тогда + СтрокаТаблицы.ИндексКартинки = 20; + ИначеЕсли ДоступноеПоле.Таблица Тогда + СтрокаТаблицы.ИндексКартинки = 21; + ИначеЕсли ДоступноеПоле.Папка Тогда + СтрокаТаблицы.ИндексКартинки = 1; + Иначе + СтрокаТаблицы.ИндексКартинки = 4; + КонецЕсли; + ИнформацияОТипах = ОтчетыКлиентСервер.АнализТипов(ДоступноеПоле.ТипЗначения, Ложь); + Если ИнформацияОТипах.СодержитТипПериод Или ИнформацияОТипах.СодержитТипДата Тогда + СтрокаТаблицы.ПоказыватьТипДополнения = Истина; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +&НаСервере +Функция ЗарегистрироватьЭлементыВыбранныхПолей(УзелКД = Неопределено, НаборСтрокКД = Неопределено, НаборСтрок = Неопределено, ДоступныеПоля = Неопределено) + Если УзелКД = Неопределено Тогда + УзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, "ВыбранныеПоля", Неопределено); + Если УзелКД = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + КонецЕсли; + Если НаборСтрокКД = Неопределено Тогда + НаборСтрокКД = УзелКД.Элементы; + КонецЕсли; + Если НаборСтрок = Неопределено Тогда + СтрокаРаздел = ВыбранныеПоля.ПолучитьЭлементы().Добавить(); + СтрокаРаздел.ЭтоРаздел = Истина; + СтрокаРаздел.Представление = НСтр("ru = 'Поля'"); + СтрокаРаздел.ИндексКартинки = 14; + СтрокаРаздел.ИдентификаторКД = "ВыбранныеПоля"; + НаборСтрок = СтрокаРаздел.ПолучитьЭлементы(); + КонецЕсли; + Если ДоступныеПоля = Неопределено Тогда + ДоступныеПоля = УзелКД.ДоступныеПоляВыбора; + КонецЕсли; + + Для Каждого ЭлементКД Из НаборСтрокКД Цикл + ТипНастройки = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ЭлементКД)); + ЭтоГруппа = Ложь; + ПолеКД = Неопределено; + Если ТипНастройки = "АвтоВыбранноеПоле" Тогда + Представление = НСтр("ru = 'Авто (поля родителя)'"); + ИндексКартинки = 6; + Иначе + Если ТипНастройки = "ГруппаВыбранныхПолей" Тогда + ЭтоГруппа = Истина; + ИндексКартинки = 1; + Иначе + ИндексКартинки = 4; + КонецЕсли; + + Представление = ЭлементКД.Заголовок; + Если ЗначениеЗаполнено(ЭлементКД.Поле) Тогда + ДоступноеПоле = ДоступныеПоля.НайтиПоле(ЭлементКД.Поле); + ПолеКД = ЭлементКД.Поле; + Иначе + Если Не ЭтоГруппа Тогда + Продолжить; + КонецЕсли; + ДоступноеПоле = Неопределено; + КонецЕсли; + Если ДоступноеПоле = Неопределено Тогда + Если Не ЭтоГруппа Тогда + ИндексКартинки = 5; + Представление = ОтчетыКлиентСервер.ИмяВПредставление(Строка(ЭлементКД.Поле)); + КонецЕсли; + ИначеЕсли Представление = "" Тогда + Представление = ДоступноеПоле.Заголовок; + КонецЕсли; + Если ЭтоГруппа И ЭлементКД.Расположение <> РасположениеПоляКомпоновкиДанных.Авто Тогда + Представление = Представление + " (" + Строка(ЭлементКД.Расположение) + ")"; + КонецЕсли; + КонецЕсли; + + СтрокаТаблицы = НаборСтрок.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаТаблицы, ЭлементКД); + СтрокаТаблицы.ТипНастройки = ТипНастройки; + СтрокаТаблицы.ИндексКартинки = ИндексКартинки; + СтрокаТаблицы.ЭтоГруппа = ЭтоГруппа; + СтрокаТаблицы.Представление = Представление; + СтрокаТаблицы.ИдентификаторКД = УзелКД.ПолучитьИдентификаторПоОбъекту(ЭлементКД); + СтрокаТаблицы.ПолеКД = ПолеКД; + + Если ЭтоГруппа Тогда + ЗарегистрироватьЭлементыВыбранныхПолей(УзелКД, ЭлементКД.Элементы, СтрокаТаблицы.ПолучитьЭлементы(), ДоступныеПоля); + КонецЕсли; + КонецЦикла; + + Возврат Истина; +КонецФункции + +&НаСервере +Процедура ЗарегистрироватьПараметры(Информация) + Если РежимИзмененияУзлаВарианта Тогда + Возврат; + КонецЕсли; + + УсловияПоиска = Новый Структура("СтрокаДерева, ИмяКоллекции", Информация.ТекущаяСтрокаДерева, "ПараметрыДанных"); + Найденные = Информация.НастройкиВарианта.Строки.НайтиСтроки(УсловияПоиска, Ложь); + Если Найденные.Количество() = 0 Тогда + Возврат; + КонецЕсли; + НаборСтрокВарианта = Найденные[0].Строки; + + СтрокаРаздел = Отборы.ПолучитьЭлементы().Добавить(); + СтрокаРаздел.ЭтоРаздел = Истина; + СтрокаРаздел.ЭтоПараметр = Истина; + СтрокаРаздел.Представление = НСтр("ru = 'Параметры'"); + СтрокаРаздел.ИндексКартинки = 2; + СтрокаРаздел.ИдентификаторКД = "ПараметрыДанных"; + НаборСтрок = СтрокаРаздел.ПолучитьЭлементы(); + + Для Каждого НастройкаВарианта Из НаборСтрокВарианта Цикл + Если Не НастройкаВарианта.ВыводРазрешен Тогда + Продолжить; + КонецЕсли; + + ДоступнаяНастройкаКД = НастройкаВарианта.ДоступнаяНастройкаКД; + ЭлементКД = НастройкаВарианта.ЭлементКД; + + Если ЗначениеЗаполнено(НастройкаВарианта.ДоступнаяНастройкаКД.Заголовок) Тогда + Представление = НастройкаВарианта.ДоступнаяНастройкаКД.Заголовок; + Иначе + Представление = Строка(ЭлементКД.Параметр); + КонецЕсли; + + СтрокаТаблицы = НаборСтрок.Добавить(); + СтрокаТаблицы.Использование = ЭлементКД.Использование; + СтрокаТаблицы.Значение = НастройкаВарианта.Значение; + СтрокаТаблицы.ИдентификаторКД = НастройкаВарианта.ИдентификаторКД; + СтрокаТаблицы.Представление = Представление; + СтрокаТаблицы.ЭтоПараметр = Истина; + СтрокаТаблицы.ИндексКартинки = -1; + СтрокаТаблицы.ТипЗначения = НастройкаВарианта.ДоступнаяНастройкаКД.ТипЗначения; + СтрокаТаблицы.ВводСписком = НастройкаВарианта.ВводСписком; + СтрокаТаблицы.ВыводитьФлажок = НастройкаВарианта.ВыводитьФлажок; + СтрокаТаблицы.ВыборГруппИЭлементов = НастройкаВарианта.ВыборГруппИЭлементов; + + Если НастройкаВарианта.ОграничиватьВыборУказаннымиЗначениями + И ТипЗнч(НастройкаВарианта.ЗначенияДляВыбора) = Тип("СписокЗначений") Тогда + Если СтрокаТаблицы.ВводСписком Тогда + Если ТипЗнч(СтрокаТаблицы.Значение) = Тип("СписокЗначений") Тогда + Для Каждого ЭлементСписка Из СтрокаТаблицы.Значение Цикл + ЭлементДляВыбора = НастройкаВарианта.ЗначенияДляВыбора.НайтиПоЗначению(ЭлементСписка.Значение); + Если ЭлементДляВыбора <> Неопределено Тогда + ЭлементСписка.Представление = ЭлементДляВыбора.Представление; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Иначе + СтрокаТаблицы.ФиксированныйСписокВыбора = Истина; + ЭлементДляВыбора = НастройкаВарианта.ЗначенияДляВыбора.НайтиПоЗначению(СтрокаТаблицы.Значение); + Если ЭлементДляВыбора <> Неопределено Тогда + СтрокаТаблицы.ПредставлениеЗначения = ЭлементДляВыбора.Представление; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + НастройкаВарианта.ИдентификаторВФорме = СтрокаТаблицы.ПолучитьИдентификатор(); + + Если ТипЗнч(СтрокаТаблицы.Значение) = Тип("СтандартныйПериод") Тогда + СтрокаТаблицы.Условие = ОтчетыКлиентСервер.ПолучитьВидСтандартногоПериода(СтрокаТаблицы.Значение); + СтрокаТаблицы.ТипУсловия = Новый ОписаниеТипов("ПеречислениеСсылка.ДоступныеПериодыОтчета"); + Иначе + СтрокаТаблицы.ТипУсловия = Новый ОписаниеТипов("Неопределено"); + КонецЕсли; + + СтрокаТаблицы.Заголовок = Представление; + Если ЗначениеЗаполнено(ЭлементКД.ИдентификаторПользовательскойНастройки) Тогда + Если ЗначениеЗаполнено(ЭлементКД.ПредставлениеПользовательскойНастройки) Тогда + СтрокаТаблицы.Заголовок = ЭлементКД.ПредставлениеПользовательскойНастройки; + КонецЕсли; + Если ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ Тогда + СтрокаТаблицы.ИндексКартинкиДоступа = 2; + ИначеЕсли ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный Тогда + СтрокаТаблицы.ИндексКартинкиДоступа = 4; + Иначе + СтрокаТаблицы.ИндексКартинкиДоступа = 5; + КонецЕсли; + Иначе + СтрокаТаблицы.ИндексКартинкиДоступа = 5; + КонецЕсли; + + Дополнительно = Новый Структура("ОписаниеТипов, ОграничиватьВыборУказаннымиЗначениями, + |ПараметрыВыбора, ФормаВыбора, ЗначенияДляВыбора"); + ЗаполнитьЗначенияСвойств(Дополнительно, НастройкаВарианта); + СтрокаТаблицы.Дополнительно = Дополнительно; + + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура ЗарегистрироватьЭлементыОтборов(Информация, НаборСтрокВарианта = Неопределено, НаборСтрокФормы = Неопределено) + Если НаборСтрокВарианта = Неопределено Тогда + УсловияПоиска = Новый Структура("СтрокаДерева, ИмяКоллекции", Информация.ТекущаяСтрокаДерева, "Отбор"); + Найденные = Информация.НастройкиВарианта.Строки.НайтиСтроки(УсловияПоиска, Ложь); + Если Найденные.Количество() = 0 Тогда + Возврат; + КонецЕсли; + НаборСтрокВарианта = Найденные[0].Строки; + КонецЕсли; + Если НаборСтрокФормы = Неопределено Тогда + НаборСтрокФормы = Отборы.ПолучитьЭлементы(); + СтрокаРаздел = НаборСтрокФормы.Добавить(); + СтрокаРаздел.ЭтоРаздел = Истина; + СтрокаРаздел.Представление = НСтр("ru = 'Отборы'"); + СтрокаРаздел.ИндексКартинки = 3; + СтрокаРаздел.ИдентификаторКД = "Отборы"; + НаборСтрокФормы = СтрокаРаздел.ПолучитьЭлементы(); + КонецЕсли; + Для Каждого НастройкаВарианта Из НаборСтрокВарианта Цикл + Если НастройкаВарианта.Тип = "ГруппаЭлементовОтбора" Тогда + ЭтоГруппа = Истина; + Представление = Строка(НастройкаВарианта.ЭлементКД.ТипГруппы); + ИначеЕсли НастройкаВарианта.Тип = "ЭлементОтбора" Тогда + // БыстрыйВыбор, ВыборГруппИЭлементов, ДоступныеВидыСравнения, ДоступныеЗначения, Маска, Папка + // Поле, Ресурс, СвязьПоТипу, Таблица, ФормаВыбора, ФорматРедактирования, Элементы + // ПолучитьПараметрыВыбора(), ПолучитьСвязиПараметровВыбора(). + Если НастройкаВарианта.ДоступнаяНастройкаКД = Неопределено Тогда + Продолжить; + КонецЕсли; + ЭтоГруппа = Ложь; + Если ЗначениеЗаполнено(НастройкаВарианта.ДоступнаяНастройкаКД.Заголовок) Тогда + Представление = НастройкаВарианта.ДоступнаяНастройкаКД.Заголовок; + Иначе + Представление = Строка(НастройкаВарианта.ЭлементКД.ЛевоеЗначение); + КонецЕсли; + Иначе + Продолжить; + КонецЕсли; + + ЭлементКД = НастройкаВарианта.ЭлементКД; + + СтрокаТаблицы = НаборСтрокФормы.Добавить(); + СтрокаТаблицы.Использование = НастройкаВарианта.ЭлементКД.Использование; + СтрокаТаблицы.Представление = Представление; //ОтчетыКлиентСервер.ПредставлениеОбъектаКД(Информация.ТекущаяСтрокаДерева.УзелКД.Отбор, ЭлементКД, Неопределено).Представление + СтрокаТаблицы.Заголовок = Представление; + СтрокаТаблицы.ИдентификаторКД = НастройкаВарианта.ИдентификаторКД; + СтрокаТаблицы.ЭтоПараметр = Ложь; + СтрокаТаблицы.ЭтоГруппа = ЭтоГруппа; + СтрокаТаблицы.ВводСписком = НастройкаВарианта.ВводСписком; + СтрокаТаблицы.ВыводитьФлажок = НастройкаВарианта.ВыводитьФлажок; + СтрокаТаблицы.ФормаВыбора = НастройкаВарианта.ФормаВыбора; + СтрокаТаблицы.ВыборГруппИЭлементов = НастройкаВарианта.ВыборГруппИЭлементов; + + НастройкаВарианта.ИдентификаторВФорме = СтрокаТаблицы.ПолучитьИдентификатор(); + + ВыводитьТолькоФлажок = Ложь; + Если ЗначениеЗаполнено(ЭлементКД.Представление) Тогда + ВыводитьТолькоФлажок = Истина; + Если ЭлементКД.Представление <> "1" Тогда + СтрокаТаблицы.Заголовок = ЭлементКД.Представление; + КонецЕсли; + КонецЕсли; + Если ЗначениеЗаполнено(ЭлементКД.ПредставлениеПользовательскойНастройки) Тогда + СтрокаТаблицы.Заголовок = ЭлементКД.ПредставлениеПользовательскойНастройки; + КонецЕсли; + СтрокаТаблицы.ЗаголовокПереопределен = (СтрокаТаблицы.Заголовок <> СтрокаТаблицы.Представление); + + Если ЗначениеЗаполнено(ЭлементКД.ИдентификаторПользовательскойНастройки) Тогда + Если ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ Тогда + СтрокаТаблицы.ИндексКартинкиДоступа = ?(ВыводитьТолькоФлажок, 1, 2); + ИначеЕсли ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный Тогда + СтрокаТаблицы.ИндексКартинкиДоступа = ?(ВыводитьТолькоФлажок, 3, 4); + Иначе + СтрокаТаблицы.ИндексКартинкиДоступа = 5; + КонецЕсли; + Иначе + СтрокаТаблицы.ИндексКартинкиДоступа = 5; + КонецЕсли; + + Если ЭтоГруппа Тогда + СтрокаТаблицы.ИндексКартинки = -1; + ЗарегистрироватьЭлементыОтборов(Информация, НастройкаВарианта.Строки, СтрокаТаблицы.ПолучитьЭлементы()); + Иначе + СтрокаТаблицы.Значение = НастройкаВарианта.Значение; + Если НастройкаВарианта.ОграничиватьВыборУказаннымиЗначениями + И ТипЗнч(НастройкаВарианта.ЗначенияДляВыбора) = Тип("СписокЗначений") Тогда + Если СтрокаТаблицы.ВводСписком Тогда + Если ТипЗнч(СтрокаТаблицы.Значение) = Тип("СписокЗначений") Тогда + Для Каждого ЭлементСписка Из СтрокаТаблицы.Значение Цикл + ЭлементДляВыбора = НастройкаВарианта.ЗначенияДляВыбора.НайтиПоЗначению(ЭлементСписка.Значение); + Если ЭлементДляВыбора <> Неопределено Тогда + ЭлементСписка.Представление = ЭлементДляВыбора.Представление; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Иначе + СтрокаТаблицы.ФиксированныйСписокВыбора = Истина; + ЭлементДляВыбора = НастройкаВарианта.ЗначенияДляВыбора.НайтиПоЗначению(СтрокаТаблицы.Значение); + Если ЭлементДляВыбора <> Неопределено Тогда + СтрокаТаблицы.ПредставлениеЗначения = ЭлементДляВыбора.Представление; + КонецЕсли; + КонецЕсли; + КонецЕсли; + СтрокаТаблицы.ТипЗначения = НастройкаВарианта.ОписаниеТипов; + СтрокаТаблицы.ИндексКартинки = -1; + Если ТипЗнч(СтрокаТаблицы.Значение) = Тип("СтандартныйПериод") Тогда + СтрокаТаблицы.Условие = ОтчетыКлиентСервер.ПолучитьВидСтандартногоПериода(СтрокаТаблицы.Значение); + СтрокаТаблицы.ТипУсловия = Новый ОписаниеТипов("ПеречислениеСсылка.ДоступныеПериодыОтчета"); + Иначе + СтрокаТаблицы.Условие = НастройкаВарианта.ВидСравнения; + СтрокаТаблицы.ТипУсловия = Новый ОписаниеТипов("ВидСравненияКомпоновкиДанных"); + КонецЕсли; + КонецЕсли; + + Дополнительно = Новый Структура("ОписаниеТипов, ОграничиватьВыборУказаннымиЗначениями, + |ПараметрыВыбора, ФормаВыбора, ЗначенияДляВыбора"); + ЗаполнитьЗначенияСвойств(Дополнительно, НастройкаВарианта); + СтрокаТаблицы.Дополнительно = Дополнительно; + + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура ЗарегистрироватьОтключаемыеСвязи(Информация) + ОтключаемыеСвязи.Очистить(); + Для Каждого ОписаниеСвязи Из Информация.ОтключаемыеСвязи Цикл + Связь = ОтключаемыеСвязи.Добавить(); + ЗаполнитьЗначенияСвойств(Связь, ОписаниеСвязи); + Если РасширенныйРежим = 1 Тогда + Связь.ВедущийИдентификаторВФорме = ОписаниеСвязи.Ведущий.ИдентификаторВФорме; + Связь.ПодчиненныйИдентификаторВФорме = ОписаниеСвязи.Подчиненный.ИдентификаторВФорме; + Иначе + Связь.ВедущийИдентификаторВФорме = ОписаниеСвязи.Ведущий.ИдентификаторЭлемента; + Связь.ПодчиненныйИдентификаторВФорме = ОписаниеСвязи.Подчиненный.ИдентификаторЭлемента; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура ЗарегистрироватьЭлементыОформления(Информация, НаборСтрокВарианта = Неопределено, НаборСтрокФормы = Неопределено) + Если НаборСтрокВарианта = Неопределено Тогда + УсловияПоиска = Новый Структура("СтрокаДерева, ИмяКоллекции", Информация.ТекущаяСтрокаДерева, "УсловноеОформление"); + Найденные = Информация.НастройкиВарианта.Строки.НайтиСтроки(УсловияПоиска, Ложь); + Если Найденные.Количество() = 0 Тогда + Возврат; + КонецЕсли; + НаборСтрокВарианта = Найденные[0].Строки; + КонецЕсли; + Если НаборСтрокФормы = Неопределено Тогда + НаборСтрокФормы = Оформление.ПолучитьЭлементы(); + КонецЕсли; + Для Каждого НастройкаВарианта Из НаборСтрокВарианта Цикл + ЭлементКД = НастройкаВарианта.ЭлементКД; + + СтрокаТаблицы = НаборСтрокФормы.Добавить(); + СтрокаТаблицы.Использование = ЭлементКД.Использование; + СтрокаТаблицы.Представление = НастройкаВарианта.Представление; + СтрокаТаблицы.Заголовок = СтрокаТаблицы.Представление; + СтрокаТаблицы.ИдентификаторКД = НастройкаВарианта.ИдентификаторКД; + СтрокаТаблицы.ИндексКартинки = -1; + + НастройкаВарианта.ИдентификаторВФорме = СтрокаТаблицы.ПолучитьИдентификатор(); + + ВыводитьТолькоФлажок = Ложь; + Если ЗначениеЗаполнено(ЭлементКД.Представление) Тогда + ВыводитьТолькоФлажок = Истина; + Если ЭлементКД.Представление <> "1" Тогда + СтрокаТаблицы.Заголовок = ЭлементКД.Представление; + КонецЕсли; + КонецЕсли; + Если ЗначениеЗаполнено(ЭлементКД.ПредставлениеПользовательскойНастройки) Тогда + СтрокаТаблицы.Заголовок = ЭлементКД.ПредставлениеПользовательскойНастройки; + КонецЕсли; + СтрокаТаблицы.ЗаголовокПереопределен = (СтрокаТаблицы.Заголовок <> СтрокаТаблицы.Представление); + + Если ЗначениеЗаполнено(ЭлементКД.ИдентификаторПользовательскойНастройки) Тогда + Если ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ Тогда + СтрокаТаблицы.ИндексКартинкиДоступа = 2; + ИначеЕсли ЭлементКД.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный Тогда + СтрокаТаблицы.ИндексКартинкиДоступа = 4; + Иначе + СтрокаТаблицы.ИндексКартинкиДоступа = 5; + КонецЕсли; + Иначе + СтрокаТаблицы.ИндексКартинкиДоступа = 5; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура ПеретаскиваниеВПределахТаблицы(ИсточникПеретаскивания, ИдентификаторЦели) + // Определение параметров. + ТаблицаИмя = ИсточникПеретаскивания.ТаблицаИмя; + ПеремещаемыеСтроки = ИсточникПеретаскивания.СтрокиДерева; + ТекущаяСтрока = ИсточникПеретаскивания.ТекущаяСтрока; + + ТаблицаРеквизит = ЭтотОбъект[ТаблицаИмя]; + СтрокаЦели = НайтиПоИдентификатору(ТаблицаРеквизит, ИдентификаторЦели); + Родитель = ПолучитьРодителя(ТаблицаИмя, СтрокаЦели); + ТаблицаЭлемент = Элементы[ТаблицаИмя]; + ВыделенныеСтроки = ТаблицаЭлемент.ВыделенныеСтроки; + ВыделенныеСтроки.Очистить(); + + ПеремещенныеСтроки = Новый Массив; // Для платформы. + + Для Каждого ПеремещаемаяСтрока Из ПеремещаемыеСтроки Цикл + ЭтоТекущая = (ПеремещаемаяСтрока = ТекущаяСтрока); + + // Перемещение. + Результат = ТаблицыПолейПереместить(ТаблицаИмя, ПеремещаемаяСтрока, СтрокаЦели, Неопределено, Ложь); + + // Бантики (начало). + Если ЭтоТекущая Тогда + ТекущаяСтрока = Результат.СтрокаДерева; + КонецЕсли; + ПеремещенныеСтроки.Добавить(Результат.СтрокаДерева); + КонецЦикла; + + // Бантики (завершение). + ТаблицаЭлемент.ТекущаяСтрока = ТекущаяСтрока.ПолучитьИдентификатор(); + Для Каждого СтрокаТаблицы Из ПеремещенныеСтроки Цикл + НоваяСтрокаИдентификатор = СтрокаТаблицы.ПолучитьИдентификатор(); + Если ВыделенныеСтроки.Найти(НоваяСтрокаИдентификатор) = Неопределено Тогда + ВыделенныеСтроки.Добавить(НоваяСтрокаИдентификатор); + КонецЕсли; + КонецЦикла; + + ТаблицаЭлемент.Развернуть(Родитель.ПолучитьИдентификатор(), Истина); + + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Процедура ПеретаскиваниеВыбранныхПолейВСортировки(ИсточникПеретаскивания, ИдентификаторЦели) + // Определение параметров источника. + ИсточникТаблицаИмя = ИсточникПеретаскивания.ТаблицаИмя; + ИсточникТаблица = ЭтотОбъект[ИсточникТаблицаИмя]; + ИсточникУзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ИсточникТаблицаИмя); + + // Определение параметров приемника. + ЦельТаблицаИмя = "Сортировка"; + ЦельТаблица = ЭтотОбъект[ЦельТаблицаИмя]; + ЦельУзелКД = ТаблицыПолейНайтиУзел(ЭтотОбъект, ЦельТаблицаИмя); + + ПередЧемВставить = НайтиПоИдентификатору(ЦельТаблица, ИдентификаторЦели); + ПередЧемВставитьКД = НайтиОбъектКД(ЦельУзелКД, ПередЧемВставить); + + ЦельРодитель = ПолучитьРодителя(ЦельТаблицаИмя, ПередЧемВставить); + ЦельРодительКД = НайтиОбъектКД(ЦельУзелКД, ЦельРодитель); + + КудаВставить = ПолучитьЭлементы(ЦельТаблица, ЦельРодитель); + КудаВставитьКД = ПолучитьЭлементыКД(ЦельУзелКД, ЦельРодительКД); + + Если ПередЧемВставитьКД = Неопределено Тогда + Индекс = Неопределено; + ИндексКД = Неопределено; + Иначе + Индекс = КудаВставить.Индекс(ПередЧемВставить) + 1; + ИндексКД = КудаВставитьКД.Индекс(ПередЧемВставитьКД) + 1; + КонецЕсли; + + ТипЭлемента = Тип("ЭлементПорядкаКомпоновкиДанных"); + + // Вывод результата. + ИсточникТекущаяСтрока = ИсточникПеретаскивания.ТекущаяСтрока; + ЦельТекущаяСтрока = Неопределено; + ПоляКоторыеНеУдалосьДобавить = Новый Массив; + + // Обход источника. + ПеремещенныеСтроки = Новый Массив; + Обработанные = Новый Массив; + + Коллекции = Новый Массив; + Количество = 0; + ТекущаяКоллекция = ИсточникПеретаскивания.СтрокиДерева; + Пока Истина Цикл + // Обход текущей коллекции. + Для Каждого ИсточникСтрокаТаблицы Из ТекущаяКоллекция Цикл + Если ИсточникСтрокаТаблицы.ТипНастройки = "АвтоВыбранноеПоле" Тогда + Продолжить; + КонецЕсли; + Если Обработанные.Найти(ИсточникСтрокаТаблицы) <> Неопределено Тогда + Продолжить; + КонецЕсли; + Обработанные.Добавить(ИсточникСтрокаТаблицы); + + // Регистрация новой коллекции к обработке. + Если ИсточникСтрокаТаблицы.ЭтоГруппа Тогда + Коллекции.Добавить(ИсточникСтрокаТаблицы.ПолучитьЭлементы()); + Количество = Количество + 1; + Продолжить; + КонецЕсли; + + // Анализ строки источника. + ЭтоТекущая = (ИсточникСтрокаТаблицы = ИсточникТекущаяСтрока); + + ИсточникОбъектКД = НайтиОбъектКД(ИсточникУзелКД, ИсточникСтрокаТаблицы); + + ДоступноеПолеКД = ЦельУзелКД.ДоступныеПоляПорядка.НайтиПоле(ИсточникОбъектКД.Поле); + Если ДоступноеПолеКД = Неопределено Тогда + ПоляКоторыеНеУдалосьДобавить.Добавить(ИсточникСтрокаТаблицы.Представление); + Продолжить; + КонецЕсли; + + // Добавление строки приемника. + Если Индекс = Неопределено Тогда + НоваяСтрока = КудаВставить.Добавить(); + Иначе + НоваяСтрока = КудаВставить.Вставить(Индекс); + Индекс = Индекс + 1; + КонецЕсли; + + Если ИндексКД = Неопределено Тогда + НовыйЭлементКД = КудаВставитьКД.Добавить(ТипЭлемента); + Иначе + НовыйЭлементКД = КудаВставитьКД.Вставить(ИндексКД, ТипЭлемента); + ИндексКД = ИндексКД + 1; + КонецЕсли; + + НовыйЭлементКД.Использование = Истина; + НовыйЭлементКД.Поле = ДоступноеПолеКД.Поле; + НовыйЭлементКД.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; + + НоваяСтрока.ИдентификаторКД = ЦельУзелКД.ПолучитьИдентификаторПоОбъекту(НовыйЭлементКД); + НоваяСтрока.Использование = НовыйЭлементКД.Использование; + НоваяСтрока.Представление = ДоступноеПолеКД.Заголовок; + НоваяСтрока.Направление = НовыйЭлементКД.ТипУпорядочивания; + НоваяСтрока.ИндексКартинки = -1; + + Если ЭтоТекущая Или ЦельТекущаяСтрока = Неопределено Тогда + ЦельТекущаяСтрока = НоваяСтрока; + КонецЕсли; + + ПеремещенныеСтроки.Добавить(НоваяСтрока); + + КонецЦикла; + + // Переход к следующей коллекции. + Если Количество = 0 Тогда + Прервать; + КонецЕсли; + Количество = Количество - 1; + ТекущаяКоллекция = Коллекции[0]; + Коллекции.Удалить(0); + КонецЦикла; + + // Бантики (завершение). + ЦельТаблицаЭлемент = Элементы[ЦельТаблицаИмя]; + ТекущийЭлемент = ЦельТаблицаЭлемент; + ЦельТаблицаЭлемент.ВыделенныеСтроки.Очистить(); + Если ЦельТекущаяСтрока <> Неопределено Тогда + ЦельТаблицаЭлемент.ТекущаяСтрока = ЦельТекущаяСтрока.ПолучитьИдентификатор(); + КонецЕсли; + Для Каждого НоваяСтрока Из ПеремещенныеСтроки Цикл + НоваяСтрокаИдентификатор = НоваяСтрока.ПолучитьИдентификатор(); + Если ЦельТаблицаЭлемент.ВыделенныеСтроки.Найти(НоваяСтрокаИдентификатор) = Неопределено Тогда + ЦельТаблицаЭлемент.ВыделенныеСтроки.Добавить(НоваяСтрокаИдентификатор); + КонецЕсли; + КонецЦикла; + // } + + ЦельТаблицаЭлемент.Развернуть(ЦельРодитель.ПолучитьИдентификатор(), Истина); + + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; + + ПодключитьОбработчикОжидания("Обновить", 3, Истина); +КонецПроцедуры + +&НаКлиенте +Процедура Обновить() + БыстрыеНастройкиЗаполнитьКлиент(Неопределено); +КонецПроцедуры + +&НаКлиенте +Процедура ПеретаскиваниеСортировокВВыбранныеПоля(ИсточникПеретаскивания, ИдентификаторЦели) + ТаблицыПолейУдалить(ИсточникПеретаскивания.ТаблицаИмя, ИсточникПеретаскивания.СтрокиДерева, Ложь); + УстановитьМодифицированность(); +КонецПроцедуры + +&НаКлиенте +Функция ЗарегистрироватьНачалоПеретаскивания(ТаблицаИмя, ИсточникПеретаскивания = Неопределено) + Сценарий = Новый Структура; + Сценарий.Вставить("Шаги", "ОпределитьВыделенныеСтроки"); + Сценарий.Вставить("Действие", "НачалоПеретаскивания"); + Сценарий.Вставить("ТаблицаИмя", ТаблицаИмя); + + ЗапуститьСценарий(Сценарий); + + Если ЗначениеЗаполнено(Сценарий.ПричинаОтказа) Тогда + Возврат Ложь; + КонецЕсли; + + ИсточникПеретаскивания = Новый Структура("ТаблицаИмя, СтрокиДерева, ТекущаяСтрока"); + ЗаполнитьЗначенияСвойств(ИсточникПеретаскивания, Сценарий); + ПеременныеКлиента.Вставить("ИсточникПеретаскивания", ИсточникПеретаскивания); + Возврат Истина; +КонецФункции + +&НаКлиенте +Процедура ПроверитьВозможностьПеретаскивания(ТаблицаИмя, ИдентификаторЦели, ПараметрыПеретаскивания) + ИсточникПеретаскивания = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПеременныеКлиента, "ИсточникПеретаскивания"); + Если ИсточникПеретаскивания = Неопределено Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + ИначеЕсли ИсточникПеретаскивания.ТаблицаИмя = ТаблицаИмя Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Перемещение; + Если ИдентификаторЦели <> Неопределено Тогда + СтрокаРодитель = ЭтотОбъект[ТаблицаИмя].НайтиПоИдентификатору(ИдентификаторЦели); + Пока СтрокаРодитель <> Неопределено И Не СтрокаРодитель.ЭтоРаздел Цикл + Если ИсточникПеретаскивания.СтрокиДерева.Найти(СтрокаРодитель) <> Неопределено Тогда + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; + Прервать; + КонецЕсли; + СтрокаРодитель = СтрокаРодитель.ПолучитьРодителя(); + КонецЦикла; + КонецЕсли; + Иначе + ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Выбор; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьМодифицированность() + ПользовательскиеНастройкиМодифицированы = Истина; + Если РасширенныйРежим = 1 Тогда + ВариантИзменен = Истина; + КонецЕсли; + + Если ОбщегоНазначенияКлиентСервер.РежимОтладки() Тогда + ПодключитьОбработчикОжидания("Обновить", 3, Истина); + КонецЕсли; +КонецПроцедуры + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаОтчета/Form.form b/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаОтчета/Form.form new file mode 100644 index 000000000..7bc14bac6 --- /dev/null +++ b/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаОтчета/Form.form @@ -0,0 +1,2545 @@ + + + + ОсновныеНастройки + 643 + + ОсновныеНастройкиПараметров + 645 + true + true + + true + + + <key>ru</key> + <value>Основные настройки параметров</value> + + + ru + Основные настройки параметров + + + ОсновныеНастройкиПараметровРасширеннаяПодсказка + 646 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Основные настройки</value> + + + ru + Основные настройки + + + ОсновныеНастройкиРасширеннаяПодсказка + 644 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + БыстрыеНастройки + 416 + true + true + + true + + + <key>ru</key> + <value>Быстрые настройки</value> + + + ru + Быстрые настройки + + + БыстрыеНастройкиРасширеннаяПодсказка + 417 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ОсновнаяКоманднаяПанель + 5 + + СформироватьОтчет + 101 + true + true + + true + + + СформироватьОтчетРасширеннаяПодсказка + 135 + Label + true + true + + Left + + + Form.Command.ОтчетСкомпоноватьРезультат + Auto + true + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ФормироватьСразу + 468 + true + true + + true + + + ФормироватьСразуРасширеннаяПодсказка + 469 + Label + true + true + + Left + + + Form.Command.ФормироватьСразу + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ГруппаНастройкиОтчета + 104 + + ВсеНастройки + 458 + true + true + + true + + + ВсеНастройкиРасширеннаяПодсказка + 459 + Label + true + true + + Left + + + Form.Command.ВсеНастройки + Normal + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ИзменитьУсловияОтборов + 630 + true + true + + true + + + ИзменитьУсловияОтборовРасширеннаяПодсказка + 631 + Label + true + true + + Left + + + Form.Command.ИзменитьУсловияОтборов + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ГруппаВариантыОтчета + 358 + + СохранитьВариант + 506 + + <key>ru</key> + <value>Сохранить вариант отчета...</value> + + true + true + + true + + + СохранитьВариантРасширеннаяПодсказка + 507 + Label + true + true + + Left + + + Form.StandardCommand.SaveVariant + Normal + PictureAndText + true + true + UserCmds + + CommonPicture.СохранитьВариантОтчета + + Auto + InCommandBarAndInAdditionalSubmenu + + + ВариантыОтчета + 360 + true + true + + true + + + <key>ru</key> + <value>Варианты отчета</value> + + + ru + Варианты отчета + + + ВариантыОтчетаРасширеннаяПодсказка + 361 + Label + true + true + + Left + + + + + + ДругиеОтчеты + 508 + true + true + + true + + + ДругиеОтчетыРасширеннаяПодсказка + 509 + Label + true + true + + Left + + + Form.Command.ДругиеОтчеты + Normal + PictureAndText + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Варианты отчета</value> + + + ru + Выбрать настройки + + + ГруппаВариантыОтчетаРасширеннаяПодсказка + 359 + Label + true + true + + Left + + + Popup + + + CommonPicture.ВыбратьВариантОтчета + + PictureAndText + Normal + + + + ГруппаПрочиеНастройкиОтчета + 502 + + КомандыВариантовОтчета + 450 + + ИзменитьВариант + 452 + true + true + + true + + + ИзменитьВариантРасширеннаяПодсказка + 453 + Label + true + true + + Left + + + Form.Command.ИзменитьВариантОтчета + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ВыбратьВариант + 639 + + <key>ru</key> + <value>Выбрать вариант отчета...</value> + + true + true + + true + + + ВыбратьВариантРасширеннаяПодсказка + 640 + Label + true + true + + Left + + + Form.StandardCommand.LoadVariant + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Команды вариантов отчета</value> + + + ru + Команды вариантов отчета + + true + + КомандыВариантовОтчетаРасширеннаяПодсказка + 451 + Label + true + true + + Left + + + + + + СброситьНастройки + 382 + true + true + + true + + + СброситьНастройкиРасширеннаяПодсказка + 383 + Label + true + true + + Left + + + Form.Command.НастройкиПоУмолчанию + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ГруппаПользовательскиеНастройки + 504 + + ВыбратьНастройки + 462 + true + true + + true + + + ВыбратьНастройкиРасширеннаяПодсказка + 463 + Label + true + true + + Left + + + Form.StandardCommand.LoadReportSettings + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СохранитьНастройки + 460 + true + true + + true + + + СохранитьНастройкиРасширеннаяПодсказка + 461 + Label + true + true + + Left + + + Form.StandardCommand.SaveReportSettings + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + ГруппаПользовательскиеНастройкиРасширеннаяПодсказка + 505 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Прочее</value> + + + ru + Группа прочие настройки отчета + + + ГруппаПрочиеНастройкиОтчетаРасширеннаяПодсказка + 503 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + + ЗагрузитьСхемуИзФайла + 647 + true + true + + true + + + ЗагрузитьСхемуИзФайлаРасширеннаяПодсказка + 648 + Label + true + true + + Left + + + Form.Command.ЗагрузитьСхемуИзФайла + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ВосстановитьСтандартнуюСхему + 649 + true + true + + true + + + ВосстановитьСтандартнуюСхемуРасширеннаяПодсказка + 650 + Label + true + true + + Left + + + Form.Command.ВосстановитьСтандартнуюСхему + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + РедактироватьСхему + 651 + true + true + + true + + + РедактироватьСхемуРасширеннаяПодсказка + 652 + Label + true + true + + Left + + + Form.Command.РедактироватьСхему + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + ГруппаНастройкиОтчетаРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + + + + ГруппаРаботаВТаблице + 518 + + Найти + 62 + true + true + + true + + + НайтиРасширеннаяПодсказка + 120 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.Find + Normal + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + РазвернутьВсеГруппы + 61 + true + true + + true + + + РазвернутьВсеГруппыРасширеннаяПодсказка + 122 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.ExpandAllGroups + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + СвернутьВсеГруппы + 60 + true + true + + true + + + СвернутьВсеГруппыРасширеннаяПодсказка + 121 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.CollapseAllGroups + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + АвтоСуммаКнопка + 637 + true + true + + true + + + АвтоСуммаКнопкаРасширеннаяПодсказка + 638 + Label + true + true + + Left + + + Form.Command.ВычислитьСумму + Normal + Picture + true + true + UserCmds + Auto + + + КомандыТабличногоДокумента + 526 + + ЗафиксироватьТаблицу + 528 + true + true + + true + + + ЗафиксироватьТаблицуРасширеннаяПодсказка + 529 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.FixTable + Normal + Auto + true + true + UserCmds + Auto + + + ОтображатьГруппировки + 530 + true + true + + true + + + ОтображатьГруппировкиРасширеннаяПодсказка + 531 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.ShowGroups + Normal + Auto + true + true + UserCmds + Auto + + + Редактирование + 532 + true + true + + true + + + РедактированиеРасширеннаяПодсказка + 533 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.Edit + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Таблица</value> + + + ru + Команды табличного документа + + + КомандыТабличногоДокументаРасширеннаяПодсказка + 527 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа работа в таблице</value> + + + ru + Группа работа в таблице + + + ГруппаРаботаВТаблицеРасширеннаяПодсказка + 519 + Label + true + true + + Left + + + + + + ГруппаПрограммныйИнтерфейс + 641 + true + true + + true + + + <key>ru</key> + <value>Группа кнопок</value> + + + ru + Динамически добавляемые кнопки + + + ГруппаПрограммныйИнтерфейсРасширеннаяПодсказка + 642 + Label + true + true + + Left + + + + + + ГруппаВывод + 534 + + Печать + 52 + true + true + + true + + + ПечатьРасширеннаяПодсказка + 138 + Label + true + true + + Left + + + Form.StandardCommand.Print + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ПредварительныйПросмотр + 90 + true + true + + true + + + ПредварительныйПросмотрРасширеннаяПодсказка + 139 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.Preview + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ПараметрыСтраницы + 94 + true + true + + true + + + ПараметрыСтраницыРасширеннаяПодсказка + 140 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.PageSetup + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + Сохранить + 51 + + <key>ru</key> + <value>Сохранить...</value> + + true + true + + true + + + СохранитьРасширеннаяПодсказка + 141 + Label + true + true + + Left + + + Form.StandardCommand.Save + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ГруппаОтправить + 63 + + ОтправитьПоЭлектроннойПочте + 97 + true + true + + true + + + ОтправитьПоЭлектроннойПочтеРасширеннаяПодсказка + 128 + Label + true + true + + Left + + + Form.Command.ОтправитьПоЭлектроннойПочте + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Отправить</value> + + + ru + Отправить отчет по электронной почте + + + ГруппаОтправитьРасширеннаяПодсказка + 127 + Label + true + true + + Left + + + Popup + + + CommonPicture.ЭлектронноеПисьмо + + Picture + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа вывод</value> + + + ru + Группа вывод + + + ГруппаВыводРасширеннаяПодсказка + 535 + Label + true + true + + Left + + + + + + НовоеОкно + 41 + true + true + + true + + + НовоеОкноРасширеннаяПодсказка + 159 + Label + true + true + + Left + + + Form.StandardCommand.NewWindow + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ИзменитьФорму + 42 + true + true + + true + + + ИзменитьФормуРасширеннаяПодсказка + 160 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + Справка + 43 + true + true + + true + + + СправкаРасширеннаяПодсказка + 161 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Основная командная панель</value> + + + ru + Основная командная панель + + true + + ОсновнаяКоманднаяПанельРасширеннаяПодсказка + 133 + Label + true + true + + Left + + + CommandBar + + Left + + + + НеОтсортированное + 516 + true + true + + true + + + <key>ru</key> + <value>Не отсортированное</value> + + + ru + Не отсортированное + + + НеОтсортированноеРасширеннаяПодсказка + 517 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ОтчетТабличныйДокумент + 7 + true + true + + true + + + ОтчетТабличныйДокумент + + None + + ОтчетТабличныйДокументExtendedTooltip + 163 + Label + true + true + + Left + + + + ОтчетТабличныйДокументКонтекстноеМеню + 8 + + ОтчетТабличныйДокументКонтекстноеМенюОтчетСкомпоноватьРезультат + 168 + true + true + + true + + + ОтчетТабличныйДокументКонтекстноеМенюОтчетСкомпоноватьРезультатРасширеннаяПодсказка + 169 + Label + true + true + + Left + + + Form.Command.ОтчетСкомпоноватьРезультат + Normal + Auto + true + true + UserCmds + Auto + + + ГруппаСвернутьРазвернутьКонтекст + 520 + + СвернутьВсеГруппы_Контекст + 522 + true + true + + true + + + СвернутьВсеГруппы_КонтекстРасширеннаяПодсказка + 523 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.CollapseAllGroups + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + РазвернутьВсеГруппы_Контекст + 524 + true + true + + true + + + РазвернутьВсеГруппы_КонтекстРасширеннаяПодсказка + 525 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.ExpandAllGroups + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Свернуть / Развернуть</value> + + + ru + Группа свернуть развернуть + + + ГруппаСвернутьРазвернутьКонтекстРасширеннаяПодсказка + 521 + Label + true + true + + Left + + + + + true + + SpreadsheetDocumentField + Enter + true + Left + true + + + AdditionalDetailProcessing + ОтчетТабличныйДокументОбработкаДополнительнойРасшифровки + + + DetailProcessing + ОтчетТабличныйДокументОбработкаРасшифровки + + 60 + true + 15 + true + true + true + Special + ScrollAlways + ScrollAlways + Always + Auto + true + true + true + + + None + false + + ФормаКоманднаяПанель + -1 + Left + + + ChoiceProcessing + ОбработкаВыбора + + + NotificationProcessing + ОбработкаОповещения + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + + OnClose + ПриЗакрытии + + + FillCheckProcessingAtServer + ОбработкаПроверкиЗаполненияНаСервере + + ReportSettings + DontBlock + 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 + + + + + РежимВариантаОтчета + + <key>ru</key> + <value>Режим варианта отчета</value> + + 8 + + Boolean + + + true + + + + + НастройкиОтчета + + <key>ru</key> + <value>Настройки отчета</value> + + 10 + + + 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 + + + + + + + + + ФормаПараметры + + <key>ru</key> + <value>Форма параметры</value> + + 6 + + + true + + + + + ОтчетСформирован + + <key>ru</key> + <value>Отчет сформирован</value> + + 14 + + Boolean + + + true + + + true + + + + ПравоВывода + + <key>ru</key> + <value>Право вывода</value> + + 5 + + Boolean + + + true + + + + + ФоновоеЗаданиеАдресХранилища + + <key>ru</key> + <value>Фоновое задание адрес хранилища</value> + + 12 + + String + + + + true + + + true + + + + ФоновоеЗаданиеИдентификатор + + <key>ru</key> + <value>Фоновое задание идентификатор</value> + + 16 + + + true + + + true + + + + РежимРасшифровкиПредставлениеВладельца + + <key>ru</key> + <value>Режим расшифровки представление владельца</value> + + 24 + + String + + + + true + + + true + + + + БыстрыйПоискПользовательскихНастроек + + <key>ru</key> + <value>Быстрый поиск пользовательских настроек</value> + + 15 + + + true + + + true + + + + БыстрыйПоискИменОбъектовМетаданных + + <key>ru</key> + <value>Быстрый поиск имен объектов метаданных</value> + + 28 + + + true + + + true + + + + БыстрыйПоискОтключаемыхСвязей + + <key>ru</key> + <value>Быстрый поиск отключаемых связей</value> + + 9 + + + true + + + true + + + + ЕстьБыстрыеНастройки + + <key>ru</key> + <value>Есть быстрые настройки</value> + + 17 + + Boolean + + + true + + + true + + + + ВариантыПанелиКлючТекущегоВарианта + + <key>ru</key> + <value>Варианты панели ключ текущего варианта</value> + + 22 + + String + + + + true + + + true + + + + ВариантыПанелиНомерЭлемента + + <key>ru</key> + <value>Варианты панели номер элемента</value> + + 27 + + Number + + 10 + + + + true + + + true + + + + ЕстьДругиеОтчеты + + <key>ru</key> + <value>Есть другие отчеты</value> + + 29 + + Boolean + + + true + + + true + + + + ЕстьОбычныеНастройки + + <key>ru</key> + <value>Есть обычные настройки</value> + + 31 + + Boolean + + + true + + + true + + + + ФормаОткрыта + + <key>ru</key> + <value>Форма открыта</value> + + 11 + + Boolean + + + true + + + true + + + + НадоСформировать + + <key>ru</key> + <value>Надо сформировать</value> + + 32 + + Boolean + + + true + + + true + + + + ПервоеЧтениеПользовательскихНастроек + + <key>ru</key> + <value>Первое чтение пользовательских настроек</value> + + 34 + + Boolean + + + true + + + true + + + + ДобавленныеВарианты + + <key>ru</key> + <value>Добавленные варианты</value> + + 26 + + ValueTable + + + true + + + true + + + Ссылка + + <key>ru</key> + <value>Ссылка</value> + + 1 + + CatalogRef.ВариантыОтчетов + + + true + + + true + + + + КлючВарианта + + <key>ru</key> + <value>Ключ варианта</value> + + 5 + + String + + + + true + + + true + + + + ИмяКоманды + + <key>ru</key> + <value>Имя команды</value> + + 2 + + String + + + + true + + + true + + + + + ЭтоФормаОтчета + + <key>ru</key> + <value>Это форма отчета</value> + + 13 + + String + + + + true + + + true + + + + ОтключаемыеСвязи + + <key>ru</key> + <value>Отключаемые связи</value> + + 18 + + ValueTable + + + true + + + true + + + ТипСвязи + + <key>ru</key> + <value>Тип связи</value> + + 1 + + String + + + + true + + + true + + + + ВедущийИдентификаторВФорме + + <key>ru</key> + <value>Ведущий идентификатор в форме</value> + + 2 + + + true + + + true + + + + ПодчиненныйИдентификаторВФорме + + <key>ru</key> + <value>Подчиненный идентификатор в форме</value> + + 3 + + + true + + + true + + + + ВедущийТип + + <key>ru</key> + <value>Ведущий тип</value> + + 4 + + TypeDescription + + + true + + + true + + + + ПодчиненныйТип + + <key>ru</key> + <value>Подчиненный тип</value> + + 5 + + TypeDescription + + + true + + + true + + + + ПодчиненныйИмяПараметра + + <key>ru</key> + <value>Подчиненный имя параметра</value> + + 6 + + String + + + + true + + + true + + + + ПодчиненныйДействие + + <key>ru</key> + <value>Подчиненный действие</value> + + 7 + + + true + + + true + + + + + БыстрыйПоискНастроекВарианта + + <key>ru</key> + <value>Быстрый поиск настроек варианта</value> + + 35 + + + true + + + true + + + + РезультатЗаполненияНастроек + + <key>ru</key> + <value>Результат заполнения настроек</value> + + 36 + + + true + + + true + + + + ВсеНастройки + + <key>ru</key> + <value>Настройки...</value> + + 1 + + ru + Все настройки... + + + true + + + StdPicture.ReportSettings + + + + ВсеНастройки + + + TextPicture + DontUse + Auto + + + ИзменитьВариантОтчета + + <key>ru</key> + <value>Изменить вариант отчета...</value> + + 3 + + ru + Изменить вариант отчета + + + true + + + + ИзменитьВариантОтчета + + + DontUse + Auto + + + НастройкиПоУмолчанию + + <key>ru</key> + <value>Стандартные настройки</value> + + 7 + + ru + Настройки по умолчанию + + + true + + + + НастройкиПоУмолчанию + + + DontUse + Auto + + + ОтправитьПоЭлектроннойПочте + + <key>ru</key> + <value>Отправить сейчас...</value> + + 4 + + ru + Создать новое письмо и прикрепить отчет как вложение + + + true + + + CommonPicture.ЭлектронноеПисьмо + + + + ОтправитьПоЭлектроннойПочте + + + DontUse + Auto + + + ОтчетСкомпоноватьРезультат + + <key>ru</key> + <value>Сформировать</value> + + 5 + + ru + Сформировать отчет + + + true + + F5 + + StdPicture.GenerateReport + + + + ОтчетСкомпоноватьРезультат + + + Text + DontUse + Auto + + + ВычислитьСумму + + <key>ru</key> + <value>Подсчитать</value> + + 6 + + ru + Вычислить сумму чисел выделенных ячеек + + + true + + + CommonPicture.Сумма + + + + ВычислитьСумму + + + Picture + DontUse + Auto + + + ФормироватьСразу + + <key>ru</key> + <value>Формировать сразу</value> + + 2 + + ru + Формировать сразу + + + true + + + + ФормироватьСразу + + + DontUse + Auto + + + ДругиеОтчеты + + <key>ru</key> + <value>Другие отчеты...</value> + + 8 + + ru + Другие отчеты + + + true + + + CommonPicture.Отчеты + + + + ДругиеОтчеты + + + DontUse + Auto + + + ИзменитьВидСравнения + + <key>ru</key> + <value>Изменить вид сравнения</value> + + 9 + + ru + Изменить вид сравнения + + + true + + DontUse + Auto + + + ВыбратьПериод + + <key>ru</key> + <value>Выбрать период</value> + + 10 + + ru + Выбрать период + + + true + + + StdPicture.InputFieldSelect + + DontUse + Auto + + + ИзменитьУсловияОтборов + + <key>ru</key> + <value>Изменить условия отборов...</value> + + 11 + + ru + Изменить условия отборов + + + true + + + CommonPicture.ВидСравнения + + + + ИзменитьУсловияОтборов + + + DontUse + Auto + + + ЗагрузитьСхемуИзФайла + + <key>ru</key> + <value>Загрузить схему из файла</value> + + 12 + + ru + Загрузить схему из файла + + + true + + + + ЗагрузитьСхемуИзФайла + + + DontUse + Auto + + + ВосстановитьСтандартнуюСхему + + <key>ru</key> + <value>Восстановить стандартную схему</value> + + 13 + + ru + Восстановить стандартную схему + + + true + + + + ВосстановитьСтандартнуюСхему + + + DontUse + Auto + + + РедактироватьСхему + + <key>ru</key> + <value>Редактировать схему</value> + + 14 + + ru + Редактировать схему + + + true + + + + РедактироватьСхему + + + DontUse + Auto + + + + + + + + BeforeLoadVariantAtServer + ПередЗагрузкойВариантаНаСервере + + + BeforeLoadUserSettingsAtServer + ПередЗагрузкойПользовательскихНастроекНаСервере + + + OnSaveVariantAtServer + ПриСохраненииВариантаНаСервере + + + OnLoadUserSettingsAtServer + ПриЗагрузкеПользовательскихНастроекНаСервере + + + OnLoadVariantAtServer + ПриЗагрузкеВариантаНаСервере + + + OnSaveUserSettingsAtServer + ПриСохраненииПользовательскихНастроекНаСервере + + + OnUpdateUserSettingSetAtServer + ПриОбновленииСоставаПользовательскихНастроекНаСервере + + ОтчетТабличныйДокумент + ОтчетДанныеРасшифровки + ОтчетНаименованиеТекущегоВарианта + +
                                diff --git a/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаОтчета/Help/ru.html b/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаОтчета/Help/ru.html new file mode 100644 index 000000000..0720454fd --- /dev/null +++ b/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаОтчета/Help/ru.html @@ -0,0 +1,54 @@ + +

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

                                +

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

                                +

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

                                +

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

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

                                Настройки

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

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

                                +

                                +

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

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

                                +

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

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

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

                                +

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

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

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

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

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

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

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

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

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

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

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

                                +
                                • Для поиска в отчете воспользуйтесь командой Найти. +
                                • С помощью кнопок  Свернуть все группы или  Развернуть все группы можно скрыть или показать группировку отчета. +
                                • Для сохранения результата отчета в файл нажмите , укажите наименование файла и путь для сохранения. +
                                • Нажмите , для того чтобы посчитать сумму чисел в выделенных ячейках.
                                \ No newline at end of file diff --git a/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаОтчета/Module.bsl new file mode 100644 index 000000000..40af46e30 --- /dev/null +++ b/SSL/src/Reports/УниверсальныйОтчет/Forms/ФормаОтчета/Module.bsl @@ -0,0 +1,2507 @@ +#Область ОписаниеПеременных + +&НаКлиенте +Перем ПеременныеКлиента; + +#КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +#Область ПрограммныйИнтерфейс + +// Дает возможность выполнить контекстный вызов сервера с клиента. +// Например, может потребоваться из клиентского события ОтчетыКлиентПереопределяемый.ОбработчикКоманды(). +// +// Параметры: +// КлючОперации - Строка - Идентификатор операции, которую необходимо выполнить на сервере. +// ПараметрыОперации - Структура - Параметры выполнения операции. +// +// Возвращаемое значение: +// Структура - Результат работы сервера. +// +&НаКлиенте +Функция ВыполнитьКонтекстныйВызовСервера(КлючОперации, ПараметрыОперации) Экспорт + // Исключение из стандартов разработки. + + Возврат КонтекстныйВызовСервера(КлючОперации, ПараметрыОперации); + +КонецФункции + +#КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// ФОРМА + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ВариантыПанелиКлючТекущегоВарианта = " - "; + + // Параметры формы. + РежимРасшифровки = (Параметры.Свойство("Расшифровка") И Параметры.Расшифровка <> Неопределено); + РежимВариантаОтчета = (ТипЗнч(КлючТекущегоВарианта) = Тип("Строка") И Не ПустаяСтрока(КлючТекущегоВарианта)); + ПравоВывода = ПравоДоступа("Вывод", Метаданные); + + ФормаПараметры = Новый Структура( + "КлючНазначенияИспользования, КлючПользовательскихНастроек, + |Расшифровка, СформироватьПриОткрытии, ТолькоПросмотр, + |ФиксированныеНастройки, Раздел, Подсистема, ПодсистемаПредставление"); + ЗаполнитьЗначенияСвойств(ФормаПараметры, Параметры); + ФормаПараметры.Вставить("Отбор", Новый Структура); + Если ТипЗнч(Параметры.Отбор) = Тип("Структура") Тогда + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ФормаПараметры.Отбор, Параметры.Отбор, Истина); + Параметры.Отбор.Очистить(); + КонецЕсли; + + Если ФормаПараметры.Подсистема = Неопределено Тогда + Элементы.ДругиеОтчеты.Видимость = Ложь; + КонецЕсли; + + // Локальные переменные. + ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); + ОтчетМетаданные = ОтчетОбъект.Метаданные(); + НастройкиОтчета = ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(); + АдресСхемы = ПоместитьВоВременноеХранилище(ОтчетОбъект.СхемаКомпоновкиДанных, УникальныйИдентификатор); + + НастройкиОтчета.Вставить("АдресСхемы", АдресСхемы); + НастройкиОтчета.Вставить("СхемаМодифицирована", Ложь); + НастройкиОтчета.Вставить("КлючСхемы", ""); + НастройкиОтчета.Вставить("ПолноеИмя", ОтчетМетаданные.ПолноеИмя()); + НастройкиОтчета.Вставить("Наименование", СокрЛП(ОтчетМетаданные.Представление())); + + Информация = ВариантыОтчетов.СформироватьИнформациюОбОтчетеПоПолномуИмени(НастройкиОтчета.ПолноеИмя); + НастройкиОтчета.Вставить("ОтчетСсылка", Информация.Отчет); + НастройкиОтчета.Вставить("Внешний", ТипЗнч(НастройкиОтчета.ОтчетСсылка) = Тип("Строка")); + НастройкиОтчета.Вставить("Безопасный", БезопасныйРежим()); + ОбновитьИнформациюОВариантеОтчета(); + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(НастройкиОтчета, ВариантыОтчетов.ПараметрыКлиента()); + + Если ВариантыОтчетовПовтИсп.Параметры().ОтчетыСНастройками.Найти(НастройкиОтчета.ОтчетСсылка) <> Неопределено Тогда + ОтчетОбъект.ОпределитьНастройкиФормы(ЭтотОбъект, КлючТекущегоВарианта, НастройкиОтчета); + СоответствиеПериодичностиПараметров = Новый Соответствие; + Для Каждого КлючИЗначение Из НастройкиОтчета.СоответствиеПериодичностиПараметров Цикл + ПолеКД = КлючИЗначение.Ключ; + Если ТипЗнч(ПолеКД) = Тип("ПараметрКомпоновкиДанных") Тогда + ПолеКД = Новый ПолеКомпоновкиДанных("ПараметрыДанных." + Строка(ПолеКД)); + КонецЕсли; + СоответствиеПериодичностиПараметров.Вставить(ПолеКД, КлючИЗначение.Значение); + КонецЦикла; + НастройкиОтчета.Вставить("СоответствиеПериодичностиПараметров", СоответствиеПериодичностиПараметров); + КонецЕсли; + + НастройкиОтчета.Вставить("ПрочитатьФлажокФормироватьСразуИзПользовательскихНастроек", Истина); + Если Параметры.Свойство("СформироватьПриОткрытии") И Параметры.СформироватьПриОткрытии = Истина Тогда + Параметры.СформироватьПриОткрытии = Ложь; + НастройкиОтчета.ФормироватьСразу = Истина; + НастройкиОтчета.ПрочитатьФлажокФормироватьСразуИзПользовательскихНастроек = Ложь; + КонецЕсли; + + НастройкиОтчета.Вставить("ПредопределенныеВарианты", Новый СписокЗначений); + Если НастройкиОтчета.Внешний И ОтчетОбъект.СхемаКомпоновкиДанных <> Неопределено Тогда + Для Каждого Вариант Из ОтчетОбъект.СхемаКомпоновкиДанных.ВариантыНастроек Цикл + НастройкиОтчета.ПредопределенныеВарианты.Добавить(Вариант.Имя, Вариант.Представление); + КонецЦикла; + КонецЕсли; + + // Параметры по умолчанию + Если НастройкиОтчета.Свойство("ВыводитьСуммуВыделенныхЯчеек") И Не НастройкиОтчета.ВыводитьСуммуВыделенныхЯчеек Тогда + Элементы.АвтоСуммаКнопка.Видимость = Ложь; + Элементы.ОтчетТабличныйДокумент.УстановитьДействие("ПриАктивизацииОбласти", ""); + КонецЕсли; + + // Скрытие команд вариантов + Если Не НастройкиОтчета.Свойство("РазрешеноМенятьВарианты") Или Параметры.Свойство("ВидимостьКомандВариантовОтчетов") Тогда + НастройкиОтчета.Вставить("РазрешеноМенятьВарианты", ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ВидимостьКомандВариантовОтчетов")); + КонецЕсли; + Если ТипЗнч(НастройкиОтчета.РазрешеноМенятьВарианты) <> Тип("Булево") Тогда + НастройкиОтчета.РазрешеноМенятьВарианты = ВариантыОтчетовПовтИсп.ПравоДобавления(); + Если НастройкиОтчета.РазрешеноМенятьВарианты // Команды не отключены параметрами открытия формы. + И ЗначениеЗаполнено(НастройкиОтчета.ВариантСсылка) // Вариант зарегистрирован. + И ЗначениеЗаполнено(НастройкиОтчета.ПредопределенныйСсылка) Тогда // Это предопределенный. + Отключенные = ВариантыОтчетовПовтИсп.ОтключенныеВариантыПрограммы(); + Если Отключенные.Найти(НастройкиОтчета.ПредопределенныйСсылка) <> Неопределено Тогда // Вариант отключен. + Текст = НСтр("ru = 'Контекстный вариант ""%1"" отчета ""%2"" открыт без контекста.'"); + ВариантыОтчетов.ПредупреждениеПоВарианту(НастройкиОтчета.ВариантСсылка, Текст, НастройкиОтчета.ВариантСсылка, НастройкиОтчета.ОтчетСсылка); + НастройкиОтчета.РазрешеноМенятьВарианты = Ложь; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + // Регистрация команд и реквизитов формы, которые не удаляются при перезаполнении быстрых настроек. + НаборРеквизитов = ПолучитьРеквизиты(); + Для Каждого Реквизит Из НаборРеквизитов Цикл + ПолноеИмяРеквизита = Реквизит.Имя + ?(ПустаяСтрока(Реквизит.Путь), "", "." + Реквизит.Путь); + ПостоянныеРеквизиты.Добавить(ПолноеИмяРеквизита); + КонецЦикла; + Для Каждого Команда Из Команды Цикл + ПостоянныеКоманды.Добавить(Команда.Имя); + КонецЦикла; + + // Приведение зависимых элементов формы к кондиции. + ВидимостьДоступностьКорректность(""); + + // Тесная интеграция с почтой и рассылкой. + ДоступнаОтправкаПисем = Ложь; + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда + МодульРаботаСПочтовымиСообщениями = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениями"); + ДоступнаОтправкаПисем = МодульРаботаСПочтовымиСообщениями.ДоступнаОтправкаПисем(); + КонецЕсли; + Если ДоступнаОтправкаПисем Тогда + Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") Тогда + МодульРассылкаОтчетов = ОбщегоНазначения.ОбщийМодуль("РассылкаОтчетов"); + МодульРассылкаОтчетов.ФормаОтчетаДобавитьКоманды(ЭтотОбъект, Отказ, СтандартнаяОбработка); + Иначе // Если в подменю одна команда, то выпадающий список не отображается. + Элементы.ОтправитьПоЭлектроннойПочте.Заголовок = Элементы.ГруппаОтправить.Заголовок + "..."; + Элементы.Переместить(Элементы.ОтправитьПоЭлектроннойПочте, Элементы.ГруппаОтправить.Родитель, Элементы.ГруппаОтправить); + КонецЕсли; + Иначе + Элементы.ГруппаОтправить.Видимость = Ложь; + КонецЕсли; + + // События. + ОтчетыПереопределяемый.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка); + Если НастройкиОтчета.События.ПриСозданииНаСервере Тогда + ОтчетОбъект.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + ПеременныеКлиента = Новый Структура; + ПеременныеКлиента.Вставить("УспешноСформирован", Ложь); + ПеременныеКлиента.Вставить("ВыполнятьЗамеры", Ложь); + // В безопасном режиме доп. отчеты формируются непосредственно, + // т.к. они не могут подключать себя и использовать собственные методы в фоновых заданиях. + ПеременныеКлиента.Вставить("Непосредственно", НастройкиОтчета.Внешний Или НастройкиОтчета.Безопасный); + ПеременныеКлиента.Вставить("ФормированиеПриОткрытии", Ложь); + ПеременныеКлиента.Вставить("ИнтервалОжидания", ?(ПолучитьСкоростьКлиентскогоСоединения() = СкоростьКлиентскогоСоединения.Низкая, 1, 0.2)); + Если Не Отказ Тогда + ФормаОткрыта = Истина; + КонецЕсли; + Если НастройкиОтчета.ФормироватьСразу Тогда + ПеременныеКлиента.ФормированиеПриОткрытии = Истина; + ПодключитьОбработчикОжидания("СФормировать", 0.1, Истина); + КонецЕсли; + ПоказатьРезультатЗаполненияНастроек(Неопределено); +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаВыбора(Результат, ПодчиненнаяФорма) + РезультатОбработан = Ложь; + + // Приемка результата из стандартных форм. + Если ТипЗнч(ПодчиненнаяФорма) = Тип("УправляемаяФорма") Тогда + ИмяПодчиненнойФормы = ПодчиненнаяФорма.ИмяФормы; + Если ИмяПодчиненнойФормы = "ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.НастройкиОтчета" + Или ПодчиненнаяФорма.ОписаниеОповещенияОЗакрытии <> Неопределено Тогда + РезультатОбработан = Истина; // См. ВсеНастройкиЗавершение. + ИначеЕсли ТипЗнч(Результат) = Тип("Структура") Тогда + ПозицияТочки = СтрДлина(ИмяПодчиненнойФормы); + Пока КодСимвола(ИмяПодчиненнойФормы, ПозицияТочки) <> 46 Цикл // Не точка. + ПозицияТочки = ПозицияТочки - 1; + КонецЦикла; + СуффиксФормыИсточника = ВРег(Сред(ИмяПодчиненнойФормы, ПозицияТочки + 1)); + Если СуффиксФормыИсточника = ВРег("ФормаНастроекОтчета") + Или СуффиксФормыИсточника = ВРег("ФормаНастроек") + Или СуффиксФормыИсточника = ВРег("ФормаВариантаОтчета") + Или СуффиксФормыИсточника = ВРег("ФормаВарианта") Тогда + БыстрыеНастройкиЗаполнитьКлиент(Результат); + РезультатОбработан = Истина; + КонецЕсли; + КонецЕсли; + ИначеЕсли ТипЗнч(ПодчиненнаяФорма) = Тип("КонструкторСхемыКомпоновкиДанных") Тогда + #Если ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда + Если Тип(Результат) = Тип("СхемаКомпоновкиДанных") Тогда + НастройкиОтчета.АдресСхемы = ПоместитьВоВременноеХранилище(Результат, УникальныйИдентификатор); + АдресСхемы = НастройкиОтчета.АдресСхемы; + + Путь = ПолучитьИмяВременногоФайла(); + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.ОткрытьФайл(Путь, "UTF-8"); + СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Результат, "dataCompositionSchema", "http://v8.1c.ru/8.1/data-composition-system/schema"); + ЗаписьXML.Закрыть(); + + ДвоичныеДанные = Новый ДвоичныеДанные(Путь); + УдалитьФайлы(Путь); + + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("СхемаКомпоновкиДанных", ДвоичныеДанные); + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ОтчетИнициализирован", Ложь); + + ПараметрыЗаполнения = Новый Структура; + ПараметрыЗаполнения.Вставить("ИмяСобытия", "НастройкиПоУмолчанию"); + ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); + + БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения); + КонецЕсли; + #КонецЕсли + КонецЕсли; + + // Механизмы расширения. + Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") Тогда + МодульРассылкаОтчетовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РассылкаОтчетовКлиент"); + МодульРассылкаОтчетовКлиент.ФормаОтчетаОбработкаВыбора(ЭтотОбъект, Результат, ПодчиненнаяФорма, РезультатОбработан); + КонецЕсли; + ОтчетыКлиентПереопределяемый.ОбработкаВыбора(ЭтотОбъект, Результат, ПодчиненнаяФорма, РезультатОбработан); +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + ОповещениеОбработано = Ложь; + Если ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта() Тогда + ОповещениеОбработано = Истина; + ВариантыПанелиКлючТекущегоВарианта = " - "; + ПодключитьОбработчикОжидания("ВидимостьДоступностьЕслиТребуется", 0.1, Истина); + КонецЕсли; + + ОтчетыКлиентПереопределяемый.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник, ОповещениеОбработано); +КонецПроцедуры + +&НаСервере +Процедура ПередЗагрузкойВариантаНаСервере(НовыеНастройкиКД) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Если Не НовыеНастройкиКД.ДополнительныеСвойства.Свойство("ОтчетИнициализирован") Тогда + НастройкиПоУмолчанию = Новый Структура; + ТипОбъектаМетаданных = Отчеты.УниверсальныйОтчет.ТипОбъектаМетаданныхПоУмолчанию(); + НастройкиПоУмолчанию.Вставить("ТипОбъектаМетаданных", ТипОбъектаМетаданных); + НастройкиПоУмолчанию.Вставить("ПолноеИмяОбъектаМетаданных", Отчеты.УниверсальныйОтчет.ПолноеИмяОбъектаМетаданныхПоУмолчанию(Отчет.КомпоновщикНастроек, ТипОбъектаМетаданных)); + НастройкиПоУмолчанию.Вставить("ИмяТаблицы", Отчеты.УниверсальныйОтчет.ИмяТаблицыПоУмолчанию(Отчет.КомпоновщикНастроек, ТипОбъектаМетаданных, НастройкиПоУмолчанию.ПолноеИмяОбъектаМетаданных)); + Отчеты.УниверсальныйОтчет.ИнициализироватьОтчет(Отчет.КомпоновщикНастроек, Ложь, УникальныйИдентификатор,,НастройкиПоУмолчанию); + ИначеЕсли Не НовыеНастройкиКД.ДополнительныеСвойства.Свойство("СхемаКомпоновкиДанных") + И (Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ТипОбъектаМетаданных") = Неопределено + Или Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ПолноеИмяОбъектаМетаданных") = Неопределено + Или Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ИмяТаблицы") = Неопределено) Тогда + Отчеты.УниверсальныйОтчет.ИнициализироватьОтчет(Отчет.КомпоновщикНастроек, Ложь, УникальныйИдентификатор, НовыеНастройкиКД); + ИначеЕсли НовыеНастройкиКД.ДополнительныеСвойства.Свойство("СхемаКомпоновкиДанных") Тогда + Отчеты.УниверсальныйОтчет.ИнициализироватьОтчет(Отчет.КомпоновщикНастроек, Ложь, УникальныйИдентификатор, НовыеНастройкиКД); + КонецЕсли; + + // Ничего не делать если отчет не на СКД и никаких настроек не загружено. + РежимВариантаОтчета = (ТипЗнч(КлючТекущегоВарианта) = Тип("Строка") И Не ПустаяСтрока(КлючТекущегоВарианта)); + Если Не РежимВариантаОтчета И НовыеНастройкиКД = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ТипЗнч(ФормаПараметры.Отбор) = Тип("Структура") Тогда + ОтчетыСервер.УстановитьФиксированныеОтборы(ФормаПараметры.Отбор, НовыеНастройкиКД, НастройкиОтчета); + КонецЕсли; + + // Вызов переопределяемого модуля. + ОтчетыПереопределяемый.ПередЗагрузкойВариантаНаСервере(ЭтотОбъект, НовыеНастройкиКД); + Если НастройкиОтчета.События.ПередЗагрузкойВариантаНаСервере Тогда + ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); + ОтчетОбъект.ПередЗагрузкойВариантаНаСервере(ЭтотОбъект, НовыеНастройкиКД); + КонецЕсли; + + // Подготовка к вызову события переинициализации. + Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда + Попытка + НовыеНастройкиXML = ОбщегоНазначения.ЗначениеВСтрокуXML(НовыеНастройкиКД); + Исключение + НовыеНастройкиXML = Неопределено; + КонецПопытки; + НастройкиОтчета.Вставить("НовыеНастройкиXML", НовыеНастройкиXML); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ПриЗагрузкеВариантаНаСервере(НовыеНастройкиКД) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + // Ничего не делать если отчет не на СКД и никаких настроек не загружено. + РежимВариантаОтчета = (ТипЗнч(КлючТекущегоВарианта) = Тип("Строка") И Не ПустаяСтрока(КлючТекущегоВарианта)); + Если Не РежимВариантаОтчета И НовыеНастройкиКД = Неопределено Тогда + Возврат; + КонецЕсли; + + // Обновление ссылки варианта отчета. + Если ВариантыПанелиКлючТекущегоВарианта <> КлючТекущегоВарианта Тогда + ОбновитьИнформациюОВариантеОтчета(); + КонецЕсли; + + // Загрузка фиксированных настроек для режима расшифровки. + Если РежимРасшифровки Тогда + ОтчетНаименованиеТекущегоВарианта = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НовыеНастройкиКД.ДополнительныеСвойства, "ВариантНаименование"); + Если Параметры <> Неопределено И Параметры.Свойство("Расшифровка") Тогда + Отчет.КомпоновщикНастроек.ЗагрузитьФиксированныеНастройки(Параметры.Расшифровка.ПрименяемыеНастройки); + Отчет.КомпоновщикНастроек.ФиксированныеНастройки.ДополнительныеСвойства.Вставить("РежимРасшифровки", Истина); + КонецЕсли; + Иначе + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ВариантНаименование", ОтчетНаименованиеТекущегоВарианта); + КонецЕсли; + + // Заполнение панели быстрых настроек. + РежимВариантаОтчета = Истина; + + // Вызов переопределяемого модуля. + Если НастройкиОтчета.События.ПриЗагрузкеВариантаНаСервере Тогда + ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); + ОтчетОбъект.ПриЗагрузкеВариантаНаСервере(ЭтотОбъект, НовыеНастройкиКД); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ПередЗагрузкойПользовательскихНастроекНаСервере(НовыеПользовательскиеНастройкиКД) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + // Подготовка к вызову события переинициализации. + Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда + Попытка + НовыеПользовательскиеНастройкиXML = ОбщегоНазначения.ЗначениеВСтрокуXML(НовыеПользовательскиеНастройкиКД); + Исключение + НовыеПользовательскиеНастройкиXML = Неопределено; + КонецПопытки; + НастройкиОтчета.Вставить("НовыеПользовательскиеНастройкиXML", НовыеПользовательскиеНастройкиXML); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ПриЗагрузкеПользовательскихНастроекНаСервере(НовыеПользовательскиеНастройкиКД) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + Если Не РежимВариантаОтчета Тогда + Возврат; + КонецЕсли; + + // Вызов переопределяемого модуля. + Если НастройкиОтчета.События.ПриЗагрузкеПользовательскихНастроекНаСервере Тогда + ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); + ОтчетОбъект.ПриЗагрузкеПользовательскихНастроекНаСервере(ЭтотОбъект, НовыеПользовательскиеНастройкиКД); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ПриОбновленииСоставаПользовательскихНастроекНаСервере(СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + Если Не РежимВариантаОтчета Тогда + Возврат; + КонецЕсли; + СтандартнаяОбработка = Ложь; + + ПараметрыЗаполнения = Новый Структура; + ПараметрыЗаполнения.Вставить("ИмяСобытия", "ПриОбновленииСоставаПользовательскихНастроекНаСервере"); + ПараметрыЗаполнения.Вставить("СтандартнаяОбработкаСобытия", СтандартнаяОбработка); + РезультатЗаполненияНастроек = БыстрыеНастройкиЗаполнить(ПараметрыЗаполнения); + Если ПараметрыЗаполнения.СтандартнаяОбработкаСобытия <> СтандартнаяОбработка Тогда + СтандартнаяОбработка = ПараметрыЗаполнения.СтандартнаяОбработкаСобытия; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + Если Не РежимВариантаОтчета Тогда + Возврат; + КонецЕсли; + ПользовательскиеНастройкиКД = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; + Для Каждого ПользовательскаяНастройкаКД Из ПользовательскиеНастройкиКД.Элементы Цикл + Тип = ОтчетыКлиентСервер.ТипНастройкиСтрокой(ТипЗнч(ПользовательскаяНастройкаКД)); + + Если Тип = "ЗначениеПараметраНастроек" + И ТипЗнч(ПользовательскаяНастройкаКД.Значение) = Тип("СтандартныйПериод") + И ПользовательскаяНастройкаКД.Использование Тогда + + ИдентификаторЭлемента = ОтчетыКлиентСервер.ПривестиИдентификаторКИмени(ПользовательскаяНастройкаКД.ИдентификаторПользовательскойНастройки); + + ПериодНачало = Элементы.Найти(Тип + "_Начало_" + ИдентификаторЭлемента); + ПериодОкончание = Элементы.Найти(Тип + "_Окончание_" + ИдентификаторЭлемента); + Если ПериодНачало = Неопределено Или ПериодОкончание = Неопределено Тогда + Продолжить; + КонецЕсли; + + Значение = ПользовательскаяНастройкаКД.Значение; + Если ПериодНачало.АвтоОтметкаНезаполненного + И Не ЗначениеЗаполнено(Значение.ДатаНачала) + И Не ЗначениеЗаполнено(Значение.ДатаОкончания) Тогда + ТекстОшибки = НСтр("ru = 'Не указан период'"); + ПутьКДанным = ПериодНачало.ПутьКДанным; + ИначеЕсли Значение.ДатаНачала > Значение.ДатаОкончания Тогда + ТекстОшибки = НСтр("ru = 'Конец периода должен быть больше начала'"); + ПутьКДанным = ПериодОкончание.ПутьКДанным; + Иначе + Продолжить; + КонецЕсли; + + Отказ = Истина; + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , ПутьКДанным); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ПриСохраненииВариантаНаСервере(НастройкиКД) + Если Не РежимВариантаОтчета Тогда + Возврат; + КонецЕсли; + НовыеНастройкиКД = Отчет.КомпоновщикНастроек.ПолучитьНастройки(); + Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(НовыеНастройкиКД); + НастройкиКД.ДополнительныеСвойства.Вставить("Адрес", ПоместитьВоВременноеХранилище(НовыеНастройкиКД)); // Для платформы. + НастройкиКД = НовыеНастройкиКД; + ВариантыПанелиКлючТекущегоВарианта = " - "; + ВидимостьДоступностьКорректность("ВариантОтчета"); +КонецПроцедуры + +&НаСервере +Процедура ПриСохраненииПользовательскихНастроекНаСервере(ПользовательскиеНастройкиКД) + Если Не РежимВариантаОтчета Тогда + Возврат; + КонецЕсли; + ВариантыОтчетов.ПриСохраненииПользовательскихНастроекНаСервере(ЭтотОбъект, ПользовательскиеНастройкиКД); + ЗаполнитьКомандыВыбораВариантов(); +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии() + Если ФоновоеЗаданиеИдентификатор <> Неопределено Тогда + ФоновоеЗаданиеОтменить(ФоновоеЗаданиеИдентификатор); + ФоновоеЗаданиеИдентификатор = Неопределено; + КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// ЭЛЕМЕНТЫ + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +//////////////////////////////////////////////////////////////////////////////// +// Табличный документ + +&НаКлиенте +Процедура ОтчетТабличныйДокументОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) + + // Для платформы + СтандартнаяОбработка = Ложь; + + ОтчетыКлиентПереопределяемый.ОбработкаРасшифровки(ЭтотОбъект, Элемент, Расшифровка, СтандартнаяОбработка); + + ПараметрыРасшифровки = ПолучитьПараметрыРасшифровкиОтчета(Расшифровка); + + Если Не ЗначениеЗаполнено(ПараметрыРасшифровки) Тогда + Возврат; + КонецЕсли; + + Если ПараметрыРасшифровки.ОткрытьОбъект Тогда + ПоказатьЗначение( , ПараметрыРасшифровки.Значение); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОтчетТабличныйДокументОбработкаДополнительнойРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) + + // Для платформы + СтандартнаяОбработка = Ложь; + + ОтчетыКлиентПереопределяемый.ОбработкаДополнительнойРасшифровки(ЭтотОбъект, Элемент, Расшифровка, СтандартнаяОбработка); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Подключаемые + +&НаКлиенте +Процедура Подключаемый_ФлажокИспользование_ПриИзменении(Элемент) + ИдентификаторЭлемента = Прав(Элемент.Имя, 32); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПолеВвода_ПриИзменении(Элемент) + ИдентификаторЭлемента = Прав(Элемент.Имя, 32); + + ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + Значение = ПользовательскаяНастройкаКД.Значение; + ИначеЕсли ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Значение = ПользовательскаяНастройкаКД.ПравоеЗначение; + Иначе + Возврат; + КонецЕсли; + + Если ЗначениеЗаполнено(Значение) Тогда + ПользовательскаяНастройкаКД.Использование = Истина; + КонецЕсли; + + Если ПользовательскаяНастройкаКД.Использование Тогда // Очистка значений при изменении значения. + Найденные = ОтключаемыеСвязи.НайтиСтроки(Новый Структура("ВедущийИдентификаторВФорме", ИдентификаторЭлемента)); + Для Каждого Связь Из Найденные Цикл + Если Не ЗначениеЗаполнено(Связь.ПодчиненныйИдентификаторВФорме) Тогда + Продолжить; + КонецЕсли; + Если Связь.ТипСвязи = "ПараметровВыбора" Тогда + Если Связь.ПодчиненныйДействие <> РежимИзмененияСвязанногоЗначения.Очищать Тогда + Продолжить; + КонецЕсли; + Иначе + Продолжить; + КонецЕсли; + ПодчиненныйДополнительно = НайтиДополнительныеНастройкиЭлемента(Связь.ПодчиненныйИдентификаторВФорме); + Если ПодчиненныйДополнительно <> Неопределено Тогда + Если ПодчиненныйДополнительно.ВыводитьФлажок Тогда + ПодчиненныйНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(Связь.ПодчиненныйИдентификаторВФорме); + Если ПодчиненныйНастройкаКД <> Неопределено Тогда + ПодчиненныйНастройкаКД.Использование = Ложь; + КонецЕсли; + КонецЕсли; + Если Не ПодчиненныйДополнительно.ОграничиватьВыборУказаннымиЗначениями Тогда + ПодчиненныйДополнительно.ЗначенияДляВыбора.Очистить(); + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ИмяТаблицы_ПриИзменении(Элемент) + + ИдентификаторЭлемента = Прав(Элемент.Имя, 32); + + ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + + Параметр = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ИмяТаблицы"); + Параметр.Значение = ПользовательскаяНастройкаКД.Значение; + + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.ОтчетИнициализирован = Ложь; + + ПараметрыЗаполнения = Новый Структура; + + ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); + БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения); + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПолноеИмяОбъектаМетаданных_ПриИзменении(Элемент) + + ИдентификаторЭлемента = Прав(Элемент.Имя, 32); + + ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + + Параметр = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ПолноеИмяОбъектаМетаданных"); + Параметр.Значение = ПользовательскаяНастройкаКД.Значение; + + Параметр = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ИмяТаблицы"); + Параметр.Значение = ""; + + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.ОтчетИнициализирован = Ложь; + + ПараметрыЗаполнения = Новый Структура; + + ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); + БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения); + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ТипОбъектаМетаданных_ПриИзменении(Элемент) + + ИдентификаторЭлемента = Прав(Элемент.Имя, 32); + + ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + + Параметр = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ТипОбъектаМетаданных"); + Параметр.Значение = ПользовательскаяНастройкаКД.Значение; + + Параметр = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ПолноеИмяОбъектаМетаданных"); + Параметр.Значение = ""; + + Параметр = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ИмяТаблицы"); + Параметр.Значение = ""; + + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.ОтчетИнициализирован = Ложь; + + ПараметрыЗаполнения = Новый Структура; + + ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); + БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения); + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ФлажокЗначения_ПриИзменении(Элемент) + ИдентификаторЭлемента = Прав(Элемент.Имя, 32); + Значение = ЭтотОбъект[Элемент.Имя]; + + ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ПользовательскаяНастройкаКД.Значение = Значение; + Иначе + ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СписокКомпоновщика_НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ОтчетыКлиент.СписокКомпоновщикаНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ЗначениеКомпоновщика_НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ОтчетыКлиент.ЗначениеКомпоновщикаНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ВидСравнения_НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + Подключаемый_ИзменитьВидСравнения(Элемент); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Подключаемые - Стандартный период. + +&НаКлиенте +Процедура Подключаемый_СтандартныйПериод_НачалоПериода_ПриИзменении(Элемент) + // Формирование сведений по элементу. + ПериодНачалоИмя = Элемент.Имя; + ЗначениеИмя = СтрЗаменить(ПериодНачалоИмя, "_Начало_", "_Значение_"); + ИдентификаторЭлемента = Прав(ПериодНачалоИмя, 32); + + Значение = ЭтотОбъект[ЗначениеИмя]; + Заполнено = ЗначениеЗаполнено(Значение.ДатаНачала); + Если Заполнено Тогда + Значение.ДатаНачала = НачалоДня(Значение.ДатаНачала); + КонецЕсли; + + // Запись значения в пользовательские настройки компоновки данных. + ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ПользовательскаяНастройкаКД.Значение = Значение; + Иначе + ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; + КонецЕсли; + Если Заполнено Тогда + ПользовательскаяНастройкаКД.Использование = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СтандартныйПериод_КонецПериода_ПриИзменении(Элемент) + // Формирование сведений по элементу. + ПериодОкончаниеИмя = Элемент.Имя; + ЗначениеИмя = СтрЗаменить(ПериодОкончаниеИмя, "_Окончание_", "_Значение_"); + ИдентификаторЭлемента = Прав(ПериодОкончаниеИмя, 32); + + Значение = ЭтотОбъект[ЗначениеИмя]; + Заполнено = ЗначениеЗаполнено(Значение.ДатаОкончания); + Если Заполнено Тогда + Значение.ДатаОкончания = КонецДня(Значение.ДатаОкончания); + КонецЕсли; + + // Запись значения в пользовательские настройки компоновки данных. + ПользовательскаяНастройкаКД = НайтиПользовательскуюНастройкуЭлемента(ИдентификаторЭлемента); + Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ПользовательскаяНастройкаКД.Значение = Значение; + Иначе + ПользовательскаяНастройкаКД.ПравоеЗначение = Значение; + КонецЕсли; + Если Заполнено Тогда + ПользовательскаяНастройкаКД.Использование = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ВыбратьПериод(Команда) + КнопкаВыбораИмя = Команда.Имя; + ЗначениеИмя = СтрЗаменить(КнопкаВыбораИмя, "_КнопкаВыбора_", "_Значение_"); + ИдентификаторЭлемента = Прав(КнопкаВыбораИмя, 32); + ОтчетыКлиент.ВыбратьПериод(ЭтотОбъект, ЗначениеИмя, ИдентификаторЭлемента); +КонецПроцедуры + +#КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// КОМАНДЫ + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВсеНастройки(Команда) + Имя = НастройкиОтчета.ПолноеИмя + ".ФормаНастроек"; + + ПараметрыФормы = Новый Структура; + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыФормы, ФормаПараметры, Истина); + ПараметрыФормы.Вставить("КлючВарианта", Строка(КлючТекущегоВарианта)); + ПараметрыФормы.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки); + ПараметрыФормы.Вставить("ПользовательскиеНастройки", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); + ПараметрыФормы.Вставить("ВариантНаименование", Строка(ОтчетНаименованиеТекущегоВарианта)); + + Режим = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + + Обработчик = Новый ОписаниеОповещения("ВсеНастройкиЗавершение", ЭтотОбъект); + + ВыполнятьЗамеры = НастройкиОтчета.ВыполнятьЗамеры И ЗначениеЗаполнено(НастройкиОтчета.КлючЗамеров); + Если ВыполнятьЗамеры Тогда + ИдентификаторЗамера = Новый УникальныйИдентификатор; + МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); + МодульОценкаПроизводительностиКлиентСервер.НачатьРучнойЗамерВремени( + НастройкиОтчета.КлючЗамеров + ".Настройки", + ИдентификаторЗамера, + НастройкиОтчета.ПрефиксЗамеров); + КонецЕсли; + + ОткрытьФорму(Имя, ПараметрыФормы, ЭтотОбъект, , , , Обработчик, Режим); + + Если ВыполнятьЗамеры Тогда + МодульОценкаПроизводительностиКлиентСервер.ЗакончитьРучнойЗамерВремени(ИдентификаторЗамера); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ВсеНастройкиЗавершение(Результат, ПараметрыВыполнения) Экспорт + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + БыстрыеНастройкиЗаполнитьКлиент(Результат); +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьВариантОтчета(Команда) + ПараметрыФормы = Новый Структура; + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыФормы, ФормаПараметры, Истина); + ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); + ПараметрыФормы.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки); + ПараметрыФормы.Вставить("КлючВарианта", Строка(КлючТекущегоВарианта)); + ПараметрыФормы.Вставить("ПользовательскиеНастройки", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + ПараметрыФормы.Вставить("ПредставлениеВарианта", Строка(ОтчетНаименованиеТекущегоВарианта)); + ПараметрыФормы.Вставить("ПредставлениеПользовательскихНастроек", ""); + + ОткрытьФорму(НастройкиОтчета.ПолноеИмя + ".ФормаВарианта", ПараметрыФормы, ЭтотОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиПоУмолчанию(Команда) + ПараметрыЗаполнения = Новый Структура; + ПараметрыЗаполнения.Вставить("ИмяСобытия", "НастройкиПоУмолчанию"); + ПараметрыЗаполнения.Вставить("СброситьПользовательскиеНастройки", Истина); + ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); + + БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения); +КонецПроцедуры + +&НаКлиенте +Процедура ОтправитьПоЭлектроннойПочте(Команда) + ОтображениеСостояния = Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния; + Если ОтображениеСостояния.Видимость = Истина + И ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.Неактуальность Тогда + ТекстВопроса = НСтр("ru = 'Отчет не сформирован. Сформировать?'"); + Обработчик = Новый ОписаниеОповещения("ОтправитьПоЭлектроннойПочтеПослеДиалогаСформировать", ЭтотОбъект); + ПоказатьВопрос(Обработчик, ТекстВопроса, РежимДиалогаВопрос.ДаНет, 60, КодВозвратаДиалога.Да); + Иначе + ПоказатьДиалогОтправкиПоЭлектроннойПочте(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОтчетСкомпоноватьРезультат(Команда) + ОчиститьСообщения(); + Сформировать(); +КонецПроцедуры + +&НаКлиенте +Процедура ВычислитьСумму(Команда) + СтандартныеПодсистемыКлиент.ПоказатьРасчетЯчеек(ЭтотОбъект, ОтчетТабличныйДокумент); +КонецПроцедуры + +&НаКлиенте +Процедура ФормироватьСразу(Команда) + + ФормироватьСразу = Не НастройкиОтчета.ФормироватьСразу; + НастройкиОтчета.ФормироватьСразу = ФормироватьСразу; + Элементы.ФормироватьСразу.Пометка = ФормироватьСразу; + + СостояниеДоИзменения = Новый Структура("Видимость, ДополнительныйРежимОтображения, Картинка, Текст"); + ЗаполнитьЗначенияСвойств(СостояниеДоИзменения, Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния); + + Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("ФормироватьСразу", ФормироватьСразу); + ПользовательскиеНастройкиМодифицированы = Истина; + + ЗаполнитьЗначенияСвойств(Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния, СостояниеДоИзменения); + +КонецПроцедуры + +&НаКлиенте +Процедура ДругиеОтчеты(Команда) + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ВариантСсылка", НастройкиОтчета.ВариантСсылка); + ПараметрыФормы.Вставить("ОтчетСсылка", НастройкиОтчета.ОтчетСсылка); + ПараметрыФормы.Вставить("ПодсистемаСсылка", ФормаПараметры.Подсистема); + ПараметрыФормы.Вставить("ОтчетНаименование", НастройкиОтчета.Наименование); + + Блокировать = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + + ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.ПанельДругихОтчетов", ПараметрыФормы, ЭтотОбъект, Истина, , , , Блокировать); +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьСхемуИзФайла(Команда) + + ОписаниеОповещения = Новый ОписаниеОповещения("ЗагрузитьСхемуИзФайлаРасширениеПредложено", ЭтотОбъект); + ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(ОписаниеОповещения, , Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура РедактироватьСхему(Команда) + + #Если ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда + + СхемаКомпоновкиДанных = ПолучитьИзВременногоХранилища(НастройкиОтчета.АдресСхемы); + Конструктор = Новый КонструкторСхемыКомпоновкиДанных(СхемаКомпоновкиДанных); + Конструктор.Редактировать(ЭтотОбъект); + + #Иначе + + ПоказатьПредупреждение(,(НСтр("ru='Для того чтобы редактировать схему компоновки, необходимо запустить приложение в режиме толстого клиента.'"))); + + #КонецЕсли + +КонецПроцедуры + +&НаКлиенте +Процедура ВосстановитьСтандартнуюСхему(Команда) + + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Очистить(); + + ТипОбъектаМетаданных = ""; + ПолноеИмяОбъектаМетаданных = ""; + ИмяТаблицы = ""; + + ПараметрыЗаполнения = Новый Структура; + ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); + + БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Подключаемые + +&НаКлиенте +Процедура Подключаемый_Команда(Команда) + // Механизмы расширения + Результат = Ложь; + КомандаВПостоянных = ПостоянныеКоманды.НайтиПоЗначению(Команда.Имя); + Если КомандаВПостоянных <> Неопределено И ЗначениеЗаполнено(КомандаВПостоянных.Представление) Тогда + МодульКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль(КомандаВПостоянных.Представление); + МодульКлиент.ФормаОтчетаОбработчикКоманды(ЭтотОбъект, Команда, Результат); + Иначе + ОтчетыКлиентПереопределяемый.ОбработчикКоманды(ЭтотОбъект, Команда, Результат); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ЗагрузитьВариантОтчета(Команда) + Найденные = ДобавленныеВарианты.НайтиСтроки(Новый Структура("ИмяКоманды", Команда.Имя)); + Если Найденные.Количество() = 0 Тогда + ПоказатьПредупреждение(, НСтр("ru = 'Вариант отчета не найден.'")); + Возврат; + КонецЕсли; + ВариантФормы = Найденные[0]; + ЗагрузитьВариант(ВариантФормы.КлючВарианта); + КлючУникальности = Лев(КлючУникальности, СтрНайти(КлючУникальности, "/")) + "КлючВарианта." + ВариантФормы.КлючВарианта; + ПоказатьРезультатЗаполненияНастроек(Неопределено); + Если НастройкиОтчета.ФормироватьСразу Тогда + ПодключитьОбработчикОжидания("Сформировать", 0.1, Истина); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ИзменитьВидСравнения(Команда) + ИдентификаторЭлемента = Прав(Команда.Имя, 32); + Контекст = Новый Структура; + Контекст.Вставить("ИдентификаторЭлемента", ИдентификаторЭлемента); + Обработчик = Новый ОписаниеОповещения("ПослеВыбораВидаСравнения", ЭтотОбъект, Контекст); + ОтчетыКлиент.ИзменитьВидСравнения(ЭтотОбъект, ИдентификаторЭлемента, Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура ПослеВыбораВидаСравнения(ВидСравнения, Контекст) Экспорт + Если ВидСравнения = Неопределено Тогда + Возврат; + КонецЕсли; + ПараметрыЗаполнения = Новый Структура; + ПараметрыЗаполнения.Вставить("ИмяСобытия", "ИзменитьВидСравнения"); + ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); + БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения); +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьУсловияОтборов(Команда) + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("НастройкиОтчета", НастройкиОтчета); + ПараметрыФормы.Вставить("КомпоновщикНастроек", Отчет.КомпоновщикНастроек); + ПараметрыФормы.Вставить("ТолькоБыстрые", Истина); + Обработчик = Новый ОписаниеОповещения("ИзменитьУсловияОтборовЗавершение", ЭтотОбъект); + ОткрытьФорму("ХранилищеНастроек.ХранилищеВариантовОтчетов.Форма.УсловияОтборовОтчета", ПараметрыФормы, ЭтотОбъект, Истина, , , Обработчик); +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьУсловияОтборовЗавершение(ВыборПользователя, Контекст) Экспорт + Если ВыборПользователя = Неопределено + Или ВыборПользователя = КодВозвратаДиалога.Отмена + Или ВыборПользователя.Количество() = 0 Тогда + Возврат; + КонецЕсли; + ПараметрыЗаполнения = Новый Структура; + ПараметрыЗаполнения.Вставить("ИмяСобытия", "ИзменитьУсловияОтборов"); + ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); + ПараметрыЗаполнения.Вставить("УсловияОтборов", ВыборПользователя); + БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения); +КонецПроцедуры + +#КонецОбласти + +//////////////////////////////////////////////////////////////////////////////// +// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +#Область СлужебныеПроцедурыИФункции + +//////////////////////////////////////////////////////////////////////////////// +// Клиент + +&НаКлиенте +Процедура ОтправитьПоЭлектроннойПочтеПослеДиалогаСформировать(Ответ, ДополнительныеПараметры) Экспорт + Если Ответ = КодВозвратаДиалога.Да Тогда + ПеременныеКлиента.Вставить("ОтправитьПослеФормирования", Истина); + Сформировать(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура Сформировать() + ПередФормированиемНаКлиенте(); + СформироватьНепосредственно(); + ПослеФормированияНаКлиенте() +КонецПроцедуры + +&НаКлиенте +Процедура ПередФормированиемНаКлиенте() + ПеременныеКлиента.Вставить("ВыполнятьЗамеры", НастройкиОтчета.ВыполнятьЗамеры И ЗначениеЗаполнено(НастройкиОтчета.КлючЗамеров)); + Если ПеременныеКлиента.ВыполнятьЗамеры Тогда + ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПеременныеКлиента, "МодульОценкаПроизводительностиКлиентСервер"); + ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПеременныеКлиента, "ИдентификаторЗамера"); + Комментарий = НастройкиОтчета.ПрефиксЗамеров + "; " + НСтр("ru = 'Непосредственно:'") + " " + Строка(ПеременныеКлиента.Непосредственно); + ПеременныеКлиента.ИдентификаторЗамера = Новый УникальныйИдентификатор; + ПеременныеКлиента.МодульОценкаПроизводительностиКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиентСервер"); + ПеременныеКлиента.МодульОценкаПроизводительностиКлиентСервер.НачатьРучнойЗамерВремени( + НастройкиОтчета.КлючЗамеров + ".Формирование", + ПеременныеКлиента.ИдентификаторЗамера, + Комментарий); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПослеФормированияНаКлиенте() + ОтключитьОбработчикОжидания("ФоновоеЗаданиеПроверитьНаКлиенте"); + ПеременныеКлиента.ФормированиеПриОткрытии = Ложь; + Если ПеременныеКлиента.ВыполнятьЗамеры Тогда + ПеременныеКлиента.МодульОценкаПроизводительностиКлиентСервер.ЗакончитьРучнойЗамерВремени(ПеременныеКлиента.ИдентификаторЗамера); + КонецЕсли; + ОтправитьПослеФормирования = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПеременныеКлиента, "ОтправитьПослеФормирования"); + Если ОтправитьПослеФормирования = Истина Тогда + ПеременныеКлиента.ОтправитьПослеФормирования = Ложь; + Если ПеременныеКлиента.УспешноСформирован Тогда + ПоказатьДиалогОтправкиПоЭлектроннойПочте(); + КонецЕсли; + КонецЕсли; + ПоказатьРезультатЗаполненияНастроек(Неопределено); + ОбновитьОтображениеДанных(); // Для платформы. +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьДиалогОтправкиПоЭлектроннойПочте() + ТабличныеДокументы = Новый СписокЗначений; + ТабличныеДокументы.Добавить(ОтчетТабличныйДокумент, ОтчетНаименованиеТекущегоВарианта); + + ЗаголовокСохранения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Отправка отчета ""%1"" по почте'"), ОтчетНаименованиеТекущегоВарианта); + + ПараметрыОтправки = Новый Структура("Тема", ОтчетНаименованиеТекущегоВарианта); + + МодульРаботаСПочтовымиСообщениямиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСПочтовымиСообщениямиКлиент"); + МодульРаботаСПочтовымиСообщениямиКлиент.ОтправитьТабличныеДокументы(ТабличныеДокументы, ЗаголовокСохранения, ПараметрыОтправки); +КонецПроцедуры + +&НаКлиенте +Процедура ВидимостьДоступностьЕслиТребуется() + Если ВариантыПанелиКлючТекущегоВарианта <> " - " Тогда // Изменения уже применены + Возврат; + КонецЕсли; + ВидимостьДоступностьКорректность(""); +КонецПроцедуры + +&НаКлиенте +Функция НайтиПользовательскуюНастройкуЭлемента(ИмяИлиИдентификаторЭлемента) Экспорт + // Для пользовательских настроек хранятся идентификаторы компоновки данных, + // поскольку они не могут храниться по ссылке (происходит копирование значения). + Если СтрДлина(ИмяИлиИдентификаторЭлемента) = 32 Тогда + ИдентификаторЭлемента = ИмяИлиИдентификаторЭлемента; + Иначе + ИдентификаторЭлемента = Прав(ИмяИлиИдентификаторЭлемента, 32); + КонецЕсли; + ИдентификаторКД = БыстрыйПоискПользовательскихНастроек.Получить(ИдентификаторЭлемента); + Если ИдентификаторКД = Неопределено Тогда + Возврат Неопределено; + Иначе + Возврат Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ПолучитьОбъектПоИдентификатору(ИдентификаторКД); + КонецЕсли; +КонецФункции + +&НаКлиенте +Функция НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента) Экспорт + // Для пользовательских настроек хранятся идентификаторы компоновки данных, + // поскольку они не могут храниться по ссылке (происходит копирование значения). + ВсеДополнительныеНастройки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства, "ЭлементыФормы"); + Если ВсеДополнительныеНастройки = Неопределено Тогда + Возврат Неопределено; + Иначе + Возврат ВсеДополнительныеНастройки[ИдентификаторЭлемента]; + КонецЕсли; +КонецФункции + +&НаКлиенте +Процедура БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения) + Если ПараметрыЗаполнения = Неопределено Тогда + ПараметрыЗаполнения = Новый Структура("ИмяСобытия", "ПослеИзмененияКоллекции"); + КонецЕсли; + РезультатКлиента = БыстрыеНастройкиЗаполнить(ПараметрыЗаполнения); + ПоказатьРезультатЗаполненияНастроек(РезультатКлиента); + Если ПараметрыЗаполнения.Свойство("Переформировать") И ПараметрыЗаполнения.Переформировать Тогда + ОчиститьСообщения(); + Сформировать(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьРезультатЗаполненияНастроек(РезультатКлиента) + Если РезультатКлиента = Неопределено Тогда + РезультатКлиента = РезультатЗаполненияНастроек; + РезультатЗаполненияНастроек = Неопределено; + КонецЕсли; + Если ТипЗнч(РезультатКлиента) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + + // Для платформы (переопределение доступных значений на клиенте). + СвоиСпискиВыбора = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(РезультатКлиента, "СвоиСпискиВыбора"); + Если ТипЗнч(СвоиСпискиВыбора) = Тип("Массив") Тогда + Для Каждого ИдентификаторЭлемента Из СвоиСпискиВыбора Цикл + НастройкаВарианта = НайтиНастройкуВарианта(ЭтотОбъект, ИдентификаторЭлемента); + Если НастройкаВарианта = Неопределено Тогда + Продолжить; + КонецЕсли; + ДополнительныеНастройки = НайтиДополнительныеНастройкиЭлемента(ИдентификаторЭлемента); + Если ДополнительныеНастройки = Неопределено + Или ТипЗнч(ДополнительныеНастройки.ЗначенияДляВыбора) <> Тип("СписокЗначений") Тогда + Продолжить; + КонецЕсли; + Тип = ТипЗнч(НастройкаВарианта.ЭлементКД); + Если Тип = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ДоступныеПараметры = НастройкаВарианта.УзелКД.ДоступныеПараметры; + ДоступнаяНастройкаКД = ДоступныеПараметры.НайтиПараметр(НастройкаВарианта.ЭлементКД.Параметр); + ИначеЕсли Тип = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ДоступныеПоляОтбора = НастройкаВарианта.УзелКД.ДоступныеПоляОтбора; + ДоступнаяНастройкаКД = ДоступныеПоляОтбора.НайтиПоле(НастройкаВарианта.ЭлементКД.ЛевоеЗначение); + КонецЕсли; + Если ДоступнаяНастройкаКД = Неопределено + Или ТипЗнч(ДоступнаяНастройкаКД.ДоступныеЗначения) <> Тип("СписокЗначений") Тогда + Продолжить; + КонецЕсли; + Попытка + ДоступнаяНастройкаКД.ДоступныеЗначения.Очистить(); + Для Каждого Элемент Из ДополнительныеНастройки.ЗначенияДляВыбора Цикл + ЗаполнитьЗначенияСвойств(ДоступнаяНастройкаКД.ДоступныеЗначения.Добавить(), Элемент); + КонецЦикла; + Исключение + Продолжить; // Для платформы. + КонецПопытки; + КонецЦикла; + КонецЕсли; + + СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, РезультатКлиента); +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьСхемуИзФайлаРасширениеПредложено(РасширениеРаботыСФайламиПодключено, ДополнительныеПараметры) Экспорт + + Если РасширениеРаботыСФайламиПодключено Тогда + + ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); + ДиалогВыбораФайла.Фильтр = "Файлы XML (*.xml) |*.xml"; + Обработчик = Новый ОписаниеОповещения("ЗагрузитьСхемуИзФайлаСРасширениемЗавершение", ЭтотОбъект, ДополнительныеПараметры); + + НачатьПомещениеФайлов(Обработчик, , ДиалогВыбораФайла, Истина, УникальныйИдентификатор); + + Иначе // Если веб-клиент без подключенного расширения. + + ОписаниеОповещения = Новый ОписаниеОповещения("ЗагрузитьСхемуИзФайлаБезРасширения", ЭтотОбъект); + НачатьПомещениеФайла(ОписаниеОповещения, , ,Истина, УникальныйИдентификатор); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьСхемуИзФайлаСРасширениемЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт + + Если ВыбранныеФайлы <> Неопределено И ВыбранныеФайлы.Количество() > 0 Тогда + + ДвоичныеДанные = ПолучитьИзВременногоХранилища(ВыбранныеФайлы[0].Хранение); + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Очистить(); + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("СхемаКомпоновкиДанных", ДвоичныеДанные); + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ОтчетИнициализирован", Ложь); + + ПараметрыЗаполнения = Новый Структура; + ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); + + БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьСхемуИзФайлаБезРасширения(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт + + Если Не Результат Тогда + Возврат; + КонецЕсли; + + ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес); + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Очистить(); + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("СхемаКомпоновкиДанных", ДвоичныеДанные); + Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ОтчетИнициализирован", Ложь); + + ПараметрыЗаполнения = Новый Структура; + ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Истина); + + БыстрыеНастройкиЗаполнитьКлиент(ПараметрыЗаполнения); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Клиент или сервер + +&НаКлиентеНаСервереБезКонтекста +Функция НайтиНастройкуВарианта(ЭтотОбъект, ИдентификаторЭлемента) + ПоискНастройкиВарианта = ЭтотОбъект.БыстрыйПоискНастроекВарианта.Получить(ИдентификаторЭлемента); + Если ПоискНастройкиВарианта = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + КорневойУзелКД = ЭтотОбъект.Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ПоискНастройкиВарианта.ИдентификаторУзлаКД); + Результат = Новый Структура("УзелКД, ЭлементКД"); + Результат.УзелКД = КорневойУзелКД[ПоискНастройкиВарианта.ИмяКоллекции]; + Результат.ЭлементКД = Результат.УзелКД.ПолучитьОбъектПоИдентификатору(ПоискНастройкиВарианта.ИдентификаторЭлементаКД); + Возврат Результат; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Вызов сервера + +&НаСервере +Процедура ВидимостьДоступностьКорректность(Изменения = "") + ПоказыватьКомандыВариантовОтчетов = РежимВариантаОтчета И НастройкиОтчета.РазрешеноМенятьВарианты; + + Если Изменения = "" Тогда + Если Не РежимВариантаОтчета Тогда + Элементы.ИзменитьУсловияОтборов.Видимость = Ложь; + КонецЕсли; + + // Вычисление параметров отображения. + ЕстьНастройки = ЕстьБыстрыеНастройки Или ЕстьОбычныеНастройки; + + // Применение параметров отображения. + Элементы.ВсеНастройки.Видимость = ПоказыватьКомандыВариантовОтчетов Или ЕстьОбычныеНастройки; + Элементы.ГруппаВариантыОтчета.Видимость = ПоказыватьКомандыВариантовОтчетов; + Элементы.ИзменитьВариант.Видимость = ПоказыватьКомандыВариантовОтчетов; + Элементы.ВыбратьВариант.Видимость = ПоказыватьКомандыВариантовОтчетов; + ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + Элементы, + "СохранитьВариант", + "Видимость", + ПоказыватьКомандыВариантовОтчетов); // Для платформы (кнопка исчезает если команда недоступна по правам). + Элементы.ГруппаПользовательскиеНастройки.Видимость = ПоказыватьКомандыВариантовОтчетов И ЕстьНастройки; + + // Формировать сразу. + Элементы.ФормироватьСразу.Пометка = НастройкиОтчета.ФормироватьСразу; + КонецЕсли; + + // Команды выбора вариантов. + Если ВариантыПанелиКлючТекущегоВарианта <> КлючТекущегоВарианта Тогда + ВариантыПанелиКлючТекущегоВарианта = КлючТекущегоВарианта; + + Если ПоказыватьКомандыВариантовОтчетов Тогда + ЗаполнитьКомандыВыбораВариантов(); + КонецЕсли; + + Если ПравоВывода Тогда + Уникальность = НастройкиОтчета.ПолноеИмя; + Если ЗначениеЗаполнено(КлючТекущегоВарианта) Тогда + Уникальность = Уникальность + "/КлючВарианта." + КлючТекущегоВарианта; + КонецЕсли; + + КлючСохраненияПоложенияОкна = Уникальность; + + НастройкиОтчета.Печать.Вставить("КлючПараметровПечати", Уникальность); + НастройкиПечатиВосстановить(); + КонецЕсли; + КонецЕсли; + + // Заголовок. + ОтчетНаименованиеТекущегоВарианта = СокрЛП(ОтчетНаименованиеТекущегоВарианта); + Если ЗначениеЗаполнено(ОтчетНаименованиеТекущегоВарианта) Тогда + Заголовок = ОтчетНаименованиеТекущегоВарианта; + Иначе + Заголовок = НастройкиОтчета.Наименование; + КонецЕсли; + Если РежимРасшифровки Тогда + Заголовок = Заголовок + " (" + НСтр("ru = 'Расшифровка'") + ")"; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция БыстрыеНастройкиЗаполнить(Знач ПараметрыКлиента) + + // Вставка значений по умолчанию для обязательных ключей параметров заполнения. + ПараметрыЗаполнения = БыстрыеНастройкиДозаполнитьПараметры(ПараметрыКлиента); + + // Вызов переопределяемого модуля. + Если НастройкиОтчета.События.ПередЗаполнениемПанелиБыстрыхНастроек Тогда + ОтчетОбъект = ОтчетыСервер.ОтчетОбъект(ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя); + ОтчетОбъект.ПередЗаполнениемПанелиБыстрыхНастроек(ЭтотОбъект, ПараметрыЗаполнения); + КонецЕсли; + + // Запись новых настроек варианта и пользовательских настроек в компоновщик. + БыстрыеНастройкиЗагрузитьНастройкиВКомпоновщик(ПараметрыЗаполнения); + + // Получение информации из КД. + УсловияВывода = Новый Структура; + УсловияВывода.Вставить("ТолькоПользовательские", Истина); + УсловияВывода.Вставить("ТолькоБыстрые", Истина); + УсловияВывода.Вставить("ИдентификаторТекущегоУзлаКД", Неопределено); + Информация = ОтчетыСервер.РасширеннаяИнформацияОНастройках( + Отчет.КомпоновщикНастроек, + НастройкиОтчета, + ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя, + УсловияВывода); + ЕстьБыстрыеНастройки = Информация.ЕстьБыстрыеНастройки; + ЕстьОбычныеНастройки = Информация.ЕстьОбычныеНастройки; + + // Удаление элементов старых настроек. + БыстрыеНастройкиУдалитьСтарыеЭлементыИКоманды(ПараметрыЗаполнения); + + // Добавление элементов актуальных настроек и загрузка значений. + БыстрыеНастройкиСоздатьЭлементыУправленияИЗагрузитьЗначения(ПараметрыЗаполнения, Информация); + + // Связи. + ЗарегистрироватьОтключаемыеСвязи(Информация); + + // Стандартные периоды. + НастройкиОтчета.Вставить("СтандартныеПериоды", Новый Массив); + СтандартныеПериоды = Информация.ПользовательскиеНастройки.НайтиСтроки(Новый Структура("ТипЭлементов", "СтандартныйПериод")); + Для Каждого СвойстваНастройки Из СтандартныеПериоды Цикл + НастройкиОтчета.СтандартныеПериоды.Добавить(СвойстваНастройки.ИдентификаторКД); + КонецЦикла; + + // Обработка дополнительных настроек. + ПослеИзмененияКлючевыхСостояний(ПараметрыЗаполнения); + + // Заголовок, видимость/доступность элементов, параметры печати и окна. + ВидимостьДоступностьКорректность(""); + + // Вызов переопределяемого модуля. + Если НастройкиОтчета.События.ПослеЗаполненияПанелиБыстрыхНастроек Тогда + ОтчетОбъект = ОтчетыСервер.ОтчетОбъект(ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя); + ОтчетОбъект.ПослеЗаполненияПанелиБыстрыхНастроек(ЭтотОбъект, ПараметрыЗаполнения); + КонецЕсли; + + Если НастройкиОтчета.Свойство("ОтчетОбъект") Тогда + НастройкиОтчета.Удалить("ОтчетОбъект"); + КонецЕсли; + + Возврат ПараметрыЗаполнения.Результат; +КонецФункции + +&НаСервере +Функция КонтекстныйВызовСервера(КлючОперации, ПараметрыОперации) + РезультатВызова = Новый Структура; + Если НастройкиОтчета.События.КонтекстныйВызовСервера Тогда + ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); + ОтчетОбъект.КонтекстныйВызовСервера(ЭтотОбъект, КлючОперации, ПараметрыОперации, РезультатВызова); + КонецЕсли; + Возврат РезультатВызова; +КонецФункции + +&НаСервере +Процедура СформироватьНепосредственно() + ДопСвойства = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства; + + // Формирование отчета. + ДопСвойства.Вставить("КлючВарианта", КлючТекущегоВарианта); + НастройкиПечатиСохранить(); + ИнформацияОбОшибке = Неопределено; + Попытка + СкомпоноватьРезультат(РежимКомпоновкиРезультата.Авто); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + КонецПопытки; + ДопСвойства.Удалить("КлючВарианта"); + НастройкиПечатиВосстановить(); + + Если ИнформацияОбОшибке <> Неопределено Тогда + ПоказатьОшибкиФормирования(ИнформацияОбОшибке); + Возврат; + КонецЕсли; + + // Перезаполнение настроек. + РезультатФормирования = Новый Структура; + РезультатФормирования.Вставить("ВариантМодифицирован", Ложь); + РезультатФормирования.Вставить("ПользовательскиеНастройкиМодифицированы", Ложь); + Модифицирован = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДопСвойства, "ВариантМодифицирован"); + Если Модифицирован = Истина Тогда + РезультатФормирования.ВариантМодифицирован = Истина; + КонецЕсли; + Модифицированы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДопСвойства, "ПользовательскиеНастройкиМодифицированы"); + Если РезультатФормирования.ВариантМодифицирован Или Модифицированы = Истина Тогда + РезультатФормирования.ПользовательскиеНастройкиМодифицированы = Истина; + КонецЕсли; + ДопСвойства.Удалить("ВариантМодифицирован"); + ДопСвойства.Удалить("ПользовательскиеНастройкиМодифицированы"); + + Если РезультатФормирования.ВариантМодифицирован + Или РезультатФормирования.ПользовательскиеНастройкиМодифицированы Тогда + РезультатФормирования.Вставить("ИмяСобытия", "ПослеФормирования"); + РезультатФормирования.Вставить("Непосредственно", Истина); + РезультатЗаполненияНастроек = БыстрыеНастройкиЗаполнить(РезультатФормирования); + КонецЕсли; +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ФоновоеЗаданиеОтменить(ФоновоеЗаданиеИдентификатор) + ДлительныеОперации.ОтменитьВыполнениеЗадания(ФоновоеЗаданиеИдентификатор); +КонецПроцедуры + +&НаСервере +Процедура ЗагрузитьВариант(КлючВарианта) + // Сохранение текущих пользовательских настроек. + ОбщегоНазначения.ХранилищеСистемныхНастроекСохранить( + НастройкиОтчета.ПолноеИмя + "/" + КлючТекущегоВарианта + "/ТекущиеПользовательскиеНастройки", + "", + Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + // Загрузка нового варианта. + УстановитьТекущийВариант(КлючВарианта); + // Переключение состояния. + ОтображениеСостояния = Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния; + ОтображениеСостояния.Видимость = Истина; + ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.Неактуальность; + ОтображениеСостояния.Картинка = БиблиотекаКартинок.Информация32; + ОтображениеСостояния.Текст = НСтр("ru = 'Выбран другой вариант отчета. Нажмите ""Сформировать"" для получения отчета.'"); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Сервер + +&НаСервере +Процедура ВывестиЭлементыНастройки(Форма, Элементы, СвойстваНастройки, ГруппаВывода, Прочее) Экспорт + ЭлементВывода = Новый Структура("Размер, ИмяЭлемента1, ИмяЭлемента2"); + ЭлементВывода.Размер = 1; + + ШаблонИмениЭлемента = СвойстваНастройки.Тип + "_%1_" + СвойстваНастройки.ИдентификаторЭлемента; + + // Группа требуется для вывода некоторых типов полей. + Если СвойстваНастройки.ТипЭлементов = "СтандартныйПериод" + Или СвойстваНастройки.ТипЭлементов = "СписокСПодбором" Тогда + ГруппаИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Группа"); + + Группа = Элементы.Добавить(ГруппаИмя, Тип("ГруппаФормы"), Элементы.НеОтсортированное); + Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа; + Группа.Отображение = ОтображениеОбычнойГруппы.Нет; + Группа.Заголовок = СвойстваНастройки.Представление; + Группа.ОтображатьЗаголовок = Ложь; + КонецЕсли; + + // Условие. + ВыводитьУсловие = (СвойстваНастройки.Тип = "ЭлементОтбора" + И СвойстваНастройки.ТипЭлементов <> "СтандартныйПериод" + И СвойстваНастройки.ТипЭлементов <> "ТолькоФлажокЗначения"); + + Если ВыводитьУсловие Тогда + Прочее.ЕстьОтборыСУсловиями = Истина; + + КомандаВидСравненияИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "ВидСравнения"); + КомандаВидСравнения = Форма.Команды.Добавить(КомандаВидСравненияИмя); + КомандаВидСравнения.Действие = "Подключаемый_ИзменитьВидСравнения"; + КомандаВидСравнения.Заголовок = НСтр("ru = 'Изменить условие отбора...'"); + КомандаВидСравнения.Подсказка = КомандаВидСравнения.Заголовок; // Для платформы. + КомандаВидСравнения.Отображение = ОтображениеКнопки.Текст; + КомандаВидСравнения.Картинка = БиблиотекаКартинок.ВидСравнения; + КонецЕсли; + + // Флажок использования. + Если СвойстваНастройки.ВыводитьФлажок Тогда + ФлажокИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Использование"); + + Если СвойстваНастройки.ТипЭлементов = "СписокСПодбором" Тогда + ГруппаДляФлажка = Группа; + ЭлементВывода.ИмяЭлемента1 = ГруппаИмя; + Иначе + ГруппаДляФлажка = Элементы.НеОтсортированное; + ЭлементВывода.ИмяЭлемента1 = ФлажокИмя; + КонецЕсли; + + ЗаголовокФлажка = СвойстваНастройки.Представление; + Если ВыводитьУсловие + И СвойстваНастройки.ВидСравнения <> ВидСравненияКомпоновкиДанных.Равно + И СвойстваНастройки.ВидСравнения <> ВидСравненияКомпоновкиДанных.ВСписке + И СвойстваНастройки.ВидСравнения <> ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии + И СвойстваНастройки.ВидСравнения <> ВидСравненияКомпоновкиДанных.Содержит + И СвойстваНастройки.ТипЭлементов <> "УсловиеВРежимеПросмотра" Тогда + ЗаголовокФлажка = ЗаголовокФлажка + " (" + НРег(Строка(СвойстваНастройки.ВидСравнения)) + ")"; + КонецЕсли; + Если Не СвойстваНастройки.ВыводитьТолькоФлажок Тогда + ЗаголовокФлажка = ЗаголовокФлажка + ":"; + КонецЕсли; + + Флажок = Элементы.Добавить(ФлажокИмя, Тип("ПолеФормы"), ГруппаДляФлажка); + Флажок.Вид = ВидПоляФормы.ПолеФлажка; + Флажок.Заголовок = ЗаголовокФлажка; + Флажок.ПутьКДанным = Прочее.ПутьККомпоновщику + ".ПользовательскиеНастройки[" + СвойстваНастройки.ИндексВКоллекции + "].Использование"; + Флажок.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право; + Флажок.УстановитьДействие("ПриИзменении", "Подключаемый_ФлажокИспользование_ПриИзменении"); + + Если ВыводитьУсловие Тогда + КнопкаИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "ВидСравнения_Использование"); + КнопкаВидСравнения = Элементы.Добавить(КнопкаИмя, Тип("КнопкаФормы"), Флажок.КонтекстноеМеню); + КнопкаВидСравнения.ИмяКоманды = КомандаВидСравненияИмя; + КонецЕсли; + КонецЕсли; + + Если СвойстваНастройки.Тип = "ЗначениеПараметраНастроек" + Или СвойстваНастройки.Тип = "ЭлементОтбора" Тогда + + Если СвойстваНастройки.ВводСписком Тогда + СвойстваНастройки.ОтмеченныеЗначения = ОтчетыКлиентСервер.ЗначенияСписком(СвойстваНастройки.Значение); + КонецЕсли; + + // Сохранение параметров выбора настройки в дополнительных свойствах пользовательских настроек. + НастройкиЭлемента = Новый Структура("Представление, ВыводитьФлажок, + |ВводСписком, ОписаниеТипов, ПараметрыВыбора, ЗначенияДляВыбора, + |ОграничиватьВыборУказаннымиЗначениями, ВыборГруппИЭлементов, ФормаВыбора"); + НастройкиЭлемента.ФормаВыбора = СвойстваНастройки.ДоступнаяНастройкаКД.ФормаВыбора; + ЗаполнитьЗначенияСвойств(НастройкиЭлемента, СвойстваНастройки); + Прочее.ДополнительныеНастройкиЭлементов.Вставить(СвойстваНастройки.ИдентификаторЭлемента, НастройкиЭлемента); + КонецЕсли; + + // Поля для значений. + Если СвойстваНастройки.ТипЭлементов <> "" Тогда + + ИнформацияОТипах = СвойстваНастройки.ИнформацияОТипах; + + //////////////////////////////////////////////////////////////////////////////// + // ВЫВОД. + + ЗначениеИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Значение"); + + Если СвойстваНастройки.ТипЭлементов = "ТолькоФлажокЗначения" Тогда + + БыстрыеНастройкиДобавитьРеквизит(Прочее.ПараметрыЗаполнения, ЗначениеИмя, СвойстваНастройки.ОписаниеТипов); + + ЭлементВывода.ИмяЭлемента1 = ЗначениеИмя; + + ПолеФлажка = Элементы.Добавить(ЗначениеИмя, Тип("ПолеФормы"), Группа); + ПолеФлажка.Вид = ВидПоляФормы.ПолеФлажка; + ПолеФлажка.Заголовок = СвойстваНастройки.Представление; + ПолеФлажка.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право; + ПолеФлажка.УстановитьДействие("ПриИзменении", "Подключаемый_ФлажокЗначения_ПриИзменении"); + + Если ВыводитьУсловие Тогда + КнопкаВидСравнения = Элементы.Добавить(КомандаВидСравненияИмя, Тип("КнопкаФормы"), ПолеФлажка.КонтекстноеМеню); + КнопкаВидСравнения.ИмяКоманды = КомандаВидСравненияИмя; + КонецЕсли; + + Прочее.ДобавленныеПоляВвода.Вставить(ЗначениеИмя, СвойстваНастройки.Значение); + + ИначеЕсли СвойстваНастройки.ТипЭлементов = "УсловиеВРежимеПросмотра" Тогда + + ЭлементВывода.ИмяЭлемента2 = ЗначениеИмя; + + ПолеВвода = Элементы.Добавить(ЗначениеИмя, Тип("ПолеФормы"), Группа); + ПолеВвода.Вид = ВидПоляФормы.ПолеВвода; + ПолеВвода.Заголовок = СвойстваНастройки.Представление; + ПолеВвода.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + ПолеВвода.ТолькоПросмотр = Истина; + ПолеВвода.ПутьКДанным = Прочее.ПутьККомпоновщику + ".ПользовательскиеНастройки[" + СвойстваНастройки.ИндексВКоллекции + "].ВидСравнения"; + ПолеВвода.УстановитьДействие("НачалоВыбора", "Подключаемый_ВидСравнения_НачалоВыбора"); + + Если ВыводитьУсловие Тогда + КнопкаВидСравнения = Элементы.Добавить(КомандаВидСравненияИмя, Тип("КнопкаФормы"), ПолеВвода.КонтекстноеМеню); + КнопкаВидСравнения.ИмяКоманды = КомандаВидСравненияИмя; + КонецЕсли; + + ИначеЕсли СвойстваНастройки.ТипЭлементов = "СвязьСКомпоновщиком" Тогда + + Прочее.ИменаОсновныхРеквизитовФормы.Вставить(СвойстваНастройки.ИдентификаторЭлемента, ЗначениеИмя); + Прочее.ИменаЭлементовДляУстановкиСвязей.Вставить(СвойстваНастройки.ИдентификаторЭлемента, ЗначениеИмя); + + ЭлементВывода.ИмяЭлемента2 = ЗначениеИмя; + + ПолеВвода = Элементы.Добавить(ЗначениеИмя, Тип("ПолеФормы"), Группа); + ПолеВвода.Вид = ВидПоляФормы.ПолеВвода; + ПолеВвода.Заголовок = СвойстваНастройки.Представление; + ПолеВвода.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + + ИмяПараметра = Строка(СвойстваНастройки.ПолеКД); + Если ИмяПараметра = "ПараметрыДанных.ТипОбъектаМетаданных" Тогда + ПолеВвода.УстановитьДействие("ПриИзменении", "Подключаемый_ТипОбъектаМетаданных_ПриИзменении"); + ИначеЕсли ИмяПараметра = "ПараметрыДанных.ПолноеИмяОбъектаМетаданных" Тогда + ПолеВвода.УстановитьДействие("ПриИзменении", "Подключаемый_ПолноеИмяОбъектаМетаданных_ПриИзменении"); + ИначеЕсли ИмяПараметра = "ПараметрыДанных.ИмяТаблицы" Тогда + ПолеВвода.УстановитьДействие("ПриИзменении", "Подключаемый_ИмяТаблицы_ПриИзменении"); + Иначе + ПолеВвода.УстановитьДействие("ПриИзменении", "Подключаемый_ПолеВвода_ПриИзменении"); + КонецЕсли; + + // Связь с СКД. + ПолеВвода.ПутьКДанным = Прочее.ПутьККомпоновщику + ".ПользовательскиеНастройки[" + СвойстваНастройки.ИндексВКоллекции + "].Значение"; + + Если СвойстваНастройки.ВводСписком Тогда + ПолеВвода.УстановитьДействие("НачалоВыбора", "Подключаемый_СписокКомпоновщика_НачалоВыбора"); + ИначеЕсли СвойстваНастройки.ДоступнаяНастройкаКД <> Неопределено + И СвойстваНастройки.ДоступнаяНастройкаКД.БыстрыйВыбор <> Истина Тогда + // Когда есть отключаемые связи "ПоМетаданным" или "ПараметровВыбора" от подчиненного, + // тогда для выбора используется прикладная логика. + Если СвойстваНастройки.НастройкаВарианта.СвязиПараметровВыбора.Количество() > 0 + Или СвойстваНастройки.НастройкаВарианта.СвязиПоМетаданным.Количество() > 0 Тогда + ПолеВвода.УстановитьДействие("НачалоВыбора", "Подключаемый_ЗначениеКомпоновщика_НачалоВыбора"); + КонецЕсли; + КонецЕсли; + + Если СвойстваНастройки.Тип = "ЗначениеПараметраНастроек" + Или СвойстваНастройки.Тип = "ЭлементОтбора" Тогда + + ЗаполнитьЗначенияСвойств(ПолеВвода, СвойстваНастройки.ДоступнаяНастройкаКД, "БыстрыйВыбор, Маска, ФормаВыбора, ФорматРедактирования"); + + Если СвойстваНастройки.Тип = "ЗначениеПараметраНастроек" Тогда + ПолеВвода.АвтоОтметкаНезаполненного = СвойстваНастройки.ДоступнаяНастройкаКД.ЗапрещатьНезаполненныеЗначения; + КонецЕсли; + + ПолеВвода.ВыборГруппИЭлементов = СвойстваНастройки.ВыборГруппИЭлементов; + + // Поля ввода следующих типов не растягиваются по горизонтали и не имеют кнопки очистки: + // Дата, Булево, Число, Тип. + ПолеВвода.КнопкаОткрытия = Ложь; + ПолеВвода.КнопкаРегулирования = Ложь; + ПолеВвода.КнопкаОчистки = ИнформацияОТипах.СодержитОбъектныеТипы; + ПолеВвода.РастягиватьПоГоризонтали = ИнформацияОТипах.СодержитОбъектныеТипы; + + Если Не СвойстваНастройки.ВводСписком Тогда + Для Каждого ЭлементСпискаВФорме Из СвойстваНастройки.ЗначенияДляВыбора Цикл + ЗаполнитьЗначенияСвойств(ПолеВвода.СписокВыбора.Добавить(), ЭлементСпискаВФорме); + КонецЦикла; + Если СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда + ПолеВвода.РежимВыбораИзСписка = Истина; + ПолеВвода.КнопкаСоздания = Ложь; + ПолеВвода.КнопкаВыбора = Ложь; + ПолеВвода.КнопкаВыпадающегоСписка = Истина; + ПолеВвода.РастягиватьПоГоризонтали = Истина; + КонецЕсли; + // Для платформы (переопределение доступных значений на клиенте). + Если СвойстваНастройки.НастройкаВарианта.СписокЗначенийПереопределен Тогда + РезультатКлиента = Прочее.ПараметрыЗаполнения.Результат; + СвоиСпискиВыбора = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(РезультатКлиента, "СвоиСпискиВыбора"); + Если СвоиСпискиВыбора = Неопределено Тогда + СвоиСпискиВыбора = Новый Массив; + РезультатКлиента.Вставить("СвоиСпискиВыбора", СвоиСпискиВыбора); + КонецЕсли; + Если СвоиСпискиВыбора.Найти(СвойстваНастройки.ИдентификаторЭлемента) = Неопределено Тогда + СвоиСпискиВыбора.Добавить(СвойстваНастройки.ИдентификаторЭлемента); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + // Условие. + Если ВыводитьУсловие Тогда + КнопкаВидСравнения = Элементы.Добавить(КомандаВидСравненияИмя, Тип("КнопкаФормы"), ПолеВвода.КонтекстноеМеню); + КнопкаВидСравнения.ИмяКоманды = КомандаВидСравненияИмя; + КонецЕсли; + + ИмяПараметра = Строка(СвойстваНастройки.ПолеКД); + Если ИмяПараметра = "ПараметрыДанных.ТипОбъектаМетаданных" Тогда + ПолеВвода.Ширина = 20; + ПолеВвода.РастягиватьПоГоризонтали = Ложь; + КонецЕсли; + + КонецЕсли; + + ИначеЕсли СвойстваНастройки.ТипЭлементов = "СтандартныйПериод" Тогда + + Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + + ЭлементВывода.Размер = 1; + ЭлементВывода.ИмяЭлемента2 = ГруппаИмя; + + ПериодНачалоИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Начало"); + ПериодОкончаниеИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Окончание"); + ТиреИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Тире"); + КнопкаВыбораИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "КнопкаВыбора"); + + // Реквизиты. + БыстрыеНастройкиДобавитьРеквизит(Прочее.ПараметрыЗаполнения, ЗначениеИмя, "СтандартныйПериод"); + + // Начало произвольного периода. + ПериодНачало = Элементы.Добавить(ПериодНачалоИмя, Тип("ПолеФормы"), Группа); + ПериодНачало.Вид = ВидПоляФормы.ПолеВвода; + ПериодНачало.Ширина = 9; + ПериодНачало.РастягиватьПоГоризонтали = Ложь; + ПериодНачало.КнопкаВыбора = Истина; + ПериодНачало.КнопкаОткрытия = Ложь; + ПериодНачало.КнопкаОчистки = Ложь; + ПериодНачало.КнопкаРегулирования = Ложь; + ПериодНачало.РедактированиеТекста = Истина; + ПериодНачало.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + ПериодНачало.УстановитьДействие("ПриИзменении", "Подключаемый_СтандартныйПериод_НачалоПериода_ПриИзменении"); + + Если СвойстваНастройки.Тип = "ЗначениеПараметраНастроек" Тогда + ПериодНачало.АвтоОтметкаНезаполненного = СвойстваНастройки.ДоступнаяНастройкаКД.ЗапрещатьНезаполненныеЗначения; + КонецЕсли; + + Тире = Элементы.Добавить(ТиреИмя, Тип("ДекорацияФормы"), Группа); + Тире.Вид = ВидДекорацииФормы.Надпись; + Тире.Заголовок = Символ(8211); // Среднее тире (en dash). + + // Окончание произвольного периода. + ПериодОкончание = Элементы.Добавить(ПериодОкончаниеИмя, Тип("ПолеФормы"), Группа); + ПериодОкончание.Вид = ВидПоляФормы.ПолеВвода; + ЗаполнитьЗначенияСвойств(ПериодОкончание, ПериодНачало, "РастягиватьПоГоризонтали, Ширина, ПоложениеЗаголовка, + |РедактированиеТекста, КнопкаВыбора, КнопкаОткрытия, КнопкаОчистки, КнопкаРегулирования, АвтоОтметкаНезаполненного"); + ПериодОкончание.УстановитьДействие("ПриИзменении", "Подключаемый_СтандартныйПериод_КонецПериода_ПриИзменении"); + + // Значения. + НачалоПериода = СвойстваНастройки.Значение.ДатаНачала; + КонецПериода = СвойстваНастройки.Значение.ДатаОкончания; + + // Кнопка выбора. + КомандаВыбора = Форма.Команды.Добавить(КнопкаВыбораИмя); + КомандаВыбора.Действие = "Подключаемый_ВыбратьПериод"; + КомандаВыбора.Заголовок = НСтр("ru = 'Выбрать период...'"); + КомандаВыбора.Подсказка = КомандаВыбора.Заголовок; // Для платформы. + КомандаВыбора.Отображение = ОтображениеКнопки.Картинка; + КомандаВыбора.Картинка = БиблиотекаКартинок.Выбрать; + + КнопкаВыбора = Элементы.Добавить(КнопкаВыбораИмя, Тип("КнопкаФормы"), Группа); + КнопкаВыбора.ИмяКоманды = КнопкаВыбораИмя; + + Дополнительно = Новый Структура; + Дополнительно.Вставить("ЗначениеИмя", ЗначениеИмя); + Дополнительно.Вставить("ПериодНачалоИмя", ПериодНачалоИмя); + Дополнительно.Вставить("ПериодОкончаниеИмя", ПериодОкончаниеИмя); + СвойстваНастройки.Дополнительно = Дополнительно; + Прочее.ДобавленныеСтандартныеПериоды.Добавить(СвойстваНастройки); + + ИначеЕсли СвойстваНастройки.ТипЭлементов = "СписокСПодбором" Тогда + + Группа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; + + ЭлементВывода.Размер = 5; + ЭлементВывода.ИмяЭлемента1 = ГруппаИмя; + + ГруппаЗаголовокИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "ГруппаЗаголовка"); + ДекорацияИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Декорация"); + ТаблицаИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "СписокЗначений"); + ГруппаКолонокИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "ГруппаКолонок"); + КолонкаИспользованиеИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Колонка_Использование"); + КолонкаЗначениеИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Колонка_Значение"); + КоманднаяПанельИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "КоманднаяПанель"); + КнопкаПодборИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Подбор"); + КнопкаВставитьИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "ВставитьИзБуфера"); + + Прочее.ИменаОсновныхРеквизитовФормы.Вставить(СвойстваНастройки.ИдентификаторЭлемента, ТаблицаИмя); + Прочее.ИменаЭлементовДляУстановкиСвязей.Вставить(СвойстваНастройки.ИдентификаторЭлемента, КолонкаЗначениеИмя); + + Если Не СвойстваНастройки.ВыводитьФлажок Или Не СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда + + // Группа-строка для заголовка и командной панели таблицы. + ГруппаЗаголовокТаблицы = Элементы.Добавить(ГруппаЗаголовокИмя, Тип("ГруппаФормы"), Группа); + ГруппаЗаголовокТаблицы.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ГруппаЗаголовокТаблицы.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ГруппаЗаголовокТаблицы.Отображение = ОтображениеОбычнойГруппы.Нет; + ГруппаЗаголовокТаблицы.ОтображатьЗаголовок = Ложь; + + // Флажок уже создан. + Если СвойстваНастройки.ВыводитьФлажок Тогда + Элементы.Переместить(Флажок, ГруппаЗаголовокТаблицы); + КонецЕсли; + + // Заголовок / Пустая декорация. + ПустаяДекорация = Элементы.Добавить(ДекорацияИмя, Тип("ДекорацияФормы"), ГруппаЗаголовокТаблицы); + ПустаяДекорация.Вид = ВидДекорацииФормы.Надпись; + ПустаяДекорация.Заголовок = ?(СвойстваНастройки.ВыводитьФлажок, " ", СвойстваНастройки.Представление + ":"); + ПустаяДекорация.РастягиватьПоГоризонтали = Истина; + + // Кнопки. + Если Не СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда + Если ИнформацияОТипах.СодержитСсылочныеТипы Тогда + КомандаПодбор = Форма.Команды.Добавить(КнопкаПодборИмя); + КомандаПодбор.Действие = "Подключаемый_СписокСПодбором_Подбор"; + КомандаПодбор.Заголовок = НСтр("ru = 'Подбор'"); + Иначе + КомандаПодбор = Форма.Команды.Добавить(КнопкаПодборИмя); + КомандаПодбор.Действие = "Подключаемый_СписокСПодбором_Добавить"; + КомандаПодбор.Заголовок = НСтр("ru = 'Добавить'"); + КомандаПодбор.Картинка = БиблиотекаКартинок.СоздатьЭлементСписка; + КонецЕсли; + + КнопкаПодбор = Элементы.Добавить(КнопкаПодборИмя, Тип("КнопкаФормы"), ГруппаЗаголовокТаблицы); + КнопкаПодбор.ИмяКоманды = КнопкаПодборИмя; + КнопкаПодбор.Вид = ВидКнопкиФормы.Гиперссылка; + КнопкаПодбор.Отображение = ОтображениеКнопки.Текст; + + Если СвойстваНастройки.ИнформацияОТипах.СодержитСсылочныеТипы И Прочее.ЕстьЗагрузкаДанныхИзФайла Тогда + КомандаВставить = Форма.Команды.Добавить(КнопкаВставитьИмя); + КомандаВставить.Действие = "Подключаемый_СписокСПодбором_ВставитьИзБуфера"; + КомандаВставить.Заголовок = НСтр("ru = 'Вставить из буфера обмена...'"); + КомандаВставить.Подсказка = КомандаВставить.Заголовок; // Для платформы. + КомандаВставить.Картинка = БиблиотекаКартинок.ЗаполнитьФорму; + + КнопкаВставить = Элементы.Добавить(КнопкаВставитьИмя, Тип("КнопкаФормы"), ГруппаЗаголовокТаблицы); + КнопкаВставить.ИмяКоманды = КнопкаВставитьИмя; + КнопкаВставить.Вид = ВидКнопкиФормы.Гиперссылка; + КнопкаВставить.Отображение = ОтображениеКнопки.Картинка; + КонецЕсли; + КонецЕсли; + + КонецЕсли; + + // Реквизит. + БыстрыеНастройкиДобавитьРеквизит(Прочее.ПараметрыЗаполнения, ТаблицаИмя, "СписокЗначений"); + + // Группа с отступом и таблицей. + ГруппаСОтступом = Элементы.Добавить(ГруппаИмя + "Отступ", Тип("ГруппаФормы"), Группа); + ГруппаСОтступом.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ГруппаСОтступом.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ГруппаСОтступом.Отображение = ОтображениеОбычнойГруппы.Нет; + ГруппаСОтступом.Заголовок = СвойстваНастройки.Представление; + ГруппаСОтступом.ОтображатьЗаголовок = Ложь; + + // Декорация отступа. + ПустаяДекорация = Элементы.Добавить(ДекорацияИмя + "Отступ", Тип("ДекорацияФормы"), ГруппаСОтступом); + ПустаяДекорация.Вид = ВидДекорацииФормы.Надпись; + ПустаяДекорация.Заголовок = " "; + ПустаяДекорация.РастягиватьПоГоризонтали = Ложь; + + // Таблица. + ТаблицаФормы = Элементы.Добавить(ТаблицаИмя, Тип("ТаблицаФормы"), ГруппаСОтступом); + ТаблицаФормы.Отображение = ОтображениеТаблицы.Список; + ТаблицаФормы.Заголовок = СвойстваНастройки.Представление; + ТаблицаФормы.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + ТаблицаФормы.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет; + ТаблицаФормы.ВертикальныеЛинии = Ложь; + ТаблицаФормы.ГоризонтальныеЛинии = Ложь; + ТаблицаФормы.Шапка = Ложь; + ТаблицаФормы.Подвал = Ложь; + ТаблицаФормы.ИзменятьПорядокСтрок = Истина; + ТаблицаФормы.РастягиватьПоГоризонтали = Истина; + ТаблицаФормы.РастягиватьПоВертикали = Истина; + ТаблицаФормы.Высота = 3; + + Если СвойстваНастройки.ВыводитьФлажок Тогда + Если Не СвойстваНастройки.ПользовательскаяНастройкаКД.Использование Тогда + ТаблицаФормы.ЦветТекста = Форма.ЦветНеактивныхЗначенийТаблицы; + КонецЕсли; + КонецЕсли; + + // Группа колонок "в ячейке". + ГруппаКолонок = Элементы.Добавить(ГруппаКолонокИмя, Тип("ГруппаФормы"), ТаблицаФормы); + ГруппаКолонок.Вид = ВидГруппыФормы.ГруппаКолонок; + ГруппаКолонок.Группировка = ГруппировкаКолонок.ВЯчейке; + + // Колонка "Использование". + КолонкаИспользованиеЭлемент = Элементы.Добавить(КолонкаИспользованиеИмя, Тип("ПолеФормы"), ГруппаКолонок); + КолонкаИспользованиеЭлемент.Вид = ВидПоляФормы.ПолеФлажка; + + // Колонка "Значение". + КолонкаЗначениеЭлемент = Элементы.Добавить(КолонкаЗначениеИмя, Тип("ПолеФормы"), ГруппаКолонок); + КолонкаЗначениеЭлемент.Вид = ВидПоляФормы.ПолеВвода; + + ЗаполнитьЗначенияСвойств(КолонкаЗначениеЭлемент, СвойстваНастройки.ДоступнаяНастройкаКД, "БыстрыйВыбор, Маска, ФормаВыбора, ФорматРедактирования"); + + КолонкаЗначениеЭлемент.ВыборГруппИЭлементов = СвойстваНастройки.ВыборГруппИЭлементов; + + Если СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями Тогда + КолонкаЗначениеЭлемент.ТолькоПросмотр = Истина; + КонецЕсли; + + // Заполнение имен объектов метаданных в разрезах типов и идентификаторов элементов (для предустановленных). + // Используется при клике по кнопке "Подбор" для получения имени формы подбора. + Если ЗначениеЗаполнено(КолонкаЗначениеЭлемент.ФормаВыбора) Тогда + Прочее.СоответствиеИменОбъектовМетаданных.Вставить(СвойстваНастройки.ИдентификаторЭлемента, КолонкаЗначениеЭлемент.ФормаВыбора); + КонецЕсли; + + // Фиксированные параметры выбора. + Если СвойстваНастройки.ПараметрыВыбора.Количество() > 0 Тогда + КолонкаЗначениеЭлемент.ПараметрыВыбора = Новый ФиксированныйМассив(СвойстваНастройки.ПараметрыВыбора); + КонецЕсли; + + Если ВыводитьУсловие Тогда + КнопкаВидСравнения = Элементы.Добавить(КомандаВидСравненияИмя, Тип("КнопкаФормы"), ТаблицаФормы.КонтекстноеМеню); + КнопкаВидСравнения.ИмяКоманды = КомандаВидСравненияИмя; + КонецЕсли; + + Дополнительно = Новый Структура; + Дополнительно.Вставить("ТаблицаИмя", ТаблицаИмя); + Дополнительно.Вставить("ИмяКолонкиЗначение", КолонкаЗначениеИмя); + Дополнительно.Вставить("ИмяКолонкиИспользование", КолонкаИспользованиеИмя); + СвойстваНастройки.Дополнительно = Дополнительно; + Прочее.ДобавленныеСпискиЗначений.Добавить(СвойстваНастройки); + + КонецЕсли; + КонецЕсли; + + Если ЭлементВывода.ИмяЭлемента1 = Неопределено Тогда + ЗаголовокИмя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениЭлемента, "Заголовок"); + ПолеНадписи = Элементы.Добавить(ЗаголовокИмя, Тип("ДекорацияФормы"), Элементы.НеОтсортированное); + ПолеНадписи.Вид = ВидДекорацииФормы.Надпись; + ПолеНадписи.Заголовок = СвойстваНастройки.Представление + ":"; + ЭлементВывода.ИмяЭлемента1 = ЗаголовокИмя; + КонецЕсли; + + ИмяПараметра = Строка(СвойстваНастройки.ПолеКД); + Если ИмяПараметра = "ПараметрыДанных.ТипОбъектаМетаданных" + Или ИмяПараметра = "ПараметрыДанных.ПолноеИмяОбъектаМетаданных" + Или ИмяПараметра = "ПараметрыДанных.ИмяТаблицы" Тогда + ПолеНадписи.Видимость = Ложь; + КонецЕсли; + + Если СвойстваНастройки.ТипЭлементов = "СтандартныйПериод" Тогда + ГруппаВывода.Порядок.Вставить(0, ЭлементВывода); + Иначе + ГруппаВывода.Порядок.Добавить(ЭлементВывода); + КонецЕсли; + ГруппаВывода.Размер = ГруппаВывода.Размер + ЭлементВывода.Размер; + +КонецПроцедуры + +&НаСервере +Процедура БыстрыеНастройкиДобавитьРеквизит(ПараметрыЗаполнения, РеквизитПолноеИмя, ТипРеквизита) + Если ТипЗнч(ТипРеквизита) = Тип("ОписаниеТипов") Тогда + ТипыДобавляемого = ТипРеквизита; + ИначеЕсли ТипЗнч(ТипРеквизита) = Тип("Строка") Тогда + ТипыДобавляемого = Новый ОписаниеТипов(ТипРеквизита); + ИначеЕсли ТипЗнч(ТипРеквизита) = Тип("Массив") Тогда + ТипыДобавляемого = Новый ОписаниеТипов(ТипРеквизита); + ИначеЕсли ТипЗнч(ТипРеквизита) = Тип("Тип") Тогда + МассивТипов = Новый Массив; + МассивТипов.Добавить(ТипРеквизита); + ТипыДобавляемого = Новый ОписаниеТипов(МассивТипов); + Иначе + Возврат; + КонецЕсли; + + ТипыСуществующего = ПараметрыЗаполнения.Реквизиты.Существующие.Получить(РеквизитПолноеИмя); + Если ОписанияТиповСовпадают(ТипыСуществующего, ТипыДобавляемого) Тогда + ПараметрыЗаполнения.Реквизиты.Существующие.Удалить(РеквизитПолноеИмя); + Иначе + ПозицияТочки = СтрНайти(РеквизитПолноеИмя, "."); + Если ПозицияТочки = 0 Тогда + ПутьКРеквизиту = ""; + КраткоеИмяРеквизита = РеквизитПолноеИмя; + Иначе + ПутьКРеквизиту = Лев(РеквизитПолноеИмя, ПозицияТочки - 1); + КраткоеИмяРеквизита = Сред(РеквизитПолноеИмя, ПозицияТочки + 1); + КонецЕсли; + + ПараметрыЗаполнения.Реквизиты.Добавляемые.Добавить(Новый РеквизитФормы(КраткоеИмяРеквизита, ТипыДобавляемого, ПутьКРеквизиту)); + Если ТипыСуществующего <> Неопределено Тогда + ПараметрыЗаполнения.Реквизиты.Удаляемые.Добавить(РеквизитПолноеИмя); + ПараметрыЗаполнения.Реквизиты.Существующие.Удалить(РеквизитПолноеИмя); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Функция ОписанияТиповСовпадают(ОписаниеТипов1, ОписаниеТипов2) + Если ОписаниеТипов1 = Неопределено Или ОписаниеТипов2 = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ОписаниеТипов1 = ОписаниеТипов2 + Или ОбщегоНазначения.ЗначениеВСтрокуXML(ОписаниеТипов1) = ОбщегоНазначения.ЗначениеВСтрокуXML(ОписаниеТипов2); +КонецФункции + +&НаСервере +Функция БыстрыеНастройкиДозаполнитьПараметры(ПараметрыКлиента) + ПараметрыЗаполнения = Новый Структура; + ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыЗаполнения, ПараметрыКлиента, Истина); + Если Не ПараметрыЗаполнения.Свойство("ИмяСобытия") Тогда + ПараметрыЗаполнения.Вставить("ИмяСобытия", ""); + КонецЕсли; + Если Не ПараметрыЗаполнения.Свойство("ВариантМодифицирован") Тогда + ПараметрыЗаполнения.Вставить("ВариантМодифицирован", Ложь); + КонецЕсли; + Если Не ПараметрыЗаполнения.Свойство("ПользовательскиеНастройкиМодифицированы") Тогда + ПараметрыЗаполнения.Вставить("ПользовательскиеНастройкиМодифицированы", Ложь); + КонецЕсли; + Если Не ПараметрыЗаполнения.Свойство("Результат") Тогда + ПараметрыЗаполнения.Вставить("Результат", Новый Структура); + КонецЕсли; + + ПараметрыЗаполнения.Вставить("ОтчетОбъектИлиПолноеИмя", НастройкиОтчета.ПолноеИмя); + Если НастройкиОтчета.События.ПередЗаполнениемПанелиБыстрыхНастроек + Или НастройкиОтчета.События.ПослеЗаполненияПанелиБыстрыхНастроек + Или НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда + ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя = РеквизитФормыВЗначение("Отчет"); + КонецЕсли; + + Возврат ПараметрыЗаполнения; +КонецФункции + +&НаСервере +Процедура БыстрыеНастройкиЗагрузитьНастройкиВКомпоновщик(ПараметрыЗаполнения) + + НовыеНастройкиКД = Неопределено; + НовыеПользовательскиеНастройкиКД = Неопределено; + Если ПараметрыЗаполнения.Свойство("КомпоновщикНастроекКД") Тогда + НовыеНастройкиКД = ПараметрыЗаполнения.КомпоновщикНастроекКД.Настройки; + НовыеПользовательскиеНастройкиКД = ПараметрыЗаполнения.КомпоновщикНастроекКД.ПользовательскиеНастройки; + Иначе + Если ПараметрыЗаполнения.Свойство("НастройкиКД") Тогда + НовыеНастройкиКД = ПараметрыЗаполнения.НастройкиКД; + КонецЕсли; + Если ПараметрыЗаполнения.Свойство("ПользовательскиеНастройкиКД") Тогда + НовыеПользовательскиеНастройкиКД = ПараметрыЗаполнения.ПользовательскиеНастройкиКД; + КонецЕсли; + КонецЕсли; + + Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда + НовыеНастройкиXML = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "НовыеНастройкиXML"); + Если ТипЗнч(НовыеНастройкиXML) = Тип("Строка") Тогда + Попытка + НовыеНастройкиКД = ОбщегоНазначения.ЗначениеИзСтрокиXML(НовыеНастройкиXML); + Исключение + НовыеНастройкиКД = Неопределено; + КонецПопытки; + НастройкиОтчета.НовыеНастройкиXML = Неопределено; + КонецЕсли; + + НовыеПользовательскиеНастройкиXML = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(НастройкиОтчета, "НовыеПользовательскиеНастройкиXML"); + Если ТипЗнч(НовыеПользовательскиеНастройкиXML) = Тип("Строка") Тогда + Попытка + НовыеПользовательскиеНастройкиКД = ОбщегоНазначения.ЗначениеИзСтрокиXML(НовыеПользовательскиеНастройкиXML); + Исключение + НовыеПользовательскиеНастройкиКД = Неопределено; + КонецПопытки; + НастройкиОтчета.НовыеПользовательскиеНастройкиXML = Неопределено; + КонецЕсли; + КонецЕсли; + + СброситьПользовательскиеНастройки = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "СброситьПользовательскиеНастройки", Ложь); + Если СброситьПользовательскиеНастройки Тогда + НовыеПользовательскиеНастройкиКД = Новый ПользовательскиеНастройкиКомпоновкиДанных; + КонецЕсли; + + Если НастройкиОтчета.События.ПередЗагрузкойНастроекВКомпоновщик Тогда + ОтчетОбъект = ОтчетыСервер.ОтчетОбъект(ПараметрыЗаполнения.ОтчетОбъектИлиПолноеИмя); + ОтчетОбъект.ПередЗагрузкойНастроекВКомпоновщик( + ЭтотОбъект, + НастройкиОтчета.КлючСхемы, + КлючТекущегоВарианта, + НовыеНастройкиКД, + НовыеПользовательскиеНастройкиКД); + КонецЕсли; + + Если ТипЗнч(НовыеНастройкиКД) = Тип("НастройкиКомпоновкиДанных") + И Отчет.КомпоновщикНастроек.Настройки <> НовыеНастройкиКД Тогда + Если ТипЗнч(ФормаПараметры.Отбор) = Тип("Структура") Тогда + ОтчетыСервер.УстановитьФиксированныеОтборы(ФормаПараметры.Отбор, НовыеНастройкиКД, НастройкиОтчета); + КонецЕсли; + Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(НовыеНастройкиКД); + КонецЕсли; + Если ТипЗнч(НовыеПользовательскиеНастройкиКД) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") + И Отчет.КомпоновщикНастроек.ПользовательскиеНастройки <> НовыеПользовательскиеНастройкиКД Тогда + Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(НовыеПользовательскиеНастройкиКД); + КонецЕсли; + + Если ПараметрыЗаполнения.Свойство("ФормаНастроекРасширенныйРежим") Тогда + НастройкиОтчета.Вставить("ФормаНастроекРасширенныйРежим", ПараметрыЗаполнения.ФормаНастроекРасширенныйРежим); + КонецЕсли; + Если ПараметрыЗаполнения.Свойство("ФормаНастроекИмяСтраницы") Тогда + НастройкиОтчета.Вставить("ФормаНастроекИмяСтраницы", ПараметрыЗаполнения.ФормаНастроекИмяСтраницы); + КонецЕсли; + + УсловияОтборов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "УсловияОтборов"); + Если УсловияОтборов <> Неопределено Тогда + УзелКД = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки; + Для Каждого КлючИЗначение Из УсловияОтборов Цикл + ПользовательскаяНастройкаКД = УзелКД.ПолучитьОбъектПоИдентификатору(КлючИЗначение.Ключ); + ПользовательскаяНастройкаКД.ВидСравнения = КлючИЗначение.Значение; + КонецЦикла; + КонецЕсли; + + Если ПараметрыЗаполнения.ВариантМодифицирован Тогда + ВариантМодифицирован = Истина; + КонецЕсли; + + Если ПараметрыЗаполнения.ПользовательскиеНастройкиМодифицированы Тогда + ПользовательскиеНастройкиМодифицированы = Истина; + КонецЕсли; + + Если НастройкиОтчета.ПрочитатьФлажокФормироватьСразуИзПользовательскихНастроек Тогда + НастройкиОтчета.ПрочитатьФлажокФормироватьСразуИзПользовательскихНастроек = Ложь; + НастройкиОтчета.ФормироватьСразу = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры( + Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства, + "ФормироватьСразу", + НастройкиОтчета.ФормироватьСразу); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура БыстрыеНастройкиУдалитьСтарыеЭлементыИКоманды(ПараметрыЗаполнения) + // Удаление элементов. + УдаляемыеЭлементы = Новый Массив; + ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, Элементы.БыстрыеНастройки.ПодчиненныеЭлементы); + ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, Элементы.ОсновныеНастройкиПараметров.ПодчиненныеЭлементы); + Для Каждого Элемент Из УдаляемыеЭлементы Цикл + Элементы.Удалить(Элемент); + КонецЦикла; + + // Удаление команд + УдаляемыеКоманды = Новый Массив; + Для Каждого Команда Из Команды Цикл + Если ПостоянныеКоманды.НайтиПоЗначению(Команда.Имя) = Неопределено Тогда + УдаляемыеКоманды.Добавить(Команда); + КонецЕсли; + КонецЦикла; + Для Каждого Команда Из УдаляемыеКоманды Цикл + Команды.Удалить(Команда); + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура ДобавитьПодчиненныеЭлементы(Куда, Откуда) + Для Каждого ПодчиненныйЭлемент Из Откуда Цикл + Если ТипЗнч(ПодчиненныйЭлемент) = Тип("ГруппаФормы") + Или ТипЗнч(ПодчиненныйЭлемент) = Тип("ТаблицаФормы") Тогда + ДобавитьПодчиненныеЭлементы(Куда, ПодчиненныйЭлемент.ПодчиненныеЭлементы); + КонецЕсли; + Куда.Добавить(ПодчиненныйЭлемент); + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура БыстрыеНастройкиСоздатьЭлементыУправленияИЗагрузитьЗначения(ПараметрыЗаполнения, Информация) + // Кэши для быстрого поиска с клиента. + СоответствиеПользовательскихНастроек = Новый Соответствие; + СоответствиеИменОбъектовМетаданных = Информация.СоответствиеИменОбъектовМетаданных; + СоответствиеОтключаемыхСвязей = Новый Соответствие; + СоответствиеНастроекВарианта = Новый Соответствие; + + // Удаление реквизитов + ПараметрыЗаполнения.Вставить("Реквизиты", Новый Структура); + ПараметрыЗаполнения.Реквизиты.Вставить("Добавляемые", Новый Массив); + ПараметрыЗаполнения.Реквизиты.Вставить("Удаляемые", Новый Массив); + ПараметрыЗаполнения.Реквизиты.Вставить("Существующие", Новый Соответствие); + ВсеРеквизиты = ПолучитьРеквизиты(); + Для Каждого Реквизит Из ВсеРеквизиты Цикл + ПолноеИмяРеквизита = Реквизит.Имя + ?(ПустаяСтрока(Реквизит.Путь), "", "." + Реквизит.Путь); + Если ПостоянныеРеквизиты.НайтиПоЗначению(ПолноеИмяРеквизита) = Неопределено Тогда + ПараметрыЗаполнения.Реквизиты.Существующие.Вставить(ПолноеИмяРеквизита, Реквизит.ТипЗначения); + КонецЕсли; + КонецЦикла; + + // Локальные переменные для установки значений и свойств после создания реквизитов. + ДобавленныеПоляВвода = Новый Структура; + ДобавленныеСтандартныеПериоды = Новый Массив; + + // Структура связей. + Связи = Информация.Связи; + + ИменаОсновныхРеквизитовФормы = Новый Соответствие; + ИменаЭлементовДляУстановкиСвязей = Новый Соответствие; + ИменаФлажковИспользование = Новый Соответствие; + НастройкиСВидомСравненияРавно = Новый Соответствие; + + КомпоновщикНастроекКД = Отчет.КомпоновщикНастроек; + ПользовательскиеНастройкиКД = КомпоновщикНастроекКД.ПользовательскиеНастройки; + НастройкиКД = КомпоновщикНастроекКД.ПолучитьНастройки(); + + ДополнительныеНастройкиЭлементов = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПользовательскиеНастройкиКД.ДополнительныеСвойства, "ЭлементыФормы"); + Если ДополнительныеНастройкиЭлементов = Неопределено Тогда + ДополнительныеНастройкиЭлементов = Новый Соответствие; + КонецЕсли; + + Режимы = РежимОтображенияЭлементаНастройкиКомпоновкиДанных; + + ШаблонНастройки = Новый Структура("Тип, Подтип, Шаблон, СтрокаДерева, + |ПользовательскаяНастройкаКД, Идентификатор, НастройкаВариантаКД, ДоступнаяНастройкаКД"); + ШаблонНастройки.Вставить("Иерархия", Ложь); + ШаблонНастройки.Вставить("ФлажокИспользование", Ложь); + ШаблонНастройки.Вставить("ВводСписком", Ложь); + ШаблонНастройки.Вставить("ОграничиватьВыборУказаннымиЗначениями", Ложь); + ШаблонНастройки = Новый ФиксированнаяСтруктура(ШаблонНастройки); + + ГруппыВывода = Новый Структура; + ГруппыВывода.Вставить("Быстрые", Новый Структура("Порядок, Размер", Новый Массив, 0)); + ГруппыВывода.Вставить("Основные", Новый Структура("Порядок, Размер", Новый Массив, 0)); + + ЕстьЗагрузкаДанныхИзФайла = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗагрузкаДанныхИзФайла"); + + ВыводимыеНастройки = Информация.ПользовательскиеНастройки.Скопировать(Новый Структура("ВыводРазрешен, Быстрая", Истина, Истина)); + ВыводимыеНастройки.Сортировать("ИндексВКоллекции Возр"); + + Прочее = Новый Структура; + Прочее.Вставить("Связи", Связи); + Прочее.Вставить("ОтчетОбъект", Неопределено); + Прочее.Вставить("ПараметрыЗаполнения", ПараметрыЗаполнения); + Прочее.Вставить("ПутьККомпоновщику", "Отчет.КомпоновщикНастроек"); + Прочее.Вставить("ЕстьЗагрузкаДанныхИзФайла", ЕстьЗагрузкаДанныхИзФайла); + Прочее.Вставить("ДополнительныеНастройкиЭлементов", ДополнительныеНастройкиЭлементов); + Прочее.Вставить("ИменаОсновныхРеквизитовФормы", ИменаОсновныхРеквизитовФормы); + Прочее.Вставить("ИменаЭлементовДляУстановкиСвязей", ИменаЭлементовДляУстановкиСвязей); + Прочее.Вставить("СоответствиеИменОбъектовМетаданных", СоответствиеИменОбъектовМетаданных); + Прочее.Вставить("ДобавленныеПоляВвода", ДобавленныеПоляВвода); + Прочее.Вставить("ДобавленныеСтандартныеПериоды", ДобавленныеСтандартныеПериоды); + Прочее.Вставить("ДобавленныеСпискиЗначений", Неопределено); + Прочее.Вставить("ЕстьОтборыСУсловиями", Ложь); + + ГруппаВывода = ГруппыВывода.Быстрые; + + Для Каждого СвойстваНастройки Из ВыводимыеНастройки Цикл + СоответствиеПользовательскихНастроек.Вставить(СвойстваНастройки.ИдентификаторЭлемента, СвойстваНастройки.ИдентификаторКД); + + Если СвойстваНастройки.НастройкаВарианта <> Неопределено Тогда + ПоискНастройкиВарианта = Новый Структура; + ПоискНастройкиВарианта.Вставить("ИдентификаторУзлаКД", СвойстваНастройки.СтрокаДерева.ИдентификаторКД); + ПоискНастройкиВарианта.Вставить("ИмяКоллекции", СвойстваНастройки.НастройкаВарианта.ИмяКоллекции); + ПоискНастройкиВарианта.Вставить("ИдентификаторЭлементаКД", СвойстваНастройки.НастройкаВарианта.ИдентификаторКД); + СоответствиеНастроекВарианта.Вставить(СвойстваНастройки.ИдентификаторЭлемента, ПоискНастройкиВарианта); + КонецЕсли; + + + ИмяПараметра = Строка(СвойстваНастройки.ПолеКД); + Если СвойстваНастройки.ТипЭлементов = "СтандартныйПериод" Тогда + ВывестиЭлементыНастройки(ЭтотОбъект, Элементы, СвойстваНастройки, ГруппыВывода.Основные, Прочее); + ИначеЕсли ИмяПараметра = "ПараметрыДанных.ТипОбъектаМетаданных" + Или ИмяПараметра = "ПараметрыДанных.ПолноеИмяОбъектаМетаданных" + Или ИмяПараметра = "ПараметрыДанных.ИмяТаблицы" Тогда + ВывестиЭлементыНастройки(ЭтотОбъект, Элементы, СвойстваНастройки, ГруппыВывода.Основные, Прочее); + Иначе + ВывестиЭлементыНастройки(ЭтотОбъект, Элементы, СвойстваНастройки, ГруппаВывода, Прочее); + КонецЕсли; + + КонецЦикла; + + Элементы.ИзменитьУсловияОтборов.Видимость = Прочее.ЕстьОтборыСУсловиями; + + ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппаВывода, Элементы.БыстрыеНастройки, 2, Ложь); + ОтчетыСервер.ВывестиПоПорядку(ЭтотОбъект, ГруппыВывода.Основные, Элементы.ОсновныеНастройкиПараметров, 4, Ложь); + + // Удаление старых и добавление новых реквизитов. + Для Каждого КлючИЗначение Из ПараметрыЗаполнения.Реквизиты.Существующие Цикл + ПараметрыЗаполнения.Реквизиты.Удаляемые.Добавить(КлючИЗначение.Ключ); + КонецЦикла; + ИзменитьРеквизиты(ПараметрыЗаполнения.Реквизиты.Добавляемые, ПараметрыЗаполнения.Реквизиты.Удаляемые); + + // Поля ввода (установка значений и связей). + Для Каждого КлючИЗначение Из ДобавленныеПоляВвода Цикл + ИмяРеквизита = КлючИЗначение.Ключ; + ЭтотОбъект[ИмяРеквизита] = КлючИЗначение.Значение; + Элементы[ИмяРеквизита].ПутьКДанным = ИмяРеквизита; + КонецЦикла; + + // Стандартные периоды (установка значений и связей). + Для Каждого СвойстваНастройки Из ДобавленныеСтандартныеПериоды Цикл + Дополнительно = СвойстваНастройки.Дополнительно; + ЭтотОбъект[Дополнительно.ЗначениеИмя] = СвойстваНастройки.Значение; + Элементы[Дополнительно.ПериодНачалоИмя].ПутьКДанным = Дополнительно.ЗначениеИмя + ".ДатаНачала"; + Элементы[Дополнительно.ПериодОкончаниеИмя].ПутьКДанным = Дополнительно.ЗначениеИмя + ".ДатаОкончания"; + КонецЦикла; + + // Сохранение соответствий для быстрого поиска в данные формы. + БыстрыйПоискПользовательскихНастроек = Новый ФиксированноеСоответствие(СоответствиеПользовательскихНастроек); + БыстрыйПоискИменОбъектовМетаданных = Новый ФиксированноеСоответствие(СоответствиеИменОбъектовМетаданных); + БыстрыйПоискОтключаемыхСвязей = Новый ФиксированноеСоответствие(СоответствиеОтключаемыхСвязей); + БыстрыйПоискНастроекВарианта = Новый ФиксированноеСоответствие(СоответствиеНастроекВарианта); + + ПользовательскиеНастройкиКД.ДополнительныеСвойства.Вставить("ЭлементыФормы", ДополнительныеНастройкиЭлементов); +КонецПроцедуры + +&НаСервере +Процедура НастройкиПечатиСохранить() + ЗаполнитьЗначенияСвойств(НастройкиОтчета.Печать, ОтчетТабличныйДокумент); +КонецПроцедуры + +&НаСервере +Процедура НастройкиПечатиВосстановить() + ЗаполнитьЗначенияСвойств(ОтчетТабличныйДокумент, НастройкиОтчета.Печать); +КонецПроцедуры + +&НаСервере +Процедура ПоказатьОшибкиФормирования(ИнформацияОбОшибке) + Если ТипЗнч(ИнформацияОбОшибке) = Тип("ИнформацияОбОшибке") Тогда + ОписаниеОшибки = СтандартныеПодсистемыКлиентСервер.ИсходнаяПричинаОшибки(ИнформацияОбОшибке); + ПодробноеПредставлениеОшибки = НСтр("ru = 'Ошибка при формировании:'") + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + Если ПустаяСтрока(ОписаниеОшибки) Тогда + ОписаниеОшибки = ПодробноеПредставлениеОшибки; + КонецЕсли; + Иначе + ОписаниеОшибки = ИнформацияОбОшибке; + ПодробноеПредставлениеОшибки = ""; + КонецЕсли; + + ОтображениеСостояния = Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния; + ОтображениеСостояния.Видимость = Истина; + ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.Неактуальность; + ОтображениеСостояния.Картинка = Новый Картинка; + ОтображениеСостояния.Текст = ОписаниеОшибки; + + Если Не ПустаяСтрока(ПодробноеПредставлениеОшибки) Тогда + ВариантыОтчетов.ПредупреждениеПоВарианту(НастройкиОтчета.ВариантСсылка, ПодробноеПредставлениеОшибки); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура РекурсивныйАнализНастроекКД(Коллекция, Соответствие) + Если Коллекция = Неопределено Тогда + РекурсивныйАнализНастроекКД(Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы, Соответствие); + РекурсивныйАнализНастроекКД(Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы, Соответствие); + РекурсивныйАнализНастроекКД(Отчет.КомпоновщикНастроек.ФиксированныеНастройки.Отбор.Элементы, Соответствие); + РекурсивныйАнализНастроекКД(Отчет.КомпоновщикНастроек.ФиксированныеНастройки.ПараметрыДанных.Элементы, Соответствие); + Иначе + // Регистрация значений включенных отборов и параметров КД, не выведенных в быстрый доступ. + Для Каждого НастройкаВарианта Из Коллекция Цикл + // ЭлементОтбораКомпоновкиДанных, ГруппаЭлементовОтбораКомпоновкиДанных, + // ЗначениеПараметраКомпоновкиДанных, ЗначениеПараметраНастроекКомпоновкиДанных. + Если ТипЗнч(НастройкаВарианта) = Тип("ЗначениеПараметраКомпоновкиДанных") Тогда + Значение = НастройкаВарианта.Значение; + Если ЗначениеИлиПолеКомпоновкиДанныхЗаполнено(Значение) Тогда + ПолеКД = Новый ПолеКомпоновкиДанных("ПараметрыДанных." + Строка(НастройкаВарианта.Параметр)); + Соответствие.Вставить(ПолеКД, Значение); + КонецЕсли; + РекурсивныйАнализНастроекКД(НастройкаВарианта.ЗначенияВложенныхПараметров, Соответствие); + Продолжить; + КонецЕсли; + + Если НастройкаВарианта.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ + И ЗначениеЗаполнено(НастройкаВарианта.ИдентификаторПользовательскойНастройки) Тогда + Продолжить; + КонецЕсли; + Если НастройкаВарианта.Использование <> Истина Тогда + Продолжить; + КонецЕсли; + + Если ТипЗнч(НастройкаВарианта) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда + РекурсивныйАнализНастроекКД(НастройкаВарианта.Элементы, Соответствие); + Продолжить; + КонецЕсли; + + Если ТипЗнч(НастройкаВарианта) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Значение = НастройкаВарианта.ПравоеЗначение; + Если ЗначениеИлиПолеКомпоновкиДанныхЗаполнено(Значение) Тогда + ПолеКД = НастройкаВарианта.ЛевоеЗначение; + Соответствие.Вставить(ПолеКД, Значение); + КонецЕсли; + ИначеЕсли ТипЗнч(НастройкаВарианта) = Тип("ЗначениеПараметраКомпоновкиДанных") Тогда + Значение = НастройкаВарианта.ПравоеЗначение; + Если ЗначениеИлиПолеКомпоновкиДанныхЗаполнено(Значение) Тогда + ПолеКД = Новый ПолеКомпоновкиДанных("ПараметрыДанных." + Строка(НастройкаВарианта.Параметр)); + Соответствие.Вставить(ПолеКД, Значение); + КонецЕсли; + РекурсивныйАнализНастроекКД(НастройкаВарианта.ЗначенияВложенныхПараметров, Соответствие); + КонецЕсли; + + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ЗначениеИлиПолеКомпоновкиДанныхЗаполнено(Значение) + Если ТипЗнч(Значение) = Тип("ПолеКомпоновкиДанных") Тогда + Возврат ЗначениеЗаполнено(Строка(Значение)); + Иначе + Возврат ЗначениеЗаполнено(Значение); + КонецЕсли; +КонецФункции + +&НаСервере +Процедура ЗаполнитьКомандыВыбораВариантов() + ВариантыФормы = РеквизитФормыВЗначение("ДобавленныеВарианты"); + ВариантыФормы.Колонки.Добавить("Найден", Новый ОписаниеТипов("Булево")); + + ПараметрыПоиска = Новый Структура; + ПараметрыПоиска.Вставить("Отчеты", ОтчетыКлиентСервер.ЗначениеВМассив(НастройкиОтчета.ОтчетСсылка)); + ПараметрыПоиска.Вставить("ПометкаУдаления", Ложь); + ПараметрыПоиска.Вставить("ПолучатьИтоговуюТаблицу", Истина); + РезультатПоиска = ВариантыОтчетов.НайтиСсылки(ПараметрыПоиска); + ТаблицаВариантов = РезультатПоиска.ТаблицаЗначений; + Если НастройкиОтчета.Внешний Тогда // Добавить предопределенные варианты внешнего отчета в таблицу вариантов. + Для Каждого ЭлементСписка Из НастройкиОтчета.ПредопределенныеВарианты Цикл + СтрокаТаблицы = ТаблицаВариантов.Добавить(); + СтрокаТаблицы.Наименование = ЭлементСписка.Представление; + СтрокаТаблицы.КлючВарианта = ЭлементСписка.Значение; + КонецЦикла; + КонецЕсли; + ТаблицаВариантов.Свернуть("Ссылка, КлючВарианта, Наименование"); + ТаблицаВариантов.Сортировать("Наименование Возр, КлючВарианта Возр"); + + Группа = Элементы.ВариантыОтчета; + КнопкиГруппы = Группа.ПодчиненныеЭлементы; + ПоследнийИндекс = ВариантыФормы.Количество() - 1; + Для Каждого СтрокаТаблицы Из ТаблицаВариантов Цикл + Найденные = ВариантыФормы.НайтиСтроки(Новый Структура("КлючВарианта, Найден", СтрокаТаблицы.КлючВарианта, Ложь)); + Если Найденные.Количество() = 1 Тогда + ВариантФормы = Найденные[0]; + ВариантФормы.Найден = Истина; + Кнопка = Элементы.Найти(ВариантФормы.ИмяКоманды); + Кнопка.Видимость = Истина; + Кнопка.Заголовок = СтрокаТаблицы.Наименование; + Элементы.Переместить(Кнопка, Группа); + Иначе + ПоследнийИндекс = ПоследнийИндекс + 1; + ВариантФормы = ВариантыФормы.Добавить(); + ЗаполнитьЗначенияСвойств(ВариантФормы, СтрокаТаблицы); + ВариантФормы.Найден = Истина; + ВариантФормы.ИмяКоманды = "ВыбратьВариант_" + Формат(ПоследнийИндекс, "ЧН=0; ЧГ="); + + Команда = Команды.Добавить(ВариантФормы.ИмяКоманды); + Команда.Действие = "Подключаемый_ЗагрузитьВариантОтчета"; + + Кнопка = Элементы.Добавить(ВариантФормы.ИмяКоманды, Тип("КнопкаФормы"), Группа); + Кнопка.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели; + Кнопка.ИмяКоманды = ВариантФормы.ИмяКоманды; + Кнопка.Заголовок = СтрокаТаблицы.Наименование; + + ПостоянныеКоманды.Добавить(ВариантФормы.ИмяКоманды); + КонецЕсли; + Кнопка.Пометка = (КлючТекущегоВарианта = СтрокаТаблицы.КлючВарианта); + КонецЦикла; + + Найденные = ВариантыФормы.НайтиСтроки(Новый Структура("Найден", Ложь)); + Для Каждого ВариантФормы Из Найденные Цикл + Кнопка = Элементы.Найти(ВариантФормы.ИмяКоманды); + Кнопка.Видимость = Ложь; + КонецЦикла; + + ВариантыФормы.Колонки.Удалить("Найден"); + ЗначениеВРеквизитФормы(ВариантыФормы, "ДобавленныеВарианты"); +КонецПроцедуры + +&НаСервере +Процедура ПослеИзмененияКлючевыхСостояний(ПараметрыЗаполнения) + Если ПараметрыЗаполнения.ИмяСобытия <> "ПослеФормирования" Тогда + Переформировать = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаполнения, "Переформировать"); + Если Переформировать = Истина Тогда + ОтображениеСостояния = Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния; + ОтображениеСостояния.Видимость = Истина; + ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.НеИспользовать; + ОтображениеСостояния.Картинка = БиблиотекаКартинок.ДлительнаяОперация48; + ОтображениеСостояния.Текст = НСтр("ru = 'Отчет формируется...'"); + ИначеЕсли ПараметрыЗаполнения.ВариантМодифицирован + Или ПараметрыЗаполнения.ПользовательскиеНастройкиМодифицированы Тогда + ОтображениеСостояния = Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния; + ОтображениеСостояния.Видимость = Истина; + ОтображениеСостояния.Текст = НСтр("ru = 'Изменились настройки. Нажмите ""Сформировать"" для получения отчета.'"); + Если Переформировать = Неопределено Тогда + ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.Неактуальность; + Иначе + ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.НеИспользовать; + КонецЕсли; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ЗарегистрироватьОтключаемыеСвязи(Информация) + ОтключаемыеСвязи.Очистить(); + Для Каждого ОписаниеСвязи Из Информация.ОтключаемыеСвязи Цикл + Связь = ОтключаемыеСвязи.Добавить(); + ЗаполнитьЗначенияСвойств(Связь, ОписаниеСвязи); + Связь.ВедущийИдентификаторВФорме = ОписаниеСвязи.Ведущий.ИдентификаторЭлемента; + Связь.ПодчиненныйИдентификаторВФорме = ОписаниеСвязи.Подчиненный.ИдентификаторЭлемента; + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура ОбновитьИнформациюОВариантеОтчета() + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 + | ВариантыОтчетов.Ссылка КАК ВариантСсылка, + | ВариантыОтчетов.ПредопределенныйВариант.КлючЗамеров КАК КлючЗамеров, + | ВариантыОтчетов.ПредопределенныйВариант КАК ПредопределенныйСсылка, + | ВЫБОР + | КОГДА ВариантыОтчетов.Пользовательский + | ИЛИ ВариантыОтчетов.Родитель.КлючВарианта ЕСТЬ NULL + | ТОГДА ВариантыОтчетов.КлючВарианта + | ИНАЧЕ ВариантыОтчетов.Родитель.КлючВарианта + | КОНЕЦ КАК ИмяИсходногоВарианта, + | ВариантыОтчетов.Пользовательский КАК Пользовательский + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.Отчет = &Отчет + | И ВариантыОтчетов.КлючВарианта = &КлючВарианта"; + Запрос.УстановитьПараметр("Отчет", НастройкиОтчета.ОтчетСсылка); + Запрос.УстановитьПараметр("КлючВарианта", КлючТекущегоВарианта); + + Выборка = Запрос.Выполнить().Выбрать(); + + НавигационнаяСсылка = ""; + Если Выборка.Следующий() Тогда + НастройкиОтчета.Вставить("ВариантСсылка", Выборка.ВариантСсылка); + НастройкиОтчета.Вставить("КлючЗамеров", Выборка.КлючЗамеров); + НастройкиОтчета.Вставить("ПредопределенныйСсылка", Выборка.ПредопределенныйСсылка); + НастройкиОтчета.Вставить("ИмяИсходногоВарианта", ?(Выборка.Пользовательский, КлючТекущегоВарианта, Выборка.ИмяИсходногоВарианта)); + НастройкиОтчета.Вставить("Пользовательский", Выборка.Пользовательский); + Если Не НастройкиОтчета.Внешний Тогда + НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(НастройкиОтчета.ВариантСсылка); + КонецЕсли; + Иначе + НастройкиОтчета.Вставить("ВариантСсылка", Неопределено); + НастройкиОтчета.Вставить("КлючЗамеров", Неопределено); + НастройкиОтчета.Вставить("ПредопределенныйСсылка", Неопределено); + НастройкиОтчета.Вставить("ИмяИсходногоВарианта", Неопределено); + НастройкиОтчета.Вставить("Пользовательский", Неопределено); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Функция ПолучитьПараметрыРасшифровкиОтчета(Расшифровка) + + ДанныеРасшифровки = ПолучитьИзВременногоХранилища(ОтчетДанныеРасшифровки); + ЗначениеРасшифровки = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0].Значение; + Если ЗначениеРасшифровки = NULL Тогда + ПараметрыРасшифровки = Неопределено; + Иначе + ПараметрыРасшифровки = Новый Структура; + ПараметрыРасшифровки.Вставить("ОткрытьОбъект", Истина); + ПараметрыРасшифровки.Вставить("Значение", ЗначениеРасшифровки); + КонецЕсли; + + Возврат ПараметрыРасшифровки; + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/SSL/src/Reports/УниверсальныйОтчет/Help/ru.html b/SSL/src/Reports/УниверсальныйОтчет/Help/ru.html new file mode 100644 index 000000000..39ac7363b --- /dev/null +++ b/SSL/src/Reports/УниверсальныйОтчет/Help/ru.html @@ -0,0 +1,14 @@ + +

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

                                +

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

                                +

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

                                +

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

                                +

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

                                +

                                Выбор данных для получения отчета

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

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

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

                                См. также:

                                + \ 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..388a483e8 --- /dev/null +++ b/SSL/src/Reports/УниверсальныйОтчет/ManagerModule.bsl @@ -0,0 +1,924 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Настройки размещения в панели отчетов. +// +// Параметры: +// Настройки - Коллекция - Передается "как есть" из ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// Может использоваться для получения настроек варианта этого отчета при помощи функции ВариантыОтчетов.ОписаниеВарианта(). +// НастройкиОтчета - СтрокаДереваЗначений - Настройки этого отчета, +// уже сформированные при помощи функции ВариантыОтчетов.ОписаниеОтчета() и готовые к изменению. +// См. "Свойства для изменения" процедуры ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// +// Описание: +// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(). +// +// Вспомогательные методы: +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// ВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Истина/Ложь); +// +// Примеры: +// +// 1. Установка описания варианта. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Описание = НСтр("ru = '<Описание>'"); +// +// 2. Отключение варианта отчета. +// НастройкиВарианта = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "<ИмяВарианта>"); +// НастройкиВарианта.Включен = Ложь; +// +Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт + + НастройкиОтчета.ОпределитьНастройкиФормы = Истина; + + МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); + МодульВариантыОтчетов.УстановитьРежимВыводаВПанеляхОтчетов(Настройки, НастройкиОтчета, Ложь); + + НастройкиВарианта = МодульВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "Основной"); + НастройкиВарианта.Описание = НСтр("ru = 'Универсальный отчет по справочникам, документам, регистрам.'"); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ИнициализироватьОтчет(КомпоновщикНастроек, + ОчиститьСтруктуру, + АдресСхемы = Неопределено, + НастройкиВарианта = Неопределено, + НастройкиПоУмолчанию = Неопределено) Экспорт + + ПараметрыОтчета = Новый Структура; + + // Если настройки варианта не передаются, то они берутся из настроек компоновщика. + Если НастройкиВарианта = Неопределено Тогда + НастройкиВарианта = КомпоновщикНастроек.Настройки; + КонецЕсли; + + ЭтоЗагруженнаяСхема = НастройкиВарианта.ДополнительныеСвойства.Свойство("СхемаКомпоновкиДанных"); + + Если ЭтоЗагруженнаяСхема Тогда + + ЗагруженнаяСхема = НастройкиВарианта.ДополнительныеСвойства.СхемаКомпоновкиДанных; + ВременныйФайл = ПолучитьИмяВременногоФайла(); + ЗагруженнаяСхема.Записать(ВременныйФайл); + + Чтение = Новый ЧтениеXML; + НовыйСXDTO = Новый СериализаторXDTO(ФабрикаXDTO); + Чтение.ОткрытьФайл(ВременныйФайл); + СКД = НовыйСXDTO.ПрочитатьXML(Чтение, Тип("СхемаКомпоновкиДанных")); + Чтение.Закрыть(); + УдалитьФайлы(ВременныйФайл); + + Иначе + + СКД = Отчеты.УниверсальныйОтчет.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); + ИсточникДанных = СКД.ИсточникиДанных.Добавить(); + ИсточникДанных.Имя = "ИсточникДанных1"; + ИсточникДанных.ТипИсточникаДанных = "Local"; + + НаборДанных = СКД.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); + НаборДанных.Имя = "НаборДанных1"; + НаборДанных.ИсточникДанных = ИсточникДанных.Имя; + + СКД.ПоляИтога.Очистить(); + + Если НастройкиВарианта.ДополнительныеСвойства.Свойство("ОтчетИнициализирован") Тогда + + ПараметрыОтчета.Вставить("ТипОбъектаМетаданных", НастройкиВарианта.ПараметрыДанных.Элементы.Найти("ТипОбъектаМетаданных").Значение); + Если ПустаяСтрока(ПараметрыОтчета.ТипОбъектаМетаданных) Тогда + ПараметрыОтчета.ТипОбъектаМетаданных = ТипОбъектаМетаданныхПоУмолчанию(); + КонецЕсли; + ПолноеИмяОбъектаМетаданных = НастройкиВарианта.ПараметрыДанных.Элементы.Найти("ПолноеИмяОбъектаМетаданных").Значение; + Если ПустаяСтрока(ПолноеИмяОбъектаМетаданных) Тогда + ПолноеИмяОбъектаМетаданных = ПолноеИмяОбъектаМетаданныхПоУмолчанию(КомпоновщикНастроек, ПараметрыОтчета.ТипОбъектаМетаданных); + КонецЕсли; + ПараметрыОтчета.Вставить("ПолноеИмяОбъектаМетаданных", ПолноеИмяОбъектаМетаданных); + ИмяТаблицы = НастройкиВарианта.ПараметрыДанных.Элементы.Найти("ИмяТаблицы").Значение; + ДоступныеТаблицы = ДоступныеТаблицы(КомпоновщикНастроек, ПараметрыОтчета.ТипОбъектаМетаданных, ПараметрыОтчета.ПолноеИмяОбъектаМетаданных); + Если ПустаяСтрока(ИмяТаблицы) Тогда + ИмяТаблицы = ДоступныеТаблицы[0].Значение; + КонецЕсли; + ПараметрыОтчета.Вставить("ИмяТаблицы", ИмяТаблицы); + Иначе + ПараметрыОтчета = НастройкиПоУмолчанию; + ДоступныеТаблицы = ДоступныеТаблицы(КомпоновщикНастроек, ПараметрыОтчета.ТипОбъектаМетаданных, ПараметрыОтчета.ПолноеИмяОбъектаМетаданных); + КонецЕсли; + СКД.НаборыДанных[0].Запрос = ТекстЗапросаПоМетаданным(ПараметрыОтчета); + + ДобавитьПоляНабораДанных(ПараметрыОтчета, СКД); + + // Для справочников и планов видов расчета пользовательский параметр Период не выводится. + Если ПараметрыОтчета.ТипОбъектаМетаданных = "Справочники" + Или ПараметрыОтчета.ТипОбъектаМетаданных = "ПланыВидовРасчета" Тогда + СКД.Параметры.Период.ОграничениеИспользования = Истина; + КонецЕсли; + Если ДоступныеТаблицы.Количество() <= 1 Тогда + СКД.Параметры.ИмяТаблицы.ОграничениеИспользования = Истина; + КонецЕсли; + КонецЕсли; + + СхемаКомпоновкиДанных = ПоместитьВоВременноеХранилище(СКД, АдресСхемы); + КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); + + Если ОчиститьСтруктуру Тогда + + КомпоновщикНастроек.Настройки.Выбор.Элементы.Очистить(); + КомпоновщикНастроек.Настройки.Структура.Очистить(); + КомпоновщикНастроек.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию); + + Если ЭтоЗагруженнаяСхема Тогда + КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("СхемаКомпоновкиДанных", ЗагруженнаяСхема); + Иначе + ДобавитьПоказатели(ПараметрыОтчета, КомпоновщикНастроек); + ПередКомпоновкойМакета(СКД, КомпоновщикНастроек); + + ПараметрОтчета = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ТипОбъектаМетаданных"); + ПараметрОтчета.Значение = ПараметрыОтчета.ТипОбъектаМетаданных; + + Для Каждого ПН Из КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл + Если ПН.Параметр = ПараметрОтчета.Параметр Тогда + ПН.Значение = ПараметрыОтчета.ТипОбъектаМетаданных; + КонецЕсли; + КонецЦикла; + + ПараметрОтчета = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ПолноеИмяОбъектаМетаданных"); + ПараметрОтчета.Значение = ПараметрыОтчета.ПолноеИмяОбъектаМетаданных; + + Для Каждого ПН Из КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл + Если ПН.Параметр = ПараметрОтчета.Параметр Тогда + ПН.Значение = ПараметрыОтчета.ПолноеИмяОбъектаМетаданных; + КонецЕсли; + КонецЦикла; + + ПараметрОтчета = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ИмяТаблицы"); + ПараметрОтчета.Значение = ПараметрыОтчета.ИмяТаблицы; + + Для Каждого ПН Из КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл + Если ПН.Параметр = ПараметрОтчета.Параметр Тогда + ПН.Значение = ПараметрыОтчета.ИмяТаблицы; + КонецЕсли; + КонецЦикла; + + КонецЕсли; + + КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ОтчетИнициализирован", Истина); + + КонецЕсли; + + Возврат СхемаКомпоновкиДанных; + +КонецФункции + +Процедура ПередКомпоновкойМакета(Схема, КомпоновщикНастроек) + + КомпоновщикНастроек.Настройки.Структура.Очистить(); + + Структура = КомпоновщикНастроек.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); + Структура.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); + Структура.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных")); + +КонецПроцедуры + +Функция ТекстЗапросаПоМетаданным(ПараметрыОтчета) + + ТекстЗапроса = " ВЫБРАТЬ РАЗРЕШЕННЫЕ " + Символы.ПС; + + Если ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыСведений" Тогда + ИмяТипаДанных = "РегистрСведений"; + ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыНакопления" Тогда + ИмяТипаДанных = "РегистрНакопления"; + ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "Справочники" Тогда + ИмяТипаДанных = "Справочник"; + ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "Документы" Тогда + ИмяТипаДанных = "Документ"; + ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" Тогда + ИмяТипаДанных = "РегистрБухгалтерии"; + ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыРасчета" Тогда + ИмяТипаДанных = "РегистрРасчета"; + ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "ПланыВидовРасчета" Тогда + ИмяТипаДанных = "ПланВидовРасчета"; + ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "БизнесПроцессы" Тогда + ИмяТипаДанных = "БизнесПроцесс"; + ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "Задачи" Тогда + ИмяТипаДанных = "Задача"; + КонецЕсли; + + ТекстЗапроса = Лев(ТекстЗапроса,СтрДлина(ТекстЗапроса)-2); + ТекстЗапроса = ТекстЗапроса + + "* ИЗ " + ИмяТипаДанных + "." + ПараметрыОтчета.ПолноеИмяОбъектаМетаданных; + + ЭтоТабличнаяЧастьИсточника = Ложь; + + Если НЕ ПустаяСтрока(ПараметрыОтчета.ИмяТаблицы) Тогда + + Если ИмяТипаДанных = "Справочник" ИЛИ ИмяТипаДанных = "Документ" + Или ИмяТипаДанных = "Задача" ИЛИ ИмяТипаДанных = "БизнесПроцесс" Тогда + // Если это табличная часть объекта то нужно проверить ее наличие + Если Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].ТабличныеЧасти.Найти(ПараметрыОтчета.ИмяТаблицы) <> Неопределено Тогда + ТекстЗапроса = ТекстЗапроса + "." + ПараметрыОтчета.ИмяТаблицы; + ЭтоТабличнаяЧастьИсточника = Истина; + КонецЕсли; + Иначе + ТекстЗапроса = ТекстЗапроса + "." + ПараметрыОтчета.ИмяТаблицы; + КонецЕсли; + + КонецЕсли; + + Если ПараметрыОтчета.ИмяТаблицы = "ОстаткиИОбороты" + Или ПараметрыОтчета.ИмяТаблицы = "Обороты" Тогда + ТекстЗапроса = ТекстЗапроса + "({&НачалоПериода} ,{&КонецПериода} ,Авто)"; + ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "Остатки" Тогда + ТекстЗапроса = ТекстЗапроса + "({&КонецПериода} ,)"; + ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "СрезПервых" Тогда + ТекстЗапроса = ТекстЗапроса + "({&НачалоПериода} ,)"; + ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "СрезПоследних" Тогда + ТекстЗапроса = ТекстЗапроса + "({&КонецПериода} ,)"; + КонецЕсли; + + ТекстЗапроса = ТекстЗапроса + " КАК ИсточникДанных"; + + Если ПараметрыОтчета.ТипОбъектаМетаданных = "Документы" + Или ПараметрыОтчета.ТипОбъектаМетаданных = "Задачи" + Или ПараметрыОтчета.ТипОбъектаМетаданных = "БизнесПроцессы" Тогда + Если ЭтоТабличнаяЧастьИсточника Тогда + ТекстЗапроса = ТекстЗапроса + " + |{ГДЕ + | (ИсточникДанных.Ссылка.Дата >= &НачалоПериода),(ИсточникДанных.Ссылка.Дата <= &КонецПериода)}"; + Иначе + ТекстЗапроса = ТекстЗапроса + " + |{ГДЕ + | (ИсточникДанных.Дата >= &НачалоПериода),(ИсточникДанных.Дата <= &КонецПериода)}"; + КонецЕсли; + ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыНакопления" И ПустаяСтрока(ПараметрыОтчета.ИмяТаблицы) Тогда + ТекстЗапроса = ТекстЗапроса + " + |{ГДЕ + | (ИсточникДанных.Период >= &НачалоПериода),(ИсточникДанных.Период <= &КонецПериода)}"; + ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" + И ПустаяСтрока(ПараметрыОтчета.ИмяТаблицы) Тогда + ТекстЗапроса = ТекстЗапроса + " + |{ГДЕ + | (ИсточникДанных.Период >= &НачалоПериода),(ИсточникДанных.Период <= &КонецПериода)}"; + ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыРасчета" Тогда + ТекстЗапроса = ТекстЗапроса + " + |ГДЕ + | ИсточникДанных.ПериодРегистрации >= &НачалоПериода И ИсточникДанных.ПериодРегистрации <= &КонецПериода"; + КонецЕсли; + + Возврат ТекстЗапроса; + +КонецФункции + +Функция ДоступныеТипыОбъектовМетаданных() Экспорт + + ЗначенияДляВыбора = Новый СписокЗначений; + + Если ЕстьОбъектыТипаМетаданных(Метаданные.Документы) Тогда + ЗначенияДляВыбора.Добавить("Документы", НСтр("ru = 'Документ'"), , БиблиотекаКартинок.Документ); + КонецЕсли; + Если ЕстьОбъектыТипаМетаданных(Метаданные.Справочники) Тогда + ЗначенияДляВыбора.Добавить("Справочники", НСтр("ru = 'Справочник'"), , БиблиотекаКартинок.Справочник); + КонецЕсли; + Если ЕстьОбъектыТипаМетаданных(Метаданные.РегистрыНакопления) Тогда + ЗначенияДляВыбора.Добавить("РегистрыНакопления", НСтр("ru = 'Регистр накопления'"), , БиблиотекаКартинок.РегистрНакопления); + КонецЕсли; + Если ЕстьОбъектыТипаМетаданных(Метаданные.РегистрыСведений) Тогда + ЗначенияДляВыбора.Добавить("РегистрыСведений", НСтр("ru = 'Регистр сведений'"), , БиблиотекаКартинок.РегистрСведений); + КонецЕсли; + Если ЕстьОбъектыТипаМетаданных(Метаданные.РегистрыБухгалтерии) Тогда + ЗначенияДляВыбора.Добавить("РегистрыБухгалтерии", НСтр("ru = 'Регистр бухгалтерии'"), , БиблиотекаКартинок.РегистрБухгалтерии); + КонецЕсли; + Если ЕстьОбъектыТипаМетаданных(Метаданные.РегистрыРасчета) Тогда + ЗначенияДляВыбора.Добавить("РегистрыРасчета", НСтр("ru = 'Регистр расчета'"), , БиблиотекаКартинок.РегистрРасчета); + КонецЕсли; + Если ЕстьОбъектыТипаМетаданных(Метаданные.ПланыВидовРасчета) Тогда + ЗначенияДляВыбора.Добавить("ПланыВидовРасчета", НСтр("ru = 'Планы видов расчета'"), , БиблиотекаКартинок.ПланВидовРасчета); + КонецЕсли; + Если ЕстьОбъектыТипаМетаданных(Метаданные.БизнесПроцессы) Тогда + ЗначенияДляВыбора.Добавить("БизнесПроцессы", НСтр("ru = 'Бизнес-процессы'"), , БиблиотекаКартинок.БизнесПроцесс); + КонецЕсли; + Если ЕстьОбъектыТипаМетаданных(Метаданные.Задачи) Тогда + ЗначенияДляВыбора.Добавить("Задачи", НСтр("ru = 'Задачи'"), , БиблиотекаКартинок.Задача); + КонецЕсли; + + Возврат ЗначенияДляВыбора; + +КонецФункции + +Функция ДоступныеОбъектыМетаданных(КомпоновщикНастроек, ТипОбъектаМетаданных = "") Экспорт + + ЗначенияДляВыбора = Новый СписокЗначений; + УдаляемыеОбъекты = Новый СписокЗначений; + + Если ПустаяСтрока(ТипОбъектаМетаданных) Тогда + ПараметрыОтчета = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы; + ПараметрТипОбъектаМетаданных = ПараметрыОтчета.Найти("ТипОбъектаМетаданных"); + ТипОбъектаМетаданных = ПараметрТипОбъектаМетаданных.Значение; + КонецЕсли; + Если ТипОбъектаМетаданных <> Неопределено И Не ПустаяСтрока(ТипОбъектаМетаданных) Тогда + Для каждого Объект Из Метаданные[ТипОбъектаМетаданных] Цикл + Если Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(Объект) + Или Не ПравоДоступа("Чтение", Объект) Тогда + Продолжить; + КонецЕсли; + Если НРег(Лев(Объект.Имя, 7)) = "удалить" Тогда + УдаляемыеОбъекты.Добавить(Объект.Имя, Объект.Синоним); + Иначе + ЗначенияДляВыбора.Добавить(Объект.Имя, Объект.Синоним); + КонецЕсли; + КонецЦикла; + ЗначенияДляВыбора.СортироватьПоПредставлению(НаправлениеСортировки.Возр); + УдаляемыеОбъекты.СортироватьПоПредставлению(НаправлениеСортировки.Возр); + + Для Каждого УдаляемыйОбъект Из УдаляемыеОбъекты Цикл + ЗначенияДляВыбора.Добавить(УдаляемыйОбъект.Значение, УдаляемыйОбъект.Представление); + КонецЦикла; + + КонецЕсли; + + Возврат ЗначенияДляВыбора; + +КонецФункции + +Функция ДоступныеТаблицы(КомпоновщикНастроек, ТипОбъектаМетаданных = "", ПолноеИмяОбъектаМетаданных = "") Экспорт + + ЗначенияДляВыбора = Новый СписокЗначений; + + ЭтоЗагруженнаяСхема = КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Свойство("СхемаКомпоновкиДанных"); + + Если ПустаяСтрока(ТипОбъектаМетаданных) Тогда + ПараметрыОтчета = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы; + ПараметрТипОбъектаМетаданных = ПараметрыОтчета.Найти("ТипОбъектаМетаданных"); + ТипОбъектаМетаданных = ПараметрТипОбъектаМетаданных.Значение; + КонецЕсли; + + Если ПустаяСтрока(ПолноеИмяОбъектаМетаданных) Тогда + ПараметрыОтчета = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы; + ПараметрТипОбъектаМетаданных = ПараметрыОтчета.Найти("ПолноеИмяОбъектаМетаданных"); + ПолноеИмяОбъектаМетаданных = ПараметрТипОбъектаМетаданных.Значение; + КонецЕсли; + + ПараметрыОтчета = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы; + ПараметрТипОбъектаМетаданных = ПараметрыОтчета.Найти("ТипОбъектаМетаданных"); + + ПараметрПолноеИмяОбъектаМетаданных = ПараметрыОтчета.Найти("ПолноеИмяОбъектаМетаданных"); + + Если (НЕ ЗначениеЗаполнено(ТипОбъектаМетаданных) + ИЛИ НЕ ЗначениеЗаполнено(ПолноеИмяОбъектаМетаданных)) + И НЕ КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Свойство("СхемаКомпоновкиДанных") Тогда + Возврат ЗначенияДляВыбора; + КонецЕсли; + + ЗначенияДляВыбора.Добавить("", НСтр("ru = 'Основные данные'")); + Если ТипОбъектаМетаданных = "Документы" + ИЛИ ТипОбъектаМетаданных = "Задачи" + ИЛИ ТипОбъектаМетаданных = "БизнесПроцессы" + ИЛИ ТипОбъектаМетаданных = "Справочники" Тогда + Для каждого ТабличнаяЧасть Из Метаданные[ТипОбъектаМетаданных][ПолноеИмяОбъектаМетаданных].ТабличныеЧасти Цикл + ЗначенияДляВыбора.Добавить(ТабличнаяЧасть.Имя, ТабличнаяЧасть.Синоним); + КонецЦикла; + ИначеЕсли ТипОбъектаМетаданных = "РегистрыНакопления" Тогда + Если Метаданные[ТипОбъектаМетаданных][ПолноеИмяОбъектаМетаданных].ВидРегистра = Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Остатки Тогда + ЗначенияДляВыбора.Добавить("ОстаткиИОбороты", НСтр("ru = 'Остатки и обороты'")); + Иначе + ЗначенияДляВыбора.Добавить("Обороты", НСтр("ru = 'Обороты'")); + КонецЕсли; + ИначеЕсли ТипОбъектаМетаданных = "РегистрыСведений" Тогда + Если Метаданные[ТипОбъектаМетаданных][ПолноеИмяОбъектаМетаданных].ПериодичностьРегистраСведений = Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда + Иначе + ЗначенияДляВыбора.Добавить("СрезПоследних", НСтр("ru = 'Срез последних'")); + ЗначенияДляВыбора.Добавить("СрезПервых", НСтр("ru = 'Срез первых'")); + КонецЕсли; + ИначеЕсли ТипОбъектаМетаданных = "РегистрыРасчета" Тогда + Если Метаданные[ТипОбъектаМетаданных][ПолноеИмяОбъектаМетаданных].ПериодДействия Тогда + ЗначенияДляВыбора.Добавить("ДанныеГрафика", НСтр("ru = 'Данные графика'")); + ЗначенияДляВыбора.Добавить("ФактическийПериодДействия", НСтр("ru = 'Фактический период действия'")); + КонецЕсли; + ИначеЕсли ТипОбъектаМетаданных = "ПланыВидовРасчета" Тогда + ЗначенияДляВыбора.Добавить("БазовыеВидыРасчета", НСтр("ru = 'Базовые виды расчета'")); + ЗначенияДляВыбора.Добавить("ВедущиеВидыРасчета", НСтр("ru = 'Ведущие виды расчета'")); + ЗначенияДляВыбора.Добавить("ВытесняющиеВидыРасчета", НСтр("ru = 'Вытесняющие виды расчета'")); + ИначеЕсли ТипОбъектаМетаданных = "РегистрыБухгалтерии" Тогда + ЗначенияДляВыбора.Добавить("ОстаткиИОбороты", НСтр("ru = 'Остатки и обороты'")); + ЗначенияДляВыбора.Добавить("Остатки", НСтр("ru = 'Остатки'")); + ЗначенияДляВыбора.Добавить("Обороты", НСтр("ru = 'Обороты'")); + ЗначенияДляВыбора.Добавить("ОборотыДтКт", НСтр("ru = 'Обороты Дт/Кт'")); + ЗначенияДляВыбора.Добавить("ДвиженияССубконто", НСтр("ru = 'Движения с субконто'")); + ИначеЕсли ЭтоЗагруженнаяСхема Тогда + ЗначенияДляВыбора.Очистить(); + КонецЕсли; + + Возврат ЗначенияДляВыбора; + +КонецФункции + +Функция ЕстьОбъектыТипаМетаданных(ТипМетаданных) + + Для каждого Объект Из ТипМетаданных Цикл + Если ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(Объект) + И ПравоДоступа("Чтение", Объект) Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +Функция ТипОбъектаМетаданныхПоУмолчанию() Экспорт + + ЗначенияДляВыбора = ДоступныеТипыОбъектовМетаданных(); + + Если Отчеты.УниверсальныйОтчет.ДоступныеТипыОбъектовМетаданных().НайтиПоЗначению("РегистрыНакопления") <> Неопределено Тогда + Возврат "РегистрыНакопления"; + Иначе + Возврат ЗначенияДляВыбора[0].Значение; + КонецЕсли; + +КонецФункции + +Функция ПолноеИмяОбъектаМетаданныхПоУмолчанию(КомпоновщикНастроек, ТипОбъектаМетаданных) Экспорт + + ЗначенияДляВыбора = ДоступныеОбъектыМетаданных(КомпоновщикНастроек, ТипОбъектаМетаданных); + + ЭтоЗагруженнаяСхема = КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Свойство("СхемаКомпоновкиДанных"); + Если Не ЭтоЗагруженнаяСхема И ЗначенияДляВыбора.Количество() > 0 Тогда + ЗначениеПоУмолчанию = ЗначенияДляВыбора[0].Значение; + КонецЕсли; + + Возврат ЗначениеПоУмолчанию; + +КонецФункции + +Функция ИмяТаблицыПоУмолчанию(КомпоновщикНастроек, ТипОбъектаМетаданных, ПолноеИмяОбъектаМетаданных) Экспорт + + ЗначенияДляВыбора = ДоступныеТаблицы(КомпоновщикНастроек, ТипОбъектаМетаданных, ПолноеИмяОбъектаМетаданных); + + ЭтоЗагруженнаяСхема = КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Свойство("СхемаКомпоновкиДанных"); + Если Не ЭтоЗагруженнаяСхема И ЗначенияДляВыбора.Количество() > 0 Тогда + ЗначениеПоУмолчанию = ЗначенияДляВыбора[0].Значение; + КонецЕсли; + + Возврат ЗначениеПоУмолчанию; + +КонецФункции + +Процедура ДобавитьПоляНабораДанных(ПараметрыОтчета, СхемаКомпоновкиДанных) + + Если ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыНакопления" + ИЛИ ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыСведений" + ИЛИ ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" + ИЛИ ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыРасчета" Тогда + + // Добавляем измерения + Для каждого Измерение Из Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].Измерения Цикл + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Измерение.Имя, Измерение.Синоним); + КонецЦикла; + + // Добавляем реквизиты + Если ПустаяСтрока(ПараметрыОтчета.ИмяТаблицы) Тогда + Для каждого Реквизит Из Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].Реквизиты Цикл + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Реквизит.Имя, Реквизит.Синоним); + КонецЦикла; + КонецЕсли; + + // Добавляем поля периода + Если ПараметрыОтчета.ИмяТаблицы = "ОстаткиИОбороты" + ИЛИ ПараметрыОтчета.ИмяТаблицы = "Обороты" + ИЛИ ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" И ПараметрыОтчета.ИмяТаблицы = ""Тогда + ДобавитьПоляПериодаВНаборДанных(СхемаКомпоновкиДанных.НаборыДанных[0]); + КонецЕсли; + + // Для регистров бухгалтерии важна настройка ролей + Если ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" Тогда + + ПолеСчет = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], "Счет", НСтр("ru = 'Счет'")); + ПолеСчет.Роль.ВыражениеВидаСчета = "Счет.Вид"; + ПолеСчет.Роль.Счет = Истина; + + Для НомерСубконто = 1 По 3 Цикл + ПолеСубконто = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], "Субконто" + НомерСубконто, НСтр("ru = 'Субконто'") + " " + НомерСубконто); + ПолеСубконто.Роль.Измерение = Истина; + ПолеСубконто.Роль.ИгнорироватьЗначенияNULL = Истина; + КонецЦикла; + + КонецЕсли; + + // Добавляем ресурсы + Для каждого Ресурс Из Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].Ресурсы Цикл + Если ПараметрыОтчета.ИмяТаблицы = "Обороты" Тогда + + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "Оборот", Ресурс.Синоним); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "Оборот"); + + Если ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" Тогда + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "ОборотДт", Ресурс.Синоним + " " + НСтр("ru = 'оборот Дт'"), Ресурс.Имя + "ОборотДт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "ОборотДт"); + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "ОборотКт", Ресурс.Синоним + " " + НСтр("ru = 'оборот Кт'"), Ресурс.Имя + "ОборотКт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "ОборотКт"); + + Если НЕ Ресурс.Балансовый Тогда + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "КорОборот", Ресурс.Синоним + " " + НСтр("ru = 'кор. оборот'"), Ресурс.Имя + "КорОборот"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "КорОборот"); + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "КорОборотДт", Ресурс.Синоним + " " + НСтр("ru = 'кор. оборот Дт'"), Ресурс.Имя + "КорОборотДт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "КорОборотДт"); + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "КорОборотКт", Ресурс.Синоним + " " + НСтр("ru = 'кор. оборот Кт'"), Ресурс.Имя + "КорОборотКт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "КорОборотКт"); + КонецЕсли; + КонецЕсли; + + ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "ОборотыДтКт" Тогда + + Если Ресурс.Балансовый Тогда + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "Оборот", Ресурс.Синоним); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "Оборот"); + Иначе + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "ОборотДт", Ресурс.Синоним + " " + НСтр("ru = 'оборот Дт'"), Ресурс.Имя + "ОборотДт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "ОборотДт"); + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "ОборотКт", Ресурс.Синоним + " " + НСтр("ru = 'оборот Кт'"), Ресурс.Имя + "ОборотКт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "ОборотКт"); + КонецЕсли; + + ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "ДвиженияССубконто" Тогда + + Если Ресурс.Балансовый Тогда + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя, Ресурс.Синоним); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя); + Иначе + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "Дт", Ресурс.Синоним + " " + НСтр("ru = 'Дт'"), Ресурс.Имя + "Дт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "Дт"); + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "Кт", Ресурс.Синоним + " " + НСтр("ru = 'Кт'"), Ресурс.Имя + "Кт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "Кт"); + КонецЕсли; + + ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "ОстаткиИОбороты" Тогда + + ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "НачальныйОстаток", Ресурс.Синоним + " " + НСтр("ru = 'нач. остаток'"), Ресурс.Имя + "НачальныйОстаток"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "НачальныйОстаток"); + + Если ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" Тогда + + ПолеНабора.Роль.Остаток = Истина; + ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.НачальныйОстаток; + ПолеНабора.Роль.ГруппаОстатка = "Ост" + Ресурс.Имя; + ПолеНабора.Роль.ПолеСчета = "Счет"; + + ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "НачальныйОстатокДт", Ресурс.Синоним + " " + НСтр("ru = 'нач. остаток Дт'"), Ресурс.Имя + "НачальныйОстатокДт"); + ПолеНабора.Роль.Остаток = Истина; + ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.НачальныйОстаток; + ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Дебет; + ПолеНабора.Роль.ПолеСчета = "Счет"; + ПолеНабора.Роль.ГруппаОстатка = "Ост" + Ресурс.Имя; + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "НачальныйОстатокДт"); + + ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "НачальныйОстатокКт", Ресурс.Синоним + " " + НСтр("ru = 'нач. остаток Кт'"), Ресурс.Имя + "НачальныйОстатокКт"); + ПолеНабора.Роль.Остаток = Истина; + ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.НачальныйОстаток; + ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Кредит; + ПолеНабора.Роль.ПолеСчета = "Счет"; + ПолеНабора.Роль.ГруппаОстатка = "Ост" + Ресурс.Имя; + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "НачальныйОстатокКт"); + + ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "НачальныйРазвернутыйОстатокДт", Ресурс.Синоним + " " + НСтр("ru = 'нач. развернутый остаток Дт'"), Ресурс.Имя + "НачальныйРазвернутыйОстатокДт"); + ПолеНабора.Роль.Остаток = Истина; + ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.НачальныйОстаток; + ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Дебет; + ПолеНабора.Роль.ПолеСчета = "Счет"; + ПолеНабора.Роль.ГруппаОстатка = "РазвОст" + Ресурс.Имя; + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "НачальныйРазвернутыйОстатокДт"); + + ПолеНабора =ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "НачальныйРазвернутыйОстатокКт", Ресурс.Синоним + " " + НСтр("ru = 'нач. развернутый остаток Кт'"), Ресурс.Имя + "НачальныйРазвернутыйОстатокКт"); + ПолеНабора.Роль.Остаток = Истина; + ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.НачальныйОстаток; + ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Кредит; + ПолеНабора.Роль.ПолеСчета = "Счет"; + ПолеНабора.Роль.ГруппаОстатка = "РазвОст" + Ресурс.Имя; + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "НачальныйРазвернутыйОстатокКт"); + КонецЕсли; + + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "Оборот", Ресурс.Синоним + " " + НСтр("ru = 'оборот'"), Ресурс.Имя + "Оборот"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "Оборот"); + + Если ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыНакопления" Тогда + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "Приход", Ресурс.Синоним + " " + НСтр("ru = 'приход'"), Ресурс.Имя + "Приход"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "Приход"); + + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "Расход", Ресурс.Синоним + " " + НСтр("ru = 'расход'"), Ресурс.Имя + "Расход"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "Расход"); + ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" Тогда + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "ОборотДт", Ресурс.Синоним + " " + НСтр("ru = 'оборот Дт'"), Ресурс.Имя + "ОборотДт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "ОборотДт"); + + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "ОборотКт", Ресурс.Синоним + " " + НСтр("ru = 'оборот Кт'"), Ресурс.Имя + "ОборотКт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "ОборотКт"); + КонецЕсли; + + ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "КонечныйОстаток", Ресурс.Синоним + " " + НСтр("ru = 'кон. остаток'"), Ресурс.Имя + "КонечныйОстаток"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "КонечныйОстаток"); + + Если ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" Тогда + + ПолеНабора.Роль.Остаток = Истина; + ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.КонечныйОстаток; + ПолеНабора.Роль.ПолеСчета = "Счет"; + ПолеНабора.Роль.ГруппаОстатка = "Ост" + Ресурс.Имя; + + ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "КонечныйОстатокДт", Ресурс.Синоним + " " + НСтр("ru = 'кон. остаток Дт'"), Ресурс.Имя + "КонечныйОстатокДт"); + ПолеНабора.Роль.Остаток = Истина; + ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.КонечныйОстаток; + ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Дебет; + ПолеНабора.Роль.ПолеСчета = "Счет"; + ПолеНабора.Роль.ГруппаОстатка = "Ост" + Ресурс.Имя; + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "КонечныйОстатокДт"); + + ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "КонечныйОстатокКт", Ресурс.Синоним + " " + НСтр("ru = 'кон. остаток Кт'"), Ресурс.Имя + "КонечныйОстатокКт"); + ПолеНабора.Роль.Остаток = Истина; + ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.КонечныйОстаток; + ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Кредит; + ПолеНабора.Роль.ПолеСчета = "Счет"; + ПолеНабора.Роль.ГруппаОстатка = "Ост" + Ресурс.Имя; + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "КонечныйОстатокКт"); + + ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "КонечныйРазвернутыйОстатокДт", Ресурс.Синоним + " " + НСтр("ru = 'кон. развернутый остаток Дт'"), Ресурс.Имя + "КонечныйРазвернутыйОстатокДт"); + ПолеНабора.Роль.Остаток = Истина; + ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.КонечныйОстаток; + ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Дебет; + ПолеНабора.Роль.ПолеСчета = "Счет"; + ПолеНабора.Роль.ГруппаОстатка = "РазвОст" + Ресурс.Имя; + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "КонечныйРазвернутыйОстатокДт"); + + ПолеНабора = ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "КонечныйРазвернутыйОстатокКт", Ресурс.Синоним + " " + НСтр("ru = 'кон. развернутый остаток Кт'"), Ресурс.Имя + "КонечныйРазвернутыйОстатокКт"); + ПолеНабора.Роль.Остаток = Истина; + ПолеНабора.Роль.ТипОстатка = ТипОстаткаКомпоновкиДанных.КонечныйОстаток; + ПолеНабора.Роль.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Кредит; + ПолеНабора.Роль.ПолеСчета = "Счет"; + ПолеНабора.Роль.ГруппаОстатка = "РазвОст" + Ресурс.Имя; + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "КонечныйРазвернутыйОстатокКт"); + КонецЕсли; + + ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "Остатки" Тогда + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "Остаток", Ресурс.Синоним + " " + НСтр("ru = 'остаток'"), Ресурс.Имя + "Остаток"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "Остаток"); + + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "ОстатокДт", Ресурс.Синоним + " " + НСтр("ru = 'остаток Дт'"), Ресурс.Имя + "ОстатокДт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "ОстатокДт"); + + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "ОстатокКт", Ресурс.Синоним + " " + НСтр("ru = 'остаток Кт'"), Ресурс.Имя + "ОстатокКт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "ОстатокКт"); + + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "РазвернутыйОстатокДт", Ресурс.Синоним + " " + НСтр("ru = 'развернутый остаток Дт'"), Ресурс.Имя + "РазвернутыйОстатокДт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "РазвернутыйОстатокДт"); + + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "РазвернутыйОстатокКт", Ресурс.Синоним + " " + НСтр("ru = 'развернутый остаток Кт'"), Ресурс.Имя + "РазвернутыйОстатокКт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "РазвернутыйОстатокКт"); + + ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыСведений" Тогда + + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя, Ресурс.Синоним); + Если Ресурс.Тип.СодержитТип(Тип("Число")) Тогда + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя, Ресурс.Имя); + КонецЕсли; + ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "" Тогда + + Если ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" Тогда + Если Ресурс.Балансовый Тогда + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя, Ресурс.Синоним); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя); + Иначе + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "Дт", Ресурс.Синоним + " " + НСтр("ru = 'Дт'"), Ресурс.Имя + "Дт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "Дт"); + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя + "Кт", Ресурс.Синоним + " " + НСтр("ru = 'Кт'"), Ресурс.Имя + "Кт"); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя + "Кт"); + КонецЕсли; + Иначе + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Ресурс.Имя, Ресурс.Синоним); + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Ресурс.Имя); + КонецЕсли; + + КонецЕсли; + КонецЦикла; + + ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "Документы" + ИЛИ ПараметрыОтчета.ТипОбъектаМетаданных = "Справочники" Тогда + + Если ПараметрыОтчета.ИмяТаблицы = "" Тогда + ОбъектМетаданных = Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных]; + Иначе + ОбъектМетаданных = Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].ТабличныеЧасти.Найти(ПараметрыОтчета.ИмяТаблицы); + Если ОбъектМетаданных = Неопределено Тогда + ОбъектМетаданных = Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных]; + КонецЕсли; + КонецЕсли; + + // Добавляем реквизиты + Для каждого Реквизит Из ОбъектМетаданных.Реквизиты Цикл + ДобавитьПолеНабораДанных(СхемаКомпоновкиДанных.НаборыДанных[0], Реквизит.Имя, Реквизит.Синоним); + Если Реквизит.Тип.СодержитТип(Тип("Число")) Тогда + ДобавитьПолеИтога(СхемаКомпоновкиДанных, Реквизит.Имя); + КонецЕсли; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +Функция ДобавитьПоляПериодаВНаборДанных(НаборДанных) + + СписокПериодов = Новый СписокЗначений; + СписокПериодов.Добавить("ПериодСекунда", НСтр("ru = 'Период секунда'")); + СписокПериодов.Добавить("ПериодМинута", НСтр("ru = 'Период минута'")); + СписокПериодов.Добавить("ПериодЧас", НСтр("ru = 'Период час'")); + СписокПериодов.Добавить("ПериодДень", НСтр("ru = 'Период день'")); + СписокПериодов.Добавить("ПериодНеделя", НСтр("ru = 'Период неделя'")); + СписокПериодов.Добавить("ПериодДекада", НСтр("ru = 'Период декада'")); + СписокПериодов.Добавить("ПериодМесяц", НСтр("ru = 'Период месяц'")); + СписокПериодов.Добавить("ПериодКвартал", НСтр("ru = 'Период квартал'")); + СписокПериодов.Добавить("ПериодПолугодие", НСтр("ru = 'Период полугодие'")); + СписокПериодов.Добавить("ПериодГод", НСтр("ru = 'Период год'")); + + ИмяПапки = "Периоды"; + СписокПолейНабораДанных = Новый СписокЗначений; + ПапкаПолейНабораДанных = НаборДанных.Поля.Добавить(Тип("ПапкаПолейНабораДанныхСхемыКомпоновкиДанных")); + ПапкаПолейНабораДанных.Заголовок = ИмяПапки; + ПапкаПолейНабораДанных.ПутьКДанным = ИмяПапки; + + ТипПериода = ТипПериодаКомпоновкиДанных.Основной; + + Для каждого Период Из СписокПериодов Цикл + ПолеНабораДанных = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); + ПолеНабораДанных.Поле = Период.Значение; + ПолеНабораДанных.Заголовок = Период.Представление; + ПолеНабораДанных.ПутьКДанным = ИмяПапки + "." + Период.Значение; + ПолеНабораДанных.Роль.ТипПериода = ТипПериода; + ПолеНабораДанных.Роль.НомерПериода = СписокПериодов.Индекс(Период); + СписокПолейНабораДанных.Добавить(ПолеНабораДанных); + ТипПериода = ТипПериодаКомпоновкиДанных.Дополнительный; + КонецЦикла; + + Возврат СписокПолейНабораДанных; + +КонецФункции + +// Добавляет в набор данных поле набора данных +Функция ДобавитьПолеНабораДанных(НаборДанных, Поле, Заголовок, ПутьКДанным = Неопределено) + + Если ПутьКДанным = Неопределено Тогда + ПутьКДанным = Поле; + КонецЕсли; + + ПолеНабораДанных = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); + ПолеНабораДанных.Поле = Поле; + ПолеНабораДанных.Заголовок = Заголовок; + ПолеНабораДанных.ПутьКДанным = ПутьКДанным; + Возврат ПолеНабораДанных; + +КонецФункции + +// Функция добавляет поле итога в схему компоновки данных. Если параметр Выражение не указан, используется Сумма(ПутьКДанным). +Функция ДобавитьПолеИтога(СхемаКомпоновкиДанных, ПутьКДанным, Выражение = Неопределено) + + Если Выражение = Неопределено Тогда + Выражение = "Сумма(" + ПутьКДанным + ")"; + КонецЕсли; + + ПолеИтога = СхемаКомпоновкиДанных.ПоляИтога.Добавить(); + ПолеИтога.ПутьКДанным = ПутьКДанным; + ПолеИтога.Выражение = Выражение; + Возврат ПолеИтога; + +КонецФункции + +Процедура ДобавитьПоказатели(ПараметрыОтчета, КомпоновщикНастроек) + + Если ПараметрыОтчета.ИмяТаблицы = "ОстаткиИОбороты" Тогда + ВыбранныеПоляНачальныйОстаток = КомпоновщикНастроек.Настройки.Выбор.Элементы.Добавить(Тип("ГруппаВыбранныхПолейКомпоновкиДанных")); + ВыбранныеПоляНачальныйОстаток.Заголовок = НСтр("ru = 'Нач. остаток'"); + ВыбранныеПоляНачальныйОстаток.Расположение = РасположениеПоляКомпоновкиДанных.Горизонтально; + Если ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыНакопления" Тогда + ВыбранныеПоляПриход = КомпоновщикНастроек.Настройки.Выбор.Элементы.Добавить(Тип("ГруппаВыбранныхПолейКомпоновкиДанных")); + ВыбранныеПоляПриход.Заголовок = НСтр("ru = 'Приход'"); + ВыбранныеПоляПриход.Расположение = РасположениеПоляКомпоновкиДанных.Горизонтально; + ВыбранныеПоляРасход = КомпоновщикНастроек.Настройки.Выбор.Элементы.Добавить(Тип("ГруппаВыбранныхПолейКомпоновкиДанных")); + ВыбранныеПоляРасход.Заголовок = НСтр("ru = 'Расход'"); + ВыбранныеПоляРасход.Расположение = РасположениеПоляКомпоновкиДанных.Горизонтально; + ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" Тогда + ВыбранныеПоляОбороты = КомпоновщикНастроек.Настройки.Выбор.Элементы.Добавить(Тип("ГруппаВыбранныхПолейКомпоновкиДанных")); + ВыбранныеПоляОбороты.Заголовок = НСтр("ru = 'Обороты'"); + ВыбранныеПоляОбороты.Расположение = РасположениеПоляКомпоновкиДанных.Горизонтально; + КонецЕсли; + ВыбранныеПоляКонечныйОстаток = КомпоновщикНастроек.Настройки.Выбор.Элементы.Добавить(Тип("ГруппаВыбранныхПолейКомпоновкиДанных")); + ВыбранныеПоляКонечныйОстаток.Заголовок = НСтр("ru = 'Кон. остаток'"); + ВыбранныеПоляКонечныйОстаток.Расположение = РасположениеПоляКомпоновкиДанных.Горизонтально; + КонецЕсли; + + Если ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыНакопления" Тогда + Для каждого Измерение Из Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].Измерения Цикл + ВыбранныеПоля = КомпоновщикНастроек.Настройки.Выбор; + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Измерение.Имя); + КонецЦикла; + Для каждого Ресурс Из Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].Ресурсы Цикл + ВыбранныеПоля = КомпоновщикНастроек.Настройки.Выбор; + Если ПараметрыОтчета.ИмяТаблицы = "Обороты" Тогда + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Ресурс.Имя + "Оборот"); + ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "ОстаткиИОбороты" Тогда + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоляНачальныйОстаток, Ресурс.Имя + "НачальныйОстаток", Ресурс.Синоним); + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоляПриход, Ресурс.Имя + "Приход", Ресурс.Синоним); + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоляРасход, Ресурс.Имя + "Расход", Ресурс.Синоним); + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоляКонечныйОстаток, Ресурс.Имя + "КонечныйОстаток", Ресурс.Синоним); + ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "" Тогда + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Ресурс.Имя); + КонецЕсли; + КонецЦикла; + ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыРасчета" Тогда + Для каждого Измерение Из Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].Измерения Цикл + ВыбранныеПоля = КомпоновщикНастроек.Настройки.Выбор; + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Измерение.Имя); + КонецЦикла; + Для каждого Ресурс Из Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].Ресурсы Цикл + ВыбранныеПоля = КомпоновщикНастроек.Настройки.Выбор; + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Ресурс.Имя); + КонецЦикла; + ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыСведений" Тогда + Для каждого Измерение Из Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].Измерения Цикл + ВыбранныеПоля = КомпоновщикНастроек.Настройки.Выбор; + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Измерение.Имя); + КонецЦикла; + Для каждого Ресурс Из Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].Ресурсы Цикл + ВыбранныеПоля = КомпоновщикНастроек.Настройки.Выбор; + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Ресурс.Имя); + КонецЦикла; + ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "РегистрыБухгалтерии" Тогда + Для каждого Ресурс Из Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].Ресурсы Цикл + ВыбранныеПоля = КомпоновщикНастроек.Настройки.Выбор; + Если ПараметрыОтчета.ИмяТаблицы = "Обороты" Тогда + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Ресурс.Имя + "ОборотДт", Ресурс.Синоним + " " + НСтр("ru = 'оборот Дт'")); + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Ресурс.Имя + "ОборотКт", Ресурс.Синоним + " " + НСтр("ru = 'оборот Кт'")); + ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "ОборотыДтКт" Тогда + Если Ресурс.Балансовый Тогда + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Ресурс.Имя + "Оборот", Ресурс.Синоним + " " + НСтр("ru = 'оборот'")); + Иначе + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Ресурс.Имя + "ОборотДт", Ресурс.Синоним + " " + НСтр("ru = 'оборот Дт'")); + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Ресурс.Имя + "ОборотКт", Ресурс.Синоним + " " + НСтр("ru = 'оборот Кт'")); + КонецЕсли; + ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "Остатки" Тогда + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Ресурс.Имя + "ОстатокДт", Ресурс.Синоним + " " + НСтр("ru = 'ост. Дт'")); + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Ресурс.Имя + "ОстатокКт", Ресурс.Синоним + " " + НСтр("ru = 'ост. Кт'")); + ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "ОстаткиИОбороты" Тогда + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоляНачальныйОстаток, Ресурс.Имя + "НачальныйОстатокДт", Ресурс.Синоним + " " + НСтр("ru = 'нач. ост. Дт'")); + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоляНачальныйОстаток, Ресурс.Имя + "НачальныйОстатокКт", Ресурс.Синоним + " " + НСтр("ru = 'нач. ост. Кт'")); + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоляОбороты, Ресурс.Имя + "ОборотДт", Ресурс.Синоним + " " + НСтр("ru = 'оборот Дт'")); + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоляОбороты, Ресурс.Имя + "ОборотКт", Ресурс.Синоним + " " + НСтр("ru = 'оборот Кт'")); + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоляКонечныйОстаток, Ресурс.Имя + "КонечныйОстатокДт", " " + Ресурс.Синоним + НСтр("ru = 'кон. ост. Дт'")); + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоляКонечныйОстаток, Ресурс.Имя + "КонечныйОстатокКт", " " + Ресурс.Синоним + НСтр("ru = 'кон. ост. Кт'")); + ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "ДвиженияССубконто" Тогда + Если Ресурс.Балансовый Тогда + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Ресурс.Имя, Ресурс.Синоним); + Иначе + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Ресурс.Имя + "Дт", Ресурс.Синоним + " " + НСтр("ru = 'Дт'")); + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Ресурс.Имя + "Кт", Ресурс.Синоним + " " + НСтр("ru = 'Кт'")); + КонецЕсли; + ИначеЕсли ПараметрыОтчета.ИмяТаблицы = "" Тогда + Если Ресурс.Балансовый Тогда + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Ресурс.Имя, Ресурс.Синоним); + Иначе + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Ресурс.Имя + "Дт", Ресурс.Синоним + " " + НСтр("ru = 'Дт'")); + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Ресурс.Имя + "Кт", Ресурс.Синоним + " " + НСтр("ru = 'Кт'")); + КонецЕсли; + КонецЕсли; + КонецЦикла; + ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "Документы" + ИЛИ ПараметрыОтчета.ТипОбъектаМетаданных = "Задачи" + ИЛИ ПараметрыОтчета.ТипОбъектаМетаданных = "БизнесПроцессы" + ИЛИ ПараметрыОтчета.ТипОбъектаМетаданных = "Справочники" Тогда + Если ПараметрыОтчета.ИмяТаблицы = "" Тогда + ОбъектМетаданных = Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных]; + Иначе + ОбъектМетаданных = Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].ТабличныеЧасти[ПараметрыОтчета.ИмяТаблицы]; + КонецЕсли; + ВыбранныеПоля = КомпоновщикНастроек.Настройки.Выбор; + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, "Ссылка"); + Для каждого Реквизит Из ОбъектМетаданных.Реквизиты Цикл + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Реквизит.Имя); + КонецЦикла; + ИначеЕсли ПараметрыОтчета.ТипОбъектаМетаданных = "ПланыВидовРасчета" Тогда + Если ПараметрыОтчета.ИмяТаблицы = "" Тогда + ОбъектМетаданных = Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных]; + Для каждого Реквизит Из ОбъектМетаданных.Реквизиты Цикл + ВыбранныеПоля = КомпоновщикНастроек.Настройки.Выбор; + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Реквизит.Имя); + КонецЦикла; + Иначе + ОбъектМетаданных = Метаданные[ПараметрыОтчета.ТипОбъектаМетаданных][ПараметрыОтчета.ПолноеИмяОбъектаМетаданных].СтандартныеТабличныеЧасти[ПараметрыОтчета.ИмяТаблицы]; + Для каждого Реквизит Из ОбъектМетаданных.СтандартныеРеквизиты Цикл + ВыбранныеПоля = КомпоновщикНастроек.Настройки.Выбор; + ОтчетыКлиентСервер.ДобавитьВыбранноеПоле(ВыбранныеПоля, Реквизит.Имя); + КонецЦикла; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли \ 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..96d2028a6 --- /dev/null +++ b/SSL/src/Reports/УниверсальныйОтчет/ObjectModule.bsl @@ -0,0 +1,268 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ПрограммныйИнтерфейс + +// Настройки общей формы отчета подсистемы "Варианты отчетов". +// +// Параметры: +// Форма - УправляемаяФорма, Неопределено - Форма отчета или форма настроек отчета. +// Неопределено когда вызов без контекста. +// КлючВарианта - Строка, Неопределено - Имя предопределенного +// или уникальный идентификатор пользовательского варианта отчета. +// Неопределено когда вызов без контекста. +// Настройки - Структура - +// +// * ФормироватьСразу - Булево - Значение по умолчанию для флажка "Формировать сразу". +// Когда флажок включен, то отчет будет формироваться: +// - После открытия; +// - После выбора пользовательских настроек; +// - После выбора другого варианта отчета. +// +// * ВыводитьСуммуВыделенныхЯчеек - Булево - Если Истина, то в отчете будет выводиться поле автосуммы. +// +// * СоответствиеПериодичностиПараметров - Соответствие - Ограничение списка выбора полей "СтандартныйПериод". +// ** Ключ - ПараметрКомпоновкиДанных - Имя параметра отчета, к которому применятся ограничения. +// ** Значение - ПеречислениеСсылка.ДоступныеПериодыОтчета - Ограничение периода отчета "снизу". +// +// * Печать - Структура - Параметры печати табличного документа "по умолчанию". +// ** ПолеСверху - Число - Отступ сверху при печати (в миллиметрах). +// ** ПолеСлева - Число - Отступ слева при печати (в миллиметрах). +// ** ПолеСнизу - Число - Отступ снизу при печати (в миллиметрах). +// ** ПолеСправа - Число - Отступ справа при печати (в миллиметрах). +// ** ОриентацияСтраницы - ОриентацияСтраницы - "Портрет" или "Ландшафт". +// ** АвтоМасштаб - Булево - Автоматически подгонять масштаб под размер страницы. +// ** МасштабПечати - Число - Масштаб изображения (в процентах). +// +// * События - Структура - События, для которых определены обработчики в модуле объекта отчета. +// +// ** ПриСозданииНаСервере - Булево - Если Истина, то в модуле объекта отчета +// следует определить обработчик события по шаблону: +// +// // Вызывается в обработчике одноименного события формы отчета после выполнения кода формы. +// // +// // Параметры: +// // Форма - УправляемаяФорма - Форма отчета. +// // Отказ - Передается из параметров обработчика "как есть". +// // СтандартнаяОбработка - Передается из параметров обработчика "как есть". +// // +// // См. также: +// // "УправляемаяФорма.ПриСозданииНаСервере" в синтакс-помощнике. +// // +// // Пример 1 - Добавление команды с обработчиком в ОтчетыКлиентПереопределяемый.ОбработчикКоманды: +// // Команда = Форма.Команды.Добавить("МояОсобеннаяКоманда"); +// // Команда.Действие = "Подключаемый_Команда"; +// // Команда.Заголовок = НСтр("ru = 'Моя команда...'"); +// // +// // Кнопка = Форма.Элементы.Добавить(Команда.Имя, Тип("КнопкаФормы"), Форма.Элементы.<ИмяПодменю>); +// // Кнопка.ИмяКоманды = Команда.Имя; +// // +// // Форма.ПостоянныеКоманды.Добавить(КомандаСоздать.Имя); +// // +// Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт +// // Обработка события. +// КонецПроцедуры +// +// ** ПередЗагрузкойВариантаНаСервере - Булево - Если Истина, то в модуле объекта отчета +// следует определить обработчик события по шаблону: +// +// // Вызывается в обработчике одноименного события формы отчета после выполнения кода формы. +// // +// // Параметры: +// // Форма - УправляемаяФорма - Форма отчета. +// // НовыеНастройкиКД - НастройкиКомпоновкиДанных - Настройки для загрузки в компоновщик настроек. +// // +// // См. также: +// // "Расширение управляемой формы для отчета.ПриЗагрузкеВариантаНаСервере" в синтакс-помощнике. +// // +// Процедура ПередЗагрузкойВариантаНаСервере(Форма, НовыеНастройкиКД) Экспорт +// // Обработка события. +// КонецПроцедуры +// +// ** ПриЗагрузкеВариантаНаСервере - Булево - Если Истина, то в модуле объекта отчета +// следует определить обработчик события по шаблону: +// +// // Вызывается в обработчике одноименного события формы отчета после выполнения кода формы. +// // +// // Параметры: +// // Форма - УправляемаяФорма - Форма отчета. +// // НовыеНастройкиКД - НастройкиКомпоновкиДанных - Настройки для загрузки в компоновщик настроек. +// // +// // См. также: +// // "Расширение управляемой формы для отчета.ПриЗагрузкеВариантаНаСервере" в синтакс-помощнике. +// // +// Процедура ПриЗагрузкеВариантаНаСервере(Форма, НовыеНастройкиКД) Экспорт +// // Обработка события. +// КонецПроцедуры +// +// ** ПриЗагрузкеПользовательскихНастроекНаСервере - Булево - Если Истина, то в модуле объекта отчета +// следует определить обработчик события по шаблону: +// +// // Вызывается в обработчике одноименного события формы отчета после выполнения кода формы. +// // +// // Параметры: +// // Форма - УправляемаяФорма - Форма отчета. +// // НовыеПользовательскиеНастройкиКД - ПользовательскиеНастройкиКомпоновкиДанных - +// // Пользовательские настройки для загрузки в компоновщик настроек. +// // +// // См. также: +// // "Расширение управляемой формы для отчета.ПриЗагрузкеПользовательскихНастроекНаСервере" +// // в синтакс-помощнике. +// // +// Процедура ПриЗагрузкеПользовательскихНастроекНаСервере(Форма, НовыеПользовательскиеНастройкиКД) Экспорт +// // Обработка события. +// КонецПроцедуры +// +// ** ПередЗаполнениемПанелиБыстрыхНастроек - Булево - Если Истина, то в модуле объекта отчета +// следует определить обработчик события по шаблону: +// +// // Вызывается до перезаполнения панели настроек формы отчета. +// // +// // Параметры: +// // Форма - УправляемаяФорма - Форма отчета. +// // ПараметрыЗаполнения - Структура - Параметры, которые будут загружены в отчет. +// // +// Процедура ПередЗаполнениемПанелиБыстрыхНастроек(Форма, ПараметрыЗаполнения) Экспорт +// // Обработка события. +// КонецПроцедуры +// +// ** ПослеЗаполненияПанелиБыстрыхНастроек - Булево - Если Истина, то в модуле объекта отчета +// следует определить обработчик события по шаблону: +// +// // Вызывается после перезаполнения панели настроек формы отчета. +// // +// // Параметры: +// // Форма - УправляемаяФорма - Форма отчета. +// // ПараметрыЗаполнения - Структура - Параметры, которые будут загружены в отчет. +// // +// Процедура ПослеЗаполненияПанелиБыстрыхНастроек(Форма, ПараметрыЗаполнения) Экспорт +// // Обработка события. +// КонецПроцедуры +// +// ** КонтекстныйВызовСервера - Булево - Если Истина, то в модуле объекта отчета +// следует определить обработчик события по шаблону: +// +// // Обработчик контекстного вызова сервера. +// // Позволяет выполнить контекстный вызов сервера когда это требуется из клиентского общего модуля. +// // Например, из ОтчетыКлиентПереопределяемый.ОбработчикКоманды(). +// // +// // Параметры: +// // Форма - УправляемаяФорма +// // Ключ - Строка - Ключ операции, которую необходимо выполнить в контекстном вызове. +// // Параметры - Структура - Параметры вызова сервера. +// // Результат - Структура - Результат работы сервера, возвращается на клиент. +// // +// // См. также: +// // ОбщаяФорма.ФормаОтчета.ВыполнитьКонтекстныйВызовСервера(). +// // +// Процедура КонтекстныйВызовСервера(Форма, Ключ, Параметры, Результат) Экспорт +// // Обработка события. +// КонецПроцедуры +// +// ** ПриОпределенииПараметровВыбора - Булево - Если Истина, то в модуле объекта отчета +// следует определить обработчик события по шаблону: +// +// // Вызывается в форме отчета перед выводом настройки. +// // Подробнее - см. ОтчетыПереопределяемый.ПриОпределенииПараметровВыбора(). +// // +// Процедура ПриОпределенииПараметровВыбора(Форма, СвойстваНастройки) Экспорт +// // Обработка события. +// КонецПроцедуры +// +// ** ДополнитьСвязиОбъектовМетаданных - Булево - Если Истина, то в модуле объекта отчета +// следует определить обработчик события по шаблону: +// +// // Дополнительные связи настроек этого отчета. +// // Подробнее - см. ОтчетыПереопределяемый.ДополнитьСвязиОбъектовМетаданных(). +// // +// Процедура ДополнитьСвязиОбъектовМетаданных(СвязиОбъектовМетаданных) Экспорт +// // Обработка события. +// КонецПроцедуры +// +Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт + + Настройки.События.ПередЗаполнениемПанелиБыстрыхНастроек = Истина; + Настройки.События.ПриОпределенииПараметровВыбора = Истина; + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытий + +// Вызывается в форме отчета перед выводом настройки. +// +// Параметры: +// Форма - УправляемаяФорма, Неопределено - Форма отчета. +// СвойстваНастройки - Структура - Описание настройки отчета, которая будет выведена в форме отчета. +// * ОписаниеТипов - ОписаниеТипов - +// Тип настройки. +// * ЗначенияДляВыбора - СписокЗначений - +// Объекты, которые будут предложены пользователю в списке выбора. +// Дополняет список объектов, уже выбранных пользователем ранее. +// * ЗапросЗначенийВыбора - Запрос - +// Возвращает объекты, которыми необходимо дополнить ЗначенияДляВыбора. +// Первой колонкой (с 0м индексом) должен выбираться объект, +// который следует добавить в ЗначенияДляВыбора.Значение. +// Для отключения автозаполнения +// в свойство ЗапросЗначенийВыбора.Текст следует записать пустую строку. +// * ОграничиватьВыборУказаннымиЗначениями - Булево - +// Когда Истина, то выбор пользователя будет ограничен значениями, +// указанными в ЗначенияДляВыбора (его конечным состоянием). +// +Процедура ПриОпределенииПараметровВыбора(Форма, СвойстваНастройки) Экспорт + + Если СвойстваНастройки.Тип = "ЗначениеПараметраНастроек" Тогда + ИмяПараметра = Строка(СвойстваНастройки.ПолеКД); + Если ИмяПараметра = "ПараметрыДанных.ТипОбъектаМетаданных" Тогда + СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями = Истина; + СвойстваНастройки.ЗначенияДляВыбора = Отчеты.УниверсальныйОтчет.ДоступныеТипыОбъектовМетаданных(); + ИначеЕсли ИмяПараметра = "ПараметрыДанных.ПолноеИмяОбъектаМетаданных" Тогда + СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями = Истина; + СвойстваНастройки.ЗначенияДляВыбора = Отчеты.УниверсальныйОтчет.ДоступныеОбъектыМетаданных(КомпоновщикНастроек); + ИначеЕсли ИмяПараметра = "ПараметрыДанных.ИмяТаблицы" Тогда + СвойстваНастройки.ОграничиватьВыборУказаннымиЗначениями = Истина; + СвойстваНастройки.ЗначенияДляВыбора = Отчеты.УниверсальныйОтчет.ДоступныеТаблицы(КомпоновщикНастроек); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ПередЗаполнениемПанелиБыстрыхНастроек(Форма, ПараметрыЗаполнения) Экспорт + + Если Форма.ИмяФормы <> "Отчет.УниверсальныйОтчет.Форма.ФормаОтчета" Тогда + Возврат; + КонецЕсли; + + НастройкиПоУмолчанию = Неопределено; + + ЭтоЗагруженнаяСхема = Форма.Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Свойство("СхемаКомпоновкиДанных"); + + Если Форма.Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Свойство("ОтчетИнициализирован") Тогда + ОтчетИнициализирован = Форма.Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.ОтчетИнициализирован; + Иначе + НастройкиПоУмолчанию = Новый Структура; + ТипОбъектаМетаданных = Отчеты.УниверсальныйОтчет.ТипОбъектаМетаданныхПоУмолчанию(); + НастройкиПоУмолчанию.Вставить("ТипОбъектаМетаданных", ТипОбъектаМетаданных); + НастройкиПоУмолчанию.Вставить("ПолноеИмяОбъектаМетаданных", Отчеты.УниверсальныйОтчет.ПолноеИмяОбъектаМетаданныхПоУмолчанию(Форма.Отчет.КомпоновщикНастроек, ТипОбъектаМетаданных)); + НастройкиПоУмолчанию.Вставить("ИмяТаблицы", Отчеты.УниверсальныйОтчет.ИмяТаблицыПоУмолчанию(Форма.Отчет.КомпоновщикНастроек, ТипОбъектаМетаданных, НастройкиПоУмолчанию.ПолноеИмяОбъектаМетаданных)); + ОтчетИнициализирован = Ложь; + КонецЕсли; + + Форма.НастройкиОтчета.АдресСхемы = + Отчеты.УниверсальныйОтчет.ИнициализироватьОтчет(Форма.Отчет.КомпоновщикНастроек, Не ОтчетИнициализирован, Форма.УникальныйИдентификатор,,НастройкиПоУмолчанию); + +КонецПроцедуры + +Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) + + ОтчетИнициализирован = КомпоновщикНастроек.Настройки.ДополнительныеСвойства.ОтчетИнициализирован; + + АдресСхемы = Отчеты.УниверсальныйОтчет.ИнициализироватьОтчет(КомпоновщикНастроек, Не ОтчетИнициализирован); + + СхемаКомпоновкиДанных = ПолучитьИзВременногоХранилища(АдресСхемы); + +КонецПроцедуры + +#КонецОбласти + +#КонецЕсли diff --git a/SSL/src/Reports/УниверсальныйОтчет/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/УниверсальныйОтчет/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs new file mode 100644 index 000000000..934c315f3 --- /dev/null +++ b/SSL/src/Reports/УниверсальныйОтчет/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -0,0 +1,150 @@ + + + + Период + + <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 + + DateTime + + + 0001-01-01T00:00:00 + true + &Период.ДатаНачала + + + КонецПериода + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Конец периода</v8:content> + </v8:item> + + + xs:dateTime + + DateTime + + + 0001-01-01T00:00:00 + true + &Период.ДатаОкончания + + + ТипОбъектаМетаданных + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Тип объекта метаданных</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + false + Always + + + ПолноеИмяОбъектаМетаданных + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Полное имя объекта метаданных</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + false + Always + + + ИмяТаблицы + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Имя таблицы</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + false + Always + + + Основной + + + ru + Универсальный отчет + + + + + + Период + + ThisYear + + 60febb46-2215-4d7a-ac48-eac4758847c6 + + + ТипОбъектаМетаданных + + 2c828e9b-e1cf-4bd7-9577-d8bc5ee2a609 + + + ПолноеИмяОбъектаМетаданных + + c24fcd20-6347-4f90-9622-f0d39c9bad09 + + + ИмяТаблицы + + 733b31cf-f43e-49be-a7f5-4ddb8ff9ecd5 + + + + + \ No newline at end of file diff --git a/SSL/src/Reports/УниверсальныйОтчет/УниверсальныйОтчет.mdo b/SSL/src/Reports/УниверсальныйОтчет/УниверсальныйОтчет.mdo new file mode 100644 index 000000000..cb1682ba7 --- /dev/null +++ b/SSL/src/Reports/УниверсальныйОтчет/УниверсальныйОтчет.mdo @@ -0,0 +1,68 @@ + + + + + + + УниверсальныйОтчет + + ru + Универсальный отчет + + true + Report.УниверсальныйОтчет.Form.ФормаОтчета + Report.УниверсальныйОтчет.Template.ОсновнаяСхемаКомпоновкиДанных + Report.УниверсальныйОтчет.Form.ФормаНастроекОтчета + Report.УниверсальныйОтчет.Form.ФормаВариантаОтчета + SettingsStorage.ХранилищеВариантовОтчетов + + + ru + + + + ФормаВариантаОтчета + + ru + Форма варианта отчета + + PersonalComputer + MobileDevice + + + ФормаНастроекОтчета + + ru + Форма настроек отчета + + + + ru + + + PersonalComputer + MobileDevice + + + ФормаОтчета + + ru + Форма отчета + + + + ru + + + PersonalComputer + MobileDevice + + + ОсновнаяСхемаКомпоновкиДанных + + ru + Основная схема компоновки данных + + DataCompositionSchema + + diff --git a/SSL/src/Roles/АдминистраторСистемы/Rights.rights b/SSL/src/Roles/АдминистраторСистемы/Rights.rights index d4457f18d..9852b61ae 100644 --- a/SSL/src/Roles/АдминистраторСистемы/Rights.rights +++ b/SSL/src/Roles/АдминистраторСистемы/Rights.rights @@ -75,13 +75,6 @@ true - - WebService.AddressSystem.Operation.Autocomplete - - Use - true - - Constant.КопироватьОбластиДанныхИзЭталонной @@ -260,7 +253,7 @@ - DataProcessor.СбросНастроекПроверкиКонтрагентов + DataProcessor.ИнструментыРазработчикаПроверкаКонтрагентов Use true @@ -454,101 +447,6 @@ true - - Configuration.БиблиотекаСтандартныхПодсистем - - Administration - true - - - DataAdministration - true - - - UpdateDataBaseConfiguration - true - - - ExclusiveMode - true - - - ActiveUsers - true - - - EventLog - true - - - ThinClient - true - - - WebClient - true - - - ThickClient - true - - - ExternalConnection - true - - - Automation - true - - - TechnicalSpecialistMode - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - - SaveUserData - true - - - ConfigurationExtensionsAdministration - true - - - InteractiveOpenExtDataProcessors - true - - - InteractiveOpenExtReports - true - - - Output - true - - CommonCommand.НастройкаОбменаСообщениями @@ -800,13 +698,6 @@ true - - WebService.AddressSystem.Operation.Ping - - Use - true - - InformationRegister.РейтингАктивностиОбластейДанных @@ -865,19 +756,12 @@ - Catalog.КлассификаторБанковРФ.Command.КлассификаторБанковРФ + Catalog.КлассификаторБанковРФ.Command.ЗагрузкаКлассификатораБанковРФ View true - - WebService.AddressSystem.Operation.GetActualInfo - - Use - true - - Constant.РежимИспользованияИнформационнойБазы @@ -1177,6 +1061,25 @@ true + + Constant.ЛогинДоступаКСервисуMorpher + + Read + true + + + Update + true + + + View + true + + + Edit + true + + InformationRegister.ПричиныИзмененияАдресныхСведений @@ -1574,7 +1477,7 @@ - InformationRegister.АдресныеОбъекты.Command.АвторизацияНаСайтеПоддержкиПользователей + InformationRegister.АдресныеОбъекты.Command.АвторизацияНаСайтеПоддержки View true @@ -1724,13 +1627,6 @@ true - - WebService.AddressSystem.Operation.SelectByPostalCode - - Use - true - - InformationRegister.ЗапросыРазрешенийНаИспользованиеВнешнихРесурсов @@ -1974,13 +1870,6 @@ true - - WebService.AddressSystem.Operation.GetExtraInfo - - Use - true - - InformationRegister.ОриентирыАдресныхОбъектов @@ -2946,13 +2835,6 @@ true - - WebService.AddressSystem.Operation.Analyze - - Use - true - - Constant.ПараметрыВариантовОтчетов @@ -2995,6 +2877,93 @@ 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 + + + ConfigurationExtensionsAdministration + true + + + Output + true + + InformationRegister.УровниСокращенийАдресныхСведений @@ -3181,7 +3150,7 @@ - Constant.СведенияОбОбновленииИБ + Constant.ИспользоватьСервисСклоненияMorpher Read true @@ -3260,13 +3229,6 @@ true - - WebService.AddressSystem.Operation.Select - - Use - true - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьОтчеты diff --git a/SSL/src/Roles/БазовыеПрава/Rights.rights b/SSL/src/Roles/БазовыеПрава/Rights.rights index 9b675a9da..b62467485 100644 --- a/SSL/src/Roles/БазовыеПрава/Rights.rights +++ b/SSL/src/Roles/БазовыеПрава/Rights.rights @@ -5,10 +5,6 @@ false Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения.Attribute.Свойство - - View - false - Edit false @@ -85,6 +81,10 @@ Read true + + View + true + Constant.КопироватьОбластиДанныхИзЭталонной @@ -117,10 +117,6 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Predefined - - View - false - Edit false @@ -128,10 +124,6 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Ref - - View - false - Edit false @@ -139,10 +131,6 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.DeletionMark - - View - false - Edit false @@ -150,10 +138,6 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.IsFolder - - View - false - Edit false @@ -161,10 +145,6 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Owner - - View - false - Edit false @@ -172,10 +152,6 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Parent - - View - false - Edit false @@ -183,10 +159,6 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Description - - View - false - Edit false @@ -194,10 +166,6 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.StandardAttribute.Code - - View - false - Edit false @@ -476,10 +444,6 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения - - View - false - Edit false @@ -503,6 +467,17 @@ false + + SessionParameter.БуферОбмена + + Get + true + + + Set + true + + SessionParameter.ТекущийПользователь @@ -644,6 +619,13 @@ false + + InformationRegister.НастройкиСинхронизацииФайлов + + Read + true + + InformationRegister.ОриентирыАдресныхОбъектов.Resource.Дополнительно @@ -964,6 +946,17 @@ true + + Constant.ЛогинДоступаКСервисуMorpher + + Read + true + + + View + true + + InformationRegister.ПричиныИзмененияАдресныхСведений @@ -975,6 +968,13 @@ true + + InformationRegister.СтатусыСинхронизацииФайловСОблачнымСервисом + + Read + true + + Constant.ИспользоватьДатыЗапретаЗагрузки @@ -1306,6 +1306,17 @@ false + + Constant.ОтложенноеОбновлениеЗавершеноУспешно + + Read + true + + + View + true + + Constant.ИзвлекатьТекстыФайловНаСервере @@ -1359,6 +1370,10 @@ Read true + + View + true + Constant.КаталогОбменаФайламиВМоделиСервисаLinux @@ -1472,6 +1487,17 @@ true + + Constant.ПараметрыБлокировкиРаботыСВнешнимиРесурсами + + Read + true + + + View + true + + InformationRegister.ДополнительныеАдресныеСведения @@ -1956,6 +1982,10 @@ Read true + + View + true + InformationRegister.ОриентирыАдресныхОбъектов.Dimension.Идентификатор @@ -2051,6 +2081,17 @@ true + + Constant.СведенияОБлокируемыхОбъектах + + Read + true + + + View + true + + DataProcessor.РекомендацияПоПовышениюСкоростиРаботы @@ -2318,6 +2359,13 @@ true + + Catalog.УчетныеЗаписиСинхронизацииФайлов + + Read + true + + Catalog.ИдентификаторыОбъектовРасширений @@ -2333,6 +2381,17 @@ true + + SessionParameter.ВыполняетсяЗаписьОбъекта + + Get + true + + + Set + true + + Constant.ИспользоватьИнтеграцию1СБухфон @@ -2379,6 +2438,10 @@ Read true + + View + true + CommonForm.ПоказателиВыделенныхЯчеек @@ -2586,10 +2649,6 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты - - View - false - Edit false @@ -2639,12 +2698,30 @@ true + + SessionParameter.ПараметрыОбработчикаОбновления + + Get + true + + + + CommonForm.ПредупреждениеБезопасности + + View + true + + Constant.ПараметрыВариантовОтчетов Read true + + View + true + InformationRegister.УровниСокращенийАдресныхСведений @@ -2659,10 +2736,6 @@ Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство - - View - false - Edit false @@ -2769,6 +2842,10 @@ Read true + + View + true + Constant.ИспользоватьЗаметки @@ -2839,6 +2916,17 @@ true + + Constant.ИспользоватьСервисСклоненияMorpher + + Read + true + + + View + true + + Constant.СведенияОбОбновленииИБ @@ -2871,6 +2959,17 @@ true + + Constant.ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно + + Read + true + + + View + true + + InformationRegister.ОриентирыАдресныхОбъектов.Resource.АдресныйОбъект @@ -3076,6 +3175,13 @@ true + + SessionParameter.РаботаСВнешнимиРесурсамиЗаблокирована + + Get + true + + CommonForm.ДлительнаяОперация @@ -3148,6 +3254,13 @@ true + + CommonForm.Сервис1СКонтрагентНеПодключен + + View + true + + Constant.ДетализироватьОбновлениеИБВЖурналеРегистрации @@ -3254,6 +3367,13 @@ true + + CommonForm.НовыйПароль + + View + true + + InformationRegister.ЗагруженныеВерсииАдресныхСведений diff --git a/SSL/src/Roles/БазовыеПраваВнешнегоПользователя/Rights.rights b/SSL/src/Roles/БазовыеПраваВнешнегоПользователя/Rights.rights index 8ca3687cb..671e90c02 100644 --- a/SSL/src/Roles/БазовыеПраваВнешнегоПользователя/Rights.rights +++ b/SSL/src/Roles/БазовыеПраваВнешнегоПользователя/Rights.rights @@ -85,6 +85,10 @@ Read true + + View + true + Constant.КопироватьОбластиДанныхИзЭталонной @@ -426,10 +430,6 @@ Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Страна - - View - false - Edit false @@ -478,6 +478,17 @@ false + + SessionParameter.БуферОбмена + + Get + true + + + Set + true + + SessionParameter.ТекущийПользователь @@ -545,10 +556,6 @@ Catalog.Пользователи.TabularSection.ДополнительныеРеквизиты - - View - false - Edit false @@ -612,6 +619,20 @@ false + + CommonForm.ЭлектроннаяПодпись + + View + true + + + + InformationRegister.НастройкиСинхронизацииФайлов + + Read + true + + InformationRegister.ОриентирыАдресныхОбъектов.Resource.Дополнительно @@ -778,10 +799,6 @@ Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.ЗначенияПолей - - View - false - Edit false @@ -838,17 +855,6 @@ true - - Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.ВидДляСписка - - View - false - - - Edit - false - - InformationRegister.НапоминанияПользователя.Attribute.Описание @@ -938,10 +944,6 @@ Catalog.Пользователи.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство - - View - false - Edit false @@ -958,6 +960,13 @@ true + + InformationRegister.СтатусыСинхронизацииФайловСОблачнымСервисом + + Read + true + + Constant.ИспользоватьДатыЗапретаЗагрузки @@ -1066,10 +1075,6 @@ Catalog.Пользователи.Attribute.Подготовлен - - View - false - Edit false @@ -1113,10 +1118,6 @@ Catalog.Пользователи.StandardAttribute.PredefinedDataName - - View - false - Edit false @@ -1124,10 +1125,6 @@ Catalog.Пользователи.StandardAttribute.Predefined - - View - false - Edit false @@ -1135,10 +1132,6 @@ Catalog.Пользователи.StandardAttribute.Ref - - View - false - Edit false @@ -1146,10 +1139,6 @@ Catalog.Пользователи.StandardAttribute.DeletionMark - - View - false - Edit false @@ -1157,10 +1146,6 @@ Catalog.Пользователи.StandardAttribute.IsFolder - - View - false - Edit false @@ -1168,10 +1153,6 @@ Catalog.Пользователи.StandardAttribute.Owner - - View - false - Edit false @@ -1179,10 +1160,6 @@ Catalog.Пользователи.StandardAttribute.Parent - - View - false - Edit false @@ -1190,10 +1167,6 @@ Catalog.Пользователи.StandardAttribute.Description - - View - false - Edit false @@ -1201,10 +1174,6 @@ Catalog.Пользователи.StandardAttribute.Code - - View - false - Edit false @@ -1311,13 +1280,6 @@ true - - CommonForm.ФормаПоиска - - View - true - - InformationRegister.УдалитьВерсииПодсистем.StandardAttribute.Active @@ -1362,6 +1324,17 @@ false + + Constant.ОтложенноеОбновлениеЗавершеноУспешно + + Read + true + + + View + true + + Constant.ИзвлекатьТекстыФайловНаСервере @@ -1386,10 +1359,6 @@ Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.АдресЭП - - View - false - Edit false @@ -1397,10 +1366,6 @@ Catalog.Пользователи.TabularSection.ДополнительныеРеквизиты.Attribute.Значение - - View - false - Edit false @@ -1419,6 +1384,10 @@ Read true + + View + true + Constant.КаталогОбменаФайламиВМоделиСервисаLinux @@ -1433,10 +1402,6 @@ Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефонаБезКодов - - View - false - Edit false @@ -1489,17 +1454,6 @@ false - - DataProcessor.ПолнотекстовыйПоискВДанных - - Use - true - - - View - true - - SessionParameter.ВерсияРасширений @@ -1532,6 +1486,17 @@ true + + Constant.ПараметрыБлокировкиРаботыСВнешнимиРесурсами + + Read + true + + + View + true + + InformationRegister.ДополнительныеАдресныеСведения @@ -1801,10 +1766,6 @@ Catalog.Пользователи.Attribute.Комментарий - - View - false - Edit false @@ -2066,6 +2027,10 @@ Read true + + View + true + InformationRegister.ОриентирыАдресныхОбъектов.Dimension.Идентификатор @@ -2134,10 +2099,6 @@ Catalog.Пользователи.Attribute.ИдентификаторПользователяИБ - - View - false - Edit false @@ -2172,6 +2133,17 @@ true + + Constant.СведенияОБлокируемыхОбъектах + + Read + true + + + View + true + + DataProcessor.РекомендацияПоПовышениюСкоростиРаботы @@ -2254,10 +2226,6 @@ Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Регион - - View - false - Edit false @@ -2343,6 +2311,13 @@ true + + Catalog.УчетныеЗаписиСинхронизацииФайлов + + Read + true + + Catalog.ИдентификаторыОбъектовРасширений @@ -2360,15 +2335,22 @@ Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Вид - - View - false - Edit false + + SessionParameter.ВыполняетсяЗаписьОбъекта + + Get + true + + + Set + true + + Constant.ИспользоватьИнтеграцию1СБухфон @@ -2415,6 +2397,10 @@ Read true + + View + true + CommonForm.ПоказателиВыделенныхЯчеек @@ -2436,10 +2422,6 @@ Catalog.Пользователи.Attribute.Недействителен - - View - false - Edit false @@ -2674,29 +2656,39 @@ - Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Представление + SessionParameter.ПараметрыОбработчикаОбновления - View - false + Get + true + + + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Представление Edit false + + CommonForm.ПредупреждениеБезопасности + + View + true + + Constant.ПараметрыВариантовОтчетов Read true + + View + true + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.НомерТелефона - - View - false - Edit false @@ -2715,10 +2707,6 @@ Catalog.Пользователи.Attribute.Служебный - - View - false - Edit false @@ -2836,6 +2824,10 @@ Read true + + View + true + Constant.ИспользоватьЗаметки @@ -2904,10 +2896,6 @@ Catalog.Пользователи.Attribute.Подразделение - - View - false - Edit false @@ -2937,15 +2925,22 @@ Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Тип - - View - false - Edit false + + Constant.ИспользоватьСервисСклоненияMorpher + + Read + true + + + View + true + + Constant.СведенияОбОбновленииИБ @@ -2971,6 +2966,17 @@ true + + Constant.ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно + + Read + true + + + View + true + + InformationRegister.ОриентирыАдресныхОбъектов.Resource.АдресныйОбъект @@ -2980,10 +2986,6 @@ Catalog.Пользователи.TabularSection.КонтактнаяИнформация - - View - false - Edit false @@ -3002,10 +3004,6 @@ Catalog.Пользователи.Attribute.ФизическоеЛицо - - View - false - Edit false @@ -3013,10 +3011,6 @@ Catalog.Пользователи.Attribute.СвойстваПользователяИБ - - View - false - Edit false @@ -3104,10 +3098,6 @@ Catalog.Пользователи.Attribute.ИдентификаторПользователяСервиса - - View - false - Edit false @@ -3221,6 +3211,13 @@ true + + SessionParameter.РаботаСВнешнимиРесурсамиЗаблокирована + + Get + true + + CommonForm.ДлительнаяОперация @@ -3248,10 +3245,6 @@ Catalog.Пользователи.TabularSection.ДополнительныеРеквизиты.Attribute.ТекстоваяСтрока - - View - false - Edit false @@ -3306,10 +3299,6 @@ Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.ДоменноеИмяСервера - - View - false - Edit false @@ -3392,6 +3381,13 @@ true + + CommonForm.НовыйПароль + + View + true + + InformationRegister.ЗагруженныеВерсииАдресныхСведений @@ -3412,10 +3408,6 @@ Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Город - - View - false - Edit false diff --git a/SSL/src/Roles/ВыводНаПринтерФайлБуферОбмена/Rights.rights b/SSL/src/Roles/ВыводНаПринтерФайлБуферОбмена/Rights.rights index d51e9cb8e..50ab45af5 100644 --- a/SSL/src/Roles/ВыводНаПринтерФайлБуферОбмена/Rights.rights +++ b/SSL/src/Roles/ВыводНаПринтерФайлБуферОбмена/Rights.rights @@ -2093,37 +2093,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - - Output - true - - Document.НазначениеОпросов.Attribute.ВозможностьПредварительногоСохранения @@ -12002,6 +11971,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + Output + true + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа diff --git a/SSL/src/Roles/ДобавлениеИзменениеБанков/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеБанков/Rights.rights index 6e88569ac..4fbe870ad 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеБанков/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеБанков/Rights.rights @@ -4,7 +4,7 @@ true false - Catalog.КлассификаторБанковРФ.Command.КлассификаторБанковРФ + Catalog.КлассификаторБанковРФ.Command.ЗагрузкаКлассификатораБанковРФ View true diff --git a/SSL/src/Roles/ДобавлениеИзменениеВариантовОтчетов/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеВариантовОтчетов/Rights.rights index b0ca8ac10..b22576cf3 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеВариантовОтчетов/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеВариантовОтчетов/Rights.rights @@ -3,6 +3,17 @@ false true false + + Catalog.ПредопределенныеВариантыОтчетовРасширений.Attribute.КлючВарианта + + View + false + + + Edit + false + + Catalog.ВариантыОтчетов @@ -63,6 +74,28 @@ true + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.КлючВарианта + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетовРасширений.Attribute.ХешНастроек + + View + false + + + Edit + false + + Catalog.ВариантыОтчетов.Command.Открыть @@ -115,13 +148,170 @@ Read true + + + Catalog.ПредопределенныеВариантыОтчетовРасширений.StandardAttribute.PredefinedDataName View - true + false - InputByString - true + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетовРасширений.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетовРасширений.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетовРасширений.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетовРасширений.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетовРасширений.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетовРасширений.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетовРасширений.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетовРасширений.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.TabularSection.Размещение + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетовРасширений.Attribute.НаименованияПараметровИОтборов + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетовРасширений.TabularSection.Размещение.Attribute.Важный + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетовРасширений.Attribute.Описание + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетовРасширений.TabularSection.Размещение.Attribute.Подсистема + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.TabularSection.Размещение.Attribute.Подсистема + + View + false + + + Edit + false @@ -177,6 +367,17 @@ true + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.Описание + + View + false + + + Edit + false + + CommonForm.ОтправкаТабличныхДокументовПоПочте @@ -184,6 +385,28 @@ true + + Catalog.ПредопределенныеВариантыОтчетовРасширений.Attribute.Отчет + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетовРасширений.TabularSection.Размещение + + View + false + + + Edit + false + + CommonForm.ФормаОтчета @@ -191,19 +414,165 @@ true + + Catalog.ПредопределенныеВариантыОтчетовРасширений.Attribute.Включен + + View + false + + + Edit + false + + Catalog.ПредопределенныеВариантыОтчетов Read true + + + Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.PredefinedDataName View - true + false - InputByString - true + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.ХешНастроек + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.Отчет + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.ВидимостьПоУмолчанию + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.КлючЗамеров + + View + false + + + Edit + false @@ -220,6 +589,17 @@ true + + Catalog.ПредопределенныеВариантыОтчетовРасширений.TabularSection.Размещение.Attribute.СмТакже + + View + false + + + Edit + false + + InformationRegister.НастройкиВариантовОтчетов @@ -244,18 +624,18 @@ - Constant.ПараметрыВариантовОтчетов + InformationRegister.ПредопределенныеВариантыОтчетовВерсийРасширений.Dimension.КлючВарианта - Read - true - - - View - true + Edit + false - InformationRegister.ПредопределенныеВариантыОтчетовВерсийРасширений.Dimension.КлючВарианта + Catalog.ПредопределенныеВариантыОтчетовРасширений.Attribute.ВидимостьПоУмолчанию + + View + false + Edit false @@ -268,6 +648,17 @@ false + + Catalog.ПредопределенныеВариантыОтчетов.TabularSection.Размещение.Attribute.СмТакже + + View + false + + + Edit + false + + Catalog.ВариантыОтчетов.Command.РазместитьВРазделах @@ -275,6 +666,50 @@ true + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.НаименованияПолей + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетовРасширений.Attribute.КлючЗамеров + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.Включен + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетовРасширений.Attribute.НаименованияПолей + + View + false + + + Edit + false + + Catalog.ВариантыОтчетов.Command.СброситьНастройкиРазмещения @@ -289,4 +724,70 @@ true + + Catalog.ПредопределенныеВариантыОтчетов.TabularSection.Размещение.Attribute.Важный + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.НаименованияПараметровИОтборов + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетовРасширений.Attribute.ГруппироватьПоОтчету + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.КлючевыеСлова + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.ГруппироватьПоОтчету + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетовРасширений.Attribute.КлючевыеСлова + + View + false + + + Edit + false + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights index 3fd5e172c..ac8f72f03 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights @@ -141,6 +141,10 @@ InformationRegister.Удалить_АктивныеПредметыВзаимодействий.Dimension.Предмет + + View + false + Edit false @@ -970,18 +974,11 @@ - InformationRegister.Удалить_АктивныеПредметыВзаимодействий - - Read - true - + InformationRegister.Удалить_АктивныеПредметыВзаимодействий.StandardAttribute.Active View - true + false - - - InformationRegister.Удалить_АктивныеПредметыВзаимодействий.StandardAttribute.Active Edit false @@ -989,6 +986,10 @@ InformationRegister.Удалить_АктивныеПредметыВзаимодействий.StandardAttribute.LineNumber + + View + false + Edit false @@ -996,6 +997,10 @@ InformationRegister.Удалить_АктивныеПредметыВзаимодействий.StandardAttribute.Recorder + + View + false + Edit false @@ -1003,6 +1008,10 @@ InformationRegister.Удалить_АктивныеПредметыВзаимодействий.StandardAttribute.Period + + View + false + Edit false diff --git a/SSL/src/Roles/ДобавлениеИзменениеДатЗапретаИзменения/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеДатЗапретаИзменения/Rights.rights new file mode 100644 index 000000000..8c2b69329 --- /dev/null +++ b/SSL/src/Roles/ДобавлениеИзменениеДатЗапретаИзменения/Rights.rights @@ -0,0 +1,82 @@ + + + false + true + false + + ChartOfCharacteristicTypes.РазделыДатЗапретаИзменения + + Read + true + + + View + true + + + InputByString + true + + + + Report.ДатыЗапретаИзменения + + Use + true + + + View + true + + + + InformationRegister.ДатыЗапретаИзменения.Command.ДатыЗапретаИзмененияДанных + + View + true + + + + InformationRegister.ДатыЗапретаИзменения + + Read + true + + // Запрет доступа к датам запрета загрузки. +ДатыЗапретаИзменения ГДЕ НЕ( + ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.Пользователи) + И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.ГруппыПользователей) + И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.ВнешниеПользователи) + И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.ГруппыВнешнихПользователей) + И ДатыЗапретаИзменения.Пользователь <> ЗНАЧЕНИЕ(Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей)) + + + + + Update + true + + // Запрет доступа к датам запрета загрузки. +ДатыЗапретаИзменения ГДЕ НЕ( + ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.Пользователи) + И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.ГруппыПользователей) + И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.ВнешниеПользователи) + И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Справочник.ГруппыВнешнихПользователей) + И ДатыЗапретаИзменения.Пользователь <> ЗНАЧЕНИЕ(Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей)) + + + + + View + true + + + Edit + true + + + TotalsControl + true + + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеДатЗапретаИзменения/ДобавлениеИзменениеДатЗапретаИзменения.mdo b/SSL/src/Roles/ДобавлениеИзменениеДатЗапретаИзменения/ДобавлениеИзменениеДатЗапретаИзменения.mdo new file mode 100644 index 000000000..a1acbf5c2 --- /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 e641af4cf..eba055727 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеКалендарныхГрафиков/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеКалендарныхГрафиков/Rights.rights @@ -65,4 +65,23 @@ true + + Constant.ИспользоватьНесколькоПроизводственныхКалендарей + + Read + true + + + Update + true + + + View + true + + + Edit + true + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights index 0a618cdc2..0b98f6dd0 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights @@ -42,37 +42,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - - Output - true - - InformationRegister.СостоянияРассылокОтчетов.Resource.СОшибками @@ -145,6 +114,37 @@ true + + Configuration.БиблиотекаСтандартныхПодсистем + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + Output + true + + InformationRegister.СостоянияРассылокОтчетов.Dimension.Рассылка diff --git a/SSL/src/Roles/ЗапускAutomation/Rights.rights b/SSL/src/Roles/ЗапускAutomation/Rights.rights index 6d5c6afcc..b25e25b97 100644 --- a/SSL/src/Roles/ЗапускAutomation/Rights.rights +++ b/SSL/src/Roles/ЗапускAutomation/Rights.rights @@ -2093,37 +2093,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - Automation - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - Document.НазначениеОпросов.Attribute.ВозможностьПредварительногоСохранения @@ -12002,6 +11971,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + Automation + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа diff --git a/SSL/src/Roles/ЗапускВебКлиента/Rights.rights b/SSL/src/Roles/ЗапускВебКлиента/Rights.rights index ccd644114..6705b6d85 100644 --- a/SSL/src/Roles/ЗапускВебКлиента/Rights.rights +++ b/SSL/src/Roles/ЗапускВебКлиента/Rights.rights @@ -2082,37 +2082,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - WebClient - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - Document.НазначениеОпросов.Attribute.ВозможностьПредварительногоСохранения @@ -11815,6 +11784,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + WebClient + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа diff --git a/SSL/src/Roles/ЗапускТолстогоКлиента/Rights.rights b/SSL/src/Roles/ЗапускТолстогоКлиента/Rights.rights index aeafd315f..85931bc15 100644 --- a/SSL/src/Roles/ЗапускТолстогоКлиента/Rights.rights +++ b/SSL/src/Roles/ЗапускТолстогоКлиента/Rights.rights @@ -2082,37 +2082,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - ThickClient - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - Document.НазначениеОпросов.Attribute.ВозможностьПредварительногоСохранения @@ -11815,6 +11784,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + ThickClient + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа diff --git a/SSL/src/Roles/ЗапускТонкогоКлиента/Rights.rights b/SSL/src/Roles/ЗапускТонкогоКлиента/Rights.rights index a4704ec23..f48673eb3 100644 --- a/SSL/src/Roles/ЗапускТонкогоКлиента/Rights.rights +++ b/SSL/src/Roles/ЗапускТонкогоКлиента/Rights.rights @@ -2082,37 +2082,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - ThinClient - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - Document.НазначениеОпросов.Attribute.ВозможностьПредварительногоСохранения @@ -11815,6 +11784,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + ThinClient + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа diff --git a/SSL/src/Roles/Интеграция1СБухфон/Интеграция1СБухфон.mdo b/SSL/src/Roles/Интеграция1СБухфон/Интеграция1СБухфон.mdo index e3c7462bc..8d62f2f0f 100644 --- a/SSL/src/Roles/Интеграция1СБухфон/Интеграция1СБухфон.mdo +++ b/SSL/src/Roles/Интеграция1СБухфон/Интеграция1СБухфон.mdo @@ -3,6 +3,6 @@ Интеграция1СБухфон ru - Интеграция с 1С-Бухфон + Интеграция с 1С-Коннект diff --git a/SSL/src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Rights.rights b/SSL/src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Rights.rights index c9f8994b6..71f2f91ca 100644 --- a/SSL/src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Rights.rights +++ b/SSL/src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Rights.rights @@ -2093,41 +2093,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - - InteractiveOpenExtDataProcessors - true - - - InteractiveOpenExtReports - true - - Document.НазначениеОпросов.Attribute.ВозможностьПредварительногоСохранения @@ -12006,6 +11971,41 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + InteractiveOpenExtDataProcessors + true + + + InteractiveOpenExtReports + true + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа diff --git a/SSL/src/Roles/ИспользованиеВариантовОтчетов/Rights.rights b/SSL/src/Roles/ИспользованиеВариантовОтчетов/Rights.rights index 37cc5fef0..b7dba0a03 100644 --- a/SSL/src/Roles/ИспользованиеВариантовОтчетов/Rights.rights +++ b/SSL/src/Roles/ИспользованиеВариантовОтчетов/Rights.rights @@ -132,6 +132,10 @@ Catalog.ПредопределенныеВариантыОтчетов.Attribute.КлючВарианта + + View + false + Edit false @@ -178,6 +182,10 @@ Catalog.ПредопределенныеВариантыОтчетов.TabularSection.Размещение + + View + false + Edit false @@ -210,6 +218,10 @@ Catalog.ПредопределенныеВариантыОтчетов.TabularSection.Размещение.Attribute.Подсистема + + View + false + Edit false @@ -288,6 +300,10 @@ Catalog.ПредопределенныеВариантыОтчетов.Attribute.Описание + + View + false + Edit false @@ -313,17 +329,24 @@ Read true + + + Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.PredefinedDataName View - true + false - InputByString - true + Edit + false Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.Predefined + + View + false + Edit false @@ -331,6 +354,10 @@ Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.Ref + + View + false + Edit false @@ -338,6 +365,10 @@ Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.DeletionMark + + View + false + Edit false @@ -345,6 +376,10 @@ Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.IsFolder + + View + false + Edit false @@ -352,6 +387,10 @@ Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.Owner + + View + false + Edit false @@ -359,6 +398,10 @@ Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.Parent + + View + false + Edit false @@ -366,6 +409,10 @@ Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.Description + + View + false + Edit false @@ -373,6 +420,21 @@ Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.ХешНастроек + + View + false + Edit false @@ -380,6 +442,10 @@ Catalog.ПредопределенныеВариантыОтчетов.Attribute.Отчет + + View + false + Edit false @@ -387,6 +453,21 @@ Catalog.ПредопределенныеВариантыОтчетов.Attribute.ВидимостьПоУмолчанию + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.КлючЗамеров + + View + false + Edit false @@ -484,15 +565,12 @@ false - - Constant.ПараметрыВариантовОтчетов - - Read - true - - Catalog.ПредопределенныеВариантыОтчетов.TabularSection.Размещение.Attribute.СмТакже + + View + false + Edit false @@ -505,8 +583,23 @@ true + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.НаименованияПолей + + View + false + + + Edit + false + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.Включен + + View + false + Edit false @@ -514,6 +607,10 @@ Catalog.ПредопределенныеВариантыОтчетов.TabularSection.Размещение.Attribute.Важный + + View + false + Edit false @@ -526,6 +623,39 @@ false + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.НаименованияПараметровИОтборов + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.КлючевыеСлова + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.ГруппироватьПоОтчету + + View + false + + + Edit + false + + InformationRegister.НастройкиВариантовОтчетов.Dimension.Пользователь diff --git a/SSL/src/Roles/ИспользованиеДосьеКонтрагента/Rights.rights b/SSL/src/Roles/ИспользованиеДосьеКонтрагента/Rights.rights index 280b80fa1..8e3ad1f1c 100644 --- a/SSL/src/Roles/ИспользованиеДосьеКонтрагента/Rights.rights +++ b/SSL/src/Roles/ИспользованиеДосьеКонтрагента/Rights.rights @@ -1269,7 +1269,7 @@ - InformationRegister.ИзмененияОбщихДанныхУзлов.Dimension.Узел + InformationRegister.ИзмененияОбщихДанныхУзлов.Dimension.УзелИнформационнойБазы View false diff --git a/SSL/src/Roles/ИспользованиеУниверсальногоОтчета/Rights.rights b/SSL/src/Roles/ИспользованиеУниверсальногоОтчета/Rights.rights new file mode 100644 index 000000000..1fe2cbe35 --- /dev/null +++ b/SSL/src/Roles/ИспользованиеУниверсальногоОтчета/Rights.rights @@ -0,0 +1,17 @@ + + + false + true + false + + Report.УниверсальныйОтчет + + Use + true + + + View + true + + + diff --git a/SSL/src/Roles/ИспользованиеУниверсальногоОтчета/ИспользованиеУниверсальногоОтчета.mdo b/SSL/src/Roles/ИспользованиеУниверсальногоОтчета/ИспользованиеУниверсальногоОтчета.mdo new file mode 100644 index 000000000..b0f788e80 --- /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 300fd397f..a287b48da 100644 --- a/SSL/src/Roles/ИспользованиеУчетныхЗаписейЭлектроннойПочты/Rights.rights +++ b/SSL/src/Roles/ИспользованиеУчетныхЗаписейЭлектроннойПочты/Rights.rights @@ -226,6 +226,13 @@ false + + CommonForm.ВыборПолучателейСообщения + + View + true + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СпособPOP3Аутентификации diff --git a/SSL/src/Roles/НастройкаСинхронизацииДанных/Rights.rights b/SSL/src/Roles/НастройкаСинхронизацииДанных/Rights.rights deleted file mode 100644 index e0643fa8e..000000000 --- a/SSL/src/Roles/НастройкаСинхронизацииДанных/Rights.rights +++ /dev/null @@ -1,714 +0,0 @@ - - - false - true - false - - WebService.Exchange_2_0_1_6.Operation.GetFunctionalOption - - Use - true - - - - WebService.Exchange.Operation.SaveFileFromParts - - Use - true - - - - CommonCommand.НастроитьПараметрыТранспортаСообщенийОбмена - - View - true - - - - CommonCommand.ПолучитьНастройкиСинхронизацииДляДругойПрограммы - - View - true - - - - WebService.Exchange.Operation.ReleaseFile - - Use - true - - - - WebService.Exchange_2_0_1_6.Operation.Upload - - Use - true - - - - WebService.Exchange.Operation.UploadData - - Use - true - - - - WebService.Exchange_2_0_1_6.Operation.FileExists - - Use - true - - - - WebService.Exchange.Operation.PutFileIntoStorage - - Use - true - - - - WebService.Exchange.Operation.GetContinuousOperationStatus - - Use - true - - - - DataProcessor.ПомощникСозданияОбменаДанными - - Use - true - - - View - true - - - - WebService.Exchange_2_0_1_6.Operation.GetIBParameters - - Use - true - - - - CommonCommand.СценарииСинхронизации - - View - true - - - - WebService.Exchange_2_0_1_6.Operation.GetFilePart - - Use - true - - - - WebService.Exchange.Operation.GetFileFromStorage - - Use - true - - - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз - - Use - true - - - View - true - - - - WebService.Exchange.Operation.Upload - - Use - true - - - - CommonCommand.СинхронизацияДанных - - View - true - - - - CommonCommand.СинхронизироватьСДополнительнымиПараметрами - - View - true - - - - WebService.Exchange.Operation.GetIBData - - Use - true - - - - WebService.Exchange.Operation.FileExists - - Use - true - - - - Catalog.СценарииОбменовДанными - - Read - true - - - Insert - true - - - Update - true - - - View - true - - - InteractiveInsert - true - - - Edit - true - - - InteractiveSetDeletionMark - true - - - InteractiveClearDeletionMark - true - - - InputByString - true - - - - WebService.Exchange.Operation.PutFilePart - - Use - true - - - - DataProcessor.ИнтерактивноеИзменениеВыгрузки - - Use - true - - - View - true - - - - CommonCommand.Синхронизировать - - View - true - - - - WebService.Exchange.Operation.CreateExchange - - Use - true - - - - WebService.Exchange.Operation.GetCommonNodsData - - Use - true - - - - WebService.Exchange.Operation.DownloadData - - Use - true - - - - WebService.EnterpriseDataUpload_1_0_1_1.Operation.PutData - - Use - true - - - - WebService.EnterpriseDataExchange_1_0_1_1.Operation.GetDataPart - - Use - true - - - - WebService.Exchange_2_0_1_6.Operation.SaveFileFromParts - - Use - true - - - - InformationRegister.СостоянияОбменовДанными - - Read - true - - - View - true - - - - CommonCommand.СобытияОтправки - - View - true - - - - WebService.Exchange_2_0_1_6.Operation.DownloadData - - Use - true - - - - WebService.Exchange_2_0_1_6.Operation.GetFileFromStorage - - Use - true - - - - WebService.EnterpriseDataUpload_1_0_1_1.Operation.TestConnection - - Use - true - - - - WebService.EnterpriseDataExchange_1_0_1_1.Operation.ConfirmGettingFile - - Use - true - - - - WebService.Exchange.Operation.UpdateExchange - - Use - true - - - - WebService.Exchange_2_0_1_6.Operation.RegisterAllDataExceptCatalogs - - Use - true - - - - WebService.Exchange_2_0_1_6.Operation.PutFileIntoStorage - - Use - true - - - - Subsystem.СтандартныеПодсистемы.Subsystem.ОбменДанными - - View - true - - - - WebService.Exchange_2_0_1_6.Operation.CreateExchange - - Use - true - - - - InformationRegister.ИзмененияОбщихДанныхУзлов - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - - WebService.Exchange_2_0_1_6.Operation.GetContinuousOperationStatus - - Use - true - - - - WebService.Exchange_2_0_1_6.Operation.Download - - Use - true - - - - WebService.EnterpriseDataUpload_1_0_1_1.Operation.PutDataActionResult - - Use - true - - - - CommonForm.ВыборОбъектовИнформационнойБазыКорреспондента - - View - true - - - - WebService.Exchange_2_0_1_6.Operation.PutFilePart - - Use - true - - - - CommonCommand.УдалитьНастройкуСинхронизации - - View - true - - - - DataProcessor.ПомощникИнтерактивногоОбменаДанными - - Use - true - - - View - true - - - - InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - - WebService.EnterpriseDataUpload_1_0_1_1.Operation.Ping - - Use - true - - - - WebService.Exchange_2_0_1_6.Operation.UploadData - - Use - true - - - - InformationRegister.НастройкиТранспортаОбмена - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - - InformationRegister.ПравилаДляОбменаДанными - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - - WebService.Exchange.Operation.GetFunctionalOption - - Use - true - - - - WebService.EnterpriseDataUpload_1_0_1_1.Operation.PutFilePart - - Use - true - - - - InformationRegister.РезультатыОбменаДанными - - Read - true - - - Update - true - - - View - true - - - Edit - true - - - - WebService.EnterpriseDataExchange_1_0_1_1.Operation.TestConnection - - Use - true - - - - CommonForm.СинхронизацияДанных - - View - true - - - - WebService.Exchange_2_0_1_6.Operation.ReleaseFile - - Use - true - - - - CommonCommand.ЗагрузитьПравилаКонвертацииОбъектов - - View - true - - - - WebService.EnterpriseDataExchange_1_0_1_1.Operation.PrepareDataForGetting - - Use - true - - - - WebService.Exchange.Operation.GetIBParameters - - Use - true - - - - DataProcessor.УниверсальныйОбменДаннымиXML - - Use - true - - - View - true - - - - WebService.Exchange.Operation.Download - - Use - true - - - - InformationRegister.СостоянияУспешныхОбменовДанными - - Read - true - - - View - true - - - - WebService.Exchange.Operation.GetFilePart - - Use - true - - - - WebService.EnterpriseDataExchange_1_0_1_1.Operation.PutDataActionResult - - Use - true - - - - WebService.Exchange_2_0_1_6.Operation.UpdateExchange - - Use - true - - - - WebService.EnterpriseDataExchange_1_0_1_1.Operation.PrepareDataActionResult - - Use - true - - - - WebService.Exchange_2_0_1_6.Operation.GetIBData - - Use - true - - - - WebService.Exchange.Operation.RegisterOnlyCatalogData - - Use - true - - - - CommonCommand.ПредупрежденияПриСинхронизацииДанных - - View - true - - - - WebService.Exchange_2_0_1_6.Operation.RegisterOnlyCatalogData - - Use - true - - - - WebService.Exchange.Operation.RegisterAllDataExceptCatalogs - - Use - true - - - - WebService.EnterpriseDataExchange_1_0_1_1.Operation.Ping - - Use - true - - - - WebService.EnterpriseDataExchange_1_0_1_1.Operation.PutData - - Use - true - - - - CommonCommand.ЗагрузитьПравилаРегистрацииОбъектов - - View - true - - - - WebService.EnterpriseDataExchange_1_0_1_1.Operation.PutFilePart - - Use - true - - - - WebService.Exchange_2_0_1_6.Operation.GetCommonNodsData - - Use - true - - - - WebService.Exchange_2_0_1_6.Operation.PrepareGetFile - - Use - true - - - - WebService.Exchange.Operation.PrepareGetFile - - Use - true - - - - CommonCommand.СобытияПолучения - - View - true - - - diff --git a/SSL/src/Roles/НастройкаСинхронизацииДанных/НастройкаСинхронизацииДанных.mdo b/SSL/src/Roles/НастройкаСинхронизацииДанных/НастройкаСинхронизацииДанных.mdo deleted file mode 100644 index d198c3afe..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 new file mode 100644 index 000000000..518e1b199 --- /dev/null +++ b/SSL/src/Roles/НастройкаСинхронизацииФайлов/Rights.rights @@ -0,0 +1,132 @@ + + + false + true + false + + InformationRegister.НастройкиСинхронизацииФайлов + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + TotalsControl + true + + + + InformationRegister.СтатусыСинхронизацииФайловСОблачнымСервисом + + Read + true + + + Update + true + + + View + true + + + + InformationRegister.СтатусыСинхронизацииФайловСОблачнымСервисом.StandardAttribute.Active + + Edit + false + + + + InformationRegister.СтатусыСинхронизацииФайловСОблачнымСервисом.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.СтатусыСинхронизацииФайловСОблачнымСервисом.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.СтатусыСинхронизацииФайловСОблачнымСервисом.StandardAttribute.Period + + Edit + false + + + + InformationRegister.СтатусыСинхронизацииФайловСОблачнымСервисом.Dimension.Файл + + Edit + false + + + + InformationRegister.СтатусыСинхронизацииФайловСОблачнымСервисом.Resource.Href + + Edit + false + + + + InformationRegister.СтатусыСинхронизацииФайловСОблачнымСервисом.Resource.Etag + + Edit + false + + + + Catalog.УчетныеЗаписиСинхронизацииФайлов + + Read + true + + + Insert + true + + + Update + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InputByString + true + + + diff --git a/SSL/src/Roles/НастройкаСинхронизацииФайлов/НастройкаСинхронизацииФайлов.mdo b/SSL/src/Roles/НастройкаСинхронизацииФайлов/НастройкаСинхронизацииФайлов.mdo new file mode 100644 index 000000000..aa5948981 --- /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 a5b0ad116..712375dae 100644 --- a/SSL/src/Roles/ПолныеПрава/Rights.rights +++ b/SSL/src/Roles/ПолныеПрава/Rights.rights @@ -90,6 +90,10 @@ Update false + + View + false + Edit false @@ -98,9 +102,25 @@ TotalsControl false + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + InformationRegister.ПоставляемыеДанныеТребующиеОбработки.StandardAttribute.Active + + View + false + Edit false @@ -108,6 +128,10 @@ InformationRegister.ПоставляемыеДанныеТребующиеОбработки.StandardAttribute.LineNumber + + View + false + Edit false @@ -115,6 +139,10 @@ InformationRegister.ПоставляемыеДанныеТребующиеОбработки.StandardAttribute.Recorder + + View + false + Edit false @@ -122,6 +150,10 @@ InformationRegister.ПоставляемыеДанныеТребующиеОбработки.StandardAttribute.Period + + View + false + Edit false @@ -440,6 +472,10 @@ InformationRegister.НастройкиТранспортаОбмена.Resource.FILEСжиматьФайлИсходящегоСообщения + + View + false + Edit false @@ -458,10 +494,18 @@ InformationRegister.ЗамерыКомментарииСтатистики + + Read + false + Update false + + View + false + Edit false @@ -470,6 +514,38 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + InformationRegister.ЗамерыКомментарииСтатистики.StandardAttribute.Active @@ -661,10 +737,18 @@ InformationRegister.СтатистикаКонфигурации + + Read + false + Update false + + View + false + Edit false @@ -673,6 +757,38 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + InformationRegister.СтатистикаКонфигурации.StandardAttribute.Active @@ -822,6 +938,10 @@ InformationRegister.НастройкиТранспортаОбмена.Resource.COMАутентификацияОперационнойСистемы + + View + false + Edit false @@ -918,6 +1038,10 @@ InformationRegister.СостоянияУспешныхОбменовДанными.Resource.ДатаОкончания + + View + false + Edit false @@ -973,6 +1097,10 @@ InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьCOMПарольПользователя + + View + false + Edit false @@ -1117,6 +1245,17 @@ false + + Catalog.ПоставляемыеДанные.Attribute.Описание + + View + false + + + Edit + false + + Catalog.СообщенияСистемы.Attribute.КоличествоПопытокОбработкиСообщения @@ -1151,45 +1290,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - Administration - false - - - UpdateDataBaseConfiguration - false - - - ThickClient - false - - - ExternalConnection - false - - - Automation - false - - - TechnicalSpecialistMode - false - - - ConfigurationExtensionsAdministration - false - - - InteractiveOpenExtDataProcessors - false - - - InteractiveOpenExtReports - false - - InformationRegister.УдалитьЗамерыВремени.Attribute.ИмяПользователя @@ -1303,6 +1403,17 @@ false + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.КлючВарианта + + View + false + + + Edit + false + + InformationRegister.КомментарииСтатистики.Resource.Наименование @@ -1404,6 +1515,10 @@ InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьWSПароль + + View + false + Edit false @@ -1474,6 +1589,10 @@ InformationRegister.ПакетыИнформацииПриЗапуске.Resource.Состав + + View + false + Edit false @@ -1736,6 +1855,17 @@ false + + Catalog.ПоставляемыеДанные.Attribute.ИдентификаторФайла + + View + false + + + Edit + false + + InformationRegister.УдалитьБлокировкиСеансовОбластиДанных.Resource.СообщениеБлокировки @@ -1803,6 +1933,10 @@ Catalog.КлючевыеОперации + + Read + false + Insert false @@ -1815,6 +1949,10 @@ Delete false + + View + false + InteractiveInsert false @@ -1839,6 +1977,10 @@ InteractiveDeleteMarked false + + InputByString + false + InteractiveDeletePredefinedData false @@ -1855,6 +1997,38 @@ InteractiveDeleteMarkedPredefinedData false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + Catalog.КлючевыеОперации.StandardAttribute.Predefined @@ -1954,6 +2128,10 @@ Update false + + View + false + Edit false @@ -1962,9 +2140,25 @@ TotalsControl false + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных.StandardAttribute.Active + + View + false + Edit false @@ -1972,6 +2166,10 @@ InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных.StandardAttribute.LineNumber + + View + false + Edit false @@ -1979,6 +2177,10 @@ InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных.StandardAttribute.Recorder + + View + false + Edit false @@ -1986,6 +2188,10 @@ InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных.StandardAttribute.Period + + View + false + Edit false @@ -2038,6 +2244,10 @@ InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСжиматьФайлИсходящегоСообщения + + View + false + Edit false @@ -2152,6 +2362,10 @@ InformationRegister.СостоянияОбменовДанными.Dimension.ДействиеПриОбмене + + View + false + Edit false @@ -2347,6 +2561,13 @@ false + + ExchangePlan.ОбновлениеИнформационнойБазы + + InteractiveDelete + false + + InformationRegister.ПравилаДляОбменаДанными.Resource.РежимПротоколированияОбменаДанными @@ -2358,6 +2579,17 @@ false + + Catalog.ПредопределенныеВариантыОтчетов.TabularSection.Размещение + + View + false + + + Edit + false + + Constant.ДатаПоследнегоСтартаКлиентскогоСеанса @@ -2491,6 +2723,17 @@ false + + Catalog.ПоставляемыеДанные.Attribute.ТипХраненияФайла + + View + false + + + Edit + false + + InformationRegister.УдалитьАдресныйКлассификатор @@ -2630,6 +2873,10 @@ InformationRegister.СостоянияОбменовДанными.Resource.РезультатВыполненияОбмена + + View + false + Edit false @@ -2653,6 +2900,17 @@ false + + Constant.ЛогинДоступаКСервисуMorpher + + Update + false + + + Edit + false + + InformationRegister.ПричиныИзмененияАдресныхСведений @@ -2761,6 +3019,10 @@ InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию + + View + false + Edit false @@ -2782,6 +3044,10 @@ InformationRegister.НастройкиТранспортаОбмена.Resource.COMИмяСервера1СПредприятия + + View + false + Edit false @@ -3024,6 +3290,10 @@ InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных.Dimension.КодОбработчика + + View + false + Edit false @@ -3282,6 +3552,10 @@ InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILМаксимальныйДопустимыйРазмерСообщения + + View + false + Edit false @@ -3332,6 +3606,10 @@ InformationRegister.СостоянияОбменовДанными.Dimension.УзелИнформационнойБазы + + View + false + Edit false @@ -3351,6 +3629,17 @@ false + + Catalog.ПоставляемыеДанные.Attribute.ПутьКФайлу + + View + false + + + Edit + false + + Catalog.Пользователи @@ -3419,6 +3708,21 @@ InformationRegister.НастройкиТранспортаОбмена.Resource.WSИмяПользователя + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.TabularSection.Размещение.Attribute.Подсистема + + View + false + Edit false @@ -3453,6 +3757,10 @@ InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILСжиматьФайлИсходящегоСообщения + + View + false + Edit false @@ -3608,10 +3916,18 @@ InformationRegister.СостоянияОбменовДанными + + Read + false + Update false + + View + false + Edit false @@ -3620,9 +3936,45 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + InformationRegister.СостоянияОбменовДанными.StandardAttribute.Active + + View + false + Edit false @@ -3630,6 +3982,10 @@ InformationRegister.СостоянияОбменовДанными.StandardAttribute.LineNumber + + View + false + Edit false @@ -3637,6 +3993,10 @@ InformationRegister.СостоянияОбменовДанными.StandardAttribute.Recorder + + View + false + Edit false @@ -3644,6 +4004,10 @@ InformationRegister.СостоянияОбменовДанными.StandardAttribute.Period + + View + false + Edit false @@ -3740,6 +4104,17 @@ false + + Catalog.ПоставляемыеДанные.Attribute.Том + + View + false + + + Edit + false + + Constant.ИзвлекатьТекстыФайловНаСервере @@ -3877,6 +4252,10 @@ InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения + + View + false + Edit false @@ -3952,10 +4331,6 @@ InformationRegister.ОчередьИзвлеченияТекста - - Update - false - Edit false @@ -3965,6 +4340,34 @@ false + + InformationRegister.ОчередьИзвлеченияТекста.StandardAttribute.Active + + Edit + false + + + + InformationRegister.ОчередьИзвлеченияТекста.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.ОчередьИзвлеченияТекста.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.ОчередьИзвлеченияТекста.StandardAttribute.Period + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты @@ -4001,6 +4404,10 @@ InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПорт + + View + false + Edit false @@ -4084,6 +4491,10 @@ InformationRegister.НастройкиТранспортаОбмена.Resource.COMКаталогИнформационнойБазы + + View + false + Edit false @@ -4157,6 +4568,10 @@ InformationRegister.ПоставляемыеДанныеТребующиеОбработки.Resource.КоличествоПопыток + + View + false + Edit false @@ -4204,6 +4619,10 @@ Update false + + View + false + Edit false @@ -4212,9 +4631,25 @@ TotalsControl false + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + InformationRegister.ПакетыИнформацииПриЗапуске.StandardAttribute.Active + + View + false + Edit false @@ -4222,6 +4657,10 @@ InformationRegister.ПакетыИнформацииПриЗапуске.StandardAttribute.LineNumber + + View + false + Edit false @@ -4229,6 +4668,10 @@ InformationRegister.ПакетыИнформацииПриЗапуске.StandardAttribute.Recorder + + View + false + Edit false @@ -4236,6 +4679,10 @@ InformationRegister.ПакетыИнформацииПриЗапуске.StandardAttribute.Period + + View + false + Edit false @@ -4426,10 +4873,18 @@ InformationRegister.ЗамерыОбластиСтатистики + + Read + false + Update false + + View + false + Edit false @@ -4438,6 +4893,38 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + InformationRegister.ЗамерыОбластиСтатистики.StandardAttribute.Active @@ -4517,6 +5004,21 @@ InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных.Dimension.ОбластьДанных + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.Описание + + View + false + Edit false @@ -4711,6 +5213,10 @@ InformationRegister.НастройкиТранспортаОбмена.Resource.FILEКаталогОбменаИнформацией + + View + false + Edit false @@ -4718,6 +5224,10 @@ InformationRegister.СостоянияОбменовДанными.Resource.ДатаНачала + + View + false + Edit false @@ -4807,6 +5317,17 @@ false + + Catalog.ПоставляемыеДанные.Attribute.ДатаДобавления + + View + false + + + Edit + false + + Catalog.СертификатыКлючейЭлектроннойПодписиИШифрования @@ -4992,6 +5513,10 @@ InformationRegister.СостоянияОбменовДанными.Resource.ДатаОкончания + + View + false + Edit false @@ -5029,6 +5554,10 @@ InformationRegister.ПакетыИнформацииПриЗапуске.Dimension.Номер + + View + false + Edit false @@ -5076,6 +5605,10 @@ InformationRegister.НастройкиТранспортаОбмена.Resource.КоличествоЭлементовВТранзакцииЗагрузкиДанных + + View + false + Edit false @@ -5544,6 +6077,10 @@ InformationRegister.СостоянияУспешныхОбменовДанными.Dimension.ДействиеПриОбмене + + View + false + Edit false @@ -5563,6 +6100,10 @@ Delete false + + View + false + InteractiveInsert false @@ -5587,6 +6128,10 @@ InteractiveDeleteMarked false + + InputByString + false + InteractiveDeletePredefinedData false @@ -5603,6 +6148,117 @@ InteractiveDeleteMarkedPredefinedData false + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + Catalog.ПредопределенныеВариантыОтчетов.StandardAttribute.PredefinedDataName + + 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 + Constant.ОценкаПроизводительностиПериодЗаписи @@ -5665,6 +6321,17 @@ false + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.ХешНастроек + + View + false + + + Edit + false + + InformationRegister.УдалитьОчередьЗаданий.Dimension.Идентификатор @@ -5698,6 +6365,17 @@ false + + Catalog.ПоставляемыеДанные.Attribute.ВидДанных + + View + false + + + Edit + false + + Catalog.ГруппыПользователей @@ -5732,6 +6410,17 @@ false + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.Отчет + + View + false + + + Edit + false + + Constant.ИспользуютсяПрофилиБезопасности @@ -5820,6 +6509,21 @@ InformationRegister.НастройкиТранспортаОбмена.Resource.WSЗапомнитьПароль + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.ВидимостьПоУмолчанию + + View + false + Edit false @@ -5862,6 +6566,17 @@ false + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.КлючЗамеров + + View + false + + + Edit + false + + InformationRegister.УдалитьАдресныйКлассификатор.Dimension.Код @@ -5869,6 +6584,29 @@ false + + Catalog.УчетныеЗаписиСинхронизацииФайлов + + InteractiveDelete + false + + + InteractiveDeletePredefinedData + false + + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ТипОграничения @@ -5935,6 +6673,10 @@ InformationRegister.БезопасноеХранилищеДанных.Dimension.Владелец + + View + false + Edit false @@ -5985,10 +6727,18 @@ InformationRegister.НастройкиТранспортаОбмена + + Read + false + Update false + + View + false + Edit false @@ -5997,9 +6747,45 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.Active + + View + false + Edit false @@ -6007,6 +6793,10 @@ InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.LineNumber + + View + false + Edit false @@ -6014,6 +6804,10 @@ InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.Recorder + + View + false + Edit false @@ -6021,6 +6815,10 @@ InformationRegister.НастройкиТранспортаОбмена.StandardAttribute.Period + + View + false + Edit false @@ -6028,6 +6826,10 @@ InformationRegister.НастройкиТранспортаОбмена.Resource.КоличествоЭлементовВТранзакцииВыгрузкиДанных + + View + false + Edit false @@ -6069,6 +6871,10 @@ InformationRegister.НастройкиТранспортаОбмена.Dimension.Узел + + View + false + Edit false @@ -6224,10 +7030,18 @@ InformationRegister.ОбластиСтатистики + + Read + false + Update false + + View + false + Edit false @@ -6236,6 +7050,38 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + InformationRegister.ОбластиСтатистики.StandardAttribute.Active @@ -6368,6 +7214,10 @@ InformationRegister.НастройкиТранспортаОбмена.Resource.COMИмяПользователя + + View + false + Edit false @@ -6393,6 +7243,10 @@ InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьПарольАрхиваСообщенияОбмена + + View + false + Edit false @@ -6541,6 +7395,10 @@ InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных.Dimension.ИдентификаторФайла + + View + false + Edit false @@ -6563,10 +7421,18 @@ InformationRegister.УдалитьЗамерыВремени + + Read + false + Update false + + View + false + Edit false @@ -6575,6 +7441,38 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + InformationRegister.УдалитьЗамерыВремени.StandardAttribute.Active @@ -6814,6 +7712,10 @@ InformationRegister.БезопасноеХранилищеДанных.Resource.Данные + + View + false + Edit false @@ -6826,8 +7728,51 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + Administration + false + + + UpdateDataBaseConfiguration + false + + + ThickClient + false + + + ExternalConnection + false + + + Automation + false + + + TechnicalSpecialistMode + false + + + ConfigurationExtensionsAdministration + false + + + InteractiveOpenExtDataProcessors + false + + + InteractiveOpenExtReports + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILУчетнаяЗапись + + View + false + Edit false @@ -7069,10 +8014,18 @@ InformationRegister.БуферОперацийСтатистики + + Read + false + Update false + + View + false + Edit false @@ -7081,6 +8034,38 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + InformationRegister.БуферОперацийСтатистики.StandardAttribute.Active @@ -7205,6 +8190,17 @@ false + + Constant.ИспользоватьСервисСклоненияMorpher + + Update + false + + + Edit + false + + InformationRegister.БуферОперацийСтатистики.Dimension.ИдентификаторЗаписи @@ -7214,6 +8210,21 @@ InformationRegister.СостоянияУспешныхОбменовДанными.Dimension.УзелИнформационнойБазы + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.TabularSection.Размещение.Attribute.СмТакже + + View + false + Edit false @@ -7315,6 +8326,13 @@ false + + ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.PredefinedDataName + + Edit + false + + ChartOfCharacteristicTypes.УдалитьВидыДоступа.StandardAttribute.ValueType @@ -7371,6 +8389,17 @@ false + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.НаименованияПолей + + View + false + + + Edit + false + + InformationRegister.УдалитьОбластиДанных @@ -7428,10 +8457,18 @@ InformationRegister.СостоянияУспешныхОбменовДанными + + Read + false + Update false + + View + false + Edit false @@ -7440,9 +8477,45 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.Active + + View + false + Edit false @@ -7450,6 +8523,10 @@ InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.LineNumber + + View + false + Edit false @@ -7457,6 +8534,10 @@ InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.Recorder + + View + false + Edit false @@ -7464,6 +8545,10 @@ InformationRegister.СостоянияУспешныхОбменовДанными.StandardAttribute.Period + + View + false + Edit false @@ -7471,6 +8556,10 @@ InformationRegister.НастройкиТранспортаОбмена.Resource.УдалитьFTPСоединениеПароль + + View + false + Edit false @@ -7855,6 +8944,10 @@ InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПользователь + + View + false + Edit false @@ -7862,6 +8955,10 @@ InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПассивноеСоединение + + View + false + Edit false @@ -7885,6 +8982,17 @@ false + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.Включен + + View + false + + + Edit + false + + InformationRegister.УдалитьСтраныМира.Resource.Значение @@ -7980,6 +9088,10 @@ InformationRegister.НастройкиТранспортаОбмена.Resource.COMИмяИнформационнойБазыНаСервере1СПредприятия + + View + false + Edit false @@ -7992,8 +9104,23 @@ false + + Catalog.ПоставляемыеДанные.TabularSection.ХарактеристикиДанных + + View + false + + + Edit + false + + InformationRegister.ПоставляемыеДанныеТребующиеОбработки.Dimension.КодОбработчика + + View + false + Edit false @@ -8012,14 +9139,58 @@ InformationRegister.ДампыПлатформы + + Read + false + Update false + + View + false + Edit false + + TotalsControl + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + InformationRegister.ДампыПлатформы.StandardAttribute.Active @@ -8051,10 +9222,18 @@ InformationRegister.ЗамерыОперацииСтатистики + + Read + false + Update false + + View + false + Edit false @@ -8063,6 +9242,38 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + InformationRegister.ЗамерыОперацииСтатистики.StandardAttribute.Active @@ -8172,6 +9383,17 @@ false + + Catalog.ПоставляемыеДанные.TabularSection.ХарактеристикиДанных.Attribute.Значение + + View + false + + + Edit + false + + Constant.ПредставлениеОбластиДанных @@ -8185,10 +9407,18 @@ InformationRegister.КомментарииСтатистики + + Read + false + Update false + + View + false + Edit false @@ -8197,6 +9427,38 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + InformationRegister.КомментарииСтатистики.StandardAttribute.Active @@ -8309,10 +9571,18 @@ InformationRegister.ОперацииСтатистики + + Read + false + Update false + + View + false + Edit false @@ -8321,6 +9591,38 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + InformationRegister.ОперацииСтатистики.StandardAttribute.Active @@ -8352,6 +9654,10 @@ InformationRegister.НастройкиТранспортаОбмена.Resource.WSURLВебСервиса + + View + false + Edit false @@ -8432,10 +9738,18 @@ InformationRegister.КомментарииОперацииСтатистики + + Read + false + Update false + + View + false + Edit false @@ -8444,6 +9758,38 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + InformationRegister.КомментарииОперацииСтатистики.StandardAttribute.Active @@ -8493,6 +9839,10 @@ InformationRegister.НастройкиТранспортаОбмена.Resource.WSИспользоватьПередачуБольшогоОбъемаДанных + + View + false + Edit false @@ -8500,10 +9850,18 @@ InformationRegister.ПакетыДляОтправки + + Read + false + Update false + + View + false + Edit false @@ -8512,6 +9870,38 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + InformationRegister.ПакетыДляОтправки.StandardAttribute.Active @@ -8541,6 +9931,17 @@ false + + Catalog.ПоставляемыеДанные.Attribute.ХранимыйФайл + + View + false + + + Edit + false + + Constant.ДетализироватьОбновлениеИБВЖурналеРегистрации @@ -8554,6 +9955,10 @@ InformationRegister.ПоставляемыеДанныеТребующиеОбработки.Dimension.ИдентификаторФайла + + View + false + Edit false @@ -8561,6 +9966,10 @@ InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПуть + + View + false + Edit false @@ -8614,6 +10023,17 @@ false + + Catalog.ПредопределенныеВариантыОтчетов.TabularSection.Размещение.Attribute.Важный + + View + false + + + Edit + false + + InformationRegister.СообщенияОбменаДанными.Resource.ИмяФайлаСообщения @@ -8903,6 +10323,17 @@ false + + Catalog.ПоставляемыеДанные.TabularSection.ХарактеристикиДанных.Attribute.Характеристика + + View + false + + + Edit + false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя @@ -8935,6 +10366,10 @@ Delete false + + View + false + InteractiveInsert false @@ -8959,6 +10394,10 @@ InteractiveDeleteMarked false + + InputByString + false + InteractiveDeletePredefinedData false @@ -8975,6 +10414,128 @@ InteractiveDeleteMarkedPredefinedData false + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + Catalog.ПоставляемыеДанные.StandardAttribute.PredefinedDataName + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПоставляемыеДанные.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.НаименованияПараметровИОтборов + + View + false + + + Edit + false + InformationRegister.ЗамерыВремени.Attribute.ДатаЗаписиЛокальная @@ -8989,6 +10550,10 @@ InformationRegister.НастройкиТранспортаОбмена.Resource.COMВариантРаботыИнформационнойБазы + + View + false + Edit false @@ -8996,10 +10561,18 @@ InformationRegister.БезопасноеХранилищеДанных + + Read + false + Update false + + View + false + Edit false @@ -9008,9 +10581,45 @@ TotalsControl false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + InformationRegister.БезопасноеХранилищеДанных.StandardAttribute.Active + + View + false + Edit false @@ -9018,6 +10627,10 @@ InformationRegister.БезопасноеХранилищеДанных.StandardAttribute.LineNumber + + View + false + Edit false @@ -9025,6 +10638,10 @@ InformationRegister.БезопасноеХранилищеДанных.StandardAttribute.Recorder + + View + false + Edit false @@ -9032,6 +10649,10 @@ InformationRegister.БезопасноеХранилищеДанных.StandardAttribute.Period + + View + false + Edit false @@ -9161,6 +10782,17 @@ false + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.КлючевыеСлова + + View + false + + + Edit + false + + InformationRegister.УдалитьОчередьЗаданий.Resource.ДатаНачалаПоследнегоЗапуска @@ -9172,6 +10804,17 @@ false + + Catalog.ПредопределенныеВариантыОтчетов.Attribute.ГруппироватьПоОтчету + + View + false + + + Edit + false + + CommonForm.ПодключениеКонечнойТочки diff --git a/SSL/src/ScheduledJobs/КонтрольАктивностиПользователей/КонтрольАктивностиПользователей.mdo b/SSL/src/ScheduledJobs/КонтрольАктивностиПользователей/КонтрольАктивностиПользователей.mdo index bf79da733..8f9e30e31 100644 --- a/SSL/src/ScheduledJobs/КонтрольАктивностиПользователей/КонтрольАктивностиПользователей.mdo +++ b/SSL/src/ScheduledJobs/КонтрольАктивностиПользователей/КонтрольАктивностиПользователей.mdo @@ -6,6 +6,7 @@ Контроль активности пользователей CommonModule.ПользователиСлужебный.КонтрольАктивностиПользователей + Контроль активности пользователей true 90 diff --git a/SSL/src/ScheduledJobs/МониторингЗадач/МониторингЗадач.mdo b/SSL/src/ScheduledJobs/МониторингЗадач/МониторингЗадач.mdo index c89a804fa..21ed5ab93 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 57f6d8089..d22bdea82 100644 --- a/SSL/src/ScheduledJobs/ПроверкаКонтрагентов/ПроверкаКонтрагентов.mdo +++ b/SSL/src/ScheduledJobs/ПроверкаКонтрагентов/ПроверкаКонтрагентов.mdo @@ -8,7 +8,6 @@ CommonModule.ПроверкаКонтрагентов.ПроверитьКонтрагентовРегламентноеЗадание Проверка контрагентов 1 - true true 3 10 diff --git a/SSL/src/ScheduledJobs/СинхронизацияФайлов/Schedule.schedule b/SSL/src/ScheduledJobs/СинхронизацияФайлов/Schedule.schedule new file mode 100644 index 000000000..ee287fe7c --- /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..b99a13df4 --- /dev/null +++ b/SSL/src/ScheduledJobs/СинхронизацияФайлов/СинхронизацияФайлов.mdo @@ -0,0 +1,13 @@ + + + СинхронизацияФайлов + + ru + Синхронизация файлов с облачным сервисом + + CommonModule.ФайловыеФункцииСлужебный.РегламентнаяСинхронизацияФайловWebdav + Синхронизация файлов с облачным сервисом + true + 3 + 10 + diff --git a/SSL/src/ScheduledJobs/УведомлениеИсполнителейОНовыхЗадачах/УведомлениеИсполнителейОНовыхЗадачах.mdo b/SSL/src/ScheduledJobs/УведомлениеИсполнителейОНовыхЗадачах/УведомлениеИсполнителейОНовыхЗадачах.mdo index 3bd5bbbf3..a02f9ffb1 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 556e1f380..0fc8f380a 100644 --- a/SSL/src/ScheduledJobs/ЭкспортОценкиПроизводительности/ЭкспортОценкиПроизводительности.mdo +++ b/SSL/src/ScheduledJobs/ЭкспортОценкиПроизводительности/ЭкспортОценкиПроизводительности.mdo @@ -5,7 +5,7 @@ ru Экспорт оценки производительности - CommonModule.ОценкаПроизводительностиВызовСервераПолныеПрава.ЭкспортОценкиПроизводительности + CommonModule.ОценкаПроизводительности.ЭкспортОценкиПроизводительности Экспорт оценки производительности 27a985e0-e657-4eb3-b18f-6b75f72324ed diff --git a/SSL/src/SessionParameters/БуферОбмена/БуферОбмена.mdo b/SSL/src/SessionParameters/БуферОбмена/БуферОбмена.mdo new file mode 100644 index 000000000..3259b981d --- /dev/null +++ b/SSL/src/SessionParameters/БуферОбмена/БуферОбмена.mdo @@ -0,0 +1,11 @@ + + + БуферОбмена + + ru + Буфер обмена + + + FixedStructure + + diff --git a/SSL/src/SessionParameters/ВыполняетсяЗаписьОбъекта/ВыполняетсяЗаписьОбъекта.mdo b/SSL/src/SessionParameters/ВыполняетсяЗаписьОбъекта/ВыполняетсяЗаписьОбъекта.mdo new file mode 100644 index 000000000..bee13269a --- /dev/null +++ b/SSL/src/SessionParameters/ВыполняетсяЗаписьОбъекта/ВыполняетсяЗаписьОбъекта.mdo @@ -0,0 +1,11 @@ + + + ВыполняетсяЗаписьОбъекта + + ru + Выполняется запись объекта + + + Boolean + + diff --git a/SSL/src/SessionParameters/ПараметрыОбработчикаОбновления/ПараметрыОбработчикаОбновления.mdo b/SSL/src/SessionParameters/ПараметрыОбработчикаОбновления/ПараметрыОбработчикаОбновления.mdo new file mode 100644 index 000000000..20923f44a --- /dev/null +++ b/SSL/src/SessionParameters/ПараметрыОбработчикаОбновления/ПараметрыОбработчикаОбновления.mdo @@ -0,0 +1,11 @@ + + + ПараметрыОбработчикаОбновления + + ru + Параметры обработчика обновления + + + FixedStructure + + diff --git a/SSL/src/SessionParameters/РаботаСВнешнимиРесурсамиЗаблокирована/РаботаСВнешнимиРесурсамиЗаблокирована.mdo b/SSL/src/SessionParameters/РаботаСВнешнимиРесурсамиЗаблокирована/РаботаСВнешнимиРесурсамиЗаблокирована.mdo new file mode 100644 index 000000000..3e8f77f27 --- /dev/null +++ b/SSL/src/SessionParameters/РаботаСВнешнимиРесурсамиЗаблокирована/РаботаСВнешнимиРесурсамиЗаблокирована.mdo @@ -0,0 +1,11 @@ + + + РаботаСВнешнимиРесурсамиЗаблокирована + + ru + Работа с внешними ресурсами заблокирована + + + Boolean + + diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Form.form b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Form.form index 8e8cd485d..d9ccb3874 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Form.form +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Form.form @@ -877,6 +877,7 @@ 7 + CatalogRef.ВнешниеПользователи CatalogRef.Пользователи @@ -1133,6 +1134,7 @@ 9 + CatalogRef.ВнешниеПользователи CatalogRef.Пользователи diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Help/ru.html b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Help/ru.html index 7017e5eab..095241715 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Help/ru.html +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Help/ru.html @@ -1,4 +1,4 @@ - +

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

                                Открывается из формы варианта отчета по команде Еще - Прочее - Выбрать вариант.

                                Для выбора доступны:

                                diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl index d5b0baf19..b08b894f9 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl @@ -8,7 +8,7 @@ КонецЕсли; КлючВарианта = Параметры.КлючТекущихНастроек; - ТекущийПользователь = Пользователи.ТекущийПользователь(); + ТекущийПользователь = Пользователи.АвторизованныйПользователь(); ОтчетИнформация = ВариантыОтчетов.СформироватьИнформациюОбОтчетеПоПолномуИмени(Параметры.КлючОбъекта); Если ТипЗнч(ОтчетИнформация.ТекстОшибки) = Тип("Строка") Тогда @@ -21,7 +21,7 @@ ПолныеПраваНаВарианты = ВариантыОтчетов.ПолныеПраваНаВарианты(); - Если НЕ ПолныеПраваНаВарианты Тогда + Если Не ПолныеПраваНаВарианты Тогда Элементы.ПоказыватьЛичныеВариантыОтчетовДругихАвторов.Видимость = Ложь; Элементы.ПоказыватьЛичныеВариантыОтчетовДругихАвторовКМ.Видимость = Ложь; ПоказыватьЛичныеВариантыОтчетовДругихАвторов = Ложь; @@ -44,7 +44,8 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - Если ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта() Тогда + Если ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта() + Или ИмяСобытия = "Запись_НаборКонстант" Тогда ЗаполнитьСписокВариантов(); КонецЕсли; КонецПроцедуры @@ -77,7 +78,7 @@ Возврат; КонецЕсли; - Если НЕ ЗначениеЗаполнено(Вариант.КлючВарианта) Тогда + Если Не ЗначениеЗаполнено(Вариант.КлючВарианта) Тогда ВариантОписание = ""; Иначе ВариантОписание = Вариант.Описание; @@ -100,7 +101,7 @@ Отказ = Истина; Вариант = Элементы.ДеревоВариантовОтчета.ТекущиеДанные; - Если Вариант = Неопределено ИЛИ НЕ ЗначениеЗаполнено(Вариант.КлючВарианта) Тогда + Если Вариант = Неопределено Или Не ЗначениеЗаполнено(Вариант.КлючВарианта) Тогда Возврат; КонецЕсли; @@ -135,7 +136,7 @@ &НаКлиенте Процедура ПоказыватьЛичныеВариантыОтчетовДругихАвторов(Команда) - ПоказыватьЛичныеВариантыОтчетовДругихАвторов = НЕ ПоказыватьЛичныеВариантыОтчетовДругихАвторов; + ПоказыватьЛичныеВариантыОтчетовДругихАвторов = Не ПоказыватьЛичныеВариантыОтчетовДругихАвторов; Элементы.ПоказыватьЛичныеВариантыОтчетовДругихАвторов.Пометка = ПоказыватьЛичныеВариантыОтчетовДругихАвторов; Элементы.ПоказыватьЛичныеВариантыОтчетовДругихАвторовКМ.Пометка = ПоказыватьЛичныеВариантыОтчетовДругихАвторов; @@ -207,16 +208,16 @@ &НаКлиенте Процедура ОткрытьВариантДляИзменения() Вариант = Элементы.ДеревоВариантовОтчета.ТекущиеДанные; - Если Вариант = Неопределено ИЛИ НЕ ЗначениеЗаполнено(Вариант.Ссылка) Тогда + Если Вариант = Неопределено Или Не ЗначениеЗаполнено(Вариант.Ссылка) Тогда Возврат; КонецЕсли; - Если НЕ ПравоИзмененияВарианта(Вариант, ПолныеПраваНаВарианты) Тогда + Если Не ПравоИзмененияВарианта(Вариант, ПолныеПраваНаВарианты) Тогда ТекстПредупреждения = НСтр("ru = 'Недостаточно прав для изменения варианта ""%1"".'"); ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПредупреждения, Вариант.Наименование); ПоказатьПредупреждение(, ТекстПредупреждения); Возврат; КонецЕсли; - ПоказатьЗначение(, Вариант.Ссылка); + ВариантыОтчетовКлиент.ПоказатьНастройкиОтчета(Вариант.Ссылка); КонецПроцедуры &НаКлиенте @@ -228,7 +229,7 @@ &НаКлиентеНаСервереБезКонтекста Функция ПравоИзмененияВарианта(Вариант, ПолныеПраваНаВарианты) - Возврат ПолныеПраваНаВарианты ИЛИ Вариант.АвторТекущийПользователь; + Возврат ПолныеПраваНаВарианты Или Вариант.АвторТекущийПользователь; КонецФункции &НаСервере @@ -259,10 +260,10 @@ | Справочник.ВариантыОтчетов КАК ВариантыОтчетов |ГДЕ | ВариантыОтчетов.Отчет = &Отчет - | И (ВариантыОтчетов.Пользовательский = ИСТИНА - | ИЛИ ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ) - | И (ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ - | ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь) + | И НЕ(НЕ ВариантыОтчетов.Пользовательский = ИСТИНА + | И НЕ ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ) + | И НЕ(НЕ ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ + | И НЕ ВариантыОтчетов.Автор = &ТекущийПользователь) | И НЕ ВариантыОтчетов.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы) |; | @@ -381,8 +382,8 @@ Запрос.УстановитьПараметр("ОтключенныеВариантыПрограммы", ВариантыОтчетовПовтИсп.ОтключенныеВариантыПрограммы()); Если ПоказыватьЛичныеВариантыОтчетовДругихАвторов Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И (ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ - | ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь)", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И НЕ(НЕ ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ + | И НЕ ВариантыОтчетов.Автор = &ТекущийПользователь)", ""); КонецЕсли; Запрос.Текст = ТекстЗапроса; @@ -458,7 +459,7 @@ &НаСервереБезКонтекста Процедура УдалитьВариантНаСервере(Ссылка, ИндексКартинки) ВариантОбъект = Ссылка.ПолучитьОбъект(); - ПометкаУдаления = НЕ ВариантОбъект.ПометкаУдаления; + ПометкаУдаления = Не ВариантОбъект.ПометкаУдаления; Пользовательский = ВариантОбъект.Пользовательский; ВариантОбъект.УстановитьПометкуУдаления(ПометкаУдаления); ИндексКартинки = ?(ПометкаУдаления, 4, ?(Пользовательский, 3, 5)); diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборПоляОтчета/Form.form b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборПоляОтчета/Form.form index e528fe0e5..ff19cc527 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборПоляОтчета/Form.form +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборПоляОтчета/Form.form @@ -166,6 +166,7 @@ Vertical auto + false @@ -327,6 +328,7 @@ Vertical auto + false @@ -488,6 +490,7 @@ Vertical auto + false @@ -709,6 +712,7 @@ Vertical auto + false true diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборПоляОтчета/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборПоляОтчета/Module.bsl index 40456102c..a9837e81c 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборПоляОтчета/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборПоляОтчета/Module.bsl @@ -1,6 +1,10 @@ +#Область ОписаниеПеременных + &НаКлиенте Перем ПеременныеКлиента; +#КонецОбласти + //////////////////////////////////////////////////////////////////////////////// // СОБЫТИЯ ФОРМЫ diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ОписаниеНовойВозможностиПоВыводуОписаний/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ОписаниеНовойВозможностиПоВыводуОписаний/Module.bsl index e2079f0c3..7c28a442d 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ОписаниеНовойВозможностиПоВыводуОписаний/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ОписаниеНовойВозможностиПоВыводуОписаний/Module.bsl @@ -2,8 +2,11 @@ &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) - Результат = ПередЗакрытиемНаСервере(ОтключитьОписания); - СтандартныеПодсистемыКлиент.ПоказатьРезультатВыполнения(ЭтотОбъект, Результат); + ОбщиеНастройки = ПередЗакрытиемНаСервере(ОтключитьОписания); + Оповестить( + ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеОбщихНастроек(), + ОбщиеНастройки, + Неопределено); КонецПроцедуры #КонецОбласти @@ -27,21 +30,13 @@ &НаСервереБезКонтекста Функция ПередЗакрытиемНаСервере(ОтключитьОписания) - Результат = Новый Структура; - ОбщиеНастройки = ВариантыОтчетов.ОбщиеНастройкиПанели(); Если ОтключитьОписания Тогда ОбщиеНастройки.ПоказыватьПодсказки = Ложь; КонецЕсли; ОбщиеНастройки.ПоказатьОповещениеОПодсказках = Ложь; ВариантыОтчетов.СохранитьОбщиеНастройкиПанели(ОбщиеНастройки); - - СтандартныеПодсистемыКлиентСервер.ОповеститьОткрытыеФормы( - Результат, - ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеОбщихНастроек(), - ОбщиеНастройки); - - Возврат Результат; + Возврат ОбщиеНастройки; КонецФункции #КонецОбласти diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Form.form b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Form.form index f3ad9a157..2de4c1361 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Form.form +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Form.form @@ -31,10 +31,6 @@ false false - - ru - - ГруппаДругиеВариантыОтчетаРасширеннаяПодсказка 4 @@ -519,6 +515,7 @@ 6 + CatalogRef.ВнешниеПользователи CatalogRef.Пользователи diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Module.bsl index 879e83cfb..fb7c6c3f1 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ПанельДругихОтчетов/Module.bsl @@ -42,7 +42,7 @@ КонецПроцедуры &НаКлиенте -Процедура ВариантНажатие(Элемент) +Процедура Подключаемый_ВариантНажатие(Элемент) Найденные = ВариантыПанели.НайтиСтроки(Новый Структура("НадписьИмя", Элемент.Имя)); Если Найденные.Количество() <> 1 Тогда Возврат; @@ -134,7 +134,7 @@ Запрос = Новый Запрос; Запрос.УстановитьПараметр("Отчет", ОтчетСсылка); - Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.ТекущийПользователь()); + Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.АвторизованныйПользователь()); Запрос.УстановитьПараметр("ОтключенныеВариантыПрограммы", ВариантыОтчетовПовтИсп.ОтключенныеВариантыПрограммы()); Запрос.Текст = ТекстЗапроса; @@ -243,7 +243,7 @@ Надпись.РасширеннаяПодсказка.РастягиватьПоГоризонтали = Истина; Надпись.РасширеннаяПодсказка.ЦветТекста = ЦветаСтиля.ПоясняющийТекст; КонецЕсли; - Надпись.УстановитьДействие("Нажатие", "ВариантНажатие"); + Надпись.УстановитьДействие("Нажатие", "Подключаемый_ВариантНажатие"); КонецПроцедуры diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form index b17875fd3..b43919eba 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form @@ -369,7 +369,7 @@ Только для автора - 1 + ТолькоАвтор @@ -378,7 +378,7 @@ Всем пользователям - 2 + ВсеПользователи Vertical @@ -456,6 +456,7 @@ Vertical auto + false @@ -518,6 +519,7 @@ Vertical auto + false true @@ -553,14 +555,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - ГруппаДоступенРасширеннаяПодсказка 154 @@ -712,6 +706,7 @@ Vertical auto + false @@ -784,6 +779,7 @@ Vertical auto + false @@ -856,6 +852,7 @@ Vertical auto + false true @@ -962,10 +959,6 @@ true - - <key>ru</key> - <value> </value> - Страница1ExtendedTooltip 112 @@ -980,6 +973,7 @@ Vertical auto + false @@ -1466,14 +1460,6 @@ true - - <key>ru</key> - <value> </value> - - - ru - - Страница2ExtendedTooltip 130 @@ -1488,6 +1474,7 @@ Vertical auto + false true @@ -1855,6 +1842,7 @@ 4 + CatalogRef.ВнешниеПользователи CatalogRef.Пользователи diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Help/ru.html b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Help/ru.html index 3691396eb..5d442c810 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Help/ru.html +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

                                Список существующих вариантов

                                diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl index ea1224c4b..78704089d 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl @@ -8,7 +8,7 @@ КонецЕсли; Контекст = Новый Структура; - Контекст.Вставить("ТекущийПользователь", Пользователи.ТекущийПользователь()); + Контекст.Вставить("ТекущийПользователь", Пользователи.АвторизованныйПользователь()); Контекст.Вставить("ПолныеПраваНаВарианты", ВариантыОтчетов.ПолныеПраваНаВарианты()); Контекст.Вставить("ИдентификаторТекущейСтроки", Неопределено); @@ -38,6 +38,7 @@ Элементы.Назад.Видимость = Ложь; Элементы.Далее.Видимость = Ложь; Элементы.ДекорацияДалее.Видимость = Ложь; + Элементы.ГруппаДоступен.Видимость = Ложь; КонецЕсли; ВидимостьДоступность(ЭтотОбъект, "ПриСозданииНаСервере"); @@ -45,7 +46,7 @@ &НаСервере Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) - Если НЕ ЗначениеЗаполнено(ВариантНаименование) Тогда + Если Не ЗначениеЗаполнено(ВариантНаименование) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Поле ""Наименование"" не заполнено'"), , @@ -68,7 +69,8 @@ Возврат; КонецЕсли; - Если ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта() Тогда + Если ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта() + Или ИмяСобытия = "Запись_НаборКонстант" Тогда ЗаполнитьСписокВариантов(Истина); КонецЕсли; @@ -92,7 +94,7 @@ &НаКлиенте Процедура ДоступенПриИзменении(Элемент) - ВариантТолькоДляАвтора = (Доступен = "1"); + ВариантТолькоДляАвтора = (Доступен = "ТолькоАвтор"); КонецПроцедуры &НаКлиенте @@ -140,7 +142,7 @@ Возврат; КонецЕсли; - Если Не Контекст.ПолныеПраваНаВарианты И НЕ Вариант.АвторТекущийПользователь Тогда + Если Не Контекст.ПолныеПраваНаВарианты И Не Вариант.АвторТекущийПользователь Тогда ТекстПредупреждения = НСтр("ru = 'Недостаточно прав для удаления варианта отчета ""%1"".'"); ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПредупреждения, Вариант.Наименование); ПоказатьПредупреждение(, ТекстПредупреждения); @@ -251,7 +253,7 @@ &НаКлиенте Процедура ВыполнитьПакет(Результат, Пакет) Экспорт Если Не Пакет.Свойство("ВариантЭтоНовый") Тогда - Пакет.Вставить("ВариантЭтоНовый", НЕ ЗначениеЗаполнено(ВариантСсылка)); + Пакет.Вставить("ВариантЭтоНовый", Не ЗначениеЗаполнено(ВариантСсылка)); КонецЕсли; // Обработка результата предыдущего шага. @@ -277,7 +279,7 @@ Если Не Пакет.ВариантЭтоНовый Тогда Найденные = ВариантыОтчета.НайтиСтроки(Новый Структура("Ссылка", ВариантСсылка)); Вариант = Найденные[0]; - Если НЕ ПравоЗаписиВарианта(Вариант, Контекст.ПолныеПраваНаВарианты) Тогда + Если Не ПравоЗаписиВарианта(Вариант, Контекст.ПолныеПраваНаВарианты) Тогда ТекстОшибки = НСтр("ru = 'Недостаточно прав для изменения варианта ""%1"". Необходимо выбрать другой вариант или изменить Наименование.'"); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ВариантНаименование); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ВариантНаименование"); @@ -353,7 +355,7 @@ &НаКлиенте Процедура ОткрытьВариантДляИзменения() Вариант = Элементы.ВариантыОтчета.ТекущиеДанные; - Если Вариант = Неопределено ИЛИ НЕ ЗначениеЗаполнено(Вариант.Ссылка) Тогда + Если Вариант = Неопределено Или Не ЗначениеЗаполнено(Вариант.Ссылка) Тогда Возврат; КонецЕсли; Если Не ПравоНастройкиВарианта(Вариант, Контекст.ПолныеПраваНаВарианты) Тогда @@ -362,7 +364,7 @@ ПоказатьПредупреждение(, ТекстПредупреждения); Возврат; КонецЕсли; - ПоказатьЗначение(, Вариант.Ссылка); + ВариантыОтчетовКлиент.ПоказатьНастройкиОтчета(Вариант.Ссылка); КонецПроцедуры &НаКлиенте @@ -415,13 +417,16 @@ Если Вариант = Неопределено Тогда БудетЗаписанНовый = Истина; Форма.ВариантСсылка = Неопределено; - Форма.ВариантТолькоДляАвтора = Истина; Форма.ВариантВидимостьПоУмолчанию = Истина; Если Не Форма.ОписаниеМодифицировано Тогда Форма.ВариантОписание = ""; КонецЕсли; Форма.Элементы.ВариантыОтчета.ТекущаяСтрока = Неопределено; Форма.Контекст.ИдентификаторТекущейСтроки = Неопределено; + Если Не Форма.Контекст.ПолныеПраваНаВарианты Тогда + Форма.Доступен = "ТолькоАвтор"; + Форма.ВариантТолькоДляАвтора = Истина; + КонецЕсли; Иначе ПравоЗаписиВарианта = ПравоЗаписиВарианта(Вариант, Форма.Контекст.ПолныеПраваНаВарианты); Если ПравоЗаписиВарианта Тогда @@ -453,7 +458,7 @@ КонецЕсли; КонецЕсли; - Форма.Доступен = ?(Форма.ВариантТолькоДляАвтора, "1", "2"); + Форма.Доступен = ?(Форма.ВариантТолькоДляАвтора, "ТолькоАвтор", "ВсеПользователи"); КонецЕсли; Если БудетЗаписанНовый Тогда Форма.Элементы.ЧтоБудетДальше.ТекущаяСтраница = Форма.Элементы.Новый; @@ -477,7 +482,7 @@ &НаКлиентеНаСервереБезКонтекста Функция ПравоНастройкиВарианта(Вариант, ПолныеПраваНаВарианты) - Возврат (ПолныеПраваНаВарианты ИЛИ Вариант.АвторТекущийПользователь) И ЗначениеЗаполнено(Вариант.Ссылка); + Возврат (ПолныеПраваНаВарианты Или Вариант.АвторТекущийПользователь) И ЗначениеЗаполнено(Вариант.Ссылка); КонецФункции &НаКлиентеНаСервереБезКонтекста @@ -558,7 +563,7 @@ &НаСервере Процедура ПроверитьИЗаписатьНаСервере(Пакет) - ВариантЭтоНовый = НЕ ЗначениеЗаполнено(ВариантСсылка); + ВариантЭтоНовый = Не ЗначениеЗаполнено(ВариантСсылка); Если ВариантЭтоНовый И ВариантыОтчетов.НаименованиеЗанято(Контекст.ОтчетСсылка, ВариантСсылка, ВариантНаименование) Тогда ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '""%1"" занято, необходимо указать другое Наименование.'"), ВариантНаименование); @@ -661,12 +666,12 @@ | Справочник.ВариантыОтчетов КАК ВариантыОтчетов |ГДЕ | ВариантыОтчетов.Отчет = &Отчет - | И (ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ - | ИЛИ ВариантыОтчетов.Пользовательский = ИСТИНА) - | И (ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ - | ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь - | ИЛИ ВариантыОтчетов.КлючВарианта = &ПрототипКлюч - | ИЛИ ВариантыОтчетов.КлючВарианта = &ТекущийКлючВарианта) + | И НЕ(НЕ ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ + | И НЕ ВариантыОтчетов.Пользовательский = ИСТИНА) + | И НЕ(НЕ ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ + | И НЕ ВариантыОтчетов.Автор = &ТекущийПользователь + | И НЕ ВариантыОтчетов.КлючВарианта = &ПрототипКлюч + | И НЕ ВариантыОтчетов.КлючВарианта = &ТекущийКлючВарианта) | И НЕ ВариантыОтчетов.ПредопределенныйВариант В (&ОтключенныеВариантыПрограммы)"; Запрос = Новый Запрос; diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/УсловияОтборовОтчета/Help/ru.html b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/УсловияОтборовОтчета/Help/ru.html index 377418645..901d21978 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/УсловияОтборовОтчета/Help/ru.html +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/УсловияОтборовОтчета/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

                                • Поле - поле отчета, по которому предусмотрен отбор; diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Form.form b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Form.form index 19ed48697..bf007fc3a 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Form.form +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Form.form @@ -423,6 +423,7 @@ Vertical auto + false @@ -1663,6 +1664,7 @@ Vertical auto + false @@ -2222,6 +2224,7 @@ Vertical auto + false @@ -2787,6 +2790,7 @@ Vertical auto + false true diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Help/ru.html b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Help/ru.html index 9153c3270..cac1728d5 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Help/ru.html +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

                                  Оформление

                                  diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Module.bsl index f3fc3aa42..43dfc0fd6 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ЭлементУсловногоОформленияОтчета/Module.bsl @@ -128,11 +128,11 @@ КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Функция УзелКД(ЭтотОбъект) - Если ЭтотОбъект.ИдентификаторТекущегоУзлаКД = Неопределено Тогда - Возврат ЭтотОбъект.КомпоновщикНастроек.Настройки.УсловноеОформление; +Функция УзелКД(Форма) + Если Форма.ИдентификаторТекущегоУзлаКД = Неопределено Тогда + Возврат Форма.КомпоновщикНастроек.Настройки.УсловноеОформление; Иначе - ТекущийУзелКД = ЭтотОбъект.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(ЭтотОбъект.ИдентификаторТекущегоУзлаКД); + ТекущийУзелКД = Форма.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Форма.ИдентификаторТекущегоУзлаКД); Возврат ТекущийУзелКД.УсловноеОформление; КонецЕсли; КонецФункции diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ManagerModule.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ManagerModule.bsl index 8ad42076b..3d9146204 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ManagerModule.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ManagerModule.bsl @@ -149,7 +149,7 @@ | И Варианты.Пользовательский = ИСТИНА"; Запрос.УстановитьПараметр("Отчет", ОтчетСсылка); - ТекущийПользователь = Пользователи.ТекущийПользователь(); + ТекущийПользователь = Пользователи.АвторизованныйПользователь(); Если Пользователь = Неопределено Тогда diff --git a/SSL/src/StyleItems/ДосьеВторостепеннаяНадписьЦвет/ДосьеВторостепеннаяНадписьЦвет.mdo b/SSL/src/StyleItems/ДосьеВторостепеннаяНадписьЦвет/ДосьеВторостепеннаяНадписьЦвет.mdo new file mode 100644 index 000000000..4c79f5277 --- /dev/null +++ b/SSL/src/StyleItems/ДосьеВторостепеннаяНадписьЦвет/ДосьеВторостепеннаяНадписьЦвет.mdo @@ -0,0 +1,15 @@ + + + ДосьеВторостепеннаяНадписьЦвет + + ru + Досье: второстепенная надпись - цвет + + + + 100 + 100 + 100 + + + diff --git a/SSL/src/StyleItems/ДосьеГиперссылкаЦвет/ДосьеГиперссылкаЦвет.mdo b/SSL/src/StyleItems/ДосьеГиперссылкаЦвет/ДосьеГиперссылкаЦвет.mdo new file mode 100644 index 000000000..94c42f8b5 --- /dev/null +++ b/SSL/src/StyleItems/ДосьеГиперссылкаЦвет/ДосьеГиперссылкаЦвет.mdo @@ -0,0 +1,15 @@ + + + ДосьеГиперссылкаЦвет + + ru + Досье: гиперссылка - цвет + + + + 28 + 85 + 174 + + + diff --git a/SSL/src/StyleItems/ДосьеПанельРазделовЦвет/ДосьеПанельРазделовЦвет.mdo b/SSL/src/StyleItems/ДосьеПанельРазделовЦвет/ДосьеПанельРазделовЦвет.mdo new file mode 100644 index 000000000..c42754ece --- /dev/null +++ b/SSL/src/StyleItems/ДосьеПанельРазделовЦвет/ДосьеПанельРазделовЦвет.mdo @@ -0,0 +1,15 @@ + + + ДосьеПанельРазделовЦвет + + ru + Досье: панель разделов - цвет + + + + 253 + 245 + 199 + + + diff --git a/SSL/src/StyleItems/ДосьеПлохаяОценкаЦвет/ДосьеПлохаяОценкаЦвет.mdo b/SSL/src/StyleItems/ДосьеПлохаяОценкаЦвет/ДосьеПлохаяОценкаЦвет.mdo new file mode 100644 index 000000000..614ae5d19 --- /dev/null +++ b/SSL/src/StyleItems/ДосьеПлохаяОценкаЦвет/ДосьеПлохаяОценкаЦвет.mdo @@ -0,0 +1,15 @@ + + + ДосьеПлохаяОценкаЦвет + + ru + Досье: плохая оценка - цвет + + + + 225 + 40 + 40 + + + diff --git a/SSL/src/StyleItems/ДосьеРамкаСтрокиЦвет/ДосьеРамкаСтрокиЦвет.mdo b/SSL/src/StyleItems/ДосьеРамкаСтрокиЦвет/ДосьеРамкаСтрокиЦвет.mdo new file mode 100644 index 000000000..35e27f2c2 --- /dev/null +++ b/SSL/src/StyleItems/ДосьеРамкаСтрокиЦвет/ДосьеРамкаСтрокиЦвет.mdo @@ -0,0 +1,15 @@ + + + ДосьеРамкаСтрокиЦвет + + ru + Досье: рамка строки - цвет + + + + 192 + 192 + 192 + + + diff --git a/SSL/src/StyleItems/ДосьеРасшифровкаЦвет/ДосьеРасшифровкаЦвет.mdo b/SSL/src/StyleItems/ДосьеРасшифровкаЦвет/ДосьеРасшифровкаЦвет.mdo new file mode 100644 index 000000000..05d793c68 --- /dev/null +++ b/SSL/src/StyleItems/ДосьеРасшифровкаЦвет/ДосьеРасшифровкаЦвет.mdo @@ -0,0 +1,15 @@ + + + ДосьеРасшифровкаЦвет + + ru + Досье: расшифровка - цвет + + + + 28 + 85 + 174 + + + diff --git a/SSL/src/StyleItems/ДосьеТекущийРазделЦвет/ДосьеТекущийРазделЦвет.mdo b/SSL/src/StyleItems/ДосьеТекущийРазделЦвет/ДосьеТекущийРазделЦвет.mdo new file mode 100644 index 000000000..6a5e7bdb3 --- /dev/null +++ b/SSL/src/StyleItems/ДосьеТекущийРазделЦвет/ДосьеТекущийРазделЦвет.mdo @@ -0,0 +1,15 @@ + + + ДосьеТекущийРазделЦвет + + ru + Досье: текущий раздел - цвет + + + + 251 + 225 + 81 + + + diff --git a/SSL/src/StyleItems/ДосьеХорошаяОценкаЦвет/ДосьеХорошаяОценкаЦвет.mdo b/SSL/src/StyleItems/ДосьеХорошаяОценкаЦвет/ДосьеХорошаяОценкаЦвет.mdo new file mode 100644 index 000000000..387b88c4a --- /dev/null +++ b/SSL/src/StyleItems/ДосьеХорошаяОценкаЦвет/ДосьеХорошаяОценкаЦвет.mdo @@ -0,0 +1,13 @@ + + + ДосьеХорошаяОценкаЦвет + + ru + Досье: хорошая оценка - цвет + + + + 128 + + + diff --git a/SSL/src/Subsystems/Администрирование/CommandInterface.cmi b/SSL/src/Subsystems/Администрирование/CommandInterface.cmi index 440ee195c..2546b0a52 100644 --- a/SSL/src/Subsystems/Администрирование/CommandInterface.cmi +++ b/SSL/src/Subsystems/Администрирование/CommandInterface.cmi @@ -116,13 +116,17 @@ - InformationRegister.АдресныеОбъекты.Command.АвторизацияНаСайтеПоддержкиПользователей + InformationRegister.АдресныеОбъекты.Command.АвторизацияНаСайтеПоддержки InformationRegister.АдресныеОбъекты.Command.ОчиститьАдресныйКлассификатор + + Catalog.УчетныеЗаписиЭлектроннойПочты.Command.НастройкаСистемнойУчетнойЗаписи + + DataProcessor.АктивныеПользователи.Command.АктивныеПользователи @@ -135,10 +139,6 @@ Catalog.ГруппыПользователей.StandardCommand.OpenList - - Catalog.УчетныеЗаписиЭлектроннойПочты.Command.НастройкаСистемнойУчетнойЗаписи - - DataProcessor.РезервноеКопированиеИБ.Command.ПоказатьРезультат @@ -181,6 +181,10 @@ Report.ОбъемНенужныхФайлов.StandardCommand.Open + + Report.ПрогрессОтложенногоОбновления.StandardCommand.Open + + Report.СведенияОПользователях.StandardCommand.Open @@ -230,7 +234,7 @@ - Catalog.КлассификаторБанковРФ.Command.КлассификаторБанковРФ + Catalog.КлассификаторБанковРФ.Command.ЗагрузкаКлассификатораБанковРФ @@ -380,15 +384,15 @@ InformationRegister.НастройкиВерсионированияОбъектов.StandardCommand.OpenList InformationRegister.АдресныеОбъекты.StandardCommand.OpenList InformationRegister.АдресныеОбъекты.Command.ЗагрузитьАдресныйКлассификатор - InformationRegister.АдресныеОбъекты.Command.АвторизацияНаСайтеПоддержкиПользователей + InformationRegister.АдресныеОбъекты.Command.АвторизацияНаСайтеПоддержки InformationRegister.АдресныеОбъекты.Command.ОчиститьАдресныйКлассификатор + Catalog.УчетныеЗаписиЭлектроннойПочты.Command.НастройкаСистемнойУчетнойЗаписи NavigationPanelSeeAlso DataProcessor.АктивныеПользователи.Command.АктивныеПользователи Catalog.ГруппыВнешнихПользователей.StandardCommand.OpenList Catalog.ГруппыПользователей.StandardCommand.OpenList - Catalog.УчетныеЗаписиЭлектроннойПочты.Command.НастройкаСистемнойУчетнойЗаписи DataProcessor.РезервноеКопированиеИБ.Command.ПоказатьРезультат Catalog.ПрофилиГруппДоступа.StandardCommand.OpenList Catalog.СценарииОбменовДанными.StandardCommand.OpenList @@ -410,7 +414,7 @@ DataProcessor.ЖурналРегистрации.StandardCommand.Open DataProcessor.ЗагрузкаДанныхИзФайла.StandardCommand.Open DataProcessor.ЗагрузкаКурсовВалют.StandardCommand.Open - Catalog.КлассификаторБанковРФ.Command.КлассификаторБанковРФ + Catalog.КлассификаторБанковРФ.Command.ЗагрузкаКлассификатораБанковРФ DataProcessor.НастройкиПользователей.Command.КопированиеНастроекПользователей CommonForm.НастройкаОтправкиSMS.StandardCommand.Open DataProcessor.НастройкаРезервногоКопированияИБ.StandardCommand.Open diff --git a/SSL/src/Subsystems/Администрирование/Администрирование.mdo b/SSL/src/Subsystems/Администрирование/Администрирование.mdo index 0a623c6e2..8b48d776d 100644 --- a/SSL/src/Subsystems/Администрирование/Администрирование.mdo +++ b/SSL/src/Subsystems/Администрирование/Администрирование.mdo @@ -79,4 +79,6 @@ DataProcessor.ПереносФайловВТома Report.ОбъемНенужныхФайлов DataProcessor.ПоискИУдалениеДублей + InformationRegister.ПравилаДляОбменаДанными + Report.ПрогрессОтложенногоОбновления diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АдресныйКлассификатор/АдресныйКлассификатор.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АдресныйКлассификатор/АдресныйКлассификатор.mdo index b2d633513..1dd96eaae 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АдресныйКлассификатор/АдресныйКлассификатор.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АдресныйКлассификатор/АдресныйКлассификатор.mdo @@ -9,7 +9,6 @@ CommonModule.АдресныйКлассификатор CommonModule.АдресныйКлассификаторКлиентСервер CommonModule.АдресныйКлассификаторВызовСервера - WebService.AddressSystem Constant.ИсточникДанныхАдресногоКлассификатора CommonModule.АдресныйКлассификаторПовтИсп XDTOPackage.АдресныйКлассификатор @@ -26,5 +25,6 @@ InformationRegister.УдалитьАдресныйКлассификатор CommonModule.АдресныйКлассификаторСлужебный Role.ДобавлениеИзменениеАдресныхСведений + Constant.ПараметрыАдресногоКлассификатора Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АнализЖурналаРегистрации/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АнализЖурналаРегистрации/Help/ru.html index 1b9e91769..67d40262e 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 f3d2d91f1..7bd367641 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АнализЖурналаРегистрации/АнализЖурналаРегистрации.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АнализЖурналаРегистрации/АнализЖурналаРегистрации.mdo @@ -12,5 +12,6 @@ Report.АнализЖурналаРегистрации CommonModule.АнализЖурналаРегистрацииСлужебный + CommonModule.АнализЖурналаРегистрацииКлиент Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo index d76c18b2d..5c105b348 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo @@ -63,7 +63,6 @@ CommonModule.ОбщегоНазначенияКлиентПереопределяемый CommonModule.ДлительныеОперации CommonModule.ДлительныеОперацииКлиент - CommonModule.ДлительныеОперацииКлиентПовтИсп CommonForm.ДлительнаяОперация CommonPicture.Вопрос32 FunctionalOption.РаботаВМоделиСервиса @@ -157,7 +156,6 @@ CommonPicture.Успешно32 CommonPicture.Успешно CommonModule.ФизическиеЛицаКлиентСервер - CommonTemplate.КомпонентаСклоненияФИО CommonModule.АдминистрированиеКластераCOMКлиентСервер CommonModule.АдминистрированиеКластераRASКлиентСервер CommonModule.АдминистрированиеКластераКлиентСервер @@ -219,5 +217,12 @@ CommonForm.УстановленныеРасширения Role.БазовыеПраваВнешнегоПользователя XDTOPackage.ApplicationPermissions_1_0_0_2 + CommonModule.ДлительныеОперацииВызовСервера + CommonModule.ДлительныеОперацииГлобальный + SessionParameter.БуферОбмена + CommonPicture.СкопироватьВБуферОбмена + CommonPicture.ВставитьИзБуфераОбмена + CommonModule.РегламентныеЗаданияСервер + CommonPicture.ВосклицательныйЗнакКрасный Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БизнесПроцессыИЗадачи/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БизнесПроцессыИЗадачи/Help/ru.html index c23ad51a1..a6051cbb8 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 e9b356a77..98ba8353e 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 20d79536e..da3fc1d34 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВариантыОтчетов/ВариантыОтчетов.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВариантыОтчетов/ВариантыОтчетов.mdo @@ -53,7 +53,6 @@ CommonPicture.ПиктограммыПараметровИОтборов CommonPicture.ПереместитьВлевоВверх CommonPicture.ПереместитьВправоВниз - CommonPicture.ДобавитьВложенный CommonPicture.ДобавитьРодительский CommonPicture.ПиктограммыСтруктурыОтчета CommonPicture.БыстрыйДоступСФлажком @@ -72,5 +71,7 @@ InformationRegister.ПредопределенныеВариантыОтчетовВерсийРасширений Catalog.ПредопределенныеВариантыОтчетовРасширений CommonForm.ВспомогательнаяФормаНастроекОтчета + Report.УниверсальныйОтчет + Role.ИспользованиеУниверсальногоОтчета Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВерсионированиеОбъектов/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВерсионированиеОбъектов/Help/ru.html index d6ffdace2..a8685a999 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 1ebdc1d8c..1b0a933c1 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВерсионированиеОбъектов/ВерсионированиеОбъектов.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВерсионированиеОбъектов/ВерсионированиеОбъектов.mdo @@ -31,7 +31,6 @@ Enum.ТипыВерсийОбъекта Role.ЧтениеИнформацииОВерсияхОбъектов EventSubscription.ОчиститьИнформациюОбАвтореВерсии - EventSubscription.ЗаписатьВерсиюПриОбменеДанными Report.АнализВерсийОбъектов Enum.СрокиХраненияВерсий ScheduledJob.ОчисткаУстаревшихВерсийОбъектов @@ -41,5 +40,6 @@ DefinedType.ВерсионируемыеДанныеОбъект EventSubscription.ЗаписатьВерсиюОбъекта CommonModule.ВерсионированиеОбъектовПереопределяемый + SessionParameter.ВыполняетсяЗаписьОбъекта Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ГрупповоеИзменениеОбъектов/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ГрупповоеИзменениеОбъектов/Help/ru.html index a8b6dbe1e..0874edd93 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ГрупповоеИзменениеОбъектов/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ГрупповоеИзменениеОбъектов/Help/ru.html @@ -1 +1 @@ -С помощью группового изменения объектов пользователь может за одно действие изменить значения реквизитов, дополнительных реквизитов или дополнительных сведений (далее по тексту: реквизитов) у выбранных объектов определенного типа. Для работы с групповым изменением объектов пользователю не требуются дополнительные роли. Если пользователю доступно редактирование самого объекта, то ему доступно и групповое изменение объекта. Для перехода к помощнику группового изменения можно воспользоваться командой Изменить выделенные командной панели или контекстного меню списка, предварительно выбрав в списке набор объектов с помощью множественного выделения. \ No newline at end of file +С помощью группового изменения объектов пользователь может за одно действие изменить значения реквизитов, дополнительных реквизитов или дополнительных сведений (далее по тексту: реквизитов) у выбранных объектов определенного типа. Для работы с групповым изменением объектов пользователю не требуются дополнительные роли. Если пользователю доступно редактирование самого объекта, то ему доступно и групповое изменение объекта. Для перехода к помощнику группового изменения можно воспользоваться командой Изменить выделенные командной панели или контекстного меню списка, предварительно выбрав в списке набор объектов с помощью множественного выделения. \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo index 610499110..8447e4318 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДатыЗапретаИзменения/ДатыЗапретаИзменения.mdo @@ -23,6 +23,8 @@ SessionParameter.ДействующиеДатыЗапретаИзменения Constant.ИспользоватьДатыЗапретаЗагрузки Constant.ИспользоватьДатыЗапретаИзменения - EventSubscription.ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента + Role.ДобавлениеИзменениеДатЗапретаИзменения + FunctionalOption.ИспользоватьДатыЗапретаЗагрузки + FunctionalOption.ИспользоватьДатыЗапретаИзменения Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДополнительныеОтчетыИОбработки/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДополнительныеОтчетыИОбработки/Help/ru.html index e22e1dfa7..33a865dd5 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДополнительныеОтчетыИОбработки/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДополнительныеОтчетыИОбработки/Help/ru.html @@ -1,19 +1,19 @@ - +

                                  Конфигурация позволяет подключать и использовать дополнительные (внешние) отчеты и обработки к ИБ в режиме «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 f59626bab..e59e5d98f 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 9b6fea325..ccc68904a 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/ЗавершениеРаботыПользователей.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/ЗавершениеРаботыПользователей.mdo @@ -20,5 +20,6 @@ InformationRegister.УдалитьБлокировкиСеансовОбластиДанных CommonModule.СоединенияИБВызовСервера InformationRegister.БлокировкиСеансовОбластейДанных + CommonModule.СоединенияИБПереопределяемый Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗагрузкаДанныхИзФайла/ЗагрузкаДанныхИзФайла.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗагрузкаДанныхИзФайла/ЗагрузкаДанныхИзФайла.mdo index 46c1d92c5..1a5327230 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗагрузкаДанныхИзФайла/ЗагрузкаДанныхИзФайла.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗагрузкаДанныхИзФайла/ЗагрузкаДанныхИзФайла.mdo @@ -8,5 +8,7 @@ DataProcessor.ЗагрузкаДанныхИзФайла CommonModule.ЗагрузкаДанныхИзФайлаКлиент CommonModule.ЗагрузкаДанныхИзФайлаПереопределяемый + CommonModule.ЗагрузкаДанныхИзФайла + CommonModule.ЗагрузкаДанныхИзФайлаКлиентСервер Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗапретРедактированияРеквизитовОбъектов/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗапретРедактированияРеквизитовОбъектов/Help/ru.html index 25b9540cd..8237523c9 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 3ad4f0190..e1d3e69a7 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗащитаПерсональныхДанных/ЗащитаПерсональныхДанных.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗащитаПерсональныхДанных/ЗащитаПерсональныхДанных.mdo @@ -20,7 +20,10 @@ Document.ОтзывСогласияНаОбработкуПерсональныхДанных DocumentJournal.СогласияНаОбработкуПерсональныхДанных InformationRegister.СогласияНаОбработкуПерсональныхДанных - Report.ИстекающиеСогласияНаОбработкуПерсональныхДанных - Report.ДействующиеСогласияНаОбработкуПерсональныхДанных + Report.СогласияНаОбработкуПерсональныхДанныхИстекающие + Report.СогласияНаОбработкуПерсональныхДанныхДействующие + DataProcessor.СкрытиеКонфиденциальнойИнформации + EventSubscription.ПроверитьДатуЗапретаИзмененияПередУдалениемЗащитаПерсональныхДанных + EventSubscription.ПроверитьДатуЗапретаИзмененияПередЗаписьюДокументаЗащитаПерсональныхДанных Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Интеграция1СБухфон/Интеграция1СБухфон.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Интеграция1СБухфон/Интеграция1СБухфон.mdo index 8447e05ca..c7c2d944b 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Интеграция1СБухфон/Интеграция1СБухфон.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Интеграция1СБухфон/Интеграция1СБухфон.mdo @@ -11,9 +11,6 @@ Constant.ИспользоватьИнтеграцию1СБухфон CommonForm.Настройка1СБухфон CommonForm.ПоискИсполняемогоФайла1СБухфон - CommonPicture.Запустить1СБухфонТакси - CommonPicture.Консультант1СБухфон - CommonPicture.Логотип1СБухфон CommonModule.Интеграция1СБухфон CommonModule.Интеграция1СБухфонКлиент CommonCommand.Запустить1СБухфон diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КалендарныеГрафики/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КалендарныеГрафики/Help/ru.html index e40d9d690..b3b81405e 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 2f58e66e1..193f1a568 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 c8dd8194d..daeca7efc 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтактнаяИнформация/КонтактнаяИнформация.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтактнаяИнформация/КонтактнаяИнформация.mdo @@ -37,5 +37,8 @@ EventSubscription.ОбновитьКонтактнуюИнформацию Role.ДобавлениеИзменениеВидовКонтактнойИнформации CommonPicture.ВидыКонтактнойИнформации + CommonPicture.ЯндексКарты + CommonPicture.GoogleMaps + CommonPicture.ИсторияИзменений Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/НастройкаПорядкаЭлементов/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/НастройкаПорядкаЭлементов/Help/ru.html index 5b19718a7..66a64bd77 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/НастройкаПорядкаЭлементов/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/НастройкаПорядкаЭлементов/Help/ru.html @@ -1,9 +1,9 @@ - +

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

                                  -

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

                                  +

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

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

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

                                  \ 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 5af4b4f58..c776ff941 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 f728817ca..795e2a359 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/ОбменДанными.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/ОбменДанными.mdo @@ -59,7 +59,6 @@ CommonCommand.СценарииСинхронизации CommonPicture.СостояниеОбменаДаннымиОшибка CommonForm.СинхронизацияДанных - Role.НастройкаСинхронизацииДанных Role.ВыполнениеСинхронизацииДанных CommandGroup.СинхронизацияДанных CommonCommand.СинхронизироватьСДополнительнымиПараметрами @@ -133,7 +132,7 @@ CommonModule.ОбменДаннымиXDTOСервер XDTOPackage.ExchangeMessage XDTOPackage.EnterpriseData_1_0_beta - XDTOPackage.EnterpriseData_1_0_1 + XDTOPackage.EnterpriseData_1_0_3 InformationRegister.ПубличныеИдентификаторыСинхронизируемыхОбъектов InformationRegister.ДанныеОбъектовДляРегистрацииВОбменах DataProcessor.КонвертацияОбъектовXDTO @@ -142,5 +141,9 @@ WebService.EnterpriseDataUpload_1_0_1_1 XDTOPackage.EnterpriseDataExchange_1_0_1_1 CommonModule.ОбменДаннымиСлужебный + InformationRegister.ОбработчикиСобытийСинхронизацииДанных + Constant.ДанныеДляОтложенногоОбновления + XDTOPackage.EnterpriseData_1_1_3 + XDTOPackage.EnterpriseData_1_2_1 Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo index f04f31e3a..8038ad0f6 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo @@ -25,6 +25,15 @@ CommonModule.ОбновлениеИнформационнойБазыГлобальный CommonModule.ОбновлениеИнформационнойБазыСлужебный CommonModule.ОбновлениеИнформационнойБазыСлужебныйВызовСервера + SessionParameter.ПараметрыОбработчикаОбновления + ExchangePlan.ОбновлениеИнформационнойБазы + FunctionalOption.ОтложенноеОбновлениеЗавершеноУспешно + Constant.ОтложенноеОбновлениеЗавершеноУспешно + Constant.СведенияОБлокируемыхОбъектах + InformationRegister.ДанныеОбработанныеВЦентральномУзлеРИБ + Report.ПрогрессОтложенногоОбновления CommonModule.ОбновлениеИнформационнойБазыВызовСервера + Constant.ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно + FunctionalOption.ОтложенноеОбновлениеВГлавномУзлеЗавершеноУспешно Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/Help/ru.html index b9f781b2d..8d1942cb8 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/Help/ru.html @@ -1,2 +1,2 @@ - +

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

                                  \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/ОбновлениеКонфигурации.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/ОбновлениеКонфигурации.mdo index 917d67c2f..772eda711 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/ОбновлениеКонфигурации.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/ОбновлениеКонфигурации.mdo @@ -13,7 +13,7 @@ CommonModule.ОбновлениеКонфигурации CommonModule.ОбновлениеКонфигурацииПереопределяемый CommonModule.ОбновлениеКонфигурацииКлиент - CommonModule.ОбновлениеКонфигурацииКлиентГлобальный + CommonModule.ОбновлениеКонфигурацииГлобальный CommonModule.ОбновлениеКонфигурацииКлиентПереопределяемый Role.ПроверкаДоступныхОбновленийКонфигурации Constant.СтатусОбновленияКонфигурации diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОценкаПроизводительности/ОценкаПроизводительности.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОценкаПроизводительности/ОценкаПроизводительности.mdo index b467b1e4e..83b8cc4f9 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОценкаПроизводительности/ОценкаПроизводительности.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОценкаПроизводительности/ОценкаПроизводительности.mdo @@ -5,9 +5,8 @@ ru Оценка производительности - CommonModule.ОценкаПроизводительностиКлиентГлобальный + CommonModule.ОценкаПроизводительностиГлобальный CommonModule.ОценкаПроизводительностиКлиентСервер - CommonModule.ОценкаПроизводительностиВызовСервераПолныеПрава Role.НастройкаИОценкаПроизводительности DataProcessor.ОценкаПроизводительности ScheduledJob.ЭкспортОценкиПроизводительности @@ -26,5 +25,8 @@ Constant.ОценкаПроизводительностиЭкспортВсехКлючевыхОпераций SessionParameter.КомментарийЗамераВремени InformationRegister.ЗамерыВремениТехнологические + CommonModule.ОценкаПроизводительности + CommonModule.ОценкаПроизводительностиВызовСервера + CommonModule.ОценкаПроизводительностиПовтИсп Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Help/ru.html index 80ee82369..43ceddbe7 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Help/ru.html @@ -1,8 +1,8 @@ - +

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

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

                                  -

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

                                  +

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

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

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

                                  \ 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 f75d97871..39341b058 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 ad3930bd5..594ab3a16 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолучениеФайловИзИнтернета/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолучениеФайловИзИнтернета/Help/ru.html @@ -1,2 +1,2 @@ - +

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

                                  \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Пользователи/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Пользователи/Help/ru.html index 4bdc83803..e5bc4d22d 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 0f069381e..fc167da10 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Пользователи/Пользователи.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Пользователи/Пользователи.mdo @@ -45,7 +45,6 @@ Constant.ИспользоватьГруппыПользователей FunctionalOption.ИспользоватьВнешнихПользователей FunctionalOption.ИспользоватьГруппыПользователей - Enum.ТипыПользователей CommonModule.ПользователиСлужебныйКлиент CommonModule.ПользователиКлиентСервер CommonModule.ПользователиСлужебныйКлиентСервер @@ -70,5 +69,7 @@ DefinedType.ВнешнийПользовательОбъект CommonForm.ВыборТиповПользователей DefinedType.Пользователь + CommonForm.НовыйПароль + CommonForm.ПредупреждениеБезопасности Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПрефиксацияОбъектов/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПрефиксацияОбъектов/Help/ru.html index 23f24947a..562dc92bf 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 72786951f..87b874cfc 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСКонтрагентами/РаботаСКонтрагентами.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСКонтрагентами/РаботаСКонтрагентами.mdo @@ -25,7 +25,7 @@ CommonModule.РаботаСКонтрагентамиКлиентСерверПереопределяемый CommonPicture.НекорректныйКонтрагент CommonModule.РаботаСКонтрагентамиКлиентПереопределяемый - DataProcessor.СбросНастроекПроверкиКонтрагентов + DataProcessor.ИнструментыРазработчикаПроверкаКонтрагентов CommonModule.РегламентированныеДанныеКлиентСервер CommonModule.ДанныеЕдиныхГосРеестров CommonTemplate.ИнструкцияПоПроверкеКонтрагентов @@ -44,5 +44,17 @@ CommonForm.ЗаполнениеРеквизитовКонтрагента Role.ИспользованиеДосьеКонтрагента Report.ДосьеКонтрагента + CommonPicture.ДосьеУвеличениеПоказателя + CommonPicture.ДосьеУменьшениеПоказателя + StyleItem.ДосьеПанельРазделовЦвет + StyleItem.ДосьеПлохаяОценкаЦвет + StyleItem.ДосьеРасшифровкаЦвет + StyleItem.ДосьеТекущийРазделЦвет + StyleItem.ДосьеХорошаяОценкаЦвет + StyleItem.ДосьеГиперссылкаЦвет + StyleItem.ДосьеВторостепеннаяНадписьЦвет + StyleItem.ДосьеРамкаСтрокиЦвет + CommonPicture.Сервис1СКонтрагент + CommonForm.Сервис1СКонтрагентНеПодключен Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСПочтовымиСообщениями/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСПочтовымиСообщениями/Help/ru.html index 8eff3d2d1..1ebf9f9e4 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 fd00aebef..3b2474d8a 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСПочтовымиСообщениями/РаботаСПочтовымиСообщениями.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСПочтовымиСообщениями/РаботаСПочтовымиСообщениями.mdo @@ -24,5 +24,8 @@ Role.ИспользованиеУчетныхЗаписейЭлектроннойПочты CommonModule.РаботаСПочтовымиСообщениямиВызовСервера CommonForm.ОтправкаТабличныхДокументовПоПочте + CommonModule.РаботаСПочтовымиСообщениямиПереопределяемый + CommonForm.ВыборПолучателейСообщения + CommonModule.РаботаСПочтовымиСообщениямиКлиентПереопределяемый Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/Help/ru.html index bbd3e6621..214286042 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 a79affc50..d6caa02f4 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РассылкаОтчетов/РассылкаОтчетов.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РассылкаОтчетов/РассылкаОтчетов.mdo @@ -19,5 +19,6 @@ CommonPicture.РассылкаОтчетов CommonModule.РассылкаОтчетов DefinedType.ПолучательРассылки + CommonModule.РассылкаОтчетовКлиентПереопределяемый Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РегламентныеЗадания/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РегламентныеЗадания/Help/ru.html index fe605910b..c5cca1037 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 678d0289e..008ecde1e 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РегламентныеЗадания/РегламентныеЗадания.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РегламентныеЗадания/РегламентныеЗадания.mdo @@ -11,11 +11,14 @@ CommonPicture.ВыполнитьРегламентноеЗаданиеВручную - CommonModule.РегламентныеЗаданияСервер DataProcessor.РегламентныеИФоновыеЗадания Constant.НастройкиВыполненияРегламентныхЗаданий CommonModule.РегламентныеЗаданияСлужебный CommonModule.РегламентныеЗаданияПереопределяемый EventSubscription.ВключитьРегламентноеЗаданиеПриИзмененииФункциональнойОпции + CommonForm.БлокировкаРаботыСВнешнимиРесурсами + Constant.ПараметрыБлокировкиРаботыСВнешнимиРесурсами + SessionParameter.РаботаСВнешнимиРесурсамиЗаблокирована + CommonModule.РегламентныеЗаданияКлиент Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РезервноеКопированиеИБ/РезервноеКопированиеИБ.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РезервноеКопированиеИБ/РезервноеКопированиеИБ.mdo index c4de6f798..9bf67929d 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РезервноеКопированиеИБ/РезервноеКопированиеИБ.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РезервноеКопированиеИБ/РезервноеКопированиеИБ.mdo @@ -7,7 +7,7 @@ CommonModule.РезервноеКопированиеИБКлиент CommonModule.РезервноеКопированиеИБСервер - CommonModule.РезервноеКопированиеИБКлиентГлобальный + CommonModule.РезервноеКопированиеИБГлобальный DataProcessor.НастройкаРезервногоКопированияИБ DataProcessor.РезервноеКопированиеИБ CommonModule.РезервноеКопированиеИБВызовСервера diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Свойства/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Свойства/Help/ru.html index 2fda8f23e..2b2cfd6c7 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 new file mode 100644 index 000000000..233a8e9c7 --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/СклонениеПредставленийОбъектов/СклонениеПредставленийОбъектов.mdo @@ -0,0 +1,20 @@ + + + СклонениеПредставленийОбъектов + + ru + Склонение представлений объектов + + CommonForm.Склонения + DefinedType.ОбъектСклонения + InformationRegister.СклоненияПредставленийОбъектов + Constant.ИспользоватьСервисСклоненияMorpher + CommonModule.СклонениеПредставленийОбъектов + CommonModule.СклонениеПредставленийОбъектовКлиентСервер + CommonModule.СклонениеПредставленийОбъектовКлиент + CommonModule.СклонениеПредставленийОбъектовВызовСервера + Constant.ЛогинДоступаКСервисуMorpher + CommonTemplate.КомпонентаСклоненияФИО + CommonForm.НастройкаДоступаКСервисуMorpher + Subsystem.СтандартныеПодсистемы + diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/Help/ru.html index 18fdda89c..0ec0c3583 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/Help/ru.html @@ -1,2 +1,2 @@ - +

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

                                    \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеИтогамиИАгрегатами/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеИтогамиИАгрегатами/Help/ru.html index 0948cb2c5..b7b7c5b90 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 f01df659e..791dd7884 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ФайловыеФункции/ФайловыеФункции.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ФайловыеФункции/ФайловыеФункции.mdo @@ -60,5 +60,13 @@ CommonTemplate.КомпонентаTWAIN InformationRegister.НомераОтсканированныхФайлов CommonModule.ФайловыеФункцииКлиент + InformationRegister.НастройкиСинхронизацииФайлов + InformationRegister.СтатусыСинхронизацииФайловСОблачнымСервисом + Constant.СинхронизироватьФайлы + Role.НастройкаСинхронизацииФайлов + FunctionalOption.ИспользоватьСинхронизациюФайлов + ScheduledJob.СинхронизацияФайлов + Catalog.УчетныеЗаписиСинхронизацииФайлов + CommonPicture.ПапкаОблачногоСервиса Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo index b79b549ba..350ba4c41 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo @@ -53,12 +53,13 @@ РегламентныеЗадания РезервноеКопированиеИБ Свойства + СклонениеПредставленийОбъектов СтруктураПодчиненности ТекущиеДела УдалениеПомеченныхОбъектов УправлениеДоступом УправлениеИтогамиИАгрегатами ФайловыеФункции - ЭлектроннаяПодпись ЦентрМониторинга + ЭлектроннаяПодпись diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Help/ru.html index 31e927ccd..57aeb7367 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/ЗадачиПоБизнесПроцессу/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Help/ru.html index 6fb251b1a..a65110d90 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Help/ru.html +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Help/ru.html @@ -1,4 +1,4 @@ - +

                                    Предназначен для просмотра задач по бизнес-процессу.

                                    Открывается из бизнес-процесса (например, Задания) по команде Задачи панели навигации.

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

                                    diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Module.bsl index d7b9d8a22..cb98b83d3 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Module.bsl @@ -24,7 +24,6 @@ КонецЕсли; Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Задачи бизнес-процесса %1'"), Строка(Параметры.ЗначениеОтбора)); - БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); Если ИспользоватьПодчиненныеБизнесПроцессы Тогда ЗаполнитьДеревоЗадач(); @@ -134,6 +133,8 @@ Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЗавершенныйБизнесПроцесс); + БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); + КонецПроцедуры &НаСервере @@ -148,9 +149,11 @@ ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "Выполнена", Ложь); КонецЕсли; - БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); Элементы.Список.Обновить(); КонецЕсли; + // Цвет просроченных задач зависит от значения текущей даты, + // поэтому нужно переинициализировать условное оформление. + БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); КонецПроцедуры diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Help/ru.html index c6375f897..0f5e9e064 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Help/ru.html +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Help/ru.html @@ -1,4 +1,4 @@ - +

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

                                    Открывается из объекта программы по команде Задачи панели навигации.

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

                                    diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl index 31a598fc9..dea36e17d 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl @@ -29,7 +29,6 @@ Заголовок = НСтр("ru = 'Задачи по предмету'"); ИспользоватьДатуИВремяВСрокахЗадач = ПолучитьФункциональнуюОпцию("ИспользоватьДатуИВремяВСрокахЗадач"); Элементы.СрокИсполнения.Формат = ?(ИспользоватьДатуИВремяВСрокахЗадач, "ДЛФ=DT", "ДЛФ=D"); - БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); УстановитьОтбор(Новый Структура("ПоказыватьВыполненные", ПоказыватьВыполненные)); Если ИспользоватьПодчиненныеБизнесПроцессы Тогда @@ -129,6 +128,8 @@ Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЗавершенныйБизнесПроцесс); + БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); + КонецПроцедуры &НаСервере @@ -161,8 +162,10 @@ Если ИспользоватьПодчиненныеБизнесПроцессы Тогда ЗаполнитьДеревоЗадач(); Иначе - БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); Элементы.Список.Обновить(); + // Цвет просроченных задач зависит от значения текущей даты, + // поэтому нужно переинициализировать условное оформление. + БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Help/ru.html index c9882cfb9..e9d26d9bc 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Help/ru.html +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Help/ru.html @@ -1,4 +1,4 @@ - +

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

                                    Открывается по команде Мои задачи в разделе Бизнес-процессы и задачи.

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

                                    diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Module.bsl index 9c7847ac5..4f66b6d61 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Module.bsl @@ -4,6 +4,8 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + УстановитьУсловноеОформление(); + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; @@ -21,8 +23,6 @@ Элементы.ДатаНачала.Формат = ?(ИспользоватьДатуИВремяВСрокахЗадач, "ДЛФ=DT", "ДЛФ=D"); Элементы.Дата.Формат = ?(ИспользоватьДатуИВремяВСрокахЗадач, "ДЛФ=DT", "ДЛФ=D"); - БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); - КонецПроцедуры &НаСервере @@ -156,6 +156,14 @@ #Область СлужебныеПроцедурыИФункции +&НаСервере +Процедура УстановитьУсловноеОформление() + + УсловноеОформление.Элементы.Очистить(); + БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); + +КонецПроцедуры + &НаКлиенте Процедура СгруппироватьПоКолонке(Знач ИмяКолонкиРеквизита) РежимГруппировки = ИмяКолонкиРеквизита; @@ -211,8 +219,10 @@ Процедура ОбновитьСписокЗадачНаСервере() БизнесПроцессыИЗадачиСервер.УстановитьПараметрыСпискаМоихЗадач(Список); - БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); Элементы.Список.Обновить(); + // Цвет просроченных задач зависит от значения текущей даты, + // поэтому нужно переинициализировать условное оформление. + УстановитьУсловноеОформление(); КонецПроцедуры diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Form.form index 44c95e8e4..2f60ff2c1 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Form.form @@ -92,7 +92,7 @@ Form.Command.ОбновитьСписокЗадач Normal - PictureAndText + Auto true true UserCmds @@ -469,11 +469,11 @@ SetDateInterval SetDeletionMark - ГруппаКолонок - 131 + ГруппаКолонки + 161 - ВерхняяСтрока - 127 + ЛеваяГруппа + 155 Наименование 16 @@ -506,6 +506,7 @@ Left true + 40 true true true @@ -517,156 +518,9 @@ Normal - - Дата - 65 - - <key>ru</key> - <value>Записана / Срок</value> - - true - true - - true - - - Список.Date - - - ДатаExtendedTooltip - 118 - Label - true - true - - Left - - - - ДатаКонтекстноеМеню - 66 - true - - LabelField - Enter - true - Left - true - - true - true - - - - ДатаНачала - 46 - true - true - - true - - - Список.ДатаНачала - - - ДатаНачалаExtendedTooltip - 115 - Label - true - true - - Left - - - - ДатаНачалаКонтекстноеМеню - 47 - true - - InputField - Enter - true - Left - true - - 10 - true - true - true - true - true - Normal - - - - Номер - 57 - true - true - - - Список.Number - - - НомерExtendedTooltip - 113 - Label - true - true - - Left - - - - НомерКонтекстноеМеню - 58 - true - - LabelField - Enter - true - Left - true - - true - true - - - true - true - - true - - - <key>ru</key> - <value>Верхняя строка</value> - - - ru - Верхняя строка - - - ВерхняяСтрокаРасширеннаяПодсказка - 128 - Label - true - true - - Left - - - ColumnGroup - - auto - true - - - - НижняяСтрока - 129 ВажностьИАвтор - 135 + 153 Важность 24 @@ -751,6 +605,7 @@ Left true + 40 true true true @@ -768,13 +623,9 @@ ru Важность и автор - - ru - Важность и автор - ВажностьИАвторРасширеннаяПодсказка - 136 + 154 Label true true @@ -789,6 +640,77 @@ true + true + true + + true + + + <key>ru</key> + <value>Левая группа</value> + + + ЛеваяГруппаРасширеннаяПодсказка + 156 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + ПраваяГруппа + 157 + + Дата + 65 + + <key>ru</key> + <value>Записана / Срок</value> + + true + true + + true + + + Список.Date + + + ДатаExtendedTooltip + 118 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 66 + true + + LabelField + Enter + true + Left + true + + 12 + true + true + false + + СрокИсполнения 36 @@ -820,8 +742,10 @@ Left true + 12 true true + false true true true @@ -838,15 +762,11 @@ <key>ru</key> - <value>Нижняя строка</value> + <value>Правая группа</value> - - ru - Нижняя строка - - НижняяСтрокаРасширеннаяПодсказка - 130 + ПраваяГруппаРасширеннаяПодсказка + 158 Label true true @@ -856,10 +776,148 @@ ColumnGroup + Vertical auto true + + ГруппаПрочее + 159 + + ДатаНачала + 46 + true + true + + true + + + Список.ДатаНачала + + + ДатаНачалаExtendedTooltip + 115 + Label + true + true + + Left + + + + ДатаНачалаКонтекстноеМеню + 47 + true + + InputField + Enter + true + Left + true + + 10 + true + true + true + true + true + Normal + + + + Номер + 57 + true + true + + + Список.Number + + + НомерExtendedTooltip + 113 + Label + true + true + + Left + + + + НомерКонтекстноеМеню + 58 + true + + LabelField + Enter + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Группа прочее</value> + + + ГруппаПрочееРасширеннаяПодсказка + 160 + Label + true + true + + Left + + + ColumnGroup + + Vertical + auto + true + + + + Ссылка + 137 + true + true + + + Список.Ref + + + СсылкаРасширеннаяПодсказка + 139 + Label + true + true + + Left + + + + СсылкаКонтекстноеМеню + 138 + true + + LabelField + Enter + true + Left + true + + true + true + + true true @@ -867,11 +925,11 @@ <key>ru</key> - <value>Группа колонок</value> + <value>Группа колонки</value> - ГруппаКолонокРасширеннаяПодсказка - 132 + ГруппаКолонкиРасширеннаяПодсказка + 162 Label true true @@ -881,45 +939,10 @@ ColumnGroup - Vertical auto true - - Ссылка - 137 - true - true - - - Список.Ref - - - СсылкаРасширеннаяПодсказка - 139 - Label - true - true - - Left - - - - СсылкаКонтекстноеМеню - 138 - true - - LabelField - Enter - true - Left - true - - true - true - - None СписокКоманднаяПанель diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Help/ru.html index 60d9ea705..fdcccea88 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Help/ru.html +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

                                    diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Module.bsl index 588c80b35..2ce49d4dc 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Module.bsl @@ -23,13 +23,10 @@ Элементы.ДатаНачала.Формат = ?(ИспользоватьДатуИВремяВСрокахЗадач, "ДЛФ=DT", "ДЛФ=D"); Элементы.Дата.Формат = ?(ИспользоватьДатуИВремяВСрокахЗадач, "ДЛФ=DT", "ДЛФ=D"); - БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); - // Установка отбора динамического списка. ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "ПометкаУдаления", Ложь, ВидСравненияКомпоновкиДанных.Равно, , , РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); - КонецПроцедуры &НаСервере @@ -138,14 +135,22 @@ Процедура УстановитьУсловноеОформление() УсловноеОформление.Элементы.Очистить(); + // Элемент = УсловноеОформление.Элементы.Добавить(); - ЭлементыНижнейСтроки = Новый Массив(); - ВыбратьВсеПодчиненныеЭлементы(Элементы.НижняяСтрока, ЭлементыНижнейСтроки); - Для каждого ЭлементФормы Из ЭлементыНижнейСтроки Цикл + + // Скрыть вторую строку группировки. + КолонкиСпискаЗадач = Новый Массив(); + ВыбратьВсеПодчиненныеЭлементы(Элементы.ГруппаКолонки, КолонкиСпискаЗадач); + Для каждого ЭлементФормы Из КолонкиСпискаЗадач Цикл + + Если ЭлементФормы = Элементы.Наименование Тогда + Продолжить; + КонецЕсли; ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя); + КонецЦикла; ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); @@ -154,18 +159,7 @@ Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); - Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() - И ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда - Элемент = УсловноеОформление.Элементы.Добавить(); - ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); - ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Автор.Имя); - - ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.Автор"); - ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; - - Элемент.Оформление.УстановитьЗначениеПараметра("Текст", ""); - КонецЕсли; + БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); КонецПроцедуры @@ -207,7 +201,9 @@ Процедура ОбновитьСписокЗадачНаСервере() БизнесПроцессыИЗадачиСервер.УстановитьПараметрыСпискаМоихЗадач(Список); - БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); + // Цвет просроченных задач зависит от значения текущей даты, + // поэтому нужно переинициализировать условное оформление. + УстановитьУсловноеОформление(); Элементы.Список.Обновить(); КонецПроцедуры diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Help/ru.html index 10d50127e..da050477f 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Help/ru.html +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Help/ru.html @@ -1,4 +1,4 @@ - +

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

                                    • Выберите с помощью переключателя: 
                                        diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Module.bsl index 2cf950b02..4370f1944 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Module.bsl @@ -194,7 +194,7 @@ Функция ПараметрыЗакрытия() Результат = Новый Структура; - Результат.Вставить("Исполнитель", Исполнитель); + Результат.Вставить("Исполнитель", ?(ЗначениеЗаполнено(Исполнитель), Исполнитель, Неопределено)); Результат.Вставить("РольИсполнителя", Роль); Результат.Вставить("ОсновнойОбъектАдресации", ?(ОсновнойОбъектАдресации <> Неопределено И НЕ ОсновнойОбъектАдресации.Пустая(), ОсновнойОбъектАдресации, Неопределено)); diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Help/ru.html index 951f28662..4e30c8c38 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Help/ru.html +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Help/ru.html @@ -1,4 +1,4 @@ - +

                                        Сведения о задаче. 

                                        Дата начала выполнения

                                        • В поле Дата начала проставьте дату и время начала выполнения задачи. diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Module.bsl index 3e48003f9..5d1d75b67 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Module.bsl @@ -16,7 +16,7 @@ УстановитьПривилегированныйРежим(Истина); АвторСтрокой = Строка(Объект.Автор); - + КонецПроцедуры &НаСервере @@ -124,6 +124,7 @@ Элементы.АвторСтрокой.Видимость = Истина; Элементы.Исполнитель.КнопкаОткрытия = Ложь; КонецЕсли; + КонецПроцедуры #КонецОбласти diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Form.form index e30443d1f..ac8aae07a 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Form.form @@ -2189,6 +2189,10 @@ NotificationProcessing ОбработкаОповещения + + NavigationProcessing + ОбработкаПерехода + OnCreateAtServer ПриСозданииНаСервере diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Help/ru.html index c0e7518da..268f5599d 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Help/ru.html +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Help/ru.html @@ -1,4 +1,4 @@ - +

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

                                          Открывается по команде Все задачи в разделе Бизнес-процессы и задачи.

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

                                          diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Module.bsl index 44a1d00f5..e1fcb8361 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Module.bsl @@ -4,17 +4,17 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Перем ТекстЗаголовкаФормы; + УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; + ТекстЗаголовкаФормы = ""; Если Параметры.Свойство("ЗаголовокФормы", ТекстЗаголовкаФормы) - И НЕ ПустаяСтрока(ТекстЗаголовкаФормы) Тогда + И Не ПустаяСтрока(ТекстЗаголовкаФормы) Тогда Заголовок = ТекстЗаголовкаФормы; АвтоЗаголовок = Ложь; - КонецЕсли; Если Параметры.Свойство("БизнесПроцесс") Тогда @@ -31,8 +31,8 @@ Если Параметры.Свойство("ВидимостьОтборов") Тогда Элементы.ГруппаОтбор.Видимость = Параметры.ВидимостьОтборов; - Иначе - ПоАвтору = Пользователи.ТекущийПользователь(); + Иначе + ПоАвтору = Пользователи.АвторизованныйПользователь(); КонецЕсли; УстановитьОтбор(); @@ -44,7 +44,10 @@ Элементы.СрокИсполнения.Формат = ?(ИспользоватьДатуИВремяВСрокахЗадач, "ДЛФ=DT", "ДЛФ=D"); Элементы.ДатаИсполнения.Формат = ?(ИспользоватьДатуИВремяВСрокахЗадач, "ДЛФ=DT", "ДЛФ=D"); - БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); + Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда + Элементы.ПоАвтору.Видимость = Ложь; + Элементы.ПоИсполнителю.Видимость = Ложь; + КонецЕсли; КонецПроцедуры @@ -80,6 +83,20 @@ ОбщегоНазначения.ХранилищеСистемныхНастроекСохранить("Задачи.ЗадачаИсполнителя.Формы.ФормаСписка", ИмяНастроек, Настройки); КонецПроцедуры +&НаКлиенте +Процедура ОбработкаПерехода(ОбъектПерехода, СтандартнаяОбработка) + + Если Не ЗначениеЗаполнено(ОбъектПерехода) Или ОбъектПерехода = Элементы.Список.ТекущаяСтрока Тогда + Возврат; + КонецЕсли; + + ПоАвтору = Неопределено; + ПоИсполнителю = Неопределено; + ПоказыватьЗадачи = 0; + УстановитьОтбор(); + +КонецПроцедуры + #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы @@ -114,10 +131,11 @@ &НаКлиенте Процедура СписокПриАктивизацииСтроки(Элемент) Если Элемент.ТекущиеДанные <> Неопределено + И Элемент.ТекущиеДанные.Свойство("ПринятаКИсполнению") И НЕ Элемент.ТекущиеДанные.ПринятаКИсполнению Тогда - Элементы.ПринятьКИсполнению.Доступность= Истина; + Элементы.ПринятьКИсполнению.Доступность= Истина; Иначе - Элементы.ПринятьКИсполнению.Доступность= Ложь; + Элементы.ПринятьКИсполнению.Доступность= Ложь; КонецЕсли; КонецПроцедуры @@ -212,10 +230,20 @@ КонецПроцедуры +&НаСервере +Процедура УстановитьУсловноеОформление() + + БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); + +КонецПроцедуры + &НаСервере Процедура ОбновитьСписокЗадачНаСервере() БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список); + // Цвет просроченных задач зависит от значения текущей даты, + // поэтому нужно переинициализировать условное оформление. + УстановитьУсловноеОформление(); Элементы.Список.Обновить(); КонецПроцедуры diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Help/ru.html index 37332197d..b1487711e 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Help/ru.html +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Help/ru.html @@ -1,4 +1,4 @@ - +

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

                                          Для создания новой задачи можно воспользоваться одним из бизнес-процессов (например, Задание).

                                          Работа с задачами

                                          diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/ManagerModule.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/ManagerModule.bsl index 9c5bc718c..d5c0bd718 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/ManagerModule.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/ManagerModule.bsl @@ -5,9 +5,11 @@ //////////////////////////////////////////////////////////////////////////////// // Групповое изменение объектов. -// Возвращает список реквизитов, которые не нужно редактировать -// с помощью обработки группового изменения объектов. +// Возвращает реквизиты объекта, которые разрешается редактировать +// с помощью обработки группового изменения реквизитов. // +// Возвращаемое значение: +// Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; diff --git a/SSL/src/WebServices/AddressSystem/AddressSystem.mdo b/SSL/src/WebServices/AddressSystem/AddressSystem.mdo deleted file mode 100644 index af6eeb25e..000000000 --- a/SSL/src/WebServices/AddressSystem/AddressSystem.mdo +++ /dev/null @@ -1,480 +0,0 @@ - - - AddressSystem - - ru - Address system - - http://www.v8.1c.ru/ssl/AddressSystem - - XDTOPackage.АдресныйКлассификатор - - - XDTOPackage.КонтактнаяИнформация - - AddressSystem.1cws - 20 - - Ping - - ru - Ping - - - string - http://www.w3.org/2001/XMLSchema - - Ping - Managed - - Locale - - ru - Locale - - - string - http://www.w3.org/2001/XMLSchema - - true - - - ConfigurationName - - ru - Configuration name - - - string - http://www.w3.org/2001/XMLSchema - - - - - GetActualInfo - - ru - Get actual info - - - АдресРФ - http://www.v8.1c.ru/ssl/contactinfo - - true - GetActualInfo - Managed - - ID - - ru - ID - - - UUID - http://www.v8.1c.ru/ssl/AddressSystem - - - - Locale - - ru - Locale - - - string - http://www.w3.org/2001/XMLSchema - - true - - - ConfigurationName - - ru - Configuration name - - - string - http://www.w3.org/2001/XMLSchema - - - - - GetExtraInfo - - ru - Get extra info - - - ExtraInfo - http://www.v8.1c.ru/ssl/AddressSystem - - true - GetExtraInfo - Managed - - ID - - ru - ID - - - UUID - http://www.v8.1c.ru/ssl/AddressSystem - - - - Locale - - ru - Locale - - - string - http://www.w3.org/2001/XMLSchema - - true - - - ConfigurationName - - ru - Configuration name - - - string - http://www.w3.org/2001/XMLSchema - - - - - Autocomplete - - ru - Autocomplete - - Автоподбор уровня адресного классификатора - - PresentationList - http://www.v8.1c.ru/ssl/AddressSystem - - Autocomplete - Managed - - Parent - - ru - Parent - - - UUID - http://www.v8.1c.ru/ssl/AddressSystem - - true - - - Levels - - ru - Levels - - - Levels - http://www.v8.1c.ru/ssl/AddressSystem - - - - Text - - ru - Text - - - string - http://www.w3.org/2001/XMLSchema - - - - Limit - - ru - Limit - - - int - http://www.w3.org/2001/XMLSchema - - true - - - Locale - - ru - Locale - - - string - http://www.w3.org/2001/XMLSchema - - true - - - ConfigurationName - - ru - Configuration name - - - string - http://www.w3.org/2001/XMLSchema - - - - - Select - - ru - Select - - - PresentationList - http://www.v8.1c.ru/ssl/AddressSystem - - Select - Managed - - Parent - - ru - Parent - - - UUID - http://www.v8.1c.ru/ssl/AddressSystem - - true - - - Level - - ru - Level - - - int - http://www.w3.org/2001/XMLSchema - - - - Base - - ru - Base - - - UUID - http://www.v8.1c.ru/ssl/AddressSystem - - true - - - Sort - - ru - Sort - - - SortDirection - http://www.v8.1c.ru/ssl/AddressSystem - - true - - - Limit - - ru - Limit - - - int - http://www.w3.org/2001/XMLSchema - - true - - - Locale - - ru - Locale - - - string - http://www.w3.org/2001/XMLSchema - - true - - - ConfigurationName - - ru - Configuration name - - - string - http://www.w3.org/2001/XMLSchema - - - - - SelectByPostalCode - - ru - Select by postal code - - - PresentationList - http://www.v8.1c.ru/ssl/AddressSystem - - SelectByPostalCode - Managed - - PostalCode - - ru - Postal code - - - int - http://www.w3.org/2001/XMLSchema - - - - Levels - - ru - Levels - - - Levels - http://www.v8.1c.ru/ssl/AddressSystem - - - - Base - - ru - Base - - - UUID - http://www.v8.1c.ru/ssl/AddressSystem - - true - - - Sort - - ru - Sort - - - SortDirection - http://www.v8.1c.ru/ssl/AddressSystem - - true - - - Limit - - ru - Limit - - - int - http://www.w3.org/2001/XMLSchema - - true - - - Locale - - ru - Locale - - - string - http://www.w3.org/2001/XMLSchema - - true - - - ConfigurationName - - ru - Configuration name - - - string - http://www.w3.org/2001/XMLSchema - - - - - Analyze - - ru - Analyze - - - AddressAnalysisResult - http://www.v8.1c.ru/ssl/AddressSystem - - Analyze - Managed - - Values - - ru - Values - - - AddressList - http://www.v8.1c.ru/ssl/AddressSystem - - - - Locale - - ru - Locale - - - string - http://www.w3.org/2001/XMLSchema - - true - - - CheckAsKladr - - ru - Check as kladr - - - boolean - http://www.w3.org/2001/XMLSchema - - true - - - ConfigurationName - - ru - Configuration name - - - string - http://www.w3.org/2001/XMLSchema - - - - diff --git a/SSL/src/WebServices/AddressSystem/Module.bsl b/SSL/src/WebServices/AddressSystem/Module.bsl deleted file mode 100644 index 392d99613..000000000 --- a/SSL/src/WebServices/AddressSystem/Module.bsl +++ /dev/null @@ -1,245 +0,0 @@ -#Область СлужебныеПроцедурыИФункции - -// Метод Ping (http://www.v8.1c.ru/ssl/AddressSystem) -// -// Параметры: -// Locale - Строка - код языка, на котором ожидается результат и сообщения об ошибках. -// -Функция Ping(Locale, ConfigurationName) - - Данные = Новый Структура("Данные"); - АдресныйКлассификаторСлужебный.ЗаполнитьВерсиюПоставщикаДанныхВнутр(Данные); - - Возврат Данные.Данные; -КонецФункции - -// Метод GetActualInfo (http://www.v8.1c.ru/ssl/AddressSystem) -// -// Параметры: -// ID - UUID (http://www.v8.1c.ru/ssl/AddressSystem) - Идентификатор запрашиваемого адресного объекта. -// Locale - Строка - код языка, на котором ожидается результат и сообщения об ошибках. -// -// Возвращаемое значение: -// АдресРФ (http://www.v8.1c.ru/ssl/contactinfo) - XML адреса РФ. -// -Функция GetActualInfo(ID, Locale, ConfigurationName) - - СтруктураОбработки = Новый Структура("Данные"); - АдресныйКлассификаторСлужебный.ЗаполнитьАктуальныеАдресныеСведенияВнутр(СтруктураОбработки, ID); - - Возврат СтруктураОбработки.Данные; -КонецФункции - -// Метод GetExtraInfo (http://www.v8.1c.ru/ssl/AddressSystem) -// -// Параметры: -// ID - UUID (http://www.v8.1c.ru/ssl/AddressSystem) - Идентификатор запрашиваемого адресного объекта. -// Locale - Строка - код языка, на котором ожидается результат и сообщения об ошибках. -// -// Возвращаемое значение: -// ExtraInfo (http://www.v8.1c.ru/ssl/AddressSystem) -// -Функция GetExtraInfo(ID, Locale, ConfigurationName) - - СтруктураОбработки = Новый Структура("Данные", АдресныйКлассификаторСлужебный.СтруктураДополнительныхАдресныхСведений() ); - АдресныйКлассификаторСлужебный.ЗаполнитьДополнительныеАдресныеСведенияВнутр(СтруктураОбработки, ID); - - Результат = ФабрикаXDTO.Создать( АдресныйКлассификаторСлужебный.ПространствоИмен(), "ExtraInfo"); - Данные = СтруктураОбработки.Данные; - - Результат.OKATO = Данные.OKATO; - Результат.OKTMO = Данные.ОКТМО; - Результат.IFNSFL = Данные.КодИФНСФЛ; - Результат.IFNSUL = Данные.КодИФНСЮЛ; - Результат.TERRIFNSFL = Данные.КодУчасткаИФНСФЛ; - Результат.TERRIFNSUL = Данные.КодУчасткаИФНСЮЛ; - - Возврат Результат; -КонецФункции - -// Метод Autocomplete (http://www.v8.1c.ru/ssl/AddressSystem) -// -// Поиск производится как по полному совпадению (с учетом сокращений), так и по частичному. -// -// Параметры: -// Parent - UUID (http://www.v8.1c.ru/ssl/AddressSystem) - Идентификатор родительского объекта, может быть пуст. -// Text - Строка - Набранный пользователем текст. -// Levels - Levels (http://www.v8.1c.ru/ssl/AddressSystem) - Список используемых уровней. -// Limit - Число - Ограничение размера порции возвращаемой порции. -// Locale - Строка - код языка, на котором ожидается результат и сообщения об ошибках. -// -// Возвращаемое значение: -// PresentationList (http://www.v8.1c.ru/ssl/AddressSystem) - список вариантов. -// -Функция Autocomplete(Parent, Levels, Text, Limit, Locale, ConfigurationName) - - СтруктураОбработки = Новый Структура("Данные", АдресныйКлассификаторСлужебный.ТаблицаДанныхАвтоподбора() ); - - ДополнительныеПараметры = Новый Структура; - АдресныйКлассификаторСлужебный.ЗаполнитьСписокАвтоподбораЧастиАдресаВнутр(СтруктураОбработки, Text, Parent, Levels, ДополнительныеПараметры); - - Результат = СписокПредставлений(СтруктураОбработки.Данные, Неопределено, Неопределено, Неопределено, Неопределено); - - Возврат Результат; -КонецФункции - -// Метод Select (http://www.v8.1c.ru/ssl/AddressSystem) -// -// Параметры: -// Parent - UUID (http://www.v8.1c.ru/ssl/AddressSystem) - Идентификатор родительского объекта, может быть пуст. -// Level - Число - Требуемый уровень классификатора. -// Base - UUID (http://www.v8.1c.ru/ssl/AddressSystem) - Идентификатор объекта, с которого начинается порция -// данных сам объект не должен входить в выборку. -// Sort - SortDirection (http://www.v8.1c.ru/ssl/AddressSystem) -// - Строка - Режим. Определяет порядок сортировки по наименованию. -// Limit - Число - Размер порции возвращаемых порции. -// Locale - Строка - код языка, на котором ожидается результат и сообщения об ошибках. -// -// Возвращаемое значение: -// PresentationList (http://www.v8.1c.ru/ssl/AddressSystem) - список вариантов. -// -Функция Select(Parent, Level, Base, Sort, Limit, Locale, ConfigurationName) - - СтруктураОбработки = Новый Структура("Данные", АдресныйКлассификаторСлужебный.ТаблицаДанныхДляИнтерактивногоВыбора() ); - - ДополнительныеПараметры = Новый Структура; - Уровни = АдресныйКлассификаторПовтИсп.УровниКлассификатораФИАС(); - - АдресныйКлассификаторСлужебный.ЗаполнитьАдресаДляИнтерактивногоВыбораВнутр(СтруктураОбработки, Уровни, Parent, Level, ДополнительныеПараметры); - - // Только порция нужного размера. - Результат = СписокПредставлений(СтруктураОбработки.Данные, Неопределено, Base, Sort, Limit); - - Возврат Результат; -КонецФункции - -// Метод SelectByPostalCode (http://www.v8.1c.ru/ssl/AddressSystem) -// -// Параметры: -// PostalCode - Число - Почтовый индекс. -// Levels - Levels (http://www.v8.1c.ru/ssl/AddressSystem) - Список используемых уровней. -// Base - UUID (http://www.v8.1c.ru/ssl/AddressSystem) - Идентификатор объекта, с которого начинается порция -// данных. -// Sort - SortDirection (http://www.v8.1c.ru/ssl/AddressSystem) -// - Строка - Режим. Определяет порядок сортировки по наименованию сам объект не должен входить в -// выборку. -// Limit - Число - Размер порции возвращаемых порции. -// Locale - Строка - код языка, на котором ожидается результат и сообщения об ошибках. -// -// Возвращаемое значение: -// PresentationList (http://www.v8.1c.ru/ssl/AddressSystem) - список вариантов. -// -Функция SelectByPostalCode(PostalCode, Levels, Base, Sort, Limit, Locale, ConfigurationName) - - СтруктураОбработки = Новый Структура("Данные, ОбщаяЧастьПредставления", АдресныйКлассификаторСлужебный.ТаблицаДанныхДляВыбораПоПочтовомуИндексу() ); - - ДополнительныеПараметры = Новый Структура; - - АдресныйКлассификаторСлужебный.ЗаполнитьАдресаПоПочтовомуИндексуКлассификатораВнутр(СтруктураОбработки, PostalCode, Levels, ДополнительныеПараметры); - - // Только порция нужного размера. - Результат = СписокПредставлений(СтруктураОбработки.Данные, СтруктураОбработки.ОбщаяЧастьПредставления, Base, Sort, Limit); - - Возврат Результат; -КонецФункции - -// Метод Analyze (http://www.v8.1c.ru/ssl/AddressSystem) -// -// Параметры: -// Values - AddressList (http://www.v8.1c.ru/ssl/AddressSystem) - список адресов и уровней для проверки. -// Locale - Строка - код локализации для сообщениях об ошибке. -// -// Возвращаемое значение: -// AddressAnalysisResult (http://www.v8.1c.ru/ssl/AddressSystem) - результат анализа. -// -Функция Analyze(Values, Locale, CheckAsKladr, ConfigurationName) - - СтруктураОбработки = Новый Структура("Данные", Новый Массив); - - АдресаДляПроверки = Новый Массив; - Для Каждого АдресПроверки Из Values.ПолучитьСписок("Item") Цикл - АдресаДляПроверки.Добавить(Новый Структура("Адрес, Уровни", АдресПроверки.Address, АдресПроверки.Levels)); - КонецЦикла; - - АдресныйКлассификаторСлужебный.ЗаполнитьРезультатПроверкиАдресаПоКлассификаторуВнутр(СтруктураОбработки, АдресаДляПроверки); - - Результат = ФабрикаXDTO.Создать( ФабрикаXDTO.Тип(АдресныйКлассификаторСлужебный.ПространствоИмен(), "AddressAnalysisResult")); - ТипЭлементаПроверки = Результат.Свойства().Получить("Item").Тип; - ТипОшибкаАдреса = ТипЭлементаПроверки.Свойства.Получить("Error").Тип; - ТипВариантАдреса = ТипЭлементаПроверки.Свойства.Получить("Variant").Тип; - - Для Каждого РезультатПроверки Из СтруктураОбработки.Данные Цикл - ЭлементПроверки = Результат.Item.Добавить( ФабрикаXDTO.Создать(ТипЭлементаПроверки)); - - Для Каждого Ошибка Из РезультатПроверки.Ошибки Цикл - ОшибкаАдреса = ЭлементПроверки.Error.Добавить(ФабрикаXDTO.Создать(ТипОшибкаАдреса)); - ОшибкаАдреса.Key = Ошибка.Ключ; - ОшибкаАдреса.Text = Ошибка.Текст; - ОшибкаАдреса.Suggestion = Ошибка.Подсказка; - КонецЦикла; - - Для Каждого Вариант Из РезультатПроверки.Варианты Цикл - ОшибкаАдреса = ЭлементПроверки.Variant.Добавить(ФабрикаXDTO.Создать(ТипВариантАдреса)); - ОшибкаАдреса.ID = Ошибка.Идентификатор; - ОшибкаАдреса.PostalCode = Ошибка.Индекс; - ОшибкаАдреса.KLADRCode = Ошибка.КодКЛАДР; - КонецЦикла; - КонецЦикла; - - Возврат Результат; -КонецФункции - -// Генерирует Presentation List по части таблицы. -// -Функция СписокПредставлений(Таблица, Заголовок, ОсновнойЭлемент, Направление, РазмерПорции) - - ТипСписка = ФабрикаXDTO.Тип( АдресныйКлассификаторСлужебный.ПространствоИмен(), "PresentationList"); - Результат = ФабрикаXDTO.Создать(ТипСписка); - Список = Результат.ПолучитьСписок("Item"); - ТипЭлемента = Список.ВладеющееСвойство.Тип; - - ОбщееЧислоСтрок = Таблица.Количество(); - - Если Направление = "DESC" Тогда - Шаг = -1; - Предел = -1; - Иначе - Шаг = 1; - Предел = ОбщееЧислоСтрок; - КонецЕсли; - - Индекс = 0; - Если ЗначениеЗаполнено(ОсновнойЭлемент) Тогда - СтрокаОсновного = Таблица.Найти(Новый УникальныйИдентификатор(ОсновнойЭлемент), "Идентификатор"); - Если СтрокаОсновного <> Неопределено Тогда - Индекс = Таблица.Индекс(СтрокаОсновного) + Шаг; - КонецЕсли; - КонецЕсли; - - Порция = ?(ЗначениеЗаполнено(РазмерПорции), РазмерПорции, ОбщееЧислоСтрок); - - Пока Индекс <> Предел Цикл - СтрокаТаблицы = Таблица[Индекс]; - - Элемент = ФабрикаXDTO.Создать(ТипЭлемента); - Элемент.ID = СтрокаТаблицы.Идентификатор; - Элемент.Presentation = СтрокаТаблицы.Представление; - Список.Добавить(Элемент); - - Индекс = Индекс + Шаг; - - Порция = Порция - 1; - Если Порция = 0 Тогда - Прервать; - КонецЕсли; - - КонецЦикла; - - Если Заголовок <> Неопределено Тогда - Результат.Title = Заголовок; - КонецЕсли; - - Возврат Результат; -КонецФункции - -#КонецОбласти diff --git a/SSL/src/WebServices/EnterpriseDataExchange_1_0_1_1/Module.bsl b/SSL/src/WebServices/EnterpriseDataExchange_1_0_1_1/Module.bsl index 1a355881c..e7ec9599f 100644 --- a/SSL/src/WebServices/EnterpriseDataExchange_1_0_1_1/Module.bsl +++ b/SSL/src/WebServices/EnterpriseDataExchange_1_0_1_1/Module.bsl @@ -10,6 +10,13 @@ СообщениеОбОшибке = ""; + // Проверяем, что информационная база не является файловой. + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + СообщениеОбОшибке = НСтр("ru = 'Подключаемая информационная база является файловой, + |в связи с чем не поддерживает работу методов web-сервиса.'"); + Возврат Ложь; + КонецЕсли; + // Проверяем наличие прав для выполнения обмена. Попытка ОбменДаннымиСлужебный.ПроверитьВозможностьВыполненияОбменов(); @@ -80,11 +87,14 @@ СтруктураПараметров.ИдентификаторФайлаВоВременномХранилище = ОбменДаннымиСлужебный.ПодготовитьФайлДляЗагрузки(ИдентификаторФайла, СообщениеОбОшибке); СтруктураПараметров.ИмяWEBСервиса = "EnterpriseDataExchange_1_0_1_1"; - // Загружаем в информационную базу + // Загружаем в информационную базу. МассивПараметров = Новый Массив; МассивПараметров.Добавить(СтруктураПараметров); МассивПараметров.Добавить(СообщениеОбОшибке); - ФоновоеЗаданиеЗагрузкиДанных = ФоновыеЗадания.Выполнить("ОбменДаннымиСлужебный.ЗагрузитьДанныеXDTOВИнформационнуюБазу", МассивПараметров, Строка(Новый УникальныйИдентификатор())); + ФоновоеЗаданиеЗагрузкиДанных = ФоновыеЗадания.Выполнить("ОбменДаннымиСлужебный.ЗагрузитьДанныеXDTOВИнформационнуюБазу", + МассивПараметров, + Строка(Новый УникальныйИдентификатор()), + НСтр("ru = 'Загрузка данных в информационную базу через web-сервис ""Enterprise Data Exchange""'")); ИдентификаторФоновогоЗадания = Строка(ФоновоеЗаданиеЗагрузкиДанных.УникальныйИдентификатор); КонецФункции @@ -100,11 +110,14 @@ СтруктураПараметров.ИдентификаторФайлаВоВременномХранилище = Новый УникальныйИдентификатор(); СтруктураПараметров.ИмяWEBСервиса = "EnterpriseDataExchange_1_0_1_1"; - // Подготавливаем данные к выгрузке из информационной базы + // Подготавливаем данные к выгрузке из информационной базы. МассивПараметров = Новый Массив; МассивПараметров.Добавить(СтруктураПараметров); МассивПараметров.Добавить(СообщениеОбОшибке); - ФоновоеЗаданиеЗагрузкиДанных = ФоновыеЗадания.Выполнить("ОбменДаннымиСлужебный.ПодготовитьДанныеДляВыгрузкиИзИнформационнойБазы", МассивПараметров, Строка(Новый УникальныйИдентификатор())); + ФоновоеЗаданиеЗагрузкиДанных = ФоновыеЗадания.Выполнить("ОбменДаннымиСлужебный.ПодготовитьДанныеДляВыгрузкиИзИнформационнойБазы", + МассивПараметров, + Строка(Новый УникальныйИдентификатор()), + НСтр("ru = 'Подготовка к выгрузке данных из информационной базы через web-сервис ""Enterprise Data Exchange""'")); ИдентификаторФоновогоЗадания = Строка(ФоновоеЗаданиеЗагрузкиДанных.УникальныйИдентификатор); КонецФункции diff --git a/SSL/src/WebServices/EnterpriseDataUpload_1_0_1_1/Module.bsl b/SSL/src/WebServices/EnterpriseDataUpload_1_0_1_1/Module.bsl index a17493546..25123ab77 100644 --- a/SSL/src/WebServices/EnterpriseDataUpload_1_0_1_1/Module.bsl +++ b/SSL/src/WebServices/EnterpriseDataUpload_1_0_1_1/Module.bsl @@ -10,6 +10,13 @@ СообщениеОбОшибке = ""; + // Проверяем, что информационная база не является файловой. + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + СообщениеОбОшибке = НСтр("ru = 'Подключаемая информационная база является файловой, + |в связи с чем не поддерживает работу методов веб-сервиса.'"); + Возврат Ложь; + КонецЕсли; + // Проверяем наличие прав для выполнения обмена. Попытка ОбменДаннымиСлужебный.ПроверитьВозможностьВыполненияОбменов(); @@ -46,11 +53,14 @@ СтруктураПараметров.ИдентификаторФайлаВоВременномХранилище = ОбменДаннымиСлужебный.ПодготовитьФайлДляЗагрузки(ИдентификаторФайла, СообщениеОбОшибке); СтруктураПараметров.ИмяWEBСервиса = "EnterpriseDataUpload_1_0_1_1"; - // Загружаем в информационную базу + // Загружаем в информационную базу. МассивПараметров = Новый Массив; МассивПараметров.Добавить(СтруктураПараметров); МассивПараметров.Добавить(СообщениеОбОшибке); - ФоновоеЗаданиеЗагрузкиДанных = ФоновыеЗадания.Выполнить("ОбменДаннымиСлужебный.ЗагрузитьДанныеXDTOВИнформационнуюБазу", МассивПараметров, Строка(Новый УникальныйИдентификатор())); + ФоновоеЗаданиеЗагрузкиДанных = ФоновыеЗадания.Выполнить("ОбменДаннымиСлужебный.ЗагрузитьДанныеXDTOВИнформационнуюБазу", + МассивПараметров, + Строка(Новый УникальныйИдентификатор()), + НСтр("ru = 'Загрузка данных в информационную базу через web-сервис ""Enterprise Data Upload""'")); ИдентификаторДлительнойОперации = Строка(ФоновоеЗаданиеЗагрузкиДанных.УникальныйИдентификатор); КонецФункции diff --git a/SSL/src/WebServices/Exchange/Module.bsl b/SSL/src/WebServices/Exchange/Module.bsl index 52ceb4565..e372e1afb 100644 --- a/SSL/src/WebServices/Exchange/Module.bsl +++ b/SSL/src/WebServices/Exchange/Module.bsl @@ -416,7 +416,7 @@ Отбор.Вставить("Ключ", КлючФоновогоЗадания); Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); Если ФоновыеЗадания.ПолучитьФоновыеЗадания (Отбор).Количество() = 1 Тогда - ВызватьИсключение Нстр("ru = 'Синхронизация данных уже выполняется.'"); + ВызватьИсключение НСтр("ru = 'Синхронизация данных уже выполняется.'"); КонецЕсли; ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВСервисПередачиФайлов", @@ -479,7 +479,7 @@ Отбор.Вставить("Ключ", КлючФоновогоЗадания); Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); Если ФоновыеЗадания.ПолучитьФоновыеЗадания (Отбор).Количество() = 1 Тогда - ВызватьИсключение Нстр("ru = 'Синхронизация данных уже выполняется.'"); + ВызватьИсключение НСтр("ru = 'Синхронизация данных уже выполняется.'"); КонецЕсли; ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.ВыполнитьЗагрузкуДляУзлаИнформационнойБазыИзСервисаПередачиФайлов", 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 55772e9f4..efd685693 100644 --- a/SSL/src/WebServices/Exchange_2_0_1_6/Module.bsl +++ b/SSL/src/WebServices/Exchange_2_0_1_6/Module.bsl @@ -448,7 +448,7 @@ Отбор.Вставить("Ключ", КлючФоновогоЗадания); Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); Если ФоновыеЗадания.ПолучитьФоновыеЗадания (Отбор).Количество() = 1 Тогда - ВызватьИсключение Нстр("ru = 'Синхронизация данных уже выполняется.'"); + ВызватьИсключение НСтр("ru = 'Синхронизация данных уже выполняется.'"); КонецЕсли; ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВСервисПередачиФайлов", @@ -511,7 +511,7 @@ Отбор.Вставить("Ключ", КлючФоновогоЗадания); Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); Если ФоновыеЗадания.ПолучитьФоновыеЗадания (Отбор).Количество() = 1 Тогда - ВызватьИсключение Нстр("ru = 'Синхронизация данных уже выполняется.'"); + ВызватьИсключение НСтр("ru = 'Синхронизация данных уже выполняется.'"); КонецЕсли; ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.ВыполнитьЗагрузкуДляУзлаИнформационнойБазыИзСервисаПередачиФайлов", diff --git a/SSL/src/XDTOPackages/EnterpriseData_1_0_1/EnterpriseData_1_0_1.mdo b/SSL/src/XDTOPackages/EnterpriseData_1_0_3/EnterpriseData_1_0_3.mdo similarity index 79% rename from SSL/src/XDTOPackages/EnterpriseData_1_0_1/EnterpriseData_1_0_1.mdo rename to SSL/src/XDTOPackages/EnterpriseData_1_0_3/EnterpriseData_1_0_3.mdo index 14e4df578..086e700c3 100644 --- a/SSL/src/XDTOPackages/EnterpriseData_1_0_1/EnterpriseData_1_0_1.mdo +++ b/SSL/src/XDTOPackages/EnterpriseData_1_0_3/EnterpriseData_1_0_3.mdo @@ -1,9 +1,9 @@ - EnterpriseData_1_0_1 + EnterpriseData_1_0_3 ru - EnterpriseData 1.0.1 + EnterpriseData 1.0.3 http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.0 diff --git a/SSL/src/XDTOPackages/EnterpriseData_1_0_1/Package.xdto b/SSL/src/XDTOPackages/EnterpriseData_1_0_3/Package.xdto similarity index 99% rename from SSL/src/XDTOPackages/EnterpriseData_1_0_1/Package.xdto rename to SSL/src/XDTOPackages/EnterpriseData_1_0_3/Package.xdto index 602b99252..581ed27ef 100644 --- a/SSL/src/XDTOPackages/EnterpriseData_1_0_1/Package.xdto +++ b/SSL/src/XDTOPackages/EnterpriseData_1_0_3/Package.xdto @@ -332,6 +332,7 @@ + @@ -1174,6 +1175,11 @@ + + + + + @@ -2022,6 +2028,7 @@ + @@ -2040,6 +2047,11 @@ + + + + + @@ -2064,6 +2076,7 @@ + @@ -2194,6 +2207,7 @@ + @@ -2404,6 +2418,7 @@ + @@ -2448,6 +2463,7 @@ + @@ -3079,6 +3095,10 @@ + + + + @@ -3257,6 +3277,10 @@ + + + + @@ -3395,6 +3419,8 @@ + + @@ -3740,6 +3766,9 @@ + + + diff --git a/SSL/src/XDTOPackages/EnterpriseData_1_1_3/EnterpriseData_1_1_3.mdo b/SSL/src/XDTOPackages/EnterpriseData_1_1_3/EnterpriseData_1_1_3.mdo new file mode 100644 index 000000000..3c895261a --- /dev/null +++ b/SSL/src/XDTOPackages/EnterpriseData_1_1_3/EnterpriseData_1_1_3.mdo @@ -0,0 +1,9 @@ + + + EnterpriseData_1_1_3 + + ru + EnterpriseData 1.1.3 + + http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.1 + diff --git a/SSL/src/XDTOPackages/EnterpriseData_1_1_3/Package.xdto b/SSL/src/XDTOPackages/EnterpriseData_1_1_3/Package.xdto new file mode 100644 index 000000000..82ef95ac6 --- /dev/null +++ b/SSL/src/XDTOPackages/EnterpriseData_1_1_3/Package.xdto @@ -0,0 +1,4582 @@ + + + + (((0[1-9]{1}|[1-2]{1}[0-9]{1})\.(0[1-9]{1}|1[0-2]{1}))|((30)\.(01|0[3-9]{1}|1[0-2]{1}))|((31)\.(01|03|05|07|08|10|12)))\.(18[0-9]{2}|19[0-9]{2}|20[0-9]{2}) + + + + + + + + + 0 + + + + Первая + Вторая + Третья + Четвертая + Пятая + Шестая + Седьмая + Восьмая + Девятая + Десятая + Отдельная + + + ВПользуПоставщика + НаПрочиеДоходы + + + ЗаСчетСтороннейКомпании + ЗаСчетПоставщика + НаПрочиеРасходы + + + Расчетный + Депозитный + Ссудный + ЧековыеКнижки + Аккредитивы + Иной + + + Билеты + Путевки + ПочтовыеМарки + ТалоныНаГСМ + Прочее + + + СПокупателем + СПоставщиком + СКомиссионером + СКомитентом + СКомитентомНаЗакупку + СКомиссионеромНаЗакупку + Прочее + + + ПочтовыйАдрес + ЮридическийАдрес + ФактическийАдрес + Телефон + ТелефонДомашний + ТелефонРабочий + Факс + ВебСтраница + АдресЭлектроннойПочты + ПользовательскаяКИДругое + ПользовательскаяКИТелефон + ПользовательскаяКИАдрес + ПользовательскаяКИАдресЭлектроннойПочты + ПользовательскаяКИВебСтраница + ПользовательскаяКИФакс + + + Пиво + АлкогольнаяПродукция + СпиртосодержащаяПищеваяПродукция + СпиртосодержащаяНеПищеваяПродукция + + + НематериальныйАктив + РасходыНаНИОКР + + + ВозвратОтКлиента + ВозвратОтКомиссионера + ВозвратОтРозничногоПокупателя + + + ВозвратПоставщику + ВозвратКомитенту + + + ВыпускПродукцииНаСклад + ВыпускПродукцииВПодразделение + + + СогласованноеИзменение + ИсправлениеОшибки + + + СписаниеЗадолженности + ПереносЗадолженности + ПроведениеВзаимозачета + + + ПолучениеНаличных + Инкассация + + + ОплатаОтКлиентаПлатежнойКартой + ВозвратОплатыКлиентуНаПлатежнуюКарту + + + ПокупкаУПоставщика + ПриемНаКомиссию + ЗакупкаПоИмпорту + + + ВзносНаличными + Инкассация + + + РеализацияКлиенту + ПередачаНаКомиссию + ОтгрузкаБезПереходаПравСобственности_ВПути + ОтгрузкаБезПереходаПравСобственности_Реализовано + + + ПрочееСписание + ВнутренняяПередача + + + Сборка + Разборка + + + СПоставщиком + СПокупателем + КредитыИЗаймы + Прочее + + + Долг + Аванс + + + КраткосрочныеКредиты + ПроцентыПоКраткосрочнымКредитам + КраткосрочныеЗаймы + ПроцентыПоКраткосрочнымЗаймам + ДолгосрочныеКредиты + ПроцентыПоДолгосрочнымКредитам + ДолгосрочныеЗаймы + ПроцентыПоДолгосрочнымЗаймам + + + Займы + Подотчет + + + НаТовар + ПодарочнаяКарта + Дисконтная + + + ПринятиеКУчету + ВводВЭксплуатацию + ПринятиеКУчетуСВводомВЭксплуатацию + НачислениеАмортизации + ВнутреннееПеремещение + ТекущийРемонт + СреднийРемонт + КапитальныйРемонт + Переоценка + Реконструкция + Достройка + Дооборудование + ЧастичнаяЛиквидация + Модернизация + ПодготовкаКПередаче + Передача + Списание + Прочее + + + НаРеализацию + Корректировочный + НаАванс + НаАвансКомитента + СуммовыеРазницы + НалоговыйАгент + НаПоступление + + + ТОРГ12 + АктНаПередачуПрав + + + Здания + Сооружения + МашиныИОборудование + ОфисноеОборудование + ТранспортныеСредства + ПроизводственныйИХозяйственныйИнвентарь + РабочийСкот + ПродуктивныйСкот + МноголетниеНасаждения + ЗемельныеУчастки + ОбъектыПриродопользования + КапитальныеВложенияВАрендованноеИмущество + ПрочееИмуществоТребующееГосударственнойРегистрации + ДругиеВидыОсновныхСредств + + + ПродажаОблагаетсяНДС + ПродажаНеОблагаетсяНДС + ПродажаНаЭкспорт + ПродажаОблагаетсяЕНВД + ПоФактическомуИспользованию + НалоговыйАгентПоНДС + + + Мужской + Женский + + + НачислениеАмортизации + ВключениеВРасходыПриПринятииКУчету + СтоимостьНеВключаетсяВРасходы + + + НачислениеАмортизации + НачислениеИзноса + СтоимостьНеПогашается + НачислениеИзносаПоЕНАОФ + СписаниеПриПринятииКУчету + + + НаБумажномНосителе + ВЭлектронномВиде + + + Линейный + УменьшаемогоОстатка + ПропорциональноОбъемуПродукции + + + Линейный + Нелинейный + ПоЕНАОФ + + + Линейный + УменьшаемогоОстатка + ПоСуммеЧиселЛетИспользования + ПропорциональноОбъемуПродукции + ПоЕНАОФ + ПоЕНАОФНа1000кмПробега + + + ПриобретениеЗаПлату + Строительство + ВкладВУставныйКапитал + ВОбменНаДругоеИмущество + БезвозмездноеПоступление + ПоДоговоруАренды + ПоступлениеВДоверительноеУправление + ВкладВСовместнуюДеятельность + Иное + + + ПроцентОтСуммыПродажи + ПроцентОтРазницыСуммПродажиИПоступления + НеРассчитывается + + + НДС4 + НДС4_104 + НДС18 + НДС18_118 + НДС2 + НДС2_102 + НДС10 + НДС10_110 + НДС0 + БезНДС + + + НеСогласована + Согласована + КОплате + Отклонена + + + СырьеИМатериалы + ПокупныеПолуфабрикатыИКомплектующие + ВозвратнаяТара + Топливо + ЗапасныеЧасти + ПрочиеМатериалы + СтроительныеМатериалы + ИнвентарьИХозяйственныеПринадлежности + СпецоснасткаИСпецодеждаНаСкладе + СобственныеТовары + ПокупныеИзделия + ГотоваяПродукция + КомиссионныеТовары + ДавальческиеСырьеИМатериалы + + + Товар + Услуга + Работа + МногооборотнаяТара + + + Аккредитив + БанковскийОрдер + ИнкассовоеПоручение + ПлатежныйОрдер + ПлатежноеПоручение + ПлатежноеТребование + + + Оптовый + Розничный + НеавтоматизированнаяТорговаяТочка + + + Собственные + Агентские + + + Наличная + Безналичная + ПлатежнаяКарта + + + ЮридическоеЛицо + ФизическоеЛицо + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/XDTOPackages/EnterpriseData_1_2_1/EnterpriseData_1_2_1.mdo b/SSL/src/XDTOPackages/EnterpriseData_1_2_1/EnterpriseData_1_2_1.mdo new file mode 100644 index 000000000..82297ea69 --- /dev/null +++ b/SSL/src/XDTOPackages/EnterpriseData_1_2_1/EnterpriseData_1_2_1.mdo @@ -0,0 +1,9 @@ + + + EnterpriseData_1_2_1 + + ru + EnterpriseData 1.2.1 + + http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.2 + diff --git a/SSL/src/XDTOPackages/EnterpriseData_1_2_1/Package.xdto b/SSL/src/XDTOPackages/EnterpriseData_1_2_1/Package.xdto new file mode 100644 index 000000000..f1d1265f0 --- /dev/null +++ b/SSL/src/XDTOPackages/EnterpriseData_1_2_1/Package.xdto @@ -0,0 +1,4571 @@ + + + + (((0[1-9]{1}|[1-2]{1}[0-9]{1})\.(0[1-9]{1}|1[0-2]{1}))|((30)\.(01|0[3-9]{1}|1[0-2]{1}))|((31)\.(01|03|05|07|08|10|12)))\.(18[0-9]{2}|19[0-9]{2}|20[0-9]{2}) + + + + + + + + + 0 + + + + Первая + Вторая + Третья + Четвертая + Пятая + Шестая + Седьмая + Восьмая + Девятая + Десятая + Отдельная + + + ВПользуПоставщика + НаПрочиеДоходы + + + ЗаСчетСтороннейКомпании + ЗаСчетПоставщика + НаПрочиеРасходы + + + Расчетный + Депозитный + Ссудный + ЧековыеКнижки + Аккредитивы + Иной + + + Билеты + Путевки + ПочтовыеМарки + ТалоныНаГСМ + Прочее + + + СПокупателем + СПоставщиком + СКомиссионером + СКомитентом + СКомитентомНаЗакупку + СКомиссионеромНаЗакупку + Прочее + + + ПочтовыйАдрес + ЮридическийАдрес + ФактическийАдрес + Телефон + ТелефонДомашний + ТелефонРабочий + Факс + ВебСтраница + АдресЭлектроннойПочты + ПользовательскаяКИДругое + ПользовательскаяКИТелефон + ПользовательскаяКИАдрес + ПользовательскаяКИАдресЭлектроннойПочты + ПользовательскаяКИВебСтраница + ПользовательскаяКИФакс + + + Пиво + АлкогольнаяПродукция + СпиртосодержащаяПищеваяПродукция + СпиртосодержащаяНеПищеваяПродукция + + + НематериальныйАктив + РасходыНаНИОКР + + + ВозвратОтКлиента + ВозвратОтКомиссионера + ВозвратОтРозничногоПокупателя + + + ВозвратПоставщику + ВозвратКомитенту + + + ВыпускПродукцииНаСклад + ВыпускПродукцииВПодразделение + + + СогласованноеИзменение + ИсправлениеОшибки + + + СписаниеЗадолженности + ПереносЗадолженности + ПроведениеВзаимозачета + + + ПолучениеНаличных + Инкассация + + + ОплатаОтКлиентаПлатежнойКартой + ВозвратОплатыКлиентуНаПлатежнуюКарту + + + ПокупкаУПоставщика + ПриемНаКомиссию + ЗакупкаПоИмпорту + + + ВзносНаличными + Инкассация + + + РеализацияКлиенту + ПередачаНаКомиссию + ОтгрузкаБезПереходаПравСобственности_ВПути + ОтгрузкаБезПереходаПравСобственности_Реализовано + + + ПрочееСписание + ВнутренняяПередача + + + Сборка + Разборка + + + СПоставщиком + СПокупателем + КредитыИЗаймы + Прочее + + + Долг + Аванс + + + КраткосрочныеКредиты + ПроцентыПоКраткосрочнымКредитам + КраткосрочныеЗаймы + ПроцентыПоКраткосрочнымЗаймам + ДолгосрочныеКредиты + ПроцентыПоДолгосрочнымКредитам + ДолгосрочныеЗаймы + ПроцентыПоДолгосрочнымЗаймам + + + Займы + Подотчет + + + НаТовар + ПодарочнаяКарта + Дисконтная + + + ПринятиеКУчету + ВводВЭксплуатацию + ПринятиеКУчетуСВводомВЭксплуатацию + НачислениеАмортизации + ВнутреннееПеремещение + ТекущийРемонт + СреднийРемонт + КапитальныйРемонт + Переоценка + Реконструкция + Достройка + Дооборудование + ЧастичнаяЛиквидация + Модернизация + ПодготовкаКПередаче + Передача + Списание + Прочее + + + НаРеализацию + Корректировочный + НаАванс + НаАвансКомитента + СуммовыеРазницы + НалоговыйАгент + НаПоступление + + + ТОРГ12 + АктНаПередачуПрав + + + Здания + Сооружения + МашиныИОборудование + ОфисноеОборудование + ТранспортныеСредства + ПроизводственныйИХозяйственныйИнвентарь + РабочийСкот + ПродуктивныйСкот + МноголетниеНасаждения + ЗемельныеУчастки + ОбъектыПриродопользования + КапитальныеВложенияВАрендованноеИмущество + ПрочееИмуществоТребующееГосударственнойРегистрации + ДругиеВидыОсновныхСредств + + + ПродажаОблагаетсяНДС + ПродажаНеОблагаетсяНДС + ПродажаНаЭкспорт + ПродажаОблагаетсяЕНВД + ПоФактическомуИспользованию + НалоговыйАгентПоНДС + + + Мужской + Женский + + + НачислениеАмортизации + ВключениеВРасходыПриПринятииКУчету + СтоимостьНеВключаетсяВРасходы + + + НачислениеАмортизации + НачислениеИзноса + СтоимостьНеПогашается + НачислениеИзносаПоЕНАОФ + СписаниеПриПринятииКУчету + + + НаБумажномНосителе + ВЭлектронномВиде + + + Линейный + УменьшаемогоОстатка + ПропорциональноОбъемуПродукции + + + Линейный + Нелинейный + ПоЕНАОФ + + + Линейный + УменьшаемогоОстатка + ПоСуммеЧиселЛетИспользования + ПропорциональноОбъемуПродукции + ПоЕНАОФ + ПоЕНАОФНа1000кмПробега + + + ПриобретениеЗаПлату + Строительство + ВкладВУставныйКапитал + ВОбменНаДругоеИмущество + БезвозмездноеПоступление + ПоДоговоруАренды + ПоступлениеВДоверительноеУправление + ВкладВСовместнуюДеятельность + Иное + + + ПроцентОтСуммыПродажи + ПроцентОтРазницыСуммПродажиИПоступления + НеРассчитывается + + + НДС4 + НДС4_104 + НДС18 + НДС18_118 + НДС2 + НДС2_102 + НДС10 + НДС10_110 + НДС0 + БезНДС + + + НеСогласована + Согласована + КОплате + Отклонена + + + СырьеИМатериалы + ПокупныеПолуфабрикатыИКомплектующие + ВозвратнаяТара + Топливо + ЗапасныеЧасти + ПрочиеМатериалы + СтроительныеМатериалы + ИнвентарьИХозяйственныеПринадлежности + СпецоснасткаИСпецодеждаНаСкладе + СобственныеТовары + ПокупныеИзделия + ГотоваяПродукция + КомиссионныеТовары + ДавальческиеСырьеИМатериалы + + + Товар + Услуга + Работа + МногооборотнаяТара + + + Аккредитив + БанковскийОрдер + ИнкассовоеПоручение + ПлатежныйОрдер + ПлатежноеПоручение + ПлатежноеТребование + + + Оптовый + Розничный + НеавтоматизированнаяТорговаяТочка + + + Собственные + Агентские + + + Наличная + Безналичная + ПлатежнаяКарта + + + ЮридическоеЛицо + ФизическоеЛицо + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file
                                Тип макета

                                Программа

                                .mxl 1С:Предприятие - Работа с файлами
                                .doc